@natlibfi/marc-record-merge 7.0.10-alpha.1 → 8.0.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.
@@ -11,12 +11,12 @@ jobs:
11
11
 
12
12
  strategy:
13
13
  matrix:
14
- node-version: [18.x, 20.x, 22.x, 23.x]
14
+ node-version: [22.x, 23.x, 24.x]
15
15
  # See supported Node.js release schedule at https://nodejs.org/en/about/releases/
16
16
 
17
17
  steps:
18
18
  - name: Checkout the code
19
- uses: actions/checkout@v4
19
+ uses: actions/checkout@v5
20
20
  - name: Use Node.js ${{ matrix.node-version }}
21
21
  uses: actions/setup-node@v4
22
22
  with:
@@ -48,7 +48,7 @@ jobs:
48
48
  if: contains(github.ref, 'refs/tags/')
49
49
 
50
50
  steps:
51
- - uses: actions/checkout@v4
51
+ - uses: actions/checkout@v5
52
52
  # Setup .npmrc file to publish to npm
53
53
  - uses: actions/setup-node@v4
54
54
  with:
package/dist/index.js CHANGED
@@ -1,70 +1,32 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- Object.defineProperty(exports, "Reducers", {
7
- enumerable: true,
8
- get: function () {
9
- return _reducers.default;
10
- }
11
- });
12
- exports.default = void 0;
13
- var _reducers = _interopRequireDefault(require("./reducers"));
14
- var _debug = _interopRequireDefault(require("debug"));
15
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
16
- const debug = (0, _debug.default)('@natlibfi/melinda-marc-record-merge:index');
17
- const debugData = debug.extend('data');
18
- // export default ({base, source, reducers}) => reducers.reduce((base, reducer) => reducer(base, source), base);
19
- // NV: Modified the reducer loop so, that not only base, but also is carried back.
20
- // However, we try to be backward-compatible: normally after the reducers, only base is returned.
21
- var _default = ({
22
- base,
23
- source,
24
- reducers
25
- }) => {
26
- const combo = {
27
- base,
28
- source
29
- };
30
- const resultCombo = reducers.reduce((combo, reducer) => {
31
- const returnCombo = singleRound(reducer, combo.base, combo.source);
32
- //debugData(`returnCombo after current reducer: ${JSON.stringify(returnCombo)}`);
1
+ import Reducers from "./reducers/index.js";
2
+ import createDebugLogger from "debug";
3
+ const debug = createDebugLogger("@natlibfi/melinda-marc-record-merge:index");
4
+ const debugData = debug.extend("data");
5
+ export { Reducers };
6
+ export default ({ base, source, reducers }) => {
7
+ const combo = { base, source };
8
+ const resultCombo = reducers.reduce((combo2, reducer) => {
9
+ const returnCombo = singleRound(reducer, combo2.base, combo2.source);
33
10
  return returnCombo;
34
11
  }, combo);
35
12
  debugData(`ResultCombo after reducers: ${JSON.stringify(resultCombo)}`);
36
-
37
- // Hack to make my melinda-marc-record-merge-reducers single tests that expect both
38
- // base and source to return them both:
39
13
  if (reducers.length === 1 && resultCombo.base && resultCombo.source) {
40
- debug('Single reducer, returning resultCombo');
14
+ debug("Single reducer, returning resultCombo");
41
15
  debugData(JSON.stringify(resultCombo));
42
16
  return resultCombo;
43
17
  }
44
- // All other tests return just base... Backward (compability) it is!
45
- debug('Multiple reducers, returning just base');
18
+ debug("Multiple reducers, returning just base");
46
19
  debugData(JSON.stringify(resultCombo.base));
47
20
  return resultCombo.base;
48
- function singleRound(reducer, base, source) {
49
- //debug(`SINGLE ROUND INPUT (base, source)`);
50
- //debugData(base);
51
- //debugData(base);
52
- const reducerResult = reducer(base, source);
53
- //debug(`reducerResult:`);
54
- //debugData(reducerResult);
55
- if (reducerResult.base !== undefined && reducerResult.source !== undefined) {
56
- debug('NEW STYLE REDUCER RESULT v2');
57
- const combo = reducerResult;
58
- //debugData(combo);
59
- return combo;
21
+ function singleRound(reducer, base2, source2) {
22
+ const reducerResult = reducer(base2, source2);
23
+ if (reducerResult.base !== void 0 && reducerResult.source !== void 0) {
24
+ debug("NEW STYLE REDUCER RESULT v2");
25
+ const combo2 = reducerResult;
26
+ return combo2;
60
27
  }
61
- debug('OLD SCHOOL REDUCER RESULT v2');
62
- //debugData({base: reducerResult, source});
63
- return {
64
- base: reducerResult,
65
- source
66
- };
28
+ debug("OLD SCHOOL REDUCER RESULT v2");
29
+ return { base: reducerResult, source: source2 };
67
30
  }
68
31
  };
69
- exports.default = _default;
70
- //# sourceMappingURL=index.js.map
32
+ //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1,7 @@
1
- {"version":3,"file":"index.js","names":["_reducers","_interopRequireDefault","require","_debug","e","__esModule","default","debug","createDebugLogger","debugData","extend","_default","base","source","reducers","combo","resultCombo","reduce","reducer","returnCombo","singleRound","JSON","stringify","length","reducerResult","undefined","exports"],"sources":["../src/index.js"],"sourcesContent":["import Reducers from './reducers';\nimport createDebugLogger from 'debug';\n\nconst debug = createDebugLogger('@natlibfi/melinda-marc-record-merge:index');\nconst debugData = debug.extend('data');\n\nexport {Reducers};\n// export default ({base, source, reducers}) => reducers.reduce((base, reducer) => reducer(base, source), base);\n\n// NV: Modified the reducer loop so, that not only base, but also is carried back.\n// However, we try to be backward-compatible: normally after the reducers, only base is returned.\n\nexport default ({base, source, reducers}) => {\n\n const combo = {base, source};\n const resultCombo = reducers.reduce((combo, reducer) => {\n const returnCombo = singleRound(reducer, combo.base, combo.source);\n //debugData(`returnCombo after current reducer: ${JSON.stringify(returnCombo)}`);\n return returnCombo;\n }, combo);\n\n debugData(`ResultCombo after reducers: ${JSON.stringify(resultCombo)}`);\n\n // Hack to make my melinda-marc-record-merge-reducers single tests that expect both\n // base and source to return them both:\n if (reducers.length === 1 && resultCombo.base && resultCombo.source) {\n debug('Single reducer, returning resultCombo');\n debugData(JSON.stringify(resultCombo));\n\n return resultCombo;\n }\n // All other tests return just base... Backward (compability) it is!\n debug('Multiple reducers, returning just base');\n debugData(JSON.stringify(resultCombo.base));\n return resultCombo.base;\n\n function singleRound(reducer, base, source) {\n //debug(`SINGLE ROUND INPUT (base, source)`);\n //debugData(base);\n //debugData(base);\n const reducerResult = reducer(base, source);\n //debug(`reducerResult:`);\n //debugData(reducerResult);\n if (reducerResult.base !== undefined && reducerResult.source !== undefined) {\n debug('NEW STYLE REDUCER RESULT v2');\n const combo = reducerResult;\n //debugData(combo);\n return combo;\n }\n debug('OLD SCHOOL REDUCER RESULT v2');\n //debugData({base: reducerResult, source});\n return {base: reducerResult, source};\n }\n};\n"],"mappings":";;;;;;;;;;;;AAAA,IAAAA,SAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,MAAA,GAAAF,sBAAA,CAAAC,OAAA;AAAsC,SAAAD,uBAAAG,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAEtC,MAAMG,KAAK,GAAG,IAAAC,cAAiB,EAAC,2CAA2C,CAAC;AAC5E,MAAMC,SAAS,GAAGF,KAAK,CAACG,MAAM,CAAC,MAAM,CAAC;AAGtC;AAEA;AACA;AAAA,IAAAC,QAAA,GAEeA,CAAC;EAACC,IAAI;EAAEC,MAAM;EAAEC;AAAQ,CAAC,KAAK;EAE3C,MAAMC,KAAK,GAAG;IAACH,IAAI;IAAEC;EAAM,CAAC;EAC5B,MAAMG,WAAW,GAAGF,QAAQ,CAACG,MAAM,CAAC,CAACF,KAAK,EAAEG,OAAO,KAAK;IACtD,MAAMC,WAAW,GAAGC,WAAW,CAACF,OAAO,EAAEH,KAAK,CAACH,IAAI,EAAEG,KAAK,CAACF,MAAM,CAAC;IAClE;IACA,OAAOM,WAAW;EACpB,CAAC,EAAEJ,KAAK,CAAC;EAETN,SAAS,CAAC,+BAA+BY,IAAI,CAACC,SAAS,CAACN,WAAW,CAAC,EAAE,CAAC;;EAEvE;EACA;EACA,IAAIF,QAAQ,CAACS,MAAM,KAAK,CAAC,IAAIP,WAAW,CAACJ,IAAI,IAAII,WAAW,CAACH,MAAM,EAAE;IACnEN,KAAK,CAAC,uCAAuC,CAAC;IAC9CE,SAAS,CAACY,IAAI,CAACC,SAAS,CAACN,WAAW,CAAC,CAAC;IAEtC,OAAOA,WAAW;EACpB;EACA;EACAT,KAAK,CAAC,wCAAwC,CAAC;EAC/CE,SAAS,CAACY,IAAI,CAACC,SAAS,CAACN,WAAW,CAACJ,IAAI,CAAC,CAAC;EAC3C,OAAOI,WAAW,CAACJ,IAAI;EAEvB,SAASQ,WAAWA,CAACF,OAAO,EAAEN,IAAI,EAAEC,MAAM,EAAE;IAC1C;IACA;IACA;IACA,MAAMW,aAAa,GAAGN,OAAO,CAACN,IAAI,EAAEC,MAAM,CAAC;IAC3C;IACA;IACA,IAAIW,aAAa,CAACZ,IAAI,KAAKa,SAAS,IAAID,aAAa,CAACX,MAAM,KAAKY,SAAS,EAAE;MAC1ElB,KAAK,CAAC,6BAA6B,CAAC;MACpC,MAAMQ,KAAK,GAAGS,aAAa;MAC3B;MACA,OAAOT,KAAK;IACd;IACAR,KAAK,CAAC,8BAA8B,CAAC;IACrC;IACA,OAAO;MAACK,IAAI,EAAEY,aAAa;MAAEX;IAAM,CAAC;EACtC;AACF,CAAC;AAAAa,OAAA,CAAApB,OAAA,GAAAK,QAAA","ignoreList":[]}
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/index.js"],
4
+ "sourcesContent": ["import Reducers from './reducers/index.js';\nimport createDebugLogger from 'debug';\n\nconst debug = createDebugLogger('@natlibfi/melinda-marc-record-merge:index');\nconst debugData = debug.extend('data');\n\nexport {Reducers};\n// export default ({base, source, reducers}) => reducers.reduce((base, reducer) => reducer(base, source), base);\n\n// NV: Modified the reducer loop so, that not only base, but also is carried back.\n// However, we try to be backward-compatible: normally after the reducers, only base is returned.\n\nexport default ({base, source, reducers}) => {\n\n const combo = {base, source};\n const resultCombo = reducers.reduce((combo, reducer) => {\n const returnCombo = singleRound(reducer, combo.base, combo.source);\n //debugData(`returnCombo after current reducer: ${JSON.stringify(returnCombo)}`);\n return returnCombo;\n }, combo);\n\n debugData(`ResultCombo after reducers: ${JSON.stringify(resultCombo)}`);\n\n // Hack to make my melinda-marc-record-merge-reducers single tests that expect both\n // base and source to return them both:\n if (reducers.length === 1 && resultCombo.base && resultCombo.source) {\n debug('Single reducer, returning resultCombo');\n debugData(JSON.stringify(resultCombo));\n\n return resultCombo;\n }\n // All other tests return just base... Backward (compability) it is!\n debug('Multiple reducers, returning just base');\n debugData(JSON.stringify(resultCombo.base));\n return resultCombo.base;\n\n function singleRound(reducer, base, source) {\n //debug(`SINGLE ROUND INPUT (base, source)`);\n //debugData(base);\n //debugData(base);\n const reducerResult = reducer(base, source);\n //debug(`reducerResult:`);\n //debugData(reducerResult);\n if (reducerResult.base !== undefined && reducerResult.source !== undefined) {\n debug('NEW STYLE REDUCER RESULT v2');\n const combo = reducerResult;\n //debugData(combo);\n return combo;\n }\n debug('OLD SCHOOL REDUCER RESULT v2');\n //debugData({base: reducerResult, source});\n return {base: reducerResult, source};\n }\n};\n"],
5
+ "mappings": "AAAA,OAAO,cAAc;AACrB,OAAO,uBAAuB;AAE9B,MAAM,QAAQ,kBAAkB,2CAA2C;AAC3E,MAAM,YAAY,MAAM,OAAO,MAAM;AAErC,SAAQ;AAMR,eAAe,CAAC,EAAC,MAAM,QAAQ,SAAQ,MAAM;AAE3C,QAAM,QAAQ,EAAC,MAAM,OAAM;AAC3B,QAAM,cAAc,SAAS,OAAO,CAACA,QAAO,YAAY;AACtD,UAAM,cAAc,YAAY,SAASA,OAAM,MAAMA,OAAM,MAAM;AAEjE,WAAO;AAAA,EACT,GAAG,KAAK;AAER,YAAU,+BAA+B,KAAK,UAAU,WAAW,CAAC,EAAE;AAItE,MAAI,SAAS,WAAW,KAAK,YAAY,QAAQ,YAAY,QAAQ;AACnE,UAAM,uCAAuC;AAC7C,cAAU,KAAK,UAAU,WAAW,CAAC;AAErC,WAAO;AAAA,EACT;AAEA,QAAM,wCAAwC;AAC9C,YAAU,KAAK,UAAU,YAAY,IAAI,CAAC;AAC1C,SAAO,YAAY;AAEnB,WAAS,YAAY,SAASC,OAAMC,SAAQ;AAI1C,UAAM,gBAAgB,QAAQD,OAAMC,OAAM;AAG1C,QAAI,cAAc,SAAS,UAAa,cAAc,WAAW,QAAW;AAC1E,YAAM,6BAA6B;AACnC,YAAMF,SAAQ;AAEd,aAAOA;AAAA,IACT;AACA,UAAM,8BAA8B;AAEpC,WAAO,EAAC,MAAM,eAAe,QAAAE,QAAM;AAAA,EACrC;AACF;",
6
+ "names": ["combo", "base", "source"]
7
+ }
@@ -1,15 +1,6 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
- var _marcRecord = require("@natlibfi/marc-record");
8
- var _debug = _interopRequireDefault(require("debug"));
9
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
- /* eslint-disable max-statements */
11
- /* eslint-disable no-unused-vars */
12
- var _default = ({
1
+ import { MarcRecord } from "@natlibfi/marc-record";
2
+ import createDebugLogger from "debug";
3
+ export default ({
13
4
  tagPattern,
14
5
  compareTagsOnly = false,
15
6
  compareWithoutTag = false,
@@ -20,43 +11,28 @@ var _default = ({
20
11
  excludeSubfields = [],
21
12
  dropSubfields = [],
22
13
  copyUnless = [],
23
- baseValidators = {
24
- subfieldValues: false
25
- },
26
- sourceValidators = {
27
- subfieldValues: false
28
- },
14
+ baseValidators = { subfieldValues: false },
15
+ sourceValidators = { subfieldValues: false },
29
16
  swapTag = [],
30
17
  swapSubfieldCode = [],
31
18
  doNotCopyIfFieldPresent = false
32
19
  }) => (base, source) => {
33
- const debug = (0, _debug.default)('@natlibfi/marc-record-merge:copy');
34
- const debugData = debug.extend('data');
35
- const debugOptions = (0, _debug.default)('@natlibfi/marc-record-merge:compare-options');
36
- const debugCompare = (0, _debug.default)('@natlibfi/marc-record-merge:compare');
20
+ const debug = createDebugLogger("@natlibfi/marc-record-merge:copy");
21
+ const debugData = debug.extend("data");
22
+ const debugOptions = createDebugLogger("@natlibfi/marc-record-merge:compare-options");
23
+ const debugCompare = createDebugLogger("@natlibfi/marc-record-merge:compare");
37
24
  debugData(`base: ${JSON.stringify(base)}`);
38
25
  debugData(`source: ${JSON.stringify(source)}`);
39
- const {
40
- baseRecord,
41
- sourceRecord
42
- } = getRecordsFromParameters(base, source, baseValidators, sourceValidators);
43
- function getRecordsFromParameters(base, source, baseValidators, sourceValidators) {
44
- // records if we got an object ({base, source}) as a parameter
45
- if (source === undefined && base.base !== undefined && base.source !== undefined) {
46
- const baseRecord = new _marcRecord.MarcRecord(base.base, baseValidators);
47
- const sourceRecord = new _marcRecord.MarcRecord(base.source, sourceValidators);
48
- return {
49
- baseRecord,
50
- sourceRecord
51
- };
52
- }
53
- // records if we got an non-object (base, source) as a parameter
54
- const baseRecord = new _marcRecord.MarcRecord(base, baseValidators);
55
- const sourceRecord = new _marcRecord.MarcRecord(source, sourceValidators);
56
- return {
57
- baseRecord,
58
- sourceRecord
59
- };
26
+ const { baseRecord, sourceRecord } = getRecordsFromParameters(base, source, baseValidators, sourceValidators);
27
+ function getRecordsFromParameters(base2, source2, baseValidators2, sourceValidators2) {
28
+ if (source2 === void 0 && base2.base !== void 0 && base2.source !== void 0) {
29
+ const baseRecord3 = new MarcRecord(base2.base, baseValidators2);
30
+ const sourceRecord3 = new MarcRecord(base2.source, sourceValidators2);
31
+ return { baseRecord: baseRecord3, sourceRecord: sourceRecord3 };
32
+ }
33
+ const baseRecord2 = new MarcRecord(base2, baseValidators2);
34
+ const sourceRecord2 = new MarcRecord(source2, sourceValidators2);
35
+ return { baseRecord: baseRecord2, sourceRecord: sourceRecord2 };
60
36
  }
61
37
  const ignoreInd1 = compareWithoutIndicators || compareWithoutIndicator1;
62
38
  const ignoreInd2 = compareWithoutIndicators || compareWithoutIndicator2;
@@ -77,134 +53,105 @@ var _default = ({
77
53
  debug(`FFS: ${compareWithoutIndicator1}, ${compareWithoutIndicators}, ${ignoreInd1}`);
78
54
  debug(`Base fields: `, baseFields);
79
55
  debug(`Source fields: `, sourceFields);
80
-
81
- // Logic steps
82
- const baseCompareFields = baseFields.map(baseField => createCompareField(baseField));
56
+ const baseCompareFields = baseFields.map((baseField) => createCompareField(baseField));
83
57
  const compareResultFields = compareFields(sourceFields, baseCompareFields);
84
58
  const droppedUnwantedSubfield = checkDropSubfields(compareResultFields);
85
59
  const droppedUnwantedFields = checkCopyUnlessFields(droppedUnwantedSubfield);
86
60
  const swappedSubfields = checkSwapSubfieldCodes(droppedUnwantedFields);
87
61
  const swappedTags = checkSwapTag(swappedSubfields);
88
- const uniqueFields = [...new Set(swappedTags.map(field => JSON.stringify(field)))].map(field => JSON.parse(field));
89
- debug('Fields to be copied');
62
+ const uniqueFields = [...new Set(swappedTags.map((field) => JSON.stringify(field)))].map((field) => JSON.parse(field));
63
+ debug("Fields to be copied");
90
64
  debug(JSON.stringify(uniqueFields));
91
-
92
- // Add fields to base;
93
- uniqueFields.forEach(field => baseRecord.insertField(field));
65
+ uniqueFields.forEach((field) => baseRecord.insertField(field));
94
66
  debugData(`baseRecord before return: ${JSON.stringify(baseRecord)}`);
95
- //return baseRecord;
96
67
  return baseRecord.toObject();
97
- function compareFields(sourceFields, baseCompareFields, uniqFields = []) {
98
- const [sourceField, ...rest] = sourceFields;
99
- if (sourceField === undefined) {
68
+ function compareFields(sourceFields2, baseCompareFields2, uniqFields = []) {
69
+ const [sourceField, ...rest] = sourceFields2;
70
+ if (sourceField === void 0) {
100
71
  return uniqFields;
101
72
  }
102
- if (baseCompareFields.length === 0) {
103
- return compareFields(rest, baseCompareFields, [...uniqFields, sourceField]);
73
+ if (baseCompareFields2.length === 0) {
74
+ return compareFields(rest, baseCompareFields2, [...uniqFields, sourceField]);
104
75
  }
105
-
106
- // Source and base are also compared for identicalness
107
- // Non-identical fields are copied from source to base as duplicates
108
76
  const sourceCompareField = createCompareField(sourceField);
109
- const unique = checkCompareFields(baseCompareFields, sourceCompareField);
110
- debugCompare(`${JSON.stringify(sourceField)} ${unique ? 'is UNIQUE' : 'not UNIQUE'}`);
77
+ const unique = checkCompareFields(baseCompareFields2, sourceCompareField);
78
+ debugCompare(`${JSON.stringify(sourceField)} ${unique ? "is UNIQUE" : "not UNIQUE"}`);
111
79
  if (unique) {
112
- return compareFields(rest, baseCompareFields, [...uniqFields, sourceField]);
113
- }
114
- return compareFields(rest, baseCompareFields, uniqFields);
115
- function checkCompareFields(baseCompareFields, sourceCompareField) {
116
- let unique = true; // eslint-disable-line functional/no-let
117
-
118
- baseCompareFields.forEach(baseCompareField => {
119
- debugCompare(`Comparing ${JSON.stringify(sourceCompareField)} to ${JSON.stringify(baseCompareField)}}`);
120
- if (sourceCompareField.value !== baseCompareField.value) {
121
- debugCompare(`Value is different ${sourceCompareField.value} !== ${baseCompareField.value}`);
80
+ return compareFields(rest, baseCompareFields2, [...uniqFields, sourceField]);
81
+ }
82
+ return compareFields(rest, baseCompareFields2, uniqFields);
83
+ function checkCompareFields(baseCompareFields3, sourceCompareField2) {
84
+ let unique2 = true;
85
+ baseCompareFields3.forEach((baseCompareField) => {
86
+ debugCompare(`Comparing ${JSON.stringify(sourceCompareField2)} to ${JSON.stringify(baseCompareField)}}`);
87
+ if (sourceCompareField2.value !== baseCompareField.value) {
88
+ debugCompare(`Value is different ${sourceCompareField2.value} !== ${baseCompareField.value}`);
122
89
  return;
123
90
  }
124
- if (sourceCompareField.ind1 !== baseCompareField.ind1) {
125
- debugCompare(`Ind1 is different ${sourceCompareField.ind1} !== ${baseCompareField.ind1}`);
91
+ if (sourceCompareField2.ind1 !== baseCompareField.ind1) {
92
+ debugCompare(`Ind1 is different ${sourceCompareField2.ind1} !== ${baseCompareField.ind1}`);
126
93
  return;
127
94
  }
128
- if (sourceCompareField.ind2 !== baseCompareField.ind2) {
129
- debugCompare(`Ind2 is different ${sourceCompareField.ind2} !== ${baseCompareField.ind2}`);
95
+ if (sourceCompareField2.ind2 !== baseCompareField.ind2) {
96
+ debugCompare(`Ind2 is different ${sourceCompareField2.ind2} !== ${baseCompareField.ind2}`);
130
97
  return;
131
98
  }
132
- if ('subfields' in sourceCompareField) {
133
- const allFound = checkSubfields(sourceCompareField.subfields, baseCompareField.subfields);
99
+ if ("subfields" in sourceCompareField2) {
100
+ const allFound = checkSubfields(sourceCompareField2.subfields, baseCompareField.subfields);
134
101
  debugCompare(`Subfields are different ${!allFound}`);
135
102
  if (!allFound) {
136
103
  return;
137
104
  }
138
- unique = false;
105
+ unique2 = false;
139
106
  return;
140
107
  }
141
- unique = false;
108
+ unique2 = false;
142
109
  return;
143
110
  });
144
- return unique;
111
+ return unique2;
145
112
  }
146
113
  function checkSubfields(sourceSubfields, baseSubfields) {
147
- const foundSubs = sourceSubfields.filter(sSub => baseSubfields.some(bSub => sSub.code === bSub.code && sSub.value === bSub.value));
114
+ const foundSubs = sourceSubfields.filter((sSub) => baseSubfields.some((bSub) => sSub.code === bSub.code && sSub.value === bSub.value));
148
115
  if (subfieldsMustBeIdentical) {
149
116
  return foundSubs.length === sourceSubfields.length && foundSubs.length === baseSubfields.length;
150
117
  }
151
118
  return foundSubs.length === sourceSubfields.length;
152
119
  }
153
120
  }
154
-
155
- // compare objects have only fields that matter in comparison
156
121
  function createCompareField(field) {
157
122
  if (compareTagsOnly) {
158
- return {
159
- tag: field.tag
160
- };
123
+ return { tag: field.tag };
161
124
  }
162
- if ('value' in field) {
163
- return {
164
- tag: field.tag,
165
- value: field.value
166
- };
125
+ if ("value" in field) {
126
+ return { tag: field.tag, value: field.value };
167
127
  }
168
128
  const [filteredField] = checkDropSubfields([field]);
169
- const [foundRule] = swapTag.filter(rule => new RegExp(rule.from, 'u').test(field.tag));
170
- const replacementTag = foundRule ? foundRule.to : undefined;
171
- const params = [{
172
- name: 'tag',
173
- value: compareWithoutTag ? replacementTag : field.tag
174
- }, {
175
- name: 'ind1',
176
- value: ignoreInd1 ? undefined : field.ind1
177
- }, {
178
- name: 'ind2',
179
- value: ignoreInd2 ? undefined : field.ind2
180
- }, {
181
- name: 'subfields',
182
- value: createCompareSubfields(filteredField.subfields)
183
- }].map(param => [param.name, param.value]);
129
+ const [foundRule] = swapTag.filter((rule) => new RegExp(rule.from, "u").test(field.tag));
130
+ const replacementTag = foundRule ? foundRule.to : void 0;
131
+ const params = [
132
+ { name: "tag", value: compareWithoutTag ? replacementTag : field.tag },
133
+ { name: "ind1", value: ignoreInd1 ? void 0 : field.ind1 },
134
+ { name: "ind2", value: ignoreInd2 ? void 0 : field.ind2 },
135
+ { name: "subfields", value: createCompareSubfields(filteredField.subfields) }
136
+ ].map((param) => [param.name, param.value]);
184
137
  return Object.fromEntries(params);
185
138
  function createCompareSubfields(subfields) {
186
- const nonExcludedSubfields = subfields.filter(sub => !excludeSubfields.some(code => code === sub.code));
187
- const normalizedSubfields = nonExcludedSubfields.map(sub => ({
188
- code: sub.code,
189
- value: normalizeSubfieldValue(sub.value)
190
- }));
139
+ const nonExcludedSubfields = subfields.filter((sub) => !excludeSubfields.some((code) => code === sub.code));
140
+ const normalizedSubfields = nonExcludedSubfields.map((sub) => ({ code: sub.code, value: normalizeSubfieldValue(sub.value) }));
191
141
  return normalizedSubfields;
192
142
  function normalizeSubfieldValue(value) {
193
- return value.toLowerCase().replace(/\s+/ug, '');
143
+ return value.toLowerCase().replace(/\s+/ug, "");
194
144
  }
195
145
  }
196
146
  }
197
147
  function checkSwapTag(fields) {
198
148
  if (swapTag.length > 0) {
199
- return fields.map(field => ({
200
- ...field,
201
- tag: swapTagsFunc(field.tag)
202
- }));
149
+ return fields.map((field) => ({ ...field, tag: swapTagsFunc(field.tag) }));
203
150
  }
204
151
  return fields;
205
152
  function swapTagsFunc(tag) {
206
- const [foundRule] = swapTag.filter(rule => new RegExp(rule.from, 'u').test(tag));
207
- if (foundRule === undefined) {
153
+ const [foundRule] = swapTag.filter((rule) => new RegExp(rule.from, "u").test(tag));
154
+ if (foundRule === void 0) {
208
155
  return tag;
209
156
  }
210
157
  return foundRule.to;
@@ -212,49 +159,35 @@ var _default = ({
212
159
  }
213
160
  function checkSwapSubfieldCodes(fields) {
214
161
  if (swapSubfieldCode.length > 0) {
215
- return fields.map(field => ({
216
- ...field,
217
- subfields: swapSubfieldCodesFunc(field.subfields)
218
- }));
162
+ return fields.map((field) => ({ ...field, subfields: swapSubfieldCodesFunc(field.subfields) }));
219
163
  }
220
164
  return fields;
221
165
  function swapSubfieldCodesFunc(subfields) {
222
- return subfields.map(sub => {
223
- const [foundRule] = swapSubfieldCode.filter(rule => rule.from === sub.code);
224
- if (foundRule === undefined) {
166
+ return subfields.map((sub) => {
167
+ const [foundRule] = swapSubfieldCode.filter((rule) => rule.from === sub.code);
168
+ if (foundRule === void 0) {
225
169
  return sub;
226
170
  }
227
- return {
228
- code: foundRule.to,
229
- value: sub.value
230
- };
171
+ return { code: foundRule.to, value: sub.value };
231
172
  });
232
173
  }
233
174
  }
234
175
  function checkDropSubfields(fields) {
235
176
  if (dropSubfields.length > 0) {
236
- return fields.map(field => ({
237
- ...field,
238
- subfields: dropSubfieldsFunc(field.subfields)
239
- })).filter(field => field.subfields.length > 0);
177
+ return fields.map((field) => ({ ...field, subfields: dropSubfieldsFunc(field.subfields) })).filter((field) => field.subfields.length > 0);
240
178
  }
241
179
  return fields;
242
180
  function dropSubfieldsFunc(subfields) {
243
- return subfields.filter(sub => {
244
- // eslint-disable-line
245
- return !dropSubfields.some(({
246
- code,
247
- value = false,
248
- condition = false
249
- }) => {
181
+ return subfields.filter((sub) => {
182
+ return !dropSubfields.some(({ code, value = false, condition = false }) => {
250
183
  if (code !== sub.code) {
251
184
  return false;
252
185
  }
253
186
  if (!condition && value) {
254
187
  return value === sub.value;
255
188
  }
256
- if (condition === 'unless' && value) {
257
- return !new RegExp(value, 'u').test(sub.value);
189
+ if (condition === "unless" && value) {
190
+ return !new RegExp(value, "u").test(sub.value);
258
191
  }
259
192
  return true;
260
193
  });
@@ -263,12 +196,9 @@ var _default = ({
263
196
  }
264
197
  function checkCopyUnlessFields(fields) {
265
198
  if (copyUnless.length > 0) {
266
- return fields.filter(({
267
- subfields
268
- }) => copyUnless.some(filter => !subfields.some(sub => sub.code === filter.code && new RegExp(filter.value, 'u').test(sub.value))));
199
+ return fields.filter(({ subfields }) => copyUnless.some((filter) => !subfields.some((sub) => sub.code === filter.code && new RegExp(filter.value, "u").test(sub.value))));
269
200
  }
270
201
  return fields;
271
202
  }
272
203
  };
273
- exports.default = _default;
274
- //# sourceMappingURL=copy.js.map
204
+ //# sourceMappingURL=copy.js.map
@@ -1 +1,7 @@
1
- {"version":3,"file":"copy.js","names":["_marcRecord","require","_debug","_interopRequireDefault","e","__esModule","default","_default","tagPattern","compareTagsOnly","compareWithoutTag","compareWithoutIndicators","compareWithoutIndicator1","compareWithoutIndicator2","subfieldsMustBeIdentical","excludeSubfields","dropSubfields","copyUnless","baseValidators","subfieldValues","sourceValidators","swapTag","swapSubfieldCode","doNotCopyIfFieldPresent","base","source","debug","createDebugLogger","debugData","extend","debugOptions","debugCompare","JSON","stringify","baseRecord","sourceRecord","getRecordsFromParameters","undefined","MarcRecord","ignoreInd1","ignoreInd2","baseFields","get","sourceFields","doNotCopy","length","toObject","baseCompareFields","map","baseField","createCompareField","compareResultFields","compareFields","droppedUnwantedSubfield","checkDropSubfields","droppedUnwantedFields","checkCopyUnlessFields","swappedSubfields","checkSwapSubfieldCodes","swappedTags","checkSwapTag","uniqueFields","Set","field","parse","forEach","insertField","uniqFields","sourceField","rest","sourceCompareField","unique","checkCompareFields","baseCompareField","value","ind1","ind2","allFound","checkSubfields","subfields","sourceSubfields","baseSubfields","foundSubs","filter","sSub","some","bSub","code","tag","filteredField","foundRule","rule","RegExp","from","test","replacementTag","to","params","name","createCompareSubfields","param","Object","fromEntries","nonExcludedSubfields","sub","normalizedSubfields","normalizeSubfieldValue","toLowerCase","replace","fields","swapTagsFunc","swapSubfieldCodesFunc","dropSubfieldsFunc","condition","exports"],"sources":["../../src/reducers/copy.js"],"sourcesContent":["/* eslint-disable max-statements */\n/* eslint-disable no-unused-vars */\n\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport createDebugLogger from 'debug';\n\nexport default ({\n tagPattern,\n compareTagsOnly = false,\n compareWithoutTag = false,\n compareWithoutIndicators = false,\n compareWithoutIndicator1 = false,\n compareWithoutIndicator2 = false,\n subfieldsMustBeIdentical = true,\n excludeSubfields = [],\n dropSubfields = [],\n copyUnless = [],\n baseValidators = {subfieldValues: false},\n sourceValidators = {subfieldValues: false},\n swapTag = [],\n swapSubfieldCode = [],\n doNotCopyIfFieldPresent = false\n}) => (base, source) => {\n\n const debug = createDebugLogger('@natlibfi/marc-record-merge:copy');\n const debugData = debug.extend('data');\n const debugOptions = createDebugLogger('@natlibfi/marc-record-merge:compare-options');\n const debugCompare = createDebugLogger('@natlibfi/marc-record-merge:compare');\n\n debugData(`base: ${JSON.stringify(base)}`);\n debugData(`source: ${JSON.stringify(source)}`);\n\n const {baseRecord, sourceRecord} = getRecordsFromParameters(base, source, baseValidators, sourceValidators);\n\n function getRecordsFromParameters(base, source, baseValidators, sourceValidators) {\n // records if we got an object ({base, source}) as a parameter\n if (source === undefined && base.base !== undefined && base.source !== undefined) {\n const baseRecord = new MarcRecord(base.base, baseValidators);\n const sourceRecord = new MarcRecord(base.source, sourceValidators);\n return {baseRecord, sourceRecord};\n }\n // records if we got an non-object (base, source) as a parameter\n const baseRecord = new MarcRecord(base, baseValidators);\n const sourceRecord = new MarcRecord(source, sourceValidators);\n return {baseRecord, sourceRecord};\n }\n\n const ignoreInd1 = compareWithoutIndicators || compareWithoutIndicator1;\n const ignoreInd2 = compareWithoutIndicators || compareWithoutIndicator2;\n\n debugOptions(`Tag Pattern: ${tagPattern}`);\n debugOptions(`Compare tags only: ${compareTagsOnly}`);\n debugOptions(`Omit indicator 1 from comparison: ${ignoreInd1}`);\n debugOptions(`Omit indicator 2 from comparison: ${ignoreInd2}`);\n debugOptions(`Copy if identical: ${subfieldsMustBeIdentical}`);\n debugOptions(`Exclude subfields: [${excludeSubfields}]`);\n debugOptions(`Drop subfields [${dropSubfields}]`);\n debugOptions(`Copy unless contains subfields: ${JSON.stringify(copyUnless)}`);\n\n const baseFields = baseRecord.get(tagPattern);\n const sourceFields = sourceRecord.get(tagPattern);\n const doNotCopy = doNotCopyIfFieldPresent ? baseRecord.get(doNotCopyIfFieldPresent).length > 0 : false;\n\n if (doNotCopy) {\n return baseRecord.toObject();\n }\n debug(`FFS: ${compareWithoutIndicator1}, ${compareWithoutIndicators}, ${ignoreInd1}`);\n debug(`Base fields: `, baseFields);\n debug(`Source fields: `, sourceFields);\n\n // Logic steps\n const baseCompareFields = baseFields.map(baseField => createCompareField(baseField));\n const compareResultFields = compareFields(sourceFields, baseCompareFields);\n const droppedUnwantedSubfield = checkDropSubfields(compareResultFields);\n const droppedUnwantedFields = checkCopyUnlessFields(droppedUnwantedSubfield);\n const swappedSubfields = checkSwapSubfieldCodes(droppedUnwantedFields);\n const swappedTags = checkSwapTag(swappedSubfields);\n const uniqueFields = [...new Set(swappedTags.map(field => JSON.stringify(field)))].map(field => JSON.parse(field));\n debug('Fields to be copied');\n debug(JSON.stringify(uniqueFields));\n\n // Add fields to base;\n uniqueFields.forEach(field => baseRecord.insertField(field));\n debugData(`baseRecord before return: ${JSON.stringify(baseRecord)}`);\n //return baseRecord;\n return baseRecord.toObject();\n\n function compareFields(sourceFields, baseCompareFields, uniqFields = []) {\n const [sourceField, ...rest] = sourceFields;\n if (sourceField === undefined) {\n return uniqFields;\n }\n\n if (baseCompareFields.length === 0) {\n return compareFields(rest, baseCompareFields, [...uniqFields, sourceField]);\n }\n\n // Source and base are also compared for identicalness\n // Non-identical fields are copied from source to base as duplicates\n const sourceCompareField = createCompareField(sourceField);\n const unique = checkCompareFields(baseCompareFields, sourceCompareField);\n\n debugCompare(`${JSON.stringify(sourceField)} ${unique ? 'is UNIQUE' : 'not UNIQUE'}`);\n\n if (unique) {\n return compareFields(rest, baseCompareFields, [...uniqFields, sourceField]);\n }\n\n return compareFields(rest, baseCompareFields, uniqFields);\n\n function checkCompareFields(baseCompareFields, sourceCompareField) {\n let unique = true; // eslint-disable-line functional/no-let\n\n baseCompareFields.forEach(baseCompareField => {\n debugCompare(`Comparing ${JSON.stringify(sourceCompareField)} to ${JSON.stringify(baseCompareField)}}`);\n\n if (sourceCompareField.value !== baseCompareField.value) {\n debugCompare(`Value is different ${sourceCompareField.value} !== ${baseCompareField.value}`);\n return;\n }\n\n if (sourceCompareField.ind1 !== baseCompareField.ind1) {\n debugCompare(`Ind1 is different ${sourceCompareField.ind1} !== ${baseCompareField.ind1}`);\n return;\n }\n\n if (sourceCompareField.ind2 !== baseCompareField.ind2) {\n debugCompare(`Ind2 is different ${sourceCompareField.ind2} !== ${baseCompareField.ind2}`);\n return;\n }\n\n if ('subfields' in sourceCompareField) {\n const allFound = checkSubfields(sourceCompareField.subfields, baseCompareField.subfields);\n debugCompare(`Subfields are different ${!allFound}`);\n if (!allFound) {\n return;\n }\n\n unique = false;\n return;\n }\n\n unique = false;\n return;\n });\n\n return unique;\n }\n\n function checkSubfields(sourceSubfields, baseSubfields) {\n const foundSubs = sourceSubfields.filter(sSub => baseSubfields.some(bSub => sSub.code === bSub.code && sSub.value === bSub.value));\n\n if (subfieldsMustBeIdentical) {\n return foundSubs.length === sourceSubfields.length && foundSubs.length === baseSubfields.length;\n }\n\n return foundSubs.length === sourceSubfields.length;\n }\n }\n\n // compare objects have only fields that matter in comparison\n function createCompareField(field) {\n if (compareTagsOnly) {\n return {tag: field.tag};\n }\n\n if ('value' in field) {\n return {tag: field.tag, value: field.value};\n }\n\n const [filteredField] = checkDropSubfields([field]);\n const [foundRule] = swapTag.filter(rule => new RegExp(rule.from, 'u').test(field.tag));\n const replacementTag = foundRule ? foundRule.to : undefined;\n\n const params = [\n {name: 'tag', value: compareWithoutTag ? replacementTag : field.tag},\n {name: 'ind1', value: ignoreInd1 ? undefined : field.ind1},\n {name: 'ind2', value: ignoreInd2 ? undefined : field.ind2},\n {name: 'subfields', value: createCompareSubfields(filteredField.subfields)}\n ].map(param => [param.name, param.value]);\n\n return Object.fromEntries(params);\n\n function createCompareSubfields(subfields) {\n const nonExcludedSubfields = subfields.filter(sub => !excludeSubfields.some(code => code === sub.code));\n const normalizedSubfields = nonExcludedSubfields.map(sub => ({code: sub.code, value: normalizeSubfieldValue(sub.value)}));\n\n return normalizedSubfields;\n\n function normalizeSubfieldValue(value) {\n return value.toLowerCase().replace(/\\s+/ug, '');\n }\n }\n }\n\n function checkSwapTag(fields) {\n if (swapTag.length > 0) {\n return fields.map(field => ({...field, tag: swapTagsFunc(field.tag)}));\n }\n\n return fields;\n\n function swapTagsFunc(tag) {\n const [foundRule] = swapTag.filter(rule => new RegExp(rule.from, 'u').test(tag));\n\n if (foundRule === undefined) {\n return tag;\n }\n\n return foundRule.to;\n }\n }\n\n function checkSwapSubfieldCodes(fields) {\n if (swapSubfieldCode.length > 0) {\n return fields.map(field => ({...field, subfields: swapSubfieldCodesFunc(field.subfields)}));\n }\n\n return fields;\n\n function swapSubfieldCodesFunc(subfields) {\n return subfields.map(sub => {\n const [foundRule] = swapSubfieldCode.filter(rule => rule.from === sub.code);\n\n if (foundRule === undefined) {\n return sub;\n }\n\n return {code: foundRule.to, value: sub.value};\n });\n }\n }\n\n function checkDropSubfields(fields) {\n if (dropSubfields.length > 0) {\n return fields.map(field => ({...field, subfields: dropSubfieldsFunc(field.subfields)}))\n .filter(field => field.subfields.length > 0);\n }\n\n return fields;\n\n function dropSubfieldsFunc(subfields) {\n return subfields.filter(sub => { // eslint-disable-line\n return !dropSubfields.some(({code, value = false, condition = false}) => {\n if (code !== sub.code) {\n return false;\n }\n\n if (!condition && value) {\n return value === sub.value;\n }\n\n if (condition === 'unless' && value) {\n return !new RegExp(value, 'u').test(sub.value);\n }\n\n return true;\n });\n });\n }\n }\n\n function checkCopyUnlessFields(fields) {\n if (copyUnless.length > 0) {\n return fields.filter(({subfields}) => copyUnless.some(filter => !subfields.some(sub => sub.code === filter.code && new RegExp(filter.value, 'u').test(sub.value))));\n }\n\n return fields;\n }\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/reducers/copy.js"],
4
+ "sourcesContent": ["import {MarcRecord} from '@natlibfi/marc-record';\nimport createDebugLogger from 'debug';\n\nexport default ({\n tagPattern,\n compareTagsOnly = false,\n compareWithoutTag = false,\n compareWithoutIndicators = false,\n compareWithoutIndicator1 = false,\n compareWithoutIndicator2 = false,\n subfieldsMustBeIdentical = true,\n excludeSubfields = [],\n dropSubfields = [],\n copyUnless = [],\n baseValidators = {subfieldValues: false},\n sourceValidators = {subfieldValues: false},\n swapTag = [],\n swapSubfieldCode = [],\n doNotCopyIfFieldPresent = false\n}) => (base, source) => {\n\n const debug = createDebugLogger('@natlibfi/marc-record-merge:copy');\n const debugData = debug.extend('data');\n const debugOptions = createDebugLogger('@natlibfi/marc-record-merge:compare-options');\n const debugCompare = createDebugLogger('@natlibfi/marc-record-merge:compare');\n\n debugData(`base: ${JSON.stringify(base)}`);\n debugData(`source: ${JSON.stringify(source)}`);\n\n const {baseRecord, sourceRecord} = getRecordsFromParameters(base, source, baseValidators, sourceValidators);\n\n function getRecordsFromParameters(base, source, baseValidators, sourceValidators) {\n // records if we got an object ({base, source}) as a parameter\n if (source === undefined && base.base !== undefined && base.source !== undefined) {\n const baseRecord = new MarcRecord(base.base, baseValidators);\n const sourceRecord = new MarcRecord(base.source, sourceValidators);\n return {baseRecord, sourceRecord};\n }\n // records if we got an non-object (base, source) as a parameter\n const baseRecord = new MarcRecord(base, baseValidators);\n const sourceRecord = new MarcRecord(source, sourceValidators);\n return {baseRecord, sourceRecord};\n }\n\n const ignoreInd1 = compareWithoutIndicators || compareWithoutIndicator1;\n const ignoreInd2 = compareWithoutIndicators || compareWithoutIndicator2;\n\n debugOptions(`Tag Pattern: ${tagPattern}`);\n debugOptions(`Compare tags only: ${compareTagsOnly}`);\n debugOptions(`Omit indicator 1 from comparison: ${ignoreInd1}`);\n debugOptions(`Omit indicator 2 from comparison: ${ignoreInd2}`);\n debugOptions(`Copy if identical: ${subfieldsMustBeIdentical}`);\n debugOptions(`Exclude subfields: [${excludeSubfields}]`);\n debugOptions(`Drop subfields [${dropSubfields}]`);\n debugOptions(`Copy unless contains subfields: ${JSON.stringify(copyUnless)}`);\n\n const baseFields = baseRecord.get(tagPattern);\n const sourceFields = sourceRecord.get(tagPattern);\n const doNotCopy = doNotCopyIfFieldPresent ? baseRecord.get(doNotCopyIfFieldPresent).length > 0 : false;\n\n if (doNotCopy) {\n return baseRecord.toObject();\n }\n debug(`FFS: ${compareWithoutIndicator1}, ${compareWithoutIndicators}, ${ignoreInd1}`);\n debug(`Base fields: `, baseFields);\n debug(`Source fields: `, sourceFields);\n\n // Logic steps\n const baseCompareFields = baseFields.map(baseField => createCompareField(baseField));\n const compareResultFields = compareFields(sourceFields, baseCompareFields);\n const droppedUnwantedSubfield = checkDropSubfields(compareResultFields);\n const droppedUnwantedFields = checkCopyUnlessFields(droppedUnwantedSubfield);\n const swappedSubfields = checkSwapSubfieldCodes(droppedUnwantedFields);\n const swappedTags = checkSwapTag(swappedSubfields);\n const uniqueFields = [...new Set(swappedTags.map(field => JSON.stringify(field)))].map(field => JSON.parse(field));\n debug('Fields to be copied');\n debug(JSON.stringify(uniqueFields));\n\n // Add fields to base;\n uniqueFields.forEach(field => baseRecord.insertField(field));\n debugData(`baseRecord before return: ${JSON.stringify(baseRecord)}`);\n //return baseRecord;\n return baseRecord.toObject();\n\n function compareFields(sourceFields, baseCompareFields, uniqFields = []) {\n const [sourceField, ...rest] = sourceFields;\n if (sourceField === undefined) {\n return uniqFields;\n }\n\n if (baseCompareFields.length === 0) {\n return compareFields(rest, baseCompareFields, [...uniqFields, sourceField]);\n }\n\n // Source and base are also compared for identicalness\n // Non-identical fields are copied from source to base as duplicates\n const sourceCompareField = createCompareField(sourceField);\n const unique = checkCompareFields(baseCompareFields, sourceCompareField);\n\n debugCompare(`${JSON.stringify(sourceField)} ${unique ? 'is UNIQUE' : 'not UNIQUE'}`);\n\n if (unique) {\n return compareFields(rest, baseCompareFields, [...uniqFields, sourceField]);\n }\n\n return compareFields(rest, baseCompareFields, uniqFields);\n\n function checkCompareFields(baseCompareFields, sourceCompareField) {\n let unique = true;\n\n baseCompareFields.forEach(baseCompareField => {\n debugCompare(`Comparing ${JSON.stringify(sourceCompareField)} to ${JSON.stringify(baseCompareField)}}`);\n\n if (sourceCompareField.value !== baseCompareField.value) {\n debugCompare(`Value is different ${sourceCompareField.value} !== ${baseCompareField.value}`);\n return;\n }\n\n if (sourceCompareField.ind1 !== baseCompareField.ind1) {\n debugCompare(`Ind1 is different ${sourceCompareField.ind1} !== ${baseCompareField.ind1}`);\n return;\n }\n\n if (sourceCompareField.ind2 !== baseCompareField.ind2) {\n debugCompare(`Ind2 is different ${sourceCompareField.ind2} !== ${baseCompareField.ind2}`);\n return;\n }\n\n if ('subfields' in sourceCompareField) {\n const allFound = checkSubfields(sourceCompareField.subfields, baseCompareField.subfields);\n debugCompare(`Subfields are different ${!allFound}`);\n if (!allFound) {\n return;\n }\n\n unique = false;\n return;\n }\n\n unique = false;\n return;\n });\n\n return unique;\n }\n\n function checkSubfields(sourceSubfields, baseSubfields) {\n const foundSubs = sourceSubfields.filter(sSub => baseSubfields.some(bSub => sSub.code === bSub.code && sSub.value === bSub.value));\n\n if (subfieldsMustBeIdentical) {\n return foundSubs.length === sourceSubfields.length && foundSubs.length === baseSubfields.length;\n }\n\n return foundSubs.length === sourceSubfields.length;\n }\n }\n\n // compare objects have only fields that matter in comparison\n function createCompareField(field) {\n if (compareTagsOnly) {\n return {tag: field.tag};\n }\n\n if ('value' in field) {\n return {tag: field.tag, value: field.value};\n }\n\n const [filteredField] = checkDropSubfields([field]);\n const [foundRule] = swapTag.filter(rule => new RegExp(rule.from, 'u').test(field.tag));\n const replacementTag = foundRule ? foundRule.to : undefined;\n\n const params = [\n {name: 'tag', value: compareWithoutTag ? replacementTag : field.tag},\n {name: 'ind1', value: ignoreInd1 ? undefined : field.ind1},\n {name: 'ind2', value: ignoreInd2 ? undefined : field.ind2},\n {name: 'subfields', value: createCompareSubfields(filteredField.subfields)}\n ].map(param => [param.name, param.value]);\n\n return Object.fromEntries(params);\n\n function createCompareSubfields(subfields) {\n const nonExcludedSubfields = subfields.filter(sub => !excludeSubfields.some(code => code === sub.code));\n const normalizedSubfields = nonExcludedSubfields.map(sub => ({code: sub.code, value: normalizeSubfieldValue(sub.value)}));\n\n return normalizedSubfields;\n\n function normalizeSubfieldValue(value) {\n return value.toLowerCase().replace(/\\s+/ug, '');\n }\n }\n }\n\n function checkSwapTag(fields) {\n if (swapTag.length > 0) {\n return fields.map(field => ({...field, tag: swapTagsFunc(field.tag)}));\n }\n\n return fields;\n\n function swapTagsFunc(tag) {\n const [foundRule] = swapTag.filter(rule => new RegExp(rule.from, 'u').test(tag));\n\n if (foundRule === undefined) {\n return tag;\n }\n\n return foundRule.to;\n }\n }\n\n function checkSwapSubfieldCodes(fields) {\n if (swapSubfieldCode.length > 0) {\n return fields.map(field => ({...field, subfields: swapSubfieldCodesFunc(field.subfields)}));\n }\n\n return fields;\n\n function swapSubfieldCodesFunc(subfields) {\n return subfields.map(sub => {\n const [foundRule] = swapSubfieldCode.filter(rule => rule.from === sub.code);\n\n if (foundRule === undefined) {\n return sub;\n }\n\n return {code: foundRule.to, value: sub.value};\n });\n }\n }\n\n function checkDropSubfields(fields) {\n if (dropSubfields.length > 0) {\n return fields.map(field => ({...field, subfields: dropSubfieldsFunc(field.subfields)}))\n .filter(field => field.subfields.length > 0);\n }\n\n return fields;\n\n function dropSubfieldsFunc(subfields) {\n return subfields.filter(sub => { // eslint-disable-line\n return !dropSubfields.some(({code, value = false, condition = false}) => {\n if (code !== sub.code) {\n return false;\n }\n\n if (!condition && value) {\n return value === sub.value;\n }\n\n if (condition === 'unless' && value) {\n return !new RegExp(value, 'u').test(sub.value);\n }\n\n return true;\n });\n });\n }\n }\n\n function checkCopyUnlessFields(fields) {\n if (copyUnless.length > 0) {\n return fields.filter(({subfields}) => copyUnless.some(filter => !subfields.some(sub => sub.code === filter.code && new RegExp(filter.value, 'u').test(sub.value))));\n }\n\n return fields;\n }\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["base", "source", "baseValidators", "sourceValidators", "baseRecord", "sourceRecord", "sourceFields", "baseCompareFields", "sourceCompareField", "unique"]
7
+ }
@@ -1,17 +1,4 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
- var _copy = _interopRequireDefault(require("./copy"));
8
- var _select = _interopRequireWildcard(require("./select"));
9
- function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
10
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
11
- var _default = exports.default = {
12
- copy: _copy.default,
13
- select: _select.default,
14
- strictEquality: _select.strictEquality,
15
- subsetEquality: _select.subsetEquality
16
- };
17
- //# sourceMappingURL=index.js.map
1
+ import copy from "./copy.js";
2
+ import select, { strictEquality, subsetEquality } from "./select.js";
3
+ export default { copy, select, strictEquality, subsetEquality };
4
+ //# sourceMappingURL=index.js.map
@@ -1 +1,7 @@
1
- {"version":3,"file":"index.js","names":["_copy","_interopRequireDefault","require","_select","_interopRequireWildcard","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","_default","exports","copy","select","strictEquality","subsetEquality"],"sources":["../../src/reducers/index.js"],"sourcesContent":["import copy from './copy';\nimport select, {strictEquality, subsetEquality} from './select';\n\nexport default {copy, select, strictEquality, subsetEquality};\n"],"mappings":";;;;;;AAAA,IAAAA,KAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,OAAA,GAAAC,uBAAA,CAAAF,OAAA;AAAgE,SAAAE,wBAAAC,CAAA,EAAAC,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAH,uBAAA,YAAAA,CAAAC,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,GAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,EAAAQ,CAAA,gBAAAP,CAAA,IAAAD,CAAA,gBAAAC,CAAA,OAAAa,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAC,CAAA,OAAAM,CAAA,IAAAD,CAAA,GAAAU,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAC,CAAA,OAAAM,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAP,CAAA,EAAAM,CAAA,IAAAC,CAAA,CAAAP,CAAA,IAAAD,CAAA,CAAAC,CAAA,WAAAO,CAAA,KAAAR,CAAA,EAAAC,CAAA;AAAA,SAAAL,uBAAAI,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAK,UAAA,GAAAL,CAAA,KAAAU,OAAA,EAAAV,CAAA;AAAA,IAAAmB,QAAA,GAAAC,OAAA,CAAAV,OAAA,GAEjD;EAACW,IAAI,EAAJA,aAAI;EAAEC,MAAM,EAANA,eAAM;EAAEC,cAAc,EAAdA,sBAAc;EAAEC,cAAc,EAAdA;AAAc,CAAC","ignoreList":[]}
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/reducers/index.js"],
4
+ "sourcesContent": ["import copy from './copy.js';\nimport select, {strictEquality, subsetEquality} from './select.js';\n\nexport default {copy, select, strictEquality, subsetEquality};\n"],
5
+ "mappings": "AAAA,OAAO,UAAU;AACjB,OAAO,UAAS,gBAAgB,sBAAqB;AAErD,eAAe,EAAC,MAAM,QAAQ,gBAAgB,eAAc;",
6
+ "names": []
7
+ }