@netwerk-digitaal-erfgoed/network-of-terms-query 1.0.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.
Files changed (42) hide show
  1. package/README.md +3 -0
  2. package/build/catalog.d.ts +38 -0
  3. package/build/catalog.d.ts.map +1 -0
  4. package/build/catalog.js +43 -0
  5. package/build/catalog.js.map +1 -0
  6. package/build/distributions.d.ts +30 -0
  7. package/build/distributions.d.ts.map +1 -0
  8. package/build/distributions.js +47 -0
  9. package/build/distributions.js.map +1 -0
  10. package/build/helpers/logger-pino.d.ts +16 -0
  11. package/build/helpers/logger-pino.d.ts.map +1 -0
  12. package/build/helpers/logger-pino.js +32 -0
  13. package/build/helpers/logger-pino.js.map +1 -0
  14. package/build/helpers/logger.d.ts +8 -0
  15. package/build/helpers/logger.d.ts.map +1 -0
  16. package/build/helpers/logger.js +45 -0
  17. package/build/helpers/logger.js.map +1 -0
  18. package/build/index.d.ts +10 -0
  19. package/build/index.d.ts.map +1 -0
  20. package/build/index.js +11 -0
  21. package/build/index.js.map +1 -0
  22. package/build/lookup/lookup.d.ts +27 -0
  23. package/build/lookup/lookup.d.ts.map +1 -0
  24. package/build/lookup/lookup.js +63 -0
  25. package/build/lookup/lookup.js.map +1 -0
  26. package/build/query.d.ts +36 -0
  27. package/build/query.d.ts.map +1 -0
  28. package/build/query.js +101 -0
  29. package/build/query.js.map +1 -0
  30. package/build/search/query-mode.d.ts +7 -0
  31. package/build/search/query-mode.d.ts.map +1 -0
  32. package/build/search/query-mode.js +43 -0
  33. package/build/search/query-mode.js.map +1 -0
  34. package/build/server-test.d.ts +4 -0
  35. package/build/server-test.d.ts.map +1 -0
  36. package/build/server-test.js +64 -0
  37. package/build/server-test.js.map +1 -0
  38. package/build/terms.d.ts +34 -0
  39. package/build/terms.d.ts.map +1 -0
  40. package/build/terms.js +109 -0
  41. package/build/terms.js.map +1 -0
  42. package/package.json +56 -0
