@croct/plug 0.13.1 → 0.13.3

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/constants.d.ts CHANGED
@@ -2,4 +2,4 @@ export declare const CDN_URL = "https://cdn.croct.io/js/v1/lib/plug.js";
2
2
  export declare const PLAYGROUND_ORIGIN = "https://play.croct.com";
3
3
  export declare const PLAYGROUND_CONNECT_URL = "https://play.croct.com/connect.html";
4
4
  export declare const PREVIEW_WIDGET_ORIGIN = "https://cdn.croct.io";
5
- export declare const PREVIEW_WIDGET_URL = "https://cdn.croct.io/js/v1/lib/plug/widget-0.13.1.html";
5
+ export declare const PREVIEW_WIDGET_URL = "https://cdn.croct.io/js/v1/lib/plug/widget-0.13.3.html";
package/constants.js CHANGED
@@ -5,5 +5,5 @@ exports.CDN_URL = 'https://cdn.croct.io/js/v1/lib/plug.js';
5
5
  exports.PLAYGROUND_ORIGIN = 'https://play.croct.com';
6
6
  exports.PLAYGROUND_CONNECT_URL = 'https://play.croct.com/connect.html';
7
7
  exports.PREVIEW_WIDGET_ORIGIN = 'https://cdn.croct.io';
8
- exports.PREVIEW_WIDGET_URL = 'https://cdn.croct.io/js/v1/lib/plug/widget-0.13.1.html';
8
+ exports.PREVIEW_WIDGET_URL = 'https://cdn.croct.io/js/v1/lib/plug/widget-0.13.3.html';
9
9
  //# sourceMappingURL=constants.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@croct/plug",
3
- "version": "0.13.1",
3
+ "version": "0.13.3",
4
4
  "description": "A fully-featured devkit for building natively personalized applications.",
5
5
  "license": "MIT",
6
6
  "author": {
@@ -34,12 +34,12 @@
34
34
  },
35
35
  "dependencies": {
36
36
  "@croct/json": "^2.0.1",
37
- "@croct/sdk": "^0.13.0",
37
+ "@croct/sdk": "^0.14.0",
38
38
  "tslib": "^2.2.0"
39
39
  },
