@memberjunction/core-actions 6.1.4 → 6.2.0-edge.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. package/dist/config.d.ts +74 -10
  2. package/dist/config.d.ts.map +1 -1
  3. package/dist/config.js +48 -9
  4. package/dist/config.js.map +1 -1
  5. package/dist/custom/ai/base-find-actions.action.js +6 -6
  6. package/dist/custom/ai/base-find-agents.action.js +6 -6
  7. package/dist/custom/ai/find-candidate-agents.action.js +2 -2
  8. package/dist/custom/ai/generate-image.action.d.ts +13 -1
  9. package/dist/custom/ai/generate-image.action.d.ts.map +1 -1
  10. package/dist/custom/ai/generate-image.action.js +25 -13
  11. package/dist/custom/ai/generate-image.action.js.map +1 -1
  12. package/dist/custom/ai/semantic-entity-search.helper.d.ts +6 -0
  13. package/dist/custom/ai/semantic-entity-search.helper.d.ts.map +1 -1
  14. package/dist/custom/ai/semantic-entity-search.helper.js +16 -4
  15. package/dist/custom/ai/semantic-entity-search.helper.js.map +1 -1
  16. package/dist/custom/data/search-query-catalog.action.js +2 -2
  17. package/dist/custom/integration/api-rate-limiter.action.d.ts +4 -0
  18. package/dist/custom/integration/api-rate-limiter.action.d.ts.map +1 -1
  19. package/dist/custom/integration/api-rate-limiter.action.js +10 -2
  20. package/dist/custom/integration/api-rate-limiter.action.js.map +1 -1
  21. package/dist/custom/integration/gamma-generate-presentation.action.js +2 -2
  22. package/dist/custom/integration/integration-action-executor.d.ts +22 -22
  23. package/dist/custom/integration/integration-action-executor.js +83 -83
  24. package/dist/custom/interactive-forms/_shared.d.ts +69 -0
  25. package/dist/custom/interactive-forms/_shared.d.ts.map +1 -1
  26. package/dist/custom/interactive-forms/_shared.js +118 -38
  27. package/dist/custom/interactive-forms/_shared.js.map +1 -1
  28. package/dist/custom/interactive-forms/activate-interactive-form-version.action.js +25 -25
  29. package/dist/custom/interactive-forms/create-interactive-form.action.js +22 -22
  30. package/dist/custom/interactive-forms/modify-interactive-form.action.js +35 -35
  31. package/dist/custom/interactive-forms/revert-interactive-form.action.js +32 -32
  32. package/dist/custom/lists/_action-helpers.d.ts +10 -0
  33. package/dist/custom/lists/_action-helpers.d.ts.map +1 -1
  34. package/dist/custom/lists/_action-helpers.js +26 -6
  35. package/dist/custom/lists/_action-helpers.js.map +1 -1
  36. package/dist/custom/lists/add-view-results-to-list.action.js +8 -8
  37. package/dist/custom/lists/bulk-update-list-item-status.action.js +8 -8
  38. package/dist/custom/lists/compose-lists.action.js +14 -14
  39. package/dist/custom/lists/invite-to-list.action.js +10 -10
  40. package/dist/custom/lists/materialize-list-from-view.action.js +13 -13
  41. package/dist/custom/lists/move-list-members.action.js +12 -12
  42. package/dist/custom/lists/refresh-list-from-source.action.js +8 -8
  43. package/dist/custom/lists/resolve-audience.action.js +7 -7
  44. package/dist/custom/lists/revoke-list-invitation.action.js +3 -3
  45. package/dist/custom/lists/share-list.action.js +8 -8
  46. package/dist/custom/lists/unshare-list.action.js +3 -3
  47. package/dist/custom/utilities/address-services.action.js +2 -2
  48. package/dist/custom/utilities/artifact-builder-service.d.ts +16 -16
  49. package/dist/custom/utilities/artifact-builder-service.js +39 -39
  50. package/dist/custom/utilities/artifact-builder-service.js.map +1 -1
  51. package/dist/custom/utilities/base-file-handler.d.ts.map +1 -1
  52. package/dist/custom/utilities/base-file-handler.js +4 -2
  53. package/dist/custom/utilities/base-file-handler.js.map +1 -1
  54. package/dist/custom/utilities/docx-renderer.d.ts +17 -11
  55. package/dist/custom/utilities/docx-renderer.d.ts.map +1 -1
  56. package/dist/custom/utilities/docx-renderer.js +60 -48
  57. package/dist/custom/utilities/docx-renderer.js.map +1 -1
  58. package/dist/custom/utilities/json-param-helper.d.ts +6 -0
  59. package/dist/custom/utilities/json-param-helper.d.ts.map +1 -1
  60. package/dist/custom/utilities/json-param-helper.js +16 -4
  61. package/dist/custom/utilities/json-param-helper.js.map +1 -1
  62. package/dist/custom/utilities/pdf-renderer.d.ts +13 -7
  63. package/dist/custom/utilities/pdf-renderer.d.ts.map +1 -1
  64. package/dist/custom/utilities/pdf-renderer.js +27 -15
  65. package/dist/custom/utilities/pdf-renderer.js.map +1 -1
  66. package/dist/custom/utilities/xlsx-renderer.d.ts +19 -11
  67. package/dist/custom/utilities/xlsx-renderer.d.ts.map +1 -1
  68. package/dist/custom/utilities/xlsx-renderer.js +55 -39
  69. package/dist/custom/utilities/xlsx-renderer.js.map +1 -1
  70. package/dist/custom/visualization/create-svg-chart.action.js +23 -23
  71. package/dist/custom/visualization/create-svg-diagram.action.js +10 -10
  72. package/dist/custom/visualization/create-svg-infographic.action.js +4 -4
  73. package/dist/custom/visualization/create-svg-network.action.js +12 -12
  74. package/dist/custom/visualization/create-svg-sketch-diagram.action.js +10 -10
  75. package/dist/custom/visualization/create-svg-word-cloud.action.js +11 -11
  76. package/dist/custom/visualization/shared/svg-theming.d.ts +17 -0
  77. package/dist/custom/visualization/shared/svg-theming.d.ts.map +1 -1
  78. package/dist/custom/visualization/shared/svg-theming.js +34 -10
  79. package/dist/custom/visualization/shared/svg-theming.js.map +1 -1
  80. package/dist/custom/visualization/shared/svg-utils.d.ts +39 -0
  81. package/dist/custom/visualization/shared/svg-utils.d.ts.map +1 -1
  82. package/dist/custom/visualization/shared/svg-utils.js +81 -17
  83. package/dist/custom/visualization/shared/svg-utils.js.map +1 -1
  84. package/dist/custom/web/brave-search.action.d.ts +108 -0
  85. package/dist/custom/web/brave-search.action.d.ts.map +1 -0
  86. package/dist/custom/web/brave-search.action.js +285 -0
  87. package/dist/custom/web/brave-search.action.js.map +1 -0
  88. package/dist/custom/web/duckduckgo-rate-limiter.d.ts +17 -1
  89. package/dist/custom/web/duckduckgo-rate-limiter.d.ts.map +1 -1
  90. package/dist/custom/web/duckduckgo-rate-limiter.js +26 -6
  91. package/dist/custom/web/duckduckgo-rate-limiter.js.map +1 -1
  92. package/dist/custom/web/google-custom-search.action.js +2 -2
  93. package/dist/custom/web/perplexity-search.action.d.ts +76 -44
  94. package/dist/custom/web/perplexity-search.action.d.ts.map +1 -1
  95. package/dist/custom/web/perplexity-search.action.js +228 -157
  96. package/dist/custom/web/perplexity-search.action.js.map +1 -1
  97. package/dist/custom/web/rss-feed-parsing.d.ts +19 -0
  98. package/dist/custom/web/rss-feed-parsing.d.ts.map +1 -1
  99. package/dist/custom/web/rss-feed-parsing.js +45 -13
  100. package/dist/custom/web/rss-feed-parsing.js.map +1 -1
  101. package/dist/custom/web/rss-feed-read.action.d.ts.map +1 -1
  102. package/dist/custom/web/rss-feed-read.action.js +9 -6
  103. package/dist/custom/web/rss-feed-read.action.js.map +1 -1
  104. package/dist/custom/web/tavily-search.action.js +2 -2
  105. package/dist/custom/web/web-search.action.d.ts +56 -40
  106. package/dist/custom/web/web-search.action.d.ts.map +1 -1
  107. package/dist/custom/web/web-search.action.js +141 -413
  108. package/dist/custom/web/web-search.action.js.map +1 -1
  109. package/dist/index.d.ts +1 -0
  110. package/dist/index.d.ts.map +1 -1
  111. package/dist/index.js +1 -0
  112. package/dist/index.js.map +1 -1
  113. package/package.json +40 -39
