@manuscripts/transform 1.5.8 → 2.0.0

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/dist/cjs/index.js +1 -1
  2. package/dist/cjs/jats/importer/index.js +1 -3
  3. package/dist/cjs/jats/importer/jats-body-dom-parser.js +23 -227
  4. package/dist/cjs/jats/importer/jats-body-transformations.js +110 -201
  5. package/dist/cjs/jats/importer/jats-comments.js +100 -98
  6. package/dist/cjs/jats/importer/jats-front-parser.js +87 -81
  7. package/dist/cjs/jats/importer/jats-journal-meta-parser.js +51 -39
  8. package/dist/cjs/jats/importer/jats-parser-utils.js +17 -56
  9. package/dist/cjs/jats/importer/jats-reference-parser.js +24 -79
  10. package/dist/cjs/jats/importer/jats-references.js +34 -0
  11. package/dist/cjs/jats/importer/parse-jats-article.js +67 -173
  12. package/dist/cjs/jats/index.js +1 -3
  13. package/dist/cjs/jats/jats-exporter.js +34 -55
  14. package/dist/cjs/lib/section-group-type.js +30 -0
  15. package/dist/cjs/lib/utils.js +1 -25
  16. package/dist/cjs/schema/index.js +20 -17
  17. package/dist/cjs/schema/nodes/abstracts.js +27 -0
  18. package/dist/cjs/schema/nodes/affiliations.js +27 -0
  19. package/dist/cjs/schema/nodes/backmatter.js +27 -0
  20. package/dist/cjs/schema/nodes/body.js +27 -0
  21. package/dist/cjs/schema/nodes/citation.js +10 -15
  22. package/dist/cjs/schema/nodes/{comment_list.js → comments.js} +4 -4
  23. package/dist/cjs/schema/nodes/contributors.js +27 -0
  24. package/dist/cjs/schema/nodes/{meta_section.js → core_section.js} +6 -5
  25. package/dist/cjs/schema/nodes/cross_reference.js +4 -3
  26. package/dist/cjs/schema/nodes/inline_footnote.js +6 -5
  27. package/dist/cjs/schema/nodes/keyword.js +0 -1
  28. package/dist/cjs/schema/nodes/{keywords_group.js → keyword_group.js} +6 -6
  29. package/dist/cjs/schema/nodes/{keywords_section.js → keywords.js} +7 -7
  30. package/dist/cjs/schema/nodes/keywords_element.js +1 -1
  31. package/dist/cjs/schema/nodes/manuscript.js +5 -2
  32. package/dist/cjs/transformer/builders.js +9 -86
  33. package/dist/cjs/transformer/decode.js +147 -176
  34. package/dist/cjs/transformer/encode.js +66 -67
  35. package/dist/cjs/transformer/highlight-markers.js +48 -36
  36. package/dist/cjs/transformer/html.js +7 -23
  37. package/dist/cjs/transformer/labels.js +3 -17
  38. package/dist/cjs/transformer/node-names.js +1 -1
  39. package/dist/cjs/transformer/node-title.js +1 -1
  40. package/dist/cjs/transformer/node-types.js +7 -6
  41. package/dist/cjs/transformer/object-types.js +1 -2
  42. package/dist/cjs/transformer/section-category.js +31 -31
  43. package/dist/es/index.js +1 -1
  44. package/dist/es/jats/importer/index.js +1 -1
  45. package/dist/es/jats/importer/jats-body-dom-parser.js +23 -227
  46. package/dist/es/jats/importer/jats-body-transformations.js +111 -202
  47. package/dist/es/jats/importer/jats-comments.js +97 -96
  48. package/dist/es/jats/importer/jats-front-parser.js +88 -82
  49. package/dist/es/jats/importer/jats-journal-meta-parser.js +51 -39
  50. package/dist/es/jats/importer/jats-parser-utils.js +16 -54
  51. package/dist/es/jats/importer/jats-reference-parser.js +27 -82
  52. package/dist/es/jats/importer/jats-references.js +30 -0
  53. package/dist/es/jats/importer/parse-jats-article.js +70 -174
  54. package/dist/es/jats/index.js +1 -1
  55. package/dist/es/jats/jats-exporter.js +34 -55
  56. package/dist/es/lib/section-group-type.js +27 -0
  57. package/dist/es/lib/utils.js +0 -22
  58. package/dist/es/schema/index.js +21 -18
  59. package/dist/es/schema/nodes/abstracts.js +24 -0
  60. package/dist/es/schema/nodes/affiliations.js +24 -0
  61. package/dist/es/schema/nodes/backmatter.js +24 -0
  62. package/dist/es/schema/nodes/body.js +24 -0
  63. package/dist/es/schema/nodes/citation.js +10 -15
  64. package/dist/es/schema/nodes/{comment_list.js → comments.js} +3 -3
  65. package/dist/es/schema/nodes/contributors.js +24 -0
  66. package/dist/es/schema/nodes/{meta_section.js → core_section.js} +5 -4
  67. package/dist/es/schema/nodes/cross_reference.js +4 -3
  68. package/dist/es/schema/nodes/inline_footnote.js +6 -5
  69. package/dist/es/schema/nodes/keyword.js +0 -1
  70. package/dist/es/schema/nodes/{keywords_group.js → keyword_group.js} +4 -4
  71. package/dist/es/schema/nodes/{keywords_section.js → keywords.js} +5 -5
  72. package/dist/es/schema/nodes/keywords_element.js +1 -1
  73. package/dist/es/schema/nodes/manuscript.js +3 -1
  74. package/dist/es/transformer/builders.js +6 -73
  75. package/dist/es/transformer/decode.js +147 -175
  76. package/dist/es/transformer/encode.js +70 -71
  77. package/dist/es/transformer/highlight-markers.js +44 -32
  78. package/dist/es/transformer/html.js +7 -23
  79. package/dist/es/transformer/labels.js +3 -17
  80. package/dist/es/transformer/node-names.js +1 -1
  81. package/dist/es/transformer/node-title.js +1 -1
  82. package/dist/es/transformer/node-types.js +7 -6
  83. package/dist/es/transformer/object-types.js +0 -1
  84. package/dist/es/transformer/section-category.js +29 -29
  85. package/dist/types/index.d.ts +1 -1
  86. package/dist/types/jats/importer/index.d.ts +1 -1
  87. package/dist/types/jats/importer/jats-body-transformations.d.ts +16 -19
  88. package/dist/types/jats/importer/jats-comments.d.ts +13 -9
  89. package/dist/types/jats/importer/jats-front-parser.d.ts +35 -12
  90. package/dist/types/jats/importer/jats-journal-meta-parser.d.ts +4 -4
  91. package/dist/types/jats/importer/jats-parser-utils.d.ts +1 -6
  92. package/dist/types/jats/importer/jats-reference-parser.d.ts +2 -6
  93. package/dist/types/jats/importer/jats-references.d.ts +12 -0
  94. package/dist/types/jats/importer/parse-jats-article.d.ts +5 -17
  95. package/dist/types/jats/index.d.ts +1 -1
  96. package/dist/types/lib/section-group-type.d.ts +23 -0
  97. package/dist/types/lib/utils.d.ts +1 -4
  98. package/dist/types/schema/index.d.ts +4 -5
  99. package/dist/types/schema/nodes/{meta_section.d.ts → abstracts.d.ts} +1 -9
  100. package/dist/types/schema/nodes/affiliations.d.ts +17 -0
  101. package/dist/types/schema/nodes/backmatter.d.ts +17 -0
  102. package/dist/types/schema/nodes/body.d.ts +17 -0
  103. package/dist/types/schema/nodes/citation.d.ts +3 -5
  104. package/dist/types/schema/nodes/comments.d.ts +17 -0
  105. package/dist/types/schema/nodes/contributors.d.ts +17 -0
  106. package/dist/types/schema/nodes/core_section.d.ts +17 -0
  107. package/dist/types/schema/nodes/cross_reference.d.ts +1 -1
  108. package/dist/types/schema/nodes/inline_footnote.d.ts +1 -1
  109. package/dist/types/schema/nodes/keyword.d.ts +0 -1
  110. package/dist/types/schema/nodes/{contributors_element.d.ts → keyword_group.d.ts} +3 -4
  111. package/dist/types/schema/nodes/{comment_list.d.ts → keywords.d.ts} +3 -2
  112. package/dist/types/schema/nodes/manuscript.d.ts +1 -0
  113. package/dist/types/schema/types.d.ts +1 -1
  114. package/dist/types/transformer/builders.d.ts +2 -14
  115. package/dist/types/transformer/decode.d.ts +5 -9
  116. package/dist/types/transformer/encode.d.ts +4 -4
  117. package/dist/types/transformer/highlight-markers.d.ts +7 -2
  118. package/dist/types/transformer/object-types.d.ts +1 -2
  119. package/dist/types/transformer/section-category.d.ts +4 -3
  120. package/package.json +1 -6
  121. package/dist/cjs/lib/core-section-categories.js +0 -29
  122. package/dist/cjs/schema/nodes/affiliations_section.js +0 -36
  123. package/dist/cjs/schema/nodes/contributors_element.js +0 -49
  124. package/dist/cjs/schema/nodes/contributors_section.js +0 -36
  125. package/dist/es/lib/core-section-categories.js +0 -26
  126. package/dist/es/schema/nodes/affiliations_section.js +0 -32
  127. package/dist/es/schema/nodes/contributors_element.js +0 -46
  128. package/dist/es/schema/nodes/contributors_section.js +0 -32
  129. package/dist/types/lib/core-section-categories.d.ts +0 -8
  130. package/dist/types/schema/nodes/affiliations_section.d.ts +0 -11
  131. package/dist/types/schema/nodes/contributors_section.d.ts +0 -12
  132. package/dist/types/schema/nodes/keywords_group.d.ts +0 -26
  133. package/dist/types/schema/nodes/keywords_section.d.ts +0 -26
