UNPKG

4.26 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6
7var _extends2 = require('babel-runtime/helpers/extends');
8
9var _extends3 = _interopRequireDefault(_extends2);
10
11var _url = require('url');
12
13var _url2 = _interopRequireDefault(_url);
14
15var _path = require('path');
16
17var _path2 = _interopRequireDefault(_path);
18
19var _fetchWithProxy = require('fetch-with-proxy');
20
21var _fetchWithProxy2 = _interopRequireDefault(_fetchWithProxy);
22
23var _os = require('os');
24
25var _os2 = _interopRequireDefault(_os);
26
27var _async = require('async.queue');
28
29var _async2 = _interopRequireDefault(_async);
30
31var _isStream = require('is-stream');
32
33var _isStream2 = _interopRequireDefault(_isStream);
34
35var _write = require('write');
36
37var _write2 = _interopRequireDefault(_write);
38
39var _inistArk = require('inist-ark');
40
41var _inistArk2 = _interopRequireDefault(_inistArk);
42
43function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
44
45var ark = new _inistArk2.default();
46var 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 * Take and Object with ISTEX `id` and save the document's file.
65 * Warning: to access fulltext, you have to give a `token` parameter.
66 * ISTEXFetch produces the stream you need to save the file.
67 *
68 * @name ISTEXSave
69 * @see ISTEXFetch
70 * @param {string} [directory=current working directory] path for the PDFs
71 * @param {string} [typology="fulltext"] typology of the document to save
72 * @param {string} [format="pdf"] format of the files to save
73 * @param {string} [sid="ezs-istex"] User-agent identifier
74 * @param {string} [token] authentication token (see [documentation](https://doc.istex.fr/api/access/fede.html#acc%C3%A8s-programmatique-via-un-token-didentification))
75 * @returns {Array}
76 */
77function 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
137exports.default = {
138 ISTEXSave: ISTEXSave
139};
\No newline at end of file