@fluxfast/next 0.1.0 → 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.
Files changed (42) hide show
  1. package/bin/fluxfast.js +2 -11
  2. package/dist/cli/apply.d.ts +11 -0
  3. package/dist/cli/apply.d.ts.map +1 -0
  4. package/dist/cli/apply.js +189 -0
  5. package/dist/cli/apply.js.map +1 -0
  6. package/dist/cli/diagnostics.d.ts +22 -0
  7. package/dist/cli/diagnostics.d.ts.map +1 -0
  8. package/dist/cli/diagnostics.js +180 -0
  9. package/dist/cli/diagnostics.js.map +1 -0
  10. package/dist/cli/files.d.ts +14 -0
  11. package/dist/cli/files.d.ts.map +1 -0
  12. package/dist/cli/files.js +60 -0
  13. package/dist/cli/files.js.map +1 -0
  14. package/dist/cli/index.d.ts +7 -0
  15. package/dist/cli/index.d.ts.map +1 -0
  16. package/dist/cli/index.js +251 -0
  17. package/dist/cli/index.js.map +1 -0
  18. package/dist/cli/init.d.ts +42 -0
  19. package/dist/cli/init.d.ts.map +1 -0
  20. package/dist/cli/init.js +158 -0
  21. package/dist/cli/init.js.map +1 -0
  22. package/dist/cli/migration.d.ts +11 -0
  23. package/dist/cli/migration.d.ts.map +1 -0
  24. package/dist/cli/migration.js +73 -0
  25. package/dist/cli/migration.js.map +1 -0
  26. package/dist/cli/next-config.d.ts +16 -0
  27. package/dist/cli/next-config.d.ts.map +1 -0
  28. package/dist/cli/next-config.js +258 -0
  29. package/dist/cli/next-config.js.map +1 -0
  30. package/dist/cli/project.d.ts +12 -0
  31. package/dist/cli/project.d.ts.map +1 -0
  32. package/dist/cli/project.js +320 -0
  33. package/dist/cli/project.js.map +1 -0
  34. package/dist/cli/types.d.ts +41 -0
  35. package/dist/cli/types.d.ts.map +1 -0
  36. package/dist/cli/types.js +3 -0
  37. package/dist/cli/types.js.map +1 -0
  38. package/dist/generate.d.ts +10 -0
  39. package/dist/generate.d.ts.map +1 -1
  40. package/dist/generate.js +29 -8
  41. package/dist/generate.js.map +1 -1
  42. package/package.json +2 -2
@@ -0,0 +1,258 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.transformNextConfig = transformNextConfig;
7
+ exports.desiredNextConfigPath = desiredNextConfigPath;
8
+ exports.renderNextConfig = renderNextConfig;
9
+ exports.planNextConfigIntegration = planNextConfigIntegration;
10
+ const node_fs_1 = __importDefault(require("node:fs"));
11
+ const node_path_1 = __importDefault(require("node:path"));
12
+ function maskStringsAndComments(content) {
13
+ let result = "";
14
+ let state = "code";
15
+ let escaped = false;
16
+ for (let index = 0; index < content.length; index += 1) {
17
+ const current = content[index];
18
+ const next = content[index + 1];
19
+ if (state === "line") {
20
+ if (current === "\n") {
21
+ state = "code";
22
+ result += "\n";
23
+ }
24
+ else {
25
+ result += " ";
26
+ }
27
+ continue;
28
+ }
29
+ if (state === "block") {
30
+ if (current === "*" && next === "/") {
31
+ result += " ";
32
+ index += 1;
33
+ state = "code";
34
+ }
35
+ else {
36
+ result += current === "\n" ? "\n" : " ";
37
+ }
38
+ continue;
39
+ }
40
+ if (state !== "code") {
41
+ result += current === "\n" ? "\n" : " ";
42
+ if (escaped) {
43
+ escaped = false;
44
+ }
45
+ else if (current === "\\") {
46
+ escaped = true;
47
+ }
48
+ else if ((state === "single" && current === "'") ||
49
+ (state === "double" && current === '"') ||
50
+ (state === "template" && current === "`")) {
51
+ state = "code";
52
+ }
53
+ continue;
54
+ }
55
+ if (current === "/" && next === "/") {
56
+ result += " ";
57
+ index += 1;
58
+ state = "line";
59
+ }
60
+ else if (current === "/" && next === "*") {
61
+ result += " ";
62
+ index += 1;
63
+ state = "block";
64
+ }
65
+ else if (current === "'") {
66
+ result += " ";
67
+ state = "single";
68
+ }
69
+ else if (current === '"') {
70
+ result += " ";
71
+ state = "double";
72
+ }
73
+ else if (current === "`") {
74
+ result += " ";
75
+ state = "template";
76
+ }
77
+ else {
78
+ result += current;
79
+ }
80
+ }
81
+ return result;
82
+ }
83
+ function findExpressionEnd(content, start) {
84
+ let braces = 0;
85
+ let brackets = 0;
86
+ let parentheses = 0;
87
+ let state = "code";
88
+ let escaped = false;
89
+ for (let index = start; index < content.length; index += 1) {
90
+ const current = content[index];
91
+ const next = content[index + 1];
92
+ if (state === "line") {
93
+ if (current === "\n")
94
+ state = "code";
95
+ continue;
96
+ }
97
+ if (state === "block") {
98
+ if (current === "*" && next === "/") {
99
+ index += 1;
100
+ state = "code";
101
+ }
102
+ continue;
103
+ }
104
+ if (state !== "code") {
105
+ if (escaped) {
106
+ escaped = false;
107
+ }
108
+ else if (current === "\\") {
109
+ escaped = true;
110
+ }
111
+ else if ((state === "single" && current === "'") ||
112
+ (state === "double" && current === '"') ||
113
+ (state === "template" && current === "`")) {
114
+ state = "code";
115
+ }
116
+ continue;
117
+ }
118
+ if (current === "/" && next === "/") {
119
+ index += 1;
120
+ state = "line";
121
+ }
122
+ else if (current === "/" && next === "*") {
123
+ index += 1;
124
+ state = "block";
125
+ }
126
+ else if (current === "'") {
127
+ state = "single";
128
+ }
129
+ else if (current === '"') {
130
+ state = "double";
131
+ }
132
+ else if (current === "`") {
133
+ state = "template";
134
+ }
135
+ else if (current === "{") {
136
+ braces += 1;
137
+ }
138
+ else if (current === "}") {
139
+ braces -= 1;
140
+ }
141
+ else if (current === "[") {
142
+ brackets += 1;
143
+ }
144
+ else if (current === "]") {
145
+ brackets -= 1;
146
+ }
147
+ else if (current === "(") {
148
+ parentheses += 1;
149
+ }
150
+ else if (current === ")") {
151
+ parentheses -= 1;
152
+ }
153
+ else if (current === ";" &&
154
+ braces === 0 &&
155
+ brackets === 0 &&
156
+ parentheses === 0) {
157
+ return index;
158
+ }
159
+ }
160
+ return content.length;
161
+ }
162
+ function isSafeConfigExpression(expression) {
163
+ const trimmed = expression.trim();
164
+ return (/^[A-Za-z_$][\w$]*$/.test(trimmed) ||
165
+ (trimmed.startsWith("{") && trimmed.endsWith("}")));
166
+ }
167
+ function insertIntegrationImport(content, commonJs) {
168
+ const statement = commonJs
169
+ ? 'const { withFluxFast } = require("@fluxfast/next/next-config");'
170
+ : 'import { withFluxFast } from "@fluxfast/next/next-config";';
171
+ const bom = content.startsWith("\uFEFF") ? "\uFEFF" : "";
172
+ return `${bom}${statement}\n${content.slice(bom.length)}`;
173
+ }
174
+ function transformNextConfig(content, format) {
175
+ const masked = maskStringsAndComments(content);
176
+ if (/\bwithFluxFast\s*\(/.test(masked)) {
177
+ return { status: "unchanged", content };
178
+ }
179
+ const commonJs = format === "cjs" || /\bmodule\s*\.\s*exports\s*=/.test(masked);
180
+ const assignment = commonJs
181
+ ? /\bmodule\s*\.\s*exports\s*=/.exec(masked)
182
+ : /\bexport\s+default\b/.exec(masked);
183
+ if (!assignment) {
184
+ return {
185
+ status: "manual",
186
+ content,
187
+ reason: "FluxFast could not find a supported default Next configuration export.",
188
+ };
189
+ }
190
+ const expressionStart = assignment.index + assignment[0].length;
191
+ const expressionEnd = findExpressionEnd(content, expressionStart);
192
+ const expression = content.slice(expressionStart, expressionEnd).trim();
193
+ if (!isSafeConfigExpression(expression)) {
194
+ return {
195
+ status: "manual",
196
+ content,
197
+ reason: "FluxFast detected an existing configuration wrapper or unsupported export expression and cannot safely determine wrapper ordering.",
198
+ };
199
+ }
200
+ const beforeExpression = content.slice(0, expressionStart);
201
+ const afterExpression = content.slice(expressionEnd);
202
+ const transformed = `${beforeExpression} withFluxFast(${expression})${afterExpression}`;
203
+ return {
204
+ status: "modified",
205
+ content: insertIntegrationImport(transformed, commonJs),
206
+ };
207
+ }
208
+ function desiredNextConfigPath(project) {
209
+ return node_path_1.default.join(project.root, project.language === "typescript" ? "next.config.ts" : "next.config.mjs");
210
+ }
211
+ function renderNextConfig(project) {
212
+ const typeDeclaration = project.language === "typescript"
213
+ ? 'import type { NextConfig } from "next";\n'
214
+ : "";
215
+ const annotation = project.language === "typescript" ? ": NextConfig" : "";
216
+ return `${typeDeclaration}import { withFluxFast } from "@fluxfast/next/next-config";\n\nconst nextConfig${annotation} = {};\n\nexport default withFluxFast(nextConfig);\n`;
217
+ }
218
+ function planNextConfigIntegration(project) {
219
+ if (!project.nextConfigPath || !project.nextConfigFormat) {
220
+ return {
221
+ operation: {
222
+ type: "create",
223
+ path: desiredNextConfigPath(project),
224
+ content: renderNextConfig(project),
225
+ },
226
+ };
227
+ }
228
+ const before = node_fs_1.default.readFileSync(project.nextConfigPath, "utf8");
229
+ const transformed = transformNextConfig(before, project.nextConfigFormat);
230
+ if (transformed.status === "modified") {
231
+ return {
232
+ operation: {
233
+ type: "modify",
234
+ path: project.nextConfigPath,
235
+ before,
236
+ after: transformed.content,
237
+ },
238
+ };
239
+ }
240
+ if (transformed.status === "unchanged") {
241
+ return {
242
+ operation: {
243
+ type: "skip",
244
+ path: project.nextConfigPath,
245
+ reason: "Next config already uses withFluxFast",
246
+ },
247
+ };
248
+ }
249
+ return {
250
+ operation: {
251
+ type: "skip",
252
+ path: project.nextConfigPath,
253
+ reason: transformed.reason ?? "Next config requires manual integration",
254
+ },
255
+ manualAction: `${transformed.reason}\n\nAdd:\n import { withFluxFast } from "@fluxfast/next/next-config";\n\nThen wrap the exported Next configuration with withFluxFast().`,
256
+ };
257
+ }
258
+ //# sourceMappingURL=next-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"next-config.js","sourceRoot":"","sources":["../../src/cli/next-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { CompatibilityStatus, DetectedPackageName, FluxProjectInfo } from "./types";
2
+ export declare class ProjectDetectionError extends Error {
3
+ constructor(message: string);
4
+ }
5
+ /**
6
+ * Classify package specs without executing a package manager or project code.
7
+ * Exact installed versions can be definitive; ranges remain "probably" valid.
8
+ */
9
+ export declare function classifyPackageCompatibility(packageName: DetectedPackageName, version: string | undefined): CompatibilityStatus;
10
+ /** Analyze a Next.js project without importing project code or modifying files. */
11
+ export declare function detectFluxProject(startPath?: string): FluxProjectInfo;
12
+ //# sourceMappingURL=project.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/cli/project.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,mBAAmB,EAEnB,mBAAmB,EACnB,eAAe,EAGhB,MAAM,SAAS,CAAC;AAmBjB,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,YAAY,OAAO,EAAE,MAAM,EAG1B;CACF;AAoKD;;;GAGG;AACH,wBAAgB,4BAA4B,CAC1C,WAAW,EAAE,mBAAmB,EAChC,OAAO,EAAE,MAAM,GAAG,SAAS,GAC1B,mBAAmB,CAgCrB;AA4ID,mFAAmF;AACnF,wBAAgB,iBAAiB,CAAC,SAAS,SAAgB,GAAG,eAAe,CA0C5E"}
@@ -0,0 +1,320 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ProjectDetectionError = void 0;
7
+ exports.classifyPackageCompatibility = classifyPackageCompatibility;
8
+ exports.detectFluxProject = detectFluxProject;
9
+ const node_fs_1 = __importDefault(require("node:fs"));
10
+ const node_path_1 = __importDefault(require("node:path"));
11
+ const NEXT_CONFIGS = [
12
+ ["next.config.ts", "ts"],
13
+ ["next.config.js", "js"],
14
+ ["next.config.mjs", "mjs"],
15
+ ["next.config.cjs", "cjs"],
16
+ ];
17
+ const PAGE_EXTENSIONS = ["tsx", "ts", "jsx", "js"];
18
+ const DEPENDENCY_FIELDS = [
19
+ "dependencies",
20
+ "devDependencies",
21
+ "optionalDependencies",
22
+ "peerDependencies",
23
+ ];
24
+ class ProjectDetectionError extends Error {
25
+ constructor(message) {
26
+ super(message);
27
+ this.name = "ProjectDetectionError";
28
+ }
29
+ }
30
+ exports.ProjectDetectionError = ProjectDetectionError;
31
+ function isRecord(value) {
32
+ return typeof value === "object" && value !== null && !Array.isArray(value);
33
+ }
34
+ function isFile(filePath) {
35
+ try {
36
+ return node_fs_1.default.statSync(filePath).isFile();
37
+ }
38
+ catch {
39
+ return false;
40
+ }
41
+ }
42
+ function isDirectory(directoryPath) {
43
+ try {
44
+ return node_fs_1.default.statSync(directoryPath).isDirectory();
45
+ }
46
+ catch {
47
+ return false;
48
+ }
49
+ }
50
+ function findProjectRoot(startPath) {
51
+ let current = node_path_1.default.resolve(startPath);
52
+ if (isFile(current)) {
53
+ current = node_path_1.default.dirname(current);
54
+ }
55
+ while (true) {
56
+ const packageJsonPath = node_path_1.default.join(current, "package.json");
57
+ if (isFile(packageJsonPath)) {
58
+ return { root: current, packageJsonPath };
59
+ }
60
+ const parent = node_path_1.default.dirname(current);
61
+ if (parent === current) {
62
+ throw new ProjectDetectionError(`Could not find package.json from ${node_path_1.default.resolve(startPath)} or any parent directory.`);
63
+ }
64
+ current = parent;
65
+ }
66
+ }
67
+ function readJsonRecord(filePath, description) {
68
+ let parsed;
69
+ try {
70
+ parsed = JSON.parse(node_fs_1.default.readFileSync(filePath, "utf8"));
71
+ }
72
+ catch (error) {
73
+ const detail = error instanceof Error ? ` ${error.message}` : "";
74
+ throw new ProjectDetectionError(`Could not read ${description} at ${filePath}.${detail}`);
75
+ }
76
+ if (!isRecord(parsed)) {
77
+ throw new ProjectDetectionError(`Expected ${description} at ${filePath} to contain a JSON object.`);
78
+ }
79
+ return parsed;
80
+ }
81
+ function readDeclaredVersion(packageJson, packageName) {
82
+ for (const field of DEPENDENCY_FIELDS) {
83
+ const dependencies = packageJson[field];
84
+ if (!isRecord(dependencies)) {
85
+ continue;
86
+ }
87
+ const version = dependencies[packageName];
88
+ if (typeof version === "string") {
89
+ return version;
90
+ }
91
+ }
92
+ return undefined;
93
+ }
94
+ function readInstalledVersion(root, packageName) {
95
+ const packageSegments = [...packageName.split("/"), "package.json"];
96
+ const candidates = [node_path_1.default.join(root, "node_modules", ...packageSegments)];
97
+ if (packageName === "@fluxfast/core") {
98
+ candidates.push(node_path_1.default.join(root, "node_modules", "@fluxfast", "next", "node_modules", ...packageSegments));
99
+ }
100
+ for (const packagePath of candidates) {
101
+ if (!isFile(packagePath))
102
+ continue;
103
+ try {
104
+ const packageJson = JSON.parse(node_fs_1.default.readFileSync(packagePath, "utf8"));
105
+ if (isRecord(packageJson) && typeof packageJson.version === "string") {
106
+ return packageJson.version;
107
+ }
108
+ }
109
+ catch {
110
+ // Try another static package location before reporting an unknown version.
111
+ }
112
+ }
113
+ return undefined;
114
+ }
115
+ function parseExactVersion(version) {
116
+ const match = /^v?(\d+)\.(\d+)\.(\d+)(?:[-+][0-9A-Za-z.-]+)?$/.exec(version.trim());
117
+ if (!match) {
118
+ return undefined;
119
+ }
120
+ return {
121
+ major: Number(match[1]),
122
+ minor: Number(match[2]),
123
+ patch: Number(match[3]),
124
+ };
125
+ }
126
+ function firstVersionInRange(version) {
127
+ const match = /(\d+)(?:\.(\d+))?(?:\.(\d+))?/.exec(version);
128
+ if (!match) {
129
+ return undefined;
130
+ }
131
+ return {
132
+ major: Number(match[1]),
133
+ minor: Number(match[2] ?? 0),
134
+ patch: Number(match[3] ?? 0),
135
+ };
136
+ }
137
+ function isSupportedExact(packageName, version) {
138
+ if (packageName === "next") {
139
+ return (version.major === 16 &&
140
+ (version.minor > 3 || (version.minor === 3 && version.patch >= 0)));
141
+ }
142
+ if (packageName === "react" || packageName === "react-dom") {
143
+ return version.major >= 19;
144
+ }
145
+ return true;
146
+ }
147
+ /**
148
+ * Classify package specs without executing a package manager or project code.
149
+ * Exact installed versions can be definitive; ranges remain "probably" valid.
150
+ */
151
+ function classifyPackageCompatibility(packageName, version) {
152
+ if (!version) {
153
+ return "unknown";
154
+ }
155
+ const trimmed = version.trim();
156
+ const exact = parseExactVersion(trimmed);
157
+ if (exact) {
158
+ return isSupportedExact(packageName, exact) ? "supported" : "unsupported";
159
+ }
160
+ if (packageName === "@fluxfast/next" && trimmed.startsWith("workspace:")) {
161
+ return "probably-supported";
162
+ }
163
+ const ranged = firstVersionInRange(trimmed);
164
+ if (!ranged) {
165
+ return "unknown";
166
+ }
167
+ if (packageName === "next") {
168
+ if (ranged.major !== 16 || ranged.minor < 3) {
169
+ return "unsupported";
170
+ }
171
+ return "probably-supported";
172
+ }
173
+ if (packageName === "react" || packageName === "react-dom") {
174
+ return ranged.major >= 19 ? "probably-supported" : "unsupported";
175
+ }
176
+ return "probably-supported";
177
+ }
178
+ function detectPackage(root, packageJson, name) {
179
+ const declaredVersion = readDeclaredVersion(packageJson, name);
180
+ const installedVersion = readInstalledVersion(root, name);
181
+ const effectiveVersion = installedVersion ?? declaredVersion;
182
+ return {
183
+ name,
184
+ declaredVersion,
185
+ installedVersion,
186
+ effectiveVersion,
187
+ compatibility: classifyPackageCompatibility(name, effectiveVersion),
188
+ };
189
+ }
190
+ function containsTsx(directoryPath) {
191
+ if (!isDirectory(directoryPath)) {
192
+ return false;
193
+ }
194
+ for (const entry of node_fs_1.default.readdirSync(directoryPath, { withFileTypes: true })) {
195
+ if (entry.isFile() && entry.name.endsWith(".tsx")) {
196
+ return true;
197
+ }
198
+ if (entry.isDirectory() &&
199
+ entry.name !== "node_modules" &&
200
+ entry.name !== ".next" &&
201
+ entry.name !== ".git" &&
202
+ containsTsx(node_path_1.default.join(directoryPath, entry.name))) {
203
+ return true;
204
+ }
205
+ }
206
+ return false;
207
+ }
208
+ function detectLanguage(root) {
209
+ if (isFile(node_path_1.default.join(root, "tsconfig.json")) ||
210
+ isFile(node_path_1.default.join(root, "next.config.ts")) ||
211
+ isFile(node_path_1.default.join(root, "fluxfast.config.ts")) ||
212
+ isFile(node_path_1.default.join(root, "src", "fluxfast.config.ts")) ||
213
+ containsTsx(node_path_1.default.join(root, "src")) ||
214
+ containsTsx(node_path_1.default.join(root, "app")) ||
215
+ containsTsx(node_path_1.default.join(root, "pages"))) {
216
+ return "typescript";
217
+ }
218
+ return "javascript";
219
+ }
220
+ function detectFluxConfig(sourceRoot, language) {
221
+ const candidates = ["fluxfast.config.ts", "fluxfast.config.js"]
222
+ .map(file => node_path_1.default.join(sourceRoot, file))
223
+ .filter(isFile);
224
+ const preferredExtension = language === "typescript" ? ".ts" : ".js";
225
+ const preferred = candidates.find(candidate => candidate.endsWith(preferredExtension));
226
+ return {
227
+ configPath: preferred ??
228
+ candidates[0] ??
229
+ node_path_1.default.join(sourceRoot, `fluxfast.config${preferredExtension}`),
230
+ configPaths: candidates,
231
+ };
232
+ }
233
+ function detectAtAlias(root, usesSrcDirectory) {
234
+ const configPath = ["tsconfig.json", "jsconfig.json"]
235
+ .map(file => node_path_1.default.join(root, file))
236
+ .find(isFile);
237
+ if (!configPath) {
238
+ return false;
239
+ }
240
+ const content = node_fs_1.default.readFileSync(configPath, "utf8");
241
+ const aliasMatch = /["']@\/\*["']\s*:\s*\[\s*["']([^"']+)["']/.exec(content);
242
+ if (!aliasMatch) {
243
+ return false;
244
+ }
245
+ const normalizedTarget = aliasMatch[1].replace(/\\/g, "/").replace(/^\.\//, "");
246
+ return usesSrcDirectory
247
+ ? normalizedTarget === "src/*"
248
+ : normalizedTarget === "*";
249
+ }
250
+ function findPageFile(directory) {
251
+ for (const extension of PAGE_EXTENSIONS) {
252
+ const candidate = node_path_1.default.join(directory, `page.${extension}`);
253
+ if (isFile(candidate)) {
254
+ return candidate;
255
+ }
256
+ }
257
+ return undefined;
258
+ }
259
+ function detectSourceLayout(root) {
260
+ const srcApp = node_path_1.default.join(root, "src", "app");
261
+ const rootApp = node_path_1.default.join(root, "app");
262
+ const srcPages = node_path_1.default.join(root, "src", "pages");
263
+ const rootPages = node_path_1.default.join(root, "pages");
264
+ const hasSrcApp = isDirectory(srcApp);
265
+ const hasRootApp = isDirectory(rootApp);
266
+ const pagesRouterDir = isDirectory(srcPages)
267
+ ? srcPages
268
+ : isDirectory(rootPages)
269
+ ? rootPages
270
+ : undefined;
271
+ const usesSrcDirectory = hasSrcApp ||
272
+ (!hasRootApp && isDirectory(srcPages)) ||
273
+ (!hasRootApp && !isDirectory(rootPages) && isDirectory(node_path_1.default.join(root, "src")));
274
+ return {
275
+ usesSrcDirectory,
276
+ hasAppRouter: hasSrcApp || hasRootApp,
277
+ appDir: hasSrcApp ? srcApp : hasRootApp ? rootApp : usesSrcDirectory ? srcApp : rootApp,
278
+ pagesRouterDir,
279
+ };
280
+ }
281
+ /** Analyze a Next.js project without importing project code or modifying files. */
282
+ function detectFluxProject(startPath = process.cwd()) {
283
+ const { root, packageJsonPath } = findProjectRoot(startPath);
284
+ const packageJson = readJsonRecord(packageJsonPath, "package.json");
285
+ const layout = detectSourceLayout(root);
286
+ const language = detectLanguage(root);
287
+ const sourceRoot = layout.usesSrcDirectory ? node_path_1.default.join(root, "src") : root;
288
+ const fluxConfig = detectFluxConfig(sourceRoot, language);
289
+ const nextConfigs = NEXT_CONFIGS.filter(([file]) => isFile(node_path_1.default.join(root, file)));
290
+ const [nextConfig] = nextConfigs;
291
+ const catchAllDirectory = node_path_1.default.join(layout.appDir, "(flux)", "[[...flux]]");
292
+ return {
293
+ root,
294
+ packageJsonPath,
295
+ usesSrcDirectory: layout.usesSrcDirectory,
296
+ hasAppRouter: layout.hasAppRouter,
297
+ appDir: layout.appDir,
298
+ pagesRouterDir: layout.pagesRouterDir,
299
+ fluxPagesDir: node_path_1.default.join(sourceRoot, "flux-pages"),
300
+ generatedDir: node_path_1.default.join(sourceRoot, ".fluxfast"),
301
+ registryPath: node_path_1.default.join(sourceRoot, ".fluxfast", "pages.generated.ts"),
302
+ configPath: fluxConfig.configPath,
303
+ configPaths: fluxConfig.configPaths,
304
+ nextConfigPath: nextConfig ? node_path_1.default.join(root, nextConfig[0]) : undefined,
305
+ nextConfigFormat: nextConfig?.[1],
306
+ nextConfigPaths: nextConfigs.map(([file]) => node_path_1.default.join(root, file)),
307
+ language,
308
+ usesAtAlias: detectAtAlias(root, layout.usesSrcDirectory),
309
+ rootPagePath: findPageFile(layout.appDir),
310
+ catchAllPath: findPageFile(catchAllDirectory),
311
+ packages: {
312
+ next: detectPackage(root, packageJson, "next"),
313
+ react: detectPackage(root, packageJson, "react"),
314
+ reactDom: detectPackage(root, packageJson, "react-dom"),
315
+ fluxfastCore: detectPackage(root, packageJson, "@fluxfast/core"),
316
+ fluxfastNext: detectPackage(root, packageJson, "@fluxfast/next"),
317
+ },
318
+ };
319
+ }
320
+ //# sourceMappingURL=project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/cli/project.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ export type ProjectLanguage = "typescript" | "javascript";
2
+ export type NextConfigFormat = "ts" | "js" | "mjs" | "cjs";
3
+ export type CompatibilityStatus = "supported" | "probably-supported" | "unsupported" | "unknown";
4
+ export type DetectedPackageName = "next" | "react" | "react-dom" | "@fluxfast/core" | "@fluxfast/next";
5
+ export interface DetectedPackage {
6
+ name: DetectedPackageName;
7
+ declaredVersion?: string;
8
+ installedVersion?: string;
9
+ effectiveVersion?: string;
10
+ compatibility: CompatibilityStatus;
11
+ }
12
+ export interface FluxProjectPackages {
13
+ next: DetectedPackage;
14
+ react: DetectedPackage;
15
+ reactDom: DetectedPackage;
16
+ fluxfastCore: DetectedPackage;
17
+ fluxfastNext: DetectedPackage;
18
+ }
19
+ /** A static, read-only description of a potential FluxFast Next.js project. */
20
+ export interface FluxProjectInfo {
21
+ root: string;
22
+ packageJsonPath: string;
23
+ usesSrcDirectory: boolean;
24
+ hasAppRouter: boolean;
25
+ appDir: string;
26
+ pagesRouterDir?: string;
27
+ fluxPagesDir: string;
28
+ generatedDir: string;
29
+ registryPath: string;
30
+ configPath: string;
31
+ configPaths: string[];
32
+ nextConfigPath?: string;
33
+ nextConfigFormat?: NextConfigFormat;
34
+ nextConfigPaths: string[];
35
+ language: ProjectLanguage;
36
+ usesAtAlias: boolean;
37
+ rootPagePath?: string;
38
+ catchAllPath?: string;
39
+ packages: FluxProjectPackages;
40
+ }
41
+ //# sourceMappingURL=types.d.ts.map