@comake/skl-js-engine 1.3.13 → 1.3.15

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.
@@ -38,12 +38,12 @@ declare class GlobalHooksRegistry {
38
38
  registerBeforeExecuteCapabilityMapping(hook: GlobalExecuteCapabilityHook, priority?: number): symbol;
39
39
  registerAfterExecuteCapabilityMapping(hook: GlobalAfterHook, priority?: number): symbol;
40
40
  registerErrorExecuteCapabilityMapping(hook: GlobalErrorHook, priority?: number): symbol;
41
- executeBeforeCreate(entities: Entity[]): Promise<void>;
42
- executeAfterCreate(entities: Entity | Entity[]): Promise<any>;
43
- executeErrorCreate(entities: Entity[], error: Error): Promise<void>;
44
- executeBeforeExecuteCapabilityMapping(entities: Entity[], capabilityMapping: CapabilityMapping): Promise<void>;
45
- executeAfterExecuteCapabilityMapping(entities: Entity[], capabilityMapping: CapabilityMapping, result: any): Promise<any>;
46
- executeErrorExecuteCapabilityMapping(entities: Entity[], capabilityMapping: CapabilityMapping, error: Error): Promise<void>;
41
+ executeBeforeCreate(entities: Entity[], extras?: Partial<SklHookContext>): Promise<void>;
42
+ executeAfterCreate(entities: Entity | Entity[], extras?: Partial<SklHookContext>): Promise<any>;
43
+ executeErrorCreate(entities: Entity[], error: Error, extras?: Partial<SklHookContext>): Promise<void>;
44
+ executeBeforeExecuteCapabilityMapping(entities: Entity[], capabilityMapping: CapabilityMapping, extras?: Partial<SklHookContext>): Promise<void>;
45
+ executeAfterExecuteCapabilityMapping(entities: Entity[], capabilityMapping: CapabilityMapping, result: any, extras?: Partial<SklHookContext>): Promise<any>;
46
+ executeErrorExecuteCapabilityMapping(entities: Entity[], capabilityMapping: CapabilityMapping, error: Error, extras?: Partial<SklHookContext>): Promise<void>;
47
47
  }
48
48
  export declare const globalHooks: GlobalHooksRegistry;
