@natlibfi/marc-record-validators-melinda 9.0.14 → 9.1.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/access-rights.js +1 -9
- package/dist/access-rights.js.map +1 -1
- package/dist/access-rights.spec.js +4 -7
- package/dist/access-rights.spec.js.map +1 -1
- package/dist/double-commas.js +0 -1
- package/dist/double-commas.js.map +1 -1
- package/dist/double-commas.spec.js +0 -4
- package/dist/double-commas.spec.js.map +1 -1
- package/dist/duplicates-ind1.js +3 -8
- package/dist/duplicates-ind1.js.map +1 -1
- package/dist/duplicates-ind1.spec.js +38 -102
- package/dist/duplicates-ind1.spec.js.map +1 -1
- package/dist/empty-fields.js +0 -11
- package/dist/empty-fields.js.map +1 -1
- package/dist/empty-fields.spec.js +0 -4
- package/dist/empty-fields.spec.js.map +1 -1
- package/dist/ending-punctuation-conf.js +6 -9
- package/dist/ending-punctuation-conf.js.map +1 -1
- package/dist/ending-punctuation.js +36 -59
- package/dist/ending-punctuation.js.map +1 -1
- package/dist/ending-punctuation.spec.js +115 -65
- package/dist/ending-punctuation.spec.js.map +1 -1
- package/dist/field-exclusion.js +38 -37
- package/dist/field-exclusion.js.map +1 -1
- package/dist/field-exclusion.spec.js +16 -26
- package/dist/field-exclusion.spec.js.map +1 -1
- package/dist/field-structure.js +36 -39
- package/dist/field-structure.js.map +1 -1
- package/dist/field-structure.spec.js +8 -15
- package/dist/field-structure.spec.js.map +1 -1
- package/dist/fields-present.js +0 -4
- package/dist/fields-present.js.map +1 -1
- package/dist/fields-present.spec.js +0 -8
- package/dist/fields-present.spec.js.map +1 -1
- package/dist/fixed-fields.js +0 -14
- package/dist/fixed-fields.js.map +1 -1
- package/dist/fixed-fields.spec.js +0 -7
- package/dist/fixed-fields.spec.js.map +1 -1
- package/dist/identical-fields.js +1 -5
- package/dist/identical-fields.js.map +1 -1
- package/dist/identical-fields.spec.js +0 -4
- package/dist/identical-fields.spec.js.map +1 -1
- package/dist/index.js +0 -20
- package/dist/index.js.map +1 -1
- package/dist/indicator-fixes.js +23 -59
- package/dist/indicator-fixes.js.map +1 -1
- package/dist/indicator-fixes.spec.js +2 -12
- package/dist/indicator-fixes.spec.js.map +1 -1
- package/dist/isbn-issn.js +20 -91
- package/dist/isbn-issn.js.map +1 -1
- package/dist/isbn-issn.spec.js +8 -11
- package/dist/isbn-issn.spec.js.map +1 -1
- package/dist/item-language.js +1 -33
- package/dist/item-language.js.map +1 -1
- package/dist/item-language.spec.js +0 -8
- package/dist/item-language.spec.js.map +1 -1
- package/dist/mergeField500Lisapainokset.js +156 -0
- package/dist/mergeField500Lisapainokset.js.map +1 -0
- package/dist/mergeField500Lisapainokset.spec.js +51 -0
- package/dist/mergeField500Lisapainokset.spec.js.map +1 -0
- package/dist/normalize-identifiers.js +20 -46
- package/dist/normalize-identifiers.js.map +1 -1
- package/dist/normalize-identifiers.spec.js +2 -12
- package/dist/normalize-identifiers.spec.js.map +1 -1
- package/dist/normalize-utf8-diacritics.js +20 -29
- package/dist/normalize-utf8-diacritics.js.map +1 -1
- package/dist/normalize-utf8-diacritics.spec.js +2 -12
- package/dist/normalize-utf8-diacritics.spec.js.map +1 -1
- package/dist/punctuation/index.js +1 -54
- package/dist/punctuation/index.js.map +1 -1
- package/dist/punctuation/rules/aut.js.map +1 -1
- package/dist/punctuation/rules/bib.js.map +1 -1
- package/dist/punctuation/rules/index.js +0 -3
- package/dist/punctuation/rules/index.js.map +1 -1
- package/dist/punctuation.spec.js +2 -12
- package/dist/punctuation.spec.js.map +1 -1
- package/dist/resolvable-ext-references-melinda.js +8 -18
- package/dist/resolvable-ext-references-melinda.js.map +1 -1
- package/dist/resolvable-ext-references-melinda.spec.js +2 -22
- package/dist/resolvable-ext-references-melinda.spec.js.map +1 -1
- package/dist/sort-tags.js +0 -10
- package/dist/sort-tags.js.map +1 -1
- package/dist/sort-tags.spec.js +0 -4
- package/dist/sort-tags.spec.js.map +1 -1
- package/dist/subfield-exclusion.js +28 -29
- package/dist/subfield-exclusion.js.map +1 -1
- package/dist/subfield-exclusion.spec.js +8 -17
- package/dist/subfield-exclusion.spec.js.map +1 -1
- package/dist/unicode-decomposition.js +0 -9
- package/dist/unicode-decomposition.js.map +1 -1
- package/dist/unicode-decomposition.spec.js +0 -7
- package/dist/unicode-decomposition.spec.js.map +1 -1
- package/dist/urn.js +73 -29
- package/dist/urn.js.map +1 -1
- package/dist/urn.spec.js +104 -12
- package/dist/urn.spec.js.map +1 -1
- package/dist/utils.js +0 -1
- package/dist/utils.js.map +1 -1
- package/package.json +17 -17
- package/src/access-rights.spec.js +5 -2
- package/src/duplicates-ind1.js +1 -1
- package/src/duplicates-ind1.spec.js +39 -85
- package/src/mergeField500Lisapainokset.js +154 -0
- package/src/mergeField500Lisapainokset.spec.js +52 -0
- package/src/urn.js +82 -16
- package/src/urn.spec.js +95 -4
- package/test-fixtures/duplicates-ind1/01/expectedResult.json +4 -0
- package/test-fixtures/duplicates-ind1/01/metadata.json +4 -0
- package/test-fixtures/duplicates-ind1/01/record.json +16 -0
- package/test-fixtures/duplicates-ind1/02/expectedResult.json +6 -0
- package/test-fixtures/duplicates-ind1/02/metadata.json +4 -0
- package/test-fixtures/duplicates-ind1/02/record.json +16 -0
- package/test-fixtures/duplicates-ind1/03/expectedResult.json +13 -0
- package/test-fixtures/duplicates-ind1/03/metadata.json +6 -0
- package/test-fixtures/duplicates-ind1/03/record.json +16 -0
- package/test-fixtures/lisapainokset/fixer/01/expectedResult.json +37 -0
- package/test-fixtures/lisapainokset/fixer/01/metadata.json +6 -0
- package/test-fixtures/lisapainokset/fixer/01/record.json +61 -0
- package/test-fixtures/lisapainokset/fixer/02/expectedResult.json +44 -0
- package/test-fixtures/lisapainokset/fixer/02/metadata.json +6 -0
- package/test-fixtures/lisapainokset/fixer/02/record.json +45 -0
- package/test-fixtures/lisapainokset/fixer/03/expectedResult.json +21 -0
- package/test-fixtures/lisapainokset/fixer/03/metadata.json +6 -0
- package/test-fixtures/lisapainokset/fixer/03/record.json +45 -0
- package/test-fixtures/lisapainokset/validator/01/expectedResult.json +7 -0
- package/test-fixtures/lisapainokset/validator/01/metadata.json +6 -0
- package/test-fixtures/lisapainokset/validator/01/record.json +45 -0
- package/test-fixtures/lisapainokset/validator/02/expectedResult.json +6 -0
- package/test-fixtures/lisapainokset/validator/02/metadata.json +6 -0
- package/test-fixtures/lisapainokset/validator/02/record.json +61 -0
- package/test-fixtures/lisapainokset/validator/03/expectedResult.json +4 -0
- package/test-fixtures/lisapainokset/validator/03/metadata.json +6 -0
- package/test-fixtures/lisapainokset/validator/03/record.json +37 -0
package/dist/access-rights.js
CHANGED
|
@@ -4,9 +4,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = _default;
|
|
7
|
-
|
|
8
7
|
var _utils = require("./utils");
|
|
9
|
-
|
|
10
8
|
function _default() {
|
|
11
9
|
const sf506 = [{
|
|
12
10
|
code: 'a',
|
|
@@ -16,9 +14,9 @@ function _default() {
|
|
|
16
14
|
code: 'c',
|
|
17
15
|
value: /laki kulttuuriaineistojen tallettamisesta ja säilyttämisestä/ui
|
|
18
16
|
}];
|
|
19
|
-
|
|
20
17
|
function fix(record) {
|
|
21
18
|
// If printed do nothing
|
|
19
|
+
|
|
22
20
|
// If material is electronic add theis if missing
|
|
23
21
|
if (!hasTag(record, '506', sf506)) {
|
|
24
22
|
// eslint-disable-line functional/no-conditional-statement
|
|
@@ -43,7 +41,6 @@ function _default() {
|
|
|
43
41
|
}]
|
|
44
42
|
});
|
|
45
43
|
}
|
|
46
|
-
|
|
47
44
|
if (!hasTag(record, '540', sf540)) {
|
|
48
45
|
// eslint-disable-line functional/no-conditional-statement
|
|
49
46
|
record.insertField({
|
|
@@ -69,10 +66,8 @@ function _default() {
|
|
|
69
66
|
}]
|
|
70
67
|
});
|
|
71
68
|
}
|
|
72
|
-
|
|
73
69
|
return true;
|
|
74
70
|
}
|
|
75
|
-
|
|
76
71
|
function validate(record) {
|
|
77
72
|
// if not electronic skip this validator
|
|
78
73
|
if (!(0, _utils.isElectronicMaterial)(record)) {
|
|
@@ -80,18 +75,15 @@ function _default() {
|
|
|
80
75
|
valid: true
|
|
81
76
|
};
|
|
82
77
|
}
|
|
83
|
-
|
|
84
78
|
return {
|
|
85
79
|
valid: hasTag(record, '506', sf506) && hasTag(record, '540', sf540)
|
|
86
80
|
};
|
|
87
81
|
}
|
|
88
|
-
|
|
89
82
|
return {
|
|
90
83
|
description: 'Adds access rights fields for a record (if not existing)',
|
|
91
84
|
validate,
|
|
92
85
|
fix
|
|
93
86
|
};
|
|
94
|
-
|
|
95
87
|
function hasTag(rec, tag, sfcv) {
|
|
96
88
|
return rec.fields.some(f => f.tag === tag && sfcv.every(({
|
|
97
89
|
code,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"access-rights.js","names":["sf506","code","value","sf540","fix","record","hasTag","insertField","tag","ind1","subfields","validate","isElectronicMaterial","valid","description","rec","sfcv","fields","some","f","every","sf","test"],"sources":["../src/access-rights.js"],"sourcesContent":["import {isElectronicMaterial} from './utils';\n\nexport default function () {\n const sf506 = [{code: 'a', value: /aineisto on käytettävissä vapaakappalekirjastoissa/ui}];\n const sf540 = [{code: 'c', value: /laki kulttuuriaineistojen tallettamisesta ja säilyttämisestä/ui}];\n\n function fix(record) {\n // If printed do nothing\n\n // If material is electronic add theis if missing\n if (!hasTag(record, '506', sf506)) { // eslint-disable-line functional/no-conditional-statement\n record.insertField({\n tag: '506',\n ind1: '1',\n subfields: [\n {\n code: 'a',\n value: 'Aineisto on käytettävissä vapaakappalekirjastoissa.'\n }, {\n code: 'f',\n value: 'Online access with authorization'\n }, {\n code: '2',\n value: 'star'\n }, {\n code: '5',\n value: 'FI-Vapaa'\n }, {\n code: '9',\n value: 'FENNI<KEEP>'\n }\n ]\n });\n }\n\n if (!hasTag(record, '540', sf540)) { // eslint-disable-line functional/no-conditional-statement\n record.insertField({\n tag: '540',\n subfields: [\n {\n code: 'a',\n value: 'Aineisto on käytettävissä tutkimus- ja muihin tarkoituksiin;'\n }, {\n code: 'b',\n value: 'Kansalliskirjasto;'\n }, {\n code: 'c',\n value: 'Laki kulttuuriaineistojen tallettamisesta ja säilyttämisestä'\n }, {\n code: 'u',\n value: 'http://www.finlex.fi/fi/laki/ajantasa/2007/20071433'\n }, {\n code: '5',\n value: 'FI-Vapaa'\n }, {\n code: '9',\n value: 'FENNI<KEEP>'\n }\n ]\n });\n }\n\n return true;\n }\n\n function validate(record) {\n // if not electronic skip this validator\n if (!isElectronicMaterial(record)) {\n return {valid: true};\n }\n\n return {valid: hasTag(record, '506', sf506) && hasTag(record, '540', sf540)};\n }\n\n return {\n description: 'Adds access rights fields for a record (if not existing)',\n validate,\n fix\n };\n\n function hasTag(rec, tag, sfcv) {\n return rec.fields.some(f => f.tag === tag && sfcv.every(({code, value}) => f.subfields.some(sf => sf.code === code && value.test(sf.value))));\n }\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"access-rights.js","names":["sf506","code","value","sf540","fix","record","hasTag","insertField","tag","ind1","subfields","validate","isElectronicMaterial","valid","description","rec","sfcv","fields","some","f","every","sf","test"],"sources":["../src/access-rights.js"],"sourcesContent":["import {isElectronicMaterial} from './utils';\n\nexport default function () {\n const sf506 = [{code: 'a', value: /aineisto on käytettävissä vapaakappalekirjastoissa/ui}];\n const sf540 = [{code: 'c', value: /laki kulttuuriaineistojen tallettamisesta ja säilyttämisestä/ui}];\n\n function fix(record) {\n // If printed do nothing\n\n // If material is electronic add theis if missing\n if (!hasTag(record, '506', sf506)) { // eslint-disable-line functional/no-conditional-statement\n record.insertField({\n tag: '506',\n ind1: '1',\n subfields: [\n {\n code: 'a',\n value: 'Aineisto on käytettävissä vapaakappalekirjastoissa.'\n }, {\n code: 'f',\n value: 'Online access with authorization'\n }, {\n code: '2',\n value: 'star'\n }, {\n code: '5',\n value: 'FI-Vapaa'\n }, {\n code: '9',\n value: 'FENNI<KEEP>'\n }\n ]\n });\n }\n\n if (!hasTag(record, '540', sf540)) { // eslint-disable-line functional/no-conditional-statement\n record.insertField({\n tag: '540',\n subfields: [\n {\n code: 'a',\n value: 'Aineisto on käytettävissä tutkimus- ja muihin tarkoituksiin;'\n }, {\n code: 'b',\n value: 'Kansalliskirjasto;'\n }, {\n code: 'c',\n value: 'Laki kulttuuriaineistojen tallettamisesta ja säilyttämisestä'\n }, {\n code: 'u',\n value: 'http://www.finlex.fi/fi/laki/ajantasa/2007/20071433'\n }, {\n code: '5',\n value: 'FI-Vapaa'\n }, {\n code: '9',\n value: 'FENNI<KEEP>'\n }\n ]\n });\n }\n\n return true;\n }\n\n function validate(record) {\n // if not electronic skip this validator\n if (!isElectronicMaterial(record)) {\n return {valid: true};\n }\n\n return {valid: hasTag(record, '506', sf506) && hasTag(record, '540', sf540)};\n }\n\n return {\n description: 'Adds access rights fields for a record (if not existing)',\n validate,\n fix\n };\n\n function hasTag(rec, tag, sfcv) {\n return rec.fields.some(f => f.tag === tag && sfcv.every(({code, value}) => f.subfields.some(sf => sf.code === code && value.test(sf.value))));\n }\n}\n"],"mappings":";;;;;;AAAA;AAEe,oBAAY;EACzB,MAAMA,KAAK,GAAG,CAAC;IAACC,IAAI,EAAE,GAAG;IAAEC,KAAK,EAAE;EAAsD,CAAC,CAAC;EAC1F,MAAMC,KAAK,GAAG,CAAC;IAACF,IAAI,EAAE,GAAG;IAAEC,KAAK,EAAE;EAAgE,CAAC,CAAC;EAEpG,SAASE,GAAG,CAACC,MAAM,EAAE;IACnB;;IAEA;IACA,IAAI,CAACC,MAAM,CAACD,MAAM,EAAE,KAAK,EAAEL,KAAK,CAAC,EAAE;MAAE;MACnCK,MAAM,CAACE,WAAW,CAAC;QACjBC,GAAG,EAAE,KAAK;QACVC,IAAI,EAAE,GAAG;QACTC,SAAS,EAAE,CACT;UACET,IAAI,EAAE,GAAG;UACTC,KAAK,EAAE;QACT,CAAC,EAAE;UACDD,IAAI,EAAE,GAAG;UACTC,KAAK,EAAE;QACT,CAAC,EAAE;UACDD,IAAI,EAAE,GAAG;UACTC,KAAK,EAAE;QACT,CAAC,EAAE;UACDD,IAAI,EAAE,GAAG;UACTC,KAAK,EAAE;QACT,CAAC,EAAE;UACDD,IAAI,EAAE,GAAG;UACTC,KAAK,EAAE;QACT,CAAC;MAEL,CAAC,CAAC;IACJ;IAEA,IAAI,CAACI,MAAM,CAACD,MAAM,EAAE,KAAK,EAAEF,KAAK,CAAC,EAAE;MAAE;MACnCE,MAAM,CAACE,WAAW,CAAC;QACjBC,GAAG,EAAE,KAAK;QACVE,SAAS,EAAE,CACT;UACET,IAAI,EAAE,GAAG;UACTC,KAAK,EAAE;QACT,CAAC,EAAE;UACDD,IAAI,EAAE,GAAG;UACTC,KAAK,EAAE;QACT,CAAC,EAAE;UACDD,IAAI,EAAE,GAAG;UACTC,KAAK,EAAE;QACT,CAAC,EAAE;UACDD,IAAI,EAAE,GAAG;UACTC,KAAK,EAAE;QACT,CAAC,EAAE;UACDD,IAAI,EAAE,GAAG;UACTC,KAAK,EAAE;QACT,CAAC,EAAE;UACDD,IAAI,EAAE,GAAG;UACTC,KAAK,EAAE;QACT,CAAC;MAEL,CAAC,CAAC;IACJ;IAEA,OAAO,IAAI;EACb;EAEA,SAASS,QAAQ,CAACN,MAAM,EAAE;IACxB;IACA,IAAI,CAAC,IAAAO,2BAAoB,EAACP,MAAM,CAAC,EAAE;MACjC,OAAO;QAACQ,KAAK,EAAE;MAAI,CAAC;IACtB;IAEA,OAAO;MAACA,KAAK,EAAEP,MAAM,CAACD,MAAM,EAAE,KAAK,EAAEL,KAAK,CAAC,IAAIM,MAAM,CAACD,MAAM,EAAE,KAAK,EAAEF,KAAK;IAAC,CAAC;EAC9E;EAEA,OAAO;IACLW,WAAW,EAAE,0DAA0D;IACvEH,QAAQ;IACRP;EACF,CAAC;EAED,SAASE,MAAM,CAACS,GAAG,EAAEP,GAAG,EAAEQ,IAAI,EAAE;IAC9B,OAAOD,GAAG,CAACE,MAAM,CAACC,IAAI,CAACC,CAAC,IAAIA,CAAC,CAACX,GAAG,KAAKA,GAAG,IAAIQ,IAAI,CAACI,KAAK,CAAC,CAAC;MAACnB,IAAI;MAAEC;IAAK,CAAC,KAAKiB,CAAC,CAACT,SAAS,CAACQ,IAAI,CAACG,EAAE,IAAIA,EAAE,CAACpB,IAAI,KAAKA,IAAI,IAAIC,KAAK,CAACoB,IAAI,CAACD,EAAE,CAACnB,KAAK,CAAC,CAAC,CAAC,CAAC;EAC/I;AACF"}
|
|
@@ -1,13 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _chai = require("chai");
|
|
4
|
-
|
|
5
4
|
var _marcRecord = require("@natlibfi/marc-record");
|
|
6
|
-
|
|
7
5
|
var _accessRights = _interopRequireDefault(require("../src/access-rights"));
|
|
8
|
-
|
|
9
6
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
10
|
-
|
|
11
7
|
describe('access-rights', async () => {
|
|
12
8
|
// Fields
|
|
13
9
|
const f337 = {
|
|
@@ -99,8 +95,9 @@ describe('access-rights', async () => {
|
|
|
99
95
|
(0, _chai.expect)(validator).to.be.an('object').that.has.any.keys('description', 'validate');
|
|
100
96
|
(0, _chai.expect)(validator.description).to.be.a('string');
|
|
101
97
|
(0, _chai.expect)(validator.validate).to.be.a('function');
|
|
102
|
-
});
|
|
98
|
+
});
|
|
103
99
|
|
|
100
|
+
// Tests
|
|
104
101
|
const test = await (async () => {
|
|
105
102
|
const validator = await (0, _accessRights.default)();
|
|
106
103
|
return {
|
|
@@ -143,10 +140,10 @@ describe('access-rights', async () => {
|
|
|
143
140
|
await test.fix([f5060, ldf540], [f5060, ldf5061, ldf540]);
|
|
144
141
|
});
|
|
145
142
|
it('5061 but missing 540; Adds 540', async () => {
|
|
146
|
-
await test.fix([ldf5061, f540], [ldf5061,
|
|
143
|
+
await test.fix([ldf5061, f540], [ldf5061, ldf540, f540]);
|
|
147
144
|
});
|
|
148
145
|
it('Both, 5061 and 540, missing; Adds 5061 and 540', async () => {
|
|
149
|
-
await test.fix([f5060, f540], [f5060, ldf5061,
|
|
146
|
+
await test.fix([f5060, f540], [f5060, ldf5061, ldf540, f540]);
|
|
150
147
|
});
|
|
151
148
|
});
|
|
152
149
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"access-rights.spec.js","names":["describe","f337","tag","ind1","ind2","subfields","code","value","ldf5061","ldf540","f5060","f540","it","validator","validatorFactory","expect","to","be","an","that","has","any","keys","description","a","validate","test","valid","recfields","result","MarcRecord","fields","eql","fix","resfields","record"],"sources":["../src/access-rights.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from '../src/access-rights';\n\ndescribe('access-rights', async () => {\n // Fields\n const f337 = {\n tag: '337',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'b', value: 'c'},\n {code: '2', value: 'rdamedia'}\n ]\n };\n\n const ldf5061 = {\n tag: '506',\n ind1: '1',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Aineisto on käytettävissä vapaakappalekirjastoissa.'},\n {code: 'f', value: 'Online access with authorization'},\n {code: '2', value: 'star'},\n {code: '5', value: 'FI-Vapaa'},\n {code: '9', value: 'FENNI<KEEP>'}\n ]\n };\n const ldf540 = {\n tag: '540',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Aineisto on käytettävissä tutkimus- ja muihin tarkoituksiin;'},\n {code: 'b', value: 'Kansalliskirjasto;'},\n {code: 'c', value: 'Laki kulttuuriaineistojen tallettamisesta ja säilyttämisestä'},\n {code: 'u', value: 'http://www.finlex.fi/fi/laki/ajantasa/2007/20071433'},\n {code: '5', value: 'FI-Vapaa'},\n {code: '9', value: 'FENNI<KEEP>'}\n ]\n };\n const f5060 = {\n tag: '506',\n ind1: '0',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Aineisto on vapaasti saatavissa.'},\n {code: 'f', value: 'Unrestricted online access'},\n {code: '2', value: 'star'},\n {code: '9', value: 'FENNI<KEEP>'}\n ]\n };\n const f540 = {\n tag: '540',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'c', value: 'This publication is copyrighted. You may download, display and print it for Your own personal use. Commercial use is prohibited.'}]\n };\n\n it('Creates a validator', async () => {\n const validator = await validatorFactory();\n\n expect(validator)\n .to.be.an('object')\n .that.has.any.keys('description', 'validate');\n\n expect(validator.description).to.be.a('string');\n expect(validator.validate).to.be.a('function');\n });\n\n // Tests\n const test = await (async () => {\n const validator = await validatorFactory();\n return {\n validate: async (valid, ...recfields) => {\n const result = await validator.validate(new MarcRecord({fields: recfields}));\n expect(result).to.eql({valid});\n },\n\n fix: async (recfields, resfields) => {\n const record = new MarcRecord({fields: recfields});\n await validator.fix(record);\n expect(record.fields).to.eql(resfields);\n }\n };\n })();\n\n describe('#validate', () => {\n it('Finds the record valid; Legal deposit fields 5061 and 540', async () => {\n await test.validate(true, ldf5061, ldf540);\n });\n\n it('Finds the record invalid; Missing 5061', async () => {\n await test.validate(false, f337, f5060, ldf540);\n });\n\n it('Finds the record invalid; Missing 540', async () => {\n await test.validate(false, f337, ldf5061, f540);\n });\n\n it('Finds the record invalid; Missing 5061 and 540', async () => {\n await test.validate(false, f337, f5060, f540);\n });\n });\n\n describe('#fix', () => {\n it('Legal deposit fields 5061 and 540; Nothing to add', async () => {\n await test.fix([ldf5061, ldf540], [ldf5061, ldf540]);\n });\n\n it('540 but missing 5061; Adds 5061', async () => {\n await test.fix([f5060, ldf540], [f5060, ldf5061, ldf540]);\n });\n\n it('5061 but missing 540; Adds 540', async () => {\n await test.fix([ldf5061, f540], [ldf5061,
|
|
1
|
+
{"version":3,"file":"access-rights.spec.js","names":["describe","f337","tag","ind1","ind2","subfields","code","value","ldf5061","ldf540","f5060","f540","it","validator","validatorFactory","expect","to","be","an","that","has","any","keys","description","a","validate","test","valid","recfields","result","MarcRecord","fields","eql","fix","resfields","record"],"sources":["../src/access-rights.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from '../src/access-rights';\n\ndescribe('access-rights', async () => {\n // Fields\n const f337 = {\n tag: '337',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'b', value: 'c'},\n {code: '2', value: 'rdamedia'}\n ]\n };\n\n const ldf5061 = {\n tag: '506',\n ind1: '1',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Aineisto on käytettävissä vapaakappalekirjastoissa.'},\n {code: 'f', value: 'Online access with authorization'},\n {code: '2', value: 'star'},\n {code: '5', value: 'FI-Vapaa'},\n {code: '9', value: 'FENNI<KEEP>'}\n ]\n };\n\n const ldf540 = {\n tag: '540',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Aineisto on käytettävissä tutkimus- ja muihin tarkoituksiin;'},\n {code: 'b', value: 'Kansalliskirjasto;'},\n {code: 'c', value: 'Laki kulttuuriaineistojen tallettamisesta ja säilyttämisestä'},\n {code: 'u', value: 'http://www.finlex.fi/fi/laki/ajantasa/2007/20071433'},\n {code: '5', value: 'FI-Vapaa'},\n {code: '9', value: 'FENNI<KEEP>'}\n ]\n };\n\n const f5060 = {\n tag: '506',\n ind1: '0',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Aineisto on vapaasti saatavissa.'},\n {code: 'f', value: 'Unrestricted online access'},\n {code: '2', value: 'star'},\n {code: '9', value: 'FENNI<KEEP>'}\n ]\n };\n\n const f540 = {\n tag: '540',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'c', value: 'This publication is copyrighted. You may download, display and print it for Your own personal use. Commercial use is prohibited.'}]\n };\n\n it('Creates a validator', async () => {\n const validator = await validatorFactory();\n\n expect(validator)\n .to.be.an('object')\n .that.has.any.keys('description', 'validate');\n\n expect(validator.description).to.be.a('string');\n expect(validator.validate).to.be.a('function');\n });\n\n // Tests\n const test = await (async () => {\n const validator = await validatorFactory();\n return {\n validate: async (valid, ...recfields) => {\n const result = await validator.validate(new MarcRecord({fields: recfields}));\n expect(result).to.eql({valid});\n },\n\n fix: async (recfields, resfields) => {\n const record = new MarcRecord({fields: recfields});\n await validator.fix(record);\n expect(record.fields).to.eql(resfields);\n }\n };\n })();\n\n describe('#validate', () => {\n it('Finds the record valid; Legal deposit fields 5061 and 540', async () => {\n await test.validate(true, ldf5061, ldf540);\n });\n\n it('Finds the record invalid; Missing 5061', async () => {\n await test.validate(false, f337, f5060, ldf540);\n });\n\n it('Finds the record invalid; Missing 540', async () => {\n await test.validate(false, f337, ldf5061, f540);\n });\n\n it('Finds the record invalid; Missing 5061 and 540', async () => {\n await test.validate(false, f337, f5060, f540);\n });\n });\n\n describe('#fix', () => {\n it('Legal deposit fields 5061 and 540; Nothing to add', async () => {\n await test.fix([ldf5061, ldf540], [ldf5061, ldf540]);\n });\n\n it('540 but missing 5061; Adds 5061', async () => {\n await test.fix([f5060, ldf540], [f5060, ldf5061, ldf540]);\n });\n\n it('5061 but missing 540; Adds 540', async () => {\n await test.fix([ldf5061, f540], [ldf5061, ldf540, f540]);\n });\n\n it('Both, 5061 and 540, missing; Adds 5061 and 540', async () => {\n await test.fix([f5060, f540], [f5060, ldf5061, ldf540, f540]);\n });\n });\n});\n"],"mappings":"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"}
|
package/dist/double-commas.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"double-commas.js","names":["description","validate","record","valid","get","some","f","subfields","every","sf","code","test","value","fix","forEach","filter","replace"],"sources":["../src/double-commas.js"],"sourcesContent":["export default function () {\n return {\n description: 'Handle double commas in 700$e-subfields',\n validate: record => ({\n valid: !record\n .get(/^700$/u)\n .some(f => f.subfields.every(sf => sf.code === 'e' && (/,,/u).test(sf.value)))\n }),\n fix: record => record.get(/^700$/u).forEach(f => f.subfields.filter(sf => sf.code === 'e').forEach(sf => {\n sf.value = sf.value.replace(/,,/u, ','); // eslint-disable-line functional/immutable-data\n }))\n };\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"double-commas.js","names":["description","validate","record","valid","get","some","f","subfields","every","sf","code","test","value","fix","forEach","filter","replace"],"sources":["../src/double-commas.js"],"sourcesContent":["export default function () {\n return {\n description: 'Handle double commas in 700$e-subfields',\n validate: record => ({\n valid: !record\n .get(/^700$/u)\n .some(f => f.subfields.every(sf => sf.code === 'e' && (/,,/u).test(sf.value)))\n }),\n fix: record => record.get(/^700$/u).forEach(f => f.subfields.filter(sf => sf.code === 'e').forEach(sf => {\n sf.value = sf.value.replace(/,,/u, ','); // eslint-disable-line functional/immutable-data\n }))\n };\n}\n"],"mappings":";;;;;;AAAe,oBAAY;EACzB,OAAO;IACLA,WAAW,EAAE,yCAAyC;IACtDC,QAAQ,EAAEC,MAAM,KAAK;MACnBC,KAAK,EAAE,CAACD,MAAM,CACXE,GAAG,CAAC,QAAQ,CAAC,CACbC,IAAI,CAACC,CAAC,IAAIA,CAAC,CAACC,SAAS,CAACC,KAAK,CAACC,EAAE,IAAIA,EAAE,CAACC,IAAI,KAAK,GAAG,IAAK,KAAK,CAAEC,IAAI,CAACF,EAAE,CAACG,KAAK,CAAC,CAAC;IACjF,CAAC,CAAC;IACFC,GAAG,EAAEX,MAAM,IAAIA,MAAM,CAACE,GAAG,CAAC,QAAQ,CAAC,CAACU,OAAO,CAACR,CAAC,IAAIA,CAAC,CAACC,SAAS,CAACQ,MAAM,CAACN,EAAE,IAAIA,EAAE,CAACC,IAAI,KAAK,GAAG,CAAC,CAACI,OAAO,CAACL,EAAE,IAAI;MACvGA,EAAE,CAACG,KAAK,GAAGH,EAAE,CAACG,KAAK,CAACI,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IAC3C,CAAC,CAAC;EACJ,CAAC;AACH"}
|
|
@@ -1,13 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _chai = require("chai");
|
|
4
|
-
|
|
5
4
|
var _marcRecord = require("@natlibfi/marc-record");
|
|
6
|
-
|
|
7
5
|
var _doubleCommas = _interopRequireDefault(require("../src/double-commas"));
|
|
8
|
-
|
|
9
6
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
10
|
-
|
|
11
7
|
describe('double-commas', () => {
|
|
12
8
|
it('Creates a validator', async () => {
|
|
13
9
|
const validator = await (0, _doubleCommas.default)();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"double-commas.spec.js","names":["describe","it","validator","validatorFactory","expect","to","be","an","that","has","any","keys","description","a","validate","record","MarcRecord","fields","tag","subfields","code","value","result","eql","valid","fix","ind1","ind2"],"sources":["../src/double-commas.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from '../src/double-commas';\n\ndescribe('double-commas', () => {\n it('Creates a validator', async () => {\n const validator = await validatorFactory();\n\n expect(validator)\n .to.be.an('object')\n .that.has.any.keys('description', 'validate');\n\n expect(validator.description).to.be.a('string');\n expect(validator.validate).to.be.a('function');\n });\n\n describe('#validate', () => {\n it('Finds the record valid', async () => {\n const validator = await validatorFactory();\n const record = new MarcRecord({\n fields: [{tag: '700', subfields: [{code: 'e', value: 'foo,bar'}]}]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({valid: true});\n });\n it('Finds the record invalid', async () => {\n const validator = await validatorFactory();\n const record = new MarcRecord({\n fields: [{tag: '700', subfields: [{code: 'e', value: 'foo,,bar'}]}]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({valid: false});\n });\n });\n\n describe('#fix', () => {\n it('Fixes the record', async () => {\n const validator = await validatorFactory();\n const record = new MarcRecord({\n fields: [{tag: '700', subfields: [{code: 'e', value: 'foo,,bar'}]}]\n });\n await validator.fix(record);\n\n expect(record.fields).to.eql([\n {\n tag: '700',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'e', value: 'foo,bar'}]\n }\n ]);\n });\n });\n});\n"],"mappings":";;AAAA
|
|
1
|
+
{"version":3,"file":"double-commas.spec.js","names":["describe","it","validator","validatorFactory","expect","to","be","an","that","has","any","keys","description","a","validate","record","MarcRecord","fields","tag","subfields","code","value","result","eql","valid","fix","ind1","ind2"],"sources":["../src/double-commas.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from '../src/double-commas';\n\ndescribe('double-commas', () => {\n it('Creates a validator', async () => {\n const validator = await validatorFactory();\n\n expect(validator)\n .to.be.an('object')\n .that.has.any.keys('description', 'validate');\n\n expect(validator.description).to.be.a('string');\n expect(validator.validate).to.be.a('function');\n });\n\n describe('#validate', () => {\n it('Finds the record valid', async () => {\n const validator = await validatorFactory();\n const record = new MarcRecord({\n fields: [{tag: '700', subfields: [{code: 'e', value: 'foo,bar'}]}]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({valid: true});\n });\n it('Finds the record invalid', async () => {\n const validator = await validatorFactory();\n const record = new MarcRecord({\n fields: [{tag: '700', subfields: [{code: 'e', value: 'foo,,bar'}]}]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({valid: false});\n });\n });\n\n describe('#fix', () => {\n it('Fixes the record', async () => {\n const validator = await validatorFactory();\n const record = new MarcRecord({\n fields: [{tag: '700', subfields: [{code: 'e', value: 'foo,,bar'}]}]\n });\n await validator.fix(record);\n\n expect(record.fields).to.eql([\n {\n tag: '700',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'e', value: 'foo,bar'}]\n }\n ]);\n });\n });\n});\n"],"mappings":";;AAAA;AACA;AACA;AAAoD;AAEpDA,QAAQ,CAAC,eAAe,EAAE,MAAM;EAC9BC,EAAE,CAAC,qBAAqB,EAAE,YAAY;IACpC,MAAMC,SAAS,GAAG,MAAM,IAAAC,qBAAgB,GAAE;IAE1C,IAAAC,YAAM,EAACF,SAAS,CAAC,CACdG,EAAE,CAACC,EAAE,CAACC,EAAE,CAAC,QAAQ,CAAC,CAClBC,IAAI,CAACC,GAAG,CAACC,GAAG,CAACC,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC;IAE/C,IAAAP,YAAM,EAACF,SAAS,CAACU,WAAW,CAAC,CAACP,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,QAAQ,CAAC;IAC/C,IAAAT,YAAM,EAACF,SAAS,CAACY,QAAQ,CAAC,CAACT,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,UAAU,CAAC;EAChD,CAAC,CAAC;EAEFb,QAAQ,CAAC,WAAW,EAAE,MAAM;IAC1BC,EAAE,CAAC,wBAAwB,EAAE,YAAY;MACvC,MAAMC,SAAS,GAAG,MAAM,IAAAC,qBAAgB,GAAE;MAC1C,MAAMY,MAAM,GAAG,IAAIC,sBAAU,CAAC;QAC5BC,MAAM,EAAE,CAAC;UAACC,GAAG,EAAE,KAAK;UAAEC,SAAS,EAAE,CAAC;YAACC,IAAI,EAAE,GAAG;YAAEC,KAAK,EAAE;UAAS,CAAC;QAAC,CAAC;MACnE,CAAC,CAAC;MACF,MAAMC,MAAM,GAAG,MAAMpB,SAAS,CAACY,QAAQ,CAACC,MAAM,CAAC;MAE/C,IAAAX,YAAM,EAACkB,MAAM,CAAC,CAACjB,EAAE,CAACkB,GAAG,CAAC;QAACC,KAAK,EAAE;MAAI,CAAC,CAAC;IACtC,CAAC,CAAC;IACFvB,EAAE,CAAC,0BAA0B,EAAE,YAAY;MACzC,MAAMC,SAAS,GAAG,MAAM,IAAAC,qBAAgB,GAAE;MAC1C,MAAMY,MAAM,GAAG,IAAIC,sBAAU,CAAC;QAC5BC,MAAM,EAAE,CAAC;UAACC,GAAG,EAAE,KAAK;UAAEC,SAAS,EAAE,CAAC;YAACC,IAAI,EAAE,GAAG;YAAEC,KAAK,EAAE;UAAU,CAAC;QAAC,CAAC;MACpE,CAAC,CAAC;MACF,MAAMC,MAAM,GAAG,MAAMpB,SAAS,CAACY,QAAQ,CAACC,MAAM,CAAC;MAE/C,IAAAX,YAAM,EAACkB,MAAM,CAAC,CAACjB,EAAE,CAACkB,GAAG,CAAC;QAACC,KAAK,EAAE;MAAK,CAAC,CAAC;IACvC,CAAC,CAAC;EACJ,CAAC,CAAC;EAEFxB,QAAQ,CAAC,MAAM,EAAE,MAAM;IACrBC,EAAE,CAAC,kBAAkB,EAAE,YAAY;MACjC,MAAMC,SAAS,GAAG,MAAM,IAAAC,qBAAgB,GAAE;MAC1C,MAAMY,MAAM,GAAG,IAAIC,sBAAU,CAAC;QAC5BC,MAAM,EAAE,CAAC;UAACC,GAAG,EAAE,KAAK;UAAEC,SAAS,EAAE,CAAC;YAACC,IAAI,EAAE,GAAG;YAAEC,KAAK,EAAE;UAAU,CAAC;QAAC,CAAC;MACpE,CAAC,CAAC;MACF,MAAMnB,SAAS,CAACuB,GAAG,CAACV,MAAM,CAAC;MAE3B,IAAAX,YAAM,EAACW,MAAM,CAACE,MAAM,CAAC,CAACZ,EAAE,CAACkB,GAAG,CAAC,CAC3B;QACEL,GAAG,EAAE,KAAK;QACVQ,IAAI,EAAE,GAAG;QACTC,IAAI,EAAE,GAAG;QACTR,SAAS,EAAE,CAAC;UAACC,IAAI,EAAE,GAAG;UAAEC,KAAK,EAAE;QAAS,CAAC;MAC3C,CAAC,CACF,CAAC;IACJ,CAAC,CAAC;EACJ,CAAC,CAAC;AACJ,CAAC,CAAC"}
|
package/dist/duplicates-ind1.js
CHANGED
|
@@ -4,7 +4,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = _default;
|
|
7
|
-
|
|
8
7
|
function _default(tagPattern) {
|
|
9
8
|
if (tagPattern instanceof RegExp) {
|
|
10
9
|
return {
|
|
@@ -13,9 +12,7 @@ function _default(tagPattern) {
|
|
|
13
12
|
fix
|
|
14
13
|
};
|
|
15
14
|
}
|
|
16
|
-
|
|
17
15
|
throw new Error('No tagPattern provided');
|
|
18
|
-
|
|
19
16
|
function validate(record) {
|
|
20
17
|
const invalid = iterateFields(record).find(obj => obj.validation === true);
|
|
21
18
|
return invalid ? {
|
|
@@ -26,26 +23,24 @@ function _default(tagPattern) {
|
|
|
26
23
|
messages: []
|
|
27
24
|
};
|
|
28
25
|
}
|
|
29
|
-
|
|
30
26
|
function fix(record) {
|
|
31
27
|
iterateFields(record).filter(item => item.validation === false).map(({
|
|
32
28
|
validation,
|
|
33
29
|
...item
|
|
34
30
|
}) => item) // eslint-disable-line no-unused-vars
|
|
35
|
-
.forEach(
|
|
31
|
+
.forEach(({
|
|
32
|
+
obj
|
|
33
|
+
}) => record.removeField(obj));
|
|
36
34
|
}
|
|
37
|
-
|
|
38
35
|
function iterateFields(record) {
|
|
39
36
|
return record.fields.map(obj => ({
|
|
40
37
|
validation: matches(obj, record.fields),
|
|
41
38
|
obj
|
|
42
39
|
}));
|
|
43
40
|
}
|
|
44
|
-
|
|
45
41
|
function matches(field, fields) {
|
|
46
42
|
return tagPattern.test(field.tag) && field.ind1 === ' ' && hasDuplicate(field, fields);
|
|
47
43
|
}
|
|
48
|
-
|
|
49
44
|
function hasDuplicate(fieldA, fields) {
|
|
50
45
|
return fields.some(fieldB => fieldA !== fieldB && fieldA.tag === fieldB.tag && fieldA.ind1 !== fieldB.ind1 && fieldA.subfields.length === fieldB.subfields.length && fieldA.subfields.every(aSf => fieldB.subfields.some(bSf => aSf.code === bSf.code && aSf.value === bSf.value)));
|
|
51
46
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"duplicates-ind1.js","names":["tagPattern","RegExp","description","validate","fix","Error","record","invalid","iterateFields","find","obj","validation","valid","messages","tag","filter","item","map","forEach","
|
|
1
|
+
{"version":3,"file":"duplicates-ind1.js","names":["tagPattern","RegExp","description","validate","fix","Error","record","invalid","iterateFields","find","obj","validation","valid","messages","tag","filter","item","map","forEach","removeField","fields","matches","field","test","ind1","hasDuplicate","fieldA","some","fieldB","subfields","length","every","aSf","bSf","code","value"],"sources":["../src/duplicates-ind1.js"],"sourcesContent":["export default function (tagPattern) {\n if (tagPattern instanceof RegExp) {\n return {\n description:\n 'Handles data fields that only differ in the first indicator',\n validate,\n fix\n };\n }\n\n throw new Error('No tagPattern provided');\n\n function validate(record) {\n const invalid = iterateFields(record)\n .find(obj => obj.validation === true);\n return invalid ? {valid: false, messages: [`Multiple ${invalid.obj.tag} fields which only differ in the first indicator`]} : {valid: true, messages: []};\n }\n\n function fix(record) {\n iterateFields(record)\n .filter(item => item.validation === false)\n .map(({validation, ...item}) => item) // eslint-disable-line no-unused-vars\n .forEach(({obj}) => record.removeField(obj));\n }\n\n function iterateFields(record) {\n return record.fields.map(obj => ({validation: matches(obj, record.fields), obj}));\n }\n\n function matches(field, fields) {\n return tagPattern.test(field.tag) && field.ind1 === ' ' && hasDuplicate(field, fields);\n }\n\n function hasDuplicate(fieldA, fields) {\n return fields.some(fieldB => fieldA !== fieldB &&\n fieldA.tag === fieldB.tag &&\n fieldA.ind1 !== fieldB.ind1 &&\n fieldA.subfields.length === fieldB.subfields.length &&\n fieldA.subfields.every(aSf => fieldB.subfields.some(bSf => aSf.code === bSf.code && aSf.value === bSf.value)));\n }\n}\n"],"mappings":";;;;;;AAAe,kBAAUA,UAAU,EAAE;EACnC,IAAIA,UAAU,YAAYC,MAAM,EAAE;IAChC,OAAO;MACLC,WAAW,EACT,6DAA6D;MAC/DC,QAAQ;MACRC;IACF,CAAC;EACH;EAEA,MAAM,IAAIC,KAAK,CAAC,wBAAwB,CAAC;EAEzC,SAASF,QAAQ,CAACG,MAAM,EAAE;IACxB,MAAMC,OAAO,GAAGC,aAAa,CAACF,MAAM,CAAC,CAClCG,IAAI,CAACC,GAAG,IAAIA,GAAG,CAACC,UAAU,KAAK,IAAI,CAAC;IACvC,OAAOJ,OAAO,GAAG;MAACK,KAAK,EAAE,KAAK;MAAEC,QAAQ,EAAE,CAAE,YAAWN,OAAO,CAACG,GAAG,CAACI,GAAI,kDAAiD;IAAC,CAAC,GAAG;MAACF,KAAK,EAAE,IAAI;MAAEC,QAAQ,EAAE;IAAE,CAAC;EAC1J;EAEA,SAAST,GAAG,CAACE,MAAM,EAAE;IACnBE,aAAa,CAACF,MAAM,CAAC,CAClBS,MAAM,CAACC,IAAI,IAAIA,IAAI,CAACL,UAAU,KAAK,KAAK,CAAC,CACzCM,GAAG,CAAC,CAAC;MAACN,UAAU;MAAE,GAAGK;IAAI,CAAC,KAAKA,IAAI,CAAC,CAAC;IAAA,CACrCE,OAAO,CAAC,CAAC;MAACR;IAAG,CAAC,KAAKJ,MAAM,CAACa,WAAW,CAACT,GAAG,CAAC,CAAC;EAChD;EAEA,SAASF,aAAa,CAACF,MAAM,EAAE;IAC7B,OAAOA,MAAM,CAACc,MAAM,CAACH,GAAG,CAACP,GAAG,KAAK;MAACC,UAAU,EAAEU,OAAO,CAACX,GAAG,EAAEJ,MAAM,CAACc,MAAM,CAAC;MAAEV;IAAG,CAAC,CAAC,CAAC;EACnF;EAEA,SAASW,OAAO,CAACC,KAAK,EAAEF,MAAM,EAAE;IAC9B,OAAOpB,UAAU,CAACuB,IAAI,CAACD,KAAK,CAACR,GAAG,CAAC,IAAIQ,KAAK,CAACE,IAAI,KAAK,GAAG,IAAIC,YAAY,CAACH,KAAK,EAAEF,MAAM,CAAC;EACxF;EAEA,SAASK,YAAY,CAACC,MAAM,EAAEN,MAAM,EAAE;IACpC,OAAOA,MAAM,CAACO,IAAI,CAACC,MAAM,IAAIF,MAAM,KAAKE,MAAM,IAC5CF,MAAM,CAACZ,GAAG,KAAKc,MAAM,CAACd,GAAG,IACzBY,MAAM,CAACF,IAAI,KAAKI,MAAM,CAACJ,IAAI,IAC3BE,MAAM,CAACG,SAAS,CAACC,MAAM,KAAKF,MAAM,CAACC,SAAS,CAACC,MAAM,IACnDJ,MAAM,CAACG,SAAS,CAACE,KAAK,CAACC,GAAG,IAAIJ,MAAM,CAACC,SAAS,CAACF,IAAI,CAACM,GAAG,IAAID,GAAG,CAACE,IAAI,KAAKD,GAAG,CAACC,IAAI,IAAIF,GAAG,CAACG,KAAK,KAAKF,GAAG,CAACE,KAAK,CAAC,CAAC,CAAC;EAClH;AACF"}
|
|
@@ -1,109 +1,45 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _chai = require("chai");
|
|
4
|
-
|
|
5
4
|
var _marcRecord = require("@natlibfi/marc-record");
|
|
6
|
-
|
|
7
|
-
var
|
|
8
|
-
|
|
5
|
+
var _duplicatesInd = _interopRequireDefault(require("./duplicates-ind1"));
|
|
6
|
+
var _fixura = require("@natlibfi/fixura");
|
|
7
|
+
var _fixugen = _interopRequireDefault(require("@natlibfi/fixugen"));
|
|
8
|
+
var _debug = _interopRequireDefault(require("debug"));
|
|
9
9
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
const record = new _marcRecord.MarcRecord({
|
|
22
|
-
fields: [{
|
|
23
|
-
tag: '500',
|
|
24
|
-
ind1: ' ',
|
|
25
|
-
ind2: '0',
|
|
26
|
-
subfields: [{
|
|
27
|
-
code: 'a',
|
|
28
|
-
value: 'foo'
|
|
29
|
-
}]
|
|
30
|
-
}, {
|
|
31
|
-
tag: '500',
|
|
32
|
-
ind1: ' ',
|
|
33
|
-
ind2: '0',
|
|
34
|
-
subfields: [{
|
|
35
|
-
code: 'a',
|
|
36
|
-
value: 'foo'
|
|
37
|
-
}]
|
|
38
|
-
}]
|
|
39
|
-
});
|
|
40
|
-
const result = await validator.validate(record);
|
|
41
|
-
(0, _chai.expect)(result).to.eql({
|
|
42
|
-
valid: true,
|
|
43
|
-
messages: []
|
|
44
|
-
});
|
|
45
|
-
});
|
|
46
|
-
it('Finds the record invalid', async () => {
|
|
47
|
-
const validator = await (0, _duplicatesInd.default)(/^500$/u);
|
|
48
|
-
const record = new _marcRecord.MarcRecord({
|
|
49
|
-
fields: [{
|
|
50
|
-
tag: '500',
|
|
51
|
-
ind1: ' ',
|
|
52
|
-
ind2: '0',
|
|
53
|
-
subfields: [{
|
|
54
|
-
code: 'a',
|
|
55
|
-
value: 'foo'
|
|
56
|
-
}]
|
|
57
|
-
}, {
|
|
58
|
-
tag: '500',
|
|
59
|
-
ind1: '1',
|
|
60
|
-
ind2: '0',
|
|
61
|
-
subfields: [{
|
|
62
|
-
code: 'a',
|
|
63
|
-
value: 'foo'
|
|
64
|
-
}]
|
|
65
|
-
}]
|
|
66
|
-
});
|
|
67
|
-
const result = await validator.validate(record);
|
|
68
|
-
(0, _chai.expect)(result).to.eql({
|
|
69
|
-
valid: false,
|
|
70
|
-
messages: ['Multiple 500 fields which only differ in the first indicator']
|
|
71
|
-
});
|
|
72
|
-
});
|
|
73
|
-
});
|
|
74
|
-
describe('#fix', () => {
|
|
75
|
-
it('Removes duplicate values', async () => {
|
|
76
|
-
const validator = await (0, _duplicatesInd.default)(/^500$/u);
|
|
77
|
-
const record = new _marcRecord.MarcRecord({
|
|
78
|
-
fields: [{
|
|
79
|
-
tag: '500',
|
|
80
|
-
ind1: ' ',
|
|
81
|
-
ind2: '0',
|
|
82
|
-
subfields: [{
|
|
83
|
-
code: 'a',
|
|
84
|
-
value: 'foo'
|
|
85
|
-
}]
|
|
86
|
-
}, {
|
|
87
|
-
tag: '500',
|
|
88
|
-
ind1: '1',
|
|
89
|
-
ind2: '0',
|
|
90
|
-
subfields: [{
|
|
91
|
-
code: 'a',
|
|
92
|
-
value: 'foo'
|
|
93
|
-
}]
|
|
94
|
-
}]
|
|
95
|
-
});
|
|
96
|
-
await validator.fix(record);
|
|
97
|
-
(0, _chai.expect)(record.fields).to.eql([{
|
|
98
|
-
tag: '500',
|
|
99
|
-
ind1: ' ',
|
|
100
|
-
ind2: '0',
|
|
101
|
-
subfields: [{
|
|
102
|
-
code: 'a',
|
|
103
|
-
value: 'foo'
|
|
104
|
-
}]
|
|
105
|
-
}]);
|
|
106
|
-
});
|
|
107
|
-
});
|
|
10
|
+
(0, _fixugen.default)({
|
|
11
|
+
callback,
|
|
12
|
+
path: [__dirname, '..', 'test-fixtures', 'duplicates-ind1'],
|
|
13
|
+
useMetadataFile: true,
|
|
14
|
+
recurse: false,
|
|
15
|
+
fixura: {
|
|
16
|
+
reader: _fixura.READERS.JSON
|
|
17
|
+
},
|
|
18
|
+
mocha: {
|
|
19
|
+
before: () => testValidatorFactory()
|
|
20
|
+
}
|
|
108
21
|
});
|
|
22
|
+
const debug = (0, _debug.default)('@natlibfi/marc-record-validators-melinda/duplicates-ind1:test');
|
|
23
|
+
async function testValidatorFactory() {
|
|
24
|
+
const validator = await (0, _duplicatesInd.default)(/^500$/u);
|
|
25
|
+
(0, _chai.expect)(validator).to.be.an('object').that.has.any.keys('description', 'validate');
|
|
26
|
+
(0, _chai.expect)(validator.description).to.be.a('string');
|
|
27
|
+
(0, _chai.expect)(validator.validate).to.be.a('function');
|
|
28
|
+
}
|
|
29
|
+
async function callback({
|
|
30
|
+
getFixture,
|
|
31
|
+
tagPattern,
|
|
32
|
+
fix = false
|
|
33
|
+
}) {
|
|
34
|
+
const validator = await (0, _duplicatesInd.default)(new RegExp(tagPattern, 'u'));
|
|
35
|
+
const record = new _marcRecord.MarcRecord(getFixture('record.json'));
|
|
36
|
+
const expectedResult = getFixture('expectedResult.json');
|
|
37
|
+
if (!fix) {
|
|
38
|
+
const result = await validator.validate(record);
|
|
39
|
+
return (0, _chai.expect)(result).to.eql(expectedResult);
|
|
40
|
+
}
|
|
41
|
+
const fixedRecord = await validator.fix(record);
|
|
42
|
+
debug(fixedRecord);
|
|
43
|
+
(0, _chai.expect)(record.fields).to.eql(expectedResult);
|
|
44
|
+
}
|
|
109
45
|
//# sourceMappingURL=duplicates-ind1.spec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"duplicates-ind1.spec.js","names":["
|
|
1
|
+
{"version":3,"file":"duplicates-ind1.spec.js","names":["generateTests","callback","path","__dirname","useMetadataFile","recurse","fixura","reader","READERS","JSON","mocha","before","testValidatorFactory","debug","createDebugLogger","validator","validatorFactory","expect","to","be","an","that","has","any","keys","description","a","validate","getFixture","tagPattern","fix","RegExp","record","MarcRecord","expectedResult","result","eql","fixedRecord","fields"],"sources":["../src/duplicates-ind1.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from './duplicates-ind1';\n\nimport {READERS} from '@natlibfi/fixura';\nimport generateTests from '@natlibfi/fixugen';\nimport createDebugLogger from 'debug';\n\ngenerateTests({\n callback,\n path: [__dirname, '..', 'test-fixtures', 'duplicates-ind1'],\n useMetadataFile: true,\n recurse: false,\n fixura: {\n reader: READERS.JSON\n },\n mocha: {\n before: () => testValidatorFactory()\n }\n});\n\nconst debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/duplicates-ind1:test');\n\nasync function testValidatorFactory() {\n const validator = await validatorFactory(/^500$/u);\n\n expect(validator)\n .to.be.an('object')\n .that.has.any.keys('description', 'validate');\n\n expect(validator.description).to.be.a('string');\n expect(validator.validate).to.be.a('function');\n}\n\nasync function callback({getFixture, tagPattern, fix = false}) {\n const validator = await validatorFactory(new RegExp(tagPattern, 'u'));\n const record = new MarcRecord(getFixture('record.json'));\n const expectedResult = getFixture('expectedResult.json');\n\n if (!fix) {\n const result = await validator.validate(record);\n return expect(result).to.eql(expectedResult);\n }\n\n const fixedRecord = await validator.fix(record);\n debug(fixedRecord);\n expect(record.fields).to.eql(expectedResult);\n}\n"],"mappings":";;AAAA;AACA;AACA;AAEA;AACA;AACA;AAAsC;AAEtC,IAAAA,gBAAa,EAAC;EACZC,QAAQ;EACRC,IAAI,EAAE,CAACC,SAAS,EAAE,IAAI,EAAE,eAAe,EAAE,iBAAiB,CAAC;EAC3DC,eAAe,EAAE,IAAI;EACrBC,OAAO,EAAE,KAAK;EACdC,MAAM,EAAE;IACNC,MAAM,EAAEC,eAAO,CAACC;EAClB,CAAC;EACDC,KAAK,EAAE;IACLC,MAAM,EAAE,MAAMC,oBAAoB;EACpC;AACF,CAAC,CAAC;AAEF,MAAMC,KAAK,GAAG,IAAAC,cAAiB,EAAC,+DAA+D,CAAC;AAEhG,eAAeF,oBAAoB,GAAG;EACpC,MAAMG,SAAS,GAAG,MAAM,IAAAC,sBAAgB,EAAC,QAAQ,CAAC;EAElD,IAAAC,YAAM,EAACF,SAAS,CAAC,CACdG,EAAE,CAACC,EAAE,CAACC,EAAE,CAAC,QAAQ,CAAC,CAClBC,IAAI,CAACC,GAAG,CAACC,GAAG,CAACC,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC;EAE/C,IAAAP,YAAM,EAACF,SAAS,CAACU,WAAW,CAAC,CAACP,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,QAAQ,CAAC;EAC/C,IAAAT,YAAM,EAACF,SAAS,CAACY,QAAQ,CAAC,CAACT,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,UAAU,CAAC;AAChD;AAEA,eAAezB,QAAQ,CAAC;EAAC2B,UAAU;EAAEC,UAAU;EAAEC,GAAG,GAAG;AAAK,CAAC,EAAE;EAC7D,MAAMf,SAAS,GAAG,MAAM,IAAAC,sBAAgB,EAAC,IAAIe,MAAM,CAACF,UAAU,EAAE,GAAG,CAAC,CAAC;EACrE,MAAMG,MAAM,GAAG,IAAIC,sBAAU,CAACL,UAAU,CAAC,aAAa,CAAC,CAAC;EACxD,MAAMM,cAAc,GAAGN,UAAU,CAAC,qBAAqB,CAAC;EAExD,IAAI,CAACE,GAAG,EAAE;IACR,MAAMK,MAAM,GAAG,MAAMpB,SAAS,CAACY,QAAQ,CAACK,MAAM,CAAC;IAC/C,OAAO,IAAAf,YAAM,EAACkB,MAAM,CAAC,CAACjB,EAAE,CAACkB,GAAG,CAACF,cAAc,CAAC;EAC9C;EAEA,MAAMG,WAAW,GAAG,MAAMtB,SAAS,CAACe,GAAG,CAACE,MAAM,CAAC;EAC/CnB,KAAK,CAACwB,WAAW,CAAC;EAClB,IAAApB,YAAM,EAACe,MAAM,CAACM,MAAM,CAAC,CAACpB,EAAE,CAACkB,GAAG,CAACF,cAAc,CAAC;AAC9C"}
|
package/dist/empty-fields.js
CHANGED
|
@@ -8,17 +8,14 @@ const ERRORS = {
|
|
|
8
8
|
EMPTY_SUBFIELDS: 2,
|
|
9
9
|
MISSING_SUBFIELD_VALUES: 3
|
|
10
10
|
};
|
|
11
|
-
|
|
12
11
|
function _default() {
|
|
13
12
|
return {
|
|
14
13
|
description: 'Handles empty fields',
|
|
15
14
|
validate,
|
|
16
15
|
fix
|
|
17
16
|
};
|
|
18
|
-
|
|
19
17
|
function validate(record) {
|
|
20
18
|
const errors = findErrors(record.fields);
|
|
21
|
-
|
|
22
19
|
if (errors.length > 0) {
|
|
23
20
|
return {
|
|
24
21
|
valid: false,
|
|
@@ -27,21 +24,17 @@ function _default() {
|
|
|
27
24
|
switch (error.code) {
|
|
28
25
|
case ERRORS.EMPTY_SUBFIELDS:
|
|
29
26
|
return `Field ${error.field.tag} has no subfields`;
|
|
30
|
-
|
|
31
27
|
case ERRORS.MISSING_SUBFIELD_VALUES:
|
|
32
28
|
return `Field ${error.field.tag} has missing subfield values: ${error.emptySubfields.map(sf => sf.code).join()}`;
|
|
33
|
-
|
|
34
29
|
default:
|
|
35
30
|
}
|
|
36
31
|
})
|
|
37
32
|
};
|
|
38
33
|
}
|
|
39
|
-
|
|
40
34
|
return {
|
|
41
35
|
valid: true
|
|
42
36
|
};
|
|
43
37
|
}
|
|
44
|
-
|
|
45
38
|
function fix(record) {
|
|
46
39
|
const errors = findErrors(record.fields);
|
|
47
40
|
errors.forEach(error => {
|
|
@@ -62,7 +55,6 @@ function _default() {
|
|
|
62
55
|
}
|
|
63
56
|
});
|
|
64
57
|
}
|
|
65
|
-
|
|
66
58
|
function findErrors(fields) {
|
|
67
59
|
return fields.reduce((errors, field) => {
|
|
68
60
|
if (field.subfields) {
|
|
@@ -72,9 +64,7 @@ function _default() {
|
|
|
72
64
|
code: ERRORS.EMPTY_SUBFIELDS
|
|
73
65
|
});
|
|
74
66
|
}
|
|
75
|
-
|
|
76
67
|
const subfieldsWithoutValue = field.subfields.filter(sf => !sf.value);
|
|
77
|
-
|
|
78
68
|
if (subfieldsWithoutValue.length > 0) {
|
|
79
69
|
return errors.concat({
|
|
80
70
|
field,
|
|
@@ -83,7 +73,6 @@ function _default() {
|
|
|
83
73
|
});
|
|
84
74
|
}
|
|
85
75
|
}
|
|
86
|
-
|
|
87
76
|
return errors;
|
|
88
77
|
}, []);
|
|
89
78
|
}
|
package/dist/empty-fields.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"empty-fields.js","names":["ERRORS","EMPTY_SUBFIELDS","MISSING_SUBFIELD_VALUES","description","validate","fix","record","errors","findErrors","fields","length","valid","messages","map","error","code","field","tag","emptySubfields","sf","join","forEach","subfields","removeField","removeSubfield","reduce","concat","subfieldsWithoutValue","filter","value"],"sources":["../src/empty-fields.js"],"sourcesContent":["const ERRORS = {\n EMPTY_SUBFIELDS: 2,\n MISSING_SUBFIELD_VALUES: 3\n};\n\nexport default function () {\n return {\n description: 'Handles empty fields',\n validate,\n fix\n };\n\n function validate(record) {\n const errors = findErrors(record.fields);\n if (errors.length > 0) {\n return {\n valid: false,\n messages: errors.map(error => { // eslint-disable-line array-callback-return\n switch (error.code) {\n case ERRORS.EMPTY_SUBFIELDS:\n return `Field ${error.field.tag} has no subfields`;\n case ERRORS.MISSING_SUBFIELD_VALUES:\n return `Field ${error.field.tag} has missing subfield values: ${error.emptySubfields.map(sf => sf.code).join()}`;\n default:\n }\n })\n };\n }\n\n return {valid: true};\n }\n\n function fix(record) {\n const errors = findErrors(record.fields);\n errors.forEach(error => {\n if (error.code === ERRORS.MISSING_SUBFIELD_VALUES) { // eslint-disable-line functional/no-conditional-statement\n if (error.emptySubfields.length === error.field.subfields.length) { // eslint-disable-line functional/no-conditional-statement\n record.removeField(error.field);\n } else { // eslint-disable-line functional/no-conditional-statement\n error.emptySubfields.forEach(sf => {\n record.removeSubfield(sf, error.field);\n });\n }\n } else { // eslint-disable-line functional/no-conditional-statement\n record.removeField(error.field);\n }\n });\n }\n\n function findErrors(fields) {\n return fields.reduce((errors, field) => {\n if (field.subfields) {\n if (field.subfields.length === 0) {\n return errors.concat({field, code: ERRORS.EMPTY_SUBFIELDS});\n }\n\n const subfieldsWithoutValue = field.subfields.filter(sf => !sf.value);\n\n if (subfieldsWithoutValue.length > 0) {\n return errors.concat({\n field,\n emptySubfields: subfieldsWithoutValue,\n code: ERRORS.MISSING_SUBFIELD_VALUES\n });\n }\n }\n\n return errors;\n }, []);\n }\n}\n"],"mappings":";;;;;;AAAA,MAAMA,MAAM,GAAG;EACbC,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"empty-fields.js","names":["ERRORS","EMPTY_SUBFIELDS","MISSING_SUBFIELD_VALUES","description","validate","fix","record","errors","findErrors","fields","length","valid","messages","map","error","code","field","tag","emptySubfields","sf","join","forEach","subfields","removeField","removeSubfield","reduce","concat","subfieldsWithoutValue","filter","value"],"sources":["../src/empty-fields.js"],"sourcesContent":["const ERRORS = {\n EMPTY_SUBFIELDS: 2,\n MISSING_SUBFIELD_VALUES: 3\n};\n\nexport default function () {\n return {\n description: 'Handles empty fields',\n validate,\n fix\n };\n\n function validate(record) {\n const errors = findErrors(record.fields);\n if (errors.length > 0) {\n return {\n valid: false,\n messages: errors.map(error => { // eslint-disable-line array-callback-return\n switch (error.code) {\n case ERRORS.EMPTY_SUBFIELDS:\n return `Field ${error.field.tag} has no subfields`;\n case ERRORS.MISSING_SUBFIELD_VALUES:\n return `Field ${error.field.tag} has missing subfield values: ${error.emptySubfields.map(sf => sf.code).join()}`;\n default:\n }\n })\n };\n }\n\n return {valid: true};\n }\n\n function fix(record) {\n const errors = findErrors(record.fields);\n errors.forEach(error => {\n if (error.code === ERRORS.MISSING_SUBFIELD_VALUES) { // eslint-disable-line functional/no-conditional-statement\n if (error.emptySubfields.length === error.field.subfields.length) { // eslint-disable-line functional/no-conditional-statement\n record.removeField(error.field);\n } else { // eslint-disable-line functional/no-conditional-statement\n error.emptySubfields.forEach(sf => {\n record.removeSubfield(sf, error.field);\n });\n }\n } else { // eslint-disable-line functional/no-conditional-statement\n record.removeField(error.field);\n }\n });\n }\n\n function findErrors(fields) {\n return fields.reduce((errors, field) => {\n if (field.subfields) {\n if (field.subfields.length === 0) {\n return errors.concat({field, code: ERRORS.EMPTY_SUBFIELDS});\n }\n\n const subfieldsWithoutValue = field.subfields.filter(sf => !sf.value);\n\n if (subfieldsWithoutValue.length > 0) {\n return errors.concat({\n field,\n emptySubfields: subfieldsWithoutValue,\n code: ERRORS.MISSING_SUBFIELD_VALUES\n });\n }\n }\n\n return errors;\n }, []);\n }\n}\n"],"mappings":";;;;;;AAAA,MAAMA,MAAM,GAAG;EACbC,eAAe,EAAE,CAAC;EAClBC,uBAAuB,EAAE;AAC3B,CAAC;AAEc,oBAAY;EACzB,OAAO;IACLC,WAAW,EAAE,sBAAsB;IACnCC,QAAQ;IACRC;EACF,CAAC;EAED,SAASD,QAAQ,CAACE,MAAM,EAAE;IACxB,MAAMC,MAAM,GAAGC,UAAU,CAACF,MAAM,CAACG,MAAM,CAAC;IACxC,IAAIF,MAAM,CAACG,MAAM,GAAG,CAAC,EAAE;MACrB,OAAO;QACLC,KAAK,EAAE,KAAK;QACZC,QAAQ,EAAEL,MAAM,CAACM,GAAG,CAACC,KAAK,IAAI;UAAE;UAC9B,QAAQA,KAAK,CAACC,IAAI;YAClB,KAAKf,MAAM,CAACC,eAAe;cACzB,OAAQ,SAAQa,KAAK,CAACE,KAAK,CAACC,GAAI,mBAAkB;YACpD,KAAKjB,MAAM,CAACE,uBAAuB;cACjC,OAAQ,SAAQY,KAAK,CAACE,KAAK,CAACC,GAAI,iCAAgCH,KAAK,CAACI,cAAc,CAACL,GAAG,CAACM,EAAE,IAAIA,EAAE,CAACJ,IAAI,CAAC,CAACK,IAAI,EAAG,EAAC;YAClH;UAAQ;QAEV,CAAC;MACH,CAAC;IACH;IAEA,OAAO;MAACT,KAAK,EAAE;IAAI,CAAC;EACtB;EAEA,SAASN,GAAG,CAACC,MAAM,EAAE;IACnB,MAAMC,MAAM,GAAGC,UAAU,CAACF,MAAM,CAACG,MAAM,CAAC;IACxCF,MAAM,CAACc,OAAO,CAACP,KAAK,IAAI;MACtB,IAAIA,KAAK,CAACC,IAAI,KAAKf,MAAM,CAACE,uBAAuB,EAAE;QAAE;QACnD,IAAIY,KAAK,CAACI,cAAc,CAACR,MAAM,KAAKI,KAAK,CAACE,KAAK,CAACM,SAAS,CAACZ,MAAM,EAAE;UAAE;UAClEJ,MAAM,CAACiB,WAAW,CAACT,KAAK,CAACE,KAAK,CAAC;QACjC,CAAC,MAAM;UAAE;UACPF,KAAK,CAACI,cAAc,CAACG,OAAO,CAACF,EAAE,IAAI;YACjCb,MAAM,CAACkB,cAAc,CAACL,EAAE,EAAEL,KAAK,CAACE,KAAK,CAAC;UACxC,CAAC,CAAC;QACJ;MACF,CAAC,MAAM;QAAE;QACPV,MAAM,CAACiB,WAAW,CAACT,KAAK,CAACE,KAAK,CAAC;MACjC;IACF,CAAC,CAAC;EACJ;EAEA,SAASR,UAAU,CAACC,MAAM,EAAE;IAC1B,OAAOA,MAAM,CAACgB,MAAM,CAAC,CAAClB,MAAM,EAAES,KAAK,KAAK;MACtC,IAAIA,KAAK,CAACM,SAAS,EAAE;QACnB,IAAIN,KAAK,CAACM,SAAS,CAACZ,MAAM,KAAK,CAAC,EAAE;UAChC,OAAOH,MAAM,CAACmB,MAAM,CAAC;YAACV,KAAK;YAAED,IAAI,EAAEf,MAAM,CAACC;UAAe,CAAC,CAAC;QAC7D;QAEA,MAAM0B,qBAAqB,GAAGX,KAAK,CAACM,SAAS,CAACM,MAAM,CAACT,EAAE,IAAI,CAACA,EAAE,CAACU,KAAK,CAAC;QAErE,IAAIF,qBAAqB,CAACjB,MAAM,GAAG,CAAC,EAAE;UACpC,OAAOH,MAAM,CAACmB,MAAM,CAAC;YACnBV,KAAK;YACLE,cAAc,EAAES,qBAAqB;YACrCZ,IAAI,EAAEf,MAAM,CAACE;UACf,CAAC,CAAC;QACJ;MACF;MAEA,OAAOK,MAAM;IACf,CAAC,EAAE,EAAE,CAAC;EACR;AACF"}
|