@natlibfi/melinda-rest-api-commons 4.2.5 → 5.0.0-alpha.2

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 (55) hide show
  1. package/.github/workflows/melinda-node-tests.yml +9 -6
  2. package/dist/amqp.js +60 -151
  3. package/dist/amqp.js.map +7 -1
  4. package/dist/constants.js +40 -51
  5. package/dist/constants.js.map +7 -1
  6. package/dist/helpers/conversion.js +39 -57
  7. package/dist/helpers/conversion.js.map +7 -1
  8. package/dist/helpers/fix-constants.js +40 -47
  9. package/dist/helpers/fix-constants.js.map +7 -1
  10. package/dist/helpers/fix-handle-tempurns.js +23 -73
  11. package/dist/helpers/fix-handle-tempurns.js.map +7 -1
  12. package/dist/helpers/fix-strip-f884s.js +44 -94
  13. package/dist/helpers/fix-strip-f884s.js.map +7 -1
  14. package/dist/helpers/fix-utils.js +7 -22
  15. package/dist/helpers/fix-utils.js.map +7 -1
  16. package/dist/helpers/fix.js +62 -122
  17. package/dist/helpers/fix.js.map +7 -1
  18. package/dist/helpers/validation.js +12 -30
  19. package/dist/helpers/validation.js.map +7 -1
  20. package/dist/index.js +10 -109
  21. package/dist/index.js.map +7 -1
  22. package/dist/mongo.js +173 -509
  23. package/dist/mongo.js.map +7 -1
  24. package/dist/mongoLog.js +92 -317
  25. package/dist/mongoLog.js.map +7 -1
  26. package/dist/utils.js +46 -155
  27. package/dist/utils.js.map +7 -1
  28. package/eslint.config.js +53 -0
  29. package/package.json +23 -96
  30. package/tests/{amqp.health.spec.js → amqp.healthtest.js} +2 -2
  31. package/tests/{amqp.tests.spec.js → amqp.tests.localtest.js} +46 -46
  32. package/tests/helpers/{conversion.spec.js → conversion.test.js} +38 -25
  33. package/tests/helpers/{fix.spec.js → fix.test.js} +6 -6
  34. package/tests/helpers/{validation.spec.js → validation.test.js} +12 -9
  35. package/tests/{mongo-add-blob-size.spec.js → mongo-add-blob-size.test.js} +6 -6
  36. package/tests/{mongo-check-and-check-state.spec.js → mongo-check-and-check-state.test.js} +7 -7
  37. package/tests/{mongo-check-and-set-import-job-state.spec.js → mongo-check-and-set-import-job-state.test.js} +7 -7
  38. package/tests/{mongo-check-timeout.spec.js → mongo-check-timeout.test.js} +7 -7
  39. package/tests/{mongo-create-bulk.spec.js → mongo-create-bulk.test.js} +5 -5
  40. package/tests/{mongo-create-prio.spec.js → mongo-create-prio.test.js} +6 -6
  41. package/tests/{mongo-get-one.spec.js → mongo-get-one.test.js} +7 -7
  42. package/tests/{mongo-get-stream.spec.js → mongo-get-stream.test.js} +7 -7
  43. package/tests/{mongo-push-ids.spec.js → mongo-push-ids.test.js} +5 -5
  44. package/tests/{mongo-push-messages.spec.js → mongo-push-messages.test.js} +6 -6
  45. package/tests/{mongo-query-by-id.spec.js → mongo-query-by-id.test.js} +7 -7
  46. package/tests/{mongo-query.spec.js → mongo-query.test.js} +7 -7
  47. package/tests/{mongo-read-content.spec.js → mongo-read-content.test.js} +8 -8
  48. package/tests/{mongo-remove.spec.js → mongo-remove.test.js} +6 -6
  49. package/tests/{mongo-set-blob-size.spec.js → mongo-set-blob-size.test.js} +6 -6
  50. package/tests/{mongo-set-import-job-state.spec.js → mongo-set-import-job-state.test.js} +6 -6
  51. package/tests/{mongo-set-operation.spec.js → mongo-set-operation.test.js} +6 -6
  52. package/tests/{mongo-set-operations.spec.js → mongo-set-operations.test.js} +6 -6
  53. package/tests/{mongo-set-state.spec.js → mongo-set-state.test.js} +7 -7
  54. package/tests/{mongoLog.spec.js → mongoLog.test.js} +10 -11
  55. package/tests/testUtils.js +9 -8
