piral-blazor 1.0.0-pre.2296 → 1.0.1-beta.5640

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 (53) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +51 -9
  3. package/convert.d.ts +13 -8
  4. package/convert.js +17 -12
  5. package/esm/converter.d.ts +10 -4
  6. package/esm/converter.js +164 -50
  7. package/esm/converter.js.map +1 -1
  8. package/esm/create.d.ts +21 -1
  9. package/esm/create.js +29 -15
  10. package/esm/create.js.map +1 -1
  11. package/esm/dependencies.d.ts +6 -3
  12. package/esm/dependencies.js +104 -14
  13. package/esm/dependencies.js.map +1 -1
  14. package/esm/events.d.ts +6 -0
  15. package/esm/events.js +145 -0
  16. package/esm/events.js.map +1 -0
  17. package/esm/interop.d.ts +29 -12
  18. package/esm/interop.js +181 -119
  19. package/esm/interop.js.map +1 -1
  20. package/esm/navigation.d.ts +2 -0
  21. package/esm/navigation.js +30 -0
  22. package/esm/navigation.js.map +1 -0
  23. package/esm/types.d.ts +97 -4
  24. package/infra.codegen +32 -23
  25. package/lib/converter.d.ts +10 -4
  26. package/lib/converter.js +164 -50
  27. package/lib/converter.js.map +1 -1
  28. package/lib/create.d.ts +21 -1
  29. package/lib/create.js +31 -17
  30. package/lib/create.js.map +1 -1
  31. package/lib/dependencies.d.ts +6 -3
  32. package/lib/dependencies.js +104 -14
  33. package/lib/dependencies.js.map +1 -1
  34. package/lib/events.d.ts +6 -0
  35. package/lib/events.js +154 -0
  36. package/lib/events.js.map +1 -0
  37. package/lib/index.js +1 -1
  38. package/lib/interop.d.ts +29 -12
  39. package/lib/interop.js +196 -124
  40. package/lib/interop.js.map +1 -1
  41. package/lib/navigation.d.ts +2 -0
  42. package/lib/navigation.js +35 -0
  43. package/lib/navigation.js.map +1 -0
  44. package/lib/types.d.ts +97 -4
  45. package/package.json +25 -9
  46. package/src/converter.ts +233 -63
  47. package/src/create.ts +53 -9
  48. package/src/dependencies.ts +122 -14
  49. package/src/events.ts +174 -0
  50. package/src/interop.ts +228 -117
  51. package/src/navigation.ts +36 -0
  52. package/src/types.ts +115 -4
  53. package/convert.ts +0 -17
