1 | 'use strict';
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 |
|
7 | var _extends2 = require('babel-runtime/helpers/extends');
|
8 |
|
9 | var _extends3 = _interopRequireDefault(_extends2);
|
10 |
|
11 | var _url = require('url');
|
12 |
|
13 | var _url2 = _interopRequireDefault(_url);
|
14 |
|
15 | var _path = require('path');
|
16 |
|
17 | var _path2 = _interopRequireDefault(_path);
|
18 |
|
19 | var _omniFetch = require('omni-fetch');
|
20 |
|
21 | var _omniFetch2 = _interopRequireDefault(_omniFetch);
|
22 |
|
23 | var _os = require('os');
|
24 |
|
25 | var _os2 = _interopRequireDefault(_os);
|
26 |
|
27 | var _async = require('async.queue');
|
28 |
|
29 | var _async2 = _interopRequireDefault(_async);
|
30 |
|
31 | var _isStream = require('is-stream');
|
32 |
|
33 | var _isStream2 = _interopRequireDefault(_isStream);
|
34 |
|
35 | var _write = require('write');
|
36 |
|
37 | var _write2 = _interopRequireDefault(_write);
|
38 |
|
39 | var _inistArk = require('inist-ark');
|
40 |
|
41 | var _inistArk2 = _interopRequireDefault(_inistArk);
|
42 |
|
43 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
44 |
|
45 | var ark = new _inistArk2.default();
|
46 | var worker = function worker(options) {
|
47 | return function (_ref, done) {
|
48 | var source = _ref.source,
|
49 | target = _ref.target;
|
50 | return (0, _omniFetch2.default)(source, options).then(function (response) {
|
51 | if (!(0, _isStream2.default)(response.body)) {
|
52 | return done(new Error('Unexpected response'));
|
53 | }
|
54 | response.body.pipe(_write2.default.stream(target)).on('end', function (err) {
|
55 | return done(err);
|
56 | }).on('close', function () {
|
57 | return done(target);
|
58 | });
|
59 | });
|
60 | };
|
61 | };
|
62 |
|
63 |
|
64 |
|
65 |
|
66 |
|
67 |
|
68 |
|
69 |
|
70 |
|
71 |
|
72 |
|
73 |
|
74 |
|
75 |
|
76 | function ISTEXSave(data, feed) {
|
77 | if (this.isLast()) {
|
78 | return feed.close();
|
79 | }
|
80 | var directory = this.getParam('directory', process.cwd());
|
81 | var typology = this.getParam('typology', 'fulltext');
|
82 | var format = this.getParam('format', 'pdf');
|
83 | var sid = this.getParam('sid', 'ezs-istex');
|
84 | var token = this.getParam('token');
|
85 | var headers = {};
|
86 | var location = {
|
87 | protocol: 'https:',
|
88 | host: 'api.istex.fr'
|
89 | };
|
90 | if (token) {
|
91 | headers.Authorization = 'Bearer ' + token;
|
92 | }
|
93 | if (!data.hits && !data.arkIstex) {
|
94 | throw new Error('[ISTEXFetch] or [ISTEXSearch] should be defined before this statement.');
|
95 | }
|
96 | if (!format && !typology) {
|
97 | throw new Error('typology= & format= must be defined as parameter.');
|
98 | }
|
99 |
|
100 | var identifiers = data.hits ? data.hits.map(function (hit) {
|
101 | return hit.arkIstex;
|
102 | }) : [data.arkIstex];
|
103 | var files = identifiers.map(function (arkIstex) {
|
104 | var _ark$parse = ark.parse(arkIstex),
|
105 | arkName = _ark$parse.name;
|
106 |
|
107 | var pathname = arkIstex + '/' + typology + '.' + format;
|
108 | var filename = arkName + '-' + typology + '.' + format;
|
109 | var urlObj = (0, _extends3.default)({}, location, {
|
110 | pathname: pathname,
|
111 | query: {
|
112 | sid: sid
|
113 | }
|
114 | });
|
115 | var cmdObj = {
|
116 | source: _url2.default.format(urlObj),
|
117 | target: _path2.default.resolve(directory, filename)
|
118 | };
|
119 | return cmdObj;
|
120 | });
|
121 | var o = {
|
122 | headers: headers,
|
123 | sid: sid
|
124 | };
|
125 | var q = (0, _async2.default)(worker(o), _os2.default.cpus().length);
|
126 | q.drain = function () {
|
127 | return feed.end();
|
128 | };
|
129 | files.forEach(function (file) {
|
130 | return q.push(file, function (filename) {
|
131 | return feed.write(filename);
|
132 | });
|
133 | });
|
134 | }
|
135 |
|
136 | exports.default = {
|
137 | ISTEXSave: ISTEXSave
|
138 | }; |
\ | No newline at end of file |