@fin.cx/einvoice 6.2.0 → 7.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.
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/einvoice.js +3 -2
- package/dist_ts/formats/ubl/xrechnung/xrechnung.encoder.d.ts +7 -0
- package/dist_ts/formats/ubl/xrechnung/xrechnung.encoder.js +19 -3
- package/dist_ts/formats/validation/conformance.harness.js +1 -1
- package/dist_ts/formats/validation/schematron.downloader.d.ts +43 -15
- package/dist_ts/formats/validation/schematron.downloader.js +122 -77
- package/dist_ts/formats/validation/schematron.integration.d.ts +5 -1
- package/dist_ts/formats/validation/schematron.integration.js +16 -40
- package/dist_ts/formats/validation/schematron.validator.d.ts +35 -15
- package/dist_ts/formats/validation/schematron.validator.js +136 -138
- package/dist_ts/formats/validation/schematron.worker.d.ts +12 -9
- package/dist_ts/formats/validation/schematron.worker.js +148 -108
- package/dist_ts/plugins.d.ts +3 -1
- package/dist_ts/plugins.js +7 -2
- package/dist_ts_install/download-schematron.js +6 -3
- package/dist_ts_install/index.js +15 -11
- package/package.json +6 -8
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/einvoice.ts +2 -1
- package/ts/formats/ubl/xrechnung/xrechnung.encoder.ts +19 -2
- package/ts/formats/validation/conformance.harness.ts +1 -1
- package/ts/formats/validation/schematron.downloader.ts +146 -97
- package/ts/formats/validation/schematron.integration.ts +18 -44
- package/ts/formats/validation/schematron.validator.ts +181 -181
- package/ts/formats/validation/schematron.worker.ts +191 -135
- package/ts/plugins.ts +8 -0
- package/ts/vendor/modules.d.ts +0 -19
- package/dist_ts/vendor/saxonjs.d.ts +0 -23
- package/dist_ts/vendor/saxonjs.js +0 -9
- package/readme.hints.md +0 -1134
- package/readme.howtofixtests.md +0 -38
- package/readme.literature.md +0 -1
- package/readme.plan.md +0 -497
- package/ts/vendor/saxonjs.ts +0 -36
|
@@ -1,151 +1,162 @@
|
|
|
1
1
|
import * as plugins from '../../plugins.js';
|
|
2
|
-
import { loadSaxonJS } from '../../vendor/saxonjs.js';
|
|
3
2
|
/**
|
|
4
|
-
*
|
|
5
|
-
|
|
3
|
+
* Turns one failed assertion or fired report into a ValidationResult.
|
|
4
|
+
*/
|
|
5
|
+
export function schematronFailureToValidationResult(failure) {
|
|
6
|
+
const flag = (failure.flag || failure.role || '').toLowerCase();
|
|
7
|
+
let severity = failure.kind === 'assert' ? 'error' : 'warning';
|
|
8
|
+
if (flag.includes('fatal') || flag.includes('error')) {
|
|
9
|
+
severity = 'error';
|
|
10
|
+
}
|
|
11
|
+
else if (flag.includes('warning')) {
|
|
12
|
+
severity = 'warning';
|
|
13
|
+
}
|
|
14
|
+
else if (flag.includes('info')) {
|
|
15
|
+
severity = 'info';
|
|
16
|
+
}
|
|
17
|
+
const btMatch = failure.message.match(/\[BT-(\d+)\]/);
|
|
18
|
+
const bgMatch = failure.message.match(/\[BG-(\d+)\]/);
|
|
19
|
+
return {
|
|
20
|
+
ruleId: failure.id || failure.patternId || 'UNKNOWN',
|
|
21
|
+
source: 'SCHEMATRON',
|
|
22
|
+
severity,
|
|
23
|
+
message: failure.message,
|
|
24
|
+
syntaxPath: failure.location,
|
|
25
|
+
expected: failure.test,
|
|
26
|
+
btReference: btMatch ? `BT-${btMatch[1]}` : undefined,
|
|
27
|
+
bgReference: bgMatch ? `BG-${bgMatch[1]}` : undefined,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Turns a whole report into results. An expression the engine could not evaluate has
|
|
32
|
+
* proven nothing, so it is reported as an error rather than passing silently.
|
|
33
|
+
*/
|
|
34
|
+
export function schematronReportToValidationResults(report) {
|
|
35
|
+
return [
|
|
36
|
+
...report.failures.map(schematronFailureToValidationResult),
|
|
37
|
+
...report.engineErrors.map((engineError) => ({
|
|
38
|
+
ruleId: 'SCHEMATRON-ENGINE-ERROR',
|
|
39
|
+
source: 'SCHEMATRON',
|
|
40
|
+
severity: 'error',
|
|
41
|
+
message: `${engineError.message} (at ${engineError.origin})`,
|
|
42
|
+
expected: engineError.expression,
|
|
43
|
+
})),
|
|
44
|
+
];
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Applies the reporting options of a validation call to a result list.
|
|
48
|
+
*/
|
|
49
|
+
export function applySchematronOptions(results, options) {
|
|
50
|
+
const filtered = options.includeWarnings
|
|
51
|
+
? results
|
|
52
|
+
: results.filter((result) => result.severity !== 'warning');
|
|
53
|
+
if (options.maxErrors &&
|
|
54
|
+
filtered.filter((result) => result.severity === 'error').length > options.maxErrors) {
|
|
55
|
+
return filtered.slice(0, options.maxErrors);
|
|
56
|
+
}
|
|
57
|
+
return filtered;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Schematron validation engine.
|
|
61
|
+
*
|
|
62
|
+
* The rules are interpreted on the XPath engine of `@push.rocks/smartxml`, so the
|
|
63
|
+
* published `.sch` files of CEN, KoSIT and PEPPOL run as they are downloaded; no
|
|
64
|
+
* XSLT processor and no precompiled stylesheet is involved.
|
|
6
65
|
*/
|
|
7
66
|
export class SchematronValidator {
|
|
8
67
|
schematronRules;
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
68
|
+
schema;
|
|
69
|
+
schemaError;
|
|
70
|
+
baseUri;
|
|
71
|
+
/** one compiled schema per activated phase; a phase selects patterns at compile time */
|
|
72
|
+
schemasByPhase = new Map();
|
|
12
73
|
constructor(schematronRules) {
|
|
13
74
|
this.schematronRules = schematronRules || '';
|
|
75
|
+
if (this.schematronRules) {
|
|
76
|
+
this.compile();
|
|
77
|
+
}
|
|
14
78
|
}
|
|
15
79
|
/**
|
|
16
80
|
* Load Schematron rules from file or string
|
|
17
81
|
*/
|
|
18
82
|
async loadSchematron(source, isFilePath = true) {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
}
|
|
23
|
-
else {
|
|
24
|
-
sourceContent = source;
|
|
25
|
-
}
|
|
26
|
-
this.schematronRules = sourceContent;
|
|
27
|
-
this.sourceKind = this.detectSourceKind(source, sourceContent, isFilePath);
|
|
28
|
-
this.stylesheetFileName = undefined;
|
|
29
|
-
this.stylesheetInternal = undefined;
|
|
30
|
-
if (this.sourceKind === 'sef') {
|
|
31
|
-
if (isFilePath) {
|
|
32
|
-
this.stylesheetFileName = source;
|
|
33
|
-
}
|
|
34
|
-
else {
|
|
35
|
-
this.stylesheetInternal = JSON.parse(sourceContent);
|
|
36
|
-
}
|
|
37
|
-
}
|
|
83
|
+
this.schematronRules = isFilePath ? await plugins.fs.readFile(source, 'utf-8') : source;
|
|
84
|
+
this.baseUri = isFilePath ? source : undefined;
|
|
85
|
+
this.compile();
|
|
38
86
|
}
|
|
39
87
|
/**
|
|
40
|
-
*
|
|
88
|
+
* Compiles the loaded rules. A schema that does not compile keeps its reason, so
|
|
89
|
+
* validate() can report it instead of load failing far from the cause.
|
|
41
90
|
*/
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
91
|
+
compile() {
|
|
92
|
+
this.schema = undefined;
|
|
93
|
+
this.schemaError = undefined;
|
|
94
|
+
this.schemasByPhase.clear();
|
|
95
|
+
const trimmed = this.schematronRules.trim();
|
|
96
|
+
if (!trimmed) {
|
|
97
|
+
return;
|
|
45
98
|
}
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
99
|
+
if (trimmed.startsWith('{')) {
|
|
100
|
+
this.schemaError =
|
|
101
|
+
'the source is a compiled XSLT stylesheet (SEF); load the Schematron .sch file instead, it is executed directly';
|
|
102
|
+
return;
|
|
49
103
|
}
|
|
50
104
|
try {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
destination: 'serialized',
|
|
54
|
-
stylesheetParams: options.parameters || {}
|
|
55
|
-
};
|
|
56
|
-
if (this.stylesheetFileName) {
|
|
57
|
-
transformOptions.stylesheetFileName = this.stylesheetFileName;
|
|
58
|
-
}
|
|
59
|
-
else {
|
|
60
|
-
transformOptions.stylesheetInternal = this.stylesheetInternal;
|
|
61
|
-
}
|
|
62
|
-
// Transform the XML with a precompiled Saxon-JS SEF stylesheet.
|
|
63
|
-
const SaxonJS = await loadSaxonJS();
|
|
64
|
-
const transformResult = await SaxonJS.transform(transformOptions, 'async');
|
|
65
|
-
// Parse the SVRL (Schematron Validation Report Language) output
|
|
66
|
-
results.push(...this.parseSVRL(transformResult.principalResult));
|
|
67
|
-
// Apply options filters
|
|
68
|
-
if (!options.includeWarnings) {
|
|
69
|
-
return results.filter(r => r.severity !== 'warning');
|
|
70
|
-
}
|
|
71
|
-
if (options.maxErrors && results.filter(r => r.severity === 'error').length > options.maxErrors) {
|
|
72
|
-
return results.slice(0, options.maxErrors);
|
|
73
|
-
}
|
|
74
|
-
return results;
|
|
105
|
+
this.schema = this.compileForPhase(undefined);
|
|
106
|
+
this.schemasByPhase.set('', this.schema);
|
|
75
107
|
}
|
|
76
108
|
catch (error) {
|
|
77
|
-
|
|
78
|
-
results.push({
|
|
79
|
-
ruleId: 'SCHEMATRON-ERROR',
|
|
80
|
-
source: 'SCHEMATRON',
|
|
81
|
-
severity: 'error',
|
|
82
|
-
message: `Schematron validation failed: ${errorMessage}`,
|
|
83
|
-
btReference: undefined,
|
|
84
|
-
bgReference: undefined
|
|
85
|
-
});
|
|
86
|
-
return results;
|
|
109
|
+
this.schemaError = error instanceof Error ? error.message : String(error);
|
|
87
110
|
}
|
|
88
111
|
}
|
|
112
|
+
compileForPhase(phase) {
|
|
113
|
+
return plugins.smartxmlSchematron.Schematron.fromString(this.schematronRules, {
|
|
114
|
+
phase,
|
|
115
|
+
baseUri: this.baseUri,
|
|
116
|
+
// the published rule sets split their patterns over sch:include files
|
|
117
|
+
resolveInclude: (href, base) => plugins.readFileSync(plugins.path.resolve(plugins.path.dirname(base ?? this.baseUri ?? '.'), href), 'utf-8'),
|
|
118
|
+
});
|
|
119
|
+
}
|
|
89
120
|
/**
|
|
90
|
-
*
|
|
121
|
+
* The schema for one phase. A phase activates a subset of the patterns, which the
|
|
122
|
+
* engine resolves while compiling, so each phase gets its own compiled schema.
|
|
91
123
|
*/
|
|
92
|
-
|
|
93
|
-
const
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
// Get all failed assertions and successful reports
|
|
98
|
-
const failedAsserts = doc.getElementsByTagName('svrl:failed-assert');
|
|
99
|
-
const successfulReports = doc.getElementsByTagName('svrl:successful-report');
|
|
100
|
-
// Process failed assertions (these are errors)
|
|
101
|
-
for (let i = 0; i < failedAsserts.length; i++) {
|
|
102
|
-
const assert = failedAsserts[i];
|
|
103
|
-
const result = this.extractValidationResult(assert, 'error');
|
|
104
|
-
if (result)
|
|
105
|
-
results.push(result);
|
|
106
|
-
}
|
|
107
|
-
// Process successful reports (these can be warnings or info)
|
|
108
|
-
for (let i = 0; i < successfulReports.length; i++) {
|
|
109
|
-
const report = successfulReports[i];
|
|
110
|
-
const result = this.extractValidationResult(report, 'warning');
|
|
111
|
-
if (result)
|
|
112
|
-
results.push(result);
|
|
124
|
+
schemaForPhase(phase) {
|
|
125
|
+
const key = phase ?? '';
|
|
126
|
+
const cached = this.schemasByPhase.get(key);
|
|
127
|
+
if (cached) {
|
|
128
|
+
return cached;
|
|
113
129
|
}
|
|
114
|
-
|
|
130
|
+
const compiled = this.compileForPhase(phase);
|
|
131
|
+
this.schemasByPhase.set(key, compiled);
|
|
132
|
+
return compiled;
|
|
115
133
|
}
|
|
116
134
|
/**
|
|
117
|
-
*
|
|
135
|
+
* Validate an XML document against loaded Schematron rules
|
|
118
136
|
*/
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
const test = element.getAttribute('test') || '';
|
|
123
|
-
const id = element.getAttribute('id') || element.getAttribute('role') || 'UNKNOWN';
|
|
124
|
-
const flag = element.getAttribute('flag') || defaultSeverity;
|
|
125
|
-
// Determine severity from flag attribute
|
|
126
|
-
let severity = defaultSeverity;
|
|
127
|
-
if (flag.toLowerCase().includes('fatal') || flag.toLowerCase().includes('error')) {
|
|
128
|
-
severity = 'error';
|
|
137
|
+
async validate(xmlContent, options = {}) {
|
|
138
|
+
if (!this.schematronRules) {
|
|
139
|
+
throw new Error('No Schematron rules loaded');
|
|
129
140
|
}
|
|
130
|
-
|
|
131
|
-
|
|
141
|
+
if (!this.schema) {
|
|
142
|
+
return [this.createUnusableResult()];
|
|
132
143
|
}
|
|
133
|
-
|
|
134
|
-
|
|
144
|
+
let results = [];
|
|
145
|
+
try {
|
|
146
|
+
results = schematronReportToValidationResults(this.schemaForPhase(options.phase).validate(xmlContent));
|
|
135
147
|
}
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
};
|
|
148
|
+
catch (error) {
|
|
149
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
150
|
+
return [
|
|
151
|
+
{
|
|
152
|
+
ruleId: 'SCHEMATRON-ERROR',
|
|
153
|
+
source: 'SCHEMATRON',
|
|
154
|
+
severity: 'error',
|
|
155
|
+
message: `Schematron validation failed: ${errorMessage}`,
|
|
156
|
+
},
|
|
157
|
+
];
|
|
158
|
+
}
|
|
159
|
+
return applySchematronOptions(results, options);
|
|
149
160
|
}
|
|
150
161
|
/**
|
|
151
162
|
* Check if validator has rules loaded
|
|
@@ -154,31 +165,18 @@ export class SchematronValidator {
|
|
|
154
165
|
return !!this.schematronRules;
|
|
155
166
|
}
|
|
156
167
|
/**
|
|
157
|
-
* Check
|
|
168
|
+
* Check whether the loaded rules compiled and can be executed.
|
|
158
169
|
*/
|
|
159
170
|
canValidate() {
|
|
160
|
-
return
|
|
161
|
-
}
|
|
162
|
-
detectSourceKind(source, sourceContent, isFilePath) {
|
|
163
|
-
const trimmed = sourceContent.trim();
|
|
164
|
-
if (!trimmed) {
|
|
165
|
-
return 'none';
|
|
166
|
-
}
|
|
167
|
-
if (isFilePath && /\.sef\.json$/i.test(source)) {
|
|
168
|
-
return 'sef';
|
|
169
|
-
}
|
|
170
|
-
if (trimmed.startsWith('{')) {
|
|
171
|
-
return 'sef';
|
|
172
|
-
}
|
|
173
|
-
return 'schematron';
|
|
171
|
+
return Boolean(this.schema);
|
|
174
172
|
}
|
|
175
|
-
|
|
173
|
+
createUnusableResult() {
|
|
176
174
|
return {
|
|
177
|
-
ruleId: 'SCHEMATRON-
|
|
175
|
+
ruleId: 'SCHEMATRON-UNUSABLE',
|
|
178
176
|
source: 'SCHEMATRON',
|
|
179
177
|
severity: 'error',
|
|
180
|
-
message:
|
|
181
|
-
remediation: '
|
|
178
|
+
message: `Schematron rules could not be compiled: ${this.schemaError ?? 'the source is empty'}`,
|
|
179
|
+
remediation: 'Load a Schematron schema whose sch:include files sit next to it.',
|
|
182
180
|
};
|
|
183
181
|
}
|
|
184
182
|
/**
|
|
@@ -275,7 +273,7 @@ export class HybridValidator {
|
|
|
275
273
|
}
|
|
276
274
|
// Deduplicate results by ruleId
|
|
277
275
|
const seen = new Set();
|
|
278
|
-
return results.filter(r => {
|
|
276
|
+
return results.filter((r) => {
|
|
279
277
|
if (seen.has(r.ruleId))
|
|
280
278
|
return false;
|
|
281
279
|
seen.add(r.ruleId);
|
|
@@ -283,4 +281,4 @@ export class HybridValidator {
|
|
|
283
281
|
});
|
|
284
282
|
}
|
|
285
283
|
}
|
|
286
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hdHJvbi52YWxpZGF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9mb3JtYXRzL3ZhbGlkYXRpb24vc2NoZW1hdHJvbi52YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUU1QyxPQUFPLEVBQUUsV0FBVyxFQUErRCxNQUFNLHlCQUF5QixDQUFDO0FBY25IOzs7R0FHRztBQUNILE1BQU0sT0FBTyxtQkFBbUI7SUFDdEIsZUFBZSxDQUFTO0lBQ3hCLFVBQVUsR0FBMEIsTUFBTSxDQUFDO0lBQzNDLGtCQUFrQixDQUFVO0lBQzVCLGtCQUFrQixDQUFXO0lBRXJDLFlBQVksZUFBd0I7UUFDbEMsSUFBSSxDQUFDLGVBQWUsR0FBRyxlQUFlLElBQUksRUFBRSxDQUFDO0lBQy9DLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxjQUFjLENBQUMsTUFBYyxFQUFFLGFBQXNCLElBQUk7UUFDcEUsSUFBSSxhQUFxQixDQUFDO1FBRTFCLElBQUksVUFBVSxFQUFFLENBQUM7WUFDZixhQUFhLEdBQUcsTUFBTSxPQUFPLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDN0QsQ0FBQzthQUFNLENBQUM7WUFDTixhQUFhLEdBQUcsTUFBTSxDQUFDO1FBQ3pCLENBQUM7UUFFRCxJQUFJLENBQUMsZUFBZSxHQUFHLGFBQWEsQ0FBQztRQUNyQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsYUFBYSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzNFLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxTQUFTLENBQUM7UUFDcEMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLFNBQVMsQ0FBQztRQUVwQyxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssS0FBSyxFQUFFLENBQUM7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
|
|
284
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hdHJvbi52YWxpZGF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9mb3JtYXRzL3ZhbGlkYXRpb24vc2NoZW1hdHJvbi52YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQVk1Qzs7R0FFRztBQUNILE1BQU0sVUFBVSxtQ0FBbUMsQ0FDakQsT0FBc0Q7SUFFdEQsTUFBTSxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDaEUsSUFBSSxRQUFRLEdBQWlDLE9BQU8sQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUM3RixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ3JELFFBQVEsR0FBRyxPQUFPLENBQUM7SUFDckIsQ0FBQztTQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1FBQ3BDLFFBQVEsR0FBRyxTQUFTLENBQUM7SUFDdkIsQ0FBQztTQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQ2pDLFFBQVEsR0FBRyxNQUFNLENBQUM7SUFDcEIsQ0FBQztJQUVELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3RELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBRXRELE9BQU87UUFDTCxNQUFNLEVBQUUsT0FBTyxDQUFDLEVBQUUsSUFBSSxP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
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ValidationResult } from './validation.types.js';
|
|
2
|
-
import type
|
|
2
|
+
import { type SchematronOptions } from './schematron.validator.js';
|
|
3
3
|
export interface ISchematronWorkerPoolInitializeOptions {
|
|
4
4
|
isFilePath?: boolean;
|
|
5
5
|
}
|
|
@@ -12,18 +12,25 @@ export declare class SchematronWorkerPool {
|
|
|
12
12
|
private availableWorkers;
|
|
13
13
|
private taskQueue;
|
|
14
14
|
private maxWorkers;
|
|
15
|
-
private
|
|
16
|
-
private
|
|
15
|
+
private schematronSource?;
|
|
16
|
+
private baseUri?;
|
|
17
|
+
/** the task each busy worker is holding, so a thread that dies fails its task */
|
|
18
|
+
private tasksByWorker;
|
|
17
19
|
constructor(maxWorkers?: number);
|
|
18
20
|
/**
|
|
19
21
|
* Initialize worker pool
|
|
20
22
|
*/
|
|
21
|
-
initialize(
|
|
22
|
-
private
|
|
23
|
+
initialize(schematronSource: string, options?: ISchematronWorkerPoolInitializeOptions): Promise<void>;
|
|
24
|
+
private loadSchematron;
|
|
23
25
|
/**
|
|
24
26
|
* Create a new worker
|
|
25
27
|
*/
|
|
26
28
|
private createWorker;
|
|
29
|
+
/**
|
|
30
|
+
* Drops a thread that died, failing the task it was holding so no caller waits
|
|
31
|
+
* for an answer that can never come.
|
|
32
|
+
*/
|
|
33
|
+
private retireWorker;
|
|
27
34
|
/**
|
|
28
35
|
* Validate XML using worker pool
|
|
29
36
|
*/
|
|
@@ -32,10 +39,6 @@ export declare class SchematronWorkerPool {
|
|
|
32
39
|
* Process queued validation tasks
|
|
33
40
|
*/
|
|
34
41
|
private processTasks;
|
|
35
|
-
/**
|
|
36
|
-
* Parse SVRL output
|
|
37
|
-
*/
|
|
38
|
-
private parseSVRL;
|
|
39
42
|
/**
|
|
40
43
|
* Terminate all workers
|
|
41
44
|
*/
|