Skip to content

Commit

Permalink
Only call split() once and avoid a join() for setPath()
Browse files Browse the repository at this point in the history
  • Loading branch information
kanongil authored and rwjblue committed Jan 2, 2019
1 parent 5cf6543 commit a51c182
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 7 deletions.
4 changes: 2 additions & 2 deletions packages/@ember/-internals/metal/lib/property_get.ts
Original file line number Diff line number Diff line change
Expand Up @@ -133,9 +133,9 @@ export function get(obj: object, keyName: string): any {
return value;
}

export function _getPath<T extends object>(root: T, path: string): any {
export function _getPath<T extends object>(root: T, path: string | string[]): any {
let obj: any = root;
let parts = path.split('.');
let parts = typeof path === 'string' ? path.split('.') : path;

for (let i = 0; i < parts.length; i++) {
if (obj === undefined || obj === null || (obj as MaybeHasIsDestroyed).isDestroyed) {
Expand Down
9 changes: 4 additions & 5 deletions packages/@ember/-internals/metal/lib/property_set.ts
Original file line number Diff line number Diff line change
Expand Up @@ -136,17 +136,16 @@ if (DEBUG) {

function setPath(root: object, path: string, value: any, tolerant?: boolean): any {
let parts = path.split('.');
let keyName = parts.pop() as string;
let keyName = parts.pop()!;

assert('Property set failed: You passed an empty path', keyName!.trim().length > 0);
assert('Property set failed: You passed an empty path', keyName.trim().length > 0);

let newPath = parts.join('.');
let newRoot = getPath(root, newPath);
let newRoot = getPath(root, parts);

if (newRoot !== null && newRoot !== undefined) {
return set(newRoot, keyName, value);
} else if (!tolerant) {
throw new EmberError(`Property set failed: object in path "${newPath}" could not be found.`);
throw new EmberError(`Property set failed: object in path "${parts.join('.')}" could not be found.`);
}
}

Expand Down

0 comments on commit a51c182

Please sign in to comment.