@asenajs/ergenecore 3.2.1 → 5.0.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.
Files changed (31) hide show
  1. package/README.md +12 -5
  2. package/dist/lib/Ergenecore.d.ts +12 -1
  3. package/dist/lib/Ergenecore.js +320 -173
  4. package/dist/lib/Ergenecore.js.map +1 -1
  5. package/dist/lib/ErgenecoreContextWrapper.d.ts +45 -12
  6. package/dist/lib/ErgenecoreContextWrapper.js +200 -54
  7. package/dist/lib/ErgenecoreContextWrapper.js.map +1 -1
  8. package/dist/lib/defaults/index.d.ts +1 -0
  9. package/dist/lib/defaults/index.js +1 -0
  10. package/dist/lib/defaults/index.js.map +1 -1
  11. package/dist/lib/defineContext.d.ts +8 -0
  12. package/dist/lib/defineContext.js +10 -0
  13. package/dist/lib/defineContext.js.map +1 -0
  14. package/dist/lib/index.d.ts +8 -1
  15. package/dist/lib/index.js +3 -0
  16. package/dist/lib/index.js.map +1 -1
  17. package/dist/lib/middlewares/CorsMiddleware.d.ts +2 -2
  18. package/dist/lib/middlewares/CorsMiddleware.js +5 -9
  19. package/dist/lib/middlewares/CorsMiddleware.js.map +1 -1
  20. package/dist/lib/middlewares/RateLimiterMiddleware.d.ts +73 -3
  21. package/dist/lib/middlewares/RateLimiterMiddleware.js +95 -7
  22. package/dist/lib/middlewares/RateLimiterMiddleware.js.map +1 -1
  23. package/dist/lib/middlewares/WebSocketOriginMiddleware.d.ts +82 -0
  24. package/dist/lib/middlewares/WebSocketOriginMiddleware.js +81 -0
  25. package/dist/lib/middlewares/WebSocketOriginMiddleware.js.map +1 -0
  26. package/dist/lib/stream/SSEStreamWriter.js +22 -13
  27. package/dist/lib/stream/SSEStreamWriter.js.map +1 -1
  28. package/dist/lib/utils/staticFileReader.d.ts +27 -0
  29. package/dist/lib/utils/staticFileReader.js +172 -0
  30. package/dist/lib/utils/staticFileReader.js.map +1 -0
  31. package/package.json +11 -7
