@comake/skl-js-engine 0.10.0 → 0.10.1
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/package.json +2 -2
- package/dist/storage/sparql/SparqlQueryAdapter.d.ts +0 -41
- package/dist/storage/sparql/SparqlQueryAdapter.js +0 -132
- package/dist/storage/sparql/SparqlQueryAdapter.js.map +0 -1
- package/dist/util/ConcurrencyPool.d.ts +0 -18
- package/dist/util/ConcurrencyPool.js +0 -43
- package/dist/util/ConcurrencyPool.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@comake/skl-js-engine",
|
|
3
|
-
"version": "0.10.
|
|
3
|
+
"version": "0.10.1",
|
|
4
4
|
"description": "Standard Knowledge Language Javascript Engine",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"skl",
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
},
|
|
44
44
|
"dependencies": {
|
|
45
45
|
"@comake/openapi-operation-executor": "^0.9.0",
|
|
46
|
-
"@comake/rmlmapper-js": "^0.3.
|
|
46
|
+
"@comake/rmlmapper-js": "^0.3.1",
|
|
47
47
|
"@rdfjs/data-model": "^1.3.0",
|
|
48
48
|
"jsonld": "^5.2.0",
|
|
49
49
|
"luxon": "^3.1.1",
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import type { GraphObject } from 'jsonld';
|
|
2
|
-
import type { Frame } from 'jsonld/jsonld-spec';
|
|
3
|
-
import type { SelectQuery } from 'sparqljs';
|
|
4
|
-
import type { Entity } from '../../util/Types';
|
|
5
|
-
import type { FindOneOptions, FindAllOptions, FindOptionsWhere } from '../FindOptionsTypes';
|
|
6
|
-
import type { QueryAdapter, RawQueryResult } from '../QueryAdapter';
|
|
7
|
-
import type { SparqlQueryAdapterOptions } from './SparqlQueryAdapterOptions';
|
|
8
|
-
import { SparqlQueryExecutor } from './SparqlQueryExecutor';
|
|
9
|
-
import type { SelectQueryData } from './SparqlQueryPatternBuilder';
|
|
10
|
-
/**
|
|
11
|
-
* A {@link QueryAdapter} that stores data in a database through a sparql endpoint.
|
|
12
|
-
*/
|
|
13
|
-
export declare class SparqlQueryAdapter implements QueryAdapter {
|
|
14
|
-
protected readonly sparqlQueryExecutor: SparqlQueryExecutor;
|
|
15
|
-
private readonly setTimestamps;
|
|
16
|
-
constructor(options: SparqlQueryAdapterOptions);
|
|
17
|
-
executeRawQuery<T extends RawQueryResult>(query: string): Promise<T[]>;
|
|
18
|
-
executeRawEntityQuery(query: string, frame?: Frame): Promise<GraphObject>;
|
|
19
|
-
find(options?: FindOneOptions): Promise<Entity | null>;
|
|
20
|
-
findBy(where: FindOptionsWhere): Promise<Entity | null>;
|
|
21
|
-
findAll(options?: FindAllOptions): Promise<Entity[]>;
|
|
22
|
-
private findAllAsJsonLd;
|
|
23
|
-
private buildFindAllQueryData;
|
|
24
|
-
protected buildFindAllWithOrder(queryData: SelectQueryData, entitySelectQuery: SelectQuery): Promise<{
|
|
25
|
-
queryData: SelectQueryData;
|
|
26
|
-
entityOrder?: string[];
|
|
27
|
-
}>;
|
|
28
|
-
protected buildFindAllWithoutOrder(queryData: SelectQueryData, entitySelectQuery?: SelectQuery): Promise<{
|
|
29
|
-
queryData: SelectQueryData;
|
|
30
|
-
entityOrder?: string[];
|
|
31
|
-
}>;
|
|
32
|
-
private executeEntitySelectQuery;
|
|
33
|
-
findAllBy(where: FindOptionsWhere): Promise<Entity[]>;
|
|
34
|
-
exists(options: FindAllOptions): Promise<boolean>;
|
|
35
|
-
count(options: FindAllOptions): Promise<number>;
|
|
36
|
-
save(entity: Entity): Promise<Entity>;
|
|
37
|
-
save(entities: Entity[]): Promise<Entity[]>;
|
|
38
|
-
destroy(entity: Entity): Promise<Entity>;
|
|
39
|
-
destroy(entities: Entity[]): Promise<Entity[]>;
|
|
40
|
-
destroyAll(): Promise<void>;
|
|
41
|
-
}
|
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.SparqlQueryAdapter = void 0;
|
|
4
|
-
const SparqlUtil_1 = require("../../util/SparqlUtil");
|
|
5
|
-
const TripleUtil_1 = require("../../util/TripleUtil");
|
|
6
|
-
const SparqlQueryBuilder_1 = require("./SparqlQueryBuilder");
|
|
7
|
-
const SparqlQueryExecutor_1 = require("./SparqlQueryExecutor");
|
|
8
|
-
const SparqlUpdateBuilder_1 = require("./SparqlUpdateBuilder");
|
|
9
|
-
/**
|
|
10
|
-
* A {@link QueryAdapter} that stores data in a database through a sparql endpoint.
|
|
11
|
-
*/
|
|
12
|
-
class SparqlQueryAdapter {
|
|
13
|
-
constructor(options) {
|
|
14
|
-
this.sparqlQueryExecutor = new SparqlQueryExecutor_1.SparqlQueryExecutor(options);
|
|
15
|
-
this.setTimestamps = options.setTimestamps ?? false;
|
|
16
|
-
}
|
|
17
|
-
async executeRawQuery(query) {
|
|
18
|
-
const response = await this.sparqlQueryExecutor.executeSparqlSelectAndGetDataRaw(query);
|
|
19
|
-
if (response.length === 0) {
|
|
20
|
-
return [];
|
|
21
|
-
}
|
|
22
|
-
return (0, SparqlUtil_1.selectQueryResultsAsJSValues)(response);
|
|
23
|
-
}
|
|
24
|
-
async executeRawEntityQuery(query, frame) {
|
|
25
|
-
const response = await this.sparqlQueryExecutor.executeSparqlSelectAndGetDataRaw(query);
|
|
26
|
-
if (response.length === 0) {
|
|
27
|
-
return { '@graph': [] };
|
|
28
|
-
}
|
|
29
|
-
return await (0, TripleUtil_1.triplesToJsonldWithFrame)(response, frame);
|
|
30
|
-
}
|
|
31
|
-
async find(options) {
|
|
32
|
-
const jsonld = await this.findAllAsJsonLd({ ...options, limit: 1 });
|
|
33
|
-
if (Array.isArray(jsonld)) {
|
|
34
|
-
if (jsonld.length === 0) {
|
|
35
|
-
return null;
|
|
36
|
-
}
|
|
37
|
-
if (jsonld.length === 1) {
|
|
38
|
-
return jsonld[0];
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
return jsonld;
|
|
42
|
-
}
|
|
43
|
-
async findBy(where) {
|
|
44
|
-
return this.find({ where });
|
|
45
|
-
}
|
|
46
|
-
async findAll(options) {
|
|
47
|
-
const jsonld = await this.findAllAsJsonLd(options);
|
|
48
|
-
if (Array.isArray(jsonld)) {
|
|
49
|
-
return jsonld;
|
|
50
|
-
}
|
|
51
|
-
return [jsonld];
|
|
52
|
-
}
|
|
53
|
-
async findAllAsJsonLd(options) {
|
|
54
|
-
if (options?.search) {
|
|
55
|
-
return [];
|
|
56
|
-
}
|
|
57
|
-
const queryBuilder = new SparqlQueryBuilder_1.SparqlQueryBuilder();
|
|
58
|
-
const { queryData, entityOrder } = await this.buildFindAllQueryData(queryBuilder, options);
|
|
59
|
-
if (entityOrder && entityOrder.length === 0) {
|
|
60
|
-
return [];
|
|
61
|
-
}
|
|
62
|
-
const query = queryBuilder.buildConstructFromEntitySelectQuery(queryData.graphWhere, queryData.graphSelectionTriples, options?.select);
|
|
63
|
-
return await this.executeEntitySelectQuery(query, options?.relations, entityOrder);
|
|
64
|
-
}
|
|
65
|
-
async buildFindAllQueryData(queryBuilder, options) {
|
|
66
|
-
const queryData = queryBuilder.buildPatternsFromQueryOptions(TripleUtil_1.entityVariable, options?.where, options?.order, options?.relations);
|
|
67
|
-
const entitySelectQuery = queryData.where.length > 0
|
|
68
|
-
? (0, SparqlUtil_1.createSparqlSelectQuery)(TripleUtil_1.entityVariable, queryData.where, queryData.orders, options?.limit, options?.offset)
|
|
69
|
-
: undefined;
|
|
70
|
-
if (queryData.orders.length > 0 && options?.limit !== 1 && entitySelectQuery) {
|
|
71
|
-
return await this.buildFindAllWithOrder(queryData, entitySelectQuery);
|
|
72
|
-
}
|
|
73
|
-
return await this.buildFindAllWithoutOrder(queryData, entitySelectQuery);
|
|
74
|
-
}
|
|
75
|
-
async buildFindAllWithOrder(queryData, entitySelectQuery) {
|
|
76
|
-
// We need to execute the entity select query here first to get ordered results.
|
|
77
|
-
const entitySelectResponse = await this.sparqlQueryExecutor.executeSparqlSelectAndGetData(entitySelectQuery);
|
|
78
|
-
const valuesByVariable = (0, SparqlUtil_1.groupSelectQueryResultsByKey)(entitySelectResponse);
|
|
79
|
-
const entityOrder = (0, SparqlUtil_1.getEntityVariableValuesFromVariables)(valuesByVariable);
|
|
80
|
-
if (entityOrder.length === 0) {
|
|
81
|
-
return { queryData, entityOrder: [] };
|
|
82
|
-
}
|
|
83
|
-
const variableValueFilters = (0, SparqlUtil_1.createValuesPatternsForVariables)(valuesByVariable);
|
|
84
|
-
queryData.graphWhere = [...variableValueFilters, ...queryData.graphWhere];
|
|
85
|
-
return { queryData, entityOrder };
|
|
86
|
-
}
|
|
87
|
-
async buildFindAllWithoutOrder(queryData, entitySelectQuery) {
|
|
88
|
-
if (entitySelectQuery) {
|
|
89
|
-
const entitySelectGroupQuery = (0, SparqlUtil_1.createSparqlSelectGroup)([entitySelectQuery]);
|
|
90
|
-
queryData.graphWhere.unshift(entitySelectGroupQuery);
|
|
91
|
-
}
|
|
92
|
-
return { queryData };
|
|
93
|
-
}
|
|
94
|
-
async executeEntitySelectQuery(query, relations, entityOrder) {
|
|
95
|
-
const responseTriples = await this.sparqlQueryExecutor.executeSparqlSelectAndGetData(query);
|
|
96
|
-
return await (0, TripleUtil_1.triplesToJsonld)(responseTriples, relations, entityOrder);
|
|
97
|
-
}
|
|
98
|
-
async findAllBy(where) {
|
|
99
|
-
return this.findAll({ where });
|
|
100
|
-
}
|
|
101
|
-
async exists(options) {
|
|
102
|
-
const queryBuilder = new SparqlQueryBuilder_1.SparqlQueryBuilder();
|
|
103
|
-
const queryData = queryBuilder.buildPatternsFromQueryOptions(TripleUtil_1.entityVariable, options?.where, options?.order, options?.relations);
|
|
104
|
-
const query = (0, SparqlUtil_1.creteSparqlAskQuery)(queryData.where);
|
|
105
|
-
return await this.sparqlQueryExecutor.executeAskQueryAndGetResponse(query);
|
|
106
|
-
}
|
|
107
|
-
async count(options) {
|
|
108
|
-
const queryBuilder = new SparqlQueryBuilder_1.SparqlQueryBuilder();
|
|
109
|
-
const queryData = queryBuilder.buildPatternsFromQueryOptions(TripleUtil_1.entityVariable, options?.where, options?.order, options?.relations);
|
|
110
|
-
const query = (0, SparqlUtil_1.createSparqlCountSelectQuery)(TripleUtil_1.entityVariable, [...queryData.where, ...queryData.graphWhere]);
|
|
111
|
-
return await this.sparqlQueryExecutor.executeSelectCountAndGetResponse(query);
|
|
112
|
-
}
|
|
113
|
-
async save(entityOrEntities) {
|
|
114
|
-
const queryBuilder = new SparqlUpdateBuilder_1.SparqlUpdateBuilder({ setTimestamps: this.setTimestamps });
|
|
115
|
-
const query = queryBuilder.buildUpdate(entityOrEntities);
|
|
116
|
-
await this.sparqlQueryExecutor.executeSparqlUpdate(query);
|
|
117
|
-
return entityOrEntities;
|
|
118
|
-
}
|
|
119
|
-
async destroy(entityOrEntities) {
|
|
120
|
-
const queryBuilder = new SparqlUpdateBuilder_1.SparqlUpdateBuilder();
|
|
121
|
-
const query = queryBuilder.buildDelete(entityOrEntities);
|
|
122
|
-
await this.sparqlQueryExecutor.executeSparqlUpdate(query);
|
|
123
|
-
return entityOrEntities;
|
|
124
|
-
}
|
|
125
|
-
async destroyAll() {
|
|
126
|
-
const queryBuilder = new SparqlUpdateBuilder_1.SparqlUpdateBuilder();
|
|
127
|
-
const query = queryBuilder.buildDeleteAll();
|
|
128
|
-
await this.sparqlQueryExecutor.executeSparqlUpdate(query);
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
exports.SparqlQueryAdapter = SparqlQueryAdapter;
|
|
132
|
-
//# sourceMappingURL=SparqlQueryAdapter.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SparqlQueryAdapter.js","sourceRoot":"","sources":["../../../src/storage/sparql/SparqlQueryAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
|
-
export interface ConcurrencyPoolArgs {
|
|
3
|
-
maxConcurrency?: number;
|
|
4
|
-
}
|
|
5
|
-
export interface ConcurrentJob {
|
|
6
|
-
job: () => Promise<any>;
|
|
7
|
-
promise?: Promise<any>;
|
|
8
|
-
interval?: ReturnType<typeof setInterval>;
|
|
9
|
-
}
|
|
10
|
-
export declare type ConcurrentJobWithPromise = ConcurrentJob & Required<Pick<ConcurrentJob, 'promise'>>;
|
|
11
|
-
export declare class ConcurrencyPool {
|
|
12
|
-
private readonly maxConcurrency?;
|
|
13
|
-
private readonly promises;
|
|
14
|
-
constructor(args?: ConcurrencyPoolArgs);
|
|
15
|
-
execute<T>(job: () => Promise<T>): Promise<T>;
|
|
16
|
-
private createNewWaitingPromiseForJob;
|
|
17
|
-
private addJobToConcurrentPromises;
|
|
18
|
-
}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ConcurrencyPool = void 0;
|
|
4
|
-
class ConcurrencyPool {
|
|
5
|
-
constructor(args) {
|
|
6
|
-
this.promises = [];
|
|
7
|
-
this.maxConcurrency = args?.maxConcurrency;
|
|
8
|
-
}
|
|
9
|
-
async execute(job) {
|
|
10
|
-
if (this.maxConcurrency) {
|
|
11
|
-
const count = this.promises.length;
|
|
12
|
-
if (count !== 0 && count % 10 === 0) {
|
|
13
|
-
console.log(`Current pool length ${this.promises.length}`);
|
|
14
|
-
}
|
|
15
|
-
if (this.promises.length < this.maxConcurrency) {
|
|
16
|
-
return this.addJobToConcurrentPromises(job);
|
|
17
|
-
}
|
|
18
|
-
const waitingPromise = this.createNewWaitingPromiseForJob(job);
|
|
19
|
-
this.promises.push(waitingPromise);
|
|
20
|
-
waitingPromise.finally(() => {
|
|
21
|
-
const index = this.promises.indexOf(waitingPromise);
|
|
22
|
-
this.promises.splice(index, 1);
|
|
23
|
-
});
|
|
24
|
-
return waitingPromise;
|
|
25
|
-
}
|
|
26
|
-
return job();
|
|
27
|
-
}
|
|
28
|
-
async createNewWaitingPromiseForJob(job) {
|
|
29
|
-
await this.promises[0];
|
|
30
|
-
return this.addJobToConcurrentPromises(job);
|
|
31
|
-
}
|
|
32
|
-
async addJobToConcurrentPromises(job) {
|
|
33
|
-
const promise = job();
|
|
34
|
-
this.promises.push(promise);
|
|
35
|
-
promise.finally(() => {
|
|
36
|
-
const index = this.promises.indexOf(promise);
|
|
37
|
-
this.promises.splice(index, 1);
|
|
38
|
-
});
|
|
39
|
-
return promise;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
exports.ConcurrencyPool = ConcurrencyPool;
|
|
43
|
-
//# sourceMappingURL=ConcurrencyPool.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ConcurrencyPool.js","sourceRoot":"","sources":["../../src/util/ConcurrencyPool.ts"],"names":[],"mappings":";;;AAYA,MAAa,eAAe;IAI1B,YAAmB,IAA0B;QAF5B,aAAQ,GAAmB,EAAE,CAAC;QAG7C,IAAI,CAAC,cAAc,GAAG,IAAI,EAAE,cAAc,CAAC;IAC7C,CAAC;IAEM,KAAK,CAAC,OAAO,CAAI,GAAqB;QAC3C,IAAI,IAAI,CAAC,cAAc,EAAE;YACvB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YACnC,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,GAAG,EAAE,KAAK,CAAC,EAAE;gBACnC,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;aAC5D;YACD,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE;gBAC9C,OAAO,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,CAAC;aAC7C;YACD,MAAM,cAAc,GAAG,IAAI,CAAC,6BAA6B,CAAC,GAAG,CAAC,CAAC;YAC/D,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YACnC,cAAc,CAAC,OAAO,CAAC,GAAS,EAAE;gBAChC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;gBACpD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACjC,CAAC,CAAC,CAAC;YACH,OAAO,cAAc,CAAC;SACvB;QACD,OAAO,GAAG,EAAE,CAAC;IACf,CAAC;IAEO,KAAK,CAAC,6BAA6B,CAAC,GAAuB;QACjE,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACvB,OAAO,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,CAAC;IAC9C,CAAC;IAEO,KAAK,CAAC,0BAA0B,CAAC,GAAuB;QAC9D,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC5B,OAAO,CAAC,OAAO,CAAC,GAAS,EAAE;YACzB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC7C,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QACH,OAAO,OAAO,CAAC;IACjB,CAAC;CACF;AA1CD,0CA0CC"}
|