nodart
Advanced tools
Comparing version 5.2.1 to 5.3.0
@@ -0,1 +1,2 @@ | ||
import * as common from "./common"; | ||
import * as app from "./app"; | ||
@@ -14,4 +15,7 @@ import * as cli from "./cmd"; | ||
import * as store from "./store"; | ||
import * as mutable from "./mutable"; | ||
import * as relationModel from "./relation_model"; | ||
export { | ||
common, | ||
app, | ||
@@ -30,2 +34,4 @@ cli, | ||
store, | ||
mutable, | ||
relationModel, | ||
}; |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.store = exports.session = exports.service = exports.router = exports.orm = exports.observer = exports.object = exports.http = exports.exception = exports.engine = exports.di = exports.cli = exports.app = void 0; | ||
exports.relationModel = exports.mutable = exports.store = exports.session = exports.service = exports.router = exports.orm = exports.observer = exports.object = exports.http = exports.exception = exports.engine = exports.di = exports.cli = exports.app = exports.common = void 0; | ||
const common = require("./common"); | ||
exports.common = common; | ||
const app = require("./app"); | ||
@@ -30,2 +32,6 @@ exports.app = app; | ||
exports.store = store; | ||
const mutable = require("./mutable"); | ||
exports.mutable = mutable; | ||
const relationModel = require("./relation_model"); | ||
exports.relationModel = relationModel; | ||
//# sourceMappingURL=index.js.map |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.HttpExceptionHandler = exports.RuntimeException = exports.HttpException = exports.ExceptionLog = exports.ExceptionHandler = exports.Exception = exports.Observer = exports.ServiceFactory = exports.Service = exports.OrmSeeder = exports.OrmSeedSource = exports.OrmMigrator = exports.OrmMigrationSource = exports.Orm = exports.Model = exports.Engine = exports.Controller = exports.BaseController = exports.Session = exports.Router = exports.CashierService = exports.OrmService = exports.ModuleService = exports.HttpServiceAcceptor = exports.HttpService = exports.HttpResponder = exports.HttpFormData = exports.HttpClient = exports.HttpHandler = exports.BaseDependencyInterceptor = exports.DependencyInterceptor = exports.DIContainer = exports.State = exports.Store = exports.AppModuleFacade = exports.AppModule = exports.AppFactory = exports.AppLoader = exports.AppConfig = exports.AppExceptionResolve = exports.AppServiceManager = exports.AppEnv = exports.AppBuilder = exports.AppEmitter = exports.App = exports.loaders = exports.injects = exports.utils = exports.cli = exports.nodart = void 0; | ||
exports.HttpFormDataLoader = exports.HttpClientLoader = exports.CommandLineLoader = exports.ExceptionTemplateLoader = exports.ExceptionLogLoader = exports.ExceptionHandlerLoader = exports.OrmLoader = exports.StaticLoader = exports.EngineLoader = exports.SessionLoader = exports.ServiceLoader = exports.StoreLoader = exports.ModelLoader = exports.ControllerLoader = exports.AppBuilderLoader = exports.RuntimeExceptionHandler = void 0; | ||
exports.HttpException = exports.ExceptionLog = exports.ExceptionHandler = exports.Exception = exports.Observer = exports.ServiceFactory = exports.Service = exports.OrmSeeder = exports.OrmSeedSource = exports.OrmMigrator = exports.OrmMigrationSource = exports.Orm = exports.Mutable = exports.RelationModel = exports.Model = exports.Engine = exports.Controller = exports.BaseController = exports.Session = exports.Router = exports.CashierService = exports.OrmService = exports.ModuleService = exports.HttpServiceAcceptor = exports.HttpService = exports.HttpResponder = exports.HttpFormData = exports.HttpClient = exports.HttpHandler = exports.BaseDependencyInterceptor = exports.DependencyInterceptor = exports.DIContainer = exports.State = exports.Store = exports.AppModuleFacade = exports.AppModule = exports.AppFactory = exports.AppLoader = exports.AppConfig = exports.AppExceptionResolve = exports.AppServiceManager = exports.AppEnv = exports.AppBuilder = exports.AppEmitter = exports.App = exports.loaders = exports.injects = exports.utils = exports.cli = exports.nodart = void 0; | ||
exports.HttpFormDataLoader = exports.HttpClientLoader = exports.CommandLineLoader = exports.ExceptionTemplateLoader = exports.ExceptionLogLoader = exports.ExceptionHandlerLoader = exports.OrmLoader = exports.StaticLoader = exports.EngineLoader = exports.SessionLoader = exports.ServiceLoader = exports.StoreLoader = exports.ModelLoader = exports.ControllerLoader = exports.AppBuilderLoader = exports.RuntimeExceptionHandler = exports.HttpExceptionHandler = exports.RuntimeException = void 0; | ||
const app_1 = require("./core/app"); | ||
@@ -37,2 +37,6 @@ Object.defineProperty(exports, "App", { enumerable: true, get: function () { return app_1.App; } }); | ||
Object.defineProperty(exports, "Model", { enumerable: true, get: function () { return model_1.Model; } }); | ||
const relation_model_1 = require("./core/relation_model"); | ||
Object.defineProperty(exports, "RelationModel", { enumerable: true, get: function () { return relation_model_1.RelationModel; } }); | ||
const mutable_1 = require("./core/mutable"); | ||
Object.defineProperty(exports, "Mutable", { enumerable: true, get: function () { return mutable_1.Mutable; } }); | ||
const orm_1 = require("./core/orm"); | ||
@@ -39,0 +43,0 @@ Object.defineProperty(exports, "Orm", { enumerable: true, get: function () { return orm_1.Orm; } }); |
@@ -25,2 +25,4 @@ import { | ||
import { Model } from "./core/model"; | ||
import { RelationModel } from "./core/relation_model"; | ||
import { Mutable } from "./core/mutable"; | ||
import { | ||
@@ -109,2 +111,4 @@ Orm, | ||
Model, | ||
RelationModel, | ||
Mutable, | ||
Orm, | ||
@@ -111,0 +115,0 @@ OrmMigrationSource, |
{ | ||
"name": "nodart", | ||
"version": "5.2.1", | ||
"version": "5.3.0", | ||
"description": "A complete framework for creating microservices and large-scale server-side applications for businesses", | ||
@@ -18,2 +18,3 @@ "repository": { | ||
"format": "prettier --write .", | ||
"format:readme": "prettier --write ./README.md", | ||
"migrate@sources:up": "node cmd migrate all-source-up", | ||
@@ -20,0 +21,0 @@ "migrate@sources:down": "node cmd migrate all-source-down", |
254
README.md
@@ -205,7 +205,239 @@ <p align="center" dir="auto"> | ||
## SPECIFYING LOADERS | ||
You can change the basic behavior of class loaders by specifying in the base project configuration | ||
```typescript | ||
import { App, ControllerLoader, nodart } from "nodart"; | ||
class ControllerLoaderOverride extends ControllerLoader { | ||
protected _pathSuffix = "Controller"; | ||
} | ||
const config = <nodart.app.AppConfigInterface>{ | ||
loaders: { | ||
controller: ControllerLoaderOverride, | ||
}, | ||
}; | ||
new App(config); | ||
``` | ||
--- | ||
### CREATION OF CUSTOM SERVER | ||
## RELATION MODEL | ||
> An abstract class called `RelationModel` enhances the functionality of the standard query builder. The system by default use the well-liked `Knex` query builder: https://knexjs.org/guide/ | ||
> Using pre-written database queries, `RelationModel` enables you to create query blanks and chain them together into a series of inquiries. In this manner, retrieving a list or a single object from the database does not require you to always develop new methods in the data model. | ||
### **USAGE SAMPLE**: | ||
### `@/models/Book.ts`: | ||
```typescript | ||
import { RelationModel } from "nodart"; | ||
export interface IBook { | ||
id: number; | ||
author_id: number; | ||
name: string; | ||
meta_keywords: string; | ||
meta_description: string; | ||
} | ||
export class Book extends RelationModel { | ||
declare model: IBook; | ||
get table() { | ||
return "books"; | ||
} | ||
static get table() { | ||
return "books"; | ||
} | ||
statements = (query: this["query"]) => ({ | ||
author: (author_id: number) => | ||
query.where("author_id", author_id) as Promise<IBook>, | ||
}); | ||
} | ||
``` | ||
### `@/controllers/BooksController.ts`: | ||
```typescript | ||
import { Controller, nodart } from "nodart"; | ||
import { Book, IBook } from "@/models/Book"; | ||
const statuses = nodart.http.HTTP_STATUS; | ||
export class BooksController extends Controller { | ||
model = { | ||
Book: {} as Book, | ||
}; | ||
declare book: Book; | ||
init() { | ||
this.book = this.model.Book; | ||
} | ||
/** | ||
@returns: {Object<IBook>} | ||
*/ | ||
async get(id: number) { | ||
// Be aware to use the "result" property | ||
// at the end of the call chain. | ||
return await this.book.use.get({ id }).result; | ||
} | ||
/** | ||
@returns: {Array<IBook>} | ||
*/ | ||
async list(author_id: number) { | ||
// The "result" property is not required | ||
// after "on" property. | ||
return await this.book.use.list("id", "name").on.author(author_id); | ||
} | ||
async patch(id: number) { | ||
const { name } = this.http.data; | ||
const result = await this.book.use.set({ name }).at({ id }).result; | ||
return result ? { ok: true } : this.http.throw(statuses.NOT_FOUND); | ||
} | ||
async post() { | ||
const data = this.http.data as IBook; | ||
const result = await this.book.use.add(data).result; // Array<number>; | ||
return { ok: !!result?.[0] }; | ||
} | ||
async delete(id: number) { | ||
const result = await this.book.use.delete({ id }).result; | ||
return { ok: !!result }; | ||
} | ||
} | ||
``` | ||
--- | ||
## DATA MUTABLE | ||
> `nodart.mutable.MutableInterface` is an interface that provides a property with methods to cast the source data to the desired data model. | ||
### **USAGE SAMPLE**: | ||
### `@/models/Book.ts`: | ||
```typescript | ||
import { RelationModel } from "nodart"; | ||
export interface IBook { | ||
id: number; | ||
author_id: number; | ||
name: string; | ||
meta_keywords: string; | ||
meta_description: string; | ||
} | ||
export interface IBookAPI | ||
extends Omit<IBook, "meta_keywords" | "meta_description"> { | ||
meta: { | ||
description: string; | ||
keywords: string; | ||
}; | ||
} | ||
/** | ||
RelationModel implements nodart.mutable.MutableInterface | ||
*/ | ||
export class Book extends RelationModel { | ||
declare model: IBook; | ||
get table() { | ||
return "books"; | ||
} | ||
static get table() { | ||
return "books"; | ||
} | ||
readonly mutable = { | ||
book: (data: IBook): [Partial<IBookAPI>, (keyof IBook)[]] => [ | ||
// This data will be assigned to the source data: | ||
{ | ||
meta: { | ||
description: data.meta_description, | ||
keywords: data.meta_keywords, | ||
}, | ||
}, | ||
// This optional part specifies which properties | ||
// will be excluded from the source data: | ||
["meta_description", "meta_keywords"], | ||
], | ||
}; | ||
statements = (query: this["query"]) => ({ | ||
author: (author_id: number) => | ||
query.where("author_id", author_id) as Promise<IBook>, | ||
}); | ||
} | ||
``` | ||
### `@/controllers/BooksController.ts`: | ||
```typescript | ||
import { Controller } from "nodart"; | ||
import { Book } from "@/models/Book"; | ||
export class BooksController extends Controller { | ||
model = { | ||
Book: {} as Book, | ||
}; | ||
declare book: Book; | ||
init() { | ||
this.book = this.model.Book; | ||
} | ||
/** | ||
@returns: {Object<IBookAPI>} -> { | ||
id: number; | ||
author_id: number; | ||
name: string; | ||
meta: { | ||
description: string; | ||
keywords: string; | ||
} | ||
} | ||
*/ | ||
async get(id: number) { | ||
const data = await this.book.use.get({ id }).result; | ||
return this.book.mutate.get.book(data); | ||
} | ||
/** | ||
@returns: {Array<IBookAPI>} | ||
*/ | ||
async list(author_id: number) { | ||
const data = await this.book.use.list().on.author(author_id); | ||
return this.book.mutate.list.book(data); | ||
} | ||
} | ||
``` | ||
--- | ||
## CREATION OF CUSTOM SERVER | ||
```typescript | ||
new App({ ...config }).init().then(async (app) => { | ||
@@ -251,22 +483,2 @@ const server = await app.serve(3000, "https", "127.0.0.1", () => { | ||
## SPECIFYING LOADERS | ||
You can change the basic behavior of class loaders by specifying in the base project configuration | ||
```typescript | ||
import { App, ControllerLoader, nodart } from "nodart"; | ||
class ControllerLoaderOverride extends ControllerLoader { | ||
protected _pathSuffix = "Controller"; | ||
} | ||
const config = <nodart.app.AppConfigInterface>{ | ||
loaders: { | ||
controller: ControllerLoaderOverride, | ||
}, | ||
}; | ||
new App(config); | ||
``` | ||
--- | ||
@@ -273,0 +485,0 @@ |
@@ -11,3 +11,3 @@ { | ||
"dependencies": { | ||
"nodart": "^5.2.1" | ||
"nodart": "^5.3.0" | ||
}, | ||
@@ -14,0 +14,0 @@ "devDependencies": { |
@@ -12,3 +12,3 @@ { | ||
"dependencies": { | ||
"nodart": "^5.2.1" | ||
"nodart": "^5.3.0" | ||
}, | ||
@@ -15,0 +15,0 @@ "devDependencies": { |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
677873
245
11299
665