appstage 0.2.9 → 0.2.10

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/dist/index.cjs CHANGED
@@ -132,7 +132,10 @@ async function resolve(...parts) {
132
132
  } catch {}
133
133
  return null;
134
134
  }
135
- function getLanguageList(acceptedLanguages) {
135
+ function getLanguageList(req) {
136
+ let langParam = req.query.lang;
137
+ if (langParam) return [String(langParam)];
138
+ let acceptedLanguages = req.acceptsLanguages();
136
139
  let langs = /* @__PURE__ */ new Set();
137
140
  for (let i = 0; i < acceptedLanguages.length && i < maxLanguages; i++) {
138
141
  let s = acceptedLanguages[i];
@@ -147,6 +150,7 @@ function getLanguageList(acceptedLanguages) {
147
150
  }
148
151
  const defaultExtensions = ["html", "htm"];
149
152
  const defaultPath = (req) => req.originalUrl.split("?")[0];
153
+ const defaultLanguages = getLanguageList;
150
154
  /**
151
155
  * Serves files from the specified directory path in a locale-aware
152
156
  * fashion after applying optional transforms.
@@ -156,7 +160,7 @@ const files = (params) => {
156
160
  let bases = Array.isArray(p.base) ? p.base : [p.base];
157
161
  let exts = p.extensions ?? defaultExtensions;
158
162
  return async (req, res) => {
159
- let langs = getLanguageList(req.acceptsLanguages());
163
+ let langs = (p.languages ?? defaultLanguages)(req);
160
164
  let path = typeof p.path === "string" ? p.path : (p.path ?? defaultPath)(req);
161
165
  if (path.includes("../")) {
162
166
  emitLog(req.app, "Invalid path (potential traversal attempt)", { data: { path } });
package/dist/index.d.ts CHANGED
@@ -79,6 +79,7 @@ type FilesParams = {
79
79
  base: string | string[];
80
80
  path?: string | ((req: Request) => string);
81
81
  extensions?: string[];
82
+ languages?: (req: Request) => string[];
82
83
  transform?: TransformContent[];
83
84
  };
84
85
  /**
package/dist/index.mjs CHANGED
@@ -106,7 +106,10 @@ async function resolve(...parts) {
106
106
  } catch {}
107
107
  return null;
108
108
  }
109
- function getLanguageList(acceptedLanguages) {
109
+ function getLanguageList(req) {
110
+ let langParam = req.query.lang;
111
+ if (langParam) return [String(langParam)];
112
+ let acceptedLanguages = req.acceptsLanguages();
110
113
  let langs = /* @__PURE__ */ new Set();
111
114
  for (let i = 0; i < acceptedLanguages.length && i < maxLanguages; i++) {
112
115
  let s = acceptedLanguages[i];
@@ -121,6 +124,7 @@ function getLanguageList(acceptedLanguages) {
121
124
  }
122
125
  const defaultExtensions = ["html", "htm"];
123
126
  const defaultPath = (req) => req.originalUrl.split("?")[0];
127
+ const defaultLanguages = getLanguageList;
124
128
  /**
125
129
  * Serves files from the specified directory path in a locale-aware
126
130
  * fashion after applying optional transforms.
@@ -130,7 +134,7 @@ const files = (params) => {
130
134
  let bases = Array.isArray(p.base) ? p.base : [p.base];
131
135
  let exts = p.extensions ?? defaultExtensions;
132
136
  return async (req, res) => {
133
- let langs = getLanguageList(req.acceptsLanguages());
137
+ let langs = (p.languages ?? defaultLanguages)(req);
134
138
  let path = typeof p.path === "string" ? p.path : (p.path ?? defaultPath)(req);
135
139
  if (path.includes("../")) {
136
140
  emitLog(req.app, "Invalid path (potential traversal attempt)", { data: { path } });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "appstage",
3
- "version": "0.2.9",
3
+ "version": "0.2.10",
4
4
  "description": "",
5
5
  "main": "./dist/index.cjs",
6
6
  "module": "./dist/index.mjs",
@@ -16,7 +16,12 @@ async function resolve(...parts: string[]) {
16
16
  }
17
17
 
18
18
  // ["en-US", "ru"] > ["en-US", "en", "ru"]
19
- function getLanguageList(acceptedLanguages: string[]) {
19
+ function getLanguageList(req: Request) {
20
+ let langParam = req.query.lang;
21
+
22
+ if (langParam) return [String(langParam)];
23
+
24
+ let acceptedLanguages = req.acceptsLanguages();
20
25
  let langs = new Set<string>();
21
26
 
22
27
  for (let i = 0; i < acceptedLanguages.length && i < maxLanguages; i++) {
@@ -37,11 +42,13 @@ export type FilesParams = {
37
42
  base: string | string[];
38
43
  path?: string | ((req: Request) => string);
39
44
  extensions?: string[];
45
+ languages?: (req: Request) => string[];
40
46
  transform?: TransformContent[];
41
47
  };
42
48
 
43
49
  const defaultExtensions = ["html", "htm"];
44
50
  const defaultPath = (req: Request) => req.originalUrl.split("?")[0];
51
+ const defaultLanguages = getLanguageList;
45
52
 
46
53
  /**
47
54
  * Serves files from the specified directory path in a locale-aware
@@ -54,7 +61,7 @@ export const files: Controller<string | FilesParams> = (params) => {
54
61
  let exts = p.extensions ?? defaultExtensions;
55
62
 
56
63
  return async (req, res) => {
57
- let langs = getLanguageList(req.acceptsLanguages());
64
+ let langs = (p.languages ?? defaultLanguages)(req);
58
65
 
59
66
  let path =
60
67
  typeof p.path === "string" ? p.path : (p.path ?? defaultPath)(req);