@jxsuite/parser 1.6.0 → 1.8.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/content-loader.js +9 -59
- package/dist/content.js +0 -50
- package/dist/csv.js +100 -51
- package/dist/markdown.js +45509 -49146
- package/dist/serialize.js +7368 -9752
- package/package.json +6 -6
- package/src/Content.class.json +1 -1
- package/src/Csv.class.json +31 -0
- package/src/csv.ts +176 -1
- package/src/transpile.ts +37 -7
package/dist/content-loader.js
CHANGED
|
@@ -1,53 +1,3 @@
|
|
|
1
|
-
import { createRequire } from "node:module";
|
|
2
|
-
var __create = Object.create;
|
|
3
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
4
|
-
var __defProp = Object.defineProperty;
|
|
5
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
-
function __accessProp(key) {
|
|
8
|
-
return this[key];
|
|
9
|
-
}
|
|
10
|
-
var __toESMCache_node;
|
|
11
|
-
var __toESMCache_esm;
|
|
12
|
-
var __toESM = (mod, isNodeMode, target) => {
|
|
13
|
-
var canCache = mod != null && typeof mod === "object";
|
|
14
|
-
if (canCache) {
|
|
15
|
-
var cache = isNodeMode ? __toESMCache_node ??= new WeakMap : __toESMCache_esm ??= new WeakMap;
|
|
16
|
-
var cached = cache.get(mod);
|
|
17
|
-
if (cached)
|
|
18
|
-
return cached;
|
|
19
|
-
}
|
|
20
|
-
target = mod != null ? __create(__getProtoOf(mod)) : {};
|
|
21
|
-
const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
|
|
22
|
-
if (mod && typeof mod === "object" || typeof mod === "function") {
|
|
23
|
-
for (let key of __getOwnPropNames(mod))
|
|
24
|
-
if (!__hasOwnProp.call(to, key))
|
|
25
|
-
__defProp(to, key, {
|
|
26
|
-
get: __accessProp.bind(mod, key),
|
|
27
|
-
enumerable: true
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
if (canCache)
|
|
31
|
-
cache.set(mod, to);
|
|
32
|
-
return to;
|
|
33
|
-
};
|
|
34
|
-
var __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
|
|
35
|
-
var __returnValue = (v) => v;
|
|
36
|
-
function __exportSetter(name, newValue) {
|
|
37
|
-
this[name] = __returnValue.bind(null, newValue);
|
|
38
|
-
}
|
|
39
|
-
var __export = (target, all) => {
|
|
40
|
-
for (var name in all)
|
|
41
|
-
__defProp(target, name, {
|
|
42
|
-
get: all[name],
|
|
43
|
-
enumerable: true,
|
|
44
|
-
configurable: true,
|
|
45
|
-
set: __exportSetter.bind(all, name)
|
|
46
|
-
});
|
|
47
|
-
};
|
|
48
|
-
var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
49
|
-
var __require = /* @__PURE__ */ createRequire(import.meta.url);
|
|
50
|
-
|
|
51
1
|
// src/content-loader.ts
|
|
52
2
|
import { existsSync, readFileSync, readdirSync, statSync } from "node:fs";
|
|
53
3
|
import { basename, dirname, extname, resolve } from "node:path";
|
|
@@ -479,14 +429,14 @@ async function loadContentType(name, contentTypeDef, projectRoot, registry, moun
|
|
|
479
429
|
throw new Error(`Content type "${name}": format "${entry.name}" does not support remote sources ` + `(its format block lacks "remote": true).`);
|
|
480
430
|
}
|
|
481
431
|
try {
|
|
482
|
-
const
|
|
432
|
+
const entries = await entry.call("load", source, {
|
|
483
433
|
directiveOptions,
|
|
484
434
|
schema
|
|
485
435
|
});
|
|
486
436
|
if (schema) {
|
|
487
|
-
validateEntries(
|
|
437
|
+
validateEntries(entries, schema, name);
|
|
488
438
|
}
|
|
489
|
-
return
|
|
439
|
+
return entries;
|
|
490
440
|
} catch (error) {
|
|
491
441
|
console.warn(`Content type "${name}": ${errorMessage(error)}`);
|
|
492
442
|
return [];
|
|
@@ -495,19 +445,19 @@ async function loadContentType(name, contentTypeDef, projectRoot, registry, moun
|
|
|
495
445
|
const resolvedSource = resolve(projectRoot, source).split("\\").join("/");
|
|
496
446
|
const ext = extname(source).toLowerCase();
|
|
497
447
|
if (formatName === "json" || !entry && ext === ".json") {
|
|
498
|
-
const
|
|
499
|
-
const
|
|
500
|
-
for (const filePath of
|
|
448
|
+
const files = discoverJSONFiles(resolvedSource);
|
|
449
|
+
const entries = [];
|
|
450
|
+
for (const filePath of files) {
|
|
501
451
|
const fileEntries = loadJSONEntries(filePath);
|
|
502
452
|
if (mount) {
|
|
503
453
|
rewriteEntryAssets(fileEntries, filePath, mount, name, schema);
|
|
504
454
|
}
|
|
505
|
-
|
|
455
|
+
entries.push(...fileEntries);
|
|
506
456
|
}
|
|
507
457
|
if (schema) {
|
|
508
|
-
validateEntries(
|
|
458
|
+
validateEntries(entries, schema, name);
|
|
509
459
|
}
|
|
510
|
-
return
|
|
460
|
+
return entries;
|
|
511
461
|
}
|
|
512
462
|
if (!entry && ext) {
|
|
513
463
|
entry = registry.byExtension(ext, "load");
|
package/dist/content.js
CHANGED
|
@@ -1,53 +1,3 @@
|
|
|
1
|
-
import { createRequire } from "node:module";
|
|
2
|
-
var __create = Object.create;
|
|
3
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
4
|
-
var __defProp = Object.defineProperty;
|
|
5
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
-
function __accessProp(key) {
|
|
8
|
-
return this[key];
|
|
9
|
-
}
|
|
10
|
-
var __toESMCache_node;
|
|
11
|
-
var __toESMCache_esm;
|
|
12
|
-
var __toESM = (mod, isNodeMode, target) => {
|
|
13
|
-
var canCache = mod != null && typeof mod === "object";
|
|
14
|
-
if (canCache) {
|
|
15
|
-
var cache = isNodeMode ? __toESMCache_node ??= new WeakMap : __toESMCache_esm ??= new WeakMap;
|
|
16
|
-
var cached = cache.get(mod);
|
|
17
|
-
if (cached)
|
|
18
|
-
return cached;
|
|
19
|
-
}
|
|
20
|
-
target = mod != null ? __create(__getProtoOf(mod)) : {};
|
|
21
|
-
const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
|
|
22
|
-
if (mod && typeof mod === "object" || typeof mod === "function") {
|
|
23
|
-
for (let key of __getOwnPropNames(mod))
|
|
24
|
-
if (!__hasOwnProp.call(to, key))
|
|
25
|
-
__defProp(to, key, {
|
|
26
|
-
get: __accessProp.bind(mod, key),
|
|
27
|
-
enumerable: true
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
if (canCache)
|
|
31
|
-
cache.set(mod, to);
|
|
32
|
-
return to;
|
|
33
|
-
};
|
|
34
|
-
var __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
|
|
35
|
-
var __returnValue = (v) => v;
|
|
36
|
-
function __exportSetter(name, newValue) {
|
|
37
|
-
this[name] = __returnValue.bind(null, newValue);
|
|
38
|
-
}
|
|
39
|
-
var __export = (target, all) => {
|
|
40
|
-
for (var name in all)
|
|
41
|
-
__defProp(target, name, {
|
|
42
|
-
get: all[name],
|
|
43
|
-
enumerable: true,
|
|
44
|
-
configurable: true,
|
|
45
|
-
set: __exportSetter.bind(all, name)
|
|
46
|
-
});
|
|
47
|
-
};
|
|
48
|
-
var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
49
|
-
var __require = /* @__PURE__ */ createRequire(import.meta.url);
|
|
50
|
-
|
|
51
1
|
// src/dates.ts
|
|
52
2
|
var DATE_FORMATS = ["date", "date-time"];
|
|
53
3
|
function isDateFormat(format) {
|
package/dist/csv.js
CHANGED
|
@@ -1,53 +1,3 @@
|
|
|
1
|
-
import { createRequire } from "node:module";
|
|
2
|
-
var __create = Object.create;
|
|
3
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
4
|
-
var __defProp = Object.defineProperty;
|
|
5
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
-
function __accessProp(key) {
|
|
8
|
-
return this[key];
|
|
9
|
-
}
|
|
10
|
-
var __toESMCache_node;
|
|
11
|
-
var __toESMCache_esm;
|
|
12
|
-
var __toESM = (mod, isNodeMode, target) => {
|
|
13
|
-
var canCache = mod != null && typeof mod === "object";
|
|
14
|
-
if (canCache) {
|
|
15
|
-
var cache = isNodeMode ? __toESMCache_node ??= new WeakMap : __toESMCache_esm ??= new WeakMap;
|
|
16
|
-
var cached = cache.get(mod);
|
|
17
|
-
if (cached)
|
|
18
|
-
return cached;
|
|
19
|
-
}
|
|
20
|
-
target = mod != null ? __create(__getProtoOf(mod)) : {};
|
|
21
|
-
const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
|
|
22
|
-
if (mod && typeof mod === "object" || typeof mod === "function") {
|
|
23
|
-
for (let key of __getOwnPropNames(mod))
|
|
24
|
-
if (!__hasOwnProp.call(to, key))
|
|
25
|
-
__defProp(to, key, {
|
|
26
|
-
get: __accessProp.bind(mod, key),
|
|
27
|
-
enumerable: true
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
if (canCache)
|
|
31
|
-
cache.set(mod, to);
|
|
32
|
-
return to;
|
|
33
|
-
};
|
|
34
|
-
var __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
|
|
35
|
-
var __returnValue = (v) => v;
|
|
36
|
-
function __exportSetter(name, newValue) {
|
|
37
|
-
this[name] = __returnValue.bind(null, newValue);
|
|
38
|
-
}
|
|
39
|
-
var __export = (target, all) => {
|
|
40
|
-
for (var name in all)
|
|
41
|
-
__defProp(target, name, {
|
|
42
|
-
get: all[name],
|
|
43
|
-
enumerable: true,
|
|
44
|
-
configurable: true,
|
|
45
|
-
set: __exportSetter.bind(all, name)
|
|
46
|
-
});
|
|
47
|
-
};
|
|
48
|
-
var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
49
|
-
var __require = /* @__PURE__ */ createRequire(import.meta.url);
|
|
50
|
-
|
|
51
1
|
// src/csv.ts
|
|
52
2
|
function parseCSV(csv) {
|
|
53
3
|
const rows = [];
|
|
@@ -116,6 +66,101 @@ function parseCSV(csv) {
|
|
|
116
66
|
}
|
|
117
67
|
return rows;
|
|
118
68
|
}
|
|
69
|
+
function scanRows(csv) {
|
|
70
|
+
const rows = [];
|
|
71
|
+
let start = 0;
|
|
72
|
+
let inQuotes = false;
|
|
73
|
+
for (let i = 0;i < csv.length; i++) {
|
|
74
|
+
const ch = csv[i];
|
|
75
|
+
if (ch === '"') {
|
|
76
|
+
if (inQuotes && csv[i + 1] === '"') {
|
|
77
|
+
i += 1;
|
|
78
|
+
} else {
|
|
79
|
+
inQuotes = !inQuotes;
|
|
80
|
+
}
|
|
81
|
+
} else if ((ch === `
|
|
82
|
+
` || ch === "\r" && csv[i + 1] === `
|
|
83
|
+
`) && !inQuotes) {
|
|
84
|
+
rows.push({ end: i, start });
|
|
85
|
+
if (ch === "\r") {
|
|
86
|
+
i += 1;
|
|
87
|
+
}
|
|
88
|
+
start = i + 1;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
if (csv.slice(start).trim()) {
|
|
92
|
+
rows.push({ end: csv.length, start });
|
|
93
|
+
}
|
|
94
|
+
return rows;
|
|
95
|
+
}
|
|
96
|
+
function scanRowFields(csv, row, span) {
|
|
97
|
+
const line = csv.slice(span.start, span.end);
|
|
98
|
+
const fields = [];
|
|
99
|
+
let fieldStart = 0;
|
|
100
|
+
let value = "";
|
|
101
|
+
let inQuotes = false;
|
|
102
|
+
for (let i = 0;i < line.length; i++) {
|
|
103
|
+
const ch = line[i];
|
|
104
|
+
if (ch === '"') {
|
|
105
|
+
if (inQuotes && line[i + 1] === '"') {
|
|
106
|
+
value += '"';
|
|
107
|
+
i += 1;
|
|
108
|
+
} else {
|
|
109
|
+
inQuotes = !inQuotes;
|
|
110
|
+
}
|
|
111
|
+
} else if (ch === "," && !inQuotes) {
|
|
112
|
+
fields.push({
|
|
113
|
+
end: span.start + i,
|
|
114
|
+
row,
|
|
115
|
+
start: span.start + fieldStart,
|
|
116
|
+
value: value.trim()
|
|
117
|
+
});
|
|
118
|
+
value = "";
|
|
119
|
+
fieldStart = i + 1;
|
|
120
|
+
} else {
|
|
121
|
+
value += ch;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
fields.push({ end: span.end, row, start: span.start + fieldStart, value: value.trim() });
|
|
125
|
+
return fields;
|
|
126
|
+
}
|
|
127
|
+
function scanFields(csv) {
|
|
128
|
+
return scanRows(csv).flatMap((span, row) => scanRowFields(csv, row, span));
|
|
129
|
+
}
|
|
130
|
+
function encodeField(raw, value) {
|
|
131
|
+
const lead = raw.slice(0, raw.length - raw.trimStart().length);
|
|
132
|
+
const trail = raw.slice(raw.trimEnd().length);
|
|
133
|
+
const core = raw.trim();
|
|
134
|
+
const wasQuoted = core.length >= 2 && core.startsWith('"') && core.endsWith('"');
|
|
135
|
+
const mustQuote = /["\r\n,]/.test(value) || value.trim() !== value;
|
|
136
|
+
return lead + (wasQuoted || mustQuote ? `"${value.replaceAll('"', '""')}"` : value) + trail;
|
|
137
|
+
}
|
|
138
|
+
function rewriteCSV(source, edits) {
|
|
139
|
+
const replacements = new Map;
|
|
140
|
+
for (const edit of edits) {
|
|
141
|
+
if (edit.from !== edit.to) {
|
|
142
|
+
replacements.set(edit.from, edit.to);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
if (replacements.size === 0) {
|
|
146
|
+
return source;
|
|
147
|
+
}
|
|
148
|
+
let out = "";
|
|
149
|
+
let cursor = 0;
|
|
150
|
+
for (const field of scanFields(source)) {
|
|
151
|
+
if (field.row === 0) {
|
|
152
|
+
continue;
|
|
153
|
+
}
|
|
154
|
+
const to = replacements.get(field.value);
|
|
155
|
+
if (to === undefined) {
|
|
156
|
+
continue;
|
|
157
|
+
}
|
|
158
|
+
out += source.slice(cursor, field.start);
|
|
159
|
+
out += encodeField(source.slice(field.start, field.end), to);
|
|
160
|
+
cursor = field.end;
|
|
161
|
+
}
|
|
162
|
+
return out + source.slice(cursor);
|
|
163
|
+
}
|
|
119
164
|
function coerceCSVRows(rows, schema, idField) {
|
|
120
165
|
return rows.map((row, i) => {
|
|
121
166
|
const data = { ...row };
|
|
@@ -154,6 +199,9 @@ class Csv {
|
|
|
154
199
|
static parse(source, options = {}) {
|
|
155
200
|
return coerceCSVRows(parseCSV(source), options.schema, options.idField);
|
|
156
201
|
}
|
|
202
|
+
static rewrite(source, edits = []) {
|
|
203
|
+
return rewriteCSV(source, edits);
|
|
204
|
+
}
|
|
157
205
|
static async discover(source, options = {}) {
|
|
158
206
|
const { existsSync, readdirSync } = await import("node:fs");
|
|
159
207
|
const { resolve, extname } = await import("node:path");
|
|
@@ -191,5 +239,6 @@ class Csv {
|
|
|
191
239
|
export {
|
|
192
240
|
Csv,
|
|
193
241
|
coerceCSVRows,
|
|
194
|
-
parseCSV
|
|
242
|
+
parseCSV,
|
|
243
|
+
rewriteCSV
|
|
195
244
|
};
|