Page Menu
Home
Sealhub
Search
Configure Global Search
Log In
Files
F3893866
json-object.ts
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
1 KB
Referenced Files
None
Subscribers
None
json-object.ts
View Options
import
{
Field
,
Context
}
from
"../../../main"
;
import
flattenObjectToDotNotation
from
"../../../utils/flatten-object-dot-notation"
;
export
default
class
JsonObject
extends
Field
{
typeName
=
"json-object"
;
async
isProperValue
(
context
:
Context
,
new_value
:
{},
__
:
{})
{
let
stringified_value
;
try
{
stringified_value
=
JSON
.
stringify
(
new_value
);
}
catch
(
e
)
{
return
Field
.
invalid
(
context
.
app
.
i18n
(
"invalid_json_object"
,
[
new_value
])
);
}
if
(
!
stringified_value
.
startsWith
(
"{"
))
{
return
Field
.
invalid
(
context
.
app
.
i18n
(
"invalid_json_object"
));
}
return
Field
.
valid
();
}
async
encode
(
_
:
Context
,
value
:
{})
{
if
(
value
===
null
)
{
return
null
;
}
return
JSON
.
parse
(
JSON
.
stringify
(
value
));
}
async
getAggregationStages
(
_
:
Context
,
filter_value
:
{
[
value
:
string
]
:
any
}
)
{
// the following will pick only filters relating to this particular field and turn them into dot notation.
// example when field "metadata" is of type json-object:
// {name: "Hoover", metadata: {"age": 22}}
// will become
// {"metadata.age": 22 }
// note that "name" is missing
const
flattened_filter
=
flattenObjectToDotNotation
(
await
this
.
getValuePath
(),
filter_value
||
{}
);
for
(
let
prop_path
of
Object
.
keys
(
flattened_filter
))
{
const
filter_entry
=
flattened_filter
[
prop_path
];
flattened_filter
[
prop_path
]
=
getQueryWithProperOperator
(
filter_entry
);
}
return
[{
$match
:
flattened_filter
}];
}
}
function
getQueryWithProperOperator
(
filter
:
any
)
{
let
filter_as_number
=
parseFloat
(
filter
);
return
Number
.
isFinite
(
filter_as_number
)
?
{
$in
:
[
filter
,
filter_as_number
]
}
:
{
$eq
:
filter
};
}
File Metadata
Details
Attached
Mime Type
text/x-java
Expires
Mon, May 19, 00:57 (1 d, 17 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
647704
Default Alt Text
json-object.ts (1 KB)
Attached To
Mode
rS Sealious
Attached
Detach File
Event Timeline
Log In to Comment