@anglr/dynamic 1.0.0-beta.20230126082913 → 1.0.0-beta.20230127123633

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (17) hide show
  1. package/es2015/relations/src/services/relationsChangeDetector/relationsChangeDetector.interface.js.map +1 -1
  2. package/es2015/relations/src/services/relationsChangeDetector/relationsChangeDetector.service.js +22 -5
  3. package/es2015/relations/src/services/relationsChangeDetector/relationsChangeDetector.service.js.map +1 -1
  4. package/es2015/relations/src/services/relationsProcessor/relationsProcessor.service.js +2 -0
  5. package/es2015/relations/src/services/relationsProcessor/relationsProcessor.service.js.map +1 -1
  6. package/es2020/relations/src/services/relationsChangeDetector/relationsChangeDetector.interface.js.map +1 -1
  7. package/es2020/relations/src/services/relationsChangeDetector/relationsChangeDetector.service.js +22 -5
  8. package/es2020/relations/src/services/relationsChangeDetector/relationsChangeDetector.service.js.map +1 -1
  9. package/es2020/relations/src/services/relationsProcessor/relationsProcessor.service.js +2 -0
  10. package/es2020/relations/src/services/relationsProcessor/relationsProcessor.service.js.map +1 -1
  11. package/package.json +1 -1
  12. package/relations/src/services/relationsChangeDetector/relationsChangeDetector.interface.d.ts +13 -0
  13. package/relations/src/services/relationsChangeDetector/relationsChangeDetector.interface.d.ts.map +1 -1
  14. package/relations/src/services/relationsChangeDetector/relationsChangeDetector.service.d.ts +7 -7
  15. package/relations/src/services/relationsChangeDetector/relationsChangeDetector.service.d.ts.map +1 -1
  16. package/relations/src/services/relationsProcessor/relationsProcessor.service.d.ts.map +1 -1
  17. package/version.bak +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"relationsChangeDetector.interface.js","sourceRoot":"","sources":["../../../../../relations/src/services/relationsChangeDetector/relationsChangeDetector.interface.ts"],"names":[],"mappings":"","sourcesContent":["import {Injector} from '@angular/core';\n\nimport {RelationsComponent} from '../../interfaces';\n\n/**\n * Defines relations with injector instance\n */\nexport interface RelationsWithInjector\n{\n /**\n * Angular injector for DI\n */\n ɵɵinjector?: Injector;\n}\n\n/**\n * Data that are passed when marking for check\n */\nexport interface MarkForCheckId\n{\n /**\n * Id of component which output has changed\n */\n componentId: string|RelationsComponent;\n\n /**\n * Name of output that has changed\n */\n outputName: string;\n}"]}