package/README.md ADDED
@@ -0,0 +1,3 @@
1
+ # Network of Terms Query Engine
2
+
3
+ This package exposes query and lookup functionality to the Network of Terms API packages.
@@ -0,0 +1,38 @@
1
+ /// <reference types="node" />
2
+ import { URL } from 'url';
3
+ export declare class Catalog {
4
+ readonly datasets: ReadonlyArray<Dataset>;
5
+ constructor(datasets: ReadonlyArray<Dataset>);
6
+ getDatasetByDistributionIri(iri: IRI): Dataset | undefined;
7
+ getDatasetByTermIri(iri: IRI): Dataset | undefined;
8
+ }
9
+ export declare class Dataset {
10
+ readonly iri: IRI;
11
+ readonly name: string;
12
+ readonly termsPrefixes: IRI[];
13
+ readonly creators: [Organization];
14
+ readonly distributions: [Distribution];
15
+ readonly alternateName?: string | undefined;
16
+ constructor(iri: IRI, name: string, termsPrefixes: IRI[], creators: [Organization], distributions: [Distribution], alternateName?: string | undefined);
17
+ getDistributionByIri(iri: IRI): Distribution | undefined;
18
+ }
19
+ export declare class Organization {
20
+ readonly iri: IRI;
21
+ readonly name: string;
22
+ readonly alternateName: string;
23
+ constructor(iri: IRI, name: string, alternateName: string);
24
+ }
25
+ export declare class SparqlDistribution {
26
+ readonly iri: IRI;
27
+ readonly endpoint: IRI;
28
+ readonly searchQuery: string;
29
+ readonly lookupQuery: string;
30
+ constructor(iri: IRI, endpoint: IRI, searchQuery: string, lookupQuery: string);
31
+ }
32
+ /**
33
+ * A union type to be extended in the future with other distribution types.
34
+ */
35
+ export declare type Distribution = SparqlDistribution;
36
+ export declare class IRI extends URL {
37
+ }
38
+ //# sourceMappingURL=catalog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,GAAG,EAAC,MAAM,KAAK,CAAC;AAExB,qBAAa,OAAO;IACN,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC;gBAAhC,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC;IAE9C,2BAA2B,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,GAAG,SAAS;IAM1D,mBAAmB,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,GAAG,SAAS;CAO1D;AAED,qBAAa,OAAO;IAEhB,QAAQ,CAAC,GAAG,EAAE,GAAG;IACjB,QAAQ,CAAC,IAAI,EAAE,MAAM;IACrB,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC7B,QAAQ,CAAC,QAAQ,EAAE,CAAC,YAAY,CAAC;IACjC,QAAQ,CAAC,aAAa,EAAE,CAAC,YAAY,CAAC;IACtC,QAAQ,CAAC,aAAa,CAAC;gBALd,GAAG,EAAE,GAAG,EACR,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,GAAG,EAAE,EACpB,QAAQ,EAAE,CAAC,YAAY,CAAC,EACxB,aAAa,EAAE,CAAC,YAAY,CAAC,EAC7B,aAAa,CAAC,oBAAQ;IAG1B,oBAAoB,CAAC,GAAG,EAAE,GAAG,GAAG,YAAY,GAAG,SAAS;CAKhE;AAED,qBAAa,YAAY;IAErB,QAAQ,CAAC,GAAG,EAAE,GAAG;IACjB,QAAQ,CAAC,IAAI,EAAE,MAAM;IACrB,QAAQ,CAAC,aAAa,EAAE,MAAM;gBAFrB,GAAG,EAAE,GAAG,EACR,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,MAAM;CAEjC;AAED,qBAAa,kBAAkB;IAE3B,QAAQ,CAAC,GAAG,EAAE,GAAG;IACjB,QAAQ,CAAC,QAAQ,EAAE,GAAG;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM;gBAHnB,GAAG,EAAE,GAAG,EACR,QAAQ,EAAE,GAAG,EACb,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM;CAE/B;AAED;;GAEG;AACH,oBAAY,YAAY,GAAG,kBAAkB,CAAC;AAE9C,qBAAa,GAAI,SAAQ,GAAG;CAAG"}
@@ -0,0 +1,43 @@
1
+ import { URL } from 'url';
2
+ export class Catalog {
3
+ constructor(datasets) {
4
+ this.datasets = datasets;
5
+ }
6
+ getDatasetByDistributionIri(iri) {
7
+ return this.datasets.find(dataset => dataset.getDistributionByIri(iri) !== undefined);
8
+ }
9
+ getDatasetByTermIri(iri) {
10
+ return this.datasets.find(dataset => dataset.termsPrefixes.some(termPrefix => iri.toString().startsWith(termPrefix.toString())));
11
+ }
12
+ }
13
+ export class Dataset {
14
+ constructor(iri, name, termsPrefixes, creators, distributions, alternateName) {
15
+ this.iri = iri;
16
+ this.name = name;
17
+ this.termsPrefixes = termsPrefixes;
18
+ this.creators = creators;
19
+ this.distributions = distributions;
20
+ this.alternateName = alternateName;
21
+ }
22
+ getDistributionByIri(iri) {
23
+ return this.distributions.find(distribution => distribution.iri.toString() === iri.toString());
24
+ }
25
+ }
26
+ export class Organization {
27
+ constructor(iri, name, alternateName) {
28
+ this.iri = iri;
29
+ this.name = name;
30
+ this.alternateName = alternateName;
31
+ }
32
+ }
33
+ export class SparqlDistribution {
34
+ constructor(iri, endpoint, searchQuery, lookupQuery) {
35
+ this.iri = iri;
36
+ this.endpoint = endpoint;
37
+ this.searchQuery = searchQuery;
38
+ this.lookupQuery = lookupQuery;
39
+ }
40
+ }
41
+ export class IRI extends URL {
42
+ }
43
+ //# sourceMappingURL=catalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,GAAG,EAAC,MAAM,KAAK,CAAC;AAExB,MAAM,OAAO,OAAO;IAClB,YAAqB,QAAgC;QAAhC,aAAQ,GAAR,QAAQ,CAAwB;IAAG,CAAC;IAElD,2BAA2B,CAAC,GAAQ;QACzC,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CACvB,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,oBAAoB,CAAC,GAAG,CAAC,KAAK,SAAS,CAC3D,CAAC;IACJ,CAAC;IAEM,mBAAmB,CAAC,GAAQ;QACjC,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAClC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CACtC,GAAG,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CACjD,CACF,CAAC;IACJ,CAAC;CACF;AAED,MAAM,OAAO,OAAO;IAClB,YACW,GAAQ,EACR,IAAY,EACZ,aAAoB,EACpB,QAAwB,EACxB,aAA6B,EAC7B,aAAsB;QALtB,QAAG,GAAH,GAAG,CAAK;QACR,SAAI,GAAJ,IAAI,CAAQ;QACZ,kBAAa,GAAb,aAAa,CAAO;QACpB,aAAQ,GAAR,QAAQ,CAAgB;QACxB,kBAAa,GAAb,aAAa,CAAgB;QAC7B,kBAAa,GAAb,aAAa,CAAS;IAC9B,CAAC;IAEG,oBAAoB,CAAC,GAAQ;QAClC,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAC5B,YAAY,CAAC,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,GAAG,CAAC,QAAQ,EAAE,CAC/D,CAAC;IACJ,CAAC;CACF;AAED,MAAM,OAAO,YAAY;IACvB,YACW,GAAQ,EACR,IAAY,EACZ,aAAqB;QAFrB,QAAG,GAAH,GAAG,CAAK;QACR,SAAI,GAAJ,IAAI,CAAQ;QACZ,kBAAa,GAAb,aAAa,CAAQ;IAC7B,CAAC;CACL;AAED,MAAM,OAAO,kBAAkB;IAC7B,YACW,GAAQ,EACR,QAAa,EACb,WAAmB,EACnB,WAAmB;QAHnB,QAAG,GAAH,GAAG,CAAK;QACR,aAAQ,GAAR,QAAQ,CAAK;QACb,gBAAW,GAAX,WAAW,CAAQ;QACnB,gBAAW,GAAX,WAAW,CAAQ;IAC3B,CAAC;CACL;AAOD,MAAM,OAAO,GAAI,SAAQ,GAAG;CAAG"}
@@ -0,0 +1,30 @@
1
+ import { ActorInitSparql } from '@comunica/actor-init-sparql';
2
+ import Pino from 'pino';
3
+ import { TermsResult } from './query';
4
+ import { QueryMode } from './search/query-mode';
5
+ import { Catalog, IRI } from './catalog';
6
+ export interface QueryOptions {
7
+ source: IRI;
8
+ query: string;
9
+ queryMode: QueryMode;
10
+ timeoutMs: number;
11
+ }
12
+ export interface QueryAllOptions {
13
+ sources: IRI[];
14
+ query: string;
15
+ queryMode: QueryMode;
16
+ timeoutMs: number;
17
+ }
18
+ export declare class DistributionsService {
19
+ private logger;
20
+ private catalog;
21
+ private comunica;
22
+ constructor(options: {
23
+ logger: Pino.Logger;
24
+ catalog: Catalog;
25
+ comunica?: ActorInitSparql;
26
+ });
27
+ query(options: QueryOptions): Promise<TermsResult>;
28
+ queryAll(options: QueryAllOptions): Promise<TermsResult[]>;
29
+ }
30
+ //# sourceMappingURL=distributions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"distributions.d.ts","sourceRoot":"","sources":["../src/distributions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,6BAA6B,CAAC;AAE5D,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAoB,WAAW,EAAC,MAAM,SAAS,CAAC;AACvD,OAAO,EAAC,SAAS,EAAC,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAC,OAAO,EAAE,GAAG,EAAC,MAAM,WAAW,CAAC;AAGvC,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,GAAG,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AASD,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,GAAG,EAAE,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AASD,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,QAAQ,CAAkB;gBAEtB,OAAO,EAAE;QACnB,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;QACpB,OAAO,EAAE,OAAO,CAAC;QACjB,QAAQ,CAAC,EAAE,eAAe,CAAC;KAC5B;IAMK,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC;IAoBlD,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;CAYjE"}
@@ -0,0 +1,47 @@
1
+ import Joi from 'joi';
2
+ import { QueryTermsService } from './query';
3
+ import { comunica } from './index';
4
+ const schemaQuery = Joi.object({
5
+ source: Joi.object().required(),
6
+ query: Joi.string().required(),
7
+ queryMode: Joi.string().required(),
8
+ timeoutMs: Joi.number().integer(),
9
+ });
10
+ const schemaQueryAll = Joi.object({
11
+ sources: Joi.array().items(Joi.object().required()).min(1).required(),
12
+ query: Joi.string().required(),
13
+ queryMode: Joi.string().required(),
14
+ timeoutMs: Joi.number().integer(),
15
+ });
16
+ export class DistributionsService {
17
+ constructor(options) {
18
+ this.logger = options.logger;
19
+ this.catalog = options.catalog;
20
+ this.comunica = options.comunica || comunica;
21
+ }
22
+ async query(options) {
23
+ const args = Joi.attempt(options, schemaQuery);
24
+ this.logger.info(`Preparing to query source "${args.source}"...`);
25
+ const dataset = await this.catalog.getDatasetByDistributionIri(args.source);
26
+ if (dataset === undefined) {
27
+ throw Error(`Source with URI "${args.source}" not found`);
28
+ }
29
+ const distribution = dataset.getDistributionByIri(args.source);
30
+ const queryService = new QueryTermsService({
31
+ logger: this.logger,
32
+ comunica: this.comunica,
33
+ });
34
+ return queryService.search(args.query, args.queryMode, distribution, args.timeoutMs);
35
+ }
36
+ async queryAll(options) {
37
+ const args = Joi.attempt(options, schemaQueryAll);
38
+ const requests = args.sources.map((source) => this.query({
39
+ source,
40
+ query: args.query,
41
+ queryMode: args.queryMode,
42
+ timeoutMs: args.timeoutMs,
43
+ }));
44
+ return Promise.all(requests);
45
+ }
46
+ }
47
+ //# sourceMappingURL=distributions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"distributions.js","sourceRoot":"","sources":["../src/distributions.ts"],"names":[],"mappings":"AACA,OAAO,GAAG,MAAM,KAAK,CAAC;AAEtB,OAAO,EAAC,iBAAiB,EAAc,MAAM,SAAS,CAAC;AAGvD,OAAO,EAAC,QAAQ,EAAC,MAAM,SAAS,CAAC;AASjC,MAAM,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC;IAC7B,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE;CAClC,CAAC,CAAC;AASH,MAAM,cAAc,GAAG,GAAG,CAAC,MAAM,CAAC;IAChC,OAAO,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACrE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE;CAClC,CAAC,CAAC;AAEH,MAAM,OAAO,oBAAoB;IAK/B,YAAY,OAIX;QACC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,QAAQ,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,OAAqB;QAC/B,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAC/C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,8BAA8B,IAAI,CAAC,MAAM,MAAM,CAAC,CAAC;QAClE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,2BAA2B,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5E,IAAI,OAAO,KAAK,SAAS,EAAE;YACzB,MAAM,KAAK,CAAC,oBAAoB,IAAI,CAAC,MAAM,aAAa,CAAC,CAAC;SAC3D;QACD,MAAM,YAAY,GAAG,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAE,CAAC;QAChE,MAAM,YAAY,GAAG,IAAI,iBAAiB,CAAC;YACzC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB,CAAC,CAAC;QACH,OAAO,YAAY,CAAC,MAAM,CACxB,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,SAAS,EACd,YAAY,EACZ,IAAI,CAAC,SAAS,CACf,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,OAAwB;QACrC,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAW,EAAE,EAAE,CAChD,IAAI,CAAC,KAAK,CAAC;YACT,MAAM;YACN,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,SAAS,EAAE,IAAI,CAAC,SAAS;SAC1B,CAAC,CACH,CAAC;QACF,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC;CACF"}
@@ -0,0 +1,16 @@
1
+ import { Logger } from '@comunica/core';
2
+ import Pino from 'pino';
3
+ export interface ConstructorOptions {
4
+ logger: Pino.Logger;
5
+ }
6
+ export declare class LoggerPino extends Logger {
7
+ protected logger: Pino.Logger;
8
+ constructor(options: ConstructorOptions);
9
+ debug(message: string, data?: any): void;
10
+ error(message: string, data?: any): void;
11
+ fatal(message: string, data?: any): void;
12
+ info(message: string, data?: any): void;
13
+ trace(message: string, data?: any): void;
14
+ warn(message: string, data?: any): void;
15
+ }
16
+ //# sourceMappingURL=logger-pino.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger-pino.d.ts","sourceRoot":"","sources":["../../src/helpers/logger-pino.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,gBAAgB,CAAC;AACtC,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;CACrB;AAED,qBAAa,UAAW,SAAQ,MAAM;IACpC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;gBAElB,OAAO,EAAE,kBAAkB;IAMvC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;IAKxC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;IAKxC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;IAKxC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;IAKvC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;IAKxC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;CAGxC"}
@@ -0,0 +1,32 @@
1
+ import { Logger } from '@comunica/core';
2
+ export class LoggerPino extends Logger {
3
+ constructor(options) {
4
+ super();
5
+ this.logger = options.logger;
6
+ }
7
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
8
+ debug(message, data) {
9
+ this.logger.debug(message, data);
10
+ }
11
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
12
+ error(message, data) {
13
+ this.logger.error(message, data);
14
+ }
15
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
16
+ fatal(message, data) {
17
+ this.logger.fatal(message, data);
18
+ }
19
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
20
+ info(message, data) {
21
+ this.logger.info(message, data);
22
+ }
23
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
24
+ trace(message, data) {
25
+ this.logger.trace(message, data);
26
+ }
27
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
28
+ warn(message, data) {
29
+ this.logger.warn(message, data);
30
+ }
31
+ }
32
+ //# sourceMappingURL=logger-pino.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger-pino.js","sourceRoot":"","sources":["../../src/helpers/logger-pino.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,gBAAgB,CAAC;AAOtC,MAAM,OAAO,UAAW,SAAQ,MAAM;IAGpC,YAAY,OAA2B;QACrC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC/B,CAAC;IAED,8DAA8D;IAC9D,KAAK,CAAC,OAAe,EAAE,IAAU;QAC/B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACnC,CAAC;IAED,8DAA8D;IAC9D,KAAK,CAAC,OAAe,EAAE,IAAU;QAC/B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACnC,CAAC;IAED,8DAA8D;IAC9D,KAAK,CAAC,OAAe,EAAE,IAAU;QAC/B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACnC,CAAC;IAED,8DAA8D;IAC9D,IAAI,CAAC,OAAe,EAAE,IAAU;QAC9B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,8DAA8D;IAC9D,KAAK,CAAC,OAAe,EAAE,IAAU;QAC/B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACnC,CAAC;IAED,8DAA8D;IAC9D,IAAI,CAAC,OAAe,EAAE,IAAU;QAC9B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAClC,CAAC;CACF"}
@@ -0,0 +1,8 @@
1
+ import Pino from 'pino';
2
+ export interface GetLoggerOptions {
3
+ name: string;
4
+ level: string;
5
+ }
6
+ export declare function getCliLogger(options: GetLoggerOptions): Pino.Logger;
7
+ export declare function getHttpLogger(options: GetLoggerOptions): Pino.Logger;
8
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/helpers/logger.ts"],"names":[],"mappings":"AACA,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAsBD,wBAAgB,YAAY,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAanE;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAAC,MAAM,CASpE"}
@@ -0,0 +1,45 @@
1
+ import Joi from 'joi';
2
+ import Pino from 'pino';
3
+ const schemaGetLogger = Joi.object({
4
+ name: Joi.string().required(),
5
+ level: Joi.string().required(),
6
+ });
7
+ const baseOptions = {
8
+ base: {
9
+ name: undefined, // Don't log PID and hostname
10
+ },
11
+ level: 'warn',
12
+ messageKey: 'message',
13
+ formatters: {
14
+ level(label) {
15
+ return {
16
+ level: label,
17
+ };
18
+ },
19
+ },
20
+ };
21
+ export function getCliLogger(options) {
22
+ const args = Joi.attempt(options, schemaGetLogger);
23
+ const loggerOptions = Object.assign(baseOptions, {
24
+ base: {
25
+ name: args.name,
26
+ },
27
+ level: args.level,
28
+ prettyPrint: {
29
+ colorize: true,
30
+ },
31
+ });
32
+ const destinationStdErr = Pino.destination(2);
33
+ return Pino(loggerOptions, destinationStdErr);
34
+ }
35
+ export function getHttpLogger(options) {
36
+ const args = Joi.attempt(options, schemaGetLogger);
37
+ const loggerOptions = Object.assign(baseOptions, {
38
+ base: {
39
+ name: args.name,
40
+ },
41
+ level: args.level,
42
+ });
43
+ return Pino(loggerOptions);
44
+ }
45
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/helpers/logger.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,IAAI,MAAM,MAAM,CAAC;AAOxB,MAAM,eAAe,GAAG,GAAG,CAAC,MAAM,CAAC;IACjC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC/B,CAAC,CAAC;AAEH,MAAM,WAAW,GAAuB;IACtC,IAAI,EAAE;QACJ,IAAI,EAAE,SAAS,EAAE,6BAA6B;KAC/C;IACD,KAAK,EAAE,MAAM;IACb,UAAU,EAAE,SAAS;IACrB,UAAU,EAAE;QACV,KAAK,CAAC,KAAK;YACT,OAAO;gBACL,KAAK,EAAE,KAAK;aACb,CAAC;QACJ,CAAC;KACF;CACF,CAAC;AAEF,MAAM,UAAU,YAAY,CAAC,OAAyB;IACpD,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;IACnD,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE;QAC/C,IAAI,EAAE;YACJ,IAAI,EAAE,IAAI,CAAC,IAAI;SAChB;QACD,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,WAAW,EAAE;YACX,QAAQ,EAAE,IAAI;SACf;KACF,CAAC,CAAC;IACH,MAAM,iBAAiB,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAC9C,OAAO,IAAI,CAAC,aAAa,EAAE,iBAAiB,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAyB;IACrD,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;IACnD,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE;QAC/C,IAAI,EAAE;YACJ,IAAI,EAAE,IAAI,CAAC,IAAI;SAChB;QACD,KAAK,EAAE,IAAI,CAAC,KAAK;KAClB,CAAC,CAAC;IACH,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC;AAC7B,CAAC"}
@@ -0,0 +1,10 @@
1
+ export * from './query';
2
+ export * from './catalog';
3
+ export * from './lookup/lookup';
4
+ export * from './terms';
5
+ export * from './search/query-mode';
6
+ export * from './distributions';
7
+ export * from './helpers/logger';
8
+ export * from './server-test';
9
+ export declare const comunica: import("@comunica/actor-init-sparql/index-browser").ActorInitSparql;
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,SAAS,CAAC;AACxB,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAI9B,eAAO,MAAM,QAAQ,qEAAc,CAAC"}
package/build/index.js ADDED
@@ -0,0 +1,11 @@
1
+ export * from './query';
2
+ export * from './catalog';
3
+ export * from './lookup/lookup';
4
+ export * from './terms';
5
+ export * from './search/query-mode';
6
+ export * from './distributions';
7
+ export * from './helpers/logger';
8
+ export * from './server-test';
9
+ import { newEngine } from '@comunica/actor-init-sparql';
10
+ export const comunica = newEngine();
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,SAAS,CAAC;AACxB,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAE9B,OAAO,EAAC,SAAS,EAAC,MAAM,6BAA6B,CAAC;AAEtD,MAAM,CAAC,MAAM,QAAQ,GAAG,SAAS,EAAE,CAAC"}
@@ -0,0 +1,27 @@
1
+ import { Catalog, Distribution, IRI } from '../catalog';
2
+ import { QueryTermsService, ServerError, TimeoutError } from '../query';
3
+ import { Term } from '../terms';
4
+ export declare type LookupQueryResult = {
5
+ uri: IRI;
6
+ distribution: SourceResult;
7
+ result: LookupResult;
8
+ };
9
+ export declare type SourceResult = Distribution | SourceNotFoundError;
10
+ export declare type LookupResult = Term | NotFoundError | TimeoutError | ServerError;
11
+ export declare class SourceNotFoundError {
12
+ readonly iri: IRI;
13
+ readonly message: string;
14
+ constructor(iri: IRI);
15
+ }
16
+ export declare class NotFoundError {
17
+ readonly iri: IRI;
18
+ readonly message: string;
19
+ constructor(iri: IRI);
20
+ }
21
+ export declare class LookupService {
22
+ private catalog;
23
+ private queryService;
24
+ constructor(catalog: Catalog, queryService: QueryTermsService);
25
+ lookup(iris: IRI[], timeoutMs: number): Promise<LookupQueryResult[]>;
26
+ }
27
+ //# sourceMappingURL=lookup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lookup.d.ts","sourceRoot":"","sources":["../../src/lookup/lookup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAW,YAAY,EAAE,GAAG,EAAC,MAAM,YAAY,CAAC;AAC/D,OAAO,EAEL,iBAAiB,EACjB,WAAW,EAGX,YAAY,EACb,MAAM,UAAU,CAAC;AAClB,OAAO,EAAC,IAAI,EAAC,MAAM,UAAU,CAAC;AAE9B,oBAAY,iBAAiB,GAAG;IAC9B,GAAG,EAAE,GAAG,CAAC;IACT,YAAY,EAAE,YAAY,CAAC;IAC3B,MAAM,EAAE,YAAY,CAAC;CACtB,CAAC;AAEF,oBAAY,YAAY,GAAG,YAAY,GAAG,mBAAmB,CAAC;AAE9D,oBAAY,YAAY,GAAG,IAAI,GAAG,aAAa,GAAG,YAAY,GAAG,WAAW,CAAC;AAE7E,qBAAa,mBAAmB;IAGlB,QAAQ,CAAC,GAAG,EAAE,GAAG;IAF7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;gBAEJ,GAAG,EAAE,GAAG;CAG9B;AAED,qBAAa,aAAa;IAGZ,QAAQ,CAAC,GAAG,EAAE,GAAG;IAF7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;gBAEJ,GAAG,EAAE,GAAG;CAG9B;AAED,qBAAa,aAAa;IAEtB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,YAAY;gBADZ,OAAO,EAAE,OAAO,EAChB,YAAY,EAAE,iBAAiB;IAG5B,MAAM,CACjB,IAAI,EAAE,GAAG,EAAE,EACX,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,iBAAiB,EAAE,CAAC;CAiDhC"}
@@ -0,0 +1,63 @@
1
+ import { Error, } from '../query';
2
+ export class SourceNotFoundError {
3
+ constructor(iri) {
4
+ this.iri = iri;
5
+ this.message = `No source found that can provide term with URI ${iri}`;
6
+ }
7
+ }
8
+ export class NotFoundError {
9
+ constructor(iri) {
10
+ this.iri = iri;
11
+ this.message = `No term found with URI ${iri}`;
12
+ }
13
+ }
14
+ export class LookupService {
15
+ constructor(catalog, queryService) {
16
+ this.catalog = catalog;
17
+ this.queryService = queryService;
18
+ }
19
+ async lookup(iris, timeoutMs) {
20
+ const irisToDataset = iris.reduce((acc, iri) => {
21
+ const dataset = this.catalog.getDatasetByTermIri(iri);
22
+ if (dataset) {
23
+ acc.set(iri, dataset);
24
+ }
25
+ return acc;
26
+ }, new Map());
27
+ const datasetToIris = [...irisToDataset].reduce((datasetMap, [iri, dataset]) => {
28
+ var _a;
29
+ datasetMap.set(dataset, [...((_a = datasetMap.get(dataset)) !== null && _a !== void 0 ? _a : []), iri]);
30
+ return datasetMap;
31
+ }, new Map());
32
+ const lookups = [...datasetToIris].map(([dataset]) => this.queryService.lookup(iris, dataset.distributions[0], timeoutMs));
33
+ const termsPerSource = await Promise.all(lookups);
34
+ const datasetToTerms = termsPerSource.reduce((acc, result) => {
35
+ const dataset = this.catalog.getDatasetByDistributionIri(result.distribution.iri);
36
+ acc.set(dataset, result);
37
+ return acc;
38
+ }, new Map());
39
+ return iris.map(iri => {
40
+ const dataset = irisToDataset.get(iri);
41
+ if (dataset === undefined) {
42
+ return {
43
+ uri: iri,
44
+ distribution: new SourceNotFoundError(iri),
45
+ result: new NotFoundError(iri),
46
+ };
47
+ }
48
+ return {
49
+ uri: iri,
50
+ distribution: dataset.distributions[0],
51
+ result: result(datasetToTerms.get(dataset), iri),
52
+ };
53
+ });
54
+ }
55
+ }
56
+ function result(result, iri) {
57
+ var _a;
58
+ if (result instanceof Error) {
59
+ return result;
60
+ }
61
+ return ((_a = result.terms.find(term => term.id.value === iri.toString())) !== null && _a !== void 0 ? _a : new NotFoundError(iri));
62
+ }
63
+ //# sourceMappingURL=lookup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lookup.js","sourceRoot":"","sources":["../../src/lookup/lookup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import { ActorInitSparql } from '@comunica/actor-init-sparql';
2
+ import { Bindings } from '@comunica/bus-query-operation';
3
+ import Pino from 'pino';
4
+ import { Term } from './terms';
5
+ import { QueryMode } from './search/query-mode';
6
+ import { Distribution, IRI } from './catalog';
7
+ export declare type TermsResult = Terms | TimeoutError | ServerError;
8
+ export declare class Terms {
9
+ readonly distribution: Distribution;
10
+ readonly terms: Term[];
11
+ constructor(distribution: Distribution, terms: Term[]);
12
+ }
13
+ export declare class Error {
14
+ readonly distribution: Distribution;
15
+ readonly message: string;
16
+ constructor(distribution: Distribution, message: string);
17
+ }
18
+ export declare class TimeoutError extends Error {
19
+ readonly distribution: Distribution;
20
+ constructor(distribution: Distribution, timeoutMs: number);
21
+ }
22
+ export declare class ServerError extends Error {
23
+ }
24
+ export declare class QueryTermsService {
25
+ private readonly logger;
26
+ private readonly engine;
27
+ constructor(options?: {
28
+ comunica?: ActorInitSparql;
29
+ logger?: Pino.Logger;
30
+ });
31
+ protected getConfig(distribution: Distribution, bindings?: Bindings): any;
32
+ search(searchQuery: string, queryMode: QueryMode, distribution: Distribution, timeoutMs: number): Promise<TermsResult>;
33
+ lookup(iris: IRI[], distribution: Distribution, timeoutMs: number): Promise<TermsResult>;
34
+ run(query: string, distribution: Distribution, timeoutMs: number, bindings?: Bindings): Promise<TermsResult>;
35
+ }
36
+ //# sourceMappingURL=query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EACL,QAAQ,EAET,MAAM,+BAA+B,CAAC;AAKvC,OAAO,IAAI,MAAM,MAAM,CAAC;AAGxB,OAAO,EAAC,IAAI,EAAmB,MAAM,SAAS,CAAC;AAC/C,OAAO,EAAC,SAAS,EAAgB,MAAM,qBAAqB,CAAC;AAE7D,OAAO,EAAC,YAAY,EAAE,GAAG,EAAC,MAAM,WAAW,CAAC;AAE5C,oBAAY,WAAW,GAAG,KAAK,GAAG,YAAY,GAAG,WAAW,CAAC;AAE7D,qBAAa,KAAK;IACJ,QAAQ,CAAC,YAAY,EAAE,YAAY;IAAE,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE;gBAAlD,YAAY,EAAE,YAAY,EAAW,KAAK,EAAE,IAAI,EAAE;CACxE;AAED,qBAAa,KAAK;IACJ,QAAQ,CAAC,YAAY,EAAE,YAAY;IAAE,QAAQ,CAAC,OAAO,EAAE,MAAM;gBAApD,YAAY,EAAE,YAAY,EAAW,OAAO,EAAE,MAAM;CAC1E;AACD,qBAAa,YAAa,SAAQ,KAAK;IACzB,QAAQ,CAAC,YAAY,EAAE,YAAY;gBAA1B,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM;CAGnE;AACD,qBAAa,WAAY,SAAQ,KAAK;CAAG;AAEzC,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAc;IACrC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;gBAGvC,OAAO,GAAE;QAAC,QAAQ,CAAC,EAAE,eAAe,CAAC;QAAC,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAA;KAAM;IAOlE,SAAS,CAAC,SAAS,CAAC,YAAY,EAAE,YAAY,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,GAAG;IAcnE,MAAM,CACV,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,SAAS,EACpB,YAAY,EAAE,YAAY,EAC1B,SAAS,EAAE,MAAM;IAkBb,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM;IAWjE,GAAG,CACP,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,YAAY,EAC1B,SAAS,EAAE,MAAM,EACjB,QAAQ,CAAC,EAAE,QAAQ,GAClB,OAAO,CAAC,WAAW,CAAC;CA2CxB"}
package/build/query.js ADDED
@@ -0,0 +1,101 @@
1
+ import { Bindings, } from '@comunica/bus-query-operation';
2
+ import * as Hoek from '@hapi/hoek';
3
+ import Joi from 'joi';
4
+ import factory from '@rdfjs/data-model';
5
+ import { LoggerPino } from './helpers/logger-pino';
6
+ import Pino from 'pino';
7
+ import PrettyMilliseconds from 'pretty-ms';
8
+ import { TermsTransformer } from './terms';
9
+ import { queryVariants } from './search/query-mode';
10
+ import { newEngine } from '@comunica/actor-init-sparql';
11
+ export class Terms {
12
+ constructor(distribution, terms) {
13
+ this.distribution = distribution;
14
+ this.terms = terms;
15
+ }
16
+ }
17
+ export class Error {
18
+ constructor(distribution, message) {
19
+ this.distribution = distribution;
20
+ this.message = message;
21
+ }
22
+ }
23
+ export class TimeoutError extends Error {
24
+ constructor(distribution, timeoutMs) {
25
+ super(distribution, `Source timed out after ${timeoutMs}ms`);
26
+ this.distribution = distribution;
27
+ }
28
+ }
29
+ export class ServerError extends Error {
30
+ }
31
+ export class QueryTermsService {
32
+ constructor(options = {}) {
33
+ this.engine = options.comunica || newEngine();
34
+ this.logger = options.logger || Pino();
35
+ }
36
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
37
+ getConfig(distribution, bindings) {
38
+ const logger = new LoggerPino({ logger: this.logger });
39
+ return {
40
+ log: logger,
41
+ sources: [
42
+ {
43
+ type: 'sparql',
44
+ value: distribution.endpoint.toString(),
45
+ },
46
+ ],
47
+ initialBindings: bindings,
48
+ };
49
+ }
50
+ async search(searchQuery, queryMode, distribution, timeoutMs) {
51
+ return this.run(distribution.searchQuery, distribution, timeoutMs, Bindings([...queryVariants(searchQuery, queryMode)].reduce((record, [k, v]) => {
52
+ record[k] = factory.literal(v);
53
+ return record;
54
+ }, {})));
55
+ }
56
+ async lookup(iris, distribution, timeoutMs) {
57
+ return this.run(distribution.lookupQuery.replace('?uris', iris.map(iri => `<${iri}>`).join(' ')), distribution, timeoutMs);
58
+ }
59
+ async run(query, distribution, timeoutMs, bindings) {
60
+ Joi.attempt(timeoutMs, Joi.number()
61
+ .integer()
62
+ .min(1)
63
+ .max(parseInt(process.env.MAX_QUERY_TIMEOUT) || 10000)
64
+ .default(parseInt(process.env.DEFAULT_QUERY_TIMEOUT) || 5000));
65
+ this.logger.info(`Querying "${distribution.endpoint}" with "${query}"...`);
66
+ const timer = new Hoek.Bench();
67
+ const result = (await this.engine.query(query, this.getConfig(distribution, bindings)));
68
+ return guardTimeout(new Promise(resolve => {
69
+ const termsTransformer = new TermsTransformer();
70
+ result.quadStream.on('error', (error) => {
71
+ this.logger.error(`An error occurred when querying "${distribution.endpoint}": ${error}`);
72
+ resolve(new ServerError(distribution, error.message));
73
+ });
74
+ result.quadStream.on('data', (quad) => {
75
+ termsTransformer.fromQuad(quad);
76
+ });
77
+ result.quadStream.on('end', () => {
78
+ const terms = termsTransformer.asArray().sort(alphabeticallyByLabels);
79
+ this.logger.info(`Found ${terms.length} terms matching "${query}" in "${distribution.endpoint}" in ${PrettyMilliseconds(timer.elapsed())}`);
80
+ resolve(new Terms(distribution, terms));
81
+ });
82
+ }), timeoutMs, new TimeoutError(distribution, timeoutMs));
83
+ }
84
+ }
85
+ const alphabeticallyByLabels = (a, b) => {
86
+ var _a, _b, _c, _d, _e, _f, _g, _h;
87
+ const prefLabelA = (_b = (_a = a.prefLabels[0]) === null || _a === void 0 ? void 0 : _a.value) !== null && _b !== void 0 ? _b : '';
88
+ const altLabelA = (_d = (_c = a.altLabels[0]) === null || _c === void 0 ? void 0 : _c.value) !== null && _d !== void 0 ? _d : '';
89
+ const sortLabelA = prefLabelA + altLabelA;
90
+ const prefLabelB = (_f = (_e = b.prefLabels[0]) === null || _e === void 0 ? void 0 : _e.value) !== null && _f !== void 0 ? _f : '';
91
+ const altLabelB = (_h = (_g = b.altLabels[0]) === null || _g === void 0 ? void 0 : _g.value) !== null && _h !== void 0 ? _h : '';
92
+ const sortLabelB = prefLabelB + altLabelB;
93
+ return sortLabelA.localeCompare(sortLabelB);
94
+ };
95
+ function guardTimeout(promise, timeoutMs, timeoutError) {
96
+ return Promise.race([
97
+ promise,
98
+ new Promise(resolve => setTimeout(resolve.bind(null, timeoutError), timeoutMs)),
99
+ ]);
100
+ }
101
+ //# sourceMappingURL=query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.js","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export declare enum QueryMode {
2
+ RAW = "raw",
3
+ OPTIMIZED = "optimized",
4
+ DEPRECATED = "deprecated"
5
+ }
6
+ export declare function queryVariants(query: string, type: QueryMode): Map<string, string>;
7
+ //# sourceMappingURL=query-mode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-mode.d.ts","sourceRoot":"","sources":["../../src/search/query-mode.ts"],"names":[],"mappings":"AAAA,oBAAY,SAAS;IACnB,GAAG,QAAQ;IACX,SAAS,cAAc;IACvB,UAAU,eAAe;CAC1B;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,uBAe3D"}
@@ -0,0 +1,43 @@
1
+ export var QueryMode;
2
+ (function (QueryMode) {
3
+ QueryMode["RAW"] = "raw";
4
+ QueryMode["OPTIMIZED"] = "optimized";
5
+ QueryMode["DEPRECATED"] = "deprecated";
6
+ })(QueryMode || (QueryMode = {}));
7
+ export function queryVariants(query, type) {
8
+ switch (type) {
9
+ case QueryMode.RAW:
10
+ return new Map([
11
+ ['?query', query],
12
+ ['?virtuosoQuery', query],
13
+ ]);
14
+ case QueryMode.OPTIMIZED:
15
+ return new Map([
16
+ ['?query', stringQuery(query)],
17
+ ['?virtuosoQuery', virtuosoQuery(stringQuery(query))],
18
+ ]);
19
+ case QueryMode.DEPRECATED:
20
+ return new Map([['?query', query]]);
21
+ }
22
+ }
23
+ const stringQuery = (query) => query.toLowerCase().replace(/\s+/g, ' ').trim();
24
+ const virtuosoQuery = (query) => join(quote(filterStopWords(split(escape(query)))));
25
+ const escape = (query) => query.replace(/'/g, "\\'");
26
+ const split = (query) => query.split(/\s+/);
27
+ /**
28
+ * Quote parts that are not boolean operators.
29
+ */
30
+ const quote = (queryParts) => queryParts.map(part => (isBooleanOperator(part) ? part : `'${part}'`));
31
+ const filterStopWords = (queryParts) => queryParts.filter(part => part !== '&');
32
+ /**
33
+ * Join query parts with boolean AND if they are not yet connected with a boolean.
34
+ */
35
+ const join = (queryParts) => queryParts.reduce((previousValue, currentValue, currentIndex, array) => {
36
+ const previous = array[currentIndex - 1];
37
+ if (!isBooleanOperator(previous) && !isBooleanOperator(currentValue)) {
38
+ return `${previousValue} AND ${currentValue}`;
39
+ }
40
+ return `${previousValue} ${currentValue}`;
41
+ });
42
+ const isBooleanOperator = (maybeBool) => maybeBool.toLowerCase() === 'and' || maybeBool.toLowerCase() === 'or';
43
+ //# sourceMappingURL=query-mode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-mode.js","sourceRoot":"","sources":["../../src/search/query-mode.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,SAIX;AAJD,WAAY,SAAS;IACnB,wBAAW,CAAA;IACX,oCAAuB,CAAA;IACvB,sCAAyB,CAAA;AAC3B,CAAC,EAJW,SAAS,KAAT,SAAS,QAIpB;AAED,MAAM,UAAU,aAAa,CAAC,KAAa,EAAE,IAAe;IAC1D,QAAQ,IAAI,EAAE;QACZ,KAAK,SAAS,CAAC,GAAG;YAChB,OAAO,IAAI,GAAG,CAAC;gBACb,CAAC,QAAQ,EAAE,KAAK,CAAC;gBACjB,CAAC,gBAAgB,EAAE,KAAK,CAAC;aAC1B,CAAC,CAAC;QACL,KAAK,SAAS,CAAC,SAAS;YACtB,OAAO,IAAI,GAAG,CAAC;gBACb,CAAC,QAAQ,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC;gBAC9B,CAAC,gBAAgB,EAAE,aAAa,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;aACtD,CAAC,CAAC;QACL,KAAK,SAAS,CAAC,UAAU;YACvB,OAAO,IAAI,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;KACvC;AACH,CAAC;AAED,MAAM,WAAW,GAAG,CAAC,KAAa,EAAE,EAAE,CACpC,KAAK,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AAElD,MAAM,aAAa,GAAG,CAAC,KAAa,EAAE,EAAE,CACtC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAErD,MAAM,MAAM,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAE7D,MAAM,KAAK,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAEpD;;GAEG;AACH,MAAM,KAAK,GAAG,CAAC,UAAoB,EAAE,EAAE,CACrC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC;AAEzE,MAAM,eAAe,GAAG,CAAC,UAAoB,EAAE,EAAE,CAC/C,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC;AAE1C;;GAEG;AACH,MAAM,IAAI,GAAG,CAAC,UAAoB,EAAE,EAAE,CACpC,UAAU,CAAC,MAAM,CAAC,CAAC,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE;IACrE,MAAM,QAAQ,GAAG,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;IACzC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,EAAE;QACpE,OAAO,GAAG,aAAa,QAAQ,YAAY,EAAE,CAAC;KAC/C;IAED,OAAO,GAAG,aAAa,IAAI,YAAY,EAAE,CAAC;AAC5C,CAAC,CAAC,CAAC;AAEL,MAAM,iBAAiB,GAAG,CAAC,SAAiB,EAAE,EAAE,CAC9C,SAAS,CAAC,WAAW,EAAE,KAAK,KAAK,IAAI,SAAS,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { Catalog } from './index';
2
+ export declare const testCatalog: (port: number) => Catalog;
3
+ export declare function startDistributionSparqlEndpoint(port: number): Promise<void>;
4
+ //# sourceMappingURL=server-test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-test.d.ts","sourceRoot":"","sources":["../src/server-test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAiD,MAAM,SAAS,CAAC;AAKhF,eAAO,MAAM,WAAW,SAAU,MAAM,YAoGpC,CAAC;AAEL,wBAAsB,+BAA+B,CACnD,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,IAAI,CAAC,CAOf"}
@@ -0,0 +1,64 @@
1
+ import { Catalog, Dataset, IRI, Organization, SparqlDistribution } from './index';
2
+ import { setup } from 'jest-dev-server';
3
+ import { dirname } from 'path';
4
+ import { fileURLToPath } from 'url';
5
+ export const testCatalog = (port) => new Catalog([
6
+ new Dataset(new IRI('https://data.rkd.nl/rkdartists'), 'RKDartists', [new IRI('https://example.com/resources/')], [
7
+ new Organization(new IRI('https://rkd.nl'), 'RKD – Nederlands Instituut voor Kunstgeschiedenis', 'RKD'),
8
+ ], [
9
+ new SparqlDistribution(new IRI('https://data.netwerkdigitaalerfgoed.nl/rkd/rkdartists/sparql'), new IRI(`http://localhost:${port}/sparql`), `
10
+ PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
11
+ CONSTRUCT {
12
+ ?s ?p ?o
13
+ }
14
+ WHERE {
15
+ ?s ?p ?o ;
16
+ ?labelPredicate ?label .
17
+ VALUES ?labelPredicate { skos:prefLabel skos:altLabel }
18
+ FILTER (regex(?label, ?query, "i"))
19
+ }`, `
20
+ PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
21
+ CONSTRUCT {
22
+ ?s ?p ?o ;
23
+ skos:broader ?broader_uri ;
24
+ skos:narrower ?narrower_uri ;
25
+ skos:related ?related_uri .
26
+ ?broader_uri skos:prefLabel ?broader_prefLabel .
27
+ ?narrower_uri skos:prefLabel ?narrower_prefLabel .
28
+ ?related_uri skos:prefLabel ?related_prefLabel .
29
+ }
30
+ WHERE {
31
+ ?s ?p ?o.
32
+ VALUES ?s { ?uris }
33
+ OPTIONAL {
34
+ ?s skos:broader ?broader_uri.
35
+ ?broader_uri skos:prefLabel ?broader_prefLabel.
36
+ }
37
+ OPTIONAL {
38
+ ?s skos:narrower ?narrower_uri.
39
+ ?narrower_uri skos:prefLabel ?narrower_prefLabel.
40
+ }
41
+ OPTIONAL {
42
+ ?s skos:related ?related_uri.
43
+ ?related_uri skos:prefLabel ?related_prefLabel.
44
+ }
45
+ }`),
46
+ ]),
47
+ new Dataset(new IRI('https://data.cultureelerfgoed.nl/term/id/cht'), 'Cultuurhistorische Thesaurus', [new IRI('https://data.cultureelerfgoed.nl/term/id/cht/')], [
48
+ new Organization(new IRI('https://www.cultureelerfgoed.nl'), 'Rijksdienst voor het Cultureel Erfgoed', 'RCE'),
49
+ ], [
50
+ new SparqlDistribution(new IRI('https://example.com/distributions/endpoint-error'), new IRI('http://does-not-resolve'), 'CONSTRUCT { ?s ?p ?o } WHERE { ?s ?p ?o }', 'CONSTRUCT { ?s ?p ?o } WHERE { ?s ?p ?o }'),
51
+ ]),
52
+ new Dataset(new IRI('http://vocab.getty.edu/aat'), 'Art & Architecture Thesaurus', [new IRI('http://vocab.getty.edu/aat/')], [
53
+ new Organization(new IRI('http://www.getty.edu/research/'), 'Getty Research Institute', 'Getty'),
54
+ ], [
55
+ new SparqlDistribution(new IRI('https://example.com/distributions/timeout'), new IRI('https://httpbin.org/delay/3'), 'CONSTRUCT { ?s ?p ?o } WHERE { ?s ?p ?o }', 'CONSTRUCT { ?s ?p ?o } WHERE { ?s ?p ?o }'),
56
+ ]),
57
+ ]);
58
+ export async function startDistributionSparqlEndpoint(port) {
59
+ await setup({
60
+ command: `npx comunica-sparql-file-http ${dirname(fileURLToPath(import.meta.url))}/../test/fixtures/terms.ttl -p ${port}`,
61
+ port,
62
+ });
63
+ }
64
+ //# sourceMappingURL=server-test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-test.js","sourceRoot":"","sources":["../src/server-test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,YAAY,EAAE,kBAAkB,EAAC,MAAM,SAAS,CAAC;AAChF,OAAO,EAAC,KAAK,EAAC,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAC,OAAO,EAAC,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAC,aAAa,EAAC,MAAM,KAAK,CAAC;AAElC,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,IAAY,EAAE,EAAE,CAC1C,IAAI,OAAO,CAAC;IACV,IAAI,OAAO,CACT,IAAI,GAAG,CAAC,gCAAgC,CAAC,EACzC,YAAY,EACZ,CAAC,IAAI,GAAG,CAAC,gCAAgC,CAAC,CAAC,EAC3C;QACE,IAAI,YAAY,CACd,IAAI,GAAG,CAAC,gBAAgB,CAAC,EACzB,mDAAmD,EACnD,KAAK,CACN;KACF,EACD;QACE,IAAI,kBAAkB,CACpB,IAAI,GAAG,CACL,8DAA8D,CAC/D,EACD,IAAI,GAAG,CAAC,oBAAoB,IAAI,SAAS,CAAC,EAC1C;;;;;;;;;;YAUE,EACF;;;;;;;;;;;;;;;;;;;;;;;;;;YA0BE,CACH;KACF,CACF;IACD,IAAI,OAAO,CACT,IAAI,GAAG,CAAC,8CAA8C,CAAC,EACvD,8BAA8B,EAC9B,CAAC,IAAI,GAAG,CAAC,+CAA+C,CAAC,CAAC,EAC1D;QACE,IAAI,YAAY,CACd,IAAI,GAAG,CAAC,iCAAiC,CAAC,EAC1C,wCAAwC,EACxC,KAAK,CACN;KACF,EACD;QACE,IAAI,kBAAkB,CACpB,IAAI,GAAG,CAAC,kDAAkD,CAAC,EAC3D,IAAI,GAAG,CAAC,yBAAyB,CAAC,EAClC,2CAA2C,EAC3C,2CAA2C,CAC5C;KACF,CACF;IACD,IAAI,OAAO,CACT,IAAI,GAAG,CAAC,4BAA4B,CAAC,EACrC,8BAA8B,EAC9B,CAAC,IAAI,GAAG,CAAC,6BAA6B,CAAC,CAAC,EACxC;QACE,IAAI,YAAY,CACd,IAAI,GAAG,CAAC,gCAAgC,CAAC,EACzC,0BAA0B,EAC1B,OAAO,CACR;KACF,EACD;QACE,IAAI,kBAAkB,CACpB,IAAI,GAAG,CAAC,2CAA2C,CAAC,EACpD,IAAI,GAAG,CAAC,6BAA6B,CAAC,EACtC,2CAA2C,EAC3C,2CAA2C,CAC5C;KACF,CACF;CACF,CAAC,CAAC;AAEL,MAAM,CAAC,KAAK,UAAU,+BAA+B,CACnD,IAAY;IAEZ,MAAM,KAAK,CAAC;QACV,OAAO,EAAE,iCAAiC,OAAO,CAC/C,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAC/B,kCAAkC,IAAI,EAAE;QACzC,IAAI;KACL,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,34 @@
1
+ import * as RDF from 'rdf-js';
2
+ export declare class Term {
3
+ readonly id: RDF.Term;
4
+ readonly type: RDF.Term | undefined;
5
+ readonly prefLabels: RDF.Literal[];
6
+ readonly altLabels: RDF.Literal[];
7
+ readonly hiddenLabels: RDF.Literal[];
8
+ readonly scopeNotes: RDF.Literal[];
9
+ readonly seeAlso: RDF.NamedNode[];
10
+ readonly broaderTerms: RelatedTerm[];
11
+ readonly narrowerTerms: RelatedTerm[];
12
+ readonly relatedTerms: RelatedTerm[];
13
+ constructor(id: RDF.Term, type: RDF.Term | undefined, prefLabels: RDF.Literal[], altLabels: RDF.Literal[], hiddenLabels: RDF.Literal[], scopeNotes: RDF.Literal[], seeAlso: RDF.NamedNode[], broaderTerms: RelatedTerm[], narrowerTerms: RelatedTerm[], relatedTerms: RelatedTerm[]);
14
+ }
15
+ export declare class RelatedTerm {
16
+ readonly id: RDF.Term;
17
+ readonly prefLabels: RDF.Literal[];
18
+ constructor(id: RDF.Term, prefLabels: RDF.Literal[]);
19
+ }
20
+ export declare class TermsTransformer {
21
+ private termsIris;
22
+ private termsMap;
23
+ private readonly predicateToPropertyMap;
24
+ fromQuad(quad: RDF.Quad): void;
25
+ asArray(): Term[];
26
+ /**
27
+ * Map related IRIs to their related terms, making sure to only accept complete related terms.
28
+ *
29
+ * Related terms can be incomplete because of the SPARQL query limit (see
30
+ * https://github.com/netwerk-digitaal-erfgoed/network-of-terms/issues/36).
31
+ */
32
+ private mapRelatedTerms;
33
+ }
34
+ //# sourceMappingURL=terms.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terms.d.ts","sourceRoot":"","sources":["../src/terms.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,QAAQ,CAAC;AAE9B,qBAAa,IAAI;IAEb,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI;IACrB,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,GAAG,SAAS;IACnC,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC,OAAO,EAAE;IAClC,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC,OAAO,EAAE;IACjC,QAAQ,CAAC,YAAY,EAAE,GAAG,CAAC,OAAO,EAAE;IACpC,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC,OAAO,EAAE;IAClC,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,SAAS,EAAE;IACjC,QAAQ,CAAC,YAAY,EAAE,WAAW,EAAE;IACpC,QAAQ,CAAC,aAAa,EAAE,WAAW,EAAE;IACrC,QAAQ,CAAC,YAAY,EAAE,WAAW,EAAE;gBAT3B,EAAE,EAAE,GAAG,CAAC,IAAI,EACZ,IAAI,EAAE,GAAG,CAAC,IAAI,GAAG,SAAS,EAC1B,UAAU,EAAE,GAAG,CAAC,OAAO,EAAE,EACzB,SAAS,EAAE,GAAG,CAAC,OAAO,EAAE,EACxB,YAAY,EAAE,GAAG,CAAC,OAAO,EAAE,EAC3B,UAAU,EAAE,GAAG,CAAC,OAAO,EAAE,EACzB,OAAO,EAAE,GAAG,CAAC,SAAS,EAAE,EACxB,YAAY,EAAE,WAAW,EAAE,EAC3B,aAAa,EAAE,WAAW,EAAE,EAC5B,YAAY,EAAE,WAAW,EAAE;CAEvC;AAED,qBAAa,WAAW;IACV,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI;IAAE,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC,OAAO,EAAE;gBAAhD,EAAE,EAAE,GAAG,CAAC,IAAI,EAAW,UAAU,EAAE,GAAG,CAAC,OAAO,EAAE;CACtE;AAeD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,SAAS,CAA0B;IAC3C,OAAO,CAAC,QAAQ,CAA4C;IAC5D,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAiBpC;IAEH,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,GAAG,IAAI;IA6B9B,OAAO,IAAI,IAAI,EAAE;IAqBjB;;;;;OAKG;IACH,OAAO,CAAC,eAAe,CAOd;CACV"}
package/build/terms.js ADDED
@@ -0,0 +1,109 @@
1
+ export class Term {
2
+ constructor(id, type, prefLabels, altLabels, hiddenLabels, scopeNotes, seeAlso, broaderTerms, narrowerTerms, relatedTerms) {
3
+ this.id = id;
4
+ this.type = type;
5
+ this.prefLabels = prefLabels;
6
+ this.altLabels = altLabels;
7
+ this.hiddenLabels = hiddenLabels;
8
+ this.scopeNotes = scopeNotes;
9
+ this.seeAlso = seeAlso;
10
+ this.broaderTerms = broaderTerms;
11
+ this.narrowerTerms = narrowerTerms;
12
+ this.relatedTerms = relatedTerms;
13
+ }
14
+ }
15
+ export class RelatedTerm {
16
+ constructor(id, prefLabels) {
17
+ this.id = id;
18
+ this.prefLabels = prefLabels;
19
+ }
20
+ }
21
+ class SparqlResultTerm {
22
+ constructor(id) {
23
+ this.id = id;
24
+ this.type = undefined;
25
+ this.prefLabels = [];
26
+ this.altLabels = [];
27
+ this.hiddenLabels = [];
28
+ this.scopeNotes = [];
29
+ this.seeAlso = [];
30
+ this.broaderTerms = [];
31
+ this.narrowerTerms = [];
32
+ this.relatedTerms = [];
33
+ }
34
+ }
35
+ export class TermsTransformer {
36
+ constructor() {
37
+ this.termsIris = new Set();
38
+ this.termsMap = new Map();
39
+ this.predicateToPropertyMap = new Map([
40
+ ['http://www.w3.org/1999/02/22-rdf-syntax-ns#type', 'type'],
41
+ ['http://www.w3.org/2000/01/rdf-schema#seeAlso', 'seeAlso'],
42
+ ['http://www.w3.org/2004/02/skos/core#prefLabel', 'prefLabels'],
43
+ ['http://www.w3.org/2008/05/skos#prefLabel', 'prefLabels'],
44
+ ['http://www.w3.org/2004/02/skos/core#altLabel', 'altLabels'],
45
+ ['http://www.w3.org/2008/05/skos#altLabel', 'altLabels'],
46
+ ['http://www.w3.org/2004/02/skos/core#hiddenLabel', 'hiddenLabels'],
47
+ ['http://www.w3.org/2008/05/skos#hiddenLabel', 'hiddenLabels'],
48
+ ['http://www.w3.org/2004/02/skos/core#scopeNote', 'scopeNotes'],
49
+ ['http://www.w3.org/2008/05/skos#scopeNote', 'scopeNotes'],
50
+ ['http://www.w3.org/2004/02/skos/core#broader', 'broaderTerms'],
51
+ ['http://www.w3.org/2008/05/skos#broader', 'broaderTerms'],
52
+ ['http://www.w3.org/2004/02/skos/core#narrower', 'narrowerTerms'],
53
+ ['http://www.w3.org/2008/05/skos#narrower', 'narrowerTerms'],
54
+ ['http://www.w3.org/2004/02/skos/core#related', 'relatedTerms'],
55
+ ['http://www.w3.org/2008/05/skos#related', 'relatedTerms'],
56
+ ]);
57
+ /**
58
+ * Map related IRIs to their related terms, making sure to only accept complete related terms.
59
+ *
60
+ * Related terms can be incomplete because of the SPARQL query limit (see
61
+ * https://github.com/netwerk-digitaal-erfgoed/network-of-terms/issues/36).
62
+ */
63
+ this.mapRelatedTerms = (terms) => terms.reduce((acc, iri) => {
64
+ const term = this.termsMap.get(iri.value);
65
+ if (term) {
66
+ acc.push(new RelatedTerm(term.id, term.prefLabels));
67
+ }
68
+ return acc;
69
+ }, []);
70
+ }
71
+ fromQuad(quad) {
72
+ var _a;
73
+ const subject = quad.subject;
74
+ const propertyName = this.predicateToPropertyMap.get(quad.predicate.value);
75
+ const currentTerm = (_a = this.termsMap.get(subject.value)) !== null && _a !== void 0 ? _a : new SparqlResultTerm(subject);
76
+ this.termsMap.set(subject.value, currentTerm);
77
+ // skos:Concepts are the top-level search results, which we track in termsIris.
78
+ if (propertyName === 'type' &&
79
+ (quad.object.value === 'http://www.w3.org/2004/02/skos/core#Concept' ||
80
+ quad.object.value === 'http://www.w3.org/2008/05/skos#Concept')) {
81
+ this.termsIris.add(subject.value);
82
+ }
83
+ if (propertyName !== undefined) {
84
+ const propertyValue = currentTerm[propertyName]; // eslint-disable-line @typescript-eslint/no-explicit-any
85
+ if (Array.isArray(propertyValue)) {
86
+ // Prevent duplicate prefLabel values due to duplicate quads.
87
+ if (!propertyValue.find(value => value.equals(quad.object))) {
88
+ propertyValue.push(quad.object);
89
+ }
90
+ }
91
+ else {
92
+ currentTerm[propertyName] = quad.object; // eslint-disable-line @typescript-eslint/no-explicit-any
93
+ }
94
+ }
95
+ }
96
+ asArray() {
97
+ return [...this.termsIris].map(iri => {
98
+ const term = this.termsMap.get(iri);
99
+ return new Term(term.id, term.type, term.prefLabels, term.altLabels, term.hiddenLabels, term.scopeNotes, term.seeAlso, this.mapRelatedTerms(term.broaderTerms).sort(alphabeticallyByPrefLabel), this.mapRelatedTerms(term.narrowerTerms).sort(alphabeticallyByPrefLabel), this.mapRelatedTerms(term.relatedTerms).sort(alphabeticallyByPrefLabel));
100
+ });
101
+ }
102
+ }
103
+ const alphabeticallyByPrefLabel = (a, b) => {
104
+ var _a, _b, _c, _d;
105
+ const prefLabelA = (_b = (_a = a.prefLabels[0]) === null || _a === void 0 ? void 0 : _a.value) !== null && _b !== void 0 ? _b : '';
106
+ const prefLabelB = (_d = (_c = b.prefLabels[0]) === null || _c === void 0 ? void 0 : _c.value) !== null && _d !== void 0 ? _d : '';
107
+ return prefLabelA.localeCompare(prefLabelB);
108
+ };
109
+ //# sourceMappingURL=terms.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terms.js","sourceRoot":"","sources":["../src/terms.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,56 @@
1
+ {
2
+ "name": "@netwerk-digitaal-erfgoed/network-of-terms-query",
3
+ "version": "1.0.1",
4
+ "type": "module",
5
+ "publishConfig": {
6
+ "access": "public"
7
+ },
8
+ "main": "build/index.js",
9
+ "types": "build/index.d.ts",
10
+ "scripts": {
11
+ "clean": "rm -rf build/ tsconfig.build.tsbuildinfo",
12
+ "compile": "npm run clean && tsc -b tsconfig.build.json",
13
+ "test": "NODE_OPTIONS=--experimental-vm-modules jest ${1}",
14
+ "posttest": "jest-coverage-thresholds-bumper --silent"
15
+ },
16
+ "files": [
17
+ "build/"
18
+ ],
19
+ "repository": {
20
+ "type": "git",
21
+ "url": "git+https://github.com/netwerk-digitaal-erfgoed/network-of-terms.git"
22
+ },
23
+ "author": "",
24
+ "license": "EUPL-1.2",
25
+ "bugs": {
26
+ "url": "https://github.com/netwerk-digitaal-erfgoed/network-of-terms/issues"
27
+ },
28
+ "homepage": "https://github.com/netwerk-digitaal-erfgoed/network-of-terms#readme",
29
+ "keywords": [],
30
+ "description": "Engine for querying sources in the Network of Terms",
31
+ "dependencies": {
32
+ "@comunica/actor-init-sparql": "^1.22.3",
33
+ "@comunica/actor-query-operation-sparql-endpoint": "^1.22.2",
34
+ "@comunica/bus-query-operation": "^1.22.0",
35
+ "@comunica/core": "^1.22.0",
36
+ "@hapi/hoek": "^9.2.1",
37
+ "@rdfjs/data-model": "^2.0.0",
38
+ "joi": "^17.6.0",
39
+ "pino": "^7.8.0",
40
+ "pino-pretty": "^7.5.1",
41
+ "pretty-ms": "^7.0.1",
42
+ "rdf-js": "^4.0.2",
43
+ "rdf-parse": "^1.9.1",
44
+ "rdf-store-stream": "^1.3.0"
45
+ },
46
+ "devDependencies": {
47
+ "@comunica/actor-http-node-fetch": "^1.22.3",
48
+ "@comunica/actor-init-sparql-file": "^1.22.3",
49
+ "@comunica/actor-query-operation-service": "^1.22.3",
50
+ "jest-dev-server": "^6.0.3",
51
+ "ts-jest": "^27.1.3"
52
+ },
53
+ "engines": {
54
+ "node": ">=16.0.0"
55
+ }
56
+ }