Skip to content

Commit 85a63d1

Browse files
authored
Merge pull request #49 from bertdeblock/add-test-for-v2-apps
Add test for v2 apps
2 parents 7aa7904 + 7cf2782 commit 85a63d1

File tree

10 files changed

+65
-26
lines changed

10 files changed

+65
-26
lines changed

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
],
1818
"scripts": {
1919
"build": "tsc --project tsconfig.json",
20+
"gember": "bin/gember.js --path=test/output",
2021
"lint": "concurrently --group --prefix-colors auto \"npm:lint:*(!fix)\"",
2122
"lint:fix": "concurrently --group --prefix-colors auto \"npm:lint:*:fix\"",
2223
"lint:format": "prettier . --cache --check",

src/cli.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import {
99
generateModifier,
1010
generateService,
1111
} from "./generators.js";
12-
import { DocumentName } from "./types.js";
12+
import type { DocumentName } from "./types.js";
1313

1414
yargs(hideBin(process.argv))
1515
.command({

src/config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { findUp } from "find-up";
22
import { pathToFileURL } from "node:url";
33
import { GemberError } from "./errors.js";
4-
import { DocumentName, type File } from "./types.js";
4+
import type { DocumentName, File } from "./types.js";
55

66
export type Config = {
77
generators?: {

src/generate.ts

Lines changed: 10 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ import { fileURLToPath } from "node:url";
88
import { type GenerateInputs, loadScaffdog } from "scaffdog";
99
import { resolveConfig } from "./config.js";
1010
import { GemberError } from "./errors.js";
11-
import { isAddon, isV2Addon } from "./helpers.js";
12-
import { type DocumentName } from "./types.js";
11+
import { isV1Addon, isV2Addon, pathCase } from "./helpers.js";
12+
import type { DocumentName } from "./types.js";
1313

1414
export async function generate(
1515
documentName: DocumentName,
@@ -81,14 +81,14 @@ export async function generate(
8181
});
8282
}
8383

84-
const DOCUMENT_DIRECTORY: Record<DocumentName, string> = {
84+
const DOCUMENT_DIR: Record<DocumentName, string> = {
8585
component: "components",
8686
helper: "helpers",
8787
modifier: "modifiers",
8888
service: "services",
8989
};
9090

91-
const SRC_DIRECTORY: Record<string, string> = {
91+
const SRC_DIR: Record<string, string> = {
9292
APP: "app",
9393
V1_ADDON: "addon",
9494
V2_ADDON: "src",
@@ -108,18 +108,11 @@ export async function resolveGeneratePath(
108108
}
109109

110110
const packageJson = await readJson(join(packagePath, "package.json"));
111-
const srcDirectory = isAddon(packageJson)
112-
? isV2Addon(packageJson)
113-
? SRC_DIRECTORY.V2_ADDON
114-
: SRC_DIRECTORY.V1_ADDON
115-
: SRC_DIRECTORY.APP;
111+
const srcDir = isV2Addon(packageJson)
112+
? SRC_DIR.V2_ADDON
113+
: isV1Addon(packageJson)
114+
? SRC_DIR.V1_ADDON
115+
: SRC_DIR.APP;
116116

117-
return join(packagePath, srcDirectory, DOCUMENT_DIRECTORY[documentName]);
118-
}
119-
120-
function pathCase(entityName: string): string {
121-
return entityName
122-
.split("/")
123-
.map((part) => kebabCase(part))
124-
.join("/");
117+
return join(packagePath, srcDir, DOCUMENT_DIR[documentName]);
125118
}

src/helpers.ts

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,37 @@
1-
import { type EmberPackageJson } from "./types.js";
1+
import { kebabCase } from "change-case";
2+
import type { EmberPackageJson } from "./types.js";
23

3-
export function isAddon(packageJson: EmberPackageJson): boolean {
4-
if (Array.isArray(packageJson.keywords)) {
5-
return packageJson.keywords.includes("ember-addon");
4+
export function isV1Addon(packageJson: EmberPackageJson): boolean {
5+
if (isAddon(packageJson)) {
6+
const { version } = packageJson["ember-addon"] ?? {};
7+
8+
return version === 1 || version === undefined;
69
}
710

811
return false;
912
}
1013

1114
export function isV2Addon(packageJson: EmberPackageJson): boolean {
12-
return packageJson["ember-addon"]?.version === 2;
15+
if (isAddon(packageJson)) {
16+
const { version } = packageJson["ember-addon"] ?? {};
17+
18+
return version === 2;
19+
}
20+
21+
return false;
22+
}
23+
24+
export function pathCase(entityName: string): string {
25+
return entityName
26+
.split("/")
27+
.map((part) => kebabCase(part))
28+
.join("/");
29+
}
30+
31+
function isAddon(packageJson: EmberPackageJson): boolean {
32+
if (Array.isArray(packageJson.keywords)) {
33+
return packageJson.keywords.includes("ember-addon");
34+
}
35+
36+
return false;
1337
}

src/types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
// eslint-disable-next-line n/no-missing-import
2-
import { type PackageJson } from "type-fest";
2+
import type { PackageJson } from "type-fest";
33

44
export type DocumentName = "component" | "helper" | "modifier" | "service";
55

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,18 @@ it("supports v1 apps", async (ctx) => {
1515
.toEqual(join("test/packages", name, "app/components"));
1616
});
1717

18+
it("supports v2 apps", async (ctx) => {
19+
const name = "v2-app";
20+
const generatePath = await resolveGeneratePath(
21+
"component",
22+
Package.createPath(name),
23+
);
24+
25+
ctx
26+
.expect(generatePath)
27+
.toEqual(join("test/packages", name, "app/components"));
28+
});
29+
1830
it("supports v1 addons", async (ctx) => {
1931
const name = "v1-addon";
2032
const generatePath = await resolveGeneratePath(

test/packages/v2-app/app/.gitkeep

Whitespace-only changes.

test/packages/v2-app/package.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"name": "v2-app",
3+
"ember": {},
4+
"ember-addon": {
5+
"type": "app",
6+
"version": 2
7+
}
8+
}

tsconfig.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55
"moduleResolution": "NodeNext",
66
"outDir": "./dist",
77
"strict": true,
8-
"target": "ESNext"
8+
"target": "ESNext",
9+
"verbatimModuleSyntax": true
910
},
1011
"include": ["src"]
1112
}

0 commit comments

Comments
 (0)