marcattacks 2.1.0 → 2.2.0

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 (72) hide show
  1. package/README.md +22 -10
  2. package/dist/attacker.d.ts +2 -0
  3. package/dist/attacker.d.ts.map +1 -0
  4. package/dist/attacker.js +164 -0
  5. package/dist/attacker.js.map +1 -0
  6. package/dist/filestream.d.ts +4 -0
  7. package/dist/filestream.d.ts.map +1 -0
  8. package/dist/filestream.js +32 -0
  9. package/dist/filestream.js.map +1 -0
  10. package/dist/index.js +11 -163
  11. package/dist/index.js.map +1 -1
  12. package/dist/input/tsv.d.ts +3 -0
  13. package/dist/input/tsv.d.ts.map +1 -0
  14. package/dist/input/tsv.js +45 -0
  15. package/dist/input/tsv.js.map +1 -0
  16. package/dist/output/alephseq.d.ts +1 -1
  17. package/dist/output/alephseq.d.ts.map +1 -1
  18. package/dist/output/alephseq.js +1 -1
  19. package/dist/output/alephseq.js.map +1 -1
  20. package/dist/output/json.d.ts +1 -1
  21. package/dist/output/json.d.ts.map +1 -1
  22. package/dist/output/json.js +1 -1
  23. package/dist/output/json.js.map +1 -1
  24. package/dist/output/jsonl.d.ts +1 -1
  25. package/dist/output/jsonl.d.ts.map +1 -1
  26. package/dist/output/jsonl.js +1 -1
  27. package/dist/output/jsonl.js.map +1 -1
  28. package/dist/output/parquet.d.ts +7 -0
  29. package/dist/output/parquet.d.ts.map +1 -0
  30. package/dist/output/parquet.js +15 -0
  31. package/dist/output/parquet.js.map +1 -0
  32. package/dist/output/rdf.d.ts +1 -1
  33. package/dist/output/rdf.d.ts.map +1 -1
  34. package/dist/output/rdf.js +1 -1
  35. package/dist/output/rdf.js.map +1 -1
  36. package/dist/output/tsv.d.ts +3 -0
  37. package/dist/output/tsv.d.ts.map +1 -0
  38. package/dist/output/tsv.js +37 -0
  39. package/dist/output/tsv.js.map +1 -0
  40. package/dist/output/xml.d.ts +1 -1
  41. package/dist/output/xml.d.ts.map +1 -1
  42. package/dist/output/xml.js +1 -1
  43. package/dist/output/xml.js.map +1 -1
  44. package/dist/s3stream.d.ts +3 -2
  45. package/dist/s3stream.d.ts.map +1 -1
  46. package/dist/s3stream.js +55 -3
  47. package/dist/s3stream.js.map +1 -1
  48. package/dist/sftpstream.d.ts +3 -3
  49. package/dist/sftpstream.d.ts.map +1 -1
  50. package/dist/sftpstream.js +48 -5
  51. package/dist/sftpstream.js.map +1 -1
  52. package/dist/transform/avram.d.ts +6 -0
  53. package/dist/transform/avram.d.ts.map +1 -0
  54. package/dist/transform/avram.js +37 -0
  55. package/dist/transform/avram.js.map +1 -0
  56. package/dist/transform/jsonata.d.ts +1 -1
  57. package/dist/transform/jsonata.d.ts.map +1 -1
  58. package/dist/transform/jsonata.js +9 -6
  59. package/dist/transform/jsonata.js.map +1 -1
  60. package/dist/transform/marc2rdf.d.ts +1 -1
  61. package/dist/transform/marc2rdf.d.ts.map +1 -1
  62. package/dist/transform/marc2rdf.js +4 -2
  63. package/dist/transform/marc2rdf.js.map +1 -1
  64. package/dist/transform/marcids.d.ts +6 -0
  65. package/dist/transform/marcids.d.ts.map +1 -0
  66. package/dist/transform/marcids.js +22 -0
  67. package/dist/transform/marcids.js.map +1 -0
  68. package/dist/transform/notation3.d.ts +1 -1
  69. package/dist/transform/notation3.d.ts.map +1 -1
  70. package/dist/transform/notation3.js +3 -3
  71. package/dist/transform/notation3.js.map +1 -1
  72. package/package.json +7 -5
package/README.md CHANGED
@@ -24,31 +24,37 @@ npm link
24
24
  Generate JSON:
