Skip to content

Commit

Permalink
feat(dandi/model-builder): don't pass source obj to model constructor
Browse files Browse the repository at this point in the history
BREAKING
  • Loading branch information
Daniel Schaffer committed Sep 10, 2019
1 parent dabcb20 commit 43e395e
Showing 1 changed file with 11 additions and 11 deletions.
22 changes: 11 additions & 11 deletions packages/dandi/model-builder/src/metadata.model.builder.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,38 +12,38 @@ import { TypeConversionError } from './type.converter'
export class MetadataModelBuilder implements ModelBuilder {
constructor(@Inject(PrimitiveTypeConverter) private primitive: PrimitiveTypeConverter) {}

public constructModel(type: Constructor<any>, obj: any, options?: ModelBuilderOptions): any {
public constructModel(type: Constructor<any>, source: any, options?: ModelBuilderOptions): any {
if (options && options.dataTransformers) {
options.dataTransformers.forEach((dt) => (obj = dt.transform(obj)))
options.dataTransformers.forEach((dt) => (source = dt.transform(source)))
}
return this.constructModelInternal(type, obj, null, options || {})
return this.constructModelInternal(type, source, null, options || {})
}

private constructModelInternal(
type: Constructor<any>,
obj: any,
source: any,
parentKey: string,
options: MemberBuilderOptions,
): any {
if (!type) {
return obj
return source
}

const modelMetadata = getModelMetadata(type)
const typeKeys = getAllKeys(modelMetadata)

const result = new type(obj)
const result = new type()

if (options.keyTransform && !Array.isArray(obj) && typeof obj === 'object') {
obj = Object.keys(obj).reduce((result, key) => {
result[options.keyTransform(key)] = obj[key]
return result
if (options.keyTransform && !Array.isArray(source) && typeof source === 'object') {
source = Object.keys(source).reduce((transformResult, key) => {
transformResult[options.keyTransform(key)] = source[key]
return transformResult
}, {})
}

typeKeys.forEach((key) => {
const memberMetadata = modelMetadata[key]
const objValue = this.getSourceValue(obj, key, memberMetadata)
const objValue = this.getSourceValue(source, key, memberMetadata)
try {
result[key] = this.constructMemberInternal(memberMetadata, this.getKey(parentKey, key), objValue, options)
} catch (err) {
Expand Down

0 comments on commit 43e395e

Please sign in to comment.