pict-section-form 1.0.169 → 1.0.170

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.
@@ -59,6 +59,7 @@ module.exports.default_configuration.pict_configuration = (
59
59
 
60
60
  "Solvers":
61
61
  [
62
+ 'runSolvers()'
62
63
  ],
63
64
  "MetaTemplates":
64
65
  [
@@ -124,7 +125,9 @@ module.exports.default_configuration.pict_configuration = (
124
125
  {
125
126
  TriggerGroupHash: "BookTriggerGroup",
126
127
  TriggerAddress: "AppData.CurrentAuthor.Name",
127
- MarshalEmptyValues: true
128
+ MarshalEmptyValues: true,
129
+ PreSolvers: [ 'NumBooks = getvalue("AppData.BookAuthorJoins.length")' ],
130
+ PostSolvers: [ 'runSolvers()' ],
128
131
  }
129
132
  }
130
133
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pict-section-form",
3
- "version": "1.0.169",
3
+ "version": "1.0.170",
4
4
  "description": "Pict dynamic form sections",
5
5
  "main": "source/Pict-Section-Form.js",
6
6
  "directories": {
@@ -34,7 +34,7 @@
34
34
  "browser-env": "^3.3.0",
35
35
  "eslint": "^9.39.1",
36
36
  "jquery": "^3.7.1",
37
- "pict": "^1.0.342",
37
+ "pict": "^1.0.343",
38
38
  "pict-application": "^1.0.29",
39
39
  "pict-service-commandlineutility": "^1.0.16",
40
40
  "quackage": "^1.0.45",
@@ -72,6 +72,11 @@ class PictDynamicFormsSolverBehaviors extends libPictProvider
72
72
  });
73
73
  }
74
74
 
75
+ runSolvers()
76
+ {
77
+ return this.pict.providers.DynamicSolver.solveViews(undefined, true);
78
+ }
79
+
75
80
  injectBehaviors(pExpressionParser)
76
81
  {
77
82
  // Wire up the solver functions.
@@ -92,6 +97,7 @@ class PictDynamicFormsSolverBehaviors extends libPictProvider
92
97
  this.addSolverFunction(pExpressionParser, 'disablesolverordinall', 'fable.providers.DynamicFormSolverBehaviors.disableSolverOrdinal', 'Disables a solver ordinal so that it will not run.');
93
98
 
94
99
  this.addSolverFunction(pExpressionParser, 'settabularrowlength', 'fable.providers.DynamicFormSolverBehaviors.setTabularRowLength', 'Sets the length of a tabular data set.');
100
+ this.addSolverFunction(pExpressionParser, 'runsolvers', 'fable.providers.DynamicFormSolverBehaviors.runSolvers', 'Solves all views.');
95
101
 
96
102
  return false;
97
103
  }
@@ -57,6 +57,8 @@ class PictDynamicSolver extends libPictProvider
57
57
  /** @type {string} */
58
58
  this.Hash;
59
59
 
60
+ this._RunSolversRegex = /\brunsolvers\b/gi;
61
+
60
62
  // Initialize the solver service if it isn't up
61
63
  this.fable.instantiateServiceProviderIfNotExists('ExpressionParser');
62
64
 
@@ -254,6 +256,119 @@ class PictDynamicSolver extends libPictProvider
254
256
  return tmpSolver;
255
257
  }
256
258
 
