@plumier/generic-controller
Advanced tools
Comparing version 1.0.3 to 1.0.4-canary.1
@@ -1,2 +0,2 @@ | ||
import { Class, ControllerGeneric, GenericControllers, KeyOf, NestedControllerGeneric } from "@plumier/core"; | ||
import { Class, ControllerGeneric, GenericControllers, KeyOf } from "@plumier/core"; | ||
import { ControllerBuilder, GenericControllerConfiguration } from "./configuration"; | ||
@@ -10,5 +10,11 @@ declare type EntityWithRelation<T = any, R = any> = [Class<T>, KeyOf<T>, Class<R>?]; | ||
} | ||
declare function createGenericControllerType(entity: Class, builder: ControllerBuilder, controller: Class<ControllerGeneric>, nameConversion: (x: string) => string): import("@plumier/reflect").Class<any>; | ||
declare function createNestedGenericControllerType(type: EntityWithRelation, builder: ControllerBuilder, controller: Class<NestedControllerGeneric>, nameConversion: (x: string) => string): import("@plumier/reflect").Class<any>; | ||
interface ControllerFactoryOption { | ||
builder: ControllerBuilder; | ||
controller: Class<ControllerGeneric>; | ||
nameConversion: (x: string) => string; | ||
skipTag: boolean; | ||
} | ||
declare function createGenericControllerType(entity: Class, opt: ControllerFactoryOption): import("@plumier/reflect").Class<any>; | ||
declare function createNestedGenericControllerType(type: EntityWithRelation, opt: ControllerFactoryOption): import("@plumier/reflect").Class<any>; | ||
declare function createGenericController<T>(type: Class | EntityWithRelation<T>, option: CreateGenericControllerOption): import("@plumier/reflect").Class<any>; | ||
export { createGenericController, CreateGenericControllerOption, EntityWithRelation, createGenericControllerType, createNestedGenericControllerType }; |
@@ -28,10 +28,10 @@ "use strict"; | ||
} | ||
function createGenericControllerType(entity, builder, controller, nameConversion) { | ||
function createGenericControllerType(entity, opt) { | ||
var _a; | ||
const config = builder.toObject(); | ||
const config = opt.builder.toObject(); | ||
// get type of ID column on entity | ||
const idType = getIdType(entity); | ||
// create controller type dynamically | ||
const Controller = reflect_1.generic.create({ extends: controller, name: controller.name }, entity, idType); | ||
let path = (_a = config.path) !== null && _a !== void 0 ? _a : `${nameConversion(entity.name)}/:id`; | ||
const Controller = reflect_1.generic.create({ extends: opt.controller, name: opt.controller.name }, entity, idType); | ||
let path = (_a = config.path) !== null && _a !== void 0 ? _a : `${opt.nameConversion(entity.name)}/:id`; | ||
const map = validatePath(path, entity); | ||
@@ -41,3 +41,2 @@ Reflect.decorate([ | ||
configuration_1.ignoreActions(config), | ||
configuration_1.decorateTagByClass(entity, nameConversion), | ||
...configuration_1.createRouteDecorators(path, map), | ||
@@ -48,15 +47,20 @@ ...configuration_1.authorizeActions(config), | ||
], Controller); | ||
if (!opt.skipTag) { | ||
Reflect.decorate([ | ||
configuration_1.decorateTagByClass(entity, opt.nameConversion), | ||
], Controller); | ||
} | ||
return Controller; | ||
} | ||
exports.createGenericControllerType = createGenericControllerType; | ||
function createNestedGenericControllerType(type, builder, controller, nameConversion) { | ||
function createNestedGenericControllerType(type, opt) { | ||
var _a; | ||
const info = core_1.entityHelper.getRelationInfo(type); | ||
const config = builder.toObject(); | ||
const config = opt.builder.toObject(); | ||
const parentIdType = getIdType(info.parent); | ||
const idType = getIdType(info.child); | ||
const Controller = reflect_1.generic.create({ extends: controller, name: controller.name }, info.parent, info.child, parentIdType, idType); | ||
const Controller = reflect_1.generic.create({ extends: opt.controller, name: opt.controller.name }, info.parent, info.child, parentIdType, idType); | ||
// add root decorator | ||
const childPath = info.type === "OneToMany" ? info.parentProperty : nameConversion(info.child.name).toLowerCase(); | ||
let path = (_a = config.path) !== null && _a !== void 0 ? _a : `${nameConversion(info.parent.name)}/:pid/${childPath}/:id`; | ||
const childPath = info.type === "OneToMany" ? info.parentProperty : opt.nameConversion(info.child.name).toLowerCase(); | ||
let path = (_a = config.path) !== null && _a !== void 0 ? _a : `${opt.nameConversion(info.parent.name)}/:pid/${childPath}/:id`; | ||
const map = validatePath(path, info.parent, true); | ||
@@ -69,3 +73,2 @@ Reflect.decorate([ | ||
core_1.entityProvider(info.child, "id", { applyTo: ["get", "modify", "replace", "delete"] }), | ||
configuration_1.decorateTagByRelation(info, nameConversion), | ||
...configuration_1.createRouteDecorators(path, map), | ||
@@ -76,2 +79,7 @@ ...configuration_1.authorizeActions(config), | ||
], Controller); | ||
if (!opt.skipTag) { | ||
Reflect.decorate([ | ||
configuration_1.decorateTagByRelation(info, opt.nameConversion) | ||
], Controller); | ||
} | ||
return Controller; | ||
@@ -88,7 +96,8 @@ } | ||
option.config(builder); | ||
const opt = { builder, nameConversion: option.nameConversion }; | ||
if (Array.isArray(type)) { | ||
return createNestedGenericControllerType(type, builder, option.controllers[1], option.nameConversion); | ||
return createNestedGenericControllerType(type, Object.assign(Object.assign({}, opt), { controller: option.controllers[1], skipTag: true })); | ||
} | ||
return createGenericControllerType(type, builder, option.controllers[0], option.nameConversion); | ||
return createGenericControllerType(type, Object.assign(Object.assign({}, opt), { controller: option.controllers[0], skipTag: true })); | ||
} | ||
exports.createGenericController = createGenericController; |
@@ -25,4 +25,9 @@ "use strict"; | ||
for (const decorator of decorators) { | ||
const config = getControllerBuilderFromConfig(decorator.config); | ||
const ctl = factory_1.createGenericControllerType(type, config, genericControllers[0], nameConversion); | ||
const builder = getControllerBuilderFromConfig(decorator.config); | ||
const ctl = factory_1.createGenericControllerType(type, { | ||
builder, | ||
controller: genericControllers[0], | ||
nameConversion, | ||
skipTag: false | ||
}); | ||
controllers.push(ctl); | ||
@@ -39,3 +44,9 @@ } | ||
for (const decorator of decorators) { | ||
const ctl = factory_1.createNestedGenericControllerType([decorator.target, prop.name], getControllerBuilderFromConfig(decorator.config), genericControllers[1], nameConversion); | ||
const builder = getControllerBuilderFromConfig(decorator.config); | ||
const ctl = factory_1.createNestedGenericControllerType([decorator.target, prop.name], { | ||
builder, | ||
controller: genericControllers[1], | ||
nameConversion, | ||
skipTag: false | ||
}); | ||
controllers.push(ctl); | ||
@@ -42,0 +53,0 @@ } |
{ | ||
"name": "@plumier/generic-controller", | ||
"version": "1.0.3", | ||
"version": "1.0.4-canary.1+dc54af9", | ||
"description": "Plumier generic controller implementation", | ||
@@ -23,4 +23,4 @@ "main": "lib/index.js", | ||
"dependencies": { | ||
"@plumier/core": "^1.0.3", | ||
"@plumier/query-parser": "^1.0.3" | ||
"@plumier/core": "1.0.4-canary.1+dc54af9", | ||
"@plumier/query-parser": "1.0.4-canary.1+dc54af9" | ||
}, | ||
@@ -40,3 +40,3 @@ "devDependencies": { | ||
}, | ||
"gitHead": "31e9b4a51607ec43050585daf1bde362842334dd" | ||
"gitHead": "dc54af982b53f0a1a6119b3ca34928a73b773eac" | ||
} |
Manifest confusion
Supply chain riskThis package has inconsistent metadata. This could be malicious or caused by an error when publishing the package.
Found 1 instance in 1 package
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
58276
1158
2
1
- Removed@plumier/core@1.1.3(transitive)
- Removed@plumier/reflect@1.1.3(transitive)
- Removed@plumier/validator@1.1.3(transitive)
- Removed@types/accepts@1.3.7(transitive)
- Removed@types/acorn@4.0.6(transitive)
- Removed@types/body-parser@1.19.5(transitive)
- Removed@types/connect@3.4.38(transitive)
- Removed@types/content-disposition@0.5.8(transitive)
- Removed@types/cookies@0.9.0(transitive)
- Removed@types/debug@4.1.12(transitive)
- Removed@types/estree@1.0.6(transitive)
- Removed@types/express@5.0.0(transitive)
- Removed@types/express-serve-static-core@5.0.6(transitive)
- Removed@types/glob@7.2.0(transitive)
- Removed@types/http-assert@1.5.6(transitive)
- Removed@types/http-errors@2.0.4(transitive)
- Removed@types/keygrip@1.0.6(transitive)
- Removed@types/koa@2.15.0(transitive)
- Removed@types/koa-compose@3.2.8(transitive)
- Removed@types/mime@1.3.5(transitive)
- Removed@types/minimatch@5.1.2(transitive)
- Removed@types/ms@2.1.0(transitive)
- Removed@types/node@22.13.5(transitive)
- Removed@types/qs@6.9.18(transitive)
- Removed@types/range-parser@1.2.7(transitive)
- Removed@types/send@0.17.4(transitive)
- Removed@types/serve-static@1.15.7(transitive)
- Removed@types/validator@13.12.2(transitive)
- Removedacorn@8.8.1(transitive)
- Removedansi-styles@4.3.0(transitive)
- Removedbalanced-match@1.0.2(transitive)
- Removedbrace-expansion@1.1.11(transitive)
- Removedchalk@4.1.2(transitive)
- Removedcolor-convert@2.0.1(transitive)
- Removedcolor-name@1.1.4(transitive)
- Removedconcat-map@0.0.1(transitive)
- Removeddebug@4.4.0(transitive)
- Removedfs.realpath@1.0.0(transitive)
- Removedglob@7.2.3(transitive)
- Removedhas-flag@4.0.0(transitive)
- Removedinflight@1.0.6(transitive)
- Removedinherits@2.0.4(transitive)
- Removedminimatch@3.1.2(transitive)
- Removedms@2.1.3(transitive)
- Removedonce@1.4.0(transitive)
- Removedpath-is-absolute@1.0.1(transitive)
- Removedpath-to-regexp@6.3.0(transitive)
- Removedreflect-metadata@0.1.14(transitive)
- Removedsupports-color@7.2.0(transitive)
- Removedtslib@2.8.1(transitive)
- Removedundici-types@6.20.0(transitive)
- Removedvalidator@13.12.0(transitive)
- Removedwrappy@1.0.2(transitive)