Socket
Socket
Sign inDemoInstall

@nodebrick/nodebrick-core

Package Overview
Dependencies
Maintainers
1
Versions
66
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@nodebrick/nodebrick-core - npm Package Compare versions

Comparing version 0.0.15 to 0.0.16

2

package.json
{
"name": "@nodebrick/nodebrick-core",
"version": "0.0.15",
"version": "0.0.16",
"description": "Core of Nodebrick",

@@ -5,0 +5,0 @@ "publishConfig": {

@@ -16,7 +16,86 @@ # nodebrick-core

### Module Structure
Have a look at the existing modules, it's self explenatory.
## Usage
Few things to note:
* `index.ts`
The entrypoint, exporting all the classes/interfaces accessible by other modules (think public api)
* `I<ModuleNameModule>.ts`
The module 'interface' - note we are using the following notation `export abstract class I<ModuleName>` to define interface so they exists in the JS realm and are accessible by InversifyJS
* `<ModuleNameModule>.ts`
The module class implementing and extending the 'interface'
* `<ModuleNameBindings>.ts`
Defines the Inversify bindings for this module are done
* `models`
Folder storing all our models, i.e our business logic data
Models can also define and validates DTO (data transfer object) fields using [class-transformer](https://github.com/typestack/class-transformer) and [class-validator](https://github.com/typestack/class-validator) libraries eg
```typescript
@Exclude()
export abstract class IAPIResponse<TData>
{
@Expose({name: `request_id`, toClassOnly: true})
@IsOptional()
public abstract requestId?: string;
@Expose({name: `client_request_id`, toPlainOnly: true})
@IsString()
@IsOptional()
public abstract clientRequestId?: string;
@Expose({name: `start_time`, toPlainOnly: true})
@IsDate()
public abstract startTime?: Date;
@Expose({name: `end_time`, toPlainOnly: true})
@IsDate()
public abstract endTime: Date;
@Expose({toPlainOnly: true})
@IsInt()
@IsOptional()
// In milliseconds
public abstract duration?: number;
}
```
For instance a REST API returning the above will automatically create a JSON like
```json
{
"client_request_id": "933ca46c-25a5-4166-903e-a437700ae4ef",
"startTime": "933ca46c-25a5-4166-903e-a437700ae4ef",
"end_time": "933ca46c-25a5-4166-903e-a437700ae4ef",
"duration": 50
}
```
I invite you to read the [class-transformer](https://github.com/typestack/class-transformer) and [class-validator](https://github.com/typestack/class-validator) documentations.
Note that table column can also be created and validated with [nodebrick-database](../nodebrick-database/README.md) and the help [TypeORM](https://typeorm.io/#/)
```
### Dependency Injection
NodebrickCore provides dependency injection by using internally [InversifyJS](http://inversify.io/)
```
All the bindings will be defined in the `<ModuleNameBindings>.ts` as for instance
```typescript
// bind the module to its interface using transitive binding, i.e we are reusing the singleton.
bind(INodebrickApiModule).toService(NodebrickApiModule);
// middlewares - transient
bind(IGlobalApiMiddleware).to(GlobalApiMiddleware).inTransientScope();
bind(IGlobalOptionsMiddleware).to(GlobalOptionsMiddleware).inTransientScope();
bind(IGlobalRequestMiddleware).to(GlobalRequestMiddleware).inTransientScope();
// services - singletons
bind(INodebrickApiService).to(NodebrickApiService).inSingletonScope();
```
As you can see you have multiple scope for those
### Context
_A context can be defined as all the relevant information that a developer needs to complete a task._
NodebrickCore with the help of [cls-hooked](https://github.com/jeff-lewis/cls-hooked#readme) provides you with tools to create a context
and attach any
* create a context
import "cls-hooked";
import "reflect-metadata";
import "body-parser";
export * from "./INodebrickCore";

@@ -5,0 +4,0 @@ export * from "./NodebrickCore";

@@ -9,3 +9,2 @@ "use strict";

require("reflect-metadata");
require("body-parser");
/* tslint:enable:no-import-side-effect ordered-imports*/

@@ -54,2 +53,2 @@ __export(require("./INodebrickCore"));

__export(require("./utils/Timeout"));
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSx5REFBeUQ7QUFDekQsc0JBQW9CO0FBQ3BCLDRCQUEwQjtBQUMxQix1QkFBcUI7QUFDckIsd0RBQXdEO0FBRXhELHNDQUFpQztBQUNqQyxxQ0FBZ0M7QUFDaEMsNkNBQXdDO0FBRXhDLDRDQUF1QztBQUN2Qyx5Q0FBb0M7QUFDcEMsOENBQXlDO0FBQ3pDLHFEQUFnRDtBQUNoRCxzREFBaUQ7QUFDakQseURBQW9EO0FBQ3BELG1EQUE4QztBQUM5Qyx3REFBbUQ7QUFHbkQsb0RBQStDO0FBQy9DLDBDQUFxQztBQUVyQyx3REFBbUQ7QUFFbkQsd0RBQW1EO0FBQ25ELHFEQUFnRDtBQUNoRCw4REFBeUQ7QUFDekQsK0RBQTBEO0FBQzFELDZEQUF3RDtBQUN4RCx1REFBa0Q7QUFDbEQsOENBQXlDO0FBRXpDLGtEQUE2QztBQUM3QyxxQ0FBZ0M7QUFFaEMsbUNBQThCO0FBQzlCLHNDQUFpQztBQUNqQywrQ0FBMEM7QUFDMUMsNENBQXVDO0FBQ3ZDLDZDQUF3QztBQUN4QywwQ0FBcUM7QUFDckMsZ0RBQTJDO0FBQzNDLGdEQUEyQztBQUMzQyxnREFBMkM7QUFDM0MsK0NBQTBDO0FBQzFDLHdEQUFtRDtBQUNuRCx3REFBbUQ7QUFDbkQsNkNBQXdDO0FBQ3hDLDhDQUF5QztBQUV6QywyREFBc0Q7QUFDdEQsd0RBQW1EO0FBT25ELDBEQUFxRDtBQUNyRCxnREFBMkM7QUFDM0MscUNBQWdDIn0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSx5REFBeUQ7QUFDekQsc0JBQW9CO0FBQ3BCLDRCQUEwQjtBQUMxQix3REFBd0Q7QUFFeEQsc0NBQWlDO0FBQ2pDLHFDQUFnQztBQUNoQyw2Q0FBd0M7QUFFeEMsNENBQXVDO0FBQ3ZDLHlDQUFvQztBQUNwQyw4Q0FBeUM7QUFDekMscURBQWdEO0FBQ2hELHNEQUFpRDtBQUNqRCx5REFBb0Q7QUFDcEQsbURBQThDO0FBQzlDLHdEQUFtRDtBQUduRCxvREFBK0M7QUFDL0MsMENBQXFDO0FBRXJDLHdEQUFtRDtBQUVuRCx3REFBbUQ7QUFDbkQscURBQWdEO0FBQ2hELDhEQUF5RDtBQUN6RCwrREFBMEQ7QUFDMUQsNkRBQXdEO0FBQ3hELHVEQUFrRDtBQUNsRCw4Q0FBeUM7QUFFekMsa0RBQTZDO0FBQzdDLHFDQUFnQztBQUVoQyxtQ0FBOEI7QUFDOUIsc0NBQWlDO0FBQ2pDLCtDQUEwQztBQUMxQyw0Q0FBdUM7QUFDdkMsNkNBQXdDO0FBQ3hDLDBDQUFxQztBQUNyQyxnREFBMkM7QUFDM0MsZ0RBQTJDO0FBQzNDLGdEQUEyQztBQUMzQywrQ0FBMEM7QUFDMUMsd0RBQW1EO0FBQ25ELHdEQUFtRDtBQUNuRCw2Q0FBd0M7QUFDeEMsOENBQXlDO0FBRXpDLDJEQUFzRDtBQUN0RCx3REFBbUQ7QUFPbkQsMERBQXFEO0FBQ3JELGdEQUEyQztBQUMzQyxxQ0FBZ0MifQ==
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc