google-local-pubsub-cli
Version:
cli for google cloud pubsub emulator. managing topics and subscriptions
66 lines (53 loc) • 1.55 kB
text/typescript
import path from 'path';
import { Argv } from 'mri';
import { createPubSub } from '../pubsub';
import { TopicMetadata } from '@google-cloud/pubsub';
const ALREADY_EXISTS = 6;
export async function topics(argv: Argv) {
process.stdout.write(`
topics execution
\n`);
if (argv.help || argv.h) {
process.stdout.write(`
Usage:
glpubsub topics <COMMAND>
\n`);
process.exit(0);
}
const client = createPubSub(argv.project ?? argv.p);
if (argv.config || argv.c) {
process.stdout.write(`
create topic from configure file(json)
\n`);
const loadPath = path.join(process.cwd(), argv.config ?? argv.c);
const metas = require(loadPath) as TopicMetadata[];
console.log(metas);
const errors: any[] = [];
const results = await Promise.all(
metas.map(async (meta) => {
try {
const res = await client.createTopic(meta);
console.info(`Topic "${meta.name}" created.`);
return res;
} catch (err: any) {
if (err.code === ALREADY_EXISTS) {
console.info(`Topic "${meta.name}" already exists.`);
errors.push(`Topic "${meta.name}" already exists.`);
} else {
console.log(err);
}
}
})
);
if (errors.length > 0) {
console.log('has errors', errors);
process.exit(1);
}
console.log('results', results);
process.exit(0);
}
const topics = await client.getTopics();
console.log('list topics: ##############');
console.dir(topics);
process.exit(0);
}