piral-blazor 0.15.0-alpha.4122 → 0.15.0-alpha.4284

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/convert.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import type { BlazorOptions } from './esm/types';
1
2
  export interface HtmlComponent<TProps> {
2
3
  component: {
3
4
  mount(element: HTMLElement, props: TProps, ctx: any, locals: any): void;
@@ -9,5 +10,7 @@ export interface HtmlComponent<TProps> {
9
10
  export interface BlazorConverter {
10
11
  (moduleName: string, args?: Record<string, any>): HtmlComponent<any>;
11
12
  }
13
+ export declare function defineBlazorOptions(options: BlazorOptions): void;
12
14
  export declare const fromBlazor: BlazorConverter;
13
15
  export declare const defineBlazorReferences: (references: string[]) => void;
16
+ export declare const releaseBlazorReferences: () => Promise<void>;
package/convert.js CHANGED
@@ -2,8 +2,13 @@ import { createConverter } from './esm/converter';
2
2
  import { createDependencyLoader } from './esm/dependencies';
3
3
  var convert = createConverter(true);
4
4
  var loader = createDependencyLoader(convert);
5
+ var blazorOptions = undefined;
6
+ export function defineBlazorOptions(options) {
7
+ blazorOptions = options;
8
+ }
5
9
  export var fromBlazor = function (moduleName, args) { return ({
6
10
  type: 'html',
7
- component: convert(moduleName, loader.getDependency(), args)
11
+ component: convert(moduleName, loader.getDependency(), args, blazorOptions)
8
12
  }); };
9
13
  export var defineBlazorReferences = loader.defineBlazorReferences;
14
+ export var releaseBlazorReferences = loader.releaseBlazorReferences;
@@ -2,5 +2,5 @@ import type { BaseComponentProps, ForeignComponent } from 'piral-core';
2
2
  import { BlazorOptions } from './types';
3
3
  export declare function createConverter(lazy: boolean): {
4
4
  <TProps extends BaseComponentProps>(moduleName: string, dependency: () => Promise<void>, args: Record<string, any>, options?: BlazorOptions): ForeignComponent<TProps>;
5
- loader: Promise<unknown>;
5
+ loader: Promise<HTMLDivElement>;
6
6
  };
package/esm/converter.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import { addGlobalEventListeners, attachEvents, removeGlobalEventListeners } from './events';
2
2
  import { activate, deactivate, createBootLoader, reactivate } from './interop';
3
3
  import bootConfig from '../infra.codegen';
4
+ const noop = () => { };
4
5
  const mediaRules = [
5
6
  { attribute: 'src', selector: 'img, embed, video > source, video > track, audio > source' },
6
7
  { attribute: 'srcset', selector: 'picture > source' },
@@ -19,21 +20,27 @@ function project(component, destination, options) {
19
20
  }
20
21
  export function createConverter(lazy) {
21
22
  const boot = createBootLoader(bootConfig);
22
- const root = document.body.appendChild(document.createElement('div'));
23
23
  let loader = !lazy && boot();
24
- root.style.display = 'none';
25
- root.id = 'blazor-root';
24
+ const enqueueChange = (locals, update) => {
25
+ if (locals.state === 'mounted') {
26
+ loader.then(update);
27
+ }
28
+ else {
29
+ locals.update = update;
30
+ }
31
+ };
26
32
  const convert = (moduleName, dependency, args, options) => ({
27
33
  mount(el, data, ctx, locals) {
28
34
  const props = Object.assign(Object.assign({}, args), data);
29
35
  el.setAttribute('data-blazor-pilet-root', 'true');
30
36
  addGlobalEventListeners(el);
31
37
  locals.state = 'fresh';
38
+ locals.update = noop;
32
39
  locals.dispose = attachEvents(el, (ev) => data.piral.renderHtmlExtension(ev.detail.target, ev.detail.props), (ev) => ev.detail.replace
33
40
  ? ctx.router.history.replace(ev.detail.to, ev.detail.store)
34
41
  : ctx.router.history.push(ev.detail.to, ev.detail.state));
35
42
  (loader || (loader = boot()))
36
- .then(dependency)
43
+ .then((root) => dependency()
37
44
  .then(() => activate(moduleName, props))
38
45
  .then((refId) => {
39
46
  if (locals.state === 'fresh') {
@@ -42,22 +49,26 @@ export function createConverter(lazy) {
42
49
  project(locals.node, el, options);
43
50
  locals.state = 'mounted';
44
51
  locals.referenceId = refId;
52
+ locals.update(root);
53
+ locals.update = noop;
45
54
  }
46
- })
55
+ }))
47
56
  .catch((err) => console.error(err));
48
57
  },
49
58
  update(el, data, ctx, locals) {
50
- const props = Object.assign(Object.assign({}, args), data);
51
- reactivate(moduleName, locals.referenceId, props);
59
+ enqueueChange(locals, () => {
60
+ const props = Object.assign(Object.assign({}, args), data);
61
+ reactivate(moduleName, locals.referenceId, props);
62
+ });
52
63
  },
53
64
  unmount(el, locals) {
54
65
  removeGlobalEventListeners(el);
55
66
  el.removeAttribute('data-blazor-pilet-root');
56
67
  locals.dispose();
57
- if (locals.state === 'mounted') {
68
+ enqueueChange(locals, (root) => {
58
69
  root.querySelector(`#${locals.id}`).appendChild(locals.node);
59
70
  deactivate(moduleName, locals.referenceId);
60
- }
71
+ });
61
72
  el.innerHTML = '';
62
73
  locals.state = 'removed';
63
74
  },
@@ -1 +1 @@
1
- {"version":3,"file":"converter.js","sourceRoot":"","sources":["../src/converter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"converter.js","sourceRoot":"","sources":["../src/converter.ts"],"names":[],"mappings":"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"}
package/esm/create.js CHANGED
@@ -16,6 +16,7 @@ export function createBlazorApi(config = {}) {
16
16
  defineBlazorOptions(blazorOptions) {
17
17
  options = blazorOptions;
18
18
  },
19
+ releaseBlazorReferences: loader.releaseBlazorReferences,
19
20
  fromBlazor(moduleName, args) {
20
21
  return {
21
22
  type: 'blazor',
package/esm/create.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"create.js","sourceRoot":"","sources":["../src/create.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAcxD;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,SAAuB,EAAE;IACvD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;IAExB,OAAO,CAAC,OAAO,EAAE,EAAE;QACjB,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;QACtC,OAAO,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,EAAE,CACxE,OAAO,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAEjD,OAAO,GAAG,EAAE;YACV,MAAM,MAAM,GAAG,sBAAsB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YACrD,IAAI,OAAsB,CAAC;YAE3B,OAAO;gBACL,sBAAsB,EAAE,MAAM,CAAC,sBAAsB;gBACrD,mBAAmB,CAAC,aAA4B;oBAC9C,OAAO,GAAG,aAAa,CAAC;gBAC1B,CAAC;gBACD,UAAU,CAAC,UAAU,EAAE,IAAI;oBACzB,OAAO;wBACL,IAAI,EAAE,QAAQ;wBACd,UAAU,EAAE,MAAM,CAAC,aAAa,EAAE;wBAClC,UAAU;wBACV,IAAI;wBACJ,OAAO;qBACR,CAAC;gBACJ,CAAC;aACF,CAAC;QACJ,CAAC,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../src/create.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAcxD;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,SAAuB,EAAE;IACvD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;IAExB,OAAO,CAAC,OAAO,EAAE,EAAE;QACjB,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;QACtC,OAAO,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,EAAE,CACxE,OAAO,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAEjD,OAAO,GAAG,EAAE;YACV,MAAM,MAAM,GAAG,sBAAsB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YACrD,IAAI,OAAsB,CAAC;YAE3B,OAAO;gBACL,sBAAsB,EAAE,MAAM,CAAC,sBAAsB;gBACrD,mBAAmB,CAAC,aAA4B;oBAC9C,OAAO,GAAG,aAAa,CAAC;gBAC1B,CAAC;gBACD,uBAAuB,EAAE,MAAM,CAAC,uBAAuB;gBACvD,UAAU,CAAC,UAAU,EAAE,IAAI;oBACzB,OAAO;wBACL,IAAI,EAAE,QAAQ;wBACd,UAAU,EAAE,MAAM,CAAC,aAAa,EAAE;wBAClC,UAAU;wBACV,IAAI;wBACJ,OAAO;qBACR,CAAC;gBACJ,CAAC;aACF,CAAC;QACJ,CAAC,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
@@ -2,4 +2,5 @@ import type { createConverter } from './converter';
2
2
  export declare function createDependencyLoader(convert: ReturnType<typeof createConverter>, lazy?: boolean): {
3
3
  getDependency(): () => Promise<any>;
4
4
  defineBlazorReferences(references: Array<string>): void;
5
+ releaseBlazorReferences(): Promise<void>;
5
6
  };
@@ -1,6 +1,7 @@
1
1
  import { __awaiter } from "tslib";
2
- import { loadResource, loadResourceWithSymbol } from './interop';
2
+ import { loadResource, loadResourceWithSymbol, unloadResource } from './interop';
3
3
  export function createDependencyLoader(convert, lazy = true) {
4
+ const definedBlazorReferences = [];
4
5
  let dependency;
5
6
  return {
6
7
  getDependency() {
@@ -19,12 +20,21 @@ export function createDependencyLoader(convert, lazy = true) {
19
20
  else {
20
21
  yield loadResource(dllUrl);
21
22
  }
23
+ definedBlazorReferences.push(dllUrl);
22
24
  }
23
25
  }
24
26
  });
25
27
  let result = !lazy && convert.loader.then(load);
26
28
  dependency = () => result || (result = load());
27
29
  },
30
+ releaseBlazorReferences() {
31
+ return __awaiter(this, void 0, void 0, function* () {
32
+ const references = definedBlazorReferences.splice(0, definedBlazorReferences.length);
33
+ for (const reference of references) {
34
+ yield unloadResource(reference);
35
+ }
36
+ });
37
+ },
28
38
  };
29
39
  }
30
40
  //# sourceMappingURL=dependencies.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dependencies.js","sourceRoot":"","sources":["../src/dependencies.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAGjE,MAAM,UAAU,sBAAsB,CAAC,OAA2C,EAAE,IAAI,GAAG,IAAI;IAC7F,IAAI,UAA8B,CAAC;IAEnC,OAAO;QACL,aAAa;YACX,OAAO,UAAU,CAAC;QACpB,CAAC;QACD,sBAAsB,CAAC,UAAyB;YAC9C,MAAM,IAAI,GAAG,GAAS,EAAE;gBACtB,KAAK,MAAM,MAAM,IAAI,UAAU,EAAE;oBAC/B,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;wBAC3B,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;wBAChE,MAAM,OAAO,GAAG,GAAG,mBAAmB,MAAM,CAAC;wBAC7C,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC;wBAErD,IAAI,MAAM,EAAE;4BACV,MAAM,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;yBAC9C;6BAAM;4BACL,MAAM,YAAY,CAAC,MAAM,CAAC,CAAC;yBAC5B;qBACF;iBACF;YACH,CAAC,CAAA,CAAC;YACF,IAAI,MAAM,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChD,UAAU,GAAG,GAAG,EAAE,CAAC,MAAM,IAAI,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC,CAAC;QACjD,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"dependencies.js","sourceRoot":"","sources":["../src/dependencies.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAGjF,MAAM,UAAU,sBAAsB,CAAC,OAA2C,EAAE,IAAI,GAAG,IAAI;IAC7F,MAAM,uBAAuB,GAAkB,EAAE,CAAC;IAClD,IAAI,UAA8B,CAAC;IAEnC,OAAO;QACL,aAAa;YACX,OAAO,UAAU,CAAC;QACpB,CAAC;QACD,sBAAsB,CAAC,UAAyB;YAC9C,MAAM,IAAI,GAAG,GAAS,EAAE;gBACtB,KAAK,MAAM,MAAM,IAAI,UAAU,EAAE;oBAC/B,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;wBAC3B,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;wBAChE,MAAM,OAAO,GAAG,GAAG,mBAAmB,MAAM,CAAC;wBAC7C,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC;wBAErD,IAAI,MAAM,EAAE;4BACV,MAAM,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;yBAC9C;6BAAM;4BACL,MAAM,YAAY,CAAC,MAAM,CAAC,CAAC;yBAC5B;wBAED,uBAAuB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;qBACtC;iBACF;YACH,CAAC,CAAA,CAAC;YACF,IAAI,MAAM,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChD,UAAU,GAAG,GAAG,EAAE,CAAC,MAAM,IAAI,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC,CAAC;QACjD,CAAC;QACK,uBAAuB;;gBAC3B,MAAM,UAAU,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC,EAAE,uBAAuB,CAAC,MAAM,CAAC,CAAC;gBAErF,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE;oBAClC,MAAM,cAAc,CAAC,SAAS,CAAC,CAAC;iBACjC;YACH,CAAC;SAAA;KACF,CAAC;AACJ,CAAC"}
package/esm/interop.d.ts CHANGED
@@ -3,5 +3,6 @@ export declare function reactivate(moduleName: string, referenceId: string, prop
3
3
  export declare function deactivate(moduleName: string, referenceId: string): any;
4
4
  export declare function loadResource(url: string): Promise<any>;
5
5
  export declare function loadResourceWithSymbol(dllUrl: string, pdbUrl: string): Promise<any>;
6
- export declare function initialize(scriptUrl: string, publicPath: string): Promise<unknown>;
7
- export declare function createBootLoader(scriptUrl: string): () => Promise<unknown>;
6
+ export declare function unloadResource(url: string): Promise<any>;
7
+ export declare function initialize(scriptUrl: string, publicPath: string): Promise<HTMLDivElement>;
8
+ export declare function createBootLoader(scriptUrl: string): () => Promise<HTMLDivElement>;
package/esm/interop.js CHANGED
@@ -2,6 +2,9 @@ import { __awaiter } from "tslib";
2
2
  import { emitRenderEvent, emitNavigateEvent } from './events';
3
3
  const coreLib = 'Piral.Blazor.Core';
4
4
  function createBlazorStarter(publicPath) {
5
+ const root = document.body.appendChild(document.createElement('div'));
6
+ root.style.display = 'none';
7
+ root.id = 'blazor-root';
5
8
  if (publicPath) {
6
9
  const baseElement = document.head.querySelector('base') || document.head.appendChild(document.createElement('base'));
7
10
  const originalBase = baseElement.href;
@@ -10,10 +13,11 @@ function createBlazorStarter(publicPath) {
10
13
  window.Blazor._internal.navigationManager.getBaseURI = () => originalBase;
11
14
  return window.Blazor.start().then(() => {
12
15
  baseElement.href = originalBase;
16
+ return root;
13
17
  });
14
18
  };
15
19
  }
16
- return () => window.Blazor.start();
20
+ return () => window.Blazor.start().then(() => root);
17
21
  }
18
22
  function computePath() {
19
23
  try {
@@ -49,6 +53,11 @@ export function loadResourceWithSymbol(dllUrl, pdbUrl) {
49
53
  return window.DotNet.invokeMethodAsync(coreLib, 'LoadComponentsWithSymbolsFromLibrary', dllUrl, pdbUrl);
50
54
  });
51
55
  }
56
+ export function unloadResource(url) {
57
+ return __awaiter(this, void 0, void 0, function* () {
58
+ return window.DotNet.invokeMethodAsync(coreLib, 'UnloadComponentsFromLibrary', url);
59
+ });
60
+ }
52
61
  export function initialize(scriptUrl, publicPath) {
53
62
  return new Promise((resolve, reject) => {
54
63
  const startBlazor = createBlazorStarter(publicPath);
@@ -68,6 +77,11 @@ export function initialize(scriptUrl, publicPath) {
68
77
  }
69
78
  export function createBootLoader(scriptUrl) {
70
79
  const publicPath = computePath();
71
- return () => initialize(scriptUrl, publicPath);
80
+ return () => {
81
+ if (typeof window.$blazorLoader === 'undefined') {
82
+ window.$blazorLoader = initialize(scriptUrl, publicPath);
83
+ }
84
+ return window.$blazorLoader;
85
+ };
72
86
  }
73
87
  //# sourceMappingURL=interop.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"interop.js","sourceRoot":"","sources":["../src/interop.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"interop.js","sourceRoot":"","sources":["../src/interop.ts"],"names":[],"mappings":"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"}
package/esm/types.d.ts CHANGED
@@ -3,6 +3,7 @@ declare global {
3
3
  interface Window {
4
4
  Blazor: any;
5
5
  DotNet: any;
6
+ $blazorLoader: Promise<HTMLDivElement>;
6
7
  }
7
8
  }
8
9
  declare module 'piral-core/lib/types/custom' {
@@ -69,4 +70,8 @@ export interface PiletBlazorApi {
69
70
  * @param options The options for the Blazor components.
70
71
  */
71
72
  defineBlazorOptions(options: BlazorOptions): void;
73
+ /**
74
+ * Releases all defined blazor references from the current pilet.
75
+ */
76
+ releaseBlazorReferences(): void;
72
77
  }
@@ -2,5 +2,5 @@ import type { BaseComponentProps, ForeignComponent } from 'piral-core';
2
2
  import { BlazorOptions } from './types';
3
3
  export declare function createConverter(lazy: boolean): {
4
4
  <TProps extends BaseComponentProps>(moduleName: string, dependency: () => Promise<void>, args: Record<string, any>, options?: BlazorOptions): ForeignComponent<TProps>;
5
- loader: Promise<unknown>;
5
+ loader: Promise<HTMLDivElement>;
6
6
  };
package/lib/converter.js CHANGED
@@ -4,6 +4,7 @@ exports.createConverter = void 0;
4
4
  const events_1 = require("./events");
5
5
  const interop_1 = require("./interop");
6
6
  const infra_codegen_1 = require("../infra.codegen");
7
+ const noop = () => { };
7
8
  const mediaRules = [
8
9
  { attribute: 'src', selector: 'img, embed, video > source, video > track, audio > source' },
9
10
  { attribute: 'srcset', selector: 'picture > source' },
@@ -22,21 +23,27 @@ function project(component, destination, options) {
22
23
  }
23
24
  function createConverter(lazy) {
24
25
  const boot = (0, interop_1.createBootLoader)(infra_codegen_1.default);
25
- const root = document.body.appendChild(document.createElement('div'));
26
26
  let loader = !lazy && boot();
27
- root.style.display = 'none';
28
- root.id = 'blazor-root';
27
+ const enqueueChange = (locals, update) => {
28
+ if (locals.state === 'mounted') {
29
+ loader.then(update);
30
+ }
31
+ else {
32
+ locals.update = update;
33
+ }
34
+ };
29
35
  const convert = (moduleName, dependency, args, options) => ({
30
36
  mount(el, data, ctx, locals) {
31
37
  const props = Object.assign(Object.assign({}, args), data);
32
38
  el.setAttribute('data-blazor-pilet-root', 'true');
33
39
  (0, events_1.addGlobalEventListeners)(el);
34
40
  locals.state = 'fresh';
41
+ locals.update = noop;
35
42
  locals.dispose = (0, events_1.attachEvents)(el, (ev) => data.piral.renderHtmlExtension(ev.detail.target, ev.detail.props), (ev) => ev.detail.replace
36
43
  ? ctx.router.history.replace(ev.detail.to, ev.detail.store)
37
44
  : ctx.router.history.push(ev.detail.to, ev.detail.state));
38
45
  (loader || (loader = boot()))
39
- .then(dependency)
46
+ .then((root) => dependency()
40
47
  .then(() => (0, interop_1.activate)(moduleName, props))
41
48
  .then((refId) => {
42
49
  if (locals.state === 'fresh') {
@@ -45,22 +52,26 @@ function createConverter(lazy) {
45
52
  project(locals.node, el, options);
46
53
  locals.state = 'mounted';
47
54
  locals.referenceId = refId;
55
+ locals.update(root);
56
+ locals.update = noop;
48
57
  }
49
- })
58
+ }))
50
59
  .catch((err) => console.error(err));
51
60
  },
52
61
  update(el, data, ctx, locals) {
53
- const props = Object.assign(Object.assign({}, args), data);
54
- (0, interop_1.reactivate)(moduleName, locals.referenceId, props);
62
+ enqueueChange(locals, () => {
63
+ const props = Object.assign(Object.assign({}, args), data);
64
+ (0, interop_1.reactivate)(moduleName, locals.referenceId, props);
65
+ });
55
66
  },
56
67
  unmount(el, locals) {
57
68
  (0, events_1.removeGlobalEventListeners)(el);
58
69
  el.removeAttribute('data-blazor-pilet-root');
59
70
  locals.dispose();
60
- if (locals.state === 'mounted') {
71
+ enqueueChange(locals, (root) => {
61
72
  root.querySelector(`#${locals.id}`).appendChild(locals.node);
62
73
  (0, interop_1.deactivate)(moduleName, locals.referenceId);
63
- }
74
+ });
64
75
  el.innerHTML = '';
65
76
  locals.state = 'removed';
66
77
  },
@@ -1 +1 @@
1
- {"version":3,"file":"converter.js","sourceRoot":"","sources":["../src/converter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"converter.js","sourceRoot":"","sources":["../src/converter.ts"],"names":[],"mappings":"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"}
package/lib/create.js CHANGED
@@ -19,6 +19,7 @@ function createBlazorApi(config = {}) {
19
19
  defineBlazorOptions(blazorOptions) {
20
20
  options = blazorOptions;
21
21
  },
22
+ releaseBlazorReferences: loader.releaseBlazorReferences,
22
23
  fromBlazor(moduleName, args) {
23
24
  return {
24
25
  type: 'blazor',
package/lib/create.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"create.js","sourceRoot":"","sources":["../src/create.ts"],"names":[],"mappings":";;;AACA,2CAA8C;AAC9C,iDAAwD;AAcxD;;GAEG;AACH,SAAgB,eAAe,CAAC,SAAuB,EAAE;IACvD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;IAExB,OAAO,CAAC,OAAO,EAAE,EAAE;QACjB,MAAM,OAAO,GAAG,IAAA,2BAAe,EAAC,IAAI,CAAC,CAAC;QACtC,OAAO,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,EAAE,CACxE,OAAO,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAEjD,OAAO,GAAG,EAAE;YACV,MAAM,MAAM,GAAG,IAAA,qCAAsB,EAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YACrD,IAAI,OAAsB,CAAC;YAE3B,OAAO;gBACL,sBAAsB,EAAE,MAAM,CAAC,sBAAsB;gBACrD,mBAAmB,CAAC,aAA4B;oBAC9C,OAAO,GAAG,aAAa,CAAC;gBAC1B,CAAC;gBACD,UAAU,CAAC,UAAU,EAAE,IAAI;oBACzB,OAAO;wBACL,IAAI,EAAE,QAAQ;wBACd,UAAU,EAAE,MAAM,CAAC,aAAa,EAAE;wBAClC,UAAU;wBACV,IAAI;wBACJ,OAAO;qBACR,CAAC;gBACJ,CAAC;aACF,CAAC;QACJ,CAAC,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AA7BD,0CA6BC"}
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../src/create.ts"],"names":[],"mappings":";;;AACA,2CAA8C;AAC9C,iDAAwD;AAcxD;;GAEG;AACH,SAAgB,eAAe,CAAC,SAAuB,EAAE;IACvD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;IAExB,OAAO,CAAC,OAAO,EAAE,EAAE;QACjB,MAAM,OAAO,GAAG,IAAA,2BAAe,EAAC,IAAI,CAAC,CAAC;QACtC,OAAO,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,EAAE,CACxE,OAAO,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAEjD,OAAO,GAAG,EAAE;YACV,MAAM,MAAM,GAAG,IAAA,qCAAsB,EAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YACrD,IAAI,OAAsB,CAAC;YAE3B,OAAO;gBACL,sBAAsB,EAAE,MAAM,CAAC,sBAAsB;gBACrD,mBAAmB,CAAC,aAA4B;oBAC9C,OAAO,GAAG,aAAa,CAAC;gBAC1B,CAAC;gBACD,uBAAuB,EAAE,MAAM,CAAC,uBAAuB;gBACvD,UAAU,CAAC,UAAU,EAAE,IAAI;oBACzB,OAAO;wBACL,IAAI,EAAE,QAAQ;wBACd,UAAU,EAAE,MAAM,CAAC,aAAa,EAAE;wBAClC,UAAU;wBACV,IAAI;wBACJ,OAAO;qBACR,CAAC;gBACJ,CAAC;aACF,CAAC;QACJ,CAAC,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AA9BD,0CA8BC"}
@@ -2,4 +2,5 @@ import type { createConverter } from './converter';
2
2
  export declare function createDependencyLoader(convert: ReturnType<typeof createConverter>, lazy?: boolean): {
3
3
  getDependency(): () => Promise<any>;
4
4
  defineBlazorReferences(references: Array<string>): void;
5
+ releaseBlazorReferences(): Promise<void>;
5
6
  };
@@ -4,6 +4,7 @@ exports.createDependencyLoader = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const interop_1 = require("./interop");
6
6
  function createDependencyLoader(convert, lazy = true) {
7
+ const definedBlazorReferences = [];
7
8
  let dependency;
8
9
  return {
9
10
  getDependency() {
@@ -22,12 +23,21 @@ function createDependencyLoader(convert, lazy = true) {
22
23
  else {
23
24
  yield (0, interop_1.loadResource)(dllUrl);
24
25
  }
26
+ definedBlazorReferences.push(dllUrl);
25
27
  }
26
28
  }
27
29
  });
28
30
  let result = !lazy && convert.loader.then(load);
29
31
  dependency = () => result || (result = load());
30
32
  },
33
+ releaseBlazorReferences() {
34
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
35
+ const references = definedBlazorReferences.splice(0, definedBlazorReferences.length);
36
+ for (const reference of references) {
37
+ yield (0, interop_1.unloadResource)(reference);
38
+ }
39
+ });
40
+ },
31
41
  };
32
42
  }
33
43
  exports.createDependencyLoader = createDependencyLoader;
@@ -1 +1 @@
1
- {"version":3,"file":"dependencies.js","sourceRoot":"","sources":["../src/dependencies.ts"],"names":[],"mappings":";;;;AAAA,uCAAiE;AAGjE,SAAgB,sBAAsB,CAAC,OAA2C,EAAE,IAAI,GAAG,IAAI;IAC7F,IAAI,UAA8B,CAAC;IAEnC,OAAO;QACL,aAAa;YACX,OAAO,UAAU,CAAC;QACpB,CAAC;QACD,sBAAsB,CAAC,UAAyB;YAC9C,MAAM,IAAI,GAAG,GAAS,EAAE;gBACtB,KAAK,MAAM,MAAM,IAAI,UAAU,EAAE;oBAC/B,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;wBAC3B,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;wBAChE,MAAM,OAAO,GAAG,GAAG,mBAAmB,MAAM,CAAC;wBAC7C,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC;wBAErD,IAAI,MAAM,EAAE;4BACV,MAAM,IAAA,gCAAsB,EAAC,MAAM,EAAE,MAAM,CAAC,CAAC;yBAC9C;6BAAM;4BACL,MAAM,IAAA,sBAAY,EAAC,MAAM,CAAC,CAAC;yBAC5B;qBACF;iBACF;YACH,CAAC,CAAA,CAAC;YACF,IAAI,MAAM,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChD,UAAU,GAAG,GAAG,EAAE,CAAC,MAAM,IAAI,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC,CAAC;QACjD,CAAC;KACF,CAAC;AACJ,CAAC;AA3BD,wDA2BC"}
1
+ {"version":3,"file":"dependencies.js","sourceRoot":"","sources":["../src/dependencies.ts"],"names":[],"mappings":";;;;AAAA,uCAAiF;AAGjF,SAAgB,sBAAsB,CAAC,OAA2C,EAAE,IAAI,GAAG,IAAI;IAC7F,MAAM,uBAAuB,GAAkB,EAAE,CAAC;IAClD,IAAI,UAA8B,CAAC;IAEnC,OAAO;QACL,aAAa;YACX,OAAO,UAAU,CAAC;QACpB,CAAC;QACD,sBAAsB,CAAC,UAAyB;YAC9C,MAAM,IAAI,GAAG,GAAS,EAAE;gBACtB,KAAK,MAAM,MAAM,IAAI,UAAU,EAAE;oBAC/B,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;wBAC3B,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;wBAChE,MAAM,OAAO,GAAG,GAAG,mBAAmB,MAAM,CAAC;wBAC7C,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC;wBAErD,IAAI,MAAM,EAAE;4BACV,MAAM,IAAA,gCAAsB,EAAC,MAAM,EAAE,MAAM,CAAC,CAAC;yBAC9C;6BAAM;4BACL,MAAM,IAAA,sBAAY,EAAC,MAAM,CAAC,CAAC;yBAC5B;wBAED,uBAAuB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;qBACtC;iBACF;YACH,CAAC,CAAA,CAAC;YACF,IAAI,MAAM,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChD,UAAU,GAAG,GAAG,EAAE,CAAC,MAAM,IAAI,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC,CAAC;QACjD,CAAC;QACK,uBAAuB;;gBAC3B,MAAM,UAAU,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC,EAAE,uBAAuB,CAAC,MAAM,CAAC,CAAC;gBAErF,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE;oBAClC,MAAM,IAAA,wBAAc,EAAC,SAAS,CAAC,CAAC;iBACjC;YACH,CAAC;SAAA;KACF,CAAC;AACJ,CAAC;AArCD,wDAqCC"}
package/lib/interop.d.ts CHANGED
@@ -3,5 +3,6 @@ export declare function reactivate(moduleName: string, referenceId: string, prop
3
3
  export declare function deactivate(moduleName: string, referenceId: string): any;
4
4
  export declare function loadResource(url: string): Promise<any>;
5
5
  export declare function loadResourceWithSymbol(dllUrl: string, pdbUrl: string): Promise<any>;
6
- export declare function initialize(scriptUrl: string, publicPath: string): Promise<unknown>;
7
- export declare function createBootLoader(scriptUrl: string): () => Promise<unknown>;
6
+ export declare function unloadResource(url: string): Promise<any>;
7
+ export declare function initialize(scriptUrl: string, publicPath: string): Promise<HTMLDivElement>;
8
+ export declare function createBootLoader(scriptUrl: string): () => Promise<HTMLDivElement>;
package/lib/interop.js CHANGED
@@ -1,10 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createBootLoader = exports.initialize = exports.loadResourceWithSymbol = exports.loadResource = exports.deactivate = exports.reactivate = exports.activate = void 0;
3
+ exports.createBootLoader = exports.initialize = exports.unloadResource = exports.loadResourceWithSymbol = exports.loadResource = exports.deactivate = exports.reactivate = exports.activate = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const events_1 = require("./events");
6
6
  const coreLib = 'Piral.Blazor.Core';
7
7
  function createBlazorStarter(publicPath) {
8
+ const root = document.body.appendChild(document.createElement('div'));
9
+ root.style.display = 'none';
10
+ root.id = 'blazor-root';
8
11
  if (publicPath) {
9
12
  const baseElement = document.head.querySelector('base') || document.head.appendChild(document.createElement('base'));
10
13
  const originalBase = baseElement.href;
@@ -13,10 +16,11 @@ function createBlazorStarter(publicPath) {
13
16
  window.Blazor._internal.navigationManager.getBaseURI = () => originalBase;
14
17
  return window.Blazor.start().then(() => {
15
18
  baseElement.href = originalBase;
19
+ return root;
16
20
  });
17
21
  };
18
22
  }
19
- return () => window.Blazor.start();
23
+ return () => window.Blazor.start().then(() => root);
20
24
  }
21
25
  function computePath() {
22
26
  try {
@@ -57,6 +61,12 @@ function loadResourceWithSymbol(dllUrl, pdbUrl) {
57
61
  });
58
62
  }
59
63
  exports.loadResourceWithSymbol = loadResourceWithSymbol;
64
+ function unloadResource(url) {
65
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
66
+ return window.DotNet.invokeMethodAsync(coreLib, 'UnloadComponentsFromLibrary', url);
67
+ });
68
+ }
69
+ exports.unloadResource = unloadResource;
60
70
  function initialize(scriptUrl, publicPath) {
61
71
  return new Promise((resolve, reject) => {
62
72
  const startBlazor = createBlazorStarter(publicPath);
@@ -77,7 +87,12 @@ function initialize(scriptUrl, publicPath) {
77
87
  exports.initialize = initialize;
78
88
  function createBootLoader(scriptUrl) {
79
89
  const publicPath = computePath();
80
- return () => initialize(scriptUrl, publicPath);
90
+ return () => {
91
+ if (typeof window.$blazorLoader === 'undefined') {
92
+ window.$blazorLoader = initialize(scriptUrl, publicPath);
93
+ }
94
+ return window.$blazorLoader;
95
+ };
81
96
  }
82
97
  exports.createBootLoader = createBootLoader;
83
98
  //# sourceMappingURL=interop.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"interop.js","sourceRoot":"","sources":["../src/interop.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"interop.js","sourceRoot":"","sources":["../src/interop.ts"],"names":[],"mappings":"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"}
package/lib/types.d.ts CHANGED
@@ -3,6 +3,7 @@ declare global {
3
3
  interface Window {
4
4
  Blazor: any;
5
5
  DotNet: any;
6
+ $blazorLoader: Promise<HTMLDivElement>;
6
7
  }
7
8
  }
8
9
  declare module 'piral-core/lib/types/custom' {
@@ -69,4 +70,8 @@ export interface PiletBlazorApi {
69
70
  * @param options The options for the Blazor components.
70
71
  */
71
72
  defineBlazorOptions(options: BlazorOptions): void;
73
+ /**
74
+ * Releases all defined blazor references from the current pilet.
75
+ */
76
+ releaseBlazorReferences(): void;
72
77
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "piral-blazor",
3
- "version": "0.15.0-alpha.4122",
3
+ "version": "0.15.0-alpha.4284",
4
4
  "description": "Plugin for integrating Blazor components in Piral.",
5
5
  "keywords": [
6
6
  "piral",
@@ -29,11 +29,11 @@
29
29
  "./convert": {
30
30
  "import": "./convert.js"
31
31
  },
32
- "./esm/": {
33
- "import": "./esm/"
32
+ "./esm/*": {
33
+ "import": "./esm/*"
34
34
  },
35
- "./lib/": {
36
- "require": "./lib/"
35
+ "./lib/*": {
36
+ "require": "./lib/*"
37
37
  },
38
38
  "./package.json": "./package.json"
39
39
  },
@@ -63,10 +63,10 @@
63
63
  "test": "echo \"Error: run tests from root\" && exit 1"
64
64
  },
65
65
  "devDependencies": {
66
- "piral-core": "0.15.0-alpha.4122"
66
+ "piral-core": "0.15.0-alpha.4284"
67
67
  },
68
68
  "peerDependencies": {
69
69
  "blazor": "*"
70
70
  },
71
- "gitHead": "fa0957fe7dedebbbd97a530e518c1a2b7754d475"
71
+ "gitHead": "c48d6a2c320241d04e3c9c4c4edb423345003587"
72
72
  }
package/src/converter.ts CHANGED
@@ -4,6 +4,8 @@ import { activate, deactivate, createBootLoader, reactivate } from './interop';
4
4
  import { BlazorOptions } from './types';
5
5
  import bootConfig from '../infra.codegen';
6
6
 
7
+ const noop = () => {};
8
+
7
9
  const mediaRules = [
8
10
  { attribute: 'src', selector: 'img, embed, video > source, video > track, audio > source' },
9
11
  { attribute: 'srcset', selector: 'picture > source' },
@@ -29,16 +31,21 @@ interface BlazorLocals {
29
31
  referenceId: string;
30
32
  node: HTMLElement;
31
33
  dispose(): void;
34
+ update(root: HTMLElement): void;
32
35
  state: 'fresh' | 'mounted' | 'removed';
33
36
  }
34
37
 
35
38
  export function createConverter(lazy: boolean) {
36
39
  const boot = createBootLoader(bootConfig);
37
- const root = document.body.appendChild(document.createElement('div'));
38
40
  let loader = !lazy && boot();
39
41
 
40
- root.style.display = 'none';
41
- root.id = 'blazor-root';
42
+ const enqueueChange = (locals: BlazorLocals, update: (root: HTMLDivElement) => void) => {
43
+ if (locals.state === 'mounted') {
44
+ loader.then(update);
45
+ } else {
46
+ locals.update = update;
47
+ }
48
+ };
42
49
 
43
50
  const convert = <TProps extends BaseComponentProps>(
44
51
  moduleName: string,
@@ -53,6 +60,7 @@ export function createConverter(lazy: boolean) {
53
60
  addGlobalEventListeners(el);
54
61
 
55
62
  locals.state = 'fresh';
63
+ locals.update = noop;
56
64
  locals.dispose = attachEvents(
57
65
  el,
58
66
  (ev) => data.piral.renderHtmlExtension(ev.detail.target, ev.detail.props),
@@ -63,32 +71,38 @@ export function createConverter(lazy: boolean) {
63
71
  );
64
72
 
65
73
  (loader || (loader = boot()))
66
- .then(dependency)
67
- .then(() => activate(moduleName, props))
68
- .then((refId) => {
69
- if (locals.state === 'fresh') {
70
- locals.id = refId;
71
- locals.node = root.querySelector(`#${locals.id} > div`);
72
- project(locals.node, el, options);
73
- locals.state = 'mounted';
74
- locals.referenceId = refId;
75
- }
76
- })
74
+ .then((root) =>
75
+ dependency()
76
+ .then(() => activate(moduleName, props))
77
+ .then((refId) => {
78
+ if (locals.state === 'fresh') {
79
+ locals.id = refId;
80
+ locals.node = root.querySelector(`#${locals.id} > div`);
81
+ project(locals.node, el, options);
82
+ locals.state = 'mounted';
83
+ locals.referenceId = refId;
84
+ locals.update(root);
85
+ locals.update = noop;
86
+ }
87
+ }),
88
+ )
77
89
  .catch((err) => console.error(err));
78
90
  },
79
91
  update(el, data, ctx, locals: BlazorLocals) {
80
- const props = { ...args, ...data };
81
- reactivate(moduleName, locals.referenceId, props);
92
+ enqueueChange(locals, () => {
93
+ const props = { ...args, ...data };
94
+ reactivate(moduleName, locals.referenceId, props);
95
+ });
82
96
  },
83
97
  unmount(el, locals: BlazorLocals) {
84
98
  removeGlobalEventListeners(el);
85
99
  el.removeAttribute('data-blazor-pilet-root');
86
100
  locals.dispose();
87
101
 
88
- if (locals.state === 'mounted') {
102
+ enqueueChange(locals, (root) => {
89
103
  root.querySelector(`#${locals.id}`).appendChild(locals.node);
90
104
  deactivate(moduleName, locals.referenceId);
91
- }
105
+ });
92
106
 
93
107
  el.innerHTML = '';
94
108
  locals.state = 'removed';
package/src/create.ts CHANGED
@@ -34,6 +34,7 @@ export function createBlazorApi(config: BlazorConfig = {}): PiralPlugin<PiletBla
34
34
  defineBlazorOptions(blazorOptions: BlazorOptions) {
35
35
  options = blazorOptions;
36
36
  },
37
+ releaseBlazorReferences: loader.releaseBlazorReferences,
37
38
  fromBlazor(moduleName, args) {
38
39
  return {
39
40
  type: 'blazor',
@@ -1,7 +1,8 @@
1
- import { loadResource, loadResourceWithSymbol } from './interop';
1
+ import { loadResource, loadResourceWithSymbol, unloadResource } from './interop';
2
2
  import type { createConverter } from './converter';
3
3
 
4
4
  export function createDependencyLoader(convert: ReturnType<typeof createConverter>, lazy = true) {
5
+ const definedBlazorReferences: Array<string> = [];
5
6
  let dependency: () => Promise<any>;
6
7
 
7
8
  return {
@@ -21,11 +22,20 @@ export function createDependencyLoader(convert: ReturnType<typeof createConverte
21
22
  } else {
22
23
  await loadResource(dllUrl);
23
24
  }
25
+
26
+ definedBlazorReferences.push(dllUrl);
24
27
  }
25
28
  }
26
29
  };
27
30
  let result = !lazy && convert.loader.then(load);
28
31
  dependency = () => result || (result = load());
29
32
  },
33
+ async releaseBlazorReferences() {
34
+ const references = definedBlazorReferences.splice(0, definedBlazorReferences.length);
35
+
36
+ for (const reference of references) {
37
+ await unloadResource(reference);
38
+ }
39
+ },
30
40
  };
31
41
  }
package/src/interop.ts CHANGED
@@ -2,7 +2,12 @@ import { emitRenderEvent, emitNavigateEvent } from './events';
2
2
 
3
3
  const coreLib = 'Piral.Blazor.Core';
4
4
 
5
- function createBlazorStarter(publicPath: string) {
5
+ function createBlazorStarter(publicPath: string): () => Promise<HTMLDivElement> {
6
+ const root = document.body.appendChild(document.createElement('div'));
7
+
8
+ root.style.display = 'none';
9
+ root.id = 'blazor-root';
10
+
6
11
  if (publicPath) {
7
12
  const baseElement =
8
13
  document.head.querySelector('base') || document.head.appendChild(document.createElement('base'));
@@ -12,11 +17,12 @@ function createBlazorStarter(publicPath: string) {
12
17
  window.Blazor._internal.navigationManager.getBaseURI = () => originalBase;
13
18
  return window.Blazor.start().then(() => {
14
19
  baseElement.href = originalBase;
20
+ return root;
15
21
  });
16
22
  };
17
23
  }
18
24
 
19
- return () => window.Blazor.start();
25
+ return () => window.Blazor.start().then(() => root);
20
26
  }
21
27
 
22
28
  function computePath() {
@@ -55,8 +61,12 @@ export async function loadResourceWithSymbol(dllUrl: string, pdbUrl: string) {
55
61
  return window.DotNet.invokeMethodAsync(coreLib, 'LoadComponentsWithSymbolsFromLibrary', dllUrl, pdbUrl);
56
62
  }
57
63
 
64
+ export async function unloadResource(url: string) {
65
+ return window.DotNet.invokeMethodAsync(coreLib, 'UnloadComponentsFromLibrary', url);
66
+ }
67
+
58
68
  export function initialize(scriptUrl: string, publicPath: string) {
59
- return new Promise((resolve, reject) => {
69
+ return new Promise<HTMLDivElement>((resolve, reject) => {
60
70
  const startBlazor = createBlazorStarter(publicPath);
61
71
  const script = document.createElement('script');
62
72
  script.src = scriptUrl;
@@ -78,5 +88,11 @@ export function initialize(scriptUrl: string, publicPath: string) {
78
88
 
79
89
  export function createBootLoader(scriptUrl: string) {
80
90
  const publicPath = computePath();
81
- return () => initialize(scriptUrl, publicPath);
91
+ return () => {
92
+ if (typeof window.$blazorLoader === 'undefined') {
93
+ window.$blazorLoader = initialize(scriptUrl, publicPath);
94
+ }
95
+
96
+ return window.$blazorLoader;
97
+ };
82
98
  }
package/src/types.ts CHANGED
@@ -4,6 +4,7 @@ declare global {
4
4
  interface Window {
5
5
  Blazor: any;
6
6
  DotNet: any;
7
+ $blazorLoader: Promise<HTMLDivElement>;
7
8
  }
8
9
  }
9
10
 
@@ -74,4 +75,8 @@ export interface PiletBlazorApi {
74
75
  * @param options The options for the Blazor components.
75
76
  */
76
77
  defineBlazorOptions(options: BlazorOptions): void;
78
+ /**
79
+ * Releases all defined blazor references from the current pilet.
80
+ */
81
+ releaseBlazorReferences(): void;
77
82
  }