Skip to content

Commit

Permalink
feat: clear command (#179)
Browse files Browse the repository at this point in the history
Added clear command and documentation.
  • Loading branch information
Juminstock authored Mar 12, 2024
1 parent ec0cfb3 commit 74cce00
Show file tree
Hide file tree
Showing 2 changed files with 91 additions and 0 deletions.
20 changes: 20 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -214,6 +214,7 @@ USAGE
* [`swanky node install`](#swanky-node-install)
* [`swanky node purge`](#swanky-node-purge)
* [`swanky node start`](#swanky-node-start)
* [`swanky clear CONTRACTNAME`](#)
* [`swanky plugins`](#swanky-plugins)
* [`swanky plugins:install PLUGIN...`](#swanky-pluginsinstall-plugin)
* [`swanky plugins:inspect PLUGIN...`](#swanky-pluginsinspect-plugin)
Expand Down Expand Up @@ -576,6 +577,25 @@ DESCRIPTION
Start a local node
```

## `swanky clear`

Clear the artifacts

```
USAGE
$ swanky clear [CONTRACTNAME] [-v] [-a]
ARGUMENTS
CONTRACTNAME Name of the contract artifact to clear
FLAGS
-a, --all Select all the project artifacts for delete
-v, --verbose Display more info in the result logs
DESCRIPTION
Clear the artifacts
```

## `swanky plugins`

List installed plugins.
Expand Down
71 changes: 71 additions & 0 deletions src/commands/clear/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
import { SwankyCommand } from "../../lib/swankyCommand.js";
import { ConfigError, FileError } from "../../lib/errors.js";
import fs from "fs-extra";
import path from "node:path";
import { Args, Flags } from "@oclif/core";

interface Folder {
name: string,
contractName?: string,
path: string
}

export default class Clear extends SwankyCommand<typeof Clear> {

static flags = {
all: Flags.boolean({
char: "a",
description: "Select all the project artifacts for delete",
}),
};

static args = {
contractName: Args.string({
name: "contractName",
required: false,
description: "Name of the contract artifact to clear",
}),
};

async deleteFolder(path: string): Promise<void> {
try {
await fs.remove(path);
this.log(`Successfully deleted ${path}`);
} catch (err: any) {
if (err.code === "ENOENT") {
this.log(`Folder ${path} does not exist, skipping.`);
} else {
throw new FileError(`Error deleting the folder ${path}.`, { cause: err });
}
}
}

public async run(): Promise<any> {

const { flags, args } = await this.parse(Clear);

if (args.contractName === undefined && !flags.all) {
throw new ConfigError("Specify a contract name or use the --all flag to delete all artifacts.");
}

const workDirectory = process.cwd();
const foldersToDelete: Folder[] = flags.all ?
[
{ name: "Artifacts", path: path.join(workDirectory, "./artifacts") },
{ name: "Target", path: path.join(workDirectory, "./target") }
]
: args.contractName ?
[
{ name: "Artifacts", contractName: args.contractName, path: path.join(workDirectory, "./artifacts/", args.contractName) },
{ name: "Target", path: path.join(workDirectory, "./target") },
{ name: "TestArtifacts", contractName: args.contractName, path: path.join(workDirectory, "./tests/", args.contractName, "/artifacts") }
]
: [];
for (const folder of foldersToDelete) {
await this.spinner.runCommand(async () => this.deleteFolder(folder.path),
`Deleting the ${folder.name} folder ${folder.contractName ? `for ${folder.contractName} contract` : ""}`,
`Successfully deleted the ${folder.name} folder ${folder.contractName ? `for ${folder.contractName} contract` : ""}\n at ${folder.path}`
);
}
}
}

0 comments on commit 74cce00

Please sign in to comment.