@natlibfi/melinda-rest-api-commons 6.1.0-alpha.0 → 6.2.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/.github/workflows/melinda-node-tests-and-publish.yml +4 -2
  2. package/README.md +211 -14
  3. package/dist/amqp.d.ts +41 -0
  4. package/dist/amqp.d.ts.map +1 -0
  5. package/dist/amqp.js +251 -235
  6. package/dist/amqp.js.map +1 -7
  7. package/dist/constants.d.ts +49 -0
  8. package/dist/constants.d.ts.map +1 -0
  9. package/dist/constants.js +38 -38
  10. package/dist/constants.js.map +1 -7
  11. package/dist/helpers/conversion.d.ts +8 -0
  12. package/dist/helpers/conversion.d.ts.map +1 -0
  13. package/dist/helpers/conversion.js +70 -64
  14. package/dist/helpers/conversion.js.map +1 -7
  15. package/dist/helpers/fix-constants.d.ts +76 -0
  16. package/dist/helpers/fix-constants.d.ts.map +1 -0
  17. package/dist/helpers/fix-constants.js +41 -41
  18. package/dist/helpers/fix-constants.js.map +1 -7
  19. package/dist/helpers/fix-handle-tempurns.d.ts +3 -0
  20. package/dist/helpers/fix-handle-tempurns.d.ts.map +1 -0
  21. package/dist/helpers/fix-handle-tempurns.js +73 -71
  22. package/dist/helpers/fix-handle-tempurns.js.map +1 -7
  23. package/dist/helpers/fix-strip-f884s.d.ts +10 -0
  24. package/dist/helpers/fix-strip-f884s.d.ts.map +1 -0
  25. package/dist/helpers/fix-strip-f884s.js +161 -163
  26. package/dist/helpers/fix-strip-f884s.js.map +1 -7
  27. package/dist/helpers/fix.d.ts +6 -0
  28. package/dist/helpers/fix.d.ts.map +1 -0
  29. package/dist/helpers/fix.js +133 -121
  30. package/dist/helpers/fix.js.map +1 -7
  31. package/dist/helpers/validation.d.ts +9 -0
  32. package/dist/helpers/validation.d.ts.map +1 -0
  33. package/dist/helpers/validation.js +14 -16
  34. package/dist/helpers/validation.js.map +1 -7
  35. package/dist/index.d.ts +13 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +1 -1
  38. package/dist/index.js.map +1 -7
  39. package/dist/mongo.d.ts +165 -0
  40. package/dist/mongo.d.ts.map +1 -0
  41. package/dist/mongo.js +595 -547
  42. package/dist/mongo.js.map +1 -7
  43. package/dist/mongoError.d.ts +2 -0
  44. package/dist/mongoError.d.ts.map +1 -0
  45. package/dist/mongoError.js +19 -0
  46. package/dist/mongoError.js.map +1 -0
  47. package/dist/mongoLog.d.ts +50 -0
  48. package/dist/mongoLog.d.ts.map +1 -0
  49. package/dist/mongoLog.js +274 -242
  50. package/dist/mongoLog.js.map +1 -7
  51. package/dist/utils.d.ts +36 -0
  52. package/dist/utils.d.ts.map +1 -0
  53. package/dist/utils.js +112 -110
  54. package/dist/utils.js.map +1 -7
  55. package/eslint.config.ts +66 -0
  56. package/package.json +17 -11
  57. package/{tests/amqp-error-branches.test.js → test/amqp-error-branches.test.ts} +135 -61
  58. package/{tests/amqp.healthtest.js → test/amqp.healthtest.ts} +19 -11
  59. package/{tests/amqp.tests.localtest.js → test/amqp.tests.localtest.ts} +54 -35
  60. package/{tests/helpers/conversion.test.js → test/helpers/conversion.test.ts} +26 -14
  61. package/{tests/helpers/fix-edge.test.js → test/helpers/fix-edge.test.ts} +16 -12
  62. package/{tests/helpers/fix.test.js → test/helpers/fix.test.ts} +14 -8
  63. package/{tests/helpers/validation.test.js → test/helpers/validation.test.ts} +7 -6
  64. package/{tests/mongo-add-blob-size.test.js → test/mongo-add-blob-size.test.ts} +14 -15
  65. package/{tests/mongo-check-and-check-state.test.js → test/mongo-check-and-check-state.test.ts} +6 -8
  66. package/{tests/mongo-check-and-set-import-job-state.test.js → test/mongo-check-and-set-import-job-state.test.ts} +6 -9
  67. package/{tests/mongo-check-timeout.test.js → test/mongo-check-timeout.test.ts} +6 -9
  68. package/{tests/mongo-create-bulk.test.js → test/mongo-create-bulk.test.ts} +6 -7
  69. package/{tests/mongo-create-prio.test.js → test/mongo-create-prio.test.ts} +6 -6
  70. package/{tests/mongo-error-branches.test.js → test/mongo-error-branches.test.ts} +166 -65
  71. package/{tests/mongo-get-one.test.js → test/mongo-get-one.test.ts} +6 -6
  72. package/{tests/mongo-get-stream.test.js → test/mongo-get-stream.test.ts} +6 -8
  73. package/{tests/mongo-push-ids.test.js → test/mongo-push-ids.test.ts} +6 -6
  74. package/{tests/mongo-push-messages.test.js → test/mongo-push-messages.test.ts} +6 -6
  75. package/{tests/mongo-query-by-id.test.js → test/mongo-query-by-id.test.ts} +6 -9
  76. package/{tests/mongo-query.test.js → test/mongo-query.test.ts} +6 -7
  77. package/{tests/mongo-read-content.test.js → test/mongo-read-content.test.ts} +6 -9
  78. package/{tests/mongo-remove.test.js → test/mongo-remove.test.ts} +6 -8
  79. package/{tests/mongo-set-blob-size.test.js → test/mongo-set-blob-size.test.ts} +6 -6
  80. package/{tests/mongo-set-import-job-state.test.js → test/mongo-set-import-job-state.test.ts} +6 -6
  81. package/{tests/mongo-set-operation.test.js → test/mongo-set-operation.test.ts} +6 -6
  82. package/{tests/mongo-set-operations.test.js → test/mongo-set-operations.test.ts} +6 -6
  83. package/{tests/mongo-set-state.test.js → test/mongo-set-state.test.ts} +6 -6
  84. package/{tests/mongoLog-protect.test.js → test/mongoLog-protect.test.ts} +18 -17
  85. package/{tests/mongoLog.test.js → test/mongoLog.test.ts} +8 -8
  86. package/{tests/testUtils.js → test/testUtils.ts} +49 -15
  87. package/{tests/utils.test.js → test/utils.test.ts} +5 -5
  88. package/tsconfig.json +62 -0
  89. package/tsconfig.test.json +17 -0
  90. package/dist/helpers/fix-utils.js +0 -39
  91. package/dist/helpers/fix-utils.js.map +0 -7
  92. package/eslint.config.js +0 -53
@@ -1,83 +1,85 @@
1
- import createDebugLogger from "debug";
2
- const debug = createDebugLogger("@natlibfi/melinda-rest-api-commons:fixRecord:handleTempUrns");
3
- const debugData = debug.extend("data");
1
+ import createDebugLogger from 'debug';
2
+ const debug = createDebugLogger('@natlibfi/melinda-rest-api-commons:fixRecord:handleTempUrns');
3
+ const debugData = debug.extend('data');
4
4
  export function handleTempUrns(newRecord, options) {
5
- if (options !== true) {
6
- debug(`NOT running handleTempUrns fixer, no options`);
7
- return newRecord;
8
- }
9
- debug(`Running handleTempUrns fixer`);
10
- debugData(`Options for handleTempUrns: ${JSON.stringify(options)}`);
11
- const { f856sUrnsWithTempSubfields, f856sUrnsWithNoTempSubfields } = getf856sUrns(newRecord);
12
- if (f856sUrnsWithTempSubfields.length < 1) {
13
- debug(`No Urns with temp subfield`);
14
- return newRecord;
15
- }
16
- const existingLegalDepositURN = validateLD(f856sUrnsWithNoTempSubfields);
17
- debug(`existingLegalDepositURN: ${existingLegalDepositURN}`);
18
- if (existingLegalDepositURN) {
19
- debug(`We have an existing LD URN, we can delete temp fields (${f856sUrnsWithTempSubfields.length})`);
20
- newRecord.removeFields(f856sUrnsWithTempSubfields);
21
- return newRecord;
22
- }
23
- if (!existingLegalDepositURN && f856sUrnsWithTempSubfields.length > 0) {
24
- debugData(`Original temp URNs: (${JSON.stringify(f856sUrnsWithTempSubfields)})`);
25
- const fixedFields = f856sUrnsWithTempSubfields.map(removeTempSubfield).filter((field) => field);
26
- debug(`We removed temp subfields: (${JSON.stringify(fixedFields)})`);
27
- newRecord.removeFields(f856sUrnsWithTempSubfields);
28
- newRecord.insertFields(fixedFields);
5
+ if (options !== true) {
6
+ debug(`NOT running handleTempUrns fixer, no options`);
7
+ return newRecord;
8
+ }
9
+ debug(`Running handleTempUrns fixer`);
10
+ debugData(`Options for handleTempUrns: ${JSON.stringify(options)}`);
11
+ const { f856sUrnsWithTempSubfields, f856sUrnsWithNoTempSubfields } = getf856sUrns(newRecord);
12
+ if (f856sUrnsWithTempSubfields.length < 1) {
13
+ debug(`No Urns with temp subfield`);
14
+ return newRecord;
15
+ }
16
+ const existingLegalDepositURN = validateLD(f856sUrnsWithNoTempSubfields);
17
+ debug(`existingLegalDepositURN: ${existingLegalDepositURN}`);
18
+ if (existingLegalDepositURN) {
19
+ debug(`We have an existing LD URN, we can delete temp fields (${f856sUrnsWithTempSubfields.length})`);
20
+ newRecord.removeFields(f856sUrnsWithTempSubfields);
21
+ return newRecord;
22
+ }
23
+ if (!existingLegalDepositURN && f856sUrnsWithTempSubfields.length > 0) {
24
+ debugData(`Original temp URNs: (${JSON.stringify(f856sUrnsWithTempSubfields)})`);
25
+ const fixedFields = f856sUrnsWithTempSubfields.map(removeTempSubfield).filter((field) => field !== false);
26
+ debug(`We removed temp subfields: (${JSON.stringify(fixedFields)})`);
27
+ newRecord.removeFields(f856sUrnsWithTempSubfields);
28
+ newRecord.insertFields(fixedFields);
29
+ return newRecord;
30
+ }
29
31
  return newRecord;
30
- }
31
32
  }
32
33
  function getf856sUrns(newRecord) {
33
- const hasURN = (f) => f.tag === "856" && f.subfields.some(({ code, value }) => code === "u" && /urn.fi/u.test(value));
34
- const hasTempSubfield = (f) => f.subfields.some(({ code, value }) => code === "9" && /^MELINDA<TEMP>$/u.test(value));
35
- const hasNoTempSubfield = (f) => !f.subfields.some(({ code, value }) => code === "9" && /^MELINDA<TEMP>$/u.test(value));
36
- const f856sUrn = newRecord.fields.filter(hasURN);
37
- const f856sUrnsWithTempSubfields = f856sUrn.filter(hasTempSubfield);
38
- const f856sUrnsWithNoTempSubfields = f856sUrn.filter(hasNoTempSubfield);
39
- debugData(`URN f856s: ${JSON.stringify(f856sUrn)}`);
40
- debugData(`URN f856s with temp subfield: ${JSON.stringify(f856sUrnsWithTempSubfields)}`);
41
- return { f856sUrn, f856sUrnsWithTempSubfields, f856sUrnsWithNoTempSubfields };
34
+ const hasURN = (f) => f.tag === '856' && f.subfields.some(({ code, value }) => code === 'u' && (/urn.fi/u).test(value));
35
+ const hasTempSubfield = (f) => f.subfields.some(({ code, value }) => code === '9' && (/^MELINDA<TEMP>$/u).test(value));
36
+ const hasNoTempSubfield = (f) => !f.subfields.some(({ code, value }) => code === '9' && (/^MELINDA<TEMP>$/u).test(value));
37
+ const f856sUrn = newRecord.fields.filter(hasURN);
38
+ const f856sUrnsWithTempSubfields = f856sUrn.filter(hasTempSubfield);
39
+ const f856sUrnsWithNoTempSubfields = f856sUrn.filter(hasNoTempSubfield);
40
+ debugData(`URN f856s: ${JSON.stringify(f856sUrn)}`);
41
+ debugData(`URN f856s with temp subfield: ${JSON.stringify(f856sUrnsWithTempSubfields)}`);
42
+ return { f856sUrn, f856sUrnsWithTempSubfields, f856sUrnsWithNoTempSubfields };
42
43
  }
