i18next-http-middleware 3.8.2 → 3.9.1

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 CHANGED
@@ -238,6 +238,35 @@ app.get('/', async (req) => {
238
238
  await app.listen({ port })
239
239
  ```
240
240
 
241
+ #### Fresh 2.x
242
+
243
+ ```js
244
+ import i18next from 'https://deno.land/x/i18next/index.js'
245
+ import i18nextMiddleware from 'https://deno.land/x/i18next_http_middleware/index.js'
246
+ import { App, createDefine } from "jsr:@fresh/core";
247
+
248
+ i18next
249
+ .use(i18nextMiddleware.LanguageDetector)
250
+ .init({
251
+ preload: ["en", "fr"],
252
+ fallbackLng: "en",
253
+ resources: {
254
+ en: {
255
+ translation: { hi: "hello" }
256
+ },
257
+ fr: {
258
+ translation: { hi: "bonjour" }
259
+ }
260
+ }
261
+ });
262
+
263
+ const app = new App()
264
+ .use(i18nextMiddleware.freshPlugin(i18next))
265
+ .get("/", (ctx) => {
266
+ return new Response(ctx.state.t('hi'))
267
+ });
268
+ ```
269
+
241
270
  ## add routes
242
271
 
243
272
  ```js
@@ -39,6 +39,11 @@ var getQuery = exports.getQuery = function getQuery(req) {
39
39
  if (req.url && req.url.searchParams) return req.url.searchParams;
40
40
  var url = req.url || req.raw && req.raw.url;
41
41
  if (url && url.indexOf('?') < 0) return {};
42
+ if (typeof URL !== 'undefined') {
43
+ try {
44
+ return Object.fromEntries(new URL(url).searchParams.entries());
45
+ } catch (_unused) {}
46
+ }
42
47
  console.log('no possibility found to get query');
43
48
  return {};
44
49
  };
@@ -50,8 +55,14 @@ var getParams = exports.getParams = function getParams(req) {
50
55
  return {};
51
56
  };
52
57
  var getHeaders = exports.getHeaders = function getHeaders(req) {
53
- if (req.headers) return req.headers;
54
- console.log('no possibility found to get headers');
58
+ if (!req.headers) {
59
+ console.log('no possibility found to get headers');
60
+ return;
61
+ }
62
+ if (typeof Headers !== 'undefined' && req.headers.constructor === Headers) {
63
+ return Object.fromEntries(req.headers.entries());
64
+ }
65
+ return req.headers;
55
66
  };
56
67
  var getCookies = exports.getCookies = function getCookies(req) {
57
68
  if (req.cookies) return req.cookies;
@@ -113,6 +124,12 @@ var setStatus = exports.setStatus = function setStatus(res, code) {
113
124
  var send = exports.send = function send(res, body) {
114
125
  if (typeof res.send === 'function') return res.send(body);
115
126
  if (res.request && res.response && res.app) res.body = body;
127
+ if (typeof Response !== 'undefined' && res.constructor === Response) {
128
+ return new Response(body, {
129
+ status: res.status,
130
+ headers: res.headers
131
+ });
132
+ }
116
133
  return body;
117
134
  };
118
135
  var getSession = exports.getSession = function getSession(req) {
package/cjs/index.d.ts CHANGED
@@ -76,6 +76,8 @@ export function handle(i18next: I18next, options?: HandleOptions): Handler;
76
76
 
77
77
  export function koaPlugin(i18next: I18next, options?: HandleOptions): (context: unknown, next: Function) => any;
78
78
 
79
+ export function freshPlugin(i18next:I18next, options?: HandleOptions): Promise<any>;
80
+
79
81
  export function plugin(
80
82
  instance: any,
81
83
  options: HandleOptions & { i18next?: I18next },
package/cjs/index.js CHANGED
@@ -7,6 +7,7 @@ Object.defineProperty(exports, "__esModule", {
7
7
  exports.LanguageDetector = void 0;
8
8
  exports.addRoute = addRoute;
9
9
  exports.default = void 0;
10
+ exports.freshPlugin = freshPlugin;
10
11
  exports.getResourcesHandler = getResourcesHandler;
11
12
  exports.handle = handle;
12
13
  exports.hapiPlugin = void 0;
@@ -38,6 +39,15 @@ var checkForCombinedReqRes = function checkForCombinedReqRes(req, res, next) {
38
39
  } else if (req.respond) {
39
40
  res = req;
40
41
  if (!next) next = function next() {};
42
+ } else if (typeof Request !== 'undefined' && typeof Response !== 'undefined' && req.req && req.req.constructor === Request) {
43
+ if (req.state) {
44
+ req.state.res = req.state.res || new Response();
45
+ res = req.state.res;
46
+ } else {
47
+ res = new Response();
48
+ }
49
+ req = req.req;
50
+ if (!next) next = function next() {};
41
51
  }
42
52
  } else if (!next && typeof res === 'function' && req.req && req.res) {
43
53
  return {
@@ -161,6 +171,41 @@ function koaPlugin(i18next, options) {
161
171
  return koaMiddleware;
162
172
  }();
163
173
  }
174
+ function freshPlugin(i18next, options) {
175
+ return function () {
176
+ var _ref = _asyncToGenerator(_regeneratorRuntime().mark(function _callee2(ctx) {
177
+ var placeholder, resp;
178
+ return _regeneratorRuntime().wrap(function _callee2$(_context2) {
179
+ while (1) switch (_context2.prev = _context2.next) {
180
+ case 0:
181
+ handle(i18next, _objectSpread(_objectSpread({}, options), {}, {
182
+ attachLocals: true
183
+ }))(ctx);
184
+ ctx.state.t = ctx.req.t;
185
+ ctx.state.i18n = ctx.req.i18n;
186
+ ctx.state.lng = ctx.req.lng;
187
+ ctx.state.locale = ctx.req.locale;
188
+ ctx.state.language = ctx.req.language;
189
+ ctx.state.languages = ctx.req.languages;
190
+ placeholder = ctx.state.res;
191
+ delete ctx.state.res;
192
+ _context2.next = 11;
193
+ return ctx.next();
194
+ case 11:
195
+ resp = _context2.sent;
196
+ resp.headers.set('Content-Language', placeholder.headers.get('Content-Language'));
197
+ return _context2.abrupt("return", resp);
198
+ case 14:
199
+ case "end":
200
+ return _context2.stop();
201
+ }
202
+ }, _callee2);
203
+ }));
204
+ return function (_x3) {
205
+ return _ref.apply(this, arguments);
206
+ };
207
+ }();
208
+ }
164
209
  var hapiPlugin = exports.hapiPlugin = {
165
210
  name: 'i18next-http-middleware',
166
211
  version: '1',
@@ -215,6 +260,9 @@ function getResourcesHandler(i18next) {
215
260
  });
216
261
  });
217
262
  });
263
+ if (typeof Response !== 'undefined' && res.constructor === Response && typeof JSON !== 'undefined') {
264
+ return options.send(res, JSON.stringify(resources));
265
+ }
218
266
  return options.send(res, resources);
219
267
  };
220
268
  }
@@ -280,6 +328,7 @@ var _default = exports.default = {
280
328
  plugin: plugin,
281
329
  hapiPlugin: hapiPlugin,
282
330
  koaPlugin: koaPlugin,
331
+ freshPlugin: freshPlugin,
283
332
  handle: handle,
284
333
  getResourcesHandler: getResourcesHandler,
285
334
  missingKeyHandler: missingKeyHandler,
@@ -33,6 +33,11 @@ export var getQuery = function getQuery(req) {
33
33
  if (req.url && req.url.searchParams) return req.url.searchParams;
34
34
  var url = req.url || req.raw && req.raw.url;
35
35
  if (url && url.indexOf('?') < 0) return {};
36
+ if (typeof URL !== 'undefined') {
37
+ try {
38
+ return Object.fromEntries(new URL(url).searchParams.entries());
39
+ } catch (_unused) {}
40
+ }
36
41
  console.log('no possibility found to get query');
37
42
  return {};
38
43
  };
@@ -44,8 +49,14 @@ export var getParams = function getParams(req) {
44
49
  return {};
45
50
  };
46
51
  export var getHeaders = function getHeaders(req) {
47
- if (req.headers) return req.headers;
48
- console.log('no possibility found to get headers');
52
+ if (!req.headers) {
53
+ console.log('no possibility found to get headers');
54
+ return;
55
+ }
56
+ if (typeof Headers !== 'undefined' && req.headers.constructor === Headers) {
57
+ return Object.fromEntries(req.headers.entries());
58
+ }
59
+ return req.headers;
49
60
  };
50
61
  export var getCookies = function getCookies(req) {
51
62
  if (req.cookies) return req.cookies;
@@ -107,6 +118,12 @@ export var setStatus = function setStatus(res, code) {
107
118
  export var send = function send(res, body) {
108
119
  if (typeof res.send === 'function') return res.send(body);
109
120
  if (res.request && res.response && res.app) res.body = body;
121
+ if (typeof Response !== 'undefined' && res.constructor === Response) {
122
+ return new Response(body, {
123
+ status: res.status,
124
+ headers: res.headers
125
+ });
126
+ }
110
127
  return body;
111
128
  };
112
129
  export var getSession = function getSession(req) {
package/esm/index.d.ts CHANGED
@@ -76,6 +76,8 @@ export function handle(i18next: I18next, options?: HandleOptions): Handler;
76
76
 
77
77
  export function koaPlugin(i18next: I18next, options?: HandleOptions): (context: unknown, next: Function) => any;
78
78
 
79
+ export function freshPlugin(i18next:I18next, options?: HandleOptions): Promise<any>;
80
+
79
81
  export function plugin(
80
82
  instance: any,
81
83
  options: HandleOptions & { i18next?: I18next },
package/esm/index.js CHANGED
@@ -21,6 +21,15 @@ var checkForCombinedReqRes = function checkForCombinedReqRes(req, res, next) {
21
21
  } else if (req.respond) {
22
22
  res = req;
23
23
  if (!next) next = function next() {};
24
+ } else if (typeof Request !== 'undefined' && typeof Response !== 'undefined' && req.req && req.req.constructor === Request) {
25
+ if (req.state) {
26
+ req.state.res = req.state.res || new Response();
27
+ res = req.state.res;
28
+ } else {
29
+ res = new Response();
30
+ }
31
+ req = req.req;
32
+ if (!next) next = function next() {};
24
33
  }
25
34
  } else if (!next && typeof res === 'function' && req.req && req.res) {
26
35
  return {
@@ -144,6 +153,41 @@ export function koaPlugin(i18next, options) {
144
153
  return koaMiddleware;
145
154
  }();
146
155
  }
156
+ export function freshPlugin(i18next, options) {
157
+ return function () {
158
+ var _ref = _asyncToGenerator(_regeneratorRuntime().mark(function _callee2(ctx) {
159
+ var placeholder, resp;
160
+ return _regeneratorRuntime().wrap(function _callee2$(_context2) {
161
+ while (1) switch (_context2.prev = _context2.next) {
162
+ case 0:
163
+ handle(i18next, _objectSpread(_objectSpread({}, options), {}, {
164
+ attachLocals: true
165
+ }))(ctx);
166
+ ctx.state.t = ctx.req.t;
167
+ ctx.state.i18n = ctx.req.i18n;
168
+ ctx.state.lng = ctx.req.lng;
169
+ ctx.state.locale = ctx.req.locale;
170
+ ctx.state.language = ctx.req.language;
171
+ ctx.state.languages = ctx.req.languages;
172
+ placeholder = ctx.state.res;
173
+ delete ctx.state.res;
174
+ _context2.next = 11;
175
+ return ctx.next();
176
+ case 11:
177
+ resp = _context2.sent;
178
+ resp.headers.set('Content-Language', placeholder.headers.get('Content-Language'));
179
+ return _context2.abrupt("return", resp);
180
+ case 14:
181
+ case "end":
182
+ return _context2.stop();
183
+ }
184
+ }, _callee2);
185
+ }));
186
+ return function (_x3) {
187
+ return _ref.apply(this, arguments);
188
+ };
189
+ }();
190
+ }
147
191
  export var hapiPlugin = {
148
192
  name: 'i18next-http-middleware',
149
193
  version: '1',
@@ -198,6 +242,9 @@ export function getResourcesHandler(i18next) {
198
242
  });
199
243
  });
200
244
  });
245
+ if (typeof Response !== 'undefined' && res.constructor === Response && typeof JSON !== 'undefined') {
246
+ return options.send(res, JSON.stringify(resources));
247
+ }
201
248
  return options.send(res, resources);
202
249
  };
203
250
  }
@@ -263,6 +310,7 @@ export default {
263
310
  plugin: plugin,
264
311
  hapiPlugin: hapiPlugin,
265
312
  koaPlugin: koaPlugin,
313
+ freshPlugin: freshPlugin,
266
314
  handle: handle,
267
315
  getResourcesHandler: getResourcesHandler,
268
316
  missingKeyHandler: missingKeyHandler,
package/index.d.ts CHANGED
@@ -76,6 +76,8 @@ export function handle(i18next: I18next, options?: HandleOptions): Handler;
76
76
 
77
77
  export function koaPlugin(i18next: I18next, options?: HandleOptions): (context: unknown, next: Function) => any;
78
78
 
79
+ export function freshPlugin(i18next:I18next, options?: HandleOptions): Promise<any>;
80
+
79
81
  export function plugin(
80
82
  instance: any,
81
83
  options: HandleOptions & { i18next?: I18next },
@@ -38,6 +38,11 @@ export const getQuery = (req) => {
38
38
  if (req.url && req.url.searchParams) return req.url.searchParams
39
39
  const url = req.url || (req.raw && req.raw.url)
40
40
  if (url && url.indexOf('?') < 0) return {}
41
+ if (typeof URL !== 'undefined') {
42
+ try {
43
+ return Object.fromEntries(new URL(url).searchParams.entries())
44
+ } catch { }
45
+ }
41
46
  console.log('no possibility found to get query')
42
47
  return {}
43
48
  }
@@ -49,8 +54,14 @@ export const getParams = (req) => {
49
54
  return {}
50
55
  }
51
56
  export const getHeaders = (req) => {
52
- if (req.headers) return req.headers
53
- console.log('no possibility found to get headers')
57
+ if (!req.headers) {
58
+ console.log('no possibility found to get headers')
59
+ return
60
+ }
61
+ if (typeof Headers !== 'undefined' && req.headers.constructor === Headers) {
62
+ return Object.fromEntries(req.headers.entries())
63
+ }
64
+ return req.headers
54
65
  }
55
66
  export const getCookies = (req) => {
56
67
  if (req.cookies) return req.cookies
@@ -114,6 +125,12 @@ export const setStatus = (res, code) => {
114
125
  export const send = (res, body) => {
115
126
  if (typeof res.send === 'function') return res.send(body)
116
127
  if (res.request && res.response && res.app) res.body = body
128
+ if (typeof Response !== 'undefined' && res.constructor === Response) {
129
+ return new Response(body, {
130
+ status: res.status,
131
+ headers: res.headers
132
+ })
133
+ }
117
134
  return body
118
135
  }
119
136
  export const getSession = (req) => {
package/lib/index.js CHANGED
@@ -14,6 +14,19 @@ const checkForCombinedReqRes = (req, res, next) => {
14
14
  } else if (req.respond) {
15
15
  res = req
16
16
  if (!next) next = () => {}
17
+ } else if (typeof Request !== 'undefined' &&
18
+ typeof Response !== 'undefined' &&
19
+ req.req &&
20
+ req.req.constructor === Request
21
+ ) {
22
+ if (req.state) {
23
+ req.state.res = req.state.res || new Response()
24
+ res = req.state.res
25
+ } else {
26
+ res = new Response()
27
+ }
28
+ req = req.req
29
+ if (!next) next = () => {}
17
30
  }
18
31
  } else if (!next && typeof res === 'function' && req.req && req.res) {
19
32
  return {
@@ -137,6 +150,23 @@ export function koaPlugin (i18next, options) {
137
150
  }
138
151
  }
139
152
 
153
+ export function freshPlugin (i18next, options) {
154
+ return async (ctx) => {
155
+ handle(i18next, { ...options, attachLocals: true })(ctx)
156
+ ctx.state.t = ctx.req.t
157
+ ctx.state.i18n = ctx.req.i18n
158
+ ctx.state.lng = ctx.req.lng
159
+ ctx.state.locale = ctx.req.locale
160
+ ctx.state.language = ctx.req.language
161
+ ctx.state.languages = ctx.req.languages
162
+ const placeholder = ctx.state.res
163
+ delete ctx.state.res
164
+ const resp = await ctx.next()
165
+ resp.headers.set('Content-Language', placeholder.headers.get('Content-Language'))
166
+ return resp
167
+ }
168
+ }
169
+
140
170
  export const hapiPlugin = {
141
171
  name: 'i18next-http-middleware',
142
172
  version: '1',
@@ -232,6 +262,11 @@ export function getResourcesHandler (i18next, options = {}) {
232
262
  })
233
263
  })
234
264
 
265
+ if (typeof Response !== 'undefined' &&
266
+ res.constructor === Response &&
267
+ typeof JSON !== 'undefined') {
268
+ return options.send(res, JSON.stringify(resources))
269
+ }
235
270
  return options.send(res, resources)
236
271
  }
237
272
  }
@@ -311,6 +346,7 @@ export default {
311
346
  plugin,
312
347
  hapiPlugin,
313
348
  koaPlugin,
349
+ freshPlugin,
314
350
  handle,
315
351
  getResourcesHandler,
316
352
  missingKeyHandler,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "i18next-http-middleware",
3
- "version": "3.8.2",
3
+ "version": "3.9.1",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "main": "./cjs/index.js",
@@ -32,6 +32,8 @@
32
32
  "@babel/core": "7.26.0",
33
33
  "@babel/preset-env": "7.26.0",
34
34
  "@hapi/hapi": "^21.3.12",
35
+ "@opentelemetry/api": "^1.9.0",
36
+ "@preact/signals": "^2.2.1",
35
37
  "@types/express-serve-static-core": "^5.0.1",
36
38
  "@koa/router": "12.0.1",
37
39
  "koa": "2.16.1",
@@ -48,6 +50,8 @@
48
50
  "fastify": "5.3.2",
49
51
  "i18next": "25.5.2",
50
52
  "mocha": "10.8.2",
53
+ "preact": "10.27.2",
54
+ "preact-render-to-string": "6.6.3",
51
55
  "supertest": "7.0.0",
52
56
  "tsd": "0.31.2",
53
57
  "uglify-js": "3.19.3"