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 _fetchWithProxy = require('fetch-with-proxy');
|
20 |
|
21 | var _fetchWithProxy2 = _interopRequireDefault(_fetchWithProxy);
|
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, _fetchWithProxy2.default)(source, options).then(function (response) {
|
51 | if (!(0, _isStream2.default)(response.body)) {
|
52 | return done(new Error('Unexpected response'));
|
53 | }
|
54 | return 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 |
|
77 | function ISTEXSave(data, feed) {
|
78 | if (this.isLast()) {
|
79 | return feed.close();
|
80 | }
|
81 | var directory = this.getParam('directory', process.cwd());
|
82 | var typology = this.getParam('typology', 'fulltext');
|
83 | var format = this.getParam('format', 'pdf');
|
84 | var sid = this.getParam('sid', 'ezs-istex');
|
85 | var token = this.getParam('token');
|
86 | var headers = {};
|
87 | var location = {
|
88 | protocol: 'https:',
|
89 | host: 'api.istex.fr'
|
90 | };
|
91 | if (token) {
|
92 | headers.Authorization = 'Bearer ' + token;
|
93 | }
|
94 | if (!data.hits && !data.arkIstex) {
|
95 | throw new Error('[ISTEXFetch] or [ISTEXScroll] should be defined' + ' before this statement.');
|
96 | }
|
97 | if (!format && !typology) {
|
98 | throw new Error('typology= & format= must be defined as parameter.');
|
99 | }
|
100 |
|
101 | var identifiers = data.hits ? data.hits.map(function (hit) {
|
102 | return hit.arkIstex;
|
103 | }) : [data.arkIstex];
|
104 | var files = identifiers.map(function (arkIstex) {
|
105 | var _ark$parse = ark.parse(arkIstex),
|
106 | arkName = _ark$parse.name;
|
107 |
|
108 | var pathname = arkIstex + '/' + typology + '.' + format;
|
109 | var filename = arkName + '-' + typology + '.' + format;
|
110 | var urlObj = (0, _extends3.default)({}, location, {
|
111 | pathname: pathname,
|
112 | query: {
|
113 | sid: sid
|
114 | }
|
115 | });
|
116 | var cmdObj = {
|
117 | source: _url2.default.format(urlObj),
|
118 | target: _path2.default.resolve(directory, filename)
|
119 | };
|
120 | return cmdObj;
|
121 | });
|
122 | var o = {
|
123 | headers: headers,
|
124 | sid: sid
|
125 | };
|
126 | var q = (0, _async2.default)(worker(o), _os2.default.cpus().length);
|
127 | q.drain = function () {
|
128 | return feed.end();
|
129 | };
|
130 | files.forEach(function (file) {
|
131 | return q.push(file, function (filename) {
|
132 | return feed.write(filename);
|
133 | });
|
134 | });
|
135 | }
|
136 |
|
137 | exports.default = {
|
138 | ISTEXSave: ISTEXSave
|
139 | }; |
\ | No newline at end of file |