UNPKG

4.22 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 _omniFetch = require('omni-fetch');
20
21var _omniFetch2 = _interopRequireDefault(_omniFetch);
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, _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 * 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 * @see ISTEXFetch
69 * @param {string} [directory=current working directory] path where to save the PDFs
70 * @param {string} [typology="fulltext"] typology of the document to save
71 * @param {string} [format="pdf"] format of the files to save
72 * @param {string} [sid="ezs-istex"] User-agent identifier
73 * @param {string} [token] authentication token (see [documentation](https://doc.istex.fr/api/access/fede.html#acc%C3%A8s-programmatique-via-un-token-didentification))
74 * @returns {Array}
75 */
76function 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
136exports.default = {
137 ISTEXSave: ISTEXSave
138};
\No newline at end of file