Commit 5b09b888 authored by nanahira's avatar nanahira

minor

parent 54a53de4
......@@ -6,7 +6,7 @@
"types": "dist/index.d.ts",
"scripts": {
"lint": "eslint --fix .",
"build": "tsc",
"build": "rm -rf dist && tsc",
"start": "node dist/index.js"
},
"repository": {
......
......@@ -124,6 +124,32 @@ const schemaFields: (keyof Schema.Base)[] = [
'meta',
];
function applySchemaForClass<C extends { new (...args: any[]): any }>(
originalClass: C,
instance: TypeFromClass<C>,
originalObject: any,
) {
const schema = schemaFromClass(originalClass);
const newRawObject = new schema(originalObject);
//console.log('before', JSON.stringify(newRawObject, null, 2));
for (const key in schema.dict) {
const transformer = reflector.get('Transformer', originalClass, key);
if (transformer) {
newRawObject[key] = transformer(newRawObject[key]);
}
}
//console.log('after', JSON.stringify(newRawObject, null, 2));
for (const key in newRawObject) {
Object.defineProperty(instance, key, {
writable: true,
enumerable: true,
configurable: true,
value: newRawObject[key],
});
}
return instance;
}
export function RegisterSchema(options: SchemaClassOptions = {}) {
return function <C extends { new (...args: any[]): any }>(originalClass: C) {
Metadata.set('SchemaClassOptions', options)(originalClass);
......@@ -131,25 +157,7 @@ export function RegisterSchema(options: SchemaClassOptions = {}) {
const newClass = (function (...args: any[]): any {
const instance = new originalClass(...args);
const originalObject = args[0];
const newRawObject = new schema(originalObject);
console.log('before', JSON.stringify(newRawObject, null, 2));
for (const key in schema.dict) {
const transformer = reflector.get('Transformer', originalClass, key);
if (transformer) {
newRawObject[key] = transformer(newRawObject[key]);
}
}
console.log('after', JSON.stringify(newRawObject, null, 2));
for (const key in newRawObject) {
Object.defineProperty(instance, key, {
writable: true,
enumerable: true,
configurable: true,
value: newRawObject[key],
});
}
//Object.assign(instance, newRawObject);
return instance;
return applySchemaForClass(originalClass, instance, originalObject);
} as unknown) as C & Schema<TypeFromClass<C>>;
Object.defineProperty(newClass, 'name', {
value: originalClass.name,
......
......@@ -10,10 +10,14 @@
"sourceMap": true
},
"compileOnSave": true,
"allowJs": true,
"include": [
"*.ts",
"src/**/*.ts",
"test/**/*.ts"
"./src/**/*.ts",
"./test/**/*.ts",
"./index.ts",
"!*.d.ts"
],
"exclude": [
"node_modules",
"dist"
]
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment