@futdevpro/nts-dynamo 1.15.23 → 1.15.29

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 (68) hide show
  1. package/README.md +4 -0
  2. package/__documentations/2026-05-17-oai-compatible-providers.md +229 -0
  3. package/_specifications/BACKLOG.md +28 -0
  4. package/build/_models/interfaces/compare-data-options.interface.d.ts +27 -0
  5. package/build/_models/interfaces/compare-data-options.interface.d.ts.map +1 -0
  6. package/build/_models/interfaces/compare-data-options.interface.js +3 -0
  7. package/build/_models/interfaces/compare-data-options.interface.js.map +1 -0
  8. package/build/_models/interfaces/compare-data-result.interface.d.ts +13 -0
  9. package/build/_models/interfaces/compare-data-result.interface.d.ts.map +1 -0
  10. package/build/_models/interfaces/compare-data-result.interface.js +3 -0
  11. package/build/_models/interfaces/compare-data-result.interface.js.map +1 -0
  12. package/build/_modules/ai/_models/interfaces/dynts-ai-cost-event-callback.interface.d.ts +14 -0
  13. package/build/_modules/ai/_models/interfaces/dynts-ai-cost-event-callback.interface.d.ts.map +1 -0
  14. package/build/_modules/ai/_models/interfaces/dynts-ai-cost-event-callback.interface.js +3 -0
  15. package/build/_modules/ai/_models/interfaces/dynts-ai-cost-event-callback.interface.js.map +1 -0
  16. package/build/_modules/ai/_models/interfaces/dynts-ai-cost-event.interface.d.ts +50 -0
  17. package/build/_modules/ai/_models/interfaces/dynts-ai-cost-event.interface.d.ts.map +1 -0
  18. package/build/_modules/ai/_models/interfaces/dynts-ai-cost-event.interface.js +3 -0
  19. package/build/_modules/ai/_models/interfaces/dynts-ai-cost-event.interface.js.map +1 -0
  20. package/build/_modules/ai/_modules/open-ai/_services/oai-embedding.control-service.d.ts.map +1 -1
  21. package/build/_modules/ai/_modules/open-ai/_services/oai-embedding.control-service.js +32 -0
  22. package/build/_modules/ai/_modules/open-ai/_services/oai-embedding.control-service.js.map +1 -1
  23. package/build/_modules/ai/_modules/open-ai/_services/oai-llm-chat.service-base.d.ts.map +1 -1
  24. package/build/_modules/ai/_modules/open-ai/_services/oai-llm-chat.service-base.js +20 -2
  25. package/build/_modules/ai/_modules/open-ai/_services/oai-llm-chat.service-base.js.map +1 -1
  26. package/build/_modules/ai/_modules/open-ai/_services/oai-llm.service-base.d.ts +4 -1
  27. package/build/_modules/ai/_modules/open-ai/_services/oai-llm.service-base.d.ts.map +1 -1
  28. package/build/_modules/ai/_modules/open-ai/_services/oai-llm.service-base.js +28 -1
  29. package/build/_modules/ai/_modules/open-ai/_services/oai-llm.service-base.js.map +1 -1
  30. package/build/_modules/ai/_services/ai-provider.service-base.d.ts +21 -0
  31. package/build/_modules/ai/_services/ai-provider.service-base.d.ts.map +1 -1
  32. package/build/_modules/ai/_services/ai-provider.service-base.js +32 -0
  33. package/build/_modules/ai/_services/ai-provider.service-base.js.map +1 -1
  34. package/build/_modules/local-vector-search/_enums/lvs-search-mode.enum.d.ts +17 -1
  35. package/build/_modules/local-vector-search/_enums/lvs-search-mode.enum.d.ts.map +1 -1
  36. package/build/_modules/local-vector-search/_enums/lvs-search-mode.enum.js +16 -0
  37. package/build/_modules/local-vector-search/_enums/lvs-search-mode.enum.js.map +1 -1
  38. package/build/_modules/local-vector-search/_services/lvs-bm25.util.d.ts +89 -0
  39. package/build/_modules/local-vector-search/_services/lvs-bm25.util.d.ts.map +1 -0
  40. package/build/_modules/local-vector-search/_services/lvs-bm25.util.js +190 -0
  41. package/build/_modules/local-vector-search/_services/lvs-bm25.util.js.map +1 -0
  42. package/build/_modules/local-vector-search/_services/lvs-local-vector-search.data-service.d.ts +18 -2
  43. package/build/_modules/local-vector-search/_services/lvs-local-vector-search.data-service.d.ts.map +1 -1
  44. package/build/_modules/local-vector-search/_services/lvs-local-vector-search.data-service.js +57 -3
  45. package/build/_modules/local-vector-search/_services/lvs-local-vector-search.data-service.js.map +1 -1
  46. package/build/_services/base/data.service.d.ts +63 -0
  47. package/build/_services/base/data.service.d.ts.map +1 -1
  48. package/build/_services/base/data.service.js +189 -0
  49. package/build/_services/base/data.service.js.map +1 -1
  50. package/package.json +1 -1
  51. package/src/_models/interfaces/compare-data-options.interface.ts +27 -0
  52. package/src/_models/interfaces/compare-data-result.interface.ts +12 -0
  53. package/src/_modules/ai/_models/interfaces/dynts-ai-cost-event-callback.interface.ts +14 -0
  54. package/src/_modules/ai/_models/interfaces/dynts-ai-cost-event.interface.ts +56 -0
  55. package/src/_modules/ai/_modules/open-ai/_services/oai-embedding.control-service.spec.ts +92 -0
  56. package/src/_modules/ai/_modules/open-ai/_services/oai-embedding.control-service.ts +38 -4
  57. package/src/_modules/ai/_modules/open-ai/_services/oai-llm-chat.service-base.ts +24 -5
  58. package/src/_modules/ai/_modules/open-ai/_services/oai-llm.service-base.spec.ts +52 -0
  59. package/src/_modules/ai/_modules/open-ai/_services/oai-llm.service-base.ts +39 -10
  60. package/src/_modules/ai/_services/ai-provider.service-base.spec.ts +79 -0
  61. package/src/_modules/ai/_services/ai-provider.service-base.ts +41 -3
  62. package/src/_modules/local-vector-search/_enums/lvs-search-mode.enum.ts +16 -0
  63. package/src/_modules/local-vector-search/_services/lvs-bm25.util.spec.ts +159 -0
  64. package/src/_modules/local-vector-search/_services/lvs-bm25.util.ts +206 -0
  65. package/src/_modules/local-vector-search/_services/lvs-local-vector-search.data-service.spec.ts +135 -0
  66. package/src/_modules/local-vector-search/_services/lvs-local-vector-search.data-service.ts +95 -9
  67. package/src/_services/base/data.service.spec.ts +181 -0
  68. package/src/_services/base/data.service.ts +196 -2