package/esm/interop.js CHANGED
@@ -1,143 +1,205 @@
1
- export var eventNames = {
2
- render: 'render-blazor-extension',
3
- navigate: 'navigate-blazor',
4
- };
5
- var coreLib = 'Piral.Blazor.Core';
6
- var eventParents = [];
7
- var blazorRootId = 'blazor-root';
8
- var globalEventNames = [
9
- 'abort',
10
- 'blur',
11
- 'change',
12
- 'error',
13
- 'focus',
14
- 'load',
15
- 'loadend',
16
- 'loadstart',
17
- 'mouseenter',
18
- 'mouseleave',
19
- 'progress',
20
- 'reset',
21
- 'scroll',
22
- 'submit',
23
- 'unload',
24
- 'DOMNodeInsertedIntoDocument',
25
- 'DOMNodeRemovedFromDocument',
26
- 'click',
27
- 'dblclick',
28
- 'mousedown',
29
- 'mousemove',
30
- 'mouseup',
31
- ];
32
- function dispatchToRoot(event) {
33
- var _a;
34
- (_a = document.getElementById(blazorRootId)) === null || _a === void 0 ? void 0 : _a.dispatchEvent(new Event(event.type, event));
35
- }
36
- function isRooted(target) {
37
- var parent = target.parentElement;
38
- while (parent) {
39
- if (parent.id === blazorRootId) {
40
- return true;
1
+ import { emitRenderEvent, emitNavigateEvent, emitPiralEvent } from './events';
2
+ const wasmLib = 'Microsoft.AspNetCore.Components.WebAssembly';
3
+ const coreLib = 'Piral.Blazor.Core';
4
+ function isDotNet6OrBelow() {
5
+ return typeof window.Blazor._internal.NavigationLock === 'undefined';
6
+ }
7
+ function createBase() {
8
+ // Nothing found, we need to guess
9
+ const el = document.createElement('base');
10
+ let baseUrl = el.href;
11
+ // The main app is served by a script - but we don't know which one
12
+ // hence we just iterate over all the local ones and use the script
13
+ // that is served from the "shortest" route - should work almost
14
+ // always and if not - one can always explicitely set a <base> node
15
+ for (let i = document.scripts.length; i--;) {
16
+ const s = document.scripts[i];
17
+ const src = s.getAttribute('src');
18
+ if (src && src.startsWith('/')) {
19
+ const segEnd = src.lastIndexOf('/');
20
+ const newUrl = src.substring(0, segEnd + 1);
21
+ if (baseUrl.split('/').length > newUrl.split('/').length) {
22
+ baseUrl = newUrl;
23
+ }
41
24
  }
42
- parent = parent.parentElement;
43
25
  }
44
- return false;
26
+ el.href = baseUrl;
27
+ return document.head.appendChild(el);
45
28
  }
46
- function findTarget(target) {
47
- if (target === void 0) { target = document.body; }
48
- if (eventParents.length === 0) {
49
- return target;
29
+ function prepareForStartup() {
30
+ const originalApplyHotReload = window.Blazor._internal.applyHotReload;
31
+ const queue = [];
32
+ const applyChanges = (api) => {
33
+ const pilet = api.meta;
34
+ if (pilet.config && pilet.config.blazorHotReload) {
35
+ for (const item of queue.splice(0, queue.length)) {
36
+ item();
37
+ }
38
+ window.Blazor._internal.applyHotReload = originalApplyHotReload;
39
+ }
40
+ };
41
+ window.Blazor._internal.applyHotReload = function (...args) {
42
+ queue.push(() => originalApplyHotReload.apply(this, args));
43
+ };
44
+ return getCapabilities().then((capabilities) => ({
45
+ capabilities,
46
+ applyChanges,
47
+ }));
48
+ }
49
+ function createBlazorStarter(publicPath) {
50
+ const root = document.body.appendChild(document.createElement('div'));
51
+ root.style.display = 'none';
52
+ root.id = 'blazor-root';
53
+ if (publicPath) {
54
+ const baseElement = document.head.querySelector('base') || createBase();
55
+ const originalBase = baseElement.href;
56
+ baseElement.href = publicPath;
57
+ return (opts) => {
58
+ const navManager = window.Blazor._internal.navigationManager;
59
+ //Overwrite to get NavigationManager in Blazor working, see https://github.com/smapiot/Piral.Blazor/issues/89
60
+ navManager.navigateTo = (route, opts) => {
61
+ if (opts.forceLoad) {
62
+ location.href = route;
63
+ return;
64
+ }
65
+ if (route.startsWith(location.origin) && '') {
66
+ // normalize "local" absolute URLs
67
+ route = route.substring(location.origin.length);
68
+ }
69
+ else if (/^https?:\/\//.test(route)) {
70
+ // prevent absolute URLs to be a standard navigation
71
+ location.href = route;
72
+ return;
73
+ }
74
+ window.Blazor.emitNavigateEvent(undefined, route, opts.replaceHistoryEntry, opts.historyEntryState);
75
+ };
76
+ navManager.getBaseURI = () => originalBase;
77
+ return window.Blazor.start(opts)
78
+ .then(prepareForStartup)
79
+ .then(({ capabilities, applyChanges }) => {
80
+ baseElement.href = originalBase;
81
+ return [root, capabilities, applyChanges];
82
+ });
83
+ };
50
84
  }
51
- else if (target === document.body) {
52
- return eventParents[0];
85
+ return (opts) => window.Blazor.start(opts)
86
+ .then(prepareForStartup)
87
+ .then(({ capabilities, applyChanges }) => [root, capabilities, applyChanges]);
88
+ }
89
+ function computePath() {
90
+ try {
91
+ throw new Error();
53
92
  }
54
- else {
55
- return target;
93
+ catch (t) {
94
+ const e = ('' + t.stack).match(/(https?|file|ftp|chrome-extension|moz-extension):\/\/[^)\n]+/g);
95
+ if (e) {
96
+ return e[0].replace(/^((?:https?|file|ftp|chrome-extension|moz-extension):\/\/.+)\/[^\/]+$/, '$1') + '/';
97
+ }
56
98
  }
99
+ return '/';
57
100
  }
58
- function emitRenderEvent(source, name) {
59
- var target = findTarget(source);
60
- var eventInit = {
61
- bubbles: true,
62
- detail: {
63
- target: target,
64
- props: {
65
- name: name,
66
- },
67
- },
68
- };
69
- var delayEmit = function () {
70
- return requestAnimationFrame(function () {
71
- if (!isRooted(target)) {
72
- target.dispatchEvent(new CustomEvent(eventNames.render, eventInit));
73
- }
74
- else {
75
- delayEmit();
76
- }
77
- });
78
- };
79
- delayEmit();
80
- }
81
- function emitNavigateEvent(source, to, replace, state) {
82
- if (replace === void 0) { replace = false; }
83
- findTarget(source).dispatchEvent(new CustomEvent(eventNames.navigate, {
84
- bubbles: true,
85
- detail: {
86
- to: to,
87
- replace: replace,
88
- state: state,
89
- },
90
- }));
101
+ function addScript(url) {
102
+ return new Promise((resolve, reject) => {
103
+ const script = document.createElement('script');
104
+ script.src = url;
105
+ script.onerror = () => reject();
106
+ script.onload = () => resolve();
107
+ document.body.appendChild(script);
108
+ });
109
+ }
110
+ export function processEvent(type, args) {
111
+ return window.DotNet.invokeMethodAsync(coreLib, 'ProcessEvent', type, args);
91
112
  }
92
- export function addGlobalEventListeners(el) {
93
- globalEventNames.forEach(function (eventName) { return el.addEventListener(eventName, dispatchToRoot); });
113
+ export function setLogLevel(logLevel) {
114
+ return window.DotNet.invokeMethodAsync(coreLib, 'SetLogLevel', logLevel);
94
115
  }
95
- export function removeGlobalEventListeners(el) {
96
- globalEventNames.forEach(function (eventName) { return el.removeEventListener(eventName, dispatchToRoot); });
116
+ export function createElement(moduleName, props) {
117
+ return window.DotNet.invokeMethodAsync(coreLib, 'CreateElement', moduleName, props);
118
+ }
119
+ export function updateElement(referenceId, props) {
120
+ return window.DotNet.invokeMethodAsync(coreLib, 'UpdateElement', referenceId, props);
121
+ }
122
+ export function destroyElement(referenceId) {
123
+ return window.DotNet.invokeMethodAsync(coreLib, 'DestroyElement', referenceId);
97
124
  }
98
125
  export function activate(moduleName, props) {
99
- return window['DotNet'].invokeMethodAsync(coreLib, 'Activate', moduleName, props);
126
+ return window.DotNet.invokeMethodAsync(coreLib, 'Activate', moduleName, props);
127
+ }
128
+ export function reactivate(moduleName, referenceId, props) {
129
+ return window.DotNet.invokeMethodAsync(coreLib, 'Reactivate', moduleName, referenceId, props).catch(() => {
130
+ // Apparently an older version of Piral.Blazor, which does not support this
131
+ // discard this error silently (in the future we may print warnings here)
132
+ });
100
133
  }
101
134
  export function deactivate(moduleName, referenceId) {
102
- return window['DotNet'].invokeMethodAsync(coreLib, 'Deactivate', moduleName, referenceId);
103
- }
104
- export function addReference(blob) {
105
- return new Promise(function (resolve) {
106
- var reader = new FileReader();
107
- reader.onload = function () {
108
- var data = reader.result.toString().replace(/^data:.+;base64,/, '');
109
- window['DotNet'].invokeMethodAsync(coreLib, 'LoadComponentsFromLibrary', data).then(resolve);
110
- };
111
- reader.readAsDataURL(blob);
135
+ return window.DotNet.invokeMethodAsync(coreLib, 'Deactivate', moduleName, referenceId);
136
+ }
137
+ export function callNotifyLocationChanged(url, replace, state) {
138
+ if (isDotNet6OrBelow()) {
139
+ return window.DotNet.invokeMethodAsync(wasmLib, 'NotifyLocationChanged', url, replace);
140
+ }
141
+ else {
142
+ if (state !== undefined && typeof state !== 'string') {
143
+ state = JSON.stringify(state);
144
+ }
145
+ return window.DotNet.invokeMethodAsync(wasmLib, 'NotifyLocationChanged', url, state, replace);
146
+ }
147
+ }
148
+ export function setLanguage(language) {
149
+ return window.DotNet.invokeMethodAsync(coreLib, 'SetLanguage', language);
150
+ }
151
+ export function getCapabilities() {
152
+ return window.DotNet.invokeMethodAsync(coreLib, 'GetCapabilities').catch(() => {
153
+ // Apparently an older version of Piral.Blazor, which does not support this
154
+ // discard this error silently (in the future we may print warnings here)
155
+ return [];
112
156
  });
113
157
  }
114
- export function removeReference(name) {
115
- return window['DotNet'].invokeMethodAsync(coreLib, 'UnloadComponentsFromLibrary', name);
116
- }
117
- export function attachEvents(host, render, navigate) {
118
- eventParents.push(host);
119
- host.addEventListener(eventNames.render, render, false);
120
- host.addEventListener(eventNames.navigate, navigate, false);
121
- return function () {
122
- eventParents.splice(eventParents.indexOf(host), 1);
123
- host.removeEventListener(eventNames.render, render, false);
124
- host.removeEventListener(eventNames.navigate, navigate, false);
125
- };
158
+ export function loadResource(url) {
159
+ return window.DotNet.invokeMethodAsync(coreLib, 'LoadComponentsFromLibrary', url);
160
+ }
161
+ export function loadResourceWithSymbol(dllUrl, pdbUrl) {
162
+ return window.DotNet.invokeMethodAsync(coreLib, 'LoadComponentsWithSymbolsFromLibrary', dllUrl, pdbUrl);
163
+ }
164
+ export function unloadResource(url) {
165
+ return window.DotNet.invokeMethodAsync(coreLib, 'UnloadComponentsFromLibrary', url);
166
+ }
167
+ export function loadBlazorPilet(id, data) {
168
+ return window.DotNet.invokeMethodAsync(coreLib, 'LoadPilet', id, data);
126
169
  }
127
- export function initialize(scriptUrl) {
128
- return new Promise(function (resolve, reject) {
129
- var script = document.createElement('script');
170
+ export function unloadBlazorPilet(id) {
171
+ return window.DotNet.invokeMethodAsync(coreLib, 'UnloadPilet', id);
172
+ }
173
+ export function initialize(scriptUrl, publicPath, opts = {}) {
174
+ if (typeof opts.loadBootResource !== 'function') {
175
+ opts.loadBootResource = (type, name, url) => type === 'dotnetjs' ? url : fetch(url, { method: 'GET', cache: 'no-cache' });
176
+ }
177
+ return new Promise((resolve, reject) => {
178
+ const startBlazor = createBlazorStarter(publicPath);
179
+ const script = document.createElement('script');
130
180
  script.src = scriptUrl;
131
181
  script.setAttribute('autostart', 'false');
132
- script.onerror = function () { return reject(); };
133
- script.onload = function () {
134
- Object.assign(window['Blazor'], {
135
- emitRenderEvent: emitRenderEvent,
136
- emitNavigateEvent: emitNavigateEvent,
182
+ script.onerror = () => reject();
183
+ script.onload = () => {
184
+ Object.assign(window.Blazor, {
185
+ emitRenderEvent,
186
+ emitNavigateEvent,
187
+ emitPiralEvent,
137
188
  });
138
- window['Blazor'].start().then(resolve);
189
+ startBlazor(opts).then(resolve);
139
190
  };
140
191
  document.body.appendChild(script);
141
192
  });
142
193
  }
194
+ export function createBootLoader(scriptUrl, extraScriptUrls) {
195
+ const publicPath = computePath();
196
+ return (opts) => {
197
+ if (typeof window.$blazorLoader === 'undefined') {
198
+ window.dispatchEvent(new CustomEvent('loading-blazor-core'));
199
+ // we load all satellite scripts before we initialize blazor
200
+ window.$blazorLoader = Promise.all(extraScriptUrls.map(addScript)).then(() => initialize(scriptUrl, publicPath, opts));
201
+ }
202
+ return window.$blazorLoader;
203
+ };
204
+ }
143
205
  //# 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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"}
@@ -0,0 +1,2 @@
1
+ export declare function isInternalNavigation(event: MouseEvent): boolean;
2
+ export declare function performInternalNavigation(event: MouseEvent): void;
@@ -0,0 +1,30 @@
1
+ function findClosestAncestor(element, tagName) {
2
+ // tslint:disable-next-line:no-null-keyword
3
+ return !element ? null : element.tagName === tagName ? element : findClosestAncestor(element.parentElement, tagName);
4
+ }
5
+ function getAnchorTarget(event) {
6
+ return findClosestAncestor(event.target, 'A');
7
+ }
8
+ function isWithinBaseUriSpace(href) {
9
+ const baseURI = document.baseURI;
10
+ const baseUriUntilLastSlash = baseURI.substr(0, baseURI.lastIndexOf('/') + 1);
11
+ return href.startsWith(baseUriUntilLastSlash);
12
+ }
13
+ function eventHasSpecialKey(event) {
14
+ return event.ctrlKey || event.shiftKey || event.altKey || event.metaKey;
15
+ }
16
+ export function isInternalNavigation(event) {
17
+ const anchorTarget = getAnchorTarget(event);
18
+ return (event.type === 'click' &&
19
+ event.button === 0 &&
20
+ !eventHasSpecialKey(event) &&
21
+ (anchorTarget === null || anchorTarget === void 0 ? void 0 : anchorTarget.hasAttribute('href')) &&
22
+ isWithinBaseUriSpace(anchorTarget.href));
23
+ }
24
+ export function performInternalNavigation(event) {
25
+ const anchorTarget = getAnchorTarget(event);
26
+ event.preventDefault();
27
+ const to = anchorTarget.getAttribute('href');
28
+ window.Blazor.emitNavigateEvent(anchorTarget, to);
29
+ }
30
+ //# sourceMappingURL=navigation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"navigation.js","sourceRoot":"","sources":["../src/navigation.ts"],"names":[],"mappings":"AAAA,SAAS,mBAAmB,CAAC,OAAuB,EAAE,OAAe;IACnE,2CAA2C;IAC3C,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;AACvH,CAAC;AAED,SAAS,eAAe,CAAC,KAAiB;IACxC,OAAO,mBAAmB,CAAC,KAAK,CAAC,MAAwB,EAAE,GAAG,CAA6B,CAAC;AAC9F,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAY;IACxC,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;IACjC,MAAM,qBAAqB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9E,OAAO,IAAI,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAiB;IAC3C,OAAO,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC;AAC1E,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KAAiB;IACpD,MAAM,YAAY,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IAC5C,OAAO,CACL,KAAK,CAAC,IAAI,KAAK,OAAO;QACtB,KAAK,CAAC,MAAM,KAAK,CAAC;QAClB,CAAC,kBAAkB,CAAC,KAAK,CAAC;SAC1B,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,YAAY,CAAC,MAAM,CAAC,CAAA;QAClC,oBAAoB,CAAC,YAAY,CAAC,IAAI,CAAC,CACxC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,KAAiB;IACzD,MAAM,YAAY,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IAC5C,KAAK,CAAC,cAAc,EAAE,CAAC;IACvB,MAAM,EAAE,GAAG,YAAY,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAC7C,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;AACpD,CAAC"}
package/esm/types.d.ts CHANGED
@@ -1,4 +1,60 @@
1
- import type { ForeignComponent } from 'piral-core';
1
+ import type { ForeignComponent, PiletApi } from 'piral-core';
2
+ export type BlazorRootConfig = [
3
+ root: HTMLDivElement,
4
+ capabilities: Array<string>,
5
+ applyChanges: (pilet: PiletApi) => void
6
+ ];
7
+ export interface BlazorDependencyLoader {
8
+ (config: BlazorRootConfig): Promise<void>;
9
+ }
10
+ export type WebAssemblyBootResourceType = 'assembly' | 'pdb' | 'dotnetjs' | 'dotnetwasm' | 'globalization' | 'manifest';
11
+ export interface WebAssemblyStartOptions {
12
+ /**
13
+ * Overrides the built-in boot resource loading mechanism so that boot resources can be fetched
14
+ * from a custom source, such as an external CDN.
15
+ * @param type The type of the resource to be loaded.
16
+ * @param name The name of the resource to be loaded.
17
+ * @param defaultUri The URI from which the framework would fetch the resource by default. The URI may be relative or absolute.
18
+ * @param integrity The integrity string representing the expected content in the response.
19
+ * @returns A URI string or a Response promise to override the loading process, or null/undefined to allow the default loading behavior.
20
+ */
21
+ loadBootResource?(type: WebAssemblyBootResourceType, name: string, defaultUri: string, integrity: string): string | Promise<Response> | null | undefined;
22
+ /**
23
+ * Override built-in environment setting on start.
24
+ */
25
+ environment?: string;
26
+ /**
27
+ * Gets the application culture. This is a name specified in the BCP 47 format. See https://tools.ietf.org/html/bcp47
28
+ */
29
+ applicationCulture?: string;
30
+ }
31
+ declare global {
32
+ interface Window {
33
+ Blazor: {
34
+ start(options?: Partial<WebAssemblyStartOptions>): Promise<void>;
35
+ emitPiralEvent(type: string, args: any): void;
36
+ emitRenderEvent(source: HTMLElement, name: string, params: any, sourceRef: any, fallbackComponent: string | null): void;
37
+ emitNavigateEvent(target: Element, path: string, replace?: boolean, state?: any): void;
38
+ _internal: {
39
+ navigationManager: any;
40
+ applyHotReload: any;
41
+ NavigationLock: any;
42
+ };
43
+ };
44
+ DotNet: any;
45
+ $blazorLoader: Promise<BlazorRootConfig>;
46
+ $blazorDependencyPrios: Array<{
47
+ prio: number;
48
+ load(): Promise<void>;
49
+ }>;
50
+ $blazorDependencies: Array<{
51
+ name: string;
52
+ url: string;
53
+ count: number;
54
+ promise: Promise<void>;
55
+ }>;
56
+ }
57
+ }
2
58
  declare module 'piral-core/lib/types/custom' {
3
59
  interface PiletCustomApi extends PiletBlazorApi {
4
60
  }
@@ -6,6 +62,24 @@ declare module 'piral-core/lib/types/custom' {
6
62
  blazor(component: BlazorComponent): ForeignComponent<TProps>;
7
63
  }
8
64
  }
65
+ export declare const enum BlazorLogLevel {
66
+ trace = 0,
67
+ debug = 1,
68
+ info = 2,
69
+ warn = 3,
70
+ error = 4,
71
+ critical = 5,
72
+ none = 6
73
+ }
74
+ /**
75
+ * Additional options for the Blazor component
76
+ */
77
+ export interface BlazorOptions {
78
+ /**
79
+ * The root path where resources are located.
80
+ */
81
+ resourcePathRoot?: string;
82
+ }
9
83
  export interface BlazorComponent {
10
84
  /**
11
85
  * The name of the Blazor module to render.
@@ -19,26 +93,45 @@ export interface BlazorComponent {
19
93
  * An optional dependency that needs to load before
20
94
  * the component can be properly displayed.
21
95
  */
22
- dependency?: () => Promise<void>;
96
+ dependency?: BlazorDependencyLoader;
23
97
  /**
24
98
  * The type of the Blazor component.
25
99
  */
26
100
  type: 'blazor';
101
+ /**
102
+ * Additional options for the Blazor component.
103
+ */
104
+ options?: BlazorOptions;
27
105
  }
28
106
  /**
29
107
  * Defines the provided set of Blazor Pilet API extensions.
30
108
  */
31
109
  export interface PiletBlazorApi {
32
110
  /**
33
- * Defines the additional libraries to Blazor via their URLs.
111
+ * Defines the additional libraries (and their symbols) to Blazor via
112
+ * their URLs.
113
+ *
34
114
  * @param referenceUrls The URLs pointing to the different DLLs to include.
115
+ * @param satellites The URLs of the potential satellite DLLs to include.
116
+ * @param prio The loading priority of the DLLs. Higher numbers will always be loaded before lower numbers.
35
117
  */
36
- defineBlazorReferences(referenceUrls: Array<string>): void;
118
+ defineBlazorReferences(referenceUrls: Array<string>, satellites?: Record<string, Array<string>>, prio?: number): void;
37
119
  /**
38
120
  * Wraps a Blazor module for use in Piral.
121
+ *
39
122
  * @param moduleName The name of the exposed Blazor component.
40
123
  * @param args The optional props to use as arguments for the Blazor component.
41
124
  * @returns The Piral Blazor component.
42
125
  */
43
126
  fromBlazor(moduleName: string, args?: Record<string, any>): BlazorComponent;
127
+ /**
128
+ * Defines the additional options to be shared by all Blazor components.
129
+ *
130
+ * @param options The options for the Blazor components.
131
+ */
132
+ defineBlazorOptions(options: BlazorOptions): void;
133
+ /**
134
+ * Releases all defined blazor references from the current pilet.
135
+ */
136
+ releaseBlazorReferences(): void;
44
137
  }
package/infra.codegen CHANGED
@@ -1,41 +1,40 @@
1
1
  const fs = require('fs');
2
- const path = require('path');
3
-
4
- function generateModule(scriptUrl) {
5
- return `module.exports = ${JSON.stringify(scriptUrl)};`;
6
- }
2
+ const { join, basename, dirname, resolve } = require('path');
7
3
 
8
4
  function copyFileSync(source, target) {
9
- var targetFile = target;
5
+ let targetFile = target;
10
6
 
11
7
  // If target is a directory, a new file with the same name will be created
12
- if (fs.existsSync(target)) {
13
- if (fs.lstatSync(target).isDirectory()) {
14
- targetFile = path.join(target, path.basename(source));
15
- }
8
+ if (fs.existsSync(target) && fs.lstatSync(target).isDirectory()) {
9
+ targetFile = join(target, basename(source));
16
10
  }
17
11
 
18
12
  fs.writeFileSync(targetFile, fs.readFileSync(source));
19
13
  }
20
14
 
21
15
  function copyFolderRecursiveSync(source, target) {
22
- var files = [];
23
-
24
16
  // Check if folder needs to be created or integrated
25
- var targetFolder = path.join(target, path.basename(source));
17
+ const targetFolder = join(target, basename(source));
18
+
26
19
  if (!fs.existsSync(targetFolder)) {
27
20
  fs.mkdirSync(targetFolder);
28
21
  }
29
22
 
23
+ copyContentRecursiveSync(source, targetFolder);
24
+ }
25
+
26
+ function copyContentRecursiveSync(source, target) {
30
27
  // Copy
31
28
  if (fs.lstatSync(source).isDirectory()) {
32
- files = fs.readdirSync(source);
33
- files.forEach(function (file) {
34
- var curSource = path.join(source, file);
29
+ const files = fs.readdirSync(source);
30
+
31
+ files.forEach((file) => {
32
+ const curSource = join(source, file);
33
+
35
34
  if (fs.lstatSync(curSource).isDirectory()) {
36
- copyFolderRecursiveSync(curSource, targetFolder);
35
+ copyFolderRecursiveSync(curSource, target);
37
36
  } else {
38
- copyFileSync(curSource, targetFolder);
37
+ copyFileSync(curSource, target);
39
38
  }
40
39
  });
41
40
  }
@@ -48,13 +47,23 @@ module.exports = function () {
48
47
 
49
48
  try {
50
49
  const blazorPackagePath = require.resolve('blazor/package.json');
51
- const blazorBaseDir = path.dirname(blazorPackagePath);
52
- const frameworkDir = path.resolve(blazorBaseDir, 'wwwroot', '_framework');
50
+ const releaseType = process.env.NODE_ENV === 'production' ? 'release' : 'debug';
51
+ const { blazorConfig = {} } = require(blazorPackagePath);
52
+ const blazorBaseDir = resolve(dirname(blazorPackagePath), releaseType);
53
+ const wwwRootDir = resolve(blazorBaseDir, 'wwwroot');
54
+ const noMutation = blazorConfig.noMutation || false;
55
+ const satellites = blazorConfig.satellites || [];
56
+ const url = blazorConfig.url || '_framework/blazor.webassembly.js';
57
+ const bootConfig = {
58
+ url,
59
+ satellites,
60
+ noMutation,
61
+ };
53
62
 
54
- copyFolderRecursiveSync(frameworkDir, outDir);
63
+ copyContentRecursiveSync(wwwRootDir, outDir);
55
64
 
56
- return generateModule('_framework/blazor.webassembly.js');
65
+ return `export default (${JSON.stringify(bootConfig)});`;
57
66
  } catch (err) {
58
- throw new Error('The blazor package was not found. Make sure to install it via `npm i blazor`.');
67
+ throw new Error(`The npm package "blazor" was not found. Make sure to install it via "npm i blazor": ${err}`);
59
68
  }
60
69
  };
@@ -1,5 +1,11 @@
1
- import type { ForeignComponent, BaseComponentProps } from 'piral-core';
2
- export declare function createConverter(lazy?: boolean): {
3
- <TProps extends BaseComponentProps>(moduleName: string, dependency: () => Promise<void>, args: Record<string, any>): ForeignComponent<TProps>;
4
- loader: Promise<unknown>;
1
+ import type { BaseComponentProps, ForeignComponent } from 'piral-core';
2
+ import { BlazorDependencyLoader, BlazorLogLevel, BlazorOptions, BlazorRootConfig, WebAssemblyStartOptions } from './types';
3
+ export interface LanguageOptions {
4
+ current: string | undefined;
5
+ onChange(inform: (language: string) => void): void;
6
+ }
7
+ export declare function createConverter(lazy: boolean, opts?: WebAssemblyStartOptions, language?: LanguageOptions, logLevel?: BlazorLogLevel): {
8
+ <TProps extends BaseComponentProps>(moduleName: string, dependency: BlazorDependencyLoader, args: Record<string, any>, options?: BlazorOptions): ForeignComponent<TProps>;
9
+ loader: Promise<BlazorRootConfig>;
10
+ lazy: boolean;
5
11
  };