@@ -15,33 +15,21 @@
15
15
  * limitations under the License.
16
16
  */
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
- exports.htmlFromJatsNode = exports.fixBodyPMNode = exports.flatten = void 0;
19
- const json_schema_1 = require("@manuscripts/json-schema");
18
+ exports.htmlFromJatsNode = exports.updateDocumentIDs = void 0;
20
19
  const transformer_1 = require("../../transformer");
21
- const isAuxiliaryObjectReference = (0, transformer_1.hasObjectType)(json_schema_1.ObjectTypes.AuxiliaryObjectReference);
22
- const excludedObjectTypes = [json_schema_1.ObjectTypes.Contributor, json_schema_1.ObjectTypes.Affiliation];
23
- function flatten(arrays) {
24
- return [].concat(...arrays);
25
- }
26
- exports.flatten = flatten;
27
- const fixBodyPMNode = (output, models, referenceIdsMap = new Map()) => {
28
- const replacements = referenceIdsMap;
20
+ const updateDocumentIDs = (node, replacements) => {
29
21
  const warnings = [];
30
- recurseDoc(output, (n) => addMissingID(n, replacements, warnings));
31
- recurseDoc(output, (n) => addMissingRID(n, replacements, warnings));
32
- return {
33
- warnings: [...warnings, ...fixReferences(models, replacements)],
34
- replacements,
35
- };
22
+ recurseDoc(node, (n) => updateNodeID(n, replacements, warnings));
23
+ recurseDoc(node, (n) => updateNodeRID(n, replacements, warnings));
24
+ recurseDoc(node, (n) => updateNodeRIDS(n, replacements, warnings));
25
+ return warnings;
36
26
  };
37
- exports.fixBodyPMNode = fixBodyPMNode;
27
+ exports.updateDocumentIDs = updateDocumentIDs;
38
28
  function recurseDoc(node, fn) {
39
29
  fn(node);
40
- if (node.content) {
41
- node.content.forEach((n) => recurseDoc(n, fn));
42
- }
30
+ node.descendants((n) => fn(n));
43
31
  }
44
- const addMissingID = (node, replacements, warnings) => {
32
+ const updateNodeID = (node, replacements, warnings) => {
45
33
  if (!('id' in node.attrs)) {
46
34
  return;
47
35
  }
@@ -50,9 +38,6 @@ const addMissingID = (node, replacements, warnings) => {
50
38
  warnings.push(`Unknown object type for node type ${node.type.name}`);
51
39
  return;
52
40
  }
53
- if (excludedObjectTypes.includes(objectType)) {
54
- return;
55
- }
56
41
  const previousID = node.attrs.id;
57
42
  const nextID = (0, transformer_1.generateID)(objectType);
58
43
  if (previousID) {
@@ -65,7 +50,7 @@ const addMissingID = (node, replacements, warnings) => {
65
50
  }
66
51
  node.attrs = Object.assign(Object.assign({}, node.attrs), { id: nextID });
67
52
  };
68
- const addMissingRID = (node, replacements, warnings) => {
53
+ const updateNodeRID = (node, replacements, warnings) => {
69
54
  const previousRID = node.attrs.rid;
70
55
  if (!('rid' in node.attrs) || !previousRID) {
71
56
  return;
@@ -76,36 +61,12 @@ const addMissingRID = (node, replacements, warnings) => {
76
61
  node.attrs = Object.assign(Object.assign({}, node.attrs), { rid: replacements.get(previousRID) });
77
62
  }
78
63
  };
79
- const fixReferences = (models, replacements) => {
80
- const warnings = [];
81
- const getReferenceId = (referencedObject) => {
82
- const newReferencedId = replacements.get(referencedObject);
83
- if (newReferencedId) {
84
- return newReferencedId;
85
- }
86
- else {
87
- warnings.push(`Missing replacement for model.referencedObject ${referencedObject}`);
88
- }
89
- };
90
- models.forEach((model) => {
91
- var _a;
92
- if (isAuxiliaryObjectReference(model)) {
93
- if (model.referencedObject) {
94
- model.referencedObject = getReferenceId(model.referencedObject);
95
- }
96
- else {
97
- const referencedObjects = [];
98
- (_a = model.referencedObjects) === null || _a === void 0 ? void 0 : _a.map((reference) => {
99
- const referenceId = getReferenceId(reference);
100
- if (referenceId) {
101
- referencedObjects.push(referenceId);
102
- }
103
- });
104
- model.referencedObjects = referencedObjects;
105
- }
106
- }
107
- });
108
- return warnings;
64
+ const updateNodeRIDS = (node, replacements, warnings) => {
65
+ const previousRIDs = node.attrs.rids;
66
+ if (!('rids' in node.attrs) || !previousRIDs.length) {
67
+ return;
68
+ }
69
+ node.attrs = Object.assign(Object.assign({}, node.attrs), { rids: previousRIDs.map((r) => replacements.get(r) || r) });
109
70
  };
110
71
  const JATS_TO_HTML_MAPPING = new Map([
111
72
  ['bold', 'b'],
@@ -143,7 +104,7 @@ const htmlFromJatsNode = (element, createElement) => {
143
104
  return undefined;
144
105
  }
145
106
  const temp = createElement('template');
146
- renameJatsNodesToHTML(element, temp.content, createElement);
107
+ renameJatsNodesToHTML(element, temp, createElement);
147
108
  return temp.innerHTML;
148
109
  };
149
110
  exports.htmlFromJatsNode = htmlFromJatsNode;
@@ -20,6 +20,7 @@ const utils_1 = require("../../lib/utils");
20
20
  const builders_1 = require("../../transformer/builders");
21
21
  const jats_comments_1 = require("./jats-comments");
22
22
  const jats_parser_utils_1 = require("./jats-parser-utils");
23
+ const jats_references_1 = require("./jats-references");
23
24
  const chooseBibliographyItemType = (publicationType) => {
24
25
  switch (publicationType) {
25
26
  case 'book':
@@ -31,37 +32,31 @@ const chooseBibliographyItemType = (publicationType) => {
31
32
  }
32
33
  };
33
34
  exports.jatsReferenceParser = {
34
- parseReferences(referenceNodes, createElement) {
35
- const referenceIDs = new Map();
36
- const referenceQueries = new Map();
37
- const references = referenceNodes.map((referenceNode) => {
35
+ parseReferences(elements, createElement) {
36
+ const references = new jats_references_1.References();
37
+ elements.forEach((element) => {
38
38
  var _a;
39
- const publicationType = referenceNode.getAttribute('publication-type');
39
+ const publicationType = element.getAttribute('publication-type');
40
40
  const authorNodes = [
41
- ...referenceNode.querySelectorAll('person-group[person-group-type="author"] > *'),
41
+ ...element.querySelectorAll('person-group[person-group-type="author"] > *'),
42
42
  ];
43
43
  const bibliographyItem = (0, builders_1.buildBibliographyItem)({
44
44
  type: chooseBibliographyItemType(publicationType),
45
45
  });
46
- const titleNode = referenceNode.querySelector('article-title');
46
+ const titleNode = element.querySelector('article-title');
47
47
  if (titleNode) {
48
48
  bibliographyItem.title = (_a = (0, jats_parser_utils_1.htmlFromJatsNode)(titleNode, createElement)) === null || _a === void 0 ? void 0 : _a.trim();
49
49
  }
50
- const queriesText = [];
51
- const mixedCitation = referenceNode.querySelector('mixed-citation');
50
+ const comments = [];
51
+ const mixedCitation = element.querySelector('mixed-citation');
52
52
  mixedCitation === null || mixedCitation === void 0 ? void 0 : mixedCitation.childNodes.forEach((item) => {
53
- if (item.nodeType === item.PROCESSING_INSTRUCTION_NODE &&
54
- item.nodeName === 'AuthorQuery') {
55
- const instruction = (0, jats_comments_1.parseProcessingInstruction)(item);
56
- if (instruction) {
57
- const { queryText } = instruction;
58
- queriesText.push(queryText);
53
+ if ((0, jats_comments_1.isJATSComment)(item)) {
54
+ const comment = (0, jats_comments_1.parseJATSComment)(item);
55
+ if (comment) {
56
+ comments.push(comment);
59
57
  }
60
58
  }
61
59
  });
62
- if (queriesText.length) {
63
- referenceQueries.set(bibliographyItem._id, queriesText);
64
- }
65
60
  if (authorNodes.length <= 0) {
66
61
  mixedCitation === null || mixedCitation === void 0 ? void 0 : mixedCitation.childNodes.forEach((item) => {
67
62
  var _a, _b, _c;
@@ -72,34 +67,34 @@ exports.jatsReferenceParser = {
72
67
  }
73
68
  });
74
69
  }
75
- const source = (0, utils_1.getTrimmedTextContent)(referenceNode, 'source');
70
+ const source = (0, utils_1.getTrimmedTextContent)(element, 'source');
76
71
  if (source) {
77
72
  bibliographyItem['container-title'] = source;
78
73
  }
79
- const volume = (0, utils_1.getTrimmedTextContent)(referenceNode, 'volume');
74
+ const volume = (0, utils_1.getTrimmedTextContent)(element, 'volume');
80
75
  if (volume) {
81
76
  bibliographyItem.volume = volume;
82
77
  }
83
- const issue = (0, utils_1.getTrimmedTextContent)(referenceNode, 'issue');
78
+ const issue = (0, utils_1.getTrimmedTextContent)(element, 'issue');
84
79
  if (issue) {
85
80
  bibliographyItem.issue = issue;
86
81
  }
87
- const supplement = (0, utils_1.getTrimmedTextContent)(referenceNode, 'supplement');
82
+ const supplement = (0, utils_1.getTrimmedTextContent)(element, 'supplement');
88
83
  if (supplement) {
89
84
  bibliographyItem.supplement = supplement;
90
85
  }
91
- const fpage = (0, utils_1.getTrimmedTextContent)(referenceNode, 'fpage');
92
- const lpage = (0, utils_1.getTrimmedTextContent)(referenceNode, 'lpage');
86
+ const fpage = (0, utils_1.getTrimmedTextContent)(element, 'fpage');
87
+ const lpage = (0, utils_1.getTrimmedTextContent)(element, 'lpage');
93
88
  if (fpage) {
94
89
  bibliographyItem.page = lpage ? `${fpage}-${lpage}` : fpage;
95
90
  }
96
- const year = (0, utils_1.getTrimmedTextContent)(referenceNode, 'year');
91
+ const year = (0, utils_1.getTrimmedTextContent)(element, 'year');
97
92
  if (year) {
98
93
  bibliographyItem.issued = (0, builders_1.buildBibliographicDate)({
99
94
  'date-parts': [[year]],
100
95
  });
101
96
  }
102
- const doi = (0, utils_1.getTrimmedTextContent)(referenceNode, 'pub-id[pub-id-type="doi"]');
97
+ const doi = (0, utils_1.getTrimmedTextContent)(element, 'pub-id[pub-id-type="doi"]');
103
98
  if (doi) {
104
99
  bibliographyItem.DOI = doi;
105
100
  }
@@ -127,59 +122,9 @@ exports.jatsReferenceParser = {
127
122
  if (authors.length) {
128
123
  bibliographyItem.author = authors;
129
124
  }
130
- const id = referenceNode.getAttribute('id');
131
- if (id) {
132
- referenceIDs.set(id, bibliographyItem._id);
133
- }
134
- return bibliographyItem;
125
+ const id = element.getAttribute('id');
126
+ references.add(bibliographyItem, id, comments);
135
127
  });
136
- return {
137
- references,
138
- referenceIDs,
139
- referenceQueries,
140
- };
141
- },
142
- parseCrossReferences(crossReferenceNodes, referenceIDs) {
143
- return (0, jats_parser_utils_1.flatten)(crossReferenceNodes.map((crossReferenceNode) => {
144
- const rid = crossReferenceNode.getAttribute('rid');
145
- if (!rid) {
146
- return [];
147
- }
148
- const modelNodes = [];
149
- const refType = crossReferenceNode.getAttribute('ref-type');
150
- switch (refType) {
151
- case 'bibr':
152
- {
153
- const rids = rid
154
- .split(/\s+/)
155
- .filter((id) => referenceIDs.has(id))
156
- .map((id) => referenceIDs.get(id));
157
- if (rids.length) {
158
- const citation = (0, builders_1.buildCitation)('', rids);
159
- modelNodes.push(citation);
160
- crossReferenceNode.setAttribute('rid', citation._id);
161
- crossReferenceNode.setAttribute('data-reference-embedded-citation', JSON.stringify(citation.embeddedCitationItems.map(({ _id: id, bibliographyItem }) => ({
162
- id,
163
- bibliographyItem,
164
- }))));
165
- }
166
- else {
167
- crossReferenceNode.removeAttribute('rid');
168
- }
169
- }
170
- break;
171
- case 'fn':
172
- break;
173
- default:
174
- {
175
- const rids = rid.trim().split(/\s+/);
176
- const auxiliaryObjectReference = (0, builders_1.buildAuxiliaryObjectReference)('', rids);
177
- modelNodes.push(auxiliaryObjectReference);
178
- crossReferenceNode.setAttribute('rid', auxiliaryObjectReference._id);
179
- }
180
- break;
181
- }
182
- return modelNodes;
183
- }));
128
+ return references;
184
129
  },
185
130
  };
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.References = void 0;
4
+ class References {
5
+ constructor() {
6
+ this.items = new Map();
7
+ this.IDs = new Map();
8
+ this.comments = new Map();
9
+ }
10
+ add(item, id, comments) {
11
+ this.items.set(item._id, item);
12
+ this.comments.set(item._id, comments);
13
+ if (id) {
14
+ this.IDs.set(id, item._id);
15
+ }
16
+ }
17
+ getBibliographyItems() {
18
+ return [...this.items.values()];
19
+ }
20
+ getComments(id) {
21
+ return this.getValue(id, this.comments) || [];
22
+ }
23
+ getValue(id, map) {
24
+ const value = map.get(id);
25
+ if (value) {
26
+ return value;
27
+ }
28
+ const id2 = this.IDs.get(id);
29
+ if (id2) {
30
+ return map.get(id2);
31
+ }
32
+ }
33
+ }
34
+ exports.References = References;
@@ -15,16 +15,10 @@
15
15
  * limitations under the License.
16
16
  */
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
- exports.getElementsOrder = exports.parseJATSArticle = exports.parseJATSBody = exports.parseJATSReferences = exports.parseJATSFront = void 0;
19
- const json_schema_1 = require("@manuscripts/json-schema");
20
- const prosemirror_model_1 = require("prosemirror-model");
18
+ exports.parseJATSArticle = exports.parseJATSBody = exports.parseJATSFront = void 0;
21
19
  const errors_1 = require("../../errors");
22
- const html_1 = require("../../lib/html");
23
- const schema_1 = require("../../schema");
24
20
  const transformer_1 = require("../../transformer");
25
21
  const builders_1 = require("../../transformer/builders");
26
- const encode_1 = require("../../transformer/encode");
27
- const footnotes_order_1 = require("../../transformer/footnotes-order");
28
22
  const id_1 = require("../../transformer/id");
29
23
  const project_bundle_1 = require("../../transformer/project-bundle");
30
24
  const jats_body_dom_parser_1 = require("./jats-body-dom-parser");
@@ -33,208 +27,108 @@ const jats_comments_1 = require("./jats-comments");
33
27
  const jats_front_parser_1 = require("./jats-front-parser");
34
28
  const jats_parser_utils_1 = require("./jats-parser-utils");
35
29
  const jats_reference_parser_1 = require("./jats-reference-parser");
36
- const parser = prosemirror_model_1.DOMParser.fromSchema(schema_1.schema);
37
- const inlineContentsFromJATSTitle = (htmlTitle) => {
38
- const node = (0, html_1.nodeFromHTML)(`<h1>${htmlTitle}</h1>`);
39
- if (node) {
40
- const titleNode = parser.parse(node, {
41
- topNode: schema_1.schema.nodes.section_title.create(),
42
- });
43
- return (0, encode_1.inlineContents)(titleNode);
44
- }
45
- throw new errors_1.InvalidInput('Invalid title content for: ' + htmlTitle);
46
- };
47
- const parseJATSFront = async (front) => {
48
- var _a, _b, _c;
49
- const journalMeta = jats_front_parser_1.jatsFrontParser.parseJournal(front.querySelector('journal-meta'));
50
- const journal = Object.assign(Object.assign({}, (0, builders_1.buildJournal)()), journalMeta);
51
- const articleMeta = front.querySelector('article-meta');
52
- const title = (_a = articleMeta === null || articleMeta === void 0 ? void 0 : articleMeta.querySelector('title-group > article-title')) === null || _a === void 0 ? void 0 : _a.innerHTML;
53
- const subtitle = (_b = articleMeta === null || articleMeta === void 0 ? void 0 : articleMeta.querySelector('title-group > subtitle')) === null || _b === void 0 ? void 0 : _b.innerHTML;
54
- const runningTitle = (_c = articleMeta === null || articleMeta === void 0 ? void 0 : articleMeta.querySelector('title-group > alt-title[alt-title-type="right-running"]')) === null || _c === void 0 ? void 0 : _c.innerHTML;
55
- const manuscriptMeta = Object.assign({}, jats_front_parser_1.jatsFrontParser.parseCounts(articleMeta === null || articleMeta === void 0 ? void 0 : articleMeta.querySelector('counts')));
56
- const titles = {
57
- objectType: json_schema_1.ObjectTypes.Titles,
58
- _id: (0, id_1.generateID)(json_schema_1.ObjectTypes.Titles),
59
- title: title ? inlineContentsFromJATSTitle(title) : undefined,
60
- subtitle: subtitle ? inlineContentsFromJATSTitle(subtitle) : undefined,
61
- runningTitle: runningTitle
62
- ? inlineContentsFromJATSTitle(runningTitle)
63
- : undefined,
64
- };
65
- const { affiliations, affiliationIDs } = jats_front_parser_1.jatsFrontParser.parseAffiliationNodes([
30
+ const parseJATSFront = (doc, front) => {
31
+ const createElement = createElementFn(doc);
32
+ const journal = jats_front_parser_1.jatsFrontParser.parseJournal(front.querySelector('journal-meta'));
33
+ const titles = jats_front_parser_1.jatsFrontParser.parseTitles(front.querySelector('article-meta > title-group'), createElement);
34
+ const { affiliations, affiliationIDs } = jats_front_parser_1.jatsFrontParser.parseAffiliations([
66
35
  ...front.querySelectorAll('article-meta > contrib-group > aff'),
67
36
  ]);
68
- const { footnotes, footnoteIDs } = jats_front_parser_1.jatsFrontParser.parseFootnoteNodes([
37
+ const { footnotes, footnoteIDs } = jats_front_parser_1.jatsFrontParser.parseAuthorNotes([
69
38
  ...front.querySelectorAll('article-meta > author-notes > fn:not([fn-type])'),
70
39
  ]);
71
- const { correspondingList, correspondingIDs } = jats_front_parser_1.jatsFrontParser.parseCorrespNodes([
40
+ const { correspondingList, correspondingIDs } = jats_front_parser_1.jatsFrontParser.parseCorresp([
72
41
  ...front.querySelectorAll('article-meta > author-notes > corresp'),
73
42
  ]);
74
- const authors = jats_front_parser_1.jatsFrontParser.parseAuthorNodes([
43
+ const authors = jats_front_parser_1.jatsFrontParser.parseContributors([
75
44
  ...front.querySelectorAll('article-meta > contrib-group > contrib[contrib-type="author"]'),
76
45
  ], affiliationIDs, footnoteIDs, correspondingIDs);
77
- const history = jats_front_parser_1.jatsFrontParser.parseDates(front.querySelector('article-meta > history'));
78
46
  const supplements = jats_front_parser_1.jatsFrontParser.parseSupplements([
79
47
  ...front.querySelectorAll('article-meta > supplementary-material'),
80
48
  ]);
81
- const manuscript = Object.assign(Object.assign(Object.assign({}, (0, builders_1.buildManuscript)()), manuscriptMeta), history);
82
- return {
83
- models: generateModelIDs([
84
- titles,
85
- manuscript,
86
- ...footnotes,
87
- ...correspondingList,
88
- journal,
89
- ...supplements,
90
- ]),
91
- authors: [...authors],
92
- affiliations: [...affiliations],
93
- };
49
+ const history = jats_front_parser_1.jatsFrontParser.parseDates(front.querySelector('article-meta > history'));
50
+ const counts = jats_front_parser_1.jatsFrontParser.parseCounts(front.querySelector('article-meta counts'));
51
+ const manuscript = Object.assign(Object.assign(Object.assign({}, (0, builders_1.buildManuscript)()), counts), history);
52
+ return generateIDs([
53
+ manuscript,
54
+ titles,
55
+ journal,
56
+ ...footnotes,
57
+ ...authors,
58
+ ...affiliations,
59
+ ...correspondingList,
60
+ ...supplements,
61
+ ]);
94
62
  };
95
63
  exports.parseJATSFront = parseJATSFront;
96
- const parseJATSReferences = (back, body, createElement) => {
97
- const bibliographyItems = [];
98
- const crossReferences = [];
99
- let referenceQueriesMap;
100
- let referenceIdsMap;
101
- if (back) {
102
- const { references, referenceIDs, referenceQueries } = jats_reference_parser_1.jatsReferenceParser.parseReferences([...back.querySelectorAll('ref-list > ref')], createElement);
103
- bibliographyItems.push(...references);
104
- referenceQueriesMap = new Map([...referenceQueries]);
105
- referenceIdsMap = new Map([...referenceIDs]);
106
- if (body) {
107
- crossReferences.push(...jats_reference_parser_1.jatsReferenceParser.parseCrossReferences([...body.querySelectorAll('xref'), ...back.querySelectorAll('xref')], referenceIDs));
108
- }
109
- }
110
- return {
111
- references: generateModelIDs(bibliographyItems),
112
- crossReferences: generateModelIDs(crossReferences),
113
- referenceQueriesMap,
114
- referenceIdsMap,
115
- };
116
- };
117
- exports.parseJATSReferences = parseJATSReferences;
118
- const parseJATSBody = (document, body, bibliographyItems, authors, affiliations, refModels, referenceIdsMap, footnotesOrder) => {
119
- const createElement = createElementFn(document);
120
- const orderedFootnotesIDs = (0, footnotes_order_1.createOrderedFootnotesIDs)(document);
121
- jats_body_transformations_1.jatsBodyTransformations.moveFloatsGroupToBody(document, body, createElement);
64
+ const parseJATSBody = (doc, body, references) => {
65
+ const createElement = createElementFn(doc);
122
66
  jats_body_transformations_1.jatsBodyTransformations.ensureSection(body, createElement);
123
- jats_body_transformations_1.jatsBodyTransformations.moveSectionsToBody(document, body, bibliographyItems, createElement);
124
67
  jats_body_transformations_1.jatsBodyTransformations.moveCaptionsToEnd(body);
68
+ jats_body_transformations_1.jatsBodyTransformations.fixTables(body, createElement);
125
69
  jats_body_transformations_1.jatsBodyTransformations.moveTableFooterToEnd(body);
126
- jats_body_transformations_1.jatsBodyTransformations.moveBlockNodesFromParagraph(document, body, createElement);
127
- jats_body_transformations_1.jatsBodyTransformations.moveKeywordsToBody(document, body, createElement);
128
- jats_body_transformations_1.jatsBodyTransformations.moveAffiliationsToBody(document, affiliations, body, createElement);
129
- jats_body_transformations_1.jatsBodyTransformations.moveAuthorsToBody(document, authors, body, createElement);
130
- const node = jats_body_dom_parser_1.jatsBodyDOMParser.parse(body);
131
- if (!node.firstChild) {
70
+ jats_body_transformations_1.jatsBodyTransformations.createBody(doc, body, createElement);
71
+ jats_body_transformations_1.jatsBodyTransformations.createAbstracts(doc, body, createElement);
72
+ jats_body_transformations_1.jatsBodyTransformations.createBackmatter(doc, body, createElement);
73
+ jats_body_transformations_1.jatsBodyTransformations.createKeywords(doc, body, createElement);
74
+ const node = jats_body_dom_parser_1.jatsBodyDOMParser.parse(body).firstChild;
75
+ if (!node) {
132
76
  throw new Error('No content was parsed from the JATS article body');
133
77
  }
134
- const { replacements } = (0, jats_parser_utils_1.fixBodyPMNode)(node.firstChild, refModels, referenceIdsMap);
135
- if (footnotesOrder) {
136
- (0, footnotes_order_1.handleFootnotesOrder)(orderedFootnotesIDs, replacements, footnotesOrder);
137
- }
138
- return node.firstChild;
78
+ const replacements = new Map(references === null || references === void 0 ? void 0 : references.IDs);
79
+ (0, jats_parser_utils_1.updateDocumentIDs)(node, replacements);
80
+ return (0, transformer_1.encode)(node).values();
139
81
  };
140
82
  exports.parseJATSBody = parseJATSBody;
141
- const transformTables = (tables, createElement) => {
142
- tables.forEach((table) => {
143
- const colgroup = table.querySelector('colgroup');
144
- const cols = table.querySelectorAll('col');
145
- if (!colgroup && table.firstChild && cols.length > 0) {
146
- const colgroup = createElement('colgroup');
147
- for (const col of cols) {
148
- colgroup.appendChild(col);
149
- }
150
- table.insertBefore(colgroup, table.firstChild);
151
- }
152
- const tbody = table.querySelector('tbody');
153
- if (tbody) {
154
- const headerRow = table.querySelector('thead > tr');
155
- if (!headerRow) {
156
- const tr = createElement('tr');
157
- tbody.insertBefore(tr, tbody.firstElementChild);
158
- }
159
- const footerRow = table.querySelector('tfoot > tr');
160
- if (!footerRow) {
161
- const tr = createElement('tr');
162
- tbody.appendChild(tr);
163
- }
164
- }
165
- });
83
+ const createBibliographyModels = (references) => {
84
+ const models = [];
85
+ const bibliographyItems = references.getBibliographyItems();
86
+ const bibliographyElement = (0, transformer_1.buildBibliographyElement)(bibliographyItems);
87
+ const bibliographySection = Object.assign(Object.assign({}, (0, transformer_1.buildSection)(99)), { category: 'MPSectionCategory:bibliography', elementIDs: [bibliographyElement._id], title: 'References' });
88
+ const comments = (0, jats_comments_1.createReferenceComments)(references);
89
+ models.push(bibliographySection);
90
+ models.push(bibliographyElement);
91
+ models.push(...bibliographyItems);
92
+ models.push(...comments);
93
+ return models;
166
94
  };
167
95
  const createElementFn = (doc) => (tagName) => doc.createElement(tagName);
168
- const generateModelIDs = (models) => models.map((m) => m._id ? m : Object.assign(Object.assign({}, m), { _id: (0, id_1.generateID)(m.objectType) }));
169
- const parseJATSArticle = async (doc) => {
170
- const articleElement = doc.querySelector('article');
96
+ const generateIDs = (models) => models.map((m) => m._id ? m : Object.assign(Object.assign({}, m), { _id: (0, id_1.generateID)(m.objectType) }));
97
+ const parseJATSArticle = (doc) => {
98
+ const article = doc.querySelector('article');
171
99
  const front = doc.querySelector('front');
172
100
  const body = doc.querySelector('body');
173
101
  const back = doc.querySelector('back');
174
102
  if (!front) {
175
103
  throw new errors_1.InvalidInput('Invalid JATS format! Missing front element');
176
104
  }
177
- if (!articleElement) {
105
+ if (!article) {
178
106
  throw new errors_1.InvalidInput('Invalid JATS format! Missing article element');
179
107
  }
180
- const authorQueriesMap = (0, jats_comments_1.markProcessingInstructions)(doc);
181
- const createElement = createElementFn(document);
182
- const { models: frontModels, authors, affiliations, } = await (0, exports.parseJATSFront)(front);
183
- const { references, crossReferences, referenceQueriesMap, referenceIdsMap } = (0, exports.parseJATSReferences)(back, body, createElement);
184
- transformTables(doc.querySelectorAll('table-wrap > table'), createElement);
185
- const footnotesOrder = (0, footnotes_order_1.createEmptyFootnotesOrder)();
186
- let elementsOrder = [];
187
- const bodyModels = [];
108
+ const marks = (0, jats_comments_1.markComments)(doc);
109
+ const createElement = createElementFn(doc);
110
+ const models = [];
111
+ let references;
112
+ if (back) {
113
+ references = jats_reference_parser_1.jatsReferenceParser.parseReferences([...back.querySelectorAll('ref-list > ref')], createElement);
114
+ }
115
+ models.push(...(0, exports.parseJATSFront)(doc, front));
188
116
  if (body) {
189
- const bodyDoc = (0, exports.parseJATSBody)(doc, body, references, authors, affiliations, crossReferences, referenceIdsMap, footnotesOrder);
190
- bodyModels.push(...(0, encode_1.encode)(bodyDoc).values());
191
- elementsOrder = (0, exports.getElementsOrder)(bodyDoc);
117
+ models.push(...(0, exports.parseJATSBody)(doc, body, references));
192
118
  }
193
- const frontModelsMap = new Map(frontModels.map((model) => [model._id, model]));
194
- const manuscript = (0, project_bundle_1.findManuscript)(frontModelsMap);
119
+ const modelMap = new Map(models.map((model) => [model._id, model]));
120
+ const manuscript = (0, project_bundle_1.findManuscript)(modelMap);
195
121
  if (manuscript) {
196
- const articleType = articleElement.getAttribute('article-type');
197
- manuscript.articleType = articleType || 'other';
122
+ const type = article.getAttribute('article-type');
123
+ manuscript.articleType = type || 'other';
198
124
  }
199
- const models = [
200
- ...frontModels,
201
- ...bodyModels,
202
- ...crossReferences,
203
- ...elementsOrder,
204
- ];
205
- if (footnotesOrder.footnotesList.length > 0) {
206
- models.push(footnotesOrder);
125
+ if (references) {
126
+ models.push(...createBibliographyModels(references));
207
127
  }
208
- if (authorQueriesMap.size) {
209
- const commentAnnotations = (0, jats_comments_1.createComments)(authorQueriesMap, models);
210
- models.push(...commentAnnotations);
211
- }
212
- if (referenceQueriesMap && referenceQueriesMap.size) {
213
- const commentAnnotations = (0, jats_comments_1.createReferenceComments)(referenceQueriesMap, references);
214
- models.push(...commentAnnotations);
128
+ if (marks.length) {
129
+ const comments = (0, jats_comments_1.createComments)(models, marks);
130
+ models.push(...comments);
215
131
  }
216
132
  return models;
217
133
  };
218
134
  exports.parseJATSArticle = parseJATSArticle;
219
- const getElementsOrder = (node) => {
220
- const elementsOrderIndex = new Map();
221
- const models = [];
222
- node.descendants((child) => {
223
- const type = child.type;
224
- if (transformer_1.auxiliaryObjectTypes.has(type)) {
225
- const index = elementsOrderIndex.get(type);
226
- if (index !== undefined) {
227
- const elementsOrder = models[index];
228
- elementsOrder.elements.push(child.attrs['id']);
229
- }
230
- else {
231
- const elementsOrder = (0, builders_1.buildElementsOrder)(transformer_1.nodeTypesMap.get(type));
232
- elementsOrder.elements.push(child.attrs['id']);
233
- models.push(elementsOrder);
234
- elementsOrderIndex.set(type, elementsOrderIndex.size);
235
- }
236
- }
237
- });
238
- return models;
239
- };
240
- exports.getElementsOrder = getElementsOrder;
@@ -29,12 +29,10 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
29
29
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
30
30
  };
31
31
  Object.defineProperty(exports, "__esModule", { value: true });
32
- exports.getElementsOrder = exports.parseJATSArticle = exports.parseJATSBody = exports.parseJATSReferences = exports.parseJATSFront = void 0;
32
+ exports.parseJATSArticle = exports.parseJATSBody = exports.parseJATSFront = void 0;
33
33
  var importer_1 = require("./importer");
34
34
  Object.defineProperty(exports, "parseJATSFront", { enumerable: true, get: function () { return importer_1.parseJATSFront; } });
35
- Object.defineProperty(exports, "parseJATSReferences", { enumerable: true, get: function () { return importer_1.parseJATSReferences; } });
36
35
  Object.defineProperty(exports, "parseJATSBody", { enumerable: true, get: function () { return importer_1.parseJATSBody; } });
37
36
  Object.defineProperty(exports, "parseJATSArticle", { enumerable: true, get: function () { return importer_1.parseJATSArticle; } });
38
- Object.defineProperty(exports, "getElementsOrder", { enumerable: true, get: function () { return importer_1.getElementsOrder; } });
39
37
  __exportStar(require("./jats-exporter"), exports);
40
38
  __exportStar(require("./jats-versions"), exports);