@@ -4,6 +4,7 @@ exports.DyNTS_LVS_VectorDataService = void 0;
4
4
  const fsm_dynamo_1 = require("@futdevpro/fsm-dynamo");
5
5
  const lvs_search_mode_enum_1 = require("../_enums/lvs-search-mode.enum");
6
6
  const lvs_vector_pool_control_service_1 = require("./lvs-vector-pool.control-service");
7
+ const lvs_bm25_util_1 = require("./lvs-bm25.util");
7
8
  const oai_vector_data_service_1 = require("../../ai/_modules/open-ai/_services/data-services/oai-vector-data.service");
8
9
  const global_settings_const_1 = require("../../../_collections/global-settings.const");
9
10
  /**
@@ -89,7 +90,26 @@ class DyNTS_LVS_VectorDataService extends oai_vector_data_service_1.DyNTS_OAI_Ve
89
90
  });
90
91
  }
91
92
  set.limit ??= 3;
92
- const { input, searchInKey, limit, filterBy, searchMode } = set;
93
+ const { input, searchInKey, limit, filterBy, searchMode, hybridWeight, textSearchKey } = set;
94
+ const effectiveMode = searchMode ?? this.defaultSearchMode;
95
+ // Hybrid mode korai validacio
96
+ if (effectiveMode === lvs_search_mode_enum_1.LVS_Search_Mode.hybrid) {
97
+ if (!textSearchKey) {
98
+ throw new fsm_dynamo_1.DyFM_Error({
99
+ ...this.getDefaultErrorSettings('vectorSearch', new Error('textSearchKey is required when searchMode is hybrid')),
100
+ errorCode: `${global_settings_const_1.DyNTS_global_settings.systemShortCodeName}|DyNTS-LVS-VS4`,
101
+ });
102
+ }
103
+ if (hybridWeight) {
104
+ const w = hybridWeight;
105
+ if (!Number.isFinite(w.vector) || !Number.isFinite(w.text) || w.vector < 0 || w.text < 0) {
106
+ throw new fsm_dynamo_1.DyFM_Error({
107
+ ...this.getDefaultErrorSettings('vectorSearch', new Error('hybridWeight.vector and .text must be non-negative finite numbers')),
108
+ errorCode: `${global_settings_const_1.DyNTS_global_settings.systemShortCodeName}|DyNTS-LVS-VS5`,
109
+ });
110
+ }
111
+ }
112
+ }
93
113
  // Validáljuk, hogy a searchInKey létezik-e
94
114
  const property = this.dataParams.properties[searchInKey];
95
115
  if (!property) {
@@ -175,11 +195,45 @@ class DyNTS_LVS_VectorDataService extends oai_vector_data_service_1.DyNTS_OAI_Ve
175
195
  }
176
196
  const queryVector = await this.vectorize(input, property.embeddingModel);
177
197
  // 4. Végrehajtjuk a local vector search-t
178
- const mode = searchMode ?? this.defaultSearchMode;
198
+ const mode = effectiveMode;
179
199
  if (this.debugLog) {
180
200
  fsm_dynamo_1.DyFM_Log.log(`Local vector search: searching with mode "${mode}", limit: ${limit}...`);
181
201
  }
182
- const searchResults = this.vectorPool.search(queryVector, limit, mode);
202
+ let searchResults;
203
+ if (mode === lvs_search_mode_enum_1.LVS_Search_Mode.hybrid) {
204
+ // Hybrid: cosine ALL candidate-re + BM25 ALL candidate-re + min-max norm + weighted sum
205
+ const allCandidatesCosine = this.vectorPool.search(queryVector, dataMap.size, lvs_search_mode_enum_1.LVS_Search_Mode.cosineSimilarity);
206
+ // BM25 corpus epitese a `textSearchKey` property-bol
207
+ const docs = [];
208
+ for (const [docId, dataItem] of dataMap) {
209
+ const textValue = dataItem[textSearchKey];
210
+ docs.push({
211
+ id: docId,
212
+ text: typeof textValue === 'string' ? textValue : '',
213
+ });
214
+ }
215
+ const bm25Corpus = new lvs_bm25_util_1.DyNTS_LVS_BM25_Corpus(docs);
216
+ const bm25Raw = bm25Corpus.score(input);
217
+ const bm25Normalized = (0, lvs_bm25_util_1.dyNTS_LVS_BM25_minMaxNormalize)(bm25Raw);
218
+ const bm25ScoreById = new Map();
219
+ for (const s of bm25Normalized) {
220
+ bm25ScoreById.set(s.id, s.score);
221
+ }
222
+ const wVector = hybridWeight?.vector ?? 0.5;
223
+ const wText = hybridWeight?.text ?? 0.5;
224
+ const merged = allCandidatesCosine.map((c) => {
225
+ const bm25Score = bm25ScoreById.get(c.id) ?? 0;
226
+ return {
227
+ id: c.id,
228
+ score: wVector * c.score + wText * bm25Score,
229
+ };
230
+ });
231
+ merged.sort((a, b) => b.score - a.score);
232
+ searchResults = merged.slice(0, limit);
233
+ }
234
+ else {
235
+ searchResults = this.vectorPool.search(queryVector, limit, mode);
236
+ }
183
237
  if (this.debugLog) {
184
238
  fsm_dynamo_1.DyFM_Log.log(`Local vector search: found ${searchResults.length} results`);
185
239
  }
@@ -1 +1 @@
1
- {"version":3,"file":"lvs-local-vector-search.data-service.js","sourceRoot":"","sources":["../../../../src/_modules/local-vector-search/_services/lvs-local-vector-search.data-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lvs-local-vector-search.data-service.js","sourceRoot":"","sources":["../../../../src/_modules/local-vector-search/_services/lvs-local-vector-search.data-service.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,6 @@
1
1
  import { DyFM_AnyError, DyFM_BasicProperty_Type, DyFM_DataModel_Params, DyFM_DBFilter, DyFM_DSSort, DyFM_Error_Settings, DyFM_Metadata, DyFM_RangeValue, DyFM_SearchQuery, DyFM_SearchResult, DyFM_SpecialSearch } from '@futdevpro/fsm-dynamo';
2
+ import { DyNTS_CompareData_Options } from '../../_models/interfaces/compare-data-options.interface';
3
+ import { DyNTS_CompareData_Result } from '../../_models/interfaces/compare-data-result.interface';
2
4
  import { DyNTS_DBUpdate } from '../../_models/types/db-update.type';
3
5
  import { DyNTS_ArchiveDataService } from './archive-data.service';
4
6
  import { DyNTS_DBService } from './db.service';
@@ -315,5 +317,66 @@ export declare class DyNTS_DataService<T extends DyFM_Metadata> {
315
317
  protected getDefaultErrorSettings(fnName: string, error: DyFM_AnyError,
316
318
  /** @deprecated we wont support the separate user message in the future, use the message instead */
