add postman
This commit is contained in:
parent
c6d2d361e3
commit
929e3a4f6b
3 changed files with 111 additions and 1 deletions
105
scripts/postman.ts
Normal file
105
scripts/postman.ts
Normal file
|
@ -0,0 +1,105 @@
|
|||
import arg from "arg";
|
||||
import paths from "node:path";
|
||||
import fs from "node:fs/promises";
|
||||
|
||||
const globalArgs = arg(
|
||||
{
|
||||
"--help": Boolean,
|
||||
},
|
||||
{ argv: process.argv.slice(2), stopAtPositional: true },
|
||||
);
|
||||
|
||||
if (globalArgs["--help"] || globalArgs._.length === 0) {
|
||||
process.stdout.write(`postman.ts [...options] <command>
|
||||
|
||||
COMMANDS
|
||||
|
||||
new - Create new post
|
||||
|
||||
OPTIONS
|
||||
--help - Print this message and exit
|
||||
`);
|
||||
|
||||
process.exit();
|
||||
}
|
||||
|
||||
const command = globalArgs._[0];
|
||||
let rest = globalArgs._.slice(1);
|
||||
|
||||
function parseNewPostArgsPartial(rest: string[]) {
|
||||
return arg(
|
||||
{
|
||||
"--draft": Boolean,
|
||||
"--overwrite": Boolean,
|
||||
"--help": Boolean,
|
||||
},
|
||||
{ stopAtPositional: true, argv: rest },
|
||||
);
|
||||
}
|
||||
|
||||
const postRoot = paths.resolve(import.meta.dir, "..", "src", "posts");
|
||||
|
||||
if (command === "new") {
|
||||
const cfg = parseNewPostArgsPartial(rest);
|
||||
rest = cfg._.slice(1);
|
||||
const postId: string = cfg._[0];
|
||||
|
||||
const hasAdditionalArgs = cfg._.length > 0;
|
||||
|
||||
const partialCfg = parseNewPostArgsPartial(rest);
|
||||
Object.assign(cfg, partialCfg);
|
||||
|
||||
if (cfg["--help"] || !hasAdditionalArgs) {
|
||||
process.stdout.write(`postman.ts new <postId> [...options]
|
||||
|
||||
Create a new post with default content.
|
||||
|
||||
OPTIONS
|
||||
|
||||
--draft - Create the post as a draft
|
||||
--overwrite - Overwrite existing file
|
||||
--help - Print this message and exit
|
||||
`);
|
||||
|
||||
process.exit();
|
||||
}
|
||||
|
||||
if (partialCfg._.length > 0) {
|
||||
throw new TypeError(`unexpected positional argument "${partialCfg._[0]}"`);
|
||||
}
|
||||
|
||||
const thisPostRoot = paths.join(postRoot, postId);
|
||||
|
||||
await fs.mkdir(thisPostRoot);
|
||||
|
||||
const postContent = `---
|
||||
title: ${postId}
|
||||
${cfg["--draft"] ? "visibility: draft" : ""}
|
||||
---
|
||||
import More from "~/components/More.astro";
|
||||
|
||||
<More />
|
||||
`;
|
||||
|
||||
const thisPostFilename = paths.join(thisPostRoot, "index.mdx");
|
||||
|
||||
const file = await fs.open(
|
||||
thisPostFilename,
|
||||
(cfg["--overwrite"]
|
||||
? fs.constants.O_TRUNC
|
||||
: fs.constants.O_CREAT | fs.constants.O_EXCL) | fs.constants.O_WRONLY,
|
||||
);
|
||||
|
||||
try {
|
||||
await fs.writeFile(file, postContent, {
|
||||
encoding: "utf-8",
|
||||
});
|
||||
} finally {
|
||||
await file.close();
|
||||
}
|
||||
|
||||
const displayedPath = paths.relative(process.cwd(), thisPostFilename);
|
||||
process.stdout.write(displayedPath);
|
||||
} else {
|
||||
throw new TypeError(`unknown command ${command}`);
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue