@fluxfast/next 0.1.0 → 0.3.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/bin/fluxfast.js +2 -11
- package/dist/cli/apply.d.ts +11 -0
- package/dist/cli/apply.d.ts.map +1 -0
- package/dist/cli/apply.js +189 -0
- package/dist/cli/apply.js.map +1 -0
- package/dist/cli/diagnostics.d.ts +22 -0
- package/dist/cli/diagnostics.d.ts.map +1 -0
- package/dist/cli/diagnostics.js +180 -0
- package/dist/cli/diagnostics.js.map +1 -0
- package/dist/cli/files.d.ts +14 -0
- package/dist/cli/files.d.ts.map +1 -0
- package/dist/cli/files.js +60 -0
- package/dist/cli/files.js.map +1 -0
- package/dist/cli/index.d.ts +7 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +251 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/init.d.ts +42 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +158 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/cli/migration.d.ts +11 -0
- package/dist/cli/migration.d.ts.map +1 -0
- package/dist/cli/migration.js +73 -0
- package/dist/cli/migration.js.map +1 -0
- package/dist/cli/next-config.d.ts +16 -0
- package/dist/cli/next-config.d.ts.map +1 -0
- package/dist/cli/next-config.js +258 -0
- package/dist/cli/next-config.js.map +1 -0
- package/dist/cli/project.d.ts +12 -0
- package/dist/cli/project.d.ts.map +1 -0
- package/dist/cli/project.js +320 -0
- package/dist/cli/project.js.map +1 -0
- package/dist/cli/types.d.ts +41 -0
- package/dist/cli/types.d.ts.map +1 -0
- package/dist/cli/types.js +3 -0
- package/dist/cli/types.js.map +1 -0
- package/dist/generate.d.ts +10 -0
- package/dist/generate.d.ts.map +1 -1
- package/dist/generate.js +29 -8
- package/dist/generate.js.map +1 -1
- package/dist/hooks.d.ts +12 -1
- package/dist/hooks.d.ts.map +1 -1
- package/dist/hooks.js +30 -0
- package/dist/hooks.js.map +1 -1
- package/dist/provider.js +3 -3
- package/dist/provider.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +1 -0
- package/dist/server.js.map +1 -1
- package/package.json +2 -2
package/bin/fluxfast.js
CHANGED
|
@@ -1,14 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
-
const {
|
|
4
|
-
|
|
5
|
-
const command = process.argv[2];
|
|
6
|
-
|
|
7
|
-
if (command === "generate" || !command) {
|
|
8
|
-
generatePagesRegistry();
|
|
9
|
-
} else {
|
|
10
|
-
console.log(`Unknown command: ${command}`);
|
|
11
|
-
console.log("Usage: fluxfast generate");
|
|
12
|
-
process.exit(1);
|
|
13
|
-
}
|
|
3
|
+
const { runCli } = require("../dist/cli/index.js");
|
|
14
4
|
|
|
5
|
+
process.exitCode = runCli(process.argv.slice(2));
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type InitPlan } from "./init";
|
|
2
|
+
export interface ApplyInitOptions {
|
|
3
|
+
logRegistry?: boolean;
|
|
4
|
+
}
|
|
5
|
+
export interface ApplyInitResult {
|
|
6
|
+
changed: number;
|
|
7
|
+
registryPath: string;
|
|
8
|
+
}
|
|
9
|
+
/** Apply a validated plan and roll back task-owned writes if any step fails. */
|
|
10
|
+
export declare function applyInitPlan(plan: InitPlan, options?: ApplyInitOptions): ApplyInitResult;
|
|
11
|
+
//# sourceMappingURL=apply.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apply.d.ts","sourceRoot":"","sources":["../../src/cli/apply.ts"],"names":[],"mappings":"AAGA,OAAO,EAAyC,KAAK,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAE9E,MAAM,WAAW,gBAAgB;IAC/B,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;CACtB;AA0GD,gFAAgF;AAChF,wBAAgB,aAAa,CAC3B,IAAI,EAAE,QAAQ,EACd,OAAO,GAAE,gBAAqB,GAC7B,eAAe,CA6FjB"}
|
|
@@ -0,0 +1,189 @@
|
|
|
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.applyInitPlan = applyInitPlan;
|
|
7
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
8
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
9
|
+
const generate_1 = require("../generate");
|
|
10
|
+
const init_1 = require("./init");
|
|
11
|
+
function exists(target) {
|
|
12
|
+
try {
|
|
13
|
+
node_fs_1.default.lstatSync(target);
|
|
14
|
+
return true;
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
function isWithin(root, target) {
|
|
21
|
+
const relative = node_path_1.default.relative(root, target);
|
|
22
|
+
return (relative === "" ||
|
|
23
|
+
(!relative.startsWith(`..${node_path_1.default.sep}`) &&
|
|
24
|
+
relative !== ".." &&
|
|
25
|
+
!node_path_1.default.isAbsolute(relative)));
|
|
26
|
+
}
|
|
27
|
+
function nearestExistingAncestor(target) {
|
|
28
|
+
let current = target;
|
|
29
|
+
while (!exists(current)) {
|
|
30
|
+
const parent = node_path_1.default.dirname(current);
|
|
31
|
+
if (parent === current) {
|
|
32
|
+
return current;
|
|
33
|
+
}
|
|
34
|
+
current = parent;
|
|
35
|
+
}
|
|
36
|
+
return current;
|
|
37
|
+
}
|
|
38
|
+
function assertSafeTarget(root, realRoot, target) {
|
|
39
|
+
const resolved = node_path_1.default.resolve(target);
|
|
40
|
+
if (!isWithin(root, resolved)) {
|
|
41
|
+
throw new Error(`FluxFast refused to write outside the project root: ${target}`);
|
|
42
|
+
}
|
|
43
|
+
const ancestor = nearestExistingAncestor(resolved);
|
|
44
|
+
const realAncestor = node_fs_1.default.realpathSync(ancestor);
|
|
45
|
+
if (!isWithin(realRoot, realAncestor)) {
|
|
46
|
+
throw new Error(`FluxFast refused to follow a path outside the project root: ${target}`);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
function operationTargets(operation) {
|
|
50
|
+
if (operation.type === "move") {
|
|
51
|
+
return [operation.from, operation.to];
|
|
52
|
+
}
|
|
53
|
+
if (operation.type === "skip") {
|
|
54
|
+
return operation.path ? [operation.path] : [];
|
|
55
|
+
}
|
|
56
|
+
return [operation.path];
|
|
57
|
+
}
|
|
58
|
+
function assertPlanStillApplies(plan) {
|
|
59
|
+
if (plan.errors.length > 0) {
|
|
60
|
+
throw new Error(plan.errors.join("\n"));
|
|
61
|
+
}
|
|
62
|
+
const root = node_path_1.default.resolve(plan.project.root);
|
|
63
|
+
const realRoot = node_fs_1.default.realpathSync(root);
|
|
64
|
+
for (const operation of plan.operations) {
|
|
65
|
+
for (const target of operationTargets(operation)) {
|
|
66
|
+
assertSafeTarget(root, realRoot, target);
|
|
67
|
+
}
|
|
68
|
+
if (operation.type === "create" && exists(operation.path)) {
|
|
69
|
+
throw new Error(`${operation.path} was created after FluxFast analyzed the project.`);
|
|
70
|
+
}
|
|
71
|
+
if (operation.type === "modify") {
|
|
72
|
+
if (!exists(operation.path) ||
|
|
73
|
+
node_fs_1.default.readFileSync(operation.path, "utf8") !== operation.before) {
|
|
74
|
+
throw new Error(`${operation.path} changed after FluxFast analyzed it; run fluxfast init again.`);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
if (operation.type === "move") {
|
|
78
|
+
if (!exists(operation.from) ||
|
|
79
|
+
node_fs_1.default.readFileSync(operation.from, "utf8") !== operation.before) {
|
|
80
|
+
throw new Error(`${operation.from} changed after FluxFast analyzed it; run fluxfast init again.`);
|
|
81
|
+
}
|
|
82
|
+
if (exists(operation.to)) {
|
|
83
|
+
throw new Error(`${operation.to} was created after FluxFast analyzed the project.`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
assertSafeTarget(root, realRoot, plan.project.fluxPagesDir);
|
|
88
|
+
assertSafeTarget(root, realRoot, plan.project.registryPath);
|
|
89
|
+
}
|
|
90
|
+
/** Apply a validated plan and roll back task-owned writes if any step fails. */
|
|
91
|
+
function applyInitPlan(plan, options = {}) {
|
|
92
|
+
assertPlanStillApplies(plan);
|
|
93
|
+
const rollback = [];
|
|
94
|
+
const ensureDirectory = (directory) => {
|
|
95
|
+
if (exists(directory))
|
|
96
|
+
return;
|
|
97
|
+
const missing = [];
|
|
98
|
+
let current = directory;
|
|
99
|
+
while (!exists(current)) {
|
|
100
|
+
missing.push(current);
|
|
101
|
+
current = node_path_1.default.dirname(current);
|
|
102
|
+
}
|
|
103
|
+
for (const target of missing.reverse()) {
|
|
104
|
+
node_fs_1.default.mkdirSync(target);
|
|
105
|
+
rollback.push(() => {
|
|
106
|
+
if (exists(target) && node_fs_1.default.readdirSync(target).length === 0) {
|
|
107
|
+
node_fs_1.default.rmdirSync(target);
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
const createFile = (target, content) => {
|
|
113
|
+
ensureDirectory(node_path_1.default.dirname(target));
|
|
114
|
+
rollback.push(() => {
|
|
115
|
+
if (exists(target))
|
|
116
|
+
node_fs_1.default.unlinkSync(target);
|
|
117
|
+
});
|
|
118
|
+
node_fs_1.default.writeFileSync(target, content, "utf8");
|
|
119
|
+
};
|
|
120
|
+
try {
|
|
121
|
+
for (const operation of plan.operations) {
|
|
122
|
+
if (operation.type === "skip")
|
|
123
|
+
continue;
|
|
124
|
+
if (operation.type === "mkdir") {
|
|
125
|
+
ensureDirectory(operation.path);
|
|
126
|
+
}
|
|
127
|
+
else if (operation.type === "create") {
|
|
128
|
+
createFile(operation.path, operation.content);
|
|
129
|
+
}
|
|
130
|
+
else if (operation.type === "modify") {
|
|
131
|
+
rollback.push(() => node_fs_1.default.writeFileSync(operation.path, operation.before, "utf8"));
|
|
132
|
+
node_fs_1.default.writeFileSync(operation.path, operation.after, "utf8");
|
|
133
|
+
}
|
|
134
|
+
else if (operation.type === "move") {
|
|
135
|
+
ensureDirectory(node_path_1.default.dirname(operation.to));
|
|
136
|
+
rollback.push(() => {
|
|
137
|
+
node_fs_1.default.writeFileSync(operation.from, operation.before, "utf8");
|
|
138
|
+
if (exists(operation.to))
|
|
139
|
+
node_fs_1.default.unlinkSync(operation.to);
|
|
140
|
+
});
|
|
141
|
+
node_fs_1.default.writeFileSync(operation.to, operation.content, "utf8");
|
|
142
|
+
if (node_fs_1.default.readFileSync(operation.to, "utf8") !== operation.content) {
|
|
143
|
+
throw new Error(`Could not verify migrated page at ${operation.to}.`);
|
|
144
|
+
}
|
|
145
|
+
node_fs_1.default.unlinkSync(operation.from);
|
|
146
|
+
}
|
|
147
|
+
else if (operation.type === "remove") {
|
|
148
|
+
const before = node_fs_1.default.readFileSync(operation.path, "utf8");
|
|
149
|
+
rollback.push(() => node_fs_1.default.writeFileSync(operation.path, before, "utf8"));
|
|
150
|
+
node_fs_1.default.unlinkSync(operation.path);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
const registryExisted = exists(plan.project.registryPath);
|
|
154
|
+
const registryBefore = registryExisted
|
|
155
|
+
? node_fs_1.default.readFileSync(plan.project.registryPath, "utf8")
|
|
156
|
+
: undefined;
|
|
157
|
+
ensureDirectory(plan.project.fluxPagesDir);
|
|
158
|
+
ensureDirectory(node_path_1.default.dirname(plan.project.registryPath));
|
|
159
|
+
rollback.push(() => {
|
|
160
|
+
if (registryExisted && registryBefore !== undefined) {
|
|
161
|
+
node_fs_1.default.writeFileSync(plan.project.registryPath, registryBefore, "utf8");
|
|
162
|
+
}
|
|
163
|
+
else if (exists(plan.project.registryPath)) {
|
|
164
|
+
node_fs_1.default.unlinkSync(plan.project.registryPath);
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
(0, generate_1.generatePagesRegistry)({
|
|
168
|
+
pagesDir: plan.project.fluxPagesDir,
|
|
169
|
+
outputFile: plan.project.registryPath,
|
|
170
|
+
log: options.logRegistry,
|
|
171
|
+
});
|
|
172
|
+
return {
|
|
173
|
+
changed: (0, init_1.changedOperations)(plan).length,
|
|
174
|
+
registryPath: plan.project.registryPath,
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
catch (error) {
|
|
178
|
+
for (const undo of rollback.reverse()) {
|
|
179
|
+
try {
|
|
180
|
+
undo();
|
|
181
|
+
}
|
|
182
|
+
catch {
|
|
183
|
+
// Preserve the original failure. Best-effort rollback has no extra files.
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
throw error;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
//# sourceMappingURL=apply.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apply.js","sourceRoot":"","sources":["../../src/cli/apply.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { FluxProjectInfo } from "./types";
|
|
2
|
+
export type DiagnosticSection = "Environment" | "Packages" | "Project" | "Configuration" | "Pages" | "Registry";
|
|
3
|
+
export type DiagnosticStatus = "pass" | "warning" | "fail";
|
|
4
|
+
export interface FluxDiagnostic {
|
|
5
|
+
id: string;
|
|
6
|
+
section: DiagnosticSection;
|
|
7
|
+
status: DiagnosticStatus;
|
|
8
|
+
message: string;
|
|
9
|
+
blocksCheck?: boolean;
|
|
10
|
+
fix?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface FluxValidationReport {
|
|
13
|
+
diagnostics: FluxDiagnostic[];
|
|
14
|
+
pages: string[];
|
|
15
|
+
valid: boolean;
|
|
16
|
+
}
|
|
17
|
+
export interface ValidationOptions {
|
|
18
|
+
nodeVersion?: string;
|
|
19
|
+
}
|
|
20
|
+
export declare function validateInitPrerequisites(project: FluxProjectInfo, options?: ValidationOptions): FluxDiagnostic[];
|
|
21
|
+
export declare function validateFluxProject(project: FluxProjectInfo, options?: ValidationOptions): FluxValidationReport;
|
|
22
|
+
//# sourceMappingURL=diagnostics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../src/cli/diagnostics.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAGV,eAAe,EAChB,MAAM,SAAS,CAAC;AAEjB,MAAM,MAAM,iBAAiB,GACzB,aAAa,GACb,UAAU,GACV,SAAS,GACT,eAAe,GACf,OAAO,GACP,UAAU,CAAC;AAEf,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;AAE3D,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,iBAAiB,CAAC;IAC3B,MAAM,EAAE,gBAAgB,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,cAAc,EAAE,CAAC;IAC9B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAqDD,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,eAAe,EACxB,OAAO,GAAE,iBAAsB,GAC9B,cAAc,EAAE,CAyGlB;AA0CD,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,eAAe,EACxB,OAAO,GAAE,iBAAsB,GAC9B,oBAAoB,CA8LtB"}
|
|
@@ -0,0 +1,180 @@
|
|
|
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.validateInitPrerequisites = validateInitPrerequisites;
|
|
7
|
+
exports.validateFluxProject = validateFluxProject;
|
|
8
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
9
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
10
|
+
const generate_1 = require("../generate");
|
|
11
|
+
const files_1 = require("./files");
|
|
12
|
+
const next_config_1 = require("./next-config");
|
|
13
|
+
function diagnostic(id, section, status, message, options = {}) {
|
|
14
|
+
return { id, section, status, message, ...options };
|
|
15
|
+
}
|
|
16
|
+
function packageVersion(pkg) {
|
|
17
|
+
return pkg.installedVersion ?? pkg.declaredVersion ?? "unknown";
|
|
18
|
+
}
|
|
19
|
+
function packageDiagnostic(id, label, pkg, supportedDescription, missingFix) {
|
|
20
|
+
if (!pkg.effectiveVersion) {
|
|
21
|
+
return diagnostic(id, "Packages", "fail", `${label} is not installed or declared.`, {
|
|
22
|
+
fix: missingFix,
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
if (pkg.compatibility === "unsupported") {
|
|
26
|
+
return diagnostic(id, "Packages", "fail", `Unsupported ${label} version: ${packageVersion(pkg)}. Expected ${supportedDescription}.`, { fix: missingFix });
|
|
27
|
+
}
|
|
28
|
+
if (pkg.compatibility === "unknown") {
|
|
29
|
+
return diagnostic(id, "Packages", "warning", `${label} version could not be verified: ${packageVersion(pkg)}.`);
|
|
30
|
+
}
|
|
31
|
+
return diagnostic(id, "Packages", "pass", `${label} ${packageVersion(pkg)}${pkg.compatibility === "probably-supported" ? " (declared range)" : ""}`);
|
|
32
|
+
}
|
|
33
|
+
function validateInitPrerequisites(project, options = {}) {
|
|
34
|
+
const diagnostics = [];
|
|
35
|
+
const nodeVersion = options.nodeVersion ?? process.versions.node;
|
|
36
|
+
const nodeMajor = Number(/^v?(\d+)/.exec(nodeVersion)?.[1]);
|
|
37
|
+
diagnostics.push(nodeMajor === 22 || nodeMajor === 24
|
|
38
|
+
? diagnostic("environment.node", "Environment", "pass", `Node ${nodeVersion}`)
|
|
39
|
+
: diagnostic("environment.node", "Environment", "fail", `Unsupported Node version: ${nodeVersion}. Expected Node 22 or 24.`));
|
|
40
|
+
diagnostics.push(packageDiagnostic("package.next", "Next.js", project.packages.next, ">=16.3.0 <17.0.0", "npm install next@^16.3.0"), packageDiagnostic("package.react", "React", project.packages.react, ">=19.0.0", "npm install react@^19 react-dom@^19"), packageDiagnostic("package.react-dom", "React DOM", project.packages.reactDom, ">=19.0.0", "npm install react@^19 react-dom@^19"), packageDiagnostic("package.fluxfast-next", "@fluxfast/next", project.packages.fluxfastNext, "an installed FluxFast release", "npm install @fluxfast/next"), packageDiagnostic("package.fluxfast-core", "@fluxfast/core", project.packages.fluxfastCore, "the version installed by @fluxfast/next", "npm install @fluxfast/next"));
|
|
41
|
+
diagnostics.push(project.hasAppRouter
|
|
42
|
+
? diagnostic("project.app-router", "Project", "pass", `App Router at ${node_path_1.default.relative(project.root, project.appDir)}`)
|
|
43
|
+
: diagnostic("project.app-router", "Project", "fail", project.pagesRouterDir
|
|
44
|
+
? `FluxFast requires the Next.js App Router; Pages Router detected at ${node_path_1.default.relative(project.root, project.pagesRouterDir)}.`
|
|
45
|
+
: "App Router was not found; expected app/ or src/app/.", { fix: "Create a Next.js App Router project" }), diagnostic("project.layout", "Project", "pass", project.usesSrcDirectory ? "src/ layout" : "root layout"), diagnostic("project.language", "Project", "pass", project.language === "typescript" ? "TypeScript" : "JavaScript"));
|
|
46
|
+
if (project.nextConfigPaths.length > 1) {
|
|
47
|
+
diagnostics.push(diagnostic("config.next-duplicates", "Configuration", "fail", "Multiple next.config files were detected; keep only the active one."));
|
|
48
|
+
}
|
|
49
|
+
if (project.configPaths.length > 1) {
|
|
50
|
+
diagnostics.push(diagnostic("config.fluxfast-duplicates", "Configuration", "fail", "Multiple fluxfast.config files were detected; keep only the active one."));
|
|
51
|
+
}
|
|
52
|
+
return diagnostics;
|
|
53
|
+
}
|
|
54
|
+
function readFile(filePath) {
|
|
55
|
+
try {
|
|
56
|
+
return node_fs_1.default.readFileSync(filePath, "utf8");
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
return undefined;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
function isBlocking(item) {
|
|
63
|
+
return item.status === "fail" || item.blocksCheck === true;
|
|
64
|
+
}
|
|
65
|
+
function findAppPageFiles(directory) {
|
|
66
|
+
if (!node_fs_1.default.existsSync(directory))
|
|
67
|
+
return [];
|
|
68
|
+
const pages = [];
|
|
69
|
+
const scan = (current) => {
|
|
70
|
+
for (const entry of node_fs_1.default.readdirSync(current, { withFileTypes: true })) {
|
|
71
|
+
const target = node_path_1.default.join(current, entry.name);
|
|
72
|
+
if (entry.isDirectory()) {
|
|
73
|
+
scan(target);
|
|
74
|
+
}
|
|
75
|
+
else if (entry.isFile() && /^page\.(?:tsx?|jsx?)$/.test(entry.name)) {
|
|
76
|
+
pages.push(target);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
scan(directory);
|
|
81
|
+
return pages.sort();
|
|
82
|
+
}
|
|
83
|
+
function routeForAppPage(appDir, pageFile) {
|
|
84
|
+
const directory = node_path_1.default.relative(appDir, node_path_1.default.dirname(pageFile));
|
|
85
|
+
const segments = directory === "." ? [] : directory.split(node_path_1.default.sep);
|
|
86
|
+
const routeSegments = segments.filter(segment => !(segment.startsWith("(") && segment.endsWith(")")) &&
|
|
87
|
+
!segment.startsWith("@"));
|
|
88
|
+
return routeSegments.length > 0 ? `/${routeSegments.join("/")}` : "/";
|
|
89
|
+
}
|
|
90
|
+
function validateFluxProject(project, options = {}) {
|
|
91
|
+
const diagnostics = validateInitPrerequisites(project, options);
|
|
92
|
+
const configContent = readFile(project.configPath);
|
|
93
|
+
if (!configContent) {
|
|
94
|
+
diagnostics.push(diagnostic("config.fluxfast", "Configuration", "fail", "FluxFast config is missing.", { fix: "npx fluxfast init" }));
|
|
95
|
+
}
|
|
96
|
+
else if (!/\bexport\s+(?:const|let|var)\s+fluxConfig\b|\bexport\s*\{[^}]*\bfluxConfig\b[^}]*\}/s.test(configContent)) {
|
|
97
|
+
diagnostics.push(diagnostic("config.fluxfast", "Configuration", "fail", "FluxFast config does not export fluxConfig.", { fix: "Export a valid fluxConfig from the detected config file" }));
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
diagnostics.push(diagnostic("config.fluxfast", "Configuration", "pass", `FluxFast config at ${node_path_1.default.relative(project.root, project.configPath)}`));
|
|
101
|
+
}
|
|
102
|
+
if (!project.nextConfigPath || !project.nextConfigFormat) {
|
|
103
|
+
diagnostics.push(diagnostic("config.next", "Configuration", "fail", "Next config is missing.", {
|
|
104
|
+
fix: "npx fluxfast init",
|
|
105
|
+
}));
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
const nextContent = readFile(project.nextConfigPath);
|
|
109
|
+
const transformed = nextContent
|
|
110
|
+
? (0, next_config_1.transformNextConfig)(nextContent, project.nextConfigFormat)
|
|
111
|
+
: undefined;
|
|
112
|
+
diagnostics.push(transformed?.status === "unchanged"
|
|
113
|
+
? diagnostic("config.next", "Configuration", "pass", `${node_path_1.default.relative(project.root, project.nextConfigPath)} uses withFluxFast()`)
|
|
114
|
+
: diagnostic("config.next", "Configuration", "fail", "Next config does not use withFluxFast().", { fix: "npx fluxfast init" }));
|
|
115
|
+
}
|
|
116
|
+
const catchAllPath = (0, files_1.desiredCatchAllPath)(project);
|
|
117
|
+
const catchAllContent = readFile(catchAllPath);
|
|
118
|
+
diagnostics.push(catchAllContent && (0, files_1.isFluxCatchAll)(catchAllContent)
|
|
119
|
+
? diagnostic("config.catch-all", "Configuration", "pass", `FluxFast catch-all at ${node_path_1.default.relative(project.root, catchAllPath)}`)
|
|
120
|
+
: diagnostic("config.catch-all", "Configuration", "fail", "FluxFast catch-all is missing or invalid.", {
|
|
121
|
+
fix: catchAllContent
|
|
122
|
+
? "npx fluxfast init --force"
|
|
123
|
+
: "npx fluxfast init",
|
|
124
|
+
}));
|
|
125
|
+
if (project.rootPagePath) {
|
|
126
|
+
diagnostics.push(diagnostic("routes.shadowing-root", "Pages", "warning", `${node_path_1.default.relative(project.root, project.rootPagePath)} shadows FluxFast route "/".`, {
|
|
127
|
+
blocksCheck: true,
|
|
128
|
+
fix: `Move it into ${node_path_1.default.relative(project.root, project.fluxPagesDir)}/home/index and remove the Next route`,
|
|
129
|
+
}));
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
diagnostics.push(diagnostic("routes.shadowing-root", "Pages", "pass", "No root route conflict"));
|
|
133
|
+
}
|
|
134
|
+
const catchAllPathForConflict = node_path_1.default.resolve((0, files_1.desiredCatchAllPath)(project));
|
|
135
|
+
for (const pageFile of findAppPageFiles(project.appDir)) {
|
|
136
|
+
if (node_path_1.default.resolve(pageFile) === catchAllPathForConflict ||
|
|
137
|
+
(project.rootPagePath && node_path_1.default.resolve(pageFile) === node_path_1.default.resolve(project.rootPagePath))) {
|
|
138
|
+
continue;
|
|
139
|
+
}
|
|
140
|
+
const route = routeForAppPage(project.appDir, pageFile);
|
|
141
|
+
diagnostics.push(diagnostic("routes.shadowing", "Pages", "warning", `${node_path_1.default.relative(project.root, pageFile)} shadows FluxFast route ${JSON.stringify(route)}.`, {
|
|
142
|
+
blocksCheck: true,
|
|
143
|
+
fix: `Move the component into ${node_path_1.default.relative(project.root, project.fluxPagesDir)} and remove the Next route`,
|
|
144
|
+
}));
|
|
145
|
+
}
|
|
146
|
+
let pages = [];
|
|
147
|
+
try {
|
|
148
|
+
const snapshot = (0, generate_1.createPagesRegistrySnapshot)({
|
|
149
|
+
pagesDir: project.fluxPagesDir,
|
|
150
|
+
outputFile: project.registryPath,
|
|
151
|
+
log: false,
|
|
152
|
+
});
|
|
153
|
+
pages = snapshot.identifiers;
|
|
154
|
+
diagnostics.push(diagnostic("pages.valid", "Pages", pages.length > 0 ? "pass" : "warning", `${pages.length} FluxFast page${pages.length === 1 ? "" : "s"} registered`));
|
|
155
|
+
const registryContent = readFile(project.registryPath);
|
|
156
|
+
if (registryContent === undefined) {
|
|
157
|
+
diagnostics.push(diagnostic("registry.current", "Registry", "fail", "Registry is missing.", {
|
|
158
|
+
fix: "npx fluxfast generate",
|
|
159
|
+
}));
|
|
160
|
+
}
|
|
161
|
+
else if (registryContent !== snapshot.content) {
|
|
162
|
+
diagnostics.push(diagnostic("registry.current", "Registry", "fail", "Registry appears stale.", { fix: "npx fluxfast generate" }));
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
diagnostics.push(diagnostic("registry.current", "Registry", "pass", `Registry is up-to-date with ${pages.length} page${pages.length === 1 ? "" : "s"}`));
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
catch (error) {
|
|
169
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
170
|
+
diagnostics.push(diagnostic("pages.valid", "Pages", "fail", message, {
|
|
171
|
+
fix: "Resolve duplicate or invalid files in flux-pages",
|
|
172
|
+
}));
|
|
173
|
+
}
|
|
174
|
+
return {
|
|
175
|
+
diagnostics,
|
|
176
|
+
pages,
|
|
177
|
+
valid: !diagnostics.some(isBlocking),
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
//# sourceMappingURL=diagnostics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../src/cli/diagnostics.ts"],"names":[],"mappings":";;;;;;;AAAA,sDAAyB;AACzB,0DAA6B;AAC7B,0CAA0D;AAC1D,mCAA8D;AAC9D,+CAAoD;AAoCpD,SAAS,UAAU,CACjB,EAAU,EACV,OAA0B,EAC1B,MAAwB,EACxB,OAAe,EACf,OAAO,GAAgD,EAAE;IAEzD,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,CAAC;AACtD,CAAC;AAED,SAAS,cAAc,CAAC,GAAoB;IAC1C,OAAO,GAAG,CAAC,gBAAgB,IAAI,GAAG,CAAC,eAAe,IAAI,SAAS,CAAC;AAClE,CAAC;AAED,SAAS,iBAAiB,CACxB,EAAU,EACV,KAAa,EACb,GAAoB,EACpB,oBAA4B,EAC5B,UAAkB;IAElB,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QAC1B,OAAO,UAAU,CAAC,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,KAAK,gCAAgC,EAAE;YAClF,GAAG,EAAE,UAAU;SAChB,CAAC,CAAC;IACL,CAAC;IACD,IAAI,GAAG,CAAC,aAAa,KAAK,aAAa,EAAE,CAAC;QACxC,OAAO,UAAU,CACf,EAAE,EACF,UAAU,EACV,MAAM,EACN,eAAe,KAAK,aAAa,cAAc,CAAC,GAAG,CAAC,cAAc,oBAAoB,GAAG,EACzF,EAAE,GAAG,EAAE,UAAU,EAAE,CACpB,CAAC;IACJ,CAAC;IACD,IAAI,GAAG,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;QACpC,OAAO,UAAU,CACf,EAAE,EACF,UAAU,EACV,SAAS,EACT,GAAG,KAAK,mCAAmC,cAAc,CAAC,GAAG,CAAC,GAAG,CAClE,CAAC;IACJ,CAAC;IACD,OAAO,UAAU,CACf,EAAE,EACF,UAAU,EACV,MAAM,EACN,GAAG,KAAK,IAAI,cAAc,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,aAAa,KAAK,oBAAoB,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,EAAE,CAC1G,CAAC;AACJ,CAAC;AAED,mCACE,OAAwB,EACxB,OAAO,GAAsB,EAAE;IAE/B,MAAM,WAAW,GAAqB,EAAE,CAAC;IACzC,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;IACjE,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5D,WAAW,CAAC,IAAI,CACd,SAAS,KAAK,EAAE,IAAI,SAAS,KAAK,EAAE;QAClC,CAAC,CAAC,UAAU,CAAC,kBAAkB,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,WAAW,EAAE,CAAC;QAC9E,CAAC,CAAC,UAAU,CACR,kBAAkB,EAClB,aAAa,EACb,MAAM,EACN,6BAA6B,WAAW,2BAA2B,CACpE,CACN,CAAC;IAEF,WAAW,CAAC,IAAI,CACd,iBAAiB,CACf,cAAc,EACd,SAAS,EACT,OAAO,CAAC,QAAQ,CAAC,IAAI,EACrB,kBAAkB,EAClB,0BAA0B,CAC3B,EACD,iBAAiB,CACf,eAAe,EACf,OAAO,EACP,OAAO,CAAC,QAAQ,CAAC,KAAK,EACtB,UAAU,EACV,qCAAqC,CACtC,EACD,iBAAiB,CACf,mBAAmB,EACnB,WAAW,EACX,OAAO,CAAC,QAAQ,CAAC,QAAQ,EACzB,UAAU,EACV,qCAAqC,CACtC,EACD,iBAAiB,CACf,uBAAuB,EACvB,gBAAgB,EAChB,OAAO,CAAC,QAAQ,CAAC,YAAY,EAC7B,+BAA+B,EAC/B,4BAA4B,CAC7B,EACD,iBAAiB,CACf,uBAAuB,EACvB,gBAAgB,EAChB,OAAO,CAAC,QAAQ,CAAC,YAAY,EAC7B,yCAAyC,EACzC,4BAA4B,CAC7B,CACF,CAAC;IAEF,WAAW,CAAC,IAAI,CACd,OAAO,CAAC,YAAY;QAClB,CAAC,CAAC,UAAU,CACR,oBAAoB,EACpB,SAAS,EACT,MAAM,EACN,iBAAiB,mBAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,CAC/D;QACH,CAAC,CAAC,UAAU,CACR,oBAAoB,EACpB,SAAS,EACT,MAAM,EACN,OAAO,CAAC,cAAc;YACpB,CAAC,CAAC,sEAAsE,mBAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG;YAC9H,CAAC,CAAC,sDAAsD,EAC1D,EAAE,GAAG,EAAE,qCAAqC,EAAE,CAC/C,EACL,UAAU,CACR,gBAAgB,EAChB,SAAS,EACT,MAAM,EACN,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,CACzD,EACD,UAAU,CACR,kBAAkB,EAClB,SAAS,EACT,MAAM,EACN,OAAO,CAAC,QAAQ,KAAK,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAChE,CACF,CAAC;IAEF,IAAI,OAAO,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvC,WAAW,CAAC,IAAI,CACd,UAAU,CACR,wBAAwB,EACxB,eAAe,EACf,MAAM,EACN,qEAAqE,CACtE,CACF,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnC,WAAW,CAAC,IAAI,CACd,UAAU,CACR,4BAA4B,EAC5B,eAAe,EACf,MAAM,EACN,yEAAyE,CAC1E,CACF,CAAC;IACJ,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,SAAS,QAAQ,CAAC,QAAgB;IAChC,IAAI,CAAC;QACH,OAAO,iBAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,IAAoB;IACtC,OAAO,IAAI,CAAC,MAAM,KAAK,MAAM,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC;AAC7D,CAAC;AAED,SAAS,gBAAgB,CAAC,SAAiB;IACzC,IAAI,CAAC,iBAAE,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,EAAE,CAAC;IACzC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,IAAI,GAAG,CAAC,OAAe,EAAQ,EAAE;QACrC,KAAK,MAAM,KAAK,IAAI,iBAAE,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;YACrE,MAAM,MAAM,GAAG,mBAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAC9C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxB,IAAI,CAAC,MAAM,CAAC,CAAC;YACf,CAAC;iBAAM,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBACtE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IACF,IAAI,CAAC,SAAS,CAAC,CAAC;IAChB,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;AACtB,CAAC;AAED,SAAS,eAAe,CAAC,MAAc,EAAE,QAAgB;IACvD,MAAM,SAAS,GAAG,mBAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,mBAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IAChE,MAAM,QAAQ,GAAG,SAAS,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,mBAAI,CAAC,GAAG,CAAC,CAAC;IACpE,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,CACnC,OAAO,CAAC,EAAE,CACR,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACnD,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAC3B,CAAC;IACF,OAAO,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;AACxE,CAAC;AAED,6BACE,OAAwB,EACxB,OAAO,GAAsB,EAAE;IAE/B,MAAM,WAAW,GAAG,yBAAyB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAChE,MAAM,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACnD,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,WAAW,CAAC,IAAI,CACd,UAAU,CACR,iBAAiB,EACjB,eAAe,EACf,MAAM,EACN,6BAA6B,EAC7B,EAAE,GAAG,EAAE,mBAAmB,EAAE,CAC7B,CACF,CAAC;IACJ,CAAC;SAAM,IACL,CAAC,sFAAsF,CAAC,IAAI,CAC1F,aAAa,CACd,EACD,CAAC;QACD,WAAW,CAAC,IAAI,CACd,UAAU,CACR,iBAAiB,EACjB,eAAe,EACf,MAAM,EACN,6CAA6C,EAC7C,EAAE,GAAG,EAAE,yDAAyD,EAAE,CACnE,CACF,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,WAAW,CAAC,IAAI,CACd,UAAU,CACR,iBAAiB,EACjB,eAAe,EACf,MAAM,EACN,sBAAsB,mBAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC,EAAE,CACxE,CACF,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,cAAc,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC;QACzD,WAAW,CAAC,IAAI,CACd,UAAU,CAAC,aAAa,EAAE,eAAe,EAAE,MAAM,EAAE,yBAAyB,EAAE;YAC5E,GAAG,EAAE,mBAAmB;SACzB,CAAC,CACH,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QACrD,MAAM,WAAW,GAAG,WAAW;YAC7B,CAAC,CAAC,IAAA,iCAAmB,EAAC,WAAW,EAAE,OAAO,CAAC,gBAAgB,CAAC;YAC5D,CAAC,CAAC,SAAS,CAAC;QACd,WAAW,CAAC,IAAI,CACd,WAAW,EAAE,MAAM,KAAK,WAAW;YACjC,CAAC,CAAC,UAAU,CACR,aAAa,EACb,eAAe,EACf,MAAM,EACN,GAAG,mBAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,cAAc,CAAC,sBAAsB,CAC7E;YACH,CAAC,CAAC,UAAU,CACR,aAAa,EACb,eAAe,EACf,MAAM,EACN,0CAA0C,EAC1C,EAAE,GAAG,EAAE,mBAAmB,EAAE,CAC7B,CACN,CAAC;IACJ,CAAC;IAED,MAAM,YAAY,GAAG,IAAA,2BAAmB,EAAC,OAAO,CAAC,CAAC;IAClD,MAAM,eAAe,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC;IAC/C,WAAW,CAAC,IAAI,CACd,eAAe,IAAI,IAAA,sBAAc,EAAC,eAAe,CAAC;QAChD,CAAC,CAAC,UAAU,CACR,kBAAkB,EAClB,eAAe,EACf,MAAM,EACN,yBAAyB,mBAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,YAAY,CAAC,EAAE,CACrE;QACH,CAAC,CAAC,UAAU,CACR,kBAAkB,EAClB,eAAe,EACf,MAAM,EACN,2CAA2C,EAC3C;YACE,GAAG,EAAE,eAAe;gBAClB,CAAC,CAAC,2BAA2B;gBAC7B,CAAC,CAAC,mBAAmB;SACxB,CACF,CACN,CAAC;IAEF,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;QACzB,WAAW,CAAC,IAAI,CACd,UAAU,CACR,uBAAuB,EACvB,OAAO,EACP,SAAS,EACT,GAAG,mBAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC,8BAA8B,EAClF;YACE,WAAW,EAAE,IAAI;YACjB,GAAG,EAAE,gBAAgB,mBAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC,uCAAuC;SAC9G,CACF,CACF,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,WAAW,CAAC,IAAI,CACd,UAAU,CAAC,uBAAuB,EAAE,OAAO,EAAE,MAAM,EAAE,wBAAwB,CAAC,CAC/E,CAAC;IACJ,CAAC;IAED,MAAM,uBAAuB,GAAG,mBAAI,CAAC,OAAO,CAAC,IAAA,2BAAmB,EAAC,OAAO,CAAC,CAAC,CAAC;IAC3E,KAAK,MAAM,QAAQ,IAAI,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACxD,IACE,mBAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,uBAAuB;YAClD,CAAC,OAAO,CAAC,YAAY,IAAI,mBAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,mBAAI,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,EACvF,CAAC;YACD,SAAS;QACX,CAAC;QACD,MAAM,KAAK,GAAG,eAAe,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACxD,WAAW,CAAC,IAAI,CACd,UAAU,CACR,kBAAkB,EAClB,OAAO,EACP,SAAS,EACT,GAAG,mBAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,2BAA2B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,EAC3F;YACE,WAAW,EAAE,IAAI;YACjB,GAAG,EAAE,2BAA2B,mBAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC,4BAA4B;SAC9G,CACF,CACF,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,GAAa,EAAE,CAAC;IACzB,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAA,sCAA2B,EAAC;YAC3C,QAAQ,EAAE,OAAO,CAAC,YAAY;YAC9B,UAAU,EAAE,OAAO,CAAC,YAAY;YAChC,GAAG,EAAE,KAAK;SACX,CAAC,CAAC;QACH,KAAK,GAAG,QAAQ,CAAC,WAAW,CAAC;QAC7B,WAAW,CAAC,IAAI,CACd,UAAU,CACR,aAAa,EACb,OAAO,EACP,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EACrC,GAAG,KAAK,CAAC,MAAM,iBAAiB,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,aAAa,CAC3E,CACF,CAAC;QAEF,MAAM,eAAe,GAAG,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QACvD,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;YAClC,WAAW,CAAC,IAAI,CACd,UAAU,CAAC,kBAAkB,EAAE,UAAU,EAAE,MAAM,EAAE,sBAAsB,EAAE;gBACzE,GAAG,EAAE,uBAAuB;aAC7B,CAAC,CACH,CAAC;QACJ,CAAC;aAAM,IAAI,eAAe,KAAK,QAAQ,CAAC,OAAO,EAAE,CAAC;YAChD,WAAW,CAAC,IAAI,CACd,UAAU,CACR,kBAAkB,EAClB,UAAU,EACV,MAAM,EACN,yBAAyB,EACzB,EAAE,GAAG,EAAE,uBAAuB,EAAE,CACjC,CACF,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,WAAW,CAAC,IAAI,CACd,UAAU,CACR,kBAAkB,EAClB,UAAU,EACV,MAAM,EACN,+BAA+B,KAAK,CAAC,MAAM,QAAQ,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CACnF,CACF,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,WAAW,CAAC,IAAI,CACd,UAAU,CAAC,aAAa,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;YAClD,GAAG,EAAE,kDAAkD;SACxD,CAAC,CACH,CAAC;IACJ,CAAC;IAED,OAAO;QACL,WAAW;QACX,KAAK;QACL,KAAK,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;KACrC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import type { FluxProjectInfo } from "./types";
|
|
3
|
+
export declare const FLUXFAST_GENERATED_MARKER = "// GENERATED BY FLUXFAST.";
|
|
4
|
+
export declare function isFluxCatchAll(content: string): boolean;
|
|
5
|
+
type RelativePathApi = Pick<typeof path, "dirname" | "relative">;
|
|
6
|
+
/** Build a portable relative ESM specifier between two source files. */
|
|
7
|
+
export declare function relativeImport(fromFile: string, toFile: string, pathApi?: RelativePathApi): string;
|
|
8
|
+
export declare function desiredCatchAllPath(project: FluxProjectInfo): string;
|
|
9
|
+
export declare function desiredHomePagePath(project: FluxProjectInfo): string;
|
|
10
|
+
export declare function renderCatchAll(project: FluxProjectInfo): string;
|
|
11
|
+
export declare function renderFluxConfig(project: FluxProjectInfo): string;
|
|
12
|
+
export declare function renderStarterPage(): string;
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=files.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../src/cli/files.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/C,eAAO,MAAM,yBAAyB,8BAA8B,CAAC;AAErE,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAKvD;AAED,KAAK,eAAe,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,SAAS,GAAG,UAAU,CAAC,CAAC;AAMjE,wEAAwE;AACxE,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,eAAsB,GAC9B,MAAM,CAOR;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAQpE;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAGpE;AAiBD,wBAAgB,cAAc,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAG/D;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAEjE;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C"}
|
|
@@ -0,0 +1,60 @@
|
|
|
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.FLUXFAST_GENERATED_MARKER = void 0;
|
|
7
|
+
exports.isFluxCatchAll = isFluxCatchAll;
|
|
8
|
+
exports.relativeImport = relativeImport;
|
|
9
|
+
exports.desiredCatchAllPath = desiredCatchAllPath;
|
|
10
|
+
exports.desiredHomePagePath = desiredHomePagePath;
|
|
11
|
+
exports.renderCatchAll = renderCatchAll;
|
|
12
|
+
exports.renderFluxConfig = renderFluxConfig;
|
|
13
|
+
exports.renderStarterPage = renderStarterPage;
|
|
14
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
15
|
+
exports.FLUXFAST_GENERATED_MARKER = "// GENERATED BY FLUXFAST.";
|
|
16
|
+
function isFluxCatchAll(content) {
|
|
17
|
+
return (/\bcreateFluxNextPage\s*\(/.test(content) &&
|
|
18
|
+
/\bfluxConfig\b/.test(content));
|
|
19
|
+
}
|
|
20
|
+
function withoutSourceExtension(filePath) {
|
|
21
|
+
return filePath.replace(/\.(?:tsx?|jsx?)$/, "");
|
|
22
|
+
}
|
|
23
|
+
/** Build a portable relative ESM specifier between two source files. */
|
|
24
|
+
function relativeImport(fromFile, toFile, pathApi = node_path_1.default) {
|
|
25
|
+
const relative = pathApi
|
|
26
|
+
.relative(pathApi.dirname(fromFile), withoutSourceExtension(toFile))
|
|
27
|
+
.replace(/\\/g, "/");
|
|
28
|
+
return relative.startsWith("./") || relative.startsWith("../")
|
|
29
|
+
? relative
|
|
30
|
+
: `./${relative}`;
|
|
31
|
+
}
|
|
32
|
+
function desiredCatchAllPath(project) {
|
|
33
|
+
const extension = project.language === "typescript" ? "tsx" : "jsx";
|
|
34
|
+
return node_path_1.default.join(project.appDir, "(flux)", "[[...flux]]", `page.${extension}`);
|
|
35
|
+
}
|
|
36
|
+
function desiredHomePagePath(project) {
|
|
37
|
+
const extension = project.language === "typescript" ? "tsx" : "jsx";
|
|
38
|
+
return node_path_1.default.join(project.fluxPagesDir, "home", `index.${extension}`);
|
|
39
|
+
}
|
|
40
|
+
function configImportForCatchAll(project, catchAllPath) {
|
|
41
|
+
return project.usesAtAlias
|
|
42
|
+
? "@/fluxfast.config"
|
|
43
|
+
: relativeImport(catchAllPath, project.configPath);
|
|
44
|
+
}
|
|
45
|
+
function registryImportForConfig(project) {
|
|
46
|
+
return project.usesAtAlias
|
|
47
|
+
? "@/.fluxfast/pages.generated"
|
|
48
|
+
: relativeImport(project.configPath, project.registryPath);
|
|
49
|
+
}
|
|
50
|
+
function renderCatchAll(project) {
|
|
51
|
+
const catchAllPath = desiredCatchAllPath(project);
|
|
52
|
+
return `${exports.FLUXFAST_GENERATED_MARKER}\n// Run \`fluxfast init --force\` to repair this file.\n\nimport { createFluxNextPage } from "@fluxfast/next/server";\nimport { fluxConfig } from ${JSON.stringify(configImportForCatchAll(project, catchAllPath))};\n\nexport const dynamic = "force-dynamic";\n\nexport default createFluxNextPage(fluxConfig);\n`;
|
|
53
|
+
}
|
|
54
|
+
function renderFluxConfig(project) {
|
|
55
|
+
return `import { defineFluxConfig } from "@fluxfast/next";\nimport { FluxApplication } from ${JSON.stringify(registryImportForConfig(project))};\n\nexport const fluxConfig = defineFluxConfig({\n application: FluxApplication,\n});\n`;
|
|
56
|
+
}
|
|
57
|
+
function renderStarterPage() {
|
|
58
|
+
return `"use client";\n\nexport default function HomePage() {\n return (\n <main>\n <h1>FluxFast</h1>\n <p>Your FluxFast frontend is ready.</p>\n </main>\n );\n}\n`;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=files.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/cli/files.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,0DAA6B;AAGhB,QAAA,yBAAyB,GAAG,2BAA2B,CAAC;AAErE,wBAA+B,OAAe;IAC5C,OAAO,CACL,2BAA2B,CAAC,IAAI,CAAC,OAAO,CAAC;QACzC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAC/B,CAAC;AACJ,CAAC;AAID,SAAS,sBAAsB,CAAC,QAAgB;IAC9C,OAAO,QAAQ,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;AAClD,CAAC;AAED,wEAAwE;AACxE,wBACE,QAAgB,EAChB,MAAc,EACd,OAAO,GAAoB,mBAAI;IAE/B,MAAM,QAAQ,GAAG,OAAO;SACrB,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,sBAAsB,CAAC,MAAM,CAAC,CAAC;SACnE,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACvB,OAAO,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC;QAC5D,CAAC,CAAC,QAAQ;QACV,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;AACtB,CAAC;AAED,6BAAoC,OAAwB;IAC1D,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,KAAK,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IACpE,OAAO,mBAAI,CAAC,IAAI,CACd,OAAO,CAAC,MAAM,EACd,QAAQ,EACR,aAAa,EACb,QAAQ,SAAS,EAAE,CACpB,CAAC;AACJ,CAAC;AAED,6BAAoC,OAAwB;IAC1D,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,KAAK,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IACpE,OAAO,mBAAI,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,SAAS,EAAE,CAAC,CAAC;AACvE,CAAC;AAED,SAAS,uBAAuB,CAC9B,OAAwB,EACxB,YAAoB;IAEpB,OAAO,OAAO,CAAC,WAAW;QACxB,CAAC,CAAC,mBAAmB;QACrB,CAAC,CAAC,cAAc,CAAC,YAAY,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,uBAAuB,CAAC,OAAwB;IACvD,OAAO,OAAO,CAAC,WAAW;QACxB,CAAC,CAAC,6BAA6B;QAC/B,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;AAC/D,CAAC;AAED,wBAA+B,OAAwB;IACrD,MAAM,YAAY,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAClD,OAAO,GAAG,QAAA,yBAAyB,sJAAsJ,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,kGAAkG,CAAC;AAC5V,CAAC;AAED,0BAAiC,OAAwB;IACvD,OAAO,uFAAuF,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC,2FAA2F,CAAC;AAC5O,CAAC;AAED;IACE,OAAO,+KAA+K,CAAC;AACzL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAiBA,MAAM,WAAW,KAAK;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC;AA4OD,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,GAAE,KAAiB,GAAG,MAAM,CAuBpE"}
|