UNPKG

sourcebuster

Version:

Get sources of your site's visitors (utm / organic / referral / typein).

88 lines (64 loc) 2.32 kB
"use strict"; var data = require('./data'), cookies = require('./helpers/cookies'); module.exports = { go: function(lifetime, domain, isolate) { var migrate = this.migrations, _with = { l: lifetime, d: domain, i: isolate }; var i; if (!cookies.get(data.containers.first) && !cookies.get(data.service.migrations)) { var mids = []; for (i = 0; i < migrate.length; i++) { mids.push(migrate[i].id); } var advance = ''; for (i = 0; i < mids.length; i++) { advance += mids[i] + '=1'; if (i < mids.length - 1) { advance += data.delimiter; } } cookies.set(data.service.migrations, advance, _with.l, _with.d, _with.i); } else if (!cookies.get(data.service.migrations)) { // We have only one migration for now, so just for (i = 0; i < migrate.length; i++) { migrate[i].go(migrate[i].id, _with); } } }, migrations: [ { id: '1418474375998', version: '1.0.0-beta', go: function(mid, _with) { var success = mid + '=1', fail = mid + '=0'; var safeReplace = function($0, $1, $2) { return ($1 || $2 ? $0 : data.delimiter); }; try { // Switch delimiter and renew cookies var _in = []; for (var prop in data.containers) { if (data.containers.hasOwnProperty(prop)) { _in.push(data.containers[prop]); } } for (var i = 0; i < _in.length; i++) { if (cookies.get(_in[i])) { var buffer = cookies.get(_in[i]).replace(/(\|)?\|(\|)?/g, safeReplace); cookies.destroy(_in[i], _with.d, _with.i); cookies.destroy(_in[i], _with.d, !_with.i); cookies.set(_in[i], buffer, _with.l, _with.d, _with.i); } } // Update `session` if (cookies.get(data.containers.session)) { cookies.set(data.containers.session, data.pack.session(0), _with.l, _with.d, _with.i); } // Yay! cookies.set(data.service.migrations, success, _with.l, _with.d, _with.i); } catch (err) { // Oops cookies.set(data.service.migrations, fail, _with.l, _with.d, _with.i); } } } ] };