Skip to content

Commit 6ba9aec

Browse files
authored
Merge pull request #26 from bertdeblock/support-v1-apps-and-addons
Support v1 apps and addons
2 parents a69905a + e82f55b commit 6ba9aec

File tree

13 files changed

+102
-10
lines changed

13 files changed

+102
-10
lines changed

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
"prettier": "^3.2.5",
5252
"recursive-copy": "^2.0.14",
5353
"release-plan": "^0.8.0",
54+
"type-fest": "^4.13.1",
5455
"typescript": "^5.3.3",
5556
"uuid": "^9.0.1",
5657
"vitest": "^1.2.2"

pnpm-lock.yaml

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/generate-document.ts

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
import chalk from "chalk";
22
import { camelCase, kebabCase, pascalCase } from "change-case";
3-
import { ensureDir } from "fs-extra";
3+
import { ensureDir, readJson } from "fs-extra/esm";
44
import { writeFile } from "node:fs/promises";
55
import { dirname, isAbsolute, join, parse, relative } from "node:path";
66
import { cwd as processCwd } from "node:process";
77
import { fileURLToPath } from "node:url";
88
import { type GenerateInputs, loadScaffdog } from "scaffdog";
99
import { getConfig } from "./config.js";
10+
import { isAddon, isV2Addon } from "./helpers.js";
1011
import { type DocumentName } from "./types.js";
1112

1213
export async function generateDocument(
@@ -31,7 +32,7 @@ export async function generateDocument(
3132
throw new Error(`[BUG] Document \`${documentName}\` not found.`);
3233
}
3334

34-
const documentPath = getDocumentPath(documentName, cwd, path);
35+
const documentPath = await getDocumentPath(documentName, cwd, path);
3536
const files = await scaffdog.generate(document, documentPath, {
3637
inputs: {
3738
...inputs,
@@ -82,11 +83,11 @@ const DOCUMENT_DIRECTORY: Record<DocumentName, string> = {
8283
service: "services",
8384
};
8485

85-
function getDocumentPath(
86+
export async function getDocumentPath(
8687
documentName: DocumentName,
8788
cwd: string,
88-
path: string,
89-
): string {
89+
path?: string,
90+
): Promise<string> {
9091
if (path) {
9192
if (isAbsolute(path)) {
9293
return path;
@@ -95,5 +96,12 @@ function getDocumentPath(
9596
}
9697
}
9798

98-
return join(cwd, "src", DOCUMENT_DIRECTORY[documentName]);
99+
const packageJson = await readJson(join(cwd, "package.json"));
100+
const srcDirectory = isAddon(packageJson)
101+
? isV2Addon(packageJson)
102+
? "src" // v2 addon
103+
: "addon" // v1 addon
104+
: "app"; // v1 app
105+
106+
return join(cwd, srcDirectory, DOCUMENT_DIRECTORY[documentName]);
99107
}

src/helpers.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { type EmberPackageJson } from "./types.js";
2+
3+
export function isAddon(packageJson: EmberPackageJson): boolean {
4+
if (Array.isArray(packageJson.keywords)) {
5+
return packageJson.keywords.includes("ember-addon");
6+
}
7+
8+
return false;
9+
}
10+
11+
export function isV2Addon(packageJson: EmberPackageJson): boolean {
12+
return packageJson["ember-addon"]?.version === 2;
13+
}

src/types.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,17 @@
1+
// eslint-disable-next-line n/no-missing-import
2+
import { type PackageJson } from "type-fest";
3+
14
export type DocumentName = "component" | "helper" | "modifier" | "service";
25

6+
export type EmberPackageJson = PackageJson & {
7+
ember?: {
8+
edition?: string;
9+
};
10+
"ember-addon"?: {
11+
version?: number;
12+
};
13+
};
14+
315
export type File = {
416
content: string;
517
name: string;

test/blueprints/v1-addon/addon/.gitkeep

Whitespace-only changes.
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"name": "v1-addon",
3+
"keywords": [
4+
"ember-addon"
5+
],
6+
"ember": {},
7+
"ember-addon": {}
8+
}

test/blueprints/v1-app/app/.gitkeep

Whitespace-only changes.
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"name": "v1-app",
3+
"ember": {},
4+
"ember-addon": {}
5+
}

test/blueprints/v2-addon-hooks/package.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,12 @@
33
"private": true,
44
"volta": {
55
"extends": "../../../package.json"
6+
},
7+
"keywords": [
8+
"ember-addon"
9+
],
10+
"ember": {},
11+
"ember-addon": {
12+
"version": 2
613
}
714
}

0 commit comments

Comments
 (0)