@natlibfi/marc-record-merge 5.0.0 → 6.0.0-beta.10
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 +90 -242
- package/dist/index.js +55 -0
- package/dist/index.js.map +1 -0
- package/dist/reducers/copy.js +249 -0
- package/dist/reducers/copy.js.map +1 -0
- package/dist/reducers/copy.spec.js +64 -0
- package/dist/reducers/copy.spec.js.map +1 -0
- package/dist/reducers/index.js +19 -0
- package/dist/reducers/index.js.map +1 -0
- package/dist/reducers/select.js +118 -0
- package/dist/reducers/select.js.map +1 -0
- package/dist/reducers/select.spec.js +55 -0
- package/dist/reducers/select.spec.js.map +1 -0
- package/package.json +101 -57
- package/src/index.js +34 -0
- package/src/reducers/copy.js +251 -0
- package/src/reducers/copy.spec.js +54 -0
- package/src/reducers/index.js +4 -0
- package/src/reducers/select.js +110 -0
- package/src/reducers/select.spec.js +49 -0
- package/test-fixtures/reducers/copy/01 - copy/01/base.json +9 -0
- package/test-fixtures/reducers/copy/01 - copy/01/merged.json +20 -0
- package/test-fixtures/reducers/copy/01 - copy/01/metadata.json +4 -0
- package/test-fixtures/reducers/copy/01 - copy/01/source.json +20 -0
- package/test-fixtures/reducers/copy/01 - copy/02/base.json +20 -0
- package/test-fixtures/reducers/copy/01 - copy/02/merged.json +20 -0
- package/test-fixtures/reducers/copy/01 - copy/02/metadata.json +4 -0
- package/test-fixtures/reducers/copy/01 - copy/02/source.json +20 -0
- package/test-fixtures/reducers/copy/01 - copy/03/base.json +20 -0
- package/test-fixtures/reducers/copy/01 - copy/03/merged.json +28 -0
- package/test-fixtures/reducers/copy/01 - copy/03/metadata.json +4 -0
- package/test-fixtures/reducers/copy/01 - copy/03/source.json +24 -0
- package/test-fixtures/reducers/copy/01 - copy/04/base.json +39 -0
- package/test-fixtures/reducers/copy/01 - copy/04/merged.json +39 -0
- package/test-fixtures/reducers/copy/01 - copy/04/metadata.json +4 -0
- package/test-fixtures/reducers/copy/01 - copy/04/source.json +39 -0
- package/test-fixtures/reducers/copy/01 - copy/05/base.json +39 -0
- 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/07 - excludeSubfields/01/source.json +43 -0
- package/test-fixtures/reducers/copy/07 - excludeSubfields/02/base.json +39 -0
- package/test-fixtures/reducers/copy/07 - excludeSubfields/02/merged.json +58 -0
- 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/base.json +21 -0
- package/test-fixtures/reducers/select/01/merged.json +20 -0
- package/test-fixtures/reducers/select/01/metadata.json +5 -0
- package/test-fixtures/reducers/select/01/source.json +20 -0
- package/test-fixtures/reducers/select/02/base.json +31 -0
- package/test-fixtures/reducers/select/02/merged.json +31 -0
- package/test-fixtures/reducers/select/02/metadata.json +4 -0
- package/test-fixtures/reducers/select/02/source.json +42 -0
- package/test-fixtures/reducers/select/03/base.json +20 -0
- package/test-fixtures/reducers/select/03/merged.json +20 -0
- package/test-fixtures/reducers/select/03/metadata.json +4 -0
- package/test-fixtures/reducers/select/03/source.json +20 -0
- package/test-fixtures/reducers/select/04/base.json +20 -0
- package/test-fixtures/reducers/select/04/merged.json +20 -0
- package/test-fixtures/reducers/select/04/metadata.json +5 -0
- package/test-fixtures/reducers/select/04/source.json +20 -0
- package/test-fixtures/reducers/select/05/base.json +24 -0
- package/test-fixtures/reducers/select/05/merged.json +24 -0
- package/test-fixtures/reducers/select/05/metadata.json +4 -0
- package/test-fixtures/reducers/select/05/source.json +24 -0
- package/test-fixtures/reducers/select/06/base.json +28 -0
- package/test-fixtures/reducers/select/06/merged.json +28 -0
- package/test-fixtures/reducers/select/06/metadata.json +4 -0
- package/test-fixtures/reducers/select/06/source.json +28 -0
- package/test-fixtures/reducers/select/07/base.json +24 -0
- package/test-fixtures/reducers/select/07/merged.json +24 -0
- package/test-fixtures/reducers/select/07/metadata.json +5 -0
- package/test-fixtures/reducers/select/07/source.json +24 -0
- package/test-fixtures/reducers/select/08/base.json +24 -0
- package/test-fixtures/reducers/select/08/merged.json +24 -0
- package/test-fixtures/reducers/select/08/metadata.json +4 -0
- package/test-fixtures/reducers/select/08/source.json +24 -0
- package/test-fixtures/reducers/select/09/base.json +24 -0
- package/test-fixtures/reducers/select/09/merged.json +24 -0
- package/test-fixtures/reducers/select/09/metadata.json +4 -0
- package/test-fixtures/reducers/select/09/source.json +24 -0
- package/test-fixtures/reducers/select/10/base.json +24 -0
- package/test-fixtures/reducers/select/10/merged.json +28 -0
- package/test-fixtures/reducers/select/10/metadata.json +5 -0
- package/test-fixtures/reducers/select/10/source.json +28 -0
- package/test-fixtures/reducers/select/11/base.json +24 -0
- package/test-fixtures/reducers/select/11/merged.json +24 -0
- package/test-fixtures/reducers/select/11/metadata.json +4 -0
- package/test-fixtures/reducers/select/11/source.json +28 -0
- package/test-fixtures/reducers/select/12/base.json +24 -0
- package/test-fixtures/reducers/select/12/merged.json +28 -0
- package/test-fixtures/reducers/select/12/metadata.json +5 -0
- package/test-fixtures/reducers/select/12/source.json +28 -0
- package/test-fixtures/reducers/select/13/base.json +28 -0
- package/test-fixtures/reducers/select/13/merged.json +28 -0
- package/test-fixtures/reducers/select/13/metadata.json +4 -0
- package/test-fixtures/reducers/select/13/source.json +24 -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/.editorconfig +0 -10
- package/.istanbul.yml +0 -6
- package/.jshintignore +0 -2
- package/.jshintrc +0 -3
- package/.travis.yml +0 -16
- package/LICENSE.txt +0 -661
- package/karma.conf.js +0 -39
- package/lib/main.js +0 -1215
- package/resources/action-copy-options-schema.json +0 -81
- package/resources/action-select-better-options-schema.json +0 -34
- package/resources/configuration-schema.json +0 -46
- package/test/browser/main.spec.js +0 -96
- package/test/nodejs/main.spec.js +0 -71
- package/test/suites/74.json +0 -10
- package/test/suites/config/1to3.json +0 -10
- package/test/suites/config/27to28.json +0 -10
- package/test/suites/config/29to31.json +0 -10
- package/test/suites/config/32to40.json +0 -16
- package/test/suites/config/41to43.json +0 -10
- package/test/suites/config/44to56.json +0 -15
- package/test/suites/config/4to26.json +0 -81
- package/test/suites/config/57to63.json +0 -63
- package/test/suites/config/64.json +0 -7
- package/test/suites/config/65.json +0 -19
- package/test/suites/config/66.json +0 -13
- package/test/suites/config/67.json +0 -14
- package/test/suites/config/68.json +0 -12
- package/test/suites/config/69.json +0 -12
- package/test/suites/config/70.json +0 -13
- package/test/suites/config/71.json +0 -10
- package/test/suites/config/72.json +0 -12
- package/test/suites/config/73.json +0 -10
- package/test/suites/config/76.json +0 -13
- package/test/suites/config/77.json +0 -11
- package/test/suites/config/78to79.json +0 -12
- package/test/suites/config/80to81.json +0 -12
- package/test/suites/config/82.json +0 -10
- package/test/suites/config/83to85.json +0 -15
- package/test/suites/config/86.json +0 -16
- package/test/suites/config/87.json +0 -15
- package/test/suites/config/88.json +0 -16
- package/test/suites/data/1/merged +0 -3
- package/test/suites/data/1/other +0 -3
- package/test/suites/data/1/preferred +0 -2
- package/test/suites/data/10/descr +0 -1
- package/test/suites/data/10/merged +0 -2
- package/test/suites/data/10/other +0 -2
- package/test/suites/data/10/preferred +0 -2
- package/test/suites/data/11/descr +0 -1
- package/test/suites/data/11/merged +0 -2
- package/test/suites/data/11/other +0 -2
- package/test/suites/data/11/preferred +0 -2
- package/test/suites/data/12/descr +0 -1
- package/test/suites/data/12/merged +0 -2
- package/test/suites/data/12/other +0 -2
- package/test/suites/data/12/preferred +0 -2
- package/test/suites/data/13/descr +0 -1
- package/test/suites/data/13/merged +0 -3
- package/test/suites/data/13/other +0 -2
- package/test/suites/data/13/preferred +0 -3
- package/test/suites/data/14/descr +0 -1
- package/test/suites/data/14/merged +0 -2
- package/test/suites/data/14/other +0 -2
- package/test/suites/data/14/preferred +0 -2
- package/test/suites/data/15/descr +0 -1
- package/test/suites/data/15/merged +0 -2
- package/test/suites/data/15/other +0 -2
- package/test/suites/data/15/preferred +0 -2
- package/test/suites/data/16/descr +0 -1
- package/test/suites/data/16/merged +0 -2
- package/test/suites/data/16/other +0 -2
- package/test/suites/data/16/preferred +0 -2
- package/test/suites/data/17/descr +0 -1
- package/test/suites/data/17/merged +0 -2
- package/test/suites/data/17/other +0 -2
- package/test/suites/data/17/preferred +0 -2
- package/test/suites/data/18/descr +0 -1
- package/test/suites/data/18/merged +0 -2
- package/test/suites/data/18/other +0 -2
- package/test/suites/data/18/preferred +0 -2
- package/test/suites/data/19/descr +0 -1
- package/test/suites/data/19/merged +0 -2
- package/test/suites/data/19/other +0 -2
- package/test/suites/data/19/preferred +0 -2
- package/test/suites/data/2/merged +0 -3
- package/test/suites/data/2/other +0 -2
- package/test/suites/data/2/preferred +0 -3
- package/test/suites/data/20/descr +0 -1
- package/test/suites/data/20/merged +0 -3
- package/test/suites/data/20/other +0 -2
- package/test/suites/data/20/preferred +0 -2
- package/test/suites/data/21/descr +0 -1
- package/test/suites/data/21/merged +0 -4
- package/test/suites/data/21/other +0 -4
- package/test/suites/data/21/preferred +0 -3
- package/test/suites/data/22/descr +0 -1
- package/test/suites/data/22/merged +0 -10
- package/test/suites/data/22/other +0 -7
- package/test/suites/data/22/preferred +0 -10
- package/test/suites/data/23/descr +0 -1
- package/test/suites/data/23/merged +0 -2
- package/test/suites/data/23/other +0 -2
- package/test/suites/data/23/preferred +0 -2
- package/test/suites/data/24/descr +0 -1
- package/test/suites/data/24/merged +0 -2
- package/test/suites/data/24/other +0 -2
- package/test/suites/data/24/preferred +0 -2
- package/test/suites/data/25/descr +0 -1
- package/test/suites/data/25/merged +0 -2
- package/test/suites/data/25/other +0 -2
- package/test/suites/data/25/preferred +0 -2
- package/test/suites/data/26/descr +0 -1
- package/test/suites/data/26/merged +0 -3
- package/test/suites/data/26/other +0 -3
- package/test/suites/data/26/preferred +0 -3
- package/test/suites/data/27/merged +0 -3
- package/test/suites/data/27/other +0 -2
- package/test/suites/data/27/preferred +0 -2
- package/test/suites/data/28/merged +0 -3
- package/test/suites/data/28/other +0 -2
- package/test/suites/data/28/preferred +0 -2
- package/test/suites/data/29/merged +0 -2
- package/test/suites/data/29/other +0 -2
- package/test/suites/data/29/preferred +0 -2
- package/test/suites/data/3/merged +0 -3
- package/test/suites/data/3/other +0 -3
- package/test/suites/data/3/preferred +0 -3
- package/test/suites/data/30/merged +0 -3
- package/test/suites/data/30/other +0 -2
- package/test/suites/data/30/preferred +0 -2
- package/test/suites/data/31/merged +0 -3
- package/test/suites/data/31/other +0 -2
- package/test/suites/data/31/preferred +0 -3
- package/test/suites/data/32/other +0 -2
- package/test/suites/data/32/preferred +0 -3
- package/test/suites/data/33/merged +0 -2
- package/test/suites/data/33/other +0 -2
- package/test/suites/data/33/preferred +0 -2
- package/test/suites/data/34/merged +0 -2
- package/test/suites/data/34/other +0 -2
- package/test/suites/data/34/preferred +0 -2
- package/test/suites/data/35/merged +0 -2
- package/test/suites/data/35/other +0 -2
- package/test/suites/data/35/preferred +0 -2
- package/test/suites/data/36/merged +0 -2
- package/test/suites/data/36/other +0 -2
- package/test/suites/data/36/preferred +0 -2
- package/test/suites/data/37/merged +0 -3
- package/test/suites/data/37/other +0 -2
- package/test/suites/data/37/preferred +0 -2
- package/test/suites/data/38/merged +0 -3
- package/test/suites/data/38/other +0 -2
- package/test/suites/data/38/preferred +0 -2
- package/test/suites/data/39/merged +0 -2
- package/test/suites/data/39/other +0 -2
- package/test/suites/data/39/preferred +0 -2
- package/test/suites/data/4/descr +0 -1
- package/test/suites/data/4/merged +0 -2
- package/test/suites/data/4/other +0 -2
- package/test/suites/data/4/preferred +0 -2
- package/test/suites/data/40/merged +0 -2
- package/test/suites/data/40/other +0 -2
- package/test/suites/data/40/preferred +0 -2
- package/test/suites/data/41/merged +0 -2
- package/test/suites/data/41/other +0 -2
- package/test/suites/data/41/preferred +0 -2
- package/test/suites/data/42/merged +0 -2
- package/test/suites/data/42/other +0 -2
- package/test/suites/data/42/preferred +0 -2
- package/test/suites/data/43/merged +0 -2
- package/test/suites/data/43/other +0 -2
- package/test/suites/data/43/preferred +0 -2
- package/test/suites/data/44/merged +0 -2
- package/test/suites/data/44/other +0 -2
- package/test/suites/data/44/preferred +0 -2
- package/test/suites/data/45/merged +0 -2
- package/test/suites/data/45/other +0 -2
- package/test/suites/data/45/preferred +0 -2
- package/test/suites/data/46/merged +0 -2
- package/test/suites/data/46/other +0 -2
- package/test/suites/data/46/preferred +0 -2
- package/test/suites/data/47/merged +0 -2
- package/test/suites/data/47/other +0 -2
- package/test/suites/data/47/preferred +0 -2
- package/test/suites/data/48/merged +0 -2
- package/test/suites/data/48/other +0 -2
- package/test/suites/data/48/preferred +0 -2
- package/test/suites/data/49/merged +0 -3
- package/test/suites/data/49/other +0 -2
- package/test/suites/data/49/preferred +0 -2
- package/test/suites/data/5/descr +0 -1
- package/test/suites/data/5/merged +0 -2
- package/test/suites/data/5/other +0 -2
- package/test/suites/data/5/preferred +0 -2
- package/test/suites/data/50/merged +0 -3
- package/test/suites/data/50/other +0 -2
- package/test/suites/data/50/preferred +0 -2
- package/test/suites/data/51/merged +0 -3
- package/test/suites/data/51/other +0 -2
- package/test/suites/data/51/preferred +0 -2
- package/test/suites/data/52/merged +0 -2
- package/test/suites/data/52/other +0 -2
- package/test/suites/data/52/preferred +0 -2
- package/test/suites/data/53/merged +0 -3
- package/test/suites/data/53/other +0 -2
- package/test/suites/data/53/preferred +0 -2
- package/test/suites/data/54/merged +0 -3
- package/test/suites/data/54/other +0 -2
- package/test/suites/data/54/preferred +0 -2
- package/test/suites/data/55/merged +0 -3
- package/test/suites/data/55/other +0 -2
- package/test/suites/data/55/preferred +0 -2
- package/test/suites/data/56/merged +0 -2
- package/test/suites/data/56/other +0 -2
- package/test/suites/data/56/preferred +0 -2
- package/test/suites/data/57/descr +0 -1
- package/test/suites/data/57/merged +0 -4
- package/test/suites/data/57/other +0 -4
- package/test/suites/data/57/preferred +0 -4
- package/test/suites/data/58/descr +0 -1
- package/test/suites/data/58/merged +0 -2
- package/test/suites/data/58/other +0 -2
- package/test/suites/data/58/preferred +0 -2
- package/test/suites/data/59/descr +0 -1
- package/test/suites/data/59/merged +0 -2
- package/test/suites/data/59/other +0 -2
- package/test/suites/data/59/preferred +0 -2
- package/test/suites/data/6/descr +0 -1
- package/test/suites/data/6/merged +0 -2
- package/test/suites/data/6/other +0 -3
- package/test/suites/data/6/preferred +0 -2
- package/test/suites/data/60/descr +0 -1
- package/test/suites/data/60/merged +0 -2
- package/test/suites/data/60/other +0 -2
- package/test/suites/data/60/preferred +0 -2
- package/test/suites/data/61/descr +0 -1
- package/test/suites/data/61/merged +0 -2
- package/test/suites/data/61/other +0 -2
- package/test/suites/data/61/preferred +0 -2
- package/test/suites/data/62/descr +0 -1
- package/test/suites/data/62/merged +0 -3
- package/test/suites/data/62/other +0 -2
- package/test/suites/data/62/preferred +0 -2
- package/test/suites/data/63/descr +0 -1
- package/test/suites/data/63/merged +0 -3
- package/test/suites/data/63/other +0 -2
- package/test/suites/data/63/preferred +0 -2
- package/test/suites/data/64/merged +0 -2
- package/test/suites/data/64/other +0 -2
- package/test/suites/data/64/preferred +0 -2
- package/test/suites/data/65/merged +0 -3
- package/test/suites/data/65/other +0 -2
- package/test/suites/data/65/preferred +0 -2
- package/test/suites/data/66/merged +0 -2
- package/test/suites/data/66/other +0 -2
- package/test/suites/data/66/preferred +0 -2
- package/test/suites/data/67/merged +0 -2
- package/test/suites/data/67/other +0 -2
- package/test/suites/data/67/preferred +0 -2
- package/test/suites/data/68/merged +0 -2
- package/test/suites/data/68/other +0 -2
- package/test/suites/data/68/preferred +0 -2
- package/test/suites/data/69/merged +0 -2
- package/test/suites/data/69/other +0 -2
- package/test/suites/data/69/preferred +0 -2
- package/test/suites/data/7/descr +0 -1
- package/test/suites/data/7/merged +0 -4
- package/test/suites/data/7/other +0 -3
- package/test/suites/data/7/preferred +0 -3
- package/test/suites/data/70/merged +0 -2
- package/test/suites/data/70/other +0 -2
- package/test/suites/data/70/preferred +0 -2
- package/test/suites/data/71/merged +0 -3
- package/test/suites/data/71/other +0 -2
- package/test/suites/data/71/preferred +0 -2
- package/test/suites/data/72/merged +0 -5
- package/test/suites/data/72/other +0 -2
- package/test/suites/data/72/preferred +0 -4
- package/test/suites/data/73/merged +0 -3
- package/test/suites/data/73/other +0 -3
- package/test/suites/data/73/preferred +0 -3
- package/test/suites/data/74/1/merged +0 -3
- package/test/suites/data/74/1/other +0 -3
- package/test/suites/data/74/1/preferred +0 -2
- package/test/suites/data/74/merged +0 -4
- package/test/suites/data/74/other +0 -4
- package/test/suites/data/74/preferred +0 -2
- package/test/suites/data/75/74/1/merged +0 -3
- package/test/suites/data/75/74/1/other +0 -3
- package/test/suites/data/75/74/1/preferred +0 -2
- package/test/suites/data/75/74/merged +0 -4
- package/test/suites/data/75/74/other +0 -4
- package/test/suites/data/75/74/preferred +0 -2
- package/test/suites/data/75/merged +0 -4
- package/test/suites/data/75/other +0 -3
- package/test/suites/data/75/preferred +0 -2
- package/test/suites/data/76/merged +0 -2
- package/test/suites/data/76/other +0 -2
- package/test/suites/data/76/preferred +0 -2
- package/test/suites/data/77/descr +0 -1
- package/test/suites/data/77/merged +0 -2
- package/test/suites/data/77/other +0 -2
- package/test/suites/data/77/preferred +0 -2
- package/test/suites/data/78/merged +0 -3
- package/test/suites/data/78/other +0 -2
- package/test/suites/data/78/preferred +0 -2
- package/test/suites/data/79/merged +0 -2
- package/test/suites/data/79/other +0 -2
- package/test/suites/data/79/preferred +0 -2
- package/test/suites/data/8/descr +0 -1
- package/test/suites/data/8/merged +0 -3
- package/test/suites/data/8/other +0 -3
- package/test/suites/data/8/preferred +0 -3
- package/test/suites/data/80/merged +0 -3
- package/test/suites/data/80/other +0 -2
- package/test/suites/data/80/preferred +0 -2
- package/test/suites/data/81/merged +0 -2
- package/test/suites/data/81/other +0 -2
- package/test/suites/data/81/preferred +0 -2
- package/test/suites/data/82/merged +0 -2
- package/test/suites/data/82/other +0 -2
- package/test/suites/data/82/preferred +0 -2
- package/test/suites/data/83/merged +0 -2
- package/test/suites/data/83/other +0 -2
- package/test/suites/data/83/preferred +0 -1
- package/test/suites/data/84/merged +0 -2
- package/test/suites/data/84/other +0 -2
- package/test/suites/data/84/preferred +0 -1
- package/test/suites/data/85/merged +0 -2
- package/test/suites/data/85/other +0 -2
- package/test/suites/data/85/preferred +0 -2
- package/test/suites/data/86/merged +0 -2
- package/test/suites/data/86/other +0 -2
- package/test/suites/data/86/preferred +0 -1
- package/test/suites/data/87/merged +0 -2
- package/test/suites/data/87/other +0 -2
- package/test/suites/data/87/preferred +0 -1
- package/test/suites/data/88/merged +0 -2
- package/test/suites/data/88/other +0 -2
- package/test/suites/data/88/preferred +0 -1
- package/test/suites/data/9/descr +0 -1
- package/test/suites/data/9/merged +0 -2
- package/test/suites/data/9/other +0 -2
- package/test/suites/data/9/preferred +0 -2
- package/test/test.js +0 -1001
package/lib/main.js
DELETED
|
@@ -1,1215 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
* @licstart The following is the entire license notice for the JavaScript code in this file.
|
|
4
|
-
*
|
|
5
|
-
* A configurable Javascript module for merging MARC records
|
|
6
|
-
*
|
|
7
|
-
* Copyright (c) 2015-2017 University Of Helsinki (The National Library Of Finland)
|
|
8
|
-
*
|
|
9
|
-
* This file is part of marc-record-merge
|
|
10
|
-
*
|
|
11
|
-
* marc-record-merge is free software: you can redistribute it and/or modify
|
|
12
|
-
* it under the terms of the GNU Affero General Public License as
|
|
13
|
-
* published by the Free Software Foundation, either version 3 of the
|
|
14
|
-
* License, or (at your option) any later version.
|
|
15
|
-
*
|
|
16
|
-
* This program is distributed in the hope that it will be useful,
|
|
17
|
-
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
18
|
-
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
19
|
-
* GNU Affero General Public License for more details.
|
|
20
|
-
*
|
|
21
|
-
* You should have received a copy of the GNU Affero General Public License
|
|
22
|
-
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
23
|
-
*
|
|
24
|
-
* @licend The above is the entire license notice
|
|
25
|
-
* for the JavaScript code in this file.
|
|
26
|
-
*
|
|
27
|
-
**/
|
|
28
|
-
|
|
29
|
-
/* istanbul ignore next: umd wrapper */
|
|
30
|
-
(function (root, factory) {
|
|
31
|
-
|
|
32
|
-
'use strict';
|
|
33
|
-
|
|
34
|
-
if (typeof define === 'function' && define.amd) {
|
|
35
|
-
define([
|
|
36
|
-
'@natlibfi/es6-polyfills/lib/polyfills/object',
|
|
37
|
-
'@natlibfi/es6-shims/lib/shims/array',
|
|
38
|
-
'marc-record-js'
|
|
39
|
-
], factory);
|
|
40
|
-
} else if (typeof module === 'object' && module.exports) {
|
|
41
|
-
module.exports = factory(
|
|
42
|
-
require('@natlibfi/es6-polyfills/lib/polyfills/object'),
|
|
43
|
-
require('@natlibfi/es6-shims/lib/shims/array'),
|
|
44
|
-
require('marc-record-js')
|
|
45
|
-
);
|
|
46
|
-
} else {
|
|
47
|
-
root.mergeMarcRecordsFactory = factory(
|
|
48
|
-
root.Object,
|
|
49
|
-
root.es6_array_shim,
|
|
50
|
-
root.MarcRecord
|
|
51
|
-
);
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
}(this, factory));
|
|
55
|
-
|
|
56
|
-
function factory(Object, shim_array, MarcRecord)
|
|
57
|
-
{
|
|
58
|
-
|
|
59
|
-
"use strict";
|
|
60
|
-
|
|
61
|
-
var DEFAULT_OPTIONS = {
|
|
62
|
-
sort: {
|
|
63
|
-
insert: 'after'
|
|
64
|
-
}
|
|
65
|
-
},
|
|
66
|
-
DIACRITICS_REMOVAL_MAP = [
|
|
67
|
-
{'base':'A', 'letters':'\u0041\u24B6\uFF21\u00C0\u00C1\u00C2\u1EA6\u1EA4\u1EAA\u1EA8\u00C3\u0100\u0102\u1EB0\u1EAE\u1EB4\u1EB2\u0226\u01E0\u00C4\u01DE\u1EA2\u00C5\u01FA\u01CD\u0200\u0202\u1EA0\u1EAC\u1EB6\u1E00\u0104\u023A\u2C6F'},
|
|
68
|
-
{'base':'AA','letters':'\uA732'},
|
|
69
|
-
{'base':'AE','letters':'\u00C6\u01FC\u01E2'},
|
|
70
|
-
{'base':'AO','letters':'\uA734'},
|
|
71
|
-
{'base':'AU','letters':'\uA736'},
|
|
72
|
-
{'base':'AV','letters':'\uA738\uA73A'},
|
|
73
|
-
{'base':'AY','letters':'\uA73C'},
|
|
74
|
-
{'base':'B', 'letters':'\u0042\u24B7\uFF22\u1E02\u1E04\u1E06\u0243\u0182\u0181'},
|
|
75
|
-
{'base':'C', 'letters':'\u0043\u24B8\uFF23\u0106\u0108\u010A\u010C\u00C7\u1E08\u0187\u023B\uA73E'},
|
|
76
|
-
{'base':'D', 'letters':'\u0044\u24B9\uFF24\u1E0A\u010E\u1E0C\u1E10\u1E12\u1E0E\u0110\u018B\u018A\u0189\uA779'},
|
|
77
|
-
{'base':'DZ','letters':'\u01F1\u01C4'},
|
|
78
|
-
{'base':'Dz','letters':'\u01F2\u01C5'},
|
|
79
|
-
{'base':'E', 'letters':'\u0045\u24BA\uFF25\u00C8\u00C9\u00CA\u1EC0\u1EBE\u1EC4\u1EC2\u1EBC\u0112\u1E14\u1E16\u0114\u0116\u00CB\u1EBA\u011A\u0204\u0206\u1EB8\u1EC6\u0228\u1E1C\u0118\u1E18\u1E1A\u0190\u018E'},
|
|
80
|
-
{'base':'F', 'letters':'\u0046\u24BB\uFF26\u1E1E\u0191\uA77B'},
|
|
81
|
-
{'base':'G', 'letters':'\u0047\u24BC\uFF27\u01F4\u011C\u1E20\u011E\u0120\u01E6\u0122\u01E4\u0193\uA7A0\uA77D\uA77E'},
|
|
82
|
-
{'base':'H', 'letters':'\u0048\u24BD\uFF28\u0124\u1E22\u1E26\u021E\u1E24\u1E28\u1E2A\u0126\u2C67\u2C75\uA78D'},
|
|
83
|
-
{'base':'I', 'letters':'\u0049\u24BE\uFF29\u00CC\u00CD\u00CE\u0128\u012A\u012C\u0130\u00CF\u1E2E\u1EC8\u01CF\u0208\u020A\u1ECA\u012E\u1E2C\u0197'},
|
|
84
|
-
{'base':'J', 'letters':'\u004A\u24BF\uFF2A\u0134\u0248'},
|
|
85
|
-
{'base':'K', 'letters':'\u004B\u24C0\uFF2B\u1E30\u01E8\u1E32\u0136\u1E34\u0198\u2C69\uA740\uA742\uA744\uA7A2'},
|
|
86
|
-
{'base':'L', 'letters':'\u004C\u24C1\uFF2C\u013F\u0139\u013D\u1E36\u1E38\u013B\u1E3C\u1E3A\u0141\u023D\u2C62\u2C60\uA748\uA746\uA780'},
|
|
87
|
-
{'base':'LJ','letters':'\u01C7'},
|
|
88
|
-
{'base':'Lj','letters':'\u01C8'},
|
|
89
|
-
{'base':'M', 'letters':'\u004D\u24C2\uFF2D\u1E3E\u1E40\u1E42\u2C6E\u019C'},
|
|
90
|
-
{'base':'N', 'letters':'\u004E\u24C3\uFF2E\u01F8\u0143\u00D1\u1E44\u0147\u1E46\u0145\u1E4A\u1E48\u0220\u019D\uA790\uA7A4'},
|
|
91
|
-
{'base':'NJ','letters':'\u01CA'},
|
|
92
|
-
{'base':'Nj','letters':'\u01CB'},
|
|
93
|
-
{'base':'O', 'letters':'\u004F\u24C4\uFF2F\u00D2\u00D3\u00D4\u1ED2\u1ED0\u1ED6\u1ED4\u00D5\u1E4C\u022C\u1E4E\u014C\u1E50\u1E52\u014E\u022E\u0230\u00D6\u022A\u1ECE\u0150\u01D1\u020C\u020E\u01A0\u1EDC\u1EDA\u1EE0\u1EDE\u1EE2\u1ECC\u1ED8\u01EA\u01EC\u00D8\u01FE\u0186\u019F\uA74A\uA74C'},
|
|
94
|
-
{'base':'OI','letters':'\u01A2'},
|
|
95
|
-
{'base':'OO','letters':'\uA74E'},
|
|
96
|
-
{'base':'OU','letters':'\u0222'},
|
|
97
|
-
{'base':'OE','letters':'\u008C\u0152'},
|
|
98
|
-
{'base':'oe','letters':'\u009C\u0153'},
|
|
99
|
-
{'base':'P', 'letters':'\u0050\u24C5\uFF30\u1E54\u1E56\u01A4\u2C63\uA750\uA752\uA754'},
|
|
100
|
-
{'base':'Q', 'letters':'\u0051\u24C6\uFF31\uA756\uA758\u024A'},
|
|
101
|
-
{'base':'R', 'letters':'\u0052\u24C7\uFF32\u0154\u1E58\u0158\u0210\u0212\u1E5A\u1E5C\u0156\u1E5E\u024C\u2C64\uA75A\uA7A6\uA782'},
|
|
102
|
-
{'base':'S', 'letters':'\u0053\u24C8\uFF33\u1E9E\u015A\u1E64\u015C\u1E60\u0160\u1E66\u1E62\u1E68\u0218\u015E\u2C7E\uA7A8\uA784'},
|
|
103
|
-
{'base':'T', 'letters':'\u0054\u24C9\uFF34\u1E6A\u0164\u1E6C\u021A\u0162\u1E70\u1E6E\u0166\u01AC\u01AE\u023E\uA786'},
|
|
104
|
-
{'base':'TZ','letters':'\uA728'},
|
|
105
|
-
{'base':'U', 'letters':'\u0055\u24CA\uFF35\u00D9\u00DA\u00DB\u0168\u1E78\u016A\u1E7A\u016C\u00DC\u01DB\u01D7\u01D5\u01D9\u1EE6\u016E\u0170\u01D3\u0214\u0216\u01AF\u1EEA\u1EE8\u1EEE\u1EEC\u1EF0\u1EE4\u1E72\u0172\u1E76\u1E74\u0244'},
|
|
106
|
-
{'base':'V', 'letters':'\u0056\u24CB\uFF36\u1E7C\u1E7E\u01B2\uA75E\u0245'},
|
|
107
|
-
{'base':'VY','letters':'\uA760'},
|
|
108
|
-
{'base':'W', 'letters':'\u0057\u24CC\uFF37\u1E80\u1E82\u0174\u1E86\u1E84\u1E88\u2C72'},
|
|
109
|
-
{'base':'X', 'letters':'\u0058\u24CD\uFF38\u1E8A\u1E8C'},
|
|
110
|
-
{'base':'Y', 'letters':'\u0059\u24CE\uFF39\u1EF2\u00DD\u0176\u1EF8\u0232\u1E8E\u0178\u1EF6\u1EF4\u01B3\u024E\u1EFE'},
|
|
111
|
-
{'base':'Z', 'letters':'\u005A\u24CF\uFF3A\u0179\u1E90\u017B\u017D\u1E92\u1E94\u01B5\u0224\u2C7F\u2C6B\uA762'},
|
|
112
|
-
{'base':'a', 'letters':'\u0061\u24D0\uFF41\u1E9A\u00E0\u00E1\u00E2\u1EA7\u1EA5\u1EAB\u1EA9\u00E3\u0101\u0103\u1EB1\u1EAF\u1EB5\u1EB3\u0227\u01E1\u00E4\u01DF\u1EA3\u00E5\u01FB\u01CE\u0201\u0203\u1EA1\u1EAD\u1EB7\u1E01\u0105\u2C65\u0250'},
|
|
113
|
-
{'base':'aa','letters':'\uA733'},
|
|
114
|
-
{'base':'ae','letters':'\u00E6\u01FD\u01E3'},
|
|
115
|
-
{'base':'ao','letters':'\uA735'},
|
|
116
|
-
{'base':'au','letters':'\uA737'},
|
|
117
|
-
{'base':'av','letters':'\uA739\uA73B'},
|
|
118
|
-
{'base':'ay','letters':'\uA73D'},
|
|
119
|
-
{'base':'b', 'letters':'\u0062\u24D1\uFF42\u1E03\u1E05\u1E07\u0180\u0183\u0253'},
|
|
120
|
-
{'base':'c', 'letters':'\u0063\u24D2\uFF43\u0107\u0109\u010B\u010D\u00E7\u1E09\u0188\u023C\uA73F\u2184'},
|
|
121
|
-
{'base':'d', 'letters':'\u0064\u24D3\uFF44\u1E0B\u010F\u1E0D\u1E11\u1E13\u1E0F\u0111\u018C\u0256\u0257\uA77A'},
|
|
122
|
-
{'base':'dz','letters':'\u01F3\u01C6'},
|
|
123
|
-
{'base':'e', 'letters':'\u0065\u24D4\uFF45\u00E8\u00E9\u00EA\u1EC1\u1EBF\u1EC5\u1EC3\u1EBD\u0113\u1E15\u1E17\u0115\u0117\u00EB\u1EBB\u011B\u0205\u0207\u1EB9\u1EC7\u0229\u1E1D\u0119\u1E19\u1E1B\u0247\u025B\u01DD'},
|
|
124
|
-
{'base':'f', 'letters':'\u0066\u24D5\uFF46\u1E1F\u0192\uA77C'},
|
|
125
|
-
{'base':'g', 'letters':'\u0067\u24D6\uFF47\u01F5\u011D\u1E21\u011F\u0121\u01E7\u0123\u01E5\u0260\uA7A1\u1D79\uA77F'},
|
|
126
|
-
{'base':'h', 'letters':'\u0068\u24D7\uFF48\u0125\u1E23\u1E27\u021F\u1E25\u1E29\u1E2B\u1E96\u0127\u2C68\u2C76\u0265'},
|
|
127
|
-
{'base':'hv','letters':'\u0195'},
|
|
128
|
-
{'base':'i', 'letters':'\u0069\u24D8\uFF49\u00EC\u00ED\u00EE\u0129\u012B\u012D\u00EF\u1E2F\u1EC9\u01D0\u0209\u020B\u1ECB\u012F\u1E2D\u0268\u0131'},
|
|
129
|
-
{'base':'j', 'letters':'\u006A\u24D9\uFF4A\u0135\u01F0\u0249'},
|
|
130
|
-
{'base':'k', 'letters':'\u006B\u24DA\uFF4B\u1E31\u01E9\u1E33\u0137\u1E35\u0199\u2C6A\uA741\uA743\uA745\uA7A3'},
|
|
131
|
-
{'base':'l', 'letters':'\u006C\u24DB\uFF4C\u0140\u013A\u013E\u1E37\u1E39\u013C\u1E3D\u1E3B\u017F\u0142\u019A\u026B\u2C61\uA749\uA781\uA747'},
|
|
132
|
-
{'base':'lj','letters':'\u01C9'},
|
|
133
|
-
{'base':'m', 'letters':'\u006D\u24DC\uFF4D\u1E3F\u1E41\u1E43\u0271\u026F'},
|
|
134
|
-
{'base':'n', 'letters':'\u006E\u24DD\uFF4E\u01F9\u0144\u00F1\u1E45\u0148\u1E47\u0146\u1E4B\u1E49\u019E\u0272\u0149\uA791\uA7A5'},
|
|
135
|
-
{'base':'nj','letters':'\u01CC'},
|
|
136
|
-
{'base':'o', 'letters':'\u006F\u24DE\uFF4F\u00F2\u00F3\u00F4\u1ED3\u1ED1\u1ED7\u1ED5\u00F5\u1E4D\u022D\u1E4F\u014D\u1E51\u1E53\u014F\u022F\u0231\u00F6\u022B\u1ECF\u0151\u01D2\u020D\u020F\u01A1\u1EDD\u1EDB\u1EE1\u1EDF\u1EE3\u1ECD\u1ED9\u01EB\u01ED\u00F8\u01FF\u0254\uA74B\uA74D\u0275'},
|
|
137
|
-
{'base':'oi','letters':'\u01A3'},
|
|
138
|
-
{'base':'ou','letters':'\u0223'},
|
|
139
|
-
{'base':'oo','letters':'\uA74F'},
|
|
140
|
-
{'base':'p','letters':'\u0070\u24DF\uFF50\u1E55\u1E57\u01A5\u1D7D\uA751\uA753\uA755'},
|
|
141
|
-
{'base':'q','letters':'\u0071\u24E0\uFF51\u024B\uA757\uA759'},
|
|
142
|
-
{'base':'r','letters':'\u0072\u24E1\uFF52\u0155\u1E59\u0159\u0211\u0213\u1E5B\u1E5D\u0157\u1E5F\u024D\u027D\uA75B\uA7A7\uA783'},
|
|
143
|
-
{'base':'s','letters':'\u0073\u24E2\uFF53\u00DF\u015B\u1E65\u015D\u1E61\u0161\u1E67\u1E63\u1E69\u0219\u015F\u023F\uA7A9\uA785\u1E9B'},
|
|
144
|
-
{'base':'t','letters':'\u0074\u24E3\uFF54\u1E6B\u1E97\u0165\u1E6D\u021B\u0163\u1E71\u1E6F\u0167\u01AD\u0288\u2C66\uA787'},
|
|
145
|
-
{'base':'tz','letters':'\uA729'},
|
|
146
|
-
{'base':'u','letters': '\u0075\u24E4\uFF55\u00F9\u00FA\u00FB\u0169\u1E79\u016B\u1E7B\u016D\u00FC\u01DC\u01D8\u01D6\u01DA\u1EE7\u016F\u0171\u01D4\u0215\u0217\u01B0\u1EEB\u1EE9\u1EEF\u1EED\u1EF1\u1EE5\u1E73\u0173\u1E77\u1E75\u0289'},
|
|
147
|
-
{'base':'v','letters':'\u0076\u24E5\uFF56\u1E7D\u1E7F\u028B\uA75F\u028C'},
|
|
148
|
-
{'base':'vy','letters':'\uA761'},
|
|
149
|
-
{'base':'w','letters':'\u0077\u24E6\uFF57\u1E81\u1E83\u0175\u1E87\u1E85\u1E98\u1E89\u2C73'},
|
|
150
|
-
{'base':'x','letters':'\u0078\u24E7\uFF58\u1E8B\u1E8D'},
|
|
151
|
-
{'base':'y','letters':'\u0079\u24E8\uFF59\u1EF3\u00FD\u0177\u1EF9\u0233\u1E8F\u00FF\u1EF7\u1E99\u1EF5\u01B4\u024F\u1EFF'},
|
|
152
|
-
{'base':'z','letters':'\u007A\u24E9\uFF5A\u017A\u1E91\u017C\u017E\u1E93\u1E95\u01B6\u0225\u0240\u2C6C\uA763'}
|
|
153
|
-
];
|
|
154
|
-
|
|
155
|
-
var diacritics_removal_map = DIACRITICS_REMOVAL_MAP.reduce(function(result, element) {
|
|
156
|
-
|
|
157
|
-
element.letters.split('').forEach(function(letter) {
|
|
158
|
-
result[letter] = element.base;
|
|
159
|
-
});
|
|
160
|
-
|
|
161
|
-
return result;
|
|
162
|
-
|
|
163
|
-
}, {});
|
|
164
|
-
|
|
165
|
-
return function(configuration, plugins)
|
|
166
|
-
{
|
|
167
|
-
|
|
168
|
-
var actions = {
|
|
169
|
-
controlfield: actionControlfield,
|
|
170
|
-
copy: actionCopy,
|
|
171
|
-
selectBetter: actionSelectBetter,
|
|
172
|
-
mergeControlfield: actionMergeControlfield,
|
|
173
|
-
createFrom: actionCreateFrom
|
|
174
|
-
},
|
|
175
|
-
comparators = {
|
|
176
|
-
substring: subfieldSubstringComparator,
|
|
177
|
-
equality: subfieldEquality
|
|
178
|
-
},
|
|
179
|
-
stringOperations = {
|
|
180
|
-
copy: stringOperationCopy,
|
|
181
|
-
replace: stringOperationReplace,
|
|
182
|
-
wrap: stringOperationWrap,
|
|
183
|
-
prepend: stringOperationPrepend,
|
|
184
|
-
append: stringOperationAppend
|
|
185
|
-
};
|
|
186
|
-
|
|
187
|
-
function applyPlugins(obj, name)
|
|
188
|
-
{
|
|
189
|
-
if (typeof plugins === 'object') {
|
|
190
|
-
|
|
191
|
-
if (typeof plugins.actions === 'object') {
|
|
192
|
-
Object.keys(plugins.actions).filter(function(key) {
|
|
193
|
-
return typeof plugins.actions[key] === 'function';
|
|
194
|
-
}).forEach(function(key) {
|
|
195
|
-
actions[key] = plugins.actions[key];
|
|
196
|
-
});
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
if (typeof plugins.comparators === 'object') {
|
|
200
|
-
Object.keys(plugins.comparators).filter(function(key) {
|
|
201
|
-
return typeof plugins.comparators[key] === 'function';
|
|
202
|
-
}).forEach(function(key) {
|
|
203
|
-
comparators[key] = plugins.comparators[key];
|
|
204
|
-
});
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
if (typeof plugins.comparators === 'object') {
|
|
208
|
-
Object.keys(plugins.comparators).filter(function(key) {
|
|
209
|
-
return typeof plugins.comparators[key] === 'function';
|
|
210
|
-
}).forEach(function(key) {
|
|
211
|
-
comparators[key] = plugins.comparators[key];
|
|
212
|
-
});
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
function stringOperationCopy(value) {
|
|
218
|
-
return value;
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
function stringOperationReplace(value, args) {
|
|
222
|
-
return value.replace(args[0], args[1]);
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
function stringOperationWrap(value, args) {
|
|
226
|
-
return args[0] + value + args[1];
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
function stringOperationPrepend(value, args) {
|
|
230
|
-
return args[0] + value;
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
function stringOperationAppend(value, args) {
|
|
234
|
-
return value + args[0];
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
function subfieldSubstringComparator(subfield1, subfield2) {
|
|
238
|
-
return subfield1.code == subfield2.code && (subfield1.value.indexOf(subfield2.value) >= 0 || subfield2.value.indexOf(subfield1.value) >= 0);
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
function subfieldEquality(subfield1, subfield2) {
|
|
242
|
-
return subfield1.code == subfield2.code && subfield1.value == subfield2.value;
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
function arrayDifference(a1, a2, equalityFunction)
|
|
246
|
-
{
|
|
247
|
-
|
|
248
|
-
equalityFunction = typeof equalityFunction === 'function' ? equalityFunction : function(a, b) {
|
|
249
|
-
return a === b;
|
|
250
|
-
};
|
|
251
|
-
|
|
252
|
-
return a1.filter(function(element) {
|
|
253
|
-
return shim_array.find(a2, function(element2) {
|
|
254
|
-
return equalityFunction(element, element2);
|
|
255
|
-
}) === undefined;
|
|
256
|
-
});
|
|
257
|
-
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
function arraysIdentical(a1, a2, equalityFunction)
|
|
261
|
-
{
|
|
262
|
-
return arrayDifference(a1, a2, equalityFunction).length === 0 && arrayDifference(a2, a1, equalityFunction).length === 0;
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
function clone(obj)
|
|
266
|
-
{
|
|
267
|
-
return JSON.parse(JSON.stringify(obj));
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
function getCompareWithoutSubfields(field, options) {
|
|
271
|
-
|
|
272
|
-
var subfields = [];
|
|
273
|
-
|
|
274
|
-
if (options.compareWithout) {
|
|
275
|
-
|
|
276
|
-
subfields = field.subfields.filter(function(subfield) {
|
|
277
|
-
return options.compareWithout.indexOf(subfield.code) !== -1;
|
|
278
|
-
});
|
|
279
|
-
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
return subfields;
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
/**
|
|
286
|
-
* Try to make a list of equal pairs from both subfield arrays using a comparator function
|
|
287
|
-
**/
|
|
288
|
-
function makeSubfieldPairs(subfields1, subfields2, fn_comparator) {
|
|
289
|
-
|
|
290
|
-
var pairs = [];
|
|
291
|
-
|
|
292
|
-
if (subfields1.length === subfields2.length) {
|
|
293
|
-
|
|
294
|
-
subfields2.forEach(function(subfield2) {
|
|
295
|
-
return subfields1.some(function(subfield1) {
|
|
296
|
-
if (fn_comparator(subfield1, subfield2)) {
|
|
297
|
-
|
|
298
|
-
pairs.push([subfield1, subfield2]);
|
|
299
|
-
return true;
|
|
300
|
-
|
|
301
|
-
}
|
|
302
|
-
});
|
|
303
|
-
});
|
|
304
|
-
|
|
305
|
-
} else {
|
|
306
|
-
throw new Error('Number of subfields are not equal');
|
|
307
|
-
}
|
|
308
|
-
|
|
309
|
-
return pairs;
|
|
310
|
-
|
|
311
|
-
}
|
|
312
|
-
|
|
313
|
-
function combineSubfields(code, field) {
|
|
314
|
-
|
|
315
|
-
var subfields, value_combined,
|
|
316
|
-
first_subfield_index = shim_array.findIndex(field.subfields, function(subfield) {
|
|
317
|
-
return subfield.code === code;
|
|
318
|
-
});
|
|
319
|
-
|
|
320
|
-
if (first_subfield_index >= 0) {
|
|
321
|
-
|
|
322
|
-
subfields = field.subfields.filter(function(subfield) {
|
|
323
|
-
return subfield.code === code;
|
|
324
|
-
});
|
|
325
|
-
|
|
326
|
-
if (subfields.length > 1) {
|
|
327
|
-
|
|
328
|
-
value_combined = subfields.reduce(function(result, subfield) {
|
|
329
|
-
return result.length > 0 ? result + ', ' + subfield.value : result + subfield.value;
|
|
330
|
-
}, '');
|
|
331
|
-
|
|
332
|
-
/**
|
|
333
|
-
* @internal Remove subfields with the code that is to be combined
|
|
334
|
-
*/
|
|
335
|
-
field.subfields = field.subfields.filter(function(subfield) {
|
|
336
|
-
return subfield.code !== code;
|
|
337
|
-
});
|
|
338
|
-
|
|
339
|
-
field.subfields.splice(first_subfield_index, 0, {
|
|
340
|
-
code: code,
|
|
341
|
-
value: '[' + value_combined + ']'
|
|
342
|
-
});
|
|
343
|
-
|
|
344
|
-
}
|
|
345
|
-
|
|
346
|
-
}
|
|
347
|
-
|
|
348
|
-
}
|
|
349
|
-
|
|
350
|
-
function normalizeSubfield(subfield, no_clone) {
|
|
351
|
-
var ctx = no_clone ? subfield : clone(subfield);
|
|
352
|
-
ctx.value = normalizeString(ctx.value);
|
|
353
|
-
return ctx;
|
|
354
|
-
}
|
|
355
|
-
|
|
356
|
-
function normalizeField(field) {
|
|
357
|
-
var normalized = clone(field);
|
|
358
|
-
normalized.subfields = normalized.subfields.map(function(subfield) {
|
|
359
|
-
return normalizeSubfield(subfield, 1);
|
|
360
|
-
});
|
|
361
|
-
return normalized;
|
|
362
|
-
}
|
|
363
|
-
|
|
364
|
-
function fieldsSimilar(field1, field2, options) {
|
|
365
|
-
|
|
366
|
-
var field1_normalized = normalizeField(field1);
|
|
367
|
-
var field2_normalized = normalizeField(field2);
|
|
368
|
-
|
|
369
|
-
if (options.compareWithout !== undefined) {
|
|
370
|
-
|
|
371
|
-
options.compareWithout.forEach(function(code_filter) {
|
|
372
|
-
|
|
373
|
-
[field1_normalized, field2_normalized].forEach(function(field) {
|
|
374
|
-
field.subfields = arrayDifference(field.subfields, field.subfields.filter(function(subfield) {
|
|
375
|
-
return subfield.code == code_filter;
|
|
376
|
-
}));
|
|
377
|
-
});
|
|
378
|
-
|
|
379
|
-
});
|
|
380
|
-
|
|
381
|
-
}
|
|
382
|
-
|
|
383
|
-
if (options.compareWithoutIndicators !== true) {
|
|
384
|
-
|
|
385
|
-
if (field1_normalized.ind1 !== field2_normalized.ind1) {
|
|
386
|
-
return false;
|
|
387
|
-
}
|
|
388
|
-
|
|
389
|
-
if (field1_normalized.ind2 !== field2_normalized.ind2) {
|
|
390
|
-
return false;
|
|
391
|
-
}
|
|
392
|
-
|
|
393
|
-
}
|
|
394
|
-
|
|
395
|
-
/**
|
|
396
|
-
* @internal If fields have 0 subfields (f.ex. because of comparewithout), then fields are not deemed identical.
|
|
397
|
-
**/
|
|
398
|
-
if (field1_normalized.subfields.length === 0 ||
|
|
399
|
-
field2_normalized.subfields.length === 0) {
|
|
400
|
-
return false;
|
|
401
|
-
}
|
|
402
|
-
|
|
403
|
-
if (options.mustBeIdentical === true) {
|
|
404
|
-
|
|
405
|
-
if (!arraysIdentical(field1_normalized.subfields, field2_normalized.subfields, subfieldEquality)) {
|
|
406
|
-
return false;
|
|
407
|
-
}
|
|
408
|
-
}
|
|
409
|
-
|
|
410
|
-
/**
|
|
411
|
-
* @internal Neither is subset
|
|
412
|
-
**/
|
|
413
|
-
if (arrayDifference(field1_normalized.subfields, field2_normalized.subfields, subfieldEquality).length !== 0 &&
|
|
414
|
-
arrayDifference(field2_normalized.subfields, field1_normalized.subfields, subfieldEquality).length !== 0) {
|
|
415
|
-
|
|
416
|
-
return false;
|
|
417
|
-
|
|
418
|
-
}
|
|
419
|
-
|
|
420
|
-
return true;
|
|
421
|
-
|
|
422
|
-
}
|
|
423
|
-
|
|
424
|
-
function normalizeString(str)
|
|
425
|
-
{
|
|
426
|
-
|
|
427
|
-
function removeCase(str)
|
|
428
|
-
{
|
|
429
|
-
return str.toLowerCase();
|
|
430
|
-
}
|
|
431
|
-
|
|
432
|
-
function removePunctuation(str)
|
|
433
|
-
{
|
|
434
|
-
return str.replace(/[\.,-\/#!$%\^&\*;:{}=\-_`~()]/g," ")
|
|
435
|
-
.replace(/\s{2,}/g, " ")
|
|
436
|
-
.trim();
|
|
437
|
-
}
|
|
438
|
-
|
|
439
|
-
function removeDiacritics(str)
|
|
440
|
-
{
|
|
441
|
-
return str.split('').reduce(function(result, letter) {
|
|
442
|
-
return diacritics_removal_map.hasOwnProperty(letter) ? result + diacritics_removal_map[letter] : result + letter;
|
|
443
|
-
}, '');
|
|
444
|
-
}
|
|
445
|
-
|
|
446
|
-
return removePunctuation(removeCase(removeDiacritics(str)));
|
|
447
|
-
|
|
448
|
-
}
|
|
449
|
-
|
|
450
|
-
function pickSubfields(field_to, field_from, subfield_codes, missing_only)
|
|
451
|
-
{
|
|
452
|
-
field_from.subfields
|
|
453
|
-
.filter(function(subfield) {
|
|
454
|
-
return subfield_codes.indexOf(subfield.code) >= 0;
|
|
455
|
-
})
|
|
456
|
-
.forEach(function(subfield) {
|
|
457
|
-
|
|
458
|
-
if (missing_only === true) {
|
|
459
|
-
if (!field_to.subfields.some(function(subfield_to) {
|
|
460
|
-
return subfield_to.code === subfield.code;
|
|
461
|
-
})) {
|
|
462
|
-
field_to.subfields.push(clone(subfield));
|
|
463
|
-
}
|
|
464
|
-
} else {
|
|
465
|
-
field_to.subfields.push(clone(subfield));
|
|
466
|
-
}
|
|
467
|
-
|
|
468
|
-
});
|
|
469
|
-
}
|
|
470
|
-
|
|
471
|
-
function insertField(record, field)
|
|
472
|
-
{
|
|
473
|
-
|
|
474
|
-
function getSortIndex(tag)
|
|
475
|
-
{
|
|
476
|
-
|
|
477
|
-
var index;
|
|
478
|
-
|
|
479
|
-
if (configuration.sort.indexes) {
|
|
480
|
-
|
|
481
|
-
Object.keys(configuration.sort.indexes).some(function(pattern_index) {
|
|
482
|
-
if (new RegExp('^' + pattern_index + '$').test(tag)) {
|
|
483
|
-
|
|
484
|
-
index = configuration.sort.indexes[pattern_index];
|
|
485
|
-
return 1;
|
|
486
|
-
|
|
487
|
-
}
|
|
488
|
-
});
|
|
489
|
-
|
|
490
|
-
}
|
|
491
|
-
|
|
492
|
-
return index === undefined ? parseInt(tag, 10) : index;
|
|
493
|
-
|
|
494
|
-
}
|
|
495
|
-
|
|
496
|
-
function beforeCallback(field_record, index)
|
|
497
|
-
{
|
|
498
|
-
if (field.tag == field_record.tag) {
|
|
499
|
-
index_insert = index;
|
|
500
|
-
return 1;
|
|
501
|
-
}
|
|
502
|
-
}
|
|
503
|
-
|
|
504
|
-
function afterCallback(field_record, index)
|
|
505
|
-
{
|
|
506
|
-
if (field.tag == field_record.tag) {
|
|
507
|
-
index_insert = index;
|
|
508
|
-
} else if (index_insert !== undefined) {
|
|
509
|
-
index_insert = index;
|
|
510
|
-
return 1;
|
|
511
|
-
}
|
|
512
|
-
}
|
|
513
|
-
|
|
514
|
-
var index_insert, index_sort;
|
|
515
|
-
|
|
516
|
-
if (!record.fields.some(configuration.sort.insert === 'before' ? beforeCallback : afterCallback) && index_insert !== undefined && configuration.sort.insert === 'after') {
|
|
517
|
-
index_insert++;
|
|
518
|
-
}
|
|
519
|
-
|
|
520
|
-
if (index_insert === undefined) {
|
|
521
|
-
|
|
522
|
-
index_sort = getSortIndex(field.tag);
|
|
523
|
-
|
|
524
|
-
record.fields.some(function(field_record, index) {
|
|
525
|
-
|
|
526
|
-
if ((index_sort - getSortIndex(field_record.tag)) < 0) {
|
|
527
|
-
index_insert = index;
|
|
528
|
-
return 1;
|
|
529
|
-
}
|
|
530
|
-
|
|
531
|
-
});
|
|
532
|
-
|
|
533
|
-
}
|
|
534
|
-
|
|
535
|
-
record.fields.splice(index_insert === undefined ? record.fields.length : index_insert, 0, field);
|
|
536
|
-
|
|
537
|
-
}
|
|
538
|
-
|
|
539
|
-
function actionControlfield(record_merged, field_other, options, comparators, return_details) {
|
|
540
|
-
|
|
541
|
-
if (!record_merged.fields.some(function(field_merged) {
|
|
542
|
-
return field_merged.tag == field_other.tag;
|
|
543
|
-
})) {
|
|
544
|
-
|
|
545
|
-
field_other.wasUsed = true;
|
|
546
|
-
field_other.fromOther = true;
|
|
547
|
-
record_merged.fields.push(clone(field_other));
|
|
548
|
-
|
|
549
|
-
return !return_details ? undefined : {
|
|
550
|
-
index: record_merged.fields.length - 1
|
|
551
|
-
};
|
|
552
|
-
|
|
553
|
-
}
|
|
554
|
-
|
|
555
|
-
}
|
|
556
|
-
|
|
557
|
-
function extractFormat(record) {
|
|
558
|
-
|
|
559
|
-
var l6 = record.leader.substr(6,1);
|
|
560
|
-
var l7 = record.leader.substr(7,1);
|
|
561
|
-
|
|
562
|
-
var isBK = function(l6, l7) { return ['a', 't'].indexOf(l6) !== -1 && ['b', 'i', 's'].indexOf(l7) === -1; };
|
|
563
|
-
var isCR = function(l6, l7) { return ['a', 't'].indexOf(l6) !== -1 && ['b', 'i', 's'].indexOf(l7) !== -1; };
|
|
564
|
-
var isMP = function(l6) { return ['e', 'f'].indexOf(l6) !== -1; };
|
|
565
|
-
var isMU = function(l6) { return ['c', 'd', 'i', 'j'].indexOf(l6) !== -1; };
|
|
566
|
-
var isCF = function(l6) { return 'm' === l6; };
|
|
567
|
-
var isMX = function(l6) { return 'p' === l6; };
|
|
568
|
-
var isVM = function(l6) { return ['g', 'k', 'o', 'r'].indexOf(l6) !== -1; };
|
|
569
|
-
|
|
570
|
-
switch(true) {
|
|
571
|
-
case isBK(l6, l7): return 'BK';
|
|
572
|
-
case isCR(l6, l7): return 'CR';
|
|
573
|
-
case isMP(l6): return 'MP';
|
|
574
|
-
case isMU(l6): return 'MU';
|
|
575
|
-
case isCF(l6): return 'CF';
|
|
576
|
-
case isMX(l6): return 'MX';
|
|
577
|
-
case isVM(l6): return 'VM';
|
|
578
|
-
}
|
|
579
|
-
}
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
function getRange(action) {
|
|
583
|
-
if (typeof action.range === 'object') {
|
|
584
|
-
return {
|
|
585
|
-
index: action.range[0],
|
|
586
|
-
length: action.range[1] - action.range[0] + 1
|
|
587
|
-
};
|
|
588
|
-
} else {
|
|
589
|
-
return {
|
|
590
|
-
index: action.range,
|
|
591
|
-
length: 1
|
|
592
|
-
};
|
|
593
|
-
}
|
|
594
|
-
}
|
|
595
|
-
|
|
596
|
-
function actionMergeControlfield(record_merged, field_other, options, comparators, return_details, record_other) {
|
|
597
|
-
// get formats of record_merged, record_other
|
|
598
|
-
var formatMerged = extractFormat(record_merged);
|
|
599
|
-
var formatOther = extractFormat(record_other);
|
|
600
|
-
|
|
601
|
-
var field_merged = shim_array.find(record_merged.fields, function(field) { return field.tag === field_other.tag; });
|
|
602
|
-
|
|
603
|
-
// merged record does not contain the given field
|
|
604
|
-
if (field_merged === undefined) {
|
|
605
|
-
return;
|
|
606
|
-
}
|
|
607
|
-
|
|
608
|
-
// if formats are not the same, then do nothing
|
|
609
|
-
if (formatMerged !== formatOther) {
|
|
610
|
-
return;
|
|
611
|
-
}
|
|
612
|
-
|
|
613
|
-
options.actions
|
|
614
|
-
.filter(function(action) { return action.formats.indexOf(formatMerged) !== -1; })
|
|
615
|
-
.forEach(function(action) {
|
|
616
|
-
|
|
617
|
-
var range = getRange(action);
|
|
618
|
-
var index = range.index;
|
|
619
|
-
var length = range.length;
|
|
620
|
-
|
|
621
|
-
var extractFragment = function(index, length) {
|
|
622
|
-
return function(field) {
|
|
623
|
-
return field.value.substr(index, length);
|
|
624
|
-
};
|
|
625
|
-
};
|
|
626
|
-
|
|
627
|
-
var insertText = function(index, length) {
|
|
628
|
-
return function(str, text) {
|
|
629
|
-
return str.substr(0,index) + text.substr(0, length) + str.substr(index+length);
|
|
630
|
-
};
|
|
631
|
-
};
|
|
632
|
-
|
|
633
|
-
var extractor = extractFragment(index, length);
|
|
634
|
-
var updateFragment = insertText(index, length);
|
|
635
|
-
|
|
636
|
-
var mergedValue = extractor(field_merged);
|
|
637
|
-
var otherValue = extractor(field_other);
|
|
638
|
-
|
|
639
|
-
var uncodedRE = /^\|+$/;
|
|
640
|
-
var uncodedOrEmpty = /^[\|^]+$/;
|
|
641
|
-
var isEmptyFragment = function(significantCaret) {
|
|
642
|
-
return function(value) {
|
|
643
|
-
return significantCaret ? uncodedRE.test(value) : uncodedOrEmpty.test(value);
|
|
644
|
-
};
|
|
645
|
-
};
|
|
646
|
-
|
|
647
|
-
var isEmpty = isEmptyFragment(action.significantCaret);
|
|
648
|
-
|
|
649
|
-
if (action.type === 'selectNonEmpty') {
|
|
650
|
-
|
|
651
|
-
if (isEmpty(mergedValue) && !isEmpty(otherValue)) {
|
|
652
|
-
field_merged.value = updateFragment(field_merged.value, otherValue);
|
|
653
|
-
}
|
|
654
|
-
}
|
|
655
|
-
|
|
656
|
-
if (action.type === 'combine') {
|
|
657
|
-
if (!isEmpty(mergedValue) || !isEmpty(otherValue)) {
|
|
658
|
-
|
|
659
|
-
var selectParts = function(value) { return value.replace(/[\|^]/g, '').split(''); };
|
|
660
|
-
var uniq = function(array) {
|
|
661
|
-
return array.reduce(function(acc, item) {
|
|
662
|
-
if (!shim_array.find(acc, function(val) { return val === item; })) {
|
|
663
|
-
acc.push(item);
|
|
664
|
-
}
|
|
665
|
-
return acc;
|
|
666
|
-
}, []);
|
|
667
|
-
};
|
|
668
|
-
|
|
669
|
-
var padEnd = function(str, length, char) {
|
|
670
|
-
while (str.length < length) {
|
|
671
|
-
str = str + char;
|
|
672
|
-
}
|
|
673
|
-
return str;
|
|
674
|
-
};
|
|
675
|
-
|
|
676
|
-
var mergedParts = selectParts(mergedValue);
|
|
677
|
-
var otherParts = selectParts(otherValue);
|
|
678
|
-
|
|
679
|
-
var combinedValue = padEnd(uniq(mergedParts.concat(otherParts).sort()).slice(0,4).join(''), 4, '^');
|
|
680
|
-
|
|
681
|
-
field_merged.value = updateFragment(field_merged.value, combinedValue);
|
|
682
|
-
}
|
|
683
|
-
|
|
684
|
-
}
|
|
685
|
-
|
|
686
|
-
});
|
|
687
|
-
|
|
688
|
-
}
|
|
689
|
-
|
|
690
|
-
function actionCopy(record_merged, field_other, options, comparators, return_details) {
|
|
691
|
-
var subfields_compare_without, removed_subfields_preferred, removed_subfields_other, fields_preferred, field_preferred, field_preferred_normalized, field_other_copy_normalized, field_other_copy, field_preferred_copy, field_transformed,
|
|
692
|
-
details = return_details ? {} : undefined,
|
|
693
|
-
shouldMerge = true;
|
|
694
|
-
|
|
695
|
-
options = typeof options === 'object' ? options : {};
|
|
696
|
-
|
|
697
|
-
fields_preferred = record_merged.fields.filter(function(field) {
|
|
698
|
-
return field.tag == field_other.tag;
|
|
699
|
-
});
|
|
700
|
-
|
|
701
|
-
field_preferred = shim_array.find(fields_preferred, function(field) {
|
|
702
|
-
|
|
703
|
-
return fieldsSimilar(field, field_other, Object.assign(clone(options), {
|
|
704
|
-
mustBeIdentical: true
|
|
705
|
-
}));
|
|
706
|
-
|
|
707
|
-
});
|
|
708
|
-
|
|
709
|
-
if (field_preferred === undefined) {
|
|
710
|
-
field_preferred = shim_array.find(fields_preferred, function(field) {
|
|
711
|
-
return fieldsSimilar(field, field_other, options);
|
|
712
|
-
});
|
|
713
|
-
}
|
|
714
|
-
|
|
715
|
-
if (options.hasOwnProperty('copyIf') && typeof options.copyIf == 'object') {
|
|
716
|
-
shouldMerge = false;
|
|
717
|
-
|
|
718
|
-
Object.keys(options.copyIf).forEach(function(code) {
|
|
719
|
-
var properties = options.copyIf[code];
|
|
720
|
-
|
|
721
|
-
var fn_comparator = comparators.hasOwnProperty(properties.comparator) ? comparators[properties.comparator] : comparators.equality;
|
|
722
|
-
|
|
723
|
-
var field_other_subfields = field_other.subfields.filter(function (subfield) {
|
|
724
|
-
return subfield.code == code;
|
|
725
|
-
});
|
|
726
|
-
|
|
727
|
-
var compared_subfield = {
|
|
728
|
-
code: code,
|
|
729
|
-
value: properties.value
|
|
730
|
-
};
|
|
731
|
-
|
|
732
|
-
field_other_subfields.forEach(function (subfield) {
|
|
733
|
-
if (fn_comparator(subfield, compared_subfield)) shouldMerge = true;
|
|
734
|
-
});
|
|
735
|
-
});
|
|
736
|
-
}
|
|
737
|
-
|
|
738
|
-
if (options.hasOwnProperty('copyUnless') && typeof options.copyUnless == 'object') {
|
|
739
|
-
Object.keys(options.copyUnless).forEach(function(code) {
|
|
740
|
-
var properties = options.copyUnless[code];
|
|
741
|
-
|
|
742
|
-
var fn_comparator = comparators.hasOwnProperty(properties.comparator) ? comparators[properties.comparator] : comparators.equality;
|
|
743
|
-
|
|
744
|
-
var field_other_subfields = field_other.subfields.filter(function (subfield) {
|
|
745
|
-
return subfield.code == code;
|
|
746
|
-
});
|
|
747
|
-
|
|
748
|
-
var compared_subfield = {
|
|
749
|
-
code: code,
|
|
750
|
-
value: properties.value
|
|
751
|
-
};
|
|
752
|
-
|
|
753
|
-
field_other_subfields.forEach(function (subfield) {
|
|
754
|
-
if (fn_comparator(subfield, compared_subfield)) shouldMerge = false;
|
|
755
|
-
});
|
|
756
|
-
});
|
|
757
|
-
}
|
|
758
|
-
|
|
759
|
-
if (!shouldMerge) return details;
|
|
760
|
-
|
|
761
|
-
field_other_copy = clone(field_other);
|
|
762
|
-
|
|
763
|
-
if (options.reduce) {
|
|
764
|
-
var properties = options.reduce;
|
|
765
|
-
|
|
766
|
-
field_other_copy.subfields = field_other_copy.subfields.filter(function(subfield) {
|
|
767
|
-
if (properties.subfields.indexOf(subfield.code) === -1) return true;
|
|
768
|
-
|
|
769
|
-
if (properties.condition) {
|
|
770
|
-
if (properties.exact) {
|
|
771
|
-
if (properties.condition == 'unless' && subfield.value !== properties.value) return false;
|
|
772
|
-
else if (properties.condition == 'if' && subfield.value === properties.value) return false;
|
|
773
|
-
else return true;
|
|
774
|
-
}
|
|
775
|
-
else {
|
|
776
|
-
if (properties.condition == 'unless' && !subfield.value.match(properties.value)) return false;
|
|
777
|
-
else if (properties.condition == 'if' && subfield.value.match(properties.value)) return false;
|
|
778
|
-
else return true;
|
|
779
|
-
}
|
|
780
|
-
}
|
|
781
|
-
else return false;
|
|
782
|
-
});
|
|
783
|
-
}
|
|
784
|
-
|
|
785
|
-
if (options.dropOriginal || field_preferred === undefined) {
|
|
786
|
-
if (options.dropOriginal) {
|
|
787
|
-
fields_preferred.forEach(function(dropped_field) {
|
|
788
|
-
record_merged.fields.splice(record_merged.fields.indexOf(dropped_field), 1);
|
|
789
|
-
});
|
|
790
|
-
}
|
|
791
|
-
|
|
792
|
-
if (fields_preferred.length > 0 && typeof options.transformOnInequality === 'object') {
|
|
793
|
-
|
|
794
|
-
field_other_copy.tag = options.transformOnInequality.tag;
|
|
795
|
-
|
|
796
|
-
if (options.transformOnInequality.drop) {
|
|
797
|
-
field_other_copy.subfields = field_other_copy.subfields.filter(function(subfield) {
|
|
798
|
-
return options.transformOnInequality.drop.indexOf(subfield.code) < 0;
|
|
799
|
-
});
|
|
800
|
-
}
|
|
801
|
-
|
|
802
|
-
if (options.transformOnInequality.map) {
|
|
803
|
-
|
|
804
|
-
field_other_copy.subfields = field_other_copy.subfields.map(function(subfield) {
|
|
805
|
-
|
|
806
|
-
Object.keys(options.transformOnInequality.map).some(function(key) {
|
|
807
|
-
if (options.transformOnInequality.map[key] === subfield.code) {
|
|
808
|
-
subfield.code = key;
|
|
809
|
-
return true;
|
|
810
|
-
}
|
|
811
|
-
});
|
|
812
|
-
|
|
813
|
-
return subfield;
|
|
814
|
-
|
|
815
|
-
});
|
|
816
|
-
|
|
817
|
-
}
|
|
818
|
-
|
|
819
|
-
if (options.transformOnInequality.add) {
|
|
820
|
-
Object.keys(options.transformOnInequality.add).forEach(function(key) {
|
|
821
|
-
field_other_copy.subfields.push({
|
|
822
|
-
code: key,
|
|
823
|
-
value: options.transformOnInequality.add[key]
|
|
824
|
-
});
|
|
825
|
-
});
|
|
826
|
-
}
|
|
827
|
-
|
|
828
|
-
insertField(record_merged, field_other_copy);
|
|
829
|
-
|
|
830
|
-
} else {
|
|
831
|
-
|
|
832
|
-
field_other.wasUsed = true;
|
|
833
|
-
field_other.fromOther = true;
|
|
834
|
-
|
|
835
|
-
field_other_copy.wasUsed = true;
|
|
836
|
-
field_other_copy.fromOther = true;
|
|
837
|
-
insertField(record_merged, field_other_copy);
|
|
838
|
-
|
|
839
|
-
}
|
|
840
|
-
|
|
841
|
-
} else {
|
|
842
|
-
|
|
843
|
-
removed_subfields_preferred = getCompareWithoutSubfields(field_preferred, options);
|
|
844
|
-
removed_subfields_other = getCompareWithoutSubfields(field_other_copy, options);
|
|
845
|
-
|
|
846
|
-
field_preferred.subfields = arrayDifference(field_preferred.subfields, removed_subfields_preferred);
|
|
847
|
-
field_other_copy.subfields = arrayDifference(field_other_copy.subfields, removed_subfields_other);
|
|
848
|
-
|
|
849
|
-
subfields_compare_without = removed_subfields_preferred.concat(removed_subfields_other).reduce(function(result, subfield) {
|
|
850
|
-
return result.some(function(element) {
|
|
851
|
-
if (options.compareSubfieldsNormalized) {
|
|
852
|
-
return subfieldEquality(normalizeSubfield(element), normalizeSubfield(subfield));
|
|
853
|
-
} else {
|
|
854
|
-
return subfieldEquality(element, subfield);
|
|
855
|
-
}
|
|
856
|
-
}) ? result : result.concat(subfield);
|
|
857
|
-
}, []);
|
|
858
|
-
|
|
859
|
-
/**
|
|
860
|
-
* @internal Determine which record's field to use, the preferred or the other one
|
|
861
|
-
*/
|
|
862
|
-
field_preferred_normalized = normalizeField(field_preferred);
|
|
863
|
-
field_other_copy_normalized = normalizeField(field_other_copy);
|
|
864
|
-
|
|
865
|
-
/**
|
|
866
|
-
* @internal Preferred record's subfields are a "proper" subset of other record's fields.
|
|
867
|
-
**/
|
|
868
|
-
if (arrayDifference(field_preferred_normalized.subfields, field_other_copy_normalized.subfields, subfieldEquality).length === 0 &&
|
|
869
|
-
arrayDifference(field_other_copy_normalized.subfields, field_preferred_normalized.subfields, subfieldEquality).length > 0) {
|
|
870
|
-
|
|
871
|
-
if (options.compareWithoutIndicators === true) {
|
|
872
|
-
field_other_copy.ind1 = field_other_copy.ind1 === ' ' ? field_preferred.ind1 : field_other_copy.ind1;
|
|
873
|
-
field_other_copy.ind2 = field_other_copy.ind2 === ' ' ? field_preferred.ind2 : field_other_copy.ind2;
|
|
874
|
-
}
|
|
875
|
-
|
|
876
|
-
/**
|
|
877
|
-
* @internal The field that will be copied will contain subfields that are not using in comparison from both records
|
|
878
|
-
*/
|
|
879
|
-
field_other_copy.subfields = field_other_copy.subfields.concat(subfields_compare_without);
|
|
880
|
-
|
|
881
|
-
field_other.wasUsed = true;
|
|
882
|
-
field_other_copy.fromOther = true;
|
|
883
|
-
|
|
884
|
-
/**
|
|
885
|
-
* @internal Combine any subfields
|
|
886
|
-
**/
|
|
887
|
-
if (options.combine) {
|
|
888
|
-
options.combine.forEach(function(code) {
|
|
889
|
-
combineSubfields(code, field_other_copy);
|
|
890
|
-
});
|
|
891
|
-
}
|
|
892
|
-
|
|
893
|
-
if (options.pick) {
|
|
894
|
-
pickSubfields(field_other_copy, field_preferred, options.pick.subfields, options.pick.missingOnly);
|
|
895
|
-
}
|
|
896
|
-
|
|
897
|
-
record_merged.fields.splice(record_merged.fields.indexOf(field_preferred), 1, field_other_copy);
|
|
898
|
-
|
|
899
|
-
/**
|
|
900
|
-
* @internal Add back the subfields that are not used in comparisons
|
|
901
|
-
**/
|
|
902
|
-
} else {
|
|
903
|
-
/**
|
|
904
|
-
* @internal Note: field_preferred is actually the the field in merged record (which is a copy of preferred)
|
|
905
|
-
**/
|
|
906
|
-
field_preferred.subfields = field_preferred.subfields.concat(subfields_compare_without);
|
|
907
|
-
|
|
908
|
-
if (options.compareWithoutIndicators === true) {
|
|
909
|
-
field_preferred.ind1 = field_preferred.ind1 === ' ' ? field_other.ind1 : field_preferred.ind1;
|
|
910
|
-
field_preferred.ind2 = field_preferred.ind2 === ' ' ? field_other.ind2 : field_preferred.ind2;
|
|
911
|
-
}
|
|
912
|
-
|
|
913
|
-
/**
|
|
914
|
-
* @internal Combine any subfields
|
|
915
|
-
**/
|
|
916
|
-
if (options.combine) {
|
|
917
|
-
options.combine.forEach(function(code) {
|
|
918
|
-
combineSubfields(code, field_preferred);
|
|
919
|
-
});
|
|
920
|
-
}
|
|
921
|
-
|
|
922
|
-
if (options.pick) {
|
|
923
|
-
pickSubfields(field_preferred, field_other_copy, options.pick.subfields, options.pick.missingOnly);
|
|
924
|
-
}
|
|
925
|
-
|
|
926
|
-
}
|
|
927
|
-
|
|
928
|
-
}
|
|
929
|
-
|
|
930
|
-
return details;
|
|
931
|
-
|
|
932
|
-
}
|
|
933
|
-
|
|
934
|
-
function actionSelectBetter(record_merged, field_other, options, comparators, return_details) {
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
var error_invalid_record, field_merged, field_merged_normalized, field_other_normalized, field_other_copy, subfield_pairs_sizes, subfield_pairs_scores, fn_comparator, index_better, subfields_picked,
|
|
938
|
-
details = return_details ? {} : undefined,
|
|
939
|
-
fields_merged = record_merged.fields.filter(function(field) {
|
|
940
|
-
return field.tag == field_other.tag;
|
|
941
|
-
});
|
|
942
|
-
|
|
943
|
-
options = typeof options === 'object' ? options : {};
|
|
944
|
-
fn_comparator = comparators.hasOwnProperty(options.comparator) ? comparators[options.comparator] : comparators.equality;
|
|
945
|
-
|
|
946
|
-
if (fields_merged.length > 1 && !options.skipOnMultiple) {
|
|
947
|
-
|
|
948
|
-
error_invalid_record = new Error('selectBetter cannot be used if there are multiple fields of same tag.');
|
|
949
|
-
error_invalid_record.name = 'InvalidRecordError';
|
|
950
|
-
|
|
951
|
-
throw error_invalid_record;
|
|
952
|
-
|
|
953
|
-
} else if (fields_merged.length === 0) {
|
|
954
|
-
|
|
955
|
-
if (!options.requireFieldInBoth) {
|
|
956
|
-
|
|
957
|
-
field_other.wasUsed = true;
|
|
958
|
-
field_other.fromOther = true;
|
|
959
|
-
insertField(record_merged, clone(field_other));
|
|
960
|
-
|
|
961
|
-
}
|
|
962
|
-
|
|
963
|
-
} else if (!options.onlyIfMissing) {
|
|
964
|
-
|
|
965
|
-
field_merged = fields_merged[0];
|
|
966
|
-
field_merged_normalized = normalizeField(field_merged);
|
|
967
|
-
field_other_normalized = normalizeField(field_other);
|
|
968
|
-
|
|
969
|
-
if (arraysIdentical(field_merged_normalized.subfields, field_other_normalized.subfields, fn_comparator)) {
|
|
970
|
-
|
|
971
|
-
subfield_pairs_sizes = makeSubfieldPairs(field_merged_normalized.subfields, field_other_normalized.subfields, fn_comparator).map(function(pair) {
|
|
972
|
-
|
|
973
|
-
var len1 = pair[0].value.length;
|
|
974
|
-
var len2 = pair[1].value.length;
|
|
975
|
-
|
|
976
|
-
return [len1 > len2, len2 > len1];
|
|
977
|
-
|
|
978
|
-
});
|
|
979
|
-
subfield_pairs_scores = subfield_pairs_sizes.reduce(function(result, size) {
|
|
980
|
-
|
|
981
|
-
return [
|
|
982
|
-
size[0] === true ? result[0] + 1 : result[0],
|
|
983
|
-
size[1] === true ? result[1] + 1 : result[1]
|
|
984
|
-
];
|
|
985
|
-
|
|
986
|
-
}, [0, 0]);
|
|
987
|
-
|
|
988
|
-
/**
|
|
989
|
-
* @internal Field in other record is considered better
|
|
990
|
-
**/
|
|
991
|
-
if (subfield_pairs_scores[0] < subfield_pairs_scores[1]) {
|
|
992
|
-
|
|
993
|
-
field_other_copy = clone(field_other);
|
|
994
|
-
field_other.wasUsed = true;
|
|
995
|
-
field_other_copy.fromOther = true;
|
|
996
|
-
|
|
997
|
-
record_merged.fields.splice(record_merged.fields.indexOf(field_merged), 1, field_other_copy);
|
|
998
|
-
|
|
999
|
-
if (options.pickMissing) {
|
|
1000
|
-
pickMissingSubfields(field_other_copy, fields_merged[0], options.pickMissing);
|
|
1001
|
-
subfields_picked = 1;
|
|
1002
|
-
}
|
|
1003
|
-
|
|
1004
|
-
}
|
|
1005
|
-
|
|
1006
|
-
}
|
|
1007
|
-
|
|
1008
|
-
if (arrayDifference(field_merged_normalized.subfields, field_other_normalized.subfields, fn_comparator).length === 0 && arrayDifference(field_other_normalized.subfields, field_merged_normalized.subfields, fn_comparator).length > 0) {
|
|
1009
|
-
|
|
1010
|
-
/**
|
|
1011
|
-
* @internal Use field from other record
|
|
1012
|
-
**/
|
|
1013
|
-
field_other_copy = clone(field_other);
|
|
1014
|
-
field_other.wasUsed = true;
|
|
1015
|
-
field_other_copy.fromOther = true;
|
|
1016
|
-
|
|
1017
|
-
record_merged.fields.splice(record_merged.fields.indexOf(field_merged), 1, field_other_copy);
|
|
1018
|
-
|
|
1019
|
-
if (options.pick) {
|
|
1020
|
-
pickSubfields(field_other_copy, fields_merged[0], options.pick.subfields, options.pick.missingOnly);
|
|
1021
|
-
subfields_picked = 1;
|
|
1022
|
-
}
|
|
1023
|
-
|
|
1024
|
-
}
|
|
1025
|
-
|
|
1026
|
-
}
|
|
1027
|
-
|
|
1028
|
-
if (subfields_picked === undefined && options.pick) {
|
|
1029
|
-
pickSubfields(fields_merged[0], field_other, options.pick.subfields, options.pick.missingOnly);
|
|
1030
|
-
}
|
|
1031
|
-
|
|
1032
|
-
return details;
|
|
1033
|
-
|
|
1034
|
-
}
|
|
1035
|
-
|
|
1036
|
-
function actionCreateFrom(record_merged, field_other, options, comparators, return_details) {
|
|
1037
|
-
var error_invalid_record, error_invalid_transform_type,
|
|
1038
|
-
target_tag = options.convertTag || field_other.tag,
|
|
1039
|
-
details = return_details ? {} : undefined,
|
|
1040
|
-
fields_merged;
|
|
1041
|
-
|
|
1042
|
-
fields_merged = record_merged.fields.filter(function(field) {
|
|
1043
|
-
return field.tag == target_tag;
|
|
1044
|
-
});
|
|
1045
|
-
|
|
1046
|
-
if (options.skipIfExists && fields_merged.length > 0) return details;
|
|
1047
|
-
|
|
1048
|
-
var field_other_copy;
|
|
1049
|
-
|
|
1050
|
-
if (options.useExisting && fields_merged.length > 0) {
|
|
1051
|
-
field_other_copy = clone(fields_merged[0]);
|
|
1052
|
-
}
|
|
1053
|
-
else {
|
|
1054
|
-
field_other_copy = clone(field_other);
|
|
1055
|
-
|
|
1056
|
-
field_other_copy.subfields = [];
|
|
1057
|
-
}
|
|
1058
|
-
|
|
1059
|
-
if (options.ind1) field_other_copy.ind1 = options.ind1;
|
|
1060
|
-
if (options.ind2) field_other_copy.ind2 = options.ind2;
|
|
1061
|
-
|
|
1062
|
-
if (field_other.subfields && options.subfields) {
|
|
1063
|
-
Object.keys(options.subfields).forEach(function(code) {
|
|
1064
|
-
var subfield_options = options.subfields[code], new_subfield = false;
|
|
1065
|
-
|
|
1066
|
-
var field_other_copy_subfields = field_other.subfields.map(function(subfield, index) {
|
|
1067
|
-
return {
|
|
1068
|
-
index: index,
|
|
1069
|
-
subfield: clone(subfield)
|
|
1070
|
-
};
|
|
1071
|
-
}).filter(function(obj) {
|
|
1072
|
-
return obj.subfield.code == code;
|
|
1073
|
-
});
|
|
1074
|
-
|
|
1075
|
-
if (field_other_copy_subfields.length == 0 && subfield_options.replaceValue) {
|
|
1076
|
-
field_other_copy_subfields = [ { subfield: { code: code, value: '' } } ];
|
|
1077
|
-
}
|
|
1078
|
-
|
|
1079
|
-
field_other_copy_subfields.forEach(function(field_other_copy_subfield_obj) {
|
|
1080
|
-
var subfield_modifications = subfield_options.modifications || [];
|
|
1081
|
-
|
|
1082
|
-
if (subfield_options.convertCode) field_other_copy_subfield_obj.subfield.code = subfield_options.convertCode;
|
|
1083
|
-
if (subfield_options.replaceValue) field_other_copy_subfield_obj.subfield.value = subfield_options.replaceValue;
|
|
1084
|
-
|
|
1085
|
-
subfield_modifications.forEach(function(subfield_modifications_step) {
|
|
1086
|
-
if (typeof subfield_modifications_step === 'function') {
|
|
1087
|
-
field_other_copy_subfield_obj.subfield.value = subfield_modifications_step(field_other_copy_subfield_obj.subfield.value);
|
|
1088
|
-
} else if (stringOperations.hasOwnProperty(subfield_modifications_step.type)) {
|
|
1089
|
-
var args = subfield_modifications_step.args;
|
|
1090
|
-
|
|
1091
|
-
field_other_copy_subfield_obj.subfield.value = stringOperations[subfield_modifications_step.type](field_other_copy_subfield_obj.subfield.value, subfield_modifications_step.args);
|
|
1092
|
-
} else {
|
|
1093
|
-
throw new Error("Undefined string operation '" + subfield_modifications_step.type + "'");
|
|
1094
|
-
}
|
|
1095
|
-
});
|
|
1096
|
-
});
|
|
1097
|
-
|
|
1098
|
-
if (subfield_options.append) {
|
|
1099
|
-
var field_other_copy_target_subfields = field_other_copy.subfields.filter(function(subfield) {
|
|
1100
|
-
return subfield.code === subfield_options.convertCode;
|
|
1101
|
-
});
|
|
1102
|
-
|
|
1103
|
-
if (field_other_copy_target_subfields.length > 1) {
|
|
1104
|
-
error_invalid_record = new Error('append option cannot be used if there are multiple subfields of same code.');
|
|
1105
|
-
error_invalid_record.name = 'InvalidRecordError';
|
|
1106
|
-
|
|
1107
|
-
throw error_invalid_record;
|
|
1108
|
-
}
|
|
1109
|
-
else if (field_other_copy_target_subfields.length === 1) {
|
|
1110
|
-
var field_other_copy_target_subfield = field_other_copy_target_subfields[0];
|
|
1111
|
-
|
|
1112
|
-
field_other_copy_target_subfield.value = field_other_copy_target_subfield.value + field_other_copy_subfields.reduce(function(str, obj) {
|
|
1113
|
-
return str + obj.subfield.value;
|
|
1114
|
-
}, '');
|
|
1115
|
-
}
|
|
1116
|
-
else field_other_copy_subfields.forEach(function(obj) {
|
|
1117
|
-
field_other_copy.subfields.push(obj.subfield);
|
|
1118
|
-
});
|
|
1119
|
-
}
|
|
1120
|
-
else {
|
|
1121
|
-
if (subfield_options.replace) {
|
|
1122
|
-
field_other_copy.subfields = field_other_copy.subfields.filter(function(subfield) {
|
|
1123
|
-
return subfield.code !== (subfield_options.convertCode || code);
|
|
1124
|
-
});
|
|
1125
|
-
}
|
|
1126
|
-
|
|
1127
|
-
field_other_copy_subfields.forEach(function(obj) {
|
|
1128
|
-
var subfield = obj.subfield;
|
|
1129
|
-
var index = obj.index;
|
|
1130
|
-
|
|
1131
|
-
if (options.useExisting && fields_merged.length > 0) {
|
|
1132
|
-
index += fields_merged[0].subfields.length;
|
|
1133
|
-
}
|
|
1134
|
-
|
|
1135
|
-
field_other_copy.subfields.splice(index === undefined ? field_other_copy.subfields.length : index, 0, subfield);
|
|
1136
|
-
});
|
|
1137
|
-
}
|
|
1138
|
-
});
|
|
1139
|
-
}
|
|
1140
|
-
|
|
1141
|
-
field_other.wasUsed = true;
|
|
1142
|
-
field_other_copy.fromOther = true;
|
|
1143
|
-
|
|
1144
|
-
if (options.convertTag) {
|
|
1145
|
-
field_other_copy.tag = options.convertTag;
|
|
1146
|
-
}
|
|
1147
|
-
|
|
1148
|
-
if (options.useExisting || !options.keepExisting) {
|
|
1149
|
-
fields_merged.forEach(function(field) {
|
|
1150
|
-
record_merged.fields.splice(record_merged.fields.indexOf(field), 1);
|
|
1151
|
-
});
|
|
1152
|
-
}
|
|
1153
|
-
|
|
1154
|
-
insertField(record_merged, field_other_copy);
|
|
1155
|
-
|
|
1156
|
-
return details;
|
|
1157
|
-
}
|
|
1158
|
-
|
|
1159
|
-
configuration = Object.assign(JSON.parse(JSON.stringify(DEFAULT_OPTIONS)), typeof configuration === 'object' ? configuration : {});
|
|
1160
|
-
|
|
1161
|
-
applyPlugins();
|
|
1162
|
-
|
|
1163
|
-
return function(record_preferred, record_other, return_details)
|
|
1164
|
-
{
|
|
1165
|
-
|
|
1166
|
-
var details = return_details ? {} : undefined,
|
|
1167
|
-
record_merged = new MarcRecord(record_preferred);
|
|
1168
|
-
|
|
1169
|
-
record_merged.fields.forEach(function(field) {
|
|
1170
|
-
field.wasUsed = true;
|
|
1171
|
-
field.fromPreferred = true;
|
|
1172
|
-
});
|
|
1173
|
-
|
|
1174
|
-
record_other.fields.forEach(function(field) {
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
var result,
|
|
1178
|
-
config = configuration.fields[shim_array.find(Object.keys(configuration.fields), function(key) {
|
|
1179
|
-
return new RegExp('^' + key +'$').test(field.tag);
|
|
1180
|
-
})];
|
|
1181
|
-
|
|
1182
|
-
if (config !== undefined) {
|
|
1183
|
-
if (actions.hasOwnProperty(config.action)) {
|
|
1184
|
-
|
|
1185
|
-
result = actions[config.action](record_merged, field, config.options, comparators, return_details, record_other);
|
|
1186
|
-
|
|
1187
|
-
if (return_details && typeof result === 'object') {
|
|
1188
|
-
|
|
1189
|
-
if (!details.hasOwnProperty(field.tag)) {
|
|
1190
|
-
details[field.tag] = [];
|
|
1191
|
-
}
|
|
1192
|
-
|
|
1193
|
-
details[field.tag].push(Object.assign({
|
|
1194
|
-
action: config.action
|
|
1195
|
-
}, result));
|
|
1196
|
-
|
|
1197
|
-
}
|
|
1198
|
-
|
|
1199
|
-
} else {
|
|
1200
|
-
throw new Error("Undefined action '" + config.action + "'");
|
|
1201
|
-
}
|
|
1202
|
-
}
|
|
1203
|
-
|
|
1204
|
-
});
|
|
1205
|
-
|
|
1206
|
-
return !return_details ? record_merged : {
|
|
1207
|
-
record: record_merged,
|
|
1208
|
-
details: details
|
|
1209
|
-
};
|
|
1210
|
-
|
|
1211
|
-
};
|
|
1212
|
-
|
|
1213
|
-
};
|
|
1214
|
-
|
|
1215
|
-
}
|