@aibloom/adapter-next 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,11 @@
1
+ # @aibloom/adapter-next
2
+
3
+ Next.js App Router framework adapter for Aibloom code generation targets.
4
+
5
+ Detects project conventions, generates framework-appropriate page templates, and validates output against Next.js patterns.
6
+
7
+ ## Usage
8
+
9
+ ```ts
10
+ import { NextAdapter } from "@aibloom/adapter-next";
11
+ ```
@@ -0,0 +1,11 @@
1
+ import { type FrameworkAdapter } from "@aibloom/core";
2
+ import type { DetectionResult, DevServerConfig, ImplementationTarget, PageShape, ProjectContext, VerificationCommand } from "@aibloom/schemas";
3
+ export declare class NextAdapter implements FrameworkAdapter {
4
+ readonly id: "next";
5
+ detect(projectRoot: string): Promise<DetectionResult>;
6
+ inspect(projectRoot: string): Promise<ProjectContext>;
7
+ planTarget(page: PageShape, context: ProjectContext): Promise<ImplementationTarget>;
8
+ verificationCommands(context: ProjectContext): VerificationCommand[];
9
+ resolveDevServer(context: ProjectContext): DevServerConfig;
10
+ }
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EACV,eAAe,EACf,eAAe,EACf,oBAAoB,EACpB,SAAS,EACT,cAAc,EACd,mBAAmB,EACpB,MAAM,kBAAkB,CAAC;AAO1B,qBAAa,WAAY,YAAW,gBAAgB;IAClD,QAAQ,CAAC,EAAE,EAAG,MAAM,CAAU;IAExB,MAAM,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAqBrD,OAAO,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAmBrD,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAUzF,oBAAoB,CAAC,OAAO,EAAE,cAAc,GAAG,mBAAmB,EAAE;IAcpE,gBAAgB,CAAC,OAAO,EAAE,cAAc,GAAG,eAAe;CAS3D"}
package/dist/index.js ADDED
@@ -0,0 +1,85 @@
1
+ import fs from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { detectPackageManager, readPackageJson, } from "@aibloom/core";
4
+ function packageCommand(context, script) {
5
+ if (context.packageManager === "npm")
6
+ return { command: "npm", args: ["run", script] };
7
+ return { command: context.packageManager, args: [script] };
8
+ }
9
+ export class NextAdapter {
10
+ id = "next";
11
+ async detect(projectRoot) {
12
+ const pkg = await readPackageJson(projectRoot);
13
+ const deps = { ...pkg.dependencies, ...pkg.devDependencies };
14
+ const evidence = [];
15
+ if (deps.next)
16
+ evidence.push(`next dependency: ${deps.next}`);
17
+ for (const candidate of ["app", "src/app"]) {
18
+ try {
19
+ await fs.access(path.join(projectRoot, candidate));
20
+ evidence.push(`${candidate}/ exists`);
21
+ }
22
+ catch {
23
+ // Continue.
24
+ }
25
+ }
26
+ return {
27
+ detected: Boolean(deps.next) && evidence.some((item) => item.endsWith("/ exists")),
28
+ framework: "next",
29
+ confidence: Boolean(deps.next) ? (evidence.length > 1 ? 1 : 0.65) : 0,
30
+ evidence,
31
+ };
32
+ }
33
+ async inspect(projectRoot) {
34
+ const pkg = await readPackageJson(projectRoot);
35
+ let routeRoot = "app";
36
+ try {
37
+ await fs.access(path.join(projectRoot, "src", "app"));
38
+ routeRoot = "src/app";
39
+ }
40
+ catch {
41
+ // Default to app.
42
+ }
43
+ return {
44
+ projectRoot,
45
+ framework: "next",
46
+ packageManager: await detectPackageManager(projectRoot),
47
+ sourceRoot: routeRoot.startsWith("src/") ? "src" : ".",
48
+ routeRoot,
49
+ scripts: pkg.scripts ?? {},
50
+ };
51
+ }
52
+ async planTarget(page, context) {
53
+ const routeSegment = page.route.replace(/^\/+/, "");
54
+ const entryFile = path.join(context.routeRoot, routeSegment, "page.tsx");
55
+ return {
56
+ route: page.route,
57
+ entryFile,
58
+ files: [entryFile, path.join(context.sourceRoot, "components", `${page.pageName}View.tsx`)],
59
+ };
60
+ }
61
+ verificationCommands(context) {
62
+ const commands = [];
63
+ const add = (checkType, script, required) => {
64
+ if (!context.scripts[script])
65
+ return;
66
+ const command = packageCommand(context, script);
67
+ commands.push({ checkType, ...command, required });
68
+ };
69
+ add("lint", "lint", false);
70
+ add("typecheck", "typecheck", true);
71
+ add("unit_test", "test", false);
72
+ add("build", "build", true);
73
+ return commands;
74
+ }
75
+ resolveDevServer(context) {
76
+ const command = packageCommand(context, context.scripts.start ? "start" : "dev");
77
+ return {
78
+ ...command,
79
+ args: [...command.args, "--", "-p", "4173"],
80
+ port: 4173,
81
+ readyUrl: "http://127.0.0.1:4173",
82
+ };
83
+ }
84
+ }
85
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,24 @@
1
+ {
2
+ "name": "@aibloom/adapter-next",
3
+ "version": "0.2.0",
4
+ "description": "Next.js App Router framework adapter for Aibloom code generation targets",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "main": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.js"
13
+ }
14
+ },
15
+ "files": ["dist", "README.md"],
16
+ "scripts": {
17
+ "build": "tsc -p tsconfig.json",
18
+ "typecheck": "tsc -p tsconfig.json --noEmit"
19
+ },
20
+ "dependencies": {
21
+ "@aibloom/core": "0.2.0",
22
+ "@aibloom/schemas": "0.2.0"
23
+ }
24
+ }