eddev 2.0.0-beta.1 → 2.0.0-beta.11
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/dist/app/entry/boot-admin.d.ts +1 -0
- package/dist/app/entry/{main.admin.js → boot-admin.js} +3 -5
- package/dist/app/entry/spa-root.d.ts +1 -0
- package/dist/app/entry/{Root.js → spa-root.js} +4 -4
- package/dist/app/entry/ssr-root-client.d.ts +4 -0
- package/dist/app/entry/ssr-root-client.js +9 -0
- package/dist/app/entry/ssr-root.d.ts +9 -0
- package/dist/app/entry/ssr-root.js +21 -0
- package/dist/app/lib/blocks/ErrorBoundaryFrontend.d.ts +1 -1
- package/dist/app/lib/blocks/editor/ErrorBoundaryEditor.d.ts +1 -1
- package/dist/app/lib/devtools/components/BreakpointIndicator.js +5 -3
- package/dist/app/lib/devtools/dev-tools-store.d.ts +9 -0
- package/dist/app/lib/devtools/dev-tools-store.js +8 -0
- package/dist/app/lib/devtools/hooks/useTailwind.d.ts +120 -121
- package/dist/app/lib/devtools/hooks/useTailwind.js +6 -3
- package/dist/app/lib/devtools/index.d.ts +1 -0
- package/dist/app/lib/devtools/index.js +1 -1
- package/dist/app/lib/hooks/queryUtils.d.ts +4 -1
- package/dist/app/lib/hooks/queryUtils.js +8 -11
- package/dist/app/lib/internal/internal-store.d.ts +0 -2
- package/dist/app/lib/internal/internal-store.js +1 -3
- package/dist/app/lib/routing/components/ClientOnly.d.ts +1 -1
- package/dist/app/lib/routing/loader.js +6 -4
- package/dist/app/server/index.d.ts +3 -0
- package/dist/app/server/index.js +3 -0
- package/dist/app/server/proxy-wp-admin.d.ts +3 -0
- package/dist/app/server/proxy-wp-admin.js +106 -0
- package/dist/app/server/render-ssr-page.d.ts +2 -0
- package/dist/app/server/render-ssr-page.js +22 -0
- package/dist/app/server/server-context.d.ts +34 -0
- package/dist/app/server/server-context.js +116 -0
- package/dist/app/server/utils/headers.d.ts +1 -0
- package/dist/app/server/utils/headers.js +17 -0
- package/dist/app/server/utils/replace-host.d.ts +6 -4
- package/dist/app/server/utils/replace-host.js +58 -11
- package/dist/node/cli/cli-worker.d.ts +1 -1
- package/dist/node/cli/cli-worker.js +3 -0
- package/dist/node/cli/cli.js +45 -14
- package/dist/node/cli/display/CLIApp.d.ts +1 -1
- package/dist/node/cli/display/CLIApp.js +1 -1
- package/dist/node/cli/display/components/LogEntries.d.ts +1 -1
- package/dist/node/cli/display/hooks/useStatefulLog.d.ts +1 -1
- package/dist/node/cli/display/util/colors.d.ts +2 -2
- package/dist/node/cli/version.d.ts +1 -1
- package/dist/node/cli/version.js +1 -1
- package/dist/node/compiler/build-vinxi.d.ts +8 -0
- package/dist/node/compiler/build-vinxi.js +37 -0
- package/dist/node/compiler/bundler.admin.d.ts +1 -1
- package/dist/node/compiler/bundler.admin.js +3 -3
- package/dist/node/compiler/bundler.frontend.d.ts +1 -1
- package/dist/node/compiler/bundler.frontend.js +3 -3
- package/dist/node/compiler/{serverless.dev.d.ts → dev-server.d.ts} +7 -5
- package/dist/node/compiler/dev-server.js +97 -0
- package/dist/node/compiler/get-vite-config.d.ts +19 -0
- package/dist/node/compiler/get-vite-config.js +184 -0
- package/dist/node/compiler/vinxi-app.d.ts +10 -0
- package/dist/node/compiler/vinxi-app.js +121 -0
- package/dist/node/compiler/vinxi-codegen.d.ts +12 -0
- package/dist/node/compiler/vinxi-codegen.js +408 -0
- package/dist/node/graphql/graphql-codegen.d.ts +1 -1
- package/dist/node/graphql/graphql-codegen.js +3 -3
- package/dist/node/graphql/graphql-schema-loader.js +15 -18
- package/dist/node/project/config.js +1 -1
- package/dist/node/project/env.d.ts +1 -1
- package/dist/node/project/env.js +1 -1
- package/dist/node/project/manifest/block-manifest.js +2 -2
- package/dist/node/project/manifest/manifest.d.ts +1 -1
- package/dist/node/project/manifest/manifest.js +1 -1
- package/dist/node/project/manifest/view-manifest.js +2 -2
- package/dist/node/project/project.d.ts +2 -1
- package/dist/node/project/project.js +13 -15
- package/dist/node/project/wp-info.js +0 -2
- package/dist/node/types/view-type.js +3 -4
- package/dist/node/utils/fs-codegen.d.ts +40 -0
- package/dist/node/utils/fs-codegen.js +97 -0
- package/dist/node/utils/fs.js +2 -0
- package/dist/node/utils/{selfSignedCert.js → self-signed-cert.js} +1 -1
- package/dist/node/utils/{statefulLog.js → stateful-log.js} +1 -1
- package/package.json +29 -31
- package/dist/app/entry/Root.d.ts +0 -1
- package/dist/app/entry/main.admin.d.ts +0 -3
- package/dist/app/entry/main.frontend.spa.d.ts +0 -3
- package/dist/app/entry/main.frontend.spa.js +0 -13
- package/dist/app/entry/main.frontend.ssr.d.ts +0 -21
- package/dist/app/entry/main.frontend.ssr.js +0 -79
- package/dist/app/entry/main.serverless.dev.d.ts +0 -4
- package/dist/app/entry/main.serverless.dev.js +0 -21
- package/dist/app/server/create-api-builtin-hono.d.ts +0 -8
- package/dist/app/server/create-api-builtin-hono.js +0 -80
- package/dist/app/server/create-ssr-hono.d.ts +0 -18
- package/dist/app/server/create-ssr-hono.js +0 -104
- package/dist/app/server/utils/index.html.d.ts +0 -2
- package/dist/app/server/utils/index.html.js +0 -14
- package/dist/node/compiler/index.html.d.ts +0 -2
- package/dist/node/compiler/index.html.js +0 -15
- package/dist/node/compiler/serverless.dev.js +0 -215
- package/dist/node/compiler/vite/get-vite-config.d.ts +0 -13
- package/dist/node/compiler/vite/get-vite-config.js +0 -315
- package/dist/node/compiler/vite/plugin-admin.d.ts +0 -4
- package/dist/node/compiler/vite/plugin-admin.js +0 -67
- package/dist/node/compiler/vite/plugin-blocks.d.ts +0 -4
- package/dist/node/compiler/vite/plugin-blocks.js +0 -73
- package/dist/node/compiler/vite/plugin-entry.d.ts +0 -6
- package/dist/node/compiler/vite/plugin-entry.js +0 -16
- package/dist/node/compiler/vite/plugin-resolved-tailwind.d.ts +0 -4
- package/dist/node/compiler/vite/plugin-resolved-tailwind.js +0 -29
- package/dist/node/compiler/vite/plugin-theme.d.ts +0 -4
- package/dist/node/compiler/vite/plugin-theme.js +0 -40
- package/dist/node/compiler/vite/plugin-views.d.ts +0 -4
- package/dist/node/compiler/vite/plugin-views.js +0 -51
- package/dist/node/utils/console.d.ts +0 -21
- package/dist/node/utils/console.js +0 -28
- package/dist/node/utils/unsafe-fetch.d.ts +0 -2
- package/dist/node/utils/unsafe-fetch.js +0 -19
- package/tsup.config.ts +0 -40
- package/types.manifests.d.ts +0 -22
- /package/dist/node/utils/{formatZodError.d.ts → format-zod-error.d.ts} +0 -0
- /package/dist/node/utils/{formatZodError.js → format-zod-error.js} +0 -0
- /package/dist/node/utils/{getRepoInfo.d.ts → get-repo-info.d.ts} +0 -0
- /package/dist/node/utils/{getRepoInfo.js → get-repo-info.js} +0 -0
- /package/dist/node/utils/{highlightCode.d.ts → highlight-code.d.ts} +0 -0
- /package/dist/node/utils/{highlightCode.js → highlight-code.js} +0 -0
- /package/dist/node/utils/{isDeploying.d.ts → is-deploying.d.ts} +0 -0
- /package/dist/node/utils/{isDeploying.js → is-deploying.js} +0 -0
- /package/dist/node/utils/{selfSignedCert.d.ts → self-signed-cert.d.ts} +0 -0
- /package/dist/node/utils/{statefulLog.d.ts → stateful-log.d.ts} +0 -0
- /package/dist/node/utils/{export-extractor.d.ts → ts-export-extractor.d.ts} +0 -0
- /package/dist/node/utils/{export-extractor.js → ts-export-extractor.js} +0 -0
- /package/dist/node/utils/{watchFileTree.d.ts → watch-file-tree.d.ts} +0 -0
- /package/dist/node/utils/{watchFileTree.js → watch-file-tree.js} +0 -0
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { Code } from "ts-poet";
|
|
2
|
+
import { Project } from "../project/project.js";
|
|
3
|
+
type VirtualFile = {
|
|
4
|
+
name: string;
|
|
5
|
+
content: string | Code;
|
|
6
|
+
};
|
|
7
|
+
type CodeGenerator = {
|
|
8
|
+
getFiles(): Promise<VirtualFile | VirtualFile[] | null>;
|
|
9
|
+
susbcribe?(callback: () => void): () => void;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* A codegen utility that allows you to procedurally and reactively generate files, to be flushed to the FS.
|
|
13
|
+
*/
|
|
14
|
+
export declare class FSCodegen {
|
|
15
|
+
project: Project;
|
|
16
|
+
opts: {
|
|
17
|
+
outDir: string;
|
|
18
|
+
};
|
|
19
|
+
outDir: string;
|
|
20
|
+
private generators;
|
|
21
|
+
private generatorFiles;
|
|
22
|
+
private unsubscribers;
|
|
23
|
+
private flushScheduled;
|
|
24
|
+
constructor(project: Project, opts: {
|
|
25
|
+
outDir: string;
|
|
26
|
+
});
|
|
27
|
+
register(generator: CodeGenerator): void;
|
|
28
|
+
registerFile({ name, generate, subscribe, }: {
|
|
29
|
+
name: string;
|
|
30
|
+
generate: (() => string | Code | Promise<string | Code>) | string | Code;
|
|
31
|
+
subscribe?: (callback: () => void) => () => void;
|
|
32
|
+
}): void;
|
|
33
|
+
private runGenerator;
|
|
34
|
+
scheduleFlush(): void;
|
|
35
|
+
runAndWatch(): Promise<void>;
|
|
36
|
+
run(): Promise<void>;
|
|
37
|
+
private flush;
|
|
38
|
+
stop(): void;
|
|
39
|
+
}
|
|
40
|
+
export {};
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { Code } from "ts-poet";
|
|
2
|
+
import { globby } from "globby";
|
|
3
|
+
import { fs } from "./fs.js";
|
|
4
|
+
import { join, resolve } from "path";
|
|
5
|
+
/**
|
|
6
|
+
* A codegen utility that allows you to procedurally and reactively generate files, to be flushed to the FS.
|
|
7
|
+
*/
|
|
8
|
+
export class FSCodegen {
|
|
9
|
+
project;
|
|
10
|
+
opts;
|
|
11
|
+
outDir;
|
|
12
|
+
generators = new Set();
|
|
13
|
+
generatorFiles = new Map();
|
|
14
|
+
unsubscribers = new Set();
|
|
15
|
+
flushScheduled = false;
|
|
16
|
+
constructor(project, opts) {
|
|
17
|
+
this.project = project;
|
|
18
|
+
this.opts = opts;
|
|
19
|
+
this.outDir = opts.outDir;
|
|
20
|
+
}
|
|
21
|
+
register(generator) {
|
|
22
|
+
this.generators.add(generator);
|
|
23
|
+
}
|
|
24
|
+
registerFile({ name, generate, subscribe, }) {
|
|
25
|
+
this.register({
|
|
26
|
+
async getFiles() {
|
|
27
|
+
return {
|
|
28
|
+
name,
|
|
29
|
+
content: generate instanceof Code ? generate.toString() : typeof generate === "string" ? generate : await generate(),
|
|
30
|
+
};
|
|
31
|
+
},
|
|
32
|
+
susbcribe: subscribe,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
async runGenerator(generator) {
|
|
36
|
+
const files = await generator.getFiles();
|
|
37
|
+
this.generatorFiles.set(generator, files ? (Array.isArray(files) ? files : [files]) : []);
|
|
38
|
+
this.scheduleFlush();
|
|
39
|
+
}
|
|
40
|
+
scheduleFlush() {
|
|
41
|
+
if (this.flushScheduled) {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
this.flushScheduled = true;
|
|
45
|
+
setTimeout(() => {
|
|
46
|
+
this.flushScheduled = false;
|
|
47
|
+
this.flush();
|
|
48
|
+
}, 100);
|
|
49
|
+
}
|
|
50
|
+
async runAndWatch() {
|
|
51
|
+
await Promise.all(Array.from(this.generators).map((generator) => {
|
|
52
|
+
return new Promise((resolve) => {
|
|
53
|
+
let first = true;
|
|
54
|
+
if (generator.susbcribe) {
|
|
55
|
+
// Subscribe and run at least once
|
|
56
|
+
this.unsubscribers.add(generator.susbcribe(() => {
|
|
57
|
+
if (first) {
|
|
58
|
+
first = false;
|
|
59
|
+
this.runGenerator(generator).then(resolve);
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
this.runGenerator(generator);
|
|
63
|
+
}
|
|
64
|
+
}));
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
// Just run once, since there is no subscriber
|
|
68
|
+
this.runGenerator(generator).then(resolve);
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
}));
|
|
72
|
+
await this.flush();
|
|
73
|
+
}
|
|
74
|
+
async run() {
|
|
75
|
+
await Promise.all(Array.from(this.generators).map((generator) => this.runGenerator(generator)));
|
|
76
|
+
await this.flush();
|
|
77
|
+
}
|
|
78
|
+
async flush() {
|
|
79
|
+
const files = Array.from(this.generatorFiles.values()).flat();
|
|
80
|
+
const existing = (await globby(this.outDir + "/**/*")).map((path) => resolve(this.project.rootDir, path));
|
|
81
|
+
const written = new Set();
|
|
82
|
+
await Promise.all(files.map(async (file) => {
|
|
83
|
+
const path = join(this.project.rootDir, this.outDir, file.name);
|
|
84
|
+
written.add(resolve(this.project.rootDir, path));
|
|
85
|
+
await fs.writeIfUnchanged(path, file.content.toString());
|
|
86
|
+
}));
|
|
87
|
+
await Promise.all(existing.map(async (path) => {
|
|
88
|
+
if (!written.has(path)) {
|
|
89
|
+
await fs.rm(path);
|
|
90
|
+
}
|
|
91
|
+
}));
|
|
92
|
+
}
|
|
93
|
+
stop() {
|
|
94
|
+
this.unsubscribers.forEach((unsub) => unsub());
|
|
95
|
+
this.unsubscribers.clear();
|
|
96
|
+
}
|
|
97
|
+
}
|
package/dist/node/utils/fs.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import * as nodeFs from "fs/promises";
|
|
2
|
+
import { dirname } from "path";
|
|
2
3
|
export const fs = {
|
|
3
4
|
...nodeFs,
|
|
4
5
|
writeIfUnchanged: async (path, content) => {
|
|
6
|
+
await fs.mkdirp(dirname(path));
|
|
5
7
|
try {
|
|
6
8
|
const currentContent = await nodeFs.readFile(path, "utf8");
|
|
7
9
|
if (currentContent === content)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "eddev",
|
|
3
|
-
"version": "2.0.0-beta.
|
|
3
|
+
"version": "2.0.0-beta.11",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"type": "module",
|
|
@@ -34,23 +34,34 @@
|
|
|
34
34
|
"types": "./dist/app/lib/dynamic/index.d.ts",
|
|
35
35
|
"import": "./dist/app/lib/dynamic/index.js"
|
|
36
36
|
},
|
|
37
|
-
"./
|
|
38
|
-
"types": "./
|
|
37
|
+
"./devtools": {
|
|
38
|
+
"types": "./dist/app/lib/devtools/index.d.ts",
|
|
39
|
+
"import": "./dist/app/lib/devtools/index.js"
|
|
40
|
+
},
|
|
41
|
+
"./server": {
|
|
42
|
+
"types": "./dist/app/server/index.d.ts",
|
|
43
|
+
"import": "./dist/app/server/index.js"
|
|
44
|
+
},
|
|
45
|
+
"./_internal/boot-admin.js": {
|
|
46
|
+
"import": "./dist/app/entry/boot-admin.js"
|
|
39
47
|
},
|
|
40
|
-
"./_internal/
|
|
41
|
-
"import": "./dist/app/entry/
|
|
48
|
+
"./_internal/spa-root.js": {
|
|
49
|
+
"import": "./dist/app/entry/spa-root.js"
|
|
42
50
|
},
|
|
43
|
-
"./_internal/
|
|
44
|
-
"import": "./dist/app/entry/
|
|
51
|
+
"./_internal/ssr-root-client.js": {
|
|
52
|
+
"import": "./dist/app/entry/ssr-root-client.js"
|
|
45
53
|
},
|
|
46
|
-
"./_internal/
|
|
47
|
-
"import": "./dist/app/entry/
|
|
54
|
+
"./_internal/ssr-root.js": {
|
|
55
|
+
"import": "./dist/app/entry/ssr-root.js"
|
|
48
56
|
},
|
|
49
|
-
"./_internal/
|
|
50
|
-
"import": "./dist/
|
|
57
|
+
"./_internal/create-vinxi-app.js": {
|
|
58
|
+
"import": "./dist/node/compiler/vinxi-app.js"
|
|
51
59
|
},
|
|
52
60
|
"./_internal": {
|
|
53
61
|
"import": "./dist/app/lib/internal/index.js"
|
|
62
|
+
},
|
|
63
|
+
"./types.app.public": {
|
|
64
|
+
"types": "./types.app.d.ts"
|
|
54
65
|
}
|
|
55
66
|
},
|
|
56
67
|
"scripts": {
|
|
@@ -67,51 +78,34 @@
|
|
|
67
78
|
"@graphql-codegen/typescript-operations": "^4.0.1",
|
|
68
79
|
"@graphql-tools/load": "^8.0.0",
|
|
69
80
|
"@graphql-tools/url-loader": "^8.0.0",
|
|
70
|
-
"@hono/node-server": "^1.7.0",
|
|
71
81
|
"@inquirer/prompts": "^5.0.6",
|
|
72
82
|
"@nozbe/microfuzz": "^1.0.0",
|
|
73
83
|
"@rollup/plugin-replace": "^5.0.5",
|
|
74
84
|
"@tanstack/react-query": "^5.51.23",
|
|
75
85
|
"@types/qs": "^6.9.15",
|
|
76
|
-
"@
|
|
77
|
-
"@types/wordpress__components": "^23.0.11",
|
|
78
|
-
"@types/wordpress__editor": "^13.6.7",
|
|
79
|
-
"@types/wordpress__hooks": "^2.11.0",
|
|
86
|
+
"@vinxi/react": "^0.2.5",
|
|
80
87
|
"@vitejs/plugin-react": "^4.1.1",
|
|
81
88
|
"chalk": "^5.3.0",
|
|
82
89
|
"change-case-all": "^2.1.0",
|
|
83
90
|
"chokidar": "^3.5.3",
|
|
84
91
|
"commander": "^11.1.0",
|
|
85
|
-
"concurrently": "^8.2.2",
|
|
86
|
-
"consola": "^3.2.3",
|
|
87
92
|
"csstype": "^3.1.3",
|
|
88
93
|
"dotenv": "^16.3.1",
|
|
89
|
-
"express": "^4.18.2",
|
|
90
|
-
"express-http-proxy": "^2.0.0",
|
|
91
|
-
"fastest-levenshtein": "^1.0.16",
|
|
92
94
|
"globby": "^13.2.2",
|
|
93
95
|
"graphql": "^16.8.1",
|
|
94
|
-
"hono": "^3.12.11",
|
|
95
96
|
"ink": "^5.0.1",
|
|
96
|
-
"ink-quicksearch-input": "^1.0.0",
|
|
97
97
|
"ink-spinner": "^5.0.0",
|
|
98
98
|
"ink-text-input": "^6.0.0",
|
|
99
99
|
"listhen": "^1.6.0",
|
|
100
100
|
"mkcert": "^3.2.0",
|
|
101
|
-
"mnemonist": "^0.39.8",
|
|
102
|
-
"node-fetch": "^3.3.2",
|
|
103
101
|
"obj-console": "^1.0.2",
|
|
104
102
|
"object-code": "^1.3.3",
|
|
105
103
|
"qs": "^6.13.0",
|
|
106
|
-
"react-error-boundary": "^4.0.11",
|
|
107
|
-
"rollup-plugin-external-globals": "^0.9.2",
|
|
108
104
|
"ts-poet": "^6.6.0",
|
|
109
|
-
"tsup": "^7.2.0",
|
|
110
105
|
"ufo": "^1.3.1",
|
|
111
106
|
"undent": "^0.1.0",
|
|
112
|
-
"use-zustand": "^0.2.0",
|
|
113
107
|
"valtio": "^1.13.2",
|
|
114
|
-
"
|
|
108
|
+
"vinxi": "^0.4.3",
|
|
115
109
|
"vite-tsconfig-paths": "^4.2.1",
|
|
116
110
|
"zod": "^3.22.4",
|
|
117
111
|
"zod-to-json-schema": "^3.21.4",
|
|
@@ -124,7 +118,11 @@
|
|
|
124
118
|
"@types/node": "^20.9.0",
|
|
125
119
|
"@types/react": "^18.3.3",
|
|
126
120
|
"@types/react-dom": "^18.3.0",
|
|
127
|
-
"typescript": "^5.5.2"
|
|
121
|
+
"typescript": "^5.5.2",
|
|
122
|
+
"@types/wordpress__blocks": "^12.5.13",
|
|
123
|
+
"@types/wordpress__components": "^23.0.11",
|
|
124
|
+
"@types/wordpress__editor": "^13.6.7",
|
|
125
|
+
"@types/wordpress__hooks": "^2.11.0"
|
|
128
126
|
},
|
|
129
127
|
"peerDependencies": {
|
|
130
128
|
"react": "^18.3.1",
|
package/dist/app/entry/Root.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function Root(): import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import "@manifest/blocks";
|
|
3
|
-
import "@manifest/views";
|
|
4
|
-
import { createRoot, hydrateRoot } from "react-dom/client";
|
|
5
|
-
import { Root } from "./Root";
|
|
6
|
-
export default function boot() {
|
|
7
|
-
if (env.serverless) {
|
|
8
|
-
hydrateRoot(document.getElementById("root"), _jsx(Root, {}));
|
|
9
|
-
}
|
|
10
|
-
else {
|
|
11
|
-
createRoot(document.getElementById("root")).render(_jsx(Root, {}));
|
|
12
|
-
}
|
|
13
|
-
}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import "@manifest/blocks";
|
|
2
|
-
import "@manifest/views";
|
|
3
|
-
import type { RouteData } from "../lib/routing/types";
|
|
4
|
-
import { UrlReplacerConf } from "../server/utils/replace-host";
|
|
5
|
-
export declare function patchConsole(c: any): void;
|
|
6
|
-
export declare function setFetchImpl(opts: any): void;
|
|
7
|
-
export declare function setPropsPreprocessor(func: any): void;
|
|
8
|
-
export declare function getPageData(): RouteData;
|
|
9
|
-
export declare function getCollectedOutput(): {
|
|
10
|
-
head: string;
|
|
11
|
-
foot: string;
|
|
12
|
-
};
|
|
13
|
-
export declare const getHonoAPI: (args: {
|
|
14
|
-
fetchImpl: any;
|
|
15
|
-
replaceUrls: UrlReplacerConf;
|
|
16
|
-
}) => import("hono").Hono<import("hono").Env, {}, "/">;
|
|
17
|
-
export declare const getHonoSSR: (args: {
|
|
18
|
-
indexTransformer: (html: string) => Promise<string>;
|
|
19
|
-
fetchImpl: any;
|
|
20
|
-
replaceUrls: UrlReplacerConf;
|
|
21
|
-
}) => import("hono").Hono<import("hono").Env, {}, "/">;
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import "@manifest/blocks";
|
|
3
|
-
import { getCssText } from "@manifest/theme";
|
|
4
|
-
import "@manifest/views";
|
|
5
|
-
import { QueryClientProvider } from "@tanstack/react-query";
|
|
6
|
-
import { SSRRouter } from "../lib/routing/components/SSRRouter";
|
|
7
|
-
import { RouteLoader } from "../lib/routing/loader";
|
|
8
|
-
import { createHonoStdAPI } from "../server/create-api-builtin-hono";
|
|
9
|
-
import { createSSRHono } from "../server/create-ssr-hono";
|
|
10
|
-
import indexHtml from "../server/utils/index.html";
|
|
11
|
-
import { getQueryClient } from "../utils/query-client";
|
|
12
|
-
import { normalizeRoute } from "../lib/routing/utils";
|
|
13
|
-
import { createUrlReplacer } from "../server/utils/replace-host";
|
|
14
|
-
let initialData;
|
|
15
|
-
export function patchConsole(c) {
|
|
16
|
-
console.log = (...args) => c.log(...args);
|
|
17
|
-
console.info = (...args) => c.info(...args);
|
|
18
|
-
console.warn = (...args) => c.warn(...args);
|
|
19
|
-
console.error = (...args) => c.warn(...args);
|
|
20
|
-
}
|
|
21
|
-
export function setFetchImpl(opts) {
|
|
22
|
-
// routeLoader4().setFetchImpl(opts)
|
|
23
|
-
}
|
|
24
|
-
export function setPropsPreprocessor(func) {
|
|
25
|
-
// routeLoader4().setPropsPreprocessor(func)
|
|
26
|
-
}
|
|
27
|
-
export function getPageData() {
|
|
28
|
-
return initialData;
|
|
29
|
-
}
|
|
30
|
-
export function getCollectedOutput() {
|
|
31
|
-
const result = { head: "", foot: "" };
|
|
32
|
-
if (getCssText) {
|
|
33
|
-
result.head = `<style id="stitches">${getCssText()}</style>`;
|
|
34
|
-
}
|
|
35
|
-
return result;
|
|
36
|
-
}
|
|
37
|
-
export const getHonoAPI = (args) => {
|
|
38
|
-
return createHonoStdAPI({
|
|
39
|
-
fetch: args.fetchImpl,
|
|
40
|
-
replaceUrls: args.replaceUrls,
|
|
41
|
-
});
|
|
42
|
-
};
|
|
43
|
-
export const getHonoSSR = (args) => {
|
|
44
|
-
const replaceUrls = args.replaceUrls ? createUrlReplacer(args.replaceUrls) : null;
|
|
45
|
-
return createSSRHono({
|
|
46
|
-
render: async function render({ pathname }) {
|
|
47
|
-
const loader = new RouteLoader();
|
|
48
|
-
if (replaceUrls) {
|
|
49
|
-
loader.setPropsPreprocessor(replaceUrls);
|
|
50
|
-
}
|
|
51
|
-
loader.setFetchImpl(args.fetchImpl);
|
|
52
|
-
initialData = await loader.loadRouteData(pathname, true);
|
|
53
|
-
loader.setAppData(initialData.appData.data);
|
|
54
|
-
return {
|
|
55
|
-
jsx: (_jsx(QueryClientProvider, { client: getQueryClient(), children: _jsx(SSRRouter, { loader: loader, route: normalizeRoute({
|
|
56
|
-
id: "initial",
|
|
57
|
-
component: loader.getRouteComponent(initialData.view),
|
|
58
|
-
pathname: pathname,
|
|
59
|
-
hash: "",
|
|
60
|
-
key: "",
|
|
61
|
-
props: initialData.viewData.data,
|
|
62
|
-
view: initialData.view,
|
|
63
|
-
query: {},
|
|
64
|
-
search: "",
|
|
65
|
-
}) }) })),
|
|
66
|
-
getCollectedOutput() {
|
|
67
|
-
const result = { head: "", foot: "" };
|
|
68
|
-
if (getCssText) {
|
|
69
|
-
result.head = `<style id="stitches">${getCssText()}</style>`;
|
|
70
|
-
}
|
|
71
|
-
return result;
|
|
72
|
-
},
|
|
73
|
-
indexTemplate: args.indexTransformer ? await args.indexTransformer(indexHtml) : indexHtml,
|
|
74
|
-
data: initialData,
|
|
75
|
-
};
|
|
76
|
-
},
|
|
77
|
-
manifest: {},
|
|
78
|
-
});
|
|
79
|
-
};
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import "@manifest/blocks";
|
|
3
|
-
import "@manifest/views";
|
|
4
|
-
import "@manifest/admin";
|
|
5
|
-
import { createRoot, hydrateRoot } from "react-dom/client";
|
|
6
|
-
import { Root } from "./Root";
|
|
7
|
-
import bootAdmin from "./main.admin";
|
|
8
|
-
// @ts-ignore
|
|
9
|
-
if (!window.wp)
|
|
10
|
-
window.wp = {};
|
|
11
|
-
export default function boot() {
|
|
12
|
-
if (env.admin) {
|
|
13
|
-
bootAdmin();
|
|
14
|
-
}
|
|
15
|
-
else if (env.serverless) {
|
|
16
|
-
hydrateRoot(document.getElementById("root"), _jsx(Root, {}));
|
|
17
|
-
}
|
|
18
|
-
else {
|
|
19
|
-
createRoot(document.getElementById("root")).render(_jsx(Root, {}));
|
|
20
|
-
}
|
|
21
|
-
}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { Hono } from "hono";
|
|
2
|
-
import { UrlReplacerConf } from "./utils/replace-host";
|
|
3
|
-
type Conf = {
|
|
4
|
-
fetch: typeof fetch;
|
|
5
|
-
replaceUrls?: UrlReplacerConf;
|
|
6
|
-
};
|
|
7
|
-
export declare function createHonoStdAPI(conf: Conf): Hono<import("hono").Env, {}, "/">;
|
|
8
|
-
export {};
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
import { Hono } from "hono";
|
|
2
|
-
import { joinURL, withQuery } from "ufo";
|
|
3
|
-
import { BRANDED_HEADERS, filterHeader } from "./utils/headers";
|
|
4
|
-
import { createUrlReplacer } from "./utils/replace-host";
|
|
5
|
-
let standardFetch = fetch;
|
|
6
|
-
const PROXY_RESPONSE_HEADERS = ["content-type", "set-cookie", /^x-/, "cache-control", ...Object.keys(BRANDED_HEADERS)];
|
|
7
|
-
function extractHeaders(rawHeaders) {
|
|
8
|
-
const headers = {};
|
|
9
|
-
rawHeaders.forEach((value, key) => {
|
|
10
|
-
headers[key] = value;
|
|
11
|
-
});
|
|
12
|
-
return headers;
|
|
13
|
-
}
|
|
14
|
-
export function createHonoStdAPI(conf) {
|
|
15
|
-
const fetch = conf.fetch ?? standardFetch;
|
|
16
|
-
const replaceUrls = conf.replaceUrls ? createUrlReplacer(conf.replaceUrls) : undefined;
|
|
17
|
-
const app = new Hono();
|
|
18
|
-
app.get("/api/rest/query/:name{.+}", async (c) => {
|
|
19
|
-
const name = c.req.param("name");
|
|
20
|
-
const paramString = c.req.query("params");
|
|
21
|
-
const fetchUrl = withQuery(joinURL(env.origin ?? "", `/wp-json/ed/v1/query/${name}`), { params: paramString });
|
|
22
|
-
const response = await fetch(fetchUrl, {
|
|
23
|
-
referrer: c.req.raw.referrer,
|
|
24
|
-
cache: "no-cache",
|
|
25
|
-
headers: {
|
|
26
|
-
"Content-Type": "application/json",
|
|
27
|
-
Accept: "application/json",
|
|
28
|
-
...extractHeaders(c.req.raw.headers),
|
|
29
|
-
// Authorization: c.req.header("Authorization") ?? "",
|
|
30
|
-
// Cookie: c.req.header("Cookie") ?? "",
|
|
31
|
-
// ...c.req.raw.headers,
|
|
32
|
-
},
|
|
33
|
-
});
|
|
34
|
-
c.status(response.status);
|
|
35
|
-
response.headers.forEach((value, key) => {
|
|
36
|
-
if (filterHeader(key, PROXY_RESPONSE_HEADERS)) {
|
|
37
|
-
c.header(key, value);
|
|
38
|
-
}
|
|
39
|
-
});
|
|
40
|
-
Object.entries(BRANDED_HEADERS).forEach(([key, value]) => c.header(key, value));
|
|
41
|
-
let text = await response.text();
|
|
42
|
-
if (replaceUrls) {
|
|
43
|
-
text = replaceUrls(text);
|
|
44
|
-
}
|
|
45
|
-
return c.body(text);
|
|
46
|
-
});
|
|
47
|
-
app.post("/api/rest/mutation/:name{.+}", async (c) => {
|
|
48
|
-
const name = c.req.param("name");
|
|
49
|
-
const fetchUrl = joinURL(env.origin ?? "", `/wp-json/ed/v1/mutation/${name}`);
|
|
50
|
-
const response = await fetch(fetchUrl, {
|
|
51
|
-
method: "POST",
|
|
52
|
-
referrer: c.req.raw.referrer,
|
|
53
|
-
cache: "no-cache",
|
|
54
|
-
headers: {
|
|
55
|
-
"Content-Type": "application/json",
|
|
56
|
-
Accept: "application/json",
|
|
57
|
-
...extractHeaders(c.req.raw.headers),
|
|
58
|
-
// Authorization: c.req.header("Authorization") ?? "",
|
|
59
|
-
// Cookie: c.req.header("Cookie") ?? "",
|
|
60
|
-
},
|
|
61
|
-
body: JSON.stringify({
|
|
62
|
-
name: name,
|
|
63
|
-
...(await c.req.json()),
|
|
64
|
-
}),
|
|
65
|
-
});
|
|
66
|
-
c.status(response.status);
|
|
67
|
-
response.headers.forEach((value, key) => {
|
|
68
|
-
if (filterHeader(key, PROXY_RESPONSE_HEADERS)) {
|
|
69
|
-
c.header(key, value);
|
|
70
|
-
}
|
|
71
|
-
});
|
|
72
|
-
Object.entries(BRANDED_HEADERS).forEach(([key, value]) => c.header(key, value));
|
|
73
|
-
let text = await response.text();
|
|
74
|
-
if (replaceUrls) {
|
|
75
|
-
text = replaceUrls(text);
|
|
76
|
-
}
|
|
77
|
-
return c.body(text);
|
|
78
|
-
});
|
|
79
|
-
return app;
|
|
80
|
-
}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { Hono } from "hono";
|
|
2
|
-
import { ReactElement } from "react";
|
|
3
|
-
type Conf = {
|
|
4
|
-
render: (args: {
|
|
5
|
-
pathname: string;
|
|
6
|
-
}) => Promise<{
|
|
7
|
-
jsx: ReactElement;
|
|
8
|
-
getCollectedOutput(): {
|
|
9
|
-
head: string;
|
|
10
|
-
foot: string;
|
|
11
|
-
};
|
|
12
|
-
indexTemplate: string;
|
|
13
|
-
data: any;
|
|
14
|
-
}>;
|
|
15
|
-
manifest: any;
|
|
16
|
-
};
|
|
17
|
-
export declare function createSSRHono(conf: Conf): Hono<import("hono").Env, {}, "/">;
|
|
18
|
-
export {};
|
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
import { Hono } from "hono";
|
|
2
|
-
import ReactDOMServer from "react-dom/server";
|
|
3
|
-
import { stream } from "hono/streaming";
|
|
4
|
-
export function createSSRHono(conf) {
|
|
5
|
-
const app = new Hono();
|
|
6
|
-
app.get("*", async (c) => {
|
|
7
|
-
const isPropsRequest = c.req.query("_props");
|
|
8
|
-
const result = await conf.render({ pathname: c.req.path });
|
|
9
|
-
let didError = false;
|
|
10
|
-
async function propsResponse() {
|
|
11
|
-
c.status(200);
|
|
12
|
-
c.header("Content-Type", "application/json");
|
|
13
|
-
return c.json(result.data);
|
|
14
|
-
}
|
|
15
|
-
const getTemplateParts = () => {
|
|
16
|
-
const collected = result.getCollectedOutput();
|
|
17
|
-
let [head, foot] = result.indexTemplate.split("<!--ssr-outlet-->");
|
|
18
|
-
head = head.replace("<!--ssr-meta-->", collected.head);
|
|
19
|
-
const dataPayload = `\n<script type="text/javascript">window._PAGE_DATA = ${JSON.stringify(result.data, null, 2)}</script>\n`;
|
|
20
|
-
foot = foot.replace("<!--ssr-meta-->", dataPayload + collected.foot);
|
|
21
|
-
return [head, foot];
|
|
22
|
-
};
|
|
23
|
-
// For Web Stream environments, and when react-dom/server exports renderToReadableStream for Node.js
|
|
24
|
-
// (Even though Node 20+ supports Web Streams, ReactDOM doesn't yet export it for Node)
|
|
25
|
-
if (ReactDOMServer.renderToReadableStream) {
|
|
26
|
-
const reactStream = await ReactDOMServer.renderToReadableStream(result.jsx, {
|
|
27
|
-
onError: (err) => {
|
|
28
|
-
didError = true;
|
|
29
|
-
console.warn("Failed to server-render React frontend");
|
|
30
|
-
console.error(err);
|
|
31
|
-
},
|
|
32
|
-
});
|
|
33
|
-
await reactStream.allReady;
|
|
34
|
-
if (isPropsRequest) {
|
|
35
|
-
return propsResponse();
|
|
36
|
-
}
|
|
37
|
-
const [head, foot] = getTemplateParts();
|
|
38
|
-
return stream(c, async (stream) => {
|
|
39
|
-
await stream.write(head);
|
|
40
|
-
await stream.pipe(reactStream);
|
|
41
|
-
await stream.write(foot);
|
|
42
|
-
stream.close();
|
|
43
|
-
});
|
|
44
|
-
// const result = await stream.getReader().read()
|
|
45
|
-
// const result = { value: "test" }
|
|
46
|
-
// return finalize(result.value)
|
|
47
|
-
}
|
|
48
|
-
else {
|
|
49
|
-
return new Promise((resolve, reject) => {
|
|
50
|
-
const reactStream = ReactDOMServer.renderToPipeableStream(result.jsx, {
|
|
51
|
-
onError: (err) => {
|
|
52
|
-
didError = true;
|
|
53
|
-
console.warn("Failed to server-render React frontend");
|
|
54
|
-
console.error(err);
|
|
55
|
-
// setModuleCollector(() => {})
|
|
56
|
-
},
|
|
57
|
-
onShellError: (err) => {
|
|
58
|
-
console.warn("Shell");
|
|
59
|
-
console.error(err);
|
|
60
|
-
},
|
|
61
|
-
onAllReady: async () => {
|
|
62
|
-
if (isPropsRequest) {
|
|
63
|
-
resolve(propsResponse());
|
|
64
|
-
}
|
|
65
|
-
else {
|
|
66
|
-
c.status(200);
|
|
67
|
-
c.header("Content-Type", "text/html");
|
|
68
|
-
resolve(stream(c, async (stream) => {
|
|
69
|
-
const [head, foot] = getTemplateParts();
|
|
70
|
-
stream.write(head);
|
|
71
|
-
reactStream.pipe({
|
|
72
|
-
write(chunk) {
|
|
73
|
-
stream.write(chunk);
|
|
74
|
-
},
|
|
75
|
-
close() {
|
|
76
|
-
// stream.close()
|
|
77
|
-
},
|
|
78
|
-
destroy() { },
|
|
79
|
-
on(event, cb) { },
|
|
80
|
-
async end() {
|
|
81
|
-
stream.write(foot);
|
|
82
|
-
stream.close();
|
|
83
|
-
},
|
|
84
|
-
});
|
|
85
|
-
}));
|
|
86
|
-
// reac.pipe(new WritableStream((chunk) => {
|
|
87
|
-
// chunk
|
|
88
|
-
// }))
|
|
89
|
-
// resolve(stream())
|
|
90
|
-
// const collected = getCollectedOutput()
|
|
91
|
-
// res.status(200).set({ "Content-Type": "text/html" })
|
|
92
|
-
// res.write(htmlParts[0].replace("<!--ssr-meta-->", collected.head ?? ""))
|
|
93
|
-
// stream.pipe(res)
|
|
94
|
-
// res.write(htmlParts[1].replace("<!--ssr-meta-->", collected.footer ?? ""))
|
|
95
|
-
// res.end()
|
|
96
|
-
}
|
|
97
|
-
// setModuleCollector(() => {})
|
|
98
|
-
},
|
|
99
|
-
});
|
|
100
|
-
});
|
|
101
|
-
}
|
|
102
|
-
});
|
|
103
|
-
return app;
|
|
104
|
-
}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
declare const _default: "<!doctype html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <link rel=\"icon\" type=\"image/svg+xml\" href=\"/vite.svg\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n <!--ssr-meta-->\n </head>\n <body>\n <div id=\"root\"><!--ssr-outlet--></div>\n <!--ssr-meta-->\n <script type=\"module\" src=\"/_boot.js\"></script>\n </body>\n</html>";
|
|
2
|
-
export default _default;
|