49
49
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"globalHooks.d.ts","sourceRoot":"","sources":["../../src/hooks/globalHooks.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAG9C,eAAO,MAAM,SAAS;;;;;;CAMrB,CAAC;AAEF,eAAO,MAAM,UAAU;;;;CAItB,CAAC;AAGF,oBAAY,gBAAgB,GAAG,CAAC,OAAO,EAAE,cAAc,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AACjF,oBAAY,eAAe,GAAG,CAAC,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;AAC3F,oBAAY,eAAe,GAAG,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAC9F,oBAAY,2BAA2B,GAAG,CACxC,OAAO,EAAE,cAAc,EACvB,iBAAiB,EAAE,iBAAiB,KACjC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAS1B,cAAM,mBAAmB;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAoD;;IAY1E;;OAEG;IACH,QAAQ,CACN,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,gBAAgB,GAAG,eAAe,GAAG,eAAe,EAC1D,QAAQ,SAAI,GACX,MAAM;IAoBT;;OAEG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAgBnC;;OAEG;IACG,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,aAAa,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAkCtG,oBAAoB,CAAC,IAAI,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM;IAIvE,mBAAmB,CAAC,IAAI,EAAE,eAAe,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM;IAIrE,mBAAmB,CAAC,IAAI,EAAE,eAAe,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM;IAKrE,kBAAkB,CAAC,IAAI,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM;IAOrE,sCAAsC,CAAC,IAAI,EAAE,2BAA2B,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM;IAIpG,qCAAqC,CAAC,IAAI,EAAE,eAAe,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM;IAIvF,qCAAqC,CAAC,IAAI,EAAE,eAAe,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM;IAKjF,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAItD,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAY7D,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;IASnE,qCAAqC,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,iBAAiB,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ9G,oCAAoC,CACxC,QAAQ,EAAE,MAAM,EAAE,EAClB,iBAAiB,EAAE,iBAAiB,EACpC,MAAM,EAAE,GAAG,GACV,OAAO,CAAC,GAAG,CAAC;IAaT,oCAAoC,CACxC,QAAQ,EAAE,MAAM,EAAE,EAClB,iBAAiB,EAAE,iBAAiB,EACpC,KAAK,EAAE,KAAK,GACX,OAAO,CAAC,IAAI,CAAC;CAYjB;AAGD,eAAO,MAAM,WAAW,qBAA4B,CAAC"}
1
+ {"version":3,"file":"globalHooks.d.ts","sourceRoot":"","sources":["../../src/hooks/globalHooks.ts"],"names":[],"mappings":"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"}
@@ -64,6 +64,10 @@ class GlobalHooksRegistry {
64
64
  * Execute hooks for a specific operation and stage
65
65
  */
66
66
  async execute(type, stage, context, resultOrError) {
67
+ // Allow bypassing hooks to prevent re-entrancy from within hooks
68
+ if (context?.bypassHooks) {
69
+ return resultOrError;
70
+ }
67
71
  const hooksList = this.hooks.get(type)?.get(stage);
68
72
  if (!hooksList || hooksList.length === 0) {
69
73
  return resultOrError;
@@ -118,37 +122,40 @@ class GlobalHooksRegistry {
118
122
  return this.register(exports.HookTypes.EXECUTE_CAPABILITY_MAPPING, exports.HookStages.ERROR, hook, priority);
119
123
  }
120
124
  // Execution convenience methods
121
- async executeBeforeCreate(entities) {
122
- await this.execute(exports.HookTypes.CREATE, exports.HookStages.BEFORE, { entities, operation: 'save', operationParameters: {} });
125
+ async executeBeforeCreate(entities, extras) {
126
+ await this.execute(exports.HookTypes.CREATE, exports.HookStages.BEFORE, { entities, operation: 'save', operationParameters: {}, ...extras });
123
127
  }
124
- async executeAfterCreate(entities) {
128
+ async executeAfterCreate(entities, extras) {
125
129
  if (!Array.isArray(entities)) {
126
130
  entities = [entities];
127
131
  }
128
- return this.execute(exports.HookTypes.CREATE, exports.HookStages.AFTER, { entities, operation: 'save', operationParameters: {} }, entities);
132
+ return this.execute(exports.HookTypes.CREATE, exports.HookStages.AFTER, { entities, operation: 'save', operationParameters: {}, ...extras }, entities);
129
133
  }
130
- async executeErrorCreate(entities, error) {
131
- await this.execute(exports.HookTypes.CREATE, exports.HookStages.ERROR, { entities, operation: 'save', operationParameters: {} }, error);
134
+ async executeErrorCreate(entities, error, extras) {
135
+ await this.execute(exports.HookTypes.CREATE, exports.HookStages.ERROR, { entities, operation: 'save', operationParameters: {}, ...extras }, error);
132
136
  }
133
- async executeBeforeExecuteCapabilityMapping(entities, capabilityMapping) {
137
+ async executeBeforeExecuteCapabilityMapping(entities, capabilityMapping, extras) {
134
138
  await this.execute(exports.HookTypes.EXECUTE_CAPABILITY_MAPPING, exports.HookStages.BEFORE, {
135
139
  entities,
136
140
  operation: 'executeCapabilityMapping',
137
- operationParameters: { capabilityMapping }
141
+ operationParameters: { capabilityMapping },
142
+ ...extras
138
143
  });
139
144
  }
140
- async executeAfterExecuteCapabilityMapping(entities, capabilityMapping, result) {
145
+ async executeAfterExecuteCapabilityMapping(entities, capabilityMapping, result, extras) {
141
146
  return this.execute(exports.HookTypes.EXECUTE_CAPABILITY_MAPPING, exports.HookStages.AFTER, {
142
147
  entities,
143
148
  operation: 'executeCapabilityMapping',
144
- operationParameters: { capabilityMapping }
149
+ operationParameters: { capabilityMapping },
150
+ ...extras
145
151
  }, result);
146
152
  }
147
- async executeErrorExecuteCapabilityMapping(entities, capabilityMapping, error) {
153
+ async executeErrorExecuteCapabilityMapping(entities, capabilityMapping, error, extras) {
148
154
  await this.execute(exports.HookTypes.EXECUTE_CAPABILITY_MAPPING, exports.HookStages.ERROR, {
149
155
  entities,
150
156
  operation: 'executeCapabilityMapping',
151
- operationParameters: { capabilityMapping }
157
+ operationParameters: { capabilityMapping },
158
+ ...extras
152
159
  }, error);
153
160
  }
154
161
  }
@@ -1 +1 @@
1
- {"version":3,"file":"globalHooks.js","sourceRoot":"","sources":["../../src/hooks/globalHooks.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable id-length */\n/* eslint-disable symbol-description */\n/* eslint-disable @typescript-eslint/explicit-member-accessibility */\n/* eslint-disable @typescript-eslint/naming-convention */\nimport type { CapabilityMapping, Entity } from '../util/Types';\nimport type { SklHookContext } from './types';\n\n// Use symbols for hook types to avoid string collisions\nexport const HookTypes = {\n CREATE: Symbol('create'),\n READ: Symbol('read'),\n UPDATE: Symbol('update'),\n DELETE: Symbol('delete'),\n EXECUTE_CAPABILITY_MAPPING: Symbol('executeCapabilityMapping')\n};\n\nexport const HookStages = {\n BEFORE: Symbol('before'),\n AFTER: Symbol('after'),\n ERROR: Symbol('error')\n};\n\n// Hook function types\nexport type GlobalBeforeHook = (context: SklHookContext) => Promise<void> | void;\nexport type GlobalAfterHook = (context: SklHookContext, result: any) => Promise<any> | any;\nexport type GlobalErrorHook = (context: SklHookContext, error: Error) => Promise<void> | void;\nexport type GlobalExecuteCapabilityHook = (\n context: SklHookContext,\n capabilityMapping: CapabilityMapping,\n) => Promise<void> | void;\n// Hook registry entry type with metadata\ninterface HookEntry {\n id: symbol;\n fn: GlobalBeforeHook | GlobalAfterHook | GlobalErrorHook;\n priority: number;\n}\n\n// Registry to store global hooks\nclass GlobalHooksRegistry {\n private readonly hooks: Map<symbol, Map<symbol, HookEntry[]>> = new Map();\n\n constructor() {\n // Initialize hook maps for all CRUD operations and stages\n Object.values(HookTypes).forEach(type => {\n this.hooks.set(type, new Map());\n Object.values(HookStages).forEach(stage => {\n this.hooks.get(type)!.set(stage, []);\n });\n });\n }\n\n /**\n * Register a hook with optional priority (higher runs first)\n */\n register(\n type: symbol,\n stage: symbol,\n hook: GlobalBeforeHook | GlobalAfterHook | GlobalErrorHook,\n priority = 0\n ): symbol {\n const hookId = Symbol();\n const hooksList = this.hooks.get(type)?.get(stage);\n\n if (!hooksList) {\n throw new Error(`Invalid hook type or stage`);\n }\n\n hooksList.push({\n id: hookId,\n fn: hook,\n priority\n });\n\n // Sort by priority (descending)\n hooksList.sort((a, b) => b.priority - a.priority);\n\n return hookId;\n }\n\n /**\n * Unregister a hook by its ID\n */\n unregister(hookId: symbol): boolean {\n let removed = false;\n\n this.hooks.forEach(stageMap => {\n stageMap.forEach(hooksList => {\n const index = hooksList.findIndex(entry => entry.id === hookId);\n if (index !== -1) {\n hooksList.splice(index, 1);\n removed = true;\n }\n });\n });\n\n return removed;\n }\n\n /**\n * Execute hooks for a specific operation and stage\n */\n async execute(type: symbol, stage: symbol, context: SklHookContext, resultOrError?: any): Promise<any> {\n const hooksList = this.hooks.get(type)?.get(stage);\n\n if (!hooksList || hooksList.length === 0) {\n return resultOrError;\n }\n\n if (stage === HookStages.BEFORE) {\n for (const entry of hooksList) {\n await (entry.fn as GlobalBeforeHook)(context);\n }\n return resultOrError;\n }\n if (stage === HookStages.AFTER) {\n let result = resultOrError;\n for (const entry of hooksList) {\n const newResult = await (entry.fn as GlobalAfterHook)(context, result);\n if (newResult !== undefined) {\n result = newResult;\n }\n }\n return result;\n }\n if (stage === HookStages.ERROR) {\n for (const entry of hooksList) {\n await (entry.fn as GlobalErrorHook)(context, resultOrError);\n }\n return resultOrError;\n }\n\n return resultOrError;\n }\n\n // Convenience methods for common operations\n registerBeforeCreate(hook: GlobalBeforeHook, priority?: number): symbol {\n return this.register(HookTypes.CREATE, HookStages.BEFORE, hook, priority);\n }\n\n registerAfterCreate(hook: GlobalAfterHook, priority?: number): symbol {\n return this.register(HookTypes.CREATE, HookStages.AFTER, hook, priority);\n }\n\n registerErrorCreate(hook: GlobalErrorHook, priority?: number): symbol {\n return this.register(HookTypes.CREATE, HookStages.ERROR, hook, priority);\n }\n\n // Additional convenience methods for other CRUD operations\n registerBeforeRead(hook: GlobalBeforeHook, priority?: number): symbol {\n return this.register(HookTypes.READ, HookStages.BEFORE, hook, priority);\n }\n\n // ... other convenience methods for read, update, delete operations\n\n // Convenience methods for execute capability operations\n registerBeforeExecuteCapabilityMapping(hook: GlobalExecuteCapabilityHook, priority?: number): symbol {\n return this.register(HookTypes.EXECUTE_CAPABILITY_MAPPING, HookStages.BEFORE, hook, priority);\n }\n\n registerAfterExecuteCapabilityMapping(hook: GlobalAfterHook, priority?: number): symbol {\n return this.register(HookTypes.EXECUTE_CAPABILITY_MAPPING, HookStages.AFTER, hook, priority);\n }\n\n registerErrorExecuteCapabilityMapping(hook: GlobalErrorHook, priority?: number): symbol {\n return this.register(HookTypes.EXECUTE_CAPABILITY_MAPPING, HookStages.ERROR, hook, priority);\n }\n\n // Execution convenience methods\n async executeBeforeCreate(entities: Entity[]): Promise<void> {\n await this.execute(HookTypes.CREATE, HookStages.BEFORE, { entities, operation: 'save', operationParameters: {}});\n }\n\n async executeAfterCreate(entities: Entity | Entity[]): Promise<any> {\n if (!Array.isArray(entities)) {\n entities = [ entities ];\n }\n return this.execute(\n HookTypes.CREATE,\n HookStages.AFTER,\n { entities, operation: 'save', operationParameters: {}},\n entities\n );\n }\n\n async executeErrorCreate(entities: Entity[], error: Error): Promise<void> {\n await this.execute(\n HookTypes.CREATE,\n HookStages.ERROR,\n { entities, operation: 'save', operationParameters: {}},\n error\n );\n }\n\n async executeBeforeExecuteCapabilityMapping(entities: Entity[], capabilityMapping: CapabilityMapping): Promise<void> {\n await this.execute(HookTypes.EXECUTE_CAPABILITY_MAPPING, HookStages.BEFORE, {\n entities,\n operation: 'executeCapabilityMapping',\n operationParameters: { capabilityMapping }\n });\n }\n\n async executeAfterExecuteCapabilityMapping(\n entities: Entity[],\n capabilityMapping: CapabilityMapping,\n result: any\n ): Promise<any> {\n return this.execute(\n HookTypes.EXECUTE_CAPABILITY_MAPPING,\n HookStages.AFTER,\n {\n entities,\n operation: 'executeCapabilityMapping',\n operationParameters: { capabilityMapping }\n },\n result\n );\n }\n\n async executeErrorExecuteCapabilityMapping(\n entities: Entity[],\n capabilityMapping: CapabilityMapping,\n error: Error\n ): Promise<void> {\n await this.execute(\n HookTypes.EXECUTE_CAPABILITY_MAPPING,\n HookStages.ERROR,\n {\n entities,\n operation: 'executeCapabilityMapping',\n operationParameters: { capabilityMapping }\n },\n error\n );\n }\n}\n\n// Export a singleton instance\nexport const globalHooks = new GlobalHooksRegistry();\n"]}
1
+ {"version":3,"file":"globalHooks.js","sourceRoot":"","sources":["../../src/hooks/globalHooks.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable id-length */\n/* eslint-disable symbol-description */\n/* eslint-disable @typescript-eslint/explicit-member-accessibility */\n/* eslint-disable @typescript-eslint/naming-convention */\nimport type { CapabilityMapping, Entity } from '../util/Types';\nimport type { SklHookContext } from './types';\n\n// Use symbols for hook types to avoid string collisions\nexport const HookTypes = {\n CREATE: Symbol('create'),\n READ: Symbol('read'),\n UPDATE: Symbol('update'),\n DELETE: Symbol('delete'),\n EXECUTE_CAPABILITY_MAPPING: Symbol('executeCapabilityMapping')\n};\n\nexport const HookStages = {\n BEFORE: Symbol('before'),\n AFTER: Symbol('after'),\n ERROR: Symbol('error')\n};\n\n// Hook function types\nexport type GlobalBeforeHook = (context: SklHookContext) => Promise<void> | void;\nexport type GlobalAfterHook = (context: SklHookContext, result: any) => Promise<any> | any;\nexport type GlobalErrorHook = (context: SklHookContext, error: Error) => Promise<void> | void;\nexport type GlobalExecuteCapabilityHook = (\n context: SklHookContext,\n capabilityMapping: CapabilityMapping,\n) => Promise<void> | void;\n// Hook registry entry type with metadata\ninterface HookEntry {\n id: symbol;\n fn: GlobalBeforeHook | GlobalAfterHook | GlobalErrorHook;\n priority: number;\n}\n\n// Registry to store global hooks\nclass GlobalHooksRegistry {\n private readonly hooks: Map<symbol, Map<symbol, HookEntry[]>> = new Map();\n\n constructor() {\n // Initialize hook maps for all CRUD operations and stages\n Object.values(HookTypes).forEach(type => {\n this.hooks.set(type, new Map());\n Object.values(HookStages).forEach(stage => {\n this.hooks.get(type)!.set(stage, []);\n });\n });\n }\n\n /**\n * Register a hook with optional priority (higher runs first)\n */\n register(\n type: symbol,\n stage: symbol,\n hook: GlobalBeforeHook | GlobalAfterHook | GlobalErrorHook,\n priority = 0\n ): symbol {\n const hookId = Symbol();\n const hooksList = this.hooks.get(type)?.get(stage);\n\n if (!hooksList) {\n throw new Error(`Invalid hook type or stage`);\n }\n\n hooksList.push({\n id: hookId,\n fn: hook,\n priority\n });\n\n // Sort by priority (descending)\n hooksList.sort((a, b) => b.priority - a.priority);\n\n return hookId;\n }\n\n /**\n * Unregister a hook by its ID\n */\n unregister(hookId: symbol): boolean {\n let removed = false;\n\n this.hooks.forEach(stageMap => {\n stageMap.forEach(hooksList => {\n const index = hooksList.findIndex(entry => entry.id === hookId);\n if (index !== -1) {\n hooksList.splice(index, 1);\n removed = true;\n }\n });\n });\n\n return removed;\n }\n\n /**\n * Execute hooks for a specific operation and stage\n */\n async execute(type: symbol, stage: symbol, context: SklHookContext, resultOrError?: any): Promise<any> {\n // Allow bypassing hooks to prevent re-entrancy from within hooks\n if (context?.bypassHooks) {\n return resultOrError;\n }\n const hooksList = this.hooks.get(type)?.get(stage);\n\n if (!hooksList || hooksList.length === 0) {\n return resultOrError;\n }\n\n if (stage === HookStages.BEFORE) {\n for (const entry of hooksList) {\n await (entry.fn as GlobalBeforeHook)(context);\n }\n return resultOrError;\n }\n if (stage === HookStages.AFTER) {\n let result = resultOrError;\n for (const entry of hooksList) {\n const newResult = await (entry.fn as GlobalAfterHook)(context, result);\n if (newResult !== undefined) {\n result = newResult;\n }\n }\n return result;\n }\n if (stage === HookStages.ERROR) {\n for (const entry of hooksList) {\n await (entry.fn as GlobalErrorHook)(context, resultOrError);\n }\n return resultOrError;\n }\n\n return resultOrError;\n }\n\n // Convenience methods for common operations\n registerBeforeCreate(hook: GlobalBeforeHook, priority?: number): symbol {\n return this.register(HookTypes.CREATE, HookStages.BEFORE, hook, priority);\n }\n\n registerAfterCreate(hook: GlobalAfterHook, priority?: number): symbol {\n return this.register(HookTypes.CREATE, HookStages.AFTER, hook, priority);\n }\n\n registerErrorCreate(hook: GlobalErrorHook, priority?: number): symbol {\n return this.register(HookTypes.CREATE, HookStages.ERROR, hook, priority);\n }\n\n // Additional convenience methods for other CRUD operations\n registerBeforeRead(hook: GlobalBeforeHook, priority?: number): symbol {\n return this.register(HookTypes.READ, HookStages.BEFORE, hook, priority);\n }\n\n // ... other convenience methods for read, update, delete operations\n\n // Convenience methods for execute capability operations\n registerBeforeExecuteCapabilityMapping(hook: GlobalExecuteCapabilityHook, priority?: number): symbol {\n return this.register(HookTypes.EXECUTE_CAPABILITY_MAPPING, HookStages.BEFORE, hook, priority);\n }\n\n registerAfterExecuteCapabilityMapping(hook: GlobalAfterHook, priority?: number): symbol {\n return this.register(HookTypes.EXECUTE_CAPABILITY_MAPPING, HookStages.AFTER, hook, priority);\n }\n\n registerErrorExecuteCapabilityMapping(hook: GlobalErrorHook, priority?: number): symbol {\n return this.register(HookTypes.EXECUTE_CAPABILITY_MAPPING, HookStages.ERROR, hook, priority);\n }\n\n // Execution convenience methods\n async executeBeforeCreate(entities: Entity[], extras?: Partial<SklHookContext>): Promise<void> {\n await this.execute(\n HookTypes.CREATE,\n HookStages.BEFORE,\n { entities, operation: 'save', operationParameters: {}, ...extras}\n );\n }\n\n async executeAfterCreate(entities: Entity | Entity[], extras?: Partial<SklHookContext>): Promise<any> {\n if (!Array.isArray(entities)) {\n entities = [ entities ];\n }\n return this.execute(\n HookTypes.CREATE,\n HookStages.AFTER,\n { entities, operation: 'save', operationParameters: {}, ...extras},\n entities\n );\n }\n\n async executeErrorCreate(entities: Entity[], error: Error, extras?: Partial<SklHookContext>): Promise<void> {\n await this.execute(\n HookTypes.CREATE,\n HookStages.ERROR,\n { entities, operation: 'save', operationParameters: {}, ...extras},\n error\n );\n }\n\n async executeBeforeExecuteCapabilityMapping(\n entities: Entity[],\n capabilityMapping: CapabilityMapping,\n extras?: Partial<SklHookContext>\n ): Promise<void> {\n await this.execute(HookTypes.EXECUTE_CAPABILITY_MAPPING, HookStages.BEFORE, {\n entities,\n operation: 'executeCapabilityMapping',\n operationParameters: { capabilityMapping },\n ...extras\n });\n }\n\n async executeAfterExecuteCapabilityMapping(\n entities: Entity[],\n capabilityMapping: CapabilityMapping,\n result: any,\n extras?: Partial<SklHookContext>\n ): Promise<any> {\n return this.execute(\n HookTypes.EXECUTE_CAPABILITY_MAPPING,\n HookStages.AFTER,\n {\n entities,\n operation: 'executeCapabilityMapping',\n operationParameters: { capabilityMapping },\n ...extras\n },\n result\n );\n }\n\n async executeErrorExecuteCapabilityMapping(\n entities: Entity[],\n capabilityMapping: CapabilityMapping,\n error: Error,\n extras?: Partial<SklHookContext>\n ): Promise<void> {\n await this.execute(\n HookTypes.EXECUTE_CAPABILITY_MAPPING,\n HookStages.ERROR,\n {\n entities,\n operation: 'executeCapabilityMapping',\n operationParameters: { capabilityMapping },\n ...extras\n },\n error\n );\n }\n}\n\n// Export a singleton instance\nexport const globalHooks = new GlobalHooksRegistry();\n"]}
@@ -1,7 +1,9 @@
1
- import type { Entity } from '../util/Types';
1
+ import type { Entity, SKLEngineInterface } from '../util/Types';
2
2
  export declare type SklHookContext = {
3
3
  entities: Entity[];
4
4
  operation: string;
5
5
  operationParameters: Record<string, any>;
6
+ sklEngine?: SKLEngineInterface;
7
+ bypassHooks?: boolean;
6
8
  };
7
9
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/hooks/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAE5C,oBAAY,cAAc,GAAG;IAC3B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC1C,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/hooks/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEhE,oBAAY,cAAc,GAAG;IAC3B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACzC,SAAS,CAAC,EAAE,kBAAkB,CAAC;IAC/B,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/hooks/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { Entity } from '../util/Types';\n\nexport type SklHookContext = {\n entities: Entity[];\n operation: string;\n operationParameters: Record<string, any>;\n};\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/hooks/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { Entity, SKLEngineInterface } from '../util/Types';\n\nexport type SklHookContext = {\n entities: Entity[];\n operation: string;\n operationParameters: Record<string, any>;\n sklEngine?: SKLEngineInterface;\n bypassHooks?: boolean;\n};\n"]}
@@ -8,6 +8,7 @@ export interface EntityUpdateQueries {
8
8
  export interface EntityUpdateTriples {
9
9
  entityTriples: Triple[];
10
10
  timestampTriples: Triple[];
11
+ insertions: GraphQuads[];
11
12
  }
12
13
  export interface SparqlUpdateBuilderArgs {
13
14
  setTimestamps?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"SparqlUpdateBuilder.d.ts","sourceRoot":"","sources":["../../../../src/storage/query-adapter/sparql/SparqlUpdateBuilder.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,MAAM,EACN,UAAU,EACV,MAAM,EAGN,kBAAkB,EAEnB,MAAM,UAAU,CAAC;AAoBlB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAIlD,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAC5B,UAAU,EAAE,UAAU,EAAE,CAAC;IACzB,mBAAmB,EAAE,UAAU,EAAE,CAAC;CACnC;AAED,MAAM,WAAW,mBAAmB;IAClC,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,uBAAuB;IACtC,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAoB;IACtD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAU;gBAErB,IAAI,CAAC,EAAE,uBAAuB;IAK1C,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM;IAMnF,WAAW,CAAC,gBAAgB,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM;IAmBxD,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM;IAMnD,WAAW,CAAC,gBAAgB,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM;IAMxD,cAAc,IAAI,MAAM;IAI/B,OAAO,CAAC,6CAA6C;IAqErD,OAAO,CAAC,mBAAmB;IAoB3B,OAAO,CAAC,qCAAqC;IAgB7C,OAAO,CAAC,qBAAqB;IAO7B,OAAO,CAAC,0BAA0B;IAOlC,OAAO,CAAC,8BAA8B;IAgBtC,OAAO,CAAC,sBAAsB;IAqB9B,OAAO,CAAC,eAAe;IAiCvB,OAAO,CAAC,wCAAwC;IAUhD,OAAO,CAAC,2CAA2C;IAenD,OAAO,CAAC,gDAAgD;IAYxD,OAAO,CAAC,wCAAwC;IA0BhD,OAAO,CAAC,0BAA0B;IAalC,OAAO,CAAC,mBAAmB;IAa3B,OAAO,CAAC,wBAAwB;CAKjC"}
1
+ {"version":3,"file":"SparqlUpdateBuilder.d.ts","sourceRoot":"","sources":["../../../../src/storage/query-adapter/sparql/SparqlUpdateBuilder.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,MAAM,EACN,UAAU,EACV,MAAM,EAGN,kBAAkB,EAEnB,MAAM,UAAU,CAAC;AAoBlB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAIlD,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAC5B,UAAU,EAAE,UAAU,EAAE,CAAC;IACzB,mBAAmB,EAAE,UAAU,EAAE,CAAC;CACnC;AAED,MAAM,WAAW,mBAAmB;IAClC,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,UAAU,EAAE,UAAU,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,uBAAuB;IACtC,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAoB;IACtD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAU;gBAErB,IAAI,CAAC,EAAE,uBAAuB;IAK1C,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM;IAMnF,WAAW,CAAC,gBAAgB,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM;IAmBxD,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM;IAMnD,WAAW,CAAC,gBAAgB,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM;IAMxD,cAAc,IAAI,MAAM;IAI/B,OAAO,CAAC,6CAA6C;IAqFrD,OAAO,CAAC,mBAAmB;IAoB3B,OAAO,CAAC,qCAAqC;IAgB7C,OAAO,CAAC,qBAAqB;IAO7B,OAAO,CAAC,0BAA0B;IAOlC,OAAO,CAAC,8BAA8B;IAwBtC,OAAO,CAAC,sBAAsB;IAoB9B,OAAO,CAAC,eAAe;IAkCvB,OAAO,CAAC,wCAAwC;IAchD,OAAO,CAAC,2CAA2C;IAenD,OAAO,CAAC,gDAAgD;IAYxD,OAAO,CAAC,wCAAwC;IAiChD,OAAO,CAAC,0BAA0B;IAalC,OAAO,CAAC,mBAAmB;IAa3B,OAAO,CAAC,wBAAwB;CAKjC"}
@@ -56,9 +56,9 @@ class SparqlUpdateBuilder {
56
56
  return ids.flatMap((id) => {
57
57
  const subject = data_model_1.default.namedNode(id);
58
58
  const { attributesToUpdate, attributesToDelete } = this.partitionAttributes(attributes);
59
- const deletionTriples = this.partialEntityToDeletionTriples(attributesToUpdate, subject);
60
- const insertionTriples = this.partialEntityToTriples(subject, attributesToUpdate);
61
- const deleteOnlyTriples = this.partialEntityToDeletionTriples(attributesToDelete, subject);
59
+ const { triples: deletionTriples, deletions: deletionDeletions } = this.partialEntityToDeletionTriples(attributesToUpdate, subject);
60
+ const { triples: insertionTriples, insertions: insertionInsertions } = this.partialEntityToTriples(subject, attributesToUpdate);
61
+ const { triples: deleteOnlyTriples } = this.partialEntityToDeletionTriples(attributesToDelete, subject);
62
62
  const updates = [];
63
63
  if (deletionTriples.length > 0) {
64
64
  updates.push({
@@ -71,10 +71,23 @@ class SparqlUpdateBuilder {
71
71
  }
72
72
  });
73
73
  }
74
+ for (const deletion of deletionDeletions) {
75
+ updates.push({
76
+ updateType: 'insertdelete',
77
+ delete: [deletion],
78
+ insert: [],
79
+ where: [
80
+ ...deletion.triples.map((triple) => (0, SparqlUtil_1.createSparqlOptional)([(0, SparqlUtil_1.createSparqlBasicGraphPattern)([triple])]))
81
+ ],
82
+ using: {
83
+ default: [deletion.name]
84
+ }
85
+ });
86
+ }
74
87
  if (insertionTriples.length > 0) {
75
88
  updates.push({
76
89
  updateType: 'insert',
77
- insert: [(0, SparqlUtil_1.createSparqlGraphQuads)(subject, insertionTriples)]
90
+ insert: [(0, SparqlUtil_1.createSparqlGraphQuads)(subject, insertionTriples), ...insertionInsertions]
78
91
  });
79
92
  }
80
93
  if (deleteOnlyTriples.length > 0) {
@@ -125,9 +138,9 @@ class SparqlUpdateBuilder {
125
138
  entitiesToGraphDeletionsAndInsertions(entities) {
126
139
  return entities.reduce((obj, entity) => {
127
140
  const entityGraphName = data_model_1.default.namedNode(entity['@id']);
128
- const { entityTriples, timestampTriples } = this.entityToTriples(entity, entityGraphName);
141
+ const { entityTriples, timestampTriples, insertions } = this.entityToTriples(entity, entityGraphName);
129
142
  obj.clear.push((0, SparqlUtil_1.createSparqlClearUpdate)(entityGraphName));
130
- obj.insertions.push((0, SparqlUtil_1.createSparqlGraphQuads)(entityGraphName, entityTriples));
143
+ obj.insertions.push((0, SparqlUtil_1.createSparqlGraphQuads)(entityGraphName, entityTriples), ...insertions);
131
144
  if (timestampTriples.length > 0) {
132
145
  obj.timestampInsertions.push((0, SparqlUtil_1.createSparqlGraphQuads)(entityGraphName, timestampTriples));
133
146
  }
@@ -147,48 +160,55 @@ class SparqlUpdateBuilder {
147
160
  });
148
161
  }
149
162
  partialEntityToDeletionTriples(entity, subject) {
150
- return Object.keys(entity).reduce((triples, key) => {
163
+ return Object.entries(entity).reduce((acc, [key, value]) => {
151
164
  if (key !== '@id') {
152
- return [
153
- ...triples,
154
- this.buildTriplesWithSubjectPredicateAndVariableValue(subject, data_model_1.default.namedNode(key), this.variableGenerator.getNext())
155
- ];
165
+ let deletions = [];
166
+ if (value && typeof value === 'object' && '@id' in value && typeof value['@id'] === 'string' && '@type' in value) {
167
+ const { triples: nestedTriples, deletions: nestedDeletions } = this.partialEntityToDeletionTriples(value, data_model_1.default.namedNode(value['@id']));
168
+ deletions = [...deletions, (0, SparqlUtil_1.createSparqlGraphQuads)(data_model_1.default.namedNode(value['@id']), nestedTriples), ...nestedDeletions];
169
+ }
170
+ return {
171
+ triples: [
172
+ ...acc.triples,
173
+ this.buildTriplesWithSubjectPredicateAndVariableValue(subject, key === '@type' ? SparqlUtil_1.rdfTypeNamedNode : data_model_1.default.namedNode(key), this.variableGenerator.getNext())
174
+ ],
175
+ deletions: [...acc.deletions, ...deletions]
176
+ };
156
177
  }
157
- return triples;
158
- }, []);
178
+ return acc;
179
+ }, { triples: [], deletions: [] });
159
180
  }
160
181
  partialEntityToTriples(subject, entity) {
161
- const entityTriples = Object.entries(entity).reduce((triples, [key, value]) => {
182
+ return Object.entries(entity).reduce((acc, [key, value]) => {
162
183
  const values = (0, Util_1.ensureArray)(value);
163
184
  if (key !== '@id') {
164
185
  let predicateTriples;
165
186
  if (key === '@type') {
166
- predicateTriples = this.buildTriplesWithSubjectPredicateAndIriValue(subject, SparqlUtil_1.rdfTypeNamedNode, values);
187
+ predicateTriples = { triples: this.buildTriplesWithSubjectPredicateAndIriValue(subject, SparqlUtil_1.rdfTypeNamedNode, values), insertions: [] };
167
188
  }
168
189
  else {
169
190
  predicateTriples = this.buildTriplesForSubjectPredicateAndValues(subject, key, values);
170
191
  }
171
- return [...triples, ...predicateTriples];
192
+ return { triples: [...acc.triples, ...predicateTriples.triples], insertions: [...acc.insertions, ...predicateTriples.insertions] };
172
193
  }
173
- return triples;
174
- }, []);
175
- return entityTriples;
194
+ return acc;
195
+ }, { triples: [], insertions: [] });
176
196
  }
177
197
  entityToTriples(entity, subject) {
178
- const entityTriples = Object.entries(entity).reduce((triples, [key, value]) => {
198
+ const entityTriples = Object.entries(entity).reduce((acc, [key, value]) => {
179
199
  const values = (0, Util_1.ensureArray)(value);
180
200
  if (key !== '@id') {
181
201
  if (key === '@type') {
182
202
  const predicateTriples = this.buildTriplesWithSubjectPredicateAndIriValue(subject, SparqlUtil_1.rdfTypeNamedNode, values);
183
- return [...triples, ...predicateTriples];
203
+ return { triples: [...acc.triples, ...predicateTriples], insertions: acc.insertions };
184
204
  }
185
205
  if (!(this.setTimestamps && key === constants_1.EngineConstants.prop.dateModified)) {
186
206
  const predicateTriples = this.buildTriplesForSubjectPredicateAndValues(subject, key, values);
187
- return [...triples, ...predicateTriples];
207
+ return { triples: [...acc.triples, ...predicateTriples.triples], insertions: [...acc.insertions, ...predicateTriples.insertions] };
188
208
  }
189
209
  }
190
- return triples;
191
- }, []);
210
+ return acc;
211
+ }, { triples: [], insertions: [] });
192
212
  const timestampTriples = [];
193
213
  if (this.setTimestamps && subject.termType === 'NamedNode') {
194
214
  if (!(constants_1.EngineConstants.prop.dateCreated in entity)) {
@@ -197,13 +217,19 @@ class SparqlUpdateBuilder {
197
217
  timestampTriples.push({ subject, predicate: SparqlUtil_1.modified, object: SparqlUtil_1.now });
198
218
  }
199
219
  return {
200
- entityTriples,
220
+ entityTriples: entityTriples.triples,
221
+ insertions: entityTriples.insertions,
201
222
  timestampTriples
202
223
  };
203
224
  }
204
225
  buildTriplesForSubjectPredicateAndValues(subject, predicate, values) {
205
226
  const predicateTerm = data_model_1.default.namedNode(predicate);
206
- return values.flatMap((value) => this.buildTriplesWithSubjectPredicateAndValue(subject, predicateTerm, value));
227
+ // Return values.flatMap((value: any): { triples: Triple[]; insertions: GraphQuads[] } =>
228
+ // this.buildTriplesWithSubjectPredicateAndValue(subject, predicateTerm, value));
229
+ return values.reduce((acc, value) => {
230
+ const { triples, insertions } = this.buildTriplesWithSubjectPredicateAndValue(subject, predicateTerm, value);
231
+ return { triples: [...acc.triples, ...triples], insertions: [...acc.insertions, ...insertions] };
232
+ }, { triples: [], insertions: [] });
207
233
  }
208
234
  buildTriplesWithSubjectPredicateAndIriValue(subject, predicate, values) {
209
235
  return values.map((valueItem) => ({
@@ -223,21 +249,28 @@ class SparqlUpdateBuilder {
223
249
  const isObject = typeof value === 'object';
224
250
  if (isObject) {
225
251
  if ('@list' in value) {
226
- return this.buildTriplesForList(subject, predicate, value['@list']);
252
+ return { triples: this.buildTriplesForList(subject, predicate, value['@list']), insertions: [] };
227
253
  }
228
254
  if ('@value' in value) {
229
- return [{ subject, predicate, object: this.jsonLdValueObjectToLiteral(value) }];
255
+ return { triples: [{ subject, predicate, object: this.jsonLdValueObjectToLiteral(value) }], insertions: [] };
230
256
  }
231
257
  const isReferenceObject = '@id' in value;
232
258
  const isBlankNodeReferenceObject = !isReferenceObject || value['@id'].startsWith('_:');
233
259
  if (isBlankNodeReferenceObject) {
234
- return this.buildTriplesForBlankNode(subject, predicate, value);
260
+ return { triples: this.buildTriplesForBlankNode(subject, predicate, value), insertions: [] };
235
261
  }
236
262
  if (isReferenceObject) {
237
- return [{ subject, predicate, object: data_model_1.default.namedNode(value['@id']) }];
263
+ const triples = [
264
+ { subject, predicate, object: data_model_1.default.namedNode(value['@id']) }
265
+ ];
266
+ if (value['@type']) {
267
+ const { entityTriples, insertions } = this.entityToTriples(value, data_model_1.default.namedNode(value['@id']));
268
+ return { triples, insertions: [...insertions, (0, SparqlUtil_1.createSparqlGraphQuads)(data_model_1.default.namedNode(value['@id']), entityTriples)] };
269
+ }
270
+ return { triples, insertions: [] };
238
271
  }
239
272
  }
240
- return [{ subject, predicate, object: (0, TripleUtil_1.valueToLiteral)(value) }];
273
+ return { triples: [{ subject, predicate, object: (0, TripleUtil_1.valueToLiteral)(value) }], insertions: [] };
241
274
  }
242
275
  jsonLdValueObjectToLiteral(value) {
243
276
  if (typeof value['@value'] === 'object') {
@@ -258,7 +291,7 @@ class SparqlUpdateBuilder {
258
291
  : [{ subject: blankNode, predicate: SparqlUtil_1.restPredicate, object: SparqlUtil_1.nilPredicate }];
259
292
  return [
260
293
  { subject, predicate, object: blankNode },
261
- ...this.buildTriplesWithSubjectPredicateAndValue(blankNode, SparqlUtil_1.firstPredicate, value[0]),
294
+ ...this.buildTriplesWithSubjectPredicateAndValue(blankNode, SparqlUtil_1.firstPredicate, value[0]).triples,
262
295
  ...rest
263
296
  ];
264
297
  }
@@ -1 +1 @@
1
- {"version":3,"file":"SparqlUpdateBuilder.js","sourceRoot":"","sources":["../../../../src/storage/query-adapter/sparql/SparqlUpdateBuilder.ts"],"names":[],"mappings":"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","sourcesContent":["import { RDF } from '@comake/rmlmapper-js';\nimport DataFactory from '@rdfjs/data-model';\nimport type { BlankNode, NamedNode, Term } from '@rdfjs/types';\nimport type { NodeObject, ValueObject } from 'jsonld/jsonld';\nimport type {\n Update,\n GraphQuads,\n Triple,\n InsertDeleteOperation,\n UpdateOperation,\n ClearDropOperation,\n Pattern\n} from 'sparqljs';\nimport { EngineConstants } from '../../../constants';\nimport {\n bindNow,\n created,\n createSparqlBasicGraphPattern,\n createSparqlClearUpdate,\n createSparqlDropUpdate,\n createSparqlGraphQuads,\n createSparqlOptional,\n createSparqlUpdate,\n dropAll,\n firstPredicate,\n modified,\n nilPredicate,\n now,\n rdfTypeNamedNode,\n restPredicate\n} from '../../../util/SparqlUtil';\nimport { valueToLiteral } from '../../../util/TripleUtil';\nimport type { Entity } from '../../../util/Types';\nimport { ensureArray } from '../../../util/Util';\nimport { VariableGenerator } from './VariableGenerator';\n\nexport interface EntityUpdateQueries {\n clear: ClearDropOperation[];\n insertions: GraphQuads[];\n timestampInsertions: GraphQuads[];\n}\n\nexport interface EntityUpdateTriples {\n entityTriples: Triple[];\n timestampTriples: Triple[];\n}\n\nexport interface SparqlUpdateBuilderArgs {\n setTimestamps?: boolean;\n}\n\nexport class SparqlUpdateBuilder {\n private readonly variableGenerator: VariableGenerator;\n private readonly setTimestamps: boolean;\n\n public constructor(args?: SparqlUpdateBuilderArgs) {\n this.variableGenerator = new VariableGenerator();\n this.setTimestamps = args?.setTimestamps ?? false;\n }\n\n public buildPartialUpdate(idOrIds: string | string[], attributes: Partial<Entity>): Update {\n const ids = ensureArray(idOrIds);\n const updates = this.idsAndAttributesToGraphDeletionsAndInsertions(ids, attributes);\n return createSparqlUpdate(updates);\n }\n\n public buildUpdate(entityOrEntities: Entity | Entity[]): Update {\n const entities = ensureArray(entityOrEntities);\n const { clear, insertions, timestampInsertions } = this.entitiesToGraphDeletionsAndInsertions(entities);\n const insertUpdate: InsertDeleteOperation = {\n updateType: 'insert',\n insert: insertions\n };\n const updates = [ ...clear, insertUpdate ];\n if (timestampInsertions.length > 0) {\n updates.push({\n updateType: 'insertdelete',\n delete: [],\n insert: timestampInsertions,\n where: [ bindNow ]\n });\n }\n return createSparqlUpdate(updates);\n }\n\n public buildDeleteById(idOrIds: string | string[]): Update {\n const ids = ensureArray(idOrIds);\n const drops = this.idsToGraphDropUpdates(ids);\n return createSparqlUpdate(drops);\n }\n\n public buildDelete(entityOrEntities: Entity | Entity[]): Update {\n const entities = ensureArray(entityOrEntities);\n const drops = this.entitiesToGraphDropUpdates(entities);\n return createSparqlUpdate(drops);\n }\n\n public buildDeleteAll(): Update {\n return createSparqlUpdate([ dropAll ]);\n }\n\n private idsAndAttributesToGraphDeletionsAndInsertions(\n ids: string[],\n attributes: Partial<Entity>\n ): InsertDeleteOperation[] {\n return ids.flatMap((id): InsertDeleteOperation[] => {\n const subject = DataFactory.namedNode(id);\n const { attributesToUpdate, attributesToDelete } = this.partitionAttributes(attributes);\n const deletionTriples = this.partialEntityToDeletionTriples(attributesToUpdate, subject);\n const insertionTriples = this.partialEntityToTriples(subject, attributesToUpdate);\n const deleteOnlyTriples = this.partialEntityToDeletionTriples(attributesToDelete, subject);\n\n const updates: InsertDeleteOperation[] = [];\n\n if (deletionTriples.length > 0) {\n updates.push({\n updateType: 'insertdelete',\n delete: [ createSparqlGraphQuads(subject, deletionTriples) ],\n insert: [],\n where: deletionTriples.map(\n (triple): Pattern => createSparqlOptional([ createSparqlBasicGraphPattern([ triple ]) ])\n ),\n using: {\n default: [ subject ]\n }\n } as InsertDeleteOperation);\n }\n\n if (insertionTriples.length > 0) {\n updates.push({\n updateType: 'insert',\n insert: [ createSparqlGraphQuads(subject, insertionTriples) ]\n } as InsertDeleteOperation);\n }\n\n if (deleteOnlyTriples.length > 0) {\n updates.push({\n updateType: 'insertdelete',\n delete: [ createSparqlGraphQuads(subject, deleteOnlyTriples) ],\n insert: [],\n where: deleteOnlyTriples.map(\n (triple): Pattern => createSparqlOptional([ createSparqlBasicGraphPattern([ triple ]) ])\n ),\n using: {\n default: [ subject ]\n }\n } as InsertDeleteOperation);\n }\n\n const hasAnyChanges = deletionTriples.length > 0 || insertionTriples.length > 0 || deleteOnlyTriples.length > 0;\n\n if (this.setTimestamps && hasAnyChanges) {\n const modifiedVariable = DataFactory.variable(this.variableGenerator.getNext());\n const modifiedDeletionTriple = { subject, predicate: modified, object: modifiedVariable };\n const modifiedInsertionTriple = { subject, predicate: modified, object: now };\n updates.push({\n updateType: 'insertdelete',\n delete: [ createSparqlGraphQuads(subject, [ modifiedDeletionTriple ]) ],\n insert: [ createSparqlGraphQuads(subject, [ modifiedInsertionTriple ]) ],\n where: [ createSparqlOptional([ createSparqlBasicGraphPattern([ modifiedDeletionTriple ]) ]), bindNow ],\n using: {\n default: [ subject ]\n }\n } as InsertDeleteOperation);\n }\n\n return updates;\n });\n }\n\n private partitionAttributes(\n attributes: Partial<Entity>\n ): { attributesToUpdate: Partial<Entity>; attributesToDelete: Partial<Entity> } {\n const attributesToUpdate: Partial<Entity> = {};\n const attributesToDelete: Partial<Entity> = {};\n\n Object.entries(attributes).forEach(([ key, value ]) => {\n if (key === '@id') {\n return;\n }\n if (value === null) {\n attributesToDelete[key] = value;\n } else if (value !== undefined) {\n attributesToUpdate[key] = value;\n }\n });\n\n return { attributesToUpdate, attributesToDelete };\n }\n\n private entitiesToGraphDeletionsAndInsertions(entities: Entity[]): EntityUpdateQueries {\n return entities.reduce(\n (obj: EntityUpdateQueries, entity): EntityUpdateQueries => {\n const entityGraphName = DataFactory.namedNode(entity['@id']);\n const { entityTriples, timestampTriples } = this.entityToTriples(entity, entityGraphName);\n obj.clear.push(createSparqlClearUpdate(entityGraphName));\n obj.insertions.push(createSparqlGraphQuads(entityGraphName, entityTriples));\n if (timestampTriples.length > 0) {\n obj.timestampInsertions.push(createSparqlGraphQuads(entityGraphName, timestampTriples));\n }\n return obj;\n },\n { clear: [], insertions: [], timestampInsertions: []}\n );\n }\n\n private idsToGraphDropUpdates(ids: string[]): UpdateOperation[] {\n return ids.map((id): UpdateOperation => {\n const entityGraphName = DataFactory.namedNode(id);\n return createSparqlDropUpdate(entityGraphName);\n });\n }\n\n private entitiesToGraphDropUpdates(entities: Entity[]): UpdateOperation[] {\n return entities.map((entity): UpdateOperation => {\n const entityGraphName = DataFactory.namedNode(entity['@id']);\n return createSparqlDropUpdate(entityGraphName);\n });\n }\n\n private partialEntityToDeletionTriples(entity: NodeObject, subject: NamedNode): Triple[] {\n return Object.keys(entity).reduce((triples: Triple[], key): Triple[] => {\n if (key !== '@id') {\n return [\n ...triples,\n this.buildTriplesWithSubjectPredicateAndVariableValue(\n subject,\n DataFactory.namedNode(key),\n this.variableGenerator.getNext()\n )\n ];\n }\n return triples;\n }, []);\n }\n\n private partialEntityToTriples(subject: NamedNode, entity: NodeObject): Triple[] {\n const entityTriples = Object.entries(entity).reduce((triples: Triple[], [ key, value ]): Triple[] => {\n const values = ensureArray(value);\n if (key !== '@id') {\n let predicateTriples: Triple[];\n if (key === '@type') {\n predicateTriples = this.buildTriplesWithSubjectPredicateAndIriValue(\n subject,\n rdfTypeNamedNode,\n values as string[]\n );\n } else {\n predicateTriples = this.buildTriplesForSubjectPredicateAndValues(subject, key, values);\n }\n return [ ...triples, ...predicateTriples ];\n }\n return triples;\n }, []);\n return entityTriples;\n }\n\n private entityToTriples(entity: NodeObject, subject: BlankNode | NamedNode): EntityUpdateTriples {\n const entityTriples = Object.entries(entity).reduce((triples: Triple[], [ key, value ]): Triple[] => {\n const values = ensureArray(value);\n if (key !== '@id') {\n if (key === '@type') {\n const predicateTriples = this.buildTriplesWithSubjectPredicateAndIriValue(\n subject,\n rdfTypeNamedNode,\n values as string[]\n );\n return [ ...triples, ...predicateTriples ];\n }\n if (!(this.setTimestamps && key === EngineConstants.prop.dateModified)) {\n const predicateTriples = this.buildTriplesForSubjectPredicateAndValues(subject, key, values);\n return [ ...triples, ...predicateTriples ];\n }\n }\n return triples;\n }, []);\n\n const timestampTriples = [];\n if (this.setTimestamps && subject.termType === 'NamedNode') {\n if (!(EngineConstants.prop.dateCreated in entity)) {\n timestampTriples.push({ subject, predicate: created, object: now });\n }\n timestampTriples.push({ subject, predicate: modified, object: now });\n }\n return {\n entityTriples,\n timestampTriples\n };\n }\n\n private buildTriplesForSubjectPredicateAndValues(\n subject: BlankNode | NamedNode,\n predicate: string,\n values: any[]\n ): Triple[] {\n const predicateTerm = DataFactory.namedNode(predicate);\n return values.flatMap((value: any): Triple[] =>\n this.buildTriplesWithSubjectPredicateAndValue(subject, predicateTerm, value));\n }\n\n private buildTriplesWithSubjectPredicateAndIriValue(\n subject: BlankNode | NamedNode,\n predicate: NamedNode,\n values: string[]\n ): Triple[] {\n return values.map(\n (valueItem): Triple =>\n ({\n subject,\n predicate,\n object: DataFactory.namedNode(valueItem)\n } as Triple)\n );\n }\n\n private buildTriplesWithSubjectPredicateAndVariableValue(\n subject: NamedNode,\n predicate: NamedNode,\n value: string\n ): Triple {\n return {\n subject,\n predicate,\n object: DataFactory.variable(value)\n };\n }\n\n private buildTriplesWithSubjectPredicateAndValue(\n subject: BlankNode | NamedNode,\n predicate: NamedNode,\n value: any\n ): Triple[] {\n const isObject = typeof value === 'object';\n if (isObject) {\n if ('@list' in value) {\n return this.buildTriplesForList(subject, predicate, value['@list']);\n }\n if ('@value' in value) {\n return [ { subject, predicate, object: this.jsonLdValueObjectToLiteral(value) } as Triple ];\n }\n\n const isReferenceObject = '@id' in value;\n const isBlankNodeReferenceObject = !isReferenceObject || (value['@id'] as string).startsWith('_:');\n if (isBlankNodeReferenceObject) {\n return this.buildTriplesForBlankNode(subject, predicate, value as NodeObject);\n }\n if (isReferenceObject) {\n return [ { subject, predicate, object: DataFactory.namedNode(value['@id']) } as Triple ];\n }\n }\n return [ { subject, predicate, object: valueToLiteral(value) } as Triple ];\n }\n\n private jsonLdValueObjectToLiteral(value: ValueObject): Term {\n if (typeof value['@value'] === 'object') {\n return DataFactory.literal(JSON.stringify(value['@value']), RDF.JSON);\n }\n if ((value as any)['@language']) {\n return DataFactory.literal(value['@value'] as string, (value as any)['@language']);\n }\n if ((value as any)['@type']) {\n return DataFactory.literal(value['@value'].toString(), (value as any)['@type']);\n }\n return valueToLiteral(value['@value']);\n }\n\n private buildTriplesForList(subject: BlankNode | NamedNode, predicate: NamedNode, value: NodeObject[]): Triple[] {\n const blankNode = DataFactory.blankNode(this.variableGenerator.getNext());\n const rest =\n value.length > 1\n ? this.buildTriplesForList(blankNode, restPredicate, value.slice(1))\n : [{ subject: blankNode, predicate: restPredicate, object: nilPredicate }];\n return [\n { subject, predicate, object: blankNode },\n ...this.buildTriplesWithSubjectPredicateAndValue(blankNode, firstPredicate, value[0]),\n ...rest\n ];\n }\n\n private buildTriplesForBlankNode(subject: BlankNode | NamedNode, predicate: NamedNode, value: NodeObject): Triple[] {\n const blankNode = DataFactory.blankNode(this.variableGenerator.getNext());\n const { entityTriples } = this.entityToTriples(value, blankNode);\n return [{ subject, predicate, object: blankNode }, ...entityTriples ];\n }\n}\n"]}
1
+ {"version":3,"file":"SparqlUpdateBuilder.js","sourceRoot":"","sources":["../../../../src/storage/query-adapter/sparql/SparqlUpdateBuilder.ts"],"names":[],"mappings":"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","sourcesContent":["import { RDF } from '@comake/rmlmapper-js';\nimport DataFactory from '@rdfjs/data-model';\nimport type { BlankNode, NamedNode, Term } from '@rdfjs/types';\nimport type { NodeObject, ValueObject } from 'jsonld/jsonld';\nimport type {\n Update,\n GraphQuads,\n Triple,\n InsertDeleteOperation,\n UpdateOperation,\n ClearDropOperation,\n Pattern\n} from 'sparqljs';\nimport { EngineConstants } from '../../../constants';\nimport {\n bindNow,\n created,\n createSparqlBasicGraphPattern,\n createSparqlClearUpdate,\n createSparqlDropUpdate,\n createSparqlGraphQuads,\n createSparqlOptional,\n createSparqlUpdate,\n dropAll,\n firstPredicate,\n modified,\n nilPredicate,\n now,\n rdfTypeNamedNode,\n restPredicate\n} from '../../../util/SparqlUtil';\nimport { valueToLiteral } from '../../../util/TripleUtil';\nimport type { Entity } from '../../../util/Types';\nimport { ensureArray } from '../../../util/Util';\nimport { VariableGenerator } from './VariableGenerator';\n\nexport interface EntityUpdateQueries {\n clear: ClearDropOperation[];\n insertions: GraphQuads[];\n timestampInsertions: GraphQuads[];\n}\n\nexport interface EntityUpdateTriples {\n entityTriples: Triple[];\n timestampTriples: Triple[];\n insertions: GraphQuads[];\n}\n\nexport interface SparqlUpdateBuilderArgs {\n setTimestamps?: boolean;\n}\n\nexport class SparqlUpdateBuilder {\n private readonly variableGenerator: VariableGenerator;\n private readonly setTimestamps: boolean;\n\n public constructor(args?: SparqlUpdateBuilderArgs) {\n this.variableGenerator = new VariableGenerator();\n this.setTimestamps = args?.setTimestamps ?? false;\n }\n\n public buildPartialUpdate(idOrIds: string | string[], attributes: Partial<Entity>): Update {\n const ids = ensureArray(idOrIds);\n const updates = this.idsAndAttributesToGraphDeletionsAndInsertions(ids, attributes);\n return createSparqlUpdate(updates);\n }\n\n public buildUpdate(entityOrEntities: Entity | Entity[]): Update {\n const entities = ensureArray(entityOrEntities);\n const { clear, insertions, timestampInsertions } = this.entitiesToGraphDeletionsAndInsertions(entities);\n const insertUpdate: InsertDeleteOperation = {\n updateType: 'insert',\n insert: insertions\n };\n const updates = [ ...clear, insertUpdate ];\n if (timestampInsertions.length > 0) {\n updates.push({\n updateType: 'insertdelete',\n delete: [],\n insert: timestampInsertions,\n where: [ bindNow ]\n });\n }\n return createSparqlUpdate(updates);\n }\n\n public buildDeleteById(idOrIds: string | string[]): Update {\n const ids = ensureArray(idOrIds);\n const drops = this.idsToGraphDropUpdates(ids);\n return createSparqlUpdate(drops);\n }\n\n public buildDelete(entityOrEntities: Entity | Entity[]): Update {\n const entities = ensureArray(entityOrEntities);\n const drops = this.entitiesToGraphDropUpdates(entities);\n return createSparqlUpdate(drops);\n }\n\n public buildDeleteAll(): Update {\n return createSparqlUpdate([ dropAll ]);\n }\n\n private idsAndAttributesToGraphDeletionsAndInsertions(\n ids: string[],\n attributes: Partial<Entity>\n ): InsertDeleteOperation[] {\n return ids.flatMap((id): InsertDeleteOperation[] => {\n const subject = DataFactory.namedNode(id);\n const { attributesToUpdate, attributesToDelete } = this.partitionAttributes(attributes);\n const { triples: deletionTriples, deletions: deletionDeletions } = this.partialEntityToDeletionTriples(attributesToUpdate, subject);\n const { triples: insertionTriples, insertions: insertionInsertions } = this.partialEntityToTriples(subject, attributesToUpdate);\n const { triples: deleteOnlyTriples } = this.partialEntityToDeletionTriples(attributesToDelete, subject);\n\n const updates: InsertDeleteOperation[] = [];\n\n if (deletionTriples.length > 0) {\n updates.push({\n updateType: 'insertdelete',\n delete: [ createSparqlGraphQuads(subject, deletionTriples) ],\n insert: [],\n where: deletionTriples.map(\n (triple): Pattern => createSparqlOptional([ createSparqlBasicGraphPattern([ triple ]) ])\n ),\n using: {\n default: [ subject ]\n }\n } as InsertDeleteOperation);\n }\n\n for (const deletion of deletionDeletions) {\n updates.push({\n updateType: 'insertdelete',\n delete: [ deletion ],\n insert: [],\n where: [\n ...deletion.triples.map(\n (triple): Pattern => createSparqlOptional([ createSparqlBasicGraphPattern([ triple ]) ])\n )\n ],\n using: {\n default: [ deletion.name ]\n }\n } as InsertDeleteOperation);\n }\n\n if (insertionTriples.length > 0) {\n updates.push({\n updateType: 'insert',\n insert: [ createSparqlGraphQuads(subject, insertionTriples), ...insertionInsertions ]\n } as InsertDeleteOperation);\n }\n\n if (deleteOnlyTriples.length > 0) {\n updates.push({\n updateType: 'insertdelete',\n delete: [ createSparqlGraphQuads(subject, deleteOnlyTriples) ],\n insert: [],\n where: deleteOnlyTriples.map(\n (triple): Pattern => createSparqlOptional([ createSparqlBasicGraphPattern([ triple ]) ])\n ),\n using: {\n default: [ subject ]\n }\n } as InsertDeleteOperation);\n }\n\n const hasAnyChanges = deletionTriples.length > 0 || insertionTriples.length > 0 || deleteOnlyTriples.length > 0;\n\n if (this.setTimestamps && hasAnyChanges) {\n const modifiedVariable = DataFactory.variable(this.variableGenerator.getNext());\n const modifiedDeletionTriple = { subject, predicate: modified, object: modifiedVariable };\n const modifiedInsertionTriple = { subject, predicate: modified, object: now };\n updates.push({\n updateType: 'insertdelete',\n delete: [ createSparqlGraphQuads(subject, [ modifiedDeletionTriple ]) ],\n insert: [ createSparqlGraphQuads(subject, [ modifiedInsertionTriple ]) ],\n where: [ createSparqlOptional([ createSparqlBasicGraphPattern([ modifiedDeletionTriple ]) ]), bindNow ],\n using: {\n default: [ subject ]\n }\n } as InsertDeleteOperation);\n }\n\n return updates;\n });\n }\n\n private partitionAttributes(\n attributes: Partial<Entity>\n ): { attributesToUpdate: Partial<Entity>; attributesToDelete: Partial<Entity> } {\n const attributesToUpdate: Partial<Entity> = {};\n const attributesToDelete: Partial<Entity> = {};\n\n Object.entries(attributes).forEach(([ key, value ]) => {\n if (key === '@id') {\n return;\n }\n if (value === null) {\n attributesToDelete[key] = value;\n } else if (value !== undefined) {\n attributesToUpdate[key] = value;\n }\n });\n\n return { attributesToUpdate, attributesToDelete };\n }\n\n private entitiesToGraphDeletionsAndInsertions(entities: Entity[]): EntityUpdateQueries {\n return entities.reduce(\n (obj: EntityUpdateQueries, entity): EntityUpdateQueries => {\n const entityGraphName = DataFactory.namedNode(entity['@id']);\n const { entityTriples, timestampTriples, insertions } = this.entityToTriples(entity, entityGraphName);\n obj.clear.push(createSparqlClearUpdate(entityGraphName));\n obj.insertions.push(createSparqlGraphQuads(entityGraphName, entityTriples), ...insertions);\n if (timestampTriples.length > 0) {\n obj.timestampInsertions.push(createSparqlGraphQuads(entityGraphName, timestampTriples));\n }\n return obj;\n },\n { clear: [], insertions: [], timestampInsertions: []}\n );\n }\n\n private idsToGraphDropUpdates(ids: string[]): UpdateOperation[] {\n return ids.map((id): UpdateOperation => {\n const entityGraphName = DataFactory.namedNode(id);\n return createSparqlDropUpdate(entityGraphName);\n });\n }\n\n private entitiesToGraphDropUpdates(entities: Entity[]): UpdateOperation[] {\n return entities.map((entity): UpdateOperation => {\n const entityGraphName = DataFactory.namedNode(entity['@id']);\n return createSparqlDropUpdate(entityGraphName);\n });\n }\n\n private partialEntityToDeletionTriples(entity: NodeObject, subject: NamedNode): { triples: Triple[]; deletions: GraphQuads[] } {\n return Object.entries(entity).reduce((acc: { triples: Triple[]; deletions: GraphQuads[] }, [ key, value ]): { triples: Triple[]; deletions: GraphQuads[] } => {\n if (key !== '@id') {\n let deletions: GraphQuads[] = [];\n if (value && typeof value === 'object' && '@id' in value && typeof value['@id'] === 'string' && '@type' in value) {\n const { triples: nestedTriples, deletions: nestedDeletions } = this.partialEntityToDeletionTriples(value as NodeObject, DataFactory.namedNode(value['@id']));\n deletions = [ ...deletions, createSparqlGraphQuads(DataFactory.namedNode(value['@id']), nestedTriples), ...nestedDeletions ];\n }\n return {\n triples: [\n ...acc.triples,\n this.buildTriplesWithSubjectPredicateAndVariableValue(\n subject,\n key === '@type' ? rdfTypeNamedNode : DataFactory.namedNode(key),\n this.variableGenerator.getNext()\n )\n ],\n deletions: [ ...acc.deletions, ...deletions ]\n };\n }\n return acc;\n }, { triples: [], deletions: [] });\n }\n\n private partialEntityToTriples(subject: NamedNode, entity: NodeObject): { triples: Triple[]; insertions: GraphQuads[] } {\n return Object.entries(entity).reduce((acc: { triples: Triple[]; insertions: GraphQuads[] }, [ key, value ]): { triples: Triple[]; insertions: GraphQuads[] } => {\n const values = ensureArray(value);\n if (key !== '@id') {\n let predicateTriples: { triples: Triple[]; insertions: GraphQuads[] };\n if (key === '@type') {\n predicateTriples = { triples: this.buildTriplesWithSubjectPredicateAndIriValue(\n subject,\n rdfTypeNamedNode,\n values as string[]\n ), insertions: [] };\n } else {\n predicateTriples = this.buildTriplesForSubjectPredicateAndValues(subject, key, values);\n }\n return { triples: [ ...acc.triples, ...predicateTriples.triples ], insertions: [ ...acc.insertions, ...predicateTriples.insertions ] };\n }\n return acc;\n }, { triples: [], insertions: [] });\n }\n\n private entityToTriples(entity: NodeObject, subject: BlankNode | NamedNode): EntityUpdateTriples {\n const entityTriples = Object.entries(entity).reduce((acc: { triples: Triple[]; insertions: GraphQuads[] }, [ key, value ]): { triples: Triple[]; insertions: GraphQuads[] } => {\n const values = ensureArray(value);\n if (key !== '@id') {\n if (key === '@type') {\n const predicateTriples = this.buildTriplesWithSubjectPredicateAndIriValue(\n subject,\n rdfTypeNamedNode,\n values as string[]\n );\n return { triples: [ ...acc.triples, ...predicateTriples ], insertions: acc.insertions };\n }\n if (!(this.setTimestamps && key === EngineConstants.prop.dateModified)) {\n const predicateTriples = this.buildTriplesForSubjectPredicateAndValues(subject, key, values);\n return { triples: [ ...acc.triples, ...predicateTriples.triples ], insertions: [ ...acc.insertions, ...predicateTriples.insertions ] };\n }\n }\n return acc;\n }, { triples: [], insertions: [] });\n\n const timestampTriples = [];\n if (this.setTimestamps && subject.termType === 'NamedNode') {\n if (!(EngineConstants.prop.dateCreated in entity)) {\n timestampTriples.push({ subject, predicate: created, object: now });\n }\n timestampTriples.push({ subject, predicate: modified, object: now });\n }\n return {\n entityTriples: entityTriples.triples,\n insertions: entityTriples.insertions,\n timestampTriples\n };\n }\n\n private buildTriplesForSubjectPredicateAndValues(\n subject: BlankNode | NamedNode,\n predicate: string,\n values: any[]\n ): { triples: Triple[]; insertions: GraphQuads[] } {\n const predicateTerm = DataFactory.namedNode(predicate);\n // Return values.flatMap((value: any): { triples: Triple[]; insertions: GraphQuads[] } =>\n // this.buildTriplesWithSubjectPredicateAndValue(subject, predicateTerm, value));\n return values.reduce((acc: { triples: Triple[]; insertions: GraphQuads[] }, value: any) => {\n const { triples, insertions } = this.buildTriplesWithSubjectPredicateAndValue(subject, predicateTerm, value);\n return { triples: [ ...acc.triples, ...triples ], insertions: [ ...acc.insertions, ...insertions ] };\n }, { triples: [], insertions: [] });\n }\n\n private buildTriplesWithSubjectPredicateAndIriValue(\n subject: BlankNode | NamedNode,\n predicate: NamedNode,\n values: string[]\n ): Triple[] {\n return values.map(\n (valueItem): Triple =>\n ({\n subject,\n predicate,\n object: DataFactory.namedNode(valueItem)\n } as Triple)\n );\n }\n\n private buildTriplesWithSubjectPredicateAndVariableValue(\n subject: NamedNode,\n predicate: NamedNode,\n value: string\n ): Triple {\n return {\n subject,\n predicate,\n object: DataFactory.variable(value)\n };\n }\n\n private buildTriplesWithSubjectPredicateAndValue(\n subject: BlankNode | NamedNode,\n predicate: NamedNode,\n value: any\n ): { triples: Triple[]; insertions: GraphQuads[] } {\n const isObject = typeof value === 'object';\n if (isObject) {\n if ('@list' in value) {\n return { triples: this.buildTriplesForList(subject, predicate, value['@list']), insertions: [] };\n }\n if ('@value' in value) {\n return { triples: [ { subject, predicate, object: this.jsonLdValueObjectToLiteral(value) } as Triple ], insertions: [] };\n }\n\n const isReferenceObject = '@id' in value;\n const isBlankNodeReferenceObject = !isReferenceObject || (value['@id'] as string).startsWith('_:');\n if (isBlankNodeReferenceObject) {\n return { triples: this.buildTriplesForBlankNode(subject, predicate, value as NodeObject), insertions: [] };\n }\n if (isReferenceObject) {\n const triples = [ \n { subject, predicate, object: DataFactory.namedNode(value['@id']) } as Triple\n ];\n if (value['@type']) {\n const { entityTriples, insertions } = this.entityToTriples(value as NodeObject, DataFactory.namedNode(value['@id']));\n return { triples, insertions: [ ...insertions, createSparqlGraphQuads(DataFactory.namedNode(value['@id']), entityTriples) ] };\n }\n return { triples, insertions: [] };\n }\n }\n return { triples: [ { subject, predicate, object: valueToLiteral(value) } as Triple ], insertions: [] };\n }\n\n private jsonLdValueObjectToLiteral(value: ValueObject): Term {\n if (typeof value['@value'] === 'object') {\n return DataFactory.literal(JSON.stringify(value['@value']), RDF.JSON);\n }\n if ((value as any)['@language']) {\n return DataFactory.literal(value['@value'] as string, (value as any)['@language']);\n }\n if ((value as any)['@type']) {\n return DataFactory.literal(value['@value'].toString(), (value as any)['@type']);\n }\n return valueToLiteral(value['@value']);\n }\n\n private buildTriplesForList(subject: BlankNode | NamedNode, predicate: NamedNode, value: NodeObject[]): Triple[] {\n const blankNode = DataFactory.blankNode(this.variableGenerator.getNext());\n const rest =\n value.length > 1\n ? this.buildTriplesForList(blankNode, restPredicate, value.slice(1))\n : [{ subject: blankNode, predicate: restPredicate, object: nilPredicate }];\n return [\n { subject, predicate, object: blankNode },\n ...this.buildTriplesWithSubjectPredicateAndValue(blankNode, firstPredicate, value[0]).triples,\n ...rest\n ];\n }\n\n private buildTriplesForBlankNode(subject: BlankNode | NamedNode, predicate: NamedNode, value: NodeObject): Triple[] {\n const blankNode = DataFactory.blankNode(this.variableGenerator.getNext());\n const { entityTriples } = this.entityToTriples(value, blankNode);\n return [{ subject, predicate, object: blankNode }, ...entityTriples ];\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@comake/skl-js-engine",
3
- "version": "1.3.13",
3
+ "version": "1.3.15",
4
4
  "description": "Standard Knowledge Language Javascript Engine",
5
5
  "keywords": [
6
6
  "skl",