@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.
- package/lib/application.d.ts +2 -0
- package/lib/application.d.ts.map +1 -1
- package/lib/application.js +12 -73
- package/lib/application.js.map +1 -1
- package/lib/helper.d.ts +8 -0
- package/lib/helper.d.ts.map +1 -0
- package/lib/helper.js +146 -0
- package/lib/helper.js.map +1 -0
- package/package.json +5 -5
package/lib/application.d.ts
CHANGED
|
@@ -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>;
|
package/lib/application.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["application.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAC;
|
|
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"]}
|
package/lib/application.js
CHANGED
|
@@ -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.
|
|
96
|
-
this
|
|
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);
|
package/lib/application.js.map
CHANGED
|
@@ -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":";;;;;;;;;;;;;;;AAAA,8CAAsB;AAItB,qCAA6D;AAC7D,+CAAoD;AACpD,qCAKkB;AAuClB,MAAa,WAGX,SAAQ,aAAG;IASX,YAAY,OAA2B;QACrC,KAAK,EAAE,CAAC;QAHA,YAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;QAK5C,IAAI,CAAC,EAAE,GAAG,uBAAc,CAAC,OAAO,CAAC,CAAC;QAClC,IAAI,CAAC,SAAS,GAAG,wBAAe,CAAC,OAAO,CAAC,CAAC;QAC1C,IAAI,CAAC,GAAG,GAAG,kBAAS,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAEpC,4BAAmB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACnC,IAAI,OAAO,CAAC,eAAe,KAAK,KAAK,EAAE;YACrC,yBAAe,CAAC,IAAI,CAAC,CAAC;SACvB;IACH,CAAC;IAED,GAAG,CACD,UAAsE,EACtE,OAA2B;QAG3B,OAAO,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC/B,CAAC;IAED,UAAU,CAAC,OAAqB;QAC9B,OAAO,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;IAED,QAAQ,CAAC,OAAwB;QAC/B,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;IAED,OAAO,CAAC,QAAa,EAAE,OAAwB;QAC7C,OAAO,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,CAAC,WAAmB,EAAE,IAAqB;QAChD,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IAC7C,CAAC;IAED,WAAW,CAAC,IAAY;QACtB,OAAQ,IAAI,CAAC,GAAW,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAC9C,CAAC;IAED,MAAM,CAAC,OAAoC,EAAE,GAAmB;QAC9D,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;YAC/B,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;SACnD;QACD,IAAI,QAAgB,CAAC;QACrB,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE;YACjC,IAAI;gBAEF,QAAQ,GAAG,IAAI,OAAO,+BACpB,IAAI,EAAE,OAAO,CAAC,IAAI,IACf,GAAG,KACN,GAAG,EAAE,IAAI,IACT,CAAC;gBACH,IAAI,CAAC,CAAC,QAAQ,YAAY,eAAM,CAAC,EAAE;oBACjC,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;iBACrD;aACF;YAAC,OAAO,GAAG,EAAE;gBAEZ,QAAQ,GAAG,IAAI,eAAM,+BACnB,IAAI,EAAE,OAAO,CAAC,IAAI,IACf,GAAG,KAEN,IAAI,EAAE,OAAO,EACb,GAAG,EAAE,IAAI,IACT,CAAC;aACJ;SACF;aAAM,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;YACtC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,eAAM,CAAC;YACxC,QAAQ,GAAG,IAAI,MAAM,6CACnB,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,IAC3C,OAAO,GACP,GAAG,KACN,GAAG,EAAE,IAAI,IACT,CAAC;SACJ;QACD,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC;QAChC,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YAC1B,MAAM,IAAI,KAAK,CAAC,gBAAgB,IAAI,eAAe,CAAC,CAAC;SACtD;QACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACjC,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEK,IAAI;;YACR,MAAM,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;YAC3C,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE;gBACzC,MAAM,IAAI,CAAC,SAAS,CAAC,WAAW,IAAI,aAAa,CAAC,CAAC;gBACnD,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;gBACpB,MAAM,IAAI,CAAC,SAAS,CAAC,WAAW,IAAI,YAAY,CAAC,CAAC;aACnD;YACD,MAAM,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;QAC5C,CAAC;KAAA;IAEK,SAAS,CAAC,KAAsB,EAAE,GAAG,IAAW;;YAEpD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;YAC5B,IAAI,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YAC9B,IAAI,CAAC,SAAS,EAAE;gBACd,OAAO,KAAK,CAAC;aACd;YAED,MAAM,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE;gBACjB,QAAQ,IAAI,CAAC,MAAM,EAAE;oBAEnB,KAAK,CAAC;wBACJ,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBACnB,MAAM;oBACR,KAAK,CAAC;wBACJ,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;wBAC5B,MAAM;oBACR,KAAK,CAAC;wBACJ,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;wBACrC,MAAM;oBACR,KAAK,CAAC;wBACJ,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;wBAC9C,MAAM;oBAER;wBACE,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;iBAC7B;gBAED,IAAI,EAAE,IAAI,CAAC,EAAE,YAAY,OAAO,IAAI,OAAO,EAAE,CAAC,IAAI,KAAK,UAAU,CAAC,EAAE;oBAClE,OAAO,EAAE,CAAC;iBACX;gBAED,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC/B,CAAC,CAAC;YAEF,IAAI,OAAO,SAAS,KAAK,UAAU,EAAE;gBACnC,MAAM,GAAG,CAAC,SAAS,CAAC,CAAC;aACtB;iBAAM,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE;gBACxC,SAAS,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAC9C,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE;oBACpC,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;wBACvB,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAC/B,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CACpC,CAAC;oBACJ,CAAC,CAAC,CAAC;gBACL,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;aACzB;YAED,OAAO,IAAI,CAAC;QACd,CAAC;KAAA;IAEK,KAAK,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI;;YAC7B,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC;KAAA;IAEK,OAAO;;YACX,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;QACxB,CAAC;KAAA;CACF;AArKD,kCAqKC;AAED,kBAAe,WAAW,CAAC","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"]}
|
package/lib/helper.d.ts
ADDED
|
@@ -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":"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","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.
|
|
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.
|
|
12
|
-
"@nocobase/database": "^0.5.0-alpha.
|
|
13
|
-
"@nocobase/resourcer": "^0.5.0-alpha.
|
|
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": "
|
|
24
|
+
"gitHead": "181872cf075dd9e65f9f2ff0d1ff18c541e0d7cd"
|
|
25
25
|
}
|