@nocobase/server 0.5.0-alpha.17 → 0.5.0-alpha.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -12,6 +12,7 @@ export interface ApplicationOptions {
12
12
  bodyParser?: any;
13
13
  cors?: any;
14
14
  dataWrapping?: boolean;
15
+ registerActions?: boolean;
15
16
  }
16
17
  interface DefaultState {
17
18
  currentUser?: any;
@@ -44,6 +45,7 @@ export declare class Application<StateT = DefaultState, ContextT = DefaultContex
44
45
  resource(options: ResourceOptions): import("@nocobase/resourcer").Resource;
45
46
  actions(handlers: any, options?: ActionsOptions): void;
46
47
  command(nameAndArgs: string, opts?: CommandOptions): Command;
48
+ findCommand(name: string): Command;
47
49
  plugin(options?: PluginType | PluginOptions, ext?: PluginOptions): Plugin;
48
50
  load(): Promise<void>;
49
51
  emitAsync(event: string | symbol, ...args: any[]): Promise<boolean>;
@@ -1 +1 @@
1
- {"version":3,"sources":["application.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAC;AAGtB,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,QAAQ,EAAE,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC7E,OAAO,SAAS,EAAE,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEjE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAG7D,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,UAAU,YAAY;IACpB,WAAW,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,UAAU,cAAc;IACtB,EAAE,EAAE,QAAQ,CAAC;IACb,SAAS,EAAE,SAAS,CAAC;IACrB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,UAAU,iBAAiB;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,UAAU,cAAc;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,qBAAa,WAAW,CACtB,MAAM,GAAG,YAAY,EACrB,QAAQ,GAAG,cAAc,CACzB,SAAQ,GAAG;IACX,SAAgB,EAAE,EAAE,QAAQ,CAAC;IAE7B,SAAgB,SAAS,EAAE,SAAS,CAAC;IAErC,SAAgB,GAAG,EAAE,OAAO,CAAC;IAE7B,SAAS,CAAC,OAAO,sBAA6B;gBAElC,OAAO,EAAE,kBAAkB;IA0FvC,GAAG,CAAC,SAAS,GAAG,EAAE,EAAE,WAAW,GAAG,EAAE,EAClC,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC,MAAM,GAAG,SAAS,EAAE,QAAQ,GAAG,WAAW,CAAC,EACtE,OAAO,CAAC,EAAE,iBAAiB;IAM7B,UAAU,CAAC,OAAO,EAAE,YAAY;IAIhC,QAAQ,CAAC,OAAO,EAAE,eAAe;IAIjC,OAAO,CAAC,QAAQ,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,cAAc;IAI/C,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,cAAc;IAIlD,MAAM,CAAC,OAAO,CAAC,EAAE,UAAU,GAAG,aAAa,EAAE,GAAG,CAAC,EAAE,aAAa,GAAG,MAAM;IA2CnE,IAAI;IAUJ,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAmDnE,KAAK,CAAC,IAAI,WAAe;IAKzB,OAAO;CAGd;AAED,eAAe,WAAW,CAAC","file":"application.d.ts","sourcesContent":["import Koa from 'koa';\nimport cors from '@koa/cors';\nimport bodyParser from 'koa-bodyparser';\nimport { Command, CommandOptions } from 'commander';\nimport Database, { DatabaseOptions, TableOptions } from '@nocobase/database';\nimport Resourcer, { ResourceOptions } from '@nocobase/resourcer';\nimport { dataWrapping, table2resource } from './middlewares';\nimport { PluginType, Plugin, PluginOptions } from './plugin';\nimport { registerActions } from '@nocobase/actions';\n\nexport interface ResourcerOptions {\n prefix?: string;\n}\n\nexport interface ApplicationOptions {\n database?: DatabaseOptions;\n resourcer?: ResourcerOptions;\n bodyParser?: any;\n cors?: any;\n dataWrapping?: boolean;\n}\n\ninterface DefaultState {\n currentUser?: any;\n [key: string]: any;\n}\n\ninterface DefaultContext {\n db: Database;\n resourcer: Resourcer;\n [key: string]: any;\n}\n\ninterface MiddlewareOptions {\n name?: string;\n resourceName?: string;\n resourceNames?: string[];\n insertBefore?: string;\n insertAfter?: string;\n}\n\ninterface ActionsOptions {\n resourceName?: string;\n resourceNames?: string[];\n}\n\nexport class Application<\n StateT = DefaultState,\n ContextT = DefaultContext,\n> extends Koa {\n public readonly db: Database;\n\n public readonly resourcer: Resourcer;\n\n public readonly cli: Command;\n\n protected plugins = new Map<string, Plugin>();\n\n constructor(options: ApplicationOptions) {\n super();\n\n if (options.database instanceof Database) {\n this.db = options.database;\n } else {\n this.db = new Database(options.database);\n }\n\n this.resourcer = new Resourcer({ ...options.resourcer });\n this.cli = new Command();\n\n if (options.bodyParser !== false) {\n this.use(\n bodyParser({\n ...options.bodyParser,\n }),\n );\n }\n\n this.use(\n cors({\n exposeHeaders: ['content-disposition'],\n ...options.cors,\n }),\n );\n\n this.use<DefaultState, DefaultContext>(async (ctx, next) => {\n ctx.db = this.db;\n ctx.resourcer = this.resourcer;\n await next();\n });\n\n if (options.dataWrapping !== false) {\n this.use(dataWrapping());\n }\n\n this.use(table2resource());\n this.use(this.resourcer.restApiMiddleware());\n\n registerActions(this);\n\n this.cli\n .command('db:sync')\n .option('-f, --force')\n .action(async (...args) => {\n console.log('db sync...');\n const cli = args.pop();\n const force = cli.opts()?.force;\n await this.db.sync(\n force\n ? {\n force: true,\n alter: {\n drop: true,\n },\n }\n : {},\n );\n await this.destroy();\n });\n\n this.cli\n .command('init')\n // .option('-f, --force')\n .action(async (...args) => {\n const cli = args.pop();\n await this.db.sync({\n force: true,\n alter: {\n drop: true,\n },\n });\n await this.emitAsync('db.init');\n await this.destroy();\n });\n\n this.cli\n .command('start')\n .option('-p, --port [port]')\n .action(async (...args) => {\n const cli = args.pop();\n console.log(args);\n const opts = cli.opts();\n await this.emitAsync('beforeStart');\n this.listen(opts.port || 3000);\n console.log(`http://localhost:${opts.port || 3000}/`);\n });\n }\n\n use<NewStateT = {}, NewContextT = {}>(\n middleware: Koa.Middleware<StateT & NewStateT, ContextT & NewContextT>,\n options?: MiddlewareOptions,\n ) {\n // @ts-ignore\n return super.use(middleware);\n }\n\n collection(options: TableOptions) {\n return this.db.table(options);\n }\n\n resource(options: ResourceOptions) {\n return this.resourcer.define(options);\n }\n\n actions(handlers: any, options?: ActionsOptions) {\n return this.resourcer.registerActions(handlers);\n }\n\n command(nameAndArgs: string, opts?: CommandOptions) {\n return this.cli.command(nameAndArgs, opts);\n }\n\n plugin(options?: PluginType | PluginOptions, ext?: PluginOptions): Plugin {\n if (typeof options === 'string') {\n return this.plugin(require(options).default, ext);\n }\n let instance: Plugin;\n if (typeof options === 'function') {\n try {\n // @ts-ignore\n instance = new options({\n name: options.name,\n ...ext,\n app: this,\n });\n if (!(instance instanceof Plugin)) {\n throw new Error('plugin must be instanceof Plugin');\n }\n } catch (err) {\n // console.log(err);\n instance = new Plugin({\n name: options.name,\n ...ext,\n // @ts-ignore\n load: options,\n app: this,\n });\n }\n } else if (typeof options === 'object') {\n const plugin = options.plugin || Plugin;\n instance = new plugin({\n name: options.plugin ? plugin.name : undefined,\n ...options,\n ...ext,\n app: this,\n });\n }\n const name = instance.getName();\n if (this.plugins.has(name)) {\n throw new Error(`plugin name [${name}] is repeated`);\n }\n this.plugins.set(name, instance);\n return instance;\n }\n\n async load() {\n await this.emitAsync('plugins.beforeLoad');\n for (const [name, plugin] of this.plugins) {\n await this.emitAsync(`plugins.${name}.beforeLoad`);\n await plugin.load();\n await this.emitAsync(`plugins.${name}.afterLoad`);\n }\n await this.emitAsync('plugins.afterLoad');\n }\n\n async emitAsync(event: string | symbol, ...args: any[]): Promise<boolean> {\n // @ts-ignore\n const events = this._events;\n let callbacks = events[event];\n if (!callbacks) {\n return false;\n }\n // helper function to reuse as much code as possible\n const run = (cb) => {\n switch (args.length) {\n // fast cases\n case 0:\n cb = cb.call(this);\n break;\n case 1:\n cb = cb.call(this, args[0]);\n break;\n case 2:\n cb = cb.call(this, args[0], args[1]);\n break;\n case 3:\n cb = cb.call(this, args[0], args[1], args[2]);\n break;\n // slower\n default:\n cb = cb.apply(this, args);\n }\n\n if (cb && (cb instanceof Promise || typeof cb.then === 'function')) {\n return cb;\n }\n\n return Promise.resolve(true);\n };\n\n if (typeof callbacks === 'function') {\n await run(callbacks);\n } else if (typeof callbacks === 'object') {\n callbacks = callbacks.slice().filter(Boolean);\n await callbacks.reduce((prev, next) => {\n return prev.then((res) => {\n return run(next).then((result) =>\n Promise.resolve(res.concat(result)),\n );\n });\n }, Promise.resolve([]));\n }\n\n return true;\n }\n\n async parse(argv = process.argv) {\n await this.load();\n return this.cli.parseAsync(argv);\n }\n\n async destroy() {\n await this.db.close();\n }\n}\n\nexport default Application;\n"]}
1
+ {"version":3,"sources":["application.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,QAAQ,EAAE,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC7E,OAAO,SAAS,EAAE,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAS7D,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,UAAU,YAAY;IACpB,WAAW,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,UAAU,cAAc;IACtB,EAAE,EAAE,QAAQ,CAAC;IACb,SAAS,EAAE,SAAS,CAAC;IACrB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,UAAU,iBAAiB;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,UAAU,cAAc;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,qBAAa,WAAW,CACtB,MAAM,GAAG,YAAY,EACrB,QAAQ,GAAG,cAAc,CACzB,SAAQ,GAAG;IACX,SAAgB,EAAE,EAAE,QAAQ,CAAC;IAE7B,SAAgB,SAAS,EAAE,SAAS,CAAC;IAErC,SAAgB,GAAG,EAAE,OAAO,CAAC;IAE7B,SAAS,CAAC,OAAO,sBAA6B;gBAElC,OAAO,EAAE,kBAAkB;IAavC,GAAG,CAAC,SAAS,GAAG,EAAE,EAAE,WAAW,GAAG,EAAE,EAClC,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC,MAAM,GAAG,SAAS,EAAE,QAAQ,GAAG,WAAW,CAAC,EACtE,OAAO,CAAC,EAAE,iBAAiB;IAM7B,UAAU,CAAC,OAAO,EAAE,YAAY;IAIhC,QAAQ,CAAC,OAAO,EAAE,eAAe;IAIjC,OAAO,CAAC,QAAQ,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,cAAc;IAI/C,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,cAAc;IAIlD,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIlC,MAAM,CAAC,OAAO,CAAC,EAAE,UAAU,GAAG,aAAa,EAAE,GAAG,CAAC,EAAE,aAAa,GAAG,MAAM;IA2CnE,IAAI;IAUJ,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAmDnE,KAAK,CAAC,IAAI,WAAe;IAKzB,OAAO;CAGd;AAED,eAAe,WAAW,CAAC","file":"application.d.ts","sourcesContent":["import Koa from 'koa';\nimport { Command, CommandOptions } from 'commander';\nimport Database, { DatabaseOptions, TableOptions } from '@nocobase/database';\nimport Resourcer, { ResourceOptions } from '@nocobase/resourcer';\nimport { PluginType, Plugin, PluginOptions } from './plugin';\nimport { registerActions } from '@nocobase/actions';\nimport {\n createCli,\n createDatabase,\n createResourcer,\n registerMiddlewares,\n} from './helper';\n\nexport interface ResourcerOptions {\n prefix?: string;\n}\n\nexport interface ApplicationOptions {\n database?: DatabaseOptions;\n resourcer?: ResourcerOptions;\n bodyParser?: any;\n cors?: any;\n dataWrapping?: boolean;\n registerActions?: boolean;\n}\n\ninterface DefaultState {\n currentUser?: any;\n [key: string]: any;\n}\n\ninterface DefaultContext {\n db: Database;\n resourcer: Resourcer;\n [key: string]: any;\n}\n\ninterface MiddlewareOptions {\n name?: string;\n resourceName?: string;\n resourceNames?: string[];\n insertBefore?: string;\n insertAfter?: string;\n}\n\ninterface ActionsOptions {\n resourceName?: string;\n resourceNames?: string[];\n}\n\nexport class Application<\n StateT = DefaultState,\n ContextT = DefaultContext\n> extends Koa {\n public readonly db: Database;\n\n public readonly resourcer: Resourcer;\n\n public readonly cli: Command;\n\n protected plugins = new Map<string, Plugin>();\n\n constructor(options: ApplicationOptions) {\n super();\n\n this.db = createDatabase(options);\n this.resourcer = createResourcer(options);\n this.cli = createCli(this, options);\n\n registerMiddlewares(this, options);\n if (options.registerActions !== false) {\n registerActions(this);\n }\n }\n\n use<NewStateT = {}, NewContextT = {}>(\n middleware: Koa.Middleware<StateT & NewStateT, ContextT & NewContextT>,\n options?: MiddlewareOptions,\n ) {\n // @ts-ignore\n return super.use(middleware);\n }\n\n collection(options: TableOptions) {\n return this.db.table(options);\n }\n\n resource(options: ResourceOptions) {\n return this.resourcer.define(options);\n }\n\n actions(handlers: any, options?: ActionsOptions) {\n return this.resourcer.registerActions(handlers);\n }\n\n command(nameAndArgs: string, opts?: CommandOptions) {\n return this.cli.command(nameAndArgs, opts);\n }\n\n findCommand(name: string): Command {\n return (this.cli as any)._findCommand(name);\n }\n\n plugin(options?: PluginType | PluginOptions, ext?: PluginOptions): Plugin {\n if (typeof options === 'string') {\n return this.plugin(require(options).default, ext);\n }\n let instance: Plugin;\n if (typeof options === 'function') {\n try {\n // @ts-ignore\n instance = new options({\n name: options.name,\n ...ext,\n app: this,\n });\n if (!(instance instanceof Plugin)) {\n throw new Error('plugin must be instanceof Plugin');\n }\n } catch (err) {\n // console.log(err);\n instance = new Plugin({\n name: options.name,\n ...ext,\n // @ts-ignore\n load: options,\n app: this,\n });\n }\n } else if (typeof options === 'object') {\n const plugin = options.plugin || Plugin;\n instance = new plugin({\n name: options.plugin ? plugin.name : undefined,\n ...options,\n ...ext,\n app: this,\n });\n }\n const name = instance.getName();\n if (this.plugins.has(name)) {\n throw new Error(`plugin name [${name}] is repeated`);\n }\n this.plugins.set(name, instance);\n return instance;\n }\n\n async load() {\n await this.emitAsync('plugins.beforeLoad');\n for (const [name, plugin] of this.plugins) {\n await this.emitAsync(`plugins.${name}.beforeLoad`);\n await plugin.load();\n await this.emitAsync(`plugins.${name}.afterLoad`);\n }\n await this.emitAsync('plugins.afterLoad');\n }\n\n async emitAsync(event: string | symbol, ...args: any[]): Promise<boolean> {\n // @ts-ignore\n const events = this._events;\n let callbacks = events[event];\n if (!callbacks) {\n return false;\n }\n // helper function to reuse as much code as possible\n const run = (cb) => {\n switch (args.length) {\n // fast cases\n case 0:\n cb = cb.call(this);\n break;\n case 1:\n cb = cb.call(this, args[0]);\n break;\n case 2:\n cb = cb.call(this, args[0], args[1]);\n break;\n case 3:\n cb = cb.call(this, args[0], args[1], args[2]);\n break;\n // slower\n default:\n cb = cb.apply(this, args);\n }\n\n if (cb && (cb instanceof Promise || typeof cb.then === 'function')) {\n return cb;\n }\n\n return Promise.resolve(true);\n };\n\n if (typeof callbacks === 'function') {\n await run(callbacks);\n } else if (typeof callbacks === 'object') {\n callbacks = callbacks.slice().filter(Boolean);\n await callbacks.reduce((prev, next) => {\n return prev.then((res) => {\n return run(next).then((result) =>\n Promise.resolve(res.concat(result)),\n );\n });\n }, Promise.resolve([]));\n }\n\n return true;\n }\n\n async parse(argv = process.argv) {\n await this.load();\n return this.cli.parseAsync(argv);\n }\n\n async destroy() {\n await this.db.close();\n }\n}\n\nexport default Application;\n"]}
@@ -71,89 +71,24 @@ exports.Application = void 0;
71
71
 
72
72
  const koa_1 = __importDefault(require("koa"));
73
73
 
74
- const cors_1 = __importDefault(require("@koa/cors"));
75
-
76
- const koa_bodyparser_1 = __importDefault(require("koa-bodyparser"));
77
-
78
- const commander_1 = require("commander");
79
-
80
- const database_1 = __importDefault(require("@nocobase/database"));
81
-
82
- const resourcer_1 = __importDefault(require("@nocobase/resourcer"));
83
-
84
- const middlewares_1 = require("./middlewares");
85
-
86
74
  const plugin_1 = require("./plugin");
87
75
 
88
76
  const actions_1 = require("@nocobase/actions");
89
77
 
78
+ const helper_1 = require("./helper");
79
+
90
80
  class Application extends koa_1.default {
91
81
  constructor(options) {
92
82
  super();
93
83
  this.plugins = new Map();
84
+ this.db = helper_1.createDatabase(options);
85
+ this.resourcer = helper_1.createResourcer(options);
86
+ this.cli = helper_1.createCli(this, options);
87
+ helper_1.registerMiddlewares(this, options);
94
88
 
95
- if (options.database instanceof database_1.default) {
96
- this.db = options.database;
97
- } else {
98
- this.db = new database_1.default(options.database);
89
+ if (options.registerActions !== false) {
90
+ actions_1.registerActions(this);
99
91
  }
100
-
101
- this.resourcer = new resourcer_1.default(Object.assign({}, options.resourcer));
102
- this.cli = new commander_1.Command();
103
-
104
- if (options.bodyParser !== false) {
105
- this.use(koa_bodyparser_1.default(Object.assign({}, options.bodyParser)));
106
- }
107
-
108
- this.use(cors_1.default(Object.assign({
109
- exposeHeaders: ['content-disposition']
110
- }, options.cors)));
111
- this.use((ctx, next) => __awaiter(this, void 0, void 0, function* () {
112
- ctx.db = this.db;
113
- ctx.resourcer = this.resourcer;
114
- yield next();
115
- }));
116
-
117
- if (options.dataWrapping !== false) {
118
- this.use(middlewares_1.dataWrapping());
119
- }
120
-
121
- this.use(middlewares_1.table2resource());
122
- this.use(this.resourcer.restApiMiddleware());
123
- actions_1.registerActions(this);
124
- this.cli.command('db:sync').option('-f, --force').action((...args) => __awaiter(this, void 0, void 0, function* () {
125
- var _a;
126
-
127
- console.log('db sync...');
128
- const cli = args.pop();
129
- const force = (_a = cli.opts()) === null || _a === void 0 ? void 0 : _a.force;
130
- yield this.db.sync(force ? {
131
- force: true,
132
- alter: {
133
- drop: true
134
- }
135
- } : {});
136
- yield this.destroy();
137
- }));
138
- this.cli.command('init').action((...args) => __awaiter(this, void 0, void 0, function* () {
139
- const cli = args.pop();
140
- yield this.db.sync({
141
- force: true,
142
- alter: {
143
- drop: true
144
- }
145
- });
146
- yield this.emitAsync('db.init');
147
- yield this.destroy();
148
- }));
149
- this.cli.command('start').option('-p, --port [port]').action((...args) => __awaiter(this, void 0, void 0, function* () {
150
- const cli = args.pop();
151
- console.log(args);
152
- const opts = cli.opts();
153
- yield this.emitAsync('beforeStart');
154
- this.listen(opts.port || 3000);
155
- console.log(`http://localhost:${opts.port || 3000}/`);
156
- }));
157
92
  }
158
93
 
159
94
  use(middleware, options) {
@@ -176,6 +111,10 @@ class Application extends koa_1.default {
176
111
  return this.cli.command(nameAndArgs, opts);
177
112
  }
178
113
 
114
+ findCommand(name) {
115
+ return this.cli._findCommand(name);
116
+ }
117
+
179
118
  plugin(options, ext) {
180
119
  if (typeof options === 'string') {
181
120
  return this.plugin(require(options).default, ext);
@@ -1 +1 @@
1
- {"version":3,"sources":["application.ts"],"names":[],"mappings":"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","file":"application.js","sourcesContent":["import Koa from 'koa';\nimport cors from '@koa/cors';\nimport bodyParser from 'koa-bodyparser';\nimport { Command, CommandOptions } from 'commander';\nimport Database, { DatabaseOptions, TableOptions } from '@nocobase/database';\nimport Resourcer, { ResourceOptions } from '@nocobase/resourcer';\nimport { dataWrapping, table2resource } from './middlewares';\nimport { PluginType, Plugin, PluginOptions } from './plugin';\nimport { registerActions } from '@nocobase/actions';\n\nexport interface ResourcerOptions {\n prefix?: string;\n}\n\nexport interface ApplicationOptions {\n database?: DatabaseOptions;\n resourcer?: ResourcerOptions;\n bodyParser?: any;\n cors?: any;\n dataWrapping?: boolean;\n}\n\ninterface DefaultState {\n currentUser?: any;\n [key: string]: any;\n}\n\ninterface DefaultContext {\n db: Database;\n resourcer: Resourcer;\n [key: string]: any;\n}\n\ninterface MiddlewareOptions {\n name?: string;\n resourceName?: string;\n resourceNames?: string[];\n insertBefore?: string;\n insertAfter?: string;\n}\n\ninterface ActionsOptions {\n resourceName?: string;\n resourceNames?: string[];\n}\n\nexport class Application<\n StateT = DefaultState,\n ContextT = DefaultContext,\n> extends Koa {\n public readonly db: Database;\n\n public readonly resourcer: Resourcer;\n\n public readonly cli: Command;\n\n protected plugins = new Map<string, Plugin>();\n\n constructor(options: ApplicationOptions) {\n super();\n\n if (options.database instanceof Database) {\n this.db = options.database;\n } else {\n this.db = new Database(options.database);\n }\n\n this.resourcer = new Resourcer({ ...options.resourcer });\n this.cli = new Command();\n\n if (options.bodyParser !== false) {\n this.use(\n bodyParser({\n ...options.bodyParser,\n }),\n );\n }\n\n this.use(\n cors({\n exposeHeaders: ['content-disposition'],\n ...options.cors,\n }),\n );\n\n this.use<DefaultState, DefaultContext>(async (ctx, next) => {\n ctx.db = this.db;\n ctx.resourcer = this.resourcer;\n await next();\n });\n\n if (options.dataWrapping !== false) {\n this.use(dataWrapping());\n }\n\n this.use(table2resource());\n this.use(this.resourcer.restApiMiddleware());\n\n registerActions(this);\n\n this.cli\n .command('db:sync')\n .option('-f, --force')\n .action(async (...args) => {\n console.log('db sync...');\n const cli = args.pop();\n const force = cli.opts()?.force;\n await this.db.sync(\n force\n ? {\n force: true,\n alter: {\n drop: true,\n },\n }\n : {},\n );\n await this.destroy();\n });\n\n this.cli\n .command('init')\n // .option('-f, --force')\n .action(async (...args) => {\n const cli = args.pop();\n await this.db.sync({\n force: true,\n alter: {\n drop: true,\n },\n });\n await this.emitAsync('db.init');\n await this.destroy();\n });\n\n this.cli\n .command('start')\n .option('-p, --port [port]')\n .action(async (...args) => {\n const cli = args.pop();\n console.log(args);\n const opts = cli.opts();\n await this.emitAsync('beforeStart');\n this.listen(opts.port || 3000);\n console.log(`http://localhost:${opts.port || 3000}/`);\n });\n }\n\n use<NewStateT = {}, NewContextT = {}>(\n middleware: Koa.Middleware<StateT & NewStateT, ContextT & NewContextT>,\n options?: MiddlewareOptions,\n ) {\n // @ts-ignore\n return super.use(middleware);\n }\n\n collection(options: TableOptions) {\n return this.db.table(options);\n }\n\n resource(options: ResourceOptions) {\n return this.resourcer.define(options);\n }\n\n actions(handlers: any, options?: ActionsOptions) {\n return this.resourcer.registerActions(handlers);\n }\n\n command(nameAndArgs: string, opts?: CommandOptions) {\n return this.cli.command(nameAndArgs, opts);\n }\n\n plugin(options?: PluginType | PluginOptions, ext?: PluginOptions): Plugin {\n if (typeof options === 'string') {\n return this.plugin(require(options).default, ext);\n }\n let instance: Plugin;\n if (typeof options === 'function') {\n try {\n // @ts-ignore\n instance = new options({\n name: options.name,\n ...ext,\n app: this,\n });\n if (!(instance instanceof Plugin)) {\n throw new Error('plugin must be instanceof Plugin');\n }\n } catch (err) {\n // console.log(err);\n instance = new Plugin({\n name: options.name,\n ...ext,\n // @ts-ignore\n load: options,\n app: this,\n });\n }\n } else if (typeof options === 'object') {\n const plugin = options.plugin || Plugin;\n instance = new plugin({\n name: options.plugin ? plugin.name : undefined,\n ...options,\n ...ext,\n app: this,\n });\n }\n const name = instance.getName();\n if (this.plugins.has(name)) {\n throw new Error(`plugin name [${name}] is repeated`);\n }\n this.plugins.set(name, instance);\n return instance;\n }\n\n async load() {\n await this.emitAsync('plugins.beforeLoad');\n for (const [name, plugin] of this.plugins) {\n await this.emitAsync(`plugins.${name}.beforeLoad`);\n await plugin.load();\n await this.emitAsync(`plugins.${name}.afterLoad`);\n }\n await this.emitAsync('plugins.afterLoad');\n }\n\n async emitAsync(event: string | symbol, ...args: any[]): Promise<boolean> {\n // @ts-ignore\n const events = this._events;\n let callbacks = events[event];\n if (!callbacks) {\n return false;\n }\n // helper function to reuse as much code as possible\n const run = (cb) => {\n switch (args.length) {\n // fast cases\n case 0:\n cb = cb.call(this);\n break;\n case 1:\n cb = cb.call(this, args[0]);\n break;\n case 2:\n cb = cb.call(this, args[0], args[1]);\n break;\n case 3:\n cb = cb.call(this, args[0], args[1], args[2]);\n break;\n // slower\n default:\n cb = cb.apply(this, args);\n }\n\n if (cb && (cb instanceof Promise || typeof cb.then === 'function')) {\n return cb;\n }\n\n return Promise.resolve(true);\n };\n\n if (typeof callbacks === 'function') {\n await run(callbacks);\n } else if (typeof callbacks === 'object') {\n callbacks = callbacks.slice().filter(Boolean);\n await callbacks.reduce((prev, next) => {\n return prev.then((res) => {\n return run(next).then((result) =>\n Promise.resolve(res.concat(result)),\n );\n });\n }, Promise.resolve([]));\n }\n\n return true;\n }\n\n async parse(argv = process.argv) {\n await this.load();\n return this.cli.parseAsync(argv);\n }\n\n async destroy() {\n await this.db.close();\n }\n}\n\nexport default Application;\n"]}
1
+ {"version":3,"sources":["application.ts"],"names":[],"mappings":"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","file":"application.js","sourcesContent":["import Koa from 'koa';\nimport { Command, CommandOptions } from 'commander';\nimport Database, { DatabaseOptions, TableOptions } from '@nocobase/database';\nimport Resourcer, { ResourceOptions } from '@nocobase/resourcer';\nimport { PluginType, Plugin, PluginOptions } from './plugin';\nimport { registerActions } from '@nocobase/actions';\nimport {\n createCli,\n createDatabase,\n createResourcer,\n registerMiddlewares,\n} from './helper';\n\nexport interface ResourcerOptions {\n prefix?: string;\n}\n\nexport interface ApplicationOptions {\n database?: DatabaseOptions;\n resourcer?: ResourcerOptions;\n bodyParser?: any;\n cors?: any;\n dataWrapping?: boolean;\n registerActions?: boolean;\n}\n\ninterface DefaultState {\n currentUser?: any;\n [key: string]: any;\n}\n\ninterface DefaultContext {\n db: Database;\n resourcer: Resourcer;\n [key: string]: any;\n}\n\ninterface MiddlewareOptions {\n name?: string;\n resourceName?: string;\n resourceNames?: string[];\n insertBefore?: string;\n insertAfter?: string;\n}\n\ninterface ActionsOptions {\n resourceName?: string;\n resourceNames?: string[];\n}\n\nexport class Application<\n StateT = DefaultState,\n ContextT = DefaultContext\n> extends Koa {\n public readonly db: Database;\n\n public readonly resourcer: Resourcer;\n\n public readonly cli: Command;\n\n protected plugins = new Map<string, Plugin>();\n\n constructor(options: ApplicationOptions) {\n super();\n\n this.db = createDatabase(options);\n this.resourcer = createResourcer(options);\n this.cli = createCli(this, options);\n\n registerMiddlewares(this, options);\n if (options.registerActions !== false) {\n registerActions(this);\n }\n }\n\n use<NewStateT = {}, NewContextT = {}>(\n middleware: Koa.Middleware<StateT & NewStateT, ContextT & NewContextT>,\n options?: MiddlewareOptions,\n ) {\n // @ts-ignore\n return super.use(middleware);\n }\n\n collection(options: TableOptions) {\n return this.db.table(options);\n }\n\n resource(options: ResourceOptions) {\n return this.resourcer.define(options);\n }\n\n actions(handlers: any, options?: ActionsOptions) {\n return this.resourcer.registerActions(handlers);\n }\n\n command(nameAndArgs: string, opts?: CommandOptions) {\n return this.cli.command(nameAndArgs, opts);\n }\n\n findCommand(name: string): Command {\n return (this.cli as any)._findCommand(name);\n }\n\n plugin(options?: PluginType | PluginOptions, ext?: PluginOptions): Plugin {\n if (typeof options === 'string') {\n return this.plugin(require(options).default, ext);\n }\n let instance: Plugin;\n if (typeof options === 'function') {\n try {\n // @ts-ignore\n instance = new options({\n name: options.name,\n ...ext,\n app: this,\n });\n if (!(instance instanceof Plugin)) {\n throw new Error('plugin must be instanceof Plugin');\n }\n } catch (err) {\n // console.log(err);\n instance = new Plugin({\n name: options.name,\n ...ext,\n // @ts-ignore\n load: options,\n app: this,\n });\n }\n } else if (typeof options === 'object') {\n const plugin = options.plugin || Plugin;\n instance = new plugin({\n name: options.plugin ? plugin.name : undefined,\n ...options,\n ...ext,\n app: this,\n });\n }\n const name = instance.getName();\n if (this.plugins.has(name)) {\n throw new Error(`plugin name [${name}] is repeated`);\n }\n this.plugins.set(name, instance);\n return instance;\n }\n\n async load() {\n await this.emitAsync('plugins.beforeLoad');\n for (const [name, plugin] of this.plugins) {\n await this.emitAsync(`plugins.${name}.beforeLoad`);\n await plugin.load();\n await this.emitAsync(`plugins.${name}.afterLoad`);\n }\n await this.emitAsync('plugins.afterLoad');\n }\n\n async emitAsync(event: string | symbol, ...args: any[]): Promise<boolean> {\n // @ts-ignore\n const events = this._events;\n let callbacks = events[event];\n if (!callbacks) {\n return false;\n }\n // helper function to reuse as much code as possible\n const run = (cb) => {\n switch (args.length) {\n // fast cases\n case 0:\n cb = cb.call(this);\n break;\n case 1:\n cb = cb.call(this, args[0]);\n break;\n case 2:\n cb = cb.call(this, args[0], args[1]);\n break;\n case 3:\n cb = cb.call(this, args[0], args[1], args[2]);\n break;\n // slower\n default:\n cb = cb.apply(this, args);\n }\n\n if (cb && (cb instanceof Promise || typeof cb.then === 'function')) {\n return cb;\n }\n\n return Promise.resolve(true);\n };\n\n if (typeof callbacks === 'function') {\n await run(callbacks);\n } else if (typeof callbacks === 'object') {\n callbacks = callbacks.slice().filter(Boolean);\n await callbacks.reduce((prev, next) => {\n return prev.then((res) => {\n return run(next).then((result) =>\n Promise.resolve(res.concat(result)),\n );\n });\n }, Promise.resolve([]));\n }\n\n return true;\n }\n\n async parse(argv = process.argv) {\n await this.load();\n return this.cli.parseAsync(argv);\n }\n\n async destroy() {\n await this.db.close();\n }\n}\n\nexport default Application;\n"]}
@@ -0,0 +1,8 @@
1
+ import Database from '@nocobase/database';
2
+ import Resourcer from '@nocobase/resourcer';
3
+ import { Command } from 'commander';
4
+ import Application, { ApplicationOptions } from './application';
5
+ export declare function createDatabase(options: ApplicationOptions): Database;
6
+ export declare function createResourcer(options: ApplicationOptions): Resourcer;
7
+ export declare function createCli(app: any, options: ApplicationOptions): Command;
8
+ export declare function registerMiddlewares(app: Application, options: ApplicationOptions): void;
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["helper.ts"],"names":[],"mappings":"AAGA,OAAO,QAAQ,MAAM,oBAAoB,CAAC;AAC1C,OAAO,SAAS,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,WAAW,EAAE,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAIhE,wBAAgB,cAAc,CAAC,OAAO,EAAE,kBAAkB,YAMzD;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,kBAAkB,aAE1D;AAED,wBAAgB,SAAS,CAAC,GAAG,KAAA,EAAE,OAAO,EAAE,kBAAkB,WA4CzD;AAED,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,WAAW,EAChB,OAAO,EAAE,kBAAkB,QA6B5B","file":"helper.d.ts","sourcesContent":["import { DefaultContext, DefaultState } from 'koa';\nimport bodyParser from 'koa-bodyparser';\nimport cors from '@koa/cors';\nimport Database from '@nocobase/database';\nimport Resourcer from '@nocobase/resourcer';\nimport { Command } from 'commander';\nimport Application, { ApplicationOptions } from './application';\nimport { dataWrapping } from './middlewares/data-wrapping';\nimport { table2resource } from './middlewares/table2resource';\n\nexport function createDatabase(options: ApplicationOptions) {\n if (options.database instanceof Database) {\n return options.database;\n } else {\n return new Database(options.database);\n }\n}\n\nexport function createResourcer(options: ApplicationOptions) {\n return new Resourcer({ ...options.resourcer });\n}\n\nexport function createCli(app, options: ApplicationOptions) {\n const cli = new Command();\n\n cli\n .command('db:sync')\n .option('-f, --force')\n .action(async (...args) => {\n console.log('db sync...');\n const cli = args.pop();\n const force = cli.opts()?.force;\n await app.db.sync(\n force\n ? {\n force: true,\n alter: {\n drop: true,\n },\n }\n : {},\n );\n await app.destroy();\n });\n\n cli\n .command('init')\n .option('-f, --force')\n .action(async (...args) => {\n await app.db.sync({\n force: true,\n });\n await app.emitAsync('db.init', ...args);\n await app.destroy();\n });\n cli\n .command('start')\n .option('-p, --port [port]')\n .action(async (...args) => {\n const cli = args.pop();\n const opts = cli.opts();\n await app.emitAsync('beforeStart');\n app.listen(opts.port || 3000);\n console.log(`http://localhost:${opts.port || 3000}/`);\n });\n return cli;\n}\n\nexport function registerMiddlewares(\n app: Application,\n options: ApplicationOptions,\n) {\n if (options.bodyParser !== false) {\n app.use(\n bodyParser({\n ...options.bodyParser,\n }),\n );\n }\n\n app.use(\n cors({\n exposeHeaders: ['content-disposition'],\n ...options.cors,\n }),\n );\n\n app.use<DefaultState, DefaultContext>(async (ctx, next) => {\n ctx.db = app.db;\n ctx.resourcer = app.resourcer;\n await next();\n });\n\n if (options.dataWrapping !== false) {\n app.use(dataWrapping());\n }\n\n app.use(table2resource());\n app.use(app.resourcer.restApiMiddleware());\n}\n"]}
package/lib/helper.js ADDED
@@ -0,0 +1,146 @@
1
+ "use strict";
2
+
3
+ function _react() {
4
+ const data = _interopRequireDefault(require("react"));
5
+
6
+ _react = function _react() {
7
+ return data;
8
+ };
9
+
10
+ return data;
11
+ }
12
+
13
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
14
+
15
+ var __awaiter = void 0 && (void 0).__awaiter || function (thisArg, _arguments, P, generator) {
16
+ function adopt(value) {
17
+ return value instanceof P ? value : new P(function (resolve) {
18
+ resolve(value);
19
+ });
20
+ }
21
+
22
+ return new (P || (P = Promise))(function (resolve, reject) {
23
+ function fulfilled(value) {
24
+ try {
25
+ step(generator.next(value));
26
+ } catch (e) {
27
+ reject(e);
28
+ }
29
+ }
30
+
31
+ function rejected(value) {
32
+ try {
33
+ step(generator["throw"](value));
34
+ } catch (e) {
35
+ reject(e);
36
+ }
37
+ }
38
+
39
+ function step(result) {
40
+ result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
41
+ }
42
+
43
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
44
+ });
45
+ };
46
+
47
+ var __importDefault = void 0 && (void 0).__importDefault || function (mod) {
48
+ return mod && mod.__esModule ? mod : {
49
+ "default": mod
50
+ };
51
+ };
52
+
53
+ Object.defineProperty(exports, "__esModule", {
54
+ value: true
55
+ });
56
+ exports.registerMiddlewares = exports.createCli = exports.createResourcer = exports.createDatabase = void 0;
57
+
58
+ const koa_bodyparser_1 = __importDefault(require("koa-bodyparser"));
59
+
60
+ const cors_1 = __importDefault(require("@koa/cors"));
61
+
62
+ const database_1 = __importDefault(require("@nocobase/database"));
63
+
64
+ const resourcer_1 = __importDefault(require("@nocobase/resourcer"));
65
+
66
+ const commander_1 = require("commander");
67
+
68
+ const data_wrapping_1 = require("./middlewares/data-wrapping");
69
+
70
+ const table2resource_1 = require("./middlewares/table2resource");
71
+
72
+ function createDatabase(options) {
73
+ if (options.database instanceof database_1.default) {
74
+ return options.database;
75
+ } else {
76
+ return new database_1.default(options.database);
77
+ }
78
+ }
79
+
80
+ exports.createDatabase = createDatabase;
81
+
82
+ function createResourcer(options) {
83
+ return new resourcer_1.default(Object.assign({}, options.resourcer));
84
+ }
85
+
86
+ exports.createResourcer = createResourcer;
87
+
88
+ function createCli(app, options) {
89
+ const cli = new commander_1.Command();
90
+ cli.command('db:sync').option('-f, --force').action((...args) => __awaiter(this, void 0, void 0, function* () {
91
+ var _a;
92
+
93
+ console.log('db sync...');
94
+ const cli = args.pop();
95
+ const force = (_a = cli.opts()) === null || _a === void 0 ? void 0 : _a.force;
96
+ yield app.db.sync(force ? {
97
+ force: true,
98
+ alter: {
99
+ drop: true
100
+ }
101
+ } : {});
102
+ yield app.destroy();
103
+ }));
104
+ cli.command('init').option('-f, --force').action((...args) => __awaiter(this, void 0, void 0, function* () {
105
+ yield app.db.sync({
106
+ force: true
107
+ });
108
+ yield app.emitAsync('db.init', ...args);
109
+ yield app.destroy();
110
+ }));
111
+ cli.command('start').option('-p, --port [port]').action((...args) => __awaiter(this, void 0, void 0, function* () {
112
+ const cli = args.pop();
113
+ const opts = cli.opts();
114
+ yield app.emitAsync('beforeStart');
115
+ app.listen(opts.port || 3000);
116
+ console.log(`http://localhost:${opts.port || 3000}/`);
117
+ }));
118
+ return cli;
119
+ }
120
+
121
+ exports.createCli = createCli;
122
+
123
+ function registerMiddlewares(app, options) {
124
+ if (options.bodyParser !== false) {
125
+ app.use(koa_bodyparser_1.default(Object.assign({}, options.bodyParser)));
126
+ }
127
+
128
+ app.use(cors_1.default(Object.assign({
129
+ exposeHeaders: ['content-disposition']
130
+ }, options.cors)));
131
+ app.use((ctx, next) => __awaiter(this, void 0, void 0, function* () {
132
+ ctx.db = app.db;
133
+ ctx.resourcer = app.resourcer;
134
+ yield next();
135
+ }));
136
+
137
+ if (options.dataWrapping !== false) {
138
+ app.use(data_wrapping_1.dataWrapping());
139
+ }
140
+
141
+ app.use(table2resource_1.table2resource());
142
+ app.use(app.resourcer.restApiMiddleware());
143
+ }
144
+
145
+ exports.registerMiddlewares = registerMiddlewares;
146
+ //# sourceMappingURL=helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["helper.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AACA,oEAAwC;AACxC,qDAA6B;AAC7B,kEAA0C;AAC1C,oEAA4C;AAC5C,yCAAoC;AAEpC,+DAA2D;AAC3D,iEAA8D;AAE9D,SAAgB,cAAc,CAAC,OAA2B;IACxD,IAAI,OAAO,CAAC,QAAQ,YAAY,kBAAQ,EAAE;QACxC,OAAO,OAAO,CAAC,QAAQ,CAAC;KACzB;SAAM;QACL,OAAO,IAAI,kBAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;KACvC;AACH,CAAC;AAND,wCAMC;AAED,SAAgB,eAAe,CAAC,OAA2B;IACzD,OAAO,IAAI,mBAAS,mBAAM,OAAO,CAAC,SAAS,EAAG,CAAC;AACjD,CAAC;AAFD,0CAEC;AAED,SAAgB,SAAS,CAAC,GAAG,EAAE,OAA2B;IACxD,MAAM,GAAG,GAAG,IAAI,mBAAO,EAAE,CAAC;IAE1B,GAAG;SACA,OAAO,CAAC,SAAS,CAAC;SAClB,MAAM,CAAC,aAAa,CAAC;SACrB,MAAM,CAAC,CAAO,GAAG,IAAI,EAAE,EAAE;;QACxB,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,KAAK,SAAG,GAAG,CAAC,IAAI,EAAE,0CAAE,KAAK,CAAC;QAChC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CACf,KAAK;YACH,CAAC,CAAC;gBACE,KAAK,EAAE,IAAI;gBACX,KAAK,EAAE;oBACL,IAAI,EAAE,IAAI;iBACX;aACF;YACH,CAAC,CAAC,EAAE,CACP,CAAC;QACF,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC;IACtB,CAAC,CAAA,CAAC,CAAC;IAEL,GAAG;SACA,OAAO,CAAC,MAAM,CAAC;SACf,MAAM,CAAC,aAAa,CAAC;SACrB,MAAM,CAAC,CAAO,GAAG,IAAI,EAAE,EAAE;QACxB,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC;YAChB,KAAK,EAAE,IAAI;SACZ,CAAC,CAAC;QACH,MAAM,GAAG,CAAC,SAAS,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,CAAC;QACxC,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC;IACtB,CAAC,CAAA,CAAC,CAAC;IACL,GAAG;SACA,OAAO,CAAC,OAAO,CAAC;SAChB,MAAM,CAAC,mBAAmB,CAAC;SAC3B,MAAM,CAAC,CAAO,GAAG,IAAI,EAAE,EAAE;QACxB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QACxB,MAAM,GAAG,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QACnC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,CAAC,IAAI,IAAI,IAAI,GAAG,CAAC,CAAC;IACxD,CAAC,CAAA,CAAC,CAAC;IACL,OAAO,GAAG,CAAC;AACb,CAAC;AA5CD,8BA4CC;AAED,SAAgB,mBAAmB,CACjC,GAAgB,EAChB,OAA2B;IAE3B,IAAI,OAAO,CAAC,UAAU,KAAK,KAAK,EAAE;QAChC,GAAG,CAAC,GAAG,CACL,wBAAU,mBACL,OAAO,CAAC,UAAU,EACrB,CACH,CAAC;KACH;IAED,GAAG,CAAC,GAAG,CACL,cAAI,iBACF,aAAa,EAAE,CAAC,qBAAqB,CAAC,IACnC,OAAO,CAAC,IAAI,EACf,CACH,CAAC;IAEF,GAAG,CAAC,GAAG,CAA+B,CAAO,GAAG,EAAE,IAAI,EAAE,EAAE;QACxD,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;QAChB,GAAG,CAAC,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC;QAC9B,MAAM,IAAI,EAAE,CAAC;IACf,CAAC,CAAA,CAAC,CAAC;IAEH,IAAI,OAAO,CAAC,YAAY,KAAK,KAAK,EAAE;QAClC,GAAG,CAAC,GAAG,CAAC,4BAAY,EAAE,CAAC,CAAC;KACzB;IAED,GAAG,CAAC,GAAG,CAAC,+BAAc,EAAE,CAAC,CAAC;IAC1B,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,iBAAiB,EAAE,CAAC,CAAC;AAC7C,CAAC;AA/BD,kDA+BC","file":"helper.js","sourcesContent":["import { DefaultContext, DefaultState } from 'koa';\nimport bodyParser from 'koa-bodyparser';\nimport cors from '@koa/cors';\nimport Database from '@nocobase/database';\nimport Resourcer from '@nocobase/resourcer';\nimport { Command } from 'commander';\nimport Application, { ApplicationOptions } from './application';\nimport { dataWrapping } from './middlewares/data-wrapping';\nimport { table2resource } from './middlewares/table2resource';\n\nexport function createDatabase(options: ApplicationOptions) {\n if (options.database instanceof Database) {\n return options.database;\n } else {\n return new Database(options.database);\n }\n}\n\nexport function createResourcer(options: ApplicationOptions) {\n return new Resourcer({ ...options.resourcer });\n}\n\nexport function createCli(app, options: ApplicationOptions) {\n const cli = new Command();\n\n cli\n .command('db:sync')\n .option('-f, --force')\n .action(async (...args) => {\n console.log('db sync...');\n const cli = args.pop();\n const force = cli.opts()?.force;\n await app.db.sync(\n force\n ? {\n force: true,\n alter: {\n drop: true,\n },\n }\n : {},\n );\n await app.destroy();\n });\n\n cli\n .command('init')\n .option('-f, --force')\n .action(async (...args) => {\n await app.db.sync({\n force: true,\n });\n await app.emitAsync('db.init', ...args);\n await app.destroy();\n });\n cli\n .command('start')\n .option('-p, --port [port]')\n .action(async (...args) => {\n const cli = args.pop();\n const opts = cli.opts();\n await app.emitAsync('beforeStart');\n app.listen(opts.port || 3000);\n console.log(`http://localhost:${opts.port || 3000}/`);\n });\n return cli;\n}\n\nexport function registerMiddlewares(\n app: Application,\n options: ApplicationOptions,\n) {\n if (options.bodyParser !== false) {\n app.use(\n bodyParser({\n ...options.bodyParser,\n }),\n );\n }\n\n app.use(\n cors({\n exposeHeaders: ['content-disposition'],\n ...options.cors,\n }),\n );\n\n app.use<DefaultState, DefaultContext>(async (ctx, next) => {\n ctx.db = app.db;\n ctx.resourcer = app.resourcer;\n await next();\n });\n\n if (options.dataWrapping !== false) {\n app.use(dataWrapping());\n }\n\n app.use(table2resource());\n app.use(app.resourcer.restApiMiddleware());\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nocobase/server",
3
- "version": "0.5.0-alpha.17",
3
+ "version": "0.5.0-alpha.21",
4
4
  "main": "lib/index.js",
5
5
  "types": "./lib/index.d.ts",
6
6
  "license": "MIT",
@@ -8,9 +8,9 @@
8
8
  "dependencies": {
9
9
  "@koa/cors": "^3.1.0",
10
10
  "@koa/router": "^9.4.0",
11
- "@nocobase/actions": "^0.5.0-alpha.17",
12
- "@nocobase/database": "^0.5.0-alpha.17",
13
- "@nocobase/resourcer": "^0.5.0-alpha.17",
11
+ "@nocobase/actions": "^0.5.0-alpha.21",
12
+ "@nocobase/database": "^0.5.0-alpha.21",
13
+ "@nocobase/resourcer": "^0.5.0-alpha.21",
14
14
  "commander": "^8.1.0",
15
15
  "dotenv": "^8.2.0",
16
16
  "koa": "^2.13.0",
@@ -21,5 +21,5 @@
21
21
  "pg": "^8.3.3",
22
22
  "pg-hstore": "^2.3.3"
23
23
  },
24
- "gitHead": "c2905dd97cc204cf225e7298cfb3e57b530bc2fa"
24
+ "gitHead": "181872cf075dd9e65f9f2ff0d1ff18c541e0d7cd"
25
25
  }