Initial commit
This commit is contained in:
89
themes/keepit/node_modules/@algolia/cli/commands/AddSynonyms.js
generated
vendored
Normal file
89
themes/keepit/node_modules/@algolia/cli/commands/AddSynonyms.js
generated
vendored
Normal file
@@ -0,0 +1,89 @@
|
||||
const fs = require('fs');
|
||||
const algolia = require('algoliasearch');
|
||||
const Base = require('./Base.js');
|
||||
|
||||
class AddSynonymsScript extends Base {
|
||||
constructor() {
|
||||
super();
|
||||
// Bind class methods
|
||||
this.getSource = this.getSource.bind(this);
|
||||
this.parseBatchSynonymsOptions = this.parseBatchSynonymsOptions.bind(this);
|
||||
this.convertCsvToJson = this.convertCsvToJson.bind(this);
|
||||
this.start = this.start.bind(this);
|
||||
// Define validation constants
|
||||
this.message =
|
||||
'\nExample: $ algolia addsynonyms -a algoliaappid -k algoliaapikey -n algoliaindexname -s sourcefilepath -p batchSynonymsParams\n\n';
|
||||
this.params = [
|
||||
'algoliaappid',
|
||||
'algoliaapikey',
|
||||
'algoliaindexname',
|
||||
'sourcefilepath',
|
||||
];
|
||||
}
|
||||
|
||||
getSource(path) {
|
||||
const filepath = this.normalizePath(path);
|
||||
if (!fs.lstatSync(filepath).isFile())
|
||||
throw new Error('Source filepath must target valid synonyms file.');
|
||||
return filepath;
|
||||
}
|
||||
|
||||
parseBatchSynonymsOptions(params) {
|
||||
try {
|
||||
const options = {
|
||||
forwardToReplicas: false,
|
||||
clearExistingSynonyms: false,
|
||||
};
|
||||
if (params === null) return options;
|
||||
else return JSON.parse(params);
|
||||
} catch (e) {
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
convertCsvToJson(synonymFile, filepath) {
|
||||
const synonyms = synonymFile.toString().split('\n');
|
||||
return synonyms.map((line, num) => ({
|
||||
type: 'synonym',
|
||||
objectID: `${filepath}-${num}`,
|
||||
synonyms: line.split(','),
|
||||
}));
|
||||
}
|
||||
|
||||
async start(program) {
|
||||
try {
|
||||
// Validate command; if invalid display help text and exit
|
||||
this.validate(program, this.message, this.params);
|
||||
|
||||
// Config params
|
||||
const appId = program.algoliaappid;
|
||||
const apiKey = program.algoliaapikey;
|
||||
const indexName = program.algoliaindexname;
|
||||
const sourcefilepath = program.sourcefilepath;
|
||||
const params = program.params || null;
|
||||
const isCsv = sourcefilepath.split('.').pop() === 'csv';
|
||||
|
||||
// Get synonyms
|
||||
const synonymsPath = this.getSource(sourcefilepath);
|
||||
const synonymsFile = await fs.readFileSync(synonymsPath);
|
||||
const synonyms = isCsv
|
||||
? this.convertCsvToJson(synonymsFile, sourcefilepath)
|
||||
: JSON.parse(synonymsFile);
|
||||
|
||||
// Get options
|
||||
const batchSynonymsOptions = this.parseBatchSynonymsOptions(params);
|
||||
|
||||
// Instantiate Algolia index
|
||||
const client = algolia(appId, apiKey);
|
||||
const index = client.initIndex(indexName);
|
||||
// Add rules
|
||||
const result = await index.batchSynonyms(synonyms, batchSynonymsOptions);
|
||||
return console.log(result);
|
||||
} catch (e) {
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const addSynonymsScript = new AddSynonymsScript();
|
||||
module.exports = addSynonymsScript;
|
||||
Reference in New Issue
Block a user