@vizabi/reader-ddfcsv 4.2.0 → 5.0.1

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 (133) hide show
  1. package/.nyc_output/728a89bae7b247a7244820c1b6596c8b.json +1 -0
  2. package/.nyc_output/{b4e1a7f86ae858c85e0528842263588d.json → e875174b7b217be31b58605962f05304.json} +0 -0
  3. package/.travis.yml +0 -0
  4. package/CHANGELOG.md +0 -5
  5. package/LICENSE +0 -0
  6. package/README.md +0 -0
  7. package/coverage/base.css +0 -0
  8. package/coverage/block-navigation.js +0 -0
  9. package/coverage/index.html +39 -39
  10. package/coverage/prettify.css +0 -0
  11. package/coverage/prettify.js +0 -0
  12. package/coverage/sort-arrow-sprite.png +0 -0
  13. package/coverage/sorter.js +0 -0
  14. package/coverage/src/ddf-csv.ts.html +377 -377
  15. package/coverage/src/ddfcsv-error.ts.html +6 -6
  16. package/coverage/src/ddfcsv-reader.ts.html +52 -106
  17. package/coverage/src/file-readers/backend-file-reader.ts.html +15 -27
  18. package/coverage/src/file-readers/github-file-reader.ts.html +168 -0
  19. package/coverage/src/file-readers/index.html +26 -26
  20. package/coverage/src/index.html +29 -29
  21. package/coverage/src/index.ts.html +19 -4
  22. package/coverage/src/resource-selection-optimizer/in-clause-under-conjunction.ts.html +236 -236
  23. package/coverage/src/resource-selection-optimizer/index.html +20 -20
  24. package/coverage/src/resource-selection-optimizer/index.ts.html +3 -3
  25. package/coverage/src/test-cases/concepts.ts.html +1 -1
  26. package/coverage/src/test-cases/entities.ts.html +1 -1
  27. package/coverage/src/test-cases/index.html +1 -1
  28. package/deploy.js +0 -0
  29. package/dist/reader-ddfcsv-polyfill.js +1 -1
  30. package/dist/reader-ddfcsv-polyfill.js.map +1 -1
  31. package/dist/reader-ddfcsv.js +1 -1
  32. package/dist/reader-ddfcsv.js.map +1 -1
  33. package/icon.png +0 -0
  34. package/lib/src/ddf-csv.d.ts +0 -0
  35. package/lib/src/ddf-csv.js +0 -0
  36. package/lib/src/ddf-csv.js.map +0 -0
  37. package/lib/src/ddfcsv-error.d.ts +0 -0
  38. package/lib/src/ddfcsv-error.js +0 -0
  39. package/lib/src/ddfcsv-error.js.map +0 -0
  40. package/lib/src/ddfcsv-reader.d.ts +0 -0
  41. package/lib/src/ddfcsv-reader.js +1 -1
  42. package/lib/src/ddfcsv-reader.js.map +0 -0
  43. package/lib/src/file-readers/backend-file-reader.d.ts +0 -0
  44. package/lib/src/file-readers/backend-file-reader.js +0 -0
  45. package/lib/src/file-readers/backend-file-reader.js.map +0 -0
  46. package/lib/src/file-readers/github-path-adapter.d.ts +0 -0
  47. package/lib/src/file-readers/github-path-adapter.js +0 -0
  48. package/lib/src/file-readers/github-path-adapter.js.map +0 -0
  49. package/lib/src/index.d.ts +0 -0
  50. package/lib/src/index.js +0 -0
  51. package/lib/src/index.js.map +0 -0
  52. package/lib/src/interfaces.d.ts +0 -0
  53. package/lib/src/interfaces.js +0 -0
  54. package/lib/src/interfaces.js.map +0 -0
  55. package/lib/src/resource-selection-optimizer/in-clause-under-conjunction.d.ts +0 -0
  56. package/lib/src/resource-selection-optimizer/in-clause-under-conjunction.js +0 -0
  57. package/lib/src/resource-selection-optimizer/in-clause-under-conjunction.js.map +0 -0
  58. package/lib/src/resource-selection-optimizer/index.d.ts +0 -0
  59. package/lib/src/resource-selection-optimizer/index.js +0 -0
  60. package/lib/src/resource-selection-optimizer/index.js.map +0 -0
  61. package/lib-web/src/ddf-csv.d.ts +0 -0
  62. package/lib-web/src/ddf-csv.js +262 -376
  63. package/lib-web/src/ddf-csv.js.map +1 -1
  64. package/lib-web/src/ddfcsv-error.d.ts +0 -0
  65. package/lib-web/src/ddfcsv-error.js +8 -12
  66. package/lib-web/src/ddfcsv-error.js.map +1 -1
  67. package/lib-web/src/ddfcsv-reader.d.ts +0 -0
  68. package/lib-web/src/ddfcsv-reader.js +81 -123
  69. package/lib-web/src/ddfcsv-reader.js.map +1 -1
  70. package/lib-web/src/file-readers/frontend-file-reader.d.ts +0 -0
  71. package/lib-web/src/file-readers/frontend-file-reader.js +13 -16
  72. package/lib-web/src/file-readers/frontend-file-reader.js.map +1 -1
  73. package/lib-web/src/file-readers/github-path-adapter.d.ts +0 -0
  74. package/lib-web/src/file-readers/github-path-adapter.js +5 -5
  75. package/lib-web/src/file-readers/github-path-adapter.js.map +1 -1
  76. package/lib-web/src/index-web.d.ts +0 -0
  77. package/lib-web/src/index-web.js +2 -2
  78. package/lib-web/src/index-web.js.map +1 -1
  79. package/lib-web/src/interfaces.d.ts +0 -0
  80. package/lib-web/src/interfaces.js +0 -0
  81. package/lib-web/src/interfaces.js.map +0 -0
  82. package/lib-web/src/resource-selection-optimizer/in-clause-under-conjunction.d.ts +0 -0
  83. package/lib-web/src/resource-selection-optimizer/in-clause-under-conjunction.js +169 -348
  84. package/lib-web/src/resource-selection-optimizer/in-clause-under-conjunction.js.map +1 -1
  85. package/lib-web/src/resource-selection-optimizer/index.d.ts +0 -0
  86. package/lib-web/src/resource-selection-optimizer/index.js +4 -4
  87. package/lib-web/src/resource-selection-optimizer/index.js.map +1 -1
  88. package/package.json +2 -1
  89. package/scripts/set-own-version.js +0 -0
  90. package/src/ddf-csv.ts +0 -0
  91. package/src/ddfcsv-error.ts +0 -0
  92. package/src/ddfcsv-reader.ts +0 -0
  93. package/src/file-readers/backend-file-reader.ts +0 -0
  94. package/src/file-readers/frontend-file-reader.ts +0 -0
  95. package/src/file-readers/github-path-adapter.ts +0 -0
  96. package/src/index-web.ts +0 -0
  97. package/src/index.ts +0 -0
  98. package/src/interfaces.ts +0 -0
  99. package/src/resource-selection-optimizer/in-clause-under-conjunction.ts +0 -0
  100. package/src/resource-selection-optimizer/index.ts +0 -0
  101. package/src/test-cases/concepts.ts +0 -0
  102. package/src/test-cases/entities.ts +0 -0
  103. package/test/assets-fixtures/world-50m.json +0 -0
  104. package/test/assets.spec.ts +0 -0
  105. package/test/common.ts +0 -0
  106. package/test/definition/concepts-definition.spec.ts +0 -0
  107. package/test/definition/datapoints-definition.spec.ts +0 -0
  108. package/test/definition/entities-definition.spec.ts +0 -0
  109. package/test/definition/schema-definition.spec.ts +0 -0
  110. package/test/diagnostics.spec.ts +0 -0
  111. package/test/features-service.spec.ts +0 -0
  112. package/test/high-load.spec.ts +0 -0
  113. package/test/main.spec.ts +0 -0
  114. package/test/mocha.opts +0 -0
  115. package/test/multi-instances.spec.ts +0 -0
  116. package/test/result-fixtures/datapoints-assets.json +0 -0
  117. package/test/result-fixtures/in-clause-under-conjunction-1.json +0 -0
  118. package/test/result-fixtures/in-clause-under-conjunction-2.json +0 -0
  119. package/test/result-fixtures/multi-instances/concepts-sg.json +0 -0
  120. package/test/result-fixtures/multi-instances/concepts-soderstornsmodellen.json +0 -0
  121. package/test/result-fixtures/multi-instances/datapoints-sg.json +0 -0
  122. package/test/result-fixtures/multi-instances/datapoints-soderstornsmodellen.json +0 -0
  123. package/test/result-fixtures/multi-instances/entities-sg.json +0 -0
  124. package/test/result-fixtures/multi-instances/entities-soderstornsmodellen.json +0 -0
  125. package/test/result-fixtures/multi-instances/schema-sg.json +0 -0
  126. package/test/result-fixtures/multi-instances/schema-soderstornsmodellen.json +0 -0
  127. package/test/schema.spec.ts +0 -0
  128. package/test/tslint.json +0 -0
  129. package/tsconfig-web.json +1 -1
  130. package/tsconfig.json +0 -0
  131. package/tslint.json +0 -0
  132. package/.nyc_output/795caf0b3acca8aacbd9d932d086ab81.json +0 -1
  133. package/coverage/src/file-readers/github-path-adapter.ts.html +0 -228
