Skip to content

Commit

Permalink
$$$ update $$$
Browse files Browse the repository at this point in the history
  • Loading branch information
darekf77 committed Apr 29, 2024
1 parent 8bcf5f1 commit 1e4d0b5
Show file tree
Hide file tree
Showing 4 changed files with 81 additions and 42 deletions.
4 changes: 2 additions & 2 deletions src/app.ts
Original file line number Diff line number Diff line change
Expand Up @@ -67,14 +67,14 @@ class UserController extends Firedev.Base.CrudController<User> {


async initExampleDbData(): Promise<void> {
console.log(this.userProviers.helloFromUserProvier());
// console.log(this.userProviers.helloFromUserProvier());
}


@Firedev.Http.GET()
hello(@Firedev.Http.Param.Query('user') user: string): Firedev.Response<string> {
return async (req, res) => {
return 'hello from user controller my dear ' + user + 'and ' + this.userProviers.helloFromUserProvier();
return 'hello from user controller my dear query params user "' + user + '" and ' + this.userProviers.helloFromUserProvier();
}
}

Expand Down
5 changes: 3 additions & 2 deletions src/lib/create-context.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ export const createContext = <
await ref.initDatabaseConnection();
await ref.initSubscribers();
ref.initMetadata();
ref.startServer();
//#region @websql
ref.writeActiveRoutes();
//#endregion
Expand All @@ -46,9 +47,9 @@ export const createContext = <
},
};
if (ref.remoteHost) {
Helpers.info(`Create context on remote host: ${ref.remoteHost}`);
Helpers.info(`[firedev] Create context for remote host: ${ref.remoteHost}`);
} else {
Helpers.info(`Create context on thost: ${ref.host}`);
Helpers.info(`[firedev] Create context for host: ${ref.host}`);
}
return res;
}
Expand Down
112 changes: 75 additions & 37 deletions src/lib/endpoint-context.ts
Original file line number Diff line number Diff line change
Expand Up @@ -237,21 +237,12 @@ export class EndpointContext {
if (this.mode === 'backend-frontend(tcp+udp)') {
//#region @backend
this.expressApp = express();

this.initMidleware();
this.serverTcpUdp = this.isHttpServer ? (new https.Server({
key: config.https?.key,
cert: config.https?.cert
}, this.expressApp)) : (new http.Server(this.expressApp));

if (this.mode === 'backend-frontend(tcp+udp)') {
this.serverTcpUdp.listen(this.uri.port, () => {
Helpers.log(`Server listening on port: ${this.uri.port}, hostname: ${this.uri.pathname},
env: ${this.expressApp.settings.env}
`);
});
} else {
Helpers.info('Ipc communication enable instead tcp/upd');
}
this.publicAssets.forEach(asset => {
this.expressApp.use(asset.serverPath, express.static(asset.locationOnDisk))
});
Expand All @@ -269,6 +260,56 @@ export class EndpointContext {
}
//#endregion

//#region methods & getters / start server
startServer() {
//#region @backendFunc
if (this.mode === 'backend-frontend(tcp+udp)') {
// this.displayRoutes(this.expressApp);
this.serverTcpUdp.listen(Number(this.uri.port), () => {
Helpers.log(`[firedev][express-server]listening on port: ${this.uri.port}, hostname: ${this.uri.pathname},
address: ${this.uri.protocol}//localhost:${this.uri.port}${this.uri.pathname}
env: ${this.expressApp.settings.env}
`);
});
} else {
Helpers.info('Ipc communication enable instead tcp/upd');
}
//#endregion
}
//#endregion

//#region methods & getters / display express routes
displayRoutes(app) {
//#region @backend
const routes = [];

app._router?.stack.forEach(function (middleware) {
if (middleware.route) { // routes registered directly on the app
const methods = [];
for (let method in middleware.route.methods) {
if (middleware.route.methods[method]) {
methods.push(method.toUpperCase());
}
}
routes.push({ path: middleware.route.path, methods: methods });
} else if (middleware.name === 'router') { // router middleware
middleware.handle.stack.forEach(function (handler) {
const methods = [];
for (let method in handler.route.methods) {
if (handler.route.methods[method]) {
methods.push(method.toUpperCase());
}
}
routes.push({ path: handler.route.path, methods: methods });
});
}
});

console.log(routes);
//#endregion
}
//#endregion

//#region methods & getters / mode allows database creation
get modeAllowsDatabaseCreation() {
return this.mode === 'backend-frontend(tcp+udp)' || this.mode === 'backend-frontend(websql)' || this.mode === 'backend-frontend(ipc-electron)';
Expand Down Expand Up @@ -721,7 +762,7 @@ export class EndpointContext {
}
Helpers.info(`PREPARING TYPEORM CONNECTION DONE. initialize=${this.connection?.isInitialized}`);
} else {
Helpers.info(`Not initing db for mode ${this.mode}`);
Helpers.info(`[firedev][typeorm] Not initing db for mode ${this.mode}`);
}
}

Expand All @@ -745,13 +786,16 @@ export class EndpointContext {
return bc.path
}
return bc.className;
}).join('/')
})
.join('/')

if (FiredevHelpers.isGoodPath(classConfig.path)) {
classConfig.calculatedPath = classConfig.path;
} else {
classConfig.calculatedPath = `/${parentscalculatedPath}/${ClassHelpers.getName(controllerClassFn)}`
.replace(/\/\//g, '/');
classConfig.calculatedPath = `${parentscalculatedPath}/${ClassHelpers.getName(controllerClassFn)}`
.replace(/\/\//g, '/').split('/').reduce((acc, bc) => {
return _.last(acc) === bc ? acc : [...acc, bc];
}, []).join('/');
}