317
319
  useMessageAsUserMessage?: boolean): DyFM_Error_Settings;
320
+ /**
321
+ * Generic, field-szintu osszehasonlitas ket adat-objektum kozott.
322
+ *
323
+ * **Auto-discovery mod** (`options.fields` nelkul): a metodus mindket
324
+ * objektum kulcs-uniojan iter, KIVEVE a `DyFM_Metadata` skip-listet
325
+ * (`_id`, `__created`, `__createdBy`, `__lastModified`, `__lastModifiedBy`).
326
+ *
327
+ * **Scope-szukito mod** (`options.fields = [...]`): KIZAROLAG a felsorolt
328
+ * mezoket vizsgalja. A skip-list IGNORALODIK — explicit fields override.
329
+ *
330
+ * **Custom comparator** (`options.customComparators`): per-field override
331
+ * a default deep-equal helyett (pl. set-equality array-ekre,
332
+ * case-insensitive string compare-re). A custom function `true`-val signal-ozza
333
+ * az equality-t.
334
+ *
335
+ * **Return:** `'equal'` ha minden vizsgalt field egyezik; `'modified'` ha
336
+ * legalabb egy elter — ilyenkor `changedFields` tartalmazza a TELJES
337
+ * mismatch-listat (nem early-return).
338
+ *
339
+ * **Throws:**
340
+ * - `newData` vagy `oldData` null/undefined → `DyFM_Error(400, DyNTS-DS0-CD1)`
341
+ * - `options.fields = []` ures array → `DyFM_Error(400, DyNTS-DS0-CD2)`
342
+ *
343
+ * **Sync method** (nincs I/O szukseglet); a host wrappel-i ha async kell.
344
+ *
345
+ * @example
346
+ * const result = userService.compareData(newUser, oldUser);
347
+ * if (result.result === 'modified') {
348
+ * console.log('Changed:', result.changedFields);
349
+ * }
350
+ *
351
+ * @example // Scope-szukites + custom comparator
352
+ * userService.compareData(newUser, oldUser, {
353
+ * fields: ['email', 'roles'],
354
+ * customComparators: {
355
+ * roles: (a, b) => new Set(a).size === new Set([...a, ...b]).size,
356
+ * },
357
+ * });
358
+ */
359
+ compareData(newData: T, oldData: T, options?: DyNTS_CompareData_Options<T>): DyNTS_CompareData_Result<T>;
360
+ /**
361
+ * Eldonti az osszehasonlitando fields-listat:
362
+ * - explicit `options.fields` esetan annak masolata (skip-list ignoralt)
363
+ * - egyebkent `Object.keys(newData) UNION Object.keys(oldData)` minus skip-list
364
+ */
365
+ private _resolveCompareFields;
366
+ /**
367
+ * Deep-equal helper.
368
+ *
369
+ * - Primitive (`string`/`number`/`boolean`/`null`/`undefined`): `===` / `Object.is`
370
+ * (a `NaN === NaN` esetet `Object.is` kezeli helyesen)
371
+ * - `Date`: `.getTime()` egyenloseg (kulonbozo Date instance-ok same-time-mal egyenlonek)
372
+ * - Array: length + index-szerinti rekurziv deep-equal
373
+ * - POJO: keys-union + per-key rekurzio
374
+ * - Egyeb (RegExp / Map / Set / Buffer): `Object.is` fallback (reference compare)
375
+ *
376
+ * NEM kezelt: cyclic references — a hivo objektum-grafja flat / fa kell legyen
377
+ * (a tipikus FDP data-model esete; cycle eseten stack overflow lesz, ami ertelmes
378
+ * jelzes a programozonak).
379
+ */
380
+ private _deepEqual;
318
381
  }
