@memberjunction/core 6.1.0-edge.5 → 6.1.0-edge.7

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 (98) hide show
  1. package/dist/generic/JSONType-interfaces/IEntitySubtypeSelectorConfig.d.ts +27 -0
  2. package/dist/generic/JSONType-interfaces/IEntitySubtypeSelectorConfig.d.ts.map +1 -0
  3. package/dist/generic/JSONType-interfaces/IEntitySubtypeSelectorConfig.js +6 -0
  4. package/dist/generic/JSONType-interfaces/IEntitySubtypeSelectorConfig.js.map +1 -0
  5. package/dist/generic/baseEngine.d.ts +52 -1
  6. package/dist/generic/baseEngine.d.ts.map +1 -1
  7. package/dist/generic/baseEngine.js +95 -7
  8. package/dist/generic/baseEngine.js.map +1 -1
  9. package/dist/generic/baseEntity.d.ts +292 -0
  10. package/dist/generic/baseEntity.d.ts.map +1 -1
  11. package/dist/generic/baseEntity.js +878 -98
  12. package/dist/generic/baseEntity.js.map +1 -1
  13. package/dist/generic/baseInfo.d.ts +6 -0
  14. package/dist/generic/baseInfo.d.ts.map +1 -1
  15. package/dist/generic/baseInfo.js +19 -1
  16. package/dist/generic/baseInfo.js.map +1 -1
  17. package/dist/generic/compositeKey.d.ts +108 -0
  18. package/dist/generic/compositeKey.d.ts.map +1 -1
  19. package/dist/generic/compositeKey.js +225 -10
  20. package/dist/generic/compositeKey.js.map +1 -1
  21. package/dist/generic/databaseProviderBase.d.ts +49 -0
  22. package/dist/generic/databaseProviderBase.d.ts.map +1 -1
  23. package/dist/generic/databaseProviderBase.js +90 -11
  24. package/dist/generic/databaseProviderBase.js.map +1 -1
  25. package/dist/generic/embeddedRecord.d.ts +2 -1
  26. package/dist/generic/embeddedRecord.d.ts.map +1 -1
  27. package/dist/generic/embeddedRecord.js +9 -2
  28. package/dist/generic/embeddedRecord.js.map +1 -1
  29. package/dist/generic/entityCompanion.d.ts +6 -1
  30. package/dist/generic/entityCompanion.d.ts.map +1 -1
  31. package/dist/generic/entityCompanion.js +7 -0
  32. package/dist/generic/entityCompanion.js.map +1 -1
  33. package/dist/generic/entityInfo.d.ts +550 -8
  34. package/dist/generic/entityInfo.d.ts.map +1 -1
  35. package/dist/generic/entityInfo.js +695 -20
  36. package/dist/generic/entityInfo.js.map +1 -1
  37. package/dist/generic/entitySubtypeResolver.d.ts +19 -0
  38. package/dist/generic/entitySubtypeResolver.d.ts.map +1 -0
  39. package/dist/generic/entitySubtypeResolver.js +24 -0
  40. package/dist/generic/entitySubtypeResolver.js.map +1 -0
  41. package/dist/generic/entityTransactionScope.d.ts +6 -3
  42. package/dist/generic/entityTransactionScope.d.ts.map +1 -1
  43. package/dist/generic/entityTransactionScope.js +6 -3
  44. package/dist/generic/entityTransactionScope.js.map +1 -1
  45. package/dist/generic/extendedTypeValue.d.ts +47 -0
  46. package/dist/generic/extendedTypeValue.d.ts.map +1 -0
  47. package/dist/generic/extendedTypeValue.js +152 -0
  48. package/dist/generic/extendedTypeValue.js.map +1 -0
  49. package/dist/generic/filters/compositeFilter.d.ts +77 -0
  50. package/dist/generic/filters/compositeFilter.d.ts.map +1 -0
  51. package/dist/generic/filters/compositeFilter.js +324 -0
  52. package/dist/generic/filters/compositeFilter.js.map +1 -0
  53. package/dist/generic/filters/filter.types.d.ts +29 -0
  54. package/dist/generic/filters/filter.types.d.ts.map +1 -0
  55. package/dist/generic/filters/filter.types.js +28 -0
  56. package/dist/generic/filters/filter.types.js.map +1 -0
  57. package/dist/generic/filters/index.d.ts +3 -0
  58. package/dist/generic/filters/index.d.ts.map +1 -0
  59. package/dist/generic/filters/index.js +3 -0
  60. package/dist/generic/filters/index.js.map +1 -0
  61. package/dist/generic/geoFields.d.ts +64 -0
  62. package/dist/generic/geoFields.d.ts.map +1 -0
  63. package/dist/generic/geoFields.js +108 -0
  64. package/dist/generic/geoFields.js.map +1 -0
  65. package/dist/generic/interfaces.d.ts +16 -2
  66. package/dist/generic/interfaces.d.ts.map +1 -1
  67. package/dist/generic/interfaces.js.map +1 -1
  68. package/dist/generic/localCacheManager.d.ts +34 -3
  69. package/dist/generic/localCacheManager.d.ts.map +1 -1
  70. package/dist/generic/localCacheManager.js +53 -4
  71. package/dist/generic/localCacheManager.js.map +1 -1
  72. package/dist/generic/providerBase.d.ts +282 -5
  73. package/dist/generic/providerBase.d.ts.map +1 -1
  74. package/dist/generic/providerBase.js +754 -93
  75. package/dist/generic/providerBase.js.map +1 -1
  76. package/dist/generic/recordChangeFieldSecurity.d.ts +164 -0
  77. package/dist/generic/recordChangeFieldSecurity.d.ts.map +1 -0
  78. package/dist/generic/recordChangeFieldSecurity.js +279 -0
  79. package/dist/generic/recordChangeFieldSecurity.js.map +1 -0
  80. package/dist/generic/relatedRecordBatchLoader.js +2 -2
  81. package/dist/generic/relatedRecordBatchLoader.js.map +1 -1
  82. package/dist/generic/relatedRecordCollection.d.ts +2 -1
  83. package/dist/generic/relatedRecordCollection.d.ts.map +1 -1
  84. package/dist/generic/relatedRecordCollection.js +16 -4
  85. package/dist/generic/relatedRecordCollection.js.map +1 -1
  86. package/dist/generic/saveEntityGraphOperation.d.ts +10 -0
  87. package/dist/generic/saveEntityGraphOperation.d.ts.map +1 -1
  88. package/dist/generic/saveEntityGraphOperation.js +2 -1
  89. package/dist/generic/saveEntityGraphOperation.js.map +1 -1
  90. package/dist/generic/wellKnownUserSource.d.ts +70 -0
  91. package/dist/generic/wellKnownUserSource.d.ts.map +1 -0
  92. package/dist/generic/wellKnownUserSource.js +82 -0
  93. package/dist/generic/wellKnownUserSource.js.map +1 -0
  94. package/dist/index.d.ts +7 -0
  95. package/dist/index.d.ts.map +1 -1
  96. package/dist/index.js +7 -0
  97. package/dist/index.js.map +1 -1
  98. package/package.json +3 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extendedTypeValue.js","sourceRoot":"","sources":["../../src/generic/extendedTypeValue.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * OOP wrapper around {@link CompositeFilterDescriptor}.
