piral-debug-utils 0.13.7 → 0.14.0-alpha.3154

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 (59) hide show
  1. package/esm/DebugTracker.d.ts +3 -1
  2. package/esm/DebugTracker.js +4 -4
  3. package/esm/DebugTracker.js.map +1 -1
  4. package/esm/ExtensionCatalogue.d.ts +2 -0
  5. package/esm/ExtensionCatalogue.js +11 -0
  6. package/esm/ExtensionCatalogue.js.map +1 -0
  7. package/esm/VisualizationWrapper.d.ts +5 -2
  8. package/esm/VisualizationWrapper.js +31 -27
  9. package/esm/VisualizationWrapper.js.map +1 -1
  10. package/esm/debug.js +175 -121
  11. package/esm/debug.js.map +1 -1
  12. package/esm/decycle.d.ts +1 -0
  13. package/esm/decycle.js +53 -0
  14. package/esm/decycle.js.map +1 -0
  15. package/esm/emulator.d.ts +2 -7
  16. package/esm/emulator.js +6 -3
  17. package/esm/emulator.js.map +1 -1
  18. package/esm/index.d.ts +1 -0
  19. package/esm/index.js +1 -0
  20. package/esm/index.js.map +1 -1
  21. package/esm/state.d.ts +26 -0
  22. package/esm/state.js +55 -0
  23. package/esm/state.js.map +1 -0
  24. package/esm/types.d.ts +52 -20
  25. package/lib/DebugTracker.d.ts +3 -1
  26. package/lib/DebugTracker.js +5 -5
  27. package/lib/DebugTracker.js.map +1 -1
  28. package/lib/ExtensionCatalogue.d.ts +2 -0
  29. package/lib/ExtensionCatalogue.js +15 -0
  30. package/lib/ExtensionCatalogue.js.map +1 -0
  31. package/lib/VisualizationWrapper.d.ts +5 -2
  32. package/lib/VisualizationWrapper.js +31 -27
  33. package/lib/VisualizationWrapper.js.map +1 -1
  34. package/lib/debug.js +175 -121
  35. package/lib/debug.js.map +1 -1
  36. package/lib/decycle.d.ts +1 -0
  37. package/lib/decycle.js +57 -0
  38. package/lib/decycle.js.map +1 -0
  39. package/lib/emulator.d.ts +2 -7
  40. package/lib/emulator.js +7 -4
  41. package/lib/emulator.js.map +1 -1
  42. package/lib/index.d.ts +1 -0
  43. package/lib/index.js +1 -0
  44. package/lib/index.js.map +1 -1
  45. package/lib/state.d.ts +26 -0
  46. package/lib/state.js +62 -0
  47. package/lib/state.js.map +1 -0
  48. package/lib/types.d.ts +52 -20
  49. package/package.json +6 -4
  50. package/src/DebugTracker.tsx +7 -5
  51. package/src/ExtensionCatalogue.tsx +18 -0
  52. package/src/VisualizationWrapper.tsx +34 -26
  53. package/src/debug.ts +208 -147
  54. package/src/decycle.ts +55 -0
  55. package/src/elements.d.ts +10 -0
  56. package/src/emulator.ts +10 -11
  57. package/src/index.ts +1 -0
  58. package/src/state.ts +79 -0
  59. package/src/types.ts +56 -17
package/src/debug.ts CHANGED
@@ -1,35 +1,77 @@
1
- import { isfunc } from 'piral-base';
2
1
  import { DebugTracker } from './DebugTracker';
3
2
  import { VisualizationWrapper } from './VisualizationWrapper';
4
- import { DebuggerOptions } from './types';
3
+ import { ExtensionCatalogue } from './ExtensionCatalogue';
4
+ import { decycle } from './decycle';
5
+ import { setState, initialSettings } from './state';
6
+ import { DebugCustomSetting, DebuggerOptions } from './types';
5
7
 
