Skip to content
Toggle navigation
Projects
Groups
Snippets
Help
public
/
sequelize
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
不要怂,就是干,撸起袖子干!
Commit 0258081f
authored
Jan 26, 2018
by
Sushant
Committed by
GitHub
Jan 26, 2018
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix(symbols): symbols not assigned by lodash.defaults (#8937)
1 parent
bb25c19b
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
96 additions
and
11 deletions
lib/model.js
lib/utils.js
test/integration/model/scope.test.js
test/unit/utils.test.js
lib/model.js
View file @
0258081
...
@@ -1356,7 +1356,8 @@ class Model {
...
@@ -1356,7 +1356,8 @@ class Model {
const
self
=
class
extends
this
{};
const
self
=
class
extends
this
{};
let
scope
;
let
scope
;
let
scopeName
;
let
scopeName
;
Object
.
defineProperty
(
self
,
'name'
,
{
value
:
this
.
name
});
Object
.
defineProperty
(
self
,
'name'
,
{
value
:
this
.
name
});
self
.
_scope
=
{};
self
.
_scope
=
{};
self
.
_scopeNames
=
[];
self
.
_scopeNames
=
[];
...
@@ -1367,6 +1368,7 @@ class Model {
...
@@ -1367,6 +1368,7 @@ class Model {
}
}
const
options
=
_
.
flatten
(
arguments
);
const
options
=
_
.
flatten
(
arguments
);
for
(
const
option
of
options
)
{
for
(
const
option
of
options
)
{
scope
=
null
;
scope
=
null
;
scopeName
=
null
;
scopeName
=
null
;
...
@@ -2053,7 +2055,7 @@ class Model {
...
@@ -2053,7 +2055,7 @@ class Model {
if
(
instance
===
null
)
{
if
(
instance
===
null
)
{
values
=
_
.
clone
(
options
.
defaults
)
||
{};
values
=
_
.
clone
(
options
.
defaults
)
||
{};
if
(
_
.
isPlainObject
(
options
.
where
))
{
if
(
_
.
isPlainObject
(
options
.
where
))
{
values
=
_
.
defaults
(
values
,
options
.
where
);
values
=
Utils
.
defaults
(
values
,
options
.
where
);
}
}
instance
=
this
.
build
(
values
);
instance
=
this
.
build
(
values
);
...
@@ -2106,7 +2108,7 @@ class Model {
...
@@ -2106,7 +2108,7 @@ class Model {
transaction
=
t
;
transaction
=
t
;
options
.
transaction
=
t
;
options
.
transaction
=
t
;
return
this
.
findOne
(
_
.
defaults
({
transaction
},
options
));
return
this
.
findOne
(
Utils
.
defaults
({
transaction
},
options
));
}).
then
(
instance
=>
{
}).
then
(
instance
=>
{
if
(
instance
!==
null
)
{
if
(
instance
!==
null
)
{
return
[
instance
,
false
];
return
[
instance
,
false
];
...
@@ -2114,7 +2116,7 @@ class Model {
...
@@ -2114,7 +2116,7 @@ class Model {
values
=
_
.
clone
(
options
.
defaults
)
||
{};
values
=
_
.
clone
(
options
.
defaults
)
||
{};
if
(
_
.
isPlainObject
(
options
.
where
))
{
if
(
_
.
isPlainObject
(
options
.
where
))
{
values
=
_
.
defaults
(
values
,
options
.
where
);
values
=
Utils
.
defaults
(
values
,
options
.
where
);
}
}
options
.
exception
=
true
;
options
.
exception
=
true
;
...
@@ -2148,7 +2150,7 @@ class Model {
...
@@ -2148,7 +2150,7 @@ class Model {
}
}
// Someone must have created a matching instance inside the same transaction since we last did a find. Let's find it!
// Someone must have created a matching instance inside the same transaction since we last did a find. Let's find it!
return
this
.
findOne
(
_
.
defaults
({
return
this
.
findOne
(
Utils
.
defaults
({
transaction
:
internalTransaction
?
null
:
transaction
transaction
:
internalTransaction
?
null
:
transaction
},
options
)).
then
(
instance
=>
{
},
options
)).
then
(
instance
=>
{
// Sanity check, ideally we caught this at the defaultFeilds/err.fields check
// Sanity check, ideally we caught this at the defaultFeilds/err.fields check
...
@@ -2184,7 +2186,7 @@ class Model {
...
@@ -2184,7 +2186,7 @@ class Model {
let
values
=
_
.
clone
(
options
.
defaults
)
||
{};
let
values
=
_
.
clone
(
options
.
defaults
)
||
{};
if
(
_
.
isPlainObject
(
options
.
where
))
{
if
(
_
.
isPlainObject
(
options
.
where
))
{
values
=
_
.
defaults
(
values
,
options
.
where
);
values
=
Utils
.
defaults
(
values
,
options
.
where
);
}
}
...
@@ -2875,8 +2877,8 @@ class Model {
...
@@ -2875,8 +2877,8 @@ class Model {
const
filteredScope
=
_
.
omit
(
scope
,
'include'
);
// Includes need special treatment
const
filteredScope
=
_
.
omit
(
scope
,
'include'
);
// Includes need special treatment
_
.
defaults
(
options
,
filteredScope
);
Utils
.
defaults
(
options
,
filteredScope
);
_
.
defaults
(
options
.
where
,
filteredScope
.
where
);
Utils
.
defaults
(
options
.
where
,
filteredScope
.
where
);
if
(
scope
.
include
)
{
if
(
scope
.
include
)
{
options
.
include
=
options
.
include
||
[];
options
.
include
=
options
.
include
||
[];
...
@@ -2944,7 +2946,7 @@ class Model {
...
@@ -2944,7 +2946,7 @@ class Model {
const
updatedAtAttr
=
this
.
_timestampAttributes
.
updatedAt
;
const
updatedAtAttr
=
this
.
_timestampAttributes
.
updatedAt
;
const
versionAttr
=
this
.
_versionAttribute
;
const
versionAttr
=
this
.
_versionAttribute
;
const
updatedAtAttribute
=
this
.
rawAttributes
[
updatedAtAttr
];
const
updatedAtAttribute
=
this
.
rawAttributes
[
updatedAtAttr
];
options
=
_
.
defaults
({},
options
,
{
options
=
Utils
.
defaults
({},
options
,
{
by
:
1
,
by
:
1
,
attributes
:
{},
attributes
:
{},
where
:
{},
where
:
{},
...
@@ -3737,7 +3739,7 @@ class Model {
...
@@ -3737,7 +3739,7 @@ class Model {
* @return {Promise<this>}
* @return {Promise<this>}
*/
*/
reload
(
options
)
{
reload
(
options
)
{
options
=
_
.
defaults
({},
options
,
{
options
=
Utils
.
defaults
({},
options
,
{
where
:
this
.
where
(),
where
:
this
.
where
(),
include
:
this
.
_options
.
include
||
null
include
:
this
.
_options
.
include
||
null
});
});
...
...
lib/utils.js
View file @
0258081
...
@@ -639,6 +639,45 @@ function camelizeObjectKeys(obj) {
...
@@ -639,6 +639,45 @@ function camelizeObjectKeys(obj) {
});
});
return
newObj
;
return
newObj
;
}
}
exports
.
camelizeObjectKeys
=
camelizeObjectKeys
;
exports
.
camelizeObjectKeys
=
camelizeObjectKeys
;
/**
* Assigns own and inherited enumerable string and symbol keyed properties of source
* objects to the destination object.
*
* https://lodash.com/docs/4.17.4#defaults
*
* **Note:** This method mutates `object`.
*
* @param {Object} object The destination object.
* @param {...Object} [sources] The source objects.
* @returns {Object} Returns `object`.
* @private
*/
function
defaults
(
object
)
{
object
=
Object
(
object
);
const
sources
=
_
.
tail
(
arguments
);
sources
.
forEach
(
source
=>
{
if
(
source
)
{
source
=
Object
(
source
);
getComplexKeys
(
source
).
forEach
(
key
=>
{
const
value
=
object
[
key
];
if
(
value
===
undefined
||
(
_
.
eq
(
value
,
Object
.
prototype
[
key
])
&&
!
Object
.
prototype
.
hasOwnProperty
.
call
(
object
,
key
)
)
)
{
object
[
key
]
=
source
[
key
];
}
});
}
});
return
object
;
}
exports
.
defaults
=
defaults
;
test/integration/model/scope.test.js
View file @
0258081
...
@@ -91,5 +91,21 @@ describe(Support.getTestDialectTeaser('Model'), () => {
...
@@ -91,5 +91,21 @@ describe(Support.getTestDialectTeaser('Model'), () => {
expect
(
records
[
0
].
get
(
'other_value'
)).
to
.
equal
(
10
);
expect
(
records
[
0
].
get
(
'other_value'
)).
to
.
equal
(
10
);
});
});
});
});
it
(
'should keep symbols after default assignment'
,
function
()
{
return
this
.
ScopeMe
.
scope
(
'highAccess'
).
findOne
()
.
then
(
record
=>
{
expect
(
record
.
username
).
to
.
equal
(
'tobi'
);
return
this
.
ScopeMe
.
scope
(
'lessThanFour'
).
findAll
({
where
:
{}
});
})
.
then
(
records
=>
{
expect
(
records
).
to
.
have
.
length
(
2
);
expect
(
records
[
0
].
get
(
'access_level'
)).
to
.
equal
(
3
);
expect
(
records
[
1
].
get
(
'access_level'
)).
to
.
equal
(
3
);
return
this
.
ScopeMe
.
scope
(
'issue8473'
).
findAll
();
});
});
});
});
});
});
test/unit/utils.test.js
View file @
0258081
...
@@ -41,6 +41,34 @@ suite(Support.getTestDialectTeaser('Utils'), () => {
...
@@ -41,6 +41,34 @@ suite(Support.getTestDialectTeaser('Utils'), () => {
});
});
});
});
suite
(
'defaults'
,
()
=>
{
test
(
'defaults normal object'
,
()
=>
{
expect
(
Utils
.
defaults
(
{
a
:
1
,
c
:
3
},
{
b
:
2
},
{
c
:
4
,
d
:
4
}
)).
to
.
eql
({
a
:
1
,
b
:
2
,
c
:
3
,
d
:
4
});
});
test
(
'defaults symbol keys'
,
()
=>
{
expect
(
Utils
.
defaults
(
{
a
:
1
,
[
Symbol
.
for
(
'c'
)]:
3
},
{
b
:
2
},
{
[
Symbol
.
for
(
'c'
)]:
4
,
[
Symbol
.
for
(
'd'
)]:
4
}
)).
to
.
eql
({
a
:
1
,
b
:
2
,
[
Symbol
.
for
(
'c'
)]:
3
,
[
Symbol
.
for
(
'd'
)]:
4
});
});
});
suite
(
'mapFinderOptions'
,
()
=>
{
suite
(
'mapFinderOptions'
,
()
=>
{
test
(
'virtual attribute dependencies'
,
()
=>
{
test
(
'virtual attribute dependencies'
,
()
=>
{
expect
(
Utils
.
mapFinderOptions
({
expect
(
Utils
.
mapFinderOptions
({
...
...
Write
Preview
Markdown
is supported
Attach a file
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to post a comment