@natlibfi/marc-record-validators-melinda 9.0.12 → 9.0.13

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.
@@ -5,8 +5,10 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = _default;
7
7
  exports.fieldNormalizeControlNumbers = fieldNormalizeControlNumbers;
8
+ exports.isIsni = isIsni;
8
9
  exports.normalizeAs = normalizeAs;
9
10
  exports.normalizeControlSubfieldValue = normalizeControlSubfieldValue;
11
+ exports.normalizeIsni = normalizeIsni;
10
12
 
11
13
  var _clone = _interopRequireDefault(require("clone"));
12
14
 
@@ -1 +1 @@
1
- {"version":3,"file":"normalize-identifiers.js","names":["fieldToString","f","tag","ind1","ind2","formatSubfields","field","subfields","map","sf","code","value","join","description","validate","fix","record","res","message","valid","fields","forEach","fieldNormalizeControlNumbers","validateField","length","normalizedField","clone","orig","mod","push","alephInternal01","alephInternal10","alephInternal11","alephInternal12","alephInternal13","standard01","standard10","standard11","standard12","standard13","both01","ALEPH_INTERNAL","STANDARD","both10","both11","both12","both13","mappings","normalizeNineDigitIDs","targetFormat","nineDigitTail","slice","test","currPrefix","isIsni","normalizeIsni","replace","normalizeControlSubfieldValue","normalizedValue","normalizeAs","subfieldCode","includes","undefined"],"sources":["../src/normalize-identifiers.js"],"sourcesContent":["// Relocated from melinda-marc-record-merge-reducers (and renamed)\n//import createDebugLogger from 'debug';\nimport clone from 'clone';\n//const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda:normalizeIdentifiers');\n\n\nfunction fieldToString(f) {\n return `${f.tag} ${f.ind1}${f.ind2} ‡${formatSubfields(f)}`;\n\n function formatSubfields(field) {\n //return field.subfields.map(sf => `${sf.code}${sf.value || ''}`).join('‡');\n return field.subfields.map(sf => `${sf.code}${sf.value}`).join(' ‡');\n }\n}\n\n/*\nfunction nvdebug(message, func) {\n if (func) { // eslint-disable-line functional/no-conditional-statement\n func(message);\n }\n console.info(message); // eslint-disable-line no-console\n}\n*/\n\nexport default function () {\n\n // NB! We should and could handle ISNIs here as well.\n return {\n description: 'Normalizes identifiers such as subfield $0 values',\n validate, fix\n };\n\n function fix(record) {\n const res = {message: [], fix: [], valid: true};\n //message.fix = []; // eslint-disable-line functional/immutable-data\n\n // Actual parsing of all fields\n /*\n if (!record.fields) {\n return false;\n }\n */\n\n //nvdebug(`NORMALIZE CONTROL NUMBER FIX`, debug);\n record.fields.forEach(field => {\n //nvdebug(` NORMALIZE CONTROL NUMBER FIX ${fieldToString(field)}`, debug);\n\n fieldNormalizeControlNumbers(field);\n //validateField(field, true, message);\n });\n\n // message.valid = !(message.message.length >= 1); // eslint-disable-line functional/immutable-data\n return res;\n }\n\n function validate(record) {\n const res = {message: []};\n //nvdebug(`NORMALIZE CONTROL NUMBER VALIDATE`, debug);\n // Actual parsing of all fields\n /*\n if (!record.fields) {\n return false;\n }\n */\n\n record.fields.forEach(field => {\n //nvdebug(` NORMALIZE CONTROL NUMBER VALIDATE ${fieldToString(field)}`, debug);\n validateField(field, res);\n });\n\n res.valid = !(res.message.length >= 1); // eslint-disable-line functional/immutable-data\n return res;\n }\n\n function validateField(field, res) {\n if (!field.subfields) {\n return;\n }\n\n const normalizedField = clone(field);\n fieldNormalizeControlNumbers(normalizedField);\n\n const orig = fieldToString(field);\n const mod = fieldToString(normalizedField);\n if (orig !== mod) { // Fail as the input is \"broken\"/\"crap\"/sumthing\n res.message.push(`'${orig}' could do with control number identifier normalization`); // eslint-disable-line functional/immutable-data\n return;\n }\n\n return;\n }\n}\n\nconst alephInternal01 = '(FIN01)';\nconst alephInternal10 = '(FIN10)';\nconst alephInternal11 = '(FIN11)';\nconst alephInternal12 = '(FIN12)';\nconst alephInternal13 = '(FIN13)';\n\nconst standard01 = '(FI-MELINDA)';\nconst standard10 = '(FI-ASTERI-S)';\nconst standard11 = '(FI-ASTERI-N)';\nconst standard12 = '(FI-ASTERI-A)';\nconst standard13 = '(FI-ASTERI-W)';\n\nconst both01 = {ALEPH_INTERNAL: alephInternal01, STANDARD: standard01};\nconst both10 = {ALEPH_INTERNAL: alephInternal10, STANDARD: standard10};\nconst both11 = {ALEPH_INTERNAL: alephInternal11, STANDARD: standard11};\nconst both12 = {ALEPH_INTERNAL: alephInternal12, STANDARD: standard12};\nconst both13 = {ALEPH_INTERNAL: alephInternal13, STANDARD: standard13};\n\nconst mappings = {\n 'FCC': both01,\n '(FI-ASTERI-A)': both12,\n '(FI-ASTERI-N)': both11,\n '(FI-ASTERI-S)': both10,\n '(FI-ASTERI-W)': both13,\n '(FI-MELINDA)': both01,\n '(FIN01)': both01,\n '(FIN10)': both10,\n '(FIN11)': both11,\n '(FIN12)': both12,\n '(FIN13)': both13,\n 'http://urn.fi/URN:NBN:fi:au:finaf:': both11,\n 'https://urn.fi/URN:NBN:fi:au:finaf:': both11\n};\n\nfunction normalizeNineDigitIDs(value, targetFormat = 'ALEPH_INTERNAL') {\n // $value should be prefix + nine-digits. Do nothing if nine-digit tail condition is not met:\n const nineDigitTail = value.slice(-9);\n if (!(/^[0-9]{9}$/u).test(nineDigitTail)) {\n return value;\n }\n // Normalize prefix:\n const currPrefix = value.slice(0, -9);\n\n if (currPrefix in mappings) {\n //nvdebug(`${currPrefix}, TF:${targetFormat}...`);\n //nvdebug(`${JSON.stringify(mappings[currPrefix])}`);\n return `${mappings[currPrefix][targetFormat]}${nineDigitTail}`;\n }\n return value;\n}\n\nfunction isIsni(value) {\n if ((/^\\(isni\\)(?: ?[0-9]{4}){4}$/u).test(value)) {\n return true;\n }\n if ((/^https:\\/\\/isni.org\\/isni\\/[0-9]{16}$/u).test(value)) {\n return true;\n }\n return false;\n}\n\nfunction normalizeIsni(value) {\n if (isIsni(value)) {\n return `https://isni.org/isni/${value.replace(/[^0-9]/gu, '')}`;\n }\n return value;\n}\n\n\nexport function normalizeControlSubfieldValue(value = '', targetFormat = 'ALEPH_INTERNAL') {\n if (isIsni(value)) {\n return normalizeIsni(value);\n }\n\n const normalizedValue = normalizeNineDigitIDs(value, targetFormat);\n if (normalizedValue !== value) {\n return normalizedValue;\n }\n\n // Something for isni IDs?\n return value;\n}\n\n//export function normalizableSubfieldPrefix(tag, sf) {\nexport function normalizeAs(tag, subfieldCode) {\n //nvdebug(`nAs ${tag}, ${subfieldCode}`);\n if (subfieldCode === '0' || subfieldCode === '1' || subfieldCode === 'w') {\n return 'ALEPH_INTERNAL';\n }\n\n if (tag === '035' && ['a', 'z'].includes(subfieldCode)) {\n return 'STANDARD';\n }\n return undefined;\n}\n\nexport function fieldNormalizeControlNumbers(field) {\n // Rename \"Prefixes\" as \"ControlNumberIdentifiers\"?\n // No, since isni etc... however, just \"ControlNumber\" would do...\n // \"identifiers\" ?\n if (!field.subfields) {\n return;\n }\n\n field.subfields.forEach(sf => {\n const targetFormat = normalizeAs(field.tag, sf.code);\n if (targetFormat !== undefined) {\n //nvdebug(`NORMALIZE SUBFIELD $${sf.code} IN FIELD: '${fieldToString(field)}' TO ${targetFormat}`);\n sf.value = normalizeControlSubfieldValue(sf.value, targetFormat); // eslint-disable-line functional/immutable-data\n return;\n }\n });\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"normalize-identifiers.js","names":["fieldToString","f","tag","ind1","ind2","formatSubfields","field","subfields","map","sf","code","value","join","description","validate","fix","record","res","message","valid","fields","forEach","fieldNormalizeControlNumbers","validateField","length","normalizedField","clone","orig","mod","push","alephInternal01","alephInternal10","alephInternal11","alephInternal12","alephInternal13","standard01","standard10","standard11","standard12","standard13","both01","ALEPH_INTERNAL","STANDARD","both10","both11","both12","both13","mappings","normalizeNineDigitIDs","targetFormat","nineDigitTail","slice","test","currPrefix","isIsni","normalizeIsni","replace","normalizeControlSubfieldValue","normalizedValue","normalizeAs","subfieldCode","includes","undefined"],"sources":["../src/normalize-identifiers.js"],"sourcesContent":["// Relocated from melinda-marc-record-merge-reducers (and renamed)\n//import createDebugLogger from 'debug';\nimport clone from 'clone';\n//const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda:normalizeIdentifiers');\n\n\nfunction fieldToString(f) {\n return `${f.tag} ${f.ind1}${f.ind2} ‡${formatSubfields(f)}`;\n\n function formatSubfields(field) {\n //return field.subfields.map(sf => `${sf.code}${sf.value || ''}`).join('‡');\n return field.subfields.map(sf => `${sf.code}${sf.value}`).join(' ‡');\n }\n}\n\n/*\nfunction nvdebug(message, func) {\n if (func) { // eslint-disable-line functional/no-conditional-statement\n func(message);\n }\n console.info(message); // eslint-disable-line no-console\n}\n*/\n\nexport default function () {\n\n // NB! We should and could handle ISNIs here as well.\n return {\n description: 'Normalizes identifiers such as subfield $0 values',\n validate, fix\n };\n\n function fix(record) {\n const res = {message: [], fix: [], valid: true};\n //message.fix = []; // eslint-disable-line functional/immutable-data\n\n // Actual parsing of all fields\n /*\n if (!record.fields) {\n return false;\n }\n */\n\n //nvdebug(`NORMALIZE CONTROL NUMBER FIX`, debug);\n record.fields.forEach(field => {\n //nvdebug(` NORMALIZE CONTROL NUMBER FIX ${fieldToString(field)}`, debug);\n\n fieldNormalizeControlNumbers(field);\n //validateField(field, true, message);\n });\n\n // message.valid = !(message.message.length >= 1); // eslint-disable-line functional/immutable-data\n return res;\n }\n\n function validate(record) {\n const res = {message: []};\n //nvdebug(`NORMALIZE CONTROL NUMBER VALIDATE`, debug);\n // Actual parsing of all fields\n /*\n if (!record.fields) {\n return false;\n }\n */\n\n record.fields.forEach(field => {\n //nvdebug(` NORMALIZE CONTROL NUMBER VALIDATE ${fieldToString(field)}`, debug);\n validateField(field, res);\n });\n\n res.valid = !(res.message.length >= 1); // eslint-disable-line functional/immutable-data\n return res;\n }\n\n function validateField(field, res) {\n if (!field.subfields) {\n return;\n }\n\n const normalizedField = clone(field);\n fieldNormalizeControlNumbers(normalizedField);\n\n const orig = fieldToString(field);\n const mod = fieldToString(normalizedField);\n if (orig !== mod) { // Fail as the input is \"broken\"/\"crap\"/sumthing\n res.message.push(`'${orig}' could do with control number identifier normalization`); // eslint-disable-line functional/immutable-data\n return;\n }\n\n return;\n }\n}\n\nconst alephInternal01 = '(FIN01)';\nconst alephInternal10 = '(FIN10)';\nconst alephInternal11 = '(FIN11)';\nconst alephInternal12 = '(FIN12)';\nconst alephInternal13 = '(FIN13)';\n\nconst standard01 = '(FI-MELINDA)';\nconst standard10 = '(FI-ASTERI-S)';\nconst standard11 = '(FI-ASTERI-N)';\nconst standard12 = '(FI-ASTERI-A)';\nconst standard13 = '(FI-ASTERI-W)';\n\nconst both01 = {ALEPH_INTERNAL: alephInternal01, STANDARD: standard01};\nconst both10 = {ALEPH_INTERNAL: alephInternal10, STANDARD: standard10};\nconst both11 = {ALEPH_INTERNAL: alephInternal11, STANDARD: standard11};\nconst both12 = {ALEPH_INTERNAL: alephInternal12, STANDARD: standard12};\nconst both13 = {ALEPH_INTERNAL: alephInternal13, STANDARD: standard13};\n\nconst mappings = {\n 'FCC': both01,\n '(FI-ASTERI-A)': both12,\n '(FI-ASTERI-N)': both11,\n '(FI-ASTERI-S)': both10,\n '(FI-ASTERI-W)': both13,\n '(FI-MELINDA)': both01,\n '(FIN01)': both01,\n '(FIN10)': both10,\n '(FIN11)': both11,\n '(FIN12)': both12,\n '(FIN13)': both13,\n 'http://urn.fi/URN:NBN:fi:au:finaf:': both11,\n 'https://urn.fi/URN:NBN:fi:au:finaf:': both11\n};\n\nfunction normalizeNineDigitIDs(value, targetFormat = 'ALEPH_INTERNAL') {\n // $value should be prefix + nine-digits. Do nothing if nine-digit tail condition is not met:\n const nineDigitTail = value.slice(-9);\n if (!(/^[0-9]{9}$/u).test(nineDigitTail)) {\n return value;\n }\n // Normalize prefix:\n const currPrefix = value.slice(0, -9);\n\n if (currPrefix in mappings) {\n //nvdebug(`${currPrefix}, TF:${targetFormat}...`);\n //nvdebug(`${JSON.stringify(mappings[currPrefix])}`);\n return `${mappings[currPrefix][targetFormat]}${nineDigitTail}`;\n }\n return value;\n}\n\nexport function isIsni(value) {\n if ((/^\\(isni\\)(?: ?[0-9]{4}){4}$/u).test(value)) {\n return true;\n }\n if ((/^https:\\/\\/isni.org\\/isni\\/[0-9]{16}$/u).test(value)) {\n return true;\n }\n return false;\n}\n\nexport function normalizeIsni(value) {\n if (isIsni(value)) {\n return `https://isni.org/isni/${value.replace(/[^0-9]/gu, '')}`;\n }\n return value;\n}\n\n\nexport function normalizeControlSubfieldValue(value = '', targetFormat = 'ALEPH_INTERNAL') {\n if (isIsni(value)) {\n return normalizeIsni(value);\n }\n\n const normalizedValue = normalizeNineDigitIDs(value, targetFormat);\n if (normalizedValue !== value) {\n return normalizedValue;\n }\n\n // Something for isni IDs?\n return value;\n}\n\n//export function normalizableSubfieldPrefix(tag, sf) {\nexport function normalizeAs(tag, subfieldCode) {\n //nvdebug(`nAs ${tag}, ${subfieldCode}`);\n if (subfieldCode === '0' || subfieldCode === '1' || subfieldCode === 'w') {\n return 'ALEPH_INTERNAL';\n }\n\n if (tag === '035' && ['a', 'z'].includes(subfieldCode)) {\n return 'STANDARD';\n }\n return undefined;\n}\n\nexport function fieldNormalizeControlNumbers(field) {\n // Rename \"Prefixes\" as \"ControlNumberIdentifiers\"?\n // No, since isni etc... however, just \"ControlNumber\" would do...\n // \"identifiers\" ?\n if (!field.subfields) {\n return;\n }\n\n field.subfields.forEach(sf => {\n const targetFormat = normalizeAs(field.tag, sf.code);\n if (targetFormat !== undefined) {\n //nvdebug(`NORMALIZE SUBFIELD $${sf.code} IN FIELD: '${fieldToString(field)}' TO ${targetFormat}`);\n sf.value = normalizeControlSubfieldValue(sf.value, targetFormat); // eslint-disable-line functional/immutable-data\n return;\n }\n });\n}\n"],"mappings":"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"}
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": "9.0.12",
17
+ "version": "9.0.13",
18
18
  "main": "./dist/index.js",
19
19
  "publishConfig": {
20
20
  "access": "public"
@@ -142,7 +142,7 @@ function normalizeNineDigitIDs(value, targetFormat = 'ALEPH_INTERNAL') {
142
142
  return value;
143
143
  }
144
144
 
145
- function isIsni(value) {
145
+ export function isIsni(value) {
146
146
  if ((/^\(isni\)(?: ?[0-9]{4}){4}$/u).test(value)) {
147
147
  return true;
148
148
  }
@@ -152,7 +152,7 @@ function isIsni(value) {
152
152
  return false;
153
153
  }
154
154
 
155
- function normalizeIsni(value) {
155
+ export function normalizeIsni(value) {
156
156
  if (isIsni(value)) {
157
157
  return `https://isni.org/isni/${value.replace(/[^0-9]/gu, '')}`;
158
158
  }