Commit 5b09b888 authored by nanahira's avatar nanahira

minor

parent 54a53de4
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
"types": "dist/index.d.ts", "types": "dist/index.d.ts",
"scripts": { "scripts": {
"lint": "eslint --fix .", "lint": "eslint --fix .",
"build": "tsc", "build": "rm -rf dist && tsc",
"start": "node dist/index.js" "start": "node dist/index.js"
}, },
"repository": { "repository": {
......
...@@ -124,22 +124,21 @@ const schemaFields: (keyof Schema.Base)[] = [ ...@@ -124,22 +124,21 @@ const schemaFields: (keyof Schema.Base)[] = [
'meta', 'meta',
]; ];
export function RegisterSchema(options: SchemaClassOptions = {}) { function applySchemaForClass<C extends { new (...args: any[]): any }>(
return function <C extends { new (...args: any[]): any }>(originalClass: C) { originalClass: C,
Metadata.set('SchemaClassOptions', options)(originalClass); instance: TypeFromClass<C>,
originalObject: any,
) {
const schema = schemaFromClass(originalClass); const schema = schemaFromClass(originalClass);
const newClass = (function (...args: any[]): any {
const instance = new originalClass(...args);
const originalObject = args[0];
const newRawObject = new schema(originalObject); const newRawObject = new schema(originalObject);
console.log('before', JSON.stringify(newRawObject, null, 2)); //console.log('before', JSON.stringify(newRawObject, null, 2));
for (const key in schema.dict) { for (const key in schema.dict) {
const transformer = reflector.get('Transformer', originalClass, key); const transformer = reflector.get('Transformer', originalClass, key);
if (transformer) { if (transformer) {
newRawObject[key] = transformer(newRawObject[key]); newRawObject[key] = transformer(newRawObject[key]);
} }
} }
console.log('after', JSON.stringify(newRawObject, null, 2)); //console.log('after', JSON.stringify(newRawObject, null, 2));
for (const key in newRawObject) { for (const key in newRawObject) {
Object.defineProperty(instance, key, { Object.defineProperty(instance, key, {
writable: true, writable: true,
...@@ -148,8 +147,17 @@ export function RegisterSchema(options: SchemaClassOptions = {}) { ...@@ -148,8 +147,17 @@ export function RegisterSchema(options: SchemaClassOptions = {}) {
value: newRawObject[key], value: newRawObject[key],
}); });
} }
//Object.assign(instance, newRawObject);
return instance; return instance;
}
export function RegisterSchema(options: SchemaClassOptions = {}) {
return function <C extends { new (...args: any[]): any }>(originalClass: C) {
Metadata.set('SchemaClassOptions', options)(originalClass);
const schema = schemaFromClass(originalClass);
const newClass = (function (...args: any[]): any {
const instance = new originalClass(...args);
const originalObject = args[0];
return applySchemaForClass(originalClass, instance, originalObject);
} as unknown) as C & Schema<TypeFromClass<C>>; } as unknown) as C & Schema<TypeFromClass<C>>;
Object.defineProperty(newClass, 'name', { Object.defineProperty(newClass, 'name', {
value: originalClass.name, value: originalClass.name,
......
...@@ -10,10 +10,14 @@ ...@@ -10,10 +10,14 @@
"sourceMap": true "sourceMap": true
}, },
"compileOnSave": true, "compileOnSave": true,
"allowJs": true,
"include": [ "include": [
"*.ts", "./src/**/*.ts",
"src/**/*.ts", "./test/**/*.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