diff --git a/.idea/workspace.xml b/.idea/workspace.xml index a67af72d10f1b1e1923d95d6ea540fa2a2c10b45..8e69ce401a4f92f6f4390a405516369bc5503176 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -2,6 +2,14 @@ <project version="4"> <component name="ChangeListManager"> <list default="true" id="ad75bb9b-12db-4cad-af64-4c68cecdb87b" name="Default Changelist" comment=""> + <change afterPath="$PROJECT_DIR$/commit-to-solr.js" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/config.json" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/fields.json" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/lib/CatalogSolr.js" beforeDir="false" afterPath="$PROJECT_DIR$/lib/CatalogSolr.js" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/package-lock.json" beforeDir="false" afterPath="$PROJECT_DIR$/package-lock.json" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/package.json" beforeDir="false" afterPath="$PROJECT_DIR$/package.json" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/test-data/fields.json" beforeDir="false" afterPath="$PROJECT_DIR$/test-data/fields.json" afterDir="false" /> <change beforePath="$PROJECT_DIR$/test/catalog.spec.js" beforeDir="false" afterPath="$PROJECT_DIR$/test/catalog.spec.js" afterDir="false" /> </list> <ignored path="$PROJECT_DIR$/.tmp/" /> @@ -14,23 +22,41 @@ <option name="LAST_RESOLUTION" value="IGNORE" /> </component> <component name="FileEditorManager"> - <splitter split-orientation="horizontal" split-proportion="0.5009346"> + <splitter split-orientation="horizontal" split-proportion="0.5182222"> <split-first> <leaf SIDE_TABS_SIZE_LIMIT_KEY="300"> - <file pinned="false" current-in-tab="true"> + <file pinned="false" current-in-tab="false"> <entry file="file://$PROJECT_DIR$/test/catalog.spec.js"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="269"> - <caret line="137" column="63" selection-start-line="137" selection-start-column="63" selection-end-line="137" selection-end-column="63" /> + <state relative-caret-position="395"> + <caret line="121" column="6" selection-start-line="121" selection-start-column="6" selection-end-line="121" selection-end-column="6" /> + </state> + </provider> + </entry> + </file> + <file pinned="false" current-in-tab="false"> + <entry file="file://$PROJECT_DIR$/commit-to-solr.js"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="587"> + <caret line="137" column="31" lean-forward="true" selection-start-line="137" selection-start-column="31" selection-end-line="137" selection-end-column="31" /> </state> </provider> </entry> </file> <file pinned="false" current-in-tab="false"> + <entry file="file://$PROJECT_DIR$/config.json"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="75"> + <caret line="5" column="18" selection-start-line="5" selection-start-column="18" selection-end-line="5" selection-end-column="18" /> + </state> + </provider> + </entry> + </file> + <file pinned="false" current-in-tab="true"> <entry file="file://$PROJECT_DIR$/lib/CatalogSolr.js"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="217"> - <caret line="90" column="17" selection-start-line="90" selection-start-column="17" selection-end-line="90" selection-end-column="17" /> + <state relative-caret-position="245"> + <caret line="38" column="14" selection-start-line="38" selection-start-column="14" selection-end-line="38" selection-end-column="14" /> </state> </provider> </entry> @@ -60,8 +86,8 @@ <file pinned="false" current-in-tab="false"> <entry file="file://$PROJECT_DIR$/test-data/CATALOG.json"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="308"> - <caret line="62" column="22" selection-start-line="62" selection-start-column="16" selection-end-line="62" selection-end-column="22" /> + <state relative-caret-position="329"> + <caret line="45" column="9" lean-forward="true" selection-start-line="45" selection-start-column="9" selection-end-line="45" selection-end-column="9" /> </state> </provider> </entry> @@ -69,8 +95,8 @@ <file pinned="false" current-in-tab="true"> <entry file="file://$PROJECT_DIR$/test-data/fields.json"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="678"> - <caret line="46" column="4" selection-start-line="46" selection-start-column="4" selection-end-line="46" selection-end-column="4" /> + <state relative-caret-position="409"> + <caret line="32" column="39" selection-start-line="32" selection-start-column="25" selection-end-line="32" selection-end-column="39" /> </state> </provider> </entry> @@ -78,8 +104,8 @@ <file pinned="false" current-in-tab="false"> <entry file="file://$PROJECT_DIR$/test-data/CatalogSolr.json"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="-459"> - <caret line="2" column="29" selection-start-line="2" selection-start-column="22" selection-end-line="2" selection-end-column="29" /> + <state relative-caret-position="-17"> + <caret line="27" column="31" selection-start-line="27" selection-start-column="5" selection-end-line="27" selection-end-column="31" /> </state> </provider> </entry> @@ -87,8 +113,8 @@ <file pinned="false" current-in-tab="false"> <entry file="file://$PROJECT_DIR$/test-data/FARMTOFREEWAYS_CATALOG.json"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="300"> - <caret line="20" column="14" selection-start-line="20" selection-start-column="7" selection-end-line="20" selection-end-column="14" /> + <state relative-caret-position="915"> + <caret line="61" column="20" selection-start-line="61" selection-start-column="20" selection-end-line="61" selection-end-column="20" /> </state> </provider> </entry> @@ -101,6 +127,7 @@ <findStrings> <find>datePublished</find> <find>geo</find> + <find>requestData</find> </findStrings> </component> <component name="Git.Settings"> @@ -116,17 +143,20 @@ <option value="$PROJECT_DIR$/test-data/FARMTOFREEWAYS_CATALOG.json" /> <option value="$APPLICATION_CONFIG_DIR$/scratches/scratch_3.js" /> <option value="$PROJECT_DIR$/test-data/CatalogSolr.json" /> - <option value="$PROJECT_DIR$/lib/CatalogSolr.js" /> - <option value="$PROJECT_DIR$/test-data/fields.json" /> <option value="$PROJECT_DIR$/.gitignore" /> + <option value="$PROJECT_DIR$/fields.json" /> + <option value="$PROJECT_DIR$/config.json" /> + <option value="$PROJECT_DIR$/commit-to-solr.js" /> <option value="$PROJECT_DIR$/test/catalog.spec.js" /> + <option value="$PROJECT_DIR$/test-data/fields.json" /> + <option value="$PROJECT_DIR$/lib/CatalogSolr.js" /> </list> </option> </component> <component name="ProjectFrameBounds" extendedState="6"> - <option name="x" value="1442" /> + <option name="x" value="1440" /> <option name="y" value="-277" /> - <option name="width" value="1918" /> + <option name="width" value="1920" /> <option name="height" value="1177" /> </component> <component name="ProjectLevelVcsManager" settingsEditedManually="true" /> @@ -147,11 +177,6 @@ <item name="solr-catalog" type="462c0819:PsiDirectoryNode" /> <item name="lib" type="462c0819:PsiDirectoryNode" /> </path> - <path> - <item name="solr-catalog" type="b2602c69:ProjectViewProjectNode" /> - <item name="solr-catalog" type="462c0819:PsiDirectoryNode" /> - <item name="test" type="462c0819:PsiDirectoryNode" /> - </path> <path> <item name="solr-catalog" type="b2602c69:ProjectViewProjectNode" /> <item name="solr-catalog" type="462c0819:PsiDirectoryNode" /> @@ -172,7 +197,7 @@ <property name="SHARE_PROJECT_CONFIGURATION_FILES" value="true" /> <property name="WebServerToolWindowFactoryState" value="false" /> <property name="com.intellij.ide.scratch.LRUPopupBuilder$1/New Scratch File" value="JavaScript" /> - <property name="last_opened_file_path" value="$PROJECT_DIR$/test-data" /> + <property name="last_opened_file_path" value="$PROJECT_DIR$" /> <property name="nodejs.mocha.mocha_node_package_dir" value="$PROJECT_DIR$/node_modules/mocha" /> <property name="nodejs_interpreter_path.stuck_in_default_project" value="undefined stuck path" /> <property name="nodejs_npm_path_reset_for_default_project" value="true" /> @@ -181,6 +206,7 @@ </component> <component name="RecentsManager"> <key name="CopyFile.RECENT_KEYS"> + <recent name="$PROJECT_DIR$" /> <recent name="$PROJECT_DIR$/test-data" /> </key> </component> @@ -196,7 +222,10 @@ </list> </option> </component> - <component name="RunManager"> + <component name="RunManager" selected="Node.js.commit-to-solr"> + <configuration name="commit-to-solr" type="NodeJSConfigurationType" path-to-js-file="commit-to-solr.js" working-dir="$PROJECT_DIR$"> + <method v="2" /> + </configuration> <configuration name="catalog.spec.js" type="mocha-javascript-test-runner"> <node-interpreter>project</node-interpreter> <node-options /> @@ -209,6 +238,10 @@ <test-file>$PROJECT_DIR$/test/catalog.spec.js</test-file> <method v="2" /> </configuration> + <list> + <item itemvalue="Mocha.catalog.spec.js" /> + <item itemvalue="Node.js.commit-to-solr" /> + </list> </component> <component name="SvnConfiguration"> <configuration /> @@ -221,62 +254,61 @@ <option name="presentableId" value="Default" /> <updated>1558421147646</updated> <workItem from="1558421149207" duration="30478000" /> - <workItem from="1558654598476" duration="36874000" /> + <workItem from="1558654598476" duration="48948000" /> </task> <servers /> </component> <component name="TestHistory"> - <history-entry file="catalog_spec_js - 2019.05.29 at 11h 24m 46s.xml"> + <history-entry file="catalog_spec_js - 2019.05.29 at 14h 50m 34s.xml"> <configuration name="catalog.spec.js" configurationId="mocha-javascript-test-runner" /> </history-entry> - <history-entry file="catalog_spec_js - 2019.05.29 at 11h 25m 32s.xml"> + <history-entry file="catalog_spec_js - 2019.05.29 at 15h 29m 39s.xml"> <configuration name="catalog.spec.js" configurationId="mocha-javascript-test-runner" /> </history-entry> - <history-entry file="catalog_spec_js - 2019.05.29 at 11h 26m 13s.xml"> + <history-entry file="catalog_spec_js - 2019.05.29 at 15h 29m 51s.xml"> <configuration name="catalog.spec.js" configurationId="mocha-javascript-test-runner" /> </history-entry> - <history-entry file="catalog_spec_js - 2019.05.29 at 11h 28m 24s.xml"> + <history-entry file="catalog_spec_js - 2019.05.29 at 15h 31m 49s.xml"> <configuration name="catalog.spec.js" configurationId="mocha-javascript-test-runner" /> </history-entry> - <history-entry file="catalog_spec_js - 2019.05.29 at 11h 31m 09s.xml"> + <history-entry file="catalog_spec_js - 2019.05.29 at 15h 31m 51s.xml"> <configuration name="catalog.spec.js" configurationId="mocha-javascript-test-runner" /> </history-entry> - <history-entry file="catalog_spec_js - 2019.05.29 at 11h 31m 10s.xml"> + <history-entry file="catalog_spec_js - 2019.05.29 at 15h 33m 16s.xml"> <configuration name="catalog.spec.js" configurationId="mocha-javascript-test-runner" /> </history-entry> - <history-entry file="catalog_spec_js - 2019.05.29 at 11h 32m 20s.xml"> + <history-entry file="catalog_spec_js - 2019.05.29 at 15h 34m 30s.xml"> <configuration name="catalog.spec.js" configurationId="mocha-javascript-test-runner" /> </history-entry> - <history-entry file="catalog_spec_js - 2019.05.29 at 11h 32m 46s.xml"> + <history-entry file="catalog_spec_js - 2019.05.29 at 15h 35m 20s.xml"> <configuration name="catalog.spec.js" configurationId="mocha-javascript-test-runner" /> </history-entry> - <history-entry file="catalog_spec_js - 2019.05.29 at 11h 33m 20s.xml"> + <history-entry file="catalog_spec_js - 2019.05.29 at 15h 35m 32s.xml"> <configuration name="catalog.spec.js" configurationId="mocha-javascript-test-runner" /> </history-entry> - <history-entry file="catalog_spec_js - 2019.05.29 at 11h 33m 21s.xml"> + <history-entry file="catalog_spec_js - 2019.05.29 at 15h 35m 38s.xml"> <configuration name="catalog.spec.js" configurationId="mocha-javascript-test-runner" /> </history-entry> </component> <component name="TimeTrackingManager"> - <option name="totallyTimeSpent" value="67352000" /> + <option name="totallyTimeSpent" value="79426000" /> </component> <component name="ToolWindowManager"> <frame x="1440" y="-277" width="1920" height="1177" extended-state="6" /> - <editor active="true" /> <layout> - <window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.15481833" /> + <window_info content_ui="combo" id="Project" order="0" visible="true" weight="0.15481833" /> <window_info id="Structure" order="1" side_tool="true" weight="0.25" /> <window_info id="Favorites" order="2" side_tool="true" /> <window_info anchor="bottom" id="Message" order="0" /> <window_info anchor="bottom" id="Find" order="1" /> <window_info anchor="bottom" id="Run" order="2" weight="0.3299539" /> - <window_info anchor="bottom" id="Debug" order="3" weight="0.35668203" /> + <window_info active="true" anchor="bottom" id="Debug" order="3" visible="true" weight="0.27834103" /> <window_info anchor="bottom" id="Cvs" order="4" weight="0.25" /> <window_info anchor="bottom" id="Inspection" order="5" weight="0.4" /> <window_info anchor="bottom" id="TODO" order="6" /> <window_info anchor="bottom" id="Docker" order="7" show_stripe_button="false" /> <window_info anchor="bottom" id="Version Control" order="8" /> - <window_info anchor="bottom" id="Terminal" order="9" visible="true" weight="0.23870967" /> + <window_info anchor="bottom" id="Terminal" order="9" weight="0.23821656" /> <window_info anchor="bottom" id="Event Log" order="10" side_tool="true" /> <window_info anchor="right" id="Commander" order="0" weight="0.4" /> <window_info anchor="right" id="Ant Build" order="1" weight="0.25" /> @@ -306,52 +338,73 @@ </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/test-data/FARMTOFREEWAYS_CATALOG.json"> + <entry file="file://$PROJECT_DIR$/.gitignore"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="300"> - <caret line="20" column="14" selection-start-line="20" selection-start-column="7" selection-end-line="20" selection-end-column="14" /> + <state relative-caret-position="30"> + <caret line="2" column="21" lean-forward="true" selection-start-line="2" selection-start-column="21" selection-end-line="2" selection-end-column="21" /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/test-data/CATALOG.json"> + <entry file="file://$PROJECT_DIR$/fields.json"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="164"> + <caret line="29" column="20" lean-forward="true" selection-start-line="29" selection-start-column="20" selection-end-line="29" selection-end-column="20" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/config.json"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="308"> - <caret line="62" column="22" selection-start-line="62" selection-start-column="16" selection-end-line="62" selection-end-column="22" /> + <state relative-caret-position="75"> + <caret line="5" column="18" selection-start-line="5" selection-start-column="18" selection-end-line="5" selection-end-column="18" /> </state> </provider> </entry> <entry file="file://$PROJECT_DIR$/test-data/CatalogSolr.json"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="-459"> - <caret line="2" column="29" selection-start-line="2" selection-start-column="22" selection-end-line="2" selection-end-column="29" /> + <state relative-caret-position="-17"> + <caret line="27" column="31" selection-start-line="27" selection-start-column="5" selection-end-line="27" selection-end-column="31" /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/test-data/fields.json"> + <entry file="file://$PROJECT_DIR$/test-data/FARMTOFREEWAYS_CATALOG.json"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="678"> - <caret line="46" column="4" selection-start-line="46" selection-start-column="4" selection-end-line="46" selection-end-column="4" /> + <state relative-caret-position="915"> + <caret line="61" column="20" selection-start-line="61" selection-start-column="20" selection-end-line="61" selection-end-column="20" /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/lib/CatalogSolr.js"> + <entry file="file://$PROJECT_DIR$/test/catalog.spec.js"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="217"> - <caret line="90" column="17" selection-start-line="90" selection-start-column="17" selection-end-line="90" selection-end-column="17" /> + <state relative-caret-position="395"> + <caret line="121" column="6" selection-start-line="121" selection-start-column="6" selection-end-line="121" selection-end-column="6" /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/.gitignore"> + <entry file="file://$PROJECT_DIR$/commit-to-solr.js"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="30"> - <caret line="2" column="21" lean-forward="true" selection-start-line="2" selection-start-column="21" selection-end-line="2" selection-end-column="21" /> + <state relative-caret-position="587"> + <caret line="137" column="31" lean-forward="true" selection-start-line="137" selection-start-column="31" selection-end-line="137" selection-end-column="31" /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/test/catalog.spec.js"> + <entry file="file://$PROJECT_DIR$/test-data/CATALOG.json"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="329"> + <caret line="45" column="9" lean-forward="true" selection-start-line="45" selection-start-column="9" selection-end-line="45" selection-end-column="9" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/test-data/fields.json"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="409"> + <caret line="32" column="39" selection-start-line="32" selection-start-column="25" selection-end-line="32" selection-end-column="39" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/lib/CatalogSolr.js"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="269"> - <caret line="137" column="63" selection-start-line="137" selection-start-column="63" selection-end-line="137" selection-end-column="63" /> + <state relative-caret-position="245"> + <caret line="38" column="14" selection-start-line="38" selection-start-column="14" selection-end-line="38" selection-end-column="14" /> </state> </provider> </entry> diff --git a/commit-to-solr.js b/commit-to-solr.js new file mode 100644 index 0000000000000000000000000000000000000000..7276d0103b358c589ca8be1c6430053d225f6113 --- /dev/null +++ b/commit-to-solr.js @@ -0,0 +1,143 @@ +const axios = require('axios'); +const _ = require('lodash'); +const yargs = require('yargs'); +const CatalogSolr = require('./lib/CatalogSolr'); +const fs = require('fs-extra'); + +const argv = yargs['argv']; +const configPath = argv.config || './config.json'; +if (!fs.existsSync(configPath)) { + console.error(`Please provide a valid config file path: ${configPath}`); + process.exit(1); +} +const configJson = require(configPath); +const sourcePath = _.endsWith(configJson.source, '/') ? configJson.source : `${configJson.source}/`; +const solrUpdate = configJson['solrUpdate'] || ''; +const fieldConfig = require(configJson['fields']); +const logLevel = configJson['logLevel'] || 4; +const waitPeriod = configJson['waitPeriod'] || 0; + +const catalog = new CatalogSolr(); +catalog.setConfig(fieldConfig); + +const sleep = ms => new Promise((r, j) => { + console.log('Waiting for ' + ms + ' seconds'); + setTimeout(r, ms * 1000); +}); + +function commitDocs(URI) { + return axios({ + url: solrUpdate + URI, + method: 'get', + responseType: 'json', + headers: { + 'Content-Type': 'application/json; charset=utf-8' + } + }); +} + +function updateDocs(coreObjects) { + return axios({ + url: solrUpdate + '/docs', + method: 'post', + data: coreObjects, + responseType: 'json', + headers: { + 'Content-Type': 'application/json; charset=utf-8' + } + }); +} + +function recordsArray(sourcePath) { + const records = []; + _.each(fs.readdirSync(sourcePath, {encoding: 'utf-8', withFileTypes: true}), (dirEnt) => { + // fs.dirEnt needs node version 10 + + if (dirEnt.isDirectory()) { + const entryPath = `${sourcePath}${dirEnt.name}/CATALOG.json`; + if (fs.existsSync(entryPath)) { + const entryJson = require(entryPath); + records.push(entryJson); + if (logLevel >= 4) console.log(`Added: ${entryPath}`); + } else { + console.error(`CATALOG.json missing: ${entryPath}`); + } + } else { + if (logLevel >= 4) console.log(`Ignoring, not a directory: ${dirEnt.name}`); + } + }); + return records; +} + +function createCatalogSolr(ca) { + //Peter's idea is to convert everything into an array then it is safer to work to convert + const graph = _.each(ca['@graph'], (g) => { + return catalog.ensureObjArray(g); + }); + + const catalogSolr = {}; + _.each(fieldConfig, (field, name) => { + let graphElement = _.filter(graph, (g) => { + return _.find(g['@type'], (gg) => gg === name) ? g : undefined; + }); + if (graphElement) { + _.each(graphElement, (ge) => { + if (Array.isArray(catalogSolr[name])) { + catalogSolr[name].push(catalog.getGraphElement(fieldConfig[name], graph, ge)); + } else { + catalogSolr[name] = [catalog.getGraphElement(fieldConfig[name], graph, ge)]; + } + }); + } + }); + + return catalogSolr; +} + +let records = []; +if (fs.existsSync(sourcePath)) { + records = recordsArray(sourcePath); +} else { + console.error(`Source path doesn't exist: ${sourcePath}`); + process.exit(1); +} + +catalogs = []; + +records.forEach((r) => { + const solrObj = createCatalogSolr(r); + if (solrObj) { + if (solrObj.Dataset) { + solrObj.Dataset.forEach((c) => { + catalogs.push(c); + }); + } + if (solrObj.Person) { + solrObj.Person.forEach((c) => { + catalogs.push(c); + }); + } + } + +}); + +const fakePromises = [1]; + +fakePromises.reduce((promise, p, index) => { + return promise.then(() => { + return updateDocs(catalogs).then(async () => { + if (waitPeriod) { + const waited = await sleep(waitPeriod); + } + console.log('Update docs'); + if (index >= fakePromises.length - 1) { + console.log('run commit'); + return commitDocs('?commit=true&overwrite=true').then(() => { + return Promise.resolve(); + }); + } + return Promise.resolve(); + }); + }).catch((e) => { + console.log(e); + }) +}, Promise.resolve()); \ No newline at end of file diff --git a/config.json b/config.json new file mode 100644 index 0000000000000000000000000000000000000000..36c2652a348bfbd9ef2ce6fa52dfa2f1f0c19ae2 --- /dev/null +++ b/config.json @@ -0,0 +1,8 @@ +{ + "source": "/Users/moises/source/peppermint/publication/public/", + "ocfl": "/Users/moises/source/peppermint/publication/ocfl/", + "solrUpdate": "http://localhost:8983/solr/dataset/update/json", + "logLevel": 3, + "waitPeriod": 1, + "fields": "./fields.json" +} diff --git a/fields.json b/fields.json new file mode 100644 index 0000000000000000000000000000000000000000..34860a6cdbe14bc66a23814920d9492e57a4a4da --- /dev/null +++ b/fields.json @@ -0,0 +1,65 @@ +{ + "Dataset": { + "core": "dataset", + "format": "jsonld", + "recordTypeName": "dataset", + "skip": ["hasPart"], + "flatten": { + "creator": { + "obj": "array" + }, + "GeoCoordinates": {} + }, + "facets": { + "datePublished": { + "field_suffix": "_Dataset_facet", + "trim": true + }, + "keywords": { + "trim": true, + "field_suffix": "_Dataset_facetmulti", + "tokenize": { + "delim": "," + } + }, + "creator": { + "trim": true, + "fieldName": "name", + "field_suffix": "_Dataset_facetmulti" + }, + "publisher": { + "trim": true, + "fieldName": "@id", + "field_suffix": "_Dataset_facet" + }, + "type": { + "trim": true, + "field_suffix": "facetmulti", + "skip_entry_type_suffix": true, + "escape_value": "solr_field" + } + }, + "oai-pmh": { + "core": "dataset", + "set": "datasource:ReDBox" + } + }, + "Person": { + "core": "dataset", + "format": "jsonld", + "recordTypeName": "person", + "flatten": { + "affiliation": { + "obj": "array" + } + }, + "facets": { + "type": { + "trim": true, + "field_suffix": "_Dataset_facetmulti", + "skip_entry_type_suffix": true, + "escape_value": "solr_field" + } + } + } +} \ No newline at end of file diff --git a/lib/CatalogSolr.js b/lib/CatalogSolr.js index f09c3e7181e665ed01a9b070b677c11bffe14b4b..4ee3eec2680045160c006468ed7b32505d14cb65 100644 --- a/lib/CatalogSolr.js +++ b/lib/CatalogSolr.js @@ -3,8 +3,7 @@ const assert = require('assert'); class CatalogSolr { - constructor(jsonld) { - this.jsonld = jsonld; + constructor() { } setConfig(config) { @@ -21,25 +20,11 @@ class CatalogSolr { return true; } - loadFields() { - - } - - getSimple() { - - } - enforceSolrFieldNames(k) { const k1 = k.replace('https?://schema.org/', ''); return k1.replace(/[^a-zA-Z\d_]/, '_'); } - getFacets() { - _.each(this.config['facets'], function (facet) { - console.log(facet); - }); - } - ensureObjArray(graphElement) { _.forOwn(graphElement, (ge, prop) => { if (!_.isArray(ge)) { @@ -52,8 +37,8 @@ class CatalogSolr { findFacetObject(graph, obj, name, value, facetInfo) { let key = ''; - // TODO: send _Dataset prefix from function - if (facetInfo['field_suffix'] === '_Dataset_facetmulti') { + // TODO: send _Dataset (core) prefix from function + if (facetInfo['field_suffix']) { if (facetInfo['tokenize']) { value = value.split(facetInfo['tokenize']['delim']); } @@ -105,7 +90,13 @@ class CatalogSolr { }); if (facetInfo) { const facetObject = this.findFacetObject(graph, gg, kk, ggg, facetInfo); - base[facetObject['key']] = facetObject['value']; + if (Array.isArray(facetObject)) { + facetObject.forEach((fO) => { + base[fO['key']] = fO['value']; + }); + } else { + base[facetObject['key']] = facetObject['value']; + } } if (kk === '@type') { //TODO handle this by config! base.record_type_s = ggg; @@ -130,12 +121,12 @@ class CatalogSolr { const objFound = this.getGraphElement(config, graph, found); if (config.flatten[kk]['obj'] === 'array') { if (Array.isArray(base[kk])) { - base[kk].push(JSON.stringify(objFound)); + base[kk].push(JSON.stringify(objFound).replace(/"/g, '\'')); } else { - base[kk] = [JSON.stringify(objFound)]; + base[kk] = [JSON.stringify(objFound).replace(/"/g, '\'')]; } } else { - base[kk] = JSON.stringify(objFound) + base[kk] = JSON.stringify(objFound).replace(/"/g, '\'') } } else { base[kk] = this.getGraphElement(config, graph, found); diff --git a/package-lock.json b/package-lock.json index d91de9a00b95cd48bc5cb2c7aea6c0d8151f44f5..d11211fa4f5bb0677ccde7cb882362255c77ca7a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -77,14 +77,12 @@ "ansi-regex": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" }, "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, "requires": { "color-convert": "^1.9.0" } @@ -235,8 +233,7 @@ "camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" }, "caseless": { "version": "0.12.0", @@ -302,7 +299,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, "requires": { "string-width": "^3.1.0", "strip-ansi": "^5.2.0", @@ -337,7 +333,6 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, "requires": { "color-name": "1.1.3" } @@ -345,8 +340,7 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, "combined-stream": { "version": "1.0.8", @@ -389,7 +383,6 @@ "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, "requires": { "nice-try": "^1.0.4", "path-key": "^2.0.1", @@ -502,8 +495,7 @@ "decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" }, "deep-is": { "version": "0.1.3", @@ -595,14 +587,12 @@ "emoji-regex": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" }, "end-of-stream": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", - "dev": true, "requires": { "once": "^1.4.0" } @@ -685,7 +675,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, "requires": { "cross-spawn": "^6.0.0", "get-stream": "^4.0.0", @@ -742,7 +731,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, "requires": { "locate-path": "^3.0.0" } @@ -820,14 +808,12 @@ "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, "get-stream": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, "requires": { "pump": "^3.0.0" } @@ -994,8 +980,7 @@ "invert-kv": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", - "dev": true + "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==" }, "is-buffer": { "version": "1.1.6", @@ -1017,8 +1002,7 @@ "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" }, "is-regex": { "version": "1.0.4", @@ -1032,8 +1016,7 @@ "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" }, "is-symbol": { "version": "1.0.2", @@ -1053,8 +1036,7 @@ "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, "isstream": { "version": "0.1.2", @@ -1194,7 +1176,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", - "dev": true, "requires": { "invert-kv": "^2.0.0" } @@ -1219,7 +1200,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, "requires": { "p-locate": "^3.0.0", "path-exists": "^3.0.0" @@ -1249,7 +1229,6 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", - "dev": true, "requires": { "p-defer": "^1.0.0" } @@ -1258,7 +1237,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", - "dev": true, "requires": { "map-age-cleaner": "^0.1.1", "mimic-fn": "^2.0.0", @@ -1283,8 +1261,7 @@ "mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" }, "minimatch": { "version": "3.0.4", @@ -1485,8 +1462,7 @@ "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" }, "node-environment-flags": { "version": "1.0.5", @@ -1514,7 +1490,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, "requires": { "path-key": "^2.0.0" } @@ -1578,7 +1553,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, "requires": { "wrappy": "1" } @@ -1601,7 +1575,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", - "dev": true, "requires": { "execa": "^1.0.0", "lcid": "^2.0.0", @@ -1617,26 +1590,22 @@ "p-defer": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", - "dev": true + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=" }, "p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" }, "p-is-promise": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", - "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", - "dev": true + "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==" }, "p-limit": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", - "dev": true, "requires": { "p-try": "^2.0.0" } @@ -1645,7 +1614,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, "requires": { "p-limit": "^2.0.0" } @@ -1653,8 +1621,7 @@ "p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" }, "parse5": { "version": "3.0.3", @@ -1668,8 +1635,7 @@ "path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" }, "path-is-absolute": { "version": "1.0.1", @@ -1680,8 +1646,7 @@ "path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" }, "path-parse": { "version": "1.0.6", @@ -1729,7 +1694,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, "requires": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -1865,14 +1829,12 @@ "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" }, "require-main-filename": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" }, "resolve": { "version": "1.11.0", @@ -1904,20 +1866,17 @@ "semver": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", - "dev": true + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" }, "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" }, "shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, "requires": { "shebang-regex": "^1.0.0" } @@ -1925,8 +1884,7 @@ "shebang-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" }, "shelljs": { "version": "0.8.3", @@ -1942,8 +1900,7 @@ "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" }, "source-map": { "version": "0.6.1", @@ -1994,7 +1951,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, "requires": { "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", @@ -2014,7 +1970,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, "requires": { "ansi-regex": "^4.1.0" } @@ -2022,8 +1977,7 @@ "strip-eof": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" }, "strip-json-comments": { "version": "2.0.1", @@ -2195,7 +2149,6 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, "requires": { "isexe": "^2.0.0" } @@ -2203,8 +2156,7 @@ "which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" }, "wide-align": { "version": "1.1.3", @@ -2258,7 +2210,6 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, "requires": { "ansi-styles": "^3.2.0", "string-width": "^3.0.0", @@ -2268,8 +2219,7 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "ws": { "version": "5.2.2", @@ -2316,14 +2266,12 @@ "y18n": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", - "dev": true + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" }, "yargs": { "version": "13.2.4", "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.4.tgz", "integrity": "sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==", - "dev": true, "requires": { "cliui": "^5.0.0", "find-up": "^3.0.0", @@ -2342,7 +2290,6 @@ "version": "13.1.0", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.0.tgz", "integrity": "sha512-Yq+32PrijHRri0vVKQEm+ys8mbqWjLiwQkMFNXEENutzLPP0bE4Lcd4iA3OQY5HF+GD3xXxf0MEHb8E4/SA3AA==", - "dev": true, "requires": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" diff --git a/package.json b/package.json index 81c25629a28e3c308a31ae9359a6cdeec140990b..56129198da47a74620254f1de14ed6c110588d8e 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,8 @@ "dependencies": { "axios": "^0.18.0", "fs-extra": "^8.0.1", - "lodash": "^4.17.11" + "lodash": "^4.17.11", + "yargs": "^13.2.4" }, "devDependencies": { "datacrate": "git+https://code.research.uts.edu.au/eresearch/datacrate.git#random_as_library", diff --git a/test-data/fields.json b/test-data/fields.json index 189e9e62a76e34c68d143b97312651e175f73b98..e9a82e3af1eaacd0ec62217812d566ee646b6c92 100644 --- a/test-data/fields.json +++ b/test-data/fields.json @@ -45,6 +45,7 @@ } }, "Person": { + "reverse": "in the reverse jsonld pointer", "core": "dataset", "format": "jsonld", "recordTypeName": "person", diff --git a/test/catalog.spec.js b/test/catalog.spec.js index 11ce7479212aaa46d00139f3de6f2c102e1b1190..50720793db754ec16ba106d45f027412a5e457f9 100644 --- a/test/catalog.spec.js +++ b/test/catalog.spec.js @@ -33,17 +33,11 @@ describe('catalog', function () { let catalog = {}; before(function () { - catalog = new CatalogSolr(catalogjson); + catalog = new CatalogSolr(); }); - describe('catalog', function () { - it('should load catalog', function () { - assert.strictEqual(_.isObject(catalog.jsonld['@context']), true, 'catalog not loaded') - }); - }); - - describe('load special fields', function () { - it('should get special fields', function () { + describe('load config fields', function () { + it('should get config fields', function () { const fields = require(fieldsPath); const isConfig = catalog.setConfig(fields); assert.strictEqual(isConfig, true, 'Config not complete'); @@ -58,7 +52,7 @@ describe('catalog', function () { const fieldConfig = catalog.config; - //TODO: Peter's idea is to convert everything into an array then it is safer to work to convert + //Peter's idea is to convert everything into an array then it is safer to work to convert const graph = _.each(ca['@graph'], (g) => { return catalog.ensureObjArray(g); });