@module-federation/treeshake-server 2.1.0 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -14
- package/bin/treeshake-server.js +1 -1
- package/dist/index.js +1 -1
- package/dist/index.mjs +1 -1
- package/dist/server.js +3 -3
- package/dist/server.mjs +3 -3
- package/package.json +5 -5
package/README.md
CHANGED
|
@@ -29,14 +29,8 @@ The CLI always embeds the UI. You can only override where it is served from:
|
|
|
29
29
|
## Library usage (custom adapters + middlewares)
|
|
30
30
|
|
|
31
31
|
```ts
|
|
32
|
-
import {
|
|
33
|
-
|
|
34
|
-
createAdapterDeps,
|
|
35
|
-
createApp,
|
|
36
|
-
createServer,
|
|
37
|
-
LocalAdapter,
|
|
38
|
-
} from "@module-federation/treeshake-server";
|
|
39
|
-
import { createTreeshakeFrontendAdapter } from "@module-federation/treeshake-frontend/adapter";
|
|
32
|
+
import { createAdapterRegistry, createAdapterDeps, createApp, createServer, LocalAdapter } from '@module-federation/treeshake-server';
|
|
33
|
+
import { createTreeshakeFrontendAdapter } from '@module-federation/treeshake-frontend/adapter';
|
|
40
34
|
|
|
41
35
|
const registry = createAdapterRegistry([
|
|
42
36
|
new LocalAdapter(),
|
|
@@ -45,27 +39,27 @@ const registry = createAdapterRegistry([
|
|
|
45
39
|
|
|
46
40
|
const deps = await createAdapterDeps({
|
|
47
41
|
registry,
|
|
48
|
-
adapterId:
|
|
42
|
+
adapterId: 'local', // or your custom adapter id
|
|
49
43
|
});
|
|
50
44
|
|
|
51
45
|
const app = createApp(deps, {
|
|
52
46
|
appExtensions: [
|
|
53
47
|
(appInstance) => {
|
|
54
|
-
appInstance.use(
|
|
55
|
-
c.res.headers.set(
|
|
48
|
+
appInstance.use('*', async (c, next) => {
|
|
49
|
+
c.res.headers.set('x-treeshake', 'true');
|
|
56
50
|
await next();
|
|
57
51
|
});
|
|
58
52
|
},
|
|
59
53
|
],
|
|
60
54
|
frontendAdapters: [
|
|
61
55
|
createTreeshakeFrontendAdapter({
|
|
62
|
-
basePath:
|
|
63
|
-
distDir:
|
|
56
|
+
basePath: '/tree-shaking',
|
|
57
|
+
distDir: '/path/to/treeshake-frontend/dist',
|
|
64
58
|
}),
|
|
65
59
|
],
|
|
66
60
|
});
|
|
67
61
|
|
|
68
|
-
createServer({ app, port: 3000, hostname:
|
|
62
|
+
createServer({ app, port: 3000, hostname: '0.0.0.0' });
|
|
69
63
|
```
|
|
70
64
|
|
|
71
65
|
In library mode you control the adapter registry, middleware, and frontend embedding.
|
package/bin/treeshake-server.js
CHANGED
package/dist/index.js
CHANGED
|
@@ -829,7 +829,7 @@ async function serveLocalFile(c, rootDir) {
|
|
|
829
829
|
if (filePath !== rootResolved && !filePath.startsWith(`${rootResolved}${external_node_path_default().sep}`)) return c.text('Not Found', 404);
|
|
830
830
|
try {
|
|
831
831
|
const buf = await external_node_fs_default().promises.readFile(filePath);
|
|
832
|
-
return new Response(buf, {
|
|
832
|
+
return new Response(new Uint8Array(buf), {
|
|
833
833
|
status: 200,
|
|
834
834
|
headers: {
|
|
835
835
|
'Content-Type': contentTypeByExt(filePath)
|
package/dist/index.mjs
CHANGED
|
@@ -780,7 +780,7 @@ async function serveLocalFile(c, rootDir) {
|
|
|
780
780
|
if (filePath !== rootResolved && !filePath.startsWith(`${rootResolved}${node_path.sep}`)) return c.text('Not Found', 404);
|
|
781
781
|
try {
|
|
782
782
|
const buf = await node_fs.promises.readFile(filePath);
|
|
783
|
-
return new Response(buf, {
|
|
783
|
+
return new Response(new Uint8Array(buf), {
|
|
784
784
|
status: 200,
|
|
785
785
|
headers: {
|
|
786
786
|
'Content-Type': contentTypeByExt(filePath)
|
package/dist/server.js
CHANGED
|
@@ -162,7 +162,7 @@ async function serveLocalFile(c, rootDir) {
|
|
|
162
162
|
if (filePath !== rootResolved && !filePath.startsWith(`${rootResolved}${external_node_path_default().sep}`)) return c.text('Not Found', 404);
|
|
163
163
|
try {
|
|
164
164
|
const buf = await external_node_fs_default().promises.readFile(filePath);
|
|
165
|
-
return new Response(buf, {
|
|
165
|
+
return new Response(new Uint8Array(buf), {
|
|
166
166
|
status: 200,
|
|
167
167
|
headers: {
|
|
168
168
|
'Content-Type': contentTypeByExt(filePath)
|
|
@@ -1028,7 +1028,7 @@ function createEmbeddedFrontendAdapter(opts) {
|
|
|
1028
1028
|
const stat = await external_node_fs_default().promises.stat(filePath);
|
|
1029
1029
|
if (stat.isFile()) {
|
|
1030
1030
|
const buf = await external_node_fs_default().promises.readFile(filePath);
|
|
1031
|
-
return new Response(buf, {
|
|
1031
|
+
return new Response(new Uint8Array(buf), {
|
|
1032
1032
|
status: 200,
|
|
1033
1033
|
headers: {
|
|
1034
1034
|
'Content-Type': embeddedAdapter_contentTypeByExt(filePath)
|
|
@@ -1041,7 +1041,7 @@ function createEmbeddedFrontendAdapter(opts) {
|
|
|
1041
1041
|
if (!fallbackPath) return c.text('Not Found', 404);
|
|
1042
1042
|
try {
|
|
1043
1043
|
const buf = await external_node_fs_default().promises.readFile(fallbackPath);
|
|
1044
|
-
return new Response(buf, {
|
|
1044
|
+
return new Response(new Uint8Array(buf), {
|
|
1045
1045
|
status: 200,
|
|
1046
1046
|
headers: {
|
|
1047
1047
|
'Content-Type': embeddedAdapter_contentTypeByExt(fallbackPath)
|
package/dist/server.mjs
CHANGED
|
@@ -148,7 +148,7 @@ async function serveLocalFile(c, rootDir) {
|
|
|
148
148
|
if (filePath !== rootResolved && !filePath.startsWith(`${rootResolved}${node_path.sep}`)) return c.text('Not Found', 404);
|
|
149
149
|
try {
|
|
150
150
|
const buf = await node_fs.promises.readFile(filePath);
|
|
151
|
-
return new Response(buf, {
|
|
151
|
+
return new Response(new Uint8Array(buf), {
|
|
152
152
|
status: 200,
|
|
153
153
|
headers: {
|
|
154
154
|
'Content-Type': contentTypeByExt(filePath)
|
|
@@ -999,7 +999,7 @@ function createEmbeddedFrontendAdapter(opts) {
|
|
|
999
999
|
const stat = await node_fs.promises.stat(filePath);
|
|
1000
1000
|
if (stat.isFile()) {
|
|
1001
1001
|
const buf = await node_fs.promises.readFile(filePath);
|
|
1002
|
-
return new Response(buf, {
|
|
1002
|
+
return new Response(new Uint8Array(buf), {
|
|
1003
1003
|
status: 200,
|
|
1004
1004
|
headers: {
|
|
1005
1005
|
'Content-Type': embeddedAdapter_contentTypeByExt(filePath)
|
|
@@ -1012,7 +1012,7 @@ function createEmbeddedFrontendAdapter(opts) {
|
|
|
1012
1012
|
if (!fallbackPath) return c.text('Not Found', 404);
|
|
1013
1013
|
try {
|
|
1014
1014
|
const buf = await node_fs.promises.readFile(fallbackPath);
|
|
1015
|
-
return new Response(buf, {
|
|
1015
|
+
return new Response(new Uint8Array(buf), {
|
|
1016
1016
|
status: 200,
|
|
1017
1017
|
headers: {
|
|
1018
1018
|
'Content-Type': embeddedAdapter_contentTypeByExt(fallbackPath)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@module-federation/treeshake-server",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.2.0",
|
|
4
4
|
"description": "Build service powered by Hono that installs dependencies, builds with Rspack, and uploads artifacts.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.mjs",
|
|
@@ -24,10 +24,10 @@
|
|
|
24
24
|
"author": "",
|
|
25
25
|
"license": "ISC",
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@hono/node-server": "1.19.
|
|
27
|
+
"@hono/node-server": "1.19.10",
|
|
28
28
|
"@hono/zod-validator": "0.7.4",
|
|
29
29
|
"dotenv": "16.4.5",
|
|
30
|
-
"hono": "4.
|
|
30
|
+
"hono": "4.12.7",
|
|
31
31
|
"json-stable-stringify": "1.3.0",
|
|
32
32
|
"nanoid": "5.1.6",
|
|
33
33
|
"p-limit": "^7.2.0",
|
|
@@ -58,9 +58,9 @@
|
|
|
58
58
|
"directory": "packages/treeshake-server"
|
|
59
59
|
},
|
|
60
60
|
"scripts": {
|
|
61
|
-
"build": "
|
|
61
|
+
"build": "rslib build && node scripts/copy-frontend.js",
|
|
62
62
|
"lint": "biome lint src scripts",
|
|
63
|
-
"prestart": "
|
|
63
|
+
"prestart": "pnpm exec turbo run build --filter=@module-federation/treeshake-server",
|
|
64
64
|
"dev": "node scripts/dev.js",
|
|
65
65
|
"start": "node dist/server.js",
|
|
66
66
|
"test": "node ../../scripts/ensure-playwright.js && rstest"
|