@memberjunction/core-entities 5.49.0 → 5.50.0

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 (34) hide show
  1. package/dist/custom/MJListEntityExtended.d.ts +27 -0
  2. package/dist/custom/MJListEntityExtended.d.ts.map +1 -0
  3. package/dist/custom/MJListEntityExtended.js +52 -0
  4. package/dist/custom/MJListEntityExtended.js.map +1 -0
  5. package/dist/custom/Permissions/BaseShareEntityExtended.d.ts.map +1 -1
  6. package/dist/custom/Permissions/BaseShareEntityExtended.js +6 -1
  7. package/dist/custom/Permissions/BaseShareEntityExtended.js.map +1 -1
  8. package/dist/custom/Permissions/MJArtifactPermissionEntityExtended.d.ts.map +1 -1
  9. package/dist/custom/Permissions/MJArtifactPermissionEntityExtended.js +6 -4
  10. package/dist/custom/Permissions/MJArtifactPermissionEntityExtended.js.map +1 -1
  11. package/dist/custom/Permissions/MJCollectionPermissionEntityExtended.d.ts.map +1 -1
  12. package/dist/custom/Permissions/MJCollectionPermissionEntityExtended.js +4 -2
  13. package/dist/custom/Permissions/MJCollectionPermissionEntityExtended.js.map +1 -1
  14. package/dist/engines/UserInfoEngine.d.ts +13 -0
  15. package/dist/engines/UserInfoEngine.d.ts.map +1 -1
  16. package/dist/engines/UserInfoEngine.js +23 -5
  17. package/dist/engines/UserInfoEngine.js.map +1 -1
  18. package/dist/engines/artifacts.d.ts +87 -12
  19. package/dist/engines/artifacts.d.ts.map +1 -1
  20. package/dist/engines/artifacts.js +140 -35
  21. package/dist/engines/artifacts.js.map +1 -1
  22. package/dist/engines/knowledgeHubMetadata.d.ts +26 -4
  23. package/dist/engines/knowledgeHubMetadata.d.ts.map +1 -1
  24. package/dist/engines/knowledgeHubMetadata.js +70 -16
  25. package/dist/engines/knowledgeHubMetadata.js.map +1 -1
  26. package/dist/generated/entity_subclasses.d.ts +1202 -78
  27. package/dist/generated/entity_subclasses.d.ts.map +1 -1
  28. package/dist/generated/entity_subclasses.js +1521 -243
  29. package/dist/generated/entity_subclasses.js.map +1 -1
  30. package/dist/index.d.ts +1 -0
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +1 -0
  33. package/dist/index.js.map +1 -1
  34. package/package.json +6 -6