259
+ /** @typedef {{ Ordinal: number, Expression: string } | string} Solver */
260
+
261
+ /**
262
+ * Execute a set of adhoc solvers.
263
+ *
264
+ * @param {import('../views/Pict-View-DynamicForm.js')} pView - The dynamic view to execute the solvers against.
265
+ * @param {Array<Solver>} pSolvers - An array of solvers to execute.
266
+ * @param {string} pReason - The reason for executing the solvers.
267
+ */
268
+ executeSolvers(pView, pSolvers, pReason)
269
+ {
270
+ const tmpSolvers = Array.isArray(pSolvers) ? pSolvers : [];
271
+ let tmpSolveOutcome = {};
272
+ tmpSolveOutcome.SolverResultsMap = {};
273
+ tmpSolveOutcome.StartTimeStamp = +new Date();
274
+
275
+ let tmpOrdinalsToSolve = {};
276
+ tmpSolveOutcome.SolveOrdinals = tmpOrdinalsToSolve;
277
+ for (let i = 0; i < tmpSolvers.length; i++)
278
+ {
279
+ const tmpSolver = this.checkSolver(tmpSolvers[i]);
280
+ if (tmpSolver)
281
+ {
282
+ let tmpOrdinalContainer = this.checkAutoSolveOrdinal(tmpSolver.Ordinal, tmpOrdinalsToSolve);
283
+ tmpOrdinalContainer.AdhocSolvers.push(tmpSolver);
284
+ }
285
+ }
286
+
287
+ // Now sort the ordinal container keys
288
+ let tmpOrdinalKeys = Object.keys(tmpOrdinalsToSolve);
289
+ tmpOrdinalKeys.sort((a, b) =>
290
+ {
291
+ if (isNaN(Number(a)) || isNaN(Number(b)))
292
+ {
293
+ return a.localeCompare(b);
294
+ }
295
+ return Number(a) - Number(b);
296
+ });
297
+
298
+ // Now enumerate the keys and solve each layer of the solution set
299
+ for (let i = 0; i < tmpOrdinalKeys.length; i++)
300
+ {
301
+ if (this.pict.LogNoisiness > 1)
302
+ {
303
+ this.log.trace(`DynamicSolver [${this.UUID}]::[${this.Hash}] [${pReason}] Solving ordinal ${tmpOrdinalKeys[i]}`);
304
+ }
305
+ let tmpOrdinalContainer = tmpOrdinalsToSolve[tmpOrdinalKeys[i]];
306
+ let tmpExecuteOrdinal = this.pict.providers.DynamicFormSolverBehaviors.checkSolverOrdinalEnabled(tmpOrdinalKeys[i]);
307
+ if (tmpExecuteOrdinal)
308
+ {
309
+ this.executeAdhocSolvers(pView, tmpOrdinalContainer.AdhocSolvers, pReason, Number(tmpOrdinalKeys[i]), tmpSolveOutcome.SolverResultsMap);
310
+ }
311
+ }
312
+
313
+ tmpSolveOutcome.EndTimeStamp = +new Date();
314
+
315
+ // It's up to the developer to decide if they want to use this information somewhere.
316
+ this.lastAdhocSolveOutcome = tmpSolveOutcome;
317
+ }
318
+
319
+ /**
320
+ * Runs each Adhoc solver formulae for a dynamic view group at a given ordinal.
321
+ *
322
+ * Or for all ordinals if no ordinal is passed.
323
+ *
324
+ * @param {import('../views/Pict-View-DynamicForm.js')} pView - The dynamic view to execute the solvers against.
325
+ * @param {Array<string>} pAdhocSolverArray - An array of Solvers from the groups to solve.
326
+ * @param {string} pReason - The reason for executing the solvers.
327
+ * @param {number} pOrdinal - The ordinal value to filter to. Optional.
328
+ * @param {Object} pSolverResultsMap - The solver results map.
329
+ * @param {boolean} [pPreventSolverCycles=false] - Whether to prevent solver cycles.
330
+ */
331
+ executeAdhocSolvers(pView, pAdhocSolverArray, pReason, pOrdinal, pSolverResultsMap, pPreventSolverCycles = false)
332
+ {
333
+ let tmpFiltered = (typeof(pOrdinal) === 'undefined') ? false : true;
334
+ let tmpSolverReultsMap = this.prepareSolverResultsMap(pSolverResultsMap);
335
+
336
+ for (let i = 0; i < pAdhocSolverArray.length; i++)
337
+ {
338
+ let tmpSolver = this.checkSolver(pAdhocSolverArray[i], tmpFiltered, pOrdinal);
339
+ if (typeof(tmpSolver) === 'undefined')
340
+ {
341
+ continue;
342
+ }
343
+
344
+ if (pPreventSolverCycles && tmpSolver.Expression.match(this._RunSolversRegex))
345
+ {
346
+ if (this.pict.LogNoisiness > 0)
347
+ {
348
+ pView.log.warn(`Dynamic View [${pView.UUID}]::[${pView.Hash}] [${pReason}] skipping RecordSet ordinal ${tmpSolver.Ordinal} [${tmpSolver.Expression}] due to solver cycle prevention.`);
349
+ }
350
+ continue;
351
+ }
352
+
353
+ tmpSolver.StartTimeStamp = +new Date();
354
+ tmpSolver.Hash = `AdhocSolver-${i}`;
355
+
356
+ // TODO: Precompile the solvers (it's super easy)
357
+ if (this.pict.LogNoisiness > 1)
358
+ {
359
+ this.pict.log.trace(`Dynamic View [${pView.UUID}]::[${pView.Hash}] [${pReason}] solving equation ${i} ordinal ${tmpSolver.Ordinal} [${pView.options.Solvers[i]}]`);
360
+ }
361
+ tmpSolver.ResultsObject = {};
362
+ let tmpSolutionValue = this.fable.ExpressionParser.solve(tmpSolver.Expression, pView.getMarshalDestinationObject(), tmpSolver.ResultsObject, this.pict.manifest, pView.getMarshalDestinationObject());
363
+ if (this.pict.LogNoisiness > 1)
364
+ {
365
+ this.pict.log.trace(`[${tmpSolver.Expression}] [${pReason}] result was ${tmpSolutionValue}`);
366
+ }
367
+ tmpSolverReultsMap.ExecutedSolvers.push(tmpSolver);
368
+ tmpSolver.EndTimeStamp = +new Date();
369
+ }
370
+ }
371
+
257
372
  /**
258
373
  * Runs each RecordSet solver formulae for a dynamic view group at a given ordinal.
259
374
  *
@@ -262,8 +377,9 @@ class PictDynamicSolver extends libPictProvider
262
377
  * @param {array} pGroupSolverArray - An array of Solvers from the groups to solve.
263
378
  * @param {number} pOrdinal - The ordinal value to filter to. Optional.
264
379
  * @param {Object} pSolverResultsMap - The solver results map.
380
+ * @param {boolean} [pPreventSolverCycles=false] - Whether to prevent solver cycles.
265
381
  */
266
- executeGroupSolvers(pGroupSolverArray, pOrdinal, pSolverResultsMap)
382
+ executeGroupSolvers(pGroupSolverArray, pOrdinal, pSolverResultsMap, pPreventSolverCycles = false)
267
383
  {
268
384
  // This is purely for readability of the code below ... uglify optimizes it out.
269
385
  let tmpFiltered = (typeof(pOrdinal) === 'undefined') ? false : true;
@@ -280,6 +396,15 @@ class PictDynamicSolver extends libPictProvider
280
396
  continue;
281
397
  }
282
398
 
399
+ if (pPreventSolverCycles && tmpSolver.Expression.match(this._RunSolversRegex))
400
+ {
401
+ if (this.pict.LogNoisiness > 0)
402
+ {
403
+ tmpView.log.warn(`Dynamic View [${tmpView.UUID}]::[${tmpView.Hash}] skipping RecordSet ordinal ${tmpSolver.Ordinal} [${tmpSolver.Expression}] due to solver cycle prevention.`);
404
+ }
405
+ continue;
406
+ }
407
+
283
408
  tmpSolver.StartTimeStamp = Date.now();
284
409
  tmpSolver.Hash = `${pGroupSolverArray[j].ViewHash}-GroupSolver-${j}`;
285
410
 
@@ -328,8 +453,9 @@ class PictDynamicSolver extends libPictProvider
328
453
  * @param {Array} pViewSectionSolverArray - The array of view section solvers.
329
454
  * @param {number} pOrdinal - The ordinal value.
330
455
  * @param {Object} pSolverResultsMap - The solver results map.
456
+ * @param {boolean} [pPreventSolverCycles=false] - Whether to prevent solver cycles.
331
457
  */
332
- executeSectionSolvers(pViewSectionSolverArray, pOrdinal, pSolverResultsMap)
458
+ executeSectionSolvers(pViewSectionSolverArray, pOrdinal, pSolverResultsMap, pPreventSolverCycles = false)
333
459
  {
334
460
  let tmpFiltered = (typeof(pOrdinal) === 'undefined') ? false : true;
335
461
  let tmpSolverReultsMap = this.prepareSolverResultsMap(pSolverResultsMap);
@@ -343,6 +469,15 @@ class PictDynamicSolver extends libPictProvider
343
469
  continue;
344
470
  }
345
471
 
472
+ if (pPreventSolverCycles && tmpSolver.Expression.match(this._RunSolversRegex))
473
+ {
474
+ if (this.pict.LogNoisiness > 0)
475
+ {
476
+ tmpView.log.warn(`Dynamic View [${tmpView.UUID}]::[${tmpView.Hash}] skipping RecordSet ordinal ${tmpSolver.Ordinal} [${tmpSolver.Expression}] due to solver cycle prevention.`);
477
+ }
478
+ continue;
479
+ }
480
+
346
481
  tmpSolver.StartTimeStamp = +new Date();
347
482
  tmpSolver.Hash = `${pViewSectionSolverArray[i].ViewHash}-SectionSolver-${i}`;
348
483
 
@@ -408,7 +543,7 @@ class PictDynamicSolver extends libPictProvider
408
543
  {
409
544
  if (!(pOrdinal.toString() in pOrdinalSet))
410
545
  {
411
- pOrdinalSet[pOrdinal.toString()] = { ViewSolvers:[], SectionSolvers:[], GroupSolvers:[] };
546
+ pOrdinalSet[pOrdinal.toString()] = { ViewSolvers:[], SectionSolvers:[], GroupSolvers:[], AdhocSolvers:[] };
412
547
  }
413
548
  return pOrdinalSet[pOrdinal];
414
549
  }
@@ -434,11 +569,14 @@ class PictDynamicSolver extends libPictProvider
434
569
  * leaves on the tree.
435
570
 
436
571
  * @param {Array|string[]} [pViewHashes] - An optional array of view hashes to solve. If not provided, all views in the fable will be solved.
572
+ * @param {boolean} [pPreventSolverCycles] - An optional context string for the solve operation.
573
+ * TODO: make sure you can't cycle with the same solve context - new solver method to invoke this
437
574
  */
438
- solveViews(pViewHashes)
575
+ solveViews(pViewHashes, pPreventSolverCycles)
439
576
  {
440
577
  //this.log.trace(`Dynamic View Provider [${this.UUID}]::[${this.Hash}] solving views.`);
441
578
  let tmpViewHashes = Array.isArray(pViewHashes) ? pViewHashes : Object.keys(this.fable.views);
579
+ const tmpPreventSolverCycles = pPreventSolverCycles === true;
442
580
 
443
581
  let tmpSolveOutcome = {};
444
582
  tmpSolveOutcome.SolverResultsMap = {};
@@ -513,8 +651,8 @@ class PictDynamicSolver extends libPictProvider
513
651
  let tmpExecuteOrdinal = this.pict.providers.DynamicFormSolverBehaviors.checkSolverOrdinalEnabled(tmpOrdinalKeys[i]);
514
652
  if (tmpExecuteOrdinal)
515
653
  {
516
- this.executeGroupSolvers(tmpOrdinalContainer.GroupSolvers, Number(tmpOrdinalKeys[i]), tmpSolveOutcome.SolverResultsMap);
517
- this.executeSectionSolvers(tmpOrdinalContainer.SectionSolvers, Number(tmpOrdinalKeys[i]), tmpSolveOutcome.SolverResultsMap);
654
+ this.executeGroupSolvers(tmpOrdinalContainer.GroupSolvers, Number(tmpOrdinalKeys[i]), tmpSolveOutcome.SolverResultsMap, tmpPreventSolverCycles);
655
+ this.executeSectionSolvers(tmpOrdinalContainer.SectionSolvers, Number(tmpOrdinalKeys[i]), tmpSolveOutcome.SolverResultsMap, tmpPreventSolverCycles);
518
656
  this.executeViewSolvers(tmpOrdinalContainer.ViewSolvers, Number(tmpOrdinalKeys[i]), tmpSolveOutcome.SolverResultsMap);
519
657
  }
520
658
  }
@@ -131,6 +131,17 @@ class CustomInputHandler extends libPictSectionInputExtension
131
131
  const tmpGroupConfig = tmpTriggerGroupConfigurations[i];
132
132
  if (tmpGroupConfig.TriggerAllInputs)
133
133
  {
134
+ if (Array.isArray(tmpGroupConfig.PreSolvers))
135
+ {
136
+ this.pict.providers.DynamicSolver.executeSolvers(pView, tmpGroupConfig.PreSolvers, `AutofillTriggerGroup hash ${tmpGroupConfig.TriggerGroupHash} pre-trigger`);
137
+ }
138
+ pView.registerOnTransactionCompleteCallback(pTransactionGUID, () =>
139
+ {
140
+ if (Array.isArray(tmpGroupConfig.PostSolvers))
141
+ {
142
+ this.pict.providers.DynamicSolver.executeSolvers(pView, tmpGroupConfig.PostSolvers, `AutofillTriggerGroup hash ${tmpGroupConfig.TriggerGroupHash} post-trigger`);
143
+ }
144
+ });
134
145
  this.pict.views.PictFormMetacontroller.triggerGlobalInputEvent(
135
146
  `TriggerGroup:${tmpGroupConfig.TriggerGroupHash}:DataChange:${pInput.Hash || pInput.DataAddress}:${this.pict.getUUID()}`,
136
147
  pTransactionGUID);
@@ -161,6 +172,17 @@ class CustomInputHandler extends libPictSectionInputExtension
161
172
  const tmpGroupConfig = tmpTriggerGroupConfigurations[i];
162
173
  if (tmpGroupConfig.TriggerAllInputs)
163
174
  {
175
+ if (Array.isArray(tmpGroupConfig.PreSolvers))
176
+ {
177
+ this.pict.providers.DynamicSolver.executeSolvers(pView, tmpGroupConfig.PreSolvers, `AutofillTriggerGroup hash ${tmpGroupConfig.TriggerGroupHash} tabular pre-trigger`);
178
+ }
179
+ pView.registerOnTransactionCompleteCallback(pTransactionGUID, () =>
180
+ {
181
+ if (Array.isArray(tmpGroupConfig.PostSolvers))
182
+ {
183
+ this.pict.providers.DynamicSolver.executeSolvers(pView, tmpGroupConfig.PostSolvers, `AutofillTriggerGroup hash ${tmpGroupConfig.TriggerGroupHash} tabular post-trigger`);
184
+ }
185
+ });
164
186
  this.pict.views.PictFormMetacontroller.triggerGlobalInputEvent(
165
187
  `TriggerGroup:${tmpGroupConfig.TriggerGroupHash}:DataChange:${pInput.Hash || pInput.DataAddress}:${this.pict.getUUID()}`,
166
188
  pTransactionGUID);
@@ -207,6 +229,11 @@ class CustomInputHandler extends libPictSectionInputExtension
207
229
  continue;
208
230
  }
209
231
 
232
+ if (Array.isArray(tmpAutoFillTriggerGroup.PreSolvers))
233
+ {
234
+ this.pict.providers.DynamicSolver.executeSolvers(pView, tmpAutoFillTriggerGroup.PreSolvers, `AutofillTriggerGroup hash ${tmpAutoFillTriggerGroup.TriggerGroupHash} pre-autofill`);
235
+ }
236
+
210
237
  //FIXME: why is this check here? revisit
211
238
  if ('TriggerAddress' in tmpAutoFillTriggerGroup)
212
239
  {
@@ -223,6 +250,11 @@ class CustomInputHandler extends libPictSectionInputExtension
223
250
  this.pict.providers['Pict-Input-Select'].refreshSelectList(tmpInputView, tmpInputView.getGroup(pInput.PictForm.GroupIndex), tmpInputView.getRow(pInput.PictForm.GroupIndex, pInput.PictForm.Row), pInput, pValue, pHTMLSelector);
224
251
  tmpInputView.manualMarshalDataToViewByInput(pInput, tmpEventGUID);
225
252
  }
253
+
254
+ if (Array.isArray(tmpAutoFillTriggerGroup.PostSolvers))
255
+ {
256
+ this.pict.providers.DynamicSolver.executeSolvers(pView, tmpAutoFillTriggerGroup.PostSolvers, `AutofillTriggerGroup hash ${tmpAutoFillTriggerGroup.TriggerGroupHash} post-autofill`);
257
+ }
226
258
  }
227
259
 
228
260
  return super.onAfterEventCompletion(pView, pInput, pValue, pHTMLSelector, pEvent, pTransactionGUID);
@@ -175,6 +175,7 @@ class CustomInputHandler extends libPictSectionInputExtension
175
175
  */
176
176
  onDataMarshalToForm(pView, pGroup, pRow, pInput, pValue, pHTMLSelector, pTransactionGUID)
177
177
  {
178
+ //FIXME: this should use a trigger group + event
178
179
  this.assignDisplayEntityData(this.getContentDisplayHTMLID(pInput.Macro.RawHTMLID), pInput, pValue);
179
180
  return super.onDataMarshalToForm(pView, pGroup, pRow, pInput, pValue, pHTMLSelector, pTransactionGUID);
180
181
  }
@@ -193,6 +194,7 @@ class CustomInputHandler extends libPictSectionInputExtension
193
194
  */
194
195
  onDataMarshalToFormTabular(pView, pGroup, pInput, pValue, pHTMLSelector, pRowIndex, pTransactionGUID)
195
196
  {
197
+ //FIXME: this should use a trigger group + event
196
198
  this.assignDisplayEntityData(this.getTabularContentDisplayInputID(pInput.Macro.RawHTMLID, pRowIndex), pInput, pValue);
197
199
  return super.onDataMarshalToFormTabular(pView, pGroup, pInput, pValue, pHTMLSelector, pRowIndex, pTransactionGUID);
198
200
  }
@@ -932,6 +932,110 @@ class ManifestFactory extends libFableServiceProviderBase
932
932
  // This is meant to be overloaded by the parent class
933
933
  }
934
934
 
935
+ migrateAutofillTriggerGroupSolvers(pManifests)
936
+ {
937
+ for (const tmpManifestFactory of Object.values(pManifests))
938
+ {
939
+ const tmpManifest = tmpManifestFactory.manifest;
940
+
941
+ const tmpGatheredSolverExpressions = [];
942
+
943
+ for (const tmpSection of tmpManifest.Sections || [])
944
+ {
945
+ if (Array.isArray(tmpSection.Solvers))
946
+ {
947
+ for (let i = 0; i < tmpSection.Solvers.length; i++)
948
+ {
949
+ const tmpSolverEntry = tmpSection.Solvers[i];
950
+ const tmpSolverExpression = (typeof (tmpSolverEntry) === 'string') ? tmpSolverEntry : tmpSolverEntry.Expression;
951
+ if (typeof tmpSolverExpression === 'string' && tmpSolverExpression.startsWith('TriggerGroup:'))
952
+ {
953
+ tmpGatheredSolverExpressions.push(tmpSolverEntry);
954
+ // Remove it from the section solvers
955
+ tmpSection.Solvers.splice(i, 1);
956
+ --i;
957
+ }
958
+ }
959
+ }
960
+ for (const tmpGroup of tmpSection.Groups || [])
961
+ {
962
+ if (Array.isArray(tmpGroup.RecordSetSolvers))
963
+ {
964
+ for (let i = 0; i < tmpGroup.RecordSetSolvers.length; i++)
965
+ {
966
+ const tmpSolverEntry = tmpGroup.RecordSetSolvers[i];
967
+ const tmpSolverExpression = (typeof (tmpSolverEntry) === 'string') ? tmpSolverEntry : tmpSolverEntry.Expression;
968
+ if (typeof tmpSolverExpression === 'string' && tmpSolverExpression.startsWith('TriggerGroup:'))
969
+ {
970
+ tmpGatheredSolverExpressions.push(tmpSolverEntry);
971
+ // Remove it from the group solvers
972
+ tmpGroup.RecordSetSolvers.splice(i, 1);
973
+ --i;
974
+ }
975
+ }
976
+ }
977
+ }
978
+ }
979
+ for (const tmpTriggerGroupSolverEntry of tmpGatheredSolverExpressions)
980
+ {
981
+ const tmpSolverExpression = (typeof (tmpTriggerGroupSolverEntry) === 'string') ? tmpTriggerGroupSolverEntry : tmpTriggerGroupSolverEntry.Expression;
982
+ let [ tmpType, tmpTriggerGroupHash, tmpPrePost, tmpSimpleSolverExpression ] = tmpSolverExpression.split(':');
983
+ if (!tmpSimpleSolverExpression)
984
+ {
985
+ tmpSimpleSolverExpression = tmpPrePost;
986
+ tmpPrePost = 'post';
987
+ }
988
+
989
+ if (!tmpSimpleSolverExpression || tmpSimpleSolverExpression.trim() === '')
990
+ {
991
+ this.log.error(`Skipping migration of empty TriggerGroup solver expression in manifest [${tmpManifest.Scope}] for TriggerGroup [${tmpTriggerGroupHash}]`);
992
+ continue;
993
+ }
994
+ const tmpTriggerGroupDescriptor = Object.values(tmpManifest.Descriptors).find((pDescriptor) =>
995
+ {
996
+ if (!pDescriptor.PictForm?.AutofillTriggerGroup)
997
+ {
998
+ return false;
999
+ }
1000
+ /** @type {Array<any>} */
1001
+ const tmpTriggerGroups = Array.isArray(pDescriptor.PictForm.AutofillTriggerGroup) ? pDescriptor.PictForm.AutofillTriggerGroup : [pDescriptor.PictForm.AutofillTriggerGroup];
1002
+ return tmpTriggerGroups.some((pTriggerGroup) => pTriggerGroup.TriggerGroupHash === tmpTriggerGroupHash);
1003
+ });
1004
+ if (!tmpTriggerGroupDescriptor)
1005
+ {
1006
+ this.log.error(`Could not find descriptor for TriggerGroup [${tmpTriggerGroupHash}] in manifest [${tmpManifest.Scope}] while migrating solver expression: ${tmpSolverExpression}`);
1007
+ continue;
1008
+ }
1009
+ const tmpTriggerGroups = Array.isArray(tmpTriggerGroupDescriptor.PictForm.AutofillTriggerGroup) ? tmpTriggerGroupDescriptor.PictForm.AutofillTriggerGroup : [tmpTriggerGroupDescriptor.PictForm.AutofillTriggerGroup];
1010
+ const tmpTriggerGroup = tmpTriggerGroups.find((pTriggerGroup) => pTriggerGroup.TriggerGroupHash === tmpTriggerGroupHash);
1011
+ if (!tmpTriggerGroup)
1012
+ {
1013
+ this.log.error(`Could not find TriggerGroup entry for TriggerGroup [${tmpTriggerGroupHash}] in descriptor [${tmpTriggerGroupDescriptor.Hash}] while migrating solver expression: ${tmpSolverExpression}`);
1014
+ continue;
1015
+ }
1016
+ let tmpUpdatedTriggerGroupSolverEntry = tmpTriggerGroupSolverEntry;
1017
+ if (typeof tmpTriggerGroupSolverEntry === 'string')
1018
+ {
1019
+ tmpUpdatedTriggerGroupSolverEntry = tmpSimpleSolverExpression;
1020
+ }
1021
+ else
1022
+ {
1023
+ tmpTriggerGroupSolverEntry.Expression = tmpSimpleSolverExpression;
1024
+ }
1025
+ if (tmpPrePost.toLowerCase() === 'pre')
1026
+ {
1027
+ tmpTriggerGroup.PreSolvers = tmpTriggerGroup.PreSolvers || [];
1028
+ tmpTriggerGroup.PreSolvers.push(tmpUpdatedTriggerGroupSolverEntry);
1029
+ }
1030
+ else
1031
+ {
1032
+ tmpTriggerGroup.PostSolvers = tmpTriggerGroup.PostSolvers || [];
1033
+ tmpTriggerGroup.PostSolvers.push(tmpUpdatedTriggerGroupSolverEntry);
1034
+ }
1035
+ }
1036
+ }
1037
+ }
1038
+
935
1039
  /**
936
1040
  * Create some manifests with a "factory" pattern.
937
1041
  *
@@ -983,6 +1087,7 @@ class ManifestFactory extends libFableServiceProviderBase
983
1087
  this.tabularRowAddDescriptor(tmpManifest, tmpRecord);
984
1088
  }
985
1089
  }
1090
+ this.migrateAutofillTriggerGroupSolvers(tmpManifests);
986
1091
 
987
1092
  this.log.info(`Generated ${Object.keys(tmpManifests).length} manifests.`);
988
1093
 
@@ -20,6 +20,7 @@ declare class PictDynamicFormsSolverBehaviors extends libPictProvider {
20
20
  setCSSSnippets(pCSSHideClass: any, pCSSSnippet: any): void;
21
21
  cssHideClass: any;
22
22
  addSolverFunction(pExpressionParser: any, pFunctionName: any, pFunctionAddress: any, pFunctionComment: any): void;
23
+ runSolvers(): any;
23
24
  injectBehaviors(pExpressionParser: any): boolean;
24
25
  /**
25
26
  * @param {number|string} pSolverOrdinal
@@ -1 +1 @@
1
- {"version":3,"file":"Pict-Provider-DynamicFormSolverBehaviors.d.ts","sourceRoot":"","sources":["../../../source/providers/Pict-Provider-DynamicFormSolverBehaviors.js"],"names":[],"mappings":";AAaA;;;;;GAKG;AACH;IAeE,kBAAkB;IAClB,SADW,GAAG,CACF;IACZ,qFAAqF;IACrF,MADW,OAAO,MAAM,CAAC,GAAG;QAAE,WAAW,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,OAAO,UAAU,CAAC,CAAA;KAAE,CACxE;IAIT,qBAAqB;IACrB,qBADW,MAAM,CAC4C;IAC7D,0BAAyD;IACzD,mBAA2H;IAE3H,qBAA0B;IAK3B,2DAMC;IAJA,kBAAsD;IAMvD,kHAaC;IAED,iDAsBC;IAED;;;OAGG;IACH,wCAHW,MAAM,GAAC,MAAM,YACb,OAAO,GAAC,MAAM,GAAC,MAAM,QAK/B;IAED;;OAEG;IACH,oCAFW,MAAM,GAAC,MAAM,QAKvB;IAED;;OAEG;IACH,qCAFW,MAAM,GAAC,MAAM,QAKvB;IAED;;;;OAIG;IACH,yCAJW,MAAM,GAAC,MAAM,GAEZ,OAAO,CAMlB;IAED,gDAGC;IAED,gEAUC;IAGD,wCAiBC;IAED,wCAiBC;IAED,+DAGC;IAED,+EAUC;IAED,uDAiBC;IAED,uDAiBC;IAED;;;;;;;OAOG;IACH,kCANW,MAAM,cACN,MAAM,WACN,MAAM,GAAC,MAAM,qBACb,OAAO,GAAC,MAAM,WAoDxB;IAGD,iEAqBC;IAED,mFA2BC;IAED,kGA0BC;IAED;;;;;;;;OAQG;IACH,mCAPW,MAAM,cACN,MAAM,UACN,MAAM,gBACN,MAAM,iBACN,MAAM,GACJ,OAAO,CAmCnB;IAED;;;;;;;;;;;OAWG;IACH,0CAVW,MAAM,cACN,MAAM,cAEN,MAAM,aADN,MAAM,UAEN,MAAM,gBACN,MAAM,iBACN,MAAM,qBACN,MAAM,GACJ,OAAO,CA0CnB;IAED;;;;;;OAMG;IACH,oCANW,KAAK,CAAC,WAAW,CAAC,UAClB,MAAM,iBACN,MAAM,GAEJ,OAAO,CA2BnB;IAED,+BAWC;CACD;;;;;AA9gBD,kCAAkC;AAClC,6CADW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAQ3B"}
1
+ {"version":3,"file":"Pict-Provider-DynamicFormSolverBehaviors.d.ts","sourceRoot":"","sources":["../../../source/providers/Pict-Provider-DynamicFormSolverBehaviors.js"],"names":[],"mappings":";AAaA;;;;;GAKG;AACH;IAeE,kBAAkB;IAClB,SADW,GAAG,CACF;IACZ,qFAAqF;IACrF,MADW,OAAO,MAAM,CAAC,GAAG;QAAE,WAAW,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,OAAO,UAAU,CAAC,CAAA;KAAE,CACxE;IAIT,qBAAqB;IACrB,qBADW,MAAM,CAC4C;IAC7D,0BAAyD;IACzD,mBAA2H;IAE3H,qBAA0B;IAK3B,2DAMC;IAJA,kBAAsD;IAMvD,kHAaC;IAED,kBAGC;IAED,iDAuBC;IAED;;;OAGG;IACH,wCAHW,MAAM,GAAC,MAAM,YACb,OAAO,GAAC,MAAM,GAAC,MAAM,QAK/B;IAED;;OAEG;IACH,oCAFW,MAAM,GAAC,MAAM,QAKvB;IAED;;OAEG;IACH,qCAFW,MAAM,GAAC,MAAM,QAKvB;IAED;;;;OAIG;IACH,yCAJW,MAAM,GAAC,MAAM,GAEZ,OAAO,CAMlB;IAED,gDAGC;IAED,gEAUC;IAGD,wCAiBC;IAED,wCAiBC;IAED,+DAGC;IAED,+EAUC;IAED,uDAiBC;IAED,uDAiBC;IAED;;;;;;;OAOG;IACH,kCANW,MAAM,cACN,MAAM,WACN,MAAM,GAAC,MAAM,qBACb,OAAO,GAAC,MAAM,WAoDxB;IAGD,iEAqBC;IAED,mFA2BC;IAED,kGA0BC;IAED;;;;;;;;OAQG;IACH,mCAPW,MAAM,cACN,MAAM,UACN,MAAM,gBACN,MAAM,iBACN,MAAM,GACJ,OAAO,CAmCnB;IAED;;;;;;;;;;;OAWG;IACH,0CAVW,MAAM,cACN,MAAM,cAEN,MAAM,aADN,MAAM,UAEN,MAAM,gBACN,MAAM,iBACN,MAAM,qBACN,MAAM,GACJ,OAAO,CA0CnB;IAED;;;;;;OAMG;IACH,oCANW,KAAK,CAAC,WAAW,CAAC,UAClB,MAAM,iBACN,MAAM,GAEJ,OAAO,CA2BnB;IAED,+BAWC;CACD;;;;;AAphBD,kCAAkC;AAClC,6CADW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAQ3B"}
@@ -10,6 +10,7 @@ declare class PictDynamicSolver extends libPictProvider {
10
10
  instantiateServiceProviderIfNotExists: (hash: string) => any;
11
11
  ExpressionParser: any;
12
12
  };
13
+ _RunSolversRegex: RegExp;
13
14
  logSolveOutcome(pSolveOutcome: any): void;
14
15
  /**
15
16
  * Prepares the solver results map by ensuring it has the necessary structure.
@@ -44,6 +45,37 @@ declare class PictDynamicSolver extends libPictProvider {
44
45
  * @returns {object|undefined} - The solver object if it passes the checks, otherwise undefined.
45
46
  */
