@memberjunction/codegen-lib 6.1.0-edge.3 → 6.1.0-edge.4
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.
- package/README.md +50 -21
- package/dist/Config/config.d.ts +118 -1
- package/dist/Config/config.d.ts.map +1 -1
- package/dist/Config/config.js +202 -8
- package/dist/Config/config.js.map +1 -1
- package/dist/Database/__tests__/exclude-schema-permissions.test.d.ts +2 -0
- package/dist/Database/__tests__/exclude-schema-permissions.test.d.ts.map +1 -0
- package/dist/Database/__tests__/exclude-schema-permissions.test.js +32 -0
- package/dist/Database/__tests__/exclude-schema-permissions.test.js.map +1 -0
- package/dist/Database/codeGenDatabaseProvider.d.ts +77 -2
- package/dist/Database/codeGenDatabaseProvider.d.ts.map +1 -1
- package/dist/Database/codeGenDatabaseProvider.js +98 -0
- package/dist/Database/codeGenDatabaseProvider.js.map +1 -1
- package/dist/Database/heal-schema-params.d.ts +33 -0
- package/dist/Database/heal-schema-params.d.ts.map +1 -0
- package/dist/Database/heal-schema-params.js +51 -0
- package/dist/Database/heal-schema-params.js.map +1 -0
- package/dist/Database/manage-metadata.d.ts +9 -0
- package/dist/Database/manage-metadata.d.ts.map +1 -1
- package/dist/Database/manage-metadata.js +66 -51
- package/dist/Database/manage-metadata.js.map +1 -1
- package/dist/Database/providers/postgresql/PostgreSQLCodeGenProvider.d.ts +25 -35
- package/dist/Database/providers/postgresql/PostgreSQLCodeGenProvider.d.ts.map +1 -1
- package/dist/Database/providers/postgresql/PostgreSQLCodeGenProvider.js +97 -51
- package/dist/Database/providers/postgresql/PostgreSQLCodeGenProvider.js.map +1 -1
- package/dist/Database/providers/postgresql/__tests__/SoftPrimaryKeyIndex.test.d.ts +2 -0
- package/dist/Database/providers/postgresql/__tests__/SoftPrimaryKeyIndex.test.d.ts.map +1 -0
- package/dist/Database/providers/postgresql/__tests__/SoftPrimaryKeyIndex.test.js +110 -0
- package/dist/Database/providers/postgresql/__tests__/SoftPrimaryKeyIndex.test.js.map +1 -0
- package/dist/Database/providers/postgresql/metadataSupportObjects.js +78 -10
- package/dist/Database/providers/postgresql/metadataSupportObjects.js.map +1 -1
- package/dist/Database/providers/sqlserver/SQLServerCodeGenProvider.d.ts +12 -0
- package/dist/Database/providers/sqlserver/SQLServerCodeGenProvider.d.ts.map +1 -1
- package/dist/Database/providers/sqlserver/SQLServerCodeGenProvider.js +28 -0
- package/dist/Database/providers/sqlserver/SQLServerCodeGenProvider.js.map +1 -1
- package/dist/Database/providers/sqlserver/__tests__/SoftPrimaryKeyIndex.test.d.ts +2 -0
- package/dist/Database/providers/sqlserver/__tests__/SoftPrimaryKeyIndex.test.d.ts.map +1 -0
- package/dist/Database/providers/sqlserver/__tests__/SoftPrimaryKeyIndex.test.js +195 -0
- package/dist/Database/providers/sqlserver/__tests__/SoftPrimaryKeyIndex.test.js.map +1 -0
- package/dist/Database/schema-filters.d.ts +23 -0
- package/dist/Database/schema-filters.d.ts.map +1 -0
- package/dist/Database/schema-filters.js +42 -0
- package/dist/Database/schema-filters.js.map +1 -0
- package/dist/Database/schema-scope.d.ts.map +1 -1
- package/dist/Database/schema-scope.js +4 -0
- package/dist/Database/schema-scope.js.map +1 -1
- package/dist/Database/sql_codegen.d.ts +18 -0
- package/dist/Database/sql_codegen.d.ts.map +1 -1
- package/dist/Database/sql_codegen.js +92 -41
- package/dist/Database/sql_codegen.js.map +1 -1
- package/dist/EntityNameScanner/EntityNameScanner.d.ts.map +1 -1
- package/dist/EntityNameScanner/EntityNameScanner.js +33 -2
- package/dist/EntityNameScanner/EntityNameScanner.js.map +1 -1
- package/dist/Manifest/GenerateClassRegistrationsManifest.d.ts +8 -4
- package/dist/Manifest/GenerateClassRegistrationsManifest.d.ts.map +1 -1
- package/dist/Manifest/GenerateClassRegistrationsManifest.js +63 -20
- package/dist/Manifest/GenerateClassRegistrationsManifest.js.map +1 -1
- package/dist/Misc/entity_subclasses_codegen.d.ts +22 -5
- package/dist/Misc/entity_subclasses_codegen.d.ts.map +1 -1
- package/dist/Misc/entity_subclasses_codegen.js +96 -30
- package/dist/Misc/entity_subclasses_codegen.js.map +1 -1
- package/dist/Misc/system_integrity.d.ts.map +1 -1
- package/dist/Misc/system_integrity.js +5 -0
- package/dist/Misc/system_integrity.js.map +1 -1
- package/package.json +29 -29
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A SOFT primary key gets no index from anything else in the stack, and MJ's own write path
|
|
3
|
+
* scans the table on every create without one.
|
|
4
|
+
*
|
|
5
|
+
* `IsPrimaryKey && IsSoftPrimaryKey` means the key exists only in metadata: no PRIMARY KEY
|
|
6
|
+
* constraint, no unique index. Integration tables are built that way deliberately, because
|
|
7
|
+
* their keys are inferred and a constraint would reject valid rows whenever an inference is
|
|
8
|
+
* wrong. But the create path still calls InnerLoad on that key to check for an existing row,
|
|
9
|
+
* a genuinely new record matches nothing, and a not-found lookup cannot short-circuit — so it
|
|
10
|
+
* reads the entire heap before concluding the row is absent. The scan grows with the table.
|
|
11
|
+
*
|
|
12
|
+
* Three mechanisms each declined to cover it: the integration DDL generator emits no index on
|
|
13
|
+
* the key columns; the FK auto-indexer skips primary keys ("already covered by its own index"
|
|
14
|
+
* — true for a real PK, false by definition for a soft one); and the missing-index probe reads
|
|
15
|
+
* sys.foreign_keys, which these tables have none of.
|
|
16
|
+
*/
|
|
17
|
+
import { describe, it, expect, beforeEach } from 'vitest';
|
|
18
|
+
import { EntityInfo } from '@memberjunction/core';
|
|
19
|
+
import { SQLServerCodeGenProvider } from '../SQLServerCodeGenProvider.js';
|
|
20
|
+
function createMockEntity(overrides = {}, fieldOverrides) {
|
|
21
|
+
const initData = {
|
|
22
|
+
ID: 'entity-1',
|
|
23
|
+
Name: 'Nimble Contacts',
|
|
24
|
+
SchemaName: 'nimble',
|
|
25
|
+
BaseTable: 'Contacts',
|
|
26
|
+
BaseTableCodeName: 'Contacts',
|
|
27
|
+
BaseView: 'vwContacts',
|
|
28
|
+
IncludeInAPI: true,
|
|
29
|
+
AllowCreateAPI: true,
|
|
30
|
+
AllowUpdateAPI: true,
|
|
31
|
+
AllowDeleteAPI: true,
|
|
32
|
+
CascadeDeletes: false,
|
|
33
|
+
VirtualEntity: false,
|
|
34
|
+
EntityFields: fieldOverrides ?? [],
|
|
35
|
+
...overrides,
|
|
36
|
+
};
|
|
37
|
+
return new EntityInfo(initData);
|
|
38
|
+
}
|
|
39
|
+
/** A soft-PK column: flagged PK in metadata, backed by no constraint. */
|
|
40
|
+
function softPKField(name, sequence, extra = {}) {
|
|
41
|
+
return {
|
|
42
|
+
ID: `spk-${name}`,
|
|
43
|
+
Name: name,
|
|
44
|
+
Type: 'nvarchar',
|
|
45
|
+
Length: 450,
|
|
46
|
+
Sequence: sequence,
|
|
47
|
+
IsPrimaryKey: true,
|
|
48
|
+
IsSoftPrimaryKey: true,
|
|
49
|
+
AllowsNull: false,
|
|
50
|
+
AllowUpdateAPI: true,
|
|
51
|
+
IsVirtual: false,
|
|
52
|
+
AutoIncrement: false,
|
|
53
|
+
DefaultValue: '',
|
|
54
|
+
RelatedEntityID: null,
|
|
55
|
+
...extra,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
/** An ordinary, constraint-backed PK column. */
|
|
59
|
+
function realPKField(name = 'ID') {
|
|
60
|
+
return {
|
|
61
|
+
ID: `pk-${name}`,
|
|
62
|
+
Name: name,
|
|
63
|
+
Type: 'uniqueidentifier',
|
|
64
|
+
Length: 16,
|
|
65
|
+
Sequence: 1,
|
|
66
|
+
IsPrimaryKey: true,
|
|
67
|
+
IsSoftPrimaryKey: false,
|
|
68
|
+
AllowsNull: false,
|
|
69
|
+
AllowUpdateAPI: true,
|
|
70
|
+
IsVirtual: false,
|
|
71
|
+
AutoIncrement: false,
|
|
72
|
+
DefaultValue: 'newsequentialid()',
|
|
73
|
+
RelatedEntityID: null,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
function plainField(name, sequence) {
|
|
77
|
+
return {
|
|
78
|
+
ID: `f-${name}`,
|
|
79
|
+
Name: name,
|
|
80
|
+
Type: 'nvarchar',
|
|
81
|
+
Length: 200,
|
|
82
|
+
Sequence: sequence,
|
|
83
|
+
IsPrimaryKey: false,
|
|
84
|
+
IsSoftPrimaryKey: false,
|
|
85
|
+
AllowsNull: true,
|
|
86
|
+
AllowUpdateAPI: true,
|
|
87
|
+
IsVirtual: false,
|
|
88
|
+
AutoIncrement: false,
|
|
89
|
+
DefaultValue: '',
|
|
90
|
+
RelatedEntityID: null,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
describe('SQLServerCodeGenProvider — soft primary key index', () => {
|
|
94
|
+
let provider;
|
|
95
|
+
beforeEach(() => {
|
|
96
|
+
provider = new SQLServerCodeGenProvider();
|
|
97
|
+
});
|
|
98
|
+
describe('when it applies', () => {
|
|
99
|
+
it('indexes a single-column soft PK', () => {
|
|
100
|
+
const entity = createMockEntity({}, [softPKField('external_id', 1), plainField('Email', 2)]);
|
|
101
|
+
const sql = provider.generateSoftPrimaryKeyIndex(entity);
|
|
102
|
+
expect(sql.length).toBe(1);
|
|
103
|
+
expect(sql[0]).toContain('CREATE INDEX IDX_AUTO_MJ_SOFTPK_Contacts');
|
|
104
|
+
expect(sql[0]).toContain('[nimble].[Contacts] ([external_id])');
|
|
105
|
+
});
|
|
106
|
+
it('indexes a composite soft PK as ONE index, in ordinal order', () => {
|
|
107
|
+
// One composite, not one per column: the existence check is an equality match on
|
|
108
|
+
// the whole key, and per-column indexes would not serve it.
|
|
109
|
+
const entity = createMockEntity({}, [
|
|
110
|
+
softPKField('tenant_id', 2),
|
|
111
|
+
softPKField('record_id', 1),
|
|
112
|
+
plainField('Name', 3),
|
|
113
|
+
]);
|
|
114
|
+
const sql = provider.generateSoftPrimaryKeyIndex(entity);
|
|
115
|
+
expect(sql.length).toBe(1);
|
|
116
|
+
expect(sql[0]).toContain('([record_id], [tenant_id])');
|
|
117
|
+
});
|
|
118
|
+
it('creates a NON-unique index — uniqueness is what the soft-PK design refuses to assert', () => {
|
|
119
|
+
const entity = createMockEntity({}, [softPKField('external_id', 1)]);
|
|
120
|
+
const sql = provider.generateSoftPrimaryKeyIndex(entity)[0];
|
|
121
|
+
expect(sql).toContain('CREATE INDEX ');
|
|
122
|
+
expect(sql).not.toMatch(/CREATE\s+UNIQUE/i);
|
|
123
|
+
});
|
|
124
|
+
it('is idempotent — re-running codegen must not fail on an existing index', () => {
|
|
125
|
+
const entity = createMockEntity({}, [softPKField('external_id', 1)]);
|
|
126
|
+
const sql = provider.generateSoftPrimaryKeyIndex(entity)[0];
|
|
127
|
+
expect(sql).toContain('IF NOT EXISTS');
|
|
128
|
+
expect(sql).toContain('FROM sys.indexes');
|
|
129
|
+
expect(sql).toContain("WHERE name = 'IDX_AUTO_MJ_SOFTPK_Contacts'");
|
|
130
|
+
});
|
|
131
|
+
it('says in the generated SQL why the index exists', () => {
|
|
132
|
+
// The next person to read this file should not have to rediscover the whole story.
|
|
133
|
+
const sql = provider.generateSoftPrimaryKeyIndex(createMockEntity({}, [softPKField('external_id', 1)]))[0];
|
|
134
|
+
expect(sql).toContain('soft primary key');
|
|
135
|
+
expect(sql).toMatch(/scans the whole table/i);
|
|
136
|
+
});
|
|
137
|
+
});
|
|
138
|
+
describe('when it does NOT apply', () => {
|
|
139
|
+
it('emits nothing for an ordinary entity with a real PK', () => {
|
|
140
|
+
// Nearly every entity. A real PK already has its constraint's index.
|
|
141
|
+
const entity = createMockEntity({}, [realPKField(), plainField('Name', 2)]);
|
|
142
|
+
expect(provider.generateSoftPrimaryKeyIndex(entity)).toEqual([]);
|
|
143
|
+
});
|
|
144
|
+
it('emits nothing for an entity with no primary key at all', () => {
|
|
145
|
+
const entity = createMockEntity({}, [plainField('Name', 1)]);
|
|
146
|
+
expect(provider.generateSoftPrimaryKeyIndex(entity)).toEqual([]);
|
|
147
|
+
});
|
|
148
|
+
it('emits nothing for a virtual entity — a view cannot be indexed', () => {
|
|
149
|
+
const entity = createMockEntity({ VirtualEntity: true }, [softPKField('external_id', 1)]);
|
|
150
|
+
expect(provider.generateSoftPrimaryKeyIndex(entity)).toEqual([]);
|
|
151
|
+
});
|
|
152
|
+
it('emits nothing for a MIXED key rather than guessing', () => {
|
|
153
|
+
// Part-real, part-soft is not a shape the integration schema builder produces, and
|
|
154
|
+
// inventing an index for it is worse than leaving it alone.
|
|
155
|
+
const entity = createMockEntity({}, [realPKField(), softPKField('external_id', 2)]);
|
|
156
|
+
expect(provider.generateSoftPrimaryKeyIndex(entity)).toEqual([]);
|
|
157
|
+
});
|
|
158
|
+
});
|
|
159
|
+
describe('unindexable key columns', () => {
|
|
160
|
+
it('does not emit an index whose key column SQL Server would reject', () => {
|
|
161
|
+
// Length -1 is MAX. SQL Server refuses LOB types as index key columns outright.
|
|
162
|
+
const entity = createMockEntity({}, [softPKField('external_id', 1, { Length: -1 })]);
|
|
163
|
+
const sql = provider.generateSoftPrimaryKeyIndex(entity);
|
|
164
|
+
expect(sql.length).toBe(1);
|
|
165
|
+
expect(sql[0]).not.toContain('CREATE INDEX');
|
|
166
|
+
});
|
|
167
|
+
it('explains the skip IN THE FILE, naming the offending column', () => {
|
|
168
|
+
// A silently missing index is the exact failure this whole change exists to end —
|
|
169
|
+
// swapping one silence for another would leave the next person the same puzzle.
|
|
170
|
+
// (A key column declared with no explicit length maps to NVARCHAR(MAX), which is
|
|
171
|
+
// how a table lands here without anyone intending it.)
|
|
172
|
+
const entity = createMockEntity({}, [
|
|
173
|
+
softPKField('record_id', 1),
|
|
174
|
+
softPKField('blob_key', 2, { Length: -1 }),
|
|
175
|
+
]);
|
|
176
|
+
const sql = provider.generateSoftPrimaryKeyIndex(entity)[0];
|
|
177
|
+
expect(sql).toContain('SKIPPED');
|
|
178
|
+
expect(sql).toContain('nimble.Contacts');
|
|
179
|
+
expect(sql).toContain('blob_key');
|
|
180
|
+
// ...and not the column that was fine.
|
|
181
|
+
expect(sql).not.toContain('record_id (');
|
|
182
|
+
expect(sql).toMatch(/explicit bounded length/i);
|
|
183
|
+
});
|
|
184
|
+
});
|
|
185
|
+
describe('identifier limits', () => {
|
|
186
|
+
it('truncates the index name to 128 characters', () => {
|
|
187
|
+
const long = 'VeryLongSegmentNamePaddingToForceTruncationOfTheIdentifier';
|
|
188
|
+
const entity = createMockEntity({ BaseTable: `${long}Table`, BaseTableCodeName: `${long}${long}${long}Table` }, [softPKField('external_id', 1)]);
|
|
189
|
+
const sql = provider.generateSoftPrimaryKeyIndex(entity)[0];
|
|
190
|
+
const name = sql.match(/CREATE INDEX (\S+) ON/)[1];
|
|
191
|
+
expect(name.length).toBeLessThanOrEqual(128);
|
|
192
|
+
});
|
|
193
|
+
});
|
|
194
|
+
});
|
|
195
|
+
//# sourceMappingURL=SoftPrimaryKeyIndex.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SoftPrimaryKeyIndex.test.js","sourceRoot":"","sources":["../../../../../src/Database/providers/sqlserver/__tests__/SoftPrimaryKeyIndex.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAmB,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAEvE,SAAS,gBAAgB,CACrB,YAAqC,EAAE,EACvC,cAA0C;IAE1C,MAAM,QAAQ,GAAG;QACb,EAAE,EAAE,UAAU;QACd,IAAI,EAAE,iBAAiB;QACvB,UAAU,EAAE,QAAQ;QACpB,SAAS,EAAE,UAAU;QACrB,iBAAiB,EAAE,UAAU;QAC7B,QAAQ,EAAE,YAAY;QACtB,YAAY,EAAE,IAAI;QAClB,cAAc,EAAE,IAAI;QACpB,cAAc,EAAE,IAAI;QACpB,cAAc,EAAE,IAAI;QACpB,cAAc,EAAE,KAAK;QACrB,aAAa,EAAE,KAAK;QACpB,YAAY,EAAE,cAAc,IAAI,EAAE;QAClC,GAAG,SAAS;KACf,CAAC;IACF,OAAO,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAC;AACpC,CAAC;AAED,yEAAyE;AACzE,SAAS,WAAW,CAAC,IAAY,EAAE,QAAgB,EAAE,QAAiC,EAAE;IACpF,OAAO;QACH,EAAE,EAAE,OAAO,IAAI,EAAE;QACjB,IAAI,EAAE,IAAI;QACV,IAAI,EAAE,UAAU;QAChB,MAAM,EAAE,GAAG;QACX,QAAQ,EAAE,QAAQ;QAClB,YAAY,EAAE,IAAI;QAClB,gBAAgB,EAAE,IAAI;QACtB,UAAU,EAAE,KAAK;QACjB,cAAc,EAAE,IAAI;QACpB,SAAS,EAAE,KAAK;QAChB,aAAa,EAAE,KAAK;QACpB,YAAY,EAAE,EAAE;QAChB,eAAe,EAAE,IAAI;QACrB,GAAG,KAAK;KACX,CAAC;AACN,CAAC;AAED,gDAAgD;AAChD,SAAS,WAAW,CAAC,IAAI,GAAG,IAAI;IAC5B,OAAO;QACH,EAAE,EAAE,MAAM,IAAI,EAAE;QAChB,IAAI,EAAE,IAAI;QACV,IAAI,EAAE,kBAAkB;QACxB,MAAM,EAAE,EAAE;QACV,QAAQ,EAAE,CAAC;QACX,YAAY,EAAE,IAAI;QAClB,gBAAgB,EAAE,KAAK;QACvB,UAAU,EAAE,KAAK;QACjB,cAAc,EAAE,IAAI;QACpB,SAAS,EAAE,KAAK;QAChB,aAAa,EAAE,KAAK;QACpB,YAAY,EAAE,mBAAmB;QACjC,eAAe,EAAE,IAAI;KACxB,CAAC;AACN,CAAC;AAED,SAAS,UAAU,CAAC,IAAY,EAAE,QAAgB;IAC9C,OAAO;QACH,EAAE,EAAE,KAAK,IAAI,EAAE;QACf,IAAI,EAAE,IAAI;QACV,IAAI,EAAE,UAAU;QAChB,MAAM,EAAE,GAAG;QACX,QAAQ,EAAE,QAAQ;QAClB,YAAY,EAAE,KAAK;QACnB,gBAAgB,EAAE,KAAK;QACvB,UAAU,EAAE,IAAI;QAChB,cAAc,EAAE,IAAI;QACpB,SAAS,EAAE,KAAK;QAChB,aAAa,EAAE,KAAK;QACpB,YAAY,EAAE,EAAE;QAChB,eAAe,EAAE,IAAI;KACxB,CAAC;AACN,CAAC;AAED,QAAQ,CAAC,mDAAmD,EAAE,GAAG,EAAE;IAC/D,IAAI,QAAkC,CAAC;IAEvC,UAAU,CAAC,GAAG,EAAE;QACZ,QAAQ,GAAG,IAAI,wBAAwB,EAAE,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;QAC7B,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;YACvC,MAAM,MAAM,GAAG,gBAAgB,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAE7F,MAAM,GAAG,GAAG,QAAQ,CAAC,2BAA2B,CAAC,MAAM,CAAC,CAAC;YAEzD,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC3B,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,0CAA0C,CAAC,CAAC;YACrE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,qCAAqC,CAAC,CAAC;QACpE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;YAClE,iFAAiF;YACjF,4DAA4D;YAC5D,MAAM,MAAM,GAAG,gBAAgB,CAAC,EAAE,EAAE;gBAChC,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC;gBAC3B,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC;gBAC3B,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;aACxB,CAAC,CAAC;YAEH,MAAM,GAAG,GAAG,QAAQ,CAAC,2BAA2B,CAAC,MAAM,CAAC,CAAC;YAEzD,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC3B,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sFAAsF,EAAE,GAAG,EAAE;YAC5F,MAAM,MAAM,GAAG,gBAAgB,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAErE,MAAM,GAAG,GAAG,QAAQ,CAAC,2BAA2B,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAE5D,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;YACvC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uEAAuE,EAAE,GAAG,EAAE;YAC7E,MAAM,MAAM,GAAG,gBAAgB,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAErE,MAAM,GAAG,GAAG,QAAQ,CAAC,2BAA2B,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAE5D,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;YACvC,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;YAC1C,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,4CAA4C,CAAC,CAAC;QACxE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;YACtD,mFAAmF;YACnF,MAAM,GAAG,GAAG,QAAQ,CAAC,2BAA2B,CAC5C,gBAAgB,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC,CACxD,CAAC,CAAC,CAAC,CAAC;YAEL,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;YAC1C,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;QACpC,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;YAC3D,qEAAqE;YACrE,MAAM,MAAM,GAAG,gBAAgB,CAAC,EAAE,EAAE,CAAC,WAAW,EAAE,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAE5E,MAAM,CAAC,QAAQ,CAAC,2BAA2B,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACrE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;YAC9D,MAAM,MAAM,GAAG,gBAAgB,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAE7D,MAAM,CAAC,QAAQ,CAAC,2BAA2B,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACrE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;YACrE,MAAM,MAAM,GAAG,gBAAgB,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAE1F,MAAM,CAAC,QAAQ,CAAC,2BAA2B,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACrE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;YAC1D,mFAAmF;YACnF,4DAA4D;YAC5D,MAAM,MAAM,GAAG,gBAAgB,CAAC,EAAE,EAAE,CAAC,WAAW,EAAE,EAAE,WAAW,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAEpF,MAAM,CAAC,QAAQ,CAAC,2BAA2B,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACrE,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACrC,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;YACvE,gFAAgF;YAChF,MAAM,MAAM,GAAG,gBAAgB,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAErF,MAAM,GAAG,GAAG,QAAQ,CAAC,2BAA2B,CAAC,MAAM,CAAC,CAAC;YAEzD,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC3B,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;YAClE,kFAAkF;YAClF,gFAAgF;YAChF,iFAAiF;YACjF,uDAAuD;YACvD,MAAM,MAAM,GAAG,gBAAgB,CAAC,EAAE,EAAE;gBAChC,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC;gBAC3B,WAAW,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC;aAC7C,CAAC,CAAC;YAEH,MAAM,GAAG,GAAG,QAAQ,CAAC,2BAA2B,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAE5D,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;YACjC,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;YACzC,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;YAClC,uCAAuC;YACvC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;YACzC,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;QAC/B,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;YAClD,MAAM,IAAI,GAAG,4DAA4D,CAAC;YAC1E,MAAM,MAAM,GAAG,gBAAgB,CAC3B,EAAE,SAAS,EAAE,GAAG,IAAI,OAAO,EAAE,iBAAiB,EAAE,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,OAAO,EAAE,EAC9E,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,CAClC,CAAC;YAEF,MAAM,GAAG,GAAG,QAAQ,CAAC,2BAA2B,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5D,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,uBAAuB,CAAE,CAAC,CAAC,CAAC,CAAC;YAEpD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure schema-scope predicates used by CodeGen SQL generation.
|
|
3
|
+
* Kept out of sql_codegen.ts so unit tests do not load the full generator.
|
|
4
|
+
*/
|
|
5
|
+
/** Case-insensitive, trimmed membership in a schema-name list. */
|
|
6
|
+
export declare function schemaNameInList(schema: string, list: string[] | undefined | null): boolean;
|
|
7
|
+
/**
|
|
8
|
+
* Cascade SQL for a related entity whose FK points at `parentSchema`.
|
|
9
|
+
* Default is intra-schema only. `allowCrossSchemaCascadeDeletes` restores the
|
|
10
|
+
* historical walk across every schema in metadata — that is a dangerous
|
|
11
|
+
* escape hatch and must stay off for Open Apps.
|
|
12
|
+
*/
|
|
13
|
+
export declare function shouldEmitCascadeForRelatedEntity(parentSchema: string, relatedSchema: string, allowCrossSchemaCascadeDeletes: boolean): boolean;
|
|
14
|
+
/**
|
|
15
|
+
* Whether a custom/layered base view for `schemaName` may be `sp_refreshview`'d
|
|
16
|
+
* into the migration log (STEP 4.5).
|
|
17
|
+
*
|
|
18
|
+
* Always drop `excludeSchemas`. When `includeSchemas` is non-empty, keep only
|
|
19
|
+
* that positive list. When it is empty/unset, keep current "all modified
|
|
20
|
+
* custom views" behavior minus excludes.
|
|
21
|
+
*/
|
|
22
|
+
export declare function entityInCustomBaseViewRefreshScope(schemaName: string, excludeSchemas: string[], includeSchemas?: string[] | null): boolean;
|
|
23
|
+
//# sourceMappingURL=schema-filters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-filters.d.ts","sourceRoot":"","sources":["../../src/Database/schema-filters.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,kEAAkE;AAClE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,SAAS,GAAG,IAAI,GAAG,OAAO,CAM3F;AAED;;;;;GAKG;AACH,wBAAgB,iCAAiC,CAC7C,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,EACrB,8BAA8B,EAAE,OAAO,GACxC,OAAO,CAKT;AAED;;;;;;;GAOG;AACH,wBAAgB,kCAAkC,CAC9C,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,EAAE,EACxB,cAAc,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,GACjC,OAAO,CAQT"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure schema-scope predicates used by CodeGen SQL generation.
|
|
3
|
+
* Kept out of sql_codegen.ts so unit tests do not load the full generator.
|
|
4
|
+
*/
|
|
5
|
+
/** Case-insensitive, trimmed membership in a schema-name list. */
|
|
6
|
+
export function schemaNameInList(schema, list) {
|
|
7
|
+
if (!list || list.length === 0) {
|
|
8
|
+
return false;
|
|
9
|
+
}
|
|
10
|
+
const key = schema.trim().toLowerCase();
|
|
11
|
+
return list.some((s) => s.trim().toLowerCase() === key);
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Cascade SQL for a related entity whose FK points at `parentSchema`.
|
|
15
|
+
* Default is intra-schema only. `allowCrossSchemaCascadeDeletes` restores the
|
|
16
|
+
* historical walk across every schema in metadata — that is a dangerous
|
|
17
|
+
* escape hatch and must stay off for Open Apps.
|
|
18
|
+
*/
|
|
19
|
+
export function shouldEmitCascadeForRelatedEntity(parentSchema, relatedSchema, allowCrossSchemaCascadeDeletes) {
|
|
20
|
+
if (allowCrossSchemaCascadeDeletes) {
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
return parentSchema.trim().toLowerCase() === relatedSchema.trim().toLowerCase();
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Whether a custom/layered base view for `schemaName` may be `sp_refreshview`'d
|
|
27
|
+
* into the migration log (STEP 4.5).
|
|
28
|
+
*
|
|
29
|
+
* Always drop `excludeSchemas`. When `includeSchemas` is non-empty, keep only
|
|
30
|
+
* that positive list. When it is empty/unset, keep current "all modified
|
|
31
|
+
* custom views" behavior minus excludes.
|
|
32
|
+
*/
|
|
33
|
+
export function entityInCustomBaseViewRefreshScope(schemaName, excludeSchemas, includeSchemas) {
|
|
34
|
+
if (schemaNameInList(schemaName, excludeSchemas)) {
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
if (includeSchemas && includeSchemas.length > 0) {
|
|
38
|
+
return schemaNameInList(schemaName, includeSchemas);
|
|
39
|
+
}
|
|
40
|
+
return true;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=schema-filters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-filters.js","sourceRoot":"","sources":["../../src/Database/schema-filters.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,kEAAkE;AAClE,MAAM,UAAU,gBAAgB,CAAC,MAAc,EAAE,IAAiC;IAC9E,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACxC,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,CAAC;AAC5D,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iCAAiC,CAC7C,YAAoB,EACpB,aAAqB,EACrB,8BAAuC;IAEvC,IAAI,8BAA8B,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,OAAO,YAAY,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,aAAa,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AACpF,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,kCAAkC,CAC9C,UAAkB,EAClB,cAAwB,EACxB,cAAgC;IAEhC,IAAI,gBAAgB,CAAC,UAAU,EAAE,cAAc,CAAC,EAAE,CAAC;QAC/C,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,IAAI,cAAc,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9C,OAAO,gBAAgB,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema-scope.d.ts","sourceRoot":"","sources":["../../src/Database/schema-scope.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"schema-scope.d.ts","sourceRoot":"","sources":["../../src/Database/schema-scope.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;GAUG;AAEH;;;;;;;;;;;;;GAaG;AACH,wBAAgB,qCAAqC,CACnD,UAAU,EAAE,MAAM,EAAE,EACpB,cAAc,EAAE,MAAM,EAAE,EACxB,sBAAsB,EAAE,MAAM,EAAE,GAC/B,MAAM,EAAE,CAYV;AAED,sEAAsE;AACtE,MAAM,WAAW,iBAAiB;IAChC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,iBAAiB,GAAG,MAAM,EAAE,CAajG"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { snapshotAuthoredExcludeSchemas } from './heal-schema-params.js';
|
|
1
2
|
/**
|
|
2
3
|
* Schema-scope resolution helpers for CodeGen.
|
|
3
4
|
*
|
|
@@ -58,6 +59,9 @@ export function computeSchemasToExcludeForIncludeList(allSchemas, includeSchemas
|
|
|
58
59
|
* @returns the schema names that were newly appended (empty when the scope is unused or already applied)
|
|
59
60
|
*/
|
|
60
61
|
export function applyIncludeSchemaScope(allSchemas, config) {
|
|
62
|
+
// Capture authored excludes before this run mutates excludeSchemas. Heal EXEC
|
|
63
|
+
// statements must serialize that original list, not the sibling snapshot.
|
|
64
|
+
snapshotAuthoredExcludeSchemas(config.excludeSchemas);
|
|
61
65
|
if (!config.includeSchemas || config.includeSchemas.length === 0) {
|
|
62
66
|
return []; // classic exclude-only behavior, unchanged
|
|
63
67
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema-scope.js","sourceRoot":"","sources":["../../src/Database/schema-scope.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,qCAAqC,CACnD,UAAoB,EACpB,cAAwB,EACxB,sBAAgC;IAEhC,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAC9E,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IACxF,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,KAAK,MAAM,MAAM,IAAI,UAAU,EAAE,CAAC;QAChC,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACxC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACnD,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACvB,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,6CAA6C;QACtE,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAQD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,uBAAuB,CAAC,UAAoB,EAAE,MAAyB;IACrF,IAAI,CAAC,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjE,OAAO,EAAE,CAAC,CAAC,2CAA2C;IACxD,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;QAC3B,MAAM,CAAC,cAAc,GAAG,EAAE,CAAC;IAC7B,CAAC;IACD,MAAM,SAAS,GAAG,qCAAqC,CAAC,UAAU,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC;IAClH,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC;IACzC,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
1
|
+
{"version":3,"file":"schema-scope.js","sourceRoot":"","sources":["../../src/Database/schema-scope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,8BAA8B,EAAE,MAAM,sBAAsB,CAAC;AAEtE;;;;;;;;;;GAUG;AAEH;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,qCAAqC,CACnD,UAAoB,EACpB,cAAwB,EACxB,sBAAgC;IAEhC,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAC9E,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IACxF,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,KAAK,MAAM,MAAM,IAAI,UAAU,EAAE,CAAC;QAChC,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACxC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACnD,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACvB,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,6CAA6C;QACtE,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAQD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,uBAAuB,CAAC,UAAoB,EAAE,MAAyB;IACrF,8EAA8E;IAC9E,0EAA0E;IAC1E,8BAA8B,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IACtD,IAAI,CAAC,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjE,OAAO,EAAE,CAAC,CAAC,2CAA2C;IACxD,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;QAC3B,MAAM,CAAC,cAAc,GAAG,EAAE,CAAC;IAC7B,CAAC;IACD,MAAM,SAAS,GAAG,qCAAqC,CAAC,UAAU,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC;IAClH,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC;IACzC,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -8,6 +8,14 @@ export declare const SPType: {
|
|
|
8
8
|
readonly Delete: "Delete";
|
|
9
9
|
};
|
|
10
10
|
export type SPType = typeof SPType[keyof typeof SPType];
|
|
11
|
+
/**
|
|
12
|
+
* Entities whose SchemaName is not in excludeSchemas (case-insensitive).
|
|
13
|
+
* This is the CodeGen run's in-scope set: SQL objects and GRANTs are
|
|
14
|
+
* generated and executed only for these. excludeSchemas means "not this run".
|
|
15
|
+
*/
|
|
16
|
+
export declare function entitiesNotInExcludedSchemas<T extends {
|
|
17
|
+
SchemaName: string;
|
|
18
|
+
}>(entities: T[], excludeSchemas: string[]): T[];
|
|
11
19
|
/**
|
|
12
20
|
* This class is responsible for generating database level objects like views, stored procedures, permissions, etc. You can sub-class this class to create your own SQL generation logic or implement support for other
|
|
13
21
|
* databases. The base class implements support for SQL Server. In future versions of MJ, we will break out an abstract base class that has the skeleton of the logic and then the SQL Server version will be a sub-class
|
|
@@ -226,6 +234,16 @@ export declare class SQLCodeGenBase {
|
|
|
226
234
|
* Delegates to the database provider for platform-specific index DDL.
|
|
227
235
|
*/
|
|
228
236
|
generateIndexesForForeignKeys(pool: CodeGenConnection, entity: EntityInfo): string;
|
|
237
|
+
/**
|
|
238
|
+
* Generates the composite index covering the entity's SOFT primary key. Empty for every
|
|
239
|
+
* entity with a real `PRIMARY KEY` constraint, which is nearly all of them.
|
|
240
|
+
*
|
|
241
|
+
* Kept separate from {@link generateIndexesForForeignKeys} and gated by its own setting: a
|
|
242
|
+
* soft-PK index serves MJ's own per-record existence check on the create path, which is a
|
|
243
|
+
* different concern from indexing foreign keys for joins and filters, and an operator's
|
|
244
|
+
* opinion about one is not an opinion about the other.
|
|
245
|
+
*/
|
|
246
|
+
generateIndexForSoftPrimaryKey(entity: EntityInfo): string;
|
|
229
247
|
/**
|
|
230
248
|
* Detects self-referential foreign keys in an entity (e.g., ParentTaskID pointing back to Task table)
|
|
231
249
|
* Returns array of field info objects representing recursive relationships
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sql_codegen.d.ts","sourceRoot":"","sources":["../../src/Database/sql_codegen.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,eAAe,EAAkC,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAK7G,OAAO,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAE,uBAAuB,EAAmD,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"sql_codegen.d.ts","sourceRoot":"","sources":["../../src/Database/sql_codegen.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,eAAe,EAAkC,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAK7G,OAAO,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAE,uBAAuB,EAAmD,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAI/J,OAAO,EAAsB,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAUvE,eAAO,MAAM,MAAM;;;;CAIP,CAAC;AAEb,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC,MAAM,OAAO,MAAM,CAAC,CAAC;AAExD;;;;GAIG;AACH,wBAAgB,4BAA4B,CAAC,CAAC,SAAS;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,EACzE,QAAQ,EAAE,CAAC,EAAE,EACb,cAAc,EAAE,MAAM,EAAE,GACzB,CAAC,EAAE,CAGL;AAGD;;;;GAIG;AACH,qBAAa,cAAc;IACvB,SAAS,CAAC,iBAAiB,EAAE,cAAc,CAAkF;IAC7H,IAAW,gBAAgB,IAAI,cAAc,CAE5C;IAED;;;;;;;;;OASG;IACH,SAAS,CAAC,WAAW,EAAE,uBAAuB,CAIvC;IACP,IAAW,UAAU,IAAI,uBAAuB,CAE/C;IACD,IAAW,UAAU,CAAC,KAAK,EAAE,uBAAuB,EAEnD;IAED;;OAEG;IACH,SAAS,CAAC,sCAAsC,EAAE,MAAM,EAAE,CAAM;IAEhE;;OAEG;IACH,SAAS,CAAC,sCAAsC,EAAE,OAAO,CAAS;IAElE;;;;OAIG;IACH,SAAS,CAAC,yBAAyB,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAa;IAE1E;;OAEG;IACH,SAAS,CAAC,mCAAmC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAa;IAEvE;;OAEG;IACH,SAAS,CAAC,sCAAsC,EAAE,MAAM,EAAE,CAAM;IAEnD,4BAA4B,CAAC,IAAI,EAAE,iBAAiB,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;IAqWtJ;;;;OAIG;cACa,oBAAoB,CAChC,IAAI,EAAE,iBAAiB,EACvB,SAAS,EAAE,cAAc,EAAE,EAC3B,aAAa,EAAE,UAAU,EAAE,GAC5B,OAAO,CAAC,IAAI,CAAC;IAqBH,mBAAmB,CAAC,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAwB5E,gBAAgB,CAAC,IAAI,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,SAAS,GAAE,MAAU,GAAG,OAAO,CAAC,OAAO,CAAC;IAuD1I;;;;;;OAMG;IACU,0CAA0C,CAAC,OAAO,EAAE;QAC7D,IAAI,EAAE,iBAAiB,CAAC;QACxB,QAAQ,EAAE,UAAU,EAAE,CAAC;QACvB,SAAS,EAAE,MAAM,CAAC;QAClB,eAAe,EAAE,OAAO,CAAC;QACzB,UAAU,EAAE,OAAO,CAAC;QACpB,aAAa,EAAE,OAAO,CAAC;QACvB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,wCAAwC,CAAC,EAAE,OAAO,CAAC;QACnD;mFAC2E;QAC3E,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;KAC/B,GAAG,OAAO,CAAC;QAAC,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAA;KAAC,CAAC;IAmEzC,0BAA0B,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE;IA6BpE,4BAA4B,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,MAAM,EAAE;IAmB3E,gDAAgD,CAAC,OAAO,EAAE;QACnE,IAAI,EAAE,iBAAiB,CAAC;QACxB,MAAM,EAAE,UAAU,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,eAAe,EAAE,OAAO,CAAC;QACzB,UAAU,EAAE,OAAO,CAAC;QACpB,aAAa,EAAE,OAAO,CAAC;QACvB,wCAAwC,CAAC,EAAE,OAAO,CAAC;QACnD;;sDAE8C;QAC9C,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;KAC/B,GAAG,OAAO,CAAC;QAAC,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAA;KAAC,CAAC;IA4ChD;;;;;OAKG;IACU,qBAAqB,CAC9B,IAAI,EAAE,iBAAiB,EACvB,MAAM,EAAE,UAAU,EAClB,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,SAAS,GACxC,OAAO,CAAC,qBAAqB,CAAC;IAyDjC;;;;;OAKG;IACH,OAAO,CAAC,uBAAuB;IAa/B;;;;OAIG;IACH,SAAS,CAAC,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO;IAW3E;;;;;;;;;OASG;cACa,wBAAwB,CAAC,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAoDjI;;;;;;;;;;;;;;;;;;;;;OAqBG;cACa,6BAA6B,CAAC,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAmB9H;;;;OAIG;IACH,SAAS,CAAC,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAqBxD,SAAS,CAAC,4BAA4B,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAE,OAAe,EAAE,QAAQ,GAAE,OAAe;IA+D/I;;;;;OAKG;IACH,SAAS,CAAC,2BAA2B,IAAI,IAAI;IAiB7C;;;OAGG;IACH,SAAS,CAAC,iCAAiC,IAAI,UAAU,EAAE;IAoB3D;;;;;;;;;;;;;;;OAeG;IACH,SAAS,CAAC,6BAA6B,CAAC,QAAQ,EAAE,UAAU,EAAE,GAAG,MAAM;IAoB1D,sCAAsC,CAAC,OAAO,EAAE;QACzD,IAAI,EAAE,iBAAiB,CAAC;QACxB,MAAM,EAAE,UAAU,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,eAAe,EAAE,OAAO,CAAC;QACzB,UAAU,EAAE,OAAO,CAAC;QACpB,aAAa,EAAE,OAAO,CAAC;QACvB,wCAAwC,CAAC,EAAE,OAAO,CAAA;KACrD,GAAG,OAAO,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAA;KAAC,CAAC;IAuR5D,SAAS,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM;IAInD,4BAA4B,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,EAAE;IAsBjE;;;;;;OAMG;IACU,iBAAiB,CAAC,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IA2CtF,+BAA+B,CAAC,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAC,CAAC;IA4C1H,4BAA4B,CAAC,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAUzF,gCAAgC,IAAI,MAAM;IAI1C,iCAAiC,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAItF;;;OAGG;IACH,6BAA6B,CAAC,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,UAAU,GAAG,MAAM;IAKlF;;;;;;;;OAQG;IACH,8BAA8B,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM;IAK1D;;;OAGG;IACH,SAAS,CAAC,0BAA0B,CAAC,MAAM,EAAE,UAAU,GAAG,eAAe,EAAE;IAqB3E;;OAEG;IACH,SAAS,CAAC,6BAA6B,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,eAAe,GAAG,KAAK,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAC,CAAC;IAkCvK;;;;OAIG;IACH,SAAS,CAAC,sBAAsB,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,eAAe,GAAG,MAAM;IAIpF;;;OAGG;IACH,SAAS,CAAC,0BAA0B,CAAC,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,eAAe,EAAE,GAAG,MAAM;IAUjG;;;OAGG;IACH,SAAS,CAAC,6BAA6B,CAAC,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,eAAe,EAAE,EAAE,kBAAkB,EAAE,MAAM,GAAG,MAAM;IAWhI;;OAEG;IACH,SAAS,CAAC,sBAAsB,CAAC,YAAY,EAAE,eAAe,EAAE,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,MAAM;IAYzH;;OAEG;IACH,SAAS,CAAC,wBAAwB,CAAC,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,eAAe,EAAE,EAAE,kBAAkB,EAAE,MAAM,GAAG,MAAM;IAI3H;;OAEG;IACH,SAAS,CAAC,mBAAmB,CAAC,YAAY,EAAE,eAAe,EAAE,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,MAAM;IAItH;;;OAGG;IACH,SAAS,CAAC,yBAAyB,CAAC,YAAY,EAAE,eAAe,EAAE,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,MAAM;IAI5H;;;;;OAKG;IACH,SAAS,CAAC,gCAAgC,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM;IAwBtE;;;;OAIG;IACH,SAAS,CAAC,yBAAyB,CAAC,MAAM,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,GAAG,MAAM;IA6BrF,gBAAgB,CAAC,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAKpF;;;;;;;OAOG;IACG,sBAAsB,CACxB,IAAI,EAAE,iBAAiB,EACvB,MAAM,EAAE,UAAU,GACnB,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IAyDpD,SAAS,CAAC,uBAAuB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM;IAI7D;;;;;;;;;;;;;;;;;;OAkBG;IACH,SAAS,CAAC,2CAA2C,CAAC,MAAM,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,MAAM;IAqBrI;;;;;OAKG;IACH,OAAO,CAAC,2BAA2B;IAOnC,SAAS,CAAC,qBAAqB,CAAC,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,eAAe,EAAE,GAAG,MAAM;IA2D5F;;;;;;;;;;;;OAYG;IACH,SAAS,CAAC,kBAAkB,CAAC,YAAY,EAAE,eAAe,EAAE,GAAG,OAAO;IAMtE;;;OAGG;IACH,SAAS,CAAC,uBAAuB,CAC7B,YAAY,EAAE,eAAe,EAAE,EAC/B,kBAAkB,EAAE,MAAM,EAC1B,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAC7B,MAAM;IAOT;;OAEG;IACH,SAAS,CAAC,2BAA2B,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,MAAM;IAIrE,mCAAmC,CAAC,IAAI,EAAE,iBAAiB,EAAE,YAAY,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IA2KpH,SAAS,CAAC,6BAA6B,CAAC,UAAU,EAAE,MAAM,GAAG;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,kBAAkB,EAAE,OAAO,CAAC;QAAC,mBAAmB,EAAE,OAAO,CAAA;KAAC;IAc3I,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAOvC,SAAS,CAAC,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,MAAM;IAQrF,SAAS,CAAC,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;IAO7E,SAAS,CAAC,iBAAiB,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,OAAO;IAenG,SAAS,CAAC,qBAAqB,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM;IAIzF,SAAS,CAAC,yCAAyC,CAAC,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM;IAKrG,SAAS,CAAC,gBAAgB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM;IAKtD,SAAS,CAAC,wBAAwB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM;IAI9D,SAAS,CAAC,gBAAgB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM;IAItD;;;;;OAKG;IACH,SAAS,CAAC,kBAAkB,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,GAAG,MAAM;IAIhF,SAAS,CAAC,6BAA6B,CAAC,YAAY,EAAE,eAAe,EAAE,EAAE,QAAQ,EAAE,OAAO,GAAG,MAAM;IAInG,SAAS,CAAC,8BAA8B,CAAC,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,eAAe,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,GAAE,OAAe,GAAG,MAAM;IAKzJ,SAAS,CAAC,8BAA8B,CAAC,YAAY,EAAE,eAAe,EAAE,GAAG,MAAM;cAKjE,gBAAgB,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC;cAK9E,sBAAsB,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC;cA8BpF,8BAA8B,CAAC,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,UAAU,EAAE,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC;IAwDvK,SAAS,CAAC,8BAA8B,CAAC,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,UAAU,EAAE,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,QAAQ,GAAG,QAAQ,GAAG,MAAM;IAS/J,SAAS,CAAC,yBAAyB,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,GAAE,MAAW,GAAG;QAC1E,eAAe,EAAE,MAAM,CAAC;QACxB,YAAY,EAAE,MAAM,CAAC;QACrB,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAA;KACnB;IAUD,SAAS,CAAC,2BAA2B,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,GAAE,MAAW,GAAG;QACvG,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,EAAE,MAAM,CAAC;QACrB,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAA;KACpB;IAMD;;;;;OAKG;cACa,kCAAkC,CAC9C,IAAI,EAAE,iBAAiB,EACvB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GACnB,OAAO,CAAC,OAAO,CAAC;IAYnB;;;OAGG;IACH,SAAS,CAAC,gCAAgC,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAgDpE;;;OAGG;cACa,8BAA8B,CAAC,QAAQ,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAiCrF;;;OAGG;cACa,gCAAgC,CAAC,QAAQ,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAgCtG;;;OAGG;cACa,6CAA6C,CACzD,IAAI,EAAE,iBAAiB,EACvB,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,GAC9B,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAgBvB;;;OAGG;cACa,wCAAwC,CACpD,IAAI,EAAE,iBAAiB,EACvB,QAAQ,EAAE,UAAU,EAAE,GACvB,OAAO,CAAC,IAAI,CAAC;IAoDhB;;;;;;;;OAQG;IACH,SAAS,CAAC,2BAA2B,CAAC,QAAQ,EAAE,UAAU,EAAE,EAAE,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE;CA8EzG"}
|