marcattacks 2.2.12 → 2.2.14

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/dist/globber.js CHANGED
File without changes
@@ -16,9 +16,9 @@ export async function transform(_opts) {
16
16
  if (line.length === 0)
17
17
  continue;
18
18
  if (!line.match(/^\w+\s[\x20-\x7E]{5}\sL\s.*/u)) {
19
- const err = new Error(`syntax error in record ${recordNum + 1}`);
20
- logger.error(err.message);
21
- return callback(err);
19
+ logger.error(`syntax error in record ${recordNum + 1}`);
20
+ logger.error(`error> ${line}`);
21
+ continue;
22
22
  }
23
23
  const [id, ...rest] = line.split(" ");
24
24
  const lineData = rest.join(" ");
@@ -1 +1 @@
1
- {"version":3,"file":"alephseq.js","sourceRoot":"","sources":["../../src/input/alephseq.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAA0B,MAAM,QAAQ,CAAC;AAC3D,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;AAElC,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,KAAU;IACtC,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,GAAG,GAAe,EAAE,CAAC;IACzB,IAAI,MAAM,GAAW,EAAE,CAAC;IACxB,IAAI,IAAI,GAAG,EAAE,CAAC;IAEd,OAAO,IAAI,SAAS,CAAC;QACjB,UAAU,EAAE,IAAI;QAEhB,SAAS,CAAC,KAAU,EAAE,SAAiB,EAAE,QAA2B;YAChE,MAAM,IAAI,GAAG,IAAI,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;YACrC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAElC,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;YAEzB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACvB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;oBAAE,SAAS;gBAEhC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,8BAA8B,CAAC,EAAE,CAAC;oBAC9C,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,0BAA0B,SAAS,GAAG,CAAC,EAAE,CAAC,CAAC;oBACjE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;oBAC1B,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;gBACzB,CAAC;gBAED,MAAM,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAEhC,IAAI,MAAM,IAAI,MAAM,KAAK,EAAE,EAAE,CAAC;oBAC1B,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;oBAC3B,GAAG,GAAG,EAAE,CAAC;oBACT,SAAS,EAAE,CAAC;gBAChB,CAAC;gBAED,MAAM,GAAG,GAAI,QAAQ,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACvC,MAAM,IAAI,GAAG,QAAQ,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACvC,MAAM,IAAI,GAAG,QAAQ,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACvC,MAAM,EAAE,GAAK,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;gBACpC,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;gBAElC,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;oBACzD,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC;gBAC/C,CAAC;qBAAM,CAAC;oBACJ,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACnD,CAAC;gBAED,MAAM,GAAG,EAAG,CAAC;YACjB,CAAC;YAED,QAAQ,EAAE,CAAC;QACf,CAAC;QAED,KAAK,CAAC,QAA2B;YAC7B,IAAI,IAAI,EAAE,CAAC;gBACP,MAAM,CAAC,IAAI,CAAC,kCAAkC,EAAE,IAAI,CAAC,CAAC;YAC1D,CAAC;YAED,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACjB,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;YAC/B,CAAC;YACD,QAAQ,EAAE,CAAC;QACf,CAAC;KACJ,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"alephseq.js","sourceRoot":"","sources":["../../src/input/alephseq.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,5 @@
1
1
  import { Transform } from "stream";
2
- export declare function transform(_opts: any): Promise<Transform>;
2
+ export declare function transform(opts: {
3
+ delimiter: string;
4
+ }): Promise<Transform>;
3
5
  //# sourceMappingURL=tsv.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tsv.d.ts","sourceRoot":"","sources":["../../src/input/tsv.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAA0B,MAAM,QAAQ,CAAC;AAK3D,wBAAsB,SAAS,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC,CAgD9D"}
1
+ {"version":3,"file":"tsv.d.ts","sourceRoot":"","sources":["../../src/input/tsv.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAA0B,MAAM,QAAQ,CAAC;AAK3D,wBAAsB,SAAS,CAAC,IAAI,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,SAAS,CAAC,CAoD/E"}
package/dist/input/tsv.js CHANGED
@@ -1,10 +1,13 @@
1
1
  import { Transform } from "stream";
2
2
  import log4js from 'log4js';
3
3
  const logger = log4js.getLogger();
4
- export async function transform(_opts) {
4
+ export async function transform(opts) {
5
5
  let recordNum = 0;
6
6
  let tail = "";
7
7
  let keys;
8
+ let delimiter = opts['delimiter'] ?
9
+ opts['delimiter'].replace("\\t", "\t") : "\t";
10
+ logger.info(JSON.stringify(delimiter));
8
11
  return new Transform({
9
12
  objectMode: true,
10
13
  transform(chunk, _encoding, callback) {
@@ -14,7 +17,7 @@ export async function transform(_opts) {
14
17
  recordNum++;
15
18
  if (!line.trim())
16
19
  continue;
17
- const fields = line.split("\t");
20
+ const fields = line.split(delimiter);
18
21
  if (!keys) {
19
22
  keys = fields;
20
23
  continue;
@@ -1 +1 @@
1
- {"version":3,"file":"tsv.js","sourceRoot":"","sources":["../../src/input/tsv.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAA0B,MAAM,QAAQ,CAAC;AAC3D,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;AAElC,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,KAAU;IACtC,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,IAAI,IAAe,CAAC;IAEpB,OAAO,IAAI,SAAS,CAAC;QACjB,UAAU,EAAE,IAAI;QAChB,SAAS,CAAC,KAAU,EAAE,SAAiB,EAAG,QAA2B;YACjE,MAAM,KAAK,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACvD,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;YAEzB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACvB,SAAS,EAAE,CAAC;gBAEZ,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;oBAAE,SAAS;gBAE3B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAEhC,IAAI,CAAC,IAAI,EAAE,CAAC;oBACR,IAAI,GAAG,MAAM,CAAC;oBACd,SAAS;gBACb,CAAC;gBAED,IAAI,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;oBAC/B,MAAM,CAAC,KAAK,CAAC,iBAAiB,SAAS,sBAAsB,CAAC,CAAC;oBAC/D,SAAS;gBACb,CAAC;gBAED,IAAI,IAAI,GAAS,EAAE,CAAC;gBAEpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAG,CAAC,EAAE,EAAE,CAAC;oBACrC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBAC/B,CAAC;gBAED,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpB,CAAC;YAED,QAAQ,EAAE,CAAC;QACf,CAAC;QACD,KAAK,CAAC,QAAQ;YACV,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;gBACd,IAAI,CAAC;oBACD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;gBAChC,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC,CAAC,gCAAgC,CAAC,CAAC;YACpD,CAAC;YACD,QAAQ,EAAE,CAAC;QACf,CAAC;KACJ,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"tsv.js","sourceRoot":"","sources":["../../src/input/tsv.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAA0B,MAAM,QAAQ,CAAC;AAC3D,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;AAElC,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAA2B;IACvD,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,IAAI,IAAe,CAAC;IACpB,IAAI,SAAS,GAAY,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;QACxC,IAAI,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,KAAK,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAE7C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;IAE3C,OAAO,IAAI,SAAS,CAAC;QACjB,UAAU,EAAE,IAAI;QAChB,SAAS,CAAC,KAAU,EAAE,SAAiB,EAAG,QAA2B;YACjE,MAAM,KAAK,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACvD,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;YAEzB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACvB,SAAS,EAAE,CAAC;gBAEZ,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;oBAAE,SAAS;gBAE3B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;gBAErC,IAAI,CAAC,IAAI,EAAE,CAAC;oBACR,IAAI,GAAG,MAAM,CAAC;oBACd,SAAS;gBACb,CAAC;gBAED,IAAI,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;oBAC/B,MAAM,CAAC,KAAK,CAAC,iBAAiB,SAAS,sBAAsB,CAAC,CAAC;oBAC/D,SAAS;gBACb,CAAC;gBAED,IAAI,IAAI,GAAS,EAAE,CAAC;gBAEpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAG,CAAC,EAAE,EAAE,CAAC;oBACrC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBAC/B,CAAC;gBAED,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpB,CAAC;YAED,QAAQ,EAAE,CAAC;QACf,CAAC;QACD,KAAK,CAAC,QAAQ;YACV,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;gBACd,IAAI,CAAC;oBACD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;gBAChC,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC,CAAC,gCAAgC,CAAC,CAAC;YACpD,CAAC;YACD,QAAQ,EAAE,CAAC;QACf,CAAC;KACJ,CAAC,CAAC;AACP,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "marcattacks",
3
- "version": "2.2.12",
3
+ "version": "2.2.14",
4
4
  "description": "A powerful streaming MARC21 to RDF converter with JSONata transformation and S3 support.",
5
5
  "keywords": [
6
6
  "marc21",
package/dist/demo.d.ts DELETED
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=demo.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"demo.d.ts","sourceRoot":"","sources":["../src/demo.ts"],"names":[],"mappings":""}
package/dist/demo.js DELETED
@@ -1,8 +0,0 @@
1
- import { createInputReadStream, createInputTransformStage } from "./attacker.js";
2
- main();
3
- async function main() {
4
- const reader1 = await createInputReadStream("./data/sample.xml");
5
- const reader2 = await createInputReadStream("./data/sample.xml");
6
- const parser = await createInputTransformStage({ from: 'xml' }, "./data/sample.xml", reader1);
7
- }
8
- //# sourceMappingURL=demo.js.map
package/dist/demo.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"demo.js","sourceRoot":"","sources":["../src/demo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAEjF,IAAI,EAAE,CAAC;AAEP,KAAK,UAAU,IAAI;IACf,MAAM,OAAO,GAAG,MAAM,qBAAqB,CAAC,mBAAmB,CAAC,CAAC;IACjE,MAAM,OAAO,GAAG,MAAM,qBAAqB,CAAC,mBAAmB,CAAC,CAAC;IACjE,MAAM,MAAM,GAAI,MAAM,yBAAyB,CAAC,EAAC,IAAI,EAAE,KAAK,EAAC,EAAC,mBAAmB,EAAC,OAAO,CAAC,CAAC;AAE/F,CAAC"}
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env node
2
- export {};
3
- //# sourceMappingURL=rdfparse.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rdfparse.d.ts","sourceRoot":"","sources":["../src/rdfparse.ts"],"names":[],"mappings":""}
package/dist/rdfparse.js DELETED
@@ -1,130 +0,0 @@
1
- #!/usr/bin/env node
2
- import log4js from 'log4js';
3
- import { program } from 'commander';
4
- import fs from 'fs';
5
- import path from 'node:path';
6
- import dotenv from 'dotenv';
7
- import { createRequire } from 'node:module';
8
- import { pathToFileURL } from "node:url";
9
- import { createDecompressionStage, createInputReadStream, createUntarStage } from './attacker.js';
10
- const require = createRequire(import.meta.url);
11
- const pkg = require('../package.json');
12
- program.version(pkg.version)
13
- .argument('<file>')
14
- .option('-c,--config <config>', 'config .env', path.join(process.cwd(), '.env'))
15
- .option('--key <keyfile>', 'private key file')
16
- .option('--key-env <env>', 'private key environment variable')
17
- .option('--log <format>', 'logging format')
18
- .option('--info', 'output debugging messages')
19
- .option('--debug', 'output more debugging messages')
20
- .option('--trace', 'output much more debugging messages');
21
- program.parse(process.argv);
22
- const opts = program.opts();
23
- if (opts.log) {
24
- let output = 'stderr';
25
- let type = 0;
26
- if (opts.log.indexOf('stdout') >= 0) {
27
- output = 'stdout';
28
- }
29
- if (opts.log.indexOf('json') >= 0) {
30
- type = 1;
31
- }
32
- if (type) {
33
- configureJSONLogger(output);
34
- }
35
- else {
36
- configureDefaultLogger(output);
37
- }
38
- }
39
- else {
40
- configureDefaultLogger('stderr');
41
- }
42
- const logger = log4js.getLogger();
43
- if (opts.info) {
44
- logger.level = "info";
45
- }
46
- if (opts.debug) {
47
- logger.level = "debug";
48
- }
49
- if (opts.trace) {
50
- logger.level = "trace";
51
- }
52
- if (opts.config) {
53
- dotenv.config({ path: opts.config, quiet: true });
54
- }
55
- main();
56
- function configureDefaultLogger(output) {
57
- log4js.configure({
58
- appenders: {
59
- err: {
60
- type: output,
61
- layout: {
62
- type: "pattern",
63
- pattern: "%[%d %p %f{2} %m%]"
64
- }
65
- }
66
- },
67
- categories: {
68
- default: { appenders: ["err"], level: "off", enableCallStack: true }
69
- }
70
- });
71
- }
72
- function configureJSONLogger(output) {
73
- log4js.addLayout('json-pattern', (config) => {
74
- return (logEvent) => {
75
- return JSON.stringify({
76
- timestamp: logEvent.startTime, // Similar to %d
77
- level: logEvent.level.levelStr, // Similar to %p
78
- category: logEvent.categoryName, // Similar to %c
79
- message: logEvent.data.join(' '), // Similar to %m
80
- context: logEvent.context, // Similar to %X (tokens)
81
- pid: logEvent.pid // Similar to %z
82
- });
83
- };
84
- });
85
- log4js.configure({
86
- appenders: {
87
- err: {
88
- type: output,
89
- layout: {
90
- type: "json-pattern"
91
- }
92
- }
93
- },
94
- categories: {
95
- default: { appenders: ["err"], level: "off", enableCallStack: true }
96
- }
97
- });
98
- }
99
- async function main() {
100
- try {
101
- const url = program.args[0];
102
- if (!url) {
103
- console.error(`need an input file`);
104
- process.exit(2);
105
- }
106
- let inputFile;
107
- if (fs.existsSync(url)) {
108
- const filePath = path.resolve(process.cwd(), url);
109
- inputFile = pathToFileURL(filePath);
110
- }
111
- else {
112
- inputFile = new URL(url);
113
- }
114
- const { stream: readableStream, resolvedUrl: myFile } = await createInputReadStream(inputFile, opts);
115
- const stages = [readableStream];
116
- const decompressionStage = await createDecompressionStage(inputFile, opts);
117
- if (decompressionStage)
118
- stages.push(decompressionStage);
119
- const untarStage = await createUntarStage(inputFile, opts);
120
- if (untarStage)
121
- stages.push(untarStage);
122
- }
123
- catch (e) {
124
- logger.debug(e);
125
- logger.error("process crashed");
126
- process.exitCode = 4;
127
- process.exit();
128
- }
129
- }
130
- //# sourceMappingURL=rdfparse.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rdfparse.js","sourceRoot":"","sources":["../src/rdfparse.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import { Transform } from "stream";
2
- export declare function transform(_param: any): Promise<Transform>;
3
- //# sourceMappingURL=marcinrdf.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"marcinrdf.d.ts","sourceRoot":"","sources":["../../src/transform/marcinrdf.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAKnC,wBAAsB,SAAS,CAAC,MAAM,EAAE,GAAG,GAAI,OAAO,CAAC,SAAS,CAAC,CAQhE"}
@@ -1,36 +0,0 @@
1
- import { Transform } from "stream";
2
- import { isRecord } from "../types/quad.js";
3
- import { parseString } from "../util/rdf_parse.js";
4
- import { marcmap } from "../marcmap.js";
5
- export async function transform(_param) {
6
- return new Transform({
7
- objectMode: true,
8
- async transform(data, _encoding, callback) {
9
- const rdfData = await makeRdfData(data);
10
- callback(null, rdfData);
11
- }
12
- });
13
- }
14
- async function makeRdfData(data) {
15
- // First take a guess if we already have a Record
16
- // Stupid guess but sufficient for now
17
- if (isRecord(data)) {
18
- return data;
19
- }
20
- const id = marcmap(data['record'], "001", {})[0];
21
- const clone = structuredClone(data);
22
- // Parse the input data as RDF
23
- clone['@context'] = {
24
- "@vocab": "http://example.org/ns#",
25
- "ex": "http://example.org/ns#",
26
- "record": {
27
- "@id": "ex:record",
28
- "@container": "@list"
29
- }
30
- };
31
- clone['@id'] = `http://example.org/record/${id}`;
32
- clone['@type'] = 'ex:Record';
33
- const rdfData = await parseString(JSON.stringify(clone), "data.jsonld");
34
- return rdfData;
35
- }
36
- //# sourceMappingURL=marcinrdf.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"marcinrdf.js","sourceRoot":"","sources":["../../src/transform/marcinrdf.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,EAAe,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,MAAW;IACvC,OAAO,IAAI,SAAS,CAAC;QACjB,UAAU,EAAE,IAAI;QAChB,KAAK,CAAC,SAAS,CAAC,IAAS,EAAE,SAAS,EAAE,QAAQ;YAC1C,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;YACxC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC5B,CAAC;KACJ,CAAC,CAAC;AACP,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,IAAS;IAChC,kDAAkD;IAClD,sCAAsC;IACtC,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACjB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAC,KAAK,EAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAE/C,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IAEpC,8BAA8B;IAC9B,KAAK,CAAC,UAAU,CAAC,GAAG;QAChB,QAAQ,EAAE,wBAAwB;QAClC,IAAI,EAAE,wBAAwB;QAC9B,QAAQ,EAAE;YACN,KAAK,EAAE,WAAW;YAClB,YAAY,EAAE,OAAO;SACxB;KACJ,CAAC;IAEF,KAAK,CAAC,KAAK,CAAC,GAAG,6BAA6B,EAAE,EAAE,CAAE;IAClD,KAAK,CAAC,OAAO,CAAC,GAAG,WAAW,CAAC;IAE7B,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC,CAAC;IAExE,OAAO,OAAO,CAAC;AACnB,CAAC"}
@@ -1,3 +0,0 @@
1
- import { Transform } from "stream";
2
- export declare function transform(param: any): Promise<Transform>;
3
- //# sourceMappingURL=notation3.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"notation3.d.ts","sourceRoot":"","sources":["../../src/transform/notation3.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAUnC,wBAAsB,SAAS,CAAC,KAAK,EAAE,GAAG,GAAI,OAAO,CAAC,SAAS,CAAC,CAiD/D"}
@@ -1,68 +0,0 @@
1
- import { Transform } from "stream";
2
- import { parseString, writeString } from "../util/rdf_parse.js";
3
- import { isRecord } from "../types/quad.js";
4
- import * as marc_n3_helpers from "../util/marc_n3_helpers.js";
5
- import fs from "fs";
6
- import log4js from 'log4js';
7
- import eyeling from 'eyeling';
8
- const logger = log4js.getLogger();
9
- export async function transform(param) {
10
- let n3 = null;
11
- if (param.fix && fs.existsSync(param.fix)) {
12
- n3 = fs.readFileSync(param.fix, { encoding: 'utf-8' });
13
- }
14
- else {
15
- logger.warn("no notation3 file provided or found, using empty rules");
16
- }
17
- logger.debug(n3);
18
- return new Transform({
19
- objectMode: true,
20
- async transform(data, _encoding, callback) {
21
- try {
22
- const rdfData = await makeRdfData(data);
23
- if (n3) {
24
- // Prepare the eyeling input: first write Turtle
25
- let rdfText = await writeString(rdfData);
26
- // Inject the n3 rules
27
- rdfText += "\n\n###RULES\n" + n3;
28
- // Inject helpers
29
- rdfText += "\n\n##HELPERS\n" + marc_n3_helpers.code;
30
- logger.debug(rdfText);
31
- // Reason
32
- const rdfOutput = eyeling.reason({ proofComments: false }, rdfText);
33
- // Turn it back into JSON
34
- logger.debug(rdfOutput);
35
- const newData = await parseString(rdfOutput, "data.n3");
36
- logger.debug(newData);
37
- callback(null, newData);
38
- }
39
- else {
40
- callback(null, rdfData);
41
- }
42
- }
43
- catch (err) {
44
- callback(err);
45
- }
46
- }
47
- });
48
- }
49
- async function makeRdfData(data) {
50
- // First take a guess if we already have a Record
51
- // Stupid guess but sufficient for now
52
- if (isRecord(data)) {
53
- return data;
54
- }
55
- const clone = structuredClone(data);
56
- // Parse the input data as RDF
57
- clone['@context'] = {
58
- "@vocab": "http://example.org/ns#",
59
- "ex": "http://example.org/ns#",
60
- "record": {
61
- "@id": "ex:record",
62
- "@container": "@list"
63
- }
64
- };
65
- const rdfData = await parseString(JSON.stringify(clone), "data.jsonld");
66
- return rdfData;
67
- }
68
- //# sourceMappingURL=notation3.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"notation3.js","sourceRoot":"","sources":["../../src/transform/notation3.ts"],"names":[],"mappings":"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"}