@natlibfi/marc-record-validators-melinda 9.0.10-alpha.2 → 9.0.10-alpha.3
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 +11 -0
- package/dist/access-rights.js.map +1 -1
- package/dist/access-rights.spec.js +15 -3
- package/dist/access-rights.spec.js.map +1 -1
- package/dist/urn.js +9 -0
- package/dist/urn.js.map +1 -1
- package/dist/urn.spec.js +18 -6
- package/dist/urn.spec.js.map +1 -1
- package/dist/utils.js +16 -0
- package/dist/utils.js.map +1 -0
- package/package.json +1 -1
- package/src/access-rights.js +10 -0
- package/src/access-rights.spec.js +13 -3
- package/src/urn.js +6 -0
- package/src/urn.spec.js +19 -6
- package/src/utils.js +9 -0
package/dist/access-rights.js
CHANGED
|
@@ -5,6 +5,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.default = _default;
|
|
7
7
|
|
|
8
|
+
var _utils = require("./utils");
|
|
9
|
+
|
|
8
10
|
function _default() {
|
|
9
11
|
const sf506 = [{
|
|
10
12
|
code: 'a',
|
|
@@ -16,6 +18,8 @@ function _default() {
|
|
|
16
18
|
}];
|
|
17
19
|
|
|
18
20
|
function fix(record) {
|
|
21
|
+
// If printed do nothing
|
|
22
|
+
// If material is electronic add theis if missing
|
|
19
23
|
if (!hasTag(record, '506', sf506)) {
|
|
20
24
|
// eslint-disable-line functional/no-conditional-statement
|
|
21
25
|
record.insertField({
|
|
@@ -70,6 +74,13 @@ function _default() {
|
|
|
70
74
|
}
|
|
71
75
|
|
|
72
76
|
function validate(record) {
|
|
77
|
+
// if not electronic skip this validator
|
|
78
|
+
if (!(0, _utils.isElectronicMaterial)(record)) {
|
|
79
|
+
return {
|
|
80
|
+
valid: true
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
|
|
73
84
|
return {
|
|
74
85
|
valid: hasTag(record, '506', sf506) && hasTag(record, '540', sf540)
|
|
75
86
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"access-rights.js","names":["sf506","code","value","sf540","fix","record","hasTag","insertField","tag","ind1","subfields","validate","valid","description","rec","sfcv","fields","some","f","every","sf","test"],"sources":["../src/access-rights.js"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"access-rights.js","names":["sf506","code","value","sf540","fix","record","hasTag","insertField","tag","ind1","subfields","validate","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,GAAP;IAAYC,KAAK,EAAE;EAAnB,CAAD,CAAd;EACA,MAAMC,KAAK,GAAG,CAAC;IAACF,IAAI,EAAE,GAAP;IAAYC,KAAK,EAAE;EAAnB,CAAD,CAAd;;EAEA,SAASE,GAAT,CAAaC,MAAb,EAAqB;IACnB;IAEA;IACA,IAAI,CAACC,MAAM,CAACD,MAAD,EAAS,KAAT,EAAgBL,KAAhB,CAAX,EAAmC;MAAE;MACnCK,MAAM,CAACE,WAAP,CAAmB;QACjBC,GAAG,EAAE,KADY;QAEjBC,IAAI,EAAE,GAFW;QAGjBC,SAAS,EAAE,CACT;UACET,IAAI,EAAE,GADR;UAEEC,KAAK,EAAE;QAFT,CADS,EAIN;UACDD,IAAI,EAAE,GADL;UAEDC,KAAK,EAAE;QAFN,CAJM,EAON;UACDD,IAAI,EAAE,GADL;UAEDC,KAAK,EAAE;QAFN,CAPM,EAUN;UACDD,IAAI,EAAE,GADL;UAEDC,KAAK,EAAE;QAFN,CAVM,EAaN;UACDD,IAAI,EAAE,GADL;UAEDC,KAAK,EAAE;QAFN,CAbM;MAHM,CAAnB;IAsBD;;IAED,IAAI,CAACI,MAAM,CAACD,MAAD,EAAS,KAAT,EAAgBF,KAAhB,CAAX,EAAmC;MAAE;MACnCE,MAAM,CAACE,WAAP,CAAmB;QACjBC,GAAG,EAAE,KADY;QAEjBE,SAAS,EAAE,CACT;UACET,IAAI,EAAE,GADR;UAEEC,KAAK,EAAE;QAFT,CADS,EAIN;UACDD,IAAI,EAAE,GADL;UAEDC,KAAK,EAAE;QAFN,CAJM,EAON;UACDD,IAAI,EAAE,GADL;UAEDC,KAAK,EAAE;QAFN,CAPM,EAUN;UACDD,IAAI,EAAE,GADL;UAEDC,KAAK,EAAE;QAFN,CAVM,EAaN;UACDD,IAAI,EAAE,GADL;UAEDC,KAAK,EAAE;QAFN,CAbM,EAgBN;UACDD,IAAI,EAAE,GADL;UAEDC,KAAK,EAAE;QAFN,CAhBM;MAFM,CAAnB;IAwBD;;IAED,OAAO,IAAP;EACD;;EAED,SAASS,QAAT,CAAkBN,MAAlB,EAA0B;IACxB;IACA,IAAI,CAAC,iCAAqBA,MAArB,CAAL,EAAmC;MACjC,OAAO;QAACO,KAAK,EAAE;MAAR,CAAP;IACD;;IAED,OAAO;MAACA,KAAK,EAAEN,MAAM,CAACD,MAAD,EAAS,KAAT,EAAgBL,KAAhB,CAAN,IAAgCM,MAAM,CAACD,MAAD,EAAS,KAAT,EAAgBF,KAAhB;IAA9C,CAAP;EACD;;EAED,OAAO;IACLU,WAAW,EAAE,0DADR;IAELF,QAFK;IAGLP;EAHK,CAAP;;EAMA,SAASE,MAAT,CAAgBQ,GAAhB,EAAqBN,GAArB,EAA0BO,IAA1B,EAAgC;IAC9B,OAAOD,GAAG,CAACE,MAAJ,CAAWC,IAAX,CAAgBC,CAAC,IAAIA,CAAC,CAACV,GAAF,KAAUA,GAAV,IAAiBO,IAAI,CAACI,KAAL,CAAW,CAAC;MAAClB,IAAD;MAAOC;IAAP,CAAD,KAAmBgB,CAAC,CAACR,SAAF,CAAYO,IAAZ,CAAiBG,EAAE,IAAIA,EAAE,CAACnB,IAAH,KAAYA,IAAZ,IAAoBC,KAAK,CAACmB,IAAN,CAAWD,EAAE,CAAClB,KAAd,CAA3C,CAA9B,CAAtC,CAAP;EACD;AACF"}
|
|
@@ -10,6 +10,18 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
|
|
10
10
|
|
|
11
11
|
describe('access-rights', async () => {
|
|
12
12
|
// Fields
|
|
13
|
+
const f337 = {
|
|
14
|
+
tag: '337',
|
|
15
|
+
ind1: ' ',
|
|
16
|
+
ind2: ' ',
|
|
17
|
+
subfields: [{
|
|
18
|
+
code: 'b',
|
|
19
|
+
value: 'c'
|
|
20
|
+
}, {
|
|
21
|
+
code: '2',
|
|
22
|
+
value: 'rdamedia'
|
|
23
|
+
}]
|
|
24
|
+
};
|
|
13
25
|
const ldf5061 = {
|
|
14
26
|
tag: '506',
|
|
15
27
|
ind1: '1',
|
|
@@ -114,13 +126,13 @@ describe('access-rights', async () => {
|
|
|
114
126
|
await test.validate(true, ldf5061, ldf540);
|
|
115
127
|
});
|
|
116
128
|
it('Finds the record invalid; Missing 5061', async () => {
|
|
117
|
-
await test.validate(false, f5060, ldf540);
|
|
129
|
+
await test.validate(false, f337, f5060, ldf540);
|
|
118
130
|
});
|
|
119
131
|
it('Finds the record invalid; Missing 540', async () => {
|
|
120
|
-
await test.validate(false, ldf5061, f540);
|
|
132
|
+
await test.validate(false, f337, ldf5061, f540);
|
|
121
133
|
});
|
|
122
134
|
it('Finds the record invalid; Missing 5061 and 540', async () => {
|
|
123
|
-
await test.validate(false, f5060, f540);
|
|
135
|
+
await test.validate(false, f337, f5060, f540);
|
|
124
136
|
});
|
|
125
137
|
});
|
|
126
138
|
describe('#fix', () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"access-rights.spec.js","names":["describe","
|
|
1
|
+
{"version":3,"file":"access-rights.spec.js","names":["describe","f337","tag","ind1","ind2","subfields","code","value","ldf5061","ldf540","f5060","f540","it","validator","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, f540, ldf540]);\n });\n\n it('Both, 5061 and 540, missing; Adds 5061 and 540', async () => {\n await test.fix([f5060, f540], [f5060, ldf5061, f540, ldf540]);\n });\n });\n});\n"],"mappings":"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"}
|
package/dist/urn.js
CHANGED
|
@@ -7,6 +7,8 @@ exports.default = _default;
|
|
|
7
7
|
|
|
8
8
|
var _nodeFetch = _interopRequireDefault(require("node-fetch"));
|
|
9
9
|
|
|
10
|
+
var _utils = require("./utils");
|
|
11
|
+
|
|
10
12
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
11
13
|
|
|
12
14
|
const URN_GENERATOR_URL = 'http://generator.urn.fi/cgi-bin/urn_generator.cgi?type=nbn';
|
|
@@ -124,6 +126,13 @@ function _default(isLegalDeposit = false) {
|
|
|
124
126
|
}
|
|
125
127
|
|
|
126
128
|
function validate(record) {
|
|
129
|
+
// if not electronic skip this validator
|
|
130
|
+
if (!(0, _utils.isElectronicMaterial)(record)) {
|
|
131
|
+
return {
|
|
132
|
+
valid: true
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
|
|
127
136
|
return {
|
|
128
137
|
valid: record.fields.some(hasURN) && !isLegalDeposit
|
|
129
138
|
};
|
package/dist/urn.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"urn.js","names":["URN_GENERATOR_URL","isLegalDeposit","hasURN","f","tag","subfields","some","code","value","test","description","validate","fix","record","f856sUrn","fields","filter","ldSubfields","createLDSubfields","length","generated","createURNSubfield","tempSubField","insertField","ind1","ind2","forEach","ldsf","sf","push","rec","isbn","reduce","acc","a","find","undefined","createURN","response","body","text","valid"],"sources":["../src/urn.js"],"sourcesContent":["import fetch from 'node-fetch';\n\nconst URN_GENERATOR_URL = 'http://generator.urn.fi/cgi-bin/urn_generator.cgi?type=nbn';\n\nexport default function (isLegalDeposit = false) {\n const hasURN = f => f.tag === '856' && f.subfields.some(({code, value}) => code === 'u' && (/urn.fi/u).test(value));\n\n return {\n description: 'Adds URN for record, to 856-field (if not existing)',\n validate,\n fix\n };\n\n async function fix(record) {\n const f856sUrn = record.fields.filter(hasURN);\n const ldSubfields = isLegalDeposit ? createLDSubfields() : [];\n if (f856sUrn.length === 0) { // eslint-disable-line functional/no-conditional-statement\n const {code, value, generated} = await createURNSubfield(record);\n const tempSubField = {code: '9', value: 'MELINDA<TEMP>'};\n if (generated) {\n record.insertField({\n tag: '856',\n ind1: '4',\n ind2: '0',\n subfields: [{code, value}, ...ldSubfields, tempSubField]\n });\n\n return true;\n }\n\n record.insertField({\n tag: '856',\n ind1: '4',\n ind2: '0',\n subfields: [{code, value}, ...ldSubfields]\n });\n\n return true;\n } else if (isLegalDeposit) { // eslint-disable-line functional/no-conditional-statement\n f856sUrn.forEach(f => {\n ldSubfields.forEach(ldsf => {\n if (!f.subfields.some(sf => sf.code === ldsf.code && sf.value === ldsf.value)) { // eslint-disable-line functional/no-conditional-statement\n f.subfields.push(ldsf); // eslint-disable-line functional/immutable-data\n }\n });\n });\n }\n\n return true;\n\n async function createURNSubfield(rec) {\n const isbn = rec.fields.reduce((acc, f) => {\n if (f.tag === '020') {\n const a = f.subfields.find(sf => sf.code === 'a');\n return a ? a.value : undefined;\n }\n\n return acc;\n }, undefined);\n\n const {generated, value} = await createURN(isbn);\n return {code: 'u', value, generated};\n\n async function createURN(isbn = false) {\n if (isbn) {\n return {generated: false, value: `http://urn.fi/URN:ISBN:${isbn}`};\n }\n\n const response = await fetch(URN_GENERATOR_URL);\n const body = await response.text();\n return {generated: true, value: `http://urn.fi/${body}`};\n }\n }\n\n function createLDSubfields() {\n return [\n {\n code: 'z',\n value: 'Käytettävissä vapaakappalekirjastoissa'\n },\n {\n code: '5',\n value: 'FI-Vapaa'\n }\n ];\n }\n }\n\n function validate(record) {\n return {valid: record.fields.some(hasURN) && !isLegalDeposit};\n }\n}\n"],"mappings":"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
|
|
1
|
+
{"version":3,"file":"urn.js","names":["URN_GENERATOR_URL","isLegalDeposit","hasURN","f","tag","subfields","some","code","value","test","description","validate","fix","record","f856sUrn","fields","filter","ldSubfields","createLDSubfields","length","generated","createURNSubfield","tempSubField","insertField","ind1","ind2","forEach","ldsf","sf","push","rec","isbn","reduce","acc","a","find","undefined","createURN","response","body","text","valid"],"sources":["../src/urn.js"],"sourcesContent":["import fetch from 'node-fetch';\nimport {isElectronicMaterial} from './utils';\n\nconst URN_GENERATOR_URL = 'http://generator.urn.fi/cgi-bin/urn_generator.cgi?type=nbn';\n\nexport default function (isLegalDeposit = false) {\n const hasURN = f => f.tag === '856' && f.subfields.some(({code, value}) => code === 'u' && (/urn.fi/u).test(value));\n\n return {\n description: 'Adds URN for record, to 856-field (if not existing)',\n validate,\n fix\n };\n\n async function fix(record) {\n const f856sUrn = record.fields.filter(hasURN);\n const ldSubfields = isLegalDeposit ? createLDSubfields() : [];\n if (f856sUrn.length === 0) { // eslint-disable-line functional/no-conditional-statement\n const {code, value, generated} = await createURNSubfield(record);\n const tempSubField = {code: '9', value: 'MELINDA<TEMP>'};\n if (generated) {\n record.insertField({\n tag: '856',\n ind1: '4',\n ind2: '0',\n subfields: [{code, value}, ...ldSubfields, tempSubField]\n });\n\n return true;\n }\n\n record.insertField({\n tag: '856',\n ind1: '4',\n ind2: '0',\n subfields: [{code, value}, ...ldSubfields]\n });\n\n return true;\n } else if (isLegalDeposit) { // eslint-disable-line functional/no-conditional-statement\n f856sUrn.forEach(f => {\n ldSubfields.forEach(ldsf => {\n if (!f.subfields.some(sf => sf.code === ldsf.code && sf.value === ldsf.value)) { // eslint-disable-line functional/no-conditional-statement\n f.subfields.push(ldsf); // eslint-disable-line functional/immutable-data\n }\n });\n });\n }\n\n return true;\n\n async function createURNSubfield(rec) {\n const isbn = rec.fields.reduce((acc, f) => {\n if (f.tag === '020') {\n const a = f.subfields.find(sf => sf.code === 'a');\n return a ? a.value : undefined;\n }\n\n return acc;\n }, undefined);\n\n const {generated, value} = await createURN(isbn);\n return {code: 'u', value, generated};\n\n async function createURN(isbn = false) {\n if (isbn) {\n return {generated: false, value: `http://urn.fi/URN:ISBN:${isbn}`};\n }\n\n const response = await fetch(URN_GENERATOR_URL);\n const body = await response.text();\n return {generated: true, value: `http://urn.fi/${body}`};\n }\n }\n\n function createLDSubfields() {\n return [\n {\n code: 'z',\n value: 'Käytettävissä vapaakappalekirjastoissa'\n },\n {\n code: '5',\n value: 'FI-Vapaa'\n }\n ];\n }\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: record.fields.some(hasURN) && !isLegalDeposit};\n }\n}\n"],"mappings":"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"}
|
package/dist/urn.spec.js
CHANGED
|
@@ -10,6 +10,18 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
|
|
10
10
|
|
|
11
11
|
describe('urn', async () => {
|
|
12
12
|
// Fields
|
|
13
|
+
const f337 = {
|
|
14
|
+
tag: '337',
|
|
15
|
+
ind1: ' ',
|
|
16
|
+
ind2: ' ',
|
|
17
|
+
subfields: [{
|
|
18
|
+
code: 'b',
|
|
19
|
+
value: 'c'
|
|
20
|
+
}, {
|
|
21
|
+
code: '2',
|
|
22
|
+
value: 'rdamedia'
|
|
23
|
+
}]
|
|
24
|
+
};
|
|
13
25
|
const ldf856 = {
|
|
14
26
|
tag: '856',
|
|
15
27
|
ind1: '4',
|
|
@@ -86,23 +98,23 @@ describe('urn', async () => {
|
|
|
86
98
|
describe('#validate', () => {
|
|
87
99
|
// Validate non-legal deposit
|
|
88
100
|
it('Finds the record valid; 856 with urn, and is non-legal deposit', async () => {
|
|
89
|
-
await nonld.validate(true, f856URN);
|
|
101
|
+
await nonld.validate(true, f337, f856URN);
|
|
90
102
|
});
|
|
91
103
|
it('Finds the record invalid; 856 without urn, and is non-legal deposit', async () => {
|
|
92
|
-
await nonld.validate(false, f856URL);
|
|
104
|
+
await nonld.validate(false, f337, f856URL);
|
|
93
105
|
});
|
|
94
106
|
it('Finds the record invalid; Missing 856, and is non-legal deposit', async () => {
|
|
95
|
-
await nonld.validate(false, f020);
|
|
107
|
+
await nonld.validate(false, f337, f020);
|
|
96
108
|
}); // Validate legal deposit
|
|
97
109
|
|
|
98
110
|
it('Finds the record invalid; 856 with urn, and is legal deposit', async () => {
|
|
99
|
-
await ld.validate(false, f020, f856URN);
|
|
111
|
+
await ld.validate(false, f020, f337, f856URN);
|
|
100
112
|
});
|
|
101
113
|
it('Finds the record invalid; 856 without urn, and is legal deposit', async () => {
|
|
102
|
-
await ld.validate(false, f020, f856URL);
|
|
114
|
+
await ld.validate(false, f020, f337, f856URL);
|
|
103
115
|
});
|
|
104
116
|
it('Finds the record invalid; Missing 856, and is legal deposit', async () => {
|
|
105
|
-
await ld.validate(false, f020);
|
|
117
|
+
await ld.validate(false, f337, f020);
|
|
106
118
|
});
|
|
107
119
|
});
|
|
108
120
|
describe('#fix', () => {
|
package/dist/urn.spec.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"urn.spec.js","names":["describe","
|
|
1
|
+
{"version":3,"file":"urn.spec.js","names":["describe","f337","tag","ind1","ind2","subfields","code","value","ldf856","f856URN","f856URL","f020","it","validator","to","be","an","that","has","any","keys","description","a","validate","test","isLegalDeposit","valid","recfields","result","MarcRecord","fields","eql","fix","resfields","record","nonld","ld"],"sources":["../src/urn.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from '../src/urn';\n\ndescribe('urn', 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 ldf856 = {\n tag: '856',\n ind1: '4',\n ind2: '0',\n subfields: [\n {code: 'u', value: 'http://urn.fi/URN:ISBN:978-951-9155-47-0'},\n {code: 'z', value: 'Käytettävissä vapaakappalekirjastoissa'},\n {code: '5', value: 'FI-Vapaa'}\n ]\n };\n\n const f856URN = {\n tag: '856',\n ind1: '4',\n ind2: '0',\n subfields: [{code: 'u', value: 'http://urn.fi/URN:ISBN:978-951-9155-47-0'}]\n };\n\n const f856URL = {\n tag: '856',\n ind1: '4',\n ind2: '0',\n subfields: [{code: 'u', value: 'http://foo.bar/'}]\n };\n\n const f020 = {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: '978-951-9155-47-0'}]\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 = async isLegalDeposit => {\n const validator = await validatorFactory(isLegalDeposit);\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 /// Non-legal and legal deposit\n const nonld = await test(false);\n const ld = await test(true);\n\n describe('#validate', () => {\n // Validate non-legal deposit\n it('Finds the record valid; 856 with urn, and is non-legal deposit', async () => {\n await nonld.validate(true, f337, f856URN);\n });\n\n it('Finds the record invalid; 856 without urn, and is non-legal deposit', async () => {\n await nonld.validate(false, f337, f856URL);\n });\n\n it('Finds the record invalid; Missing 856, and is non-legal deposit', async () => {\n await nonld.validate(false, f337, f020);\n });\n\n // Validate legal deposit\n it('Finds the record invalid; 856 with urn, and is legal deposit', async () => {\n await ld.validate(false, f020, f337, f856URN);\n });\n\n it('Finds the record invalid; 856 without urn, and is legal deposit', async () => {\n await ld.validate(false, f020, f337, f856URL);\n });\n\n it('Finds the record invalid; Missing 856, and is legal deposit', async () => {\n await ld.validate(false, f337, f020);\n });\n });\n\n describe('#fix', () => {\n // Validate non-legal deposit\n it('856 with urn, and is non-legal deposit; Nothing to add', async () => {\n await nonld.fix([f020, f856URL, f856URN], [f020, f856URL, f856URN]);\n });\n\n it('856 without urn, and is non-legal deposit; Adds 856 with urn', async () => {\n await nonld.fix([f020, f856URL], [f020, f856URL, f856URN]);\n });\n\n it('Missing 856, and is non-legal deposit; Adds 856 with urn', async () => {\n await nonld.fix([f020], [f020, f856URN]);\n });\n\n // Validate legal deposit\n it('856 with urn and legal deposit fields, and is legal deposit; Nothing to add', async () => {\n await ld.fix([f020, f856URL, ldf856], [f020, f856URL, ldf856]);\n });\n\n it('856 without urn, and is legal deposit; Adds 856 with urn and legal deposit fields', async () => {\n await ld.fix([f020, f856URL], [f020, f856URL, ldf856]);\n });\n\n it('Missing 856, and is legal deposit; Adds 856 with urn and legal deposit fields', async () => {\n await ld.fix([f020], [f020, ldf856]);\n });\n\n it('856 with urn, and is legal deposit; Adds legal deposit fields', async () => {\n await ld.fix([f020, f856URL, f856URN], [f020, f856URL, ldf856]);\n });\n });\n});\n"],"mappings":"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"}
|
package/dist/utils.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.isElectronicMaterial = isElectronicMaterial;
|
|
7
|
+
|
|
8
|
+
function isElectronicMaterial(record) {
|
|
9
|
+
const f337s = record.get('337');
|
|
10
|
+
return f337s.some(field => {
|
|
11
|
+
const mediaTypeIsC = field.subfields.some(sub => sub.code === 'b' && sub.value === 'c');
|
|
12
|
+
const sourceIsRdamedia = field.subfields.some(sub => sub.code === '2' && sub.value === 'rdamedia');
|
|
13
|
+
return mediaTypeIsC && sourceIsRdamedia;
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","names":["isElectronicMaterial","record","f337s","get","some","field","mediaTypeIsC","subfields","sub","code","value","sourceIsRdamedia"],"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"],"mappings":";;;;;;;AAAO,SAASA,oBAAT,CAA8BC,MAA9B,EAAsC;EAC3C,MAAMC,KAAK,GAAGD,MAAM,CAACE,GAAP,CAAW,KAAX,CAAd;EAEA,OAAOD,KAAK,CAACE,IAAN,CAAWC,KAAK,IAAI;IACzB,MAAMC,YAAY,GAAGD,KAAK,CAACE,SAAN,CAAgBH,IAAhB,CAAqBI,GAAG,IAAIA,GAAG,CAACC,IAAJ,KAAa,GAAb,IAAoBD,GAAG,CAACE,KAAJ,KAAc,GAA9D,CAArB;IACA,MAAMC,gBAAgB,GAAGN,KAAK,CAACE,SAAN,CAAgBH,IAAhB,CAAqBI,GAAG,IAAIA,GAAG,CAACC,IAAJ,KAAa,GAAb,IAAoBD,GAAG,CAACE,KAAJ,KAAc,UAA9D,CAAzB;IACA,OAAOJ,YAAY,IAAIK,gBAAvB;EACD,CAJM,CAAP;AAKD"}
|
package/package.json
CHANGED
package/src/access-rights.js
CHANGED
|
@@ -1,8 +1,13 @@
|
|
|
1
|
+
import {isElectronicMaterial} from './utils';
|
|
2
|
+
|
|
1
3
|
export default function () {
|
|
2
4
|
const sf506 = [{code: 'a', value: /aineisto on käytettävissä vapaakappalekirjastoissa/ui}];
|
|
3
5
|
const sf540 = [{code: 'c', value: /laki kulttuuriaineistojen tallettamisesta ja säilyttämisestä/ui}];
|
|
4
6
|
|
|
5
7
|
function fix(record) {
|
|
8
|
+
// If printed do nothing
|
|
9
|
+
|
|
10
|
+
// If material is electronic add theis if missing
|
|
6
11
|
if (!hasTag(record, '506', sf506)) { // eslint-disable-line functional/no-conditional-statement
|
|
7
12
|
record.insertField({
|
|
8
13
|
tag: '506',
|
|
@@ -59,6 +64,11 @@ export default function () {
|
|
|
59
64
|
}
|
|
60
65
|
|
|
61
66
|
function validate(record) {
|
|
67
|
+
// if not electronic skip this validator
|
|
68
|
+
if (!isElectronicMaterial(record)) {
|
|
69
|
+
return {valid: true};
|
|
70
|
+
}
|
|
71
|
+
|
|
62
72
|
return {valid: hasTag(record, '506', sf506) && hasTag(record, '540', sf540)};
|
|
63
73
|
}
|
|
64
74
|
|
|
@@ -4,6 +4,16 @@ import validatorFactory from '../src/access-rights';
|
|
|
4
4
|
|
|
5
5
|
describe('access-rights', async () => {
|
|
6
6
|
// Fields
|
|
7
|
+
const f337 = {
|
|
8
|
+
tag: '337',
|
|
9
|
+
ind1: ' ',
|
|
10
|
+
ind2: ' ',
|
|
11
|
+
subfields: [
|
|
12
|
+
{code: 'b', value: 'c'},
|
|
13
|
+
{code: '2', value: 'rdamedia'}
|
|
14
|
+
]
|
|
15
|
+
};
|
|
16
|
+
|
|
7
17
|
const ldf5061 = {
|
|
8
18
|
tag: '506',
|
|
9
19
|
ind1: '1',
|
|
@@ -81,15 +91,15 @@ describe('access-rights', async () => {
|
|
|
81
91
|
});
|
|
82
92
|
|
|
83
93
|
it('Finds the record invalid; Missing 5061', async () => {
|
|
84
|
-
await test.validate(false, f5060, ldf540);
|
|
94
|
+
await test.validate(false, f337, f5060, ldf540);
|
|
85
95
|
});
|
|
86
96
|
|
|
87
97
|
it('Finds the record invalid; Missing 540', async () => {
|
|
88
|
-
await test.validate(false, ldf5061, f540);
|
|
98
|
+
await test.validate(false, f337, ldf5061, f540);
|
|
89
99
|
});
|
|
90
100
|
|
|
91
101
|
it('Finds the record invalid; Missing 5061 and 540', async () => {
|
|
92
|
-
await test.validate(false, f5060, f540);
|
|
102
|
+
await test.validate(false, f337, f5060, f540);
|
|
93
103
|
});
|
|
94
104
|
});
|
|
95
105
|
|
package/src/urn.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import fetch from 'node-fetch';
|
|
2
|
+
import {isElectronicMaterial} from './utils';
|
|
2
3
|
|
|
3
4
|
const URN_GENERATOR_URL = 'http://generator.urn.fi/cgi-bin/urn_generator.cgi?type=nbn';
|
|
4
5
|
|
|
@@ -87,6 +88,11 @@ export default function (isLegalDeposit = false) {
|
|
|
87
88
|
}
|
|
88
89
|
|
|
89
90
|
function validate(record) {
|
|
91
|
+
// if not electronic skip this validator
|
|
92
|
+
if (!isElectronicMaterial(record)) {
|
|
93
|
+
return {valid: true};
|
|
94
|
+
}
|
|
95
|
+
|
|
90
96
|
return {valid: record.fields.some(hasURN) && !isLegalDeposit};
|
|
91
97
|
}
|
|
92
98
|
}
|
package/src/urn.spec.js
CHANGED
|
@@ -4,6 +4,16 @@ import validatorFactory from '../src/urn';
|
|
|
4
4
|
|
|
5
5
|
describe('urn', async () => {
|
|
6
6
|
// Fields
|
|
7
|
+
const f337 = {
|
|
8
|
+
tag: '337',
|
|
9
|
+
ind1: ' ',
|
|
10
|
+
ind2: ' ',
|
|
11
|
+
subfields: [
|
|
12
|
+
{code: 'b', value: 'c'},
|
|
13
|
+
{code: '2', value: 'rdamedia'}
|
|
14
|
+
]
|
|
15
|
+
};
|
|
16
|
+
|
|
7
17
|
const ldf856 = {
|
|
8
18
|
tag: '856',
|
|
9
19
|
ind1: '4',
|
|
@@ -14,18 +24,21 @@ describe('urn', async () => {
|
|
|
14
24
|
{code: '5', value: 'FI-Vapaa'}
|
|
15
25
|
]
|
|
16
26
|
};
|
|
27
|
+
|
|
17
28
|
const f856URN = {
|
|
18
29
|
tag: '856',
|
|
19
30
|
ind1: '4',
|
|
20
31
|
ind2: '0',
|
|
21
32
|
subfields: [{code: 'u', value: 'http://urn.fi/URN:ISBN:978-951-9155-47-0'}]
|
|
22
33
|
};
|
|
34
|
+
|
|
23
35
|
const f856URL = {
|
|
24
36
|
tag: '856',
|
|
25
37
|
ind1: '4',
|
|
26
38
|
ind2: '0',
|
|
27
39
|
subfields: [{code: 'u', value: 'http://foo.bar/'}]
|
|
28
40
|
};
|
|
41
|
+
|
|
29
42
|
const f020 = {
|
|
30
43
|
tag: '020',
|
|
31
44
|
ind1: ' ',
|
|
@@ -68,28 +81,28 @@ describe('urn', async () => {
|
|
|
68
81
|
describe('#validate', () => {
|
|
69
82
|
// Validate non-legal deposit
|
|
70
83
|
it('Finds the record valid; 856 with urn, and is non-legal deposit', async () => {
|
|
71
|
-
await nonld.validate(true, f856URN);
|
|
84
|
+
await nonld.validate(true, f337, f856URN);
|
|
72
85
|
});
|
|
73
86
|
|
|
74
87
|
it('Finds the record invalid; 856 without urn, and is non-legal deposit', async () => {
|
|
75
|
-
await nonld.validate(false, f856URL);
|
|
88
|
+
await nonld.validate(false, f337, f856URL);
|
|
76
89
|
});
|
|
77
90
|
|
|
78
91
|
it('Finds the record invalid; Missing 856, and is non-legal deposit', async () => {
|
|
79
|
-
await nonld.validate(false, f020);
|
|
92
|
+
await nonld.validate(false, f337, f020);
|
|
80
93
|
});
|
|
81
94
|
|
|
82
95
|
// Validate legal deposit
|
|
83
96
|
it('Finds the record invalid; 856 with urn, and is legal deposit', async () => {
|
|
84
|
-
await ld.validate(false, f020, f856URN);
|
|
97
|
+
await ld.validate(false, f020, f337, f856URN);
|
|
85
98
|
});
|
|
86
99
|
|
|
87
100
|
it('Finds the record invalid; 856 without urn, and is legal deposit', async () => {
|
|
88
|
-
await ld.validate(false, f020, f856URL);
|
|
101
|
+
await ld.validate(false, f020, f337, f856URL);
|
|
89
102
|
});
|
|
90
103
|
|
|
91
104
|
it('Finds the record invalid; Missing 856, and is legal deposit', async () => {
|
|
92
|
-
await ld.validate(false, f020);
|
|
105
|
+
await ld.validate(false, f337, f020);
|
|
93
106
|
});
|
|
94
107
|
});
|
|
95
108
|
|
package/src/utils.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export function isElectronicMaterial(record) {
|
|
2
|
+
const f337s = record.get('337');
|
|
3
|
+
|
|
4
|
+
return f337s.some(field => {
|
|
5
|
+
const mediaTypeIsC = field.subfields.some(sub => sub.code === 'b' && sub.value === 'c');
|
|
6
|
+
const sourceIsRdamedia = field.subfields.some(sub => sub.code === '2' && sub.value === 'rdamedia');
|
|
7
|
+
return mediaTypeIsC && sourceIsRdamedia;
|
|
8
|
+
});
|
|
9
|
+
}
|