@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.
Files changed (35) hide show
  1. package/dist_ts/00_commitinfo_data.js +1 -1
  2. package/dist_ts/einvoice.js +3 -2
  3. package/dist_ts/formats/ubl/xrechnung/xrechnung.encoder.d.ts +7 -0
  4. package/dist_ts/formats/ubl/xrechnung/xrechnung.encoder.js +19 -3
  5. package/dist_ts/formats/validation/conformance.harness.js +1 -1
  6. package/dist_ts/formats/validation/schematron.downloader.d.ts +43 -15
  7. package/dist_ts/formats/validation/schematron.downloader.js +122 -77
  8. package/dist_ts/formats/validation/schematron.integration.d.ts +5 -1
  9. package/dist_ts/formats/validation/schematron.integration.js +16 -40
  10. package/dist_ts/formats/validation/schematron.validator.d.ts +35 -15
  11. package/dist_ts/formats/validation/schematron.validator.js +136 -138
  12. package/dist_ts/formats/validation/schematron.worker.d.ts +12 -9
  13. package/dist_ts/formats/validation/schematron.worker.js +148 -108
  14. package/dist_ts/plugins.d.ts +3 -1
  15. package/dist_ts/plugins.js +7 -2
  16. package/dist_ts_install/download-schematron.js +6 -3
  17. package/dist_ts_install/index.js +15 -11
  18. package/package.json +6 -8
  19. package/ts/00_commitinfo_data.ts +1 -1
  20. package/ts/einvoice.ts +2 -1
  21. package/ts/formats/ubl/xrechnung/xrechnung.encoder.ts +19 -2
  22. package/ts/formats/validation/conformance.harness.ts +1 -1
  23. package/ts/formats/validation/schematron.downloader.ts +146 -97
  24. package/ts/formats/validation/schematron.integration.ts +18 -44
  25. package/ts/formats/validation/schematron.validator.ts +181 -181
  26. package/ts/formats/validation/schematron.worker.ts +191 -135
  27. package/ts/plugins.ts +8 -0
  28. package/ts/vendor/modules.d.ts +0 -19
  29. package/dist_ts/vendor/saxonjs.d.ts +0 -23
  30. package/dist_ts/vendor/saxonjs.js +0 -9
  31. package/readme.hints.md +0 -1134
  32. package/readme.howtofixtests.md +0 -38
  33. package/readme.literature.md +0 -1
  34. package/readme.plan.md +0 -497
  35. 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
- * Schematron validation engine using Saxon-JS
5
- * Provides official standards validation through Schematron rules
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
- sourceKind = 'none';
10
- stylesheetFileName;
11
- stylesheetInternal;
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
- let sourceContent;
20
- if (isFilePath) {
21
- sourceContent = await plugins.fs.readFile(source, 'utf-8');
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
- * Validate an XML document against loaded Schematron rules
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
- async validate(xmlContent, options = {}) {
43
- if (!this.schematronRules) {
44
- throw new Error('No Schematron rules loaded');
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
- const results = [];
47
- if (!this.canValidate()) {
48
- return [this.createUnavailableResult()];
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
- const transformOptions = {
52
- sourceText: xmlContent,
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
- const errorMessage = error instanceof Error ? error.message : String(error);
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
- * Parse SVRL output to ValidationResult array
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
- parseSVRL(svrlXml) {
93
- const results = [];
94
- // Parse SVRL XML
95
- const parser = new plugins.xmldom.DOMParser();
96
- const doc = parser.parseFromString(svrlXml, 'text/xml');
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
- return results;
130
+ const compiled = this.compileForPhase(phase);
131
+ this.schemasByPhase.set(key, compiled);
132
+ return compiled;
115
133
  }
116
134
  /**
117
- * Extract ValidationResult from SVRL element
135
+ * Validate an XML document against loaded Schematron rules
118
136
  */
119
- extractValidationResult(element, defaultSeverity) {
120
- const text = element.getElementsByTagName('svrl:text')[0]?.textContent || '';
121
- const location = element.getAttribute('location') || undefined;
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
- else if (flag.toLowerCase().includes('warning')) {
131
- severity = 'warning';
141
+ if (!this.schema) {
142
+ return [this.createUnusableResult()];
132
143
  }
133
- else if (flag.toLowerCase().includes('info')) {
134
- severity = 'info';
144
+ let results = [];
145
+ try {
146
+ results = schematronReportToValidationResults(this.schemaForPhase(options.phase).validate(xmlContent));
135
147
  }
136
- // Extract BT/BG references if present
137
- const btMatch = text.match(/\[BT-(\d+)\]/);
138
- const bgMatch = text.match(/\[BG-(\d+)\]/);
139
- return {
140
- ruleId: id,
141
- source: 'EN16931',
142
- severity,
143
- message: text,
144
- syntaxPath: location,
145
- btReference: btMatch ? `BT-${btMatch[1]}` : undefined,
146
- bgReference: bgMatch ? `BG-${bgMatch[1]}` : undefined,
147
- profile: 'EN16931'
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 if loaded rules can be executed by Saxon-JS.
168
+ * Check whether the loaded rules compiled and can be executed.
158
169
  */
159
170
  canValidate() {
160
- return this.sourceKind === 'sef' && Boolean(this.stylesheetFileName || this.stylesheetInternal);
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
- createUnavailableResult() {
173
+ createUnusableResult() {
176
174
  return {
177
- ruleId: 'SCHEMATRON-UNCOMPILED',
175
+ ruleId: 'SCHEMATRON-UNUSABLE',
178
176
  source: 'SCHEMATRON',
179
177
  severity: 'error',
180
- message: 'Schematron validation requires a precompiled Saxon-JS SEF JSON stylesheet. Raw .sch files are loaded for inspection only and are not executed.',
181
- remediation: 'Compile Schematron rules to .sef.json with Saxon tooling and load the compiled SEF resource.'
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 { SchematronOptions } from './schematron.validator.js';
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 stylesheetFileName?;
16
- private stylesheetInternal?;
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(stylesheetSource: string, options?: ISchematronWorkerPoolInitializeOptions): Promise<void>;
22
- private loadStylesheet;
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
  */