@@ -0,0 +1,172 @@
1
+ import { closeSync, fstatSync, openSync, readSync, statSync } from 'fs';
2
+ const IS_WINDOWS = process.platform === 'win32';
3
+ export function staticFileHeaders(type, etag, lastModified) {
4
+ const headers = new Headers();
5
+ headers.set('Content-Type', type);
6
+ headers.set('ETag', etag);
7
+ headers.set('Last-Modified', lastModified);
8
+ return headers;
9
+ }
10
+ function defaultStaticHeaders(type, etag, lastModified) {
11
+ const headers = new Headers();
12
+ headers.set('Content-Type', type);
13
+ headers.set('ETag', etag);
14
+ headers.set('Last-Modified', lastModified);
15
+ headers.set('Cache-Control', 'public, max-age=0');
16
+ return headers;
17
+ }
18
+ export function regularFileStats(filePath) {
19
+ try {
20
+ const stats = statSync(filePath);
21
+ return stats.isFile() ? stats : undefined;
22
+ }
23
+ catch {
24
+ return undefined;
25
+ }
26
+ }
27
+ function closeQuietly(fd) {
28
+ try {
29
+ closeSync(fd);
30
+ }
31
+ catch {
32
+ return;
33
+ }
34
+ }
35
+ /**
36
+ * Reads small regular files from disk on every call through a bounded set of open descriptors.
37
+ * Nothing but the descriptor and derived metadata outlives a call; the bytes are always fresh.
38
+ */
39
+ export class StaticFileReader {
40
+ maxFileBytes;
41
+ maxOpen;
42
+ files = new Map();
43
+ constructor(maxFileBytes = 64 * 1024, maxOpen = 64) {
44
+ this.maxFileBytes = maxFileBytes;
45
+ this.maxOpen = maxOpen;
46
+ }
47
+ read(filePath, stats, withBody) {
48
+ const entry = IS_WINDOWS ? undefined : this.entry(filePath, stats);
49
+ if (entry === undefined) {
50
+ const lastModifiedMs = Math.trunc(stats.mtimeMs);
51
+ return {
52
+ bytes: undefined,
53
+ type: Bun.file(filePath).type,
54
+ etag: `W/"${stats.size}-${lastModifiedMs}"`,
55
+ lastModified: new Date(lastModifiedMs).toUTCString(),
56
+ };
57
+ }
58
+ this.refresh(entry, stats);
59
+ return {
60
+ bytes: withBody ? this.readBytes(filePath, entry, stats.size) : undefined,
61
+ type: entry.type,
62
+ etag: entry.etag,
63
+ lastModified: entry.lastModified,
64
+ };
65
+ }
66
+ respond(filePath, stats, withBody) {
67
+ const entry = IS_WINDOWS ? undefined : this.entry(filePath, stats);
68
+ if (entry === undefined) {
69
+ const lastModifiedMs = Math.trunc(stats.mtimeMs);
70
+ const file = Bun.file(filePath);
71
+ return new Response(file, {
72
+ status: 200,
73
+ headers: defaultStaticHeaders(file.type, `W/"${stats.size}-${lastModifiedMs}"`, new Date(lastModifiedMs).toUTCString()),
74
+ });
75
+ }
76
+ this.refresh(entry, stats);
77
+ const headers = (entry.headers ??= defaultStaticHeaders(entry.type, entry.etag, entry.lastModified));
78
+ const bytes = withBody ? this.readBytes(filePath, entry, stats.size) : undefined;
79
+ return new Response(bytes ?? Bun.file(filePath), { status: 200, headers });
80
+ }
81
+ refresh(entry, stats) {
82
+ const lastModifiedMs = Math.trunc(stats.mtimeMs);
83
+ if (entry.mtimeMs === lastModifiedMs && entry.size === stats.size) {
84
+ return;
85
+ }
86
+ if (entry.mtimeMs !== lastModifiedMs) {
87
+ entry.mtimeMs = lastModifiedMs;
88
+ entry.lastModified = new Date(lastModifiedMs).toUTCString();
89
+ }
90
+ entry.size = stats.size;
91
+ entry.etag = `W/"${stats.size}-${lastModifiedMs}"`;
92
+ entry.headers = undefined;
93
+ }
94
+ release(filePath) {
95
+ const entry = this.files.get(filePath);
96
+ if (entry !== undefined) {
97
+ this.forget(filePath, entry);
98
+ }
99
+ }
100
+ close() {
101
+ for (const entry of this.files.values()) {
102
+ closeQuietly(entry.fd);
103
+ }
104
+ this.files.clear();
105
+ }
106
+ readBytes(filePath, entry, size) {
107
+ if (size > this.maxFileBytes) {
108
+ return undefined;
109
+ }
110
+ const bytes = Buffer.allocUnsafeSlow(size);
111
+ try {
112
+ return readSync(entry.fd, bytes, 0, size, 0) === size ? bytes : undefined;
113
+ }
114
+ catch {
115
+ this.forget(filePath, entry);
116
+ return undefined;
117
+ }
118
+ }
119
+ entry(filePath, stats) {
120
+ const existing = this.files.get(filePath);
121
+ if (existing !== undefined) {
122
+ if (existing.ino === stats.ino && existing.dev === stats.dev) {
123
+ return existing;
124
+ }
125
+ this.forget(filePath, existing);
126
+ }
127
+ if (stats.size > this.maxFileBytes) {
128
+ return undefined;
129
+ }
130
+ let fd;
131
+ try {
132
+ fd = openSync(filePath, 'r');
133
+ }
134
+ catch {
135
+ return undefined;
136
+ }
137
+ let opened;
138
+ try {
139
+ opened = fstatSync(fd);
140
+ }
141
+ catch {
142
+ closeQuietly(fd);
143
+ return undefined;
144
+ }
145
+ if (opened.ino !== stats.ino || opened.dev !== stats.dev || !opened.isFile()) {
146
+ closeQuietly(fd);
147
+ return undefined;
148
+ }
149
+ while (this.files.size >= this.maxOpen) {
150
+ const [oldestPath, oldest] = this.files.entries().next().value;
151
+ this.forget(oldestPath, oldest);
152
+ }
153
+ const entry = {
154
+ fd,
155
+ ino: stats.ino,
156
+ dev: stats.dev,
157
+ type: Bun.file(filePath).type,
158
+ mtimeMs: -1,
159
+ size: -1,
160
+ etag: '',
161
+ lastModified: '',
162
+ headers: undefined,
163
+ };
164
+ this.files.set(filePath, entry);
165
+ return entry;
166
+ }
167
+ forget(filePath, entry) {
168
+ this.files.delete(filePath);
169
+ closeQuietly(entry.fd);
170
+ }
171
+ }
172
+ //# sourceMappingURL=staticFileReader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"staticFileReader.js","sourceRoot":"","sources":["../../../lib/utils/staticFileReader.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -9,11 +9,15 @@
9
9
  "README.md",
10
10
  "LICENSE"
11
11
  ],
12
- "version": "3.2.1",
12
+ "version": "5.0.0",
13
13
  "author": "LibirSoft",
14
14
  "license": "MIT",
15
+ "repository": {
16
+ "type": "git",
17
+ "url": "git+https://github.com/AsenaJs/ergenecore.git"
18
+ },
15
19
  "engines": {
16
- "bun": ">=1.3.12"
20
+ "bun": ">=1.4.0"
17
21
  },
18
22
  "scripts": {
19
23
  "test": "bun test",
@@ -37,11 +41,11 @@
37
41
  "release": "bun run build && changeset publish"
38
42
  },
39
43
  "devDependencies": {
40
- "@asenajs/asena": "^0.10.1",
44
+ "@asenajs/asena": "^0.12.0",
41
45
  "@changesets/cli": "^2.31.1",
42
46
  "@types/bun": "latest",
43
- "@typescript-eslint/eslint-plugin": "^8.67.0",
44
- "@typescript-eslint/parser": "^8.67.0",
47
+ "@typescript-eslint/eslint-plugin": "^8.68.0",
48
+ "@typescript-eslint/parser": "^8.68.0",
45
49
  "eslint": "^9.39.5",
46
50
  "eslint-config-alloy": "^5.1.2",
47
51
  "eslint-config-prettier": "^9.1.2",
@@ -52,11 +56,11 @@
52
56
  "eslint-plugin-promise": "^6.6.0",
53
57
  "prettier": "^3.9.6",
54
58
  "typescript": "^5.9.3",
55
- "typescript-eslint": "^8.67.0",
59
+ "typescript-eslint": "^8.68.0",
56
60
  "zod": "^4.4.3"
57
61
  },
58
62
  "peerDependencies": {
59
- "@asenajs/asena": "^0.10.1",
63
+ "@asenajs/asena": "^0.12.0",
60
64
  "typescript": "^5.9.3",
61
65
  "zod": "^4.3.6"
62
66
  }