Skip to content

Commit bb7f52c

Browse files
authored
Merge pull request #22 from kitesjs/refactor
Refactor express config events
2 parents 39d6117 + d26b414 commit bb7f52c

File tree

6 files changed

+61
-68
lines changed

6 files changed

+61
-68
lines changed

packages/core/engine/kites-instance.spec.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,11 @@ function removeKitesConfigFiles() {
2828

2929
describe('kites engine', () => {
3030

31-
it('should fire ready callback', async () => {
31+
it(`should fire 'ready' event`, async () => {
3232

33-
await engine().ready((core) => {
34-
core.logger.info('Kites is ready!');
35-
expect(core).instanceOf(KitesInstance);
33+
await engine().on('ready', (app) => {
34+
app.logger.info('Kites is ready!');
35+
expect(app).instanceOf(KitesInstance);
3636
}).init();
3737

3838
});

packages/core/engine/kites-instance.ts

Lines changed: 2 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -52,10 +52,8 @@ export interface IKites {
5252
logger: Logger;
5353
container: Container;
5454
afterConfigLoaded(fn: KitesReadyCallback): IKites;
55-
ready(callback: KitesReadyCallback): IKites;
5655
discover(option?: string | boolean): IKites;
57-
use(extension: KitesExtension | ExtensionDefinition): IKites;
58-
// useMany(extension: Array<KitesExtension | ExtensionDefinition>): IKites;
56+
use(extension: KitesExtension | ExtensionDefinition | ExtensionDefinition[]): IKites;
5957
init(): Promise<IKites>;
6058
}
6159

@@ -73,7 +71,6 @@ export class KitesInstance extends EventEmitter implements IKites {
7371
logger: Logger;
7472

7573
private fnAfterConfigLoaded: KitesReadyCallback;
76-
private isReady: Promise<KitesInstance>;
7774
private initialized: boolean;
7875
private iocContainer: Container;
7976

@@ -94,9 +91,6 @@ export class KitesInstance extends EventEmitter implements IKites {
9491
// properties
9592
this.logger = createLogger(this.name, this.options.logger);
9693
this.fnAfterConfigLoaded = () => this;
97-
this.isReady = new Promise((resolve) => {
98-
this.on('initialized', resolve);
99-
});
10094

10195
}
10296

@@ -189,15 +183,6 @@ export class KitesInstance extends EventEmitter implements IKites {
189183
}
190184
}
191185

192-
/**
193-
* Kites fire on ready
194-
* @param callback
195-
*/
196-
ready(callback: KitesReadyCallback) {
197-
this.isReady.then((kites) => callback(kites));
198-
return this;
199-
}
200-
201186
/**
202187
* Use a function as a kites extension
203188
* @param extension
@@ -207,11 +192,6 @@ export class KitesInstance extends EventEmitter implements IKites {
207192
return this;
208193
}
209194

210-
// useMany(extensions: Array<KitesExtension | ExtensionDefinition>) {
211-
// this.extensionsManager.useMany(extensions);
212-
// return this;
213-
// }
214-
215195
/**
216196
* Enable auto discover extensions
217197
*/
@@ -268,7 +248,7 @@ export class KitesInstance extends EventEmitter implements IKites {
268248
await this.initializeListeners.fire();
269249

270250
this.logger.info('kites initialized!');
271-
this.emit('initialized', this);
251+
this.emit('ready', this);
272252

273253
this.initialized = true;
274254
return this;

packages/core/extensions/extensions-manager.ts

Lines changed: 40 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,50 @@ export class ExtensionsManager extends EventEmitter {
4444
}
4545
}
4646

47-
useMany(extensions: KitesExtension[]) {
47+
/**
48+
* Initialize extensions manager
49+
*/
50+
async init() {
51+
this.availableExtensions = [];
52+
// auto discover extensions
53+
if (this.kites.options.discover || (this.kites.options.discover !== false && this.usedExtensions.length === 0)) {
54+
let extensions = await discover({
55+
cacheAvailableExtensions: this.kites.options.cacheAvailableExtensions,
56+
extensionsLocationCache: this.kites.options.extensionsLocationCache,
57+
logger: this.kites.logger,
58+
mode: this.kites.options.mode,
59+
rootDirectory: this.kites.options.rootDirectory,
60+
tempDirectory: this.kites.options.tempDirectory,
61+
});
62+
this.kites.logger.debug('Discovered ' + extensions.length + ' extensions');
63+
this.availableExtensions = this.availableExtensions.concat(extensions);
64+
}
65+
// filter extensions will be loaded?
66+
this.availableExtensions = this.availableExtensions.concat(this.usedExtensions);
67+
if (this.kites.options.extensions) {
68+
let allowedExtensions = this.kites.options.extensions as string[];
69+
this.availableExtensions = this.availableExtensions.filter(e => allowedExtensions.indexOf(e.name) > -1);
70+
}
71+
72+
this.availableExtensions.sort(sorter);
73+
return this.useMany(this.availableExtensions);
74+
75+
}
76+
77+
/**
78+
* Execute init extensions
79+
* @param extensions
80+
*/
81+
private useMany(extensions: KitesExtension[]) {
4882
var promises = extensions.map((e) => this.useOne(e));
4983
return Promise.all(promises);
5084
}
5185

52-
useOne(extension: KitesExtension) {
86+
/**
87+
* Execute init one extension
88+
* @param extension
89+
*/
90+
private useOne(extension: KitesExtension) {
5391
// extends options
5492
// Review _.assign(), _.defaults(), or _.merge?
5593
const options = _.assign<
@@ -102,33 +140,4 @@ export class ExtensionsManager extends EventEmitter {
102140
});
103141
}
104142

105-
/**
106-
* Initialize extensions manager
107-
*/
108-
async init() {
109-
this.availableExtensions = [];
110-
// auto discover extensions
111-
if (this.kites.options.discover || (this.kites.options.discover !== false && this.usedExtensions.length === 0)) {
112-
let extensions = await discover({
113-
cacheAvailableExtensions: this.kites.options.cacheAvailableExtensions,
114-
extensionsLocationCache: this.kites.options.extensionsLocationCache,
115-
logger: this.kites.logger,
116-
mode: this.kites.options.mode,
117-
rootDirectory: this.kites.options.rootDirectory,
118-
tempDirectory: this.kites.options.tempDirectory,
119-
});
120-
this.kites.logger.debug('Discovered ' + extensions.length + ' extensions');
121-
this.availableExtensions = this.availableExtensions.concat(extensions);
122-
}
123-
// filter extensions will be loaded?
124-
this.availableExtensions = this.availableExtensions.concat(this.usedExtensions);
125-
if (this.kites.options.extensions) {
126-
let allowedExtensions = this.kites.options.extensions as string[];
127-
this.availableExtensions = this.availableExtensions.filter(e => allowedExtensions.indexOf(e.name) > -1);
128-
}
129-
130-
this.availableExtensions.sort(sorter);
131-
return this.useMany(this.availableExtensions);
132-
133-
}
134143
}

packages/core/logger/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ function createLogger(name: string, options?: any): Logger {
1313
exitOnError: false,
1414
level: 'info',
1515
format: format.combine(
16+
format.splat(), // formats level.message based on Node's util.format().
1617
format.label({ label: name }),
1718
format.colorize(),
1819
format.timestamp(),

packages/express/express.extension.ts

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ export class ExpressExtension implements KitesExtension {
3232
}
3333

3434
logStart() {
35+
this.kites.emit('after:express:config');
3536
if (this.kites.express.server) {
3637
const port = this.kites.express.server.address().port;
3738
this.kites.logger.info(
@@ -75,8 +76,7 @@ export class ExpressExtension implements KitesExtension {
7576
}
7677

7778
configureViewEngine(app: Express, opts: any) {
78-
var configView = this.kites.emit('express:config:view', app, opts);
79-
if (configView) {
79+
if (this.kites.emit('express:config:view', app, opts)) {
8080
this.kites.logger.debug('Express view engine has customized by user!');
8181
return;
8282
}
@@ -145,11 +145,6 @@ export class ExpressExtension implements KitesExtension {
145145
configureExpressApp(app: Express, kites: KitesInstance) {
146146
kites.express.app = app;
147147

148-
app.options('*', cors({
149-
methods: ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'MERGE'],
150-
origin: true
151-
}));
152-
153148
// show powered by
154149
if (!this.options.poweredBy) {
155150
app.disable('x-powered-by');
@@ -160,6 +155,11 @@ export class ExpressExtension implements KitesExtension {
160155
});
161156
}
162157

158+
// default config
159+
app.options('*', cors({
160+
methods: ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'MERGE'],
161+
origin: true
162+
}));
163163
app.use(bodyParser.urlencoded({
164164
extended: false,
165165
limit: this.options.inputRequestLimit || '10mb'
@@ -170,19 +170,22 @@ export class ExpressExtension implements KitesExtension {
170170
app.use(cookieParser());
171171
app.use(cors());
172172

173-
kites.logger.debug('Express expanding ...');
174-
173+
// extend express mixin
175174
app.use(mixinReq(kites));
176175
app.use(mixinRes(kites));
177176
app.use(mixinResView(kites));
178177

178+
kites.logger.debug('Express expanding ...');
179179
kites.emit('before:express:config', app);
180+
181+
// default routes
180182
app.use('/_kites', defaultRouter());
181183

182184
kites.logger.debug('Express starting configure ...');
183185
kites.emit('express:config', app);
184186

185-
// config static file
187+
// config static assets
188+
kites.emit('express:config:static', app);
186189
if (typeof this.options.static === 'string') {
187190
kites.logger.debug('Express serve static files at: ' + this.options.static);
188191
app.use(express.static(this.options.static));

sample/01-todo-app/todo/todo.controller.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ export class TodoController {
1010
public svTodo: TodoService,
1111
@Inject(KITES_INSTANCE) private kites: KitesInstance,
1212
) {
13-
kites.logger.info('Hello todo controller!!!');
13+
kites.logger.info('Hello %s controller!!! (%s)', 'todo', 3);
1414
kites.logger.info(svTodo.getAll());
1515
}
1616

0 commit comments

Comments
 (0)