@modern-js/server 1.2.1-rc.0 → 1.3.1-beta.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/CHANGELOG.md +33 -7
- package/dist/js/modern/dev-tools/mock/index.js +1 -1
- package/dist/js/modern/dev-tools/watcher/index.js +5 -5
- package/dist/js/modern/libs/render/cache/index.js +1 -1
- package/dist/js/modern/libs/render/index.js +1 -1
- package/dist/js/modern/libs/render/modern/index.js +3 -1
- package/dist/js/modern/server/dev-server/dev-server.js +15 -5
- package/dist/js/modern/server/index.js +2 -2
- package/dist/js/modern/server/modern-server.js +3 -2
- package/dist/js/modern/utils.js +23 -0
- package/dist/js/node/dev-tools/mock/index.js +2 -2
- package/dist/js/node/dev-tools/watcher/index.js +5 -5
- package/dist/js/node/libs/render/cache/index.js +2 -2
- package/dist/js/node/libs/render/index.js +2 -2
- package/dist/js/node/libs/render/modern/index.js +3 -3
- package/dist/js/node/server/dev-server/dev-server.js +17 -5
- package/dist/js/node/server/index.js +3 -3
- package/dist/js/node/server/modern-server.js +4 -3
- package/dist/js/node/utils.js +28 -2
- package/dist/types/dev-tools/watcher/index.d.ts +2 -1
- package/dist/types/libs/metrics.d.ts +1 -1
- package/dist/types/libs/render/index.d.ts +1 -2
- package/dist/types/libs/render/ssr.d.ts +1 -2
- package/dist/types/server/dev-server/dev-server-split.d.ts +3 -3
- package/dist/types/server/dev-server/dev-server.d.ts +1 -1
- package/dist/types/server/index.d.ts +1 -1
- package/dist/types/server/modern-server-split.d.ts +4 -4
- package/dist/types/server/modern-server.d.ts +10 -7
- package/dist/types/utils.d.ts +10 -1
- package/jest.config.js +9 -0
- package/package.json +21 -15
- package/src/dev-tools/mock/index.ts +1 -1
- package/src/dev-tools/socket-server.ts +1 -1
- package/src/dev-tools/watcher/index.ts +10 -6
- package/src/libs/metrics.ts +1 -1
- package/src/libs/render/cache/index.ts +1 -1
- package/src/libs/render/index.ts +2 -3
- package/src/libs/render/modern/index.ts +2 -1
- package/src/libs/render/ssr.ts +1 -2
- package/src/server/dev-server/dev-server-split.ts +3 -3
- package/src/server/dev-server/dev-server.ts +50 -34
- package/src/server/index.ts +3 -3
- package/src/server/modern-server-split.ts +4 -4
- package/src/server/modern-server.ts +23 -14
- package/src/utils.ts +28 -0
- package/tests/dev.test.ts +39 -0
- package/tests/fixtures/pure/tsconfig.json +1 -1
- package/tests/middleware.test.ts +12 -11
- package/tests/server.test.ts +32 -1
- package/tests/tsconfig.json +1 -3
- package/tests/utils.test.ts +31 -0
- package/tests/watcher.test.ts +96 -0
- package/tsconfig.json +1 -3
package/tests/server.test.ts
CHANGED
|
@@ -2,6 +2,8 @@ import path from 'path';
|
|
|
2
2
|
import { defaultsConfig, NormalizedConfig } from '@modern-js/core';
|
|
3
3
|
import { ModernServerContext, NextFunction } from '@modern-js/types';
|
|
4
4
|
import createServer, { Server } from '../src';
|
|
5
|
+
import { ModernServer } from '../src/server/modern-server';
|
|
6
|
+
import Watcher from '../src/dev-tools/watcher';
|
|
5
7
|
|
|
6
8
|
describe('test server', () => {
|
|
7
9
|
test('should throw error when ', resolve => {
|
|
@@ -58,7 +60,7 @@ describe('test server', () => {
|
|
|
58
60
|
config: defaultsConfig as NormalizedConfig,
|
|
59
61
|
pwd: appDirectory,
|
|
60
62
|
});
|
|
61
|
-
const modernServer = server
|
|
63
|
+
const modernServer = (server as any).server;
|
|
62
64
|
|
|
63
65
|
const len = modernServer.handlers.length;
|
|
64
66
|
|
|
@@ -85,5 +87,34 @@ describe('test server', () => {
|
|
|
85
87
|
expect(newLen + 1).toBe(nextLen);
|
|
86
88
|
expect(modernServer.handlers[nextLen - 1]).toBe(asyncHandler);
|
|
87
89
|
});
|
|
90
|
+
|
|
91
|
+
test('should get request handler correctly', async () => {
|
|
92
|
+
const server = await createServer({
|
|
93
|
+
config: defaultsConfig as NormalizedConfig,
|
|
94
|
+
pwd: appDirectory,
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
const modernServer: ModernServer = (server as any).server;
|
|
98
|
+
const handler = modernServer.getRequestHandler();
|
|
99
|
+
expect(typeof handler === 'function').toBeTruthy();
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
describe('dev server', () => {
|
|
105
|
+
const pwd = path.join(__dirname, './fixtures/pure');
|
|
106
|
+
let devServer: Server;
|
|
107
|
+
|
|
108
|
+
test('watch', async () => {
|
|
109
|
+
devServer = await createServer({
|
|
110
|
+
config: defaultsConfig as NormalizedConfig,
|
|
111
|
+
pwd,
|
|
112
|
+
dev: true,
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
116
|
+
// @ts-expect-error
|
|
117
|
+
expect(devServer.server.watcher).toBeInstanceOf(Watcher);
|
|
118
|
+
await devServer.close();
|
|
88
119
|
});
|
|
89
120
|
});
|
package/tests/tsconfig.json
CHANGED
package/tests/utils.test.ts
CHANGED
|
@@ -3,6 +3,7 @@ import {
|
|
|
3
3
|
mergeExtension,
|
|
4
4
|
toMessage,
|
|
5
5
|
createErrorDocument,
|
|
6
|
+
createMiddlewareCollecter,
|
|
6
7
|
} from '../src/utils';
|
|
7
8
|
|
|
8
9
|
describe('test server utils', () => {
|
|
@@ -37,4 +38,34 @@ describe('test server utils', () => {
|
|
|
37
38
|
expect(doc).toMatch('redirect');
|
|
38
39
|
expect(doc).toMatch('302: redirect');
|
|
39
40
|
});
|
|
41
|
+
|
|
42
|
+
describe('test middleware collector', () => {
|
|
43
|
+
test('shoule return web middleware correctly', () => {
|
|
44
|
+
const { addWebMiddleware, getMiddlewares } = createMiddlewareCollecter();
|
|
45
|
+
|
|
46
|
+
const before = getMiddlewares();
|
|
47
|
+
expect(before.web).toEqual([]);
|
|
48
|
+
|
|
49
|
+
const middleware = async () => {
|
|
50
|
+
// empty
|
|
51
|
+
};
|
|
52
|
+
addWebMiddleware(middleware);
|
|
53
|
+
const after = getMiddlewares();
|
|
54
|
+
expect(after.web).toEqual([middleware]);
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
test('shoule return api middleware correctly', () => {
|
|
58
|
+
const { addAPIMiddleware, getMiddlewares } = createMiddlewareCollecter();
|
|
59
|
+
|
|
60
|
+
const before = getMiddlewares();
|
|
61
|
+
expect(before.web).toEqual([]);
|
|
62
|
+
|
|
63
|
+
const middleware = async () => {
|
|
64
|
+
// empty
|
|
65
|
+
};
|
|
66
|
+
addAPIMiddleware(middleware);
|
|
67
|
+
const after = getMiddlewares();
|
|
68
|
+
expect(after.api).toEqual([middleware]);
|
|
69
|
+
});
|
|
70
|
+
});
|
|
40
71
|
});
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import * as path from 'path';
|
|
2
|
+
import { fs } from '@modern-js/utils';
|
|
3
|
+
import Watcher from '../src/dev-tools/watcher';
|
|
4
|
+
|
|
5
|
+
jest.useRealTimers();
|
|
6
|
+
|
|
7
|
+
describe('watcher', () => {
|
|
8
|
+
let watcher: Watcher;
|
|
9
|
+
jest.setTimeout(25000);
|
|
10
|
+
beforeAll(() => {
|
|
11
|
+
watcher = new Watcher();
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
test('should emit change', done => {
|
|
15
|
+
const pwd = path.join(__dirname, './fixtures/pure');
|
|
16
|
+
const serverDir = path.normalize(path.join(pwd, './tmp-server'));
|
|
17
|
+
|
|
18
|
+
const callback = jest.fn();
|
|
19
|
+
if (fs.pathExistsSync(serverDir)) {
|
|
20
|
+
fs.removeSync(serverDir);
|
|
21
|
+
}
|
|
22
|
+
const writeFiles = () => {
|
|
23
|
+
fs.mkdirSync(serverDir);
|
|
24
|
+
fs.writeFileSync(
|
|
25
|
+
path.normalize(path.join(serverDir, 'index.js')),
|
|
26
|
+
'test',
|
|
27
|
+
'utf8',
|
|
28
|
+
);
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
const clear = () => {
|
|
32
|
+
fs.removeSync(serverDir);
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
watcher.listen(
|
|
36
|
+
[`${serverDir}/**/*`],
|
|
37
|
+
{
|
|
38
|
+
ignoreInitial: true,
|
|
39
|
+
ignored: /api\/typings\/.*/,
|
|
40
|
+
},
|
|
41
|
+
async () => {
|
|
42
|
+
callback();
|
|
43
|
+
expect(callback).toHaveBeenCalledTimes(1);
|
|
44
|
+
await watcher.close();
|
|
45
|
+
clear();
|
|
46
|
+
done();
|
|
47
|
+
},
|
|
48
|
+
);
|
|
49
|
+
|
|
50
|
+
setTimeout(writeFiles, 100);
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
test('should not emit change when typings file changed', done => {
|
|
54
|
+
const pwd = path.join(__dirname, './fixtures/pure');
|
|
55
|
+
const apiDir = path.normalize(path.join(pwd, './api'));
|
|
56
|
+
|
|
57
|
+
const callback = jest.fn();
|
|
58
|
+
|
|
59
|
+
if (fs.pathExistsSync(apiDir)) {
|
|
60
|
+
fs.removeSync(apiDir);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
const writeFiles = () => {
|
|
64
|
+
fs.mkdirSync(path.normalize(path.join(apiDir, 'typings')), {
|
|
65
|
+
recursive: true,
|
|
66
|
+
});
|
|
67
|
+
fs.writeFileSync(
|
|
68
|
+
path.normalize(path.join(apiDir, 'typings/index.js')),
|
|
69
|
+
'test',
|
|
70
|
+
'utf8',
|
|
71
|
+
);
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
const clear = () => {
|
|
75
|
+
fs.removeSync(apiDir);
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
watcher.listen(
|
|
79
|
+
[`${apiDir}/**/*`],
|
|
80
|
+
{
|
|
81
|
+
ignoreInitial: true,
|
|
82
|
+
ignored: /api\/typings\/.*/,
|
|
83
|
+
},
|
|
84
|
+
callback,
|
|
85
|
+
);
|
|
86
|
+
|
|
87
|
+
setTimeout(async () => {
|
|
88
|
+
expect(callback).toHaveBeenCalledTimes(0);
|
|
89
|
+
await watcher.close();
|
|
90
|
+
clear();
|
|
91
|
+
done();
|
|
92
|
+
}, 1000);
|
|
93
|
+
|
|
94
|
+
setTimeout(writeFiles);
|
|
95
|
+
});
|
|
96
|
+
});
|