@fluxfast/vite 0.0.0-oidc-bootstrap.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/LICENSE +21 -0
- package/README.md +76 -0
- package/bin/fluxfast-vite.js +11 -0
- package/dist/agent-knowledge.d.ts +6 -0
- package/dist/agent-knowledge.d.ts.map +1 -0
- package/dist/agent-knowledge.js +157 -0
- package/dist/agent-knowledge.js.map +1 -0
- package/dist/assets.d.ts +9 -0
- package/dist/assets.d.ts.map +1 -0
- package/dist/assets.js +73 -0
- package/dist/assets.js.map +1 -0
- package/dist/bridge.d.ts +6 -0
- package/dist/bridge.d.ts.map +1 -0
- package/dist/bridge.js +66 -0
- package/dist/bridge.js.map +1 -0
- package/dist/build.d.ts +4 -0
- package/dist/build.d.ts.map +1 -0
- package/dist/build.js +68 -0
- package/dist/build.js.map +1 -0
- package/dist/cli.d.ts +7 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +141 -0
- package/dist/cli.js.map +1 -0
- package/dist/esm/agent-knowledge.js +152 -0
- package/dist/esm/agent-knowledge.js.map +1 -0
- package/dist/esm/assets.js +65 -0
- package/dist/esm/assets.js.map +1 -0
- package/dist/esm/bridge.js +62 -0
- package/dist/esm/bridge.js.map +1 -0
- package/dist/esm/build.js +62 -0
- package/dist/esm/build.js.map +1 -0
- package/dist/esm/cli.js +135 -0
- package/dist/esm/cli.js.map +1 -0
- package/dist/esm/generation.js +30 -0
- package/dist/esm/generation.js.map +1 -0
- package/dist/esm/health.js +55 -0
- package/dist/esm/health.js.map +1 -0
- package/dist/esm/index.js +3 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/options.js +58 -0
- package/dist/esm/options.js.map +1 -0
- package/dist/esm/package.json +3 -0
- package/dist/esm/plugin.js +46 -0
- package/dist/esm/plugin.js.map +1 -0
- package/dist/esm/project.js +88 -0
- package/dist/esm/project.js.map +1 -0
- package/dist/esm/server.js +206 -0
- package/dist/esm/server.js.map +1 -0
- package/dist/esm/setup.js +223 -0
- package/dist/esm/setup.js.map +1 -0
- package/dist/generation.d.ts +14 -0
- package/dist/generation.d.ts.map +1 -0
- package/dist/generation.js +38 -0
- package/dist/generation.js.map +1 -0
- package/dist/health.d.ts +4 -0
- package/dist/health.d.ts.map +1 -0
- package/dist/health.js +59 -0
- package/dist/health.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/options.d.ts +41 -0
- package/dist/options.d.ts.map +1 -0
- package/dist/options.js +67 -0
- package/dist/options.js.map +1 -0
- package/dist/plugin.d.ts +5 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +49 -0
- package/dist/plugin.js.map +1 -0
- package/dist/project.d.ts +24 -0
- package/dist/project.d.ts.map +1 -0
- package/dist/project.js +99 -0
- package/dist/project.js.map +1 -0
- package/dist/server.d.ts +18 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +212 -0
- package/dist/server.js.map +1 -0
- package/dist/setup.d.ts +18 -0
- package/dist/setup.d.ts.map +1 -0
- package/dist/setup.js +231 -0
- package/dist/setup.js.map +1 -0
- package/package.json +72 -0
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { FluxCacheConfig } from "@fluxfast/react";
|
|
2
|
+
import type { ResolvedConfig } from "vite" with { "resolution-mode": "import" };
|
|
3
|
+
export interface FluxViteOptions {
|
|
4
|
+
/** Source module exporting the same application for SSR and hydration. */
|
|
5
|
+
application?: string;
|
|
6
|
+
/** Named component export; generated registries use FluxApplication. */
|
|
7
|
+
applicationExport?: string;
|
|
8
|
+
/** Trusted HTML template relative to the frontend root. */
|
|
9
|
+
template?: string;
|
|
10
|
+
forwardHeaders?: readonly string[];
|
|
11
|
+
cache?: FluxCacheConfig;
|
|
12
|
+
timeoutMs?: number;
|
|
13
|
+
/** Development diagnostics only; never enables production traces. */
|
|
14
|
+
diagnostics?: boolean;
|
|
15
|
+
}
|
|
16
|
+
export interface FluxViteBuildOptions {
|
|
17
|
+
root?: string;
|
|
18
|
+
configFile?: string | false;
|
|
19
|
+
}
|
|
20
|
+
export interface HostSettings {
|
|
21
|
+
forwardHeaders?: readonly string[];
|
|
22
|
+
cache?: FluxCacheConfig;
|
|
23
|
+
timeoutMs?: number;
|
|
24
|
+
}
|
|
25
|
+
export interface ResolvedFluxOptions {
|
|
26
|
+
application: string;
|
|
27
|
+
applicationExport: string;
|
|
28
|
+
template: string;
|
|
29
|
+
diagnostics: boolean;
|
|
30
|
+
settings: HostSettings;
|
|
31
|
+
}
|
|
32
|
+
export declare const CLIENT_ENTRY = "/@fluxfast/client";
|
|
33
|
+
export declare const SERVER_ENTRY = "virtual:fluxfast/server";
|
|
34
|
+
export declare const CLIENT_ID = "\0fluxfast:client";
|
|
35
|
+
export declare const SERVER_ID = "\0fluxfast:server";
|
|
36
|
+
export declare const BUILD_DIRECTORY = "dist/fluxfast";
|
|
37
|
+
export declare function resolveOptions(root: string, options: FluxViteOptions): ResolvedFluxOptions;
|
|
38
|
+
/** Internal plugin metadata, not a separate consumer configuration API. */
|
|
39
|
+
export declare function configuredFluxOptions(config: ResolvedConfig): ResolvedFluxOptions;
|
|
40
|
+
export declare function safeAssetName(name: string): boolean;
|
|
41
|
+
//# sourceMappingURL=options.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC,OAAO,iBAAiB,EAAE,QAAQ,EAAE,CAAC;AAEhF,MAAM,WAAW,eAAe;IAC9B,0EAA0E;IAC1E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wEAAwE;IACxE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qEAAqE;IACrE,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,oBAAoB;IAAG,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,GAAG,KAAK,CAAA;CAAE;AAEpF,MAAM,WAAW,YAAY;IAC3B,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,YAAY,CAAC;CACxB;AAED,eAAO,MAAM,YAAY,sBAAsB,CAAC;AAChD,eAAO,MAAM,YAAY,4BAA4B,CAAC;AACtD,eAAO,MAAM,SAAS,sBAAsB,CAAC;AAC7C,eAAO,MAAM,SAAS,sBAAsB,CAAC;AAC7C,eAAO,MAAM,eAAe,kBAAkB,CAAC;AAE/C,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,mBAAmB,CAoC1F;AAED,2EAA2E;AAC3E,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,cAAc,GAAG,mBAAmB,CAKjF;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAInD"}
|
package/dist/options.js
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
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.BUILD_DIRECTORY = exports.SERVER_ID = exports.CLIENT_ID = exports.SERVER_ENTRY = exports.CLIENT_ENTRY = void 0;
|
|
7
|
+
exports.resolveOptions = resolveOptions;
|
|
8
|
+
exports.configuredFluxOptions = configuredFluxOptions;
|
|
9
|
+
exports.safeAssetName = safeAssetName;
|
|
10
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
11
|
+
const server_1 = require("@fluxfast/react/server");
|
|
12
|
+
exports.CLIENT_ENTRY = "/@fluxfast/client";
|
|
13
|
+
exports.SERVER_ENTRY = "virtual:fluxfast/server";
|
|
14
|
+
exports.CLIENT_ID = "\0fluxfast:client";
|
|
15
|
+
exports.SERVER_ID = "\0fluxfast:server";
|
|
16
|
+
exports.BUILD_DIRECTORY = "dist/fluxfast";
|
|
17
|
+
function resolveOptions(root, options) {
|
|
18
|
+
const application = options.application ?? "src/.fluxfast/pages.generated.ts";
|
|
19
|
+
const applicationExport = options.applicationExport ?? "FluxApplication";
|
|
20
|
+
const template = options.template ?? "fluxfast.html";
|
|
21
|
+
if (typeof application !== "string" || !application || typeof template !== "string" || !template ||
|
|
22
|
+
!/^[A-Za-z_$][A-Za-z0-9_$]*$/.test(applicationExport)) {
|
|
23
|
+
throw new TypeError("FluxFast requires an application module, template, and valid export identifier");
|
|
24
|
+
}
|
|
25
|
+
if (options.diagnostics !== undefined && typeof options.diagnostics !== "boolean") {
|
|
26
|
+
throw new TypeError("FluxFast diagnostics must be boolean");
|
|
27
|
+
}
|
|
28
|
+
if (options.forwardHeaders !== undefined && (!Array.isArray(options.forwardHeaders) || options.forwardHeaders.some(name => typeof name !== "string"))) {
|
|
29
|
+
throw new TypeError("FluxFast forwardHeaders must be an array of header names");
|
|
30
|
+
}
|
|
31
|
+
// Reuse the SSR boundary's runtime validation without fetching or rendering.
|
|
32
|
+
// Configuration failure should precede build output replacement/listening.
|
|
33
|
+
(0, server_1.createFluxReactHandler)({ backendUrl: "http://fluxfast.invalid", render: async () => "", template: "",
|
|
34
|
+
...(options.cache === undefined ? {} : { cache: options.cache }),
|
|
35
|
+
...(options.timeoutMs === undefined ? {} : { timeoutMs: options.timeoutMs }),
|
|
36
|
+
});
|
|
37
|
+
const templatePath = node_path_1.default.resolve(root, template);
|
|
38
|
+
const relativeTemplate = node_path_1.default.relative(root, templatePath);
|
|
39
|
+
if (!relativeTemplate || relativeTemplate.startsWith("..") || node_path_1.default.isAbsolute(relativeTemplate) || !/\.html?$/i.test(template)) {
|
|
40
|
+
throw new TypeError("FluxFast template must be an HTML file inside the frontend root");
|
|
41
|
+
}
|
|
42
|
+
return {
|
|
43
|
+
application: node_path_1.default.resolve(root, application).replace(/\\/g, "/"),
|
|
44
|
+
applicationExport,
|
|
45
|
+
template: templatePath,
|
|
46
|
+
diagnostics: options.diagnostics === true,
|
|
47
|
+
settings: {
|
|
48
|
+
...(options.forwardHeaders === undefined ? {} : { forwardHeaders: options.forwardHeaders }),
|
|
49
|
+
...(options.cache === undefined ? {} : { cache: options.cache }),
|
|
50
|
+
...(options.timeoutMs === undefined ? {} : { timeoutMs: options.timeoutMs }),
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
/** Internal plugin metadata, not a separate consumer configuration API. */
|
|
55
|
+
function configuredFluxOptions(config) {
|
|
56
|
+
const plugins = config.plugins.filter(plugin => plugin.name === "fluxfast");
|
|
57
|
+
const value = plugins.length === 1 ? plugins[0].api?.fluxfast : undefined;
|
|
58
|
+
if (!value)
|
|
59
|
+
throw new Error("Configure exactly one fluxfast() plugin in vite.config before building or serving");
|
|
60
|
+
return value;
|
|
61
|
+
}
|
|
62
|
+
function safeAssetName(name) {
|
|
63
|
+
return !name.startsWith("/") && !/[\\\x00-\x1f\x7f%?#]/.test(name) &&
|
|
64
|
+
name.split("/").every(part => part.length > 0 && !part.startsWith(".")) &&
|
|
65
|
+
!/\.(?:html?|map)$/i.test(name);
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=options.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"options.js","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"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"}
|
package/dist/plugin.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Plugin } from "vite" with { "resolution-mode": "import" };
|
|
2
|
+
import { type FluxViteOptions } from "./options.js";
|
|
3
|
+
/** Vite module/build integration; application URLs continue to belong to FastAPI. */
|
|
4
|
+
export declare function fluxfast(options?: FluxViteOptions): Plugin;
|
|
5
|
+
//# sourceMappingURL=plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC,OAAO,iBAAiB,EAAE,QAAQ,EAAE,CAAC;AACxE,OAAO,EAAoE,KAAK,eAAe,EAA4B,MAAM,cAAc,CAAC;AAEhJ,qFAAqF;AACrF,wBAAgB,QAAQ,CAAC,OAAO,GAAE,eAAoB,GAAG,MAAM,CAqC9D"}
|
package/dist/plugin.js
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.fluxfast = fluxfast;
|
|
4
|
+
const options_js_1 = require("./options.js");
|
|
5
|
+
/** Vite module/build integration; application URLs continue to belong to FastAPI. */
|
|
6
|
+
function fluxfast(options = {}) {
|
|
7
|
+
let configured;
|
|
8
|
+
const plugin = {
|
|
9
|
+
name: "fluxfast",
|
|
10
|
+
config(config) {
|
|
11
|
+
if (config.base !== undefined && config.base !== "/")
|
|
12
|
+
throw new Error("FluxFast Vite currently requires base '/' for same-origin application routing");
|
|
13
|
+
return {
|
|
14
|
+
appType: "custom", esbuild: { jsx: "automatic" }, resolve: { dedupe: ["react", "react-dom"] },
|
|
15
|
+
// The document uses a virtual client entry rather than a SPA script.
|
|
16
|
+
// Scan the real application (including lazy registry pages) up front so
|
|
17
|
+
// a first navigation cannot trigger dependency discovery and a reload.
|
|
18
|
+
optimizeDeps: {
|
|
19
|
+
entries: [options.application ?? "src/.fluxfast/pages.generated.ts"],
|
|
20
|
+
include: ["@fluxfast/react/client", "react", "react-dom", "react-dom/client", "react/jsx-runtime", "react/jsx-dev-runtime"],
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
},
|
|
24
|
+
configResolved(config) {
|
|
25
|
+
if (config.base !== "/")
|
|
26
|
+
throw new Error("FluxFast Vite currently requires base '/' for same-origin application routing");
|
|
27
|
+
configured = (0, options_js_1.resolveOptions)(config.root, options);
|
|
28
|
+
plugin.api = { fluxfast: configured };
|
|
29
|
+
},
|
|
30
|
+
resolveId(id) {
|
|
31
|
+
if (id === options_js_1.CLIENT_ENTRY || id === options_js_1.CLIENT_ID)
|
|
32
|
+
return options_js_1.CLIENT_ID;
|
|
33
|
+
if (id === options_js_1.SERVER_ENTRY || id === options_js_1.SERVER_ID)
|
|
34
|
+
return options_js_1.SERVER_ID;
|
|
35
|
+
},
|
|
36
|
+
load(id) {
|
|
37
|
+
if (id !== options_js_1.CLIENT_ID && id !== options_js_1.SERVER_ID)
|
|
38
|
+
return;
|
|
39
|
+
const application = JSON.stringify(configured.application);
|
|
40
|
+
const component = configured.applicationExport;
|
|
41
|
+
if (id === options_js_1.CLIENT_ID) {
|
|
42
|
+
return `import { ${component} as Application } from ${application};\nimport { hydrateFluxApplication } from "@fluxfast/react/client";\nhydrateFluxApplication(Application);\n`;
|
|
43
|
+
}
|
|
44
|
+
return `import { ${component} as Application } from ${application};\nimport { renderFluxApplication } from "@fluxfast/react/server";\nexport const settings = ${JSON.stringify(configured.settings)};\nexport function render(props, options) { return renderFluxApplication(Application, props, options); }\n`;
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
return plugin;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":";;;AACA,6CAAgJ;AAEhJ,qFAAqF;AACrF,kBAAyB,OAAO,GAAoB,EAAE;IACpD,IAAI,UAA+B,CAAC;IACpC,MAAM,MAAM,GAAW;QACrB,IAAI,EAAE,UAAU;QAChB,MAAM,CAAC,MAAM;YACX,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,KAAK,GAAG;gBAAE,MAAM,IAAI,KAAK,CAAC,+EAA+E,CAAC,CAAC;YACvJ,OAAO;gBACL,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE;gBAC7F,qEAAqE;gBACrE,wEAAwE;gBACxE,uEAAuE;gBACvE,YAAY,EAAE;oBACZ,OAAO,EAAE,CAAC,OAAO,CAAC,WAAW,IAAI,kCAAkC,CAAC;oBACpE,OAAO,EAAE,CAAC,wBAAwB,EAAE,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,uBAAuB,CAAC;iBAC5H;aACF,CAAC;QACJ,CAAC;QACD,cAAc,CAAC,MAAM;YACnB,IAAI,MAAM,CAAC,IAAI,KAAK,GAAG;gBAAE,MAAM,IAAI,KAAK,CAAC,+EAA+E,CAAC,CAAC;YAC1H,UAAU,GAAG,IAAA,2BAAc,EAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAClD,MAAM,CAAC,GAAG,GAAG,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;QACxC,CAAC;QACD,SAAS,CAAC,EAAE;YACV,IAAI,EAAE,KAAK,yBAAY,IAAI,EAAE,KAAK,sBAAS;gBAAE,OAAO,sBAAS,CAAC;YAC9D,IAAI,EAAE,KAAK,yBAAY,IAAI,EAAE,KAAK,sBAAS;gBAAE,OAAO,sBAAS,CAAC;QAChE,CAAC;QACD,IAAI,CAAC,EAAE;YACL,IAAI,EAAE,KAAK,sBAAS,IAAI,EAAE,KAAK,sBAAS;gBAAE,OAAO;YACjD,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;YAC3D,MAAM,SAAS,GAAG,UAAU,CAAC,iBAAiB,CAAC;YAC/C,IAAI,EAAE,KAAK,sBAAS,EAAE,CAAC;gBACrB,OAAO,YAAY,SAAS,0BAA0B,WAAW,6GAA6G,CAAC;YACjL,CAAC;YACD,OAAO,YAAY,SAAS,0BAA0B,WAAW,+FAA+F,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,4GAA4G,CAAC;QAClT,CAAC;KACF,CAAC;IACF,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export declare const HOST_CONFIG = "fluxfast.vite.config.mjs";
|
|
2
|
+
export declare const HOST_TEMPLATE = "fluxfast.html";
|
|
3
|
+
export declare const GENERATED_ARTIFACTS: readonly string[];
|
|
4
|
+
export declare const HOST_SCRIPTS: Readonly<{
|
|
5
|
+
"fluxfast:dev": "fluxfast-vite dev --config fluxfast.vite.config.mjs";
|
|
6
|
+
"fluxfast:build": "fluxfast-vite build --config fluxfast.vite.config.mjs";
|
|
7
|
+
"fluxfast:start": "fluxfast-vite start";
|
|
8
|
+
}>;
|
|
9
|
+
export interface FrontendProject {
|
|
10
|
+
root: string;
|
|
11
|
+
source: string;
|
|
12
|
+
pages: string;
|
|
13
|
+
generated: string;
|
|
14
|
+
registry: string;
|
|
15
|
+
manifest: Record<string, unknown>;
|
|
16
|
+
manifestContent: string;
|
|
17
|
+
}
|
|
18
|
+
export declare function projectAt(start: string): FrontendProject;
|
|
19
|
+
/** No scaffold or generated artifact may traverse a symlink, even an internal one. */
|
|
20
|
+
export declare function assertSafePath(root: string, target: string): void;
|
|
21
|
+
export declare function validatePackages(project: FrontendProject): void;
|
|
22
|
+
export declare function sourceViteConfig(project: FrontendProject): string | undefined;
|
|
23
|
+
export declare function relativeFile(project: FrontendProject, target: string): string;
|
|
24
|
+
//# sourceMappingURL=project.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../src/project.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,WAAW,6BAA6B,CAAC;AACtD,eAAO,MAAM,aAAa,kBAAkB,CAAC;AAC7C,eAAO,MAAM,mBAAmB,mBAG9B,CAAC;AACH,eAAO,MAAM,YAAY;;;;EAIvB,CAAC;AAEH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,eAAe,CAmBxD;AAED,sFAAsF;AACtF,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAUjE;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,CAY/D;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,GAAG,SAAS,CAM7E;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAE7E"}
|
package/dist/project.js
ADDED
|
@@ -0,0 +1,99 @@
|
|
|
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.HOST_SCRIPTS = exports.GENERATED_ARTIFACTS = exports.HOST_TEMPLATE = exports.HOST_CONFIG = void 0;
|
|
7
|
+
exports.projectAt = projectAt;
|
|
8
|
+
exports.assertSafePath = assertSafePath;
|
|
9
|
+
exports.validatePackages = validatePackages;
|
|
10
|
+
exports.sourceViteConfig = sourceViteConfig;
|
|
11
|
+
exports.relativeFile = relativeFile;
|
|
12
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
13
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
14
|
+
exports.HOST_CONFIG = "fluxfast.vite.config.mjs";
|
|
15
|
+
exports.HOST_TEMPLATE = "fluxfast.html";
|
|
16
|
+
exports.GENERATED_ARTIFACTS = Object.freeze([
|
|
17
|
+
"pages.generated.ts", "schema.generated.json", "types.generated.ts",
|
|
18
|
+
"validators.generated.ts", "routes.generated.ts", "mutations.generated.ts",
|
|
19
|
+
]);
|
|
20
|
+
exports.HOST_SCRIPTS = Object.freeze({
|
|
21
|
+
"fluxfast:dev": `fluxfast-vite dev --config ${exports.HOST_CONFIG}`,
|
|
22
|
+
"fluxfast:build": `fluxfast-vite build --config ${exports.HOST_CONFIG}`,
|
|
23
|
+
"fluxfast:start": "fluxfast-vite start",
|
|
24
|
+
});
|
|
25
|
+
function projectAt(start) {
|
|
26
|
+
let root = node_path_1.default.resolve(start);
|
|
27
|
+
while (!node_fs_1.default.existsSync(node_path_1.default.join(root, "package.json"))) {
|
|
28
|
+
const parent = node_path_1.default.dirname(root);
|
|
29
|
+
if (parent === root)
|
|
30
|
+
throw new Error("No frontend package.json found in this directory or its parents");
|
|
31
|
+
root = parent;
|
|
32
|
+
}
|
|
33
|
+
assertSafePath(root, node_path_1.default.join(root, "package.json"));
|
|
34
|
+
const manifestContent = node_fs_1.default.readFileSync(node_path_1.default.join(root, "package.json"), "utf8");
|
|
35
|
+
let manifest;
|
|
36
|
+
try {
|
|
37
|
+
manifest = JSON.parse(manifestContent);
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
throw new Error("Frontend package.json must contain valid JSON");
|
|
41
|
+
}
|
|
42
|
+
if (!manifest || typeof manifest !== "object" || Array.isArray(manifest))
|
|
43
|
+
throw new Error("Frontend package.json must contain an object");
|
|
44
|
+
const source = node_fs_1.default.existsSync(node_path_1.default.join(root, "src")) ? node_path_1.default.join(root, "src") : root;
|
|
45
|
+
assertSafePath(root, source);
|
|
46
|
+
if (!node_fs_1.default.statSync(source).isDirectory())
|
|
47
|
+
throw new Error("Frontend src must be a directory when present");
|
|
48
|
+
const generated = node_path_1.default.join(source, ".fluxfast");
|
|
49
|
+
return { root, source, pages: node_path_1.default.join(source, "flux-pages"), generated,
|
|
50
|
+
registry: node_path_1.default.join(generated, "pages.generated.ts"), manifest: manifest, manifestContent };
|
|
51
|
+
}
|
|
52
|
+
/** No scaffold or generated artifact may traverse a symlink, even an internal one. */
|
|
53
|
+
function assertSafePath(root, target) {
|
|
54
|
+
const relative = node_path_1.default.relative(root, target);
|
|
55
|
+
if (relative === ".." || relative.startsWith(".." + node_path_1.default.sep) || node_path_1.default.isAbsolute(relative))
|
|
56
|
+
throw new Error("FluxFast output must stay inside the frontend root");
|
|
57
|
+
let current = root;
|
|
58
|
+
for (const segment of ["", ...relative.split(node_path_1.default.sep).filter(Boolean)]) {
|
|
59
|
+
current = node_path_1.default.join(current, segment);
|
|
60
|
+
try {
|
|
61
|
+
if (node_fs_1.default.lstatSync(current).isSymbolicLink())
|
|
62
|
+
throw new Error("FluxFast refuses to follow a scaffold or generated-output symlink");
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
if (error.code === "ENOENT")
|
|
66
|
+
break;
|
|
67
|
+
throw error;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
function validatePackages(project) {
|
|
72
|
+
const declarations = {};
|
|
73
|
+
for (const section of ["dependencies", "devDependencies"]) {
|
|
74
|
+
const value = project.manifest[section] ?? {};
|
|
75
|
+
if (!value || typeof value !== "object" || Array.isArray(value) ||
|
|
76
|
+
Object.values(value).some(version => typeof version !== "string" || !version.trim()))
|
|
77
|
+
throw new Error("Package dependencies must be objects of non-empty version strings");
|
|
78
|
+
Object.assign(declarations, value);
|
|
79
|
+
}
|
|
80
|
+
if (declarations["@fluxfast/next"])
|
|
81
|
+
throw new Error("Initialize a separate React/Vite frontend rather than mixing Next and Vite adapters");
|
|
82
|
+
for (const name of ["@fluxfast/vite", "react", "react-dom", "vite"]) {
|
|
83
|
+
if (!declarations[name])
|
|
84
|
+
throw new Error(`Declare and install ${name} before initializing the React/Vite frontend; no packages are downloaded by this command`);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
function sourceViteConfig(project) {
|
|
88
|
+
const candidates = ["ts", "mts", "cts", "js", "mjs", "cjs"].map(extension => "vite.config." + extension)
|
|
89
|
+
.filter(name => node_fs_1.default.existsSync(node_path_1.default.join(project.root, name)));
|
|
90
|
+
if (candidates.length > 1)
|
|
91
|
+
throw new Error("Multiple source Vite configs found; keep one authoritative vite.config file before initializing");
|
|
92
|
+
if (candidates[0])
|
|
93
|
+
assertSafePath(project.root, node_path_1.default.join(project.root, candidates[0]));
|
|
94
|
+
return candidates[0];
|
|
95
|
+
}
|
|
96
|
+
function relativeFile(project, target) {
|
|
97
|
+
return node_path_1.default.relative(project.root, target).replace(/\\/g, "/");
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=project.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project.js","sourceRoot":"","sources":["../src/project.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export interface FluxViteServerOptions {
|
|
2
|
+
root?: string;
|
|
3
|
+
configFile?: string | false;
|
|
4
|
+
mode?: "development" | "production";
|
|
5
|
+
host?: string;
|
|
6
|
+
port?: number;
|
|
7
|
+
/** Private server-only URL; defaults to supervisor-injected FLUXFAST_BACKEND_URL. */
|
|
8
|
+
backendUrl?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface FluxViteServer {
|
|
11
|
+
/** Listening origin; ephemeral port 0 is supported for tests and embedding. */
|
|
12
|
+
readonly url: string;
|
|
13
|
+
/** Stop accepting requests, abort live streams and release owned sockets/watchers. */
|
|
14
|
+
close(): Promise<void>;
|
|
15
|
+
}
|
|
16
|
+
/** Own one public HTTP origin. Production never imports Vite or source config. */
|
|
17
|
+
export declare function createFluxViteServer(options?: FluxViteServerOptions): Promise<FluxViteServer>;
|
|
18
|
+
//# sourceMappingURL=server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IAC5B,IAAI,CAAC,EAAE,aAAa,GAAG,YAAY,CAAC;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qFAAqF;IACrF,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,+EAA+E;IAC/E,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,sFAAsF;IACtF,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAkBD,kFAAkF;AAClF,wBAAsB,oBAAoB,CAAC,OAAO,GAAE,qBAA0B,GAAG,OAAO,CAAC,cAAc,CAAC,CAuIvG"}
|
package/dist/server.js
ADDED
|
@@ -0,0 +1,212 @@
|
|
|
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.createFluxViteServer = createFluxViteServer;
|
|
7
|
+
const promises_1 = __importDefault(require("node:fs/promises"));
|
|
8
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
9
|
+
const node_http_1 = require("node:http");
|
|
10
|
+
const node_url_1 = require("node:url");
|
|
11
|
+
const server_1 = require("@fluxfast/react/server");
|
|
12
|
+
const bridge_js_1 = require("./bridge.js");
|
|
13
|
+
const assets_js_1 = require("./assets.js");
|
|
14
|
+
const health_js_1 = require("./health.js");
|
|
15
|
+
const options_js_1 = require("./options.js");
|
|
16
|
+
function backendAddress(value) {
|
|
17
|
+
try {
|
|
18
|
+
const url = new URL(typeof value === "string" ? value : "");
|
|
19
|
+
if (!["http:", "https:"].includes(url.protocol) || url.username || url.password || url.search || url.hash)
|
|
20
|
+
throw new Error();
|
|
21
|
+
return url.href.replace(/\/$/, "");
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
throw new TypeError("Set a trusted HTTP(S) backendUrl or FLUXFAST_BACKEND_URL without credentials, query, or fragment");
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
function rawPathIsSafe(url) {
|
|
28
|
+
try {
|
|
29
|
+
const decoded = decodeURIComponent(url.split("?", 1)[0]);
|
|
30
|
+
return url.startsWith("/") && !url.startsWith("//") && !/[\\\x00-\x1f\x7f]/.test(decoded) &&
|
|
31
|
+
!decoded.split("/").some(segment => segment === "." || segment === "..");
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/** Own one public HTTP origin. Production never imports Vite or source config. */
|
|
38
|
+
async function createFluxViteServer(options = {}) {
|
|
39
|
+
const root = node_path_1.default.resolve(options.root ?? process.cwd());
|
|
40
|
+
const backend = backendAddress(options.backendUrl ?? process.env.FLUXFAST_BACKEND_URL);
|
|
41
|
+
const host = options.host ?? "127.0.0.1";
|
|
42
|
+
const port = options.port ?? 3000;
|
|
43
|
+
const production = options.mode === "production";
|
|
44
|
+
if (options.mode !== undefined && options.mode !== "production" && options.mode !== "development")
|
|
45
|
+
throw new TypeError("Invalid FluxFast server mode");
|
|
46
|
+
if (!Number.isSafeInteger(port) || port < 0 || port > 65535)
|
|
47
|
+
throw new TypeError("FluxFast port must be an integer from 0 to 65535");
|
|
48
|
+
if (production && options.configFile !== undefined)
|
|
49
|
+
throw new TypeError("Production reads built artifacts, not a source configFile");
|
|
50
|
+
let stopping = false;
|
|
51
|
+
let vite;
|
|
52
|
+
let document;
|
|
53
|
+
let assets = async () => undefined;
|
|
54
|
+
const controllers = new Set();
|
|
55
|
+
const sockets = new Set();
|
|
56
|
+
const http = (0, node_http_1.createServer)((incoming, outgoing) => { void serve(incoming, outgoing); });
|
|
57
|
+
http.on("connection", socket => { sockets.add(socket); socket.once("close", () => sockets.delete(socket)); });
|
|
58
|
+
async function serve(incoming, outgoing) {
|
|
59
|
+
const controller = new AbortController();
|
|
60
|
+
controllers.add(controller);
|
|
61
|
+
const abort = () => controller.abort();
|
|
62
|
+
const disconnect = () => { if (!outgoing.writableEnded)
|
|
63
|
+
abort(); };
|
|
64
|
+
const destroy = () => outgoing.destroy();
|
|
65
|
+
incoming.once("aborted", abort);
|
|
66
|
+
outgoing.once("close", disconnect);
|
|
67
|
+
controller.signal.addEventListener("abort", destroy, { once: true });
|
|
68
|
+
try {
|
|
69
|
+
if (!rawPathIsSafe(incoming.url ?? "/")) {
|
|
70
|
+
await (0, bridge_js_1.writeWebResponse)(new Response(null, { status: 400 }), outgoing, controller.signal);
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
const request = (0, bridge_js_1.webRequest)(incoming, controller.signal);
|
|
74
|
+
if ((0, health_js_1.healthProbe)(request)) {
|
|
75
|
+
await (0, bridge_js_1.writeWebResponse)(await (0, health_js_1.serveHealth)(request, backend, stopping), outgoing, controller.signal);
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
if (stopping) {
|
|
79
|
+
await (0, bridge_js_1.writeWebResponse)(new Response(null, { status: 503 }), outgoing, controller.signal);
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
// Protocol traffic always precedes Vite/static middleware: no path,
|
|
83
|
+
// extension, cookie, body or live stream is reinterpreted as an asset.
|
|
84
|
+
if (request.headers.get("x-fluxfast") !== "1") {
|
|
85
|
+
if (vite) {
|
|
86
|
+
const handled = await new Promise((resolve, reject) => {
|
|
87
|
+
const finish = () => { cleanup(); resolve(true); };
|
|
88
|
+
const cleanup = () => { outgoing.removeListener("finish", finish); outgoing.removeListener("close", finish); };
|
|
89
|
+
outgoing.once("finish", finish);
|
|
90
|
+
outgoing.once("close", finish);
|
|
91
|
+
vite.middlewares(incoming, outgoing, (error) => { cleanup(); if (error)
|
|
92
|
+
reject(error);
|
|
93
|
+
else
|
|
94
|
+
resolve(false); });
|
|
95
|
+
});
|
|
96
|
+
if (handled)
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
const asset = await assets(request);
|
|
101
|
+
if (asset) {
|
|
102
|
+
await (0, bridge_js_1.writeWebResponse)(asset, outgoing, controller.signal);
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
await (0, bridge_js_1.writeWebResponse)(await document(request), outgoing, controller.signal);
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
if (outgoing.headersSent || controller.signal.aborted)
|
|
111
|
+
outgoing.destroy();
|
|
112
|
+
else {
|
|
113
|
+
outgoing.writeHead(500, { "content-type": "text/plain", "cache-control": "no-store" });
|
|
114
|
+
outgoing.end("Page unavailable");
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
finally {
|
|
118
|
+
incoming.removeListener("aborted", abort);
|
|
119
|
+
outgoing.removeListener("close", disconnect);
|
|
120
|
+
controller.signal.removeEventListener("abort", destroy);
|
|
121
|
+
controllers.delete(controller);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
try {
|
|
125
|
+
if (production) {
|
|
126
|
+
const output = node_path_1.default.join(root, options_js_1.BUILD_DIRECTORY);
|
|
127
|
+
const manifest = (0, assets_js_1.readHostManifest)(JSON.parse(await promises_1.default.readFile(node_path_1.default.join(output, "host.json"), "utf8")));
|
|
128
|
+
const client = node_path_1.default.join(output, "client");
|
|
129
|
+
const template = await promises_1.default.readFile(await (0, assets_js_1.containedFile)(client, manifest.template), "utf8");
|
|
130
|
+
const rendererFile = await (0, assets_js_1.containedFile)(node_path_1.default.join(output, "server"), "renderer.mjs");
|
|
131
|
+
const renderer = await import((0, node_url_1.pathToFileURL)(rendererFile).href);
|
|
132
|
+
if (typeof renderer.render !== "function")
|
|
133
|
+
throw new Error("Invalid FluxFast production renderer");
|
|
134
|
+
document = (0, server_1.createFluxReactHandler)({ ...renderer.settings, backendUrl: backend, render: renderer.render, template, development: false });
|
|
135
|
+
assets = (0, assets_js_1.createAssetHandler)(client, manifest.assets, manifest.template);
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
const { createServer: createViteServer } = await import("vite");
|
|
139
|
+
vite = await createViteServer({
|
|
140
|
+
root, ...(options.configFile === undefined ? {} : { configFile: options.configFile }), appType: "custom",
|
|
141
|
+
server: {
|
|
142
|
+
middlewareMode: true, hmr: { server: http }, host, port, strictPort: true,
|
|
143
|
+
// Transform requested modules normally, without speculative jobs that
|
|
144
|
+
// can wait on an optimizer batch after its cancellation on shutdown.
|
|
145
|
+
preTransformRequests: false,
|
|
146
|
+
},
|
|
147
|
+
});
|
|
148
|
+
(0, options_js_1.configuredFluxOptions)(vite.config);
|
|
149
|
+
const renderer = await vite.ssrLoadModule(options_js_1.SERVER_ENTRY);
|
|
150
|
+
if (typeof renderer.render !== "function")
|
|
151
|
+
throw new Error("Invalid FluxFast development renderer");
|
|
152
|
+
document = request => {
|
|
153
|
+
const configured = (0, options_js_1.configuredFluxOptions)(vite.config);
|
|
154
|
+
const handler = (0, server_1.createFluxReactHandler)({
|
|
155
|
+
...configured.settings, backendUrl: backend, development: configured.diagnostics,
|
|
156
|
+
render: async (props, renderOptions) => (await vite.ssrLoadModule(options_js_1.SERVER_ENTRY)).render(props, renderOptions),
|
|
157
|
+
template: async (input) => vite.transformIndexHtml(new URL(input.url).pathname, await promises_1.default.readFile(configured.template, "utf8")),
|
|
158
|
+
});
|
|
159
|
+
return handler(request);
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
await new Promise((resolve, reject) => {
|
|
163
|
+
const failed = (error) => { http.removeListener("listening", ready); reject(error); };
|
|
164
|
+
const ready = () => { http.removeListener("error", failed); resolve(); };
|
|
165
|
+
http.once("error", failed);
|
|
166
|
+
http.once("listening", ready);
|
|
167
|
+
http.listen(port, host);
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
catch (error) {
|
|
171
|
+
await vite?.close();
|
|
172
|
+
for (const socket of sockets)
|
|
173
|
+
socket.destroy();
|
|
174
|
+
if (http.listening)
|
|
175
|
+
await new Promise(resolve => http.close(() => resolve()));
|
|
176
|
+
throw error;
|
|
177
|
+
}
|
|
178
|
+
const address = http.address();
|
|
179
|
+
if (!address || typeof address === "string")
|
|
180
|
+
throw new Error("FluxFast server did not bind a TCP port");
|
|
181
|
+
let closing;
|
|
182
|
+
return {
|
|
183
|
+
url: `http://${host.includes(":") ? `[${host}]` : host}:${address.port}`,
|
|
184
|
+
close() {
|
|
185
|
+
return closing ??= (async () => {
|
|
186
|
+
stopping = true;
|
|
187
|
+
const closed = new Promise((resolve, reject) => http.close(error => error ? reject(error) : resolve()));
|
|
188
|
+
for (const controller of controllers)
|
|
189
|
+
controller.abort();
|
|
190
|
+
for (const socket of sockets)
|
|
191
|
+
socket.destroy();
|
|
192
|
+
try {
|
|
193
|
+
// A cold virtual-client request starts Vite's static-import crawl.
|
|
194
|
+
// Closing while its optimizer is held for that crawl can leave
|
|
195
|
+
// pending transforms waiting on a cancelled optimization batch.
|
|
196
|
+
// Release the owned network first, then let the crawl settle before
|
|
197
|
+
// Vite cancels its optimizer and closes the environments/watchers.
|
|
198
|
+
try {
|
|
199
|
+
await vite?.waitForRequestsIdle();
|
|
200
|
+
}
|
|
201
|
+
finally {
|
|
202
|
+
await vite?.close();
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
finally {
|
|
206
|
+
await closed;
|
|
207
|
+
}
|
|
208
|
+
})();
|
|
209
|
+
},
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
package/dist/setup.d.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type FrontendProject } from "./project.js";
|
|
2
|
+
interface Change {
|
|
3
|
+
file: string;
|
|
4
|
+
before?: string;
|
|
5
|
+
after: string;
|
|
6
|
+
}
|
|
7
|
+
export interface SetupPlan {
|
|
8
|
+
project: FrontendProject;
|
|
9
|
+
changes: Change[];
|
|
10
|
+
}
|
|
11
|
+
/** Read-only planning; never evaluate a Vite config or install dependencies. */
|
|
12
|
+
export declare function planSetup(project: FrontendProject, force?: boolean): SetupPlan;
|
|
13
|
+
/** Guard the complete plan, apply owned changes, and roll back on generation failure. */
|
|
14
|
+
export declare function applySetup(plan: SetupPlan): void;
|
|
15
|
+
/** Structural, read-only check; the real Vite build remains authoritative. */
|
|
16
|
+
export declare function checkSetup(project: FrontendProject): string[];
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=setup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"AAKA,OAAO,EAAmI,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAGrL,UAAU,MAAM;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE;AACjE,MAAM,WAAW,SAAS;IAAG,OAAO,EAAE,eAAe,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE;AAuC1E,gFAAgF;AAChF,wBAAgB,SAAS,CAAC,OAAO,EAAE,eAAe,EAAE,KAAK,UAAQ,GAAG,SAAS,CA0C5E;AAgBD,yFAAyF;AACzF,wBAAgB,UAAU,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,CA8ChD;AAED,8EAA8E;AAC9E,wBAAgB,UAAU,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,EAAE,CAoB7D"}
|