From 84430146b3bd85b0d05c99ac3c1396feb81b7cb2 Mon Sep 17 00:00:00 2001 From: Valentin Laurin Date: Thu, 1 Feb 2024 15:30:18 +0000 Subject: [PATCH 1/2] [Metadata] Support additional legacy names --- src/metadata/normalise-name.js | 3 +++ src/metadata/normalise-name.test.js | 3 +++ 2 files changed, 6 insertions(+) diff --git a/src/metadata/normalise-name.js b/src/metadata/normalise-name.js index af37704..3c56334 100644 --- a/src/metadata/normalise-name.js +++ b/src/metadata/normalise-name.js @@ -29,10 +29,13 @@ const normaliseName = (metadataName) => { case 'security_classification': // Legacy return NAMES.CLASSIFICATION; case 'createdat': + case 'created': // Legacy case 'created_date': // Legacy return NAMES.CREATED_AT; case 'lastmodifiedat': + case 'modified': // Legacy case 'last_modified': // Legacy + case 'last_modified_date': // Legacy return NAMES.LAST_MODIFIED_AT; default: return; diff --git a/src/metadata/normalise-name.test.js b/src/metadata/normalise-name.test.js index ccf0189..4eb42a0 100644 --- a/src/metadata/normalise-name.test.js +++ b/src/metadata/normalise-name.test.js @@ -87,6 +87,7 @@ describe('createdAt', () => { test.each([ ['identity', NAMES.CREATED_AT, NAMES.CREATED_AT], ['case insensitive', '[CREATEDat]', NAMES.CREATED_AT], + ['legacy', '[created]', NAMES.CREATED_AT], ['legacy', '[created_date]', NAMES.CREATED_AT], ['no brackets', 'createdAt', NAMES.CREATED_AT], ['no brackets + case insensitive', 'CREATEDat', NAMES.CREATED_AT], @@ -100,7 +101,9 @@ describe('lastModifiedAt', () => { test.each([ ['identity', NAMES.LAST_MODIFIED_AT, NAMES.LAST_MODIFIED_AT], ['case insensitive', '[lastMODIFIEDat]', NAMES.LAST_MODIFIED_AT], + ['legacy', '[modified]', NAMES.LAST_MODIFIED_AT], ['legacy', '[last_modified]', NAMES.LAST_MODIFIED_AT], + ['legacy', '[last_modified_date]', NAMES.LAST_MODIFIED_AT], ['no brackets', 'lastModifiedAt', NAMES.LAST_MODIFIED_AT], ['no brackets + case insensitive', 'lastMODIFIEDat', NAMES.LAST_MODIFIED_AT], ['no brackets + legacy', 'last_modified', NAMES.LAST_MODIFIED_AT], From 8fe7cfdb34ec6ff2688004e377b514563eb450fd Mon Sep 17 00:00:00 2001 From: Valentin Laurin Date: Thu, 1 Feb 2024 15:42:26 +0000 Subject: [PATCH 2/2] [Metadata] Add `isMetadata(path)` --- src/metadata/index.js | 2 ++ src/metadata/is-metadata.js | 12 +++++++ src/metadata/is-metadata.test.js | 57 ++++++++++++++++++++++++++++++++ src/record/extract-value.js | 4 +-- 4 files changed, 73 insertions(+), 2 deletions(-) create mode 100644 src/metadata/is-metadata.js create mode 100644 src/metadata/is-metadata.test.js diff --git a/src/metadata/index.js b/src/metadata/index.js index 974922c..aa5106d 100644 --- a/src/metadata/index.js +++ b/src/metadata/index.js @@ -1,6 +1,8 @@ export * from './constants.js'; +import isMetadata from './is-metadata.js'; import normaliseName from './normalise-name.js'; export { + isMetadata, normaliseName, }; diff --git a/src/metadata/is-metadata.js b/src/metadata/is-metadata.js new file mode 100644 index 0000000..c78da10 --- /dev/null +++ b/src/metadata/is-metadata.js @@ -0,0 +1,12 @@ +const METADATA_START = '['; + +/** + * Checks whether a field path targets metadata (ie. starts with `[`). + * Attention: This does not guarantee the metadata itself exists. + * + * @param {string} path - Field path to check + * @returns {boolean} True when field path follows metadata format + */ +const isMetadata = (path) => path[0] === METADATA_START; + +export default isMetadata; diff --git a/src/metadata/is-metadata.test.js b/src/metadata/is-metadata.test.js new file mode 100644 index 0000000..f3c8e36 --- /dev/null +++ b/src/metadata/is-metadata.test.js @@ -0,0 +1,57 @@ +import isMetadata from './is-metadata.js'; + +test.each([ + // Current + '[workspace]', + '[type]', + '[id]', + '[title]', + '[state]', + '[classification]', + '[createdAt]', + '[lastModifiedAt]', + + // Legacy + '[organisation]', + '[jurisdiction]', + '[case_type]', + '[reference]', + '[case_reference]', + '[security_classification]', + '[created]', + '[created_date]', + '[modified]', + '[last_modified]', + '[last_modified_date]', +])('should be recognised as metadata when name between brackets: %s', (actual) => { + expect(isMetadata(actual)).toBeTruthy(); +}); + +test.each([ + 'workspace', + 'type', + 'id', + 'title', + 'state', + 'classification', + 'createdAt', + 'lastModifiedAt', + 'organisation', + 'jurisdiction', + 'case_type', + 'reference', + 'case_reference', + 'security_classification', + 'created', + 'created_date', + 'modified', + 'last_modified', + 'last_modified_date', + 'randomField', + 'randomPath.to.field', + 'collection[123]', + 'collection[id:item-1]', + 'collection[123].value.member', +])('should not be recognised as metadata when name not between brackets: %s', (actual) => { + expect(isMetadata(actual)).toBeFalsy(); +}); diff --git a/src/record/extract-value.js b/src/record/extract-value.js index 4710b80..9b52d35 100644 --- a/src/record/extract-value.js +++ b/src/record/extract-value.js @@ -1,7 +1,7 @@ +import {isMetadata} from '../metadata/index.js'; import * as Metadata from '../metadata/index.js'; import comboExtractor from '../path/combo-extractor.js'; -const METADATA_START = '['; const COLLECTION_ITEM_PATTERN = /^(?[^[\]]+)(?:\[(?:(?\d+)|id:(?[^[\]]+))\])?$/; /** @@ -17,7 +17,7 @@ const COLLECTION_ITEM_PATTERN = /^(?[^[\]]+)(?:\[(?:(?\d+)|id:(? const extractValue = (record) => comboExtractor(valueExtractor(record)) const valueExtractor = (record) => (path) => { - if (path[0] === METADATA_START) { + if (isMetadata(path)) { return metadataExtractor(record)(path); }