This commit is contained in:
zznty
2024-05-30 16:04:19 +07:00
commit 4146027cb7
797 changed files with 116788 additions and 0 deletions

View File

@@ -0,0 +1,27 @@
export { parse };
import { types } from './types';
function parse(str) {
// We don't use the reviver option in `JSON.parse(str, reviver)` because it doesn't support `undefined` values
const value = JSON.parse(str);
return modifier(value);
}
function modifier(value) {
if (typeof value === 'string') {
return reviver(value);
}
if (typeof value === 'object' && value !== null) {
Object.entries(value).forEach(([key, val]) => {
;
value[key] = modifier(val);
});
}
return value;
}
function reviver(value) {
for (const { match, deserialize } of types) {
if (match(value)) {
return deserialize(value, parse);
}
}
return value;
}