UNPKG

persistent-typescript

Version:

An easy way to have persistent data on the browser and on nodejs

64 lines (63 loc) 2.13 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); require("reflect-metadata"); var Storage_1 = require("./Storage"); var JsonPlugin_1 = require("./plugin/JsonPlugin"); var Utils_1 = require("./utils/Utils"); ; /** * Default persistent option. It uses json to load/save (json is not minified) */ function defaultOptions() { return { plugin: new JsonPlugin_1.JsonPlugin(false), path: ".persistent.json", debug: false }; } /** * This decorator permits to tell the lib to save and load your class. * @param options Persistent option, with theses options you can choose your saver, loader and the path to the file */ function Persistent(options) { if (options === void 0) { options = defaultOptions(); } return function (target) { var original = target; /** * Create a class instance * @param constructor class' constructor * @param args args' constructor */ function construct(constructor) { var args = []; for (var _i = 1; _i < arguments.length; _i++) { args[_i - 1] = arguments[_i]; } var c = function () { //@ts-ignore return constructor.apply(this, args); }; c.prototype = constructor.prototype; return new c(); } // The new instance var f = function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } var instance = construct(original, args); var className = Utils_1.Utils.getClassName(instance); if (className != null) { var classLoaded = Storage_1.storage.getInstanceOfClass(className, options); if (classLoaded != null) return classLoaded; } Storage_1.storage.store(instance, options); return instance; }; f.prototype = original.prototype; return f; }; } exports.Persistent = Persistent;