@@ -1,88 +1,70 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
6
- });
7
- exports.default = _default;
8
- var _httpStatus = _interopRequireDefault(require("http-status"));
9
- var _marcRecordSerializers = require("@natlibfi/marc-record-serializers");
10
- var _melindaBackendCommons = require("@natlibfi/melinda-backend-commons");
11
- var _melindaCommons = require("@natlibfi/melinda-commons");
12
- var _constants = require("../constants");
13
- var _utils = require("../utils");
14
- function _default() {
15
- const logger = (0, _melindaBackendCommons.createLogger)();
16
- return {
17
- serialize,
18
- unserialize
19
- };
20
-
21
- // This uses format as a number form contants CONVERSION_FORMATS
1
+ import httpStatus from "http-status";
2
+ import { MARCXML, ISO2709, Json, AlephSequential } from "@natlibfi/marc-record-serializers";
3
+ import { createLogger } from "@natlibfi/melinda-backend-commons";
4
+ import { Error as ConversionError } from "@natlibfi/melinda-commons";
5
+ import { CONVERSION_FORMATS } from "../constants.js";
6
+ import { logError } from "../utils.js";
7
+ export default function() {
8
+ const logger = createLogger();
9
+ return { serialize, unserialize };
22
10
  function serialize(record, format) {
23
11
  logger.verbose(`Serializing record to ${format}`);
24
12
  try {
25
- if (format === _constants.CONVERSION_FORMATS.MARCXML) {
26
- return _marcRecordSerializers.MARCXML.to(record);
13
+ if (format === CONVERSION_FORMATS.MARCXML) {
14
+ return MARCXML.to(record);
27
15
  }
28
- if (format === _constants.CONVERSION_FORMATS.ISO2709) {
29
- return _marcRecordSerializers.ISO2709.to(record);
16
+ if (format === CONVERSION_FORMATS.ISO2709) {
17
+ return ISO2709.to(record);
30
18
  }
31
- if (format === _constants.CONVERSION_FORMATS.JSON) {
32
- return _marcRecordSerializers.Json.to(record);
19
+ if (format === CONVERSION_FORMATS.JSON) {
20
+ return Json.to(record);
33
21
  }
34
- if (format === _constants.CONVERSION_FORMATS.ALEPHSEQ) {
35
- return _marcRecordSerializers.AlephSequential.to(record);
22
+ if (format === CONVERSION_FORMATS.ALEPHSEQ) {
23
+ return AlephSequential.to(record);
36
24
  }
37
- throw new _melindaCommons.Error(_httpStatus.default.UNSUPPORTED_MEDIA_TYPE);
25
+ throw new ConversionError(httpStatus.UNSUPPORTED_MEDIA_TYPE);
38
26
  } catch (err) {
39
- (0, _utils.logError)(err);
27
+ logError(err);
40
28
  const message = err.message || err.payload?.message || err.payload;
41
29
  logger.debug(`${message}`);
42
- if (err instanceof _melindaCommons.Error) {
43
- // eslint-disable-line functional/no-conditional-statements
30
+ if (err instanceof ConversionError) {
44
31
  throw err;
45
32
  }
46
- throw new _melindaCommons.Error(_httpStatus.default.BAD_REQUEST, `Error while serializing record. ${message}`);
33
+ throw new ConversionError(httpStatus.BAD_REQUEST, `Error while serializing record. ${message}`);
47
34
  }
48
35
  }
49
-
50
- // eslint-disable-next-line max-statements
51
- function unserialize(data, format, validationOptions = {
52
- subfieldValues: false
53
- }) {
36
+ function unserialize(data, format, validationOptions = { subfieldValues: false }) {
54
37
  logger.verbose(`Unserializing record from ${format}`);
55
38
  logger.silly(`Format: ${format}`);
56
39
  logger.debug(`Validation options: ${JSON.stringify(validationOptions)}`);
57
40
  logger.silly(`Data: ${JSON.stringify(data)}`);
58
41
  try {
59
- if (format === _constants.CONVERSION_FORMATS.MARCXML) {
60
- logger.silly('Unserialize format marcxml');
61
- return _marcRecordSerializers.MARCXML.from(data, validationOptions);
42
+ if (format === CONVERSION_FORMATS.MARCXML) {
43
+ logger.silly("Unserialize format marcxml");
44
+ return MARCXML.from(data, validationOptions);
62
45
  }
63
- if (format === _constants.CONVERSION_FORMATS.ISO2709) {
64
- logger.silly('Unserialize format iso2709');
65
- return _marcRecordSerializers.ISO2709.from(data, validationOptions);
46
+ if (format === CONVERSION_FORMATS.ISO2709) {
47
+ logger.silly("Unserialize format iso2709");
48
+ return ISO2709.from(data, validationOptions);
66
49
  }
67
- if (format === _constants.CONVERSION_FORMATS.JSON) {
68
- logger.silly('Unserialize format json');
69
- return _marcRecordSerializers.Json.from(data, validationOptions);
50
+ if (format === CONVERSION_FORMATS.JSON) {
51
+ logger.silly("Unserialize format json");
52
+ return Json.from(data, validationOptions);
70
53
  }
71
- if (format === _constants.CONVERSION_FORMATS.ALEPHSEQ) {
72
- logger.silly('Unserialize format aleph sequential');
73
- return _marcRecordSerializers.AlephSequential.from(data, validationOptions);
54
+ if (format === CONVERSION_FORMATS.ALEPHSEQ) {
55
+ logger.silly("Unserialize format aleph sequential");
56
+ return AlephSequential.from(data, validationOptions);
74
57
  }
75
- throw new _melindaCommons.Error(_httpStatus.default.UNSUPPORTED_MEDIA_TYPE);
58
+ throw new ConversionError(httpStatus.UNSUPPORTED_MEDIA_TYPE);
76
59
  } catch (err) {
77
- (0, _utils.logError)(err);
60
+ logError(err);
78
61
  const message = err.message || err.payload?.message || err.payload;
79
62
  logger.debug(`${message}`);
80
- if (err instanceof _melindaCommons.Error) {
81
- // eslint-disable-line functional/no-conditional-statements
63
+ if (err instanceof ConversionError) {
82
64
  throw err;
83
65
  }
84
- throw new _melindaCommons.Error(_httpStatus.default.BAD_REQUEST, `Error while unserializing record. ${message}`);
66
+ throw new ConversionError(httpStatus.BAD_REQUEST, `Error while unserializing record. ${message}`);
85
67
  }
86
68
  }
87
69
  }
88
- //# sourceMappingURL=conversion.js.map
70
+ //# sourceMappingURL=conversion.js.map
@@ -1 +1,7 @@
1
- {"version":3,"file":"conversion.js","names":["_httpStatus","_interopRequireDefault","require","_marcRecordSerializers","_melindaBackendCommons","_melindaCommons","_constants","_utils","_default","logger","createLogger","serialize","unserialize","record","format","verbose","CONVERSION_FORMATS","MARCXML","to","ISO2709","JSON","Json","ALEPHSEQ","AlephSequential","ConversionError","httpStatus","UNSUPPORTED_MEDIA_TYPE","err","logError","message","payload","debug","BAD_REQUEST","data","validationOptions","subfieldValues","silly","stringify","from"],"sources":["../../src/helpers/conversion.js"],"sourcesContent":["\n\nimport httpStatus from 'http-status';\nimport {MARCXML, ISO2709, Json, AlephSequential} from '@natlibfi/marc-record-serializers';\nimport {createLogger} from '@natlibfi/melinda-backend-commons';\nimport {Error as ConversionError} from '@natlibfi/melinda-commons';\nimport {CONVERSION_FORMATS} from '../constants';\nimport {logError} from '../utils';\n\nexport default function () {\n const logger = createLogger();\n\n return {serialize, unserialize};\n\n // This uses format as a number form contants CONVERSION_FORMATS\n function serialize(record, format) {\n logger.verbose(`Serializing record to ${format}`);\n try {\n if (format === CONVERSION_FORMATS.MARCXML) {\n return MARCXML.to(record);\n }\n\n if (format === CONVERSION_FORMATS.ISO2709) {\n return ISO2709.to(record);\n }\n\n if (format === CONVERSION_FORMATS.JSON) {\n return Json.to(record);\n }\n\n if (format === CONVERSION_FORMATS.ALEPHSEQ) {\n return AlephSequential.to(record);\n }\n\n throw new ConversionError(httpStatus.UNSUPPORTED_MEDIA_TYPE);\n } catch (err) {\n logError(err);\n const message = err.message || err.payload?.message || err.payload;\n logger.debug(`${message}`);\n if (err instanceof ConversionError) { // eslint-disable-line functional/no-conditional-statements\n throw err;\n }\n throw new ConversionError(httpStatus.BAD_REQUEST, `Error while serializing record. ${message}`);\n }\n }\n\n // eslint-disable-next-line max-statements\n function unserialize(data, format, validationOptions = {subfieldValues: false}) {\n logger.verbose(`Unserializing record from ${format}`);\n logger.silly(`Format: ${format}`);\n logger.debug(`Validation options: ${JSON.stringify(validationOptions)}`);\n logger.silly(`Data: ${JSON.stringify(data)}`);\n try {\n if (format === CONVERSION_FORMATS.MARCXML) {\n logger.silly('Unserialize format marcxml');\n return MARCXML.from(data, validationOptions);\n }\n\n if (format === CONVERSION_FORMATS.ISO2709) {\n logger.silly('Unserialize format iso2709');\n return ISO2709.from(data, validationOptions);\n }\n\n if (format === CONVERSION_FORMATS.JSON) {\n logger.silly('Unserialize format json');\n return Json.from(data, validationOptions);\n }\n\n if (format === CONVERSION_FORMATS.ALEPHSEQ) {\n logger.silly('Unserialize format aleph sequential');\n return AlephSequential.from(data, validationOptions);\n }\n\n throw new ConversionError(httpStatus.UNSUPPORTED_MEDIA_TYPE);\n } catch (err) {\n logError(err);\n const message = err.message || err.payload?.message || err.payload;\n logger.debug(`${message}`);\n if (err instanceof ConversionError) { // eslint-disable-line functional/no-conditional-statements\n throw err;\n }\n throw new ConversionError(httpStatus.BAD_REQUEST, `Error while unserializing record. ${message}`);\n }\n }\n}\n"],"mappings":";;;;;;;AAEA,IAAAA,WAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,sBAAA,GAAAD,OAAA;AACA,IAAAE,sBAAA,GAAAF,OAAA;AACA,IAAAG,eAAA,GAAAH,OAAA;AACA,IAAAI,UAAA,GAAAJ,OAAA;AACA,IAAAK,MAAA,GAAAL,OAAA;AAEe,SAAAM,SAAA,EAAY;EACzB,MAAMC,MAAM,GAAG,IAAAC,mCAAY,EAAC,CAAC;EAE7B,OAAO;IAACC,SAAS;IAAEC;EAAW,CAAC;;EAE/B;EACA,SAASD,SAASA,CAACE,MAAM,EAAEC,MAAM,EAAE;IACjCL,MAAM,CAACM,OAAO,CAAC,yBAAyBD,MAAM,EAAE,CAAC;IACjD,IAAI;MACF,IAAIA,MAAM,KAAKE,6BAAkB,CAACC,OAAO,EAAE;QACzC,OAAOA,8BAAO,CAACC,EAAE,CAACL,MAAM,CAAC;MAC3B;MAEA,IAAIC,MAAM,KAAKE,6BAAkB,CAACG,OAAO,EAAE;QACzC,OAAOA,8BAAO,CAACD,EAAE,CAACL,MAAM,CAAC;MAC3B;MAEA,IAAIC,MAAM,KAAKE,6BAAkB,CAACI,IAAI,EAAE;QACtC,OAAOC,2BAAI,CAACH,EAAE,CAACL,MAAM,CAAC;MACxB;MAEA,IAAIC,MAAM,KAAKE,6BAAkB,CAACM,QAAQ,EAAE;QAC1C,OAAOC,sCAAe,CAACL,EAAE,CAACL,MAAM,CAAC;MACnC;MAEA,MAAM,IAAIW,qBAAe,CAACC,mBAAU,CAACC,sBAAsB,CAAC;IAC9D,CAAC,CAAC,OAAOC,GAAG,EAAE;MACZ,IAAAC,eAAQ,EAACD,GAAG,CAAC;MACb,MAAME,OAAO,GAAGF,GAAG,CAACE,OAAO,IAAIF,GAAG,CAACG,OAAO,EAAED,OAAO,IAAIF,GAAG,CAACG,OAAO;MAClErB,MAAM,CAACsB,KAAK,CAAC,GAAGF,OAAO,EAAE,CAAC;MAC1B,IAAIF,GAAG,YAAYH,qBAAe,EAAE;QAAE;QACpC,MAAMG,GAAG;MACX;MACA,MAAM,IAAIH,qBAAe,CAACC,mBAAU,CAACO,WAAW,EAAE,mCAAmCH,OAAO,EAAE,CAAC;IACjG;EACF;;EAEA;EACA,SAASjB,WAAWA,CAACqB,IAAI,EAAEnB,MAAM,EAAEoB,iBAAiB,GAAG;IAACC,cAAc,EAAE;EAAK,CAAC,EAAE;IAC9E1B,MAAM,CAACM,OAAO,CAAC,6BAA6BD,MAAM,EAAE,CAAC;IACrDL,MAAM,CAAC2B,KAAK,CAAC,WAAWtB,MAAM,EAAE,CAAC;IACjCL,MAAM,CAACsB,KAAK,CAAC,uBAAuBX,IAAI,CAACiB,SAAS,CAACH,iBAAiB,CAAC,EAAE,CAAC;IACxEzB,MAAM,CAAC2B,KAAK,CAAC,SAAShB,IAAI,CAACiB,SAAS,CAACJ,IAAI,CAAC,EAAE,CAAC;IAC7C,IAAI;MACF,IAAInB,MAAM,KAAKE,6BAAkB,CAACC,OAAO,EAAE;QACzCR,MAAM,CAAC2B,KAAK,CAAC,4BAA4B,CAAC;QAC1C,OAAOnB,8BAAO,CAACqB,IAAI,CAACL,IAAI,EAAEC,iBAAiB,CAAC;MAC9C;MAEA,IAAIpB,MAAM,KAAKE,6BAAkB,CAACG,OAAO,EAAE;QACzCV,MAAM,CAAC2B,KAAK,CAAC,4BAA4B,CAAC;QAC1C,OAAOjB,8BAAO,CAACmB,IAAI,CAACL,IAAI,EAAEC,iBAAiB,CAAC;MAC9C;MAEA,IAAIpB,MAAM,KAAKE,6BAAkB,CAACI,IAAI,EAAE;QACtCX,MAAM,CAAC2B,KAAK,CAAC,yBAAyB,CAAC;QACvC,OAAOf,2BAAI,CAACiB,IAAI,CAACL,IAAI,EAAEC,iBAAiB,CAAC;MAC3C;MAEA,IAAIpB,MAAM,KAAKE,6BAAkB,CAACM,QAAQ,EAAE;QAC1Cb,MAAM,CAAC2B,KAAK,CAAC,qCAAqC,CAAC;QACnD,OAAOb,sCAAe,CAACe,IAAI,CAACL,IAAI,EAAEC,iBAAiB,CAAC;MACtD;MAEA,MAAM,IAAIV,qBAAe,CAACC,mBAAU,CAACC,sBAAsB,CAAC;IAC9D,CAAC,CAAC,OAAOC,GAAG,EAAE;MACZ,IAAAC,eAAQ,EAACD,GAAG,CAAC;MACb,MAAME,OAAO,GAAGF,GAAG,CAACE,OAAO,IAAIF,GAAG,CAACG,OAAO,EAAED,OAAO,IAAIF,GAAG,CAACG,OAAO;MAClErB,MAAM,CAACsB,KAAK,CAAC,GAAGF,OAAO,EAAE,CAAC;MAC1B,IAAIF,GAAG,YAAYH,qBAAe,EAAE;QAAE;QACpC,MAAMG,GAAG;MACX;MACA,MAAM,IAAIH,qBAAe,CAACC,mBAAU,CAACO,WAAW,EAAE,qCAAqCH,OAAO,EAAE,CAAC;IACnG;EACF;AACF","ignoreList":[]}
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/helpers/conversion.js"],
4
+ "sourcesContent": ["\n\nimport httpStatus from 'http-status';\nimport {MARCXML, ISO2709, Json, AlephSequential} from '@natlibfi/marc-record-serializers';\nimport {createLogger} from '@natlibfi/melinda-backend-commons';\nimport {Error as ConversionError} from '@natlibfi/melinda-commons';\nimport {CONVERSION_FORMATS} from '../constants.js';\nimport {logError} from '../utils.js';\n\nexport default function () {\n const logger = createLogger();\n\n return {serialize, unserialize};\n\n // This uses format as a number form contants CONVERSION_FORMATS\n function serialize(record, format) {\n logger.verbose(`Serializing record to ${format}`);\n try {\n if (format === CONVERSION_FORMATS.MARCXML) {\n return MARCXML.to(record);\n }\n\n if (format === CONVERSION_FORMATS.ISO2709) {\n return ISO2709.to(record);\n }\n\n if (format === CONVERSION_FORMATS.JSON) {\n return Json.to(record);\n }\n\n if (format === CONVERSION_FORMATS.ALEPHSEQ) {\n return AlephSequential.to(record);\n }\n\n throw new ConversionError(httpStatus.UNSUPPORTED_MEDIA_TYPE);\n } catch (err) {\n logError(err);\n const message = err.message || err.payload?.message || err.payload;\n logger.debug(`${message}`);\n if (err instanceof ConversionError) {\n throw err;\n }\n throw new ConversionError(httpStatus.BAD_REQUEST, `Error while serializing record. ${message}`);\n }\n }\n\n // eslint-disable-next-line max-statements\n function unserialize(data, format, validationOptions = {subfieldValues: false}) {\n logger.verbose(`Unserializing record from ${format}`);\n logger.silly(`Format: ${format}`);\n logger.debug(`Validation options: ${JSON.stringify(validationOptions)}`);\n logger.silly(`Data: ${JSON.stringify(data)}`);\n try {\n if (format === CONVERSION_FORMATS.MARCXML) {\n logger.silly('Unserialize format marcxml');\n return MARCXML.from(data, validationOptions);\n }\n\n if (format === CONVERSION_FORMATS.ISO2709) {\n logger.silly('Unserialize format iso2709');\n return ISO2709.from(data, validationOptions);\n }\n\n if (format === CONVERSION_FORMATS.JSON) {\n logger.silly('Unserialize format json');\n return Json.from(data, validationOptions);\n }\n\n if (format === CONVERSION_FORMATS.ALEPHSEQ) {\n logger.silly('Unserialize format aleph sequential');\n return AlephSequential.from(data, validationOptions);\n }\n\n throw new ConversionError(httpStatus.UNSUPPORTED_MEDIA_TYPE);\n } catch (err) {\n logError(err);\n const message = err.message || err.payload?.message || err.payload;\n logger.debug(`${message}`);\n if (err instanceof ConversionError) {\n throw err;\n }\n throw new ConversionError(httpStatus.BAD_REQUEST, `Error while unserializing record. ${message}`);\n }\n }\n}\n"],
5
+ "mappings": "AAEA,OAAO,gBAAgB;AACvB,SAAQ,SAAS,SAAS,MAAM,uBAAsB;AACtD,SAAQ,oBAAmB;AAC3B,SAAQ,SAAS,uBAAsB;AACvC,SAAQ,0BAAyB;AACjC,SAAQ,gBAAe;AAEvB,0BAA2B;AACzB,QAAM,SAAS,aAAa;AAE5B,SAAO,EAAC,WAAW,YAAW;AAG9B,WAAS,UAAU,QAAQ,QAAQ;AACjC,WAAO,QAAQ,yBAAyB,MAAM,EAAE;AAChD,QAAI;AACF,UAAI,WAAW,mBAAmB,SAAS;AACzC,eAAO,QAAQ,GAAG,MAAM;AAAA,MAC1B;AAEA,UAAI,WAAW,mBAAmB,SAAS;AACzC,eAAO,QAAQ,GAAG,MAAM;AAAA,MAC1B;AAEA,UAAI,WAAW,mBAAmB,MAAM;AACtC,eAAO,KAAK,GAAG,MAAM;AAAA,MACvB;AAEA,UAAI,WAAW,mBAAmB,UAAU;AAC1C,eAAO,gBAAgB,GAAG,MAAM;AAAA,MAClC;AAEA,YAAM,IAAI,gBAAgB,WAAW,sBAAsB;AAAA,IAC7D,SAAS,KAAK;AACZ,eAAS,GAAG;AACZ,YAAM,UAAU,IAAI,WAAW,IAAI,SAAS,WAAW,IAAI;AAC3D,aAAO,MAAM,GAAG,OAAO,EAAE;AACzB,UAAI,eAAe,iBAAiB;AAClC,cAAM;AAAA,MACR;AACA,YAAM,IAAI,gBAAgB,WAAW,aAAa,mCAAmC,OAAO,EAAE;AAAA,IAChG;AAAA,EACF;AAGA,WAAS,YAAY,MAAM,QAAQ,oBAAoB,EAAC,gBAAgB,MAAK,GAAG;AAC9E,WAAO,QAAQ,6BAA6B,MAAM,EAAE;AACpD,WAAO,MAAM,WAAW,MAAM,EAAE;AAChC,WAAO,MAAM,uBAAuB,KAAK,UAAU,iBAAiB,CAAC,EAAE;AACvE,WAAO,MAAM,SAAS,KAAK,UAAU,IAAI,CAAC,EAAE;AAC5C,QAAI;AACF,UAAI,WAAW,mBAAmB,SAAS;AACzC,eAAO,MAAM,4BAA4B;AACzC,eAAO,QAAQ,KAAK,MAAM,iBAAiB;AAAA,MAC7C;AAEA,UAAI,WAAW,mBAAmB,SAAS;AACzC,eAAO,MAAM,4BAA4B;AACzC,eAAO,QAAQ,KAAK,MAAM,iBAAiB;AAAA,MAC7C;AAEA,UAAI,WAAW,mBAAmB,MAAM;AACtC,eAAO,MAAM,yBAAyB;AACtC,eAAO,KAAK,KAAK,MAAM,iBAAiB;AAAA,MAC1C;AAEA,UAAI,WAAW,mBAAmB,UAAU;AAC1C,eAAO,MAAM,qCAAqC;AAClD,eAAO,gBAAgB,KAAK,MAAM,iBAAiB;AAAA,MACrD;AAEA,YAAM,IAAI,gBAAgB,WAAW,sBAAsB;AAAA,IAC7D,SAAS,KAAK;AACZ,eAAS,GAAG;AACZ,YAAM,UAAU,IAAI,WAAW,IAAI,SAAS,WAAW,IAAI;AAC3D,aAAO,MAAM,GAAG,OAAO,EAAE;AACzB,UAAI,eAAe,iBAAiB;AAClC,cAAM;AAAA,MACR;AACA,YAAM,IAAI,gBAAgB,WAAW,aAAa,qCAAqC,OAAO,EAAE;AAAA,IAClG;AAAA,EACF;AACF;",
6
+ "names": []
7
+ }
@@ -1,70 +1,63 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.REPLACE_PREFIXES = exports.BIB_STRIP_MELINDA_TEMP_SUBFIELDS_SETTINGS = exports.BIB_STRIP_F984S_SETTINGS = exports.BIB_STRIP_F884S_SETTINGS = exports.BIB_PREVALIDATION_FIX_SETTINGS = exports.BIB_PREIMPORT_FIX_SETTINGS = exports.BIB_POSTMERGE_FIX_SETTINGS = exports.BIB_HANDLE_TEMP_URNS_SETTINGS = exports.BIB_FORMAT_SETTINGS = exports.BIB_F035_TO_SID = exports.AUTNAME_PREIMPORT_FIX_SETTINGS = void 0;
7
- // This could be formatted so that 035-prefix and SID contents would be better connected than by just an array index
8
- const BIB_F035_TO_SID = exports.BIB_F035_TO_SID = {
1
+ export const BIB_F035_TO_SID = {
9
2
  f035Filters: [/^\(FI-BTJ\)/u, /^\(FI-TATI\)/u],
10
- fSIDFilters: ['FI-BTJ', 'tati']
11
- };
12
-
13
- // There is somewhere other implementations of this same standardPrefixes to alephInternalPrefixes normalization
14
- const REPLACE_PREFIXES = exports.REPLACE_PREFIXES = [{
15
- oldPrefix: 'FI-MELINDA',
16
- newPrefix: 'FIN01',
17
- prefixReplaceCodes: ['w']
18
- }, {
19
- oldPrefix: 'FI-ASTERI-S',
20
- newPrefix: 'FIN10',
21
- prefixReplaceCodes: ['0']
22
- }, {
23
- oldPrefix: 'FI-ASTERI-N',
24
- newPrefix: 'FIN11',
25
- prefixReplaceCodes: ['0']
26
- }, {
27
- oldPrefix: 'FI-ASTERI-A',
28
- newPrefix: 'FIN12',
29
- prefixReplaceCodes: ['0']
30
- }, {
31
- oldPrefix: 'FI-ASTERI-W',
32
- newPrefix: 'FIN13',
33
- prefixReplaceCodes: ['0']
34
- }];
35
-
36
- // If placed in config.js testing needs envs
37
- // BIB_FORMAT_SETTINGS is outdated, use other settings instead
38
-
39
- const BIB_FORMAT_SETTINGS = exports.BIB_FORMAT_SETTINGS = {
3
+ fSIDFilters: ["FI-BTJ", "tati"]
4
+ };
5
+ export const REPLACE_PREFIXES = [
6
+ {
7
+ oldPrefix: "FI-MELINDA",
8
+ newPrefix: "FIN01",
9
+ prefixReplaceCodes: ["w"]
10
+ },
11
+ {
12
+ oldPrefix: "FI-ASTERI-S",
13
+ newPrefix: "FIN10",
14
+ prefixReplaceCodes: ["0"]
15
+ },
16
+ {
17
+ oldPrefix: "FI-ASTERI-N",
18
+ newPrefix: "FIN11",
19
+ prefixReplaceCodes: ["0"]
20
+ },
21
+ {
22
+ oldPrefix: "FI-ASTERI-A",
23
+ newPrefix: "FIN12",
24
+ prefixReplaceCodes: ["0"]
25
+ },
26
+ {
27
+ oldPrefix: "FI-ASTERI-W",
28
+ newPrefix: "FIN13",
29
+ prefixReplaceCodes: ["0"]
30
+ }
31
+ ];
32
+ export const BIB_FORMAT_SETTINGS = {
40
33
  replacePrefixes: REPLACE_PREFIXES,
41
34
  generateMissingSIDs: BIB_F035_TO_SID
42
35
  };
43
- const BIB_PREVALIDATION_FIX_SETTINGS = exports.BIB_PREVALIDATION_FIX_SETTINGS = {
36
+ export const BIB_PREVALIDATION_FIX_SETTINGS = {
44
37
  generateMissingSIDs: BIB_F035_TO_SID
45
38
  };
46
- const BIB_POSTMERGE_FIX_SETTINGS = exports.BIB_POSTMERGE_FIX_SETTINGS = {
39
+ export const BIB_POSTMERGE_FIX_SETTINGS = {
47
40
  handleTempUrns: true,
48
41
  stripF884s: true
49
42
  };
50
- const BIB_PREIMPORT_FIX_SETTINGS = exports.BIB_PREIMPORT_FIX_SETTINGS = {
43
+ export const BIB_PREIMPORT_FIX_SETTINGS = {
51
44
  replacePrefixes: REPLACE_PREFIXES,
52
45
  stripMelindaTempSubfields: true,
53
46
  stripF984s: true
54
47
  };
55
- const AUTNAME_PREIMPORT_FIX_SETTINGS = exports.AUTNAME_PREIMPORT_FIX_SETTINGS = {
48
+ export const AUTNAME_PREIMPORT_FIX_SETTINGS = {
56
49
  replacePrefixes: REPLACE_PREFIXES
57
50
  };
58
- const BIB_HANDLE_TEMP_URNS_SETTINGS = exports.BIB_HANDLE_TEMP_URNS_SETTINGS = {
51
+ export const BIB_HANDLE_TEMP_URNS_SETTINGS = {
59
52
  handleTempUrns: true
60
53
  };
61
- const BIB_STRIP_F884S_SETTINGS = exports.BIB_STRIP_F884S_SETTINGS = {
54
+ export const BIB_STRIP_F884S_SETTINGS = {
62
55
  stripF884s: true
63
56
  };
64
- const BIB_STRIP_F984S_SETTINGS = exports.BIB_STRIP_F984S_SETTINGS = {
57
+ export const BIB_STRIP_F984S_SETTINGS = {
65
58
  stripF984s: true
66
59
  };
67
- const BIB_STRIP_MELINDA_TEMP_SUBFIELDS_SETTINGS = exports.BIB_STRIP_MELINDA_TEMP_SUBFIELDS_SETTINGS = {
60
+ export const BIB_STRIP_MELINDA_TEMP_SUBFIELDS_SETTINGS = {
68
61
  stripMelindaTempSubfields: true
69
62
  };
70
- //# sourceMappingURL=fix-constants.js.map
63
+ //# sourceMappingURL=fix-constants.js.map
@@ -1 +1,7 @@
1
- {"version":3,"file":"fix-constants.js","names":["BIB_F035_TO_SID","exports","f035Filters","fSIDFilters","REPLACE_PREFIXES","oldPrefix","newPrefix","prefixReplaceCodes","BIB_FORMAT_SETTINGS","replacePrefixes","generateMissingSIDs","BIB_PREVALIDATION_FIX_SETTINGS","BIB_POSTMERGE_FIX_SETTINGS","handleTempUrns","stripF884s","BIB_PREIMPORT_FIX_SETTINGS","stripMelindaTempSubfields","stripF984s","AUTNAME_PREIMPORT_FIX_SETTINGS","BIB_HANDLE_TEMP_URNS_SETTINGS","BIB_STRIP_F884S_SETTINGS","BIB_STRIP_F984S_SETTINGS","BIB_STRIP_MELINDA_TEMP_SUBFIELDS_SETTINGS"],"sources":["../../src/helpers/fix-constants.js"],"sourcesContent":["// This could be formatted so that 035-prefix and SID contents would be better connected than by just an array index\nexport const BIB_F035_TO_SID = {\n f035Filters: [/^\\(FI-BTJ\\)/u, /^\\(FI-TATI\\)/u],\n fSIDFilters: ['FI-BTJ', 'tati']\n};\n\n// There is somewhere other implementations of this same standardPrefixes to alephInternalPrefixes normalization\nexport const REPLACE_PREFIXES = [\n {\n oldPrefix: 'FI-MELINDA',\n newPrefix: 'FIN01',\n prefixReplaceCodes: ['w']\n },\n {\n oldPrefix: 'FI-ASTERI-S',\n newPrefix: 'FIN10',\n prefixReplaceCodes: ['0']\n },\n {\n oldPrefix: 'FI-ASTERI-N',\n newPrefix: 'FIN11',\n prefixReplaceCodes: ['0']\n },\n {\n oldPrefix: 'FI-ASTERI-A',\n newPrefix: 'FIN12',\n prefixReplaceCodes: ['0']\n },\n {\n oldPrefix: 'FI-ASTERI-W',\n newPrefix: 'FIN13',\n prefixReplaceCodes: ['0']\n }\n];\n\n// If placed in config.js testing needs envs\n// BIB_FORMAT_SETTINGS is outdated, use other settings instead\n\n\nexport const BIB_FORMAT_SETTINGS = {\n replacePrefixes: REPLACE_PREFIXES,\n generateMissingSIDs: BIB_F035_TO_SID\n};\n\nexport const BIB_PREVALIDATION_FIX_SETTINGS = {\n generateMissingSIDs: BIB_F035_TO_SID\n};\n\nexport const BIB_POSTMERGE_FIX_SETTINGS = {\n handleTempUrns: true,\n stripF884s: true\n};\n\nexport const BIB_PREIMPORT_FIX_SETTINGS = {\n replacePrefixes: REPLACE_PREFIXES,\n stripMelindaTempSubfields: true,\n stripF984s: true\n};\n\nexport const AUTNAME_PREIMPORT_FIX_SETTINGS = {\n replacePrefixes: REPLACE_PREFIXES\n};\n\nexport const BIB_HANDLE_TEMP_URNS_SETTINGS = {\n handleTempUrns: true\n};\n\nexport const BIB_STRIP_F884S_SETTINGS = {\n stripF884s: true\n};\n\nexport const BIB_STRIP_F984S_SETTINGS = {\n stripF984s: true\n};\n\nexport const BIB_STRIP_MELINDA_TEMP_SUBFIELDS_SETTINGS = {\n stripMelindaTempSubfields: true\n};\n"],"mappings":";;;;;;AAAA;AACO,MAAMA,eAAe,GAAAC,OAAA,CAAAD,eAAA,GAAG;EAC7BE,WAAW,EAAE,CAAC,cAAc,EAAE,eAAe,CAAC;EAC9CC,WAAW,EAAE,CAAC,QAAQ,EAAE,MAAM;AAChC,CAAC;;AAED;AACO,MAAMC,gBAAgB,GAAAH,OAAA,CAAAG,gBAAA,GAAG,CAC9B;EACEC,SAAS,EAAE,YAAY;EACvBC,SAAS,EAAE,OAAO;EAClBC,kBAAkB,EAAE,CAAC,GAAG;AAC1B,CAAC,EACD;EACEF,SAAS,EAAE,aAAa;EACxBC,SAAS,EAAE,OAAO;EAClBC,kBAAkB,EAAE,CAAC,GAAG;AAC1B,CAAC,EACD;EACEF,SAAS,EAAE,aAAa;EACxBC,SAAS,EAAE,OAAO;EAClBC,kBAAkB,EAAE,CAAC,GAAG;AAC1B,CAAC,EACD;EACEF,SAAS,EAAE,aAAa;EACxBC,SAAS,EAAE,OAAO;EAClBC,kBAAkB,EAAE,CAAC,GAAG;AAC1B,CAAC,EACD;EACEF,SAAS,EAAE,aAAa;EACxBC,SAAS,EAAE,OAAO;EAClBC,kBAAkB,EAAE,CAAC,GAAG;AAC1B,CAAC,CACF;;AAED;AACA;;AAGO,MAAMC,mBAAmB,GAAAP,OAAA,CAAAO,mBAAA,GAAG;EACjCC,eAAe,EAAEL,gBAAgB;EACjCM,mBAAmB,EAAEV;AACvB,CAAC;AAEM,MAAMW,8BAA8B,GAAAV,OAAA,CAAAU,8BAAA,GAAG;EAC5CD,mBAAmB,EAAEV;AACvB,CAAC;AAEM,MAAMY,0BAA0B,GAAAX,OAAA,CAAAW,0BAAA,GAAG;EACxCC,cAAc,EAAE,IAAI;EACpBC,UAAU,EAAE;AACd,CAAC;AAEM,MAAMC,0BAA0B,GAAAd,OAAA,CAAAc,0BAAA,GAAG;EACxCN,eAAe,EAAEL,gBAAgB;EACjCY,yBAAyB,EAAE,IAAI;EAC/BC,UAAU,EAAE;AACd,CAAC;AAEM,MAAMC,8BAA8B,GAAAjB,OAAA,CAAAiB,8BAAA,GAAG;EAC5CT,eAAe,EAAEL;AACnB,CAAC;AAEM,MAAMe,6BAA6B,GAAAlB,OAAA,CAAAkB,6BAAA,GAAG;EAC3CN,cAAc,EAAE;AAClB,CAAC;AAEM,MAAMO,wBAAwB,GAAAnB,OAAA,CAAAmB,wBAAA,GAAG;EACtCN,UAAU,EAAE;AACd,CAAC;AAEM,MAAMO,wBAAwB,GAAApB,OAAA,CAAAoB,wBAAA,GAAG;EACtCJ,UAAU,EAAE;AACd,CAAC;AAEM,MAAMK,yCAAyC,GAAArB,OAAA,CAAAqB,yCAAA,GAAG;EACvDN,yBAAyB,EAAE;AAC7B,CAAC","ignoreList":[]}
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/helpers/fix-constants.js"],
4
+ "sourcesContent": ["// This could be formatted so that 035-prefix and SID contents would be better connected than by just an array index\nexport const BIB_F035_TO_SID = {\n f035Filters: [/^\\(FI-BTJ\\)/u, /^\\(FI-TATI\\)/u],\n fSIDFilters: ['FI-BTJ', 'tati']\n};\n\n// There is somewhere other implementations of this same standardPrefixes to alephInternalPrefixes normalization\nexport const REPLACE_PREFIXES = [\n {\n oldPrefix: 'FI-MELINDA',\n newPrefix: 'FIN01',\n prefixReplaceCodes: ['w']\n },\n {\n oldPrefix: 'FI-ASTERI-S',\n newPrefix: 'FIN10',\n prefixReplaceCodes: ['0']\n },\n {\n oldPrefix: 'FI-ASTERI-N',\n newPrefix: 'FIN11',\n prefixReplaceCodes: ['0']\n },\n {\n oldPrefix: 'FI-ASTERI-A',\n newPrefix: 'FIN12',\n prefixReplaceCodes: ['0']\n },\n {\n oldPrefix: 'FI-ASTERI-W',\n newPrefix: 'FIN13',\n prefixReplaceCodes: ['0']\n }\n];\n\n// If placed in config.js testing needs envs\n// BIB_FORMAT_SETTINGS is outdated, use other settings instead\n\n\nexport const BIB_FORMAT_SETTINGS = {\n replacePrefixes: REPLACE_PREFIXES,\n generateMissingSIDs: BIB_F035_TO_SID\n};\n\nexport const BIB_PREVALIDATION_FIX_SETTINGS = {\n generateMissingSIDs: BIB_F035_TO_SID\n};\n\nexport const BIB_POSTMERGE_FIX_SETTINGS = {\n handleTempUrns: true,\n stripF884s: true\n};\n\nexport const BIB_PREIMPORT_FIX_SETTINGS = {\n replacePrefixes: REPLACE_PREFIXES,\n stripMelindaTempSubfields: true,\n stripF984s: true\n};\n\nexport const AUTNAME_PREIMPORT_FIX_SETTINGS = {\n replacePrefixes: REPLACE_PREFIXES\n};\n\nexport const BIB_HANDLE_TEMP_URNS_SETTINGS = {\n handleTempUrns: true\n};\n\nexport const BIB_STRIP_F884S_SETTINGS = {\n stripF884s: true\n};\n\nexport const BIB_STRIP_F984S_SETTINGS = {\n stripF984s: true\n};\n\nexport const BIB_STRIP_MELINDA_TEMP_SUBFIELDS_SETTINGS = {\n stripMelindaTempSubfields: true\n};\n"],
5
+ "mappings": "AACO,aAAM,kBAAkB;AAAA,EAC7B,aAAa,CAAC,gBAAgB,eAAe;AAAA,EAC7C,aAAa,CAAC,UAAU,MAAM;AAChC;AAGO,aAAM,mBAAmB;AAAA,EAC9B;AAAA,IACE,WAAW;AAAA,IACX,WAAW;AAAA,IACX,oBAAoB,CAAC,GAAG;AAAA,EAC1B;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,WAAW;AAAA,IACX,oBAAoB,CAAC,GAAG;AAAA,EAC1B;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,WAAW;AAAA,IACX,oBAAoB,CAAC,GAAG;AAAA,EAC1B;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,WAAW;AAAA,IACX,oBAAoB,CAAC,GAAG;AAAA,EAC1B;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,WAAW;AAAA,IACX,oBAAoB,CAAC,GAAG;AAAA,EAC1B;AACF;AAMO,aAAM,sBAAsB;AAAA,EACjC,iBAAiB;AAAA,EACjB,qBAAqB;AACvB;AAEO,aAAM,iCAAiC;AAAA,EAC5C,qBAAqB;AACvB;AAEO,aAAM,6BAA6B;AAAA,EACxC,gBAAgB;AAAA,EAChB,YAAY;AACd;AAEO,aAAM,6BAA6B;AAAA,EACxC,iBAAiB;AAAA,EACjB,2BAA2B;AAAA,EAC3B,YAAY;AACd;AAEO,aAAM,iCAAiC;AAAA,EAC5C,iBAAiB;AACnB;AAEO,aAAM,gCAAgC;AAAA,EAC3C,gBAAgB;AAClB;AAEO,aAAM,2BAA2B;AAAA,EACtC,YAAY;AACd;AAEO,aAAM,2BAA2B;AAAA,EACtC,YAAY;AACd;AAEO,aAAM,4CAA4C;AAAA,EACvD,2BAA2B;AAC7B;",
6
+ "names": []
7
+ }
@@ -1,36 +1,18 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
6
- });
7
- exports.handleTempUrns = handleTempUrns;
8
- var _debug = _interopRequireDefault(require("debug"));
9
- //import {MarcRecord} from '@natlibfi/marc-record';
10
-
11
- const debug = (0, _debug.default)('@natlibfi/melinda-rest-api-commons:fixRecord:handleTempUrns');
12
- const debugData = debug.extend('data');
13
-
14
- // eslint-disable-next-line max-statements
15
- function handleTempUrns(newRecord, options) {
1
+ import createDebugLogger from "debug";
2
+ const debug = createDebugLogger("@natlibfi/melinda-rest-api-commons:fixRecord:handleTempUrns");
3
+ const debugData = debug.extend("data");
4
+ export function handleTempUrns(newRecord, options) {
16
5
  if (options !== true) {
17
6
  debug(`NOT running handleTempUrns fixer, no options`);
18
7
  return newRecord;
19
8
  }
20
9
  debug(`Running handleTempUrns fixer`);
21
10
  debugData(`Options for handleTempUrns: ${JSON.stringify(options)}`);
22
- const {
23
- f856sUrnsWithTempSubfields,
24
- f856sUrnsWithNoTempSubfields
25
- } = getf856sUrns(newRecord);
26
-
27
- // None of the URNs has temp subfields, we don't need to do anything
11
+ const { f856sUrnsWithTempSubfields, f856sUrnsWithNoTempSubfields } = getf856sUrns(newRecord);
28
12
  if (f856sUrnsWithTempSubfields.length < 1) {
29
13
  debug(`No Urns with temp subfield`);
30
14
  return newRecord;
31
15
  }
32
-
33
- // Do we have an existing URN with legal deposit subfields, if we have, we can remove the temp URN field(s)
34
16
  const existingLegalDepositURN = validateLD(f856sUrnsWithNoTempSubfields);
35
17
  debug(`existingLegalDepositURN: ${existingLegalDepositURN}`);
36
18
  if (existingLegalDepositURN) {
@@ -38,65 +20,38 @@ function handleTempUrns(newRecord, options) {
38
20
  newRecord.removeFields(f856sUrnsWithTempSubfields);
39
21
  return newRecord;
40
22
  }
41
-
42
- // We do not have an existing legalDepositURN, we should use the tempURN and remove the temp subfields from it
43
23
  if (!existingLegalDepositURN && f856sUrnsWithTempSubfields.length > 0) {
44
- //debug(`All Urns (${f856sUrn.length}) have a temp subfield`);
45
24
  debugData(`Original temp URNs: (${JSON.stringify(f856sUrnsWithTempSubfields)})`);
46
- const fixedFields = f856sUrnsWithTempSubfields.map(removeTempSubfield).filter(field => field);
25
+ const fixedFields = f856sUrnsWithTempSubfields.map(removeTempSubfield).filter((field) => field);
47
26
  debug(`We removed temp subfields: (${JSON.stringify(fixedFields)})`);
48
27
  newRecord.removeFields(f856sUrnsWithTempSubfields);
49
28
  newRecord.insertFields(fixedFields);
50
29
  return newRecord;
51
30
  }
52
- // Should we check that the non-temp URN has 2nd ind '0' - meaning that the URN handles the actual resource itself?
53
31
  }
54
32
  function getf856sUrns(newRecord) {
55
- const hasURN = f => f.tag === '856' && f.subfields.some(({
56
- code,
57
- value
58
- }) => code === 'u' && /urn.fi/u.test(value));
59
- const hasTempSubfield = f => f.subfields.some(({
60
- code,
61
- value
62
- }) => code === '9' && /^MELINDA<TEMP>$/u.test(value));
63
- const hasNoTempSubfield = f => !f.subfields.some(({
64
- code,
65
- value
66
- }) => code === '9' && /^MELINDA<TEMP>$/u.test(value));
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));
67
36
  const f856sUrn = newRecord.fields.filter(hasURN);
68
37
  const f856sUrnsWithTempSubfields = f856sUrn.filter(hasTempSubfield);
69
38
  const f856sUrnsWithNoTempSubfields = f856sUrn.filter(hasNoTempSubfield);
70
39
  debugData(`URN f856s: ${JSON.stringify(f856sUrn)}`);
71
40
  debugData(`URN f856s with temp subfield: ${JSON.stringify(f856sUrnsWithTempSubfields)}`);
72
- return {
73
- f856sUrn,
74
- f856sUrnsWithTempSubfields,
75
- f856sUrnsWithNoTempSubfields
76
- };
41
+ return { f856sUrn, f856sUrnsWithTempSubfields, f856sUrnsWithNoTempSubfields };
77
42
  }
78
-
79
- // ---- LD-functions below are same as in https://github.com/NatLibFi/marc-record-validators-melinda/blob/feature-updates-to-urn/src/urn.js
80
- // we propably should develop the urn/legaldeposit -validator to use also here
81
-
82
43
  function validateLD(f856sUrn) {
83
44
  debug(`Validating the existence of legal deposit subfields`);
84
- const LD_SUBFIELDS_OLD = [{
85
- code: 'z',
86
- value: 'Käytettävissä vapaakappalekirjastoissa'
87
- }, {
88
- code: '5',
89
- value: 'FI-Vapaa'
90
- }];
91
- const LD_SUBFIELDS_NEW = [{
92
- code: 'z',
93
- value: 'Käytettävissä vapaakappaletyöasemilla'
94
- }, {
95
- code: '5',
96
- value: 'FI-Vapaa'
97
- }];
98
- const f856sUrnWithOldLdSubfields = f856sUrn.filter(field => fieldHasLDSubfields(field, LD_SUBFIELDS_OLD));
99
- const f856sUrnWithNewLdSubfields = f856sUrn.filter(field => fieldHasLDSubfields(field, LD_SUBFIELDS_NEW));
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));
100
55
  const f856sUrnWithLdSubfields = [...f856sUrnWithNewLdSubfields, ...f856sUrnWithOldLdSubfields];
101
56
  if (f856sUrnWithLdSubfields.length > 0) {
102
57
  debug(`Record has ${f856sUrnWithLdSubfields.length} URN fields with all necessary legal deposit subfields`);
@@ -106,17 +61,13 @@ function validateLD(f856sUrn) {
106
61
  return false;
107
62
  }
108
63
  function fieldHasLDSubfields(field, ldSubfields) {
109
- if (ldSubfields.every(ldsf => field.subfields.some(sf => sf.code === ldsf.code && sf.value === ldsf.value))) {
64
+ if (ldSubfields.every((ldsf) => field.subfields.some((sf) => sf.code === ldsf.code && sf.value === ldsf.value))) {
110
65
  return true;
111
66
  }
112
67
  }
113
68
  function removeTempSubfield(field) {
114
- // Handle non-numeric fields, and fields with a numeric tag of 010 and greater
115
- // Aleph's FMT as a controlfield might be a problem
116
69
  if (!isNaN(field.tag) && parseInt(field.tag, 10) >= 10) {
117
- const filteredSubfields = field.subfields.filter(sf => sf.code !== '9' && !/^MELINDA<TEMP>$/u.test(sf.value));
118
-
119
- // Remove whole field if there are no subfields left
70
+ const filteredSubfields = field.subfields.filter((sf) => sf.code !== "9" && !/^MELINDA<TEMP>$/u.test(sf.value));
120
71
  if (filteredSubfields.length < 1) {
121
72
  return false;
122
73
  }
@@ -127,7 +78,6 @@ function removeTempSubfield(field) {
127
78
  subfields: filteredSubfields
128
79
  };
129
80
  }
130
- // return controlFields as is
131
81
  return field;
132
82
  }
133
- //# sourceMappingURL=fix-handle-tempurns.js.map
83
+ //# sourceMappingURL=fix-handle-tempurns.js.map
@@ -1 +1,7 @@
1
- {"version":3,"file":"fix-handle-tempurns.js","names":["_debug","_interopRequireDefault","require","debug","createDebugLogger","debugData","extend","handleTempUrns","newRecord","options","JSON","stringify","f856sUrnsWithTempSubfields","f856sUrnsWithNoTempSubfields","getf856sUrns","length","existingLegalDepositURN","validateLD","removeFields","fixedFields","map","removeTempSubfield","filter","field","insertFields","hasURN","f","tag","subfields","some","code","value","test","hasTempSubfield","hasNoTempSubfield","f856sUrn","fields","LD_SUBFIELDS_OLD","LD_SUBFIELDS_NEW","f856sUrnWithOldLdSubfields","fieldHasLDSubfields","f856sUrnWithNewLdSubfields","f856sUrnWithLdSubfields","ldSubfields","every","ldsf","sf","isNaN","parseInt","filteredSubfields","ind1","ind2"],"sources":["../../src/helpers/fix-handle-tempurns.js"],"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\n// eslint-disable-next-line max-statements\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äytettävissä vapaakappalekirjastoissa'},\n {code: '5', value: 'FI-Vapaa'}\n ];\n\n const LD_SUBFIELDS_NEW = [\n {code: 'z', value: 'Käytettävissä vapaakappaletyöasemilla'},\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"],"mappings":"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","ignoreList":[]}
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\n// eslint-disable-next-line max-statements\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
+ }