@manuscripts/transform 4.5.7 → 4.6.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.
- package/dist/cjs/jats/__tests__/jats-exporter.test.js +50 -20
- package/dist/cjs/jats/__tests__/jats-importer.test.js +26 -0
- package/dist/cjs/jats/__tests__/jats-roundtrip.test.js +6 -1
- package/dist/cjs/jats/exporter/JATSExporterBase.js +118 -0
- package/dist/cjs/jats/exporter/jats-exporter.js +227 -349
- package/dist/cjs/jats/exporter/lib.js +62 -0
- package/dist/cjs/jats/importer/jats-dom-parser.js +11 -3
- package/dist/cjs/schema/index.js +4 -1
- package/dist/cjs/schema/migration/migration-scripts/4.5.9.js +30 -0
- package/dist/cjs/schema/migration/migration-scripts/index.js +3 -1
- package/dist/cjs/schema/nodes/bibliography_element.js +0 -1
- package/dist/cjs/schema/nodes/bio.js +24 -0
- package/dist/cjs/schema/nodes/contributor.js +1 -2
- package/dist/cjs/schema/nodes/keywords_element.js +0 -1
- package/dist/cjs/types.js +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/es/jats/__tests__/jats-exporter.test.js +47 -20
- package/dist/es/jats/__tests__/jats-importer.test.js +26 -0
- package/dist/es/jats/__tests__/jats-roundtrip.test.js +3 -1
- package/dist/es/jats/exporter/JATSExporterBase.js +114 -0
- package/dist/es/jats/exporter/jats-exporter.js +201 -319
- package/dist/es/jats/exporter/lib.js +55 -0
- package/dist/es/jats/importer/jats-dom-parser.js +11 -3
- package/dist/es/schema/index.js +4 -1
- package/dist/es/schema/migration/migration-scripts/4.5.9.js +28 -0
- package/dist/es/schema/migration/migration-scripts/index.js +3 -1
- package/dist/es/schema/nodes/bibliography_element.js +0 -1
- package/dist/es/schema/nodes/bio.js +20 -0
- package/dist/es/schema/nodes/contributor.js +1 -2
- package/dist/es/schema/nodes/keywords_element.js +0 -1
- package/dist/es/types.js +1 -1
- package/dist/es/version.js +1 -1
- package/dist/types/jats/exporter/JATSExporterBase.d.ts +35 -0
- package/dist/types/jats/exporter/jats-exporter.d.ts +23 -19
- package/dist/types/jats/exporter/lib.d.ts +23 -0
- package/dist/types/schema/index.d.ts +2 -1
- package/dist/types/schema/migration/migration-scripts/4.5.9.d.ts +8 -0
- package/dist/types/schema/migration/migration-scripts/index.d.ts +3 -2
- package/dist/types/schema/nodes/bio.d.ts +10 -0
- package/dist/types/schema/types.d.ts +1 -1
- package/dist/types/types.d.ts +1 -1
- package/dist/types/version.d.ts +1 -1
- package/package.json +4 -4
- package/src/jats/__tests__/__fixtures__/jats-import.xml +7 -0
- package/src/jats/__tests__/__snapshots__/jats-importer.test.ts.snap +272 -151
- package/src/jats/__tests__/__snapshots__/jats-roundtrip.test.ts.snap +2 -2
- package/src/jats/__tests__/jats-exporter.test.ts +60 -20
- package/src/jats/__tests__/jats-importer.test.ts +37 -0
- package/src/jats/__tests__/jats-roundtrip.test.ts +3 -1
- package/src/jats/exporter/JATSExporterBase.ts +164 -0
- package/src/jats/exporter/jats-exporter.ts +217 -386
- package/src/jats/exporter/lib.ts +69 -0
- package/src/jats/importer/jats-dom-parser.ts +15 -5
- package/src/schema/index.ts +4 -1
- package/src/schema/migration/migration-scripts/4.5.9.ts +62 -0
- package/src/schema/migration/migration-scripts/index.ts +3 -1
- package/src/schema/nodes/bibliography_element.ts +0 -1
- package/src/schema/nodes/bio.ts +48 -0
- package/src/schema/nodes/contributor.ts +1 -2
- package/src/schema/nodes/keywords_element.ts +0 -1
- package/src/schema/types.ts +1 -0
- package/src/types.ts +1 -1
- package/src/version.ts +1 -1
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* © 2026 Atypon Systems LLC
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
import { schema } from '../../schema';
|
|
17
|
+
export const normalizeID = (id) => id.replace(/:/g, '_');
|
|
18
|
+
export const createCounter = () => {
|
|
19
|
+
const counts = new Map();
|
|
20
|
+
return {
|
|
21
|
+
increment: (field) => {
|
|
22
|
+
const value = counts.get(field);
|
|
23
|
+
const newValue = value === undefined ? 1 : value + 1;
|
|
24
|
+
counts.set(field, newValue);
|
|
25
|
+
return newValue;
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
export const createDefaultIDGenerator = () => {
|
|
30
|
+
const counter = createCounter();
|
|
31
|
+
return async (element) => {
|
|
32
|
+
const value = String(counter.increment(element.nodeName));
|
|
33
|
+
return `${element.localName}-${value}`;
|
|
34
|
+
};
|
|
35
|
+
};
|
|
36
|
+
export const chooseRefType = (type) => {
|
|
37
|
+
switch (type) {
|
|
38
|
+
case schema.nodes.figure:
|
|
39
|
+
case schema.nodes.figure_element:
|
|
40
|
+
return 'fig';
|
|
41
|
+
case schema.nodes.footnote:
|
|
42
|
+
return 'fn';
|
|
43
|
+
case schema.nodes.table:
|
|
44
|
+
case schema.nodes.table_element:
|
|
45
|
+
return 'table';
|
|
46
|
+
case schema.nodes.section:
|
|
47
|
+
case schema.nodes.abstract:
|
|
48
|
+
return 'sec';
|
|
49
|
+
case schema.nodes.equation:
|
|
50
|
+
case schema.nodes.equation_element:
|
|
51
|
+
return 'disp-formula';
|
|
52
|
+
case schema.nodes.supplement:
|
|
53
|
+
return 'supplementary-material';
|
|
54
|
+
}
|
|
55
|
+
};
|
|
@@ -375,7 +375,7 @@ export class JATSDOMParser {
|
|
|
375
375
|
const footnoteIDs = [];
|
|
376
376
|
const affiliationIDs = [];
|
|
377
377
|
const correspIDs = [];
|
|
378
|
-
const xrefs = element.querySelectorAll('xref');
|
|
378
|
+
const xrefs = element.querySelectorAll(':scope > xref');
|
|
379
379
|
for (const xref of xrefs) {
|
|
380
380
|
const rid = xref.getAttribute('rid');
|
|
381
381
|
const type = xref.getAttribute('ref-type');
|
|
@@ -413,10 +413,18 @@ export class JATSDOMParser {
|
|
|
413
413
|
email: getTrimmedTextContent(element, 'email') || '',
|
|
414
414
|
};
|
|
415
415
|
},
|
|
416
|
-
getContent: () => {
|
|
417
|
-
|
|
416
|
+
getContent: (node) => {
|
|
417
|
+
const bio = node.querySelector('bio');
|
|
418
|
+
if (!bio) {
|
|
419
|
+
return Fragment.empty;
|
|
420
|
+
}
|
|
421
|
+
return Fragment.from(this.parse(bio, { topNode: this.schema.nodes.bio.create() }));
|
|
418
422
|
},
|
|
419
423
|
},
|
|
424
|
+
{
|
|
425
|
+
tag: 'bio',
|
|
426
|
+
node: 'bio',
|
|
427
|
+
},
|
|
420
428
|
{
|
|
421
429
|
tag: 'affiliations',
|
|
422
430
|
node: 'affiliations',
|
package/dist/es/schema/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* ©
|
|
2
|
+
* © 2026 Atypon Systems LLC
|
|
3
3
|
*
|
|
4
4
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
5
|
* you may not use this file except in compliance with the License.
|
|
@@ -33,6 +33,7 @@ import { backmatter } from './nodes/backmatter';
|
|
|
33
33
|
import { bibliographyElement } from './nodes/bibliography_element';
|
|
34
34
|
import { bibliographyItem } from './nodes/bibliography_item';
|
|
35
35
|
import { bibliographySection } from './nodes/bibliography_section';
|
|
36
|
+
import { bio } from './nodes/bio';
|
|
36
37
|
import { blockquoteElement } from './nodes/blockquote_element';
|
|
37
38
|
import { body } from './nodes/body';
|
|
38
39
|
import { box_element } from './nodes/box_element';
|
|
@@ -112,6 +113,7 @@ export * from './nodes/awards';
|
|
|
112
113
|
export * from './nodes/bibliography_element';
|
|
113
114
|
export * from './nodes/bibliography_item';
|
|
114
115
|
export * from './nodes/bibliography_section';
|
|
116
|
+
export * from './nodes/bio';
|
|
115
117
|
export * from './nodes/blockquote_element';
|
|
116
118
|
export * from './nodes/box_element';
|
|
117
119
|
export * from './nodes/caption';
|
|
@@ -197,6 +199,7 @@ export const schema = new Schema({
|
|
|
197
199
|
bibliography_element: bibliographyElement,
|
|
198
200
|
bibliography_section: bibliographySection,
|
|
199
201
|
blockquote_element: blockquoteElement,
|
|
202
|
+
bio: bio,
|
|
200
203
|
list: list,
|
|
201
204
|
caption,
|
|
202
205
|
caption_title: captionTitle,
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
const LEGACY_CONTENTS_NODES = new Set([
|
|
2
|
+
'contributor',
|
|
3
|
+
'bibliography_element',
|
|
4
|
+
'keywords_element',
|
|
5
|
+
]);
|
|
6
|
+
class Migration459 {
|
|
7
|
+
constructor() {
|
|
8
|
+
this.fromVersion = '4.5.8';
|
|
9
|
+
this.toVersion = '4.5.9';
|
|
10
|
+
}
|
|
11
|
+
migrateNode(node) {
|
|
12
|
+
if (LEGACY_CONTENTS_NODES.has(node.type) &&
|
|
13
|
+
node.attrs &&
|
|
14
|
+
'contents' in node.attrs) {
|
|
15
|
+
const attrs = { ...node.attrs };
|
|
16
|
+
delete attrs.contents;
|
|
17
|
+
node = { ...node, attrs };
|
|
18
|
+
}
|
|
19
|
+
if (node.type === 'contributor') {
|
|
20
|
+
const bio = node.content?.filter((child) => child.type === 'bio');
|
|
21
|
+
const migrated = { ...node };
|
|
22
|
+
delete migrated.content;
|
|
23
|
+
return bio?.length ? { ...migrated, content: bio } : migrated;
|
|
24
|
+
}
|
|
25
|
+
return node;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
export default Migration459;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* ©
|
|
2
|
+
* © 2026 Atypon Systems LLC
|
|
3
3
|
*
|
|
4
4
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
5
|
* you may not use this file except in compliance with the License.
|
|
@@ -30,6 +30,7 @@ import Migration4335 from './4.3.35';
|
|
|
30
30
|
import Migration442 from './4.4.2';
|
|
31
31
|
import Migration447 from './4.4.7';
|
|
32
32
|
import Migration453 from './4.5.3';
|
|
33
|
+
import Migration459 from './4.5.9';
|
|
33
34
|
const migrations = [
|
|
34
35
|
new Migration125(),
|
|
35
36
|
new Migration2322(),
|
|
@@ -48,5 +49,6 @@ const migrations = [
|
|
|
48
49
|
new Migration442(),
|
|
49
50
|
new Migration447(),
|
|
50
51
|
new Migration453(),
|
|
52
|
+
new Migration459(),
|
|
51
53
|
];
|
|
52
54
|
export default migrations;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export const bio = {
|
|
2
|
+
content: 'image_element? paragraph',
|
|
3
|
+
attrs: {
|
|
4
|
+
id: { default: '' },
|
|
5
|
+
dataTracked: { default: null },
|
|
6
|
+
},
|
|
7
|
+
group: 'block',
|
|
8
|
+
toDOM: (node) => {
|
|
9
|
+
const bioNode = node;
|
|
10
|
+
return [
|
|
11
|
+
'div',
|
|
12
|
+
{
|
|
13
|
+
class: 'bio',
|
|
14
|
+
id: bioNode.attrs.id,
|
|
15
|
+
},
|
|
16
|
+
0,
|
|
17
|
+
];
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
export const isBioNode = (node) => node.type === node.type.schema.nodes.bio;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export const contributor = {
|
|
2
|
-
content: '
|
|
2
|
+
content: 'bio?',
|
|
3
3
|
atom: true,
|
|
4
4
|
attrs: {
|
|
5
5
|
id: { default: '' },
|
|
@@ -20,7 +20,6 @@ export const contributor = {
|
|
|
20
20
|
priority: { default: undefined },
|
|
21
21
|
creditRoles: { default: [] },
|
|
22
22
|
dataTracked: { default: null },
|
|
23
|
-
contents: { default: '' },
|
|
24
23
|
},
|
|
25
24
|
group: 'block',
|
|
26
25
|
toDOM: (node) => {
|
package/dist/es/types.js
CHANGED
package/dist/es/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const VERSION = "4.
|
|
1
|
+
export const VERSION = "4.6.0";
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* © 2026 Atypon Systems LLC
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
import { DOMSerializer, type NodeType } from 'prosemirror-model';
|
|
17
|
+
import { ManuscriptNode, ManuscriptNodeType } from '../../schema';
|
|
18
|
+
export declare class JATSExporterBase {
|
|
19
|
+
private nodesMap;
|
|
20
|
+
protected manuscriptNode: ManuscriptNode;
|
|
21
|
+
protected document: Document;
|
|
22
|
+
protected serializer: DOMSerializer;
|
|
23
|
+
isChildOfNodeType(targetID: string, type: NodeType, descend?: boolean): boolean;
|
|
24
|
+
protected populateNodesMap: () => void;
|
|
25
|
+
getChildrenOfType<T extends ManuscriptNode>(type: NodeType, node?: ManuscriptNode): T[];
|
|
26
|
+
getFirstChildOfType<T extends ManuscriptNode>(type: NodeType, node?: ManuscriptNode): T | undefined;
|
|
27
|
+
protected fillEmptyElements($article: Element, selector: string, tagName?: string): void;
|
|
28
|
+
protected createElement: (tag: string, content?: string, attrs?: Record<string, string | undefined>) => HTMLElement;
|
|
29
|
+
protected appendElement: ($parent: Element, tag: string, content?: string, attrs?: Record<string, string | undefined>) => HTMLElement;
|
|
30
|
+
protected changeTag: ($node: Element, tag: string) => HTMLElement;
|
|
31
|
+
protected createElementWithID(node: ManuscriptNode, nodeName: string): HTMLElement;
|
|
32
|
+
protected serializeNode(node: ManuscriptNode): Node;
|
|
33
|
+
protected appendChildIfPresent($parent: Element, tagName: string, textContent: string): void;
|
|
34
|
+
protected processChildNodes: ($element: Element, node: ManuscriptNode, contentNodeType: ManuscriptNodeType) => void;
|
|
35
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* ©
|
|
2
|
+
* © 2026 Atypon Systems LLC
|
|
3
3
|
*
|
|
4
4
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
5
|
* you may not use this file except in compliance with the License.
|
|
@@ -13,14 +13,12 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
import {
|
|
17
|
-
import { ActualManuscriptNode, ManuscriptNode } from '../../schema';
|
|
16
|
+
import { DOMOutputSpec } from 'prosemirror-model';
|
|
17
|
+
import { ActualManuscriptNode, ManuscriptNode, ManuscriptNodeType } from '../../schema';
|
|
18
18
|
import { IDGenerator } from '../types';
|
|
19
19
|
import { Version } from './jats-versions';
|
|
20
20
|
import { Target } from './labels';
|
|
21
|
-
|
|
22
|
-
increment: (field: string) => number;
|
|
23
|
-
};
|
|
21
|
+
import { JATSExporterBase } from './JATSExporterBase';
|
|
24
22
|
export type CSLOptions = {
|
|
25
23
|
style: string;
|
|
26
24
|
locale: string;
|
|
@@ -29,20 +27,14 @@ export type ExportOptions = {
|
|
|
29
27
|
version?: Version;
|
|
30
28
|
csl: CSLOptions;
|
|
31
29
|
};
|
|
32
|
-
export declare class JATSExporter {
|
|
33
|
-
protected document: Document;
|
|
34
|
-
protected serializer: DOMSerializer;
|
|
30
|
+
export declare class JATSExporter extends JATSExporterBase {
|
|
35
31
|
protected labelTargets: Map<string, Target>;
|
|
36
32
|
protected footnoteLabels: Map<string, string>;
|
|
37
33
|
protected manuscriptNode: ActualManuscriptNode;
|
|
38
34
|
private engine;
|
|
39
35
|
private renderedCitations;
|
|
40
|
-
private nodesMap;
|
|
41
36
|
private contributorLabels;
|
|
42
|
-
|
|
43
|
-
protected getFirstChildOfType<T extends ManuscriptNode>(type: NodeType, node?: ManuscriptNode): T | undefined;
|
|
44
|
-
protected getChildrenOfType<T extends ManuscriptNode>(type: NodeType, node?: ManuscriptNode): T[];
|
|
45
|
-
serializeToJATS: (manuscriptNode: ActualManuscriptNode, options: ExportOptions) => Promise<string>;
|
|
37
|
+
export: (manuscriptNode: ActualManuscriptNode, options: ExportOptions) => Promise<Document>;
|
|
46
38
|
private appendChildNodeOfType;
|
|
47
39
|
private appendChildrenNodeOfType;
|
|
48
40
|
protected appendCaption: ($element: Element, node: ManuscriptNode) => void;
|
|
@@ -66,11 +58,25 @@ export declare class JATSExporter {
|
|
|
66
58
|
private routeBackmatterSections;
|
|
67
59
|
private extractCoiStatement;
|
|
68
60
|
private buildRefList;
|
|
69
|
-
private createElement;
|
|
70
|
-
private appendElement;
|
|
71
61
|
protected createSerializer: () => void;
|
|
62
|
+
appendLabels($element: Element, node: ManuscriptNode): void;
|
|
63
|
+
appendAttributions($element: Element, node: ManuscriptNode): void;
|
|
64
|
+
appendTable($element: Element, node: ManuscriptNode): void;
|
|
65
|
+
createBoxElement(node: ManuscriptNode): HTMLElement;
|
|
66
|
+
abstractTypeAttrs(category: string): {
|
|
67
|
+
'abstract-type': string;
|
|
68
|
+
} | {
|
|
69
|
+
'abstract-type'?: undefined;
|
|
70
|
+
};
|
|
71
|
+
createAbstract(node: ManuscriptNode): DOMOutputSpec;
|
|
72
|
+
createTransAbstract(node: ManuscriptNode): DOMOutputSpec;
|
|
73
|
+
private createGraphic;
|
|
74
|
+
createImage(node: ManuscriptNode): HTMLElement | "";
|
|
75
|
+
createFigureElement(node: ManuscriptNode, contentNodeType: ManuscriptNodeType): HTMLElement;
|
|
76
|
+
moveAltTextAndLongDescToGraphics($element: Element): void;
|
|
77
|
+
createTableElement(node: ManuscriptNode): HTMLElement;
|
|
78
|
+
processExecutableNode(node: ManuscriptNode, $element: Element): void;
|
|
72
79
|
private createEquation;
|
|
73
|
-
protected serializeNode: (node: ManuscriptNode) => Node;
|
|
74
80
|
private buildContributorGroup;
|
|
75
81
|
private buildAuthorNotes;
|
|
76
82
|
private computeContributorLabels;
|
|
@@ -83,12 +89,10 @@ export declare class JATSExporter {
|
|
|
83
89
|
private writeFootnote;
|
|
84
90
|
private appendAuthorNotes;
|
|
85
91
|
private buildKeywords;
|
|
86
|
-
private changeTag;
|
|
87
92
|
private normalizeTable;
|
|
88
93
|
private buildAbstracts;
|
|
89
94
|
sectionToFootnote: ($section: Element, fnType: string) => HTMLElement;
|
|
90
95
|
private buildFloatsGroup;
|
|
91
|
-
private fillEmptyElements;
|
|
92
96
|
private addParagraphsToSections;
|
|
93
97
|
private fillEmptyFootnotes;
|
|
94
98
|
private fillEmptyTableFooters;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* © 2026 Atypon Systems LLC
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
import { ManuscriptNodeType } from '../../schema';
|
|
17
|
+
import { IDGenerator } from '../types';
|
|
18
|
+
export declare const normalizeID: (id: string) => string;
|
|
19
|
+
export declare const createCounter: () => {
|
|
20
|
+
increment: (field: string) => number;
|
|
21
|
+
};
|
|
22
|
+
export declare const createDefaultIDGenerator: () => IDGenerator;
|
|
23
|
+
export declare const chooseRefType: (type: ManuscriptNodeType) => string | undefined;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* ©
|
|
2
|
+
* © 2026 Atypon Systems LLC
|
|
3
3
|
*
|
|
4
4
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
5
|
* you may not use this file except in compliance with the License.
|
|
@@ -32,6 +32,7 @@ export * from './nodes/awards';
|
|
|
32
32
|
export * from './nodes/bibliography_element';
|
|
33
33
|
export * from './nodes/bibliography_item';
|
|
34
34
|
export * from './nodes/bibliography_section';
|
|
35
|
+
export * from './nodes/bio';
|
|
35
36
|
export * from './nodes/blockquote_element';
|
|
36
37
|
export * from './nodes/box_element';
|
|
37
38
|
export * from './nodes/caption';
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { JSONProsemirrorNode } from '../../../types';
|
|
2
|
+
import { MigrationScript } from '../migration-script';
|
|
3
|
+
declare class Migration459 implements MigrationScript {
|
|
4
|
+
fromVersion: string;
|
|
5
|
+
toVersion: string;
|
|
6
|
+
migrateNode(node: JSONProsemirrorNode): JSONProsemirrorNode;
|
|
7
|
+
}
|
|
8
|
+
export default Migration459;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* ©
|
|
2
|
+
* © 2026 Atypon Systems LLC
|
|
3
3
|
*
|
|
4
4
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
5
|
* you may not use this file except in compliance with the License.
|
|
@@ -30,5 +30,6 @@ import Migration4335 from './4.3.35';
|
|
|
30
30
|
import Migration442 from './4.4.2';
|
|
31
31
|
import Migration447 from './4.4.7';
|
|
32
32
|
import Migration453 from './4.5.3';
|
|
33
|
-
|
|
33
|
+
import Migration459 from './4.5.9';
|
|
34
|
+
declare const migrations: (Migration125 | Migration2322 | Migration3012 | Migration3021 | Migration3030 | Migration3031 | Migration3041 | Migration3055 | Migration3056 | Migration4213 | Migration4215 | Migration4323 | Migration4334 | Migration4335 | Migration442 | Migration447 | Migration453 | Migration459)[];
|
|
34
35
|
export default migrations;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { NodeSpec } from 'prosemirror-model';
|
|
2
|
+
import { ManuscriptNode } from '../types';
|
|
3
|
+
export interface BioAttrs {
|
|
4
|
+
id: string;
|
|
5
|
+
}
|
|
6
|
+
export interface BioNode extends ManuscriptNode {
|
|
7
|
+
attrs: BioAttrs;
|
|
8
|
+
}
|
|
9
|
+
export declare const bio: NodeSpec;
|
|
10
|
+
export declare const isBioNode: (node: ManuscriptNode) => node is BioNode;
|
|
@@ -17,7 +17,7 @@ import { Fragment, Mark as ProsemirrorMark, MarkType, Node as ProsemirrorNode, N
|
|
|
17
17
|
import { EditorState, NodeSelection, Plugin, TextSelection, Transaction } from 'prosemirror-state';
|
|
18
18
|
import { EditorView, NodeView } from 'prosemirror-view';
|
|
19
19
|
export type Marks = 'bold' | 'code' | 'italic' | 'smallcaps' | 'strikethrough' | 'styled' | 'subscript' | 'superscript' | 'underline' | 'tracked_insert' | 'tracked_delete';
|
|
20
|
-
export type Nodes = 'attribution' | 'bibliography_item' | 'bibliography_element' | 'bibliography_section' | 'blockquote_element' | 'quote_image' | 'list' | 'caption' | 'caption_title' | 'comment' | 'comments' | 'citation' | 'cross_reference' | 'doc' | 'equation' | 'equation_element' | 'figure' | 'graphical_abstract_section' | 'figure_element' | 'footnote' | 'footnotes_element' | 'footnotes_section' | 'hard_break' | 'highlight_marker' | 'inline_equation' | 'inline_footnote' | 'keyword' | 'keywords_element' | 'keyword_group' | 'keywords' | 'link' | 'list_item' | 'listing' | 'listing_element' | 'manuscript' | 'abstract' | 'abstracts' | 'body' | 'backmatter' | 'missing_figure' | 'paragraph' | 'placeholder' | 'placeholder_element' | 'pullquote_element' | 'section' | 'section_label' | 'section_title' | 'section_title_plain' | 'table' | 'table_cell' | 'table_element' | 'table_row' | 'table_colgroup' | 'table_col' | 'table_header' | 'text' | 'text_block' | 'affiliation' | 'contributor' | 'table_element_footer' | 'title' | 'affiliations' | 'contributors' | 'supplements' | 'supplement' | 'author_notes' | 'corresp' | 'general_table_footnote' | 'box_element' | 'awards' | 'award' | 'embed' | 'image_element' | 'attachment' | 'attachments' | 'alt_title' | 'alt_text' | 'alt_titles' | 'long_desc' | 'hero_image' | 'headshot_grid' | 'headshot_element' | 'headshot_image' | 'trans_abstract' | 'trans_graphical_abstract' | 'subtitle' | 'subtitles';
|
|
20
|
+
export type Nodes = 'attribution' | 'bibliography_item' | 'bibliography_element' | 'bibliography_section' | 'blockquote_element' | 'bio' | 'quote_image' | 'list' | 'caption' | 'caption_title' | 'comment' | 'comments' | 'citation' | 'cross_reference' | 'doc' | 'equation' | 'equation_element' | 'figure' | 'graphical_abstract_section' | 'figure_element' | 'footnote' | 'footnotes_element' | 'footnotes_section' | 'hard_break' | 'highlight_marker' | 'inline_equation' | 'inline_footnote' | 'keyword' | 'keywords_element' | 'keyword_group' | 'keywords' | 'link' | 'list_item' | 'listing' | 'listing_element' | 'manuscript' | 'abstract' | 'abstracts' | 'body' | 'backmatter' | 'missing_figure' | 'paragraph' | 'placeholder' | 'placeholder_element' | 'pullquote_element' | 'section' | 'section_label' | 'section_title' | 'section_title_plain' | 'table' | 'table_cell' | 'table_element' | 'table_row' | 'table_colgroup' | 'table_col' | 'table_header' | 'text' | 'text_block' | 'affiliation' | 'contributor' | 'table_element_footer' | 'title' | 'affiliations' | 'contributors' | 'supplements' | 'supplement' | 'author_notes' | 'corresp' | 'general_table_footnote' | 'box_element' | 'awards' | 'award' | 'embed' | 'image_element' | 'attachment' | 'attachments' | 'alt_title' | 'alt_text' | 'alt_titles' | 'long_desc' | 'hero_image' | 'headshot_grid' | 'headshot_element' | 'headshot_image' | 'trans_abstract' | 'trans_graphical_abstract' | 'subtitle' | 'subtitles';
|
|
21
21
|
export type ManuscriptSchema = Schema<Nodes, Marks>;
|
|
22
22
|
export type ManuscriptEditorState = EditorState;
|
|
23
23
|
export type ManuscriptEditorView = EditorView;
|
package/dist/types/types.d.ts
CHANGED
package/dist/types/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const VERSION = "4.
|
|
1
|
+
export declare const VERSION = "4.6.0";
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@manuscripts/transform",
|
|
3
3
|
"description": "ProseMirror transformer for Manuscripts applications",
|
|
4
|
-
"version": "4.
|
|
4
|
+
"version": "4.6.0",
|
|
5
5
|
"repository": "github:Atypon-OpenSource/manuscripts-transform",
|
|
6
6
|
"license": "Apache-2.0",
|
|
7
7
|
"main": "dist/cjs",
|
|
@@ -39,8 +39,7 @@
|
|
|
39
39
|
"prosemirror-tables": "1.7.1",
|
|
40
40
|
"prosemirror-utils": "1.2.2",
|
|
41
41
|
"semver": "7.7.4",
|
|
42
|
-
"uuid": "14.0.0"
|
|
43
|
-
"w3c-xmlserializer": "5.0.0"
|
|
42
|
+
"uuid": "14.0.0"
|
|
44
43
|
},
|
|
45
44
|
"devDependencies": {
|
|
46
45
|
"@eslint/eslintrc": "3.3.5",
|
|
@@ -80,7 +79,8 @@
|
|
|
80
79
|
"prosemirror-state": "1.4.3",
|
|
81
80
|
"prosemirror-view": "1.39.2",
|
|
82
81
|
"rimraf": "6.1.3",
|
|
83
|
-
"typescript": "6.0.3"
|
|
82
|
+
"typescript": "6.0.3",
|
|
83
|
+
"w3c-xmlserializer": "5.0.0"
|
|
84
84
|
},
|
|
85
85
|
"engines": {
|
|
86
86
|
"node": ">=22"
|
|
@@ -49,6 +49,13 @@
|
|
|
49
49
|
vocab-term-identifier=
|
|
50
50
|
"http://credit.niso.org/contributor-roles/writing-original-draft/"
|
|
51
51
|
degree-contribution="lead">writer</role>
|
|
52
|
+
<bio>
|
|
53
|
+
<graphic xlink:href="agnete-hornnes.png">
|
|
54
|
+
<alt-text>Headshot of Agnete Hviid Hornnes</alt-text>
|
|
55
|
+
</graphic>
|
|
56
|
+
<p>Agnete is a <italic>Professor of Neurology</italic> at Herlev og
|
|
57
|
+
Gentofte Hospital, specializing in stroke research.</p>
|
|
58
|
+
</bio>
|
|
52
59
|
</contrib>
|
|
53
60
|
<contrib contrib-type="author">
|
|
54
61
|
<name>
|