@@ -1,48 +1,47 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ddfCsvReader = void 0;
4
- var tslib_1 = require("tslib");
5
- var includes = require("lodash.includes");
6
- var cloneDeep = require("lodash.clonedeep");
7
- var isEmpty = require("lodash.isempty");
8
- var stripBom = require("strip-bom");
9
- var resource_selection_optimizer_1 = require("./resource-selection-optimizer");
10
- var ddfcsv_error_1 = require("./ddfcsv-error");
11
- var ddf_query_validator_1 = require("ddf-query-validator");
12
- var Papa = require("papaparse");
13
- var d3_time_format_1 = require("d3-time-format");
14
- var isValidNumeric = function (val) { return typeof val !== 'number' && !val ? false : true; };
4
+ const includes = require("lodash.includes");
5
+ const cloneDeep = require("lodash.clonedeep");
6
+ const isEmpty = require("lodash.isempty");
7
+ const stripBom = require("strip-bom");
8
+ const resource_selection_optimizer_1 = require("./resource-selection-optimizer");
9
+ const ddfcsv_error_1 = require("./ddfcsv-error");
10
+ const ddf_query_validator_1 = require("ddf-query-validator");
11
+ const Papa = require("papaparse");
12
+ const d3_time_format_1 = require("d3-time-format");
13
+ const isValidNumeric = val => typeof val !== 'number' && !val ? false : true;
15
14
  function ddfCsvReader(logger) {
16
- var internalConcepts = [
15
+ const internalConcepts = [
17
16
  { concept: 'concept', concept_type: 'string', domain: null },
18
17
  { concept: 'concept_type', concept_type: 'string', domain: null }
19
18
  ];
20
- var operators = new Map([
21
- ['$and', function (row, predicates) { return predicates.every(function (p) { return applyFilterRow(row, p); }); }],
22
- ['$or', function (row, predicates) { return predicates.some(function (p) { return applyFilterRow(row, p); }); }],
23
- ['$not', function (row, predicate) { return !applyFilterRow(row, predicate); }],
24
- ['$nor', function (row, predicates) { return !predicates.some(function (p) { return applyFilterRow(row, p); }); }],
25
- ['$eq', function (rowValue, filterValue) { return rowValue == filterValue; }],
26
- ['$ne', function (rowValue, filterValue) { return rowValue != filterValue; }],
27
- ['$gt', function (rowValue, filterValue) { return isValidNumeric(rowValue) && rowValue > filterValue; }],
28
- ['$gte', function (rowValue, filterValue) { return isValidNumeric(rowValue) && rowValue >= filterValue; }],
29
- ['$lt', function (rowValue, filterValue) { return isValidNumeric(rowValue) && rowValue < filterValue; }],
30
- ['$lte', function (rowValue, filterValue) { return isValidNumeric(rowValue) && rowValue <= filterValue; }],
31
- ['$in', function (rowValue, filterValue) { return filterValue.has(rowValue); }],
32
- ['$nin', function (rowValue, filterValue) { return !filterValue.has(rowValue); }],
19
+ const operators = new Map([
20
+ ['$and', (row, predicates) => predicates.every(p => applyFilterRow(row, p))],
21
+ ['$or', (row, predicates) => predicates.some(p => applyFilterRow(row, p))],
22
+ ['$not', (row, predicate) => !applyFilterRow(row, predicate)],
23
+ ['$nor', (row, predicates) => !predicates.some(p => applyFilterRow(row, p))],
24
+ ['$eq', (rowValue, filterValue) => rowValue == filterValue],
25
+ ['$ne', (rowValue, filterValue) => rowValue != filterValue],
26
+ ['$gt', (rowValue, filterValue) => isValidNumeric(rowValue) && rowValue > filterValue],
27
+ ['$gte', (rowValue, filterValue) => isValidNumeric(rowValue) && rowValue >= filterValue],
28
+ ['$lt', (rowValue, filterValue) => isValidNumeric(rowValue) && rowValue < filterValue],
29
+ ['$lte', (rowValue, filterValue) => isValidNumeric(rowValue) && rowValue <= filterValue],
30
+ ['$in', (rowValue, filterValue) => filterValue.has(rowValue)],
31
+ ['$nin', (rowValue, filterValue) => !filterValue.has(rowValue)],
33
32
  ]);
34
- var keyValueLookup = new Map();
35
- var resourcesLookup = new Map();
36
- var optimalFilesSet = [];
37
- var datapackage;
33
+ const keyValueLookup = new Map();
34
+ const resourcesLookup = new Map();
35
+ let optimalFilesSet = [];
36
+ let datapackage;
38
37
  function loadDataPackage(baseOptions) {
39
- var datapackagePath = (0, ddf_query_validator_1.getFilePath)(baseOptions.basePath);
40
- var _a = baseOptions.diagnostic.prepareDiagnosticFor('loadDataPackage'), debug = _a.debug, error = _a.error;
41
- return new Promise(function (resolve, reject) {
38
+ const datapackagePath = (0, ddf_query_validator_1.getFilePath)(baseOptions.basePath);
39
+ const { debug, error } = baseOptions.diagnostic.prepareDiagnosticFor('loadDataPackage');
40
+ return new Promise((resolve, reject) => {
42
41
  if (datapackage) {
43
42
  return resolve(datapackage);
44
43
  }
45
- baseOptions.fileReader.readText(datapackagePath, function (err, data) {
44
+ baseOptions.fileReader.readText(datapackagePath, (err, data) => {
46
45
  if (err) {
47
46
  error('file reading', err);
48
47
  return reject(new ddfcsv_error_1.DdfCsvError(ddfcsv_error_1.FILE_READING_ERROR, err, datapackagePath));
@@ -62,83 +61,58 @@ function ddfCsvReader(logger) {
62
61
  });
63
62
  });
64
63
  }
65
- function loadConcepts(queryParam, options) {
66
- return tslib_1.__awaiter(this, void 0, void 0, function () {
67
- var error, conceptQuery, result, concepts, err_1;
68
- return tslib_1.__generator(this, function (_a) {
69
- switch (_a.label) {
70
- case 0:
71
- error = options.diagnostic.prepareDiagnosticFor('loadConcepts').error;
72
- setConceptsLookup(internalConcepts, options);
73
- conceptQuery = {
74
- select: { key: ['concept'], value: ['concept_type', 'domain'] },
75
- from: 'concepts'
76
- };
77
- _a.label = 1;
78
- case 1:
79
- _a.trys.push([1, 4, , 5]);
80
- return [4, queryData(conceptQuery, options)];
81
- case 2:
82
- concepts = _a.sent();
83
- buildConceptsLookup(concepts, options);
84
- return [4, reparseConcepts(options)];
85
- case 3:
86
- result = _a.sent();
87
- return [3, 5];
88
- case 4:
89
- err_1 = _a.sent();
90
- error('concepts processing', err_1);
91
- throw err_1;
92
- case 5: return [2, result];
93
- }
94
- });
95
- });
64
+ async function loadConcepts(queryParam, options) {
65
+ const { error } = options.diagnostic.prepareDiagnosticFor('loadConcepts');
66
+ setConceptsLookup(internalConcepts, options);
67
+ const conceptQuery = {
68
+ select: { key: ['concept'], value: ['concept_type', 'domain'] },
69
+ from: 'concepts'
70
+ };
71
+ let result;
72
+ try {
73
+ const concepts = await queryData(conceptQuery, options);
74
+ buildConceptsLookup(concepts, options);
75
+ result = await reparseConcepts(options);
76
+ }
77
+ catch (err) {
78
+ error('concepts processing', err);
79
+ throw err;
80
+ }
81
+ return result;
96
82
  }
97
83
  function buildConceptsLookup(concepts, options) {
98
- var entitySetMembershipConcepts = concepts
99
- .filter(function (concept) { return concept.concept_type === 'entity_set'; })
100
- .map(function (concept) { return ({
84
+ const entitySetMembershipConcepts = concepts
85
+ .filter(concept => concept.concept_type === 'entity_set')
86
+ .map(concept => ({
101
87
  concept: 'is--' + concept.concept,
102
88
  concept_type: 'boolean',
103
89
  domain: null
104
- }); });
90
+ }));
105
91
  concepts = concepts
106
92
  .concat(entitySetMembershipConcepts)
107
93
  .concat(internalConcepts);
108
94
  setConceptsLookup(concepts, options);
109
95
  }
110
- function reparseConcepts(_a) {
111
- var conceptsLookup = _a.conceptsLookup;
112
- var parsingFunctions = new Map([
113
- ['boolean', function (str) { return str === 'true' || str === 'TRUE'; }],
114
- ['measure', function (str) { return parseFloat(str); }]
96
+ function reparseConcepts({ conceptsLookup }) {
97
+ const parsingFunctions = new Map([
98
+ ['boolean', (str) => str === 'true' || str === 'TRUE'],
99
+ ['measure', (str) => parseFloat(str)]
115
100
  ]);
116
- var resources = getResources(['concept']);
117
- var resourceUpdates = tslib_1.__spreadArray([], tslib_1.__read(resources), false).map(function (resource) {
118
- return resource.data.then(function (response) {
119
- var resourceConcepts = Object.keys(response.data[0]);
120
- var parsingConcepts = new Map();
121
- resourceConcepts.forEach(function (concept) {
122
- var type = conceptsLookup.get(concept).concept_type;
123
- var fn = parsingFunctions.get(type);
101
+ const resources = getResources(['concept']);
102
+ const resourceUpdates = [...resources].map(resource => {
103
+ return resource.data.then(response => {
104
+ const resourceConcepts = Object.keys(response.data[0]);
105
+ const parsingConcepts = new Map();
106
+ resourceConcepts.forEach(concept => {
107
+ const type = conceptsLookup.get(concept).concept_type;
108
+ const fn = parsingFunctions.get(type);
124
109
  if (fn) {
125
110
  parsingConcepts.set(concept, fn);
126
111
  }
127
112
  });
128
- return response.data.forEach(function (row) {
129
- var e_1, _a;
130
- try {
131
- for (var parsingConcepts_1 = tslib_1.__values(parsingConcepts), parsingConcepts_1_1 = parsingConcepts_1.next(); !parsingConcepts_1_1.done; parsingConcepts_1_1 = parsingConcepts_1.next()) {
132
- var _b = tslib_1.__read(parsingConcepts_1_1.value, 2), concept = _b[0], parseFn = _b[1];
133
- row[concept] = parseFn(row[concept]);
134
- }
135
- }
136
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
137
- finally {
138
- try {
139
- if (parsingConcepts_1_1 && !parsingConcepts_1_1.done && (_a = parsingConcepts_1.return)) _a.call(parsingConcepts_1);
140
- }
141
- finally { if (e_1) throw e_1.error; }
113
+ return response.data.forEach(row => {
114
+ for (const [concept, parseFn] of parsingConcepts) {
115
+ row[concept] = parseFn(row[concept]);
142
116
  }
143
117
  });
144
118
  });
@@ -147,84 +121,60 @@ function ddfCsvReader(logger) {
147
121
  }
148
122
  function setConceptsLookup(concepts, options) {
149
123
  options.conceptsLookup.clear();
150
- concepts.forEach(function (row) { return options.conceptsLookup.set(row.concept, row); });
151
- }
152
- function query(queryParam, baseOptions) {
153
- return tslib_1.__awaiter(this, void 0, void 0, function () {
154
- var _a, warning, error, data, _b, appropriatePlugin, files, err_2;
155
- return tslib_1.__generator(this, function (_c) {
156
- switch (_c.label) {
157
- case 0:
158
- _a = baseOptions.diagnostic.prepareDiagnosticFor('query'), warning = _a.warning, error = _a.error;
159
- _c.label = 1;
160
- case 1:
161
- _c.trys.push([1, 12, , 13]);
162
- return [4, (0, ddf_query_validator_1.validateQueryStructure)(queryParam, baseOptions)];
163
- case 2:
164
- _c.sent();
165
- _b = baseOptions;
166
- return [4, loadDataPackage(baseOptions)];
167
- case 3:
168
- _b.datapackage = _c.sent();
169
- return [4, loadConcepts(queryParam, baseOptions)];
170
- case 4:
171
- _c.sent();
172
- return [4, (0, ddf_query_validator_1.validateQueryDefinitions)(queryParam, baseOptions)];
173
- case 5:
174
- _c.sent();
175
- if (!(0, ddf_query_validator_1.isSchemaQuery)(queryParam)) return [3, 7];
176
- return [4, querySchema(queryParam, baseOptions)];
177
- case 6:
178
- data = _c.sent();
179
- return [3, 11];
180
- case 7:
181
- appropriatePlugin = (0, resource_selection_optimizer_1.getAppropriatePlugin)(queryParam, baseOptions);
182
- if (!appropriatePlugin) return [3, 9];
183
- optimalFilesSet = [];
184
- return [4, appropriatePlugin.getRecommendedFilesSet()];
185
- case 8:
186
- files = _c.sent();
187
- optimalFilesSet = files;
188
- queryParam.optimalFilesSet = [].concat(files, queryParam.optimalFilesSet);
189
- warning('get custom optimal files list by a plugin', optimalFilesSet);
190
- _c.label = 9;
191
- case 9: return [4, queryData(queryParam, baseOptions)];
192
- case 10:
193
- data = _c.sent();
194
- _c.label = 11;
195
- case 11: return [3, 13];
196
- case 12:
197
- err_2 = _c.sent();
198
- error('general query error', err_2);
199
- throw err_2;
200
- case 13: return [2, data];
124
+ concepts.forEach(row => options.conceptsLookup.set(row.concept, row));
125
+ }
126
+ async function query(queryParam, baseOptions) {
127
+ const { warning, error } = baseOptions.diagnostic.prepareDiagnosticFor('query');
128
+ let data;
129
+ try {
130
+ await (0, ddf_query_validator_1.validateQueryStructure)(queryParam, baseOptions);
131
+ baseOptions.datapackage = await loadDataPackage(baseOptions);
132
+ await loadConcepts(queryParam, baseOptions);
133
+ await (0, ddf_query_validator_1.validateQueryDefinitions)(queryParam, baseOptions);
134
+ if ((0, ddf_query_validator_1.isSchemaQuery)(queryParam)) {
135
+ data = await querySchema(queryParam, baseOptions);
136
+ }
137
+ else {
138
+ const appropriatePlugin = (0, resource_selection_optimizer_1.getAppropriatePlugin)(queryParam, baseOptions);
139
+ if (appropriatePlugin) {
140
+ optimalFilesSet = [];
141
+ const files = await appropriatePlugin.getRecommendedFilesSet();
142
+ optimalFilesSet = files;
143
+ queryParam.optimalFilesSet = [].concat(files, queryParam.optimalFilesSet);
144
+ warning('get custom optimal files list by a plugin', optimalFilesSet);
201
145
  }
202
- });
203
- });
146
+ data = await queryData(queryParam, baseOptions);
147
+ }
148
+ }
149
+ catch (err) {
150
+ error('general query error', err);
151
+ throw err;
152
+ }
153
+ return data;
204
154
  }
205
155
  function queryData(queryParam, options) {
206
- var debug = options.diagnostic.prepareDiagnosticFor('queryData').debug;
207
- var _a = queryParam.select, _b = _a.key, key = _b === void 0 ? [] : _b, _c = _a.value, value = _c === void 0 ? [] : _c, _d = queryParam.from, from = _d === void 0 ? '' : _d, _e = queryParam.where, where = _e === void 0 ? {} : _e, _f = queryParam.join, join = _f === void 0 ? {} : _f, _g = queryParam.order_by, order_by = _g === void 0 ? [] : _g, language = queryParam.language;
208
- var select = { key: key, value: value };
156
+ const { debug } = options.diagnostic.prepareDiagnosticFor('queryData');
157
+ const { select: { key = [], value = [] }, from = '', where = {}, join = {}, order_by = [], language } = queryParam;
158
+ const select = { key, value };
209
159
  debug('start all data loading', queryParam);
210
- var projection = new Set(select.key.concat(select.value));
211
- var filterFields = getFilterFields(where).filter(function (field) { return from === 'entities' || !projection.has(field); });
212
- var resourcesPromise = loadResources(select.key, tslib_1.__spreadArray(tslib_1.__spreadArray([], tslib_1.__read(select.value), false), tslib_1.__read(filterFields), false), language, options, queryParam);
213
- var joinsPromise = getJoinFilters(join, queryParam, options);
214
- var entitySetFilterPromise = getEntitySetFilter(select.key, queryParam, options);
160
+ const projection = new Set(select.key.concat(select.value));
161
+ const filterFields = getFilterFields(where).filter(field => from === 'entities' || !projection.has(field));
162
+ const resourcesPromise = loadResources(select.key, [...select.value, ...filterFields], language, options, queryParam);
163
+ const joinsPromise = getJoinFilters(join, queryParam, options);
164
+ const entitySetFilterPromise = getEntitySetFilter(select.key, queryParam, options);
215
165
  return Promise.all([resourcesPromise, entitySetFilterPromise, joinsPromise])
216
- .then(function (_a) {
217
- var _b = tslib_1.__read(_a, 3), resourceResponses = _b[0], entitySetFilter = _b[1], joinFilters = _b[2];
166
+ .then(([resourceResponses, entitySetFilter, joinFilters]) => {
218
167
  debug('finish all data loading', queryParam);
219
- var whereResolved = processWhere(where, joinFilters);
220
- var filter = mergeFilters(entitySetFilter, whereResolved);
168
+ const whereResolved = processWhere(where, joinFilters);
169
+ const filter = mergeFilters(entitySetFilter, whereResolved);
221
170
  debug('dataTables processing', queryParam);
222
- var dataTables = resourceResponses
223
- .map(function (response) { return processResourceResponse(response, select, filterFields, options); });
171
+ const dataTables = resourceResponses
172
+ .map(response => processResourceResponse(response, select, filterFields, options));
224
173
  debug('queryResult processing', queryParam);
225
- var queryResult = joinData.apply(void 0, tslib_1.__spreadArray([select.key, 'overwrite'], tslib_1.__read(dataTables), false)).filter(function (row) { return applyFilterRow(row, filter); })
226
- .map(function (row) { return fillMissingValues(row, projection); })
227
- .map(function (row) { return projectRow(row, projection); });
174
+ const queryResult = joinData(select.key, 'overwrite', ...dataTables)
175
+ .filter(row => applyFilterRow(row, filter))
176
+ .map(row => fillMissingValues(row, projection))
177
+ .map(row => projectRow(row, projection));
228
178
  debug('result ordering', queryParam);
229
179
  orderData(queryResult, order_by);
230
180
  debug('final result is ready', queryParam);
@@ -232,21 +182,20 @@ function ddfCsvReader(logger) {
232
182
  });
233
183
  }
234
184
  function parseTime(result, options) {
235
- var conceptsLookup = options.conceptsLookup;
236
- var concepts = Object.keys(result[0] || {});
237
- var timeConcepts = concepts.map(function (c) { return conceptsLookup.get(c) || {}; }).filter(function (co) { return co.concept_type == 'time'; });
238
- timeConcepts.forEach(function (_a) {
239
- var concept = _a.concept;
240
- var parse = getTimeParser(concept, options);
241
- result.forEach(function (row) {
185
+ const conceptsLookup = options.conceptsLookup;
186
+ const concepts = Object.keys(result[0] || {});
187
+ const timeConcepts = concepts.map(c => conceptsLookup.get(c) || {}).filter(co => co.concept_type == 'time');
188
+ timeConcepts.forEach(({ concept }) => {
189
+ const parse = getTimeParser(concept, options);
190
+ result.forEach(row => {
242
191
  row[concept] = parse(row[concept]);
243
192
  });
244
193
  });
245
194
  return result;
246
195
  }
247
196
  function getTimeParser(concept, options) {
248
- var error = options.diagnostic.prepareDiagnosticFor('queryData').error;
249
- var parsers = {
197
+ const { error } = options.diagnostic.prepareDiagnosticFor('queryData');
198
+ const parsers = {
250
199
  year: (0, d3_time_format_1.utcParse)('%Y'),
251
200
  month: (0, d3_time_format_1.utcParse)('%Y-%m'),
252
201
  day: (0, d3_time_format_1.utcParse)('%Y%m%d'),
@@ -257,8 +206,8 @@ function ddfCsvReader(logger) {
257
206
  quarter: (0, d3_time_format_1.utcParse)('%Yq%q')
258
207
  };
259
208
  function tryParse(str) {
260
- for (var i in parsers) {
261
- var dateObject = parsers[i](str);
209
+ for (const i in parsers) {
210
+ const dateObject = parsers[i](str);
262
211
  if (dateObject) {
263
212
  return dateObject;
264
213
  }
@@ -271,29 +220,28 @@ function ddfCsvReader(logger) {
271
220
  }
272
221
  if (!parsers[concept]) {
273
222
  error('No time parser found for time concept: ' + concept);
274
- return function (str) { return str; };
223
+ return str => str;
275
224
  }
276
225
  return parsers[concept];
277
226
  }
278
- function orderData(data, orderBy) {
279
- if (orderBy === void 0) { orderBy = []; }
227
+ function orderData(data, orderBy = []) {
280
228
  if (orderBy.length === 0) {
281
229
  return;
282
230
  }
283
- var orderNormalized = orderBy.map(function (orderPart) {
231
+ const orderNormalized = orderBy.map(orderPart => {
284
232
  if (typeof orderPart === 'string') {
285
233
  return { concept: orderPart, direction: 1 };
286
234
  }
287
235
  else {
288
- var concept = Object.keys(orderPart)[0];
289
- var direction = (orderPart[concept] === 'asc' ? 1 : -1);
290
- return { concept: concept, direction: direction };
236
+ const concept = Object.keys(orderPart)[0];
237
+ const direction = (orderPart[concept] === 'asc' ? 1 : -1);
238
+ return { concept, direction };
291
239
  }
292
240
  });
293
- var n = orderNormalized.length;
294
- data.sort(function (a, b) {
295
- for (var i = 0; i < n; i++) {
296
- var order = orderNormalized[i];
241
+ const n = orderNormalized.length;
242
+ data.sort((a, b) => {
243
+ for (let i = 0; i < n; i++) {
244
+ const order = orderNormalized[i];
297
245
  if (a[order.concept] < b[order.concept]) {
298
246
  return -1 * order.direction;
299
247
  }
@@ -305,11 +253,11 @@ function ddfCsvReader(logger) {
305
253
  });
306
254
  }
307
255
  function processWhere(where, joinFilters) {
308
- var result = {};
309
- for (var field in where) {
310
- var fieldValue = where[field];
256
+ const result = {};
257
+ for (const field in where) {
258
+ const fieldValue = where[field];
311
259
  if (includes(['$and', '$or', '$nor'], field)) {
312
- result[field] = fieldValue.map(function (subFilter) { return processWhere(subFilter, joinFilters); });
260
+ result[field] = fieldValue.map(subFilter => processWhere(subFilter, joinFilters));
313
261
  }
314
262
  else if (field === '$in' || field === '$nin') {
315
263
  result[field] = new Set(fieldValue);
@@ -326,62 +274,44 @@ function ddfCsvReader(logger) {
326
274
  }
327
275
  return result;
328
276
  }
329
- function mergeFilters() {
330
- var filters = [];
331
- for (var _i = 0; _i < arguments.length; _i++) {
332
- filters[_i] = arguments[_i];
333
- }
334
- return filters.reduce(function (a, b) {
277
+ function mergeFilters(...filters) {
278
+ return filters.reduce((a, b) => {
335
279
  a.$and.push(b);
336
280
  return a;
337
281
  }, { $and: [] });
338
282
  }
339
283
  function querySchema(queryParam, baseOptions) {
340
- var _a = baseOptions.diagnostic.prepareDiagnosticFor('query'), debug = _a.debug, error = _a.error;
341
- var getSchemaFromCollection = function (collectionPar) {
342
- debug("get schema for collection ".concat(collectionPar));
343
- return baseOptions.datapackage.ddfSchema[collectionPar].map(function (_a) {
344
- var primaryKey = _a.primaryKey, value = _a.value;
345
- return ({ key: primaryKey, value: value });
346
- });
284
+ const { debug, error } = baseOptions.diagnostic.prepareDiagnosticFor('query');
285
+ const getSchemaFromCollection = collectionPar => {
286
+ debug(`get schema for collection ${collectionPar}`);
287
+ return baseOptions.datapackage.ddfSchema[collectionPar].map(({ primaryKey, value }) => ({ key: primaryKey, value }));
347
288
  };
348
- var collection = queryParam.from.split('.')[0];
289
+ const collection = queryParam.from.split('.')[0];
349
290
  if (baseOptions.datapackage.ddfSchema[collection]) {
350
291
  return getSchemaFromCollection(collection);
351
292
  }
352
293
  else if (collection === '*') {
353
294
  return Object.keys(baseOptions.datapackage.ddfSchema)
354
295
  .map(getSchemaFromCollection)
355
- .reduce(function (a, b) { return a.concat(b); });
296
+ .reduce((a, b) => a.concat(b));
356
297
  }
357
298
  else {
358
- var message = "No valid collection (".concat(collection, ") for schema query");
299
+ const message = `No valid collection (${collection}) for schema query`;
359
300
  error(message);
360
301
  throwError(new ddfcsv_error_1.DdfCsvError(ddfcsv_error_1.DDF_ERROR, message));
361
302
  }
362
303
  }
363
304
  function fillMissingValues(row, projection) {
364
- var e_2, _a;
365
- try {
366
- for (var projection_1 = tslib_1.__values(projection), projection_1_1 = projection_1.next(); !projection_1_1.done; projection_1_1 = projection_1.next()) {
367
- var field = projection_1_1.value;
368
- if (typeof row[field] === 'undefined') {
369
- row[field] = null;
370
- }
371
- }
372
- }
373
- catch (e_2_1) { e_2 = { error: e_2_1 }; }
374
- finally {
375
- try {
376
- if (projection_1_1 && !projection_1_1.done && (_a = projection_1.return)) _a.call(projection_1);
305
+ for (const field of projection) {
306
+ if (typeof row[field] === 'undefined') {
307
+ row[field] = null;
377
308
  }
378
- finally { if (e_2) throw e_2.error; }
379
309
  }
380
310
  return row;
381
311
  }
382
312
  function applyFilterRow(row, filter) {
383
- return Object.keys(filter).every(function (filterKey) {
384
- var operator = operators.get(filterKey);
313
+ return Object.keys(filter).every(filterKey => {
314
+ const operator = operators.get(filterKey);
385
315
  if (operator) {
386
316
  return operator(row, filter[filterKey]);
387
317
  }
@@ -394,80 +324,65 @@ function ddfCsvReader(logger) {
394
324
  });
395
325
  }
396
326
  function getJoinFilters(join, queryParam, options) {
397
- return Promise.all(Object.keys(join).map(function (joinID) { return getJoinFilter(joinID, join[joinID], queryParam, options); }))
398
- .then(function (results) { return results.reduce(mergeObjects, {}); });
327
+ return Promise.all(Object.keys(join).map(joinID => getJoinFilter(joinID, join[joinID], queryParam, options)))
328
+ .then(results => results.reduce(mergeObjects, {}));
399
329
  }
400
330
  function mergeObjects(a, b) {
401
331
  return Object.assign(a, b);
402
332
  }
403
333
  function getJoinFilter(joinID, join, queryParam, options) {
404
- var _a;
405
334
  if (options.conceptsLookup.get(join.key).concept_type === 'time') {
406
- return Promise.resolve((_a = {}, _a[joinID] = join.where, _a));
335
+ return Promise.resolve({ [joinID]: join.where });
407
336
  }
408
337
  else {
409
338
  return query({
410
339
  select: { key: [join.key] },
411
340
  where: join.where,
412
341
  from: options.conceptsLookup.has(join.key) ? 'entities' : 'concepts'
413
- }, Object.assign({ joinID: joinID }, cloneDeep(options)))
414
- .then(function (result) {
415
- var _a, _b;
416
- return (_a = {},
417
- _a[joinID] = (_b = {},
418
- _b[join.key] = {
419
- $in: new Set(result.map(function (row) { return row[join.key]; }))
420
- },
421
- _b),
422
- _a);
423
- });
342
+ }, Object.assign({ joinID }, cloneDeep(options)))
343
+ .then(result => ({
344
+ [joinID]: {
345
+ [join.key]: {
346
+ $in: new Set(result.map(row => row[join.key]))
347
+ }
348
+ }
349
+ }));
424
350
  }
425
351
  }
426
352
  function getFilterFields(filter) {
427
- var fields = [];
428
- for (var field in filter) {
353
+ const fields = [];
354
+ for (const field in filter) {
429
355
  if (includes(['$and', '$or', '$not', '$nor'], field)) {
430
- filter[field].map(getFilterFields).forEach(function (subFields) { return fields.push.apply(fields, tslib_1.__spreadArray([], tslib_1.__read(subFields), false)); });
356
+ filter[field].map(getFilterFields).forEach(subFields => fields.push(...subFields));
431
357
  }
432
358
  else {
433
359
  fields.push(field);
434
360
  }
435
361
  }
436
- return tslib_1.__spreadArray([], tslib_1.__read(new Set(fields)), false);
362
+ return [...new Set(fields)];
437
363
  }
438
364
  function filterConceptsByType(conceptTypes, queryKey, options) {
439
- var e_3, _a;
440
- var conceptStrings = queryKey || Array.from(options.conceptsLookup.keys());
441
- var concepts = [];
442
- try {
443
- for (var conceptStrings_1 = tslib_1.__values(conceptStrings), conceptStrings_1_1 = conceptStrings_1.next(); !conceptStrings_1_1.done; conceptStrings_1_1 = conceptStrings_1.next()) {
444
- var conceptString = conceptStrings_1_1.value;
445
- var concept = options.conceptsLookup.get(conceptString);
446
- if (includes(conceptTypes, concept.concept_type)) {
447
- concepts.push(concept);
448
- }
449
- }
450
- }
451
- catch (e_3_1) { e_3 = { error: e_3_1 }; }
452
- finally {
453
- try {
454
- if (conceptStrings_1_1 && !conceptStrings_1_1.done && (_a = conceptStrings_1.return)) _a.call(conceptStrings_1);
365
+ const conceptStrings = queryKey || Array.from(options.conceptsLookup.keys());
366
+ const concepts = [];
367
+ for (const conceptString of conceptStrings) {
368
+ const concept = options.conceptsLookup.get(conceptString);
369
+ if (includes(conceptTypes, concept.concept_type)) {
370
+ concepts.push(concept);
455
371
  }
456
- finally { if (e_3) throw e_3.error; }
457
372
  }
458
373
  return concepts;
459
374
  }
460
375
  function getEntityConceptRenameMap(queryKey, resourceKey, options) {
461
- var resourceKeySet = new Set(resourceKey);
462
- var entityConceptTypes = ['entity_set', 'entity_domain'];
463
- var queryEntityConcepts = filterConceptsByType(entityConceptTypes, queryKey, options);
376
+ const resourceKeySet = new Set(resourceKey);
377
+ const entityConceptTypes = ['entity_set', 'entity_domain'];
378
+ const queryEntityConcepts = filterConceptsByType(entityConceptTypes, queryKey, options);
464
379
  if (queryEntityConcepts.length === 0) {
465
380
  return new Map();
466
381
  }
467
- var allEntityConcepts = filterConceptsByType(entityConceptTypes, null, options);
382
+ const allEntityConcepts = filterConceptsByType(entityConceptTypes, null, options);
468
383
  return queryEntityConcepts
469
- .map(function (concept) { return allEntityConcepts
470
- .filter(function (lookupConcept) {
384
+ .map(concept => allEntityConcepts
385
+ .filter(lookupConcept => {
471
386
  if (concept.concept_type === 'entity_set') {
472
387
  return resourceKeySet.has(lookupConcept.concept) &&
473
388
  lookupConcept.concept !== concept.concept &&
@@ -480,114 +395,86 @@ function ddfCsvReader(logger) {
480
395
  lookupConcept.domain === concept.concept;
481
396
  }
482
397
  })
483
- .reduce(function (map, aliasConcept) { return map.set(aliasConcept.concept, concept.concept); }, new Map()); }).reduce(function (mapA, mapB) { return new Map(tslib_1.__spreadArray(tslib_1.__spreadArray([], tslib_1.__read(mapA), false), tslib_1.__read(mapB), false)); }, new Map());
398
+ .reduce((map, aliasConcept) => map.set(aliasConcept.concept, concept.concept), new Map())).reduce((mapA, mapB) => new Map([...mapA, ...mapB]), new Map());
484
399
  }
485
400
  function getEntitySetFilter(conceptStrings, queryParam, options) {
486
- var promises = filterConceptsByType(['entity_set'], conceptStrings, options)
487
- .map(function (concept) { return query({
401
+ const promises = filterConceptsByType(['entity_set'], conceptStrings, options)
402
+ .map(concept => query({
488
403
  select: { key: [concept.domain], value: ['is--' + concept.concept] },
489
404
  from: 'entities'
490
405
  }, Object.assign({}, cloneDeep(options)))
491
- .then(function (result) {
492
- var _a;
493
- return (_a = {},
494
- _a[concept.concept] = {
495
- $in: new Set(result
496
- .filter(function (row) { return row['is--' + concept.concept]; })
497
- .map(function (row) { return row[concept.domain]; }))
498
- },
499
- _a);
500
- }); });
501
- return Promise.all(promises).then(function (results) {
502
- return results.reduce(function (a, b) { return Object.assign(a, b); }, {});
406
+ .then(result => ({
407
+ [concept.concept]: {
408
+ $in: new Set(result
409
+ .filter(row => row['is--' + concept.concept])
410
+ .map(row => row[concept.domain]))
411
+ }
412
+ })));
413
+ return Promise.all(promises).then(results => {
414
+ return results.reduce((a, b) => Object.assign(a, b), {});
503
415
  });
504
416
  }
505
417
  function getResources(key, value) {
506
418
  if (!value || value.length === 0 || key[0] === value) {
507
- return new Set(tslib_1.__spreadArray([], tslib_1.__read(keyValueLookup
508
- .get(createKeyString(key))
509
- .values()), false).reduce(function (a, b) { return a.concat(b); }));
419
+ return new Set([...keyValueLookup
420
+ .get(createKeyString(key))
421
+ .values()
422
+ ].reduce((a, b) => a.concat(b)));
510
423
  }
511
424
  if (Array.isArray(value)) {
512
425
  return value
513
- .map(function (singleValue) { return getResources(key, singleValue); })
514
- .reduce(function (resultSet, resources) { return new Set(tslib_1.__spreadArray(tslib_1.__spreadArray([], tslib_1.__read(resultSet), false), tslib_1.__read(resources), false)); }, new Set());
426
+ .map(singleValue => getResources(key, singleValue))
427
+ .reduce((resultSet, resources) => new Set([...resultSet, ...resources]), new Set());
515
428
  }
516
- var oneKeyOneValueResourcesArray = keyValueLookup
429
+ let oneKeyOneValueResourcesArray = keyValueLookup
517
430
  .get(createKeyString(key))
518
431
  .get(value);
519
432
  if (oneKeyOneValueResourcesArray) {
520
433
  oneKeyOneValueResourcesArray = oneKeyOneValueResourcesArray
521
- .filter(function (v) { return isEmpty(optimalFilesSet) || includes(optimalFilesSet, v.path); });
434
+ .filter(v => isEmpty(optimalFilesSet) || includes(optimalFilesSet, v.path));
522
435
  }
523
436
  return new Set(oneKeyOneValueResourcesArray);
524
437
  }
525
438
  function processResourceResponse(response, select, filterFields, options) {
526
- var resourcePK = response.resource.schema.primaryKey;
527
- var resourceProjection = new Set(tslib_1.__spreadArray(tslib_1.__spreadArray(tslib_1.__spreadArray([], tslib_1.__read(resourcePK), false), tslib_1.__read(select.value), false), tslib_1.__read(filterFields), false));
528
- var renameMap = getEntityConceptRenameMap(select.key, resourcePK, options);
439
+ const resourcePK = response.resource.schema.primaryKey;
440
+ const resourceProjection = new Set([...resourcePK, ...select.value, ...filterFields]);
441
+ const renameMap = getEntityConceptRenameMap(select.key, resourcePK, options);
529
442
  return response.data
530
- .map(function (row) { return projectRow(row, resourceProjection); })
531
- .map(function (row) { return renameHeaderRow(row, renameMap); });
443
+ .map(row => projectRow(row, resourceProjection))
444
+ .map(row => renameHeaderRow(row, renameMap));
532
445
  }
533
446
  function loadResources(key, value, language, options, queryParam) {
534
- var debug = options.diagnostic.prepareDiagnosticFor('loadResource').debug;
535
- var resources = getResources(key, value);
536
- debug('resources list by query', { queryParam: queryParam, resources: tslib_1.__spreadArray([], tslib_1.__read(resources), false) });
537
- return Promise.all(tslib_1.__spreadArray([], tslib_1.__read(resources), false).map(function (resource) { return loadResource(resource, language, options); }));
447
+ const { debug } = options.diagnostic.prepareDiagnosticFor('loadResource');
448
+ const resources = getResources(key, value);
449
+ debug('resources list by query', { queryParam, resources: [...resources] });
450
+ return Promise.all([...resources].map(resource => loadResource(resource, language, options)));
538
451
  }
539
452
  function projectRow(row, projectionSet) {
540
- var e_4, _a;
541
- var result = {};
542
- try {
543
- for (var _b = tslib_1.__values(Object.keys(row)), _c = _b.next(); !_c.done; _c = _b.next()) {
544
- var concept = _c.value;
545
- if (projectionSet.has(concept)) {
546
- result[concept] = row[concept];
547
- }
548
- }
549
- }
550
- catch (e_4_1) { e_4 = { error: e_4_1 }; }
551
- finally {
552
- try {
553
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
453
+ const result = {};
454
+ for (const concept of Object.keys(row)) {
455
+ if (projectionSet.has(concept)) {
456
+ result[concept] = row[concept];
554
457
  }
555
- finally { if (e_4) throw e_4.error; }
556
458
  }
557
459
  return result;
558
460
  }
559
461
  function renameHeaderRow(row, renameMap) {
560
- var e_5, _a;
561
- var result = {};
562
- try {
563
- for (var _b = tslib_1.__values(Object.keys(row)), _c = _b.next(); !_c.done; _c = _b.next()) {
564
- var concept = _c.value;
565
- result[renameMap.get(concept) || concept] = row[concept];
566
- }
567
- }
568
- catch (e_5_1) { e_5 = { error: e_5_1 }; }
569
- finally {
570
- try {
571
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
572
- }
573
- finally { if (e_5) throw e_5.error; }
462
+ const result = {};
463
+ for (const concept of Object.keys(row)) {
464
+ result[renameMap.get(concept) || concept] = row[concept];
574
465
  }
575
466
  return result;
576
467
  }
577
- function joinData(key, joinMode) {
578
- var data = [];
579
- for (var _i = 2; _i < arguments.length; _i++) {
580
- data[_i - 2] = arguments[_i];
581
- }
468
+ function joinData(key, joinMode, ...data) {
582
469
  if (data.length === 1) {
583
470
  return data[0];
584
471
  }
585
- var canonicalKey = key.slice(0).sort();
586
- var dataMap = data.reduce(function (result, dataPar) {
587
- dataPar.forEach(function (row) {
588
- var keyString = canonicalKey.map(function (concept) { return row[concept]; }).join(',');
472
+ const canonicalKey = key.slice(0).sort();
473
+ const dataMap = data.reduce((result, dataPar) => {
474
+ dataPar.forEach(row => {
475
+ const keyString = canonicalKey.map(concept => row[concept]).join(',');
589
476
  if (result.has(keyString)) {
590
- var resultRow = result.get(keyString);
477
+ const resultRow = result.get(keyString);
591
478
  joinRow(resultRow, row, joinMode);
592
479
  }
593
480
  else {
@@ -596,7 +483,7 @@ function ddfCsvReader(logger) {
596
483
  });
597
484
  return result;
598
485
  }, new Map());
599
- return tslib_1.__spreadArray([], tslib_1.__read(dataMap.values()), false);
486
+ return [...dataMap.values()];
600
487
  }
601
488
  function joinRow(resultRow, sourceRow, mode) {
602
489
  switch (mode) {
@@ -604,18 +491,18 @@ function ddfCsvReader(logger) {
604
491
  Object.assign(resultRow, sourceRow);
605
492
  break;
606
493
  case 'translation':
607
- for (var concept in sourceRow) {
494
+ for (const concept in sourceRow) {
608
495
  if (sourceRow[concept] !== '') {
609
496
  resultRow[concept] = sourceRow[concept];
610
497
  }
611
498
  }
612
499
  break;
613
500
  case 'overwriteWithError':
614
- for (var concept in sourceRow) {
501
+ for (const concept in sourceRow) {
615
502
  if (resultRow[concept] !== undefined && resultRow[concept] !== sourceRow[concept]) {
616
- var sourceRowStr = JSON.stringify(sourceRow);
617
- var resultRowStr = JSON.stringify(resultRow);
618
- var errStr = "JOIN Error: two resources have different data for \"".concat(concept, "\": ").concat(sourceRowStr, ",").concat(resultRowStr);
503
+ const sourceRowStr = JSON.stringify(sourceRow);
504
+ const resultRowStr = JSON.stringify(resultRow);
505
+ const errStr = `JOIN Error: two resources have different data for "${concept}": ${sourceRowStr},${resultRowStr}`;
619
506
  throwError(new ddfcsv_error_1.DdfCsvError(ddfcsv_error_1.DDF_ERROR, errStr));
620
507
  }
621
508
  else {
@@ -626,73 +513,72 @@ function ddfCsvReader(logger) {
626
513
  }
627
514
  }
628
515
  function throwError(error) {
629
- var currentLogger = logger || console;
516
+ const currentLogger = logger || console;
630
517
  currentLogger.error(error.message);
631
518
  throw error;
632
519
  }
633
- function createKeyString(key, row) {
634
- if (row === void 0) { row = false; }
635
- var canonicalKey = key.slice(0).sort();
520
+ function createKeyString(key, row = false) {
521
+ const canonicalKey = key.slice(0).sort();
636
522
  if (!row) {
637
523
  return canonicalKey.join(',');
638
524
  }
639
525
  else {
640
- return canonicalKey.map(function (concept) { return row[concept]; }).join(',');
526
+ return canonicalKey.map(concept => row[concept]).join(',');
641
527
  }
642
528
  }
643
529
  function loadResource(resource, language, options) {
644
- var warning = options.diagnostic.prepareDiagnosticFor('loadResource').warning;
645
- var filePromises = [];
530
+ const { warning } = options.diagnostic.prepareDiagnosticFor('loadResource');
531
+ const filePromises = [];
646
532
  if (typeof resource.data === 'undefined') {
647
533
  resource.data = loadFile(resource.path, options);
648
534
  }
649
535
  filePromises.push(resource.data);
650
- var languageValid = typeof language !== 'undefined' && includes(getLanguages(options), language);
651
- var languageLoaded = typeof resource.translations[language] !== 'undefined';
536
+ const languageValid = typeof language !== 'undefined' && includes(getLanguages(options), language);
537
+ const languageLoaded = typeof resource.translations[language] !== 'undefined';
652
538
  if (languageValid) {
653
539
  if (!languageLoaded) {
654
- var translationPath_1 = "lang/".concat(language, "/").concat(resource.path);
655
- resource.translations[language] = loadFile(translationPath_1, options)
656
- .catch(function (err) {
657
- warning("translation file ".concat(translationPath_1), err);
540
+ const translationPath = `lang/${language}/${resource.path}`;
541
+ resource.translations[language] = loadFile(translationPath, options)
542
+ .catch(err => {
543
+ warning(`translation file ${translationPath}`, err);
658
544
  return Promise.resolve({});
659
545
  });
660
546
  }
661
547
  filePromises.push(resource.translations[language]);
662
548
  }
663
- return Promise.all(filePromises).then(function (fileResponses) {
664
- var filesData = fileResponses.map(function (resp) { return resp.data || []; });
665
- var primaryKey = resource.schema.primaryKey;
666
- var data = joinData.apply(void 0, tslib_1.__spreadArray([primaryKey, 'translation'], tslib_1.__read(filesData), false));
667
- return { data: data, resource: resource };
549
+ return Promise.all(filePromises).then(fileResponses => {
550
+ const filesData = fileResponses.map(resp => resp.data || []);
551
+ const primaryKey = resource.schema.primaryKey;
552
+ const data = joinData(primaryKey, 'translation', ...filesData);
553
+ return { data, resource };
668
554
  });
669
555
  }
670
556
  function getLanguages(options) {
671
557
  if (!options.datapackage.translations) {
672
558
  return [];
673
559
  }
674
- return options.datapackage.translations.map(function (lang) { return lang.id; });
560
+ return options.datapackage.translations.map(lang => lang.id);
675
561
  }
676
562
  function loadFile(filePath, options) {
677
- var _a = options.diagnostic.prepareDiagnosticFor('loadFile'), debug = _a.debug, error = _a.error;
678
- var fullFilePath = (0, ddf_query_validator_1.getFilePath)(options.basePath, filePath);
679
- debug("start reading \"".concat(filePath, "\""));
680
- return new Promise(function (resolve, reject) {
681
- options.fileReader.readText(fullFilePath, function (err, data) {
563
+ const { debug, error } = options.diagnostic.prepareDiagnosticFor('loadFile');
564
+ const fullFilePath = (0, ddf_query_validator_1.getFilePath)(options.basePath, filePath);
565
+ debug(`start reading "${filePath}"`);
566
+ return new Promise((resolve, reject) => {
567
+ options.fileReader.readText(fullFilePath, (err, data) => {
682
568
  if (err) {
683
- error("fail \"".concat(filePath, "\" reading"), err);
569
+ error(`fail "${filePath}" reading`, err);
684
570
  return reject(new ddfcsv_error_1.DdfCsvError(ddfcsv_error_1.FILE_READING_ERROR, err, fullFilePath));
685
571
  }
686
572
  Papa.parse(stripBom(data), {
687
573
  header: true,
688
574
  skipEmptyLines: true,
689
575
  dynamicTyping: true,
690
- complete: function (result) {
691
- debug("finish reading \"".concat(filePath, "\""));
576
+ complete: result => {
577
+ debug(`finish reading "${filePath}"`);
692
578
  resolve(result);
693
579
  },
694
- error: function (parseErr) {
695
- error("fail \"".concat(filePath, "\" parsing"), parseErr);
580
+ error: parseErr => {
581
+ error(`fail "${filePath}" parsing`, parseErr);
696
582
  reject(new ddfcsv_error_1.DdfCsvError(ddfcsv_error_1.CSV_PARSING_ERROR, parseErr, filePath));
697
583
  }
698
584
  });
@@ -703,7 +589,7 @@ function ddfCsvReader(logger) {
703
589
  if (resourcesLookup.size > 0) {
704
590
  return resourcesLookup;
705
591
  }
706
- datapackagePar.resources.forEach(function (resource) {
592
+ datapackagePar.resources.forEach(resource => {
707
593
  if (!Array.isArray(resource.schema.primaryKey)) {
708
594
  resource.schema.primaryKey = [resource.schema.primaryKey];
709
595
  }
@@ -716,10 +602,10 @@ function ddfCsvReader(logger) {
716
602
  if (keyValueLookup.size > 0) {
717
603
  return keyValueLookup;
718
604
  }
719
- for (var collection in datapackagePar.ddfSchema) {
720
- datapackagePar.ddfSchema[collection].map(function (kvPair) {
721
- var key = createKeyString(kvPair.primaryKey);
722
- var resources = kvPair.resources.map(function (resourceName) { return resourcesLookup.get(resourceName); });
605
+ for (const collection in datapackagePar.ddfSchema) {
606
+ datapackagePar.ddfSchema[collection].map(kvPair => {
607
+ const key = createKeyString(kvPair.primaryKey);
608
+ const resources = kvPair.resources.map(resourceName => resourcesLookup.get(resourceName));
723
609
  if (keyValueLookup.has(key)) {
724
610
  keyValueLookup.get(key).set(kvPair.value, resources);
725
611
  }
@@ -731,7 +617,7 @@ function ddfCsvReader(logger) {
731
617
  return keyValueLookup;
732
618
  }
733
619
  return {
734
- query: query
620
+ query
735
621
  };
736
622
  }
737
623
  exports.ddfCsvReader = ddfCsvReader;