@amplitude/analytics-core 0.5.0 → 0.6.0

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.
Files changed (41) hide show
  1. package/lib/cjs/config.d.ts +1 -3
  2. package/lib/cjs/config.d.ts.map +1 -1
  3. package/lib/cjs/config.js +0 -2
  4. package/lib/cjs/config.js.map +1 -1
  5. package/lib/cjs/core-client.d.ts +2 -0
  6. package/lib/cjs/core-client.d.ts.map +1 -1
  7. package/lib/cjs/core-client.js +5 -7
  8. package/lib/cjs/core-client.js.map +1 -1
  9. package/lib/cjs/plugins/destination.d.ts +11 -9
  10. package/lib/cjs/plugins/destination.d.ts.map +1 -1
  11. package/lib/cjs/plugins/destination.js +63 -69
  12. package/lib/cjs/plugins/destination.js.map +1 -1
  13. package/lib/cjs/storage/memory.d.ts +6 -6
  14. package/lib/cjs/storage/memory.d.ts.map +1 -1
  15. package/lib/cjs/storage/memory.js +40 -7
  16. package/lib/cjs/storage/memory.js.map +1 -1
  17. package/lib/cjs/timeline.d.ts +12 -7
  18. package/lib/cjs/timeline.d.ts.map +1 -1
  19. package/lib/cjs/timeline.js +154 -138
  20. package/lib/cjs/timeline.js.map +1 -1
  21. package/lib/esm/config.d.ts +1 -3
  22. package/lib/esm/config.d.ts.map +1 -1
  23. package/lib/esm/config.js +0 -2
  24. package/lib/esm/config.js.map +1 -1
  25. package/lib/esm/core-client.d.ts +2 -0
  26. package/lib/esm/core-client.d.ts.map +1 -1
  27. package/lib/esm/core-client.js +6 -8
  28. package/lib/esm/core-client.js.map +1 -1
  29. package/lib/esm/plugins/destination.d.ts +11 -9
  30. package/lib/esm/plugins/destination.d.ts.map +1 -1
  31. package/lib/esm/plugins/destination.js +63 -69
  32. package/lib/esm/plugins/destination.js.map +1 -1
  33. package/lib/esm/storage/memory.d.ts +6 -6
  34. package/lib/esm/storage/memory.d.ts.map +1 -1
  35. package/lib/esm/storage/memory.js +40 -7
  36. package/lib/esm/storage/memory.js.map +1 -1
  37. package/lib/esm/timeline.d.ts +12 -7
  38. package/lib/esm/timeline.d.ts.map +1 -1
  39. package/lib/esm/timeline.js +153 -130
  40. package/lib/esm/timeline.js.map +1 -1
  41. package/package.json +3 -3
@@ -2,139 +2,162 @@ import { __assign, __awaiter, __generator, __read, __values } from "tslib";
2
2
  import { PluginType, } from '@amplitude/analytics-types';
3
3
  import { OPT_OUT_MESSAGE } from './messages';
4
4
  import { buildResult } from './utils/result-builder';