40
40
  "devDependencies": {
41
41
  "@croct/eslint-plugin": "^0.6.3",
42
- "@rollup/plugin-commonjs": "^24.0.0",
42
+ "@rollup/plugin-commonjs": "^25.0.0",
43
43
  "@rollup/plugin-node-resolve": "^15.0.1",
44
44
  "@rollup/plugin-replace": "^5.0.1",
45
45
  "@rollup/plugin-terser": "^0.4.0",
package/preview.d.ts CHANGED
@@ -9,7 +9,7 @@ export declare class PreviewPlugin implements Plugin {
9
9
  private static readonly PREVIEW_PARAMS;
10
10
  private readonly tokenStore;
11
11
  private readonly logger;
12
- private readonly widgetId;
12
+ private cleanUp;
13
13
  constructor(configuration: Configuration);
14
14
  enable(): void;
15
15
  disable(): void;
package/preview.js CHANGED
@@ -2,14 +2,13 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.factory = exports.PreviewPlugin = void 0;
4
4
  const error_1 = require("@croct/sdk/error");
5
- const uuid_1 = require("@croct/sdk/uuid");
6
5
  const token_1 = require("./sdk/token");
7
6
  const constants_1 = require("./constants");
8
7
  const PREVIEW_PARAMETER = 'croct-preview';
9
8
  const PREVIEW_EXIT = 'exit';
10
9
  class PreviewPlugin {
11
10
  constructor(configuration) {
12
- this.widgetId = `croct-preview:${(0, uuid_1.uuid4)()}`;
11
+ this.cleanUp = [];
13
12
  this.tokenStore = configuration.tokenStore;
14
13
  this.logger = configuration.logger;
15
14
  }
@@ -30,8 +29,8 @@ class PreviewPlugin {
30
29
  }
31
30
  }
32
31
  disable() {
33
- var _a;
34
- (_a = document.getElementById(this.widgetId)) === null || _a === void 0 ? void 0 : _a.remove();
32
+ const callbacks = this.cleanUp.splice(0);
33
+ callbacks.forEach(cleanUp => cleanUp());
35
34
  }
36
35
  updateToken(data) {
37
36
  if (data === PREVIEW_EXIT) {
@@ -46,6 +45,7 @@ class PreviewPlugin {
46
45
  this.logger.debug('Preview token expired.');
47
46
  token = null;
48
47
  }
48
+ this.logger.debug('Preview token updated.');
49
49
  this.tokenStore.setToken(token);
50
50
  }
51
51
  catch (error) {
@@ -77,7 +77,7 @@ class PreviewPlugin {
77
77
  }
78
78
  insertWidget(url) {
79
79
  const widget = this.createWidget(url);
80
- window.addEventListener('message', event => {
80
+ const onMessage = (event) => {
81
81
  if (event.origin !== constants_1.PREVIEW_WIDGET_ORIGIN) {
82
82
  return;
83
83
  }
@@ -94,12 +94,32 @@ class PreviewPlugin {
94
94
  widget.style.height = `${event.data.height}px`;
95
95
  break;
96
96
  }
97
- });
98
- const insert = () => { var _a; return (_a = document.body) === null || _a === void 0 ? void 0 : _a.prepend(widget); };
99
- if (document.readyState === 'complete') {
97
+ };
98
+ window.addEventListener('message', onMessage);
99
+ this.cleanUp.push(() => window.removeEventListener('message', onMessage));
100
+ const insert = () => {
101
+ const container = document.body;
102
+ container.prepend(widget);
103
+ this.cleanUp.push(() => container.removeChild(widget));
104
+ this.logger.debug('Preview widget mounted.');
105
+ // Reinsert the widget if it is removed from the DOM (e.g. by a framework)
106
+ const observer = new MutationObserver(() => {
107
+ if (!container.contains(widget)) {
108
+ container.prepend(widget);
109
+ this.logger.debug('Preview widget removed from DOM, reinserting.');
110
+ }
111
+ });
112
+ observer.observe(container, { childList: true });
113
+ // Make sure the observer is disconnected before the widget is removed.
114
+ // Otherwise, the observer may reinsert the widget after it is removed.
115
+ this.cleanUp.unshift(() => observer.disconnect());
116
+ };
117
+ if (document.readyState !== 'loading') {
100
118
  insert();
101
119
  }
102
120
  else {
121
+ this.logger.debug('Waiting for document to be ready.');
122
+ this.cleanUp.push(() => window.removeEventListener('DOMContentLoaded', insert));
103
123
  window.addEventListener('DOMContentLoaded', insert);
104
124
  }
105
125
  }
@@ -112,7 +132,6 @@ class PreviewPlugin {
112
132
  }
113
133
  createWidget(url) {
114
134
  const widget = document.createElement('iframe');
115
- widget.setAttribute('id', this.widgetId);
116
135
  widget.setAttribute('src', url);
117
136
  widget.setAttribute('sandbox', 'allow-scripts allow-same-origin');
118
137
  widget.style.position = 'fixed';
package/preview.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"preview.js","sourceRoot":"","sources":["src/preview.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"preview.js","sourceRoot":"","sources":["src/preview.ts"],"names":[],"mappings":"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"}
package/src/preview.ts CHANGED
@@ -1,5 +1,4 @@
1
1
  import {formatCause} from '@croct/sdk/error';
2
- import {uuid4} from '@croct/sdk/uuid';
3
2
  import {Logger} from './sdk';
4
3
  import {Plugin, PluginFactory} from './plugin';
5
4
  import {Token, TokenStore} from './sdk/token';
@@ -25,7 +24,7 @@ export class PreviewPlugin implements Plugin {
25
24
 
26
25
  private readonly logger: Logger;
27
26
 
28
- private readonly widgetId = `croct-preview:${uuid4()}`;
27
+ private cleanUp: Array<() => void> = [];
29
28
 
30
29
  public constructor(configuration: Configuration) {
31
30
  this.tokenStore = configuration.tokenStore;
@@ -55,7 +54,9 @@ export class PreviewPlugin implements Plugin {
55
54
  }
56
55
 
57
56
  public disable(): void {
58
- document.getElementById(this.widgetId)?.remove();
57
+ const callbacks = this.cleanUp.splice(0);
58
+
59
+ callbacks.forEach(cleanUp => cleanUp());
59
60
  }
60
61
 
61
62
  private updateToken(data: string): void {
@@ -77,6 +78,8 @@ export class PreviewPlugin implements Plugin {
77
78
  token = null;
78
79
  }
79
80
 
81
+ this.logger.debug('Preview token updated.');
82
+
80
83
  this.tokenStore.setToken(token);
81
84
  } catch (error) {
82
85
  this.tokenStore.setToken(null);
@@ -118,7 +121,7 @@ export class PreviewPlugin implements Plugin {
118
121
  private insertWidget(url: string): void {
119
122
  const widget = this.createWidget(url);
120
123
 
121
- window.addEventListener('message', event => {
124
+ const onMessage = (event: MessageEvent): void => {
122
125
  if (event.origin !== PREVIEW_WIDGET_ORIGIN) {
123
126
  return;
124
127
  }
@@ -142,13 +145,42 @@ export class PreviewPlugin implements Plugin {
142
145
 
143
146
  break;
144
147
  }
145
- });
148
+ };
149
+
150
+ window.addEventListener('message', onMessage);
151
+
152
+ this.cleanUp.push(() => window.removeEventListener('message', onMessage));
153
+
154
+ const insert = (): void => {
155
+ const container = document.body;
156
+
157
+ container.prepend(widget);
158
+
159
+ this.cleanUp.push(() => container.removeChild(widget));
160
+
161
+ this.logger.debug('Preview widget mounted.');
162
+
163
+ // Reinsert the widget if it is removed from the DOM (e.g. by a framework)
164
+ const observer = new MutationObserver(() => {
165
+ if (!container.contains(widget)) {
166
+ container.prepend(widget);
167
+
168
+ this.logger.debug('Preview widget removed from DOM, reinserting.');
169
+ }
170
+ });
171
+
172
+ observer.observe(container, {childList: true});
146
173
 
147
- const insert = (): void => document.body?.prepend(widget);
174
+ // Make sure the observer is disconnected before the widget is removed.
175
+ // Otherwise, the observer may reinsert the widget after it is removed.
176
+ this.cleanUp.unshift(() => observer.disconnect());
177
+ };
148
178
 
149
- if (document.readyState === 'complete') {
179
+ if (document.readyState !== 'loading') {
150
180
  insert();
151
181
  } else {
182
+ this.logger.debug('Waiting for document to be ready.');
183
+ this.cleanUp.push(() => window.removeEventListener('DOMContentLoaded', insert));
152
184
  window.addEventListener('DOMContentLoaded', insert);
153
185
  }
154
186
  }
@@ -166,7 +198,6 @@ export class PreviewPlugin implements Plugin {
166
198
  private createWidget(url: string): HTMLIFrameElement {
167
199
  const widget = document.createElement('iframe');
168
200
 
169
- widget.setAttribute('id', this.widgetId);
170
201
  widget.setAttribute('src', url);
171
202
  widget.setAttribute('sandbox', 'allow-scripts allow-same-origin');
172
203