UNPKG

4.3 kBPlain TextView Raw
1import {Initalize} from './initialize/initialize';
2import fs = require('fs');
3var recursiveReadDir = require('recursive-readdir-synchronous');
4import path = require('path');
5import Q = require("q");
6import * as Utils from './utils';
7import {MetaUtils} from './metadata/utils'
8import {IEntityService} from './interfaces/entity-service';
9//import {PrincipalContext} from '../security/auth/principalContext';
10//var ns = PrincipalContext.getSession();
11var domain = require('../security/auth/domain');
12import {Decorators} from './constants';
13
14//import linq = require('../typings/linq/linq');
15import * as Enumerable from 'linq';
16
17// Ignore .d.ts and all other non .ts files
18function ignoreFile(file: string) {
19 return !file.endsWith('.js') || file.endsWith('.spec.js');
20}
21
22// ignore node_modules or folders starting with '.', eg. '.git'
23function ignoreDirectory(file: string, stats: fs.Stats) {
24 return path.basename(file) == "node_modules" || path.basename(file).startsWith('.') || path.basename(file) == "unit-test";
25}
26
27function readIgnore(file: string, stats: fs.Stats) {
28 return (stats.isFile() && ignoreFile(file))
29 || (stats.isDirectory() && ignoreDirectory(file, stats));
30}
31
32let _appRoot = process.cwd();
33
34class Dynamic {
35 constructor(config: any, securityConfig: any,server?:any) {
36 Utils.config(config);
37 Utils.securityConfig(securityConfig);
38 config = config;
39 securityConfig = securityConfig;
40 let ignorePaths = config.Config && config.Config.ignorePaths || [];
41 let internalIgnorePaths = config.Config && config.Config.internalIgnorePaths || [];
42 ignorePaths = [...ignorePaths, ...internalIgnorePaths];
43 var files = this.scanDirectories(ignorePaths);
44 this.loadComponents(files);
45 this.initialize(files, server);
46 }
47
48 scanDirectories(ignorePaths: Array<string|Function>): Array<string> {
49 ignorePaths.push(readIgnore);
50 return recursiveReadDir(_appRoot, ignorePaths);
51 //return Q.nfapply(recursiveReadDir, [_appRoot, [readIgnore]]);
52 }
53
54 loadComponents(files: Array<string>) {
55 Enumerable.from(files)
56 .forEach(x => {
57 try {
58 if (x.indexOf("gulpfile") > -1) {
59 return;
60 }
61 var route = path.resolve(x.substring(0, x.lastIndexOf('.')));
62 require(route);
63 } catch (e) {
64 console.log(e);
65 throw e;
66 }
67 });
68 }
69
70 initialize(files: Array<string>, server: any) {
71 new Initalize(files,server);
72 }
73}
74
75module.exports = function (config: any, securityConfig: any, appRoot?: string,
76 entityServiceInst?: IEntityService,
77 sqlServerInst?: IEntityService,server?:any) {
78 // application root (where we scan the components) set priority:
79 // 1. User provided
80 // 2. Environment Variable
81 // 3. Current working directory
82 _appRoot = appRoot || process.env.APP_ROOT || process.cwd();
83 //Utils.entityService(entityServiceInst);
84 //Utils.sqlEntityService(sqlServerInst);
85 new Dynamic(config, securityConfig,server);
86 MetaUtils.refreshDerivedObjectsMetadata(Decorators.DOCUMENT);
87 MetaUtils.refreshDerivedObjectsMetadata(Decorators.ENTITY);
88}
89
90let components: Array<any> = [];
91
92export function addComponent(comp: any) {
93 components.push(comp);
94}
95
96export function initialize(config: any, securityConfig: any, appRoot?: string,
97 entityServiceInst?: IEntityService,
98 sqlServerInst?: IEntityService, server?: any) {
99 // application root (where we scan the components) set priority:
100 // 1. User provided
101 // 2. Environment Variable
102 // 3. Current working directory
103 _appRoot = appRoot || process.env.APP_ROOT || process.cwd();
104 //Utils.entityService(entityServiceInst);
105 new Dynamic(config, securityConfig,server);
106 //Utils.sqlEntityService(sqlServerInst);
107 components.forEach(x => {
108 x.default();
109 });
110}
111
112module.exports.register = function (app) {
113 app.use(domain.middleware('context'));
114 //app.use(function (req, res, next) {
115 // ns.bindEmitter(req);
116 // ns.bindEmitter(res);
117 // ns.run(function () {
118 // next();
119 // });
120 //});
121}