@natlibfi/marc-record-merge 6.0.0-beta.1 → 6.0.0-beta.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/CODEOWNERS +9 -0
- package/.github/dependabot.yml +41 -0
- package/.github/workflows/melinda-node-tests.yml +60 -0
- package/LICENSE +21 -0
- package/README.md +122 -2
- package/dist/index.js +56 -42
- package/dist/index.js.map +1 -1
- package/dist/index.spec.js +59 -0
- package/dist/index.spec.js.map +1 -0
- package/dist/reducers/copy.js +254 -80
- package/dist/reducers/copy.js.map +1 -1
- package/dist/reducers/copy.spec.js +57 -72
- package/dist/reducers/copy.spec.js.map +1 -1
- package/dist/reducers/copy2.spec.js +67 -0
- package/dist/reducers/copy2.spec.js.map +1 -0
- package/dist/reducers/index.js +13 -24
- package/dist/reducers/index.js.map +1 -1
- package/dist/reducers/select.js +63 -58
- package/dist/reducers/select.js.map +1 -1
- package/dist/reducers/select.spec.js +45 -92
- package/dist/reducers/select.spec.js.map +1 -1
- package/dist/reducers/select2.spec.js +58 -0
- package/dist/reducers/select2.spec.js.map +1 -0
- package/package.json +33 -32
- package/src/index.js +50 -32
- package/src/index.spec.js +45 -0
- package/src/reducers/copy.js +262 -80
- package/src/reducers/copy.spec.js +50 -48
- package/src/reducers/copy2.spec.js +55 -0
- package/src/reducers/index.js +3 -30
- package/src/reducers/select.js +53 -39
- package/src/reducers/select.spec.js +41 -56
- package/src/reducers/select2.spec.js +49 -0
- package/test-fixtures/index/01/base.json +24 -0
- package/test-fixtures/index/01/merged.json +24 -0
- package/test-fixtures/index/01/metadata.json +8 -0
- package/test-fixtures/index/01/source.json +40 -0
- package/test-fixtures/index/02/base.json +24 -0
- package/test-fixtures/index/02/merged.json +24 -0
- package/test-fixtures/index/02/metadata.json +7 -0
- package/test-fixtures/index/02/source.json +40 -0
- package/test-fixtures/reducers/copy/{01/base.json → 01 - copy/01/base.json } +1 -1
- package/test-fixtures/reducers/copy/{01 → 01 - copy/01}/merged.json +0 -0
- package/test-fixtures/reducers/copy/01 - copy/01/metadata.json +4 -0
- package/test-fixtures/reducers/copy/{01 → 01 - copy/01}/source.json +0 -0
- package/test-fixtures/reducers/copy/{02/source.json → 01 - copy/02/base.json} +0 -0
- package/test-fixtures/reducers/copy/{02 → 01 - copy/02}/merged.json +0 -0
- package/test-fixtures/reducers/copy/01 - copy/02/metadata.json +4 -0
- package/test-fixtures/reducers/copy/{02/base.json → 01 - copy/02/source.json } +1 -1
- package/test-fixtures/reducers/copy/{03/base.json → 01 - copy/03/base.json } +1 -1
- package/test-fixtures/reducers/copy/{03 → 01 - copy/03}/merged.json +0 -0
- package/test-fixtures/reducers/copy/01 - copy/03/metadata.json +4 -0
- package/test-fixtures/reducers/copy/{03 → 01 - copy/03}/source.json +0 -0
- package/test-fixtures/reducers/copy/{05/base.json → 01 - copy/04/base.json } +1 -1
- package/test-fixtures/reducers/copy/{04/merged.json → 01 - copy/04/merged.json } +1 -1
- package/test-fixtures/reducers/copy/01 - copy/04/metadata.json +4 -0
- package/test-fixtures/reducers/copy/{04/source.json → 01 - copy/04/source.json } +1 -1
- package/test-fixtures/reducers/copy/{04/base.json → 01 - copy/05/base.json } +1 -1
- package/test-fixtures/reducers/copy/01 - copy/05/merged.json +77 -0
- package/test-fixtures/reducers/copy/01 - copy/05/metadata.json +4 -0
- package/test-fixtures/reducers/copy/01 - copy/05/source.json +62 -0
- package/test-fixtures/reducers/copy/01 - copy/06/base.json +24 -0
- package/test-fixtures/reducers/copy/01 - copy/06/merged.json +39 -0
- package/test-fixtures/reducers/copy/01 - copy/06/metadata.json +4 -0
- package/test-fixtures/reducers/copy/01 - copy/06/source.json +24 -0
- package/test-fixtures/reducers/copy/01 - copy/07/base.json +39 -0
- package/test-fixtures/reducers/copy/01 - copy/07/merged.json +39 -0
- package/test-fixtures/reducers/copy/01 - copy/07/metadata.json +5 -0
- package/test-fixtures/reducers/copy/01 - copy/07/source.json +24 -0
- package/test-fixtures/reducers/copy/01 - copy/08/base.json +28 -0
- package/test-fixtures/reducers/copy/01 - copy/08/merged.json +28 -0
- package/test-fixtures/reducers/copy/01 - copy/08/metadata.json +4 -0
- package/test-fixtures/reducers/copy/01 - copy/08/source.json +24 -0
- package/test-fixtures/reducers/copy/02 - doNotCopyIfFieldPresent/01/base.json +17 -0
- package/test-fixtures/reducers/copy/02 - doNotCopyIfFieldPresent/01/merged.json +20 -0
- package/test-fixtures/reducers/copy/02 - doNotCopyIfFieldPresent/01/metadata.json +6 -0
- package/test-fixtures/reducers/copy/02 - doNotCopyIfFieldPresent/01/source.json +20 -0
- package/test-fixtures/reducers/copy/02 - doNotCopyIfFieldPresent/02/base.json +9 -0
- package/test-fixtures/reducers/copy/02 - doNotCopyIfFieldPresent/02/merged.json +20 -0
- package/test-fixtures/reducers/copy/02 - doNotCopyIfFieldPresent/02/metadata.json +6 -0
- package/test-fixtures/reducers/copy/02 - doNotCopyIfFieldPresent/02/source.json +20 -0
- package/test-fixtures/reducers/copy/03 - compareTagsOnly/01/base.json +24 -0
- package/test-fixtures/reducers/copy/03 - compareTagsOnly/01/merged.json +24 -0
- package/test-fixtures/reducers/copy/03 - compareTagsOnly/01/metadata.json +5 -0
- package/test-fixtures/reducers/copy/03 - compareTagsOnly/01/source.json +24 -0
- package/test-fixtures/reducers/copy/03 - compareTagsOnly/02/base.json +24 -0
- package/test-fixtures/reducers/copy/03 - compareTagsOnly/02/merged.json +100 -0
- package/test-fixtures/reducers/copy/03 - compareTagsOnly/02/metadata.json +5 -0
- package/test-fixtures/reducers/copy/03 - compareTagsOnly/02/source.json +100 -0
- package/test-fixtures/reducers/copy/04 - compareWithoutIndicators/01/base.json +24 -0
- package/test-fixtures/reducers/copy/04 - compareWithoutIndicators/01/merged.json +24 -0
- package/test-fixtures/reducers/copy/04 - compareWithoutIndicators/01/metadata.json +5 -0
- package/test-fixtures/reducers/copy/04 - compareWithoutIndicators/01/source.json +24 -0
- package/test-fixtures/reducers/copy/04 - compareWithoutIndicators/02/base.json +24 -0
- package/test-fixtures/reducers/copy/04 - compareWithoutIndicators/02/merged.json +39 -0
- package/test-fixtures/reducers/copy/04 - compareWithoutIndicators/02/metadata.json +5 -0
- package/test-fixtures/reducers/copy/04 - compareWithoutIndicators/02/source.json +24 -0
- package/test-fixtures/reducers/copy/04 - compareWithoutIndicators/03/metadata.json +6 -0
- package/test-fixtures/reducers/copy/04 - compareWithoutIndicators/04/base.json +20 -0
- package/test-fixtures/reducers/copy/04 - compareWithoutIndicators/04/merged.json +31 -0
- package/test-fixtures/reducers/copy/04 - compareWithoutIndicators/04/metadata.json +5 -0
- package/test-fixtures/reducers/copy/04 - compareWithoutIndicators/04/source.json +20 -0
- package/test-fixtures/reducers/copy/05 - copyUnless/01/base.json +9 -0
- package/test-fixtures/reducers/copy/05 - copyUnless/01/merged.json +24 -0
- package/test-fixtures/reducers/copy/05 - copyUnless/01/metadata.json +5 -0
- package/test-fixtures/reducers/copy/05 - copyUnless/01/source.json +47 -0
- package/test-fixtures/reducers/copy/06 - subfieldsMustBeIdentical/01/base.json +24 -0
- package/test-fixtures/reducers/copy/06 - subfieldsMustBeIdentical/01/merged.json +39 -0
- package/test-fixtures/reducers/copy/06 - subfieldsMustBeIdentical/01/metadata.json +5 -0
- package/test-fixtures/reducers/copy/06 - subfieldsMustBeIdentical/01/source.json +24 -0
- package/test-fixtures/reducers/copy/06 - subfieldsMustBeIdentical/02/base.json +24 -0
- package/test-fixtures/reducers/copy/06 - subfieldsMustBeIdentical/02/merged.json +24 -0
- package/test-fixtures/reducers/copy/06 - subfieldsMustBeIdentical/02/metadata.json +5 -0
- package/test-fixtures/reducers/copy/06 - subfieldsMustBeIdentical/02/source.json +24 -0
- package/test-fixtures/reducers/copy/06 - subfieldsMustBeIdentical/03/base.json +28 -0
- package/test-fixtures/reducers/copy/06 - subfieldsMustBeIdentical/03/merged.json +43 -0
- package/test-fixtures/reducers/copy/06 - subfieldsMustBeIdentical/03/metadata.json +5 -0
- package/test-fixtures/reducers/copy/06 - subfieldsMustBeIdentical/03/source.json +24 -0
- package/test-fixtures/reducers/copy/06 - subfieldsMustBeIdentical/04/base.json +28 -0
- package/test-fixtures/reducers/copy/06 - subfieldsMustBeIdentical/04/merged.json +28 -0
- package/test-fixtures/reducers/copy/06 - subfieldsMustBeIdentical/04/metadata.json +5 -0
- package/test-fixtures/reducers/copy/06 - subfieldsMustBeIdentical/04/source.json +24 -0
- package/test-fixtures/reducers/copy/06 - subfieldsMustBeIdentical/05/base.json +20 -0
- package/test-fixtures/reducers/copy/06 - subfieldsMustBeIdentical/05/merged.json +35 -0
- package/test-fixtures/reducers/copy/06 - subfieldsMustBeIdentical/05/metadata.json +5 -0
- package/test-fixtures/reducers/copy/06 - subfieldsMustBeIdentical/05/source.json +24 -0
- package/test-fixtures/reducers/copy/06 - subfieldsMustBeIdentical/06/base.json +20 -0
- package/test-fixtures/reducers/copy/06 - subfieldsMustBeIdentical/06/merged.json +35 -0
- package/test-fixtures/reducers/copy/06 - subfieldsMustBeIdentical/06/metadata.json +5 -0
- package/test-fixtures/reducers/copy/06 - subfieldsMustBeIdentical/06/source.json +24 -0
- package/test-fixtures/reducers/copy/07 - excludeSubfields/01/base.json +39 -0
- package/test-fixtures/reducers/copy/07 - excludeSubfields/01/merged.json +39 -0
- package/test-fixtures/reducers/copy/07 - excludeSubfields/01/metadata.json +8 -0
- package/test-fixtures/reducers/copy/{05/source.json → 07 - excludeSubfields/01/source.json } +1 -1
- package/test-fixtures/reducers/copy/07 - excludeSubfields/02/base.json +39 -0
- package/test-fixtures/reducers/copy/{05/merged.json → 07 - excludeSubfields/02/merged.json } +5 -5
- package/test-fixtures/reducers/copy/07 - excludeSubfields/02/metadata.json +5 -0
- package/test-fixtures/reducers/copy/07 - excludeSubfields/02/source.json +43 -0
- package/test-fixtures/reducers/copy/08 - dropSubfields/01/base.json +35 -0
- package/test-fixtures/reducers/copy/08 - dropSubfields/01/merged.json +54 -0
- package/test-fixtures/reducers/copy/08 - dropSubfields/01/metadata.json +5 -0
- package/test-fixtures/reducers/copy/08 - dropSubfields/01/source.json +43 -0
- package/test-fixtures/reducers/copy/08 - dropSubfields/02/base.json +43 -0
- package/test-fixtures/reducers/copy/08 - dropSubfields/02/merged.json +58 -0
- package/test-fixtures/reducers/copy/08 - dropSubfields/02/metadata.json +5 -0
- package/test-fixtures/reducers/copy/08 - dropSubfields/02/source.json +32 -0
- package/test-fixtures/reducers/copy/08 - dropSubfields/03/base.json +43 -0
- package/test-fixtures/reducers/copy/08 - dropSubfields/03/merged.json +58 -0
- package/test-fixtures/reducers/copy/08 - dropSubfields/03/metadata.json +5 -0
- package/test-fixtures/reducers/copy/08 - dropSubfields/03/source.json +32 -0
- package/test-fixtures/reducers/copy/08 - dropSubfields/04/base.json +43 -0
- package/test-fixtures/reducers/copy/08 - dropSubfields/04/merged.json +43 -0
- package/test-fixtures/reducers/copy/08 - dropSubfields/04/metadata.json +5 -0
- package/test-fixtures/reducers/copy/08 - dropSubfields/04/source.json +32 -0
- package/test-fixtures/reducers/copy/09 - swapSubfieldCode/01/base.json +9 -0
- package/test-fixtures/reducers/copy/09 - swapSubfieldCode/01/merged.json +20 -0
- package/test-fixtures/reducers/copy/09 - swapSubfieldCode/01/metadata.json +6 -0
- package/test-fixtures/reducers/copy/09 - swapSubfieldCode/01/source.json +20 -0
- package/test-fixtures/reducers/copy/09 - swapSubfieldCode/02/base.json +9 -0
- package/test-fixtures/reducers/copy/09 - swapSubfieldCode/02/merged.json +20 -0
- package/test-fixtures/reducers/copy/09 - swapSubfieldCode/02/metadata.json +6 -0
- package/test-fixtures/reducers/copy/09 - swapSubfieldCode/02/source.json +20 -0
- package/test-fixtures/reducers/copy/09 - swapSubfieldCode/03/base.json +9 -0
- package/test-fixtures/reducers/copy/09 - swapSubfieldCode/03/merged.json +31 -0
- package/test-fixtures/reducers/copy/09 - swapSubfieldCode/03/metadata.json +6 -0
- package/test-fixtures/reducers/copy/09 - swapSubfieldCode/03/source.json +31 -0
- package/test-fixtures/reducers/copy/09 - swapSubfieldCode/04/base.json +9 -0
- package/test-fixtures/reducers/copy/09 - swapSubfieldCode/04/merged.json +42 -0
- package/test-fixtures/reducers/copy/09 - swapSubfieldCode/04/metadata.json +6 -0
- package/test-fixtures/reducers/copy/09 - swapSubfieldCode/04/source.json +42 -0
- package/test-fixtures/reducers/copy/10 - swapTag/01/base.json +17 -0
- package/test-fixtures/reducers/copy/10 - swapTag/01/merged.json +28 -0
- package/test-fixtures/reducers/copy/10 - swapTag/01/metadata.json +6 -0
- package/test-fixtures/reducers/copy/10 - swapTag/01/source.json +20 -0
- package/test-fixtures/reducers/copy/11 - compareWithoutTag/01/base.json +28 -0
- package/test-fixtures/reducers/copy/11 - compareWithoutTag/01/merged.json +28 -0
- package/test-fixtures/reducers/copy/11 - compareWithoutTag/01/metadata.json +6 -0
- package/test-fixtures/reducers/copy/11 - compareWithoutTag/01/source.json +20 -0
- package/test-fixtures/reducers/copy/11 - compareWithoutTag/02/base.json +28 -0
- package/test-fixtures/reducers/copy/11 - compareWithoutTag/02/merged.json +39 -0
- package/test-fixtures/reducers/copy/11 - compareWithoutTag/02/metadata.json +6 -0
- package/test-fixtures/reducers/copy/11 - compareWithoutTag/02/source.json +31 -0
- package/test-fixtures/reducers/copy/11 - compareWithoutTag/03/base.json +28 -0
- package/test-fixtures/reducers/copy/11 - compareWithoutTag/03/merged.json +28 -0
- package/test-fixtures/reducers/copy/11 - compareWithoutTag/03/metadata.json +7 -0
- package/test-fixtures/reducers/copy/11 - compareWithoutTag/03/source.json +20 -0
- package/test-fixtures/reducers/copy/11 - compareWithoutTag/04/base.json +17 -0
- package/test-fixtures/reducers/copy/11 - compareWithoutTag/04/merged.json +28 -0
- package/test-fixtures/reducers/copy/11 - compareWithoutTag/04/metadata.json +7 -0
- package/test-fixtures/reducers/copy/11 - compareWithoutTag/04/source.json +31 -0
- package/test-fixtures/reducers/copy/11 - compareWithoutTag/05/base.json +28 -0
- package/test-fixtures/reducers/copy/11 - compareWithoutTag/05/merged.json +28 -0
- package/test-fixtures/reducers/copy/11 - compareWithoutTag/05/metadata.json +7 -0
- package/test-fixtures/reducers/copy/11 - compareWithoutTag/05/source.json +28 -0
- package/test-fixtures/reducers/metadata.json +4 -0
- package/test-fixtures/reducers/select/01/metadata.json +5 -0
- package/test-fixtures/reducers/select/02/metadata.json +4 -0
- package/test-fixtures/reducers/select/03/metadata.json +4 -0
- package/test-fixtures/reducers/select/04/metadata.json +5 -0
- package/test-fixtures/reducers/select/05/metadata.json +4 -0
- package/test-fixtures/reducers/select/06/base.json +4 -0
- package/test-fixtures/reducers/select/06/merged.json +4 -0
- package/test-fixtures/reducers/select/06/metadata.json +4 -0
- package/test-fixtures/reducers/select/06/source.json +4 -0
- package/test-fixtures/reducers/select/07/metadata.json +5 -0
- package/test-fixtures/reducers/select/08/metadata.json +4 -0
- package/test-fixtures/reducers/select/09/metadata.json +4 -0
- package/test-fixtures/reducers/select/10/metadata.json +5 -0
- package/test-fixtures/reducers/select/11/metadata.json +4 -0
- package/test-fixtures/reducers/select/12/metadata.json +5 -0
- package/test-fixtures/reducers/select/13/metadata.json +4 -0
- package/test-fixtures/reducers/select/14/base.json +24 -0
- package/test-fixtures/reducers/select/14/merged.json +24 -0
- package/test-fixtures/reducers/select/14/metadata.json +4 -0
- package/test-fixtures/reducers/select/14/source.json +24 -0
- package/.drone.yml +0 -92
- package/.nyc_output/7ecda3cd-9f84-4416-a466-fa1e5889c6a3.json +0 -1
- package/.nyc_output/processinfo/7ecda3cd-9f84-4416-a466-fa1e5889c6a3.json +0 -1
- package/.nyc_output/processinfo/index.json +0 -1
- package/LICENSE.txt +0 -165
- package/coverage/base.css +0 -224
- package/coverage/block-navigation.js +0 -79
- package/coverage/copy.js.html +0 -344
- package/coverage/favicon.png +0 -0
- package/coverage/index.html +0 -126
- package/coverage/lcov-report/base.css +0 -224
- package/coverage/lcov-report/block-navigation.js +0 -79
- package/coverage/lcov-report/copy.js.html +0 -344
- package/coverage/lcov-report/favicon.png +0 -0
- package/coverage/lcov-report/index.html +0 -126
- package/coverage/lcov-report/prettify.css +0 -1
- package/coverage/lcov-report/prettify.js +0 -2
- package/coverage/lcov-report/select.js.html +0 -431
- package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/coverage/lcov-report/sorter.js +0 -170
- package/coverage/lcov.info +0 -195
- package/coverage/prettify.css +0 -1
- package/coverage/prettify.js +0 -2
- package/coverage/select.js.html +0 -431
- package/coverage/sort-arrow-sprite.png +0 -0
- package/coverage/sorter.js +0 -170
- package/test-fixtures/reducers/copy/01/pattern.txt +0 -1
- package/test-fixtures/reducers/copy/02/pattern.txt +0 -1
- package/test-fixtures/reducers/copy/03/pattern.txt +0 -1
- package/test-fixtures/reducers/copy/04/pattern.txt +0 -1
- package/test-fixtures/reducers/copy/05/pattern.txt +0 -1
- package/test-fixtures/reducers/select/01/expected-error.txt +0 -1
- package/test-fixtures/reducers/select/01/pattern.txt +0 -1
- package/test-fixtures/reducers/select/02/pattern.txt +0 -1
- package/test-fixtures/reducers/select/03/pattern.txt +0 -1
- package/test-fixtures/reducers/select/04/pattern.txt +0 -1
- package/test-fixtures/reducers/select/05/pattern.txt +0 -1
- package/test-fixtures/reducers/select/06/pattern.txt +0 -1
- package/test-fixtures/reducers/select/07/equalityFunction.txt +0 -1
- package/test-fixtures/reducers/select/07/pattern.txt +0 -1
- package/test-fixtures/reducers/select/08/pattern.txt +0 -1
- package/test-fixtures/reducers/select/09/pattern.txt +0 -1
- package/test-fixtures/reducers/select/10/equalityFunction.txt +0 -1
- package/test-fixtures/reducers/select/10/pattern.txt +0 -1
- package/test-fixtures/reducers/select/11/pattern.txt +0 -1
- package/test-fixtures/reducers/select/12/equalityFunction.txt +0 -1
- package/test-fixtures/reducers/select/12/pattern.txt +0 -1
- package/test-fixtures/reducers/select/13/pattern.txt +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"copy2.spec.js","names":["generateTests","callback","path","__dirname","useMetadataFile","recurse","fixura","reader","READERS","JSON","failWhenNotFound","getFixture","tagPatternRegExp","compareTagsOnly","compareWithoutTag","compareWithoutIndicators","compareWithoutIndicator1","compareWithoutIndicator2","subfieldsMustBeIdentical","copyUnless","undefined","excludeSubfields","dropSubfields","swapSubfieldCode","swapTag","doNotCopyIfFieldPresent","base","source","tagPattern","RegExp","expectedRecord","merged","createReducer","expect","constructor","name","not","to","eql"],"sources":["../../src/reducers/copy2.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport {READERS} from '@natlibfi/fixura';\nimport createReducer from './copy';\nimport generateTests from '@natlibfi/fixugen';\n\n//import createDebugLogger from 'debug'; // <---\n//const debug = createDebugLogger('@natlibfi/marc-record-merge/copy.spec.js'); // <---\n\ngenerateTests({\n callback,\n path: [__dirname, '..', '..', 'test-fixtures', 'reducers', 'copy'],\n useMetadataFile: true,\n recurse: true,\n fixura: {\n reader: READERS.JSON,\n failWhenNotFound: false\n }\n});\n\n\nfunction callback({\n getFixture,\n tagPatternRegExp,\n compareTagsOnly = false,\n compareWithoutTag = false,\n compareWithoutIndicators = false,\n compareWithoutIndicator1 = false,\n compareWithoutIndicator2 = false,\n subfieldsMustBeIdentical = false,\n copyUnless = undefined,\n excludeSubfields = undefined,\n dropSubfields = undefined,\n swapSubfieldCode = [],\n swapTag = [],\n doNotCopyIfFieldPresent = false\n}) {\n const base = getFixture('base.json');\n const source = getFixture('source.json');\n const tagPattern = new RegExp(tagPatternRegExp, 'u');\n const expectedRecord = getFixture('merged.json');\n\n const merged = createReducer({\n tagPattern, compareTagsOnly, compareWithoutTag, compareWithoutIndicators, compareWithoutIndicator1, compareWithoutIndicator2,\n copyUnless, subfieldsMustBeIdentical, excludeSubfields,\n dropSubfields, swapSubfieldCode, swapTag,\n doNotCopyIfFieldPresent\n })({base, source});\n //debug(`*** mergedRecord: `, mergedRecord); //<--\n //debug(`*** mergedRecord,Strfy: `, JSON.stringify(mergedRecord)); //<--\n //debug(`*** expectedRecord: `, expectedRecord); //<--\n //debug(`*** expectedRecord,Strfy: `, JSON.stringify(expectedRecord)); //<--\n expect(merged.constructor.name).not.to.eql('MarcRecord');\n expect(merged.constructor.name).to.eql('Object');\n expect(merged).to.eql(expectedRecord);\n}\n"],"mappings":";;AAAA;AACA;AACA;AACA;AAA8C;AAE9C;AACA;;AAEA,IAAAA,gBAAa,EAAC;EACZC,QAAQ;EACRC,IAAI,EAAE,CAACC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,CAAC;EAClEC,eAAe,EAAE,IAAI;EACrBC,OAAO,EAAE,IAAI;EACbC,MAAM,EAAE;IACNC,MAAM,EAAEC,eAAO,CAACC,IAAI;IACpBC,gBAAgB,EAAE;EACpB;AACF,CAAC,CAAC;AAGF,SAAST,QAAQ,CAAC;EAChBU,UAAU;EACVC,gBAAgB;EAChBC,eAAe,GAAG,KAAK;EACvBC,iBAAiB,GAAG,KAAK;EACzBC,wBAAwB,GAAG,KAAK;EAChCC,wBAAwB,GAAG,KAAK;EAChCC,wBAAwB,GAAG,KAAK;EAChCC,wBAAwB,GAAG,KAAK;EAChCC,UAAU,GAAGC,SAAS;EACtBC,gBAAgB,GAAGD,SAAS;EAC5BE,aAAa,GAAGF,SAAS;EACzBG,gBAAgB,GAAG,EAAE;EACrBC,OAAO,GAAG,EAAE;EACZC,uBAAuB,GAAG;AAC5B,CAAC,EAAE;EACD,MAAMC,IAAI,GAAGf,UAAU,CAAC,WAAW,CAAC;EACpC,MAAMgB,MAAM,GAAGhB,UAAU,CAAC,aAAa,CAAC;EACxC,MAAMiB,UAAU,GAAG,IAAIC,MAAM,CAACjB,gBAAgB,EAAE,GAAG,CAAC;EACpD,MAAMkB,cAAc,GAAGnB,UAAU,CAAC,aAAa,CAAC;EAEhD,MAAMoB,MAAM,GAAG,IAAAC,aAAa,EAAC;IAC3BJ,UAAU;IAAEf,eAAe;IAAEC,iBAAiB;IAAEC,wBAAwB;IAAEC,wBAAwB;IAAEC,wBAAwB;IAC5HE,UAAU;IAAED,wBAAwB;IAAEG,gBAAgB;IACtDC,aAAa;IAAEC,gBAAgB;IAAEC,OAAO;IACxCC;EACF,CAAC,CAAC,CAAC;IAACC,IAAI;IAAEC;EAAM,CAAC,CAAC;EAClB;EACA;EACA;EACA;EACA,IAAAM,YAAM,EAACF,MAAM,CAACG,WAAW,CAACC,IAAI,CAAC,CAACC,GAAG,CAACC,EAAE,CAACC,GAAG,CAAC,YAAY,CAAC;EACxD,IAAAL,YAAM,EAACF,MAAM,CAACG,WAAW,CAACC,IAAI,CAAC,CAACE,EAAE,CAACC,GAAG,CAAC,QAAQ,CAAC;EAChD,IAAAL,YAAM,EAACF,MAAM,CAAC,CAACM,EAAE,CAACC,GAAG,CAACR,cAAc,CAAC;AACvC"}
|
package/dist/reducers/index.js
CHANGED
|
@@ -3,28 +3,17 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
|
|
7
|
-
var _copy = require("./copy");
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
var _select = require("./select");
|
|
20
|
-
|
|
21
|
-
Object.keys(_select).forEach(function (key) {
|
|
22
|
-
if (key === "default" || key === "__esModule") return;
|
|
23
|
-
Object.defineProperty(exports, key, {
|
|
24
|
-
enumerable: true,
|
|
25
|
-
get: function () {
|
|
26
|
-
return _select[key];
|
|
27
|
-
}
|
|
28
|
-
});
|
|
29
|
-
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _copy = _interopRequireDefault(require("./copy"));
|
|
8
|
+
var _select = _interopRequireWildcard(require("./select"));
|
|
9
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
10
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
11
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
12
|
+
var _default = {
|
|
13
|
+
copy: _copy.default,
|
|
14
|
+
select: _select.default,
|
|
15
|
+
strictEquality: _select.strictEquality,
|
|
16
|
+
subsetEquality: _select.subsetEquality
|
|
17
|
+
};
|
|
18
|
+
exports.default = _default;
|
|
30
19
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"index.js","names":["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;AACA;AAAgE;AAAA;AAAA;AAAA,eAEjD;EAACA,IAAI,EAAJA,aAAI;EAAEC,MAAM,EAANA,eAAM;EAAEC,cAAc,EAAdA,sBAAc;EAAEC,cAAc,EAAdA;AAAc,CAAC;AAAA"}
|
package/dist/reducers/select.js
CHANGED
|
@@ -3,67 +3,72 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
+
exports.default = void 0;
|
|
6
7
|
exports.strictEquality = strictEquality;
|
|
7
8
|
exports.subsetEquality = subsetEquality;
|
|
8
|
-
exports.default = void 0;
|
|
9
|
-
|
|
10
9
|
var _normalizeDiacritics = require("normalize-diacritics");
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
* @licstart The following is the entire license notice for the JavaScript code in this file.
|
|
15
|
-
*
|
|
16
|
-
* Merge MARC records
|
|
17
|
-
*
|
|
18
|
-
* Copyright (C) 2015-2019 University Of Helsinki (The National Library Of Finland)
|
|
19
|
-
*
|
|
20
|
-
* This file is part of marc-record-merge-js
|
|
21
|
-
|
|
22
|
-
* marc-record-merge-js program is free software: you can redistribute it and/or modify
|
|
23
|
-
* it under the terms of the GNU Lesser General Public License as
|
|
24
|
-
* published by the Free Software Foundation, either version 3 of the
|
|
25
|
-
* License, or (at your option) any later version.
|
|
26
|
-
*
|
|
27
|
-
* marc-record-merge-js is distributed in the hope that it will be useful,
|
|
28
|
-
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
29
|
-
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
30
|
-
* GNU Lesser General Public License for more details.
|
|
31
|
-
*
|
|
32
|
-
* You should have received a copy of the GNU Lesser General Public License
|
|
33
|
-
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
34
|
-
*
|
|
35
|
-
* @licend The above is the entire license notice
|
|
36
|
-
* for the JavaScript code in this file.
|
|
37
|
-
*
|
|
38
|
-
*/
|
|
10
|
+
var _debug = _interopRequireDefault(require("debug"));
|
|
11
|
+
var _marcRecord = require("@natlibfi/marc-record");
|
|
12
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
39
13
|
function strictEquality(subfieldA, subfieldB) {
|
|
40
14
|
return subfieldA.code === subfieldB.code && subfieldA.value === subfieldB.value;
|
|
41
15
|
}
|
|
42
|
-
|
|
43
16
|
function subsetEquality(subfieldA, subfieldB) {
|
|
44
17
|
return subfieldA.code === subfieldB.code && (subfieldA.value.indexOf(subfieldB.value) !== -1 || subfieldB.value.indexOf(subfieldA.value) !== -1);
|
|
45
18
|
}
|
|
46
|
-
|
|
19
|
+
// EqualityFunction can be either strictEquality or subsetEquality
|
|
47
20
|
var _default = ({
|
|
48
|
-
|
|
49
|
-
equalityFunction = strictEquality
|
|
21
|
+
tagPattern,
|
|
22
|
+
equalityFunction = strictEquality,
|
|
23
|
+
baseValidators = {
|
|
24
|
+
subfieldValues: false
|
|
25
|
+
},
|
|
26
|
+
sourceValidators = {
|
|
27
|
+
subfieldValues: false
|
|
28
|
+
}
|
|
29
|
+
// eslint-disable-next-line max-statements
|
|
50
30
|
}) => (base, source) => {
|
|
51
|
-
const
|
|
52
|
-
const
|
|
31
|
+
const debug = (0, _debug.default)('@natlibfi/marc-record-merge:select');
|
|
32
|
+
const {
|
|
33
|
+
baseRecord,
|
|
34
|
+
sourceRecord
|
|
35
|
+
} = getRecordsFromParameters(base, source, baseValidators, sourceValidators);
|
|
36
|
+
function getRecordsFromParameters(base, source, baseValidators, sourceValidators) {
|
|
37
|
+
// records if we got an object ({base, source}) as a parameter
|
|
38
|
+
if (source === undefined && base.base !== undefined && base.source !== undefined) {
|
|
39
|
+
const baseRecord = new _marcRecord.MarcRecord(base.base, baseValidators);
|
|
40
|
+
const sourceRecord = new _marcRecord.MarcRecord(base.source, sourceValidators);
|
|
41
|
+
return {
|
|
42
|
+
baseRecord,
|
|
43
|
+
sourceRecord
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
// records if we got an non-object (base, source) as a parameter
|
|
47
|
+
const baseRecord = new _marcRecord.MarcRecord(base, baseValidators);
|
|
48
|
+
const sourceRecord = new _marcRecord.MarcRecord(source, sourceValidators);
|
|
49
|
+
return {
|
|
50
|
+
baseRecord,
|
|
51
|
+
sourceRecord
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
const baseFields = baseRecord.get(tagPattern);
|
|
55
|
+
const sourceFields = sourceRecord.get(tagPattern);
|
|
56
|
+
const fieldTag = sourceFields.map(field => field.tag);
|
|
57
|
+
debug(`Comparing field ${fieldTag}`);
|
|
53
58
|
checkFieldType(baseFields);
|
|
54
59
|
checkFieldType(sourceFields);
|
|
55
|
-
|
|
56
60
|
if (baseFields.length > 1 || sourceFields.length > 1) {
|
|
57
|
-
|
|
61
|
+
debug(`Multiple fields in base or source`);
|
|
62
|
+
debug(`No changes to base`);
|
|
63
|
+
return baseRecord.toObject();
|
|
58
64
|
}
|
|
59
|
-
|
|
60
65
|
const [baseField] = baseFields;
|
|
61
66
|
const [sourceField] = sourceFields;
|
|
62
|
-
|
|
63
67
|
if (baseField.tag === sourceField.tag === false) {
|
|
64
|
-
|
|
68
|
+
debug(`Base tag ${baseField.tag} is not equal to source tag ${sourceField.tag}`);
|
|
69
|
+
debug(`No changes to base`);
|
|
70
|
+
return baseRecord.toObject();
|
|
65
71
|
}
|
|
66
|
-
|
|
67
72
|
const baseSubs = baseField.subfields;
|
|
68
73
|
const sourceSubs = sourceField.subfields;
|
|
69
74
|
const baseSubsNormalized = baseSubs.map(({
|
|
@@ -80,57 +85,57 @@ var _default = ({
|
|
|
80
85
|
code,
|
|
81
86
|
value: normalizeSubfieldValue(value)
|
|
82
87
|
}));
|
|
88
|
+
|
|
89
|
+
// Returns the base subfields for which a matching source subfield is found
|
|
83
90
|
const equalSubfieldsBase = baseSubsNormalized.filter(baseSubfield => sourceSubsNormalized.some(sourceSubfield => equalityFunction(baseSubfield, sourceSubfield)));
|
|
84
|
-
|
|
91
|
+
debug(`equalSubfieldsBase: ${JSON.stringify(equalSubfieldsBase, undefined, 2)}`);
|
|
85
92
|
|
|
93
|
+
// Returns the source subfields for which a matching base subfield is found
|
|
94
|
+
const equalSubfieldsSource = sourceSubsNormalized.filter(sourceSubfield => baseSubsNormalized.some(baseSubfield => equalityFunction(sourceSubfield, baseSubfield)));
|
|
95
|
+
debug(`equalSubfieldsSource: ${JSON.stringify(equalSubfieldsSource, undefined, 2)}`);
|
|
86
96
|
if (baseSubs.length === sourceSubs.length && equalSubfieldsBase.length < baseSubs.length) {
|
|
87
|
-
|
|
97
|
+
debug(`Base and source subfields are not equal`);
|
|
98
|
+
debug(`No changes to base`);
|
|
99
|
+
return baseRecord.toObject();
|
|
88
100
|
}
|
|
89
|
-
|
|
90
101
|
if (baseSubs.length === sourceSubs.length && equalSubfieldsBase.length === equalSubfieldsSource.length) {
|
|
102
|
+
debug(`Checking subfield equality`);
|
|
91
103
|
const totalSubfieldLengthBase = baseSubsNormalized.map(({
|
|
92
104
|
value
|
|
93
105
|
}) => value.length).reduce((acc, value) => acc + value);
|
|
94
106
|
const totalSubfieldLengthSource = sourceSubsNormalized.map(({
|
|
95
107
|
value
|
|
96
108
|
}) => value.length).reduce((acc, value) => acc + value);
|
|
97
|
-
|
|
98
109
|
if (totalSubfieldLengthSource > totalSubfieldLengthBase) {
|
|
99
|
-
return replaceBasefieldWithSourcefield(
|
|
110
|
+
return replaceBasefieldWithSourcefield(baseRecord.toObject());
|
|
100
111
|
}
|
|
101
112
|
}
|
|
102
|
-
|
|
103
113
|
if (sourceSubs.length > baseSubs.length && equalSubfieldsBase.length === baseSubs.length) {
|
|
104
|
-
return replaceBasefieldWithSourcefield(
|
|
114
|
+
return replaceBasefieldWithSourcefield(baseRecord.toObject());
|
|
105
115
|
}
|
|
106
|
-
|
|
107
|
-
return
|
|
108
|
-
|
|
116
|
+
debug(`No changes to base`);
|
|
117
|
+
return baseRecord.toObject();
|
|
109
118
|
function replaceBasefieldWithSourcefield(base) {
|
|
110
119
|
const index = base.fields.findIndex(field => field === baseField);
|
|
111
120
|
base.fields.splice(index, 1, sourceField); // eslint-disable-line functional/immutable-data
|
|
112
|
-
|
|
121
|
+
debug(`Source field is longer, replacing base with source`);
|
|
113
122
|
return base;
|
|
114
123
|
}
|
|
115
|
-
|
|
116
124
|
function checkFieldType(fields) {
|
|
117
125
|
const checkedFields = fields.map(field => {
|
|
118
126
|
if ('value' in field) {
|
|
119
127
|
// eslint-disable-line functional/no-conditional-statement
|
|
120
128
|
throw new Error('Invalid control field, expected data field');
|
|
121
129
|
}
|
|
122
|
-
|
|
123
130
|
return field;
|
|
124
131
|
});
|
|
125
132
|
return checkedFields;
|
|
126
133
|
}
|
|
127
|
-
|
|
128
134
|
function normalizeSubfieldValue(value) {
|
|
129
135
|
// Regexp options: g: global search, u: unicode
|
|
130
|
-
const punctuation = /[
|
|
136
|
+
const punctuation = /[.,\-/#!?$%^&*;:{}=_`~()[\]]/gu;
|
|
131
137
|
return (0, _normalizeDiacritics.normalizeSync)(value).toLowerCase().replace(punctuation, '', 'u').replace(/\s+/gu, ' ').trim();
|
|
132
138
|
}
|
|
133
139
|
};
|
|
134
|
-
|
|
135
140
|
exports.default = _default;
|
|
136
141
|
//# sourceMappingURL=select.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/reducers/select.js"],"names":["strictEquality","subfieldA","subfieldB","code","value","subsetEquality","indexOf","pattern","equalityFunction","base","source","baseFields","get","sourceFields","checkFieldType","length","baseField","sourceField","tag","baseSubs","subfields","sourceSubs","baseSubsNormalized","map","normalizeSubfieldValue","sourceSubsNormalized","equalSubfieldsBase","filter","baseSubfield","some","sourceSubfield","equalSubfieldsSource","totalSubfieldLengthBase","reduce","acc","totalSubfieldLengthSource","replaceBasefieldWithSourcefield","index","fields","findIndex","field","splice","checkedFields","Error","punctuation","toLowerCase","replace","trim"],"mappings":"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","sourcesContent":["/**\n*\n* @licstart The following is the entire license notice for the JavaScript code in this file.\n*\n* Merge MARC records\n*\n* Copyright (C) 2015-2019 University Of Helsinki (The National Library Of Finland)\n*\n* This file is part of marc-record-merge-js\n\n* marc-record-merge-js program is free software: you can redistribute it and/or modify\n* it under the terms of the GNU Lesser General Public License as\n* published by the Free Software Foundation, either version 3 of the\n* License, or (at your option) any later version.\n*\n* marc-record-merge-js is distributed in the hope that it will be useful,\n* but WITHOUT ANY WARRANTY; without even the implied warranty of\n* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n* GNU Lesser General Public License for more details.\n*\n* You should have received a copy of the GNU Lesser General Public License\n* along with this program. If not, see <http://www.gnu.org/licenses/>.\n*\n* @licend The above is the entire license notice\n* for the JavaScript code in this file.\n*\n*/\nimport {normalizeSync} from 'normalize-diacritics';\n\nexport function strictEquality(subfieldA, subfieldB) {\n return subfieldA.code === subfieldB.code &&\n subfieldA.value === subfieldB.value;\n}\n\nexport function subsetEquality(subfieldA, subfieldB) {\n return subfieldA.code === subfieldB.code &&\n (subfieldA.value.indexOf(subfieldB.value) !== -1 || subfieldB.value.indexOf(subfieldA.value) !== -1);\n}\n\nexport default ({pattern, equalityFunction = strictEquality}) => (base, source) => {\n const baseFields = base.get(pattern);\n const sourceFields = source.get(pattern);\n\n checkFieldType(baseFields);\n checkFieldType(sourceFields);\n\n if (baseFields.length > 1 || sourceFields.length > 1) {\n return base;\n }\n const [baseField] = baseFields;\n const [sourceField] = sourceFields;\n\n if (baseField.tag === sourceField.tag === false) {\n return base;\n }\n const baseSubs = baseField.subfields;\n const sourceSubs = sourceField.subfields;\n\n const baseSubsNormalized = baseSubs\n .map(({code, value}) => ({code, value: normalizeSubfieldValue(value)}));\n\n const sourceSubsNormalized = sourceSubs\n .map(({code, value}) => ({code, value: normalizeSubfieldValue(value)}));\n\n const equalSubfieldsBase = baseSubsNormalized\n .filter(baseSubfield => sourceSubsNormalized\n .some(sourceSubfield => equalityFunction(baseSubfield, sourceSubfield)));\n\n const equalSubfieldsSource = sourceSubsNormalized\n .filter(sourceSubfield => baseSubsNormalized\n .some(baseSubfield => equalityFunction(sourceSubfield, baseSubfield)));\n\n if (baseSubs.length === sourceSubs.length && equalSubfieldsBase.length < baseSubs.length) {\n return base;\n }\n\n if (baseSubs.length === sourceSubs.length && equalSubfieldsBase.length === equalSubfieldsSource.length) {\n const totalSubfieldLengthBase = baseSubsNormalized\n .map(({value}) => value.length)\n .reduce((acc, value) => acc + value);\n const totalSubfieldLengthSource = sourceSubsNormalized\n .map(({value}) => value.length)\n .reduce((acc, value) => acc + value);\n\n if (totalSubfieldLengthSource > totalSubfieldLengthBase) {\n return replaceBasefieldWithSourcefield(base);\n }\n }\n\n if (sourceSubs.length > baseSubs.length && equalSubfieldsBase.length === baseSubs.length) {\n return replaceBasefieldWithSourcefield(base);\n }\n\n return base;\n\n function replaceBasefieldWithSourcefield(base) {\n const index = base.fields.findIndex(field => field === baseField);\n base.fields.splice(index, 1, sourceField); // eslint-disable-line functional/immutable-data\n return base;\n }\n\n function checkFieldType(fields) {\n const checkedFields = fields.map(field => {\n if ('value' in field) { // eslint-disable-line functional/no-conditional-statement\n throw new Error('Invalid control field, expected data field');\n }\n return field;\n });\n return checkedFields;\n }\n\n function normalizeSubfieldValue(value) {\n // Regexp options: g: global search, u: unicode\n const punctuation = /[.,\\-/#!$%^&*;:{}=_`~()[\\]]/gu;\n return normalizeSync(value).toLowerCase().replace(punctuation, '', 'u').replace(/\\s+/gu, ' ').trim();\n }\n};\n"],"file":"select.js"}
|
|
1
|
+
{"version":3,"file":"select.js","names":["strictEquality","subfieldA","subfieldB","code","value","subsetEquality","indexOf","tagPattern","equalityFunction","baseValidators","subfieldValues","sourceValidators","base","source","debug","createDebugLogger","baseRecord","sourceRecord","getRecordsFromParameters","undefined","MarcRecord","baseFields","get","sourceFields","fieldTag","map","field","tag","checkFieldType","length","toObject","baseField","sourceField","baseSubs","subfields","sourceSubs","baseSubsNormalized","normalizeSubfieldValue","sourceSubsNormalized","equalSubfieldsBase","filter","baseSubfield","some","sourceSubfield","JSON","stringify","equalSubfieldsSource","totalSubfieldLengthBase","reduce","acc","totalSubfieldLengthSource","replaceBasefieldWithSourcefield","index","fields","findIndex","splice","checkedFields","Error","punctuation","normalizeSync","toLowerCase","replace","trim"],"sources":["../../src/reducers/select.js"],"sourcesContent":["import {normalizeSync} from 'normalize-diacritics';\nimport createDebugLogger from 'debug';\nimport {MarcRecord} from '@natlibfi/marc-record';\n\nexport function strictEquality(subfieldA, subfieldB) {\n return subfieldA.code === subfieldB.code &&\n subfieldA.value === subfieldB.value;\n}\n\nexport function subsetEquality(subfieldA, subfieldB) {\n return subfieldA.code === subfieldB.code &&\n (subfieldA.value.indexOf(subfieldB.value) !== -1 || subfieldB.value.indexOf(subfieldA.value) !== -1);\n}\n// EqualityFunction can be either strictEquality or subsetEquality\n\nexport default ({\n tagPattern,\n equalityFunction = strictEquality,\n baseValidators = {subfieldValues: false},\n sourceValidators = {subfieldValues: false}\n// eslint-disable-next-line max-statements\n}) => (base, source) => {\n const debug = createDebugLogger('@natlibfi/marc-record-merge:select');\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 baseFields = baseRecord.get(tagPattern);\n const sourceFields = sourceRecord.get(tagPattern);\n const fieldTag = sourceFields.map(field => field.tag);\n debug(`Comparing field ${fieldTag}`);\n\n checkFieldType(baseFields);\n checkFieldType(sourceFields);\n\n if (baseFields.length > 1 || sourceFields.length > 1) {\n debug(`Multiple fields in base or source`);\n debug(`No changes to base`);\n return baseRecord.toObject();\n }\n const [baseField] = baseFields;\n const [sourceField] = sourceFields;\n\n if (baseField.tag === sourceField.tag === false) {\n debug(`Base tag ${baseField.tag} is not equal to source tag ${sourceField.tag}`);\n debug(`No changes to base`);\n return baseRecord.toObject();\n }\n const baseSubs = baseField.subfields;\n const sourceSubs = sourceField.subfields;\n\n const baseSubsNormalized = baseSubs\n .map(({code, value}) => ({code, value: normalizeSubfieldValue(value)}));\n\n const sourceSubsNormalized = sourceSubs\n .map(({code, value}) => ({code, value: normalizeSubfieldValue(value)}));\n\n // Returns the base subfields for which a matching source subfield is found\n const equalSubfieldsBase = baseSubsNormalized\n .filter(baseSubfield => sourceSubsNormalized\n .some(sourceSubfield => equalityFunction(baseSubfield, sourceSubfield)));\n debug(`equalSubfieldsBase: ${JSON.stringify(equalSubfieldsBase, undefined, 2)}`);\n\n // Returns the source subfields for which a matching base subfield is found\n const equalSubfieldsSource = sourceSubsNormalized\n .filter(sourceSubfield => baseSubsNormalized\n .some(baseSubfield => equalityFunction(sourceSubfield, baseSubfield)));\n debug(`equalSubfieldsSource: ${JSON.stringify(equalSubfieldsSource, undefined, 2)}`);\n\n if (baseSubs.length === sourceSubs.length && equalSubfieldsBase.length < baseSubs.length) {\n debug(`Base and source subfields are not equal`);\n debug(`No changes to base`);\n return baseRecord.toObject();\n }\n\n if (baseSubs.length === sourceSubs.length && equalSubfieldsBase.length === equalSubfieldsSource.length) {\n debug(`Checking subfield equality`);\n const totalSubfieldLengthBase = baseSubsNormalized\n .map(({value}) => value.length)\n .reduce((acc, value) => acc + value);\n const totalSubfieldLengthSource = sourceSubsNormalized\n .map(({value}) => value.length)\n .reduce((acc, value) => acc + value);\n\n if (totalSubfieldLengthSource > totalSubfieldLengthBase) {\n return replaceBasefieldWithSourcefield(baseRecord.toObject());\n }\n }\n\n if (sourceSubs.length > baseSubs.length && equalSubfieldsBase.length === baseSubs.length) {\n return replaceBasefieldWithSourcefield(baseRecord.toObject());\n }\n\n debug(`No changes to base`);\n return baseRecord.toObject();\n\n function replaceBasefieldWithSourcefield(base) {\n const index = base.fields.findIndex(field => field === baseField);\n base.fields.splice(index, 1, sourceField); // eslint-disable-line functional/immutable-data\n debug(`Source field is longer, replacing base with source`);\n return base;\n }\n\n function checkFieldType(fields) {\n const checkedFields = fields.map(field => {\n if ('value' in field) { // eslint-disable-line functional/no-conditional-statement\n throw new Error('Invalid control field, expected data field');\n }\n return field;\n });\n return checkedFields;\n }\n\n function normalizeSubfieldValue(value) {\n // Regexp options: g: global search, u: unicode\n const punctuation = /[.,\\-/#!?$%^&*;:{}=_`~()[\\]]/gu;\n return normalizeSync(value).toLowerCase().replace(punctuation, '', 'u').replace(/\\s+/gu, ' ').trim();\n }\n};\n"],"mappings":"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"}
|
|
@@ -1,102 +1,55 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _chai =
|
|
4
|
-
|
|
5
|
-
var _fs = _interopRequireDefault(require("fs"));
|
|
6
|
-
|
|
7
|
-
var _path = _interopRequireDefault(require("path"));
|
|
8
|
-
|
|
3
|
+
var _chai = require("chai");
|
|
9
4
|
var _marcRecord = require("@natlibfi/marc-record");
|
|
10
|
-
|
|
11
5
|
var _select = _interopRequireWildcard(require("./select"));
|
|
12
|
-
|
|
13
|
-
var
|
|
14
|
-
|
|
15
|
-
function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
|
|
16
|
-
|
|
17
|
-
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
18
|
-
|
|
6
|
+
var _fixura = require("@natlibfi/fixura");
|
|
7
|
+
var _fixugen = _interopRequireDefault(require("@natlibfi/fixugen"));
|
|
19
8
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
*
|
|
23
|
-
* @licstart The following is the entire license notice for the JavaScript code in this file.
|
|
24
|
-
*
|
|
25
|
-
* Merge MARC records
|
|
26
|
-
*
|
|
27
|
-
* Copyright (C) 2015-2019 University Of Helsinki (The National Library Of Finland)
|
|
28
|
-
*
|
|
29
|
-
* This file is part of marc-record-merge-js
|
|
30
|
-
|
|
31
|
-
* marc-record-merge-js program is free software: you can redistribute it and/or modify
|
|
32
|
-
* it under the terms of the GNU Lesser General Public License as
|
|
33
|
-
* published by the Free Software Foundation, either version 3 of the
|
|
34
|
-
* License, or (at your option) any later version.
|
|
35
|
-
*
|
|
36
|
-
* marc-record-merge-js is distributed in the hope that it will be useful,
|
|
37
|
-
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
38
|
-
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
39
|
-
* GNU Lesser General Public License for more details.
|
|
40
|
-
*
|
|
41
|
-
* You should have received a copy of the GNU Lesser General Public License
|
|
42
|
-
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
43
|
-
*
|
|
44
|
-
* @licend The above is the entire license notice
|
|
45
|
-
* for the JavaScript code in this file.
|
|
46
|
-
*
|
|
47
|
-
*/
|
|
9
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
10
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
48
11
|
_marcRecord.MarcRecord.setValidationOptions({
|
|
49
12
|
subfieldValues: false
|
|
50
13
|
});
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
const {
|
|
61
|
-
getFixture
|
|
62
|
-
} = (0, _fixura.default)({
|
|
63
|
-
root: [fixturesPath, subDir],
|
|
64
|
-
reader: _fixura.READERS.JSON,
|
|
65
|
-
failWhenNotFound: false
|
|
66
|
-
});
|
|
67
|
-
it(subDir, () => {
|
|
68
|
-
const baseTest = new _marcRecord.MarcRecord(getFixture('base.json'));
|
|
69
|
-
const sourceTest = new _marcRecord.MarcRecord(getFixture('source.json'));
|
|
70
|
-
const patternTest = new RegExp(getFixture({
|
|
71
|
-
components: ['pattern.txt'],
|
|
72
|
-
reader: _fixura.READERS.TEXT
|
|
73
|
-
}), 'u');
|
|
74
|
-
const expectedRecord = getFixture('merged.json');
|
|
75
|
-
const expectedError = getFixture({
|
|
76
|
-
components: ['expected-error.txt'],
|
|
77
|
-
reader: _fixura.READERS.TEXT
|
|
78
|
-
});
|
|
79
|
-
const equalityFunction = getEqualityFunction();
|
|
80
|
-
|
|
81
|
-
if (expectedError) {
|
|
82
|
-
expect(() => _select.default.to.throw(Error, 'control field'));
|
|
83
|
-
return;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
const mergedRecord = (0, _select.default)({
|
|
87
|
-
pattern: patternTest,
|
|
88
|
-
equalityFunction
|
|
89
|
-
})(baseTest, sourceTest);
|
|
90
|
-
expect(mergedRecord.toObject()).to.eql(expectedRecord);
|
|
91
|
-
|
|
92
|
-
function getEqualityFunction() {
|
|
93
|
-
const functionName = getFixture({
|
|
94
|
-
components: ['equalityFunction.txt'],
|
|
95
|
-
reader: _fixura.READERS.TEXT
|
|
96
|
-
});
|
|
97
|
-
return functionName === 'subsetEquality' ? _select.subsetEquality : undefined;
|
|
98
|
-
}
|
|
99
|
-
});
|
|
100
|
-
});
|
|
14
|
+
(0, _fixugen.default)({
|
|
15
|
+
callback,
|
|
16
|
+
path: [__dirname, '..', '..', 'test-fixtures', 'reducers', 'select'],
|
|
17
|
+
useMetadataFile: true,
|
|
18
|
+
recurse: false,
|
|
19
|
+
fixura: {
|
|
20
|
+
reader: _fixura.READERS.JSON,
|
|
21
|
+
failWhenNotFound: false
|
|
22
|
+
}
|
|
101
23
|
});
|
|
24
|
+
function callback({
|
|
25
|
+
getFixture,
|
|
26
|
+
disabled = false,
|
|
27
|
+
tagPatternRegExp = false,
|
|
28
|
+
expectedError = false,
|
|
29
|
+
useSubsetEquality = false
|
|
30
|
+
}) {
|
|
31
|
+
if (disabled) {
|
|
32
|
+
console.log('TEST DISABLED!'); // eslint-disable-line no-console
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
// const base = new MarcRecord(getFixture('base.json'), {subfieldValues: false});
|
|
36
|
+
// const source = new MarcRecord(getFixture('source.json'), {subfieldValues: false});
|
|
37
|
+
|
|
38
|
+
const base = getFixture('base.json');
|
|
39
|
+
const source = getFixture('source.json');
|
|
40
|
+
const tagPattern = new RegExp(tagPatternRegExp, 'u');
|
|
41
|
+
const expectedRecord = getFixture('merged.json');
|
|
42
|
+
const equalityFunction = useSubsetEquality ? _select.subsetEquality : undefined;
|
|
43
|
+
|
|
44
|
+
// Bypass expected error in testing
|
|
45
|
+
if (expectedError) {
|
|
46
|
+
(0, _chai.expect)(() => _select.default.to.throw(Error, 'control field'));
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
const mergedRecord = (0, _select.default)({
|
|
50
|
+
tagPattern,
|
|
51
|
+
equalityFunction
|
|
52
|
+
})(base, source);
|
|
53
|
+
(0, _chai.expect)(mergedRecord).to.eql(expectedRecord);
|
|
54
|
+
}
|
|
102
55
|
//# sourceMappingURL=select.spec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"select.spec.js","names":["MarcRecord","setValidationOptions","subfieldValues","generateTests","callback","path","__dirname","useMetadataFile","recurse","fixura","reader","READERS","JSON","failWhenNotFound","getFixture","disabled","tagPatternRegExp","expectedError","useSubsetEquality","console","log","base","source","tagPattern","RegExp","expectedRecord","equalityFunction","subsetEquality","undefined","expect","createReducer","to","throw","Error","mergedRecord","eql"],"sources":["../../src/reducers/select.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport createReducer, {subsetEquality} from './select';\nimport {READERS} from '@natlibfi/fixura';\nimport generateTests from '@natlibfi/fixugen';\n\nMarcRecord.setValidationOptions({subfieldValues: false});\n\ngenerateTests({\n callback,\n path: [__dirname, '..', '..', 'test-fixtures', 'reducers', 'select'],\n useMetadataFile: true,\n recurse: false,\n fixura: {\n reader: READERS.JSON,\n failWhenNotFound: false\n }\n});\n\nfunction callback({\n getFixture,\n disabled = false,\n tagPatternRegExp = false,\n expectedError = false,\n useSubsetEquality = false\n}) {\n if (disabled) {\n console.log('TEST DISABLED!'); // eslint-disable-line no-console\n return;\n }\n // const base = new MarcRecord(getFixture('base.json'), {subfieldValues: false});\n // const source = new MarcRecord(getFixture('source.json'), {subfieldValues: false});\n\n const base = getFixture('base.json');\n const source = getFixture('source.json');\n\n const tagPattern = new RegExp(tagPatternRegExp, 'u');\n const expectedRecord = getFixture('merged.json');\n const equalityFunction = useSubsetEquality ? subsetEquality : undefined;\n\n // Bypass expected error in testing\n if (expectedError) {\n expect(() => createReducer.to.throw(Error, 'control field'));\n return;\n }\n\n const mergedRecord = createReducer({tagPattern, equalityFunction})(base, source);\n expect(mergedRecord).to.eql(expectedRecord);\n}\n"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AAA8C;AAAA;AAAA;AAE9CA,sBAAU,CAACC,oBAAoB,CAAC;EAACC,cAAc,EAAE;AAAK,CAAC,CAAC;AAExD,IAAAC,gBAAa,EAAC;EACZC,QAAQ;EACRC,IAAI,EAAE,CAACC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,eAAe,EAAE,UAAU,EAAE,QAAQ,CAAC;EACpEC,eAAe,EAAE,IAAI;EACrBC,OAAO,EAAE,KAAK;EACdC,MAAM,EAAE;IACNC,MAAM,EAAEC,eAAO,CAACC,IAAI;IACpBC,gBAAgB,EAAE;EACpB;AACF,CAAC,CAAC;AAEF,SAAST,QAAQ,CAAC;EAChBU,UAAU;EACVC,QAAQ,GAAG,KAAK;EAChBC,gBAAgB,GAAG,KAAK;EACxBC,aAAa,GAAG,KAAK;EACrBC,iBAAiB,GAAG;AACtB,CAAC,EAAE;EACD,IAAIH,QAAQ,EAAE;IACZI,OAAO,CAACC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAC/B;EACF;EACA;EACA;;EAEA,MAAMC,IAAI,GAAGP,UAAU,CAAC,WAAW,CAAC;EACpC,MAAMQ,MAAM,GAAGR,UAAU,CAAC,aAAa,CAAC;EAExC,MAAMS,UAAU,GAAG,IAAIC,MAAM,CAACR,gBAAgB,EAAE,GAAG,CAAC;EACpD,MAAMS,cAAc,GAAGX,UAAU,CAAC,aAAa,CAAC;EAChD,MAAMY,gBAAgB,GAAGR,iBAAiB,GAAGS,sBAAc,GAAGC,SAAS;;EAEvE;EACA,IAAIX,aAAa,EAAE;IACjB,IAAAY,YAAM,EAAC,MAAMC,eAAa,CAACC,EAAE,CAACC,KAAK,CAACC,KAAK,EAAE,eAAe,CAAC,CAAC;IAC5D;EACF;EAEA,MAAMC,YAAY,GAAG,IAAAJ,eAAa,EAAC;IAACP,UAAU;IAAEG;EAAgB,CAAC,CAAC,CAACL,IAAI,EAAEC,MAAM,CAAC;EAChF,IAAAO,YAAM,EAACK,YAAY,CAAC,CAACH,EAAE,CAACI,GAAG,CAACV,cAAc,CAAC;AAC7C"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _chai = require("chai");
|
|
4
|
+
var _marcRecord = require("@natlibfi/marc-record");
|
|
5
|
+
var _select = _interopRequireWildcard(require("./select"));
|
|
6
|
+
var _fixura = require("@natlibfi/fixura");
|
|
7
|
+
var _fixugen = _interopRequireDefault(require("@natlibfi/fixugen"));
|
|
8
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
9
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
10
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
11
|
+
_marcRecord.MarcRecord.setValidationOptions({
|
|
12
|
+
subfieldValues: false
|
|
13
|
+
});
|
|
14
|
+
(0, _fixugen.default)({
|
|
15
|
+
callback,
|
|
16
|
+
path: [__dirname, '..', '..', 'test-fixtures', 'reducers', 'select'],
|
|
17
|
+
useMetadataFile: true,
|
|
18
|
+
recurse: false,
|
|
19
|
+
fixura: {
|
|
20
|
+
reader: _fixura.READERS.JSON,
|
|
21
|
+
failWhenNotFound: false
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
function callback({
|
|
25
|
+
getFixture,
|
|
26
|
+
disabled = false,
|
|
27
|
+
tagPatternRegExp = false,
|
|
28
|
+
expectedError = false,
|
|
29
|
+
useSubsetEquality = false
|
|
30
|
+
}) {
|
|
31
|
+
if (disabled) {
|
|
32
|
+
console.log('TEST DISABLED!'); // eslint-disable-line no-console
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
// const base = new MarcRecord(getFixture('base.json'), {subfieldValues: false});
|
|
36
|
+
// const source = new MarcRecord(getFixture('source.json'), {subfieldValues: false});
|
|
37
|
+
|
|
38
|
+
const base = getFixture('base.json');
|
|
39
|
+
const source = getFixture('source.json');
|
|
40
|
+
const tagPattern = new RegExp(tagPatternRegExp, 'u');
|
|
41
|
+
const expectedRecord = getFixture('merged.json');
|
|
42
|
+
const equalityFunction = useSubsetEquality ? _select.subsetEquality : undefined;
|
|
43
|
+
|
|
44
|
+
// Bypass expected error in testing
|
|
45
|
+
if (expectedError) {
|
|
46
|
+
(0, _chai.expect)(() => _select.default.to.throw(Error, 'control field'));
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
const mergedRecord = (0, _select.default)({
|
|
50
|
+
tagPattern,
|
|
51
|
+
equalityFunction
|
|
52
|
+
})({
|
|
53
|
+
base,
|
|
54
|
+
source
|
|
55
|
+
});
|
|
56
|
+
(0, _chai.expect)(mergedRecord).to.eql(expectedRecord);
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=select2.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select2.spec.js","names":["MarcRecord","setValidationOptions","subfieldValues","generateTests","callback","path","__dirname","useMetadataFile","recurse","fixura","reader","READERS","JSON","failWhenNotFound","getFixture","disabled","tagPatternRegExp","expectedError","useSubsetEquality","console","log","base","source","tagPattern","RegExp","expectedRecord","equalityFunction","subsetEquality","undefined","expect","createReducer","to","throw","Error","mergedRecord","eql"],"sources":["../../src/reducers/select2.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport createReducer, {subsetEquality} from './select';\nimport {READERS} from '@natlibfi/fixura';\nimport generateTests from '@natlibfi/fixugen';\n\nMarcRecord.setValidationOptions({subfieldValues: false});\n\ngenerateTests({\n callback,\n path: [__dirname, '..', '..', 'test-fixtures', 'reducers', 'select'],\n useMetadataFile: true,\n recurse: false,\n fixura: {\n reader: READERS.JSON,\n failWhenNotFound: false\n }\n});\n\nfunction callback({\n getFixture,\n disabled = false,\n tagPatternRegExp = false,\n expectedError = false,\n useSubsetEquality = false\n}) {\n if (disabled) {\n console.log('TEST DISABLED!'); // eslint-disable-line no-console\n return;\n }\n // const base = new MarcRecord(getFixture('base.json'), {subfieldValues: false});\n // const source = new MarcRecord(getFixture('source.json'), {subfieldValues: false});\n\n const base = getFixture('base.json');\n const source = getFixture('source.json');\n\n const tagPattern = new RegExp(tagPatternRegExp, 'u');\n const expectedRecord = getFixture('merged.json');\n const equalityFunction = useSubsetEquality ? subsetEquality : undefined;\n\n // Bypass expected error in testing\n if (expectedError) {\n expect(() => createReducer.to.throw(Error, 'control field'));\n return;\n }\n\n const mergedRecord = createReducer({tagPattern, equalityFunction})({base, source});\n expect(mergedRecord).to.eql(expectedRecord);\n}\n"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AAA8C;AAAA;AAAA;AAE9CA,sBAAU,CAACC,oBAAoB,CAAC;EAACC,cAAc,EAAE;AAAK,CAAC,CAAC;AAExD,IAAAC,gBAAa,EAAC;EACZC,QAAQ;EACRC,IAAI,EAAE,CAACC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,eAAe,EAAE,UAAU,EAAE,QAAQ,CAAC;EACpEC,eAAe,EAAE,IAAI;EACrBC,OAAO,EAAE,KAAK;EACdC,MAAM,EAAE;IACNC,MAAM,EAAEC,eAAO,CAACC,IAAI;IACpBC,gBAAgB,EAAE;EACpB;AACF,CAAC,CAAC;AAEF,SAAST,QAAQ,CAAC;EAChBU,UAAU;EACVC,QAAQ,GAAG,KAAK;EAChBC,gBAAgB,GAAG,KAAK;EACxBC,aAAa,GAAG,KAAK;EACrBC,iBAAiB,GAAG;AACtB,CAAC,EAAE;EACD,IAAIH,QAAQ,EAAE;IACZI,OAAO,CAACC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAC/B;EACF;EACA;EACA;;EAEA,MAAMC,IAAI,GAAGP,UAAU,CAAC,WAAW,CAAC;EACpC,MAAMQ,MAAM,GAAGR,UAAU,CAAC,aAAa,CAAC;EAExC,MAAMS,UAAU,GAAG,IAAIC,MAAM,CAACR,gBAAgB,EAAE,GAAG,CAAC;EACpD,MAAMS,cAAc,GAAGX,UAAU,CAAC,aAAa,CAAC;EAChD,MAAMY,gBAAgB,GAAGR,iBAAiB,GAAGS,sBAAc,GAAGC,SAAS;;EAEvE;EACA,IAAIX,aAAa,EAAE;IACjB,IAAAY,YAAM,EAAC,MAAMC,eAAa,CAACC,EAAE,CAACC,KAAK,CAACC,KAAK,EAAE,eAAe,CAAC,CAAC;IAC5D;EACF;EAEA,MAAMC,YAAY,GAAG,IAAAJ,eAAa,EAAC;IAACP,UAAU;IAAEG;EAAgB,CAAC,CAAC,CAAC;IAACL,IAAI;IAAEC;EAAM,CAAC,CAAC;EAClF,IAAAO,YAAM,EAACK,YAAY,CAAC,CAACH,EAAE,CAACI,GAAG,CAACV,cAAc,CAAC;AAC7C"}
|