@nfps.dev/cli
Version:
CLI for NFP development, inspection, and manipulation
99 lines • 3.43 kB
JavaScript
import { webcrypto } from 'node:crypto';
import { readFileSync } from 'node:fs';
import path from 'node:path';
import { fileURLToPath } from 'node:url';
import { ode } from '@blake.regalia/belt';
import { safe_json } from '@solar-republic/neutrino';
import { WebSocket } from 'ws';
import yargsImport from 'yargs';
import { hideBin } from 'yargs/helpers';
import { H_CMDS_CONFIG } from './cmds/config.js';
import { H_CMDS_DELEGATES } from './cmds/delegates.js';
import { H_CMDS_INIT } from './cmds/init.js';
import { H_CMDS_MINT } from './cmds/mint.js';
import { H_CMDS_MINTERS } from './cmds/minters.js';
import { H_CMDS_PACKAGE } from './cmds/package.js';
import { H_CMDS_SET_VK } from './cmds/set-vk.js';
import { H_CMDS_STORAGE } from './cmds/storage.js';
import { H_CMDS_WHOAMI } from './cmds/whoami.js';
import { H_CMDS_QUERY } from './cmds/query.js';
import { H_CMDS_EXEC } from './cmds/exec.js';
// polyfil crypto for older node versions
if (!globalThis.crypto)
globalThis.crypto = webcrypto;
// polyfil WebSocket for node
// @ts-expect-error WebSocket typing
globalThis.WebSocket = WebSocket;
// parse version from package.json
// eslint-disable-next-line no-useless-concat
const pd_dirname = ('_' + '_dirname') in globalThis ? `${process.platform === 'win32' ? '' : '/'}${/file:\/{2,3}(.+)\/[^/]/.exec(import.meta.url)[1]}` : `${'win32' === process.platform ? '' : '/'}${/file:\/{2,3}(.+)\/[^/]/.exec(import.meta.url)[1]}`;
const sx_version = safe_json(readFileSync(path.join(pd_dirname, '..', 'package.json'), 'utf-8')).version;
// eslint-disable-next-line @typescript-eslint/naming-convention
function commands(h_commands, y_yargs = yargs) {
for (const [si_cmd, g_cmd] of ode(h_commands)) {
// subcommands
if (g_cmd.commands) {
// eslint-disable-next-line @typescript-eslint/naming-convention
y_yargs.command(si_cmd, g_cmd.info, (y_yargs_sub) => {
commands(g_cmd.commands, y_yargs_sub);
});
}
else if (g_cmd.handler) {
// @ts-expect-error improperly typed handler
y_yargs.command(si_cmd, g_cmd.info, (y_yargs_sub) => {
// apply options object
y_yargs_sub.options(g_cmd.opts || {});
// apply each positional
for (const [si_arg, g_arg] of ode(g_cmd.pos || {})) {
y_yargs_sub.positional(si_arg, g_arg);
}
}, g_cmd.handler);
}
}
}
// normalize for esm
const yargs = yargsImport(hideBin(process.argv));
[
// nfp init
H_CMDS_INIT,
// nfp mint 1 --public '{token_uri: "test-public"}'
H_CMDS_MINT,
// nfp config <key> [value]
H_CMDS_CONFIG,
// nfp set-vk <key>
H_CMDS_SET_VK,
// nfp package <cmd>
H_CMDS_PACKAGE,
// nfp storage <cmd>
H_CMDS_STORAGE,
// nfp minters <cmd>
H_CMDS_MINTERS,
// nfp whoami
H_CMDS_WHOAMI,
// nfp delegates <cmd>
H_CMDS_DELEGATES,
// nfp query <cmd>
H_CMDS_QUERY,
// nfp exec <cmd>
H_CMDS_EXEC,
].forEach((h_cmds) => {
commands(h_cmds);
});
await yargs
.scriptName('nfp')
.demandCommand(1)
.version(sx_version)
// .alias('v', 'version')
.help()
.alias('h', 'help')
.options({
quiet: {
alias: 'q',
type: 'boolean',
},
})
.strict()
.completion()
.parse();
//# sourceMappingURL=main.js.map