@enfyra/mcp-server 0.1.69 → 0.1.71
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 +1 -1
- package/dist/lib/config-local-adapters.d.ts +18 -0
- package/dist/lib/config-local-adapters.js +271 -0
- package/dist/lib/config-local-adapters.js.map +1 -0
- package/dist/lib/config-local-contracts.d.ts +28 -0
- package/dist/lib/config-local-contracts.js +200 -0
- package/dist/lib/config-local-contracts.js.map +1 -0
- package/dist/lib/config-local-prompts.d.ts +10 -0
- package/dist/lib/config-local-prompts.js +185 -0
- package/dist/lib/config-local-prompts.js.map +1 -0
- package/dist/lib/config-local-types.d.ts +23 -0
- package/dist/lib/config-local-types.js +2 -0
- package/dist/lib/config-local-types.js.map +1 -0
- package/dist/lib/config-local.js +3 -649
- package/dist/lib/config-local.js.map +1 -1
- package/dist/lib/discovery-tools.d.ts +4 -0
- package/dist/lib/discovery-tools.js +546 -0
- package/dist/lib/discovery-tools.js.map +1 -0
- package/dist/lib/dynamic-repository-builder.d.ts +1 -1
- package/dist/lib/dynamic-script-context-contract.d.ts +100 -0
- package/dist/lib/dynamic-script-context-contract.js +163 -0
- package/dist/lib/dynamic-script-context-contract.js.map +1 -0
- package/dist/lib/enfyra-mcp-server.d.ts +3 -0
- package/dist/lib/enfyra-mcp-server.js +79 -0
- package/dist/lib/enfyra-mcp-server.js.map +1 -0
- package/dist/lib/enfyra-tool-logic.d.ts +7 -0
- package/dist/lib/enfyra-tool-logic.js +8 -0
- package/dist/lib/enfyra-tool-logic.js.map +1 -0
- package/dist/lib/enfyra-tool-types.d.ts +27 -0
- package/dist/lib/enfyra-tool-types.js +2 -0
- package/dist/lib/enfyra-tool-types.js.map +1 -0
- package/dist/lib/extension-api-builders.d.ts +17 -0
- package/dist/lib/extension-api-builders.js +235 -0
- package/dist/lib/extension-api-builders.js.map +1 -0
- package/dist/lib/extension-component-builders.d.ts +87 -0
- package/dist/lib/extension-component-builders.js +623 -0
- package/dist/lib/extension-component-builders.js.map +1 -0
- package/dist/lib/extension-contract-review.d.ts +26 -0
- package/dist/lib/extension-contract-review.js +187 -0
- package/dist/lib/extension-contract-review.js.map +1 -0
- package/dist/lib/extension-theme-contract.d.ts +63 -0
- package/dist/lib/extension-theme-contract.js +417 -0
- package/dist/lib/extension-theme-contract.js.map +1 -0
- package/dist/lib/identity-tools.d.ts +4 -0
- package/dist/lib/identity-tools.js +46 -0
- package/dist/lib/identity-tools.js.map +1 -0
- package/dist/lib/log-tools.d.ts +4 -0
- package/dist/lib/log-tools.js +65 -0
- package/dist/lib/log-tools.js.map +1 -0
- package/dist/lib/mcp-example-connect.d.ts +9 -0
- package/dist/lib/mcp-example-connect.js +442 -0
- package/dist/lib/mcp-example-connect.js.map +1 -0
- package/dist/lib/mcp-example-extensions.d.ts +9 -0
- package/dist/lib/mcp-example-extensions.js +729 -0
- package/dist/lib/mcp-example-extensions.js.map +1 -0
- package/dist/lib/mcp-example-files.d.ts +9 -0
- package/dist/lib/mcp-example-files.js +51 -0
- package/dist/lib/mcp-example-files.js.map +1 -0
- package/dist/lib/mcp-example-flows.d.ts +9 -0
- package/dist/lib/mcp-example-flows.js +76 -0
- package/dist/lib/mcp-example-flows.js.map +1 -0
- package/dist/lib/mcp-example-graphql.d.ts +9 -0
- package/dist/lib/mcp-example-graphql.js +57 -0
- package/dist/lib/mcp-example-graphql.js.map +1 -0
- package/dist/lib/mcp-example-handlers-hooks.d.ts +9 -0
- package/dist/lib/mcp-example-handlers-hooks.js +328 -0
- package/dist/lib/mcp-example-handlers-hooks.js.map +1 -0
- package/dist/lib/mcp-example-oauth-setup.d.ts +9 -0
- package/dist/lib/mcp-example-oauth-setup.js +41 -0
- package/dist/lib/mcp-example-oauth-setup.js.map +1 -0
- package/dist/lib/mcp-example-permissions-rls.d.ts +9 -0
- package/dist/lib/mcp-example-permissions-rls.js +210 -0
- package/dist/lib/mcp-example-permissions-rls.js.map +1 -0
- package/dist/lib/mcp-example-queries-deep.d.ts +9 -0
- package/dist/lib/mcp-example-queries-deep.js +220 -0
- package/dist/lib/mcp-example-queries-deep.js.map +1 -0
- package/dist/lib/mcp-example-schema-relations.d.ts +9 -0
- package/dist/lib/mcp-example-schema-relations.js +148 -0
- package/dist/lib/mcp-example-schema-relations.js.map +1 -0
- package/dist/lib/mcp-example-websocket.d.ts +9 -0
- package/dist/lib/mcp-example-websocket.js +103 -0
- package/dist/lib/mcp-example-websocket.js.map +1 -0
- package/dist/lib/mcp-examples.d.ts +5 -5
- package/dist/lib/mcp-examples.js +22 -2394
- package/dist/lib/mcp-examples.js.map +1 -1
- package/dist/lib/method-tools.d.ts +4 -0
- package/dist/lib/method-tools.js +217 -0
- package/dist/lib/method-tools.js.map +1 -0
- package/dist/lib/package-tools.d.ts +4 -0
- package/dist/lib/package-tools.js +98 -0
- package/dist/lib/package-tools.js.map +1 -0
- package/dist/lib/platform-data-operations.d.ts +24 -0
- package/dist/lib/platform-data-operations.js +71 -0
- package/dist/lib/platform-data-operations.js.map +1 -0
- package/dist/lib/platform-endpoint-workflow.d.ts +42 -0
- package/dist/lib/platform-endpoint-workflow.js +382 -0
- package/dist/lib/platform-endpoint-workflow.js.map +1 -0
- package/dist/lib/platform-extension-source.d.ts +487 -0
- package/dist/lib/platform-extension-source.js +524 -0
- package/dist/lib/platform-extension-source.js.map +1 -0
- package/dist/lib/platform-extension-tools.d.ts +1 -0
- package/dist/lib/platform-extension-tools.js +416 -0
- package/dist/lib/platform-extension-tools.js.map +1 -0
- package/dist/lib/platform-extension-ui.d.ts +4 -0
- package/dist/lib/platform-extension-ui.js +5 -0
- package/dist/lib/platform-extension-ui.js.map +1 -0
- package/dist/lib/platform-extension-workflow.d.ts +54 -0
- package/dist/lib/platform-extension-workflow.js +194 -0
- package/dist/lib/platform-extension-workflow.js.map +1 -0
- package/dist/lib/platform-flow-operations.d.ts +554 -0
- package/dist/lib/platform-flow-operations.js +317 -0
- package/dist/lib/platform-flow-operations.js.map +1 -0
- package/dist/lib/platform-flow-tools.d.ts +1 -0
- package/dist/lib/platform-flow-tools.js +248 -0
- package/dist/lib/platform-flow-tools.js.map +1 -0
- package/dist/lib/platform-operation-logic.d.ts +10 -0
- package/dist/lib/platform-operation-logic.js +11 -0
- package/dist/lib/platform-operation-logic.js.map +1 -0
- package/dist/lib/platform-operation-tools.d.ts +1 -324
- package/dist/lib/platform-operation-tools.js +13 -4620
- package/dist/lib/platform-operation-tools.js.map +1 -1
- package/dist/lib/platform-operation-types.d.ts +46 -0
- package/dist/lib/platform-operation-types.js +2 -0
- package/dist/lib/platform-operation-types.js.map +1 -0
- package/dist/lib/platform-policy-tools.d.ts +1 -0
- package/dist/lib/platform-policy-tools.js +248 -0
- package/dist/lib/platform-policy-tools.js.map +1 -0
- package/dist/lib/platform-resource-operations.d.ts +124 -0
- package/dist/lib/platform-resource-operations.js +109 -0
- package/dist/lib/platform-resource-operations.js.map +1 -0
- package/dist/lib/platform-resource-tools.d.ts +1 -0
- package/dist/lib/platform-resource-tools.js +70 -0
- package/dist/lib/platform-resource-tools.js.map +1 -0
- package/dist/lib/platform-route-operations.d.ts +222 -0
- package/dist/lib/platform-route-operations.js +290 -0
- package/dist/lib/platform-route-operations.js.map +1 -0
- package/dist/lib/platform-route-tools.d.ts +1 -0
- package/dist/lib/platform-route-tools.js +307 -0
- package/dist/lib/platform-route-tools.js.map +1 -0
- package/dist/lib/platform-shared-operations.d.ts +7 -0
- package/dist/lib/platform-shared-operations.js +4 -0
- package/dist/lib/platform-shared-operations.js.map +1 -0
- package/dist/lib/platform-websocket-tools.d.ts +1 -0
- package/dist/lib/platform-websocket-tools.js +70 -0
- package/dist/lib/platform-websocket-tools.js.map +1 -0
- package/dist/lib/record-tools.d.ts +4 -0
- package/dist/lib/record-tools.js +418 -0
- package/dist/lib/record-tools.js.map +1 -0
- package/dist/lib/required-knowledge.d.ts +1 -1
- package/dist/lib/required-knowledge.js +3 -2
- package/dist/lib/required-knowledge.js.map +1 -1
- package/dist/lib/route-access-tools.d.ts +4 -0
- package/dist/lib/route-access-tools.js +172 -0
- package/dist/lib/route-access-tools.js.map +1 -0
- package/dist/lib/route-definition-tools.d.ts +4 -0
- package/dist/lib/route-definition-tools.js +285 -0
- package/dist/lib/route-definition-tools.js.map +1 -0
- package/dist/lib/route-inspection-tools.d.ts +4 -0
- package/dist/lib/route-inspection-tools.js +319 -0
- package/dist/lib/route-inspection-tools.js.map +1 -0
- package/dist/lib/route-tools.d.ts +1 -0
- package/dist/lib/route-tools.js +9 -0
- package/dist/lib/route-tools.js.map +1 -0
- package/dist/lib/runtime-zone-registry.d.ts +27 -0
- package/dist/lib/runtime-zone-registry.js +81 -0
- package/dist/lib/runtime-zone-registry.js.map +1 -0
- package/dist/lib/runtime-zone-search.d.ts +303 -0
- package/dist/lib/runtime-zone-search.js +596 -0
- package/dist/lib/runtime-zone-search.js.map +1 -0
- package/dist/lib/runtime-zone-tools.d.ts +2 -307
- package/dist/lib/runtime-zone-tools.js +2 -674
- package/dist/lib/runtime-zone-tools.js.map +1 -1
- package/dist/lib/schema-column-tools.d.ts +3 -0
- package/dist/lib/schema-column-tools.js +80 -0
- package/dist/lib/schema-column-tools.js.map +1 -0
- package/dist/lib/schema-mutation-coordinator.d.ts +28 -0
- package/dist/lib/schema-mutation-coordinator.js +154 -0
- package/dist/lib/schema-mutation-coordinator.js.map +1 -0
- package/dist/lib/schema-relation-contracts.d.ts +39 -0
- package/dist/lib/schema-relation-contracts.js +160 -0
- package/dist/lib/schema-relation-contracts.js.map +1 -0
- package/dist/lib/schema-relation-tools.d.ts +3 -0
- package/dist/lib/schema-relation-tools.js +61 -0
- package/dist/lib/schema-relation-tools.js.map +1 -0
- package/dist/lib/schema-table-contracts.d.ts +28 -0
- package/dist/lib/schema-table-contracts.js +263 -0
- package/dist/lib/schema-table-contracts.js.map +1 -0
- package/dist/lib/schema-table-tools.d.ts +3 -0
- package/dist/lib/schema-table-tools.js +297 -0
- package/dist/lib/schema-table-tools.js.map +1 -0
- package/dist/lib/schema-tool-operations.d.ts +150 -0
- package/dist/lib/schema-tool-operations.js +468 -0
- package/dist/lib/schema-tool-operations.js.map +1 -0
- package/dist/lib/schema-tool-types.d.ts +38 -0
- package/dist/lib/schema-tool-types.js +2 -0
- package/dist/lib/schema-tool-types.js.map +1 -0
- package/dist/lib/schema-verification.d.ts +14 -0
- package/dist/lib/schema-verification.js +105 -0
- package/dist/lib/schema-verification.js.map +1 -0
- package/dist/lib/script-tools.d.ts +4 -0
- package/dist/lib/script-tools.js +127 -0
- package/dist/lib/script-tools.js.map +1 -0
- package/dist/lib/system-tools.d.ts +4 -0
- package/dist/lib/system-tools.js +41 -0
- package/dist/lib/system-tools.js.map +1 -0
- package/dist/lib/table-tool-logic.d.ts +5 -0
- package/dist/lib/table-tool-logic.js +6 -0
- package/dist/lib/table-tool-logic.js.map +1 -0
- package/dist/lib/table-tools.d.ts +1 -84
- package/dist/lib/table-tools.js +7 -1522
- package/dist/lib/table-tools.js.map +1 -1
- package/dist/lib/tool-catalog.d.ts +2 -1
- package/dist/lib/tool-catalog.js +23 -2
- package/dist/lib/tool-catalog.js.map +1 -1
- package/dist/lib/tool-metadata-operations.d.ts +27 -0
- package/dist/lib/tool-metadata-operations.js +93 -0
- package/dist/lib/tool-metadata-operations.js.map +1 -0
- package/dist/lib/tool-permission-profile.d.ts +37 -0
- package/dist/lib/tool-permission-profile.js +106 -0
- package/dist/lib/tool-permission-profile.js.map +1 -0
- package/dist/lib/tool-record-operations.d.ts +102 -0
- package/dist/lib/tool-record-operations.js +260 -0
- package/dist/lib/tool-record-operations.js.map +1 -0
- package/dist/lib/tool-route-inspection.d.ts +47 -0
- package/dist/lib/tool-route-inspection.js +168 -0
- package/dist/lib/tool-route-inspection.js.map +1 -0
- package/dist/lib/tool-routing.d.ts +3 -417
- package/dist/lib/tool-routing.js +3 -1038
- package/dist/lib/tool-routing.js.map +1 -1
- package/dist/lib/tool-runtime-config.d.ts +33 -0
- package/dist/lib/tool-runtime-config.js +237 -0
- package/dist/lib/tool-runtime-config.js.map +1 -0
- package/dist/lib/tool-script-operations.d.ts +34 -0
- package/dist/lib/tool-script-operations.js +153 -0
- package/dist/lib/tool-script-operations.js.map +1 -0
- package/dist/lib/workflow-definitions.d.ts +366 -0
- package/dist/lib/workflow-definitions.js +703 -0
- package/dist/lib/workflow-definitions.js.map +1 -0
- package/dist/lib/workflow-planner.d.ts +45 -0
- package/dist/lib/workflow-planner.js +338 -0
- package/dist/lib/workflow-planner.js.map +1 -0
- package/dist/lib/workflow-types.d.ts +39 -0
- package/dist/lib/workflow-types.js +2 -0
- package/dist/lib/workflow-types.js.map +1 -0
- package/dist/mcp-server-entry.d.ts +0 -3
- package/dist/mcp-server-entry.js +2 -3249
- package/dist/mcp-server-entry.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Table & Column tools for Enfyra MCP Server
|
|
3
|
+
*/
|
|
4
|
+
import { z } from 'zod';
|
|
5
|
+
import { jsonContent } from './response-format.js';
|
|
6
|
+
import { assertGlobalRulesAck, globalRulesAckParam } from './required-knowledge.js';
|
|
7
|
+
import { assertBulkLimit, bulkObjectArrayParam, parseBulkItemsParam, } from './table-tool-logic.js';
|
|
8
|
+
import { createSchemaToolOperations } from './schema-tool-operations.js';
|
|
9
|
+
export function registerSchemaRelationTools(server, ENFYRA_API_URL, options = {}) {
|
|
10
|
+
const toolset = options.toolset || 'guided';
|
|
11
|
+
const apiBase = ENFYRA_API_URL.replace(/\/$/, '');
|
|
12
|
+
const { appendRelationToTable, removeRelationFromTable, } = createSchemaToolOperations(ENFYRA_API_URL, toolset);
|
|
13
|
+
// ─── RELATION MUTATIONS ───
|
|
14
|
+
server.tool('create_relations', 'Create one or more relations. Always pass items as a native JSON array; for one relation, pass one item. Items run sequentially through the schema queue and table names/aliases are resolved internally.', {
|
|
15
|
+
items: bulkObjectArrayParam(z, 'Relation definitions').optional().describe('Native JSON array of relation definitions. Each item uses { sourceTableId, targetTableId or targetTable, type, propertyName, inversePropertyName?, mappedBy?, isNullable?, onDelete?, description? }. Do not send physical FK fields.'),
|
|
16
|
+
relations: bulkObjectArrayParam(z, 'Relation definitions').optional().describe('Alias for items when the caller naturally names the batch relations. Pass either items or relations, not both.'),
|
|
17
|
+
maxItems: z.number().int().min(1).max(100).optional().default(100).describe('Safety cap for one schema batch. Default/max is 100.'),
|
|
18
|
+
globalRulesAckKey: globalRulesAckParam(z),
|
|
19
|
+
}, async ({ items, relations, maxItems, globalRulesAckKey }) => {
|
|
20
|
+
assertGlobalRulesAck(globalRulesAckKey);
|
|
21
|
+
if (items !== undefined && relations !== undefined)
|
|
22
|
+
throw new Error('Pass either items or relations to create_relations, not both.');
|
|
23
|
+
const parsedItems = parseBulkItemsParam('items', items ?? relations);
|
|
24
|
+
assertBulkLimit('create_relations', parsedItems, maxItems);
|
|
25
|
+
const created = [];
|
|
26
|
+
for (const [index, item] of parsedItems.entries()) {
|
|
27
|
+
const result = await appendRelationToTable({ ...item, globalRulesAckKey });
|
|
28
|
+
created.push({ index, ...JSON.parse(result.content[0].text) });
|
|
29
|
+
}
|
|
30
|
+
return jsonContent({ action: 'relations_created', requested: parsedItems.length, createdCount: created.length, sequential: true, created });
|
|
31
|
+
});
|
|
32
|
+
server.tool('delete_relations', 'Delete one or more relations. Always pass items as a native JSON array; for one relation, pass one item. confirm=false previews every target; confirm=true deletes sequentially.', {
|
|
33
|
+
items: bulkObjectArrayParam(z, 'Relation delete items').describe('Native JSON array of delete items: [{ tableId, relationId }].'),
|
|
34
|
+
maxItems: z.number().int().min(1).max(100).optional().default(100).describe('Safety cap for one schema batch. Default/max is 100.'),
|
|
35
|
+
confirm: z.boolean().optional().default(false).describe('Required true to apply destructive deletes. Omit/false returns previews only.'),
|
|
36
|
+
globalRulesAckKey: globalRulesAckParam(z).optional().describe('Required when confirm=true. Use globalRulesAckKey from get_enfyra_required_knowledge.'),
|
|
37
|
+
}, async ({ items, maxItems, confirm, globalRulesAckKey }) => {
|
|
38
|
+
const parsedItems = parseBulkItemsParam('items', items);
|
|
39
|
+
assertBulkLimit('delete_relations', parsedItems, maxItems);
|
|
40
|
+
if (confirm)
|
|
41
|
+
assertGlobalRulesAck(globalRulesAckKey);
|
|
42
|
+
const results = [];
|
|
43
|
+
for (const [index, item] of parsedItems.entries()) {
|
|
44
|
+
if (!item.tableId)
|
|
45
|
+
throw new Error(`items[${index}].tableId is required.`);
|
|
46
|
+
if (!item.relationId)
|
|
47
|
+
throw new Error(`items[${index}].relationId is required.`);
|
|
48
|
+
const result = await removeRelationFromTable({ ...item, confirm, globalRulesAckKey });
|
|
49
|
+
results.push({ index, ...JSON.parse(result.content[0].text) });
|
|
50
|
+
}
|
|
51
|
+
return jsonContent({
|
|
52
|
+
action: confirm ? 'relations_deleted' : 'delete_relations_preview',
|
|
53
|
+
requested: parsedItems.length,
|
|
54
|
+
sequential: true,
|
|
55
|
+
destructive: true,
|
|
56
|
+
results,
|
|
57
|
+
next: confirm ? undefined : 'Call delete_relations again with the same items and confirm=true to delete sequentially.',
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=schema-relation-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-relation-tools.js","sourceRoot":"","sources":["../../src/lib/schema-relation-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { AnyRecord, ConstraintGroup } from './schema-mutation-coordinator.js';
|
|
2
|
+
export declare function parseJsonArrayParam(name: any, value: any): any[];
|
|
3
|
+
export declare function parseBulkItemsParam(name: any, value: any): any[];
|
|
4
|
+
export declare function assertBulkLimit(name: any, items: any, maxItems: any): void;
|
|
5
|
+
export declare function normalizeConstraintGroupsValue(name: any, value: any): ConstraintGroup[];
|
|
6
|
+
export declare function stripAutoManagedColumns(columns: AnyRecord[]): {
|
|
7
|
+
columns: AnyRecord[];
|
|
8
|
+
skippedAutoColumns: {
|
|
9
|
+
name: string;
|
|
10
|
+
reason: string;
|
|
11
|
+
}[];
|
|
12
|
+
};
|
|
13
|
+
export declare function assertColumnNameCanBeCreated(name: unknown, context: string): void;
|
|
14
|
+
export declare function assertNoColumnRelationNameCollision(columnNames: string[], relationNames: string[], context: string): void;
|
|
15
|
+
export declare function preflightCreateTableDefinitions(items: AnyRecord[]): void;
|
|
16
|
+
export declare function normalizeCreateTableDefinitions(items: AnyRecord[]): {
|
|
17
|
+
_requestedTableName?: string;
|
|
18
|
+
relations?: any;
|
|
19
|
+
name: string;
|
|
20
|
+
}[];
|
|
21
|
+
export declare function computeBatchCleanupOrder(items: AnyRecord[]): string[];
|
|
22
|
+
export declare function splitRelationConstraintGroups(groups: ConstraintGroup[], relationNames: Set<string>): {
|
|
23
|
+
immediate: ConstraintGroup[];
|
|
24
|
+
deferred: ConstraintGroup[];
|
|
25
|
+
};
|
|
26
|
+
export declare function mergeConstraintGroups(existing: ConstraintGroup[], additions: ConstraintGroup[]): ConstraintGroup[];
|
|
27
|
+
export declare function resolveRelationConstraintGroups(table: AnyRecord, groups: ConstraintGroup[], groupName: string): any[][];
|
|
28
|
+
export declare function assertIndexesDoNotReferenceUniqueFields(indexes: ConstraintGroup[], uniques: ConstraintGroup[]): void;
|
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
import { normalizeTableName } from './tool-input-normalization.js';
|
|
2
|
+
import { AUTO_MANAGED_COLUMN_NAMES, } from './schema-mutation-coordinator.js';
|
|
3
|
+
export function parseJsonArrayParam(name, value) {
|
|
4
|
+
if (!value)
|
|
5
|
+
return [];
|
|
6
|
+
const parsed = JSON.parse(value);
|
|
7
|
+
if (!Array.isArray(parsed)) {
|
|
8
|
+
throw new Error(`${name} must be a JSON array.`);
|
|
9
|
+
}
|
|
10
|
+
return parsed;
|
|
11
|
+
}
|
|
12
|
+
export function parseBulkItemsParam(name, value) {
|
|
13
|
+
if (value === undefined || value === null || value === '') {
|
|
14
|
+
throw new Error(`${name} must be a native JSON array. Pass one object in the array for a single mutation.`);
|
|
15
|
+
}
|
|
16
|
+
const parsed = typeof value === 'string' ? JSON.parse(value) : value;
|
|
17
|
+
if (!Array.isArray(parsed)) {
|
|
18
|
+
throw new Error(`${name} must be a JSON array. Pass one object in the array for a single mutation.`);
|
|
19
|
+
}
|
|
20
|
+
if (parsed.length === 0) {
|
|
21
|
+
throw new Error(`${name} must include at least one item.`);
|
|
22
|
+
}
|
|
23
|
+
parsed.forEach((item, index) => {
|
|
24
|
+
if (!item || typeof item !== 'object' || Array.isArray(item)) {
|
|
25
|
+
throw new Error(`${name}[${index}] must be an object.`);
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
return parsed;
|
|
29
|
+
}
|
|
30
|
+
export function assertBulkLimit(name, items, maxItems) {
|
|
31
|
+
if (items.length > maxItems) {
|
|
32
|
+
throw new Error(`${name} received ${items.length} items, above maxItems=${maxItems}. Split the batch deliberately.`);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
function normalizeConstraintGroups(name, groups) {
|
|
36
|
+
return groups.map((group, index) => {
|
|
37
|
+
const value = Array.isArray(group) ? group : group?.value;
|
|
38
|
+
if (!Array.isArray(value) || value.length === 0 || value.some((item) => typeof item !== 'string' || !item.trim())) {
|
|
39
|
+
throw new Error(`${name}[${index}] must be a non-empty string array or { "value": [...] }.`);
|
|
40
|
+
}
|
|
41
|
+
return value;
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
function parseConstraintGroupsParam(name, value) {
|
|
45
|
+
return normalizeConstraintGroups(name, parseJsonArrayParam(name, value));
|
|
46
|
+
}
|
|
47
|
+
export function normalizeConstraintGroupsValue(name, value) {
|
|
48
|
+
if (value == null)
|
|
49
|
+
return [];
|
|
50
|
+
const parsed = typeof value === 'string' ? JSON.parse(value) : value;
|
|
51
|
+
if (!Array.isArray(parsed)) {
|
|
52
|
+
throw new Error(`${name} must be a JSON array.`);
|
|
53
|
+
}
|
|
54
|
+
return normalizeConstraintGroups(name, parsed);
|
|
55
|
+
}
|
|
56
|
+
export function stripAutoManagedColumns(columns) {
|
|
57
|
+
const skippedAutoColumns = [];
|
|
58
|
+
const filtered = columns.filter((column) => {
|
|
59
|
+
const name = String(column?.name ?? '');
|
|
60
|
+
if (!AUTO_MANAGED_COLUMN_NAMES.has(name))
|
|
61
|
+
return true;
|
|
62
|
+
skippedAutoColumns.push({
|
|
63
|
+
name,
|
|
64
|
+
reason: 'Enfyra manages id/createdAt/updatedAt automatically during table creation.',
|
|
65
|
+
});
|
|
66
|
+
return false;
|
|
67
|
+
});
|
|
68
|
+
return { columns: filtered, skippedAutoColumns };
|
|
69
|
+
}
|
|
70
|
+
export function assertColumnNameCanBeCreated(name, context) {
|
|
71
|
+
const columnName = String(name ?? '');
|
|
72
|
+
if (AUTO_MANAGED_COLUMN_NAMES.has(columnName)) {
|
|
73
|
+
throw new Error(`${context} "${columnName}" is auto-managed by Enfyra. Do not create id, _id, createdAt, or updatedAt columns manually.`);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
function assertNoDuplicateFieldNames(fieldNames, context) {
|
|
77
|
+
const seen = new Set();
|
|
78
|
+
const duplicates = new Set();
|
|
79
|
+
for (const name of fieldNames.filter(Boolean)) {
|
|
80
|
+
if (seen.has(name))
|
|
81
|
+
duplicates.add(name);
|
|
82
|
+
seen.add(name);
|
|
83
|
+
}
|
|
84
|
+
if (duplicates.size > 0) {
|
|
85
|
+
throw new Error(`${context} has duplicate field name(s): ${[...duplicates].join(', ')}. Column names and relation propertyName values share one namespace.`);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
export function assertNoColumnRelationNameCollision(columnNames, relationNames, context) {
|
|
89
|
+
const relationNameSet = new Set(relationNames.filter(Boolean));
|
|
90
|
+
const collisions = columnNames.filter((name) => relationNameSet.has(name));
|
|
91
|
+
if (collisions.length > 0) {
|
|
92
|
+
throw new Error(`${context} has column/relation namespace collision(s): ${[...new Set(collisions)].join(', ')}. ` +
|
|
93
|
+
`Column names and relation propertyName values share one namespace; remove the scalar column(s) and keep the relation propertyName(s) ${[...new Set(collisions)].join(', ')}. Do not create physical FK columns.`);
|
|
94
|
+
}
|
|
95
|
+
assertNoDuplicateFieldNames([...columnNames, ...relationNames], context);
|
|
96
|
+
}
|
|
97
|
+
function formatConstraintFieldHints(fields, relationNames, logicalFieldNames) {
|
|
98
|
+
const relationNameSet = new Set(relationNames);
|
|
99
|
+
const logicalNameSet = new Set(logicalFieldNames);
|
|
100
|
+
const normalizeName = (value) => value.replace(/[_\-\s]/gu, '').toLowerCase();
|
|
101
|
+
return fields
|
|
102
|
+
.map((field) => {
|
|
103
|
+
const normalized = String(field)
|
|
104
|
+
.replace(/_?ids?$/iu, '')
|
|
105
|
+
.replace(/_id$/iu, '')
|
|
106
|
+
.replace(/Id$/u, '')
|
|
107
|
+
.replace(/Ids$/u, '');
|
|
108
|
+
const match = [...relationNameSet].find((name) => name.toLowerCase() === normalized.toLowerCase());
|
|
109
|
+
if (match)
|
|
110
|
+
return `${field} -> use relation propertyName "${match}" in indexes/uniques, not physical FK "${field}"`;
|
|
111
|
+
const logicalMatch = [...logicalNameSet].find((name) => normalizeName(name) === normalizeName(String(field)));
|
|
112
|
+
return logicalMatch ? `${field} -> did you mean "${logicalMatch}"? Constraint fields must match column/relation names exactly.` : null;
|
|
113
|
+
})
|
|
114
|
+
.filter(Boolean);
|
|
115
|
+
}
|
|
116
|
+
export function preflightCreateTableDefinitions(items) {
|
|
117
|
+
items.forEach((item, index) => {
|
|
118
|
+
const columns = Array.isArray(item.columns) ? item.columns : parseJsonArrayParam(`items[${index}].columns`, item.columns || '[]');
|
|
119
|
+
const relations = Array.isArray(item.relations) ? item.relations : parseJsonArrayParam(`items[${index}].relations`, item.relations || '[]');
|
|
120
|
+
const { columns: userColumns } = stripAutoManagedColumns(columns);
|
|
121
|
+
const columnNames = userColumns.map((column) => String(column?.name ?? '')).filter(Boolean);
|
|
122
|
+
const relationNames = relations.map((relation) => String(relation?.propertyName ?? '')).filter(Boolean);
|
|
123
|
+
assertNoColumnRelationNameCollision(columnNames, relationNames, `create_tables items[${index}] (${item.name || '<unnamed>'})`);
|
|
124
|
+
const logicalFields = new Set([...AUTO_MANAGED_COLUMN_NAMES, ...columnNames, ...relationNames]);
|
|
125
|
+
const indexes = normalizeConstraintGroupsValue(`items[${index}].indexes`, item.indexes ?? []);
|
|
126
|
+
const uniques = normalizeConstraintGroupsValue(`items[${index}].uniques`, item.uniques ?? []);
|
|
127
|
+
assertIndexesDoNotReferenceUniqueFields(indexes, uniques);
|
|
128
|
+
const unknownConstraintFields = [...indexes, ...uniques]
|
|
129
|
+
.flat()
|
|
130
|
+
.filter((field) => !logicalFields.has(field));
|
|
131
|
+
if (unknownConstraintFields.length > 0) {
|
|
132
|
+
const uniqueUnknownFields = [...new Set(unknownConstraintFields)];
|
|
133
|
+
const hints = formatConstraintFieldHints(uniqueUnknownFields, relationNames, [...logicalFields]);
|
|
134
|
+
throw new Error(`create_tables items[${index}] (${item.name || '<unnamed>'}) has indexes/uniques referencing undeclared field(s): ${uniqueUnknownFields.join(', ')}. ` +
|
|
135
|
+
'Declare each field as a column or relation propertyName in the same table item. ' +
|
|
136
|
+
(hints.length ? `Hint(s): ${hints.join('; ')}. ` : '') +
|
|
137
|
+
'For relation-based unique pairs added after create, first create the relations, then call update_tables with the unique group.');
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
export function normalizeCreateTableDefinitions(items) {
|
|
142
|
+
const batchNameMap = new Map(items
|
|
143
|
+
.map((item) => String(item?.name ?? ''))
|
|
144
|
+
.filter(Boolean)
|
|
145
|
+
.map((name) => [name.toLowerCase(), normalizeTableName(name)]));
|
|
146
|
+
return items.map((item) => {
|
|
147
|
+
const originalName = String(item?.name ?? '');
|
|
148
|
+
const name = normalizeTableName(originalName);
|
|
149
|
+
const relations = Array.isArray(item?.relations)
|
|
150
|
+
? item.relations.map((relation) => {
|
|
151
|
+
const target = relation?.targetTable ?? relation?.targetTableId;
|
|
152
|
+
if (typeof target !== 'string')
|
|
153
|
+
return relation;
|
|
154
|
+
const normalizedTarget = batchNameMap.get(target.toLowerCase());
|
|
155
|
+
if (!normalizedTarget || normalizedTarget === target)
|
|
156
|
+
return relation;
|
|
157
|
+
return relation?.targetTable !== undefined
|
|
158
|
+
? { ...relation, targetTable: normalizedTarget }
|
|
159
|
+
: { ...relation, targetTableId: normalizedTarget };
|
|
160
|
+
})
|
|
161
|
+
: item?.relations;
|
|
162
|
+
return {
|
|
163
|
+
...item,
|
|
164
|
+
name,
|
|
165
|
+
...(relations !== undefined ? { relations } : {}),
|
|
166
|
+
...(name !== originalName ? { _requestedTableName: originalName } : {}),
|
|
167
|
+
};
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
function relationTargetName(relation) {
|
|
171
|
+
const target = relation?.targetTable ?? relation?.targetTableId;
|
|
172
|
+
if (target && typeof target === 'object')
|
|
173
|
+
return target.name ?? target.alias ?? target.id ?? target._id;
|
|
174
|
+
return target;
|
|
175
|
+
}
|
|
176
|
+
export function computeBatchCleanupOrder(items) {
|
|
177
|
+
const tableNames = items.map((item) => String(item?.name || '')).filter(Boolean);
|
|
178
|
+
const tableSet = new Set(tableNames);
|
|
179
|
+
const edges = [];
|
|
180
|
+
for (const item of items) {
|
|
181
|
+
const source = String(item?.name || '');
|
|
182
|
+
if (!source)
|
|
183
|
+
continue;
|
|
184
|
+
const relations = Array.isArray(item.relations) ? item.relations : parseJsonArrayParam(`${source}.relations`, item.relations || '[]');
|
|
185
|
+
for (const relation of relations) {
|
|
186
|
+
const target = String(relationTargetName(relation) || '');
|
|
187
|
+
if (target && tableSet.has(target) && target !== source)
|
|
188
|
+
edges.push([source, target]);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
const remaining = new Set(tableNames);
|
|
192
|
+
const ordered = [];
|
|
193
|
+
while (remaining.size > 0) {
|
|
194
|
+
const leaves = [...remaining]
|
|
195
|
+
.filter((name) => !edges.some(([source, target]) => target === name && remaining.has(source) && remaining.has(target)))
|
|
196
|
+
.sort();
|
|
197
|
+
const batch = leaves.length ? leaves : [[...remaining].sort()[0]];
|
|
198
|
+
for (const name of batch) {
|
|
199
|
+
remaining.delete(name);
|
|
200
|
+
ordered.push(name);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
return ordered;
|
|
204
|
+
}
|
|
205
|
+
export function splitRelationConstraintGroups(groups, relationNames) {
|
|
206
|
+
const immediate = [];
|
|
207
|
+
const deferred = [];
|
|
208
|
+
for (const group of groups) {
|
|
209
|
+
if (group.some((field) => relationNames.has(field)))
|
|
210
|
+
deferred.push(group);
|
|
211
|
+
else
|
|
212
|
+
immediate.push(group);
|
|
213
|
+
}
|
|
214
|
+
return { immediate, deferred };
|
|
215
|
+
}
|
|
216
|
+
export function mergeConstraintGroups(existing, additions) {
|
|
217
|
+
const seen = new Set(existing.map((group) => JSON.stringify(group)));
|
|
218
|
+
const merged = [...existing];
|
|
219
|
+
for (const group of additions) {
|
|
220
|
+
const key = JSON.stringify(group);
|
|
221
|
+
if (!seen.has(key)) {
|
|
222
|
+
seen.add(key);
|
|
223
|
+
merged.push(group);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
return merged;
|
|
227
|
+
}
|
|
228
|
+
export function resolveRelationConstraintGroups(table, groups, groupName) {
|
|
229
|
+
const relationByProperty = new Map((table.relations || [])
|
|
230
|
+
.filter((relation) => relation?.propertyName)
|
|
231
|
+
.map((relation) => [relation.propertyName, relation]));
|
|
232
|
+
return groups.map((group) => group.map((field) => {
|
|
233
|
+
const relation = relationByProperty.get(field);
|
|
234
|
+
if (!relation)
|
|
235
|
+
return field;
|
|
236
|
+
const physicalColumn = relation.foreignKeyColumn || relation.fkColumn || relation.fkCol;
|
|
237
|
+
if (!physicalColumn) {
|
|
238
|
+
throw new Error(`${groupName} uses relation propertyName "${field}", but the created relation did not expose a physical FK column for indexing. ` +
|
|
239
|
+
'This usually means the relation is not a direct many-to-one/one-to-one relation. Keep relation indexes/uniques only on direct owning relations.');
|
|
240
|
+
}
|
|
241
|
+
return physicalColumn;
|
|
242
|
+
}));
|
|
243
|
+
}
|
|
244
|
+
export function assertIndexesDoNotReferenceUniqueFields(indexes, uniques) {
|
|
245
|
+
const conflicts = indexes
|
|
246
|
+
.map((indexGroup) => ({
|
|
247
|
+
indexGroup,
|
|
248
|
+
uniqueGroups: uniques
|
|
249
|
+
.map((uniqueGroup) => ({
|
|
250
|
+
uniqueGroup,
|
|
251
|
+
overlappingFields: indexGroup.filter((field) => uniqueGroup.includes(field)),
|
|
252
|
+
}))
|
|
253
|
+
.filter((conflict) => conflict.overlappingFields.length > 0),
|
|
254
|
+
}))
|
|
255
|
+
.filter((conflict) => conflict.uniqueGroups.length > 0);
|
|
256
|
+
if (conflicts.length > 0) {
|
|
257
|
+
const groups = conflicts
|
|
258
|
+
.map((conflict) => `${JSON.stringify(conflict.indexGroup)} overlaps unique group(s) ${conflict.uniqueGroups.map((item) => `${JSON.stringify(item.uniqueGroup)} via ${JSON.stringify(item.overlappingFields)}`).join(', ')}`)
|
|
259
|
+
.join('; ');
|
|
260
|
+
throw new Error(`Invalid schema constraints: indexes must not include fields that appear in uniques, including composite unique groups. Conflict(s): ${groups}. Unique constraints already create indexed lookups for their fields; remove those fields from indexes and keep them only in uniques.`);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
//# sourceMappingURL=schema-table-contracts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-table-contracts.js","sourceRoot":"","sources":["../../src/lib/schema-table-contracts.ts"],"names":[],"mappings":"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"}
|