43
44
  function validateLD(f856sUrn) {
44
- debug(`Validating the existence of legal deposit subfields`);
45
- const LD_SUBFIELDS_OLD = [
46
- { code: "z", value: "K\xE4ytett\xE4viss\xE4 vapaakappalekirjastoissa" },
47
- { code: "5", value: "FI-Vapaa" }
48
- ];
49
- const LD_SUBFIELDS_NEW = [
50
- { code: "z", value: "K\xE4ytett\xE4viss\xE4 vapaakappalety\xF6asemilla" },
51
- { code: "5", value: "FI-Vapaa" }
52
- ];
53
- const f856sUrnWithOldLdSubfields = f856sUrn.filter((field) => fieldHasLDSubfields(field, LD_SUBFIELDS_OLD));
54
- const f856sUrnWithNewLdSubfields = f856sUrn.filter((field) => fieldHasLDSubfields(field, LD_SUBFIELDS_NEW));
55
- const f856sUrnWithLdSubfields = [...f856sUrnWithNewLdSubfields, ...f856sUrnWithOldLdSubfields];
56
- if (f856sUrnWithLdSubfields.length > 0) {
57
- debug(`Record has ${f856sUrnWithLdSubfields.length} URN fields with all necessary legal deposit subfields`);
58
- debugData(`f856sUrnWithLdSubfields: ${JSON.stringify(f856sUrnWithLdSubfields)}`);
59
- return true;
60
- }
61
- return false;
45
+ debug(`Validating the existence of legal deposit subfields`);
46
+ const LD_SUBFIELDS_OLD = [
47
+ { code: 'z', value: 'Käytettävissä vapaakappalekirjastoissa' },
48
+ { code: '5', value: 'FI-Vapaa' }
49
+ ];
50
+ const LD_SUBFIELDS_NEW = [
51
+ { code: 'z', value: 'Käytettävissä vapaakappaletyöasemilla' },
52
+ { code: '5', value: 'FI-Vapaa' }
53
+ ];
54
+ const f856sUrnWithOldLdSubfields = f856sUrn.filter(field => fieldHasLDSubfields(field, LD_SUBFIELDS_OLD));
55
+ const f856sUrnWithNewLdSubfields = f856sUrn.filter(field => fieldHasLDSubfields(field, LD_SUBFIELDS_NEW));
56
+ const f856sUrnWithLdSubfields = [...f856sUrnWithNewLdSubfields, ...f856sUrnWithOldLdSubfields];
57
+ if (f856sUrnWithLdSubfields.length > 0) {
58
+ debug(`Record has ${f856sUrnWithLdSubfields.length} URN fields with all necessary legal deposit subfields`);
59
+ debugData(`f856sUrnWithLdSubfields: ${JSON.stringify(f856sUrnWithLdSubfields)}`);
60
+ return true;
61
+ }
62
+ return false;
62
63
  }
63
64
  function fieldHasLDSubfields(field, ldSubfields) {
64
- if (ldSubfields.every((ldsf) => field.subfields.some((sf) => sf.code === ldsf.code && sf.value === ldsf.value))) {
65
- return true;
66
- }
65
+ if (ldSubfields.every(ldsf => field.subfields.some(sf => sf.code === ldsf.code && sf.value === ldsf.value))) {
66
+ return true;
67
+ }
68
+ return false;
67
69
  }
