diff --git a/.eslintignore b/.eslintignore index e6e7eedb6..4ecbd8777 100755 --- a/.eslintignore +++ b/.eslintignore @@ -24,3 +24,4 @@ packages/core/database/src/sql-parser/index.js **/.dumi/tmp-test **/.dumi/tmp-production packages/core/cli/templates/plugin/src/client/*.tpl +packages/app/client/src/.plugins diff --git a/.github/workflows/build-docker-image.yml b/.github/workflows/build-docker-image.yml index cc34d3860..48de4c7c7 100644 --- a/.github/workflows/build-docker-image.yml +++ b/.github/workflows/build-docker-image.yml @@ -24,7 +24,7 @@ jobs: runs-on: ubuntu-latest services: verdaccio: - image: verdaccio/verdaccio + image: verdaccio/verdaccio:latest ports: - 4873:4873 steps: diff --git a/.gitignore b/.gitignore index 1ce5dc9d4..f60938b18 100644 --- a/.gitignore +++ b/.gitignore @@ -25,3 +25,4 @@ storage/duplicator/* **/.dumi/tmp-test **/.dumi/tmp-production packages/core/client/docs/contributing.md +packages/core/app/client/src/.plugins \ No newline at end of file diff --git a/.prettierignore b/.prettierignore index 439b62d59..869d9d40f 100644 --- a/.prettierignore +++ b/.prettierignore @@ -14,3 +14,4 @@ packages/core/client/src/locale/* **/.dumi/tmp-test **/.dumi/tmp-production packages/core/cli/templates/plugin/src/client/*.tpl +packages/app/client/src/.plugins diff --git a/Dockerfile b/Dockerfile index 9b714f7e1..ad2fb1e0d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -35,14 +35,6 @@ 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 . @@ -60,4 +52,3 @@ RUN mkdir -p /app/nocobase/storage/uploads/ && echo "$COMMIT_HASH" >> /app/nocob COPY ./docker/nocobase/docker-entrypoint.sh /app/ CMD ["/app/docker-entrypoint.sh"] - diff --git a/README.md b/README.md index a3a89d65a..b537c0e3f 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,7 @@ NocoBase is in early stage of development and is subject to frequent changes, pl ## Recent major updates +- [v0.12: New plugin build tool - 2023/08/01](https://docs.nocobase.com/welcome/release/v12-changelog) - [v0.11: New client application, plugin and router - 2023/07/08](http://docs.nocobase.com/welcome/release/v11-changelog) - [v0.10: Update instructions - 2023/06/23](http://docs.nocobase.com/welcome/release/v10-changelog) diff --git a/README.zh-CN.md b/README.zh-CN.md index fb56de5df..b503767c1 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -8,8 +8,9 @@ NocoBase 正处在早期开发阶段,可能变动频繁,请谨慎用于生 ## 最近重要更新 -- [v0.11: New client application, plugin and router - 2023/07/08](http://docs-cn.nocobase.com/welcome/release/v11-changelog) -- [v0.10: Update instructions - 2023/06/23](http://docs-cn.nocobase.com/welcome/release/v10-changelog) +- [v0.12: 全新的插件构建工具 - 2023/08/01](https://docs-cn.nocobase.com/welcome/release/v12-changelog) +- [v0.11: 全新的客户端 Application、Plugin 和 Router - 2023/07/08](https://docs-cn.nocobase.com/welcome/release/v11-changelog) +- [v0.10: Update instructions - 2023/06/23](https://docs-cn.nocobase.com/welcome/release/v10-changelog) ## 我们在招聘 diff --git a/docker/nocobase/nocobase.conf b/docker/nocobase/nocobase.conf index b045629f5..fc5d3fc2a 100644 --- a/docker/nocobase/nocobase.conf +++ b/docker/nocobase/nocobase.conf @@ -1,7 +1,7 @@ server { listen 80; server_name _; - root /app/nocobase/packages/app/client/dist; + root /app/nocobase/node_modules/@nocobase/app/dist/client; index index.html; client_max_body_size 20M; @@ -29,7 +29,7 @@ server { } location / { - root /app/nocobase/packages/app/client/dist; + root /app/nocobase/node_modules/@nocobase/app/dist/client; try_files $uri $uri/ /index.html; add_header Last-Modified $date_gmt; add_header Cache-Control 'no-store, no-cache'; diff --git a/docs/config.ts b/docs/config.ts index ce2345eda..e069be89b 100644 --- a/docs/config.ts +++ b/docs/config.ts @@ -84,8 +84,9 @@ const sidebar = { }, // '/welcome/release/index', // '/welcome/release/v08-changelog', - '/welcome/release/v10-changelog', + '/welcome/release/v12-changelog', '/welcome/release/v11-changelog', + '/welcome/release/v10-changelog', ], }, { diff --git a/docs/en-US/development/deps.md b/docs/en-US/development/deps.md new file mode 100644 index 000000000..375ce6d96 --- /dev/null +++ b/docs/en-US/development/deps.md @@ -0,0 +1,105 @@ +# Dependency management + +The dependencies of the plugin are divided into its own dependencies and global dependencies. Global dependencies are provided by `@nocobase/server` and `@nocobase/client`, and will not be packaged into the plugin product. Its own dependencies will be packaged into the product. + +Because the dependencies of the plugin itself will be packaged into the product (including the npm packages that the server depends on, which will also be packaged into `dist/node_modules`), when developing the plugin, all dependencies should be placed in `devDependencies`. + + +When installing the following dependencies, pay attention to the **version** and keep consistent with `@nocobase/server` and `@nocobase/client`. + + +```js +// nocobase +'@nocobase/acl', +'@nocobase/actions', +'@nocobase/auth', +'@nocobase/cache', +'@nocobase/client', +'@nocobase/database', +'@nocobase/evaluators', +'@nocobase/logger', +'@nocobase/resourcer', +'@nocobase/sdk', +'@nocobase/server', +'@nocobase/test', +'@nocobase/utils', + +// @nocobase/auth +'jsonwebtoken', + +// @nocobase/cache +'cache-manager', +'cache-manager-fs-hash', + +// @nocobase/database +'sequelize', +'umzug', +'async-mutex', + +// @nocobase/evaluators +'@formulajs/formulajs', +'mathjs', + +// @nocobase/logger +'winston', +'winston-daily-rotate-file', + +// koa +'koa', +'@koa/cors', +'@koa/router', +'multer', +'@koa/multer', +'koa-bodyparser', +'koa-static', +'koa-send', + +// react +'react', +'react-dom', +'react/jsx-runtime', + +// react-router +'react-router', +'react-router-dom', + +// antd +'antd', +'antd-style', +'@ant-design/icons', +'@ant-design/cssinjs', + +// i18next +'i18next', +'react-i18next', + +// dnd-kit +'@dnd-kit/accessibility', +'@dnd-kit/core', +'@dnd-kit/modifiers', +'@dnd-kit/sortable', +'@dnd-kit/utilities', + +// formily +'@formily/antd-v5', +'@formily/core', +'@formily/react', +'@formily/json-schema', +'@formily/path', +'@formily/validator', +'@formily/shared', +'@formily/reactive', +'@formily/reactive-react', + +// utils +'dayjs', +'mysql2', +'pg', +'pg-hstore', +'sqlite3', +'supertest', +'axios', +'@emotion/css', +'ahooks', +'lodash' +``` diff --git a/docs/en-US/welcome/release/v12-changelog.md b/docs/en-US/welcome/release/v12-changelog.md new file mode 100644 index 000000000..740132372 --- /dev/null +++ b/docs/en-US/welcome/release/v12-changelog.md @@ -0,0 +1,181 @@ +## v0.12: New plugin build tool + +## New Features + +- New plugin build tool. The built plugins will be able to be used directly on the production environment without the need for a second build. + +## Application upgrades + +### Upgrade of Docker installation + +No change, refer to [Docker Image Upgrade Guide](/welcome/getting-started/upgrading/docker-compose) for upgrade. + +### Upgrading source code installation + +The plugin build tool has been freshly upgraded, and the cache needs to be cleared after pulling new sources. + +```bash +git pull # Pull the new source code. +yarn clean # Clear the cache. +``` + +For more details, see [Git source upgrade guide](/welcome/getting-started/upgrading/git-clone). + +### Upgrading a create-nocobase-app installation + +Redownload the new version via `yarn create` and update the .env configuration, see [major version upgrade guide](/welcome/getting-started/upgrading/create-nocobase-app#Major version upgrade) for more details. + +## Incompatible changes + +### @nocobase/app-client and @nocobase/app-server merged into @nocobase-app + +Apps installed via create-nocobase-app no longer have a packages/app directory, and custom code in packages/app needs to be moved to the custom plugin. + +### The dist/client path of the app has changed. + +If you are configuring nginx yourself, you will need to make a similar adjustment + +```diff +server { +- root /app/nocobase/packages/app/client/dist; ++ root /app/nocobase/node_modules/@nocobase/app/dist/client; + + location / { +- root /app/nocobase/packages/app/client/dist; ++ root /app/nocobase/node_modules/@nocobase/app/dist/client; + try_files $uri $uri/ /index.html; + add_header Last-Modified $date_gmt; + add_header Cache-Control 'no-store, no-cache'; + if_modified_since off; + expires off; + etag off; + } +} +``` + +### Third party plugins need to be rebuilt + +Refer to the third-party plugin upgrade guide below + +## Third-party plugin upgrade guide + +### The plugin directory must have both `src/client` and `src/server` directories. + +```js +// src/client/index.ts +import { Plugin } from '@nocobase/client'; + +class MyPlugin extends Plugin { + async load() { + // ... + } +} + +export default MyPlugin; +``` + +```js +// src/server/index.ts +import { Plugin } from '@nocobase/server'; + +class MyPlugin extends Plugin { + async load() { + // ... + } +} + +export default MyPlugin; +``` + +Specific demo code can be referred to: [sample-hello](https://github.com/nocobase/nocobase/tree/main/packages/samples/hello) + +### Plugin's multilingual placement `src/locale` directory + +Both frontend and backend, multi-language translation files are placed in the `src/locale` directory, so the plugin doesn't need to load multi-language packages by itself. + +### Adjustment of plugin dependencies + +The dependencies of the plugin are divided into its own dependencies and global dependencies. Global dependencies are directly used globally and will not be packaged into the plugin product, while its own dependencies will be packaged into the product. After the plug-in is built, the production environment is plug-and-play, and there is no need to install dependencies or build twice. Adjustments to plugin dependencies include: + +- Put `@nocobase/*` related packages into `peerDependencies` and specify the version number as `0.x`; +- Place other dependencies in `devDependencies`, not `dependencies`, as the plugin will extract all the dependencies required by the production environment after packaging. + + +```diff +{ + "devDependencies": { + "@formily/react": "2.x", + "@formily/shared": "2.x", + "ahooks": "3.x", + "antd": "5.x", + "dayjs": "1.x", + "i18next": "22.x", + "react": "18.x", + "react-dom": "18.x", + "react-i18next": "11.x" + }, + "peerDependencies": { + "@nocobase/actions": "0.x", + "@nocobase/client": "0.x", + "@nocobase/database": "0.x", + "@nocobase/resourcer": "0.x", + "@nocobase/server": "0.x", + "@nocobase/test": "0.x", + "@nocobase/utils": "0.x" + } +} +``` + +### The output path of the plugin has been changed from `lib` to `dist` + +dist directory structure + +```bash +|- dist + |- client # Client-side, umd + |- index.js + |- index.d.ts + |- server # Server-side, cjs + |- index.js + |- index.d.ts + |- others + |- locale # multilingual package + |- node_modules # server dependencies +``` + +Other related adjustments include: + +Adjustment of the main parameter of package.json + +```diff +{ + - "main": "./lib/server/index.js", + + "main": "./dist/server/index.js", +} +``` + +client.d.ts + +```ts +export * from './dist/client'; +export { default } from './dist/client'; +``` + +client.js + +```js +module.exports = require('./dist/client/index.js'); +``` + +server.d.ts + +```ts +export * from './dist/server'; +export { default } from './dist/server'; +``` + +server.js + +```js +module.exports = require('./dist/server/index.js'); +``` diff --git a/docs/tr-TR/development/deps.md b/docs/tr-TR/development/deps.md new file mode 100644 index 000000000..375ce6d96 --- /dev/null +++ b/docs/tr-TR/development/deps.md @@ -0,0 +1,105 @@ +# Dependency management + +The dependencies of the plugin are divided into its own dependencies and global dependencies. Global dependencies are provided by `@nocobase/server` and `@nocobase/client`, and will not be packaged into the plugin product. Its own dependencies will be packaged into the product. + +Because the dependencies of the plugin itself will be packaged into the product (including the npm packages that the server depends on, which will also be packaged into `dist/node_modules`), when developing the plugin, all dependencies should be placed in `devDependencies`. + + +When installing the following dependencies, pay attention to the **version** and keep consistent with `@nocobase/server` and `@nocobase/client`. + + +```js +// nocobase +'@nocobase/acl', +'@nocobase/actions', +'@nocobase/auth', +'@nocobase/cache', +'@nocobase/client', +'@nocobase/database', +'@nocobase/evaluators', +'@nocobase/logger', +'@nocobase/resourcer', +'@nocobase/sdk', +'@nocobase/server', +'@nocobase/test', +'@nocobase/utils', + +// @nocobase/auth +'jsonwebtoken', + +// @nocobase/cache +'cache-manager', +'cache-manager-fs-hash', + +// @nocobase/database +'sequelize', +'umzug', +'async-mutex', + +// @nocobase/evaluators +'@formulajs/formulajs', +'mathjs', + +// @nocobase/logger +'winston', +'winston-daily-rotate-file', + +// koa +'koa', +'@koa/cors', +'@koa/router', +'multer', +'@koa/multer', +'koa-bodyparser', +'koa-static', +'koa-send', + +// react +'react', +'react-dom', +'react/jsx-runtime', + +// react-router +'react-router', +'react-router-dom', + +// antd +'antd', +'antd-style', +'@ant-design/icons', +'@ant-design/cssinjs', + +// i18next +'i18next', +'react-i18next', + +// dnd-kit +'@dnd-kit/accessibility', +'@dnd-kit/core', +'@dnd-kit/modifiers', +'@dnd-kit/sortable', +'@dnd-kit/utilities', + +// formily +'@formily/antd-v5', +'@formily/core', +'@formily/react', +'@formily/json-schema', +'@formily/path', +'@formily/validator', +'@formily/shared', +'@formily/reactive', +'@formily/reactive-react', + +// utils +'dayjs', +'mysql2', +'pg', +'pg-hstore', +'sqlite3', +'supertest', +'axios', +'@emotion/css', +'ahooks', +'lodash' +``` diff --git a/docs/tr-TR/welcome/release/v12-changelog.md b/docs/tr-TR/welcome/release/v12-changelog.md new file mode 100644 index 000000000..02f53b581 --- /dev/null +++ b/docs/tr-TR/welcome/release/v12-changelog.md @@ -0,0 +1,98 @@ +# v0.12:Update instructions + +## Features + +- In the production environment, the plugin loading process will be changed from directly importing them locally to dynamically loading them from the server. This change is being made in preparation for the upcoming version, which will support online installation and updates of plugins. + +## Update operation + +```bash +yarn clean +yarn install +yarn build +``` + +## Break changes + +### Plugin's `devDependencies` and `dependencies` + +The dependencies of the plugin are divided into its own dependencies and global dependencies. Global dependencies are provided by `@nocobase/server` and `@nocobase/client`, and will not be packaged into the plugin product. Its own dependencies will be packaged into the product. + +Because the dependencies of the plugin itself will be packaged into the product (including the npm packages that the server depends on, which will also be packaged into `dist/node_modules`), when developing the plugin, all dependencies should be placed in `devDependencies`. + +```diff +{ + "dependencies": { +- "@nocobase/server": "^0.11.0", +- "dayjs": "^4.17.21" + } + "devDependencies": { ++ "@nocobase/server": "^0.11.0", ++ "dayjs": "^4.17.21" + } +} +``` + +More information about updates and global plugin lists, see: [Plugin dependency management](/development/deps). + +### Upgrade formily version from 2.2.6 to 2.2.7 + +All `@formily/xx` are upgraded from `2.2.6` to `2.2.7`, please update the dependencies. For example: + +```diff +{ + "dependencies": { +- "@formily/antd": "2.2.26", ++ "@formily/antd": "2.2.27", + } +} +``` + +### The bundle of plugin has changed from `lib` to `dist` + +The plugin bundle has changed from `lib` to `dist`, so you need to: + +```diff +{ + - "main": "./lib/server/index.js", + + "main": "./dist/server/index.js", +} +``` + +### plugin directory must have both `src/client` and `src/server` directories + +```js +// src/client/index.ts +import { Plugin } from '@nocobase/client'; + +class MyPlugin extends Plugin { + async load() { + // ... + } +} + +export default MyPlugin; +``` + +```js +// src/server/index.ts +import { Plugin } from '@nocobase/server'; + +class MyPlugin extends Plugin { + async load() { + // ... + } +} + +export default MyPlugin; +``` + +For more information, refer to: [sample-hello](https://github.com/nocobase/nocobase/tree/main/packages/samples/hello) + +## Other + +Load plugins remotely in the local development environment, you need to set the environment to `USE_REMOTE_PLUGIN=true`: + +```bash +yarn cross-env USE_REMOTE_PLUGIN=true nocobase dev +``` diff --git a/docs/zh-CN/development/deps.md b/docs/zh-CN/development/deps.md new file mode 100644 index 000000000..607844c16 --- /dev/null +++ b/docs/zh-CN/development/deps.md @@ -0,0 +1,107 @@ +# 依赖管理 + +插件的依赖分为自身的依赖和全局依赖,全局依赖由 `@nocobase/server` 和 `@nocobase/client` 提供,不会打包到插件产物中,自身的依赖会被打包到产物中。 + +因为自身的依赖会被打包到产物中(包括 server 依赖的 npm 包,也会被打包到 `dist/node_modules`),所以在开发插件时,将所有依赖放到 `devDependencies` 中即可。 + + +当插件安装如下依赖时,要注意 **版本** 和 `@nocobase/server` 和 `@nocobase/client` 的保持一致。 + + +### 全局依赖 + +```js +// nocobase +'@nocobase/acl', +'@nocobase/actions', +'@nocobase/auth', +'@nocobase/cache', +'@nocobase/client', +'@nocobase/database', +'@nocobase/evaluators', +'@nocobase/logger', +'@nocobase/resourcer', +'@nocobase/sdk', +'@nocobase/server', +'@nocobase/test', +'@nocobase/utils', + +// @nocobase/auth +'jsonwebtoken', + +// @nocobase/cache +'cache-manager', +'cache-manager-fs-hash', + +// @nocobase/database +'sequelize', +'umzug', +'async-mutex', + +// @nocobase/evaluators +'@formulajs/formulajs', +'mathjs', + +// @nocobase/logger +'winston', +'winston-daily-rotate-file', + +// koa +'koa', +'@koa/cors', +'@koa/router', +'multer', +'@koa/multer', +'koa-bodyparser', +'koa-static', +'koa-send', + +// react +'react', +'react-dom', +'react/jsx-runtime', + +// react-router +'react-router', +'react-router-dom', + +// antd +'antd', +'antd-style', +'@ant-design/icons', +'@ant-design/cssinjs', + +// i18next +'i18next', +'react-i18next', + +// dnd-kit +'@dnd-kit/accessibility', +'@dnd-kit/core', +'@dnd-kit/modifiers', +'@dnd-kit/sortable', +'@dnd-kit/utilities', + +// formily +'@formily/antd-v5', +'@formily/core', +'@formily/react', +'@formily/json-schema', +'@formily/path', +'@formily/validator', +'@formily/shared', +'@formily/reactive', +'@formily/reactive-react', + +// utils +'dayjs', +'mysql2', +'pg', +'pg-hstore', +'sqlite3', +'supertest', +'axios', +'@emotion/css', +'ahooks', +'lodash' +``` diff --git a/docs/zh-CN/welcome/getting-started/upgrading/create-nocobase-app.md b/docs/zh-CN/welcome/getting-started/upgrading/create-nocobase-app.md index e1ba80424..ee443b043 100644 --- a/docs/zh-CN/welcome/getting-started/upgrading/create-nocobase-app.md +++ b/docs/zh-CN/welcome/getting-started/upgrading/create-nocobase-app.md @@ -1,5 +1,9 @@ # `create-nocobase-app` 安装的升级 + +通过 create-nocobase-app 安装的应用不再有 packages/app 目录了,在 packages/app 里自定义的代码,需要移至自定义插件中。 + + ## 小版本升级 执行 `nocobase upgrade` 升级命令即可 diff --git a/docs/zh-CN/welcome/release/v12-changelog.md b/docs/zh-CN/welcome/release/v12-changelog.md new file mode 100644 index 000000000..f7ad0384e --- /dev/null +++ b/docs/zh-CN/welcome/release/v12-changelog.md @@ -0,0 +1,180 @@ +# v0.12:全新的插件构建工具 + +## 新特性 + +- 全新的插件构建工具。构建好的插件将可以直接在生产环境上使用,无需二次构建。 + +## 应用升级 + +### Docker 安装的升级 + +无变化,升级参考 [Docker 镜像升级指南](/welcome/getting-started/upgrading/docker-compose) + +### 源码安装的升级 + +插件构建工具已全新升级,在拉取新源码之后,需要清除缓存。 + +```bash +git pull # 拉取新源码 +yarn clean # 清除缓存 +``` + +更多详情参考 [Git 源码升级指南](/welcome/getting-started/upgrading/git-clone) + +### create-nocobase-app 安装的升级 + +通过 `yarn create` 重新下载新版本,再更新 .env 配置,更多详情参考 [大版本升级指南](/welcome/getting-started/upgrading/create-nocobase-app#大版本升级) + +## 不兼容的变化 + +### @nocobase/app-client 和 @nocobase/app-server 合并为 @nocobase-app + +通过 create-nocobase-app 安装的应用不再有 packages/app 目录了,在 packages/app 里自定义的代码,需要移至自定义插件中。 + +### app 的 dist/client 路径变更 + +如果是自己配置的 nginx,需要做类似调整 + +```diff +server { +- root /app/nocobase/packages/app/client/dist; ++ root /app/nocobase/node_modules/@nocobase/app/dist/client; + + location / { +- root /app/nocobase/packages/app/client/dist; ++ root /app/nocobase/node_modules/@nocobase/app/dist/client; + try_files $uri $uri/ /index.html; + add_header Last-Modified $date_gmt; + add_header Cache-Control 'no-store, no-cache'; + if_modified_since off; + expires off; + etag off; + } +} +``` + +### 第三方插件需要重新构建 + +参考下文的第三方插件升级指南 + +## 第三方插件升级指南 + +### 插件目录必须同时有 `src/client` 和 `src/server` 目录 + +```js +// src/client/index.ts +import { Plugin } from '@nocobase/client'; + +class MyPlugin extends Plugin { + async load() { + // ... + } +} + +export default MyPlugin; +``` + +```js +// src/server/index.ts +import { Plugin } from '@nocobase/server'; + +class MyPlugin extends Plugin { + async load() { + // ... + } +} + +export default MyPlugin; +``` + +具体 Demo 代码可以参考:[sample-hello](https://github.com/nocobase/nocobase/tree/main/packages/samples/hello) + +### 插件的多语言放置 `src/locale` 目录 + +无论前后端,多语言翻译文件都统一放在 `src/locale` 目录,插件无需自己加载多语言包。 + +### 插件依赖的调整 + +插件的依赖分为自身的依赖和全局依赖,全局依赖直接使用全局,不会打包到插件产物中,自身的依赖会被打包到产物中。插件构建之后,生产环境即插即用,无需再安装依赖或二次构建。插件依赖的调整包括: + +- 将 `@nocobase/*` 相关包放到 `peerDependencies` 里,并指定版本号为 `0.x`; +- 其他依赖放到 `devDependencies` 里,不要放 `dependencies` 里,因为插件打包之后会将生产环境所需依赖全部提取了。 + +```diff +{ + "devDependencies": { + "@formily/react": "2.x", + "@formily/shared": "2.x", + "ahooks": "3.x", + "antd": "5.x", + "dayjs": "1.x", + "i18next": "22.x", + "react": "18.x", + "react-dom": "18.x", + "react-i18next": "11.x" + }, + "peerDependencies": { + "@nocobase/actions": "0.x", + "@nocobase/client": "0.x", + "@nocobase/database": "0.x", + "@nocobase/resourcer": "0.x", + "@nocobase/server": "0.x", + "@nocobase/test": "0.x", + "@nocobase/utils": "0.x" + } +} +``` + +### 插件的构建产物从 `lib` 目录变更为 `dist` 目录 + +dist 目录介绍 + +```bash +|- dist + |- client # 前端,umd 规范 + |- index.js + |- index.d.ts + |- server # 后端,cjs 规范 + |- index.js + |- index.d.ts + |- 其他文件 + |- locale # 多语言目录 + |- node_modules # 后端依赖 +``` + +其他相关调整包括: + +package.json 的 main 参数调整 + +```diff +{ + - "main": "./lib/server/index.js", + + "main": "./dist/server/index.js", +} +``` + +client.d.ts + +```ts +export * from './dist/client'; +export { default } from './dist/client'; +``` + +client.js + +```js +module.exports = require('./dist/client/index.js'); +``` + +server.d.ts + +```ts +export * from './dist/server'; +export { default } from './dist/server'; +``` + +server.js + +```js +module.exports = require('./dist/server/index.js'); +``` diff --git a/packages/app/client/.gitignore b/packages/app/client/.gitignore deleted file mode 100644 index bee1cf61c..000000000 --- a/packages/app/client/.gitignore +++ /dev/null @@ -1,20 +0,0 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. - -# dependencies -/node_modules -/npm-debug.log* -/yarn-error.log -/yarn.lock -/package-lock.json - -# production -/dist - -# misc -.DS_Store - -# umi -/src/.umi -/src/.umi-production -/src/.umi-test -/.env.local diff --git a/packages/app/client/.npmignore b/packages/app/client/.npmignore deleted file mode 100644 index ff74723f2..000000000 --- a/packages/app/client/.npmignore +++ /dev/null @@ -1,5 +0,0 @@ -node_modules -*.log -src/.umi -src/.umi-production -src/.umi-test diff --git a/packages/app/client/package.json b/packages/app/client/package.json deleted file mode 100644 index 3a6db5e55..000000000 --- a/packages/app/client/package.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "@nocobase/app-client", - "version": "0.11.1-alpha.5", - "license": "AGPL-3.0", - "devDependencies": { - "@nocobase/client": "0.11.1-alpha.5" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/nocobase/nocobase.git", - "directory": "packages/app/client" - }, - "gitHead": "ce588eefb0bfc50f7d5bbee575e0b5e843bf6644" -} diff --git a/packages/app/client/public/browser-checker.js b/packages/app/client/public/browser-checker.js deleted file mode 100644 index 168706a37..000000000 --- a/packages/app/client/public/browser-checker.js +++ /dev/null @@ -1 +0,0 @@ -showLog = true; function log(m) { if (window.console && showLog) { console.log(m) } } function css_browser_selector(u) { var uaInfo = {}, screens = [320, 480, 640, 768, 1024, 1152, 1280, 1440, 1680, 1920, 2560], allScreens = screens.length, ua = u.toLowerCase(), is = function (t) { return RegExp(t, 'i').test(ua) }, version = function (p, n) { n = n.replace('.', '_'); var i = n.indexOf('_'), ver = ''; while (i > 0) { ver += ' ' + p + n.substring(0, i); i = n.indexOf('_', i + 1) } ver += ' ' + p + n; return ver }, g = 'gecko', w = 'webkit', c = 'chrome', f = 'firefox', s = 'safari', o = 'opera', m = 'mobile', a = 'android', bb = 'blackberry', lang = 'lang_', dv = 'device_', html = document.documentElement, b = [(!/opera|webtv/i.test(ua) && /msie\s(\d+)/.test(ua)) || /trident\/.*rv:([0-9]{1,}[\.0-9]{0,})/.test(ua) ? 'ie ie' + (/trident\/4\.0/.test(ua) ? '8' : RegExp.$1 == '11.0' ? '11' : RegExp.$1) : is('firefox/') ? g + ' ' + f + (/firefox\/((\d+)(\.(\d+))(\.\d+)*)/.test(ua) ? ' ' + f + RegExp.$2 + ' ' + f + RegExp.$2 + '_' + RegExp.$4 : '') : is('gecko/') ? g : is('opera') ? o + (/version\/((\d+)(\.(\d+))(\.\d+)*)/.test(ua) ? ' ' + o + RegExp.$2 + ' ' + o + RegExp.$2 + '_' + RegExp.$4 : /opera(\s|\/)(\d+)\.(\d+)/.test(ua) ? ' ' + o + RegExp.$2 + ' ' + o + RegExp.$2 + '_' + RegExp.$3 : '') : is('konqueror') ? 'konqueror' : is('blackberry') ? bb + (/Version\/(\d+)(\.(\d+)+)/i.test(ua) ? ' ' + bb + RegExp.$1 + ' ' + bb + RegExp.$1 + RegExp.$2.replace('.', '_') : /Blackberry ?(([0-9]+)([a-z]?))[\/|;]/gi.test(ua) ? ' ' + bb + RegExp.$2 + (RegExp.$3 ? ' ' + bb + RegExp.$2 + RegExp.$3 : '') : '') : is('android') ? a + (/Version\/(\d+)(\.(\d+))+/i.test(ua) ? ' ' + a + RegExp.$1 + ' ' + a + RegExp.$1 + RegExp.$2.replace('.', '_') : '') + (/Android (.+); (.+) Build/i.test(ua) ? ' ' + dv + RegExp.$2.replace(/ /g, '_').replace(/-/g, '_') : '') : is('chrome') ? w + ' ' + c + (/chrome\/((\d+)(\.(\d+))(\.\d+)*)/.test(ua) ? ' ' + c + RegExp.$2 + (RegExp.$4 > 0 ? ' ' + c + RegExp.$2 + '_' + RegExp.$4 : '') : '') : is('iron') ? w + ' iron' : is('applewebkit/') ? w + ' ' + s + (/version\/((\d+)(\.(\d+))(\.\d+)*)/.test(ua) ? ' ' + s + RegExp.$2 + ' ' + s + RegExp.$2 + RegExp.$3.replace('.', '_') : / Safari\/(\d+)/i.test(ua) ? RegExp.$1 == '419' || RegExp.$1 == '417' || RegExp.$1 == '416' || RegExp.$1 == '412' ? ' ' + s + '2_0' : RegExp.$1 == '312' ? ' ' + s + '1_3' : RegExp.$1 == '125' ? ' ' + s + '1_2' : RegExp.$1 == '85' ? ' ' + s + '1_0' : '' : '') : is('mozilla/') ? g : '', is('android|mobi|mobile|j2me|iphone|ipod|ipad|blackberry|playbook|kindle|silk',) ? m : '', is('j2me') ? 'j2me' : is('ipad|ipod|iphone') ? (/CPU( iPhone)? OS (\d+[_|\.]\d+([_|\.]\d+)*)/i.test(ua) ? 'ios' + version('ios', RegExp.$2) : '') + ' ' + (/(ip(ad|od|hone))/gi.test(ua) ? RegExp.$1 : '') : is('playbook') ? 'playbook' : is('kindle|silk') ? 'kindle' : is('playbook') ? 'playbook' : is('mac') ? 'mac' + (/mac os x ((\d+)[.|_](\d+))/.test(ua) ? ' mac' + RegExp.$2 + ' mac' + RegExp.$1.replace('.', '_') : '') : is('win') ? 'win' + (is('windows nt 6.2') ? ' win8' : is('windows nt 6.1') ? ' win7' : is('windows nt 6.0') ? ' vista' : is('windows nt 5.2') || is('windows nt 5.1') ? ' win_xp' : is('windows nt 5.0') ? ' win_2k' : is('windows nt 4.0') || is('WinNT4.0') ? ' win_nt' : '') : is('freebsd') ? 'freebsd' : is('x11|linux') ? 'linux' : '', /[; |\[](([a-z]{2})(\-[a-z]{2})?)[)|;|\]]/i.test(ua) ? (lang + RegExp.$2).replace('-', '_') + (RegExp.$3 != '' ? (' ' + lang + RegExp.$1).replace('-', '_') : '') : '', is('ipad|iphone|ipod') && !is('safari') ? 'ipad_app' : '',]; console.debug(ua); function screenSize() { var w = window.outerWidth || html.clientWidth; var h = window.outerHeight || html.clientHeight; uaInfo.orientation = w < h ? 'portrait' : 'landscape'; html.className = html.className.replace(/ ?orientation_\w+/g, '').replace(/ [min|max|cl]+[w|h]_\d+/g, ''); for (var i = allScreens - 1; i >= 0; i--) { if (w >= screens[i]) { uaInfo.maxw = screens[i]; break } } widthClasses = ''; for (var info in uaInfo) { widthClasses += ' ' + info + '_' + uaInfo[info] } html.className = html.className + widthClasses; return widthClasses } window.onresize = screenSize; screenSize(); function retina() { var r = window.devicePixelRatio > 1; if (r) { html.className += ' retina' } else { html.className += ' non-retina' } } retina(); var cssbs = b.join(' ') + ' js '; html.className = (cssbs + html.className.replace(/\b(no[-|_]?)?js\b/g, '')).replace(/^ /, '').replace(/ +/g, ' '); return cssbs } css_browser_selector(navigator.userAgent); \ No newline at end of file diff --git a/packages/app/client/src/plugins/acl.ts b/packages/app/client/src/plugins/acl.ts deleted file mode 100644 index a31541bb8..000000000 --- a/packages/app/client/src/plugins/acl.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { default } from '@nocobase/plugin-acl/client'; - diff --git a/packages/app/client/src/plugins/api-keys.ts b/packages/app/client/src/plugins/api-keys.ts deleted file mode 100644 index 779e374e5..000000000 --- a/packages/app/client/src/plugins/api-keys.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from '@nocobase/plugin-api-keys/client'; \ No newline at end of file diff --git a/packages/app/client/src/plugins/audit-logs.ts b/packages/app/client/src/plugins/audit-logs.ts deleted file mode 100644 index a4073dec3..000000000 --- a/packages/app/client/src/plugins/audit-logs.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from '@nocobase/plugin-audit-logs/client'; diff --git a/packages/app/client/src/plugins/auth.ts b/packages/app/client/src/plugins/auth.ts deleted file mode 100644 index ce68ee0f2..000000000 --- a/packages/app/client/src/plugins/auth.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from '@nocobase/plugin-auth/client'; \ No newline at end of file diff --git a/packages/app/client/src/plugins/charts.ts b/packages/app/client/src/plugins/charts.ts deleted file mode 100644 index b9a59f19f..000000000 --- a/packages/app/client/src/plugins/charts.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from '@nocobase/plugin-charts/client'; diff --git a/packages/app/client/src/plugins/china-region.ts b/packages/app/client/src/plugins/china-region.ts deleted file mode 100644 index 1dc418003..000000000 --- a/packages/app/client/src/plugins/china-region.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from '@nocobase/plugin-china-region/client'; diff --git a/packages/app/client/src/plugins/client.ts b/packages/app/client/src/plugins/client.ts deleted file mode 100644 index af9dc0350..000000000 --- a/packages/app/client/src/plugins/client.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from '@nocobase/plugin-client/client'; diff --git a/packages/app/client/src/plugins/collection-manager.ts b/packages/app/client/src/plugins/collection-manager.ts deleted file mode 100644 index c8315a7db..000000000 --- a/packages/app/client/src/plugins/collection-manager.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from '@nocobase/plugin-collection-manager/client'; diff --git a/packages/app/client/src/plugins/data-visualization.ts b/packages/app/client/src/plugins/data-visualization.ts deleted file mode 100644 index 9a45caf2f..000000000 --- a/packages/app/client/src/plugins/data-visualization.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from '@nocobase/plugin-data-visualization/client'; diff --git a/packages/app/client/src/plugins/duplicator.ts b/packages/app/client/src/plugins/duplicator.ts deleted file mode 100644 index c027d3ee9..000000000 --- a/packages/app/client/src/plugins/duplicator.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from '@nocobase/plugin-duplicator/client'; diff --git a/packages/app/client/src/plugins/error-handler.ts b/packages/app/client/src/plugins/error-handler.ts deleted file mode 100644 index 25b0dffe7..000000000 --- a/packages/app/client/src/plugins/error-handler.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from '@nocobase/plugin-error-handler/client'; diff --git a/packages/app/client/src/plugins/export.ts b/packages/app/client/src/plugins/export.ts deleted file mode 100644 index 48234cfd1..000000000 --- a/packages/app/client/src/plugins/export.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from '@nocobase/plugin-export/client'; diff --git a/packages/app/client/src/plugins/file-manager.ts b/packages/app/client/src/plugins/file-manager.ts deleted file mode 100644 index 655be00ce..000000000 --- a/packages/app/client/src/plugins/file-manager.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from '@nocobase/plugin-file-manager/client'; diff --git a/packages/app/client/src/plugins/formula-field.ts b/packages/app/client/src/plugins/formula-field.ts deleted file mode 100644 index 73ed8f5f1..000000000 --- a/packages/app/client/src/plugins/formula-field.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from '@nocobase/plugin-formula-field/client'; diff --git a/packages/app/client/src/plugins/graph-collection-manager.ts b/packages/app/client/src/plugins/graph-collection-manager.ts deleted file mode 100644 index 3db4171fe..000000000 --- a/packages/app/client/src/plugins/graph-collection-manager.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from '@nocobase/plugin-graph-collection-manager/client'; diff --git a/packages/app/client/src/plugins/iframe-block.ts b/packages/app/client/src/plugins/iframe-block.ts deleted file mode 100644 index 4dcda1080..000000000 --- a/packages/app/client/src/plugins/iframe-block.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from '@nocobase/plugin-iframe-block/client'; diff --git a/packages/app/client/src/plugins/import.ts b/packages/app/client/src/plugins/import.ts deleted file mode 100644 index 63ab5ae5e..000000000 --- a/packages/app/client/src/plugins/import.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from '@nocobase/plugin-import/client'; diff --git a/packages/app/client/src/plugins/localization-management.ts b/packages/app/client/src/plugins/localization-management.ts deleted file mode 100644 index c22674881..000000000 --- a/packages/app/client/src/plugins/localization-management.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from '@nocobase/plugin-localization-management/client'; \ No newline at end of file diff --git a/packages/app/client/src/plugins/map.ts b/packages/app/client/src/plugins/map.ts deleted file mode 100644 index 8e257ec10..000000000 --- a/packages/app/client/src/plugins/map.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from '@nocobase/plugin-map/client'; diff --git a/packages/app/client/src/plugins/mobile-client.ts b/packages/app/client/src/plugins/mobile-client.ts deleted file mode 100644 index 305f7594c..000000000 --- a/packages/app/client/src/plugins/mobile-client.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from '@nocobase/plugin-mobile-client/client'; \ No newline at end of file diff --git a/packages/app/client/src/plugins/multi-app-manager.ts b/packages/app/client/src/plugins/multi-app-manager.ts deleted file mode 100644 index bd4adb4d4..000000000 --- a/packages/app/client/src/plugins/multi-app-manager.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from '@nocobase/plugin-multi-app-manager/client'; diff --git a/packages/app/client/src/plugins/multi-app-share-collection.ts b/packages/app/client/src/plugins/multi-app-share-collection.ts deleted file mode 100644 index 2e6520e0c..000000000 --- a/packages/app/client/src/plugins/multi-app-share-collection.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from '@nocobase/plugin-multi-app-share-collection/client'; diff --git a/packages/app/client/src/plugins/oidc.ts b/packages/app/client/src/plugins/oidc.ts deleted file mode 100644 index 698b473fe..000000000 --- a/packages/app/client/src/plugins/oidc.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from '@nocobase/plugin-oidc/client'; diff --git a/packages/app/client/src/plugins/saml.ts b/packages/app/client/src/plugins/saml.ts deleted file mode 100644 index e577bab48..000000000 --- a/packages/app/client/src/plugins/saml.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from '@nocobase/plugin-saml/client'; diff --git a/packages/app/client/src/plugins/sample-hello.ts b/packages/app/client/src/plugins/sample-hello.ts deleted file mode 100644 index c41dfbfc6..000000000 --- a/packages/app/client/src/plugins/sample-hello.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from '@nocobase/plugin-sample-hello/client'; diff --git a/packages/app/client/src/plugins/sequence-field.ts b/packages/app/client/src/plugins/sequence-field.ts deleted file mode 100644 index cd2f06a6b..000000000 --- a/packages/app/client/src/plugins/sequence-field.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from '@nocobase/plugin-sequence-field/client'; diff --git a/packages/app/client/src/plugins/sms-auth.ts b/packages/app/client/src/plugins/sms-auth.ts deleted file mode 100644 index 7e576f45a..000000000 --- a/packages/app/client/src/plugins/sms-auth.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from '@nocobase/plugin-sms-auth/client'; \ No newline at end of file diff --git a/packages/app/client/src/plugins/snapshot-field.ts b/packages/app/client/src/plugins/snapshot-field.ts deleted file mode 100644 index 79230855b..000000000 --- a/packages/app/client/src/plugins/snapshot-field.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from '@nocobase/plugin-snapshot-field/client'; diff --git a/packages/app/client/src/plugins/system-settings.ts b/packages/app/client/src/plugins/system-settings.ts deleted file mode 100644 index 60bc887b9..000000000 --- a/packages/app/client/src/plugins/system-settings.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from '@nocobase/plugin-system-settings/client'; diff --git a/packages/app/client/src/plugins/theme-editor.ts b/packages/app/client/src/plugins/theme-editor.ts deleted file mode 100644 index a9a245c10..000000000 --- a/packages/app/client/src/plugins/theme-editor.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from '@nocobase/plugin-theme-editor/client'; diff --git a/packages/app/client/src/plugins/ui-routes-storage.ts b/packages/app/client/src/plugins/ui-routes-storage.ts deleted file mode 100644 index f885e0faa..000000000 --- a/packages/app/client/src/plugins/ui-routes-storage.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from '@nocobase/plugin-ui-routes-storage/client'; diff --git a/packages/app/client/src/plugins/ui-schema-storage.ts b/packages/app/client/src/plugins/ui-schema-storage.ts deleted file mode 100644 index a0c77eec9..000000000 --- a/packages/app/client/src/plugins/ui-schema-storage.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from '@nocobase/plugin-ui-schema-storage/client'; diff --git a/packages/app/client/src/plugins/verification.ts b/packages/app/client/src/plugins/verification.ts deleted file mode 100644 index e987ff3c9..000000000 --- a/packages/app/client/src/plugins/verification.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from '@nocobase/plugin-verification/client'; diff --git a/packages/app/client/src/plugins/workflow.ts b/packages/app/client/src/plugins/workflow.ts deleted file mode 100644 index 1fb484e8a..000000000 --- a/packages/app/client/src/plugins/workflow.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from '@nocobase/plugin-workflow/client'; diff --git a/packages/app/client/tsconfig.json b/packages/app/client/tsconfig.json deleted file mode 100644 index 010fbcb06..000000000 --- a/packages/app/client/tsconfig.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "compilerOptions": { - "target": "esnext", - "module": "esnext", - "moduleResolution": "node", - "resolveJsonModule": true, - "importHelpers": true, - "jsx": "react-jsx", - "esModuleInterop": true, - "sourceMap": true, - "baseUrl": "./", - "strict": true, - "paths": { - "@nocobase/plugin-sample-*/client": ["../../samples/*/src/client"], - "@nocobase/plugin-pro-*/client": ["../../pro-plugins/*/src/client"], - "@nocobase/plugin-*/client": ["../../plugins/*/src/client"], - "@nocobase/utils/client": ["../../core/utils/src/client"], - "@nocobase/*": ["../../core/*/src/"], - "@/*": ["src/*"], - "@@/*": ["src/.umi/*"] - }, - "allowSyntheticDefaultImports": true - }, - "include": ["mock/**/*", "src/**/*", "config/**/*", ".umirc.ts", "typings.d.ts"], - "exclude": [ - "node_modules", - "lib", - "es", - "public", - "dist", - "typings", - "**/__test__", - "test", - "docs", - "tests" - ] -} diff --git a/packages/app/server/.npmignore b/packages/app/server/.npmignore deleted file mode 100644 index 83426817e..000000000 --- a/packages/app/server/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -node_modules -*.log -docs -__tests__ diff --git a/packages/app/server/LICENSE b/packages/app/server/LICENSE deleted file mode 100644 index 0ad25db4b..000000000 --- a/packages/app/server/LICENSE +++ /dev/null @@ -1,661 +0,0 @@ - GNU AFFERO GENERAL PUBLIC LICENSE - Version 3, 19 November 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU Affero General Public License is a free, copyleft license for -software and other kinds of works, specifically designed to ensure -cooperation with the community in the case of network server software. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -our General Public Licenses are intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - Developers that use our General Public Licenses protect your rights -with two steps: (1) assert copyright on the software, and (2) offer -you this License which gives you legal permission to copy, distribute -and/or modify the software. - - A secondary benefit of defending all users' freedom is that -improvements made in alternate versions of the program, if they -receive widespread use, become available for other developers to -incorporate. Many developers of free software are heartened and -encouraged by the resulting cooperation. However, in the case of -software used on network servers, this result may fail to come about. -The GNU General Public License permits making a modified version and -letting the public access it on a server without ever releasing its -source code to the public. - - The GNU Affero General Public License is designed specifically to -ensure that, in such cases, the modified source code becomes available -to the community. It requires the operator of a network server to -provide the source code of the modified version running there to the -users of that server. Therefore, public use of a modified version, on -a publicly accessible server, gives the public access to the source -code of the modified version. - - An older license, called the Affero General Public License and -published by Affero, was designed to accomplish similar goals. This is -a different license, not a version of the Affero GPL, but Affero has -released a new version of the Affero GPL which permits relicensing under -this license. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU Affero General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Remote Network Interaction; Use with the GNU General Public License. - - Notwithstanding any other provision of this License, if you modify the -Program, your modified version must prominently offer all users -interacting with it remotely through a computer network (if your version -supports such interaction) an opportunity to receive the Corresponding -Source of your version by providing access to the Corresponding Source -from a network server at no charge, through some standard or customary -means of facilitating copying of software. This Corresponding Source -shall include the Corresponding Source for any work covered by version 3 -of the GNU General Public License that is incorporated pursuant to the -following paragraph. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the work with which it is combined will remain governed by version -3 of the GNU General Public License. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU Affero General Public License from time to time. Such new versions -will be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU Affero General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU Affero General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU Affero General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published - by the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If your software can interact with users remotely through a computer -network, you should also make sure that it provides a way for users to -get its source. For example, if your program is a web application, its -interface could display a "Source" link that leads users to an archive -of the code. There are many ways you could offer source, and different -solutions will be better for different programs; see section 13 for the -specific requirements. - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU AGPL, see -. diff --git a/packages/core/acl/.npmignore b/packages/core/acl/.npmignore index d44041bb5..65f5e8779 100644 --- a/packages/core/acl/.npmignore +++ b/packages/core/acl/.npmignore @@ -1,8 +1,2 @@ -node_modules -*.log -docs -__tests__ -jest.config.js -tsconfig.json -src -.fatherrc.ts \ No newline at end of file +/node_modules +/src diff --git a/packages/core/actions/.npmignore b/packages/core/actions/.npmignore index d44041bb5..65f5e8779 100644 --- a/packages/core/actions/.npmignore +++ b/packages/core/actions/.npmignore @@ -1,8 +1,2 @@ -node_modules -*.log -docs -__tests__ -jest.config.js -tsconfig.json -src -.fatherrc.ts \ No newline at end of file +/node_modules +/src diff --git a/packages/core/app/.npmignore b/packages/core/app/.npmignore new file mode 100644 index 000000000..07e6e472c --- /dev/null +++ b/packages/core/app/.npmignore @@ -0,0 +1 @@ +/node_modules diff --git a/packages/app/client/LICENSE b/packages/core/app/LICENSE similarity index 100% rename from packages/app/client/LICENSE rename to packages/core/app/LICENSE diff --git a/packages/app/client/.umirc.ts b/packages/core/app/client/.umirc.ts similarity index 50% rename from packages/app/client/.umirc.ts rename to packages/core/app/client/.umirc.ts index 2cecc1d2f..6447221c6 100644 --- a/packages/app/client/.umirc.ts +++ b/packages/core/app/client/.umirc.ts @@ -1,4 +1,5 @@ -import { getUmiConfig } from '@nocobase/devtools/umiConfig'; +import { getUmiConfig, IndexGenerator } from '@nocobase/devtools/umiConfig'; +import path from 'path'; import { defineConfig } from 'umi'; const umiConfig = getUmiConfig(); @@ -6,12 +7,17 @@ const umiConfig = getUmiConfig(); process.env.MFSU_AD = 'none'; process.env.DID_YOU_KNOW = 'none'; +const pluginPrefix = (process.env.PLUGIN_PACKAGE_PREFIX || '').split(',').filter((item) => !item.includes('preset')); // 因为现在 preset 是直接引入的,所以不能忽略,如果以后 preset 也是动态插件的形式引入,那么这里可以去掉 +const pluginDirs = 'packages/plugins/,packages/samples/'.split(',').map((item) => path.join(process.cwd(), item)); + +const outputPluginPath = path.join(__dirname, 'src', '.plugins', 'index.ts'); +const indexGenerator = new IndexGenerator(outputPluginPath, pluginDirs); +indexGenerator.generate(); + export default defineConfig({ title: 'Loading...', favicons: ['/favicon/favicon.ico'], - metas: [ - { name: 'viewport', content: 'initial-scale=0.1' }, - ], + metas: [{ name: 'viewport', content: 'initial-scale=0.1' }], links: [ { rel: 'apple-touch-icon', size: '180x180', ref: '/favicon/apple-touch-icon.png' }, { rel: 'icon', type: 'image/png', size: '32x32', ref: '/favicon/favicon-32x32.png' }, @@ -19,15 +25,15 @@ export default defineConfig({ { rel: 'manifest', href: '/favicon/site.webmanifest' }, { rel: 'stylesheet', href: '/global.css' }, ], - headScripts: [ - '/browser-checker.js' - ], + headScripts: ['/browser-checker.js'], + outputPath: path.resolve(__dirname, '../dist/client'), hash: true, alias: { ...umiConfig.alias, }, define: { ...umiConfig.define, + 'process.env.USE_REMOTE_PLUGIN': process.env.USE_REMOTE_PLUGIN, }, proxy: { ...umiConfig.proxy, @@ -45,5 +51,15 @@ export default defineConfig({ edge: 79, safari: 12, }, + chainWebpack(config, { env }) { + if (env === 'production') { + config.plugin('ignore nocobase plugins').use(require('webpack').IgnorePlugin, [ + { + resourceRegExp: new RegExp(pluginPrefix.join('|')), + }, + ]); + } + return config; + }, routes: [{ path: '/*', component: 'index' }], }); diff --git a/packages/app/client/plugin.ts b/packages/core/app/client/plugin.ts similarity index 100% rename from packages/app/client/plugin.ts rename to packages/core/app/client/plugin.ts diff --git a/packages/core/app/client/public/browser-checker.js b/packages/core/app/client/public/browser-checker.js new file mode 100644 index 000000000..0ae7fd899 --- /dev/null +++ b/packages/core/app/client/public/browser-checker.js @@ -0,0 +1,176 @@ +showLog = true; +function log(m) { + if (window.console && showLog) { + console.log(m); + } +} +function css_browser_selector(u) { + var uaInfo = {}, + screens = [320, 480, 640, 768, 1024, 1152, 1280, 1440, 1680, 1920, 2560], + allScreens = screens.length, + ua = u.toLowerCase(), + is = function (t) { + return RegExp(t, 'i').test(ua); + }, + version = function (p, n) { + n = n.replace('.', '_'); + var i = n.indexOf('_'), + ver = ''; + while (i > 0) { + ver += ' ' + p + n.substring(0, i); + i = n.indexOf('_', i + 1); + } + ver += ' ' + p + n; + return ver; + }, + g = 'gecko', + w = 'webkit', + c = 'chrome', + f = 'firefox', + s = 'safari', + o = 'opera', + m = 'mobile', + a = 'android', + bb = 'blackberry', + lang = 'lang_', + dv = 'device_', + html = document.documentElement, + b = [ + (!/opera|webtv/i.test(ua) && /msie\s(\d+)/.test(ua)) || /trident\/.*rv:([0-9]{1,}[\.0-9]{0,})/.test(ua) + ? 'ie ie' + (/trident\/4\.0/.test(ua) ? '8' : RegExp.$1 == '11.0' ? '11' : RegExp.$1) + : is('firefox/') + ? g + + ' ' + + f + + (/firefox\/((\d+)(\.(\d+))(\.\d+)*)/.test(ua) + ? ' ' + f + RegExp.$2 + ' ' + f + RegExp.$2 + '_' + RegExp.$4 + : '') + : is('gecko/') + ? g + : is('opera') + ? o + + (/version\/((\d+)(\.(\d+))(\.\d+)*)/.test(ua) + ? ' ' + o + RegExp.$2 + ' ' + o + RegExp.$2 + '_' + RegExp.$4 + : /opera(\s|\/)(\d+)\.(\d+)/.test(ua) + ? ' ' + o + RegExp.$2 + ' ' + o + RegExp.$2 + '_' + RegExp.$3 + : '') + : is('konqueror') + ? 'konqueror' + : is('blackberry') + ? bb + + (/Version\/(\d+)(\.(\d+)+)/i.test(ua) + ? ' ' + bb + RegExp.$1 + ' ' + bb + RegExp.$1 + RegExp.$2.replace('.', '_') + : /Blackberry ?(([0-9]+)([a-z]?))[\/|;]/gi.test(ua) + ? ' ' + bb + RegExp.$2 + (RegExp.$3 ? ' ' + bb + RegExp.$2 + RegExp.$3 : '') + : '') + : is('android') + ? a + + (/Version\/(\d+)(\.(\d+))+/i.test(ua) + ? ' ' + a + RegExp.$1 + ' ' + a + RegExp.$1 + RegExp.$2.replace('.', '_') + : '') + + (/Android (.+); (.+) Build/i.test(ua) ? ' ' + dv + RegExp.$2.replace(/ /g, '_').replace(/-/g, '_') : '') + : is('chrome') + ? w + + ' ' + + c + + (/chrome\/((\d+)(\.(\d+))(\.\d+)*)/.test(ua) + ? ' ' + c + RegExp.$2 + (RegExp.$4 > 0 ? ' ' + c + RegExp.$2 + '_' + RegExp.$4 : '') + : '') + : is('iron') + ? w + ' iron' + : is('applewebkit/') + ? w + + ' ' + + s + + (/version\/((\d+)(\.(\d+))(\.\d+)*)/.test(ua) + ? ' ' + s + RegExp.$2 + ' ' + s + RegExp.$2 + RegExp.$3.replace('.', '_') + : / Safari\/(\d+)/i.test(ua) + ? RegExp.$1 == '419' || RegExp.$1 == '417' || RegExp.$1 == '416' || RegExp.$1 == '412' + ? ' ' + s + '2_0' + : RegExp.$1 == '312' + ? ' ' + s + '1_3' + : RegExp.$1 == '125' + ? ' ' + s + '1_2' + : RegExp.$1 == '85' + ? ' ' + s + '1_0' + : '' + : '') + : is('mozilla/') + ? g + : '', + is('android|mobi|mobile|j2me|iphone|ipod|ipad|blackberry|playbook|kindle|silk') ? m : '', + is('j2me') + ? 'j2me' + : is('ipad|ipod|iphone') + ? (/CPU( iPhone)? OS (\d+[_|\.]\d+([_|\.]\d+)*)/i.test(ua) ? 'ios' + version('ios', RegExp.$2) : '') + + ' ' + + (/(ip(ad|od|hone))/gi.test(ua) ? RegExp.$1 : '') + : is('playbook') + ? 'playbook' + : is('kindle|silk') + ? 'kindle' + : is('playbook') + ? 'playbook' + : is('mac') + ? 'mac' + + (/mac os x ((\d+)[.|_](\d+))/.test(ua) ? ' mac' + RegExp.$2 + ' mac' + RegExp.$1.replace('.', '_') : '') + : is('win') + ? 'win' + + (is('windows nt 6.2') + ? ' win8' + : is('windows nt 6.1') + ? ' win7' + : is('windows nt 6.0') + ? ' vista' + : is('windows nt 5.2') || is('windows nt 5.1') + ? ' win_xp' + : is('windows nt 5.0') + ? ' win_2k' + : is('windows nt 4.0') || is('WinNT4.0') + ? ' win_nt' + : '') + : is('freebsd') + ? 'freebsd' + : is('x11|linux') + ? 'linux' + : '', + /[; |\[](([a-z]{2})(\-[a-z]{2})?)[)|;|\]]/i.test(ua) + ? (lang + RegExp.$2).replace('-', '_') + (RegExp.$3 != '' ? (' ' + lang + RegExp.$1).replace('-', '_') : '') + : '', + is('ipad|iphone|ipod') && !is('safari') ? 'ipad_app' : '', + ]; + console.debug(ua); + function screenSize() { + var w = window.outerWidth || html.clientWidth; + var h = window.outerHeight || html.clientHeight; + uaInfo.orientation = w < h ? 'portrait' : 'landscape'; + html.className = html.className.replace(/ ?orientation_\w+/g, '').replace(/ [min|max|cl]+[w|h]_\d+/g, ''); + for (var i = allScreens - 1; i >= 0; i--) { + if (w >= screens[i]) { + uaInfo.maxw = screens[i]; + break; + } + } + widthClasses = ''; + for (var info in uaInfo) { + widthClasses += ' ' + info + '_' + uaInfo[info]; + } + html.className = html.className + widthClasses; + return widthClasses; + } + window.onresize = screenSize; + screenSize(); + function retina() { + var r = window.devicePixelRatio > 1; + if (r) { + html.className += ' retina'; + } else { + html.className += ' non-retina'; + } + } + retina(); + var cssbs = b.join(' ') + ' js '; + html.className = (cssbs + html.className.replace(/\b(no[-|_]?)?js\b/g, '')).replace(/^ /, '').replace(/ +/g, ' '); + return cssbs; +} +css_browser_selector(navigator.userAgent); diff --git a/packages/app/client/public/favicon/android-chrome-192x192.png b/packages/core/app/client/public/favicon/android-chrome-192x192.png similarity index 100% rename from packages/app/client/public/favicon/android-chrome-192x192.png rename to packages/core/app/client/public/favicon/android-chrome-192x192.png diff --git a/packages/app/client/public/favicon/android-chrome-512x512.png b/packages/core/app/client/public/favicon/android-chrome-512x512.png similarity index 100% rename from packages/app/client/public/favicon/android-chrome-512x512.png rename to packages/core/app/client/public/favicon/android-chrome-512x512.png diff --git a/packages/app/client/public/favicon/apple-touch-icon.png b/packages/core/app/client/public/favicon/apple-touch-icon.png similarity index 100% rename from packages/app/client/public/favicon/apple-touch-icon.png rename to packages/core/app/client/public/favicon/apple-touch-icon.png diff --git a/packages/app/client/public/favicon/favicon-16x16.png b/packages/core/app/client/public/favicon/favicon-16x16.png similarity index 100% rename from packages/app/client/public/favicon/favicon-16x16.png rename to packages/core/app/client/public/favicon/favicon-16x16.png diff --git a/packages/app/client/public/favicon/favicon-32x32.png b/packages/core/app/client/public/favicon/favicon-32x32.png similarity index 100% rename from packages/app/client/public/favicon/favicon-32x32.png rename to packages/core/app/client/public/favicon/favicon-32x32.png diff --git a/packages/app/client/public/favicon/favicon.ico b/packages/core/app/client/public/favicon/favicon.ico similarity index 100% rename from packages/app/client/public/favicon/favicon.ico rename to packages/core/app/client/public/favicon/favicon.ico diff --git a/packages/app/client/public/favicon/site.webmanifest b/packages/core/app/client/public/favicon/site.webmanifest similarity index 100% rename from packages/app/client/public/favicon/site.webmanifest rename to packages/core/app/client/public/favicon/site.webmanifest diff --git a/packages/app/client/public/global.css b/packages/core/app/client/public/global.css similarity index 100% rename from packages/app/client/public/global.css rename to packages/core/app/client/public/global.css diff --git a/packages/app/client/src/pages/index.tsx b/packages/core/app/client/src/pages/index.tsx similarity index 78% rename from packages/app/client/src/pages/index.tsx rename to packages/core/app/client/src/pages/index.tsx index 2d4c6ff32..514f9e1f9 100644 --- a/packages/app/client/src/pages/index.tsx +++ b/packages/core/app/client/src/pages/index.tsx @@ -1,14 +1,13 @@ import { Application } from '@nocobase/client'; import { NocoBaseClientPresetPlugin } from '@nocobase/preset-nocobase/client'; +import devPlugins from '../.plugins/index'; export const app = new Application({ apiClient: { baseURL: process.env.API_BASE_URL, }, - dynamicImport: (name: string) => { - return import(`../plugins/${name}`); - }, plugins: [NocoBaseClientPresetPlugin], + devPlugins, }); export default app.getRootComponent(); diff --git a/packages/core/create-nocobase-app/templates/app/packages/app/client/tsconfig.json b/packages/core/app/client/tsconfig.json similarity index 81% rename from packages/core/create-nocobase-app/templates/app/packages/app/client/tsconfig.json rename to packages/core/app/client/tsconfig.json index 5849ff19d..a931fc90a 100644 --- a/packages/core/create-nocobase-app/templates/app/packages/app/client/tsconfig.json +++ b/packages/core/app/client/tsconfig.json @@ -17,5 +17,5 @@ "allowSyntheticDefaultImports": true }, "include": ["mock/**/*", "src/**/*", "config/**/*", ".umirc.ts", "typings.d.ts"], - "exclude": ["node_modules", "lib", "es", "dist", "typings", "**/__test__", "test", "docs", "tests"] + "exclude": ["node_modules", "lib", "es", "public", "dist", "typings", "**/__test__", "test", "docs", "tests"] } diff --git a/packages/app/client/typings.d.ts b/packages/core/app/client/typings.d.ts similarity index 100% rename from packages/app/client/typings.d.ts rename to packages/core/app/client/typings.d.ts diff --git a/packages/app/server/package.json b/packages/core/app/package.json similarity index 73% rename from packages/app/server/package.json rename to packages/core/app/package.json index a7680285e..a038eabbe 100644 --- a/packages/app/server/package.json +++ b/packages/core/app/package.json @@ -1,5 +1,5 @@ { - "name": "@nocobase/app-server", + "name": "@nocobase/app", "version": "0.11.1-alpha.5", "description": "", "license": "AGPL-3.0", @@ -8,10 +8,13 @@ "dependencies": { "@nocobase/preset-nocobase": "0.11.1-alpha.5" }, + "devDependencies": { + "@nocobase/client": "0.11.1-alpha.5" + }, "repository": { "type": "git", "url": "git+https://github.com/nocobase/nocobase.git", - "directory": "packages/app/server" + "directory": "packages/core/app" }, "gitHead": "ce588eefb0bfc50f7d5bbee575e0b5e843bf6644" } diff --git a/packages/app/server/src/config/cache.ts b/packages/core/app/src/config/cache.ts similarity index 100% rename from packages/app/server/src/config/cache.ts rename to packages/core/app/src/config/cache.ts diff --git a/packages/app/server/src/config/database.ts b/packages/core/app/src/config/database.ts similarity index 100% rename from packages/app/server/src/config/database.ts rename to packages/core/app/src/config/database.ts diff --git a/packages/app/server/src/config/index.ts b/packages/core/app/src/config/index.ts similarity index 100% rename from packages/app/server/src/config/index.ts rename to packages/core/app/src/config/index.ts diff --git a/packages/app/server/src/config/logger.ts b/packages/core/app/src/config/logger.ts similarity index 100% rename from packages/app/server/src/config/logger.ts rename to packages/core/app/src/config/logger.ts diff --git a/packages/app/server/src/config/plugins.ts b/packages/core/app/src/config/plugins.ts similarity index 100% rename from packages/app/server/src/config/plugins.ts rename to packages/core/app/src/config/plugins.ts diff --git a/packages/app/server/src/config/resourcer.ts b/packages/core/app/src/config/resourcer.ts similarity index 100% rename from packages/app/server/src/config/resourcer.ts rename to packages/core/app/src/config/resourcer.ts diff --git a/packages/app/server/src/index.ts b/packages/core/app/src/index.ts similarity index 100% rename from packages/app/server/src/index.ts rename to packages/core/app/src/index.ts diff --git a/packages/core/auth/.npmignore b/packages/core/auth/.npmignore index 8be3941cd..65f5e8779 100644 --- a/packages/core/auth/.npmignore +++ b/packages/core/auth/.npmignore @@ -1,4 +1,2 @@ -node_modules -*.log -__tests__ -src \ No newline at end of file +/node_modules +/src diff --git a/packages/core/auth/package.json b/packages/core/auth/package.json index d9a895978..e1f70429f 100644 --- a/packages/core/auth/package.json +++ b/packages/core/auth/package.json @@ -9,7 +9,9 @@ "@nocobase/actions": "0.11.1-alpha.5", "@nocobase/database": "0.11.1-alpha.5", "@nocobase/resourcer": "0.11.1-alpha.5", - "@nocobase/utils": "0.11.1-alpha.5" + "@nocobase/utils": "0.11.1-alpha.5", + "@types/jsonwebtoken": "^8.5.8", + "jsonwebtoken": "^8.5.1" }, "repository": { "type": "git", diff --git a/packages/core/build/.npmignore b/packages/core/build/.npmignore index 75230a7a6..4bc1a5e28 100755 --- a/packages/core/build/.npmignore +++ b/packages/core/build/.npmignore @@ -1,4 +1,3 @@ -/src/fixtures -/src/**/*.test.ts -/lib/**/*.test.js +/node_modules +/src /.local diff --git a/packages/core/build/package.json b/packages/core/build/package.json index aec2e1025..c2e7d9347 100755 --- a/packages/core/build/package.json +++ b/packages/core/build/package.json @@ -23,6 +23,7 @@ "@babel/preset-react": "7.22.5", "@babel/preset-typescript": "7.22.5", "@babel/register": "7.22.5", + "@hapi/topo": "^6.0.0", "@lerna/filter-packages": "4.0.0", "@lerna/project": "4.0.0", "@lerna/query-graph": "4.0.0", @@ -34,6 +35,7 @@ "@rollup/plugin-replace": "5.0.2", "@rollup/plugin-url": "8.0.1", "@svgr/rollup": "5.5.0", + "@vercel/ncc": "0.36.1", "ajv": "6.12.6", "autoprefixer": "9.6.0", "babel-plugin-istanbul": "^5.2.0", @@ -41,6 +43,7 @@ "chalk": "2.4.2", "chokidar": "^3.0.2", "es5-imcompatible-versions": "^0.1.37", + "fast-glob": "3.3.0", "glob": "^7.1.4", "gulp-if": "2.0.2", "gulp-less": "^5.0.0", @@ -61,9 +64,11 @@ "temp-dir": "2.0.0", "through2": "3.0.1", "ts-loader": "^9.4.3", + "tsup": "7.1.0", "typescript": "5.1.3", "update-notifier": "3.0.0", "vinyl-fs": "3.0.3", + "vite-plugin-css-injected-by-js": "^3.2.1", "yargs-parser": "13.1.2" }, "license": "Apache-2.0", diff --git a/packages/core/build/src/babel.ts b/packages/core/build/src/babel.ts index 5a16537c7..e7aed63e1 100755 --- a/packages/core/build/src/babel.ts +++ b/packages/core/build/src/babel.ts @@ -13,6 +13,7 @@ import gulpLess from "gulp-less"; import gulpPlumber from "gulp-plumber"; import gulpIf from "gulp-if"; import chalk from "chalk"; +import fs from 'fs-extra' import getBabelConfig from "./getBabelConfig"; import { Dispose, IBundleOptions } from "./types"; import * as ts from "typescript"; @@ -25,6 +26,7 @@ interface IBabelOpts { log?: (string) => void; watch?: boolean; dispose?: Dispose[]; + isPlugin?: boolean; importLibToEs?: boolean; bundleOpts: IBundleOptions; } @@ -46,6 +48,7 @@ export default async function (opts: IBabelOpts) { dispose, importLibToEs, log, + isPlugin = false, bundleOpts: { target = "browser", runtimeHelpers, @@ -60,11 +63,23 @@ export default async function (opts: IBabelOpts) { }, } = opts; const srcPath = join(cwd, "src"); - const targetDir = type === "esm" ? "es" : "lib"; + const targetDir = type === "esm" ? "es" : isPlugin ? 'dist' : "lib"; const targetPath = join(cwd, targetDir); - log(chalk.gray(`Clean ${targetDir} directory`)); - rimraf.sync(targetPath); + if (!isPlugin) { + log(chalk.gray(`Clean ${targetDir} directory`)); + rimraf.sync(targetPath); + } else { + if (fs.existsSync(targetPath)) { + // exclude node_modules + const files = fs.readdirSync(targetPath, { recursive: false }) as string[]; + files.forEach((file) => { + if (file !== 'node_modules') { + rimraf.sync(join(targetPath, file)); + } + }) + } + } function transform(opts: ITransformOpts) { const { file, type } = opts; @@ -157,9 +172,9 @@ export default async function (opts: IBabelOpts) { } function isTransform(path) { + if (isPlugin) return false return babelTransformRegexp.test(path) && !path.endsWith(".d.ts"); } - return vfs .src(src, { allowEmpty: true, @@ -196,13 +211,13 @@ export default async function (opts: IBabelOpts) { } }) ) - ) - .pipe(vfs.dest(targetPath)); + ) + .pipe(vfs.dest(targetPath)) } return new Promise((resolve) => { const patterns = [ - join(srcPath, "**/*"), + isPlugin ? join(srcPath, "**/*.{ts,tsx}") : join(srcPath, "**/*"), `!${join(srcPath, "**/fixtures{,/**}")}`, `!${join(srcPath, "**/demos{,/**}")}`, `!${join(srcPath, "**/__test__{,/**}")}`, diff --git a/packages/core/build/src/build.ts b/packages/core/build/src/build.ts index b4ac84b6d..7dd1f67ca 100755 --- a/packages/core/build/src/build.ts +++ b/packages/core/build/src/build.ts @@ -6,6 +6,7 @@ import { isAbsolute, join, sep } from 'path'; import rimraf from 'rimraf'; import signale from 'signale'; import babel from './babel'; +import { buildPluginClient, buildPluginServer, deleteJsFiles } from './buildPlugin'; import getUserConfig, { CONFIG_FILES } from './getUserConfig'; import randomColor from './randomColor'; import registerBabel from './registerBabel'; @@ -26,7 +27,7 @@ export function getBundleOpts(opts: IOpts): IBundleOptions[] { 'src/server/index.js', 'src/client/index.js', 'src/client/index.ts', - 'src/client/index.tsx' + 'src/client/index.tsx', ], onlyOne: false, returnRelative: true, @@ -40,7 +41,7 @@ export function getBundleOpts(opts: IOpts): IBundleOptions[] { }, rootConfig, userConfig, - buildArgs + buildArgs, ); // Support config esm: 'rollup' and cjs: 'rollup' @@ -62,43 +63,34 @@ function validateBundleOpts(bundleOpts: IBundleOptions, { cwd, rootPath }) { const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8')); assert.ok( (pkg.dependencies || {})['@babel/runtime'], - `@babel/runtime dependency is required to use runtimeHelpers` + `@babel/runtime dependency is required to use runtimeHelpers`, ); } - if ( - bundleOpts.cjs && - (bundleOpts.cjs as ICjs).lazy && - (bundleOpts.cjs as ICjs).type === 'rollup' - ) { + if (bundleOpts.cjs && (bundleOpts.cjs as ICjs).lazy && (bundleOpts.cjs as ICjs).type === 'rollup') { throw new Error( ` cjs.lazy don't support rollup. - `.trim() + `.trim(), ); } if (!bundleOpts.esm && !bundleOpts.cjs && !bundleOpts.umd) { throw new Error( ` None format of ${chalk.cyan( - 'cjs | esm | umd' + 'cjs | esm | umd', )} is configured, checkout https://github.com/umijs/father for usage details. -`.trim() +`.trim(), ); } if (bundleOpts.entry) { const tsConfigPath = join(cwd, 'tsconfig.json'); - const tsConfig = - existsSync(tsConfigPath) || (rootPath && existsSync(join(rootPath, 'tsconfig.json'))); + const tsConfig = existsSync(tsConfigPath) || (rootPath && existsSync(join(rootPath, 'tsconfig.json'))); if ( !tsConfig && ((Array.isArray(bundleOpts.entry) && bundleOpts.entry.some(isTypescriptFile)) || (!Array.isArray(bundleOpts.entry) && isTypescriptFile(bundleOpts.entry))) ) { - signale.info( - `Project using ${chalk.cyan( - 'typescript' - )} but tsconfig.json not exists. Use default config.` - ); + signale.info(`Project using ${chalk.cyan('typescript')} but tsconfig.json not exists. Use default config.`); } } } @@ -107,6 +99,19 @@ function isTypescriptFile(filePath) { return filePath.endsWith('.ts') || filePath.endsWith('.tsx'); } +function isPluginPackage(name: string) { + const prefixes = (process.env.PLUGIN_PACKAGE_PREFIX || '').split(','); + for (const prefix of prefixes) { + if (prefix.includes('preset')) { + return false; + } + if (name.startsWith(prefix)) { + return true; + } + } + return false; +} + interface IExtraBuildOpts { pkg?: string | { name?: string }; } @@ -118,8 +123,7 @@ export async function build(opts: IOpts, extraOpts: IExtraBuildOpts = {}) { const dispose: Dispose[] = []; const customConfigPath = - buildArgs.config && - (isAbsolute(buildArgs.config) ? buildArgs.config : join(process.cwd(), buildArgs.config)); + buildArgs.config && (isAbsolute(buildArgs.config) ? buildArgs.config : join(process.cwd(), buildArgs.config)); // register babel for config files registerBabel({ @@ -129,23 +133,23 @@ export async function build(opts: IOpts, extraOpts: IExtraBuildOpts = {}) { const pkgName = (typeof pkg === 'string' ? pkg : pkg?.name) || 'unknown'; - function log(msg) { - console.log(`${pkg ? `${randomColor(`${pkgName}`)}: ` : ''}${msg}`); + function log(msg, ...args) { + console.log(`${pkg ? `${randomColor(`${pkgName}`)}: ` : ''}${msg}`, ...args); } // Get user config const bundleOptsArray = getBundleOpts(opts); + const isPlugin = isPluginPackage(pkgName); + + // Clean dist + if (clean && !isPlugin) { + log(chalk.gray(`Clean dist directory`)); + rimraf.sync(join(cwd, 'dist')); + } for (const bundleOpts of bundleOptsArray) { validateBundleOpts(bundleOpts, { cwd, rootPath }); - // Clean dist - if (clean) { - log(chalk.gray(`Clean dist directory`)); - rimraf.sync(join(cwd, 'dist')); - } - - // Build umd if (bundleOpts.umd) { log(`Build umd`); @@ -164,9 +168,24 @@ export async function build(opts: IOpts, extraOpts: IExtraBuildOpts = {}) { // Build cjs if (bundleOpts.cjs) { const cjs = bundleOpts.cjs as IBundleTypeOutput; - log(`Build cjs with ${cjs.type}`); + log(`Build ${isPlugin ? 'd.ts' : 'cjs'} with ${cjs.type}`); if (cjs.type === 'babel') { - await babel({ cwd, rootPath, watch, dispose, type: 'cjs', log, bundleOpts }); + await babel({ cwd, rootPath, watch, dispose, isPlugin, type: 'cjs', log, bundleOpts }); + if (isPlugin) { + log(cwd); + deleteJsFiles(cwd, log); + await buildPluginServer(cwd, log); + await buildPluginClient(cwd, log); + const buildFile = join(cwd, 'build.js'); + if (existsSync(buildFile)) { + log('build others'); + try { + await require(buildFile).run(log); + } catch (error) { + console.error(error); + } + } + } } else { await rollup({ cwd, @@ -227,7 +246,7 @@ export async function buildForLerna(opts: IOpts) { let pkgs = await getLernaPackages(cwd, userConfig.pkgFilter); // support define pkgs in lerna if (userConfig.pkgs) { - pkgs = pkgs.filter(pkg => userConfig.pkgs.includes(getPkgRelativePath(cwd, pkg))); + pkgs = pkgs.filter((pkg) => userConfig.pkgs.includes(getPkgRelativePath(cwd, pkg))); } const dispose: Dispose[] = []; for (const pkg of pkgs) { @@ -238,10 +257,7 @@ export async function buildForLerna(opts: IOpts) { if (packages.length && !packages.includes(pkgName)) continue; // build error when .DS_Store includes in packages root const pkgPath = pkg.contents; - assert.ok( - existsSync(join(pkgPath, 'package.json')), - `package.json not found in packages/${pkg}` - ); + assert.ok(existsSync(join(pkgPath, 'package.json')), `package.json not found in packages/${pkg}`); process.chdir(pkgPath); dispose.push( ...(await build( @@ -255,8 +271,8 @@ export async function buildForLerna(opts: IOpts) { }, { pkg, - } - )) + }, + )), ); } return dispose; diff --git a/packages/core/build/src/buildPlugin.ts b/packages/core/build/src/buildPlugin.ts new file mode 100644 index 000000000..aed73af93 --- /dev/null +++ b/packages/core/build/src/buildPlugin.ts @@ -0,0 +1,317 @@ +import ncc from '@vercel/ncc'; +import react from '@vitejs/plugin-react'; +import chalk from 'chalk'; +import fg from 'fast-glob'; +import fs from 'fs-extra'; +import path from 'path'; +import { build as tsupBuild } from 'tsup'; +import { build as viteBuild } from 'vite'; +import cssInjectedByJsPlugin from 'vite-plugin-css-injected-by-js'; +import { + buildCheck, + formatFileSize, + getExcludePackages, + getFileSize, + getIncludePackages, + getPackageJson, + getSourcePackages, +} from './utils/buildPluginUtils'; +import { getDepsConfig } from './utils/getDepsConfig'; + +const serverGlobalFiles: string[] = ['src/**', '!src/**/__tests__', '!src/client/**']; + +const clientGlobalFiles: string[] = ['src/client/**', '!src/**/__tests__']; + +const external = [ + // nocobase + '@nocobase/acl', + '@nocobase/actions', + '@nocobase/auth', + '@nocobase/cache', + '@nocobase/client', + '@nocobase/database', + '@nocobase/evaluators', + '@nocobase/logger', + '@nocobase/resourcer', + '@nocobase/sdk', + '@nocobase/server', + '@nocobase/test', + '@nocobase/utils', + + // @nocobase/auth + 'jsonwebtoken', + + // @nocobase/cache + 'cache-manager', + + // @nocobase/database + 'sequelize', + 'umzug', + 'async-mutex', + + // @nocobase/evaluators + '@formulajs/formulajs', + 'mathjs', + + // @nocobase/logger + 'winston', + 'winston-daily-rotate-file', + + // koa + 'koa', + '@koa/cors', + '@koa/router', + 'multer', + '@koa/multer', + 'koa-bodyparser', + 'koa-static', + 'koa-send', + + // react + 'react', + 'react-dom', + 'react/jsx-runtime', + + // react-router + 'react-router', + 'react-router-dom', + + // antd + 'antd', + 'antd-style', + '@ant-design/icons', + '@ant-design/cssinjs', + + // i18next + 'i18next', + 'react-i18next', + + // dnd-kit 相关 + '@dnd-kit/accessibility', + '@dnd-kit/core', + '@dnd-kit/modifiers', + '@dnd-kit/sortable', + '@dnd-kit/utilities', + + // formily 相关 + '@formily/antd-v5', + '@formily/core', + '@formily/react', + '@formily/json-schema', + '@formily/path', + '@formily/validator', + '@formily/shared', + '@formily/reactive', + '@formily/reactive-react', + + // utils + 'dayjs', + 'mysql2', + 'pg', + 'pg-hstore', + 'sqlite3', + 'supertest', + 'axios', + '@emotion/css', + 'ahooks', + 'lodash', + 'china-division', + 'cronstrue', +]; +const pluginPrefix = ( + process.env.PLUGIN_PACKAGE_PREFIX || '@nocobase/plugin-,@nocobase/preset-,@nocobase/plugin-pro-' +).split(','); + +type Log = (msg: string, ...args: any) => void; + +const target_dir = 'dist'; + +export function deleteJsFiles(cwd: string, log: Log) { + log('delete babel js files'); + const jsFiles = fg.globSync(['**/*', '!**/*.d.ts', '!node_modules'], { + cwd: path.join(cwd, target_dir), + absolute: true, + }); + jsFiles.forEach((item) => { + fs.unlinkSync(item); + }); +} + +export async function buildServerDeps(cwd: string, serverFiles: string[], log: Log) { + log('build server dependencies'); + const outDir = path.join(cwd, target_dir, 'node_modules'); + const sourcePackages = getSourcePackages(serverFiles); + const includePackages = getIncludePackages(sourcePackages, external, pluginPrefix); + const excludePackages = getExcludePackages(sourcePackages, external, pluginPrefix); + + let tips = []; + if (includePackages.length) { + tips.push( + `These packages ${chalk.yellow(includePackages.join(', '))} will be ${chalk.bold( + 'bundled', + )} to dist/node_modules.`, + ); + } + if (excludePackages.length) { + tips.push(`These packages ${chalk.yellow(excludePackages.join(', '))} will be ${chalk.bold('exclude')}.`); + } + tips.push(`For more information, please refer to: ${chalk.blue('https://docs.nocobase.com/development/deps')}.`); + log(tips.join(' ')); + + if (!includePackages.length) return; + + const deps = getDepsConfig(cwd, outDir, includePackages, external); + + // bundle deps + for (const dep of Object.keys(deps)) { + const { outputDir, mainFile, pkg, nccConfig, depDir } = deps[dep]; + const outputPackageJson = path.join(outputDir, 'package.json'); + + // cache check + if (fs.existsSync(outputPackageJson)) { + const outputPackage = require(outputPackageJson); + if (outputPackage.version === pkg.version) { + continue; + } + } + + // copy package + await fs.copy(depDir, outputDir, { errorOnExist: false }); + + // delete files + const deleteFiles = fg.sync( + [ + './**/*.map', + './**/*.js.map', + './**/*.md', + './**/*.mjs', + './**/*.png', + './**/*.jpg', + './**/*.jpeg', + './**/*.gif', + './**/*/.bin', + './**/*/bin', + './**/*/LICENSE', + './**/*/tsconfig.json', + ], + { cwd: outputDir, absolute: true }, + ); + + deleteFiles.forEach((file) => { + fs.unlinkSync(file); + }); + + await ncc(dep, nccConfig).then( + ({ code, assets }: { code: string; assets: Record }) => { + // emit dist file + fs.writeFileSync(mainFile, code, 'utf-8'); + + // emit assets + Object.entries(assets).forEach(([name, item]) => { + fs.writeFileSync(path.join(outputDir, name), item.source, { + encoding: 'utf-8', + mode: item.permissions, + }); + }); + + // emit package.json + fs.writeFileSync( + outputPackageJson, + JSON.stringify({ + ...pkg, + _lastModified: new Date().toISOString(), + }), + 'utf-8', + ); + }, + ); + } +} + +export async function buildPluginServer(cwd: string, log: Log) { + log('build server source'); + const packageJson = getPackageJson(cwd); + const serverFiles = fg.globSync(serverGlobalFiles, { cwd, absolute: true }); + buildCheck({ cwd, packageJson, entry: 'server', files: serverFiles, log }); + + await tsupBuild({ + entry: serverFiles, + splitting: false, + clean: false, + bundle: false, + silent: true, + treeshake: true, + target: 'node16', + outDir: path.join(cwd, target_dir), + format: 'cjs', + skipNodeModulesBundle: true, + }); + + await buildServerDeps(cwd, serverFiles, log); +} + +export function buildPluginClient(cwd: string, log: Log) { + log('build client'); + + const packageJson = getPackageJson(cwd); + const clientFiles = fg.globSync(clientGlobalFiles, { cwd, absolute: true }); + const sourcePackages = getSourcePackages(clientFiles); + const excludePackages = getExcludePackages(sourcePackages, external, pluginPrefix); + + buildCheck({ cwd, packageJson, entry: 'client', files: clientFiles, log }); + + const outDir = path.join(cwd, target_dir, 'client'); + + const globals = excludePackages.reduce>((prev, curr) => { + if (curr.startsWith('@nocobase')) { + prev[`${curr}/client`] = curr; + } + prev[curr] = curr; + return prev; + }, {}); + + const entry = fg.globSync('src/client/index.{ts,tsx,js,jsx}', { cwd }); + const outputFileName = 'index.js'; + return viteBuild({ + mode: 'production', + define: { + 'process.env.NODE_ENV': JSON.stringify('production'), + }, + logLevel: 'warn', + build: { + minify: false, + outDir, + cssCodeSplit: false, + emptyOutDir: false, + lib: { + entry, + formats: ['umd'], + name: packageJson.name, + fileName: () => outputFileName, + }, + rollupOptions: { + cache: true, + external: Object.keys(globals), + output: { + exports: 'named', + globals, + }, + }, + }, + plugins: [ + react(), + cssInjectedByJsPlugin({ styleId: packageJson.name }), + { + name: 'check-file-size', + closeBundle() { + const file = path.join(outDir, outputFileName); + if (!fs.existsSync(file)) return; + const fileSize = getFileSize(path.join(outDir, outputFileName)); + if (fileSize > 1024 * 1024) { + log('The bundle file size exceeds 1MB %s. ', chalk.red(formatFileSize(fileSize))); + } + }, + }, + ], + }); +} diff --git a/packages/core/build/src/fixtures/build/lerna-pkgs/core/bar/package.json b/packages/core/build/src/fixtures/build/lerna-pkgs/core/bar/package.json index 694594cfe..b6b8cf94a 100755 --- a/packages/core/build/src/fixtures/build/lerna-pkgs/core/bar/package.json +++ b/packages/core/build/src/fixtures/build/lerna-pkgs/core/bar/package.json @@ -1,3 +1,3 @@ { - "name": "bar" + "name": "bar1" } diff --git a/packages/core/build/src/fixtures/build/lerna-pkgs/core/foo/package.json b/packages/core/build/src/fixtures/build/lerna-pkgs/core/foo/package.json index bde99de92..f3a825360 100755 --- a/packages/core/build/src/fixtures/build/lerna-pkgs/core/foo/package.json +++ b/packages/core/build/src/fixtures/build/lerna-pkgs/core/foo/package.json @@ -1,3 +1,3 @@ { - "name": "foo" + "name": "foo13" } diff --git a/packages/core/build/src/fixtures/build/lerna-root-config-override/packages/bar/package.json b/packages/core/build/src/fixtures/build/lerna-root-config-override/packages/bar/package.json index 694594cfe..fd7f94503 100755 --- a/packages/core/build/src/fixtures/build/lerna-root-config-override/packages/bar/package.json +++ b/packages/core/build/src/fixtures/build/lerna-root-config-override/packages/bar/package.json @@ -1,3 +1,3 @@ { - "name": "bar" + "name": "bar4" } diff --git a/packages/core/build/src/fixtures/build/lerna-root-config-override/packages/foo/package.json b/packages/core/build/src/fixtures/build/lerna-root-config-override/packages/foo/package.json index bde99de92..7cb1c7033 100755 --- a/packages/core/build/src/fixtures/build/lerna-root-config-override/packages/foo/package.json +++ b/packages/core/build/src/fixtures/build/lerna-root-config-override/packages/foo/package.json @@ -1,3 +1,3 @@ { - "name": "foo" + "name": "foo12" } diff --git a/packages/core/build/src/fixtures/build/lerna-root-config/packages/bar/package.json b/packages/core/build/src/fixtures/build/lerna-root-config/packages/bar/package.json index 694594cfe..fd5a6bdb0 100755 --- a/packages/core/build/src/fixtures/build/lerna-root-config/packages/bar/package.json +++ b/packages/core/build/src/fixtures/build/lerna-root-config/packages/bar/package.json @@ -1,3 +1,3 @@ { - "name": "bar" + "name": "bar2" } diff --git a/packages/core/build/src/fixtures/build/lerna-root-config/packages/foo/package.json b/packages/core/build/src/fixtures/build/lerna-root-config/packages/foo/package.json index bde99de92..5626be510 100755 --- a/packages/core/build/src/fixtures/build/lerna-root-config/packages/foo/package.json +++ b/packages/core/build/src/fixtures/build/lerna-root-config/packages/foo/package.json @@ -1,3 +1,3 @@ { - "name": "foo" + "name": "foo25" } diff --git a/packages/core/build/src/fixtures/build/lerna-root-scope/packages/bar/package.json b/packages/core/build/src/fixtures/build/lerna-root-scope/packages/bar/package.json index 694594cfe..fd0de3e4a 100755 --- a/packages/core/build/src/fixtures/build/lerna-root-scope/packages/bar/package.json +++ b/packages/core/build/src/fixtures/build/lerna-root-scope/packages/bar/package.json @@ -1,3 +1,3 @@ { - "name": "bar" + "name": "bar11" } diff --git a/packages/core/build/src/fixtures/build/lerna-root-scope/packages/foo/package.json b/packages/core/build/src/fixtures/build/lerna-root-scope/packages/foo/package.json index bde99de92..34c9c24b9 100755 --- a/packages/core/build/src/fixtures/build/lerna-root-scope/packages/foo/package.json +++ b/packages/core/build/src/fixtures/build/lerna-root-scope/packages/foo/package.json @@ -1,3 +1,3 @@ { - "name": "foo" + "name": "foo11" } diff --git a/packages/core/build/src/fixtures/build/lerna-root-tsconfig/packages/bar/package.json b/packages/core/build/src/fixtures/build/lerna-root-tsconfig/packages/bar/package.json index 694594cfe..2c35b0b5e 100755 --- a/packages/core/build/src/fixtures/build/lerna-root-tsconfig/packages/bar/package.json +++ b/packages/core/build/src/fixtures/build/lerna-root-tsconfig/packages/bar/package.json @@ -1,3 +1,3 @@ { - "name": "bar" + "name": "bar12" } diff --git a/packages/core/build/src/fixtures/build/lerna-root-tsconfig/packages/foo/package.json b/packages/core/build/src/fixtures/build/lerna-root-tsconfig/packages/foo/package.json index bde99de92..3033ce68c 100755 --- a/packages/core/build/src/fixtures/build/lerna-root-tsconfig/packages/foo/package.json +++ b/packages/core/build/src/fixtures/build/lerna-root-tsconfig/packages/foo/package.json @@ -1,3 +1,3 @@ { - "name": "foo" + "name": "foo1124" } diff --git a/packages/core/build/src/fixtures/build/lerna-scope-packages/packages/foo/package.json b/packages/core/build/src/fixtures/build/lerna-scope-packages/packages/foo/package.json index bde99de92..7baacbcc0 100755 --- a/packages/core/build/src/fixtures/build/lerna-scope-packages/packages/foo/package.json +++ b/packages/core/build/src/fixtures/build/lerna-scope-packages/packages/foo/package.json @@ -1,3 +1,3 @@ { - "name": "foo" + "name": "foo11233" } diff --git a/packages/core/build/src/fixtures/build/lerna/packages/bar/package.json b/packages/core/build/src/fixtures/build/lerna/packages/bar/package.json index 694594cfe..0129a78e3 100755 --- a/packages/core/build/src/fixtures/build/lerna/packages/bar/package.json +++ b/packages/core/build/src/fixtures/build/lerna/packages/bar/package.json @@ -1,3 +1,3 @@ { - "name": "bar" + "name": "bar3" } diff --git a/packages/core/build/src/fixtures/build/lerna/packages/foo/package.json b/packages/core/build/src/fixtures/build/lerna/packages/foo/package.json index bde99de92..a524e58b2 100755 --- a/packages/core/build/src/fixtures/build/lerna/packages/foo/package.json +++ b/packages/core/build/src/fixtures/build/lerna/packages/foo/package.json @@ -1,3 +1,3 @@ { - "name": "foo" + "name": "foo24" } diff --git a/packages/core/build/src/fixtures/build/require-node_modules-in-sub-directory/package.json b/packages/core/build/src/fixtures/build/require-node_modules-in-sub-directory/package.json index bde99de92..951ea3bd1 100755 --- a/packages/core/build/src/fixtures/build/require-node_modules-in-sub-directory/package.json +++ b/packages/core/build/src/fixtures/build/require-node_modules-in-sub-directory/package.json @@ -1,3 +1,3 @@ { - "name": "foo" + "name": "foo21" } diff --git a/packages/core/build/src/utils/buildPluginUtils.test.ts b/packages/core/build/src/utils/buildPluginUtils.test.ts new file mode 100644 index 000000000..ab79cdf54 --- /dev/null +++ b/packages/core/build/src/utils/buildPluginUtils.test.ts @@ -0,0 +1,265 @@ +import path from 'path'; +import { getPackageNameFromString, getPackagesFromFiles, getSourcePackages, getPackageJson, getPackageJsonPackages, checkRequirePackageJson, checkEntryExists, isValidPackageName, checkDependencies, getFileSize, formatFileSize } from './buildPluginUtils' +import { expect, vitest } from 'vitest'; + +describe('buildPluginUtils', () => { + it('isValidPackageName', () => { + expect(isValidPackageName("my-package")).toBeTruthy() + expect(isValidPackageName("123-package")).toBeTruthy() + expect(isValidPackageName("my_package")).toBeTruthy() + expect(isValidPackageName("@vendor/package")).toBeTruthy() + expect(isValidPackageName("@scope/my-package")).toBeTruthy() + expect(isValidPackageName("my@package")).toBeFalsy(); + expect(isValidPackageName("")).toBeFalsy(); + }) + + describe('getPackageNameFromString', () => { + it('should return package name', () => { + expect(getPackageNameFromString('antd')).toEqual('antd') + }) + it('should return package name with scope', () => { + expect(getPackageNameFromString('@nocobase/plugin-antd')).toEqual('@nocobase/plugin-antd') + }) + it('should return package name with file', () => { + expect(getPackageNameFromString('antd/local/zh.json')).toEqual('antd') + }) + it('should return package name with scope and file', () => { + expect(getPackageNameFromString('@ant-design/icons/Loading.tsx')).toEqual('@ant-design/icons') + }) + it('should return package name with string template', () => { + expect(getPackageNameFromString('antd/local/${lang}')).toEqual('antd') + }) + it('should return package name with scope and string template', () => { + expect(getPackageNameFromString('@ant-design/icons/${lang}')).toEqual('@ant-design/icons') + }) + it('should not return package name with var', () => { + expect(getPackageNameFromString('${lang}')).toEqual(null) + expect(getPackageNameFromString('${lang}/foo')).toEqual(null) + }) + it('should not return package name with relative path', () => { + expect(getPackageNameFromString('../package.json')).toEqual(null) + expect(getPackageNameFromString('./foo/bar')).toEqual(null) + }) + }) + + describe('getPackagesFromFiles', () => { + it('import packages', () => { + const file = ` + import xxx from 'module-name0'; + import defaultExport from "module-name1"; + import * as name from "module-name2"; + import { export1 } from "module-name3"; + import { export1 as alias1 } from "module-name4"; + import { export1 , export2 } from "module-name5"; + import { foo , bar } from "module-name6/path/to/specific/un-exported/file"; + import defaultExport, * as name from "module-name7"; + import { + a, + b as lang, + } from 'module-name8' + import "module-name9"; + + const a = 1; + const b = 'foo'; + + import myDefault from '/modules/my-module.js' + import { + reallyReallyLongModuleExportName as shortName, + anotherLongModuleName as short + } from '/modules/my-module.js' + ` + expect(getPackagesFromFiles([file])).toEqual([ + 'module-name0', + 'module-name1', + 'module-name2', + 'module-name3', + 'module-name4', + 'module-name5', + 'module-name6', + 'module-name7', + 'module-name8', + 'module-name9', + ]) + }) + + it('require packages', () => { + const file = ` + const dayjs = require("dayjs"); + const { Button } = require('antd'); + const cloneDeep = require('lodash/cloneDeep') + const { + Form, + Button, + } = require('@formily/antd') + const Loading = require('@ant-design/icons/Loading') + const Github = require('@ant-design/icons/Github') + require('systemjs') + + const lang = require(\`moment/locale/\${lang}\`) + const foo = require('../foo') + + const packageJson = require('../package.json') + const { getPackageNameFromString } = require('./buildPluginUtils') + + const file = './foo' + const foo = require(file) + ` + + expect(getPackagesFromFiles([file])).toEqual(['dayjs', 'antd', 'lodash', '@formily/antd', '@ant-design/icons', 'systemjs', 'moment']) + }) + + it('import and require packages', () => { + const file = ` + import dayjs from "dayjs"; + const { Button } = require('antd'); + ` + expect(getPackagesFromFiles([file])).toEqual(['dayjs', 'antd']) + }) + + it('multiple files', () => { + const file1 = ` + import dayjs from "dayjs"; + import { Button } from 'antd'; + ` + + const file2 = ` + import dayjs from "dayjs"; + import cloneDeep from 'lodash/cloneDeep' + import { Form } from '@formily/antd' + ` + + expect(getPackagesFromFiles([file1, file2])).toEqual(['dayjs', 'antd', 'lodash', '@formily/antd']) + }) + }) + + it('getSourcePackages', () => { + const res = getSourcePackages([ + path.join(__dirname, './fixtures/buildPluginUtils/getSourcePackages/file1'), + path.join(__dirname, './fixtures/buildPluginUtils/getSourcePackages/file2'), + ]); + + expect(res).toEqual(['react', 'dayjs', 'lodash', 'mock-axios', 'antd']) + }) + + it('getPackageJson', () => { + const res = getPackageJson(path.join(__dirname, './fixtures/buildPluginUtils')); + expect(res).toContain({ + "name": "@nocobase/plugin-xxx" + }) + }) + + it('getPackageJsonPackages', () => { + const res = getPackageJsonPackages({ + devDependencies: { + 'dayjs': '1.0.0', + 'axios': '1.0.0', + }, + dependencies: { + 'dayjs': '1.0.0', + 'antd': '1.0.0', + 'lodash': '1.0.0', + } + }); + expect(res).toEqual(['dayjs', 'axios', 'antd', 'lodash']) + }) + + describe('checkRequirePackageJson', () => { + it('case1: should throw error', () => { + const exit = process.exit; + process.exit = vitest.fn(); + + const log = vitest.fn(); + checkRequirePackageJson([ + path.join(__dirname, './fixtures/buildPluginUtils/checkRequirePackageJson/file1') + ], log); + + expect(process.exit).toBeCalled(); + expect(log).toBeCalled(); + + process.exit = exit; + }) + it('case2: should throw error', () => { + const exit = process.exit; + process.exit = vitest.fn(); + + const log = vitest.fn(); + checkRequirePackageJson([ + path.join(__dirname, './fixtures/buildPluginUtils/checkRequirePackageJson/file2') + ], log); + + expect(process.exit).toBeCalled(); + expect(log).toBeCalled(); + + process.exit = exit; + }) + + it('should not throw error', () => { + const file = path.join(__dirname, './fixtures/buildPluginUtils/checkRequirePackageJson/file3'); + const log = vitest.fn(); + checkRequirePackageJson([file], log); + expect(log).not.toBeCalled(); + }) + }) + + describe('checkEntryExists', () => { + it('entry exists, should not throw error', () => { + const exit = process.exit; + process.exit = vitest.fn(); + + const log = vitest.fn(); + checkEntryExists(path.join(__dirname, './fixtures/buildPluginUtils/checkEntryExists/exists'), 'client', log); + checkEntryExists(path.join(__dirname, './fixtures/buildPluginUtils/checkEntryExists/exists'), 'server', log); + + expect(process.exit).not.toBeCalled(); + expect(log).not.toBeCalled(); + + process.exit = exit; + }) + it('entry not exists, should throw error', () => { + const exit = process.exit; + process.exit = vitest.fn(); + + const log = vitest.fn(); + checkEntryExists(path.join(__dirname, './fixtures/buildPluginUtils/checkEntryExists/notExists'), 'client', log); + + expect(process.exit).toBeCalled(); + expect(log).toBeCalled(); + + process.exit = exit; + }) + }) + + describe('checkDependencies', () => { + it('has tip', () => { + const log = vitest.fn(); + const packageJson = { + dependencies: { + 'antd': '1.0.0', + 'dayjs': '1.0.0', + } + } + checkDependencies(packageJson, log); + expect(log).toBeCalled(); + }) + it('no tip', () => { + const log = vitest.fn(); + const packageJson = { + devDependencies: { + 'lodash': '1.0.0', + 'dayjs': '1.0.0', + } + } + checkDependencies(packageJson, log); + expect(log).not.toBeCalled(); + }) + }) + + it('getFileSize', () => { + expect(getFileSize(path.join(__dirname, './fixtures/buildPluginUtils/getFileSize'))).toMatchInlineSnapshot('1024') + }) + + it('formatFileSize', () => { + expect(formatFileSize(1024)).toBe('1.00 KB') + expect(formatFileSize(100)).toBe('0.10 KB') + }) +}) diff --git a/packages/core/build/src/utils/buildPluginUtils.ts b/packages/core/build/src/utils/buildPluginUtils.ts new file mode 100644 index 000000000..65c5dab7c --- /dev/null +++ b/packages/core/build/src/utils/buildPluginUtils.ts @@ -0,0 +1,128 @@ +import fs from 'fs'; +import chalk from 'chalk'; +import { builtinModules } from 'module'; +import path from 'path'; + +const requireRegex = /require\s*\(['"`](.*?)['"`]\)/g; +const importRegex = /^import(?:['"\s]*([\w*${}\s,]+)from\s*)?['"\s]['"\s](.*[@\w_-]+)['"\s].*/gm; + +type Log = (msg: string, ...args: any) => void; + +export function isNotBuiltinModule(packageName: string) { + return !builtinModules.includes(packageName); +} + +export const isValidPackageName = (str: string) => { + const pattern = /^(?:@[a-zA-Z0-9_-]+\/)?[a-zA-Z0-9_-]+$/; + return pattern.test(str); +} + +/** + * get package name from string + * @example + * getPackageNameFromString('lodash') => lodash + * getPackageNameFromString('lodash/xx') => lodash + * getPackageNameFromString('@aa/bb') => @aa/bb + * getPackageNameFromString('aa/${lang}') => aa + * + * getPackageNameFromString('./xx') => null + * getPackageNameFromString('../xx') => null + * getPackageNameFromString($file) => null + * getPackageNameFromString(`${file}`) => null + * getPackageNameFromString($file + './xx') => null + */ +export function getPackageNameFromString(str: string) { + // ./xx or ../xx + if (str.startsWith('.')) return null; + + const arr = str.split('/'); + let packageName: string; + if (arr[0].startsWith('@')) { + // @aa/bb/ccFile => @aa/bb + packageName = arr.slice(0, 2).join('/'); + } else { + // aa/bbFile => aa + packageName = arr[0]; + } + + packageName = packageName.trim() + + return isValidPackageName(packageName) ? packageName : null; +} + +export function getPackagesFromFiles(files: string[]): string[] { + const packageNames = files + .map(item => [...[...item.matchAll(importRegex)].map(item => item[2]), ...[...item.matchAll(requireRegex)].map(item => item[1])]) + .flat() + .map(getPackageNameFromString) + .filter(Boolean) + .filter(isNotBuiltinModule); + + return [...new Set(packageNames)]; +} + +export function getSourcePackages(sourcePaths: string[]): string[] { + const files = sourcePaths.map(item => fs.readFileSync(item, 'utf-8')) + return getPackagesFromFiles(files); +} + +export function getIncludePackages(sourcePackages: string[], external: string[], pluginPrefix: string[]): string[] { + return sourcePackages + .filter(packageName => !external.includes(packageName)) // exclude external + .filter(packageName => !pluginPrefix.some(prefix => packageName.startsWith(prefix))) // exclude other plugin +} + +export function getExcludePackages(sourcePackages: string[], external: string[], pluginPrefix: string[]): string[] { + const includePackages = getIncludePackages(sourcePackages, external, pluginPrefix); + return sourcePackages.filter(packageName => !includePackages.includes(packageName)) +} + +export function getPackageJson(cwd: string) { + return JSON.parse(fs.readFileSync(path.join(cwd, 'package.json'), 'utf-8')); +} + +export function getPackageJsonPackages(packageJson: Record): string[] { + return [...new Set([...Object.keys(packageJson.devDependencies || {}), ...Object.keys(packageJson.dependencies || {})])]; +} + +export function checkEntryExists(cwd: string, entry: 'server' | 'client', log: Log) { + const srcDir = path.join(cwd, 'src', entry); + if (!fs.existsSync(srcDir)) { + log('Missing %s. Please create it.', chalk.red(`src/${entry}`)); + process.exit(-1); + } + + return srcDir; +} + +export function checkDependencies(packageJson: Record, log: Log) { + const packages = Object.keys(packageJson.dependencies || {}) + if (!packages.length) return; + log("The build tool will package all dependencies into the dist directory, so you don't need to put them in %s. Instead, they should be placed in %s. For more information, please refer to: %s.", chalk.yellow(packages.join(', ')), chalk.yellow('dependencies'), chalk.yellow('devDependencies'), chalk.blue(chalk.blue('https://docs.nocobase.com/development/deps'))); +} + +type CheckOptions = { + cwd: string; + log: Log; + entry: 'server' | 'client'; + files: string[]; + packageJson: Record; +} + +export function getFileSize(filePath: string) { + const stat = fs.statSync(filePath); + return stat.size; +} + +export function formatFileSize(fileSize: number) { + const kb = fileSize / 1024; + return kb.toFixed(2) + ' KB'; +} + +export function buildCheck(options: CheckOptions) { + const { cwd, log, entry, files, packageJson } = options; + checkEntryExists(cwd, entry, log) + + // checkRequirePackageJson(files, log); + checkDependencies(packageJson, log); +} diff --git a/packages/core/build/src/utils/fixtures/buildPluginUtils/checkRequirePackageJson/file1 b/packages/core/build/src/utils/fixtures/buildPluginUtils/checkRequirePackageJson/file1 new file mode 100644 index 000000000..9f193cbb9 --- /dev/null +++ b/packages/core/build/src/utils/fixtures/buildPluginUtils/checkRequirePackageJson/file1 @@ -0,0 +1,3 @@ +const packageJson = require('../package.json') + +const namespace = packageJson.name; diff --git a/packages/core/build/src/utils/fixtures/buildPluginUtils/checkRequirePackageJson/file2 b/packages/core/build/src/utils/fixtures/buildPluginUtils/checkRequirePackageJson/file2 new file mode 100644 index 000000000..98e1119c6 --- /dev/null +++ b/packages/core/build/src/utils/fixtures/buildPluginUtils/checkRequirePackageJson/file2 @@ -0,0 +1,3 @@ + + +const namespace = require('../../../package.json').name; diff --git a/packages/core/build/src/utils/fixtures/buildPluginUtils/checkRequirePackageJson/file3 b/packages/core/build/src/utils/fixtures/buildPluginUtils/checkRequirePackageJson/file3 new file mode 100644 index 000000000..94827781b --- /dev/null +++ b/packages/core/build/src/utils/fixtures/buildPluginUtils/checkRequirePackageJson/file3 @@ -0,0 +1,3 @@ +import { name } from '../package.json' + +export const namespace = name; diff --git a/packages/core/build/src/utils/fixtures/buildPluginUtils/getFileSize b/packages/core/build/src/utils/fixtures/buildPluginUtils/getFileSize new file mode 100644 index 000000000..ad8ffed60 --- /dev/null +++ b/packages/core/build/src/utils/fixtures/buildPluginUtils/getFileSize @@ -0,0 +1,9 @@ +content +contentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontent + +contentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontent + + +contentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontent +contentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontent +contentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontentcontent diff --git a/packages/core/build/src/utils/fixtures/buildPluginUtils/getSourcePackages/file1 b/packages/core/build/src/utils/fixtures/buildPluginUtils/getSourcePackages/file1 new file mode 100644 index 000000000..cafac9ad8 --- /dev/null +++ b/packages/core/build/src/utils/fixtures/buildPluginUtils/getSourcePackages/file1 @@ -0,0 +1,10 @@ +import React from 'react'; +import dayjs from 'dayjs'; +import cloneDeep from 'lodash/cloneDeep'; + +const day = dayjs(); +const button =
123
+ +function bar() { +const mock = require('mock-axios') +} \ No newline at end of file diff --git a/packages/core/build/src/utils/fixtures/buildPluginUtils/getSourcePackages/file2 b/packages/core/build/src/utils/fixtures/buildPluginUtils/getSourcePackages/file2 new file mode 100644 index 000000000..70eccf3cc --- /dev/null +++ b/packages/core/build/src/utils/fixtures/buildPluginUtils/getSourcePackages/file2 @@ -0,0 +1,7 @@ +const dayjs = require("dayjs"); +import bar from './file1' + +function foo() { + const lang = 'zh-cn' + const res = require(`antd/locale/${lang}`) +} diff --git a/packages/core/build/src/utils/fixtures/buildPluginUtils/package.json b/packages/core/build/src/utils/fixtures/buildPluginUtils/package.json new file mode 100644 index 000000000..fe2811fcf --- /dev/null +++ b/packages/core/build/src/utils/fixtures/buildPluginUtils/package.json @@ -0,0 +1,19 @@ +{ + "name": "@nocobase/plugin-xxx", + "main": "./lib/server/index.js", + "devDependencies": { + "@nocobase/acl": "*", + "@nocobase/actions": "*", + "@nocobase/client": "*", + "@nocobase/database": "*", + "@nocobase/server": "*", + "@nocobase/test": "*", + "@nocobase/utils": "*", + "react": "^18.2.0", + "react-dom": "^18.2.0" + }, + "dependencies": { + "@types/jsonwebtoken": "^8.5.8", + "jsonwebtoken": "^8.5.1" + } +} diff --git a/packages/core/build/src/utils/getDepsConfig.ts b/packages/core/build/src/utils/getDepsConfig.ts new file mode 100644 index 000000000..1c9a37fa3 --- /dev/null +++ b/packages/core/build/src/utils/getDepsConfig.ts @@ -0,0 +1,103 @@ +import path from 'path'; +import pkgUp from 'pkg-up'; + +export function winPath(path: string) { + const isExtendedLengthPath = /^\\\\\?\\/.test(path); + if (isExtendedLengthPath) { + return path; + } + return path.replace(/\\/g, '/'); +} + +/** + * get relative externals for specific pre-bundle pkg from other pre-bundle deps + * @note for example, "compiled/a" can be externalized in "compiled/b" as "../a" + */ +export function getRltExternalsFromDeps( + depExternals: Record, + current: { name: string; outputDir: string }, +) { + return Object.entries(depExternals).reduce>( + (r, [dep, target]) => { + // skip self + if (dep !== current.name) { + // transform dep externals path to relative path + r[dep] = winPath( + path.relative(current.outputDir, path.dirname(target)), + ); + } + + return r; + }, + {}, + ); +} + +/** + * get package.json path for specific NPM package + */ +export function getDepPkgPath(dep: string, cwd: string) { + try { + return require.resolve(`${dep}/package.json`, { paths: [cwd] }); + } catch { + return pkgUp.sync({ + cwd: require.resolve(dep, { paths: [cwd] }), + })!; + } +} + +interface IDepPkg { + nccConfig: { + minify: boolean; + target: string; + quiet: boolean; + externals: Record; + }; + depDir: string; + pkg: Record; + outputDir: string; + mainFile: string; +} + +export function getDepsConfig(cwd: string, outDir: string, depsName: string[], external: string[]) { + const pkgExternals: Record = external.reduce((r, dep) => ({ ...r, [dep]: dep }), {}); + + const depExternals = {}; + const deps = depsName.reduce>((acc, packageName) => { + const depEntryPath = require.resolve(packageName, { paths: [cwd] }); + const depPkgPath = getDepPkgPath(packageName, cwd); + const depPkg = require(depPkgPath); + const depDir = path.dirname(depPkgPath); + const outputDir = path.join(outDir, packageName); + const mainFile = path.join(outputDir, depEntryPath.replace(depDir, '')); + acc[depEntryPath] = { + nccConfig: { + minify: true, + target: 'es5', + quiet: true, + externals: {}, + }, + depDir, + pkg: depPkg, + outputDir, + mainFile, + } + + return acc; + }, {}) + + // process externals for deps + Object.values(deps).forEach((depConfig) => { + const rltDepExternals = getRltExternalsFromDeps(depExternals, { + name: depConfig.pkg.name!, + outputDir: depConfig.outputDir, + }); + + depConfig.nccConfig.externals = { + ...pkgExternals, + ...rltDepExternals, + }; + }); + + return deps; +} diff --git a/packages/core/build/src/utils/getLernaPackages/fixtures/customize/package.json b/packages/core/build/src/utils/getLernaPackages/fixtures/customize/package.json index cb5e0b6fe..7e961448c 100755 --- a/packages/core/build/src/utils/getLernaPackages/fixtures/customize/package.json +++ b/packages/core/build/src/utils/getLernaPackages/fixtures/customize/package.json @@ -1,4 +1,4 @@ { - "name": "default-packages", + "name": "default-packages1", "private": true } diff --git a/packages/core/build/src/utils/getLernaPackages/fixtures/customize/packages/bar/package.json b/packages/core/build/src/utils/getLernaPackages/fixtures/customize/packages/bar/package.json index 06a8b8dcc..e3b20542b 100755 --- a/packages/core/build/src/utils/getLernaPackages/fixtures/customize/packages/bar/package.json +++ b/packages/core/build/src/utils/getLernaPackages/fixtures/customize/packages/bar/package.json @@ -1,4 +1,4 @@ { - "name": "bar", + "name": "bar221", "version": "1.0.0" } diff --git a/packages/core/build/src/utils/getLernaPackages/fixtures/customize/packages/foo/package.json b/packages/core/build/src/utils/getLernaPackages/fixtures/customize/packages/foo/package.json index 215274b02..216bc8025 100755 --- a/packages/core/build/src/utils/getLernaPackages/fixtures/customize/packages/foo/package.json +++ b/packages/core/build/src/utils/getLernaPackages/fixtures/customize/packages/foo/package.json @@ -1,5 +1,5 @@ { - "name": "foo", + "name": "foo1121", "version": "1.0.0", "dependencies": { "bar": "1.0.0" diff --git a/packages/core/build/src/utils/getLernaPackages/fixtures/default/package.json b/packages/core/build/src/utils/getLernaPackages/fixtures/default/package.json index cb5e0b6fe..eb50eb29a 100755 --- a/packages/core/build/src/utils/getLernaPackages/fixtures/default/package.json +++ b/packages/core/build/src/utils/getLernaPackages/fixtures/default/package.json @@ -1,4 +1,4 @@ { - "name": "default-packages", + "name": "default-packages2", "private": true } diff --git a/packages/core/build/src/utils/getLernaPackages/fixtures/default/packages/bar/package.json b/packages/core/build/src/utils/getLernaPackages/fixtures/default/packages/bar/package.json index 06a8b8dcc..956bd3e05 100755 --- a/packages/core/build/src/utils/getLernaPackages/fixtures/default/packages/bar/package.json +++ b/packages/core/build/src/utils/getLernaPackages/fixtures/default/packages/bar/package.json @@ -1,4 +1,4 @@ { - "name": "bar", + "name": "bar2223", "version": "1.0.0" } diff --git a/packages/core/build/src/utils/getLernaPackages/index.ts b/packages/core/build/src/utils/getLernaPackages/index.ts index f9d45da48..7ed72de15 100755 --- a/packages/core/build/src/utils/getLernaPackages/index.ts +++ b/packages/core/build/src/utils/getLernaPackages/index.ts @@ -1,6 +1,7 @@ +import Topo from '@hapi/topo'; +import { filterPackages } from '@lerna/filter-packages'; import { getPackagesSync } from '@lerna/project'; import { QueryGraph } from '@lerna/query-graph'; -import { filterPackages } from '@lerna/filter-packages'; export interface Options { /** 指定包含的包 */ @@ -19,17 +20,23 @@ export interface Options { * @param cwd */ export async function getLernaPackages(cwd: string, ops: Options = {}): Promise { - const { - include = [], - exclude = [], - skipPrivate = false, - } = ops; + const { include = [], exclude = [], skipPrivate = false } = ops; + + const sorter = new Topo.Sorter(); const allPkgs = getPackagesSync(cwd) ?? []; const pkgs = filterPackages(allPkgs, include, exclude, !skipPrivate, true); - return await getStreamPackages(pkgs); + // const packages = await getStreamPackages(pkgs); + + for (const pkg of pkgs) { + const pkgJson = require(`${pkg.name}/package.json`); + const after = Object.keys({ ...pkgJson.dependencies, ...pkgJson.devDependencies, ...pkgJson.peerDependencies }); + sorter.add(pkg, { after, group: pkg.name }); + } + + return sorter.nodes; } export function getStreamPackages(pkgs: any[]): Promise { @@ -39,7 +46,8 @@ export function getStreamPackages(pkgs: any[]): Promise { const returnValues: any[] = []; const queueNextAvailablePackages = () => - graph.getAvailablePackages() + graph + .getAvailablePackages() // @ts-ignore .forEach(({ pkg, name }) => { graph.markAsTaken(name); @@ -47,11 +55,13 @@ export function getStreamPackages(pkgs: any[]): Promise { Promise.resolve(pkg) .then((value) => returnValues.push(value)) .then(() => graph.markAsDone(pkg)) - .then(() => queueNextAvailablePackages()) + .then(() => queueNextAvailablePackages()); }); queueNextAvailablePackages(); - setTimeout(() => { resolve(returnValues); }, 0); + setTimeout(() => { + resolve(returnValues); + }, 0); }); } diff --git a/packages/core/cache/.npmignore b/packages/core/cache/.npmignore index d44041bb5..c593fe9df 100644 --- a/packages/core/cache/.npmignore +++ b/packages/core/cache/.npmignore @@ -1,8 +1,2 @@ -node_modules -*.log -docs -__tests__ -jest.config.js -tsconfig.json -src -.fatherrc.ts \ No newline at end of file +/node_modules +/src \ No newline at end of file diff --git a/packages/core/cli/.npmignore b/packages/core/cli/.npmignore index eb03e3e1e..30bc16279 100644 --- a/packages/core/cli/.npmignore +++ b/packages/core/cli/.npmignore @@ -1,2 +1 @@ -node_modules -*.log +/node_modules \ No newline at end of file diff --git a/packages/core/cli/bin/index.js b/packages/core/cli/bin/index.js index 3b3ac86a8..99c9c5e40 100755 --- a/packages/core/cli/bin/index.js +++ b/packages/core/cli/bin/index.js @@ -5,7 +5,6 @@ const { resolve } = require('path'); const { existsSync } = require('fs'); const env = { - APP_PACKAGE_ROOT: 'app', APP_ENV: 'development', APP_KEY: 'test-jwt-secret', APP_PORT: 13000, @@ -17,6 +16,7 @@ const env = { LOCAL_STORAGE_DEST: 'storage/uploads', MFSU_AD: 'none', PM2_HOME: resolve(process.cwd(), './storage/.pm2'), + PLUGIN_PACKAGE_PREFIX: '@nocobase/plugin-,@nocobase/plugin-sample-,@nocobase/preset-', }; if (!process.env.APP_ENV_PATH && process.argv[2] && process.argv[2] === 'test') { diff --git a/packages/core/cli/package.json b/packages/core/cli/package.json index e06001cb2..1b95cf3be 100644 --- a/packages/core/cli/package.json +++ b/packages/core/cli/package.json @@ -8,6 +8,7 @@ "nocobase": "./bin/index.js" }, "dependencies": { + "@nocobase/app": "0.11.1-alpha.5", "@types/fs-extra": "^11.0.1", "@umijs/utils": "3.5.20", "chalk": "^4.1.1", diff --git a/packages/core/cli/src/commands/build.js b/packages/core/cli/src/commands/build.js index eb9d0da1c..3f4ba89a9 100644 --- a/packages/core/cli/src/commands/build.js +++ b/packages/core/cli/src/commands/build.js @@ -1,6 +1,6 @@ -const { resolve } = require('path'); +const { resolve, dirname } = require('path'); const { Command } = require('commander'); -const { run, nodeCheck, isPackageValid, promptForTs } = require('../util'); +const { run, nodeCheck, isPackageValid, promptForTs, hasCorePackages } = require('../util'); /** * @@ -8,7 +8,7 @@ const { run, nodeCheck, isPackageValid, promptForTs } = require('../util'); */ module.exports = (cli) => { const { APP_PACKAGE_ROOT } = process.env; - const clientPackage = `${APP_PACKAGE_ROOT}/client`; + const clientPackage = `core/app`; cli .command('build') .allowUnknownOption() @@ -24,13 +24,16 @@ module.exports = (cli) => { }); } } - if (!pkgs.length || !pkgs.includes(clientPackage) || (pkgs.includes(clientPackage) && pkgs.length > 1)) { - await run('nocobase-build', process.argv.slice(3)); + await run('nocobase-build', process.argv.slice(3)); + if (!hasCorePackages()) { + return; } if (!pkgs.length || pkgs.includes(clientPackage)) { + const file = require.resolve('@nocobase/app'); await run('umi', ['build'], { env: { - APP_ROOT: `packages/${APP_PACKAGE_ROOT}/client`, + APP_ROOT: `${dirname(dirname(file))}/client`, + NODE_ENV: 'production', }, }); } diff --git a/packages/core/cli/src/commands/clean.js b/packages/core/cli/src/commands/clean.js index 34906e6f2..36615c4eb 100644 --- a/packages/core/cli/src/commands/clean.js +++ b/packages/core/cli/src/commands/clean.js @@ -14,6 +14,7 @@ module.exports = (cli) => { if (!isDev()) { return; } + run('rimraf', ['-rf', './storage/app-dev']); run('rimraf', ['-rf', './**/{.umi,.umi-production}']); run('rimraf', ['-rf', 'packages/*/*/{lib,esm,es,dist,node_modules}']); }); diff --git a/packages/core/cli/src/commands/dev.js b/packages/core/cli/src/commands/dev.js index 8dd319aab..b21464b71 100644 --- a/packages/core/cli/src/commands/dev.js +++ b/packages/core/cli/src/commands/dev.js @@ -25,7 +25,7 @@ module.exports = (cli) => { './tsconfig.server.json', '-r', 'tsconfig-paths/register', - `./packages/${APP_PACKAGE_ROOT}/server/src/index.ts`, + `${APP_PACKAGE_ROOT}/src/index.ts`, ...process.argv.slice(2), ]); return; @@ -65,7 +65,7 @@ module.exports = (cli) => { './tsconfig.server.json', '-r', 'tsconfig-paths/register', - `./packages/${APP_PACKAGE_ROOT}/server/src/index.ts`, + `${APP_PACKAGE_ROOT}/src/index.ts`, 'start', ...process.argv.slice(3), `--port=${serverPort}`, @@ -98,7 +98,7 @@ module.exports = (cli) => { run('umi', ['dev'], { env: { PORT: clientPort, - APP_ROOT: `packages/${APP_PACKAGE_ROOT}/client`, + APP_ROOT: `${APP_PACKAGE_ROOT}/client`, PROXY_TARGET_URL: process.env.PROXY_TARGET_URL || (serverPort ? `http://127.0.0.1:${serverPort}` : undefined), }, diff --git a/packages/core/cli/src/commands/global.js b/packages/core/cli/src/commands/global.js index de8d5e7bf..517c40b4c 100644 --- a/packages/core/cli/src/commands/global.js +++ b/packages/core/cli/src/commands/global.js @@ -20,11 +20,11 @@ module.exports = (cli) => { './tsconfig.server.json', '-r', 'tsconfig-paths/register', - `./packages/${APP_PACKAGE_ROOT}/server/src/index.ts`, + `${APP_PACKAGE_ROOT}/src/index.ts`, ...process.argv.slice(2), ]); } else if (isProd()) { - run('node', [`./packages/${APP_PACKAGE_ROOT}/server/lib/index.js`, ...process.argv.slice(2)]); + run('node', [`${APP_PACKAGE_ROOT}/lib/index.js`, ...process.argv.slice(2)]); } }); }; diff --git a/packages/core/cli/src/commands/index.js b/packages/core/cli/src/commands/index.js index 7c42a4131..9f4e0052f 100644 --- a/packages/core/cli/src/commands/index.js +++ b/packages/core/cli/src/commands/index.js @@ -1,11 +1,12 @@ const { Command } = require('commander'); -const { isPackageValid } = require('../util'); +const { isPackageValid, generateAppDir } = require('../util'); /** * * @param {Command} cli */ module.exports = (cli) => { + generateAppDir(); require('./global')(cli); require('./build')(cli); require('./dev')(cli); diff --git a/packages/core/cli/src/commands/postinstall.js b/packages/core/cli/src/commands/postinstall.js index 94e6439bb..804004c3a 100644 --- a/packages/core/cli/src/commands/postinstall.js +++ b/packages/core/cli/src/commands/postinstall.js @@ -31,7 +31,7 @@ module.exports = (cli) => { run('umi', ['generate', 'tmp'], { stdio: 'pipe', env: { - APP_ROOT: `packages/${APP_PACKAGE_ROOT}/client`, + APP_ROOT: `${APP_PACKAGE_ROOT}/client`, }, }); }); diff --git a/packages/core/cli/src/commands/start.js b/packages/core/cli/src/commands/start.js index 827375b94..f7b003284 100644 --- a/packages/core/cli/src/commands/start.js +++ b/packages/core/cli/src/commands/start.js @@ -28,12 +28,12 @@ module.exports = (cli) => { './tsconfig.server.json', '-r', 'tsconfig-paths/register', - `./packages/${APP_PACKAGE_ROOT}/server/src/index.ts`, + `${APP_PACKAGE_ROOT}/src/index.ts`, ...process.argv.slice(2), ]); return; } - if (!existsSync(resolve(process.cwd(), `./packages/${APP_PACKAGE_ROOT}/server/lib/index.js`))) { + if (!existsSync(resolve(process.cwd(), `${APP_PACKAGE_ROOT}/lib/index.js`))) { console.log('The code is not compiled, please execute it first'); console.log(chalk.yellow('$ yarn build')); console.log('If you want to run in development mode, please execute'); @@ -44,21 +44,21 @@ module.exports = (cli) => { const restartMark = resolve(process.cwd(), 'storage', 'restart'); if (!existsSync(restartMark)) { if (opts.quickstart) { - await run('node', [`./packages/${APP_PACKAGE_ROOT}/server/lib/index.js`, 'install', '--ignore-installed']); - await run('node', [`./packages/${APP_PACKAGE_ROOT}/server/lib/index.js`, 'upgrade']); + await run('node', [`${APP_PACKAGE_ROOT}/lib/index.js`, 'install', '--ignore-installed']); + await run('node', [`${APP_PACKAGE_ROOT}/lib/index.js`, 'upgrade']); } if (opts.dbSync) { - await run('node', [`./packages/${APP_PACKAGE_ROOT}/server/lib/index.js`, 'db:sync']); + await run('node', [`${APP_PACKAGE_ROOT}/lib/index.js`, 'db:sync']); } } if (opts.daemon) { - run('pm2', ['start', `packages/${APP_PACKAGE_ROOT}/server/lib/index.js`, '--', ...process.argv.slice(2)]); + run('pm2', ['start', `${APP_PACKAGE_ROOT}/lib/index.js`, '--', ...process.argv.slice(2)]); } else { run( 'pm2-runtime', [ 'start', - `packages/${APP_PACKAGE_ROOT}/server/lib/index.js`, + `${APP_PACKAGE_ROOT}/lib/index.js`, NODE_ARGS ? `--node-args="${NODE_ARGS}"` : undefined, '--', ...process.argv.slice(2), diff --git a/packages/core/cli/src/commands/umi.js b/packages/core/cli/src/commands/umi.js index c87f934c1..de04b72d6 100644 --- a/packages/core/cli/src/commands/umi.js +++ b/packages/core/cli/src/commands/umi.js @@ -17,7 +17,7 @@ module.exports = (cli) => { } run('umi', process.argv.slice(3), { env: { - APP_ROOT: `packages/${APP_PACKAGE_ROOT}/client`, + APP_ROOT: `${APP_PACKAGE_ROOT}/client`, }, }); }); diff --git a/packages/core/cli/src/commands/upgrade.js b/packages/core/cli/src/commands/upgrade.js index 2b20a6435..9cd0ab317 100644 --- a/packages/core/cli/src/commands/upgrade.js +++ b/packages/core/cli/src/commands/upgrade.js @@ -1,7 +1,8 @@ const chalk = require('chalk'); const { Command } = require('commander'); const { resolve } = require('path'); -const { getVersion, run, promptForTs, runAppCommand, hasCorePackages, updateJsonFile, hasTsNode } = require('../util'); +const { run, promptForTs, runAppCommand, hasCorePackages, updateJsonFile, hasTsNode } = require('../util'); +const { existsSync, rmSync } = require('fs'); /** * @@ -25,25 +26,18 @@ module.exports = (cli) => { await runAppCommand('upgrade'); return; } - await runAppCommand('upgrade'); - // If ts-node is not installed, do not do the following + // await runAppCommand('upgrade'); if (!hasTsNode()) { + await runAppCommand('upgrade'); return; } - const version = await getVersion(); + // If ts-node is not installed, do not do the following + const appDevDir = resolve(process.cwd(), './storage/.app-dev'); + if (existsSync(appDevDir)) { + rmSync(appDevDir, { recursive: true, force: true }); + } await run('yarn', ['add', '@nocobase/cli', '@nocobase/devtools', '-W']); - const clientPackage = resolve(process.cwd(), `packages/${APP_PACKAGE_ROOT}/client/package.json`); - const serverPackage = resolve(process.cwd(), `packages/${APP_PACKAGE_ROOT}/server/package.json`); - await updateJsonFile(clientPackage, (data) => { - data.devDependencies['@nocobase/client'] = version; - return data; - }); - await updateJsonFile(serverPackage, (data) => { - data.dependencies['@nocobase/preset-nocobase'] = version; - return data; - }); await run('yarn', ['install']); - await run('nocobase', ['build']); await runAppCommand('upgrade'); }); }; diff --git a/packages/core/cli/src/util.js b/packages/core/cli/src/util.js index 27faa861c..4ba866ebf 100644 --- a/packages/core/cli/src/util.js +++ b/packages/core/cli/src/util.js @@ -1,9 +1,9 @@ const net = require('net'); const chalk = require('chalk'); const execa = require('execa'); -const { resolve } = require('path'); +const { dirname, resolve } = require('path'); const { readFile, writeFile } = require('fs').promises; -const { existsSync } = require('fs'); +const { existsSync, mkdirSync, cpSync } = require('fs'); exports.isPackageValid = (package) => { try { @@ -32,7 +32,7 @@ exports.isDev = function isDev() { const isProd = () => { const { APP_PACKAGE_ROOT } = process.env; - const file = `./packages/${APP_PACKAGE_ROOT}/server/lib/index.js`; + const file = `${APP_PACKAGE_ROOT}/lib/index.js`; if (!existsSync(resolve(process.cwd(), file))) { console.log('For production environment, please build the code first.'); console.log(); @@ -110,13 +110,13 @@ exports.runInstall = async () => { './tsconfig.server.json', '-r', 'tsconfig-paths/register', - `./packages/${APP_PACKAGE_ROOT}/server/src/index.ts`, + `${APP_PACKAGE_ROOT}/src/index.ts`, 'install', '-s', ]; await exports.run('tsx', argv); } else if (isProd()) { - const file = `./packages/${APP_PACKAGE_ROOT}/server/lib/index.js`; + const file = `${APP_PACKAGE_ROOT}/lib/index.js`; const argv = [file, 'install', '-s']; await exports.run('node', argv); } @@ -131,13 +131,13 @@ exports.runAppCommand = async (command, args = []) => { './tsconfig.server.json', '-r', 'tsconfig-paths/register', - `./packages/${APP_PACKAGE_ROOT}/server/src/index.ts`, + `${APP_PACKAGE_ROOT}/src/index.ts`, command, ...args, ]; await exports.run('tsx', argv); } else if (isProd()) { - const argv = [`./packages/${APP_PACKAGE_ROOT}/server/lib/index.js`, command, ...args]; + const argv = [`${APP_PACKAGE_ROOT}/lib/index.js`, command, ...args]; await exports.run('node', argv); } }; @@ -157,3 +157,20 @@ exports.getVersion = async () => { const versions = new Function(`return (${stdout})`)(); return versions[versions.length - 1]; }; + +exports.generateAppDir = function generateAppDir() { + const appPkgPath = dirname(dirname(require.resolve('@nocobase/app/src/index.ts'))); + const appDevDir = resolve(process.cwd(), './storage/.app-dev'); + if (exports.isDev() && !exports.hasCorePackages() && appPkgPath.includes('node_modules')) { + if (!existsSync(appDevDir)) { + mkdirSync(appDevDir, { force: true, recursive: true }); + cpSync(appPkgPath, appDevDir, { + recursive: true, + force: true, + }); + } + process.env.APP_PACKAGE_ROOT = appDevDir; + } else { + process.env.APP_PACKAGE_ROOT = appPkgPath; + } +}; diff --git a/packages/core/cli/templates/plugin/.npmignore.tpl b/packages/core/cli/templates/plugin/.npmignore.tpl new file mode 100644 index 000000000..65f5e8779 --- /dev/null +++ b/packages/core/cli/templates/plugin/.npmignore.tpl @@ -0,0 +1,2 @@ +/node_modules +/src diff --git a/packages/core/cli/templates/plugin/client.d.ts b/packages/core/cli/templates/plugin/client.d.ts index d515d1feb..6c459cbac 100755 --- a/packages/core/cli/templates/plugin/client.d.ts +++ b/packages/core/cli/templates/plugin/client.d.ts @@ -1,3 +1,2 @@ -export * from './src/client'; -export { default } from './src/client'; - +export * from './dist/client'; +export { default } from './dist/client'; diff --git a/packages/core/cli/templates/plugin/client.js b/packages/core/cli/templates/plugin/client.js index 3c39956ca..b6e3be70e 100755 --- a/packages/core/cli/templates/plugin/client.js +++ b/packages/core/cli/templates/plugin/client.js @@ -1 +1 @@ -module.exports = require('./lib/client/index.js'); +module.exports = require('./dist/client/index.js'); diff --git a/packages/core/cli/templates/plugin/package.json.tpl b/packages/core/cli/templates/plugin/package.json.tpl index aeb78e6f0..b0bcdc786 100644 --- a/packages/core/cli/templates/plugin/package.json.tpl +++ b/packages/core/cli/templates/plugin/package.json.tpl @@ -1,20 +1,11 @@ { "name": "{{{packageName}}}", "version": "{{{packageVersion}}}", - "main": "lib/server/index.js", - "files": [ - "lib", - "src", - "README.md", - "README.zh-CN.md", - "CHANGELOG.md", - "server.js", - "server.d.ts", - "client.js", - "client.d.ts" - ], - "devDependencies": { - "@nocobase/server": "{{{nocobaseVersion}}}", - "@nocobase/test": "{{{nocobaseVersion}}}" + "main": "dist/server/index.js", + "dependencies": {}, + "peerDependencies": { + "@nocobase/client": "0.x", + "@nocobase/server": "0.x", + "@nocobase/test": "0.x" } } diff --git a/packages/core/cli/templates/plugin/server.d.ts b/packages/core/cli/templates/plugin/server.d.ts index b55e6f70d..c41081ddc 100755 --- a/packages/core/cli/templates/plugin/server.d.ts +++ b/packages/core/cli/templates/plugin/server.d.ts @@ -1,3 +1,2 @@ -export * from './src/server'; -export { default } from './src/server'; - +export * from './dist/server'; +export { default } from './dist/server'; diff --git a/packages/core/cli/templates/plugin/server.js b/packages/core/cli/templates/plugin/server.js index adcc9d90d..972842039 100755 --- a/packages/core/cli/templates/plugin/server.js +++ b/packages/core/cli/templates/plugin/server.js @@ -1 +1 @@ -module.exports = require('./lib/server/index.js'); +module.exports = require('./dist/server/index.js'); diff --git a/packages/core/cli/templates/plugin/src/client/index.tsx.tpl b/packages/core/cli/templates/plugin/src/client/index.tsx.tpl index 3b509bc2d..b73d4b98b 100644 --- a/packages/core/cli/templates/plugin/src/client/index.tsx.tpl +++ b/packages/core/cli/templates/plugin/src/client/index.tsx.tpl @@ -2,7 +2,7 @@ import { Plugin } from '@nocobase/client'; export class {{{pascalCaseName}}}Plugin extends Plugin { async afterAdd() { - // this.app.pm.add() + // await this.app.pm.add() } async beforeLoad() {} diff --git a/packages/core/cli/templates/plugin/src/index.ts b/packages/core/cli/templates/plugin/src/index.ts index 7ddad5814..7e74612df 100644 --- a/packages/core/cli/templates/plugin/src/index.ts +++ b/packages/core/cli/templates/plugin/src/index.ts @@ -1 +1,2 @@ +export * from './server'; export { default } from './server'; diff --git a/packages/core/client/.npmignore b/packages/core/client/.npmignore index f6409efe6..f1b6bd97d 100644 --- a/packages/core/client/.npmignore +++ b/packages/core/client/.npmignore @@ -1,5 +1,3 @@ -node_modules -*.log -src/.umi -src/.umi-production -src \ No newline at end of file +/node_modules +/src +/.dumi \ No newline at end of file diff --git a/packages/core/client/package.json b/packages/core/client/package.json index ce9000124..4df822bd0 100644 --- a/packages/core/client/package.json +++ b/packages/core/client/package.json @@ -6,12 +6,16 @@ "module": "es/index.js", "types": "es/index.d.ts", "dependencies": { + "@ant-design/cssinjs": "^1.11.1", "@ant-design/pro-layout": "^7.14.3", + "@ant-design/icons": "^5.1.4", "@antv/g2plot": "^2.4.18", "@ctrl/tinycolor": "^3.6.0", "@dnd-kit/core": "^5.0.1", + "@dnd-kit/modifiers": "^6.0.0", "@dnd-kit/sortable": "^6.0.0", "@emotion/css": "^11.7.1", + "@types/requirejs": "^2.1.34", "@formily/antd-v5": "^1.1.0", "@formily/core": "^2.2.27", "@formily/grid": "^2.2.27", @@ -35,6 +39,7 @@ "file-saver": "^2.0.5", "i18next": "^22.4.9", "i18next-http-backend": "^2.1.1", + "lodash": "4.17.21", "markdown-it": "13.0.1", "markdown-it-highlightjs": "3.3.1", "mathjs": "^10.6.0", diff --git a/packages/core/client/src/application/Application.tsx b/packages/core/client/src/application/Application.tsx index 5db45de6e..dbfec6725 100644 --- a/packages/core/client/src/application/Application.tsx +++ b/packages/core/client/src/application/Application.tsx @@ -9,10 +9,20 @@ import { I18nextProvider } from 'react-i18next'; import { Link, NavLink, Navigate } from 'react-router-dom'; import { APIClient, APIClientProvider } from '../api-client'; import { i18n } from '../i18n'; +import type { Plugin } from './Plugin'; import { PluginManager, PluginType } from './PluginManager'; import { ComponentTypeAndString, RouterManager, RouterOptions } from './RouterManager'; import { AppComponent, BlankComponent, defaultAppComponents } from './components'; import { compose, normalizeContainer } from './utils'; +import { defineGlobalDeps } from './utils/globalDeps'; +import { getRequireJs } from './utils/requirejs'; +import type { RequireJS } from './utils/requirejs'; + +declare global { + interface Window { + define: RequireJS['define']; + } +} export type ComponentAndProps = [ComponentType, T]; export interface ApplicationOptions { @@ -23,7 +33,7 @@ export interface ApplicationOptions { components?: Record; scopes?: Record; router?: RouterOptions; - dynamicImport?: any; + devPlugins?: Record>; } export class Application { @@ -34,8 +44,12 @@ export class Application { public apiClient: APIClient; public components: Record = { ...defaultAppComponents }; public pm: PluginManager; + public devPlugins: Record> = {}; + public requirejs: RequireJS; constructor(protected options: ApplicationOptions = {}) { + this.initRequireJs(); + this.devPlugins = options.devPlugins || {}; this.scopes = merge(this.scopes, options.scopes); this.components = merge(this.components, options.components); this.apiClient = new APIClient(options.apiClient); @@ -50,6 +64,12 @@ export class Application { this.addProviders(options.providers || []); } + private initRequireJs() { + this.requirejs = getRequireJs(); + defineGlobalDeps(this.requirejs); + window.define = this.requirejs.define; + } + private addDefaultProviders() { this.use(APIClientProvider, { apiClient: this.apiClient }); this.use(I18nextProvider, { i18n: this.i18n }); @@ -63,10 +83,6 @@ export class Application { }); } - get dynamicImport() { - return this.options.dynamicImport; - } - getComposeProviders() { const Providers = compose(...this.providers)(BlankComponent); Providers.displayName = 'Providers'; diff --git a/packages/core/client/src/application/PluginManager.ts b/packages/core/client/src/application/PluginManager.ts index bac9ad93c..e91e4c452 100644 --- a/packages/core/client/src/application/PluginManager.ts +++ b/packages/core/client/src/application/PluginManager.ts @@ -1,16 +1,30 @@ import type { Application } from './Application'; import type { Plugin } from './Plugin'; +import { getPlugins } from './utils/remotePlugins'; export type PluginOptions = { name?: string; config?: T }; export type PluginType = typeof Plugin | [typeof Plugin, PluginOptions]; +export type PluginData = { + name: string; + packageName: string; + version: string; + url: string; + type: 'local' | 'upload' | 'npm'; +}; export class PluginManager { protected pluginInstances: Map = new Map(); protected pluginsAliases: Record = {}; - private loadStaticPlugin: Promise; + private initPlugins: Promise; + constructor(protected _plugins: PluginType[], protected app: Application) { this.app = app; - this.loadStaticPlugin = this.initStaticPlugins(_plugins); + this.initPlugins = this.init(_plugins); + } + + async init(_plugins: PluginType[]) { + await this.initStaticPlugins(_plugins); + await this.initRemotePlugins(); } private async initStaticPlugins(_plugins: PluginType[] = []) { @@ -21,6 +35,29 @@ export class PluginManager { } } + private async initRemotePlugins() { + try { + const res = await this.app.apiClient.request({ url: 'app:getPlugins' }); + const pluginList: PluginData[] = res.data?.data || []; + const plugins = await getPlugins({ + requirejs: this.app.requirejs, + pluginData: pluginList, + baseURL: this.app.apiClient.axios?.defaults?.baseURL, + devPlugins: this.app.devPlugins, + }); + for await (const plugin of plugins) { + await this.add(plugin); + } + } catch (error) { + if (401 === error?.response?.status) { + this.app.apiClient.auth.setRole(null); + window.location.reload(); + } else { + throw error; + } + } + } + async add(plugin: typeof Plugin, opts: PluginOptions = {}) { const instance = this.getInstance(plugin, opts); @@ -46,7 +83,7 @@ export class PluginManager { } async load() { - await this.loadStaticPlugin; + await this.initPlugins; for (const plugin of this.pluginInstances.values()) { await plugin.beforeLoad(); diff --git a/packages/core/client/src/application/__tests__/Application.test.tsx b/packages/core/client/src/application/__tests__/Application.test.tsx index ee28a34de..8f8c6592f 100644 --- a/packages/core/client/src/application/__tests__/Application.test.tsx +++ b/packages/core/client/src/application/__tests__/Application.test.tsx @@ -1,3 +1,5 @@ +import axios from 'axios'; +import MockAdapter from 'axios-mock-adapter'; import React, { Component } from 'react'; import { Link, Outlet } from 'react-router-dom'; import { render, screen, sleep, userEvent, waitFor } from 'testUtils'; @@ -6,6 +8,13 @@ import { Application } from '../Application'; import { Plugin } from '../Plugin'; describe('Application', () => { + beforeAll(() => { + const mock = new MockAdapter(axios); + mock.onGet('app:getPlugins').reply(200, { + data: [], + }); + }); + const router: any = { type: 'memory', initialEntries: ['/'] }; const initialComponentsLength = 6; const initialProvidersLength = 2; diff --git a/packages/core/client/src/application/__tests__/Plugin.test.ts b/packages/core/client/src/application/__tests__/Plugin.test.ts index ba1c341c2..5d8313fd9 100644 --- a/packages/core/client/src/application/__tests__/Plugin.test.ts +++ b/packages/core/client/src/application/__tests__/Plugin.test.ts @@ -1,7 +1,16 @@ +import axios from 'axios'; +import MockAdapter from 'axios-mock-adapter'; import { Application } from '../Application'; import { Plugin } from '../Plugin'; describe('Plugin', () => { + beforeAll(() => { + const mock = new MockAdapter(axios); + mock.onGet('app:getPlugins').reply(200, { + data: [], + }); + }); + it('lifecycle', async () => { const afterAdd = vitest.fn(); const beforeLoad = vitest.fn(); @@ -68,7 +77,7 @@ describe('PluginManager', () => { class Demo1Plugin extends Plugin { async afterAdd() { - this.app.pm.add(Demo2, { name: 'demo2', config }); + await this.app.pm.add(Demo2, { name: 'demo2', config }); } } const app = new Application({ @@ -91,7 +100,7 @@ describe('PluginManager', () => { }); it('get', async () => { - class DemoPlugin extends Plugin { } + class DemoPlugin extends Plugin {} const app = new Application({ plugins: [[DemoPlugin, { name: 'demo' }]] }); await app.load(); expect(app.pm.get('demo')).toBeInstanceOf(DemoPlugin); diff --git a/packages/core/client/src/application/__tests__/RouterManager.test.tsx b/packages/core/client/src/application/__tests__/RouterManager.test.tsx index 408da32a5..d2fc62c60 100644 --- a/packages/core/client/src/application/__tests__/RouterManager.test.tsx +++ b/packages/core/client/src/application/__tests__/RouterManager.test.tsx @@ -1,13 +1,19 @@ +import axios from 'axios'; +import MockAdapter from 'axios-mock-adapter'; import React, { FC } from 'react'; import { Link, Outlet } from 'react-router-dom'; import { render, screen, userEvent } from 'testUtils'; import { beforeAll } from 'vitest'; import { Application } from '../Application'; -import { RouterManager, RouteType } from '../RouterManager'; +import { RouteType, RouterManager } from '../RouterManager'; describe('Router', () => { let app: Application; beforeAll(() => { + const mock = new MockAdapter(axios); + mock.onGet('app:getPlugins').reply(200, { + data: [], + }); app = new Application(); }); diff --git a/packages/core/client/src/application/index.md b/packages/core/client/src/application/index.md index a0881873d..27f9d321f 100644 --- a/packages/core/client/src/application/index.md +++ b/packages/core/client/src/application/index.md @@ -323,7 +323,7 @@ import { Plugin } from '@nocobase/client'; class MyPlugin extends Plugin { async afterAdd() { // You can load other plugins here. - // this.app.pm.add(OtherPlugin) + // await this.app.pm.add(OtherPlugin) } async load() { @@ -364,8 +364,8 @@ class WorldPlugin extends Plugin { class MyPlugin extends Plugin { async afterAdd() { - this.app.pm.add(HelloPlugin); - this.app.pm.add(WorldPlugin); + await this.app.pm.add(HelloPlugin); + await this.app.pm.add(WorldPlugin); } } ``` diff --git a/packages/core/client/src/application/utils/globalDeps.ts b/packages/core/client/src/application/utils/globalDeps.ts new file mode 100644 index 000000000..6187ecdde --- /dev/null +++ b/packages/core/client/src/application/utils/globalDeps.ts @@ -0,0 +1,90 @@ +import * as antdCssinjs from '@ant-design/cssinjs'; +import * as antdIcons from '@ant-design/icons'; +import * as dndKitAccessibility from '@dnd-kit/accessibility'; +import * as dndKitCore from '@dnd-kit/core'; +import * as dndKitModifiers from '@dnd-kit/modifiers'; +import * as dndKitSortable from '@dnd-kit/sortable'; +import * as dndKitUtilities from '@dnd-kit/utilities'; +import * as emotionCss from '@emotion/css'; +import * as formilyAntdV5 from '@formily/antd-v5'; +import * as formilyCore from '@formily/core'; +import * as formilyJsonSchema from '@formily/json-schema'; +import * as formilyPath from '@formily/path'; +import * as formilyReact from '@formily/react'; +import * as formilyJsonReactive from '@formily/reactive'; +import * as formilyReactiveReact from '@formily/reactive-react'; +import * as formilyShared from '@formily/shared'; +import * as formilyValidator from '@formily/validator'; +import * as nocobaseEvaluators from '@nocobase/evaluators/client'; +import * as nocobaseClientUtils from '@nocobase/utils/client'; +import { dayjs } from '@nocobase/utils/client'; +import * as ahooks from 'ahooks'; +import * as antd from 'antd'; +import * as antdStyle from 'antd-style'; +import axios from 'axios'; +import * as i18next from 'i18next'; +import lodash from 'lodash'; +import React from 'react'; +import ReactDOM from 'react-dom'; +import * as reactI18next from 'react-i18next'; +import * as ReactRouter from 'react-router'; +import * as ReactRouterDom from 'react-router-dom'; +import jsxRuntime from 'react/jsx-runtime'; +import * as nocobaseClient from '../../index'; + +import type { RequireJS } from './requirejs'; + +export function defineGlobalDeps(requirejs: RequireJS) { + // react + requirejs.define('react', () => React); + requirejs.define('react-dom', () => ReactDOM); + requirejs.define('react/jsx-runtime', () => jsxRuntime); + + // react-router + requirejs.define('react-router', () => ReactRouter); + requirejs.define('react-router-dom', () => ReactRouterDom); + + // antd + requirejs.define('antd', () => antd); + requirejs.define('antd-style', () => antdStyle); + requirejs.define('@ant-design/icons', () => antdIcons); + requirejs.define('@ant-design/cssinjs', () => antdCssinjs); + + // i18next + requirejs.define('i18next', () => i18next); + requirejs.define('react-i18next', () => reactI18next); + + // formily + requirejs.define('@formily/antd-v5', () => formilyAntdV5); + requirejs.define('@formily/core', () => formilyCore); + requirejs.define('@formily/react', () => formilyReact); + requirejs.define('@formily/shared', () => formilyShared); + requirejs.define('@formily/json-schema', () => formilyJsonSchema); + requirejs.define('@formily/reactive', () => formilyJsonReactive); + requirejs.define('@formily/path', () => formilyPath); + requirejs.define('@formily/validator', () => formilyValidator); + requirejs.define('@formily/reactive-react', () => formilyReactiveReact); + + // nocobase + requirejs.define('@nocobase/utils', () => nocobaseClientUtils); + requirejs.define('@nocobase/utils/client', () => nocobaseClientUtils); + requirejs.define('@nocobase/client', () => nocobaseClient); + requirejs.define('@nocobase/client/client', () => nocobaseClient); + requirejs.define('@nocobase/evaluators', () => nocobaseEvaluators); + requirejs.define('@nocobase/evaluators/client', () => nocobaseEvaluators); + + // dnd-kit 相关 + requirejs.define('@dnd-kit/accessibility', () => dndKitAccessibility); + requirejs.define('@dnd-kit/core', () => dndKitCore); + requirejs.define('@dnd-kit/modifiers', () => dndKitModifiers); + requirejs.define('@dnd-kit/sortable', () => dndKitSortable); + requirejs.define('@dnd-kit/utilities', () => dndKitUtilities); + + // utils + requirejs.define('axios', () => axios); + requirejs.define('dayjs', () => dayjs); + requirejs.define('lodash', () => lodash); + requirejs.define('ahooks', () => ahooks); + requirejs.define('@emotion/css', () => emotionCss); + requirejs.define('dayjs', () => dayjs); +} diff --git a/packages/core/client/src/application/utils/remotePlugins.ts b/packages/core/client/src/application/utils/remotePlugins.ts new file mode 100644 index 000000000..c37b623c4 --- /dev/null +++ b/packages/core/client/src/application/utils/remotePlugins.ts @@ -0,0 +1,80 @@ +import type { Plugin } from '../Plugin'; +import type { PluginData } from '../PluginManager'; +import type { RequireJS } from './requirejs'; + +export function defineDevPlugins(plugins: Record) { + Object.entries(plugins).forEach(([name, plugin]) => { + window.define(name, () => plugin); + }); +} + +export function getRemotePlugins( + requirejs: any, + pluginData: PluginData[] = [], + baseURL = '', +): Promise> { + if (baseURL.endsWith('/')) { + baseURL = baseURL.slice(0, -1); + } + if (baseURL.endsWith('/api')) { + baseURL = baseURL.slice(0, -4); + } + + requirejs.requirejs.config({ + paths: pluginData.reduce>((memo, item) => { + memo[item.packageName] = `${baseURL}${item.url}`; + memo[`${item.packageName}/client`] = `${baseURL}${item.url}.js?client`; + return memo; + }, {}), + }); + + return new Promise((resolve, reject) => { + requirejs.requirejs( + pluginData.map((item) => item.packageName), + (...plugins: (typeof Plugin & { default?: typeof Plugin })[]) => { + resolve(plugins.map((item) => item.default || item)); + }, + reject, + ); + }); +} + +interface GetPluginsOption { + requirejs: RequireJS; + pluginData: PluginData[]; + baseURL?: string; + devPlugins?: Record>; +} + +export async function getPlugins(options: GetPluginsOption): Promise> { + const { requirejs, pluginData, baseURL, devPlugins = {} } = options; + + if (pluginData.length === 0) return []; + + if (process.env.NODE_ENV === 'development' && !process.env.USE_REMOTE_PLUGIN) { + const plugins: Array = []; + + const resolveDevPlugins: Record = {}; + const pluginPackageNames = pluginData.map((item) => item.packageName); + for await (const packageName of pluginPackageNames) { + if (devPlugins[packageName]) { + const plugin = await devPlugins[packageName]; + plugins.push(plugin.default); + resolveDevPlugins[packageName] = plugin.default; + } + } + defineDevPlugins(resolveDevPlugins); + + const remotePlugins = pluginData.filter((item) => !devPlugins[item.packageName]); + + if (remotePlugins.length === 0) { + return plugins; + } + + const remotePluginList = await getRemotePlugins(requirejs, remotePlugins, baseURL); + plugins.push(...remotePluginList); + return plugins; + } + + return getRemotePlugins(requirejs, pluginData, baseURL); +} diff --git a/packages/core/client/src/application/utils/requirejs.ts b/packages/core/client/src/application/utils/requirejs.ts new file mode 100644 index 000000000..60c0d01a7 --- /dev/null +++ b/packages/core/client/src/application/utils/requirejs.ts @@ -0,0 +1,2159 @@ +// @ts-nocheck +/* eslint-disable */ +/* prettier-ignore */ +/** vim: et:ts=4:sw=4:sts=4 + * @license RequireJS 2.3.6 Copyright jQuery Foundation and other contributors. + * Released under MIT license, https://github.com/requirejs/requirejs/blob/master/LICENSE + */ +//Not using strict: uneven strict support in browsers, #392, and causes +//problems with requirejs.exec()/transpiler plugins that may not be strict. +/*jslint regexp: true, nomen: true, sloppy: true */ +/*global window, navigator, document, importScripts, setTimeout, opera */ +/// + +export interface RequireJS { + require: Require + requirejs: Require + define: RequireDefine +} + +export function getRequireJs(): RequireJS { + var requirejs, require, define; + var req, s, head, baseElement, dataMain, src, + interactiveScript, currentlyAddingScript, mainScript, subPath, + version = '2.3.6', + commentRegExp = /\/\*[\s\S]*?\*\/|([^:"'=]|^)\/\/.*$/mg, + cjsRequireRegExp = /[^.]\s*require\s*\(\s*["']([^'"\s]+)["']\s*\)/g, + jsSuffixRegExp = /\.js$/, + currDirRegExp = /^\.\//, + op = Object.prototype, + ostring = op.toString, + hasOwn = op.hasOwnProperty, + isBrowser = !!(typeof window !== 'undefined' && typeof navigator !== 'undefined' && window.document), + isWebWorker = !isBrowser && typeof importScripts !== 'undefined', + //PS3 indicates loaded and complete, but need to wait for complete + //specifically. Sequence is 'loading', 'loaded', execution, + // then 'complete'. The UA check is unfortunate, but not sure how + //to feature test w/o causing perf issues. + readyRegExp = isBrowser && navigator.platform === 'PLAYSTATION 3' ? + /^complete$/ : /^(complete|loaded)$/, + defContextName = '_', + //Oh the tragedy, detecting opera. See the usage of isOpera for reason. + isOpera = typeof opera !== 'undefined' && opera.toString() === '[object Opera]', + contexts = {}, + cfg = {}, + globalDefQueue = [], + useInteractive = false; + + //Could match something like ')//comment', do not lose the prefix to comment. + function commentReplace(match, singlePrefix) { + return singlePrefix || ''; + } + + function isFunction(it) { + return ostring.call(it) === '[object Function]'; + } + + function isArray(it) { + return ostring.call(it) === '[object Array]'; + } + + /** + * Helper function for iterating over an array. If the func returns + * a true value, it will break out of the loop. + */ + function each(ary, func) { + if (ary) { + var i; + for (i = 0; i < ary.length; i += 1) { + if (ary[i] && func(ary[i], i, ary)) { + break; + } + } + } + } + + /** + * Helper function for iterating over an array backwards. If the func + * returns a true value, it will break out of the loop. + */ + function eachReverse(ary, func) { + if (ary) { + var i; + for (i = ary.length - 1; i > -1; i -= 1) { + if (ary[i] && func(ary[i], i, ary)) { + break; + } + } + } + } + + function hasProp(obj, prop) { + return hasOwn.call(obj, prop); + } + + function getOwn(obj, prop) { + return hasProp(obj, prop) && obj[prop]; + } + + /** + * Cycles over properties in an object and calls a function for each + * property value. If the function returns a truthy value, then the + * iteration is stopped. + */ + function eachProp(obj, func) { + var prop; + for (prop in obj) { + if (hasProp(obj, prop)) { + if (func(obj[prop], prop)) { + break; + } + } + } + } + + /** + * Simple function to mix in properties from source into target, + * but only if target does not already have a property of the same name. + */ + function mixin(target, source, force, deepStringMixin) { + if (source) { + eachProp(source, function (value, prop) { + if (force || !hasProp(target, prop)) { + if (deepStringMixin && typeof value === 'object' && value && + !isArray(value) && !isFunction(value) && + !(value instanceof RegExp)) { + + if (!target[prop]) { + target[prop] = {}; + } + mixin(target[prop], value, force, deepStringMixin); + } else { + target[prop] = value; + } + } + }); + } + return target; + } + + //Similar to Function.prototype.bind, but the 'this' object is specified + //first, since it is easier to read/figure out what 'this' will be. + function bind(obj, fn) { + return function () { + return fn.apply(obj, arguments); + }; + } + + function scripts() { + return document.getElementsByTagName('script'); + } + + function defaultOnError(err) { + throw err; + } + + //Allow getting a global that is expressed in + //dot notation, like 'a.b.c'. + function getGlobal(value) { + if (!value) { + return value; + } + var g = global; + each(value.split('.'), function (part) { + g = g[part]; + }); + return g; + } + + /** + * Constructs an error with a pointer to an URL with more information. + * @param {String} id the error ID that maps to an ID on a web page. + * @param {String} message human readable error. + * @param {Error} [err] the original error, if there is one. + * + * @returns {Error} + */ + function makeError(id, msg, err, requireModules) { + var e = new Error(msg + '\nhttps://requirejs.org/docs/errors.html#' + id); + e.requireType = id; + e.requireModules = requireModules; + if (err) { + e.originalError = err; + } + return e; + } + + if (typeof define !== 'undefined') { + //If a define is already in play via another AMD loader, + //do not overwrite. + return; + } + + if (typeof requirejs !== 'undefined') { + if (isFunction(requirejs)) { + //Do not overwrite an existing requirejs instance. + return; + } + cfg = requirejs; + requirejs = undefined; + } + + //Allow for a require config object + if (typeof require !== 'undefined' && !isFunction(require)) { + //assume it is a config object. + cfg = require; + require = undefined; + } + + function newContext(contextName) { + var inCheckLoaded, Module, context, handlers, + checkLoadedTimeoutId, + config = { + //Defaults. Do not set a default for map + //config to speed up normalize(), which + //will run faster if there is no default. + waitSeconds: 7, + baseUrl: './', + paths: {}, + bundles: {}, + pkgs: {}, + shim: {}, + config: {} + }, + registry = {}, + //registry of just enabled modules, to speed + //cycle breaking code when lots of modules + //are registered, but not activated. + enabledRegistry = {}, + undefEvents = {}, + defQueue = [], + defined = {}, + urlFetched = {}, + bundlesMap = {}, + requireCounter = 1, + unnormalizedCounter = 1; + + /** + * Trims the . and .. from an array of path segments. + * It will keep a leading path segment if a .. will become + * the first path segment, to help with module name lookups, + * which act like paths, but can be remapped. But the end result, + * all paths that use this function should look normalized. + * NOTE: this method MODIFIES the input array. + * @param {Array} ary the array of path segments. + */ + function trimDots(ary) { + var i, part; + for (i = 0; i < ary.length; i++) { + part = ary[i]; + if (part === '.') { + ary.splice(i, 1); + i -= 1; + } else if (part === '..') { + // If at the start, or previous value is still .., + // keep them so that when converted to a path it may + // still work when converted to a path, even though + // as an ID it is less than ideal. In larger point + // releases, may be better to just kick out an error. + if (i === 0 || (i === 1 && ary[2] === '..') || ary[i - 1] === '..') { + continue; + } else if (i > 0) { + ary.splice(i - 1, 2); + i -= 2; + } + } + } + } + + /** + * Given a relative module name, like ./something, normalize it to + * a real name that can be mapped to a path. + * @param {String} name the relative name + * @param {String} baseName a real name that the name arg is relative + * to. + * @param {Boolean} applyMap apply the map config to the value. Should + * only be done if this normalization is for a dependency ID. + * @returns {String} normalized name + */ + function normalize(name, baseName, applyMap) { + var pkgMain, mapValue, nameParts, i, j, nameSegment, lastIndex, + foundMap, foundI, foundStarMap, starI, normalizedBaseParts, + baseParts = (baseName && baseName.split('/')), + map = config.map, + starMap = map && map['*']; + + //Adjust any relative paths. + if (name) { + name = name.split('/'); + lastIndex = name.length - 1; + + // If wanting node ID compatibility, strip .js from end + // of IDs. Have to do this here, and not in nameToUrl + // because node allows either .js or non .js to map + // to same file. + if (config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex])) { + name[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, ''); + } + + // Starts with a '.' so need the baseName + if (name[0].charAt(0) === '.' && baseParts) { + //Convert baseName to array, and lop off the last part, + //so that . matches that 'directory' and not name of the baseName's + //module. For instance, baseName of 'one/two/three', maps to + //'one/two/three.js', but we want the directory, 'one/two' for + //this normalization. + normalizedBaseParts = baseParts.slice(0, baseParts.length - 1); + name = normalizedBaseParts.concat(name); + } + + trimDots(name); + name = name.join('/'); + } + + //Apply map config if available. + if (applyMap && map && (baseParts || starMap)) { + nameParts = name.split('/'); + + outerLoop: for (i = nameParts.length; i > 0; i -= 1) { + nameSegment = nameParts.slice(0, i).join('/'); + + if (baseParts) { + //Find the longest baseName segment match in the config. + //So, do joins on the biggest to smallest lengths of baseParts. + for (j = baseParts.length; j > 0; j -= 1) { + mapValue = getOwn(map, baseParts.slice(0, j).join('/')); + + //baseName segment has config, find if it has one for + //this name. + if (mapValue) { + mapValue = getOwn(mapValue, nameSegment); + if (mapValue) { + //Match, update name to the new value. + foundMap = mapValue; + foundI = i; + break outerLoop; + } + } + } + } + + //Check for a star map match, but just hold on to it, + //if there is a shorter segment match later in a matching + //config, then favor over this star map. + if (!foundStarMap && starMap && getOwn(starMap, nameSegment)) { + foundStarMap = getOwn(starMap, nameSegment); + starI = i; + } + } + + if (!foundMap && foundStarMap) { + foundMap = foundStarMap; + foundI = starI; + } + + if (foundMap) { + nameParts.splice(0, foundI, foundMap); + name = nameParts.join('/'); + } + } + + // If the name points to a package's name, use + // the package main instead. + pkgMain = getOwn(config.pkgs, name); + + return pkgMain ? pkgMain : name; + } + + function removeScript(name) { + if (isBrowser) { + each(scripts(), function (scriptNode) { + if (scriptNode.getAttribute('data-requiremodule') === name && + scriptNode.getAttribute('data-requirecontext') === context.contextName) { + scriptNode.parentNode.removeChild(scriptNode); + return true; + } + }); + } + } + + function hasPathFallback(id) { + var pathConfig = getOwn(config.paths, id); + if (pathConfig && isArray(pathConfig) && pathConfig.length > 1) { + //Pop off the first array value, since it failed, and + //retry + pathConfig.shift(); + context.require.undef(id); + + //Custom require that does not do map translation, since + //ID is "absolute", already mapped/resolved. + context.makeRequire(null, { + skipMap: true + })([id]); + + return true; + } + } + + //Turns a plugin!resource to [plugin, resource] + //with the plugin being undefined if the name + //did not have a plugin prefix. + function splitPrefix(name) { + var prefix, + index = name ? name.indexOf('!') : -1; + if (index > -1) { + prefix = name.substring(0, index); + name = name.substring(index + 1, name.length); + } + return [prefix, name]; + } + + /** + * Creates a module mapping that includes plugin prefix, module + * name, and path. If parentModuleMap is provided it will + * also normalize the name via require.normalize() + * + * @param {String} name the module name + * @param {String} [parentModuleMap] parent module map + * for the module name, used to resolve relative names. + * @param {Boolean} isNormalized: is the ID already normalized. + * This is true if this call is done for a define() module ID. + * @param {Boolean} applyMap: apply the map config to the ID. + * Should only be true if this map is for a dependency. + * + * @returns {Object} + */ + function makeModuleMap(name, parentModuleMap, isNormalized, applyMap) { + var url, pluginModule, suffix, nameParts, + prefix = null, + parentName = parentModuleMap ? parentModuleMap.name : null, + originalName = name, + isDefine = true, + normalizedName = ''; + + //If no name, then it means it is a require call, generate an + //internal name. + if (!name) { + isDefine = false; + name = '_@r' + (requireCounter += 1); + } + + nameParts = splitPrefix(name); + prefix = nameParts[0]; + name = nameParts[1]; + + if (prefix) { + prefix = normalize(prefix, parentName, applyMap); + pluginModule = getOwn(defined, prefix); + } + + //Account for relative paths if there is a base name. + if (name) { + if (prefix) { + if (isNormalized) { + normalizedName = name; + } else if (pluginModule && pluginModule.normalize) { + //Plugin is loaded, use its normalize method. + normalizedName = pluginModule.normalize(name, function (name) { + return normalize(name, parentName, applyMap); + }); + } else { + // If nested plugin references, then do not try to + // normalize, as it will not normalize correctly. This + // places a restriction on resourceIds, and the longer + // term solution is not to normalize until plugins are + // loaded and all normalizations to allow for async + // loading of a loader plugin. But for now, fixes the + // common uses. Details in #1131 + normalizedName = name.indexOf('!') === -1 ? + normalize(name, parentName, applyMap) : + name; + } + } else { + //A regular module. + normalizedName = normalize(name, parentName, applyMap); + + //Normalized name may be a plugin ID due to map config + //application in normalize. The map config values must + //already be normalized, so do not need to redo that part. + nameParts = splitPrefix(normalizedName); + prefix = nameParts[0]; + normalizedName = nameParts[1]; + isNormalized = true; + + url = context.nameToUrl(normalizedName); + } + } + + //If the id is a plugin id that cannot be determined if it needs + //normalization, stamp it with a unique ID so two matching relative + //ids that may conflict can be separate. + suffix = prefix && !pluginModule && !isNormalized ? + '_unnormalized' + (unnormalizedCounter += 1) : + ''; + + return { + prefix: prefix, + name: normalizedName, + parentMap: parentModuleMap, + unnormalized: !!suffix, + url: url, + originalName: originalName, + isDefine: isDefine, + id: (prefix ? + prefix + '!' + normalizedName : + normalizedName) + suffix + }; + } + + function getModule(depMap) { + var id = depMap.id, + mod = getOwn(registry, id); + + if (!mod) { + mod = registry[id] = new context.Module(depMap); + } + + return mod; + } + + function on(depMap, name, fn) { + var id = depMap.id, + mod = getOwn(registry, id); + + if (hasProp(defined, id) && + (!mod || mod.defineEmitComplete)) { + if (name === 'defined') { + fn(defined[id]); + } + } else { + mod = getModule(depMap); + if (mod.error && name === 'error') { + fn(mod.error); + } else { + mod.on(name, fn); + } + } + } + + function onError(err, errback) { + var ids = err.requireModules, + notified = false; + + if (errback) { + errback(err); + } else { + each(ids, function (id) { + var mod = getOwn(registry, id); + if (mod) { + //Set error on module, so it skips timeout checks. + mod.error = err; + if (mod.events.error) { + notified = true; + mod.emit('error', err); + } + } + }); + + if (!notified) { + req.onError(err); + } + } + } + + /** + * Internal method to transfer globalQueue items to this context's + * defQueue. + */ + function takeGlobalQueue() { + //Push all the globalDefQueue items into the context's defQueue + if (globalDefQueue.length) { + each(globalDefQueue, function (queueItem) { + var id = queueItem[0]; + if (typeof id === 'string') { + context.defQueueMap[id] = true; + } + defQueue.push(queueItem); + }); + globalDefQueue = []; + } + } + + handlers = { + 'require': function (mod) { + if (mod.require) { + return mod.require; + } else { + return (mod.require = context.makeRequire(mod.map)); + } + }, + 'exports': function (mod) { + mod.usingExports = true; + if (mod.map.isDefine) { + if (mod.exports) { + return (defined[mod.map.id] = mod.exports); + } else { + return (mod.exports = defined[mod.map.id] = {}); + } + } + }, + 'module': function (mod) { + if (mod.module) { + return mod.module; + } else { + return (mod.module = { + id: mod.map.id, + uri: mod.map.url, + config: function () { + return getOwn(config.config, mod.map.id) || {}; + }, + exports: mod.exports || (mod.exports = {}) + }); + } + } + }; + + function cleanRegistry(id) { + //Clean up machinery used for waiting modules. + delete registry[id]; + delete enabledRegistry[id]; + } + + function breakCycle(mod, traced, processed) { + var id = mod.map.id; + + if (mod.error) { + mod.emit('error', mod.error); + } else { + traced[id] = true; + each(mod.depMaps, function (depMap, i) { + var depId = depMap.id, + dep = getOwn(registry, depId); + + //Only force things that have not completed + //being defined, so still in the registry, + //and only if it has not been matched up + //in the module already. + if (dep && !mod.depMatched[i] && !processed[depId]) { + if (getOwn(traced, depId)) { + mod.defineDep(i, defined[depId]); + mod.check(); //pass false? + } else { + breakCycle(dep, traced, processed); + } + } + }); + processed[id] = true; + } + } + + function checkLoaded() { + var err, usingPathFallback, + waitInterval = config.waitSeconds * 1000, + //It is possible to disable the wait interval by using waitSeconds of 0. + expired = waitInterval && (context.startTime + waitInterval) < new Date().getTime(), + noLoads = [], + reqCalls = [], + stillLoading = false, + needCycleCheck = true; + + //Do not bother if this call was a result of a cycle break. + if (inCheckLoaded) { + return; + } + + inCheckLoaded = true; + + //Figure out the state of all the modules. + eachProp(enabledRegistry, function (mod) { + var map = mod.map, + modId = map.id; + + //Skip things that are not enabled or in error state. + if (!mod.enabled) { + return; + } + + if (!map.isDefine) { + reqCalls.push(mod); + } + + if (!mod.error) { + //If the module should be executed, and it has not + //been inited and time is up, remember it. + if (!mod.inited && expired) { + if (hasPathFallback(modId)) { + usingPathFallback = true; + stillLoading = true; + } else { + noLoads.push(modId); + removeScript(modId); + } + } else if (!mod.inited && mod.fetched && map.isDefine) { + stillLoading = true; + if (!map.prefix) { + //No reason to keep looking for unfinished + //loading. If the only stillLoading is a + //plugin resource though, keep going, + //because it may be that a plugin resource + //is waiting on a non-plugin cycle. + return (needCycleCheck = false); + } + } + } + }); + + if (expired && noLoads.length) { + //If wait time expired, throw error of unloaded modules. + err = makeError('timeout', 'Load timeout for modules: ' + noLoads, null, noLoads); + err.contextName = context.contextName; + return onError(err); + } + + //Not expired, check for a cycle. + if (needCycleCheck) { + each(reqCalls, function (mod) { + breakCycle(mod, {}, {}); + }); + } + + //If still waiting on loads, and the waiting load is something + //other than a plugin resource, or there are still outstanding + //scripts, then just try back later. + if ((!expired || usingPathFallback) && stillLoading) { + //Something is still waiting to load. Wait for it, but only + //if a timeout is not already in effect. + if ((isBrowser || isWebWorker) && !checkLoadedTimeoutId) { + checkLoadedTimeoutId = setTimeout(function () { + checkLoadedTimeoutId = 0; + checkLoaded(); + }, 50); + } + } + + inCheckLoaded = false; + } + + Module = function (map) { + this.events = getOwn(undefEvents, map.id) || {}; + this.map = map; + this.shim = getOwn(config.shim, map.id); + this.depExports = []; + this.depMaps = []; + this.depMatched = []; + this.pluginMaps = {}; + this.depCount = 0; + + /* this.exports this.factory + this.depMaps = [], + this.enabled, this.fetched + */ + }; + + Module.prototype = { + init: function (depMaps, factory, errback, options) { + options = options || {}; + + //Do not do more inits if already done. Can happen if there + //are multiple define calls for the same module. That is not + //a normal, common case, but it is also not unexpected. + if (this.inited) { + return; + } + + this.factory = factory; + + if (errback) { + //Register for errors on this module. + this.on('error', errback); + } else if (this.events.error) { + //If no errback already, but there are error listeners + //on this module, set up an errback to pass to the deps. + errback = bind(this, function (err) { + this.emit('error', err); + }); + } + + //Do a copy of the dependency array, so that + //source inputs are not modified. For example + //"shim" deps are passed in here directly, and + //doing a direct modification of the depMaps array + //would affect that config. + this.depMaps = depMaps && depMaps.slice(0); + + this.errback = errback; + + //Indicate this module has be initialized + this.inited = true; + + this.ignore = options.ignore; + + //Could have option to init this module in enabled mode, + //or could have been previously marked as enabled. However, + //the dependencies are not known until init is called. So + //if enabled previously, now trigger dependencies as enabled. + if (options.enabled || this.enabled) { + //Enable this module and dependencies. + //Will call this.check() + this.enable(); + } else { + this.check(); + } + }, + + defineDep: function (i, depExports) { + //Because of cycles, defined callback for a given + //export can be called more than once. + if (!this.depMatched[i]) { + this.depMatched[i] = true; + this.depCount -= 1; + this.depExports[i] = depExports; + } + }, + + fetch: function () { + if (this.fetched) { + return; + } + this.fetched = true; + + context.startTime = (new Date()).getTime(); + + var map = this.map; + + //If the manager is for a plugin managed resource, + //ask the plugin to load it now. + if (this.shim) { + context.makeRequire(this.map, { + enableBuildCallback: true + })(this.shim.deps || [], bind(this, function () { + return map.prefix ? this.callPlugin() : this.load(); + })); + } else { + //Regular dependency. + return map.prefix ? this.callPlugin() : this.load(); + } + }, + + load: function () { + var url = this.map.url; + + //Regular dependency. + if (!urlFetched[url]) { + urlFetched[url] = true; + context.load(this.map.id, url); + } + }, + + /** + * Checks if the module is ready to define itself, and if so, + * define it. + */ + check: function () { + if (!this.enabled || this.enabling) { + return; + } + + var err, cjsModule, + id = this.map.id, + depExports = this.depExports, + exports = this.exports, + factory = this.factory; + + if (!this.inited) { + // Only fetch if not already in the defQueue. + if (!hasProp(context.defQueueMap, id)) { + this.fetch(); + } + } else if (this.error) { + this.emit('error', this.error); + } else if (!this.defining) { + //The factory could trigger another require call + //that would result in checking this module to + //define itself again. If already in the process + //of doing that, skip this work. + this.defining = true; + + if (this.depCount < 1 && !this.defined) { + if (isFunction(factory)) { + //If there is an error listener, favor passing + //to that instead of throwing an error. However, + //only do it for define()'d modules. require + //errbacks should not be called for failures in + //their callbacks (#699). However if a global + //onError is set, use that. + if ((this.events.error && this.map.isDefine) || + req.onError !== defaultOnError) { + try { + exports = context.execCb(id, factory, depExports, exports); + } catch (e) { + err = e; + } + } else { + exports = context.execCb(id, factory, depExports, exports); + } + + // Favor return value over exports. If node/cjs in play, + // then will not have a return value anyway. Favor + // module.exports assignment over exports object. + if (this.map.isDefine && exports === undefined) { + cjsModule = this.module; + if (cjsModule) { + exports = cjsModule.exports; + } else if (this.usingExports) { + //exports already set the defined value. + exports = this.exports; + } + } + + if (err) { + err.requireMap = this.map; + err.requireModules = this.map.isDefine ? [this.map.id] : null; + err.requireType = this.map.isDefine ? 'define' : 'require'; + return onError((this.error = err)); + } + + } else { + //Just a literal value + exports = factory; + } + + this.exports = exports; + + if (this.map.isDefine && !this.ignore) { + defined[id] = exports; + + if (req.onResourceLoad) { + var resLoadMaps = []; + each(this.depMaps, function (depMap) { + resLoadMaps.push(depMap.normalizedMap || depMap); + }); + req.onResourceLoad(context, this.map, resLoadMaps); + } + } + + //Clean up + cleanRegistry(id); + + this.defined = true; + } + + //Finished the define stage. Allow calling check again + //to allow define notifications below in the case of a + //cycle. + this.defining = false; + + if (this.defined && !this.defineEmitted) { + this.defineEmitted = true; + this.emit('defined', this.exports); + this.defineEmitComplete = true; + } + + } + }, + + callPlugin: function () { + var map = this.map, + id = map.id, + //Map already normalized the prefix. + pluginMap = makeModuleMap(map.prefix); + + //Mark this as a dependency for this plugin, so it + //can be traced for cycles. + this.depMaps.push(pluginMap); + + on(pluginMap, 'defined', bind(this, function (plugin) { + var load, normalizedMap, normalizedMod, + bundleId = getOwn(bundlesMap, this.map.id), + name = this.map.name, + parentName = this.map.parentMap ? this.map.parentMap.name : null, + localRequire = context.makeRequire(map.parentMap, { + enableBuildCallback: true + }); + + //If current map is not normalized, wait for that + //normalized name to load instead of continuing. + if (this.map.unnormalized) { + //Normalize the ID if the plugin allows it. + if (plugin.normalize) { + name = plugin.normalize(name, function (name) { + return normalize(name, parentName, true); + }) || ''; + } + + //prefix and name should already be normalized, no need + //for applying map config again either. + normalizedMap = makeModuleMap(map.prefix + '!' + name, + this.map.parentMap, + true); + on(normalizedMap, + 'defined', bind(this, function (value) { + this.map.normalizedMap = normalizedMap; + this.init([], function () { return value; }, null, { + enabled: true, + ignore: true + }); + })); + + normalizedMod = getOwn(registry, normalizedMap.id); + if (normalizedMod) { + //Mark this as a dependency for this plugin, so it + //can be traced for cycles. + this.depMaps.push(normalizedMap); + + if (this.events.error) { + normalizedMod.on('error', bind(this, function (err) { + this.emit('error', err); + })); + } + normalizedMod.enable(); + } + + return; + } + + //If a paths config, then just load that file instead to + //resolve the plugin, as it is built into that paths layer. + if (bundleId) { + this.map.url = context.nameToUrl(bundleId); + this.load(); + return; + } + + load = bind(this, function (value) { + this.init([], function () { return value; }, null, { + enabled: true + }); + }); + + load.error = bind(this, function (err) { + this.inited = true; + this.error = err; + err.requireModules = [id]; + + //Remove temp unnormalized modules for this module, + //since they will never be resolved otherwise now. + eachProp(registry, function (mod) { + if (mod.map.id.indexOf(id + '_unnormalized') === 0) { + cleanRegistry(mod.map.id); + } + }); + + onError(err); + }); + + //Allow plugins to load other code without having to know the + //context or how to 'complete' the load. + load.fromText = bind(this, function (text, textAlt) { + /*jslint evil: true */ + var moduleName = map.name, + moduleMap = makeModuleMap(moduleName), + hasInteractive = useInteractive; + + //As of 2.1.0, support just passing the text, to reinforce + //fromText only being called once per resource. Still + //support old style of passing moduleName but discard + //that moduleName in favor of the internal ref. + if (textAlt) { + text = textAlt; + } + + //Turn off interactive script matching for IE for any define + //calls in the text, then turn it back on at the end. + if (hasInteractive) { + useInteractive = false; + } + + //Prime the system by creating a module instance for + //it. + getModule(moduleMap); + + //Transfer any config to this other module. + if (hasProp(config.config, id)) { + config.config[moduleName] = config.config[id]; + } + + try { + req.exec(text); + } catch (e) { + return onError(makeError('fromtexteval', + 'fromText eval for ' + id + + ' failed: ' + e, + e, + [id])); + } + + if (hasInteractive) { + useInteractive = true; + } + + //Mark this as a dependency for the plugin + //resource + this.depMaps.push(moduleMap); + + //Support anonymous modules. + context.completeLoad(moduleName); + + //Bind the value of that module to the value for this + //resource ID. + localRequire([moduleName], load); + }); + + //Use parentName here since the plugin's name is not reliable, + //could be some weird string with no path that actually wants to + //reference the parentName's path. + plugin.load(map.name, localRequire, load, config); + })); + + context.enable(pluginMap, this); + this.pluginMaps[pluginMap.id] = pluginMap; + }, + + enable: function () { + enabledRegistry[this.map.id] = this; + this.enabled = true; + + //Set flag mentioning that the module is enabling, + //so that immediate calls to the defined callbacks + //for dependencies do not trigger inadvertent load + //with the depCount still being zero. + this.enabling = true; + + //Enable each dependency + each(this.depMaps, bind(this, function (depMap, i) { + var id, mod, handler; + + if (typeof depMap === 'string') { + //Dependency needs to be converted to a depMap + //and wired up to this module. + depMap = makeModuleMap(depMap, + (this.map.isDefine ? this.map : this.map.parentMap), + false, + !this.skipMap); + this.depMaps[i] = depMap; + + handler = getOwn(handlers, depMap.id); + + if (handler) { + this.depExports[i] = handler(this); + return; + } + + this.depCount += 1; + + on(depMap, 'defined', bind(this, function (depExports) { + if (this.undefed) { + return; + } + this.defineDep(i, depExports); + this.check(); + })); + + if (this.errback) { + on(depMap, 'error', bind(this, this.errback)); + } else if (this.events.error) { + // No direct errback on this module, but something + // else is listening for errors, so be sure to + // propagate the error correctly. + on(depMap, 'error', bind(this, function (err) { + this.emit('error', err); + })); + } + } + + id = depMap.id; + mod = registry[id]; + + //Skip special modules like 'require', 'exports', 'module' + //Also, don't call enable if it is already enabled, + //important in circular dependency cases. + if (!hasProp(handlers, id) && mod && !mod.enabled) { + context.enable(depMap, this); + } + })); + + //Enable each plugin that is used in + //a dependency + eachProp(this.pluginMaps, bind(this, function (pluginMap) { + var mod = getOwn(registry, pluginMap.id); + if (mod && !mod.enabled) { + context.enable(pluginMap, this); + } + })); + + this.enabling = false; + + this.check(); + }, + + on: function (name, cb) { + var cbs = this.events[name]; + if (!cbs) { + cbs = this.events[name] = []; + } + cbs.push(cb); + }, + + emit: function (name, evt) { + each(this.events[name], function (cb) { + cb(evt); + }); + if (name === 'error') { + //Now that the error handler was triggered, remove + //the listeners, since this broken Module instance + //can stay around for a while in the registry. + delete this.events[name]; + } + } + }; + + function callGetModule(args) { + //Skip modules already defined. + if (!hasProp(defined, args[0])) { + getModule(makeModuleMap(args[0], null, true)).init(args[1], args[2]); + } + } + + function removeListener(node, func, name, ieName) { + //Favor detachEvent because of IE9 + //issue, see attachEvent/addEventListener comment elsewhere + //in this file. + if (node.detachEvent && !isOpera) { + //Probably IE. If not it will throw an error, which will be + //useful to know. + if (ieName) { + node.detachEvent(ieName, func); + } + } else { + node.removeEventListener(name, func, false); + } + } + + /** + * Given an event from a script node, get the requirejs info from it, + * and then removes the event listeners on the node. + * @param {Event} evt + * @returns {Object} + */ + function getScriptData(evt) { + //Using currentTarget instead of target for Firefox 2.0's sake. Not + //all old browsers will be supported, but this one was easy enough + //to support and still makes sense. + var node = evt.currentTarget || evt.srcElement; + + //Remove the listeners once here. + removeListener(node, context.onScriptLoad, 'load', 'onreadystatechange'); + removeListener(node, context.onScriptError, 'error'); + + return { + node: node, + id: node && node.getAttribute('data-requiremodule') + }; + } + + function intakeDefines() { + var args; + + //Any defined modules in the global queue, intake them now. + takeGlobalQueue(); + + //Make sure any remaining defQueue items get properly processed. + while (defQueue.length) { + args = defQueue.shift(); + if (args[0] === null) { + return onError(makeError('mismatch', 'Mismatched anonymous define() module: ' + + args[args.length - 1])); + } else { + //args are id, deps, factory. Should be normalized by the + //define() function. + callGetModule(args); + } + } + context.defQueueMap = {}; + } + + context = { + config: config, + contextName: contextName, + registry: registry, + defined: defined, + urlFetched: urlFetched, + defQueue: defQueue, + defQueueMap: {}, + Module: Module, + makeModuleMap: makeModuleMap, + nextTick: req.nextTick, + onError: onError, + + /** + * Set a configuration for the context. + * @param {Object} cfg config object to integrate. + */ + configure: function (cfg) { + //Make sure the baseUrl ends in a slash. + if (cfg.baseUrl) { + if (cfg.baseUrl.charAt(cfg.baseUrl.length - 1) !== '/') { + cfg.baseUrl += '/'; + } + } + + // Convert old style urlArgs string to a function. + if (typeof cfg.urlArgs === 'string') { + var urlArgs = cfg.urlArgs; + cfg.urlArgs = function (id, url) { + return (url.indexOf('?') === -1 ? '?' : '&') + urlArgs; + }; + } + + //Save off the paths since they require special processing, + //they are additive. + var shim = config.shim, + objs = { + paths: true, + bundles: true, + config: true, + map: true + }; + + eachProp(cfg, function (value, prop) { + if (objs[prop]) { + if (!config[prop]) { + config[prop] = {}; + } + mixin(config[prop], value, true, true); + } else { + config[prop] = value; + } + }); + + //Reverse map the bundles + if (cfg.bundles) { + eachProp(cfg.bundles, function (value, prop) { + each(value, function (v) { + if (v !== prop) { + bundlesMap[v] = prop; + } + }); + }); + } + + //Merge shim + if (cfg.shim) { + eachProp(cfg.shim, function (value, id) { + //Normalize the structure + if (isArray(value)) { + value = { + deps: value + }; + } + if ((value.exports || value.init) && !value.exportsFn) { + value.exportsFn = context.makeShimExports(value); + } + shim[id] = value; + }); + config.shim = shim; + } + + //Adjust packages if necessary. + if (cfg.packages) { + each(cfg.packages, function (pkgObj) { + var location, name; + + pkgObj = typeof pkgObj === 'string' ? { name: pkgObj } : pkgObj; + + name = pkgObj.name; + location = pkgObj.location; + if (location) { + config.paths[name] = pkgObj.location; + } + + //Save pointer to main module ID for pkg name. + //Remove leading dot in main, so main paths are normalized, + //and remove any trailing .js, since different package + //envs have different conventions: some use a module name, + //some use a file name. + config.pkgs[name] = pkgObj.name + '/' + (pkgObj.main || 'main') + .replace(currDirRegExp, '') + .replace(jsSuffixRegExp, ''); + }); + } + + //If there are any "waiting to execute" modules in the registry, + //update the maps for them, since their info, like URLs to load, + //may have changed. + eachProp(registry, function (mod, id) { + //If module already has init called, since it is too + //late to modify them, and ignore unnormalized ones + //since they are transient. + if (!mod.inited && !mod.map.unnormalized) { + mod.map = makeModuleMap(id, null, true); + } + }); + + //If a deps array or a config callback is specified, then call + //require with those args. This is useful when require is defined as a + //config object before require.js is loaded. + if (cfg.deps || cfg.callback) { + context.require(cfg.deps || [], cfg.callback); + } + }, + + makeShimExports: function (value) { + function fn() { + var ret; + if (value.init) { + ret = value.init.apply(global, arguments); + } + return ret || (value.exports && getGlobal(value.exports)); + } + return fn; + }, + + makeRequire: function (relMap, options) { + options = options || {}; + + function localRequire(deps, callback, errback) { + var id, map, requireMod; + + if (options.enableBuildCallback && callback && isFunction(callback)) { + callback.__requireJsBuild = true; + } + + if (typeof deps === 'string') { + if (isFunction(callback)) { + //Invalid call + return onError(makeError('requireargs', 'Invalid require call'), errback); + } + + //If require|exports|module are requested, get the + //value for them from the special handlers. Caveat: + //this only works while module is being defined. + if (relMap && hasProp(handlers, deps)) { + return handlers[deps](registry[relMap.id]); + } + + //Synchronous access to one module. If require.get is + //available (as in the Node adapter), prefer that. + if (req.get) { + return req.get(context, deps, relMap, localRequire); + } + + //Normalize module name, if it contains . or .. + map = makeModuleMap(deps, relMap, false, true); + id = map.id; + + if (!hasProp(defined, id)) { + return onError(makeError('notloaded', 'Module name "' + + id + + '" has not been loaded yet for context: ' + + contextName + + (relMap ? '' : '. Use require([])'))); + } + return defined[id]; + } + + //Grab defines waiting in the global queue. + intakeDefines(); + + //Mark all the dependencies as needing to be loaded. + context.nextTick(function () { + //Some defines could have been added since the + //require call, collect them. + intakeDefines(); + + requireMod = getModule(makeModuleMap(null, relMap)); + + //Store if map config should be applied to this require + //call for dependencies. + requireMod.skipMap = options.skipMap; + + requireMod.init(deps, callback, errback, { + enabled: true + }); + + checkLoaded(); + }); + + return localRequire; + } + + mixin(localRequire, { + isBrowser: isBrowser, + + /** + * Converts a module name + .extension into an URL path. + * *Requires* the use of a module name. It does not support using + * plain URLs like nameToUrl. + */ + toUrl: function (moduleNamePlusExt) { + var ext, + index = moduleNamePlusExt.lastIndexOf('.'), + segment = moduleNamePlusExt.split('/')[0], + isRelative = segment === '.' || segment === '..'; + + //Have a file extension alias, and it is not the + //dots from a relative path. + if (index !== -1 && (!isRelative || index > 1)) { + ext = moduleNamePlusExt.substring(index, moduleNamePlusExt.length); + moduleNamePlusExt = moduleNamePlusExt.substring(0, index); + } + + return context.nameToUrl(normalize(moduleNamePlusExt, + relMap && relMap.id, true), ext, true); + }, + + defined: function (id) { + return hasProp(defined, makeModuleMap(id, relMap, false, true).id); + }, + + specified: function (id) { + id = makeModuleMap(id, relMap, false, true).id; + return hasProp(defined, id) || hasProp(registry, id); + } + }); + + //Only allow undef on top level require calls + if (!relMap) { + localRequire.undef = function (id) { + //Bind any waiting define() calls to this context, + //fix for #408 + takeGlobalQueue(); + + var map = makeModuleMap(id, relMap, true), + mod = getOwn(registry, id); + + mod.undefed = true; + removeScript(id); + + delete defined[id]; + delete urlFetched[map.url]; + delete undefEvents[id]; + + //Clean queued defines too. Go backwards + //in array so that the splices do not + //mess up the iteration. + eachReverse(defQueue, function (args, i) { + if (args[0] === id) { + defQueue.splice(i, 1); + } + }); + delete context.defQueueMap[id]; + + if (mod) { + //Hold on to listeners in case the + //module will be attempted to be reloaded + //using a different config. + if (mod.events.defined) { + undefEvents[id] = mod.events; + } + + cleanRegistry(id); + } + }; + } + + return localRequire; + }, + + /** + * Called to enable a module if it is still in the registry + * awaiting enablement. A second arg, parent, the parent module, + * is passed in for context, when this method is overridden by + * the optimizer. Not shown here to keep code compact. + */ + enable: function (depMap) { + var mod = getOwn(registry, depMap.id); + if (mod) { + getModule(depMap).enable(); + } + }, + + /** + * Internal method used by environment adapters to complete a load event. + * A load event could be a script load or just a load pass from a synchronous + * load call. + * @param {String} moduleName the name of the module to potentially complete. + */ + completeLoad: function (moduleName) { + var found, args, mod, + shim = getOwn(config.shim, moduleName) || {}, + shExports = shim.exports; + + takeGlobalQueue(); + + while (defQueue.length) { + args = defQueue.shift(); + if (args[0] === null) { + args[0] = moduleName; + //If already found an anonymous module and bound it + //to this name, then this is some other anon module + //waiting for its completeLoad to fire. + if (found) { + break; + } + found = true; + } else if (args[0] === moduleName) { + //Found matching define call for this script! + found = true; + } + + callGetModule(args); + } + context.defQueueMap = {}; + + //Do this after the cycle of callGetModule in case the result + //of those calls/init calls changes the registry. + mod = getOwn(registry, moduleName); + + if (!found && !hasProp(defined, moduleName) && mod && !mod.inited) { + if (config.enforceDefine && (!shExports || !getGlobal(shExports))) { + if (hasPathFallback(moduleName)) { + return; + } else { + return onError(makeError('nodefine', + 'No define call for ' + moduleName, + null, + [moduleName])); + } + } else { + //A script that does not call define(), so just simulate + //the call for it. + callGetModule([moduleName, (shim.deps || []), shim.exportsFn]); + } + } + + checkLoaded(); + }, + + /** + * Converts a module name to a file path. Supports cases where + * moduleName may actually be just an URL. + * Note that it **does not** call normalize on the moduleName, + * it is assumed to have already been normalized. This is an + * internal API, not a public one. Use toUrl for the public API. + */ + nameToUrl: function (moduleName, ext, skipExt) { + var paths, syms, i, parentModule, url, + parentPath, bundleId, + pkgMain = getOwn(config.pkgs, moduleName); + + if (pkgMain) { + moduleName = pkgMain; + } + + bundleId = getOwn(bundlesMap, moduleName); + + if (bundleId) { + return context.nameToUrl(bundleId, ext, skipExt); + } + + //If a colon is in the URL, it indicates a protocol is used and it is just + //an URL to a file, or if it starts with a slash, contains a query arg (i.e. ?) + //or ends with .js, then assume the user meant to use an url and not a module id. + //The slash is important for protocol-less URLs as well as full paths. + if (req.jsExtRegExp.test(moduleName)) { + //Just a plain path, not module name lookup, so just return it. + //Add extension if it is included. This is a bit wonky, only non-.js things pass + //an extension, this method probably needs to be reworked. + url = moduleName + (ext || ''); + } else { + //A module that needs to be converted to a path. + paths = config.paths; + + syms = moduleName.split('/'); + //For each module name segment, see if there is a path + //registered for it. Start with most specific name + //and work up from it. + for (i = syms.length; i > 0; i -= 1) { + parentModule = syms.slice(0, i).join('/'); + + parentPath = getOwn(paths, parentModule); + if (parentPath) { + //If an array, it means there are a few choices, + //Choose the one that is desired + if (isArray(parentPath)) { + parentPath = parentPath[0]; + } + syms.splice(0, i, parentPath); + break; + } + } + + //Join the path parts together, then figure out if baseUrl is needed. + url = syms.join('/'); + url += (ext || (/^data\:|^blob\:|\?/.test(url) || skipExt ? '' : '.js')); + url = (url.charAt(0) === '/' || url.match(/^[\w\+\.\-]+:/) ? '' : config.baseUrl) + url; + } + + return config.urlArgs && !/^blob\:/.test(url) ? + url + config.urlArgs(moduleName, url) : url; + }, + + //Delegates to req.load. Broken out as a separate function to + //allow overriding in the optimizer. + load: function (id, url) { + req.load(context, id, url); + }, + + /** + * Executes a module callback function. Broken out as a separate function + * solely to allow the build system to sequence the files in the built + * layer in the right sequence. + * + * @private + */ + execCb: function (name, callback, args, exports) { + return callback.apply(exports, args); + }, + + /** + * callback for script loads, used to check status of loading. + * + * @param {Event} evt the event from the browser for the script + * that was loaded. + */ + onScriptLoad: function (evt) { + //Using currentTarget instead of target for Firefox 2.0's sake. Not + //all old browsers will be supported, but this one was easy enough + //to support and still makes sense. + if (evt.type === 'load' || + (readyRegExp.test((evt.currentTarget || evt.srcElement).readyState))) { + //Reset interactive script so a script node is not held onto for + //to long. + interactiveScript = null; + + //Pull out the name of the module and the context. + var data = getScriptData(evt); + context.completeLoad(data.id); + } + }, + + /** + * Callback for script errors. + */ + onScriptError: function (evt) { + var data = getScriptData(evt); + if (!hasPathFallback(data.id)) { + var parents = []; + eachProp(registry, function (value, key) { + if (key.indexOf('_@r') !== 0) { + each(value.depMaps, function (depMap) { + if (depMap.id === data.id) { + parents.push(key); + return true; + } + }); + } + }); + return onError(makeError('scripterror', 'Script error for "' + data.id + + (parents.length ? + '", needed by: ' + parents.join(', ') : + '"'), evt, [data.id])); + } + } + }; + + context.require = context.makeRequire(); + return context; + } + + /** + * Main entry point. + * + * If the only argument to require is a string, then the module that + * is represented by that string is fetched for the appropriate context. + * + * If the first argument is an array, then it will be treated as an array + * of dependency string names to fetch. An optional function callback can + * be specified to execute when all of those dependencies are available. + * + * Make a local req variable to help Caja compliance (it assumes things + * on a require that are not standardized), and to give a short + * name for minification/local scope use. + */ + req = requirejs = function (deps, callback, errback, optional) { + + //Find the right context, use default + var context, config, + contextName = defContextName; + + // Determine if have config object in the call. + if (!isArray(deps) && typeof deps !== 'string') { + // deps is a config object + config = deps; + if (isArray(callback)) { + // Adjust args if there are dependencies + deps = callback; + callback = errback; + errback = optional; + } else { + deps = []; + } + } + + if (config && config.context) { + contextName = config.context; + } + + context = getOwn(contexts, contextName); + if (!context) { + context = contexts[contextName] = req.s.newContext(contextName); + } + + if (config) { + context.configure(config); + } + + return context.require(deps, callback, errback); + }; + + /** + * Support require.config() to make it easier to cooperate with other + * AMD loaders on globally agreed names. + */ + req.config = function (config) { + return req(config); + }; + + /** + * Execute something after the current tick + * of the event loop. Override for other envs + * that have a better solution than setTimeout. + * @param {Function} fn function to execute later. + */ + req.nextTick = typeof setTimeout !== 'undefined' ? function (fn) { + setTimeout(fn, 4); + } : function (fn) { fn(); }; + + /** + * Export require as a global, but only if it does not already exist. + */ + if (!require) { + require = req; + } + + req.version = version; + + //Used to filter out dependencies that are already paths. + req.jsExtRegExp = /^\/|:|\?|\.js$/; + req.isBrowser = isBrowser; + s = req.s = { + contexts: contexts, + newContext: newContext + }; + + //Create default context. + req({}); + + //Exports some context-sensitive methods on global require. + each([ + 'toUrl', + 'undef', + 'defined', + 'specified' + ], function (prop) { + //Reference from contexts instead of early binding to default context, + //so that during builds, the latest instance of the default context + //with its config gets used. + req[prop] = function () { + var ctx = contexts[defContextName]; + return ctx.require[prop].apply(ctx, arguments); + }; + }); + + if (isBrowser) { + head = s.head = document.getElementsByTagName('head')[0]; + //If BASE tag is in play, using appendChild is a problem for IE6. + //When that browser dies, this can be removed. Details in this jQuery bug: + //http://dev.jquery.com/ticket/2709 + baseElement = document.getElementsByTagName('base')[0]; + if (baseElement) { + head = s.head = baseElement.parentNode; + } + } + + /** + * Any errors that require explicitly generates will be passed to this + * function. Intercept/override it if you want custom error handling. + * @param {Error} err the error object. + */ + req.onError = defaultOnError; + + /** + * Creates the node for the load command. Only used in browser envs. + */ + req.createNode = function (config, moduleName, url) { + var node = config.xhtml ? + document.createElementNS('http://www.w3.org/1999/xhtml', 'html:script') : + document.createElement('script'); + node.type = config.scriptType || 'text/javascript'; + node.charset = 'utf-8'; + node.async = true; + return node; + }; + + /** + * Does the request to load a module for the browser case. + * Make this a separate function to allow other environments + * to override it. + * + * @param {Object} context the require context to find state. + * @param {String} moduleName the name of the module. + * @param {Object} url the URL to the module. + */ + req.load = function (context, moduleName, url) { + var config = (context && context.config) || {}, + node; + if (isBrowser) { + //In the browser so use a script tag + node = req.createNode(config, moduleName, url); + + node.setAttribute('data-requirecontext', context.contextName); + node.setAttribute('data-requiremodule', moduleName); + + //Set up load listener. Test attachEvent first because IE9 has + //a subtle issue in its addEventListener and script onload firings + //that do not match the behavior of all other browsers with + //addEventListener support, which fire the onload event for a + //script right after the script execution. See: + //https://connect.microsoft.com/IE/feedback/details/648057/script-onload-event-is-not-fired-immediately-after-script-execution + //UNFORTUNATELY Opera implements attachEvent but does not follow the script + //script execution mode. + if (node.attachEvent && + //Check if node.attachEvent is artificially added by custom script or + //natively supported by browser + //read https://github.com/requirejs/requirejs/issues/187 + //if we can NOT find [native code] then it must NOT natively supported. + //in IE8, node.attachEvent does not have toString() + //Note the test for "[native code" with no closing brace, see: + //https://github.com/requirejs/requirejs/issues/273 + !(node.attachEvent.toString && node.attachEvent.toString().indexOf('[native code') < 0) && + !isOpera) { + //Probably IE. IE (at least 6-8) do not fire + //script onload right after executing the script, so + //we cannot tie the anonymous define call to a name. + //However, IE reports the script as being in 'interactive' + //readyState at the time of the define call. + useInteractive = true; + + node.attachEvent('onreadystatechange', context.onScriptLoad); + //It would be great to add an error handler here to catch + //404s in IE9+. However, onreadystatechange will fire before + //the error handler, so that does not help. If addEventListener + //is used, then IE will fire error before load, but we cannot + //use that pathway given the connect.microsoft.com issue + //mentioned above about not doing the 'script execute, + //then fire the script load event listener before execute + //next script' that other browsers do. + //Best hope: IE10 fixes the issues, + //and then destroys all installs of IE 6-9. + //node.attachEvent('onerror', context.onScriptError); + } else { + node.addEventListener('load', context.onScriptLoad, false); + node.addEventListener('error', context.onScriptError, false); + } + node.src = url; + + //Calling onNodeCreated after all properties on the node have been + //set, but before it is placed in the DOM. + if (config.onNodeCreated) { + config.onNodeCreated(node, config, moduleName, url); + } + + //For some cache cases in IE 6-8, the script executes before the end + //of the appendChild execution, so to tie an anonymous define + //call to the module name (which is stored on the node), hold on + //to a reference to this node, but clear after the DOM insertion. + currentlyAddingScript = node; + if (baseElement) { + head.insertBefore(node, baseElement); + } else { + head.appendChild(node); + } + currentlyAddingScript = null; + + return node; + } else if (isWebWorker) { + try { + //In a web worker, use importScripts. This is not a very + //efficient use of importScripts, importScripts will block until + //its script is downloaded and evaluated. However, if web workers + //are in play, the expectation is that a build has been done so + //that only one script needs to be loaded anyway. This may need + //to be reevaluated if other use cases become common. + + // Post a task to the event loop to work around a bug in WebKit + // where the worker gets garbage-collected after calling + // importScripts(): https://webkit.org/b/153317 + setTimeout(function () { }, 0); + importScripts(url); + + //Account for anonymous modules + context.completeLoad(moduleName); + } catch (e) { + context.onError(makeError('importscripts', + 'importScripts failed for ' + + moduleName + ' at ' + url, + e, + [moduleName])); + } + } + }; + + function getInteractiveScript() { + if (interactiveScript && interactiveScript.readyState === 'interactive') { + return interactiveScript; + } + + eachReverse(scripts(), function (script) { + if (script.readyState === 'interactive') { + return (interactiveScript = script); + } + }); + return interactiveScript; + } + + //Look for a data-main script attribute, which could also adjust the baseUrl. + if (isBrowser && !cfg.skipDataMain) { + //Figure out baseUrl. Get it from the script tag with require.js in it. + eachReverse(scripts(), function (script) { + //Set the 'head' where we can append children by + //using the script's parent. + if (!head) { + head = script.parentNode; + } + + //Look for a data-main attribute to set main script for the page + //to load. If it is there, the path to data main becomes the + //baseUrl, if it is not already set. + dataMain = script.getAttribute('data-main'); + if (dataMain) { + //Preserve dataMain in case it is a path (i.e. contains '?') + mainScript = dataMain; + + //Set final baseUrl if there is not already an explicit one, + //but only do so if the data-main value is not a loader plugin + //module ID. + if (!cfg.baseUrl && mainScript.indexOf('!') === -1) { + //Pull off the directory of data-main for use as the + //baseUrl. + src = mainScript.split('/'); + mainScript = src.pop(); + subPath = src.length ? src.join('/') + '/' : './'; + + cfg.baseUrl = subPath; + } + + //Strip off any trailing .js since mainScript is now + //like a module name. + mainScript = mainScript.replace(jsSuffixRegExp, ''); + + //If mainScript is still a path, fall back to dataMain + if (req.jsExtRegExp.test(mainScript)) { + mainScript = dataMain; + } + + //Put the data-main script in the files to load. + cfg.deps = cfg.deps ? cfg.deps.concat(mainScript) : [mainScript]; + + return true; + } + }); + } + + /** + * The function that handles definitions of modules. Differs from + * require() in that a string for the module should be the first argument, + * and the function to execute after dependencies are loaded should + * return a value to define the module corresponding to the first argument's + * name. + */ + define = function (name, deps, callback) { + var node, context; + + //Allow for anonymous modules + if (typeof name !== 'string') { + //Adjust args appropriately + callback = deps; + deps = name; + name = null; + } + + //This module may not have dependencies + if (!isArray(deps)) { + callback = deps; + deps = null; + } + + //If no name, and callback is a function, then figure out if it a + //CommonJS thing with dependencies. + if (!deps && isFunction(callback)) { + deps = []; + //Remove comments from the callback string, + //look for require calls, and pull them into the dependencies, + //but only if there are function args. + if (callback.length) { + callback + .toString() + .replace(commentRegExp, commentReplace) + .replace(cjsRequireRegExp, function (match, dep) { + deps.push(dep); + }); + + //May be a CommonJS thing even without require calls, but still + //could use exports, and module. Avoid doing exports and module + //work though if it just needs require. + //REQUIRES the function to expect the CommonJS variables in the + //order listed below. + deps = (callback.length === 1 ? ['require'] : ['require', 'exports', 'module']).concat(deps); + } + } + + //If in IE 6-8 and hit an anonymous define() call, do the interactive + //work. + if (useInteractive) { + node = currentlyAddingScript || getInteractiveScript(); + if (node) { + if (!name) { + name = node.getAttribute('data-requiremodule'); + } + context = contexts[node.getAttribute('data-requirecontext')]; + } + } + + //Always save off evaluating the def call until the script onload handler. + //This allows multiple modules to be in a file without prematurely + //tracing dependencies, and allows for anonymous module support, + //where the module name is not known until the script onload event + //occurs. If no context, use the global queue, and get it processed + //in the onscript load callback. + if (context) { + context.defQueue.push([name, deps, callback]); + context.defQueueMap[name] = true; + } else { + globalDefQueue.push([name, deps, callback]); + } + }; + + define.amd = { + jQuery: true + }; + + /** + * Executes the text. Normally just uses eval, but can be modified + * to use a better, environment-specific call. Only used for transpiling + * loader plugins, not for plain JS modules. + * @param {String} text the text to execute/evaluate. + */ + req.exec = function (text) { + /*jslint evil: true */ + return eval(text); + }; + + //Set up with config info. + req(cfg); + + return { + requirejs, require, define + } +} diff --git a/packages/core/client/src/schema-component/antd/cron/locale/zh-CN.ts b/packages/core/client/src/locale/cron/zh_CN.ts similarity index 100% rename from packages/core/client/src/schema-component/antd/cron/locale/zh-CN.ts rename to packages/core/client/src/locale/cron/zh_CN.ts diff --git a/packages/core/client/src/locale/index.ts b/packages/core/client/src/locale/index.ts index e09fbe03d..344ecac77 100644 --- a/packages/core/client/src/locale/index.ts +++ b/packages/core/client/src/locale/index.ts @@ -2,8 +2,6 @@ export type LocaleOptions = { label: string; }; -export { default as cron } from '../schema-component/antd/cron/locale'; - export const dayjsLocale = { 'ar-EG': 'ar', 'az-AZ': 'az', diff --git a/packages/core/client/src/nocobase-buildin-plugin/index.tsx b/packages/core/client/src/nocobase-buildin-plugin/index.tsx index 8ced46d7f..d896b3d5e 100644 --- a/packages/core/client/src/nocobase-buildin-plugin/index.tsx +++ b/packages/core/client/src/nocobase-buildin-plugin/index.tsx @@ -50,7 +50,7 @@ export class NocoBaseBuildInPlugin extends Plugin { AppSpin, AppError, }); - this.addPlugins(); + await this.addPlugins(); } async load() { @@ -103,11 +103,11 @@ export class NocoBaseBuildInPlugin extends Plugin { BlockTemplateDetails, }); } - addPlugins() { - this.app.pm.add(LocalePlugin, { name: 'locale' }); - this.app.pm.add(AdminLayoutPlugin, { name: 'admin-layout' }); - this.app.pm.add(SystemSettingsPlugin, { name: 'system-setting' }); - this.app.pm.add(PinnedListPlugin, { + async addPlugins() { + await this.app.pm.add(LocalePlugin, { name: 'locale' }); + await this.app.pm.add(AdminLayoutPlugin, { name: 'admin-layout' }); + await this.app.pm.add(SystemSettingsPlugin, { name: 'system-setting' }); + await this.app.pm.add(PinnedListPlugin, { name: 'pinned-list', config: { items: { @@ -117,8 +117,8 @@ export class NocoBaseBuildInPlugin extends Plugin { }, }, }); - this.app.pm.add(SchemaComponentPlugin, { name: 'schema-component' }); - this.app.pm.add(SchemaInitializerPlugin, { + await this.app.pm.add(SchemaComponentPlugin, { name: 'schema-component' }); + await this.app.pm.add(SchemaInitializerPlugin, { name: 'schema-initializer', config: { initializers: { @@ -126,11 +126,11 @@ export class NocoBaseBuildInPlugin extends Plugin { }, }, }); - this.app.pm.add(BlockSchemaComponentPlugin, { name: 'block-schema-component' }); - this.app.pm.add(AntdSchemaComponentPlugin, { name: 'antd-schema-component' }); - this.app.pm.add(SigninPageExtensionPlugin, { name: 'signin-page-extension' }); - this.app.pm.add(ACLPlugin, { name: 'acl' }); - this.app.pm.add(RemoteDocumentTitlePlugin, { name: 'remote-document-title' }); - this.app.pm.add(PMPlugin, { name: 'pm' }); + await this.app.pm.add(BlockSchemaComponentPlugin, { name: 'block-schema-component' }); + await this.app.pm.add(AntdSchemaComponentPlugin, { name: 'antd-schema-component' }); + await this.app.pm.add(SigninPageExtensionPlugin, { name: 'signin-page-extension' }); + await this.app.pm.add(ACLPlugin, { name: 'acl' }); + await this.app.pm.add(RemoteDocumentTitlePlugin, { name: 'remote-document-title' }); + await this.app.pm.add(PMPlugin, { name: 'pm' }); } } diff --git a/packages/core/client/src/nocobase-buildin-plugin/plugins/LocalePlugin.ts b/packages/core/client/src/nocobase-buildin-plugin/plugins/LocalePlugin.ts index c15793bab..4d1d01a10 100644 --- a/packages/core/client/src/nocobase-buildin-plugin/plugins/LocalePlugin.ts +++ b/packages/core/client/src/nocobase-buildin-plugin/plugins/LocalePlugin.ts @@ -1,5 +1,5 @@ -import { dayjs } from '@nocobase/utils/client'; import { ConfigProvider } from 'antd'; +import dayjs from 'dayjs'; import { loadConstrueLocale } from '../../antd-config-provider/loadConstrueLocale'; import { Plugin } from '../../application/Plugin'; import { dayjsLocale } from '../../locale'; @@ -28,7 +28,7 @@ export class LocalePlugin extends Plugin { loadConstrueLocale(data?.data); const dayjsLang = dayjsLocale[data?.data?.lang] || 'en'; await import(`dayjs/locale/${dayjsLang}`); - dayjs.locale(data?.data?.moment); + dayjs.locale(dayjsLang); window['cronLocale'] = data?.data?.cron; } catch (error) { (() => {})(); diff --git a/packages/core/client/src/route-switch/antd/admin-layout/index.tsx b/packages/core/client/src/route-switch/antd/admin-layout/index.tsx index 50fabb1af..3f0965230 100644 --- a/packages/core/client/src/route-switch/antd/admin-layout/index.tsx +++ b/packages/core/client/src/route-switch/antd/admin-layout/index.tsx @@ -328,8 +328,10 @@ export const AdminLayout = (props) => { }; export class AdminLayoutPlugin extends Plugin { + async afterAdd() { + await this.app.pm.add(RemoteSchemaTemplateManagerPlugin); + } async load() { - this.app.pm.add(RemoteSchemaTemplateManagerPlugin); this.app.addComponents({ AdminLayout }); } } 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 4bf18c507..7f459eab5 100644 --- a/packages/core/client/src/schema-component/antd/action/Action.tsx +++ b/packages/core/client/src/schema-component/antd/action/Action.tsx @@ -1,7 +1,7 @@ import { observer, RecursionField, useField, useFieldSchema, useForm } from '@formily/react'; -import { lodash } from '@nocobase/utils/client'; import { App, Button, Popover } from 'antd'; import classnames from 'classnames'; +import lodash from 'lodash'; import React, { useEffect, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { useActionContext } from '../..'; diff --git a/packages/core/client/src/schema-component/antd/association-field/util.ts b/packages/core/client/src/schema-component/antd/association-field/util.ts index cb56d9aa2..da46758e7 100644 --- a/packages/core/client/src/schema-component/antd/association-field/util.ts +++ b/packages/core/client/src/schema-component/antd/association-field/util.ts @@ -1,7 +1,8 @@ import { ISchema } from '@formily/react'; import { isArr } from '@formily/shared'; -import { dayjs, getDefaultFormat, str2moment } from '@nocobase/utils/client'; +import { getDefaultFormat, str2moment } from '@nocobase/utils/client'; import { Tag } from 'antd'; +import dayjs from 'dayjs'; import React from 'react'; import { CollectionFieldOptions, useCollectionManager } from '../../../collection-manager'; diff --git a/packages/core/client/src/schema-component/antd/calendar/Calendar.tsx b/packages/core/client/src/schema-component/antd/calendar/Calendar.tsx index 142fe5af6..804b60a66 100644 --- a/packages/core/client/src/schema-component/antd/calendar/Calendar.tsx +++ b/packages/core/client/src/schema-component/antd/calendar/Calendar.tsx @@ -1,10 +1,10 @@ import { LeftOutlined, RightOutlined } from '@ant-design/icons'; import { createForm } from '@formily/core'; import { RecursionField, Schema, observer, useFieldSchema } from '@formily/react'; -import { dayjs } from '@nocobase/utils/client'; import { parseExpression } from 'cron-parser'; import { eq } from 'date-arithmetic'; import type { Dayjs } from 'dayjs'; +import dayjs from 'dayjs'; import get from 'lodash/get'; import React, { useCallback, useMemo, useState } from 'react'; import { Calendar as BigCalendar, View, dayjsLocalizer } from 'react-big-calendar'; diff --git a/packages/core/client/src/schema-component/antd/calendar/DeleteEvent.tsx b/packages/core/client/src/schema-component/antd/calendar/DeleteEvent.tsx index 0e9388965..a18fc8cfd 100644 --- a/packages/core/client/src/schema-component/antd/calendar/DeleteEvent.tsx +++ b/packages/core/client/src/schema-component/antd/calendar/DeleteEvent.tsx @@ -1,6 +1,6 @@ import { observer } from '@formily/react'; -import { dayjs } from '@nocobase/utils/client'; import { Modal, Radio, Space, Typography } from 'antd'; +import dayjs from 'dayjs'; import React, { useContext, useState } from 'react'; import { createPortal } from 'react-dom'; import { useTranslation } from 'react-i18next'; diff --git a/packages/core/client/src/schema-component/antd/calendar/__tests__/calendar.test.tsx b/packages/core/client/src/schema-component/antd/calendar/__tests__/calendar.test.tsx index e7994f54c..b9897afb5 100644 --- a/packages/core/client/src/schema-component/antd/calendar/__tests__/calendar.test.tsx +++ b/packages/core/client/src/schema-component/antd/calendar/__tests__/calendar.test.tsx @@ -1,4 +1,4 @@ -import { dayjs } from '@nocobase/utils/client'; +import dayjs from 'dayjs'; import React from 'react'; import { render, screen } from 'testUtils'; import App1 from '../demos/demo1'; diff --git a/packages/core/client/src/schema-component/antd/calendar/utils.ts b/packages/core/client/src/schema-component/antd/calendar/utils.ts index 6b18d2491..fd051c9b3 100644 --- a/packages/core/client/src/schema-component/antd/calendar/utils.ts +++ b/packages/core/client/src/schema-component/antd/calendar/utils.ts @@ -1,4 +1,4 @@ -import { dayjs } from '@nocobase/utils/client'; +import dayjs from 'dayjs'; import { get } from 'lodash'; import solarLunar from 'solarlunar-es'; import { i18n } from '../../../i18n'; diff --git a/packages/core/client/src/schema-component/antd/cron/locale/index.ts b/packages/core/client/src/schema-component/antd/cron/locale/index.ts deleted file mode 100644 index 65d952524..000000000 --- a/packages/core/client/src/schema-component/antd/cron/locale/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -import zhCN from './zh-CN'; - -export default { - 'zh-CN': zhCN, -}; diff --git a/packages/core/client/src/schema-component/antd/date-picker/ReadPretty.tsx b/packages/core/client/src/schema-component/antd/date-picker/ReadPretty.tsx index 2387551b3..64c8f5780 100644 --- a/packages/core/client/src/schema-component/antd/date-picker/ReadPretty.tsx +++ b/packages/core/client/src/schema-component/antd/date-picker/ReadPretty.tsx @@ -1,11 +1,12 @@ import { usePrefixCls } from '@formily/antd-v5/esm/__builtins__'; import { isArr } from '@formily/shared'; -import { dayjs, getDefaultFormat, str2moment } from '@nocobase/utils/client'; +import { getDefaultFormat, str2moment } from '@nocobase/utils/client'; import type { DatePickerProps as AntdDatePickerProps, RangePickerProps as AntdRangePickerProps, } from 'antd/es/date-picker'; import cls from 'classnames'; +import dayjs from 'dayjs'; import React from 'react'; type Composed = { diff --git a/packages/core/client/src/schema-component/antd/date-picker/__tests__/getDateRanges.test.ts b/packages/core/client/src/schema-component/antd/date-picker/__tests__/getDateRanges.test.ts index fddadb935..d17b46a4a 100644 --- a/packages/core/client/src/schema-component/antd/date-picker/__tests__/getDateRanges.test.ts +++ b/packages/core/client/src/schema-component/antd/date-picker/__tests__/getDateRanges.test.ts @@ -1,4 +1,4 @@ -import { dayjs } from '@nocobase/utils/client'; +import dayjs from 'dayjs'; import { getDateRanges } from '../util'; describe('getDateRanges', () => { diff --git a/packages/core/client/src/schema-component/antd/date-picker/__tests__/mapDatePicker.test.ts b/packages/core/client/src/schema-component/antd/date-picker/__tests__/mapDatePicker.test.ts index e41838151..b86c0a216 100644 --- a/packages/core/client/src/schema-component/antd/date-picker/__tests__/mapDatePicker.test.ts +++ b/packages/core/client/src/schema-component/antd/date-picker/__tests__/mapDatePicker.test.ts @@ -1,4 +1,4 @@ -import { dayjs } from '@nocobase/utils/client'; +import dayjs from 'dayjs'; import { mapDatePicker } from '../util'; describe('mapDatePicker', () => { diff --git a/packages/core/client/src/schema-component/antd/date-picker/__tests__/mapRangePicker.test.ts b/packages/core/client/src/schema-component/antd/date-picker/__tests__/mapRangePicker.test.ts index 8f6586a60..dff35582f 100644 --- a/packages/core/client/src/schema-component/antd/date-picker/__tests__/mapRangePicker.test.ts +++ b/packages/core/client/src/schema-component/antd/date-picker/__tests__/mapRangePicker.test.ts @@ -1,4 +1,4 @@ -import { dayjs } from '@nocobase/utils/client'; +import dayjs from 'dayjs'; import { mapRangePicker } from '../util'; describe('mapRangePicker', () => { diff --git a/packages/core/client/src/schema-component/antd/date-picker/__tests__/util.test.ts b/packages/core/client/src/schema-component/antd/date-picker/__tests__/util.test.ts index ab1aeed19..7777975ae 100644 --- a/packages/core/client/src/schema-component/antd/date-picker/__tests__/util.test.ts +++ b/packages/core/client/src/schema-component/antd/date-picker/__tests__/util.test.ts @@ -1,5 +1,5 @@ import { str2moment } from '@nocobase/utils'; -import { dayjs } from '@nocobase/utils/client'; +import dayjs from 'dayjs'; import { moment2str } from '../util'; describe('str2moment', () => { diff --git a/packages/core/client/src/schema-component/antd/date-picker/demos/demo4.tsx b/packages/core/client/src/schema-component/antd/date-picker/demos/demo4.tsx index 7e9a1f4b1..e9709a3ee 100644 --- a/packages/core/client/src/schema-component/antd/date-picker/demos/demo4.tsx +++ b/packages/core/client/src/schema-component/antd/date-picker/demos/demo4.tsx @@ -3,7 +3,7 @@ */ import { FormItem } from '@formily/antd-v5'; import { DatePicker, Input, SchemaComponent, SchemaComponentProvider } from '@nocobase/client'; -import { dayjs } from '@nocobase/utils/client'; +import dayjs from 'dayjs'; import React from 'react'; const schema = { diff --git a/packages/core/client/src/schema-component/antd/date-picker/demos/demo5.tsx b/packages/core/client/src/schema-component/antd/date-picker/demos/demo5.tsx index 79c3db7a3..e3db10a37 100644 --- a/packages/core/client/src/schema-component/antd/date-picker/demos/demo5.tsx +++ b/packages/core/client/src/schema-component/antd/date-picker/demos/demo5.tsx @@ -3,7 +3,7 @@ */ import { FormItem } from '@formily/antd-v5'; import { DatePicker, Input, SchemaComponent, SchemaComponentProvider } from '@nocobase/client'; -import { dayjs } from '@nocobase/utils/client'; +import dayjs from 'dayjs'; import React from 'react'; const schema = { diff --git a/packages/core/client/src/schema-component/antd/date-picker/demos/demo6.tsx b/packages/core/client/src/schema-component/antd/date-picker/demos/demo6.tsx index ece0f07b7..bb7a32572 100644 --- a/packages/core/client/src/schema-component/antd/date-picker/demos/demo6.tsx +++ b/packages/core/client/src/schema-component/antd/date-picker/demos/demo6.tsx @@ -3,7 +3,7 @@ */ import { FormItem } from '@formily/antd-v5'; import { DatePicker, Input, SchemaComponent, SchemaComponentProvider } from '@nocobase/client'; -import { dayjs } from '@nocobase/utils/client'; +import dayjs from 'dayjs'; import React from 'react'; const schema = { diff --git a/packages/core/client/src/schema-component/antd/date-picker/util.ts b/packages/core/client/src/schema-component/antd/date-picker/util.ts index e037070bd..0a7444ce8 100644 --- a/packages/core/client/src/schema-component/antd/date-picker/util.ts +++ b/packages/core/client/src/schema-component/antd/date-picker/util.ts @@ -1,5 +1,6 @@ -import { dayjs, getDefaultFormat, str2moment, toGmt, toLocal } from '@nocobase/utils/client'; +import { getDefaultFormat, str2moment, toGmt, toLocal } from '@nocobase/utils/client'; import type { Dayjs } from 'dayjs'; +import dayjs from 'dayjs'; const toStringByPicker = (value, picker, timezone: 'gmt' | 'local') => { if (!dayjs.isDayjs(value)) return value; diff --git a/packages/core/client/src/schema-component/antd/error-fallback/demos/demo1.tsx b/packages/core/client/src/schema-component/antd/error-fallback/demos/demo1.tsx index a049abde3..183fcae57 100644 --- a/packages/core/client/src/schema-component/antd/error-fallback/demos/demo1.tsx +++ b/packages/core/client/src/schema-component/antd/error-fallback/demos/demo1.tsx @@ -8,7 +8,7 @@ const App = () => { export default () => { return ( - + ); 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 d5e526dcc..06235d1b1 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 @@ -2,8 +2,8 @@ import { css, cx } from '@emotion/css'; import { ArrayCollapse, ArrayItems, FormLayout, FormItem as Item } from '@formily/antd-v5'; import { Field } from '@formily/core'; import { ISchema, observer, useField, useFieldSchema } from '@formily/react'; -import { dayjs } from '@nocobase/utils/client'; import { Select } from 'antd'; +import dayjs from 'dayjs'; import _ from 'lodash'; import React, { useEffect } from 'react'; import { useTranslation } from 'react-i18next'; diff --git a/packages/core/client/src/schema-component/antd/remote-select/RemoteSelect.tsx b/packages/core/client/src/schema-component/antd/remote-select/RemoteSelect.tsx index 84257c122..f50610da0 100644 --- a/packages/core/client/src/schema-component/antd/remote-select/RemoteSelect.tsx +++ b/packages/core/client/src/schema-component/antd/remote-select/RemoteSelect.tsx @@ -1,6 +1,6 @@ import { LoadingOutlined } from '@ant-design/icons'; import { connect, mapProps, mapReadPretty, useField, useFieldSchema, useForm } from '@formily/react'; -import { dayjs } from '@nocobase/utils/client'; +import dayjs from 'dayjs'; import { Divider, SelectProps, Tag } from 'antd'; import flat from 'flat'; import _, { uniqBy } from 'lodash'; diff --git a/packages/core/client/src/schema-component/antd/time-picker/ReadPretty.tsx b/packages/core/client/src/schema-component/antd/time-picker/ReadPretty.tsx index 63b5e48dd..1044621b2 100644 --- a/packages/core/client/src/schema-component/antd/time-picker/ReadPretty.tsx +++ b/packages/core/client/src/schema-component/antd/time-picker/ReadPretty.tsx @@ -1,6 +1,6 @@ import { usePrefixCls } from '@formily/antd-v5/esm/__builtins__'; import { toArr } from '@formily/shared'; -import { dayjs } from '@nocobase/utils/client'; +import dayjs from 'dayjs'; import { TimeRangePickerProps } from 'antd/es/time-picker'; import cls from 'classnames'; import React from 'react'; diff --git a/packages/core/client/src/schema-component/antd/time-picker/TimePicker.tsx b/packages/core/client/src/schema-component/antd/time-picker/TimePicker.tsx index 2d4242b94..0ac87f539 100644 --- a/packages/core/client/src/schema-component/antd/time-picker/TimePicker.tsx +++ b/packages/core/client/src/schema-component/antd/time-picker/TimePicker.tsx @@ -1,6 +1,6 @@ import { dayjsable, formatDayjsValue } from '@formily/antd-v5/esm/__builtins__'; import { connect, mapProps, mapReadPretty } from '@formily/react'; -import { dayjs } from '@nocobase/utils/client'; +import dayjs from 'dayjs'; import { TimePicker as AntdTimePicker } from 'antd'; import { TimePickerProps as AntdTimePickerProps, TimeRangePickerProps } from 'antd/es/time-picker'; import { ReadPretty } from './ReadPretty'; 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 1af2d24a8..b812fb8d2 100644 --- a/packages/core/client/src/schema-component/antd/variable/Input.tsx +++ b/packages/core/client/src/schema-component/antd/variable/Input.tsx @@ -1,11 +1,12 @@ import { CloseCircleFilled } from '@ant-design/icons'; import { css, cx } from '@emotion/css'; import { useForm } from '@formily/react'; -import { dayjs, error } from '@nocobase/utils/client'; +import { 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 dayjs from 'dayjs'; import { cloneDeep } from 'lodash'; import React, { useCallback, useEffect, useMemo } from 'react'; import { useTranslation } from 'react-i18next'; 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 1512549a3..f9bf00a9d 100644 --- a/packages/core/client/src/schema-component/common/utils/uitls.tsx +++ b/packages/core/client/src/schema-component/common/utils/uitls.tsx @@ -1,4 +1,4 @@ -import { dayjs } from '@nocobase/utils/client'; +import dayjs from 'dayjs'; import flat from 'flat'; import _, { every, findIndex, isArray, some } from 'lodash'; import { useMemo } from 'react'; diff --git a/packages/core/create-nocobase-app/.npmignore b/packages/core/create-nocobase-app/.npmignore index 83426817e..07e6e472c 100644 --- a/packages/core/create-nocobase-app/.npmignore +++ b/packages/core/create-nocobase-app/.npmignore @@ -1,4 +1 @@ -node_modules -*.log -docs -__tests__ +/node_modules diff --git a/packages/core/create-nocobase-app/src/generator.js b/packages/core/create-nocobase-app/src/generator.js index adc4f3d97..e76b75837 100644 --- a/packages/core/create-nocobase-app/src/generator.js +++ b/packages/core/create-nocobase-app/src/generator.js @@ -168,9 +168,6 @@ class AppGenerator extends Generator { target: this.cwd, }); - await this.downloadServerPackage(); - await this.downloadClientPackage(); - this.checkDbEnv(); console.log(''); diff --git a/packages/core/create-nocobase-app/templates/app/.gitignore.tpl b/packages/core/create-nocobase-app/templates/app/.gitignore.tpl index 315ab3b4d..69aa705d7 100644 --- a/packages/core/create-nocobase-app/templates/app/.gitignore.tpl +++ b/packages/core/create-nocobase-app/templates/app/.gitignore.tpl @@ -16,4 +16,5 @@ coverage docs-dist/ .npmrc dist/ -docker/**/storage \ No newline at end of file +docker/**/storage +/storage/.app-dev diff --git a/packages/core/create-nocobase-app/templates/app/packages/app/client/.gitkeep b/packages/core/create-nocobase-app/templates/app/packages/app/client/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/core/create-nocobase-app/templates/app/packages/app/server/.gitkeep b/packages/core/create-nocobase-app/templates/app/packages/app/server/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/core/database/.npmignore b/packages/core/database/.npmignore new file mode 100644 index 000000000..c593fe9df --- /dev/null +++ b/packages/core/database/.npmignore @@ -0,0 +1,2 @@ +/node_modules +/src \ No newline at end of file diff --git a/packages/core/database/src/value-parsers/date-value-parser.ts b/packages/core/database/src/value-parsers/date-value-parser.ts index faa1631c6..1f1fc11dd 100644 --- a/packages/core/database/src/value-parsers/date-value-parser.ts +++ b/packages/core/database/src/value-parsers/date-value-parser.ts @@ -1,4 +1,5 @@ -import { dayjs, moment2str } from '@nocobase/utils'; +import { moment2str } from '@nocobase/utils'; +import dayjs from 'dayjs'; import { getJsDateFromExcel } from 'excel-date-to-js'; import { BaseValueParser } from './base-value-parser'; diff --git a/packages/core/devtools/.npmignore b/packages/core/devtools/.npmignore new file mode 100644 index 000000000..07e6e472c --- /dev/null +++ b/packages/core/devtools/.npmignore @@ -0,0 +1 @@ +/node_modules diff --git a/packages/core/devtools/package.json b/packages/core/devtools/package.json index 6762e3ef2..954b56072 100644 --- a/packages/core/devtools/package.json +++ b/packages/core/devtools/package.json @@ -6,6 +6,7 @@ "main": "./src/index.js", "dependencies": { "@nocobase/build": "0.11.1-alpha.5", + "@nocobase/client": "^0.11.1-alpha.5", "@testing-library/react": "^14.0.0", "@types/jest": "^29.0.0", "@types/koa": "^2.13.4", diff --git a/packages/core/devtools/umiConfig.d.ts b/packages/core/devtools/umiConfig.d.ts index 3ff4f945a..c26d8f726 100644 --- a/packages/core/devtools/umiConfig.d.ts +++ b/packages/core/devtools/umiConfig.d.ts @@ -20,3 +20,7 @@ export declare function getUmiConfig(): { }; export declare function resolveNocobasePackagesAlias(config: any): {}; +export declare class IndexGenerator { + constructor(outputPath: string, pluginsPath: string[]): void; + generate(): void; +}; diff --git a/packages/core/devtools/umiConfig.js b/packages/core/devtools/umiConfig.js index 4feb44973..43a2be8ff 100644 --- a/packages/core/devtools/umiConfig.js +++ b/packages/core/devtools/umiConfig.js @@ -3,6 +3,7 @@ const { resolve, sep } = require('path'); const packageJson = require('./package.json'); const fs = require('fs'); const glob = require('glob'); +const path = require('path'); console.log('VERSION: ', packageJson.version); @@ -27,8 +28,8 @@ function getUmiConfig() { return { alias: getPackagePaths().reduce((memo, item) => { - memo[item[0]] = item[1] - return memo + memo[item[0]] = item[1]; + return memo; }, {}), define: { 'process.env.API_BASE_URL': API_BASE_URL || API_BASE_PATH, @@ -73,7 +74,10 @@ function getPackagePaths() { const dirname = resolve(process.cwd(), file); if (existsSync(dirname)) { const re = new RegExp(dir.replace('*', '(.+)')); - const p = dirname.substring(process.cwd().length + 1).split(sep).join('/'); + const p = dirname + .substring(process.cwd().length + 1) + .split(sep) + .join('/'); const match = re.exec(p); pkgs.push([key.replace('*', match?.[1]), dirname]); } @@ -95,5 +99,79 @@ function resolveNocobasePackagesAlias(config) { } } +class IndexGenerator { + constructor(outputPath, pluginsPath) { + this.outputPath = outputPath; + this.pluginsPath = pluginsPath; + } + + generate() { + this.generatePluginIndex(); + if (process.env.NODE_ENV === 'production') return; + this.pluginsPath.forEach((pluginPath) => { + if (!fs.existsSync(pluginPath)) { + return; + } + fs.watch(pluginPath, { recursive: false }, () => { + this.generatePluginIndex(); + }); + }); + } + + generatePluginIndex() { + if (!fs.existsSync(this.outputPath)) { + fs.mkdirSync(path.dirname(this.outputPath), { recursive: true }); + fs.writeFileSync(this.outputPath, 'export default {}'); + } + const validPluginPaths = this.pluginsPath.filter((pluginPath) => fs.existsSync(pluginPath)); + if (!validPluginPaths.length) { + return; + } + if (process.env.NODE_ENV === 'production') { + fs.writeFileSync(this.outputPath, 'export default {}'); + return; + } + const pluginInfo = validPluginPaths.map((pluginPath) => this.getContent(pluginPath)); + const importContent = pluginInfo.map(({ indexContent }) => indexContent).join('\n'); + const exportContent = pluginInfo.map(({ exportContent }) => exportContent).join('\n'); + + const fileContent = `${importContent}\n\nexport default {\n${exportContent}\n}`; + + fs.writeFileSync(this.outputPath, fileContent); + } + + getContent(pluginPath) { + const pluginFolders = fs.readdirSync(pluginPath); + const pluginImports = pluginFolders + .filter((folder) => { + const pluginPackageJsonPath = path.join(pluginPath, folder, 'package.json'); + const pluginSrcClientPath = path.join(pluginPath, folder, 'src', 'client'); + return fs.existsSync(pluginPackageJsonPath) && fs.existsSync(pluginSrcClientPath); + }) + .map((folder, index) => { + const pluginPackageJsonPath = path.join(pluginPath, folder, 'package.json'); + const pluginPackageJson = require(pluginPackageJsonPath); + const pluginSrcClientPath = path + .relative(path.dirname(this.outputPath), path.join(pluginPath, folder, 'src', 'client')) + .replaceAll('\\', '/'); + const pluginName = `${folder.replaceAll('-', '_')}${index}`; + const importStatement = `const ${pluginName} = import('${pluginSrcClientPath}');`; + return { importStatement, pluginName, packageJsonName: pluginPackageJson.name }; + }); + + const indexContent = pluginImports.map(({ importStatement }) => importStatement).join('\n'); + + const exportContent = pluginImports + .map(({ pluginName, packageJsonName }) => ` "${packageJsonName}": ${pluginName},`) + .join('\n'); + + return { + indexContent, + exportContent, + }; + } +} + exports.getUmiConfig = getUmiConfig; exports.resolveNocobasePackagesAlias = resolveNocobasePackagesAlias; +exports.IndexGenerator = IndexGenerator; diff --git a/packages/core/evaluators/.npmignore b/packages/core/evaluators/.npmignore new file mode 100644 index 000000000..c593fe9df --- /dev/null +++ b/packages/core/evaluators/.npmignore @@ -0,0 +1,2 @@ +/node_modules +/src \ No newline at end of file diff --git a/packages/core/logger/.npmignore b/packages/core/logger/.npmignore new file mode 100644 index 000000000..c593fe9df --- /dev/null +++ b/packages/core/logger/.npmignore @@ -0,0 +1,2 @@ +/node_modules +/src \ No newline at end of file diff --git a/packages/core/resourcer/.npmignore b/packages/core/resourcer/.npmignore index 461574b2f..c593fe9df 100644 --- a/packages/core/resourcer/.npmignore +++ b/packages/core/resourcer/.npmignore @@ -1,7 +1,2 @@ -node_modules -*.log -docs -__tests__ -tsconfig.json -src -.fatherrc.ts \ No newline at end of file +/node_modules +/src \ No newline at end of file diff --git a/packages/core/sdk/.npmignore b/packages/core/sdk/.npmignore new file mode 100644 index 000000000..c593fe9df --- /dev/null +++ b/packages/core/sdk/.npmignore @@ -0,0 +1,2 @@ +/node_modules +/src \ No newline at end of file diff --git a/packages/core/server/.gitignore b/packages/core/server/.gitignore deleted file mode 100644 index 1be219988..000000000 --- a/packages/core/server/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -node_modules -yarn-error.log -.env -src2 \ No newline at end of file diff --git a/packages/core/server/.npmignore b/packages/core/server/.npmignore index 461574b2f..c593fe9df 100644 --- a/packages/core/server/.npmignore +++ b/packages/core/server/.npmignore @@ -1,7 +1,2 @@ -node_modules -*.log -docs -__tests__ -tsconfig.json -src -.fatherrc.ts \ No newline at end of file +/node_modules +/src \ No newline at end of file diff --git a/packages/core/server/package.json b/packages/core/server/package.json index 4e8b3da6d..d67cd8847 100644 --- a/packages/core/server/package.json +++ b/packages/core/server/package.json @@ -5,25 +5,36 @@ "types": "./lib/index.d.ts", "license": "Apache-2.0", "dependencies": { + "@formily/json-schema": "2.2.27", "@hapi/topo": "^6.0.0", "@koa/cors": "^3.1.0", + "@koa/multer": "^3.0.2", "@koa/router": "^9.4.0", "@nocobase/acl": "0.11.1-alpha.5", "@nocobase/actions": "0.11.1-alpha.5", "@nocobase/auth": "0.11.1-alpha.5", + "@nocobase/cache": "0.11.1-alpha.5", "@nocobase/database": "0.11.1-alpha.5", + "@nocobase/evaluators": "0.11.1-alpha.5", "@nocobase/logger": "0.11.1-alpha.5", "@nocobase/resourcer": "0.11.1-alpha.5", + "@nocobase/sdk": "0.11.1-alpha.5", "@nocobase/utils": "0.11.1-alpha.5", + "@types/koa-send": "^4.1.3", + "@types/multer": "^1.4.5", + "axios": "^0.26.1", "chalk": "^4.1.1", "commander": "^9.2.0", + "cronstrue": "^2.11.0", "dayjs": "^1.11.8", "find-package-json": "^1.2.0", "i18next": "^22.4.9", "koa": "^2.13.4", "koa-bodyparser": "^4.3.0", + "koa-send": "^5.0.1", "koa-static": "^5.0.0", "lodash": "^4.17.21", + "multer": "^1.4.2", "semver": "^7.3.7", "xpipe": "^1.0.5" }, diff --git a/packages/core/server/src/locale/antd.ts b/packages/core/server/src/locale/antd.ts deleted file mode 100644 index 32d663e35..000000000 --- a/packages/core/server/src/locale/antd.ts +++ /dev/null @@ -1,9 +0,0 @@ -export const getAntdLocale = (lang) => { - const lng = lang.replace('-', '_'); - try { - require.resolve(`antd/lib/locale/${lng}`); - return require(`antd/lib/locale/${lng}`).default; - } catch (error) { - return require(`antd/lib/locale/en_US`).default; - } -}; diff --git a/packages/core/server/src/locale/cron.ts b/packages/core/server/src/locale/cron.ts deleted file mode 100644 index eca06611f..000000000 --- a/packages/core/server/src/locale/cron.ts +++ /dev/null @@ -1,16 +0,0 @@ -export const getCronLocale = (lang: string) => { - const packageName = '@nocobase/client'; - let locale = null; - try { - const file = `${packageName}/src/locale`; - require.resolve(file); - locale = require(file).cron?.[lang]; - } catch (error) { - try { - const file = `${packageName}/lib/locale`; - require.resolve(file); - locale = require(file).cron?.[lang]; - } catch (error) {} - } - return locale; -}; diff --git a/packages/core/server/src/locale/locale.ts b/packages/core/server/src/locale/locale.ts index 83455613d..10a5d8b33 100644 --- a/packages/core/server/src/locale/locale.ts +++ b/packages/core/server/src/locale/locale.ts @@ -2,14 +2,13 @@ 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'; + localeFn = new Map(); constructor(app: Application) { this.app = app; @@ -22,12 +21,21 @@ export class Locale { this.getCacheResources(this.defaultLang); } + setLocaleFn(name: string, fn: (lang: string) => Promise) { + this.localeFn.set(name, fn); + } + async get(lang: string) { - return { - antd: await this.wrapCache(`locale:antd:${lang}`, () => getAntdLocale(lang)), - cronstrue: await this.wrapCache(`locale:cronstrue:${lang}`, () => getCronstrueLocale(lang)), + const defaults = { resources: await this.getCacheResources(lang), }; + for (const [name, fn] of this.localeFn) { + const result = await this.wrapCache(`locale:${name}:${lang}`, async () => await fn(lang)); + if (result) { + defaults[name] = result; + } + } + return defaults; } async wrapCache(key: string, fn: () => any) { @@ -57,9 +65,11 @@ export class Locale { if (res) { resources[name] = { ...res }; } - } catch (err) {} + } catch (err) { + // empty + } } - const res = getResource('@nocobase/client', lang); + const res = getResource('@nocobase/client', lang, false); if (res) { resources['client'] = { ...(resources['client'] || {}), ...res }; } diff --git a/packages/core/server/src/locale/resource.ts b/packages/core/server/src/locale/resource.ts index 7a467c976..56bc3cc0c 100644 --- a/packages/core/server/src/locale/resource.ts +++ b/packages/core/server/src/locale/resource.ts @@ -1,3 +1,5 @@ +import { requireModule } from '@nocobase/utils'; + const arr2obj = (items: any[]) => { const obj = {}; for (const item of items) { @@ -6,16 +8,21 @@ const arr2obj = (items: any[]) => { return obj; }; -export const getResource = (packageName: string, lang: string) => { +export const getResource = (packageName: string, lang: string, isPlugin = true) => { const resources = []; - const prefixes = ['src', 'lib']; + const prefixes = [isPlugin ? 'dist' : 'lib']; + if (process.env.APP_ENV !== 'production') { + prefixes.unshift('src'); + } for (const prefix of prefixes) { try { const file = `${packageName}/${prefix}/locale/${lang}`; require.resolve(file); - const resource = require(file).default; + const resource = requireModule(file); resources.push(resource); - } catch (error) {} + } catch (error) { + // empty + } if (resources.length) { break; } diff --git a/packages/core/server/src/plugin-manager/clientStaticMiddleware.ts b/packages/core/server/src/plugin-manager/clientStaticMiddleware.ts new file mode 100644 index 000000000..80dff1acb --- /dev/null +++ b/packages/core/server/src/plugin-manager/clientStaticMiddleware.ts @@ -0,0 +1,87 @@ +import fs from 'fs'; +import send from 'koa-send'; +import path from 'path'; + +const PREFIX = '/api/plugins/client/'; +const cwd = process.cwd(); +const NODE_MODULES = path.join(cwd, 'node_modules'); + +/** + * get plugin client static file url + * + * @example + * @nocobase/plugin-acl, index.js => /api/plugins/client/@nocobase/plugin-acl/index.js + * my-plugin, README.md => /api/plugins/client/my-plugin/README.md + */ +export const getPackageClientStaticUrl = (packageName: string, filePath: string) => { + return `${PREFIX}${packageName}/${filePath}`; +}; + +const isMatchClientStaticUrl = (url: string) => { + return url.startsWith(PREFIX); +}; + +/** + * get package name from url + * + * @example + * /api/plugins/client/@nocobase/plugin-acl/index.js => @nocobase/plugin-acl + * /api/plugins/client/my-plugin/README.md => my-plugin + */ +const getPackageName = (url: string) => { + const urlArr = url.split('/'); + return urlArr[4].startsWith('@') ? `${urlArr[4]}/${urlArr[5]}` : urlArr[4]; +}; + +/** + * get plugin client static file real path + * + * @example + * /api/plugins/client/@nocobase/plugin-acl/index.js => /node_modules/@nocobase/plugin-acl/dist/client/index.js + * /api/plugins/client/my-plugin/README.md => /node_modules/my-plugin/dist/client/README.md + */ +const getRealPath = (packageName: string, url: string) => { + const ext = path.extname(url); + const filePath = url.replace(`${PREFIX}${packageName}/`, ''); + if (ext.toLowerCase() === '.md') { + return path.join(NODE_MODULES, packageName, filePath); + } else { + return path.join(NODE_MODULES, packageName, 'dist', 'client', filePath); + } +}; + +/** + * send plugin client static file to browser. + * + * such as: + * /api/plugins/client/@nocobase/plugin-xxx/index.js + * /api/plugins/client/xxx/README.md + */ +export const clientStaticMiddleware = async (ctx, next) => { + if (isMatchClientStaticUrl(ctx.path)) { + // TODO: check packageName in plugins + const packageName = getPackageName(ctx.path); + + const realPath = getRealPath(packageName, ctx.path); + + // get file stats + const stats = await fs.promises.stat(realPath); + const ifModifiedSince = ctx.get('If-Modified-Since'); + const lastModified = stats.mtime.toUTCString(); + + // check cache headers + if (ifModifiedSince === lastModified) { + ctx.status = 304; + return; + } + + // `send` only accept relative path + const relativePath = path.relative(cwd, realPath); + await send(ctx, relativePath, { + setHeaders: (res) => { + res.setHeader('Last-Modified', lastModified); + }, + }); + } + await next(); +}; diff --git a/packages/core/server/src/plugin-manager/index.ts b/packages/core/server/src/plugin-manager/index.ts index afaa901be..66f490a9d 100644 --- a/packages/core/server/src/plugin-manager/index.ts +++ b/packages/core/server/src/plugin-manager/index.ts @@ -1 +1,2 @@ +export * from './clientStaticMiddleware'; export * from './plugin-manager'; diff --git a/packages/core/server/src/plugin-manager/plugin-manager.ts b/packages/core/server/src/plugin-manager/plugin-manager.ts index 78c97fd83..acb75ab52 100644 --- a/packages/core/server/src/plugin-manager/plugin-manager.ts +++ b/packages/core/server/src/plugin-manager/plugin-manager.ts @@ -7,6 +7,7 @@ import { resolve } from 'path'; import xpipe from 'xpipe'; import Application from '../application'; import { Plugin } from '../plugin'; +import { clientStaticMiddleware } from './clientStaticMiddleware'; import collectionOptions from './options/collection'; import resourceOptions from './options/resource'; import { PluginManagerRepository } from './plugin-manager-repository'; @@ -45,6 +46,8 @@ export class PluginManager { this.repository.setPluginManager(this); this.app.resourcer.define(resourceOptions); + this.app.use(clientStaticMiddleware); + this.app.resourcer.use(async (ctx, next) => { await next(); const { resourceName, actionName } = ctx.action; @@ -227,24 +230,6 @@ export class PluginManager { return instance; } - async generateClientFile(plugin: string, packageName: string) { - const file = resolve( - process.cwd(), - 'packages', - process.env.APP_PACKAGE_ROOT || 'app', - 'client/src/plugins', - `${plugin}.ts`, - ); - if (!fs.existsSync(file)) { - try { - require.resolve(`${packageName}/client`); - await fs.promises.writeFile(file, `export { default } from '${packageName}/client';`); - const { run } = require('@nocobase/cli/src/util'); - await run('yarn', ['nocobase', 'postinstall']); - } catch (error) {} - } - } - async add(plugin: any, options: any = {}, transaction?: any) { if (Array.isArray(plugin)) { const t = transaction || (await this.app.db.sequelize.transaction()); @@ -265,8 +250,6 @@ export class PluginManager { const packageName = await PluginManager.findPackage(plugin); - await this.generateClientFile(plugin, packageName); - const instance = this.addStatic(plugin, { ...options, async: true, diff --git a/packages/core/test/.gitignore b/packages/core/test/.gitignore deleted file mode 100644 index 1be219988..000000000 --- a/packages/core/test/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -node_modules -yarn-error.log -.env -src2 \ No newline at end of file diff --git a/packages/core/test/.npmignore b/packages/core/test/.npmignore index 461574b2f..c593fe9df 100644 --- a/packages/core/test/.npmignore +++ b/packages/core/test/.npmignore @@ -1,7 +1,2 @@ -node_modules -*.log -docs -__tests__ -tsconfig.json -src -.fatherrc.ts \ No newline at end of file +/node_modules +/src \ No newline at end of file diff --git a/packages/core/test/src/mockServer.ts b/packages/core/test/src/mockServer.ts index 359316e38..74d5c1638 100644 --- a/packages/core/test/src/mockServer.ts +++ b/packages/core/test/src/mockServer.ts @@ -197,8 +197,6 @@ export function mockServer(options: ApplicationOptions = {}) { database, }); - app.pm.generateClientFile = async () => {}; - return app; } diff --git a/packages/core/utils/.gitignore b/packages/core/utils/.gitignore deleted file mode 100644 index 1be219988..000000000 --- a/packages/core/utils/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -node_modules -yarn-error.log -.env -src2 \ No newline at end of file diff --git a/packages/core/utils/.npmignore b/packages/core/utils/.npmignore index 461574b2f..c593fe9df 100644 --- a/packages/core/utils/.npmignore +++ b/packages/core/utils/.npmignore @@ -1,7 +1,2 @@ -node_modules -*.log -docs -__tests__ -tsconfig.json -src -.fatherrc.ts \ No newline at end of file +/node_modules +/src \ No newline at end of file diff --git a/packages/core/utils/package.json b/packages/core/utils/package.json index 9c2b734dc..49e276e71 100644 --- a/packages/core/utils/package.json +++ b/packages/core/utils/package.json @@ -6,6 +6,7 @@ "license": "Apache-2.0", "dependencies": { "@hapi/topo": "^6.0.0", + "@rc-component/mini-decimal": "^1.1.0", "dayjs": "^1.11.9", "dedupe": "^3.0.2", "deepmerge": "^4.2.2", @@ -14,11 +15,5 @@ "multer": "^1.4.5-lts.1", "object-path": "^0.11.8" }, - "peerDependencies": { - "@rc-component/mini-decimal": "^1.0.1", - "antd": "5.x", - "dayjs": "1.x", - "rc-input-number": "7.x" - }, "gitHead": "ce588eefb0bfc50f7d5bbee575e0b5e843bf6644" } diff --git a/packages/core/utils/src/client.ts b/packages/core/utils/src/client.ts index 661a93a0f..b88101868 100644 --- a/packages/core/utils/src/client.ts +++ b/packages/core/utils/src/client.ts @@ -16,4 +16,3 @@ export * from './registry'; // export * from './toposort'; export * from './uid'; export { dayjs, lodash }; - diff --git a/packages/plugins/acl/.npmignore b/packages/plugins/acl/.npmignore index 7ce3216c1..c593fe9df 100644 --- a/packages/plugins/acl/.npmignore +++ b/packages/plugins/acl/.npmignore @@ -1,6 +1,2 @@ -node_modules -*.log -docs -__tests__ -tsconfig.json -src +/node_modules +/src \ No newline at end of file diff --git a/packages/plugins/acl/client.d.ts b/packages/plugins/acl/client.d.ts index d515d1feb..6c459cbac 100644 --- a/packages/plugins/acl/client.d.ts +++ b/packages/plugins/acl/client.d.ts @@ -1,3 +1,2 @@ -export * from './src/client'; -export { default } from './src/client'; - +export * from './dist/client'; +export { default } from './dist/client'; diff --git a/packages/plugins/acl/client.js b/packages/plugins/acl/client.js index 3c39956ca..b6e3be70e 100644 --- a/packages/plugins/acl/client.js +++ b/packages/plugins/acl/client.js @@ -1 +1 @@ -module.exports = require('./lib/client/index.js'); +module.exports = require('./dist/client/index.js'); diff --git a/packages/plugins/acl/package.json b/packages/plugins/acl/package.json index 125f9b1bb..2246bb792 100644 --- a/packages/plugins/acl/package.json +++ b/packages/plugins/acl/package.json @@ -6,31 +6,22 @@ "description.zh-CN": "基于角色、资源和操作的权限控制。", "version": "0.11.1-alpha.5", "license": "AGPL-3.0", - "main": "./lib/server/index.js", - "files": [ - "lib", - "src", - "README.md", - "README.zh-CN.md", - "CHANGELOG.md", - "server.js", - "server.d.ts", - "client.js", - "client.d.ts" - ], + "main": "./dist/server/index.js", "devDependencies": { - "@nocobase/acl": "0.11.1-alpha.5", - "@nocobase/actions": "0.11.1-alpha.5", - "@nocobase/client": "0.11.1-alpha.5", - "@nocobase/database": "0.11.1-alpha.5", - "@nocobase/server": "0.11.1-alpha.5", - "@nocobase/test": "0.11.1-alpha.5", - "@nocobase/utils": "0.11.1-alpha.5", "@types/jsonwebtoken": "^8.5.8", "jsonwebtoken": "^8.5.1", "react": "^18.2.0", "react-dom": "^18.2.0" }, + "peerDependencies": { + "@nocobase/acl": "0.x", + "@nocobase/actions": "0.x", + "@nocobase/client": "0.x", + "@nocobase/database": "0.x", + "@nocobase/server": "0.x", + "@nocobase/test": "0.x", + "@nocobase/utils": "0.x" + }, "repository": { "type": "git", "url": "git+https://github.com/nocobase/nocobase.git", diff --git a/packages/plugins/acl/server.d.ts b/packages/plugins/acl/server.d.ts index b55e6f70d..0b9baefe6 100644 --- a/packages/plugins/acl/server.d.ts +++ b/packages/plugins/acl/server.d.ts @@ -1,3 +1,3 @@ -export * from './src/server'; -export { default } from './src/server'; - +// @ts-nocheck +export * from './dist/server'; +export { default } from './dist/server'; diff --git a/packages/plugins/acl/server.js b/packages/plugins/acl/server.js index adcc9d90d..972842039 100644 --- a/packages/plugins/acl/server.js +++ b/packages/plugins/acl/server.js @@ -1 +1 @@ -module.exports = require('./lib/server/index.js'); +module.exports = require('./dist/server/index.js'); diff --git a/packages/plugins/acl/src/client/index.ts b/packages/plugins/acl/src/client/index.ts index 78c476c1d..ed9c6076e 100644 --- a/packages/plugins/acl/src/client/index.ts +++ b/packages/plugins/acl/src/client/index.ts @@ -2,6 +2,7 @@ import { Plugin } from '@nocobase/client'; class AclPlugin extends Plugin { async load() { + // code } } diff --git a/packages/plugins/acl/src/index.ts b/packages/plugins/acl/src/index.ts index 7ddad5814..7e74612df 100644 --- a/packages/plugins/acl/src/index.ts +++ b/packages/plugins/acl/src/index.ts @@ -1 +1,2 @@ +export * from './server'; export { default } from './server'; diff --git a/packages/plugins/acl/src/server/server.ts b/packages/plugins/acl/src/server/server.ts index 87a98c604..87b65be9b 100644 --- a/packages/plugins/acl/src/server/server.ts +++ b/packages/plugins/acl/src/server/server.ts @@ -2,7 +2,7 @@ import { NoPermissionError } from '@nocobase/acl'; import { Context, utils as actionUtils } from '@nocobase/actions'; import { Collection, RelationField, snakeCase } from '@nocobase/database'; import { Plugin } from '@nocobase/server'; -import { lodash } from '@nocobase/utils'; +import lodash from 'lodash'; import { resolve } from 'path'; import { availableActionResource } from './actions/available-actions'; import { checkAction } from './actions/role-check'; diff --git a/packages/plugins/api-keys/.npmignore b/packages/plugins/api-keys/.npmignore new file mode 100644 index 000000000..c593fe9df --- /dev/null +++ b/packages/plugins/api-keys/.npmignore @@ -0,0 +1,2 @@ +/node_modules +/src \ No newline at end of file diff --git a/packages/plugins/api-keys/client.d.ts b/packages/plugins/api-keys/client.d.ts index 765db9222..ea96f63f3 100755 --- a/packages/plugins/api-keys/client.d.ts +++ b/packages/plugins/api-keys/client.d.ts @@ -1,4 +1,4 @@ // @ts-nocheck -export * from './lib/client'; -export { default } from './lib/client'; +export * from './dist/client'; +export { default } from './dist/client'; diff --git a/packages/plugins/api-keys/client.js b/packages/plugins/api-keys/client.js index 238820257..51c2d2bdb 100755 --- a/packages/plugins/api-keys/client.js +++ b/packages/plugins/api-keys/client.js @@ -4,7 +4,7 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } -var _index = _interopRequireWildcard(require("./lib/client")); +var _index = _interopRequireWildcard(require("./dist/client")); Object.defineProperty(exports, "__esModule", { value: true diff --git a/packages/plugins/api-keys/package.json b/packages/plugins/api-keys/package.json index 5def7db24..5ff37d095 100644 --- a/packages/plugins/api-keys/package.json +++ b/packages/plugins/api-keys/package.json @@ -1,39 +1,31 @@ { "name": "@nocobase/plugin-api-keys", "displayName": "API keys", - "displayName.zh-CN": "API keys", - "description": "Allow users to use API key to access NocoBase's api", - "description.zh-CN": "允许用户使用 API key 访问 NocoBase 的 api", + "displayName.zh-CN": "API 秘钥", + "description": "Allow users to use API key to access NocoBase server API", + "description.zh-CN": "允许用户使用 API key 访问 NocoBase server API", "version": "0.11.1-alpha.5", "license": "AGPL-3.0", - "main": "./lib/server/index.js", - "files": [ - "lib", - "src", - "README.md", - "README.zh-CN.md", - "CHANGELOG.md", - "server.js", - "server.d.ts", - "client.js", - "client.d.ts" - ], + "main": "./dist/server/index.js", "devDependencies": { - "@formily/react": "^2.2.27", - "@formily/shared": "^2.2.27", - "@nocobase/actions": "0.11.1-alpha.5", - "@nocobase/client": "0.11.1-alpha.5", - "@nocobase/database": "0.11.1-alpha.5", - "@nocobase/resourcer": "0.11.1-alpha.5", - "@nocobase/server": "0.11.1-alpha.5", - "@nocobase/test": "0.11.1-alpha.5", - "@nocobase/utils": "0.11.1-alpha.5", - "antd": "^5.7.3", + "@formily/react": "2.x", + "@formily/shared": "2.x", + "ahooks": "^3.7.2", + "antd": "5.x", "dayjs": "^1.11.8", "i18next": "^22.4.9", "react": "^18.2.0", "react-dom": "^18.2.0", "react-i18next": "^11.15.1" }, + "peerDependencies": { + "@nocobase/actions": "0.x", + "@nocobase/client": "0.x", + "@nocobase/database": "0.x", + "@nocobase/resourcer": "0.x", + "@nocobase/server": "0.x", + "@nocobase/test": "0.x", + "@nocobase/utils": "0.x" + }, "gitHead": "ce588eefb0bfc50f7d5bbee575e0b5e843bf6644" } diff --git a/packages/plugins/api-keys/server.d.ts b/packages/plugins/api-keys/server.d.ts index e70edb928..0b9baefe6 100755 --- a/packages/plugins/api-keys/server.d.ts +++ b/packages/plugins/api-keys/server.d.ts @@ -1,4 +1,3 @@ // @ts-nocheck -export * from './lib/server'; -export { default } from './lib/server'; - +export * from './dist/server'; +export { default } from './dist/server'; diff --git a/packages/plugins/api-keys/server.js b/packages/plugins/api-keys/server.js index d06a7eb92..972842039 100755 --- a/packages/plugins/api-keys/server.js +++ b/packages/plugins/api-keys/server.js @@ -1,30 +1 @@ -"use strict"; - -function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } - -function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } - -var _index = _interopRequireWildcard(require("./lib/server")); - -Object.defineProperty(exports, "__esModule", { - value: true -}); -var _exportNames = {}; -Object.defineProperty(exports, "default", { - enumerable: true, - get: function get() { - return _index.default; - } -}); - -Object.keys(_index).forEach(function (key) { - if (key === "default" || key === "__esModule") return; - if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return; - if (key in exports && exports[key] === _index[key]) return; - Object.defineProperty(exports, key, { - enumerable: true, - get: function get() { - return _index[key]; - } - }); -}); +module.exports = require('./dist/server/index.js'); diff --git a/packages/plugins/api-keys/src/client/Configuration/ExpiresSelect.tsx b/packages/plugins/api-keys/src/client/Configuration/ExpiresSelect.tsx index bdb6b89d2..82cab93a3 100644 --- a/packages/plugins/api-keys/src/client/Configuration/ExpiresSelect.tsx +++ b/packages/plugins/api-keys/src/client/Configuration/ExpiresSelect.tsx @@ -1,7 +1,6 @@ -import { css } from '@emotion/css'; import { connect, mapProps, mapReadPretty } from '@formily/react'; -import { useRecord } from '@nocobase/client'; -import { dayjs } from '@nocobase/utils/client'; +import { css, useRecord } from '@nocobase/client'; +import dayjs from 'dayjs'; import { useBoolean } from 'ahooks'; import { DatePicker, Select, Space, Typography } from 'antd'; import React, { useMemo } from 'react'; diff --git a/packages/plugins/api-keys/src/client/Configuration/index.tsx b/packages/plugins/api-keys/src/client/Configuration/index.tsx index 06019a1f6..5ef9748e0 100644 --- a/packages/plugins/api-keys/src/client/Configuration/index.tsx +++ b/packages/plugins/api-keys/src/client/Configuration/index.tsx @@ -1,7 +1,7 @@ import { RecursionField } from '@formily/react'; import { CollectionManagerProvider, SchemaComponentOptions, useCurrentRoles } from '@nocobase/client'; import React from 'react'; -import { apiKeysCollection } from '../../collections'; +import apiKeysCollection from '../../collections'; import { ExpiresSelect } from './ExpiresSelect'; import { configurationSchema } from './schema'; diff --git a/packages/plugins/api-keys/src/collections/index.ts b/packages/plugins/api-keys/src/collections/index.ts index 50a7b012b..dc988885c 100644 --- a/packages/plugins/api-keys/src/collections/index.ts +++ b/packages/plugins/api-keys/src/collections/index.ts @@ -1 +1 @@ -export { default as apiKeysCollection } from './api-keys'; +export { default } from './api-keys'; diff --git a/packages/plugins/api-keys/src/index.ts b/packages/plugins/api-keys/src/index.ts index 7ddad5814..7e74612df 100644 --- a/packages/plugins/api-keys/src/index.ts +++ b/packages/plugins/api-keys/src/index.ts @@ -1 +1,2 @@ +export * from './server'; export { default } from './server'; diff --git a/packages/plugins/audit-logs/.npmignore b/packages/plugins/audit-logs/.npmignore index 7ce3216c1..c593fe9df 100644 --- a/packages/plugins/audit-logs/.npmignore +++ b/packages/plugins/audit-logs/.npmignore @@ -1,6 +1,2 @@ -node_modules -*.log -docs -__tests__ -tsconfig.json -src +/node_modules +/src \ No newline at end of file diff --git a/packages/plugins/audit-logs/client.d.ts b/packages/plugins/audit-logs/client.d.ts index d515d1feb..6c459cbac 100755 --- a/packages/plugins/audit-logs/client.d.ts +++ b/packages/plugins/audit-logs/client.d.ts @@ -1,3 +1,2 @@ -export * from './src/client'; -export { default } from './src/client'; - +export * from './dist/client'; +export { default } from './dist/client'; diff --git a/packages/plugins/audit-logs/client.js b/packages/plugins/audit-logs/client.js index 3c39956ca..b6e3be70e 100755 --- a/packages/plugins/audit-logs/client.js +++ b/packages/plugins/audit-logs/client.js @@ -1 +1 @@ -module.exports = require('./lib/client/index.js'); +module.exports = require('./dist/client/index.js'); diff --git a/packages/plugins/audit-logs/package.json b/packages/plugins/audit-logs/package.json index 7ce8c2d71..b96160492 100644 --- a/packages/plugins/audit-logs/package.json +++ b/packages/plugins/audit-logs/package.json @@ -1,34 +1,25 @@ { "name": "@nocobase/plugin-audit-logs", "version": "0.11.1-alpha.5", - "displayName": "audit-logs", + "displayName": "Audit logs", "displayName.zh-CN": "审计日志", - "description": "audit logs plugin", - "description.zh-CN": "审计日志。", - "main": "./lib/server/index.js", - "files": [ - "lib", - "src", - "README.md", - "README.zh-CN.md", - "CHANGELOG.md", - "server.js", - "server.d.ts", - "client.js", - "client.d.ts" - ], + "description": "Data addition, modification, deletion logs", + "description.zh-CN": "数据的增删改日志", + "main": "./dist/server/index.js", "license": "AGPL-3.0", "devDependencies": { - "@ant-design/icons": "^5.1.4", - "@formily/antd-v5": "^1.1.0", - "@formily/react": "^2.2.27", - "@formily/shared": "^2.2.27", - "@nocobase/client": "0.11.1-alpha.5", - "@nocobase/database": "0.11.1-alpha.5", - "@nocobase/server": "0.11.1-alpha.5", - "@nocobase/test": "0.11.1-alpha.5", + "@ant-design/icons": "5.x", + "@formily/antd-v5": "1.x", + "@formily/react": "2.x", + "@formily/shared": "2.x", "react": "^18.2.0", "react-i18next": "^11.15.1" }, + "peerDependencies": { + "@nocobase/client": "0.x", + "@nocobase/database": "0.x", + "@nocobase/server": "0.x", + "@nocobase/test": "0.x" + }, "gitHead": "ce588eefb0bfc50f7d5bbee575e0b5e843bf6644" } diff --git a/packages/plugins/audit-logs/server.d.ts b/packages/plugins/audit-logs/server.d.ts index b55e6f70d..c41081ddc 100755 --- a/packages/plugins/audit-logs/server.d.ts +++ b/packages/plugins/audit-logs/server.d.ts @@ -1,3 +1,2 @@ -export * from './src/server'; -export { default } from './src/server'; - +export * from './dist/server'; +export { default } from './dist/server'; diff --git a/packages/plugins/audit-logs/server.js b/packages/plugins/audit-logs/server.js index adcc9d90d..972842039 100755 --- a/packages/plugins/audit-logs/server.js +++ b/packages/plugins/audit-logs/server.js @@ -1 +1 @@ -module.exports = require('./lib/server/index.js'); +module.exports = require('./dist/server/index.js'); diff --git a/packages/plugins/audit-logs/src/index.ts b/packages/plugins/audit-logs/src/index.ts index 7ddad5814..7e74612df 100644 --- a/packages/plugins/audit-logs/src/index.ts +++ b/packages/plugins/audit-logs/src/index.ts @@ -1 +1,2 @@ +export * from './server'; export { default } from './server'; diff --git a/packages/plugins/auth/.npmignore b/packages/plugins/auth/.npmignore new file mode 100644 index 000000000..c593fe9df --- /dev/null +++ b/packages/plugins/auth/.npmignore @@ -0,0 +1,2 @@ +/node_modules +/src \ No newline at end of file diff --git a/packages/plugins/auth/client.d.ts b/packages/plugins/auth/client.d.ts index 6ffb028c7..6c459cbac 100755 --- a/packages/plugins/auth/client.d.ts +++ b/packages/plugins/auth/client.d.ts @@ -1,2 +1,2 @@ -export * from './src/client'; -export { default } from './src/client'; +export * from './dist/client'; +export { default } from './dist/client'; diff --git a/packages/plugins/auth/client.js b/packages/plugins/auth/client.js index c83e7e450..4d9520d74 100755 --- a/packages/plugins/auth/client.js +++ b/packages/plugins/auth/client.js @@ -39,7 +39,7 @@ function _interopRequireWildcard(obj, nodeInterop) { return newObj; } -var _index = _interopRequireWildcard(require('./lib/client')); +var _index = _interopRequireWildcard(require('./dist/client')); Object.defineProperty(exports, '__esModule', { value: true, diff --git a/packages/plugins/auth/package.json b/packages/plugins/auth/package.json index bbfc8afcd..ec150952c 100644 --- a/packages/plugins/auth/package.json +++ b/packages/plugins/auth/package.json @@ -1,38 +1,27 @@ { "name": "@nocobase/plugin-auth", "version": "0.11.1-alpha.5", - "main": "./lib/server/index.js", - "files": [ - "lib", - "src", - "README.md", - "README.zh-CN.md", - "CHANGELOG.md", - "server.js", - "server.d.ts", - "client.js", - "client.d.ts" - ], + "main": "./dist/server/index.js", "devDependencies": { - "@ant-design/icons": "^5.1.4", - "@formily/react": "^2.2.27", - "@formily/shared": "^2.2.27", - "@nocobase/auth": "0.11.1-alpha.5", - "@nocobase/test": "0.11.1-alpha.5", + "@ant-design/icons": "5.x", + "@formily/react": "2.x", + "@formily/shared": "2.x", "@types/cron": "^2.0.1", - "antd": "^5.7.3", + "antd": "5.x", + "cron": "^2.3.1", "react": "^18.2.0", "react-i18next": "^11.15.1" }, - "dependencies": { - "@nocobase/actions": "0.11.1-alpha.5", - "@nocobase/client": "0.11.1-alpha.5", - "@nocobase/database": "0.11.1-alpha.5", - "@nocobase/server": "0.11.1-alpha.5", - "cron": "^2.3.1" + "peerDependencies": { + "@nocobase/actions": "0.x", + "@nocobase/auth": "0.x", + "@nocobase/client": "0.x", + "@nocobase/database": "0.x", + "@nocobase/server": "0.x", + "@nocobase/test": "0.x" }, "displayName": "Authentication", "displayName.zh-CN": "用户认证", - "description": "Basic authentication and authenticator management.", - "description.zh-CN": "提供基础认证功能和扩展认证器管理功能。" + "description": "Basic authentication and authenticator management", + "description.zh-CN": "提供基础认证功能和扩展认证器管理功能" } diff --git a/packages/plugins/auth/server.d.ts b/packages/plugins/auth/server.d.ts index 63111b12d..c41081ddc 100755 --- a/packages/plugins/auth/server.d.ts +++ b/packages/plugins/auth/server.d.ts @@ -1,2 +1,2 @@ -export * from './src/server'; -export { default } from './src/server'; +export * from './dist/server'; +export { default } from './dist/server'; diff --git a/packages/plugins/auth/server.js b/packages/plugins/auth/server.js index 4f16903a6..6e7bf26d1 100755 --- a/packages/plugins/auth/server.js +++ b/packages/plugins/auth/server.js @@ -39,7 +39,7 @@ function _interopRequireWildcard(obj, nodeInterop) { return newObj; } -var _index = _interopRequireWildcard(require('./lib/server')); +var _index = _interopRequireWildcard(require('./dist/server')); Object.defineProperty(exports, '__esModule', { value: true, diff --git a/packages/plugins/auth/src/preset.ts b/packages/plugins/auth/src/preset.ts index 13a87b304..0ace31723 100644 --- a/packages/plugins/auth/src/preset.ts +++ b/packages/plugins/auth/src/preset.ts @@ -1,4 +1,6 @@ +// @ts-ignore +import { name } from '../package.json'; export const presetAuthType = 'Email/Password'; export const presetAuthenticator = 'basic'; -export const namespace = require('../package.json').name; +export const namespace = name; diff --git a/packages/plugins/charts/.npmignore b/packages/plugins/charts/.npmignore new file mode 100644 index 000000000..c593fe9df --- /dev/null +++ b/packages/plugins/charts/.npmignore @@ -0,0 +1,2 @@ +/node_modules +/src \ No newline at end of file diff --git a/packages/plugins/charts/client.d.ts b/packages/plugins/charts/client.d.ts index d515d1feb..6c459cbac 100755 --- a/packages/plugins/charts/client.d.ts +++ b/packages/plugins/charts/client.d.ts @@ -1,3 +1,2 @@ -export * from './src/client'; -export { default } from './src/client'; - +export * from './dist/client'; +export { default } from './dist/client'; diff --git a/packages/plugins/charts/client.js b/packages/plugins/charts/client.js index 3c39956ca..b6e3be70e 100755 --- a/packages/plugins/charts/client.js +++ b/packages/plugins/charts/client.js @@ -1 +1 @@ -module.exports = require('./lib/client/index.js'); +module.exports = require('./dist/client/index.js'); diff --git a/packages/plugins/charts/package.json b/packages/plugins/charts/package.json index 93396ae86..52b835b14 100644 --- a/packages/plugins/charts/package.json +++ b/packages/plugins/charts/package.json @@ -5,35 +5,24 @@ "description": "Out-of-the-box, feature-rich chart plugins.", "description.zh-CN": "开箱即用、丰富的报表。", "version": "0.11.1-alpha.5", - "main": "./lib/server/index.js", - "files": [ - "lib", - "src", - "README.md", - "README.zh-CN.md", - "CHANGELOG.md", - "server.js", - "server.d.ts", - "client.js", - "client.d.ts" - ], - "dependencies": { - "json5": "^2.2.3" - }, + "main": "./dist/server/index.js", "devDependencies": { - "@ant-design/icons": "^5.1.4", - "@formily/antd-v5": "^1.1.0", - "@formily/core": "^2.2.27", - "@formily/react": "^2.2.27", - "@formily/shared": "^2.2.27", - "@nocobase/client": "0.11.1-alpha.5", - "@nocobase/database": "0.11.1-alpha.5", - "@nocobase/server": "0.11.1-alpha.5", - "@nocobase/test": "0.11.1-alpha.5", - "@nocobase/utils": "0.11.1-alpha.5", - "antd": "^5.7.3", + "@ant-design/icons": "5.x", + "@formily/antd-v5": "1.x", + "@formily/core": "2.x", + "@formily/react": "2.x", + "@formily/shared": "2.x", + "antd": "5.x", + "json5": "^2.2.3", "react": "^18.2.0", "react-i18next": "^11.15.1", "react-router-dom": "^6.11.2" + }, + "peerDependencies": { + "@nocobase/client": "0.x", + "@nocobase/database": "0.x", + "@nocobase/server": "0.x", + "@nocobase/test": "0.x", + "@nocobase/utils": "0.x" } } diff --git a/packages/plugins/charts/server.d.ts b/packages/plugins/charts/server.d.ts index b55e6f70d..c41081ddc 100755 --- a/packages/plugins/charts/server.d.ts +++ b/packages/plugins/charts/server.d.ts @@ -1,3 +1,2 @@ -export * from './src/server'; -export { default } from './src/server'; - +export * from './dist/server'; +export { default } from './dist/server'; diff --git a/packages/plugins/charts/server.js b/packages/plugins/charts/server.js index adcc9d90d..972842039 100755 --- a/packages/plugins/charts/server.js +++ b/packages/plugins/charts/server.js @@ -1 +1 @@ -module.exports = require('./lib/server/index.js'); +module.exports = require('./dist/server/index.js'); diff --git a/packages/plugins/charts/src/client/index.tsx b/packages/plugins/charts/src/client/index.tsx index 102cb9649..57b4bac32 100644 --- a/packages/plugins/charts/src/client/index.tsx +++ b/packages/plugins/charts/src/client/index.tsx @@ -104,11 +104,11 @@ const ChartsProvider = React.memo((props) => { ChartsProvider.displayName = 'ChartsProvider'; export class ChartsPlugin extends Plugin { + async afterAdd() { + this.app.pm.add(BlockSchemaComponentPlugin); + } async load() { this.app.use(ChartsProvider); - - // TODO: 主应用应该会有这个插件,按道理不需要再注册 - this.app.pm.add(BlockSchemaComponentPlugin); } } diff --git a/packages/plugins/charts/src/client/select/shared.ts b/packages/plugins/charts/src/client/select/shared.ts index 9926d2e09..d440fdd40 100644 --- a/packages/plugins/charts/src/client/select/shared.ts +++ b/packages/plugins/charts/src/client/select/shared.ts @@ -1,4 +1,4 @@ -import { lodash } from '@nocobase/utils/client'; +import lodash from 'lodash'; export const defaultFieldNames = { label: 'label', diff --git a/packages/plugins/charts/src/client/settings/queryTypes.ts b/packages/plugins/charts/src/client/settings/queryTypes.ts index 5832bab0d..0a378b67f 100644 --- a/packages/plugins/charts/src/client/settings/queryTypes.ts +++ b/packages/plugins/charts/src/client/settings/queryTypes.ts @@ -1,5 +1,5 @@ import { ISchema } from '@formily/react'; -import { lodash } from '@nocobase/utils/client'; +import lodash from 'lodash'; export const json: ISchema = { type: 'object', diff --git a/packages/plugins/charts/src/index.ts b/packages/plugins/charts/src/index.ts index 7ddad5814..7e74612df 100644 --- a/packages/plugins/charts/src/index.ts +++ b/packages/plugins/charts/src/index.ts @@ -1 +1,2 @@ +export * from './server'; export { default } from './server'; diff --git a/packages/plugins/china-region/.npmignore b/packages/plugins/china-region/.npmignore index 7ce3216c1..c593fe9df 100644 --- a/packages/plugins/china-region/.npmignore +++ b/packages/plugins/china-region/.npmignore @@ -1,6 +1,2 @@ -node_modules -*.log -docs -__tests__ -tsconfig.json -src +/node_modules +/src \ No newline at end of file diff --git a/packages/plugins/china-region/build.js b/packages/plugins/china-region/build.js new file mode 100644 index 000000000..077aae633 --- /dev/null +++ b/packages/plugins/china-region/build.js @@ -0,0 +1,21 @@ +#!/usr/bin/env node + +const fs = require('fs/promises'); +const path = require('path'); +const existsSync = require('fs').existsSync; + +exports.run = async (log) => { + const dir = path.resolve(__dirname, './dist/china-division'); + if (existsSync(dir)) { + await fs.rmdir(dir, { force: true, recursive: true }); + } + + const keys = ['areas', 'cities', 'provinces']; + for (const key of keys) { + log(`coping ${key}.json`); + await fs.cp(require.resolve(`china-division/dist/${key}.json`), path.resolve(dir, `${key}.json`), { + recursive: true, + force: true, + }); + } +}; diff --git a/packages/plugins/china-region/client.d.ts b/packages/plugins/china-region/client.d.ts index d515d1feb..6c459cbac 100755 --- a/packages/plugins/china-region/client.d.ts +++ b/packages/plugins/china-region/client.d.ts @@ -1,3 +1,2 @@ -export * from './src/client'; -export { default } from './src/client'; - +export * from './dist/client'; +export { default } from './dist/client'; diff --git a/packages/plugins/china-region/client.js b/packages/plugins/china-region/client.js index 3c39956ca..b6e3be70e 100755 --- a/packages/plugins/china-region/client.js +++ b/packages/plugins/china-region/client.js @@ -1 +1 @@ -module.exports = require('./lib/client/index.js'); +module.exports = require('./dist/client/index.js'); diff --git a/packages/plugins/china-region/package.json b/packages/plugins/china-region/package.json index 49ac7afd3..aef5a7ab0 100644 --- a/packages/plugins/china-region/package.json +++ b/packages/plugins/china-region/package.json @@ -1,33 +1,24 @@ { "name": "@nocobase/plugin-china-region", "version": "0.11.1-alpha.5", - "displayName": "china-region", + "displayName": "China region", "displayName.zh-CN": "中国行政区", - "description": "Chinese Administrative Division Plugin, including all administrative regions of China.", - "description.zh-CN": "中国行政区划插件,内含所有中国行政区域。", - "main": "./lib/server/index.js", - "files": [ - "lib", - "src", - "README.md", - "README.zh-CN.md", - "CHANGELOG.md", - "server.js", - "server.d.ts", - "client.js", - "client.d.ts" - ], + "description": "China region field", + "description.zh-CN": "拓展的中国行政区字段", + "main": "./dist/server/index.js", "license": "AGPL-3.0", - "dependencies": { - "china-division": "^2.4.0" - }, "devDependencies": { - "@formily/core": "^2.2.27", - "@formily/react": "^2.2.27", - "@nocobase/client": "0.11.1-alpha.5", - "@nocobase/database": "0.11.1-alpha.5", - "@nocobase/server": "0.11.1-alpha.5", - "@nocobase/test": "0.11.1-alpha.5" + "@formily/core": "2.x", + "@formily/react": "2.x", + "@types/cross-spawn": "^6.0.2", + "china-division": "^2.4.0", + "cross-spawn": "^7.0.3" + }, + "peerDependencies": { + "@nocobase/client": "0.x", + "@nocobase/database": "0.x", + "@nocobase/server": "0.x", + "@nocobase/test": "0.x" }, "gitHead": "ce588eefb0bfc50f7d5bbee575e0b5e843bf6644" } diff --git a/packages/plugins/china-region/server.d.ts b/packages/plugins/china-region/server.d.ts index b55e6f70d..c41081ddc 100755 --- a/packages/plugins/china-region/server.d.ts +++ b/packages/plugins/china-region/server.d.ts @@ -1,3 +1,2 @@ -export * from './src/server'; -export { default } from './src/server'; - +export * from './dist/server'; +export { default } from './dist/server'; diff --git a/packages/plugins/china-region/server.js b/packages/plugins/china-region/server.js index adcc9d90d..972842039 100755 --- a/packages/plugins/china-region/server.js +++ b/packages/plugins/china-region/server.js @@ -1 +1 @@ -module.exports = require('./lib/server/index.js'); +module.exports = require('./dist/server/index.js'); diff --git a/packages/plugins/china-region/src/index.ts b/packages/plugins/china-region/src/index.ts index 7ddad5814..7e74612df 100644 --- a/packages/plugins/china-region/src/index.ts +++ b/packages/plugins/china-region/src/index.ts @@ -1 +1,2 @@ +export * from './server'; export { default } from './server'; diff --git a/packages/plugins/china-region/src/server/index.ts b/packages/plugins/china-region/src/server/index.ts index 8089a5569..640ab6dea 100644 --- a/packages/plugins/china-region/src/server/index.ts +++ b/packages/plugins/china-region/src/server/index.ts @@ -1,6 +1,15 @@ import { Plugin } from '@nocobase/server'; import { resolve } from 'path'; +function getChinaDivisionData(key: string) { + try { + require.resolve(`../china-division/${key}.json`); + return require(`../china-division/${key}.json`); + } catch (error) { + return require(`china-division/dist/${key}.json`); + } +} + export class PluginChinaRegion extends Plugin { async install() { await this.importData(); @@ -25,9 +34,9 @@ export class PluginChinaRegion extends Plugin { } async importData() { - const areas = require('china-division/dist/areas.json'); - const cities = require('china-division/dist/cities.json'); - const provinces = require('china-division/dist/provinces.json'); + const areas = getChinaDivisionData('areas'); + const cities = getChinaDivisionData('cities'); + const provinces = getChinaDivisionData('provinces'); const timer = Date.now(); const ChinaRegion = this.db.getModel('chinaRegions'); diff --git a/packages/plugins/client/.npmignore b/packages/plugins/client/.npmignore index 7ce3216c1..c593fe9df 100644 --- a/packages/plugins/client/.npmignore +++ b/packages/plugins/client/.npmignore @@ -1,6 +1,2 @@ -node_modules -*.log -docs -__tests__ -tsconfig.json -src +/node_modules +/src \ No newline at end of file diff --git a/packages/plugins/client/build.js b/packages/plugins/client/build.js new file mode 100644 index 000000000..8516ed076 --- /dev/null +++ b/packages/plugins/client/build.js @@ -0,0 +1,27 @@ +#!/usr/bin/env node + +const fs = require('fs/promises'); +const path = require('path'); +const existsSync = require('fs').existsSync; + +const client = require.resolve('@nocobase/client'); +const antd = require.resolve('antd'); + +exports.run = async (log) => { + const localeDir = path.resolve(__dirname, './dist/locale'); + if (existsSync(localeDir)) { + await fs.rmdir(localeDir, { force: true, recursive: true }); + } + + log('coping client locale'); + await fs.cp(path.resolve(path.dirname(client), 'locale'), localeDir, { + recursive: true, + force: true, + }); + + log('coping antd locale'); + await fs.cp(path.resolve(path.dirname(antd)), path.resolve(localeDir, 'antd'), { + recursive: true, + force: true, + }); +}; diff --git a/packages/plugins/client/client.d.ts b/packages/plugins/client/client.d.ts index d515d1feb..6c459cbac 100644 --- a/packages/plugins/client/client.d.ts +++ b/packages/plugins/client/client.d.ts @@ -1,3 +1,2 @@ -export * from './src/client'; -export { default } from './src/client'; - +export * from './dist/client'; +export { default } from './dist/client'; diff --git a/packages/plugins/client/client.js b/packages/plugins/client/client.js index 3c39956ca..b6e3be70e 100644 --- a/packages/plugins/client/client.js +++ b/packages/plugins/client/client.js @@ -1 +1 @@ -module.exports = require('./lib/client/index.js'); +module.exports = require('./dist/client/index.js'); diff --git a/packages/plugins/client/package.json b/packages/plugins/client/package.json index 4538b696c..5e745f3a2 100644 --- a/packages/plugins/client/package.json +++ b/packages/plugins/client/package.json @@ -1,35 +1,24 @@ { "name": "@nocobase/plugin-client", - "displayName": "client", - "displayName.zh-CN": "客户端", - "description": "client", - "description.zh-CN": "客户端。", + "displayName": "WEB client", + "displayName.zh-CN": "WEB 客户端", + "description": "", + "description.zh-CN": "", "version": "0.11.1-alpha.5", - "main": "./lib/server/index.js", - "files": [ - "lib", - "src", - "README.md", - "README.zh-CN.md", - "CHANGELOG.md", - "server.js", - "server.d.ts", - "client.js", - "client.d.ts" - ], + "main": "./dist/server/index.js", "license": "AGPL-3.0", - "dependencies": { - "antd": "^5.7.3", + "devDependencies": { + "antd": "5.x", "cronstrue": "^2.11.0", "koa-send": "^5.0.1", "koa-static": "^5.0.0" }, - "devDependencies": { - "@nocobase/client": "0.11.1-alpha.5", - "@nocobase/database": "0.11.1-alpha.5", - "@nocobase/server": "0.11.1-alpha.5", - "@nocobase/test": "0.11.1-alpha.5", - "@nocobase/utils": "0.11.1-alpha.5" + "peerDependencies": { + "@nocobase/client": "0.x", + "@nocobase/database": "0.x", + "@nocobase/server": "0.x", + "@nocobase/test": "0.x", + "@nocobase/utils": "0.x" }, "gitHead": "ce588eefb0bfc50f7d5bbee575e0b5e843bf6644" } diff --git a/packages/plugins/client/server.d.ts b/packages/plugins/client/server.d.ts index b55e6f70d..c41081ddc 100644 --- a/packages/plugins/client/server.d.ts +++ b/packages/plugins/client/server.d.ts @@ -1,3 +1,2 @@ -export * from './src/server'; -export { default } from './src/server'; - +export * from './dist/server'; +export { default } from './dist/server'; diff --git a/packages/plugins/client/server.js b/packages/plugins/client/server.js index adcc9d90d..972842039 100644 --- a/packages/plugins/client/server.js +++ b/packages/plugins/client/server.js @@ -1 +1 @@ -module.exports = require('./lib/server/index.js'); +module.exports = require('./dist/server/index.js'); diff --git a/packages/plugins/client/src/index.ts b/packages/plugins/client/src/index.ts index 7ddad5814..7e74612df 100644 --- a/packages/plugins/client/src/index.ts +++ b/packages/plugins/client/src/index.ts @@ -1 +1,2 @@ +export * from './server'; export { default } from './server'; diff --git a/packages/plugins/client/src/server/antd.ts b/packages/plugins/client/src/server/antd.ts new file mode 100644 index 000000000..1b3e4b15d --- /dev/null +++ b/packages/plugins/client/src/server/antd.ts @@ -0,0 +1,20 @@ +import { requireModule } from '@nocobase/utils'; +import { resolve } from 'path'; + +export const getAntdLocale = (lang) => { + const lng = lang.replace('-', '_'); + const files = [resolve(__dirname, `./../locale/antd/locale/${lng}`)]; + if (process.env.APP_ENV !== 'production') { + files.unshift(`antd/lib/locale/${lng}`); + files.push(`antd/lib/locale/en_US`); + } + for (const file of files) { + try { + require.resolve(file); + return requireModule(file); + } catch (error) { + continue; + } + } + return {}; +}; diff --git a/packages/plugins/client/src/server/cron.ts b/packages/plugins/client/src/server/cron.ts new file mode 100644 index 000000000..cf6fcd8f2 --- /dev/null +++ b/packages/plugins/client/src/server/cron.ts @@ -0,0 +1,19 @@ +import { requireModule } from '@nocobase/utils'; +import { resolve } from 'path'; + +export const getCronLocale = (lang: string) => { + const lng = lang.replace('-', '_'); + const files = [resolve(__dirname, `./../locale/cron/${lng}`)]; + if (process.env.APP_ENV !== 'production') { + files.push(`@nocobase/client/src/locale/cron/${lng}`, `@nocobase/client/lib/locale/cron/${lng}`); + } + for (const file of files) { + try { + require.resolve(file); + return requireModule(file); + } catch (error) { + continue; + } + } + return {}; +}; diff --git a/packages/core/server/src/locale/cronstrue.ts b/packages/plugins/client/src/server/cronstrue.ts similarity index 98% rename from packages/core/server/src/locale/cronstrue.ts rename to packages/plugins/client/src/server/cronstrue.ts index 75de7239d..63280ced9 100644 --- a/packages/core/server/src/locale/cronstrue.ts +++ b/packages/plugins/client/src/server/cronstrue.ts @@ -105,7 +105,9 @@ export const getCronstrueLocale = (lang) => { for (const method of methods) { try { items[method] = locale[method](); - } catch (error) {} + } catch (error) { + // empty + } } return items; }; diff --git a/packages/plugins/client/src/server/locale/en-US.json b/packages/plugins/client/src/server/locale/en-US.json deleted file mode 100644 index 43841f2d2..000000000 --- a/packages/plugins/client/src/server/locale/en-US.json +++ /dev/null @@ -1,1289 +0,0 @@ -{ - "lang": "en-US", - "moment": "en", - "resources": { - "client": { - "Display <1><0>10<1>20<2>50<3>100 items per page": "Display <1><0>10<1>20<2>50<3>100 items per page", - "Meet <1><0>All<1>Any conditions in the group": "Meet <1><0>All<1>Any conditions in the group", - "Open in<1><0>Modal<1>Drawer<2>Window": "Open in<1><0>Modal<1>Drawer<2>Window", - "{{count}} filter items": "{{count}} filter items", - "{{count}} more items": "{{count}} more items", - "Total {{count}} items": "Total {{count}} items", - "Today": "Today", - "Month": "Month", - "Week": "Week", - "This week": "This week", - "Next week": "Next week", - "This month": "This month", - "Next month": "Next month", - "This year": "This year", - "Next year": "Next year", - "Last week": "Last week", - "Last month": "Last month", - "Last year": "Last year", - "Last 7 days": "last 7 days", - "Last 30 days": "last 30 days", - "Last 90 days": "last 90 days", - "Next 7 days": "next 7 days", - "Next 30 days": "next 30 days", - "Next 90 days": "next 90 days", - "Work week": "Work week", - "Day": "Day", - "Agenda": "Agenda", - "Date": "Date", - "Time": "Time", - "Event": "Event", - "None": "None", - "Unconnected": "Unconnected", - "System settings": "System settings", - "System title": "System title", - "Logo": "Logo", - "Add menu item": "Add menu item", - "Page": "Page", - "Name": "Name", - "Icon": "Icon", - "Group": "Group", - "Link": "Link", - "Save conditions": "Save conditions", - "Edit menu item": "Edit menu item", - "Move to": "Move to", - "Insert left": "Insert left", - "Insert right": "Insert right", - "Insert inner": "Insert inner", - "Delete": "Delete", - "UI editor": "UI editor", - "Collection": "Collection", - "Collections & Fields": "Collections & Fields", - "Roles & Permissions": "Roles & Permissions", - "Edit profile": "Edit profile", - "Change password": "Change password", - "Old password": "Old password", - "New password": "New password", - "Switch role": "Switch role", - "Super admin": "Super admin", - "Language": "Language", - "Allow sign up": "Allow sign up", - "Enable SMS authentication": "Enable SMS authentication", - "Sign out": "Sign out", - "Cancel": "Cancel", - "Submit": "Submit", - "Close": "Close", - "Set the data scope": "Set the data scope", - "Data blocks": "Data blocks", - "Filter blocks": "Filter blocks", - "Table": "Table", - "Form": "Form", - "Collapse": "Collapse", - "Select data source": "Select data source", - "Calendar": "Calendar", - "Delete events": "Delete events", - "This event": "This event", - "This and following events": "This and following events", - "All events": "All events", - "Delete this event?": "Delete this event?", - "Delete Event": "Delete Event", - "Kanban": "Kanban", - "Select grouping field": "Select grouping field", - "Media": "Media", - "Markdown": "Markdown", - "Wysiwyg": "Wysiwyg", - "Chart blocks": "Chart blocks", - "Column chart": "Column chart", - "Bar chart": "Bar chart", - "Line chart": "Line chart", - "Pie chart": "Pie chart", - "Area chart": "Area chart", - "Other chart": "Other chart", - "Other blocks": "Other blocks", - "In configuration": "In configuration", - "Chart title": "Chart title", - "Chart type": "Chart type", - "Chart config": "Chart config", - "Templates": "Templates", - "Select template": "Select template", - "Action logs": "Action logs", - "Create template": "Create template", - "Edit markdown": "Edit markdown", - "Add block": "Add block", - "Add new": "Add new", - "Add record": "Add record", - "Custom field display name": "Custom field display name", - "Display fields": "Display collection fields", - "Edit record": "Edit record", - "Delete menu item": "Delete menu item", - "Add page": "Add page", - "Add group": "Add group", - "Add link": "Add link", - "Insert above": "Insert above", - "Insert below": "Insert below", - "Save": "Save", - "Delete block": "Delete block", - "Are you sure you want to delete it?": "Are you sure you want to delete it?", - "This is a demo text, **supports Markdown syntax**.": "This is a demo text, **supports Markdown syntax**.", - "Filter": "Filter", - "Connect data blocks": "Connect data blocks", - "Action type": "Action type", - "Actions": "Actions", - "Insert": "Insert", - "Update": "Update", - "View": "View", - "View record": "View record", - "Refresh": "Refresh", - "Data changes": "Data changes", - "Field name": "Field name", - "Before change": "Before change", - "After change": "After change", - "Delete record": "Delete record", - "Create collection": "Create collection", - "Collection display name": "Collection display name", - "Collection name": "Collection name", - "Inherits": "Inherits", - "Generate ID field automatically": "Generate ID field automatically", - "Store the creation user of each record": "Store the creation user of each record", - "Store the last update user of each record": "Store the last update user of each record", - "Store the creation time of each record": "Store the creation time of each record", - "Store the last update time of each record": "Store the last update time of each record", - "More options": "More options", - "Records can be sorted": "Records can be sorted", - "Collection template": "Collection template", - "Calendar collection": "Calendar collection", - "General collection": "General collection", - "Randomly generated and can be modified. Support letters, numbers and underscores, must start with an letter.": "Randomly generated and can be modified. Support letters, numbers and underscores, must start with an letter.", - "Storage type": "Storage type", - "Edit": "Edit", - "Edit collection": "Edit collection", - "Configure fields": "Configure fields", - "Configure columns": "Configure columns", - "Edit field": "Edit field", - "Override": "Override", - "Override field": "Override field", - "Configure fields of {{title}}": "Configure fields of {{title}}", - "Association fields filter": "Association fields filter", - "PK & FK fields": "PK & FK fields", - "Association fields": "Association fields", - "Choices fields": "Choices fields", - "System fields": "System fields", - "General fields": "General fields", - "Inherited fields": "Inherited fields", - "Parent collection fields": "Parent collection fields", - "Basic": "Basic", - "Single line text": "Single line text", - "Long text": "Long text", - "Phone": "Phone", - "Email": "Email", - "Number": "Number", - "Integer": "Integer", - "Percent": "Percent", - "Password": "Password", - "Advanced type": "Advanced", - "Formula": "Formula", - "Formula description": "Compute a value in each record based on other fields in the same record.", - "Choices": "Choices", - "Checkbox": "Checkbox", - "Single select": "Single select", - "Multiple select": "Multiple select", - "Radio group": "Radio group", - "Checkbox group": "Checkbox group", - "China region": "China region", - "Attachment": "Attachment", - "Date & Time": "Date & Time", - "Datetime": "Datetime", - "Relation": "Relation", - "Link to": "Link to", - "Link to description": "Used to create collection relationships quickly and compatible with most common scenarios. Suitable for non-developer use. When present as a field, it is a drop-down selection used to select records from the target collection. Once created, it will simultaneously generate the associated fields of the current collection in the target collection.", - "Sub-table": "Sub-table", - "System info": "System info", - "Created at": "Created at", - "Last updated at": "Last updated at", - "Created by": "Created by", - "Last updated by": "Last updated by", - "Add field": "Add field", - "Field display name": "Field display name", - "Field type": "Field type", - "Field interface": "Field interface", - "Date format": "Date format", - "Year/Month/Day": "Year/Month/Day", - "Year-Month-Day": "Year-Month-Day", - "Day/Month/Year": "Day/Month/Year", - "Show time": "Show time", - "Time format": "Time format", - "12 hour": "12 hour", - "24 hour": "24 hour", - "Relationship type": "Relationship type", - "Inverse relationship type": "Inverse relationship type", - "Source collection": "Source collection", - "Source key": "Source key", - "Target collection": "Target collection", - "Through collection": "Through collection", - "Target key": "Target key", - "Foreign key": "Foreign key", - "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": "Foreign key 1", - "Foreign key 2": "Foreign key 2", - "One to one description": "Used to create one-to-one relationships. For example, a user has a profile.", - "One to many description": "Used to create a one-to-many relationship. For example, a country will have many cities and a city can only be in one country. When present as a field, it is a sub-table that displays the records of the associated collection. When created, a Many-to-one field is automatically generated in the associated collection.", - "Many to one description": "Used to create many-to-one relationships. For example, a city can belong to only one country and a country can have many cities. When present as a field, it is a drop-down selection used to select record from the associated collection. Once created, a One-to-many field is automatically generated in the associated collection.", - "Many to many description": "Used to create many-to-many relationships. For example, a student will have many teachers and a teacher will have many students. When present as a field, it is a drop-down selection used to select records from the associated collection.", - "Generated automatically if left blank": "Generated automatically if left blank", - "Display association fields": "Display association fields", - "Field component": "Field component", - "Allow multiple": "Allow multiple", - "Quick upload": "Quick upload", - "Select file": "Select file", - "Subtable": "Subtable", - "Sub-form": "Sub-form", - "Record picker": "Record picker", - "Toggles the subfield mode": "Toggles the subfield mode", - "Selector mode": "Selector mode", - "Subtable mode": "Subtable mode", - "Subform mode": "Sub-form mode", - "Edit block title": "Edit block title", - "Block title": "Block title", - "Pattern": "Pattern", - "operater": "operater", - "Editable": "Editable", - "Readonly": "Readonly", - "Easy-reading": "Easy-reading", - "Add filter": "Add filter", - "Add filter group": "Add filter group", - "Comparision": "Comparision", - "is": "is", - "is not": "is not", - "contains": "contains", - "does not contain": "does not contain", - "starts with": "starts with", - "not starts with": "not starts with", - "ends with": "ends with", - "not ends with": "not ends with", - "is empty": "is empty", - "is not empty": "is not empty", - "Edit chart": "Edit chart", - "Add text": "Add text", - "Filterable fields": "Filterable fields", - "Edit button": "Edit button", - "Hide": "Hide", - "Enable actions": "Enable actions", - "Import": "Import", - "Export": "Export", - "Customize": "Customize", - "Function": "Function", - "Popup form": "Popup form", - "Flexible popup": "Flexible popup", - "Configure actions": "Configure actions", - "Display order number": "Display order number", - "Enable drag and drop sorting": "Enable drag and drop sorting", - "Triggered when the row is clicked": "Triggered when the row is clicked", - "Add tab": "Add tab", - "Disable tabs": "Disable tabs", - "Details": "Details", - "Edit tab": "Edit tab", - "Relationship blocks": "Relationship blocks", - "Select record": "Select record", - "Display name": "Display name", - "Select icon": "Select icon", - "Custom column name": "Custom column name", - "Edit description": "Edit description", - "Required": "Required", - "Unique": "Unique", - "Label field": "Label field", - "Default is the ID field": "Default is the ID field", - "Set default sorting rules": "Set default sorting rules", - "Set validation rules": "Set validation rules", - "Max length": "Max length", - "Min length": "Min length", - "Maximum": "Maximum", - "Minimum": "Minimum", - "Max length must greater than min length": "Max length must greater than min length", - "Min length must less than max length": "Min length must less than max length", - "Maximum must greater than minimum": "Maximum must greater than minimum", - "Minimum must less than maximum": "Minimum must less than maximum", - "Validation rule": "Validation rule", - "Add validation rule": "Add validation rule", - "Format": "Format", - "Regular expression": "Pattern", - "Error message": "Error message", - "Length": "Length", - "The field value cannot be greater than ": "The field value cannot be greater than ", - "The field value cannot be less than ": "The field value cannot be less than ", - "The field value is not an integer number": "The field value is not an integer number", - "Set default value": "Set default value", - "Default value": "Default value", - "is before": "is before", - "is after": "is after", - "is on or after": "is on or after", - "is on or before": "is on or before", - "is between": "is between", - "Upload": "Upload", - "Select level": "Select level", - "Province": "Province", - "City": "City", - "Area": "Area", - "Street": "Street", - "Village": "Village", - "Must select to the last level": "Must select to the last level", - "Move {{title}} to": "Move {{title}} to", - "Target position": "Target position", - "After": "After", - "Before": "Before", - "Add {{type}} before \"{{title}}\"": "Add {{type}} before \"{{title}}\"", - "Add {{type}} after \"{{title}}\"": "Add {{type}} after \"{{title}}\"", - "Add {{type}} in \"{{title}}\"": "Add {{type}} in \"{{title}}\"", - "Original name": "Original name", - "Custom name": "Custom name", - "Custom Title": "Custom Title", - "Options": "Options", - "Option value": "Option value", - "Option label": "Option label", - "Color": "Color", - "Add option": "Add option", - "Related collection": "Related collection", - "Allow linking to multiple records": "Allow linking to multiple records", - "Allow uploading multiple files": "Allow uploading multiple files", - "Configure calendar": "Configure calendar", - "Title field": "Title field", - "Custom title": "Custom title", - "Show lunar": "Show lunar", - "Start date field": "Start date field", - "End date field": "End date field", - "Navigate": "Navigate", - "Title": "Title", - "Description": "Description", - "Select view": "Select view", - "Reset": "Reset", - "Importable fields": "Importable fields", - "Exportable fields": "Exportable fields", - "Saved successfully": "Saved successfully", - "Nickname": "Nickname", - "Sign in": "Sign in", - "Sign in via account": "Sign in via account", - "Sign in via phone": "Sign in via phone", - "Create an account": "Create an account", - "Sign up": "Sign up", - "Confirm password": "Confirm password", - "Log in with an existing account": "Log in with an existing account", - "Signed up successfully. It will jump to the login page.": "Signed up successfully. It will jump to the login page.", - "Password mismatch": "Password mismatch", - "Users": "Users", - "Verification code": "Verification code", - "Send code": "Send code", - "Retry after {{count}} seconds": "Retry after {{count}} seconds", - "Roles": "Roles", - "Add role": "Add role", - "Role name": "Role name", - "Configure": "Configure", - "Configure permissions": "Configure permissions", - "Edit role": "Edit role", - "Action permissions": "Action permissions", - "Menu permissions": "Menu permissions", - "Menu item name": "Menu item name", - "Allow access": "Allow access", - "Action name": "Action name", - "Allow action": "Allow action", - "Action scope": "Action scope", - "Operate on new data": "Operate on new data", - "Operate on existing data": "Operate on existing data", - "Yes": "Yes", - "No": "No", - "Red": "Red", - "Magenta": "Magenta", - "Volcano": "Volcano", - "Orange": "Orange", - "Gold": "Gold", - "Lime": "Lime", - "Green": "Green", - "Cyan": "Cyan", - "Blue": "Blue", - "Geek blue": "Geek blue", - "Purple": "Purple", - "Default": "Default", - "Add card": "Add card", - "edit title": "edit title", - "Turn pages": "Turn pages", - "Others": "Others", - "Save as template": "Save as template", - "Save as block template": "Save as block template", - "Block templates": "Block templates", - "Convert reference to duplicate": "Convert reference to duplicate", - "Template name": "Template name", - "Block type": "Block type", - "No blocks to connect": "No blocks to connect", - "Action column": "Action column", - "Records per page": "Records per page", - "(Fields only)": "(Fields only)", - "Button title": "Button title", - "Button icon": "Button icon", - "Submitted successfully": "Submitted successfully", - "Operation succeeded": "Operation succeeded", - "Operation failed": "Operation failed", - "Open mode": "Open mode", - "Popup size": "Popup size", - "Small": "Small", - "Middle": "Middle", - "Large": "Large", - "Menu item title": "Menu item title", - "Menu item icon": "Menu item icon", - "Target": "Target", - "Position": "Position", - "Insert before": "Insert before", - "Insert after": "Insert after", - "UI Editor": "UI Editor", - "ASC": "ASC", - "DESC": "DESC", - "Add sort field": "Add sort field", - "ID": "ID", - "Identifier for program usage. Support letters, numbers and underscores, must start with an letter.": "Identifier for program usage. Support letters, numbers and underscores, must start with an letter.", - "Drawer": "Drawer", - "Dialog": "Dialog", - "Delete action": "Delete action", - "Custom column title": "Custom column title", - "Original title: ": "Original title: ", - "Delete table column": "Delete table column", - "Skip required validation": "Skip required validation", - "Form values": "Form values", - "Fields values": "Fields values", - "When submitting the following fields, the saved values are": "When submitting the following fields, the saved values are", - "After successful submission": "After successful submission", - "Then": "Then", - "Stay on current page": "Stay on current page", - "Redirect to": "Redirect to", - "Save action": "Save action", - "Exists": "Exists", - "Filename": "Filename", - "Add condition": "Add condition", - "Add condition group": "Add condition group", - "exists": "exists", - "not exists": "not exists", - "=": "=", - "≠": "≠", - ">": ">", - "≥": "≥", - "<": "<", - "≤": "≤", - "Role UID": "Role UID", - "Precision": "Precision", - "Formula mode": "Formula mode", - "Expression": "Expression", - "Input +, -, *, /, ( ) to calculate, input @ to open field variables.": "Input +, -, *, /, ( ) to calculate, input @ to open field variables.", - "Formula error.": "Formula error.", - "Accept": "Accept", - "Rich Text": "Rich Text", - "Junction collection": "Junction collection", - "Leave it blank, unless you need a custom intermediate table": "Leave it blank, unless you need a custom intermediate table", - "Fields": "Fields", - "Edit field title": "Edit field title", - "Field title": "Field title", - "Original field title: ": "Original field title: ", - "Edit tooltip": "Edit tooltip", - "Delete field": "Delete field", - "Select collection": "Select collection", - "Blank block": "Blank block", - "Duplicate template": "Duplicate template", - "Reference template": "Reference template", - "Create calendar block": "Create calendar block", - "Create kanban block": "Create kanban block", - "Grouping field": "Grouping field", - "Single select and radio fields can be used as the grouping field": "Single select and radio fields can be used as the grouping field", - "Tab name": "Tab name", - "Current record blocks": "Current record blocks", - "Popup message": "Popup message", - "Delete role": "Delete role", - "Role display name": "Role display name", - "Default role": "Default role", - "All collections use general action permissions by default; permission configured individually will override the default one.": "All collections use general action permissions by default; permission configured individually will override the default one.", - "Allows configuration of the whole system, including UI, collections, permissions, etc.": "Allows configuration of the whole system, including UI, collections, permissions, etc.", - "New menu items are allowed to be accessed by default.": "New menu items are allowed to be accessed by default.", - "Global permissions": "Global permissions", - "General permissions": "General permissions", - "Global action permissions": "Global action permissions", - "General action permissions": "General action permissions", - "Plugin settings permissions": "Plugin settings permissions", - "Allow to desgin pages": "Allow to desgin pages", - "Allow to manage plugins": "Allow to manage plugins", - "Allow to configure plugins": "Allow to configure plugins", - "Allows to configure interface": "Allows to configure interface", - "Allows to install, activate, disable plugins": "Allows to install, activate, disable plugins", - "Allows to configure plugins": "Allows to configure plugins", - "Action display name": "Action display name", - "Allow": "Allow", - "Data scope": "Data scope", - "Action on new records": "Action on new records", - "Action on existing records": "Action on existing records", - "All records": "All records", - "Own records": "Own records", - "Permission policy": "Permission policy", - "Individual": "Individual", - "General": "General", - "Accessible": "Accessible", - "Configure permission": "Configure permission", - "Action permission": "Action permission", - "Field permission": "Field permission", - "Scope name": "Scope name", - "File storages": "File storages", - "Storage display name": "Storage display name", - "Storage name": "Storage name", - "Default storage": "Default storage", - "Add storage": "Add storage", - "Edit storage": "Edit storage", - "Storage base URL": "Storage base URL", - "Destination": "Destination", - "Use the built-in static file server": "Use the built-in static file server", - "Local storage": "Local storage", - "Aliyun OSS": "Aliyun OSS", - "Amazon S3": "Amazon S3", - "Tencent COS": "Tencent COS", - "Region": "Region", - "Bucket": "Bucket", - "Path": "Path", - "Unsaved changes": "Unsaved changes", - "Are you sure you don't want to save?": "Are you sure you don't want to save?", - "Dragging": "Dragging", - "Popup": "Popup", - "Trigger workflow": "Trigger workflow", - "Request API": "Request API", - "Assign field values": "Assign field values", - "Constant value": "Constant value", - "Dynamic value": "Dynamic value", - "Current user": "Current user", - "Current record": "Current record", - "Current time": "Current time", - "System variables": "System variables", - "Date variables": "Date variables", - "Popup close method": "Popup close method", - "Automatic close": "Automatic close", - "Manually close": "Manually close", - "After successful update": "After successful update", - "Save record": "Save record", - "Updated successfully": "Updated successfully", - "After successful save": "After successful save", - "After clicking the custom button, the following field values will be assigned according to the following form.": "After clicking the custom button, the following field values will be assigned according to the following form.", - "After clicking the custom button, the following fields of the current record will be saved according to the following form.": "After clicking the custom button, the following fields of the current record will be saved according to the following form.", - "Button background color": "Button background color", - "Highlight": "Highlight", - "Danger red": "Danger red", - "Custom request": "Custom request", - "Request settings": "Request settings", - "Request URL": "Request URL", - "Request method": "Request method", - "Request query parameters": "Request query parameters", - "Request headers": "Request headers", - "Request body": "Request body", - "Request success": "Request success", - "Invalid JSON format": "Invalid JSON format", - "After successful request": "After successful request", - "Add exportable field": "Add exportable field", - "Audit logs": "Audit logs", - "Record ID": "Record ID", - "User": "User", - "Field": "Field", - "Select": "Select", - "Select field": "Select field", - "Field value changes": "Field value changes", - "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": "Use the same time zone (GMT) for all users", - "Province/city/area name": "Province/city/area name", - "Enabled languages": "Enabled languages", - "View all plugins": "View all plugins", - "Print": "Print", - "Done": "Done", - "Sign up successfully, and automatically jump to the sign in page": "Sign up successfully, and automatically jump to the sign in page", - "File manager": "File manager", - "ACL": "ACL", - "Collection manager": "Collection manager", - "Plugin manager": "Plugin manager", - "Local": "Local", - "Built-in": "Built-in", - "Marketplace": "Marketplace", - "Coming soon...": "Coming soon...", - "All plugin settings": "All plugin settings", - "Bookmark": "Bookmark", - "Manage all settings": "Manage all settings", - "Create inverse field in the target collection": "Create inverse field in the target collection", - "Inverse field name": "Inverse field name", - "Inverse field display name": "Inverse field display name", - "Bulk update": "Bulk update", - "After successful bulk update": "After successful bulk update", - "Bulk edit": "Bulk edit", - "Data will be updated": "Data will be updated", - "Selected": "Selected", - "All": "All", - "Update selected data?": "Update selected data?", - "Update all data?": "Update all data?", - "Remains the same": "Remains the same", - "Changed to": "Changed to", - "Clear": "Clear", - "Add attach": "Add attach", - "Please select the records to be updated": "Please select the records to be updated", - "Selector": "Selector", - "Inner": "Inner", - "Search and select collection": "Search and select collection", - "Please fill in the iframe URL": "Please fill in the iframe URL", - "Fix block": "Fix block", - "Plugin name": "Plugin name", - "Plugin tab name": "Plugin tab name", - "AutoGenId": "Auto-generated ID field", - "CreatedBy": "Recording a row's created user", - "UpdatedBy": "Recording a row's last updated user", - "CreatedAt": "Recording a row's created time ", - "UpdatedAt": "Recording a row's last updated user" - }, - "error-handler": { - "unique violation": "{{field}} must be unique", - "notNull violation": "notNull violation", - "Validation error": "{{field}} validation error", - "notNull Violation": "{{field}} cannot be null" - }, - "collection-manager": {}, - "ui-schema-storage": {}, - "ui-routes-storage": {}, - "file-manager": {}, - "system-settings": {}, - "sequence-field": { - "Sequence": "Sequence", - "Sequence rules": "Sequence rules", - "Add rule": "Add rule", - "Inputable": "Inputable", - "Match rules": "Match rules", - "Type": "Type", - "Autoincrement": "Autoincrement", - "Fixed text": "Fixed text", - "Text content": "Text content", - "Rule content": "Rule content", - "{{value}} Digits": "{{value}} Digits", - "Digits": "Digits", - "Start from": "Start from", - "Starts from {{value}}": "Starts from {{value}}", - "Reset cycle": "Reset cycle", - "No reset": "No reset", - "Daily": "Daily", - "Every Monday": "Every Monday", - "Monthly": "Monthly", - "Yearly": "Yearly", - "Operations": "Operations", - "Customize": "Customize" - }, - "verification": { - "Verification": "Verification", - "Verification providers": "Verification providers", - "Provider type": "Provider type", - "Aliyun SMS": "Aliyun SMS", - "Access Key ID": "Access Key ID", - "Access Key Secret": "Access Key Secret", - "Endpoint": "Endpoint", - "Sign": "Sign", - "Template code": "Template code", - "Verification send failed, please try later or contact to administrator": "Verification send failed, please try later or contact to administrator", - "Not a valid cellphone number, please re-enter": "Not a valid cellphone number, please re-enter", - "Please don't retry in {{time}} seconds": "Please don't retry in {{time}} seconds", - "You are trying so frequently, please slow down": "You are trying so frequently, please slow down", - "Verification code is invalid": "Verification code is invalid" - }, - "users": { - "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" - }, - "acl": {}, - "china-region": {}, - "workflow": { - "Workflow": "Workflow", - "Execution history": "Execution history", - "Executed": "Executed", - "Trigger type": "Trigger type", - "Status": "Status", - "On": "On", - "Off": "Off", - "Version": "Version", - "Copy to new version": "Copy to new version", - "Duplicate": "Duplicate", - "Loading": "Loading", - "Load failed": "Load failed", - "Trigger": "Trigger", - "Trigger variables": "Trigger variables", - "Trigger data": "Trigger data", - "Trigger time": "Trigger time", - "Triggered at": "Triggered at", - "Collection event": "Collection event", - "Trigger on": "Trigger on", - "After record added": "After record added", - "After record updated": "After record updated", - "After record added or updated": "After record added or updated", - "After record deleted": "After record deleted", - "Changed fields": "Changed fields", - "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.": "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.", - "Only triggers when match conditions": "Only triggers when match conditions", - "Schedule event": "Schedule event", - "Trigger mode": "Trigger mode", - "Based on certain date": "Based on certain date", - "Based on date field of collection": "Based on date field of collection", - "Starts on": "Starts on", - "Ends on": "Ends on", - "No end": "No end", - "Exactly at": "Exactly at", - "Repeat mode": "Repeat mode", - "Repeat limit": "Repeat limit", - "No limit": "No limit", - "Seconds": "Seconds", - "Minutes": "Minutes", - "Hours": "Hours", - "Days": "Days", - "Weeks": "Weeks", - "Months": "Months", - "No repeat": "No repeat", - "Every": "Every", - "By minute": "By minute", - "By hour": "By hour", - "By day": "By day", - "By week": "By week", - "By month": "By month", - "By field": "By field", - "By custom date": "By custom date", - "Advanced": "Advanced", - "End": "End", - "Node result": "Node result", - "Constant": "Constant", - "Null": "Null", - "Boolean": "Boolean", - "String": "String", - "Calculator": "Calculator", - "Arithmetic calculation": "Arithmetic calculation", - "String operation": "String operation", - "Executed at": "Executed at", - "Queueing": "Queueing", - "On going": "On going", - "Succeeded": "Succeeded", - "Failed": "Failed", - "Pending": "Pending", - "Canceled": "Canceled", - "This node contains branches, deleting will also be preformed to them, are you sure?": "This node contains branches, deleting will also be preformed to them, are you sure?", - "Control": "Control", - "Collection operations": "Collection operations", - "Extended types": "Extended types", - "Node type": "Node type", - "Calculation": "Calculation", - "Configure calculation": "Configure calculation", - "Calculation result": "Calculation result", - "True": "True", - "False": "False", - "concat": "concat", - "Condition": "Condition", - "Mode": "Mode", - "Continue when \"Yes\"": "Continue when \"Yes\"", - "Branch into \"Yes\" and \"No\"": "Branch into \"Yes\" and \"No\"", - "Conditions": "Conditions", - "Parallel branch": "Parallel branch", - "Add branch": "Add branch", - "All succeeded": "All succeeded", - "Any succeeded": "Any succeeded", - "Any succeeded or failed": "Any succeeded or failed", - "Continue after all branches succeeded": "Continue after all branches succeeded", - "Continue after any branch succeeded": "Continue after any branch succeeded", - "Continue after any branch succeeded, or exit after any branch failed": "Continue after any branch succeeded, or exit after any branch failed", - "Delay": "Delay", - "Duration": "Duration", - "End Status": "End Status", - "Select status": "Select status", - "Succeed and continue": "Succeed and continue", - "Fail and exit": "Fail and exit", - "Create record": "Create record", - "Update record": "Update record", - "Query record": "Query record", - "Multiple records": "Multiple records", - "Please select collection first": "Please select collection first", - "Only update records matching conditions": "Only update records matching 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.": "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.", - "Trigger in executed workflow cannot be modified": "Trigger in executed workflow cannot be modified", - "Node in executed workflow cannot be modified": "Node in executed workflow cannot be modified", - "Can not delete": "Can not delete", - "The result of this node has been referenced by other nodes ({{nodes}}), please remove the usage before deleting.": "The result of this node has been referenced by other nodes ({{nodes}}), please remove the usage before deleting.", - "HTTP request": "HTTP request", - "URL": "URL", - "You can use the above available variables in URL.": "You can use the above available variables in URL.", - "Request headers": "Request headers", - "Name(e.g. Content-Type)": "Name(e.g. Content-Type)", - "Value(e.g. Application/json)": "Value(e.g. Application/json)", - "Add request header": "Add request header", - "HTTP method": "HTTP method", - "Request data": "Request data", - "Input request data": "Input request data", - "You can use the above available variables in request data.": "You can use the above available variables in request data.", - "Copy success!": "Copy success!", - "Copy variable output template statement": "Copy variable output template statement", - "Default headers is Content-Type: application/json": "Default headers is Content-Type: application/json", - "Ignore fail request and continue workflow": "Ignore fail request and continue workflow", - "Syntax see": "Syntax see", - "Show available variable tool": "Show available variable tool" - }, - "export": {}, - "import": { - "Only one file is allowed to be uploaded": "Only one file is allowed to be uploaded", - "File size cannot exceed 10M": "File size cannot exceed 10M", - "Please upload the file of Excel": "Please upload the file of Excel", - "Import Data": "Import Data", - "Start import": "Start import", - "Import explain": "Guide", - "Download template": "Download template", - "Step 1: Download template": "Step 1: Download template", - "Step 2: Upload Excel": "Step 2: Upload Excel", - "Download tip": "- Download the template and fill in the data according to the format \r\n - Import only the first worksheet \r\n - Support single import of up to 10,000 rows of data \r\n - Do not change the header of the template to prevent import failure", - "Upload placeholder": "Drag and drop the file here or click to upload, file size should not exceed 10M", - "Excel data importing": "Excel data importing", - "Import done, total success have {{successCount}} , total failure have {{failureCount}}": "Import is complete, with a total of {{successCount}} successful and {{failureCount}} failed", - "To download the failure data": "To download the failure data", - "Add importable field": "Add importable field", - "Done": "Done", - "Yes": "Yes", - "No": "No", - "Field {{fieldName}} does not exist": "Field {{fieldName}} does not exist", - "can not find value": "can not find value", - "password is empty": "password is empty", - "Incorrect time format": "Incorrect time format", - "Incorrect date format": "Incorrect date format", - "Incorrect email format": "Incorrect email format", - "Illegal percentage format": "Illegal percentage format" - }, - "audit-logs": {}, - "iframe-block": {}, - "graph-collection-manager": { - "Graph Collection": "Graph Collection", - "Collection List": "Collection List", - "Full Screen": "Full Screen", - "Collection Search": "Collection Search", - "Create Collection": "Create Collection", - "All Fields": "All Fields", - "Association Fields": "Association Fields", - "All relationships": "All relationships", - "Entity relationship only": "Entity relationship only", - "Inheritance relationship only": "Inheritance relationship only", - "Graphical interface": "Graphical interface", - "Auto layout": "Auto layout", - "Selection": "Selection" - }, - "sample-hello": {}, - "oidc": { - "Issuer": "Issuer", - "Enable": "Enable", - "Actions": "Actions", - "Delete": "Delete", - "Edit": "Edit", - "Button title": "Button title", - "OIDC manager": "OIDC manager", - "OIDC Providers": "OIDC Providers", - "Provider name": "Name", - "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": "Add", - "Edit provider": "Edit", - "Delete provider": "Delete", - "Sign in button name, which will be displayed on the sign in page": "Sign in button name, which will be displayed on the sign in page" - }, - "saml": { - "Edit": "Edit", - "Delete": "Delete", - "Cancel": "Cancel", - "Submit": "Submit", - "Actions": "Actions", - "Title": "Title", - "Enable": "Enable", - "Button title": "Button title", - "SAML manager": "SAML manager", - "SAML Providers": "SAML Providers", - "Redirect url": "Redirect url", - "SP entity id": "SP entity id", - "Add provider": "Add", - "Edit provider": "Edit", - "Client id": "Client id", - "Entity id or issuer": "Entity id or issuer", - "Login Url": "Login Url", - "Public cert": "Public cert", - "Delete provider": "Delete", - "Are you sure you want to delete it?": "Are you sure you want to delete it?", - "Sign in button name, which will be displayed on the sign in page": "Sign in button name, which will be displayed on the sign in page" - }, - "map": { - "Map-based geometry": "Map-based geometry", - "Map type": "Map type", - "Point": "Point", - "Line": "Line", - "Circle": "Circle", - "Polygon": "Polygon", - "Access key": "Access key", - "securityJsCode or serviceHost": "securityJsCode or serviceHost", - "AMap": "AMap", - "Google Maps": "Google Maps", - "Clear": "Clear", - "Click to select the starting point and double-click to end the drawing": "Click to select the starting point and double-click to end the drawing", - "Clear the canvas": "Clear the canvas", - "Are you sure to clear the canvas?": "Are you sure to clear the canvas?", - "Confirm": "Confirm", - "Cancel": "Cancel", - "Enter keywords to search": "Enter keywords to search", - "The AccessKey is incorrect, please check it": "The AccessKey is incorrect, please check it", - "Please configure the AMap securityCode or serviceHost correctly": "Please configure the AMap securityCode or serviceHost correctly", - "Map Manager": "Map Manager", - "Configuration": "Configuration", - "Saved successfully": "Saved successfully", - "Saved failed": "Saved failed", - "Edit": "Edit", - "Save": "Save", - "Please configure the AccessKey and SecurityJsCode first": "Please configure the AccessKey and SecurityJsCode first", - "Go to the configuration page": "Go to the configuration page", - "Zoom": "Zoom", - "Set default zoom level": "Set default zoom level", - "The default zoom level of the map": "The default zoom level of the map", - "Edit field title": "Edit field title", - "Field title": "Field title", - "Edit tooltip": "Edit tooltip", - "Delete field": "Delete field", - "Required": "Required", - "Pattern": "Pattern", - "operater": "operater", - "Editable": "Editable", - "Readonly": "Readonly", - "Easy-reading": "Easy-reading", - "Edit description": "Edit description" - }, - "snapshot-field": { - "Detail": "Detail", - "Snapshot": "Snapshot", - "Add block": "Add block", - "Snapshot to description": "It is used to create a snapshot of the table, save the current data of the pointed table, and save it only when the record to which it belongs is created, and will not be updated later.", - "View record": "View record", - "Allow linking to multiple records": "Allow linking to multiple records", - "Target collection": "Target collection" - }, - "duplicator": { - "Select Import data": "Select Import data", - "Select Import Plugins": "Select Import Plugins", - "Select User Collections": "Select User Collections", - "Basic Data": "Basic Data", - "Optional Data": "Optional Data", - "User Data": "User Data" - }, - "math-formula-field": {}, - "excel-formula-field": {} - }, - "antd": { - "locale": "en", - "Pagination": { - "items_per_page": "/ page", - "jump_to": "Go to", - "jump_to_confirm": "confirm", - "page": "Page", - "prev_page": "Previous Page", - "next_page": "Next Page", - "prev_5": "Previous 5 Pages", - "next_5": "Next 5 Pages", - "prev_3": "Previous 3 Pages", - "next_3": "Next 3 Pages", - "page_size": "Page Size" - }, - "DatePicker": { - "lang": { - "placeholder": "Select date", - "yearPlaceholder": "Select year", - "quarterPlaceholder": "Select quarter", - "monthPlaceholder": "Select month", - "weekPlaceholder": "Select week", - "rangePlaceholder": ["Start date", "End date"], - "rangeYearPlaceholder": ["Start year", "End year"], - "rangeQuarterPlaceholder": ["Start quarter", "End quarter"], - "rangeMonthPlaceholder": ["Start month", "End month"], - "rangeWeekPlaceholder": ["Start week", "End week"], - "locale": "en_US", - "today": "Today", - "now": "Now", - "backToToday": "Back to today", - "ok": "OK", - "clear": "Clear", - "month": "Month", - "year": "Year", - "timeSelect": "select time", - "dateSelect": "select date", - "weekSelect": "Choose a week", - "monthSelect": "Choose a month", - "yearSelect": "Choose a year", - "decadeSelect": "Choose a decade", - "yearFormat": "YYYY", - "dateFormat": "M/D/YYYY", - "dayFormat": "D", - "dateTimeFormat": "M/D/YYYY HH:mm:ss", - "monthBeforeYear": true, - "previousMonth": "Previous month (PageUp)", - "nextMonth": "Next month (PageDown)", - "previousYear": "Last year (Control + left)", - "nextYear": "Next year (Control + right)", - "previousDecade": "Last decade", - "nextDecade": "Next decade", - "previousCentury": "Last century", - "nextCentury": "Next century" - }, - "timePickerLocale": { "placeholder": "Select time", "rangePlaceholder": ["Start time", "End time"] } - }, - "TimePicker": { "placeholder": "Select time", "rangePlaceholder": ["Start time", "End time"] }, - "Calendar": { - "lang": { - "placeholder": "Select date", - "yearPlaceholder": "Select year", - "quarterPlaceholder": "Select quarter", - "monthPlaceholder": "Select month", - "weekPlaceholder": "Select week", - "rangePlaceholder": ["Start date", "End date"], - "rangeYearPlaceholder": ["Start year", "End year"], - "rangeQuarterPlaceholder": ["Start quarter", "End quarter"], - "rangeMonthPlaceholder": ["Start month", "End month"], - "rangeWeekPlaceholder": ["Start week", "End week"], - "locale": "en_US", - "today": "Today", - "now": "Now", - "backToToday": "Back to today", - "ok": "OK", - "clear": "Clear", - "month": "Month", - "year": "Year", - "timeSelect": "select time", - "dateSelect": "select date", - "weekSelect": "Choose a week", - "monthSelect": "Choose a month", - "yearSelect": "Choose a year", - "decadeSelect": "Choose a decade", - "yearFormat": "YYYY", - "dateFormat": "M/D/YYYY", - "dayFormat": "D", - "dateTimeFormat": "M/D/YYYY HH:mm:ss", - "monthBeforeYear": true, - "previousMonth": "Previous month (PageUp)", - "nextMonth": "Next month (PageDown)", - "previousYear": "Last year (Control + left)", - "nextYear": "Next year (Control + right)", - "previousDecade": "Last decade", - "nextDecade": "Next decade", - "previousCentury": "Last century", - "nextCentury": "Next century" - }, - "timePickerLocale": { "placeholder": "Select time", "rangePlaceholder": ["Start time", "End time"] } - }, - "global": { "placeholder": "Please select" }, - "Table": { - "filterTitle": "Filter menu", - "filterConfirm": "OK", - "filterReset": "Reset", - "filterEmptyText": "No filters", - "filterCheckall": "Select all items", - "filterSearchPlaceholder": "Search in filters", - "emptyText": "No data", - "selectAll": "Select current page", - "selectInvert": "Invert current page", - "selectNone": "Clear all data", - "selectionAll": "Select all data", - "sortTitle": "Sort", - "expand": "Expand row", - "collapse": "Collapse row", - "triggerDesc": "Click to sort descending", - "triggerAsc": "Click to sort ascending", - "cancelSort": "Click to cancel sorting" - }, - "Modal": { "okText": "OK", "cancelText": "Cancel", "justOkText": "OK" }, - "Popconfirm": { "okText": "OK", "cancelText": "Cancel" }, - "Transfer": { - "titles": ["", ""], - "searchPlaceholder": "Search here", - "itemUnit": "item", - "itemsUnit": "items", - "remove": "Remove", - "selectCurrent": "Select current page", - "removeCurrent": "Remove current page", - "selectAll": "Select all data", - "removeAll": "Remove all data", - "selectInvert": "Invert current page" - }, - "Upload": { - "uploading": "Uploading...", - "removeFile": "Remove file", - "uploadError": "Upload error", - "previewFile": "Preview file", - "downloadFile": "Download file" - }, - "Empty": { "description": "No Data" }, - "Icon": { "icon": "icon" }, - "Text": { "edit": "Edit", "copy": "Copy", "copied": "Copied", "expand": "Expand" }, - "PageHeader": { "back": "Back" }, - "Form": { - "optional": "(optional)", - "defaultValidateMessages": { - "default": "Field validation error for ${label}", - "required": "Please enter ${label}", - "enum": "${label} must be one of [${enum}]", - "whitespace": "${label} cannot be a blank character", - "date": { - "format": "${label} date format is invalid", - "parse": "${label} cannot be converted to a date", - "invalid": "${label} is an invalid date" - }, - "types": { - "string": "${label} is not a valid ${type}", - "method": "${label} is not a valid ${type}", - "array": "${label} is not a valid ${type}", - "object": "${label} is not a valid ${type}", - "number": "${label} is not a valid ${type}", - "date": "${label} is not a valid ${type}", - "boolean": "${label} is not a valid ${type}", - "integer": "${label} is not a valid ${type}", - "float": "${label} is not a valid ${type}", - "regexp": "${label} is not a valid ${type}", - "email": "${label} is not a valid ${type}", - "url": "${label} is not a valid ${type}", - "hex": "${label} is not a valid ${type}" - }, - "string": { - "len": "${label} must be ${len} characters", - "min": "${label} must be at least ${min} characters", - "max": "${label} must be up to ${max} characters", - "range": "${label} must be between ${min}-${max} characters" - }, - "number": { - "len": "${label} must be equal to ${len}", - "min": "${label} must be minimum ${min}", - "max": "${label} must be maximum ${max}", - "range": "${label} must be between ${min}-${max}" - }, - "array": { - "len": "Must be ${len} ${label}", - "min": "At least ${min} ${label}", - "max": "At most ${max} ${label}", - "range": "The amount of ${label} must be between ${min}-${max}" - }, - "pattern": { "mismatch": "${label} does not match the pattern ${pattern}" } - } - }, - "Image": { "preview": "Preview" } - }, - "cronstrue": { - "atX0SecondsPastTheMinuteGt20": null, - "atX0MinutesPastTheHourGt20": null, - "commaMonthX0ThroughMonthX1": null, - "commaYearX0ThroughYearX1": null, - "use24HourTimeFormatByDefault": false, - "anErrorOccuredWhenGeneratingTheExpressionD": "An error occured when generating the expression description. Check the cron expression syntax.", - "everyMinute": "every minute", - "everyHour": "every hour", - "atSpace": "At ", - "everyMinuteBetweenX0AndX1": "Every minute between %s and %s", - "at": "At", - "spaceAnd": " and", - "everySecond": "every second", - "everyX0Seconds": "every %s seconds", - "secondsX0ThroughX1PastTheMinute": "seconds %s through %s past the minute", - "atX0SecondsPastTheMinute": "at %s seconds past the minute", - "everyX0Minutes": "every %s minutes", - "minutesX0ThroughX1PastTheHour": "minutes %s through %s past the hour", - "atX0MinutesPastTheHour": "at %s minutes past the hour", - "everyX0Hours": "every %s hours", - "betweenX0AndX1": "between %s and %s", - "atX0": "at %s", - "commaEveryDay": ", every day", - "commaEveryX0DaysOfTheWeek": ", every %s days of the week", - "commaX0ThroughX1": ", %s through %s", - "commaAndX0ThroughX1": ", %s through %s", - "first": "first", - "second": "second", - "third": "third", - "fourth": "fourth", - "fifth": "fifth", - "commaOnThe": ", on the ", - "spaceX0OfTheMonth": " %s of the month", - "lastDay": "the last day", - "commaOnTheLastX0OfTheMonth": ", on the last %s of the month", - "commaOnlyOnX0": ", only on %s", - "commaAndOnX0": ", and on %s", - "commaEveryX0Months": ", every %s months", - "commaOnlyInX0": ", only in %s", - "commaOnTheLastDayOfTheMonth": ", on the last day of the month", - "commaOnTheLastWeekdayOfTheMonth": ", on the last weekday of the month", - "commaDaysBeforeTheLastDayOfTheMonth": ", %s days before the last day of the month", - "firstWeekday": "first weekday", - "weekdayNearestDayX0": "weekday nearest day %s", - "commaOnTheX0OfTheMonth": ", on the %s of the month", - "commaEveryX0Days": ", every %s days", - "commaBetweenDayX0AndX1OfTheMonth": ", between day %s and %s of the month", - "commaOnDayX0OfTheMonth": ", on day %s of the month", - "commaEveryHour": ", every hour", - "commaEveryX0Years": ", every %s years", - "commaStartingX0": ", starting %s", - "daysOfTheWeek": ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], - "monthsOfTheYear": [ - "January", - "February", - "March", - "April", - "May", - "June", - "July", - "August", - "September", - "October", - "November", - "December" - ] - }, - "cron": { - "everyText": "every", - "emptyMonths": "every month", - "emptyMonthDays": "every day of the month", - "emptyMonthDaysShort": "day of the month", - "emptyWeekDays": "every day of the week", - "emptyWeekDaysShort": "day of the week", - "emptyHours": "every hour", - "emptyMinutes": "every minute", - "emptyMinutesForHourPeriod": "every", - "yearOption": "year", - "monthOption": "month", - "weekOption": "week", - "dayOption": "day", - "hourOption": "hour", - "minuteOption": "minute", - "rebootOption": "reboot", - "prefixPeriod": "Every", - "prefixMonths": "in", - "prefixMonthDays": "on", - "prefixWeekDays": "on", - "prefixWeekDaysForMonthAndYearPeriod": "and", - "prefixHours": "at", - "prefixMinutes": ":", - "prefixMinutesForHourPeriod": "at", - "suffixMinutesForHourPeriod": "minute(s)", - "errorInvalidCron": "Invalid cron expression", - "clearButtonText": "Clear", - "weekDays": ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], - "months": [ - "January", - "February", - "March", - "April", - "May", - "June", - "July", - "August", - "September", - "October", - "November", - "December" - ], - "altWeekDays": ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"], - "altMonths": ["JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC"] - } -} diff --git a/packages/plugins/client/src/server/locale/es-ES.json b/packages/plugins/client/src/server/locale/es-ES.json deleted file mode 100644 index e7b7701ec..000000000 --- a/packages/plugins/client/src/server/locale/es-ES.json +++ /dev/null @@ -1,1462 +0,0 @@ -{ - "lang": "es-ES", - "moment": "es", - "resources": { - "client": { - "Display <1><0>10<1>20<2>50<3>100 items per page": "Mostrar <1><0>10<1>20<2>50<3>100 elementos por página", - "Meet <1><0>All<1>Any conditions in the group": "Cumplir <1><0>Todas<1>Cualquier condiciones del grupo", - "Open in<1><0>Modal<1>Drawer<2>Window": "Abrir en<1><0>Modal<1>Cajón<2>Ventana", - "{{count}} filter items": "{{count}} elementos de filtro", - "{{count}} more items": "{{count}} más elementos", - "Total {{count}} items": "Total {{count}} elementos", - "Today": "Hoy", - "Yesterday": "Ayer", - "Tomorrow": "Mañana", - "Month": "Mes", - "Week": "Semana", - "This week": "Esta semana", - "This month": "Este mes", - "This year": "Este año", - "Next year": "Próximo año", - "Last week": "Semana pasada", - "Next week": "Próxima semana", - "Last month": "Mes pasado", - "Next month": "Próximo mes", - "Last quarter": "Trimestre pasado", - "This quarter": "Este trimestre", - "Next quarter": "Próximo trimestre", - "Last year": "Año pasado", - "Last 7 days": "los últimos 7 días", - "Last 30 days": "los últimos 30 días", - "Last 90 days": "los últimos 90 días", - "Next 7 days": "los próximos 7 días", - "Next 30 days": "los próximos 30 días", - "Next 90 days": "los próximos 90 días", - "Work week": "Semana de trabajo", - "Day": "Día", - "Agenda": "Agenda", - "Date": "Fecha", - "Time": "Hora", - "Event": "Evento", - "None": "Ninguno", - "Unconnected": "Sin conexión", - "System settings": "Ajustes del sistema", - "System title": "Título del sistema", - "Logo": "Logo", - "Add menu item": "Añadir elemento al menú", - "Page": "Página", - "Name": "Nombre", - "Icon": "Icono", - "Group": "Grupo", - "Link": "Enlace", - "Save conditions": "Guardar condiciones", - "Edit menu item": "Editar elemento del menú", - "Move to": "Mover a", - "Insert left": "Insertar a la izquierda", - "Insert right": "Insertar a la derecha", - "Insert inner": "Insertar al interior", - "Delete": "Borrar", - "UI editor": "IU editor", - "Collection": "Colección", - "Collections & Fields": "Colección & Campos", - "All collections": "Todas las colecciones", - "Add category": "Añadir categoría", - "Enable child collections": "Activar las colecciones de niños", - "Allow adding records to the current collection": "Permitir añadir registros a la colección actual", - "Delete category": "Borrar categoría", - "Edit category": "Editar categoría", - "Collection category": "Categoría de colección", - "Collection template": "Plantilla de colección", - "Sort": "Ordenar", - "Categories": "categorías", - "Visible": "Visible", - "Read only": "Solo lectura", - "Easy reading": "Lectura fácil", - "Hidden": "Oculto", - "Hidden(reserved value)": "Oculto(valor reservado)", - "Not required": "No necesario", - "Value": "Valor", - "Disabled": "Desactivado", - "Enabled": "Activado", - "On": "Encendida", - "Off": "Apagada", - "Empty": "Vacío", - "Linkage rule": "Regla de enlace", - "Linkage rules": "Regla de enlaces", - "Condition": "Condición", - "Properties": "Propiedades", - "Add linkage rule": "Añadir Regla de enlace", - "Add property": "Añadir propiedad", - "Category name": "Nombre de Categoría", - "Roles & Permissions": "Roles & permisos", - "Edit profile": "Editar perfil", - "Change password": "Cambiar contraseña", - "Old password": "Contraseña antigua", - "New password": "Contraseña nueva", - "Switch role": "Cambiar role", - "Super admin": "Super admin", - "Language": "Idioma", - "Allow sign up": "Permitir el registro", - "Enable SMS authentication": "Activar la autenticación por SMS", - "Sign out": "Cerrar sesión", - "Cancel": "Cancelar", - "Submit": "Enviar", - "Close": "Cerrar", - "Set the data scope": "Establecer el ámbito de los datos", - "Data blocks": "Bloques de datos", - "Filter blocks": "Bloques de filtro", - "Table": "Tabla", - "Table OID(Inheritance)": "Tabla OID(Herencia)", - "Form": "Formulario", - "Collapse": "Colapsar", - "Select data source": "Seleccionar fuente de datos", - "Calendar": "Calendario", - "Delete events": "Borrar eventos", - "This event": "Este evento", - "This and following events": "Este y los siguientes eventos", - "All events": "Todos los eventos", - "Delete this event?": "¿Borrar este evento?", - "Delete Event": "Borrar evento", - "Kanban": "Kanban", - "Gantt": "Gantt", - "Create gantt block": "Crear bloque Gantt", - "Progress field": "Campo de progreso", - "Time scale": "Escala de tiempo", - "Hour": "Hora", - "Quarter of day": "Cuarto de día", - "Half of day": "Medio día", - "Year": "Año", - "QuarterYear": "Cuarto de año", - "Select grouping field": "Seleccionar campo de agrupación", - "Media": "Medios", - "Markdown": "Markdown", - "Wysiwyg": "Wysiwyg", - "Chart blocks": "Bloques de gráficos", - "Column chart": "Gráfico de columnas", - "Bar chart": "Gráfico de barras", - "Line chart": "Gráfico lineal", - "Pie chart": "Gráfico circular", - "Area chart": "Gráfico de áreas", - "Other chart": "Otro gráfico", - "Other blocks": "Otros Bloques", - "In configuration": "En configuración", - "Chart title": "Título del gráfico", - "Chart type": "Tipo del gráfico", - "Chart config": "Configuración del gráfico", - "Templates": "Plantillas", - "Select template": "Seleccione plantilla", - "Action logs": "Acción logs", - "Create template": "Crear plantilla", - "Edit markdown": "Editar markdown", - "Add block": "Añadir bloque", - "Add new": "Añadir nuevo", - "Add record": "Añadir registro", - "Add child": "Añadir hijo", - "Collapse all": "Contraer todo", - "Expand all": "Expandir todo", - "Expand/Collapse": "Expandir/Contraer", - "Default collapse": "Contraer por defecto", - "Tree table": "Tabla de árbol", - "Custom field display name": "Personalizar nombre para mostrar campo", - "Display fields": "Mostrar campos de colección", - "Edit record": "Editar registro", - "Delete menu item": "Borrar elemento de menú", - "Add page": "Añadir página", - "Add group": "Añadir grupo", - "Add link": "Añadir enlace", - "Insert above": "Insertar arriba", - "Insert below": "Insertar debajo", - "Save": "Guardar", - "Delete block": "Eliminar bloque", - "Are you sure you want to delete it?": "¿Seguro que quieres borrarlo?", - "This is a demo text, **supports Markdown syntax**.": "Este es un texto de demostración, **soporta sintaxis Markdown**", - "Filter": "Filtro", - "Connect data blocks": "Conectar bloques de datos", - "Action type": "Tipo de acción", - "Actions": "Acciones", - "Insert": "Insertar", - "Update": "Actualizar", - "View": "Ver", - "View record": "Ver registro", - "Refresh": "Actualizar", - "Data changes": "Modificar datos", - "Field name": "Nombre de campo", - "Before change": "Antes del cambio", - "After change": "Después del cambio", - "Delete record": "Eliminar registro", - "Create collection": "Crear colección", - "Collection display name": "Nombre para mostrar colección", - "Collection name": "Nombre de la colección", - "Inherits": "Hereda", - "Generate ID field automatically": "Generar campo ID automáticamente", - "Store the creation user of each record": "Almacenar el usuario de creación de cada registro", - "Store the last update user of each record": "Almacenar el usuario de última actualización de cada registro", - "Store the creation time of each record": "Almacenar la hora de creación de cada registro", - "Store the last update time of each record": "Almacenar la hora de última actualización de cada registro", - "More options": "Más opciones", - "Records can be sorted": "Los registros se pueden ordenar", - "Calendar collection": "Colección de calendarios", - "General collection": "Colección general", - "Connect to database view": "Conectarse a la vista de la base de datos", - "Source collections": "Colecciones de fuente", - "Field source": "Fuente de campo", - "Preview": "Vista previa", - "Randomly generated and can be modified. Support letters, numbers and underscores, must start with an letter.": "Generado aleatoriamente y modificable. Acepta letras, números y guiones bajos, debe empezar por una letra", - "Storage type": "Tipo de almacenamiento", - "Edit": "Editar", - "Edit collection": "Editar colección", - "Configure fields": "Configurar campos", - "Configure columns": "Configurar columnas", - "Edit field": "Editar campo", - "Override": "Anular", - "Override field": "Anular campo", - "Configure fields of {{title}}": "Configurar campos de {{title}}", - "Association fields filter": "Filtro de campos de asociación", - "PK & FK fields": "Campos PK y FK", - "Association fields": "Campos de asociación", - "Optional fields": "Campos opcionales", - "System fields": "Campos de sistema", - "General fields": "Campos generales", - "Parent collection fields": "Campos de la colección de padres", - "Basic": "Básico", - "Single line text": "Texto de una línea", - "Long text": "Texto largo", - "Phone": "Teléfono", - "Email": "Correo electrónico", - "Number": "Número", - "Integer": "Entero", - "Percent": "Porcentaje", - "Password": "Contraseña", - "Advanced type": "Avanzado", - "Formula": "Fórmula", - "Formula description": "Calcular un valor en cada registro basándose en otros campos del mismo registro", - "Choices": "Opciones", - "Checkbox": "Casilla de verificación", - "Single select": "Selección simple", - "Multiple select": "Selección múltiple", - "Radio group": "Grupo de radio", - "Checkbox group": "Grupo de checkbox", - "China region": "Región de China", - "Attachment": "Adjunto", - "Date & Time": "Fecha y hora", - "Datetime": "Datetime", - "Relation": "Relación", - "Link to": "Enlace a", - "Link to description": "Se utiliza para crear relaciones de colecciones de forma rápida y compatible con los escenarios más comunes. Adecuado para uso de no desarrolladores. Cuando está presente como campo, es una selección desplegable utilizada para seleccionar registros de la colección de destino. Una vez creado, generará simultáneamente los campos asociados de la colección actual en la colección de destino", - "Sub-table": "Subtabla", - "System info": "Información del sistema", - "Created at": "Creado el", - "Last updated at": "Última actualización en", - "Created by": "Creado por", - "Last updated by": "Última actualización por", - "Add field": "Añadir campo", - "Field display name": "Mostrar nombre de campo", - "Field type": "Tipo de campo", - "Field interface": "Interfaz de campo", - "Date format": "Formato de fecha", - "Year/Month/Day": "Año/Mes/Día", - "Year-Month-Day": "Año-Mes-Día", - "Day/Month/Year": "Día/Mes/Año", - "Show time": "Mostrar hora", - "Time format": "Formato hora", - "12 hour": "12 horas", - "24 hour": "24 horas", - "Relationship type": "Tipo de relación", - "Inverse relationship type": "Tipo de relación inversa", - "Source collection": "Colección de fuente", - "Source key": "Clave de origen", - "Target collection": "Colección de destino", - "Through collection": "Colección de paso", - "Target key": "Clave de destino", - "Foreign key": "Clave externa", - "One to one": "Uno a uno", - "One to many": "Uno a varios", - "Many to one": "Varios a uno ", - "Many to many": "Varios a varios ", - "Foreign key 1": "Clave externa 1", - "Foreign key 2": "Clave externa 2", - "One to one description": "Se utiliza para crear relaciones uno a uno. Por ejemplo, un usuario tiene un perfil", - "One to many description": "Se utiliza para crear una relación de uno a varios. Por ejemplo, un país tendrá varias ciudades y una ciudad sólo puede estar en un país. Cuando está presente como campo, es una subtabla que muestra los registros de la colección asociada. Cuando se crea, se genera automáticamente un campo Varios a uno en la colección asociada", - "Many to one description": "Se utiliza para crear relaciones de uno a varios. Por ejemplo, una ciudad puede pertenecer a un solo país y un país puede tener muchas ciudades. Cuando está presente como campo, es una selección desplegable que se utiliza para seleccionar un registro de la colección asociada. Una vez creado, se genera automáticamente un campo de uno a varios en la colección asociada", - "Many to many description": "Se utiliza para crear relaciones de uno a varios. Por ejemplo, un alumno tendrá varios profesores y un profesor tendrá varios alumnos. Cuando está presente como campo, es una selección desplegable que se utiliza para seleccionar registros de la colección asociada.", - "Generated automatically if left blank": "Se genera automáticamente si se deja en blanco", - "Display association fields": "Mostrar campos de asociación", - "Display field title": "Mostrar título de campo", - "Field component": "Componente del campo", - "Subtable": "Subtabla", - "Sub-form": "Subformulario", - "Record picker": "Selector de registros", - "Toggles the subfield mode": "Alterna el modo de subcampo", - "Selector mode": "Modo selector", - "Subtable mode": "Modo subtabla", - "Subform mode": "Modo subformulario", - "Edit block title": "Editar título de bloque", - "Block title": "Título del bloque", - "Pattern": "Patrón", - "Operator": "Operador", - "Editable": "Editable", - "Readonly": "Sólo lectura", - "Easy-reading": "Lectura fácil", - "Add filter": "Añadir filtro", - "Add filter group": "Añadir grupo de filtros", - "Comparision": "Comparación", - "is": "es", - "is not": "no es", - "is variable": "es variable", - "contains": "contiene", - "does not contain": "no contiene", - "starts with": "empieza por", - "not starts with": "no empieza por", - "ends with": "termina con", - "not ends with": "no termina con", - "is empty": "está vacío", - "is not empty": "no está vacío", - "Edit chart": "Editar gráfico", - "Add text": "Añadir texto", - "Filterable fields": "Campos filtrables", - "Edit button": "Editar botón", - "Hide": "Ocultar", - "Enable actions": "Activar acciones", - "Import": "Importar", - "Export": "Exportar", - "Customize": "Personalizar", - "Custom": "Personalizada", - "Function": "Función", - "Popup form": "Formulario emergente", - "Flexible popup": "Ventana emergente flexible", - "Configure actions": "Configurar acciones", - "Display order number": "Mostrar número de orden", - "Enable drag and drop sorting": "Activar la ordenación mediante arrastrar y soltar", - "Triggered when the row is clicked": "Activar al hacer clic en la fila", - "Add tab": "Añadir pestaña", - "Disable tabs": "Desactivar pestañas", - "Details": "Detalles", - "Edit tab": "Editar pestaña", - "Relationship blocks": "Bloques de relación", - "Select record": "Seleccionar registro", - "Display name": "Nombre para mostrar", - "Select icon": "Seleccionar icono", - "Custom column name": "Nombre de columna personalizado", - "Edit description": "Editar descripción", - "Required": "Requerido", - "Unique": "Único", - "Label field": "Campo de etiqueta", - "Default is the ID field": "Por defecto es el campo ID", - "Set default sorting rules": "Establecer reglas de ordenación por defecto", - "Set validation rules": "Establecer reglas de validación", - "Max length": "Longitud máxima", - "Min length": "Longitud mínima", - "Maximum": "Máximo", - "Minimum": "Mínimo", - "Max length must greater than min length": "Longitud máxima debe ser mayor que longitud mínima", - "Min length must less than max length": "Longitud mínima debe ser menor que longitud máxima", - "Maximum must greater than minimum": "Máximo debe ser mayor que mínimo", - "Minimum must less than maximum": "Mínimo debe ser menor que máximo", - "Validation rule": "Regla de validación", - "Add validation rule": "Añadir regla de validación", - "Format": "Formato", - "Regular expression": "Patrón", - "Error message": "Mensaje de error", - "Length": "Longitud", - "The field value cannot be greater than ": "El valor del campo no puede ser mayor que ", - "The field value cannot be less than ": "El valor del campo no puede ser menor que ", - "The field value is not an integer number": "El valor del campo no es un número entero", - "Set default value": "Establecer valor por defecto", - "Default value": "Valor por defecto", - "is before": "está antes de", - "is after": "está después de", - "is on or after": "está encendido o después", - "is on or before": "está encendido o antes", - "is between": "está entre", - "Upload": "Subir", - "Select level": "Seleccionar nivel", - "Province": "Provincia", - "City": "Ciudad", - "Area": "Zona", - "Street": "Calle", - "Village": "Pueblo", - "Must select to the last level": "Debe seleccionar hasta el último nivel", - "Move {{title}} to": "Mover {{title}} a", - "Target position": "Posición de destino", - "After": "Después", - "Before": "Antes", - "Add {{type}} before \"{{title}}\"": "Añadir {{type}} antes de \"{{title}}\"", - "Add {{type}} after \"{{title}}\"": "Añadir {{type}} después de \"{{title}}\"", - "Add {{type}} in \"{{title}}\"": "Añadir {{type}} en \"{{title}}\"", - "Original name": "Nombre original", - "Custom name": "Nombre personalizado", - "Custom Title": "Título personalizado", - "Options": "Opciones", - "Option value": "Valor de opción", - "Option label": "Etiqueta de opción", - "Color": "Color", - "Add option": "Añadir opción", - "Related collection": "Colección relacionada", - "Allow linking to multiple records": "Permitir enlazar múltiples registros", - "Allow uploading multiple files": "Permitir la carga de varios archivos", - "Configure calendar": "Configurar calendario", - "Title field": "Campo de título", - "Custom title": "Título personalizado", - "Daily": "Diario", - "Weekly": "Semanal", - "Monthly": "Mensual", - "Yearly": "Anual", - "Repeats": "se repite", - "Show lunar": "Mostrar lunar", - "Start date field": "Campo de fecha de inicio", - "End date field": "Campo de fecha de final", - "Navigate": "Navegar", - "Title": "Título", - "Description": "Descripción", - "Select view": "Seleccionar vista", - "Reset": "Restablecer", - "Importable fields": "Campos importables", - "Exportable fields": "Campos exportables", - "Saved successfully": "Guardado correctamente", - "Nickname": "Apodo", - "Sign in": "Iniciar sesión", - "Sign in via account": "Iniciar sesión a través de la cuenta", - "Sign in via phone": "Iniciar sesión a través del teléfono", - "Create an account": "Crear una cuenta", - "Sign up": "Registrarse", - "Confirm password": "Confirmar contraseña", - "Log in with an existing account": "Iniciar sesión con una cuenta existente", - "Signed up successfully. It will jump to the login page.": "Registrarse correctamente. Saltará a la página de inicio de sesión", - "Password mismatch": "Contraseña incorrecta", - "Users": "Usuarios", - "Verification code": "Código de verificación", - "Send code": "Enviar código", - "Retry after {{count}} seconds": "Reintentar después de {{count}} segundos", - "Roles": "Roles", - "Add role": "Añadir rol", - "Role name": "Nombre de rol", - "Configure": "Configurar", - "Configure permissions": "Configurar permisos", - "Edit role": "Editar rol", - "Action permissions": "Permisos de acción", - "Menu permissions": "Permisos de menú", - "Menu item name": "Nombre del elemento de menú", - "Allow access": "Permitir acceso", - "Action name": "Nombre de la acción", - "Allow action": "Permitir acción", - "Action scope": "Alcance de la acción", - "Operate on new data": "Operar con datos nuevos", - "Operate on existing data": "Operar con datos existentes", - "Yes": "Sí", - "No": "No", - "Red": "Rojo", - "Magenta": "Magenta", - "Volcano": "Volcán", - "Orange": "Naranja", - "Gold": "Oro", - "Lime": "Lima", - "Green": "Verde", - "Cyan": "Cian", - "Blue": "Azul", - "Geek blue": "Azul geek", - "Purple": "Púrpura", - "Default": "Por defecto", - "Add card": "Añandir tarjeta", - "edit title": "Editar título", - "Turn pages": "Pasar páginas", - "Others": "Otros", - "Save as template": "Guardar como plantilla", - "Save as block template": "Guardar como plantilla de bloque", - "Block templates": "Bloquear plantillas", - "Convert reference to duplicate": "Convertir referencia a duplicado", - "Template name": "Nombre de plantilla", - "Block type": "Tipo de bloque", - "No blocks to connect": "No hay bloques que conectar", - "Action column": "Columna de acción", - "Records per page": "Registros por página", - "(Fields only)": "(Sólo campos)", - "Button title": "Título del botón", - "Button icon": "Icono del botón", - "Submitted successfully": "Enviado con éxito", - "Operation succeeded": "Operación correcta", - "Operation failed": "Operación fallida", - "Open mode": "Modo de apertura", - "Popup size": "Tamaño de la ventana emergente", - "Small": "Pequeño", - "Middle": "Medio", - "Large": "Grande", - "Menu item title": "Título del elemento del menú", - "Menu item icon": "Icono del elemento del menú", - "Target": "Objetivo", - "Position": "Posición", - "Insert before": "Insertar antes", - "Insert after": "Insertar después", - "UI Editor": "Editor de IU", - "ASC": "ASC", - "DESC": "DESC", - "Add sort field": "Añadir campo de ordenación", - "ID": "ID", - "Identifier for program usage. Support letters, numbers and underscores, must start with an letter.": "Identificador para uso del programa. Admite letras, números y guiones bajos, debe empezar por una letra", - "Drawer": "Cajón", - "Dialog": "Diálogo", - "Delete action": "Acción de eliminar", - "Custom column title": "Título personalizado de la columna", - "Original title: ": "Título original ", - "Delete table column": "Eliminar columna de tabla", - "Skip required validation": "Omitir validación obligatoria", - "Form values": "Valores del formulario", - "Fields values": "Valores de los campos", - "When submitting the following fields, the saved values are": "Al enviar los siguientes campos, los valores guardados son", - "After successful submission": "Tras el envío correcto", - "Then": "Después", - "Stay on current page": "Permanecer en la página actual", - "Redirect to": "Redirigir a", - "Save action": "Guardar acción", - "Exists": "Existe", - "Filename": "Nombre de archivo", - "Add condition": "Añadir condición", - "Add condition group": "Añadir grupo de condiciones", - "exists": "existe", - "not exists": "no existe", - "is current logged-in user": "es el usuario conectado actual", - "is not current logged-in user": "no es el usuario actual", - "=": "=", - "≠": "≠", - ">": ">", - "≥": "≥", - "<": "<", - "≤": "≤", - "Role UID": "Rol UID", - "Precision": "Precisión", - "Formula mode": "Modo de fórmula", - "Expression": "Expresión", - "Input +, -, *, /, ( ) to calculate, input @ to open field variables.": "Introduzca +, -, *, /, ( ) para calcular, introduzca @ para abrir variables de campo", - "Formula error.": "Error de fórmula", - "Accept": "Aceptar", - "Rich Text": "Texto enriquecido", - "Junction collection": "Colección de unión", - "Leave it blank, unless you need a custom intermediate table": "Déjelo en blanco, a menos que necesite una tabla intermedia personalizada", - "Fields": "Campos", - "Edit field title": "Cambiar el título del campo ", - "Field title": "Título del campo", - "Original field title: ": "Título original del campo ", - "Edit tooltip": "Editar información sobre herramienta", - "Delete field": "Borrar campo", - "Select collection": "Seleccionar colección", - "Blank block": "Bloque en blanco", - "Duplicate template": "Duplicar plantilla", - "Reference template": "Plantilla de referencia", - "Create calendar block": "Crear bloque de calendario", - "Create kanban block": "Crear bloque kanban", - "Grouping field": "Campo de agrupación", - "Single select and radio fields can be used as the grouping field": "Los campos de selección únicos y radio se pueden utilizar como campo de agrupación", - "Tab name": "Nombre de pestaña", - "Current record blocks": "Bloques de registro actuales", - "Popup message": "Mensaje emergente", - "Delete role": "Eliminar función", - "Role display name": "Nombre de visualización del rol", - "Default role": "Rol por defecto", - "All collections use general action permissions by default; permission configured individually will override the default one.": "Todas las colecciones utilizan permisos de acción generales por defecto; el permiso configurado individualmente anulará el predeterminado", - "Allows configuration of the whole system, including UI, collections, permissions, etc.": "Permite configurar todo el sistema, incluyendo UI, colecciones, permisos, etc.", - "New menu items are allowed to be accessed by default.": "Permite acceder a nuevos elementos de menú por defecto", - "Global permissions": "Permisos globales", - "General permissions": "Permisos generales", - "Global action permissions": "Permisos de acción globales", - "General action permissions": "Permisos de acción generales", - "Plugin settings permissions": "Permisos de configuración de plugins", - "Allow to desgin pages": "Permitir diseñar páginas", - "Allow to manage plugins": "Permitir gestionar plugins", - "Allow to configure plugins": "Permitir configurar plugins", - "Allows to configure interface": "Permite configurar la interfaz", - "Allows to install, activate, disable plugins": "Permitir instalar, activar, desactivar plugins", - "Allows to configure plugins": "Permite configurar plugins", - "Action display name": "Mostrar nombre de acción", - "Allow": "Permitir", - "Data scope": "Ámbito de datos", - "Action on new records": "Acción sobre nuevos registros", - "Action on existing records": "Acción sobre registros existentes", - "All records": "Todos los registros", - "Own records": "Registros propios", - "Permission policy": "Política de permisos", - "Individual": "Individual", - "General": "General", - "Accessible": "Accesible", - "Configure permission": "Configurar permiso", - "Action permission": "Permiso de acción", - "Field permission": "Permiso de ámbito", - "Scope name": "Nombre de ámbito", - "File storages": "Almacenamiento de archivos", - "Storage display name": "Mostrar nombre de almacenamiento", - "Storage name": "Nombre de almacenamiento", - "Default storage": "Almacenamiento por defecto", - "Add storage": "Añadir almacenamiento", - "Edit storage": "Editar almacenamiento", - "Storage base URL": "URL base de almacenamiento", - "Destination": "Destino", - "Use the built-in static file server": "Utilizar el servidor de archivos estático incorporado", - "Local storage": "Almacenamiento local", - "Aliyun OSS": "Aliyun OSS", - "Amazon S3": "Amazon S3", - "Tencent COS": "Tencent COS", - "Region": "Región", - "Bucket": "Bucket", - "Path": "Ruta", - "Unsaved changes": "Cambios no guardados", - "Are you sure you don't want to save?": "¿Seguro que no quieres guardar?", - "Dragging": "Arrastrando", - "Popup": "Popup", - "Trigger workflow": "Desencadenar flujo de trabajo", - "Request API": "Petición API", - "Assign field values": "Asignar valores de campo", - "Constant value": "Valor constante", - "Dynamic value": "Valor dinámico", - "Current user": "Usuario actual", - "Current record": "Registro actual", - "Current time": "Hora actual", - "System variables": "Variables del sistema", - "Date variables": "Variables de fecha", - "Popup close method": "Método de cierre del popup", - "Automatic close": "Cierre automático", - "Manually close": "Cierre manual", - "After successful update": "Tras actualización correcta", - "Save record": "Guardar registro", - "Updated successfully": "Actualizado correctamente", - "After successful save": "Tras guardar correctamente", - "After clicking the custom button, the following field values will be assigned according to the following form.": "Después de hacer clic en el botón personalizado, los siguientes valores de campo se asignarán de acuerdo con el siguiente formulario", - "After clicking the custom button, the following fields of the current record will be saved according to the following form.": "Después de hacer clic en el botón personalizado, los siguientes campos del registro actual se guardarán de acuerdo con el siguiente formulario", - "Button background color": "Color de fondo del botón", - "Highlight": "Resaltar", - "Danger red": "Peligro rojo", - "Custom request": "Petición personalizada", - "Request settings": "Configuración de la petición", - "Request URL": "URL de petición", - "Request method": "Método de petición", - "Request query parameters": "Parámetros de consulta de la petición", - "Request headers": "Cabeceras de la petición", - "Request body": "Cuerpo de la petición", - "Request success": "Petición correcta", - "Invalid JSON format": "Formato JSON no válido", - "After successful request": "Tras petición correcta", - "Add exportable field": "Añadir campo exportable", - "Audit logs": "Registros de auditoría", - "Record ID": "ID de registro", - "User": "Usuario", - "Field": "Campo", - "Select": "Seleccionar", - "Select field": "Seleccionar campo", - "Field value changes": "Cambios en el valor del campo", - "One to one (has one)": "Uno a uno (tiene uno)", - "One to one (belongs to)": "Uno a uno (pertenece a)", - "Use the same time zone (GMT) for all users": "Utilizar la misma zona horaria (GMT) para todos los usuarios", - "Province/city/area name": "Nombre de provincia/ciudad/zona", - "Enabled languages": "Idiomas activados", - "View all plugins": "Ver todos los plugins", - "Print": "Imprimir", - "Done": "Listo", - "Sign up successfully, and automatically jump to the sign in page": "Registrarse correctamente y saltar automáticamente a la página de inicio de sesión", - "File manager": "Gestor de archivos ", - "ACL": "ACL", - "Collection manager": "Gestor de colecciones", - "Plugin manager": "Gestor de plugins", - "Local": "Local", - "Built-in": "Integrado", - "Marketplace": "Mercado", - "Coming soon...": "Próximamente...", - "All plugin settings": "Configuración de todos los plugins", - "Bookmark": "Marcador", - "Manage all settings": "Gestionar todos los ajustes", - "Create inverse field in the target collection": "Crear campo inverso en la colección de destino", - "Inverse field name": "Nombre del campo inverso", - "Inverse field display name": "Nombre mostrado del campo inverso", - "Bulk update": "Actualización en masa", - "After successful bulk update": "Tras una actualización en masa correcta", - "Bulk edit": "Edición en masa", - "Data will be updated": "Se actualizarán los datos", - "Selected": "Seleccionado", - "All": "Todos", - "Update selected data?": "¿Actualizar los datos seleccionados?", - "Update all data?": "¿Actualizar todos los datos?", - "Remains the same": "Permanece igual", - "Changed to": "Cambiado a", - "Clear": "Borrar", - "Add attach": "Añadir adjuntar", - "Please select the records to be updated": "Seleccione los registros que desea actualizar", - "Selector": "Selector", - "Inner": "Interior", - "Search and select collection": "Buscar y seleccionar colección", - "Please fill in the iframe URL": "Por favor, rellene la URL del iframe", - "Fix block": "Fijar bloque", - "Plugin name": "Nombre del plugin", - "Plugin tab name": "Nombre de la pestaña del plugin", - "AutoGenId": "Campo ID autogenerado", - "CreatedBy": "Registro del usuario creado de una fila", - "UpdatedBy": "Registro del último usuario actualizado de una fila", - "CreatedAt": "Registro de la hora de creación de una fila", - "UpdatedAt": "Registro del último usuario actualizado de una fila", - "Column width": "Ancho de columna", - "Sortable": "Clasificable", - "Enable link": "Activar enlace" - }, - "error-handler": { - "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" - }, - "collection-manager": {}, - "ui-schema-storage": {}, - "ui-routes-storage": {}, - "file-manager": {}, - "system-settings": {}, - "sequence-field": { - "Sequence": "Secuencia", - "Sequence rules": "Reglas de secuencia", - "Add rule": "Añadir regla", - "Inputable": "Inputable", - "Match rules": "Emparejar reglas", - "Type": "Tipo", - "Autoincrement": "Autoincremento", - "Fixed text": "Texto fijo", - "Text content": "Contenido del texto", - "Rule content": "Contenido de la regla", - "{{value}} Digits": "{{value}} Dígitos", - "Digits": "Dígitos", - "Start from": "Empezar desde", - "Starts from {{value}}": " Empieza a partir de {{value}}", - "Reset cycle": "Reinicia ciclo", - "No reset": "Sin reinicio", - "Daily": "Diario", - "Every Monday": "Todos los lunes", - "Monthly": "Mensualmente", - "Yearly": "Anual", - "Operations": "Operaciones", - "Customize": "Personalizar" - }, - "verification": { - "Verification": "Verification", - "Verification providers": "Verification providers", - "Provider type": "Provider type", - "Aliyun SMS": "Aliyun SMS", - "Access Key ID": "Access Key ID", - "Access Key Secret": "Access Key Secret", - "Endpoint": "Endpoint", - "Sign": "Sign", - "Template code": "Template code", - "Verification send failed, please try later or contact to administrator": "Verification send failed, please try later or contact to administrator", - "Not a valid cellphone number, please re-enter": "Not a valid cellphone number, please re-enter", - "Please don't retry in {{time}} seconds": "Please don't retry in {{time}} seconds", - "You are trying so frequently, please slow down": "You are trying so frequently, please slow down", - "Verification code is invalid": "Verification code is invalid" - }, - "users": { - "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" - }, - "acl": {}, - "china-region": {}, - "workflow": { - "Workflow": "Flujo de trabajo", - "Execution history": "Historial de ejecución", - "Executed": "Ejecutado", - "Trigger type": "Tipo de activador", - "Status": "Estado", - "On": "Activado", - "Off": "Apagado", - "Version": "Versión", - "Copy to new version": "Copiar a nueva versión", - "Duplicate": "Duplicar", - "Loading": "Cargando", - "Load failed": "Carga fallida", - "Trigger": "Disparador", - "Trigger variables": "Variables de activación", - "Trigger data": "Datos de activación", - "Trigger time": "Tiempo de activación", - "Triggered at": "Disparado a las", - "Collection event": "Evento de recogida", - "Trigger on": "Activado en", - "After record added": "Después de añadir el registro", - "After record updated": "Después de actualizar el registro", - "After record added or updated": "Después de añadir o actualizar el registro", - "After record deleted": "Después de eliminar el registro", - "Changed fields": "Campos modificados", - "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.": "Se activa sólo si cambia uno de los campos seleccionados. Si no se selecciona, significa que se activará cuando cambie cualquier campo. Cuando se añade o elimina un registro, se considera que se ha modificado cualquier campo.", - "Only triggers when match conditions": "Sólo se dispara cuando coinciden las condiciones", - "Schedule event": "Programar evento", - "Trigger mode": "Modo de activación", - "Based on certain date": "Basado en fecha determinada", - "Based on date field of collection": "Basado en el campo de fecha de la colección", - "Starts on": "Comienza el", - "Ends on": "Finaliza el", - "No end": "Sin fin", - "Exactly at": "Exactamente en", - "Repeat mode": "Modo repetición", - "Repeat limit": "Límite de repetición", - "No limit": "Sin límite", - "Seconds": "Segundos", - "Minutes": "Minutos", - "Hours": "Horas", - "Days": "Días", - "Weeks": "Semanas", - "Months": "Meses", - "No repeat": "No repetir", - "Every": "Cada", - "By minute": "Por minuto", - "By hour": "Por hora", - "By day": "Por día", - "By week": "Por semana", - "By month": "Por mes", - "By field": "Por campo", - "By custom date": "Por fecha personalizada", - "Advanced": "Avanzada", - "End": "Fin", - "Node result": "Resultado nodo", - "Constant": "Constante", - "Null": "Null", - "Boolean": "Boolean", - "String": "String", - "Calculator": "Calculadora", - "Arithmetic calculation": "Cálculo aritmético", - "String operation": "Operación de String", - "Executed at": "Ejecutado en", - "Queueing": "Puesta en cola", - "On going": "En curso", - "Succeeded": "Logrado", - "Failed": "Fallido", - "Pending": "Pendiente", - "Canceled": "Cancelado", - "This node contains branches, deleting will also be preformed to them, are you sure?": "Este nodo contiene ramas, el borrado también se preformará a ellas, ¿estás seguro?", - "Control": "Control", - "Collection operations": "Operaciones de recogida", - "Extended types": "Tipos ampliados", - "Node type": "Tipo de nodo", - "Calculation": "Cálculo", - "Configure calculation": "Configurar cálculo", - "Calculation result": "Resultado del cálculo", - "True": "Verdadero", - "False": "Falso", - "concat": "concat", - "Condition": "Condición", - "Mode": "Modo", - "Continue when \"Yes\"": "Continuar cuando \"Sí\"", - "Branch into \"Yes\" and \"No\"": "Ramificarse en \"Sí\" y \"No\"", - "Conditions": "Condiciones", - "Parallel branch": "Rama paralela", - "Add branch": "Añadir rama", - "All succeeded": "Todo correcto", - "Any succeeded": "Cualquiera con éxito", - "Any succeeded or failed": "Cualquiera tuvo éxito o falló", - "Continue after all branches succeeded": "Continuar después que todas las ramas han tenido éxito", - "Continue after any branch succeeded": "Continuar después que cualquier rama tenga éxito", - "Continue after any branch succeeded, or exit after any branch failed": "Continuar después de que cualquier rama tenga éxito, o salir después de que cualquier rama falle", - "Delay": "Retraso", - "Duration": "Duración", - "End Status": "Estado Final", - "Select status": "Seleccionar estado", - "Succeed and continue": "Éxito y continuar", - "Fail and exit": "Falla y sale", - "Create record": "Crear registro", - "Update record": "Actualizar registro", - "Query record": "Consultar registro", - "Multiple records": "Múltiples registros", - "Please select collection first": "Por favor, seleccione primero la colección", - "Only update records matching conditions": "Actualizar sólo los registros que cumplan las condiciones", - "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.": "Los campos a los que no se les asigne un valor se establecerán en el valor predeterminado, y los que no tengan un valor predeterminado se establecerán en nulo.", - "Trigger in executed workflow cannot be modified": "No se puede modificar el desencadenante en el flujo de trabajo ejecutado", - "Node in executed workflow cannot be modified": "Nodo en flujo de trabajo ejecutado no puede ser modificado", - "Can not delete": "No se puede eliminar", - "The result of this node has been referenced by other nodes ({{nodes}}), please remove the usage before deleting.": "El resultado de este nodo ha sido referenciado por otros nodos ({{nodes}}", - "HTTP request": "Petición HTTP", - "HTTP method": "Método HTTP", - "URL": "URL", - "Headers": "Encabezados", - "Add request header": "Añadir encabezado de petición", - "Parameters": "Parámetros", - "Add parameter": "Añadir parámetro", - "Body": "Cuerpo", - "Use variable": "Utilizar variable", - "Format": "Formato", - "Insert": "Insertar", - "Timeout config": "Tiempo de espera config", - "ms": "ms", - "Input request data": "Datos de solicitud de entrada", - "Only support standard JSON data": "Sólo admite datos JSON estándar", - "\"Content-Type\" only support \"application/json\", and no need to specify": "\"Content-Type\" sólo admite \"application/json\", y no es necesario especificar", - "Ignore fail request and continue workflow": "Ignorar solicitud fallida y continuar flujo de trabajo" - }, - "export": {}, - "import": { - "Only one file is allowed to be uploaded": "Sólo se permite cargar un archivo", - "File size cannot exceed 10M": "El tamaño del archivo no puede superar los 10M", - "Please upload the file of Excel": "Por favor, cargue el archivo de Excel", - "Import Data": "Importar datos", - "Start import": "Iniciar importación", - "Import explain": "Guía", - "Download template": "Descargar plantilla", - "Step 1: Download template": "Paso 1: Descargar plantilla", - "Step 2: Upload Excel": "Paso 2: Cargar Excel", - "Download tip": "- Descargar la plantilla y rellenar los datos según el formato \r\n - Importar sólo la primera hoja de cálculo \r\n - Soportar una única importación de hasta 10.000 filas de datos \r\n - No cambiar la cabecera de la plantilla para evitar fallos en la importación", - "Upload placeholder": "Arrastra y suelta el archivo aquí o haga clic para cargarlo, el tamaño del archivo no debe superar los 10M", - "Excel data importing": "Importación de datos Excel", - "Import done, total success have {{successCount}} , total failure have {{failureCount}}": "La importación se ha completado, con un total de {{successCount}} correctos y {{failureCount}} fallidos", - "To download the failure data": "Para descargar los datos de fallo", - "Add importable field": "Añadir campo importable", - "Done": "Hecho", - "Yes": "Sí", - "No": "No", - "Field {{fieldName}} does not exist": "El campo {{fieldName}} no existe", - "can not find value": "no se puede encontrar el valor", - "password is empty": "la contraseña está vacía", - "Incorrect time format": "Formato de hora incorrecto", - "Incorrect date format": "Formato de fecha incorrecto", - "Incorrect email format": "Formato de correo electrónico incorrecto", - "Illegal percentage format": "Formato de porcentaje ilegal" - }, - "audit-logs": { - "Details of changes": "Detalles de los cambios" - }, - "iframe-block": {}, - "graph-collection-manager": { - "Graph Collection": "Colección de gráficos", - "Collection List": "Lista de colecciones", - "Full Screen": "Vista completa", - "Collection Search": "Búsqueda de colecciones", - "Create Collection": "Crear colección", - "All Fields": "Todos los campos", - "Association Fields": "Campos de asociación", - "Optional fields": "Campos opcionales", - "All relationships": "Todas las relaciones", - "Entity relationship only": "Sólo relaciones de entidad", - "Inheritance relationship only": "Sólo relaciones de herencia", - "Graphical interface": "Interfaz gráfica", - "Selection": "Selección" - }, - "sample-hello": {}, - "oidc": { - "Enable": "Activar", - "Issuer": "Emisor", - "Actions": "Acciones", - "Delete": "Borrar", - "Edit": "Editar", - "Button title": "Título del botón", - "OIDC manager": "Gestor OIDC", - "OIDC Providers": "Proveedores OIDC", - "Provider name": "Nombre", - "Client id": "Id de cliente", - "Client secret": "Secreto del cliente", - "Openid configuration": "Configuración Openid", - "Authorization endpoint": "Endpoint de autorización ", - "Access token endpoint": "Endpoint de token de acceso", - "JWKS endpoint": "Endpoint de JWKS", - "Userinfo endpoint": "Userinfo endpoint", - "Redirect url": "Redirect url", - "Logout endpoint": "Endpoint de cierre de sesión", - "Id token sign alg": "Id token sign alg", - "Add provider": "Añadir Proveedor", - "Edit provider": "Editar Proveedor", - "Delete provider": "Borrar Proveedor", - "Sign in button name, which will be displayed on the sign in page": "Nombre del botón de inicio de sesión, que se mostrará en la página de inicio de sesión" - }, - "saml": { - "Edit": "Editar", - "Delete": "Borrar", - "Cancel": "Cancelar", - "Submit": "Enviar", - "Actions": "Acciones", - "Title": "Título", - "Enable": " Activar ", - "SAML manager": "Gestor SAML", - "SAML Providers": "Proveedores SAML", - "Redirect url": "Redirect url", - "SP entity id": "SP entity id", - "Add provider": "Añadir Proveedor", - "Edit provider": "Editar Proveedor", - "Client id": "Id de cliente", - "Entity id or issuer": "Id de entidad o emisor", - "Login Url": "Url de inicio de sesión", - "Public cert": "Certificado público", - "Delete provider": "Borrar Proveedor", - "Are you sure you want to delete it?": "¿Está seguro de que quiere borrarlo?", - "Sign in button name, which will be displayed on the sign in page": "Nombre del botón de inicio de sesión, que se mostrará en la página de inicio de sesión" - }, - "map": { - "Map-based geometry": "Geometría basada en mapas", - "Map type": "Tipo de mapa", - "Point": "Punto", - "Line": "Línea", - "Circle": "Círculo", - "Polygon": "Polígono", - "Access key": "Access key", - "securityJsCode or serviceHost": "securityJsCode o serviceHost", - "AMap": "AMap", - "Google Maps": "Google Maps", - "Clear": "Borrar", - "Click to select the starting point and double-click to end the drawing": "Haz clic para seleccionar el punto de partida y doble clic para finalizar el dibujo", - "Clear the canvas": "Borrar el lienzo", - "Are you sure to clear the canvas?": "¿Está seguro de borrar el lienzo?", - "Confirm": "Confirmar", - "Cancel": "Cancelar", - "Enter keywords to search": "Introducir palabras clave para buscar", - "The AccessKey is incorrect, please check it": "El AccessKey es incorrecto, por favor, compruébelo", - "Please configure the AMap securityCode or serviceHost correctly": "Por favor, configure el AMap securityCode o serviceHost correctamente", - "Map Manager": "Gestor de Mapas", - "Configuration": "Configuración", - "Saved successfully": "Guardado con éxito", - "Saved failed": "Guardado fallido", - "Edit": "Editar", - "Save": "Guardar", - "Please configure the AccessKey and SecurityJsCode first": "Por favor, configure primero el AccessKey y el SecurityJsCode", - "Go to the configuration page": "Ir a la página de configuración", - "Zoom": "Zoom", - "Set default zoom level": "Establecer el nivel de zoom por defecto", - "The default zoom level of the map": "El nivel de zoom por defecto del mapa", - "Edit field title": "Editar el título del campo", - "Field title": "Título del campo", - "Edit tooltip": "Editar información sobre herramienta", - "Delete field": "Borrar campo", - "Required": "Obligatorio", - "Pattern": "Patrón", - "operater": "operador", - "Editable": "Editable", - "Readonly": "Sólo lectura", - "Easy-reading": "Lectura fácil", - "Edit description": "Editar descripción" - }, - "snapshot-field": { - "Detail": "Detalle", - "Snapshot": "Snapshot ", - "Add block": "Añadir bloque", - "Snapshot to description": "Se utiliza para crear una snapshot de la tabla, guardar los datos actuales de la tabla apuntada, y guardarla sólo cuando se crea el registro al que pertenece, y no se actualizará posteriormente.", - "View record": "Ver registro", - "Allow linking to multiple records": "Permitir la vinculación a varios registros", - "Target collection": "Colección de destino" - }, - "duplicator": { - "Select Import data": "Seleccionar datos de importación", - "Select Import Plugins": "Seleccionar plugins de importación", - "Select User Collections": "Seleccionar colecciones de usuarios", - "Basic Data": "Datos básicos", - "Optional Data": "Datos opcionales", - "User Data": "Datos del usuario" - }, - "math-formula-field": {}, - "excel-formula-field": {} - }, - "antd": { - "locale": "es", - "Pagination": { - "items_per_page": "/ página", - "jump_to": "Ir a", - "jump_to_confirm": "confirmar", - "page": "Página", - "prev_page": "Página anterior", - "next_page": "Página siguiente", - "prev_5": "5 páginas anteriores", - "next_5": "5 páginas siguientes", - "prev_3": "3 páginas anteriores", - "next_3": "3 páginas siguientes", - "page_size": "Tamaño de página" - }, - "DatePicker": { - "lang": { - "placeholder": "Seleccionar fecha", - "yearPlaceholder": "Seleccionar año", - "quarterPlaceholder": "Seleccionar trimestre", - "monthPlaceholder": "Seleccionar mes", - "weekPlaceholder": "Seleccionar semana", - "rangePlaceholder": [ - "Fecha de inicio", - "Fecha de fin" - ], - "rangeYearPlaceholder": [ - "Año de inicio", - "Año final" - ], - "rangeQuarterPlaceholder": [ - "Cuarto inicial", - "Final de cuarto" - ], - "rangeMonthPlaceholder": [ - "Inicio mes", - "Fin de mes" - ], - "rangeWeekPlaceholder": [ - "Semana de inicio", - "Fin de semana" - ], - "locale": "es_ES", - "today": "Hoy", - "now": "Ahora", - "backToToday": "Volver a hoy", - "ok": "OK", - "clear": "Borrar", - "month": "Mes", - "year": "Año", - "timeSelect": "seleccionar hora", - "dateSelect": "seleccionar fecha", - "weekSelect": "seleccione una semana", - "monthSelect": "Elija un mes", - "yearSelect": "Elija un año", - "decadeSelect": "Elija una década", - "yearFormat": "YYYY", - "dateFormat": "DD.MM.YYYY", - "dayFormat": "DD", - "dateTimeFormat": "DD.MM.YYYY HH:mm:ss", - "monthBeforeYear": true, - "previousMonth": "Mes anterior ( Página anterior)", - "nextMonth": "Mes siguiente ( página abajo)", - "previousYear": "Último año (Control + izquierda)", - "nextYear": "Año siguiente (Control + derecha)", - "previousDecade": "Última década", - "nextDecade": "Próxima década", - "previousCentury": "Siglo pasado", - "nextCentury": "Próximo siglo" - }, - "timePickerLocale": { - "placeholder": "Seleccionar hora", - "rangePlaceholder": [ - "Hora de inicio", - "Hora de finalización" - ] - } - }, - "TimePicker": { - "placeholder": "Seleccionar hora", - "rangePlaceholder": [ - "Hora de inicio", - "Hora de finalización" - ] - }, - "Calendar": { - "lang": { - "placeholder": "Seleccionar fecha", - "yearPlaceholder": "Seleccionar año", - "quarterPlaceholder": "Seleccionar trimestre", - "monthPlaceholder": "Seleccionar mes", - "weekPlaceholder": "Seleccionar semana", - "rangePlaceholder": [ - "Fecha de inicio", - "Fecha de fin" - ], - "rangeYearPlaceholder": [ - "Año de inicio", - "Año final" - ], - "rangeQuarterPlaceholder": [ - "Cuarto inicial", - "Final de cuarto" - ], - "rangeMonthPlaceholder": [ - "Inicio mes", - "Fin de mes" - ], - "rangeWeekPlaceholder": [ - "Semana de inicio", - "Fin de semana" - ], - "locale": "es_ES", - "today": "Hoy", - "now": "Ahora", - "backToToday": "Volver a hoy", - "ok": "OK", - "clear": "Borrar", - "month": "Mes", - "year": "Año", - "timeSelect": "seleccionar hora", - "dateSelect": "seleccionar fecha", - "weekSelect": "seleccione una semana", - "monthSelect": "Elija un mes", - "yearSelect": "Elija un año", - "decadeSelect": "Elija una década", - "yearFormat": "YYYY", - "dateFormat": "DD/MM/YYYY", - "dayFormat": "D", - "dateTimeFormat": "DD/MM/YYYY HH:mm:ss", - "monthBeforeYear": true, - "previousMonth": "Mes anterior (Página anterior)", - "nextMonth": "Mes siguiente (Página abajo)", - "previousYear": "Último año (Control + izquierda)", - "nextYear": "Año siguiente (Control + derecha)", - "previousDecade": "Última década", - "nextDecade": "Próxima década", - "previousCentury": "Siglo pasado", - "nextCentury": "Próximo siglo" - }, - "placeholder": "Seleccionar hora", - "rangePlaceholder": [ - "Hora de inicio", - "Hora de finalización" - ] - }, - "global": { - "placeholder": "Seleccione por favor" - }, - "Table": { - "filterTitle": "Menú Filtro", - "filterConfirm": "OK", - "filterReset": "Reiniciar", - "filterEmptyText": "Sin filtros", - "filterCheckall": "Seleccionar todos los elementos", - "filterSearchPlaceholder": "Buscar en filtros", - "emptyText": "Sin datos", - "selectAll": "Seleccionar página actual", - "selectInvert": "Invertir página actual", - "selectNone": "Borrar todos los datos", - "selectionAll": "Seleccionar todos los datos", - "sortTitle": "Ordenar", - "expand": "Expandir fila", - "collapse": "Contraer fila", - "triggerDesc": "Haga clic para ordenar descendentemente", - "triggerAsc": "Haga clic para ordenar ascendente", - "cancelSort": "Haz clic para cancelar la ordenación" - }, - "Modal": { - "okText": "OK", - "cancelText": "Cancelar", - "justOkText": "OK" - }, - "Popconfirm": { - "okText": "OK", - "cancelText": "Cancelar" - }, - "Transfer": { - "titles": [ - "", - "" - ], - "searchPlaceholder": "Buscar aquí", - "itemUnit": " elemento ", - "itemsUnit": "elementos ", - "remove": "Eliminar", - "selectCurrent": "Seleccionar página actual", - "removeCurrent": "Eliminar página actual", - "selectAll": "Seleccionar todos los datos", - "removeAll": "Eliminar todos los datos", - "selectInvert": "Invertir la página actual" - }, - "Upload": { - "uploading": "Cargando...", - "removeFile": "Eliminar archivo", - "uploadError": "Error de carga", - "previewFile": "Previsualizar archivo", - "downloadFile": "Descargar archivo" - }, - "Empty": { - "description": "Sin datos" - }, - "Icon": { - "icon": "icon" - }, - "Text": { - "edit": "Editar", - "copy": "Copiar", - "copied": "Copiado", - "expand": "Expandir" - }, - "PageHeader": { - "back": "Atrás" - }, - "Form": { - "optional": "(opcional)", - "defaultValidateMessages": { - "default": "Error de validación de campo para ${label}", - "required": "Por favor, introduzca ${label}", - "enum": "${label} debe ser uno de [${enum}]", - "whitespace": "${label} no puede ser un espacio en blanco", - "date": { - "format": "${label} formato de fecha no es válido", - "parse": "${label} no se puede convertir a fecha", - "invalid": "${label} es una fecha no válida" - }, - "types": { - "string": "${label} no es válido ${type}", - "method": "${label} no es válido ${type}", - "array": "${label} no es válido ${type}", - "object": "${label} no es válido ${type}", - "number": "${label} no es válido ${type}", - "date": "${label} no es válido ${type}", - "boolean": "${label} no es válido ${type}", - "integer": "${label} no es válido ${type}", - "float": "${label} no es válido ${type}", - "regexp": "${label} no es válido ${type}", - "email": "${label} no es válido ${type}", - "url": "${label} no es válido ${type}", - "hex": "${label} no es válido ${type}" - }, - "string ": { - "len": "${label} debe tener ${len} caracteres", - "min": "${label} debe tener al menos ${min} caracteres", - "max": "${label} debe tener hasta ${max} caracteres", - "range": "${label} debe tener entre ${min}-${max} caracteres" - }, - "number": { - "len": "${label} debe ser igual a ${len}", - "min": "${label} debe ser mínimo ${min}", - "max": "${label} debe ser el máximo ${max}", - "range": "${label} debe estar entre ${min}-${max}" - }, - "array": { - "len": "Debe ser ${len} ${label}", - "min": "Al menos ${min} ${label}", - "max": "Como máximo ${max} ${label}", - "range": "La cantidad de ${label} debe estar entre ${min}-${max}" - }, - "pattern": { - "mismatch": "${label} no coincide con el patrón ${pattern}" - } - } - }, - "Image": { - "preview": "Vista previa" - } - }, - "cronstrue": { - "atX0SecondsPastTheMinuteGt20": null, - "atX0MinutesPastTheHourGt20": null, - "commaMonthX0ThroughMonthX1": null, - "commaYearX0ThroughYearX1": null, - "use24HourTimeFormatByDefault": false, - "anErrorOccuredWhenGeneratingTheExpressionD": "Se ha producido un error al generar la descripción de la expresión. Compruebe la sintaxis de la expresión cron.", - "everyMinute": "cada minuto", - "everyHour": "cada hora", - "atSpace": "en", - "everyMinuteBetweenX0AndX1": "cada minuto entre %s y %s", - "at": "En", - "spaceAnd": " y", - "everySecond": "cada segundo", - "everyX0Seconds": "cada %s segundos", - "secondsX0ThroughX1PastTheMinute": "segundos %s hasta %s pasado el minuto", - "atX0SecondsPastTheMinute": "en %s segundos pasado el minuto", - "everyX0Minutes": "cada %s minutos", - "minutesX0ThroughX1PastTheHour": "minutos %s hasta %s pasada la hora", - "atX0MinutesPastTheHour": "en %s minutos después de la hora", - "everyX0Hours": "cada %s horas", - "betweenX0AndX1": "entre %s y %s", - "atX0": "en %s", - "commaEveryDay": ", todos los días", - "commaEveryX0DaysOfTheWeek": ", cada %s días de la semana", - "commaX0ThroughX1": ", %s hasta %s", - "commaAndX0ThroughX1": ", %s hasta %s", - "first": "primero", - "second": "segundo", - "third": "tercero", - "fourth": "cuarto", - "fifth": "quinto", - "commaOnThe": ", en el ", - "spaceX0OfTheMonth": " %s del mes", - "lastDay": "el último día", - "commaOnTheLastX0OfTheMonth": ", el último %s del mes", - "commaOnlyOnX0": ", sólo en %s", - "commaAndOnX0": ", y en %s", - "commaEveryX0Months": ", cada %s meses", - "commaOnlyInX0": ", sólo en %s", - "commaOnTheLastDayOfTheMonth": ", el último día del mes", - "commaOnTheLastWeekdayOfTheMonth": ", el último día laborable del mes", - "commaDaysBeforeTheLastDayOfTheMonth": ", %s días antes del último día del mes", - "firstWeekday": "primer día laborable", - "weekdayNearestDayX0": "día de la semana más cercano al día %s", - "commaOnTheX0OfTheMonth": ", el día %s del mes", - "commaEveryX0Days": ", cada %s días", - "commaBetweenDayX0AndX1OfTheMonth": ", entre el día %s y %s del mes", - "commaOnDayX0OfTheMonth": ", el día %s del mes", - "commaEveryHour": ", cada hora", - "commaEveryX0Years": ", cada %s años", - "commaStartingX0": ", a partir de %s", - "daysOfTheWeek": [ - "Domingo", - "Lunes", - "Martes", - "Miércoles", - "Jueves", - "Viernes", - "Sábado" - ], - "monthsOfTheYear": [ - "Enero", - "Febrero", - "Marzo", - "Abril", - "Mayo", - "Junio", - "Julio", - "Agosto", - "Septiembre", - "Octubre", - "Noviembre", - "Diciembre" - ] - }, - "cron": { - "everyText": "cada", - "emptyMonths": "cada mes", - "emptyMonthDays": "todos los días del mes", - "emptyMonthDaysShort": "día del mes", - "emptyWeekDays": "todos los días de la semana", - "emptyWeekDaysShort": "día de la semana", - "emptyHours": "cada hora", - "emptyMinutes": "cada minuto", - "emptyMinutesForHourPeriod": "cada", - "yearOption": "año", - "monthOption": "mes", - "weekOption": "semana", - "dayOption": "día", - "hourOption": "hora", - "minuteOption": "minuto", - "rebootOption": "reinicio", - "prefixPeriod": "cada", - "prefixMonths": "en", - "prefixMonthDays": "en", - "prefixWeekDays": "los", - "prefixWeekDaysForMonthAndYearPeriod": "y", - "prefixHours": "en", - "prefixMinutes": ":", - "prefixMinutesForHourPeriod": "en", - "suffixMinutesForHourPeriod": "minuto(s)", - "errorInvalidCron": "Expresión cron no válida", - "clearButtonText": "Borrar", - "weekDays": [ - "Domingo", - "Lunes", - "Martes", - "Miércoles", - "Jueves", - "Viernes", - "Sábado" - ], - "month": [ - "Enero", - "Febrero", - "Marzo", - "Abril", - "Mayo", - "Junio", - "Julio", - "Agosto", - "Septiembre", - "Octubre", - "Noviembre", - "Diciembre" - ], - "altWeekDays": [ - "DOM", - "LUN", - "MAR", - "MIE", - "JUE", - "VIE", - "SAB" - ], - "altMonths": [ - "ENE", - "FEB", - "MAR", - "ABR", - "MAY", - "JUN", - "JUL", - "AGO", - "SEP", - "OCT", - "NOV", - "DIC" - ] - } -} \ No newline at end of file diff --git a/packages/plugins/client/src/server/locale/index.ts b/packages/plugins/client/src/server/locale/index.ts deleted file mode 100644 index fc4e46b1f..000000000 --- a/packages/plugins/client/src/server/locale/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export default { - // 'en-US': require('./en-US.json'), - // 'zh-CN': require('./zh-CN.json'), -}; diff --git a/packages/plugins/client/src/server/locale/pt-BR.json b/packages/plugins/client/src/server/locale/pt-BR.json deleted file mode 100644 index c01c770da..000000000 --- a/packages/plugins/client/src/server/locale/pt-BR.json +++ /dev/null @@ -1,1385 +0,0 @@ -{ - "lang": "pt-BR", - "moment": "pt", - "resources": { - "client": { - "Display <1><0>10<1>20<2>50<3>100 items per page": "Exibir <1><0>10<1>20<2>50<3>100 itens por página", - "Meet <1><0>All<1>Any conditions in the group": "Atender <1><0>Todas<1>Qualquer condições no grupo", - "Open in<1><0>Modal<1>Drawer<2>Window": "Abrir em<1><0>Modal<1>Drawer<2>Janela", - "{{count}} filter items": "{{count}} itens de filtro", - "{{count}} more items": "{{count}} mais itens", - "Total {{count}} items": "Total de {{count}} itens", - "Today": "Hoje", - "Month": "Mês", - "Week": "Semana", - "Work week": "Semana de trabalho", - "Day": "Dia", - "Agenda": "Agenda", - "Date": "Data", - "Time": "Hora", - "Event": "Evento", - "None": "Nenhum", - "Unconnected": "Desconectado", - "System settings": "Configurações do sistema", - "System title": "Título do sistema", - "Logo": "Logo", - "Add menu item": "Adicionar item de menu", - "Page": "Página", - "Name": "Nome", - "Icon": "Ícone", - "Group": "Grupo", - "Link": "Link", - "Save conditions": "Salvar condições", - "Edit menu item": "Editar item de menu", - "Move to": "Mover para", - "Insert left": "Inserir à esquerda", - "Insert right": "Inserir à direita", - "Insert inner": "Inserir internamente", - "Delete": "Excluir", - "UI editor": "Editor de UI", - "Collection": "Coleção", - "Collections & Fields": "Coleções e campos", - "Roles & Permissions": "Funções e permissões", - "Edit profile": "Editar perfil", - "Change password": "Alterar senha", - "Old password": "Senha antiga", - "New password": "Nova senha", - "Switch role": "Trocar de função", - "Super admin": "Super administrador", - "Language": "Idioma", - "Allow sign up": "Permitir cadastro", - "Enable SMS authentication": "Ativar autenticação por SMS", - "Sign out": "Sair", - "Cancel": "Cancelar", - "Submit": "Enviar", - "Close": "Fechar", - "Set the data scope": "Definir o escopo dos dados", - "Data blocks": "Blocos de dados", - "Filter blocks": "Blocos de filtro", - "Table": "Tabela", - "Form": "Formulário", - "Collapse": "Recolher", - "Select data source": "Selecionar fonte de dados", - "Calendar": "Calendário", - "Delete events": "Excluir eventos", - "This event": "Este evento", - "This and following events": "Este e os eventos seguintes", - "All events": "Todos os eventos", - "Delete this event?": "Excluir este evento?", - "Delete Event": "Excluir Evento", - "Kanban": "Kanban", - "Select grouping field": "Selecionar campo de agrupamento", - "Media": "Mídia", - "Markdown": "Markdown", - "Wysiwyg": "Wysiwyg", - "Chart blocks": "Blocos de gráficos", - "Column chart": "Gráfico de colunas", - "Bar chart": "Gráfico de barras", - "Line chart": "Gráfico de linhas", - "Pie chart": "Gráfico de pizza", - "Area chart": "Gráfico de área", - "Other chart": "Outro gráfico", - "Other blocks": "Outros blocos", - "In configuration": "Na configuração", - "Chart title": "Título do gráfico", - "Chart type": "Tipo de gráfico", - "Chart config": "Configuração do gráfico", - "Templates": "Modelos", - "Select template": "Selecionar modelo", - "Action logs": "Registros de ação", - "Create template": "Criar modelo", - "Edit markdown": "Editar markdown", - "Add block": "Adicionar bloco", - "Add new": "Adicionar novo", - "Add record": "Adicionar registro", - "Custom field display name": "Nome de exibição do campo personalizado", - "Display fields": "Exibir campos da coleção", - "Edit record": "Editar registro", - "Delete menu item": "Excluir item de menu", - "Add page": "Adicionar página", - "Add group": "Adicionar grupo", - "Add link": "Adicionar link", - "Insert above": "Inserir acima", - "Insert below": "Inserir abaixo", - "Save": "Salvar", - "Delete block": "Excluir bloco", - "Are you sure you want to delete it?": "Você tem certeza que deseja excluí-lo?", - "This is a demo text, **supports Markdown syntax**.": "Este é um texto de demonstração, **suporta a sintaxe Markdown**.", - "Filter": "Filtrar", - "Connect data blocks": "Conectar blocos de dados", - "Action type": "Tipo de ação", - "Actions": "Ações", - "Insert": "Inserir", - "Update": "Atualizar", - "View": "Visualizar", - "View record": "Visualizar registro", - "Refresh": "Atualizar", - "Data changes": "Alterações nos dados", - "Field name": "Nome do campo", - "Before change": "Antes da alteração", - "After change": "Depois da alteração", - "Delete record": "Excluir registro", - "Create collection": "Criar coleção", - "Collection display name": "Nome de exibição da coleção", - "Collection name": "Nome da coleção", - "Inherits": "Herdado de", - "Generate ID field automatically": "Gerar campo de ID automaticamente", - "Store the creation user of each record": "Armazenar o usuário de criação de cada registro", - "Store the last update user of each record": "Armazenar o usuário da última atualização de cada registro", - "Store the creation time of each record": "Armazenar o tempo de criação de cada registro", - "Store the last update time of each record": "Armazenar o tempo da última atualização de cada registro", - "More options": "Mais opções", - "Records can be sorted": "Registros podem ser ordenados", - "Collection template": "Modelo de coleção", - "Calendar collection": "Coleção de calendário", - "General collection": "Coleção geral", - "Randomly generated and can be modified. Support letters, numbers and underscores, must start with an letter.": "Gerado aleatoriamente e pode ser modificado. Suporta letras, números e sublinhados, deve começar com uma letra.", - "Storage type": "Tipo de armazenamento", - "Edit": "Editar", - "Edit collection": "Editar coleção", - "Configure fields": "Configurar campos", - "Configure columns": "Configurar colunas", - "Edit field": "Editar campo", - "Override": "Substituir", - "Override field": "Substituir campo", - "Configure fields of {{title}}": "Configurar campos de {{title}}", - "Association fields filter": "Filtro de campos de associação", - "PK & FK fields": "Campos PK & FK", - "Association fields": "Campos de associação", - "Choices fields": "Campos de opções", - "System fields": "Campos do sistema", - "General fields": "Campos gerais", - "Inherited fields": "Campos herdados", - "Parent collection fields": "Campos da coleção pai", - "Basic": "Básico", - "Single line text": "Texto de linha única", - "Long text": "Texto longo", - "Phone": "Telefone", - "Email": "Email", - "Number": "Número", - "Integer": "Inteiro", - "Percent": "Porcentagem", - "Password": "Senha", - "Advanced type": "Avançado", - "Formula": "Fórmula", - "Formula description": "Calcula um valor em cada registro com base em outros campos no mesmo registro.", - "Choices": "Opções", - "Checkbox": "Caixa de seleção", - "Single select": "Seleção única", - "Multiple select": "Seleção múltipla", - "Radio group": "Grupo de opções", - "Checkbox group": "Grupo de caixas de seleção", - "China region": "Região da China", - "Attachment": "Anexo", - "Date & Time": "Data e Hora", - "Datetime": "Data e hora", - "Relation": "Relacionamento", - "Link to": "Link para", - "Link to description": "Usado para criar relacionamentos de coleções rapidamente e compatível com a maioria dos cenários comuns. Adequado para uso não desenvolvedor. Quando presente como um campo, é uma seleção suspensa usada para selecionar registros da coleção de destino. Uma vez criado, simultaneamente gerará os campos associados da coleção atual na coleção de destino.", - "Sub-table": "Subtabela", - "System info": "Informações do sistema", - "Created at": "Criado em", - "Last updated at": "Última atualização em", - "Created by": "Criado por", - "Last updated by": "Última atualização por", - "Add field": "Adicionar campo", - "Field display name": "Nome de exibição do campo", - "Field type": "Tipo de campo", - "Field interface": "Interface do campo", - "Date format": "Formato de data", - "Year/Month/Day": "Ano/Mês/Dia", - "Year-Month-Day": "Ano-Mês-Dia", - "Day/Month/Year": "Dia/Mês/Ano", - "Show time": "Mostrar hora", - "Time format": "Formato de hora", - "12 hour": "12 horas", - "24 hour": "24 horas", - "Relationship type": "Tipo de relacionamento", - "Inverse relationship type": "Tipo de relacionamento inverso", - "Source collection": "Coleção de origem", - "Source key": "Chave de origem", - "Target collection": "Coleção de destino", - "Through collection": "Através da coleção", - "Target key": "Chave de destino", - "Foreign key": "Chave estrangeira", - "One to one": "Um para um", - "One to many": "Um para muitos", - "Many to one": "Muitos para um", - "Many to many": "Muitos para muitos", - "Foreign key 1": "Chave estrangeira 1", - "Foreign key 2": "Chave estrangeira 2", - "One to one description": "Usado para criar relacionamentos um para um. Por exemplo, um usuário tem um perfil.", - "One to many description": "Usado para criar um relacionamento um para muitos. Por exemplo, um país terá muitas cidades e uma cidade só pode estar em um país. Quando presente como um campo, é uma subtabela que exibe os registros da coleção associada. Quando criado, um campo muitos para um é automaticamente gerado na coleção associada.", - "Many to many description": "Usado para criar relacionamentos muitos-para-muitos. Por exemplo, um aluno terá muitos professores e um professor terá muitos alunos. Quando presente como campo, é uma seleção suspensa usada para selecionar registros da coleção associada.", - "Generated automatically if left blank": "Gerado automaticamente se deixado em branco", - "Display association fields": "Exibir campos de associação", - "Field component": "Componente de campo", - "Quick upload": "Upload rápido", - "Select file": "Selecionar arquivo", - "Allow multiple": "Permitir múltiplos", - "Subtable": "Subtabela", - "Sub-form": "Subformulário", - "Record picker": "Selecionador de registro", - "Toggles the subfield mode": "Alterna o modo de subcampo", - "Selector mode": "Modo de seleção", - "Subtable mode": "Modo de subtabela", - "Subform mode": "Modo de subformulário", - "Edit block title": "Editar título do bloco", - "Block title": "Título do bloco", - "Pattern": "Padrão", - "operater": "operador", - "Editable": "Editável", - "Readonly": "Somente leitura", - "Easy-reading": "Fácil leitura", - "Add filter": "Adicionar filtro", - "Add filter group": "Adicionar grupo de filtro", - "Comparision": "Comparação", - "is": "é", - "is not": "não é", - "is variable": "é variável", - "contains": "contém", - "does not contain": "não contém", - "starts with": "começa com", - "not starts with": "não começa com", - "ends with": "termina com", - "not ends with": "não termina com", - "is empty": "está vazio", - "is not empty": "não está vazio", - "Edit chart": "Editar gráfico", - "Add text": "Adicionar texto", - "Filterable fields": "Campos filtráveis", - "Edit button": "Editar botão", - "Hide": "Esconder", - "Enable actions": "Habilitar ações", - "Import": "Importar", - "Export": "Exportar", - "Customize": "Personalizar", - "Function": "Função", - "Popup form": "Formulário pop-up", - "Flexible popup": "Pop-up flexível", - "Configure actions": "Configurar ações", - "Display order number": "Exibir número de ordem", - "Enable drag and drop sorting": "Habilitar classificação de arrastar e soltar", - "Triggered when the row is clicked": "Acionado quando a linha é clicada", - "Add tab": "Adicionar guia", - "Disable tabs": "Desabilitar guias", - "Details": "Detalhes", - "Edit tab": "Editar guia", - "Relationship blocks": "Blocos de relacionamento", - "Select record": "Selecionar registro", - "Display name": "Nome de exibição", - "Select icon": "Selecionar ícone", - "Custom column name": "Nome personalizado da coluna", - "Edit description": "Editar descrição", - "Required": "Obrigatório", - "Unique": "Único", - "Label field": "Campo de rótulo", - "Default is the ID field": "O padrão é o campo ID", - "Set default sorting rules": "Definir regras de classificação padrão", - "Set validation rules": "Definir regras de validação", - "Max length": "Comprimento máximo", - "Min length": "Comprimento mínimo", - "Maximum": "Máximo", - "Minimum": "Mínimo", - "Max length must greater than min length": "O comprimento máximo deve ser maior que o comprimento mínimo", - "Min length must less than max length": "O comprimento mínimo deve ser menor que o comprimento máximo", - "Maximum must greater than minimum": "O máximo deve ser maior que o mínimo", - "Minimum must less than maximum": "O mínimo deve ser menor que o máximo", - "Validation rule": "Regra de validação", - "Add validation rule": "Adicionar regra de validação", - "Format": "Formato", - "Regular expression": "Expressão regular", - "Error message": "Mensagem de erro", - "Length": "Comprimento", - "The field value cannot be greater than ": "O valor do campo não pode ser maior que ", - "The field value cannot be less than ": "O valor do campo não pode ser menor que ", - "The field value is not an integer number": "O valor do campo não é um número inteiro", - "Set default value": "Definir valor padrão", - "Default value": "Valor padrão", - "is before": "é anterior a", - "is after": "é posterior a", - "is on or after": "é na ou depois de", - "is on or before": "é na ou antes de", - "Upload": "Enviar", - "Select level": "Selecionar nível", - "Province": "Província", - "City": "Cidade", - "Area": "Área", - "Street": "Rua", - "Village": "Vila", - "Must select to the last level": "Deve selecionar até o último nível", - "Move {{title}} to": "Mover {{title}} para", - "Target position": "Posição de destino", - "After": "Depois", - "Before": "Antes", - "Add {{type}} before \"{{title}}\"": "Adicionar {{type}} antes de \"{{title}}\"", - "Add {{type}} after \"{{title}}\"": "Adicionar {{type}} depois de \"{{title}}\"", - "Add {{type}} in \"{{title}}\"": "Adicionar {{type}} em \"{{title}}\"", - "Original name": "Nome original", - "Custom name": "Nome personalizado", - "Custom Title": "Título personalizado", - "Options": "Opções", - "Option value": "Valor opcional", - "Option label": "Etiqueta de opção", - "Color": "Cor", - "Add option": "Adicionar opção", - "Related collection": "Coleção relacionada", - "Allow linking to multiple records": "Permitir vinculação a vários registros", - "Allow uploading multiple files": "Permitir o upload de vários arquivos", - "Configure calendar": "Configurar calendário", - "Title field": "Campo de título", - "Custom title": "Título personalizado", - "Show lunar": "Mostrar calendário lunar", - "Start date field": "Campo de data de início", - "End date field": "Campo de data de término", - "Navigate": "Navegar", - "Title": "Título", - "Description": "Descrição", - "Select view": "Selecionar visualização", - "Reset": "Redefinir", - "Importable fields": "Campos importáveis", - "Exportable fields": "Campos exportáveis", - "Saved successfully": "Salvo com sucesso", - "Nickname": "Apelido", - "Sign in": "Entrar", - "Sign in via account": "Entrar via conta", - "Sign in via phone": "Entrar via telefone", - "Create an account": "Criar uma conta", - "Sign up": "Inscreva-se", - "Confirm password": "Confirmar senha", - "Log in with an existing account": "Entrar com uma conta existente", - "Signed up successfully. It will jump to the login page.": "Inscrição realizada com sucesso. Será redirecionado para a página de login.", - "Password mismatch": "As senhas não correspondem", - "Users": "Usuários", - "Verification code": "Código de verificação", - "Send code": "Enviar código", - "Retry after {{count}} seconds": "Tentar novamente após {{count}} segundos", - "Roles": "Funções", - "Add role": "Adicionar função", - "Role name": "Nome da função", - "Configure": "Configurar", - "Configure permissions": "Configurar permissões", - "Edit role": "Editar função", - "Action permissions": "Permissões de ação", - "Menu permissions": "Permissões de menu", - "Menu item name": "Nome do item de menu", - "Allow access": "Permitir acesso", - "Action name": "Nome da ação", - "Allow action": "Permitir ação", - "Action scope": "Âmbito da ação", - "Operate on new data": "Operar em novos dados", - "Operate on existing data": "Operar em dados existentes", - "Yes": "Sim", - "No": "Não", - "Red": "Vermelho", - "Magenta": "Magenta", - "Volcano": "Vulcânico", - "Orange": "Laranja", - "Gold": "Dourado", - "Lime": "Verde limão", - "Green": "Verde", - "Cyan": "Ciano", - "Blue": "Azul", - "Geek blue": "Azul geek", - "Purple": "Roxo", - "Default": "Padrão", - "Add card": "Adicionar cartão", - "edit title": "editar título", - "Turn pages": "Virar páginas", - "Others": "Outros", - "Save as template": "Salvar como modelo", - "Save as block template": "Salvar como modelo de bloco", - "Block templates": "Modelos de bloco", - "Convert reference to duplicate": "Converter referência em duplicado", - "Template name": "Nome do modelo", - "Block type": "Tipo de bloco", - "No blocks to connect": "Não há blocos para conectar", - "Action column": "Coluna de ação", - "Records per page": "Registros por página", - "(Fields only)": "(Apenas campos)", - "Button title": "Título do botão", - "Button icon": "Ícone do botão", - "Submitted successfully": "Enviado com sucesso", - "Operation succeeded": "Operação concluída com sucesso", - "Operation failed": "Falha na operação", - "Open mode": "Modo de abertura", - "Popup size": "Tamanho da janela pop-up", - "Small": "Pequeno", - "Middle": "Médio", - "Large": "Grande", - "Menu item title": "Título do item de menu", - "Menu item icon": "Ícone do item de menu", - "Target": "Destino", - "Position": "Posição", - "Insert before": "Inserir antes", - "Insert after": "Inserir depois", - "UI Editor": "Editor de interface do usuário", - "ASC": "ASC", - "DESC": "DESC", - "Add sort field": "Adicionar campo de ordenação", - "ID": "ID", - "Identifier for program usage. Support letters, numbers and underscores, must start with an letter.": "Identificador para uso em programa. Suporta letras, números e sublinhados, deve começar com uma letra.", - "Drawer": "Gaveta", - "Dialog": "Diálogo", - "Delete action": "Excluir ação", - "Custom column title": "Título de coluna personalizado", - "Original title: ": "Título original: ", - "Delete table column": "Excluir coluna da tabela", - "Skip required validation": "Ignorar validação obrigatória", - "Form values": "Valores do formulário", - "Fields values": "Valores de campos", - "When submitting the following fields, the saved values are": "Ao enviar os seguintes campos, os valores salvos são", - "After successful submission": "Após envio bem-sucedido", - "Then": "Então", - "Stay on current page": "Permanecer na página atual", - "Redirect to": "Redirecionar para", - "Save action": "Salvar ação", - "Exists": "Existe", - "Filename": "Nome do arquivo", - "Add condition": "Adicionar condição", - "Add condition group": "Adicionar grupo de condições", - "exists": "existe", - "not exists": "não existe", - "is current logged-in user": "é o usuário conectado atualmente", - "is not current logged-in user": "não é o usuário conectado atualmente", - "=": "=", - "≠": "≠", - ">": ">", - "≥": "≥", - "<": "<", - "≤": "≤", - "Role UID": "ID da função", - "Precision": "Precisão", - "Formula mode": "Modo de fórmula", - "Expression": "Expressão", - "Input +, -, *, /, ( ) to calculate, input @ to open field variables.": "Digite +, -, *, /, ( ) para calcular, digite @ para abrir as variáveis do campo.", - "Formula error.": "Erro de fórmula.", - "Accept": "Aceitar", - "Rich Text": "Texto formatado", - "Junction collection": "Coleção de junção", - "Leave it blank, unless you need a custom intermediate table": "Deixe em branco, a menos que precise de uma tabela intermediária personalizada", - "Fields": "Campos", - "Edit field title": "Editar título do campo", - "Field title": "Título do campo", - "Original field title: ": "Título original do campo: ", - "Edit tooltip": "Editar dica de ferramenta", - "Delete field": "Excluir campo", - "Select collection": "Selecionar coleção", - "Blank block": "Bloco em branco", - "Duplicate template": "Duplicar modelo", - "Reference template": "Modelo de referência", - "Create calendar block": "Criar bloco de calendário", - "Create kanban block": "Criar bloco Kanban", - "Grouping field": "Campo de agrupamento", - "Single select and radio fields can be used as the grouping field": "Campos de seleção única e rádio podem ser usados como campo de agrupamento", - "Tab name": "Nome da guia", - "Current record blocks": "Blocos de registro atual", - "Popup message": "Mensagem de pop-up", - "Delete role": "Excluir função", - "Role display name": "Nome de exibição da função", - "Default role": "Função padrão", - "All collections use general action permissions by default; permission configured individually will override the default one.": "Todas as coleções usam as permissões de ação gerais por padrão; as permissões configuradas individualmente substituirão a padrão.", - "Allows configuration of the whole system, including UI, collections, permissions, etc.": "Permite a configuração de todo o sistema, incluindo UI, coleções, permissões, etc.", - "New menu items are allowed to be accessed by default.": "Novos itens de menu podem ser acessados por padrão.", - "Global permissions": "Permissões globais", - "General permissions": "Permissões gerais", - "Global action permissions": "Permissões de ação global", - "General action permissions": "Permissões de ação gerais", - "Plugin settings permissions": "Permissões de configuração do plugin", - "Allow to desgin pages": "Permitir projetar páginas", - "Allow to manage plugins": "Permitir gerenciar plugins", - "Allow to configure plugins": "Permitir configurar plugins", - "Allows to configure interface": "Permite configurar interface", - "Allows to install, activate, disable plugins": "Permite instalar, ativar e desativar plugins", - "Allows to configure plugins": "Permite configurar plugins", - "Action display name": "Nome de exibição da ação", - "Allow": "Permitir", - "Data scope": "Escopo de dados", - "Action on new records": "Ação em novos registros", - "Action on existing records": "Ação em registros existentes", - "All records": "Todos os registros", - "Own records": "Registros próprios", - "Permission policy": "Política de permissão", - "Individual": "Individual", - "General": "Geral", - "Accessible": "Acessível", - "Configure permission": "Configurar permissão", - "Action permission": "Permissão de ação", - "Field permission": "Permissão de campo", - "Scope name": "Nome do escopo", - "File storages": "Armazenamentos de arquivos", - "Storage display name": "Nome de exibição do armazenamento", - "Storage name": "Nome do armazenamento", - "Default storage": "Armazenamento padrão", - "Add storage": "Adicionar armazenamento", - "Edit storage": "Editar armazenamento", - "Storage base URL": "URL base do armazenamento", - "Destination": "Destino", - "Use the built-in static file server": "Usar o servidor de arquivos estáticos integrado", - "Local storage": "Armazenamento local", - "Aliyun OSS": "Aliyun OSS", - "Amazon S3": "Amazon S3", - "Tencent COS": "Tencent COS", - "Region": "Região", - "Bucket": "Bucket", - "Path": "Caminho", - "Unsaved changes": "Alterações não salvas", - "Are you sure you don't want to save?": "Você tem certeza de que não deseja salvar?", - "Dragging": "Arrastando", - "Popup": "Popup", - "Trigger workflow": "Acionar fluxo de trabalho", - "Request API": "API de solicitação", - "Assign field values": "Atribuir valores de campo", - "Constant value": "Valor constante", - "Dynamic value": "Valor dinâmico", - "Current user": "Usuário atual", - "Current record": "Registro atual", - "Current time": "Hora atual", - "Popup close method": "Método de fechamento de popup", - "Automatic close": "Fechamento automático", - "Manually close": "Fechamento manual", - "After successful update": "Após atualização bem-sucedida", - "Save record": "Salvar registro", - "Updated successfully": "Atualizado com sucesso", - "After successful save": "Após salvamento bem-sucedido", - "After clicking the custom button, the following field values will be assigned according to the following form.": "Depois de clicar no botão personalizado, os seguintes valores de campo serão atribuídos de acordo com o seguinte formulário.", - "After clicking the custom button, the following fields of the current record will be saved according to the following form.": "Depois de clicar no botão personalizado, os seguintes campos do registro atual serão salvos de acordo com o seguinte formulário.", - "Button background color": "Cor de fundo do botão", - "Highlight": "Destaque", - "Danger red": "Vermelho perigoso", - "Custom request": "Solicitação personalizada", - "Request settings": "Configurações de solicitação", - "Request URL": "URL de solicitação", - "Request method": "Método de solicitação", - "Request query parameters": "Parâmetros de consulta de solicitação", - "Request headers": "Cabeçalhos de solicitação", - "Request body": "Corpo da solicitação", - "Request success": "Solicitação bem-sucedida", - "Invalid JSON format": "Formato JSON inválido", - "After successful request": "Após uma solicitação bem-sucedida", - "Add exportable field": "Adicionar campo exportável", - "Audit logs": "Registros de auditoria", - "Record ID": "ID do registro", - "User": "Usuário", - "Field": "Campo", - "Select": "Selecionar", - "Select field": "Selecionar campo", - "Field value changes": "Alterações no valor do campo", - "One to one (has one)": "Um para um (tem um)", - "One to one (belongs to)": "Um para um (pertence a)", - "Use the same time zone (GMT) for all users": "Usar o mesmo fuso horário (GMT) para todos os usuários", - "Province/city/area name": "Nome de província/cidade/área", - "Enabled languages": "Idiomas habilitados", - "View all plugins": "Ver todos os plugins", - "Print": "Imprimir", - "Done": "Concluído", - "Sign up successfully, and automatically jump to the sign in page": "Registro concluído com sucesso e automaticamente redirecionado para a página de login", - "File manager": "Gerenciador de arquivos", - "ACL": "ACL", - "Collection manager": "Gerenciador de coleções", - "Plugin manager": "Gerenciador de plugins", - "Local": "Local", - "Built-in": "Integrado", - "Marketplace": "Loja", - "Coming soon...": "Em breve...", - "All plugin settings": "Todas as configurações de plugins", - "Bookmark": "Favorito", - "Manage all settings": "Gerenciar todas as configurações", - "Create inverse field in the target collection": "Criar campo inverso na coleção de destino", - "Inverse field name": "Nome do campo inverso", - "Inverse field display name": "Nome de exibição do campo inverso", - "Bulk update": "Atualização em massa", - "After successful bulk update": "Após uma atualização em massa bem-sucedida", - "Bulk edit": "Edição em massa", - "Data will be updated": "Os dados serão atualizados", - "Selected": "Selecionado", - "All": "Todos", - "Update selected data?": "Atualizar dados selecionados?", - "Update all data?": "Atualizar todos os dados?", - "Remains the same": "Permanece o mesmo", - "Changed to": "Mudou para", - "Clear": "Limpar", - "Add attach": "Adicionar anexo", - "Please select the records to be updated": "Por favor, selecione os registros a serem atualizados", - "Selector": "Seletor", - "Inner": "Interno", - "Search and select collection": "Pesquisar e selecionar coleção", - "Please fill in the iframe URL": "Por favor, preencha o URL do iframe", - "Fix block": "Fixar bloco", - "Plugin name": "Nome do plugin", - "Plugin tab name": "Nome da aba do plugin", - "AutoGenId": "Campo de ID gerado automaticamente", - "CreatedBy": "Registrar o usuário que criou a linha", - "UpdatedBy": "Registrar o último usuário que atualizou a linha", - "CreatedAt": "Registrar o horário em que a linha foi criada", - "UpdatedAt": "Registrar o horário da última atualização da linha" - }, - "error-handler": { - "unique violation": "{{field}} deve ser único", - "notNull violation": "violação de notNull", - "Validation error": "erro de validação de {{field}}", - "notNull Violation": "{{field}} não pode ser nulo" - }, - "collection-manager": {}, - "ui-schema-storage": {}, - "ui-routes-storage": {}, - "file-manager": {}, - "system-settings": {}, - "sequence-field": { - "Sequence": "Sequência", - "Sequence rules": "Regras de sequência", - "Add rule": "Adicionar regra", - "Inputable": "Editável", - "Match rules": "Regras de correspondência", - "Type": "Tipo", - "Autoincrement": "Autoincremento", - "Fixed text": "Texto fixo", - "Text content": "Conteúdo do texto", - "Rule content": "Conteúdo da regra", - "{{value}} Digits": "{{value}} dígitos", - "Digits": "Dígitos", - "Start from": "Começar de", - "Starts from {{value}}": "Começa em {{value}}", - "Reset cycle": "Ciclo de reinício", - "No reset": "Sem reinício", - "Daily": "Diariamente", - "Every Monday": "Toda segunda-feira", - "Monthly": "Mensalmente", - "Yearly": "Anualmente", - "Operations": "Operações", - "Customize": "Personalizar" - }, - "verification": { - "Verification": "Verificação", - "Verification providers": "Provedores de verificação", - "Provider type": "Tipo de provedor", - "Aliyun SMS": "SMS Aliyun", - "Access Key ID": "ID de chave de acesso", - "Access Key Secret": "Chave secreta de acesso", - "Endpoint": "Endpoint", - "Sign": "Assinatura", - "Template code": "Código do modelo", - "Verification send failed, please try later or contact to administrator": "Envio de verificação falhou, tente mais tarde ou contate o administrador", - "Not a valid cellphone number, please re-enter": "Número de telefone celular inválido, por favor, re-insira", - "Please don't retry in {{time}} seconds": "Por favor, não tente novamente em {{time}} segundos", - "You are trying so frequently, please slow down": "Você está tentando com muita frequência, por favor, diminua a velocidade", - "Verification code is invalid": "Código de verificação é inválido" - }, - "users": { - "A senha está incorreta, por favor, tente novamente": "A senha está incorreta, por favor, tente novamente", - "O número de telefone celular não é válido, por favor, preencha novamente": "O número de telefone celular não é válido, por favor, preencha novamente", - "O número de telefone celular já foi registrado, por favor, faça login diretamente": "O número de telefone celular já foi registrado, por favor, faça login diretamente", - "O número de telefone não está registrado, por favor, registre-se primeiro": "O número de telefone não está registrado, por favor, registre-se primeiro", - "O email está incorreto, por favor, preencha novamente": "O email está incorreto, por favor, preencha novamente", - "Por favor, preencha o seu endereço de email": "Por favor, preencha o seu endereço de email" - }, - "acl": {}, - "china-region": {}, - "workflow": { - "Workflow": "Fluxo de trabalho", - "Execution history": "Histórico de execução", - "Executed": "Executado", - "Trigger type": "Tipo de gatilho", - "Status": "Status", - "On": "Ligado", - "Off": "Desligado", - "Version": "Versão", - "Copy to new version": "Copiar para nova versão", - "Duplicate": "Duplicar", - "Loading": "Carregando", - "Load failed": "Falha no carregamento", - "Trigger": "Gatilho", - "Trigger variables": "Variáveis de gatilho", - "Trigger data": "Dados de gatilho", - "Trigger time": "Hora do gatilho", - "Triggered at": "Acionado em", - "Collection event": "Evento da coleção", - "Trigger on": "Gatilho em", - "After record added": "Após adicionar registro", - "After record updated": "Após atualizar registro", - "After record added or updated": "Após adicionar ou atualizar registro", - "After record deleted": "Após excluir registro", - "Changed fields": "Campos alterados", - "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.": "Acionado apenas se um dos campos selecionados for alterado. Se não selecionado, significa que será acionado quando qualquer campo for alterado. Quando um registro é adicionado ou excluído, qualquer campo é considerado como alterado.", - "Only triggers when match conditions": "Aciona somente quando as condições correspondem", - "Schedule event": "Evento agendado", - "Trigger mode": "Modo de gatilho", - "Based on certain date": "Com base em uma data específica", - "Based on date field of collection": "Com base no campo de data da coleção", - "Starts on": "Inicia em", - "Ends on": "Termina em", - "No end": "Sem fim", - "Exactly at": "Exatamente em", - "Repeat mode": "Modo de repetição", - "Repeat limit": "Limite de repetição", - "No limit": "Sem limite", - "Seconds": "Segundos", - "Minutes": "Minutos", - "Hours": "Horas", - "Days": "Dias", - "Weeks": "Semanas", - "Months": "Meses", - "No repeat": "Não repetir", - "Every": "A cada", - "By minute": "Por minuto", - "By hour": "Por hora", - "By day": "Por dia", - "By week": "Por semana", - "By month": "Por mês", - "By field": "Por campo", - "By custom date": "Por data personalizada", - "Advanced": "Avançado", - "End": "Fim", - "Node result": "Resultado do nó", - "Constant": "Constante", - "Null": "Nulo", - "Boolean": "Booleano", - "String": "String", - "Calculator": "Calculadora", - "Arithmetic calculation": "Cálculo aritmético", - "String operation": "Operação de string", - "Executed at": "Executado em", - "Queueing": "Em fila", - "On going": "Em andamento", - "Succeeded": "Bem-sucedido", - "Failed": "Falhou", - "Pending": "Pendente", - "Canceled": "Cancelado", - "This node contains branches, deleting will also be preformed to them, are you sure?": "Este nó contém ramos, a exclusão também será realizada neles, tem certeza?", - "Control": "Controle", - "Collection operations": "Operações de coleção", - "Extended types": "Tipos estendidos", - "Node type": "Tipo de nó", - "Calculation": "Cálculo", - "Configure calculation": "Configurar cálculo", - "Calculation result": "Resultado do cálculo", - "True": "Verdadeiro", - "False": "Falso", - "concat": "concat", - "Condition": "Condição", - "Mode": "Modo", - "Continue when \"Yes\"": "Continue quando \"Sim\"", - "Branch into \"Yes\" and \"No\"": "Ramo em \"Sim\" and \"Não\"", - "Conditions": "Condições", - "Parallel branch": "Ramificação paralela", - "Add branch": "Adicionar ramificação", - "All succeeded": "Todas as condições foram atendidas", - "Any succeeded": "Qualquer condição foi atendida", - "Any succeeded or failed": "Qualquer condição foi atendida ou falhou", - "Continue after all branches succeeded": "Continuar após todas as ramificações atenderem", - "Continue after any branch succeeded": "Continuar após qualquer ramificação atender", - "Continue after any branch succeeded, or exit after any branch failed": "Continuar após qualquer ramificação atender ou sair após qualquer ramificação falhar", - "Delay": "Atraso", - "Duration": "Duração", - "End Status": "Estado final", - "Select status": "Selecione o estado", - "Succeed and continue": "Sucesso e continuar", - "Fail and exit": "Falha e saída", - "Create record": "Criar registro", - "Update record": "Atualizar registro", - "Query record": "Consultar registro", - "Multiple records": "Registros múltiplos", - "Please select collection first": "Selecione a coleção primeiro", - "Only update records matching conditions": "Atualizar somente registros que atendem às condições", - "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.": "Os campos que não foram atribuídos um valor serão definidos como o valor padrão, e aqueles que não têm um valor padrão são definidos como nulo.", - "Trigger in executed workflow cannot be modified": "O gatilho no fluxo de trabalho executado não pode ser modificado", - "Node in executed workflow cannot be modified": "O nó no fluxo de trabalho executado não pode ser modificado", - "Can not delete": "Não pode ser deletado", - "The result of this node has been referenced by other nodes ({{nodes}}), please remove the usage before deleting.": "O resultado deste nó foi referenciado por outros nós ({{nodes}}), remova o uso antes de excluir.", - "HTTP request": "Requisição HTTP", - "URL": "URL", - "You can use the above available variables in URL.": "Você pode usar as variáveis disponíveis acima na URL.", - "Request headers": "Cabeçalhos da requisição", - "Name(e.g. Content-Type)": "Nome (por exemplo, Content-Type)", - "Value(e.g. Application/json)": "Valor (por exemplo, Application/json)", - "Add request header": "Adicionar cabeçalho da requisição", - "HTTP method": "Método HTTP", - "Request data": "Dados da requisição", - "Input request data": "Inserir dados da requisição", - "You can use the above available variables in request data.": "Você pode usar as variáveis disponíveis acima nos dados da requisição.", - "Copy success!": "Copiar com sucesso!", - "Copy variable output template statement": "Copiar a declaração do modelo de saída de variável", - "Default headers is Content-Type: application/json": "Os cabeçalhos padrão são Content-Type: application/json", - "Ignore fail request and continue workflow": "Ignorar falhas de requisição e continuar o fluxo de trabalho", - "Syntax see": "Ver sintaxe", - "Show available variable tool": "Exibir ferramenta de variaveis disponível" - }, - "export": {}, - "import": { - "Only one file is allowed to be uploaded": "Apenas um arquivo é permitido para upload", - "File size cannot exceed 10M": "O tamanho do arquivo não pode exceder 10M", - "Please upload the file of Excel": "Por favor, faça o upload do arquivo do Excel", - "Import Data": "Importar dados", - "Start import": "Iniciar importação", - "Import explain": "Explicação", - "Download template": "Baixar modelo", - "Step 1: Download template": "Passo 1: Baixar modelo", - "Step 2: Upload Excel": "Passo 2: Fazer upload do Excel", - "Download tip": "- Baixe o modelo e preencha os dados de acordo com o formato \r\n - Importe apenas a primeira planilha \r\n - Suporta importação única de até 10.000 linhas de dados \r\n - Não altere o cabeçalho do modelo para evitar falhas na importação", - "Upload placeholder": "Arraste e solte o arquivo aqui ou clique para fazer o upload, o tamanho do arquivo não deve exceder 10M", - "Excel data importing": "Importação de dados do Excel", - "Import done, total success have {{successCount}} , total failure have {{failureCount}}": "Importação concluída, com um total de {{successCount}} sucessos e {{failureCount}} falhas", - "To download the failure data": "Para baixar os dados com falha", - "Add importable field": "Adicionar campo importável", - "Done": "Concluído", - "Yes": "Sim", - "No": "Não", - "Field {{fieldName}} does not exist": "O campo {{fieldName}} não existe", - "can not find value": "não é possível encontrar o valor", - "password is empty": "a senha está vazia", - "Incorrect time format": "Formato de hora incorreto", - "Incorrect date format": "Formato de data incorreto", - "Incorrect email format": "Formato de e-mail incorreto", - "Illegal percentage format": "Formato de porcentagem inválido" - }, - "audit-logs": {}, - "iframe-block": {}, - "graph-collection-manager": { - "Graph Collection": "Coleção de Gráficos", - "Collection List": "Lista de Coleções", - "Full Screen": "Tela Cheia", - "Collection Search": "Busca de Coleção", - "Create Collection": "Criar Coleção", - "All Fields": "Todos os Campos", - "Association Fields": "Campos de Associação", - "All relationships": "Todos os relacionamentos", - "Entity relationship only": "Somente relação de entidade", - "Inheritance relationship only": "Somente relação de herança", - "Graphical interface": "Interface Gráfica", - "Auto layout": "Layout Automático", - "Selection": "Seleção" - }, - "sample-hello": {}, - "oidc": { - "Issuer": "Emissor", - "Enable": "Ativar", - "Actions": "Ações", - "Delete": "Excluir", - "Edit": "Editar", - "Button title": "Título do botão", - "OIDC manager": "Gerenciador OIDC", - "OIDC Providers": "Provedores OIDC", - "Provider name": "Nome do provedor", - "Client id": "ID do cliente", - "Client secret": "Segredo do cliente", - "Openid configuration": "Configuração OpenID", - "Authorization endpoint": "Ponto de extremidade de autorização", - "Access token endpoint": "Ponto de extremidade do token de acesso", - "JWKS endpoint": "Ponto de extremidade JWKS", - "Userinfo endpoint": "Ponto de extremidade do userinfo", - "Redirect url": "URL de redirecionamento", - "Logout endpoint": "Ponto de extremidade de logout", - "Id token sign alg": "Algoritmo de assinatura do token de ID", - "Add provider": "Adicionar", - "Edit provider": "Editar", - "Delete provider": "Excluir", - "Sign in button name, which will be displayed on the sign in page": "Nome do botão de login, que será exibido na página de login" - }, - "saml": { - "Edit": "Editar", - "Delete": "Apagar", - "Cancel": "Cancelar", - "Submit": "Enviar", - "Actions": "Ações", - "Title": "Título", - "Enable": "Ativar", - "Button title": "Título do botão", - "SAML manager": "Gerenciador SAML", - "SAML Providers": "Provedores SAML", - "Redirect url": "URL de redirecionamento", - "SP entity id": "ID da entidade SP", - "Add provider": "Adicionar", - "Edit provider": "Editar", - "Client id": "ID do cliente", - "Entity id or issuer": "ID da entidade ou emissor", - "Login Url": "URL de login", - "Public cert": "Certificado público", - "Delete provider": "Apagar", - "Are you sure you want to delete it?": "Tem certeza de que deseja apagar?", - "Sign in button name, which will be displayed on the sign in page": "Nome do botão de login, que será exibido na página de login" - }, - "map": { - "Map-based geometry": "Geometria baseada em mapa", - "Map type": "Tipo de mapa", - "Point": "Ponto", - "Line": "Linha", - "Circle": "Círculo", - "Polygon": "Polígono", - "Access key": "Chave de acesso", - "securityJsCode or serviceHost": "securityJsCode ou serviceHost", - "AMap": "AMap", - "Google Maps": "Google Maps", - "Clear": "Limpar", - "Click to select the starting point and double-click to end the drawing": "Clique para selecionar o ponto de partida e dê duplo clique para finalizar o desenho", - "Clear the canvas": "Limpar o desenho", - "Are you sure to clear the canvas?": "Você tem certeza de que deseja limpar o desenho?", - "Confirm": "Confirmar", - "Cancel": "Cancelar", - "Enter keywords to search": "Digite palavras-chave para pesquisar", - "The AccessKey is incorrect, please check it": "A chave de acesso está incorreta, por favor verifique", - "Please configure the AMap securityCode or serviceHost correctly": "Por favor, configure corretamente o código de segurança ou o serviço de hospedagem AMap", - "Map Manager": "Gerenciador de Mapas", - "Configuration": "Configuração", - "Saved successfully": "Salvo com sucesso", - "Saved failed": "Falha ao salvar", - "Edit": "Editar", - "Save": "Salvar", - "Please configure the AccessKey and SecurityJsCode first": "Por favor, configure a chave de acesso e o SecurityJsCode primeiro", - "Go to the configuration page": "Ir para a página de configuração", - "Zoom": "Zoom", - "Set default zoom level": "Definir nível de zoom padrão", - "The default zoom level of the map": "O nível de zoom padrão do mapa", - "Edit field title": "Editar título do campo", - "Field title": "Título do campo", - "Edit tooltip": "Editar dica de ferramenta", - "Delete field": "Excluir campo", - "Required": "Obrigatório", - "Pattern": "Padrão", - "operater": "operador", - "Editable": "Editável", - "Readonly": "Somente leitura", - "Easy-reading": "Leitura fácil", - "Edit description": "Editar descrição" - }, - "snapshot-field": { - "Detail": "Detalhe", - "Snapshot": "Snapshot", - "Add block": "Adicionar bloco", - "Snapshot to description": "É usado para criar um snapshot da tabela, salvar os dados atuais da tabela apontada e salvá-los somente quando o registro ao qual ela pertence é criado e não será atualizado posteriormente.", - "View record": "Visualizar registro", - "Allow linking to multiple records": "Permitir a vinculação a vários registros", - "Target collection": "Coleção de destino" - }, - "duplicator": { - "Select Import data": "Selecionar dados para importação", - "Select Import Plugins": "Selecionar Plugins de Importação", - "Select User Collections": "Selecionar Coleções de Usuários", - "Basic Data": "Dados Básicos", - "Optional Data": "Dados Opcionais", - "User Data": "Dados do Usuário" - }, - "math-formula-field": {}, - "excel-formula-field": {} - }, - "antd": { - "locale": "pt", - "Pagination": { - "items_per_page": "/ página", - "jump_to": "Ir para", - "jump_to_confirm": "Confirmar", - "page": "Página", - "prev_page": "Página Anterior", - "next_page": "Próxima Página", - "prev_5": "5 Páginas Anteriores", - "next_5": "Próximas 5 Páginas", - "prev_3": "3 Páginas Anteriores", - "next_3": "Próximas 3 Páginas", - "page_size": "Tamanho da Página" - }, - "DatePicker": { - "lang": { - "placeholder": "Selecione uma data", - "yearPlaceholder": "Selecione um ano", - "quarterPlaceholder": "Selecione um trimestre", - "monthPlaceholder": "Selecione um mês", - "weekPlaceholder": "Selecione uma semana", - "rangePlaceholder": [ - "Data de início", - "Data de término" - ], - "rangeYearPlaceholder": [ - "Ano de início", - "Ano de término" - ], - "rangeQuarterPlaceholder": [ - "Trimestre de início", - "Trimestre de término" - ], - "rangeMonthPlaceholder": [ - "Mês de início", - "Mês de término" - ], - "rangeWeekPlaceholder": [ - "Semana de início", - "Semana de término" - ], - "locale": "pt_BR", - "today": "Hoje", - "now": "Agora", - "backToToday": "Voltar para hoje", - "ok": "OK", - "clear": "Limpar", - "month": "Mês", - "year": "Ano", - "timeSelect": "Selecionar horário", - "dateSelect": "Selecionar data", - "weekSelect": "Escolher uma semana", - "monthSelect": "Escolher um mês", - "yearSelect": "Escolher um ano", - "decadeSelect": "Escolher uma década", - "yearFormat": "YYYY", - "dateFormat": "D/M/YYYY", - "dayFormat": "D", - "dateTimeFormat": "D/M/YYYY HH:mm:ss", - "monthBeforeYear": false, - "previousMonth": "Mês anterior (PageUp)", - "nextMonth": "Próximo mês (PageDown)", - "previousYear": "Último ano (Control + esquerda)", - "nextYear": "Próximo ano (Control + direita)", - "previousDecade": "Última década", - "nextDecade": "Próxima década", - "previousCentury": "Último século", - "nextCentury": "Próximo século" - }, - "timePickerLocale": { - "placeholder": "Selecionar horário", - "rangePlaceholder": [ - "Horário de início", - "Horário de término" - ] - } - }, - "TimePicker": { - "placeholder": "Selecionar horário", - "rangePlaceholder": [ - "Horário de início", - "Horário de término" - ] - }, - "Calendar": { - "lang": { - "placeholder": "Selecione a data", - "yearPlaceholder": "Selecione o ano", - "quarterPlaceholder": "Selecione o trimestre", - "monthPlaceholder": "Selecione o mês", - "weekPlaceholder": "Selecione a semana", - "rangePlaceholder": [ - "Data inicial", - "Data final" - ], - "rangeYearPlaceholder": [ - "Ano inicial", - "Ano final" - ], - "rangeQuarterPlaceholder": [ - "Trimestre inicial", - "Trimestre final" - ], - "rangeMonthPlaceholder": [ - "Mês inicial", - "Mês final" - ], - "rangeWeekPlaceholder": [ - "Semana inicial", - "Semana final" - ], - "locale": "pt_BR", - "today": "Hoje", - "now": "Agora", - "backToToday": "Voltar para hoje", - "ok": "OK", - "clear": "Limpar", - "month": "Mês", - "year": "Ano", - "timeSelect": "selecionar hora", - "dateSelect": "selecionar data", - "weekSelect": "Escolha uma semana", - "monthSelect": "Escolha um mês", - "yearSelect": "Escolha um ano", - "decadeSelect": "Escolha uma década", - "yearFormat": "YYYY", - "dateFormat": "DD/MM/YYYY", - "dayFormat": "D", - "dateTimeFormat": "DD/MM/YYYY HH:mm:ss", - "monthBeforeYear": true, - "previousMonth": "Mês anterior (PageUp)", - "nextMonth": "Próximo mês (PageDown)", - "previousYear": "Ano anterior (Control + esquerda)", - "nextYear": "Próximo ano (Control + direita)", - "previousDecade": "Última década", - "nextDecade": "Próxima década", - "previousCentury": "Último século", - "nextCentury": "Próximo século" - }, - "timePickerLocale": { - "placeholder": "Selecionar hora", - "rangePlaceholder": [ - "Hora de início", - "Hora de término" - ] - } - }, - "global": { - "placeholder": "Por favor selecione" - }, - "Table": { - "filterTitle": "Menu de filtro", - "filterConfirm": "OK", - "filterReset": "Resetar", - "filterEmptyText": "Sem filtros", - "filterCheckall": "Selecionar todos os itens", - "filterSearchPlaceholder": "Pesquisar filtros", - "emptyText": "Sem dados", - "selectAll": "Selecionar página atual", - "selectInvert": "Inverter página atual", - "selectNone": "Limpar todos os dados", - "selectionAll": "Selecionar todos os dados", - "sortTitle": "Ordenar", - "expand": "Expandir linha", - "collapse": "Recolher linha", - "triggerDesc": "Clique para ordenar em ordem decrescente", - "triggerAsc": "Clique para ordenar em ordem crescente", - "cancelSort": "Clique para cancelar a ordenação" - }, - "Modal": { - "okText": "OK", - "cancelText": "Cancelar", - "justOkText": "OK" - }, - "Popconfirm": { - "okText": "OK", - "cancelText": "Cancelar" - }, - "Transfer": { - "titles": [ - "", - "" - ], - "searchPlaceholder": "Pesquisar aqui", - "itemUnit": "item", - "itemsUnit": "itens", - "remove": "Remover", - "selectCurrent": "Selecionar página atual", - "removeCurrent": "Remover página atual", - "selectAll": "Selecionar todos os dados", - "removeAll": "Remover todos os dados", - "selectInvert": "Inverter página atual" - }, - "Upload": { - "uploading": "Enviando...", - "removeFile": "Remover arquivo", - "uploadError": "Erro ao enviar", - "previewFile": "Visualizar arquivo", - "downloadFile": "Baixar arquivo" - }, - "Empty": { - "description": "Sem dados" - }, - "Icon": { - "icon": "ícone" - }, - "Text": { - "edit": "Editar", - "copy": "Copiar", - "copied": "Copiado", - "expand": "Expandir" - }, - "PageHeader": { - "back": "Voltar" - }, - "Form": { - "optional": "(opcional)", - "defaultValidateMessages": { - "default": "Erro de validação do campo ${label}", - "required": "Por favor, informe ${label}", - "enum": "${label} deve ser um dos seguintes: [${enum}]", - "whitespace": "${label} não pode conter apenas espaços em branco", - "date": { - "format": "O formato de data para ${label} é inválido", - "parse": "Não foi possível converter ${label} em uma data", - "invalid": "${label} é uma data inválida" - }, - "types": { - "string": "${label} não é um(a) ${type} válido(a)", - "method": "${label} não é um(a) ${type} válido(a)", - "array": "${label} não é um(a) ${type} válido(a)", - "object": "${label} não é um(a) ${type} válido(a)", - "number": "${label} não é um(a) ${type} válido(a)", - "date": "${label} não é um(a) ${type} válido(a)", - "boolean": "${label} não é um(a) ${type} válido(a)", - "integer": "${label} não é um(a) ${type} válido(a)", - "float": "${label} não é um(a) ${type} válido(a)", - "regexp": "${label} não é um(a) ${type} válido(a)", - "email": "${label} não é um(a) ${type} válido(a)", - "url": "${label} não é um(a) ${type} válido(a)", - "hex": "${label} não é um(a) ${type} válido(a)" - }, - "string": { - "len": "${label} deve ter ${len} caracteres", - "min": "${label} deve ter no mínimo ${min} caracteres", - "max": "${label} deve ter no máximo ${max} caracteres", - "range": "${label} deve ter entre ${min}-${max} caracteres" - }, - "number": { - "len": "${label} deve ser igual a ${len}", - "min": "${label} deve ser no mínimo ${min}", - "max": "${label} deve ser no máximo ${max}", - "range": "${label} deve estar entre ${min}-${max}" - }, - "array": { - "len": "Deve ter ${len} ${label}", - "min": "Deve ter pelo menos ${min} ${label}", - "max": "Deve ter no máximo ${max} ${label}", - "range": "A quantidade de ${label} deve estar entre ${min}-${max}" - }, - "pattern": { - "mismatch": "${label} não corresponde ao padrão ${pattern}" - } - } - }, - "Image": { - "preview": "Pré-visualização" - } - }, - "cronstrue": { - "atX0SecondsPastTheMinuteGt20": null, - "atX0MinutesPastTheHourGt20": null, - "commaMonthX0ThroughMonthX1": null, - "commaYearX0ThroughYearX1": null, - "use24HourTimeFormatByDefault": false, - "anErrorOccuredWhenGeneratingTheExpressionD": "Ocorreu um erro ao gerar a descrição da expressão. Verifique a sintaxe da expressão cron.", - "everyMinute": "a cada minuto", - "everyHour": "a cada hora", - "atSpace": "Às", - "everyMinuteBetweenX0AndX1": "A cada minuto entre %s e %s", - "at": "Às", - "spaceAnd": " e", - "everySecond": "a cada segundo", - "everyX0Seconds": "a cada %s segundos", - "secondsX0ThroughX1PastTheMinute": "segundos %s a %s depois do minuto", - "atX0SecondsPastTheMinute": "aos %s segundos após o minuto", - "everyX0Minutes": "a cada %s minutos", - "minutesX0ThroughX1PastTheHour": "minutos %s a %s depois da hora", - "atX0MinutesPastTheHour": "aos %s minutos após a hora", - "everyX0Hours": "a cada %s horas", - "betweenX0AndX1": "entre %s e %s", - "atX0": "às %s", - "commaEveryDay": ", todos os dias", - "commaEveryX0DaysOfTheWeek": ", a cada %s dias da semana", - "commaX0ThroughX1": ", %s a %s", - "commaAndX0ThroughX1": ", %s a %s", - "first": "primeiro", - "second": "segundo", - "third": "terceiro", - "fourth": "quarto", - "fifth": "quinto", - "commaOnThe": ", no ", - "spaceX0OfTheMonth": " %s do mês", - "lastDay": "o último dia", - "commaOnTheLastX0OfTheMonth": ", no último %s do mês", - "commaOnlyOnX0": ", somente em %s", - "commaAndOnX0": ", e em %s", - "commaEveryX0Months": ", a cada %s meses", - "commaOnlyInX0": ", somente em %s", - "commaOnTheLastDayOfTheMonth": ", no último dia do mês", - "commaOnTheLastWeekdayOfTheMonth": ", no último dia útil do mês", - "commaDaysBeforeTheLastDayOfTheMonth": ", %s dias antes do último dia do mês", - "firstWeekday": "primeiro dia útil", - "weekdayNearestDayX0": "dia útil mais próximo ao dia %s", - "commaOnTheX0OfTheMonth": ", no %s do mês", - "commaEveryX0Days": ", a cada %s dias", - "commaBetweenDayX0AndX1OfTheMonth": ", entre os dias %s e %s do mês", - "commaOnDayX0OfTheMonth": ", no dia %s do mês", - "commaEveryHour": ", a cada hora", - "commaEveryX0Years": ", a cada %s anos", - "commaStartingX0": ", iniciando em %s", - "daysOfTheWeek": [ - "Domingo", - "Segunda-feira", - "Terça-feira", - "Quarta-feira", - "Quinta-feira", - "Sexta-feira", - "Sábado" - ], - "monthsOfTheYear": [ - "Janeiro", - "Fevereiro", - "Março", - "Abril", - "Maio", - "Junho", - "Julho", - "Agosto", - "Setembro", - "Outubro", - "Novembro", - "Dezembro" - ], - "cron": { - "everyText": "a cada", - "emptyMonths": "todo mês", - "emptyMonthDays": "todo dia do mês", - "emptyMonthDaysShort": "dia do mês", - "emptyWeekDays": "todo dia da semana", - "emptyWeekDaysShort": "dia da semana", - "emptyHours": "toda hora", - "emptyMinutes": "todo minuto", - "emptyMinutesForHourPeriod": "cada", - "yearOption": "ano", - "monthOption": "mês", - "weekOption": "semana", - "dayOption": "dia", - "hourOption": "hora", - "minuteOption": "minuto", - "rebootOption": "reiniciar", - "prefixPeriod": "A cada", - "prefixMonths": "em", - "prefixMonthDays": "no", - "prefixWeekDays": "no", - "prefixWeekDaysForMonthAndYearPeriod": "e", - "prefixHours": "às", - "prefixMinutes": ":", - "prefixMinutesForHourPeriod": "às", - "suffixMinutesForHourPeriod": "minuto(s)", - "errorInvalidCron": "Expressão de cron inválida", - "clearButtonText": "Limpar", - "weekDays": [ - "Domingo", - "Segunda-feira", - "Terça-feira", - "Quarta-feira", - "Quinta-feira", - "Sexta-feira", - "Sábado" - ], - "months": [ - "Janeiro", - "Fevereiro", - "Março", - "Abril", - "Maio", - "Junho", - "Julho", - "Agosto", - "Setembro", - "Outubro", - "Novembro", - "Dezembro" - ], - "altWeekDays": [ - "DOM", - "SEG", - "TER", - "QUA", - "QUI", - "SEX", - "SAB" - ], - "altMonths": [ - "JAN", - "FEV", - "MAR", - "ABR", - "MAI", - "JUN", - "JUL", - "AGO", - "SET", - "OUT", - "NOV", - "DEZ" - ] - } - } -} diff --git a/packages/plugins/client/src/server/locale/uk-UA.json b/packages/plugins/client/src/server/locale/uk-UA.json deleted file mode 100644 index 5473f5771..000000000 --- a/packages/plugins/client/src/server/locale/uk-UA.json +++ /dev/null @@ -1,1289 +0,0 @@ -{ - "lang": "uk-UA", - "moment": "uk", - "resources": { - "client": { - "Display <1><0>10<1>20<2>50<3>100 items per page": "Показувати <1><0>10<1>20<2>50<3>100 елементів на сторінці", - "Meet <1><0>All<1>Any conditions in the group": "Виконати <1><0>Всі<1>Будь-які умови в групі", - "Open in<1><0>Modal<1>Drawer<2>Window": "Відкрити в<1><0>Модальному вікні<1>Висувному вікні<2>Новому вікні", - "{{count}} filter items": "{{count}} елементи фільтра", - "{{count}} more items": "{{count}} ще елементи", - "Total {{count}} items": "Всього {{count}} елементів", - "Today": "Сьогодні", - "Month": "Місяць", - "Week": "Тиждень", - "This week": "Цей тиждень", - "Next week": "Наступний тиждень", - "This month": "Цей місяць", - "Next month": "Наступний місяць", - "This year": "Цей рік", - "Next year": "Наступний рік", - "Last week": "Минулий тиждень", - "Last month": "Минулий місяць", - "Last year": "Минулий рік", - "Last 7 days": "Останні 7 днів", - "Last 30 days": "Останні 30 днів", - "Last 90 days": "Останні 90 днів", - "Next 7 days": "Наступні 7 днів", - "Next 30 days": "Наступні 30 днів", - "Next 90 days": "Наступні 90 днів", - "Work week": "Робочий тиждень", - "Day": "День", - "Agenda": "Розклад", - "Date": "Дата", - "Time": "Час", - "Event": "Подія", - "None": "Немає", - "Unconnected": "Незв'язаний", - "System settings": "Налаштування системи", - "System title": "Заголовок системи", - "Logo": "Логотип", - "Add menu item": "Додати елемент меню", - "Page": "Сторінка", - "Name": "Ім'я", - "Icon": "Іконка", - "Group": "Група", - "Link": "Посилання", - "Save conditions": "Зберегти умови", - "Edit menu item": "Редагувати елемент меню", - "Move to": "Перемістити до", - "Insert left": "Вставити зліва", - "Insert right": "Вставити справа", - "Insert inner": "Вставити в середину", - "Delete": "Видалити", - "UI editor": "Редактор інтерфейсу", - "Collection": "Колекція", - "Collections & Fields": "Колекції та поля", - "Roles & Permissions": "Ролі та дозволи", - "Edit profile": "Редагувати профіль", - "Change password": "Змінити пароль", - "Old password": "Старий пароль", - "New password": "Новий пароль", - "Switch role": "Переключити роль", - "Super admin": "Суперадміністратор", - "Language": "Мова", - "Allow sign up": "Дозволити реєстрацію", - "Enable SMS authentication": "Увімкнути аутентифікацію SMS", - "Sign out": "Вийти", - "Cancel": "Скасувати", - "Submit": "Підтвердити", - "Close": "Закрити", - "Set the data scope": "Встановити область даних", - "Data blocks": "Блоки даних", - "Filter blocks": "Блоки фільтру", - "Table": "Таблиця", - "Form": "Форма", - "Collapse": "Згорнути", - "Select data source": "Вибрати джерело даних", - "Calendar": "Календар", - "Delete events": "Видалити події", - "This event": "Ця подія", - "This and following events": "Ця та наступні події", - "All events": "Всі події", - "Delete this event?": "Видалити цю подію?", - "Delete Event": "Видалити подію", - "Kanban": "Канбан", - "Select grouping field": "Вибрати поле групування", - "Media": "Медіа", - "Markdown": "Markdown", - "Wysiwyg": "Wysiwyg", - "Chart blocks": "Блоки діаграм", - "Column chart": "Стовпчикова діаграма", - "Bar chart": "Стовпчаста діаграма", - "Line chart": "Лінійна діаграма", - "Pie chart": "Кругова діаграма", - "Area chart": "Площинна діаграма", - "Other chart": "Інша діаграма", - "Other blocks": "Інші блоки", - "In configuration": "В конфігурації", - "Chart title": "Заголовок діаграми", - "Chart type": "Тип діаграми", - "Chart config": "Конфігурація діаграми", - "Templates": "Шаблони", - "Select template": "Вибрати шаблон", - "Action logs": "Логи дій", - "Create template": "Створити шаблон", - "Edit markdown": "Редагувати markdown", - "Add block": "Додати блок", - "Add new": "Додати новий", - "Add record": "Додати запис", - "Custom field display name": "Власне відображення поля", - "Display fields": "Відображення полів колекції", - "Edit record": "Редагувати запис", - "Delete menu item": "Видалити елемент меню", - "Add page": "Додати сторінку", - "Add group": "Додати групу", - "Add link": "Додати посилання", - "Insert above": "Вставити зверху", - "Insert below": "Вставити знизу", - "Save": "Зберегти", - "Delete block": "Видалити блок", - "Are you sure you want to delete it?": "Ви впевнені, що хочете видалити це?", - "This is a demo text, **supports Markdown syntax**.": "Це демонстраційний текст, **підтримує синтаксис Markdown**.", - "Filter": "Фільтр", - "Connect data blocks": "З\'єднати блоки даних", - "Action type": "Тип дії", - "Actions": "Дії", - "Insert": "Вставити", - "Update": "Оновити", - "View": "Переглянути", - "View record": "Переглянути запис", - "Refresh": "Оновити", - "Data changes": "Зміни даних", - "Field name": "Ім'я поля", - "Before change": "Перед зміною", - "After change": "Після зміни", - "Delete record": "Видалити запис", - "Create collection": "Створити колекцію", - "Collection display name": "Відображення колекції", - "Collection name": "Ім'я колекції", - "Inherits": "Наслідує", - "Generate ID field automatically": "Автоматично генерувати поле ID", - "Store the creation user of each record": "Зберігати користувача створення кожного запису", - "Store the last update user of each record": "Зберігати користувача останнього оновлення кожного запису", - "Store the creation time of each record": "Зберігати час створення кожного запису", - "Store the last update time of each record": "Зберігати час останнього оновлення кожного запису", - "More options": "Більше опцій", - "Records can be sorted": "Записи можна сортувати", - "Collection template": "Шаблон колекції", - "Calendar collection": "Календарна колекція", - "General collection": "Загальна колекція", - "Randomly generated and can be modified. Support letters, numbers and underscores, must start with an letter.": "Випадково генерується і може бути змінений. Підтримує букви, цифри і підкреслення, повинен починатися з літери.", - "Storage type": "Тип зберігання", - "Edit": "Редагувати", - "Edit collection": "Редагувати колекцію", - "Configure fields": "Налаштувати поля", - "Configure columns": "Налаштувати стовпці", - "Edit field": "Редагувати поле", - "Override": "Перезаписати", - "Override field": "Перезаписати поле", - "Configure fields of {{title}}": "Налаштувати поля {{title}}", - "Association fields filter": "Фільтр полів асоціацій", - "PK & FK fields": "PK & FK поля", - "Association fields": "Поля асоціацій", - "Choices fields": "Поля з вибором", - "System fields": "Системні поля", - "General fields": "Загальні поля", - "Inherited fields": "Успадковані поля", - "Parent collection fields": "Поля батьківської колекції", - "Basic": "Базовий", - "Single line text": "Однорядковий текст", - "Long text": "Довгий текст", - "Phone": "Телефон", - "Email": "Електронна пошта", - "Number": "Число", - "Integer": "Ціле число", - "Percent": "Відсоток", - "Password": "Пароль", - "Advanced type": "Розширений", - "Formula": "Формула", - "Formula description": "Обчислює значення в кожному запису на основі інших полів в цьому записі.", - "Choices": "Вибір", - "Checkbox": "Прапорець", - "Single select": "Одиночний вибір", - "Multiple select": "Множинний вибір", - "Radio group": "Група радіокнопок", - "Checkbox group": "Група прапорців", - "China region": "Регіон Китаю", - "Attachment": "Вкладення", - "Date & Time": "Дата та час", - "Datetime": "Дата та час", - "Relation": "Зв'язок", - "Link to": "Посилання на", - "Link to description": "Використовується для швидкого створення зв'язків між колекціями та сумісний з більшістю загальних сценаріїв. Підходить для використання невикупником. Коли воно присутнє як поле, воно є випадаючим списком для вибору записів з цільової колекції. При створенні одночасно створюються асоційовані поля поточної колекції у цільовій колекції.", - "Sub-table": "Підтаблиця", - "System info": "Системна інформація", - "Created at": "Створено о", - "Last updated at": "Останнє оновлення о", - "Created by": "Створено користувачем", - "Last updated by": "Останнє оновлення користувачем", - "Add field": "Додати поле", - "Field display name": "Назва поля", - "Field type": "Тип поля", - "Field interface": "Інтерфейс поля", - "Date format": "Формат дати", - "Year/Month/Day": "Рік/Місяць/День", - "Year-Month-Day": "Рік-Місяць-День", - "Day/Month/Year": "День/Місяць/Рік", - "Show time": "Показувати час", - "Time format": "Формат часу", - "12 hour": "12-годинний", - "24 hour": "24-годинний", - "Relationship type": "Тип зв'язку", - "Inverse relationship type": "Зворотний тип зв'язку", - "Source collection": "Вихідна колекція", - "Source key": "Ключ вихідної колекції", - "Target collection": "Цільова колекція", - "Through collection": "Через колекцію", - "Target key": "Ключ цільової колекції", - "Foreign key": "Зовнішній ключ", - "One to one": "Один до одного", - "One to many": "Один до багатьох", - "Many to one": "Багато до одного", - "Many to many": "Багато до багатьох", - "Foreign key 1": "Зовнішній ключ 1", - "Foreign key 2": "Зовнішній ключ 2", - "One to one description": "Використовується для створення один до одного зв'язку. Наприклад, у користувача є профіль.", - "One to many description": "Використовується для створення один до багатьох зв'язку. Наприклад, країна має багато міст, а місто може належати тільки одній країні. Коли це поле присутнє, воно є підтаблицею, що відображає записи пов'язаної колекції. При створенні в пов'язаній колекції автоматично створюється поле Багато до одного.", - "Many to one description": "Використовується для створення багато до одного зв'язку. Наприклад, місто може належати тільки одній країні, а країна може мати багато міст. Коли це поле присутнє, воно є випадаючим списком для вибору запису з пов'язаної колекції. При створенні в пов'язаній колекції автоматично створюється поле Один до багатьох.", - "Many to many description": "Використовується для створення багато до багатьох зв'язку. Наприклад, студент має багато вчителів, а вчитель має багато студентів. Коли це поле присутнє, воно є випадаючим списком для вибору записів з пов'язаної колекції.", - "Generated automatically if left blank": "Автоматично генерується, якщо залишити порожнім", - "Display association fields": "Відображати поля асоціації", - "Field component": "Компонент поля", - "Allow multiple": "Дозволити кілька", - "Quick upload": "Швидке завантаження", - "Select file": "Вибрати файл", - "Subtable": "Підтаблиця", - "Subform": "Підформа", - "Record picker": "Вибір запису", - "Toggles the subfield mode": "Переключає режим підполя", - "Selector mode": "Режим вибору", - "Subtable mode": "Режим підтаблиці", - "Subform mode": "Режим підформи", - "Edit block title": "Редагувати заголовок блоку", - "Block title": "Заголовок блоку", - "Pattern": "Шаблон", - "operater": "оператор", - "Editable": "Можна редагувати", - "Readonly": "Тільки для читання", - "Easy-reading": "Зручне читання", - "Add filter": "Додати фільтр", - "Add filter group": "Додати групу фільтрів", - "Comparision": "Порівняння", - "is": "дорівнює", - "is not": "не дорівнює", - "contains": "містить", - "does not contain": "не містить", - "starts with": "починається з", - "not starts with": "не починається з", - "ends with": "закінчується на", - "not ends with": "не закінчується на", - "is empty": "порожнє", - "is not empty": "не порожнє", - "Edit chart": "Редагувати діаграму", - "Add text": "Додати текст", - "Filterable fields": "Поля, за якими можна фільтрувати", - "Edit button": "Редагувати кнопку", - "Hide": "Сховати", - "Enable actions": "Увімкнути дії", - "Import": "Імпортувати", - "Export": "Експортувати", - "Customize": "Налаштувати", - "Function": "Функція", - "Popup form": "Випливаюча форма", - "Flexible popup": "Гнучка випливаюча", - "Configure actions": "Налаштувати дії", - "Display order number": "Показувати номер порядку", - "Enable drag and drop sorting": "Увімкнути сортування перетягуванням", - "Triggered when the row is clicked": "Спрацьовує при кліку на рядок", - "Add tab": "Додати вкладку", - "Disable tabs": "Вимкнути вкладки", - "Details": "Деталі", - "Edit tab": "Редагувати вкладку", - "Relationship blocks": "Блоки зв'язків", - "Select record": "Вибрати запис", - "Display name": "Відображуване ім'я", - "Select icon": "Вибрати значок", - "Custom column name": "Власна назва стовпця", - "Edit description": "Редагувати опис", - "Required": "Обов'язкове", - "Unique": "Унікальне", - "Label field": "Поле-мітка", - "Default is the ID field": "За замовчуванням - це поле ID", - "Set default sorting rules": "Встановити правила сортування за замовчуванням", - "Set validation rules": "Встановити правила перевірки", - "Max length": "Максимальна довжина", - "Min length": "Мінімальна довжина", - "Maximum": "Максимум", - "Minimum": "Мінімум", - "Max length must greater than min length": "Максимальна довжина повинна бути більшою за мінімальну", - "Min length must less than max length": "Мінімальна довжина повинна бути меншою за максимальну", - "Maximum must greater than minimum": "Максимум повинен бути більшим за мінімум", - "Minimum must less than maximum": "Мінімум повинен бути меншим за максимум", - "Validation rule": "Правило перевірки", - "Add validation rule": "Додати правило перевірки", - "Format": "Формат", - "Regular expression": "Регулярний вираз", - "Error message": "Повідомлення про помилку", - "Length": "Довжина", - "The field value cannot be greater than ": "Значення поля не може бути більше ніж ", - "The field value cannot be less than ": "Значення поля не може бути менше ніж ", - "The field value is not an integer number": "Значення поля не є цілим числом", - "Set default value": "Встановити значення за замовчуванням", - "Default value": "Значення за замовчуванням", - "is before": "перед", - "is after": "після", - "is on or after": "на або після", - "is on or before": "на або перед", - "is between": "знаходиться між", - "Upload": "Завантажити", - "Select level": "Вибрати рівень", - "Province": "Область", - "City": "Місто", - "Area": "Район", - "Street": "Вулиця", - "Village": "Село", - "Must select to the last level": "Потрібно вибрати до останнього рівня", - "Move {{title}} to": "Перемістити {{title}} до", - "Target position": "Цільова позиція", - "After": "Після", - "Before": "До", - "Add {{type}} before \"{{title}}\"": "Додати {{type}} перед \"{{title}}\"", - "Add {{type}} after \"{{title}}\"": "Додати {{type}} після \"{{title}}\"", - "Add {{type}} in \"{{title}}\"": "Додати {{type}} в \"{{title}}\"", - "Original name": "Оригінальна назва", - "Custom name": "Власна назва", - "Custom Title": "Власний заголовок", - "Options": "Опції", - "Option value": "Значення опції", - "Option label": "Мітка опції", - "Color": "Колір", - "Add option": "Додати опцію", - "Related collection": "Пов'язана колекція", - "Allow linking to multiple records": "Дозволити зв'язок з кількома записами", - "Allow uploading multiple files": "Дозволити завантаження кількох файлів", - "Configure calendar": "Налаштувати календар", - "Title field": "Поле назви", - "Custom title": "Власна назва", - "Show lunar": "Показувати місячний календар", - "Start date field": "Поле початкової дати", - "End date field": "Поле кінцевої дати", - "Navigate": "Навігувати", - "Title": "Назва", - "Description": "Опис", - "Select view": "Вибрати вид", - "Reset": "Скинути", - "Importable fields": "Поля, які можна імпортувати", - "Exportable fields": "Поля, які можна експортувати", - "Saved successfully": "Успішно збережено", - "Nickname": "Псевдонім", - "Sign in": "Увійти", - "Sign in via account": "Увійти через акаунт", - "Sign in via phone": "Увійти через телефон", - "Create an account": "Створити обліковий запис", - "Sign up": "Зареєструватися", - "Confirm password": "Підтвердити пароль", - "Log in with an existing account": "Увійти з існуючим обліковим записом", - "Signed up successfully. It will jump to the login page.": "Успішно зареєстровано. Відбудеться перехід на сторінку входу.", - "Password mismatch": "Помилка пароля", - "Users": "Користувачі", - "Verification code": "Код підтвердження", - "Send code": "Надіслати код", - "Retry after {{count}} seconds": "Повторіть спробу через {{count}} секунди", - "Roles": "Ролі", - "Add role": "Додати роль", - "Role name": "Назва ролі", - "Configure": "Налаштувати", - "Configure permissions": "Налаштувати дозволи", - "Edit role": "Редагувати роль", - "Action permissions": "Дозволи на дії", - "Menu permissions": "Дозволи на меню", - "Menu item name": "Назва пункту меню", - "Allow access": "Дозволити доступ", - "Action name": "Назва дії", - "Allow action": "Дозволити дію", - "Action scope": "Область дії", - "Operate on new data": "Робота з новими даними", - "Operate on existing data": "Робота з існуючими даними", - "Yes": "Так", - "No": "Ні", - "Red": "Червоний", - "Magenta": "Пурпурний", - "Volcano": "Вулкан", - "Orange": "Помаранчевий", - "Gold": "Золотий", - "Lime": "Лайм", - "Green": "Зелений", - "Cyan": "Блакитний", - "Blue": "Синій", - "Geek blue": "Голубий", - "Purple": "Фіолетовий" - "Default": "Default", - "Add card": "Add card", - "edit title": "edit title", - "Turn pages": "Turn pages", - "Others": "Others", - "Save as template": "Save as template", - "Save as block template": "Save as block template", - "Block templates": "Block templates", - "Convert reference to duplicate": "Convert reference to duplicate", - "Template name": "Template name", - "Block type": "Block type", - "No blocks to connect": "No blocks to connect", - "Action column": "Action column", - "Records per page": "Records per page", - "(Fields only)": "(Fields only)", - "Button title": "Button title", - "Button icon": "Button icon", - "Submitted successfully": "Submitted successfully", - "Operation succeeded": "Operation succeeded", - "Operation failed": "Operation failed", - "Open mode": "Open mode", - "Popup size": "Popup size", - "Small": "Small", - "Middle": "Middle", - "Large": "Large", - "Menu item title": "Menu item title", - "Menu item icon": "Menu item icon", - "Target": "Target", - "Position": "Position", - "Insert before": "Insert before", - "Insert after": "Insert after", - "UI Editor": "UI Editor", - "ASC": "ASC", - "DESC": "DESC", - "Add sort field": "Add sort field", - "ID": "ID", - "Identifier for program usage. Support letters, numbers and underscores, must start with an letter.": "Identifier for program usage. Support letters, numbers and underscores, must start with an letter.", - "Drawer": "Drawer", - "Dialog": "Dialog", - "Delete action": "Delete action", - "Custom column title": "Custom column title", - "Original title: ": "Original title: ", - "Delete table column": "Delete table column", - "Skip required validation": "Skip required validation", - "Form values": "Form values", - "Fields values": "Fields values", - "When submitting the following fields, the saved values are": "When submitting the following fields, the saved values are", - "After successful submission": "After successful submission", - "Then": "Then", - "Stay on current page": "Stay on current page", - "Redirect to": "Redirect to", - "Save action": "Save action", - "Exists": "Exists", - "Filename": "Filename", - "Add condition": "Add condition", - "Add condition group": "Add condition group", - "exists": "exists", - "not exists": "not exists", - "=": "=", - "≠": "≠", - ">": ">", - "≥": "≥", - "<": "<", - "≤": "≤", - "Role UID": "Role UID", - "Precision": "Precision", - "Formula mode": "Formula mode", - "Expression": "Expression", - "Input +, -, *, /, ( ) to calculate, input @ to open field variables.": "Input +, -, *, /, ( ) to calculate, input @ to open field variables.", - "Formula error.": "Formula error.", - "Accept": "Accept", - "Rich Text": "Rich Text", - "Junction collection": "Junction collection", - "Leave it blank, unless you need a custom intermediate table": "Leave it blank, unless you need a custom intermediate table", - "Fields": "Fields", - "Edit field title": "Edit field title", - "Field title": "Field title", - "Original field title: ": "Original field title: ", - "Edit tooltip": "Edit tooltip", - "Delete field": "Delete field", - "Select collection": "Select collection", - "Blank block": "Blank block", - "Duplicate template": "Duplicate template", - "Reference template": "Reference template", - "Create calendar block": "Create calendar block", - "Create kanban block": "Create kanban block", - "Grouping field": "Grouping field", - "Single select and radio fields can be used as the grouping field": "Single select and radio fields can be used as the grouping field", - "Tab name": "Tab name", - "Current record blocks": "Current record blocks", - "Popup message": "Popup message", - "Delete role": "Delete role", - "Role display name": "Role display name", - "Default role": "Default role", - "All collections use general action permissions by default; permission configured individually will override the default one.": "All collections use general action permissions by default; permission configured individually will override the default one.", - "Allows configuration of the whole system, including UI, collections, permissions, etc.": "Allows configuration of the whole system, including UI, collections, permissions, etc.", - "New menu items are allowed to be accessed by default.": "New menu items are allowed to be accessed by default.", - "Global permissions": "Global permissions", - "General permissions": "General permissions", - "Global action permissions": "Global action permissions", - "General action permissions": "General action permissions", - "Plugin settings permissions": "Plugin settings permissions", - "Allow to design pages": "Allow to design pages", - "Allow to manage plugins": "Allow to manage plugins", - "Allow to configure plugins": "Allow to configure plugins", - "Allows to configure interface": "Allows to configure interface", - "Allows to install, activate, disable plugins": "Allows to install, activate, disable plugins", - "Allows to configure plugins": "Allows to configure plugins", - "Action display name": "Action display name", - "Allow": "Allow", - "Data scope": "Data scope", - "Action on new records": "Action on new records", - "Action on existing records": "Action on existing records", - "All records": "All records", - "Own records": "Own records", - "Permission policy": "Permission policy", - "Individual": "Individual", - "General": "General", - "Accessible": "Accessible", - "Configure permission": "Configure permission", - "Action permission": "Action permission", - "Field permission": "Field permission", - "Scope name": "Scope name", - "File storages": "File storages", - "Storage display name": "Storage display name", - "Storage name": "Storage name", - "Default storage": "Default storage", - "Add storage": "Add storage", - "Edit storage": "Edit storage", - "Storage base URL": "Storage base URL", - "Destination": "Destination", - "Use the built-in static file server": "Use the built-in static file server", - "Local storage": "Local storage", - "Aliyun OSS": "Aliyun OSS", - "Amazon S3": "Amazon S3", - "Tencent COS": "Tencent COS", - "Region": "Region", - "Bucket": "Bucket", - "Path": "Path", - "Unsaved changes": "Unsaved changes", - "Are you sure you don't want to save?": "Are you sure you don't want to save?", - "Dragging": "Dragging", - "Popup": "Popup", - "Trigger workflow": "Trigger workflow", - "Request API": "Request API", - "Assign field values": "Assign field values", - "Constant value": "Constant value", - "Dynamic value": "Dynamic value", - "Current user": "Current user", - "Current record": "Current record", - "Current time": "Current time", - "System variables": "System variables", - "Date variables": "Date variables", - "Popup close method": "Popup close method", - "Automatic close": "Automatic close", - "Manually close": "Manually close", - "After successful update": "After successful update", - "Save record": "Save record", - "Updated successfully": "Updated successfully", - "After successful save": "After successful save", - "After clicking the custom button, the following field values will be assigned according to the following form.": "After clicking the custom button, the following field values will be assigned according to the following form.", - "After clicking the custom button, the following fields of the current record will be saved according to the following form.": "After clicking the custom button, the following fields of the current record will be saved according to the following form.", - "Button background color": "Button background color", - "Highlight": "Highlight", - "Danger red": "Danger red", - "Custom request": "Custom request", - "Request settings": "Request settings", - "Request URL": "Request URL", - "Request method": "Request method", - "Request query parameters": "Request query parameters", - "Request headers": "Request headers", - "Request body": "Request body", - "Request success": "Request success", - "Invalid JSON format": "Invalid JSON format", - "After successful request": "After successful request", - "Add exportable field": "Add exportable field", - "Audit logs": "Audit logs", - "Record ID": "Record ID", - "User": "User", - "Field": "Field", - "Select": "Select", - "Select Field": "Select Field", - "Field value changes": "Field value changes", - "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": "Use the same time zone (GMT) for all users", - "Province/city/area name": "Province/city/area name", - "Enabled languages": "Enabled languages", - "View all plugins": "View all plugins", - "Print": "Print", - "Done": "Done", - "Sign up successfully, and automatically jump to the sign-in page": "Sign up successfully, and automatically jump to the sign-in page", - "File manager": "File manager", - "ACL": "ACL", - "Collection manager": "Collection manager", - "Plugin manager": "Plugin manager", - "Local": "Local", - "Built-in": "Built-in", - "Marketplace": "Marketplace", - "Coming soon...": "Coming soon...", - "All plugin settings": "Усі налаштування плагіна", - "Bookmark": "Закладка", - "Manage all settings": "Керувати всіма налаштуваннями", - "Create inverse field in the target collection": "Створити зворотнє поле в цільовій колекції", - "Inverse field name": "Назва зворотнього поля", - "Inverse field display name": "Відображувана назва зворотнього поля", - "Bulk update": "Масове оновлення", - "After successful bulk update": "Після успішного масового оновлення", - "Bulk edit": "Масове редагування", - "Data will be updated": "Дані будуть оновлені", - "Selected": "Вибрані", - "All": "Усі", - "Update selected data?": "Оновити вибрані дані?", - "Update all data?": "Оновити усі дані?", - "Remains the same": "Залишається без змін", - "Changed to": "Змінено на", - "Clear": "Очистити", - "Add attach": "Додати вкладення", - "Please select the records to be updated": "Будь ласка, виберіть записи для оновлення", - "Selector": "Селектор", - "Inner": "Внутрішній", - "Search and select collection": "Пошук та вибір колекції", - "Please fill in the iframe URL": "Будь ласка, заповніть URL-адресу для iframe", - "Fix block": "Виправити блок", - "Plugin name": "Назва плагіна", - "Plugin tab name": "Назва вкладки плагіна", - "AutoGenId": "Автоматично створений ідентифікатор", - "CreatedBy": "Записує ідентифікатор створеного користувача", - "UpdatedBy": "Записує ідентифікатор останнього оновленого користувача", - "CreatedAt": "Записує дату створення рядка", - "UpdatedAt": "Записує дату останнього оновлення рядка" - }, - "error-handler": { - "unique violation": "{{field}} має бути унікальним", - "notNull violation": "порушення notNull", - "Validation error": "Помилка перевірки {{field}}", - "notNull Violation": "{{field}} не може бути порожнім" - }, - "collection-manager": {}, - "ui-schema-storage": {}, - "ui-routes-storage": {}, - "file-manager": {}, - "system-settings": {}, - "sequence-field": { - "Sequence": "Послідовність", - "Sequence rules": "Правила послідовності", - "Add rule": "Додати правило", - "Inputable": "Можливість введення", - "Match rules": "Правила відповідності", - "Type": "Тип", - "Autoincrement": "Автоінкремент", - "Fixed text": "Фіксований текст", - "Text content": "Текстовий вміст", - "Rule content": "Вміст правила", - "{{value}} Digits": "{{value}} цифри", - "Digits": "Цифри", - "Start from": "Почати з", - "Starts from {{value}}": "Починається з {{value}}", - "Reset cycle": "Період скидання", - "No reset": "Без скидання", - "Daily": "Щоденно", - "Every Monday": "Щовівторка", - "Monthly": "Щомісячно", - "Yearly": "Щорічно", - "Operations": "Операції", - "Customize": "Налаштувати" - }, - "verification": { - "Verification": "Перевірка", - "Verification providers": "Постачальники перевірки", - "Provider type": "Тип постачальника", - "Aliyun SMS": "Aliyun SMS", - "Access Key ID": "Ідентифікатор ключа доступу", - "Access Key Secret": "Секретний ключ доступу", - "Endpoint": "Точка доступу", - "Sign": "Підпис", - "Template code": "Код шаблону", - "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": "Недійсний код перевірки" - }, - "users": { - "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": "Цей номер телефону не зареєстровано, будь ласка, спочатку зареєструйтесь" - }, - "acl": {}, - "china-region": {}, - "workflow": { - "Workflow": "Робочий процес", - "Execution history": "Історія виконання", - "Executed": "Виконано", - "Trigger type": "Тип тригера", - "Status": "Статус", - "On": "Увімкнено", - "Off": "Вимкнено", - "Version": "Версія", - "Copy to new version": "Копіювати до нової версії", - "Duplicate": "Дублювати", - "Loading": "Завантаження", - "Load failed": "Помилка завантаження", - "Trigger": "Тригер", - "Trigger variables": "Змінні тригера", - "Trigger data": "Дані тригера", - "Trigger time": "Час тригера", - "Triggered at": "Активовано о", - "Collection event": "Подія колекції", - "Trigger on": "Тригер на", - "After record added": "Після додавання запису", - "After record updated": "Після оновлення запису", - "After record added or updated": "Після додавання або оновлення запису", - "After record deleted": "Після видалення запису", - "Changed fields": "Змінені поля", - "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.": "Тригер активується тільки якщо змінюється одне з обраних полів. Якщо поле не вибрано, це означає, що воно буде активуватись при зміні будь-якого поля. При додаванні або видаленні запису будь-яке поле вважається зміненим.", - "Only triggers when match conditions": "Активується тільки при відповідності умовам", - "Schedule event": "Подія розкладу", - "Trigger mode": "Режим тригера", - "Based on certain date": "На підставі певної дати", - "Based on date field of collection": "На підставі поля дати колекції", - "Starts on": "Починається в", - "Ends on": "Закінчується в", - "No end": "Без закінчення", - "Exactly at": "Точно о", - "Repeat mode": "Режим повторення", - "Repeat limit": "Обмеження повторення", - "No limit": "Без обмежень", - "Seconds": "Секунди", - "Minutes": "Хвилини", - "Hours": "Години", - "Days": "Дні", - "Weeks": "Тижні", - "Months": "Місяці", - "No repeat": "Без повторення", - "Every": "Кожен", - "By minute": "Кожну хвилину", - "By hour": "Кожну годину", - "By day": "Кожен день", - "By week": "Кожен тиждень", - "By month": "Кожен місяць", - "By field": "За полем", - "By custom date": "За налаштованою датою", - "Advanced": "Розширений", - "End": "Кінець", - "Node result": "Результат вузла", - "Constant": "Константа", - "Null": "Null", - "Boolean": "Boolean", - "String": "Рядок", - "Calculator": "Калькулятор", - "Arithmetic calculation": "Арифметичний розрахунок", - "String operation": "Рядкова операція", - "Executed at": "Виконано о", - "Queueing": "У черзі", - "On going": "В процесі", - "Succeeded": "Успішно", - "Failed": "Не вдалося", - "Pending": "Очікування", - "Canceled": "Скасовано", - "This node contains branches, deleting will also be preformed to them, are you sure?": "Цей вузол містить гілки, видалення також буде застосовано до них, ви впевнені?", - "Control": "Управління", - "Collection operations": "Операції з колекціями", - "Extended types": "Розширені типи", - "Node type": "Тип вузла", - "Calculation": "Розрахунок", - "Configure calculation": "Налаштувати розрахунок", - "Calculation result": "Результат розрахунку", - "True": "True", - "False": "False", - "concat": "concat", - "Condition": "Умова", - "Mode": "Режим", - "Continue when \"Yes\"": "Продовжити коли \"Так\"", - "Branch into \"Yes\" and \"No\"": "Гілка у \"Так\" і \"Ні\"", - "Conditions": "Умови", - "Parallel branch": "Паралельна гілка", - "Add branch": "Додати гілку", - "All succeeded": "Всі успішні", - "Any succeeded": "Будь-який успішний", - "Any succeeded or failed": "Будь-який успішний або неуспішний", - "Continue after all branches succeeded": "Продовжити після успішного виконання всіх гілок", - "Continue after any branch succeeded": "Продовжити після успішного виконання будь-якої гілки", - "Continue after any branch succeeded, or exit after any branch failed": "Продовжити після успішного виконання будь-якої гілки, або вийти після неуспішного виконання будь-якої гілки", - "Delay": "Затримка", - "Duration": "Тривалість", - "End Status": "Статус закінчення", - "Select status": "Виберіть статус", - "Succeed and continue": "Успішно і продовжити", - "Fail and exit": "Помилка та вихід", - "Create record": "Створити запис", - "Update record": "Оновити запис", - "Query record": "Запит запису", - "Multiple records": "Кілька записів", - "Please select collection first": "Будь ласка, спочатку виберіть колекцію", - "Only update records matching 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.": "Полям, які не мають значення, буде присвоєно значення за замовчуванням, а тим, які не мають значення за замовчуванням, буде присвоєно значення null.", - "Trigger in executed workflow cannot be modified": "Тригер виконаного робочого процесу не може бути змінений", - "Node in executed workflow cannot be modified": "Вузол виконаного робочого процесу не може бути змінений", - "Can not delete": "Неможливо видалити", - "The result of this node has been referenced by other nodes ({{nodes}}), please remove the usage before deleting.": "Результат цього вузла використовується іншими вузлами ({{nodes}}), будь ласка, видаліть це використання перед видаленням.", - "HTTP request": "HTTP-запит", - "URL": "URL", - "You can use the above available variables in URL.": "Ви можете використовувати вищезазначені доступні змінні у URL.", - "Request headers": "Заголовки запиту", - "Name(e.g. Content-Type)": "Назва (наприклад, Content-Type)", - "Value(e.g. Application/json)": "Значення (наприклад, Application/json)", - "Add request header": "Додати заголовок запиту", - "HTTP method": "HTTP-метод", - "Request data": "Дані запиту", - "Input request data": "Введіть дані запиту", - "You can use the above available variables in request data.": "Ви можете використовувати вищезазначені доступні змінні у даних запиту.", - "Copy success!": "Копіювання успішне!", - "Copy variable output template statement": "Копіювати шаблон виразу виводу змінної", - "Default headers is Content-Type: application/json": "Заголовки за замовчуванням: Content-Type: application/json", - "Ignore fail request and continue workflow": "Ігнорувати невдалий запит і продовжити робочий процес", - "Syntax see": "Дивіться синтаксис", - "Show available variable tool": "Показати інструмент доступних змінних" - }, - "export": {}, - "import": { - "Only one file is allowed to be uploaded": "Дозволено завантажувати лише один файл", - "File size cannot exceed 10M": "Розмір файлу не може перевищувати 10 Мб", - "Please upload the file of Excel": "Будь ласка, завантажте файл Excel", - "Import Data": "Імпорт даних", - "Start import": "Почати імпорт", - "Import explain": "Інструкція", - "Download template": "Завантажити шаблон", - "Step 1: Download template": "Крок 1: Завантажити шаблон", - "Step 2: Upload Excel": "Крок 2: Завантажити Excel", - "Download tip": "- Завантажте шаблон і заповніть дані у відповідності до формату \r\n - Імпортувати лише перший аркуш \r\n - Підтримка одночасного імпорту до 10 000 рядків даних \r\n - Не змінюйте заголовок шаблону, щоб уникнути проблем з імпортом", - "Upload placeholder": "Перетягніть файл сюди або клацніть, щоб завантажити, розмір файлу не повинен перевищувати 10 Мб", - "Excel data importing": "Імпорт даних з Excel", - "Import done, total success have {{successCount}} , total failure have {{failureCount}}": "Імпорт завершено, загалом успішних: {{successCount}}, загалом невдалих: {{failureCount}}", - "To download the failure data": "Для завантаження даних про невдачі", - "Add importable field": "Додати поле для імпорту", - "Done": "Готово", - "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": "Неприпустимий формат відсотка" - }, - "audit-logs": {}, - "iframe-block": {}, - "graph-collection-manager": { - "Graph Collection": "Графічна колекція", - "Collection List": "Список колекцій", - "Full Screen": "На весь екран", - "Collection Search": "Пошук колекції", - "Create Collection": "Створити колекцію", - "All Fields": "Всі поля", - "Association Fields": "Поля асоціацій", - "All relationships": "Всі взаємозв'язки", - "Entity relationship only": "Тільки відношення сутностей", - "Inheritance relationship only": "Тільки відношення успадкування", - "Graphical interface": "Графічний інтерфейс", - "Auto layout": "Автоматичне розташування", - "Selection": "Вибір" - }, - "sample-hello": {}, - "oidc": { - "Issuer": "Видавець", - "Enable": "Увімкнути", - "Actions": "Дії", - "Delete": "Видалити", - "Edit": "Редагувати", - "Button title": "Заголовок кнопки", - "OIDC manager": "Менеджер OIDC", - "OIDC Providers": "Постачальники OIDC", - "Provider name": "Назва", - "Client id": "Ідентифікатор клієнта", - "Client secret": "Секрет клієнта", - "Openid configuration": "Конфігурація OpenID", - "Authorization endpoint": "Кінцева точка авторизації", - "Access token endpoint": "Кінцева точка отримання токену доступу", - "JWKS endpoint": "Кінцева точка JWKS", - "Userinfo endpoint": "Кінцева точка інформації про користувача", - "Redirect url": "URL перенаправлення", - "Logout endpoint": "Кінцева точка виходу", - "Id token sign alg": "Алгоритм підпису токену ідентифікації", - "Add provider": "Додати", - "Edit provider": "Редагувати", - "Delete provider": "Видалити", - "Sign in button name, which will be displayed on the sign in page": "Назва кнопки входу, яка буде відображатися на сторінці входу" - }, - "saml": { - "Edit": "Редагувати", - "Delete": "Видалити", - "Cancel": "Скасувати", - "Submit": "Надіслати", - "Actions": "Дії", - "Title": "Заголовок", - "Enable": "Увімкнути", - "Button title": "Заголовок кнопки", - "SAML manager": "Менеджер SAML", - "SAML Providers": "Постачальники SAML", - "Redirect url": "URL перенаправлення", - "SP entity id": "Ідентифікатор сутності SP", - "Add provider": "Додати", - "Edit provider": "Редагувати", - "Client id": "Ідентифікатор клієнта", - "Entity id or issuer": "Ідентифікатор сутності або видавець", - "Login Url": "URL входу", - "Public cert": "Публічний сертифікат", - "Delete provider": "Видалити", - "Are you sure you want to delete it?": "Ви впевнені, що хочете видалити це?", - "Sign in button name, which will be displayed on the sign in page": "Назва кнопки входу, яка буде відображатися на сторінці входу" - }, - "map": { - "Map-based geometry": "Геометрія на основі карти", - "Map type": "Тип карти", - "Point": "Точка", - "Line": "Лінія", - "Circle": "Коло", - "Polygon": "Багатокутник", - "Access key": "Ключ доступу", - "securityJsCode or serviceHost": "securityJsCode або serviceHost", - "AMap": "AMap", - "Google Maps": "Google Maps", - "Clear": "Очистити", - "Click to select the starting point and double-click to end the drawing": "Клацніть, щоб вибрати початкову точку, а подвійний клацок - для завершення малювання", - "Clear the canvas": "Очистити полотно", - "Are you sure to clear the canvas?": "Ви впевнені, що хочете очистити полотно?", - "Confirm": "Підтвердити", - "Cancel": "Скасувати", - "Enter keywords to search": "Введіть ключові слова для пошуку", - "The AccessKey is incorrect, please check it": "Неправильний AccessKey, перевірте його", - "Please configure the AMap securityCode or serviceHost correctly": "Будь ласка, належним чином налаштуйте securityCode або serviceHost AMap", - "Map Manager": "Менеджер карти", - "Configuration": "Налаштування", - "Saved successfully": "Успішно збережено", - "Saved failed": "Не вдалося зберегти", - "Edit": "Редагувати", - "Save": "Зберегти", - "Please configure the AccessKey and SecurityJsCode first": "Спочатку налаштуйте AccessKey та SecurityJsCode", - "Go to the configuration page": "Перейти до сторінки налаштувань", - "Zoom": "Масштаб", - "Set default zoom level": "Встановити масштаб за замовчуванням", - "The default zoom level of the map": "Масштаб за замовчуванням карти", - "Edit field title": "Редагувати заголовок поля", - "Field title": "Заголовок поля", - "Edit tooltip": "Редагувати підказку", - "Delete field": "Видалити поле", - "Required": "Обов'язкове", - "Pattern": "Шаблон", - "operater": "operater", - "Editable": "Редагований", - "Readonly": "Тільки читання", - "Easy-reading": "Легке читання", - "Edit description": "Редагувати опис" - }, - "snapshot-field": { - "Detail": "Деталь", - "Snapshot": "Знімок", - "Add block": "Додати блок", - "Snapshot to description": "Використовується для створення знімка таблиці, збереження поточних даних вказаної таблиці тільки при створенні запису, і вони не будуть оновлюватись пізніше.", - "View record": "Переглянути запис", - "Allow linking to multiple records": "Дозволити посилання на кілька записів", - "Target collection": "Цільова колекція" - }, - "duplicator": { - "Select Import data": "Вибрати дані для імпорту", - "Select Import Plugins": "Вибрати плагіни для імпорту", - "Select User Collections": "Вибрати колекції користувача", - "Basic Data": "Основні дані", - "Optional Data": "Додаткові дані", - "User Data": "Дані користувача" - }, - "math-formula-field": {}, - "excel-formula-field": {} - }, - "antd": { - "locale": "uk", - "Pagination": { - "items_per_page": "/ сторінку", - "jump_to": "Перейти до", - "jump_to_confirm": "Підтвердити", - "page": "Сторінка", - "prev_page": "Попередня сторінка", - "next_page": "Наступна сторінка", - "prev_5": "Попередні 5 сторінок", - "next_5": "Наступні 5 сторінок", - "prev_3": "Попередні 3 сторінки", - "next_3": "Наступні 3 сторінки", - "page_size": "Розмір сторінки" - }, - "DatePicker": { - "lang": { - "placeholder": "Оберіть дату", - "yearPlaceholder": "Оберіть рік", - "quarterPlaceholder": "Оберіть квартал", - "monthPlaceholder": "Оберіть місяць", - "weekPlaceholder": "Оберіть тиждень", - "rangePlaceholder": ["Початкова дата", "Кінцева дата"], - "rangeYearPlaceholder": ["Початковий рік", "Кінцевий рік"], - "rangeQuarterPlaceholder": ["Початковий квартал", "Кінцевий квартал"], - "rangeMonthPlaceholder": ["Початковий місяць", "Кінцевий місяць"], - "rangeWeekPlaceholder": ["Початковий тиждень", "Кінцевий тиждень"], - "locale": "uk", - "today": "Сьогодні", - "now": "Зараз", - "backToToday": "Повернутися до сьогодні", - "ok": "OK", - "clear": "Очистити", - "month": "Місяць", - "year": "Рік", - "timeSelect": "вибрати час", - "dateSelect": "вибрати дату", - "weekSelect": "Виберіть тиждень", - "monthSelect": "Виберіть місяць", - "yearSelect": "Виберіть рік", - "decadeSelect": "Виберіть десятиліття", - "yearFormat": "YYYY", - "dateFormat": "M/D/YYYY", - "dayFormat": "D", - "dateTimeFormat": "M/D/YYYY HH:mm:ss", - "monthBeforeYear": true, - "previousMonth": "Попередній місяць (PageUp)", - "nextMonth": "Наступний місяць (PageDown)", - "previousYear": "Попередній рік (Control + вліво)", - "nextYear": "Наступний рік (Control + вправо)", - "previousDecade": "Попереднє десятиліття", - "nextDecade": "Наступне десятиліття", - "previousCentury": "Попереднє століття", - "nextCentury": "Наступне століття" - }, - "timePickerLocale": { "placeholder": "Виберіть час", "rangePlaceholder": ["Час початку", "Час завершення"] } - }, - "TimePicker": { "placeholder": "Виберіть час", "rangePlaceholder": ["Час початку", "Час завершення"] }, - "Calendar": { - "lang": { - "placeholder": "Оберіть дату", - "yearPlaceholder": "Оберіть рік", - "quarterPlaceholder": "Оберіть квартал", - "monthPlaceholder": "Оберіть місяць", - "weekPlaceholder": "Оберіть тиждень", - "rangePlaceholder": ["Початкова дата", "Кінцева дата"], - "rangeYearPlaceholder": ["Початковий рік", "Кінцевий рік"], - "rangeQuarterPlaceholder": ["Початковий квартал", "Кінцевий квартал"], - "rangeMonthPlaceholder": ["Початковий місяць", "Кінцевий місяць"], - "rangeWeekPlaceholder": ["Початковий тиждень", "Кінцевий тиждень"], - "locale": "en_US", - "today": "Сьогодні", - "now": "Зараз", - "backToToday": "Повернутись до сьогодні", - "ok": "OK", - "clear": "Очистити", - "month": "Місяць", - "year": "Рік", - "timeSelect": "виберіть час", - "dateSelect": "виберіть дату", - "weekSelect": "Обрати тиждень", - "monthSelect": "Обрати місяць", - "yearSelect": "Обрати рік", - "decadeSelect": "Обрати десятиліття", - "yearFormat": "YYYY", - "dateFormat": "M/D/YYYY", - "dayFormat": "D", - "dateTimeFormat": "M/D/YYYY HH:mm:ss", - "monthBeforeYear": true, - "previousMonth": "Попередній місяць (PageUp)", - "nextMonth": "Наступний місяць (PageDown)", - "previousYear": "Попередній рік (Control + вліво)", - "nextYear": "Наступний рік (Control + вправо)", - "previousDecade": "Попереднє десятиліття", - "nextDecade": "Наступне десятиліття", - "previousCentury": "Попереднє століття", - "nextCentury": "Наступне століття" - }, - "timePickerLocale": { "placeholder": "Select time", "rangePlaceholder": ["Час початку", "Час завершення"] } - }, - "global": { "placeholder": "Please select" }, - "Table": { - "filterTitle": "Меню фільтрів", - "filterConfirm": "OK", - "filterReset": "Скинути", - "filterEmptyText": "Без фільтрів", - "filterCheckall": "Вибрати всі елементи", - "filterSearchPlaceholder": "Шукати у фільтрах", - "emptyText": "Немає даних", - "selectAll": "Вибрати поточну сторінку", - "selectInvert": "Інвертувати поточну сторінку", - "selectNone": "Очистити всі дані", - "selectionAll": "Виділити всі дані", - "sortTitle": "Сортувати", - "expand": "Розгорнути рядок", - "collapse": "Згорнути рядок", - "triggerDesc": "Натисніть, щоб відсортувати за спаданням", - "triggerAsc": "Натисніть для сортування за зростанням", - "cancelSort": "Натисніть, щоб скасувати сортування" - }, - "Modal": { "okText": "OK", "cancelText": "Cancel", "justOkText": "OK" }, - "Popconfirm": { "okText": "OK", "cancelText": "Cancel" }, - "Transfer": { - "titles": ["", ""], - "searchPlaceholder": "Пошук", - "itemUnit": "елемент", - "itemsUnit": "елементи", - "remove": "Видалити", - "selectCurrent": "Вибрати поточну сторінку", - "removeCurrent": "Видалити поточну сторінку", - "selectAll": "Вибрати всі дані", - "removeAll": "Видалити всі дані", - "selectInvert": "Інвертувати поточну сторінку" - }, - "Upload": { - "uploading": "Завантаження...", - "removeFile": "Видалити файл", - "uploadError": "Помилка завантаження", - "previewFile": "Попередній перегляд файлу", - "downloadFile": "Завантажити файл" - }, - "Empty": { "description": "Немає даних" }, - "Icon": { "icon": "іконка" }, - "Text": { "edit": "Редагувати", "copy": "Копіювати", "copied": "Скопійовано", "expand": "Розгорнути" }, - "PageHeader": { "back": "Назад" }, - "Form": { - "optional": "(необов'язково)", - "defaultValidateMessages": { - "default": "Помилка перевірки поля ${label}", - "required": "Будь ласка, введіть ${label}", - "enum": "${label} повинно бути одним із [${enum}]", - "whitespace": "${label} не може бути пробілом" - "date": { - "format": "Невірний формат дати для поля ${label}", - "parse": "${label} не може бути перетворено у дату", - "invalid": "${label} є неприпустимою датою" - }, - "types": { - "string": "${label} не є допустимим ${type}", - "method": "${label} не є допустимим ${type}", - "array": "${label} не є допустимим ${type}", - "object": "${label} не є допустимим ${type}", - "number": "${label} не є допустимим ${type}", - "date": "${label} не є допустимим ${type}", - "boolean": "${label} не є допустимим ${type}", - "integer": "${label} не є допустимим ${type}", - "float": "${label} не є допустимим ${type}", - "regexp": "${label} не є допустимим ${type}", - "email": "${label} не є допустимим ${type}", - "url": "${label} не є допустимим ${type}", - "hex": "${label} не є допустимим ${type}" - }, - "string": { - "len": "${label} повинно містити ${len} символів", - "min": "${label} повинно містити принаймні ${min} символів", - "max": "${label} може містити до ${max} символів", - "range": "${label} повинно містити від ${min} до ${max} символів" - }, - "number": { - "len": "${label} повинно бути рівним ${len}", - "min": "${label} повинно бути не менше ${min}", - "max": "${label} повинно бути не більше ${max}", - "range": "${label} повинно бути в межах від ${min} до ${max}" - }, - "array": { - "len": "Повинно бути ${len} ${label}", - "min": "Мінімум ${min} ${label}", - "max": "Максимум ${max} ${label}", - "range": "Кількість ${label} повинна бути в діапазоні від ${min} до ${max}" - }, - "pattern": { "mismatch": "${label} не відповідає шаблону ${pattern}" } - } - }, - "Image": { "preview": "Перегляд" } - }, - "cronstrue": { - "atX0SecondsPastTheMinuteGt20": null, - "atX0MinutesPastTheHourGt20": null, - "commaMonthX0ThroughMonthX1": null, - "commaYearX0ThroughYearX1": null, - "use24HourTimeFormatByDefault": false, - "anErrorOccuredWhenGeneratingTheExpressionD": "Під час генерації опису виразу сталася помилка. Перевірте синтаксис виразу cron.", - "everyMinute": "кожну хвилину", - "everyHour": "кожну годину", - "atSpace": "О ", - "everyMinuteBetweenX0AndX1": "Кожну хвилину між %s і %s", - "at": "О", - "spaceAnd": " і", - "everySecond": "кожну секунду", - "everyX0Seconds": "кожні %s секунд", - "secondsX0ThroughX1PastTheMinute": "секунди від %s до %s після хвилини", - "atX0SecondsPastTheMinute": "о %s секунді після хвилини", - "everyX0Minutes": "кожні %s хвилин", - "minutesX0ThroughX1PastTheHour": "хвилини від %s до %s після години", - "atX0MinutesPastTheHour": "о %s хвилині після години", - "everyX0Hours": "кожні %s годин", - "betweenX0AndX1": "між %s і %s", - "atX0": "о %s", - "commaEveryDay": ", щодня", - "commaEveryX0DaysOfTheWeek": ", щоденно впродовж %s днів тижня", - "commaX0ThroughX1": ", від %s до %s", - "commaAndX0ThroughX1": ", %s до %s", - "first": "перший", - "second": "другий", - "third": "третій", - "fourth": "четвертий", - "fifth": "п'ятий", - "commaOnThe": ", у ", - "spaceX0OfTheMonth": " %s місяця", - "lastDay": "останній день", - "commaOnTheLastX0OfTheMonth": ", на останній %s місяця", - "commaOnlyOnX0": ", тільки в %s", - "commaAndOnX0": ", і в %s", - "commaEveryX0Months": ", кожні %s місяців", - "commaOnlyInX0": ", тільки в %s", - "commaOnTheLastDayOfTheMonth": ", в останній день місяця", - "commaOnTheLastWeekdayOfTheMonth": ", в останній робочий день місяця", - "commaDaysBeforeTheLastDayOfTheMonth": ", %s днів до останнього дня місяця", - "firstWeekday": "перший робочий день", - "weekdayNearestDayX0": "робочий день найближчий до дня %s", - "commaOnTheX0OfTheMonth": ", на %s місяця", - "commaEveryX0Days": ", кожні %s днів", - "commaBetweenDayX0AndX1OfTheMonth": ", між днями %s та %s місяця", - "commaOnDayX0OfTheMonth": ", на %s день місяця", - "commaEveryHour": ", кожну годину", - "commaEveryX0Years": ", кожні %s років", - "commaStartingX0": ", починаючи з %s", - "daysOfTheWeek": ["Неділя", "Понеділок", "Вівторок", "Середа", "Четвер", "П'ятниця", "Субота"], - "monthsOfTheYear": [ - "Січень", - "Лютий", - "Березень", - "Квітень", - "Травень", - "Червень", - "Липень", - "Серпень", - "Вересень", - "Жовтень", - "Листопад", - "Грудень" - ] - }, - "cron": { - "everyText": "кожен", - "emptyMonths": "кожен місяць", - "emptyMonthDays": "кожен день місяця", - "emptyMonthDaysShort": "день місяця", - "emptyWeekDays": "кожен день тижня", - "emptyWeekDaysShort": "день тижня", - "emptyHours": "кожну годину", - "emptyMinutes": "кожну хвилину", - "emptyMinutesForHourPeriod": "кожні", - "yearOption": "рік", - "monthOption": "місяць", - "weekOption": "тиждень", - "dayOption": "день", - "hourOption": "година", - "minuteOption": "хвилина", - "rebootOption": "перезавантаження", - "prefixPeriod": "Кожен", - "prefixMonths": "в", - "prefixMonthDays": "в", - "prefixWeekDays": "в", - "prefixWeekDaysForMonthAndYearPeriod": "і", - "prefixHours": "о", - "prefixMinutes": ":", - "prefixMinutesForHourPeriod": "о", - "suffixMinutesForHourPeriod": "хвилин(и)", - "errorInvalidCron": "Невірний вираз cron", - "clearButtonText": "Очистити", - "weekDays": ["Неділя", "Понеділок", "Вівторок", "Середа", "Четвер", "П'ятниця", "Субота"], - "months": [ - "Січень", - "Лютий", - "Березень", - "Квітень", - "Травень", - "Червень", - "Липень", - "Серпень", - "Вересень", - "Жовтень", - "Листопад", - "Грудень" - ], - "altWeekDays": ["НД", "ПН", "ВТ", "СР", "ЧТ", "ПТ", "СБ"], - "altMonths": ["СІЧ", "ЛЮТ", "БЕР", "КВІ", "ТРА", "ЧЕР", "ЛИП", "СЕР", "ВЕР", "ЖОВ", "ЛИС", "ГРУ"] - } -} diff --git a/packages/plugins/client/src/server/locale/zh-CN.json b/packages/plugins/client/src/server/locale/zh-CN.json deleted file mode 100644 index 4018d253b..000000000 --- a/packages/plugins/client/src/server/locale/zh-CN.json +++ /dev/null @@ -1,1388 +0,0 @@ -{ - "lang": "zh-CN", - "moment": "zh-cn", - "resources": { - "client": { - "Display <1><0>10<1>20<2>50<3>100 items per page": "每页显示 <1><0>10<1>20<2>50<3>100 条", - "Meet <1><0>All<1>Any conditions in the group": "满足组内 <1><0>全部<1>任意 条件", - "Open in<1><0>Modal<1>Drawer<2>Window": "在 <1><0>对话框<1>抽屉<2>窗口 内打开", - "{{count}} filter items": "{{count}} 个筛选项", - "{{count}} more items": "还有 {{count}} 项", - "Total {{count}} items": "总共 {{count}} 条", - "Today": "今天", - "Month": "月", - "Week": "周", - "This week": "本周", - "Next week": "下周", - "This month": "本月", - "Next month": "下月", - "This year": "今年", - "Next year": "明年", - "Last week": "上周", - "Last month": "上月", - "Last year": "去年", - "Last 7 days": "过去 7 天", - "Last 30 days": "过去 30 天", - "Last 90 days": "过去 90 天", - "Next 7 days": "未来 7 天", - "Next 30 days": "未来 30 天", - "Next 90 days": "未来 90 天", - "Work week": "工作日", - "Day": "天", - "Agenda": "列表", - "Date": "日期", - "Time": "时间", - "Event": "事件", - "None": "无", - "Unconnected": "未连接", - "System settings": "系统设置", - "System title": "系统名称", - "Logo": "Logo", - "Add menu item": "添加菜单项", - "Page": "页面", - "Name": "名称", - "Icon": "图标", - "Group": "分组", - "Link": "链接", - "Save conditions": "保存筛选条件", - "Edit menu item": "编辑菜单项", - "Move to": "移动到", - "Insert left": "在左边插入", - "Insert right": "在右边插入", - "Insert inner": "在里面插入", - "Delete": "删除", - "UI editor": "界面配置", - "Collection": "数据表", - "Collections & Fields": "数据表配置", - "Roles & Permissions": "角色和权限", - "Edit profile": "个人资料", - "Change password": "修改密码", - "Old password": "旧密码", - "New password": "新密码", - "Switch role": "切换角色", - "Super admin": "超级管理员", - "Language": "语言设置", - "Allow sign up": "允许注册", - "Enable SMS authentication": "启用短信登录和注册", - "Sign out": "注销", - "Cancel": "取消", - "Submit": "提交", - "Close": "关闭", - "Set the data scope": "设置数据范围", - "Data blocks": "数据区块", - "Filter blocks": "筛选区块", - "Table": "表格", - "Form": "表单", - "Collapse": "折叠面板", - "Select data source": "选择数据源", - "Calendar": "日历", - "Delete events": "删除日程", - "This event": "此日程", - "This and following events": "此日程及后续日程", - "All events": "所有日程", - "Delete this event?": "是否删除这个日程?", - "Delete Event": "删除日程", - "Kanban": "看板", - "Select grouping field": "选择分组字段", - "Media": "多媒体", - "Markdown": "Markdown", - "Wysiwyg": "富文本", - "Chart blocks": "图表区块", - "Column chart": "柱状图", - "Bar chart": "条形图", - "Line chart": "折线图", - "Pie chart": "饼图", - "Area chart": "面积图", - "Other chart": "其他图表", - "Other blocks": "其他区块", - "In configuration": "配置中", - "Chart title": "图表标题", - "Chart type": "图表类型", - "Chart config": "图表配置", - "Templates": "模板", - "Select template": "选择模板", - "Action logs": "操作日志", - "Create template": "创建模板", - "Edit markdown": "编辑 Markdown", - "Add block": "创建区块", - "Add new": "添加", - "Add record": "添加数据", - "Custom field display name": "自定义字段名称", - "Display fields": "显示字段", - "Edit record": "编辑数据", - "Delete menu item": "删除菜单项", - "Add page": "添加页面", - "Add group": "添加分组", - "Add link": "添加链接", - "Insert above": "在上面插入", - "Insert below": "在下面插入", - "Save": "保存", - "Delete block": "删除区块", - "Are you sure you want to delete it?": "你确定要删除吗?", - "This is a demo text, **supports Markdown syntax**.": "这是一段演示文本,**支持 Markdown 语法**。", - "Filter": "筛选", - "Connect data blocks": "连接数据区块", - "Action type": "操作类型", - "Actions": "操作", - "Insert": "新增", - "Update": "更新", - "View": "查看", - "View record": "查看数据", - "Refresh": "刷新", - "Data changes": "数据变更", - "Field name": "字段标识", - "Before change": "变更前", - "After change": "变更后", - "Delete record": "删除数据", - "Create collection": "创建数据表", - "Collection display name": "数据表名称", - "Collection name": "数据表标识", - "Inherits": "继承", - "Generate ID field automatically": "自动生成 ID 字段", - "Store the creation user of each record": "记录创建人", - "Store the last update user of each record": "记录最后更新人", - "Store the creation time of each record": "记录创建时间", - "Store the last update time of each record": "记录最后更新时间", - "More options": "更多选项", - "Records can be sorted": "可以对行记录进行排序", - "Collection template": "数据表模板", - "Calendar collection": "日历数据表", - "General collection": "普通数据表", - "Randomly generated and can be modified. Support letters, numbers and underscores, must start with an letter.": "随机生成,可修改。支持英文、数字和下划线,必须以英文字母开头。", - "Storage type": "存储类型", - "Edit": "编辑", - "Edit collection": "编辑数据表", - "Configure fields": "配置字段", - "Configure columns": "配置字段", - "Edit field": "编辑字段", - "Override": "重写", - "Override field": "重写字段", - "Configure fields of {{title}}": "「{{title}}」的字段配置", - "Association fields filter": "关系筛选", - "PK & FK fields": "主外键字段", - "Association fields": "关系字段", - "Choices fields": "选项字段", - "System fields": "系统字段", - "General fields": "普通字段", - "Inherited fields": "继承字段", - "Parent collection fields": "父表字段", - "Basic": "基本类型", - "Single line text": "单行文本", - "Long text": "多行文本", - "Phone": "手机号码", - "Email": "电子邮箱", - "Number": "数字", - "Integer": "整数", - "Percent": "百分比", - "Password": "密码", - "Advanced type": "高级类型", - "Formula": "公式", - "Formula description": "基于同一条记录中的其他字段计算出一个值。", - "Choices": "选择类型", - "Checkbox": "勾选", - "Single select": "下拉菜单(单选)", - "Multiple select": "下拉菜单(多选)", - "Radio group": "单选框", - "Checkbox group": "复选框", - "China region": "中国行政区", - "Attachment": "附件", - "Date & Time": "日期 & 时间", - "Datetime": "日期", - "Relation": "关系类型", - "Link to": "关联", - "Link to description": "用于快速创建表关系,可兼容大多数普通场景。适合非开发人员使用。作为字段存在时,它是一个下拉选择用于选择目标数据表的数据。创建后,将同时在目标数据表中生成当前数据表的关联字段。", - "Sub-table": "子表格", - "System info": "系统信息", - "Created at": "创建日期", - "Last updated at": "最后修改日期", - "Created by": "创建人", - "Last updated by": "最后修改人", - "Add field": "添加字段", - "Field display name": "字段名称", - "Field type": "字段类型", - "Field interface": "字段类型", - "Date format": "日期格式", - "Year/Month/Day": "年/月/日", - "Year-Month-Day": "年-月-日", - "Day/Month/Year": "日/月/年", - "Show time": "显示时间", - "Time format": "时间格式", - "12 hour": "12 小时制", - "24 hour": "24 小时制", - "Relationship type": "关系类型", - "Inverse relationship type": "反向关系类型", - "Source collection": "源数据表", - "Source key": "源数据表字段标识", - "Target collection": "目标数据表", - "Through collection": "中间数据表", - "Target key": "目标数据表字段标识", - "Foreign key": "外键", - "One to one": "一对一", - "One to many": "一对多", - "Many to one": "多对一", - "Many to many": "多对多", - "Foreign key 1": "外键1", - "Foreign key 2": "外键2", - "One to one description": "用于创建一对一关系,比如一个用户会有一套个人资料。", - "One to many description": "用于创建一对多关系,比如一个国家会有多个城市。作为字段存在时,它是一个子表格用于显示目标数据表的数据。创建后,会在目标数据表里自动生成一个多对一字段。", - "Many to one description": "用于创建多对一关系,比如一个城市只能属于一个国家,一个国家可以有多个城市。作为字段存在时,它是一个下拉选择用于选择目标数据表的数据。创建后,会在目标数据表里自动生成一个多对一字段。", - "Many to many description": "用于创建多对多关系,比如一个学生会有多个老师,一个老师也会有多个学生。作为字段存在时,它是一个下拉选择用于选择目标数据表的数据。", - "Generated automatically if left blank": "留空时,自动生成中间表", - "Display association fields": "显示关联表的字段", - "Field component": "字段组件", - "Allow multiple": "允许多选", - "Quick upload": "快速上传", - "Select file": "选择文件", - "Subtable": "子表格", - "Sub-form": "子表单", - "Record picker": "数据选择器", - "Toggles the subfield mode": "切换子字段模式", - "Selector mode": "选择器模式", - "Subtable mode": "子表格模式", - "Subform mode": "子表单模式", - "Edit block title": "编辑区块标题", - "Block title": "区块标题", - "Pattern": "模式", - "operater": "运算符", - "Editable": "可编辑", - "Readonly": "只读(禁止编辑)", - "Easy-reading": "只读(阅读模式)", - "Add filter": "添加筛选条件", - "Add filter group": "添加筛选分组", - "Comparision": "值比较", - "is": "等于", - "is not": "不等于", - "contains": "包含", - "does not contain": "不包含", - "starts with": "开头是", - "not starts with": "开头不是", - "ends with": "结尾是", - "not ends with": "结尾不是", - "is empty": "为空", - "is not empty": "不为空", - "Edit chart": "编辑图表", - "Add text": "添加文本", - "Filterable fields": "可筛选字段", - "Edit button": "编辑按钮", - "Hide": "隐藏", - "Enable actions": "启用操作", - "Import": "导入", - "Export": "导出", - "Customize": "自定义", - "Function": "Function", - "Popup form": "Popup form", - "Flexible popup": "Flexible popup", - "Configure actions": "配置操作", - "Display order number": "显示序号", - "Enable drag and drop sorting": "启用拖拽排序", - "Triggered when the row is clicked": "点击表格行时触发", - "Add tab": "添加标签页", - "Disable tabs": "禁用标签页", - "Details": "详情", - "Edit tab": "编辑标签页", - "Relationship blocks": "关系数据区块", - "Select record": "选择数据", - "Display name": "显示名称", - "Select icon": "选择图标", - "Custom column name": "自定义列名称", - "Edit description": "编辑描述", - "Required": "必填", - "Unique": "不允许重复", - "Label field": "标签字段", - "Default is the ID field": "默认为 ID 字段", - "Set default sorting rules": "设置排序规则", - "Set validation rules": "设置验证规则", - "Max length": "最大长度", - "Min length": "最小长度", - "Maximum": "最大值", - "Minimum": "最小值", - "Max length must greater than min length": "最大长度必须大于最小长度", - "Min length must less than max length": "最小长度必须小于最大长度", - "Maximum must greater than minimum": "最大值必须大于最小值", - "Minimum must less than maximum": "最小值必须小于最大值", - "Validation rule": "验证规则", - "Add validation rule": "新增验证规则", - "Format": "格式", - "Regular expression": "正则表达式", - "Error message": "错误消息", - "Length": "长度", - "The field value cannot be greater than ": "数值不能大于", - "The field value cannot be less than ": "数值不能小于", - "The field value is not an integer number": "数字不是整数", - "Set default value": "设置默认值", - "Default value": "默认值", - "is before": "早于", - "is after": "晚于", - "is on or after": "不早于", - "is on or before": "不晚于", - "is between": "介于", - "Upload": "上传", - "Select level": "选择层级", - "Province": "省", - "City": "市", - "Area": "区/县", - "Street": "乡镇/街道", - "Village": "村/居委会", - "Must select to the last level": "必须选到最后一级", - "Move {{title}} to": "将 {{title}} 移动到", - "Target position": "目标位置", - "After": "之后", - "Before": "之前", - "Add {{type}} before \"{{title}}\"": "在 \"{{title}}\" 前插入{{type}}", - "Add {{type}} after \"{{title}}\"": "在 \"{{title}}\" 前插入{{type}}", - "Add {{type}} in \"{{title}}\"": "在 \"{{title}}\" 里插入{{type}}", - "Original name": "原名称", - "Custom name": "自定义名称", - "Custom Title": "自定义标题", - "Options": "选项", - "Option value": "选项值", - "Option label": "选项标签", - "Color": "颜色", - "Add option": "添加选项", - "Related collection": "关系表", - "Allow linking to multiple records": "允许关联多条记录", - "Allow uploading multiple files": "允许上传多个文件", - "Configure calendar": "配置日历", - "Title field": "标题字段", - "Custom title": "自定义标题", - "Show lunar": "展示农历", - "Start date field": "开始日期字段", - "End date field": "结束日期字段", - "Navigate": "分页", - "Title": "标题", - "Description": "描述", - "Select view": "切换视图", - "Reset": "重置", - "Importable fields": "可导入字段", - "Exportable fields": "可导出字段", - "Saved successfully": "保存成功", - "Nickname": "昵称", - "Sign in": "登录", - "Sign in via account": "账号密码登录", - "Sign in via phone": "手机号登录", - "Create an account": "注册账号", - "Sign up": "注册", - "Confirm password": "确认密码", - "Log in with an existing account": "使用已有账号登录", - "Signed up successfully. It will jump to the login page.": "注册成功,将跳转登录页。", - "Password mismatch": "重复密码不匹配", - "Users": "用户", - "Verification code": "验证码", - "Send code": "发送验证码", - "Retry after {{count}} seconds": "{{count}} 秒后重试", - "Roles": "角色", - "Add role": "添加角色", - "Role name": "角色名称", - "Configure": "配置", - "Configure permissions": "配置权限", - "Edit role": "编辑角色", - "Action permissions": "数据表操作权限", - "Menu permissions": "菜单访问权限", - "Menu item name": "菜单名称", - "Allow access": "允许访问", - "Action name": "操作名称", - "Allow action": "允许操作", - "Action scope": "可操作数据范围", - "Operate on new data": "对新增数据操作", - "Operate on existing data": "对已有数据操作", - "Yes": "是", - "No": "否", - "Red": "薄暮", - "Magenta": "法式洋红", - "Volcano": "火山", - "Orange": "日暮", - "Gold": "金盏花", - "Lime": "青柠", - "Green": "极光绿", - "Cyan": "明青", - "Blue": "拂晓蓝", - "Geek blue": "极客蓝", - "Purple": "酱紫", - "Default": "默认", - "Add card": "添加卡片", - "edit title": "修改标题", - "Turn pages": "翻页", - "Others": "其他", - "Save as template": "保存为模板", - "Save as block template": "保存为区块模板", - "Block templates": "区块模板", - "Convert reference to duplicate": "模板引用转为复制", - "Template name": "模板名称", - "Block type": "区块类型", - "No blocks to connect": "没有可连接的区块", - "Action column": "操作列", - "Records per page": "每页显示数量", - "(Fields only)": "(仅字段)", - "Button title": "按钮标题", - "Button icon": "按钮图标", - "Submitted successfully": "提交成功", - "Operation succeeded": "操作成功", - "Operation failed": "操作失败", - "Open mode": "打开方式", - "Popup size": "弹窗尺寸", - "Small": "较窄", - "Middle": "中等", - "Large": "较宽", - "Menu item title": "菜单项名称", - "Menu item icon": "菜单项图标", - "Target": "目标", - "Position": "位置", - "Insert before": "在前面插入", - "Insert after": "在后面插入", - "UI Editor": "界面配置", - "ASC": "升序", - "DESC": "降序", - "Add sort field": "添加排序字段", - "ID": "ID", - "Identifier for program usage. Support letters, numbers and underscores, must start with an letter.": "用于程序使用的标识符,支持字母、数字和下划线,必须以字母开头。", - "Drawer": "抽屉", - "Dialog": "对话框", - "Delete action": "删除操作", - "Custom column title": "自定义列标题", - "Original title: ": "原始标题: ", - "Delete table column": "删除列", - "Skip required validation": "跳过必填校验", - "Form values": "表单值", - "Fields values": "字段值", - "When submitting the following fields, the saved values are": "提交以下字段时,保存的值为", - "After successful submission": "提交成功后", - "Then": "然后", - "Stay on current page": "停留在当前页面", - "Redirect to": "跳转到", - "Save action": "保存操作", - "Exists": "存在", - "Filename": "文件名", - "Add condition": "添加条件", - "Add condition group": "添加条件分组", - "exists": "存在", - "not exists": "不存在", - "=": "=", - "≠": "≠", - ">": ">", - "≥": "≥", - "<": "<", - "≤": "≤", - "Role UID": "角色标识", - "Precision": "精确度", - "Formula mode": "计算方式", - "Expression": "表达式", - "Input +, -, *, /, ( ) to calculate, input @ to open field variables.": "英文输入+、-、*、/、( ) 进行运算,输入@打开可用字段变量。", - "Formula error.": "公式验证错误。", - "Accept": "文件格式", - "Rich Text": "富文本", - "Junction collection": "中间表", - "Leave it blank, unless you need a custom intermediate table": "默认留空,除非你需要一个自定义的中间表", - "Fields": "字段", - "Edit field title": "编辑字段标题", - "Field title": "字段标题", - "Original field title: ": "原始字段标题:", - "Edit tooltip": "编辑提示信息", - "Delete field": "删除字段", - "Select collection": "选择数据表", - "Blank block": "空区块", - "Duplicate template": "复制模板", - "Reference template": "引用模板", - "Create calendar block": "创建日历区块", - "Create kanban block": "创建看板区块", - "Grouping field": "分组字段", - "Single select and radio fields can be used as the grouping field": "数据表的单选字段可以作为分组字段", - "Tab name": "标签名称", - "Current record blocks": "当前数据区块", - "Popup message": "弹窗提示消息", - "Delete role": "删除角色", - "Role display name": "角色名称", - "Default role": "默认角色", - "All collections use general action permissions by default; permission configured individually will override the default one.": "所有数据表都默认使用通用数据操作权限;同时,可以针对每个数据表单独配置权限。", - "Allows configuration of the whole system, including UI, collections, permissions, etc.": "允许配置系统,包括界面配置、数据表配置、权限配置、系统配置等全部配置项", - "New menu items are allowed to be accessed by default.": "新增菜单项默认允许访问", - "Global permissions": "全局配置", - "General permissions": "通用配置", - "Global action permissions": "全局操作权限", - "General action permissions": "通用操作权限", - "Plugin settings permissions": "插件配置权限", - "Allow to desgin pages": "允许界面配置", - "Allow to manage plugins": "允许管理插件", - "Allow to configure plugins": "允许管理配置中心", - "Allows to configure interface": "允许配置界面", - "Allows to install, activate, disable plugins": "允许安装、激活、禁用插件", - "Allows to configure plugins": "允许配置插件", - "Allows to reload application": "允许重新加载应用", - "Action display name": "操作名称", - "Allow": "允许", - "Data scope": "数据范围", - "Action on new records": "对新增数据操作", - "Action on existing records": "对已有数据操作", - "All records": "所有数据", - "Own records": "自己的数据", - "Permission policy": "权限策略", - "Individual": "单独配置", - "General": "通用配置", - "Accessible": "允许访问", - "Configure permission": "配置权限", - "Action permission": "操作权限", - "Field permission": "字段权限", - "Scope name": "数据范围名称", - "File storages": "文件存储", - "Storage display name": "文件存储名称", - "Storage name": "文件存储标识", - "Default storage": "默认存储", - "Add storage": "添加文件存储", - "Edit storage": "编辑文件存储", - "Storage base URL": "Base URL", - "Destination": "存储路径", - "Use the built-in static file server": "使用内置静态文件服务", - "Local storage": "本地存储", - "Aliyun OSS": "阿里云 OSS", - "Amazon S3": "亚马逊 S3", - "Tencent COS": "腾讯云 COS", - "Region": "区域", - "Bucket": "存储桶", - "Path": "路径(相对)", - "Unsaved changes": "未保存修改", - "Are you sure you don't want to save?": "你确定不保存修改吗?", - "Dragging": "拖拽中", - "Popup": "打开弹窗", - "Trigger workflow": "触发工作流", - "Request API": "请求API", - "Assign field values": "字段赋值", - "Constant value": "静态值", - "Dynamic value": "动态值", - "Current user": "当前用户", - "Current record": "当前记录", - "Current time": "当前时间", - "System variables": "系统变量", - "Date Variables": "日期变量", - "Popup close method": "弹窗关闭方式", - "Automatic close": "自动关闭", - "Manually close": "手动关闭", - "After successful update": "更新成功后", - "Save record": "保存数据", - "Updated successfully": "更新成功", - "After successful save": "保存成功后", - "After clicking the custom button, the following field values will be assigned according to the following form.": "点击当前自定义按钮时,以下字段值将按照以下表单赋值。", - "After clicking the custom button, the following fields of the current record will be saved according to the following form.": "点击当前自定义按钮时,当前数据以下字段将按照以下表单保存。", - "Button background color": "按钮颜色", - "Highlight": "高亮", - "Danger red": "红色", - "Custom request": "自定义请求", - "Request settings": "请求设置", - "Request URL": "请求地址", - "Request method": "请求方法", - "Request query parameters": "请求查询参数(JSON格式)", - "Request headers": "请求头参数(JSON格式)", - "Request body": "请求体(JSON格式)", - "Request success": "请求成功", - "Invalid JSON format": "非法JSON格式", - "After successful request": "请求成功之后", - "Add exportable field": "添加可导出字段", - "Audit logs": "操作记录", - "Record ID": "数据 ID", - "User": "用户", - "Field": "字段", - "Select": "选择", - "Select field": "选择字段", - "Field value changes": "变更记录", - "One to one (has one)": "一对一(has one)", - "One to one (belongs to)": "一对一(belongs to)", - "Use the same time zone (GMT) for all users": "所有用户使用同一时区 (格林尼治标准时间)", - "Province/city/area name": "省市区名称", - "Enabled languages": "启用的语言", - "View all plugins": "查看所有插件", - "Print": "打印", - "Done": "完成", - "Sign up successfully, and automatically jump to the sign in page": "注册成功,即将跳转到登录页面", - "File manager": "文件管理器", - "ACL": "访问控制", - "Collection manager": "数据表管理", - "Plugin manager": "插件管理器", - "Local": "本地", - "Built-in": "内置", - "Marketplace": "插件市场", - "Coming soon...": "敬请期待...", - "All plugin settings": "所有插件配置", - "Bookmark": "书签", - "Manage all settings": "管理所有配置", - "Create inverse field in the target collection": "在目标数据表里创建反向关系字段", - "Inverse field name": "反向关系字段标识", - "Inverse field display name": "反向关系字段名称", - "Bulk update": "批量更新", - "After successful bulk update": "批量成功更新后", - "Bulk edit": "批量编辑", - "Data will be updated": "更新的数据", - "Selected": "选中", - "All": "所有", - "Update selected data?": "更新选中的数据吗?", - "Update all data?": "更新全部数据吗?", - "Remains the same": "不更新", - "Changed to": "修改为", - "Clear": "清空", - "Add attach": "增加关联", - "Please select the records to be updated": "请选择要更新的记录", - "Selector": "选择器", - "Inner": "里面", - "Search and select collection": "搜索并选择数据表", - "Please fill in the iframe URL": "请填写嵌入的地址", - "Fix block": "固定区块", - "Plugin name": "插件", - "Plugin tab name": "插件标签页" - }, - "error-handler": { - "unique violation": "{{field}} 字段值是唯一的", - "notNull violation": "{{field}} 字段不能为空", - "Validation error": "{{field}} 字段规则验证失败" - }, - "collection-manager": {}, - "ui-schema-storage": {}, - "ui-routes-storage": {}, - "file-manager": {}, - "system-settings": {}, - "sequence-field": { - "Sequence": "自动编码", - "Sequence rules": "编号规则", - "Add rule": "添加规则", - "Inputable": "可输入", - "Match rules": "输入必须匹配规则", - "Type": "类型", - "Autoincrement": "自增数字", - "Fixed text": "固定文本", - "Text content": "文本内容", - "Rule content": "规则内容", - "{{value}} Digits": "{{value}} 位数字", - "Digits": "位数", - "Start from": "起始于", - "Starts from {{value}}": "从 {{value}} 开始", - "Reset cycle": "重置周期", - "No reset": "不重置", - "Daily": "每天", - "Every Monday": "每周一", - "Monthly": "每月", - "Yearly": "每年", - "Operations": "操作", - "Customize": "自定义" - }, - "verification": { - "Verification": "验证码", - "Verification providers": "验证码提供商", - "Provider type": "提供商类型", - "Aliyun SMS": "阿里云短信服务", - "Access Key ID": "Access Key ID", - "Access Key Secret": "Access Key Secret", - "Endpoint": "接入点", - "Sign": "签名", - "Template code": "模板代码", - "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": "无效的验证码" - }, - "users": { - "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": "手机号未注册,请先注册" - }, - "acl": {}, - "china-region": {}, - "workflow": { - "Workflow": "工作流", - "Execution history": "执行历史", - "Executed": "已执行", - "Trigger type": "触发方式", - "Status": "状态", - "On": "启用", - "Off": "停用", - "Version": "版本", - "Copy to new version": "复制到新版本", - "Duplicate": "复制", - "Loading": "加载中", - "Load failed": "加载失败", - "Trigger": "触发器", - "Trigger variables": "触发器变量", - "Trigger data": "触发数据", - "Trigger time": "触发时间", - "Triggered at": "触发时间", - "Collection event": "数据表事件", - "Trigger on": "触发时机", - "After record added": "新增数据后", - "After record updated": "更新数据后", - "After record added or updated": "新增或更新数据后", - "After record deleted": "删除数据后", - "Changed fields": "发生变动的字段", - "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.": "只有被选中的某个字段发生变动时才会触发。如果不选择,则表示任何字段变动时都会触发。新增或删除数据时,任意字段都被认为发生变动。", - "Only triggers when match conditions": "满足以下条件才触发", - "Schedule event": "定时任务", - "Trigger mode": "触发模式", - "Based on certain date": "自定义时间", - "Based on date field of collection": "根据数据表时间字段", - "Starts on": "开始于", - "Ends on": "结束于", - "No end": "不结束", - "Exactly at": "当时", - "Repeat mode": "重复模式", - "Repeat limit": "重复次数", - "No limit": "不限", - "Seconds": "秒", - "Minutes": "分钟", - "Hours": "小时", - "Days": "天", - "Weeks": "周", - "Months": "月", - "No repeat": "不重复", - "Every": "每", - "By minute": "按分钟", - "By hour": "按小时", - "By day": "按天", - "By week": "按周", - "By month": "按月", - "By field": "数据表字段", - "By custom date": "自定义时间", - "Advanced": "高级模式", - "End": "结束", - "Node result": "节点数据", - "Constant": "常量", - "Null": "空值", - "Boolean": "逻辑值", - "String": "字符串", - "Calculator": "运算", - "Arithmetic calculation": "算术运算", - "String operation": "字符串", - "Executed at": "执行于", - "Queueing": "队列中", - "On going": "进行中", - "Succeeded": "成功", - "Failed": "失败", - "Pending": "等待处理", - "Canceled": "已取消", - "This node contains branches, deleting will also be preformed to them, are you sure?": "节点包含分支,将同时删除其所有分支下的子节点,确定继续?", - "Control": "流程控制", - "Collection operations": "数据表操作", - "Extended types": "扩展类型", - "Node type": "节点类型", - "Calculation": "运算", - "Configure calculation": "配置运算", - "Calculation result": "运算结果", - "True": "真", - "False": "假", - "concat": "连接", - "Condition": "条件判断", - "Mode": "模式", - "Continue when \"Yes\"": "“是”则继续", - "Branch into \"Yes\" and \"No\"": "“是”和“否”分别继续", - "Conditions": "条件配置", - "Parallel branch": "分支", - "Add branch": "增加分支", - "All succeeded": "全部成功", - "Any succeeded": "任意成功", - "Any succeeded or failed": "任意成功或失败", - "Continue after all branches succeeded": "全部分支都成功后才能继续", - "Continue after any branch succeeded": "任意分支成功后就继续", - "Continue after any branch succeeded, or exit after any branch failed": "任意分支成功继续,或失败后退出", - "Delay": "延时", - "Duration": "时长", - "End Status": "到时状态", - "Select status": "选择状态", - "Succeed and continue": "通过并继续", - "Fail and exit": "失败并退出", - "Create record": "新增数据", - "Update record": "更新数据", - "Query record": "查询数据", - "Multiple records": "多条数据", - "Please select collection first": "请先选择数据表", - "Only update records matching 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.": "未被赋值的字段将被设置为默认值,没有默认值的设置为空值。", - "Trigger in executed workflow cannot be modified": "已经执行过工作流的触发器不能被修改", - "Node in executed workflow cannot be modified": "已经执行过工作流中的节点不能被修改", - "Can not delete": "无法删除", - "The result of this node has been referenced by other nodes ({{nodes}}), please remove the usage before deleting.": "该节点的执行结果已被其他节点({{nodes}})引用,删除前请先移除引用。", - "HTTP request": "HTTP 请求", - "URL": "地址", - "You can use the above available variables in URL.": "您可以在地址中使用使用上面的可用变量。", - "Request headers": "请求头", - "Name(e.g. Content-Type)": "名称(例如 Content-Type)", - "Value(e.g. Application/json)": "值(例如 Application/json)", - "Add request header": "添加请求头", - "HTTP method": "HTTP 方法", - "Request data": "请求数据", - "Input request data": "输入请求数据", - "You can use the above available variables in request data.": "您可以在请求数据中使用上面的可用变量。", - "Copy success!": "拷贝成功!", - "Copy variable output template statement": "拷贝变量输出模版语句", - "Default headers is Content-Type: application/json": "默认请求头是 Content-Type: application/json", - "Ignore fail request and continue workflow": "忽略失败请求并继续工作流", - "Syntax see": "语法参考", - "Show available variable tool": "显示可用变量工具" - }, - "export": {}, - "import": { - "Only one file is allowed to be uploaded": "只允许上传一个文件", - "File size cannot exceed 10M": "文件大小不能超过10M", - "Please upload the file of Excel": "请上传Excel的文件", - "Import Data": "导入数据", - "Start import": "开始导入", - "Import explain": "说明", - "Download template": "下载模板", - "Step 1: Download template": "1.下载模板", - "Step 2: Upload Excel": "2.上传完善后的表格", - "Download tip": "- 下载模板后,按格式填写数据\r\n - 只导入第一张工作表\r\n - 支持单次导入不超过10000行数据\r\n - 请勿改模板表头,防止导入失败", - "Upload placeholder": "将文件拖曳到此处或点击上传,文件大小不超过10M", - "Excel data importing": "数据导入中,请勿关闭窗口", - "Import done, total success have {{successCount}} , total failure have {{failureCount}}": "导入完成,共导入成功{{successCount}}条数据,共导入失败{{failureCount}}条数据", - "To download the failure data": "下载导入失败的数据", - "Add importable field": "添加可导入字段", - "Done": "完成", - "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": "百分比格式有误" - }, - "audit-logs": {}, - "iframe-block": {}, - "graph-collection-manager": { - "Graph Collection": "图形化数据表", - "Collection List": "数据表列表", - "Full Screen": "全屏", - "Collection Search": "表筛选", - "Create Collection": "创建数据表", - "All Fields": "全部", - "Association Fields": "关系字段", - "All relationships": "所有关系", - "Entity relationship only": "实体关系", - "Inheritance relationship only": "继承关系", - "Graphical interface": "图形化界面", - "Auto layout": "自动布局", - "Selection": "选择模式" - }, - "sample-hello": {}, - "oidc": { - "Issuer": "Issuer", - "Enable": "启用", - "Actions": "操作", - "Delete": "删除", - "Edit": "编辑", - "Button title": "登录按钮标题", - "OIDC manager": "OIDC 管理", - "OIDC Providers": "OIDC 身份提供者", - "Provider name": "名称", - "Client id": "客户端 id", - "Client secret": "客户端 secret", - "Openid configuration": "服务发现地址", - "Authorization endpoint": "授权端点", - "Access token endpoint": "令牌端点", - "JWKS endpoint": "JWKS 公钥端点", - "Userinfo endpoint": "用户信息端点", - "Redirect url": "重定向地址", - "Logout endpoint": "登出端点", - "Id token sign alg": "Id token 签名算法", - "Add provider": "添加", - "Edit provider": "编辑", - "Delete provider": "删除", - "Sign in button name, which will be displayed on the sign in page": "登录按钮名称,将在登录页中显示" - }, - "saml": { - "Edit": "编辑", - "Delete": "删除", - "Cancel": "取消", - "Submit": "提交", - "Actions": "操作", - "Title": "名称", - "Enable": "启用", - "Button title": "登录按钮标题", - "SAML manager": "SAML 管理", - "SAML Providers": "SAML 身份提供者", - "Redirect url": "重定向地址", - "SP entity id": "应用唯一标识(SP Entity ID)", - "Add provider": "添加", - "Edit provider": "编辑", - "Client id": "客户端 id", - "Entity id or issuer": "IdP 唯一标识", - "Login Url": "登录地址", - "Public cert": "公钥", - "Delete provider": "删除", - "Are you sure you want to delete it?": "你确定要删除它吗?", - "Sign in button name, which will be displayed on the sign in page": "登录按钮名称,将在登录页中显示" - }, - "map": { - "Map-based geometry": "基于地图的几何图形", - "Map type": "地图类型", - "Point": "点", - "Line": "线", - "Circle": "圆", - "Polygon": "多边形", - "Access key": "访问密钥", - "securityJsCode or serviceHost": "securityJsCode 或 serviceHost", - "AMap": "高德地图", - "Google Maps": "谷歌地图", - "Clear": "清空", - "Click to select the starting point and double-click to end the drawing": "点击选择起点,双击结束绘制", - "Clear the canvas": "清空画布", - "Are you sure to clear the canvas?": "您确定要清空画布吗?", - "Confirm": "确定", - "Cancel": "取消", - "Enter keywords to search": "输入地方名关键字搜索(必须包含省/市)", - "The AccessKey is incorrect, please check it": "访问密钥不正确,请检查", - "Please configure the AMap securityCode or serviceHost correctly": "请正确配置高德地图 securityCode 或 serviceHost", - "Map Manager": "地图管理", - "Configuration": "配置", - "Saved successfully": "保存成功", - "Saved failed": "保存失败", - "Edit": "编辑", - "Save": "保存", - "Please configure the AccessKey and SecurityJsCode first": "请先配置 AccessKey 和 SecurityJsCode", - "Go to the configuration page": "前往配置页面", - "Zoom": "缩放", - "Set default zoom level": "设置默认缩放级别", - "The default zoom level of the map": "地图默认缩放级别", - "Edit field title": "编辑字段标题", - "Field title": "字段标题", - "Edit tooltip": "编辑提示信息", - "Delete field": "删除字段", - "Required": "必填", - "Pattern": "模式", - "operater": "运算符", - "Editable": "可编辑", - "Readonly": "只读(禁止编辑)", - "Easy-reading": "只读(阅读模式)", - "Edit description": "编辑描述" - }, - "snapshot-field": { - "Detail": "详情", - "Snapshot": "快照", - "Add block": "创建区块", - "Snapshot to description": "用于创建表的快照,保存指向的表的当前数据,仅在其所属的记录创建时保存,后续不再更新。", - "View record": "查看数据", - "Allow linking to multiple records": "允许关联多条记录", - "Target collection": "关系表" - }, - "duplicator": { - "Select Import data": "请选择导入数据", - "Select Import Plugins": "请选择导入插件", - "Select User Collections": "请选择用户数据", - "Basic Data": "基础数据", - "Optional Data": "可选数据", - "User Data": "用户数据" - }, - "math-formula-field": {}, - "excel-formula-field": {} - }, - "antd": { - "locale": "zh-cn", - "Pagination": { - "items_per_page": "条/页", - "jump_to": "跳至", - "jump_to_confirm": "确定", - "page": "页", - "prev_page": "上一页", - "next_page": "下一页", - "prev_5": "向前 5 页", - "next_5": "向后 5 页", - "prev_3": "向前 3 页", - "next_3": "向后 3 页", - "page_size": "页码" - }, - "DatePicker": { - "lang": { - "placeholder": "请选择日期", - "yearPlaceholder": "请选择年份", - "quarterPlaceholder": "请选择季度", - "monthPlaceholder": "请选择月份", - "weekPlaceholder": "请选择周", - "rangePlaceholder": [ - "开始日期", - "结束日期" - ], - "rangeYearPlaceholder": [ - "开始年份", - "结束年份" - ], - "rangeMonthPlaceholder": [ - "开始月份", - "结束月份" - ], - "rangeQuarterPlaceholder": [ - "开始季度", - "结束季度" - ], - "rangeWeekPlaceholder": [ - "开始周", - "结束周" - ], - "locale": "zh_CN", - "today": "今天", - "now": "此刻", - "backToToday": "返回今天", - "ok": "确定", - "timeSelect": "选择时间", - "dateSelect": "选择日期", - "weekSelect": "选择周", - "clear": "清除", - "month": "月", - "year": "年", - "previousMonth": "上个月 (翻页上键)", - "nextMonth": "下个月 (翻页下键)", - "monthSelect": "选择月份", - "yearSelect": "选择年份", - "decadeSelect": "选择年代", - "yearFormat": "YYYY年", - "dayFormat": "D日", - "dateFormat": "YYYY年M月D日", - "dateTimeFormat": "YYYY年M月D日 HH时mm分ss秒", - "previousYear": "上一年 (Control键加左方向键)", - "nextYear": "下一年 (Control键加右方向键)", - "previousDecade": "上一年代", - "nextDecade": "下一年代", - "previousCentury": "上一世纪", - "nextCentury": "下一世纪" - }, - "timePickerLocale": { - "placeholder": "请选择时间", - "rangePlaceholder": [ - "开始时间", - "结束时间" - ] - } - }, - "TimePicker": { - "placeholder": "请选择时间", - "rangePlaceholder": [ - "开始时间", - "结束时间" - ] - }, - "Calendar": { - "lang": { - "placeholder": "请选择日期", - "yearPlaceholder": "请选择年份", - "quarterPlaceholder": "请选择季度", - "monthPlaceholder": "请选择月份", - "weekPlaceholder": "请选择周", - "rangePlaceholder": [ - "开始日期", - "结束日期" - ], - "rangeYearPlaceholder": [ - "开始年份", - "结束年份" - ], - "rangeMonthPlaceholder": [ - "开始月份", - "结束月份" - ], - "rangeQuarterPlaceholder": [ - "开始季度", - "结束季度" - ], - "rangeWeekPlaceholder": [ - "开始周", - "结束周" - ], - "locale": "zh_CN", - "today": "今天", - "now": "此刻", - "backToToday": "返回今天", - "ok": "确定", - "timeSelect": "选择时间", - "dateSelect": "选择日期", - "weekSelect": "选择周", - "clear": "清除", - "month": "月", - "year": "年", - "previousMonth": "上个月 (翻页上键)", - "nextMonth": "下个月 (翻页下键)", - "monthSelect": "选择月份", - "yearSelect": "选择年份", - "decadeSelect": "选择年代", - "yearFormat": "YYYY年", - "dayFormat": "D日", - "dateFormat": "YYYY年M月D日", - "dateTimeFormat": "YYYY年M月D日 HH时mm分ss秒", - "previousYear": "上一年 (Control键加左方向键)", - "nextYear": "下一年 (Control键加右方向键)", - "previousDecade": "上一年代", - "nextDecade": "下一年代", - "previousCentury": "上一世纪", - "nextCentury": "下一世纪" - }, - "timePickerLocale": { - "placeholder": "请选择时间", - "rangePlaceholder": [ - "开始时间", - "结束时间" - ] - } - }, - "global": { - "placeholder": "请选择" - }, - "Table": { - "filterTitle": "筛选", - "filterConfirm": "确定", - "filterReset": "重置", - "filterEmptyText": "无筛选项", - "filterCheckall": "全选", - "filterSearchPlaceholder": "在筛选项中搜索", - "selectAll": "全选当页", - "selectInvert": "反选当页", - "selectNone": "清空所有", - "selectionAll": "全选所有", - "sortTitle": "排序", - "expand": "展开行", - "collapse": "关闭行", - "triggerDesc": "点击降序", - "triggerAsc": "点击升序", - "cancelSort": "取消排序" - }, - "Modal": { - "okText": "确定", - "cancelText": "取消", - "justOkText": "知道了" - }, - "Popconfirm": { - "cancelText": "取消", - "okText": "确定" - }, - "Transfer": { - "searchPlaceholder": "请输入搜索内容", - "itemUnit": "项", - "itemsUnit": "项", - "remove": "删除", - "selectCurrent": "全选当页", - "removeCurrent": "删除当页", - "selectAll": "全选所有", - "removeAll": "删除全部", - "selectInvert": "反选当页" - }, - "Upload": { - "uploading": "文件上传中", - "removeFile": "删除文件", - "uploadError": "上传错误", - "previewFile": "预览文件", - "downloadFile": "下载文件" - }, - "Empty": { - "description": "暂无数据" - }, - "Icon": { - "icon": "图标" - }, - "Text": { - "edit": "编辑", - "copy": "复制", - "copied": "复制成功", - "expand": "展开" - }, - "PageHeader": { - "back": "返回" - }, - "Form": { - "optional": "(可选)", - "defaultValidateMessages": { - "default": "字段验证错误${label}", - "required": "请输入${label}", - "enum": "${label}必须是其中一个[${enum}]", - "whitespace": "${label}不能为空字符", - "date": { - "format": "${label}日期格式无效", - "parse": "${label}不能转换为日期", - "invalid": "${label}是一个无效日期" - }, - "types": { - "string": "${label}不是一个有效的${type}", - "method": "${label}不是一个有效的${type}", - "array": "${label}不是一个有效的${type}", - "object": "${label}不是一个有效的${type}", - "number": "${label}不是一个有效的${type}", - "date": "${label}不是一个有效的${type}", - "boolean": "${label}不是一个有效的${type}", - "integer": "${label}不是一个有效的${type}", - "float": "${label}不是一个有效的${type}", - "regexp": "${label}不是一个有效的${type}", - "email": "${label}不是一个有效的${type}", - "url": "${label}不是一个有效的${type}", - "hex": "${label}不是一个有效的${type}" - }, - "string": { - "len": "${label}须为${len}个字符", - "min": "${label}最少${min}个字符", - "max": "${label}最多${max}个字符", - "range": "${label}须在${min}-${max}字符之间" - }, - "number": { - "len": "${label}必须等于${len}", - "min": "${label}最小值为${min}", - "max": "${label}最大值为${max}", - "range": "${label}须在${min}-${max}之间" - }, - "array": { - "len": "须为${len}个${label}", - "min": "最少${min}个${label}", - "max": "最多${max}个${label}", - "range": "${label}数量须在${min}-${max}之间" - }, - "pattern": { - "mismatch": "${label}与模式不匹配${pattern}" - } - } - }, - "Image": { - "preview": "预览" - } - }, - "cronstrue": { - "atX0SecondsPastTheMinuteGt20": null, - "atX0MinutesPastTheHourGt20": null, - "commaMonthX0ThroughMonthX1": null, - "commaYearX0ThroughYearX1": ", 从%s年至%s年", - "use24HourTimeFormatByDefault": false, - "anErrorOccuredWhenGeneratingTheExpressionD": "生成表达式描述时发生了错误,请检查cron表达式语法。", - "everyMinute": "每分钟", - "everyHour": "每小时", - "atSpace": "在", - "everyMinuteBetweenX0AndX1": "在 %s 至 %s 之间的每分钟", - "at": "在", - "spaceAnd": " 和", - "everySecond": "每秒", - "everyX0Seconds": "每隔 %s 秒", - "secondsX0ThroughX1PastTheMinute": "在每分钟的第 %s 到 %s 秒", - "atX0SecondsPastTheMinute": "在每分钟的第 %s 秒", - "everyX0Minutes": "每隔 %s 分钟", - "minutesX0ThroughX1PastTheHour": "在每小时的第 %s 到 %s 分钟", - "atX0MinutesPastTheHour": "在每小时的第 %s 分钟", - "everyX0Hours": "每隔 %s 小时", - "betweenX0AndX1": "在 %s 和 %s 之间", - "atX0": "在%s", - "commaEveryDay": ", 每天", - "commaEveryX0DaysOfTheWeek": ", 每周的每 %s 天", - "commaX0ThroughX1": ", %s至%s", - "commaAndX0ThroughX1": ", 和%s至%s", - "first": "第一个", - "second": "第二个", - "third": "第三个", - "fourth": "第四个", - "fifth": "第五个", - "commaOnThe": ", 限每月的", - "spaceX0OfTheMonth": "%s", - "lastDay": "本月最后一天", - "commaOnTheLastX0OfTheMonth": ", 限每月的最后一个%s", - "commaOnlyOnX0": ", 仅%s", - "commaAndOnX0": ", 并且为%s", - "commaEveryX0Months": ", 每隔 %s 个月", - "commaOnlyInX0": ", 仅限%s", - "commaOnTheLastDayOfTheMonth": ", 限每月的最后一天", - "commaOnTheLastWeekdayOfTheMonth": ", 限每月的最后一个工作日", - "commaDaysBeforeTheLastDayOfTheMonth": ", 限每月最后%s天", - "firstWeekday": "第一个工作日", - "weekdayNearestDayX0": "最接近 %s 号的工作日", - "commaOnTheX0OfTheMonth": ", 限每月的%s", - "commaEveryX0Days": ", 每隔 %s 天", - "commaBetweenDayX0AndX1OfTheMonth": ", 限每月的 %s 至 %s 之间", - "commaOnDayX0OfTheMonth": ", 限每月%s", - "commaEveryX0Years": ", 每隔 %s 年", - "commaStartingX0": ", %s开始", - "daysOfTheWeek": [ - "星期日", - "星期一", - "星期二", - "星期三", - "星期四", - "星期五", - "星期六" - ], - "monthsOfTheYear": [ - "一月", - "二月", - "三月", - "四月", - "五月", - "六月", - "七月", - "八月", - "九月", - "十月", - "十一月", - "十二月" - ] - }, - "cron": { - "everyText": "每", - "emptyMonths": "每月", - "emptyMonthDays": "每日(月)", - "emptyMonthDaysShort": "每日", - "emptyWeekDays": "每天(周)", - "emptyWeekDaysShort": "每天(周)", - "emptyHours": "每小时", - "emptyMinutes": "每分钟", - "emptyMinutesForHourPeriod": "每", - "yearOption": "年", - "monthOption": "月", - "weekOption": "周", - "dayOption": "天", - "hourOption": "小时", - "minuteOption": "分钟", - "rebootOption": "重启", - "prefixPeriod": "每", - "prefixMonths": "的", - "prefixMonthDays": "的", - "prefixWeekDays": "的", - "prefixWeekDaysForMonthAndYearPeriod": "并且", - "prefixHours": "的", - "prefixMinutes": ":", - "prefixMinutesForHourPeriod": "的", - "suffixMinutesForHourPeriod": "分钟", - "errorInvalidCron": "不符合 cron 规则的表达式", - "clearButtonText": "清空", - "weekDays": [ - "周日", - "周一", - "周二", - "周三", - "周四", - "周五", - "周六" - ], - "months": [ - "一月", - "二月", - "三月", - "四月", - "五月", - "六月", - "七月", - "八月", - "九月", - "十月", - "十一月", - "十二月" - ], - "altWeekDays": [ - "周日", - "周一", - "周二", - "周三", - "周四", - "周五", - "周六" - ], - "altMonths": [ - "一月", - "二月", - "三月", - "四月", - "五月", - "六月", - "七月", - "八月", - "九月", - "十月", - "十一月", - "十二月" - ] - } -} \ No newline at end of file diff --git a/packages/plugins/client/src/server/server.ts b/packages/plugins/client/src/server/server.ts index c7994714c..09e9d755b 100644 --- a/packages/plugins/client/src/server/server.ts +++ b/packages/plugins/client/src/server/server.ts @@ -1,8 +1,11 @@ -import { Plugin, PluginManager } from '@nocobase/server'; +import { Plugin, PluginManager, getPackageClientStaticUrl } from '@nocobase/server'; 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'; async function getReadMe(name: string, locale: string) { const packageName = PluginManager.getPackageName(name); @@ -106,6 +109,9 @@ export class ClientPlugin extends Plugin { } async load() { + this.app.locales.setLocaleFn('antd', async (lang) => getAntdLocale(lang)); + this.app.locales.setLocaleFn('cronstrue', async (lang) => getCronstrueLocale(lang)); + this.app.locales.setLocaleFn('cron', async (lang) => getCronLocale(lang)); this.db.addMigrations({ namespace: 'client', directory: resolve(__dirname, './migrations'), @@ -128,6 +134,7 @@ export class ClientPlugin extends Plugin { fs.unlinkSync(restartMark); } }); + this.app.resource({ name: 'app', actions: { @@ -167,15 +174,20 @@ export class ClientPlugin extends Plugin { }, }); ctx.body = items - .filter((item) => { + .map((item) => { try { const packageName = PluginManager.getPackageName(item.name); require.resolve(`${packageName}/client`); - return true; - } catch (error) {} - return false; + return { + ...item.toJSON(), + packageName, + url: getPackageClientStaticUrl(packageName, 'index'), + }; + } catch { + return false; + } }) - .map((item) => item.name); + .filter(Boolean); await next(); }, async clearCache(ctx, next) { @@ -230,7 +242,7 @@ export class ClientPlugin extends Plugin { }, }, }); - let root = this.options.dist || `./packages/app/client/dist`; + let root = this.options.dist || `${process.env.APP_PACKAGE_ROOT}/dist/client`; if (!isAbsolute(root)) { root = resolve(process.cwd(), root); } diff --git a/packages/plugins/collection-manager/.npmignore b/packages/plugins/collection-manager/.npmignore index 461574b2f..c593fe9df 100644 --- a/packages/plugins/collection-manager/.npmignore +++ b/packages/plugins/collection-manager/.npmignore @@ -1,7 +1,2 @@ -node_modules -*.log -docs -__tests__ -tsconfig.json -src -.fatherrc.ts \ No newline at end of file +/node_modules +/src \ No newline at end of file diff --git a/packages/plugins/collection-manager/client.d.ts b/packages/plugins/collection-manager/client.d.ts index d515d1feb..6c459cbac 100644 --- a/packages/plugins/collection-manager/client.d.ts +++ b/packages/plugins/collection-manager/client.d.ts @@ -1,3 +1,2 @@ -export * from './src/client'; -export { default } from './src/client'; - +export * from './dist/client'; +export { default } from './dist/client'; diff --git a/packages/plugins/collection-manager/client.js b/packages/plugins/collection-manager/client.js index 3c39956ca..b6e3be70e 100644 --- a/packages/plugins/collection-manager/client.js +++ b/packages/plugins/collection-manager/client.js @@ -1 +1 @@ -module.exports = require('./lib/client/index.js'); +module.exports = require('./dist/client/index.js'); diff --git a/packages/plugins/collection-manager/package.json b/packages/plugins/collection-manager/package.json index 6fed6bcfa..42e714c71 100644 --- a/packages/plugins/collection-manager/package.json +++ b/packages/plugins/collection-manager/package.json @@ -1,35 +1,24 @@ { "name": "@nocobase/plugin-collection-manager", - "displayName": "collection manager plugin", - "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)无缝集成,并提供直观的用户界面来执行各种数据库任务。", + "displayName": "Collection manager", + "displayName.zh-CN": "数据表管理", + "description": "Provide convenient collection management capabilities", + "description.zh-CN": "提供便捷的数据表管理能力", "version": "0.11.1-alpha.5", - "main": "./lib/server/index.js", - "files": [ - "lib", - "src", - "README.md", - "README.zh-CN.md", - "CHANGELOG.md", - "server.js", - "server.d.ts", - "client.js", - "client.d.ts" - ], + "main": "./dist/server/index.js", "license": "AGPL-3.0", - "dependencies": { + "devDependencies": { "@hapi/topo": "^6.0.0", "async-mutex": "^0.3.2", "toposort": "^2.0.2" }, - "devDependencies": { - "@nocobase/client": "0.11.1-alpha.5", - "@nocobase/database": "0.11.1-alpha.5", - "@nocobase/plugin-error-handler": "0.11.1-alpha.5", - "@nocobase/server": "0.11.1-alpha.5", - "@nocobase/test": "0.11.1-alpha.5", - "@nocobase/utils": "0.11.1-alpha.5" + "peerDependencies": { + "@nocobase/client": "0.x", + "@nocobase/database": "0.x", + "@nocobase/plugin-error-handler": "0.x", + "@nocobase/server": "0.x", + "@nocobase/test": "0.x", + "@nocobase/utils": "0.x" }, "gitHead": "ce588eefb0bfc50f7d5bbee575e0b5e843bf6644" } diff --git a/packages/plugins/collection-manager/server.d.ts b/packages/plugins/collection-manager/server.d.ts index b55e6f70d..c41081ddc 100644 --- a/packages/plugins/collection-manager/server.d.ts +++ b/packages/plugins/collection-manager/server.d.ts @@ -1,3 +1,2 @@ -export * from './src/server'; -export { default } from './src/server'; - +export * from './dist/server'; +export { default } from './dist/server'; diff --git a/packages/plugins/collection-manager/server.js b/packages/plugins/collection-manager/server.js index adcc9d90d..972842039 100644 --- a/packages/plugins/collection-manager/server.js +++ b/packages/plugins/collection-manager/server.js @@ -1 +1 @@ -module.exports = require('./lib/server/index.js'); +module.exports = require('./dist/server/index.js'); diff --git a/packages/plugins/collection-manager/src/index.ts b/packages/plugins/collection-manager/src/index.ts index 7e74612df..8b419db42 100644 --- a/packages/plugins/collection-manager/src/index.ts +++ b/packages/plugins/collection-manager/src/index.ts @@ -1,2 +1,3 @@ export * from './server'; +export * from './server'; export { default } from './server'; diff --git a/packages/plugins/collection-manager/src/server/__tests__/migrations/update-id-to-bigint.test.ts b/packages/plugins/collection-manager/src/server/__tests__/migrations/update-id-to-bigint.test.ts index ca346eddf..db1a29105 100644 --- a/packages/plugins/collection-manager/src/server/__tests__/migrations/update-id-to-bigint.test.ts +++ b/packages/plugins/collection-manager/src/server/__tests__/migrations/update-id-to-bigint.test.ts @@ -1,5 +1,5 @@ import { Database, MigrationContext } from '@nocobase/database'; -import { lodash } from '@nocobase/utils'; +import lodash from 'lodash'; import Migrator from '../../migrations/20221121111113-update-id-to-bigint'; import { MockServer } from '@nocobase/test'; import { createApp } from '../index'; diff --git a/packages/plugins/collection-manager/src/server/migrations/20230704222935-tableoid.ts b/packages/plugins/collection-manager/src/server/migrations/20230704222935-tableoid.ts index 4d628ff9a..a4cd1d82e 100644 --- a/packages/plugins/collection-manager/src/server/migrations/20230704222935-tableoid.ts +++ b/packages/plugins/collection-manager/src/server/migrations/20230704222935-tableoid.ts @@ -1,5 +1,5 @@ import { Migration } from '@nocobase/server'; -import { lodash as _ } from '@nocobase/utils'; +import _ from 'lodash'; export default class extends Migration { async up() { diff --git a/packages/plugins/collection-manager/src/server/models/collection.ts b/packages/plugins/collection-manager/src/server/models/collection.ts index 010208473..6c24639f6 100644 --- a/packages/plugins/collection-manager/src/server/models/collection.ts +++ b/packages/plugins/collection-manager/src/server/models/collection.ts @@ -1,5 +1,5 @@ import Database, { Collection, MagicAttributeModel, SyncOptions, Transactionable } from '@nocobase/database'; -import { lodash } from '@nocobase/utils'; +import lodash from 'lodash'; import { FieldModel } from './field'; interface LoadOptions extends Transactionable { diff --git a/packages/plugins/collection-manager/src/server/repositories/collection-repository.ts b/packages/plugins/collection-manager/src/server/repositories/collection-repository.ts index f9336fe8d..597437be4 100644 --- a/packages/plugins/collection-manager/src/server/repositories/collection-repository.ts +++ b/packages/plugins/collection-manager/src/server/repositories/collection-repository.ts @@ -1,5 +1,6 @@ import { Repository } from '@nocobase/database'; -import { CollectionsGraph, lodash } from '@nocobase/utils'; +import { CollectionsGraph } from '@nocobase/utils'; +import lodash from 'lodash'; import { CollectionModel } from '../models/collection'; interface LoadOptions { diff --git a/packages/plugins/collection-manager/src/server/server.ts b/packages/plugins/collection-manager/src/server/server.ts index 77121d298..1e7f501ad 100644 --- a/packages/plugins/collection-manager/src/server/server.ts +++ b/packages/plugins/collection-manager/src/server/server.ts @@ -1,8 +1,8 @@ import { InheritedCollection, UniqueConstraintError } from '@nocobase/database'; import PluginErrorHandler from '@nocobase/plugin-error-handler'; import { Plugin } from '@nocobase/server'; -import { lodash } from '@nocobase/utils'; import { Mutex } from 'async-mutex'; +import lodash from 'lodash'; import path from 'path'; import * as process from 'process'; import { CollectionRepository } from '.'; diff --git a/packages/plugins/data-visualization/.npmignore b/packages/plugins/data-visualization/.npmignore new file mode 100644 index 000000000..c593fe9df --- /dev/null +++ b/packages/plugins/data-visualization/.npmignore @@ -0,0 +1,2 @@ +/node_modules +/src \ No newline at end of file diff --git a/packages/plugins/data-visualization/client.d.ts b/packages/plugins/data-visualization/client.d.ts index bd53a2f77..0c422da69 100755 --- a/packages/plugins/data-visualization/client.d.ts +++ b/packages/plugins/data-visualization/client.d.ts @@ -1,3 +1,3 @@ // @ts-nocheck -export * from './lib/client'; -export { default } from './lib/client'; +export * from './dist/client'; +export { default } from './dist/client'; diff --git a/packages/plugins/data-visualization/client.js b/packages/plugins/data-visualization/client.js index c83e7e450..4d9520d74 100755 --- a/packages/plugins/data-visualization/client.js +++ b/packages/plugins/data-visualization/client.js @@ -39,7 +39,7 @@ function _interopRequireWildcard(obj, nodeInterop) { return newObj; } -var _index = _interopRequireWildcard(require('./lib/client')); +var _index = _interopRequireWildcard(require('./dist/client')); Object.defineProperty(exports, '__esModule', { value: true, diff --git a/packages/plugins/data-visualization/package.json b/packages/plugins/data-visualization/package.json index 140065b07..c60511886 100644 --- a/packages/plugins/data-visualization/package.json +++ b/packages/plugins/data-visualization/package.json @@ -4,31 +4,32 @@ "displayName": "Data Visualization", "displayName.zh-CN": "数据可视化", "description": "Provides business intelligence and data visualization features", - "description.zh-CN": "提供BI面板和数据可视化功能", - "main": "lib/server/index.js", - "dependencies": { - "@ant-design/plots": "^1.2.5", - "classnames": "^2.3.1", - "react-error-boundary": "^4.0.10" - }, + "description.zh-CN": "提供 BI 面板和数据可视化功能", + "main": "dist/server/index.js", "devDependencies": { - "@ant-design/icons": "^5.1.4", - "@formily/antd-v5": "^1.1.0", - "@formily/core": "^2.2.27", - "@formily/react": "^2.2.27", - "@formily/shared": "^2.2.27", - "@nocobase/actions": "0.11.1-alpha.5", - "@nocobase/cache": "0.11.1-alpha.5", - "@nocobase/client": "0.11.1-alpha.5", - "@nocobase/database": "0.11.1-alpha.5", - "@nocobase/server": "0.11.1-alpha.5", - "@nocobase/test": "0.11.1-alpha.5", - "@nocobase/utils": "0.11.1-alpha.5", + "@ant-design/icons": "5.x", + "@ant-design/plots": "^1.2.5", + "@emotion/css": "^11.7.1", + "@formily/antd-v5": "1.x", + "@formily/core": "2.x", + "@formily/react": "2.x", + "@formily/shared": "2.x", "@testing-library/react": "^14.0.0", - "antd": "^5.7.3", + "antd": "5.x", + "classnames": "^2.3.1", "lodash": "^4.17.21", "react": "^18.2.0", + "react-error-boundary": "^4.0.10", "react-i18next": "^11.15.1", "vitest": "^0.33.0" + }, + "peerDependencies": { + "@nocobase/actions": "0.x", + "@nocobase/cache": "0.x", + "@nocobase/client": "0.x", + "@nocobase/database": "0.x", + "@nocobase/server": "0.x", + "@nocobase/test": "0.x", + "@nocobase/utils": "0.x" } } diff --git a/packages/plugins/data-visualization/server.d.ts b/packages/plugins/data-visualization/server.d.ts index 4d922a91b..0b9baefe6 100755 --- a/packages/plugins/data-visualization/server.d.ts +++ b/packages/plugins/data-visualization/server.d.ts @@ -1,3 +1,3 @@ // @ts-nocheck -export * from './lib/server'; -export { default } from './lib/server'; +export * from './dist/server'; +export { default } from './dist/server'; diff --git a/packages/plugins/data-visualization/server.js b/packages/plugins/data-visualization/server.js index 4f16903a6..6e7bf26d1 100755 --- a/packages/plugins/data-visualization/server.js +++ b/packages/plugins/data-visualization/server.js @@ -39,7 +39,7 @@ function _interopRequireWildcard(obj, nodeInterop) { return newObj; } -var _index = _interopRequireWildcard(require('./lib/server')); +var _index = _interopRequireWildcard(require('./dist/server')); Object.defineProperty(exports, '__esModule', { value: true, diff --git a/packages/plugins/data-visualization/src/client/block/transformers.ts b/packages/plugins/data-visualization/src/client/block/transformers.ts index 2850eeea3..f3f81e831 100644 --- a/packages/plugins/data-visualization/src/client/block/transformers.ts +++ b/packages/plugins/data-visualization/src/client/block/transformers.ts @@ -1,4 +1,4 @@ -import { dayjs } from '@nocobase/utils/client'; +import dayjs from 'dayjs'; const transformers: { [key: string]: { diff --git a/packages/plugins/data-visualization/src/index.ts b/packages/plugins/data-visualization/src/index.ts index 7ddad5814..7e74612df 100644 --- a/packages/plugins/data-visualization/src/index.ts +++ b/packages/plugins/data-visualization/src/index.ts @@ -1 +1,2 @@ +export * from './server'; export { default } from './server'; diff --git a/packages/plugins/duplicator/.npmignore b/packages/plugins/duplicator/.npmignore new file mode 100644 index 000000000..c593fe9df --- /dev/null +++ b/packages/plugins/duplicator/.npmignore @@ -0,0 +1,2 @@ +/node_modules +/src \ No newline at end of file diff --git a/packages/plugins/duplicator/client.d.ts b/packages/plugins/duplicator/client.d.ts index d515d1feb..6c459cbac 100644 --- a/packages/plugins/duplicator/client.d.ts +++ b/packages/plugins/duplicator/client.d.ts @@ -1,3 +1,2 @@ -export * from './src/client'; -export { default } from './src/client'; - +export * from './dist/client'; +export { default } from './dist/client'; diff --git a/packages/plugins/duplicator/client.js b/packages/plugins/duplicator/client.js index 3c39956ca..b6e3be70e 100644 --- a/packages/plugins/duplicator/client.js +++ b/packages/plugins/duplicator/client.js @@ -1 +1 @@ -module.exports = require('./lib/client/index.js'); +module.exports = require('./dist/client/index.js'); diff --git a/packages/plugins/duplicator/package.json b/packages/plugins/duplicator/package.json index eb1d91474..ac224210b 100644 --- a/packages/plugins/duplicator/package.json +++ b/packages/plugins/duplicator/package.json @@ -1,46 +1,35 @@ { "name": "@nocobase/plugin-duplicator", - "displayName": "duplicator", - "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 应用的备份与还原插件,可用于应用的复制、迁移、升级等场景。", + "displayName": "App backup & restore", + "displayName.zh-CN": "应用的备份与还原", + "description": "Can be used for application replication, migration, upgrade, etc", + "description.zh-CN": "可用于应用的复制、迁移、升级等场景", "version": "0.11.1-alpha.5", "license": "AGPL-3.0", - "main": "./lib/server/index.js", - "files": [ - "lib", - "src", - "README.md", - "README.zh-CN.md", - "CHANGELOG.md", - "server.js", - "server.d.ts", - "client.js", - "client.d.ts" - ], + "main": "./dist/server/index.js", "repository": { "type": "git", "url": "git+https://github.com/nocobase/nocobase.git", "directory": "packages/plugins/duplicator" }, - "dependencies": { + "devDependencies": { "@koa/multer": "^3.0.2", "@types/archiver": "^5.3.1", + "antd": "5.x", "archiver": "^5.3.1", "dayjs": "^1.11.8", "decompress": "^4.2.1", "inquirer": "^8.0.0", "koa-send": "^5.0.1", "mkdirp": "^1.0.4", + "react": "^18.2.0", "tar": "^6.1.13" }, - "devDependencies": { - "@nocobase/client": "0.11.1-alpha.5", - "@nocobase/database": "0.11.1-alpha.5", - "@nocobase/server": "0.11.1-alpha.5", - "@nocobase/test": "0.11.1-alpha.5", - "@nocobase/utils": "0.11.1-alpha.5", - "antd": "^5.7.3", - "react": "^18.2.0" + "peerDependencies": { + "@nocobase/client": "0.x", + "@nocobase/database": "0.x", + "@nocobase/server": "0.x", + "@nocobase/test": "0.x", + "@nocobase/utils": "0.x" } } diff --git a/packages/plugins/duplicator/server.d.ts b/packages/plugins/duplicator/server.d.ts index b55e6f70d..c41081ddc 100644 --- a/packages/plugins/duplicator/server.d.ts +++ b/packages/plugins/duplicator/server.d.ts @@ -1,3 +1,2 @@ -export * from './src/server'; -export { default } from './src/server'; - +export * from './dist/server'; +export { default } from './dist/server'; diff --git a/packages/plugins/duplicator/server.js b/packages/plugins/duplicator/server.js index adcc9d90d..972842039 100644 --- a/packages/plugins/duplicator/server.js +++ b/packages/plugins/duplicator/server.js @@ -1 +1 @@ -module.exports = require('./lib/server/index.js'); +module.exports = require('./dist/server/index.js'); diff --git a/packages/plugins/duplicator/src/index.ts b/packages/plugins/duplicator/src/index.ts index 7ddad5814..7e74612df 100644 --- a/packages/plugins/duplicator/src/index.ts +++ b/packages/plugins/duplicator/src/index.ts @@ -1 +1,2 @@ +export * from './server'; export { default } from './server'; diff --git a/packages/plugins/duplicator/src/server/app-migrator.ts b/packages/plugins/duplicator/src/server/app-migrator.ts index 97abfc542..4048f367a 100644 --- a/packages/plugins/duplicator/src/server/app-migrator.ts +++ b/packages/plugins/duplicator/src/server/app-migrator.ts @@ -3,7 +3,7 @@ import { applyMixins, AsyncEmitter } from '@nocobase/utils'; import crypto from 'crypto'; import EventEmitter from 'events'; import fsPromises from 'fs/promises'; -import { lodash } from '@nocobase/utils'; +import lodash from 'lodash'; import * as os from 'os'; import path from 'path'; import { CollectionGroupManager } from './collection-group-manager'; diff --git a/packages/plugins/duplicator/src/server/dumper.ts b/packages/plugins/duplicator/src/server/dumper.ts index 70a48b027..ad679d05c 100644 --- a/packages/plugins/duplicator/src/server/dumper.ts +++ b/packages/plugins/duplicator/src/server/dumper.ts @@ -1,8 +1,9 @@ import { CollectionGroup } from '@nocobase/database'; -import { dayjs, lodash } from '@nocobase/utils'; import archiver from 'archiver'; +import dayjs from 'dayjs'; import fs from 'fs'; import fsPromises from 'fs/promises'; +import lodash from 'lodash'; import mkdirp from 'mkdirp'; import path from 'path'; import stream from 'stream'; diff --git a/packages/plugins/duplicator/src/server/field-value-writer.ts b/packages/plugins/duplicator/src/server/field-value-writer.ts index c2d6e1b8d..05b1139b6 100644 --- a/packages/plugins/duplicator/src/server/field-value-writer.ts +++ b/packages/plugins/duplicator/src/server/field-value-writer.ts @@ -1,5 +1,5 @@ import { DataTypes, Field } from '@nocobase/database'; -import { lodash } from '@nocobase/utils'; +import lodash from 'lodash'; type WriterFunc = (val: any) => any; diff --git a/packages/plugins/duplicator/src/server/utils.ts b/packages/plugins/duplicator/src/server/utils.ts index 18dda245e..657c155d5 100644 --- a/packages/plugins/duplicator/src/server/utils.ts +++ b/packages/plugins/duplicator/src/server/utils.ts @@ -1,4 +1,4 @@ -import { lodash } from '@nocobase/utils'; +import lodash from 'lodash'; import { Database } from '@nocobase/database'; import fs from 'fs'; import readline from 'readline'; diff --git a/packages/plugins/error-handler/.npmignore b/packages/plugins/error-handler/.npmignore new file mode 100644 index 000000000..c593fe9df --- /dev/null +++ b/packages/plugins/error-handler/.npmignore @@ -0,0 +1,2 @@ +/node_modules +/src \ No newline at end of file diff --git a/packages/plugins/error-handler/client.d.ts b/packages/plugins/error-handler/client.d.ts index d515d1feb..6c459cbac 100644 --- a/packages/plugins/error-handler/client.d.ts +++ b/packages/plugins/error-handler/client.d.ts @@ -1,3 +1,2 @@ -export * from './src/client'; -export { default } from './src/client'; - +export * from './dist/client'; +export { default } from './dist/client'; diff --git a/packages/plugins/error-handler/client.js b/packages/plugins/error-handler/client.js index 3c39956ca..b6e3be70e 100644 --- a/packages/plugins/error-handler/client.js +++ b/packages/plugins/error-handler/client.js @@ -1 +1 @@ -module.exports = require('./lib/client/index.js'); +module.exports = require('./dist/client/index.js'); diff --git a/packages/plugins/error-handler/package.json b/packages/plugins/error-handler/package.json index b33f3063e..21093e9e1 100644 --- a/packages/plugins/error-handler/package.json +++ b/packages/plugins/error-handler/package.json @@ -1,32 +1,23 @@ { "name": "@nocobase/plugin-error-handler", "displayName": "error handler", - "displayName.zh-CN": "错误处理", - "description": "Managing and handling errors and exceptions in an application.", - "description.zh-CN": "管理和处理应用程序中的错误和异常。", + "displayName.zh-CN": "错误处理器", + "description": "Handling application errors and exceptions", + "description.zh-CN": "处理应用程序中的错误和异常", "version": "0.11.1-alpha.5", "license": "AGPL-3.0", - "main": "./lib/server/index.js", - "files": [ - "lib", - "src", - "README.md", - "README.zh-CN.md", - "CHANGELOG.md", - "server.js", - "server.d.ts", - "client.js", - "client.d.ts" - ], + "main": "./dist/server/index.js", "devDependencies": { - "@formily/json-schema": "^2.2.27", - "@nocobase/client": "0.11.1-alpha.5", - "@nocobase/database": "0.11.1-alpha.5", - "@nocobase/server": "0.11.1-alpha.5", - "@nocobase/test": "0.11.1-alpha.5", - "@nocobase/utils": "0.11.1-alpha.5", + "@formily/json-schema": "2.x", "supertest": "^6.1.6" }, + "peerDependencies": { + "@nocobase/client": "0.x", + "@nocobase/database": "0.x", + "@nocobase/server": "0.x", + "@nocobase/test": "0.x", + "@nocobase/utils": "0.x" + }, "repository": { "type": "git", "url": "git+https://github.com/nocobase/nocobase.git", diff --git a/packages/plugins/error-handler/server.d.ts b/packages/plugins/error-handler/server.d.ts index b55e6f70d..c41081ddc 100644 --- a/packages/plugins/error-handler/server.d.ts +++ b/packages/plugins/error-handler/server.d.ts @@ -1,3 +1,2 @@ -export * from './src/server'; -export { default } from './src/server'; - +export * from './dist/server'; +export { default } from './dist/server'; diff --git a/packages/plugins/error-handler/server.js b/packages/plugins/error-handler/server.js index adcc9d90d..972842039 100644 --- a/packages/plugins/error-handler/server.js +++ b/packages/plugins/error-handler/server.js @@ -1 +1 @@ -module.exports = require('./lib/server/index.js'); +module.exports = require('./dist/server/index.js'); diff --git a/packages/plugins/error-handler/src/index.ts b/packages/plugins/error-handler/src/index.ts index 7ddad5814..7e74612df 100644 --- a/packages/plugins/error-handler/src/index.ts +++ b/packages/plugins/error-handler/src/index.ts @@ -1 +1,2 @@ +export * from './server'; export { default } from './server'; diff --git a/packages/plugins/error-handler/src/server/server.ts b/packages/plugins/error-handler/src/server/server.ts index 80f640504..14dc59c08 100644 --- a/packages/plugins/error-handler/src/server/server.ts +++ b/packages/plugins/error-handler/src/server/server.ts @@ -1,7 +1,7 @@ import { Schema } from '@formily/json-schema'; import { BaseError } from '@nocobase/database'; import { Plugin } from '@nocobase/server'; -import { lodash } from '@nocobase/utils'; +import lodash from 'lodash'; import { ErrorHandler } from './error-handler'; import enUS from './locale/en_US'; import zhCN from './locale/zh_CN'; diff --git a/packages/plugins/excel-formula-field/.npmignore b/packages/plugins/excel-formula-field/.npmignore new file mode 100644 index 000000000..c593fe9df --- /dev/null +++ b/packages/plugins/excel-formula-field/.npmignore @@ -0,0 +1,2 @@ +/node_modules +/src \ No newline at end of file diff --git a/packages/plugins/excel-formula-field/client.d.ts b/packages/plugins/excel-formula-field/client.d.ts index d515d1feb..6c459cbac 100755 --- a/packages/plugins/excel-formula-field/client.d.ts +++ b/packages/plugins/excel-formula-field/client.d.ts @@ -1,3 +1,2 @@ -export * from './src/client'; -export { default } from './src/client'; - +export * from './dist/client'; +export { default } from './dist/client'; diff --git a/packages/plugins/excel-formula-field/client.js b/packages/plugins/excel-formula-field/client.js index 3c39956ca..b6e3be70e 100755 --- a/packages/plugins/excel-formula-field/client.js +++ b/packages/plugins/excel-formula-field/client.js @@ -1 +1 @@ -module.exports = require('./lib/client/index.js'); +module.exports = require('./dist/client/index.js'); diff --git a/packages/plugins/excel-formula-field/package.json b/packages/plugins/excel-formula-field/package.json index ffc5651c1..b9554c1e0 100644 --- a/packages/plugins/excel-formula-field/package.json +++ b/packages/plugins/excel-formula-field/package.json @@ -3,28 +3,17 @@ "version": "0.11.1-alpha.5", "description": "", "license": "AGPL-3.0", - "main": "./lib/server/index.js", - "files": [ - "lib", - "src", - "README.md", - "README.zh-CN.md", - "CHANGELOG.md", - "server.js", - "server.d.ts", - "client.js", - "client.d.ts" - ], - "dependencies": { - "@formulajs/formulajs": "^4.2.0" - }, + "main": "./dist/server/index.js", "devDependencies": { - "@formily/react": "^2.2.27", - "@nocobase/client": "0.11.1-alpha.5", - "@nocobase/database": "0.11.1-alpha.5", - "@nocobase/server": "0.11.1-alpha.5", - "@nocobase/test": "0.11.1-alpha.5", + "@formily/react": "2.x", + "@formulajs/formulajs": "^4.2.0", "react": "^18.2.0", "react-i18next": "^11.15.1" + }, + "peerDependencies": { + "@nocobase/client": "0.x", + "@nocobase/database": "0.x", + "@nocobase/server": "0.x", + "@nocobase/test": "0.x" } } diff --git a/packages/plugins/excel-formula-field/server.d.ts b/packages/plugins/excel-formula-field/server.d.ts index b55e6f70d..c41081ddc 100755 --- a/packages/plugins/excel-formula-field/server.d.ts +++ b/packages/plugins/excel-formula-field/server.d.ts @@ -1,3 +1,2 @@ -export * from './src/server'; -export { default } from './src/server'; - +export * from './dist/server'; +export { default } from './dist/server'; diff --git a/packages/plugins/excel-formula-field/server.js b/packages/plugins/excel-formula-field/server.js index adcc9d90d..972842039 100755 --- a/packages/plugins/excel-formula-field/server.js +++ b/packages/plugins/excel-formula-field/server.js @@ -1 +1 @@ -module.exports = require('./lib/server/index.js'); +module.exports = require('./dist/server/index.js'); diff --git a/packages/plugins/excel-formula-field/src/index.ts b/packages/plugins/excel-formula-field/src/index.ts index 7ddad5814..7e74612df 100644 --- a/packages/plugins/excel-formula-field/src/index.ts +++ b/packages/plugins/excel-formula-field/src/index.ts @@ -1 +1,2 @@ +export * from './server'; export { default } from './server'; diff --git a/packages/plugins/export/.npmignore b/packages/plugins/export/.npmignore new file mode 100644 index 000000000..c593fe9df --- /dev/null +++ b/packages/plugins/export/.npmignore @@ -0,0 +1,2 @@ +/node_modules +/src \ No newline at end of file diff --git a/packages/plugins/export/client.d.ts b/packages/plugins/export/client.d.ts index d515d1feb..6c459cbac 100755 --- a/packages/plugins/export/client.d.ts +++ b/packages/plugins/export/client.d.ts @@ -1,3 +1,2 @@ -export * from './src/client'; -export { default } from './src/client'; - +export * from './dist/client'; +export { default } from './dist/client'; diff --git a/packages/plugins/export/client.js b/packages/plugins/export/client.js index 3c39956ca..b6e3be70e 100755 --- a/packages/plugins/export/client.js +++ b/packages/plugins/export/client.js @@ -1 +1 @@ -module.exports = require('./lib/client/index.js'); +module.exports = require('./dist/client/index.js'); diff --git a/packages/plugins/export/package.json b/packages/plugins/export/package.json index 9f9513a1a..24b8a4cbd 100644 --- a/packages/plugins/export/package.json +++ b/packages/plugins/export/package.json @@ -1,40 +1,29 @@ { "name": "@nocobase/plugin-export", - "displayName": "export", + "displayName": "Export", "displayName.zh-CN": "导出", - "description": "export data", - "description.zh-CN": "导出数据。", + "description": "Export collection records to Excel table", + "description.zh-CN": "导出数据表记录为 Excel 表格", "version": "0.11.1-alpha.5", "license": "AGPL-3.0", - "main": "./lib/server/index.js", - "files": [ - "lib", - "src", - "README.md", - "README.zh-CN.md", - "CHANGELOG.md", - "server.js", - "server.d.ts", - "client.js", - "client.d.ts" - ], - "dependencies": { + "main": "./dist/server/index.js", + "devDependencies": { + "@formily/antd-v5": "1.x", + "@formily/react": "2.x", + "@formily/shared": "2.x", "@types/node-xlsx": "^0.15.1", "file-saver": "^2.0.5", - "node-xlsx": "^0.16.1" - }, - "devDependencies": { - "@formily/antd-v5": "^1.1.0", - "@formily/react": "^2.2.27", - "@formily/shared": "^2.2.27", - "@nocobase/actions": "0.11.1-alpha.5", - "@nocobase/client": "0.11.1-alpha.5", - "@nocobase/database": "0.11.1-alpha.5", - "@nocobase/server": "0.11.1-alpha.5", - "@nocobase/test": "0.11.1-alpha.5", - "@nocobase/utils": "0.11.1-alpha.5", + "node-xlsx": "^0.16.1", "react": "^18.2.0", "react-i18next": "^11.15.1" }, + "peerDependencies": { + "@nocobase/actions": "0.x", + "@nocobase/client": "0.x", + "@nocobase/database": "0.x", + "@nocobase/server": "0.x", + "@nocobase/test": "0.x", + "@nocobase/utils": "0.x" + }, "gitHead": "ce588eefb0bfc50f7d5bbee575e0b5e843bf6644" } diff --git a/packages/plugins/export/server.d.ts b/packages/plugins/export/server.d.ts index b55e6f70d..c41081ddc 100755 --- a/packages/plugins/export/server.d.ts +++ b/packages/plugins/export/server.d.ts @@ -1,3 +1,2 @@ -export * from './src/server'; -export { default } from './src/server'; - +export * from './dist/server'; +export { default } from './dist/server'; diff --git a/packages/plugins/export/server.js b/packages/plugins/export/server.js index adcc9d90d..972842039 100755 --- a/packages/plugins/export/server.js +++ b/packages/plugins/export/server.js @@ -1 +1 @@ -module.exports = require('./lib/server/index.js'); +module.exports = require('./dist/server/index.js'); diff --git a/packages/plugins/export/src/client/useExportAction.ts b/packages/plugins/export/src/client/useExportAction.ts index 4f1336b39..99bd36430 100644 --- a/packages/plugins/export/src/client/useExportAction.ts +++ b/packages/plugins/export/src/client/useExportAction.ts @@ -6,7 +6,7 @@ import { useCollectionManager, useCompile, } from '@nocobase/client'; -import { lodash } from '@nocobase/utils/client'; +import lodash from 'lodash'; import { saveAs } from 'file-saver'; import { useTranslation } from 'react-i18next'; diff --git a/packages/plugins/export/src/index.ts b/packages/plugins/export/src/index.ts index 7ddad5814..7e74612df 100644 --- a/packages/plugins/export/src/index.ts +++ b/packages/plugins/export/src/index.ts @@ -1 +1,2 @@ +export * from './server'; export { default } from './server'; diff --git a/packages/plugins/file-manager/.npmignore b/packages/plugins/file-manager/.npmignore index 461574b2f..c593fe9df 100644 --- a/packages/plugins/file-manager/.npmignore +++ b/packages/plugins/file-manager/.npmignore @@ -1,7 +1,2 @@ -node_modules -*.log -docs -__tests__ -tsconfig.json -src -.fatherrc.ts \ No newline at end of file +/node_modules +/src \ No newline at end of file diff --git a/packages/plugins/file-manager/client.d.ts b/packages/plugins/file-manager/client.d.ts index d515d1feb..6c459cbac 100644 --- a/packages/plugins/file-manager/client.d.ts +++ b/packages/plugins/file-manager/client.d.ts @@ -1,3 +1,2 @@ -export * from './src/client'; -export { default } from './src/client'; - +export * from './dist/client'; +export { default } from './dist/client'; diff --git a/packages/plugins/file-manager/client.js b/packages/plugins/file-manager/client.js index 3c39956ca..b6e3be70e 100644 --- a/packages/plugins/file-manager/client.js +++ b/packages/plugins/file-manager/client.js @@ -1 +1 @@ -module.exports = require('./lib/client/index.js'); +module.exports = require('./dist/client/index.js'); diff --git a/packages/plugins/file-manager/package.json b/packages/plugins/file-manager/package.json index b348c20bf..edd47a050 100644 --- a/packages/plugins/file-manager/package.json +++ b/packages/plugins/file-manager/package.json @@ -1,28 +1,22 @@ { "name": "@nocobase/plugin-file-manager", "version": "0.11.1-alpha.5", - "displayName": "file manager", - "displayName.zh-CN": "文件管理", + "displayName": "File manager", + "displayName.zh-CN": "文件管理器", "description": "file management plugin.", - "description.zh-CN": "文件管理。", + "description.zh-CN": "提供文件存储服务,并拓展了文件表模板和附件字段", "license": "AGPL-3.0", - "main": "./lib/server/index.js", - "files": [ - "lib", - "src", - "README.md", - "README.zh-CN.md", - "CHANGELOG.md", - "server.js", - "server.d.ts", - "client.js", - "client.d.ts" - ], - "dependencies": { + "main": "./dist/server/index.js", + "devDependencies": { "@aws-sdk/client-s3": "^3.245.0", + "@formily/antd-v5": "1.x", + "@formily/core": "2.x", + "@formily/react": "2.x", + "@formily/shared": "2.x", "@koa/multer": "^3.0.0", "@types/koa-multer": "^1.0.1", "@types/multer": "^1.4.5", + "antd": "5.x", "cos-nodejs-sdk-v5": "^2.11.14", "koa-static": "^5.0.0", "mime-match": "^1.0.2", @@ -30,23 +24,18 @@ "multer": "^1.4.2", "multer-aliyun-oss": "2.1.1", "multer-cos": "^1.0.3", - "multer-s3": "^3.0.1" - }, - "devDependencies": { - "@formily/antd-v5": "^1.1.0", - "@formily/core": "^2.2.27", - "@formily/react": "^2.2.27", - "@formily/shared": "^2.2.27", - "@nocobase/actions": "0.11.1-alpha.5", - "@nocobase/client": "0.11.1-alpha.5", - "@nocobase/database": "0.11.1-alpha.5", - "@nocobase/server": "0.11.1-alpha.5", - "@nocobase/test": "0.11.1-alpha.5", - "@nocobase/utils": "0.11.1-alpha.5", - "antd": "^5.7.3", + "multer-s3": "^3.0.1", "react": "^18.2.0", "react-i18next": "^11.15.1", "supertest": "^6.1.6" }, + "peerDependencies": { + "@nocobase/actions": "0.x", + "@nocobase/client": "0.x", + "@nocobase/database": "0.x", + "@nocobase/server": "0.x", + "@nocobase/test": "0.x", + "@nocobase/utils": "0.x" + }, "gitHead": "ce588eefb0bfc50f7d5bbee575e0b5e843bf6644" } diff --git a/packages/plugins/file-manager/server.d.ts b/packages/plugins/file-manager/server.d.ts index b55e6f70d..c41081ddc 100644 --- a/packages/plugins/file-manager/server.d.ts +++ b/packages/plugins/file-manager/server.d.ts @@ -1,3 +1,2 @@ -export * from './src/server'; -export { default } from './src/server'; - +export * from './dist/server'; +export { default } from './dist/server'; diff --git a/packages/plugins/file-manager/server.js b/packages/plugins/file-manager/server.js index adcc9d90d..972842039 100644 --- a/packages/plugins/file-manager/server.js +++ b/packages/plugins/file-manager/server.js @@ -1 +1 @@ -module.exports = require('./lib/server/index.js'); +module.exports = require('./dist/server/index.js'); diff --git a/packages/plugins/file-manager/src/index.ts b/packages/plugins/file-manager/src/index.ts index 7ddad5814..7e74612df 100644 --- a/packages/plugins/file-manager/src/index.ts +++ b/packages/plugins/file-manager/src/index.ts @@ -1 +1,2 @@ +export * from './server'; export { default } from './server'; diff --git a/packages/plugins/formula-field/.npmignore b/packages/plugins/formula-field/.npmignore new file mode 100644 index 000000000..c593fe9df --- /dev/null +++ b/packages/plugins/formula-field/.npmignore @@ -0,0 +1,2 @@ +/node_modules +/src \ No newline at end of file diff --git a/packages/plugins/formula-field/client.d.ts b/packages/plugins/formula-field/client.d.ts index d515d1feb..6c459cbac 100755 --- a/packages/plugins/formula-field/client.d.ts +++ b/packages/plugins/formula-field/client.d.ts @@ -1,3 +1,2 @@ -export * from './src/client'; -export { default } from './src/client'; - +export * from './dist/client'; +export { default } from './dist/client'; diff --git a/packages/plugins/formula-field/client.js b/packages/plugins/formula-field/client.js index 3c39956ca..b6e3be70e 100755 --- a/packages/plugins/formula-field/client.js +++ b/packages/plugins/formula-field/client.js @@ -1 +1 @@ -module.exports = require('./lib/client/index.js'); +module.exports = require('./dist/client/index.js'); diff --git a/packages/plugins/formula-field/package.json b/packages/plugins/formula-field/package.json index 39c9a2df7..5063503bd 100644 --- a/packages/plugins/formula-field/package.json +++ b/packages/plugins/formula-field/package.json @@ -6,30 +6,21 @@ "description.zh-CN": "字段。", "version": "0.11.1-alpha.5", "license": "AGPL-3.0", - "main": "./lib/server/index.js", - "files": [ - "lib", - "src", - "README.md", - "README.zh-CN.md", - "CHANGELOG.md", - "server.js", - "server.d.ts", - "client.js", - "client.d.ts" - ], + "main": "./dist/server/index.js", "devDependencies": { - "@formily/antd-v5": "^1.1.0", - "@formily/core": "^2.2.27", - "@formily/react": "^2.2.27", - "@formily/reactive": "^2.2.27", - "@nocobase/client": "0.11.1-alpha.5", - "@nocobase/database": "0.11.1-alpha.5", - "@nocobase/evaluators": "0.11.1-alpha.5", - "@nocobase/server": "0.11.1-alpha.5", - "@nocobase/test": "0.11.1-alpha.5", - "@nocobase/utils": "0.11.1-alpha.5", + "@formily/antd-v5": "1.x", + "@formily/core": "2.x", + "@formily/react": "2.x", + "@formily/reactive": "2.x", "react": "^18.2.0", "react-i18next": "^11.15.1" + }, + "peerDependencies": { + "@nocobase/client": "0.x", + "@nocobase/database": "0.x", + "@nocobase/evaluators": "0.x", + "@nocobase/server": "0.x", + "@nocobase/test": "0.x", + "@nocobase/utils": "0.x" } } diff --git a/packages/plugins/formula-field/server.d.ts b/packages/plugins/formula-field/server.d.ts index b55e6f70d..c41081ddc 100755 --- a/packages/plugins/formula-field/server.d.ts +++ b/packages/plugins/formula-field/server.d.ts @@ -1,3 +1,2 @@ -export * from './src/server'; -export { default } from './src/server'; - +export * from './dist/server'; +export { default } from './dist/server'; diff --git a/packages/plugins/formula-field/server.js b/packages/plugins/formula-field/server.js index adcc9d90d..972842039 100755 --- a/packages/plugins/formula-field/server.js +++ b/packages/plugins/formula-field/server.js @@ -1 +1 @@ -module.exports = require('./lib/server/index.js'); +module.exports = require('./dist/server/index.js'); diff --git a/packages/plugins/formula-field/src/index.ts b/packages/plugins/formula-field/src/index.ts index 7ddad5814..7e74612df 100644 --- a/packages/plugins/formula-field/src/index.ts +++ b/packages/plugins/formula-field/src/index.ts @@ -1 +1,2 @@ +export * from './server'; export { default } from './server'; diff --git a/packages/plugins/graph-collection-manager/.npmignore b/packages/plugins/graph-collection-manager/.npmignore index 461574b2f..c593fe9df 100644 --- a/packages/plugins/graph-collection-manager/.npmignore +++ b/packages/plugins/graph-collection-manager/.npmignore @@ -1,7 +1,2 @@ -node_modules -*.log -docs -__tests__ -tsconfig.json -src -.fatherrc.ts \ No newline at end of file +/node_modules +/src \ No newline at end of file diff --git a/packages/plugins/graph-collection-manager/client.d.ts b/packages/plugins/graph-collection-manager/client.d.ts index d515d1feb..6c459cbac 100755 --- a/packages/plugins/graph-collection-manager/client.d.ts +++ b/packages/plugins/graph-collection-manager/client.d.ts @@ -1,3 +1,2 @@ -export * from './src/client'; -export { default } from './src/client'; - +export * from './dist/client'; +export { default } from './dist/client'; diff --git a/packages/plugins/graph-collection-manager/client.js b/packages/plugins/graph-collection-manager/client.js index 3c39956ca..b6e3be70e 100755 --- a/packages/plugins/graph-collection-manager/client.js +++ b/packages/plugins/graph-collection-manager/client.js @@ -1 +1 @@ -module.exports = require('./lib/client/index.js'); +module.exports = require('./dist/client/index.js'); diff --git a/packages/plugins/graph-collection-manager/package.json b/packages/plugins/graph-collection-manager/package.json index 39acdb76d..64a45c9d8 100644 --- a/packages/plugins/graph-collection-manager/package.json +++ b/packages/plugins/graph-collection-manager/package.json @@ -6,36 +6,25 @@ "description.zh-CN": "数据库管理。", "version": "0.11.1-alpha.5", "license": "AGPL-3.0", - "main": "./lib/server/index.js", - "files": [ - "lib", - "src", - "README.md", - "README.zh-CN.md", - "CHANGELOG.md", - "server.js", - "server.d.ts", - "client.js", - "client.d.ts" - ], - "dependencies": { + "main": "./dist/server/index.js", + "devDependencies": { + "@ant-design/icons": "5.x", "@antv/x6": "^1.9.0", "@antv/x6-react-shape": "^1.6.2", + "@formily/react": "2.x", + "@formily/reactive": "2.x", + "@formily/shared": "2.x", "ahooks": "^3.7.2", - "dagre": "^0.8.5" - }, - "devDependencies": { - "@ant-design/icons": "^5.1.4", - "@formily/react": "^2.2.27", - "@formily/reactive": "^2.2.27", - "@formily/shared": "^2.2.27", - "@nocobase/client": "0.11.1-alpha.5", - "@nocobase/database": "0.11.1-alpha.5", - "@nocobase/server": "0.11.1-alpha.5", - "@nocobase/test": "0.11.1-alpha.5", - "@nocobase/utils": "0.11.1-alpha.5", - "antd": "^5.7.3", + "antd": "5.x", + "dagre": "^0.8.5", "react": "^18.2.0", "react-i18next": "^11.15.1" + }, + "peerDependencies": { + "@nocobase/client": "0.x", + "@nocobase/database": "0.x", + "@nocobase/server": "0.x", + "@nocobase/test": "0.x", + "@nocobase/utils": "0.x" } } diff --git a/packages/plugins/graph-collection-manager/server.d.ts b/packages/plugins/graph-collection-manager/server.d.ts index b55e6f70d..c41081ddc 100755 --- a/packages/plugins/graph-collection-manager/server.d.ts +++ b/packages/plugins/graph-collection-manager/server.d.ts @@ -1,3 +1,2 @@ -export * from './src/server'; -export { default } from './src/server'; - +export * from './dist/server'; +export { default } from './dist/server'; diff --git a/packages/plugins/graph-collection-manager/server.js b/packages/plugins/graph-collection-manager/server.js index adcc9d90d..972842039 100755 --- a/packages/plugins/graph-collection-manager/server.js +++ b/packages/plugins/graph-collection-manager/server.js @@ -1 +1 @@ -module.exports = require('./lib/server/index.js'); +module.exports = require('./dist/server/index.js'); diff --git a/packages/plugins/graph-collection-manager/src/client/GraphDrawPage.tsx b/packages/plugins/graph-collection-manager/src/client/GraphDrawPage.tsx index 7b6490d4d..25d2db241 100644 --- a/packages/plugins/graph-collection-manager/src/client/GraphDrawPage.tsx +++ b/packages/plugins/graph-collection-manager/src/client/GraphDrawPage.tsx @@ -28,7 +28,7 @@ import { useCurrentAppInfo, useGlobalTheme, } from '@nocobase/client'; -import { lodash } from '@nocobase/utils/client'; +import lodash from 'lodash'; import { useFullscreen } from 'ahooks'; import { Button, ConfigProvider, Input, Layout, Menu, Popover, Switch, Tooltip } from 'antd'; import dagre from 'dagre'; diff --git a/packages/plugins/graph-collection-manager/src/client/components/Entity.tsx b/packages/plugins/graph-collection-manager/src/client/components/Entity.tsx index 2895668e2..5dc3ffcdf 100644 --- a/packages/plugins/graph-collection-manager/src/client/components/Entity.tsx +++ b/packages/plugins/graph-collection-manager/src/client/components/Entity.tsx @@ -25,7 +25,7 @@ import { useCurrentAppInfo, useRecord, } from '@nocobase/client'; -import { lodash } from '@nocobase/utils/client'; +import lodash from 'lodash'; import { Badge, Dropdown, Popover, Tag } from 'antd'; import React, { useContext, useRef, useState } from 'react'; import { diff --git a/packages/plugins/graph-collection-manager/src/client/utils.tsx b/packages/plugins/graph-collection-manager/src/client/utils.tsx index fad1c2426..52bca3eb9 100644 --- a/packages/plugins/graph-collection-manager/src/client/utils.tsx +++ b/packages/plugins/graph-collection-manager/src/client/utils.tsx @@ -1,4 +1,4 @@ -import { lodash } from '@nocobase/utils/client'; +import lodash from 'lodash'; import { useTranslation } from 'react-i18next'; const { groupBy, reduce, uniq, uniqBy } = lodash; diff --git a/packages/plugins/graph-collection-manager/src/index.ts b/packages/plugins/graph-collection-manager/src/index.ts index 7ddad5814..7e74612df 100644 --- a/packages/plugins/graph-collection-manager/src/index.ts +++ b/packages/plugins/graph-collection-manager/src/index.ts @@ -1 +1,2 @@ +export * from './server'; export { default } from './server'; diff --git a/packages/plugins/iframe-block/.npmignore b/packages/plugins/iframe-block/.npmignore new file mode 100644 index 000000000..c593fe9df --- /dev/null +++ b/packages/plugins/iframe-block/.npmignore @@ -0,0 +1,2 @@ +/node_modules +/src \ No newline at end of file diff --git a/packages/plugins/iframe-block/client.d.ts b/packages/plugins/iframe-block/client.d.ts index d515d1feb..6c459cbac 100644 --- a/packages/plugins/iframe-block/client.d.ts +++ b/packages/plugins/iframe-block/client.d.ts @@ -1,3 +1,2 @@ -export * from './src/client'; -export { default } from './src/client'; - +export * from './dist/client'; +export { default } from './dist/client'; diff --git a/packages/plugins/iframe-block/client.js b/packages/plugins/iframe-block/client.js index 3c39956ca..b6e3be70e 100644 --- a/packages/plugins/iframe-block/client.js +++ b/packages/plugins/iframe-block/client.js @@ -1 +1 @@ -module.exports = require('./lib/client/index.js'); +module.exports = require('./dist/client/index.js'); diff --git a/packages/plugins/iframe-block/package.json b/packages/plugins/iframe-block/package.json index fa537c02a..954daeb0a 100644 --- a/packages/plugins/iframe-block/package.json +++ b/packages/plugins/iframe-block/package.json @@ -6,32 +6,21 @@ "description.zh-CN": "在页面上创建和管理iframe,用于嵌入和展示外部网页或内容。", "version": "0.11.1-alpha.5", "license": "AGPL-3.0", - "main": "./lib/server/index.js", - "files": [ - "lib", - "src", - "README.md", - "README.zh-CN.md", - "CHANGELOG.md", - "server.js", - "server.d.ts", - "client.js", - "client.d.ts" - ], - "dependencies": { + "main": "./dist/server/index.js", + "devDependencies": { + "@ant-design/icons": "5.x", + "@formily/react": "2.x", + "@formily/shared": "2.x", + "antd": "5.x", + "react": "^18.2.0", + "react-i18next": "^11.15.1", "react-iframe": "~1.8.5" }, - "devDependencies": { - "@ant-design/icons": "^5.1.4", - "@formily/react": "^2.2.27", - "@formily/shared": "^2.2.27", - "@nocobase/actions": "0.11.1-alpha.5", - "@nocobase/client": "0.11.1-alpha.5", - "@nocobase/database": "0.11.1-alpha.5", - "@nocobase/server": "0.11.1-alpha.5", - "@nocobase/test": "0.11.1-alpha.5", - "antd": "^5.7.3", - "react": "^18.2.0", - "react-i18next": "^11.15.1" + "peerDependencies": { + "@nocobase/actions": "0.x", + "@nocobase/client": "0.x", + "@nocobase/database": "0.x", + "@nocobase/server": "0.x", + "@nocobase/test": "0.x" } } diff --git a/packages/plugins/iframe-block/server.d.ts b/packages/plugins/iframe-block/server.d.ts index b55e6f70d..c41081ddc 100644 --- a/packages/plugins/iframe-block/server.d.ts +++ b/packages/plugins/iframe-block/server.d.ts @@ -1,3 +1,2 @@ -export * from './src/server'; -export { default } from './src/server'; - +export * from './dist/server'; +export { default } from './dist/server'; diff --git a/packages/plugins/iframe-block/server.js b/packages/plugins/iframe-block/server.js index adcc9d90d..972842039 100644 --- a/packages/plugins/iframe-block/server.js +++ b/packages/plugins/iframe-block/server.js @@ -1 +1 @@ -module.exports = require('./lib/server/index.js'); +module.exports = require('./dist/server/index.js'); diff --git a/packages/plugins/iframe-block/src/index.ts b/packages/plugins/iframe-block/src/index.ts index 7ddad5814..7e74612df 100644 --- a/packages/plugins/iframe-block/src/index.ts +++ b/packages/plugins/iframe-block/src/index.ts @@ -1 +1,2 @@ +export * from './server'; export { default } from './server'; diff --git a/packages/plugins/import/.npmignore b/packages/plugins/import/.npmignore new file mode 100644 index 000000000..c593fe9df --- /dev/null +++ b/packages/plugins/import/.npmignore @@ -0,0 +1,2 @@ +/node_modules +/src \ No newline at end of file diff --git a/packages/plugins/import/client.d.ts b/packages/plugins/import/client.d.ts index d515d1feb..6c459cbac 100644 --- a/packages/plugins/import/client.d.ts +++ b/packages/plugins/import/client.d.ts @@ -1,3 +1,2 @@ -export * from './src/client'; -export { default } from './src/client'; - +export * from './dist/client'; +export { default } from './dist/client'; diff --git a/packages/plugins/import/client.js b/packages/plugins/import/client.js index 3c39956ca..b6e3be70e 100644 --- a/packages/plugins/import/client.js +++ b/packages/plugins/import/client.js @@ -1 +1 @@ -module.exports = require('./lib/client/index.js'); +module.exports = require('./dist/client/index.js'); diff --git a/packages/plugins/import/package.json b/packages/plugins/import/package.json index 97e739db5..6213b6c58 100644 --- a/packages/plugins/import/package.json +++ b/packages/plugins/import/package.json @@ -6,45 +6,31 @@ "description.zh-CN": "导入数据。", "version": "0.11.1-alpha.5", "license": "AGPL-3.0", - "main": "./lib/server/index.js", - "files": [ - "lib", - "src", - "README.md", - "README.zh-CN.md", - "CHANGELOG.md", - "server.js", - "server.d.ts", - "client.js", - "client.d.ts" - ], - "dependencies": { + "main": "./dist/server/index.js", + "devDependencies": { + "@ant-design/icons": "5.x", + "@formily/antd-v5": "1.x", + "@formily/core": "2.x", + "@formily/react": "2.x", + "@formily/shared": "2.x", "@koa/multer": "^3.0.2", "@types/node-xlsx": "^0.15.1", + "antd": "5.x", "file-saver": "^2.0.5", "mathjs": "^10.6.0", "node-xlsx": "^0.16.1", - "xlsx": "^0.18.5" - }, - "devDependencies": { - "@ant-design/icons": "^5.1.4", - "@formily/antd-v5": "^1.1.0", - "@formily/core": "^2.2.27", - "@formily/react": "^2.2.27", - "@formily/shared": "^2.2.27", - "@nocobase/actions": "0.11.1-alpha.5", - "@nocobase/client": "0.11.1-alpha.5", - "@nocobase/database": "0.11.1-alpha.5", - "@nocobase/server": "0.11.1-alpha.5", - "@nocobase/test": "0.11.1-alpha.5", - "@nocobase/utils": "0.11.1-alpha.5", - "antd": "^5.7.3", "react": "^18.2.0", "react-dom": "^18.2.0", - "react-i18next": "^11.15.1" + "react-i18next": "^11.15.1", + "xlsx": "^0.17.0" }, - "publishConfig": { - "access": "public" + "peerDependencies": { + "@nocobase/actions": "0.x", + "@nocobase/client": "0.x", + "@nocobase/database": "0.x", + "@nocobase/server": "0.x", + "@nocobase/test": "0.x", + "@nocobase/utils": "0.x" }, "gitHead": "ce588eefb0bfc50f7d5bbee575e0b5e843bf6644" } diff --git a/packages/plugins/import/server.d.ts b/packages/plugins/import/server.d.ts index b55e6f70d..c41081ddc 100644 --- a/packages/plugins/import/server.d.ts +++ b/packages/plugins/import/server.d.ts @@ -1,3 +1,2 @@ -export * from './src/server'; -export { default } from './src/server'; - +export * from './dist/server'; +export { default } from './dist/server'; diff --git a/packages/plugins/import/server.js b/packages/plugins/import/server.js index adcc9d90d..972842039 100644 --- a/packages/plugins/import/server.js +++ b/packages/plugins/import/server.js @@ -1 +1 @@ -module.exports = require('./lib/server/index.js'); +module.exports = require('./dist/server/index.js'); diff --git a/packages/plugins/import/src/client/useImportAction.ts b/packages/plugins/import/src/client/useImportAction.ts index c886c24e2..8274be101 100644 --- a/packages/plugins/import/src/client/useImportAction.ts +++ b/packages/plugins/import/src/client/useImportAction.ts @@ -7,7 +7,7 @@ import { useCollectionManager, useCompile, } from '@nocobase/client'; -import { lodash } from '@nocobase/utils/client'; +import lodash from 'lodash'; import { saveAs } from 'file-saver'; import { useTranslation } from 'react-i18next'; import { NAMESPACE } from './constants'; diff --git a/packages/plugins/import/src/index.ts b/packages/plugins/import/src/index.ts index 6ccdba195..350fd47f2 100644 --- a/packages/plugins/import/src/index.ts +++ b/packages/plugins/import/src/index.ts @@ -1,2 +1,5 @@ +// @ts-ignore +import { name } from '../package.json'; +export * from './server'; export { default } from './server'; -export const namespace = require('../package.json').name; +export const namespace = name; diff --git a/packages/plugins/import/src/server/utils/index.ts b/packages/plugins/import/src/server/utils/index.ts index b9a7b5980..e9b6ee6f7 100644 --- a/packages/plugins/import/src/server/utils/index.ts +++ b/packages/plugins/import/src/server/utils/index.ts @@ -1,4 +1,4 @@ -import { lodash } from '@nocobase/utils'; +import lodash from 'lodash'; import * as transforms from './transform'; function getTransform(name: string): Function { diff --git a/packages/plugins/localization-management/.npmignore b/packages/plugins/localization-management/.npmignore new file mode 100644 index 000000000..c593fe9df --- /dev/null +++ b/packages/plugins/localization-management/.npmignore @@ -0,0 +1,2 @@ +/node_modules +/src \ No newline at end of file diff --git a/packages/plugins/localization-management/client.d.ts b/packages/plugins/localization-management/client.d.ts index bd53a2f77..0c422da69 100755 --- a/packages/plugins/localization-management/client.d.ts +++ b/packages/plugins/localization-management/client.d.ts @@ -1,3 +1,3 @@ // @ts-nocheck -export * from './lib/client'; -export { default } from './lib/client'; +export * from './dist/client'; +export { default } from './dist/client'; diff --git a/packages/plugins/localization-management/client.js b/packages/plugins/localization-management/client.js index c83e7e450..4d9520d74 100755 --- a/packages/plugins/localization-management/client.js +++ b/packages/plugins/localization-management/client.js @@ -39,7 +39,7 @@ function _interopRequireWildcard(obj, nodeInterop) { return newObj; } -var _index = _interopRequireWildcard(require('./lib/client')); +var _index = _interopRequireWildcard(require('./dist/client')); Object.defineProperty(exports, '__esModule', { value: true, diff --git a/packages/plugins/localization-management/package.json b/packages/plugins/localization-management/package.json index ff0cd1fb4..2cf2d8db3 100644 --- a/packages/plugins/localization-management/package.json +++ b/packages/plugins/localization-management/package.json @@ -1,19 +1,19 @@ { "name": "@nocobase/plugin-localization-management", "version": "0.11.1-alpha.5", - "main": "lib/server/index.js", + "main": "dist/server/index.js", "devDependencies": { - "@nocobase/cache": "0.11.1-alpha.5", - "@nocobase/client": "0.11.1-alpha.5", - "@nocobase/database": "0.11.1-alpha.5", - "@nocobase/plugin-client": "0.11.1-alpha.5", - "@nocobase/plugin-ui-schema-storage": "0.11.1-alpha.5", - "@nocobase/server": "0.11.1-alpha.5", - "@nocobase/test": "0.11.1-alpha.5" - }, - "dependencies": { "deepmerge": "^4.3.1" }, + "peerDependencies": { + "@nocobase/cache": "0.x", + "@nocobase/client": "0.x", + "@nocobase/database": "0.x", + "@nocobase/plugin-client": "0.x", + "@nocobase/plugin-ui-schema-storage": "0.x", + "@nocobase/server": "0.x", + "@nocobase/test": "0.x" + }, "displayName": "Localization management", "displayName.zh-CN": "多语言管理", "description": "Allows to manage localization resources of the application.", diff --git a/packages/plugins/localization-management/server.d.ts b/packages/plugins/localization-management/server.d.ts index 4d922a91b..0b9baefe6 100755 --- a/packages/plugins/localization-management/server.d.ts +++ b/packages/plugins/localization-management/server.d.ts @@ -1,3 +1,3 @@ // @ts-nocheck -export * from './lib/server'; -export { default } from './lib/server'; +export * from './dist/server'; +export { default } from './dist/server'; diff --git a/packages/plugins/localization-management/server.js b/packages/plugins/localization-management/server.js index 4f16903a6..6e7bf26d1 100755 --- a/packages/plugins/localization-management/server.js +++ b/packages/plugins/localization-management/server.js @@ -39,7 +39,7 @@ function _interopRequireWildcard(obj, nodeInterop) { return newObj; } -var _index = _interopRequireWildcard(require('./lib/server')); +var _index = _interopRequireWildcard(require('./dist/server')); Object.defineProperty(exports, '__esModule', { value: true, diff --git a/packages/plugins/localization-management/src/index.ts b/packages/plugins/localization-management/src/index.ts index 7ddad5814..7e74612df 100644 --- a/packages/plugins/localization-management/src/index.ts +++ b/packages/plugins/localization-management/src/index.ts @@ -1 +1,2 @@ +export * from './server'; export { default } from './server'; diff --git a/packages/plugins/localization-management/src/server/plugin.ts b/packages/plugins/localization-management/src/server/plugin.ts index 82396a704..98e1ec7f2 100644 --- a/packages/plugins/localization-management/src/server/plugin.ts +++ b/packages/plugins/localization-management/src/server/plugin.ts @@ -73,11 +73,11 @@ export class LocalizationManagementPlugin extends Plugin { }); this.db.on('afterSave', async (instance: Model) => { - if (!this.enabled) { - return; - } const model = instance.constructor as typeof Model; const collection = model.collection; + if (!collection) { + return; + } let texts = []; const fields = Array.from(collection.fields.values()) .filter((field) => field.options?.translation && instance['_changed'].has(field.name)) diff --git a/packages/plugins/map/.npmignore b/packages/plugins/map/.npmignore new file mode 100644 index 000000000..c593fe9df --- /dev/null +++ b/packages/plugins/map/.npmignore @@ -0,0 +1,2 @@ +/node_modules +/src \ No newline at end of file diff --git a/packages/plugins/map/client.d.ts b/packages/plugins/map/client.d.ts index d515d1feb..6c459cbac 100755 --- a/packages/plugins/map/client.d.ts +++ b/packages/plugins/map/client.d.ts @@ -1,3 +1,2 @@ -export * from './src/client'; -export { default } from './src/client'; - +export * from './dist/client'; +export { default } from './dist/client'; diff --git a/packages/plugins/map/client.js b/packages/plugins/map/client.js index 3c39956ca..b6e3be70e 100755 --- a/packages/plugins/map/client.js +++ b/packages/plugins/map/client.js @@ -1 +1 @@ -module.exports = require('./lib/client/index.js'); +module.exports = require('./dist/client/index.js'); diff --git a/packages/plugins/map/package.json b/packages/plugins/map/package.json index 79d2f78f1..66673f948 100644 --- a/packages/plugins/map/package.json +++ b/packages/plugins/map/package.json @@ -6,43 +6,32 @@ "description": "Provide map fields and blocks", "description.zh-CN": "提供地图字段和区块", "license": "AGPL-3.0", - "main": "./lib/server/index.js", - "files": [ - "lib", - "src", - "README.md", - "README.zh-CN.md", - "CHANGELOG.md", - "server.js", - "server.d.ts", - "client.js", - "client.d.ts" - ], - "dependencies": { + "main": "./dist/server/index.js", + "devDependencies": { "@amap/amap-jsapi-loader": "^1.0.1", "@amap/amap-jsapi-types": "^0.0.10", + "@ant-design/icons": "5.x", + "@formily/antd-v5": "1.x", + "@formily/core": "2.x", + "@formily/react": "2.x", + "@formily/shared": "2.x", "@googlemaps/js-api-loader": "^1.16.1", "@types/google.maps": "^3.53.4", - "ahooks": "^3.7.2" - }, - "devDependencies": { - "@ant-design/icons": "^5.1.4", - "@formily/antd-v5": "^1.1.0", - "@formily/core": "^2.2.27", - "@formily/react": "^2.2.27", - "@formily/shared": "^2.2.27", - "@nocobase/actions": "0.11.1-alpha.5", - "@nocobase/client": "0.11.1-alpha.5", - "@nocobase/database": "0.11.1-alpha.5", - "@nocobase/server": "0.11.1-alpha.5", - "@nocobase/test": "0.11.1-alpha.5", - "@nocobase/utils": "0.11.1-alpha.5", "@types/react": "^17.0.0", "@types/react-dom": "^17.0.0", - "antd": "^5.7.3", + "ahooks": "^3.7.2", + "antd": "5.x", "react": "18.x", "react-dom": "18.x", "react-i18next": "^11.15.1", "react-router-dom": "^6.11.2" + }, + "peerDependencies": { + "@nocobase/actions": "0.x", + "@nocobase/client": "0.x", + "@nocobase/database": "0.x", + "@nocobase/server": "0.x", + "@nocobase/test": "0.x", + "@nocobase/utils": "0.x" } } diff --git a/packages/plugins/map/server.d.ts b/packages/plugins/map/server.d.ts index b55e6f70d..c41081ddc 100755 --- a/packages/plugins/map/server.d.ts +++ b/packages/plugins/map/server.d.ts @@ -1,3 +1,2 @@ -export * from './src/server'; -export { default } from './src/server'; - +export * from './dist/server'; +export { default } from './dist/server'; diff --git a/packages/plugins/map/server.js b/packages/plugins/map/server.js index adcc9d90d..972842039 100755 --- a/packages/plugins/map/server.js +++ b/packages/plugins/map/server.js @@ -1 +1 @@ -module.exports = require('./lib/server/index.js'); +module.exports = require('./dist/server/index.js'); diff --git a/packages/plugins/map/src/client/block/MapBlockDesigner.tsx b/packages/plugins/map/src/client/block/MapBlockDesigner.tsx index 266178c52..f968261f1 100644 --- a/packages/plugins/map/src/client/block/MapBlockDesigner.tsx +++ b/packages/plugins/map/src/client/block/MapBlockDesigner.tsx @@ -11,7 +11,7 @@ import { useDesignable, useSchemaTemplate, } from '@nocobase/client'; -import { lodash } from '@nocobase/utils/client'; +import lodash from 'lodash'; import React from 'react'; import { useTranslation } from 'react-i18next'; import { useMapTranslation } from '../locale'; diff --git a/packages/plugins/map/src/client/components/AMap/Map.tsx b/packages/plugins/map/src/client/components/AMap/Map.tsx index 1a9acccdb..5fe1325bb 100644 --- a/packages/plugins/map/src/client/components/AMap/Map.tsx +++ b/packages/plugins/map/src/client/components/AMap/Map.tsx @@ -310,12 +310,15 @@ export const AMapComponent = React.forwardRef { + (window as any).define = _define; return requestIdleCallback(() => { map.current = new amap.Map(id.current, { resizeEnable: true, diff --git a/packages/plugins/map/src/client/components/Designer.tsx b/packages/plugins/map/src/client/components/Designer.tsx index 27c503d37..6ce0a77ea 100644 --- a/packages/plugins/map/src/client/components/Designer.tsx +++ b/packages/plugins/map/src/client/components/Designer.tsx @@ -10,7 +10,7 @@ import { useDesignable, useFormBlockContext, } from '@nocobase/client'; -import { lodash } from '@nocobase/utils/client'; +import lodash from 'lodash'; import React from 'react'; import { useMapTranslation } from '../locale'; diff --git a/packages/plugins/map/src/index.ts b/packages/plugins/map/src/index.ts index 7ddad5814..7e74612df 100644 --- a/packages/plugins/map/src/index.ts +++ b/packages/plugins/map/src/index.ts @@ -1 +1,2 @@ +export * from './server'; export { default } from './server'; diff --git a/packages/plugins/math-formula-field/.npmignore b/packages/plugins/math-formula-field/.npmignore new file mode 100644 index 000000000..c593fe9df --- /dev/null +++ b/packages/plugins/math-formula-field/.npmignore @@ -0,0 +1,2 @@ +/node_modules +/src \ No newline at end of file diff --git a/packages/plugins/math-formula-field/client.d.ts b/packages/plugins/math-formula-field/client.d.ts index d515d1feb..6c459cbac 100755 --- a/packages/plugins/math-formula-field/client.d.ts +++ b/packages/plugins/math-formula-field/client.d.ts @@ -1,3 +1,2 @@ -export * from './src/client'; -export { default } from './src/client'; - +export * from './dist/client'; +export { default } from './dist/client'; diff --git a/packages/plugins/math-formula-field/client.js b/packages/plugins/math-formula-field/client.js index 3c39956ca..b6e3be70e 100755 --- a/packages/plugins/math-formula-field/client.js +++ b/packages/plugins/math-formula-field/client.js @@ -1 +1 @@ -module.exports = require('./lib/client/index.js'); +module.exports = require('./dist/client/index.js'); diff --git a/packages/plugins/math-formula-field/package.json b/packages/plugins/math-formula-field/package.json index 62a2a9914..050a55d1a 100644 --- a/packages/plugins/math-formula-field/package.json +++ b/packages/plugins/math-formula-field/package.json @@ -6,28 +6,17 @@ "description.zh-CN": "一个功能强大的数学公式字段插件,旨在为数据库或数据管理系统提供灵活的数学计算和公式计算功能。它可以与各种数据库系统(如MySQL、PostgreSQL)无缝集成,并提供直观的用户界面来定义和执行数学公式字段。", "version": "0.11.1-alpha.5", "license": "AGPL-3.0", - "main": "./lib/server/index.js", - "files": [ - "lib", - "src", - "README.md", - "README.zh-CN.md", - "CHANGELOG.md", - "server.js", - "server.d.ts", - "client.js", - "client.d.ts" - ], - "dependencies": { - "mathjs": "^10.6.0" - }, + "main": "./dist/server/index.js", "devDependencies": { - "@formily/react": "^2.2.27", - "@nocobase/client": "0.11.1-alpha.5", - "@nocobase/database": "0.11.1-alpha.5", - "@nocobase/server": "0.11.1-alpha.5", - "@nocobase/test": "0.11.1-alpha.5", + "@formily/react": "2.x", + "mathjs": "^10.6.0", "react": "18.x", "react-i18next": "^11.15.1" + }, + "peerDependencies": { + "@nocobase/client": "0.x", + "@nocobase/database": "0.x", + "@nocobase/server": "0.x", + "@nocobase/test": "0.x" } } diff --git a/packages/plugins/math-formula-field/server.d.ts b/packages/plugins/math-formula-field/server.d.ts index b55e6f70d..c41081ddc 100755 --- a/packages/plugins/math-formula-field/server.d.ts +++ b/packages/plugins/math-formula-field/server.d.ts @@ -1,3 +1,2 @@ -export * from './src/server'; -export { default } from './src/server'; - +export * from './dist/server'; +export { default } from './dist/server'; diff --git a/packages/plugins/math-formula-field/server.js b/packages/plugins/math-formula-field/server.js index adcc9d90d..972842039 100755 --- a/packages/plugins/math-formula-field/server.js +++ b/packages/plugins/math-formula-field/server.js @@ -1 +1 @@ -module.exports = require('./lib/server/index.js'); +module.exports = require('./dist/server/index.js'); diff --git a/packages/plugins/math-formula-field/src/index.ts b/packages/plugins/math-formula-field/src/index.ts index 7ddad5814..7e74612df 100644 --- a/packages/plugins/math-formula-field/src/index.ts +++ b/packages/plugins/math-formula-field/src/index.ts @@ -1 +1,2 @@ +export * from './server'; export { default } from './server'; diff --git a/packages/plugins/mobile-client/.npmignore b/packages/plugins/mobile-client/.npmignore new file mode 100644 index 000000000..c593fe9df --- /dev/null +++ b/packages/plugins/mobile-client/.npmignore @@ -0,0 +1,2 @@ +/node_modules +/src \ No newline at end of file diff --git a/packages/plugins/mobile-client/client.d.ts b/packages/plugins/mobile-client/client.d.ts index d515d1feb..6c459cbac 100644 --- a/packages/plugins/mobile-client/client.d.ts +++ b/packages/plugins/mobile-client/client.d.ts @@ -1,3 +1,2 @@ -export * from './src/client'; -export { default } from './src/client'; - +export * from './dist/client'; +export { default } from './dist/client'; diff --git a/packages/plugins/mobile-client/client.js b/packages/plugins/mobile-client/client.js index 3c39956ca..b6e3be70e 100644 --- a/packages/plugins/mobile-client/client.js +++ b/packages/plugins/mobile-client/client.js @@ -1 +1 @@ -module.exports = require('./lib/client/index.js'); +module.exports = require('./dist/client/index.js'); diff --git a/packages/plugins/mobile-client/package.json b/packages/plugins/mobile-client/package.json index aca7a4904..8579b75f0 100644 --- a/packages/plugins/mobile-client/package.json +++ b/packages/plugins/mobile-client/package.json @@ -1,43 +1,32 @@ { "name": "@nocobase/plugin-mobile-client", "version": "0.11.1-alpha.5", - "main": "./lib/server/index.js", - "files": [ - "lib", - "src", - "README.md", - "README.zh-CN.md", - "CHANGELOG.md", - "server.js", - "server.d.ts", - "client.js", - "client.d.ts" - ], + "main": "./dist/server/index.js", "displayName": "Mobile-client", "displayName.zh-CN": "移动端", "description": "Provide mobile client access", "description.zh-CN": "提供移动端访问", "devDependencies": { - "@ant-design/icons": "^5.1.4", - "@formily/antd-v5": "^1.1.0", - "@formily/react": "^2.2.27", - "@formily/shared": "^2.2.27", - "@nocobase/client": "0.11.1-alpha.5", - "@nocobase/database": "0.11.1-alpha.5", - "@nocobase/server": "0.11.1-alpha.5", - "@nocobase/test": "0.11.1-alpha.5", - "@nocobase/utils": "0.11.1-alpha.5", + "@ant-design/icons": "5.x", + "@formily/antd-v5": "1.x", + "@formily/react": "2.x", + "@formily/shared": "2.x", "@types/react": "^17.0.0", "@types/react-dom": "^17.0.0", - "antd": "^5.7.3", + "antd": "5.x", + "antd-mobile": "^5.29.1", "antd-style": "^3.3.0", + "classnames": "^2.3.1", "react": "^18.0.0", "react-dom": "^18.0.0", "react-i18next": "^11.15.1", "react-router-dom": "^6.11.2" }, - "dependencies": { - "antd-mobile": "^5.29.1", - "classnames": "^2.3.1" + "peerDependencies": { + "@nocobase/client": "0.x", + "@nocobase/database": "0.x", + "@nocobase/server": "0.x", + "@nocobase/test": "0.x", + "@nocobase/utils": "0.x" } } diff --git a/packages/plugins/mobile-client/server.d.ts b/packages/plugins/mobile-client/server.d.ts index b55e6f70d..c41081ddc 100644 --- a/packages/plugins/mobile-client/server.d.ts +++ b/packages/plugins/mobile-client/server.d.ts @@ -1,3 +1,2 @@ -export * from './src/server'; -export { default } from './src/server'; - +export * from './dist/server'; +export { default } from './dist/server'; diff --git a/packages/plugins/mobile-client/server.js b/packages/plugins/mobile-client/server.js index adcc9d90d..972842039 100644 --- a/packages/plugins/mobile-client/server.js +++ b/packages/plugins/mobile-client/server.js @@ -1 +1 @@ -module.exports = require('./lib/server/index.js'); +module.exports = require('./dist/server/index.js'); diff --git a/packages/plugins/mobile-client/src/client/core/schema/hooks/useSchemaPatch.ts b/packages/plugins/mobile-client/src/client/core/schema/hooks/useSchemaPatch.ts index 6fc08e2bd..6cc29e982 100644 --- a/packages/plugins/mobile-client/src/client/core/schema/hooks/useSchemaPatch.ts +++ b/packages/plugins/mobile-client/src/client/core/schema/hooks/useSchemaPatch.ts @@ -1,6 +1,6 @@ import { useField, useFieldSchema } from '@formily/react'; import { useDesignable } from '@nocobase/client'; -import { lodash } from '@nocobase/utils/client'; +import lodash from 'lodash'; import { useCallback } from 'react'; export const useSchemaPatch = () => { diff --git a/packages/plugins/mobile-client/src/index.ts b/packages/plugins/mobile-client/src/index.ts index 7ddad5814..7e74612df 100644 --- a/packages/plugins/mobile-client/src/index.ts +++ b/packages/plugins/mobile-client/src/index.ts @@ -1 +1,2 @@ +export * from './server'; export { default } from './server'; diff --git a/packages/plugins/multi-app-manager/.npmignore b/packages/plugins/multi-app-manager/.npmignore index 461574b2f..c593fe9df 100644 --- a/packages/plugins/multi-app-manager/.npmignore +++ b/packages/plugins/multi-app-manager/.npmignore @@ -1,7 +1,2 @@ -node_modules -*.log -docs -__tests__ -tsconfig.json -src -.fatherrc.ts \ No newline at end of file +/node_modules +/src \ No newline at end of file diff --git a/packages/plugins/multi-app-manager/client.d.ts b/packages/plugins/multi-app-manager/client.d.ts index d515d1feb..503136844 100755 --- a/packages/plugins/multi-app-manager/client.d.ts +++ b/packages/plugins/multi-app-manager/client.d.ts @@ -1,3 +1 @@ -export * from './src/client'; -export { default } from './src/client'; - +export * from './dist/client/index'; diff --git a/packages/plugins/multi-app-manager/client.js b/packages/plugins/multi-app-manager/client.js index 3c39956ca..b6e3be70e 100755 --- a/packages/plugins/multi-app-manager/client.js +++ b/packages/plugins/multi-app-manager/client.js @@ -1 +1 @@ -module.exports = require('./lib/client/index.js'); +module.exports = require('./dist/client/index.js'); diff --git a/packages/plugins/multi-app-manager/package.json b/packages/plugins/multi-app-manager/package.json index 60e9b236f..57b0e7c03 100644 --- a/packages/plugins/multi-app-manager/package.json +++ b/packages/plugins/multi-app-manager/package.json @@ -6,33 +6,24 @@ "description.zh-CN": "管理应用", "version": "0.11.1-alpha.5", "license": "AGPL-3.0", - "main": "./lib/server/index.js", - "files": [ - "lib", - "src", - "README.md", - "README.zh-CN.md", - "CHANGELOG.md", - "server.js", - "server.d.ts", - "client.js", - "client.d.ts" - ], + "main": "./dist/server/index.js", "devDependencies": { - "@formily/react": "^2.2.27", - "@formily/shared": "^2.2.27", - "@nocobase/client": "0.11.1-alpha.5", - "@nocobase/database": "0.11.1-alpha.5", - "@nocobase/server": "0.11.1-alpha.5", - "@nocobase/test": "0.11.1-alpha.5", - "@nocobase/utils": "0.11.1-alpha.5", - "antd": "^5.7.3", + "@formily/react": "2.x", + "@formily/shared": "2.x", + "antd": "5.x", + "async-mutex": "^0.3.2", + "mysql2": "^2.3.3", + "pg": "^8.7.3", "react": "18.x", "react-i18next": "^11.15.1", "react-router-dom": "^6.11.2" }, - "dependencies": { - "async-mutex": "^0.3.2" + "peerDependencies": { + "@nocobase/client": "0.x", + "@nocobase/database": "0.x", + "@nocobase/server": "0.x", + "@nocobase/test": "0.x", + "@nocobase/utils": "0.x" }, "gitHead": "ce588eefb0bfc50f7d5bbee575e0b5e843bf6644" } diff --git a/packages/plugins/multi-app-manager/server.d.ts b/packages/plugins/multi-app-manager/server.d.ts index b55e6f70d..c41081ddc 100755 --- a/packages/plugins/multi-app-manager/server.d.ts +++ b/packages/plugins/multi-app-manager/server.d.ts @@ -1,3 +1,2 @@ -export * from './src/server'; -export { default } from './src/server'; - +export * from './dist/server'; +export { default } from './dist/server'; diff --git a/packages/plugins/multi-app-manager/server.js b/packages/plugins/multi-app-manager/server.js index adcc9d90d..972842039 100755 --- a/packages/plugins/multi-app-manager/server.js +++ b/packages/plugins/multi-app-manager/server.js @@ -1 +1 @@ -module.exports = require('./lib/server/index.js'); +module.exports = require('./dist/server/index.js'); diff --git a/packages/plugins/multi-app-manager/src/client/index.ts b/packages/plugins/multi-app-manager/src/client/index.ts index b2fc64db8..01b4d080e 100644 --- a/packages/plugins/multi-app-manager/src/client/index.ts +++ b/packages/plugins/multi-app-manager/src/client/index.ts @@ -1,6 +1,5 @@ import { Plugin } from '@nocobase/client'; import { MultiAppManagerProvider } from './MultiAppManagerProvider'; -export { tableActionColumnSchema } from './settings/schemas/applications'; export class MultiAppManagerPlugin extends Plugin { async load() { @@ -9,3 +8,4 @@ export class MultiAppManagerPlugin extends Plugin { } export default MultiAppManagerPlugin; +export { tableActionColumnSchema } from './settings/schemas/applications'; diff --git a/packages/plugins/multi-app-manager/src/index.ts b/packages/plugins/multi-app-manager/src/index.ts index 7ddad5814..7e74612df 100644 --- a/packages/plugins/multi-app-manager/src/index.ts +++ b/packages/plugins/multi-app-manager/src/index.ts @@ -1 +1,2 @@ +export * from './server'; export { default } from './server'; diff --git a/packages/plugins/multi-app-manager/src/server/server.ts b/packages/plugins/multi-app-manager/src/server/server.ts index 904f19c5e..35d3b62ce 100644 --- a/packages/plugins/multi-app-manager/src/server/server.ts +++ b/packages/plugins/multi-app-manager/src/server/server.ts @@ -1,6 +1,6 @@ import Database, { IDatabaseOptions, Transactionable } from '@nocobase/database'; import Application, { AppManager, Plugin } from '@nocobase/server'; -import { lodash } from '@nocobase/utils'; +import lodash from 'lodash'; import * as path from 'path'; import { resolve } from 'path'; import { ApplicationModel } from './models/application'; diff --git a/packages/plugins/multi-app-share-collection/.npmignore b/packages/plugins/multi-app-share-collection/.npmignore new file mode 100644 index 000000000..c593fe9df --- /dev/null +++ b/packages/plugins/multi-app-share-collection/.npmignore @@ -0,0 +1,2 @@ +/node_modules +/src \ No newline at end of file diff --git a/packages/plugins/multi-app-share-collection/client.d.ts b/packages/plugins/multi-app-share-collection/client.d.ts index d515d1feb..6c459cbac 100755 --- a/packages/plugins/multi-app-share-collection/client.d.ts +++ b/packages/plugins/multi-app-share-collection/client.d.ts @@ -1,3 +1,2 @@ -export * from './src/client'; -export { default } from './src/client'; - +export * from './dist/client'; +export { default } from './dist/client'; diff --git a/packages/plugins/multi-app-share-collection/client.js b/packages/plugins/multi-app-share-collection/client.js index 3c39956ca..b6e3be70e 100755 --- a/packages/plugins/multi-app-share-collection/client.js +++ b/packages/plugins/multi-app-share-collection/client.js @@ -1 +1 @@ -module.exports = require('./lib/client/index.js'); +module.exports = require('./dist/client/index.js'); diff --git a/packages/plugins/multi-app-share-collection/package.json b/packages/plugins/multi-app-share-collection/package.json index e5fef9b01..7b4107a7e 100644 --- a/packages/plugins/multi-app-share-collection/package.json +++ b/packages/plugins/multi-app-share-collection/package.json @@ -5,31 +5,22 @@ "description": "multi app share collection", "description.zh-CN": "多应用数据共享", "version": "0.11.1-alpha.5", - "main": "./lib/server/index.js", - "files": [ - "lib", - "src", - "README.md", - "README.zh-CN.md", - "CHANGELOG.md", - "server.js", - "server.d.ts", - "client.js", - "client.d.ts" - ], + "main": "./dist/server/index.js", "devDependencies": { - "@formily/react": "^2.2.27", - "@nocobase/client": "0.11.1-alpha.5", - "@nocobase/database": "0.11.1-alpha.5", - "@nocobase/plugin-collection-manager": "0.11.1-alpha.5", - "@nocobase/plugin-error-handler": "0.11.1-alpha.5", - "@nocobase/plugin-multi-app-manager": "0.11.1-alpha.5", - "@nocobase/plugin-users": "0.11.1-alpha.5", - "@nocobase/server": "0.11.1-alpha.5", - "@nocobase/test": "0.11.1-alpha.5", - "@nocobase/utils": "0.11.1-alpha.5", - "antd": "^5.7.3", + "@formily/react": "2.x", + "antd": "5.x", "react": "18.x", "react-i18next": "^11.15.1" + }, + "peerDependencies": { + "@nocobase/client": "0.x", + "@nocobase/database": "0.x", + "@nocobase/plugin-collection-manager": "0.x", + "@nocobase/plugin-error-handler": "0.x", + "@nocobase/plugin-multi-app-manager": "0.x", + "@nocobase/plugin-users": "0.x", + "@nocobase/server": "0.x", + "@nocobase/test": "0.x", + "@nocobase/utils": "0.x" } } diff --git a/packages/plugins/multi-app-share-collection/server.d.ts b/packages/plugins/multi-app-share-collection/server.d.ts index b55e6f70d..c41081ddc 100755 --- a/packages/plugins/multi-app-share-collection/server.d.ts +++ b/packages/plugins/multi-app-share-collection/server.d.ts @@ -1,3 +1,2 @@ -export * from './src/server'; -export { default } from './src/server'; - +export * from './dist/server'; +export { default } from './dist/server'; diff --git a/packages/plugins/multi-app-share-collection/server.js b/packages/plugins/multi-app-share-collection/server.js index adcc9d90d..972842039 100755 --- a/packages/plugins/multi-app-share-collection/server.js +++ b/packages/plugins/multi-app-share-collection/server.js @@ -1 +1 @@ -module.exports = require('./lib/server/index.js'); +module.exports = require('./dist/server/index.js'); diff --git a/packages/plugins/multi-app-share-collection/src/index.ts b/packages/plugins/multi-app-share-collection/src/index.ts index 7ddad5814..7e74612df 100644 --- a/packages/plugins/multi-app-share-collection/src/index.ts +++ b/packages/plugins/multi-app-share-collection/src/index.ts @@ -1 +1,2 @@ +export * from './server'; export { default } from './server'; diff --git a/packages/plugins/multi-app-share-collection/src/server/plugin.ts b/packages/plugins/multi-app-share-collection/src/server/plugin.ts index b24294abe..27a2e2071 100644 --- a/packages/plugins/multi-app-share-collection/src/server/plugin.ts +++ b/packages/plugins/multi-app-share-collection/src/server/plugin.ts @@ -1,6 +1,6 @@ import PluginMultiAppManager from '@nocobase/plugin-multi-app-manager'; import { Application, Plugin } from '@nocobase/server'; -import { lodash } from '@nocobase/utils'; +import lodash from 'lodash'; import { resolve } from 'path'; const subAppFilteredPlugins = ['multi-app-share-collection', 'multi-app-manager']; diff --git a/packages/plugins/notifications/client.d.ts b/packages/plugins/notifications/client.d.ts index d515d1feb..6c459cbac 100644 --- a/packages/plugins/notifications/client.d.ts +++ b/packages/plugins/notifications/client.d.ts @@ -1,3 +1,2 @@ -export * from './src/client'; -export { default } from './src/client'; - +export * from './dist/client'; +export { default } from './dist/client'; diff --git a/packages/plugins/notifications/client.js b/packages/plugins/notifications/client.js index 3c39956ca..b6e3be70e 100644 --- a/packages/plugins/notifications/client.js +++ b/packages/plugins/notifications/client.js @@ -1 +1 @@ -module.exports = require('./lib/client/index.js'); +module.exports = require('./dist/client/index.js'); diff --git a/packages/plugins/notifications/package.json b/packages/plugins/notifications/package.json index e9ae9b7e5..e32bc7a76 100644 --- a/packages/plugins/notifications/package.json +++ b/packages/plugins/notifications/package.json @@ -3,29 +3,18 @@ "version": "0.11.1-alpha.5", "description": "", "license": "AGPL-3.0", - "main": "./lib/server/index.js", - "files": [ - "lib", - "src", - "README.md", - "README.zh-CN.md", - "CHANGELOG.md", - "server.js", - "server.d.ts", - "client.js", - "client.d.ts" - ], - "dependencies": { - "@types/nodemailer": "6.4.4", - "nodemailer": "^6.6.1" - }, + "main": "./dist/server/index.js", "devDependencies": { - "@nocobase/client": "0.11.1-alpha.5", - "@nocobase/database": "0.11.1-alpha.5", - "@nocobase/server": "0.11.1-alpha.5", - "@nocobase/test": "0.11.1-alpha.5", - "@nocobase/utils": "0.11.1-alpha.5", + "@types/nodemailer": "6.4.4", + "nodemailer": "^6.6.1", "nodemailer-mock": "^1.5.11" }, + "peerDependencies": { + "@nocobase/client": "0.x", + "@nocobase/database": "0.x", + "@nocobase/server": "0.x", + "@nocobase/test": "0.x", + "@nocobase/utils": "0.x" + }, "gitHead": "ce588eefb0bfc50f7d5bbee575e0b5e843bf6644" } diff --git a/packages/plugins/notifications/server.d.ts b/packages/plugins/notifications/server.d.ts index b55e6f70d..c41081ddc 100644 --- a/packages/plugins/notifications/server.d.ts +++ b/packages/plugins/notifications/server.d.ts @@ -1,3 +1,2 @@ -export * from './src/server'; -export { default } from './src/server'; - +export * from './dist/server'; +export { default } from './dist/server'; diff --git a/packages/plugins/notifications/server.js b/packages/plugins/notifications/server.js index adcc9d90d..972842039 100644 --- a/packages/plugins/notifications/server.js +++ b/packages/plugins/notifications/server.js @@ -1 +1 @@ -module.exports = require('./lib/server/index.js'); +module.exports = require('./dist/server/index.js'); diff --git a/packages/plugins/notifications/src/index.ts b/packages/plugins/notifications/src/index.ts index 7ddad5814..7e74612df 100644 --- a/packages/plugins/notifications/src/index.ts +++ b/packages/plugins/notifications/src/index.ts @@ -1 +1,2 @@ +export * from './server'; export { default } from './server'; diff --git a/packages/plugins/notifications/src/server/models/Notification.ts b/packages/plugins/notifications/src/server/models/Notification.ts index ba031338d..fe44dfd6a 100644 --- a/packages/plugins/notifications/src/server/models/Notification.ts +++ b/packages/plugins/notifications/src/server/models/Notification.ts @@ -1,5 +1,5 @@ import Database, { Model } from '@nocobase/database'; -import { lodash } from '@nocobase/utils'; +import lodash from 'lodash'; import { NotificationService } from './NotificationService'; export class Notification extends Model { diff --git a/packages/plugins/oidc/.npmignore b/packages/plugins/oidc/.npmignore new file mode 100644 index 000000000..c593fe9df --- /dev/null +++ b/packages/plugins/oidc/.npmignore @@ -0,0 +1,2 @@ +/node_modules +/src \ No newline at end of file diff --git a/packages/plugins/oidc/client.d.ts b/packages/plugins/oidc/client.d.ts index d515d1feb..6c459cbac 100755 --- a/packages/plugins/oidc/client.d.ts +++ b/packages/plugins/oidc/client.d.ts @@ -1,3 +1,2 @@ -export * from './src/client'; -export { default } from './src/client'; - +export * from './dist/client'; +export { default } from './dist/client'; diff --git a/packages/plugins/oidc/client.js b/packages/plugins/oidc/client.js index 3c39956ca..b6e3be70e 100755 --- a/packages/plugins/oidc/client.js +++ b/packages/plugins/oidc/client.js @@ -1 +1 @@ -module.exports = require('./lib/client/index.js'); +module.exports = require('./dist/client/index.js'); diff --git a/packages/plugins/oidc/package.json b/packages/plugins/oidc/package.json index 0b8d20a0a..b4fa647b6 100644 --- a/packages/plugins/oidc/package.json +++ b/packages/plugins/oidc/package.json @@ -1,40 +1,29 @@ { "name": "@nocobase/plugin-oidc", - "displayName": "OpenID Connect", - "displayName.zh-CN": "OpenID Connect", - "description": "Provides OIDC authentication and authorization functionality for applications or authentication systems.", - "description.zh-CN": "为应用程序或身份验证系统提供OIDC认证和授权功能。", + "displayName": "SSO login - OpenID Connect", + "displayName.zh-CN": "SSO 登录 - OpenID Connect", + "description": "Provides SAML authentication and authorization functionality for applications or authentication systems.", + "description.zh-CN": "为应用程序或身份验证系统提供SAML认证和授权功能。", "version": "0.11.1-alpha.5", "license": "AGPL-3.0", - "main": "./lib/server/index.js", - "files": [ - "lib", - "src", - "README.md", - "README.zh-CN.md", - "CHANGELOG.md", - "server.js", - "server.d.ts", - "client.js", - "client.d.ts" - ], + "main": "./dist/server/index.js", "devDependencies": { - "@ant-design/icons": "^5.1.4", - "@formily/antd-v5": "^1.1.0", - "@formily/react": "^2.2.27", - "@nocobase/actions": "0.11.1-alpha.5", - "@nocobase/auth": "0.11.1-alpha.5", - "@nocobase/client": "0.11.1-alpha.5", - "@nocobase/database": "0.11.1-alpha.5", - "@nocobase/server": "0.11.1-alpha.5", - "@nocobase/test": "0.11.1-alpha.5", + "@ant-design/icons": "5.x", + "@formily/antd-v5": "1.x", + "@formily/react": "2.x", "ahooks": "^3.7.2", - "antd": "^5.7.3", + "antd": "5.x", + "nanoid": "3.3.4", + "openid-client": "^5.4.2", "react": "18.x", "react-i18next": "^11.15.1" }, - "dependencies": { - "nanoid": "3.3.4", - "openid-client": "^5.4.2" + "peerDependencies": { + "@nocobase/actions": "0.x", + "@nocobase/auth": "0.x", + "@nocobase/client": "0.x", + "@nocobase/database": "0.x", + "@nocobase/server": "0.x", + "@nocobase/test": "0.x" } } diff --git a/packages/plugins/oidc/server.d.ts b/packages/plugins/oidc/server.d.ts index b55e6f70d..c41081ddc 100755 --- a/packages/plugins/oidc/server.d.ts +++ b/packages/plugins/oidc/server.d.ts @@ -1,3 +1,2 @@ -export * from './src/server'; -export { default } from './src/server'; - +export * from './dist/server'; +export { default } from './dist/server'; diff --git a/packages/plugins/oidc/server.js b/packages/plugins/oidc/server.js index adcc9d90d..972842039 100755 --- a/packages/plugins/oidc/server.js +++ b/packages/plugins/oidc/server.js @@ -1 +1 @@ -module.exports = require('./lib/server/index.js'); +module.exports = require('./dist/server/index.js'); diff --git a/packages/plugins/oidc/src/constants.ts b/packages/plugins/oidc/src/constants.ts index 06c5d70b1..4cd707033 100644 --- a/packages/plugins/oidc/src/constants.ts +++ b/packages/plugins/oidc/src/constants.ts @@ -1,3 +1,6 @@ +// @ts-ignore +import { name } from '../package.json'; + export const authType = 'OIDC'; export const cookieName = 'nocobase_oidc'; -export const namespace = require('../package.json').name; +export const namespace = name; diff --git a/packages/plugins/oidc/src/index.ts b/packages/plugins/oidc/src/index.ts index 7ddad5814..7e74612df 100644 --- a/packages/plugins/oidc/src/index.ts +++ b/packages/plugins/oidc/src/index.ts @@ -1 +1,2 @@ +export * from './server'; export { default } from './server'; diff --git a/packages/plugins/saml/.npmignore b/packages/plugins/saml/.npmignore new file mode 100644 index 000000000..c593fe9df --- /dev/null +++ b/packages/plugins/saml/.npmignore @@ -0,0 +1,2 @@ +/node_modules +/src \ No newline at end of file diff --git a/packages/plugins/saml/client.d.ts b/packages/plugins/saml/client.d.ts index d515d1feb..6c459cbac 100755 --- a/packages/plugins/saml/client.d.ts +++ b/packages/plugins/saml/client.d.ts @@ -1,3 +1,2 @@ -export * from './src/client'; -export { default } from './src/client'; - +export * from './dist/client'; +export { default } from './dist/client'; diff --git a/packages/plugins/saml/client.js b/packages/plugins/saml/client.js index 3c39956ca..b6e3be70e 100755 --- a/packages/plugins/saml/client.js +++ b/packages/plugins/saml/client.js @@ -1 +1 @@ -module.exports = require('./lib/client/index.js'); +module.exports = require('./dist/client/index.js'); diff --git a/packages/plugins/saml/package.json b/packages/plugins/saml/package.json index 434e6bbb5..dd7f51e99 100644 --- a/packages/plugins/saml/package.json +++ b/packages/plugins/saml/package.json @@ -1,37 +1,26 @@ { "name": "@nocobase/plugin-saml", - "displayName": "SAML", - "displayName.zh-CN": "SAML", - "description": "Provides SAML authentication and authorization functionality for applications or authentication systems.", - "description.zh-CN": "为应用程序或身份验证系统提供SAML认证和授权功能。", + "displayName": "SSO login - SAML", + "displayName.zh-CN": "SSO 登录 - SAML", + "description": "", + "description.zh-CN": "", "version": "0.11.1-alpha.5", "license": "AGPL-3.0", - "main": "./lib/server/index.js", - "files": [ - "lib", - "src", - "README.md", - "README.zh-CN.md", - "CHANGELOG.md", - "server.js", - "server.d.ts", - "client.js", - "client.d.ts" - ], + "main": "./dist/server/index.js", "devDependencies": { - "@ant-design/icons": "^5.1.4", - "@formily/react": "^2.2.27", - "@nocobase/actions": "0.11.1-alpha.5", - "@nocobase/auth": "0.11.1-alpha.5", - "@nocobase/client": "0.11.1-alpha.5", - "@nocobase/database": "0.11.1-alpha.5", - "@nocobase/server": "0.11.1-alpha.5", - "@nocobase/test": "0.11.1-alpha.5", - "antd": "^5.7.3", + "@ant-design/icons": "5.x", + "@formily/react": "2.x", + "@node-saml/node-saml": "^4.0.2", + "antd": "5.x", "react": "18.x", "react-i18next": "^11.15.1" }, - "dependencies": { - "@node-saml/node-saml": "^4.0.2" + "peerDependencies": { + "@nocobase/actions": "0.x", + "@nocobase/auth": "0.x", + "@nocobase/client": "0.x", + "@nocobase/database": "0.x", + "@nocobase/server": "0.x", + "@nocobase/test": "0.x" } } diff --git a/packages/plugins/saml/server.d.ts b/packages/plugins/saml/server.d.ts index b55e6f70d..c41081ddc 100755 --- a/packages/plugins/saml/server.d.ts +++ b/packages/plugins/saml/server.d.ts @@ -1,3 +1,2 @@ -export * from './src/server'; -export { default } from './src/server'; - +export * from './dist/server'; +export { default } from './dist/server'; diff --git a/packages/plugins/saml/server.js b/packages/plugins/saml/server.js index adcc9d90d..972842039 100755 --- a/packages/plugins/saml/server.js +++ b/packages/plugins/saml/server.js @@ -1 +1 @@ -module.exports = require('./lib/server/index.js'); +module.exports = require('./dist/server/index.js'); diff --git a/packages/plugins/saml/src/constants.ts b/packages/plugins/saml/src/constants.ts index c261693dd..cf7b0fdb2 100644 --- a/packages/plugins/saml/src/constants.ts +++ b/packages/plugins/saml/src/constants.ts @@ -1,2 +1,5 @@ +// @ts-ignore +import { name } from '../package.json'; + export const authType = 'SAML'; -export const namespace = require('../package.json').name; +export const namespace = name; diff --git a/packages/plugins/saml/src/index.ts b/packages/plugins/saml/src/index.ts index 7ddad5814..7e74612df 100644 --- a/packages/plugins/saml/src/index.ts +++ b/packages/plugins/saml/src/index.ts @@ -1 +1,2 @@ +export * from './server'; export { default } from './server'; diff --git a/packages/plugins/sequence-field/.npmignore b/packages/plugins/sequence-field/.npmignore new file mode 100644 index 000000000..c593fe9df --- /dev/null +++ b/packages/plugins/sequence-field/.npmignore @@ -0,0 +1,2 @@ +/node_modules +/src \ No newline at end of file diff --git a/packages/plugins/sequence-field/client.d.ts b/packages/plugins/sequence-field/client.d.ts index d515d1feb..6c459cbac 100644 --- a/packages/plugins/sequence-field/client.d.ts +++ b/packages/plugins/sequence-field/client.d.ts @@ -1,3 +1,2 @@ -export * from './src/client'; -export { default } from './src/client'; - +export * from './dist/client'; +export { default } from './dist/client'; diff --git a/packages/plugins/sequence-field/client.js b/packages/plugins/sequence-field/client.js index 3c39956ca..b6e3be70e 100644 --- a/packages/plugins/sequence-field/client.js +++ b/packages/plugins/sequence-field/client.js @@ -1 +1 @@ -module.exports = require('./lib/client/index.js'); +module.exports = require('./dist/client/index.js'); diff --git a/packages/plugins/sequence-field/package.json b/packages/plugins/sequence-field/package.json index 6270028bf..f405db077 100644 --- a/packages/plugins/sequence-field/package.json +++ b/packages/plugins/sequence-field/package.json @@ -1,41 +1,31 @@ { "name": "@nocobase/plugin-sequence-field", "displayName": "sequence field", - "displayName.zh-CN": "字段序列", - "description": "provide the functionality of automatically generating unique sequence values for databases or data management systems.", - "description.zh-CN": "为数据库或数据管理系统提供自动生成唯一序列值的功能。", + "displayName.zh-CN": "自动编码字段", + "description": "", + "description.zh-CN": "", "version": "0.11.1-alpha.5", "license": "AGPL-3.0", - "main": "./lib/server/index.js", - "files": [ - "lib", - "src", - "README.md", - "README.zh-CN.md", - "CHANGELOG.md", - "server.js", - "server.d.ts", - "client.js", - "client.d.ts" - ], - "dependencies": { + "main": "./dist/server/index.js", + "devDependencies": { + "@formily/antd-v5": "1.x", + "@formily/core": "2.x", + "@formily/react": "2.x", + "antd": "5.x", "classnames": "^2.3.1", "cron-parser": "4.4.0", + "react": "18.x", + "react-i18next": "^11.15.1", "react-js-cron": "^3.1.0" }, - "devDependencies": { - "@formily/antd-v5": "^1.1.0", - "@formily/core": "^2.2.27", - "@formily/react": "^2.2.27", - "@nocobase/actions": "0.11.1-alpha.5", - "@nocobase/client": "0.11.1-alpha.5", - "@nocobase/plugin-collection-manager": "0.11.1-alpha.5", - "@nocobase/server": "0.11.1-alpha.5", - "@nocobase/test": "0.11.1-alpha.5", - "@nocobase/utils": "0.11.1-alpha.5", - "antd": "^5.7.3", - "react": "18.x", - "react-i18next": "^11.15.1" + "peerDependencies": { + "@nocobase/actions": "0.x", + "@nocobase/client": "0.x", + "@nocobase/database": "0.x", + "@nocobase/plugin-collection-manager": "0.x", + "@nocobase/server": "0.x", + "@nocobase/test": "0.x", + "@nocobase/utils": "0.x" }, "gitHead": "ce588eefb0bfc50f7d5bbee575e0b5e843bf6644" } diff --git a/packages/plugins/sequence-field/server.d.ts b/packages/plugins/sequence-field/server.d.ts index b55e6f70d..c41081ddc 100644 --- a/packages/plugins/sequence-field/server.d.ts +++ b/packages/plugins/sequence-field/server.d.ts @@ -1,3 +1,2 @@ -export * from './src/server'; -export { default } from './src/server'; - +export * from './dist/server'; +export { default } from './dist/server'; diff --git a/packages/plugins/sequence-field/server.js b/packages/plugins/sequence-field/server.js index adcc9d90d..972842039 100644 --- a/packages/plugins/sequence-field/server.js +++ b/packages/plugins/sequence-field/server.js @@ -1 +1 @@ -module.exports = require('./lib/server/index.js'); +module.exports = require('./dist/server/index.js'); diff --git a/packages/plugins/sequence-field/src/index.ts b/packages/plugins/sequence-field/src/index.ts index 7ddad5814..7e74612df 100644 --- a/packages/plugins/sequence-field/src/index.ts +++ b/packages/plugins/sequence-field/src/index.ts @@ -1 +1,2 @@ +export * from './server'; export { default } from './server'; diff --git a/packages/plugins/sequence-field/src/server/__tests__/sequence-field.test.ts b/packages/plugins/sequence-field/src/server/__tests__/sequence-field.test.ts index e09978512..607421f44 100644 --- a/packages/plugins/sequence-field/src/server/__tests__/sequence-field.test.ts +++ b/packages/plugins/sequence-field/src/server/__tests__/sequence-field.test.ts @@ -1,7 +1,7 @@ import { Database } from '@nocobase/database'; import { Application } from '@nocobase/server'; import { mockServer } from '@nocobase/test'; -import { dayjs } from '@nocobase/utils'; +import dayjs from 'dayjs'; import Plugin, { SequenceField } from '..'; describe('sequence field', () => { diff --git a/packages/plugins/sequence-field/src/server/fields/sequence-field.ts b/packages/plugins/sequence-field/src/server/fields/sequence-field.ts index 58639e6e4..21f621403 100644 --- a/packages/plugins/sequence-field/src/server/fields/sequence-field.ts +++ b/packages/plugins/sequence-field/src/server/fields/sequence-field.ts @@ -8,8 +8,10 @@ import { ValidationError, ValidationErrorItem, } from '@nocobase/database'; -import { Registry, dayjs, lodash } from '@nocobase/utils'; +import { Registry } from '@nocobase/utils'; import parser from 'cron-parser'; +import dayjs from 'dayjs'; +import lodash from 'lodash'; export interface Pattern { validate?(options): string | null; diff --git a/packages/plugins/sms-auth/.npmignore b/packages/plugins/sms-auth/.npmignore new file mode 100644 index 000000000..c593fe9df --- /dev/null +++ b/packages/plugins/sms-auth/.npmignore @@ -0,0 +1,2 @@ +/node_modules +/src \ No newline at end of file diff --git a/packages/plugins/sms-auth/client.d.ts b/packages/plugins/sms-auth/client.d.ts index 6ffb028c7..6c459cbac 100755 --- a/packages/plugins/sms-auth/client.d.ts +++ b/packages/plugins/sms-auth/client.d.ts @@ -1,2 +1,2 @@ -export * from './src/client'; -export { default } from './src/client'; +export * from './dist/client'; +export { default } from './dist/client'; diff --git a/packages/plugins/sms-auth/client.js b/packages/plugins/sms-auth/client.js index c83e7e450..4d9520d74 100755 --- a/packages/plugins/sms-auth/client.js +++ b/packages/plugins/sms-auth/client.js @@ -39,7 +39,7 @@ function _interopRequireWildcard(obj, nodeInterop) { return newObj; } -var _index = _interopRequireWildcard(require('./lib/client')); +var _index = _interopRequireWildcard(require('./dist/client')); Object.defineProperty(exports, '__esModule', { value: true, diff --git a/packages/plugins/sms-auth/package.json b/packages/plugins/sms-auth/package.json index 3b6138a0f..01ba3cfd6 100644 --- a/packages/plugins/sms-auth/package.json +++ b/packages/plugins/sms-auth/package.json @@ -1,34 +1,25 @@ { "name": "@nocobase/plugin-sms-auth", - "displayName": "SMS Auth", + "displayName": "SMS auth", "displayName.zh-CN": "短信登录", "description": "SMS authentication function", - "description.zh-CN": "提供短信登录认证功能。", + "description.zh-CN": "提供短信登录认证功能", "version": "0.11.1-alpha.5", - "main": "./lib/server/index.js", - "files": [ - "lib", - "src", - "README.md", - "README.zh-CN.md", - "CHANGELOG.md", - "server.js", - "server.d.ts", - "client.js", - "client.d.ts" - ], + "main": "./dist/server/index.js", "devDependencies": { - "@formily/react": "^2.2.27", - "@nocobase/actions": "0.11.1-alpha.5", - "@nocobase/auth": "0.11.1-alpha.5", - "@nocobase/client": "0.11.1-alpha.5", - "@nocobase/database": "0.11.1-alpha.5", - "@nocobase/plugin-auth": "0.11.1-alpha.5", - "@nocobase/plugin-verification": "0.11.1-alpha.5", - "@nocobase/server": "0.11.1-alpha.5", - "@nocobase/test": "0.11.1-alpha.5", - "antd": "^5.7.3", + "@formily/react": "2.x", + "antd": "5.x", "react": "18.x", "react-i18next": "^11.15.1" + }, + "peerDependencies": { + "@nocobase/actions": "0.x", + "@nocobase/auth": "0.x", + "@nocobase/client": "0.x", + "@nocobase/database": "0.x", + "@nocobase/plugin-auth": "0.x", + "@nocobase/plugin-verification": "0.x", + "@nocobase/server": "0.x", + "@nocobase/test": "0.x" } } diff --git a/packages/plugins/sms-auth/server.d.ts b/packages/plugins/sms-auth/server.d.ts index 63111b12d..c41081ddc 100755 --- a/packages/plugins/sms-auth/server.d.ts +++ b/packages/plugins/sms-auth/server.d.ts @@ -1,2 +1,2 @@ -export * from './src/server'; -export { default } from './src/server'; +export * from './dist/server'; +export { default } from './dist/server'; diff --git a/packages/plugins/sms-auth/server.js b/packages/plugins/sms-auth/server.js index 4f16903a6..6e7bf26d1 100755 --- a/packages/plugins/sms-auth/server.js +++ b/packages/plugins/sms-auth/server.js @@ -39,7 +39,7 @@ function _interopRequireWildcard(obj, nodeInterop) { return newObj; } -var _index = _interopRequireWildcard(require('./lib/server')); +var _index = _interopRequireWildcard(require('./dist/server')); Object.defineProperty(exports, '__esModule', { value: true, diff --git a/packages/plugins/sms-auth/src/constants.ts b/packages/plugins/sms-auth/src/constants.ts index a3342a94a..b75db661d 100644 --- a/packages/plugins/sms-auth/src/constants.ts +++ b/packages/plugins/sms-auth/src/constants.ts @@ -1,2 +1,5 @@ +// @ts-ignore +import { name } from '../package.json'; + export const authType = 'SMS'; -export const namespace = require('../package.json').name; +export const namespace = name; diff --git a/packages/plugins/sms-auth/src/index.ts b/packages/plugins/sms-auth/src/index.ts index 7ddad5814..7e74612df 100644 --- a/packages/plugins/sms-auth/src/index.ts +++ b/packages/plugins/sms-auth/src/index.ts @@ -1 +1,2 @@ +export * from './server'; export { default } from './server'; diff --git a/packages/plugins/snapshot-field/.npmignore b/packages/plugins/snapshot-field/.npmignore new file mode 100644 index 000000000..c593fe9df --- /dev/null +++ b/packages/plugins/snapshot-field/.npmignore @@ -0,0 +1,2 @@ +/node_modules +/src \ No newline at end of file diff --git a/packages/plugins/snapshot-field/client.d.ts b/packages/plugins/snapshot-field/client.d.ts index d515d1feb..6c459cbac 100755 --- a/packages/plugins/snapshot-field/client.d.ts +++ b/packages/plugins/snapshot-field/client.d.ts @@ -1,3 +1,2 @@ -export * from './src/client'; -export { default } from './src/client'; - +export * from './dist/client'; +export { default } from './dist/client'; diff --git a/packages/plugins/snapshot-field/client.js b/packages/plugins/snapshot-field/client.js index 3c39956ca..b6e3be70e 100755 --- a/packages/plugins/snapshot-field/client.js +++ b/packages/plugins/snapshot-field/client.js @@ -1 +1 @@ -module.exports = require('./lib/client/index.js'); +module.exports = require('./dist/client/index.js'); diff --git a/packages/plugins/snapshot-field/package.json b/packages/plugins/snapshot-field/package.json index 5d25184f5..cfdcb7ed1 100644 --- a/packages/plugins/snapshot-field/package.json +++ b/packages/plugins/snapshot-field/package.json @@ -1,36 +1,27 @@ { "name": "@nocobase/plugin-snapshot-field", "displayName": "snapshot field", - "displayName.zh-CN": "关系数据库快照", - "description": "provide fast and reliable database backup and recovery functionality for database systems.", - "description.zh-CN": "为数据库系统提供快速、可靠的数据库备份和恢复功能。。", + "displayName.zh-CN": "关系快照字段", + "description": "", + "description.zh-CN": "", "version": "0.11.1-alpha.5", "license": "AGPL-3.0", - "main": "./lib/server/index.js", - "files": [ - "lib", - "src", - "README.md", - "README.zh-CN.md", - "CHANGELOG.md", - "server.js", - "server.d.ts", - "client.js", - "client.d.ts" - ], + "main": "./dist/server/index.js", "devDependencies": { - "@ant-design/icons": "^5.1.4", - "@formily/core": "^2.2.27", - "@formily/react": "^2.2.27", - "@formily/shared": "^2.2.27", - "@nocobase/client": "0.11.1-alpha.5", - "@nocobase/database": "0.11.1-alpha.5", - "@nocobase/server": "0.11.1-alpha.5", - "@nocobase/test": "0.11.1-alpha.5", - "@nocobase/utils": "0.11.1-alpha.5", - "antd": "^5.7.3", + "@ant-design/icons": "5.x", + "@formily/core": "2.x", + "@formily/react": "2.x", + "@formily/shared": "2.x", + "antd": "5.x", "rc-tree-select": "5.5.5", "react": "18.x", "react-i18next": "^11.15.1" + }, + "peerDependencies": { + "@nocobase/client": "0.x", + "@nocobase/database": "0.x", + "@nocobase/server": "0.x", + "@nocobase/test": "0.x", + "@nocobase/utils": "0.x" } } diff --git a/packages/plugins/snapshot-field/server.d.ts b/packages/plugins/snapshot-field/server.d.ts index b55e6f70d..c41081ddc 100755 --- a/packages/plugins/snapshot-field/server.d.ts +++ b/packages/plugins/snapshot-field/server.d.ts @@ -1,3 +1,2 @@ -export * from './src/server'; -export { default } from './src/server'; - +export * from './dist/server'; +export { default } from './dist/server'; diff --git a/packages/plugins/snapshot-field/server.js b/packages/plugins/snapshot-field/server.js index adcc9d90d..972842039 100755 --- a/packages/plugins/snapshot-field/server.js +++ b/packages/plugins/snapshot-field/server.js @@ -1 +1 @@ -module.exports = require('./lib/server/index.js'); +module.exports = require('./dist/server/index.js'); diff --git a/packages/plugins/snapshot-field/src/client/interface.ts b/packages/plugins/snapshot-field/src/client/interface.ts index ba07cfe4e..c51d270bd 100644 --- a/packages/plugins/snapshot-field/src/client/interface.ts +++ b/packages/plugins/snapshot-field/src/client/interface.ts @@ -1,7 +1,7 @@ import type { Field } from '@formily/core'; import { ISchema, useForm } from '@formily/react'; import { IField, interfacesProperties, useCollectionManager, useRecord } from '@nocobase/client'; -import { lodash } from '@nocobase/utils/client'; +import lodash from 'lodash'; import { NAMESPACE } from './locale'; const { defaultProps } = interfacesProperties; diff --git a/packages/plugins/snapshot-field/src/index.ts b/packages/plugins/snapshot-field/src/index.ts index 7ddad5814..7e74612df 100644 --- a/packages/plugins/snapshot-field/src/index.ts +++ b/packages/plugins/snapshot-field/src/index.ts @@ -1 +1,2 @@ +export * from './server'; export { default } from './server'; diff --git a/packages/plugins/system-settings/.npmignore b/packages/plugins/system-settings/.npmignore index 461574b2f..c593fe9df 100644 --- a/packages/plugins/system-settings/.npmignore +++ b/packages/plugins/system-settings/.npmignore @@ -1,7 +1,2 @@ -node_modules -*.log -docs -__tests__ -tsconfig.json -src -.fatherrc.ts \ No newline at end of file +/node_modules +/src \ No newline at end of file diff --git a/packages/plugins/system-settings/client.d.ts b/packages/plugins/system-settings/client.d.ts index d515d1feb..6c459cbac 100644 --- a/packages/plugins/system-settings/client.d.ts +++ b/packages/plugins/system-settings/client.d.ts @@ -1,3 +1,2 @@ -export * from './src/client'; -export { default } from './src/client'; - +export * from './dist/client'; +export { default } from './dist/client'; diff --git a/packages/plugins/system-settings/client.js b/packages/plugins/system-settings/client.js index 3c39956ca..b6e3be70e 100644 --- a/packages/plugins/system-settings/client.js +++ b/packages/plugins/system-settings/client.js @@ -1 +1 @@ -module.exports = require('./lib/client/index.js'); +module.exports = require('./dist/client/index.js'); diff --git a/packages/plugins/system-settings/package.json b/packages/plugins/system-settings/package.json index 5d014bad5..58fa347e7 100644 --- a/packages/plugins/system-settings/package.json +++ b/packages/plugins/system-settings/package.json @@ -1,28 +1,18 @@ { "name": "@nocobase/plugin-system-settings", - "displayName": "system settings", - "displayName.zh-CN": "系统配置", - "description": "A plugin specifically designed to adjust the system-level settings of NocoBase.", - "description.zh-CN": "用于调整 nocobase 的系统级设置。", + "displayName": "System settings", + "displayName.zh-CN": "系统设置", + "description": "Used to adjust the system title, logo, etc", + "description.zh-CN": "用于调整系统的标题、LOGO 等", "version": "0.11.1-alpha.5", "license": "AGPL-3.0", - "main": "./lib/server/index.js", - "files": [ - "lib", - "src", - "README.md", - "README.zh-CN.md", - "CHANGELOG.md", - "server.js", - "server.d.ts", - "client.js", - "client.d.ts" - ], - "devDependencies": { - "@nocobase/client": "0.11.1-alpha.5", - "@nocobase/database": "0.11.1-alpha.5", - "@nocobase/server": "0.11.1-alpha.5", - "@nocobase/test": "0.11.1-alpha.5" + "main": "./dist/server/index.js", + "devDependencies": {}, + "peerDependencies": { + "@nocobase/client": "0.x", + "@nocobase/database": "0.x", + "@nocobase/server": "0.x", + "@nocobase/test": "0.x" }, "gitHead": "ce588eefb0bfc50f7d5bbee575e0b5e843bf6644" } diff --git a/packages/plugins/system-settings/server.d.ts b/packages/plugins/system-settings/server.d.ts index b55e6f70d..c41081ddc 100644 --- a/packages/plugins/system-settings/server.d.ts +++ b/packages/plugins/system-settings/server.d.ts @@ -1,3 +1,2 @@ -export * from './src/server'; -export { default } from './src/server'; - +export * from './dist/server'; +export { default } from './dist/server'; diff --git a/packages/plugins/system-settings/server.js b/packages/plugins/system-settings/server.js index adcc9d90d..972842039 100644 --- a/packages/plugins/system-settings/server.js +++ b/packages/plugins/system-settings/server.js @@ -1 +1 @@ -module.exports = require('./lib/server/index.js'); +module.exports = require('./dist/server/index.js'); diff --git a/packages/plugins/system-settings/src/index.ts b/packages/plugins/system-settings/src/index.ts index 7ddad5814..7e74612df 100644 --- a/packages/plugins/system-settings/src/index.ts +++ b/packages/plugins/system-settings/src/index.ts @@ -1 +1,2 @@ +export * from './server'; export { default } from './server'; diff --git a/packages/plugins/theme-editor/.npmignore b/packages/plugins/theme-editor/.npmignore new file mode 100644 index 000000000..c593fe9df --- /dev/null +++ b/packages/plugins/theme-editor/.npmignore @@ -0,0 +1,2 @@ +/node_modules +/src \ No newline at end of file diff --git a/packages/plugins/theme-editor/client.d.ts b/packages/plugins/theme-editor/client.d.ts index bd53a2f77..0c422da69 100644 --- a/packages/plugins/theme-editor/client.d.ts +++ b/packages/plugins/theme-editor/client.d.ts @@ -1,3 +1,3 @@ // @ts-nocheck -export * from './lib/client'; -export { default } from './lib/client'; +export * from './dist/client'; +export { default } from './dist/client'; diff --git a/packages/plugins/theme-editor/client.js b/packages/plugins/theme-editor/client.js index c83e7e450..4d9520d74 100644 --- a/packages/plugins/theme-editor/client.js +++ b/packages/plugins/theme-editor/client.js @@ -39,7 +39,7 @@ function _interopRequireWildcard(obj, nodeInterop) { return newObj; } -var _index = _interopRequireWildcard(require('./lib/client')); +var _index = _interopRequireWildcard(require('./dist/client')); Object.defineProperty(exports, '__esModule', { value: true, diff --git a/packages/plugins/theme-editor/package.json b/packages/plugins/theme-editor/package.json index 64bea1257..fe9b6b440 100644 --- a/packages/plugins/theme-editor/package.json +++ b/packages/plugins/theme-editor/package.json @@ -1,32 +1,33 @@ { "name": "@nocobase/plugin-theme-editor", "version": "0.11.1-alpha.5", - "main": "lib/server/index.js", + "main": "dist/server/index.js", "displayName": "Theme editor", "displayName.zh-CN": "主题编辑器", - "description": "Allows you to customize UI colors, sizes, etc.", - "description.zh-CN": "允许你自定义 UI 的颜色、尺寸等。", - "dependencies": { + "description": "Allows you to customize UI colors, sizes, etc", + "description.zh-CN": "允许你自定义 UI 的颜色、尺寸等", + "devDependencies": { + "@ant-design/cssinjs": "^1.11.1", + "@ant-design/icons": "5.x", "@arvinxu/layout-kit": "^1", "@ctrl/tinycolor": "^3.6.0", + "@emotion/css": "^11.11.2", + "antd": "5.x", + "antd-token-previewer": "2.0.0-alpha.8", "classnames": "^2.3.1", + "lodash": "4.17.21", "rc-util": "^5.32.0", + "react": "^18.2.0", "react-colorful": "^5.5.1", "tinycolor2": "^1.6.0", "use-debouncy": "^4.3.0", "vanilla-jsoneditor": "^0.17.8" }, - "devDependencies": { - "@ant-design/cssinjs": "^1.11.1", - "@ant-design/icons": "^5.1.4", - "@emotion/css": "^11.11.2", - "@nocobase/client": "0.11.1-alpha.5", - "@nocobase/database": "0.11.1-alpha.5", - "@nocobase/server": "0.11.1-alpha.5", - "@nocobase/test": "0.11.1-alpha.5", - "@nocobase/utils": "0.11.1-alpha.5", - "antd": "^5.7.3", - "lodash": "4.17.21", - "react": "^18.2.0" + "peerDependencies": { + "@nocobase/client": "0.x", + "@nocobase/database": "0.x", + "@nocobase/server": "0.x", + "@nocobase/test": "0.x", + "@nocobase/utils": "0.x" } } diff --git a/packages/plugins/theme-editor/server.d.ts b/packages/plugins/theme-editor/server.d.ts index 4d922a91b..0b9baefe6 100644 --- a/packages/plugins/theme-editor/server.d.ts +++ b/packages/plugins/theme-editor/server.d.ts @@ -1,3 +1,3 @@ // @ts-nocheck -export * from './lib/server'; -export { default } from './lib/server'; +export * from './dist/server'; +export { default } from './dist/server'; diff --git a/packages/plugins/theme-editor/server.js b/packages/plugins/theme-editor/server.js index 4f16903a6..6e7bf26d1 100644 --- a/packages/plugins/theme-editor/server.js +++ b/packages/plugins/theme-editor/server.js @@ -39,7 +39,7 @@ function _interopRequireWildcard(obj, nodeInterop) { return newObj; } -var _index = _interopRequireWildcard(require('./lib/server')); +var _index = _interopRequireWildcard(require('./dist/server')); Object.defineProperty(exports, '__esModule', { value: true, diff --git a/packages/plugins/theme-editor/src/index.ts b/packages/plugins/theme-editor/src/index.ts index 7ddad5814..7e74612df 100644 --- a/packages/plugins/theme-editor/src/index.ts +++ b/packages/plugins/theme-editor/src/index.ts @@ -1 +1,2 @@ +export * from './server'; export { default } from './server'; diff --git a/packages/plugins/ui-routes-storage/.npmignore b/packages/plugins/ui-routes-storage/.npmignore index 461574b2f..c593fe9df 100644 --- a/packages/plugins/ui-routes-storage/.npmignore +++ b/packages/plugins/ui-routes-storage/.npmignore @@ -1,7 +1,2 @@ -node_modules -*.log -docs -__tests__ -tsconfig.json -src -.fatherrc.ts \ No newline at end of file +/node_modules +/src \ No newline at end of file diff --git a/packages/plugins/ui-routes-storage/client.d.ts b/packages/plugins/ui-routes-storage/client.d.ts index d515d1feb..6c459cbac 100644 --- a/packages/plugins/ui-routes-storage/client.d.ts +++ b/packages/plugins/ui-routes-storage/client.d.ts @@ -1,3 +1,2 @@ -export * from './src/client'; -export { default } from './src/client'; - +export * from './dist/client'; +export { default } from './dist/client'; diff --git a/packages/plugins/ui-routes-storage/client.js b/packages/plugins/ui-routes-storage/client.js index 3c39956ca..b6e3be70e 100644 --- a/packages/plugins/ui-routes-storage/client.js +++ b/packages/plugins/ui-routes-storage/client.js @@ -1 +1 @@ -module.exports = require('./lib/client/index.js'); +module.exports = require('./dist/client/index.js'); diff --git a/packages/plugins/ui-routes-storage/package.json b/packages/plugins/ui-routes-storage/package.json index 7be28b031..e39d1be24 100644 --- a/packages/plugins/ui-routes-storage/package.json +++ b/packages/plugins/ui-routes-storage/package.json @@ -6,27 +6,16 @@ "description.zh-CN": "管理页面路由。", "version": "0.11.1-alpha.5", "license": "AGPL-3.0", - "main": "./lib/server/index.js", - "files": [ - "lib", - "src", - "README.md", - "README.zh-CN.md", - "CHANGELOG.md", - "server.js", - "server.d.ts", - "client.js", - "client.d.ts" - ], - "dependencies": { + "main": "./dist/server/index.js", + "devDependencies": { "flat-to-nested": "^1.1.1" }, - "devDependencies": { - "@nocobase/actions": "0.11.1-alpha.5", - "@nocobase/client": "0.11.1-alpha.5", - "@nocobase/database": "0.11.1-alpha.5", - "@nocobase/server": "0.11.1-alpha.5", - "@nocobase/test": "0.11.1-alpha.5" + "peerDependencies": { + "@nocobase/actions": "0.x", + "@nocobase/client": "0.x", + "@nocobase/database": "0.x", + "@nocobase/server": "0.x", + "@nocobase/test": "0.x" }, "gitHead": "ce588eefb0bfc50f7d5bbee575e0b5e843bf6644" } diff --git a/packages/plugins/ui-routes-storage/server.d.ts b/packages/plugins/ui-routes-storage/server.d.ts index b55e6f70d..c41081ddc 100644 --- a/packages/plugins/ui-routes-storage/server.d.ts +++ b/packages/plugins/ui-routes-storage/server.d.ts @@ -1,3 +1,2 @@ -export * from './src/server'; -export { default } from './src/server'; - +export * from './dist/server'; +export { default } from './dist/server'; diff --git a/packages/plugins/ui-routes-storage/server.js b/packages/plugins/ui-routes-storage/server.js index adcc9d90d..972842039 100644 --- a/packages/plugins/ui-routes-storage/server.js +++ b/packages/plugins/ui-routes-storage/server.js @@ -1 +1 @@ -module.exports = require('./lib/server/index.js'); +module.exports = require('./dist/server/index.js'); diff --git a/packages/plugins/ui-routes-storage/src/index.ts b/packages/plugins/ui-routes-storage/src/index.ts index 7ddad5814..7e74612df 100644 --- a/packages/plugins/ui-routes-storage/src/index.ts +++ b/packages/plugins/ui-routes-storage/src/index.ts @@ -1 +1,2 @@ +export * from './server'; export { default } from './server'; diff --git a/packages/plugins/ui-schema-storage/.npmignore b/packages/plugins/ui-schema-storage/.npmignore index 461574b2f..c593fe9df 100644 --- a/packages/plugins/ui-schema-storage/.npmignore +++ b/packages/plugins/ui-schema-storage/.npmignore @@ -1,7 +1,2 @@ -node_modules -*.log -docs -__tests__ -tsconfig.json -src -.fatherrc.ts \ No newline at end of file +/node_modules +/src \ No newline at end of file diff --git a/packages/plugins/ui-schema-storage/client.d.ts b/packages/plugins/ui-schema-storage/client.d.ts index d515d1feb..6c459cbac 100644 --- a/packages/plugins/ui-schema-storage/client.d.ts +++ b/packages/plugins/ui-schema-storage/client.d.ts @@ -1,3 +1,2 @@ -export * from './src/client'; -export { default } from './src/client'; - +export * from './dist/client'; +export { default } from './dist/client'; diff --git a/packages/plugins/ui-schema-storage/client.js b/packages/plugins/ui-schema-storage/client.js index 3c39956ca..b6e3be70e 100644 --- a/packages/plugins/ui-schema-storage/client.js +++ b/packages/plugins/ui-schema-storage/client.js @@ -1 +1 @@ -module.exports = require('./lib/client/index.js'); +module.exports = require('./dist/client/index.js'); diff --git a/packages/plugins/ui-schema-storage/package.json b/packages/plugins/ui-schema-storage/package.json index 0b1dc652e..46619d555 100644 --- a/packages/plugins/ui-schema-storage/package.json +++ b/packages/plugins/ui-schema-storage/package.json @@ -1,35 +1,26 @@ { "name": "@nocobase/plugin-ui-schema-storage", "displayName": "UI schema storage", - "displayName.zh-CN": "UI schema", - "description": "A plugin used for managing page UI schemas.", - "description.zh-CN": "UI schema 配置。", + "displayName.zh-CN": "UI schema 存储服务", + "description": "用于存储用户动态自定义的 UI schema", + "description.zh-CN": "用于存储用户动态自定义的 UI schema", "version": "0.11.1-alpha.5", "license": "AGPL-3.0", - "main": "./lib/server/index.js", - "files": [ - "lib", - "src", - "README.md", - "README.zh-CN.md", - "CHANGELOG.md", - "server.js", - "server.d.ts", - "client.js", - "client.d.ts" - ], + "main": "./dist/server/index.js", "devDependencies": { - "@formily/json-schema": "^2.2.27", - "@nocobase/actions": "0.11.1-alpha.5", - "@nocobase/cache": "0.11.1-alpha.5", - "@nocobase/client": "0.11.1-alpha.5", - "@nocobase/database": "0.11.1-alpha.5", - "@nocobase/plugin-error-handler": "0.11.1-alpha.5", - "@nocobase/plugin-users": "0.11.1-alpha.5", - "@nocobase/resourcer": "0.11.1-alpha.5", - "@nocobase/server": "0.11.1-alpha.5", - "@nocobase/test": "0.11.1-alpha.5", - "@nocobase/utils": "0.11.1-alpha.5" + "@formily/json-schema": "2.x" + }, + "peerDependencies": { + "@nocobase/actions": "0.x", + "@nocobase/cache": "0.x", + "@nocobase/client": "0.x", + "@nocobase/database": "0.x", + "@nocobase/plugin-error-handler": "0.x", + "@nocobase/plugin-users": "0.x", + "@nocobase/resourcer": "0.x", + "@nocobase/server": "0.x", + "@nocobase/test": "0.x", + "@nocobase/utils": "0.x" }, "gitHead": "ce588eefb0bfc50f7d5bbee575e0b5e843bf6644" } diff --git a/packages/plugins/ui-schema-storage/server.d.ts b/packages/plugins/ui-schema-storage/server.d.ts index b55e6f70d..c41081ddc 100644 --- a/packages/plugins/ui-schema-storage/server.d.ts +++ b/packages/plugins/ui-schema-storage/server.d.ts @@ -1,3 +1,2 @@ -export * from './src/server'; -export { default } from './src/server'; - +export * from './dist/server'; +export { default } from './dist/server'; diff --git a/packages/plugins/ui-schema-storage/server.js b/packages/plugins/ui-schema-storage/server.js index adcc9d90d..972842039 100644 --- a/packages/plugins/ui-schema-storage/server.js +++ b/packages/plugins/ui-schema-storage/server.js @@ -1 +1 @@ -module.exports = require('./lib/server/index.js'); +module.exports = require('./dist/server/index.js'); diff --git a/packages/plugins/ui-schema-storage/src/index.ts b/packages/plugins/ui-schema-storage/src/index.ts index 7e74612df..ea38e0f2d 100644 --- a/packages/plugins/ui-schema-storage/src/index.ts +++ b/packages/plugins/ui-schema-storage/src/index.ts @@ -1,2 +1,4 @@ export * from './server'; -export { default } from './server'; +import { UiSchemaStoragePlugin } from './server'; + +export default UiSchemaStoragePlugin; diff --git a/packages/plugins/ui-schema-storage/src/server/actions/ui-schema-action.ts b/packages/plugins/ui-schema-storage/src/server/actions/ui-schema-action.ts index 557302906..42bdac337 100644 --- a/packages/plugins/ui-schema-storage/src/server/actions/ui-schema-action.ts +++ b/packages/plugins/ui-schema-storage/src/server/actions/ui-schema-action.ts @@ -1,6 +1,6 @@ import { Context } from '@nocobase/actions'; import { ActionParams } from '@nocobase/resourcer'; -import { lodash } from '@nocobase/utils'; +import lodash from 'lodash'; import UiSchemaRepository, { GetJsonSchemaOptions, GetPropertiesOptions } from '../repository'; const getRepositoryFromCtx = (ctx: Context) => { diff --git a/packages/plugins/ui-schema-storage/src/server/index.ts b/packages/plugins/ui-schema-storage/src/server/index.ts index 440ab4d53..248e3b132 100644 --- a/packages/plugins/ui-schema-storage/src/server/index.ts +++ b/packages/plugins/ui-schema-storage/src/server/index.ts @@ -1,3 +1,5 @@ +import { UiSchemaStoragePlugin } from './server'; export * from './repository'; export * from './server'; -export { default } from './server'; + +export default UiSchemaStoragePlugin; diff --git a/packages/plugins/ui-schema-storage/src/server/repository.ts b/packages/plugins/ui-schema-storage/src/server/repository.ts index d16da68d4..274c3b4bc 100644 --- a/packages/plugins/ui-schema-storage/src/server/repository.ts +++ b/packages/plugins/ui-schema-storage/src/server/repository.ts @@ -1,6 +1,7 @@ import { Cache } from '@nocobase/cache'; import { Repository, Transaction, Transactionable } from '@nocobase/database'; -import { lodash, uid } from '@nocobase/utils'; +import { uid } from '@nocobase/utils'; +import lodash from 'lodash'; import { ChildOptions, SchemaNode, TargetPosition } from './dao/ui_schema_node_dao'; export interface GetJsonSchemaOptions { diff --git a/packages/plugins/users/.npmignore b/packages/plugins/users/.npmignore index 461574b2f..c593fe9df 100644 --- a/packages/plugins/users/.npmignore +++ b/packages/plugins/users/.npmignore @@ -1,7 +1,2 @@ -node_modules -*.log -docs -__tests__ -tsconfig.json -src -.fatherrc.ts \ No newline at end of file +/node_modules +/src \ No newline at end of file diff --git a/packages/plugins/users/package.json b/packages/plugins/users/package.json index 8a2500496..c8ab01ec9 100644 --- a/packages/plugins/users/package.json +++ b/packages/plugins/users/package.json @@ -1,37 +1,26 @@ { "name": "@nocobase/plugin-users", "displayName": "users", - "displayName.zh-CN": "用户管理", - "description": "manage the uses of nocobase system", - "description.zh-CN": "管理系统用户", + "displayName.zh-CN": "用户", + "description": "Provide a basic user model and a password-based user authentication type, and extended the createdBy and updatedBy field types", + "description.zh-CN": "提供了基础的用户模型和基于密码的用户认证方式,并拓展了创建人和最后更新人字段类型", "version": "0.11.1-alpha.5", "license": "AGPL-3.0", - "main": "./lib/server/index.js", - "files": [ - "lib", - "src", - "README.md", - "README.zh-CN.md", - "CHANGELOG.md", - "server.js", - "server.d.ts", - "client.js", - "client.d.ts" - ], - "dependencies": { + "main": "./dist/server/index.js", + "devDependencies": { "@types/jsonwebtoken": "^8.5.8", "jsonwebtoken": "^8.5.1" }, - "devDependencies": { - "@nocobase/actions": "0.11.1-alpha.5", - "@nocobase/client": "0.11.1-alpha.5", - "@nocobase/database": "0.11.1-alpha.5", - "@nocobase/plugin-acl": "0.11.1-alpha.5", - "@nocobase/plugin-auth": "0.11.1-alpha.5", - "@nocobase/resourcer": "0.11.1-alpha.5", - "@nocobase/server": "0.11.1-alpha.5", - "@nocobase/test": "0.11.1-alpha.5", - "@nocobase/utils": "0.11.1-alpha.5" + "peerDependencies": { + "@nocobase/actions": "0.x", + "@nocobase/client": "0.x", + "@nocobase/database": "0.x", + "@nocobase/plugin-acl": "0.x", + "@nocobase/plugin-auth": "0.x", + "@nocobase/resourcer": "0.x", + "@nocobase/server": "0.x", + "@nocobase/test": "0.x", + "@nocobase/utils": "0.x" }, "gitHead": "ce588eefb0bfc50f7d5bbee575e0b5e843bf6644" } diff --git a/packages/plugins/users/src/index.ts b/packages/plugins/users/src/index.ts index 7ddad5814..7e74612df 100644 --- a/packages/plugins/users/src/index.ts +++ b/packages/plugins/users/src/index.ts @@ -1 +1,2 @@ +export * from './server'; export { default } from './server'; diff --git a/packages/plugins/users/src/server/index.ts b/packages/plugins/users/src/server/index.ts index a6471cc08..7125a3124 100644 --- a/packages/plugins/users/src/server/index.ts +++ b/packages/plugins/users/src/server/index.ts @@ -1,3 +1,5 @@ +// @ts-ignore +import { name } from '../../package.json'; export { default } from './server'; -export const namespace = require('../../package.json').name; +export const namespace = name; diff --git a/packages/plugins/verification/.npmignore b/packages/plugins/verification/.npmignore new file mode 100644 index 000000000..c593fe9df --- /dev/null +++ b/packages/plugins/verification/.npmignore @@ -0,0 +1,2 @@ +/node_modules +/src \ No newline at end of file diff --git a/packages/plugins/verification/client.d.ts b/packages/plugins/verification/client.d.ts index d515d1feb..6c459cbac 100644 --- a/packages/plugins/verification/client.d.ts +++ b/packages/plugins/verification/client.d.ts @@ -1,3 +1,2 @@ -export * from './src/client'; -export { default } from './src/client'; - +export * from './dist/client'; +export { default } from './dist/client'; diff --git a/packages/plugins/verification/client.js b/packages/plugins/verification/client.js index 3c39956ca..b6e3be70e 100644 --- a/packages/plugins/verification/client.js +++ b/packages/plugins/verification/client.js @@ -1 +1 @@ -module.exports = require('./lib/client/index.js'); +module.exports = require('./dist/client/index.js'); diff --git a/packages/plugins/verification/package.json b/packages/plugins/verification/package.json index c14e7b193..93c656499 100644 --- a/packages/plugins/verification/package.json +++ b/packages/plugins/verification/package.json @@ -6,39 +6,28 @@ "description.zh-CN": "验证码配置。", "version": "0.11.1-alpha.5", "license": "AGPL-3.0", - "main": "./lib/server/index.js", - "files": [ - "lib", - "src", - "README.md", - "README.zh-CN.md", - "CHANGELOG.md", - "server.js", - "server.d.ts", - "client.js", - "client.d.ts" - ], - "dependencies": { + "main": "./dist/server/index.js", + "devDependencies": { "@alicloud/dysmsapi20170525": "2.0.17", "@alicloud/openapi-client": "0.4.1", "@alicloud/tea-util": "1.4.4", + "@formily/antd-v5": "1.x", + "@formily/core": "2.x", + "@formily/react": "2.x", + "@formily/shared": "2.x", + "antd": "5.x", + "react": "18.x", + "react-i18next": "^11.15.1", "tencentcloud-sdk-nodejs": "^4.0.525" }, - "devDependencies": { - "@formily/antd-v5": "^1.1.0", - "@formily/core": "^2.2.27", - "@formily/react": "^2.2.27", - "@formily/shared": "^2.2.27", - "@nocobase/actions": "0.11.1-alpha.5", - "@nocobase/client": "0.11.1-alpha.5", - "@nocobase/database": "0.11.1-alpha.5", - "@nocobase/resourcer": "0.11.1-alpha.5", - "@nocobase/server": "0.11.1-alpha.5", - "@nocobase/test": "0.11.1-alpha.5", - "@nocobase/utils": "0.11.1-alpha.5", - "antd": "^5.7.3", - "react": "18.x", - "react-i18next": "^11.15.1" + "peerDependencies": { + "@nocobase/actions": "0.x", + "@nocobase/client": "0.x", + "@nocobase/database": "0.x", + "@nocobase/resourcer": "0.x", + "@nocobase/server": "0.x", + "@nocobase/test": "0.x", + "@nocobase/utils": "0.x" }, "gitHead": "ce588eefb0bfc50f7d5bbee575e0b5e843bf6644" } diff --git a/packages/plugins/verification/server.d.ts b/packages/plugins/verification/server.d.ts index b55e6f70d..c41081ddc 100644 --- a/packages/plugins/verification/server.d.ts +++ b/packages/plugins/verification/server.d.ts @@ -1,3 +1,2 @@ -export * from './src/server'; -export { default } from './src/server'; - +export * from './dist/server'; +export { default } from './dist/server'; diff --git a/packages/plugins/verification/server.js b/packages/plugins/verification/server.js index adcc9d90d..972842039 100644 --- a/packages/plugins/verification/server.js +++ b/packages/plugins/verification/server.js @@ -1 +1 @@ -module.exports = require('./lib/server/index.js'); +module.exports = require('./dist/server/index.js'); diff --git a/packages/plugins/verification/src/index.ts b/packages/plugins/verification/src/index.ts index 7ddad5814..7e74612df 100644 --- a/packages/plugins/verification/src/index.ts +++ b/packages/plugins/verification/src/index.ts @@ -1 +1,2 @@ +export * from './server'; export { default } from './server'; diff --git a/packages/plugins/verification/src/server/actions/verifications.ts b/packages/plugins/verification/src/server/actions/verifications.ts index 38caccd71..816a7b813 100644 --- a/packages/plugins/verification/src/server/actions/verifications.ts +++ b/packages/plugins/verification/src/server/actions/verifications.ts @@ -1,6 +1,6 @@ import actions, { Context, Next } from '@nocobase/actions'; import { Op } from '@nocobase/database'; -import { dayjs } from '@nocobase/utils'; +import dayjs from 'dayjs'; import { randomInt, randomUUID } from 'crypto'; import { promisify } from 'util'; import Plugin, { namespace } from '..'; diff --git a/packages/plugins/verification/src/server/index.ts b/packages/plugins/verification/src/server/index.ts index 5f205b2f2..d35a2ac8f 100644 --- a/packages/plugins/verification/src/server/index.ts +++ b/packages/plugins/verification/src/server/index.ts @@ -1,5 +1,7 @@ +// @ts-ignore +import { name } from '../../package.json'; export * from './constants'; export { Provider } from './providers'; export { Interceptor, default } from './Plugin'; -export const namespace = require('../../package.json').name; +export const namespace = name; diff --git a/packages/plugins/workflow/.npmignore b/packages/plugins/workflow/.npmignore index 461574b2f..c593fe9df 100644 --- a/packages/plugins/workflow/.npmignore +++ b/packages/plugins/workflow/.npmignore @@ -1,7 +1,2 @@ -node_modules -*.log -docs -__tests__ -tsconfig.json -src -.fatherrc.ts \ No newline at end of file +/node_modules +/src \ No newline at end of file diff --git a/packages/plugins/workflow/client.d.ts b/packages/plugins/workflow/client.d.ts index d515d1feb..6c459cbac 100644 --- a/packages/plugins/workflow/client.d.ts +++ b/packages/plugins/workflow/client.d.ts @@ -1,3 +1,2 @@ -export * from './src/client'; -export { default } from './src/client'; - +export * from './dist/client'; +export { default } from './dist/client'; diff --git a/packages/plugins/workflow/client.js b/packages/plugins/workflow/client.js index 3c39956ca..b6e3be70e 100644 --- a/packages/plugins/workflow/client.js +++ b/packages/plugins/workflow/client.js @@ -1 +1 @@ -module.exports = require('./lib/client/index.js'); +module.exports = require('./dist/client/index.js'); diff --git a/packages/plugins/workflow/package.json b/packages/plugins/workflow/package.json index c88672947..72b29c6d5 100644 --- a/packages/plugins/workflow/package.json +++ b/packages/plugins/workflow/package.json @@ -6,50 +6,39 @@ "description.zh-CN": "工作流插件,为业务流程管理和自动化提供支持。", "version": "0.11.1-alpha.5", "license": "AGPL-3.0", - "main": "./lib/server/index.js", - "files": [ - "lib", - "src", - "README.md", - "README.zh-CN.md", - "CHANGELOG.md", - "server.js", - "server.d.ts", - "client.js", - "client.d.ts" - ], - "dependencies": { - "axios": "^0.27.2", + "main": "./dist/server/index.js", + "devDependencies": { + "@ant-design/icons": "5.x", + "@emotion/css": "^11.7.1", + "@formily/antd-v5": "1.x", + "@formily/core": "2.x", + "@formily/react": "2.x", + "@types/ejs": "^3.1.1", + "antd": "5.x", + "axios": "^0.26.1", "classnames": "^2.3.1", "cron-parser": "4.4.0", - "lru-cache": "8.0.5", - "react-js-cron": "^3.1.0" - }, - "peerDependencies": { - "@ant-design/icons": "^5.1.4", - "@formily/antd-v5": "^1.1.0", - "@formily/core": "^2.2.27", - "@formily/react": "^2.2.27", - "@nocobase/actions": "0.11.0-alpha.1", - "@nocobase/client": "0.11.0-alpha.1", - "@nocobase/database": "0.11.0-alpha.1", - "@nocobase/evaluators": "0.11.0-alpha.1", - "@nocobase/logger": "0.11.0-alpha.1", - "@nocobase/plugin-users": "0.11.0-alpha.1", - "@nocobase/resourcer": "0.11.0-alpha.1", - "@nocobase/server": "0.11.0-alpha.1", - "@nocobase/utils": "0.11.0-alpha.1", - "antd": "^5.7.3", "dayjs": "^1.11.8", + "lodash": "4.17.21", + "lru-cache": "8.0.5", "react": "18.x", "react-i18next": "^11.15.1", + "react-js-cron": "^3.1.0", "react-router-dom": "^6.11.2", "sequelize": "^6.26.0", "winston": "^3.8.2" }, - "devDependencies": { - "@nocobase/test": "0.11.1-alpha.5", - "@types/ejs": "^3.1.1" + "peerDependencies": { + "@nocobase/actions": "0.x", + "@nocobase/client": "0.x", + "@nocobase/database": "0.x", + "@nocobase/evaluators": "0.x", + "@nocobase/logger": "0.x", + "@nocobase/plugin-users": "0.x", + "@nocobase/resourcer": "0.x", + "@nocobase/server": "0.x", + "@nocobase/test": "0.x", + "@nocobase/utils": "0.x" }, "gitHead": "ce588eefb0bfc50f7d5bbee575e0b5e843bf6644" } diff --git a/packages/plugins/workflow/server.d.ts b/packages/plugins/workflow/server.d.ts index b55e6f70d..c41081ddc 100644 --- a/packages/plugins/workflow/server.d.ts +++ b/packages/plugins/workflow/server.d.ts @@ -1,3 +1,2 @@ -export * from './src/server'; -export { default } from './src/server'; - +export * from './dist/server'; +export { default } from './dist/server'; diff --git a/packages/plugins/workflow/server.js b/packages/plugins/workflow/server.js index adcc9d90d..972842039 100644 --- a/packages/plugins/workflow/server.js +++ b/packages/plugins/workflow/server.js @@ -1 +1 @@ -module.exports = require('./lib/server/index.js'); +module.exports = require('./dist/server/index.js'); diff --git a/packages/plugins/workflow/src/client/nodes/manual/WorkflowTodo.tsx b/packages/plugins/workflow/src/client/nodes/manual/WorkflowTodo.tsx index 9c4828989..eb072480b 100644 --- a/packages/plugins/workflow/src/client/nodes/manual/WorkflowTodo.tsx +++ b/packages/plugins/workflow/src/client/nodes/manual/WorkflowTodo.tsx @@ -1,6 +1,6 @@ import { css } from '@emotion/css'; import { observer, useField, useFieldSchema, useForm } from '@formily/react'; -import { dayjs } from '@nocobase/utils/client'; +import dayjs from 'dayjs'; import { Space, Spin, Tag } from 'antd'; import React, { createContext, useContext, useEffect, useState } from 'react'; diff --git a/packages/plugins/workflow/src/client/nodes/manual/forms/custom.tsx b/packages/plugins/workflow/src/client/nodes/manual/forms/custom.tsx index e08575b81..068f47207 100644 --- a/packages/plugins/workflow/src/client/nodes/manual/forms/custom.tsx +++ b/packages/plugins/workflow/src/client/nodes/manual/forms/custom.tsx @@ -17,7 +17,8 @@ import { useCollectionManager, useRecord, } from '@nocobase/client'; -import { lodash, merge, uid } from '@nocobase/utils/client'; +import { merge, uid } from '@nocobase/utils/client'; +import lodash from 'lodash'; import { JOB_STATUS } from '../../../constants'; import { NAMESPACE, lang } from '../../../locale'; import { ManualFormType } from '../SchemaConfig'; diff --git a/packages/plugins/workflow/src/client/triggers/schedule/EndsByField.tsx b/packages/plugins/workflow/src/client/triggers/schedule/EndsByField.tsx index 81206b9ec..173e5d3de 100644 --- a/packages/plugins/workflow/src/client/triggers/schedule/EndsByField.tsx +++ b/packages/plugins/workflow/src/client/triggers/schedule/EndsByField.tsx @@ -1,5 +1,5 @@ import { css } from '@nocobase/client'; -import { dayjs } from '@nocobase/utils/client'; +import dayjs from 'dayjs'; import { DatePicker, Select } from 'antd'; import React from 'react'; import { useWorkflowTranslation } from '../../locale'; diff --git a/packages/plugins/workflow/src/index.ts b/packages/plugins/workflow/src/index.ts index 7ddad5814..7e74612df 100644 --- a/packages/plugins/workflow/src/index.ts +++ b/packages/plugins/workflow/src/index.ts @@ -1 +1,2 @@ +export * from './server'; export { default } from './server'; diff --git a/packages/plugins/workflow/src/server/__tests__/index.ts b/packages/plugins/workflow/src/server/__tests__/index.ts index e65333301..f40e43223 100644 --- a/packages/plugins/workflow/src/server/__tests__/index.ts +++ b/packages/plugins/workflow/src/server/__tests__/index.ts @@ -1,6 +1,6 @@ import { ApplicationOptions } from '@nocobase/server'; import { MockServer, mockServer } from '@nocobase/test'; -import { lodash } from '@nocobase/utils'; +import lodash from 'lodash'; import path from 'path'; import Plugin from '..'; import { JOB_STATUS } from '../constants'; diff --git a/packages/plugins/workflow/src/server/__tests__/instructions/request.test.ts b/packages/plugins/workflow/src/server/__tests__/instructions/request.test.ts index 98cbab75a..96bcb9001 100644 --- a/packages/plugins/workflow/src/server/__tests__/instructions/request.test.ts +++ b/packages/plugins/workflow/src/server/__tests__/instructions/request.test.ts @@ -97,7 +97,7 @@ describe('workflow > instructions > request', () => { expect(job.result).toMatchObject({ code: 'ECONNABORTED', - name: 'AxiosError', + name: 'Error', status: null, message: 'timeout of 250ms exceeded', }); @@ -123,7 +123,7 @@ describe('workflow > instructions > request', () => { expect(job.status).toEqual(JOB_STATUS.RESOLVED); expect(job.result).toMatchObject({ code: 'ECONNABORTED', - name: 'AxiosError', + name: 'Error', status: null, message: 'timeout of 250ms exceeded', }); diff --git a/packages/plugins/workflow/src/server/migrations/20230411034722-manual-multi-form.ts b/packages/plugins/workflow/src/server/migrations/20230411034722-manual-multi-form.ts index 595138458..ab342f07f 100644 --- a/packages/plugins/workflow/src/server/migrations/20230411034722-manual-multi-form.ts +++ b/packages/plugins/workflow/src/server/migrations/20230411034722-manual-multi-form.ts @@ -1,5 +1,6 @@ import { Migration } from '@nocobase/server'; -import { lodash, uid } from '@nocobase/utils'; +import { uid } from '@nocobase/utils'; +import lodash from 'lodash'; function findSchema(root, filter, onlyLeaf = false) { const result = []; diff --git a/packages/presets/nocobase/.npmignore b/packages/presets/nocobase/.npmignore index 83426817e..c593fe9df 100644 --- a/packages/presets/nocobase/.npmignore +++ b/packages/presets/nocobase/.npmignore @@ -1,4 +1,2 @@ -node_modules -*.log -docs -__tests__ +/node_modules +/src \ No newline at end of file diff --git a/packages/presets/nocobase/package.json b/packages/presets/nocobase/package.json index be4d7fbb0..ca817cdcf 100644 --- a/packages/presets/nocobase/package.json +++ b/packages/presets/nocobase/package.json @@ -41,7 +41,8 @@ "@nocobase/plugin-users": "0.11.1-alpha.5", "@nocobase/plugin-verification": "0.11.1-alpha.5", "@nocobase/plugin-workflow": "0.11.1-alpha.5", - "@nocobase/server": "0.11.1-alpha.5" + "@nocobase/server": "0.11.1-alpha.5", + "cronstrue": "^2.11.0" }, "repository": { "type": "git", diff --git a/packages/presets/nocobase/src/client/index.ts b/packages/presets/nocobase/src/client/index.ts index 4c568f378..894bc6448 100644 --- a/packages/presets/nocobase/src/client/index.ts +++ b/packages/presets/nocobase/src/client/index.ts @@ -20,30 +20,6 @@ export class NocoBaseClientPresetPlugin extends Plugin { config.headers['X-Timezone'] = getCurrentTimezone(); return config; }); - this.app.pm.add(NocoBaseBuildInPlugin); - try { - await this.loadRemotePlugin(); - } catch (error) { - if (401 === error?.response?.status) { - this.app.apiClient.auth.setRole(null); - window.location.reload(); - } else { - throw error; - } - } - } - - // TODO: 现在是先远程加载远程组件的名称,然后再加载本地组件 - // 后面会改为直接加载远程组件,现在暂时先这样处理 - // 远程加载的逻辑后面会挪到内核 `@nocobase/client` 中 - async loadRemotePlugin() { - if (this.app.dynamicImport) { - const res = await this.app.apiClient.request({ url: 'app:getPlugins' }); - const pluginNames = res.data?.data || []; - for await (const pluginName of pluginNames) { - const ProviderComponent = await this.app.dynamicImport(pluginName); - this.app.pm.add(ProviderComponent.default, { name: pluginName }); - } - } + await this.app.pm.add(NocoBaseBuildInPlugin); } } diff --git a/packages/samples/command/.npmignore b/packages/samples/command/.npmignore new file mode 100644 index 000000000..c593fe9df --- /dev/null +++ b/packages/samples/command/.npmignore @@ -0,0 +1,2 @@ +/node_modules +/src \ No newline at end of file diff --git a/packages/samples/command/client.d.ts b/packages/samples/command/client.d.ts index d515d1feb..6c459cbac 100755 --- a/packages/samples/command/client.d.ts +++ b/packages/samples/command/client.d.ts @@ -1,3 +1,2 @@ -export * from './src/client'; -export { default } from './src/client'; - +export * from './dist/client'; +export { default } from './dist/client'; diff --git a/packages/samples/command/client.js b/packages/samples/command/client.js index 3c39956ca..b6e3be70e 100755 --- a/packages/samples/command/client.js +++ b/packages/samples/command/client.js @@ -1 +1 @@ -module.exports = require('./lib/client/index.js'); +module.exports = require('./dist/client/index.js'); diff --git a/packages/samples/command/package.json b/packages/samples/command/package.json index 2f73908f5..909867e6e 100644 --- a/packages/samples/command/package.json +++ b/packages/samples/command/package.json @@ -1,22 +1,11 @@ { "name": "@nocobase/plugin-sample-command", "version": "0.11.1-alpha.5", - "main": "./lib/server/index.js", - "files": [ - "lib", - "src", - "README.md", - "README.zh-CN.md", - "CHANGELOG.md", - "server.js", - "server.d.ts", - "client.js", - "client.d.ts" - ], - "devDependencies": { - "@nocobase/client": "0.11.1-alpha.5", - "@nocobase/server": "0.11.1-alpha.5", - "@nocobase/test": "0.11.1-alpha.5" + "main": "./dist/server/index.js", + "peerDependencies": { + "@nocobase/client": "0.x", + "@nocobase/server": "0.x", + "@nocobase/test": "0.x" }, "gitHead": "ce588eefb0bfc50f7d5bbee575e0b5e843bf6644" } diff --git a/packages/samples/command/server.d.ts b/packages/samples/command/server.d.ts index b55e6f70d..c41081ddc 100755 --- a/packages/samples/command/server.d.ts +++ b/packages/samples/command/server.d.ts @@ -1,3 +1,2 @@ -export * from './src/server'; -export { default } from './src/server'; - +export * from './dist/server'; +export { default } from './dist/server'; diff --git a/packages/samples/command/server.js b/packages/samples/command/server.js index adcc9d90d..972842039 100755 --- a/packages/samples/command/server.js +++ b/packages/samples/command/server.js @@ -1 +1 @@ -module.exports = require('./lib/server/index.js'); +module.exports = require('./dist/server/index.js'); diff --git a/packages/samples/command/src/index.ts b/packages/samples/command/src/index.ts index 7ddad5814..7e74612df 100644 --- a/packages/samples/command/src/index.ts +++ b/packages/samples/command/src/index.ts @@ -1 +1,2 @@ +export * from './server'; export { default } from './server'; diff --git a/packages/samples/custom-block/.npmignore b/packages/samples/custom-block/.npmignore new file mode 100644 index 000000000..c593fe9df --- /dev/null +++ b/packages/samples/custom-block/.npmignore @@ -0,0 +1,2 @@ +/node_modules +/src \ No newline at end of file diff --git a/packages/samples/custom-block/client.d.ts b/packages/samples/custom-block/client.d.ts index d515d1feb..6c459cbac 100755 --- a/packages/samples/custom-block/client.d.ts +++ b/packages/samples/custom-block/client.d.ts @@ -1,3 +1,2 @@ -export * from './src/client'; -export { default } from './src/client'; - +export * from './dist/client'; +export { default } from './dist/client'; diff --git a/packages/samples/custom-block/client.js b/packages/samples/custom-block/client.js index 3c39956ca..b6e3be70e 100755 --- a/packages/samples/custom-block/client.js +++ b/packages/samples/custom-block/client.js @@ -1 +1 @@ -module.exports = require('./lib/client/index.js'); +module.exports = require('./dist/client/index.js'); diff --git a/packages/samples/custom-block/package.json b/packages/samples/custom-block/package.json index efbc0f9a2..eae8ee3a7 100644 --- a/packages/samples/custom-block/package.json +++ b/packages/samples/custom-block/package.json @@ -1,26 +1,17 @@ { "name": "@nocobase/plugin-sample-custom-block", "version": "0.11.1-alpha.5", - "main": "./lib/server/index.js", - "files": [ - "lib", - "src", - "README.md", - "README.zh-CN.md", - "CHANGELOG.md", - "server.js", - "server.d.ts", - "client.js", - "client.d.ts" - ], + "main": "./dist/server/index.js", "devDependencies": { - "@ant-design/icons": "^5.1.4", - "@formily/react": "^2.2.27", - "@nocobase/client": "0.11.1-alpha.5", - "@nocobase/server": "0.11.1-alpha.5", - "@nocobase/test": "0.11.1-alpha.5", + "@ant-design/icons": "5.x", + "@formily/react": "2.x", "react": "^18.2.0", "react-i18next": "^11.15.1" }, + "peerDependencies": { + "@nocobase/client": "0.x", + "@nocobase/server": "0.x", + "@nocobase/test": "0.x" + }, "gitHead": "ce588eefb0bfc50f7d5bbee575e0b5e843bf6644" } diff --git a/packages/samples/custom-block/server.d.ts b/packages/samples/custom-block/server.d.ts index b55e6f70d..c41081ddc 100755 --- a/packages/samples/custom-block/server.d.ts +++ b/packages/samples/custom-block/server.d.ts @@ -1,3 +1,2 @@ -export * from './src/server'; -export { default } from './src/server'; - +export * from './dist/server'; +export { default } from './dist/server'; diff --git a/packages/samples/custom-block/server.js b/packages/samples/custom-block/server.js index adcc9d90d..972842039 100755 --- a/packages/samples/custom-block/server.js +++ b/packages/samples/custom-block/server.js @@ -1 +1 @@ -module.exports = require('./lib/server/index.js'); +module.exports = require('./dist/server/index.js'); diff --git a/packages/samples/custom-block/src/index.ts b/packages/samples/custom-block/src/index.ts index 7ddad5814..7e74612df 100644 --- a/packages/samples/custom-block/src/index.ts +++ b/packages/samples/custom-block/src/index.ts @@ -1 +1,2 @@ +export * from './server'; export { default } from './server'; diff --git a/packages/samples/custom-collection-template/.npmignore b/packages/samples/custom-collection-template/.npmignore new file mode 100644 index 000000000..c593fe9df --- /dev/null +++ b/packages/samples/custom-collection-template/.npmignore @@ -0,0 +1,2 @@ +/node_modules +/src \ No newline at end of file diff --git a/packages/samples/custom-collection-template/client.d.ts b/packages/samples/custom-collection-template/client.d.ts index d515d1feb..6c459cbac 100755 --- a/packages/samples/custom-collection-template/client.d.ts +++ b/packages/samples/custom-collection-template/client.d.ts @@ -1,3 +1,2 @@ -export * from './src/client'; -export { default } from './src/client'; - +export * from './dist/client'; +export { default } from './dist/client'; diff --git a/packages/samples/custom-collection-template/client.js b/packages/samples/custom-collection-template/client.js index 3c39956ca..b6e3be70e 100755 --- a/packages/samples/custom-collection-template/client.js +++ b/packages/samples/custom-collection-template/client.js @@ -1 +1 @@ -module.exports = require('./lib/client/index.js'); +module.exports = require('./dist/client/index.js'); diff --git a/packages/samples/custom-collection-template/package.json b/packages/samples/custom-collection-template/package.json index c8eca4766..bb28fddb9 100644 --- a/packages/samples/custom-collection-template/package.json +++ b/packages/samples/custom-collection-template/package.json @@ -1,22 +1,11 @@ { "name": "@nocobase/plugin-sample-custom-collection-template", "version": "0.11.1-alpha.5", - "main": "./lib/server/index.js", - "files": [ - "lib", - "src", - "README.md", - "README.zh-CN.md", - "CHANGELOG.md", - "server.js", - "server.d.ts", - "client.js", - "client.d.ts" - ], - "devDependencies": { - "@nocobase/client": "0.11.1-alpha.5", - "@nocobase/server": "0.11.1-alpha.5", - "@nocobase/test": "0.11.1-alpha.5" + "main": "./dist/server/index.js", + "peerDependencies": { + "@nocobase/client": "0.x", + "@nocobase/server": "0.x", + "@nocobase/test": "0.x" }, "gitHead": "ce588eefb0bfc50f7d5bbee575e0b5e843bf6644" } diff --git a/packages/samples/custom-collection-template/src/index.ts b/packages/samples/custom-collection-template/src/index.ts index 7ddad5814..7e74612df 100644 --- a/packages/samples/custom-collection-template/src/index.ts +++ b/packages/samples/custom-collection-template/src/index.ts @@ -1 +1,2 @@ +export * from './server'; export { default } from './server'; diff --git a/packages/samples/custom-page/.npmignore b/packages/samples/custom-page/.npmignore new file mode 100644 index 000000000..c593fe9df --- /dev/null +++ b/packages/samples/custom-page/.npmignore @@ -0,0 +1,2 @@ +/node_modules +/src \ No newline at end of file diff --git a/packages/samples/custom-page/client.d.ts b/packages/samples/custom-page/client.d.ts index d515d1feb..6c459cbac 100755 --- a/packages/samples/custom-page/client.d.ts +++ b/packages/samples/custom-page/client.d.ts @@ -1,3 +1,2 @@ -export * from './src/client'; -export { default } from './src/client'; - +export * from './dist/client'; +export { default } from './dist/client'; diff --git a/packages/samples/custom-page/client.js b/packages/samples/custom-page/client.js index 3c39956ca..b6e3be70e 100755 --- a/packages/samples/custom-page/client.js +++ b/packages/samples/custom-page/client.js @@ -1 +1 @@ -module.exports = require('./lib/client/index.js'); +module.exports = require('./dist/client/index.js'); diff --git a/packages/samples/custom-page/package.json b/packages/samples/custom-page/package.json index ce22b7367..43724d620 100644 --- a/packages/samples/custom-page/package.json +++ b/packages/samples/custom-page/package.json @@ -1,23 +1,14 @@ { "name": "@nocobase/plugin-sample-custom-page", "version": "0.11.1-alpha.5", - "main": "./lib/server/index.js", - "files": [ - "lib", - "src", - "README.md", - "README.zh-CN.md", - "CHANGELOG.md", - "server.js", - "server.d.ts", - "client.js", - "client.d.ts" - ], + "main": "./dist/server/index.js", "devDependencies": { - "@nocobase/client": "0.11.1-alpha.5", - "@nocobase/server": "0.11.1-alpha.5", - "@nocobase/test": "0.11.1-alpha.5", "react": "^18.2.0" }, + "peerDependencies": { + "@nocobase/client": "0.x", + "@nocobase/server": "0.x", + "@nocobase/test": "0.x" + }, "gitHead": "ce588eefb0bfc50f7d5bbee575e0b5e843bf6644" } diff --git a/packages/samples/custom-page/server.d.ts b/packages/samples/custom-page/server.d.ts index b55e6f70d..c41081ddc 100755 --- a/packages/samples/custom-page/server.d.ts +++ b/packages/samples/custom-page/server.d.ts @@ -1,3 +1,2 @@ -export * from './src/server'; -export { default } from './src/server'; - +export * from './dist/server'; +export { default } from './dist/server'; diff --git a/packages/samples/custom-page/server.js b/packages/samples/custom-page/server.js index adcc9d90d..972842039 100755 --- a/packages/samples/custom-page/server.js +++ b/packages/samples/custom-page/server.js @@ -1 +1 @@ -module.exports = require('./lib/server/index.js'); +module.exports = require('./dist/server/index.js'); diff --git a/packages/samples/custom-page/src/index.ts b/packages/samples/custom-page/src/index.ts index 7ddad5814..7e74612df 100644 --- a/packages/samples/custom-page/src/index.ts +++ b/packages/samples/custom-page/src/index.ts @@ -1 +1,2 @@ +export * from './server'; export { default } from './server'; diff --git a/packages/samples/custom-signup-page/.npmignore b/packages/samples/custom-signup-page/.npmignore new file mode 100644 index 000000000..c593fe9df --- /dev/null +++ b/packages/samples/custom-signup-page/.npmignore @@ -0,0 +1,2 @@ +/node_modules +/src \ No newline at end of file diff --git a/packages/samples/custom-signup-page/client.d.ts b/packages/samples/custom-signup-page/client.d.ts index d515d1feb..6c459cbac 100755 --- a/packages/samples/custom-signup-page/client.d.ts +++ b/packages/samples/custom-signup-page/client.d.ts @@ -1,3 +1,2 @@ -export * from './src/client'; -export { default } from './src/client'; - +export * from './dist/client'; +export { default } from './dist/client'; diff --git a/packages/samples/custom-signup-page/client.js b/packages/samples/custom-signup-page/client.js index 3c39956ca..b6e3be70e 100755 --- a/packages/samples/custom-signup-page/client.js +++ b/packages/samples/custom-signup-page/client.js @@ -1 +1 @@ -module.exports = require('./lib/client/index.js'); +module.exports = require('./dist/client/index.js'); diff --git a/packages/samples/custom-signup-page/package.json b/packages/samples/custom-signup-page/package.json index 9e8d768a5..bf87b00f6 100644 --- a/packages/samples/custom-signup-page/package.json +++ b/packages/samples/custom-signup-page/package.json @@ -1,24 +1,15 @@ { "name": "@nocobase/plugin-sample-custom-signup-page", "version": "0.11.1-alpha.5", - "main": "./lib/server/index.js", - "files": [ - "lib", - "src", - "README.md", - "README.zh-CN.md", - "CHANGELOG.md", - "server.js", - "server.d.ts", - "client.js", - "client.d.ts" - ], + "main": "./dist/server/index.js", "devDependencies": { - "@formily/react": "^2.2.27", - "@nocobase/client": "0.11.1-alpha.5", - "@nocobase/server": "0.11.1-alpha.5", - "@nocobase/test": "0.11.1-alpha.5", + "@formily/react": "2.x", "react": "^18.2.0" }, + "peerDependencies": { + "@nocobase/client": "0.x", + "@nocobase/server": "0.x", + "@nocobase/test": "0.x" + }, "gitHead": "ce588eefb0bfc50f7d5bbee575e0b5e843bf6644" } diff --git a/packages/samples/custom-signup-page/server.d.ts b/packages/samples/custom-signup-page/server.d.ts index b55e6f70d..c41081ddc 100755 --- a/packages/samples/custom-signup-page/server.d.ts +++ b/packages/samples/custom-signup-page/server.d.ts @@ -1,3 +1,2 @@ -export * from './src/server'; -export { default } from './src/server'; - +export * from './dist/server'; +export { default } from './dist/server'; diff --git a/packages/samples/custom-signup-page/server.js b/packages/samples/custom-signup-page/server.js index adcc9d90d..972842039 100755 --- a/packages/samples/custom-signup-page/server.js +++ b/packages/samples/custom-signup-page/server.js @@ -1 +1 @@ -module.exports = require('./lib/server/index.js'); +module.exports = require('./dist/server/index.js'); diff --git a/packages/samples/custom-signup-page/src/index.ts b/packages/samples/custom-signup-page/src/index.ts index 7ddad5814..7e74612df 100644 --- a/packages/samples/custom-signup-page/src/index.ts +++ b/packages/samples/custom-signup-page/src/index.ts @@ -1 +1,2 @@ +export * from './server'; export { default } from './server'; diff --git a/packages/samples/hello/.npmignore b/packages/samples/hello/.npmignore new file mode 100644 index 000000000..c593fe9df --- /dev/null +++ b/packages/samples/hello/.npmignore @@ -0,0 +1,2 @@ +/node_modules +/src \ No newline at end of file diff --git a/packages/samples/hello/client.d.ts b/packages/samples/hello/client.d.ts index d515d1feb..6c459cbac 100755 --- a/packages/samples/hello/client.d.ts +++ b/packages/samples/hello/client.d.ts @@ -1,3 +1,2 @@ -export * from './src/client'; -export { default } from './src/client'; - +export * from './dist/client'; +export { default } from './dist/client'; diff --git a/packages/samples/hello/client.js b/packages/samples/hello/client.js index 3c39956ca..b6e3be70e 100755 --- a/packages/samples/hello/client.js +++ b/packages/samples/hello/client.js @@ -1 +1 @@ -module.exports = require('./lib/client/index.js'); +module.exports = require('./dist/client/index.js'); diff --git a/packages/samples/hello/package.json b/packages/samples/hello/package.json index 29957b826..ac011a244 100644 --- a/packages/samples/hello/package.json +++ b/packages/samples/hello/package.json @@ -1,31 +1,22 @@ { "name": "@nocobase/plugin-sample-hello", "version": "0.11.1-alpha.5", - "main": "./lib/server/index.js", - "files": [ - "lib", - "src", - "README.md", - "README.zh-CN.md", - "CHANGELOG.md", - "server.js", - "server.d.ts", - "client.js", - "client.d.ts" - ], + "main": "./dist/server/index.js", "displayName": "Sample-Hello", "displayName.zh-CN": "插件demo-hello", "description": "simple plugin demo", "description.zh-CN": "这就是一个简单的插件demo", "devDependencies": { - "@ant-design/icons": "^5.1.4", - "@formily/react": "^2.2.27", - "@nocobase/client": "0.11.1-alpha.5", - "@nocobase/server": "0.11.1-alpha.5", - "@nocobase/test": "0.11.1-alpha.5", - "antd": "^5.7.3", + "@ant-design/icons": "5.x", + "@formily/react": "2.x", + "antd": "5.x", "react": "^18.2.0", "react-i18next": "^11.15.1" }, + "peerDependencies": { + "@nocobase/client": "0.x", + "@nocobase/server": "0.x", + "@nocobase/test": "0.x" + }, "gitHead": "ce588eefb0bfc50f7d5bbee575e0b5e843bf6644" } diff --git a/packages/samples/hello/server.d.ts b/packages/samples/hello/server.d.ts index b55e6f70d..c41081ddc 100755 --- a/packages/samples/hello/server.d.ts +++ b/packages/samples/hello/server.d.ts @@ -1,3 +1,2 @@ -export * from './src/server'; -export { default } from './src/server'; - +export * from './dist/server'; +export { default } from './dist/server'; diff --git a/packages/samples/hello/server.js b/packages/samples/hello/server.js index adcc9d90d..972842039 100755 --- a/packages/samples/hello/server.js +++ b/packages/samples/hello/server.js @@ -1 +1 @@ -module.exports = require('./lib/server/index.js'); +module.exports = require('./dist/server/index.js'); diff --git a/packages/samples/hello/src/index.ts b/packages/samples/hello/src/index.ts index 7ddad5814..7e74612df 100644 --- a/packages/samples/hello/src/index.ts +++ b/packages/samples/hello/src/index.ts @@ -1 +1,2 @@ +export * from './server'; export { default } from './server'; diff --git a/packages/samples/ratelimit/.npmignore b/packages/samples/ratelimit/.npmignore new file mode 100644 index 000000000..c593fe9df --- /dev/null +++ b/packages/samples/ratelimit/.npmignore @@ -0,0 +1,2 @@ +/node_modules +/src \ No newline at end of file diff --git a/packages/samples/ratelimit/client.d.ts b/packages/samples/ratelimit/client.d.ts index d515d1feb..6c459cbac 100755 --- a/packages/samples/ratelimit/client.d.ts +++ b/packages/samples/ratelimit/client.d.ts @@ -1,3 +1,2 @@ -export * from './src/client'; -export { default } from './src/client'; - +export * from './dist/client'; +export { default } from './dist/client'; diff --git a/packages/samples/ratelimit/client.js b/packages/samples/ratelimit/client.js index 3c39956ca..b6e3be70e 100755 --- a/packages/samples/ratelimit/client.js +++ b/packages/samples/ratelimit/client.js @@ -1 +1 @@ -module.exports = require('./lib/client/index.js'); +module.exports = require('./dist/client/index.js'); diff --git a/packages/samples/ratelimit/package.json b/packages/samples/ratelimit/package.json index c3021453c..003a462d5 100644 --- a/packages/samples/ratelimit/package.json +++ b/packages/samples/ratelimit/package.json @@ -1,25 +1,14 @@ { "name": "@nocobase/plugin-sample-ratelimit", "version": "0.11.1-alpha.5", - "main": "./lib/server/index.js", - "files": [ - "lib", - "src", - "README.md", - "README.zh-CN.md", - "CHANGELOG.md", - "server.js", - "server.d.ts", - "client.js", - "client.d.ts" - ], - "dependencies": { + "main": "./dist/server/index.js", + "devDependencies": { "koa-ratelimit": "^5.0.1" }, - "devDependencies": { - "@nocobase/client": "0.11.1-alpha.5", - "@nocobase/server": "0.11.1-alpha.5", - "@nocobase/test": "0.11.1-alpha.5" + "peerDependencies": { + "@nocobase/client": "0.x", + "@nocobase/server": "0.x", + "@nocobase/test": "0.x" }, "gitHead": "ce588eefb0bfc50f7d5bbee575e0b5e843bf6644" } diff --git a/packages/samples/ratelimit/server.d.ts b/packages/samples/ratelimit/server.d.ts index b55e6f70d..c41081ddc 100755 --- a/packages/samples/ratelimit/server.d.ts +++ b/packages/samples/ratelimit/server.d.ts @@ -1,3 +1,2 @@ -export * from './src/server'; -export { default } from './src/server'; - +export * from './dist/server'; +export { default } from './dist/server'; diff --git a/packages/samples/ratelimit/server.js b/packages/samples/ratelimit/server.js index adcc9d90d..972842039 100755 --- a/packages/samples/ratelimit/server.js +++ b/packages/samples/ratelimit/server.js @@ -1 +1 @@ -module.exports = require('./lib/server/index.js'); +module.exports = require('./dist/server/index.js'); diff --git a/packages/samples/ratelimit/src/index.ts b/packages/samples/ratelimit/src/index.ts index 7ddad5814..7e74612df 100644 --- a/packages/samples/ratelimit/src/index.ts +++ b/packages/samples/ratelimit/src/index.ts @@ -1 +1,2 @@ +export * from './server'; export { default } from './server'; diff --git a/packages/samples/shop-actions/.npmignore b/packages/samples/shop-actions/.npmignore new file mode 100644 index 000000000..c593fe9df --- /dev/null +++ b/packages/samples/shop-actions/.npmignore @@ -0,0 +1,2 @@ +/node_modules +/src \ No newline at end of file diff --git a/packages/samples/shop-actions/client.d.ts b/packages/samples/shop-actions/client.d.ts index d515d1feb..6c459cbac 100755 --- a/packages/samples/shop-actions/client.d.ts +++ b/packages/samples/shop-actions/client.d.ts @@ -1,3 +1,2 @@ -export * from './src/client'; -export { default } from './src/client'; - +export * from './dist/client'; +export { default } from './dist/client'; diff --git a/packages/samples/shop-actions/client.js b/packages/samples/shop-actions/client.js index 3c39956ca..b6e3be70e 100755 --- a/packages/samples/shop-actions/client.js +++ b/packages/samples/shop-actions/client.js @@ -1 +1 @@ -module.exports = require('./lib/client/index.js'); +module.exports = require('./dist/client/index.js'); diff --git a/packages/samples/shop-actions/package.json b/packages/samples/shop-actions/package.json index 53e30cbdc..8c08fd076 100644 --- a/packages/samples/shop-actions/package.json +++ b/packages/samples/shop-actions/package.json @@ -1,22 +1,11 @@ { "name": "@nocobase/plugin-sample-shop-actions", "version": "0.11.1-alpha.5", - "main": "./lib/server/index.js", - "files": [ - "lib", - "src", - "README.md", - "README.zh-CN.md", - "CHANGELOG.md", - "server.js", - "server.d.ts", - "client.js", - "client.d.ts" - ], - "devDependencies": { - "@nocobase/client": "0.11.1-alpha.5", - "@nocobase/server": "0.11.1-alpha.5", - "@nocobase/test": "0.11.1-alpha.5" + "main": "./dist/server/index.js", + "peerDependencies": { + "@nocobase/client": "0.x", + "@nocobase/server": "0.x", + "@nocobase/test": "0.x" }, "gitHead": "ce588eefb0bfc50f7d5bbee575e0b5e843bf6644" } diff --git a/packages/samples/shop-actions/server.d.ts b/packages/samples/shop-actions/server.d.ts index b55e6f70d..c41081ddc 100755 --- a/packages/samples/shop-actions/server.d.ts +++ b/packages/samples/shop-actions/server.d.ts @@ -1,3 +1,2 @@ -export * from './src/server'; -export { default } from './src/server'; - +export * from './dist/server'; +export { default } from './dist/server'; diff --git a/packages/samples/shop-actions/server.js b/packages/samples/shop-actions/server.js index adcc9d90d..972842039 100755 --- a/packages/samples/shop-actions/server.js +++ b/packages/samples/shop-actions/server.js @@ -1 +1 @@ -module.exports = require('./lib/server/index.js'); +module.exports = require('./dist/server/index.js'); diff --git a/packages/samples/shop-actions/src/index.ts b/packages/samples/shop-actions/src/index.ts index 7ddad5814..7e74612df 100644 --- a/packages/samples/shop-actions/src/index.ts +++ b/packages/samples/shop-actions/src/index.ts @@ -1 +1,2 @@ +export * from './server'; export { default } from './server'; diff --git a/packages/samples/shop-events/.npmignore b/packages/samples/shop-events/.npmignore new file mode 100644 index 000000000..c593fe9df --- /dev/null +++ b/packages/samples/shop-events/.npmignore @@ -0,0 +1,2 @@ +/node_modules +/src \ No newline at end of file diff --git a/packages/samples/shop-events/client.d.ts b/packages/samples/shop-events/client.d.ts index d515d1feb..6c459cbac 100755 --- a/packages/samples/shop-events/client.d.ts +++ b/packages/samples/shop-events/client.d.ts @@ -1,3 +1,2 @@ -export * from './src/client'; -export { default } from './src/client'; - +export * from './dist/client'; +export { default } from './dist/client'; diff --git a/packages/samples/shop-events/client.js b/packages/samples/shop-events/client.js index 3c39956ca..b6e3be70e 100755 --- a/packages/samples/shop-events/client.js +++ b/packages/samples/shop-events/client.js @@ -1 +1 @@ -module.exports = require('./lib/client/index.js'); +module.exports = require('./dist/client/index.js'); diff --git a/packages/samples/shop-events/package.json b/packages/samples/shop-events/package.json index 44d4dbc4f..5f888fc94 100644 --- a/packages/samples/shop-events/package.json +++ b/packages/samples/shop-events/package.json @@ -1,22 +1,11 @@ { "name": "@nocobase/plugin-sample-shop-events", "version": "0.11.1-alpha.5", - "main": "./lib/server/index.js", - "files": [ - "lib", - "src", - "README.md", - "README.zh-CN.md", - "CHANGELOG.md", - "server.js", - "server.d.ts", - "client.js", - "client.d.ts" - ], - "devDependencies": { - "@nocobase/client": "0.11.1-alpha.5", - "@nocobase/server": "0.11.1-alpha.5", - "@nocobase/test": "0.11.1-alpha.5" + "main": "./dist/server/index.js", + "peerDependencies": { + "@nocobase/client": "0.x", + "@nocobase/server": "0.x", + "@nocobase/test": "0.x" }, "gitHead": "ce588eefb0bfc50f7d5bbee575e0b5e843bf6644" } diff --git a/packages/samples/shop-events/server.d.ts b/packages/samples/shop-events/server.d.ts index b55e6f70d..c41081ddc 100755 --- a/packages/samples/shop-events/server.d.ts +++ b/packages/samples/shop-events/server.d.ts @@ -1,3 +1,2 @@ -export * from './src/server'; -export { default } from './src/server'; - +export * from './dist/server'; +export { default } from './dist/server'; diff --git a/packages/samples/shop-events/server.js b/packages/samples/shop-events/server.js index adcc9d90d..972842039 100755 --- a/packages/samples/shop-events/server.js +++ b/packages/samples/shop-events/server.js @@ -1 +1 @@ -module.exports = require('./lib/server/index.js'); +module.exports = require('./dist/server/index.js'); diff --git a/packages/samples/shop-events/src/index.ts b/packages/samples/shop-events/src/index.ts index 7ddad5814..7e74612df 100644 --- a/packages/samples/shop-events/src/index.ts +++ b/packages/samples/shop-events/src/index.ts @@ -1 +1,2 @@ +export * from './server'; export { default } from './server'; diff --git a/packages/samples/shop-i18n/.npmignore b/packages/samples/shop-i18n/.npmignore new file mode 100644 index 000000000..c593fe9df --- /dev/null +++ b/packages/samples/shop-i18n/.npmignore @@ -0,0 +1,2 @@ +/node_modules +/src \ No newline at end of file diff --git a/packages/samples/shop-i18n/client.d.ts b/packages/samples/shop-i18n/client.d.ts index d515d1feb..6c459cbac 100755 --- a/packages/samples/shop-i18n/client.d.ts +++ b/packages/samples/shop-i18n/client.d.ts @@ -1,3 +1,2 @@ -export * from './src/client'; -export { default } from './src/client'; - +export * from './dist/client'; +export { default } from './dist/client'; diff --git a/packages/samples/shop-i18n/client.js b/packages/samples/shop-i18n/client.js index 3c39956ca..b6e3be70e 100755 --- a/packages/samples/shop-i18n/client.js +++ b/packages/samples/shop-i18n/client.js @@ -1 +1 @@ -module.exports = require('./lib/client/index.js'); +module.exports = require('./dist/client/index.js'); diff --git a/packages/samples/shop-i18n/package.json b/packages/samples/shop-i18n/package.json index 17d2595c8..04ba0ed52 100644 --- a/packages/samples/shop-i18n/package.json +++ b/packages/samples/shop-i18n/package.json @@ -1,28 +1,17 @@ { "name": "@nocobase/plugin-sample-shop-i18n", "version": "0.11.1-alpha.5", - "main": "./lib/server/index.js", - "files": [ - "lib", - "src", - "README.md", - "README.zh-CN.md", - "CHANGELOG.md", - "server.js", - "server.d.ts", - "client.js", - "client.d.ts" - ], - "dependencies": { - "nodejs-snowflake": "2.0.1" - }, + "main": "./dist/server/index.js", "devDependencies": { - "@nocobase/client": "0.11.1-alpha.5", - "@nocobase/server": "0.11.1-alpha.5", - "@nocobase/test": "0.11.1-alpha.5", - "antd": "^5.7.3", + "antd": "5.x", + "nodejs-snowflake": "2.0.1", "react": "^18.2.0", "react-i18next": "^11.15.1" }, + "peerDependencies": { + "@nocobase/client": "0.x", + "@nocobase/server": "0.x", + "@nocobase/test": "0.x" + }, "gitHead": "ce588eefb0bfc50f7d5bbee575e0b5e843bf6644" } diff --git a/packages/samples/shop-i18n/server.d.ts b/packages/samples/shop-i18n/server.d.ts index b55e6f70d..c41081ddc 100755 --- a/packages/samples/shop-i18n/server.d.ts +++ b/packages/samples/shop-i18n/server.d.ts @@ -1,3 +1,2 @@ -export * from './src/server'; -export { default } from './src/server'; - +export * from './dist/server'; +export { default } from './dist/server'; diff --git a/packages/samples/shop-i18n/server.js b/packages/samples/shop-i18n/server.js index adcc9d90d..972842039 100755 --- a/packages/samples/shop-i18n/server.js +++ b/packages/samples/shop-i18n/server.js @@ -1 +1 @@ -module.exports = require('./lib/server/index.js'); +module.exports = require('./dist/server/index.js'); diff --git a/packages/samples/shop-i18n/src/index.ts b/packages/samples/shop-i18n/src/index.ts index 7ddad5814..7e74612df 100644 --- a/packages/samples/shop-i18n/src/index.ts +++ b/packages/samples/shop-i18n/src/index.ts @@ -1 +1,2 @@ +export * from './server'; export { default } from './server'; diff --git a/packages/samples/shop-modeling/.npmignore b/packages/samples/shop-modeling/.npmignore new file mode 100644 index 000000000..c593fe9df --- /dev/null +++ b/packages/samples/shop-modeling/.npmignore @@ -0,0 +1,2 @@ +/node_modules +/src \ No newline at end of file diff --git a/packages/samples/shop-modeling/client.d.ts b/packages/samples/shop-modeling/client.d.ts index d515d1feb..6c459cbac 100755 --- a/packages/samples/shop-modeling/client.d.ts +++ b/packages/samples/shop-modeling/client.d.ts @@ -1,3 +1,2 @@ -export * from './src/client'; -export { default } from './src/client'; - +export * from './dist/client'; +export { default } from './dist/client'; diff --git a/packages/samples/shop-modeling/client.js b/packages/samples/shop-modeling/client.js index 3c39956ca..b6e3be70e 100755 --- a/packages/samples/shop-modeling/client.js +++ b/packages/samples/shop-modeling/client.js @@ -1 +1 @@ -module.exports = require('./lib/client/index.js'); +module.exports = require('./dist/client/index.js'); diff --git a/packages/samples/shop-modeling/package.json b/packages/samples/shop-modeling/package.json index 3b680567f..8544ace83 100644 --- a/packages/samples/shop-modeling/package.json +++ b/packages/samples/shop-modeling/package.json @@ -1,26 +1,15 @@ { "name": "@nocobase/plugin-sample-shop-modeling", "version": "0.11.1-alpha.5", - "main": "./lib/server/index.js", - "files": [ - "lib", - "src", - "README.md", - "README.zh-CN.md", - "CHANGELOG.md", - "server.js", - "server.d.ts", - "client.js", - "client.d.ts" - ], - "dependencies": { + "main": "./dist/server/index.js", + "devDependencies": { "nodejs-snowflake": "2.0.1" }, - "devDependencies": { - "@nocobase/client": "0.11.1-alpha.5", - "@nocobase/database": "0.11.1-alpha.5", - "@nocobase/server": "0.11.1-alpha.5", - "@nocobase/test": "0.11.1-alpha.5" + "peerDependencies": { + "@nocobase/client": "0.x", + "@nocobase/database": "0.x", + "@nocobase/server": "0.x", + "@nocobase/test": "0.x" }, "gitHead": "ce588eefb0bfc50f7d5bbee575e0b5e843bf6644" } diff --git a/packages/samples/shop-modeling/server.d.ts b/packages/samples/shop-modeling/server.d.ts index b55e6f70d..c41081ddc 100755 --- a/packages/samples/shop-modeling/server.d.ts +++ b/packages/samples/shop-modeling/server.d.ts @@ -1,3 +1,2 @@ -export * from './src/server'; -export { default } from './src/server'; - +export * from './dist/server'; +export { default } from './dist/server'; diff --git a/packages/samples/shop-modeling/server.js b/packages/samples/shop-modeling/server.js index adcc9d90d..972842039 100755 --- a/packages/samples/shop-modeling/server.js +++ b/packages/samples/shop-modeling/server.js @@ -1 +1 @@ -module.exports = require('./lib/server/index.js'); +module.exports = require('./dist/server/index.js'); diff --git a/packages/samples/shop-modeling/src/index.ts b/packages/samples/shop-modeling/src/index.ts index 7ddad5814..7e74612df 100644 --- a/packages/samples/shop-modeling/src/index.ts +++ b/packages/samples/shop-modeling/src/index.ts @@ -1 +1,2 @@ +export * from './server'; export { default } from './server'; diff --git a/tsconfig.json b/tsconfig.json index ac9293215..f9bcb1a7a 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -9,6 +9,7 @@ "noUnusedLocals": false, "preserveConstEnums": true, "skipLibCheck": true, + "skipDefaultLibCheck": true, "sourceMap": true, "inlineSources": true, "resolveJsonModule": true, diff --git a/yarn.lock b/yarn.lock index a5694b625..048df2a00 100644 --- a/yarn.lock +++ b/yarn.lock @@ -138,7 +138,7 @@ dependencies: "@ctrl/tinycolor" "^3.4.0" -"@ant-design/cssinjs@^1", "@ant-design/cssinjs@^1.10.1", "@ant-design/cssinjs@^1.3.1", "@ant-design/cssinjs@^1.9.1": +"@ant-design/cssinjs@^1", "@ant-design/cssinjs@^1.3.1", "@ant-design/cssinjs@^1.9.1": version "1.10.1" resolved "https://registry.npmmirror.com/@ant-design/cssinjs/-/cssinjs-1.10.1.tgz#c9173f38e3d61f0883ca3c17d7cf1e30784e0dd7" dependencies: @@ -153,6 +153,7 @@ "@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" @@ -179,6 +180,16 @@ version "4.2.1" resolved "https://registry.npmmirror.com/@ant-design/icons-svg/-/icons-svg-4.2.1.tgz#8630da8eb4471a4aabdaed7d1ff6a97dcb2cf05a" +"@ant-design/icons@5.x", "@ant-design/icons@^5.0.0", "@ant-design/icons@^5.1.0", "@ant-design/icons@^5.1.3", "@ant-design/icons@^5.1.4": + version "5.1.4" + resolved "https://registry.npmmirror.com/@ant-design/icons/-/icons-5.1.4.tgz#614e29e26d092c2c1c1a2acbc0d84434d8d1474e" + dependencies: + "@ant-design/colors" "^7.0.0" + "@ant-design/icons-svg" "^4.2.1" + "@babel/runtime" "^7.11.2" + classnames "^2.2.6" + rc-util "^5.31.1" + "@ant-design/icons@^4": version "4.8.0" resolved "https://registry.npmmirror.com/@ant-design/icons/-/icons-4.8.0.tgz#3084e2bb494cac3dad6c0392f77c1efc90ee1fa4" @@ -189,16 +200,6 @@ classnames "^2.2.6" rc-util "^5.9.4" -"@ant-design/icons@^5.0.0", "@ant-design/icons@^5.1.0", "@ant-design/icons@^5.1.3", "@ant-design/icons@^5.1.4": - version "5.1.4" - resolved "https://registry.npmmirror.com/@ant-design/icons/-/icons-5.1.4.tgz#614e29e26d092c2c1c1a2acbc0d84434d8d1474e" - dependencies: - "@ant-design/colors" "^7.0.0" - "@ant-design/icons-svg" "^4.2.1" - "@babel/runtime" "^7.11.2" - classnames "^2.2.6" - rc-util "^5.31.1" - "@ant-design/plots@^1.2.5": version "1.2.5" resolved "https://registry.npmmirror.com/@ant-design/plots/-/plots-1.2.5.tgz#404caf0e2c8d052590fe080c6f0fdf0e0c3119ab" @@ -1136,7 +1137,8 @@ "@babel/generator@^7.7.2": version "7.22.9" - resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.22.9.tgz#572ecfa7a31002fa1de2a9d91621fd895da8493d" + resolved "https://registry.npmmirror.com/@babel/generator/-/generator-7.22.9.tgz#572ecfa7a31002fa1de2a9d91621fd895da8493d" + integrity sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw== dependencies: "@babel/types" "^7.22.5" "@jridgewell/gen-mapping" "^0.3.2" @@ -2760,6 +2762,14 @@ "@dnd-kit/utilities" "^3.2.1" tslib "^2.0.0" +"@dnd-kit/modifiers@^6.0.0": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@dnd-kit/modifiers/-/modifiers-6.0.1.tgz#9e39b25fd6e323659604cc74488fe044d33188c8" + integrity sha512-rbxcsg3HhzlcMHVHWDuh9LCjpOVAgqbV78wLGI8tziXY3+qcMQ61qVXIvNKQFuhj75dSfD+o+PYZQ/NUk2A23A== + dependencies: + "@dnd-kit/utilities" "^3.2.1" + tslib "^2.0.0" + "@dnd-kit/sortable@^6.0.0": version "6.0.1" resolved "https://registry.npmmirror.com/@dnd-kit/sortable/-/sortable-6.0.1.tgz#08d046efa85c546fd21979836b007d6fea1001f9" @@ -2923,6 +2933,11 @@ version "0.18.11" resolved "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.18.11.tgz#fa6f0cc7105367cb79cc0a8bf32bf50cb1673e45" +"@esbuild/android-arm64@0.18.13": + version "0.18.13" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.18.13.tgz#70ef455455654c7800c31ae55ae295d81712238c" + integrity sha512-j7NhycJUoUAG5kAzGf4fPWfd17N6SM3o1X6MlXVqfHvs2buFraCJzos9vbeWjLxOyBKHyPOnuCuipbhvbYtTAg== + "@esbuild/android-arm@0.17.19": version "0.17.19" resolved "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.17.19.tgz#5898f7832c2298bc7d0ab53701c57beb74d78b4d" @@ -2931,6 +2946,11 @@ version "0.18.11" resolved "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.18.11.tgz#ae84a410696c9f549a15be94eaececb860bacacb" +"@esbuild/android-arm@0.18.13": + version "0.18.13" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.18.13.tgz#15db83099855fc4193658a40687893ee5c95d7a9" + integrity sha512-KwqFhxRFMKZINHzCqf8eKxE0XqWlAVPRxwy6rc7CbVFxzUWB2sA/s3hbMZeemPdhN3fKBkqOaFhTbS8xJXYIWQ== + "@esbuild/android-x64@0.17.19": version "0.17.19" resolved "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.17.19.tgz#658368ef92067866d95fb268719f98f363d13ae1" @@ -2939,6 +2959,11 @@ version "0.18.11" resolved "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.18.11.tgz#0e58360bbc789ad0d68174d32ba20e678c2a16b6" +"@esbuild/android-x64@0.18.13": + version "0.18.13" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.18.13.tgz#473d589219e1c06e305cf61ca77b8f69d9b6ffab" + integrity sha512-M2eZkRxR6WnWfVELHmv6MUoHbOqnzoTVSIxgtsyhm/NsgmL+uTmag/VVzdXvmahak1I6sOb1K/2movco5ikDJg== + "@esbuild/darwin-arm64@0.17.19": version "0.17.19" resolved "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz#584c34c5991b95d4d48d333300b1a4e2ff7be276" @@ -2947,6 +2972,11 @@ version "0.18.11" resolved "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.18.11.tgz#fcdcd2ef76ca656540208afdd84f284072f0d1f9" +"@esbuild/darwin-arm64@0.18.13": + version "0.18.13" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.18.13.tgz#0f525b2c1821a0591a06963582e5dc749ba51d45" + integrity sha512-f5goG30YgR1GU+fxtaBRdSW3SBG9pZW834Mmhxa6terzcboz7P2R0k4lDxlkP7NYRIIdBbWp+VgwQbmMH4yV7w== + "@esbuild/darwin-x64@0.17.19": version "0.17.19" resolved "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz#7751d236dfe6ce136cce343dce69f52d76b7f6cb" @@ -2955,6 +2985,11 @@ version "0.18.11" resolved "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.18.11.tgz#c5ac602ec0504a8ff81e876bc8a9811e94d69d37" +"@esbuild/darwin-x64@0.18.13": + version "0.18.13" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.18.13.tgz#81965b690bae86bf1289b2ce0732506fd41fb545" + integrity sha512-RIrxoKH5Eo+yE5BtaAIMZaiKutPhZjw+j0OCh8WdvKEKJQteacq0myZvBDLU+hOzQOZWJeDnuQ2xgSScKf1Ovw== + "@esbuild/freebsd-arm64@0.17.19": version "0.17.19" resolved "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz#cacd171665dd1d500f45c167d50c6b7e539d5fd2" @@ -2963,6 +2998,11 @@ version "0.18.11" resolved "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.11.tgz#7012fb06ee3e6e0d5560664a65f3fefbcc46db2e" +"@esbuild/freebsd-arm64@0.18.13": + version "0.18.13" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.13.tgz#895bb37fdea886db09549119158e044f146861f0" + integrity sha512-AfRPhHWmj9jGyLgW/2FkYERKmYR+IjYxf2rtSLmhOrPGFh0KCETFzSjx/JX/HJnvIqHt/DRQD/KAaVsUKoI3Xg== + "@esbuild/freebsd-x64@0.17.19": version "0.17.19" resolved "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz#0769456eee2a08b8d925d7c00b79e861cb3162e4" @@ -2971,6 +3011,11 @@ version "0.18.11" resolved "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.18.11.tgz#c5de1199f70e1f97d5c8fca51afa9bf9a2af5969" +"@esbuild/freebsd-x64@0.18.13": + version "0.18.13" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.18.13.tgz#0b1dfde3ff1b18f03f71e460f91dc463e6a23903" + integrity sha512-pGzWWZJBInhIgdEwzn8VHUBang8UvFKsvjDkeJ2oyY5gZtAM6BaxK0QLCuZY+qoj/nx/lIaItH425rm/hloETA== + "@esbuild/linux-arm64@0.17.19": version "0.17.19" resolved "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz#38e162ecb723862c6be1c27d6389f48960b68edb" @@ -2979,6 +3024,11 @@ version "0.18.11" resolved "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.18.11.tgz#2a6d3a74e0b8b5f294e22b4515b29f76ebd42660" +"@esbuild/linux-arm64@0.18.13": + version "0.18.13" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.18.13.tgz#350febed5d32d8ec1a424a4c4d7c9ba885604960" + integrity sha512-hCzZbVJEHV7QM77fHPv2qgBcWxgglGFGCxk6KfQx6PsVIdi1u09X7IvgE9QKqm38OpkzaAkPnnPqwRsltvLkIQ== + "@esbuild/linux-arm@0.17.19": version "0.17.19" resolved "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz#1a2cd399c50040184a805174a6d89097d9d1559a" @@ -2987,6 +3037,11 @@ version "0.18.11" resolved "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.18.11.tgz#5175bd61b793b436e4aece6328aa0d9be07751e1" +"@esbuild/linux-arm@0.18.13": + version "0.18.13" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.18.13.tgz#47639d73d894026350eaccf7c174f1d26b747d6a" + integrity sha512-4iMxLRMCxGyk7lEvkkvrxw4aJeC93YIIrfbBlUJ062kilUUnAiMb81eEkVvCVoh3ON283ans7+OQkuy1uHW+Hw== + "@esbuild/linux-ia32@0.17.19": version "0.17.19" resolved "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz#e28c25266b036ce1cabca3c30155222841dc035a" @@ -2995,6 +3050,11 @@ version "0.18.11" resolved "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.18.11.tgz#20ee6cfd65a398875f321a485e7b2278e5f6f67b" +"@esbuild/linux-ia32@0.18.13": + version "0.18.13" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.18.13.tgz#a901a16349c58bf6f873bced36bdf46a5f4dac5d" + integrity sha512-I3OKGbynl3AAIO6onXNrup/ttToE6Rv2XYfFgLK/wnr2J+1g+7k4asLrE+n7VMhaqX+BUnyWkCu27rl+62Adug== + "@esbuild/linux-loong64@0.17.19": version "0.17.19" resolved "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz#0f887b8bb3f90658d1a0117283e55dbd4c9dcf72" @@ -3003,6 +3063,11 @@ version "0.18.11" resolved "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.18.11.tgz#8e7b251dede75083bf44508dab5edce3f49d052b" +"@esbuild/linux-loong64@0.18.13": + version "0.18.13" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.18.13.tgz#faa08db402c18e351234719e00aba98867aa34ce" + integrity sha512-8pcKDApAsKc6WW51ZEVidSGwGbebYw2qKnO1VyD8xd6JN0RN6EUXfhXmDk9Vc4/U3Y4AoFTexQewQDJGsBXBpg== + "@esbuild/linux-mips64el@0.17.19": version "0.17.19" resolved "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz#f5d2a0b8047ea9a5d9f592a178ea054053a70289" @@ -3011,6 +3076,11 @@ version "0.18.11" resolved "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.18.11.tgz#a3125eb48538ac4932a9d05089b157f94e443165" +"@esbuild/linux-mips64el@0.18.13": + version "0.18.13" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.18.13.tgz#2123a54b49ddc1a1dff057bba8a9a5e9f26e5009" + integrity sha512-6GU+J1PLiVqWx8yoCK4Z0GnfKyCGIH5L2KQipxOtbNPBs+qNDcMJr9euxnyJ6FkRPyMwaSkjejzPSISD9hb+gg== + "@esbuild/linux-ppc64@0.17.19": version "0.17.19" resolved "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz#876590e3acbd9fa7f57a2c7d86f83717dbbac8c7" @@ -3019,6 +3089,11 @@ version "0.18.11" resolved "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.18.11.tgz#842abadb7a0995bd539adee2be4d681b68279499" +"@esbuild/linux-ppc64@0.18.13": + version "0.18.13" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.18.13.tgz#9a9befd275a6a3f5baeed89aaafb746df7ba735d" + integrity sha512-pfn/OGZ8tyR8YCV7MlLl5hAit2cmS+j/ZZg9DdH0uxdCoJpV7+5DbuXrR+es4ayRVKIcfS9TTMCs60vqQDmh+w== + "@esbuild/linux-riscv64@0.17.19": version "0.17.19" resolved "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz#7f49373df463cd9f41dc34f9b2262d771688bf09" @@ -3027,6 +3102,11 @@ version "0.18.11" resolved "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.18.11.tgz#7ce6e6cee1c72d5b4d2f4f8b6fcccf4a9bea0e28" +"@esbuild/linux-riscv64@0.18.13": + version "0.18.13" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.18.13.tgz#6644a5b5840fa0c3ffade6f87d943413ece520a8" + integrity sha512-aIbhU3LPg0lOSCfVeGHbmGYIqOtW6+yzO+Nfv57YblEK01oj0mFMtvDJlOaeAZ6z0FZ9D13oahi5aIl9JFphGg== + "@esbuild/linux-s390x@0.17.19": version "0.17.19" resolved "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz#e2afd1afcaf63afe2c7d9ceacd28ec57c77f8829" @@ -3035,6 +3115,11 @@ version "0.18.11" resolved "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.18.11.tgz#98fbc794363d02ded07d300df2e535650b297b96" +"@esbuild/linux-s390x@0.18.13": + version "0.18.13" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.18.13.tgz#c1367a0a02b37f6b0382e71d9c9d97352ca23013" + integrity sha512-Pct1QwF2sp+5LVi4Iu5Y+6JsGaV2Z2vm4O9Dd7XZ5tKYxEHjFtb140fiMcl5HM1iuv6xXO8O1Vrb1iJxHlv8UA== + "@esbuild/linux-x64@0.17.19": version "0.17.19" resolved "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz#8a0e9738b1635f0c53389e515ae83826dec22aa4" @@ -3043,6 +3128,11 @@ version "0.18.11" resolved "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.18.11.tgz#f8458ec8cf74c8274e4cacd00744d8446cac52eb" +"@esbuild/linux-x64@0.18.13": + version "0.18.13" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.18.13.tgz#892674f0918ee3f5e523270cf49a69a557fb64c0" + integrity sha512-zTrIP0KzYP7O0+3ZnmzvUKgGtUvf4+piY8PIO3V8/GfmVd3ZyHJGz7Ht0np3P1wz+I8qJ4rjwJKqqEAbIEPngA== + "@esbuild/netbsd-x64@0.17.19": version "0.17.19" resolved "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz#c29fb2453c6b7ddef9a35e2c18b37bda1ae5c462" @@ -3051,6 +3141,11 @@ version "0.18.11" resolved "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.18.11.tgz#a7b2f991b8293748a7be42eac1c4325faf0c7cca" +"@esbuild/netbsd-x64@0.18.13": + version "0.18.13" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.18.13.tgz#67954292195ecbdae33ab09a9ae6a7f566e49d04" + integrity sha512-I6zs10TZeaHDYoGxENuksxE1sxqZpCp+agYeW039yqFwh3MgVvdmXL5NMveImOC6AtpLvE4xG5ujVic4NWFIDQ== + "@esbuild/openbsd-x64@0.17.19": version "0.17.19" resolved "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz#95e75a391403cb10297280d524d66ce04c920691" @@ -3059,6 +3154,11 @@ version "0.18.11" resolved "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.18.11.tgz#3e50923de84c54008f834221130fd23646072b2f" +"@esbuild/openbsd-x64@0.18.13": + version "0.18.13" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.18.13.tgz#b3eef873dfab547fbe7bcdb3573e1c59dea676b7" + integrity sha512-W5C5nczhrt1y1xPG5bV+0M12p2vetOGlvs43LH8SopQ3z2AseIROu09VgRqydx5qFN7y9qCbpgHLx0kb0TcW7g== + "@esbuild/sunos-x64@0.17.19": version "0.17.19" resolved "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz#722eaf057b83c2575937d3ffe5aeb16540da7273" @@ -3067,6 +3167,11 @@ version "0.18.11" resolved "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.18.11.tgz#ae47a550b0cd395de03606ecfba03cc96c7c19e2" +"@esbuild/sunos-x64@0.18.13": + version "0.18.13" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.18.13.tgz#b368080f42dbb5ae926d0567c02bcd68a34c5efd" + integrity sha512-X/xzuw4Hzpo/yq3YsfBbIsipNgmsm8mE/QeWbdGdTTeZ77fjxI2K0KP3AlhZ6gU3zKTw1bKoZTuKLnqcJ537qw== + "@esbuild/win32-arm64@0.17.19": version "0.17.19" resolved "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz#9aa9dc074399288bdcdd283443e9aeb6b9552b6f" @@ -3075,6 +3180,11 @@ version "0.18.11" resolved "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.18.11.tgz#05d364582b7862d7fbf4698ef43644f7346dcfcc" +"@esbuild/win32-arm64@0.18.13": + version "0.18.13" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.18.13.tgz#11dedda0e8cfb5f781411ea362b2040304be0fc3" + integrity sha512-4CGYdRQT/ILd+yLLE5i4VApMPfGE0RPc/wFQhlluDQCK09+b4JDbxzzjpgQqTPrdnP7r5KUtGVGZYclYiPuHrw== + "@esbuild/win32-ia32@0.17.19": version "0.17.19" resolved "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz#95ad43c62ad62485e210f6299c7b2571e48d2b03" @@ -3083,6 +3193,11 @@ version "0.18.11" resolved "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.18.11.tgz#a3372095a4a1939da672156a3c104f8ce85ee616" +"@esbuild/win32-ia32@0.18.13": + version "0.18.13" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.18.13.tgz#6b8aa95515c05827b7c24c9db9581943566e0dcb" + integrity sha512-D+wKZaRhQI+MUGMH+DbEr4owC2D7XnF+uyGiZk38QbgzLcofFqIOwFs7ELmIeU45CQgfHNy9Q+LKW3cE8g37Kg== + "@esbuild/win32-x64@0.17.19": version "0.17.19" resolved "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz#8cfaf2ff603e9aabb910e9c0558c26cf32744061" @@ -3091,6 +3206,11 @@ version "0.18.11" resolved "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.18.11.tgz#6526c7e1b40d5b9f0a222c6b767c22f6fb97aa57" +"@esbuild/win32-x64@0.18.13": + version "0.18.13" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.18.13.tgz#031f69b1f4cf62a18c38d502458c0b8b02625461" + integrity sha512-iVl6lehAfJS+VmpF3exKpNQ8b0eucf5VWfzR8S7xFve64NBNz2jPUgx1X93/kfnkfgP737O+i1k54SVQS7uVZA== + "@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" @@ -3102,8 +3222,9 @@ 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" + version "4.6.2" + resolved "https://registry.npmmirror.com/@eslint-community/regexpp/-/regexpp-4.6.2.tgz#1816b5f6948029c5eaacb0703b850ee0cb37d8f8" + integrity sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw== "@eslint/eslintrc@^2.1.0": version "2.1.0" @@ -3221,7 +3342,7 @@ intl-messageformat "10.5.0" tslib "^2.4.0" -"@formily/antd-v5@^1.1.0": +"@formily/antd-v5@1.x", "@formily/antd-v5@^1.1.0": version "1.1.0" resolved "https://registry.npmmirror.com/@formily/antd-v5/-/antd-v5-1.1.0.tgz#e2f20df64c62df348a78b4c44aa17c23a24887d1" dependencies: @@ -3239,7 +3360,7 @@ classnames "^2.2.6" react-sticky-box "^1.0.2" -"@formily/core@2.2.27", "@formily/core@^2.2.0", "@formily/core@^2.2.27": +"@formily/core@2.2.27", "@formily/core@2.x", "@formily/core@^2.2.0", "@formily/core@^2.2.27": version "2.2.27" resolved "https://registry.npmmirror.com/@formily/core/-/core-2.2.27.tgz#9ccb51650a713f27997e6823a5a980c9e013f461" dependencies: @@ -3254,7 +3375,7 @@ "@formily/reactive" "2.2.27" "@juggle/resize-observer" "^3.3.1" -"@formily/json-schema@2.2.27", "@formily/json-schema@^2.2.0", "@formily/json-schema@^2.2.27": +"@formily/json-schema@2.2.27", "@formily/json-schema@2.x", "@formily/json-schema@^2.2.0", "@formily/json-schema@^2.2.27": version "2.2.27" resolved "https://registry.npmmirror.com/@formily/json-schema/-/json-schema-2.2.27.tgz#553ae190bf847944f3c3567516a263bdea6c3dfd" dependencies: @@ -3266,7 +3387,7 @@ version "2.2.27" resolved "https://registry.npmmirror.com/@formily/path/-/path-2.2.27.tgz#384f207533a2bdc84d700d4b7ef46ca6d664db15" -"@formily/react@^2.2.0", "@formily/react@^2.2.27": +"@formily/react@2.x", "@formily/react@^2.2.0", "@formily/react@^2.2.27": version "2.2.27" resolved "https://registry.npmmirror.com/@formily/react/-/react-2.2.27.tgz#03fbe7be9f9d8c2d66640ef44bb37695e8311ade" dependencies: @@ -3285,11 +3406,11 @@ "@formily/reactive" "2.2.27" hoist-non-react-statics "^3.3.2" -"@formily/reactive@2.2.27", "@formily/reactive@^2.2.0", "@formily/reactive@^2.2.27": +"@formily/reactive@2.2.27", "@formily/reactive@2.x", "@formily/reactive@^2.2.0", "@formily/reactive@^2.2.27": version "2.2.27" resolved "https://registry.npmmirror.com/@formily/reactive/-/reactive-2.2.27.tgz#b67e6a0573910f0e57729b235a7bd1fe9b3e20ad" -"@formily/shared@2.2.27", "@formily/shared@^2.2.0", "@formily/shared@^2.2.27": +"@formily/shared@2.2.27", "@formily/shared@2.x", "@formily/shared@^2.2.0", "@formily/shared@^2.2.27": version "2.2.27" resolved "https://registry.npmmirror.com/@formily/shared/-/shared-2.2.27.tgz#cc7dd95a4abc15d6d4d541f863052afedb1c72ca" dependencies: @@ -3400,7 +3521,8 @@ "@jest/console@^29.6.1": version "29.6.1" - resolved "https://registry.npmjs.org/@jest/console/-/console-29.6.1.tgz#b48ba7b9c34b51483e6d590f46e5837f1ab5f639" + resolved "https://registry.npmmirror.com/@jest/console/-/console-29.6.1.tgz#b48ba7b9c34b51483e6d590f46e5837f1ab5f639" + integrity sha512-Aj772AYgwTSr5w8qnyoJ0eDYvN6bMsH3ORH1ivMotrInHLKdUz6BDlaEXHdM6kODaBIkNIyQGzsMvRdOv7VG7Q== dependencies: "@jest/types" "^29.6.1" "@types/node" "*" @@ -3455,7 +3577,8 @@ "@jest/core@^29.6.1": version "29.6.1" - resolved "https://registry.npmjs.org/@jest/core/-/core-29.6.1.tgz#fac0d9ddf320490c93356ba201451825231e95f6" + resolved "https://registry.npmmirror.com/@jest/core/-/core-29.6.1.tgz#fac0d9ddf320490c93356ba201451825231e95f6" + integrity sha512-CcowHypRSm5oYQ1obz1wfvkjZZ2qoQlrKKvlfPwh5jUXVU12TWr2qMeH8chLMuTFzHh5a1g2yaqlqDICbr+ukQ== dependencies: "@jest/console" "^29.6.1" "@jest/reporters" "^29.6.1" @@ -3530,7 +3653,8 @@ "@jest/environment@^29.6.1": version "29.6.1" - resolved "https://registry.npmjs.org/@jest/environment/-/environment-29.6.1.tgz#ee358fff2f68168394b4a50f18c68278a21fe82f" + resolved "https://registry.npmmirror.com/@jest/environment/-/environment-29.6.1.tgz#ee358fff2f68168394b4a50f18c68278a21fe82f" + integrity sha512-RMMXx4ws+Gbvw3DfLSuo2cfQlK7IwGbpuEWXCqyYDcqYTI+9Ju3a5hDnXaxjNsa6uKh9PQF2v+qg+RLe63tz5A== dependencies: "@jest/fake-timers" "^29.6.1" "@jest/types" "^29.6.1" @@ -3566,7 +3690,8 @@ "@jest/expect@^29.6.1": version "29.6.1" - resolved "https://registry.npmjs.org/@jest/expect/-/expect-29.6.1.tgz#fef18265188f6a97601f1ea0a2912d81a85b4657" + resolved "https://registry.npmmirror.com/@jest/expect/-/expect-29.6.1.tgz#fef18265188f6a97601f1ea0a2912d81a85b4657" + integrity sha512-N5xlPrAYaRNyFgVf2s9Uyyvr795jnB6rObuPx4QFvNJz8aAjpZUDfO4bh5G/xuplMID8PrnuF1+SfSyDxhsgYg== dependencies: expect "^29.6.1" jest-snapshot "^29.6.1" @@ -3588,7 +3713,8 @@ "@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" + resolved "https://registry.npmmirror.com/@jest/fake-timers/-/fake-timers-29.6.1.tgz#c773efddbc61e1d2efcccac008139f621de57c69" + integrity sha512-RdgHgbXyosCDMVYmj7lLpUwXA4c69vcNzhrt69dJJdf8azUrpRh3ckFCaTPNjsEeRi27Cig0oKDGxy5j7hOgHg== dependencies: "@jest/types" "^29.6.1" "@sinonjs/fake-timers" "^10.0.2" @@ -3610,7 +3736,8 @@ "@jest/globals@^29.6.1": version "29.6.1" - resolved "https://registry.npmjs.org/@jest/globals/-/globals-29.6.1.tgz#c8a8923e05efd757308082cc22893d82b8aa138f" + resolved "https://registry.npmmirror.com/@jest/globals/-/globals-29.6.1.tgz#c8a8923e05efd757308082cc22893d82b8aa138f" + integrity sha512-2VjpaGy78JY9n9370H8zGRCFbYVWwjY6RdDMhoJHa1sYfwe6XM/azGN0SjY8kk7BOZApIejQ1BFPyH7FPG0w3A== dependencies: "@jest/environment" "^29.6.1" "@jest/expect" "^29.6.1" @@ -3654,7 +3781,8 @@ "@jest/reporters@^29.6.1": version "29.6.1" - resolved "https://registry.npmjs.org/@jest/reporters/-/reporters-29.6.1.tgz#3325a89c9ead3cf97ad93df3a427549d16179863" + resolved "https://registry.npmmirror.com/@jest/reporters/-/reporters-29.6.1.tgz#3325a89c9ead3cf97ad93df3a427549d16179863" + integrity sha512-9zuaI9QKr9JnoZtFQlw4GREQbxgmNYXU6QuWtmuODvk5nvPUeBYapVR/VYMyi2WSx3jXTLJTJji8rN6+Cm4+FA== dependencies: "@bcoe/v8-coverage" "^0.2.3" "@jest/console" "^29.6.1" @@ -3718,7 +3846,8 @@ "@jest/schemas@^29.6.0": version "29.6.0" - resolved "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.0.tgz#0f4cb2c8e3dca80c135507ba5635a4fd755b0040" + resolved "https://registry.npmmirror.com/@jest/schemas/-/schemas-29.6.0.tgz#0f4cb2c8e3dca80c135507ba5635a4fd755b0040" + integrity sha512-rxLjXyJBTL4LQeJW3aKo0M/+GkCOXsO+8i9Iu7eDb6KwtP65ayoDsitrdPBtujxQ88k4wI2FNYfa6TOGwSn6cQ== dependencies: "@sinclair/typebox" "^0.27.8" @@ -3732,7 +3861,8 @@ "@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" + resolved "https://registry.npmmirror.com/@jest/source-map/-/source-map-29.6.0.tgz#bd34a05b5737cb1a99d43e1957020ac8e5b9ddb1" + integrity sha512-oA+I2SHHQGxDCZpbrsCQSoMLb3Bz547JnM+jUr9qEbuw0vQlWZfpPS7CO9J7XiwKicEz9OFn/IYoLkkiUD7bzA== dependencies: "@jridgewell/trace-mapping" "^0.3.18" callsites "^3.0.0" @@ -3748,7 +3878,8 @@ "@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" + resolved "https://registry.npmmirror.com/@jest/test-result/-/test-result-29.6.1.tgz#850e565a3f58ee8ca6ec424db00cb0f2d83c36ba" + integrity sha512-Ynr13ZRcpX6INak0TPUukU8GWRfm/vAytE3JbJNGAvINySWYdfE7dGZMbk36oVuK4CigpbhMn8eg1dixZ7ZJOw== dependencies: "@jest/console" "^29.6.1" "@jest/types" "^29.6.1" @@ -3775,7 +3906,8 @@ "@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" + resolved "https://registry.npmmirror.com/@jest/test-sequencer/-/test-sequencer-29.6.1.tgz#e3e582ee074dd24ea9687d7d1aaf05ee3a9b068e" + integrity sha512-oBkC36PCDf/wb6dWeQIhaviU0l5u6VCsXa119yqdUosYAt7/FbQU2M2UoziO3igj/HBDEgp57ONQ3fm0v9uyyg== dependencies: "@jest/test-result" "^29.6.1" graceful-fs "^4.2.9" @@ -3834,7 +3966,8 @@ "@jest/transform@^29.6.1": version "29.6.1" - resolved "https://registry.npmjs.org/@jest/transform/-/transform-29.6.1.tgz#acb5606019a197cb99beda3c05404b851f441c92" + resolved "https://registry.npmmirror.com/@jest/transform/-/transform-29.6.1.tgz#acb5606019a197cb99beda3c05404b851f441c92" + integrity sha512-URnTneIU3ZjRSaf906cvf6Hpox3hIeJXRnz3VDSw5/X93gR8ycdfSIEy19FlVx8NFmpN7fe3Gb1xF+NjXaQLWg== dependencies: "@babel/core" "^7.11.6" "@jest/types" "^29.6.1" @@ -3903,7 +4036,8 @@ "@jest/types@^29.6.1": version "29.6.1" - resolved "https://registry.npmjs.org/@jest/types/-/types-29.6.1.tgz#ae79080278acff0a6af5eb49d063385aaa897bf2" + resolved "https://registry.npmmirror.com/@jest/types/-/types-29.6.1.tgz#ae79080278acff0a6af5eb49d063385aaa897bf2" + integrity sha512-tPKQNMPuXgvdOn2/Lg9HNfUvjYVGolt04Hp03f5hAk878uwOLikN+JzeLY0HcVgKgFl9Hs3EIqpu3WX27XNhnw== dependencies: "@jest/schemas" "^29.6.0" "@types/istanbul-lib-coverage" "^2.0.0" @@ -4920,15 +5054,6 @@ version "2.11.8" resolved "https://registry.npmmirror.com/@popperjs/core/-/core-2.11.8.tgz#6b79032e760a0899cd4204710beede972a3a185f" -"@rc-component/color-picker@~1.2.0": - version "1.2.0" - resolved "https://registry.npmmirror.com/@rc-component/color-picker/-/color-picker-1.2.0.tgz#964c86e85f0791703c7f1ec842e7476bcb41954d" - dependencies: - "@babel/runtime" "^7.10.1" - "@ctrl/tinycolor" "^3.6.0" - classnames "^2.2.6" - rc-util "^5.30.0" - "@rc-component/color-picker@~1.4.0": version "1.4.1" resolved "https://registry.npmmirror.com/@rc-component/color-picker/-/color-picker-1.4.1.tgz#dcab0b660e9c4ed63a7582db68ed4a77c862cb93" @@ -4968,16 +5093,6 @@ classnames "^2.3.2" rc-util "^5.24.4" -"@rc-component/tour@~1.8.0": - version "1.8.0" - resolved "https://registry.npmmirror.com/@rc-component/tour/-/tour-1.8.0.tgz#fda8b533e36db1d4254e3ffbcefe3395c346eb1c" - dependencies: - "@babel/runtime" "^7.18.0" - "@rc-component/portal" "^1.0.0-9" - "@rc-component/trigger" "^1.3.6" - classnames "^2.3.2" - rc-util "^5.24.4" - "@rc-component/tour@~1.8.1": version "1.8.1" resolved "https://registry.npmmirror.com/@rc-component/tour/-/tour-1.8.1.tgz#a820714b66cb17f317ebd21ac1b45733d2b99183" @@ -5107,7 +5222,8 @@ "@remix-run/router@1.7.2": version "1.7.2" - resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.7.2.tgz#cba1cf0a04bc04cb66027c51fa600e9cbc388bc8" + resolved "https://registry.npmmirror.com/@remix-run/router/-/router-1.7.2.tgz#cba1cf0a04bc04cb66027c51fa600e9cbc388bc8" + integrity sha512-7Lcn7IqGMV+vizMPoEl5F0XDshcdDYtMI6uJLQdQz5CfZAwy3vvGKYSUk789qndt5dEC4HfSjviSYlSoHGL2+A== "@restart/hooks@^0.4.7": version "0.4.9" @@ -5210,7 +5326,8 @@ "@sinclair/typebox@^0.27.8": version "0.27.8" - resolved "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" + resolved "https://registry.npmmirror.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" + integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== "@sindresorhus/is@^0.14.0": version "0.14.0" @@ -5218,13 +5335,15 @@ "@sinonjs/commons@^3.0.0": version "3.0.0" - resolved "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz#beb434fe875d965265e04722ccfc21df7f755d72" + resolved "https://registry.npmmirror.com/@sinonjs/commons/-/commons-3.0.0.tgz#beb434fe875d965265e04722ccfc21df7f755d72" + integrity sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA== dependencies: type-detect "4.0.8" "@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" + resolved "https://registry.npmmirror.com/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz#55fdff1ecab9f354019129daf4df0dd4d923ea66" + integrity sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA== dependencies: "@sinonjs/commons" "^3.0.0" @@ -5815,6 +5934,7 @@ "@testing-library/dom@^9.0.0": version "9.3.1" resolved "https://registry.npmmirror.com/@testing-library/dom/-/dom-9.3.1.tgz#8094f560e9389fb973fe957af41bf766937a9ee9" + integrity sha512-0DGPd9AR3+iDTjGoMpxIkAsUihHZ3Ai6CneU6bRRrffXMgzCdlNk43jTrD2/5LT6CBb3MWTP8v510JzYtahD2w== dependencies: "@babel/code-frame" "^7.10.4" "@babel/runtime" "^7.12.5" @@ -5975,6 +6095,13 @@ "@types/luxon" "*" "@types/node" "*" +"@types/cross-spawn@^6.0.2": + version "6.0.2" + resolved "https://registry.yarnpkg.com/@types/cross-spawn/-/cross-spawn-6.0.2.tgz#168309de311cd30a2b8ae720de6475c2fbf33ac7" + integrity sha512-KuwNhp3eza+Rhu8IFI5HUXRP0LIhqH5cAjubUvGXXthh4YYBuP2ntwEX+Cz8GJoZUHlKo247wPWOfA9LYEq4cw== + dependencies: + "@types/node" "*" + "@types/d3-array@*": version "3.0.5" resolved "https://registry.npmmirror.com/@types/d3-array/-/d3-array-3.0.5.tgz#857c1afffd3f51319bbc5b301956aca68acaa7b8" @@ -6299,7 +6426,8 @@ "@types/jest@^29.0.0": version "29.5.3" - resolved "https://registry.npmjs.org/@types/jest/-/jest-29.5.3.tgz#7a35dc0044ffb8b56325c6802a4781a626b05777" + resolved "https://registry.npmmirror.com/@types/jest/-/jest-29.5.3.tgz#7a35dc0044ffb8b56325c6802a4781a626b05777" + integrity sha512-1Nq7YrO/vJE/FYnqYyw0FS8LdrjExSgIiHyKg7xPpn+yi8Q4huZryKnkJatN1ZRH89Kw2v33/8ZMB7DuZeSLlA== dependencies: expect "^29.0.0" pretty-format "^29.0.0" @@ -6350,6 +6478,13 @@ dependencies: "@types/koa" "*" +"@types/koa-send@^4.1.3": + version "4.1.3" + resolved "https://registry.yarnpkg.com/@types/koa-send/-/koa-send-4.1.3.tgz#17193c6472ae9e5d1b99ae8086949cc4fd69179d" + integrity sha512-daaTqPZlgjIJycSTNjKpHYuKhXYP30atFc1pBcy6HHqB9+vcymDgYTguPdx9tO4HMOqNyz6bz/zqpxt5eLR+VA== + dependencies: + "@types/koa" "*" + "@types/koa@*", "@types/koa@^2.13.4": version "2.13.6" resolved "https://registry.npmmirror.com/@types/koa/-/koa-2.13.6.tgz#6dc14e727baf397310aa6f414ebe5d144983af42" @@ -6479,7 +6614,8 @@ "@types/prettier@^2.1.5": version "2.7.3" - resolved "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f" + resolved "https://registry.npmmirror.com/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f" + integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== "@types/prop-types@*": version "15.7.5" @@ -6540,6 +6676,11 @@ dependencies: "@types/node" "*" +"@types/requirejs@^2.1.34": + version "2.1.34" + resolved "https://registry.yarnpkg.com/@types/requirejs/-/requirejs-2.1.34.tgz#819e69701fbadefa53376c4f6f9da726b781e143" + integrity sha512-iQLGNE1DyIRYih60B47l/hI5X7J0wAnnRBL6Yn85GUYQg8Fm3wl8kvT6NRwncKroUOSx7/lbAagIFNV7y02DiQ== + "@types/resolve@1.20.2": version "1.20.2" resolved "https://registry.npmmirror.com/@types/resolve/-/resolve-1.20.2.tgz#97d26e00cd4a0423b4af620abecf3e6f442b7975" @@ -6682,6 +6823,7 @@ "@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" + integrity sha512-rClGrMuyS/3j0ETa1Ui7s6GkLhfZGKZL3ZrChLeAiACBE/tRc1wq8SNZESUuluxhLj9FkUefRs2l6bCIArWBiQ== dependencies: "@eslint-community/regexpp" "^4.5.1" "@typescript-eslint/scope-manager" "6.2.0" @@ -6699,6 +6841,7 @@ "@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" + integrity sha512-igVYOqtiK/UsvKAmmloQAruAdUHihsOCvplJpplPZ+3h4aDkC/UKZZNKgB6h93ayuYLuEymU3h8nF1xMRbh37g== dependencies: "@typescript-eslint/scope-manager" "6.2.0" "@typescript-eslint/types" "6.2.0" @@ -6713,16 +6856,17 @@ "@typescript-eslint/types" "5.48.1" "@typescript-eslint/visitor-keys" "5.48.1" -"@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" +"@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" dependencies: - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/visitor-keys" "5.62.0" + "@typescript-eslint/types" "5.61.0" + "@typescript-eslint/visitor-keys" "5.61.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" + integrity sha512-1ZMNVgm5nnHURU8ZSJ3snsHzpFeNK84rdZjluEVBGNu7jDymfqceB3kdIZ6A4xCfEFFhRIB6rF8q/JIqJd2R0Q== dependencies: "@typescript-eslint/types" "6.2.0" "@typescript-eslint/visitor-keys" "6.2.0" @@ -6739,6 +6883,7 @@ "@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" + integrity sha512-DnGZuNU2JN3AYwddYIqrVkYW0uUQdv0AY+kz2M25euVNlujcN2u+rJgfJsBFlUEzBB6OQkUqSZPyuTLf2bP5mw== dependencies: "@typescript-eslint/typescript-estree" "6.2.0" "@typescript-eslint/utils" "6.2.0" @@ -6749,13 +6894,14 @@ version "5.48.1" resolved "https://registry.npmmirror.com/@typescript-eslint/types/-/types-5.48.1.tgz#efd1913a9aaf67caf8a6e6779fd53e14e8587e14" -"@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@5.61.0": + version "5.61.0" + resolved "https://registry.npmmirror.com/@typescript-eslint/types/-/types-5.61.0.tgz#e99ff11b5792d791554abab0f0370936d8ca50c0" "@typescript-eslint/types@6.2.0": version "6.2.0" resolved "https://registry.npmmirror.com/@typescript-eslint/types/-/types-6.2.0.tgz#b341a4e6d5f609267306b07afc6f62bcf92b1495" + integrity sha512-1nRRaDlp/XYJQLvkQJG5F3uBTno5SHPT7XVcJ5n1/k2WfNI28nJsvLakxwZRNY5spuatEKO7d5nZWsQpkqXwBA== "@typescript-eslint/typescript-estree@5.48.1": version "5.48.1" @@ -6769,12 +6915,12 @@ semver "^7.3.7" tsutils "^3.21.0" -"@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" +"@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" dependencies: - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/visitor-keys" "5.62.0" + "@typescript-eslint/types" "5.61.0" + "@typescript-eslint/visitor-keys" "5.61.0" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" @@ -6784,6 +6930,7 @@ "@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" + integrity sha512-Mts6+3HQMSM+LZCglsc2yMIny37IhUgp1Qe8yJUYVyO6rHP7/vN0vajKu3JvHCBIy8TSiKddJ/Zwu80jhnGj1w== dependencies: "@typescript-eslint/types" "6.2.0" "@typescript-eslint/visitor-keys" "6.2.0" @@ -6809,6 +6956,7 @@ "@typescript-eslint/utils@6.2.0": version "6.2.0" resolved "https://registry.npmmirror.com/@typescript-eslint/utils/-/utils-6.2.0.tgz#606a20e5c13883c2d2bd0538ddc4b96b8d410979" + integrity sha512-RCFrC1lXiX1qEZN8LmLrxYRhOkElEsPKTVSNout8DMzf8PeWoQG7Rxz2SadpJa3VSh5oYKGwt7j7X/VRg+Y3OQ== dependencies: "@eslint-community/eslint-utils" "^4.4.0" "@types/json-schema" "^7.0.12" @@ -6819,15 +6967,15 @@ 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" + version "5.61.0" + resolved "https://registry.npmmirror.com/@typescript-eslint/utils/-/utils-5.61.0.tgz#5064838a53e91c754fffbddd306adcca3fe0af36" dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@types/json-schema" "^7.0.9" "@types/semver" "^7.3.12" - "@typescript-eslint/scope-manager" "5.62.0" - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/typescript-estree" "5.62.0" + "@typescript-eslint/scope-manager" "5.61.0" + "@typescript-eslint/types" "5.61.0" + "@typescript-eslint/typescript-estree" "5.61.0" eslint-scope "^5.1.1" semver "^7.3.7" @@ -6838,16 +6986,17 @@ "@typescript-eslint/types" "5.48.1" eslint-visitor-keys "^3.3.0" -"@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" +"@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" dependencies: - "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/types" "5.61.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" + integrity sha512-QbaYUQVKKo9bgCzpjz45llCfwakyoxHetIy8CAvYCtd16Zu1KrpzNHofwF8kGkpPOxZB2o6kz+0nqH8ZkIzuoQ== dependencies: "@typescript-eslint/types" "6.2.0" eslint-visitor-keys "^3.4.1" @@ -7155,6 +7304,11 @@ dependencies: "@use-gesture/core" "10.2.20" +"@vercel/ncc@0.36.1": + version "0.36.1" + resolved "https://registry.yarnpkg.com/@vercel/ncc/-/ncc-0.36.1.tgz#d4c01fdbbe909d128d1bf11c7f8b5431654c5b95" + integrity sha512-S4cL7Taa9yb5qbv+6wLgiKVZ03Qfkc4jGRuiUQMQ8HGBD5pcNRnHeYM33zBvJE4/zJGjJJ8GScB+WmTsn9mORw== + "@vitejs/plugin-react@4.0.0": version "4.0.0" resolved "https://registry.npmmirror.com/@vitejs/plugin-react/-/plugin-react-4.0.0.tgz#46d1c37c507447d10467be1c111595174555ef28" @@ -7498,6 +7652,7 @@ ansi-escapes@^3.0.0, ansi-escapes@^3.2.0: 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" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== dependencies: type-fest "^0.21.3" @@ -7536,6 +7691,7 @@ ansi-regex@^5.0.1: ansi-regex@^6.0.1: version "6.0.1" resolved "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" + integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== ansi-styles@^2.2.1: version "2.2.1" @@ -7560,6 +7716,7 @@ ansi-styles@^5.0.0: ansi-styles@^6.0.0: version "6.2.1" resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" + integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== ansi-wrap@0.1.0, ansi-wrap@^0.1.0: version "0.1.0" @@ -7609,7 +7766,7 @@ antd-style@^3.3.0: "@emotion/utils" "^1" use-merge-value "^1" -antd-token-previewer@^2.0.0-alpha.6: +antd-token-previewer@2.0.0-alpha.8, antd-token-previewer@^2.0.0-alpha.6: version "2.0.0-alpha.8" resolved "https://registry.npmmirror.com/antd-token-previewer/-/antd-token-previewer-2.0.0-alpha.8.tgz#9f47bc531d8bf6907f0e7e5cfbacf50d15619d86" dependencies: @@ -7627,60 +7784,7 @@ antd-token-previewer@^2.0.0-alpha.6: use-debouncy "^4.3.0" vanilla-jsoneditor "^0.16.1" -antd@^5.4.2, antd@^5.5.1: - version "5.6.4" - resolved "https://registry.npmmirror.com/antd/-/antd-5.6.4.tgz#689d74ba61181ba6ea87a0c5d249d30d116ce602" - dependencies: - "@ant-design/colors" "^7.0.0" - "@ant-design/cssinjs" "^1.10.1" - "@ant-design/icons" "^5.1.0" - "@ant-design/react-slick" "~1.0.0" - "@babel/runtime" "^7.18.3" - "@ctrl/tinycolor" "^3.6.0" - "@rc-component/color-picker" "~1.2.0" - "@rc-component/mutate-observer" "^1.0.0" - "@rc-component/tour" "~1.8.0" - "@rc-component/trigger" "^1.13.0" - classnames "^2.2.6" - copy-to-clipboard "^3.2.0" - dayjs "^1.11.1" - qrcode.react "^3.1.0" - rc-cascader "~3.12.0" - rc-checkbox "~3.1.0" - rc-collapse "~3.7.0" - rc-dialog "~9.1.0" - rc-drawer "~6.2.0" - rc-dropdown "~4.1.0" - rc-field-form "~1.34.0" - rc-image "~5.17.1" - rc-input "~1.0.4" - rc-input-number "~7.4.0" - rc-mentions "~2.3.0" - rc-menu "~9.9.2" - rc-motion "^2.7.3" - rc-notification "~5.0.4" - rc-pagination "~3.5.0" - rc-picker "~3.8.2" - rc-progress "~3.4.1" - rc-rate "~2.12.0" - rc-resize-observer "^1.2.0" - rc-segmented "~2.2.0" - rc-select "~14.5.0" - rc-slider "~10.1.0" - rc-steps "~6.0.0" - rc-switch "~4.1.0" - rc-table "~7.32.1" - rc-tabs "~12.7.0" - rc-textarea "~1.2.2" - rc-tooltip "~6.0.0" - rc-tree "~5.7.4" - rc-tree-select "~5.9.0" - rc-upload "~4.3.0" - rc-util "^5.32.0" - scroll-into-view-if-needed "^3.0.3" - throttle-debounce "^5.0.0" - -antd@^5.7.3: +antd@5.x, antd@^5.4.2, antd@^5.5.1, antd@^5.7.3: version "5.7.3" resolved "https://registry.npmmirror.com/antd/-/antd-5.7.3.tgz#3a1b84fa3987554931b9d974efe9cb7454ff1347" integrity sha512-7sQeE86XkUrYDIKGu/Qu7kl+NWYzkVSGbGqWGIbITHkFZorCyOvvqgF63fiWo/tp2lZWbEOO0Cm7IiYnoeWh9A== @@ -8046,6 +8150,7 @@ astral-regex@^1.0.0: astral-regex@^2.0.0: version "2.0.0" resolved "https://registry.npmmirror.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== astring@^1.8.0: version "1.8.6" @@ -8185,13 +8290,6 @@ axios@^0.26.1: dependencies: follow-redirects "^1.14.8" -axios@^0.27.2: - version "0.27.2" - resolved "https://registry.npmmirror.com/axios/-/axios-0.27.2.tgz#207658cc8621606e586c85db4b41a750e756d972" - dependencies: - follow-redirects "^1.14.9" - form-data "^4.0.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" @@ -8222,7 +8320,8 @@ babel-jest@^29.4.3: babel-jest@^29.6.1: version "29.6.1" - resolved "https://registry.npmjs.org/babel-jest/-/babel-jest-29.6.1.tgz#a7141ad1ed5ec50238f3cd36127636823111233a" + resolved "https://registry.npmmirror.com/babel-jest/-/babel-jest-29.6.1.tgz#a7141ad1ed5ec50238f3cd36127636823111233a" + integrity sha512-qu+3bdPEQC6KZSPz+4Fyjbga5OODNcp49j6GKzG1EKbkfyJBxEYGVUmVGpwCSeGouG52R4EgYMLb6p9YeEEQ4A== dependencies: "@jest/transform" "^29.6.1" "@types/babel__core" "^7.1.14" @@ -8794,6 +8893,13 @@ bundle-name@^3.0.0: dependencies: run-applescript "^5.0.0" +bundle-require@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/bundle-require/-/bundle-require-4.0.1.tgz#2cc1ad76428043d15e0e7f30990ee3d5404aa2e3" + integrity sha512-9NQkRHlNdNpDBGmLpngF3EFDcwodhMUuLz9PaWYciVcQF9SE4LFjM2DB/xV1Li5JiuDMv7ZUWuC3rGbqR0MAXQ== + dependencies: + load-tsconfig "^0.2.3" + busboy@^0.2.11: version "0.2.14" resolved "https://registry.npmmirror.com/busboy/-/busboy-0.2.14.tgz#6c2a622efcf47c57bbbe1e2a9c37ad36c7925453" @@ -8804,6 +8910,7 @@ busboy@^0.2.11: busboy@^1.0.0: version "1.6.0" resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893" + integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== dependencies: streamsearch "^1.1.0" @@ -8823,7 +8930,7 @@ bytes@3.1.2: version "3.1.2" resolved "https://registry.npmmirror.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" -cac@^6.7.14: +cac@^6.7.12, cac@^6.7.14: version "6.7.14" resolved "https://registry.npmmirror.com/cac/-/cac-6.7.14.tgz#804e1e6f506ee363cb0e3ccbb09cad5dd9870959" @@ -9033,7 +9140,7 @@ center-align@^0.1.1: align-text "^0.1.3" lazy-cache "^1.0.3" -cfb@^1.1.4, cfb@~1.2.1: +cfb@^1.1.4: version "1.2.2" resolved "https://registry.npmmirror.com/cfb/-/cfb-1.2.2.tgz#94e687628c700e5155436dac05f74e08df23bc44" dependencies: @@ -9078,6 +9185,7 @@ chalk@3.0.0, chalk@^3.0.0, chalk@~3.0.0: chalk@5.2.0: version "5.2.0" resolved "https://registry.npmmirror.com/chalk/-/chalk-5.2.0.tgz#249623b7d66869c673699fb66d65723e54dfcfb3" + integrity sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA== chalk@^1.1.1, chalk@^1.1.3: version "1.1.3" @@ -9242,7 +9350,8 @@ cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: 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" + resolved "https://registry.npmmirror.com/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz#6c370ab19f8a3394e318fe682686ec0ac684d107" + integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ== class-utils@^0.3.5: version "0.3.6" @@ -9308,6 +9417,7 @@ cli-tableau@^2.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" + integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== dependencies: slice-ansi "^3.0.0" string-width "^4.2.0" @@ -9315,6 +9425,7 @@ cli-truncate@^2.1.0: cli-truncate@^3.1.0: version "3.1.0" resolved "https://registry.npmmirror.com/cli-truncate/-/cli-truncate-3.1.0.tgz#3f23ab12535e3d73e839bb43e73c9de487db1389" + integrity sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA== dependencies: slice-ansi "^5.0.0" string-width "^5.0.0" @@ -9546,6 +9657,7 @@ colord@^2.9.1: colorette@^2.0.19: version "2.0.20" resolved "https://registry.npmmirror.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" + integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== colors@~0.6.0-1: version "0.6.2" @@ -9600,11 +9712,17 @@ commander@7, commander@^7.2.0: commander@^10.0.0: version "10.0.1" resolved "https://registry.npmmirror.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" + integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== 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" +commander@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" + integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== + commander@^8.3.0: version "8.3.0" resolved "https://registry.npmmirror.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" @@ -10012,7 +10130,7 @@ cosmiconfig@^7, cosmiconfig@^7.0.0, cosmiconfig@^7.0.1: path-type "^4.0.0" yaml "^1.10.0" -crc-32@^1.2.0, crc-32@~1.2.0, crc-32@~1.2.1: +crc-32@^1.2.0, crc-32@~1.2.0: version "1.2.2" resolved "https://registry.npmmirror.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff" @@ -11495,6 +11613,7 @@ dynamic-dedupe@^0.3.0: eastasianwidth@^0.2.0: version "0.2.0" resolved "https://registry.npmmirror.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== ecc-jsbn@~0.1.1: version "0.1.2" @@ -11552,7 +11671,8 @@ emittery@^0.12.1: emittery@^0.13.1: version "0.13.1" - resolved "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" + resolved "https://registry.npmmirror.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" + integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== emoji-regex@^7.0.1: version "7.0.3" @@ -11565,6 +11685,7 @@ emoji-regex@^8.0.0: emoji-regex@^9.2.2: version "9.2.2" resolved "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== emojis-list@^3.0.0: version "3.0.0" @@ -11883,6 +12004,34 @@ esbuild@^0.18.10: "@esbuild/win32-ia32" "0.18.11" "@esbuild/win32-x64" "0.18.11" +esbuild@^0.18.2: + version "0.18.13" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.18.13.tgz#59160add6c3420947fe008238140ed3480baf817" + integrity sha512-vhg/WR/Oiu4oUIkVhmfcc23G6/zWuEQKFS+yiosSHe4aN6+DQRXIfeloYGibIfVhkr4wyfuVsGNLr+sQU1rWWw== + optionalDependencies: + "@esbuild/android-arm" "0.18.13" + "@esbuild/android-arm64" "0.18.13" + "@esbuild/android-x64" "0.18.13" + "@esbuild/darwin-arm64" "0.18.13" + "@esbuild/darwin-x64" "0.18.13" + "@esbuild/freebsd-arm64" "0.18.13" + "@esbuild/freebsd-x64" "0.18.13" + "@esbuild/linux-arm" "0.18.13" + "@esbuild/linux-arm64" "0.18.13" + "@esbuild/linux-ia32" "0.18.13" + "@esbuild/linux-loong64" "0.18.13" + "@esbuild/linux-mips64el" "0.18.13" + "@esbuild/linux-ppc64" "0.18.13" + "@esbuild/linux-riscv64" "0.18.13" + "@esbuild/linux-s390x" "0.18.13" + "@esbuild/linux-x64" "0.18.13" + "@esbuild/netbsd-x64" "0.18.13" + "@esbuild/openbsd-x64" "0.18.13" + "@esbuild/sunos-x64" "0.18.13" + "@esbuild/win32-arm64" "0.18.13" + "@esbuild/win32-ia32" "0.18.13" + "@esbuild/win32-x64" "0.18.13" + escalade@^3.1.1: version "3.1.1" resolved "https://registry.npmmirror.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" @@ -12009,7 +12158,8 @@ eslint-plugin-node@^11.1.0: 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" + resolved "https://registry.npmmirror.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.0.0.tgz#6887780ed95f7708340ec79acfdf60c35b9be57a" + integrity sha512-AgaZCVuYDXHUGxj/ZGu1u8H8CYgDY3iG6w5kUFw4AzMVXzB7VvbKgYR4nATIN+OvUrghMbiDLeimVjVY5ilq3w== dependencies: prettier-linter-helpers "^1.0.0" synckit "^0.8.5" @@ -12045,6 +12195,7 @@ eslint-plugin-react@7.32.2: 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" + integrity sha512-qewL/8P34WkY8jAqdQxsiL82pDUeT7nhs8IsuXgfgnsEloKCT4miAV9N9kGtx7/KM9NH/NCGUE7Edt9iGxLXFw== dependencies: array-includes "^3.1.6" array.prototype.flatmap "^1.3.1" @@ -12109,6 +12260,7 @@ eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1: eslint@^8.45.0: version "8.45.0" resolved "https://registry.npmmirror.com/eslint/-/eslint-8.45.0.tgz#bab660f90d18e1364352c0a6b7c6db8edb458b78" + integrity sha512-pd8KSxiQpdYRfYa9Wufvdoct3ZPQQuVuU5O6scNgMuOMYuxvH0IGaYK0wUFjo4UYYQQCUndlXiMbnxopwvvTiw== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.4.0" @@ -12375,7 +12527,8 @@ expect@^29.0.0: expect@^29.6.1: version "29.6.1" - resolved "https://registry.npmjs.org/expect/-/expect-29.6.1.tgz#64dd1c8f75e2c0b209418f2b8d36a07921adfdf1" + resolved "https://registry.npmmirror.com/expect/-/expect-29.6.1.tgz#64dd1c8f75e2c0b209418f2b8d36a07921adfdf1" + integrity sha512-XEdDLonERCU1n9uR56/Stx9OqojaLAQtZf9PrCHH9Hl8YXiEIka3H4NXJ3NOIBmQJTg7+j7buh34PMHfJujc8g== dependencies: "@jest/expect-utils" "^29.6.1" "@types/node" "*" @@ -12478,7 +12631,7 @@ fast-glob@3.2.12: merge2 "^1.3.0" micromatch "^4.0.4" -fast-glob@^3.2.11, fast-glob@^3.2.12, fast-glob@^3.2.9: +fast-glob@3.3.0, 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" dependencies: @@ -12776,7 +12929,7 @@ follow-redirects@1.5.10: dependencies: debug "=3.1.0" -follow-redirects@^1.14.0, follow-redirects@^1.14.8, follow-redirects@^1.14.9: +follow-redirects@^1.14.0, follow-redirects@^1.14.8: version "1.15.2" resolved "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" @@ -13318,6 +13471,18 @@ glob-stream@^6.1.0: to-absolute-glob "^2.0.0" unique-stream "^2.0.2" +glob@7.1.6: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + 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" @@ -13381,7 +13546,7 @@ globalthis@^1.0.3: dependencies: define-properties "^1.1.3" -globby@^11.0.2, globby@^11.1.0: +globby@^11.0.2, globby@^11.0.3, globby@^11.1.0: version "11.1.0" resolved "https://registry.npmmirror.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" dependencies: @@ -14648,6 +14813,7 @@ is-fullwidth-code-point@^3.0.0: 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" + integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ== is-generator-fn@^2.0.0: version "2.1.0" @@ -15068,8 +15234,9 @@ istanbul-reports@^2.2.6: html-escaper "^2.0.0" istanbul-reports@^3.1.3: - version "3.1.5" - resolved "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz#cc9a6ab25cb25659810e4785ed9d9fb742578bae" + version "3.1.6" + resolved "https://registry.npmmirror.com/istanbul-reports/-/istanbul-reports-3.1.6.tgz#2544bcab4768154281a2f0870471902704ccaa1a" + integrity sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg== dependencies: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" @@ -15096,14 +15263,16 @@ jest-changed-files@^24.9.0: 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" + resolved "https://registry.npmmirror.com/jest-changed-files/-/jest-changed-files-29.5.0.tgz#e88786dca8bf2aa899ec4af7644e16d9dcf9b23e" + integrity sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag== dependencies: 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" + resolved "https://registry.npmmirror.com/jest-circus/-/jest-circus-29.6.1.tgz#861dab37e71a89907d1c0fabc54a0019738ed824" + integrity sha512-tPbYLEiBU4MYAL2XoZme/bgfUeotpDBd81lgHLCbDZZFaGmECk0b+/xejPFtmiBP87GgP/y4jplcRpbH+fgCzQ== dependencies: "@jest/environment" "^29.6.1" "@jest/expect" "^29.6.1" @@ -15171,7 +15340,8 @@ jest-cli@^24.8.0, jest-cli@^24.9.0: 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" + resolved "https://registry.npmmirror.com/jest-cli/-/jest-cli-29.6.1.tgz#99d9afa7449538221c71f358f0fdd3e9c6e89f72" + integrity sha512-607dSgTA4ODIN6go9w6xY3EYkyPFGicx51a69H7yfvt7lN53xNswEVLovq+E77VsTRi5fWprLH0yl4DJgE8Ing== dependencies: "@jest/core" "^29.6.1" "@jest/test-result" "^29.6.1" @@ -15227,7 +15397,8 @@ jest-config@^24.9.0: jest-config@^29.6.1: version "29.6.1" - resolved "https://registry.npmjs.org/jest-config/-/jest-config-29.6.1.tgz#d785344509065d53a238224c6cdc0ed8e2f2f0dd" + resolved "https://registry.npmmirror.com/jest-config/-/jest-config-29.6.1.tgz#d785344509065d53a238224c6cdc0ed8e2f2f0dd" + integrity sha512-XdjYV2fy2xYixUiV2Wc54t3Z4oxYPAELUzWnV6+mcbq0rh742X2p52pii5A3oeRzYjLnQxCsZmp0qpI6klE2cQ== dependencies: "@babel/core" "^7.11.6" "@jest/test-sequencer" "^29.6.1" @@ -15299,7 +15470,8 @@ jest-diff@^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" + resolved "https://registry.npmmirror.com/jest-diff/-/jest-diff-29.6.1.tgz#13df6db0a89ee6ad93c747c75c85c70ba941e545" + integrity sha512-FsNCvinvl8oVxpNLttNQX7FAq7vR+gMDGj90tiP7siWw1UdakWUGqrylpsYrpvj908IYckm5Y0Q7azNAozU1Kg== dependencies: chalk "^4.0.0" diff-sequences "^29.4.3" @@ -15323,7 +15495,8 @@ jest-docblock@^24.3.0: jest-docblock@^29.4.3: version "29.4.3" - resolved "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.4.3.tgz#90505aa89514a1c7dceeac1123df79e414636ea8" + resolved "https://registry.npmmirror.com/jest-docblock/-/jest-docblock-29.4.3.tgz#90505aa89514a1c7dceeac1123df79e414636ea8" + integrity sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg== dependencies: detect-newline "^3.0.0" @@ -15352,7 +15525,8 @@ jest-each@^24.9.0: jest-each@^29.6.1: version "29.6.1" - resolved "https://registry.npmjs.org/jest-each/-/jest-each-29.6.1.tgz#975058e5b8f55c6780beab8b6ab214921815c89c" + resolved "https://registry.npmmirror.com/jest-each/-/jest-each-29.6.1.tgz#975058e5b8f55c6780beab8b6ab214921815c89c" + integrity sha512-n5eoj5eiTHpKQCAVcNTT7DRqeUmJ01hsAL0Q1SMiBHcBcvTKDELixQOGMCpqhbIuTcfC4kMfSnpmDqRgRJcLNQ== dependencies: "@jest/types" "^29.6.1" chalk "^4.0.0" @@ -15393,7 +15567,8 @@ jest-environment-node@^24.9.0: 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" + resolved "https://registry.npmmirror.com/jest-environment-node/-/jest-environment-node-29.6.1.tgz#08a122dece39e58bc388da815a2166c58b4abec6" + integrity sha512-ZNIfAiE+foBog24W+2caIldl4Irh8Lx1PUhg/GZ0odM1d/h2qORAsejiFc7zb+SEmYPn1yDZzEDSU5PmDkmVLQ== dependencies: "@jest/environment" "^29.6.1" "@jest/fake-timers" "^29.6.1" @@ -15459,7 +15634,8 @@ jest-haste-map@^29.5.0: 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" + resolved "https://registry.npmmirror.com/jest-haste-map/-/jest-haste-map-29.6.1.tgz#62655c7a1c1b349a3206441330fb2dbdb4b63803" + integrity sha512-0m7f9PZXxOCk1gRACiVgX85knUKPKLPg4oRCjLoqIm9brTHXaorMA0JpmtmVkQiT8nmXyIVoZd/nnH1cfC33ig== dependencies: "@jest/types" "^29.6.1" "@types/graceful-fs" "^4.1.3" @@ -15523,7 +15699,8 @@ jest-leak-detector@^24.9.0: 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" + resolved "https://registry.npmmirror.com/jest-leak-detector/-/jest-leak-detector-29.6.1.tgz#66a902c81318e66e694df7d096a95466cb962f8e" + integrity sha512-OrxMNyZirpOEwkF3UHnIkAiZbtkBWiye+hhBweCHkVbCgyEy71Mwbb5zgeTNYWJBi1qgDVfPC1IwO9dVEeTLwQ== dependencies: jest-get-type "^29.4.3" pretty-format "^29.6.1" @@ -15555,7 +15732,8 @@ jest-matcher-utils@^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" + resolved "https://registry.npmmirror.com/jest-matcher-utils/-/jest-matcher-utils-29.6.1.tgz#6c60075d84655d6300c5d5128f46531848160b53" + integrity sha512-SLaztw9d2mfQQKHmJXKM0HCbl2PPVld/t9Xa6P9sgiExijviSp7TnZZpw2Fpt+OI3nwUO/slJbOfzfUMKKC5QA== dependencies: chalk "^4.0.0" jest-diff "^29.6.1" @@ -15600,7 +15778,8 @@ jest-message-util@^29.5.0: 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" + resolved "https://registry.npmmirror.com/jest-message-util/-/jest-message-util-29.6.1.tgz#d0b21d87f117e1b9e165e24f245befd2ff34ff8d" + integrity sha512-KoAW2zAmNSd3Gk88uJ56qXUWbFk787QKmjjJVOjtGFmmGSZgDBrlIL4AfQw1xyMYPNVD7dNInfIbur9B2rd/wQ== dependencies: "@babel/code-frame" "^7.12.13" "@jest/types" "^29.6.1" @@ -15634,7 +15813,8 @@ jest-mock@^24.9.0: jest-mock@^29.6.1: version "29.6.1" - resolved "https://registry.npmjs.org/jest-mock/-/jest-mock-29.6.1.tgz#049ee26aea8cbf54c764af649070910607316517" + resolved "https://registry.npmmirror.com/jest-mock/-/jest-mock-29.6.1.tgz#049ee26aea8cbf54c764af649070910607316517" + integrity sha512-brovyV9HBkjXAEdRooaTQK42n8usKoSRR3gihzUpYeV/vwqgSoNfrksO7UfSACnPmxasO/8TmHM3w9Hp3G1dgw== dependencies: "@jest/types" "^29.6.1" "@types/node" "*" @@ -15670,7 +15850,8 @@ jest-resolve-dependencies@^24.9.0: 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" + resolved "https://registry.npmmirror.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.6.1.tgz#b85b06670f987a62515bbf625d54a499e3d708f5" + integrity sha512-BbFvxLXtcldaFOhNMXmHRWx1nXQO5LoXiKSGQcA1LxxirYceZT6ch8KTE1bK3X31TNG/JbkI7OkS/ABexVahiw== dependencies: jest-regex-util "^29.4.3" jest-snapshot "^29.6.1" @@ -15694,7 +15875,8 @@ jest-resolve@^24.8.0, jest-resolve@^24.9.0: jest-resolve@^29.6.1: version "29.6.1" - resolved "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.6.1.tgz#4c3324b993a85e300add2f8609f51b80ddea39ee" + resolved "https://registry.npmmirror.com/jest-resolve/-/jest-resolve-29.6.1.tgz#4c3324b993a85e300add2f8609f51b80ddea39ee" + integrity sha512-AeRkyS8g37UyJiP9w3mmI/VXU/q8l/IH52vj/cDAyScDcemRbSBhfX/NMYIGilQgSVwsjxrCHf3XJu4f+lxCMg== dependencies: chalk "^4.0.0" graceful-fs "^4.2.9" @@ -15746,7 +15928,8 @@ jest-runner@^24.9.0: jest-runner@^29.6.1: version "29.6.1" - resolved "https://registry.npmjs.org/jest-runner/-/jest-runner-29.6.1.tgz#54557087e7972d345540d622ab5bfc3d8f34688c" + resolved "https://registry.npmmirror.com/jest-runner/-/jest-runner-29.6.1.tgz#54557087e7972d345540d622ab5bfc3d8f34688c" + integrity sha512-tw0wb2Q9yhjAQ2w8rHRDxteryyIck7gIzQE4Reu3JuOBpGp96xWgF0nY8MDdejzrLCZKDcp8JlZrBN/EtkQvPQ== dependencies: "@jest/console" "^29.6.1" "@jest/environment" "^29.6.1" @@ -15826,7 +16009,8 @@ jest-runtime@^24.9.0: jest-runtime@^29.6.1: version "29.6.1" - resolved "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.6.1.tgz#8a0fc9274ef277f3d70ba19d238e64334958a0dc" + resolved "https://registry.npmmirror.com/jest-runtime/-/jest-runtime-29.6.1.tgz#8a0fc9274ef277f3d70ba19d238e64334958a0dc" + integrity sha512-D6/AYOA+Lhs5e5il8+5pSLemjtJezUr+8zx+Sn8xlmOux3XOqx4d8l/2udBea8CRPqqrzhsKUsN/gBDE/IcaPQ== dependencies: "@jest/environment" "^29.6.1" "@jest/fake-timers" "^29.6.1" @@ -15902,7 +16086,8 @@ jest-snapshot@^24.9.0: jest-snapshot@^29.6.1: version "29.6.1" - resolved "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.6.1.tgz#0d083cb7de716d5d5cdbe80d598ed2fbafac0239" + resolved "https://registry.npmmirror.com/jest-snapshot/-/jest-snapshot-29.6.1.tgz#0d083cb7de716d5d5cdbe80d598ed2fbafac0239" + integrity sha512-G4UQE1QQ6OaCgfY+A0uR1W2AY0tGXUPQpoUClhWHq1Xdnx1H6JOrC2nH5lqnOEqaDgbHFgIwZ7bNq24HpB180A== dependencies: "@babel/core" "^7.11.6" "@babel/generator" "^7.7.2" @@ -15970,7 +16155,8 @@ jest-util@^24.9.0: 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" + resolved "https://registry.npmmirror.com/jest-util/-/jest-util-29.6.1.tgz#c9e29a87a6edbf1e39e6dee2b4689b8a146679cb" + integrity sha512-NRFCcjc+/uO3ijUVyNOQJluf8PtGCe/W6cix36+M3cTFgiYqFOOW5MgN4JOOcvbUhcKTYVd1CvHz/LWi8d16Mg== dependencies: "@jest/types" "^29.6.1" "@types/node" "*" @@ -16014,7 +16200,8 @@ jest-validate@^24.9.0: jest-validate@^29.6.1: version "29.6.1" - resolved "https://registry.npmjs.org/jest-validate/-/jest-validate-29.6.1.tgz#765e684af6e2c86dce950aebefbbcd4546d69f7b" + resolved "https://registry.npmmirror.com/jest-validate/-/jest-validate-29.6.1.tgz#765e684af6e2c86dce950aebefbbcd4546d69f7b" + integrity sha512-r3Ds69/0KCN4vx4sYAbGL1EVpZ7MSS0vLmd3gV78O+NAx3PDQQukRU5hNHPXlyqCgFY8XUk7EuTMLugh0KzahA== dependencies: "@jest/types" "^29.6.1" camelcase "^6.2.0" @@ -16048,7 +16235,8 @@ jest-watcher@^24.9.0: jest-watcher@^29.6.1: version "29.6.1" - resolved "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.6.1.tgz#7c0c43ddd52418af134c551c92c9ea31e5ec942e" + resolved "https://registry.npmmirror.com/jest-watcher/-/jest-watcher-29.6.1.tgz#7c0c43ddd52418af134c551c92c9ea31e5ec942e" + integrity sha512-d4wpjWTS7HEZPaaj8m36QiaP856JthRZkrgcIY/7ISoUWPIillrXM23WPboZVLbiwZBt4/qn2Jke84Sla6JhFA== dependencies: "@jest/test-result" "^29.6.1" "@jest/types" "^29.6.1" @@ -16107,7 +16295,8 @@ jest-worker@^29.5.0: jest-worker@^29.6.1: version "29.6.1" - resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-29.6.1.tgz#64b015f0e985ef3a8ad049b61fe92b3db74a5319" + resolved "https://registry.npmmirror.com/jest-worker/-/jest-worker-29.6.1.tgz#64b015f0e985ef3a8ad049b61fe92b3db74a5319" + integrity sha512-U+Wrbca7S8ZAxAe9L6nb6g8kPdia5hj32Puu5iOqBCMTMWFHXuK6dOV2IFrpedbTV8fjMFLdWNttQTBL6u2MRA== dependencies: "@types/node" "*" jest-util "^29.6.1" @@ -16132,7 +16321,8 @@ jest@^24.8.0: jest@^29.0.0: version "29.6.1" - resolved "https://registry.npmjs.org/jest/-/jest-29.6.1.tgz#74be1cb719c3abe439f2d94aeb18e6540a5b02ad" + resolved "https://registry.npmmirror.com/jest/-/jest-29.6.1.tgz#74be1cb719c3abe439f2d94aeb18e6540a5b02ad" + integrity sha512-Nirw5B4nn69rVUZtemCQhwxOBhm0nsp3hmtF4rzCeWD7BkjAXRIji7xWQfnTNbz9g0aVsBX6aZK3n+23LM6uDw== dependencies: "@jest/core" "^29.6.1" "@jest/types" "^29.6.1" @@ -16152,6 +16342,11 @@ jose@^4.14.1: version "4.14.4" resolved "https://registry.npmmirror.com/jose/-/jose-4.14.4.tgz#59e09204e2670c3164ee24cbfe7115c6f8bff9ca" +joycon@^3.0.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/joycon/-/joycon-3.1.1.tgz#bce8596d6ae808f8b68168f5fc69280996894f03" + integrity sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw== + jquery-mousewheel@^3.1.13: version "3.1.13" resolved "https://registry.npmmirror.com/jquery-mousewheel/-/jquery-mousewheel-3.1.13.tgz#06f0335f16e353a695e7206bf50503cb523a6ee5" @@ -16741,6 +16936,7 @@ lightningcss@1.19.0: 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" + integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== lines-and-columns@^1.1.6: version "1.2.4" @@ -16755,6 +16951,7 @@ linkify-it@^4.0.1: lint-staged@^13.2.3: version "13.2.3" resolved "https://registry.npmmirror.com/lint-staged/-/lint-staged-13.2.3.tgz#f899aad6c093473467e9c9e316e3c2d8a28f87a7" + integrity sha512-zVVEXLuQIhr1Y7R7YAWx4TZLdvuzk7DnmrsTNL0fax6Z3jrpFcas+vKbzxhhvp6TA55m1SQuWkpzI1qbfDZbAg== dependencies: chalk "5.2.0" cli-truncate "^3.1.0" @@ -16773,6 +16970,7 @@ lint-staged@^13.2.3: listr2@^5.0.7: version "5.0.8" resolved "https://registry.npmmirror.com/listr2/-/listr2-5.0.8.tgz#a9379ffeb4bd83a68931a65fb223a11510d6ba23" + integrity sha512-mC73LitKHj9w6v30nLNGPetZIlfpUniNSsxxrbaPcWOjDb92SHPzJPi/t+v1YC/lxKz/AJ9egOjww0qUuFxBpA== dependencies: cli-truncate "^2.1.0" colorette "^2.0.19" @@ -16801,6 +16999,11 @@ load-json-file@^6.2.0: strip-bom "^4.0.0" type-fest "^0.6.0" +load-tsconfig@^0.2.3: + version "0.2.5" + resolved "https://registry.yarnpkg.com/load-tsconfig/-/load-tsconfig-0.2.5.tgz#453b8cd8961bfb912dea77eb6c168fe8cca3d3a1" + integrity sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg== + loader-utils@^1.0.2, loader-utils@^1.1.0: version "1.4.2" resolved "https://registry.npmmirror.com/loader-utils/-/loader-utils-1.4.2.tgz#29a957f3a63973883eb684f10ffd3d151fec01a3" @@ -17012,6 +17215,7 @@ log-symbols@^4.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" + integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg== dependencies: ansi-escapes "^4.3.0" cli-cursor "^3.1.0" @@ -17069,7 +17273,8 @@ lowercase-keys@^2.0.0: lru-cache@8.0.5: version "8.0.5" - resolved "https://registry.npmmirror.com/lru-cache/-/lru-cache-8.0.5.tgz#983fe337f3e176667f8e567cfcce7cb064ea214e" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-8.0.5.tgz#983fe337f3e176667f8e567cfcce7cb064ea214e" + integrity sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA== lru-cache@^4.0.1, lru-cache@^4.1.1: version "4.1.5" @@ -18192,6 +18397,7 @@ multer@^1.4.2: 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" + integrity sha512-ywPWvcDMeH+z9gQq5qYHCCy+ethsk4goepZ45GLD63fOu0YcNecQxi64nDs3qluZB+murG3/D4dJ7+dGctcCQQ== dependencies: append-field "^1.0.0" busboy "^1.0.0" @@ -19620,6 +19826,7 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3, picomatc pidtree@^0.6.0: version "0.6.0" resolved "https://registry.npmmirror.com/pidtree/-/pidtree-0.6.0.tgz#90ad7b6d42d5841e69e0a2419ef38f8883aa057c" + integrity sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g== pidusage@^2.0.21: version "2.0.21" @@ -20064,6 +20271,14 @@ postcss-load-config@^3.0.0: lilconfig "^2.0.5" yaml "^1.10.2" +postcss-load-config@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-4.0.1.tgz#152383f481c2758274404e4962743191d73875bd" + integrity sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA== + dependencies: + lilconfig "^2.0.5" + yaml "^2.1.1" + postcss-logical@^5.0.4: version "5.0.4" resolved "https://registry.npmmirror.com/postcss-logical/-/postcss-logical-5.0.4.tgz#ec75b1ee54421acc04d5921576b7d8db6b0e6f73" @@ -20924,7 +21139,8 @@ punycode@^2.1.0, punycode@^2.1.1: pure-rand@^6.0.0: version "6.0.2" - resolved "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.2.tgz#a9c2ddcae9b68d736a8163036f088a2781c8b306" + resolved "https://registry.npmmirror.com/pure-rand/-/pure-rand-6.0.2.tgz#a9c2ddcae9b68d736a8163036f088a2781c8b306" + integrity sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ== q@^1.1.2, q@^1.5.1: version "1.5.1" @@ -21149,17 +21365,6 @@ rc-field-form@~1.34.0: async-validator "^4.1.0" rc-util "^5.32.2" -rc-image@~5.17.1: - version "5.17.1" - resolved "https://registry.npmmirror.com/rc-image/-/rc-image-5.17.1.tgz#71835b12c30fcef533de0dbbbaf13caa86454612" - dependencies: - "@babel/runtime" "^7.11.2" - "@rc-component/portal" "^1.0.2" - classnames "^2.2.6" - rc-dialog "~9.1.0" - rc-motion "^2.6.2" - rc-util "^5.0.6" - rc-image@~7.0.0: version "7.0.0" resolved "https://registry.npmmirror.com/rc-image/-/rc-image-7.0.0.tgz#cad2105dd1708304328bc9c178f7953cb0198403" @@ -21172,15 +21377,6 @@ rc-image@~7.0.0: rc-motion "^2.6.2" rc-util "^5.34.1" -rc-input-number@~7.4.0: - version "7.4.2" - resolved "https://registry.npmmirror.com/rc-input-number/-/rc-input-number-7.4.2.tgz#7c52d26b986461aa16e486d469dc0476d97c6ea3" - dependencies: - "@babel/runtime" "^7.10.1" - "@rc-component/mini-decimal" "^1.0.1" - classnames "^2.2.5" - rc-util "^5.28.0" - rc-input-number@~8.0.2: version "8.0.3" resolved "https://registry.npmmirror.com/rc-input-number/-/rc-input-number-8.0.3.tgz#208efac9937370d3c987979558e7e4882564af09" @@ -21192,14 +21388,6 @@ rc-input-number@~8.0.2: rc-input "~1.1.0" rc-util "^5.28.0" -rc-input@~1.0.0, rc-input@~1.0.4: - version "1.0.4" - resolved "https://registry.npmmirror.com/rc-input/-/rc-input-1.0.4.tgz#2f2c73c884f41e80685bb2eb7b9d5533e8540a77" - dependencies: - "@babel/runtime" "^7.11.1" - classnames "^2.2.1" - rc-util "^5.18.1" - rc-input@~1.1.0: version "1.1.0" resolved "https://registry.npmmirror.com/rc-input/-/rc-input-1.1.0.tgz#14951ad5b9d77b756b6ddb5088cca464a60c1454" @@ -21209,18 +21397,6 @@ rc-input@~1.1.0: classnames "^2.2.1" rc-util "^5.18.1" -rc-mentions@~2.3.0: - version "2.3.0" - resolved "https://registry.npmmirror.com/rc-mentions/-/rc-mentions-2.3.0.tgz#bb457c9664093be82baf33628b145f7c2bd49577" - dependencies: - "@babel/runtime" "^7.10.1" - "@rc-component/trigger" "^1.5.0" - classnames "^2.2.6" - rc-input "~1.0.0" - rc-menu "~9.9.0" - rc-textarea "~1.2.0" - rc-util "^5.22.5" - rc-mentions@~2.5.0: version "2.5.0" resolved "https://registry.npmmirror.com/rc-mentions/-/rc-mentions-2.5.0.tgz#8b936e497e0deb922f40df46e42efc3f596ec207" @@ -21245,17 +21421,6 @@ rc-menu@~9.10.0: rc-overflow "^1.3.1" rc-util "^5.27.0" -rc-menu@~9.9.0, rc-menu@~9.9.2: - version "9.9.2" - resolved "https://registry.npmmirror.com/rc-menu/-/rc-menu-9.9.2.tgz#733aa5b794bd801577726e448b6cfeda0436e1e5" - dependencies: - "@babel/runtime" "^7.10.1" - "@rc-component/trigger" "^1.6.2" - classnames "2.x" - rc-motion "^2.4.3" - rc-overflow "^1.2.8" - rc-util "^5.27.0" - rc-motion@^2.0.0, rc-motion@^2.0.1, rc-motion@^2.3.0, rc-motion@^2.3.4, rc-motion@^2.4.3, rc-motion@^2.4.4, rc-motion@^2.6.0, rc-motion@^2.6.1, rc-motion@^2.6.2, rc-motion@^2.7.3: version "2.7.3" resolved "https://registry.npmmirror.com/rc-motion/-/rc-motion-2.7.3.tgz#126155bb3e687174fb3b92fddade2835c963b04d" @@ -21273,7 +21438,7 @@ rc-notification@~5.0.4: rc-motion "^2.6.0" rc-util "^5.20.1" -rc-overflow@^1.0.0, rc-overflow@^1.2.8, rc-overflow@^1.3.1: +rc-overflow@^1.0.0, rc-overflow@^1.3.1: version "1.3.1" resolved "https://registry.npmmirror.com/rc-overflow/-/rc-overflow-1.3.1.tgz#03224cf90c66aa570eb0deeb4eff6cc96401e979" dependencies: @@ -21300,15 +21465,6 @@ rc-picker@~3.10.0: classnames "^2.2.1" rc-util "^5.30.0" -rc-picker@~3.8.2: - version "3.8.2" - resolved "https://registry.npmmirror.com/rc-picker/-/rc-picker-3.8.2.tgz#1dc377a628cd94416e03974483daa36940a411b0" - dependencies: - "@babel/runtime" "^7.10.1" - "@rc-component/trigger" "^1.5.0" - classnames "^2.2.1" - rc-util "^5.30.0" - rc-progress@~3.4.1: version "3.4.2" resolved "https://registry.npmmirror.com/rc-progress/-/rc-progress-3.4.2.tgz#f8df9ee95e790490171ab6b31bf07303cdc79980" @@ -21375,14 +21531,6 @@ rc-slider@~10.1.0: classnames "^2.2.5" rc-util "^5.27.0" -rc-steps@~6.0.0: - version "6.0.0" - resolved "https://registry.npmmirror.com/rc-steps/-/rc-steps-6.0.0.tgz#f7148f8097d5d135f19b96c1b4f4b50ad6093753" - dependencies: - "@babel/runtime" "^7.16.7" - classnames "^2.2.3" - rc-util "^5.16.1" - rc-steps@~6.0.1: version "6.0.1" resolved "https://registry.npmmirror.com/rc-steps/-/rc-steps-6.0.1.tgz#c2136cd0087733f6d509209a84a5c80dc29a274d" @@ -21422,28 +21570,6 @@ rc-tabs@^12.5.6, rc-tabs@~12.9.0: rc-resize-observer "^1.0.0" rc-util "^5.16.0" -rc-tabs@~12.7.0: - version "12.7.1" - resolved "https://registry.npmmirror.com/rc-tabs/-/rc-tabs-12.7.1.tgz#6bfd11cc7b2bec08600eb0aba41966b230c38906" - dependencies: - "@babel/runtime" "^7.11.2" - classnames "2.x" - rc-dropdown "~4.1.0" - rc-menu "~9.9.0" - rc-motion "^2.6.2" - rc-resize-observer "^1.0.0" - rc-util "^5.16.0" - -rc-textarea@~1.2.0, rc-textarea@~1.2.2: - version "1.2.3" - resolved "https://registry.npmmirror.com/rc-textarea/-/rc-textarea-1.2.3.tgz#bdaea2931ad2571583e9e27e627b8a9b5dbe7de7" - dependencies: - "@babel/runtime" "^7.10.1" - classnames "^2.2.1" - rc-input "~1.0.4" - rc-resize-observer "^1.0.0" - rc-util "^5.27.0" - rc-textarea@~1.3.0, rc-textarea@~1.3.3: version "1.3.4" resolved "https://registry.npmmirror.com/rc-textarea/-/rc-textarea-1.3.4.tgz#e77baf2202ac8f7e34a50ec9e15dd1dcb1501455" @@ -21483,7 +21609,7 @@ rc-tree-select@~5.9.0: rc-tree "~5.7.0" rc-util "^5.16.1" -rc-tree@^5.7.3, rc-tree@~5.7.0, rc-tree@~5.7.4: +rc-tree@^5.7.3, rc-tree@~5.7.0: version "5.7.8" resolved "https://registry.npmmirror.com/rc-tree/-/rc-tree-5.7.8.tgz#778599d9a1052f25e2588dba7fddaf66257651b5" dependencies: @@ -21776,6 +21902,7 @@ react-router-dom@6.3.0, react-router-dom@^6.11.2: react-router@6.14.1, react-router@6.3.0, react-router@^6.11.2: version "6.14.2" resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.14.2.tgz#1f60994d8c369de7b8ba7a78d8f7ec23df76b300" + integrity sha512-09Zss2dE2z+T1D03IheqAFtK4UzQyX8nFPWx6jkwdYzGLXd5ie06A6ezS2fO6zJfEb/SpG6UocN2O1hfD+2urQ== dependencies: "@remix-run/router" "1.7.2" @@ -22401,7 +22528,8 @@ resolve-url@^0.2.1: resolve.exports@^2.0.0: version "2.0.2" - resolved "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" + resolved "https://registry.npmmirror.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" + integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== resolve@1.1.7, resolve@~1.1.6: version "1.1.7" @@ -22472,6 +22600,7 @@ reusify@^1.0.4: rfdc@^1.3.0: version "1.3.0" resolved "https://registry.npmmirror.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" + integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== rgb-regex@^1.0.1: version "1.0.1" @@ -22633,6 +22762,13 @@ rollup@^0.25.8: minimist "^1.2.0" source-map-support "^0.3.2" +rollup@^3.2.5: + version "3.26.3" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.26.3.tgz#bbc8818cadd0aebca348dbb3d68d296d220967b8" + integrity sha512-7Tin0C8l86TkpcMtXvQu6saWH93nhG3dGQ1/+l5V2TDMceTxO7kDiK6GzbfLWNNxqJXm591PcEZUozZm51ogwQ== + optionalDependencies: + fsevents "~2.3.2" + rollup@^3.20.2, rollup@^3.21.0: version "3.26.0" resolved "https://registry.npmmirror.com/rollup/-/rollup-3.26.0.tgz#9f2e0316a4ca641911cefd8515c562a9124e6130" @@ -22699,6 +22835,7 @@ rxjs@^6.4.0, rxjs@^6.6.0: 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" + integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== dependencies: tslib "^2.1.0" @@ -22878,6 +23015,7 @@ semver@7.3.7: semver@^6.3.1: version "6.3.1" resolved "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== 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" @@ -22888,6 +23026,7 @@ semver@^7.1.1, semver@^7.1.3, semver@^7.2, semver@^7.3.2, semver@^7.3.4, semver@ semver@^7.5.3, semver@^7.5.4: version "7.5.4" resolved "https://registry.npmmirror.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" + integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== dependencies: lru-cache "^6.0.0" @@ -23103,6 +23242,7 @@ slash@^4.0.0: slice-ansi@^3.0.0: version "3.0.0" resolved "https://registry.npmmirror.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787" + integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ== dependencies: ansi-styles "^4.0.0" astral-regex "^2.0.0" @@ -23111,6 +23251,7 @@ slice-ansi@^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" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== dependencies: ansi-styles "^4.0.0" astral-regex "^2.0.0" @@ -23119,6 +23260,7 @@ slice-ansi@^4.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" + integrity sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ== dependencies: ansi-styles "^6.0.0" is-fullwidth-code-point "^4.0.0" @@ -23263,7 +23405,8 @@ source-map-resolve@^0.6.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" + resolved "https://registry.npmmirror.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" + integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== dependencies: buffer-from "^1.0.0" source-map "^0.6.0" @@ -23291,6 +23434,13 @@ source-map@0.1.32: dependencies: amdefine ">=0.0.4" +source-map@0.8.0-beta.0: + version "0.8.0-beta.0" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.8.0-beta.0.tgz#d4c1bb42c3f7ee925f005927ba10709e0d1d1f11" + integrity sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA== + dependencies: + whatwg-url "^7.0.0" + source-map@^0.5.0, source-map@^0.5.1, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1: version "0.5.7" resolved "https://registry.npmmirror.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" @@ -23565,6 +23715,7 @@ streamsearch@0.1.2: streamsearch@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" + integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== strict-uri-encode@^2.0.0: version "2.0.0" @@ -23573,6 +23724,7 @@ strict-uri-encode@^2.0.0: 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" + integrity sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q== string-convert@^0.2.0: version "0.2.1" @@ -23630,6 +23782,7 @@ string-width@^3.0.0, string-width@^3.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" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== dependencies: eastasianwidth "^0.2.0" emoji-regex "^9.2.2" @@ -23722,6 +23875,7 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: strip-ansi@^7.0.1: version "7.1.0" resolved "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" + integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== dependencies: ansi-regex "^6.0.1" @@ -23845,6 +23999,19 @@ stylis@^4.0.13, stylis@^4.1.2: version "4.3.0" resolved "https://registry.npmmirror.com/stylis/-/stylis-4.3.0.tgz#abe305a669fc3d8777e10eefcfc73ad861c5588c" +sucrase@^3.20.3: + version "3.33.0" + resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.33.0.tgz#092c8d2f99a191f2cd9f1fdd52113772f4241f6e" + integrity sha512-ARGC7vbufOHfpvyGcZZXFaXCMZ9A4fffOGC5ucOW7+WHDGlAe8LJdf3Jts1sWhDeiI1RSWrKy5Hodl+JWGdW2A== + dependencies: + "@jridgewell/gen-mapping" "^0.3.2" + commander "^4.0.0" + glob "7.1.6" + lines-and-columns "^1.1.6" + mz "^2.7.0" + pirates "^4.0.1" + ts-interface-checker "^0.1.9" + superagent@^8.0.5: version "8.0.9" resolved "https://registry.npmmirror.com/superagent/-/superagent-8.0.9.tgz#2c6fda6fadb40516515f93e9098c0eb1602e0535" @@ -24433,14 +24600,21 @@ trough@^2.0.0: 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" + integrity sha512-lC/RGlPmwdrIBFTX59wwNzqh7aR2otPNPR/5brHZm/XKFYKsfqxihXUe9pU3JI+3vGkl+vyCoNNnPhJn3aLK1A== ts-dedent@^2.2.0: version "2.2.0" resolved "https://registry.npmmirror.com/ts-dedent/-/ts-dedent-2.2.0.tgz#39e4bd297cd036292ae2394eb3412be63f563bb5" +ts-interface-checker@^0.1.9: + version "0.1.13" + resolved "https://registry.yarnpkg.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699" + integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== + ts-jest@^29.0.0, 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" @@ -24552,6 +24726,26 @@ tsscmp@1.0.6: version "1.0.6" resolved "https://registry.npmmirror.com/tsscmp/-/tsscmp-1.0.6.tgz#85b99583ac3589ec4bfef825b5000aa911d605eb" +tsup@7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/tsup/-/tsup-7.1.0.tgz#11369762b68032da118a714a38d5a1d26ac45293" + integrity sha512-mazl/GRAk70j8S43/AbSYXGgvRP54oQeX8Un4iZxzATHt0roW0t6HYDVZIXMw0ZQIpvr1nFMniIVnN5186lW7w== + dependencies: + bundle-require "^4.0.0" + cac "^6.7.12" + chokidar "^3.5.1" + debug "^4.3.1" + esbuild "^0.18.2" + execa "^5.0.0" + globby "^11.0.3" + joycon "^3.0.1" + postcss-load-config "^4.0.1" + resolve-from "^5.0.0" + rollup "^3.2.5" + source-map "0.8.0-beta.0" + sucrase "^3.20.3" + tree-kill "^1.2.2" + tsutils@^3.21.0: version "3.21.0" resolved "https://registry.npmmirror.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" @@ -24561,6 +24755,7 @@ tsutils@^3.21.0: tsx@^3.12.2, tsx@^3.12.7: version "3.12.7" resolved "https://registry.yarnpkg.com/tsx/-/tsx-3.12.7.tgz#b3b8b0fc79afc8260d1e14f9e995616c859a91e9" + integrity sha512-C2Ip+jPmqKd1GWVQDvz/Eyc6QJbGfE7NrR3fx5BpEHMZsEHoIxHL1j+lKdGobr8ovEyqeNkPLSKp6SCSOt7gmw== dependencies: "@esbuild-kit/cjs-loader" "^2.4.2" "@esbuild-kit/core-utils" "^3.0.0" @@ -25270,7 +25465,8 @@ v8-compile-cache@2.3.0: 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" + resolved "https://registry.npmmirror.com/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz#1b83ed4e397f58c85c266a570fc2558b5feb9265" + integrity sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA== dependencies: "@jridgewell/trace-mapping" "^0.3.12" "@types/istanbul-lib-coverage" "^2.0.1" @@ -25406,6 +25602,11 @@ vite-node@0.33.0: picocolors "^1.0.0" vite "^3.0.0 || ^4.0.0" +vite-plugin-css-injected-by-js@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/vite-plugin-css-injected-by-js/-/vite-plugin-css-injected-by-js-3.2.1.tgz#c23e10e28a1afb78414fa3c162ac8a253cd1a6a4" + integrity sha512-8UQWy7tcmgwkaUKYfbj/8GOeAD0RPG2tdetAGg7WikWC8IEtNrovs8RRuLjFqdRqORT1XxchBB5tPl6xO/H95g== + vite@4.3.1: version "4.3.1" resolved "https://registry.npmmirror.com/vite/-/vite-4.3.1.tgz#9badb1377f995632cdcf05f32103414db6fbb95a" @@ -25875,18 +26076,6 @@ xlsx@^0.17.0: wmf "~1.0.1" word "~0.3.0" -xlsx@^0.18.5: - version "0.18.5" - resolved "https://registry.npmmirror.com/xlsx/-/xlsx-0.18.5.tgz#16711b9113c848076b8a177022799ad356eba7d0" - dependencies: - adler-32 "~1.3.0" - cfb "~1.2.1" - codepage "~1.15.0" - crc-32 "~1.2.1" - ssf "~0.11.2" - wmf "~1.0.1" - word "~0.3.0" - xml-crypto@^3.0.1: version "3.1.0" resolved "https://registry.npmmirror.com/xml-crypto/-/xml-crypto-3.1.0.tgz#6baeb46c0f3687a9fd8afd4c7be71c6e6e9accc4" @@ -25999,9 +26188,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: +yaml@^2.1.1, yaml@^2.2.2: version "2.3.1" resolved "https://registry.npmmirror.com/yaml/-/yaml-2.3.1.tgz#02fe0975d23cd441242aa7204e09fc28ac2ac33b" + integrity sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ== yamljs@0.3.0: version "0.3.0"