5
- export var queue = [];
6
- var applying = false;
7
- export var register = function (plugin, config) { return __awaiter(void 0, void 0, void 0, function () {
8
- return __generator(this, function (_a) {
9
- switch (_a.label) {
10
- case 0: return [4 /*yield*/, plugin.setup(config)];
11
- case 1:
12
- _a.sent();
13
- config.plugins.push(plugin);
14
- return [2 /*return*/];
15
- }
16
- });
17
- }); };
18
- export var deregister = function (pluginName, config) {
19
- config.plugins.splice(config.plugins.findIndex(function (plugin) { return plugin.name === pluginName; }), 1);
20
- return Promise.resolve();
21
- };
22
- export var push = function (event, config) {
23
- return new Promise(function (resolve) {
24
- if (config.optOut) {
25
- resolve(buildResult(event, 0, OPT_OUT_MESSAGE));
26
- return;
27
- }
28
- queue.push([event, resolve, config.plugins]);
29
- scheduleApply(0);
30
- });
31
- };
32
- export var scheduleApply = function (timeout) {
33
- if (applying)
34
- return;
35
- applying = true;
36
- setTimeout(function () {
37
- void apply().then(function () {
38
- applying = false;
39
- if (queue.length > 0) {
40
- scheduleApply(0);
5
+ var Timeline = /** @class */ (function () {
6
+ function Timeline() {
7
+ this.queue = [];
8
+ this.applying = false;
9
+ this.flushing = false;
10
+ this.plugins = [];
11
+ }
12
+ Timeline.prototype.register = function (plugin, config) {
13
+ return __awaiter(this, void 0, void 0, function () {
14
+ return __generator(this, function (_a) {
15
+ switch (_a.label) {
16
+ case 0: return [4 /*yield*/, plugin.setup(config)];
17
+ case 1:
18
+ _a.sent();
19
+ this.plugins.push(plugin);
20
+ return [2 /*return*/];
21
+ }
22
+ });
23
+ });
24
+ };
25
+ Timeline.prototype.deregister = function (pluginName) {
26
+ this.plugins.splice(this.plugins.findIndex(function (plugin) { return plugin.name === pluginName; }), 1);
27
+ return Promise.resolve();
28
+ };
29
+ Timeline.prototype.push = function (event, config) {
30
+ var _this = this;
31
+ return new Promise(function (resolve) {
32
+ if (config.optOut) {
33
+ resolve(buildResult(event, 0, OPT_OUT_MESSAGE));
34
+ return;
41
35
  }
36
+ _this.queue.push([event, resolve]);
37
+ _this.scheduleApply(0);
42
38
  });
43
- }, timeout);
44
- };
45
- export var apply = function () { return __awaiter(void 0, void 0, void 0, function () {
46
- var item, _a, event, _b, resolve, plugins, before, before_1, before_1_1, plugin, e_1_1, enrichment, enrichment_1, enrichment_1_1, plugin, e_2_1, destination, executeDestinations;
47
- var e_1, _c, e_2, _d;
48
- return __generator(this, function (_e) {
49
- switch (_e.label) {
50
- case 0:
51
- item = queue.shift();
52
- if (!item) {
53
- return [2 /*return*/];
39
+ };
40
+ Timeline.prototype.scheduleApply = function (timeout) {
41
+ var _this = this;
42
+ if (this.applying)
43
+ return;
44
+ this.applying = true;
45
+ setTimeout(function () {
46
+ void _this.apply(_this.queue.shift()).then(function () {
47
+ _this.applying = false;
48
+ if (_this.queue.length > 0) {
49
+ _this.scheduleApply(0);
54
50
  }
55
- _a = __read(item, 1), event = _a[0];
56
- _b = __read(item, 3), resolve = _b[1], plugins = _b[2];
57
- before = plugins.filter(function (plugin) { return plugin.type === PluginType.BEFORE; });
58
- _e.label = 1;
59
- case 1:
60
- _e.trys.push([1, 6, 7, 8]);
61
- before_1 = __values(before), before_1_1 = before_1.next();
62
- _e.label = 2;
63
- case 2:
64
- if (!!before_1_1.done) return [3 /*break*/, 5];
65
- plugin = before_1_1.value;
66
- return [4 /*yield*/, plugin.execute(__assign({}, event))];
67
- case 3:
68
- event = _e.sent();
69
- _e.label = 4;
70
- case 4:
71
- before_1_1 = before_1.next();
72
- return [3 /*break*/, 2];
73
- case 5: return [3 /*break*/, 8];
74
- case 6:
75
- e_1_1 = _e.sent();
76
- e_1 = { error: e_1_1 };
77
- return [3 /*break*/, 8];
78
- case 7:
79
- try {
80
- if (before_1_1 && !before_1_1.done && (_c = before_1.return)) _c.call(before_1);
51
+ });
52
+ }, timeout);
53
+ };
54
+ Timeline.prototype.apply = function (item) {
55
+ return __awaiter(this, void 0, void 0, function () {
56
+ var _a, event, _b, resolve, before, before_1, before_1_1, plugin, e_1_1, enrichment, enrichment_1, enrichment_1_1, plugin, e_2_1, destination, executeDestinations;
57
+ var e_1, _c, e_2, _d;
58
+ return __generator(this, function (_e) {
59
+ switch (_e.label) {
60
+ case 0:
61
+ if (!item) {
62
+ return [2 /*return*/];
63
+ }
64
+ _a = __read(item, 1), event = _a[0];
65
+ _b = __read(item, 2), resolve = _b[1];
66
+ before = this.plugins.filter(function (plugin) { return plugin.type === PluginType.BEFORE; });
67
+ _e.label = 1;
68
+ case 1:
69
+ _e.trys.push([1, 6, 7, 8]);
70
+ before_1 = __values(before), before_1_1 = before_1.next();
71
+ _e.label = 2;
72
+ case 2:
73
+ if (!!before_1_1.done) return [3 /*break*/, 5];
74
+ plugin = before_1_1.value;
75
+ return [4 /*yield*/, plugin.execute(__assign({}, event))];
76
+ case 3:
77
+ event = _e.sent();
78
+ _e.label = 4;
79
+ case 4:
80
+ before_1_1 = before_1.next();
81
+ return [3 /*break*/, 2];
82
+ case 5: return [3 /*break*/, 8];
83
+ case 6:
84
+ e_1_1 = _e.sent();
85
+ e_1 = { error: e_1_1 };
86
+ return [3 /*break*/, 8];
87
+ case 7:
88
+ try {
89
+ if (before_1_1 && !before_1_1.done && (_c = before_1.return)) _c.call(before_1);
90
+ }
91
+ finally { if (e_1) throw e_1.error; }
92
+ return [7 /*endfinally*/];
93
+ case 8:
94
+ enrichment = this.plugins.filter(function (plugin) { return plugin.type === PluginType.ENRICHMENT; });
95
+ _e.label = 9;
96
+ case 9:
97
+ _e.trys.push([9, 14, 15, 16]);
98
+ enrichment_1 = __values(enrichment), enrichment_1_1 = enrichment_1.next();
99
+ _e.label = 10;
100
+ case 10:
101
+ if (!!enrichment_1_1.done) return [3 /*break*/, 13];
102
+ plugin = enrichment_1_1.value;
103
+ return [4 /*yield*/, plugin.execute(__assign({}, event))];
104
+ case 11:
105
+ event = _e.sent();
106
+ _e.label = 12;
107
+ case 12:
108
+ enrichment_1_1 = enrichment_1.next();
109
+ return [3 /*break*/, 10];
110
+ case 13: return [3 /*break*/, 16];
111
+ case 14:
112
+ e_2_1 = _e.sent();
113
+ e_2 = { error: e_2_1 };
114
+ return [3 /*break*/, 16];
115
+ case 15:
116
+ try {
117
+ if (enrichment_1_1 && !enrichment_1_1.done && (_d = enrichment_1.return)) _d.call(enrichment_1);
118
+ }
119
+ finally { if (e_2) throw e_2.error; }
120
+ return [7 /*endfinally*/];
121
+ case 16:
122
+ destination = this.plugins.filter(function (plugin) { return plugin.type === PluginType.DESTINATION; });
123
+ executeDestinations = destination.map(function (plugin) {
124
+ var eventClone = __assign({}, event);
125
+ return plugin.execute(eventClone).catch(function (e) { return buildResult(eventClone, 0, String(e)); });
126
+ });
127
+ void Promise.all(executeDestinations).then(function (_a) {
128
+ var _b = __read(_a, 1), result = _b[0];
129
+ resolve(result);
130
+ });
131
+ return [2 /*return*/];
81
132
  }
82
- finally { if (e_1) throw e_1.error; }
83
- return [7 /*endfinally*/];
84
- case 8:
85
- enrichment = plugins.filter(function (plugin) { return plugin.type === PluginType.ENRICHMENT; });
86
- _e.label = 9;
87
- case 9:
88
- _e.trys.push([9, 14, 15, 16]);
89
- enrichment_1 = __values(enrichment), enrichment_1_1 = enrichment_1.next();
90
- _e.label = 10;
91
- case 10:
92
- if (!!enrichment_1_1.done) return [3 /*break*/, 13];
93
- plugin = enrichment_1_1.value;
94
- return [4 /*yield*/, plugin.execute(__assign({}, event))];
95
- case 11:
96
- event = _e.sent();
97
- _e.label = 12;
98
- case 12:
99
- enrichment_1_1 = enrichment_1.next();
100
- return [3 /*break*/, 10];
101
- case 13: return [3 /*break*/, 16];
102
- case 14:
103
- e_2_1 = _e.sent();
104
- e_2 = { error: e_2_1 };
105
- return [3 /*break*/, 16];
106
- case 15:
107
- try {
108
- if (enrichment_1_1 && !enrichment_1_1.done && (_d = enrichment_1.return)) _d.call(enrichment_1);
133
+ });
134
+ });
135
+ };
136
+ Timeline.prototype.flush = function () {
137
+ return __awaiter(this, void 0, void 0, function () {
138
+ var queue, destination, executeDestinations;
139
+ var _this = this;
140
+ return __generator(this, function (_a) {
141
+ switch (_a.label) {
142
+ case 0:
143
+ queue = this.queue;
144
+ this.queue = [];
145
+ return [4 /*yield*/, Promise.all(queue.map(function (item) { return _this.apply(item); }))];
146
+ case 1:
147
+ _a.sent();
148
+ destination = this.plugins.filter(function (plugin) { return plugin.type === PluginType.DESTINATION; });
149
+ executeDestinations = destination.map(function (plugin) {
150
+ return plugin.flush && plugin.flush();
151
+ });
152
+ return [4 /*yield*/, Promise.all(executeDestinations)];
153
+ case 2:
154
+ _a.sent();
155
+ return [2 /*return*/];
109
156
  }
110
- finally { if (e_2) throw e_2.error; }
111
- return [7 /*endfinally*/];
112
- case 16:
113
- destination = plugins.filter(function (plugin) { return plugin.type === PluginType.DESTINATION; });
114
- executeDestinations = destination.map(function (plugin) {
115
- var eventClone = __assign({}, event);
116
- return plugin.execute(eventClone).catch(function (e) { return buildResult(eventClone, 0, String(e)); });
117
- });
118
- void Promise.all(executeDestinations).then(function (_a) {
119
- var _b = __read(_a, 1), result = _b[0];
120
- resolve(result);
121
- });
122
- return [2 /*return*/];
123
- }
124
- });
125
- }); };
126
- export var flush = function (config) { return __awaiter(void 0, void 0, void 0, function () {
127
- var destination, flushDestinations;
128
- return __generator(this, function (_a) {
129
- switch (_a.label) {
130
- case 0:
131
- destination = config.plugins.filter(function (plugin) { return plugin.type === PluginType.DESTINATION; });
132
- flushDestinations = destination.map(function (plugin) { return plugin.flush && plugin.flush(true); });
133
- return [4 /*yield*/, Promise.all(flushDestinations)];
134
- case 1:
135
- _a.sent();
136
- return [2 /*return*/];
137
- }
138
- });
139
- }); };
157
+ });
158
+ });
159
+ };
160
+ return Timeline;
161
+ }());
162
+ export { Timeline };
140
163
  //# sourceMappingURL=timeline.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"timeline.js","sourceRoot":"","sources":["../../src/timeline.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n AmplitudeDestinationPlugin,\n BeforePlugin,\n Config,\n DestinationPlugin,\n EnrichmentPlugin,\n Event,\n EventCallback,\n Plugin,\n PluginType,\n Result,\n} from '@amplitude/analytics-types';\nimport { OPT_OUT_MESSAGE } from './messages';\nimport { buildResult } from './utils/result-builder';\n\nexport const queue: [Event, EventCallback, Plugin[]][] = [];\nlet applying = false;\n\nexport const register = async (plugin: Plugin, config: Config) => {\n await plugin.setup(config);\n config.plugins.push(plugin);\n};\n\nexport const deregister = (pluginName: string, config: Config) => {\n config.plugins.splice(\n config.plugins.findIndex((plugin) => plugin.name === pluginName),\n 1,\n );\n return Promise.resolve();\n};\n\nexport const push = (event: Event, config: Config) => {\n return new Promise<Result>((resolve) => {\n if (config.optOut) {\n resolve(buildResult(event, 0, OPT_OUT_MESSAGE));\n return;\n }\n queue.push([event, resolve, config.plugins]);\n scheduleApply(0);\n });\n};\n\nexport const scheduleApply = (timeout: number) => {\n if (applying) return;\n applying = true;\n setTimeout(() => {\n void apply().then(() => {\n applying = false;\n if (queue.length > 0) {\n scheduleApply(0);\n }\n });\n }, timeout);\n};\n\nexport const apply = async () => {\n const item = queue.shift();\n\n if (!item) {\n return;\n }\n\n let [event] = item;\n const [, resolve, plugins] = item;\n\n const before = plugins.filter<BeforePlugin>(\n (plugin: Plugin): plugin is BeforePlugin => plugin.type === PluginType.BEFORE,\n );\n\n for (const plugin of before) {\n event = await plugin.execute({ ...event });\n }\n\n const enrichment = plugins.filter<EnrichmentPlugin>(\n (plugin: Plugin): plugin is EnrichmentPlugin => plugin.type === PluginType.ENRICHMENT,\n );\n\n for (const plugin of enrichment) {\n event = await plugin.execute({ ...event });\n }\n\n const destination = plugins.filter<DestinationPlugin>(\n (plugin: Plugin): plugin is DestinationPlugin => plugin.type === PluginType.DESTINATION,\n );\n\n const executeDestinations = destination.map((plugin) => {\n const eventClone = { ...event };\n return plugin.execute(eventClone).catch((e) => buildResult(eventClone, 0, String(e)));\n });\n\n void Promise.all(executeDestinations).then(([result]) => {\n resolve(result);\n });\n\n return;\n};\n\nexport const flush = async (config: Config) => {\n const destination = config.plugins.filter<AmplitudeDestinationPlugin>(\n (plugin: Plugin): plugin is AmplitudeDestinationPlugin => plugin.type === PluginType.DESTINATION,\n );\n\n const flushDestinations = destination.map((plugin) => plugin.flush && plugin.flush(true));\n\n await Promise.all(flushDestinations);\n};\n"]}
1
+ {"version":3,"file":"timeline.js","sourceRoot":"","sources":["../../src/timeline.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n BeforePlugin,\n Config,\n DestinationPlugin,\n EnrichmentPlugin,\n Event,\n EventCallback,\n Plugin,\n PluginType,\n Result,\n} from '@amplitude/analytics-types';\nimport { OPT_OUT_MESSAGE } from './messages';\nimport { buildResult } from './utils/result-builder';\n\nexport class Timeline {\n queue: [Event, EventCallback][] = [];\n applying = false;\n flushing = false;\n plugins: Plugin[] = [];\n\n async register(plugin: Plugin, config: Config) {\n await plugin.setup(config);\n this.plugins.push(plugin);\n }\n\n deregister(pluginName: string) {\n this.plugins.splice(\n this.plugins.findIndex((plugin) => plugin.name === pluginName),\n 1,\n );\n return Promise.resolve();\n }\n\n push(event: Event, config: Config) {\n return new Promise<Result>((resolve) => {\n if (config.optOut) {\n resolve(buildResult(event, 0, OPT_OUT_MESSAGE));\n return;\n }\n this.queue.push([event, resolve]);\n this.scheduleApply(0);\n });\n }\n\n scheduleApply(timeout: number) {\n if (this.applying) return;\n this.applying = true;\n setTimeout(() => {\n void this.apply(this.queue.shift()).then(() => {\n this.applying = false;\n if (this.queue.length > 0) {\n this.scheduleApply(0);\n }\n });\n }, timeout);\n }\n\n async apply(item: [Event, EventCallback] | undefined) {\n if (!item) {\n return;\n }\n\n let [event] = item;\n const [, resolve] = item;\n\n const before = this.plugins.filter<BeforePlugin>(\n (plugin: Plugin): plugin is BeforePlugin => plugin.type === PluginType.BEFORE,\n );\n\n for (const plugin of before) {\n event = await plugin.execute({ ...event });\n }\n\n const enrichment = this.plugins.filter<EnrichmentPlugin>(\n (plugin: Plugin): plugin is EnrichmentPlugin => plugin.type === PluginType.ENRICHMENT,\n );\n\n for (const plugin of enrichment) {\n event = await plugin.execute({ ...event });\n }\n\n const destination = this.plugins.filter<DestinationPlugin>(\n (plugin: Plugin): plugin is DestinationPlugin => plugin.type === PluginType.DESTINATION,\n );\n\n const executeDestinations = destination.map((plugin) => {\n const eventClone = { ...event };\n return plugin.execute(eventClone).catch((e) => buildResult(eventClone, 0, String(e)));\n });\n\n void Promise.all(executeDestinations).then(([result]) => {\n resolve(result);\n });\n\n return;\n }\n\n async flush() {\n const queue = this.queue;\n this.queue = [];\n\n await Promise.all(queue.map((item) => this.apply(item)));\n\n const destination = this.plugins.filter<DestinationPlugin>(\n (plugin: Plugin): plugin is DestinationPlugin => plugin.type === PluginType.DESTINATION,\n );\n\n const executeDestinations = destination.map((plugin) => {\n return plugin.flush && plugin.flush();\n });\n\n await Promise.all(executeDestinations);\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@amplitude/analytics-core",
3
- "version": "0.5.0",
3
+ "version": "0.6.0",
4
4
  "description": "",
5
5
  "author": "Amplitude Inc",
6
6
  "homepage": "https://github.com/amplitude/Amplitude-TypeScript",
@@ -32,11 +32,11 @@
32
32
  "url": "https://github.com/amplitude/Amplitude-TypeScript/issues"
33
33
  },
34
34
  "dependencies": {
35
- "@amplitude/analytics-types": "^0.4.0",
35
+ "@amplitude/analytics-types": "^0.5.0",
36
36
  "tslib": "^2.3.1"
37
37
  },
38
38
  "files": [
39
39
  "lib"
40
40
  ],
41
- "gitHead": "139379f59cb6ba6031a01355d1125d6b78c12b9c"
41
+ "gitHead": "84a7c2295d7a3720fe3b77c57e8f779c4879e57f"
42
42
  }