68
70
  function removeTempSubfield(field) {
69
- if (!isNaN(field.tag) && parseInt(field.tag, 10) >= 10) {
70
- const filteredSubfields = field.subfields.filter((sf) => sf.code !== "9" && !/^MELINDA<TEMP>$/u.test(sf.value));
71
- if (filteredSubfields.length < 1) {
72
- return false;
71
+ if (!isNaN(Number(field.tag)) && parseInt(field.tag, 10) >= 10) {
72
+ const filteredSubfields = field.subfields.filter(sf => sf.code !== '9' && !(/^MELINDA<TEMP>$/u).test(sf.value));
73
+ if (filteredSubfields.length < 1) {
74
+ return false;
75
+ }
76
+ return {
77
+ tag: field.tag,
78
+ ind1: field.ind1,
79
+ ind2: field.ind2,
80
+ subfields: filteredSubfields
81
+ };
73
82
  }
74
- return {
75
- tag: field.tag,
76
- ind1: field.ind1,
77
- ind2: field.ind2,
78
- subfields: filteredSubfields
79
- };
80
- }
81
- return field;
83
+ return field;
82
84
  }
83
- //# sourceMappingURL=fix-handle-tempurns.js.map
85
+ //# sourceMappingURL=fix-handle-tempurns.js.map
@@ -1,7 +1 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/helpers/fix-handle-tempurns.js"],
4
- "sourcesContent": ["\n\n//import {MarcRecord} from '@natlibfi/marc-record';\nimport createDebugLogger from 'debug';\n\nconst debug = createDebugLogger('@natlibfi/melinda-rest-api-commons:fixRecord:handleTempUrns');\nconst debugData = debug.extend('data');\n\nexport function handleTempUrns(newRecord, options) {\n\n if (options !== true) {\n debug(`NOT running handleTempUrns fixer, no options`);\n return newRecord;\n }\n\n debug(`Running handleTempUrns fixer`);\n debugData(`Options for handleTempUrns: ${JSON.stringify(options)}`);\n\n const {f856sUrnsWithTempSubfields, f856sUrnsWithNoTempSubfields} = getf856sUrns(newRecord);\n\n // None of the URNs has temp subfields, we don't need to do anything\n if (f856sUrnsWithTempSubfields.length < 1) {\n debug(`No Urns with temp subfield`);\n return newRecord;\n }\n\n // Do we have an existing URN with legal deposit subfields, if we have, we can remove the temp URN field(s)\n const existingLegalDepositURN = validateLD(f856sUrnsWithNoTempSubfields);\n debug(`existingLegalDepositURN: ${existingLegalDepositURN}`);\n\n if (existingLegalDepositURN) {\n debug(`We have an existing LD URN, we can delete temp fields (${f856sUrnsWithTempSubfields.length})`);\n newRecord.removeFields(f856sUrnsWithTempSubfields);\n return newRecord;\n }\n\n // We do not have an existing legalDepositURN, we should use the tempURN and remove the temp subfields from it\n if (!existingLegalDepositURN && f856sUrnsWithTempSubfields.length > 0) {\n //debug(`All Urns (${f856sUrn.length}) have a temp subfield`);\n debugData(`Original temp URNs: (${JSON.stringify(f856sUrnsWithTempSubfields)})`);\n const fixedFields = f856sUrnsWithTempSubfields.map(removeTempSubfield).filter(field => field);\n debug(`We removed temp subfields: (${JSON.stringify(fixedFields)})`);\n newRecord.removeFields(f856sUrnsWithTempSubfields);\n newRecord.insertFields(fixedFields);\n return newRecord;\n }\n // Should we check that the non-temp URN has 2nd ind '0' - meaning that the URN handles the actual resource itself?\n}\n\nfunction getf856sUrns(newRecord) {\n const hasURN = f => f.tag === '856' && f.subfields.some(({code, value}) => code === 'u' && (/urn.fi/u).test(value));\n\n const hasTempSubfield = f => f.subfields.some(({code, value}) => code === '9' && (/^MELINDA<TEMP>$/u).test(value));\n const hasNoTempSubfield = f => !f.subfields.some(({code, value}) => code === '9' && (/^MELINDA<TEMP>$/u).test(value));\n\n const f856sUrn = newRecord.fields.filter(hasURN);\n const f856sUrnsWithTempSubfields = f856sUrn.filter(hasTempSubfield);\n const f856sUrnsWithNoTempSubfields = f856sUrn.filter(hasNoTempSubfield);\n\n debugData(`URN f856s: ${JSON.stringify(f856sUrn)}`);\n debugData(`URN f856s with temp subfield: ${JSON.stringify(f856sUrnsWithTempSubfields)}`);\n return {f856sUrn, f856sUrnsWithTempSubfields, f856sUrnsWithNoTempSubfields};\n}\n\n\n// ---- LD-functions below are same as in https://github.com/NatLibFi/marc-record-validators-melinda/blob/feature-updates-to-urn/src/urn.js\n// we propably should develop the urn/legaldeposit -validator to use also here\n\nfunction validateLD(f856sUrn) {\n debug(`Validating the existence of legal deposit subfields`);\n\n const LD_SUBFIELDS_OLD = [\n {code: 'z', value: 'K\u00E4ytett\u00E4viss\u00E4 vapaakappalekirjastoissa'},\n {code: '5', value: 'FI-Vapaa'}\n ];\n\n const LD_SUBFIELDS_NEW = [\n {code: 'z', value: 'K\u00E4ytett\u00E4viss\u00E4 vapaakappalety\u00F6asemilla'},\n {code: '5', value: 'FI-Vapaa'}\n ];\n\n const f856sUrnWithOldLdSubfields = f856sUrn.filter(field => fieldHasLDSubfields(field, LD_SUBFIELDS_OLD));\n const f856sUrnWithNewLdSubfields = f856sUrn.filter(field => fieldHasLDSubfields(field, LD_SUBFIELDS_NEW));\n const f856sUrnWithLdSubfields = [...f856sUrnWithNewLdSubfields, ...f856sUrnWithOldLdSubfields];\n\n if (f856sUrnWithLdSubfields.length > 0) {\n debug(`Record has ${f856sUrnWithLdSubfields.length} URN fields with all necessary legal deposit subfields`);\n debugData(`f856sUrnWithLdSubfields: ${JSON.stringify(f856sUrnWithLdSubfields)}`);\n return true;\n }\n return false;\n}\n\nfunction fieldHasLDSubfields(field, ldSubfields) {\n if (ldSubfields.every(ldsf => field.subfields.some(sf => sf.code === ldsf.code && sf.value === ldsf.value))) {\n return true;\n }\n}\n\nfunction removeTempSubfield(field) {\n\n // Handle non-numeric fields, and fields with a numeric tag of 010 and greater\n // Aleph's FMT as a controlfield might be a problem\n if (!isNaN(field.tag) && parseInt(field.tag, 10) >= 10) {\n\n const filteredSubfields = field.subfields.filter(sf => sf.code !== '9' && !(/^MELINDA<TEMP>$/u).test(sf.value));\n\n // Remove whole field if there are no subfields left\n if (filteredSubfields.length < 1) {\n return false;\n }\n\n return {\n tag: field.tag,\n ind1: field.ind1,\n ind2: field.ind2,\n subfields: filteredSubfields\n };\n }\n // return controlFields as is\n return field;\n}\n\n\n"],
5
- "mappings": "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",
6
- "names": []
7
- }
1
+ {"version":3,"file":"fix-handle-tempurns.js","sourceRoot":"","sources":["../../src/helpers/fix-handle-tempurns.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { MarcRecord } from '@natlibfi/marc-record';
2
+ export interface F884Result {
3
+ conversion: string | undefined;
4
+ source: string;
5
+ firstDate: string;
6
+ lastDate: string;
7
+ hash: string;
8
+ }
9
+ export declare function stripF884s(newRecord: MarcRecord, options: boolean | undefined): MarcRecord;
10
+ //# sourceMappingURL=fix-strip-f884s.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fix-strip-f884s.d.ts","sourceRoot":"","sources":["../../src/helpers/fix-strip-f884s.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAY,UAAU,EAAC,MAAM,uBAAuB,CAAC;AAMjE,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAMD,wBAAgB,UAAU,CAAC,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,GAAG,SAAS,GAAG,UAAU,CAmP1F"}
@@ -1,174 +1,172 @@
1
- import createDebugLogger from "debug";
2
- import { inspect } from "util";
1
+ import createDebugLogger from 'debug';
2
+ import { inspect } from 'util';
3
3
  export function stripF884s(newRecord, options) {
4
- const debug = createDebugLogger("@natlibfi/melinda-rest-api-commons:fixRecord:stripF884s");
5
- const debugData = debug.extend("data");
6
- if (options !== true) {
7
- debug(`NOT running stripF884s fixer, no options`);
8
- return newRecord;
9
- }
10
- debug(`Running stripF884s fixer`);
11
- debugData(`Options for stripF884s: ${JSON.stringify(options)}`);
12
- const isMelindaf884 = (f) => f.tag === "884" && f.subfields.some(({ code, value }) => code === "5" && value === "MELINDA");
13
- const f884Melindas = newRecord.fields.filter(isMelindaf884);
14
- debugData(`Melinda's f884s (${f884Melindas.length})
15
- ${JSON.stringify(f884Melindas)}`);
16
- if (f884Melindas.length < 2) {
17
- debug(`Not enough Melinda's f884s to filter (${f884Melindas.length})`);
18
- return newRecord;
19
- }
20
- const results = f884Melindas.reduce((allResults, f884, index) => {
21
- debugData(`All results: ${JSON.stringify(allResults)}`);
22
- debugData(`Handling field *(${index})*: ${JSON.stringify(f884)}`);
23
- const conversion = findConversion(f884);
24
- const source = findSource(f884);
25
- const convSource = `${conversion}:${source}`;
26
- const { firstDate, lastDate } = findDates(f884);
27
- const hash = findHash(f884);
28
- const currResult = allResults[convSource];
29
- debugData(JSON.stringify(currResult));
30
- if (!currResult) {
31
- debug(`Add a new convSource ${convSource} to results`);
32
- const newResult = {
33
- conversion,
34
- source,
35
- firstDate,
36
- lastDate,
37
- hash
38
- };
39
- debugData(`- New result: ${JSON.stringify(newResult)}`);
40
- return {
41
- ...allResults,
42
- [convSource]: newResult
43
- };
4
+ const debug = createDebugLogger('@natlibfi/melinda-rest-api-commons:fixRecord:stripF884s');
5
+ const debugData = debug.extend('data');
6
+ if (options !== true) {
7
+ debug(`NOT running stripF884s fixer, no options`);
8
+ return newRecord;
9
+ }
10
+ debug(`Running stripF884s fixer`);
11
+ debugData(`Options for stripF884s: ${JSON.stringify(options)}`);
12
+ const isMelindaf884 = (f) => f.tag === '884' && f.subfields.some(({ code, value }) => code === '5' && value === 'MELINDA');
13
+ const f884Melindas = newRecord.fields.filter(isMelindaf884);
14
+ debugData(`Melinda's f884s (${f884Melindas.length}) \n ${JSON.stringify(f884Melindas)}`);
15
+ if (f884Melindas.length < 2) {
16
+ debug(`Not enough Melinda's f884s to filter (${f884Melindas.length})`);
17
+ return newRecord;
44
18
  }
45
- debug(`Update result for ${convSource}`);
46
- debugData(`- Current result: ${JSON.stringify(currResult)}`);
47
- const updatedResult = {
48
- ...currResult,
49
- firstDate: currResult.firstDate > firstDate && firstDate !== "00000000" ? firstDate : currResult.firstDate,
50
- lastDate: currResult.lastDate < lastDate ? lastDate : currResult.lastDate,
51
- hash: currResult.lastDate < lastDate && lastDate !== "00000000" && hash !== "0000000000000000000000000000000000000000000000000000000000000000" ? hash : currResult.hash
52
- };
53
- debugData(`- Updated result: ${JSON.stringify(updatedResult)}`);
54
- return {
55
- ...allResults,
56
- [convSource]: updatedResult
57
- };
58
- }, {});
59
- debugData(`RESULTS: ${JSON.stringify(results)}`);
60
- const editedf884s = editFields(f884Melindas, results);
61
- debug(`Edited fields (${editedf884s.length})`);
62
- debugData(`${JSON.stringify(editedf884s)}`);
63
- function editFields(fields, results2) {
64
- debug(`EDITING FIELDS (${fields.length})`);
65
- const editedFields = fields.map((field) => {
66
- const convSource = `${findConversion(field)}:${findSource(field)}`;
67
- debug(`Looking for: ${convSource}`);
68
- if (convSource && results2[convSource]) {
69
- debugData(`Found: ${JSON.stringify(results2[convSource])}`);
70
- const firstDate = results2[convSource].firstDate && results2[convSource].firstDate !== "00000000" ? results2[convSource].firstDate : "";
71
- const lastDate = results2[convSource].lastDate && results2[convSource].lastDate !== "00000000" ? results2[convSource].lastDate : "";
72
- const source = results2[convSource].source && results2[convSource].source !== "NO_SOURCE" ? results2[convSource].source : "";
73
- const hash = results2[convSource].hash && results2[convSource].hash !== "0000000000000000000000000000000000000000000000000000000000000000" ? results2[convSource].hash : "";
74
- const sfGAll = firstDate === lastDate ? `${firstDate}` : `${firstDate} - ${lastDate}`;
75
- debugData(`EditedDates: ${sfGAll}`);
76
- const sfKAll = `${source}:${hash}`;
77
- const sfG = sfGAll.replace(/^ - /u, "").replace(/ - $/u, "");
78
- const sfK = sfKAll.replace(/^:/u, "").replace(/:$/u, "");
19
+ const results = f884Melindas.reduce((allResults, f884, index) => {
20
+ debugData(`All results: ${JSON.stringify(allResults)}`);
21
+ debugData(`Handling field *(${index})*: ${JSON.stringify(f884)}`);
22
+ const conversion = findConversion(f884);
23
+ const source = findSource(f884);
24
+ const convSource = `${conversion}:${source}`;
25
+ const { firstDate, lastDate } = findDates(f884);
26
+ const hash = findHash(f884);
27
+ const currResult = allResults[convSource];
28
+ debugData(JSON.stringify(currResult));
29
+ if (!currResult) {
30
+ debug(`Add a new convSource ${convSource} to results`);
31
+ const newResult = {
32
+ conversion,
33
+ source,
34
+ firstDate,
35
+ lastDate,
36
+ hash
37
+ };
38
+ debugData(`- New result: ${JSON.stringify(newResult)}`);
39
+ return {
40
+ ...allResults,
41
+ [convSource]: newResult
42
+ };
43
+ }
44
+ debug(`Update result for ${convSource}`);
45
+ debugData(`- Current result: ${JSON.stringify(currResult)}`);
46
+ const updatedResult = {
47
+ ...currResult,
48
+ firstDate: firstDate !== '00000000' && (currResult.firstDate === '00000000' || firstDate < currResult.firstDate) ? firstDate : currResult.firstDate,
49
+ lastDate: currResult.lastDate < lastDate ? lastDate : currResult.lastDate,
50
+ hash: currResult.lastDate < lastDate && lastDate !== '00000000' && hash !== '0000000000000000000000000000000000000000000000000000000000000000' ? hash : currResult.hash
51
+ };
52
+ debugData(`- Updated result: ${JSON.stringify(updatedResult)}`);
79
53
  return {
80
- ...field,
81
- subfields: field.subfields.map((subfield) => {
82
- if (subfield.code === "g") {
83
- return {
84
- code: subfield.code,
85
- value: sfG
86
- };
54
+ ...allResults,
55
+ [convSource]: updatedResult
56
+ };
57
+ }, {});
58
+ debugData(`RESULTS: ${JSON.stringify(results)}`);
59
+ const editedf884s = editFields(f884Melindas, results);
60
+ debug(`Edited fields (${editedf884s.length})`);
61
+ debugData(`${JSON.stringify(editedf884s)}`);
62
+ function editFields(fields, results) {
63
+ debug(`EDITING FIELDS (${fields.length})`);
64
+ const editedFields = fields.map((field) => {
65
+ const convSource = `${findConversion(field)}:${findSource(field)}`;
66
+ debug(`Looking for: ${convSource}`);
67
+ if (convSource && results[convSource]) {
68
+ debugData(`Found: ${JSON.stringify(results[convSource])}`);
69
+ const firstDate = results[convSource].firstDate && results[convSource].firstDate !== '00000000' ? results[convSource].firstDate : '';
70
+ const lastDate = results[convSource].lastDate && results[convSource].lastDate !== '00000000' ? results[convSource].lastDate : '';
71
+ const source = results[convSource].source && results[convSource].source !== 'NO_SOURCE' ? results[convSource].source : '';
72
+ const hash = results[convSource].hash && results[convSource].hash !== '0000000000000000000000000000000000000000000000000000000000000000' ? results[convSource].hash : '';
73
+ const sfGAll = firstDate === lastDate ? `${firstDate}` : `${firstDate} - ${lastDate}`;
74
+ debugData(`EditedDates: ${sfGAll}`);
75
+ const sfKAll = `${source}:${hash}`;
76
+ const sfG = sfGAll.replace(/^ - /u, '').replace(/ - $/u, '');
77
+ const sfK = sfKAll.replace(/^:/u, '').replace(/:$/u, '');
78
+ return {
79
+ ...field,
80
+ subfields: field.subfields.map(subfield => {
81
+ if (subfield.code === 'g') {
82
+ return {
83
+ code: subfield.code,
84
+ value: sfG
85
+ };
86
+ }
87
+ if (subfield.code === 'k') {
88
+ return {
89
+ code: subfield.code,
90
+ value: sfK
91
+ };
92
+ }
93
+ return subfield;
94
+ })
95
+ };
87
96
  }
88
- if (subfield.code === "k") {
89
- return {
90
- code: subfield.code,
91
- value: sfK
92
- };
97
+ debug(`Not found: ${convSource}`);
98
+ return field;
99
+ });
100
+ return editedFields;
101
+ }
102
+ const uniq884s = uniqFields(editedf884s);
103
+ debug(`UniqFields (${uniq884s.length})`);
104
+ debugData(inspect(uniq884s, { depth: 3 }));
105
+ function canonicalize(value) {
106
+ if (Array.isArray(value)) {
107
+ return value.map(canonicalize);
108
+ }
109
+ if (value && typeof value === 'object') {
110
+ const obj = value;
111
+ return Object.fromEntries(Object.keys(obj).sort().map(key => [key, canonicalize(obj[key])]));
112
+ }
113
+ return value;
114
+ }
115
+ function fieldsAreEqual(a, b) {
116
+ return JSON.stringify(canonicalize(a)) === JSON.stringify(canonicalize(b));
117
+ }
118
+ function uniqFields(fields) {
119
+ const uniqed = fields.reduce((uniq, field) => {
120
+ if (!uniq.some(f => fieldsAreEqual(f, field))) {
121
+ uniq.push(field);
93
122
  }
94
- return subfield;
95
- })
96
- };
97
- }
98
- debug(`Not found: ${convSource}`);
99
- return field;
100
- });
101
- return editedFields;
102
- }
103
- const uniq884s = uniqFields(editedf884s);
104
- debug(`UniqFields (${uniq884s.length})`);
105
- debugData(inspect(uniq884s, { depth: 3 }));
106
- function canonicalize(value) {
107
- if (Array.isArray(value)) {
108
- return value.map(canonicalize);
123
+ return uniq;
124
+ }, []);
125
+ return uniqed;
109
126
  }
110
- if (value && typeof value === "object") {
111
- return Object.keys(value).sort().reduce((canonical, key) => {
112
- canonical[key] = canonicalize(value[key]);
113
- return canonical;
114
- }, {});
127
+ newRecord.removeFields(f884Melindas);
128
+ newRecord.insertFields(uniq884s);
129
+ return newRecord;
130
+ function findConversion(f884) {
131
+ const [sfA] = f884.subfields.filter((subfield) => subfield.code === 'a').map(subfield => subfield.value);
132
+ const conversion = sfA;
133
+ debugData(`Conversion: "${conversion}"`);
134
+ return conversion;
115
135
  }
116
- return value;
117
- }
118
- function fieldsAreEqual(a, b) {
119
- return JSON.stringify(canonicalize(a)) === JSON.stringify(canonicalize(b));
120
- }
121
- function uniqFields(fields) {
122
- return fields.reduce((uniq, field) => {
123
- if (!uniq.some((f) => fieldsAreEqual(f, field))) {
124
- uniq.push(field);
125
- }
126
- return uniq;
127
- }, []);
128
- }
129
- newRecord.removeFields(f884Melindas);
130
- newRecord.insertFields(uniq884s);
131
- return newRecord;
132
- function findConversion(f884) {
133
- const [sfA] = f884.subfields.filter((subfield) => subfield.code === "a").map((subfield) => subfield.value);
134
- const conversion = sfA;
135
- debugData(`Conversion: "${conversion}"`);
136
- return conversion;
137
- }
138
- function findSource(f884) {
139
- const [sfK] = f884.subfields.filter((subfield) => subfield.code === "k").map((subfield) => subfield.value);
140
- const source = (sfK ?? "").replace(/:.*$/u, "");
141
- if (source && source.length !== 64) {
142
- debugData(`Source: "${source}"`);
143
- return source;
136
+ function findSource(f884) {
137
+ const [sfK] = f884.subfields.filter((subfield) => subfield.code === 'k').map(subfield => subfield.value);
138
+ const source = (sfK ?? '').replace(/:.*$/u, '');
139
+ if (source && source.length !== 64) {
140
+ debugData(`Source: "${source}"`);
141
+ return source;
142
+ }
143
+ const emptySource = 'NO_SOURCE';
144
+ debugData(`Source: "${emptySource}"`);
145
+ return emptySource;
144
146
  }
145
- const emptySource = "NO_SOURCE";
146
- debugData(`Source: "${emptySource}"`);
147
- return emptySource;
148
- }
149
- function findHash(f884) {
150
- const [sfK] = f884.subfields.filter((subfield) => subfield.code === "k").map((subfield) => subfield.value);
151
- const hash = (sfK ?? "").replace(/^.*:/u, "");
152
- if (hash && hash.length === 64) {
153
- debugData(`Hash: "${hash}"`);
154
- return hash;
147
+ function findHash(f884) {
148
+ const [sfK] = f884.subfields.filter((subfield) => subfield.code === 'k').map(subfield => subfield.value);
149
+ const hash = (sfK ?? '').replace(/^.*:/u, '');
150
+ if (hash && hash.length === 64) {
151
+ debugData(`Hash: "${hash}"`);
152
+ return hash;
153
+ }
154
+ const emptyHash = '0000000000000000000000000000000000000000000000000000000000000000';
155
+ debugData(`Hash: "${emptyHash}"`);
156
+ return emptyHash;
155
157
  }
156
- const emptyHash = "0000000000000000000000000000000000000000000000000000000000000000";
157
- debugData(`Hash: "${emptyHash}"`);
158
- return emptyHash;
159
- }
160
- function findDates(f884) {
161
- const [sfG] = f884.subfields.filter((subfield) => subfield.code === "g").map((subfield) => subfield.value);
162
- if (sfG && / - /u.test(sfG)) {
163
- const firstDate2 = sfG.replace(/ - .*$/u, "").padStart(8, "0");
164
- const lastDate2 = sfG.replace(/^.* - /u, "").padStart(8, "0");
165
- debugData(`FirstDate: "${firstDate2}", LastDate: "${lastDate2}"`);
166
- return { firstDate: firstDate2, lastDate: lastDate2 };
158
+ function findDates(f884) {
159
+ const [sfG] = f884.subfields.filter((subfield) => subfield.code === 'g').map(subfield => subfield.value);
160
+ if (sfG && (/ - /u).test(sfG)) {
161
+ const firstDate = sfG.replace(/ - .*$/u, '').padStart(8, '0');
162
+ const lastDate = sfG.replace(/^.* - /u, '').padStart(8, '0');
163
+ debugData(`FirstDate: "${firstDate}", LastDate: "${lastDate}"`);
164
+ return { firstDate, lastDate };
165
+ }
166
+ const firstDate = sfG ? sfG.padStart(8, '0') : '00000000';
167
+ const lastDate = sfG ? sfG.padStart(8, '0') : '00000000';
168
+ debugData(`FirstDate: "${firstDate}", LastDate: "${lastDate}"`);
169
+ return { firstDate, lastDate };
167
170
  }
168
- const firstDate = sfG ? sfG.padStart(8, "0") : "00000000";
169
- const lastDate = sfG ? sfG.padStart(8, "0") : "00000000";
170
- debugData(`FirstDate: "${firstDate}", LastDate: "${lastDate}"`);
171
- return { firstDate, lastDate };
172
- }
173
171
  }
174
- //# sourceMappingURL=fix-strip-f884s.js.map
172
+ //# sourceMappingURL=fix-strip-f884s.js.map
@@ -1,7 +1 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/helpers/fix-strip-f884s.js"],
4
- "sourcesContent": ["import createDebugLogger from 'debug';\n//import {sortFieldsBySubfieldValue, removeSubfield} from './fix-utils';\nimport {inspect} from 'util';\n\nexport function stripF884s(newRecord, options) {\n const debug = createDebugLogger('@natlibfi/melinda-rest-api-commons:fixRecord:stripF884s');\n const debugData = debug.extend('data');\n\n if (options !== true) {\n debug(`NOT running stripF884s fixer, no options`);\n return newRecord;\n }\n\n debug(`Running stripF884s fixer`);\n debugData(`Options for stripF884s: ${JSON.stringify(options)}`);\n\n // Handle only f884 with $5 MELINDA - let's no remove random f884s\n const isMelindaf884 = f => f.tag === '884' && f.subfields.some(({code, value}) => code === '5' && value === 'MELINDA');\n\n const f884Melindas = newRecord.fields.filter(isMelindaf884);\n debugData(`Melinda's f884s (${f884Melindas.length}) \\n ${JSON.stringify(f884Melindas)}`);\n //debugData(`Melinda's f884s (${f884Melindas.length}) \\n ${inspect(f884Melindas, {depth: 3})}`);\n\n if (f884Melindas.length < 2) {\n debug(`Not enough Melinda's f884s to filter (${f884Melindas.length})`);\n return newRecord;\n }\n\n // Pick data (firstDate, lastDate, hash with latest date) for all conversion : source combinations\n const results = f884Melindas.reduce((allResults, f884, index) => {\n debugData(`All results: ${JSON.stringify(allResults)}`);\n //debugData(`Handling field (${index}): ${inspect(f884, {depth: 3})}`);\n debugData(`Handling field *(${index})*: ${JSON.stringify(f884)}`);\n\n const conversion = findConversion(f884);\n const source = findSource(f884);\n const convSource = `${conversion}:${source}`;\n const {firstDate, lastDate} = findDates(f884);\n const hash = findHash(f884);\n\n // Find currently existing data for conversion : source combination\n const currResult = allResults[convSource];\n debugData(JSON.stringify(currResult));\n\n // If we do not have any current data, add data from field\n if (!currResult) {\n debug(`Add a new convSource ${convSource} to results`);\n const newResult = {\n conversion,\n source,\n firstDate,\n lastDate,\n hash\n };\n debugData(`- New result: ${JSON.stringify(newResult)}`);\n return {\n ...allResults,\n [convSource]: newResult\n };\n }\n // If we have current data, update it from the data from field, if needed\n debug(`Update result for ${convSource}`);\n debugData(`- Current result: ${JSON.stringify(currResult)}`);\n\n // '00000000' is the deliberate no-date sentinel for a missing $g (see\n // findDates): it must never win a date comparison, and both sides must\n // agree on this sentinel\n const updatedResult = {\n ...currResult,\n firstDate: currResult.firstDate > firstDate && firstDate !== '00000000' ? firstDate : currResult.firstDate,\n lastDate: currResult.lastDate < lastDate ? lastDate : currResult.lastDate,\n hash: currResult.lastDate < lastDate && lastDate !== '00000000' && hash !== '0000000000000000000000000000000000000000000000000000000000000000' ? hash : currResult.hash\n };\n debugData(`- Updated result: ${JSON.stringify(updatedResult)}`);\n return {\n ...allResults,\n [convSource]: updatedResult\n };\n }, {});\n\n debugData(`RESULTS: ${JSON.stringify(results)}`);\n const editedf884s = editFields(f884Melindas, results);\n\n debug(`Edited fields (${editedf884s.length})`);\n //debugData(inspect(editedf884s, {depth: 3}));\n debugData(`${JSON.stringify(editedf884s)}`);\n\n // We update each field based on the results we got from fields\n // Note: we do not add $g:s or $k:s if the field doesn't have them\n function editFields(fields, results) {\n debug(`EDITING FIELDS (${fields.length})`);\n const editedFields = fields.map((field) => {\n const convSource = `${findConversion(field)}:${findSource(field)}`;\n debug(`Looking for: ${convSource}`);\n\n if (convSource && results[convSource]) {\n debugData(`Found: ${JSON.stringify(results[convSource])}`);\n const firstDate = results[convSource].firstDate && results[convSource].firstDate !== '00000000' ? results[convSource].firstDate : '';\n const lastDate = results[convSource].lastDate && results[convSource].lastDate !== '00000000' ? results[convSource].lastDate : '';\n\n const source = results[convSource].source && results[convSource].source !== 'NO_SOURCE' ? results[convSource].source : '';\n const hash = results[convSource].hash && results[convSource].hash !== '0000000000000000000000000000000000000000000000000000000000000000' ? results[convSource].hash : '';\n\n const sfGAll = firstDate === lastDate ? `${firstDate}` : `${firstDate} - ${lastDate}`;\n debugData(`EditedDates: ${sfGAll}`);\n const sfKAll = `${source}:${hash}`;\n\n const sfG = sfGAll.replace(/^ - /u, '').replace(/ - $/u, '');\n const sfK = sfKAll.replace(/^:/u, '').replace(/:$/u, '');\n\n return {\n ...field,\n subfields: field.subfields.map(subfield => {\n\n // we don't get $g or $k if the original field doesn't have them\n if (subfield.code === 'g') {\n return {\n code: subfield.code,\n value: sfG\n };\n }\n\n if (subfield.code === 'k') {\n return {\n code: subfield.code,\n value: sfK\n };\n }\n\n return subfield;\n })\n\n };\n }\n // Defensive: results is keyed from the same f884Melindas array, so\n // convSource is always present when truthy.\n debug(`Not found: ${convSource}`);\n return field;\n });\n return editedFields;\n }\n\n // we'll need to uniq these too\n\n const uniq884s = uniqFields(editedf884s);\n debug(`UniqFields (${uniq884s.length})`);\n debugData(inspect(uniq884s, {depth: 3}));\n\n\n // Canonicalize a raw field object ({tag, ind1, ind2, subfields: [...]}) so\n // that two structurally equal fields stringify identically: object keys are\n // sorted recursively, arrays keep their order, primitives pass through.\n function canonicalize(value) {\n if (Array.isArray(value)) {\n return value.map(canonicalize);\n }\n if (value && typeof value === 'object') {\n return Object.keys(value).sort().reduce((canonical, key) => {\n canonical[key] = canonicalize(value[key]);\n return canonical;\n }, {});\n }\n return value;\n }\n\n function fieldsAreEqual(a, b) {\n return JSON.stringify(canonicalize(a)) === JSON.stringify(canonicalize(b));\n }\n\n function uniqFields(fields) {\n return fields.reduce((uniq, field) => {\n if (!uniq.some(f => fieldsAreEqual(f, field))) {\n uniq.push(field);\n }\n\n return uniq;\n }, []);\n }\n // Replace original Melinda-f884s with remaining Melinda-f884s\n // NOTE: this sorts MELINDA-f884s after possible other f884s\n newRecord.removeFields(f884Melindas);\n newRecord.insertFields(uniq884s);\n\n return newRecord;\n\n\n // Find conversion:source pairs\n // Find first date\n // Find last date and last hash\n\n\n function findConversion(f884) {\n const [sfA] = f884.subfields.filter((subfield) => subfield.code === 'a').map(subfield => subfield.value);\n const conversion = sfA;\n debugData(`Conversion: \"${conversion}\"`);\n return conversion;\n }\n\n function findSource(f884) {\n const [sfK] = f884.subfields.filter((subfield) => subfield.code === 'k').map(subfield => subfield.value);\n // a Melinda f884 may have no $k subfield -> sfK is undefined\n const source = (sfK ?? '').replace(/:.*$/u, '');\n if (source && source.length !== 64) {\n debugData(`Source: \"${source}\"`);\n return source;\n }\n const emptySource = 'NO_SOURCE';\n debugData(`Source: \"${emptySource}\"`);\n return emptySource;\n }\n\n function findHash(f884) {\n const [sfK] = f884.subfields.filter((subfield) => subfield.code === 'k').map(subfield => subfield.value);\n // a Melinda f884 may have no $k subfield -> sfK is undefined\n const hash = (sfK ?? '').replace(/^.*:/u, '');\n if (hash && hash.length === 64) {\n debugData(`Hash: \"${hash}\"`);\n return hash;\n }\n const emptyHash = '0000000000000000000000000000000000000000000000000000000000000000';\n debugData(`Hash: \"${emptyHash}\"`);\n return emptyHash;\n }\n\n function findDates(f884) {\n const [sfG] = f884.subfields.filter((subfield) => subfield.code === 'g').map(subfield => subfield.value);\n if (sfG && (/ - /u).test(sfG)) {\n const firstDate = sfG.replace(/ - .*$/u, '').padStart(8, '0');\n const lastDate = sfG.replace(/^.* - /u, '').padStart(8, '0');\n debugData(`FirstDate: \"${firstDate}\", LastDate: \"${lastDate}\"`);\n return {firstDate, lastDate};\n }\n // '00000000' is the deliberate no-date sentinel for a missing $g; the\n // consumer side (updatedResult / editFields above) must keep agreeing on\n // this exact sentinel\n const firstDate = sfG ? sfG.padStart(8, '0') : '00000000';\n const lastDate = sfG ? sfG.padStart(8, '0') : '00000000';\n\n debugData(`FirstDate: \"${firstDate}\", LastDate: \"${lastDate}\"`);\n return {firstDate, lastDate};\n }\n\n}\n"],
5
- "mappings": "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",
6
- "names": ["results", "firstDate", "lastDate"]
7
- }
1
+ {"version":3,"file":"fix-strip-f884s.js","sourceRoot":"","sources":["../../src/helpers/fix-strip-f884s.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { MarcRecord } from '@natlibfi/marc-record';
2
+ import type { MarcRecordObject } from '@natlibfi/marc-record';
3
+ import type { FixSettings } from './fix-constants.ts';
4
+ export * from './fix-constants.ts';
5
+ export declare function fixRecord(record: MarcRecord, settings?: FixSettings): MarcRecordObject;
6
+ //# sourceMappingURL=fix.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fix.d.ts","sourceRoot":"","sources":["../../src/helpers/fix.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,UAAU,EAAC,MAAM,uBAAuB,CAAC;AACjD,OAAO,KAAK,EAAY,gBAAgB,EAAC,MAAM,uBAAuB,CAAC;AAOvE,OAAO,KAAK,EAAC,WAAW,EAAmC,MAAM,oBAAoB,CAAC;AAEtF,cAAc,oBAAoB,CAAC;AASnC,wBAAgB,SAAS,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,GAAE,WAAgB,GAAG,gBAAgB,CAgC1F"}