piral-ng 1.5.5-beta.7084 → 1.5.5-beta.7088

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/README.md CHANGED
@@ -130,15 +130,53 @@ export function setup(piral: PiletApi) {
130
130
  This mode works only with `piral-ng/standalone`, which has to be used in a pilet directly (as a replacement for `piral-ng/convert`). It does not mix with modules - as components need to be proper standalone entry points.
131
131
 
132
132
  ```ts
133
+ import "core-js/proposals/reflect-metadata";
134
+ import "zone.js";
133
135
  import { createConverter } from 'piral-ng/standalone';
136
+ import { ApplicationConfig } from '@angular/core';
137
+ import { provideRouter } from '@angular/router';
134
138
  import { PiletApi } from '<name-of-piral-instance>';
139
+ import { AngularPage } from './AngularPage';
140
+
141
+ const appConfig: ApplicationConfig = {
142
+ providers: [
143
+ provideRouter([
144
+ {
145
+ path: "sample",
146
+ component: AngularPage,
147
+ },
148
+ ]),
149
+ ],
150
+ };
135
151
 
136
152
  export function setup(piral: PiletApi) {
137
- // Just make sure that `AngularPage` exports the component as `default` export
138
- piral.registerPage('/sample', piral.fromNg(() => import('./AngularPage')));
153
+ const fromNg = createConverter(appConfig);
154
+
155
+ piral.registerPage('/sample', fromNg(AngularPage));
139
156
  }
140
157
  ```
141
158
 
159
+ Lazy loading is still possible, e.g., over the `loadComponent` from the routes definition or by supplying a callback to the `fromNg` function, e.g.:
160
+
161
+ ```ts
162
+ import "core-js/proposals/reflect-metadata";
163
+ import "zone.js";
164
+ import { createConverter } from "piral-ng/standalone";
165
+ import { ApplicationConfig } from "@angular/core";
166
+ import type { PiletApi } from "sample-piral";
167
+
168
+ const appConfig: ApplicationConfig = {
169
+ providers: [],
170
+ };
171
+
172
+ export function setup(app: PiletApi) {
173
+ const fromNg = createConverter(appConfig);
174
+
175
+ app.registerExtension('foo', fromNg(() => import('./app/extension.component')));
176
+ }
177
+
178
+ ```
179
+
142
180
  ### Angular Options
143
181
 
144
182
  You can optionally provide Options to `defineNgModule`, which are identical to those given to `bootstrapModule` during the Angular boot process. See https://angular.io/api/core/PlatformRef#bootstrapModule for possible values.
@@ -1,6 +1,11 @@
1
1
  import { ApplicationConfig, Type } from '@angular/core';
2
2
  import type { BaseComponentProps, HtmlComponent } from 'piral-core';
3
+ export interface DefaultExport<T> {
4
+ default: T;
5
+ }
6
+ export type NgStandaloneComponentLoader<TProps> = () => Promise<DefaultExport<Type<TProps>>>;
7
+ export type NgStandaloneComponent<TProps> = Type<TProps> | NgStandaloneComponentLoader<TProps>;
3
8
  export interface NgStandaloneConverter {
4
- <TProps extends BaseComponentProps>(component: Type<TProps>): HtmlComponent<TProps>;
9
+ <TProps extends BaseComponentProps>(component: NgStandaloneComponent<TProps>): HtmlComponent<TProps>;
5
10
  }
6
11
  export declare function createConverter(options: ApplicationConfig): NgStandaloneConverter;
package/esm/standalone.js CHANGED
@@ -2,6 +2,9 @@ import { APP_BASE_HREF } from '@angular/common';
2
2
  import { createApplication } from '@angular/platform-browser';
3
3
  import { ɵresetCompiledComponents as reset, } from '@angular/core';
4
4
  import { CoreRoutingService } from './CoreRoutingService';
5
+ function isLazyLoader(thing) {
6
+ return typeof thing === 'function' && thing.hasOwnProperty('prototype') && thing.hasOwnProperty('arguments');
7
+ }
5
8
  export function createConverter(options) {
6
9
  const update = (ref, props) => {
7
10
  if (ref) {
@@ -36,7 +39,15 @@ export function createConverter(options) {
36
39
  });
37
40
  }
38
41
  locals.active = true;
39
- app.then((appRef) => {
42
+ app
43
+ .then((appRef) => {
44
+ if (isLazyLoader(component)) {
45
+ const lazyComponent = component();
46
+ return lazyComponent.then((componentExports) => [appRef, componentExports.default]);
47
+ }
48
+ return [appRef, component];
49
+ })
50
+ .then(([appRef, component]) => {
40
51
  if (locals.active) {
41
52
  const ref = appRef.bootstrap(component, element);
42
53
  // Start the routing service.
@@ -1 +1 @@
1
- {"version":3,"file":"standalone.js","sourceRoot":"","sources":["../src/standalone.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAKL,wBAAwB,IAAI,KAAK,GAClC,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAM1D,MAAM,UAAU,eAAe,CAAC,OAA0B;IACxD,MAAM,MAAM,GAAG,CAAC,GAAsB,EAAE,KAAU,EAAE,EAAE;QACpD,IAAI,GAAG,EAAE;YACP,MAAM,EAAE,GAAG,GAAG,CAAC,aAAoB,CAAC;YAEpC,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE;gBAC3B,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;aAC9B;SACF;IACH,CAAC,CAAC;IAEF,IAAI,GAAG,GAAwC,SAAS,CAAC;IAEzD,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QACrB,IAAI,EAAE,MAAM;QACZ,SAAS,EAAE;YACT,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM;gBAC/B,IAAI,CAAC,GAAG,EAAE;oBACR,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;oBAExB,GAAG,GAAG,iBAAiB,CAAC;wBACtB,GAAG,OAAO;wBACV,SAAS,EAAE;4BACT,GAAG,OAAO,CAAC,SAAS;4BACpB,kBAAkB;4BAClB,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAG,CAAC,UAAU,EAAE;4BACpD,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,EAAE;4BACrC,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE;yBACtC;qBACF,CAAC,CAAC;oBAEH,KAAK,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,EAAE,EAAE,EAAE;wBAC9B,IAAI,EAAE,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE;4BAC9D,0CAA0C;4BAC1C,KAAK,EAAE,CAAC;yBACT;oBACH,CAAC,CAAC,CAAC;iBACJ;gBAED,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;gBAErB,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;oBAClB,IAAI,MAAM,CAAC,MAAM,EAAE;wBACjB,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;wBAEjD,6BAA6B;wBAC7B,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;wBAExC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;wBACnB,MAAM,CAAC,SAAS,GAAG,GAAG,CAAC;qBACxB;gBACH,CAAC,CAAC,CAAC;YACL,CAAC;YACD,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM;gBAC1B,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAClC,CAAC;YACD,OAAO,CAAC,OAAO,EAAE,MAAM;gBACrB,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC;gBACtB,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC;gBAC5B,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC;gBAC7B,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,CAAC;SACF;KACF,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"standalone.js","sourceRoot":"","sources":["../src/standalone.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,11 @@
1
1
  import { ApplicationConfig, Type } from '@angular/core';
2
2
  import type { BaseComponentProps, HtmlComponent } from 'piral-core';
3
+ export interface DefaultExport<T> {
4
+ default: T;
5
+ }
6
+ export type NgStandaloneComponentLoader<TProps> = () => Promise<DefaultExport<Type<TProps>>>;
7
+ export type NgStandaloneComponent<TProps> = Type<TProps> | NgStandaloneComponentLoader<TProps>;
3
8
  export interface NgStandaloneConverter {
4
- <TProps extends BaseComponentProps>(component: Type<TProps>): HtmlComponent<TProps>;
9
+ <TProps extends BaseComponentProps>(component: NgStandaloneComponent<TProps>): HtmlComponent<TProps>;
5
10
  }
6
11
  export declare function createConverter(options: ApplicationConfig): NgStandaloneConverter;
package/lib/standalone.js CHANGED
@@ -5,6 +5,9 @@ const common_1 = require("@angular/common");
5
5
  const platform_browser_1 = require("@angular/platform-browser");
6
6
  const core_1 = require("@angular/core");
7
7
  const CoreRoutingService_1 = require("./CoreRoutingService");
8
+ function isLazyLoader(thing) {
9
+ return typeof thing === 'function' && thing.hasOwnProperty('prototype') && thing.hasOwnProperty('arguments');
10
+ }
8
11
  function createConverter(options) {
9
12
  const update = (ref, props) => {
10
13
  if (ref) {
@@ -39,7 +42,15 @@ function createConverter(options) {
39
42
  });
40
43
  }
41
44
  locals.active = true;
42
- app.then((appRef) => {
45
+ app
46
+ .then((appRef) => {
47
+ if (isLazyLoader(component)) {
48
+ const lazyComponent = component();
49
+ return lazyComponent.then((componentExports) => [appRef, componentExports.default]);
50
+ }
51
+ return [appRef, component];
52
+ })
53
+ .then(([appRef, component]) => {
43
54
  if (locals.active) {
44
55
  const ref = appRef.bootstrap(component, element);
45
56
  // Start the routing service.
@@ -1 +1 @@
1
- {"version":3,"file":"standalone.js","sourceRoot":"","sources":["../src/standalone.ts"],"names":[],"mappings":";;;AAAA,4CAAgD;AAChD,gEAA8D;AAC9D,wCAMuB;AAEvB,6DAA0D;AAM1D,SAAgB,eAAe,CAAC,OAA0B;IACxD,MAAM,MAAM,GAAG,CAAC,GAAsB,EAAE,KAAU,EAAE,EAAE;QACpD,IAAI,GAAG,EAAE;YACP,MAAM,EAAE,GAAG,GAAG,CAAC,aAAoB,CAAC;YAEpC,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE;gBAC3B,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;aAC9B;SACF;IACH,CAAC,CAAC;IAEF,IAAI,GAAG,GAAwC,SAAS,CAAC;IAEzD,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QACrB,IAAI,EAAE,MAAM;QACZ,SAAS,EAAE;YACT,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM;gBAC/B,IAAI,CAAC,GAAG,EAAE;oBACR,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;oBAExB,GAAG,GAAG,IAAA,oCAAiB,EAAC;wBACtB,GAAG,OAAO;wBACV,SAAS,EAAE;4BACT,GAAG,OAAO,CAAC,SAAS;4BACpB,uCAAkB;4BAClB,EAAE,OAAO,EAAE,sBAAa,EAAE,QAAQ,EAAE,GAAG,CAAC,UAAU,EAAE;4BACpD,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,EAAE;4BACrC,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE;yBACtC;qBACF,CAAC,CAAC;oBAEH,KAAK,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,EAAE,EAAE,EAAE;wBAC9B,IAAI,EAAE,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,OAAO,+BAAK,KAAK,UAAU,EAAE;4BAC9D,0CAA0C;4BAC1C,IAAA,+BAAK,GAAE,CAAC;yBACT;oBACH,CAAC,CAAC,CAAC;iBACJ;gBAED,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;gBAErB,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;oBAClB,IAAI,MAAM,CAAC,MAAM,EAAE;wBACjB,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;wBAEjD,6BAA6B;wBAC7B,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,uCAAkB,CAAC,CAAC;wBAExC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;wBACnB,MAAM,CAAC,SAAS,GAAG,GAAG,CAAC;qBACxB;gBACH,CAAC,CAAC,CAAC;YACL,CAAC;YACD,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM;gBAC1B,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAClC,CAAC;YACD,OAAO,CAAC,OAAO,EAAE,MAAM;gBACrB,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC;gBACtB,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC;gBAC5B,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC;gBAC7B,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,CAAC;SACF;KACF,CAAC,CAAC;AACL,CAAC;AAhED,0CAgEC"}
1
+ {"version":3,"file":"standalone.js","sourceRoot":"","sources":["../src/standalone.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "piral-ng",
3
- "version": "1.5.5-beta.7084",
3
+ "version": "1.5.5-beta.7088",
4
4
  "description": "Plugin for integrating Angular components in Piral.",
5
5
  "keywords": [
6
6
  "piral",
@@ -90,9 +90,9 @@
90
90
  "@angular/platform-browser": "^16.0.0",
91
91
  "@angular/platform-browser-dynamic": "^16.0.0",
92
92
  "@angular/router": "^16.0.0",
93
- "piral-core": "1.5.5-beta.7084",
93
+ "piral-core": "1.5.5-beta.7088",
94
94
  "piral-ng-common": "^16.0.0",
95
95
  "rxjs": "^7.3.0"
96
96
  },
97
- "gitHead": "59ab59543def8bb327fc5b0a588bea2486f190a4"
97
+ "gitHead": "1d44d2fcd8ae0dd7eb76d9d1c46c1f4eae20f0b9"
98
98
  }
package/src/standalone.ts CHANGED
@@ -10,8 +10,20 @@ import {
10
10
  import type { BaseComponentProps, HtmlComponent } from 'piral-core';
11
11
  import { CoreRoutingService } from './CoreRoutingService';
12
12
 
13
+ function isLazyLoader<TProps>(thing: NgStandaloneComponent<TProps>): thing is NgStandaloneComponentLoader<TProps> {
14
+ return typeof thing === 'function' && thing.hasOwnProperty('prototype') && thing.hasOwnProperty('arguments');
15
+ }
16
+
17
+ export interface DefaultExport<T> {
18
+ default: T;
19
+ }
20
+
21
+ export type NgStandaloneComponentLoader<TProps> = () => Promise<DefaultExport<Type<TProps>>>;
22
+
23
+ export type NgStandaloneComponent<TProps> = Type<TProps> | NgStandaloneComponentLoader<TProps>;
24
+
13
25
  export interface NgStandaloneConverter {
14
- <TProps extends BaseComponentProps>(component: Type<TProps>): HtmlComponent<TProps>;
26
+ <TProps extends BaseComponentProps>(component: NgStandaloneComponent<TProps>): HtmlComponent<TProps>;
15
27
  }
16
28
 
17
29
  export function createConverter(options: ApplicationConfig): NgStandaloneConverter {
@@ -55,17 +67,26 @@ export function createConverter(options: ApplicationConfig): NgStandaloneConvert
55
67
 
56
68
  locals.active = true;
57
69
 
58
- app.then((appRef) => {
59
- if (locals.active) {
60
- const ref = appRef.bootstrap(component, element);
70
+ app
71
+ .then((appRef) => {
72
+ if (isLazyLoader(component)) {
73
+ const lazyComponent = component();
74
+ return lazyComponent.then((componentExports) => [appRef, componentExports.default] as const);
75
+ }
76
+
77
+ return [appRef, component] as const;
78
+ })
79
+ .then(([appRef, component]) => {
80
+ if (locals.active) {
81
+ const ref = appRef.bootstrap(component, element);
61
82
 
62
- // Start the routing service.
63
- appRef.injector.get(CoreRoutingService);
83
+ // Start the routing service.
84
+ appRef.injector.get(CoreRoutingService);
64
85
 
65
- update(ref, props);
66
- locals.component = ref;
67
- }
68
- });
86
+ update(ref, props);
87
+ locals.component = ref;
88
+ }
89
+ });
69
90
  },
70
91
  update(_1, props, _2, locals) {
71
92
  update(locals.component, props);