1
+ {"version":3,"file":"relationsChangeDetector.interface.js","sourceRoot":"","sources":["../../../../../relations/src/services/relationsChangeDetector/relationsChangeDetector.interface.ts"],"names":[],"mappings":"","sourcesContent":["import {Injector} from '@angular/core';\n\nimport {RelationsComponent} from '../../interfaces';\n\n/**\n * Defines relations with injector instance\n */\nexport interface RelationsWithInjector\n{\n /**\n * Angular injector for DI\n */\n ɵɵinjector?: Injector;\n}\n\n/**\n * Data that are passed when marking for check\n */\nexport interface MarkForCheckId\n{\n /**\n * Id of component which output has changed\n */\n componentId: string|RelationsComponent;\n\n /**\n * Name of output that has changed\n */\n outputName: string;\n}\n\n/**\n * Information about change that is going to happen\n */\nexport interface RelationsChange\n{\n /**\n * Id of component which inputs has changed\n */\n id: string;\n\n /**\n * Array of inputs that has changed\n */\n inputs: string[];\n}"]}
@@ -39,7 +39,7 @@ export class RelationsChangeDetector {
39
39
  this.injector = injector;
40
40
  this.logger = logger;
41
41
  /**
42
- * Objects storing components and theirs outputs and related input components
42
+ * Objects storing components and theirs outputs and related input components def
43
43
  */
44
44
  this.ɵoutputsComponents = {};
45
45
  /**
@@ -78,11 +78,20 @@ export class RelationsChangeDetector {
78
78
  const inputComponents = (_b = (_a = this.outputsComponents[componentId]) === null || _a === void 0 ? void 0 : _a[id.outputName]) !== null && _b !== void 0 ? _b : [];
79
79
  const ids = this.checkRunning && !this.options.detectionInSingleRun ? this.secondRunIds : this.firstRunIds;
80
80
  for (const inputComponent of inputComponents) {
81
+ const item = ids.find(itm => itm.id == inputComponent.inputComponentId);
82
+ //not exists yet
83
+ if (!item) {
84
+ ids.push({
85
+ id: inputComponent.inputComponentId,
86
+ inputs: [inputComponent.inputName],
87
+ });
88
+ continue;
89
+ }
81
90
  //already exists
82
- if (ids.indexOf(inputComponent) >= 0) {
91
+ if (item.inputs.indexOf(inputComponent.inputName) >= 0) {
83
92
  continue;
84
93
  }
85
- ids.push(inputComponent);
94
+ item.inputs.push(inputComponent.inputName);
86
95
  }
87
96
  //schedule check
88
97
  if (!this.timeout) {
@@ -105,7 +114,7 @@ export class RelationsChangeDetector {
105
114
  }
106
115
  for (const inputOutput of relationsDef.inputOutputs) {
107
116
  (_b = (_d = this.ɵoutputsComponents[componentId])[_e = inputOutput.outputName]) !== null && _b !== void 0 ? _b : (_d[_e] = []);
108
- this.ɵoutputsComponents[componentId][inputOutput.outputName].push(inputOutput.inputComponentId);
117
+ this.ɵoutputsComponents[componentId][inputOutput.outputName].push(inputOutput);
109
118
  }
110
119
  }
111
120
  }
@@ -116,7 +125,15 @@ export class RelationsChangeDetector {
116
125
  runCheck() {
117
126
  this.checkRunning = true;
118
127
  for (const id of this.firstRunIds) {
119
- this.relationsProcessor.transferInputsData(id, false);
128
+ const changes = this.relationsProcessor.transferInputsData(id.id, true);
129
+ const allInputs = Object.keys(changes.changes);
130
+ //TODO: maybe move into relations processor
131
+ for (const inputName of allInputs) {
132
+ //remove non existing change
133
+ if (!(inputName in id.inputs)) {
134
+ delete changes.changes[inputName];
135
+ }
136
+ }
120
137
  }
121
138
  if (this.options.detectionInSingleRun) {
122
139
  this.firstRunIds = [];
@@ -1 +1 @@
1
- {"version":3,"file":"relationsChangeDetector.service.js","sourceRoot":"","sources":["../../../../../relations/src/services/relationsChangeDetector/relationsChangeDetector.service.ts"],"names":[],"mappings":"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","sourcesContent":["import {inject, Inject, Injectable, Injector, Optional} from '@angular/core';\nimport {LOGGER, Logger} from '@anglr/common';\nimport {BindThis, Dictionary, isEmptyObject, isString} from '@jscrpt/common';\n\nimport {RelationsComponentManager} from '../relationsComponentManager/relationsComponentManager.service';\nimport {RelationsProcessorComponentData} from '../relationsProcessor/relationsProcessor.interface';\nimport {RelationsProcessor} from '../relationsProcessor/relationsProcessor.service';\nimport {MarkForCheckId} from './relationsChangeDetector.interface';\nimport {RelationsChangeDetectorOptions} from './relationsChangeDetector.options';\n\n/**\n * Change detector for relations, which allows async change detection\n */\n@Injectable()\nexport class RelationsChangeDetector\n{\n //######################### protected properties #########################\n\n /**\n * Instance of relations processor for handling relations\n */\n protected ɵrelationsProcessor: RelationsProcessor|undefined|null;\n\n /**\n * Gets instance of relations processor for handling relations\n */\n protected get relationsProcessor(): RelationsProcessor\n {\n return (this.ɵrelationsProcessor ??= this.injector.get(RelationsProcessor));\n }\n\n /**\n * Instance of relations component manager storing registered components\n */\n protected ɵrelationsComponentManager: RelationsComponentManager|undefined|null;\n\n /**\n * Gets instance of relations component manager storing registered components\n */\n protected get relationsComponentManager(): RelationsComponentManager\n {\n return (this.ɵrelationsComponentManager ??= this.injector.get(RelationsComponentManager));\n }\n\n /**\n * Objects storing components and theirs outputs and related input components\n */\n protected ɵoutputsComponents: Dictionary<Dictionary<string[]>> = {};\n\n /**\n * Instance of parent relations change detector\n */\n protected parent: RelationsChangeDetector|undefined|null = inject(RelationsChangeDetector, {optional: true, skipSelf: true,});\n\n /**\n * Objects storing components and theirs outputs and related input components\n */\n protected get outputsComponents(): Dictionary<Dictionary<string[]>>\n {\n if(isEmptyObject(this.ɵoutputsComponents) && this.parent)\n {\n return this.parent.outputsComponents;\n }\n\n return this.ɵoutputsComponents;\n }\n\n /**\n * Options for relations change detector\n */\n protected options: RelationsChangeDetectorOptions;\n\n /**\n * Identifier of running timeout\n */\n protected timeout: number|undefined|null;\n\n /**\n * Array of input component ids that should be checked in first run\n */\n protected firstRunIds: string[] = [];\n\n /**\n * Array of input component ids that should be checked in second run\n */\n protected secondRunIds: string[] = [];\n\n /**\n * Indication whether is check running\n */\n protected checkRunning: boolean = false;\n\n //######################### constructor #########################\n constructor(protected injector: Injector,\n @Inject(LOGGER) protected logger: Logger,\n @Optional() options?: RelationsChangeDetectorOptions,)\n {\n if(!options || !(options instanceof RelationsChangeDetectorOptions))\n {\n options = new RelationsChangeDetectorOptions();\n }\n\n this.options = options;\n }\n\n //######################### public methods #########################\n\n /**\n * Marks input component connected to this for checking\n * @param id - Identification of what should be checked\n */\n public markForCheck(id: MarkForCheckId): void\n {\n const componentId = isString(id.componentId) ? id.componentId : this.relationsComponentManager.getId(id.componentId);\n\n if(!componentId)\n {\n this.logger.warn('RelationsChangeDetector: Unable to find component!');\n\n return;\n }\n\n const inputComponents = this.outputsComponents[componentId]?.[id.outputName] ?? [];\n const ids = this.checkRunning && !this.options.detectionInSingleRun ? this.secondRunIds : this.firstRunIds;\n\n for(const inputComponent of inputComponents)\n {\n //already exists\n if(ids.indexOf(inputComponent) >= 0)\n {\n continue;\n }\n\n ids.push(inputComponent);\n }\n\n //schedule check\n if(!this.timeout)\n {\n this.timeout = setTimeout(this.runCheck, 0) as unknown as number;\n }\n }\n\n /**\n *\n * @param relations - Object storing current relations\n */\n public initialize(relations: Dictionary<RelationsProcessorComponentData>): void\n {\n this.ɵoutputsComponents = {};\n\n for(const componentId in relations)\n {\n const relationsDef = relations[componentId];\n\n this.ɵoutputsComponents[componentId] ??= {};\n\n if(!relationsDef.inputOutputs)\n {\n continue;\n }\n\n for(const inputOutput of relationsDef.inputOutputs)\n {\n this.ɵoutputsComponents[componentId][inputOutput.outputName] ??= [];\n this.ɵoutputsComponents[componentId][inputOutput.outputName].push(inputOutput.inputComponentId);\n }\n }\n }\n\n //######################### protected methods #########################\n\n /**\n * Runs check for marked components\n */\n @BindThis\n protected runCheck(): void\n {\n this.checkRunning = true;\n\n for(const id of this.firstRunIds)\n {\n this.relationsProcessor.transferInputsData(id, false);\n }\n\n if(this.options.detectionInSingleRun)\n {\n this.firstRunIds = [];\n }\n else\n {\n this.firstRunIds = this.secondRunIds;\n this.secondRunIds = [];\n }\n\n this.checkRunning = false;\n this.timeout = null;\n }\n}\n"]}
1
+ {"version":3,"file":"relationsChangeDetector.service.js","sourceRoot":"","sources":["../../../../../relations/src/services/relationsChangeDetector/relationsChangeDetector.service.ts"],"names":[],"mappings":"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","sourcesContent":["import {inject, Inject, Injectable, Injector, Optional} from '@angular/core';\nimport {LOGGER, Logger} from '@anglr/common';\nimport {BindThis, Dictionary, isEmptyObject, isString} from '@jscrpt/common';\n\nimport {RelationsComponentManager} from '../relationsComponentManager/relationsComponentManager.service';\nimport {RelationsProcessorComponentData, RelationsProcessorInputOutputData} from '../relationsProcessor/relationsProcessor.interface';\nimport {RelationsProcessor} from '../relationsProcessor/relationsProcessor.service';\nimport {MarkForCheckId, RelationsChange} from './relationsChangeDetector.interface';\nimport {RelationsChangeDetectorOptions} from './relationsChangeDetector.options';\n\n/**\n * Change detector for relations, which allows async change detection\n */\n@Injectable()\nexport class RelationsChangeDetector\n{\n //######################### protected properties #########################\n\n /**\n * Instance of relations processor for handling relations\n */\n protected ɵrelationsProcessor: RelationsProcessor|undefined|null;\n\n /**\n * Gets instance of relations processor for handling relations\n */\n protected get relationsProcessor(): RelationsProcessor\n {\n return (this.ɵrelationsProcessor ??= this.injector.get(RelationsProcessor));\n }\n\n /**\n * Instance of relations component manager storing registered components\n */\n protected ɵrelationsComponentManager: RelationsComponentManager|undefined|null;\n\n /**\n * Gets instance of relations component manager storing registered components\n */\n protected get relationsComponentManager(): RelationsComponentManager\n {\n return (this.ɵrelationsComponentManager ??= this.injector.get(RelationsComponentManager));\n }\n\n /**\n * Objects storing components and theirs outputs and related input components def\n */\n protected ɵoutputsComponents: Dictionary<Dictionary<RelationsProcessorInputOutputData[]>> = {};\n\n /**\n * Instance of parent relations change detector\n */\n protected parent: RelationsChangeDetector|undefined|null = inject(RelationsChangeDetector, {optional: true, skipSelf: true,});\n\n /**\n * Objects storing components and theirs outputs and related input components\n */\n protected get outputsComponents(): Dictionary<Dictionary<RelationsProcessorInputOutputData[]>>\n {\n if(isEmptyObject(this.ɵoutputsComponents) && this.parent)\n {\n return this.parent.outputsComponents;\n }\n\n return this.ɵoutputsComponents;\n }\n\n /**\n * Options for relations change detector\n */\n protected options: RelationsChangeDetectorOptions;\n\n /**\n * Identifier of running timeout\n */\n protected timeout: number|undefined|null;\n\n /**\n * Array of input component ids that should be checked in first run\n */\n protected firstRunIds: RelationsChange[] = [];\n\n /**\n * Array of input component ids that should be checked in second run\n */\n protected secondRunIds: RelationsChange[] = [];\n\n /**\n * Indication whether is check running\n */\n protected checkRunning: boolean = false;\n\n //######################### constructor #########################\n constructor(protected injector: Injector,\n @Inject(LOGGER) protected logger: Logger,\n @Optional() options?: RelationsChangeDetectorOptions,)\n {\n if(!options || !(options instanceof RelationsChangeDetectorOptions))\n {\n options = new RelationsChangeDetectorOptions();\n }\n\n this.options = options;\n }\n\n //######################### public methods #########################\n\n /**\n * Marks input component connected to this for checking\n * @param id - Identification of what should be checked\n */\n public markForCheck(id: MarkForCheckId): void\n {\n const componentId = isString(id.componentId) ? id.componentId : this.relationsComponentManager.getId(id.componentId);\n\n if(!componentId)\n {\n this.logger.warn('RelationsChangeDetector: Unable to find component!');\n\n return;\n }\n\n const inputComponents = this.outputsComponents[componentId]?.[id.outputName] ?? [];\n const ids = this.checkRunning && !this.options.detectionInSingleRun ? this.secondRunIds : this.firstRunIds;\n\n for(const inputComponent of inputComponents)\n {\n const item = ids.find(itm => itm.id == inputComponent.inputComponentId);\n\n //not exists yet\n if(!item)\n {\n ids.push(\n {\n id: inputComponent.inputComponentId,\n inputs: [inputComponent.inputName],\n });\n\n continue;\n }\n\n //already exists\n if(item.inputs.indexOf(inputComponent.inputName) >= 0)\n {\n continue;\n }\n\n item.inputs.push(inputComponent.inputName);\n }\n\n //schedule check\n if(!this.timeout)\n {\n this.timeout = setTimeout(this.runCheck, 0) as unknown as number;\n }\n }\n\n /**\n *\n * @param relations - Object storing current relations\n */\n public initialize(relations: Dictionary<RelationsProcessorComponentData>): void\n {\n this.ɵoutputsComponents = {};\n\n for(const componentId in relations)\n {\n const relationsDef = relations[componentId];\n\n this.ɵoutputsComponents[componentId] ??= {};\n\n if(!relationsDef.inputOutputs)\n {\n continue;\n }\n\n for(const inputOutput of relationsDef.inputOutputs)\n {\n this.ɵoutputsComponents[componentId][inputOutput.outputName] ??= [];\n this.ɵoutputsComponents[componentId][inputOutput.outputName].push(inputOutput);\n }\n }\n }\n\n //######################### protected methods #########################\n\n /**\n * Runs check for marked components\n */\n @BindThis\n protected runCheck(): void\n {\n this.checkRunning = true;\n\n for(const id of this.firstRunIds)\n {\n const changes = this.relationsProcessor.transferInputsData(id.id, true);\n const allInputs = Object.keys(changes.changes);\n\n //TODO: maybe move into relations processor\n for(const inputName of allInputs)\n {\n //remove non existing change\n if(!(inputName in id.inputs))\n {\n delete changes.changes[inputName];\n }\n }\n }\n\n if(this.options.detectionInSingleRun)\n {\n this.firstRunIds = [];\n }\n else\n {\n this.firstRunIds = this.secondRunIds;\n this.secondRunIds = [];\n }\n\n this.checkRunning = false;\n this.timeout = null;\n }\n}\n"]}
@@ -514,12 +514,14 @@ export class RelationsProcessor {
514
514
  for (const comp of components) {
515
515
  if (!comp.ɵɵRelationsOptionsInitialized) {
516
516
  comp.relationsOptions = meta.metadataOptions;
517
+ comp.ɵɵRelationsOptionsInitialized = true;
517
518
  }
518
519
  }
519
520
  }
520
521
  else {
521
522
  if (!components.ɵɵRelationsOptionsInitialized) {
522
523
  components.relationsOptions = meta.metadataOptions;
524
+ components.ɵɵRelationsOptionsInitialized = true;
523
525
  }
524
526
  }
525
527
  }
@@ -1 +1 @@
1
- {"version":3,"file":"relationsProcessor.service.js","sourceRoot":"","sources":["../../../../../relations/src/services/relationsProcessor/relationsProcessor.service.ts"],"names":[],"mappings":"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","sourcesContent":["import {inject, Inject, Injectable, Injector, OnDestroy, Optional, SimpleChanges} from '@angular/core';\nimport {LOGGER, Logger} from '@anglr/common';\nimport {DynamicItemLoader} from '@anglr/dynamic';\nimport {Dictionary, isBlank, noop, NoopAction} from '@jscrpt/common';\nimport {Observable, Subscription} from 'rxjs';\n\nimport {RelationsComponent, RelationsComponentMetadata, RelationsComponentType} from '../../interfaces';\nimport {RelationsComponentManager} from '../relationsComponentManager/relationsComponentManager.service';\nimport {RelationsManager} from '../relationsManager/relationsManager.service';\nimport {RelationsDataTransferInstruction, RelationsProcessorComponentData, RelationsProcessorInputOutputData} from './relationsProcessor.interface';\nimport {RELATIONS_COMPONENTS_LOADER, RELATIONS_PROCESSOR_SKIP_INIT} from '../../misc/tokens';\nimport {RelationsComponentDef, RelationsProcessorComponent} from '../../misc/types';\nimport {RelationsDataTransferInstructionImpl} from './relationsDataTransferInstruction';\nimport {isAssigned, isSkipInit} from '../../misc/utils';\nimport {RelationsChangeDetector} from '../relationsChangeDetector/relationsChangeDetector.service';\n\n/**\n * Processor that applies relations to registered components\n */\n@Injectable()\nexport class RelationsProcessor implements OnDestroy\n{\n //######################### protected fields #########################\n\n /**\n * Promise used for indication that processor was initialized\n */\n protected ɵInitialized: Promise<void> = Promise.resolve();\n\n /**\n * Relations metadata\n */\n protected ɵRelations: Dictionary<RelationsProcessorComponentData> = {};\n\n /**\n * Array of backward relations, relations that are used for obtaining data for inputs\n */\n protected ɵBackwardRelations: Dictionary<RelationsProcessorInputOutputData[]> = {};\n\n /**\n * Resolves initialized\n */\n protected resolveInitialized: NoopAction = noop;\n\n /**\n * Subscriptions created during initialization\n */\n protected initSubscriptions: Subscription = new Subscription();\n\n /**\n * Gets or sets relations metadata\n */\n protected get relations(): Dictionary<RelationsProcessorComponentData>\n {\n if(this.parent)\n {\n return this.parent.relations;\n }\n\n return this.ɵRelations;\n }\n protected set relations(value: Dictionary<RelationsProcessorComponentData>)\n {\n this.ɵRelations = value;\n }\n\n /**\n * Gets or sets array of backward relations, relations that are used for obtaining data for inputs\n */\n protected get backwardRelations(): Dictionary<RelationsProcessorInputOutputData[]>\n {\n if(this.parent)\n {\n return this.parent.backwardRelations;\n }\n\n return this.ɵBackwardRelations;\n }\n protected set backwardRelations(value: Dictionary<RelationsProcessorInputOutputData[]>)\n {\n this.ɵBackwardRelations = value;\n }\n\n /**\n * Instance of parent relations processor\n */\n protected parent: RelationsProcessor|null = null;\n\n /**\n * Id of scope\n */\n protected scopeId: string|null = null;\n\n /**\n * Injected relations change detector\n */\n protected relationsChangeDetector: RelationsChangeDetector = inject(RelationsChangeDetector);\n\n //######################### public properties #########################\n\n /**\n * Gets promise that completes when processor was initialized\n */\n public get initialized(): Promise<void>\n {\n return this.ɵInitialized;\n }\n\n //######################### constructor #########################\n constructor(protected relationsManager: RelationsManager,\n protected componentManager: RelationsComponentManager,\n protected injector: Injector,\n @Inject(RELATIONS_COMPONENTS_LOADER) protected loader: DynamicItemLoader<RelationsComponentDef>,\n @Inject(LOGGER) @Optional() protected logger?: Logger,\n @Inject(RELATIONS_PROCESSOR_SKIP_INIT) @Optional() skipInit?: boolean,)\n {\n if(!skipInit)\n {\n this.initSubscriptions.add(this.relationsManager.relationsChange.subscribe(() => this.initializeRelations()));\n\n this.initializeRelations();\n }\n }\n\n //######################### public methods - implementation of OnDestroy #########################\n\n /**\n * Called when component is destroyed\n */\n public ngOnDestroy(): void\n {\n this.initSubscriptions.unsubscribe();\n\n this.destroyRelations();\n }\n\n //######################### public methods #########################\n\n /**\n * Updates relations\n * @param id - Id of component to be registered\n */\n public updateRelations(id: string): void\n {\n this.logger?.debug('RelationsProcessor: Updating relations for {@id}', {id});\n\n const relations: RelationsProcessorComponentData = this.relations[id];\n const backwardRelations = this.backwardRelations[id];\n let components = this.componentManager.get(id);\n\n //this component has no relations\n if(!relations || !components)\n {\n this.logger?.warn('RelationsProcessor: No relations for {@id}', {id});\n\n return;\n }\n\n this.initOptions(components, relations);\n\n //initialize default value from connection to this\n if(backwardRelations?.length)\n {\n backwardRelations.forEach(inputOutput =>\n {\n this.initBackwardRelation(inputOutput);\n });\n }\n\n if(relations?.inputOutputs)\n {\n if(!Array.isArray(components))\n {\n components = [components];\n }\n\n for(const outputComponent of components)\n {\n outputComponent.ɵɵRelationsOutputsChangeSubscriptions?.forEach(subscription => subscription.unsubscribe());\n outputComponent.ɵɵRelationsOutputsChangeSubscriptions = [];\n\n for(const inputOutput of relations.inputOutputs)\n {\n let inputComponents = this.componentManager.get(inputOutput.inputComponentId);\n\n if(inputComponents && !Array.isArray(inputComponents))\n {\n inputComponents = [inputComponents];\n }\n\n this.logger?.verbose('RelationsProcessor: processing input outputs {@data} ', {id, inputOutput, inputComponents, components});\n\n const outputObservable = (outputComponent as any)[`${inputOutput.outputName}Change`] as Observable<any>;\n\n //check whether is observable output\n if(!(outputObservable instanceof Observable))\n {\n this.logger?.warn('RelationsProcessor: Output on component {@data} is not observable', inputOutput);\n\n continue;\n }\n\n //set listening for output changes\n outputComponent.ɵɵRelationsOutputsChangeSubscriptions.push(outputObservable.subscribe(() =>\n {\n let inputs = this.componentManager.get(inputOutput.inputComponentId);\n\n if(!inputs)\n {\n this.logger?.warn('RelationsProcessor: Missing input components {@data} on output change', inputOutput);\n\n return;\n }\n\n if(!Array.isArray(inputs))\n {\n inputs = [inputs];\n }\n\n for(const input of inputs)\n {\n this.transferData(outputComponent, inputOutput.outputName, input, inputOutput.inputName, false);\n }\n }));\n\n if(!inputComponents || !Array.isArray(inputComponents))\n {\n this.logger?.warn('RelationsProcessor: Missing input components {@data}', inputOutput);\n\n continue;\n }\n\n for(const inputComponent of inputComponents)\n {\n const id = `${inputComponent.ɵɵRelationsComponentId}-${outputComponent.ɵɵRelationsComponentId}`;\n\n //init data transfer only if not marked as skip init and was not initialized and was already at least once assigned\n if(!isSkipInit(outputComponent, inputOutput.outputName) && !inputOutput.initialized[id] && isAssigned(outputComponent, inputOutput.outputName))\n {\n inputOutput.initialized[id] = this.transferData(outputComponent, inputOutput.outputName, inputComponent, inputOutput.inputName, true);\n }\n }\n }\n }\n }\n }\n\n /**\n * Method used for destroying component\n */\n public destroyComponent(id: string): void\n {\n const metadata: RelationsProcessorComponentData = this.relations[id];\n const backwardRelations = this.backwardRelations[id];\n\n //uninitialize backward relations\n if(backwardRelations)\n {\n for(const relation of backwardRelations)\n {\n relation.initialized = {};\n }\n }\n\n //destroy relations\n if(metadata)\n {\n let components = this.componentManager.get(id);\n\n if(components)\n {\n if(!components)\n {\n return;\n }\n\n if(!Array.isArray(components))\n {\n components = [components];\n }\n\n for(const cmp of components)\n {\n cmp.ɵɵRelationsOutputsChangeSubscriptions?.forEach(subscription => subscription.unsubscribe());\n cmp.ɵɵRelationsOutputsChangeSubscriptions = [];\n cmp.ɵɵRelationsOptionsInitialized = false;\n }\n }\n\n if(metadata.inputOutputs && Array.isArray(metadata.inputOutputs))\n {\n for(const inputOutput of metadata.inputOutputs)\n {\n inputOutput.initialized = {};\n }\n }\n\n //destroy auto created components and unregister them\n if(metadata.autoCreated)\n {\n let components = this.componentManager.get(id);\n\n if(!components)\n {\n return;\n }\n\n if(!Array.isArray(components))\n {\n components = [components];\n }\n\n this.componentManager.unregisterComponent(id);\n\n for(const cmp of components)\n {\n cmp.ngOnDestroy?.();\n }\n }\n }\n }\n\n /**\n * Opens new scope of relations processor\n * @param id - Id of newly created scope\n * @param componentManager - Scoped instance of component manager\n * @param injector - Injector for current scope\n */\n public openScope(id: string,\n componentManager: RelationsComponentManager,\n injector: Injector,): RelationsProcessor\n {\n const processor = new RelationsProcessor(this.relationsManager, componentManager, injector, this.loader, this.logger, true);\n processor.scopeId = id;\n processor.parent = this;\n\n for(const componentId in this.relations)\n {\n const relationsDef = this.relations[componentId];\n\n //Same scope initialize\n if(relationsDef.scope === id && relationsDef.componentType)\n {\n const instance = new relationsDef.componentType(injector);\n componentManager.registerComponent(componentId, instance);\n processor.updateRelations(componentId);\n }\n }\n\n return processor;\n }\n\n /**\n * Destroyes opened scope itself\n */\n public destroyScope(): void\n {\n for(const componentId in this.relations)\n {\n const relationsDef = this.relations[componentId];\n\n //Same scope initialize\n if(relationsDef.scope === this.scopeId)\n {\n this.destroyComponent(componentId);\n }\n }\n }\n\n /**\n * Transfers data for specified component using its output relations, all data are transfered in single change set per component\n * @param id - Id of component whose outputs relations should be applied to transfer data\n * @param delayed - Indication whether delay data transfer and only generate instructions, if true returns dictionary with data transfer instructions per components\n */\n public transferOutputsData(id: string, delayed: true): Dictionary<RelationsDataTransferInstruction>\n public transferOutputsData(id: string, delayed: false): null\n public transferOutputsData(id: string, delayed: boolean = false): null|Dictionary<RelationsDataTransferInstruction>\n {\n const transfers: Dictionary<RelationsDataTransferInstructionImpl> = {};\n const relations: RelationsProcessorComponentData = this.relations[id];\n let components = this.componentManager.get(id);\n\n if(!relations || !components)\n {\n this.logger?.warn('RelationsProcessor: No relations for {@id}', {id});\n\n return delayed ? transfers : null;\n }\n\n if(relations?.inputOutputs)\n {\n if(!Array.isArray(components))\n {\n components = [components];\n }\n\n //for each component containing outputs\n for(const outputComponent of components)\n {\n //for each relation\n for(const inputOutput of relations.inputOutputs)\n {\n let inputComponents = this.componentManager.get(inputOutput.inputComponentId);\n\n if(inputComponents && !Array.isArray(inputComponents))\n {\n inputComponents = [inputComponents];\n }\n\n if(!inputComponents || !Array.isArray(inputComponents))\n {\n this.logger?.warn('RelationsProcessor: Missing input components {@data}', inputOutput);\n\n continue;\n }\n\n transfers[inputOutput.inputComponentId] ??= new RelationsDataTransferInstructionImpl(inputComponents);\n\n //for each input component\n for(const inputComponent of inputComponents)\n {\n if(!outputComponent || !inputComponent)\n {\n continue;\n }\n\n const previousValue = (inputComponent as any)[inputOutput.inputName];\n const currentValue = (outputComponent as any)[inputOutput.outputName];\n\n transfers[inputOutput.inputComponentId].changes[inputOutput.inputName] =\n {\n previousValue,\n currentValue,\n firstChange: false,\n isFirstChange: () => false,\n };\n }\n }\n }\n\n if(!delayed)\n {\n //transfers data\n for(const key in transfers)\n {\n const transfer = transfers[key];\n\n transfer.applyChanges();\n }\n }\n }\n\n return delayed ? transfers : null;\n }\n\n /**\n * Transfers data for specified component using its inputs relations, all data are transfered in single change\n * @param id - Id of component whose inputs relations should be applied to transfer data\n * @param delayed - Indication whether delay data transfer and only generate instructions, if true returns transfer instructions\n */\n public transferInputsData(id: string, delayed: true): RelationsDataTransferInstruction\n public transferInputsData(id: string, delayed: false): null\n public transferInputsData(id: string, delayed: boolean = false): null|RelationsDataTransferInstruction\n {\n const backwardRelations = this.backwardRelations[id];\n const inputComponent = this.componentManager.get(id);\n\n if(!backwardRelations)\n {\n this.logger?.warn('RelationsProcessor: No backward relations for {@id}', {id});\n\n return delayed ? new RelationsDataTransferInstructionImpl([]) : null;\n }\n\n if(!inputComponent)\n {\n this.logger?.warn('RelationsProcessor: Missing input components for {@id}', {id});\n\n return delayed ? new RelationsDataTransferInstructionImpl([]) : null;\n }\n\n if(Array.isArray(inputComponent))\n {\n this.logger?.error('RelationsProcessor: Only one component must be available for id {@id}', {id});\n\n return delayed ? new RelationsDataTransferInstructionImpl([]) : null;\n }\n\n const transfer: RelationsDataTransferInstructionImpl = new RelationsDataTransferInstructionImpl([inputComponent]);\n\n //for each backward relation\n for(const backwardRelation of backwardRelations)\n {\n const outputComponent = this.componentManager.get(backwardRelation.outputComponentId);\n\n if((Array.isArray(outputComponent)))\n {\n this.logger?.error('RelationsProcessor: Only one output component must be available for id {@id}', {id});\n\n continue;\n }\n\n if(!outputComponent || !inputComponent)\n {\n continue;\n }\n\n const previousValue = (inputComponent as any)[backwardRelation.inputName];\n const currentValue = (outputComponent as any)[backwardRelation.outputName];\n\n transfer.changes[backwardRelation.inputName] =\n {\n previousValue,\n currentValue,\n firstChange: false,\n isFirstChange: () => false,\n };\n }\n\n if(!delayed)\n {\n transfer.applyChanges();\n }\n\n return delayed ? transfer : null;\n }\n\n //######################### protected methods #########################\n\n /**\n * Initialize relations from metadata\n */\n protected async initializeRelations(): Promise<void>\n {\n await this.destroyRelations();\n this.setInitializePromise();\n\n this.logger?.debug('RelationsProcessor: initializing relations');\n\n //empty relations\n if(!this.relationsManager.relations.length)\n {\n this.resolveInitialized();\n\n return;\n }\n\n for(const meta of this.relationsManager.relations)\n {\n const outputs: RelationsProcessorInputOutputData[] = [];\n\n //no outputs metadata\n if(!meta.outputs)\n {\n continue;\n }\n\n for(const output of meta.outputs)\n {\n //no inputs metadata\n if(!output.inputs)\n {\n continue;\n }\n\n for(const input of output.inputs)\n {\n const inputOutput: RelationsProcessorInputOutputData =\n {\n inputComponentId: input.id,\n outputComponentId: meta.id,\n inputName: input.inputName,\n outputName: output.outputName,\n initialized: {},\n };\n\n outputs.push(inputOutput);\n\n if(!this.backwardRelations[input.id])\n {\n this.backwardRelations[input.id] = [];\n }\n\n this.backwardRelations[input.id].push(inputOutput);\n }\n }\n\n //sets options for relations component\n await this.initComponent(meta, outputs);\n }\n\n this.relationsChangeDetector.initialize(this.relations);\n this.resolveInitialized();\n }\n\n /**\n * Initialize backward relations\n * @param inputOutput - Data for input and output\n */\n protected initBackwardRelation(inputOutput: RelationsProcessorInputOutputData): void\n {\n let outputComponents = this.componentManager.get(inputOutput.outputComponentId);\n let inputComponents = this.componentManager.get(inputOutput.inputComponentId);\n\n if((isBlank(outputComponents) || Array.isArray(outputComponents) && !outputComponents.length) ||\n (isBlank(inputComponents) || Array.isArray(inputComponents) && !inputComponents.length))\n {\n this.logger?.warn('RelationsProcessor: missing metadata for backward relations {@data}', inputOutput);\n\n return;\n }\n\n if(!Array.isArray(inputComponents))\n {\n inputComponents = [inputComponents];\n }\n\n if(!Array.isArray(outputComponents))\n {\n outputComponents = [outputComponents];\n }\n\n for(const inputCmp of inputComponents)\n {\n for(const outputCmp of outputComponents)\n {\n const id = `${inputCmp.ɵɵRelationsComponentId}-${outputCmp.ɵɵRelationsComponentId}`;\n\n //init data transfer only if not marked as skip init and was not initialized and was already at least once assigned\n if(!isSkipInit(outputCmp, inputOutput.outputName) && !inputOutput.initialized[id] && isAssigned(outputCmp, inputOutput.outputName))\n {\n inputOutput.initialized[id] = this.transferData(outputCmp, inputOutput.outputName, inputCmp, inputOutput.inputName, true);\n }\n }\n }\n }\n\n /**\n * Transfers data from source property to target property\n * @param source Instance of source object containing source property with data\n * @param sourceProperty Name of source property with data that are transfered\n * @param target Instance of target object containing target property for data\n * @param targetProperty Name of target property which will be filled with data\n * @param initial Indication whether is transfer of data initial, or on event\n */\n protected transferData(source: RelationsComponent, sourceProperty: string, target: RelationsComponent, targetProperty: string, initial: boolean): boolean\n {\n if(!source || !target)\n {\n return false;\n }\n\n const previousValue = (target as any)[targetProperty];\n const currentValue = (source as any)[sourceProperty];\n (target as any)[targetProperty] = (source as any)[sourceProperty];\n const changes: SimpleChanges = {};\n\n changes[targetProperty] =\n {\n previousValue,\n currentValue,\n firstChange: initial,\n isFirstChange: () => initial\n };\n\n target.ngOnChanges?.(changes);\n target.invalidateVisuals();\n\n return true;\n }\n\n /**\n * Initialize relation component\n * @param meta - Metadata for relations component\n * @param outputs - Array of outputs data for relations component\n */\n protected async initComponent(meta: RelationsComponentMetadata, outputs: RelationsProcessorInputOutputData[]): Promise<void>\n {\n const component = this.componentManager.get(meta.id);\n\n if(component)\n {\n this.initRelation(false, meta, outputs, null, null);\n this.updateRelations(meta.id);\n\n return;\n }\n\n const componentMeta = await this.loader.loadItem(meta);\n\n if(!componentMeta)\n {\n this.initRelation(false, meta, outputs, null, null);\n\n this.logger?.warn('RelationsProcessor: Unable to load relations component! {@meta}', {package: meta.package, name: meta.name});\n\n return;\n }\n\n if(!meta.scope)\n {\n const instance = new componentMeta.data(this.injector);\n this.componentManager.registerComponent(meta.id, instance);\n }\n\n this.initRelation(true, meta, outputs, meta.scope ?? null, meta.scope ? componentMeta.data : null);\n this.updateRelations(meta.id);\n }\n\n /**\n * Initialize relation for metadata and component\n * @param autoCreated - Indication whether was component auto created or not\n * @param meta - Metadata for relations component\n * @param inputOutputs - Array of outputs data for relations\n * @param scope - Current scope used for this relations component\n * @param componentType - Type used for creation of relations component (only for scoped ones)\n */\n protected initRelation(autoCreated: boolean, meta: RelationsComponentMetadata, inputOutputs: RelationsProcessorInputOutputData[], scope: string|null, componentType: RelationsComponentType|null): void\n {\n this.relations[meta.id] =\n {\n autoCreated,\n inputOutputs,\n metadataOptions: meta.relationsOptions,\n componentType,\n scope,\n };\n }\n\n /**\n * Initialize relations component options\n * @param components - Components which options should be initialized\n * @param meta - Metadata containing options for initialization\n */\n protected initOptions(components: RelationsProcessorComponent|RelationsProcessorComponent[], meta: RelationsProcessorComponentData): void\n {\n if(Array.isArray(components))\n {\n for(const comp of components)\n {\n if(!comp.ɵɵRelationsOptionsInitialized)\n {\n comp.relationsOptions = meta.metadataOptions;\n }\n }\n }\n else\n {\n if(!components.ɵɵRelationsOptionsInitialized)\n {\n components.relationsOptions = meta.metadataOptions;\n }\n }\n }\n\n /**\n * Sets initialized promise\n */\n protected setInitializePromise(): void\n {\n this.ɵInitialized = new Promise(resolve => this.resolveInitialized = resolve);\n }\n\n /**\n * Destroys initialized relations\n */\n protected async destroyRelations(): Promise<void>\n {\n await this.ɵInitialized;\n\n Object.keys(this.relations).forEach(id => this.destroyComponent(id));\n\n this.relations = {};\n this.backwardRelations = {};\n }\n}"]}
1
+ {"version":3,"file":"relationsProcessor.service.js","sourceRoot":"","sources":["../../../../../relations/src/services/relationsProcessor/relationsProcessor.service.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAa,QAAQ,EAAgB,MAAM,eAAe,CAAC;AACvG,OAAO,EAAC,MAAM,EAAS,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAC,iBAAiB,EAAC,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAa,OAAO,EAAE,IAAI,EAAa,MAAM,gBAAgB,CAAC;AACrE,OAAO,EAAC,UAAU,EAAE,YAAY,EAAC,MAAM,MAAM,CAAC;AAG9C,OAAO,EAAC,yBAAyB,EAAC,MAAM,gEAAgE,CAAC;AACzG,OAAO,EAAC,gBAAgB,EAAC,MAAM,8CAA8C,CAAC;AAE9E,OAAO,EAAC,2BAA2B,EAAE,6BAA6B,EAAC,MAAM,mBAAmB,CAAC;AAE7F,OAAO,EAAC,oCAAoC,EAAC,MAAM,oCAAoC,CAAC;AACxF,OAAO,EAAC,UAAU,EAAE,UAAU,EAAC,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAC,uBAAuB,EAAC,MAAM,4DAA4D,CAAC;;;;;AAEnG;;GAEG;AAEH,MAAM,OAAO,kBAAkB;IA6B3B;;OAEG;IACH,IAAc,SAAS;QAEnB,IAAG,IAAI,CAAC,MAAM,EACd;YACI,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;SAChC;QAED,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;IACD,IAAc,SAAS,CAAC,KAAkD;QAEtE,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,IAAc,iBAAiB;QAE3B,IAAG,IAAI,CAAC,MAAM,EACd;YACI,OAAO,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC;SACxC;QAED,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACnC,CAAC;IACD,IAAc,iBAAiB,CAAC,KAAsD;QAElF,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;IACpC,CAAC;IAiBD,uEAAuE;IAEvE;;OAEG;IACH,IAAW,WAAW;QAElB,OAAO,IAAI,CAAC,YAAY,CAAC;IAC7B,CAAC;IAED,iEAAiE;IACjE,YAAsB,gBAAkC,EAClC,gBAA2C,EAC3C,QAAkB,EACmB,MAAgD,EACzD,MAAe,EACF,QAAkB;QAL3D,qBAAgB,GAAhB,gBAAgB,CAAkB;QAClC,qBAAgB,GAAhB,gBAAgB,CAA2B;QAC3C,aAAQ,GAAR,QAAQ,CAAU;QACmB,WAAM,GAAN,MAAM,CAA0C;QACzD,WAAM,GAAN,MAAM,CAAS;QA3FjE,sEAAsE;QAEtE;;WAEG;QACO,iBAAY,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;QAE1D;;WAEG;QACO,eAAU,GAAgD,EAAE,CAAC;QAEvE;;WAEG;QACO,uBAAkB,GAAoD,EAAE,CAAC;QAEnF;;WAEG;QACO,uBAAkB,GAAe,IAAI,CAAC;QAEhD;;WAEG;QACO,sBAAiB,GAAiB,IAAI,YAAY,EAAE,CAAC;QAoC/D;;WAEG;QACO,WAAM,GAA4B,IAAI,CAAC;QAEjD;;WAEG;QACO,YAAO,GAAgB,IAAI,CAAC;QAEtC;;WAEG;QACO,4BAAuB,GAA4B,MAAM,CAAC,uBAAuB,CAAC,CAAC;QAoBzF,IAAG,CAAC,QAAQ,EACZ;YACI,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC,CAAC;YAE9G,IAAI,CAAC,mBAAmB,EAAE,CAAC;SAC9B;IACL,CAAC;IAED,kGAAkG;IAElG;;OAEG;IACI,WAAW;QAEd,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC;QAErC,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC5B,CAAC;IAED,oEAAoE;IAEpE;;;OAGG;IACI,eAAe,CAAC,EAAU;;QAE7B,MAAA,IAAI,CAAC,MAAM,0CAAE,KAAK,CAAC,kDAAkD,EAAE,EAAC,EAAE,EAAC,CAAC,CAAC;QAE7E,MAAM,SAAS,GAAoC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACtE,MAAM,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;QACrD,IAAI,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAE/C,iCAAiC;QACjC,IAAG,CAAC,SAAS,IAAI,CAAC,UAAU,EAC5B;YACI,MAAA,IAAI,CAAC,MAAM,0CAAE,IAAI,CAAC,4CAA4C,EAAE,EAAC,EAAE,EAAC,CAAC,CAAC;YAEtE,OAAO;SACV;QAED,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QAExC,kDAAkD;QAClD,IAAG,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAE,MAAM,EAC5B;YACI,iBAAiB,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;gBAEpC,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;YAC3C,CAAC,CAAC,CAAC;SACN;QAED,IAAG,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,YAAY,EAC1B;YACI,IAAG,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAC7B;gBACI,UAAU,GAAG,CAAC,UAAU,CAAC,CAAC;aAC7B;YAED,KAAI,MAAM,eAAe,IAAI,UAAU,EACvC;gBACI,MAAA,eAAe,CAAC,qCAAqC,0CAAE,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,CAAC;gBAC3G,eAAe,CAAC,qCAAqC,GAAG,EAAE,CAAC;gBAE3D,KAAI,MAAM,WAAW,IAAI,SAAS,CAAC,YAAY,EAC/C;oBACI,IAAI,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;oBAE9E,IAAG,eAAe,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,EACrD;wBACI,eAAe,GAAG,CAAC,eAAe,CAAC,CAAC;qBACvC;oBAED,MAAA,IAAI,CAAC,MAAM,0CAAE,OAAO,CAAC,uDAAuD,EAAE,EAAC,EAAE,EAAE,WAAW,EAAE,eAAe,EAAE,UAAU,EAAC,CAAC,CAAC;oBAE9H,MAAM,gBAAgB,GAAI,eAAuB,CAAC,GAAG,WAAW,CAAC,UAAU,QAAQ,CAAoB,CAAC;oBAExG,oCAAoC;oBACpC,IAAG,CAAC,CAAC,gBAAgB,YAAY,UAAU,CAAC,EAC5C;wBACI,MAAA,IAAI,CAAC,MAAM,0CAAE,IAAI,CAAC,mEAAmE,EAAE,WAAW,CAAC,CAAC;wBAEpG,SAAS;qBACZ;oBAED,kCAAkC;oBAClC,eAAe,CAAC,qCAAqC,CAAC,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,GAAG,EAAE;;wBAEvF,IAAI,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;wBAErE,IAAG,CAAC,MAAM,EACV;4BACI,MAAA,IAAI,CAAC,MAAM,0CAAE,IAAI,CAAC,uEAAuE,EAAE,WAAW,CAAC,CAAC;4BAExG,OAAO;yBACV;wBAED,IAAG,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EACzB;4BACI,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC;yBACrB;wBAED,KAAI,MAAM,KAAK,IAAI,MAAM,EACzB;4BACI,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,WAAW,CAAC,UAAU,EAAE,KAAK,EAAE,WAAW,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;yBACnG;oBACL,CAAC,CAAC,CAAC,CAAC;oBAEJ,IAAG,CAAC,eAAe,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,EACtD;wBACI,MAAA,IAAI,CAAC,MAAM,0CAAE,IAAI,CAAC,sDAAsD,EAAE,WAAW,CAAC,CAAC;wBAEvF,SAAS;qBACZ;oBAED,KAAI,MAAM,cAAc,IAAI,eAAe,EAC3C;wBACI,MAAM,EAAE,GAAG,GAAG,cAAc,CAAC,sBAAsB,IAAI,eAAe,CAAC,sBAAsB,EAAE,CAAC;wBAEhG,mHAAmH;wBACnH,IAAG,CAAC,UAAU,CAAC,eAAe,EAAE,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC,IAAI,UAAU,CAAC,eAAe,EAAE,WAAW,CAAC,UAAU,CAAC,EAC9I;4BACI,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,WAAW,CAAC,UAAU,EAAE,cAAc,EAAE,WAAW,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;yBACzI;qBACJ;iBACJ;aACJ;SACJ;IACL,CAAC;IAED;;OAEG;IACI,gBAAgB,CAAC,EAAU;;QAE9B,MAAM,QAAQ,GAAoC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACrE,MAAM,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;QAErD,iCAAiC;QACjC,IAAG,iBAAiB,EACpB;YACI,KAAI,MAAM,QAAQ,IAAI,iBAAiB,EACvC;gBACI,QAAQ,CAAC,WAAW,GAAG,EAAE,CAAC;aAC7B;SACJ;QAED,mBAAmB;QACnB,IAAG,QAAQ,EACX;YACI,IAAI,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAE/C,IAAG,UAAU,EACb;gBACI,IAAG,CAAC,UAAU,EACd;oBACI,OAAO;iBACV;gBAED,IAAG,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAC7B;oBACI,UAAU,GAAG,CAAC,UAAU,CAAC,CAAC;iBAC7B;gBAED,KAAI,MAAM,GAAG,IAAI,UAAU,EAC3B;oBACI,MAAA,GAAG,CAAC,qCAAqC,0CAAE,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,CAAC;oBAC/F,GAAG,CAAC,qCAAqC,GAAG,EAAE,CAAC;oBAC/C,GAAG,CAAC,6BAA6B,GAAG,KAAK,CAAC;iBAC7C;aACJ;YAED,IAAG,QAAQ,CAAC,YAAY,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,EAChE;gBACI,KAAI,MAAM,WAAW,IAAI,QAAQ,CAAC,YAAY,EAC9C;oBACI,WAAW,CAAC,WAAW,GAAG,EAAE,CAAC;iBAChC;aACJ;YAED,qDAAqD;YACrD,IAAG,QAAQ,CAAC,WAAW,EACvB;gBACI,IAAI,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAE/C,IAAG,CAAC,UAAU,EACd;oBACI,OAAO;iBACV;gBAED,IAAG,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAC7B;oBACI,UAAU,GAAG,CAAC,UAAU,CAAC,CAAC;iBAC7B;gBAED,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC;gBAE9C,KAAI,MAAM,GAAG,IAAI,UAAU,EAC3B;oBACI,MAAA,GAAG,CAAC,WAAW,mDAAI,CAAC;iBACvB;aACJ;SACJ;IACL,CAAC;IAED;;;;;OAKG;IACI,SAAS,CAAC,EAAU,EACV,gBAA2C,EAC3C,QAAkB;QAE/B,MAAM,SAAS,GAAG,IAAI,kBAAkB,CAAC,IAAI,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC5H,SAAS,CAAC,OAAO,GAAG,EAAE,CAAC;QACvB,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC;QAExB,KAAI,MAAM,WAAW,IAAI,IAAI,CAAC,SAAS,EACvC;YACI,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;YAEjD,uBAAuB;YACvB,IAAG,YAAY,CAAC,KAAK,KAAK,EAAE,IAAI,YAAY,CAAC,aAAa,EAC1D;gBACI,MAAM,QAAQ,GAAG,IAAI,YAAY,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;gBAC1D,gBAAgB,CAAC,iBAAiB,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;gBAC1D,SAAS,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;aAC1C;SACJ;QAED,OAAO,SAAS,CAAC;IACrB,CAAC;IAED;;OAEG;IACI,YAAY;QAEf,KAAI,MAAM,WAAW,IAAI,IAAI,CAAC,SAAS,EACvC;YACI,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;YAEjD,uBAAuB;YACvB,IAAG,YAAY,CAAC,KAAK,KAAK,IAAI,CAAC,OAAO,EACtC;gBACI,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;aACtC;SACJ;IACL,CAAC;IASM,mBAAmB,CAAC,EAAU,EAAE,UAAmB,KAAK;;;QAE3D,MAAM,SAAS,GAAqD,EAAE,CAAC;QACvE,MAAM,SAAS,GAAoC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACtE,IAAI,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAE/C,IAAG,CAAC,SAAS,IAAI,CAAC,UAAU,EAC5B;YACI,MAAA,IAAI,CAAC,MAAM,0CAAE,IAAI,CAAC,4CAA4C,EAAE,EAAC,EAAE,EAAC,CAAC,CAAC;YAEtE,OAAO,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;SACrC;QAED,IAAG,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,YAAY,EAC1B;YACI,IAAG,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAC7B;gBACI,UAAU,GAAG,CAAC,UAAU,CAAC,CAAC;aAC7B;YAED,uCAAuC;YACvC,KAAI,MAAM,eAAe,IAAI,UAAU,EACvC;gBACI,mBAAmB;gBACnB,KAAI,MAAM,WAAW,IAAI,SAAS,CAAC,YAAY,EAC/C;oBACI,IAAI,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;oBAE9E,IAAG,eAAe,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,EACrD;wBACI,eAAe,GAAG,CAAC,eAAe,CAAC,CAAC;qBACvC;oBAED,IAAG,CAAC,eAAe,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,EACtD;wBACI,MAAA,IAAI,CAAC,MAAM,0CAAE,IAAI,CAAC,sDAAsD,EAAE,WAAW,CAAC,CAAC;wBAEvF,SAAS;qBACZ;oBAED,MAAA,SAAS,MAAC,WAAW,CAAC,gBAAgB,qCAAtC,SAAS,OAAmC,IAAI,oCAAoC,CAAC,eAAe,CAAC,EAAC;oBAEtG,0BAA0B;oBAC1B,KAAI,MAAM,cAAc,IAAI,eAAe,EAC3C;wBACI,IAAG,CAAC,eAAe,IAAI,CAAC,cAAc,EACtC;4BACI,SAAS;yBACZ;wBAED,MAAM,aAAa,GAAI,cAAsB,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;wBACrE,MAAM,YAAY,GAAI,eAAuB,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;wBAEtE,SAAS,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC;4BACtE;gCACI,aAAa;gCACb,YAAY;gCACZ,WAAW,EAAE,KAAK;gCAClB,aAAa,EAAE,GAAG,EAAE,CAAC,KAAK;6BAC7B,CAAC;qBACL;iBACJ;aACJ;YAED,IAAG,CAAC,OAAO,EACX;gBACI,gBAAgB;gBAChB,KAAI,MAAM,GAAG,IAAI,SAAS,EAC1B;oBACI,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;oBAEhC,QAAQ,CAAC,YAAY,EAAE,CAAC;iBAC3B;aACJ;SACJ;QAED,OAAO,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;IACtC,CAAC;IASM,kBAAkB,CAAC,EAAU,EAAE,UAAmB,KAAK;;QAE1D,MAAM,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;QACrD,MAAM,cAAc,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAErD,IAAG,CAAC,iBAAiB,EACrB;YACI,MAAA,IAAI,CAAC,MAAM,0CAAE,IAAI,CAAC,qDAAqD,EAAE,EAAC,EAAE,EAAC,CAAC,CAAC;YAE/E,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,oCAAoC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;SACxE;QAED,IAAG,CAAC,cAAc,EAClB;YACI,MAAA,IAAI,CAAC,MAAM,0CAAE,IAAI,CAAC,wDAAwD,EAAE,EAAC,EAAE,EAAC,CAAC,CAAC;YAElF,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,oCAAoC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;SACxE;QAED,IAAG,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,EAChC;YACI,MAAA,IAAI,CAAC,MAAM,0CAAE,KAAK,CAAC,uEAAuE,EAAE,EAAC,EAAE,EAAC,CAAC,CAAC;YAElG,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,oCAAoC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;SACxE;QAED,MAAM,QAAQ,GAAyC,IAAI,oCAAoC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;QAElH,4BAA4B;QAC5B,KAAI,MAAM,gBAAgB,IAAI,iBAAiB,EAC/C;YACI,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,CAAC;YAEtF,IAAG,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,EACnC;gBACI,MAAA,IAAI,CAAC,MAAM,0CAAE,KAAK,CAAC,8EAA8E,EAAE,EAAC,EAAE,EAAC,CAAC,CAAC;gBAEzG,SAAS;aACZ;YAED,IAAG,CAAC,eAAe,IAAI,CAAC,cAAc,EACtC;gBACI,SAAS;aACZ;YAED,MAAM,aAAa,GAAI,cAAsB,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;YAC1E,MAAM,YAAY,GAAI,eAAuB,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;YAE3E,QAAQ,CAAC,OAAO,CAAC,gBAAgB,CAAC,SAAS,CAAC;gBAC5C;oBACI,aAAa;oBACb,YAAY;oBACZ,WAAW,EAAE,KAAK;oBAClB,aAAa,EAAE,GAAG,EAAE,CAAC,KAAK;iBAC7B,CAAC;SACL;QAED,IAAG,CAAC,OAAO,EACX;YACI,QAAQ,CAAC,YAAY,EAAE,CAAC;SAC3B;QAED,OAAO,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;IACrC,CAAC;IAED,uEAAuE;IAEvE;;OAEG;IACa,mBAAmB;;;YAE/B,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC9B,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAE5B,MAAA,IAAI,CAAC,MAAM,0CAAE,KAAK,CAAC,4CAA4C,CAAC,CAAC;YAEjE,iBAAiB;YACjB,IAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,MAAM,EAC1C;gBACI,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBAE1B,OAAO;aACV;YAED,KAAI,MAAM,IAAI,IAAI,IAAI,CAAC,gBAAgB,CAAC,SAAS,EACjD;gBACI,MAAM,OAAO,GAAwC,EAAE,CAAC;gBAExD,qBAAqB;gBACrB,IAAG,CAAC,IAAI,CAAC,OAAO,EAChB;oBACI,SAAS;iBACZ;gBAED,KAAI,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAChC;oBACI,oBAAoB;oBACpB,IAAG,CAAC,MAAM,CAAC,MAAM,EACjB;wBACI,SAAS;qBACZ;oBAED,KAAI,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAChC;wBACI,MAAM,WAAW,GACjB;4BACI,gBAAgB,EAAE,KAAK,CAAC,EAAE;4BAC1B,iBAAiB,EAAE,IAAI,CAAC,EAAE;4BAC1B,SAAS,EAAE,KAAK,CAAC,SAAS;4BAC1B,UAAU,EAAE,MAAM,CAAC,UAAU;4BAC7B,WAAW,EAAE,EAAE;yBAClB,CAAC;wBAEF,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;wBAE1B,IAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC,EACpC;4BACI,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;yBACzC;wBAED,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;qBACtD;iBACJ;gBAED,sCAAsC;gBACtC,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;aAC3C;YAED,IAAI,CAAC,uBAAuB,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACxD,IAAI,CAAC,kBAAkB,EAAE,CAAC;;KAC7B;IAED;;;OAGG;IACO,oBAAoB,CAAC,WAA8C;;QAEzE,IAAI,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC;QAChF,IAAI,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;QAE9E,IAAG,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;YAC1F,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAC1F;YACI,MAAA,IAAI,CAAC,MAAM,0CAAE,IAAI,CAAC,qEAAqE,EAAE,WAAW,CAAC,CAAC;YAEtG,OAAO;SACV;QAED,IAAG,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,EAClC;YACI,eAAe,GAAG,CAAC,eAAe,CAAC,CAAC;SACvC;QAED,IAAG,CAAC,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,EACnC;YACI,gBAAgB,GAAG,CAAC,gBAAgB,CAAC,CAAC;SACzC;QAED,KAAI,MAAM,QAAQ,IAAI,eAAe,EACrC;YACI,KAAI,MAAM,SAAS,IAAI,gBAAgB,EACvC;gBACI,MAAM,EAAE,GAAG,GAAG,QAAQ,CAAC,sBAAsB,IAAI,SAAS,CAAC,sBAAsB,EAAE,CAAC;gBAEpF,mHAAmH;gBACnH,IAAG,CAAC,UAAU,CAAC,SAAS,EAAE,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC,IAAI,UAAU,CAAC,SAAS,EAAE,WAAW,CAAC,UAAU,CAAC,EAClI;oBACI,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,WAAW,CAAC,UAAU,EAAE,QAAQ,EAAE,WAAW,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;iBAC7H;aACJ;SACJ;IACL,CAAC;IAED;;;;;;;OAOG;IACO,YAAY,CAAC,MAA0B,EAAE,cAAsB,EAAE,MAA0B,EAAE,cAAsB,EAAE,OAAgB;;QAE3I,IAAG,CAAC,MAAM,IAAI,CAAC,MAAM,EACrB;YACI,OAAO,KAAK,CAAC;SAChB;QAED,MAAM,aAAa,GAAI,MAAc,CAAC,cAAc,CAAC,CAAC;QACtD,MAAM,YAAY,GAAI,MAAc,CAAC,cAAc,CAAC,CAAC;QACpD,MAAc,CAAC,cAAc,CAAC,GAAI,MAAc,CAAC,cAAc,CAAC,CAAC;QAClE,MAAM,OAAO,GAAkB,EAAE,CAAC;QAElC,OAAO,CAAC,cAAc,CAAC;YACvB;gBACI,aAAa;gBACb,YAAY;gBACZ,WAAW,EAAE,OAAO;gBACpB,aAAa,EAAE,GAAG,EAAE,CAAC,OAAO;aAC/B,CAAC;QAEF,MAAA,MAAM,CAAC,WAAW,uDAAG,OAAO,CAAC,CAAC;QAC9B,MAAM,CAAC,iBAAiB,EAAE,CAAC;QAE3B,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;OAIG;IACa,aAAa,CAAC,IAAgC,EAAE,OAA4C;;;YAExG,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAErD,IAAG,SAAS,EACZ;gBACI,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;gBACpD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAE9B,OAAO;aACV;YAED,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAEvD,IAAG,CAAC,aAAa,EACjB;gBACI,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;gBAEpD,MAAA,IAAI,CAAC,MAAM,0CAAE,IAAI,CAAC,iEAAiE,EAAE,EAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAC,CAAC,CAAC;gBAE/H,OAAO;aACV;YAED,IAAG,CAAC,IAAI,CAAC,KAAK,EACd;gBACI,MAAM,QAAQ,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACvD,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;aAC9D;YAED,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,MAAA,IAAI,CAAC,KAAK,mCAAI,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACnG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;;KACjC;IAED;;;;;;;OAOG;IACO,YAAY,CAAC,WAAoB,EAAE,IAAgC,EAAE,YAAiD,EAAE,KAAkB,EAAE,aAA0C;QAE5L,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;YACvB;gBACI,WAAW;gBACX,YAAY;gBACZ,eAAe,EAAE,IAAI,CAAC,gBAAgB;gBACtC,aAAa;gBACb,KAAK;aACR,CAAC;IACN,CAAC;IAED;;;;OAIG;IACO,WAAW,CAAC,UAAqE,EAAE,IAAqC;QAE9H,IAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAC5B;YACI,KAAI,MAAM,IAAI,IAAI,UAAU,EAC5B;gBACI,IAAG,CAAC,IAAI,CAAC,6BAA6B,EACtC;oBACI,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC;oBAC7C,IAAI,CAAC,6BAA6B,GAAG,IAAI,CAAC;iBAC7C;aACJ;SACJ;aAED;YACI,IAAG,CAAC,UAAU,CAAC,6BAA6B,EAC5C;gBACI,UAAU,CAAC,gBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC;gBACnD,UAAU,CAAC,6BAA6B,GAAG,IAAI,CAAC;aACnD;SACJ;IACL,CAAC;IAED;;OAEG;IACO,oBAAoB;QAE1B,IAAI,CAAC,YAAY,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,CAAC;IAClF,CAAC;IAED;;OAEG;IACa,gBAAgB;;YAE5B,MAAM,IAAI,CAAC,YAAY,CAAC;YAExB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC;YAErE,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;YACpB,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;QAChC,CAAC;KAAA;;+GApvBQ,kBAAkB,mHA4FP,2BAA2B,aAC3B,MAAM,6BACN,6BAA6B;mHA9FxC,kBAAkB;2FAAlB,kBAAkB;kBAD9B,UAAU;;0BA6FM,MAAM;2BAAC,2BAA2B;;0BAClC,MAAM;2BAAC,MAAM;;0BAAG,QAAQ;;0BACxB,MAAM;2BAAC,6BAA6B;;0BAAG,QAAQ","sourcesContent":["import {inject, Inject, Injectable, Injector, OnDestroy, Optional, SimpleChanges} from '@angular/core';\nimport {LOGGER, Logger} from '@anglr/common';\nimport {DynamicItemLoader} from '@anglr/dynamic';\nimport {Dictionary, isBlank, noop, NoopAction} from '@jscrpt/common';\nimport {Observable, Subscription} from 'rxjs';\n\nimport {RelationsComponent, RelationsComponentMetadata, RelationsComponentType} from '../../interfaces';\nimport {RelationsComponentManager} from '../relationsComponentManager/relationsComponentManager.service';\nimport {RelationsManager} from '../relationsManager/relationsManager.service';\nimport {RelationsDataTransferInstruction, RelationsProcessorComponentData, RelationsProcessorInputOutputData} from './relationsProcessor.interface';\nimport {RELATIONS_COMPONENTS_LOADER, RELATIONS_PROCESSOR_SKIP_INIT} from '../../misc/tokens';\nimport {RelationsComponentDef, RelationsProcessorComponent} from '../../misc/types';\nimport {RelationsDataTransferInstructionImpl} from './relationsDataTransferInstruction';\nimport {isAssigned, isSkipInit} from '../../misc/utils';\nimport {RelationsChangeDetector} from '../relationsChangeDetector/relationsChangeDetector.service';\n\n/**\n * Processor that applies relations to registered components\n */\n@Injectable()\nexport class RelationsProcessor implements OnDestroy\n{\n //######################### protected fields #########################\n\n /**\n * Promise used for indication that processor was initialized\n */\n protected ɵInitialized: Promise<void> = Promise.resolve();\n\n /**\n * Relations metadata\n */\n protected ɵRelations: Dictionary<RelationsProcessorComponentData> = {};\n\n /**\n * Array of backward relations, relations that are used for obtaining data for inputs\n */\n protected ɵBackwardRelations: Dictionary<RelationsProcessorInputOutputData[]> = {};\n\n /**\n * Resolves initialized\n */\n protected resolveInitialized: NoopAction = noop;\n\n /**\n * Subscriptions created during initialization\n */\n protected initSubscriptions: Subscription = new Subscription();\n\n /**\n * Gets or sets relations metadata\n */\n protected get relations(): Dictionary<RelationsProcessorComponentData>\n {\n if(this.parent)\n {\n return this.parent.relations;\n }\n\n return this.ɵRelations;\n }\n protected set relations(value: Dictionary<RelationsProcessorComponentData>)\n {\n this.ɵRelations = value;\n }\n\n /**\n * Gets or sets array of backward relations, relations that are used for obtaining data for inputs\n */\n protected get backwardRelations(): Dictionary<RelationsProcessorInputOutputData[]>\n {\n if(this.parent)\n {\n return this.parent.backwardRelations;\n }\n\n return this.ɵBackwardRelations;\n }\n protected set backwardRelations(value: Dictionary<RelationsProcessorInputOutputData[]>)\n {\n this.ɵBackwardRelations = value;\n }\n\n /**\n * Instance of parent relations processor\n */\n protected parent: RelationsProcessor|null = null;\n\n /**\n * Id of scope\n */\n protected scopeId: string|null = null;\n\n /**\n * Injected relations change detector\n */\n protected relationsChangeDetector: RelationsChangeDetector = inject(RelationsChangeDetector);\n\n //######################### public properties #########################\n\n /**\n * Gets promise that completes when processor was initialized\n */\n public get initialized(): Promise<void>\n {\n return this.ɵInitialized;\n }\n\n //######################### constructor #########################\n constructor(protected relationsManager: RelationsManager,\n protected componentManager: RelationsComponentManager,\n protected injector: Injector,\n @Inject(RELATIONS_COMPONENTS_LOADER) protected loader: DynamicItemLoader<RelationsComponentDef>,\n @Inject(LOGGER) @Optional() protected logger?: Logger,\n @Inject(RELATIONS_PROCESSOR_SKIP_INIT) @Optional() skipInit?: boolean,)\n {\n if(!skipInit)\n {\n this.initSubscriptions.add(this.relationsManager.relationsChange.subscribe(() => this.initializeRelations()));\n\n this.initializeRelations();\n }\n }\n\n //######################### public methods - implementation of OnDestroy #########################\n\n /**\n * Called when component is destroyed\n */\n public ngOnDestroy(): void\n {\n this.initSubscriptions.unsubscribe();\n\n this.destroyRelations();\n }\n\n //######################### public methods #########################\n\n /**\n * Updates relations\n * @param id - Id of component to be registered\n */\n public updateRelations(id: string): void\n {\n this.logger?.debug('RelationsProcessor: Updating relations for {@id}', {id});\n\n const relations: RelationsProcessorComponentData = this.relations[id];\n const backwardRelations = this.backwardRelations[id];\n let components = this.componentManager.get(id);\n\n //this component has no relations\n if(!relations || !components)\n {\n this.logger?.warn('RelationsProcessor: No relations for {@id}', {id});\n\n return;\n }\n\n this.initOptions(components, relations);\n\n //initialize default value from connection to this\n if(backwardRelations?.length)\n {\n backwardRelations.forEach(inputOutput =>\n {\n this.initBackwardRelation(inputOutput);\n });\n }\n\n if(relations?.inputOutputs)\n {\n if(!Array.isArray(components))\n {\n components = [components];\n }\n\n for(const outputComponent of components)\n {\n outputComponent.ɵɵRelationsOutputsChangeSubscriptions?.forEach(subscription => subscription.unsubscribe());\n outputComponent.ɵɵRelationsOutputsChangeSubscriptions = [];\n\n for(const inputOutput of relations.inputOutputs)\n {\n let inputComponents = this.componentManager.get(inputOutput.inputComponentId);\n\n if(inputComponents && !Array.isArray(inputComponents))\n {\n inputComponents = [inputComponents];\n }\n\n this.logger?.verbose('RelationsProcessor: processing input outputs {@data} ', {id, inputOutput, inputComponents, components});\n\n const outputObservable = (outputComponent as any)[`${inputOutput.outputName}Change`] as Observable<any>;\n\n //check whether is observable output\n if(!(outputObservable instanceof Observable))\n {\n this.logger?.warn('RelationsProcessor: Output on component {@data} is not observable', inputOutput);\n\n continue;\n }\n\n //set listening for output changes\n outputComponent.ɵɵRelationsOutputsChangeSubscriptions.push(outputObservable.subscribe(() =>\n {\n let inputs = this.componentManager.get(inputOutput.inputComponentId);\n\n if(!inputs)\n {\n this.logger?.warn('RelationsProcessor: Missing input components {@data} on output change', inputOutput);\n\n return;\n }\n\n if(!Array.isArray(inputs))\n {\n inputs = [inputs];\n }\n\n for(const input of inputs)\n {\n this.transferData(outputComponent, inputOutput.outputName, input, inputOutput.inputName, false);\n }\n }));\n\n if(!inputComponents || !Array.isArray(inputComponents))\n {\n this.logger?.warn('RelationsProcessor: Missing input components {@data}', inputOutput);\n\n continue;\n }\n\n for(const inputComponent of inputComponents)\n {\n const id = `${inputComponent.ɵɵRelationsComponentId}-${outputComponent.ɵɵRelationsComponentId}`;\n\n //init data transfer only if not marked as skip init and was not initialized and was already at least once assigned\n if(!isSkipInit(outputComponent, inputOutput.outputName) && !inputOutput.initialized[id] && isAssigned(outputComponent, inputOutput.outputName))\n {\n inputOutput.initialized[id] = this.transferData(outputComponent, inputOutput.outputName, inputComponent, inputOutput.inputName, true);\n }\n }\n }\n }\n }\n }\n\n /**\n * Method used for destroying component\n */\n public destroyComponent(id: string): void\n {\n const metadata: RelationsProcessorComponentData = this.relations[id];\n const backwardRelations = this.backwardRelations[id];\n\n //uninitialize backward relations\n if(backwardRelations)\n {\n for(const relation of backwardRelations)\n {\n relation.initialized = {};\n }\n }\n\n //destroy relations\n if(metadata)\n {\n let components = this.componentManager.get(id);\n\n if(components)\n {\n if(!components)\n {\n return;\n }\n\n if(!Array.isArray(components))\n {\n components = [components];\n }\n\n for(const cmp of components)\n {\n cmp.ɵɵRelationsOutputsChangeSubscriptions?.forEach(subscription => subscription.unsubscribe());\n cmp.ɵɵRelationsOutputsChangeSubscriptions = [];\n cmp.ɵɵRelationsOptionsInitialized = false;\n }\n }\n\n if(metadata.inputOutputs && Array.isArray(metadata.inputOutputs))\n {\n for(const inputOutput of metadata.inputOutputs)\n {\n inputOutput.initialized = {};\n }\n }\n\n //destroy auto created components and unregister them\n if(metadata.autoCreated)\n {\n let components = this.componentManager.get(id);\n\n if(!components)\n {\n return;\n }\n\n if(!Array.isArray(components))\n {\n components = [components];\n }\n\n this.componentManager.unregisterComponent(id);\n\n for(const cmp of components)\n {\n cmp.ngOnDestroy?.();\n }\n }\n }\n }\n\n /**\n * Opens new scope of relations processor\n * @param id - Id of newly created scope\n * @param componentManager - Scoped instance of component manager\n * @param injector - Injector for current scope\n */\n public openScope(id: string,\n componentManager: RelationsComponentManager,\n injector: Injector,): RelationsProcessor\n {\n const processor = new RelationsProcessor(this.relationsManager, componentManager, injector, this.loader, this.logger, true);\n processor.scopeId = id;\n processor.parent = this;\n\n for(const componentId in this.relations)\n {\n const relationsDef = this.relations[componentId];\n\n //Same scope initialize\n if(relationsDef.scope === id && relationsDef.componentType)\n {\n const instance = new relationsDef.componentType(injector);\n componentManager.registerComponent(componentId, instance);\n processor.updateRelations(componentId);\n }\n }\n\n return processor;\n }\n\n /**\n * Destroyes opened scope itself\n */\n public destroyScope(): void\n {\n for(const componentId in this.relations)\n {\n const relationsDef = this.relations[componentId];\n\n //Same scope initialize\n if(relationsDef.scope === this.scopeId)\n {\n this.destroyComponent(componentId);\n }\n }\n }\n\n /**\n * Transfers data for specified component using its output relations, all data are transfered in single change set per component\n * @param id - Id of component whose outputs relations should be applied to transfer data\n * @param delayed - Indication whether delay data transfer and only generate instructions, if true returns dictionary with data transfer instructions per components\n */\n public transferOutputsData(id: string, delayed: true): Dictionary<RelationsDataTransferInstruction>\n public transferOutputsData(id: string, delayed: false): null\n public transferOutputsData(id: string, delayed: boolean = false): null|Dictionary<RelationsDataTransferInstruction>\n {\n const transfers: Dictionary<RelationsDataTransferInstructionImpl> = {};\n const relations: RelationsProcessorComponentData = this.relations[id];\n let components = this.componentManager.get(id);\n\n if(!relations || !components)\n {\n this.logger?.warn('RelationsProcessor: No relations for {@id}', {id});\n\n return delayed ? transfers : null;\n }\n\n if(relations?.inputOutputs)\n {\n if(!Array.isArray(components))\n {\n components = [components];\n }\n\n //for each component containing outputs\n for(const outputComponent of components)\n {\n //for each relation\n for(const inputOutput of relations.inputOutputs)\n {\n let inputComponents = this.componentManager.get(inputOutput.inputComponentId);\n\n if(inputComponents && !Array.isArray(inputComponents))\n {\n inputComponents = [inputComponents];\n }\n\n if(!inputComponents || !Array.isArray(inputComponents))\n {\n this.logger?.warn('RelationsProcessor: Missing input components {@data}', inputOutput);\n\n continue;\n }\n\n transfers[inputOutput.inputComponentId] ??= new RelationsDataTransferInstructionImpl(inputComponents);\n\n //for each input component\n for(const inputComponent of inputComponents)\n {\n if(!outputComponent || !inputComponent)\n {\n continue;\n }\n\n const previousValue = (inputComponent as any)[inputOutput.inputName];\n const currentValue = (outputComponent as any)[inputOutput.outputName];\n\n transfers[inputOutput.inputComponentId].changes[inputOutput.inputName] =\n {\n previousValue,\n currentValue,\n firstChange: false,\n isFirstChange: () => false,\n };\n }\n }\n }\n\n if(!delayed)\n {\n //transfers data\n for(const key in transfers)\n {\n const transfer = transfers[key];\n\n transfer.applyChanges();\n }\n }\n }\n\n return delayed ? transfers : null;\n }\n\n /**\n * Transfers data for specified component using its inputs relations, all data are transfered in single change\n * @param id - Id of component whose inputs relations should be applied to transfer data\n * @param delayed - Indication whether delay data transfer and only generate instructions, if true returns transfer instructions\n */\n public transferInputsData(id: string, delayed: true): RelationsDataTransferInstruction\n public transferInputsData(id: string, delayed: false): null\n public transferInputsData(id: string, delayed: boolean = false): null|RelationsDataTransferInstruction\n {\n const backwardRelations = this.backwardRelations[id];\n const inputComponent = this.componentManager.get(id);\n\n if(!backwardRelations)\n {\n this.logger?.warn('RelationsProcessor: No backward relations for {@id}', {id});\n\n return delayed ? new RelationsDataTransferInstructionImpl([]) : null;\n }\n\n if(!inputComponent)\n {\n this.logger?.warn('RelationsProcessor: Missing input components for {@id}', {id});\n\n return delayed ? new RelationsDataTransferInstructionImpl([]) : null;\n }\n\n if(Array.isArray(inputComponent))\n {\n this.logger?.error('RelationsProcessor: Only one component must be available for id {@id}', {id});\n\n return delayed ? new RelationsDataTransferInstructionImpl([]) : null;\n }\n\n const transfer: RelationsDataTransferInstructionImpl = new RelationsDataTransferInstructionImpl([inputComponent]);\n\n //for each backward relation\n for(const backwardRelation of backwardRelations)\n {\n const outputComponent = this.componentManager.get(backwardRelation.outputComponentId);\n\n if((Array.isArray(outputComponent)))\n {\n this.logger?.error('RelationsProcessor: Only one output component must be available for id {@id}', {id});\n\n continue;\n }\n\n if(!outputComponent || !inputComponent)\n {\n continue;\n }\n\n const previousValue = (inputComponent as any)[backwardRelation.inputName];\n const currentValue = (outputComponent as any)[backwardRelation.outputName];\n\n transfer.changes[backwardRelation.inputName] =\n {\n previousValue,\n currentValue,\n firstChange: false,\n isFirstChange: () => false,\n };\n }\n\n if(!delayed)\n {\n transfer.applyChanges();\n }\n\n return delayed ? transfer : null;\n }\n\n //######################### protected methods #########################\n\n /**\n * Initialize relations from metadata\n */\n protected async initializeRelations(): Promise<void>\n {\n await this.destroyRelations();\n this.setInitializePromise();\n\n this.logger?.debug('RelationsProcessor: initializing relations');\n\n //empty relations\n if(!this.relationsManager.relations.length)\n {\n this.resolveInitialized();\n\n return;\n }\n\n for(const meta of this.relationsManager.relations)\n {\n const outputs: RelationsProcessorInputOutputData[] = [];\n\n //no outputs metadata\n if(!meta.outputs)\n {\n continue;\n }\n\n for(const output of meta.outputs)\n {\n //no inputs metadata\n if(!output.inputs)\n {\n continue;\n }\n\n for(const input of output.inputs)\n {\n const inputOutput: RelationsProcessorInputOutputData =\n {\n inputComponentId: input.id,\n outputComponentId: meta.id,\n inputName: input.inputName,\n outputName: output.outputName,\n initialized: {},\n };\n\n outputs.push(inputOutput);\n\n if(!this.backwardRelations[input.id])\n {\n this.backwardRelations[input.id] = [];\n }\n\n this.backwardRelations[input.id].push(inputOutput);\n }\n }\n\n //sets options for relations component\n await this.initComponent(meta, outputs);\n }\n\n this.relationsChangeDetector.initialize(this.relations);\n this.resolveInitialized();\n }\n\n /**\n * Initialize backward relations\n * @param inputOutput - Data for input and output\n */\n protected initBackwardRelation(inputOutput: RelationsProcessorInputOutputData): void\n {\n let outputComponents = this.componentManager.get(inputOutput.outputComponentId);\n let inputComponents = this.componentManager.get(inputOutput.inputComponentId);\n\n if((isBlank(outputComponents) || Array.isArray(outputComponents) && !outputComponents.length) ||\n (isBlank(inputComponents) || Array.isArray(inputComponents) && !inputComponents.length))\n {\n this.logger?.warn('RelationsProcessor: missing metadata for backward relations {@data}', inputOutput);\n\n return;\n }\n\n if(!Array.isArray(inputComponents))\n {\n inputComponents = [inputComponents];\n }\n\n if(!Array.isArray(outputComponents))\n {\n outputComponents = [outputComponents];\n }\n\n for(const inputCmp of inputComponents)\n {\n for(const outputCmp of outputComponents)\n {\n const id = `${inputCmp.ɵɵRelationsComponentId}-${outputCmp.ɵɵRelationsComponentId}`;\n\n //init data transfer only if not marked as skip init and was not initialized and was already at least once assigned\n if(!isSkipInit(outputCmp, inputOutput.outputName) && !inputOutput.initialized[id] && isAssigned(outputCmp, inputOutput.outputName))\n {\n inputOutput.initialized[id] = this.transferData(outputCmp, inputOutput.outputName, inputCmp, inputOutput.inputName, true);\n }\n }\n }\n }\n\n /**\n * Transfers data from source property to target property\n * @param source Instance of source object containing source property with data\n * @param sourceProperty Name of source property with data that are transfered\n * @param target Instance of target object containing target property for data\n * @param targetProperty Name of target property which will be filled with data\n * @param initial Indication whether is transfer of data initial, or on event\n */\n protected transferData(source: RelationsComponent, sourceProperty: string, target: RelationsComponent, targetProperty: string, initial: boolean): boolean\n {\n if(!source || !target)\n {\n return false;\n }\n\n const previousValue = (target as any)[targetProperty];\n const currentValue = (source as any)[sourceProperty];\n (target as any)[targetProperty] = (source as any)[sourceProperty];\n const changes: SimpleChanges = {};\n\n changes[targetProperty] =\n {\n previousValue,\n currentValue,\n firstChange: initial,\n isFirstChange: () => initial\n };\n\n target.ngOnChanges?.(changes);\n target.invalidateVisuals();\n\n return true;\n }\n\n /**\n * Initialize relation component\n * @param meta - Metadata for relations component\n * @param outputs - Array of outputs data for relations component\n */\n protected async initComponent(meta: RelationsComponentMetadata, outputs: RelationsProcessorInputOutputData[]): Promise<void>\n {\n const component = this.componentManager.get(meta.id);\n\n if(component)\n {\n this.initRelation(false, meta, outputs, null, null);\n this.updateRelations(meta.id);\n\n return;\n }\n\n const componentMeta = await this.loader.loadItem(meta);\n\n if(!componentMeta)\n {\n this.initRelation(false, meta, outputs, null, null);\n\n this.logger?.warn('RelationsProcessor: Unable to load relations component! {@meta}', {package: meta.package, name: meta.name});\n\n return;\n }\n\n if(!meta.scope)\n {\n const instance = new componentMeta.data(this.injector);\n this.componentManager.registerComponent(meta.id, instance);\n }\n\n this.initRelation(true, meta, outputs, meta.scope ?? null, meta.scope ? componentMeta.data : null);\n this.updateRelations(meta.id);\n }\n\n /**\n * Initialize relation for metadata and component\n * @param autoCreated - Indication whether was component auto created or not\n * @param meta - Metadata for relations component\n * @param inputOutputs - Array of outputs data for relations\n * @param scope - Current scope used for this relations component\n * @param componentType - Type used for creation of relations component (only for scoped ones)\n */\n protected initRelation(autoCreated: boolean, meta: RelationsComponentMetadata, inputOutputs: RelationsProcessorInputOutputData[], scope: string|null, componentType: RelationsComponentType|null): void\n {\n this.relations[meta.id] =\n {\n autoCreated,\n inputOutputs,\n metadataOptions: meta.relationsOptions,\n componentType,\n scope,\n };\n }\n\n /**\n * Initialize relations component options\n * @param components - Components which options should be initialized\n * @param meta - Metadata containing options for initialization\n */\n protected initOptions(components: RelationsProcessorComponent|RelationsProcessorComponent[], meta: RelationsProcessorComponentData): void\n {\n if(Array.isArray(components))\n {\n for(const comp of components)\n {\n if(!comp.ɵɵRelationsOptionsInitialized)\n {\n comp.relationsOptions = meta.metadataOptions;\n comp.ɵɵRelationsOptionsInitialized = true;\n }\n }\n }\n else\n {\n if(!components.ɵɵRelationsOptionsInitialized)\n {\n components.relationsOptions = meta.metadataOptions;\n components.ɵɵRelationsOptionsInitialized = true;\n }\n }\n }\n\n /**\n * Sets initialized promise\n */\n protected setInitializePromise(): void\n {\n this.ɵInitialized = new Promise(resolve => this.resolveInitialized = resolve);\n }\n\n /**\n * Destroys initialized relations\n */\n protected async destroyRelations(): Promise<void>\n {\n await this.ɵInitialized;\n\n Object.keys(this.relations).forEach(id => this.destroyComponent(id));\n\n this.relations = {};\n this.backwardRelations = {};\n }\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"relationsChangeDetector.interface.js","sourceRoot":"","sources":["../../../../../relations/src/services/relationsChangeDetector/relationsChangeDetector.interface.ts"],"names":[],"mappings":"","sourcesContent":["import {Injector} from '@angular/core';\n\nimport {RelationsComponent} from '../../interfaces';\n\n/**\n * Defines relations with injector instance\n */\nexport interface RelationsWithInjector\n{\n /**\n * Angular injector for DI\n */\n ɵɵinjector?: Injector;\n}\n\n/**\n * Data that are passed when marking for check\n */\nexport interface MarkForCheckId\n{\n /**\n * Id of component which output has changed\n */\n componentId: string|RelationsComponent;\n\n /**\n * Name of output that has changed\n */\n outputName: string;\n}"]}
1
+ {"version":3,"file":"relationsChangeDetector.interface.js","sourceRoot":"","sources":["../../../../../relations/src/services/relationsChangeDetector/relationsChangeDetector.interface.ts"],"names":[],"mappings":"","sourcesContent":["import {Injector} from '@angular/core';\n\nimport {RelationsComponent} from '../../interfaces';\n\n/**\n * Defines relations with injector instance\n */\nexport interface RelationsWithInjector\n{\n /**\n * Angular injector for DI\n */\n ɵɵinjector?: Injector;\n}\n\n/**\n * Data that are passed when marking for check\n */\nexport interface MarkForCheckId\n{\n /**\n * Id of component which output has changed\n */\n componentId: string|RelationsComponent;\n\n /**\n * Name of output that has changed\n */\n outputName: string;\n}\n\n/**\n * Information about change that is going to happen\n */\nexport interface RelationsChange\n{\n /**\n * Id of component which inputs has changed\n */\n id: string;\n\n /**\n * Array of inputs that has changed\n */\n inputs: string[];\n}"]}
@@ -37,7 +37,7 @@ export class RelationsChangeDetector {
37
37
  this.injector = injector;
38
38
  this.logger = logger;
39
39
  /**
40
- * Objects storing components and theirs outputs and related input components
40
+ * Objects storing components and theirs outputs and related input components def
41
41
  */
42
42
  this.ɵoutputsComponents = {};
43
43
  /**
@@ -75,11 +75,20 @@ export class RelationsChangeDetector {
75
75
  const inputComponents = this.outputsComponents[componentId]?.[id.outputName] ?? [];
76
76
  const ids = this.checkRunning && !this.options.detectionInSingleRun ? this.secondRunIds : this.firstRunIds;
77
77
  for (const inputComponent of inputComponents) {
78
+ const item = ids.find(itm => itm.id == inputComponent.inputComponentId);
79
+ //not exists yet
80
+ if (!item) {
81
+ ids.push({
82
+ id: inputComponent.inputComponentId,
83
+ inputs: [inputComponent.inputName],
84
+ });
85
+ continue;
86
+ }
78
87
  //already exists
79
- if (ids.indexOf(inputComponent) >= 0) {
88
+ if (item.inputs.indexOf(inputComponent.inputName) >= 0) {
80
89
  continue;
81
90
  }
82
- ids.push(inputComponent);
91
+ item.inputs.push(inputComponent.inputName);
83
92
  }
84
93
  //schedule check
85
94
  if (!this.timeout) {
@@ -101,7 +110,7 @@ export class RelationsChangeDetector {
101
110
  }
102
111
  for (const inputOutput of relationsDef.inputOutputs) {
103
112
  (_b = this.ɵoutputsComponents[componentId])[_c = inputOutput.outputName] ?? (_b[_c] = []);
104
- this.ɵoutputsComponents[componentId][inputOutput.outputName].push(inputOutput.inputComponentId);
113
+ this.ɵoutputsComponents[componentId][inputOutput.outputName].push(inputOutput);
105
114
  }
106
115
  }
107
116
  }
@@ -112,7 +121,15 @@ export class RelationsChangeDetector {
112
121
  runCheck() {
113
122
  this.checkRunning = true;
114
123
  for (const id of this.firstRunIds) {
115
- this.relationsProcessor.transferInputsData(id, false);
124
+ const changes = this.relationsProcessor.transferInputsData(id.id, true);
125
+ const allInputs = Object.keys(changes.changes);
126
+ //TODO: maybe move into relations processor
127
+ for (const inputName of allInputs) {
128
+ //remove non existing change
129
+ if (!(inputName in id.inputs)) {
130
+ delete changes.changes[inputName];
131
+ }
132
+ }
116
133
  }
117
134
  if (this.options.detectionInSingleRun) {
118
135
  this.firstRunIds = [];
@@ -1 +1 @@
1
- {"version":3,"file":"relationsChangeDetector.service.js","sourceRoot":"","sources":["../../../../../relations/src/services/relationsChangeDetector/relationsChangeDetector.service.ts"],"names":[],"mappings":"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","sourcesContent":["import {inject, Inject, Injectable, Injector, Optional} from '@angular/core';\nimport {LOGGER, Logger} from '@anglr/common';\nimport {BindThis, Dictionary, isEmptyObject, isString} from '@jscrpt/common';\n\nimport {RelationsComponentManager} from '../relationsComponentManager/relationsComponentManager.service';\nimport {RelationsProcessorComponentData} from '../relationsProcessor/relationsProcessor.interface';\nimport {RelationsProcessor} from '../relationsProcessor/relationsProcessor.service';\nimport {MarkForCheckId} from './relationsChangeDetector.interface';\nimport {RelationsChangeDetectorOptions} from './relationsChangeDetector.options';\n\n/**\n * Change detector for relations, which allows async change detection\n */\n@Injectable()\nexport class RelationsChangeDetector\n{\n //######################### protected properties #########################\n\n /**\n * Instance of relations processor for handling relations\n */\n protected ɵrelationsProcessor: RelationsProcessor|undefined|null;\n\n /**\n * Gets instance of relations processor for handling relations\n */\n protected get relationsProcessor(): RelationsProcessor\n {\n return (this.ɵrelationsProcessor ??= this.injector.get(RelationsProcessor));\n }\n\n /**\n * Instance of relations component manager storing registered components\n */\n protected ɵrelationsComponentManager: RelationsComponentManager|undefined|null;\n\n /**\n * Gets instance of relations component manager storing registered components\n */\n protected get relationsComponentManager(): RelationsComponentManager\n {\n return (this.ɵrelationsComponentManager ??= this.injector.get(RelationsComponentManager));\n }\n\n /**\n * Objects storing components and theirs outputs and related input components\n */\n protected ɵoutputsComponents: Dictionary<Dictionary<string[]>> = {};\n\n /**\n * Instance of parent relations change detector\n */\n protected parent: RelationsChangeDetector|undefined|null = inject(RelationsChangeDetector, {optional: true, skipSelf: true,});\n\n /**\n * Objects storing components and theirs outputs and related input components\n */\n protected get outputsComponents(): Dictionary<Dictionary<string[]>>\n {\n if(isEmptyObject(this.ɵoutputsComponents) && this.parent)\n {\n return this.parent.outputsComponents;\n }\n\n return this.ɵoutputsComponents;\n }\n\n /**\n * Options for relations change detector\n */\n protected options: RelationsChangeDetectorOptions;\n\n /**\n * Identifier of running timeout\n */\n protected timeout: number|undefined|null;\n\n /**\n * Array of input component ids that should be checked in first run\n */\n protected firstRunIds: string[] = [];\n\n /**\n * Array of input component ids that should be checked in second run\n */\n protected secondRunIds: string[] = [];\n\n /**\n * Indication whether is check running\n */\n protected checkRunning: boolean = false;\n\n //######################### constructor #########################\n constructor(protected injector: Injector,\n @Inject(LOGGER) protected logger: Logger,\n @Optional() options?: RelationsChangeDetectorOptions,)\n {\n if(!options || !(options instanceof RelationsChangeDetectorOptions))\n {\n options = new RelationsChangeDetectorOptions();\n }\n\n this.options = options;\n }\n\n //######################### public methods #########################\n\n /**\n * Marks input component connected to this for checking\n * @param id - Identification of what should be checked\n */\n public markForCheck(id: MarkForCheckId): void\n {\n const componentId = isString(id.componentId) ? id.componentId : this.relationsComponentManager.getId(id.componentId);\n\n if(!componentId)\n {\n this.logger.warn('RelationsChangeDetector: Unable to find component!');\n\n return;\n }\n\n const inputComponents = this.outputsComponents[componentId]?.[id.outputName] ?? [];\n const ids = this.checkRunning && !this.options.detectionInSingleRun ? this.secondRunIds : this.firstRunIds;\n\n for(const inputComponent of inputComponents)\n {\n //already exists\n if(ids.indexOf(inputComponent) >= 0)\n {\n continue;\n }\n\n ids.push(inputComponent);\n }\n\n //schedule check\n if(!this.timeout)\n {\n this.timeout = setTimeout(this.runCheck, 0) as unknown as number;\n }\n }\n\n /**\n *\n * @param relations - Object storing current relations\n */\n public initialize(relations: Dictionary<RelationsProcessorComponentData>): void\n {\n this.ɵoutputsComponents = {};\n\n for(const componentId in relations)\n {\n const relationsDef = relations[componentId];\n\n this.ɵoutputsComponents[componentId] ??= {};\n\n if(!relationsDef.inputOutputs)\n {\n continue;\n }\n\n for(const inputOutput of relationsDef.inputOutputs)\n {\n this.ɵoutputsComponents[componentId][inputOutput.outputName] ??= [];\n this.ɵoutputsComponents[componentId][inputOutput.outputName].push(inputOutput.inputComponentId);\n }\n }\n }\n\n //######################### protected methods #########################\n\n /**\n * Runs check for marked components\n */\n @BindThis\n protected runCheck(): void\n {\n this.checkRunning = true;\n\n for(const id of this.firstRunIds)\n {\n this.relationsProcessor.transferInputsData(id, false);\n }\n\n if(this.options.detectionInSingleRun)\n {\n this.firstRunIds = [];\n }\n else\n {\n this.firstRunIds = this.secondRunIds;\n this.secondRunIds = [];\n }\n\n this.checkRunning = false;\n this.timeout = null;\n }\n}\n"]}
1
+ {"version":3,"file":"relationsChangeDetector.service.js","sourceRoot":"","sources":["../../../../../relations/src/services/relationsChangeDetector/relationsChangeDetector.service.ts"],"names":[],"mappings":"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","sourcesContent":["import {inject, Inject, Injectable, Injector, Optional} from '@angular/core';\nimport {LOGGER, Logger} from '@anglr/common';\nimport {BindThis, Dictionary, isEmptyObject, isString} from '@jscrpt/common';\n\nimport {RelationsComponentManager} from '../relationsComponentManager/relationsComponentManager.service';\nimport {RelationsProcessorComponentData, RelationsProcessorInputOutputData} from '../relationsProcessor/relationsProcessor.interface';\nimport {RelationsProcessor} from '../relationsProcessor/relationsProcessor.service';\nimport {MarkForCheckId, RelationsChange} from './relationsChangeDetector.interface';\nimport {RelationsChangeDetectorOptions} from './relationsChangeDetector.options';\n\n/**\n * Change detector for relations, which allows async change detection\n */\n@Injectable()\nexport class RelationsChangeDetector\n{\n //######################### protected properties #########################\n\n /**\n * Instance of relations processor for handling relations\n */\n protected ɵrelationsProcessor: RelationsProcessor|undefined|null;\n\n /**\n * Gets instance of relations processor for handling relations\n */\n protected get relationsProcessor(): RelationsProcessor\n {\n return (this.ɵrelationsProcessor ??= this.injector.get(RelationsProcessor));\n }\n\n /**\n * Instance of relations component manager storing registered components\n */\n protected ɵrelationsComponentManager: RelationsComponentManager|undefined|null;\n\n /**\n * Gets instance of relations component manager storing registered components\n */\n protected get relationsComponentManager(): RelationsComponentManager\n {\n return (this.ɵrelationsComponentManager ??= this.injector.get(RelationsComponentManager));\n }\n\n /**\n * Objects storing components and theirs outputs and related input components def\n */\n protected ɵoutputsComponents: Dictionary<Dictionary<RelationsProcessorInputOutputData[]>> = {};\n\n /**\n * Instance of parent relations change detector\n */\n protected parent: RelationsChangeDetector|undefined|null = inject(RelationsChangeDetector, {optional: true, skipSelf: true,});\n\n /**\n * Objects storing components and theirs outputs and related input components\n */\n protected get outputsComponents(): Dictionary<Dictionary<RelationsProcessorInputOutputData[]>>\n {\n if(isEmptyObject(this.ɵoutputsComponents) && this.parent)\n {\n return this.parent.outputsComponents;\n }\n\n return this.ɵoutputsComponents;\n }\n\n /**\n * Options for relations change detector\n */\n protected options: RelationsChangeDetectorOptions;\n\n /**\n * Identifier of running timeout\n */\n protected timeout: number|undefined|null;\n\n /**\n * Array of input component ids that should be checked in first run\n */\n protected firstRunIds: RelationsChange[] = [];\n\n /**\n * Array of input component ids that should be checked in second run\n */\n protected secondRunIds: RelationsChange[] = [];\n\n /**\n * Indication whether is check running\n */\n protected checkRunning: boolean = false;\n\n //######################### constructor #########################\n constructor(protected injector: Injector,\n @Inject(LOGGER) protected logger: Logger,\n @Optional() options?: RelationsChangeDetectorOptions,)\n {\n if(!options || !(options instanceof RelationsChangeDetectorOptions))\n {\n options = new RelationsChangeDetectorOptions();\n }\n\n this.options = options;\n }\n\n //######################### public methods #########################\n\n /**\n * Marks input component connected to this for checking\n * @param id - Identification of what should be checked\n */\n public markForCheck(id: MarkForCheckId): void\n {\n const componentId = isString(id.componentId) ? id.componentId : this.relationsComponentManager.getId(id.componentId);\n\n if(!componentId)\n {\n this.logger.warn('RelationsChangeDetector: Unable to find component!');\n\n return;\n }\n\n const inputComponents = this.outputsComponents[componentId]?.[id.outputName] ?? [];\n const ids = this.checkRunning && !this.options.detectionInSingleRun ? this.secondRunIds : this.firstRunIds;\n\n for(const inputComponent of inputComponents)\n {\n const item = ids.find(itm => itm.id == inputComponent.inputComponentId);\n\n //not exists yet\n if(!item)\n {\n ids.push(\n {\n id: inputComponent.inputComponentId,\n inputs: [inputComponent.inputName],\n });\n\n continue;\n }\n\n //already exists\n if(item.inputs.indexOf(inputComponent.inputName) >= 0)\n {\n continue;\n }\n\n item.inputs.push(inputComponent.inputName);\n }\n\n //schedule check\n if(!this.timeout)\n {\n this.timeout = setTimeout(this.runCheck, 0) as unknown as number;\n }\n }\n\n /**\n *\n * @param relations - Object storing current relations\n */\n public initialize(relations: Dictionary<RelationsProcessorComponentData>): void\n {\n this.ɵoutputsComponents = {};\n\n for(const componentId in relations)\n {\n const relationsDef = relations[componentId];\n\n this.ɵoutputsComponents[componentId] ??= {};\n\n if(!relationsDef.inputOutputs)\n {\n continue;\n }\n\n for(const inputOutput of relationsDef.inputOutputs)\n {\n this.ɵoutputsComponents[componentId][inputOutput.outputName] ??= [];\n this.ɵoutputsComponents[componentId][inputOutput.outputName].push(inputOutput);\n }\n }\n }\n\n //######################### protected methods #########################\n\n /**\n * Runs check for marked components\n */\n @BindThis\n protected runCheck(): void\n {\n this.checkRunning = true;\n\n for(const id of this.firstRunIds)\n {\n const changes = this.relationsProcessor.transferInputsData(id.id, true);\n const allInputs = Object.keys(changes.changes);\n\n //TODO: maybe move into relations processor\n for(const inputName of allInputs)\n {\n //remove non existing change\n if(!(inputName in id.inputs))\n {\n delete changes.changes[inputName];\n }\n }\n }\n\n if(this.options.detectionInSingleRun)\n {\n this.firstRunIds = [];\n }\n else\n {\n this.firstRunIds = this.secondRunIds;\n this.secondRunIds = [];\n }\n\n this.checkRunning = false;\n this.timeout = null;\n }\n}\n"]}
@@ -500,12 +500,14 @@ export class RelationsProcessor {
500
500
  for (const comp of components) {
501
501
  if (!comp.ɵɵRelationsOptionsInitialized) {
502
502
  comp.relationsOptions = meta.metadataOptions;
503
+ comp.ɵɵRelationsOptionsInitialized = true;
503
504
  }
504
505
  }
505
506
  }
506
507
  else {
507
508
  if (!components.ɵɵRelationsOptionsInitialized) {
508
509
  components.relationsOptions = meta.metadataOptions;
510
+ components.ɵɵRelationsOptionsInitialized = true;
509
511
  }
510
512
  }
511
513
  }
@@ -1 +1 @@
1
- {"version":3,"file":"relationsProcessor.service.js","sourceRoot":"","sources":["../../../../../relations/src/services/relationsProcessor/relationsProcessor.service.ts"],"names":[],"mappings":"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","sourcesContent":["import {inject, Inject, Injectable, Injector, OnDestroy, Optional, SimpleChanges} from '@angular/core';\nimport {LOGGER, Logger} from '@anglr/common';\nimport {DynamicItemLoader} from '@anglr/dynamic';\nimport {Dictionary, isBlank, noop, NoopAction} from '@jscrpt/common';\nimport {Observable, Subscription} from 'rxjs';\n\nimport {RelationsComponent, RelationsComponentMetadata, RelationsComponentType} from '../../interfaces';\nimport {RelationsComponentManager} from '../relationsComponentManager/relationsComponentManager.service';\nimport {RelationsManager} from '../relationsManager/relationsManager.service';\nimport {RelationsDataTransferInstruction, RelationsProcessorComponentData, RelationsProcessorInputOutputData} from './relationsProcessor.interface';\nimport {RELATIONS_COMPONENTS_LOADER, RELATIONS_PROCESSOR_SKIP_INIT} from '../../misc/tokens';\nimport {RelationsComponentDef, RelationsProcessorComponent} from '../../misc/types';\nimport {RelationsDataTransferInstructionImpl} from './relationsDataTransferInstruction';\nimport {isAssigned, isSkipInit} from '../../misc/utils';\nimport {RelationsChangeDetector} from '../relationsChangeDetector/relationsChangeDetector.service';\n\n/**\n * Processor that applies relations to registered components\n */\n@Injectable()\nexport class RelationsProcessor implements OnDestroy\n{\n //######################### protected fields #########################\n\n /**\n * Promise used for indication that processor was initialized\n */\n protected ɵInitialized: Promise<void> = Promise.resolve();\n\n /**\n * Relations metadata\n */\n protected ɵRelations: Dictionary<RelationsProcessorComponentData> = {};\n\n /**\n * Array of backward relations, relations that are used for obtaining data for inputs\n */\n protected ɵBackwardRelations: Dictionary<RelationsProcessorInputOutputData[]> = {};\n\n /**\n * Resolves initialized\n */\n protected resolveInitialized: NoopAction = noop;\n\n /**\n * Subscriptions created during initialization\n */\n protected initSubscriptions: Subscription = new Subscription();\n\n /**\n * Gets or sets relations metadata\n */\n protected get relations(): Dictionary<RelationsProcessorComponentData>\n {\n if(this.parent)\n {\n return this.parent.relations;\n }\n\n return this.ɵRelations;\n }\n protected set relations(value: Dictionary<RelationsProcessorComponentData>)\n {\n this.ɵRelations = value;\n }\n\n /**\n * Gets or sets array of backward relations, relations that are used for obtaining data for inputs\n */\n protected get backwardRelations(): Dictionary<RelationsProcessorInputOutputData[]>\n {\n if(this.parent)\n {\n return this.parent.backwardRelations;\n }\n\n return this.ɵBackwardRelations;\n }\n protected set backwardRelations(value: Dictionary<RelationsProcessorInputOutputData[]>)\n {\n this.ɵBackwardRelations = value;\n }\n\n /**\n * Instance of parent relations processor\n */\n protected parent: RelationsProcessor|null = null;\n\n /**\n * Id of scope\n */\n protected scopeId: string|null = null;\n\n /**\n * Injected relations change detector\n */\n protected relationsChangeDetector: RelationsChangeDetector = inject(RelationsChangeDetector);\n\n //######################### public properties #########################\n\n /**\n * Gets promise that completes when processor was initialized\n */\n public get initialized(): Promise<void>\n {\n return this.ɵInitialized;\n }\n\n //######################### constructor #########################\n constructor(protected relationsManager: RelationsManager,\n protected componentManager: RelationsComponentManager,\n protected injector: Injector,\n @Inject(RELATIONS_COMPONENTS_LOADER) protected loader: DynamicItemLoader<RelationsComponentDef>,\n @Inject(LOGGER) @Optional() protected logger?: Logger,\n @Inject(RELATIONS_PROCESSOR_SKIP_INIT) @Optional() skipInit?: boolean,)\n {\n if(!skipInit)\n {\n this.initSubscriptions.add(this.relationsManager.relationsChange.subscribe(() => this.initializeRelations()));\n\n this.initializeRelations();\n }\n }\n\n //######################### public methods - implementation of OnDestroy #########################\n\n /**\n * Called when component is destroyed\n */\n public ngOnDestroy(): void\n {\n this.initSubscriptions.unsubscribe();\n\n this.destroyRelations();\n }\n\n //######################### public methods #########################\n\n /**\n * Updates relations\n * @param id - Id of component to be registered\n */\n public updateRelations(id: string): void\n {\n this.logger?.debug('RelationsProcessor: Updating relations for {@id}', {id});\n\n const relations: RelationsProcessorComponentData = this.relations[id];\n const backwardRelations = this.backwardRelations[id];\n let components = this.componentManager.get(id);\n\n //this component has no relations\n if(!relations || !components)\n {\n this.logger?.warn('RelationsProcessor: No relations for {@id}', {id});\n\n return;\n }\n\n this.initOptions(components, relations);\n\n //initialize default value from connection to this\n if(backwardRelations?.length)\n {\n backwardRelations.forEach(inputOutput =>\n {\n this.initBackwardRelation(inputOutput);\n });\n }\n\n if(relations?.inputOutputs)\n {\n if(!Array.isArray(components))\n {\n components = [components];\n }\n\n for(const outputComponent of components)\n {\n outputComponent.ɵɵRelationsOutputsChangeSubscriptions?.forEach(subscription => subscription.unsubscribe());\n outputComponent.ɵɵRelationsOutputsChangeSubscriptions = [];\n\n for(const inputOutput of relations.inputOutputs)\n {\n let inputComponents = this.componentManager.get(inputOutput.inputComponentId);\n\n if(inputComponents && !Array.isArray(inputComponents))\n {\n inputComponents = [inputComponents];\n }\n\n this.logger?.verbose('RelationsProcessor: processing input outputs {@data} ', {id, inputOutput, inputComponents, components});\n\n const outputObservable = (outputComponent as any)[`${inputOutput.outputName}Change`] as Observable<any>;\n\n //check whether is observable output\n if(!(outputObservable instanceof Observable))\n {\n this.logger?.warn('RelationsProcessor: Output on component {@data} is not observable', inputOutput);\n\n continue;\n }\n\n //set listening for output changes\n outputComponent.ɵɵRelationsOutputsChangeSubscriptions.push(outputObservable.subscribe(() =>\n {\n let inputs = this.componentManager.get(inputOutput.inputComponentId);\n\n if(!inputs)\n {\n this.logger?.warn('RelationsProcessor: Missing input components {@data} on output change', inputOutput);\n\n return;\n }\n\n if(!Array.isArray(inputs))\n {\n inputs = [inputs];\n }\n\n for(const input of inputs)\n {\n this.transferData(outputComponent, inputOutput.outputName, input, inputOutput.inputName, false);\n }\n }));\n\n if(!inputComponents || !Array.isArray(inputComponents))\n {\n this.logger?.warn('RelationsProcessor: Missing input components {@data}', inputOutput);\n\n continue;\n }\n\n for(const inputComponent of inputComponents)\n {\n const id = `${inputComponent.ɵɵRelationsComponentId}-${outputComponent.ɵɵRelationsComponentId}`;\n\n //init data transfer only if not marked as skip init and was not initialized and was already at least once assigned\n if(!isSkipInit(outputComponent, inputOutput.outputName) && !inputOutput.initialized[id] && isAssigned(outputComponent, inputOutput.outputName))\n {\n inputOutput.initialized[id] = this.transferData(outputComponent, inputOutput.outputName, inputComponent, inputOutput.inputName, true);\n }\n }\n }\n }\n }\n }\n\n /**\n * Method used for destroying component\n */\n public destroyComponent(id: string): void\n {\n const metadata: RelationsProcessorComponentData = this.relations[id];\n const backwardRelations = this.backwardRelations[id];\n\n //uninitialize backward relations\n if(backwardRelations)\n {\n for(const relation of backwardRelations)\n {\n relation.initialized = {};\n }\n }\n\n //destroy relations\n if(metadata)\n {\n let components = this.componentManager.get(id);\n\n if(components)\n {\n if(!components)\n {\n return;\n }\n\n if(!Array.isArray(components))\n {\n components = [components];\n }\n\n for(const cmp of components)\n {\n cmp.ɵɵRelationsOutputsChangeSubscriptions?.forEach(subscription => subscription.unsubscribe());\n cmp.ɵɵRelationsOutputsChangeSubscriptions = [];\n cmp.ɵɵRelationsOptionsInitialized = false;\n }\n }\n\n if(metadata.inputOutputs && Array.isArray(metadata.inputOutputs))\n {\n for(const inputOutput of metadata.inputOutputs)\n {\n inputOutput.initialized = {};\n }\n }\n\n //destroy auto created components and unregister them\n if(metadata.autoCreated)\n {\n let components = this.componentManager.get(id);\n\n if(!components)\n {\n return;\n }\n\n if(!Array.isArray(components))\n {\n components = [components];\n }\n\n this.componentManager.unregisterComponent(id);\n\n for(const cmp of components)\n {\n cmp.ngOnDestroy?.();\n }\n }\n }\n }\n\n /**\n * Opens new scope of relations processor\n * @param id - Id of newly created scope\n * @param componentManager - Scoped instance of component manager\n * @param injector - Injector for current scope\n */\n public openScope(id: string,\n componentManager: RelationsComponentManager,\n injector: Injector,): RelationsProcessor\n {\n const processor = new RelationsProcessor(this.relationsManager, componentManager, injector, this.loader, this.logger, true);\n processor.scopeId = id;\n processor.parent = this;\n\n for(const componentId in this.relations)\n {\n const relationsDef = this.relations[componentId];\n\n //Same scope initialize\n if(relationsDef.scope === id && relationsDef.componentType)\n {\n const instance = new relationsDef.componentType(injector);\n componentManager.registerComponent(componentId, instance);\n processor.updateRelations(componentId);\n }\n }\n\n return processor;\n }\n\n /**\n * Destroyes opened scope itself\n */\n public destroyScope(): void\n {\n for(const componentId in this.relations)\n {\n const relationsDef = this.relations[componentId];\n\n //Same scope initialize\n if(relationsDef.scope === this.scopeId)\n {\n this.destroyComponent(componentId);\n }\n }\n }\n\n /**\n * Transfers data for specified component using its output relations, all data are transfered in single change set per component\n * @param id - Id of component whose outputs relations should be applied to transfer data\n * @param delayed - Indication whether delay data transfer and only generate instructions, if true returns dictionary with data transfer instructions per components\n */\n public transferOutputsData(id: string, delayed: true): Dictionary<RelationsDataTransferInstruction>\n public transferOutputsData(id: string, delayed: false): null\n public transferOutputsData(id: string, delayed: boolean = false): null|Dictionary<RelationsDataTransferInstruction>\n {\n const transfers: Dictionary<RelationsDataTransferInstructionImpl> = {};\n const relations: RelationsProcessorComponentData = this.relations[id];\n let components = this.componentManager.get(id);\n\n if(!relations || !components)\n {\n this.logger?.warn('RelationsProcessor: No relations for {@id}', {id});\n\n return delayed ? transfers : null;\n }\n\n if(relations?.inputOutputs)\n {\n if(!Array.isArray(components))\n {\n components = [components];\n }\n\n //for each component containing outputs\n for(const outputComponent of components)\n {\n //for each relation\n for(const inputOutput of relations.inputOutputs)\n {\n let inputComponents = this.componentManager.get(inputOutput.inputComponentId);\n\n if(inputComponents && !Array.isArray(inputComponents))\n {\n inputComponents = [inputComponents];\n }\n\n if(!inputComponents || !Array.isArray(inputComponents))\n {\n this.logger?.warn('RelationsProcessor: Missing input components {@data}', inputOutput);\n\n continue;\n }\n\n transfers[inputOutput.inputComponentId] ??= new RelationsDataTransferInstructionImpl(inputComponents);\n\n //for each input component\n for(const inputComponent of inputComponents)\n {\n if(!outputComponent || !inputComponent)\n {\n continue;\n }\n\n const previousValue = (inputComponent as any)[inputOutput.inputName];\n const currentValue = (outputComponent as any)[inputOutput.outputName];\n\n transfers[inputOutput.inputComponentId].changes[inputOutput.inputName] =\n {\n previousValue,\n currentValue,\n firstChange: false,\n isFirstChange: () => false,\n };\n }\n }\n }\n\n if(!delayed)\n {\n //transfers data\n for(const key in transfers)\n {\n const transfer = transfers[key];\n\n transfer.applyChanges();\n }\n }\n }\n\n return delayed ? transfers : null;\n }\n\n /**\n * Transfers data for specified component using its inputs relations, all data are transfered in single change\n * @param id - Id of component whose inputs relations should be applied to transfer data\n * @param delayed - Indication whether delay data transfer and only generate instructions, if true returns transfer instructions\n */\n public transferInputsData(id: string, delayed: true): RelationsDataTransferInstruction\n public transferInputsData(id: string, delayed: false): null\n public transferInputsData(id: string, delayed: boolean = false): null|RelationsDataTransferInstruction\n {\n const backwardRelations = this.backwardRelations[id];\n const inputComponent = this.componentManager.get(id);\n\n if(!backwardRelations)\n {\n this.logger?.warn('RelationsProcessor: No backward relations for {@id}', {id});\n\n return delayed ? new RelationsDataTransferInstructionImpl([]) : null;\n }\n\n if(!inputComponent)\n {\n this.logger?.warn('RelationsProcessor: Missing input components for {@id}', {id});\n\n return delayed ? new RelationsDataTransferInstructionImpl([]) : null;\n }\n\n if(Array.isArray(inputComponent))\n {\n this.logger?.error('RelationsProcessor: Only one component must be available for id {@id}', {id});\n\n return delayed ? new RelationsDataTransferInstructionImpl([]) : null;\n }\n\n const transfer: RelationsDataTransferInstructionImpl = new RelationsDataTransferInstructionImpl([inputComponent]);\n\n //for each backward relation\n for(const backwardRelation of backwardRelations)\n {\n const outputComponent = this.componentManager.get(backwardRelation.outputComponentId);\n\n if((Array.isArray(outputComponent)))\n {\n this.logger?.error('RelationsProcessor: Only one output component must be available for id {@id}', {id});\n\n continue;\n }\n\n if(!outputComponent || !inputComponent)\n {\n continue;\n }\n\n const previousValue = (inputComponent as any)[backwardRelation.inputName];\n const currentValue = (outputComponent as any)[backwardRelation.outputName];\n\n transfer.changes[backwardRelation.inputName] =\n {\n previousValue,\n currentValue,\n firstChange: false,\n isFirstChange: () => false,\n };\n }\n\n if(!delayed)\n {\n transfer.applyChanges();\n }\n\n return delayed ? transfer : null;\n }\n\n //######################### protected methods #########################\n\n /**\n * Initialize relations from metadata\n */\n protected async initializeRelations(): Promise<void>\n {\n await this.destroyRelations();\n this.setInitializePromise();\n\n this.logger?.debug('RelationsProcessor: initializing relations');\n\n //empty relations\n if(!this.relationsManager.relations.length)\n {\n this.resolveInitialized();\n\n return;\n }\n\n for(const meta of this.relationsManager.relations)\n {\n const outputs: RelationsProcessorInputOutputData[] = [];\n\n //no outputs metadata\n if(!meta.outputs)\n {\n continue;\n }\n\n for(const output of meta.outputs)\n {\n //no inputs metadata\n if(!output.inputs)\n {\n continue;\n }\n\n for(const input of output.inputs)\n {\n const inputOutput: RelationsProcessorInputOutputData =\n {\n inputComponentId: input.id,\n outputComponentId: meta.id,\n inputName: input.inputName,\n outputName: output.outputName,\n initialized: {},\n };\n\n outputs.push(inputOutput);\n\n if(!this.backwardRelations[input.id])\n {\n this.backwardRelations[input.id] = [];\n }\n\n this.backwardRelations[input.id].push(inputOutput);\n }\n }\n\n //sets options for relations component\n await this.initComponent(meta, outputs);\n }\n\n this.relationsChangeDetector.initialize(this.relations);\n this.resolveInitialized();\n }\n\n /**\n * Initialize backward relations\n * @param inputOutput - Data for input and output\n */\n protected initBackwardRelation(inputOutput: RelationsProcessorInputOutputData): void\n {\n let outputComponents = this.componentManager.get(inputOutput.outputComponentId);\n let inputComponents = this.componentManager.get(inputOutput.inputComponentId);\n\n if((isBlank(outputComponents) || Array.isArray(outputComponents) && !outputComponents.length) ||\n (isBlank(inputComponents) || Array.isArray(inputComponents) && !inputComponents.length))\n {\n this.logger?.warn('RelationsProcessor: missing metadata for backward relations {@data}', inputOutput);\n\n return;\n }\n\n if(!Array.isArray(inputComponents))\n {\n inputComponents = [inputComponents];\n }\n\n if(!Array.isArray(outputComponents))\n {\n outputComponents = [outputComponents];\n }\n\n for(const inputCmp of inputComponents)\n {\n for(const outputCmp of outputComponents)\n {\n const id = `${inputCmp.ɵɵRelationsComponentId}-${outputCmp.ɵɵRelationsComponentId}`;\n\n //init data transfer only if not marked as skip init and was not initialized and was already at least once assigned\n if(!isSkipInit(outputCmp, inputOutput.outputName) && !inputOutput.initialized[id] && isAssigned(outputCmp, inputOutput.outputName))\n {\n inputOutput.initialized[id] = this.transferData(outputCmp, inputOutput.outputName, inputCmp, inputOutput.inputName, true);\n }\n }\n }\n }\n\n /**\n * Transfers data from source property to target property\n * @param source Instance of source object containing source property with data\n * @param sourceProperty Name of source property with data that are transfered\n * @param target Instance of target object containing target property for data\n * @param targetProperty Name of target property which will be filled with data\n * @param initial Indication whether is transfer of data initial, or on event\n */\n protected transferData(source: RelationsComponent, sourceProperty: string, target: RelationsComponent, targetProperty: string, initial: boolean): boolean\n {\n if(!source || !target)\n {\n return false;\n }\n\n const previousValue = (target as any)[targetProperty];\n const currentValue = (source as any)[sourceProperty];\n (target as any)[targetProperty] = (source as any)[sourceProperty];\n const changes: SimpleChanges = {};\n\n changes[targetProperty] =\n {\n previousValue,\n currentValue,\n firstChange: initial,\n isFirstChange: () => initial\n };\n\n target.ngOnChanges?.(changes);\n target.invalidateVisuals();\n\n return true;\n }\n\n /**\n * Initialize relation component\n * @param meta - Metadata for relations component\n * @param outputs - Array of outputs data for relations component\n */\n protected async initComponent(meta: RelationsComponentMetadata, outputs: RelationsProcessorInputOutputData[]): Promise<void>\n {\n const component = this.componentManager.get(meta.id);\n\n if(component)\n {\n this.initRelation(false, meta, outputs, null, null);\n this.updateRelations(meta.id);\n\n return;\n }\n\n const componentMeta = await this.loader.loadItem(meta);\n\n if(!componentMeta)\n {\n this.initRelation(false, meta, outputs, null, null);\n\n this.logger?.warn('RelationsProcessor: Unable to load relations component! {@meta}', {package: meta.package, name: meta.name});\n\n return;\n }\n\n if(!meta.scope)\n {\n const instance = new componentMeta.data(this.injector);\n this.componentManager.registerComponent(meta.id, instance);\n }\n\n this.initRelation(true, meta, outputs, meta.scope ?? null, meta.scope ? componentMeta.data : null);\n this.updateRelations(meta.id);\n }\n\n /**\n * Initialize relation for metadata and component\n * @param autoCreated - Indication whether was component auto created or not\n * @param meta - Metadata for relations component\n * @param inputOutputs - Array of outputs data for relations\n * @param scope - Current scope used for this relations component\n * @param componentType - Type used for creation of relations component (only for scoped ones)\n */\n protected initRelation(autoCreated: boolean, meta: RelationsComponentMetadata, inputOutputs: RelationsProcessorInputOutputData[], scope: string|null, componentType: RelationsComponentType|null): void\n {\n this.relations[meta.id] =\n {\n autoCreated,\n inputOutputs,\n metadataOptions: meta.relationsOptions,\n componentType,\n scope,\n };\n }\n\n /**\n * Initialize relations component options\n * @param components - Components which options should be initialized\n * @param meta - Metadata containing options for initialization\n */\n protected initOptions(components: RelationsProcessorComponent|RelationsProcessorComponent[], meta: RelationsProcessorComponentData): void\n {\n if(Array.isArray(components))\n {\n for(const comp of components)\n {\n if(!comp.ɵɵRelationsOptionsInitialized)\n {\n comp.relationsOptions = meta.metadataOptions;\n }\n }\n }\n else\n {\n if(!components.ɵɵRelationsOptionsInitialized)\n {\n components.relationsOptions = meta.metadataOptions;\n }\n }\n }\n\n /**\n * Sets initialized promise\n */\n protected setInitializePromise(): void\n {\n this.ɵInitialized = new Promise(resolve => this.resolveInitialized = resolve);\n }\n\n /**\n * Destroys initialized relations\n */\n protected async destroyRelations(): Promise<void>\n {\n await this.ɵInitialized;\n\n Object.keys(this.relations).forEach(id => this.destroyComponent(id));\n\n this.relations = {};\n this.backwardRelations = {};\n }\n}"]}
1
+ {"version":3,"file":"relationsProcessor.service.js","sourceRoot":"","sources":["../../../../../relations/src/services/relationsProcessor/relationsProcessor.service.ts"],"names":[],"mappings":"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","sourcesContent":["import {inject, Inject, Injectable, Injector, OnDestroy, Optional, SimpleChanges} from '@angular/core';\nimport {LOGGER, Logger} from '@anglr/common';\nimport {DynamicItemLoader} from '@anglr/dynamic';\nimport {Dictionary, isBlank, noop, NoopAction} from '@jscrpt/common';\nimport {Observable, Subscription} from 'rxjs';\n\nimport {RelationsComponent, RelationsComponentMetadata, RelationsComponentType} from '../../interfaces';\nimport {RelationsComponentManager} from '../relationsComponentManager/relationsComponentManager.service';\nimport {RelationsManager} from '../relationsManager/relationsManager.service';\nimport {RelationsDataTransferInstruction, RelationsProcessorComponentData, RelationsProcessorInputOutputData} from './relationsProcessor.interface';\nimport {RELATIONS_COMPONENTS_LOADER, RELATIONS_PROCESSOR_SKIP_INIT} from '../../misc/tokens';\nimport {RelationsComponentDef, RelationsProcessorComponent} from '../../misc/types';\nimport {RelationsDataTransferInstructionImpl} from './relationsDataTransferInstruction';\nimport {isAssigned, isSkipInit} from '../../misc/utils';\nimport {RelationsChangeDetector} from '../relationsChangeDetector/relationsChangeDetector.service';\n\n/**\n * Processor that applies relations to registered components\n */\n@Injectable()\nexport class RelationsProcessor implements OnDestroy\n{\n //######################### protected fields #########################\n\n /**\n * Promise used for indication that processor was initialized\n */\n protected ɵInitialized: Promise<void> = Promise.resolve();\n\n /**\n * Relations metadata\n */\n protected ɵRelations: Dictionary<RelationsProcessorComponentData> = {};\n\n /**\n * Array of backward relations, relations that are used for obtaining data for inputs\n */\n protected ɵBackwardRelations: Dictionary<RelationsProcessorInputOutputData[]> = {};\n\n /**\n * Resolves initialized\n */\n protected resolveInitialized: NoopAction = noop;\n\n /**\n * Subscriptions created during initialization\n */\n protected initSubscriptions: Subscription = new Subscription();\n\n /**\n * Gets or sets relations metadata\n */\n protected get relations(): Dictionary<RelationsProcessorComponentData>\n {\n if(this.parent)\n {\n return this.parent.relations;\n }\n\n return this.ɵRelations;\n }\n protected set relations(value: Dictionary<RelationsProcessorComponentData>)\n {\n this.ɵRelations = value;\n }\n\n /**\n * Gets or sets array of backward relations, relations that are used for obtaining data for inputs\n */\n protected get backwardRelations(): Dictionary<RelationsProcessorInputOutputData[]>\n {\n if(this.parent)\n {\n return this.parent.backwardRelations;\n }\n\n return this.ɵBackwardRelations;\n }\n protected set backwardRelations(value: Dictionary<RelationsProcessorInputOutputData[]>)\n {\n this.ɵBackwardRelations = value;\n }\n\n /**\n * Instance of parent relations processor\n */\n protected parent: RelationsProcessor|null = null;\n\n /**\n * Id of scope\n */\n protected scopeId: string|null = null;\n\n /**\n * Injected relations change detector\n */\n protected relationsChangeDetector: RelationsChangeDetector = inject(RelationsChangeDetector);\n\n //######################### public properties #########################\n\n /**\n * Gets promise that completes when processor was initialized\n */\n public get initialized(): Promise<void>\n {\n return this.ɵInitialized;\n }\n\n //######################### constructor #########################\n constructor(protected relationsManager: RelationsManager,\n protected componentManager: RelationsComponentManager,\n protected injector: Injector,\n @Inject(RELATIONS_COMPONENTS_LOADER) protected loader: DynamicItemLoader<RelationsComponentDef>,\n @Inject(LOGGER) @Optional() protected logger?: Logger,\n @Inject(RELATIONS_PROCESSOR_SKIP_INIT) @Optional() skipInit?: boolean,)\n {\n if(!skipInit)\n {\n this.initSubscriptions.add(this.relationsManager.relationsChange.subscribe(() => this.initializeRelations()));\n\n this.initializeRelations();\n }\n }\n\n //######################### public methods - implementation of OnDestroy #########################\n\n /**\n * Called when component is destroyed\n */\n public ngOnDestroy(): void\n {\n this.initSubscriptions.unsubscribe();\n\n this.destroyRelations();\n }\n\n //######################### public methods #########################\n\n /**\n * Updates relations\n * @param id - Id of component to be registered\n */\n public updateRelations(id: string): void\n {\n this.logger?.debug('RelationsProcessor: Updating relations for {@id}', {id});\n\n const relations: RelationsProcessorComponentData = this.relations[id];\n const backwardRelations = this.backwardRelations[id];\n let components = this.componentManager.get(id);\n\n //this component has no relations\n if(!relations || !components)\n {\n this.logger?.warn('RelationsProcessor: No relations for {@id}', {id});\n\n return;\n }\n\n this.initOptions(components, relations);\n\n //initialize default value from connection to this\n if(backwardRelations?.length)\n {\n backwardRelations.forEach(inputOutput =>\n {\n this.initBackwardRelation(inputOutput);\n });\n }\n\n if(relations?.inputOutputs)\n {\n if(!Array.isArray(components))\n {\n components = [components];\n }\n\n for(const outputComponent of components)\n {\n outputComponent.ɵɵRelationsOutputsChangeSubscriptions?.forEach(subscription => subscription.unsubscribe());\n outputComponent.ɵɵRelationsOutputsChangeSubscriptions = [];\n\n for(const inputOutput of relations.inputOutputs)\n {\n let inputComponents = this.componentManager.get(inputOutput.inputComponentId);\n\n if(inputComponents && !Array.isArray(inputComponents))\n {\n inputComponents = [inputComponents];\n }\n\n this.logger?.verbose('RelationsProcessor: processing input outputs {@data} ', {id, inputOutput, inputComponents, components});\n\n const outputObservable = (outputComponent as any)[`${inputOutput.outputName}Change`] as Observable<any>;\n\n //check whether is observable output\n if(!(outputObservable instanceof Observable))\n {\n this.logger?.warn('RelationsProcessor: Output on component {@data} is not observable', inputOutput);\n\n continue;\n }\n\n //set listening for output changes\n outputComponent.ɵɵRelationsOutputsChangeSubscriptions.push(outputObservable.subscribe(() =>\n {\n let inputs = this.componentManager.get(inputOutput.inputComponentId);\n\n if(!inputs)\n {\n this.logger?.warn('RelationsProcessor: Missing input components {@data} on output change', inputOutput);\n\n return;\n }\n\n if(!Array.isArray(inputs))\n {\n inputs = [inputs];\n }\n\n for(const input of inputs)\n {\n this.transferData(outputComponent, inputOutput.outputName, input, inputOutput.inputName, false);\n }\n }));\n\n if(!inputComponents || !Array.isArray(inputComponents))\n {\n this.logger?.warn('RelationsProcessor: Missing input components {@data}', inputOutput);\n\n continue;\n }\n\n for(const inputComponent of inputComponents)\n {\n const id = `${inputComponent.ɵɵRelationsComponentId}-${outputComponent.ɵɵRelationsComponentId}`;\n\n //init data transfer only if not marked as skip init and was not initialized and was already at least once assigned\n if(!isSkipInit(outputComponent, inputOutput.outputName) && !inputOutput.initialized[id] && isAssigned(outputComponent, inputOutput.outputName))\n {\n inputOutput.initialized[id] = this.transferData(outputComponent, inputOutput.outputName, inputComponent, inputOutput.inputName, true);\n }\n }\n }\n }\n }\n }\n\n /**\n * Method used for destroying component\n */\n public destroyComponent(id: string): void\n {\n const metadata: RelationsProcessorComponentData = this.relations[id];\n const backwardRelations = this.backwardRelations[id];\n\n //uninitialize backward relations\n if(backwardRelations)\n {\n for(const relation of backwardRelations)\n {\n relation.initialized = {};\n }\n }\n\n //destroy relations\n if(metadata)\n {\n let components = this.componentManager.get(id);\n\n if(components)\n {\n if(!components)\n {\n return;\n }\n\n if(!Array.isArray(components))\n {\n components = [components];\n }\n\n for(const cmp of components)\n {\n cmp.ɵɵRelationsOutputsChangeSubscriptions?.forEach(subscription => subscription.unsubscribe());\n cmp.ɵɵRelationsOutputsChangeSubscriptions = [];\n cmp.ɵɵRelationsOptionsInitialized = false;\n }\n }\n\n if(metadata.inputOutputs && Array.isArray(metadata.inputOutputs))\n {\n for(const inputOutput of metadata.inputOutputs)\n {\n inputOutput.initialized = {};\n }\n }\n\n //destroy auto created components and unregister them\n if(metadata.autoCreated)\n {\n let components = this.componentManager.get(id);\n\n if(!components)\n {\n return;\n }\n\n if(!Array.isArray(components))\n {\n components = [components];\n }\n\n this.componentManager.unregisterComponent(id);\n\n for(const cmp of components)\n {\n cmp.ngOnDestroy?.();\n }\n }\n }\n }\n\n /**\n * Opens new scope of relations processor\n * @param id - Id of newly created scope\n * @param componentManager - Scoped instance of component manager\n * @param injector - Injector for current scope\n */\n public openScope(id: string,\n componentManager: RelationsComponentManager,\n injector: Injector,): RelationsProcessor\n {\n const processor = new RelationsProcessor(this.relationsManager, componentManager, injector, this.loader, this.logger, true);\n processor.scopeId = id;\n processor.parent = this;\n\n for(const componentId in this.relations)\n {\n const relationsDef = this.relations[componentId];\n\n //Same scope initialize\n if(relationsDef.scope === id && relationsDef.componentType)\n {\n const instance = new relationsDef.componentType(injector);\n componentManager.registerComponent(componentId, instance);\n processor.updateRelations(componentId);\n }\n }\n\n return processor;\n }\n\n /**\n * Destroyes opened scope itself\n */\n public destroyScope(): void\n {\n for(const componentId in this.relations)\n {\n const relationsDef = this.relations[componentId];\n\n //Same scope initialize\n if(relationsDef.scope === this.scopeId)\n {\n this.destroyComponent(componentId);\n }\n }\n }\n\n /**\n * Transfers data for specified component using its output relations, all data are transfered in single change set per component\n * @param id - Id of component whose outputs relations should be applied to transfer data\n * @param delayed - Indication whether delay data transfer and only generate instructions, if true returns dictionary with data transfer instructions per components\n */\n public transferOutputsData(id: string, delayed: true): Dictionary<RelationsDataTransferInstruction>\n public transferOutputsData(id: string, delayed: false): null\n public transferOutputsData(id: string, delayed: boolean = false): null|Dictionary<RelationsDataTransferInstruction>\n {\n const transfers: Dictionary<RelationsDataTransferInstructionImpl> = {};\n const relations: RelationsProcessorComponentData = this.relations[id];\n let components = this.componentManager.get(id);\n\n if(!relations || !components)\n {\n this.logger?.warn('RelationsProcessor: No relations for {@id}', {id});\n\n return delayed ? transfers : null;\n }\n\n if(relations?.inputOutputs)\n {\n if(!Array.isArray(components))\n {\n components = [components];\n }\n\n //for each component containing outputs\n for(const outputComponent of components)\n {\n //for each relation\n for(const inputOutput of relations.inputOutputs)\n {\n let inputComponents = this.componentManager.get(inputOutput.inputComponentId);\n\n if(inputComponents && !Array.isArray(inputComponents))\n {\n inputComponents = [inputComponents];\n }\n\n if(!inputComponents || !Array.isArray(inputComponents))\n {\n this.logger?.warn('RelationsProcessor: Missing input components {@data}', inputOutput);\n\n continue;\n }\n\n transfers[inputOutput.inputComponentId] ??= new RelationsDataTransferInstructionImpl(inputComponents);\n\n //for each input component\n for(const inputComponent of inputComponents)\n {\n if(!outputComponent || !inputComponent)\n {\n continue;\n }\n\n const previousValue = (inputComponent as any)[inputOutput.inputName];\n const currentValue = (outputComponent as any)[inputOutput.outputName];\n\n transfers[inputOutput.inputComponentId].changes[inputOutput.inputName] =\n {\n previousValue,\n currentValue,\n firstChange: false,\n isFirstChange: () => false,\n };\n }\n }\n }\n\n if(!delayed)\n {\n //transfers data\n for(const key in transfers)\n {\n const transfer = transfers[key];\n\n transfer.applyChanges();\n }\n }\n }\n\n return delayed ? transfers : null;\n }\n\n /**\n * Transfers data for specified component using its inputs relations, all data are transfered in single change\n * @param id - Id of component whose inputs relations should be applied to transfer data\n * @param delayed - Indication whether delay data transfer and only generate instructions, if true returns transfer instructions\n */\n public transferInputsData(id: string, delayed: true): RelationsDataTransferInstruction\n public transferInputsData(id: string, delayed: false): null\n public transferInputsData(id: string, delayed: boolean = false): null|RelationsDataTransferInstruction\n {\n const backwardRelations = this.backwardRelations[id];\n const inputComponent = this.componentManager.get(id);\n\n if(!backwardRelations)\n {\n this.logger?.warn('RelationsProcessor: No backward relations for {@id}', {id});\n\n return delayed ? new RelationsDataTransferInstructionImpl([]) : null;\n }\n\n if(!inputComponent)\n {\n this.logger?.warn('RelationsProcessor: Missing input components for {@id}', {id});\n\n return delayed ? new RelationsDataTransferInstructionImpl([]) : null;\n }\n\n if(Array.isArray(inputComponent))\n {\n this.logger?.error('RelationsProcessor: Only one component must be available for id {@id}', {id});\n\n return delayed ? new RelationsDataTransferInstructionImpl([]) : null;\n }\n\n const transfer: RelationsDataTransferInstructionImpl = new RelationsDataTransferInstructionImpl([inputComponent]);\n\n //for each backward relation\n for(const backwardRelation of backwardRelations)\n {\n const outputComponent = this.componentManager.get(backwardRelation.outputComponentId);\n\n if((Array.isArray(outputComponent)))\n {\n this.logger?.error('RelationsProcessor: Only one output component must be available for id {@id}', {id});\n\n continue;\n }\n\n if(!outputComponent || !inputComponent)\n {\n continue;\n }\n\n const previousValue = (inputComponent as any)[backwardRelation.inputName];\n const currentValue = (outputComponent as any)[backwardRelation.outputName];\n\n transfer.changes[backwardRelation.inputName] =\n {\n previousValue,\n currentValue,\n firstChange: false,\n isFirstChange: () => false,\n };\n }\n\n if(!delayed)\n {\n transfer.applyChanges();\n }\n\n return delayed ? transfer : null;\n }\n\n //######################### protected methods #########################\n\n /**\n * Initialize relations from metadata\n */\n protected async initializeRelations(): Promise<void>\n {\n await this.destroyRelations();\n this.setInitializePromise();\n\n this.logger?.debug('RelationsProcessor: initializing relations');\n\n //empty relations\n if(!this.relationsManager.relations.length)\n {\n this.resolveInitialized();\n\n return;\n }\n\n for(const meta of this.relationsManager.relations)\n {\n const outputs: RelationsProcessorInputOutputData[] = [];\n\n //no outputs metadata\n if(!meta.outputs)\n {\n continue;\n }\n\n for(const output of meta.outputs)\n {\n //no inputs metadata\n if(!output.inputs)\n {\n continue;\n }\n\n for(const input of output.inputs)\n {\n const inputOutput: RelationsProcessorInputOutputData =\n {\n inputComponentId: input.id,\n outputComponentId: meta.id,\n inputName: input.inputName,\n outputName: output.outputName,\n initialized: {},\n };\n\n outputs.push(inputOutput);\n\n if(!this.backwardRelations[input.id])\n {\n this.backwardRelations[input.id] = [];\n }\n\n this.backwardRelations[input.id].push(inputOutput);\n }\n }\n\n //sets options for relations component\n await this.initComponent(meta, outputs);\n }\n\n this.relationsChangeDetector.initialize(this.relations);\n this.resolveInitialized();\n }\n\n /**\n * Initialize backward relations\n * @param inputOutput - Data for input and output\n */\n protected initBackwardRelation(inputOutput: RelationsProcessorInputOutputData): void\n {\n let outputComponents = this.componentManager.get(inputOutput.outputComponentId);\n let inputComponents = this.componentManager.get(inputOutput.inputComponentId);\n\n if((isBlank(outputComponents) || Array.isArray(outputComponents) && !outputComponents.length) ||\n (isBlank(inputComponents) || Array.isArray(inputComponents) && !inputComponents.length))\n {\n this.logger?.warn('RelationsProcessor: missing metadata for backward relations {@data}', inputOutput);\n\n return;\n }\n\n if(!Array.isArray(inputComponents))\n {\n inputComponents = [inputComponents];\n }\n\n if(!Array.isArray(outputComponents))\n {\n outputComponents = [outputComponents];\n }\n\n for(const inputCmp of inputComponents)\n {\n for(const outputCmp of outputComponents)\n {\n const id = `${inputCmp.ɵɵRelationsComponentId}-${outputCmp.ɵɵRelationsComponentId}`;\n\n //init data transfer only if not marked as skip init and was not initialized and was already at least once assigned\n if(!isSkipInit(outputCmp, inputOutput.outputName) && !inputOutput.initialized[id] && isAssigned(outputCmp, inputOutput.outputName))\n {\n inputOutput.initialized[id] = this.transferData(outputCmp, inputOutput.outputName, inputCmp, inputOutput.inputName, true);\n }\n }\n }\n }\n\n /**\n * Transfers data from source property to target property\n * @param source Instance of source object containing source property with data\n * @param sourceProperty Name of source property with data that are transfered\n * @param target Instance of target object containing target property for data\n * @param targetProperty Name of target property which will be filled with data\n * @param initial Indication whether is transfer of data initial, or on event\n */\n protected transferData(source: RelationsComponent, sourceProperty: string, target: RelationsComponent, targetProperty: string, initial: boolean): boolean\n {\n if(!source || !target)\n {\n return false;\n }\n\n const previousValue = (target as any)[targetProperty];\n const currentValue = (source as any)[sourceProperty];\n (target as any)[targetProperty] = (source as any)[sourceProperty];\n const changes: SimpleChanges = {};\n\n changes[targetProperty] =\n {\n previousValue,\n currentValue,\n firstChange: initial,\n isFirstChange: () => initial\n };\n\n target.ngOnChanges?.(changes);\n target.invalidateVisuals();\n\n return true;\n }\n\n /**\n * Initialize relation component\n * @param meta - Metadata for relations component\n * @param outputs - Array of outputs data for relations component\n */\n protected async initComponent(meta: RelationsComponentMetadata, outputs: RelationsProcessorInputOutputData[]): Promise<void>\n {\n const component = this.componentManager.get(meta.id);\n\n if(component)\n {\n this.initRelation(false, meta, outputs, null, null);\n this.updateRelations(meta.id);\n\n return;\n }\n\n const componentMeta = await this.loader.loadItem(meta);\n\n if(!componentMeta)\n {\n this.initRelation(false, meta, outputs, null, null);\n\n this.logger?.warn('RelationsProcessor: Unable to load relations component! {@meta}', {package: meta.package, name: meta.name});\n\n return;\n }\n\n if(!meta.scope)\n {\n const instance = new componentMeta.data(this.injector);\n this.componentManager.registerComponent(meta.id, instance);\n }\n\n this.initRelation(true, meta, outputs, meta.scope ?? null, meta.scope ? componentMeta.data : null);\n this.updateRelations(meta.id);\n }\n\n /**\n * Initialize relation for metadata and component\n * @param autoCreated - Indication whether was component auto created or not\n * @param meta - Metadata for relations component\n * @param inputOutputs - Array of outputs data for relations\n * @param scope - Current scope used for this relations component\n * @param componentType - Type used for creation of relations component (only for scoped ones)\n */\n protected initRelation(autoCreated: boolean, meta: RelationsComponentMetadata, inputOutputs: RelationsProcessorInputOutputData[], scope: string|null, componentType: RelationsComponentType|null): void\n {\n this.relations[meta.id] =\n {\n autoCreated,\n inputOutputs,\n metadataOptions: meta.relationsOptions,\n componentType,\n scope,\n };\n }\n\n /**\n * Initialize relations component options\n * @param components - Components which options should be initialized\n * @param meta - Metadata containing options for initialization\n */\n protected initOptions(components: RelationsProcessorComponent|RelationsProcessorComponent[], meta: RelationsProcessorComponentData): void\n {\n if(Array.isArray(components))\n {\n for(const comp of components)\n {\n if(!comp.ɵɵRelationsOptionsInitialized)\n {\n comp.relationsOptions = meta.metadataOptions;\n comp.ɵɵRelationsOptionsInitialized = true;\n }\n }\n }\n else\n {\n if(!components.ɵɵRelationsOptionsInitialized)\n {\n components.relationsOptions = meta.metadataOptions;\n components.ɵɵRelationsOptionsInitialized = true;\n }\n }\n }\n\n /**\n * Sets initialized promise\n */\n protected setInitializePromise(): void\n {\n this.ɵInitialized = new Promise(resolve => this.resolveInitialized = resolve);\n }\n\n /**\n * Destroys initialized relations\n */\n protected async destroyRelations(): Promise<void>\n {\n await this.ɵInitialized;\n\n Object.keys(this.relations).forEach(id => this.destroyComponent(id));\n\n this.relations = {};\n this.backwardRelations = {};\n }\n}"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@anglr/dynamic",
3
- "version": "1.0.0-beta.20230126082913",
3
+ "version": "1.0.0-beta.20230127123633",
4
4
  "description": "Contains code for generating dynamic content from metadata",
5
5
  "type": "module",
6
6
  "sideEffects": false,
@@ -22,4 +22,17 @@ export interface MarkForCheckId {
22
22
  */
23
23
  outputName: string;
24
24
  }
25
+ /**
26
+ * Information about change that is going to happen
27
+ */
28
+ export interface RelationsChange {
29
+ /**
30
+ * Id of component which inputs has changed
31
+ */
32
+ id: string;
33
+ /**
34
+ * Array of inputs that has changed
35
+ */
36
+ inputs: string[];
37
+ }
25
38
  //# sourceMappingURL=relationsChangeDetector.interface.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"relationsChangeDetector.interface.d.ts","sourceRoot":"","sources":["relationsChangeDetector.interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,eAAe,CAAC;AAEvC,OAAO,EAAC,kBAAkB,EAAC,MAAM,kBAAkB,CAAC;AAEpD;;GAEG;AACH,MAAM,WAAW,qBAAqB;IAElC;;OAEG;IACH,UAAU,CAAC,EAAE,QAAQ,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAE3B;;OAEG;IACH,WAAW,EAAE,MAAM,GAAC,kBAAkB,CAAC;IAEvC;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;CACtB"}
1
+ {"version":3,"file":"relationsChangeDetector.interface.d.ts","sourceRoot":"","sources":["relationsChangeDetector.interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,eAAe,CAAC;AAEvC,OAAO,EAAC,kBAAkB,EAAC,MAAM,kBAAkB,CAAC;AAEpD;;GAEG;AACH,MAAM,WAAW,qBAAqB;IAElC;;OAEG;IACH,UAAU,CAAC,EAAE,QAAQ,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAE3B;;OAEG;IACH,WAAW,EAAE,MAAM,GAAC,kBAAkB,CAAC;IAEvC;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAE5B;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX;;OAEG;IACH,MAAM,EAAE,MAAM,EAAE,CAAC;CACpB"}
@@ -2,9 +2,9 @@ import { Injector } from '@angular/core';
2
2
  import { Logger } from '@anglr/common';
3
3
  import { Dictionary } from '@jscrpt/common';
4
4
  import { RelationsComponentManager } from '../relationsComponentManager/relationsComponentManager.service';
5
- import { RelationsProcessorComponentData } from '../relationsProcessor/relationsProcessor.interface';
5
+ import { RelationsProcessorComponentData, RelationsProcessorInputOutputData } from '../relationsProcessor/relationsProcessor.interface';
6
6
  import { RelationsProcessor } from '../relationsProcessor/relationsProcessor.service';
7
- import { MarkForCheckId } from './relationsChangeDetector.interface';
7
+ import { MarkForCheckId, RelationsChange } from './relationsChangeDetector.interface';
8
8
  import { RelationsChangeDetectorOptions } from './relationsChangeDetector.options';
9
9
  import * as i0 from "@angular/core";
10
10
  /**
@@ -30,9 +30,9 @@ export declare class RelationsChangeDetector {
30
30
  */
31
31
  protected get relationsComponentManager(): RelationsComponentManager;
32
32
  /**
33
- * Objects storing components and theirs outputs and related input components
33
+ * Objects storing components and theirs outputs and related input components def
34
34
  */
35
- protected ɵoutputsComponents: Dictionary<Dictionary<string[]>>;
35
+ protected ɵoutputsComponents: Dictionary<Dictionary<RelationsProcessorInputOutputData[]>>;
36
36
  /**
37
37
  * Instance of parent relations change detector
38
38
  */
@@ -40,7 +40,7 @@ export declare class RelationsChangeDetector {
40
40
  /**
41
41
  * Objects storing components and theirs outputs and related input components
42
42
  */
43
- protected get outputsComponents(): Dictionary<Dictionary<string[]>>;
43
+ protected get outputsComponents(): Dictionary<Dictionary<RelationsProcessorInputOutputData[]>>;
44
44
  /**
45
45
  * Options for relations change detector
46
46
  */
@@ -52,11 +52,11 @@ export declare class RelationsChangeDetector {
52
52
  /**
53
53
  * Array of input component ids that should be checked in first run
54
54
  */
55
- protected firstRunIds: string[];
55
+ protected firstRunIds: RelationsChange[];
56
56
  /**
57
57
  * Array of input component ids that should be checked in second run
58
58
  */
59
- protected secondRunIds: string[];
59
+ protected secondRunIds: RelationsChange[];
60
60
  /**
61
61
  * Indication whether is check running
62
62
  */
@@ -1 +1 @@
1
- {"version":3,"file":"relationsChangeDetector.service.d.ts","sourceRoot":"","sources":["relationsChangeDetector.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,QAAQ,EAAW,MAAM,eAAe,CAAC;AAC7E,OAAO,EAAS,MAAM,EAAC,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAW,UAAU,EAA0B,MAAM,gBAAgB,CAAC;AAE7E,OAAO,EAAC,yBAAyB,EAAC,MAAM,gEAAgE,CAAC;AACzG,OAAO,EAAC,+BAA+B,EAAC,MAAM,oDAAoD,CAAC;AACnG,OAAO,EAAC,kBAAkB,EAAC,MAAM,kDAAkD,CAAC;AACpF,OAAO,EAAC,cAAc,EAAC,MAAM,qCAAqC,CAAC;AACnE,OAAO,EAAC,8BAA8B,EAAC,MAAM,mCAAmC,CAAC;;AAEjF;;GAEG;AACH,qBACa,uBAAuB;IA+EpB,SAAS,CAAC,QAAQ,EAAE,QAAQ;IACZ,SAAS,CAAC,MAAM,EAAE,MAAM;IA5EpD;;OAEG;IACH,SAAS,CAAC,mBAAmB,EAAE,kBAAkB,GAAC,SAAS,GAAC,IAAI,CAAC;IAEjE;;OAEG;IACH,SAAS,KAAK,kBAAkB,IAAI,kBAAkB,CAGrD;IAED;;OAEG;IACH,SAAS,CAAC,0BAA0B,EAAE,yBAAyB,GAAC,SAAS,GAAC,IAAI,CAAC;IAE/E;;OAEG;IACH,SAAS,KAAK,yBAAyB,IAAI,yBAAyB,CAGnE;IAED;;OAEG;IACH,SAAS,CAAC,kBAAkB,EAAE,UAAU,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAM;IAEpE;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,uBAAuB,GAAC,SAAS,GAAC,IAAI,CAAsE;IAE9H;;OAEG;IACH,SAAS,KAAK,iBAAiB,IAAI,UAAU,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAQlE;IAED;;OAEG;IACH,SAAS,CAAC,OAAO,EAAE,8BAA8B,CAAC;IAElD;;OAEG;IACH,SAAS,CAAC,OAAO,EAAE,MAAM,GAAC,SAAS,GAAC,IAAI,CAAC;IAEzC;;OAEG;IACH,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,CAAM;IAErC;;OAEG;IACH,SAAS,CAAC,YAAY,EAAE,MAAM,EAAE,CAAM;IAEtC;;OAEG;IACH,SAAS,CAAC,YAAY,EAAE,OAAO,CAAS;gBAGlB,QAAQ,EAAE,QAAQ,EACF,MAAM,EAAE,MAAM,EAC5B,OAAO,CAAC,EAAE,8BAA8B;IAYhE;;;OAGG;IACI,YAAY,CAAC,EAAE,EAAE,cAAc,GAAG,IAAI;IAgC7C;;;OAGG;IACI,UAAU,CAAC,SAAS,EAAE,UAAU,CAAC,+BAA+B,CAAC,GAAG,IAAI;IAyB/E;;OAEG;IAEH,SAAS,CAAC,QAAQ,IAAI,IAAI;yCAlKjB,uBAAuB;6CAAvB,uBAAuB;CAwLnC"}
1
+ {"version":3,"file":"relationsChangeDetector.service.d.ts","sourceRoot":"","sources":["relationsChangeDetector.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,QAAQ,EAAW,MAAM,eAAe,CAAC;AAC7E,OAAO,EAAS,MAAM,EAAC,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAW,UAAU,EAA0B,MAAM,gBAAgB,CAAC;AAE7E,OAAO,EAAC,yBAAyB,EAAC,MAAM,gEAAgE,CAAC;AACzG,OAAO,EAAC,+BAA+B,EAAE,iCAAiC,EAAC,MAAM,oDAAoD,CAAC;AACtI,OAAO,EAAC,kBAAkB,EAAC,MAAM,kDAAkD,CAAC;AACpF,OAAO,EAAC,cAAc,EAAE,eAAe,EAAC,MAAM,qCAAqC,CAAC;AACpF,OAAO,EAAC,8BAA8B,EAAC,MAAM,mCAAmC,CAAC;;AAEjF;;GAEG;AACH,qBACa,uBAAuB;IA+EpB,SAAS,CAAC,QAAQ,EAAE,QAAQ;IACZ,SAAS,CAAC,MAAM,EAAE,MAAM;IA5EpD;;OAEG;IACH,SAAS,CAAC,mBAAmB,EAAE,kBAAkB,GAAC,SAAS,GAAC,IAAI,CAAC;IAEjE;;OAEG;IACH,SAAS,KAAK,kBAAkB,IAAI,kBAAkB,CAGrD;IAED;;OAEG;IACH,SAAS,CAAC,0BAA0B,EAAE,yBAAyB,GAAC,SAAS,GAAC,IAAI,CAAC;IAE/E;;OAEG;IACH,SAAS,KAAK,yBAAyB,IAAI,yBAAyB,CAGnE;IAED;;OAEG;IACH,SAAS,CAAC,kBAAkB,EAAE,UAAU,CAAC,UAAU,CAAC,iCAAiC,EAAE,CAAC,CAAC,CAAM;IAE/F;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,uBAAuB,GAAC,SAAS,GAAC,IAAI,CAAsE;IAE9H;;OAEG;IACH,SAAS,KAAK,iBAAiB,IAAI,UAAU,CAAC,UAAU,CAAC,iCAAiC,EAAE,CAAC,CAAC,CAQ7F;IAED;;OAEG;IACH,SAAS,CAAC,OAAO,EAAE,8BAA8B,CAAC;IAElD;;OAEG;IACH,SAAS,CAAC,OAAO,EAAE,MAAM,GAAC,SAAS,GAAC,IAAI,CAAC;IAEzC;;OAEG;IACH,SAAS,CAAC,WAAW,EAAE,eAAe,EAAE,CAAM;IAE9C;;OAEG;IACH,SAAS,CAAC,YAAY,EAAE,eAAe,EAAE,CAAM;IAE/C;;OAEG;IACH,SAAS,CAAC,YAAY,EAAE,OAAO,CAAS;gBAGlB,QAAQ,EAAE,QAAQ,EACF,MAAM,EAAE,MAAM,EAC5B,OAAO,CAAC,EAAE,8BAA8B;IAYhE;;;OAGG;IACI,YAAY,CAAC,EAAE,EAAE,cAAc,GAAG,IAAI;IA8C7C;;;OAGG;IACI,UAAU,CAAC,SAAS,EAAE,UAAU,CAAC,+BAA+B,CAAC,GAAG,IAAI;IAyB/E;;OAEG;IAEH,SAAS,CAAC,QAAQ,IAAI,IAAI;yCAhLjB,uBAAuB;6CAAvB,uBAAuB;CAiNnC"}
@@ -1 +1 @@
1
- {"version":3,"file":"relationsProcessor.service.d.ts","sourceRoot":"","sources":["relationsProcessor.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"relationsProcessor.service.d.ts","sourceRoot":"","sources":["relationsProcessor.service.ts"],"names":[],"mappings":"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"}
package/version.bak CHANGED
@@ -1 +1 @@
1
- 1.0.0-beta.20230126082913
1
+ 1.0.0-beta.20230127123633