_.slice(configs, 1).forEach(bc => {
Expand Down Expand Up @@ -780,7 +824,7 @@ export class EndpointContext {
? `/${methodConfig.path?.replace(/\//, '')}`
: FiredevHelpers.getExpressPath(classConfig, methodConfig);

console.log('initfn expressPath', expressPath)
// console.log({ expressPath })
if (Helpers.isNode
//#region @websqlOnly
|| Helpers.isWebSQL
Expand Down Expand Up @@ -852,7 +896,7 @@ export class EndpointContext {
`tmp-routes-${_.kebabCase(this.config.contextName)}.json`
)

Helpers.log(`FILE: ${fileName} `)
Helpers.log(`[firedev] router ${fileName} `)
// Helpers.log(JSON.stringify(routes, null, 4))
//#region @backend
fse.writeJSONSync(fileName, routes, {
Expand Down Expand Up @@ -883,14 +927,18 @@ export class EndpointContext {
});
}

this.expressApp.get('/', (req, res) => {
res.send(`Hello, world from context ${this.contextName}`);
});

app.use(fileUpload())
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use(methodOverride());
app.use(cookieParser());

if (this.session) {

Helpers.info('[firedev][express-server] session enabled for this context ' + this.contextName);
const { frontendHost, cookieMaxAge } = this.session;

const sessionObj = {
Expand All @@ -908,16 +956,13 @@ export class EndpointContext {
}));
app.use(expressSession(sessionObj));
} else {
// console.log('NOT ENABLING SESSION')
Helpers.info(`[firedev][express-server] session not enabled for this context '${this.contextName}'`);
app.use(cors())
}



(() => {

app.use((req, res, next) => {

//#region good for cors session obj
// if (this.context.session) {
// res.header('Access-Control-Allow-Origin', this.context.session.frontendHost);
Expand Down Expand Up @@ -988,7 +1033,7 @@ export class EndpointContext {
//#endregion

url.pathname = url.pathname.replace(/\/$/, '');
expressPath = url.pathname.startsWith('/') ? `${url.pathname}${expressPath} ` : expressPath;
expressPath = url.pathname.startsWith('/') ? `${url.pathname}${expressPath}` : expressPath;
expressPath = expressPath.replace(/\/\//g, '/')
// console.log(`BACKEND: expressPath: ${ expressPath } `)
//#endregion
Expand All @@ -1011,25 +1056,19 @@ export class EndpointContext {

//#region apply dummy websql express routers
//#region @websql
if (!this.expressApp[type.toLowerCase()]) {
this.expressApp[type.toLowerCase()] = () => { }
}

//#region @backend
if (!Helpers.isRunningIn.cliMode()) {
//#endregion
if (Helpers.isWebSQL) {
if (!this.expressApp[type.toLowerCase()]) {
this.expressApp[type.toLowerCase()] = () => { }
}
console.log(`[${type.toUpperCase()}] ${expressPath} `);
//#region @backend
}
//#endregion

//#endregion
//#endregion

//#region @backend
console.log(type + ` init express path : `, expressPath)
// console.log(type + ` init express path '${expressPath}' `)
this.expressApp[type.toLowerCase()](expressPath, requestHandler, async (req, res) => {

// console.log(`HELLO [${type.toUpperCase()}] ${expressPath} `);
//#region process params
const args: any[] = [];

Expand Down Expand Up @@ -1125,7 +1164,7 @@ export class EndpointContext {
let result = await getResult(resolvedParams, req, res);

if (result instanceof Blob && (methodConfig.responseType as ModelsNg2Rest.ResponseTypeAxios) === 'blob') {
console.log('INSTANCE OF BLOB')
// console.log('INSTANCE OF BLOB')
//#region processs blob result type
const blob = result as Blob;
const file = Buffer.from(await blob.arrayBuffer());
Expand All @@ -1136,7 +1175,7 @@ export class EndpointContext {
res.end(file);
//#endregion
} else if (_.isString(result) && (methodConfig.responseType as ModelsNg2Rest.ResponseTypeAxios) === 'blob') {
console.log('BASE64')
// console.log('BASE64')
//#region process string buffer TODO refacetor
const img_base64 = result;
const m = /^data:(.+?);base64,(.+)$/.exec(img_base64)
Expand All @@ -1154,7 +1193,6 @@ export class EndpointContext {
//#endregion
} else {
//#region process json request
// console.log('REQUEST RESULT', result)
await EntityProcess.init(result, res);
//#endregion
}
Expand Down
2 changes: 1 addition & 1 deletion src/lib/helpers/firedev-helpers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ export namespace FiredevHelpers {
//#endregion

//#region get expores path
export const getExpressPath = (c: Models.RuntimeControllerConfig, pathOrClassConfig: Models.MethodConfig | string) => {
export const getExpressPath = (c: Models.RuntimeControllerConfig, pathOrClassConfig: Models.MethodConfig) => {
if (typeof pathOrClassConfig === 'string') return `${c.calculatedPath}${pathOrClassConfig}`.replace(/\/$/, '')
return `${c.calculatedPath}${pathOrClassConfig.path}`.replace(/\/$/, '')
}
Expand Down

0 comments on commit 1e4d0b5

Please sign in to comment.