319
382
  //# sourceMappingURL=data.service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"data.service.d.ts","sourceRoot":"","sources":["../../../src/_services/base/data.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"data.service.d.ts","sourceRoot":"","sources":["../../../src/_services/base/data.service.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,21 @@ const fsm_dynamo_1 = require("@futdevpro/fsm-dynamo");
5
5
  const archive_util_1 = require("../../_collections/archive.util");
6
6
  const global_settings_const_1 = require("../../_collections/global-settings.const");
7
7
  const global_service_1 = require("../core/global.service");
8
+ /**
9
+ * `DyFM_Metadata` field-ek amik auto-discovery modban (fields opcio nelkul)
10
+ * KI vannak hagyva a compareData()-bol. Ezek normal mukodes kozben kezelt
11
+ * mezok (id-allocation, audit timestamps, audit usernames) — szemantikus
12
+ * adatvaltozas-ellenorzeshez irrelevansak.
13
+ *
14
+ * Explicit `fields: ['_id']`-vel meg vizsgaltathato, ha valamiert kell.
15
+ */
16
+ const COMPARE_DATA_METADATA_SKIP_FIELDS = new Set([
17
+ '_id',
18
+ '__created',
19
+ '__createdBy',
20
+ '__lastModified',
21
+ '__lastModifiedBy',
22
+ ]);
8
23
  // TODO: 2 type of archiving service system: within list, or separate db elements
