Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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]);
}