diff --git a/packages/core/app/src/index.ts b/packages/core/app/src/index.ts index d3776c07b..372e2d56e 100644 --- a/packages/core/app/src/index.ts +++ b/packages/core/app/src/index.ts @@ -8,5 +8,5 @@ getConfig() }); }) .catch((e) => { - console.error(e); + // console.error(e); }); diff --git a/packages/core/cli/src/commands/postinstall.js b/packages/core/cli/src/commands/postinstall.js index 1cf1425e6..c9612c7dc 100644 --- a/packages/core/cli/src/commands/postinstall.js +++ b/packages/core/cli/src/commands/postinstall.js @@ -3,7 +3,7 @@ const { run, isDev, isPackageValid, generatePlaywrightPath } = require('../util' const { resolve } = require('path'); const { existsSync } = require('fs'); const { readFile, writeFile } = require('fs').promises; -const { createStoragePluginsSymlink } = require('@nocobase/utils/plugin-symlink'); +const { createStoragePluginsSymlink, createDevPluginsSymlink } = require('@nocobase/utils/plugin-symlink'); /** * @param {Command} cli @@ -13,12 +13,14 @@ module.exports = (cli) => { cli .command('postinstall') .allowUnknownOption() - .action(async () => { + .option('--skip-umi') + .action(async (options) => { generatePlaywrightPath(true); await createStoragePluginsSymlink(); if (!isDev()) { return; } + await createDevPluginsSymlink(); const cwd = process.cwd(); if (!existsSync(resolve(cwd, '.env')) && existsSync(resolve(cwd, '.env.example'))) { const content = await readFile(resolve(cwd, '.env.example'), 'utf-8'); @@ -31,11 +33,13 @@ module.exports = (cli) => { if (!isPackageValid('umi')) { return; } - run('umi', ['generate', 'tmp'], { - stdio: 'pipe', - env: { - APP_ROOT: `${APP_PACKAGE_ROOT}/client`, - }, - }); + if (!options.skipUmi) { + run('umi', ['generate', 'tmp'], { + stdio: 'pipe', + env: { + APP_ROOT: `${APP_PACKAGE_ROOT}/client`, + }, + }); + } }); }; diff --git a/packages/core/cli/src/plugin-generator.js b/packages/core/cli/src/plugin-generator.js index a84876ed3..b6097fca1 100644 --- a/packages/core/cli/src/plugin-generator.js +++ b/packages/core/cli/src/plugin-generator.js @@ -29,9 +29,10 @@ async function getProjectVersion() { class PluginGenerator extends Generator { constructor(options) { - const { context = {}, ...opts } = options; + const { log, context = {}, ...opts } = options; super(opts); this.context = context; + this.log = log || console.log; } async getContext() { @@ -51,20 +52,19 @@ class PluginGenerator extends Generator { const { name } = this.context; const target = resolve(process.cwd(), 'packages/plugins/', name); if (existsSync(target)) { - console.log(chalk.red(`[${name}] plugin already exists.`)); + this.log(chalk.red(`[${name}] plugin already exists.`)); return; } - console.log('Creating plugin'); + this.log('Creating plugin'); this.copyDirectory({ target, context: await this.getContext(), path: join(__dirname, '../templates/plugin'), }); - console.log(''); + this.log(''); genTsConfigPaths(); - execa.sync('yarn', ['install'], { shell: true, stdio: 'inherit' }); - // execa.sync('yarn', ['build', `plugins/${name}`], { shell: true, stdio: 'inherit' }); - console.log(`The plugin folder is in ${chalk.green(`packages/plugins/${name}`)}`); + execa.sync('yarn', ['postinstall', '--skip-umi'], { shell: true, stdio: 'inherit' }); + this.log(`The plugin folder is in ${chalk.green(`packages/plugins/${name}`)}`); } } diff --git a/packages/core/cli/templates/plugin/src/server/plugin.ts.tpl b/packages/core/cli/templates/plugin/src/server/plugin.ts.tpl index 5bcd24c01..25af55c01 100644 --- a/packages/core/cli/templates/plugin/src/server/plugin.ts.tpl +++ b/packages/core/cli/templates/plugin/src/server/plugin.ts.tpl @@ -1,13 +1,13 @@ -import { InstallOptions, Plugin } from '@nocobase/server'; +import { Plugin } from '@nocobase/server'; export class {{{pascalCaseName}}}Server extends Plugin { - afterAdd() {} + async afterAdd() {} - beforeLoad() {} + async beforeLoad() {} async load() {} - async install(options?: InstallOptions) {} + async install() {} async afterEnable() {} diff --git a/packages/core/client/src/modules/plugin-manager/__e2e__/pluginManager.test.ts b/packages/core/client/src/modules/plugin-manager/__e2e__/pluginManager.test.ts index e7aa88891..ce8c1be74 100644 --- a/packages/core/client/src/modules/plugin-manager/__e2e__/pluginManager.test.ts +++ b/packages/core/client/src/modules/plugin-manager/__e2e__/pluginManager.test.ts @@ -11,7 +11,7 @@ async function waitForModalToBeHidden(page) { }); } -test.describe('add plugin in front', () => { +test.describe.skip('add plugin in front', () => { test.slow(); test('add plugin from npm registry, then remove plugin', async ({ page, mockPage }) => { await mockPage().goto(); @@ -49,7 +49,7 @@ test.describe('add plugin in front', () => { test.skip('add plugin from file URL', async ({ page, mockPage }) => {}); }); -test.describe('remove plugin', () => { +test.describe.skip('remove plugin', () => { test.slow(); test('remove plugin, then add plugin', async ({ page, mockPage }) => { await mockPage().goto(); @@ -95,7 +95,7 @@ test.describe('remove plugin', () => { }); }); -test.describe('enable & disable plugin', () => { +test.describe.skip('enable & disable plugin', () => { test.slow(); test('enable plugin', async ({ page, mockPage }) => { await mockPage().goto(); diff --git a/packages/core/create-nocobase-app/templates/app/jest.config.js b/packages/core/create-nocobase-app/templates/app/jest.config.js deleted file mode 100644 index d5deb30b4..000000000 --- a/packages/core/create-nocobase-app/templates/app/jest.config.js +++ /dev/null @@ -1,33 +0,0 @@ -const { pathsToModuleNameMapper } = require('ts-jest/utils'); -const { compilerOptions } = require('./tsconfig.paths.json'); -const { resolve } = require('path'); - -module.exports = { - rootDir: process.cwd(), - collectCoverage: false, - verbose: true, - testEnvironment: 'jsdom', - preset: 'ts-jest', - testMatch: ['**/__tests__/**/*.test.[jt]s?(x)'], - setupFilesAfterEnv: [require.resolve('jest-dom/extend-expect'), resolve(__dirname, './jest.setup.ts')], - moduleNameMapper: pathsToModuleNameMapper(compilerOptions.paths, { - prefix: '/', - }), - globals: { - 'ts-jest': { - babelConfig: false, - tsconfig: './tsconfig.jest.json', - diagnostics: false, - }, - }, - modulePathIgnorePatterns: ['/esm/', '/es/', '/dist/', '/lib/'], - coveragePathIgnorePatterns: [ - '/node_modules/', - '/__tests__/', - '/esm/', - '/lib/', - 'package.json', - '/demo/', - 'package-lock.json', - ], -}; diff --git a/packages/core/create-nocobase-app/templates/app/jest.setup.ts b/packages/core/create-nocobase-app/templates/app/jest.setup.ts deleted file mode 100644 index 18b597d98..000000000 --- a/packages/core/create-nocobase-app/templates/app/jest.setup.ts +++ /dev/null @@ -1,12 +0,0 @@ -import prettyFormat from 'pretty-format'; - -global['prettyFormat'] = prettyFormat; - -jest.setTimeout(300000); - -(() => { - const spy = jest.spyOn(console, 'error'); - afterAll(() => { - spy.mockRestore(); - }); -})(); diff --git a/packages/core/create-nocobase-app/templates/app/package.json.tpl b/packages/core/create-nocobase-app/templates/app/package.json.tpl index dbdb2923e..9253a0f23 100644 --- a/packages/core/create-nocobase-app/templates/app/package.json.tpl +++ b/packages/core/create-nocobase-app/templates/app/package.json.tpl @@ -17,6 +17,7 @@ "build": "nocobase build", "test": "nocobase test", "e2e": "nocobase e2e", + "tar": "nocobase tar", "postinstall": "nocobase postinstall", "lint": "eslint ." }, diff --git a/packages/core/create-nocobase-app/templates/app/tsconfig.jest.json b/packages/core/create-nocobase-app/templates/app/tsconfig.jest.json deleted file mode 100644 index 2669a1272..000000000 --- a/packages/core/create-nocobase-app/templates/app/tsconfig.jest.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "target": "ES6", - "module": "CommonJS" - }, - "exclude": [ - "./packages/*/esm", - "./packages/*/es", - "./packages/*/dist", - "./packages/*/lib" - ] -} \ No newline at end of file diff --git a/packages/core/database/src/database.ts b/packages/core/database/src/database.ts index d53f0718f..4f3e75a3c 100644 --- a/packages/core/database/src/database.ts +++ b/packages/core/database/src/database.ts @@ -775,14 +775,16 @@ export class Database extends EventEmitter implements AsyncEmitter { const authenticate = async () => { try { await this.sequelize.authenticate(others); - this.logger.info('Connection has been established successfully.', { method: 'auth' }); + this.logger.info('connection has been established successfully.', { method: 'auth' }); } catch (error) { - this.logger.warn(`Attempt ${attemptNumber}/${retry}: Unable to connect to the database: ${error.message}`, { + this.logger.warn(`attempt ${attemptNumber}/${retry}: Unable to connect to the database: ${error.message}`, { method: 'auth', }); const nextDelay = startingDelay * Math.pow(timeMultiple, attemptNumber - 1); - this.logger.warn(`Will retry in ${nextDelay}ms...`, { method: 'auth' }); attemptNumber++; + if (attemptNumber < (retry as number)) { + this.logger.warn(`will retry in ${nextDelay}ms...`, { method: 'auth' }); + } throw error; // Re-throw the error so that backoff can catch and handle it } }; diff --git a/packages/core/server/src/app-supervisor.ts b/packages/core/server/src/app-supervisor.ts index 8a9903a2f..aefab0684 100644 --- a/packages/core/server/src/app-supervisor.ts +++ b/packages/core/server/src/app-supervisor.ts @@ -264,9 +264,17 @@ export class AppSupervisor extends EventEmitter implements AsyncEmitter { if ( maintainingStatus && - ['install', 'upgrade', 'pm.add', 'pm.update', 'pm.enable', 'pm.disable', 'pm.remove', 'restore'].includes( - maintainingStatus.command.name, - ) && + [ + 'install', + 'upgrade', + 'refresh', + 'restore', + 'pm.add', + 'pm.update', + 'pm.enable', + 'pm.disable', + 'pm.remove', + ].includes(maintainingStatus.command.name) && !startOptions.recover ) { this.setAppStatus(app.name, 'running', { diff --git a/packages/core/server/src/application.ts b/packages/core/server/src/application.ts index b01f1b121..2ea1a2cc2 100644 --- a/packages/core/server/src/application.ts +++ b/packages/core/server/src/application.ts @@ -706,11 +706,20 @@ export class Application exten } async stop(options: any = {}) { - this.log.debug('stop app...', { method: 'stop' }); + const log = + options.logging === false + ? { + debug() {}, + warn() {}, + info() {}, + error() {}, + } + : this.log; + log.debug('stop app...', { method: 'stop' }); this.setMaintainingMessage('stopping app...'); if (this.stopped) { - this.log.warn(`app is stopped`, { method: 'stop' }); + log.warn(`app is stopped`, { method: 'stop' }); return; } @@ -720,11 +729,11 @@ export class Application exten // close database connection // silent if database already closed if (!this.db.closed()) { - this.log.info(`close db`, { method: 'stop' }); + log.info(`close db`, { method: 'stop' }); await this.db.close(); } } catch (e) { - this.log.error(e.message, { method: 'stop', err: e.stack }); + log.error(e.message, { method: 'stop', err: e.stack }); } if (this.cacheManager) { @@ -738,7 +747,7 @@ export class Application exten await this.emitAsync('afterStop', this, options); this.stopped = true; - this.log.info(`app has stopped`, { method: 'stop' }); + log.info(`app has stopped`, { method: 'stop' }); this._started = false; } diff --git a/packages/core/server/src/commands/index.ts b/packages/core/server/src/commands/index.ts index a19732986..4a0fd5709 100644 --- a/packages/core/server/src/commands/index.ts +++ b/packages/core/server/src/commands/index.ts @@ -6,6 +6,7 @@ import dbSync from './db-sync'; import destroy from './destroy'; import install from './install'; import pm from './pm'; +import refresh from './refresh'; import restart from './restart'; import start from './start'; import stop from './stop'; @@ -25,6 +26,7 @@ export function registerCli(app: Application) { stop(app); destroy(app); start(app); + refresh(app); // development only with @nocobase/cli app.command('build').argument('[packages...]'); diff --git a/packages/core/server/src/commands/install.ts b/packages/core/server/src/commands/install.ts index eca453c89..6d68f4a41 100644 --- a/packages/core/server/src/commands/install.ts +++ b/packages/core/server/src/commands/install.ts @@ -7,6 +7,7 @@ export default (app: Application) => { .auth() .option('-f, --force') .option('-c, --clean') + .option('--lang ') .action(async (options) => { await app.install(options); const reinstall = options.clean || options.force; diff --git a/packages/core/server/src/commands/pm.ts b/packages/core/server/src/commands/pm.ts index 0cfe79e25..740c4ad4b 100644 --- a/packages/core/server/src/commands/pm.ts +++ b/packages/core/server/src/commands/pm.ts @@ -6,10 +6,10 @@ export default (app: Application) => { const pm = app.command('pm'); pm.command('create') - .ipc() .arguments('plugin') - .action(async (plugin) => { - await app.pm.create(plugin); + .option('--force-recreate') + .action(async (plugin, options) => { + await app.pm.create(plugin, options); }); pm.command('add') @@ -71,10 +71,13 @@ export default (app: Application) => { }); pm.command('remove') - .ipc() - .preload() + .auth() + // .ipc() + // .preload() .arguments('') - .action(async (plugins) => { - await app.pm.remove(plugins); + .option('--force') + .option('--remove-dir') + .action(async (plugins, options) => { + await app.pm.remove(plugins, options); }); }; diff --git a/packages/core/server/src/commands/refresh.ts b/packages/core/server/src/commands/refresh.ts new file mode 100644 index 000000000..c5a81c07a --- /dev/null +++ b/packages/core/server/src/commands/refresh.ts @@ -0,0 +1,13 @@ +import Application from '../application'; + +export default (app: Application) => { + app + .command('refresh') + .ipc() + .action(async (cliArgs) => { + await app.restart({ + cliArgs, + }); + app.log.info('refreshing...'); + }); +}; diff --git a/packages/core/server/src/gateway/index.ts b/packages/core/server/src/gateway/index.ts index 6e76d2189..a8ce1613c 100644 --- a/packages/core/server/src/gateway/index.ts +++ b/packages/core/server/src/gateway/index.ts @@ -313,7 +313,7 @@ export class Gateway extends EventEmitter { const response: any = await ipcClient.write({ type: 'passCliArgv', payload: { argv: process.argv } }); ipcClient.close(); - if (response.type !== 'error' || response.payload.message !== 'Not handle by ipc server') { + if (!['error', 'not_found'].includes(response.type)) { return; } } @@ -332,11 +332,16 @@ export class Gateway extends EventEmitter { }) .then(async () => { if (!(await mainApp.isStarted())) { - await mainApp.stop(); + await mainApp.stop({ logging: false }); } }) - .catch((e) => { - console.error(e); + .catch(async (e) => { + if (e.code !== 'commander.helpDisplayed') { + mainApp.log.error(e); + } + if (!(await mainApp.isStarted())) { + await mainApp.stop({ logging: false }); + } }); } @@ -431,4 +436,13 @@ export class Gateway extends EventEmitter { this.server?.close(); this.wsServer?.close(); } + + static async getIPCSocketClient() { + const socketPath = resolve(process.cwd(), process.env.SOCKET_PATH || 'storage/gateway.sock'); + try { + return await IPCSocketClient.getConnection(socketPath); + } catch (error) { + return false; + } + } } diff --git a/packages/core/server/src/gateway/ipc-socket-client.ts b/packages/core/server/src/gateway/ipc-socket-client.ts index a6605f4b5..df3cebe7d 100644 --- a/packages/core/server/src/gateway/ipc-socket-client.ts +++ b/packages/core/server/src/gateway/ipc-socket-client.ts @@ -1,7 +1,7 @@ -import net from 'net'; -import * as events from 'events'; -import xpipe from 'xpipe'; import { Logger, createConsoleLogger } from '@nocobase/logger'; +import * as events from 'events'; +import net from 'net'; +import xpipe from 'xpipe'; export const writeJSON = (socket: net.Socket, data: object) => { socket.write(JSON.stringify(data) + '\n', 'utf8'); @@ -47,6 +47,8 @@ export class IPCSocketClient extends events.EventEmitter { async handleServerMessage({ reqId, type, payload }) { switch (type) { + case 'not_found': + break; case 'error': this.logger.error({ reqId, message: `${payload.message}|${payload.stack}` }); break; diff --git a/packages/core/server/src/gateway/ipc-socket-server.ts b/packages/core/server/src/gateway/ipc-socket-server.ts index 7677e0ad5..828f6475c 100644 --- a/packages/core/server/src/gateway/ipc-socket-server.ts +++ b/packages/core/server/src/gateway/ipc-socket-server.ts @@ -1,10 +1,10 @@ -import net from 'net'; +import { randomUUID } from 'crypto'; import fs from 'fs'; +import net from 'net'; import path from 'path'; import xpipe from 'xpipe'; import { AppSupervisor } from '../app-supervisor'; import { writeJSON } from './ipc-socket-client'; -import { randomUUID } from 'crypto'; export class IPCSocketServer { socketServer: net.Server; @@ -45,10 +45,10 @@ export class IPCSocketServer { const dataObj = JSON.parse(message); IPCSocketServer.handleClientMessage({ reqId, ...dataObj }) - .then(() => { + .then((result) => { writeJSON(c, { reqId, - type: 'success', + type: result === false ? 'not_found' : 'success', }); }) .catch((err) => { @@ -73,14 +73,33 @@ export class IPCSocketServer { } static async handleClientMessage({ reqId, type, payload }) { - console.log(`cli received message ${type}`); + if (type === 'appReady') { + const status = await new Promise((resolve, reject) => { + let status: string; + const max = 300; + let count = 0; + const timer = setInterval(async () => { + status = AppSupervisor.getInstance().getAppStatus('main'); + if (status === 'running') { + clearInterval(timer); + resolve(status); + } + if (count++ > max) { + reject('error'); + } + }, 500); + }); + console.log('status', status); + return status; + } + // console.log(`cli received message ${type}`); if (type === 'passCliArgv') { const argv = payload.argv; const mainApp = await AppSupervisor.getInstance().getApp('main'); if (!mainApp.cli.hasCommand(argv[2])) { - console.log('passCliArgv', argv[2]); + // console.log('passCliArgv', argv[2]); await mainApp.pm.loadCommands(); } const cli = mainApp.cli; @@ -89,7 +108,8 @@ export class IPCSocketServer { from: 'node', }) ) { - throw new Error('Not handle by ipc server'); + mainApp.log.debug('Not handle by ipc server'); + return false; } return mainApp.runAsCLI(argv, { diff --git a/packages/core/server/src/plugin-manager/plugin-manager.ts b/packages/core/server/src/plugin-manager/plugin-manager.ts index 1783ed7af..d83cffa7d 100644 --- a/packages/core/server/src/plugin-manager/plugin-manager.ts +++ b/packages/core/server/src/plugin-manager/plugin-manager.ts @@ -24,6 +24,12 @@ import { updatePluginByCompressedFileUrl, } from './utils'; +export const sleep = async (timeout = 0) => { + return new Promise((resolve) => { + setTimeout(resolve, timeout); + }); +}; + export interface PluginManagerOptions { app: Application; plugins?: any[]; @@ -184,12 +190,15 @@ export class PluginManager { } } - async create(pluginName: string) { - console.log('creating...'); + async create(pluginName: string, options?: { forceRecreate?: boolean }) { const createPlugin = async (name) => { + const pluginDir = resolve(process.cwd(), 'packages/plugins', name); + if (options?.forceRecreate) { + await fs.promises.rm(pluginDir, { recursive: true, force: true }); + } const { PluginGenerator } = require('@nocobase/cli/src/plugin-generator'); const generator = new PluginGenerator({ - cwd: resolve(process.cwd(), name), + cwd: process.cwd(), args: {}, context: { name, @@ -198,13 +207,38 @@ export class PluginManager { await generator.run(); }; await createPlugin(pluginName); - await this.repository.create({ + try { + await this.app.db.auth({ retry: 1 }); + const installed = await this.app.isInstalled(); + if (!installed) { + console.log(`yarn pm add ${pluginName}`); + return; + } + } catch (error) { + return; + } + this.app.log.info('attempt to add the plugin to the app'); + let packageName: string; + try { + packageName = await PluginManager.getPackageName(pluginName); + } catch (error) { + packageName = pluginName; + } + const json = await PluginManager.getPackageJson(packageName); + this.app.log.info(`add plugin [${packageName}]`, { + name: pluginName, + packageName: packageName, + version: json.version, + }); + await this.repository.updateOrCreate({ values: { name: pluginName, - packageName: pluginName, - version: '0.1.0', + packageName: packageName, + version: json.version, }, + filterKeys: ['name'], }); + await sleep(1000); await tsxRerunning(); } @@ -268,12 +302,7 @@ export class PluginManager { } async loadCommands() { - // await this.initPlugins(); - // for (const [P, plugin] of this.getPlugins()) { - // await plugin.loadCommands(); - // } - // return; - this.app.log.info('load commands'); + this.app.log.debug('load commands'); const items = await this.repository.find({ filter: { enabled: true, @@ -524,40 +553,70 @@ export class PluginManager { } } - async remove(name: string | string[]) { + async remove(name: string | string[], options?: { removeDir?: boolean; force?: boolean }) { const pluginNames = _.castArray(name); - for (const pluginName of pluginNames) { - const plugin = this.get(pluginName); - if (!plugin) { - continue; - } - if (plugin.enabled) { - throw new Error(`${pluginName} plugin is enabled`); - } - await plugin.beforeRemove(); - } - await this.repository.destroy({ - filter: { - name: pluginNames, - }, + const records = pluginNames.map((name) => { + return { + name: name, + packageName: name, + }; }); - const plugins: Plugin[] = []; - for (const pluginName of pluginNames) { - const plugin = this.get(pluginName); - if (!plugin) { - continue; + const removeDir = async () => { + await Promise.all( + records.map(async (plugin) => { + const dir = resolve(process.env.NODE_MODULES_PATH, plugin.packageName); + try { + const realDir = await fs.promises.realpath(dir); + this.app.log.debug(`rm -rf ${realDir}`); + return fs.promises.rm(realDir, { force: true, recursive: true }); + } catch (error) { + return false; + } + }), + ); + await execa('yarn', ['nocobase', 'postinstall']); + }; + if (options?.force) { + await this.repository.destroy({ + filter: { + name: pluginNames, + }, + }); + } else { + await this.app.load(); + for (const pluginName of pluginNames) { + const plugin = this.get(pluginName); + if (!plugin) { + continue; + } + if (plugin.enabled) { + throw new Error(`plugin is enabled [${pluginName}]`); + } + await plugin.beforeRemove(); + } + await this.repository.destroy({ + filter: { + name: pluginNames, + }, + }); + const plugins: Plugin[] = []; + for (const pluginName of pluginNames) { + const plugin = this.get(pluginName); + if (!plugin) { + continue; + } + plugins.push(plugin); + this.del(pluginName); + await plugin.afterRemove(); + } + if (await this.app.isStarted()) { + await this.app.tryReloadOrRestart(); } - plugins.push(plugin); - this.del(pluginName); - // if (plugin.options.type && plugin.options.packageName) { - // await removePluginPackage(plugin.options.packageName); - // } } - await this.app.reload(); - for (const plugin of plugins) { - await plugin.afterRemove(); + if (options?.removeDir) { + await removeDir(); } - await this.app.emitStartedEvent(); + await execa('yarn', ['nocobase', 'refresh']); } async loadOne(plugin: Plugin) { diff --git a/packages/core/utils/plugin-symlink.d.ts b/packages/core/utils/plugin-symlink.d.ts index fb53fddae..4fecd0eb2 100644 --- a/packages/core/utils/plugin-symlink.d.ts +++ b/packages/core/utils/plugin-symlink.d.ts @@ -3,3 +3,4 @@ export declare function fsExists(path: any): Promise; export declare function createStoragePluginSymLink(pluginName: any): Promise; export declare function createStoragePluginsSymlink(): Promise; export declare function createDevPluginSymLink(pluginName: any): Promise; +export declare function createDevPluginsSymlink(): Promise; diff --git a/packages/core/utils/plugin-symlink.js b/packages/core/utils/plugin-symlink.js index 5eb8cad0c..f067400bb 100644 --- a/packages/core/utils/plugin-symlink.js +++ b/packages/core/utils/plugin-symlink.js @@ -85,3 +85,14 @@ async function createDevPluginSymLink(pluginName) { } exports.createDevPluginSymLink = createDevPluginSymLink; + +async function createDevPluginsSymlink() { + const storagePluginsPath = resolve(process.cwd(), 'packages/plugins'); + if (!(await fsExists(storagePluginsPath))) { + return; + } + const pluginNames = await getStoragePluginNames(storagePluginsPath); + await Promise.all(pluginNames.map((pluginName) => createDevPluginSymLink(pluginName))); +} + +exports.createDevPluginsSymlink = createDevPluginsSymlink; diff --git a/packages/plugins/@nocobase/plugin-action-bulk-edit/src/server/plugin.ts b/packages/plugins/@nocobase/plugin-action-bulk-edit/src/server/plugin.ts index 3348ddd97..fdf463f46 100644 --- a/packages/plugins/@nocobase/plugin-action-bulk-edit/src/server/plugin.ts +++ b/packages/plugins/@nocobase/plugin-action-bulk-edit/src/server/plugin.ts @@ -1,19 +1,5 @@ -import { InstallOptions, Plugin } from '@nocobase/server'; +import { Plugin } from '@nocobase/server'; -export class PluginActionBulkEditServer extends Plugin { - afterAdd() {} - - beforeLoad() {} - - async load() {} - - async install(options?: InstallOptions) {} - - async afterEnable() {} - - async afterDisable() {} - - async remove() {} -} +export class PluginActionBulkEditServer extends Plugin {} export default PluginActionBulkEditServer; diff --git a/packages/plugins/@nocobase/plugin-api-doc/src/server/server.ts b/packages/plugins/@nocobase/plugin-api-doc/src/server/server.ts index ed7c428c7..8ffad423c 100644 --- a/packages/plugins/@nocobase/plugin-api-doc/src/server/server.ts +++ b/packages/plugins/@nocobase/plugin-api-doc/src/server/server.ts @@ -8,7 +8,7 @@ export default class APIDoc extends Plugin { super(app, options); this.swagger = new SwaggerManager(this); } - beforeLoad() {} + async beforeLoad() {} async load() { this.app.resource({ name: 'swagger', diff --git a/packages/plugins/@nocobase/plugin-sample-add-custom-charts/.npmignore b/packages/plugins/@nocobase/plugin-sample-add-custom-charts/.npmignore deleted file mode 100644 index 65f5e8779..000000000 --- a/packages/plugins/@nocobase/plugin-sample-add-custom-charts/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -/node_modules -/src diff --git a/packages/plugins/@nocobase/plugin-sample-add-custom-charts/README.md b/packages/plugins/@nocobase/plugin-sample-add-custom-charts/README.md deleted file mode 100644 index a387f6f98..000000000 --- a/packages/plugins/@nocobase/plugin-sample-add-custom-charts/README.md +++ /dev/null @@ -1 +0,0 @@ -# @nocobase/plugin-sample-add-custom-chart diff --git a/packages/plugins/@nocobase/plugin-sample-add-custom-charts/client.d.ts b/packages/plugins/@nocobase/plugin-sample-add-custom-charts/client.d.ts deleted file mode 100644 index 6c459cbac..000000000 --- a/packages/plugins/@nocobase/plugin-sample-add-custom-charts/client.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './dist/client'; -export { default } from './dist/client'; diff --git a/packages/plugins/@nocobase/plugin-sample-add-custom-charts/client.js b/packages/plugins/@nocobase/plugin-sample-add-custom-charts/client.js deleted file mode 100644 index b6e3be70e..000000000 --- a/packages/plugins/@nocobase/plugin-sample-add-custom-charts/client.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./dist/client/index.js'); diff --git a/packages/plugins/@nocobase/plugin-sample-add-custom-charts/package.json b/packages/plugins/@nocobase/plugin-sample-add-custom-charts/package.json deleted file mode 100644 index e6f46bd0f..000000000 --- a/packages/plugins/@nocobase/plugin-sample-add-custom-charts/package.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "@nocobase/plugin-sample-add-custom-charts", - "version": "0.19.0-alpha.3", - "main": "dist/server/index.js", - "devDependencies": { - "echarts": "^5.4.3", - "echarts-for-react": "^3.0.2" - }, - "peerDependencies": { - "@nocobase/client": "0.x", - "@nocobase/plugin-data-visualization": "0.x", - "@nocobase/server": "0.x", - "@nocobase/test": "0.x" - }, - "gitHead": "979a9c59a98c61a2287dd847580746a9b597cbde" -} diff --git a/packages/plugins/@nocobase/plugin-sample-add-custom-charts/server.d.ts b/packages/plugins/@nocobase/plugin-sample-add-custom-charts/server.d.ts deleted file mode 100644 index c41081ddc..000000000 --- a/packages/plugins/@nocobase/plugin-sample-add-custom-charts/server.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './dist/server'; -export { default } from './dist/server'; diff --git a/packages/plugins/@nocobase/plugin-sample-add-custom-charts/server.js b/packages/plugins/@nocobase/plugin-sample-add-custom-charts/server.js deleted file mode 100644 index 972842039..000000000 --- a/packages/plugins/@nocobase/plugin-sample-add-custom-charts/server.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./dist/server/index.js'); diff --git a/packages/plugins/@nocobase/plugin-sample-add-custom-charts/src/client/echarts/bar.ts b/packages/plugins/@nocobase/plugin-sample-add-custom-charts/src/client/echarts/bar.ts deleted file mode 100644 index a9fcfdeca..000000000 --- a/packages/plugins/@nocobase/plugin-sample-add-custom-charts/src/client/echarts/bar.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { RenderProps } from '@nocobase/plugin-data-visualization/client'; -import { ECharts } from './echarts'; - -export class Bar extends ECharts { - constructor() { - super({ - name: 'bar', - title: 'Bar Chart', - series: { type: 'bar' }, - }); - this.config = [ - { - property: 'yField', - title: 'xField', - }, - { - property: 'xField', - title: 'yField', - }, - 'seriesField', - ]; - } - - getProps({ data, general, advanced, fieldProps }: RenderProps) { - const props = super.getProps({ data, general, advanced, fieldProps }); - const xLabel = fieldProps[general.xField]?.label; - const yLabel = fieldProps[general.yField]?.label; - props.xAxis = { - ...props.xAxis, - type: 'value', - name: yLabel, - }; - props.yAxis = { - ...props.yAxis, - type: 'category', - name: xLabel, - }; - return props; - } -} diff --git a/packages/plugins/@nocobase/plugin-sample-add-custom-charts/src/client/echarts/echarts.ts b/packages/plugins/@nocobase/plugin-sample-add-custom-charts/src/client/echarts/echarts.ts deleted file mode 100644 index 5108724cd..000000000 --- a/packages/plugins/@nocobase/plugin-sample-add-custom-charts/src/client/echarts/echarts.ts +++ /dev/null @@ -1,100 +0,0 @@ -import { Chart, ChartProps, ChartType, RenderProps } from '@nocobase/plugin-data-visualization/client'; -import { ReactECharts } from './react-echarts'; -import { EChartsReactProps } from 'echarts-for-react'; -import deepmerge from 'deepmerge'; -import './transform'; - -export class ECharts extends Chart { - series: any; - - constructor({ - name, - title, - series, - config, - }: { - name: string; - title: string; - series: any; - config?: ChartProps['config']; - }) { - super({ - name, - title, - component: ReactECharts, - config: ['xField', 'yField', 'seriesField', ...(config || [])], - }); - this.series = series; - } - - init: ChartType['init'] = (fields, { measures, dimensions }) => { - const { xField, yField, seriesField } = this.infer(fields, { measures, dimensions }); - return { - general: { - xField: xField?.value, - yField: yField?.value, - seriesField: seriesField?.value, - }, - }; - }; - - getProps({ data, general, advanced, fieldProps }: RenderProps): EChartsReactProps['option'] { - const { xField, yField, seriesField, ...others } = general; - const xLabel = fieldProps[xField]?.label; - const yLabel = fieldProps[yField]?.label; - let seriesName = [yLabel]; - if (seriesField) { - seriesName = Array.from(new Set(data.map((row: any) => row[seriesField]))).map((value) => value || 'null'); - } - return deepmerge( - { - legend: { - data: seriesName, - }, - tooltip: { - data: seriesName, - }, - dataset: [ - { - dimensions: [xField, ...(seriesField ? seriesName : [yField])], - source: data, - }, - { - transform: [ - { - type: 'data-visualization:transform', - config: { fieldProps }, - }, - { - type: 'data-visualization:toSeries', - config: { xField, yField, seriesField }, - }, - ], - }, - ], - series: seriesName.map((name) => ({ - name, - datasetIndex: 1, - ...this.series, - ...others, - })), - xAxis: { - name: xLabel, - type: 'category', - }, - yAxis: { - name: yLabel, - }, - animation: false, - }, - advanced, - ); - } - - getReference() { - return { - title: 'ECharts', - link: 'https://echarts.apache.org/en/option.html', - }; - } -} diff --git a/packages/plugins/@nocobase/plugin-sample-add-custom-charts/src/client/echarts/index.ts b/packages/plugins/@nocobase/plugin-sample-add-custom-charts/src/client/echarts/index.ts deleted file mode 100644 index 6060b3448..000000000 --- a/packages/plugins/@nocobase/plugin-sample-add-custom-charts/src/client/echarts/index.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { Bar } from './bar'; -import { ECharts } from './echarts'; -import { Pie } from './pie'; - -export default [ - new ECharts({ - name: 'line', - title: 'Line Chart', - series: { type: 'line' }, - }), - new ECharts({ - name: 'column', - title: 'Column Chart', - series: { type: 'bar' }, - }), - new ECharts({ - name: 'area', - title: 'Area Chart', - series: { type: 'line', areaStyle: {} }, - }), - new Bar(), - new Pie(), -]; diff --git a/packages/plugins/@nocobase/plugin-sample-add-custom-charts/src/client/echarts/pie.ts b/packages/plugins/@nocobase/plugin-sample-add-custom-charts/src/client/echarts/pie.ts deleted file mode 100644 index fbd0cba81..000000000 --- a/packages/plugins/@nocobase/plugin-sample-add-custom-charts/src/client/echarts/pie.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { ChartType, RenderProps } from '@nocobase/plugin-data-visualization/client'; -import { ECharts } from './echarts'; -import deepmerge from 'deepmerge'; - -export class Pie extends ECharts { - constructor() { - super({ - name: 'pie', - title: 'Pie Chart', - series: { type: 'pie' }, - }); - this.config = [ - { - property: 'field', - name: 'angleField', - title: 'angleField', - required: true, - }, - { - property: 'field', - name: 'colorField', - title: 'colorField', - required: true, - }, - ]; - } - - init: ChartType['init'] = (fields, { measures, dimensions }) => { - const { xField, yField } = this.infer(fields, { measures, dimensions }); - return { - general: { - colorField: xField?.value, - angleField: yField?.value, - }, - }; - }; - - getProps({ data, general, advanced, fieldProps }: RenderProps) { - return deepmerge( - { - legend: {}, - tooltip: {}, - dataset: [ - { - dimensions: [general.colorField, general.angleField], - source: data, - }, - { - transform: { - type: 'data-visualization:transform', - config: { fieldProps }, - }, - }, - ], - series: { - name: fieldProps[general.angleField]?.label, - datasetIndex: 1, - ...this.series, - }, - }, - advanced, - ); - } -} diff --git a/packages/plugins/@nocobase/plugin-sample-add-custom-charts/src/client/echarts/react-echarts.tsx b/packages/plugins/@nocobase/plugin-sample-add-custom-charts/src/client/echarts/react-echarts.tsx deleted file mode 100644 index 9abc142d8..000000000 --- a/packages/plugins/@nocobase/plugin-sample-add-custom-charts/src/client/echarts/react-echarts.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import React, { useEffect } from 'react'; -import ReactEChartsComponent, { EChartsInstance, EChartsReactProps } from 'echarts-for-react'; - -export const ReactECharts = (props: EChartsReactProps['option']) => { - const echartRef = React.useRef(); - useEffect(() => { - echartRef.current?.resize(); - }); - return (echartRef.current = e)} />; -}; diff --git a/packages/plugins/@nocobase/plugin-sample-add-custom-charts/src/client/echarts/transform.ts b/packages/plugins/@nocobase/plugin-sample-add-custom-charts/src/client/echarts/transform.ts deleted file mode 100644 index bfd077b3e..000000000 --- a/packages/plugins/@nocobase/plugin-sample-add-custom-charts/src/client/echarts/transform.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { RenderProps } from '@nocobase/plugin-data-visualization/client'; -import * as echarts from 'echarts'; - -echarts.registerTransform({ - type: 'data-visualization:transform', - transform: function (params: any) { - const fieldProps = params.config.fieldProps as RenderProps['fieldProps']; - const data = params.upstream.cloneRawData(); - return { - data: data.map((row: any) => { - Object.entries(fieldProps).forEach(([key, props]) => { - if (props.transformer) { - row[key] = props.transformer(row[key]); - } - }); - return row; - }), - }; - } as any, -}); - -echarts.registerTransform({ - type: 'data-visualization:toSeries', - transform: function (params: any) { - const data = params.upstream.cloneRawData(); - const { xField, yField, seriesField } = params.config || {}; - if (!seriesField) { - return { data }; - } - const dataMap = data.reduce((map: any, row: any) => { - if (!map[row[xField]]) { - map[row[xField]] = { [row[seriesField]]: row[yField] }; - return map; - } - map[row[xField]][row[seriesField]] = row[yField]; - return map; - }, {}); - const result = Object.entries(dataMap).map(([key, value]: any) => { - return { - [xField]: key, - ...value, - }; - }); - return { - data: result, - }; - }, -}); diff --git a/packages/plugins/@nocobase/plugin-sample-add-custom-charts/src/client/index.tsx b/packages/plugins/@nocobase/plugin-sample-add-custom-charts/src/client/index.tsx deleted file mode 100644 index 8e8501c6c..000000000 --- a/packages/plugins/@nocobase/plugin-sample-add-custom-charts/src/client/index.tsx +++ /dev/null @@ -1,19 +0,0 @@ -import { Plugin } from '@nocobase/client'; -import DataVisualizationPlugin from '@nocobase/plugin-data-visualization/client'; -import echarts from './echarts'; - -export class PluginSampleAddCustomChartClient extends Plugin { - async afterAdd() { - // await this.app.pm.add() - } - - async beforeLoad() { - const plugin = this.app.pm.get(DataVisualizationPlugin); - plugin.charts.addGroup('ECharts', echarts); - } - - // You can get and modify the app instance here - async load() {} -} - -export default PluginSampleAddCustomChartClient; diff --git a/packages/plugins/@nocobase/plugin-sample-add-custom-charts/src/index.ts b/packages/plugins/@nocobase/plugin-sample-add-custom-charts/src/index.ts deleted file mode 100644 index 7e74612df..000000000 --- a/packages/plugins/@nocobase/plugin-sample-add-custom-charts/src/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './server'; -export { default } from './server'; diff --git a/packages/plugins/@nocobase/plugin-sample-add-custom-charts/src/server/collections/.gitkeep b/packages/plugins/@nocobase/plugin-sample-add-custom-charts/src/server/collections/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/plugins/@nocobase/plugin-sample-add-custom-charts/src/server/index.ts b/packages/plugins/@nocobase/plugin-sample-add-custom-charts/src/server/index.ts deleted file mode 100644 index b68aea57f..000000000 --- a/packages/plugins/@nocobase/plugin-sample-add-custom-charts/src/server/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from './plugin'; diff --git a/packages/plugins/@nocobase/plugin-sample-add-custom-charts/src/server/plugin.ts b/packages/plugins/@nocobase/plugin-sample-add-custom-charts/src/server/plugin.ts deleted file mode 100644 index d2b550a8d..000000000 --- a/packages/plugins/@nocobase/plugin-sample-add-custom-charts/src/server/plugin.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { InstallOptions, Plugin } from '@nocobase/server'; - -export class PluginSampleAddCustomChartServer extends Plugin { - afterAdd() {} - - beforeLoad() {} - - async load() {} - - async install(options?: InstallOptions) {} - - async afterEnable() {} - - async afterDisable() {} - - async remove() {} -} - -export default PluginSampleAddCustomChartServer; diff --git a/packages/plugins/@nocobase/plugin-sample-command/.npmignore b/packages/plugins/@nocobase/plugin-sample-command/.npmignore deleted file mode 100644 index c593fe9df..000000000 --- a/packages/plugins/@nocobase/plugin-sample-command/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -/node_modules -/src \ No newline at end of file diff --git a/packages/plugins/@nocobase/plugin-sample-command/README.md b/packages/plugins/@nocobase/plugin-sample-command/README.md deleted file mode 100644 index c3e6dad7a..000000000 --- a/packages/plugins/@nocobase/plugin-sample-command/README.md +++ /dev/null @@ -1,20 +0,0 @@ -# Command sample - -## Register - -```ts -yarn pm add sample-command -``` - -## Activate - -```bash -yarn pm enable sample-command -``` - -## Try command - -```bash -mkdir -p ./storage/backups -yarn nocobase export -o ./storage/backups users -``` diff --git a/packages/plugins/@nocobase/plugin-sample-command/client.d.ts b/packages/plugins/@nocobase/plugin-sample-command/client.d.ts deleted file mode 100644 index 6c459cbac..000000000 --- a/packages/plugins/@nocobase/plugin-sample-command/client.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './dist/client'; -export { default } from './dist/client'; diff --git a/packages/plugins/@nocobase/plugin-sample-command/client.js b/packages/plugins/@nocobase/plugin-sample-command/client.js deleted file mode 100644 index b6e3be70e..000000000 --- a/packages/plugins/@nocobase/plugin-sample-command/client.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./dist/client/index.js'); diff --git a/packages/plugins/@nocobase/plugin-sample-command/package.json b/packages/plugins/@nocobase/plugin-sample-command/package.json deleted file mode 100644 index 6f6592807..000000000 --- a/packages/plugins/@nocobase/plugin-sample-command/package.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "name": "@nocobase/plugin-sample-command", - "version": "0.19.0-alpha.3", - "main": "./dist/server/index.js", - "peerDependencies": { - "@nocobase/client": "0.x", - "@nocobase/server": "0.x", - "@nocobase/test": "0.x" - }, - "gitHead": "979a9c59a98c61a2287dd847580746a9b597cbde" -} diff --git a/packages/plugins/@nocobase/plugin-sample-command/server.d.ts b/packages/plugins/@nocobase/plugin-sample-command/server.d.ts deleted file mode 100644 index c41081ddc..000000000 --- a/packages/plugins/@nocobase/plugin-sample-command/server.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './dist/server'; -export { default } from './dist/server'; diff --git a/packages/plugins/@nocobase/plugin-sample-command/server.js b/packages/plugins/@nocobase/plugin-sample-command/server.js deleted file mode 100644 index 972842039..000000000 --- a/packages/plugins/@nocobase/plugin-sample-command/server.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./dist/server/index.js'); diff --git a/packages/plugins/@nocobase/plugin-sample-command/src/client/index.tsx b/packages/plugins/@nocobase/plugin-sample-command/src/client/index.tsx deleted file mode 100644 index 3b0e8aece..000000000 --- a/packages/plugins/@nocobase/plugin-sample-command/src/client/index.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import { Plugin } from '@nocobase/client'; - -class DemoPlugin extends Plugin { - async load() {} -} - -export default DemoPlugin; diff --git a/packages/plugins/@nocobase/plugin-sample-command/src/index.ts b/packages/plugins/@nocobase/plugin-sample-command/src/index.ts deleted file mode 100644 index 7e74612df..000000000 --- a/packages/plugins/@nocobase/plugin-sample-command/src/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './server'; -export { default } from './server'; diff --git a/packages/plugins/@nocobase/plugin-sample-command/src/server/actions/.gitkeep b/packages/plugins/@nocobase/plugin-sample-command/src/server/actions/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/plugins/@nocobase/plugin-sample-command/src/server/collections/.gitkeep b/packages/plugins/@nocobase/plugin-sample-command/src/server/collections/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/plugins/@nocobase/plugin-sample-command/src/server/index.ts b/packages/plugins/@nocobase/plugin-sample-command/src/server/index.ts deleted file mode 100644 index 61c16a636..000000000 --- a/packages/plugins/@nocobase/plugin-sample-command/src/server/index.ts +++ /dev/null @@ -1,43 +0,0 @@ -import * as fs from 'fs/promises'; -import path from 'path'; - -import { InstallOptions, Plugin } from '@nocobase/server'; - -export class CommandPlugin extends Plugin { - beforeLoad() { - // TODO - } - - async load() { - this.app - .command('export') - .option('-o, --output-dir') - .action(async (options, ...collections) => { - const { outputDir = path.join(process.env.PWD, 'storage') } = options; - await collections.reduce( - (promise, collection) => - promise.then(async () => { - if (!this.db.hasCollection(collection)) { - console.warn('No such collection:', collection); - return; - } - - const repo = this.db.getRepository(collection); - const data = repo.find(); - await fs.writeFile(path.join(outputDir, `${collection}.json`), JSON.stringify(data), { mode: 0o644 }); - }), - Promise.resolve(), - ); - }); - } - - async disable() { - // this.app.resourcer.removeResource('testHello'); - } - - async install(options: InstallOptions) { - // TODO - } -} - -export default CommandPlugin; diff --git a/packages/plugins/@nocobase/plugin-sample-command/src/server/models/.gitkeep b/packages/plugins/@nocobase/plugin-sample-command/src/server/models/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/plugins/@nocobase/plugin-sample-command/src/server/repositories/.gitkeep b/packages/plugins/@nocobase/plugin-sample-command/src/server/repositories/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/plugins/@nocobase/plugin-sample-custom-block/.npmignore b/packages/plugins/@nocobase/plugin-sample-custom-block/.npmignore deleted file mode 100644 index c593fe9df..000000000 --- a/packages/plugins/@nocobase/plugin-sample-custom-block/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -/node_modules -/src \ No newline at end of file diff --git a/packages/plugins/@nocobase/plugin-sample-custom-block/README.md b/packages/plugins/@nocobase/plugin-sample-custom-block/README.md deleted file mode 100644 index 986d90d78..000000000 --- a/packages/plugins/@nocobase/plugin-sample-custom-block/README.md +++ /dev/null @@ -1,28 +0,0 @@ -# Hello sample - -## Register - -```ts -yarn pm add sample-custom-block -``` - -## Activate - -```bash -yarn pm enable sample-custom-block -``` - -## Launch the app - -```bash -# for development -yarn dev - -# for production -yarn build -yarn start -``` - -## Demo - -[gif] diff --git a/packages/plugins/@nocobase/plugin-sample-custom-block/client.d.ts b/packages/plugins/@nocobase/plugin-sample-custom-block/client.d.ts deleted file mode 100644 index 6c459cbac..000000000 --- a/packages/plugins/@nocobase/plugin-sample-custom-block/client.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './dist/client'; -export { default } from './dist/client'; diff --git a/packages/plugins/@nocobase/plugin-sample-custom-block/client.js b/packages/plugins/@nocobase/plugin-sample-custom-block/client.js deleted file mode 100644 index b6e3be70e..000000000 --- a/packages/plugins/@nocobase/plugin-sample-custom-block/client.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./dist/client/index.js'); diff --git a/packages/plugins/@nocobase/plugin-sample-custom-block/package.json b/packages/plugins/@nocobase/plugin-sample-custom-block/package.json deleted file mode 100644 index 3f42c5cdd..000000000 --- a/packages/plugins/@nocobase/plugin-sample-custom-block/package.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "@nocobase/plugin-sample-custom-block", - "version": "0.19.0-alpha.3", - "main": "./dist/server/index.js", - "devDependencies": { - "@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": "979a9c59a98c61a2287dd847580746a9b597cbde" -} diff --git a/packages/plugins/@nocobase/plugin-sample-custom-block/server.d.ts b/packages/plugins/@nocobase/plugin-sample-custom-block/server.d.ts deleted file mode 100644 index c41081ddc..000000000 --- a/packages/plugins/@nocobase/plugin-sample-custom-block/server.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './dist/server'; -export { default } from './dist/server'; diff --git a/packages/plugins/@nocobase/plugin-sample-custom-block/server.js b/packages/plugins/@nocobase/plugin-sample-custom-block/server.js deleted file mode 100644 index 972842039..000000000 --- a/packages/plugins/@nocobase/plugin-sample-custom-block/server.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./dist/server/index.js'); diff --git a/packages/plugins/@nocobase/plugin-sample-custom-block/src/client/HelloDesigner.tsx b/packages/plugins/@nocobase/plugin-sample-custom-block/src/client/HelloDesigner.tsx deleted file mode 100644 index f609d9ea3..000000000 --- a/packages/plugins/@nocobase/plugin-sample-custom-block/src/client/HelloDesigner.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import { GeneralSchemaDesigner, SchemaSettingsRemove, useCollection } from '@nocobase/client'; -import React from 'react'; - -export const HelloDesigner = () => { - const { name, title } = useCollection(); - return ( - - - - ); -}; diff --git a/packages/plugins/@nocobase/plugin-sample-custom-block/src/client/index.tsx b/packages/plugins/@nocobase/plugin-sample-custom-block/src/client/index.tsx deleted file mode 100644 index 3dd791032..000000000 --- a/packages/plugins/@nocobase/plugin-sample-custom-block/src/client/index.tsx +++ /dev/null @@ -1,49 +0,0 @@ -import { TableOutlined } from '@ant-design/icons'; -import { SchemaInitializerItem, Plugin, useSchemaInitializer, useSchemaInitializerItem } from '@nocobase/client'; -import React from 'react'; -import { useTranslation } from 'react-i18next'; -import { HelloDesigner } from './HelloDesigner'; - -export const HelloBlockInitializer = () => { - const { insert } = useSchemaInitializer(); - const { t } = useTranslation(); - const itemConfig = useSchemaInitializerItem(); - return ( - } - onClick={() => { - insert({ - type: 'void', - 'x-component': 'CardItem', - 'x-designer': 'HelloDesigner', - properties: { - hello: { - type: 'void', - 'x-component': 'div', - 'x-content': 'Hello World', - }, - }, - }); - }} - title={t('Hello block')} - /> - ); -}; - -class CustomBlockPlugin extends Plugin { - async load() { - this.app.addComponents({ - HelloDesigner, - HelloBlockInitializer, - }); - - const blockInitializers = this.app.schemaInitializerManager.get('BlockInitializers'); - blockInitializers?.add('otherBlocks.customBlock', { - title: '{{t("Hello block")}}', - Component: 'HelloBlockInitializer', - }); - } -} - -export default CustomBlockPlugin; diff --git a/packages/plugins/@nocobase/plugin-sample-custom-block/src/index.ts b/packages/plugins/@nocobase/plugin-sample-custom-block/src/index.ts deleted file mode 100644 index 7e74612df..000000000 --- a/packages/plugins/@nocobase/plugin-sample-custom-block/src/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './server'; -export { default } from './server'; diff --git a/packages/plugins/@nocobase/plugin-sample-custom-block/src/server/index.ts b/packages/plugins/@nocobase/plugin-sample-custom-block/src/server/index.ts deleted file mode 100644 index 9671f634f..000000000 --- a/packages/plugins/@nocobase/plugin-sample-custom-block/src/server/index.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { InstallOptions, Plugin } from '@nocobase/server'; - -export class CustomBlockPlugin extends Plugin { - beforeLoad() { - // TODO - } - - async load() {} - - async install(options: InstallOptions) { - // TODO - } -} - -export default CustomBlockPlugin; diff --git a/packages/plugins/@nocobase/plugin-sample-custom-collection-template/.npmignore b/packages/plugins/@nocobase/plugin-sample-custom-collection-template/.npmignore deleted file mode 100644 index c593fe9df..000000000 --- a/packages/plugins/@nocobase/plugin-sample-custom-collection-template/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -/node_modules -/src \ No newline at end of file diff --git a/packages/plugins/@nocobase/plugin-sample-custom-collection-template/README.md b/packages/plugins/@nocobase/plugin-sample-custom-collection-template/README.md deleted file mode 100644 index 3a67dc5a4..000000000 --- a/packages/plugins/@nocobase/plugin-sample-custom-collection-template/README.md +++ /dev/null @@ -1,28 +0,0 @@ -# custom-collection-template - -## Register - -```ts -yarn pm add sample-custom-collection-template -``` - -## Activate - -```bash -yarn pm enable sample-custom-collection-template -``` - -## Launch the app - -```bash -# for development -yarn dev - -# for production -yarn build -yarn start -``` - -## Demo - -[gif] diff --git a/packages/plugins/@nocobase/plugin-sample-custom-collection-template/client.d.ts b/packages/plugins/@nocobase/plugin-sample-custom-collection-template/client.d.ts deleted file mode 100644 index 6c459cbac..000000000 --- a/packages/plugins/@nocobase/plugin-sample-custom-collection-template/client.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './dist/client'; -export { default } from './dist/client'; diff --git a/packages/plugins/@nocobase/plugin-sample-custom-collection-template/client.js b/packages/plugins/@nocobase/plugin-sample-custom-collection-template/client.js deleted file mode 100644 index b6e3be70e..000000000 --- a/packages/plugins/@nocobase/plugin-sample-custom-collection-template/client.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./dist/client/index.js'); diff --git a/packages/plugins/@nocobase/plugin-sample-custom-collection-template/package.json b/packages/plugins/@nocobase/plugin-sample-custom-collection-template/package.json deleted file mode 100644 index 4dfad37a4..000000000 --- a/packages/plugins/@nocobase/plugin-sample-custom-collection-template/package.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "name": "@nocobase/plugin-sample-custom-collection-template", - "version": "0.19.0-alpha.3", - "main": "./dist/server/index.js", - "peerDependencies": { - "@nocobase/client": "0.x", - "@nocobase/server": "0.x", - "@nocobase/test": "0.x" - }, - "gitHead": "979a9c59a98c61a2287dd847580746a9b597cbde" -} diff --git a/packages/plugins/@nocobase/plugin-sample-custom-collection-template/src/client/index.tsx b/packages/plugins/@nocobase/plugin-sample-custom-collection-template/src/client/index.tsx deleted file mode 100644 index c97557943..000000000 --- a/packages/plugins/@nocobase/plugin-sample-custom-collection-template/src/client/index.tsx +++ /dev/null @@ -1,53 +0,0 @@ -import { getConfigurableProperties, ICollectionTemplate, Plugin, registerTemplate } from '@nocobase/client'; - -const myCollectionTemplate: ICollectionTemplate = { - name: 'myCollection', - title: '{{t("Custom template")}}', - order: 6, - color: 'blue', - default: { - fields: [ - { - name: 'uuid', - type: 'string', - primaryKey: true, - allowNull: false, - uiSchema: { type: 'number', title: '{{t("UUID")}}', 'x-component': 'Input', 'x-read-pretty': true }, - interface: 'input', - }, - ], - }, - configurableProperties: getConfigurableProperties('title', 'name', 'inherits', 'createdAt', 'updatedAt'), - availableFieldInterfaces: { - include: [ - 'input', - { - interface: 'o2m', - targetScope: { - template: ['calendar'], - }, - }, - { - interface: 'm2m', - targetScope: { - template: ['calendar', 'myCollection'], - }, - }, - { - interface: 'linkTo', - targetScope: { - template: ['myCollection'], - }, - }, - ], - // exclude: ['input', 'linkTo'], - }, -}; - -class CustomCollectionPlugin extends Plugin { - async load() { - registerTemplate('myCollection', myCollectionTemplate); - } -} - -export default CustomCollectionPlugin; diff --git a/packages/plugins/@nocobase/plugin-sample-custom-collection-template/src/index.ts b/packages/plugins/@nocobase/plugin-sample-custom-collection-template/src/index.ts deleted file mode 100644 index 7e74612df..000000000 --- a/packages/plugins/@nocobase/plugin-sample-custom-collection-template/src/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './server'; -export { default } from './server'; diff --git a/packages/plugins/@nocobase/plugin-sample-custom-collection-template/src/server/index.ts b/packages/plugins/@nocobase/plugin-sample-custom-collection-template/src/server/index.ts deleted file mode 100644 index 5a6c06102..000000000 --- a/packages/plugins/@nocobase/plugin-sample-custom-collection-template/src/server/index.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { InstallOptions, Plugin } from '@nocobase/server'; - -export class CustomCollectionTemplatePlugin extends Plugin { - afterAdd() {} - - beforeLoad() {} - - async load() {} - - async install(options: InstallOptions) { - // TODO - } -} - -export default CustomCollectionTemplatePlugin; diff --git a/packages/plugins/@nocobase/plugin-sample-custom-page/.npmignore b/packages/plugins/@nocobase/plugin-sample-custom-page/.npmignore deleted file mode 100644 index c593fe9df..000000000 --- a/packages/plugins/@nocobase/plugin-sample-custom-page/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -/node_modules -/src \ No newline at end of file diff --git a/packages/plugins/@nocobase/plugin-sample-custom-page/README.md b/packages/plugins/@nocobase/plugin-sample-custom-page/README.md deleted file mode 100644 index d83f8849d..000000000 --- a/packages/plugins/@nocobase/plugin-sample-custom-page/README.md +++ /dev/null @@ -1,28 +0,0 @@ -# Custom page - -## Register - -```ts -yarn pm add sample-custom-page -``` - -## Activate - -```bash -yarn pm enable sample-custom-page -``` - -## Launch the app - -```bash -# for development -yarn dev - -# for production -yarn build -yarn start -``` - -## Visit the custom page - -Open http://localhost:13000/hello-world in a web browser. diff --git a/packages/plugins/@nocobase/plugin-sample-custom-page/client.d.ts b/packages/plugins/@nocobase/plugin-sample-custom-page/client.d.ts deleted file mode 100644 index 6c459cbac..000000000 --- a/packages/plugins/@nocobase/plugin-sample-custom-page/client.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './dist/client'; -export { default } from './dist/client'; diff --git a/packages/plugins/@nocobase/plugin-sample-custom-page/client.js b/packages/plugins/@nocobase/plugin-sample-custom-page/client.js deleted file mode 100644 index b6e3be70e..000000000 --- a/packages/plugins/@nocobase/plugin-sample-custom-page/client.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./dist/client/index.js'); diff --git a/packages/plugins/@nocobase/plugin-sample-custom-page/package.json b/packages/plugins/@nocobase/plugin-sample-custom-page/package.json deleted file mode 100644 index 0cfe3ebfc..000000000 --- a/packages/plugins/@nocobase/plugin-sample-custom-page/package.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "@nocobase/plugin-sample-custom-page", - "version": "0.19.0-alpha.3", - "main": "./dist/server/index.js", - "devDependencies": { - "react": "^18.2.0" - }, - "peerDependencies": { - "@nocobase/client": "0.x", - "@nocobase/server": "0.x", - "@nocobase/test": "0.x" - }, - "gitHead": "979a9c59a98c61a2287dd847580746a9b597cbde" -} diff --git a/packages/plugins/@nocobase/plugin-sample-custom-page/server.d.ts b/packages/plugins/@nocobase/plugin-sample-custom-page/server.d.ts deleted file mode 100644 index c41081ddc..000000000 --- a/packages/plugins/@nocobase/plugin-sample-custom-page/server.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './dist/server'; -export { default } from './dist/server'; diff --git a/packages/plugins/@nocobase/plugin-sample-custom-page/server.js b/packages/plugins/@nocobase/plugin-sample-custom-page/server.js deleted file mode 100644 index 972842039..000000000 --- a/packages/plugins/@nocobase/plugin-sample-custom-page/server.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./dist/server/index.js'); diff --git a/packages/plugins/@nocobase/plugin-sample-custom-page/src/client/index.tsx b/packages/plugins/@nocobase/plugin-sample-custom-page/src/client/index.tsx deleted file mode 100644 index 06a2ca866..000000000 --- a/packages/plugins/@nocobase/plugin-sample-custom-page/src/client/index.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import { Plugin } from '@nocobase/client'; -import React from 'react'; - -const HelloWorld = () => { - return
Hello ui router
; -}; - -class CustomPlugin extends Plugin { - async load() { - this.addRoutes(); - } - - addRoutes() { - this.app.router.add('hello', { - path: '/hello', - element: , - }); - } -} - -export default CustomPlugin; diff --git a/packages/plugins/@nocobase/plugin-sample-custom-page/src/index.ts b/packages/plugins/@nocobase/plugin-sample-custom-page/src/index.ts deleted file mode 100644 index 7e74612df..000000000 --- a/packages/plugins/@nocobase/plugin-sample-custom-page/src/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './server'; -export { default } from './server'; diff --git a/packages/plugins/@nocobase/plugin-sample-custom-page/src/server/index.ts b/packages/plugins/@nocobase/plugin-sample-custom-page/src/server/index.ts deleted file mode 100644 index 853bf3880..000000000 --- a/packages/plugins/@nocobase/plugin-sample-custom-page/src/server/index.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { InstallOptions, Plugin } from '@nocobase/server'; - -export class CustomPagePlugin extends Plugin { - afterAdd() {} - - beforeLoad() {} - - async load() {} - - async install(options: InstallOptions) { - // TODO - } -} - -export default CustomPagePlugin; diff --git a/packages/plugins/@nocobase/plugin-sample-ratelimit/.npmignore b/packages/plugins/@nocobase/plugin-sample-ratelimit/.npmignore deleted file mode 100644 index c593fe9df..000000000 --- a/packages/plugins/@nocobase/plugin-sample-ratelimit/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -/node_modules -/src \ No newline at end of file diff --git a/packages/plugins/@nocobase/plugin-sample-ratelimit/README.md b/packages/plugins/@nocobase/plugin-sample-ratelimit/README.md deleted file mode 100644 index 366b32716..000000000 --- a/packages/plugins/@nocobase/plugin-sample-ratelimit/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# Rate limiter middleware sample - -## Register - -```ts -yarn pm add sample-ratelimit -``` - -## Activate - -```bash -yarn pm enable sample-ratelimit -``` - -## Launch the app - -```bash -# for development -yarn dev - -# for production -yarn build -yarn start -``` - -## Demo - -[gif] - diff --git a/packages/plugins/@nocobase/plugin-sample-ratelimit/client.d.ts b/packages/plugins/@nocobase/plugin-sample-ratelimit/client.d.ts deleted file mode 100644 index 6c459cbac..000000000 --- a/packages/plugins/@nocobase/plugin-sample-ratelimit/client.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './dist/client'; -export { default } from './dist/client'; diff --git a/packages/plugins/@nocobase/plugin-sample-ratelimit/client.js b/packages/plugins/@nocobase/plugin-sample-ratelimit/client.js deleted file mode 100644 index b6e3be70e..000000000 --- a/packages/plugins/@nocobase/plugin-sample-ratelimit/client.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./dist/client/index.js'); diff --git a/packages/plugins/@nocobase/plugin-sample-ratelimit/package.json b/packages/plugins/@nocobase/plugin-sample-ratelimit/package.json deleted file mode 100644 index 893d6b510..000000000 --- a/packages/plugins/@nocobase/plugin-sample-ratelimit/package.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "@nocobase/plugin-sample-ratelimit", - "version": "0.19.0-alpha.3", - "main": "./dist/server/index.js", - "devDependencies": { - "koa-ratelimit": "^5.0.1" - }, - "peerDependencies": { - "@nocobase/client": "0.x", - "@nocobase/server": "0.x", - "@nocobase/test": "0.x" - }, - "gitHead": "979a9c59a98c61a2287dd847580746a9b597cbde" -} diff --git a/packages/plugins/@nocobase/plugin-sample-ratelimit/server.d.ts b/packages/plugins/@nocobase/plugin-sample-ratelimit/server.d.ts deleted file mode 100644 index c41081ddc..000000000 --- a/packages/plugins/@nocobase/plugin-sample-ratelimit/server.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './dist/server'; -export { default } from './dist/server'; diff --git a/packages/plugins/@nocobase/plugin-sample-ratelimit/server.js b/packages/plugins/@nocobase/plugin-sample-ratelimit/server.js deleted file mode 100644 index 972842039..000000000 --- a/packages/plugins/@nocobase/plugin-sample-ratelimit/server.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./dist/server/index.js'); diff --git a/packages/plugins/@nocobase/plugin-sample-ratelimit/src/client/index.tsx b/packages/plugins/@nocobase/plugin-sample-ratelimit/src/client/index.tsx deleted file mode 100644 index 05db84589..000000000 --- a/packages/plugins/@nocobase/plugin-sample-ratelimit/src/client/index.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import { Plugin } from '@nocobase/client'; - -class RateLimitPlugin extends Plugin { - async load() {} -} - -export default RateLimitPlugin; diff --git a/packages/plugins/@nocobase/plugin-sample-ratelimit/src/index.ts b/packages/plugins/@nocobase/plugin-sample-ratelimit/src/index.ts deleted file mode 100644 index 7e74612df..000000000 --- a/packages/plugins/@nocobase/plugin-sample-ratelimit/src/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './server'; -export { default } from './server'; diff --git a/packages/plugins/@nocobase/plugin-sample-ratelimit/src/server/index.ts b/packages/plugins/@nocobase/plugin-sample-ratelimit/src/server/index.ts deleted file mode 100644 index 39b6c24f0..000000000 --- a/packages/plugins/@nocobase/plugin-sample-ratelimit/src/server/index.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { InstallOptions, Plugin } from '@nocobase/server'; -import ratelimit from 'koa-ratelimit'; - -export class CustomPagePlugin extends Plugin { - beforeLoad() { - const db = new Map(); - this.app.use( - ratelimit({ - driver: 'memory', - db: db, - duration: 60000, - errorMessage: 'Sometimes You Just Have to Slow Down.', - id: (ctx) => ctx.ip, - headers: { - remaining: 'Rate-Limit-Remaining', - reset: 'Rate-Limit-Reset', - total: 'Rate-Limit-Total', - }, - max: 200, - disableHeader: false, - whitelist: (ctx) => { - // some logic that returns a boolean - }, - blacklist: (ctx) => { - // some logic that returns a boolean - }, - }), - ); - } - - async load() {} - - async install(options: InstallOptions) { - // TODO - } -} - -export default CustomPagePlugin; diff --git a/packages/plugins/@nocobase/plugin-sample-shop-actions/.npmignore b/packages/plugins/@nocobase/plugin-sample-shop-actions/.npmignore deleted file mode 100644 index c593fe9df..000000000 --- a/packages/plugins/@nocobase/plugin-sample-shop-actions/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -/node_modules -/src \ No newline at end of file diff --git a/packages/plugins/@nocobase/plugin-sample-shop-actions/README.md b/packages/plugins/@nocobase/plugin-sample-shop-actions/README.md deleted file mode 100644 index 0c0e13767..000000000 --- a/packages/plugins/@nocobase/plugin-sample-shop-actions/README.md +++ /dev/null @@ -1,44 +0,0 @@ -# Actions for simple shop scenario - -## Register - -```ts -yarn pm add sample-shop-actions -``` - -## Activate - -```bash -yarn pm enable sample-shop-actions -``` - -## Launch the app - -```bash -# for development -yarn dev - -# for production -yarn build -yarn start -``` - -## Connect to the API - -### Products API - -```bash -# create a product -curl -X POST -H "Content-Type: application/json" -d '{"title": "iPhone 14 Pro", "price": 7999, "enabled": true, "inventory": 1}' "http://localhost:13000/api/products" -``` - -### Orders API - -```bash -# create a order -curl -X POST -H "Content-Type: application/json" -d '{"productId": 1, "quantity": 1, "totalPrice": 0, "userId": 2}' 'http://localhost:13000/api/orders' -# {"id": , "status": 0, "productId": 1, "quantity": 1, "totalPrice": 7999, "userId": 1} - -# list orders which userId=1 with product -curl 'http://localhost:13000/api/orders?filter={"status":2}&appends=product' -``` diff --git a/packages/plugins/@nocobase/plugin-sample-shop-actions/__tests__/server/index.test.ts b/packages/plugins/@nocobase/plugin-sample-shop-actions/__tests__/server/index.test.ts deleted file mode 100644 index 9b753c694..000000000 --- a/packages/plugins/@nocobase/plugin-sample-shop-actions/__tests__/server/index.test.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { createMockServer } from '@nocobase/test'; - -describe('shop actions', () => { - let app; - let agent; - let db; - - beforeEach(async () => { - app = await createMockServer({ - plugins: ['sample-shop-actions'], - }); - await app.runCommand('install', '-f'); - agent = app.agent(); - db = app.db; - }); - - afterEach(async () => { - await app.destroy(); - }); - - test('product order case', async () => { - const { body: product } = await agent.resource('products').create({ - values: { - title: 'iPhone 14 Pro', - price: 7999, - enabled: true, - inventory: 1, - }, - }); - - expect(product.data.price).toEqual(7999); - - const { body: order } = await agent.resource('orders').create({ - values: { - productId: product.data.id, - }, - }); - expect(order.data.totalPrice).toEqual(7999); - expect(order.data.status).toEqual(0); - - const { body: deliveredOrder } = await agent.resource('orders').deliver({ - filterByTk: order.data.id, - values: { - provider: 'SF', - trackingNumber: '123456789', - }, - }); - expect(deliveredOrder.data.status).toBe(2); - expect(deliveredOrder.data.delivery.trackingNumber).toBe('123456789'); - }); -}); diff --git a/packages/plugins/@nocobase/plugin-sample-shop-actions/client.d.ts b/packages/plugins/@nocobase/plugin-sample-shop-actions/client.d.ts deleted file mode 100644 index 6c459cbac..000000000 --- a/packages/plugins/@nocobase/plugin-sample-shop-actions/client.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './dist/client'; -export { default } from './dist/client'; diff --git a/packages/plugins/@nocobase/plugin-sample-shop-actions/client.js b/packages/plugins/@nocobase/plugin-sample-shop-actions/client.js deleted file mode 100644 index b6e3be70e..000000000 --- a/packages/plugins/@nocobase/plugin-sample-shop-actions/client.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./dist/client/index.js'); diff --git a/packages/plugins/@nocobase/plugin-sample-shop-actions/package.json b/packages/plugins/@nocobase/plugin-sample-shop-actions/package.json deleted file mode 100644 index 00c89966f..000000000 --- a/packages/plugins/@nocobase/plugin-sample-shop-actions/package.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "name": "@nocobase/plugin-sample-shop-actions", - "version": "0.19.0-alpha.3", - "main": "./dist/server/index.js", - "peerDependencies": { - "@nocobase/client": "0.x", - "@nocobase/server": "0.x", - "@nocobase/test": "0.x" - }, - "gitHead": "979a9c59a98c61a2287dd847580746a9b597cbde" -} diff --git a/packages/plugins/@nocobase/plugin-sample-shop-actions/server.d.ts b/packages/plugins/@nocobase/plugin-sample-shop-actions/server.d.ts deleted file mode 100644 index c41081ddc..000000000 --- a/packages/plugins/@nocobase/plugin-sample-shop-actions/server.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './dist/server'; -export { default } from './dist/server'; diff --git a/packages/plugins/@nocobase/plugin-sample-shop-actions/server.js b/packages/plugins/@nocobase/plugin-sample-shop-actions/server.js deleted file mode 100644 index 972842039..000000000 --- a/packages/plugins/@nocobase/plugin-sample-shop-actions/server.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./dist/server/index.js'); diff --git a/packages/plugins/@nocobase/plugin-sample-shop-actions/src/client/index.tsx b/packages/plugins/@nocobase/plugin-sample-shop-actions/src/client/index.tsx deleted file mode 100644 index d5bbf2fd6..000000000 --- a/packages/plugins/@nocobase/plugin-sample-shop-actions/src/client/index.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import { Plugin } from '@nocobase/client'; - -class ShopActionsPlugin extends Plugin { - async load() {} -} - -export default ShopActionsPlugin; diff --git a/packages/plugins/@nocobase/plugin-sample-shop-actions/src/index.ts b/packages/plugins/@nocobase/plugin-sample-shop-actions/src/index.ts deleted file mode 100644 index 7e74612df..000000000 --- a/packages/plugins/@nocobase/plugin-sample-shop-actions/src/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './server'; -export { default } from './server'; diff --git a/packages/plugins/@nocobase/plugin-sample-shop-actions/src/server/actions/.gitkeep b/packages/plugins/@nocobase/plugin-sample-shop-actions/src/server/actions/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/plugins/@nocobase/plugin-sample-shop-actions/src/server/collections/.gitkeep b/packages/plugins/@nocobase/plugin-sample-shop-actions/src/server/collections/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/plugins/@nocobase/plugin-sample-shop-actions/src/server/collections/categories.ts b/packages/plugins/@nocobase/plugin-sample-shop-actions/src/server/collections/categories.ts deleted file mode 100644 index 961526698..000000000 --- a/packages/plugins/@nocobase/plugin-sample-shop-actions/src/server/collections/categories.ts +++ /dev/null @@ -1,13 +0,0 @@ -export default { - name: 'categories', - fields: [ - { - type: 'string', - name: 'title', - }, - { - type: 'hasMany', - name: 'products', - }, - ], -}; diff --git a/packages/plugins/@nocobase/plugin-sample-shop-actions/src/server/collections/deliveries.ts b/packages/plugins/@nocobase/plugin-sample-shop-actions/src/server/collections/deliveries.ts deleted file mode 100644 index 27889ada7..000000000 --- a/packages/plugins/@nocobase/plugin-sample-shop-actions/src/server/collections/deliveries.ts +++ /dev/null @@ -1,21 +0,0 @@ -export default { - name: 'deliveries', - fields: [ - { - type: 'belongsTo', - name: 'order', - }, - { - type: 'string', - name: 'provider', - }, - { - type: 'string', - name: 'trackingNumber', - }, - { - type: 'integer', - name: 'status', - }, - ], -}; diff --git a/packages/plugins/@nocobase/plugin-sample-shop-actions/src/server/collections/orders.ts b/packages/plugins/@nocobase/plugin-sample-shop-actions/src/server/collections/orders.ts deleted file mode 100644 index d623fcfb9..000000000 --- a/packages/plugins/@nocobase/plugin-sample-shop-actions/src/server/collections/orders.ts +++ /dev/null @@ -1,33 +0,0 @@ -export default { - name: 'orders', - fields: [ - { - type: 'belongsTo', - name: 'product', - }, - { - type: 'integer', - name: 'quantity', - }, - { - type: 'integer', - name: 'totalPrice', - }, - { - type: 'integer', - name: 'status', - }, - { - type: 'string', - name: 'address', - }, - { - type: 'belongsTo', - name: 'user', - }, - { - type: 'hasOne', - name: 'delivery', - }, - ], -}; diff --git a/packages/plugins/@nocobase/plugin-sample-shop-actions/src/server/collections/products.ts b/packages/plugins/@nocobase/plugin-sample-shop-actions/src/server/collections/products.ts deleted file mode 100644 index 8fe4ab376..000000000 --- a/packages/plugins/@nocobase/plugin-sample-shop-actions/src/server/collections/products.ts +++ /dev/null @@ -1,21 +0,0 @@ -export default { - name: 'products', - fields: [ - { - type: 'string', - name: 'title', - }, - { - type: 'integer', - name: 'price', - }, - { - type: 'boolean', - name: 'enabled', - }, - { - type: 'integer', - name: 'inventory', - }, - ], -}; diff --git a/packages/plugins/@nocobase/plugin-sample-shop-actions/src/server/index.ts b/packages/plugins/@nocobase/plugin-sample-shop-actions/src/server/index.ts deleted file mode 100644 index a014f2eb2..000000000 --- a/packages/plugins/@nocobase/plugin-sample-shop-actions/src/server/index.ts +++ /dev/null @@ -1,102 +0,0 @@ -import path from 'path'; - -import { InstallOptions, Plugin } from '@nocobase/server'; - -export class ShopPlugin extends Plugin { - beforeLoad() { - // TODO - } - - async load() { - await this.importCollections(path.resolve(__dirname, 'collections')); - - this.app.resource({ - name: 'orders', - actions: { - create: { - blacklist: ['id', 'totalPrice', 'status', 'createdAt', 'updatedAt'], - values: { - status: 0, - }, - middlewares: [ - async (ctx, next) => { - const { productId } = ctx.action.params.values; - - const product = await ctx.db.getRepository('products').findOne({ - filterByTk: productId, - filter: { - enabled: true, - inventory: { - $gt: 0, - }, - }, - }); - - if (!product) { - return ctx.throw(404); - } - - ctx.state.product = product; - - await next(); - }, - ], - async handler(ctx, next) { - const { product } = ctx.state; - const order = await ctx.db.getRepository('orders').create({ - values: { - ...ctx.action.params.values, - productId: product.id, - quantity: 1, - totalPrice: product.price, - }, - }); - - ctx.body = order; - }, - }, - list: { - filter: { - // TODO: 该操作符已废弃,该处代码需要重构 - // 由 users 插件扩展的过滤器运算符 - $isCurrentUser: true, - status: { - $ne: -1, - }, - }, - fields: ['id', 'status', 'createdAt', 'updatedAt'], - }, - async deliver(ctx, next) { - const { filterByTk } = ctx.action.params; - const orderRepo = ctx.db.getRepository('orders'); - - const [order] = await orderRepo.update({ - filterByTk, - values: { - status: 2, - delivery: { - ...ctx.action.params.values, - status: 0, - }, - }, - }); - order.delivery = await order.getDelivery(); - - ctx.body = order; - - next(); - }, - }, - }); - - this.app.acl.allow('products', '*'); - this.app.acl.allow('categories', '*'); - this.app.acl.allow('orders', '*'); - } - - async install(options: InstallOptions) { - // TODO - } -} - -export default ShopPlugin; diff --git a/packages/plugins/@nocobase/plugin-sample-shop-actions/src/server/models/.gitkeep b/packages/plugins/@nocobase/plugin-sample-shop-actions/src/server/models/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/plugins/@nocobase/plugin-sample-shop-actions/src/server/repositories/.gitkeep b/packages/plugins/@nocobase/plugin-sample-shop-actions/src/server/repositories/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/plugins/@nocobase/plugin-sample-shop-events/.npmignore b/packages/plugins/@nocobase/plugin-sample-shop-events/.npmignore deleted file mode 100644 index c593fe9df..000000000 --- a/packages/plugins/@nocobase/plugin-sample-shop-events/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -/node_modules -/src \ No newline at end of file diff --git a/packages/plugins/@nocobase/plugin-sample-shop-events/README.md b/packages/plugins/@nocobase/plugin-sample-shop-events/README.md deleted file mode 100644 index 51a35f752..000000000 --- a/packages/plugins/@nocobase/plugin-sample-shop-events/README.md +++ /dev/null @@ -1,44 +0,0 @@ -# Hooks for simple shop scenario - -## Register - -```ts -yarn pm add sample-shop-hooks -``` - -## Activate - -```bash -yarn pm enable sample-shop-hooks -``` - -## Launch the app - -```bash -# for development -yarn dev - -# for production -yarn build -yarn start -``` - -## Connect to the API - -### Products API - -```bash -# create a product -curl -X POST -H "Content-Type: application/json" -d '{"title": "iPhone 14 Pro", "price": 7999, "enabled": true, "inventory": 1}' "http://localhost:13000/api/products" -``` - -### Orders API - -```bash -# create a order -curl -X POST -H "Content-Type: application/json" -d '{"productId": 1, "quantity": 1, "totalPrice": 0, "userId": 2}' 'http://localhost:13000/api/orders' -# {"id": , "status": 0, "productId": 1, "quantity": 1, "totalPrice": 7999, "userId": 1} - -# create an expired delivery to watch schedule task -curl -X POST -H "Content-Type: application/json" -d '{"orderId": 1, "provider": "SF", "trackingNumber": "123456789", "userId": 2, "createdAt": "2022-09-01T00:00:00Z"}' 'http://localhost:13000/api/deliveries' -``` diff --git a/packages/plugins/@nocobase/plugin-sample-shop-events/client.d.ts b/packages/plugins/@nocobase/plugin-sample-shop-events/client.d.ts deleted file mode 100644 index 6c459cbac..000000000 --- a/packages/plugins/@nocobase/plugin-sample-shop-events/client.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './dist/client'; -export { default } from './dist/client'; diff --git a/packages/plugins/@nocobase/plugin-sample-shop-events/client.js b/packages/plugins/@nocobase/plugin-sample-shop-events/client.js deleted file mode 100644 index b6e3be70e..000000000 --- a/packages/plugins/@nocobase/plugin-sample-shop-events/client.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./dist/client/index.js'); diff --git a/packages/plugins/@nocobase/plugin-sample-shop-events/package.json b/packages/plugins/@nocobase/plugin-sample-shop-events/package.json deleted file mode 100644 index af6e98b64..000000000 --- a/packages/plugins/@nocobase/plugin-sample-shop-events/package.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "name": "@nocobase/plugin-sample-shop-events", - "version": "0.19.0-alpha.3", - "main": "./dist/server/index.js", - "peerDependencies": { - "@nocobase/client": "0.x", - "@nocobase/server": "0.x", - "@nocobase/test": "0.x" - }, - "gitHead": "979a9c59a98c61a2287dd847580746a9b597cbde" -} diff --git a/packages/plugins/@nocobase/plugin-sample-shop-events/server.d.ts b/packages/plugins/@nocobase/plugin-sample-shop-events/server.d.ts deleted file mode 100644 index c41081ddc..000000000 --- a/packages/plugins/@nocobase/plugin-sample-shop-events/server.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './dist/server'; -export { default } from './dist/server'; diff --git a/packages/plugins/@nocobase/plugin-sample-shop-events/server.js b/packages/plugins/@nocobase/plugin-sample-shop-events/server.js deleted file mode 100644 index 972842039..000000000 --- a/packages/plugins/@nocobase/plugin-sample-shop-events/server.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./dist/server/index.js'); diff --git a/packages/plugins/@nocobase/plugin-sample-shop-events/src/client/index.tsx b/packages/plugins/@nocobase/plugin-sample-shop-events/src/client/index.tsx deleted file mode 100644 index 774cecf2d..000000000 --- a/packages/plugins/@nocobase/plugin-sample-shop-events/src/client/index.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import { Plugin } from '@nocobase/client'; - -class ShopEventsPlugin extends Plugin { - async load() {} -} - -export default ShopEventsPlugin; diff --git a/packages/plugins/@nocobase/plugin-sample-shop-events/src/index.ts b/packages/plugins/@nocobase/plugin-sample-shop-events/src/index.ts deleted file mode 100644 index 7e74612df..000000000 --- a/packages/plugins/@nocobase/plugin-sample-shop-events/src/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './server'; -export { default } from './server'; diff --git a/packages/plugins/@nocobase/plugin-sample-shop-events/src/server/actions/.gitkeep b/packages/plugins/@nocobase/plugin-sample-shop-events/src/server/actions/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/plugins/@nocobase/plugin-sample-shop-events/src/server/collections/.gitkeep b/packages/plugins/@nocobase/plugin-sample-shop-events/src/server/collections/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/plugins/@nocobase/plugin-sample-shop-events/src/server/collections/categories.ts b/packages/plugins/@nocobase/plugin-sample-shop-events/src/server/collections/categories.ts deleted file mode 100644 index 961526698..000000000 --- a/packages/plugins/@nocobase/plugin-sample-shop-events/src/server/collections/categories.ts +++ /dev/null @@ -1,13 +0,0 @@ -export default { - name: 'categories', - fields: [ - { - type: 'string', - name: 'title', - }, - { - type: 'hasMany', - name: 'products', - }, - ], -}; diff --git a/packages/plugins/@nocobase/plugin-sample-shop-events/src/server/collections/deliveries.ts b/packages/plugins/@nocobase/plugin-sample-shop-events/src/server/collections/deliveries.ts deleted file mode 100644 index 715c0ed23..000000000 --- a/packages/plugins/@nocobase/plugin-sample-shop-events/src/server/collections/deliveries.ts +++ /dev/null @@ -1,22 +0,0 @@ -export default { - name: 'deliveries', - fields: [ - { - type: 'belongsTo', - name: 'order', - }, - { - type: 'string', - name: 'provider', - }, - { - type: 'string', - name: 'trackingNumber', - }, - { - type: 'integer', - name: 'status', - defaultValue: 0, - }, - ], -}; diff --git a/packages/plugins/@nocobase/plugin-sample-shop-events/src/server/collections/orders.ts b/packages/plugins/@nocobase/plugin-sample-shop-events/src/server/collections/orders.ts deleted file mode 100644 index d623fcfb9..000000000 --- a/packages/plugins/@nocobase/plugin-sample-shop-events/src/server/collections/orders.ts +++ /dev/null @@ -1,33 +0,0 @@ -export default { - name: 'orders', - fields: [ - { - type: 'belongsTo', - name: 'product', - }, - { - type: 'integer', - name: 'quantity', - }, - { - type: 'integer', - name: 'totalPrice', - }, - { - type: 'integer', - name: 'status', - }, - { - type: 'string', - name: 'address', - }, - { - type: 'belongsTo', - name: 'user', - }, - { - type: 'hasOne', - name: 'delivery', - }, - ], -}; diff --git a/packages/plugins/@nocobase/plugin-sample-shop-events/src/server/collections/products.ts b/packages/plugins/@nocobase/plugin-sample-shop-events/src/server/collections/products.ts deleted file mode 100644 index 8fe4ab376..000000000 --- a/packages/plugins/@nocobase/plugin-sample-shop-events/src/server/collections/products.ts +++ /dev/null @@ -1,21 +0,0 @@ -export default { - name: 'products', - fields: [ - { - type: 'string', - name: 'title', - }, - { - type: 'integer', - name: 'price', - }, - { - type: 'boolean', - name: 'enabled', - }, - { - type: 'integer', - name: 'inventory', - }, - ], -}; diff --git a/packages/plugins/@nocobase/plugin-sample-shop-events/src/server/index.ts b/packages/plugins/@nocobase/plugin-sample-shop-events/src/server/index.ts deleted file mode 100644 index 99e9e16cc..000000000 --- a/packages/plugins/@nocobase/plugin-sample-shop-events/src/server/index.ts +++ /dev/null @@ -1,85 +0,0 @@ -import path from 'path'; - -import { InstallOptions, Plugin } from '@nocobase/server'; - -export class ShopPlugin extends Plugin { - timer = null; - orderReceiveExpires = 86400 * 7; - - checkOrder = async () => { - const expiredDate = new Date(Date.now() - this.orderReceiveExpires); - const deliveryRepo = this.db.getRepository('deliveries'); - const expiredDeliveries = await deliveryRepo.find({ - fields: ['id', 'orderId'], - filter: { - status: 0, - createdAt: { - $lt: expiredDate, - }, - }, - }); - await deliveryRepo.update({ - filter: { - id: expiredDeliveries.map((item) => item.get('id')), - }, - values: { - status: 1, - }, - }); - const orderRepo = this.db.getRepository('orders'); - const [updated] = await orderRepo.update({ - filter: { - status: 2, - id: expiredDeliveries.map((item) => item.get('orderId')), - }, - values: { - status: 3, - }, - }); - - console.log('%d orders expired', updated); - }; - - beforeLoad() { - // TODO - } - - async load() { - await this.importCollections(path.resolve(__dirname, 'collections')); - - this.db.on('orders.afterCreate', async (order, options) => { - const product = await order.getProduct({ - transaction: options.transaction, - }); - - await product.update( - { - inventory: product.inventory - order.quantity, - }, - { - transaction: options.transaction, - }, - ); - }); - - this.app.on('beforeStart', () => { - // 每分钟执行一次 - this.timer = setInterval(this.checkOrder, 1000 * 60); - }); - - this.app.on('beforeStop', () => { - clearInterval(this.timer); - this.timer = null; - }); - - this.app.acl.allow('products', '*'); - this.app.acl.allow('categories', '*'); - this.app.acl.allow('orders', '*'); - } - - async install(options: InstallOptions) { - // TODO - } -} - -export default ShopPlugin; diff --git a/packages/plugins/@nocobase/plugin-sample-shop-events/src/server/models/.gitkeep b/packages/plugins/@nocobase/plugin-sample-shop-events/src/server/models/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/plugins/@nocobase/plugin-sample-shop-events/src/server/repositories/.gitkeep b/packages/plugins/@nocobase/plugin-sample-shop-events/src/server/repositories/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/plugins/@nocobase/plugin-sample-shop-i18n/.npmignore b/packages/plugins/@nocobase/plugin-sample-shop-i18n/.npmignore deleted file mode 100644 index c593fe9df..000000000 --- a/packages/plugins/@nocobase/plugin-sample-shop-i18n/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -/node_modules -/src \ No newline at end of file diff --git a/packages/plugins/@nocobase/plugin-sample-shop-i18n/README.md b/packages/plugins/@nocobase/plugin-sample-shop-i18n/README.md deleted file mode 100644 index a087400d4..000000000 --- a/packages/plugins/@nocobase/plugin-sample-shop-i18n/README.md +++ /dev/null @@ -1,49 +0,0 @@ -# I18n for simple shop scenario - -## Register - -```ts -yarn pm add sample-shop-i18n -``` - -## Activate - -```bash -yarn pm enable sample-shop-i18n -``` - -## Launch the app - -```bash -# for development -yarn dev - -# for production -yarn build -yarn start -``` - -## Connect to the API - -### Products API - -```bash -# create a product -curl -X POST -d '{"title": "iPhone 14 Pro", "price": "7999", "enabled": true, "inventory": 10}' "http://localhost:13000/api/products" - -# list products -curl "http://localhost:13000/api/products" - -# get product which id=1 -curl "http://localhost:13000/api/products?filterByTk=1" -``` - -### Orders API - -```bash -# create a order -curl -X POST -d '{"productId": 1, "quantity": 1, "totalPrice": "7999", "userId": 1}' 'http://localhost:13000/api/orders' - -# list orders which userId=1 with product -curl 'http://localhost:13000/api/orders?filter={"userId":1}&appends=product' -``` diff --git a/packages/plugins/@nocobase/plugin-sample-shop-i18n/client.d.ts b/packages/plugins/@nocobase/plugin-sample-shop-i18n/client.d.ts deleted file mode 100644 index 6c459cbac..000000000 --- a/packages/plugins/@nocobase/plugin-sample-shop-i18n/client.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './dist/client'; -export { default } from './dist/client'; diff --git a/packages/plugins/@nocobase/plugin-sample-shop-i18n/client.js b/packages/plugins/@nocobase/plugin-sample-shop-i18n/client.js deleted file mode 100644 index b6e3be70e..000000000 --- a/packages/plugins/@nocobase/plugin-sample-shop-i18n/client.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./dist/client/index.js'); diff --git a/packages/plugins/@nocobase/plugin-sample-shop-i18n/package.json b/packages/plugins/@nocobase/plugin-sample-shop-i18n/package.json deleted file mode 100644 index b8c824c3e..000000000 --- a/packages/plugins/@nocobase/plugin-sample-shop-i18n/package.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "@nocobase/plugin-sample-shop-i18n", - "version": "0.19.0-alpha.3", - "main": "./dist/server/index.js", - "devDependencies": { - "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": "979a9c59a98c61a2287dd847580746a9b597cbde" -} diff --git a/packages/plugins/@nocobase/plugin-sample-shop-i18n/server.d.ts b/packages/plugins/@nocobase/plugin-sample-shop-i18n/server.d.ts deleted file mode 100644 index c41081ddc..000000000 --- a/packages/plugins/@nocobase/plugin-sample-shop-i18n/server.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './dist/server'; -export { default } from './dist/server'; diff --git a/packages/plugins/@nocobase/plugin-sample-shop-i18n/server.js b/packages/plugins/@nocobase/plugin-sample-shop-i18n/server.js deleted file mode 100644 index 972842039..000000000 --- a/packages/plugins/@nocobase/plugin-sample-shop-i18n/server.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./dist/server/index.js'); diff --git a/packages/plugins/@nocobase/plugin-sample-shop-i18n/src/client/index.tsx b/packages/plugins/@nocobase/plugin-sample-shop-i18n/src/client/index.tsx deleted file mode 100644 index fb8bcf6a6..000000000 --- a/packages/plugins/@nocobase/plugin-sample-shop-i18n/src/client/index.tsx +++ /dev/null @@ -1,49 +0,0 @@ -import { i18n, Plugin } from '@nocobase/client'; -import { Select } from 'antd'; -import React, { useContext } from 'react'; -import { useTranslation } from 'react-i18next'; - -const NAMESPACE = 'sample-shop-i18n'; - -i18n.addResources('zh-CN', NAMESPACE, { - Shop: '店铺', - I18n: '国际化', - Pending: '已下单', - Paid: '已支付', - Delivered: '已发货', - Received: '已签收', -}); - -const ORDER_STATUS_LIST = [ - { value: -1, label: 'Canceled (untranslated)' }, - { value: 0, label: 'Pending' }, - { value: 1, label: 'Paid' }, - { value: 2, label: 'Delivered' }, - { value: 3, label: 'Received' }, -]; - -function OrderStatusSelect() { - const { t } = useTranslation(NAMESPACE); - - return ( - - ); -} - -class ShopI18nPlugin extends Plugin { - async load() { - this.app.pluginSettingsManager.add(NAMESPACE, { - title: `{{t("Shop", { ns: "${NAMESPACE}" })}}`, - icon: 'ShopOutlined', - Component: OrderStatusSelect, - }); - } -} - -export default ShopI18nPlugin; diff --git a/packages/plugins/@nocobase/plugin-sample-shop-i18n/src/index.ts b/packages/plugins/@nocobase/plugin-sample-shop-i18n/src/index.ts deleted file mode 100644 index 7e74612df..000000000 --- a/packages/plugins/@nocobase/plugin-sample-shop-i18n/src/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './server'; -export { default } from './server'; diff --git a/packages/plugins/@nocobase/plugin-sample-shop-i18n/src/server/actions/.gitkeep b/packages/plugins/@nocobase/plugin-sample-shop-i18n/src/server/actions/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/plugins/@nocobase/plugin-sample-shop-i18n/src/server/collections/.gitkeep b/packages/plugins/@nocobase/plugin-sample-shop-i18n/src/server/collections/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/plugins/@nocobase/plugin-sample-shop-i18n/src/server/collections/categories.ts b/packages/plugins/@nocobase/plugin-sample-shop-i18n/src/server/collections/categories.ts deleted file mode 100644 index 961526698..000000000 --- a/packages/plugins/@nocobase/plugin-sample-shop-i18n/src/server/collections/categories.ts +++ /dev/null @@ -1,13 +0,0 @@ -export default { - name: 'categories', - fields: [ - { - type: 'string', - name: 'title', - }, - { - type: 'hasMany', - name: 'products', - }, - ], -}; diff --git a/packages/plugins/@nocobase/plugin-sample-shop-i18n/src/server/collections/orders.ts b/packages/plugins/@nocobase/plugin-sample-shop-i18n/src/server/collections/orders.ts deleted file mode 100644 index db3b0c9d8..000000000 --- a/packages/plugins/@nocobase/plugin-sample-shop-i18n/src/server/collections/orders.ts +++ /dev/null @@ -1,25 +0,0 @@ -export default { - name: 'orders', - fields: [ - { - type: 'belongsTo', - name: 'product', - }, - { - type: 'integer', - name: 'quantity', - }, - { - type: 'integer', - name: 'totalPrice', - }, - { - type: 'integer', - name: 'status', - }, - { - type: 'belongsTo', - name: 'user', - }, - ], -}; diff --git a/packages/plugins/@nocobase/plugin-sample-shop-i18n/src/server/collections/products.ts b/packages/plugins/@nocobase/plugin-sample-shop-i18n/src/server/collections/products.ts deleted file mode 100644 index 8fe4ab376..000000000 --- a/packages/plugins/@nocobase/plugin-sample-shop-i18n/src/server/collections/products.ts +++ /dev/null @@ -1,21 +0,0 @@ -export default { - name: 'products', - fields: [ - { - type: 'string', - name: 'title', - }, - { - type: 'integer', - name: 'price', - }, - { - type: 'boolean', - name: 'enabled', - }, - { - type: 'integer', - name: 'inventory', - }, - ], -}; diff --git a/packages/plugins/@nocobase/plugin-sample-shop-i18n/src/server/index.ts b/packages/plugins/@nocobase/plugin-sample-shop-i18n/src/server/index.ts deleted file mode 100644 index 7b4dbc1c3..000000000 --- a/packages/plugins/@nocobase/plugin-sample-shop-i18n/src/server/index.ts +++ /dev/null @@ -1,64 +0,0 @@ -import path from 'path'; - -import { InstallOptions, Plugin } from '@nocobase/server'; - -import zhCN from './locales/zh-CN'; - -const ns = '@nocobase/plugin-sample-shop-i18n'; - -export class ShopPlugin extends Plugin { - beforeLoad() { - // TODO - } - - async load() { - await this.importCollections(path.resolve(__dirname, 'collections')); - - this.app.i18n.addResources('zh-CN', ns, zhCN); - - this.app.resource({ - name: 'orders', - actions: { - async create(ctx, next) { - const productRepo = ctx.db.getRepository('products'); - const product = await productRepo.findById(ctx.action.params.values.productId); - - if (!product) { - return ctx.throw(404, ctx.t('No such product', { ns })); - } - - if (!product.enabled) { - return ctx.throw(400, ctx.t('Product not on sale', { ns })); - } - - if (!product.inventory) { - return ctx.throw(400, ctx.t('Out of stock', { ns })); - } - - const orderRepo = ctx.db.getRepository('orders'); - ctx.body = await orderRepo.create({ - values: { - productId: product.id, - quantity: 1, - totalPrice: product.price, - userId: ctx.state.currentUser.id, - }, - }); - - next(); - }, - }, - }); - - this.app.acl.allow('products', '*'); - this.app.acl.allow('categories', '*'); - this.app.acl.allow('orders', '*'); - } - - // eslint-disable-next-line @typescript-eslint/no-unused-vars - async install(options: InstallOptions) { - // TODO - } -} - -export default ShopPlugin; diff --git a/packages/plugins/@nocobase/plugin-sample-shop-i18n/src/server/locales/zh-CN.ts b/packages/plugins/@nocobase/plugin-sample-shop-i18n/src/server/locales/zh-CN.ts deleted file mode 100644 index 14285c411..000000000 --- a/packages/plugins/@nocobase/plugin-sample-shop-i18n/src/server/locales/zh-CN.ts +++ /dev/null @@ -1,5 +0,0 @@ -export default { - 'No such product': '商品不存在', - 'Product not on sale': '商品已下架', - 'Out of stock': '库存不足', -}; diff --git a/packages/plugins/@nocobase/plugin-sample-shop-i18n/src/server/models/.gitkeep b/packages/plugins/@nocobase/plugin-sample-shop-i18n/src/server/models/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/plugins/@nocobase/plugin-sample-shop-i18n/src/server/repositories/.gitkeep b/packages/plugins/@nocobase/plugin-sample-shop-i18n/src/server/repositories/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/plugins/@nocobase/plugin-sample-shop-modeling/.npmignore b/packages/plugins/@nocobase/plugin-sample-shop-modeling/.npmignore deleted file mode 100644 index c593fe9df..000000000 --- a/packages/plugins/@nocobase/plugin-sample-shop-modeling/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -/node_modules -/src \ No newline at end of file diff --git a/packages/plugins/@nocobase/plugin-sample-shop-modeling/README.md b/packages/plugins/@nocobase/plugin-sample-shop-modeling/README.md deleted file mode 100644 index c42c2d0d8..000000000 --- a/packages/plugins/@nocobase/plugin-sample-shop-modeling/README.md +++ /dev/null @@ -1,49 +0,0 @@ -# Modeling for simple shop scenario - -## Register - -```ts -yarn pm add sample-shop-modeling -``` - -## Activate - -```bash -yarn pm enable sample-shop-modeling -``` - -## Launch the app - -```bash -# for development -yarn dev - -# for production -yarn build -yarn start -``` - -## Connect to the API - -### Products API - -```bash -# create a product -curl -X POST -H "Content-Type: application/json" -d '{"title": "iPhone 14 Pro", "price": "7999", "enabled": true, "inventory": 10}' "http://localhost:13000/api/products" - -# list products -curl "http://localhost:13000/api/products" - -# get product which id=1 -curl "http://localhost:13000/api/products?filterByTk=1" -``` - -### Orders API - -```bash -# create a order -curl -X POST -H "Content-Type: application/json" -d '{"productId": 1, "quantity": 1, "totalPrice": "7999", "userId": 1}' 'http://localhost:13000/api/orders' - -# list orders which userId=1 with product -curl 'http://localhost:13000/api/orders?filter={"userId":1}&appends=product' -``` diff --git a/packages/plugins/@nocobase/plugin-sample-shop-modeling/client.d.ts b/packages/plugins/@nocobase/plugin-sample-shop-modeling/client.d.ts deleted file mode 100644 index 6c459cbac..000000000 --- a/packages/plugins/@nocobase/plugin-sample-shop-modeling/client.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './dist/client'; -export { default } from './dist/client'; diff --git a/packages/plugins/@nocobase/plugin-sample-shop-modeling/client.js b/packages/plugins/@nocobase/plugin-sample-shop-modeling/client.js deleted file mode 100644 index b6e3be70e..000000000 --- a/packages/plugins/@nocobase/plugin-sample-shop-modeling/client.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./dist/client/index.js'); diff --git a/packages/plugins/@nocobase/plugin-sample-shop-modeling/package.json b/packages/plugins/@nocobase/plugin-sample-shop-modeling/package.json deleted file mode 100644 index 718eb5bb4..000000000 --- a/packages/plugins/@nocobase/plugin-sample-shop-modeling/package.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "@nocobase/plugin-sample-shop-modeling", - "version": "0.19.0-alpha.3", - "main": "./dist/server/index.js", - "devDependencies": { - "nodejs-snowflake": "2.0.1" - }, - "peerDependencies": { - "@nocobase/client": "0.x", - "@nocobase/database": "0.x", - "@nocobase/server": "0.x", - "@nocobase/test": "0.x" - }, - "gitHead": "979a9c59a98c61a2287dd847580746a9b597cbde" -} diff --git a/packages/plugins/@nocobase/plugin-sample-shop-modeling/server.d.ts b/packages/plugins/@nocobase/plugin-sample-shop-modeling/server.d.ts deleted file mode 100644 index c41081ddc..000000000 --- a/packages/plugins/@nocobase/plugin-sample-shop-modeling/server.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './dist/server'; -export { default } from './dist/server'; diff --git a/packages/plugins/@nocobase/plugin-sample-shop-modeling/server.js b/packages/plugins/@nocobase/plugin-sample-shop-modeling/server.js deleted file mode 100644 index 972842039..000000000 --- a/packages/plugins/@nocobase/plugin-sample-shop-modeling/server.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./dist/server/index.js'); diff --git a/packages/plugins/@nocobase/plugin-sample-shop-modeling/src/client/index.tsx b/packages/plugins/@nocobase/plugin-sample-shop-modeling/src/client/index.tsx deleted file mode 100644 index 17a382632..000000000 --- a/packages/plugins/@nocobase/plugin-sample-shop-modeling/src/client/index.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import { Plugin } from '@nocobase/client'; - -class ShopModelingPlugin extends Plugin { - async load() {} -} - -export default ShopModelingPlugin; diff --git a/packages/plugins/@nocobase/plugin-sample-shop-modeling/src/index.ts b/packages/plugins/@nocobase/plugin-sample-shop-modeling/src/index.ts deleted file mode 100644 index 7e74612df..000000000 --- a/packages/plugins/@nocobase/plugin-sample-shop-modeling/src/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './server'; -export { default } from './server'; diff --git a/packages/plugins/@nocobase/plugin-sample-shop-modeling/src/server/actions/.gitkeep b/packages/plugins/@nocobase/plugin-sample-shop-modeling/src/server/actions/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/plugins/@nocobase/plugin-sample-shop-modeling/src/server/collections/.gitkeep b/packages/plugins/@nocobase/plugin-sample-shop-modeling/src/server/collections/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/plugins/@nocobase/plugin-sample-shop-modeling/src/server/collections/categories.ts b/packages/plugins/@nocobase/plugin-sample-shop-modeling/src/server/collections/categories.ts deleted file mode 100644 index 961526698..000000000 --- a/packages/plugins/@nocobase/plugin-sample-shop-modeling/src/server/collections/categories.ts +++ /dev/null @@ -1,13 +0,0 @@ -export default { - name: 'categories', - fields: [ - { - type: 'string', - name: 'title', - }, - { - type: 'hasMany', - name: 'products', - }, - ], -}; diff --git a/packages/plugins/@nocobase/plugin-sample-shop-modeling/src/server/collections/orders.ts b/packages/plugins/@nocobase/plugin-sample-shop-modeling/src/server/collections/orders.ts deleted file mode 100644 index 1a5c6c3e6..000000000 --- a/packages/plugins/@nocobase/plugin-sample-shop-modeling/src/server/collections/orders.ts +++ /dev/null @@ -1,30 +0,0 @@ -export default { - name: 'orders', - fields: [ - { - type: 'snowflake', - name: 'id', - primaryKey: true, - }, - { - type: 'belongsTo', - name: 'product', - }, - { - type: 'integer', - name: 'quantity', - }, - { - type: 'integer', - name: 'totalPrice', - }, - { - type: 'integer', - name: 'status', - }, - { - type: 'belongsTo', - name: 'user', - }, - ], -}; diff --git a/packages/plugins/@nocobase/plugin-sample-shop-modeling/src/server/collections/products.ts b/packages/plugins/@nocobase/plugin-sample-shop-modeling/src/server/collections/products.ts deleted file mode 100644 index 8fe4ab376..000000000 --- a/packages/plugins/@nocobase/plugin-sample-shop-modeling/src/server/collections/products.ts +++ /dev/null @@ -1,21 +0,0 @@ -export default { - name: 'products', - fields: [ - { - type: 'string', - name: 'title', - }, - { - type: 'integer', - name: 'price', - }, - { - type: 'boolean', - name: 'enabled', - }, - { - type: 'integer', - name: 'inventory', - }, - ], -}; diff --git a/packages/plugins/@nocobase/plugin-sample-shop-modeling/src/server/fields/SnowflakeField.ts b/packages/plugins/@nocobase/plugin-sample-shop-modeling/src/server/fields/SnowflakeField.ts deleted file mode 100644 index def63eb4a..000000000 --- a/packages/plugins/@nocobase/plugin-sample-shop-modeling/src/server/fields/SnowflakeField.ts +++ /dev/null @@ -1,43 +0,0 @@ -// 引入字段类型基类 -import { BaseColumnFieldOptions, DataTypes, Field } from '@nocobase/database'; -// 引入算法工具包 -import { Snowflake } from 'nodejs-snowflake'; - -export interface SnowflakeFieldOptions extends BaseColumnFieldOptions { - type: 'snowflake'; - epoch: number; - instanceId: number; -} - -export class SnowflakeField extends Field { - get dataType() { - return DataTypes.BIGINT; - } - - constructor(options: SnowflakeFieldOptions, context) { - super(options, context); - - const { - epoch: custom_epoch, - instanceId: instance_id = process.env.INSTANCE_ID ? Number.parseInt(process.env.INSTANCE_ID) : 0, - } = options; - this.generator = new Snowflake({ custom_epoch, instance_id }); - } - - setValue = (instance) => { - const { name } = this.options; - instance.set(name, this.generator.getUniqueID()); - }; - - bind() { - super.bind(); - this.on('beforeCreate', this.setValue); - } - - unbind() { - super.unbind(); - this.off('beforeCreate', this.setValue); - } -} - -export default SnowflakeField; diff --git a/packages/plugins/@nocobase/plugin-sample-shop-modeling/src/server/index.ts b/packages/plugins/@nocobase/plugin-sample-shop-modeling/src/server/index.ts deleted file mode 100644 index 8325d7287..000000000 --- a/packages/plugins/@nocobase/plugin-sample-shop-modeling/src/server/index.ts +++ /dev/null @@ -1,32 +0,0 @@ -import path from 'path'; - -import { InstallOptions, Plugin } from '@nocobase/server'; - -import SnowflakeField from './fields/SnowflakeField'; - -export class ShopPlugin extends Plugin { - afterAdd() { - this.db.registerFieldTypes({ - snowflake: SnowflakeField, - }); - } - - beforeLoad() { - // TODO - } - - async load() { - await this.importCollections(path.resolve(__dirname, 'collections')); - - this.app.acl.allow('products', '*'); - this.app.acl.allow('categories', '*'); - this.app.acl.allow('orders', '*'); - } - - // eslint-disable-next-line @typescript-eslint/no-unused-vars - async install(options: InstallOptions) { - // TODO - } -} - -export default ShopPlugin; diff --git a/packages/plugins/@nocobase/plugin-sample-shop-modeling/src/server/models/.gitkeep b/packages/plugins/@nocobase/plugin-sample-shop-modeling/src/server/models/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/plugins/@nocobase/plugin-sample-shop-modeling/src/server/repositories/.gitkeep b/packages/plugins/@nocobase/plugin-sample-shop-modeling/src/server/repositories/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/presets/nocobase/package.json b/packages/presets/nocobase/package.json index b9b231ed5..15423af33 100644 --- a/packages/presets/nocobase/package.json +++ b/packages/presets/nocobase/package.json @@ -41,7 +41,6 @@ "@nocobase/plugin-multi-app-share-collection": "0.19.0-alpha.3", "@nocobase/plugin-oidc": "0.19.0-alpha.3", "@nocobase/plugin-saml": "0.19.0-alpha.3", - "@nocobase/plugin-sample-hello": "0.19.0-alpha.3", "@nocobase/plugin-sequence-field": "0.19.0-alpha.3", "@nocobase/plugin-sms-auth": "0.19.0-alpha.3", "@nocobase/plugin-snapshot-field": "0.19.0-alpha.3", diff --git a/packages/presets/nocobase/src/server/index.ts b/packages/presets/nocobase/src/server/index.ts index 1402e9c16..41a7d5566 100644 --- a/packages/presets/nocobase/src/server/index.ts +++ b/packages/presets/nocobase/src/server/index.ts @@ -47,7 +47,6 @@ export class PresetNocoBase extends Plugin { localPlugins = [ 'multi-app-manager>=0.7.0-alpha.1', 'audit-logs>=0.7.1-alpha.4', - 'sample-hello>=0.8.0-alpha.4', 'map>=0.8.1-alpha.3', 'saml>=0.8.1-alpha.3', 'snapshot-field>=0.8.1-alpha.3', diff --git a/packages/presets/nocobase/src/server/migrations/20240116154734-remove-sample-hello.ts b/packages/presets/nocobase/src/server/migrations/20240116154734-remove-sample-hello.ts new file mode 100644 index 000000000..9d9f2edfe --- /dev/null +++ b/packages/presets/nocobase/src/server/migrations/20240116154734-remove-sample-hello.ts @@ -0,0 +1,14 @@ +import { Migration } from '@nocobase/server'; + +export default class extends Migration { + on = 'afterSync'; // 'beforeLoad' or 'afterLoad' + appVersion = '<0.19.0-alpha.4'; + + async up() { + await this.pm.repository.destroy({ + filter: { + name: ['sample-hello'], + }, + }); + } +} diff --git a/yarn.lock b/yarn.lock index 459ecafee..f6ac61e71 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8242,11 +8242,6 @@ async-mutex@^0.3.2: dependencies: tslib "^2.3.1" -async-ratelimiter@^1.3.0: - version "1.3.13" - resolved "https://registry.npmmirror.com/async-ratelimiter/-/async-ratelimiter-1.3.13.tgz#51c0056752751b7664ea5d9b3cfe20b8d081538f" - integrity sha512-eZDuN5XrlFwJdK0xxVS03Xj+LW9DkBi34RTVUhnbHoO+jFyI8I026y6x0KeRqTKay90wzl7eUC/HuKPm0U2ZFA== - async-settle@^1.0.0: version "1.0.0" resolved "https://registry.npmmirror.com/async-settle/-/async-settle-1.0.0.tgz#1d0a914bb02575bec8a8f3a74e5080f72b2c0c6b" @@ -11854,22 +11849,6 @@ ecdsa-sig-formatter@1.0.11: dependencies: safe-buffer "^5.0.1" -echarts-for-react@^3.0.2: - version "3.0.2" - resolved "https://registry.npmmirror.com/echarts-for-react/-/echarts-for-react-3.0.2.tgz#ac5859157048a1066d4553e34b328abb24f2b7c1" - integrity sha512-DRwIiTzx8JfwPOVgGttDytBqdp5VzCSyMRIxubgU/g2n9y3VLUmF2FK7Icmg/sNVkv4+rktmrLN9w22U2yy3fA== - dependencies: - fast-deep-equal "^3.1.3" - size-sensor "^1.0.1" - -echarts@^5.4.3: - version "5.4.3" - resolved "https://registry.npmmirror.com/echarts/-/echarts-5.4.3.tgz#f5522ef24419164903eedcfd2b506c6fc91fb20c" - integrity sha512-mYKxLxhzy6zyTi/FaEbJMOZU1ULGEQHaeIeuMR5L+JnJTpz+YR03mnnpBhbR4+UYJAgiXgpyTVLffPAjOTLkZA== - dependencies: - tslib "2.3.0" - zrender "5.4.4" - editions@^2.2.0: version "2.3.1" resolved "https://registry.npmmirror.com/editions/-/editions-2.3.1.tgz#3bc9962f1978e801312fbd0aebfed63b49bfe698" @@ -16302,15 +16281,6 @@ koa-convert@^2.0.0: co "^4.6.0" koa-compose "^4.1.0" -koa-ratelimit@^5.0.1: - version "5.1.0" - resolved "https://registry.npmmirror.com/koa-ratelimit/-/koa-ratelimit-5.1.0.tgz#4686e10a4ffd3c0b3b9b9416d4634b706a1d4c52" - integrity sha512-bXz1UkF9l0PTaYfj5bDCX85NFWA1W3/miBMpZjS+BEKajNPHQaqgaMDwZMM2RdbLGTYRi+mHIOjNTUjTdWjhKA== - dependencies: - async-ratelimiter "^1.3.0" - debug "^4.1.1" - ms "^2.1.2" - koa-send@^5.0.0, koa-send@^5.0.1: version "5.0.1" resolved "https://registry.npmmirror.com/koa-send/-/koa-send-5.0.1.tgz#39dceebfafb395d0d60beaffba3a70b4f543fe79" @@ -18237,7 +18207,7 @@ ms@2.1.2: resolved "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@^2.0.0, ms@^2.1.1, ms@^2.1.2: +ms@^2.0.0, ms@^2.1.1: version "2.1.3" resolved "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== @@ -18600,11 +18570,6 @@ node-xlsx@^0.16.1: buffer-from "^1.1.1" xlsx "^0.17.0" -nodejs-snowflake@2.0.1: - version "2.0.1" - resolved "https://registry.npmmirror.com/nodejs-snowflake/-/nodejs-snowflake-2.0.1.tgz#d82fb1c7398404c5ac984d6f1cdfb1b5aef7bd80" - integrity sha512-zMfDorNNsJm1OWWx/OUUGVT0bQ3TwC2ti4URD8UjnpffVLtLpy3eBDIaV5TnLs91YrRhwBD6L0StqU6YtnZt9A== - nodemailer-mock@^1.5.11: version "1.5.12" resolved "https://registry.npmmirror.com/nodemailer-mock/-/nodemailer-mock-1.5.12.tgz#607ec52a46a05fc1ed96585d830aad26407c7696" @@ -24590,11 +24555,6 @@ tslib@1.9.3: resolved "https://registry.npmmirror.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ== -tslib@2.3.0: - version "2.3.0" - resolved "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz#803b8cdab3e12ba581a4ca41c8839bbb0dacb09e" - integrity sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg== - tslib@^1.10.0, tslib@^1.11.1, tslib@^1.8.1, tslib@^1.9.0: version "1.14.1" resolved "https://registry.npmmirror.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" @@ -26386,13 +26346,6 @@ zip-stream@^4.1.0: compress-commons "^4.1.2" readable-stream "^3.6.0" -zrender@5.4.4: - version "5.4.4" - resolved "https://registry.npmmirror.com/zrender/-/zrender-5.4.4.tgz#8854f1d95ecc82cf8912f5a11f86657cb8c9e261" - integrity sha512-0VxCNJ7AGOMCWeHVyTrGzUgrK4asT4ml9PEkeGirAkKNYXYzoPJCLvmyfdoOXcjTHPs10OZVMfD1Rwg16AZyYw== - dependencies: - tslib "2.3.0" - zustand@^4.4.1: version "4.4.7" resolved "https://registry.npmmirror.com/zustand/-/zustand-4.4.7.tgz#355406be6b11ab335f59a66d2cf9815e8f24038c"