6
8
  export function installPiralDebug(options: DebuggerOptions) {
7
- const { context, onChange, ...pilets } = options;
9
+ const {
10
+ injectPilet,
11
+ getGlobalState,
12
+ getExtensions,
13
+ getDependencies,
14
+ getRoutes,
15
+ getPilets,
16
+ setPilets,
17
+ fireEvent,
18
+ integrate,
19
+ createApi,
20
+ loadPilet,
21
+ customSettings = {},
22
+ } = options;
23
+ const events = [];
24
+ const legacyBrowser = !new Error().stack;
25
+ const excludedRoutes = [initialSettings.cataloguePath];
8
26
  const selfSource = 'piral-debug-api';
9
27
  const debugApiVersion = 'v1';
10
- const settings = {
28
+ const settings: Record<string, DebugCustomSetting> = {
29
+ ...customSettings,
11
30
  viewState: {
12
- value: sessionStorage.getItem('dbg:view-state') !== 'off',
31
+ value: initialSettings.viewState,
13
32
  type: 'boolean',
14
33
  label: 'State container logging',
34
+ onChange(value) {
35
+ sessionStorage.setItem('dbg:view-state', value ? 'on' : 'off');
36
+ },
15
37
  },
16
38
  loadPilets: {
17
- value: sessionStorage.getItem('dbg:load-pilets') === 'on',
39
+ value: initialSettings.loadPilets,
18
40
  type: 'boolean',
19
41
  label: 'Load available pilets',
42
+ onChange(value) {
43
+ sessionStorage.setItem('dbg:load-pilets', value ? 'on' : 'off');
44
+ },
20
45
  },
21
46
  hardRefresh: {
22
- value: sessionStorage.getItem('dbg:hard-refresh') === 'on',
47
+ value: initialSettings.hardRefresh,
23
48
  type: 'boolean',
24
49
  label: 'Full refresh on change',
50
+ onChange(value) {
51
+ sessionStorage.setItem('dbg:hard-refresh', value ? 'on' : 'off');
52
+ },
25
53
  },
26
54
  viewOrigins: {
27
- value: sessionStorage.getItem('dbg:view-origins') === 'on',
55
+ value: initialSettings.viewOrigins,
28
56
  type: 'boolean',
29
57
  label: 'Visualize component origins',
58
+ onChange(value, prev) {
59
+ sessionStorage.setItem('dbg:view-origins', value ? 'on' : 'off');
60
+
61
+ if (prev !== value) {
62
+ updateVisualize(value);
63
+ }
64
+ },
65
+ },
66
+ extensionCatalogue: {
67
+ value: initialSettings.extensionCatalogue,
68
+ type: 'boolean',
69
+ label: 'Enable extension catalogue',
70
+ onChange(value) {
71
+ sessionStorage.setItem('dbg:extension-catalogue', value ? 'on' : 'off');
72
+ },
30
73
  },
31
74
  };
32
- const events = [];
33
75
 
34
76
  const sendMessage = (content: any) => {
35
77
  window.postMessage(
@@ -42,79 +84,84 @@ export function installPiralDebug(options: DebuggerOptions) {
42
84
  );
43
85
  };
44
86
 
45
- const sendCurrentPilets = (pilets: Array<any>) => {
46
- sendMessage({
47
- type: 'pilets',
48
- pilets: pilets.map((pilet) => ({
49
- name: pilet.name,
50
- version: pilet.version,
51
- disabled: !!pilet.disabled,
52
- })),
53
- });
54
- };
55
-
56
- const sendCurrentContainer = (state: any) => {
57
- sendMessage({
58
- type: 'container',
59
- container: JSON.parse(JSON.stringify(state)),
60
- });
61
- };
62
-
63
- const sendCurrentRoutes = (pages: Record<string, any>, routes: Record<string, any>) => {
64
- const registeredRoutes = Object.keys(pages);
65
- const componentRoutes = Object.keys(routes);
66
- sendMessage({
67
- type: 'routes',
68
- routes: [...componentRoutes, ...registeredRoutes],
69
- });
70
- };
87
+ const getSettings = () => {
88
+ return Object.keys(settings).reduce((obj, key) => {
89
+ const setting = settings[key];
90
+
91
+ if (
92
+ setting &&
93
+ typeof setting === 'object' &&
94
+ typeof setting.label === 'string' &&
95
+ typeof setting.type === 'string' &&
96
+ ['boolean', 'string', 'number'].includes(typeof setting.value)
97
+ ) {
98
+ obj[key] = {
99
+ label: setting.label,
100
+ value: setting.value,
101
+ type: setting.type,
102
+ };
103
+ }
71
104
 
72
- const setSetting = (setting: { value: any }, key: string, value: any) => {
73
- setting.value = value;
74
- sessionStorage.setItem(key, value ? 'on' : 'off');
105
+ return obj;
106
+ }, {});
75
107
  };
76
108
 
77
109
  const updateSettings = (values: Record<string, any>) => {
78
- const prev = settings.viewOrigins.value;
79
- setSetting(settings.viewState, 'dbg:view-state', values.viewState);
80
- setSetting(settings.loadPilets, 'dbg:load-pilets', values.loadPilets);
81
- setSetting(settings.hardRefresh, 'dbg:hard-refresh', values.hardRefresh);
82
- setSetting(settings.viewOrigins, 'dbg:view-origins', values.viewOrigins);
83
- const curr = settings.viewOrigins.value;
84
-
85
- if (prev !== curr) {
86
- updateVisualize(curr);
87
- }
110
+ Object.keys(values).forEach((key) => {
111
+ const setting = settings[key];
112
+
113
+ switch (setting.type) {
114
+ case 'boolean': {
115
+ const prev = setting.value;
116
+ const value = values[key];
117
+ setting.value = value;
118
+ setting.onChange(value, prev);
119
+ break;
120
+ }
121
+ case 'number': {
122
+ const prev = setting.value;
123
+ const value = values[key];
124
+ setting.value = value;
125
+ setting.onChange(value, prev);
126
+ break;
127
+ }
128
+ case 'string': {
129
+ const prev = setting.value;
130
+ const value = values[key];
131
+ setting.value = value;
132
+ setting.onChange(value, prev);
133
+ break;
134
+ }
135
+ }
136
+ });
88
137
 
89
138
  sendMessage({
90
- settings,
139
+ settings: getSettings(),
91
140
  type: 'settings',
92
141
  });
93
142
  };
94
143
 
95
144
  const togglePilet = (name: string) => {
96
- const pilet: any = context.readState((state) => state.modules).find((m) => m.name === name);
145
+ const pilet: any = getPilets().find((m) => m.name === name);
97
146
 
98
147
  if (pilet.disabled) {
99
148
  try {
100
149
  const { createApi } = options;
101
150
  const newApi = createApi(pilet);
102
- context.injectPilet(pilet.original);
151
+ injectPilet(pilet.original);
103
152
  pilet.original.setup(newApi);
104
153
  } catch (error) {
105
154
  console.error(error);
106
155
  }
107
156
  } else {
108
- context.injectPilet({ name, disabled: true, original: pilet } as any);
157
+ injectPilet({ name, disabled: true, original: pilet } as any);
109
158
  }
110
159
  };
111
160
 
112
161
  const removePilet = (name: string) => {
113
- context.injectPilet({ name } as any);
114
- context.dispatch((state) => ({
115
- ...state,
116
- modules: state.modules.filter((m) => m.name !== name),
117
- }));
162
+ const pilets = getPilets().filter((m) => m.name !== name);
163
+ injectPilet({ name } as any);
164
+ setPilets(pilets);
118
165
  };
119
166
 
120
167
  const appendPilet = (meta: any) => {
@@ -122,7 +169,7 @@ export function installPiralDebug(options: DebuggerOptions) {
122
169
  loadPilet(meta).then((pilet) => {
123
170
  try {
124
171
  const newApi = createApi(pilet);
125
- context.injectPilet(pilet);
172
+ injectPilet(pilet);
126
173
  pilet.setup(newApi as any);
127
174
  } catch (error) {
128
175
  console.error(error);
@@ -131,37 +178,31 @@ export function installPiralDebug(options: DebuggerOptions) {
131
178
  };
132
179
 
133
180
  const toggleVisualize = () => {
134
- context.dispatch((s) => ({
181
+ setState((s) => ({
135
182
  ...s,
136
- $debug: {
137
- ...s.$debug,
138
- visualize: {
139
- ...s.$debug.visualize,
140
- force: !s.$debug.visualize.force,
141
- },
183
+ visualize: {
184
+ ...s.visualize,
185
+ force: !s.visualize.force,
142
186
  },
143
187
  }));
144
188
  };
145
189
 
146
190
  const updateVisualize = (active: boolean) => {
147
- context.dispatch((s) => ({
191
+ setState((s) => ({
148
192
  ...s,
149
- $debug: {
150
- ...s.$debug,
151
- visualize: {
152
- ...s.$debug.visualize,
153
- active,
154
- },
193
+ visualize: {
194
+ ...s.visualize,
195
+ active,
155
196
  },
156
197
  }));
157
198
  };
158
199
 
159
- const goToRoute = (route: string) => {
160
- context.dispatch((s) => ({
200
+ const goToRoute = (path: string, state?: any) => {
201
+ setState((s) => ({
161
202
  ...s,
162
- $debug: {
163
- ...s.$debug,
164
- route,
203
+ route: {
204
+ path,
205
+ state,
165
206
  },
166
207
  }));
167
208
  };
@@ -174,41 +215,45 @@ export function installPiralDebug(options: DebuggerOptions) {
174
215
  name: process.env.BUILD_PCKG_NAME,
175
216
  version: process.env.BUILD_PCKG_VERSION,
176
217
  dependencies: process.env.SHARED_DEPENDENCIES,
177
- context,
178
218
  },
179
219
  build: {
180
220
  date: process.env.BUILD_TIME_FULL,
181
221
  cli: process.env.PIRAL_CLI_VERSION,
182
222
  compat: process.env.DEBUG_PIRAL,
183
223
  },
184
- pilets,
224
+ pilets: {
225
+ loadPilet,
226
+ createApi,
227
+ },
185
228
  };
186
229
 
187
230
  const start = () => {
188
- const registeredRoutes = context.readState((state) => Object.keys(state.registry.pages));
189
- const componentRoutes = context.readState((state) => Object.keys(state.routes));
190
- const routes = [...componentRoutes, ...registeredRoutes];
191
- const container = JSON.parse(JSON.stringify(context.readState((s) => s)));
192
- const pilets = context
193
- .readState((m) => m.modules)
194
- .map((pilet: any) => ({
195
- name: pilet.name,
196
- version: pilet.version,
197
- disabled: pilet.disabled,
198
- }));
231
+ const container = decycle(getGlobalState());
232
+ const routes = getRoutes().filter((r) => !excludedRoutes.includes(r));
233
+ const extensions = getExtensions();
234
+ const settings = getSettings();
235
+ const dependencies = getDependencies();
236
+ const pilets = getPilets().map((pilet: any) => ({
237
+ name: pilet.name,
238
+ version: pilet.version,
239
+ disabled: pilet.disabled,
240
+ }));
199
241
 
200
242
  sendMessage({
201
243
  type: 'available',
202
244
  name: debugApi.instance.name,
203
245
  version: debugApi.instance.version,
204
246
  kind: debugApiVersion,
205
- capabilities: ['events', 'container', 'routes', 'pilets', 'settings'],
247
+ mode: process.env.NODE_ENV === 'production' ? 'production' : 'development',
248
+ capabilities: ['events', 'container', 'routes', 'pilets', 'settings', 'extensions', 'dependencies'],
206
249
  state: {
207
250
  routes,
208
251
  pilets,
209
252
  container,
210
253
  settings,
211
254
  events,
255
+ extensions,
256
+ dependencies,
212
257
  },
213
258
  });
214
259
  };
@@ -218,7 +263,7 @@ export function installPiralDebug(options: DebuggerOptions) {
218
263
  events.unshift({
219
264
  id: events.length.toString(),
220
265
  name: ev.type.replace('piral-', ''),
221
- args: ev.detail.arg,
266
+ args: decycle(ev.detail.arg),
222
267
  time: Date.now(),
223
268
  });
224
269
 
@@ -231,36 +276,15 @@ export function installPiralDebug(options: DebuggerOptions) {
231
276
  return eventDispatcher.call(this, ev);
232
277
  };
233
278
 
234
- context.dispatch((s) => ({
235
- ...s,
236
- $debug: {
237
- visualize: {
238
- active: settings.viewOrigins.value,
239
- force: false,
240
- },
241
- route: undefined,
242
- },
243
- components: {
244
- ...s.components,
245
- Debug: DebugTracker,
246
- },
247
- registry: {
248
- ...s.registry,
249
- wrappers: {
250
- ...s.registry.wrappers,
251
- '*': VisualizationWrapper,
252
- },
253
- },
254
- }));
255
-
256
279
  window.addEventListener('storage', (event) => {
257
- if (event.storageArea === sessionStorage) {
280
+ if (!legacyBrowser && event.storageArea === sessionStorage) {
258
281
  // potentially unknowingly updated settings
259
282
  updateSettings({
260
283
  viewState: sessionStorage.getItem('dbg:view-state') !== 'off',
261
284
  loadPilets: sessionStorage.getItem('dbg:load-pilets') === 'on',
262
285
  hardRefresh: sessionStorage.getItem('dbg:hard-refresh') === 'on',
263
286
  viewOrigins: sessionStorage.getItem('dbg:view-origins') === 'on',
287
+ extensionCatalogue: sessionStorage.getItem('dbg:extension-catalogue') !== 'off',
264
288
  });
265
289
  }
266
290
  });
@@ -281,53 +305,90 @@ export function installPiralDebug(options: DebuggerOptions) {
281
305
  case 'toggle-pilet':
282
306
  return togglePilet(content.name);
283
307
  case 'emit-event':
284
- return context.emit(content.name, content.args);
308
+ return fireEvent(content.name, content.args);
285
309
  case 'goto-route':
286
- return goToRoute(content.route);
310
+ return goToRoute(content.route, content.state);
287
311
  case 'visualize-all':
288
312
  return toggleVisualize();
289
313
  }
290
314
  }
291
315
  });
292
316
 
293
- if (isfunc(onChange)) {
294
- onChange((previous, current) => {
295
- if (settings.viewState.value) {
296
- const infos = new Error().stack;
297
-
298
- if (infos) {
299
- // Chrome, Firefox, ... (full capability)
300
- const lastLine = infos.split('\n')[7];
301
-
302
- if (lastLine) {
303
- const action = lastLine.replace(/^\s+at\s+(Atom\.|Object\.)?/, '');
304
- console.group(
305
- `%c Piral State Change %c ${new Date().toLocaleTimeString()}`,
306
- 'color: gray; font-weight: lighter;',
307
- 'color: black; font-weight: bold;',
308
- );
309
- console.log('%c Previous', `color: #9E9E9E; font-weight: bold`, previous);
310
- console.log('%c Action', `color: #03A9F4; font-weight: bold`, action);
311
- console.log('%c Next', `color: #4CAF50; font-weight: bold`, current);
312
- console.groupEnd();
317
+ integrate({
318
+ components: {
319
+ Debug: DebugTracker,
320
+ },
321
+ routes: {
322
+ [initialSettings.cataloguePath]: ExtensionCatalogue,
323
+ },
324
+ wrappers: {
325
+ '*': VisualizationWrapper,
326
+ },
327
+ onChange(previous, current, changed) {
328
+ if (changed.state) {
329
+ if (settings.viewState.value) {
330
+ if (!legacyBrowser) {
331
+ // Chrome, Firefox, ... (full capability)
332
+ const err = new Error();
333
+ const lastLine = err.stack.split('\n')[7];
334
+
335
+ if (lastLine) {
336
+ const action = lastLine.replace(/^\s+at\s+(Atom\.|Object\.)?/, '');
337
+ console.group(
338
+ `%c Piral State Change %c ${new Date().toLocaleTimeString()}`,
339
+ 'color: gray; font-weight: lighter;',
340
+ 'color: black; font-weight: bold;',
341
+ );
342
+ console.log('%c Previous', `color: #9E9E9E; font-weight: bold`, previous);
343
+ console.log('%c Action', `color: #03A9F4; font-weight: bold`, action);
344
+ console.log('%c Next', `color: #4CAF50; font-weight: bold`, current);
345
+ console.groupEnd();
346
+ }
347
+ } else {
348
+ // IE 11, ... (does not know colors etc.)
349
+ console.log('Changed state', previous, current);
313
350
  }
314
- } else {
315
- // IE 11, ... (does not know colors etc.)
316
- console.log('Changed state', previous, current);
317
351
  }
352
+
353
+ sendMessage({
354
+ type: 'container',
355
+ container: decycle(getGlobalState()),
356
+ });
318
357
  }
319
358
 
320
- if (current.modules !== previous.modules) {
321
- sendCurrentPilets(current.modules);
359
+ if (changed.pilets) {
360
+ sendMessage({
361
+ type: 'pilets',
362
+ pilets: getPilets().map((pilet: any) => ({
363
+ name: pilet.name,
364
+ version: pilet.version,
365
+ disabled: !!pilet.disabled,
366
+ })),
367
+ });
322
368
  }
323
369
 
324
- if (current.registry.pages !== previous.registry.pages || current.routes !== previous.routes) {
325
- sendCurrentRoutes(current.registry.pages, current.routes);
370
+ if (changed.pages) {
371
+ sendMessage({
372
+ type: 'routes',
373
+ routes: getRoutes().filter((r) => !excludedRoutes.includes(r)),
374
+ });
326
375
  }
327
376
 
328
- sendCurrentContainer(current);
329
- });
330
- }
377
+ if (changed.extensions) {
378
+ sendMessage({
379
+ type: 'extensions',
380
+ extensions: getExtensions(),
381
+ });
382
+ }
383
+
384
+ if (changed.dependencies) {
385
+ sendMessage({
386
+ type: 'dependencies',
387
+ dependencies: getDependencies(),
388
+ });
389
+ }
390
+ },
391
+ });
331
392
 
332
393
  window['dbg:piral'] = debugApi;
333
394
  start();
package/src/decycle.ts ADDED
@@ -0,0 +1,55 @@
1
+ export function decycle(obj: Record<string, any>) {
2
+ const objects = [];
3
+ const paths = [];
4
+
5
+ const derez = (value: Record<string, any>, path: string) => {
6
+ const _value = value && value.toJSON instanceof Function ? value.toJSON() : value;
7
+
8
+ if (_value === null || _value === undefined) {
9
+ return undefined;
10
+ } else if (typeof _value === 'function') {
11
+ return `<function>`;
12
+ } else if (_value instanceof Error) {
13
+ return `<error>`;
14
+ } else if (_value instanceof Node) {
15
+ return `<node>`;
16
+ } else if (typeof _value === 'object') {
17
+ for (let i = 0; i < objects.length; i++) {
18
+ if (objects[i] === _value) {
19
+ return { $ref: paths[i] };
20
+ }
21
+ }
22
+
23
+ objects.push(_value);
24
+ paths.push(path);
25
+
26
+ if (Array.isArray(_value)) {
27
+ const nu = [];
28
+
29
+ for (let i = 0; i < _value.length; i += 1) {
30
+ nu[i] = derez(_value[i], `${path}[${i}]`);
31
+ }
32
+
33
+ return nu;
34
+ } else {
35
+ const nu = {};
36
+
37
+ for (const name in _value) {
38
+ if (Object.prototype.hasOwnProperty.call(_value, name)) {
39
+ nu[name] = derez(_value[name], `${path}[${JSON.stringify(name)}]`);
40
+ }
41
+ }
42
+
43
+ return nu;
44
+ }
45
+ } else if (typeof _value === 'symbol') {
46
+ return '<symbol>';
47
+ } else if (typeof _value === 'bigint') {
48
+ return '<bigint>';
49
+ }
50
+
51
+ return _value;
52
+ };
53
+
54
+ return derez(obj, '$');
55
+ }
@@ -0,0 +1,10 @@
1
+ interface PiralExtensionProps {
2
+ name: string;
3
+ params: string;
4
+ }
5
+
6
+ declare module JSX {
7
+ interface IntrinsicElements {
8
+ 'piral-extension': React.DetailedHTMLProps<PiralExtensionProps, {}>;
9
+ }
10
+ }
package/src/emulator.ts CHANGED
@@ -1,14 +1,8 @@
1
- import { isfunc, Pilet, PiletApiCreator, PiletLoader, PiletRequester, setupPilet } from 'piral-base';
2
-
3
- export interface EmulatorConnectorOptions {
4
- createApi: PiletApiCreator;
5
- loadPilet: PiletLoader;
6
- inject?(pilet: Pilet): void;
7
- piletApiFallback?: string;
8
- }
1
+ import { isfunc, PiletRequester, setupPilet } from 'piral-base';
2
+ import { EmulatorConnectorOptions } from './types';
9
3
 
10
4
  export function withEmulatorPilets(requestPilets: PiletRequester, options: EmulatorConnectorOptions): PiletRequester {
11
- const { loadPilet, createApi, inject, piletApiFallback = '/$pilet-api' } = options;
5
+ const { loadPilet, createApi, injectPilet, piletApiFallback = '/$pilet-api' } = options;
12
6
  // check if pilets should be loaded
13
7
  const loadPilets = sessionStorage.getItem('dbg:load-pilets') === 'on';
14
8
  const noPilets: PiletRequester = () => Promise.resolve([]);
@@ -37,10 +31,15 @@ export function withEmulatorPilets(requestPilets: PiletRequester, options: Emula
37
31
  if (!hardRefresh) {
38
32
  // standard setting is to just perform an inject
39
33
  const meta = JSON.parse(data);
34
+
35
+ // tear down pilet
36
+ injectPilet({ name: meta.name } as any);
37
+
38
+ // load and evaluate pilet
40
39
  loadPilet(meta).then((pilet) => {
41
40
  try {
42
- if (isfunc(inject)) {
43
- inject(pilet);
41
+ if (isfunc(injectPilet)) {
42
+ injectPilet(pilet);
44
43
  }
45
44
 
46
45
  setupPilet(pilet, createApi);
package/src/index.ts CHANGED
@@ -1,2 +1,3 @@
1
1
  export * from './debug';
2
2
  export * from './emulator';
3
+ export * from './types';