Skip to content

Commit

Permalink
Support a --cwd CLI option
Browse files Browse the repository at this point in the history
  • Loading branch information
bertdeblock committed Nov 25, 2024
1 parent 17c745b commit 8ee013d
Show file tree
Hide file tree
Showing 4 changed files with 57 additions and 8 deletions.
22 changes: 18 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,11 @@
[![CI](https://github.com/bertdeblock/gember/workflows/CI/badge.svg)](https://github.com/bertdeblock/gember/actions?query=workflow%3ACI)
[![NPM Version](https://badge.fury.io/js/%40bertdeblock%2Fgember.svg)](https://badge.fury.io/js/%40bertdeblock%2Fgember)

Generate components, helpers, modifiers and services in v2 addons.
Generate components, helpers, modifiers and services in v1/v2 apps/addons.

Uses [scaffdog](https://scaff.dog/) underneath.

> [!NOTE]
>
> - Only supports `.gjs` (default) and `.gts` files for components
> NOTE: Only supports `.gjs` (default) and `.gts` files for components
## Installation

Expand Down Expand Up @@ -55,8 +53,12 @@ yarn add -D @bertdeblock/gember
<summary>Generating components</summary>

```shell
pnpm gember component --help # for all available options

# examples:
pnpm gember component foo
pnpm gember component foo --class-based # or `--class`
pnpm gember component foo --cwd="test-app"
pnpm gember component foo --path="src/-private"
pnpm gember component foo --typescript # or `--ts`
```
Expand All @@ -67,8 +69,12 @@ pnpm gember component foo --typescript # or `--ts`
<summary>Generating helpers</summary>

```shell
pnpm gember helper --help # for all available options

# examples:
pnpm gember helper foo
pnpm gember helper foo --class-based # or `--class`
pnpm gember helper foo --cwd="test-app"
pnpm gember helper foo --path="src/-private"
pnpm gember helper foo --typescript # or `--ts`
```
Expand All @@ -79,8 +85,12 @@ pnpm gember helper foo --typescript # or `--ts`
<summary>Generating modifiers</summary>

```shell
pnpm gember modifier --help # for all available options

# examples:
pnpm gember modifier foo
pnpm gember modifier foo --class-based # or `--class`
pnpm gember modifier foo --cwd="test-app"
pnpm gember modifier foo --path="src/-private"
pnpm gember modifier foo --typescript # or `--ts`
```
Expand All @@ -91,7 +101,11 @@ pnpm gember modifier foo --typescript # or `--ts`
<summary>Generating services</summary>

```shell
pnpm gember service --help # for all available options

# examples:
pnpm gember service foo
pnpm gember service foo --cwd="test-app"
pnpm gember service foo --path="src/-private"
pnpm gember service foo --typescript # or `--ts`
```
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "@bertdeblock/gember",
"version": "0.4.0",
"description": "Generate components, helpers, modifiers and services in v2 addons.",
"description": "Generate components, helpers, modifiers and services in v1/v2 apps/addons.",
"repository": "https://github.com/bertdeblock/gember",
"license": "MIT",
"author": "Bert De Block",
Expand Down
29 changes: 29 additions & 0 deletions src/cli.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,12 @@ yargs(hideBin(process.argv))
description: "Generate a class-based component",
type: "boolean",
})
.option("cwd", {
default: "",
description:
"Generate a component in a custom current working directory",
type: "string",
})
.option("path", {
default: "",
description: "Generate a component at a custom path",
Expand All @@ -40,6 +46,7 @@ yargs(hideBin(process.argv))
handler(options) {
generateComponent(options.name, {
classBased: options.classBased,
cwd: options.cwd,
path: options.path,
typescript: options.typescript,
});
Expand All @@ -62,6 +69,12 @@ yargs(hideBin(process.argv))
description: "Generate a class-based helper",
type: "boolean",
})
.option("cwd", {
default: "",
description:
"Generate a helper in a custom current working directory",
type: "string",
})
.option("path", {
default: "",
description: "Generate a helper at a custom path",
Expand All @@ -77,6 +90,7 @@ yargs(hideBin(process.argv))
handler(options) {
generateHelper(options.name, {
classBased: options.classBased,
cwd: options.cwd,
path: options.path,
typescript: options.typescript,
});
Expand All @@ -99,6 +113,12 @@ yargs(hideBin(process.argv))
description: "Generate a class-based modifier",
type: "boolean",
})
.option("cwd", {
default: "",
description:
"Generate a modifier in a custom current working directory",
type: "string",
})
.option("path", {
default: "",
description: "Generate a modifier at a custom path",
Expand All @@ -114,6 +134,7 @@ yargs(hideBin(process.argv))
handler(options) {
generateModifier(options.name, {
classBased: options.classBased,
cwd: options.cwd,
path: options.path,
typescript: options.typescript,
});
Expand All @@ -130,6 +151,12 @@ yargs(hideBin(process.argv))
description: "The service's name",
type: "string",
})
.option("cwd", {
default: "",
description:
"Generate a service in a custom current working directory",
type: "string",
})
.option("path", {
default: "",
description: "Generate a service at a custom path",
Expand All @@ -144,11 +171,13 @@ yargs(hideBin(process.argv))
},
handler(options) {
generateService(options.name, {
cwd: options.cwd,
path: options.path,
typescript: options.typescript,
});
},
})
.demandCommand()
.epilogue("🫚 More info at https://github.com/bertdeblock/gember#usage")
.strict()
.parse();
12 changes: 9 additions & 3 deletions src/generate-document.ts
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,12 @@ const DOCUMENT_DIRECTORY: Record<DocumentName, string> = {
service: "services",
};

const SRC_DIRECTORY: Record<string, string> = {
APP: "app",
V1_ADDON: "addon",
V2_ADDON: "src",
};

export async function getDocumentPath(
documentName: DocumentName,
cwd: string,
Expand All @@ -99,9 +105,9 @@ export async function getDocumentPath(
const packageJson = await readJson(join(cwd, "package.json"));
const srcDirectory = isAddon(packageJson)
? isV2Addon(packageJson)
? "src" // v2 addon
: "addon" // v1 addon
: "app"; // v1 app
? SRC_DIRECTORY.V2_ADDON
: SRC_DIRECTORY.V1_ADDON
: SRC_DIRECTORY.APP;

return join(cwd, srcDirectory, DOCUMENT_DIRECTORY[documentName]);
}

0 comments on commit 8ee013d

Please sign in to comment.