@@ -7,7 +7,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
7
7
  import { BaseAction } from "@memberjunction/actions";
8
8
  import { Metadata, LogError, RunView } from "@memberjunction/core";
9
9
  import { RegisterClass } from "@memberjunction/global";
10
- import { addOutput, checkOverrideOwnership, failure, getStringParam, loadComponent, loadOverride, mapToComponentStatus, } from "./_shared.js";
10
+ import { AddOutput, CheckOverrideOwnership, Failure, GetStringParam, LoadComponent, LoadOverride, MapToComponentStatus, } from "./_shared.js";
11
11
  /**
12
12
  * Promote a Pending override to Active. Flips:
13
13
  * - target Override: Status='Active'
@@ -34,32 +34,32 @@ import { addOutput, checkOverrideOwnership, failure, getStringParam, loadCompone
34
34
  let ActivateInteractiveFormVersionAction = class ActivateInteractiveFormVersionAction extends BaseAction {
35
35
  async InternalRunAction(params) {
36
36
  try {
37
- const overrideID = getStringParam(params, "OverrideID");
37
+ const overrideID = GetStringParam(params, "OverrideID");
38
38
  if (!overrideID) {
39
- return failure("MISSING_PARAMETER", "Parameter 'OverrideID' is required.");
39
+ return Failure("MISSING_PARAMETER", "Parameter 'OverrideID' is required.");
40
40
  }
41
41
  const provider = params.Provider ?? Metadata.Provider;
42
42
  if (!provider)
43
- return failure("NO_PROVIDER", "No metadata provider available.");
43
+ return Failure("NO_PROVIDER", "No metadata provider available.");
44
44
  const user = params.ContextUser;
45
45
  if (!user)
46
- return failure("NO_USER", "Action requires a ContextUser.");
47
- const target = await loadOverride(provider, user, overrideID);
46
+ return Failure("NO_USER", "Action requires a ContextUser.");
47
+ const target = await LoadOverride(provider, user, overrideID);
48
48
  if (!target) {
49
- return failure("OVERRIDE_NOT_FOUND", `EntityFormOverride '${overrideID}' not found.`);
49
+ return Failure("OVERRIDE_NOT_FOUND", `EntityFormOverride '${overrideID}' not found.`);
50
50
  }
51
- const ownershipFail = checkOverrideOwnership(target, user);
51
+ const ownershipFail = CheckOverrideOwnership(target, user);
52
52
  if (ownershipFail)
53
53
  return ownershipFail;
54
54
  if (target.Status === 'Active') {
55
- addOutput(params, "ComponentID", target.ComponentID);
56
- addOutput(params, "OverrideID", target.ID);
57
- addOutput(params, "PreviousActiveOverrideID", null);
55
+ AddOutput(params, "ComponentID", target.ComponentID);
56
+ AddOutput(params, "OverrideID", target.ID);
57
+ AddOutput(params, "PreviousActiveOverrideID", null);
58
58
  return { Success: true, ResultCode: "SUCCESS",
59
59
  Message: JSON.stringify({ noop: true, OverrideID: target.ID, ComponentID: target.ComponentID }) };
60
60
  }
61
61
  if (target.Status === 'Inactive') {
62
- return failure("NOT_PENDING", `Override ${overrideID} is Inactive. Use 'Revert Interactive Form' to restore an older version, not 'Activate'.`);
62
+ return Failure("NOT_PENDING", `Override ${overrideID} is Inactive. Use 'Revert Interactive Form' to restore an older version, not 'Activate'.`);
63
63
  }
64
64
  // Find sibling Active overrides at the same (entity, scope target).
65
65
  const rv = RunView.FromMetadataProvider(provider);
@@ -75,42 +75,42 @@ let ActivateInteractiveFormVersionAction = class ActivateInteractiveFormVersionA
75
75
  ResultType: 'simple',
76
76
  }, user);
77
77
  if (!priorResult.Success) {
78
- return failure("QUERY_FAILED", `Prior-active lookup failed: ${priorResult.ErrorMessage ?? 'unknown error'}`);
78
+ return Failure("QUERY_FAILED", `Prior-active lookup failed: ${priorResult.ErrorMessage ?? 'unknown error'}`);
79
79
  }
80
80
  // Promote target's component.
81
- const newComponent = await loadComponent(provider, user, target.ComponentID);
81
+ const newComponent = await LoadComponent(provider, user, target.ComponentID);
82
82
  if (!newComponent) {
83
- return failure("COMPONENT_NOT_FOUND", `Override ${overrideID} points at Component ${target.ComponentID} which no longer exists.`);
83
+ return Failure("COMPONENT_NOT_FOUND", `Override ${overrideID} points at Component ${target.ComponentID} which no longer exists.`);
84
84
  }
85
- newComponent.Status = mapToComponentStatus('Active');
85
+ newComponent.Status = MapToComponentStatus('Active');
86
86
  const ncSaved = await newComponent.Save();
87
87
  if (!ncSaved) {
88
- return failure("PERSIST_FAILED", `Could not flip Component to Active: ${newComponent.LatestResult?.CompleteMessage ?? 'unknown error'}`);
88
+ return Failure("PERSIST_FAILED", `Could not flip Component to Active: ${newComponent.LatestResult?.CompleteMessage ?? 'unknown error'}`);
89
89
  }
90
90
  target.Status = 'Active';
91
91
  const tSaved = await target.Save();
92
92
  if (!tSaved) {
93
- return failure("PERSIST_FAILED", `Could not flip Override to Active: ${target.LatestResult?.CompleteMessage ?? 'unknown error'}`);
93
+ return Failure("PERSIST_FAILED", `Could not flip Override to Active: ${target.LatestResult?.CompleteMessage ?? 'unknown error'}`);
94
94
  }
95
95
  // Demote priors. Component AND Override flipped in lock-step.
96
96
  let firstPriorID = null;
97
97
  for (const prior of priorResult.Results ?? []) {
98
98
  if (!firstPriorID)
99
99
  firstPriorID = prior.ID;
100
- const priorO = await loadOverride(provider, user, prior.ID);
101
- const priorC = await loadComponent(provider, user, prior.ComponentID);
100
+ const priorO = await LoadOverride(provider, user, prior.ID);
101
+ const priorC = await LoadComponent(provider, user, prior.ComponentID);
102
102
  if (priorO) {
103
103
  priorO.Status = 'Inactive';
104
104
  await priorO.Save();
105
105
  }
106
106
  if (priorC) {
107
- priorC.Status = mapToComponentStatus('Inactive');
107
+ priorC.Status = MapToComponentStatus('Inactive');
108
108
  await priorC.Save();
109
109
  }
110
110
  }
111
- addOutput(params, "ComponentID", target.ComponentID);
112
- addOutput(params, "OverrideID", target.ID);
113
- addOutput(params, "PreviousActiveOverrideID", firstPriorID);
111
+ AddOutput(params, "ComponentID", target.ComponentID);
112
+ AddOutput(params, "OverrideID", target.ID);
113
+ AddOutput(params, "PreviousActiveOverrideID", firstPriorID);
114
114
  return { Success: true, ResultCode: "SUCCESS",
115
115
  Message: JSON.stringify({
116
116
  OverrideID: target.ID,
@@ -122,7 +122,7 @@ let ActivateInteractiveFormVersionAction = class ActivateInteractiveFormVersionA
122
122
  catch (err) {
123
123
  const message = err instanceof Error ? err.message : String(err);
124
124
  LogError(`ActivateInteractiveFormVersionAction: ${message}`);
125
- return failure("UNEXPECTED_ERROR", message);
125
+ return Failure("UNEXPECTED_ERROR", message);
126
126
  }
127
127
  }
128
128
  };
@@ -7,7 +7,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
7
7
  import { BaseAction } from "@memberjunction/actions";
8
8
  import { Metadata, LogError, RunView } from "@memberjunction/core";
9
9
  import { RegisterClass } from "@memberjunction/global";
10
- import { addOutput, failure, getStringParam, insertComponent, insertOverride, lintFormSpec, parseSpecParam, } from "./_shared.js";
10
+ import { AddOutput, Failure, GetStringParam, InsertComponent, InsertOverride, LintFormSpec, ParseSpecParam, } from "./_shared.js";
11
11
  /**
12
12
  * Create a net-new interactive-form override for the requesting user.
13
13
  *
@@ -39,13 +39,13 @@ let CreateInteractiveFormAction = class CreateInteractiveFormAction extends Base
39
39
  return inputs.error;
40
40
  const provider = params.Provider ?? Metadata.Provider;
41
41
  if (!provider)
42
- return failure("NO_PROVIDER", "No metadata provider available.");
42
+ return Failure("NO_PROVIDER", "No metadata provider available.");
43
43
  const user = params.ContextUser;
44
44
  if (!user)
45
- return failure("NO_USER", "Action requires a ContextUser to clamp override scope.");
45
+ return Failure("NO_USER", "Action requires a ContextUser to clamp override scope.");
46
46
  const entityInfo = provider.EntityByName(inputs.EntityName);
47
47
  if (!entityInfo) {
48
- return failure("ENTITY_NOT_FOUND", `Entity '${inputs.EntityName}' is not registered with the active metadata provider.`);
48
+ return Failure("ENTITY_NOT_FOUND", `Entity '${inputs.EntityName}' is not registered with the active metadata provider.`);
49
49
  }
50
50
  // Guard: don't silently create a duplicate override. We match
51
51
  // BOTH Active and Pending sibling overrides — either is grounds
@@ -62,10 +62,10 @@ let CreateInteractiveFormAction = class CreateInteractiveFormAction extends Base
62
62
  }, user);
63
63
  if (dupResult.Success && (dupResult.Results ?? []).length > 0) {
64
64
  const existing = dupResult.Results[0];
65
- return failure("ALREADY_EXISTS", `A ${existing.Status} User-scope override already exists for entity '${inputs.EntityName}' (OverrideID=${existing.ID}). Use 'Modify Interactive Form' on this OverrideID to refine it (with a VersionBumpKind of 'patch' / 'minor' / 'major' to snapshot a new version, or 'in-place' against a Pending row to keep iterating on the same version). Use 'Revert Interactive Form' to switch to a different historical version.`);
65
+ return Failure("ALREADY_EXISTS", `A ${existing.Status} User-scope override already exists for entity '${inputs.EntityName}' (OverrideID=${existing.ID}). Use 'Modify Interactive Form' on this OverrideID to refine it (with a VersionBumpKind of 'patch' / 'minor' / 'major' to snapshot a new version, or 'in-place' against a Pending row to keep iterating on the same version). Use 'Revert Interactive Form' to switch to a different historical version.`);
66
66
  }
67
67
  // Lint before any persistence — fail-hard.
68
- const lintFail = await lintFormSpec(inputs.Spec, user);
68
+ const lintFail = await LintFormSpec(inputs.Spec, user);
69
69
  if (lintFail)
70
70
  return lintFail;
71
71
  // Create v1.0.0 as Pending (NOT Active). The cockpit / agent
@@ -79,7 +79,7 @@ let CreateInteractiveFormAction = class CreateInteractiveFormAction extends Base
79
79
  // wasted version, no premature publication. The user
80
80
  // explicitly Activates from the Form Builder dashboard when
81
81
  // they're happy with the result.
82
- const componentInsert = await insertComponent({
82
+ const componentInsert = await InsertComponent({
83
83
  provider, user,
84
84
  spec: inputs.Spec,
85
85
  fallbackName: inputs.Name,
@@ -91,7 +91,7 @@ let CreateInteractiveFormAction = class CreateInteractiveFormAction extends Base
91
91
  if ('error' in componentInsert)
92
92
  return componentInsert.error;
93
93
  const componentID = componentInsert.id;
94
- const overrideInsert = await insertOverride({
94
+ const overrideInsert = await InsertOverride({
95
95
  provider, user,
96
96
  entityID: entityInfo.ID,
97
97
  componentID,
@@ -102,11 +102,11 @@ let CreateInteractiveFormAction = class CreateInteractiveFormAction extends Base
102
102
  priority: 0,
103
103
  });
104
104
  if ('error' in overrideInsert) {
105
- return failure("PERSIST_FAILED", `${overrideInsert.error.Message} (Component ${componentID} was persisted but has no override yet.)`);
105
+ return Failure("PERSIST_FAILED", `${overrideInsert.error.Message} (Component ${componentID} was persisted but has no override yet.)`);
106
106
  }
107
- addOutput(params, "ComponentID", componentID);
108
- addOutput(params, "OverrideID", overrideInsert.id);
109
- addOutput(params, "Version", "1.0.0");
107
+ AddOutput(params, "ComponentID", componentID);
108
+ AddOutput(params, "OverrideID", overrideInsert.id);
109
+ AddOutput(params, "Version", "1.0.0");
110
110
  return {
111
111
  Success: true,
112
112
  ResultCode: "SUCCESS",
@@ -123,29 +123,29 @@ let CreateInteractiveFormAction = class CreateInteractiveFormAction extends Base
123
123
  catch (err) {
124
124
  const message = err instanceof Error ? err.message : String(err);
125
125
  LogError(`CreateInteractiveFormAction: ${message}`);
126
- return failure("UNEXPECTED_ERROR", message);
126
+ return Failure("UNEXPECTED_ERROR", message);
127
127
  }
128
128
  }
129
129
  extractInputs(params) {
130
- const entityName = getStringParam(params, "EntityName");
130
+ const entityName = GetStringParam(params, "EntityName");
131
131
  if (!entityName)
132
- return { error: failure("MISSING_PARAMETER", "Parameter 'EntityName' is required.") };
133
- const name = getStringParam(params, "Name");
132
+ return { error: Failure("MISSING_PARAMETER", "Parameter 'EntityName' is required.") };
133
+ const name = GetStringParam(params, "Name");
134
134
  if (!name)
135
- return { error: failure("MISSING_PARAMETER", "Parameter 'Name' is required.") };
135
+ return { error: Failure("MISSING_PARAMETER", "Parameter 'Name' is required.") };
136
136
  const specRaw = params.Params.find(x => x.Name?.trim().toLowerCase() === "spec")?.Value;
137
137
  if (specRaw == null)
138
- return { error: failure("MISSING_PARAMETER", "Parameter 'Spec' is required.") };
139
- const parsed = parseSpecParam(specRaw);
138
+ return { error: Failure("MISSING_PARAMETER", "Parameter 'Spec' is required.") };
139
+ const parsed = ParseSpecParam(specRaw);
140
140
  if ('error' in parsed) {
141
- return { error: failure("LINT_FAILED", `Spec is not valid JSON: ${parsed.error}`) };
141
+ return { error: Failure("LINT_FAILED", `Spec is not valid JSON: ${parsed.error}`) };
142
142
  }
143
143
  return {
144
144
  EntityName: entityName,
145
145
  Spec: parsed,
146
146
  Name: name,
147
- Description: getStringParam(params, "Description"),
148
- Notes: getStringParam(params, "Notes"),
147
+ Description: GetStringParam(params, "Description"),
148
+ Notes: GetStringParam(params, "Notes"),
149
149
  };
150
150
  }
151
151
  };
@@ -7,7 +7,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
7
7
  import { BaseAction } from "@memberjunction/actions";
8
8
  import { Metadata, LogError } from "@memberjunction/core";
9
9
  import { RegisterClass } from "@memberjunction/global";
10
- import { addOutput, bumpVersion, checkOverrideOwnership, failure, getStringParam, insertComponent, insertOverride, lintFormSpec, loadComponent, loadOverride, mapToComponentStatus, parseSpecParam, parseVersionBumpKind, } from "./_shared.js";
10
+ import { AddOutput, BumpVersion, CheckOverrideOwnership, Failure, GetStringParam, InsertComponent, InsertOverride, LintFormSpec, LoadComponent, LoadOverride, MapToComponentStatus, ParseSpecParam, ParseVersionBumpKind, } from "./_shared.js";
11
11
  /**
12
12
  * Modify an existing interactive-form override.
13
13
  *
@@ -56,37 +56,37 @@ import { addOutput, bumpVersion, checkOverrideOwnership, failure, getStringParam
56
56
  let ModifyInteractiveFormAction = class ModifyInteractiveFormAction extends BaseAction {
57
57
  async InternalRunAction(params) {
58
58
  try {
59
- const overrideID = getStringParam(params, "OverrideID");
59
+ const overrideID = GetStringParam(params, "OverrideID");
60
60
  if (!overrideID) {
61
- return failure("MISSING_PARAMETER", "Parameter 'OverrideID' is required.");
61
+ return Failure("MISSING_PARAMETER", "Parameter 'OverrideID' is required.");
62
62
  }
63
63
  const specRaw = this.findParam(params, "Spec");
64
64
  if (specRaw == null) {
65
- return failure("MISSING_PARAMETER", "Parameter 'Spec' is required.");
65
+ return Failure("MISSING_PARAMETER", "Parameter 'Spec' is required.");
66
66
  }
67
- const parsed = parseSpecParam(specRaw);
67
+ const parsed = ParseSpecParam(specRaw);
68
68
  if ('error' in parsed) {
69
- return failure("LINT_FAILED", `Spec is not valid JSON: ${parsed.error}`);
69
+ return Failure("LINT_FAILED", `Spec is not valid JSON: ${parsed.error}`);
70
70
  }
71
71
  const spec = parsed;
72
- const notes = getStringParam(params, "Notes");
72
+ const notes = GetStringParam(params, "Notes");
73
73
  const provider = params.Provider ?? Metadata.Provider;
74
74
  if (!provider)
75
- return failure("NO_PROVIDER", "No metadata provider available.");
75
+ return Failure("NO_PROVIDER", "No metadata provider available.");
76
76
  const user = params.ContextUser;
77
77
  if (!user)
78
- return failure("NO_USER", "Action requires a ContextUser.");
79
- const override = await loadOverride(provider, user, overrideID);
78
+ return Failure("NO_USER", "Action requires a ContextUser.");
79
+ const override = await LoadOverride(provider, user, overrideID);
80
80
  if (!override) {
81
- return failure("OVERRIDE_NOT_FOUND", `EntityFormOverride '${overrideID}' not found.`);
81
+ return Failure("OVERRIDE_NOT_FOUND", `EntityFormOverride '${overrideID}' not found.`);
82
82
  }
83
83
  // Defense-in-depth ownership check — see _shared.ts.
84
- const ownershipFail = checkOverrideOwnership(override, user);
84
+ const ownershipFail = CheckOverrideOwnership(override, user);
85
85
  if (ownershipFail)
86
86
  return ownershipFail;
87
- const existingComponent = await loadComponent(provider, user, override.ComponentID);
87
+ const existingComponent = await LoadComponent(provider, user, override.ComponentID);
88
88
  if (!existingComponent) {
89
- return failure("COMPONENT_NOT_FOUND", `Override ${overrideID} points at Component ${override.ComponentID} which no longer exists.`);
89
+ return Failure("COMPONENT_NOT_FOUND", `Override ${overrideID} points at Component ${override.ComponentID} which no longer exists.`);
90
90
  }
91
91
  // Lineage identity guard. Component lineage is collapsed by Name
92
92
  // in the Form Builder version rail — different Name = different
@@ -101,7 +101,7 @@ let ModifyInteractiveFormAction = class ModifyInteractiveFormAction extends Base
101
101
  // existing Component.Name and sanitize the function name to
102
102
  // match, never the other way around.
103
103
  if (spec.name && spec.name !== existingComponent.Name) {
104
- return failure("LINEAGE_NAME_MISMATCH", `Modify requires spec.name to match the existing Component name '${existingComponent.Name}', got '${spec.name}'. Modify operates on a Component lineage — its identity is the Name and cannot change between versions. Update spec.name and the function declaration in spec.code to '${existingComponent.Name}' and retry. (If the user wants a renamed form, that's a Create on the new entity or a manual rename in Form Builder, not a Modify.)`);
104
+ return Failure("LINEAGE_NAME_MISMATCH", `Modify requires spec.name to match the existing Component name '${existingComponent.Name}', got '${spec.name}'. Modify operates on a Component lineage — its identity is the Name and cannot change between versions. Update spec.name and the function declaration in spec.code to '${existingComponent.Name}' and retry. (If the user wants a renamed form, that's a Create on the new entity or a manual rename in Form Builder, not a Modify.)`);
105
105
  }
106
106
  // Pin Name and Title to the existing row regardless — covers
107
107
  // the case where the agent omitted spec.name entirely.
@@ -110,7 +110,7 @@ let ModifyInteractiveFormAction = class ModifyInteractiveFormAction extends Base
110
110
  spec.title = existingComponent.Title;
111
111
  // Lint AFTER the lineage guard so any name/title pinning is
112
112
  // visible to the linter (function-name match, etc.).
113
- const lintFail = await lintFormSpec(spec, user);
113
+ const lintFail = await LintFormSpec(spec, user);
114
114
  if (lintFail)
115
115
  return lintFail;
116
116
  // Resolve VersionBumpKind: explicit param wins; otherwise default
@@ -126,12 +126,12 @@ let ModifyInteractiveFormAction = class ModifyInteractiveFormAction extends Base
126
126
  const sourceStatus = overrideStatus === 'Active' ? 'Active' :
127
127
  overrideStatus === 'Pending' ? 'Pending' : 'Inactive';
128
128
  const isPendingSource = sourceStatus === 'Pending';
129
- const rawKind = getStringParam(params, "VersionBumpKind");
129
+ const rawKind = GetStringParam(params, "VersionBumpKind");
130
130
  let bumpKind;
131
131
  if (rawKind) {
132
- const parsed = parseVersionBumpKind(rawKind);
132
+ const parsed = ParseVersionBumpKind(rawKind);
133
133
  if (!parsed) {
134
- return failure("INVALID_BUMP_KIND", `Unknown VersionBumpKind '${rawKind}'. Expected one of: 'in-place', 'patch', 'minor', 'major'.`);
134
+ return Failure("INVALID_BUMP_KIND", `Unknown VersionBumpKind '${rawKind}'. Expected one of: 'in-place', 'patch', 'minor', 'major'.`);
135
135
  }
136
136
  bumpKind = parsed;
137
137
  }
@@ -147,7 +147,7 @@ let ModifyInteractiveFormAction = class ModifyInteractiveFormAction extends Base
147
147
  // row achieves nothing — won't re-activate it; use Revert for
148
148
  // that) we reject loudly so the caller corrects intent.
149
149
  if (bumpKind === 'in-place' && !isPendingSource) {
150
- return failure("INVALID_BUMP_FOR_STATUS", `'in-place' is only valid against a Pending Override (got Status='${overrideStatus}'). Use 'patch', 'minor', or 'major' to snapshot a new Pending version from this source; use 'Revert Interactive Form' to re-activate an Inactive historical version.`);
150
+ return Failure("INVALID_BUMP_FOR_STATUS", `'in-place' is only valid against a Pending Override (got Status='${overrideStatus}'). Use 'patch', 'minor', or 'major' to snapshot a new Pending version from this source; use 'Revert Interactive Form' to re-activate an Inactive historical version.`);
151
151
  }
152
152
  if (bumpKind === 'in-place') {
153
153
  // ── in-place modify of the Pending Component ─────────────
@@ -159,7 +159,7 @@ let ModifyInteractiveFormAction = class ModifyInteractiveFormAction extends Base
159
159
  existingComponent.Description = spec.description;
160
160
  const saved = await existingComponent.Save();
161
161
  if (!saved) {
162
- return failure("PERSIST_FAILED", `Component in-place update failed: ${existingComponent.LatestResult?.CompleteMessage ?? 'unknown error'}`);
162
+ return Failure("PERSIST_FAILED", `Component in-place update failed: ${existingComponent.LatestResult?.CompleteMessage ?? 'unknown error'}`);
163
163
  }
164
164
  if (notes) {
165
165
  // Append a line of human-readable notes. The Notes column
@@ -170,10 +170,10 @@ let ModifyInteractiveFormAction = class ModifyInteractiveFormAction extends Base
170
170
  : notes;
171
171
  await override.Save();
172
172
  }
173
- addOutput(params, "ComponentID", existingComponent.ID);
174
- addOutput(params, "OverrideID", override.ID);
175
- addOutput(params, "Mode", "in-place");
176
- addOutput(params, "Version", existingComponent.Version);
173
+ AddOutput(params, "ComponentID", existingComponent.ID);
174
+ AddOutput(params, "OverrideID", override.ID);
175
+ AddOutput(params, "Mode", "in-place");
176
+ AddOutput(params, "Version", existingComponent.Version);
177
177
  return {
178
178
  Success: true, ResultCode: "SUCCESS",
179
179
  Message: JSON.stringify({
@@ -191,9 +191,9 @@ let ModifyInteractiveFormAction = class ModifyInteractiveFormAction extends Base
191
191
  // two concurrent Pendings), and Inactive sources (branch-from-
192
192
  // historical — no demote needed since source is already Inactive,
193
193
  // and the user explicitly opened it to fork from there).
194
- const newVersion = bumpVersion(existingComponent.Version, bumpKind);
194
+ const newVersion = BumpVersion(existingComponent.Version, bumpKind);
195
195
  const newSequence = (existingComponent.VersionSequence ?? 0) + 1;
196
- const componentInsert = await insertComponent({
196
+ const componentInsert = await InsertComponent({
197
197
  provider, user, spec,
198
198
  fallbackName: existingComponent.Name,
199
199
  description: existingComponent.Description,
@@ -208,7 +208,7 @@ let ModifyInteractiveFormAction = class ModifyInteractiveFormAction extends Base
208
208
  // do not widen scope: if existing is User-scoped, new is too. If
209
209
  // somehow existing is Role/Global (manual promotion), we still
210
210
  // honor that — Modify is a content change, not a scope change.
211
- const overrideInsert = await insertOverride({
211
+ const overrideInsert = await InsertOverride({
212
212
  provider, user,
213
213
  entityID: override.EntityID,
214
214
  componentID: newComponentID,
@@ -219,7 +219,7 @@ let ModifyInteractiveFormAction = class ModifyInteractiveFormAction extends Base
219
219
  priority: override.Priority,
220
220
  });
221
221
  if ('error' in overrideInsert) {
222
- return failure("PERSIST_FAILED", `${overrideInsert.error.Message} (Component ${newComponentID} was persisted; its sibling override row failed to write.)`);
222
+ return Failure("PERSIST_FAILED", `${overrideInsert.error.Message} (Component ${newComponentID} was persisted; its sibling override row failed to write.)`);
223
223
  }
224
224
  // Demote the prior Pending source — both the Component row and
225
225
  // its Override row — to Inactive. This preserves the rollback
@@ -234,7 +234,7 @@ let ModifyInteractiveFormAction = class ModifyInteractiveFormAction extends Base
234
234
  // Component table uses 'Draft'/'Published'/'Deprecated' —
235
235
  // map our 'Inactive' lifecycle to the table's 'Deprecated'.
236
236
  try {
237
- existingComponent.Status = mapToComponentStatus('Inactive');
237
+ existingComponent.Status = MapToComponentStatus('Inactive');
238
238
  const ok = await existingComponent.Save();
239
239
  if (ok)
240
240
  demotedComponentID = existingComponent.ID;
@@ -256,10 +256,10 @@ let ModifyInteractiveFormAction = class ModifyInteractiveFormAction extends Base
256
256
  LogError(`ModifyInteractiveFormAction: error demoting prior Pending Override ${override.ID}: ${err instanceof Error ? err.message : String(err)}`);
257
257
  }
258
258
  }
259
- addOutput(params, "ComponentID", newComponentID);
260
- addOutput(params, "OverrideID", overrideInsert.id);
261
- addOutput(params, "Mode", "new-version");
262
- addOutput(params, "Version", newVersion);
259
+ AddOutput(params, "ComponentID", newComponentID);
260
+ AddOutput(params, "OverrideID", overrideInsert.id);
261
+ AddOutput(params, "Mode", "new-version");
262
+ AddOutput(params, "Version", newVersion);
263
263
  return {
264
264
  Success: true, ResultCode: "SUCCESS",
265
265
  Message: JSON.stringify({
@@ -279,7 +279,7 @@ let ModifyInteractiveFormAction = class ModifyInteractiveFormAction extends Base
279
279
  catch (err) {
280
280
  const message = err instanceof Error ? err.message : String(err);
281
281
  LogError(`ModifyInteractiveFormAction: ${message}`);
282
- return failure("UNEXPECTED_ERROR", message);
282
+ return Failure("UNEXPECTED_ERROR", message);
283
283
  }
284
284
  }
285
285
  findParam(params, name) {
@@ -7,7 +7,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
7
7
  import { BaseAction } from "@memberjunction/actions";
8
8
  import { Metadata, LogError, RunView } from "@memberjunction/core";
9
9
  import { RegisterClass, UUIDsEqual } from "@memberjunction/global";
10
- import { addOutput, checkOverrideOwnership, failure, getNumberParam, getStringParam, loadComponent, loadOverride, mapToComponentStatus, } from "./_shared.js";
10
+ import { AddOutput, CheckOverrideOwnership, Failure, GetNumberParam, GetStringParam, LoadComponent, LoadOverride, MapToComponentStatus, } from "./_shared.js";
11
11
  /**
12
12
  * Revert the user's Active override to an older Component version. Pure
13
13
  * re-point: no new Component is created, no new Override row is created.
@@ -42,45 +42,45 @@ import { addOutput, checkOverrideOwnership, failure, getNumberParam, getStringPa
42
42
  let RevertInteractiveFormAction = class RevertInteractiveFormAction extends BaseAction {
43
43
  async InternalRunAction(params) {
44
44
  try {
45
- const activeOverrideID = getStringParam(params, "ActiveOverrideID");
45
+ const activeOverrideID = GetStringParam(params, "ActiveOverrideID");
46
46
  if (!activeOverrideID) {
47
- return failure("MISSING_PARAMETER", "Parameter 'ActiveOverrideID' is required.");
47
+ return Failure("MISSING_PARAMETER", "Parameter 'ActiveOverrideID' is required.");
48
48
  }
49
- const targetComponentID = getStringParam(params, "TargetComponentID");
50
- const targetVersionSequence = getNumberParam(params, "TargetVersionSequence");
49
+ const targetComponentID = GetStringParam(params, "TargetComponentID");
50
+ const targetVersionSequence = GetNumberParam(params, "TargetVersionSequence");
51
51
  if (!targetComponentID && targetVersionSequence == null) {
52
- return failure("MISSING_PARAMETER", "Either 'TargetComponentID' or 'TargetVersionSequence' is required.");
52
+ return Failure("MISSING_PARAMETER", "Either 'TargetComponentID' or 'TargetVersionSequence' is required.");
53
53
  }
54
54
  const provider = params.Provider ?? Metadata.Provider;
55
55
  if (!provider)
56
- return failure("NO_PROVIDER", "No metadata provider available.");
56
+ return Failure("NO_PROVIDER", "No metadata provider available.");
57
57
  const user = params.ContextUser;
58
58
  if (!user)
59
- return failure("NO_USER", "Action requires a ContextUser.");
60
- const override = await loadOverride(provider, user, activeOverrideID);
59
+ return Failure("NO_USER", "Action requires a ContextUser.");
60
+ const override = await LoadOverride(provider, user, activeOverrideID);
61
61
  if (!override) {
62
- return failure("OVERRIDE_NOT_FOUND", `EntityFormOverride '${activeOverrideID}' not found.`);
62
+ return Failure("OVERRIDE_NOT_FOUND", `EntityFormOverride '${activeOverrideID}' not found.`);
63
63
  }
64
- const ownershipFail = checkOverrideOwnership(override, user);
64
+ const ownershipFail = CheckOverrideOwnership(override, user);
65
65
  if (ownershipFail)
66
66
  return ownershipFail;
67
67
  if (override.Status !== 'Active') {
68
- return failure("NOT_ACTIVE", `Override ${activeOverrideID} is not Active (current Status=${override.Status}). Reverting only operates on the Active override row.`);
68
+ return Failure("NOT_ACTIVE", `Override ${activeOverrideID} is not Active (current Status=${override.Status}). Reverting only operates on the Active override row.`);
69
69
  }
70
- const currentComponent = await loadComponent(provider, user, override.ComponentID);
70
+ const currentComponent = await LoadComponent(provider, user, override.ComponentID);
71
71
  if (!currentComponent) {
72
- return failure("COMPONENT_NOT_FOUND", `Active override points at Component ${override.ComponentID} which no longer exists.`);
72
+ return Failure("COMPONENT_NOT_FOUND", `Active override points at Component ${override.ComponentID} which no longer exists.`);
73
73
  }
74
74
  // Resolve target Component
75
75
  let target = null;
76
76
  if (targetComponentID) {
77
- const c = await loadComponent(provider, user, targetComponentID);
77
+ const c = await LoadComponent(provider, user, targetComponentID);
78
78
  if (!c) {
79
- return failure("COMPONENT_NOT_FOUND", `TargetComponentID '${targetComponentID}' not found.`);
79
+ return Failure("COMPONENT_NOT_FOUND", `TargetComponentID '${targetComponentID}' not found.`);
80
80
  }
81
81
  // Confirm same lineage (same Name).
82
82
  if ((c.Name ?? '') !== (currentComponent.Name ?? '')) {
83
- return failure("LINEAGE_MISMATCH", `Target Component name '${c.Name}' differs from current '${currentComponent.Name}'. Revert is restricted to the same Name lineage.`);
83
+ return Failure("LINEAGE_MISMATCH", `Target Component name '${c.Name}' differs from current '${currentComponent.Name}'. Revert is restricted to the same Name lineage.`);
84
84
  }
85
85
  target = { ID: c.ID, Version: c.Version };
86
86
  }
@@ -94,18 +94,18 @@ let RevertInteractiveFormAction = class RevertInteractiveFormAction extends Base
94
94
  MaxRows: 1,
95
95
  }, user);
96
96
  if (!r.Success || (r.Results ?? []).length === 0) {
97
- return failure("COMPONENT_NOT_FOUND", `No Component with VersionSequence=${targetVersionSequence} in lineage '${currentComponent.Name}'.`);
97
+ return Failure("COMPONENT_NOT_FOUND", `No Component with VersionSequence=${targetVersionSequence} in lineage '${currentComponent.Name}'.`);
98
98
  }
99
99
  target = { ID: r.Results[0].ID, Version: r.Results[0].Version };
100
100
  }
101
101
  if (!target) {
102
- return failure("COMPONENT_NOT_FOUND", "Could not resolve target Component.");
102
+ return Failure("COMPONENT_NOT_FOUND", "Could not resolve target Component.");
103
103
  }
104
104
  if (UUIDsEqual(target.ID, currentComponent.ID)) {
105
- addOutput(params, "OverrideID", override.ID);
106
- addOutput(params, "ComponentID", target.ID);
107
- addOutput(params, "PreviousComponentID", null);
108
- addOutput(params, "Version", target.Version);
105
+ AddOutput(params, "OverrideID", override.ID);
106
+ AddOutput(params, "ComponentID", target.ID);
107
+ AddOutput(params, "PreviousComponentID", null);
108
+ AddOutput(params, "Version", target.Version);
109
109
  return { Success: true, ResultCode: "SUCCESS",
110
110
  Message: JSON.stringify({ noop: true, reason: 'TargetComponent is already the Active component.' }) };
111
111
  }
@@ -113,20 +113,20 @@ let RevertInteractiveFormAction = class RevertInteractiveFormAction extends Base
113
113
  override.ComponentID = target.ID;
114
114
  const oSaved = await override.Save();
115
115
  if (!oSaved) {
116
- return failure("PERSIST_FAILED", `Could not re-point Override: ${override.LatestResult?.CompleteMessage ?? 'unknown error'}`);
116
+ return Failure("PERSIST_FAILED", `Could not re-point Override: ${override.LatestResult?.CompleteMessage ?? 'unknown error'}`);
117
117
  }
118
118
  // Flip Component statuses to reflect the new active selection.
119
- const newActive = await loadComponent(provider, user, target.ID);
119
+ const newActive = await LoadComponent(provider, user, target.ID);
120
120
  if (newActive) {
121
- newActive.Status = mapToComponentStatus('Active');
121
+ newActive.Status = MapToComponentStatus('Active');
122
122
  await newActive.Save();
123
123
  }
124
- currentComponent.Status = mapToComponentStatus('Inactive');
124
+ currentComponent.Status = MapToComponentStatus('Inactive');
125
125
  await currentComponent.Save();
126
- addOutput(params, "OverrideID", override.ID);
127
- addOutput(params, "ComponentID", target.ID);
128
- addOutput(params, "PreviousComponentID", currentComponent.ID);
129
- addOutput(params, "Version", target.Version);
126
+ AddOutput(params, "OverrideID", override.ID);
127
+ AddOutput(params, "ComponentID", target.ID);
128
+ AddOutput(params, "PreviousComponentID", currentComponent.ID);
129
+ AddOutput(params, "Version", target.Version);
130
130
  return { Success: true, ResultCode: "SUCCESS",
131
131
  Message: JSON.stringify({
132
132
  OverrideID: override.ID,
@@ -138,7 +138,7 @@ let RevertInteractiveFormAction = class RevertInteractiveFormAction extends Base
138
138
  catch (err) {
139
139
  const message = err instanceof Error ? err.message : String(err);
140
140
  LogError(`RevertInteractiveFormAction: ${message}`);
141
- return failure("UNEXPECTED_ERROR", message);
141
+ return Failure("UNEXPECTED_ERROR", message);
142
142
  }
143
143
  }
144
144
  };
@@ -4,9 +4,19 @@ import type { ActionResultSimple, RunActionParams } from '@memberjunction/action
4
4
  * the patterns the older list actions inline individually — extracted here
5
5
  * so the new actions stay small.
6
6
  */
7
+ export declare function GetStringParam(params: RunActionParams, name: string): string | undefined;
8
+ /** @deprecated Use {@link GetStringParam}. */
7
9
  export declare function getStringParam(params: RunActionParams, name: string): string | undefined;
10
+ export declare function GetBooleanParam(params: RunActionParams, name: string, defaultValue: boolean): boolean;
11
+ /** @deprecated Use {@link GetBooleanParam}. */
8
12
  export declare function getBooleanParam(params: RunActionParams, name: string, defaultValue: boolean): boolean;
13
+ export declare function GetJsonParam<T>(params: RunActionParams, name: string): T | undefined;
14
+ /** @deprecated Use {@link GetJsonParam}. */
9
15
  export declare function getJsonParam<T>(params: RunActionParams, name: string): T | undefined;
16
+ export declare function AddOutputParam(params: RunActionParams, name: string, value: unknown): void;
17
+ /** @deprecated Use {@link AddOutputParam}. */
10
18
  export declare function addOutputParam(params: RunActionParams, name: string, value: unknown): void;
19
+ export declare function MissingParam(name: string): ActionResultSimple;
20
+ /** @deprecated Use {@link MissingParam}. */
11
21
  export declare function missingParam(name: string): ActionResultSimple;
12
22
  //# sourceMappingURL=_action-helpers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"_action-helpers.d.ts","sourceRoot":"","sources":["../../../src/custom/lists/_action-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAExF;;;;GAIG;AAEH,wBAAgB,cAAc,CAAC,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGxF;AAED,wBAAgB,eAAe,CAC7B,MAAM,EAAE,eAAe,EACvB,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,OAAO,GACpB,OAAO,CAOT;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAQpF;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAE1F;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,CAM7D"}
1
+ {"version":3,"file":"_action-helpers.d.ts","sourceRoot":"","sources":["../../../src/custom/lists/_action-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAExF;;;;GAIG;AAEH,wBAAgB,cAAc,CAAC,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGxF;AAED,8CAA8C;AAC9C,wBAAgB,cAAc,CAAC,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAExF;AAED,wBAAgB,eAAe,CAC7B,MAAM,EAAE,eAAe,EACvB,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,OAAO,GACpB,OAAO,CAOT;AAED,+CAA+C;AAC/C,wBAAgB,eAAe,CAC7B,MAAM,EAAE,eAAe,EACvB,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,OAAO,GACpB,OAAO,CAET;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAQpF;AAED,4CAA4C;AAC5C,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAEpF;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAE1F;AAED,8CAA8C;AAC9C,wBAAgB,cAAc,CAAC,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAE1F;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,CAM7D;AAED,4CAA4C;AAC5C,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,CAE7D"}