////////////////////////////////////////////////////////////////////////// // // // This is a generated file. You can view the original // // source in your browser if your browser supports source maps. // // Source maps are supported by all recent versions of Chrome, Safari, // // and Firefox, and by Internet Explorer 11. // // // ////////////////////////////////////////////////////////////////////////// (function () { /* Imports */ var Meteor = Package.meteor.Meteor; var global = Package.meteor.global; var meteorEnv = Package.meteor.meteorEnv; var $ = Package.jquery.$; var jQuery = Package.jquery.jQuery; var Tracker = Package.tracker.Tracker; var Deps = Package.tracker.Deps; var ReactiveDict = Package['reactive-dict'].ReactiveDict; var Session = Package.session.Session; var _ = Package.underscore._; var EJSON = Package.ejson.EJSON; /* Package-scope variables */ var PersistentSession; (function(){ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // // // packages/cultofcoders_persistent-session/lib/persistent_session.js // // // ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // // This file uses code direct from Meteor's reactive-dict package, mostly from // this file: https://github.com/meteor/meteor/blob/0ef65cc/packages/reactive-dict/reactive-dict.js // // helpers: https://github.com/meteor/meteor/blob/0ef65cc/packages/reactive-dict/reactive-dict.js#L1-L16 var stringify = function (value) { if (value === undefined) return 'undefined'; return EJSON.stringify(value); }; var parse = function (serialized) { if (serialized === undefined || serialized === 'undefined') return undefined; return EJSON.parse(serialized); }; var changed = function (v) { v && v.changed(); }; const oldSession = new ReactiveDict('_session'); PersistentSession = function (dictName) { if (_.isString(dictName)) { this._dictName = dictName; // when "session", use the existing dict if (dictName == "session") { this._dictName = "" // we don't need a name for session this._dict = oldSession; // we also want to use the global (incase something was set previously) // not session? create a new dict } else { this._dict = new ReactiveDict(dictName); } } else { throw new Error("dictName must be a string"); } /* * Used to determine if we need to migrate how the data is stored. * Each time the data format changes, change this number. * * It should match the current major + minor version: * EG: 0.3 = 3, 1.2 = 12, 2.0 = 20, or for 0.3.x: 3, or 1.x: 10 * */ var PSA_DATA_VERSION = 4; // === INITIALIZE KEY TRACKING === this.psKeys = {}; this.psKeyList = []; this.psaKeys = {}; this.psaKeyList = []; // initialize default method setting this.default_method = 'temporary'; // valid options: 'temporary', 'persistent', 'authenticated' if (Meteor.settings && Meteor.settings.public && Meteor.settings.public.persistent_session) { this.default_method = Meteor.settings.public.persistent_session.default_method; } var self = this; // === HOUSEKEEPING === /* * Converts previously stored values into EJSON compatible formats. */ function migrateToEJSON() { if (amplify.store('__PSDATAVERSION__' + self._dictName) >= 1) { return; } var psKeyList = amplify.store('__PSKEYS__' + self._dictName); var psaKeyList = amplify.store('__PSAKEYS__' + self._dictName); _.each([psKeyList, psaKeyList], function(list) { _.each(list, function(key) { amplify.store(key, EJSON.stringify(amplify.store(key))); }); }); amplify.store('__PSDATAVERSION__' + self._dictName, 2); }; function migrate3Xto4X() { if (amplify.store('__PSDATAVERSION__' + self._dictName) >= PSA_DATA_VERSION) { return; } var psKeyList = amplify.store('__PSKEYS__' + self._dictName); var psaKeyList = amplify.store('__PSAKEYS__' + self._dictName); _.each([psKeyList, psaKeyList], function(list) { _.each(list, function(key) { var invalid = false; try { EJSON.parse(amplify.store(self._dictName+key)); } catch (error) { //The data is already in the format that we expect //Unfortunately there is no EJSON.canParse method invalid = true; } if (!invalid) { var parsed = EJSON.parse(amplify.store(self._dictName+key)); var jsoned = EJSON.toJSONValue(parsed); amplify.store(self._dictName+key, jsoned); } }); }); amplify.store('__PSDATAVERSION__' + self._dictName, 4); } if (Meteor.isClient) { // --- on startup, load persistent data back into meteor session --- Meteor.startup(function(){ var val; migrateToEJSON(); migrate3Xto4X(); // persistent data var psList = amplify.store('__PSKEYS__' + self._dictName); if ( typeof psList == "object" && psList.length!==undefined ) { for (var i=0; i= 0 ) { auth = true; } if ( auth || _.indexOf(this.psKeyList, key) >= 0 ) { persist = true; } this.set(key, value, persist, auth); }; // === SET DEFAULT === PersistentSession.prototype.old_setDefault = function (/* arguments */){ return this._dict.setDefault.apply(this._dict, arguments); }; PersistentSession.prototype.setDefault = function _psSetDefault(keyOrObject, value, persist, auth) { var self = this; if (_.isObject(keyOrObject)) { _.each(keyOrObject, function(value, key) { self.setDefault(key, value, persist, auth); }); return; } if ( this.get(keyOrObject) === undefined) { this.set(keyOrObject, value, persist, auth); } }; // === SET DEFAULT TEMP === PersistentSession.prototype.setDefaultTemp = function _psSetDefaultTemp(keyOrObject, value) { if (_.isObject(keyOrObject)) { value = undefined; } this.setDefault(keyOrObject, value, false, false); }; // === SET DEFAULT PERSISTENT === PersistentSession.prototype.setDefaultPersistent = function _psSetDefaultPersistent(keyOrObject, value) { if (_.isObject(keyOrObject)) { value = undefined; } this.setDefault(keyOrObject, value, true, false); }; // === SET DEFAULT AUTH === PersistentSession.prototype.setDefaultAuth = function _psSetDefaultAuth(keyOrObject, value) { if (_.isObject(keyOrObject)) { value = undefined; } this.setDefault(keyOrObject, value, true, true); }; // automatically apply PersistentSession to Session // var oldSession = _.clone(Session); // console.log(Session); _.extend(Session, new PersistentSession("session")) ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// }).call(this); /* Exports */ Package._define("cultofcoders:persistent-session", { PersistentSession: PersistentSession }); })();