@jsenv/server 12.4.1 → 12.4.2

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jsenv/server",
3
- "version": "12.4.1",
3
+ "version": "12.4.2",
4
4
  "description": "Write your Node.js server using pure functions",
5
5
  "license": "MIT",
6
6
  "author": {
@@ -16,7 +16,8 @@
16
16
  "node": ">=16.13.0"
17
17
  },
18
18
  "publishConfig": {
19
- "access": "public"
19
+ "access": "public",
20
+ "registry": "https://registry.npmjs.org"
20
21
  },
21
22
  "type": "module",
22
23
  "exports": {
@@ -44,27 +45,27 @@
44
45
  "dependencies": {
45
46
  "@jsenv/abort": "4.1.2",
46
47
  "@jsenv/logger": "4.0.1",
47
- "@jsenv/url-meta": "6.0.3",
48
+ "@jsenv/url-meta": "6.2.0",
48
49
  "node-fetch": "2.6.7",
49
50
  "path-to-regexp": "6.2.0"
50
51
  },
51
52
  "devDependencies": {
52
- "@jsenv/assert": "2.4.1",
53
- "@jsenv/core": "25.3.0",
53
+ "@jsenv/assert": "2.5.2",
54
+ "@jsenv/core": "25.4.9",
54
55
  "@jsenv/eslint-config": "16.0.9",
55
56
  "@jsenv/filesystem": "2.7.1",
56
- "@jsenv/github-release-package": "1.3.0",
57
- "@jsenv/https-local": "1.0.3",
57
+ "@jsenv/github-release-package": "1.3.4",
58
+ "@jsenv/https-local": "1.0.7",
58
59
  "@jsenv/importmap-eslint-resolver": "5.2.5",
59
60
  "@jsenv/importmap-node-module": "5.1.3",
60
- "@jsenv/package-publish": "1.7.0",
61
- "@jsenv/performance-impact": "2.2.1",
61
+ "@jsenv/package-publish": "1.7.2",
62
+ "@jsenv/performance-impact": "2.2.7",
62
63
  "eslint": "8.7.0",
63
64
  "eslint-plugin-import": "2.25.4",
64
65
  "eventsource": "1.1.0",
65
66
  "fastify": "3.27.0",
66
67
  "fastify-static": "4.5.0",
67
- "playwright": "1.18.0",
68
+ "playwright": "1.18.1",
68
69
  "prettier": "2.5.1"
69
70
  }
70
- }
71
+ }
@@ -1,63 +1,26 @@
1
- import { urlToMeta, normalizeStructuredMetaMap } from "@jsenv/url-meta"
2
-
3
- import { escapeRegexpSpecialCharacters } from "./regex_escape.js"
1
+ import { applyAliases } from "@jsenv/url-meta"
4
2
 
5
3
  export const pluginRessourceAliases = (ressourceAliases) => {
6
- const alias = {}
4
+ const aliases = {}
7
5
  Object.keys(ressourceAliases).forEach((key) => {
8
- alias[key] = {
9
- pattern: key,
10
- replacement: ressourceAliases[key],
11
- }
6
+ aliases[asFileUrl(key)] = asFileUrl(ressourceAliases[key])
12
7
  })
13
- const structuredMetaMap = normalizeStructuredMetaMap(
14
- {
15
- alias,
16
- },
17
- "file:///",
18
- )
19
- const getRessourceAlias = (pathname) => {
20
- const { alias } = urlToMeta({
21
- url: `file://${pathname}`,
22
- structuredMetaMap,
23
- })
24
- return alias
25
- }
26
-
27
8
  return {
28
9
  ressource_aliases: {
29
10
  onRequest: (request, { redirectRequest }) => {
30
- const ressourceAlias = getRessourceAlias(request.pathname)
31
- if (!ressourceAlias) {
32
- return
33
- }
34
- const { pattern, replacement } = ressourceAlias
35
- let newValue
36
11
  const ressourceBeforeAlias = request.ressource
37
- if (replacement.includes("*")) {
38
- let regexsource = ""
39
- let i = 0
40
- while (i < pattern.length) {
41
- const char = pattern[i]
42
- i++
43
- if (char === "*") {
44
- regexsource += "(.+)"
45
- } else {
46
- regexsource += escapeRegexpSpecialCharacters(char)
47
- }
48
- }
49
- const regex = new RegExp(regexsource)
50
- const matchResult = ressourceBeforeAlias.match(regex)
51
- const parts = replacement.split("*")
52
- newValue = parts.reduce((previous, value, index) => {
53
- return `${previous}${value}${
54
- index === parts.length - 1 ? "" : matchResult[index + 1]
55
- }`
56
- }, "")
57
- } else {
58
- newValue = replacement
12
+ const urlAfterAliasing = applyAliases({
13
+ url: asFileUrl(request.pathname),
14
+ aliases,
15
+ })
16
+ const ressourceAfterAlias = urlAfterAliasing.slice("file://".length)
17
+ if (ressourceBeforeAlias === ressourceAfterAlias) {
18
+ return
59
19
  }
60
- const ressource = replaceRessource(ressourceBeforeAlias, newValue)
20
+ const ressource = replaceRessource(
21
+ ressourceBeforeAlias,
22
+ ressourceAfterAlias,
23
+ )
61
24
  redirectRequest({
62
25
  ressourceBeforeAlias,
63
26
  ressource,
@@ -67,6 +30,8 @@ export const pluginRessourceAliases = (ressourceAliases) => {
67
30
  }
68
31
  }
69
32
 
33
+ const asFileUrl = (specifier) => new URL(specifier, "file:///").href
34
+
70
35
  const replaceRessource = (ressourceBeforeAlias, newValue) => {
71
36
  const urlObject = new URL(ressourceBeforeAlias, "file://")
72
37
  const searchSeparatorIndex = newValue.indexOf("?")
@@ -1,34 +0,0 @@
1
- // https://github.com/benjamingr/RegExp.escape/blob/master/polyfill.js
2
-
3
- export const escapeRegexpSpecialCharacters = (string) => {
4
- string = String(string)
5
- let i = 0
6
- let escapedString = ""
7
-
8
- while (i < string.length) {
9
- const char = string[i]
10
- i++
11
- escapedString += isRegExpSpecialChar(char) ? `\\${char}` : char
12
- }
13
- return escapedString
14
- }
15
-
16
- const isRegExpSpecialChar = (char) => regexpSpecialChars.indexOf(char) > -1
17
-
18
- const regexpSpecialChars = [
19
- "/",
20
- "^",
21
- "\\",
22
- "[",
23
- "]",
24
- "(",
25
- ")",
26
- "{",
27
- "}",
28
- "?",
29
- "+",
30
- "*",
31
- ".",
32
- "|",
33
- "$",
34
- ]