@amplitude/analytics-browser 0.6.0 → 0.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/lib/cjs/attribution/campaign-parser.d.ts +2 -2
- package/lib/cjs/attribution/campaign-parser.d.ts.map +1 -1
- package/lib/cjs/attribution/campaign-parser.js +42 -15
- package/lib/cjs/attribution/campaign-parser.js.map +1 -1
- package/lib/cjs/attribution/campaign-tracker.d.ts +2 -2
- package/lib/cjs/attribution/campaign-tracker.d.ts.map +1 -1
- package/lib/cjs/attribution/campaign-tracker.js +29 -7
- package/lib/cjs/attribution/campaign-tracker.js.map +1 -1
- package/lib/cjs/browser-client.d.ts +21 -9
- package/lib/cjs/browser-client.d.ts.map +1 -1
- package/lib/cjs/browser-client.js +27 -10
- package/lib/cjs/browser-client.js.map +1 -1
- package/lib/cjs/config.d.ts +8 -4
- package/lib/cjs/config.d.ts.map +1 -1
- package/lib/cjs/config.js +198 -79
- package/lib/cjs/config.js.map +1 -1
- package/lib/cjs/cookie-migration/index.d.ts +1 -1
- package/lib/cjs/cookie-migration/index.d.ts.map +1 -1
- package/lib/cjs/cookie-migration/index.js +42 -27
- package/lib/cjs/cookie-migration/index.js.map +1 -1
- package/lib/cjs/index.d.ts +1 -1
- package/lib/cjs/index.d.ts.map +1 -1
- package/lib/cjs/index.js +2 -1
- package/lib/cjs/index.js.map +1 -1
- package/lib/cjs/plugins/context.d.ts.map +1 -1
- package/lib/cjs/plugins/context.js +21 -16
- package/lib/cjs/plugins/context.js.map +1 -1
- package/lib/cjs/session-manager.d.ts +11 -3
- package/lib/cjs/session-manager.d.ts.map +1 -1
- package/lib/cjs/session-manager.js +41 -11
- package/lib/cjs/session-manager.js.map +1 -1
- package/lib/cjs/storage/cookie.d.ts +6 -6
- package/lib/cjs/storage/cookie.d.ts.map +1 -1
- package/lib/cjs/storage/cookie.js +122 -67
- package/lib/cjs/storage/cookie.js.map +1 -1
- package/lib/cjs/storage/local-storage.d.ts +6 -6
- package/lib/cjs/storage/local-storage.d.ts.map +1 -1
- package/lib/cjs/storage/local-storage.js +95 -50
- package/lib/cjs/storage/local-storage.js.map +1 -1
- package/lib/cjs/storage/utm-cookie.d.ts +2 -2
- package/lib/cjs/storage/utm-cookie.d.ts.map +1 -1
- package/lib/cjs/storage/utm-cookie.js +32 -18
- package/lib/cjs/storage/utm-cookie.js.map +1 -1
- package/lib/cjs/utils/snippet-helper.js.map +1 -1
- package/lib/cjs/version.d.ts +1 -1
- package/lib/cjs/version.js +1 -1
- package/lib/cjs/version.js.map +1 -1
- package/lib/esm/attribution/campaign-parser.d.ts +2 -2
- package/lib/esm/attribution/campaign-parser.d.ts.map +1 -1
- package/lib/esm/attribution/campaign-parser.js +43 -16
- package/lib/esm/attribution/campaign-parser.js.map +1 -1
- package/lib/esm/attribution/campaign-tracker.d.ts +2 -2
- package/lib/esm/attribution/campaign-tracker.d.ts.map +1 -1
- package/lib/esm/attribution/campaign-tracker.js +29 -7
- package/lib/esm/attribution/campaign-tracker.js.map +1 -1
- package/lib/esm/browser-client.d.ts +21 -9
- package/lib/esm/browser-client.d.ts.map +1 -1
- package/lib/esm/browser-client.js +26 -9
- package/lib/esm/browser-client.js.map +1 -1
- package/lib/esm/config.d.ts +8 -4
- package/lib/esm/config.d.ts.map +1 -1
- package/lib/esm/config.js +196 -79
- package/lib/esm/config.js.map +1 -1
- package/lib/esm/cookie-migration/index.d.ts +1 -1
- package/lib/esm/cookie-migration/index.d.ts.map +1 -1
- package/lib/esm/cookie-migration/index.js +42 -28
- package/lib/esm/cookie-migration/index.js.map +1 -1
- package/lib/esm/index.d.ts +1 -1
- package/lib/esm/index.d.ts.map +1 -1
- package/lib/esm/index.js +1 -1
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/plugins/context.d.ts.map +1 -1
- package/lib/esm/plugins/context.js +22 -17
- package/lib/esm/plugins/context.js.map +1 -1
- package/lib/esm/session-manager.d.ts +11 -3
- package/lib/esm/session-manager.d.ts.map +1 -1
- package/lib/esm/session-manager.js +42 -12
- package/lib/esm/session-manager.js.map +1 -1
- package/lib/esm/storage/cookie.d.ts +6 -6
- package/lib/esm/storage/cookie.d.ts.map +1 -1
- package/lib/esm/storage/cookie.js +123 -68
- package/lib/esm/storage/cookie.js.map +1 -1
- package/lib/esm/storage/local-storage.d.ts +6 -6
- package/lib/esm/storage/local-storage.d.ts.map +1 -1
- package/lib/esm/storage/local-storage.js +95 -50
- package/lib/esm/storage/local-storage.js.map +1 -1
- package/lib/esm/storage/utm-cookie.d.ts +2 -2
- package/lib/esm/storage/utm-cookie.d.ts.map +1 -1
- package/lib/esm/storage/utm-cookie.js +33 -19
- package/lib/esm/storage/utm-cookie.js.map +1 -1
- package/lib/esm/utils/snippet-helper.js.map +1 -1
- package/lib/esm/version.d.ts +1 -1
- package/lib/esm/version.js +1 -1
- package/lib/esm/version.js.map +1 -1
- package/lib/scripts/amplitude-min.js +1 -1
- package/lib/scripts/amplitude-min.js.gz +0 -0
- package/lib/scripts/amplitude-min.umd.js +1 -1
- package/lib/scripts/amplitude-min.umd.js.gz +0 -0
- package/lib/scripts/amplitude-snippet-instructions.html +1 -1
- package/lib/scripts/amplitude-snippet-min.js +1 -1
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/plugins/context.ts"],"names":[],"mappings":";;;AAAA,8DAA4F;AAC5F,sFAA+C;AAC/C,4DAAiD;AACjD,8CAAgD;AAChD,sCAAqC;AAErC,IAAM,gBAAgB,GAAG,KAAK,CAAC;AAC/B,IAAM,UAAU,GAAG,SAAS,CAAC;AAE7B;IAYE;QAXA,SAAI,GAAG,SAAS,CAAC;QACjB,SAAI,GAAG,4BAAU,CAAC,MAAe,CAAC;QAMlC,YAAO,GAAG,CAAC,CAAC;QAEZ,YAAO,GAAG,uBAAgB,iBAAO,CAAE,CAAC;QAGlC,IAAI,KAAyB,CAAC;QAC9B,0BAA0B;QAC1B,IAAI,OAAO,SAAS,KAAK,WAAW,EAAE;YACpC,KAAK,GAAG,SAAS,CAAC,SAAS,CAAC;SAC7B;QACD,IAAI,CAAC,QAAQ,GAAG,IAAI,sBAAQ,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,CAAC;IAClD,CAAC;IAED,uBAAK,GAAL,UAAM,MAAqB;QACzB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,OAAO,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACpC,CAAC;
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/plugins/context.ts"],"names":[],"mappings":"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","sourcesContent":["import { BeforePlugin, BrowserConfig, Event, PluginType } from '@amplitude/analytics-types';\nimport UAParser from '@amplitude/ua-parser-js';\nimport { UUID } from '@amplitude/analytics-core';\nimport { getLanguage } from '../utils/language';\nimport { VERSION } from '../version';\n\nconst BROWSER_PLATFORM = 'Web';\nconst IP_ADDRESS = '$remote';\n\nexport class Context implements BeforePlugin {\n name = 'context';\n type = PluginType.BEFORE as const;\n\n // this.config is defined in setup() which will always be called first\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n config: BrowserConfig;\n eventId = 0;\n uaResult: UAParser.IResult;\n library = `amplitude-ts/${VERSION}`;\n\n constructor() {\n let agent: string | undefined;\n /* istanbul ignore else */\n if (typeof navigator !== 'undefined') {\n agent = navigator.userAgent;\n }\n this.uaResult = new UAParser(agent).getResult();\n }\n\n setup(config: BrowserConfig): Promise<undefined> {\n this.config = config;\n\n return Promise.resolve(undefined);\n }\n\n async execute(context: Event): Promise<Event> {\n /**\n * Manages user session triggered by new events\n */\n if (!this.isSessionValid()) {\n // Creates new session\n this.config.sessionId = Date.now();\n } // else use previously creates session\n // Updates last event time to extend time-based session\n this.config.lastEventTime = Date.now();\n const time = new Date().getTime();\n const osName = this.uaResult.browser.name;\n const osVersion = this.uaResult.browser.version;\n const deviceModel = this.uaResult.device.model || this.uaResult.os.name;\n const deviceVendor = this.uaResult.device.vendor;\n\n const event: Event = {\n user_id: this.config.userId,\n device_id: this.config.deviceId,\n session_id: this.config.sessionId,\n time,\n ...(this.config.appVersion && { app_version: this.config.appVersion }),\n ...(this.config.trackingOptions.platform && { platform: BROWSER_PLATFORM }),\n ...(this.config.trackingOptions.osName && { os_name: osName }),\n ...(this.config.trackingOptions.osVersion && { os_version: osVersion }),\n ...(this.config.trackingOptions.deviceManufacturer && { device_manufacturer: deviceVendor }),\n ...(this.config.trackingOptions.deviceModel && { device_model: deviceModel }),\n ...(this.config.trackingOptions.language && { language: getLanguage() }),\n ...(this.config.trackingOptions.ipAddress && { ip: IP_ADDRESS }),\n insert_id: UUID(),\n partner_id: this.config.partnerId,\n plan: this.config.plan,\n ...context,\n event_id: this.eventId++,\n library: this.library,\n };\n return event;\n }\n\n isSessionValid() {\n const lastEventTime = this.config.lastEventTime || Date.now();\n const timeSinceLastEvent = Date.now() - lastEventTime;\n return timeSinceLastEvent < this.config.sessionTimeout;\n }\n}\n"]}
|
|
@@ -1,10 +1,18 @@
|
|
|
1
|
-
import { UserSession, Storage, SessionManager as ISessionManager
|
|
1
|
+
import { UserSession, Storage, SessionManager as ISessionManager } from '@amplitude/analytics-types';
|
|
2
2
|
export declare class SessionManager implements ISessionManager {
|
|
3
3
|
private storage;
|
|
4
4
|
storageKey: string;
|
|
5
|
-
sessionTimeout: number;
|
|
6
5
|
cache: UserSession;
|
|
7
|
-
|
|
6
|
+
isSessionCacheValid: boolean;
|
|
7
|
+
constructor(storage: Storage<UserSession>, apiKey: string);
|
|
8
|
+
/**
|
|
9
|
+
* load() must be called immediately after instantation
|
|
10
|
+
*
|
|
11
|
+
* ```ts
|
|
12
|
+
* await new SessionManager(...).load();
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
load(): Promise<this>;
|
|
8
16
|
setSession(session: Partial<UserSession>): void;
|
|
9
17
|
getSessionId(): number | undefined;
|
|
10
18
|
setSessionId(sessionId: number): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../../src/session-manager.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../../src/session-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,IAAI,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAGrG,qBAAa,cAAe,YAAW,eAAe;IAKxC,OAAO,CAAC,OAAO;IAJ3B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,WAAW,CAAC;IACnB,mBAAmB,UAAQ;gBAEP,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,MAAM;IAKjE;;;;;;OAMG;IACG,IAAI;IAOV,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC;IAKxC,YAAY;IAWZ,YAAY,CAAC,SAAS,EAAE,MAAM;IAM9B,WAAW,IAAI,MAAM,GAAG,SAAS;IAIjC,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAInC,SAAS,IAAI,MAAM,GAAG,SAAS;IAI/B,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI/B,gBAAgB;IAIhB,gBAAgB,CAAC,aAAa,EAAE,MAAM;IAItC,SAAS,IAAI,OAAO;IAIpB,SAAS,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;CAGjC"}
|
|
@@ -3,25 +3,55 @@ exports.SessionManager = void 0;
|
|
|
3
3
|
var tslib_1 = require("tslib");
|
|
4
4
|
var cookie_name_1 = require("./utils/cookie-name");
|
|
5
5
|
var SessionManager = /** @class */ (function () {
|
|
6
|
-
function SessionManager(storage,
|
|
7
|
-
var _a;
|
|
6
|
+
function SessionManager(storage, apiKey) {
|
|
8
7
|
this.storage = storage;
|
|
9
|
-
this.
|
|
10
|
-
this.
|
|
11
|
-
this.cache =
|
|
12
|
-
optOut: false,
|
|
13
|
-
};
|
|
8
|
+
this.isSessionCacheValid = true;
|
|
9
|
+
this.storageKey = (0, cookie_name_1.getCookieName)(apiKey);
|
|
10
|
+
this.cache = { optOut: false };
|
|
14
11
|
}
|
|
12
|
+
/**
|
|
13
|
+
* load() must be called immediately after instantation
|
|
14
|
+
*
|
|
15
|
+
* ```ts
|
|
16
|
+
* await new SessionManager(...).load();
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
SessionManager.prototype.load = function () {
|
|
20
|
+
var _a;
|
|
21
|
+
return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
|
|
22
|
+
var _b;
|
|
23
|
+
return (0, tslib_1.__generator)(this, function (_c) {
|
|
24
|
+
switch (_c.label) {
|
|
25
|
+
case 0:
|
|
26
|
+
_b = this;
|
|
27
|
+
return [4 /*yield*/, this.storage.get(this.storageKey)];
|
|
28
|
+
case 1:
|
|
29
|
+
_b.cache = (_a = (_c.sent())) !== null && _a !== void 0 ? _a : {
|
|
30
|
+
optOut: false,
|
|
31
|
+
};
|
|
32
|
+
return [2 /*return*/, this];
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
};
|
|
15
37
|
SessionManager.prototype.setSession = function (session) {
|
|
16
38
|
this.cache = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, this.cache), session);
|
|
17
|
-
this.storage.set(this.storageKey, this.cache);
|
|
39
|
+
void this.storage.set(this.storageKey, this.cache);
|
|
18
40
|
};
|
|
19
41
|
SessionManager.prototype.getSessionId = function () {
|
|
20
|
-
var
|
|
21
|
-
|
|
22
|
-
|
|
42
|
+
var _this = this;
|
|
43
|
+
this.isSessionCacheValid = true;
|
|
44
|
+
void this.storage.get(this.storageKey).then(function (userSession) {
|
|
45
|
+
// Checks if session id has been set since the last get
|
|
46
|
+
if (_this.isSessionCacheValid) {
|
|
47
|
+
_this.cache.sessionId = userSession === null || userSession === void 0 ? void 0 : userSession.sessionId;
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
return this.cache.sessionId;
|
|
23
51
|
};
|
|
24
52
|
SessionManager.prototype.setSessionId = function (sessionId) {
|
|
53
|
+
// Flags session id has been set
|
|
54
|
+
this.isSessionCacheValid = false;
|
|
25
55
|
this.setSession({ sessionId: sessionId });
|
|
26
56
|
};
|
|
27
57
|
SessionManager.prototype.getDeviceId = function () {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-manager.js","sourceRoot":"","sources":["../../src/session-manager.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"session-manager.js","sourceRoot":"","sources":["../../src/session-manager.ts"],"names":[],"mappings":";;;AACA,mDAAqE;AAErE;IAKE,wBAAoB,OAA6B,EAAE,MAAc;QAA7C,YAAO,GAAP,OAAO,CAAsB;QAFjD,wBAAmB,GAAG,IAAI,CAAC;QAGzB,IAAI,CAAC,UAAU,GAAG,IAAA,2BAAa,EAAC,MAAM,CAAC,CAAC;QACxC,IAAI,CAAC,KAAK,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IACjC,CAAC;IAED;;;;;;OAMG;IACG,6BAAI,GAAV;;;;;;;wBACE,KAAA,IAAI,CAAA;wBAAU,qBAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,EAAA;;wBAArD,GAAK,KAAK,GAAG,MAAA,CAAC,SAAuC,CAAC,mCAAI;4BACxD,MAAM,EAAE,KAAK;yBACd,CAAC;wBACF,sBAAO,IAAI,EAAC;;;;KACb;IAED,mCAAU,GAAV,UAAW,OAA6B;QACtC,IAAI,CAAC,KAAK,mDAAQ,IAAI,CAAC,KAAK,GAAK,OAAO,CAAE,CAAC;QAC3C,KAAK,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACrD,CAAC;IAED,qCAAY,GAAZ;QAAA,iBASC;QARC,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAChC,KAAK,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,UAAC,WAAW;YACtD,uDAAuD;YACvD,IAAI,KAAI,CAAC,mBAAmB,EAAE;gBAC5B,KAAI,CAAC,KAAK,CAAC,SAAS,GAAG,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,SAAS,CAAC;aAC/C;QACH,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;IAC9B,CAAC;IAED,qCAAY,GAAZ,UAAa,SAAiB;QAC5B,gCAAgC;QAChC,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;QACjC,IAAI,CAAC,UAAU,CAAC,EAAE,SAAS,WAAA,EAAE,CAAC,CAAC;IACjC,CAAC;IAED,oCAAW,GAAX;QACE,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;IAC7B,CAAC;IAED,oCAAW,GAAX,UAAY,QAAgB;QAC1B,IAAI,CAAC,UAAU,CAAC,EAAE,QAAQ,UAAA,EAAE,CAAC,CAAC;IAChC,CAAC;IAED,kCAAS,GAAT;QACE,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAC3B,CAAC;IAED,kCAAS,GAAT,UAAU,MAAc;QACtB,IAAI,CAAC,UAAU,CAAC,EAAE,MAAM,QAAA,EAAE,CAAC,CAAC;IAC9B,CAAC;IAED,yCAAgB,GAAhB;QACE,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;IAClC,CAAC;IAED,yCAAgB,GAAhB,UAAiB,aAAqB;QACpC,IAAI,CAAC,UAAU,CAAC,EAAE,aAAa,eAAA,EAAE,CAAC,CAAC;IACrC,CAAC;IAED,kCAAS,GAAT;QACE,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAC3B,CAAC;IAED,kCAAS,GAAT,UAAU,MAAe;QACvB,IAAI,CAAC,UAAU,CAAC,EAAE,MAAM,QAAA,EAAE,CAAC,CAAC;IAC9B,CAAC;IACH,qBAAC;AAAD,CAAC,AA7ED,IA6EC;AA7EY,wCAAc","sourcesContent":["import { UserSession, Storage, SessionManager as ISessionManager } from '@amplitude/analytics-types';\nimport { getCookieName as getStorageKey } from './utils/cookie-name';\n\nexport class SessionManager implements ISessionManager {\n storageKey: string;\n cache: UserSession;\n isSessionCacheValid = true;\n\n constructor(private storage: Storage<UserSession>, apiKey: string) {\n this.storageKey = getStorageKey(apiKey);\n this.cache = { optOut: false };\n }\n\n /**\n * load() must be called immediately after instantation\n *\n * ```ts\n * await new SessionManager(...).load();\n * ```\n */\n async load() {\n this.cache = (await this.storage.get(this.storageKey)) ?? {\n optOut: false,\n };\n return this;\n }\n\n setSession(session: Partial<UserSession>) {\n this.cache = { ...this.cache, ...session };\n void this.storage.set(this.storageKey, this.cache);\n }\n\n getSessionId() {\n this.isSessionCacheValid = true;\n void this.storage.get(this.storageKey).then((userSession) => {\n // Checks if session id has been set since the last get\n if (this.isSessionCacheValid) {\n this.cache.sessionId = userSession?.sessionId;\n }\n });\n return this.cache.sessionId;\n }\n\n setSessionId(sessionId: number) {\n // Flags session id has been set\n this.isSessionCacheValid = false;\n this.setSession({ sessionId });\n }\n\n getDeviceId(): string | undefined {\n return this.cache.deviceId;\n }\n\n setDeviceId(deviceId: string): void {\n this.setSession({ deviceId });\n }\n\n getUserId(): string | undefined {\n return this.cache.userId;\n }\n\n setUserId(userId: string): void {\n this.setSession({ userId });\n }\n\n getLastEventTime() {\n return this.cache.lastEventTime;\n }\n\n setLastEventTime(lastEventTime: number) {\n this.setSession({ lastEventTime });\n }\n\n getOptOut(): boolean {\n return this.cache.optOut;\n }\n\n setOptOut(optOut: boolean): void {\n this.setSession({ optOut });\n }\n}\n"]}
|
|
@@ -2,11 +2,11 @@ import { Storage, CookieStorageOptions } from '@amplitude/analytics-types';
|
|
|
2
2
|
export declare class CookieStorage<T> implements Storage<T> {
|
|
3
3
|
options: CookieStorageOptions;
|
|
4
4
|
constructor(options?: CookieStorageOptions);
|
|
5
|
-
isEnabled(): boolean
|
|
6
|
-
get(key: string): T | undefined
|
|
7
|
-
getRaw(key: string): string | undefined
|
|
8
|
-
set(key: string, value: T | null): void
|
|
9
|
-
remove(key: string): void
|
|
10
|
-
reset(): void
|
|
5
|
+
isEnabled(): Promise<boolean>;
|
|
6
|
+
get(key: string): Promise<T | undefined>;
|
|
7
|
+
getRaw(key: string): Promise<string | undefined>;
|
|
8
|
+
set(key: string, value: T | null): Promise<void>;
|
|
9
|
+
remove(key: string): Promise<void>;
|
|
10
|
+
reset(): Promise<void>;
|
|
11
11
|
}
|
|
12
12
|
//# sourceMappingURL=cookie.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cookie.d.ts","sourceRoot":"","sources":["../../../src/storage/cookie.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAE3E,qBAAa,aAAa,CAAC,CAAC,CAAE,YAAW,OAAO,CAAC,CAAC,CAAC;IACjD,OAAO,EAAE,oBAAoB,CAAC;gBAElB,OAAO,CAAC,EAAE,oBAAoB;
|
|
1
|
+
{"version":3,"file":"cookie.d.ts","sourceRoot":"","sources":["../../../src/storage/cookie.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAE3E,qBAAa,aAAa,CAAC,CAAC,CAAE,YAAW,OAAO,CAAC,CAAC,CAAC;IACjD,OAAO,EAAE,oBAAoB,CAAC;gBAElB,OAAO,CAAC,EAAE,oBAAoB;IAIpC,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IAqB7B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAmBxC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAShD,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IA8BhD,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B"}
|
|
@@ -6,84 +6,139 @@ var CookieStorage = /** @class */ (function () {
|
|
|
6
6
|
this.options = (0, tslib_1.__assign)({}, options);
|
|
7
7
|
}
|
|
8
8
|
CookieStorage.prototype.isEnabled = function () {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
return
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
9
|
+
return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
|
|
10
|
+
var random, testStrorage, testKey, value, _a;
|
|
11
|
+
return (0, tslib_1.__generator)(this, function (_b) {
|
|
12
|
+
switch (_b.label) {
|
|
13
|
+
case 0:
|
|
14
|
+
/* istanbul ignore if */
|
|
15
|
+
if (typeof window === 'undefined') {
|
|
16
|
+
return [2 /*return*/, false];
|
|
17
|
+
}
|
|
18
|
+
random = String(Date.now());
|
|
19
|
+
testStrorage = new CookieStorage();
|
|
20
|
+
testKey = 'AMP_TEST';
|
|
21
|
+
_b.label = 1;
|
|
22
|
+
case 1:
|
|
23
|
+
_b.trys.push([1, 4, 5, 7]);
|
|
24
|
+
return [4 /*yield*/, testStrorage.set(testKey, random)];
|
|
25
|
+
case 2:
|
|
26
|
+
_b.sent();
|
|
27
|
+
return [4 /*yield*/, testStrorage.get(testKey)];
|
|
28
|
+
case 3:
|
|
29
|
+
value = _b.sent();
|
|
30
|
+
return [2 /*return*/, value === random];
|
|
31
|
+
case 4:
|
|
32
|
+
_a = _b.sent();
|
|
33
|
+
/* istanbul ignore next */
|
|
34
|
+
return [2 /*return*/, false];
|
|
35
|
+
case 5: return [4 /*yield*/, testStrorage.remove(testKey)];
|
|
36
|
+
case 6:
|
|
37
|
+
_b.sent();
|
|
38
|
+
return [7 /*endfinally*/];
|
|
39
|
+
case 7: return [2 /*return*/];
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
});
|
|
28
43
|
};
|
|
29
44
|
CookieStorage.prototype.get = function (key) {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
return
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
45
|
+
return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
|
|
46
|
+
var value;
|
|
47
|
+
return (0, tslib_1.__generator)(this, function (_a) {
|
|
48
|
+
switch (_a.label) {
|
|
49
|
+
case 0: return [4 /*yield*/, this.getRaw(key)];
|
|
50
|
+
case 1:
|
|
51
|
+
value = _a.sent();
|
|
52
|
+
if (!value) {
|
|
53
|
+
return [2 /*return*/, undefined];
|
|
54
|
+
}
|
|
55
|
+
try {
|
|
56
|
+
try {
|
|
57
|
+
value = decodeURIComponent(atob(value));
|
|
58
|
+
}
|
|
59
|
+
catch (_b) {
|
|
60
|
+
// value not encoded
|
|
61
|
+
}
|
|
62
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
|
63
|
+
return [2 /*return*/, JSON.parse(value)];
|
|
64
|
+
}
|
|
65
|
+
catch (_c) {
|
|
66
|
+
/* istanbul ignore next */
|
|
67
|
+
return [2 /*return*/, undefined];
|
|
68
|
+
}
|
|
69
|
+
return [2 /*return*/];
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
});
|
|
42
73
|
};
|
|
43
74
|
CookieStorage.prototype.getRaw = function (key) {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
75
|
+
return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
|
|
76
|
+
var cookie, match;
|
|
77
|
+
return (0, tslib_1.__generator)(this, function (_a) {
|
|
78
|
+
cookie = window.document.cookie.split('; ');
|
|
79
|
+
match = cookie.find(function (c) { return c.indexOf(key + '=') === 0; });
|
|
80
|
+
if (!match) {
|
|
81
|
+
return [2 /*return*/, undefined];
|
|
82
|
+
}
|
|
83
|
+
return [2 /*return*/, match.substring(key.length + 1)];
|
|
84
|
+
});
|
|
85
|
+
});
|
|
50
86
|
};
|
|
51
87
|
CookieStorage.prototype.set = function (key, value) {
|
|
52
88
|
var _a;
|
|
53
|
-
|
|
54
|
-
var expirationDays
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
89
|
+
return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
|
|
90
|
+
var expirationDays, expires, expireDate, date, str;
|
|
91
|
+
return (0, tslib_1.__generator)(this, function (_b) {
|
|
92
|
+
try {
|
|
93
|
+
expirationDays = (_a = this.options.expirationDays) !== null && _a !== void 0 ? _a : 0;
|
|
94
|
+
expires = value !== null ? expirationDays : -1;
|
|
95
|
+
expireDate = undefined;
|
|
96
|
+
if (expires) {
|
|
97
|
+
date = new Date();
|
|
98
|
+
date.setTime(date.getTime() + expires * 24 * 60 * 60 * 1000);
|
|
99
|
+
expireDate = date;
|
|
100
|
+
}
|
|
101
|
+
str = "".concat(key, "=").concat(btoa(encodeURIComponent(JSON.stringify(value))));
|
|
102
|
+
if (expireDate) {
|
|
103
|
+
str += "; expires=".concat(expireDate.toUTCString());
|
|
104
|
+
}
|
|
105
|
+
str += '; path=/';
|
|
106
|
+
if (this.options.domain) {
|
|
107
|
+
str += "; domain=".concat(this.options.domain);
|
|
108
|
+
}
|
|
109
|
+
if (this.options.secure) {
|
|
110
|
+
str += '; Secure';
|
|
111
|
+
}
|
|
112
|
+
if (this.options.sameSite) {
|
|
113
|
+
str += "; SameSite=".concat(this.options.sameSite);
|
|
114
|
+
}
|
|
115
|
+
window.document.cookie = str;
|
|
116
|
+
}
|
|
117
|
+
catch (_c) {
|
|
118
|
+
//
|
|
119
|
+
}
|
|
120
|
+
return [2 /*return*/];
|
|
121
|
+
});
|
|
122
|
+
});
|
|
81
123
|
};
|
|
82
124
|
CookieStorage.prototype.remove = function (key) {
|
|
83
|
-
|
|
125
|
+
return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
|
|
126
|
+
return (0, tslib_1.__generator)(this, function (_a) {
|
|
127
|
+
switch (_a.label) {
|
|
128
|
+
case 0: return [4 /*yield*/, this.set(key, null)];
|
|
129
|
+
case 1:
|
|
130
|
+
_a.sent();
|
|
131
|
+
return [2 /*return*/];
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
});
|
|
84
135
|
};
|
|
85
136
|
CookieStorage.prototype.reset = function () {
|
|
86
|
-
return
|
|
137
|
+
return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
|
|
138
|
+
return (0, tslib_1.__generator)(this, function (_a) {
|
|
139
|
+
return [2 /*return*/];
|
|
140
|
+
});
|
|
141
|
+
});
|
|
87
142
|
};
|
|
88
143
|
return CookieStorage;
|
|
89
144
|
}());
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cookie.js","sourceRoot":"","sources":["../../../src/storage/cookie.ts"],"names":[],"mappings":";;;AAEA;IAGE,uBAAY,OAA8B;QACxC,IAAI,CAAC,OAAO,6BAAQ,OAAO,CAAE,CAAC;IAChC,CAAC;
|
|
1
|
+
{"version":3,"file":"cookie.js","sourceRoot":"","sources":["../../../src/storage/cookie.ts"],"names":[],"mappings":"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","sourcesContent":["import { Storage, CookieStorageOptions } from '@amplitude/analytics-types';\n\nexport class CookieStorage<T> implements Storage<T> {\n options: CookieStorageOptions;\n\n constructor(options?: CookieStorageOptions) {\n this.options = { ...options };\n }\n\n async isEnabled(): Promise<boolean> {\n /* istanbul ignore if */\n if (typeof window === 'undefined') {\n return false;\n }\n\n const random = String(Date.now());\n const testStrorage = new CookieStorage<string>();\n const testKey = 'AMP_TEST';\n try {\n await testStrorage.set(testKey, random);\n const value = await testStrorage.get(testKey);\n return value === random;\n } catch {\n /* istanbul ignore next */\n return false;\n } finally {\n await testStrorage.remove(testKey);\n }\n }\n\n async get(key: string): Promise<T | undefined> {\n let value = await this.getRaw(key);\n if (!value) {\n return undefined;\n }\n try {\n try {\n value = decodeURIComponent(atob(value));\n } catch {\n // value not encoded\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return JSON.parse(value);\n } catch {\n /* istanbul ignore next */\n return undefined;\n }\n }\n\n async getRaw(key: string): Promise<string | undefined> {\n const cookie = window.document.cookie.split('; ');\n const match = cookie.find((c) => c.indexOf(key + '=') === 0);\n if (!match) {\n return undefined;\n }\n return match.substring(key.length + 1);\n }\n\n async set(key: string, value: T | null): Promise<void> {\n try {\n const expirationDays = this.options.expirationDays ?? 0;\n const expires = value !== null ? expirationDays : -1;\n let expireDate: Date | undefined = undefined;\n if (expires) {\n const date = new Date();\n date.setTime(date.getTime() + expires * 24 * 60 * 60 * 1000);\n expireDate = date;\n }\n let str = `${key}=${btoa(encodeURIComponent(JSON.stringify(value)))}`;\n if (expireDate) {\n str += `; expires=${expireDate.toUTCString()}`;\n }\n str += '; path=/';\n if (this.options.domain) {\n str += `; domain=${this.options.domain}`;\n }\n if (this.options.secure) {\n str += '; Secure';\n }\n if (this.options.sameSite) {\n str += `; SameSite=${this.options.sameSite}`;\n }\n window.document.cookie = str;\n } catch {\n //\n }\n }\n\n async remove(key: string): Promise<void> {\n await this.set(key, null);\n }\n\n async reset(): Promise<void> {\n return;\n }\n}\n"]}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { Storage } from '@amplitude/analytics-types';
|
|
2
2
|
export declare class LocalStorage<T> implements Storage<T> {
|
|
3
|
-
isEnabled(): boolean
|
|
4
|
-
get(key: string): T | undefined
|
|
5
|
-
getRaw(key: string): string | undefined
|
|
6
|
-
set(key: string, value: T): void
|
|
7
|
-
remove(key: string): void
|
|
8
|
-
reset(): void
|
|
3
|
+
isEnabled(): Promise<boolean>;
|
|
4
|
+
get(key: string): Promise<T | undefined>;
|
|
5
|
+
getRaw(key: string): Promise<string | undefined>;
|
|
6
|
+
set(key: string, value: T): Promise<void>;
|
|
7
|
+
remove(key: string): Promise<void>;
|
|
8
|
+
reset(): Promise<void>;
|
|
9
9
|
}
|
|
10
10
|
//# sourceMappingURL=local-storage.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-storage.d.ts","sourceRoot":"","sources":["../../../src/storage/local-storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAErD,qBAAa,YAAY,CAAC,CAAC,CAAE,YAAW,OAAO,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"local-storage.d.ts","sourceRoot":"","sources":["../../../src/storage/local-storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAErD,qBAAa,YAAY,CAAC,CAAC,CAAE,YAAW,OAAO,CAAC,CAAC,CAAC;IAC1C,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IAqB7B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAcxC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAIhD,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAQzC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQlC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAO7B"}
|
|
@@ -1,69 +1,114 @@
|
|
|
1
1
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
2
2
|
exports.LocalStorage = void 0;
|
|
3
|
+
var tslib_1 = require("tslib");
|
|
3
4
|
var LocalStorage = /** @class */ (function () {
|
|
4
5
|
function LocalStorage() {
|
|
5
6
|
}
|
|
6
7
|
LocalStorage.prototype.isEnabled = function () {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
return
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
8
|
+
return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
|
|
9
|
+
var random, testStorage, testKey, value, _a;
|
|
10
|
+
return (0, tslib_1.__generator)(this, function (_b) {
|
|
11
|
+
switch (_b.label) {
|
|
12
|
+
case 0:
|
|
13
|
+
/* istanbul ignore if */
|
|
14
|
+
if (typeof window === 'undefined') {
|
|
15
|
+
return [2 /*return*/, false];
|
|
16
|
+
}
|
|
17
|
+
random = String(Date.now());
|
|
18
|
+
testStorage = new LocalStorage();
|
|
19
|
+
testKey = 'AMP_TEST';
|
|
20
|
+
_b.label = 1;
|
|
21
|
+
case 1:
|
|
22
|
+
_b.trys.push([1, 4, 5, 7]);
|
|
23
|
+
return [4 /*yield*/, testStorage.set(testKey, random)];
|
|
24
|
+
case 2:
|
|
25
|
+
_b.sent();
|
|
26
|
+
return [4 /*yield*/, testStorage.get(testKey)];
|
|
27
|
+
case 3:
|
|
28
|
+
value = _b.sent();
|
|
29
|
+
return [2 /*return*/, value === random];
|
|
30
|
+
case 4:
|
|
31
|
+
_a = _b.sent();
|
|
32
|
+
/* istanbul ignore next */
|
|
33
|
+
return [2 /*return*/, false];
|
|
34
|
+
case 5: return [4 /*yield*/, testStorage.remove(testKey)];
|
|
35
|
+
case 6:
|
|
36
|
+
_b.sent();
|
|
37
|
+
return [7 /*endfinally*/];
|
|
38
|
+
case 7: return [2 /*return*/];
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
});
|
|
26
42
|
};
|
|
27
43
|
LocalStorage.prototype.get = function (key) {
|
|
28
|
-
|
|
29
|
-
var value
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
44
|
+
return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
|
|
45
|
+
var value, _a;
|
|
46
|
+
return (0, tslib_1.__generator)(this, function (_b) {
|
|
47
|
+
switch (_b.label) {
|
|
48
|
+
case 0:
|
|
49
|
+
_b.trys.push([0, 2, , 3]);
|
|
50
|
+
return [4 /*yield*/, this.getRaw(key)];
|
|
51
|
+
case 1:
|
|
52
|
+
value = _b.sent();
|
|
53
|
+
if (!value) {
|
|
54
|
+
return [2 /*return*/, undefined];
|
|
55
|
+
}
|
|
56
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
|
57
|
+
return [2 /*return*/, JSON.parse(value)];
|
|
58
|
+
case 2:
|
|
59
|
+
_a = _b.sent();
|
|
60
|
+
/* istanbul ignore next */
|
|
61
|
+
return [2 /*return*/, undefined];
|
|
62
|
+
case 3: return [2 /*return*/];
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
});
|
|
40
66
|
};
|
|
41
67
|
LocalStorage.prototype.getRaw = function (key) {
|
|
42
|
-
return
|
|
68
|
+
return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
|
|
69
|
+
return (0, tslib_1.__generator)(this, function (_a) {
|
|
70
|
+
return [2 /*return*/, window.localStorage.getItem(key) || undefined];
|
|
71
|
+
});
|
|
72
|
+
});
|
|
43
73
|
};
|
|
44
74
|
LocalStorage.prototype.set = function (key, value) {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
75
|
+
return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
|
|
76
|
+
return (0, tslib_1.__generator)(this, function (_a) {
|
|
77
|
+
try {
|
|
78
|
+
window.localStorage.setItem(key, JSON.stringify(value));
|
|
79
|
+
}
|
|
80
|
+
catch (_b) {
|
|
81
|
+
//
|
|
82
|
+
}
|
|
83
|
+
return [2 /*return*/];
|
|
84
|
+
});
|
|
85
|
+
});
|
|
51
86
|
};
|
|
52
87
|
LocalStorage.prototype.remove = function (key) {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
88
|
+
return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
|
|
89
|
+
return (0, tslib_1.__generator)(this, function (_a) {
|
|
90
|
+
try {
|
|
91
|
+
window.localStorage.removeItem(key);
|
|
92
|
+
}
|
|
93
|
+
catch (_b) {
|
|
94
|
+
//
|
|
95
|
+
}
|
|
96
|
+
return [2 /*return*/];
|
|
97
|
+
});
|
|
98
|
+
});
|
|
59
99
|
};
|
|
60
100
|
LocalStorage.prototype.reset = function () {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
101
|
+
return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
|
|
102
|
+
return (0, tslib_1.__generator)(this, function (_a) {
|
|
103
|
+
try {
|
|
104
|
+
window.localStorage.clear();
|
|
105
|
+
}
|
|
106
|
+
catch (_b) {
|
|
107
|
+
//
|
|
108
|
+
}
|
|
109
|
+
return [2 /*return*/];
|
|
110
|
+
});
|
|
111
|
+
});
|
|
67
112
|
};
|
|
68
113
|
return LocalStorage;
|
|
69
114
|
}());
|