@natlibfi/marc-record-validators-melinda 10.6.0 → 10.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/typeOfDate-008.js +48 -0
- package/dist/typeOfDate-008.js.map +1 -0
- package/dist/typeOfDate-008.spec.js +47 -0
- package/dist/typeOfDate-008.spec.js.map +1 -0
- package/dist/utils.js.map +1 -1
- package/package.json +1 -1
- package/src/typeOfDate-008.js +40 -0
- package/src/typeOfDate-008.spec.js +47 -0
- package/src/utils.js +0 -1
- package/test-fixtures/typeOfDate-008/01/expectedResult.json +3 -0
- package/test-fixtures/typeOfDate-008/01/metadata.json +4 -0
- package/test-fixtures/typeOfDate-008/01/record.json +14 -0
- package/test-fixtures/typeOfDate-008/02/expectedResult.json +4 -0
- package/test-fixtures/typeOfDate-008/02/metadata.json +4 -0
- package/test-fixtures/typeOfDate-008/02/record.json +14 -0
- package/test-fixtures/typeOfDate-008/03/expectedResult.json +14 -0
- package/test-fixtures/typeOfDate-008/03/metadata.json +5 -0
- package/test-fixtures/typeOfDate-008/03/record.json +14 -0
- package/test-fixtures/typeOfDate-008/04/expectedResult.json +14 -0
- package/test-fixtures/typeOfDate-008/04/metadata.json +5 -0
- package/test-fixtures/typeOfDate-008/04/record.json +14 -0
- package/test-fixtures/typeOfDate-008/05/expectedResult.json +14 -0
- package/test-fixtures/typeOfDate-008/05/metadata.json +5 -0
- package/test-fixtures/typeOfDate-008/05/record.json +14 -0
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = _default;
|
|
7
|
+
var _debug = _interopRequireDefault(require("debug"));
|
|
8
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
9
|
+
const debug = (0, _debug.default)('@natlibfi/marc-record-validators-melinda/typeOfDate-008'); // eslint-disable-line
|
|
10
|
+
|
|
11
|
+
function _default() {
|
|
12
|
+
return {
|
|
13
|
+
description: 'Validates 008 06',
|
|
14
|
+
validate,
|
|
15
|
+
fix
|
|
16
|
+
};
|
|
17
|
+
function validate(record) {
|
|
18
|
+
const [f008] = record.get(/008/u);
|
|
19
|
+
const c06 = f008.value.substring(6, 7);
|
|
20
|
+
const c1114 = f008.value.substring(11, 15);
|
|
21
|
+
// if 008 06 = s, and 11-14 = #### (not year/digits)
|
|
22
|
+
if (c06 === 't' && !/[0-9u]{4}/u.test(c1114)) {
|
|
23
|
+
debug('is t and not valid 1114');
|
|
24
|
+
return {
|
|
25
|
+
valid: false,
|
|
26
|
+
message: 'Invalid 008 06'
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
return {
|
|
30
|
+
valid: true
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
function fix(record) {
|
|
34
|
+
// LDR/06=t ja 11-14=####, niin LDR/06 muutetaan s:ksi
|
|
35
|
+
const [f008] = record.pop(/008/u); // eslint-disable-line functional/immutable-data
|
|
36
|
+
const c06 = f008.value.substring(6, 7);
|
|
37
|
+
const c1114 = f008.value.substring(11, 15);
|
|
38
|
+
// if 008 06 = s, and 11-14 = #### (not year/digits)
|
|
39
|
+
if (c06 === 't' && !/[0-9u]{4}/u.test(c1114)) {
|
|
40
|
+
f008.value = `${f008.value.substring(0, 6)}s${f008.value.substring(7)}`; // eslint-disable-line functional/immutable-data
|
|
41
|
+
record.insertField(f008);
|
|
42
|
+
return true;
|
|
43
|
+
}
|
|
44
|
+
record.insertField(f008);
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=typeOfDate-008.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typeOfDate-008.js","names":["_debug","_interopRequireDefault","require","obj","__esModule","default","debug","createDebugLogger","_default","description","validate","fix","record","f008","get","c06","value","substring","c1114","test","valid","message","pop","insertField"],"sources":["../src/typeOfDate-008.js"],"sourcesContent":["import createDebugLogger from 'debug';\n\nconst debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/typeOfDate-008'); // eslint-disable-line\n\nexport default function () {\n return {\n description: 'Validates 008 06',\n validate,\n fix\n };\n\n function validate(record) {\n const [f008] = record.get(/008/u);\n const c06 = f008.value.substring(6, 7);\n const c1114 = f008.value.substring(11, 15);\n // if 008 06 = s, and 11-14 = #### (not year/digits)\n if (c06 === 't' && !(/[0-9u]{4}/u).test(c1114)) {\n debug('is t and not valid 1114');\n return {valid: false, message: 'Invalid 008 06'};\n }\n\n return {valid: true};\n }\n\n function fix(record) {\n // LDR/06=t ja 11-14=####, niin LDR/06 muutetaan s:ksi\n const [f008] = record.pop(/008/u); // eslint-disable-line functional/immutable-data\n const c06 = f008.value.substring(6, 7);\n const c1114 = f008.value.substring(11, 15);\n // if 008 06 = s, and 11-14 = #### (not year/digits)\n if (c06 === 't' && !(/[0-9u]{4}/u).test(c1114)) {\n f008.value = `${f008.value.substring(0, 6)}s${f008.value.substring(7)}`; // eslint-disable-line functional/immutable-data\n record.insertField(f008);\n return true;\n }\n\n record.insertField(f008);\n return true;\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AAAsC,SAAAD,uBAAAE,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAEtC,MAAMG,KAAK,GAAG,IAAAC,cAAiB,EAAC,yDAAyD,CAAC,CAAC,CAAE;;AAE9E,SAAAC,SAAA,EAAY;EACzB,OAAO;IACLC,WAAW,EAAE,kBAAkB;IAC/BC,QAAQ;IACRC;EACF,CAAC;EAED,SAASD,QAAQA,CAACE,MAAM,EAAE;IACxB,MAAM,CAACC,IAAI,CAAC,GAAGD,MAAM,CAACE,GAAG,CAAC,MAAM,CAAC;IACjC,MAAMC,GAAG,GAAGF,IAAI,CAACG,KAAK,CAACC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;IACtC,MAAMC,KAAK,GAAGL,IAAI,CAACG,KAAK,CAACC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC;IAC1C;IACA,IAAIF,GAAG,KAAK,GAAG,IAAI,CAAE,YAAY,CAAEI,IAAI,CAACD,KAAK,CAAC,EAAE;MAC9CZ,KAAK,CAAC,yBAAyB,CAAC;MAChC,OAAO;QAACc,KAAK,EAAE,KAAK;QAAEC,OAAO,EAAE;MAAgB,CAAC;IAClD;IAEA,OAAO;MAACD,KAAK,EAAE;IAAI,CAAC;EACtB;EAEA,SAAST,GAAGA,CAACC,MAAM,EAAE;IACnB;IACA,MAAM,CAACC,IAAI,CAAC,GAAGD,MAAM,CAACU,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IACnC,MAAMP,GAAG,GAAGF,IAAI,CAACG,KAAK,CAACC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;IACtC,MAAMC,KAAK,GAAGL,IAAI,CAACG,KAAK,CAACC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC;IAC1C;IACA,IAAIF,GAAG,KAAK,GAAG,IAAI,CAAE,YAAY,CAAEI,IAAI,CAACD,KAAK,CAAC,EAAE;MAC9CL,IAAI,CAACG,KAAK,GAAI,GAAEH,IAAI,CAACG,KAAK,CAACC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAE,IAAGJ,IAAI,CAACG,KAAK,CAACC,SAAS,CAAC,CAAC,CAAE,EAAC,CAAC,CAAC;MACzEL,MAAM,CAACW,WAAW,CAACV,IAAI,CAAC;MACxB,OAAO,IAAI;IACb;IAEAD,MAAM,CAACW,WAAW,CAACV,IAAI,CAAC;IACxB,OAAO,IAAI;EACb;AACF"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _chai = require("chai");
|
|
4
|
+
var _marcRecord = require("@natlibfi/marc-record");
|
|
5
|
+
var _typeOfDate = _interopRequireDefault(require("./typeOfDate-008"));
|
|
6
|
+
var _fixura = require("@natlibfi/fixura");
|
|
7
|
+
var _fixugen = _interopRequireDefault(require("@natlibfi/fixugen"));
|
|
8
|
+
var _debug = _interopRequireDefault(require("debug"));
|
|
9
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
10
|
+
(0, _fixugen.default)({
|
|
11
|
+
callback,
|
|
12
|
+
path: [__dirname, '..', 'test-fixtures', 'typeOfDate-008'],
|
|
13
|
+
useMetadataFile: true,
|
|
14
|
+
recurse: false,
|
|
15
|
+
fixura: {
|
|
16
|
+
reader: _fixura.READERS.JSON
|
|
17
|
+
},
|
|
18
|
+
mocha: {
|
|
19
|
+
before: () => testValidatorFactory()
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
const debug = (0, _debug.default)('@natlibfi/marc-record-validators-melinda/typeOfDate-008:test'); // eslint-disable-line
|
|
23
|
+
|
|
24
|
+
async function testValidatorFactory() {
|
|
25
|
+
const validator = await (0, _typeOfDate.default)();
|
|
26
|
+
(0, _chai.expect)(validator).to.be.an('object').that.has.any.keys('description', 'validate');
|
|
27
|
+
(0, _chai.expect)(validator.description).to.be.a('string');
|
|
28
|
+
(0, _chai.expect)(validator.validate).to.be.a('function');
|
|
29
|
+
}
|
|
30
|
+
async function callback({
|
|
31
|
+
getFixture,
|
|
32
|
+
fix = false
|
|
33
|
+
}) {
|
|
34
|
+
const validator = await (0, _typeOfDate.default)();
|
|
35
|
+
const record = new _marcRecord.MarcRecord(getFixture('record.json'));
|
|
36
|
+
const expectedResult = getFixture('expectedResult.json');
|
|
37
|
+
// console.log(expectedResult); // eslint-disable-line
|
|
38
|
+
|
|
39
|
+
if (!fix) {
|
|
40
|
+
const result = await validator.validate(record);
|
|
41
|
+
(0, _chai.expect)(result).to.eql(expectedResult);
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
await validator.fix(record);
|
|
45
|
+
(0, _chai.expect)(record).to.eql(expectedResult);
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=typeOfDate-008.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typeOfDate-008.spec.js","names":["_chai","require","_marcRecord","_typeOfDate","_interopRequireDefault","_fixura","_fixugen","_debug","obj","__esModule","default","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","fix","record","MarcRecord","expectedResult","result","eql"],"sources":["../src/typeOfDate-008.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from './typeOfDate-008';\nimport {READERS} from '@natlibfi/fixura';\nimport generateTests from '@natlibfi/fixugen';\nimport createDebugLogger from 'debug';\n\ngenerateTests({\n callback,\n path: [__dirname, '..', 'test-fixtures', 'typeOfDate-008'],\n useMetadataFile: true,\n recurse: false,\n fixura: {\n reader: READERS.JSON\n },\n mocha: {\n before: () => testValidatorFactory()\n }\n});\nconst debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/typeOfDate-008:test'); // eslint-disable-line\n\nasync function testValidatorFactory() {\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\nasync function callback({getFixture, fix = false}) {\n const validator = await validatorFactory();\n const record = new MarcRecord(getFixture('record.json'));\n const expectedResult = getFixture('expectedResult.json');\n // console.log(expectedResult); // eslint-disable-line\n\n if (!fix) {\n const result = await validator.validate(record);\n expect(result).to.eql(expectedResult);\n return;\n }\n\n await validator.fix(record);\n expect(record).to.eql(expectedResult);\n}\n"],"mappings":";;AAAA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AACA,IAAAE,WAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,OAAA,GAAAJ,OAAA;AACA,IAAAK,QAAA,GAAAF,sBAAA,CAAAH,OAAA;AACA,IAAAM,MAAA,GAAAH,sBAAA,CAAAH,OAAA;AAAsC,SAAAG,uBAAAI,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAEtC,IAAAG,gBAAa,EAAC;EACZC,QAAQ;EACRC,IAAI,EAAE,CAACC,SAAS,EAAE,IAAI,EAAE,eAAe,EAAE,gBAAgB,CAAC;EAC1DC,eAAe,EAAE,IAAI;EACrBC,OAAO,EAAE,KAAK;EACdC,MAAM,EAAE;IACNC,MAAM,EAAEC,eAAO,CAACC;EAClB,CAAC;EACDC,KAAK,EAAE;IACLC,MAAM,EAAEA,CAAA,KAAMC,oBAAoB,CAAC;EACrC;AACF,CAAC,CAAC;AACF,MAAMC,KAAK,GAAG,IAAAC,cAAiB,EAAC,8DAA8D,CAAC,CAAC,CAAE;;AAElG,eAAeF,oBAAoBA,CAAA,EAAG;EACpC,MAAMG,SAAS,GAAG,MAAM,IAAAC,mBAAgB,EAAC,CAAC;EAE1C,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,QAAQA,CAAC;EAAC2B,UAAU;EAAEC,GAAG,GAAG;AAAK,CAAC,EAAE;EACjD,MAAMd,SAAS,GAAG,MAAM,IAAAC,mBAAgB,EAAC,CAAC;EAC1C,MAAMc,MAAM,GAAG,IAAIC,sBAAU,CAACH,UAAU,CAAC,aAAa,CAAC,CAAC;EACxD,MAAMI,cAAc,GAAGJ,UAAU,CAAC,qBAAqB,CAAC;EACxD;;EAEA,IAAI,CAACC,GAAG,EAAE;IACR,MAAMI,MAAM,GAAG,MAAMlB,SAAS,CAACY,QAAQ,CAACG,MAAM,CAAC;IAC/C,IAAAb,YAAM,EAACgB,MAAM,CAAC,CAACf,EAAE,CAACgB,GAAG,CAACF,cAAc,CAAC;IACrC;EACF;EAEA,MAAMjB,SAAS,CAACc,GAAG,CAACC,MAAM,CAAC;EAC3B,IAAAb,YAAM,EAACa,MAAM,CAAC,CAACZ,EAAE,CAACgB,GAAG,CAACF,cAAc,CAAC;AACvC"}
|
package/dist/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","names":["isElectronicMaterial","record","f337s","get","some","field","mediaTypeIsC","subfields","sub","code","value","sourceIsRdamedia","nvdebug","message","func","undefined","fieldHasSubfield","subfieldCode","subfieldValue","sf","subfieldToString","fieldToString","f","tag","ind1","ind2","formatSubfields","map","join","fieldsToString","fields"],"sources":["../src/utils.js"],"sourcesContent":["export function isElectronicMaterial(record) {\n const f337s = record.get('337');\n\n return f337s.some(field => {\n const mediaTypeIsC = field.subfields.some(sub => sub.code === 'b' && sub.value === 'c');\n const sourceIsRdamedia = field.subfields.some(sub => sub.code === '2' && sub.value === 'rdamedia');\n return mediaTypeIsC && sourceIsRdamedia;\n });\n}\n\nexport function nvdebug(message, func = undefined) {\n if (func) { // eslint-disable-line functional/no-conditional-statements\n func(message);\n }\n //console.info(message); // eslint-disable-line no-console\n}\n\nexport function fieldHasSubfield(field, subfieldCode, subfieldValue = null) {\n if (!field.subfields) {\n return false;\n }\n if (subfieldValue === null) {\n return field.subfields.some(sf => sf.code === subfieldCode);\n }\n return field.subfields.some(sf => sf.code === subfieldCode && subfieldValue === sf.value);\n}\n\nexport function subfieldToString(sf) {\n return `‡${sf.code} ${sf.value}`;\n}\n\nexport function fieldToString(f) {\n if ('subfields' in f) {\n return `${f.tag} ${f.ind1}${f.ind2}${formatSubfields(f)}`;\n }\n return `${f.tag} ${f.value}`;\n\n function formatSubfields(field) {\n return field.subfields.map(sf => ` ${subfieldToString(sf)}`).join('');\n }\n}\n\nexport function fieldsToString(fields) {\n return fields.map(f => fieldToString(f)).join('\\t__SEPARATOR__\\t');\n}\n
|
|
1
|
+
{"version":3,"file":"utils.js","names":["isElectronicMaterial","record","f337s","get","some","field","mediaTypeIsC","subfields","sub","code","value","sourceIsRdamedia","nvdebug","message","func","undefined","fieldHasSubfield","subfieldCode","subfieldValue","sf","subfieldToString","fieldToString","f","tag","ind1","ind2","formatSubfields","map","join","fieldsToString","fields"],"sources":["../src/utils.js"],"sourcesContent":["export function isElectronicMaterial(record) {\n const f337s = record.get('337');\n\n return f337s.some(field => {\n const mediaTypeIsC = field.subfields.some(sub => sub.code === 'b' && sub.value === 'c');\n const sourceIsRdamedia = field.subfields.some(sub => sub.code === '2' && sub.value === 'rdamedia');\n return mediaTypeIsC && sourceIsRdamedia;\n });\n}\n\nexport function nvdebug(message, func = undefined) {\n if (func) { // eslint-disable-line functional/no-conditional-statements\n func(message);\n }\n //console.info(message); // eslint-disable-line no-console\n}\n\nexport function fieldHasSubfield(field, subfieldCode, subfieldValue = null) {\n if (!field.subfields) {\n return false;\n }\n if (subfieldValue === null) {\n return field.subfields.some(sf => sf.code === subfieldCode);\n }\n return field.subfields.some(sf => sf.code === subfieldCode && subfieldValue === sf.value);\n}\n\nexport function subfieldToString(sf) {\n return `‡${sf.code} ${sf.value}`;\n}\n\nexport function fieldToString(f) {\n if ('subfields' in f) {\n return `${f.tag} ${f.ind1}${f.ind2}${formatSubfields(f)}`;\n }\n return `${f.tag} ${f.value}`;\n\n function formatSubfields(field) {\n return field.subfields.map(sf => ` ${subfieldToString(sf)}`).join('');\n }\n}\n\nexport function fieldsToString(fields) {\n return fields.map(f => fieldToString(f)).join('\\t__SEPARATOR__\\t');\n}\n"],"mappings":";;;;;;;;;;;AAAO,SAASA,oBAAoBA,CAACC,MAAM,EAAE;EAC3C,MAAMC,KAAK,GAAGD,MAAM,CAACE,GAAG,CAAC,KAAK,CAAC;EAE/B,OAAOD,KAAK,CAACE,IAAI,CAACC,KAAK,IAAI;IACzB,MAAMC,YAAY,GAAGD,KAAK,CAACE,SAAS,CAACH,IAAI,CAACI,GAAG,IAAIA,GAAG,CAACC,IAAI,KAAK,GAAG,IAAID,GAAG,CAACE,KAAK,KAAK,GAAG,CAAC;IACvF,MAAMC,gBAAgB,GAAGN,KAAK,CAACE,SAAS,CAACH,IAAI,CAACI,GAAG,IAAIA,GAAG,CAACC,IAAI,KAAK,GAAG,IAAID,GAAG,CAACE,KAAK,KAAK,UAAU,CAAC;IAClG,OAAOJ,YAAY,IAAIK,gBAAgB;EACzC,CAAC,CAAC;AACJ;AAEO,SAASC,OAAOA,CAACC,OAAO,EAAEC,IAAI,GAAGC,SAAS,EAAE;EACjD,IAAID,IAAI,EAAE;IAAE;IACVA,IAAI,CAACD,OAAO,CAAC;EACf;EACA;AACF;;AAEO,SAASG,gBAAgBA,CAACX,KAAK,EAAEY,YAAY,EAAEC,aAAa,GAAG,IAAI,EAAE;EAC1E,IAAI,CAACb,KAAK,CAACE,SAAS,EAAE;IACpB,OAAO,KAAK;EACd;EACA,IAAIW,aAAa,KAAK,IAAI,EAAE;IAC1B,OAAOb,KAAK,CAACE,SAAS,CAACH,IAAI,CAACe,EAAE,IAAIA,EAAE,CAACV,IAAI,KAAKQ,YAAY,CAAC;EAC7D;EACA,OAAOZ,KAAK,CAACE,SAAS,CAACH,IAAI,CAACe,EAAE,IAAIA,EAAE,CAACV,IAAI,KAAKQ,YAAY,IAAIC,aAAa,KAAKC,EAAE,CAACT,KAAK,CAAC;AAC3F;AAEO,SAASU,gBAAgBA,CAACD,EAAE,EAAE;EACnC,OAAQ,IAAGA,EAAE,CAACV,IAAK,IAAGU,EAAE,CAACT,KAAM,EAAC;AAClC;AAEO,SAASW,aAAaA,CAACC,CAAC,EAAE;EAC/B,IAAI,WAAW,IAAIA,CAAC,EAAE;IACpB,OAAQ,GAAEA,CAAC,CAACC,GAAI,IAAGD,CAAC,CAACE,IAAK,GAAEF,CAAC,CAACG,IAAK,GAAEC,eAAe,CAACJ,CAAC,CAAE,EAAC;EAC3D;EACA,OAAQ,GAAEA,CAAC,CAACC,GAAI,OAAMD,CAAC,CAACZ,KAAM,EAAC;EAE/B,SAASgB,eAAeA,CAACrB,KAAK,EAAE;IAC9B,OAAOA,KAAK,CAACE,SAAS,CAACoB,GAAG,CAACR,EAAE,IAAK,IAAGC,gBAAgB,CAACD,EAAE,CAAE,EAAC,CAAC,CAACS,IAAI,CAAC,EAAE,CAAC;EACvE;AACF;AAEO,SAASC,cAAcA,CAACC,MAAM,EAAE;EACrC,OAAOA,MAAM,CAACH,GAAG,CAACL,CAAC,IAAID,aAAa,CAACC,CAAC,CAAC,CAAC,CAACM,IAAI,CAAC,mBAAmB,CAAC;AACpE"}
|
package/package.json
CHANGED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import createDebugLogger from 'debug';
|
|
2
|
+
|
|
3
|
+
const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/typeOfDate-008'); // eslint-disable-line
|
|
4
|
+
|
|
5
|
+
export default function () {
|
|
6
|
+
return {
|
|
7
|
+
description: 'Validates 008 06',
|
|
8
|
+
validate,
|
|
9
|
+
fix
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
function validate(record) {
|
|
13
|
+
const [f008] = record.get(/008/u);
|
|
14
|
+
const c06 = f008.value.substring(6, 7);
|
|
15
|
+
const c1114 = f008.value.substring(11, 15);
|
|
16
|
+
// if 008 06 = s, and 11-14 = #### (not year/digits)
|
|
17
|
+
if (c06 === 't' && !(/[0-9u]{4}/u).test(c1114)) {
|
|
18
|
+
debug('is t and not valid 1114');
|
|
19
|
+
return {valid: false, message: 'Invalid 008 06'};
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
return {valid: true};
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function fix(record) {
|
|
26
|
+
// LDR/06=t ja 11-14=####, niin LDR/06 muutetaan s:ksi
|
|
27
|
+
const [f008] = record.pop(/008/u); // eslint-disable-line functional/immutable-data
|
|
28
|
+
const c06 = f008.value.substring(6, 7);
|
|
29
|
+
const c1114 = f008.value.substring(11, 15);
|
|
30
|
+
// if 008 06 = s, and 11-14 = #### (not year/digits)
|
|
31
|
+
if (c06 === 't' && !(/[0-9u]{4}/u).test(c1114)) {
|
|
32
|
+
f008.value = `${f008.value.substring(0, 6)}s${f008.value.substring(7)}`; // eslint-disable-line functional/immutable-data
|
|
33
|
+
record.insertField(f008);
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
record.insertField(f008);
|
|
38
|
+
return true;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import {expect} from 'chai';
|
|
2
|
+
import {MarcRecord} from '@natlibfi/marc-record';
|
|
3
|
+
import validatorFactory from './typeOfDate-008';
|
|
4
|
+
import {READERS} from '@natlibfi/fixura';
|
|
5
|
+
import generateTests from '@natlibfi/fixugen';
|
|
6
|
+
import createDebugLogger from 'debug';
|
|
7
|
+
|
|
8
|
+
generateTests({
|
|
9
|
+
callback,
|
|
10
|
+
path: [__dirname, '..', 'test-fixtures', 'typeOfDate-008'],
|
|
11
|
+
useMetadataFile: true,
|
|
12
|
+
recurse: false,
|
|
13
|
+
fixura: {
|
|
14
|
+
reader: READERS.JSON
|
|
15
|
+
},
|
|
16
|
+
mocha: {
|
|
17
|
+
before: () => testValidatorFactory()
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/typeOfDate-008:test'); // eslint-disable-line
|
|
21
|
+
|
|
22
|
+
async function testValidatorFactory() {
|
|
23
|
+
const validator = await validatorFactory();
|
|
24
|
+
|
|
25
|
+
expect(validator)
|
|
26
|
+
.to.be.an('object')
|
|
27
|
+
.that.has.any.keys('description', 'validate');
|
|
28
|
+
|
|
29
|
+
expect(validator.description).to.be.a('string');
|
|
30
|
+
expect(validator.validate).to.be.a('function');
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
async function callback({getFixture, fix = false}) {
|
|
34
|
+
const validator = await validatorFactory();
|
|
35
|
+
const record = new MarcRecord(getFixture('record.json'));
|
|
36
|
+
const expectedResult = getFixture('expectedResult.json');
|
|
37
|
+
// console.log(expectedResult); // eslint-disable-line
|
|
38
|
+
|
|
39
|
+
if (!fix) {
|
|
40
|
+
const result = await validator.validate(record);
|
|
41
|
+
expect(result).to.eql(expectedResult);
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
await validator.fix(record);
|
|
46
|
+
expect(record).to.eql(expectedResult);
|
|
47
|
+
}
|
package/src/utils.js
CHANGED