@angular/cdk 14.2.2 → 15.0.0-next.1
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/a11y/index.d.ts +3 -3
- package/accordion/index.d.ts +2 -2
- package/bidi/index.d.ts +1 -1
- package/clipboard/index.d.ts +1 -1
- package/dialog/index.d.ts +1 -1
- package/drag-drop/index.d.ts +6 -6
- package/esm2020/a11y/a11y-module.mjs +5 -5
- package/esm2020/a11y/aria-describer/aria-describer.mjs +4 -4
- package/esm2020/a11y/focus-monitor/focus-monitor.mjs +7 -7
- package/esm2020/a11y/focus-trap/configurable-focus-trap-factory.mjs +4 -4
- package/esm2020/a11y/focus-trap/focus-trap-manager.mjs +4 -4
- package/esm2020/a11y/focus-trap/focus-trap.mjs +7 -7
- package/esm2020/a11y/high-contrast-mode/high-contrast-mode-detector.mjs +4 -4
- package/esm2020/a11y/input-modality/input-modality-detector.mjs +4 -4
- package/esm2020/a11y/interactivity-checker/interactivity-checker.mjs +4 -4
- package/esm2020/a11y/live-announcer/live-announcer.mjs +7 -7
- package/esm2020/accordion/accordion-item.mjs +4 -4
- package/esm2020/accordion/accordion-module.mjs +5 -5
- package/esm2020/accordion/accordion.mjs +4 -4
- package/esm2020/bidi/bidi-module.mjs +5 -5
- package/esm2020/bidi/dir.mjs +4 -4
- package/esm2020/bidi/directionality.mjs +4 -4
- package/esm2020/clipboard/clipboard-module.mjs +5 -5
- package/esm2020/clipboard/clipboard.mjs +4 -4
- package/esm2020/clipboard/copy-to-clipboard.mjs +4 -4
- package/esm2020/collections/unique-selection-dispatcher.mjs +4 -4
- package/esm2020/dialog/dialog-container.mjs +4 -4
- package/esm2020/dialog/dialog-module.mjs +5 -5
- package/esm2020/dialog/dialog.mjs +4 -4
- package/esm2020/drag-drop/directives/drag-handle.mjs +4 -4
- package/esm2020/drag-drop/directives/drag-placeholder.mjs +4 -4
- package/esm2020/drag-drop/directives/drag-preview.mjs +4 -4
- package/esm2020/drag-drop/directives/drag.mjs +4 -4
- package/esm2020/drag-drop/directives/drop-list-group.mjs +4 -4
- package/esm2020/drag-drop/directives/drop-list.mjs +4 -4
- package/esm2020/drag-drop/drag-drop-module.mjs +5 -5
- package/esm2020/drag-drop/drag-drop-registry.mjs +4 -4
- package/esm2020/drag-drop/drag-drop.mjs +4 -4
- package/esm2020/layout/breakpoints-observer.mjs +4 -4
- package/esm2020/layout/layout-module.mjs +5 -5
- package/esm2020/layout/media-matcher.mjs +4 -4
- package/esm2020/listbox/listbox-module.mjs +5 -5
- package/esm2020/listbox/listbox.mjs +7 -7
- package/esm2020/menu/context-menu-trigger.mjs +7 -7
- package/esm2020/menu/menu-aim.mjs +7 -7
- package/esm2020/menu/menu-bar.mjs +4 -4
- package/esm2020/menu/menu-base.mjs +4 -4
- package/esm2020/menu/menu-group.mjs +4 -4
- package/esm2020/menu/menu-item-checkbox.mjs +4 -4
- package/esm2020/menu/menu-item-radio.mjs +4 -4
- package/esm2020/menu/menu-item-selectable.mjs +4 -4
- package/esm2020/menu/menu-item.mjs +4 -4
- package/esm2020/menu/menu-module.mjs +5 -5
- package/esm2020/menu/menu-stack.mjs +4 -4
- package/esm2020/menu/menu-trigger-base.mjs +4 -4
- package/esm2020/menu/menu-trigger.mjs +4 -4
- package/esm2020/menu/menu.mjs +4 -4
- package/esm2020/observers/observe-content.mjs +14 -14
- package/esm2020/overlay/dispatchers/base-overlay-dispatcher.mjs +4 -4
- package/esm2020/overlay/dispatchers/overlay-keyboard-dispatcher.mjs +4 -4
- package/esm2020/overlay/dispatchers/overlay-outside-click-dispatcher.mjs +4 -4
- package/esm2020/overlay/fullscreen-overlay-container.mjs +4 -4
- package/esm2020/overlay/overlay-container.mjs +4 -4
- package/esm2020/overlay/overlay-directives.mjs +7 -7
- package/esm2020/overlay/overlay-module.mjs +5 -5
- package/esm2020/overlay/overlay.mjs +4 -4
- package/esm2020/overlay/position/flexible-connected-position-strategy.mjs +1 -1
- package/esm2020/overlay/position/overlay-position-builder.mjs +4 -4
- package/esm2020/overlay/scroll/scroll-strategy-options.mjs +4 -4
- package/esm2020/platform/platform-module.mjs +5 -5
- package/esm2020/platform/platform.mjs +4 -4
- package/esm2020/portal/dom-portal-outlet.mjs +2 -2
- package/esm2020/portal/portal-directives.mjs +19 -20
- package/esm2020/portal/portal.mjs +3 -2
- package/esm2020/scrolling/fixed-size-virtual-scroll.mjs +4 -4
- package/esm2020/scrolling/scroll-dispatcher.mjs +4 -4
- package/esm2020/scrolling/scrollable.mjs +4 -4
- package/esm2020/scrolling/scrolling-module.mjs +9 -9
- package/esm2020/scrolling/viewport-ruler.mjs +4 -4
- package/esm2020/scrolling/virtual-for-of.mjs +4 -4
- package/esm2020/scrolling/virtual-scroll-viewport.mjs +4 -4
- package/esm2020/scrolling/virtual-scrollable-element.mjs +4 -4
- package/esm2020/scrolling/virtual-scrollable-window.mjs +4 -4
- package/esm2020/scrolling/virtual-scrollable.mjs +4 -4
- package/esm2020/stepper/step-header.mjs +4 -4
- package/esm2020/stepper/step-label.mjs +4 -4
- package/esm2020/stepper/stepper-button.mjs +7 -7
- package/esm2020/stepper/stepper-module.mjs +5 -5
- package/esm2020/stepper/stepper.mjs +7 -7
- package/esm2020/table/cell.mjs +22 -22
- package/esm2020/table/coalesced-style-scheduler.mjs +4 -4
- package/esm2020/table/row.mjs +28 -28
- package/esm2020/table/table-module.mjs +5 -5
- package/esm2020/table/table.mjs +19 -19
- package/esm2020/table/text-column.mjs +4 -4
- package/esm2020/text-field/autofill.mjs +7 -7
- package/esm2020/text-field/autosize.mjs +4 -4
- package/esm2020/text-field/text-field-module.mjs +5 -5
- package/esm2020/tree/nested-node.mjs +4 -4
- package/esm2020/tree/node.mjs +4 -4
- package/esm2020/tree/outlet.mjs +4 -4
- package/esm2020/tree/padding.mjs +4 -4
- package/esm2020/tree/toggle.mjs +4 -4
- package/esm2020/tree/tree-module.mjs +5 -5
- package/esm2020/tree/tree.mjs +7 -7
- package/esm2020/version.mjs +1 -1
- package/fesm2015/a11y.mjs +40 -40
- package/fesm2015/a11y.mjs.map +1 -1
- package/fesm2015/accordion.mjs +10 -10
- package/fesm2015/accordion.mjs.map +1 -1
- package/fesm2015/bidi.mjs +10 -10
- package/fesm2015/bidi.mjs.map +1 -1
- package/fesm2015/cdk.mjs +1 -1
- package/fesm2015/cdk.mjs.map +1 -1
- package/fesm2015/clipboard.mjs +10 -10
- package/fesm2015/clipboard.mjs.map +1 -1
- package/fesm2015/collections.mjs +3 -3
- package/fesm2015/collections.mjs.map +1 -1
- package/fesm2015/dialog.mjs +10 -10
- package/fesm2015/dialog.mjs.map +1 -1
- package/fesm2015/drag-drop.mjs +28 -28
- package/fesm2015/drag-drop.mjs.map +1 -1
- package/fesm2015/layout.mjs +10 -10
- package/fesm2015/layout.mjs.map +1 -1
- package/fesm2015/listbox.mjs +10 -10
- package/fesm2015/listbox.mjs.map +1 -1
- package/fesm2015/menu.mjs +49 -49
- package/fesm2015/menu.mjs.map +1 -1
- package/fesm2015/observers.mjs +13 -13
- package/fesm2015/observers.mjs.map +1 -1
- package/fesm2015/overlay.mjs +34 -34
- package/fesm2015/overlay.mjs.map +1 -1
- package/fesm2015/platform.mjs +7 -7
- package/fesm2015/platform.mjs.map +1 -1
- package/fesm2015/portal.mjs +21 -21
- package/fesm2015/portal.mjs.map +1 -1
- package/fesm2015/scrolling.mjs +35 -35
- package/fesm2015/scrolling.mjs.map +1 -1
- package/fesm2015/stepper.mjs +22 -22
- package/fesm2015/stepper.mjs.map +1 -1
- package/fesm2015/table.mjs +76 -76
- package/fesm2015/table.mjs.map +1 -1
- package/fesm2015/text-field.mjs +13 -13
- package/fesm2015/text-field.mjs.map +1 -1
- package/fesm2015/tree.mjs +25 -25
- package/fesm2015/tree.mjs.map +1 -1
- package/fesm2020/a11y.mjs +40 -40
- package/fesm2020/a11y.mjs.map +1 -1
- package/fesm2020/accordion.mjs +10 -10
- package/fesm2020/accordion.mjs.map +1 -1
- package/fesm2020/bidi.mjs +10 -10
- package/fesm2020/bidi.mjs.map +1 -1
- package/fesm2020/cdk.mjs +1 -1
- package/fesm2020/cdk.mjs.map +1 -1
- package/fesm2020/clipboard.mjs +10 -10
- package/fesm2020/clipboard.mjs.map +1 -1
- package/fesm2020/collections.mjs +3 -3
- package/fesm2020/collections.mjs.map +1 -1
- package/fesm2020/dialog.mjs +10 -10
- package/fesm2020/dialog.mjs.map +1 -1
- package/fesm2020/drag-drop.mjs +28 -28
- package/fesm2020/drag-drop.mjs.map +1 -1
- package/fesm2020/layout.mjs +10 -10
- package/fesm2020/layout.mjs.map +1 -1
- package/fesm2020/listbox.mjs +10 -10
- package/fesm2020/listbox.mjs.map +1 -1
- package/fesm2020/menu.mjs +49 -49
- package/fesm2020/menu.mjs.map +1 -1
- package/fesm2020/observers.mjs +13 -13
- package/fesm2020/observers.mjs.map +1 -1
- package/fesm2020/overlay.mjs +34 -34
- package/fesm2020/overlay.mjs.map +1 -1
- package/fesm2020/platform.mjs +7 -7
- package/fesm2020/platform.mjs.map +1 -1
- package/fesm2020/portal.mjs +21 -21
- package/fesm2020/portal.mjs.map +1 -1
- package/fesm2020/scrolling.mjs +35 -35
- package/fesm2020/scrolling.mjs.map +1 -1
- package/fesm2020/stepper.mjs +22 -22
- package/fesm2020/stepper.mjs.map +1 -1
- package/fesm2020/table.mjs +76 -76
- package/fesm2020/table.mjs.map +1 -1
- package/fesm2020/text-field.mjs +13 -13
- package/fesm2020/text-field.mjs.map +1 -1
- package/fesm2020/tree.mjs +25 -25
- package/fesm2020/tree.mjs.map +1 -1
- package/listbox/index.d.ts +2 -2
- package/menu/index.d.ts +12 -12
- package/observers/index.d.ts +1 -1
- package/overlay/index.d.ts +3 -3
- package/package.json +3 -3
- package/portal/index.d.ts +11 -7
- package/schematics/ng-add/index.js +1 -1
- package/schematics/ng-add/index.mjs +1 -1
- package/schematics/ng-update/devkit-migration-rule.js +3 -2
- package/schematics/ng-update/devkit-migration-rule.mjs +3 -2
- package/schematics/ng-update/public-api.d.ts +2 -0
- package/schematics/ng-update/public-api.js +3 -1
- package/schematics/ng-update/public-api.mjs +3 -1
- package/schematics/ng-update/upgrade-data.js +4 -1
- package/schematics/ng-update/upgrade-data.mjs +4 -1
- package/schematics/update-tool/file-system.d.ts +2 -2
- package/schematics/update-tool/file-system.js +1 -1
- package/schematics/update-tool/file-system.mjs +1 -1
- package/schematics/update-tool/index.d.ts +5 -2
- package/schematics/update-tool/index.js +5 -2
- package/schematics/update-tool/index.mjs +5 -2
- package/schematics/update-tool/migration.d.ts +10 -4
- package/schematics/update-tool/migration.js +5 -2
- package/schematics/update-tool/migration.mjs +5 -2
- package/schematics/update-tool/utils/diagnostics.d.ts +11 -0
- package/schematics/update-tool/utils/diagnostics.js +19 -0
- package/schematics/update-tool/utils/diagnostics.mjs +19 -0
- package/schematics/update-tool/utils/parse-tsconfig.d.ts +8 -0
- package/schematics/update-tool/utils/parse-tsconfig.js +25 -4
- package/schematics/update-tool/utils/parse-tsconfig.mjs +25 -4
- package/schematics/update-tool/utils/virtual-host.d.ts +2 -0
- package/schematics/update-tool/utils/virtual-host.js +11 -2
- package/schematics/update-tool/utils/virtual-host.mjs +11 -2
- package/schematics/utils/index.d.ts +0 -1
- package/schematics/utils/index.js +1 -5
- package/schematics/utils/index.mjs +1 -5
- package/scrolling/index.d.ts +7 -7
- package/stepper/index.d.ts +6 -6
- package/table/index.d.ts +23 -23
- package/text-field/index.d.ts +2 -2
- package/tree/index.d.ts +7 -7
- package/schematics/utils/ast/standalone.d.ts +0 -26
- package/schematics/utils/ast/standalone.js +0 -191
- package/schematics/utils/ast/standalone.mjs +0 -191
package/table/index.d.ts
CHANGED
|
@@ -55,7 +55,7 @@ export declare abstract class BaseRowDef implements OnChanges {
|
|
|
55
55
|
/** Gets this row def's relevant cell template from the provided column def. */
|
|
56
56
|
extractCellTemplate(column: CdkColumnDef): TemplateRef<any>;
|
|
57
57
|
static ɵfac: i0.ɵɵFactoryDeclaration<BaseRowDef, never>;
|
|
58
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<BaseRowDef, never, never, {}, {}, never, never, false>;
|
|
58
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<BaseRowDef, never, never, {}, {}, never, never, false, never>;
|
|
59
59
|
}
|
|
60
60
|
|
|
61
61
|
/**
|
|
@@ -101,7 +101,7 @@ export declare const CDK_TABLE_TEMPLATE = "\n <ng-content select=\"caption\"></
|
|
|
101
101
|
export declare class CdkCell extends BaseCdkCell {
|
|
102
102
|
constructor(columnDef: CdkColumnDef, elementRef: ElementRef);
|
|
103
103
|
static ɵfac: i0.ɵɵFactoryDeclaration<CdkCell, never>;
|
|
104
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<CdkCell, "cdk-cell, td[cdk-cell]", never, {}, {}, never, never, false>;
|
|
104
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<CdkCell, "cdk-cell, td[cdk-cell]", never, {}, {}, never, never, false, never>;
|
|
105
105
|
}
|
|
106
106
|
|
|
107
107
|
/**
|
|
@@ -112,7 +112,7 @@ export declare class CdkCellDef implements CellDef {
|
|
|
112
112
|
template: TemplateRef<any>;
|
|
113
113
|
constructor(/** @docs-private */ template: TemplateRef<any>);
|
|
114
114
|
static ɵfac: i0.ɵɵFactoryDeclaration<CdkCellDef, never>;
|
|
115
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<CdkCellDef, "[cdkCellDef]", never, {}, {}, never, never, false>;
|
|
115
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<CdkCellDef, "[cdkCellDef]", never, {}, {}, never, never, false, never>;
|
|
116
116
|
}
|
|
117
117
|
|
|
118
118
|
/**
|
|
@@ -136,7 +136,7 @@ export declare class CdkCellOutlet implements OnDestroy {
|
|
|
136
136
|
constructor(_viewContainer: ViewContainerRef);
|
|
137
137
|
ngOnDestroy(): void;
|
|
138
138
|
static ɵfac: i0.ɵɵFactoryDeclaration<CdkCellOutlet, never>;
|
|
139
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<CdkCellOutlet, "[cdkCellOutlet]", never, {}, {}, never, never, false>;
|
|
139
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<CdkCellOutlet, "[cdkCellOutlet]", never, {}, {}, never, never, false, never>;
|
|
140
140
|
}
|
|
141
141
|
|
|
142
142
|
/**
|
|
@@ -233,7 +233,7 @@ export declare class CdkColumnDef extends _CdkColumnDefBase implements CanStick
|
|
|
233
233
|
*/
|
|
234
234
|
protected _setNameInput(value: string): void;
|
|
235
235
|
static ɵfac: i0.ɵɵFactoryDeclaration<CdkColumnDef, [{ optional: true; }]>;
|
|
236
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<CdkColumnDef, "[cdkColumnDef]", never, { "sticky": "sticky"; "name": "cdkColumnDef"; "stickyEnd": "stickyEnd"; }, {}, ["cell", "headerCell", "footerCell"], never, false>;
|
|
236
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<CdkColumnDef, "[cdkColumnDef]", never, { "sticky": "sticky"; "name": "cdkColumnDef"; "stickyEnd": "stickyEnd"; }, {}, ["cell", "headerCell", "footerCell"], never, false, never>;
|
|
237
237
|
}
|
|
238
238
|
|
|
239
239
|
/** @docs-private */
|
|
@@ -246,7 +246,7 @@ declare const _CdkColumnDefBase: CanStickCtor & typeof CdkColumnDefBase;
|
|
|
246
246
|
export declare class CdkFooterCell extends BaseCdkCell {
|
|
247
247
|
constructor(columnDef: CdkColumnDef, elementRef: ElementRef);
|
|
248
248
|
static ɵfac: i0.ɵɵFactoryDeclaration<CdkFooterCell, never>;
|
|
249
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<CdkFooterCell, "cdk-footer-cell, td[cdk-footer-cell]", never, {}, {}, never, never, false>;
|
|
249
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<CdkFooterCell, "cdk-footer-cell, td[cdk-footer-cell]", never, {}, {}, never, never, false, never>;
|
|
250
250
|
}
|
|
251
251
|
|
|
252
252
|
/**
|
|
@@ -257,13 +257,13 @@ export declare class CdkFooterCellDef implements CellDef {
|
|
|
257
257
|
template: TemplateRef<any>;
|
|
258
258
|
constructor(/** @docs-private */ template: TemplateRef<any>);
|
|
259
259
|
static ɵfac: i0.ɵɵFactoryDeclaration<CdkFooterCellDef, never>;
|
|
260
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<CdkFooterCellDef, "[cdkFooterCellDef]", never, {}, {}, never, never, false>;
|
|
260
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<CdkFooterCellDef, "[cdkFooterCellDef]", never, {}, {}, never, never, false, never>;
|
|
261
261
|
}
|
|
262
262
|
|
|
263
263
|
/** Footer template container that contains the cell outlet. Adds the right class and role. */
|
|
264
264
|
export declare class CdkFooterRow {
|
|
265
265
|
static ɵfac: i0.ɵɵFactoryDeclaration<CdkFooterRow, never>;
|
|
266
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<CdkFooterRow, "cdk-footer-row, tr[cdk-footer-row]", never, {}, {}, never, never, false>;
|
|
266
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<CdkFooterRow, "cdk-footer-row, tr[cdk-footer-row]", never, {}, {}, never, never, false, never>;
|
|
267
267
|
}
|
|
268
268
|
|
|
269
269
|
/**
|
|
@@ -275,7 +275,7 @@ export declare class CdkFooterRowDef extends _CdkFooterRowDefBase implements Can
|
|
|
275
275
|
constructor(template: TemplateRef<any>, _differs: IterableDiffers, _table?: any);
|
|
276
276
|
ngOnChanges(changes: SimpleChanges): void;
|
|
277
277
|
static ɵfac: i0.ɵɵFactoryDeclaration<CdkFooterRowDef, [null, null, { optional: true; }]>;
|
|
278
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<CdkFooterRowDef, "[cdkFooterRowDef]", never, { "columns": "cdkFooterRowDef"; "sticky": "cdkFooterRowDefSticky"; }, {}, never, never, false>;
|
|
278
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<CdkFooterRowDef, "[cdkFooterRowDef]", never, { "columns": "cdkFooterRowDef"; "sticky": "cdkFooterRowDefSticky"; }, {}, never, never, false, never>;
|
|
279
279
|
}
|
|
280
280
|
|
|
281
281
|
/** @docs-private */
|
|
@@ -288,7 +288,7 @@ declare const _CdkFooterRowDefBase: CanStickCtor & typeof CdkFooterRowDefBase;
|
|
|
288
288
|
export declare class CdkHeaderCell extends BaseCdkCell {
|
|
289
289
|
constructor(columnDef: CdkColumnDef, elementRef: ElementRef);
|
|
290
290
|
static ɵfac: i0.ɵɵFactoryDeclaration<CdkHeaderCell, never>;
|
|
291
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<CdkHeaderCell, "cdk-header-cell, th[cdk-header-cell]", never, {}, {}, never, never, false>;
|
|
291
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<CdkHeaderCell, "cdk-header-cell, th[cdk-header-cell]", never, {}, {}, never, never, false, never>;
|
|
292
292
|
}
|
|
293
293
|
|
|
294
294
|
/**
|
|
@@ -299,13 +299,13 @@ export declare class CdkHeaderCellDef implements CellDef {
|
|
|
299
299
|
template: TemplateRef<any>;
|
|
300
300
|
constructor(/** @docs-private */ template: TemplateRef<any>);
|
|
301
301
|
static ɵfac: i0.ɵɵFactoryDeclaration<CdkHeaderCellDef, never>;
|
|
302
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<CdkHeaderCellDef, "[cdkHeaderCellDef]", never, {}, {}, never, never, false>;
|
|
302
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<CdkHeaderCellDef, "[cdkHeaderCellDef]", never, {}, {}, never, never, false, never>;
|
|
303
303
|
}
|
|
304
304
|
|
|
305
305
|
/** Header template container that contains the cell outlet. Adds the right class and role. */
|
|
306
306
|
export declare class CdkHeaderRow {
|
|
307
307
|
static ɵfac: i0.ɵɵFactoryDeclaration<CdkHeaderRow, never>;
|
|
308
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<CdkHeaderRow, "cdk-header-row, tr[cdk-header-row]", never, {}, {}, never, never, false>;
|
|
308
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<CdkHeaderRow, "cdk-header-row, tr[cdk-header-row]", never, {}, {}, never, never, false, never>;
|
|
309
309
|
}
|
|
310
310
|
|
|
311
311
|
/**
|
|
@@ -317,7 +317,7 @@ export declare class CdkHeaderRowDef extends _CdkHeaderRowDefBase implements Can
|
|
|
317
317
|
constructor(template: TemplateRef<any>, _differs: IterableDiffers, _table?: any);
|
|
318
318
|
ngOnChanges(changes: SimpleChanges): void;
|
|
319
319
|
static ɵfac: i0.ɵɵFactoryDeclaration<CdkHeaderRowDef, [null, null, { optional: true; }]>;
|
|
320
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<CdkHeaderRowDef, "[cdkHeaderRowDef]", never, { "columns": "cdkHeaderRowDef"; "sticky": "cdkHeaderRowDefSticky"; }, {}, never, never, false>;
|
|
320
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<CdkHeaderRowDef, "[cdkHeaderRowDef]", never, { "columns": "cdkHeaderRowDef"; "sticky": "cdkHeaderRowDefSticky"; }, {}, never, never, false, never>;
|
|
321
321
|
}
|
|
322
322
|
|
|
323
323
|
/** @docs-private */
|
|
@@ -332,7 +332,7 @@ export declare class CdkNoDataRow {
|
|
|
332
332
|
_contentClassName: string;
|
|
333
333
|
constructor(templateRef: TemplateRef<any>);
|
|
334
334
|
static ɵfac: i0.ɵɵFactoryDeclaration<CdkNoDataRow, never>;
|
|
335
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<CdkNoDataRow, "ng-template[cdkNoDataRow]", never, {}, {}, never, never, false>;
|
|
335
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<CdkNoDataRow, "ng-template[cdkNoDataRow]", never, {}, {}, never, never, false, never>;
|
|
336
336
|
}
|
|
337
337
|
|
|
338
338
|
/**
|
|
@@ -341,13 +341,13 @@ export declare class CdkNoDataRow {
|
|
|
341
341
|
*/
|
|
342
342
|
export declare class CdkRecycleRows {
|
|
343
343
|
static ɵfac: i0.ɵɵFactoryDeclaration<CdkRecycleRows, never>;
|
|
344
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<CdkRecycleRows, "cdk-table[recycleRows], table[cdk-table][recycleRows]", never, {}, {}, never, never, false>;
|
|
344
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<CdkRecycleRows, "cdk-table[recycleRows], table[cdk-table][recycleRows]", never, {}, {}, never, never, false, never>;
|
|
345
345
|
}
|
|
346
346
|
|
|
347
347
|
/** Data row template container that contains the cell outlet. Adds the right class and role. */
|
|
348
348
|
export declare class CdkRow {
|
|
349
349
|
static ɵfac: i0.ɵɵFactoryDeclaration<CdkRow, never>;
|
|
350
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<CdkRow, "cdk-row, tr[cdk-row]", never, {}, {}, never, never, false>;
|
|
350
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<CdkRow, "cdk-row, tr[cdk-row]", never, {}, {}, never, never, false, never>;
|
|
351
351
|
}
|
|
352
352
|
|
|
353
353
|
/**
|
|
@@ -366,7 +366,7 @@ export declare class CdkRowDef<T> extends BaseRowDef {
|
|
|
366
366
|
when: (index: number, rowData: T) => boolean;
|
|
367
367
|
constructor(template: TemplateRef<any>, _differs: IterableDiffers, _table?: any);
|
|
368
368
|
static ɵfac: i0.ɵɵFactoryDeclaration<CdkRowDef<any>, [null, null, { optional: true; }]>;
|
|
369
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<CdkRowDef<any>, "[cdkRowDef]", never, { "columns": "cdkRowDefColumns"; "when": "cdkRowDefWhen"; }, {}, never, never, false>;
|
|
369
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<CdkRowDef<any>, "[cdkRowDef]", never, { "columns": "cdkRowDefColumns"; "when": "cdkRowDefWhen"; }, {}, never, never, false, never>;
|
|
370
370
|
}
|
|
371
371
|
|
|
372
372
|
/**
|
|
@@ -749,7 +749,7 @@ export declare class CdkTable<T> implements AfterContentChecked, CollectionViewe
|
|
|
749
749
|
/** Creates or removes the no data row, depending on whether any data is being shown. */
|
|
750
750
|
private _updateNoDataRow;
|
|
751
751
|
static ɵfac: i0.ɵɵFactoryDeclaration<CdkTable<any>, [null, null, null, { attribute: "role"; }, { optional: true; }, null, null, null, null, null, { optional: true; skipSelf: true; }, { optional: true; }]>;
|
|
752
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<CdkTable<any>, "cdk-table, table[cdk-table]", ["cdkTable"], { "trackBy": "trackBy"; "dataSource": "dataSource"; "multiTemplateDataRows": "multiTemplateDataRows"; "fixedLayout": "fixedLayout"; }, { "contentChanged": "contentChanged"; }, ["_noDataRow", "_contentColumnDefs", "_contentRowDefs", "_contentHeaderRowDefs", "_contentFooterRowDefs"], ["caption", "colgroup, col"], false>;
|
|
752
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<CdkTable<any>, "cdk-table, table[cdk-table]", ["cdkTable"], { "trackBy": "trackBy"; "dataSource": "dataSource"; "multiTemplateDataRows": "multiTemplateDataRows"; "fixedLayout": "fixedLayout"; }, { "contentChanged": "contentChanged"; }, ["_noDataRow", "_contentColumnDefs", "_contentRowDefs", "_contentHeaderRowDefs", "_contentFooterRowDefs"], ["caption", "colgroup, col"], false, never>;
|
|
753
753
|
}
|
|
754
754
|
|
|
755
755
|
/** Possible types that can be set as the data source for a `CdkTable`. */
|
|
@@ -820,7 +820,7 @@ export declare class CdkTextColumn<T> implements OnDestroy, OnInit {
|
|
|
820
820
|
/** Synchronizes the column definition name with the text column name. */
|
|
821
821
|
private _syncColumnDefName;
|
|
822
822
|
static ɵfac: i0.ɵɵFactoryDeclaration<CdkTextColumn<any>, [{ optional: true; }, { optional: true; }]>;
|
|
823
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<CdkTextColumn<any>, "cdk-text-column", never, { "name": "name"; "headerText": "headerText"; "dataAccessor": "dataAccessor"; "justify": "justify"; }, {}, never, never, false>;
|
|
823
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<CdkTextColumn<any>, "cdk-text-column", never, { "name": "name"; "headerText": "headerText"; "dataAccessor": "dataAccessor"; "justify": "justify"; }, {}, never, never, false, never>;
|
|
824
824
|
}
|
|
825
825
|
|
|
826
826
|
/** Base interface for a cell definition. Captures a column's cell template definition. */
|
|
@@ -873,7 +873,7 @@ export declare class DataRowOutlet implements RowOutlet {
|
|
|
873
873
|
elementRef: ElementRef;
|
|
874
874
|
constructor(viewContainer: ViewContainerRef, elementRef: ElementRef);
|
|
875
875
|
static ɵfac: i0.ɵɵFactoryDeclaration<DataRowOutlet, never>;
|
|
876
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<DataRowOutlet, "[rowOutlet]", never, {}, {}, never, never, false>;
|
|
876
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<DataRowOutlet, "[rowOutlet]", never, {}, {}, never, never, false, never>;
|
|
877
877
|
}
|
|
878
878
|
|
|
879
879
|
export { DataSource }
|
|
@@ -887,7 +887,7 @@ export declare class FooterRowOutlet implements RowOutlet {
|
|
|
887
887
|
elementRef: ElementRef;
|
|
888
888
|
constructor(viewContainer: ViewContainerRef, elementRef: ElementRef);
|
|
889
889
|
static ɵfac: i0.ɵɵFactoryDeclaration<FooterRowOutlet, never>;
|
|
890
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<FooterRowOutlet, "[footerRowOutlet]", never, {}, {}, never, never, false>;
|
|
890
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<FooterRowOutlet, "[footerRowOutlet]", never, {}, {}, never, never, false, never>;
|
|
891
891
|
}
|
|
892
892
|
|
|
893
893
|
/**
|
|
@@ -899,7 +899,7 @@ export declare class HeaderRowOutlet implements RowOutlet {
|
|
|
899
899
|
elementRef: ElementRef;
|
|
900
900
|
constructor(viewContainer: ViewContainerRef, elementRef: ElementRef);
|
|
901
901
|
static ɵfac: i0.ɵɵFactoryDeclaration<HeaderRowOutlet, never>;
|
|
902
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<HeaderRowOutlet, "[headerRowOutlet]", never, {}, {}, never, never, false>;
|
|
902
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<HeaderRowOutlet, "[headerRowOutlet]", never, {}, {}, never, never, false, never>;
|
|
903
903
|
}
|
|
904
904
|
|
|
905
905
|
declare namespace i1 {
|
|
@@ -973,7 +973,7 @@ export declare class NoDataRowOutlet implements RowOutlet {
|
|
|
973
973
|
elementRef: ElementRef;
|
|
974
974
|
constructor(viewContainer: ViewContainerRef, elementRef: ElementRef);
|
|
975
975
|
static ɵfac: i0.ɵɵFactoryDeclaration<NoDataRowOutlet, never>;
|
|
976
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<NoDataRowOutlet, "[noDataRowOutlet]", never, {}, {}, never, never, false>;
|
|
976
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<NoDataRowOutlet, "[noDataRowOutlet]", never, {}, {}, never, never, false, never>;
|
|
977
977
|
}
|
|
978
978
|
|
|
979
979
|
/**
|
package/text-field/index.d.ts
CHANGED
|
@@ -66,7 +66,7 @@ export declare class CdkAutofill implements OnDestroy, OnInit {
|
|
|
66
66
|
ngOnInit(): void;
|
|
67
67
|
ngOnDestroy(): void;
|
|
68
68
|
static ɵfac: i0.ɵɵFactoryDeclaration<CdkAutofill, never>;
|
|
69
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<CdkAutofill, "[cdkAutofill]", never, {}, { "cdkAutofill": "cdkAutofill"; }, never, never, false>;
|
|
69
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<CdkAutofill, "[cdkAutofill]", never, {}, { "cdkAutofill": "cdkAutofill"; }, never, never, false, never>;
|
|
70
70
|
}
|
|
71
71
|
|
|
72
72
|
/** Directive to automatically resize a textarea to fit its content. */
|
|
@@ -151,7 +151,7 @@ export declare class CdkTextareaAutosize implements AfterViewInit, DoCheck, OnDe
|
|
|
151
151
|
*/
|
|
152
152
|
private _scrollToCaretPosition;
|
|
153
153
|
static ɵfac: i0.ɵɵFactoryDeclaration<CdkTextareaAutosize, [null, null, null, { optional: true; }]>;
|
|
154
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<CdkTextareaAutosize, "textarea[cdkTextareaAutosize]", ["cdkTextareaAutosize"], { "minRows": "cdkAutosizeMinRows"; "maxRows": "cdkAutosizeMaxRows"; "enabled": "cdkTextareaAutosize"; "placeholder": "placeholder"; }, {}, never, never, false>;
|
|
154
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<CdkTextareaAutosize, "textarea[cdkTextareaAutosize]", ["cdkTextareaAutosize"], { "minRows": "cdkAutosizeMinRows"; "maxRows": "cdkAutosizeMaxRows"; "enabled": "cdkTextareaAutosize"; "placeholder": "placeholder"; }, {}, never, never, false, never>;
|
|
155
155
|
}
|
|
156
156
|
|
|
157
157
|
declare namespace i1 {
|
package/tree/index.d.ts
CHANGED
|
@@ -100,7 +100,7 @@ export declare class CdkNestedTreeNode<T, K = T> extends CdkTreeNode<T, K> imple
|
|
|
100
100
|
/** Gets the outlet for the current node. */
|
|
101
101
|
private _getNodeOutlet;
|
|
102
102
|
static ɵfac: i0.ɵɵFactoryDeclaration<CdkNestedTreeNode<any, any>, never>;
|
|
103
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<CdkNestedTreeNode<any, any>, "cdk-nested-tree-node", ["cdkNestedTreeNode"], { "role": "role"; "disabled": "disabled"; "tabIndex": "tabIndex"; }, {}, ["nodeOutlet"], never, false>;
|
|
103
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<CdkNestedTreeNode<any, any>, "cdk-nested-tree-node", ["cdkNestedTreeNode"], { "role": "role"; "disabled": "disabled"; "tabIndex": "tabIndex"; }, {}, ["nodeOutlet"], never, false, never>;
|
|
104
104
|
}
|
|
105
105
|
|
|
106
106
|
/**
|
|
@@ -175,7 +175,7 @@ export declare class CdkTree<T, K = T> implements AfterContentChecked, Collectio
|
|
|
175
175
|
*/
|
|
176
176
|
insertNode(nodeData: T, index: number, viewContainer?: ViewContainerRef, parentData?: T): void;
|
|
177
177
|
static ɵfac: i0.ɵɵFactoryDeclaration<CdkTree<any, any>, never>;
|
|
178
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<CdkTree<any, any>, "cdk-tree", ["cdkTree"], { "dataSource": "dataSource"; "treeControl": "treeControl"; "trackBy": "trackBy"; }, {}, ["_nodeDefs"], never, false>;
|
|
178
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<CdkTree<any, any>, "cdk-tree", ["cdkTree"], { "dataSource": "dataSource"; "treeControl": "treeControl"; "trackBy": "trackBy"; }, {}, ["_nodeDefs"], never, false, never>;
|
|
179
179
|
}
|
|
180
180
|
|
|
181
181
|
export declare class CdkTreeModule {
|
|
@@ -221,7 +221,7 @@ export declare class CdkTreeNode<T, K = T> implements FocusableOption, OnDestroy
|
|
|
221
221
|
focus(): void;
|
|
222
222
|
protected _setRoleFromData(): void;
|
|
223
223
|
static ɵfac: i0.ɵɵFactoryDeclaration<CdkTreeNode<any, any>, never>;
|
|
224
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<CdkTreeNode<any, any>, "cdk-tree-node", ["cdkTreeNode"], { "role": "role"; }, {}, never, never, false>;
|
|
224
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<CdkTreeNode<any, any>, "cdk-tree-node", ["cdkTreeNode"], { "role": "role"; }, {}, never, never, false, never>;
|
|
225
225
|
}
|
|
226
226
|
|
|
227
227
|
/**
|
|
@@ -241,7 +241,7 @@ export declare class CdkTreeNodeDef<T> {
|
|
|
241
241
|
/** @docs-private */
|
|
242
242
|
constructor(template: TemplateRef<any>);
|
|
243
243
|
static ɵfac: i0.ɵɵFactoryDeclaration<CdkTreeNodeDef<any>, never>;
|
|
244
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<CdkTreeNodeDef<any>, "[cdkTreeNodeDef]", never, { "when": "cdkTreeNodeDefWhen"; }, {}, never, never, false>;
|
|
244
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<CdkTreeNodeDef<any>, "[cdkTreeNodeDef]", never, { "when": "cdkTreeNodeDefWhen"; }, {}, never, never, false, never>;
|
|
245
245
|
}
|
|
246
246
|
|
|
247
247
|
/**
|
|
@@ -253,7 +253,7 @@ export declare class CdkTreeNodeOutlet {
|
|
|
253
253
|
_node?: any;
|
|
254
254
|
constructor(viewContainer: ViewContainerRef, _node?: any);
|
|
255
255
|
static ɵfac: i0.ɵɵFactoryDeclaration<CdkTreeNodeOutlet, [null, { optional: true; }]>;
|
|
256
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<CdkTreeNodeOutlet, "[cdkTreeNodeOutlet]", never, {}, {}, never, never, false>;
|
|
256
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<CdkTreeNodeOutlet, "[cdkTreeNodeOutlet]", never, {}, {}, never, never, false, never>;
|
|
257
257
|
}
|
|
258
258
|
|
|
259
259
|
/** Context provided to the tree node component. */
|
|
@@ -315,7 +315,7 @@ export declare class CdkTreeNodePadding<T, K = T> implements OnDestroy {
|
|
|
315
315
|
*/
|
|
316
316
|
protected _setIndentInput(indent: number | string): void;
|
|
317
317
|
static ɵfac: i0.ɵɵFactoryDeclaration<CdkTreeNodePadding<any, any>, [null, null, null, { optional: true; }]>;
|
|
318
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<CdkTreeNodePadding<any, any>, "[cdkTreeNodePadding]", never, { "level": "cdkTreeNodePadding"; "indent": "cdkTreeNodePaddingIndent"; }, {}, never, never, false>;
|
|
318
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<CdkTreeNodePadding<any, any>, "[cdkTreeNodePadding]", never, { "level": "cdkTreeNodePadding"; "indent": "cdkTreeNodePaddingIndent"; }, {}, never, never, false, never>;
|
|
319
319
|
}
|
|
320
320
|
|
|
321
321
|
/**
|
|
@@ -331,7 +331,7 @@ export declare class CdkTreeNodeToggle<T, K = T> {
|
|
|
331
331
|
constructor(_tree: CdkTree<T, K>, _treeNode: CdkTreeNode<T, K>);
|
|
332
332
|
_toggle(event: Event): void;
|
|
333
333
|
static ɵfac: i0.ɵɵFactoryDeclaration<CdkTreeNodeToggle<any, any>, never>;
|
|
334
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<CdkTreeNodeToggle<any, any>, "[cdkTreeNodeToggle]", never, { "recursive": "cdkTreeNodeToggleRecursive"; }, {}, never, never, false>;
|
|
334
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<CdkTreeNodeToggle<any, any>, "[cdkTreeNodeToggle]", never, { "recursive": "cdkTreeNodeToggleRecursive"; }, {}, never, never, false, never>;
|
|
335
335
|
}
|
|
336
336
|
|
|
337
337
|
/** Flat tree control. Able to expand/collapse a subtree recursively for flattened tree. */
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright Google LLC All Rights Reserved.
|
|
4
|
-
*
|
|
5
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
-
* found in the LICENSE file at https://angular.io/license
|
|
7
|
-
*/
|
|
8
|
-
import { Tree } from '@angular-devkit/schematics';
|
|
9
|
-
import * as ts from 'typescript';
|
|
10
|
-
/**
|
|
11
|
-
* Checks whether the providers from a module are being imported in a `bootstrapApplication` call.
|
|
12
|
-
* @param tree File tree of the project.
|
|
13
|
-
* @param filePath Path of the file in which to check.
|
|
14
|
-
* @param className Class name of the module to search for.
|
|
15
|
-
*/
|
|
16
|
-
export declare function importsProvidersFrom(tree: Tree, filePath: string, className: string): boolean;
|
|
17
|
-
/**
|
|
18
|
-
* Adds an `importProvidersFrom` call to the `bootstrapApplication` call.
|
|
19
|
-
* @param tree File tree of the project.
|
|
20
|
-
* @param filePath Path to the file that should be updated.
|
|
21
|
-
* @param moduleName Name of the module that should be imported.
|
|
22
|
-
* @param modulePath Path from which to import the module.
|
|
23
|
-
*/
|
|
24
|
-
export declare function addModuleImportToStandaloneBootstrap(tree: Tree, filePath: string, moduleName: string, modulePath: string): void;
|
|
25
|
-
/** Finds the call to `bootstrapApplication` within a file. */
|
|
26
|
-
export declare function findBootstrapApplicationCall(sourceFile: ts.SourceFile): ts.CallExpression | null;
|
|
@@ -1,191 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* @license
|
|
4
|
-
* Copyright Google LLC All Rights Reserved.
|
|
5
|
-
*
|
|
6
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
7
|
-
* found in the LICENSE file at https://angular.io/license
|
|
8
|
-
*/
|
|
9
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
exports.findBootstrapApplicationCall = exports.addModuleImportToStandaloneBootstrap = exports.importsProvidersFrom = void 0;
|
|
11
|
-
const schematics_1 = require("@angular-devkit/schematics");
|
|
12
|
-
const change_1 = require("@schematics/angular/utility/change");
|
|
13
|
-
const ts = require("typescript");
|
|
14
|
-
const ast_utils_1 = require("@schematics/angular/utility/ast-utils");
|
|
15
|
-
/**
|
|
16
|
-
* Checks whether the providers from a module are being imported in a `bootstrapApplication` call.
|
|
17
|
-
* @param tree File tree of the project.
|
|
18
|
-
* @param filePath Path of the file in which to check.
|
|
19
|
-
* @param className Class name of the module to search for.
|
|
20
|
-
*/
|
|
21
|
-
function importsProvidersFrom(tree, filePath, className) {
|
|
22
|
-
const sourceFile = ts.createSourceFile(filePath, tree.readText(filePath), ts.ScriptTarget.Latest, true);
|
|
23
|
-
const bootstrapCall = findBootstrapApplicationCall(sourceFile);
|
|
24
|
-
const importProvidersFromCall = bootstrapCall ? findImportProvidersFromCall(bootstrapCall) : null;
|
|
25
|
-
return (!!importProvidersFromCall &&
|
|
26
|
-
importProvidersFromCall.arguments.some(arg => ts.isIdentifier(arg) && arg.text === className));
|
|
27
|
-
}
|
|
28
|
-
exports.importsProvidersFrom = importsProvidersFrom;
|
|
29
|
-
/**
|
|
30
|
-
* Adds an `importProvidersFrom` call to the `bootstrapApplication` call.
|
|
31
|
-
* @param tree File tree of the project.
|
|
32
|
-
* @param filePath Path to the file that should be updated.
|
|
33
|
-
* @param moduleName Name of the module that should be imported.
|
|
34
|
-
* @param modulePath Path from which to import the module.
|
|
35
|
-
*/
|
|
36
|
-
function addModuleImportToStandaloneBootstrap(tree, filePath, moduleName, modulePath) {
|
|
37
|
-
const sourceFile = ts.createSourceFile(filePath, tree.readText(filePath), ts.ScriptTarget.Latest, true);
|
|
38
|
-
const bootstrapCall = findBootstrapApplicationCall(sourceFile);
|
|
39
|
-
if (!bootstrapCall) {
|
|
40
|
-
throw new schematics_1.SchematicsException(`Could not find bootstrapApplication call in ${filePath}`);
|
|
41
|
-
}
|
|
42
|
-
const recorder = tree.beginUpdate(filePath);
|
|
43
|
-
const importCall = findImportProvidersFromCall(bootstrapCall);
|
|
44
|
-
const printer = ts.createPrinter();
|
|
45
|
-
const sourceText = sourceFile.getText();
|
|
46
|
-
// Add imports to the module being added and `importProvidersFrom`. We don't
|
|
47
|
-
// have to worry about duplicates, because `insertImport` handles them.
|
|
48
|
-
[
|
|
49
|
-
(0, ast_utils_1.insertImport)(sourceFile, sourceText, moduleName, modulePath),
|
|
50
|
-
(0, ast_utils_1.insertImport)(sourceFile, sourceText, 'importProvidersFrom', '@angular/core'),
|
|
51
|
-
].forEach(change => {
|
|
52
|
-
if (change instanceof change_1.InsertChange) {
|
|
53
|
-
recorder.insertLeft(change.pos, change.toAdd);
|
|
54
|
-
}
|
|
55
|
-
});
|
|
56
|
-
// If there is an `importProvidersFrom` call already, reuse it.
|
|
57
|
-
if (importCall) {
|
|
58
|
-
recorder.insertRight(importCall.arguments[importCall.arguments.length - 1].getEnd(), `, ${moduleName}`);
|
|
59
|
-
}
|
|
60
|
-
else if (bootstrapCall.arguments.length === 1) {
|
|
61
|
-
// Otherwise if there is no options parameter to `bootstrapApplication`,
|
|
62
|
-
// create an object literal with a `providers` array and the import.
|
|
63
|
-
const newCall = ts.factory.updateCallExpression(bootstrapCall, bootstrapCall.expression, bootstrapCall.typeArguments, [
|
|
64
|
-
...bootstrapCall.arguments,
|
|
65
|
-
ts.factory.createObjectLiteralExpression([createProvidersAssignment(moduleName)], true),
|
|
66
|
-
]);
|
|
67
|
-
recorder.remove(bootstrapCall.getStart(), bootstrapCall.getWidth());
|
|
68
|
-
recorder.insertRight(bootstrapCall.getStart(), printer.printNode(ts.EmitHint.Unspecified, newCall, sourceFile));
|
|
69
|
-
}
|
|
70
|
-
else {
|
|
71
|
-
const providersLiteral = findProvidersLiteral(bootstrapCall);
|
|
72
|
-
if (providersLiteral) {
|
|
73
|
-
// If there's a `providers` array, add the import to it.
|
|
74
|
-
const newProvidersLiteral = ts.factory.updateArrayLiteralExpression(providersLiteral, [
|
|
75
|
-
...providersLiteral.elements,
|
|
76
|
-
createImportProvidersFromCall(moduleName),
|
|
77
|
-
]);
|
|
78
|
-
recorder.remove(providersLiteral.getStart(), providersLiteral.getWidth());
|
|
79
|
-
recorder.insertRight(providersLiteral.getStart(), printer.printNode(ts.EmitHint.Unspecified, newProvidersLiteral, sourceFile));
|
|
80
|
-
}
|
|
81
|
-
else {
|
|
82
|
-
// Otherwise add a `providers` array to the existing object literal.
|
|
83
|
-
const optionsLiteral = bootstrapCall.arguments[1];
|
|
84
|
-
const newOptionsLiteral = ts.factory.updateObjectLiteralExpression(optionsLiteral, [
|
|
85
|
-
...optionsLiteral.properties,
|
|
86
|
-
createProvidersAssignment(moduleName),
|
|
87
|
-
]);
|
|
88
|
-
recorder.remove(optionsLiteral.getStart(), optionsLiteral.getWidth());
|
|
89
|
-
recorder.insertRight(optionsLiteral.getStart(), printer.printNode(ts.EmitHint.Unspecified, newOptionsLiteral, sourceFile));
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
tree.commitUpdate(recorder);
|
|
93
|
-
}
|
|
94
|
-
exports.addModuleImportToStandaloneBootstrap = addModuleImportToStandaloneBootstrap;
|
|
95
|
-
/** Finds the call to `bootstrapApplication` within a file. */
|
|
96
|
-
function findBootstrapApplicationCall(sourceFile) {
|
|
97
|
-
const localName = findImportLocalName(sourceFile, 'bootstrapApplication', '@angular/platform-browser');
|
|
98
|
-
return localName ? findCall(sourceFile, localName) : null;
|
|
99
|
-
}
|
|
100
|
-
exports.findBootstrapApplicationCall = findBootstrapApplicationCall;
|
|
101
|
-
/** Find a call to `importProvidersFrom` within a `bootstrapApplication` call. */
|
|
102
|
-
function findImportProvidersFromCall(bootstrapCall) {
|
|
103
|
-
const providersLiteral = findProvidersLiteral(bootstrapCall);
|
|
104
|
-
const importProvidersName = findImportLocalName(bootstrapCall.getSourceFile(), 'importProvidersFrom', '@angular/core');
|
|
105
|
-
if (providersLiteral && importProvidersName) {
|
|
106
|
-
for (const element of providersLiteral.elements) {
|
|
107
|
-
// Look for an array element that calls the `importProvidersFrom` function.
|
|
108
|
-
if (ts.isCallExpression(element) &&
|
|
109
|
-
ts.isIdentifier(element.expression) &&
|
|
110
|
-
element.expression.text === importProvidersName) {
|
|
111
|
-
return element;
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
return null;
|
|
116
|
-
}
|
|
117
|
-
/** Finds the `providers` array literal within a `bootstrapApplication` call. */
|
|
118
|
-
function findProvidersLiteral(bootstrapCall) {
|
|
119
|
-
// The imports have to be in the second argument of
|
|
120
|
-
// the function which has to be an object literal.
|
|
121
|
-
if (bootstrapCall.arguments.length > 1 &&
|
|
122
|
-
ts.isObjectLiteralExpression(bootstrapCall.arguments[1])) {
|
|
123
|
-
for (const prop of bootstrapCall.arguments[1].properties) {
|
|
124
|
-
if (ts.isPropertyAssignment(prop) &&
|
|
125
|
-
ts.isIdentifier(prop.name) &&
|
|
126
|
-
prop.name.text === 'providers' &&
|
|
127
|
-
ts.isArrayLiteralExpression(prop.initializer)) {
|
|
128
|
-
return prop.initializer;
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
return null;
|
|
133
|
-
}
|
|
134
|
-
/**
|
|
135
|
-
* Finds the local name of an imported symbol. Could be the symbol name itself or its alias.
|
|
136
|
-
* @param sourceFile File within which to search for the import.
|
|
137
|
-
* @param name Actual name of the import, not its local alias.
|
|
138
|
-
* @param moduleName Name of the module from which the symbol is imported.
|
|
139
|
-
*/
|
|
140
|
-
function findImportLocalName(sourceFile, name, moduleName) {
|
|
141
|
-
for (const node of sourceFile.statements) {
|
|
142
|
-
// Only look for top-level imports.
|
|
143
|
-
if (!ts.isImportDeclaration(node) ||
|
|
144
|
-
!ts.isStringLiteral(node.moduleSpecifier) ||
|
|
145
|
-
node.moduleSpecifier.text !== moduleName) {
|
|
146
|
-
continue;
|
|
147
|
-
}
|
|
148
|
-
// Filter out imports that don't have the right shape.
|
|
149
|
-
if (!node.importClause ||
|
|
150
|
-
!node.importClause.namedBindings ||
|
|
151
|
-
!ts.isNamedImports(node.importClause.namedBindings)) {
|
|
152
|
-
continue;
|
|
153
|
-
}
|
|
154
|
-
// Look through the elements of the declaration for the specific import.
|
|
155
|
-
for (const element of node.importClause.namedBindings.elements) {
|
|
156
|
-
if ((element.propertyName || element.name).text === name) {
|
|
157
|
-
// The local name is always in `name`.
|
|
158
|
-
return element.name.text;
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
return null;
|
|
163
|
-
}
|
|
164
|
-
/**
|
|
165
|
-
* Finds a call to a function with a specific name.
|
|
166
|
-
* @param rootNode Node from which to start searching.
|
|
167
|
-
* @param name Name of the function to search for.
|
|
168
|
-
*/
|
|
169
|
-
function findCall(rootNode, name) {
|
|
170
|
-
let result = null;
|
|
171
|
-
rootNode.forEachChild(function walk(node) {
|
|
172
|
-
if (ts.isCallExpression(node) &&
|
|
173
|
-
ts.isIdentifier(node.expression) &&
|
|
174
|
-
node.expression.text === name) {
|
|
175
|
-
result = node;
|
|
176
|
-
}
|
|
177
|
-
if (!result) {
|
|
178
|
-
node.forEachChild(walk);
|
|
179
|
-
}
|
|
180
|
-
});
|
|
181
|
-
return result;
|
|
182
|
-
}
|
|
183
|
-
/** Creates an `importProvidersFrom({{moduleName}})` call. */
|
|
184
|
-
function createImportProvidersFromCall(moduleName) {
|
|
185
|
-
return ts.factory.createCallChain(ts.factory.createIdentifier('importProvidersFrom'), undefined, undefined, [ts.factory.createIdentifier(moduleName)]);
|
|
186
|
-
}
|
|
187
|
-
/** Creates a `providers: [importProvidersFrom({{moduleName}})]` property assignment. */
|
|
188
|
-
function createProvidersAssignment(moduleName) {
|
|
189
|
-
return ts.factory.createPropertyAssignment('providers', ts.factory.createArrayLiteralExpression([createImportProvidersFromCall(moduleName)]));
|
|
190
|
-
}
|
|
191
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhbmRhbG9uZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jZGsvc2NoZW1hdGljcy91dGlscy9hc3Qvc3RhbmRhbG9uZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7OztHQU1HOzs7QUFFSCwyREFBcUU7QUFDckUsK0RBQWdFO0FBQ2hFLGlDQUFpQztBQUNqQyxxRUFBbUU7QUFFbkU7Ozs7O0dBS0c7QUFDSCxTQUFnQixvQkFBb0IsQ0FBQyxJQUFVLEVBQUUsUUFBZ0IsRUFBRSxTQUFpQjtJQUNsRixNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUMsZ0JBQWdCLENBQ3BDLFFBQVEsRUFDUixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUN2QixFQUFFLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFDdEIsSUFBSSxDQUNMLENBQUM7SUFFRixNQUFNLGFBQWEsR0FBRyw0QkFBNEIsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMvRCxNQUFNLHVCQUF1QixHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsMkJBQTJCLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUVsRyxPQUFPLENBQ0wsQ0FBQyxDQUFDLHVCQUF1QjtRQUN6Qix1QkFBdUIsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyxDQUM5RixDQUFDO0FBQ0osQ0FBQztBQWZELG9EQWVDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBZ0Isb0NBQW9DLENBQ2xELElBQVUsRUFDVixRQUFnQixFQUNoQixVQUFrQixFQUNsQixVQUFrQjtJQUVsQixNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUMsZ0JBQWdCLENBQ3BDLFFBQVEsRUFDUixJQUFJLENBQUMsUUFBUSxD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LElBQUksQ0FBQyxVQUFVLENBQUM7WUFDaEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEtBQUssSUFBSSxFQUM3QjtZQUNBLE1BQU0sR0FBRyxJQUFJLENBQUM7U0FDZjtRQUVELElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDWCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3pCO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQsNkRBQTZEO0FBQzdELFNBQVMsNkJBQTZCLENBQUMsVUFBa0I7SUFDdkQsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FDL0IsRUFBRSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxxQkFBcUIsQ0FBQyxFQUNsRCxTQUFTLEVBQ1QsU0FBUyxFQUNULENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUMxQyxDQUFDO0FBQ0osQ0FBQztBQUVELHdGQUF3RjtBQUN4RixTQUFTLHlCQUF5QixDQUFDLFVBQWtCO0lBQ25ELE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyx3QkFBd0IsQ0FDeEMsV0FBVyxFQUNYLEVBQUUsQ0FBQyxPQUFPLENBQUMsNEJBQTRCLENBQUMsQ0FBQyw2QkFBNkIsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQ3JGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7U2NoZW1hdGljc0V4Y2VwdGlvbiwgVHJlZX0gZnJvbSAnQGFuZ3VsYXItZGV2a2l0L3NjaGVtYXRpY3MnO1xuaW1wb3J0IHtJbnNlcnRDaGFuZ2V9IGZyb20gJ0BzY2hlbWF0aWNzL2FuZ3VsYXIvdXRpbGl0eS9jaGFuZ2UnO1xuaW1wb3J0ICogYXMgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5pbXBvcnQge2luc2VydEltcG9ydH0gZnJvbSAnQHNjaGVtYXRpY3MvYW5ndWxhci91dGlsaXR5L2FzdC11dGlscyc7XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHByb3ZpZGVycyBmcm9tIGEgbW9kdWxlIGFyZSBiZWluZyBpbXBvcnRlZCBpbiBhIGBib290c3RyYXBBcHBsaWNhdGlvbmAgY2FsbC5cbiAqIEBwYXJhbSB0cmVlIEZpbGUgdHJlZSBvZiB0aGUgcHJvamVjdC5cbiAqIEBwYXJhbSBmaWxlUGF0aCBQYXRoIG9mIHRoZSBmaWxlIGluIHdoaWNoIHRvIGNoZWNrLlxuICogQHBhcmFtIGNsYXNzTmFtZSBDbGFzcyBuYW1lIG9mIHRoZSBtb2R1bGUgdG8gc2VhcmNoIGZvci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGltcG9ydHNQcm92aWRlcnNGcm9tKHRyZWU6IFRyZWUsIGZpbGVQYXRoOiBzdHJpbmcsIGNsYXNzTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IHNvdXJjZUZpbGUgPSB0cy5jcmVhdGVTb3VyY2VGaWxlKFxuICAgIGZpbGVQYXRoLFxuICAgIHRyZWUucmVhZFRleHQoZmlsZVBhdGgpLFxuICAgIHRzLlNjcmlwdFRhcmdldC5MYXRlc3QsXG4gICAgdHJ1ZSxcbiAgKTtcblxuICBjb25zdCBib290c3RyYXBDYWxsID0gZmluZEJvb3RzdHJhcEFwcGxpY2F0aW9uQ2FsbChzb3VyY2VGaWxlKTtcbiAgY29uc3QgaW1wb3J0UHJvdmlkZXJzRnJvbUNhbGwgPSBib290c3RyYXBDYWxsID8gZmluZEltcG9ydFByb3ZpZGVyc0Zyb21DYWxsKGJvb3RzdHJhcENhbGwpIDogbnVsbDtcblxuICByZXR1cm4gKFxuICAgICEhaW1wb3J0UHJvdmlkZXJzRnJvbUNhbGwgJiZcbiAgICBpbXBvcnRQcm92aWRlcnNGcm9tQ2FsbC5hcmd1bWVudHMuc29tZShhcmcgPT4gdHMuaXNJZGVudGlmaWVyKGFyZykgJiYgYXJnLnRleHQgPT09IGNsYXNzTmFtZSlcbiAgKTtcbn1cblxuLyoqXG4gKiBBZGRzIGFuIGBpbXBvcnRQcm92aWRlcnNGcm9tYCBjYWxsIHRvIHRoZSBgYm9vdHN0cmFwQXBwbGljYXRpb25gIGNhbGwuXG4gKiBAcGFyYW0gdHJlZSBGaWxlIHRyZWUgb2YgdGhlIHByb2plY3QuXG4gKiBAcGFyYW0gZmlsZVBhdGggUGF0aCB0byB0aGUgZmlsZSB0aGF0IHNob3VsZCBiZSB1cGRhdGVkLlxuICogQHBhcmFtIG1vZHVsZU5hbWUgTmFtZSBvZiB0aGUgbW9kdWxlIHRoYXQgc2hvdWxkIGJlIGltcG9ydGVkLlxuICogQHBhcmFtIG1vZHVsZVBhdGggUGF0aCBmcm9tIHdoaWNoIHRvIGltcG9ydCB0aGUgbW9kdWxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkTW9kdWxlSW1wb3J0VG9TdGFuZGFsb25lQm9vdHN0cmFwKFxuICB0cmVlOiBUcmVlLFxuICBmaWxlUGF0aDogc3RyaW5nLFxuICBtb2R1bGVOYW1lOiBzdHJpbmcsXG4gIG1vZHVsZVBhdGg6IHN0cmluZyxcbikge1xuICBjb25zdCBzb3VyY2VGaWxlID0gdHMuY3JlYXRlU291cmNlRmlsZShcbiAgICBmaWxlUGF0aCxcbiAgICB0cmVlLnJlYWRUZXh0KGZpbGVQYXRoKSxcbiAgICB0cy5TY3JpcHRUYXJnZXQuTGF0ZXN0LFxuICAgIHRydWUsXG4gICk7XG5cbiAgY29uc3QgYm9vdHN0cmFwQ2FsbCA9IGZpbmRCb290c3RyYXBBcHBsaWNhdGlvbkNhbGwoc291cmNlRmlsZSk7XG5cbiAgaWYgKCFib290c3RyYXBDYWxsKSB7XG4gICAgdGhyb3cgbmV3IFNjaGVtYXRpY3NFeGNlcHRpb24oYENvdWxkIG5vdCBmaW5kIGJvb3RzdHJhcEFwcGxpY2F0aW9uIGNhbGwgaW4gJHtmaWxlUGF0aH1gKTtcbiAgfVxuXG4gIGNvbnN0IHJlY29yZGVyID0gdHJlZS5iZWdpblVwZGF0ZShmaWxlUGF0aCk7XG4gIGNvbnN0IGltcG9ydENhbGwgPSBmaW5kSW1wb3J0UHJvdmlkZXJzRnJvbUNhbGwoYm9vdHN0cmFwQ2FsbCk7XG4gIGNvbnN0IHByaW50ZXIgPSB0cy5jcmVhdGVQcmludGVyKCk7XG4gIGNvbnN0IHNvdXJjZVRleHQgPSBzb3VyY2VGaWxlLmdldFRleHQoKTtcblxuICAvLyBBZGQgaW1wb3J0cyB0byB0aGUgbW9kdWxlIGJlaW5nIGFkZGVkIGFuZCBgaW1wb3J0UHJvdmlkZXJzRnJvbWAuIFdlIGRvbid0XG4gIC8vIGhhdmUgdG8gd29ycnkgYWJvdXQgZHVwbGljYXRlcywgYmVjYXVzZSBgaW5zZXJ0SW1wb3J0YCBoYW5kbGVzIHRoZW0uXG4gIFtcbiAgICBpbnNlcnRJbXBvcnQoc291cmNlRmlsZSwgc291cmNlVGV4dCwgbW9kdWxlTmFtZSwgbW9kdWxlUGF0aCksXG4gICAgaW5zZXJ0SW1wb3J0KHNvdXJjZUZpbGUsIHNvdXJjZVRleHQsICdpbXBvcnRQcm92aWRlcnNGcm9tJywgJ0Bhbmd1bGFyL2NvcmUnKSxcbiAgXS5mb3JFYWNoKGNoYW5nZSA9PiB7XG4gICAgaWYgKGNoYW5nZSBpbnN0YW5jZW9mIEluc2VydENoYW5nZSkge1xuICAgICAgcmVjb3JkZXIuaW5zZXJ0TGVmdChjaGFuZ2UucG9zLCBjaGFuZ2UudG9BZGQpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gSWYgdGhlcmUgaXMgYW4gYGltcG9ydFByb3ZpZGVyc0Zyb21gIGNhbGwgYWxyZWFkeSwgcmV1c2UgaXQuXG4gIGlmIChpbXBvcnRDYWxsKSB7XG4gICAgcmVjb3JkZXIuaW5zZXJ0UmlnaHQoXG4gICAgICBpbXBvcnRDYWxsLmFyZ3VtZW50c1tpbXBvcnRDYWxsLmFyZ3VtZW50cy5sZW5ndGggLSAxXS5nZXRFbmQoKSxcbiAgICAgIGAsICR7bW9kdWxlTmFtZX1gLFxuICAgICk7XG4gIH0gZWxzZSBpZiAoYm9vdHN0cmFwQ2FsbC5hcmd1bWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgLy8gT3RoZXJ3aXNlIGlmIHRoZXJlIGlzIG5vIG9wdGlvbnMgcGFyYW1ldGVyIHRvIGBib290c3RyYXBBcHBsaWNhdGlvbmAsXG4gICAgLy8gY3JlYXRlIGFuIG9iamVjdCBsaXRlcmFsIHdpdGggYSBgcHJvdmlkZXJzYCBhcnJheSBhbmQgdGhlIGltcG9ydC5cbiAgICBjb25zdCBuZXdDYWxsID0gdHMuZmFjdG9yeS51cGRhdGVDYWxsRXhwcmVzc2lvbihcbiAgICAgIGJvb3RzdHJhcENhbGwsXG4gICAgICBib290c3RyYXBDYWxsLmV4cHJlc3Npb24sXG4gICAgICBib290c3RyYXBDYWxsLnR5cGVBcmd1bWVudHMsXG4gICAgICBbXG4gICAgICAgIC4uLmJvb3RzdHJhcENhbGwuYXJndW1lbnRzLFxuICAgICAgICB0cy5mYWN0b3J5LmNyZWF0ZU9iamVjdExpdGVyYWxFeHByZXNzaW9uKFtjcmVhdGVQcm92aWRlcnNBc3NpZ25tZW50KG1vZHVsZU5hbWUpXSwgdHJ1ZSksXG4gICAgICBdLFxuICAgICk7XG5cbiAgICByZWNvcmRlci5yZW1vdmUoYm9vdHN0cmFwQ2FsbC5nZXRTdGFydCgpLCBib290c3RyYXBDYWxsLmdldFdpZHRoKCkpO1xuICAgIHJlY29yZGVyLmluc2VydFJpZ2h0KFxuICAgICAgYm9vdHN0cmFwQ2FsbC5nZXRTdGFydCgpLFxuICAgICAgcHJpbnRlci5wcmludE5vZGUodHMuRW1pdEhpbnQuVW5zcGVjaWZpZWQsIG5ld0NhbGwsIHNvdXJjZUZpbGUpLFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgcHJvdmlkZXJzTGl0ZXJhbCA9IGZpbmRQcm92aWRlcnNMaXRlcmFsKGJvb3RzdHJhcENhbGwpO1xuXG4gICAgaWYgKHByb3ZpZGVyc0xpdGVyYWwpIHtcbiAgICAgIC8vIElmIHRoZXJlJ3MgYSBgcHJvdmlkZXJzYCBhcnJheSwgYWRkIHRoZSBpbXBvcnQgdG8gaXQuXG4gICAgICBjb25zdCBuZXdQcm92aWRlcnNMaXRlcmFsID0gdHMuZmFjdG9yeS51cGRhdGVBcnJheUxpdGVyYWxFeHByZXNzaW9uKHByb3ZpZGVyc0xpdGVyYWwsIFtcbiAgICAgICAgLi4ucHJvdmlkZXJzTGl0ZXJhbC5lbGVtZW50cyxcbiAgICAgICAgY3JlYXRlSW1wb3J0UHJvdmlkZXJzRnJvbUNhbGwobW9kdWxlTmFtZSksXG4gICAgICBdKTtcbiAgICAgIHJlY29yZGVyLnJlbW92ZShwcm92aWRlcnNMaXRlcmFsLmdldFN0YXJ0KCksIHByb3ZpZGVyc0xpdGVyYWwuZ2V0V2lkdGgoKSk7XG4gICAgICByZWNvcmRlci5pbnNlcnRSaWdodChcbiAgICAgICAgcHJvdmlkZXJzTGl0ZXJhbC5nZXRTdGFydCgpLFxuICAgICAgICBwcmludGVyLnByaW50Tm9kZSh0cy5FbWl0SGludC5VbnNwZWNpZmllZCwgbmV3UHJvdmlkZXJzTGl0ZXJhbCwgc291cmNlRmlsZSksXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBPdGhlcndpc2UgYWRkIGEgYHByb3ZpZGVyc2AgYXJyYXkgdG8gdGhlIGV4aXN0aW5nIG9iamVjdCBsaXRlcmFsLlxuICAgICAgY29uc3Qgb3B0aW9uc0xpdGVyYWwgPSBib290c3RyYXBDYWxsLmFyZ3VtZW50c1sxXSBhcyB0cy5PYmplY3RMaXRlcmFsRXhwcmVzc2lvbjtcbiAgICAgIGNvbnN0IG5ld09wdGlvbnNMaXRlcmFsID0gdHMuZmFjdG9yeS51cGRhdGVPYmplY3RMaXRlcmFsRXhwcmVzc2lvbihvcHRpb25zTGl0ZXJhbCwgW1xuICAgICAgICAuLi5vcHRpb25zTGl0ZXJhbC5wcm9wZXJ0aWVzLFxuICAgICAgICBjcmVhdGVQcm92aWRlcnNBc3NpZ25tZW50KG1vZHVsZU5hbWUpLFxuICAgICAgXSk7XG4gICAgICByZWNvcmRlci5yZW1vdmUob3B0aW9uc0xpdGVyYWwuZ2V0U3RhcnQoKSwgb3B0aW9uc0xpdGVyYWwuZ2V0V2lkdGgoKSk7XG4gICAgICByZWNvcmRlci5pbnNlcnRSaWdodChcbiAgICAgICAgb3B0aW9uc0xpdGVyYWwuZ2V0U3RhcnQoKSxcbiAgICAgICAgcHJpbnRlci5wcmludE5vZGUodHMuRW1pdEhpbnQuVW5zcGVjaWZpZWQsIG5ld09wdGlvbnNMaXRlcmFsLCBzb3VyY2VGaWxlKSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgdHJlZS5jb21taXRVcGRhdGUocmVjb3JkZXIpO1xufVxuXG4vKiogRmluZHMgdGhlIGNhbGwgdG8gYGJvb3RzdHJhcEFwcGxpY2F0aW9uYCB3aXRoaW4gYSBmaWxlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRCb290c3RyYXBBcHBsaWNhdGlvbkNhbGwoc291cmNlRmlsZTogdHMuU291cmNlRmlsZSk6IHRzLkNhbGxFeHByZXNzaW9uIHwgbnVsbCB7XG4gIGNvbnN0IGxvY2FsTmFtZSA9IGZpbmRJbXBvcnRMb2NhbE5hbWUoXG4gICAgc291cmNlRmlsZSxcbiAgICAnYm9vdHN0cmFwQXBwbGljYXRpb24nLFxuICAgICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJyxcbiAgKTtcblxuICByZXR1cm4gbG9jYWxOYW1lID8gZmluZENhbGwoc291cmNlRmlsZSwgbG9jYWxOYW1lKSA6IG51bGw7XG59XG5cbi8qKiBGaW5kIGEgY2FsbCB0byBgaW1wb3J0UHJvdmlkZXJzRnJvbWAgd2l0aGluIGEgYGJvb3RzdHJhcEFwcGxpY2F0aW9uYCBjYWxsLiAqL1xuZnVuY3Rpb24gZmluZEltcG9ydFByb3ZpZGVyc0Zyb21DYWxsKGJvb3RzdHJhcENhbGw6IHRzLkNhbGxFeHByZXNzaW9uKTogdHMuQ2FsbEV4cHJlc3Npb24gfCBudWxsIHtcbiAgY29uc3QgcHJvdmlkZXJzTGl0ZXJhbCA9IGZpbmRQcm92aWRlcnNMaXRlcmFsKGJvb3RzdHJhcENhbGwpO1xuICBjb25zdCBpbXBvcnRQcm92aWRlcnNOYW1lID0gZmluZEltcG9ydExvY2FsTmFtZShcbiAgICBib290c3RyYXBDYWxsLmdldFNvdXJjZUZpbGUoKSxcbiAgICAnaW1wb3J0UHJvdmlkZXJzRnJvbScsXG4gICAgJ0Bhbmd1bGFyL2NvcmUnLFxuICApO1xuXG4gIGlmIChwcm92aWRlcnNMaXRlcmFsICYmIGltcG9ydFByb3ZpZGVyc05hbWUpIHtcbiAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgcHJvdmlkZXJzTGl0ZXJhbC5lbGVtZW50cykge1xuICAgICAgLy8gTG9vayBmb3IgYW4gYXJyYXkgZWxlbWVudCB0aGF0IGNhbGxzIHRoZSBgaW1wb3J0UHJvdmlkZXJzRnJvbWAgZnVuY3Rpb24uXG4gICAgICBpZiAoXG4gICAgICAgIHRzLmlzQ2FsbEV4cHJlc3Npb24oZWxlbWVudCkgJiZcbiAgICAgICAgdHMuaXNJZGVudGlmaWVyKGVsZW1lbnQuZXhwcmVzc2lvbikgJiZcbiAgICAgICAgZWxlbWVudC5leHByZXNzaW9uLnRleHQgPT09IGltcG9ydFByb3ZpZGVyc05hbWVcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqIEZpbmRzIHRoZSBgcHJvdmlkZXJzYCBhcnJheSBsaXRlcmFsIHdpdGhpbiBhIGBib290c3RyYXBBcHBsaWNhdGlvbmAgY2FsbC4gKi9cbmZ1bmN0aW9uIGZpbmRQcm92aWRlcnNMaXRlcmFsKGJvb3RzdHJhcENhbGw6IHRzLkNhbGxFeHByZXNzaW9uKTogdHMuQXJyYXlMaXRlcmFsRXhwcmVzc2lvbiB8IG51bGwge1xuICAvLyBUaGUgaW1wb3J0cyBoYXZlIHRvIGJlIGluIHRoZSBzZWNvbmQgYXJndW1lbnQgb2ZcbiAgLy8gdGhlIGZ1bmN0aW9uIHdoaWNoIGhhcyB0byBiZSBhbiBvYmplY3QgbGl0ZXJhbC5cbiAgaWYgKFxuICAgIGJvb3RzdHJhcENhbGwuYXJndW1lbnRzLmxlbmd0aCA+IDEgJiZcbiAgICB0cy5pc09iamVjdExpdGVyYWxFeHByZXNzaW9uKGJvb3RzdHJhcENhbGwuYXJndW1lbnRzWzFdKVxuICApIHtcbiAgICBmb3IgKGNvbnN0IHByb3Agb2YgYm9vdHN0cmFwQ2FsbC5hcmd1bWVudHNbMV0ucHJvcGVydGllcykge1xuICAgICAgaWYgKFxuICAgICAgICB0cy5pc1Byb3BlcnR5QXNzaWdubWVudChwcm9wKSAmJlxuICAgICAgICB0cy5pc0lkZW50aWZpZXIocHJvcC5uYW1lKSAmJlxuICAgICAgICBwcm9wLm5hbWUudGV4dCA9PT0gJ3Byb3ZpZGVycycgJiZcbiAgICAgICAgdHMuaXNBcnJheUxpdGVyYWxFeHByZXNzaW9uKHByb3AuaW5pdGlhbGl6ZXIpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIHByb3AuaW5pdGlhbGl6ZXI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogRmluZHMgdGhlIGxvY2FsIG5hbWUgb2YgYW4gaW1wb3J0ZWQgc3ltYm9sLiBDb3VsZCBiZSB0aGUgc3ltYm9sIG5hbWUgaXRzZWxmIG9yIGl0cyBhbGlhcy5cbiAqIEBwYXJhbSBzb3VyY2VGaWxlIEZpbGUgd2l0aGluIHdoaWNoIHRvIHNlYXJjaCBmb3IgdGhlIGltcG9ydC5cbiAqIEBwYXJhbSBuYW1lIEFjdHVhbCBuYW1lIG9mIHRoZSBpbXBvcnQsIG5vdCBpdHMgbG9jYWwgYWxpYXMuXG4gKiBAcGFyYW0gbW9kdWxlTmFtZSBOYW1lIG9mIHRoZSBtb2R1bGUgZnJvbSB3aGljaCB0aGUgc3ltYm9sIGlzIGltcG9ydGVkLlxuICovXG5mdW5jdGlvbiBmaW5kSW1wb3J0TG9jYWxOYW1lKFxuICBzb3VyY2VGaWxlOiB0cy5Tb3VyY2VGaWxlLFxuICBuYW1lOiBzdHJpbmcsXG4gIG1vZHVsZU5hbWU6IHN0cmluZyxcbik6IHN0cmluZyB8IG51bGwge1xuICBmb3IgKGNvbnN0IG5vZGUgb2Ygc291cmNlRmlsZS5zdGF0ZW1lbnRzKSB7XG4gICAgLy8gT25seSBsb29rIGZvciB0b3AtbGV2ZWwgaW1wb3J0cy5cbiAgICBpZiAoXG4gICAgICAhdHMuaXNJbXBvcnREZWNsYXJhdGlvbihub2RlKSB8fFxuICAgICAgIXRzLmlzU3RyaW5nTGl0ZXJhbChub2RlLm1vZHVsZVNwZWNpZmllcikgfHxcbiAgICAgIG5vZGUubW9kdWxlU3BlY2lmaWVyLnRleHQgIT09IG1vZHVsZU5hbWVcbiAgICApIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIEZpbHRlciBvdXQgaW1wb3J0cyB0aGF0IGRvbid0IGhhdmUgdGhlIHJpZ2h0IHNoYXBlLlxuICAgIGlmIChcbiAgICAgICFub2RlLmltcG9ydENsYXVzZSB8fFxuICAgICAgIW5vZGUuaW1wb3J0Q2xhdXNlLm5hbWVkQmluZGluZ3MgfHxcbiAgICAgICF0cy5pc05hbWVkSW1wb3J0cyhub2RlLmltcG9ydENsYXVzZS5uYW1lZEJpbmRpbmdzKVxuICAgICkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gTG9vayB0aHJvdWdoIHRoZSBlbGVtZW50cyBvZiB0aGUgZGVjbGFyYXRpb24gZm9yIHRoZSBzcGVjaWZpYyBpbXBvcnQuXG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIG5vZGUuaW1wb3J0Q2xhdXNlLm5hbWVkQmluZGluZ3MuZWxlbWVudHMpIHtcbiAgICAgIGlmICgoZWxlbWVudC5wcm9wZXJ0eU5hbWUgfHwgZWxlbWVudC5uYW1lKS50ZXh0ID09PSBuYW1lKSB7XG4gICAgICAgIC8vIFRoZSBsb2NhbCBuYW1lIGlzIGFsd2F5cyBpbiBgbmFtZWAuXG4gICAgICAgIHJldHVybiBlbGVtZW50Lm5hbWUudGV4dDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBGaW5kcyBhIGNhbGwgdG8gYSBmdW5jdGlvbiB3aXRoIGEgc3BlY2lmaWMgbmFtZS5cbiAqIEBwYXJhbSByb290Tm9kZSBOb2RlIGZyb20gd2hpY2ggdG8gc3RhcnQgc2VhcmNoaW5nLlxuICogQHBhcmFtIG5hbWUgTmFtZSBvZiB0aGUgZnVuY3Rpb24gdG8gc2VhcmNoIGZvci5cbiAqL1xuZnVuY3Rpb24gZmluZENhbGwocm9vdE5vZGU6IHRzLk5vZGUsIG5hbWU6IHN0cmluZyk6IHRzLkNhbGxFeHByZXNzaW9uIHwgbnVsbCB7XG4gIGxldCByZXN1bHQ6IHRzLkNhbGxFeHByZXNzaW9uIHwgbnVsbCA9IG51bGw7XG5cbiAgcm9vdE5vZGUuZm9yRWFjaENoaWxkKGZ1bmN0aW9uIHdhbGsobm9kZSkge1xuICAgIGlmIChcbiAgICAgIHRzLmlzQ2FsbEV4cHJlc3Npb24obm9kZSkgJiZcbiAgICAgIHRzLmlzSWRlbnRpZmllcihub2RlLmV4cHJlc3Npb24pICYmXG4gICAgICBub2RlLmV4cHJlc3Npb24udGV4dCA9PT0gbmFtZVxuICAgICkge1xuICAgICAgcmVzdWx0ID0gbm9kZTtcbiAgICB9XG5cbiAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgbm9kZS5mb3JFYWNoQ2hpbGQod2Fsayk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKiogQ3JlYXRlcyBhbiBgaW1wb3J0UHJvdmlkZXJzRnJvbSh7e21vZHVsZU5hbWV9fSlgIGNhbGwuICovXG5mdW5jdGlvbiBjcmVhdGVJbXBvcnRQcm92aWRlcnNGcm9tQ2FsbChtb2R1bGVOYW1lOiBzdHJpbmcpOiB0cy5DYWxsRXhwcmVzc2lvbiB7XG4gIHJldHVybiB0cy5mYWN0b3J5LmNyZWF0ZUNhbGxDaGFpbihcbiAgICB0cy5mYWN0b3J5LmNyZWF0ZUlkZW50aWZpZXIoJ2ltcG9ydFByb3ZpZGVyc0Zyb20nKSxcbiAgICB1bmRlZmluZWQsXG4gICAgdW5kZWZpbmVkLFxuICAgIFt0cy5mYWN0b3J5LmNyZWF0ZUlkZW50aWZpZXIobW9kdWxlTmFtZSldLFxuICApO1xufVxuXG4vKiogQ3JlYXRlcyBhIGBwcm92aWRlcnM6IFtpbXBvcnRQcm92aWRlcnNGcm9tKHt7bW9kdWxlTmFtZX19KV1gIHByb3BlcnR5IGFzc2lnbm1lbnQuICovXG5mdW5jdGlvbiBjcmVhdGVQcm92aWRlcnNBc3NpZ25tZW50KG1vZHVsZU5hbWU6IHN0cmluZyk6IHRzLlByb3BlcnR5QXNzaWdubWVudCB7XG4gIHJldHVybiB0cy5mYWN0b3J5LmNyZWF0ZVByb3BlcnR5QXNzaWdubWVudChcbiAgICAncHJvdmlkZXJzJyxcbiAgICB0cy5mYWN0b3J5LmNyZWF0ZUFycmF5TGl0ZXJhbEV4cHJlc3Npb24oW2NyZWF0ZUltcG9ydFByb3ZpZGVyc0Zyb21DYWxsKG1vZHVsZU5hbWUpXSksXG4gICk7XG59XG4iXX0=
|