46
47
  checkSolver(pSolver: string | object, pFiltered?: boolean, pOrdinal?: number): object | undefined;
48
+ /** @typedef {{ Ordinal: number, Expression: string } | string} Solver */
49
+ /**
50
+ * Execute a set of adhoc solvers.
51
+ *
52
+ * @param {import('../views/Pict-View-DynamicForm.js')} pView - The dynamic view to execute the solvers against.
53
+ * @param {Array<Solver>} pSolvers - An array of solvers to execute.
54
+ * @param {string} pReason - The reason for executing the solvers.
55
+ */
56
+ executeSolvers(pView: import("../views/Pict-View-DynamicForm.js"), pSolvers: Array<string | {
57
+ Ordinal: number;
58
+ Expression: string;
59
+ }>, pReason: string): void;
60
+ lastAdhocSolveOutcome: {
61
+ SolverResultsMap: {};
62
+ StartTimeStamp: number;
63
+ SolveOrdinals: {};
64
+ EndTimeStamp: number;
65
+ };
66
+ /**
67
+ * Runs each Adhoc solver formulae for a dynamic view group at a given ordinal.
68
+ *
69
+ * Or for all ordinals if no ordinal is passed.
70
+ *
71
+ * @param {import('../views/Pict-View-DynamicForm.js')} pView - The dynamic view to execute the solvers against.
72
+ * @param {Array<string>} pAdhocSolverArray - An array of Solvers from the groups to solve.
73
+ * @param {string} pReason - The reason for executing the solvers.
74
+ * @param {number} pOrdinal - The ordinal value to filter to. Optional.
75
+ * @param {Object} pSolverResultsMap - The solver results map.
76
+ * @param {boolean} [pPreventSolverCycles=false] - Whether to prevent solver cycles.
77
+ */
78
+ executeAdhocSolvers(pView: import("../views/Pict-View-DynamicForm.js"), pAdhocSolverArray: Array<string>, pReason: string, pOrdinal: number, pSolverResultsMap: any, pPreventSolverCycles?: boolean): void;
47
79
  /**
48
80
  * Runs each RecordSet solver formulae for a dynamic view group at a given ordinal.
49
81
  *
@@ -52,16 +84,18 @@ declare class PictDynamicSolver extends libPictProvider {
52
84
  * @param {array} pGroupSolverArray - An array of Solvers from the groups to solve.
53
85
  * @param {number} pOrdinal - The ordinal value to filter to. Optional.
54
86
  * @param {Object} pSolverResultsMap - The solver results map.
87
+ * @param {boolean} [pPreventSolverCycles=false] - Whether to prevent solver cycles.
55
88
  */
56
- executeGroupSolvers(pGroupSolverArray: any[], pOrdinal: number, pSolverResultsMap: any): void;
89
+ executeGroupSolvers(pGroupSolverArray: any[], pOrdinal: number, pSolverResultsMap: any, pPreventSolverCycles?: boolean): void;
57
90
  /**
58
91
  * Executes the section solvers at a given ordinal (or all if no ordinal is passed).
59
92
  *
60
93
  * @param {Array} pViewSectionSolverArray - The array of view section solvers.
61
94
  * @param {number} pOrdinal - The ordinal value.
62
95
  * @param {Object} pSolverResultsMap - The solver results map.
96
+ * @param {boolean} [pPreventSolverCycles=false] - Whether to prevent solver cycles.
63
97
  */
64
- executeSectionSolvers(pViewSectionSolverArray: any[], pOrdinal: number, pSolverResultsMap: any): void;
98
+ executeSectionSolvers(pViewSectionSolverArray: any[], pOrdinal: number, pSolverResultsMap: any, pPreventSolverCycles?: boolean): void;
65
99
  /**
66
100
  * Executes the view solvers for the given array of view hashes.
67
101
  *
@@ -101,8 +135,10 @@ declare class PictDynamicSolver extends libPictProvider {
101
135
  * leaves on the tree.
102
136
 
103
137
  * @param {Array|string[]} [pViewHashes] - An optional array of view hashes to solve. If not provided, all views in the fable will be solved.
138
+ * @param {boolean} [pPreventSolverCycles] - An optional context string for the solve operation.
139
+ * TODO: make sure you can't cycle with the same solve context - new solver method to invoke this
104
140
  */
