@natlibfi/marc-record-validators-melinda 10.5.0 → 10.5.1-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -12,7 +12,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
12
12
  const debug = (0, _debug.default)('@natlibfi/marc-record-validators-melinda:sortSubfields');
13
13
  //const debugData = debug.extend('data');
14
14
  const debugDev = debug.extend('dev');
15
- const defaultSortOrderString = '8673abcdefghijklmnopqrstuvwxyz420159';
15
+ const defaultSortOrderString = '8673abcdefghijklmnopqrstuvwxyz420159'; // NB! We Finns like $2 before $0 in 6XX...
16
16
  const defaultSortOrder = defaultSortOrderString.split('');
17
17
 
18
18
  // Author(s): Nicholas Volk
@@ -254,7 +254,7 @@ function swapSubfields(field, sortOrder) {
254
254
  return sortOrder.indexOf(subfield.code);
255
255
  }
256
256
  }
257
- function sortAdjacentSubfields(field, externalSortOrder = false) {
257
+ function sortAdjacentSubfields(field, externalSortOrder = []) {
258
258
  if (!field.subfields) {
259
259
  return;
260
260
  }
@@ -265,9 +265,10 @@ function sortAdjacentSubfields(field, externalSortOrder = false) {
265
265
  // Implement: 880 field should use values from $6...
266
266
 
267
267
  // Should we support multiple sort orders per field?
268
- const sortOrderForField = externalSortOrder ? externalSortOrder : getSubfieldSortOrder(field);
269
- const subfieldOrder = sortOrderForField ? sortOrderForField : defaultSortOrder;
270
- (0, _utils.nvdebug)(`SUBFIELD ORDER: ${subfieldOrder.join(', ')}`);
268
+ const sortOrderForField = externalSortOrder.length > 0 ? externalSortOrder : getSubfieldSortOrder(field);
269
+ (0, _utils.nvdebug)(`INTERMEDIATE SUBFIELD ORDER FOR ${field.tag}: ${sortOrderForField.join(', ')}`);
270
+ const subfieldOrder = sortOrderForField.length > 0 ? sortOrderForField : defaultSortOrder;
271
+ (0, _utils.nvdebug)(`FINAL SUBFIELD ORDER FOR ${field.tag}: ${subfieldOrder.join(', ')}`);
271
272
  //if (sortOrder === null) { return field; } //// Currently always sort..
272
273
 
273
274
  swapSubfields(field, ['8', '6', '7', '3', 'a', '4', '2', '0', '1', '5', '9']); // <= Handle control subfield order (it never changes)
@@ -1 +1 @@
1
- {"version":3,"file":"sortSubfields.js","names":["_clone","_interopRequireDefault","require","_debug","_utils","obj","__esModule","default","debug","createDebugLogger","debugDev","extend","defaultSortOrderString","defaultSortOrder","split","_default","description","validate","fix","record","res","message","valid","fields","forEach","field","sortAdjacentSubfields","clonedField","clone","clonedFieldAsString","fieldToString","fieldAsString","push","length","sortOrderFor7XX","subfieldSortOrder","getSubfieldSortOrder","entry","filter","currEntry","tag","sortOrder","nvdebug","swapSubfields","subfields","loopAgain","some","sf","index","currPos","getPosition","prevPos","tmp","subfield","indexOf","code","includes","value","externalSortOrder","sortOrderForField","subfieldOrder","join"],"sources":["../src/sortSubfields.js"],"sourcesContent":["import clone from 'clone';\nimport createDebugLogger from 'debug';\nimport {fieldToString, nvdebug} from './utils';\n\nconst debug = createDebugLogger('@natlibfi/marc-record-validators-melinda:sortSubfields');\n//const debugData = debug.extend('data');\nconst debugDev = debug.extend('dev');\n\nconst defaultSortOrderString = '8673abcdefghijklmnopqrstuvwxyz420159';\nconst defaultSortOrder = defaultSortOrderString.split('');\n\n\n// Author(s): Nicholas Volk\nexport default function () {\n\n return {\n description: 'Swap adjacent subfields',\n validate, fix\n };\n\n function fix(record) {\n const res = {message: [], fix: [], valid: true};\n\n record.fields.forEach(field => {\n sortAdjacentSubfields(field);\n });\n\n return res;\n }\n\n function validate(record) {\n const res = {message: []};\n\n record.fields.forEach(field => {\n const clonedField = clone(field);\n sortAdjacentSubfields(clonedField);\n const clonedFieldAsString = fieldToString(clonedField);\n const fieldAsString = fieldToString(field);\n if (fieldAsString !== clonedFieldAsString) { // eslint-disable-line functional/no-conditional-statements\n res.message.push(clonedFieldAsString); // eslint-disable-line functional/immutable-data\n }\n });\n\n res.valid = !(res.message.length >= 1); // eslint-disable-line functional/immutable-data\n return res;\n }\n}\n\n\n// X00, X10, X11 and X130 could also for their own sets...\nconst sortOrderFor7XX = ['8', '6', '7', 'i', 'a', 's', 't', 'b', 'c', 'd', 'm', 'h', 'k', 'o', 'x', 'z', 'g', 'q', 'w'];\n\n// List *only* exceptional order here. Otherwise default order is used.\nconst subfieldSortOrder = [\n {'tag': '017', 'sortOrder': ['i', 'a', 'b', 'd']},\n {'tag': '028', 'sortOrder': ['b', 'a', 'q']}, // National convention\n //{'tag': '031', 'sortOrder': ['a', 'b', 'c', 'm', 'e', 'd']}, // utter guesswork\n {'tag': '040', 'sortOrder': ['8', '6', 'a', 'b', 'e', 'c', 'd', 'x']},\n {'tag': '041', 'sortOrder': ['8', '6', 'a', 'd', 'j', 'p', 'h', 'e', 'g', 'm']}, // guesswork\n {'tag': '048', 'sortOrder': ['8', '6', 'b', 'a']},\n {'tag': '100', 'sortOrder': ['6', 'a', 'b', 'c', 'q', 'd', 'e', 'j', 't', 'u', 'l', 'f', '0', '5', '9']}, // don't do $g\n {'tag': '110', 'sortOrder': ['6', 'a', 'b', 'n', 'e', '0', '5', '9']},\n {'tag': '111', 'sortOrder': ['a', 'n', 'd', 'c', 'e', 'g', 'j']},\n {'tag': '130', 'sortOrder': ['a', 'n', 'p', 'k', 'l']},\n {'tag': '240', 'sortOrder': ['a', 'm', 'n', 'p', 's', 'l', '2', '0', '1', '5', '9']},\n {'tag': '245', 'sortOrder': ['6', 'a', 'b', 'n', 'p', 'k', 'f', 'c']},\n {'tag': '246', 'sortOrder': ['i', 'a', 'n', 'p']},\n {'tag': '382', 'sortOrder': ['a']},\n {'tag': '385', 'sortOrder': ['8', 'm', 'n', 'a', '2', '0']},\n {'tag': '386', 'sortOrder': ['8', 'm', 'n', 'a']},\n {'tag': '490', 'sortOrder': ['a', 'x', 'y', 'v', 'l']},\n {'tag': '505', 'sortOrder': ['a']},\n {'tag': '526', 'sortOrder': ['i', 'a', 'b', 'x', 'z']},\n {'tag': '540', 'sortOrder': ['a', 'b', 'c', 'd', 'f', '2', 'u']},\n {'tag': '600', 'sortOrder': ['6', 'a', 'b', 'c', 'q', 'd', 'e', '0', '5', '9']},\n {'tag': '610', 'sortOrder': ['6', 'a', 'b', 'n']},\n {'tag': '611', 'sortOrder': ['a', 'n', 'd', 'c', 'e', 'g', 'j']},\n {'tag': '700', 'sortOrder': ['6', 'i', 'a', 'b', 'c', 'q', 'd', 'e', 't', 'u', 'l', 'f', '0', '5', '9']},\n {'tag': '710', 'sortOrder': ['a', 'b', 'n', 'e']},\n {'tag': '711', 'sortOrder': ['a', 'n', 'd', 'c', 'e', 'g', 'j']},\n {'tag': '760', 'sortOrder': sortOrderFor7XX},\n {'tag': '762', 'sortOrder': sortOrderFor7XX},\n {'tag': '765', 'sortOrder': sortOrderFor7XX},\n {'tag': '767', 'sortOrder': sortOrderFor7XX},\n {'tag': '770', 'sortOrder': sortOrderFor7XX},\n {'tag': '772', 'sortOrder': sortOrderFor7XX},\n {'tag': '773', 'sortOrder': sortOrderFor7XX},\n {'tag': '774', 'sortOrder': sortOrderFor7XX},\n {'tag': '775', 'sortOrder': sortOrderFor7XX},\n {'tag': '776', 'sortOrder': sortOrderFor7XX},\n {'tag': '777', 'sortOrder': sortOrderFor7XX},\n {'tag': '780', 'sortOrder': sortOrderFor7XX},\n {'tag': '785', 'sortOrder': sortOrderFor7XX},\n {'tag': '786', 'sortOrder': sortOrderFor7XX},\n {'tag': '787', 'sortOrder': sortOrderFor7XX},\n {'tag': '788', 'sortOrder': sortOrderFor7XX},\n {'tag': '800', 'sortOrder': ['i', 'a', 'b', 'c', 'q', 'd', 'e', 't', 'u', 'v', 'l', 'f', '0', '5', '9']},\n {'tag': '810', 'sortOrder': ['a', 'b', 't', 'n', 'v', 'w']},\n {'tag': '811', 'sortOrder': ['a', 'n', 'd', 'c', 'e', 'g', 'j']},\n {'tag': '830', 'sortOrder': ['a', 'n', 'x', 'v']}, // INCOMPLETE, SAME AS 490? APPARENTLY NOT...\n {'tag': '880', 'sortOrder': ['6', 'a']},\n {'tag': 'LOW', 'sortOrder': ['a', 'b', 'c', 'l', 'h']},\n {'tag': 'SID', 'sortOrder': ['c', 'b']} // Hack, so that default order is not used\n];\n\nfunction getSubfieldSortOrder(field) {\n const entry = subfieldSortOrder.filter(currEntry => field.tag === currEntry.tag);\n if (entry.length > 0 && 'sortOrder' in entry[0]) {\n debugDev(`sort order for ${field.tag}: ${entry[0].sortOrder}`);\n return entry[0].sortOrder;\n }\n nvdebug(`NO DROPPABLE SUBFIELDS FOUND FOR ${field.tag}.`);\n return [];\n}\n\n\nfunction swapSubfields(field, sortOrder) {\n if (!field.subfields) {\n return;\n }\n\n const loopAgain = field.subfields.some((sf, index) => {\n if (index === 0) {\n return false;\n }\n const currPos = getPosition(sf, sortOrder);\n const prevPos = getPosition(field.subfields[index - 1], sortOrder);\n if (currPos === -1 || prevPos === -1 || currPos >= prevPos) {\n return false;\n }\n // Swap:\n const tmp = field.subfields[index - 1];\n field.subfields[index - 1] = sf; // eslint-disable-line functional/immutable-data\n field.subfields[index] = tmp; // eslint-disable-line functional/immutable-data\n return true;\n });\n\n if (loopAgain) {\n return swapSubfields(field, sortOrder);\n }\n\n return;\n\n function getPosition(subfield, sortOrder) {\n // Magic exception that *always* comes first, used by Aleph in linking overlong fields\n if (sortOrder.indexOf('9') > -1 && subfield.code === '9' && ['^', '^^'].includes(subfield.value)) {\n return -0.5; // normal \"best value\" is 0, and \"worst value\" is N\n }\n return sortOrder.indexOf(subfield.code);\n }\n}\n\nexport function sortAdjacentSubfields(field, externalSortOrder = false) {\n if (!field.subfields) {\n return;\n }\n // Features:\n // - Swap only sort adjacent pairs.\n // - No sorting over unlisted subfield codes. Thus a given subfield can not shift to wrong side of 700$t...\n\n // Implement: 880 field should use values from $6...\n\n // Should we support multiple sort orders per field?\n const sortOrderForField = externalSortOrder ? externalSortOrder : getSubfieldSortOrder(field);\n const subfieldOrder = sortOrderForField ? sortOrderForField : defaultSortOrder;\n nvdebug(`SUBFIELD ORDER: ${subfieldOrder.join(', ')}`);\n //if (sortOrder === null) { return field; } //// Currently always sort..\n\n swapSubfields(field, ['8', '6', '7', '3', 'a', '4', '2', '0', '1', '5', '9']); // <= Handle control subfield order (it never changes)\n swapSubfields(field, subfieldOrder);\n\n return field;\n}\n\n"],"mappings":"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"}
1
+ {"version":3,"file":"sortSubfields.js","names":["_clone","_interopRequireDefault","require","_debug","_utils","obj","__esModule","default","debug","createDebugLogger","debugDev","extend","defaultSortOrderString","defaultSortOrder","split","_default","description","validate","fix","record","res","message","valid","fields","forEach","field","sortAdjacentSubfields","clonedField","clone","clonedFieldAsString","fieldToString","fieldAsString","push","length","sortOrderFor7XX","subfieldSortOrder","getSubfieldSortOrder","entry","filter","currEntry","tag","sortOrder","nvdebug","swapSubfields","subfields","loopAgain","some","sf","index","currPos","getPosition","prevPos","tmp","subfield","indexOf","code","includes","value","externalSortOrder","sortOrderForField","join","subfieldOrder"],"sources":["../src/sortSubfields.js"],"sourcesContent":["import clone from 'clone';\nimport createDebugLogger from 'debug';\nimport {fieldToString, nvdebug} from './utils';\n\nconst debug = createDebugLogger('@natlibfi/marc-record-validators-melinda:sortSubfields');\n//const debugData = debug.extend('data');\nconst debugDev = debug.extend('dev');\n\nconst defaultSortOrderString = '8673abcdefghijklmnopqrstuvwxyz420159'; // NB! We Finns like $2 before $0 in 6XX...\nconst defaultSortOrder = defaultSortOrderString.split('');\n\n\n// Author(s): Nicholas Volk\nexport default function () {\n\n return {\n description: 'Swap adjacent subfields',\n validate, fix\n };\n\n function fix(record) {\n const res = {message: [], fix: [], valid: true};\n\n record.fields.forEach(field => {\n sortAdjacentSubfields(field);\n });\n\n return res;\n }\n\n function validate(record) {\n const res = {message: []};\n\n record.fields.forEach(field => {\n const clonedField = clone(field);\n sortAdjacentSubfields(clonedField);\n const clonedFieldAsString = fieldToString(clonedField);\n const fieldAsString = fieldToString(field);\n if (fieldAsString !== clonedFieldAsString) { // eslint-disable-line functional/no-conditional-statements\n res.message.push(clonedFieldAsString); // eslint-disable-line functional/immutable-data\n }\n });\n\n res.valid = !(res.message.length >= 1); // eslint-disable-line functional/immutable-data\n return res;\n }\n}\n\n\n// X00, X10, X11 and X130 could also for their own sets...\nconst sortOrderFor7XX = ['8', '6', '7', 'i', 'a', 's', 't', 'b', 'c', 'd', 'm', 'h', 'k', 'o', 'x', 'z', 'g', 'q', 'w'];\n\n// List *only* exceptional order here. Otherwise default order is used.\nconst subfieldSortOrder = [\n {'tag': '017', 'sortOrder': ['i', 'a', 'b', 'd']},\n {'tag': '028', 'sortOrder': ['b', 'a', 'q']}, // National convention\n //{'tag': '031', 'sortOrder': ['a', 'b', 'c', 'm', 'e', 'd']}, // utter guesswork\n {'tag': '040', 'sortOrder': ['8', '6', 'a', 'b', 'e', 'c', 'd', 'x']},\n {'tag': '041', 'sortOrder': ['8', '6', 'a', 'd', 'j', 'p', 'h', 'e', 'g', 'm']}, // guesswork\n {'tag': '048', 'sortOrder': ['8', '6', 'b', 'a']},\n {'tag': '100', 'sortOrder': ['6', 'a', 'b', 'c', 'q', 'd', 'e', 'j', 't', 'u', 'l', 'f', '0', '5', '9']}, // don't do $g\n {'tag': '110', 'sortOrder': ['6', 'a', 'b', 'n', 'e', '0', '5', '9']},\n {'tag': '111', 'sortOrder': ['a', 'n', 'd', 'c', 'e', 'g', 'j']},\n {'tag': '130', 'sortOrder': ['a', 'n', 'p', 'k', 'l']},\n {'tag': '240', 'sortOrder': ['a', 'm', 'n', 'p', 's', 'l', '2', '0', '1', '5', '9']},\n {'tag': '245', 'sortOrder': ['6', 'a', 'b', 'n', 'p', 'k', 'f', 'c']},\n {'tag': '246', 'sortOrder': ['i', 'a', 'n', 'p']},\n {'tag': '382', 'sortOrder': ['a']},\n {'tag': '385', 'sortOrder': ['8', 'm', 'n', 'a', '2', '0']},\n {'tag': '386', 'sortOrder': ['8', 'm', 'n', 'a']},\n {'tag': '490', 'sortOrder': ['a', 'x', 'y', 'v', 'l']},\n {'tag': '505', 'sortOrder': ['a']},\n {'tag': '526', 'sortOrder': ['i', 'a', 'b', 'x', 'z']},\n {'tag': '540', 'sortOrder': ['a', 'b', 'c', 'd', 'f', '2', 'u']},\n {'tag': '600', 'sortOrder': ['6', 'a', 'b', 'c', 'q', 'd', 'e', '0', '5', '9']},\n {'tag': '610', 'sortOrder': ['6', 'a', 'b', 'n']},\n {'tag': '611', 'sortOrder': ['a', 'n', 'd', 'c', 'e', 'g', 'j']},\n {'tag': '700', 'sortOrder': ['6', 'i', 'a', 'b', 'c', 'q', 'd', 'e', 't', 'u', 'l', 'f', '0', '5', '9']},\n {'tag': '710', 'sortOrder': ['a', 'b', 'n', 'e']},\n {'tag': '711', 'sortOrder': ['a', 'n', 'd', 'c', 'e', 'g', 'j']},\n {'tag': '760', 'sortOrder': sortOrderFor7XX},\n {'tag': '762', 'sortOrder': sortOrderFor7XX},\n {'tag': '765', 'sortOrder': sortOrderFor7XX},\n {'tag': '767', 'sortOrder': sortOrderFor7XX},\n {'tag': '770', 'sortOrder': sortOrderFor7XX},\n {'tag': '772', 'sortOrder': sortOrderFor7XX},\n {'tag': '773', 'sortOrder': sortOrderFor7XX},\n {'tag': '774', 'sortOrder': sortOrderFor7XX},\n {'tag': '775', 'sortOrder': sortOrderFor7XX},\n {'tag': '776', 'sortOrder': sortOrderFor7XX},\n {'tag': '777', 'sortOrder': sortOrderFor7XX},\n {'tag': '780', 'sortOrder': sortOrderFor7XX},\n {'tag': '785', 'sortOrder': sortOrderFor7XX},\n {'tag': '786', 'sortOrder': sortOrderFor7XX},\n {'tag': '787', 'sortOrder': sortOrderFor7XX},\n {'tag': '788', 'sortOrder': sortOrderFor7XX},\n {'tag': '800', 'sortOrder': ['i', 'a', 'b', 'c', 'q', 'd', 'e', 't', 'u', 'v', 'l', 'f', '0', '5', '9']},\n {'tag': '810', 'sortOrder': ['a', 'b', 't', 'n', 'v', 'w']},\n {'tag': '811', 'sortOrder': ['a', 'n', 'd', 'c', 'e', 'g', 'j']},\n {'tag': '830', 'sortOrder': ['a', 'n', 'x', 'v']}, // INCOMPLETE, SAME AS 490? APPARENTLY NOT...\n {'tag': '880', 'sortOrder': ['6', 'a']},\n {'tag': 'LOW', 'sortOrder': ['a', 'b', 'c', 'l', 'h']},\n {'tag': 'SID', 'sortOrder': ['c', 'b']} // Hack, so that default order is not used\n];\n\nfunction getSubfieldSortOrder(field) {\n const entry = subfieldSortOrder.filter(currEntry => field.tag === currEntry.tag);\n if (entry.length > 0 && 'sortOrder' in entry[0]) {\n debugDev(`sort order for ${field.tag}: ${entry[0].sortOrder}`);\n return entry[0].sortOrder;\n }\n nvdebug(`NO DROPPABLE SUBFIELDS FOUND FOR ${field.tag}.`);\n return [];\n}\n\n\nfunction swapSubfields(field, sortOrder) {\n if (!field.subfields) {\n return;\n }\n\n const loopAgain = field.subfields.some((sf, index) => {\n if (index === 0) {\n return false;\n }\n const currPos = getPosition(sf, sortOrder);\n const prevPos = getPosition(field.subfields[index - 1], sortOrder);\n if (currPos === -1 || prevPos === -1 || currPos >= prevPos) {\n return false;\n }\n // Swap:\n const tmp = field.subfields[index - 1];\n field.subfields[index - 1] = sf; // eslint-disable-line functional/immutable-data\n field.subfields[index] = tmp; // eslint-disable-line functional/immutable-data\n return true;\n });\n\n if (loopAgain) {\n return swapSubfields(field, sortOrder);\n }\n\n return;\n\n function getPosition(subfield, sortOrder) {\n // Magic exception that *always* comes first, used by Aleph in linking overlong fields\n if (sortOrder.indexOf('9') > -1 && subfield.code === '9' && ['^', '^^'].includes(subfield.value)) {\n return -0.5; // normal \"best value\" is 0, and \"worst value\" is N\n }\n return sortOrder.indexOf(subfield.code);\n }\n}\n\nexport function sortAdjacentSubfields(field, externalSortOrder = []) {\n if (!field.subfields) {\n return;\n }\n // Features:\n // - Swap only sort adjacent pairs.\n // - No sorting over unlisted subfield codes. Thus a given subfield can not shift to wrong side of 700$t...\n\n // Implement: 880 field should use values from $6...\n\n // Should we support multiple sort orders per field?\n const sortOrderForField = externalSortOrder.length > 0 ? externalSortOrder : getSubfieldSortOrder(field);\n nvdebug(`INTERMEDIATE SUBFIELD ORDER FOR ${field.tag}: ${sortOrderForField.join(', ')}`);\n const subfieldOrder = sortOrderForField.length > 0 ? sortOrderForField : defaultSortOrder;\n nvdebug(`FINAL SUBFIELD ORDER FOR ${field.tag}: ${subfieldOrder.join(', ')}`);\n //if (sortOrder === null) { return field; } //// Currently always sort..\n\n swapSubfields(field, ['8', '6', '7', '3', 'a', '4', '2', '0', '1', '5', '9']); // <= Handle control subfield order (it never changes)\n swapSubfields(field, subfieldOrder);\n\n return field;\n}\n\n"],"mappings":"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"}
package/package.json CHANGED
@@ -14,7 +14,7 @@
14
14
  "url": "git@github.com:natlibfi/marc-record-validators-melinda.git"
15
15
  },
16
16
  "license": "MIT",
17
- "version": "10.5.0",
17
+ "version": "10.5.1-alpha.1",
18
18
  "main": "./dist/index.js",
19
19
  "publishConfig": {
20
20
  "access": "public"
@@ -6,7 +6,7 @@ const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda:sortSu
6
6
  //const debugData = debug.extend('data');
7
7
  const debugDev = debug.extend('dev');
8
8
 
9
- const defaultSortOrderString = '8673abcdefghijklmnopqrstuvwxyz420159';
9
+ const defaultSortOrderString = '8673abcdefghijklmnopqrstuvwxyz420159'; // NB! We Finns like $2 before $0 in 6XX...
10
10
  const defaultSortOrder = defaultSortOrderString.split('');
11
11
 
12
12
 
@@ -150,7 +150,7 @@ function swapSubfields(field, sortOrder) {
150
150
  }
151
151
  }
152
152
 
153
- export function sortAdjacentSubfields(field, externalSortOrder = false) {
153
+ export function sortAdjacentSubfields(field, externalSortOrder = []) {
154
154
  if (!field.subfields) {
155
155
  return;
156
156
  }
@@ -161,9 +161,10 @@ export function sortAdjacentSubfields(field, externalSortOrder = false) {
161
161
  // Implement: 880 field should use values from $6...
162
162
 
163
163
  // Should we support multiple sort orders per field?
164
- const sortOrderForField = externalSortOrder ? externalSortOrder : getSubfieldSortOrder(field);
165
- const subfieldOrder = sortOrderForField ? sortOrderForField : defaultSortOrder;
166
- nvdebug(`SUBFIELD ORDER: ${subfieldOrder.join(', ')}`);
164
+ const sortOrderForField = externalSortOrder.length > 0 ? externalSortOrder : getSubfieldSortOrder(field);
165
+ nvdebug(`INTERMEDIATE SUBFIELD ORDER FOR ${field.tag}: ${sortOrderForField.join(', ')}`);
166
+ const subfieldOrder = sortOrderForField.length > 0 ? sortOrderForField : defaultSortOrder;
167
+ nvdebug(`FINAL SUBFIELD ORDER FOR ${field.tag}: ${subfieldOrder.join(', ')}`);
167
168
  //if (sortOrder === null) { return field; } //// Currently always sort..
168
169
 
169
170
  swapSubfields(field, ['8', '6', '7', '3', 'a', '4', '2', '0', '1', '5', '9']); // <= Handle control subfield order (it never changes)
@@ -3,7 +3,13 @@
3
3
  "fields": [
4
4
  { "tag": "001", "value": "f01" },
5
5
  { "tag": "028", "ind1": " ", "ind2": " ", "subfields": [ { "code": "b", "value": "Bar Records"}, {"code": "a", "value": "BARCD-1"}]},
6
- { "tag": "028", "ind1": " ", "ind2": " ", "subfields": [ { "code": "b", "value": "Bar Records"}, {"code": "a", "value": "BARCD-2"}]}
6
+ { "tag": "028", "ind1": " ", "ind2": " ", "subfields": [ { "code": "b", "value": "Bar Records"}, {"code": "a", "value": "BARCD-2"}]},
7
+ { "tag": "300", "ind1": " ", "ind2": " ", "subfields": [
8
+ {"code": "a", "value": "123 sivua"},
9
+ {"code": "b", "value": "karttoja"},
10
+ {"code": "c", "value": "25 cm"},
11
+ {"code": "e", "value": "CD-rom"}
12
+ ]}
7
13
 
8
14
  ],
9
15
  "leader": ""
@@ -2,7 +2,13 @@
2
2
  "fields": [
3
3
  { "tag": "001", "value": "f01" },
4
4
  { "tag": "028", "ind1": " ", "ind2": " ", "subfields": [ { "code": "b", "value": "Bar Records"}, {"code": "a", "value": "BARCD-1"}]},
5
- { "tag": "028", "ind1": " ", "ind2": " ", "subfields": [ {"code": "a", "value": "BARCD-2"}, { "code": "b", "value": "Bar Records"}]}
5
+ { "tag": "028", "ind1": " ", "ind2": " ", "subfields": [ {"code": "a", "value": "BARCD-2"}, { "code": "b", "value": "Bar Records"}]},
6
+ { "tag": "300", "ind1": " ", "ind2": " ", "subfields": [
7
+ {"code": "a", "value": "123 sivua"},
8
+ {"code": "c", "value": "25 cm"},
9
+ {"code": "b", "value": "karttoja"},
10
+ {"code": "e", "value": "CD-rom"}
11
+ ]}
6
12
  ],
7
13
  "leader": ""
8
14
  }