@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.
@@ -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\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"}
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
@@ -14,7 +14,7 @@
14
14
  "url": "git@github.com:natlibfi/marc-record-validators-melinda.git"
15
15
  },
16
16
  "license": "MIT",
17
- "version": "10.6.0",
17
+ "version": "10.7.0",
18
18
  "main": "./dist/index.js",
19
19
  "publishConfig": {
20
20
  "access": "public"
@@ -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
@@ -43,4 +43,3 @@ export function fieldToString(f) {
43
43
  export function fieldsToString(fields) {
44
44
  return fields.map(f => fieldToString(f)).join('\t__SEPARATOR__\t');
45
45
  }
46
-
@@ -0,0 +1,3 @@
1
+ {
2
+ "valid": true
3
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "description": "Valid 008 06 t",
3
+ "only": false
4
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "_validationOptions": {},
3
+ "fields": [
4
+ {
5
+ "tag": "001",
6
+ "value": "f01"
7
+ },
8
+ {
9
+ "tag": "008",
10
+ "value": "230512t20222022er |||| |0| f|est|c"
11
+ }
12
+ ],
13
+ "leader": ""
14
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "message": "Invalid 008 06",
3
+ "valid": false
4
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "description": "Invalid 008 06 t",
3
+ "only": false
4
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "_validationOptions": {},
3
+ "fields": [
4
+ {
5
+ "tag": "001",
6
+ "value": "f01"
7
+ },
8
+ {
9
+ "tag": "008",
10
+ "value": "230512t2022 fi |||| |0| 0|fin|c"
11
+ }
12
+ ],
13
+ "leader": ""
14
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "_validationOptions": {},
3
+ "fields": [
4
+ {
5
+ "tag": "001",
6
+ "value": "f01"
7
+ },
8
+ {
9
+ "tag": "008",
10
+ "value": "230512s2022 fi |||| |0| 0|fin|c"
11
+ }
12
+ ],
13
+ "leader": ""
14
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "description": "Invalid 008 06 t & fix",
3
+ "fix": true,
4
+ "only": false
5
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "_validationOptions": {},
3
+ "fields": [
4
+ {
5
+ "tag": "001",
6
+ "value": "f01"
7
+ },
8
+ {
9
+ "tag": "008",
10
+ "value": "230512t2022 fi |||| |0| 0|fin|c"
11
+ }
12
+ ],
13
+ "leader": ""
14
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "_validationOptions": {},
3
+ "fields": [
4
+ {
5
+ "tag": "001",
6
+ "value": "f01"
7
+ },
8
+ {
9
+ "tag": "008",
10
+ "value": "230512t20222022er |||| |0| f|est|c"
11
+ }
12
+ ],
13
+ "leader": ""
14
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "description": "Valid 008 06 t, fix does not change t to s",
3
+ "fix": true,
4
+ "only": false
5
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "_validationOptions": {},
3
+ "fields": [
4
+ {
5
+ "tag": "001",
6
+ "value": "f01"
7
+ },
8
+ {
9
+ "tag": "008",
10
+ "value": "230512t20222022er |||| |0| f|est|c"
11
+ }
12
+ ],
13
+ "leader": ""
14
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "_validationOptions": {},
3
+ "fields": [
4
+ {
5
+ "tag": "001",
6
+ "value": "f01"
7
+ },
8
+ {
9
+ "tag": "008",
10
+ "value": "230512t20222uuuer |||| |0| f|est|c"
11
+ }
12
+ ],
13
+ "leader": ""
14
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "description": "Valid 008 06 t and u year, fix does not change t to s",
3
+ "fix": true,
4
+ "only": false
5
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "_validationOptions": {},
3
+ "fields": [
4
+ {
5
+ "tag": "001",
6
+ "value": "f01"
7
+ },
8
+ {
9
+ "tag": "008",
10
+ "value": "230512t20222uuuer |||| |0| f|est|c"
11
+ }
12
+ ],
13
+ "leader": ""
14
+ }