9
24
  /**
10
25
  * Basic Data Service that is connected to the relevant DBServices
@@ -1875,6 +1890,180 @@ class DyNTS_DataService {
1875
1890
  error: error,
1876
1891
  };
1877
1892
  }
1893
+ // ════════════════════════════════════════════════════════════════════════
1894
+ // GENERIC DATA COMPARE (FR-001)
1895
+ // ════════════════════════════════════════════════════════════════════════
1896
+ /**
1897
+ * Generic, field-szintu osszehasonlitas ket adat-objektum kozott.
1898
+ *
1899
+ * **Auto-discovery mod** (`options.fields` nelkul): a metodus mindket
1900
+ * objektum kulcs-uniojan iter, KIVEVE a `DyFM_Metadata` skip-listet
1901
+ * (`_id`, `__created`, `__createdBy`, `__lastModified`, `__lastModifiedBy`).
1902
+ *
1903
+ * **Scope-szukito mod** (`options.fields = [...]`): KIZAROLAG a felsorolt
1904
+ * mezoket vizsgalja. A skip-list IGNORALODIK — explicit fields override.
1905
+ *
1906
+ * **Custom comparator** (`options.customComparators`): per-field override
1907
+ * a default deep-equal helyett (pl. set-equality array-ekre,
1908
+ * case-insensitive string compare-re). A custom function `true`-val signal-ozza
1909
+ * az equality-t.
1910
+ *
1911
+ * **Return:** `'equal'` ha minden vizsgalt field egyezik; `'modified'` ha
1912
+ * legalabb egy elter — ilyenkor `changedFields` tartalmazza a TELJES
1913
+ * mismatch-listat (nem early-return).
1914
+ *
1915
+ * **Throws:**
1916
+ * - `newData` vagy `oldData` null/undefined → `DyFM_Error(400, DyNTS-DS0-CD1)`
1917
+ * - `options.fields = []` ures array → `DyFM_Error(400, DyNTS-DS0-CD2)`
1918
+ *
1919
+ * **Sync method** (nincs I/O szukseglet); a host wrappel-i ha async kell.
1920
+ *
1921
+ * @example
1922
+ * const result = userService.compareData(newUser, oldUser);
1923
+ * if (result.result === 'modified') {
1924
+ * console.log('Changed:', result.changedFields);
1925
+ * }
1926
+ *
1927
+ * @example // Scope-szukites + custom comparator
1928
+ * userService.compareData(newUser, oldUser, {
1929
+ * fields: ['email', 'roles'],
1930
+ * customComparators: {
1931
+ * roles: (a, b) => new Set(a).size === new Set([...a, ...b]).size,
1932
+ * },
1933
+ * });
1934
+ */
1935
+ compareData(newData, oldData, options) {
1936
+ // Input guard
1937
+ if (newData === null || newData === undefined || oldData === null || oldData === undefined) {
1938
+ throw new fsm_dynamo_1.DyFM_Error({
1939
+ ...this.getDefaultErrorSettings('compareData', new Error('newData/oldData required')),
1940
+ status: 400,
1941
+ errorCode: `${global_settings_const_1.DyNTS_global_settings.systemShortCodeName}|DyNTS-DS0-CD1`,
1942
+ message: 'compareData: newData and oldData are required (both must be non-null/undefined)',
1943
+ });
1944
+ }
1945
+ if (options?.fields !== undefined && options.fields.length === 0) {
1946
+ throw new fsm_dynamo_1.DyFM_Error({
1947
+ ...this.getDefaultErrorSettings('compareData', new Error('options.fields must not be empty')),
1948
+ status: 400,
1949
+ errorCode: `${global_settings_const_1.DyNTS_global_settings.systemShortCodeName}|DyNTS-DS0-CD2`,
1950
+ message: 'compareData: options.fields must not be an empty array',
1951
+ });
1952
+ }
1953
+ const fieldsToCheck = this._resolveCompareFields(newData, oldData, options);
1954
+ const comparators = options?.customComparators ?? {};
1955
+ const changedFields = [];
1956
+ for (const field of fieldsToCheck) {
1957
+ const a = newData[field];
1958
+ const b = oldData[field];
1959
+ const isEqual = comparators[field]
1960
+ ? comparators[field](a, b)
1961
+ : this._deepEqual(a, b);
1962
+ if (!isEqual) {
1963
+ changedFields.push(field);
1964
+ }
1965
+ }
1966
+ if (changedFields.length === 0) {
1967
+ return { result: 'equal' };
1968
+ }
1969
+ return { result: 'modified', changedFields: changedFields };
1970
+ }
1971
+ /**
1972
+ * Eldonti az osszehasonlitando fields-listat:
1973
+ * - explicit `options.fields` esetan annak masolata (skip-list ignoralt)
1974
+ * - egyebkent `Object.keys(newData) UNION Object.keys(oldData)` minus skip-list
1975
+ */
1976
+ _resolveCompareFields(newData, oldData, options) {
1977
+ if (options?.fields !== undefined) {
1978
+ // Explicit fields — copy-spread (defensive against caller mutation mid-flight)
1979
+ return [...options.fields];
1980
+ }
1981
+ const keySet = new Set();
1982
+ for (const k of Object.keys(newData)) {
1983
+ keySet.add(k);
1984
+ }
1985
+ for (const k of Object.keys(oldData)) {
1986
+ keySet.add(k);
1987
+ }
1988
+ const result = [];
1989
+ for (const k of keySet) {
1990
+ if (COMPARE_DATA_METADATA_SKIP_FIELDS.has(k)) {
1991
+ continue;
1992
+ }
1993
+ result.push(k);
1994
+ }
1995
+ return result;
1996
+ }
1997
+ /**
1998
+ * Deep-equal helper.
1999
+ *
2000
+ * - Primitive (`string`/`number`/`boolean`/`null`/`undefined`): `===` / `Object.is`
2001
+ * (a `NaN === NaN` esetet `Object.is` kezeli helyesen)
2002
+ * - `Date`: `.getTime()` egyenloseg (kulonbozo Date instance-ok same-time-mal egyenlonek)
2003
+ * - Array: length + index-szerinti rekurziv deep-equal
2004
+ * - POJO: keys-union + per-key rekurzio
2005
+ * - Egyeb (RegExp / Map / Set / Buffer): `Object.is` fallback (reference compare)
2006
+ *
2007
+ * NEM kezelt: cyclic references — a hivo objektum-grafja flat / fa kell legyen
2008
+ * (a tipikus FDP data-model esete; cycle eseten stack overflow lesz, ami ertelmes
2009
+ * jelzes a programozonak).
2010
+ */
2011
+ _deepEqual(a, b) {
2012
+ if (a === b) {
2013
+ return true;
2014
+ }
2015
+ if (Object.is(a, b)) {
2016
+ return true;
2017
+ }
2018
+ // Null/undefined es a masik nem ugyanaz → false
2019
+ if (a === null || a === undefined || b === null || b === undefined) {
2020
+ return false;
2021
+ }
2022
+ // Date
2023
+ if (a instanceof Date && b instanceof Date) {
2024
+ return a.getTime() === b.getTime();
2025
+ }
2026
+ if (a instanceof Date || b instanceof Date) {
2027
+ return false;
2028
+ }
2029
+ // Array
2030
+ if (Array.isArray(a) && Array.isArray(b)) {
2031
+ if (a.length !== b.length) {
2032
+ return false;
2033
+ }
2034
+ for (let i = 0; i < a.length; i++) {
2035
+ if (!this._deepEqual(a[i], b[i])) {
2036
+ return false;
2037
+ }
2038
+ }
2039
+ return true;
2040
+ }
2041
+ if (Array.isArray(a) || Array.isArray(b)) {
2042
+ return false;
2043
+ }
2044
+ // POJO (Object.prototype) — keys union, per-key compare
2045
+ if (typeof a === 'object' && typeof b === 'object') {
2046
+ const keysA = Object.keys(a);
2047
+ const keysB = Object.keys(b);
2048
+ if (keysA.length !== keysB.length) {
2049
+ return false;
2050
+ }
2051
+ const keysAset = new Set(keysA);
2052
+ for (const k of keysB) {
2053
+ if (!keysAset.has(k)) {
2054
+ return false;
2055
+ }
2056
+ }
2057
+ for (const k of keysA) {
2058
+ if (!this._deepEqual(a[k], b[k])) {
2059
+ return false;
2060
+ }
2061
+ }
2062
+ return true;
2063
+ }
2064
+ // Fallback (function, symbol, BigInt, stb.) — strict equality mar nem stimmelt
2065
+ return false;
2066
+ }
1878
2067
  }
1879
2068
  exports.DyNTS_DataService = DyNTS_DataService;
1880
2069
  //# sourceMappingURL=data.service.js.map