105
- solveViews(pViewHashes?: any[] | string[]): void;
141
+ solveViews(pViewHashes?: any[] | string[], pPreventSolverCycles?: boolean): void;
106
142
  lastSolveOutcome: {
107
143
  SolverResultsMap: {};
108
144
  StartTimeStamp: number;
@@ -1 +1 @@
1
- {"version":3,"file":"Pict-Provider-DynamicSolver.d.ts","sourceRoot":"","sources":["../../../source/providers/Pict-Provider-DynamicSolver.js"],"names":[],"mappings":";AA+BA;;GAEG;AACH;IAcE,6BAA6B;IAC7B,MADW,OAAO,MAAM,CAAC,CAChB;IACT,uHAAuH;IACvH,OADW,OAAO,MAAM,CAAC,GAAG;QAAE,qCAAqC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,GAAG,CAAC;QAAC,gBAAgB,EAAE,GAAG,CAAA;KAAE,CACzG;IA8BX,0CAsBC;IAED;;;;;MAKE;IACF,qDAgBC;IAED;;;;;OAKG;IACH,oDA+CC;IAED;;;;;;OAMG;IACH,6BAJW,MAAM,YACN,OAAO,GACL,GAAG,CAyBf;IAED;;;;;;;;;OASG;IACH,qBALW,MAAM,GAAC,MAAM,cACb,OAAO,aACP,MAAM,GACJ,MAAM,GAAC,SAAS,CA8B5B;IAED;;;;;;;;OAQG;IACH,wDAHW,MAAM,gCA4DhB;IAED;;;;;;OAMG;IACH,gEAHW,MAAM,gCAkChB;IAED;;;;;;OAMG;IACH,sDAHW,MAAM,gCA2BhB;IAED;;;;;;;;OAQG;IACH,gCAJW,MAAM,yBAWhB;IAED;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,yBAFW,QAAM,MAAM,EAAE,QA6FxB;IADA;;;;;;MAAuC;CAExC;;;;;AA7fD,kCAAkC;AAClC,6CADW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAS3B"}
1
+ {"version":3,"file":"Pict-Provider-DynamicSolver.d.ts","sourceRoot":"","sources":["../../../source/providers/Pict-Provider-DynamicSolver.js"],"names":[],"mappings":";AA+BA;;GAEG;AACH;IAcE,6BAA6B;IAC7B,MADW,OAAO,MAAM,CAAC,CAChB;IACT,uHAAuH;IACvH,OADW,OAAO,MAAM,CAAC,GAAG;QAAE,qCAAqC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,GAAG,CAAC;QAAC,gBAAgB,EAAE,GAAG,CAAA;KAAE,CACzG;IAQV,yBAA0C;IAwB3C,0CAsBC;IAED;;;;;MAKE;IACF,qDAgBC;IAED;;;;;OAKG;IACH,oDA+CC;IAED;;;;;;OAMG;IACH,6BAJW,MAAM,YACN,OAAO,GACL,GAAG,CAyBf;IAED;;;;;;;;;OASG;IACH,qBALW,MAAM,GAAC,MAAM,cACb,OAAO,aACP,MAAM,GACJ,MAAM,GAAC,SAAS,CA8B5B;IAED,yEAAyE;IAEzE;;;;;;OAMG;IACH,sBAJW,OAAO,mCAAmC,CAAC,YAC3C,KAAK;iBANS,MAAM;oBAAc,MAAM;MAM3B,WACb,MAAM,QAmDhB;IADA;;;;;MAA4C;IAG7C;;;;;;;;;;;OAWG;IACH,2BAPW,OAAO,mCAAmC,CAAC,qBAC3C,KAAK,CAAC,MAAM,CAAC,WACb,MAAM,YACN,MAAM,iDAEN,OAAO,QAyCjB;IAED;;;;;;;;;OASG;IACH,wDAJW,MAAM,iDAEN,OAAO,QAoEjB;IAED;;;;;;;OAOG;IACH,gEAJW,MAAM,iDAEN,OAAO,QA0CjB;IAED;;;;;;OAMG;IACH,sDAHW,MAAM,gCA2BhB;IAED;;;;;;;;OAQG;IACH,gCAJW,MAAM,yBAWhB;IAED;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,yBAJW,QAAM,MAAM,EAAE,yBACd,OAAO,QA+FjB;IADA;;;;;;MAAuC;CAExC;;;;;AAvoBD,kCAAkC;AAClC,6CADW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAS3B"}
@@ -1 +1 @@
1
- {"version":3,"file":"Pict-Provider-Input-AutofillTriggerGroup.d.ts","sourceRoot":"","sources":["../../../../source/providers/inputs/Pict-Provider-Input-AutofillTriggerGroup.js"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH;IAWE,6BAA6B;IAC7B,MADW,OAAO,MAAM,CAAC,CAChB;IAKV,oDAYC;IAED,sGAwBC;IAED,6HAwBC;IAGD;;;;;;;;;OASG;IACH,8CALW,GAAG,iBACH,MAAM,oBACN,MAAM,GACJ,GAAG,CAmBf;IAED;;;;;;;;;;OAUG;IACH,qDANW,GAAG,iBACH,MAAM,aACN,MAAM,oBACN,MAAM,GACJ,GAAG,CAmBf;CAyHD"}
1
+ {"version":3,"file":"Pict-Provider-Input-AutofillTriggerGroup.d.ts","sourceRoot":"","sources":["../../../../source/providers/inputs/Pict-Provider-Input-AutofillTriggerGroup.js"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH;IAWE,6BAA6B;IAC7B,MADW,OAAO,MAAM,CAAC,CAChB;IAKV,oDAYC;IAED,sGAwBC;IAED,6HAwBC;IAGD;;;;;;;;;OASG;IACH,8CALW,GAAG,iBACH,MAAM,oBACN,MAAM,GACJ,GAAG,CA8Bf;IAED;;;;;;;;;;OAUG;IACH,qDANW,GAAG,iBACH,MAAM,aACN,MAAM,oBACN,MAAM,GACJ,GAAG,CA8Bf;CAmID"}
@@ -1 +1 @@
1
- {"version":3,"file":"Pict-Provider-Input-TemplatedEntityLookup.d.ts","sourceRoot":"","sources":["../../../../source/providers/inputs/Pict-Provider-Input-TemplatedEntityLookup.js"],"names":[],"mappings":";AAIA;;;;;;GAMG;AACH;IAWE,6BAA6B;IAC7B,MADW,OAAO,MAAM,CAAC,CAChB;IACT,4DAA4D;IAC5D,OADW,OAAO,MAAM,CAAC,GAAG;QAAE,aAAa,EAAE,MAAM,GAAG,CAAA;KAAE,CAC9C;IAKX;;;;;OAKG;IACH,sCAHW,MAAM,GACJ,MAAM,CAKlB;IAED;;;;;;OAMG;IACH,8CAJW,MAAM,aACN,MAAM,GACJ,MAAM,CAKlB;IAED;;;;;OAKG;IACH,iEAFW,GAAG,QAoEb;IAoBD;;;;;;;;;;;OAWG;IACH,uEANW,GAAG,iBACH,MAAM,aACN,MAAM,oBACN,MAAM,GACJ,GAAG,CAMf;IAED;;;;;;;;;;;OAWG;IACH,6EALW,GAAG,iBACH,MAAM,oBACN,MAAM,GACJ,OAAO,CAMnB;IAED;;;;;;;;;;;OAWG;IACH,yEANW,GAAG,iBACH,MAAM,aACN,MAAM,oBACN,MAAM,GACJ,GAAG,CAMf;CACD"}
1
+ {"version":3,"file":"Pict-Provider-Input-TemplatedEntityLookup.d.ts","sourceRoot":"","sources":["../../../../source/providers/inputs/Pict-Provider-Input-TemplatedEntityLookup.js"],"names":[],"mappings":";AAIA;;;;;;GAMG;AACH;IAWE,6BAA6B;IAC7B,MADW,OAAO,MAAM,CAAC,CAChB;IACT,4DAA4D;IAC5D,OADW,OAAO,MAAM,CAAC,GAAG;QAAE,aAAa,EAAE,MAAM,GAAG,CAAA;KAAE,CAC9C;IAKX;;;;;OAKG;IACH,sCAHW,MAAM,GACJ,MAAM,CAKlB;IAED;;;;;;OAMG;IACH,8CAJW,MAAM,aACN,MAAM,GACJ,MAAM,CAKlB;IAED;;;;;OAKG;IACH,iEAFW,GAAG,QAoEb;IAoBD;;;;;;;;;;;OAWG;IACH,uEANW,GAAG,iBACH,MAAM,aACN,MAAM,oBACN,MAAM,GACJ,GAAG,CAMf;IAED;;;;;;;;;;;OAWG;IACH,6EALW,GAAG,iBACH,MAAM,oBACN,MAAM,GACJ,OAAO,CAOnB;IAED;;;;;;;;;;;OAWG;IACH,yEANW,GAAG,iBACH,MAAM,aACN,MAAM,oBACN,MAAM,GACJ,GAAG,CAOf;CACD"}
@@ -86,6 +86,7 @@ declare class ManifestFactory {
86
86
  * @param {Object} pNewDescriptor - The descriptor object
87
87
  */
88
88
  onTabularRowAddDescriptor(pIncomingDescriptor: any, pSection: any, pGroup: any, pNewDescriptor: any): void;
89
+ migrateAutofillTriggerGroupSolvers(pManifests: any): void;
89
90
  /**
90
91
  * Create some manifests with a "factory" pattern.
91
92
  *
@@ -1 +1 @@
1
- {"version":3,"file":"ManifestFactory.d.ts","sourceRoot":"","sources":["../../../source/services/ManifestFactory.js"],"names":[],"mappings":";AAOA;IAEC,2DA4CC;IAtCA,6KAA6K;IAC7K,OADW,OAAO,MAAM,CAAC,GAAG;QAAE,6CAA6C,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK,GAAG,CAAC;QAAC,WAAW,EAAE,MAAM,OAAO,UAAU,CAAC,CAAA;KAAE,CAC/J;IACV,kBAAkB;IAClB,KADW,GAAG,CACN;IACR,qBAAqB;IACrB,MADW,MAAM,CACR;IAET,cAAmC;IAcnC,+BAAoC;IAEpC,sBAA2B;IAC3B,oBAAyB;IASzB,2BAA2B;IAE3B,gCAAgD;IAChD,sCAAwC;IACxC,kCAA0C;IAG3C;;;;;OAKG;IACH,2BAHW,MAAM,GACL,MAAM,CASjB;IAED;;;;;;;;;OASG;IACH,uCAwJC;IAED;;;;OAIG;IACH,8CAOC;IAED;;;;;;OAMG;IACH,iCAJW,MAAM,OAiBhB;IAED;;;;;;;OAOG;IACH,mCALW,MAAM,MAAO,cACb,MAAM,OAkBhB;IAED;;;;OAIG;IACH,8BAFa,OAAO,CAenB;IAED,2FAyDC;IAED;;;;;;;OAOG;IACH,kEAwhBC;IAED;;;;;;;;;OASG;IACH,2GAGC;IAED;;;;;;OAMG;IACH,0CAJW,GAAG,GAEF,GAAG,CAwDd;CACD;;+BAGU,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC"}
1
+ {"version":3,"file":"ManifestFactory.d.ts","sourceRoot":"","sources":["../../../source/services/ManifestFactory.js"],"names":[],"mappings":";AAOA;IAEC,2DA4CC;IAtCA,6KAA6K;IAC7K,OADW,OAAO,MAAM,CAAC,GAAG;QAAE,6CAA6C,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK,GAAG,CAAC;QAAC,WAAW,EAAE,MAAM,OAAO,UAAU,CAAC,CAAA;KAAE,CAC/J;IACV,kBAAkB;IAClB,KADW,GAAG,CACN;IACR,qBAAqB;IACrB,MADW,MAAM,CACR;IAET,cAAmC;IAcnC,+BAAoC;IAEpC,sBAA2B;IAC3B,oBAAyB;IASzB,2BAA2B;IAE3B,gCAAgD;IAChD,sCAAwC;IACxC,kCAA0C;IAG3C;;;;;OAKG;IACH,2BAHW,MAAM,GACL,MAAM,CASjB;IAED;;;;;;;;;OASG;IACH,uCAwJC;IAED;;;;OAIG;IACH,8CAOC;IAED;;;;;;OAMG;IACH,iCAJW,MAAM,OAiBhB;IAED;;;;;;;OAOG;IACH,mCALW,MAAM,MAAO,cACb,MAAM,OAkBhB;IAED;;;;OAIG;IACH,8BAFa,OAAO,CAenB;IAED,2FAyDC;IAED;;;;;;;OAOG;IACH,kEAwhBC;IAED;;;;;;;;;OASG;IACH,2GAGC;IAED,0DAsGC;IAED;;;;;;OAMG;IACH,0CAJW,GAAG,GAEF,GAAG,CAyDd;CACD;;+BAGU,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC"}