25
25
 
26
26
  ```
27
- marcattacks --to json <file>
27
+ marcattacks --to json ./data/sample.xml
28
+ ```
29
+
30
+ We can also do this for tar (and) gzipped files
31
+
32
+ ```
33
+ marcattacks --to json ./data/sample.tar.gz
28
34
  ```
29
35
 
30
36
  Generate Aleph sequential:
31
37
 
32
38
  ```
33
- marcattacks --to alephseq <file>
39
+ marcattacks --to alephseq ./data/sample.xml
34
40
  ```
35
41
 
36
42
  Generate RDF:
37
43
 
38
44
  ```
39
- marcattacks --to rdf --map marc2rdf <file>
45
+ marcattacks --to rdf --map marc2rdf ./data/sample.xml
40
46
  ```
41
47
 
42
48
  Generate XML:
43
49
 
44
50
  ```
45
- marcattacks --to xml <file>
51
+ marcattacks --from alephseq --to xml ./data/one.alephseq
46
52
  ```
47
53
 
48
54
  Transform the MARC input using a [JSONata](https://docs.jsonata.org/overview.html) expression or file:
49
55
 
50
56
  ```
51
- marcattacks <file> --fix ./demo/demo.jsonata
57
+ marcattacks --param fix=./demo/demo.jsonata ./data/sample.xml
52
58
  ```
53
59
 
54
60
  ## Remote files
@@ -88,6 +94,7 @@ use `s3s://...` for using an SSL layer.
88
94
  - jsonl
89
95
  - marc (ISO2709)
90
96
  - rdf
97
+ - tsv
91
98
  - xml (MARCXML)
92
99
 
93
100
  ### Output (--to)
@@ -95,20 +102,24 @@ use `s3s://...` for using an SSL layer.
95
102
  - alephseq (Aleph sequential)
96
103
  - json
97
104
  - jsonl
105
+ - parquet
98
106
  - rdf
107
+ - tsv
99
108
  - xml (MARCXML)
100
109
 
101
110
  ### Transform (--map)
102
111
 
112
+ - avram : A mapper from MARC to [Avram](https://format.gbv.de/schema/avram/specification)
103
113
  - jsonata : _default_ A jsonata fixer
104
- - marc2rdf : A mapper from MARC to RDF
114
+ - marcids : A mapper from MARC to a list of record ids
115
+ - marc2rdf : A mapper from MARC to RDF (demonstrator)
105
116
  - notation3 : A [Notation3](https://w3c.github.io/N3/spec/) reasoner
106
117
 
107
118
  Or, provide your own transformers using JavaScript plugins. See: ./plugin/demo.js for an example.
108
119
 
109
- ### Fix (--fix)
120
+ ### Param (--param)
110
121
 
111
- Provide a fix file to the mapper. See examples:
122
+ Provide a params to the mapper, input and output. See examples:
112
123
 
113
124
  - `npm run demo:jsonld`
114
125
  - `npm run demo:n3`
@@ -120,9 +131,8 @@ Provide a fix file to the mapper. See examples:
120
131
  - _file path_
121
132
  - sftp://username@host:port/path
122
133
  - s3://accessKey:secretKey@host:port/bucket/key (or s3s://)
123
- - stdin://local
124
134
 
125
- ### Logging (--info,--debug,--log)
135
+ ### Logging (--info,--debug,--trace,--log)
126
136
 
127
137
  Logging messages can be provided with the `--info`, `--debug` and `--trace` options.
128
138
 
@@ -134,5 +144,7 @@ Default the logging format is a text format that is written to stderr. This logg
134
144
 
135
145
  ### Compression (--z,--tar)
136
146
 
147
+ Gzip and tar compression of input files can be automatically detected by file name extension. If no such extensions are provided the following flags can be set to force decompression:
148
+
137
149
  - `--z` : the input file is gzipped
138
150
  - `--tar` : the input file is tarred
@@ -0,0 +1,2 @@
1
+ export declare function attack(url: string, opts: any): Promise<void>;
2
+ //# sourceMappingURL=attacker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attacker.d.ts","sourceRoot":"","sources":["../src/attacker.ts"],"names":[],"mappings":"AAsBA,wBAAsB,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAI,OAAO,CAAC,IAAI,CAAC,CA6JnE"}
@@ -0,0 +1,164 @@
1
+ import log4js from 'log4js';
2
+ import { loadPlugin } from './plugin-loader.js';
3
+ import { sftpLatestFile, sftpReadStream, sftpWriteStream } from './sftpstream.js';
4
+ import { httpReadStream } from './httpstream.js';
5
+ import { Readable } from 'stream';
6
+ import { pathToFileURL } from "node:url";
7
+ import {} from 'node:stream';
8
+ import { SlowWritable } from './slow-writable.js';
9
+ import path from "node:path";
10
+ import fs from 'fs';
11
+ import { s3LatestObject, s3ReadStream, s3WriteStream } from './s3stream.js';
12
+ import { pipeline } from 'node:stream/promises';
13
+ import { createCountableSkippedStream, createUntarredStream, createUncompressedStream, createVerboseStream } from './util/stream_helpers.js';
14
+ import { fileLatestFile, fileReadStream } from './filestream.js';
15
+ const logger = log4js.getLogger();
16
+ export async function attack(url, opts) {
17
+ try {
18
+ let inputFile;
19
+ if (fs.existsSync(url)) {
20
+ const filePath = path.resolve(process.cwd(), url);
21
+ inputFile = pathToFileURL(filePath);
22
+ }
23
+ else {
24
+ inputFile = new URL(url);
25
+ }
26
+ logger.info(`using: ${getCleanURL(inputFile)}`);
27
+ let readableStream;
28
+ if (inputFile.protocol.startsWith("http")) {
29
+ readableStream = await httpReadStream(inputFile.toString());
30
+ }
31
+ else if (inputFile.protocol.startsWith("s3")) {
32
+ // optional resolve @latest
33
+ inputFile = await s3LatestObject(inputFile, opts);
34
+ readableStream = await s3ReadStream(inputFile, opts);
35
+ }
36
+ else if (inputFile.protocol === 'sftp:') {
37
+ // optional resolve @latest
38
+ inputFile = await sftpLatestFile(inputFile, opts);
39
+ readableStream = await sftpReadStream(inputFile, opts);
40
+ }
41
+ else if (inputFile.protocol === 'stdin:') {
42
+ readableStream = process.stdin;
43
+ }
44
+ else {
45
+ inputFile = await fileLatestFile(inputFile);
46
+ readableStream = await fileReadStream(inputFile);
47
+ }
48
+ const stages = [readableStream];
49
+ if (opts.z || inputFile.pathname.endsWith(".gz")) {
50
+ stages.push(createUncompressedStream());
51
+ }
52
+ if (opts.tar || inputFile.pathname.match(/.tar(.\w+$)?$/) || inputFile.pathname.endsWith(".tgz")) {
53
+ stages.push(await createUntarredStream());
54
+ }
55
+ if (opts.from) {
56
+ const mod = await loadPlugin(opts.from, 'input');
57
+ const transformer = await mod.transform(Object.assign({ path: inputFile }, opts.param));
58
+ transformer.on('error', (error) => {
59
+ if (error.code === 'ERR_STREAM_PREMATURE_CLOSE') {
60
+ stages[0]?.destroy();
61
+ }
62
+ else {
63
+ logger.error("input stream processing error: ", error.message);
64
+ stages[0]?.destroy();
65
+ process.exitCode = 2;
66
+ }
67
+ });
68
+ transformer.on('finish', () => logger.debug('writeable finished'));
69
+ transformer.on('end', () => logger.debug('readable ended'));
70
+ transformer.on('close', () => logger.debug('stream closed'));
71
+ stages.push(transformer);
72
+ }
73
+ else {
74
+ console.error(`Need --from`);
75
+ process.exit(1);
76
+ }
77
+ if (opts.count || opts.skip) {
78
+ stages.push(createCountableSkippedStream(opts.count, opts.skip));
79
+ }
80
+ stages.push(createVerboseStream());
81
+ if (opts.map) {
82
+ const mod = await loadPlugin(opts.map, 'transform');
83
+ const transformer = await mod.transform(opts.param);
84
+ stages.push(transformer);
85
+ }
86
+ let outStream;
87
+ if (isWritableStream(opts.out)) {
88
+ outStream = opts.out;
89
+ }
90
+ else if (opts.out === '@slow') {
91
+ outStream = new SlowWritable({ delayMs: 100 });
92
+ }
93
+ else if (opts.out === '@errors') {
94
+ outStream = new SlowWritable({ simulateErrorEveryN: 2 });
95
+ }
96
+ else if (opts.out) {
97
+ if (opts.out.startsWith("sftp")) {
98
+ const url = new URL(opts.out);
99
+ if (process.env.SFTP_USERNAME) {
100
+ url.username = process.env.SFTP_USERNAME;
101
+ }
102
+ if (process.env.SFTP_PASSWORD) {
103
+ url.password = process.env.SFTP_PASSWORD;
104
+ }
105
+ logger.info(`put ${getCleanURL(url)}`);
106
+ outStream = await sftpWriteStream(url, opts);
107
+ }
108
+ else if (opts.out.startsWith("s3")) {
109
+ const url = new URL(opts.out);
110
+ if (process.env.S3_ACCESS_KEY) {
111
+ url.username = process.env.S3_ACCESS_KEY;
112
+ }
113
+ if (process.env.S3_SECRET_KEY) {
114
+ url.password = process.env.S3_SECRET_KEY;
115
+ }
116
+ logger.info(`put ${getCleanURL(url)}`);
117
+ outStream = await s3WriteStream(url, {});
118
+ }
119
+ else {
120
+ outStream = fs.createWriteStream(opts.out, { encoding: 'utf-8' });
121
+ }
122
+ }
123
+ else {
124
+ outStream = process.stdout;
125
+ }
126
+ if (opts.to) {
127
+ const mod = await loadPlugin(opts.to, 'output');
128
+ stages.push(await mod.transform(opts.param));
129
+ stages.push(outStream);
130
+ try {
131
+ await pipeline(stages);
132
+ logger.info("pipeline finished cleanly");
133
+ }
134
+ catch (err) {
135
+ if (err.code === 'ERR_STREAM_PREMATURE_CLOSE') {
136
+ logger.info("Stream closed by limiter.");
137
+ }
138
+ else {
139
+ logger.error("pipeline error:", err);
140
+ process.exitCode = 3;
141
+ }
142
+ }
143
+ }
144
+ }
145
+ catch (e) {
146
+ logger.error(`process crashed with: ${e}`);
147
+ process.exitCode = 8;
148
+ }
149
+ }
150
+ function getCleanURL(url) {
151
+ const tempUrl = new URL(url.href); // Clone to avoid mutating original
152
+ tempUrl.username = '***';
153
+ tempUrl.password = '***';
154
+ return tempUrl;
155
+ }
156
+ function isWritableStream(obj) {
157
+ return (obj !== null &&
158
+ typeof obj === 'object' &&
159
+ typeof obj.write === 'function' &&
160
+ typeof obj.end === 'function' &&
161
+ // internal state check
162
+ obj.writable !== false);
163
+ }
164
+ //# sourceMappingURL=attacker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attacker.js","sourceRoot":"","sources":["../src/attacker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { Readable } from "stream";
2
+ export declare function fileReadStream(url: URL): Promise<Readable>;
3
+ export declare function fileLatestFile(url: URL): Promise<URL>;
4
+ //# sourceMappingURL=filestream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filestream.d.ts","sourceRoot":"","sources":["../src/filestream.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAKvC,wBAAsB,cAAc,CAAC,GAAG,EAAE,GAAG,GAAI,OAAO,CAAC,QAAQ,CAAC,CAEjE;AAED,wBAAsB,cAAc,CAAC,GAAG,EAAE,GAAG,GAAI,OAAO,CAAC,GAAG,CAAC,CA6B5D"}
@@ -0,0 +1,32 @@
1
+ import fs from "fs";
2
+ import log4js from 'log4js';
3
+ const logger = log4js.getLogger();
4
+ export async function fileReadStream(url) {
5
+ return fs.createReadStream(url);
6
+ }
7
+ export async function fileLatestFile(url) {
8
+ return new Promise((resolve) => {
9
+ logger.debug(url.href);
10
+ if (!url.href.includes("@latest:")) {
11
+ resolve(url);
12
+ return;
13
+ }
14
+ const directory = url.pathname.replaceAll(/@latest:.*/g, "");
15
+ const extension = url.pathname.replaceAll(/.*@latest:/g, "");
16
+ logger.debug(`directory: ${directory} ; extension: ${extension}`);
17
+ fs.readdir(directory, (err, files) => {
18
+ if (err) {
19
+ throw new Error("Error finding latest file:", err);
20
+ }
21
+ for (let i = 0; i < files.length; i++) {
22
+ if (files[i]?.toLowerCase().endsWith(extension)) {
23
+ logger.info(`resolved as file://${directory}${files[i]}`);
24
+ resolve(new URL("file://" + directory + files[i]));
25
+ return;
26
+ }
27
+ }
28
+ throw new Error("No latest file found!");
29
+ });
30
+ });
31
+ }
32
+ //# sourceMappingURL=filestream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filestream.js","sourceRoot":"","sources":["../src/filestream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;AAElC,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,GAAQ;IACzC,OAAO,EAAE,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,GAAQ;IACzC,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QACjC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACvB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YACjC,OAAO,CAAC,GAAG,CAAC,CAAC;YACb,OAAO;QACX,CAAC;QAED,MAAM,SAAS,GAAG,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,aAAa,EAAC,EAAE,CAAC,CAAC;QAC5D,MAAM,SAAS,GAAG,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,aAAa,EAAC,EAAE,CAAC,CAAC;QAE5D,MAAM,CAAC,KAAK,CAAC,cAAc,SAAS,iBAAiB,SAAS,EAAE,CAAC,CAAC;QAElE,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,GAAG,EAAC,KAAK,EAAE,EAAE;YACjC,IAAI,GAAG,EAAE,CAAC;gBACT,MAAM,IAAI,KAAK,CAAC,4BAA4B,EAAE,GAAG,CAAC,CAAC;YACpD,CAAC;YAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAG,CAAC,GAAG,KAAK,CAAC,MAAM,EAAG,CAAC,EAAE,EAAE,CAAC;gBACzC,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;oBAC9C,MAAM,CAAC,IAAI,CAAC,sBAAsB,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;oBAC1D,OAAO,CAAC,IAAI,GAAG,CAAC,SAAS,GAAG,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACnD,OAAO;gBACX,CAAC;YACF,CAAC;YAED,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC"}
package/dist/index.js CHANGED
@@ -1,18 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
  import log4js from 'log4js';
3
3
  import { program } from 'commander';
4
- import { loadPlugin } from './plugin-loader.js';
5
- import { sftpReadStream, sftpWriteStream, sftpLatestFile } from './sftpstream.js';
6
- import { httpReadStream } from './httpstream.js';
7
- import { Readable } from 'stream';
8
- import { pathToFileURL } from "node:url";
9
- import { SlowWritable } from './slow-writable.js';
10
4
  import path from "node:path";
11
- import fs from 'fs';
12
- import { s3ReaderStream, s3WriterStream } from './s3stream.js';
13
5
  import dotenv from 'dotenv';
14
- import { pipeline } from 'node:stream/promises';
15
- import { createCountableSkippedStream, createUntarredStream, createUncompressedStream, createVerboseStream } from './util/stream_helpers.js';
6
+ import { attack } from './attacker.js';
7
+ import { asyncWrapProviders } from 'node:async_hooks';
16
8
  program.version('0.1.0')
17
9
  .argument('<file>')
18
10
  .option('-c,--config <config>', 'config .env', path.join(process.cwd(), '.env'))
@@ -20,6 +12,7 @@ program.version('0.1.0')
20
12
  .option('-t,--to <output>', 'output type', 'json')
21
13
  .option('-m,--map <map>', 'data mapper', 'jsonata')
22
14
  .option('--fix <what>', 'jsonata')
15
+ .option('-p,--param <key=value>', 'repeated params', collect, {})
23
16
  .option('-o,--out <file>', 'output file')
24
17
  .option('--z', 'uncompress input')
25
18
  .option('--tar', 'untar input')
@@ -116,166 +109,21 @@ async function main() {
116
109
  console.error(`need an input file`);
117
110
  process.exit(2);
118
111
  }
119
- let inputFile;
120
- if (fs.existsSync(url)) {
121
- const filePath = path.resolve(process.cwd(), url);
122
- inputFile = pathToFileURL(filePath);
123
- }
124
- else {
125
- inputFile = new URL(url);
126
- }
127
- logger.info(`using: ${getCleanURL(inputFile)}`);
128
- let readableStream;
129
- if (inputFile.protocol.startsWith("http")) {
130
- readableStream = await httpReadStream(inputFile.toString());
131
- }
132
- else if (inputFile.protocol.startsWith("s3")) {
133
- readableStream = await s3ReaderStream(inputFile, {});
134
- }
135
- else if (inputFile.protocol === 'sftp:') {
136
- const config = makeSftpConfig(inputFile, opts);
137
- let remotePath;
138
- if (inputFile.pathname.match(/\/@latest:\w+$/)) {
139
- const remoteDir = inputFile.pathname.replace(/\/@latest.*/, "");
140
- const extension = inputFile.pathname.replace(/.*\/@latest:/, "");
141
- remotePath = await sftpLatestFile(config, remoteDir, extension);
142
- }
143
- else {
144
- remotePath = inputFile.pathname;
145
- }
146
- readableStream = await sftpReadStream(remotePath, config);
147
- }
148
- else if (inputFile.protocol === 'stdin:') {
149
- readableStream = process.stdin;
150
- }
151
- else {
152
- readableStream = fs.createReadStream(inputFile);
153
- }
154
- const stages = [readableStream];
155
- if (opts.z) {
156
- stages.push(createUncompressedStream());
157
- }
158
- if (opts.tar) {
159
- stages.push(await createUntarredStream());
160
- }
161
- if (opts.from) {
162
- const mod = await loadPlugin(opts.from, 'input');
163
- const transformer = await mod.transform({ path: inputFile });
164
- transformer.on('error', (error) => {
165
- if (error.code === 'ERR_STREAM_PREMATURE_CLOSE') {
166
- stages[0]?.destroy();
167
- }
168
- else {
169
- logger.error("input stream processing error: ", error.message);
170
- stages[0]?.destroy();
171
- process.exitCode = 2;
172
- }
173
- });
174
- transformer.on('finish', () => logger.debug('writeable finished'));
175
- transformer.on('end', () => logger.debug('readable ended'));
176
- transformer.on('close', () => logger.debug('stream closed'));
177
- stages.push(transformer);
178
- }
179
- else {
180
- console.error(`Need --from`);
181
- process.exit(1);
182
- }
183
- if (opts.count || opts.skip) {
184
- stages.push(createCountableSkippedStream(opts.count, opts.skip));
185
- }
186
- stages.push(createVerboseStream());
187
- if (opts.map) {
188
- const mod = await loadPlugin(opts.map, 'transform');
189
- const transformer = await mod.transform(opts.fix);
190
- stages.push(transformer);
191
- }
192
- let outStream;
193
- if (opts.out === '@slow') {
194
- outStream = new SlowWritable({ delayMs: 100 });
195
- }
196
- else if (opts.out === '@errors') {
197
- outStream = new SlowWritable({ simulateErrorEveryN: 2 });
198
- }
199
- else if (opts.out) {
200
- if (opts.out.startsWith("sftp")) {
201
- const url = new URL(opts.out);
202
- if (process.env.SFTP_USERNAME) {
203
- url.username = process.env.SFTP_USERNAME;
204
- }
205
- if (process.env.SFTP_PASSWORD) {
206
- url.password = process.env.SFTP_PASSWORD;
207
- }
208
- const config = makeSftpConfig(url, opts);
209
- logger.info(`put ${getCleanURL(url)}`);
210
- outStream = await sftpWriteStream(url.href, config);
211
- }
212
- else if (opts.out.startsWith("s3")) {
213
- const url = new URL(opts.out);
214
- if (process.env.S3_ACCESS_KEY) {
215
- url.username = process.env.S3_ACCESS_KEY;
216
- }
217
- if (process.env.S3_SECRET_KEY) {
218
- url.password = process.env.S3_SECRET_KEY;
219
- }
220
- logger.info(`put ${getCleanURL(url)}`);
221
- outStream = await s3WriterStream(url, {});
222
- }
223
- else {
224
- outStream = fs.createWriteStream(opts.out, { encoding: 'utf-8' });
225
- }
226
- }
227
- else {
228
- outStream = process.stdout;
229
- }
230
- if (opts.to) {
231
- const mod = await loadPlugin(opts.to, 'output');
232
- stages.push(await mod.transform());
233
- stages.push(outStream);
234
- try {
235
- await pipeline(stages);
236
- logger.info("pipeline finished cleanly");
237
- }
238
- catch (err) {
239
- if (err.code === 'ERR_STREAM_PREMATURE_CLOSE') {
240
- logger.info("Stream closed by limiter.");
241
- }
242
- else {
243
- logger.error("pipeline error:", err);
244
- process.exitCode = 3;
245
- }
246
- }
247
- }
112
+ await attack(url, opts);
248
113
  }
249
114
  catch (e) {
250
115
  logger.error(`process crashed with: ${e}`);
251
116
  process.exitCode = 8;
252
117
  }
253
118
  }
254
- function getCleanURL(url) {
255
- const tempUrl = new URL(url.href); // Clone to avoid mutating original
256
- tempUrl.username = '***';
257
- tempUrl.password = '***';
258
- return tempUrl;
259
- }
260
- function makeSftpConfig(inputFile, opts) {
261
- let privateKey = undefined;
262
- if (opts.key) {
263
- privateKey = fs.readFileSync(opts.key, { encoding: 'utf-8' });
264
- }
265
- else if (opts.keyEnv) {
266
- privateKey = process.env[opts.keyEnv];
119
+ function collect(value, previous) {
120
+ const keyval = value.split("=", 2);
121
+ if (keyval.length == 2 && keyval[0]) {
122
+ previous[keyval[0]] = keyval[1];
123
+ return previous;
267
124
  }
268
- let config = {
269
- host: inputFile.hostname,
270
- port: Number(inputFile.port) ?? 22,
271
- username: inputFile.username
272
- };
273
- if (inputFile.password) {
274
- config.password = inputFile.password;
275
- }
276
- if (privateKey) {
277
- config.privateKey = privateKey;
125
+ else {
126
+ return previous;
278
127
  }
279
- return config;
280
128
  }
281
129
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Transform } from "stream";
2
+ export declare function transform(_opts: any): Promise<Transform>;
3
+ //# sourceMappingURL=tsv.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,45 @@
1
+ import { Transform } from "stream";
2
+ import log4js from 'log4js';
3
+ const logger = log4js.getLogger();
4
+ export async function transform(_opts) {
5
+ let recordNum = 0;
6
+ let tail = "";
7
+ let keys;
8
+ return new Transform({
9
+ objectMode: true,
10
+ transform(chunk, _encoding, callback) {
11
+ const lines = (tail + chunk.toString()).split(/\r?\n/);
12
+ tail = lines.pop() || "";
13
+ for (const line of lines) {
14
+ recordNum++;
15
+ if (!line.trim())
16
+ continue;
17
+ const fields = line.split("\t");
18
+ if (!keys) {
19
+ keys = fields;
20
+ continue;
21
+ }
22
+ if (keys.length != fields.length) {
23
+ logger.error(`Error on line ${recordNum}, unexpected columns`);
24
+ continue;
25
+ }
26
+ let data = {};
27
+ for (let i = 0; i < keys.length; i++) {
28
+ data[keys[i]] = fields[i];
29
+ }
30
+ this.push(data);
31
+ }
32
+ callback();
33
+ },
34
+ flush(callback) {
35
+ if (tail.trim()) {
36
+ try {
37
+ this.push(JSON.parse(tail));
38
+ }
39
+ catch (e) { /* ignore trailing whitespace */ }
40
+ }
41
+ callback();
42
+ }
43
+ });
44
+ }
45
+ //# sourceMappingURL=tsv.js.map
@@ -0,0 +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,3 +1,3 @@
1
1
  import { Transform } from 'stream';
2
- export declare function transform(): Promise<Transform>;
2
+ export declare function transform(_param: any): Promise<Transform>;
3
3
  //# sourceMappingURL=alephseq.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"alephseq.d.ts","sourceRoot":"","sources":["../../src/output/alephseq.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAMnC,wBAAsB,SAAS,IAAK,OAAO,CAAC,SAAS,CAAC,CAwCrD"}
1
+ {"version":3,"file":"alephseq.d.ts","sourceRoot":"","sources":["../../src/output/alephseq.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAMnC,wBAAsB,SAAS,CAAC,MAAM,EAAC,GAAG,GAAI,OAAO,CAAC,SAAS,CAAC,CAwC/D"}
@@ -2,7 +2,7 @@ import { Transform } from 'stream';
2
2
  import { marcmap } from '../marcmap.js';
3
3
  import log4js from 'log4js';
4
4
  const logger = log4js.getLogger();
5
- export async function transform() {
5
+ export async function transform(_param) {
6
6
  return new Transform({
7
7
  objectMode: true,
8
8
  transform(data, _encoding, callback) {