3
+ *
4
+ * The descriptor stays the portable JSON (Kendo / User Views). This class is how you
5
+ * construct, evaluate, and summarize that JSON. Views still compile to SQL via
6
+ * `GenerateWhereClause`; `Evaluate` is for prices, processes, and anything that is
7
+ * not a single-table WHERE.
8
+ *
9
+ * Context is a bag of records keyed by source (`BillToOrganization`, `Order`, …).
10
+ * Bare field names (no dot) read from `context['']` so single-entity callers can pass `{ '': row }`.
11
+ */
12
+ import { FormatFilterField, IsCompositeFilter, IsSimpleFilter, ParseFilterField, type CompositeFilterDescriptor, type FilterDescriptor, type FilterLogic } from './filter.types.js';
13
+ export type FilterEvalContext = Record<string, Record<string, unknown> | null | undefined>;
14
+ export interface FilterSummaryField {
15
+ /** Stored field (`Type` or `BillToOrganization.Type`). */
16
+ Name: string;
17
+ DisplayName: string;
18
+ }
19
+ export interface FilterSummaryOptions {
20
+ Fields?: FilterSummaryField[];
21
+ /** Lookup source key → label (`BillToOrganization` → `Bill-to organization`). */
22
+ SourceLabels?: Record<string, string>;
23
+ }
24
+ export declare class CompositeFilter {
25
+ private Descriptor;
26
+ /**
27
+ * Empty AND group, or wrap an existing descriptor / single rule.
28
+ * Prefer {@link FromJSON} / {@link FromDescriptor} at call sites that already have payload.
29
+ */
30
+ constructor(source?: CompositeFilterDescriptor | FilterDescriptor | null);
31
+ static FromJSON(json: string | object | null | undefined): CompositeFilter;
32
+ static FromDescriptor(descriptor: CompositeFilterDescriptor | FilterDescriptor | null | undefined): CompositeFilter;
33
+ static IsCompositeFilter: typeof IsCompositeFilter;
34
+ static IsSimpleFilter: typeof IsSimpleFilter;
35
+ static ParseFilterField: typeof ParseFilterField;
36
+ static FormatFilterField: typeof FormatFilterField;
37
+ get Logic(): FilterLogic;
38
+ set Logic(value: FilterLogic);
39
+ get Filters(): (FilterDescriptor | CompositeFilterDescriptor)[];
40
+ /** Append a rule, a nested descriptor, or another CompositeFilter. */
41
+ Add(item: FilterDescriptor | CompositeFilterDescriptor | CompositeFilter): this;
42
+ ToDescriptor(): CompositeFilterDescriptor;
43
+ ToJSON(): string;
44
+ /**
45
+ * In-memory evaluation against a bag of records keyed by source.
46
+ * Empty filters are true (no restriction). Missing source → undefined
47
+ * (false unless the operator is empty/null).
48
+ */
49
+ Evaluate(context: FilterEvalContext): boolean;
50
+ /** Compact one-liner for a grid cell. Empty filter → empty string. */
51
+ SummaryText(options?: FilterSummaryOptions): string;
52
+ /** Indented HTML with the same highlighting the filter-builder accordion uses. */
53
+ SummaryHTML(options?: FilterSummaryOptions): string;
54
+ GetSummary(options?: FilterSummaryOptions): {
55
+ Text: string;
56
+ HTML: string;
57
+ };
58
+ private static Normalize;
59
+ private static EvaluateNode;
60
+ private static EvaluateRule;
61
+ private static ReadValue;
62
+ private static Compare;
63
+ private static Equals;
64
+ private static Str;
65
+ private static Num;
66
+ private BuildText;
67
+ private BuildHtml;
68
+ private RuleText;
69
+ private RuleHtml;
70
+ private FieldLabel;
71
+ private BareFieldLabel;
72
+ private SourceLabel;
73
+ private IsNullOp;
74
+ private ValueText;
75
+ private ValueHtml;
76
+ }
77
+ //# sourceMappingURL=compositeFilter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compositeFilter.d.ts","sourceRoot":"","sources":["../../../src/generic/filters/compositeFilter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EACH,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,KAAK,yBAAyB,EAC9B,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAEnB,MAAM,gBAAgB,CAAC;AAExB,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;AAE3F,MAAM,WAAW,kBAAkB;IAC/B,0DAA0D;IAC1D,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,oBAAoB;IACjC,MAAM,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAC9B,iFAAiF;IACjF,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzC;AAmCD,qBAAa,eAAe;IACxB,OAAO,CAAC,UAAU,CAA4B;IAE9C;;;OAGG;gBACS,MAAM,CAAC,EAAE,yBAAyB,GAAG,gBAAgB,GAAG,IAAI;WAI1D,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,eAAe;WAMnE,cAAc,CACxB,UAAU,EAAE,yBAAyB,GAAG,gBAAgB,GAAG,IAAI,GAAG,SAAS,GAC5E,eAAe;IAIlB,OAAc,iBAAiB,2BAAqB;IACpD,OAAc,cAAc,wBAAkB;IAC9C,OAAc,gBAAgB,0BAAoB;IAClD,OAAc,iBAAiB,2BAAqB;IAEpD,IAAW,KAAK,IAAI,WAAW,CAE9B;IACD,IAAW,KAAK,CAAC,KAAK,EAAE,WAAW,EAElC;IAED,IAAW,OAAO,IAAI,CAAC,gBAAgB,GAAG,yBAAyB,CAAC,EAAE,CAErE;IAED,sEAAsE;IAC/D,GAAG,CAAC,IAAI,EAAE,gBAAgB,GAAG,yBAAyB,GAAG,eAAe,GAAG,IAAI;IAK/E,YAAY,IAAI,yBAAyB;IAIzC,MAAM,IAAI,MAAM;IAIvB;;;;OAIG;IACI,QAAQ,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO;IAIpD,sEAAsE;IAC/D,WAAW,CAAC,OAAO,CAAC,EAAE,oBAAoB,GAAG,MAAM;IAK1D,kFAAkF;IAC3E,WAAW,CAAC,OAAO,CAAC,EAAE,oBAAoB,GAAG,MAAM;IAOnD,UAAU,CAAC,OAAO,CAAC,EAAE,oBAAoB,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE;IAIjF,OAAO,CAAC,MAAM,CAAC,SAAS;IAgBxB,OAAO,CAAC,MAAM,CAAC,YAAY;IAgB3B,OAAO,CAAC,MAAM,CAAC,YAAY;IAM3B,OAAO,CAAC,MAAM,CAAC,SAAS;IAaxB,OAAO,CAAC,MAAM,CAAC,OAAO;IAiCtB,OAAO,CAAC,MAAM,CAAC,MAAM;IAWrB,OAAO,CAAC,MAAM,CAAC,GAAG;IAKlB,OAAO,CAAC,MAAM,CAAC,GAAG;IAMlB,OAAO,CAAC,SAAS;IAejB,OAAO,CAAC,SAAS;IAuBjB,OAAO,CAAC,QAAQ;IAQhB,OAAO,CAAC,QAAQ;IAahB,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,SAAS;IAMjB,OAAO,CAAC,SAAS;CAkBpB"}
@@ -0,0 +1,324 @@
1
+ /**
2
+ * OOP wrapper around {@link CompositeFilterDescriptor}.
3
+ *
4
+ * The descriptor stays the portable JSON (Kendo / User Views). This class is how you
5
+ * construct, evaluate, and summarize that JSON. Views still compile to SQL via
6
+ * `GenerateWhereClause`; `Evaluate` is for prices, processes, and anything that is
7
+ * not a single-table WHERE.
8
+ *
9
+ * Context is a bag of records keyed by source (`BillToOrganization`, `Order`, …).
10
+ * Bare field names (no dot) read from `context['']` so single-entity callers can pass `{ '': row }`.
11
+ */
12
+ import { FormatFilterField, IsCompositeFilter, IsSimpleFilter, ParseFilterField, } from './filter.types.js';
13
+ const OPERATOR_LABELS = {
14
+ eq: 'equals',
15
+ neq: 'does not equal',
16
+ contains: 'contains',
17
+ doesnotcontain: 'does not contain',
18
+ startswith: 'starts with',
19
+ endswith: 'ends with',
20
+ isnull: 'is empty',
21
+ isnotnull: 'is not empty',
22
+ isempty: 'is empty',
23
+ isnotempty: 'is not empty',
24
+ gt: 'is greater than',
25
+ gte: 'is greater than or equal to',
26
+ lt: 'is less than',
27
+ lte: 'is less than or equal to',
28
+ };
29
+ const HTML_STYLES = {
30
+ fieldName: 'color: #0369a1; font-weight: 600;',
31
+ operator: 'color: #6b7280; font-style: italic;',
32
+ valueString: 'color: #059669; font-weight: 500;',
33
+ valueNumber: 'color: #7c3aed; font-weight: 500;',
34
+ valueDate: 'color: #c2410c; font-weight: 500;',
35
+ valueTrue: 'color: #16a34a; font-weight: 600;',
36
+ valueFalse: 'color: #dc2626; font-weight: 600;',
37
+ logicAnd: 'display: inline-block; padding: 2px 8px; border-radius: 4px; font-size: 11px; font-weight: 700; letter-spacing: 0.5px; background: #dbeafe; color: #1d4ed8;',
38
+ logicOr: 'display: inline-block; padding: 2px 8px; border-radius: 4px; font-size: 11px; font-weight: 700; letter-spacing: 0.5px; background: #fef3c7; color: #b45309;',
39
+ groupBracket: 'color: #9333ea; font-weight: 700; font-size: 15px;',
40
+ source: 'color: #7c3aed; font-weight: 600;',
41
+ };
42
+ export class CompositeFilter {
43
+ /**
44
+ * Empty AND group, or wrap an existing descriptor / single rule.
45
+ * Prefer {@link FromJSON} / {@link FromDescriptor} at call sites that already have payload.
46
+ */
47
+ constructor(source) {
48
+ this.Descriptor = CompositeFilter.Normalize(source);
49
+ }
50
+ static FromJSON(json) {
51
+ if (json == null || json === '')
52
+ return new CompositeFilter();
53
+ const parsed = typeof json === 'string' ? JSON.parse(json) : json;
54
+ return new CompositeFilter(parsed);
55
+ }
56
+ static FromDescriptor(descriptor) {
57
+ return new CompositeFilter(descriptor);
58
+ }
59
+ static { this.IsCompositeFilter = IsCompositeFilter; }
60
+ static { this.IsSimpleFilter = IsSimpleFilter; }
61
+ static { this.ParseFilterField = ParseFilterField; }
62
+ static { this.FormatFilterField = FormatFilterField; }
63
+ get Logic() {
64
+ return this.Descriptor.logic;
65
+ }
66
+ set Logic(value) {
67
+ this.Descriptor.logic = value;
68
+ }
69
+ get Filters() {
70
+ return this.Descriptor.filters;
71
+ }
72
+ /** Append a rule, a nested descriptor, or another CompositeFilter. */
73
+ Add(item) {
74
+ this.Descriptor.filters.push(item instanceof CompositeFilter ? item.ToDescriptor() : item);
75
+ return this;
76
+ }
77
+ ToDescriptor() {
78
+ return JSON.parse(JSON.stringify(this.Descriptor));
79
+ }
80
+ ToJSON() {
81
+ return JSON.stringify(this.Descriptor);
82
+ }
83
+ /**
84
+ * In-memory evaluation against a bag of records keyed by source.
85
+ * Empty filters are true (no restriction). Missing source → undefined
86
+ * (false unless the operator is empty/null).
87
+ */
88
+ Evaluate(context) {
89
+ return CompositeFilter.EvaluateNode(this.Descriptor, context ?? {});
90
+ }
91
+ /** Compact one-liner for a grid cell. Empty filter → empty string. */
92
+ SummaryText(options) {
93
+ if (!this.Descriptor.filters?.length)
94
+ return '';
95
+ return this.BuildText(this.Descriptor, options ?? {});
96
+ }
97
+ /** Indented HTML with the same highlighting the filter-builder accordion uses. */
98
+ SummaryHTML(options) {
99
+ if (!this.Descriptor.filters?.length) {
100
+ return '<span style="color: #9ca3af; font-style: italic;">No filters applied</span>';
101
+ }
102
+ return this.BuildHtml(this.Descriptor, 0, options ?? {});
103
+ }
104
+ GetSummary(options) {
105
+ return { Text: this.SummaryText(options), HTML: this.SummaryHTML(options) };
106
+ }
107
+ static Normalize(source) {
108
+ if (source == null)
109
+ return { logic: 'and', filters: [] };
110
+ if (IsCompositeFilter(source)) {
111
+ return {
112
+ logic: source.logic ?? 'and',
113
+ filters: [...(source.filters ?? [])],
114
+ };
115
+ }
116
+ if (IsSimpleFilter(source)) {
117
+ return { logic: 'and', filters: [source] };
118
+ }
119
+ return { logic: 'and', filters: [] };
120
+ }
121
+ static EvaluateNode(filter, context) {
122
+ if (!filter)
123
+ return true;
124
+ if (IsCompositeFilter(filter)) {
125
+ const parts = (filter.filters ?? []).filter((f) => f != null);
126
+ if (parts.length === 0)
127
+ return true;
128
+ if (filter.logic === 'or') {
129
+ return parts.some((p) => CompositeFilter.EvaluateNode(p, context));
130
+ }
131
+ return parts.every((p) => CompositeFilter.EvaluateNode(p, context));
132
+ }
133
+ return CompositeFilter.EvaluateRule(filter, context);
134
+ }
135
+ static EvaluateRule(rule, context) {
136
+ if (!rule?.field)
137
+ return true;
138
+ const actual = CompositeFilter.ReadValue(context, rule.field);
139
+ return CompositeFilter.Compare(actual, rule.operator, rule.value);
140
+ }
141
+ static ReadValue(context, field) {
142
+ const { Source, Name } = ParseFilterField(field);
143
+ const rec = context[Source ?? ''];
144
+ if (rec == null)
145
+ return undefined;
146
+ if (Name.includes('.')) {
147
+ return Name.split('.').reduce((acc, part) => {
148
+ if (acc == null || typeof acc !== 'object')
149
+ return undefined;
150
+ return acc[part];
151
+ }, rec);
152
+ }
153
+ return rec[Name];
154
+ }
155
+ static Compare(actual, operator, expected) {
156
+ switch (operator) {
157
+ case 'isnull':
158
+ case 'isempty':
159
+ return actual == null || actual === '';
160
+ case 'isnotnull':
161
+ case 'isnotempty':
162
+ return actual != null && actual !== '';
163
+ case 'eq':
164
+ return CompositeFilter.Equals(actual, expected);
165
+ case 'neq':
166
+ return !CompositeFilter.Equals(actual, expected);
167
+ case 'gt':
168
+ return CompositeFilter.Num(actual) > CompositeFilter.Num(expected);
169
+ case 'gte':
170
+ return CompositeFilter.Num(actual) >= CompositeFilter.Num(expected);
171
+ case 'lt':
172
+ return CompositeFilter.Num(actual) < CompositeFilter.Num(expected);
173
+ case 'lte':
174
+ return CompositeFilter.Num(actual) <= CompositeFilter.Num(expected);
175
+ case 'contains':
176
+ return CompositeFilter.Str(actual).includes(CompositeFilter.Str(expected));
177
+ case 'doesnotcontain':
178
+ return !CompositeFilter.Str(actual).includes(CompositeFilter.Str(expected));
179
+ case 'startswith':
180
+ return CompositeFilter.Str(actual).startsWith(CompositeFilter.Str(expected));
181
+ case 'endswith':
182
+ return CompositeFilter.Str(actual).endsWith(CompositeFilter.Str(expected));
183
+ default:
184
+ return false;
185
+ }
186
+ }
187
+ static Equals(a, b) {
188
+ if (a == null && b == null)
189
+ return true;
190
+ if (typeof a === 'boolean' || typeof b === 'boolean') {
191
+ return Boolean(a) === Boolean(b === true || b === 'true' || b === 1 || b === '1');
192
+ }
193
+ if (typeof a === 'number' || typeof b === 'number') {
194
+ return CompositeFilter.Num(a) === CompositeFilter.Num(b);
195
+ }
196
+ return CompositeFilter.Str(a) === CompositeFilter.Str(b);
197
+ }
198
+ static Str(v) {
199
+ if (v == null)
200
+ return '';
201
+ return String(v).toLowerCase();
202
+ }
203
+ static Num(v) {
204
+ if (v instanceof Date)
205
+ return v.getTime();
206
+ const n = typeof v === 'number' ? v : Number(v);
207
+ return Number.isFinite(n) ? n : NaN;
208
+ }
209
+ BuildText(filter, options) {
210
+ const parts = [];
211
+ for (const item of filter.filters || []) {
212
+ if (IsCompositeFilter(item)) {
213
+ const inner = this.BuildText(item, options);
214
+ if (inner)
215
+ parts.push(`(${inner})`);
216
+ }
217
+ else {
218
+ const rule = this.RuleText(item, options);
219
+ if (rule)
220
+ parts.push(rule);
221
+ }
222
+ }
223
+ const join = filter.logic === 'or' ? ' OR ' : ' AND ';
224
+ return parts.join(join);
225
+ }
226
+ BuildHtml(filter, depth, options) {
227
+ const parts = [];
228
+ const indent = ' '.repeat(depth);
229
+ for (const item of filter.filters || []) {
230
+ if (IsCompositeFilter(item)) {
231
+ const inner = this.BuildHtml(item, depth + 1, options);
232
+ if (inner) {
233
+ parts.push(`<span style="${HTML_STYLES.groupBracket}">(</span>\n${inner}\n${indent}<span style="${HTML_STYLES.groupBracket}">)</span>`);
234
+ }
235
+ }
236
+ else {
237
+ const rule = this.RuleHtml(item, options);
238
+ if (rule)
239
+ parts.push(rule);
240
+ }
241
+ }
242
+ if (parts.length === 0)
243
+ return '';
244
+ const logicStyle = filter.logic === 'and' ? HTML_STYLES.logicAnd : HTML_STYLES.logicOr;
245
+ const logicLabel = filter.logic === 'and' ? 'AND' : 'OR';
246
+ const connector = `\n${indent}<span style="${logicStyle}">${logicLabel}</span>\n${indent}`;
247
+ return `${indent}${parts.join(connector)}`;
248
+ }
249
+ RuleText(rule, options) {
250
+ if (!rule.field)
251
+ return '';
252
+ const label = this.FieldLabel(rule.field, options);
253
+ const op = OPERATOR_LABELS[rule.operator] || rule.operator;
254
+ if (this.IsNullOp(rule.operator))
255
+ return `${label} ${op}`;
256
+ return `${label} ${op} ${this.ValueText(rule.value)}`;
257
+ }
258
+ RuleHtml(rule, options) {
259
+ if (!rule.field)
260
+ return '';
261
+ const { Source, Name } = ParseFilterField(rule.field);
262
+ const fieldLabel = this.BareFieldLabel(rule.field, Name, options);
263
+ const sourceLabel = Source ? this.SourceLabel(Source, options) : null;
264
+ const fieldHtml = sourceLabel
265
+ ? `<span style="${HTML_STYLES.source}">${EscapeHtml(sourceLabel)}</span> <span style="${HTML_STYLES.fieldName}">${EscapeHtml(fieldLabel)}</span>`
266
+ : `<span style="${HTML_STYLES.fieldName}">${EscapeHtml(fieldLabel)}</span>`;
267
+ const operatorHtml = `<span style="${HTML_STYLES.operator}">${EscapeHtml(OPERATOR_LABELS[rule.operator] || rule.operator)}</span>`;
268
+ if (this.IsNullOp(rule.operator))
269
+ return `${fieldHtml} ${operatorHtml}`;
270
+ return `${fieldHtml} ${operatorHtml} ${this.ValueHtml(rule.value)}`;
271
+ }
272
+ FieldLabel(stored, options) {
273
+ const { Source, Name } = ParseFilterField(stored);
274
+ const bare = this.BareFieldLabel(stored, Name, options);
275
+ if (!Source)
276
+ return bare;
277
+ return `${this.SourceLabel(Source, options)} ${bare}`;
278
+ }
279
+ BareFieldLabel(stored, name, options) {
280
+ const hit = options.Fields?.find((f) => f.Name === stored || f.Name === name);
281
+ return hit?.DisplayName || name;
282
+ }
283
+ SourceLabel(source, options) {
284
+ return options.SourceLabels?.[source] || source;
285
+ }
286
+ IsNullOp(op) {
287
+ return ['isnull', 'isnotnull', 'isempty', 'isnotempty'].includes(op);
288
+ }
289
+ ValueText(value) {
290
+ if (value == null)
291
+ return '';
292
+ if (typeof value === 'boolean')
293
+ return value ? 'true' : 'false';
294
+ return String(value);
295
+ }
296
+ ValueHtml(value) {
297
+ if (value == null)
298
+ return '';
299
+ if (typeof value === 'boolean') {
300
+ const style = value ? HTML_STYLES.valueTrue : HTML_STYLES.valueFalse;
301
+ return `<span style="${style}">${value ? 'true' : 'false'}</span>`;
302
+ }
303
+ if (typeof value === 'number') {
304
+ return `<span style="${HTML_STYLES.valueNumber}">${value}</span>`;
305
+ }
306
+ if (typeof value === 'string' && /^\d{4}-\d{2}-\d{2}/.test(value)) {
307
+ const d = new Date(value);
308
+ if (!Number.isNaN(d.getTime())) {
309
+ const formatted = d.toLocaleDateString('en-US', { year: 'numeric', month: 'short', day: 'numeric' });
310
+ return `<span style="${HTML_STYLES.valueDate}">${EscapeHtml(formatted)}</span>`;
311
+ }
312
+ }
313
+ return `<span style="${HTML_STYLES.valueString}">"${EscapeHtml(String(value))}"</span>`;
314
+ }
315
+ }
316
+ function EscapeHtml(text) {
317
+ return text
318
+ .replace(/&/g, '&amp;')
319
+ .replace(/</g, '&lt;')
320
+ .replace(/>/g, '&gt;')
321
+ .replace(/"/g, '&quot;')
322
+ .replace(/'/g, '&#39;');
323
+ }
324
+ //# sourceMappingURL=compositeFilter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compositeFilter.js","sourceRoot":"","sources":["../../../src/generic/filters/compositeFilter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Portable filter JSON — the same Kendo-shaped tree User Views persist as FilterState.
3
+ * When a field contains a dot, the first segment is a source key (`BillToOrganization.Type`).
4
+ * Bare names are the legacy single-entity form (`Type`).
5
+ *
6
+ * This file is the data shape only. Evaluation, summary, and construction live on
7
+ * {@link CompositeFilter}.
8
+ */
9
+ export type FilterOperator = 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte' | 'contains' | 'doesnotcontain' | 'startswith' | 'endswith' | 'isnull' | 'isnotnull' | 'isempty' | 'isnotempty';
10
+ export type FilterLogic = 'and' | 'or';
11
+ export interface FilterDescriptor {
12
+ field: string;
13
+ operator: FilterOperator;
14
+ value: unknown;
15
+ }
16
+ export interface CompositeFilterDescriptor {
17
+ logic: FilterLogic;
18
+ filters: (FilterDescriptor | CompositeFilterDescriptor)[];
19
+ }
20
+ export declare function IsCompositeFilter(filter: FilterDescriptor | CompositeFilterDescriptor): filter is CompositeFilterDescriptor;
21
+ export declare function IsSimpleFilter(filter: FilterDescriptor | CompositeFilterDescriptor): filter is FilterDescriptor;
22
+ /** First segment before `.` is the source; the rest is the field. Bare names have source null. */
23
+ export declare function ParseFilterField(field: string): {
24
+ Source: string | null;
25
+ Name: string;
26
+ };
27
+ /** Always writes `source.name`. Callers that still use a flat field list omit this and store a bare name. */
28
+ export declare function FormatFilterField(source: string, name: string): string;
29
+ //# sourceMappingURL=filter.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter.types.d.ts","sourceRoot":"","sources":["../../../src/generic/filters/filter.types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,MAAM,cAAc,GACpB,IAAI,GACJ,KAAK,GACL,IAAI,GACJ,KAAK,GACL,IAAI,GACJ,KAAK,GACL,UAAU,GACV,gBAAgB,GAChB,YAAY,GACZ,UAAU,GACV,QAAQ,GACR,WAAW,GACX,SAAS,GACT,YAAY,CAAC;AAEnB,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,IAAI,CAAC;AAEvC,MAAM,WAAW,gBAAgB;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,cAAc,CAAC;IACzB,KAAK,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,yBAAyB;IACtC,KAAK,EAAE,WAAW,CAAC;IACnB,OAAO,EAAE,CAAC,gBAAgB,GAAG,yBAAyB,CAAC,EAAE,CAAC;CAC7D;AAED,wBAAgB,iBAAiB,CAC7B,MAAM,EAAE,gBAAgB,GAAG,yBAAyB,GACrD,MAAM,IAAI,yBAAyB,CAErC;AAED,wBAAgB,cAAc,CAC1B,MAAM,EAAE,gBAAgB,GAAG,yBAAyB,GACrD,MAAM,IAAI,gBAAgB,CAE5B;AAED,kGAAkG;AAClG,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAOvF;AAED,6GAA6G;AAC7G,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAEtE"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Portable filter JSON — the same Kendo-shaped tree User Views persist as FilterState.
3
+ * When a field contains a dot, the first segment is a source key (`BillToOrganization.Type`).
4
+ * Bare names are the legacy single-entity form (`Type`).
5
+ *
6
+ * This file is the data shape only. Evaluation, summary, and construction live on
7
+ * {@link CompositeFilter}.
8
+ */
9
+ export function IsCompositeFilter(filter) {
10
+ return filter != null && typeof filter === 'object' && 'logic' in filter && 'filters' in filter;
11
+ }
12
+ export function IsSimpleFilter(filter) {
13
+ return filter != null && typeof filter === 'object' && 'field' in filter && 'operator' in filter;
14
+ }
15
+ /** First segment before `.` is the source; the rest is the field. Bare names have source null. */
16
+ export function ParseFilterField(field) {
17
+ const raw = (field ?? '').trim();
18
+ const dot = raw.indexOf('.');
19
+ if (dot <= 0 || dot === raw.length - 1) {
20
+ return { Source: null, Name: raw };
21
+ }
22
+ return { Source: raw.slice(0, dot), Name: raw.slice(dot + 1) };
23
+ }
24
+ /** Always writes `source.name`. Callers that still use a flat field list omit this and store a bare name. */
25
+ export function FormatFilterField(source, name) {
26
+ return `${source}.${name}`;
27
+ }
28
+ //# sourceMappingURL=filter.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter.types.js","sourceRoot":"","sources":["../../../src/generic/filters/filter.types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA+BH,MAAM,UAAU,iBAAiB,CAC7B,MAAoD;IAEpD,OAAO,MAAM,IAAI,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,IAAI,MAAM,IAAI,SAAS,IAAI,MAAM,CAAC;AACpG,CAAC;AAED,MAAM,UAAU,cAAc,CAC1B,MAAoD;IAEpD,OAAO,MAAM,IAAI,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,IAAI,MAAM,IAAI,UAAU,IAAI,MAAM,CAAC;AACrG,CAAC;AAED,kGAAkG;AAClG,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC1C,MAAM,GAAG,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACjC,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC7B,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,KAAK,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;IACvC,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC;AACnE,CAAC;AAED,6GAA6G;AAC7G,MAAM,UAAU,iBAAiB,CAAC,MAAc,EAAE,IAAY;IAC1D,OAAO,GAAG,MAAM,IAAI,IAAI,EAAE,CAAC;AAC/B,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from './filter.types.js';
2
+ export * from './compositeFilter.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/generic/filters/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from './filter.types.js';
2
+ export * from './compositeFilter.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/generic/filters/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Geo field helpers shared by GeoCodeSyncService (write), maps/distance (read),
3
+ * and CodeGen (view SQL).
4
+ *
5
+ * **Write vs read:** `SupportsGeoCoding` means the entity can show a map and
6
+ * participate in geo calcs. GeoCodeSyncService only runs when there is at least
7
+ * one **writable** Geo* field. Virtual display fields (PrimaryAddressLatitude,
8
+ * `__mj_Latitude`, `__mj_Latitude_{FK}`) never invoke the provider.
9
+ *
10
+ * **Anti-patterns:** do not author RecordGeoCode JSON + SHA to skip import
11
+ * geocoding; do not treat Person/Org primary address as EmbeddedRecord (that is
12
+ * AddressLink + layered view → PrimaryAddressLatitude).
13
+ */
14
+ import { EntityFieldInfo, EntityInfo } from './entityInfo.js';
15
+ /**
16
+ * True when the entity has a native (table) latitude **and** longitude column.
17
+ * Virtual `__mj_Latitude` / PrimaryAddress* do not count.
18
+ */
19
+ export declare function HasNativeLatLngFields(fields: EntityFieldInfo[]): boolean;
20
+ /** First native latitude column, or undefined. */
21
+ export declare function NativeLatitudeField(fields: EntityFieldInfo[]): EntityFieldInfo | undefined;
22
+ /** First native longitude column, or undefined. */
23
+ export declare function NativeLongitudeField(fields: EntityFieldInfo[]): EntityFieldInfo | undefined;
24
+ /**
25
+ * RecordGeoCode JOIN belongs on entities that are geo **sources** without native
26
+ * lat/lng columns. Display-only entities (Person/Org with virtual PrimaryAddress*)
27
+ * must not join vwRecordGeoCodes on their own ID.
28
+ */
29
+ export declare function ShouldJoinRecordGeoCodes(entity: Pick<EntityInfo, 'SupportsGeoCoding' | 'Name'> & {
30
+ Fields: EntityFieldInfo[];
31
+ }): boolean;
32
+ /** Embedded bubble virtuals: `__mj_Latitude_ShipToAddressID`. */
33
+ export declare function EmbeddedGeoVirtualNames(foreignKeyField: string): {
34
+ lat: string;
35
+ lng: string;
36
+ };
37
+ /** One EmbeddedRecord FK that should bubble lat/lng onto the parent view. */
38
+ export type EmbeddedGeoSpec = {
39
+ foreignKeyField: string;
40
+ relatedEntityID: string;
41
+ relatedEntityName: string | null;
42
+ relatedSchemaName: string | null;
43
+ relatedBaseTable: string | null;
44
+ relatedBaseView: string | null;
45
+ lat: string;
46
+ lng: string;
47
+ allowsNull: boolean;
48
+ };
49
+ /**
50
+ * EmbeddedRecord foreign keys on `fields` that CodeGen should JOIN for
51
+ * `__mj_Latitude_{FK}` / `__mj_Longitude_{FK}` display columns.
52
+ */
53
+ export declare function ListEmbeddedGeoSpecs(fields: EntityFieldInfo[]): EmbeddedGeoSpec[];
54
+ /**
55
+ * Map / distance lat field. Override wins; otherwise:
56
+ * writable native → PrimaryAddressLatitude → `__mj_Latitude_{FK}` → `__mj_Latitude`
57
+ * → first GeoLatitude / Geo-named Latitude.
58
+ */
59
+ export declare function ResolveMapLatitudeField(entity: EntityInfo, override?: string | null): string;
60
+ /** Same resolution order as {@link ResolveMapLatitudeField} for longitude. */
61
+ export declare function ResolveMapLongitudeField(entity: EntityInfo, override?: string | null): string;
62
+ /** Map toggle: SupportsGeoCoding OR any coordinate Geo* field (including virtual display). */
63
+ export declare function EntityHasMapCoordinates(entity: EntityInfo): boolean;
64
+ //# sourceMappingURL=geoFields.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geoFields.d.ts","sourceRoot":"","sources":["../../src/generic/geoFields.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE3D;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,OAAO,CAExE;AAED,kDAAkD;AAClD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,eAAe,GAAG,SAAS,CAE1F;AAED,mDAAmD;AACnD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,eAAe,GAAG,SAAS,CAE3F;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,mBAAmB,GAAG,MAAM,CAAC,GAAG;IAAE,MAAM,EAAE,eAAe,EAAE,CAAA;CAAE,GAAG,OAAO,CAKxI;AAED,iEAAiE;AACjE,wBAAgB,uBAAuB,CAAC,eAAe,EAAE,MAAM,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAK7F;AAED,6EAA6E;AAC7E,MAAM,MAAM,eAAe,GAAG;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,eAAe,EAAE,CAkBjF;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAE5F;AAED,8EAA8E;AAC9E,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAE7F;AA6BD,8FAA8F;AAC9F,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAQnE"}