@@ -1 +1 @@
1
- {"version":3,"file":"artifacts.d.ts","sourceRoot":"","sources":["../../src/engines/artifacts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAA4B,iBAAiB,EAAa,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACpH,OAAO,EACH,oBAAoB,EACpB,gBAAgB,EAChB,uBAAuB,EAC1B,MAAM,gCAAgC,CAAC;AAOxC;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,UAAU,CAAC,sBAAsB,CAAC;IAC1E;;OAEG;IACH,WAAkB,QAAQ,IAAI,sBAAsB,CAEnD;IAED,OAAO,CAAC,cAAc,CAA8B;IACpD,OAAO,CAAC,UAAU,CAA0B;IAC5C,OAAO,CAAC,iBAAiB,CAAiC;IAE7C,MAAM,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,iBAAiB;IAwBhG,IAAW,aAAa,IAAI,oBAAoB,EAAE,CAEjD;IAED,kCAAkC;IAClC,IAAW,SAAS,IAAI,gBAAgB,EAAE,CAEzC;IAED,0CAA0C;IAC1C,IAAW,gBAAgB,IAAI,uBAAuB,EAAE,CAEvD;IAED;;OAEG;IACI,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,oBAAoB,GAAG,SAAS;IAOvE,iCAAiC;IAC1B,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS;IAMjE,yCAAyC;IAClC,uBAAuB,CAAC,EAAE,EAAE,MAAM,GAAG,uBAAuB,GAAG,SAAS;IAM/E,gFAAgF;IACzE,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,uBAAuB,EAAE;IAQ5E,sCAAsC;IAC/B,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG,oBAAoB,GAAG,SAAS;IAMzE;;;OAGG;IACI,cAAc,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO;IAIhE;;;;;;OAMG;IACI,yBAAyB,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,oBAAoB,GAAG,SAAS;IAM5G;;;;;OAKG;IACI,gCAAgC,IAAI,IAAI;IAU/C,OAAO,CAAC,SAAS;CASpB"}
1
+ {"version":3,"file":"artifacts.d.ts","sourceRoot":"","sources":["../../src/engines/artifacts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAA4B,iBAAiB,EAAwC,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAC/I,OAAO,EACH,oBAAoB,EACpB,gBAAgB,EAChB,uBAAuB,EAC1B,MAAM,gCAAgC,CAAC;AAOxC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,qBAAa,sBAAuB,SAAQ,UAAU,CAAC,sBAAsB,CAAC;IAC1E;;OAEG;IACH,WAAkB,QAAQ,IAAI,sBAAsB,CAEnD;IAED,OAAO,CAAC,cAAc,CAA8B;IAKpD,OAAO,CAAC,cAAc,CAAuC;IAC7D,OAAO,CAAC,aAAa,CAA8C;IACnE,OAAO,CAAC,mBAAmB,CAAgD;IAE9D,MAAM,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,iBAAiB;IAYhG,IAAW,aAAa,IAAI,oBAAoB,EAAE,CAEjD;IAED;;;OAGG;IACH,IAAW,eAAe,IAAI,gBAAgB,EAAE,CAE/C;IAED;;;;OAIG;IACH,IAAW,sBAAsB,IAAI,uBAAuB,EAAE,CAE7D;IAED;;OAEG;IACI,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,oBAAoB,GAAG,SAAS;IAOvE;;;;OAIG;IACI,sBAAsB,CAAC,EAAE,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS;IAKvE;;;;OAIG;IACI,6BAA6B,CAAC,EAAE,EAAE,MAAM,GAAG,uBAAuB,GAAG,SAAS;IAKrF;;;;;OAKG;IACI,4BAA4B,CAAC,UAAU,EAAE,MAAM,GAAG,uBAAuB,EAAE;IAMlF;;;;;;;;;;;OAWG;IACU,uBAAuB,CAChC,UAAU,EAAE,MAAM,EAClB,WAAW,CAAC,EAAE,QAAQ,EACtB,QAAQ,CAAC,EAAE,iBAAiB,EAC5B,YAAY,CAAC,EAAE,OAAO,GACvB,OAAO,CAAC,uBAAuB,EAAE,CAAC;IA6BrC;;;;;;;;OAQG;IACU,iBAAiB,CAC1B,SAAS,EAAE,MAAM,EACjB,WAAW,CAAC,EAAE,QAAQ,EACtB,QAAQ,CAAC,EAAE,iBAAiB,EAC5B,YAAY,CAAC,EAAE,OAAO,GACvB,OAAO,CAAC,uBAAuB,GAAG,SAAS,CAAC;IAmB/C,sCAAsC;IAC/B,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG,oBAAoB,GAAG,SAAS;IAMzE;;;OAGG;IACI,cAAc,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO;IAIhE;;;;;;OAMG;IACI,yBAAyB,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,oBAAoB,GAAG,SAAS;IAM5G;;;;;OAKG;IACI,gCAAgC,IAAI,IAAI;IAU/C,OAAO,CAAC,SAAS;CASpB"}
@@ -1,14 +1,49 @@
1
- import { BaseEngine, LogStatus } from "@memberjunction/core";
1
+ import { BaseEngine, LogStatus, RunView } from "@memberjunction/core";
2
2
  import { ResolveArtifactTypeByMime, FindArtifactTypeConflicts, } from "./artifact-mime-resolver.js";
3
3
  /**
4
4
  * Caching of metadata for artifacts, artifact versions, and artifact types.
5
+ *
6
+ * ## Boot payload is bounded by design
7
+ *
8
+ * Only **artifact types** are eagerly loaded at `Config()` time — a small,
9
+ * fixed registry. Artifacts and artifact versions are NOT bulk-loaded: a
10
+ * version's `Content` column holds arbitrarily large payloads (base64 blobs,
11
+ * snapshots, etc.), so eager-loading every version made cold boot download the
12
+ * entire artifact corpus and — because the result dwarfed the local cache
13
+ * budget — wiped the whole client cache on each login. Instead, artifacts and
14
+ * versions are fetched **on demand** for a specific artifact via
15
+ * {@link LoadVersionsForArtifact} / {@link GetVersionContent}, keeping startup
16
+ * cost independent of how much artifact content a deployment has accumulated.
17
+ *
18
+ * The on-demand results are memoized in per-ID maps so the synchronous
19
+ * accessors ({@link FindCachedArtifactByID}, {@link FindCachedArtifactVersionByID},
20
+ * {@link GetCachedVersionsForArtifact}) serve anything already fetched this
21
+ * session. A cache miss is not an error — callers fall back to a direct entity
22
+ * load.
23
+ *
24
+ * ## Naming: `Cached*` accessors are session-scoped, NOT the full corpus
25
+ *
26
+ * The synchronous artifact/version accessors are deliberately prefixed
27
+ * `Cached` (`CachedArtifacts`, `CachedArtifactVersions`, `FindCachedArtifactByID`,
28
+ * `FindCachedArtifactVersionByID`, `GetCachedVersionsForArtifact`) to make it
29
+ * unmistakable that they return only what has been fetched on demand this
30
+ * session — never the entire system's artifacts. They replace the former
31
+ * unprefixed accessors (`Artifacts`, `ArtifactVersions`, `FindArtifactByID`,
32
+ * `FindArtifactVersionByID`, `GetVersionsForArtifact`) whose names implied a
33
+ * full boot-time load that no longer happens. The rename is intentional: it
34
+ * turns any consumer that assumed full-corpus semantics into a hard compile
35
+ * error rather than a silent empty-result regression.
5
36
  */
6
37
  export class ArtifactMetadataEngine extends BaseEngine {
7
38
  constructor() {
8
39
  super(...arguments);
9
40
  this._artifactTypes = [];
10
- this._artifacts = [];
11
- this._artifactVersions = [];
41
+ // On-demand caches — populated lazily by the loaders below, NOT at boot.
42
+ // Keyed by lowercased ID for case-insensitive lookup across SQL Server
43
+ // (uppercase UUIDs) and PostgreSQL (lowercase UUIDs).
44
+ this._artifactCache = new Map();
45
+ this._versionCache = new Map();
46
+ this._versionsByArtifact = new Map();
12
47
  }
13
48
  /**
14
49
  * Returns the global instance of the class. This is a singleton class, so there is only one instance of it in the application. Do not directly create new instances of it, always use this method to get the instance.
@@ -23,18 +58,6 @@ export class ArtifactMetadataEngine extends BaseEngine {
23
58
  EntityName: 'MJ: Artifact Types',
24
59
  PropertyName: "_artifactTypes",
25
60
  CacheLocal: true
26
- },
27
- {
28
- Type: 'entity',
29
- EntityName: 'MJ: Artifacts',
30
- PropertyName: "_artifacts",
31
- CacheLocal: true
32
- },
33
- {
34
- Type: 'entity',
35
- EntityName: 'MJ: Artifact Versions',
36
- PropertyName: "_artifactVersions",
37
- CacheLocal: true
38
61
  }
39
62
  ];
40
63
  await this.Load(c, provider, forceRefresh, contextUser);
@@ -42,13 +65,20 @@ export class ArtifactMetadataEngine extends BaseEngine {
42
65
  get ArtifactTypes() {
43
66
  return this.GetConfigData('_artifactTypes');
44
67
  }
45
- /** All artifacts in the system */
46
- get Artifacts() {
47
- return this.GetConfigData('_artifacts');
68
+ /**
69
+ * Artifacts fetched on demand this session (via {@link LoadVersionsForArtifact}).
70
+ * NOT the full system corpus — artifacts are no longer bulk-loaded at boot.
71
+ */
72
+ get CachedArtifacts() {
73
+ return Array.from(this._artifactCache.values());
48
74
  }
49
- /** All artifact versions in the system */
50
- get ArtifactVersions() {
51
- return this.GetConfigData('_artifactVersions');
75
+ /**
76
+ * Artifact versions fetched on demand this session (via
77
+ * {@link LoadVersionsForArtifact} / {@link GetVersionContent}). NOT the full
78
+ * system corpus — versions are no longer bulk-loaded at boot.
79
+ */
80
+ get CachedArtifactVersions() {
81
+ return Array.from(this._versionCache.values());
52
82
  }
53
83
  /**
54
84
  * Finds an artifact type on a case-insensitive match of name
@@ -59,28 +89,103 @@ export class ArtifactMetadataEngine extends BaseEngine {
59
89
  }
60
90
  return this._artifactTypes.find(c => c.Name.trim().toLowerCase() === name.trim().toLowerCase());
61
91
  }
62
- /** Find an artifact by its ID */
63
- FindArtifactByID(id) {
92
+ /**
93
+ * Find an artifact by its ID among those fetched on demand this session.
94
+ * Returns undefined on a cache miss — call {@link LoadVersionsForArtifact}
95
+ * first, or fall back to a direct entity load.
96
+ */
97
+ FindCachedArtifactByID(id) {
64
98
  if (!id)
65
99
  return undefined;
66
- const lower = id.trim().toLowerCase();
67
- return this._artifacts.find(a => a.ID.trim().toLowerCase() === lower);
100
+ return this._artifactCache.get(id.trim().toLowerCase());
68
101
  }
69
- /** Find an artifact version by its ID */
70
- FindArtifactVersionByID(id) {
102
+ /**
103
+ * Find an artifact version by its ID among those fetched on demand this
104
+ * session. Returns undefined on a cache miss — call {@link GetVersionContent}
105
+ * or {@link LoadVersionsForArtifact} first, or fall back to a direct load.
106
+ */
107
+ FindCachedArtifactVersionByID(id) {
71
108
  if (!id)
72
109
  return undefined;
73
- const lower = id.trim().toLowerCase();
74
- return this._artifactVersions.find(v => v.ID.trim().toLowerCase() === lower);
110
+ return this._versionCache.get(id.trim().toLowerCase());
75
111
  }
76
- /** Get all versions for a given artifact, sorted by VersionNumber descending */
77
- GetVersionsForArtifact(artifactId) {
112
+ /**
113
+ * Get all versions for a given artifact that were fetched on demand this
114
+ * session, sorted by VersionNumber descending. Returns [] if
115
+ * {@link LoadVersionsForArtifact} has not been called for this artifact —
116
+ * this is a synchronous cache read, not a loader.
117
+ */
118
+ GetCachedVersionsForArtifact(artifactId) {
119
+ if (!artifactId)
120
+ return [];
121
+ const cached = this._versionsByArtifact.get(artifactId.trim().toLowerCase());
122
+ return cached ? [...cached] : [];
123
+ }
124
+ /**
125
+ * Loads all versions (including the `Content` column) for a single artifact
126
+ * from the database and memoizes them. This is the on-demand replacement
127
+ * for the former boot-time bulk load: the payload is bounded to one
128
+ * artifact's versions rather than the entire corpus.
129
+ *
130
+ * @param artifactId - the artifact whose versions to load
131
+ * @param contextUser - required server-side for correct user scoping
132
+ * @param provider - optional non-default provider (multi-provider clients)
133
+ * @param forceRefresh - re-query even if already cached this session
134
+ * @returns the artifact's versions, sorted by VersionNumber descending
135
+ */
136
+ async LoadVersionsForArtifact(artifactId, contextUser, provider, forceRefresh) {
78
137
  if (!artifactId)
79
138
  return [];
80
- const lower = artifactId.trim().toLowerCase();
81
- return this._artifactVersions
82
- .filter(v => v.ArtifactID.trim().toLowerCase() === lower)
83
- .sort((a, b) => (b.VersionNumber || 0) - (a.VersionNumber || 0));
139
+ const key = artifactId.trim().toLowerCase();
140
+ if (!forceRefresh && this._versionsByArtifact.has(key)) {
141
+ return this.GetCachedVersionsForArtifact(artifactId);
142
+ }
143
+ const rvProvider = provider ?? this.RunViewProviderToUse;
144
+ const rv = new RunView(rvProvider);
145
+ const result = await rv.RunView({
146
+ EntityName: 'MJ: Artifact Versions',
147
+ ExtraFilter: `ArtifactID='${artifactId.replace(/'/g, "''")}'`,
148
+ OrderBy: 'VersionNumber DESC',
149
+ ResultType: 'entity_object'
150
+ }, contextUser);
151
+ if (!result.Success) {
152
+ LogStatus(`WARN ArtifactMetadataEngine.LoadVersionsForArtifact: failed to load versions for artifact ${artifactId}: ${result.ErrorMessage}`);
153
+ return this.GetCachedVersionsForArtifact(artifactId);
154
+ }
155
+ const versions = result.Results || [];
156
+ this._versionsByArtifact.set(key, versions);
157
+ for (const v of versions) {
158
+ this._versionCache.set(v.ID.trim().toLowerCase(), v);
159
+ }
160
+ return [...versions];
161
+ }
162
+ /**
163
+ * Loads a single artifact version (including `Content`) by ID on demand and
164
+ * memoizes it. Returns undefined if the version can't be loaded.
165
+ *
166
+ * @param versionId - the artifact version to load
167
+ * @param contextUser - required server-side for correct user scoping
168
+ * @param provider - optional non-default provider (multi-provider clients)
169
+ * @param forceRefresh - re-load even if already cached this session
170
+ */
171
+ async GetVersionContent(versionId, contextUser, provider, forceRefresh) {
172
+ if (!versionId)
173
+ return undefined;
174
+ const key = versionId.trim().toLowerCase();
175
+ if (!forceRefresh) {
176
+ const existing = this._versionCache.get(key);
177
+ if (existing)
178
+ return existing;
179
+ }
180
+ const p = provider ?? this.ProviderToUse;
181
+ const version = await p.GetEntityObject('MJ: Artifact Versions', contextUser);
182
+ const loaded = await version.Load(versionId);
183
+ if (!loaded) {
184
+ LogStatus(`WARN ArtifactMetadataEngine.GetVersionContent: failed to load version ${versionId}`);
185
+ return undefined;
186
+ }
187
+ this._versionCache.set(key, version);
188
+ return version;
84
189
  }
85
190
  /** Find an artifact type by its ID */
86
191
  FindArtifactTypeByID(id) {
@@ -1 +1 @@
1
- {"version":3,"file":"artifacts.js","sourceRoot":"","sources":["../../src/engines/artifacts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAA+C,SAAS,EAAY,MAAM,sBAAsB,CAAC;AAMpH,OAAO,EACH,yBAAyB,EACzB,yBAAyB,GAE5B,MAAM,0BAA0B,CAAC;AAElC;;GAEG;AACH,MAAM,OAAO,sBAAuB,SAAQ,UAAkC;IAA9E;;QAQY,mBAAc,GAA2B,EAAE,CAAC;QAC5C,eAAU,GAAuB,EAAE,CAAC;QACpC,sBAAiB,GAA8B,EAAE,CAAC;IA8H9D,CAAC;IAvIG;;OAEG;IACI,MAAM,KAAK,QAAQ;QACvB,OAAO,KAAK,CAAC,WAAW,EAA0B,CAAC;IACtD,CAAC;IAMM,KAAK,CAAC,MAAM,CAAC,YAAsB,EAAE,WAAsB,EAAE,QAA4B;QAC5F,MAAM,CAAC,GAAwC;YAC3C;gBACI,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,oBAAoB;gBAChC,YAAY,EAAE,gBAAgB;gBAC9B,UAAU,EAAE,IAAI;aACnB;YACD;gBACI,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,eAAe;gBAC3B,YAAY,EAAE,YAAY;gBAC1B,UAAU,EAAE,IAAI;aACnB;YACD;gBACI,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,uBAAuB;gBACnC,YAAY,EAAE,mBAAmB;gBACjC,UAAU,EAAE,IAAI;aACnB;SACJ,CAAA;QACD,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;IAC5D,CAAC;IAED,IAAW,aAAa;QACpB,OAAO,IAAI,CAAC,aAAa,CAAuB,gBAAgB,CAAC,CAAC;IACtE,CAAC;IAED,kCAAkC;IAClC,IAAW,SAAS;QAChB,OAAO,IAAI,CAAC,aAAa,CAAmB,YAAY,CAAC,CAAC;IAC9D,CAAC;IAED,0CAA0C;IAC1C,IAAW,gBAAgB;QACvB,OAAO,IAAI,CAAC,aAAa,CAA0B,mBAAmB,CAAC,CAAC;IAC5E,CAAC;IAED;;OAEG;IACI,gBAAgB,CAAC,IAAY;QAChC,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,EAAE,CAAC;YAChC,OAAO,SAAS,CAAC;QACrB,CAAC;QACD,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;IACpG,CAAC;IAED,iCAAiC;IAC1B,gBAAgB,CAAC,EAAU;QAC9B,IAAI,CAAC,EAAE;YAAE,OAAO,SAAS,CAAC;QAC1B,MAAM,KAAK,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACtC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,CAAC;IAC1E,CAAC;IAED,yCAAyC;IAClC,uBAAuB,CAAC,EAAU;QACrC,IAAI,CAAC,EAAE;YAAE,OAAO,SAAS,CAAC;QAC1B,MAAM,KAAK,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACtC,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,CAAC;IACjF,CAAC;IAED,gFAAgF;IACzE,sBAAsB,CAAC,UAAkB;QAC5C,IAAI,CAAC,UAAU;YAAE,OAAO,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC9C,OAAO,IAAI,CAAC,iBAAiB;aACxB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC;aACxD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,aAAa,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,aAAa,IAAI,CAAC,CAAC,CAAC,CAAC;IACzE,CAAC;IAED,sCAAsC;IAC/B,oBAAoB,CAAC,EAAU;QAClC,IAAI,CAAC,EAAE;YAAE,OAAO,SAAS,CAAC;QAC1B,MAAM,KAAK,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACtC,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,CAAC;IAC9E,CAAC;IAED;;;OAGG;IACI,cAAc,CAAC,OAAgC;QAClD,OAAO,OAAO,EAAE,WAAW,KAAK,MAAM,CAAC;IAC3C,CAAC;IAED;;;;;;OAMG;IACI,yBAAyB,CAAC,QAAgB,EAAE,aAAsB;QACrE,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QACjE,MAAM,KAAK,GAAG,yBAAyB,CAAC,QAAQ,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;QAC3E,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACnE,CAAC;IAED;;;;;OAKG;IACI,gCAAgC;QACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QACjE,MAAM,SAAS,GAAG,yBAAyB,CAAC,QAAQ,CAAC,CAAC;QACtD,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;YACxB,SAAS,CACL,gCAAgC,CAAC,CAAC,YAAY,CAAC,MAAM,sCAAsC,CAAC,CAAC,WAAW,cAAc,CAAC,CAAC,QAAQ,oBAAoB,CAAC,CAAC,cAAc,MAAM,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,uFAAuF,CAC7R,CAAC;QACN,CAAC;IACL,CAAC;IAEO,SAAS,CAAC,CAAuB;QACrC,OAAO;YACH,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,cAAc,EAAE,CAAC,CAAC,cAAc;SACnC,CAAC;IACN,CAAC;CACJ"}
1
+ {"version":3,"file":"artifacts.js","sourceRoot":"","sources":["../../src/engines/artifacts.ts"],"names":[],"mappings":"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"}
@@ -13,12 +13,19 @@ export declare class KnowledgeHubMetadataEngine extends BaseEngine<KnowledgeHubM
13
13
  * of it, always use this method to get the instance.
14
14
  */
15
15
  static get Instance(): KnowledgeHubMetadataEngine;
16
+ protected constructor();
16
17
  private _entityDocuments;
17
18
  private _vectorIndexes;
18
19
  private _contentSources;
19
20
  private _contentTypes;
20
21
  private _contentSourceTypes;
21
22
  private _contentFileTypes;
23
+ /**
24
+ * Lazily-built `NormalizeUUID(ID) → row` indexes, one per cached array (keyed by array name),
25
+ * powering the O(1) `Get…ByID` helpers. Cleared wholesale on any {@link DataChange$} emission
26
+ * (see the constructor) so entries never go stale as the underlying caches mutate.
27
+ */
28
+ private _idIndexes;
22
29
  Config(forceRefresh?: boolean, contextUser?: UserInfo, provider?: IMetadataProvider): Promise<void>;
23
30
  /** All entity documents in the system (both active and inactive) */
24
31
  get EntityDocuments(): MJEntityDocumentEntity[];
@@ -34,12 +41,27 @@ export declare class KnowledgeHubMetadataEngine extends BaseEngine<KnowledgeHubM
34
41
  get ContentFileTypes(): MJContentFileTypeEntity[];
35
42
  /** Returns only entity documents with Status = 'Active' */
36
43
  GetActiveEntityDocuments(): MJEntityDocumentEntity[];
37
- /** Find an entity document by ID (case-insensitive UUID comparison) */
38
- GetEntityDocumentById(id: string): MJEntityDocumentEntity | undefined;
44
+ /**
45
+ * Returns a cached `NormalizeUUID(ID) row` index for one of the engine's cached arrays,
46
+ * building it on first use. The whole index cache is cleared on any {@link DataChange$}
47
+ * emission, so a returned index is always consistent with the current cache contents.
48
+ * O(N) to build once, then O(1) per lookup.
49
+ */
50
+ private getIDIndex;
51
+ /** Find an entity document by ID (case-insensitive UUID comparison). O(1) after first hit. */
52
+ GetEntityDocumentByID(id: string): MJEntityDocumentEntity | undefined;
53
+ /** Find a content source by ID (case-insensitive UUID comparison). O(1) after first hit. */
54
+ GetContentSourceByID(id: string): MJContentSourceEntity | undefined;
55
+ /** Find a content type by ID (case-insensitive UUID comparison). O(1) after first hit. */
56
+ GetContentTypeByID(id: string): MJContentTypeEntity | undefined;
57
+ /** Find a content source type by ID (case-insensitive UUID comparison). O(1) after first hit. */
58
+ GetContentSourceTypeByID(id: string): MJContentSourceTypeEntity | undefined;
59
+ /** Find a content file type by ID (case-insensitive UUID comparison). O(1) after first hit. */
60
+ GetContentFileTypeByID(id: string): MJContentFileTypeEntity | undefined;
39
61
  /** Find all entity documents for a given entity name (case-insensitive) */
40
62
  GetEntityDocumentsForEntity(entityName: string): MJEntityDocumentEntity[];
41
- /** Find a vector index by ID (case-insensitive UUID comparison) */
42
- GetVectorIndexById(id: string): MJVectorIndexEntity | undefined;
63
+ /** Find a vector index by ID (case-insensitive UUID comparison). O(1) after first hit. */
64
+ GetVectorIndexByID(id: string): MJVectorIndexEntity | undefined;
43
65
  /**
44
66
  * Returns distinct entity names that have active entity documents (for dropdowns).
45
67
  * Sorted alphabetically.
@@ -1 +1 @@
1
- {"version":3,"file":"knowledgeHubMetadata.d.ts","sourceRoot":"","sources":["../../src/engines/knowledgeHubMetadata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAA4B,iBAAiB,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEzG,OAAO,EACH,sBAAsB,EACtB,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACnB,yBAAyB,EACzB,uBAAuB,EAC1B,MAAM,gCAAgC,CAAC;AAExC;;;;;GAKG;AACH,qBAAa,0BAA2B,SAAQ,UAAU,CAAC,0BAA0B,CAAC;IAClF;;;;OAIG;IACH,WAAkB,QAAQ,IAAI,0BAA0B,CAEvD;IAED,OAAO,CAAC,gBAAgB,CAAgC;IACxD,OAAO,CAAC,cAAc,CAA6B;IACnD,OAAO,CAAC,eAAe,CAA+B;IACtD,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,mBAAmB,CAAmC;IAC9D,OAAO,CAAC,iBAAiB,CAAiC;IAE7C,MAAM,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,iBAAiB;IA8ChG,oEAAoE;IACpE,IAAW,eAAe,IAAI,sBAAsB,EAAE,CAErD;IAED,uCAAuC;IACvC,IAAW,aAAa,IAAI,mBAAmB,EAAE,CAEhD;IAED,0BAA0B;IAC1B,IAAW,cAAc,IAAI,qBAAqB,EAAE,CAEnD;IAED,wBAAwB;IACxB,IAAW,YAAY,IAAI,mBAAmB,EAAE,CAE/C;IAED,uDAAuD;IACvD,IAAW,kBAAkB,IAAI,yBAAyB,EAAE,CAE3D;IAED,iDAAiD;IACjD,IAAW,gBAAgB,IAAI,uBAAuB,EAAE,CAEvD;IAMD,2DAA2D;IACpD,wBAAwB,IAAI,sBAAsB,EAAE;IAI3D,uEAAuE;IAChE,qBAAqB,CAAC,EAAE,EAAE,MAAM,GAAG,sBAAsB,GAAG,SAAS;IAK5E,2EAA2E;IACpE,2BAA2B,CAAC,UAAU,EAAE,MAAM,GAAG,sBAAsB,EAAE;IAMhF,mEAAmE;IAC5D,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,mBAAmB,GAAG,SAAS;IAKtE;;;OAGG;IACI,wBAAwB,IAAI,MAAM,EAAE;CAS9C"}
1
+ {"version":3,"file":"knowledgeHubMetadata.d.ts","sourceRoot":"","sources":["../../src/engines/knowledgeHubMetadata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAwC,iBAAiB,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAErH,OAAO,EACH,sBAAsB,EACtB,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACnB,yBAAyB,EACzB,uBAAuB,EAC1B,MAAM,gCAAgC,CAAC;AAExC;;;;;GAKG;AACH,qBAAa,0BAA2B,SAAQ,UAAU,CAAC,0BAA0B,CAAC;IAClF;;;;OAIG;IACH,WAAkB,QAAQ,IAAI,0BAA0B,CAEvD;IAED,SAAS;IAQT,OAAO,CAAC,gBAAgB,CAAgC;IACxD,OAAO,CAAC,cAAc,CAA6B;IACnD,OAAO,CAAC,eAAe,CAA+B;IACtD,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,mBAAmB,CAAmC;IAC9D,OAAO,CAAC,iBAAiB,CAAiC;IAE1D;;;;OAIG;IACH,OAAO,CAAC,UAAU,CAA8C;IAEnD,MAAM,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,iBAAiB;IA8ChG,oEAAoE;IACpE,IAAW,eAAe,IAAI,sBAAsB,EAAE,CAErD;IAED,uCAAuC;IACvC,IAAW,aAAa,IAAI,mBAAmB,EAAE,CAEhD;IAED,0BAA0B;IAC1B,IAAW,cAAc,IAAI,qBAAqB,EAAE,CAEnD;IAED,wBAAwB;IACxB,IAAW,YAAY,IAAI,mBAAmB,EAAE,CAE/C;IAED,uDAAuD;IACvD,IAAW,kBAAkB,IAAI,yBAAyB,EAAE,CAE3D;IAED,iDAAiD;IACjD,IAAW,gBAAgB,IAAI,uBAAuB,EAAE,CAEvD;IAMD,2DAA2D;IACpD,wBAAwB,IAAI,sBAAsB,EAAE;IAI3D;;;;;OAKG;IACH,OAAO,CAAC,UAAU;IAclB,8FAA8F;IACvF,qBAAqB,CAAC,EAAE,EAAE,MAAM,GAAG,sBAAsB,GAAG,SAAS;IAK5E,4FAA4F;IACrF,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG,qBAAqB,GAAG,SAAS;IAK1E,0FAA0F;IACnF,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,mBAAmB,GAAG,SAAS;IAKtE,iGAAiG;IAC1F,wBAAwB,CAAC,EAAE,EAAE,MAAM,GAAG,yBAAyB,GAAG,SAAS;IAKlF,+FAA+F;IACxF,sBAAsB,CAAC,EAAE,EAAE,MAAM,GAAG,uBAAuB,GAAG,SAAS;IAK9E,2EAA2E;IACpE,2BAA2B,CAAC,UAAU,EAAE,MAAM,GAAG,sBAAsB,EAAE;IAMhF,0FAA0F;IACnF,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,mBAAmB,GAAG,SAAS;IAKtE;;;OAGG;IACI,wBAAwB,IAAI,MAAM,EAAE;CAS9C"}
@@ -1,5 +1,5 @@
1
1
  import { BaseEngine } from "@memberjunction/core";
2
- import { UUIDsEqual } from "@memberjunction/global";
2
+ import { NormalizeUUID } from "@memberjunction/global";
3
3
  /**
4
4
  * Caches Knowledge Hub metadata: entity documents, vector indexes, vector databases,
5
5
  * content sources, content types, content source types, and content file types.
@@ -7,15 +7,6 @@ import { UUIDsEqual } from "@memberjunction/global";
7
7
  * caching and entity-event auto-refresh.
8
8
  */
9
9
  export class KnowledgeHubMetadataEngine extends BaseEngine {
10
- constructor() {
11
- super(...arguments);
12
- this._entityDocuments = [];
13
- this._vectorIndexes = [];
14
- this._contentSources = [];
15
- this._contentTypes = [];
16
- this._contentSourceTypes = [];
17
- this._contentFileTypes = [];
18
- }
19
10
  /**
20
11
  * Returns the global instance of the class. This is a singleton class, so there
21
12
  * is only one instance of it in the application. Do not directly create new instances
@@ -24,6 +15,25 @@ export class KnowledgeHubMetadataEngine extends BaseEngine {
24
15
  static get Instance() {
25
16
  return super.getInstance();
26
17
  }
18
+ constructor() {
19
+ super();
20
+ this._entityDocuments = [];
21
+ this._vectorIndexes = [];
22
+ this._contentSources = [];
23
+ this._contentTypes = [];
24
+ this._contentSourceTypes = [];
25
+ this._contentFileTypes = [];
26
+ /**
27
+ * Lazily-built `NormalizeUUID(ID) → row` indexes, one per cached array (keyed by array name),
28
+ * powering the O(1) `Get…ByID` helpers. Cleared wholesale on any {@link DataChange$} emission
29
+ * (see the constructor) so entries never go stale as the underlying caches mutate.
30
+ */
31
+ this._idIndexes = new Map();
32
+ // Any data change (add/update/delete or full refresh, on any cached array) invalidates the
33
+ // by-id indexes wholesale — the cheapest correct strategy, since NotifyDataChange fires on
34
+ // every BaseEngine mutation path. Lazily rebuilt on the next lookup.
35
+ this.DataChange$.subscribe(() => this._idIndexes.clear());
36
+ }
27
37
  async Config(forceRefresh, contextUser, provider) {
28
38
  const c = [
29
39
  {
@@ -99,11 +109,55 @@ export class KnowledgeHubMetadataEngine extends BaseEngine {
99
109
  GetActiveEntityDocuments() {
100
110
  return this._entityDocuments.filter(d => d.Status === 'Active');
101
111
  }
102
- /** Find an entity document by ID (case-insensitive UUID comparison) */
103
- GetEntityDocumentById(id) {
112
+ /**
113
+ * Returns a cached `NormalizeUUID(ID) → row` index for one of the engine's cached arrays,
114
+ * building it on first use. The whole index cache is cleared on any {@link DataChange$}
115
+ * emission, so a returned index is always consistent with the current cache contents.
116
+ * O(N) to build once, then O(1) per lookup.
117
+ */
118
+ getIDIndex(key, rows, idOf) {
119
+ // Downcast is safe by construction: each `key` is only ever paired with one row type.
120
+ let index = this._idIndexes.get(key);
121
+ if (!index) {
122
+ index = new Map();
123
+ for (const row of rows) {
124
+ const id = idOf(row);
125
+ if (id)
126
+ index.set(NormalizeUUID(id), row);
127
+ }
128
+ this._idIndexes.set(key, index);
129
+ }
130
+ return index;
131
+ }
132
+ /** Find an entity document by ID (case-insensitive UUID comparison). O(1) after first hit. */
133
+ GetEntityDocumentByID(id) {
134
+ if (!id)
135
+ return undefined;
136
+ return this.getIDIndex('entityDocuments', this._entityDocuments, d => d.ID).get(NormalizeUUID(id));
137
+ }
138
+ /** Find a content source by ID (case-insensitive UUID comparison). O(1) after first hit. */
139
+ GetContentSourceByID(id) {
140
+ if (!id)
141
+ return undefined;
142
+ return this.getIDIndex('contentSources', this._contentSources, s => s.ID).get(NormalizeUUID(id));
143
+ }
144
+ /** Find a content type by ID (case-insensitive UUID comparison). O(1) after first hit. */
145
+ GetContentTypeByID(id) {
146
+ if (!id)
147
+ return undefined;
148
+ return this.getIDIndex('contentTypes', this._contentTypes, t => t.ID).get(NormalizeUUID(id));
149
+ }
150
+ /** Find a content source type by ID (case-insensitive UUID comparison). O(1) after first hit. */
151
+ GetContentSourceTypeByID(id) {
152
+ if (!id)
153
+ return undefined;
154
+ return this.getIDIndex('contentSourceTypes', this._contentSourceTypes, t => t.ID).get(NormalizeUUID(id));
155
+ }
156
+ /** Find a content file type by ID (case-insensitive UUID comparison). O(1) after first hit. */
157
+ GetContentFileTypeByID(id) {
104
158
  if (!id)
105
159
  return undefined;
106
- return this._entityDocuments.find(d => UUIDsEqual(d.ID, id));
160
+ return this.getIDIndex('contentFileTypes', this._contentFileTypes, t => t.ID).get(NormalizeUUID(id));
107
161
  }
108
162
  /** Find all entity documents for a given entity name (case-insensitive) */
109
163
  GetEntityDocumentsForEntity(entityName) {
@@ -112,11 +166,11 @@ export class KnowledgeHubMetadataEngine extends BaseEngine {
112
166
  const lower = entityName.trim().toLowerCase();
113
167
  return this._entityDocuments.filter(d => d.Entity?.trim().toLowerCase() === lower);
114
168
  }
115
- /** Find a vector index by ID (case-insensitive UUID comparison) */
116
- GetVectorIndexById(id) {
169
+ /** Find a vector index by ID (case-insensitive UUID comparison). O(1) after first hit. */
170
+ GetVectorIndexByID(id) {
117
171
  if (!id)
118
172
  return undefined;
119
- return this._vectorIndexes.find(v => UUIDsEqual(v.ID, id));
173
+ return this.getIDIndex('vectorIndexes', this._vectorIndexes, v => v.ID).get(NormalizeUUID(id));
120
174
  }
121
175
  /**
122
176
  * Returns distinct entity names that have active entity documents (for dropdowns).
@@ -1 +1 @@
1
- {"version":3,"file":"knowledgeHubMetadata.js","sourceRoot":"","sources":["../../src/engines/knowledgeHubMetadata.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"knowledgeHubMetadata.js","sourceRoot":"","sources":["../../src/engines/knowledgeHubMetadata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAqE,MAAM,sBAAsB,CAAC;AACrH,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAUvD;;;;;GAKG;AACH,MAAM,OAAO,0BAA2B,SAAQ,UAAsC;IAClF;;;;OAIG;IACI,MAAM,KAAK,QAAQ;QACtB,OAAO,KAAK,CAAC,WAAW,EAA8B,CAAC;IAC3D,CAAC;IAED;QACI,KAAK,EAAE,CAAC;QAOJ,qBAAgB,GAA6B,EAAE,CAAC;QAChD,mBAAc,GAA0B,EAAE,CAAC;QAC3C,oBAAe,GAA4B,EAAE,CAAC;QAC9C,kBAAa,GAA0B,EAAE,CAAC;QAC1C,wBAAmB,GAAgC,EAAE,CAAC;QACtD,sBAAiB,GAA8B,EAAE,CAAC;QAE1D;;;;WAIG;QACK,eAAU,GAAG,IAAI,GAAG,EAAmC,CAAC;QAlB5D,2FAA2F;QAC3F,2FAA2F;QAC3F,qEAAqE;QACrE,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC;IAC9D,CAAC;IAgBM,KAAK,CAAC,MAAM,CAAC,YAAsB,EAAE,WAAsB,EAAE,QAA4B;QAC5F,MAAM,CAAC,GAAwC;YAC3C;gBACI,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,sBAAsB;gBAClC,YAAY,EAAE,kBAAkB;gBAChC,UAAU,EAAE,IAAI;aACnB;YACD;gBACI,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,oBAAoB;gBAChC,YAAY,EAAE,gBAAgB;gBAC9B,UAAU,EAAE,IAAI;aACnB;YACD;gBACI,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,qBAAqB;gBACjC,YAAY,EAAE,iBAAiB;gBAC/B,UAAU,EAAE,IAAI;aACnB;YACD;gBACI,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,mBAAmB;gBAC/B,YAAY,EAAE,eAAe;gBAC7B,UAAU,EAAE,IAAI;aACnB;YACD;gBACI,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,0BAA0B;gBACtC,YAAY,EAAE,qBAAqB;gBACnC,UAAU,EAAE,IAAI;aACnB;YACD;gBACI,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,wBAAwB;gBACpC,YAAY,EAAE,mBAAmB;gBACjC,UAAU,EAAE,IAAI;aACnB;SACJ,CAAC;QACF,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;IAC5D,CAAC;IAED,mEAAmE;IACnE,sBAAsB;IACtB,mEAAmE;IAEnE,oEAAoE;IACpE,IAAW,eAAe;QACtB,OAAO,IAAI,CAAC,gBAAgB,CAAC;IACjC,CAAC;IAED,uCAAuC;IACvC,IAAW,aAAa;QACpB,OAAO,IAAI,CAAC,cAAc,CAAC;IAC/B,CAAC;IAED,0BAA0B;IAC1B,IAAW,cAAc;QACrB,OAAO,IAAI,CAAC,eAAe,CAAC;IAChC,CAAC;IAED,wBAAwB;IACxB,IAAW,YAAY;QACnB,OAAO,IAAI,CAAC,aAAa,CAAC;IAC9B,CAAC;IAED,uDAAuD;IACvD,IAAW,kBAAkB;QACzB,OAAO,IAAI,CAAC,mBAAmB,CAAC;IACpC,CAAC;IAED,iDAAiD;IACjD,IAAW,gBAAgB;QACvB,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAClC,CAAC;IAED,mEAAmE;IACnE,iBAAiB;IACjB,mEAAmE;IAEnE,2DAA2D;IACpD,wBAAwB;QAC3B,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC;IACpE,CAAC;IAED;;;;;OAKG;IACK,UAAU,CAAuB,GAAW,EAAE,IAAS,EAAE,IAAwB;QACrF,sFAAsF;QACtF,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAA+B,CAAC;QACnE,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,KAAK,GAAG,IAAI,GAAG,EAAa,CAAC;YAC7B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACrB,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;gBACrB,IAAI,EAAE;oBAAE,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;YAC9C,CAAC;YACD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACpC,CAAC;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,8FAA8F;IACvF,qBAAqB,CAAC,EAAU;QACnC,IAAI,CAAC,EAAE;YAAE,OAAO,SAAS,CAAC;QAC1B,OAAO,IAAI,CAAC,UAAU,CAAC,iBAAiB,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC;IACvG,CAAC;IAED,4FAA4F;IACrF,oBAAoB,CAAC,EAAU;QAClC,IAAI,CAAC,EAAE;YAAE,OAAO,SAAS,CAAC;QAC1B,OAAO,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC;IACrG,CAAC;IAED,0FAA0F;IACnF,kBAAkB,CAAC,EAAU;QAChC,IAAI,CAAC,EAAE;YAAE,OAAO,SAAS,CAAC;QAC1B,OAAO,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC;IACjG,CAAC;IAED,iGAAiG;IAC1F,wBAAwB,CAAC,EAAU;QACtC,IAAI,CAAC,EAAE;YAAE,OAAO,SAAS,CAAC;QAC1B,OAAO,IAAI,CAAC,UAAU,CAAC,oBAAoB,EAAE,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7G,CAAC;IAED,+FAA+F;IACxF,sBAAsB,CAAC,EAAU;QACpC,IAAI,CAAC,EAAE;YAAE,OAAO,SAAS,CAAC;QAC1B,OAAO,IAAI,CAAC,UAAU,CAAC,kBAAkB,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC;IACzG,CAAC;IAED,2EAA2E;IACpE,2BAA2B,CAAC,UAAkB;QACjD,IAAI,CAAC,UAAU;YAAE,OAAO,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC9C,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,CAAC;IACvF,CAAC;IAED,0FAA0F;IACnF,kBAAkB,CAAC,EAAU;QAChC,IAAI,CAAC,EAAE;YAAE,OAAO,SAAS,CAAC;QAC1B,OAAO,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC;IACnG,CAAC;IAED;;;OAGG;IACI,wBAAwB;QAC3B,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAClC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtC,IAAI,GAAG,CAAC,MAAM,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;gBACxC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC5B,CAAC;QACL,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;IACtC,CAAC;CACJ"}