@sitecore-jss/sitecore-jss-angular 21.7.0 → 21.7.1-canary.2
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/LICENSE.txt +202 -202
- package/README.md +7 -7
- package/angular.json +48 -48
- package/dist/README.md +7 -7
- package/dist/components/date.directive.d.ts +20 -20
- package/dist/components/editframe.component.d.ts +22 -22
- package/dist/components/file.directive.d.ts +17 -17
- package/dist/components/generic-link.directive.d.ts +20 -20
- package/dist/components/hidden-rendering.component.d.ts +7 -7
- package/dist/components/image.directive.d.ts +35 -35
- package/dist/components/link.directive.d.ts +26 -26
- package/dist/components/missing-component.component.d.ts +7 -7
- package/dist/components/placeholder-loading.directive.d.ts +8 -8
- package/dist/components/placeholder.component.d.ts +60 -60
- package/dist/components/raw.component.d.ts +12 -12
- package/dist/components/render-component.component.d.ts +33 -33
- package/dist/components/render-each.directive.d.ts +8 -8
- package/dist/components/render-empty.directive.d.ts +8 -8
- package/dist/components/rendering-field.d.ts +41 -41
- package/dist/components/rendering.d.ts +5 -5
- package/dist/components/rich-text.directive.d.ts +18 -18
- package/dist/components/router-link.directive.d.ts +19 -19
- package/dist/components/text.directive.d.ts +16 -16
- package/dist/esm2022/components/date.directive.mjs +67 -67
- package/dist/esm2022/components/editframe.component.mjs +70 -70
- package/dist/esm2022/components/file.directive.mjs +48 -48
- package/dist/esm2022/components/generic-link.directive.mjs +67 -67
- package/dist/esm2022/components/hidden-rendering.component.mjs +20 -20
- package/dist/esm2022/components/image.directive.mjs +150 -150
- package/dist/esm2022/components/link.directive.mjs +122 -122
- package/dist/esm2022/components/missing-component.component.mjs +16 -16
- package/dist/esm2022/components/placeholder-loading.directive.mjs +16 -16
- package/dist/esm2022/components/placeholder.component.mjs +281 -281
- package/dist/esm2022/components/raw.component.mjs +38 -38
- package/dist/esm2022/components/render-component.component.mjs +98 -98
- package/dist/esm2022/components/render-each.directive.mjs +16 -16
- package/dist/esm2022/components/render-empty.directive.mjs +16 -16
- package/dist/esm2022/components/rendering-field.mjs +1 -1
- package/dist/esm2022/components/rendering.mjs +7 -7
- package/dist/esm2022/components/rich-text.directive.mjs +68 -68
- package/dist/esm2022/components/router-link.directive.mjs +49 -49
- package/dist/esm2022/components/text.directive.mjs +61 -61
- package/dist/esm2022/lib.module.mjs +160 -160
- package/dist/esm2022/public_api.mjs +25 -25
- package/dist/esm2022/services/data-resolver-factory.mjs +58 -58
- package/dist/esm2022/services/guard-resolver-factory.mjs +86 -86
- package/dist/esm2022/services/jss-can-activate-error.mjs +14 -14
- package/dist/esm2022/services/jss-component-factory.service.mjs +88 -88
- package/dist/esm2022/services/placeholder.token.mjs +27 -27
- package/dist/esm2022/sitecore-jss-sitecore-jss-angular.mjs +4 -4
- package/dist/esm2022/utils.mjs +16 -16
- package/dist/fesm2022/sitecore-jss-sitecore-jss-angular.mjs +1530 -1530
- package/dist/index.d.ts +5 -5
- package/dist/lib.module.d.ts +48 -48
- package/dist/package.json +2 -2
- package/dist/public_api.d.ts +26 -26
- package/dist/services/data-resolver-factory.d.ts +13 -13
- package/dist/services/guard-resolver-factory.d.ts +11 -11
- package/dist/services/jss-can-activate-error.d.ts +10 -10
- package/dist/services/jss-component-factory.service.d.ts +26 -26
- package/dist/services/placeholder.token.d.ts +64 -64
- package/dist/utils.d.ts +6 -6
- package/ng-package.json +13 -13
- package/package.json +3 -3
- package/tsconfig.json +9 -9
- package/tsconfig.spec.json +17 -17
- package/typings/README.md +2 -2
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
export { FileDirective } from './components/file.directive';
|
|
2
|
-
export { ImageDirective } from './components/image.directive';
|
|
3
|
-
export { LinkDirective } from './components/link.directive';
|
|
4
|
-
export { RouterLinkDirective } from './components/router-link.directive';
|
|
5
|
-
export { GenericLinkDirective } from './components/generic-link.directive';
|
|
6
|
-
export { PlaceholderComponent } from './components/placeholder.component';
|
|
7
|
-
export { HiddenRenderingComponent } from './components/hidden-rendering.component';
|
|
8
|
-
export { RenderEachDirective } from './components/render-each.directive';
|
|
9
|
-
export { RenderEmptyDirective } from './components/render-empty.directive';
|
|
10
|
-
export { RenderComponentComponent } from './components/render-component.component';
|
|
11
|
-
export { DateDirective } from './components/date.directive';
|
|
12
|
-
export { EditFrameComponent } from './components/editframe.component';
|
|
13
|
-
export { ComponentNameAndType, DYNAMIC_COMPONENT, } from './services/placeholder.token';
|
|
14
|
-
export { PlaceholderLoadingDirective } from './components/placeholder-loading.directive';
|
|
15
|
-
export { isRawRendering } from './components/rendering';
|
|
16
|
-
export { RichTextDirective } from './components/rich-text.directive';
|
|
17
|
-
export { TextDirective } from './components/text.directive';
|
|
18
|
-
export { JssModule } from './lib.module';
|
|
19
|
-
export { mediaApi } from '@sitecore-jss/sitecore-jss/media';
|
|
20
|
-
export { GraphQLDictionaryService, RestDictionaryService, } from '@sitecore-jss/sitecore-jss/i18n';
|
|
21
|
-
export { GraphQLLayoutService, RestLayoutService, getChildPlaceholder, getFieldValue, } from '@sitecore-jss/sitecore-jss/layout';
|
|
22
|
-
export { DefaultRetryStrategy, } from '@sitecore-jss/sitecore-jss/graphql';
|
|
23
|
-
export { constants, enableDebug, ClientError, } from '@sitecore-jss/sitecore-jss';
|
|
24
|
-
export { isServer, isEditorActive, resetEditorChromes, handleEditorAnchors, DefaultEditFrameButton, DefaultEditFrameButtons, } from '@sitecore-jss/sitecore-jss/utils';
|
|
25
|
-
export { trackingApi, } from '@sitecore-jss/sitecore-jss/tracking';
|
|
1
|
+
export { FileDirective } from './components/file.directive';
|
|
2
|
+
export { ImageDirective } from './components/image.directive';
|
|
3
|
+
export { LinkDirective } from './components/link.directive';
|
|
4
|
+
export { RouterLinkDirective } from './components/router-link.directive';
|
|
5
|
+
export { GenericLinkDirective } from './components/generic-link.directive';
|
|
6
|
+
export { PlaceholderComponent } from './components/placeholder.component';
|
|
7
|
+
export { HiddenRenderingComponent } from './components/hidden-rendering.component';
|
|
8
|
+
export { RenderEachDirective } from './components/render-each.directive';
|
|
9
|
+
export { RenderEmptyDirective } from './components/render-empty.directive';
|
|
10
|
+
export { RenderComponentComponent } from './components/render-component.component';
|
|
11
|
+
export { DateDirective } from './components/date.directive';
|
|
12
|
+
export { EditFrameComponent } from './components/editframe.component';
|
|
13
|
+
export { ComponentNameAndType, DYNAMIC_COMPONENT, } from './services/placeholder.token';
|
|
14
|
+
export { PlaceholderLoadingDirective } from './components/placeholder-loading.directive';
|
|
15
|
+
export { isRawRendering } from './components/rendering';
|
|
16
|
+
export { RichTextDirective } from './components/rich-text.directive';
|
|
17
|
+
export { TextDirective } from './components/text.directive';
|
|
18
|
+
export { JssModule } from './lib.module';
|
|
19
|
+
export { mediaApi } from '@sitecore-jss/sitecore-jss/media';
|
|
20
|
+
export { GraphQLDictionaryService, RestDictionaryService, } from '@sitecore-jss/sitecore-jss/i18n';
|
|
21
|
+
export { GraphQLLayoutService, RestLayoutService, getChildPlaceholder, getFieldValue, } from '@sitecore-jss/sitecore-jss/layout';
|
|
22
|
+
export { DefaultRetryStrategy, } from '@sitecore-jss/sitecore-jss/graphql';
|
|
23
|
+
export { constants, enableDebug, ClientError, } from '@sitecore-jss/sitecore-jss';
|
|
24
|
+
export { isServer, isEditorActive, resetEditorChromes, handleEditorAnchors, DefaultEditFrameButton, DefaultEditFrameButtons, } from '@sitecore-jss/sitecore-jss/utils';
|
|
25
|
+
export { trackingApi, } from '@sitecore-jss/sitecore-jss/tracking';
|
|
26
26
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaWNfYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzVELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN0RSxPQUFPLEVBQ0wsb0JBQW9CLEVBQ3BCLGlCQUFpQixHQU1sQixNQUFNLDhCQUE4QixDQUFDO0FBQ3RDLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQVd4RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN6QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDNUQsT0FBTyxFQUVMLHdCQUF3QixFQUN4QixxQkFBcUIsR0FDdEIsTUFBTSxpQ0FBaUMsQ0FBQztBQUN6QyxPQUFPLEVBSUwsb0JBQW9CLEVBQ3BCLGlCQUFpQixFQUtqQixtQkFBbUIsRUFDbkIsYUFBYSxHQUlkLE1BQU0sbUNBQW1DLENBQUM7QUFDM0MsT0FBTyxFQUVMLG9CQUFvQixHQUVyQixNQUFNLG9DQUFvQyxDQUFDO0FBQzVDLE9BQU8sRUFDTCxTQUFTLEVBR1QsV0FBVyxFQUNYLFdBQVcsR0FDWixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFDTCxRQUFRLEVBQ1IsY0FBYyxFQUNkLGtCQUFrQixFQUNsQixtQkFBbUIsRUFDbkIsc0JBQXNCLEVBQ3RCLHVCQUF1QixHQUl4QixNQUFNLGtDQUFrQyxDQUFDO0FBQzFDLE9BQU8sRUFDTCxXQUFXLEdBT1osTUFBTSxxQ0FBcUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IEZpbGVEaXJlY3RpdmUgfSBmcm9tICcuL2NvbXBvbmVudHMvZmlsZS5kaXJlY3RpdmUnO1xyXG5leHBvcnQgeyBJbWFnZURpcmVjdGl2ZSB9IGZyb20gJy4vY29tcG9uZW50cy9pbWFnZS5kaXJlY3RpdmUnO1xyXG5leHBvcnQgeyBMaW5rRGlyZWN0aXZlIH0gZnJvbSAnLi9jb21wb25lbnRzL2xpbmsuZGlyZWN0aXZlJztcclxuZXhwb3J0IHsgUm91dGVyTGlua0RpcmVjdGl2ZSB9IGZyb20gJy4vY29tcG9uZW50cy9yb3V0ZXItbGluay5kaXJlY3RpdmUnO1xyXG5leHBvcnQgeyBHZW5lcmljTGlua0RpcmVjdGl2ZSB9IGZyb20gJy4vY29tcG9uZW50cy9nZW5lcmljLWxpbmsuZGlyZWN0aXZlJztcclxuZXhwb3J0IHsgUGxhY2Vob2xkZXJDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcGxhY2Vob2xkZXIuY29tcG9uZW50JztcclxuZXhwb3J0IHsgSGlkZGVuUmVuZGVyaW5nQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2hpZGRlbi1yZW5kZXJpbmcuY29tcG9uZW50JztcclxuZXhwb3J0IHsgUmVuZGVyRWFjaERpcmVjdGl2ZSB9IGZyb20gJy4vY29tcG9uZW50cy9yZW5kZXItZWFjaC5kaXJlY3RpdmUnO1xyXG5leHBvcnQgeyBSZW5kZXJFbXB0eURpcmVjdGl2ZSB9IGZyb20gJy4vY29tcG9uZW50cy9yZW5kZXItZW1wdHkuZGlyZWN0aXZlJztcclxuZXhwb3J0IHsgUmVuZGVyQ29tcG9uZW50Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3JlbmRlci1jb21wb25lbnQuY29tcG9uZW50JztcclxuZXhwb3J0IHsgRGF0ZURpcmVjdGl2ZSB9IGZyb20gJy4vY29tcG9uZW50cy9kYXRlLmRpcmVjdGl2ZSc7XHJcbmV4cG9ydCB7IEVkaXRGcmFtZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9lZGl0ZnJhbWUuY29tcG9uZW50JztcclxuZXhwb3J0IHtcclxuICBDb21wb25lbnROYW1lQW5kVHlwZSxcclxuICBEWU5BTUlDX0NPTVBPTkVOVCxcclxuICBDb21wb25lbnROYW1lQW5kTW9kdWxlLFxyXG4gIEpzc1Jlc29sdmUsXHJcbiAgSnNzQ2FuQWN0aXZhdGUsXHJcbiAgSnNzQ2FuQWN0aXZhdGVGbixcclxuICBHdWFyZElucHV0LFxyXG59IGZyb20gJy4vc2VydmljZXMvcGxhY2Vob2xkZXIudG9rZW4nO1xyXG5leHBvcnQgeyBQbGFjZWhvbGRlckxvYWRpbmdEaXJlY3RpdmUgfSBmcm9tICcuL2NvbXBvbmVudHMvcGxhY2Vob2xkZXItbG9hZGluZy5kaXJlY3RpdmUnO1xyXG5leHBvcnQgeyBpc1Jhd1JlbmRlcmluZyB9IGZyb20gJy4vY29tcG9uZW50cy9yZW5kZXJpbmcnO1xyXG5leHBvcnQge1xyXG4gIEZpbGVGaWVsZCxcclxuICBJbWFnZUZpZWxkLFxyXG4gIEltYWdlRmllbGRWYWx1ZSxcclxuICBMaW5rRmllbGQsXHJcbiAgTGlua0ZpZWxkVmFsdWUsXHJcbiAgUmVuZGVyaW5nRmllbGQsXHJcbiAgUmljaFRleHRGaWVsZCxcclxuICBUZXh0RmllbGQsXHJcbn0gZnJvbSAnLi9jb21wb25lbnRzL3JlbmRlcmluZy1maWVsZCc7XHJcbmV4cG9ydCB7IFJpY2hUZXh0RGlyZWN0aXZlIH0gZnJvbSAnLi9jb21wb25lbnRzL3JpY2gtdGV4dC5kaXJlY3RpdmUnO1xyXG5leHBvcnQgeyBUZXh0RGlyZWN0aXZlIH0gZnJvbSAnLi9jb21wb25lbnRzL3RleHQuZGlyZWN0aXZlJztcclxuZXhwb3J0IHsgSnNzTW9kdWxlIH0gZnJvbSAnLi9saWIubW9kdWxlJztcclxuZXhwb3J0IHsgbWVkaWFBcGkgfSBmcm9tICdAc2l0ZWNvcmUtanNzL3NpdGVjb3JlLWpzcy9tZWRpYSc7XHJcbmV4cG9ydCB7XHJcbiAgRGljdGlvbmFyeVNlcnZpY2UsXHJcbiAgR3JhcGhRTERpY3Rpb25hcnlTZXJ2aWNlLFxyXG4gIFJlc3REaWN0aW9uYXJ5U2VydmljZSxcclxufSBmcm9tICdAc2l0ZWNvcmUtanNzL3NpdGVjb3JlLWpzcy9pMThuJztcclxuZXhwb3J0IHtcclxuICBMYXlvdXRTZXJ2aWNlLFxyXG4gIExheW91dFNlcnZpY2VEYXRhLFxyXG4gIExheW91dFNlcnZpY2VDb250ZXh0RGF0YSxcclxuICBHcmFwaFFMTGF5b3V0U2VydmljZSxcclxuICBSZXN0TGF5b3V0U2VydmljZSxcclxuICBQbGFjZWhvbGRlcnNEYXRhLFxyXG4gIFJvdXRlRGF0YSxcclxuICBGaWVsZCxcclxuICBIdG1sRWxlbWVudFJlbmRlcmluZyxcclxuICBnZXRDaGlsZFBsYWNlaG9sZGVyLFxyXG4gIGdldEZpZWxkVmFsdWUsXHJcbiAgQ29tcG9uZW50UmVuZGVyaW5nLFxyXG4gIENvbXBvbmVudEZpZWxkcyxcclxuICBDb21wb25lbnRQYXJhbXMsXHJcbn0gZnJvbSAnQHNpdGVjb3JlLWpzcy9zaXRlY29yZS1qc3MvbGF5b3V0JztcclxuZXhwb3J0IHtcclxuICBSZXRyeVN0cmF0ZWd5LFxyXG4gIERlZmF1bHRSZXRyeVN0cmF0ZWd5LFxyXG4gIEdyYXBoUUxDbGllbnRFcnJvcixcclxufSBmcm9tICdAc2l0ZWNvcmUtanNzL3NpdGVjb3JlLWpzcy9ncmFwaHFsJztcclxuZXhwb3J0IHtcclxuICBjb25zdGFudHMsXHJcbiAgSHR0cERhdGFGZXRjaGVyLFxyXG4gIEh0dHBSZXNwb25zZSxcclxuICBlbmFibGVEZWJ1ZyxcclxuICBDbGllbnRFcnJvcixcclxufSBmcm9tICdAc2l0ZWNvcmUtanNzL3NpdGVjb3JlLWpzcyc7XHJcbmV4cG9ydCB7XHJcbiAgaXNTZXJ2ZXIsXHJcbiAgaXNFZGl0b3JBY3RpdmUsXHJcbiAgcmVzZXRFZGl0b3JDaHJvbWVzLFxyXG4gIGhhbmRsZUVkaXRvckFuY2hvcnMsXHJcbiAgRGVmYXVsdEVkaXRGcmFtZUJ1dHRvbixcclxuICBEZWZhdWx0RWRpdEZyYW1lQnV0dG9ucyxcclxuICBFZGl0RnJhbWVEYXRhU291cmNlLFxyXG4gIEZpZWxkRWRpdEJ1dHRvbixcclxuICBXZWJFZGl0QnV0dG9uLFxyXG59IGZyb20gJ0BzaXRlY29yZS1qc3Mvc2l0ZWNvcmUtanNzL3V0aWxzJztcclxuZXhwb3J0IHtcclxuICB0cmFja2luZ0FwaSxcclxuICBUcmFja2luZ1JlcXVlc3RPcHRpb25zLFxyXG4gIENhbXBhaWduSW5zdGFuY2UsXHJcbiAgR29hbEluc3RhbmNlLFxyXG4gIE91dGNvbWVJbnN0YW5jZSxcclxuICBFdmVudEluc3RhbmNlLFxyXG4gIFBhZ2VWaWV3SW5zdGFuY2UsXHJcbn0gZnJvbSAnQHNpdGVjb3JlLWpzcy9zaXRlY29yZS1qc3MvdHJhY2tpbmcnO1xyXG4iXX0=
|
|
@@ -1,59 +1,59 @@
|
|
|
1
|
-
import { take } from 'rxjs/operators';
|
|
2
|
-
import { wrapIntoObservable } from '../utils';
|
|
3
|
-
import { lastValueFrom } from 'rxjs';
|
|
4
|
-
/**
|
|
5
|
-
* @param {Injector} injector
|
|
6
|
-
* @param {ActivatedRoute} activatedRoute
|
|
7
|
-
* @param {Router} router
|
|
8
|
-
* @returns resolved data
|
|
9
|
-
*/
|
|
10
|
-
export function dataResolverFactory(injector, activatedRoute, router) {
|
|
11
|
-
/**
|
|
12
|
-
* @param {JssResolve<unknown> | Type<JssResolve<unknown>>} resolver
|
|
13
|
-
* @returns resolver instance
|
|
14
|
-
*/
|
|
15
|
-
function getResolverInstance(resolver) {
|
|
16
|
-
return 'resolve' in resolver ? resolver : injector.get(resolver);
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* @param {ComponentFactoryResult} factory
|
|
20
|
-
* @returns {Array<[string, JssResolve<unknown>]>} resolver instances
|
|
21
|
-
*/
|
|
22
|
-
function collectResolverInstances(factory) {
|
|
23
|
-
if (factory.resolve) {
|
|
24
|
-
const resolve = factory.resolve;
|
|
25
|
-
return Object.keys(factory.resolve).map((key) => [
|
|
26
|
-
key,
|
|
27
|
-
getResolverInstance(resolve[key]),
|
|
28
|
-
]);
|
|
29
|
-
}
|
|
30
|
-
return [];
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* @param {JssResolve<unknown>} resolver
|
|
34
|
-
* @param {ComponentFactoryResult} factory
|
|
35
|
-
* @returns data
|
|
36
|
-
*/
|
|
37
|
-
function _resolveData(resolver, factory) {
|
|
38
|
-
const data = resolver.resolve({
|
|
39
|
-
activatedRoute: activatedRoute.snapshot,
|
|
40
|
-
routerState: router.routerState.snapshot,
|
|
41
|
-
rendering: factory.componentDefinition,
|
|
42
|
-
});
|
|
43
|
-
const data$ = wrapIntoObservable(data);
|
|
44
|
-
return lastValueFrom(data$.pipe(take(1)));
|
|
45
|
-
}
|
|
46
|
-
return function resolveData(factories) {
|
|
47
|
-
return Promise.all(factories.map((factory) => {
|
|
48
|
-
const resolvers = collectResolverInstances(factory);
|
|
49
|
-
const pendingData = resolvers.map(([key, resolver]) => _resolveData(resolver, factory).then((data) => [key, data]));
|
|
50
|
-
return Promise.all(pendingData)
|
|
51
|
-
.then((allData) => allData.reduce((acc, [key, data]) => {
|
|
52
|
-
acc[key] = data;
|
|
53
|
-
return acc;
|
|
54
|
-
}, {}))
|
|
55
|
-
.then((data) => ({ factory, data }));
|
|
56
|
-
}));
|
|
57
|
-
};
|
|
58
|
-
}
|
|
1
|
+
import { take } from 'rxjs/operators';
|
|
2
|
+
import { wrapIntoObservable } from '../utils';
|
|
3
|
+
import { lastValueFrom } from 'rxjs';
|
|
4
|
+
/**
|
|
5
|
+
* @param {Injector} injector
|
|
6
|
+
* @param {ActivatedRoute} activatedRoute
|
|
7
|
+
* @param {Router} router
|
|
8
|
+
* @returns resolved data
|
|
9
|
+
*/
|
|
10
|
+
export function dataResolverFactory(injector, activatedRoute, router) {
|
|
11
|
+
/**
|
|
12
|
+
* @param {JssResolve<unknown> | Type<JssResolve<unknown>>} resolver
|
|
13
|
+
* @returns resolver instance
|
|
14
|
+
*/
|
|
15
|
+
function getResolverInstance(resolver) {
|
|
16
|
+
return 'resolve' in resolver ? resolver : injector.get(resolver);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* @param {ComponentFactoryResult} factory
|
|
20
|
+
* @returns {Array<[string, JssResolve<unknown>]>} resolver instances
|
|
21
|
+
*/
|
|
22
|
+
function collectResolverInstances(factory) {
|
|
23
|
+
if (factory.resolve) {
|
|
24
|
+
const resolve = factory.resolve;
|
|
25
|
+
return Object.keys(factory.resolve).map((key) => [
|
|
26
|
+
key,
|
|
27
|
+
getResolverInstance(resolve[key]),
|
|
28
|
+
]);
|
|
29
|
+
}
|
|
30
|
+
return [];
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* @param {JssResolve<unknown>} resolver
|
|
34
|
+
* @param {ComponentFactoryResult} factory
|
|
35
|
+
* @returns data
|
|
36
|
+
*/
|
|
37
|
+
function _resolveData(resolver, factory) {
|
|
38
|
+
const data = resolver.resolve({
|
|
39
|
+
activatedRoute: activatedRoute.snapshot,
|
|
40
|
+
routerState: router.routerState.snapshot,
|
|
41
|
+
rendering: factory.componentDefinition,
|
|
42
|
+
});
|
|
43
|
+
const data$ = wrapIntoObservable(data);
|
|
44
|
+
return lastValueFrom(data$.pipe(take(1)));
|
|
45
|
+
}
|
|
46
|
+
return function resolveData(factories) {
|
|
47
|
+
return Promise.all(factories.map((factory) => {
|
|
48
|
+
const resolvers = collectResolverInstances(factory);
|
|
49
|
+
const pendingData = resolvers.map(([key, resolver]) => _resolveData(resolver, factory).then((data) => [key, data]));
|
|
50
|
+
return Promise.all(pendingData)
|
|
51
|
+
.then((allData) => allData.reduce((acc, [key, data]) => {
|
|
52
|
+
acc[key] = data;
|
|
53
|
+
return acc;
|
|
54
|
+
}, {}))
|
|
55
|
+
.then((data) => ({ factory, data }));
|
|
56
|
+
}));
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
59
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1yZXNvbHZlci1mYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL2RhdGEtcmVzb2x2ZXItZmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdEMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRTlDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFckM7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsbUJBQW1CLENBQ2pDLFFBQWtCLEVBQ2xCLGNBQThCLEVBQzlCLE1BQWM7SUFFZDs7O09BR0c7SUFDSCxTQUFTLG1CQUFtQixDQUFDLFFBQXlEO1FBQ3BGLE9BQU8sU0FBUyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRDs7O09BR0c7SUFDSCxTQUFTLHdCQUF3QixDQUMvQixPQUErQjtRQUUvQixJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUU7WUFDbkIsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQztZQUNoQyxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBaUMsRUFBRSxDQUFDO2dCQUM5RSxHQUFHO2dCQUNILG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUNsQyxDQUFDLENBQUM7U0FDSjtRQUVELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxTQUFTLFlBQVksQ0FBQyxRQUE2QixFQUFFLE9BQStCO1FBQ2xGLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUM7WUFDNUIsY0FBYyxFQUFFLGNBQWMsQ0FBQyxRQUFRO1lBQ3ZDLFdBQVcsRUFBRSxNQUFNLENBQUMsV0FBVyxDQUFDLFFBQVE7WUFDeEMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxtQkFBeUM7U0FDN0QsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxLQUFLLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFdkMsT0FBTyxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRCxPQUFPLFNBQVMsV0FBVyxDQUFDLFNBQW1DO1FBQzdELE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FDaEIsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ3hCLE1BQU0sU0FBUyxHQUFHLHdCQUF3QixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3BELE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsRUFBRSxFQUFFLENBQ3BELFlBQVksQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFpQixFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FDM0UsQ0FBQztZQUVGLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUM7aUJBQzVCLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQ2hCLE9BQU8sQ0FBQyxNQUFNLENBQXNCLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUU7Z0JBQ3ZELEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7Z0JBQ2hCLE9BQU8sR0FBRyxDQUFDO1lBQ2IsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUNQO2lCQUNBLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDekMsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RvciwgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgQ29tcG9uZW50UmVuZGVyaW5nIH0gZnJvbSAnQHNpdGVjb3JlLWpzcy9zaXRlY29yZS1qc3MvbGF5b3V0JztcclxuaW1wb3J0IHsgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgQ29tcG9uZW50RmFjdG9yeVJlc3VsdCB9IGZyb20gJy4vanNzLWNvbXBvbmVudC1mYWN0b3J5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyB3cmFwSW50b09ic2VydmFibGUgfSBmcm9tICcuLi91dGlscyc7XHJcbmltcG9ydCB7IEpzc1Jlc29sdmUgfSBmcm9tICcuL3BsYWNlaG9sZGVyLnRva2VuJztcclxuaW1wb3J0IHsgbGFzdFZhbHVlRnJvbSB9IGZyb20gJ3J4anMnO1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSB7SW5qZWN0b3J9IGluamVjdG9yXHJcbiAqIEBwYXJhbSB7QWN0aXZhdGVkUm91dGV9IGFjdGl2YXRlZFJvdXRlXHJcbiAqIEBwYXJhbSB7Um91dGVyfSByb3V0ZXJcclxuICogQHJldHVybnMgcmVzb2x2ZWQgZGF0YVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGRhdGFSZXNvbHZlckZhY3RvcnkoXHJcbiAgaW5qZWN0b3I6IEluamVjdG9yLFxyXG4gIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICByb3V0ZXI6IFJvdXRlclxyXG4pIHtcclxuICAvKipcclxuICAgKiBAcGFyYW0ge0pzc1Jlc29sdmU8dW5rbm93bj4gfCBUeXBlPEpzc1Jlc29sdmU8dW5rbm93bj4+fSByZXNvbHZlclxyXG4gICAqIEByZXR1cm5zIHJlc29sdmVyIGluc3RhbmNlXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gZ2V0UmVzb2x2ZXJJbnN0YW5jZShyZXNvbHZlcjogSnNzUmVzb2x2ZTx1bmtub3duPiB8IFR5cGU8SnNzUmVzb2x2ZTx1bmtub3duPj4pIHtcclxuICAgIHJldHVybiAncmVzb2x2ZScgaW4gcmVzb2x2ZXIgPyByZXNvbHZlciA6IGluamVjdG9yLmdldChyZXNvbHZlcik7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAcGFyYW0ge0NvbXBvbmVudEZhY3RvcnlSZXN1bHR9IGZhY3RvcnlcclxuICAgKiBAcmV0dXJucyB7QXJyYXk8W3N0cmluZywgSnNzUmVzb2x2ZTx1bmtub3duPl0+fSByZXNvbHZlciBpbnN0YW5jZXNcclxuICAgKi9cclxuICBmdW5jdGlvbiBjb2xsZWN0UmVzb2x2ZXJJbnN0YW5jZXMoXHJcbiAgICBmYWN0b3J5OiBDb21wb25lbnRGYWN0b3J5UmVzdWx0XHJcbiAgKTogQXJyYXk8W3N0cmluZywgSnNzUmVzb2x2ZTx1bmtub3duPl0+IHtcclxuICAgIGlmIChmYWN0b3J5LnJlc29sdmUpIHtcclxuICAgICAgY29uc3QgcmVzb2x2ZSA9IGZhY3RvcnkucmVzb2x2ZTtcclxuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGZhY3RvcnkucmVzb2x2ZSkubWFwKChrZXkpOiBbc3RyaW5nLCBKc3NSZXNvbHZlPHVua25vd24+XSA9PiBbXHJcbiAgICAgICAga2V5LFxyXG4gICAgICAgIGdldFJlc29sdmVySW5zdGFuY2UocmVzb2x2ZVtrZXldKSxcclxuICAgICAgXSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIFtdO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQHBhcmFtIHtKc3NSZXNvbHZlPHVua25vd24+fSByZXNvbHZlclxyXG4gICAqIEBwYXJhbSB7Q29tcG9uZW50RmFjdG9yeVJlc3VsdH0gZmFjdG9yeVxyXG4gICAqIEByZXR1cm5zIGRhdGFcclxuICAgKi9cclxuICBmdW5jdGlvbiBfcmVzb2x2ZURhdGEocmVzb2x2ZXI6IEpzc1Jlc29sdmU8dW5rbm93bj4sIGZhY3Rvcnk6IENvbXBvbmVudEZhY3RvcnlSZXN1bHQpIHtcclxuICAgIGNvbnN0IGRhdGEgPSByZXNvbHZlci5yZXNvbHZlKHtcclxuICAgICAgYWN0aXZhdGVkUm91dGU6IGFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LFxyXG4gICAgICByb3V0ZXJTdGF0ZTogcm91dGVyLnJvdXRlclN0YXRlLnNuYXBzaG90LFxyXG4gICAgICByZW5kZXJpbmc6IGZhY3RvcnkuY29tcG9uZW50RGVmaW5pdGlvbiBhcyBDb21wb25lbnRSZW5kZXJpbmcsXHJcbiAgICB9KTtcclxuICAgIGNvbnN0IGRhdGEkID0gd3JhcEludG9PYnNlcnZhYmxlKGRhdGEpO1xyXG5cclxuICAgIHJldHVybiBsYXN0VmFsdWVGcm9tKGRhdGEkLnBpcGUodGFrZSgxKSkpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGZ1bmN0aW9uIHJlc29sdmVEYXRhKGZhY3RvcmllczogQ29tcG9uZW50RmFjdG9yeVJlc3VsdFtdKSB7XHJcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoXHJcbiAgICAgIGZhY3Rvcmllcy5tYXAoKGZhY3RvcnkpID0+IHtcclxuICAgICAgICBjb25zdCByZXNvbHZlcnMgPSBjb2xsZWN0UmVzb2x2ZXJJbnN0YW5jZXMoZmFjdG9yeSk7XHJcbiAgICAgICAgY29uc3QgcGVuZGluZ0RhdGEgPSByZXNvbHZlcnMubWFwKChba2V5LCByZXNvbHZlcl0pID0+XHJcbiAgICAgICAgICBfcmVzb2x2ZURhdGEocmVzb2x2ZXIsIGZhY3RvcnkpLnRoZW4oKGRhdGEpOiBbc3RyaW5nLCBhbnldID0+IFtrZXksIGRhdGFdKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChwZW5kaW5nRGF0YSlcclxuICAgICAgICAgIC50aGVuKChhbGxEYXRhKSA9PlxyXG4gICAgICAgICAgICBhbGxEYXRhLnJlZHVjZTxSZWNvcmQ8c3RyaW5nLCBhbnk+PigoYWNjLCBba2V5LCBkYXRhXSkgPT4ge1xyXG4gICAgICAgICAgICAgIGFjY1trZXldID0gZGF0YTtcclxuICAgICAgICAgICAgICByZXR1cm4gYWNjO1xyXG4gICAgICAgICAgICB9LCB7fSlcclxuICAgICAgICAgIClcclxuICAgICAgICAgIC50aGVuKChkYXRhKSA9PiAoeyBmYWN0b3J5LCBkYXRhIH0pKTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfTtcclxufVxyXG4iXX0=
|
|
@@ -1,87 +1,87 @@
|
|
|
1
|
-
import { UrlTree } from '@angular/router';
|
|
2
|
-
import { lastValueFrom, of } from 'rxjs';
|
|
3
|
-
import { mergeMap, take } from 'rxjs/operators';
|
|
4
|
-
import { wrapIntoObservable } from '../utils';
|
|
5
|
-
import { JssCanActivateRedirectError } from './jss-can-activate-error';
|
|
6
|
-
/**
|
|
7
|
-
* @param {boolean | string | string[] | UrlTree} value
|
|
8
|
-
* @returns instance of value
|
|
9
|
-
*/
|
|
10
|
-
function isRedirectValue(value) {
|
|
11
|
-
return value instanceof UrlTree || typeof value === 'string' || Array.isArray(value);
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* Resolves components based on provided guards
|
|
15
|
-
* @param {Injector} injector
|
|
16
|
-
* @param {ActivatedRoute} activatedRoute
|
|
17
|
-
* @param {Router} router
|
|
18
|
-
* @returns {(factories: ComponentFactoryResult[]) => Promise<ComponentFactoryResult[]>} factory
|
|
19
|
-
*/
|
|
20
|
-
export function guardResolverFactory(injector, activatedRoute, router) {
|
|
21
|
-
/**
|
|
22
|
-
* @param {JssCanActivate | Type<JssCanActivate> | JssCanActivateFn} guard
|
|
23
|
-
* @returns resolved guard
|
|
24
|
-
*/
|
|
25
|
-
function getGuardInstance(guard) {
|
|
26
|
-
if ('canActivate' in guard) {
|
|
27
|
-
return guard;
|
|
28
|
-
}
|
|
29
|
-
try {
|
|
30
|
-
// Class is provided
|
|
31
|
-
return injector.get(guard);
|
|
32
|
-
}
|
|
33
|
-
catch {
|
|
34
|
-
// Function is provided
|
|
35
|
-
return guard;
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* @param {ComponentFactoryResult} factory
|
|
40
|
-
* @returns {(JssCanActivate | JssCanActivateFn)[]} guard instances
|
|
41
|
-
*/
|
|
42
|
-
function collectGuardInstances(factory) {
|
|
43
|
-
if (factory.canActivate) {
|
|
44
|
-
return Array.isArray(factory.canActivate)
|
|
45
|
-
? factory.canActivate.map(getGuardInstance)
|
|
46
|
-
: [getGuardInstance(factory.canActivate)];
|
|
47
|
-
}
|
|
48
|
-
return [];
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
*
|
|
52
|
-
* @param {JssCanActivate | JssCanActivateFn} guard
|
|
53
|
-
* @param {ComponentFactoryResult} factory
|
|
54
|
-
* @returns canActivate
|
|
55
|
-
*/
|
|
56
|
-
function resolveGuard(guard, factory) {
|
|
57
|
-
const canActivate = 'canActivate' in guard ? guard.canActivate.bind(guard) : guard;
|
|
58
|
-
const guardValue = canActivate({
|
|
59
|
-
activatedRoute: activatedRoute.snapshot,
|
|
60
|
-
routerState: router.routerState.snapshot,
|
|
61
|
-
rendering: factory.componentDefinition,
|
|
62
|
-
});
|
|
63
|
-
const canActivate$ = wrapIntoObservable(guardValue);
|
|
64
|
-
return lastValueFrom(canActivate$.pipe(take(1), mergeMap((value) => {
|
|
65
|
-
if (isRedirectValue(value)) {
|
|
66
|
-
throw new JssCanActivateRedirectError(`Value: '${value.toString()}' is a redirect value`, value);
|
|
67
|
-
}
|
|
68
|
-
else {
|
|
69
|
-
return of(value);
|
|
70
|
-
}
|
|
71
|
-
})));
|
|
72
|
-
}
|
|
73
|
-
return function resolveGuards(factories) {
|
|
74
|
-
const resolved = factories.map((factory) => {
|
|
75
|
-
const guards = collectGuardInstances(factory);
|
|
76
|
-
const pending = guards.map((guard) => resolveGuard(guard, factory));
|
|
77
|
-
return Promise.all(pending)
|
|
78
|
-
.then((canActive) => canActive.every((v) => v))
|
|
79
|
-
.then((canActivate) => ({
|
|
80
|
-
factory,
|
|
81
|
-
canActivate,
|
|
82
|
-
}));
|
|
83
|
-
});
|
|
84
|
-
return Promise.all(resolved).then((mapped) => mapped.filter((m) => m.canActivate).map((m) => m.factory));
|
|
85
|
-
};
|
|
86
|
-
}
|
|
1
|
+
import { UrlTree } from '@angular/router';
|
|
2
|
+
import { lastValueFrom, of } from 'rxjs';
|
|
3
|
+
import { mergeMap, take } from 'rxjs/operators';
|
|
4
|
+
import { wrapIntoObservable } from '../utils';
|
|
5
|
+
import { JssCanActivateRedirectError } from './jss-can-activate-error';
|
|
6
|
+
/**
|
|
7
|
+
* @param {boolean | string | string[] | UrlTree} value
|
|
8
|
+
* @returns instance of value
|
|
9
|
+
*/
|
|
10
|
+
function isRedirectValue(value) {
|
|
11
|
+
return value instanceof UrlTree || typeof value === 'string' || Array.isArray(value);
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Resolves components based on provided guards
|
|
15
|
+
* @param {Injector} injector
|
|
16
|
+
* @param {ActivatedRoute} activatedRoute
|
|
17
|
+
* @param {Router} router
|
|
18
|
+
* @returns {(factories: ComponentFactoryResult[]) => Promise<ComponentFactoryResult[]>} factory
|
|
19
|
+
*/
|
|
20
|
+
export function guardResolverFactory(injector, activatedRoute, router) {
|
|
21
|
+
/**
|
|
22
|
+
* @param {JssCanActivate | Type<JssCanActivate> | JssCanActivateFn} guard
|
|
23
|
+
* @returns resolved guard
|
|
24
|
+
*/
|
|
25
|
+
function getGuardInstance(guard) {
|
|
26
|
+
if ('canActivate' in guard) {
|
|
27
|
+
return guard;
|
|
28
|
+
}
|
|
29
|
+
try {
|
|
30
|
+
// Class is provided
|
|
31
|
+
return injector.get(guard);
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
// Function is provided
|
|
35
|
+
return guard;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* @param {ComponentFactoryResult} factory
|
|
40
|
+
* @returns {(JssCanActivate | JssCanActivateFn)[]} guard instances
|
|
41
|
+
*/
|
|
42
|
+
function collectGuardInstances(factory) {
|
|
43
|
+
if (factory.canActivate) {
|
|
44
|
+
return Array.isArray(factory.canActivate)
|
|
45
|
+
? factory.canActivate.map(getGuardInstance)
|
|
46
|
+
: [getGuardInstance(factory.canActivate)];
|
|
47
|
+
}
|
|
48
|
+
return [];
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
*
|
|
52
|
+
* @param {JssCanActivate | JssCanActivateFn} guard
|
|
53
|
+
* @param {ComponentFactoryResult} factory
|
|
54
|
+
* @returns canActivate
|
|
55
|
+
*/
|
|
56
|
+
function resolveGuard(guard, factory) {
|
|
57
|
+
const canActivate = 'canActivate' in guard ? guard.canActivate.bind(guard) : guard;
|
|
58
|
+
const guardValue = canActivate({
|
|
59
|
+
activatedRoute: activatedRoute.snapshot,
|
|
60
|
+
routerState: router.routerState.snapshot,
|
|
61
|
+
rendering: factory.componentDefinition,
|
|
62
|
+
});
|
|
63
|
+
const canActivate$ = wrapIntoObservable(guardValue);
|
|
64
|
+
return lastValueFrom(canActivate$.pipe(take(1), mergeMap((value) => {
|
|
65
|
+
if (isRedirectValue(value)) {
|
|
66
|
+
throw new JssCanActivateRedirectError(`Value: '${value.toString()}' is a redirect value`, value);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
return of(value);
|
|
70
|
+
}
|
|
71
|
+
})));
|
|
72
|
+
}
|
|
73
|
+
return function resolveGuards(factories) {
|
|
74
|
+
const resolved = factories.map((factory) => {
|
|
75
|
+
const guards = collectGuardInstances(factory);
|
|
76
|
+
const pending = guards.map((guard) => resolveGuard(guard, factory));
|
|
77
|
+
return Promise.all(pending)
|
|
78
|
+
.then((canActive) => canActive.every((v) => v))
|
|
79
|
+
.then((canActivate) => ({
|
|
80
|
+
factory,
|
|
81
|
+
canActivate,
|
|
82
|
+
}));
|
|
83
|
+
});
|
|
84
|
+
return Promise.all(resolved).then((mapped) => mapped.filter((m) => m.canActivate).map((m) => m.factory));
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
87
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3VhcmQtcmVzb2x2ZXItZmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9ndWFyZC1yZXNvbHZlci1mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBMEIsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFbEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDekMsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVoRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDOUMsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFHdkU7OztHQUdHO0FBQ0gsU0FBUyxlQUFlLENBQ3RCLEtBQTRDO0lBRTVDLE9BQU8sS0FBSyxZQUFZLE9BQU8sSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN2RixDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUNsQyxRQUFrQixFQUNsQixjQUE4QixFQUM5QixNQUFjO0lBRWQ7OztPQUdHO0lBQ0gsU0FBUyxnQkFBZ0IsQ0FDdkIsS0FBK0Q7UUFFL0QsSUFBSSxhQUFhLElBQUksS0FBSyxFQUFFO1lBQzFCLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxJQUFJO1lBQ0Ysb0JBQW9CO1lBQ3BCLE9BQU8sUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUM1QjtRQUFDLE1BQU07WUFDTix1QkFBdUI7WUFDdkIsT0FBTyxLQUF5QixDQUFDO1NBQ2xDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNILFNBQVMscUJBQXFCLENBQzVCLE9BQStCO1FBRS9CLElBQUksT0FBTyxDQUFDLFdBQVcsRUFBRTtZQUN2QixPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztnQkFDdkMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDO2dCQUMzQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztTQUM3QztRQUVELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsU0FBUyxZQUFZLENBQUMsS0FBd0MsRUFBRSxPQUErQjtRQUM3RixNQUFNLFdBQVcsR0FBRyxhQUFhLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQ25GLE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQztZQUM3QixjQUFjLEVBQUUsY0FBYyxDQUFDLFFBQVE7WUFDdkMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXLENBQUMsUUFBUTtZQUN4QyxTQUFTLEVBQUUsT0FBTyxDQUFDLG1CQUF5QztTQUM3RCxDQUFDLENBQUM7UUFFSCxNQUFNLFlBQVksR0FBRyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUVwRCxPQUFPLGFBQWEsQ0FDbEIsWUFBWSxDQUFDLElBQUksQ0FDZixJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ1AsUUFBUSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDakIsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQzFCLE1BQU0sSUFBSSwyQkFBMkIsQ0FDbkMsV0FBVyxLQUFLLENBQUMsUUFBUSxFQUFFLHVCQUF1QixFQUNsRCxLQUFLLENBQ04sQ0FBQzthQUNIO2lCQUFNO2dCQUNMLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ2xCO1FBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELE9BQU8sU0FBUyxhQUFhLENBQUMsU0FBbUM7UUFDL0QsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ3pDLE1BQU0sTUFBTSxHQUFHLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzlDLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUNwRSxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDO2lCQUN4QixJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUM5QyxJQUFJLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ3RCLE9BQU87Z0JBQ1AsV0FBVzthQUNaLENBQUMsQ0FBQyxDQUFDO1FBQ1IsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FDM0MsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUMxRCxDQUFDO0lBQ0osQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdG9yLCBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIsIFVybFRyZWUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBDb21wb25lbnRSZW5kZXJpbmcgfSBmcm9tICdAc2l0ZWNvcmUtanNzL3NpdGVjb3JlLWpzcy9sYXlvdXQnO1xyXG5pbXBvcnQgeyBsYXN0VmFsdWVGcm9tLCBvZiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBtZXJnZU1hcCwgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgQ29tcG9uZW50RmFjdG9yeVJlc3VsdCB9IGZyb20gJy4vanNzLWNvbXBvbmVudC1mYWN0b3J5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyB3cmFwSW50b09ic2VydmFibGUgfSBmcm9tICcuLi91dGlscyc7XHJcbmltcG9ydCB7IEpzc0NhbkFjdGl2YXRlUmVkaXJlY3RFcnJvciB9IGZyb20gJy4vanNzLWNhbi1hY3RpdmF0ZS1lcnJvcic7XHJcbmltcG9ydCB7IEpzc0NhbkFjdGl2YXRlLCBKc3NDYW5BY3RpdmF0ZUZuIH0gZnJvbSAnLi9wbGFjZWhvbGRlci50b2tlbic7XHJcblxyXG4vKipcclxuICogQHBhcmFtIHtib29sZWFuIHwgc3RyaW5nIHwgc3RyaW5nW10gfCBVcmxUcmVlfSB2YWx1ZVxyXG4gKiBAcmV0dXJucyBpbnN0YW5jZSBvZiB2YWx1ZVxyXG4gKi9cclxuZnVuY3Rpb24gaXNSZWRpcmVjdFZhbHVlKFxyXG4gIHZhbHVlOiBib29sZWFuIHwgc3RyaW5nIHwgc3RyaW5nW10gfCBVcmxUcmVlXHJcbik6IHZhbHVlIGlzIHN0cmluZyB8IHN0cmluZ1tdIHwgVXJsVHJlZSB7XHJcbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgVXJsVHJlZSB8fCB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpO1xyXG59XHJcblxyXG4vKipcclxuICogUmVzb2x2ZXMgY29tcG9uZW50cyBiYXNlZCBvbiBwcm92aWRlZCBndWFyZHNcclxuICogQHBhcmFtIHtJbmplY3Rvcn0gaW5qZWN0b3JcclxuICogQHBhcmFtIHtBY3RpdmF0ZWRSb3V0ZX0gYWN0aXZhdGVkUm91dGVcclxuICogQHBhcmFtIHtSb3V0ZXJ9IHJvdXRlclxyXG4gKiBAcmV0dXJucyB7KGZhY3RvcmllczogQ29tcG9uZW50RmFjdG9yeVJlc3VsdFtdKSA9PiBQcm9taXNlPENvbXBvbmVudEZhY3RvcnlSZXN1bHRbXT59IGZhY3RvcnlcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBndWFyZFJlc29sdmVyRmFjdG9yeShcclxuICBpbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gIHJvdXRlcjogUm91dGVyXHJcbikge1xyXG4gIC8qKlxyXG4gICAqIEBwYXJhbSB7SnNzQ2FuQWN0aXZhdGUgfCBUeXBlPEpzc0NhbkFjdGl2YXRlPiB8IEpzc0NhbkFjdGl2YXRlRm59IGd1YXJkXHJcbiAgICogQHJldHVybnMgcmVzb2x2ZWQgZ3VhcmRcclxuICAgKi9cclxuICBmdW5jdGlvbiBnZXRHdWFyZEluc3RhbmNlKFxyXG4gICAgZ3VhcmQ6IEpzc0NhbkFjdGl2YXRlIHwgVHlwZTxKc3NDYW5BY3RpdmF0ZT4gfCBKc3NDYW5BY3RpdmF0ZUZuXHJcbiAgKTogSnNzQ2FuQWN0aXZhdGUgfCBKc3NDYW5BY3RpdmF0ZUZuIHtcclxuICAgIGlmICgnY2FuQWN0aXZhdGUnIGluIGd1YXJkKSB7XHJcbiAgICAgIHJldHVybiBndWFyZDtcclxuICAgIH1cclxuXHJcbiAgICB0cnkge1xyXG4gICAgICAvLyBDbGFzcyBpcyBwcm92aWRlZFxyXG4gICAgICByZXR1cm4gaW5qZWN0b3IuZ2V0KGd1YXJkKTtcclxuICAgIH0gY2F0Y2gge1xyXG4gICAgICAvLyBGdW5jdGlvbiBpcyBwcm92aWRlZFxyXG4gICAgICByZXR1cm4gZ3VhcmQgYXMgSnNzQ2FuQWN0aXZhdGVGbjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBwYXJhbSB7Q29tcG9uZW50RmFjdG9yeVJlc3VsdH0gZmFjdG9yeVxyXG4gICAqIEByZXR1cm5zIHsoSnNzQ2FuQWN0aXZhdGUgfCBKc3NDYW5BY3RpdmF0ZUZuKVtdfSBndWFyZCBpbnN0YW5jZXNcclxuICAgKi9cclxuICBmdW5jdGlvbiBjb2xsZWN0R3VhcmRJbnN0YW5jZXMoXHJcbiAgICBmYWN0b3J5OiBDb21wb25lbnRGYWN0b3J5UmVzdWx0XHJcbiAgKTogKEpzc0NhbkFjdGl2YXRlIHwgSnNzQ2FuQWN0aXZhdGVGbilbXSB7XHJcbiAgICBpZiAoZmFjdG9yeS5jYW5BY3RpdmF0ZSkge1xyXG4gICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShmYWN0b3J5LmNhbkFjdGl2YXRlKVxyXG4gICAgICAgID8gZmFjdG9yeS5jYW5BY3RpdmF0ZS5tYXAoZ2V0R3VhcmRJbnN0YW5jZSlcclxuICAgICAgICA6IFtnZXRHdWFyZEluc3RhbmNlKGZhY3RvcnkuY2FuQWN0aXZhdGUpXTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gW107XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7SnNzQ2FuQWN0aXZhdGUgfCBKc3NDYW5BY3RpdmF0ZUZufSBndWFyZFxyXG4gICAqIEBwYXJhbSB7Q29tcG9uZW50RmFjdG9yeVJlc3VsdH0gZmFjdG9yeVxyXG4gICAqIEByZXR1cm5zIGNhbkFjdGl2YXRlXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gcmVzb2x2ZUd1YXJkKGd1YXJkOiBKc3NDYW5BY3RpdmF0ZSB8IEpzc0NhbkFjdGl2YXRlRm4sIGZhY3Rvcnk6IENvbXBvbmVudEZhY3RvcnlSZXN1bHQpIHtcclxuICAgIGNvbnN0IGNhbkFjdGl2YXRlID0gJ2NhbkFjdGl2YXRlJyBpbiBndWFyZCA/IGd1YXJkLmNhbkFjdGl2YXRlLmJpbmQoZ3VhcmQpIDogZ3VhcmQ7XHJcbiAgICBjb25zdCBndWFyZFZhbHVlID0gY2FuQWN0aXZhdGUoe1xyXG4gICAgICBhY3RpdmF0ZWRSb3V0ZTogYWN0aXZhdGVkUm91dGUuc25hcHNob3QsXHJcbiAgICAgIHJvdXRlclN0YXRlOiByb3V0ZXIucm91dGVyU3RhdGUuc25hcHNob3QsXHJcbiAgICAgIHJlbmRlcmluZzogZmFjdG9yeS5jb21wb25lbnREZWZpbml0aW9uIGFzIENvbXBvbmVudFJlbmRlcmluZyxcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IGNhbkFjdGl2YXRlJCA9IHdyYXBJbnRvT2JzZXJ2YWJsZShndWFyZFZhbHVlKTtcclxuXHJcbiAgICByZXR1cm4gbGFzdFZhbHVlRnJvbShcclxuICAgICAgY2FuQWN0aXZhdGUkLnBpcGUoXHJcbiAgICAgICAgdGFrZSgxKSxcclxuICAgICAgICBtZXJnZU1hcCgodmFsdWUpID0+IHtcclxuICAgICAgICAgIGlmIChpc1JlZGlyZWN0VmFsdWUodmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBKc3NDYW5BY3RpdmF0ZVJlZGlyZWN0RXJyb3IoXHJcbiAgICAgICAgICAgICAgYFZhbHVlOiAnJHt2YWx1ZS50b1N0cmluZygpfScgaXMgYSByZWRpcmVjdCB2YWx1ZWAsXHJcbiAgICAgICAgICAgICAgdmFsdWVcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBvZih2YWx1ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHJldHVybiBmdW5jdGlvbiByZXNvbHZlR3VhcmRzKGZhY3RvcmllczogQ29tcG9uZW50RmFjdG9yeVJlc3VsdFtdKSB7XHJcbiAgICBjb25zdCByZXNvbHZlZCA9IGZhY3Rvcmllcy5tYXAoKGZhY3RvcnkpID0+IHtcclxuICAgICAgY29uc3QgZ3VhcmRzID0gY29sbGVjdEd1YXJkSW5zdGFuY2VzKGZhY3RvcnkpO1xyXG4gICAgICBjb25zdCBwZW5kaW5nID0gZ3VhcmRzLm1hcCgoZ3VhcmQpID0+IHJlc29sdmVHdWFyZChndWFyZCwgZmFjdG9yeSkpO1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5hbGwocGVuZGluZylcclxuICAgICAgICAudGhlbigoY2FuQWN0aXZlKSA9PiBjYW5BY3RpdmUuZXZlcnkoKHYpID0+IHYpKVxyXG4gICAgICAgIC50aGVuKChjYW5BY3RpdmF0ZSkgPT4gKHtcclxuICAgICAgICAgIGZhY3RvcnksXHJcbiAgICAgICAgICBjYW5BY3RpdmF0ZSxcclxuICAgICAgICB9KSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwocmVzb2x2ZWQpLnRoZW4oKG1hcHBlZCkgPT5cclxuICAgICAgbWFwcGVkLmZpbHRlcigobSkgPT4gbS5jYW5BY3RpdmF0ZSkubWFwKChtKSA9PiBtLmZhY3RvcnkpXHJcbiAgICApO1xyXG4gIH07XHJcbn1cclxuIl19
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Error thrown when a JssCanActivate guard returns a redirect value.
|
|
3
|
-
* The redirect value will be used to redirect the user to a different route.
|
|
4
|
-
*/
|
|
5
|
-
export class JssCanActivateRedirectError extends Error {
|
|
6
|
-
message;
|
|
7
|
-
redirectValue;
|
|
8
|
-
constructor(message, redirectValue) {
|
|
9
|
-
super(message);
|
|
10
|
-
this.message = message;
|
|
11
|
-
this.redirectValue = redirectValue;
|
|
12
|
-
this.name = 'JssCanActivateRedirectError';
|
|
13
|
-
}
|
|
14
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Error thrown when a JssCanActivate guard returns a redirect value.
|
|
3
|
+
* The redirect value will be used to redirect the user to a different route.
|
|
4
|
+
*/
|
|
5
|
+
export class JssCanActivateRedirectError extends Error {
|
|
6
|
+
message;
|
|
7
|
+
redirectValue;
|
|
8
|
+
constructor(message, redirectValue) {
|
|
9
|
+
super(message);
|
|
10
|
+
this.message = message;
|
|
11
|
+
this.redirectValue = redirectValue;
|
|
12
|
+
this.name = 'JssCanActivateRedirectError';
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
15
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNzLWNhbi1hY3RpdmF0ZS1lcnJvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9qc3MtY2FuLWFjdGl2YXRlLWVycm9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBOzs7R0FHRztBQUNILE1BQU0sT0FBTywyQkFBNEIsU0FBUSxLQUFLO0lBQ2pDO0lBQXdCO0lBQTNDLFlBQW1CLE9BQWUsRUFBUyxhQUEwQztRQUNuRixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFERSxZQUFPLEdBQVAsT0FBTyxDQUFRO1FBQVMsa0JBQWEsR0FBYixhQUFhLENBQTZCO1FBRW5GLElBQUksQ0FBQyxJQUFJLEdBQUcsNkJBQTZCLENBQUM7SUFDNUMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVXJsVHJlZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcblxyXG4vKipcclxuICogRXJyb3IgdGhyb3duIHdoZW4gYSBKc3NDYW5BY3RpdmF0ZSBndWFyZCByZXR1cm5zIGEgcmVkaXJlY3QgdmFsdWUuXHJcbiAqIFRoZSByZWRpcmVjdCB2YWx1ZSB3aWxsIGJlIHVzZWQgdG8gcmVkaXJlY3QgdGhlIHVzZXIgdG8gYSBkaWZmZXJlbnQgcm91dGUuXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgSnNzQ2FuQWN0aXZhdGVSZWRpcmVjdEVycm9yIGV4dGVuZHMgRXJyb3Ige1xyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBtZXNzYWdlOiBzdHJpbmcsIHB1YmxpYyByZWRpcmVjdFZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSB8IFVybFRyZWUpIHtcclxuICAgIHN1cGVyKG1lc3NhZ2UpO1xyXG4gICAgdGhpcy5uYW1lID0gJ0pzc0NhbkFjdGl2YXRlUmVkaXJlY3RFcnJvcic7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -1,89 +1,89 @@
|
|
|
1
|
-
import { createNgModule, Inject, Injectable } from '@angular/core';
|
|
2
|
-
import { DYNAMIC_COMPONENT, PLACEHOLDER_COMPONENTS, PLACEHOLDER_LAZY_COMPONENTS, } from './placeholder.token';
|
|
3
|
-
import { RawComponent } from '../components/raw.component';
|
|
4
|
-
import { isRawRendering } from '../components/rendering';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
export class JssComponentFactoryService {
|
|
7
|
-
injector;
|
|
8
|
-
components;
|
|
9
|
-
lazyComponents;
|
|
10
|
-
componentMap;
|
|
11
|
-
lazyComponentMap;
|
|
12
|
-
constructor(injector, components, lazyComponents) {
|
|
13
|
-
this.injector = injector;
|
|
14
|
-
this.components = components;
|
|
15
|
-
this.lazyComponents = lazyComponents;
|
|
16
|
-
this.componentMap = new Map();
|
|
17
|
-
this.lazyComponentMap = new Map();
|
|
18
|
-
this.components.forEach((c) => this.componentMap.set(c.name, c));
|
|
19
|
-
if (this.lazyComponents) {
|
|
20
|
-
this.lazyComponents.forEach((c) => this.lazyComponentMap.set(c.path, c));
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
getComponent(component) {
|
|
24
|
-
const loadedComponent = this.componentMap.get(component.componentName);
|
|
25
|
-
if (loadedComponent) {
|
|
26
|
-
return Promise.resolve({
|
|
27
|
-
componentDefinition: component,
|
|
28
|
-
componentImplementation: loadedComponent.type,
|
|
29
|
-
canActivate: loadedComponent.canActivate,
|
|
30
|
-
resolve: loadedComponent.resolve,
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
const lazyComponent = this.lazyComponentMap.get(component.componentName);
|
|
34
|
-
if (lazyComponent) {
|
|
35
|
-
return lazyComponent.loadChildren().then((lazyChild) => {
|
|
36
|
-
let componentType = null;
|
|
37
|
-
const moduleRef = createNgModule(lazyChild, this.injector);
|
|
38
|
-
const dynamicComponentType = moduleRef.injector.get(DYNAMIC_COMPONENT);
|
|
39
|
-
if (!dynamicComponentType) {
|
|
40
|
-
throw new Error(`JssComponentFactoryService: Lazy load module for component "${lazyComponent.path}" missing DYNAMIC_COMPONENT provider. Missing JssModule.forChild()?`);
|
|
41
|
-
}
|
|
42
|
-
if (component.componentName in dynamicComponentType) {
|
|
43
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
44
|
-
componentType = dynamicComponentType[component.componentName];
|
|
45
|
-
}
|
|
46
|
-
else {
|
|
47
|
-
if (typeof dynamicComponentType === 'function') {
|
|
48
|
-
componentType = dynamicComponentType;
|
|
49
|
-
}
|
|
50
|
-
else {
|
|
51
|
-
throw new Error(`JssComponentFactoryService: Lazy load module for component "${lazyComponent.path}" missing DYNAMIC_COMPONENT provider. Missing JssModule.forChild()?`);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
return {
|
|
55
|
-
componentDefinition: component,
|
|
56
|
-
componentImplementation: componentType,
|
|
57
|
-
componentModuleRef: moduleRef,
|
|
58
|
-
canActivate: lazyComponent.canActivate,
|
|
59
|
-
resolve: lazyComponent.resolve,
|
|
60
|
-
};
|
|
61
|
-
});
|
|
62
|
-
}
|
|
63
|
-
return Promise.resolve({
|
|
64
|
-
componentDefinition: component,
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
getComponents(components) {
|
|
68
|
-
// acquire all components and keep them in order while handling their potential async-ness
|
|
69
|
-
return Promise.all(components.map((component) => isRawRendering(component) ? this.getRawComponent(component) : this.getComponent(component)));
|
|
70
|
-
}
|
|
71
|
-
getRawComponent(component) {
|
|
72
|
-
return Promise.resolve({
|
|
73
|
-
componentImplementation: RawComponent,
|
|
74
|
-
componentDefinition: component,
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: JssComponentFactoryService, deps: [{ token: i0.Injector }, { token: PLACEHOLDER_COMPONENTS }, { token: PLACEHOLDER_LAZY_COMPONENTS }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
78
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: JssComponentFactoryService });
|
|
79
|
-
}
|
|
80
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: JssComponentFactoryService, decorators: [{
|
|
81
|
-
type: Injectable
|
|
82
|
-
}], ctorParameters: function () { return [{ type: i0.Injector }, { type: undefined, decorators: [{
|
|
83
|
-
type: Inject,
|
|
84
|
-
args: [PLACEHOLDER_COMPONENTS]
|
|
85
|
-
}] }, { type: undefined, decorators: [{
|
|
86
|
-
type: Inject,
|
|
87
|
-
args: [PLACEHOLDER_LAZY_COMPONENTS]
|
|
88
|
-
}] }]; } });
|
|
1
|
+
import { createNgModule, Inject, Injectable } from '@angular/core';
|
|
2
|
+
import { DYNAMIC_COMPONENT, PLACEHOLDER_COMPONENTS, PLACEHOLDER_LAZY_COMPONENTS, } from './placeholder.token';
|
|
3
|
+
import { RawComponent } from '../components/raw.component';
|
|
4
|
+
import { isRawRendering } from '../components/rendering';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export class JssComponentFactoryService {
|
|
7
|
+
injector;
|
|
8
|
+
components;
|
|
9
|
+
lazyComponents;
|
|
10
|
+
componentMap;
|
|
11
|
+
lazyComponentMap;
|
|
12
|
+
constructor(injector, components, lazyComponents) {
|
|
13
|
+
this.injector = injector;
|
|
14
|
+
this.components = components;
|
|
15
|
+
this.lazyComponents = lazyComponents;
|
|
16
|
+
this.componentMap = new Map();
|
|
17
|
+
this.lazyComponentMap = new Map();
|
|
18
|
+
this.components.forEach((c) => this.componentMap.set(c.name, c));
|
|
19
|
+
if (this.lazyComponents) {
|
|
20
|
+
this.lazyComponents.forEach((c) => this.lazyComponentMap.set(c.path, c));
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
getComponent(component) {
|
|
24
|
+
const loadedComponent = this.componentMap.get(component.componentName);
|
|
25
|
+
if (loadedComponent) {
|
|
26
|
+
return Promise.resolve({
|
|
27
|
+
componentDefinition: component,
|
|
28
|
+
componentImplementation: loadedComponent.type,
|
|
29
|
+
canActivate: loadedComponent.canActivate,
|
|
30
|
+
resolve: loadedComponent.resolve,
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
const lazyComponent = this.lazyComponentMap.get(component.componentName);
|
|
34
|
+
if (lazyComponent) {
|
|
35
|
+
return lazyComponent.loadChildren().then((lazyChild) => {
|
|
36
|
+
let componentType = null;
|
|
37
|
+
const moduleRef = createNgModule(lazyChild, this.injector);
|
|
38
|
+
const dynamicComponentType = moduleRef.injector.get(DYNAMIC_COMPONENT);
|
|
39
|
+
if (!dynamicComponentType) {
|
|
40
|
+
throw new Error(`JssComponentFactoryService: Lazy load module for component "${lazyComponent.path}" missing DYNAMIC_COMPONENT provider. Missing JssModule.forChild()?`);
|
|
41
|
+
}
|
|
42
|
+
if (component.componentName in dynamicComponentType) {
|
|
43
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
44
|
+
componentType = dynamicComponentType[component.componentName];
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
if (typeof dynamicComponentType === 'function') {
|
|
48
|
+
componentType = dynamicComponentType;
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
throw new Error(`JssComponentFactoryService: Lazy load module for component "${lazyComponent.path}" missing DYNAMIC_COMPONENT provider. Missing JssModule.forChild()?`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return {
|
|
55
|
+
componentDefinition: component,
|
|
56
|
+
componentImplementation: componentType,
|
|
57
|
+
componentModuleRef: moduleRef,
|
|
58
|
+
canActivate: lazyComponent.canActivate,
|
|
59
|
+
resolve: lazyComponent.resolve,
|
|
60
|
+
};
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
return Promise.resolve({
|
|
64
|
+
componentDefinition: component,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
getComponents(components) {
|
|
68
|
+
// acquire all components and keep them in order while handling their potential async-ness
|
|
69
|
+
return Promise.all(components.map((component) => isRawRendering(component) ? this.getRawComponent(component) : this.getComponent(component)));
|
|
70
|
+
}
|
|
71
|
+
getRawComponent(component) {
|
|
72
|
+
return Promise.resolve({
|
|
73
|
+
componentImplementation: RawComponent,
|
|
74
|
+
componentDefinition: component,
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: JssComponentFactoryService, deps: [{ token: i0.Injector }, { token: PLACEHOLDER_COMPONENTS }, { token: PLACEHOLDER_LAZY_COMPONENTS }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
78
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: JssComponentFactoryService });
|
|
79
|
+
}
|
|
80
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: JssComponentFactoryService, decorators: [{
|
|
81
|
+
type: Injectable
|
|
82
|
+
}], ctorParameters: function () { return [{ type: i0.Injector }, { type: undefined, decorators: [{
|
|
83
|
+
type: Inject,
|
|
84
|
+
args: [PLACEHOLDER_COMPONENTS]
|
|
85
|
+
}] }, { type: undefined, decorators: [{
|
|
86
|
+
type: Inject,
|
|
87
|
+
args: [PLACEHOLDER_LAZY_COMPONENTS]
|
|
88
|
+
}] }]; } });
|
|
89
89
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNzLWNvbXBvbmVudC1mYWN0b3J5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvanNzLWNvbXBvbmVudC1mYWN0b3J5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUErQixNQUFNLGVBQWUsQ0FBQztBQUVoRyxPQUFPLEVBR0wsaUJBQWlCLEVBSWpCLHNCQUFzQixFQUN0QiwyQkFBMkIsR0FDNUIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDOztBQWdCekQsTUFBTSxPQUFPLDBCQUEwQjtJQUszQjtJQUNnQztJQUNLO0lBTnZDLFlBQVksQ0FBb0M7SUFDaEQsZ0JBQWdCLENBQXNDO0lBRTlELFlBQ1UsUUFBa0IsRUFDYyxVQUFrQyxFQUM3QixjQUF3QztRQUY3RSxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2MsZUFBVSxHQUFWLFVBQVUsQ0FBd0I7UUFDN0IsbUJBQWMsR0FBZCxjQUFjLENBQTBCO1FBRXJGLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUVsQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRWpFLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUN2QixJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDMUU7SUFDSCxDQUFDO0lBRUQsWUFBWSxDQUFDLFNBQTZCO1FBQ3hDLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUV2RSxJQUFJLGVBQWUsRUFBRTtZQUNuQixPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUM7Z0JBQ3JCLG1CQUFtQixFQUFFLFNBQVM7Z0JBQzlCLHVCQUF1QixFQUFFLGVBQWUsQ0FBQyxJQUFJO2dCQUM3QyxXQUFXLEVBQUUsZUFBZSxDQUFDLFdBQVc7Z0JBQ3hDLE9BQU8sRUFBRSxlQUFlLENBQUMsT0FBTzthQUNqQyxDQUFDLENBQUM7U0FDSjtRQUVELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRXpFLElBQUksYUFBYSxFQUFFO1lBQ2pCLE9BQU8sYUFBYSxDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO2dCQUNyRCxJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUM7Z0JBQ3pCLE1BQU0sU0FBUyxHQUFHLGNBQWMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUMzRCxNQUFNLG9CQUFvQixHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUM7Z0JBQ3ZFLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtvQkFDekIsTUFBTSxJQUFJLEtBQUssQ0FDYiwrREFBK0QsYUFBYSxDQUFDLElBQUkscUVBQXFFLENBQ3ZKLENBQUM7aUJBQ0g7Z0JBRUQsSUFBSSxTQUFTLENBQUMsYUFBYSxJQUFJLG9CQUFvQixFQUFFO29CQUNuRCw4REFBOEQ7b0JBQzlELGFBQWEsR0FBSSxvQkFBNkMsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUM7aUJBQ3pGO3FCQUFNO29CQUNMLElBQUksT0FBTyxvQkFBb0IsS0FBSyxVQUFVLEVBQUU7d0JBQzlDLGFBQWEsR0FBRyxvQkFBb0IsQ0FBQztxQkFDdEM7eUJBQU07d0JBQ0wsTUFBTSxJQUFJLEtBQUssQ0FDYiwrREFBK0QsYUFBYSxDQUFDLElBQUkscUVBQXFFLENBQ3ZKLENBQUM7cUJBQ0g7aUJBQ0Y7Z0JBRUQsT0FBTztvQkFDTCxtQkFBbUIsRUFBRSxTQUFTO29CQUM5Qix1QkFBdUIsRUFBRSxhQUFhO29CQUN0QyxrQkFBa0IsRUFBRSxTQUFTO29CQUM3QixXQUFXLEVBQUUsYUFBYSxDQUFDLFdBQVc7b0JBQ3RDLE9BQU8sRUFBRSxhQUFhLENBQUMsT0FBTztpQkFDL0IsQ0FBQztZQUNKLENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUM7WUFDckIsbUJBQW1CLEVBQUUsU0FBUztTQUMvQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsYUFBYSxDQUNYLFVBQTREO1FBRTVELDBGQUEwRjtRQUMxRixPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQ2hCLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUMzQixjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQzNGLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFTyxlQUFlLENBQUMsU0FBK0I7UUFDckQsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDO1lBQ3JCLHVCQUF1QixFQUFFLFlBQVk7WUFDckMsbUJBQW1CLEVBQUUsU0FBUztTQUMvQixDQUFDLENBQUM7SUFDTCxDQUFDO3dHQXhGVSwwQkFBMEIsMENBTTNCLHNCQUFzQixhQUN0QiwyQkFBMkI7NEdBUDFCLDBCQUEwQjs7NEZBQTFCLDBCQUEwQjtrQkFEdEMsVUFBVTs7MEJBT04sTUFBTTsyQkFBQyxzQkFBc0I7OzBCQUM3QixNQUFNOzJCQUFDLDJCQUEyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZU5nTW9kdWxlLCBJbmplY3QsIEluamVjdGFibGUsIEluamVjdG9yLCBOZ01vZHVsZVJlZiwgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRSZW5kZXJpbmcsIEh0bWxFbGVtZW50UmVuZGVyaW5nIH0gZnJvbSAnQHNpdGVjb3JlLWpzcy9zaXRlY29yZS1qc3MvbGF5b3V0JztcclxuaW1wb3J0IHtcclxuICBDb21wb25lbnROYW1lQW5kTW9kdWxlLFxyXG4gIENvbXBvbmVudE5hbWVBbmRUeXBlLFxyXG4gIERZTkFNSUNfQ09NUE9ORU5ULFxyXG4gIEpzc0NhbkFjdGl2YXRlLFxyXG4gIEpzc0NhbkFjdGl2YXRlRm4sXHJcbiAgSnNzUmVzb2x2ZSxcclxuICBQTEFDRUhPTERFUl9DT01QT05FTlRTLFxyXG4gIFBMQUNFSE9MREVSX0xBWllfQ09NUE9ORU5UUyxcclxufSBmcm9tICcuL3BsYWNlaG9sZGVyLnRva2VuJztcclxuaW1wb3J0IHsgUmF3Q29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9yYXcuY29tcG9uZW50JztcclxuaW1wb3J0IHsgaXNSYXdSZW5kZXJpbmcgfSBmcm9tICcuLi9jb21wb25lbnRzL3JlbmRlcmluZyc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudEZhY3RvcnlSZXN1bHQge1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgY29tcG9uZW50SW1wbGVtZW50YXRpb24/OiBUeXBlPGFueT47XHJcbiAgY29tcG9uZW50RGVmaW5pdGlvbjogQ29tcG9uZW50UmVuZGVyaW5nIHwgSHRtbEVsZW1lbnRSZW5kZXJpbmc7XHJcbiAgY29tcG9uZW50TW9kdWxlUmVmPzogTmdNb2R1bGVSZWY8dW5rbm93bj47XHJcbiAgY2FuQWN0aXZhdGU/OlxyXG4gICAgfCBKc3NDYW5BY3RpdmF0ZVxyXG4gICAgfCBUeXBlPEpzc0NhbkFjdGl2YXRlPlxyXG4gICAgfCBKc3NDYW5BY3RpdmF0ZUZuXHJcbiAgICB8IEFycmF5PEpzc0NhbkFjdGl2YXRlIHwgSnNzQ2FuQWN0aXZhdGVGbiB8IFR5cGU8SnNzQ2FuQWN0aXZhdGU+PjtcclxuICByZXNvbHZlPzogeyBba2V5OiBzdHJpbmddOiBKc3NSZXNvbHZlPGFueT4gfCBUeXBlPEpzc1Jlc29sdmU8YW55Pj4gfTtcclxufVxyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgSnNzQ29tcG9uZW50RmFjdG9yeVNlcnZpY2Uge1xyXG4gIHByaXZhdGUgY29tcG9uZW50TWFwOiBNYXA8c3RyaW5nLCBDb21wb25lbnROYW1lQW5kVHlwZT47XHJcbiAgcHJpdmF0ZSBsYXp5Q29tcG9uZW50TWFwOiBNYXA8c3RyaW5nLCBDb21wb25lbnROYW1lQW5kTW9kdWxlPjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcclxuICAgIEBJbmplY3QoUExBQ0VIT0xERVJfQ09NUE9ORU5UUykgcHJpdmF0ZSBjb21wb25lbnRzOiBDb21wb25lbnROYW1lQW5kVHlwZVtdLFxyXG4gICAgQEluamVjdChQTEFDRUhPTERFUl9MQVpZX0NPTVBPTkVOVFMpIHByaXZhdGUgbGF6eUNvbXBvbmVudHM6IENvbXBvbmVudE5hbWVBbmRNb2R1bGVbXVxyXG4gICkge1xyXG4gICAgdGhpcy5jb21wb25lbnRNYXAgPSBuZXcgTWFwKCk7XHJcbiAgICB0aGlzLmxhenlDb21wb25lbnRNYXAgPSBuZXcgTWFwKCk7XHJcblxyXG4gICAgdGhpcy5jb21wb25lbnRzLmZvckVhY2goKGMpID0+IHRoaXMuY29tcG9uZW50TWFwLnNldChjLm5hbWUsIGMpKTtcclxuXHJcbiAgICBpZiAodGhpcy5sYXp5Q29tcG9uZW50cykge1xyXG4gICAgICB0aGlzLmxhenlDb21wb25lbnRzLmZvckVhY2goKGMpID0+IHRoaXMubGF6eUNvbXBvbmVudE1hcC5zZXQoYy5wYXRoLCBjKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRDb21wb25lbnQoY29tcG9uZW50OiBDb21wb25lbnRSZW5kZXJpbmcpOiBQcm9taXNlPENvbXBvbmVudEZhY3RvcnlSZXN1bHQ+IHtcclxuICAgIGNvbnN0IGxvYWRlZENvbXBvbmVudCA9IHRoaXMuY29tcG9uZW50TWFwLmdldChjb21wb25lbnQuY29tcG9uZW50TmFtZSk7XHJcblxyXG4gICAgaWYgKGxvYWRlZENvbXBvbmVudCkge1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtcclxuICAgICAgICBjb21wb25lbnREZWZpbml0aW9uOiBjb21wb25lbnQsXHJcbiAgICAgICAgY29tcG9uZW50SW1wbGVtZW50YXRpb246IGxvYWRlZENvbXBvbmVudC50eXBlLFxyXG4gICAgICAgIGNhbkFjdGl2YXRlOiBsb2FkZWRDb21wb25lbnQuY2FuQWN0aXZhdGUsXHJcbiAgICAgICAgcmVzb2x2ZTogbG9hZGVkQ29tcG9uZW50LnJlc29sdmUsXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGxhenlDb21wb25lbnQgPSB0aGlzLmxhenlDb21wb25lbnRNYXAuZ2V0KGNvbXBvbmVudC5jb21wb25lbnROYW1lKTtcclxuXHJcbiAgICBpZiAobGF6eUNvbXBvbmVudCkge1xyXG4gICAgICByZXR1cm4gbGF6eUNvbXBvbmVudC5sb2FkQ2hpbGRyZW4oKS50aGVuKChsYXp5Q2hpbGQpID0+IHtcclxuICAgICAgICBsZXQgY29tcG9uZW50VHlwZSA9IG51bGw7XHJcbiAgICAgICAgY29uc3QgbW9kdWxlUmVmID0gY3JlYXRlTmdNb2R1bGUobGF6eUNoaWxkLCB0aGlzLmluamVjdG9yKTtcclxuICAgICAgICBjb25zdCBkeW5hbWljQ29tcG9uZW50VHlwZSA9IG1vZHVsZVJlZi5pbmplY3Rvci5nZXQoRFlOQU1JQ19DT01QT05FTlQpO1xyXG4gICAgICAgIGlmICghZHluYW1pY0NvbXBvbmVudFR5cGUpIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgICAgYEpzc0NvbXBvbmVudEZhY3RvcnlTZXJ2aWNlOiBMYXp5IGxvYWQgbW9kdWxlIGZvciBjb21wb25lbnQgXCIke2xhenlDb21wb25lbnQucGF0aH1cIiBtaXNzaW5nIERZTkFNSUNfQ09NUE9ORU5UIHByb3ZpZGVyLiBNaXNzaW5nIEpzc01vZHVsZS5mb3JDaGlsZCgpP2BcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY29tcG9uZW50LmNvbXBvbmVudE5hbWUgaW4gZHluYW1pY0NvbXBvbmVudFR5cGUpIHtcclxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgICBjb21wb25lbnRUeXBlID0gKGR5bmFtaWNDb21wb25lbnRUeXBlIGFzIHsgW3M6IHN0cmluZ106IGFueSB9KVtjb21wb25lbnQuY29tcG9uZW50TmFtZV07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmICh0eXBlb2YgZHluYW1pY0NvbXBvbmVudFR5cGUgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgY29tcG9uZW50VHlwZSA9IGR5bmFtaWNDb21wb25lbnRUeXBlO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgICAgIGBKc3NDb21wb25lbnRGYWN0b3J5U2VydmljZTogTGF6eSBsb2FkIG1vZHVsZSBmb3IgY29tcG9uZW50IFwiJHtsYXp5Q29tcG9uZW50LnBhdGh9XCIgbWlzc2luZyBEWU5BTUlDX0NPTVBPTkVOVCBwcm92aWRlci4gTWlzc2luZyBKc3NNb2R1bGUuZm9yQ2hpbGQoKT9gXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgY29tcG9uZW50RGVmaW5pdGlvbjogY29tcG9uZW50LFxyXG4gICAgICAgICAgY29tcG9uZW50SW1wbGVtZW50YXRpb246IGNvbXBvbmVudFR5cGUsXHJcbiAgICAgICAgICBjb21wb25lbnRNb2R1bGVSZWY6IG1vZHVsZVJlZixcclxuICAgICAgICAgIGNhbkFjdGl2YXRlOiBsYXp5Q29tcG9uZW50LmNhbkFjdGl2YXRlLFxyXG4gICAgICAgICAgcmVzb2x2ZTogbGF6eUNvbXBvbmVudC5yZXNvbHZlLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe1xyXG4gICAgICBjb21wb25lbnREZWZpbml0aW9uOiBjb21wb25lbnQsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldENvbXBvbmVudHMoXHJcbiAgICBjb21wb25lbnRzOiBBcnJheTxDb21wb25lbnRSZW5kZXJpbmcgfCBIdG1sRWxlbWVudFJlbmRlcmluZz5cclxuICApOiBQcm9taXNlPENvbXBvbmVudEZhY3RvcnlSZXN1bHRbXT4ge1xyXG4gICAgLy8gYWNxdWlyZSBhbGwgY29tcG9uZW50cyBhbmQga2VlcCB0aGVtIGluIG9yZGVyIHdoaWxlIGhhbmRsaW5nIHRoZWlyIHBvdGVudGlhbCBhc3luYy1uZXNzXHJcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoXHJcbiAgICAgIGNvbXBvbmVudHMubWFwKChjb21wb25lbnQpID0+XHJcbiAgICAgICAgaXNSYXdSZW5kZXJpbmcoY29tcG9uZW50KSA/IHRoaXMuZ2V0UmF3Q29tcG9uZW50KGNvbXBvbmVudCkgOiB0aGlzLmdldENvbXBvbmVudChjb21wb25lbnQpXHJcbiAgICAgIClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFJhd0NvbXBvbmVudChjb21wb25lbnQ6IEh0bWxFbGVtZW50UmVuZGVyaW5nKTogUHJvbWlzZTxDb21wb25lbnRGYWN0b3J5UmVzdWx0PiB7XHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtcclxuICAgICAgY29tcG9uZW50SW1wbGVtZW50YXRpb246IFJhd0NvbXBvbmVudCxcclxuICAgICAgY29tcG9uZW50RGVmaW5pdGlvbjogY29tcG9uZW50LFxyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|