ad4m-host
Version:
Self hosting ad4m service
146 lines (145 loc) • 5.56 kB
JavaScript
import { Link, LinkQuery } from '@perspect3vism/ad4m';
import { buildAd4mClient, prettify } from './util';
export const command = 'perspective [action]';
export const desc = 'Perspective related action';
export const builder = (yargs) => yargs
.positional('action', {
type: 'string',
describe: 'Action that should be executed on the perspective',
choices: ['get', 'add', 'update', 'remove', 'queryLinks', 'addLink', 'updateLink', 'removeLink', 'queryProlog'],
})
.options({
uuid: { type: "string", describe: 'Identifier of the perspective' },
snapshot: { type: "boolean", describe: 'Flag to request the snapshot of the perspective' },
all: { type: "boolean", describe: 'Flag to request all the perspectives' },
query: { type: "string", describe: 'Conditions used when query links or prolog' },
name: { type: "string", describe: 'Name of the perspective when adding a new one' },
link: { type: "string", describe: 'Add, update or remove a link in the perspective' },
newLink: { type: "string", describe: 'Use this new link to update an existing link' },
});
export const handler = async (argv) => {
const { server, uuid, snapshot, all, query, name, link, newLink, action } = argv;
const ad4mClient = buildAd4mClient(server);
switch (action) {
case 'get':
await get(ad4mClient, uuid, snapshot, all);
break;
case 'add':
await add(ad4mClient, name);
break;
case 'update':
await update(ad4mClient, uuid, name);
break;
case 'remove':
await remove(ad4mClient, uuid);
break;
case 'queryLinks':
await queryLinks(ad4mClient, uuid, query);
break;
case 'addLink':
await addLink(ad4mClient, uuid, link);
break;
case 'updateLink':
await updateLink(ad4mClient, uuid, link, newLink);
break;
case 'removeLink':
await removeLink(ad4mClient, uuid, link);
break;
case 'queryProlog':
await queryProlog(ad4mClient, uuid, query);
break;
default:
console.info(`Action "${argv.action}" is not defined on perspective.`);
break;
}
process.exit();
};
async function get(ad4mClient, uuid, snapshot, all) {
if (snapshot && uuid) {
const result = await ad4mClient.perspective.snapshotByUUID(uuid);
prettify(result);
return;
}
if (uuid) {
const result = await ad4mClient.perspective.byUUID(uuid);
prettify({ name: result.name, uuid: result.uuid, sharedUrl: result.sharedUrl });
return;
}
if (all) {
const results = await ad4mClient.perspective.all();
const formatted = results.map(proxy => {
return {
name: proxy.name,
uuid: proxy.uuid,
sharedUrl: proxy.sharedUrl
};
});
prettify(formatted);
return;
}
console.info('Perspective get action is missiong param <uuid> <snapshot> <all>');
}
async function add(ad4mClient, name) {
if (name) {
const result = await ad4mClient.perspective.add(name);
prettify({ name: result.name, uuid: result.uuid, sharedUrl: result.sharedUrl });
return;
}
console.info('Perspective add action is missiong param <name>');
}
async function update(ad4mClient, uuid, name) {
if (uuid && name) {
const result = await ad4mClient.perspective.update(uuid, name);
prettify({ name: result.name, uuid: result.uuid, sharedUrl: result.sharedUrl });
return;
}
console.info('Perspective update action is missiong param <uuid> <name>');
}
async function remove(ad4mClient, uuid) {
if (uuid) {
const result = await ad4mClient.perspective.remove(uuid);
prettify(result);
return;
}
console.info('Perspective remove action is missiong param <uuid>');
}
async function queryLinks(ad4mClient, uuid, query) {
if (uuid && query) {
const links = await ad4mClient.perspective.queryLinks(uuid, new LinkQuery(JSON.parse(query)));
prettify(links);
return;
}
console.info('Perspective queryLinks action is missiong param <uuid> <query>');
}
async function addLink(ad4mClient, uuid, link) {
if (uuid && link) {
const result = await ad4mClient.perspective.addLink(uuid, new Link(JSON.parse(link)));
prettify(result);
return;
}
console.info('Perspective addLink action is missiong param <uuid> <link>');
}
async function updateLink(ad4mClient, uuid, link, newLink) {
if (uuid && link && newLink) {
const result = await ad4mClient.perspective.updateLink(uuid, JSON.parse(link), JSON.parse(newLink));
prettify(result);
return;
}
console.info('Perspective updateLink action is missiong param <uuid> <link> <newLink>');
}
async function removeLink(ad4mClient, uuid, link) {
if (uuid && link) {
const result = await ad4mClient.perspective.removeLink(uuid, JSON.parse(link));
prettify(result);
return;
}
console.info('Perspective removeLink action is missiong param <uuid> <link>');
}
async function queryProlog(ad4mClient, uuid, query) {
if (uuid && query) {
const result = await ad4mClient.perspective.queryProlog(uuid, query);
prettify(result);
return;
}
console.info('Perspective queryProlog action is missiong param <uuid> <query>');
}