@shohaghinfo/aerojs 0.4.1 → 0.4.3
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/AGENTS.md +7 -6
- package/README.md +113 -27
- package/dist/cli/commands/make.js +4 -4
- package/dist/core/application.d.ts +4 -0
- package/dist/core/application.d.ts.map +1 -1
- package/dist/core/application.js +29 -3
- package/dist/core/application.js.map +1 -1
- package/dist/core/context.d.ts +25 -0
- package/dist/core/context.d.ts.map +1 -1
- package/dist/core/context.js +43 -0
- package/dist/core/context.js.map +1 -1
- package/dist/database/drizzle.d.ts +4 -1
- package/dist/database/drizzle.d.ts.map +1 -1
- package/dist/database/drizzle.js +1 -1
- package/dist/database/drizzle.js.map +1 -1
- package/dist/database/index.d.ts +2 -1
- package/dist/database/index.d.ts.map +1 -1
- package/dist/database/index.js +2 -1
- package/dist/database/index.js.map +1 -1
- package/dist/database/knex.d.ts.map +1 -1
- package/dist/database/knex.js +1 -0
- package/dist/database/knex.js.map +1 -1
- package/dist/database/model.d.ts.map +1 -1
- package/dist/database/model.js +19 -9
- package/dist/database/model.js.map +1 -1
- package/dist/database/prisma.d.ts +1 -1
- package/dist/database/prisma.d.ts.map +1 -1
- package/dist/database/prisma.js +3 -2
- package/dist/database/prisma.js.map +1 -1
- package/dist/database/query-builder.d.ts +35 -6
- package/dist/database/query-builder.d.ts.map +1 -1
- package/dist/database/query-builder.js +235 -46
- package/dist/database/query-builder.js.map +1 -1
- package/dist/database/sqlite.d.ts +31 -0
- package/dist/database/sqlite.d.ts.map +1 -0
- package/dist/database/sqlite.js +117 -0
- package/dist/database/sqlite.js.map +1 -0
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/security/hash.d.ts +4 -0
- package/dist/security/hash.d.ts.map +1 -1
- package/dist/security/hash.js +9 -0
- package/dist/security/hash.js.map +1 -1
- package/dist/security/index.d.ts +1 -1
- package/dist/security/index.d.ts.map +1 -1
- package/dist/security/index.js.map +1 -1
- package/dist/security/jwt.d.ts +6 -4
- package/dist/security/jwt.d.ts.map +1 -1
- package/dist/security/jwt.js +68 -11
- package/dist/security/jwt.js.map +1 -1
- package/dist/validation/schema.d.ts +6 -0
- package/dist/validation/schema.d.ts.map +1 -1
- package/dist/validation/schema.js +57 -3
- package/dist/validation/schema.js.map +1 -1
- package/dist/ws/websocket.d.ts +18 -0
- package/dist/ws/websocket.d.ts.map +1 -1
- package/dist/ws/websocket.js +125 -42
- package/dist/ws/websocket.js.map +1 -1
- package/package.json +1 -1
|
@@ -3,6 +3,42 @@
|
|
|
3
3
|
* @description Lightweight, zero-dependency JSON Schema validation and fast serialization engine.
|
|
4
4
|
*/
|
|
5
5
|
import { BadRequestError } from '../core/errors.js';
|
|
6
|
+
const REGEX_CACHE_LIMIT = 500;
|
|
7
|
+
const regexCache = new Map();
|
|
8
|
+
/**
|
|
9
|
+
* Checks whether a regular expression pattern is safe from catastrophic backtracking (ReDoS).
|
|
10
|
+
* Rejects patterns containing nested quantifiers, repeated groups with inner quantifiers,
|
|
11
|
+
* or excessively long pattern strings.
|
|
12
|
+
*/
|
|
13
|
+
export function isSafePattern(pattern) {
|
|
14
|
+
if (typeof pattern !== 'string' || pattern.length > 500) {
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
// Check for nested quantifiers: (x+)+, (x*)+, (x+)*, (x*)*, (x{1,})+
|
|
18
|
+
const nestedQuantifiers = /\((?:[^()]*[+*]|\S*\{\d+,?\d*\})\)[+*]|\([^)]*[+*]\)\{\d+,?\d*\}/;
|
|
19
|
+
if (nestedQuantifiers.test(pattern)) {
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
// Check for repeated groups containing alternations with repetition: (a|aa)+, (a+|b+)+
|
|
23
|
+
const repeatedAlternation = /\((?:[^()|]+\|)+[^()]+\)[+*]/;
|
|
24
|
+
if (repeatedAlternation.test(pattern)) {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
return true;
|
|
28
|
+
}
|
|
29
|
+
function getCachedRegExp(pattern) {
|
|
30
|
+
let reg = regexCache.get(pattern);
|
|
31
|
+
if (!reg) {
|
|
32
|
+
if (regexCache.size >= REGEX_CACHE_LIMIT) {
|
|
33
|
+
const firstKey = regexCache.keys().next().value;
|
|
34
|
+
if (firstKey)
|
|
35
|
+
regexCache.delete(firstKey);
|
|
36
|
+
}
|
|
37
|
+
reg = new RegExp(pattern);
|
|
38
|
+
regexCache.set(pattern, reg);
|
|
39
|
+
}
|
|
40
|
+
return reg;
|
|
41
|
+
}
|
|
6
42
|
export function validateSchema(schema, data, path = 'root') {
|
|
7
43
|
if (!schema || typeof schema !== 'object') {
|
|
8
44
|
return [];
|
|
@@ -63,14 +99,32 @@ export function validateSchema(schema, data, path = 'root') {
|
|
|
63
99
|
});
|
|
64
100
|
}
|
|
65
101
|
if (typeof s.pattern === 'string') {
|
|
66
|
-
|
|
67
|
-
if (!reg.test(data)) {
|
|
102
|
+
if (!isSafePattern(s.pattern)) {
|
|
68
103
|
errors.push({
|
|
69
104
|
keyword: 'pattern',
|
|
70
105
|
dataPath: path,
|
|
71
|
-
message:
|
|
106
|
+
message: 'Pattern rejected: potentially unsafe regular expression (ReDoS risk)',
|
|
72
107
|
});
|
|
73
108
|
}
|
|
109
|
+
else {
|
|
110
|
+
try {
|
|
111
|
+
const reg = getCachedRegExp(s.pattern);
|
|
112
|
+
if (!reg.test(data)) {
|
|
113
|
+
errors.push({
|
|
114
|
+
keyword: 'pattern',
|
|
115
|
+
dataPath: path,
|
|
116
|
+
message: `String does not match pattern ${s.pattern}`,
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
catch {
|
|
121
|
+
errors.push({
|
|
122
|
+
keyword: 'pattern',
|
|
123
|
+
dataPath: path,
|
|
124
|
+
message: `Invalid regular expression pattern: ${s.pattern}`,
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
}
|
|
74
128
|
}
|
|
75
129
|
if (s.format === 'email') {
|
|
76
130
|
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/validation/schema.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AA+BpD,MAAM,UAAU,cAAc,CAC5B,MAAsC,EACtC,IAAa,EACb,IAAI,GAAG,MAAM;IAEb,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC1C,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,CAAC,GAAG,MAA8B,CAAC;IACzC,MAAM,MAAM,GAA4B,EAAE,CAAC;IAE3C,qBAAqB;IACrB,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC/B,MAAM,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC;QAC5B,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;YACpC,CAAC,CAAC,OAAO;YACT,CAAC,CAAC,IAAI,KAAK,IAAI;gBACf,CAAC,CAAC,MAAM;gBACR,CAAC,CAAC,OAAO,IAAI,CAAC;QAEhB,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;YAC/B,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxD,MAAM,CAAC,IAAI,CAAC;oBACV,OAAO,EAAE,MAAM;oBACf,QAAQ,EAAE,IAAI;oBACd,OAAO,EAAE,8BAA8B,UAAU,EAAE;iBACpD,CAAC,CAAC;gBACH,OAAO,MAAM,CAAC;YAChB,CAAC;QACH,CAAC;aAAM,IAAI,UAAU,KAAK,YAAY,EAAE,CAAC;YACvC,MAAM,CAAC,IAAI,CAAC;gBACV,OAAO,EAAE,MAAM;gBACf,QAAQ,EAAE,IAAI;gBACd,OAAO,EAAE,YAAY,YAAY,cAAc,UAAU,EAAE;aAC5D,CAAC,CAAC;YACH,OAAO,MAAM,CAAC;QAChB,CAAC;IACH,CAAC;IAED,qBAAqB;IACrB,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1B,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3B,MAAM,CAAC,IAAI,CAAC;gBACV,OAAO,EAAE,MAAM;gBACf,QAAQ,EAAE,IAAI;gBACd,OAAO,EAAE,yBAAyB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;aAC3D,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,wBAAwB;IACxB,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,IAAI,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC;YACjE,MAAM,CAAC,IAAI,CAAC;gBACV,OAAO,EAAE,WAAW;gBACpB,QAAQ,EAAE,IAAI;gBACd,OAAO,EAAE,4BAA4B,CAAC,CAAC,SAAS,EAAE;aACnD,CAAC,CAAC;QACL,CAAC;QACD,IAAI,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC;YACjE,MAAM,CAAC,IAAI,CAAC;gBACV,OAAO,EAAE,WAAW;gBACpB,QAAQ,EAAE,IAAI;gBACd,OAAO,EAAE,4BAA4B,CAAC,CAAC,SAAS,EAAE;aACnD,CAAC,CAAC;QACL,CAAC;QACD,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YAClC,MAAM,
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/validation/schema.ts"],"names":[],"mappings":"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"}
|
package/dist/ws/websocket.d.ts
CHANGED
|
@@ -12,6 +12,11 @@ export interface WebSocketUpgradeHandler {
|
|
|
12
12
|
export interface WebSocketOptions {
|
|
13
13
|
maxPayload?: number;
|
|
14
14
|
}
|
|
15
|
+
/**
|
|
16
|
+
* Fast, memory-safe unmasking of client frames.
|
|
17
|
+
* Uses 32-bit word-level XOR operations for high throughput and zero allocation overhead.
|
|
18
|
+
*/
|
|
19
|
+
export declare function fastUnmask(payload: Buffer, maskKey: Buffer): Buffer;
|
|
15
20
|
/**
|
|
16
21
|
* Lightweight Zero-Dependency RFC 6455 WebSocket Connection wrapper over Duplex stream.
|
|
17
22
|
*/
|
|
@@ -22,7 +27,19 @@ export declare class AeroWebSocket extends EventEmitter {
|
|
|
22
27
|
private buffer;
|
|
23
28
|
private currentFragments;
|
|
24
29
|
private currentOpcode;
|
|
30
|
+
private onSocketData;
|
|
31
|
+
private onSocketClose;
|
|
32
|
+
private onSocketError;
|
|
33
|
+
private onSocketEnd;
|
|
25
34
|
constructor(socket: Duplex, options?: WebSocketOptions);
|
|
35
|
+
/**
|
|
36
|
+
* Cleans up internal buffers and removes all socket listeners to prevent memory leaks.
|
|
37
|
+
*/
|
|
38
|
+
cleanup(): void;
|
|
39
|
+
/**
|
|
40
|
+
* Destroys the connection immediately and frees all resources.
|
|
41
|
+
*/
|
|
42
|
+
destroy(error?: Error): void;
|
|
26
43
|
/**
|
|
27
44
|
* Sends a UTF-8 text message to the WebSocket client.
|
|
28
45
|
*/
|
|
@@ -33,6 +50,7 @@ export declare class AeroWebSocket extends EventEmitter {
|
|
|
33
50
|
close(code?: number, reason?: string): void;
|
|
34
51
|
/**
|
|
35
52
|
* Internal RFC 6455 frame parser for incoming client messages (which must be masked).
|
|
53
|
+
* Optimized with single buffer slicing and 32-bit word unmasking.
|
|
36
54
|
*/
|
|
37
55
|
private parseFrames;
|
|
38
56
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../../src/ws/websocket.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAI3C,MAAM,WAAW,uBAAuB;IACtC,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,eAAe,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrE;AAED,MAAM,WAAW,gBAAgB;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,YAAY;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,UAAS;IACxB,SAAgB,UAAU,EAAE,MAAM,CAAC;IACnC,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,gBAAgB,CAAgB;IACxC,OAAO,CAAC,aAAa,CAAuB;
|
|
1
|
+
{"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../../src/ws/websocket.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAI3C,MAAM,WAAW,uBAAuB;IACtC,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,eAAe,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrE;AAED,MAAM,WAAW,gBAAgB;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAoBnE;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,YAAY;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,UAAS;IACxB,SAAgB,UAAU,EAAE,MAAM,CAAC;IACnC,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,gBAAgB,CAAgB;IACxC,OAAO,CAAC,aAAa,CAAuB;IAE5C,OAAO,CAAC,YAAY,CAA0B;IAC9C,OAAO,CAAC,aAAa,CAAa;IAClC,OAAO,CAAC,aAAa,CAAuB;IAC5C,OAAO,CAAC,WAAW,CAAa;gBAEpB,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,gBAAqB;IAwC1D;;OAEG;IACI,OAAO,IAAI,IAAI;IAgBtB;;OAEG;IACI,OAAO,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI;IAUnC;;OAEG;IACI,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAwBxC;;OAEG;IACI,KAAK,CAAC,IAAI,SAAO,EAAE,MAAM,SAAK,GAAG,IAAI;IAmB5C;;;OAGG;IACH,OAAO,CAAC,WAAW;CA0GpB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,eAAe,EACpB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,GACX,aAAa,GAAG,IAAI,CAoCtB"}
|
package/dist/ws/websocket.js
CHANGED
|
@@ -6,6 +6,27 @@
|
|
|
6
6
|
import crypto from 'node:crypto';
|
|
7
7
|
import { EventEmitter } from 'node:events';
|
|
8
8
|
const WS_GUID = '258EAFA5-E914-47DA-95CA-C5AB0DC85B11';
|
|
9
|
+
/**
|
|
10
|
+
* Fast, memory-safe unmasking of client frames.
|
|
11
|
+
* Uses 32-bit word-level XOR operations for high throughput and zero allocation overhead.
|
|
12
|
+
*/
|
|
13
|
+
export function fastUnmask(payload, maskKey) {
|
|
14
|
+
const len = payload.length;
|
|
15
|
+
if (len === 0) {
|
|
16
|
+
return Buffer.alloc(0);
|
|
17
|
+
}
|
|
18
|
+
const unmasked = Buffer.allocUnsafe(len);
|
|
19
|
+
const mask32 = maskKey.readInt32LE(0);
|
|
20
|
+
const remainder = len % 4;
|
|
21
|
+
const wordLimit = len - remainder;
|
|
22
|
+
for (let i = 0; i < wordLimit; i += 4) {
|
|
23
|
+
unmasked.writeInt32LE(payload.readInt32LE(i) ^ mask32, i);
|
|
24
|
+
}
|
|
25
|
+
for (let i = wordLimit; i < len; i++) {
|
|
26
|
+
unmasked[i] = payload[i] ^ maskKey[i % 4];
|
|
27
|
+
}
|
|
28
|
+
return unmasked;
|
|
29
|
+
}
|
|
9
30
|
/**
|
|
10
31
|
* Lightweight Zero-Dependency RFC 6455 WebSocket Connection wrapper over Duplex stream.
|
|
11
32
|
*/
|
|
@@ -16,25 +37,74 @@ export class AeroWebSocket extends EventEmitter {
|
|
|
16
37
|
buffer = Buffer.alloc(0);
|
|
17
38
|
currentFragments = [];
|
|
18
39
|
currentOpcode = null;
|
|
40
|
+
onSocketData;
|
|
41
|
+
onSocketClose;
|
|
42
|
+
onSocketError;
|
|
43
|
+
onSocketEnd;
|
|
19
44
|
constructor(socket, options = {}) {
|
|
20
45
|
super();
|
|
21
46
|
this.socket = socket;
|
|
22
47
|
this.maxPayload = options.maxPayload ?? 5 * 1024 * 1024; // 5MB default
|
|
23
|
-
this.
|
|
24
|
-
|
|
48
|
+
this.onSocketData = (chunk) => {
|
|
49
|
+
if (this.isClosed)
|
|
50
|
+
return;
|
|
51
|
+
if (this.buffer.length === 0) {
|
|
52
|
+
this.buffer = chunk;
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
this.buffer = Buffer.concat([this.buffer, chunk]);
|
|
56
|
+
}
|
|
25
57
|
if (this.buffer.length > this.maxPayload) {
|
|
26
58
|
this.close(1009, 'Payload too large');
|
|
27
59
|
return;
|
|
28
60
|
}
|
|
29
61
|
this.parseFrames();
|
|
30
|
-
}
|
|
31
|
-
this.
|
|
32
|
-
this.
|
|
62
|
+
};
|
|
63
|
+
this.onSocketClose = () => {
|
|
64
|
+
this.cleanup();
|
|
33
65
|
this.emit('close');
|
|
34
|
-
}
|
|
35
|
-
this.
|
|
66
|
+
};
|
|
67
|
+
this.onSocketError = (err) => {
|
|
68
|
+
this.cleanup();
|
|
36
69
|
this.emit('error', err);
|
|
37
|
-
}
|
|
70
|
+
};
|
|
71
|
+
this.onSocketEnd = () => {
|
|
72
|
+
this.cleanup();
|
|
73
|
+
this.emit('close');
|
|
74
|
+
};
|
|
75
|
+
this.socket.on('data', this.onSocketData);
|
|
76
|
+
this.socket.on('close', this.onSocketClose);
|
|
77
|
+
this.socket.on('error', this.onSocketError);
|
|
78
|
+
this.socket.on('end', this.onSocketEnd);
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Cleans up internal buffers and removes all socket listeners to prevent memory leaks.
|
|
82
|
+
*/
|
|
83
|
+
cleanup() {
|
|
84
|
+
if (this.isClosed)
|
|
85
|
+
return;
|
|
86
|
+
this.isClosed = true;
|
|
87
|
+
this.buffer = Buffer.alloc(0);
|
|
88
|
+
this.currentFragments = [];
|
|
89
|
+
this.currentOpcode = null;
|
|
90
|
+
if (this.socket) {
|
|
91
|
+
this.socket.removeListener('data', this.onSocketData);
|
|
92
|
+
this.socket.removeListener('close', this.onSocketClose);
|
|
93
|
+
this.socket.removeListener('error', this.onSocketError);
|
|
94
|
+
this.socket.removeListener('end', this.onSocketEnd);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Destroys the connection immediately and frees all resources.
|
|
99
|
+
*/
|
|
100
|
+
destroy(error) {
|
|
101
|
+
this.cleanup();
|
|
102
|
+
if (this.socket && !this.socket.destroyed) {
|
|
103
|
+
this.socket.destroy(error);
|
|
104
|
+
}
|
|
105
|
+
if (error) {
|
|
106
|
+
this.emit('error', error);
|
|
107
|
+
}
|
|
38
108
|
}
|
|
39
109
|
/**
|
|
40
110
|
* Sends a UTF-8 text message to the WebSocket client.
|
|
@@ -50,13 +120,13 @@ export class AeroWebSocket extends EventEmitter {
|
|
|
50
120
|
header = Buffer.from([0x81, length]);
|
|
51
121
|
}
|
|
52
122
|
else if (length <= 65535) {
|
|
53
|
-
header = Buffer.
|
|
123
|
+
header = Buffer.allocUnsafe(4);
|
|
54
124
|
header[0] = 0x81;
|
|
55
125
|
header[1] = 126;
|
|
56
126
|
header.writeUInt16BE(length, 2);
|
|
57
127
|
}
|
|
58
128
|
else {
|
|
59
|
-
header = Buffer.
|
|
129
|
+
header = Buffer.allocUnsafe(10);
|
|
60
130
|
header[0] = 0x81;
|
|
61
131
|
header[1] = 127;
|
|
62
132
|
header.writeBigUInt64BE(BigInt(length), 2);
|
|
@@ -69,22 +139,31 @@ export class AeroWebSocket extends EventEmitter {
|
|
|
69
139
|
close(code = 1000, reason = '') {
|
|
70
140
|
if (this.isClosed)
|
|
71
141
|
return;
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
142
|
+
try {
|
|
143
|
+
const reasonBuf = Buffer.from(reason, 'utf-8');
|
|
144
|
+
const payload = Buffer.allocUnsafe(2 + reasonBuf.length);
|
|
145
|
+
payload.writeUInt16BE(code, 0);
|
|
146
|
+
reasonBuf.copy(payload, 2);
|
|
147
|
+
const header = Buffer.from([0x88, payload.length]);
|
|
148
|
+
this.socket.write(Buffer.concat([header, payload]));
|
|
149
|
+
this.socket.end();
|
|
150
|
+
}
|
|
151
|
+
catch {
|
|
152
|
+
// Ignore write errors on closing stream
|
|
153
|
+
}
|
|
154
|
+
finally {
|
|
155
|
+
this.cleanup();
|
|
156
|
+
}
|
|
80
157
|
}
|
|
81
158
|
/**
|
|
82
159
|
* Internal RFC 6455 frame parser for incoming client messages (which must be masked).
|
|
160
|
+
* Optimized with single buffer slicing and 32-bit word unmasking.
|
|
83
161
|
*/
|
|
84
162
|
parseFrames() {
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
const
|
|
163
|
+
let offset = 0;
|
|
164
|
+
while (this.buffer.length - offset >= 2) {
|
|
165
|
+
const firstByte = this.buffer[offset];
|
|
166
|
+
const secondByte = this.buffer[offset + 1];
|
|
88
167
|
const isFin = (firstByte & 0x80) === 0x80;
|
|
89
168
|
const opcode = firstByte & 0x0f;
|
|
90
169
|
const isMasked = (secondByte & 0x80) === 0x80;
|
|
@@ -95,43 +174,39 @@ export class AeroWebSocket extends EventEmitter {
|
|
|
95
174
|
return;
|
|
96
175
|
}
|
|
97
176
|
let payloadLength = secondByte & 0x7f;
|
|
98
|
-
let
|
|
177
|
+
let headerSize = 2;
|
|
99
178
|
if (payloadLength === 126) {
|
|
100
|
-
if (this.buffer.length < 4)
|
|
101
|
-
|
|
102
|
-
payloadLength = this.buffer.readUInt16BE(2);
|
|
103
|
-
|
|
179
|
+
if (this.buffer.length - offset < 4)
|
|
180
|
+
break;
|
|
181
|
+
payloadLength = this.buffer.readUInt16BE(offset + 2);
|
|
182
|
+
headerSize = 4;
|
|
104
183
|
}
|
|
105
184
|
else if (payloadLength === 127) {
|
|
106
|
-
if (this.buffer.length < 10)
|
|
107
|
-
|
|
108
|
-
payloadLength = Number(this.buffer.readBigUInt64BE(2));
|
|
109
|
-
|
|
185
|
+
if (this.buffer.length - offset < 10)
|
|
186
|
+
break;
|
|
187
|
+
payloadLength = Number(this.buffer.readBigUInt64BE(offset + 2));
|
|
188
|
+
headerSize = 10;
|
|
110
189
|
}
|
|
111
190
|
if (payloadLength > this.maxPayload) {
|
|
112
191
|
this.close(1009, 'Message payload exceeds limit');
|
|
113
192
|
return;
|
|
114
193
|
}
|
|
115
194
|
const maskLength = 4;
|
|
116
|
-
const totalLength =
|
|
117
|
-
if (this.buffer.length < totalLength) {
|
|
195
|
+
const totalLength = headerSize + maskLength + payloadLength;
|
|
196
|
+
if (this.buffer.length - offset < totalLength) {
|
|
118
197
|
// Incomplete frame, wait for more data
|
|
119
|
-
|
|
120
|
-
}
|
|
121
|
-
const maskKey = this.buffer.subarray(offset, offset + 4);
|
|
122
|
-
offset += 4;
|
|
123
|
-
const payloadData = this.buffer.subarray(offset, offset + payloadLength);
|
|
124
|
-
const unmaskedPayload = Buffer.alloc(payloadLength);
|
|
125
|
-
for (let i = 0; i < payloadLength; i++) {
|
|
126
|
-
unmaskedPayload[i] = payloadData[i] ^ maskKey[i % 4];
|
|
198
|
+
break;
|
|
127
199
|
}
|
|
128
|
-
|
|
200
|
+
const maskKey = this.buffer.subarray(offset + headerSize, offset + headerSize + 4);
|
|
201
|
+
const payloadData = this.buffer.subarray(offset + headerSize + 4, offset + totalLength);
|
|
202
|
+
const unmaskedPayload = fastUnmask(payloadData, maskKey);
|
|
203
|
+
offset += totalLength;
|
|
129
204
|
// Handle Control Frames (Ping: 0x9, Pong: 0xA, Close: 0x8)
|
|
130
205
|
if (opcode === 0x8) {
|
|
131
206
|
// Close frame
|
|
132
207
|
this.close();
|
|
133
208
|
this.emit('close');
|
|
134
|
-
|
|
209
|
+
break;
|
|
135
210
|
}
|
|
136
211
|
else if (opcode === 0x9) {
|
|
137
212
|
// Ping -> respond with Pong
|
|
@@ -177,6 +252,14 @@ export class AeroWebSocket extends EventEmitter {
|
|
|
177
252
|
}
|
|
178
253
|
}
|
|
179
254
|
}
|
|
255
|
+
if (offset > 0) {
|
|
256
|
+
if (offset >= this.buffer.length) {
|
|
257
|
+
this.buffer = Buffer.alloc(0);
|
|
258
|
+
}
|
|
259
|
+
else {
|
|
260
|
+
this.buffer = this.buffer.subarray(offset);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
180
263
|
}
|
|
181
264
|
}
|
|
182
265
|
/**
|
package/dist/ws/websocket.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket.js","sourceRoot":"","sources":["../../src/ws/websocket.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,MAAM,MAAM,aAAa,CAAC;AAGjC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,OAAO,GAAG,sCAAsC,CAAC;AAUvD;;GAEG;AACH,MAAM,OAAO,aAAc,SAAQ,YAAY;IACtC,MAAM,CAAS;IACf,QAAQ,GAAG,KAAK,CAAC;IACR,UAAU,CAAS;IAC3B,MAAM,GAAW,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACjC,gBAAgB,GAAa,EAAE,CAAC;IAChC,aAAa,GAAkB,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"websocket.js","sourceRoot":"","sources":["../../src/ws/websocket.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,MAAM,MAAM,aAAa,CAAC;AAGjC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,OAAO,GAAG,sCAAsC,CAAC;AAUvD;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,OAAe,EAAE,OAAe;IACzD,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;IAC3B,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC;QACd,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IACtC,MAAM,SAAS,GAAG,GAAG,GAAG,CAAC,CAAC;IAC1B,MAAM,SAAS,GAAG,GAAG,GAAG,SAAS,CAAC;IAElC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACtC,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED,KAAK,IAAI,CAAC,GAAG,SAAS,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,QAAQ,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAE,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC;IAC9C,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,MAAM,OAAO,aAAc,SAAQ,YAAY;IACtC,MAAM,CAAS;IACf,QAAQ,GAAG,KAAK,CAAC;IACR,UAAU,CAAS;IAC3B,MAAM,GAAW,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACjC,gBAAgB,GAAa,EAAE,CAAC;IAChC,aAAa,GAAkB,IAAI,CAAC;IAEpC,YAAY,CAA0B;IACtC,aAAa,CAAa;IAC1B,aAAa,CAAuB;IACpC,WAAW,CAAa;IAEhC,YAAY,MAAc,EAAE,UAA4B,EAAE;QACxD,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,cAAc;QAEvE,IAAI,CAAC,YAAY,GAAG,CAAC,KAAa,EAAE,EAAE;YACpC,IAAI,IAAI,CAAC,QAAQ;gBAAE,OAAO;YAC1B,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC7B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;YACtB,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;YACpD,CAAC;YACD,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;gBACzC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC;gBACtC,OAAO;YACT,CAAC;YACD,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,CAAC,CAAC;QAEF,IAAI,CAAC,aAAa,GAAG,GAAG,EAAE;YACxB,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACrB,CAAC,CAAC;QAEF,IAAI,CAAC,aAAa,GAAG,CAAC,GAAU,EAAE,EAAE;YAClC,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAC1B,CAAC,CAAC;QAEF,IAAI,CAAC,WAAW,GAAG,GAAG,EAAE;YACtB,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACrB,CAAC,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAC1C,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAC1C,CAAC;IAED;;OAEG;IACI,OAAO;QACZ,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC1B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QAErB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC9B,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;QAC3B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAE1B,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;YACtD,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;YACxD,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;YACxD,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IAED;;OAEG;IACI,OAAO,CAAC,KAAa;QAC1B,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YAC1C,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;QACD,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED;;OAEG;IACI,IAAI,CAAC,IAAqB;QAC/B,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC1B,MAAM,IAAI,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC5E,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAE9B,IAAI,MAAc,CAAC;QACnB,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC;YAClB,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;QACvC,CAAC;aAAM,IAAI,MAAM,IAAI,KAAK,EAAE,CAAC;YAC3B,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;YACjB,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;YAChB,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAClC,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YAChC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;YACjB,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;YAChB,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7C,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACtD,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,IAAI,GAAG,IAAI,EAAE,MAAM,GAAG,EAAE;QACnC,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAE1B,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAC/C,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;YACzD,OAAO,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YAC/B,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YAE3B,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;YACnD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;YACpD,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;QACpB,CAAC;QAAC,MAAM,CAAC;YACP,wCAAwC;QAC1C,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,CAAC;IACH,CAAC;IAED;;;OAGG;IACK,WAAW;QACjB,IAAI,MAAM,GAAG,CAAC,CAAC;QAEf,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC;YACxC,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAE,CAAC;YACvC,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC;YAE5C,MAAM,KAAK,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC;YAC1C,MAAM,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;YAChC,MAAM,QAAQ,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC;YAE9C,gEAAgE;YAChE,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,6CAA6C,CAAC,CAAC;gBAChE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC,CAAC;gBAChF,OAAO;YACT,CAAC;YAED,IAAI,aAAa,GAAG,UAAU,GAAG,IAAI,CAAC;YACtC,IAAI,UAAU,GAAG,CAAC,CAAC;YAEnB,IAAI,aAAa,KAAK,GAAG,EAAE,CAAC;gBAC1B,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,GAAG,CAAC;oBAAE,MAAM;gBAC3C,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBACrD,UAAU,GAAG,CAAC,CAAC;YACjB,CAAC;iBAAM,IAAI,aAAa,KAAK,GAAG,EAAE,CAAC;gBACjC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,GAAG,EAAE;oBAAE,MAAM;gBAC5C,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;gBAChE,UAAU,GAAG,EAAE,CAAC;YAClB,CAAC;YAED,IAAI,aAAa,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;gBACpC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,+BAA+B,CAAC,CAAC;gBAClD,OAAO;YACT,CAAC;YAED,MAAM,UAAU,GAAG,CAAC,CAAC;YACrB,MAAM,WAAW,GAAG,UAAU,GAAG,UAAU,GAAG,aAAa,CAAC;YAE5D,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,GAAG,WAAW,EAAE,CAAC;gBAC9C,uCAAuC;gBACvC,MAAM;YACR,CAAC;YAED,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,UAAU,EAAE,MAAM,GAAG,UAAU,GAAG,CAAC,CAAC,CAAC;YACnF,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,UAAU,GAAG,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC,CAAC;YACxF,MAAM,eAAe,GAAG,UAAU,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YAEzD,MAAM,IAAI,WAAW,CAAC;YAEtB,2DAA2D;YAC3D,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;gBACnB,cAAc;gBACd,IAAI,CAAC,KAAK,EAAE,CAAC;gBACb,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACnB,MAAM;YACR,CAAC;iBAAM,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;gBAC1B,4BAA4B;gBAC5B,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;gBAC7C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;gBAC9B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAClB,SAAS;YACX,CAAC;iBAAM,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;gBAC1B,OAAO;gBACP,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAClB,SAAS;YACX,CAAC;YAED,iEAAiE;YACjE,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;gBACrC,IAAI,CAAC,KAAK,EAAE,CAAC;oBACX,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC;oBAC5B,IAAI,CAAC,gBAAgB,GAAG,CAAC,eAAe,CAAC,CAAC;gBAC5C,CAAC;qBAAM,CAAC;oBACN,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;wBACnB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;oBAC1D,CAAC;yBAAM,CAAC;wBACN,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;oBACxC,CAAC;gBACH,CAAC;YACH,CAAC;iBAAM,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;gBAC1B,qBAAqB;gBACrB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;gBAC5C,IAAI,KAAK,EAAE,CAAC;oBACV,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;oBACxD,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,IAAI,GAAG,CAAC;oBAC9C,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;oBAC3B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;oBAE1B,IAAI,WAAW,KAAK,GAAG,EAAE,CAAC;wBACxB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;oBACrD,CAAC;yBAAM,CAAC;wBACN,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;oBACnC,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;YACf,IAAI,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;gBACjC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAChC,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;IACH,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CACpC,GAAoB,EACpB,MAAc,EACd,IAAY;IAEZ,MAAM,eAAe,GAAG,GAAG,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACzD,MAAM,aAAa,GAAG,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAE7C,IACE,CAAC,aAAa;QACd,aAAa,CAAC,WAAW,EAAE,KAAK,WAAW;QAC3C,CAAC,eAAe;QAChB,OAAO,eAAe,KAAK,QAAQ,EACnC,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;QACjD,MAAM,CAAC,OAAO,EAAE,CAAC;QACjB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,IAAI,GAAG,MAAM;SAChB,UAAU,CAAC,MAAM,CAAC;SAClB,MAAM,CAAC,eAAe,GAAG,OAAO,CAAC;SACjC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAEpB,MAAM,OAAO,GAAG;QACd,kCAAkC;QAClC,oBAAoB;QACpB,qBAAqB;QACrB,yBAAyB,IAAI,EAAE;QAC/B,MAAM;KACP,CAAC;IAEF,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAEnC,MAAM,EAAE,GAAG,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC;IACrC,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC5B,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@shohaghinfo/aerojs",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.3",
|
|
4
4
|
"description": "A minimal, blazing-fast, zero-dependency full-stack web framework for Node.js — supporting React, Vue 3, Inertia.js, and SSR monoliths.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|