smartjson/ts/index.ts

60 lines
1.4 KiB
TypeScript
Raw Normal View History

import * as plugins from './smartjson.plugins';
export class Smartjson {
// ======
// STATIC
// ======
2020-10-03 11:20:58 +00:00
/**
* allows you to parse a json
*/
public static parse = plugins.bufferJson.parse;
2019-12-15 19:05:20 +00:00
public static stringify = (objArg: any, optionsArg: plugins.IStableJsonTypes['Options']) => {
2020-10-03 11:20:58 +00:00
const bufferedJson = plugins.bufferJson.stringify(objArg);
objArg = JSON.parse(bufferedJson);
2019-07-04 15:04:24 +00:00
return plugins.stableJson(objArg, optionsArg);
2019-08-25 14:03:34 +00:00
}
2020-10-05 11:13:17 +00:00
/**
* enfolds data from an object
*/
public static enfoldFromObject(objectArg) {
const newInstance = new this();
for (const keyName in objectArg) {
if (newInstance.saveableProperties.indexOf(keyName) !== -1) {
newInstance[keyName] = objectArg[keyName];
}
}
return newInstance;
}
// ========
// INSTANCE
// ========
2017-02-27 13:05:03 +00:00
2019-08-09 08:55:17 +00:00
public saveableProperties: string[];
2017-02-27 13:05:03 +00:00
/**
* folds a class into an object
*/
2019-08-09 08:55:17 +00:00
public foldToObject() {
const newFoldedObject: { [key: string]: any } = {};
for (const keyName of this.saveableProperties) {
2019-07-04 15:03:15 +00:00
newFoldedObject[keyName] = plugins.lodashCloneDeep(this[keyName]);
2017-02-27 13:05:03 +00:00
}
2018-07-23 22:38:54 +00:00
return newFoldedObject;
2017-02-27 13:05:03 +00:00
}
}
/**
* Decorator that marks a property as foldable
*/
export let foldDec = () => {
return (target: any, key: string) => {
2018-07-23 22:38:54 +00:00
if (!target.saveableProperties) {
target.saveableProperties = [];
}
target.saveableProperties.push(key);
};
};