Joe Pea commited on
Commit
c71c22a
·
1 Parent(s): b99e372

add holster demo, add serve script for dev, update prettier config

Browse files
.gitignore ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ .DS_Store
2
+ node_modules/
.prettierrc DELETED
@@ -1,11 +0,0 @@
1
- {
2
- "useTabs": true,
3
- "semi": false,
4
- "singleQuote": true,
5
- "trailingComma": "all",
6
- "bracketSpacing": false,
7
- "printWidth": 120,
8
- "arrowParens": "avoid",
9
-
10
- "overrides": [{"files": "*.md", "options": {"useTabs": false, "tabWidth": 2}}]
11
- }
 
 
 
 
 
 
 
 
 
 
 
 
index.html CHANGED
@@ -4,24 +4,31 @@
4
  console.log('hello html')
5
  </script>
6
 
7
- <div overlay>
8
- <h1>Hi, I'm Joe.</h1>
9
- <h2>Welcome to my scratchpad.</h2>
10
- </div>
11
-
12
  <style>
13
  [overlay] {
14
  padding: 20px;
15
  position: absolute;
16
  top: 0;
17
  left: 0;
18
- color: #8890c1;
 
 
 
 
 
 
 
 
 
 
 
 
19
  }
20
  </style>
21
 
22
  <lume-scene webgl>
23
  <!-- a rig that allows zooming/rotating a camera -->
24
- <lume-camera-rig distance="800">
25
  <!-- position lights relative to the rig's camera -->
26
  <lume-element3d slot="camera-child">
27
  <lume-point-light position="300 300 -500" intensity="800" color="deeppink"></lume-point-light>
@@ -40,6 +47,14 @@
40
  ></lume-box>
41
  </lume-scene>
42
 
 
 
 
 
 
 
 
 
43
  <script type="module">
44
  import 'lume'
45
 
 
4
  console.log('hello html')
5
  </script>
6
 
 
 
 
 
 
7
  <style>
8
  [overlay] {
9
  padding: 20px;
10
  position: absolute;
11
  top: 0;
12
  left: 0;
13
+ color: #7082d0;
14
+ }
15
+
16
+ [overlay2] {
17
+ padding: 20px;
18
+ position: absolute;
19
+ bottom: 0;
20
+ right: 0;
21
+ color: #d96693;
22
+
23
+ a {
24
+ color: inherit;
25
+ }
26
  }
27
  </style>
28
 
29
  <lume-scene webgl>
30
  <!-- a rig that allows zooming/rotating a camera -->
31
+ <lume-camera-rig distance="1100">
32
  <!-- position lights relative to the rig's camera -->
33
  <lume-element3d slot="camera-child">
34
  <lume-point-light position="300 300 -500" intensity="800" color="deeppink"></lume-point-light>
 
47
  ></lume-box>
48
  </lume-scene>
49
 
50
+ <div overlay>
51
+ <h1>Hi, I'm Joe.</h1>
52
+ </div>
53
+
54
+ <div overlay2>
55
+ <h2><a href="./scratchpad/index.html">Enter my scratchpad.</a></h2>
56
+ </div>
57
+
58
  <script type="module">
59
  import 'lume'
60
 
package-lock.json ADDED
@@ -0,0 +1,2736 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "trusktr+trusktr",
3
+ "lockfileVersion": 3,
4
+ "requires": true,
5
+ "packages": {
6
+ "": {
7
+ "hasInstallScript": true,
8
+ "devDependencies": {
9
+ "five-server": "^0.4.0",
10
+ "patch-package": "^8.0.0",
11
+ "prettier": "^3.4.2"
12
+ }
13
+ },
14
+ "node_modules/@babel/code-frame": {
15
+ "version": "7.26.2",
16
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz",
17
+ "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==",
18
+ "dev": true,
19
+ "dependencies": {
20
+ "@babel/helper-validator-identifier": "^7.25.9",
21
+ "js-tokens": "^4.0.0",
22
+ "picocolors": "^1.0.0"
23
+ },
24
+ "engines": {
25
+ "node": ">=6.9.0"
26
+ }
27
+ },
28
+ "node_modules/@babel/helper-validator-identifier": {
29
+ "version": "7.25.9",
30
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz",
31
+ "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==",
32
+ "dev": true,
33
+ "engines": {
34
+ "node": ">=6.9.0"
35
+ }
36
+ },
37
+ "node_modules/@html-validate/stylish": {
38
+ "version": "4.2.0",
39
+ "resolved": "https://registry.npmjs.org/@html-validate/stylish/-/stylish-4.2.0.tgz",
40
+ "integrity": "sha512-Nl8HCv0hGRSLQ+n1OD4Hk3a+Urwk9HH0vQkAzzCarT4KlA7bRl+6xEiS5PZVwOmjtC7XiH/oNe3as9Fxcr2A1w==",
41
+ "dev": true,
42
+ "dependencies": {
43
+ "kleur": "^4.0.0"
44
+ },
45
+ "engines": {
46
+ "node": ">= 16"
47
+ }
48
+ },
49
+ "node_modules/@isaacs/cliui": {
50
+ "version": "8.0.2",
51
+ "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
52
+ "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
53
+ "dev": true,
54
+ "dependencies": {
55
+ "string-width": "^5.1.2",
56
+ "string-width-cjs": "npm:string-width@^4.2.0",
57
+ "strip-ansi": "^7.0.1",
58
+ "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
59
+ "wrap-ansi": "^8.1.0",
60
+ "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
61
+ },
62
+ "engines": {
63
+ "node": ">=12"
64
+ }
65
+ },
66
+ "node_modules/@pkgjs/parseargs": {
67
+ "version": "0.11.0",
68
+ "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
69
+ "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
70
+ "dev": true,
71
+ "optional": true,
72
+ "engines": {
73
+ "node": ">=14"
74
+ }
75
+ },
76
+ "node_modules/@sidvind/better-ajv-errors": {
77
+ "version": "2.1.3",
78
+ "resolved": "https://registry.npmjs.org/@sidvind/better-ajv-errors/-/better-ajv-errors-2.1.3.tgz",
79
+ "integrity": "sha512-lWuod/rh7Xz5uXiEGSfm2Sd5PG7K/6yJfoAZVqzsEswjPJhUz15R7Gn/o8RczA041QS15hBd/BCSeu9vwPArkA==",
80
+ "dev": true,
81
+ "dependencies": {
82
+ "@babel/code-frame": "^7.16.0",
83
+ "chalk": "^4.1.0"
84
+ },
85
+ "engines": {
86
+ "node": ">= 16.14"
87
+ },
88
+ "peerDependencies": {
89
+ "ajv": "4.11.8 - 8"
90
+ }
91
+ },
92
+ "node_modules/@types/node": {
93
+ "version": "22.12.0",
94
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-22.12.0.tgz",
95
+ "integrity": "sha512-Fll2FZ1riMjNmlmJOdAyY5pUbkftXslB5DgEzlIuNaiWhXd00FhWxVC/r4yV/4wBb9JfImTu+jiSvXTkJ7F/gA==",
96
+ "dev": true,
97
+ "dependencies": {
98
+ "undici-types": "~6.20.0"
99
+ }
100
+ },
101
+ "node_modules/@types/node-forge": {
102
+ "version": "1.3.11",
103
+ "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz",
104
+ "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==",
105
+ "dev": true,
106
+ "dependencies": {
107
+ "@types/node": "*"
108
+ }
109
+ },
110
+ "node_modules/@yandeu/open-cjs": {
111
+ "version": "0.0.2",
112
+ "resolved": "https://registry.npmjs.org/@yandeu/open-cjs/-/open-cjs-0.0.2.tgz",
113
+ "integrity": "sha512-Z8cPmta5yMI8g0q1wA7vIWb4wYLbTpdq3HdVlKANGXXDgOEh6K8ZBIom8EpFA18Tu+4gBtGHuKwbPGa2Zg/zkw==",
114
+ "dev": true,
115
+ "dependencies": {
116
+ "open": "github:yandeu/open#spawn-arguments"
117
+ }
118
+ },
119
+ "node_modules/@yarnpkg/lockfile": {
120
+ "version": "1.1.0",
121
+ "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz",
122
+ "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==",
123
+ "dev": true
124
+ },
125
+ "node_modules/accepts": {
126
+ "version": "1.3.8",
127
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
128
+ "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
129
+ "dev": true,
130
+ "dependencies": {
131
+ "mime-types": "~2.1.34",
132
+ "negotiator": "0.6.3"
133
+ },
134
+ "engines": {
135
+ "node": ">= 0.6"
136
+ }
137
+ },
138
+ "node_modules/acorn": {
139
+ "version": "8.14.0",
140
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz",
141
+ "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==",
142
+ "dev": true,
143
+ "bin": {
144
+ "acorn": "bin/acorn"
145
+ },
146
+ "engines": {
147
+ "node": ">=0.4.0"
148
+ }
149
+ },
150
+ "node_modules/acorn-jsx": {
151
+ "version": "5.3.2",
152
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
153
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
154
+ "dev": true,
155
+ "peerDependencies": {
156
+ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
157
+ }
158
+ },
159
+ "node_modules/acorn-walk": {
160
+ "version": "8.3.4",
161
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz",
162
+ "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==",
163
+ "dev": true,
164
+ "dependencies": {
165
+ "acorn": "^8.11.0"
166
+ },
167
+ "engines": {
168
+ "node": ">=0.4.0"
169
+ }
170
+ },
171
+ "node_modules/ajv": {
172
+ "version": "8.17.1",
173
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
174
+ "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
175
+ "dev": true,
176
+ "dependencies": {
177
+ "fast-deep-equal": "^3.1.3",
178
+ "fast-uri": "^3.0.1",
179
+ "json-schema-traverse": "^1.0.0",
180
+ "require-from-string": "^2.0.2"
181
+ },
182
+ "funding": {
183
+ "type": "github",
184
+ "url": "https://github.com/sponsors/epoberezkin"
185
+ }
186
+ },
187
+ "node_modules/ansi-regex": {
188
+ "version": "6.1.0",
189
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
190
+ "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
191
+ "dev": true,
192
+ "engines": {
193
+ "node": ">=12"
194
+ },
195
+ "funding": {
196
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
197
+ }
198
+ },
199
+ "node_modules/ansi-styles": {
200
+ "version": "4.3.0",
201
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
202
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
203
+ "dev": true,
204
+ "dependencies": {
205
+ "color-convert": "^2.0.1"
206
+ },
207
+ "engines": {
208
+ "node": ">=8"
209
+ },
210
+ "funding": {
211
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
212
+ }
213
+ },
214
+ "node_modules/anymatch": {
215
+ "version": "3.1.3",
216
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
217
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
218
+ "dev": true,
219
+ "dependencies": {
220
+ "normalize-path": "^3.0.0",
221
+ "picomatch": "^2.0.4"
222
+ },
223
+ "engines": {
224
+ "node": ">= 8"
225
+ }
226
+ },
227
+ "node_modules/array-flatten": {
228
+ "version": "3.0.0",
229
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-3.0.0.tgz",
230
+ "integrity": "sha512-zPMVc3ZYlGLNk4mpK1NzP2wg0ml9t7fUgDsayR5Y5rSzxQilzR9FGu/EH2jQOcKSAeAfWeylyW8juy3OkWRvNA==",
231
+ "dev": true
232
+ },
233
+ "node_modules/at-least-node": {
234
+ "version": "1.0.0",
235
+ "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
236
+ "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
237
+ "dev": true,
238
+ "engines": {
239
+ "node": ">= 4.0.0"
240
+ }
241
+ },
242
+ "node_modules/balanced-match": {
243
+ "version": "1.0.2",
244
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
245
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
246
+ "dev": true
247
+ },
248
+ "node_modules/binary-extensions": {
249
+ "version": "2.3.0",
250
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
251
+ "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
252
+ "dev": true,
253
+ "engines": {
254
+ "node": ">=8"
255
+ },
256
+ "funding": {
257
+ "url": "https://github.com/sponsors/sindresorhus"
258
+ }
259
+ },
260
+ "node_modules/boolbase": {
261
+ "version": "1.0.0",
262
+ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
263
+ "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
264
+ "dev": true
265
+ },
266
+ "node_modules/brace-expansion": {
267
+ "version": "2.0.1",
268
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
269
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
270
+ "dev": true,
271
+ "dependencies": {
272
+ "balanced-match": "^1.0.0"
273
+ }
274
+ },
275
+ "node_modules/braces": {
276
+ "version": "3.0.3",
277
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
278
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
279
+ "dev": true,
280
+ "dependencies": {
281
+ "fill-range": "^7.1.1"
282
+ },
283
+ "engines": {
284
+ "node": ">=8"
285
+ }
286
+ },
287
+ "node_modules/bundle-name": {
288
+ "version": "4.1.0",
289
+ "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz",
290
+ "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==",
291
+ "dev": true,
292
+ "dependencies": {
293
+ "run-applescript": "^7.0.0"
294
+ },
295
+ "engines": {
296
+ "node": ">=18"
297
+ },
298
+ "funding": {
299
+ "url": "https://github.com/sponsors/sindresorhus"
300
+ }
301
+ },
302
+ "node_modules/call-bind": {
303
+ "version": "1.0.8",
304
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz",
305
+ "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==",
306
+ "dev": true,
307
+ "dependencies": {
308
+ "call-bind-apply-helpers": "^1.0.0",
309
+ "es-define-property": "^1.0.0",
310
+ "get-intrinsic": "^1.2.4",
311
+ "set-function-length": "^1.2.2"
312
+ },
313
+ "engines": {
314
+ "node": ">= 0.4"
315
+ },
316
+ "funding": {
317
+ "url": "https://github.com/sponsors/ljharb"
318
+ }
319
+ },
320
+ "node_modules/call-bind-apply-helpers": {
321
+ "version": "1.0.1",
322
+ "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz",
323
+ "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==",
324
+ "dev": true,
325
+ "dependencies": {
326
+ "es-errors": "^1.3.0",
327
+ "function-bind": "^1.1.2"
328
+ },
329
+ "engines": {
330
+ "node": ">= 0.4"
331
+ }
332
+ },
333
+ "node_modules/call-bound": {
334
+ "version": "1.0.3",
335
+ "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz",
336
+ "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==",
337
+ "dev": true,
338
+ "dependencies": {
339
+ "call-bind-apply-helpers": "^1.0.1",
340
+ "get-intrinsic": "^1.2.6"
341
+ },
342
+ "engines": {
343
+ "node": ">= 0.4"
344
+ },
345
+ "funding": {
346
+ "url": "https://github.com/sponsors/ljharb"
347
+ }
348
+ },
349
+ "node_modules/chalk": {
350
+ "version": "4.1.2",
351
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
352
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
353
+ "dev": true,
354
+ "dependencies": {
355
+ "ansi-styles": "^4.1.0",
356
+ "supports-color": "^7.1.0"
357
+ },
358
+ "engines": {
359
+ "node": ">=10"
360
+ },
361
+ "funding": {
362
+ "url": "https://github.com/chalk/chalk?sponsor=1"
363
+ }
364
+ },
365
+ "node_modules/chokidar": {
366
+ "version": "3.6.0",
367
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
368
+ "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
369
+ "dev": true,
370
+ "dependencies": {
371
+ "anymatch": "~3.1.2",
372
+ "braces": "~3.0.2",
373
+ "glob-parent": "~5.1.2",
374
+ "is-binary-path": "~2.1.0",
375
+ "is-glob": "~4.0.1",
376
+ "normalize-path": "~3.0.0",
377
+ "readdirp": "~3.6.0"
378
+ },
379
+ "engines": {
380
+ "node": ">= 8.10.0"
381
+ },
382
+ "funding": {
383
+ "url": "https://paulmillr.com/funding/"
384
+ },
385
+ "optionalDependencies": {
386
+ "fsevents": "~2.3.2"
387
+ }
388
+ },
389
+ "node_modules/ci-info": {
390
+ "version": "3.9.0",
391
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz",
392
+ "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==",
393
+ "dev": true,
394
+ "funding": [
395
+ {
396
+ "type": "github",
397
+ "url": "https://github.com/sponsors/sibiraj-s"
398
+ }
399
+ ],
400
+ "engines": {
401
+ "node": ">=8"
402
+ }
403
+ },
404
+ "node_modules/color-convert": {
405
+ "version": "2.0.1",
406
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
407
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
408
+ "dev": true,
409
+ "dependencies": {
410
+ "color-name": "~1.1.4"
411
+ },
412
+ "engines": {
413
+ "node": ">=7.0.0"
414
+ }
415
+ },
416
+ "node_modules/color-name": {
417
+ "version": "1.1.4",
418
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
419
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
420
+ "dev": true
421
+ },
422
+ "node_modules/concat-map": {
423
+ "version": "0.0.1",
424
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
425
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
426
+ "dev": true
427
+ },
428
+ "node_modules/content-disposition": {
429
+ "version": "0.5.4",
430
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
431
+ "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
432
+ "dev": true,
433
+ "dependencies": {
434
+ "safe-buffer": "5.2.1"
435
+ },
436
+ "engines": {
437
+ "node": ">= 0.6"
438
+ }
439
+ },
440
+ "node_modules/content-type": {
441
+ "version": "1.0.5",
442
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
443
+ "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
444
+ "dev": true,
445
+ "engines": {
446
+ "node": ">= 0.6"
447
+ }
448
+ },
449
+ "node_modules/cookie": {
450
+ "version": "0.4.2",
451
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz",
452
+ "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==",
453
+ "dev": true,
454
+ "engines": {
455
+ "node": ">= 0.6"
456
+ }
457
+ },
458
+ "node_modules/cookie-signature": {
459
+ "version": "1.2.2",
460
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz",
461
+ "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==",
462
+ "dev": true,
463
+ "engines": {
464
+ "node": ">=6.6.0"
465
+ }
466
+ },
467
+ "node_modules/cors": {
468
+ "version": "2.8.5",
469
+ "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
470
+ "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
471
+ "dev": true,
472
+ "dependencies": {
473
+ "object-assign": "^4",
474
+ "vary": "^1"
475
+ },
476
+ "engines": {
477
+ "node": ">= 0.10"
478
+ }
479
+ },
480
+ "node_modules/cross-spawn": {
481
+ "version": "7.0.6",
482
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
483
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
484
+ "dev": true,
485
+ "dependencies": {
486
+ "path-key": "^3.1.0",
487
+ "shebang-command": "^2.0.0",
488
+ "which": "^2.0.1"
489
+ },
490
+ "engines": {
491
+ "node": ">= 8"
492
+ }
493
+ },
494
+ "node_modules/css-select": {
495
+ "version": "4.3.0",
496
+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz",
497
+ "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==",
498
+ "dev": true,
499
+ "dependencies": {
500
+ "boolbase": "^1.0.0",
501
+ "css-what": "^6.0.1",
502
+ "domhandler": "^4.3.1",
503
+ "domutils": "^2.8.0",
504
+ "nth-check": "^2.0.1"
505
+ },
506
+ "funding": {
507
+ "url": "https://github.com/sponsors/fb55"
508
+ }
509
+ },
510
+ "node_modules/css-what": {
511
+ "version": "6.1.0",
512
+ "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz",
513
+ "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==",
514
+ "dev": true,
515
+ "engines": {
516
+ "node": ">= 6"
517
+ },
518
+ "funding": {
519
+ "url": "https://github.com/sponsors/fb55"
520
+ }
521
+ },
522
+ "node_modules/debug": {
523
+ "version": "4.4.0",
524
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz",
525
+ "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==",
526
+ "dev": true,
527
+ "dependencies": {
528
+ "ms": "^2.1.3"
529
+ },
530
+ "engines": {
531
+ "node": ">=6.0"
532
+ },
533
+ "peerDependenciesMeta": {
534
+ "supports-color": {
535
+ "optional": true
536
+ }
537
+ }
538
+ },
539
+ "node_modules/deepmerge": {
540
+ "version": "4.3.1",
541
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
542
+ "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
543
+ "dev": true,
544
+ "engines": {
545
+ "node": ">=0.10.0"
546
+ }
547
+ },
548
+ "node_modules/default-browser": {
549
+ "version": "5.2.1",
550
+ "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz",
551
+ "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==",
552
+ "dev": true,
553
+ "dependencies": {
554
+ "bundle-name": "^4.1.0",
555
+ "default-browser-id": "^5.0.0"
556
+ },
557
+ "engines": {
558
+ "node": ">=18"
559
+ },
560
+ "funding": {
561
+ "url": "https://github.com/sponsors/sindresorhus"
562
+ }
563
+ },
564
+ "node_modules/default-browser-id": {
565
+ "version": "5.0.0",
566
+ "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz",
567
+ "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==",
568
+ "dev": true,
569
+ "engines": {
570
+ "node": ">=18"
571
+ },
572
+ "funding": {
573
+ "url": "https://github.com/sponsors/sindresorhus"
574
+ }
575
+ },
576
+ "node_modules/define-data-property": {
577
+ "version": "1.1.4",
578
+ "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
579
+ "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
580
+ "dev": true,
581
+ "dependencies": {
582
+ "es-define-property": "^1.0.0",
583
+ "es-errors": "^1.3.0",
584
+ "gopd": "^1.0.1"
585
+ },
586
+ "engines": {
587
+ "node": ">= 0.4"
588
+ },
589
+ "funding": {
590
+ "url": "https://github.com/sponsors/ljharb"
591
+ }
592
+ },
593
+ "node_modules/define-lazy-prop": {
594
+ "version": "3.0.0",
595
+ "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz",
596
+ "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==",
597
+ "dev": true,
598
+ "engines": {
599
+ "node": ">=12"
600
+ },
601
+ "funding": {
602
+ "url": "https://github.com/sponsors/sindresorhus"
603
+ }
604
+ },
605
+ "node_modules/depd": {
606
+ "version": "1.1.2",
607
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
608
+ "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==",
609
+ "dev": true,
610
+ "engines": {
611
+ "node": ">= 0.6"
612
+ }
613
+ },
614
+ "node_modules/destroy": {
615
+ "version": "1.0.4",
616
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
617
+ "integrity": "sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg==",
618
+ "dev": true
619
+ },
620
+ "node_modules/dom-serializer": {
621
+ "version": "1.4.1",
622
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz",
623
+ "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==",
624
+ "dev": true,
625
+ "dependencies": {
626
+ "domelementtype": "^2.0.1",
627
+ "domhandler": "^4.2.0",
628
+ "entities": "^2.0.0"
629
+ },
630
+ "funding": {
631
+ "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
632
+ }
633
+ },
634
+ "node_modules/domelementtype": {
635
+ "version": "2.3.0",
636
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
637
+ "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
638
+ "dev": true,
639
+ "funding": [
640
+ {
641
+ "type": "github",
642
+ "url": "https://github.com/sponsors/fb55"
643
+ }
644
+ ]
645
+ },
646
+ "node_modules/domhandler": {
647
+ "version": "4.3.1",
648
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz",
649
+ "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==",
650
+ "dev": true,
651
+ "dependencies": {
652
+ "domelementtype": "^2.2.0"
653
+ },
654
+ "engines": {
655
+ "node": ">= 4"
656
+ },
657
+ "funding": {
658
+ "url": "https://github.com/fb55/domhandler?sponsor=1"
659
+ }
660
+ },
661
+ "node_modules/domutils": {
662
+ "version": "2.8.0",
663
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz",
664
+ "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==",
665
+ "dev": true,
666
+ "dependencies": {
667
+ "dom-serializer": "^1.0.1",
668
+ "domelementtype": "^2.2.0",
669
+ "domhandler": "^4.2.0"
670
+ },
671
+ "funding": {
672
+ "url": "https://github.com/fb55/domutils?sponsor=1"
673
+ }
674
+ },
675
+ "node_modules/dunder-proto": {
676
+ "version": "1.0.1",
677
+ "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
678
+ "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
679
+ "dev": true,
680
+ "dependencies": {
681
+ "call-bind-apply-helpers": "^1.0.1",
682
+ "es-errors": "^1.3.0",
683
+ "gopd": "^1.2.0"
684
+ },
685
+ "engines": {
686
+ "node": ">= 0.4"
687
+ }
688
+ },
689
+ "node_modules/eastasianwidth": {
690
+ "version": "0.2.0",
691
+ "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
692
+ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
693
+ "dev": true
694
+ },
695
+ "node_modules/ee-first": {
696
+ "version": "1.1.1",
697
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
698
+ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
699
+ "dev": true
700
+ },
701
+ "node_modules/emoji-regex": {
702
+ "version": "9.2.2",
703
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
704
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
705
+ "dev": true
706
+ },
707
+ "node_modules/encodeurl": {
708
+ "version": "1.0.2",
709
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
710
+ "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
711
+ "dev": true,
712
+ "engines": {
713
+ "node": ">= 0.8"
714
+ }
715
+ },
716
+ "node_modules/entities": {
717
+ "version": "2.2.0",
718
+ "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
719
+ "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==",
720
+ "dev": true,
721
+ "funding": {
722
+ "url": "https://github.com/fb55/entities?sponsor=1"
723
+ }
724
+ },
725
+ "node_modules/es-define-property": {
726
+ "version": "1.0.1",
727
+ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
728
+ "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
729
+ "dev": true,
730
+ "engines": {
731
+ "node": ">= 0.4"
732
+ }
733
+ },
734
+ "node_modules/es-errors": {
735
+ "version": "1.3.0",
736
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
737
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
738
+ "dev": true,
739
+ "engines": {
740
+ "node": ">= 0.4"
741
+ }
742
+ },
743
+ "node_modules/es-object-atoms": {
744
+ "version": "1.1.1",
745
+ "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
746
+ "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
747
+ "dev": true,
748
+ "dependencies": {
749
+ "es-errors": "^1.3.0"
750
+ },
751
+ "engines": {
752
+ "node": ">= 0.4"
753
+ }
754
+ },
755
+ "node_modules/escape-html": {
756
+ "version": "1.0.3",
757
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
758
+ "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
759
+ "dev": true
760
+ },
761
+ "node_modules/eslint-visitor-keys": {
762
+ "version": "3.4.3",
763
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
764
+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
765
+ "dev": true,
766
+ "engines": {
767
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
768
+ },
769
+ "funding": {
770
+ "url": "https://opencollective.com/eslint"
771
+ }
772
+ },
773
+ "node_modules/espree": {
774
+ "version": "9.6.1",
775
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
776
+ "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
777
+ "dev": true,
778
+ "dependencies": {
779
+ "acorn": "^8.9.0",
780
+ "acorn-jsx": "^5.3.2",
781
+ "eslint-visitor-keys": "^3.4.1"
782
+ },
783
+ "engines": {
784
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
785
+ },
786
+ "funding": {
787
+ "url": "https://opencollective.com/eslint"
788
+ }
789
+ },
790
+ "node_modules/etag": {
791
+ "version": "1.8.1",
792
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
793
+ "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
794
+ "dev": true,
795
+ "engines": {
796
+ "node": ">= 0.6"
797
+ }
798
+ },
799
+ "node_modules/express6": {
800
+ "version": "0.1.2",
801
+ "resolved": "https://registry.npmjs.org/express6/-/express6-0.1.2.tgz",
802
+ "integrity": "sha512-YKVacWEoZdPT6Nx3NiDCqmJu8JlH2gQFx0ZNKxY+30jVg/RPuDDahyYWj7jjcBC+dHflqY4UZjnGuGwhOQ5uTg==",
803
+ "dev": true,
804
+ "dependencies": {
805
+ "accepts": "^1.3.7",
806
+ "array-flatten": "^3.0.0",
807
+ "content-disposition": "^0.5.3",
808
+ "content-type": "^1.0.4",
809
+ "cookie": "^0.4.0",
810
+ "cookie-signature": "^1.0.6",
811
+ "debug": "^4.3.2",
812
+ "encodeurl": "^1.0.2",
813
+ "escape-html": "^1.0.3",
814
+ "etag": "^1.8.1",
815
+ "finalhandler": "^1.1.2",
816
+ "fresh": "^0.5.2",
817
+ "merge-descriptors": "^1.0.1",
818
+ "methods": "^1.1.2",
819
+ "on-finished": "^2.3.0",
820
+ "parseurl": "^1.3.3",
821
+ "path-to-regexp": "^0.1.7",
822
+ "proxy-addr": "^2.0.5",
823
+ "qs": "^6.7.0",
824
+ "range-parser": "^1.2.1",
825
+ "send": "^0.17.1",
826
+ "serve-static": "^1.14.1",
827
+ "statuses": "^2.0.1",
828
+ "type-is": "^1.6.18",
829
+ "utils-merge": "^1.0.1",
830
+ "vary": "^1.1.2"
831
+ },
832
+ "engines": {
833
+ "node": "^14.15 || >=16"
834
+ }
835
+ },
836
+ "node_modules/fast-deep-equal": {
837
+ "version": "3.1.3",
838
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
839
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
840
+ "dev": true
841
+ },
842
+ "node_modules/fast-uri": {
843
+ "version": "3.0.6",
844
+ "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz",
845
+ "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==",
846
+ "dev": true,
847
+ "funding": [
848
+ {
849
+ "type": "github",
850
+ "url": "https://github.com/sponsors/fastify"
851
+ },
852
+ {
853
+ "type": "opencollective",
854
+ "url": "https://opencollective.com/fastify"
855
+ }
856
+ ]
857
+ },
858
+ "node_modules/fill-range": {
859
+ "version": "7.1.1",
860
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
861
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
862
+ "dev": true,
863
+ "dependencies": {
864
+ "to-regex-range": "^5.0.1"
865
+ },
866
+ "engines": {
867
+ "node": ">=8"
868
+ }
869
+ },
870
+ "node_modules/finalhandler": {
871
+ "version": "1.3.1",
872
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz",
873
+ "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==",
874
+ "dev": true,
875
+ "dependencies": {
876
+ "debug": "2.6.9",
877
+ "encodeurl": "~2.0.0",
878
+ "escape-html": "~1.0.3",
879
+ "on-finished": "2.4.1",
880
+ "parseurl": "~1.3.3",
881
+ "statuses": "2.0.1",
882
+ "unpipe": "~1.0.0"
883
+ },
884
+ "engines": {
885
+ "node": ">= 0.8"
886
+ }
887
+ },
888
+ "node_modules/finalhandler/node_modules/debug": {
889
+ "version": "2.6.9",
890
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
891
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
892
+ "dev": true,
893
+ "dependencies": {
894
+ "ms": "2.0.0"
895
+ }
896
+ },
897
+ "node_modules/finalhandler/node_modules/encodeurl": {
898
+ "version": "2.0.0",
899
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
900
+ "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",
901
+ "dev": true,
902
+ "engines": {
903
+ "node": ">= 0.8"
904
+ }
905
+ },
906
+ "node_modules/finalhandler/node_modules/ms": {
907
+ "version": "2.0.0",
908
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
909
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
910
+ "dev": true
911
+ },
912
+ "node_modules/find-yarn-workspace-root": {
913
+ "version": "2.0.0",
914
+ "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz",
915
+ "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==",
916
+ "dev": true,
917
+ "dependencies": {
918
+ "micromatch": "^4.0.2"
919
+ }
920
+ },
921
+ "node_modules/five-server": {
922
+ "version": "0.4.0",
923
+ "resolved": "https://registry.npmjs.org/five-server/-/five-server-0.4.0.tgz",
924
+ "integrity": "sha512-HW8O46NDyuYTPn7aBZr6WGiOFp3G9AfrRs8BAiWKHdOg/rbhYv+V1KMcYoEk7AqOIeiHbx9dw2U6x7rSgm5h4A==",
925
+ "dev": true,
926
+ "dependencies": {
927
+ "@yandeu/open-cjs": "0.0.2",
928
+ "chokidar": "^3.5.1",
929
+ "cors": "^2.8.5",
930
+ "debug": "^4.3.1",
931
+ "express6": "^0.1.2",
932
+ "html-validate": "^7.1.1",
933
+ "mime-types": "~2.1.24",
934
+ "node-html-parser": "~5.4.1",
935
+ "parseurl": "~1.3.3",
936
+ "selfsigned": "^2.0.0",
937
+ "ws": "^8.2.0"
938
+ },
939
+ "bin": {
940
+ "five-server": "lib/bin.js",
941
+ "live-server": "lib/bin.js"
942
+ },
943
+ "engines": {
944
+ "node": ">=16"
945
+ },
946
+ "funding": {
947
+ "url": "https://github.com/sponsors/yandeu"
948
+ }
949
+ },
950
+ "node_modules/foreground-child": {
951
+ "version": "3.3.0",
952
+ "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz",
953
+ "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==",
954
+ "dev": true,
955
+ "dependencies": {
956
+ "cross-spawn": "^7.0.0",
957
+ "signal-exit": "^4.0.1"
958
+ },
959
+ "engines": {
960
+ "node": ">=14"
961
+ },
962
+ "funding": {
963
+ "url": "https://github.com/sponsors/isaacs"
964
+ }
965
+ },
966
+ "node_modules/forwarded": {
967
+ "version": "0.2.0",
968
+ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
969
+ "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
970
+ "dev": true,
971
+ "engines": {
972
+ "node": ">= 0.6"
973
+ }
974
+ },
975
+ "node_modules/fresh": {
976
+ "version": "0.5.2",
977
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
978
+ "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
979
+ "dev": true,
980
+ "engines": {
981
+ "node": ">= 0.6"
982
+ }
983
+ },
984
+ "node_modules/fs-extra": {
985
+ "version": "9.1.0",
986
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
987
+ "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
988
+ "dev": true,
989
+ "dependencies": {
990
+ "at-least-node": "^1.0.0",
991
+ "graceful-fs": "^4.2.0",
992
+ "jsonfile": "^6.0.1",
993
+ "universalify": "^2.0.0"
994
+ },
995
+ "engines": {
996
+ "node": ">=10"
997
+ }
998
+ },
999
+ "node_modules/fs.realpath": {
1000
+ "version": "1.0.0",
1001
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
1002
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
1003
+ "dev": true
1004
+ },
1005
+ "node_modules/fsevents": {
1006
+ "version": "2.3.3",
1007
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
1008
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
1009
+ "dev": true,
1010
+ "hasInstallScript": true,
1011
+ "optional": true,
1012
+ "os": [
1013
+ "darwin"
1014
+ ],
1015
+ "engines": {
1016
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
1017
+ }
1018
+ },
1019
+ "node_modules/function-bind": {
1020
+ "version": "1.1.2",
1021
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
1022
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
1023
+ "dev": true,
1024
+ "funding": {
1025
+ "url": "https://github.com/sponsors/ljharb"
1026
+ }
1027
+ },
1028
+ "node_modules/get-intrinsic": {
1029
+ "version": "1.2.7",
1030
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.7.tgz",
1031
+ "integrity": "sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==",
1032
+ "dev": true,
1033
+ "dependencies": {
1034
+ "call-bind-apply-helpers": "^1.0.1",
1035
+ "es-define-property": "^1.0.1",
1036
+ "es-errors": "^1.3.0",
1037
+ "es-object-atoms": "^1.0.0",
1038
+ "function-bind": "^1.1.2",
1039
+ "get-proto": "^1.0.0",
1040
+ "gopd": "^1.2.0",
1041
+ "has-symbols": "^1.1.0",
1042
+ "hasown": "^2.0.2",
1043
+ "math-intrinsics": "^1.1.0"
1044
+ },
1045
+ "engines": {
1046
+ "node": ">= 0.4"
1047
+ },
1048
+ "funding": {
1049
+ "url": "https://github.com/sponsors/ljharb"
1050
+ }
1051
+ },
1052
+ "node_modules/get-proto": {
1053
+ "version": "1.0.1",
1054
+ "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
1055
+ "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
1056
+ "dev": true,
1057
+ "dependencies": {
1058
+ "dunder-proto": "^1.0.1",
1059
+ "es-object-atoms": "^1.0.0"
1060
+ },
1061
+ "engines": {
1062
+ "node": ">= 0.4"
1063
+ }
1064
+ },
1065
+ "node_modules/glob": {
1066
+ "version": "10.4.5",
1067
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
1068
+ "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
1069
+ "dev": true,
1070
+ "dependencies": {
1071
+ "foreground-child": "^3.1.0",
1072
+ "jackspeak": "^3.1.2",
1073
+ "minimatch": "^9.0.4",
1074
+ "minipass": "^7.1.2",
1075
+ "package-json-from-dist": "^1.0.0",
1076
+ "path-scurry": "^1.11.1"
1077
+ },
1078
+ "bin": {
1079
+ "glob": "dist/esm/bin.mjs"
1080
+ },
1081
+ "funding": {
1082
+ "url": "https://github.com/sponsors/isaacs"
1083
+ }
1084
+ },
1085
+ "node_modules/glob-parent": {
1086
+ "version": "5.1.2",
1087
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
1088
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
1089
+ "dev": true,
1090
+ "dependencies": {
1091
+ "is-glob": "^4.0.1"
1092
+ },
1093
+ "engines": {
1094
+ "node": ">= 6"
1095
+ }
1096
+ },
1097
+ "node_modules/gopd": {
1098
+ "version": "1.2.0",
1099
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
1100
+ "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
1101
+ "dev": true,
1102
+ "engines": {
1103
+ "node": ">= 0.4"
1104
+ },
1105
+ "funding": {
1106
+ "url": "https://github.com/sponsors/ljharb"
1107
+ }
1108
+ },
1109
+ "node_modules/graceful-fs": {
1110
+ "version": "4.2.11",
1111
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
1112
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
1113
+ "dev": true
1114
+ },
1115
+ "node_modules/has-flag": {
1116
+ "version": "4.0.0",
1117
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
1118
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
1119
+ "dev": true,
1120
+ "engines": {
1121
+ "node": ">=8"
1122
+ }
1123
+ },
1124
+ "node_modules/has-property-descriptors": {
1125
+ "version": "1.0.2",
1126
+ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
1127
+ "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
1128
+ "dev": true,
1129
+ "dependencies": {
1130
+ "es-define-property": "^1.0.0"
1131
+ },
1132
+ "funding": {
1133
+ "url": "https://github.com/sponsors/ljharb"
1134
+ }
1135
+ },
1136
+ "node_modules/has-symbols": {
1137
+ "version": "1.1.0",
1138
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
1139
+ "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
1140
+ "dev": true,
1141
+ "engines": {
1142
+ "node": ">= 0.4"
1143
+ },
1144
+ "funding": {
1145
+ "url": "https://github.com/sponsors/ljharb"
1146
+ }
1147
+ },
1148
+ "node_modules/hasown": {
1149
+ "version": "2.0.2",
1150
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
1151
+ "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
1152
+ "dev": true,
1153
+ "dependencies": {
1154
+ "function-bind": "^1.1.2"
1155
+ },
1156
+ "engines": {
1157
+ "node": ">= 0.4"
1158
+ }
1159
+ },
1160
+ "node_modules/he": {
1161
+ "version": "1.2.0",
1162
+ "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
1163
+ "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
1164
+ "dev": true,
1165
+ "bin": {
1166
+ "he": "bin/he"
1167
+ }
1168
+ },
1169
+ "node_modules/html-validate": {
1170
+ "version": "7.18.1",
1171
+ "resolved": "https://registry.npmjs.org/html-validate/-/html-validate-7.18.1.tgz",
1172
+ "integrity": "sha512-K5jb0h/xAoeR8sJqyR0n/QaKL7rdT88sPCtN+Pvtyn5JUU+nidQe2gBB09WRzPTcQtPXBj4QxBUH5IA2tt8JQg==",
1173
+ "dev": true,
1174
+ "workspaces": [
1175
+ "docs"
1176
+ ],
1177
+ "dependencies": {
1178
+ "@babel/code-frame": "^7.10.0",
1179
+ "@html-validate/stylish": "^4.0.1",
1180
+ "@sidvind/better-ajv-errors": "^2.0.0",
1181
+ "acorn-walk": "^8.0.0",
1182
+ "ajv": "^8.0.0",
1183
+ "deepmerge": "^4.2.0",
1184
+ "espree": "^9.0.0",
1185
+ "glob": "^10.0.0",
1186
+ "ignore": "^5.0.0",
1187
+ "kleur": "^4.1.0",
1188
+ "minimist": "^1.2.0",
1189
+ "prompts": "^2.0.0",
1190
+ "semver": "^7.0.0"
1191
+ },
1192
+ "bin": {
1193
+ "html-validate": "bin/html-validate.js"
1194
+ },
1195
+ "engines": {
1196
+ "node": ">= 14.0"
1197
+ },
1198
+ "peerDependencies": {
1199
+ "jest": "^25.1 || ^26 || ^27.1 || ^28.1.3 || ^29.0.3",
1200
+ "jest-diff": "^25.1 || ^26 || ^27.1 || ^28.1.3 || ^29.0.3",
1201
+ "jest-snapshot": "^25.1 || ^26 || ^27.1 || ^28.1.3 || ^29.0.3"
1202
+ },
1203
+ "peerDependenciesMeta": {
1204
+ "jest": {
1205
+ "optional": true
1206
+ },
1207
+ "jest-diff": {
1208
+ "optional": true
1209
+ },
1210
+ "jest-snapshot": {
1211
+ "optional": true
1212
+ }
1213
+ }
1214
+ },
1215
+ "node_modules/http-errors": {
1216
+ "version": "1.8.1",
1217
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz",
1218
+ "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==",
1219
+ "dev": true,
1220
+ "dependencies": {
1221
+ "depd": "~1.1.2",
1222
+ "inherits": "2.0.4",
1223
+ "setprototypeof": "1.2.0",
1224
+ "statuses": ">= 1.5.0 < 2",
1225
+ "toidentifier": "1.0.1"
1226
+ },
1227
+ "engines": {
1228
+ "node": ">= 0.6"
1229
+ }
1230
+ },
1231
+ "node_modules/http-errors/node_modules/statuses": {
1232
+ "version": "1.5.0",
1233
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
1234
+ "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==",
1235
+ "dev": true,
1236
+ "engines": {
1237
+ "node": ">= 0.6"
1238
+ }
1239
+ },
1240
+ "node_modules/ignore": {
1241
+ "version": "5.3.2",
1242
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
1243
+ "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
1244
+ "dev": true,
1245
+ "engines": {
1246
+ "node": ">= 4"
1247
+ }
1248
+ },
1249
+ "node_modules/inflight": {
1250
+ "version": "1.0.6",
1251
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
1252
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
1253
+ "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.",
1254
+ "dev": true,
1255
+ "dependencies": {
1256
+ "once": "^1.3.0",
1257
+ "wrappy": "1"
1258
+ }
1259
+ },
1260
+ "node_modules/inherits": {
1261
+ "version": "2.0.4",
1262
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
1263
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
1264
+ "dev": true
1265
+ },
1266
+ "node_modules/ipaddr.js": {
1267
+ "version": "1.9.1",
1268
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
1269
+ "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
1270
+ "dev": true,
1271
+ "engines": {
1272
+ "node": ">= 0.10"
1273
+ }
1274
+ },
1275
+ "node_modules/is-binary-path": {
1276
+ "version": "2.1.0",
1277
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
1278
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
1279
+ "dev": true,
1280
+ "dependencies": {
1281
+ "binary-extensions": "^2.0.0"
1282
+ },
1283
+ "engines": {
1284
+ "node": ">=8"
1285
+ }
1286
+ },
1287
+ "node_modules/is-docker": {
1288
+ "version": "3.0.0",
1289
+ "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz",
1290
+ "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==",
1291
+ "dev": true,
1292
+ "bin": {
1293
+ "is-docker": "cli.js"
1294
+ },
1295
+ "engines": {
1296
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
1297
+ },
1298
+ "funding": {
1299
+ "url": "https://github.com/sponsors/sindresorhus"
1300
+ }
1301
+ },
1302
+ "node_modules/is-extglob": {
1303
+ "version": "2.1.1",
1304
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
1305
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
1306
+ "dev": true,
1307
+ "engines": {
1308
+ "node": ">=0.10.0"
1309
+ }
1310
+ },
1311
+ "node_modules/is-fullwidth-code-point": {
1312
+ "version": "3.0.0",
1313
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
1314
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
1315
+ "dev": true,
1316
+ "engines": {
1317
+ "node": ">=8"
1318
+ }
1319
+ },
1320
+ "node_modules/is-glob": {
1321
+ "version": "4.0.3",
1322
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
1323
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
1324
+ "dev": true,
1325
+ "dependencies": {
1326
+ "is-extglob": "^2.1.1"
1327
+ },
1328
+ "engines": {
1329
+ "node": ">=0.10.0"
1330
+ }
1331
+ },
1332
+ "node_modules/is-inside-container": {
1333
+ "version": "1.0.0",
1334
+ "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz",
1335
+ "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==",
1336
+ "dev": true,
1337
+ "dependencies": {
1338
+ "is-docker": "^3.0.0"
1339
+ },
1340
+ "bin": {
1341
+ "is-inside-container": "cli.js"
1342
+ },
1343
+ "engines": {
1344
+ "node": ">=14.16"
1345
+ },
1346
+ "funding": {
1347
+ "url": "https://github.com/sponsors/sindresorhus"
1348
+ }
1349
+ },
1350
+ "node_modules/is-number": {
1351
+ "version": "7.0.0",
1352
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
1353
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
1354
+ "dev": true,
1355
+ "engines": {
1356
+ "node": ">=0.12.0"
1357
+ }
1358
+ },
1359
+ "node_modules/is-wsl": {
1360
+ "version": "3.1.0",
1361
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz",
1362
+ "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==",
1363
+ "dev": true,
1364
+ "dependencies": {
1365
+ "is-inside-container": "^1.0.0"
1366
+ },
1367
+ "engines": {
1368
+ "node": ">=16"
1369
+ },
1370
+ "funding": {
1371
+ "url": "https://github.com/sponsors/sindresorhus"
1372
+ }
1373
+ },
1374
+ "node_modules/isarray": {
1375
+ "version": "2.0.5",
1376
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
1377
+ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
1378
+ "dev": true
1379
+ },
1380
+ "node_modules/isexe": {
1381
+ "version": "2.0.0",
1382
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
1383
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
1384
+ "dev": true
1385
+ },
1386
+ "node_modules/jackspeak": {
1387
+ "version": "3.4.3",
1388
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
1389
+ "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
1390
+ "dev": true,
1391
+ "dependencies": {
1392
+ "@isaacs/cliui": "^8.0.2"
1393
+ },
1394
+ "funding": {
1395
+ "url": "https://github.com/sponsors/isaacs"
1396
+ },
1397
+ "optionalDependencies": {
1398
+ "@pkgjs/parseargs": "^0.11.0"
1399
+ }
1400
+ },
1401
+ "node_modules/js-tokens": {
1402
+ "version": "4.0.0",
1403
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
1404
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
1405
+ "dev": true
1406
+ },
1407
+ "node_modules/json-schema-traverse": {
1408
+ "version": "1.0.0",
1409
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
1410
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
1411
+ "dev": true
1412
+ },
1413
+ "node_modules/json-stable-stringify": {
1414
+ "version": "1.2.1",
1415
+ "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.2.1.tgz",
1416
+ "integrity": "sha512-Lp6HbbBgosLmJbjx0pBLbgvx68FaFU1sdkmBuckmhhJ88kL13OA51CDtR2yJB50eCNMH9wRqtQNNiAqQH4YXnA==",
1417
+ "dev": true,
1418
+ "dependencies": {
1419
+ "call-bind": "^1.0.8",
1420
+ "call-bound": "^1.0.3",
1421
+ "isarray": "^2.0.5",
1422
+ "jsonify": "^0.0.1",
1423
+ "object-keys": "^1.1.1"
1424
+ },
1425
+ "engines": {
1426
+ "node": ">= 0.4"
1427
+ },
1428
+ "funding": {
1429
+ "url": "https://github.com/sponsors/ljharb"
1430
+ }
1431
+ },
1432
+ "node_modules/jsonfile": {
1433
+ "version": "6.1.0",
1434
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
1435
+ "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
1436
+ "dev": true,
1437
+ "dependencies": {
1438
+ "universalify": "^2.0.0"
1439
+ },
1440
+ "optionalDependencies": {
1441
+ "graceful-fs": "^4.1.6"
1442
+ }
1443
+ },
1444
+ "node_modules/jsonify": {
1445
+ "version": "0.0.1",
1446
+ "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz",
1447
+ "integrity": "sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==",
1448
+ "dev": true,
1449
+ "funding": {
1450
+ "url": "https://github.com/sponsors/ljharb"
1451
+ }
1452
+ },
1453
+ "node_modules/klaw-sync": {
1454
+ "version": "6.0.0",
1455
+ "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz",
1456
+ "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==",
1457
+ "dev": true,
1458
+ "dependencies": {
1459
+ "graceful-fs": "^4.1.11"
1460
+ }
1461
+ },
1462
+ "node_modules/kleur": {
1463
+ "version": "4.1.5",
1464
+ "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz",
1465
+ "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==",
1466
+ "dev": true,
1467
+ "engines": {
1468
+ "node": ">=6"
1469
+ }
1470
+ },
1471
+ "node_modules/lru-cache": {
1472
+ "version": "10.4.3",
1473
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
1474
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
1475
+ "dev": true
1476
+ },
1477
+ "node_modules/math-intrinsics": {
1478
+ "version": "1.1.0",
1479
+ "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
1480
+ "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
1481
+ "dev": true,
1482
+ "engines": {
1483
+ "node": ">= 0.4"
1484
+ }
1485
+ },
1486
+ "node_modules/media-typer": {
1487
+ "version": "0.3.0",
1488
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
1489
+ "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
1490
+ "dev": true,
1491
+ "engines": {
1492
+ "node": ">= 0.6"
1493
+ }
1494
+ },
1495
+ "node_modules/merge-descriptors": {
1496
+ "version": "1.0.3",
1497
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz",
1498
+ "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==",
1499
+ "dev": true,
1500
+ "funding": {
1501
+ "url": "https://github.com/sponsors/sindresorhus"
1502
+ }
1503
+ },
1504
+ "node_modules/methods": {
1505
+ "version": "1.1.2",
1506
+ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
1507
+ "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
1508
+ "dev": true,
1509
+ "engines": {
1510
+ "node": ">= 0.6"
1511
+ }
1512
+ },
1513
+ "node_modules/micromatch": {
1514
+ "version": "4.0.8",
1515
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
1516
+ "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
1517
+ "dev": true,
1518
+ "dependencies": {
1519
+ "braces": "^3.0.3",
1520
+ "picomatch": "^2.3.1"
1521
+ },
1522
+ "engines": {
1523
+ "node": ">=8.6"
1524
+ }
1525
+ },
1526
+ "node_modules/mime": {
1527
+ "version": "1.6.0",
1528
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
1529
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
1530
+ "dev": true,
1531
+ "bin": {
1532
+ "mime": "cli.js"
1533
+ },
1534
+ "engines": {
1535
+ "node": ">=4"
1536
+ }
1537
+ },
1538
+ "node_modules/mime-db": {
1539
+ "version": "1.52.0",
1540
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
1541
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
1542
+ "dev": true,
1543
+ "engines": {
1544
+ "node": ">= 0.6"
1545
+ }
1546
+ },
1547
+ "node_modules/mime-types": {
1548
+ "version": "2.1.35",
1549
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
1550
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
1551
+ "dev": true,
1552
+ "dependencies": {
1553
+ "mime-db": "1.52.0"
1554
+ },
1555
+ "engines": {
1556
+ "node": ">= 0.6"
1557
+ }
1558
+ },
1559
+ "node_modules/minimatch": {
1560
+ "version": "9.0.5",
1561
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
1562
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
1563
+ "dev": true,
1564
+ "dependencies": {
1565
+ "brace-expansion": "^2.0.1"
1566
+ },
1567
+ "engines": {
1568
+ "node": ">=16 || 14 >=14.17"
1569
+ },
1570
+ "funding": {
1571
+ "url": "https://github.com/sponsors/isaacs"
1572
+ }
1573
+ },
1574
+ "node_modules/minimist": {
1575
+ "version": "1.2.8",
1576
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
1577
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
1578
+ "dev": true,
1579
+ "funding": {
1580
+ "url": "https://github.com/sponsors/ljharb"
1581
+ }
1582
+ },
1583
+ "node_modules/minipass": {
1584
+ "version": "7.1.2",
1585
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
1586
+ "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
1587
+ "dev": true,
1588
+ "engines": {
1589
+ "node": ">=16 || 14 >=14.17"
1590
+ }
1591
+ },
1592
+ "node_modules/ms": {
1593
+ "version": "2.1.3",
1594
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
1595
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
1596
+ "dev": true
1597
+ },
1598
+ "node_modules/negotiator": {
1599
+ "version": "0.6.3",
1600
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
1601
+ "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
1602
+ "dev": true,
1603
+ "engines": {
1604
+ "node": ">= 0.6"
1605
+ }
1606
+ },
1607
+ "node_modules/node-forge": {
1608
+ "version": "1.3.1",
1609
+ "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz",
1610
+ "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==",
1611
+ "dev": true,
1612
+ "engines": {
1613
+ "node": ">= 6.13.0"
1614
+ }
1615
+ },
1616
+ "node_modules/node-html-parser": {
1617
+ "version": "5.4.2",
1618
+ "resolved": "https://registry.npmjs.org/node-html-parser/-/node-html-parser-5.4.2.tgz",
1619
+ "integrity": "sha512-RaBPP3+51hPne/OolXxcz89iYvQvKOydaqoePpOgXcrOKZhjVIzmpKZz+Hd/RBO2/zN2q6CNJhQzucVz+u3Jyw==",
1620
+ "dev": true,
1621
+ "dependencies": {
1622
+ "css-select": "^4.2.1",
1623
+ "he": "1.2.0"
1624
+ }
1625
+ },
1626
+ "node_modules/normalize-path": {
1627
+ "version": "3.0.0",
1628
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
1629
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
1630
+ "dev": true,
1631
+ "engines": {
1632
+ "node": ">=0.10.0"
1633
+ }
1634
+ },
1635
+ "node_modules/nth-check": {
1636
+ "version": "2.1.1",
1637
+ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
1638
+ "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==",
1639
+ "dev": true,
1640
+ "dependencies": {
1641
+ "boolbase": "^1.0.0"
1642
+ },
1643
+ "funding": {
1644
+ "url": "https://github.com/fb55/nth-check?sponsor=1"
1645
+ }
1646
+ },
1647
+ "node_modules/object-assign": {
1648
+ "version": "4.1.1",
1649
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
1650
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
1651
+ "dev": true,
1652
+ "engines": {
1653
+ "node": ">=0.10.0"
1654
+ }
1655
+ },
1656
+ "node_modules/object-inspect": {
1657
+ "version": "1.13.3",
1658
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz",
1659
+ "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==",
1660
+ "dev": true,
1661
+ "engines": {
1662
+ "node": ">= 0.4"
1663
+ },
1664
+ "funding": {
1665
+ "url": "https://github.com/sponsors/ljharb"
1666
+ }
1667
+ },
1668
+ "node_modules/object-keys": {
1669
+ "version": "1.1.1",
1670
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
1671
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
1672
+ "dev": true,
1673
+ "engines": {
1674
+ "node": ">= 0.4"
1675
+ }
1676
+ },
1677
+ "node_modules/on-finished": {
1678
+ "version": "2.4.1",
1679
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
1680
+ "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
1681
+ "dev": true,
1682
+ "dependencies": {
1683
+ "ee-first": "1.1.1"
1684
+ },
1685
+ "engines": {
1686
+ "node": ">= 0.8"
1687
+ }
1688
+ },
1689
+ "node_modules/once": {
1690
+ "version": "1.4.0",
1691
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
1692
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
1693
+ "dev": true,
1694
+ "dependencies": {
1695
+ "wrappy": "1"
1696
+ }
1697
+ },
1698
+ "node_modules/open": {
1699
+ "version": "10.1.0",
1700
+ "resolved": "git+ssh://git@github.com/yandeu/open.git#007eaf7e6ec1ef1c9f4a820eb35c9602fcee4dad",
1701
+ "dev": true,
1702
+ "dependencies": {
1703
+ "default-browser": "^5.2.1",
1704
+ "define-lazy-prop": "^3.0.0",
1705
+ "is-inside-container": "^1.0.0",
1706
+ "is-wsl": "^3.1.0"
1707
+ },
1708
+ "engines": {
1709
+ "node": ">=18"
1710
+ },
1711
+ "funding": {
1712
+ "url": "https://github.com/sponsors/sindresorhus"
1713
+ }
1714
+ },
1715
+ "node_modules/os-tmpdir": {
1716
+ "version": "1.0.2",
1717
+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
1718
+ "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==",
1719
+ "dev": true,
1720
+ "engines": {
1721
+ "node": ">=0.10.0"
1722
+ }
1723
+ },
1724
+ "node_modules/package-json-from-dist": {
1725
+ "version": "1.0.1",
1726
+ "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
1727
+ "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
1728
+ "dev": true
1729
+ },
1730
+ "node_modules/parseurl": {
1731
+ "version": "1.3.3",
1732
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
1733
+ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
1734
+ "dev": true,
1735
+ "engines": {
1736
+ "node": ">= 0.8"
1737
+ }
1738
+ },
1739
+ "node_modules/patch-package": {
1740
+ "version": "8.0.0",
1741
+ "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-8.0.0.tgz",
1742
+ "integrity": "sha512-da8BVIhzjtgScwDJ2TtKsfT5JFWz1hYoBl9rUQ1f38MC2HwnEIkK8VN3dKMKcP7P7bvvgzNDbfNHtx3MsQb5vA==",
1743
+ "dev": true,
1744
+ "dependencies": {
1745
+ "@yarnpkg/lockfile": "^1.1.0",
1746
+ "chalk": "^4.1.2",
1747
+ "ci-info": "^3.7.0",
1748
+ "cross-spawn": "^7.0.3",
1749
+ "find-yarn-workspace-root": "^2.0.0",
1750
+ "fs-extra": "^9.0.0",
1751
+ "json-stable-stringify": "^1.0.2",
1752
+ "klaw-sync": "^6.0.0",
1753
+ "minimist": "^1.2.6",
1754
+ "open": "^7.4.2",
1755
+ "rimraf": "^2.6.3",
1756
+ "semver": "^7.5.3",
1757
+ "slash": "^2.0.0",
1758
+ "tmp": "^0.0.33",
1759
+ "yaml": "^2.2.2"
1760
+ },
1761
+ "bin": {
1762
+ "patch-package": "index.js"
1763
+ },
1764
+ "engines": {
1765
+ "node": ">=14",
1766
+ "npm": ">5"
1767
+ }
1768
+ },
1769
+ "node_modules/patch-package/node_modules/is-docker": {
1770
+ "version": "2.2.1",
1771
+ "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
1772
+ "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==",
1773
+ "dev": true,
1774
+ "bin": {
1775
+ "is-docker": "cli.js"
1776
+ },
1777
+ "engines": {
1778
+ "node": ">=8"
1779
+ },
1780
+ "funding": {
1781
+ "url": "https://github.com/sponsors/sindresorhus"
1782
+ }
1783
+ },
1784
+ "node_modules/patch-package/node_modules/is-wsl": {
1785
+ "version": "2.2.0",
1786
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
1787
+ "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
1788
+ "dev": true,
1789
+ "dependencies": {
1790
+ "is-docker": "^2.0.0"
1791
+ },
1792
+ "engines": {
1793
+ "node": ">=8"
1794
+ }
1795
+ },
1796
+ "node_modules/patch-package/node_modules/open": {
1797
+ "version": "7.4.2",
1798
+ "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz",
1799
+ "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==",
1800
+ "dev": true,
1801
+ "dependencies": {
1802
+ "is-docker": "^2.0.0",
1803
+ "is-wsl": "^2.1.1"
1804
+ },
1805
+ "engines": {
1806
+ "node": ">=8"
1807
+ },
1808
+ "funding": {
1809
+ "url": "https://github.com/sponsors/sindresorhus"
1810
+ }
1811
+ },
1812
+ "node_modules/path-is-absolute": {
1813
+ "version": "1.0.1",
1814
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
1815
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
1816
+ "dev": true,
1817
+ "engines": {
1818
+ "node": ">=0.10.0"
1819
+ }
1820
+ },
1821
+ "node_modules/path-key": {
1822
+ "version": "3.1.1",
1823
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
1824
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
1825
+ "dev": true,
1826
+ "engines": {
1827
+ "node": ">=8"
1828
+ }
1829
+ },
1830
+ "node_modules/path-scurry": {
1831
+ "version": "1.11.1",
1832
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
1833
+ "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
1834
+ "dev": true,
1835
+ "dependencies": {
1836
+ "lru-cache": "^10.2.0",
1837
+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
1838
+ },
1839
+ "engines": {
1840
+ "node": ">=16 || 14 >=14.18"
1841
+ },
1842
+ "funding": {
1843
+ "url": "https://github.com/sponsors/isaacs"
1844
+ }
1845
+ },
1846
+ "node_modules/path-to-regexp": {
1847
+ "version": "0.1.12",
1848
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz",
1849
+ "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==",
1850
+ "dev": true
1851
+ },
1852
+ "node_modules/picocolors": {
1853
+ "version": "1.1.1",
1854
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
1855
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
1856
+ "dev": true
1857
+ },
1858
+ "node_modules/picomatch": {
1859
+ "version": "2.3.1",
1860
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
1861
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
1862
+ "dev": true,
1863
+ "engines": {
1864
+ "node": ">=8.6"
1865
+ },
1866
+ "funding": {
1867
+ "url": "https://github.com/sponsors/jonschlinkert"
1868
+ }
1869
+ },
1870
+ "node_modules/prettier": {
1871
+ "version": "3.4.2",
1872
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.4.2.tgz",
1873
+ "integrity": "sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==",
1874
+ "dev": true,
1875
+ "bin": {
1876
+ "prettier": "bin/prettier.cjs"
1877
+ },
1878
+ "engines": {
1879
+ "node": ">=14"
1880
+ },
1881
+ "funding": {
1882
+ "url": "https://github.com/prettier/prettier?sponsor=1"
1883
+ }
1884
+ },
1885
+ "node_modules/prompts": {
1886
+ "version": "2.4.2",
1887
+ "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz",
1888
+ "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==",
1889
+ "dev": true,
1890
+ "dependencies": {
1891
+ "kleur": "^3.0.3",
1892
+ "sisteransi": "^1.0.5"
1893
+ },
1894
+ "engines": {
1895
+ "node": ">= 6"
1896
+ }
1897
+ },
1898
+ "node_modules/prompts/node_modules/kleur": {
1899
+ "version": "3.0.3",
1900
+ "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
1901
+ "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
1902
+ "dev": true,
1903
+ "engines": {
1904
+ "node": ">=6"
1905
+ }
1906
+ },
1907
+ "node_modules/proxy-addr": {
1908
+ "version": "2.0.7",
1909
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
1910
+ "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
1911
+ "dev": true,
1912
+ "dependencies": {
1913
+ "forwarded": "0.2.0",
1914
+ "ipaddr.js": "1.9.1"
1915
+ },
1916
+ "engines": {
1917
+ "node": ">= 0.10"
1918
+ }
1919
+ },
1920
+ "node_modules/qs": {
1921
+ "version": "6.14.0",
1922
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz",
1923
+ "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==",
1924
+ "dev": true,
1925
+ "dependencies": {
1926
+ "side-channel": "^1.1.0"
1927
+ },
1928
+ "engines": {
1929
+ "node": ">=0.6"
1930
+ },
1931
+ "funding": {
1932
+ "url": "https://github.com/sponsors/ljharb"
1933
+ }
1934
+ },
1935
+ "node_modules/range-parser": {
1936
+ "version": "1.2.1",
1937
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
1938
+ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
1939
+ "dev": true,
1940
+ "engines": {
1941
+ "node": ">= 0.6"
1942
+ }
1943
+ },
1944
+ "node_modules/readdirp": {
1945
+ "version": "3.6.0",
1946
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
1947
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
1948
+ "dev": true,
1949
+ "dependencies": {
1950
+ "picomatch": "^2.2.1"
1951
+ },
1952
+ "engines": {
1953
+ "node": ">=8.10.0"
1954
+ }
1955
+ },
1956
+ "node_modules/require-from-string": {
1957
+ "version": "2.0.2",
1958
+ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
1959
+ "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
1960
+ "dev": true,
1961
+ "engines": {
1962
+ "node": ">=0.10.0"
1963
+ }
1964
+ },
1965
+ "node_modules/rimraf": {
1966
+ "version": "2.7.1",
1967
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
1968
+ "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
1969
+ "deprecated": "Rimraf versions prior to v4 are no longer supported",
1970
+ "dev": true,
1971
+ "dependencies": {
1972
+ "glob": "^7.1.3"
1973
+ },
1974
+ "bin": {
1975
+ "rimraf": "bin.js"
1976
+ }
1977
+ },
1978
+ "node_modules/rimraf/node_modules/brace-expansion": {
1979
+ "version": "1.1.11",
1980
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
1981
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
1982
+ "dev": true,
1983
+ "dependencies": {
1984
+ "balanced-match": "^1.0.0",
1985
+ "concat-map": "0.0.1"
1986
+ }
1987
+ },
1988
+ "node_modules/rimraf/node_modules/glob": {
1989
+ "version": "7.2.3",
1990
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
1991
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
1992
+ "deprecated": "Glob versions prior to v9 are no longer supported",
1993
+ "dev": true,
1994
+ "dependencies": {
1995
+ "fs.realpath": "^1.0.0",
1996
+ "inflight": "^1.0.4",
1997
+ "inherits": "2",
1998
+ "minimatch": "^3.1.1",
1999
+ "once": "^1.3.0",
2000
+ "path-is-absolute": "^1.0.0"
2001
+ },
2002
+ "engines": {
2003
+ "node": "*"
2004
+ },
2005
+ "funding": {
2006
+ "url": "https://github.com/sponsors/isaacs"
2007
+ }
2008
+ },
2009
+ "node_modules/rimraf/node_modules/minimatch": {
2010
+ "version": "3.1.2",
2011
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
2012
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
2013
+ "dev": true,
2014
+ "dependencies": {
2015
+ "brace-expansion": "^1.1.7"
2016
+ },
2017
+ "engines": {
2018
+ "node": "*"
2019
+ }
2020
+ },
2021
+ "node_modules/run-applescript": {
2022
+ "version": "7.0.0",
2023
+ "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz",
2024
+ "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==",
2025
+ "dev": true,
2026
+ "engines": {
2027
+ "node": ">=18"
2028
+ },
2029
+ "funding": {
2030
+ "url": "https://github.com/sponsors/sindresorhus"
2031
+ }
2032
+ },
2033
+ "node_modules/safe-buffer": {
2034
+ "version": "5.2.1",
2035
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
2036
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
2037
+ "dev": true,
2038
+ "funding": [
2039
+ {
2040
+ "type": "github",
2041
+ "url": "https://github.com/sponsors/feross"
2042
+ },
2043
+ {
2044
+ "type": "patreon",
2045
+ "url": "https://www.patreon.com/feross"
2046
+ },
2047
+ {
2048
+ "type": "consulting",
2049
+ "url": "https://feross.org/support"
2050
+ }
2051
+ ]
2052
+ },
2053
+ "node_modules/selfsigned": {
2054
+ "version": "2.4.1",
2055
+ "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz",
2056
+ "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==",
2057
+ "dev": true,
2058
+ "dependencies": {
2059
+ "@types/node-forge": "^1.3.0",
2060
+ "node-forge": "^1"
2061
+ },
2062
+ "engines": {
2063
+ "node": ">=10"
2064
+ }
2065
+ },
2066
+ "node_modules/semver": {
2067
+ "version": "7.7.0",
2068
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.0.tgz",
2069
+ "integrity": "sha512-DrfFnPzblFmNrIZzg5RzHegbiRWg7KMR7btwi2yjHwx06zsUbO5g613sVwEV7FTwmzJu+Io0lJe2GJ3LxqpvBQ==",
2070
+ "dev": true,
2071
+ "bin": {
2072
+ "semver": "bin/semver.js"
2073
+ },
2074
+ "engines": {
2075
+ "node": ">=10"
2076
+ }
2077
+ },
2078
+ "node_modules/send": {
2079
+ "version": "0.17.2",
2080
+ "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz",
2081
+ "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==",
2082
+ "dev": true,
2083
+ "dependencies": {
2084
+ "debug": "2.6.9",
2085
+ "depd": "~1.1.2",
2086
+ "destroy": "~1.0.4",
2087
+ "encodeurl": "~1.0.2",
2088
+ "escape-html": "~1.0.3",
2089
+ "etag": "~1.8.1",
2090
+ "fresh": "0.5.2",
2091
+ "http-errors": "1.8.1",
2092
+ "mime": "1.6.0",
2093
+ "ms": "2.1.3",
2094
+ "on-finished": "~2.3.0",
2095
+ "range-parser": "~1.2.1",
2096
+ "statuses": "~1.5.0"
2097
+ },
2098
+ "engines": {
2099
+ "node": ">= 0.8.0"
2100
+ }
2101
+ },
2102
+ "node_modules/send/node_modules/debug": {
2103
+ "version": "2.6.9",
2104
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
2105
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
2106
+ "dev": true,
2107
+ "dependencies": {
2108
+ "ms": "2.0.0"
2109
+ }
2110
+ },
2111
+ "node_modules/send/node_modules/debug/node_modules/ms": {
2112
+ "version": "2.0.0",
2113
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
2114
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
2115
+ "dev": true
2116
+ },
2117
+ "node_modules/send/node_modules/on-finished": {
2118
+ "version": "2.3.0",
2119
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
2120
+ "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==",
2121
+ "dev": true,
2122
+ "dependencies": {
2123
+ "ee-first": "1.1.1"
2124
+ },
2125
+ "engines": {
2126
+ "node": ">= 0.8"
2127
+ }
2128
+ },
2129
+ "node_modules/send/node_modules/statuses": {
2130
+ "version": "1.5.0",
2131
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
2132
+ "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==",
2133
+ "dev": true,
2134
+ "engines": {
2135
+ "node": ">= 0.6"
2136
+ }
2137
+ },
2138
+ "node_modules/serve-static": {
2139
+ "version": "1.16.2",
2140
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz",
2141
+ "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==",
2142
+ "dev": true,
2143
+ "dependencies": {
2144
+ "encodeurl": "~2.0.0",
2145
+ "escape-html": "~1.0.3",
2146
+ "parseurl": "~1.3.3",
2147
+ "send": "0.19.0"
2148
+ },
2149
+ "engines": {
2150
+ "node": ">= 0.8.0"
2151
+ }
2152
+ },
2153
+ "node_modules/serve-static/node_modules/debug": {
2154
+ "version": "2.6.9",
2155
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
2156
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
2157
+ "dev": true,
2158
+ "dependencies": {
2159
+ "ms": "2.0.0"
2160
+ }
2161
+ },
2162
+ "node_modules/serve-static/node_modules/debug/node_modules/ms": {
2163
+ "version": "2.0.0",
2164
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
2165
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
2166
+ "dev": true
2167
+ },
2168
+ "node_modules/serve-static/node_modules/depd": {
2169
+ "version": "2.0.0",
2170
+ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
2171
+ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
2172
+ "dev": true,
2173
+ "engines": {
2174
+ "node": ">= 0.8"
2175
+ }
2176
+ },
2177
+ "node_modules/serve-static/node_modules/destroy": {
2178
+ "version": "1.2.0",
2179
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
2180
+ "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
2181
+ "dev": true,
2182
+ "engines": {
2183
+ "node": ">= 0.8",
2184
+ "npm": "1.2.8000 || >= 1.4.16"
2185
+ }
2186
+ },
2187
+ "node_modules/serve-static/node_modules/encodeurl": {
2188
+ "version": "2.0.0",
2189
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
2190
+ "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",
2191
+ "dev": true,
2192
+ "engines": {
2193
+ "node": ">= 0.8"
2194
+ }
2195
+ },
2196
+ "node_modules/serve-static/node_modules/http-errors": {
2197
+ "version": "2.0.0",
2198
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
2199
+ "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
2200
+ "dev": true,
2201
+ "dependencies": {
2202
+ "depd": "2.0.0",
2203
+ "inherits": "2.0.4",
2204
+ "setprototypeof": "1.2.0",
2205
+ "statuses": "2.0.1",
2206
+ "toidentifier": "1.0.1"
2207
+ },
2208
+ "engines": {
2209
+ "node": ">= 0.8"
2210
+ }
2211
+ },
2212
+ "node_modules/serve-static/node_modules/send": {
2213
+ "version": "0.19.0",
2214
+ "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz",
2215
+ "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==",
2216
+ "dev": true,
2217
+ "dependencies": {
2218
+ "debug": "2.6.9",
2219
+ "depd": "2.0.0",
2220
+ "destroy": "1.2.0",
2221
+ "encodeurl": "~1.0.2",
2222
+ "escape-html": "~1.0.3",
2223
+ "etag": "~1.8.1",
2224
+ "fresh": "0.5.2",
2225
+ "http-errors": "2.0.0",
2226
+ "mime": "1.6.0",
2227
+ "ms": "2.1.3",
2228
+ "on-finished": "2.4.1",
2229
+ "range-parser": "~1.2.1",
2230
+ "statuses": "2.0.1"
2231
+ },
2232
+ "engines": {
2233
+ "node": ">= 0.8.0"
2234
+ }
2235
+ },
2236
+ "node_modules/serve-static/node_modules/send/node_modules/encodeurl": {
2237
+ "version": "1.0.2",
2238
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
2239
+ "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
2240
+ "dev": true,
2241
+ "engines": {
2242
+ "node": ">= 0.8"
2243
+ }
2244
+ },
2245
+ "node_modules/set-function-length": {
2246
+ "version": "1.2.2",
2247
+ "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
2248
+ "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
2249
+ "dev": true,
2250
+ "dependencies": {
2251
+ "define-data-property": "^1.1.4",
2252
+ "es-errors": "^1.3.0",
2253
+ "function-bind": "^1.1.2",
2254
+ "get-intrinsic": "^1.2.4",
2255
+ "gopd": "^1.0.1",
2256
+ "has-property-descriptors": "^1.0.2"
2257
+ },
2258
+ "engines": {
2259
+ "node": ">= 0.4"
2260
+ }
2261
+ },
2262
+ "node_modules/setprototypeof": {
2263
+ "version": "1.2.0",
2264
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
2265
+ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
2266
+ "dev": true
2267
+ },
2268
+ "node_modules/shebang-command": {
2269
+ "version": "2.0.0",
2270
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
2271
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
2272
+ "dev": true,
2273
+ "dependencies": {
2274
+ "shebang-regex": "^3.0.0"
2275
+ },
2276
+ "engines": {
2277
+ "node": ">=8"
2278
+ }
2279
+ },
2280
+ "node_modules/shebang-regex": {
2281
+ "version": "3.0.0",
2282
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
2283
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
2284
+ "dev": true,
2285
+ "engines": {
2286
+ "node": ">=8"
2287
+ }
2288
+ },
2289
+ "node_modules/side-channel": {
2290
+ "version": "1.1.0",
2291
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz",
2292
+ "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==",
2293
+ "dev": true,
2294
+ "dependencies": {
2295
+ "es-errors": "^1.3.0",
2296
+ "object-inspect": "^1.13.3",
2297
+ "side-channel-list": "^1.0.0",
2298
+ "side-channel-map": "^1.0.1",
2299
+ "side-channel-weakmap": "^1.0.2"
2300
+ },
2301
+ "engines": {
2302
+ "node": ">= 0.4"
2303
+ },
2304
+ "funding": {
2305
+ "url": "https://github.com/sponsors/ljharb"
2306
+ }
2307
+ },
2308
+ "node_modules/side-channel-list": {
2309
+ "version": "1.0.0",
2310
+ "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz",
2311
+ "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==",
2312
+ "dev": true,
2313
+ "dependencies": {
2314
+ "es-errors": "^1.3.0",
2315
+ "object-inspect": "^1.13.3"
2316
+ },
2317
+ "engines": {
2318
+ "node": ">= 0.4"
2319
+ },
2320
+ "funding": {
2321
+ "url": "https://github.com/sponsors/ljharb"
2322
+ }
2323
+ },
2324
+ "node_modules/side-channel-map": {
2325
+ "version": "1.0.1",
2326
+ "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz",
2327
+ "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",
2328
+ "dev": true,
2329
+ "dependencies": {
2330
+ "call-bound": "^1.0.2",
2331
+ "es-errors": "^1.3.0",
2332
+ "get-intrinsic": "^1.2.5",
2333
+ "object-inspect": "^1.13.3"
2334
+ },
2335
+ "engines": {
2336
+ "node": ">= 0.4"
2337
+ },
2338
+ "funding": {
2339
+ "url": "https://github.com/sponsors/ljharb"
2340
+ }
2341
+ },
2342
+ "node_modules/side-channel-weakmap": {
2343
+ "version": "1.0.2",
2344
+ "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz",
2345
+ "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",
2346
+ "dev": true,
2347
+ "dependencies": {
2348
+ "call-bound": "^1.0.2",
2349
+ "es-errors": "^1.3.0",
2350
+ "get-intrinsic": "^1.2.5",
2351
+ "object-inspect": "^1.13.3",
2352
+ "side-channel-map": "^1.0.1"
2353
+ },
2354
+ "engines": {
2355
+ "node": ">= 0.4"
2356
+ },
2357
+ "funding": {
2358
+ "url": "https://github.com/sponsors/ljharb"
2359
+ }
2360
+ },
2361
+ "node_modules/signal-exit": {
2362
+ "version": "4.1.0",
2363
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
2364
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
2365
+ "dev": true,
2366
+ "engines": {
2367
+ "node": ">=14"
2368
+ },
2369
+ "funding": {
2370
+ "url": "https://github.com/sponsors/isaacs"
2371
+ }
2372
+ },
2373
+ "node_modules/sisteransi": {
2374
+ "version": "1.0.5",
2375
+ "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
2376
+ "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==",
2377
+ "dev": true
2378
+ },
2379
+ "node_modules/slash": {
2380
+ "version": "2.0.0",
2381
+ "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz",
2382
+ "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==",
2383
+ "dev": true,
2384
+ "engines": {
2385
+ "node": ">=6"
2386
+ }
2387
+ },
2388
+ "node_modules/statuses": {
2389
+ "version": "2.0.1",
2390
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
2391
+ "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
2392
+ "dev": true,
2393
+ "engines": {
2394
+ "node": ">= 0.8"
2395
+ }
2396
+ },
2397
+ "node_modules/string-width": {
2398
+ "version": "5.1.2",
2399
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
2400
+ "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
2401
+ "dev": true,
2402
+ "dependencies": {
2403
+ "eastasianwidth": "^0.2.0",
2404
+ "emoji-regex": "^9.2.2",
2405
+ "strip-ansi": "^7.0.1"
2406
+ },
2407
+ "engines": {
2408
+ "node": ">=12"
2409
+ },
2410
+ "funding": {
2411
+ "url": "https://github.com/sponsors/sindresorhus"
2412
+ }
2413
+ },
2414
+ "node_modules/string-width-cjs": {
2415
+ "name": "string-width",
2416
+ "version": "4.2.3",
2417
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
2418
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
2419
+ "dev": true,
2420
+ "dependencies": {
2421
+ "emoji-regex": "^8.0.0",
2422
+ "is-fullwidth-code-point": "^3.0.0",
2423
+ "strip-ansi": "^6.0.1"
2424
+ },
2425
+ "engines": {
2426
+ "node": ">=8"
2427
+ }
2428
+ },
2429
+ "node_modules/string-width-cjs/node_modules/ansi-regex": {
2430
+ "version": "5.0.1",
2431
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
2432
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
2433
+ "dev": true,
2434
+ "engines": {
2435
+ "node": ">=8"
2436
+ }
2437
+ },
2438
+ "node_modules/string-width-cjs/node_modules/emoji-regex": {
2439
+ "version": "8.0.0",
2440
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
2441
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
2442
+ "dev": true
2443
+ },
2444
+ "node_modules/string-width-cjs/node_modules/strip-ansi": {
2445
+ "version": "6.0.1",
2446
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
2447
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
2448
+ "dev": true,
2449
+ "dependencies": {
2450
+ "ansi-regex": "^5.0.1"
2451
+ },
2452
+ "engines": {
2453
+ "node": ">=8"
2454
+ }
2455
+ },
2456
+ "node_modules/strip-ansi": {
2457
+ "version": "7.1.0",
2458
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
2459
+ "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
2460
+ "dev": true,
2461
+ "dependencies": {
2462
+ "ansi-regex": "^6.0.1"
2463
+ },
2464
+ "engines": {
2465
+ "node": ">=12"
2466
+ },
2467
+ "funding": {
2468
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
2469
+ }
2470
+ },
2471
+ "node_modules/strip-ansi-cjs": {
2472
+ "name": "strip-ansi",
2473
+ "version": "6.0.1",
2474
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
2475
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
2476
+ "dev": true,
2477
+ "dependencies": {
2478
+ "ansi-regex": "^5.0.1"
2479
+ },
2480
+ "engines": {
2481
+ "node": ">=8"
2482
+ }
2483
+ },
2484
+ "node_modules/strip-ansi-cjs/node_modules/ansi-regex": {
2485
+ "version": "5.0.1",
2486
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
2487
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
2488
+ "dev": true,
2489
+ "engines": {
2490
+ "node": ">=8"
2491
+ }
2492
+ },
2493
+ "node_modules/supports-color": {
2494
+ "version": "7.2.0",
2495
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
2496
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
2497
+ "dev": true,
2498
+ "dependencies": {
2499
+ "has-flag": "^4.0.0"
2500
+ },
2501
+ "engines": {
2502
+ "node": ">=8"
2503
+ }
2504
+ },
2505
+ "node_modules/tmp": {
2506
+ "version": "0.0.33",
2507
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
2508
+ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
2509
+ "dev": true,
2510
+ "dependencies": {
2511
+ "os-tmpdir": "~1.0.2"
2512
+ },
2513
+ "engines": {
2514
+ "node": ">=0.6.0"
2515
+ }
2516
+ },
2517
+ "node_modules/to-regex-range": {
2518
+ "version": "5.0.1",
2519
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
2520
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
2521
+ "dev": true,
2522
+ "dependencies": {
2523
+ "is-number": "^7.0.0"
2524
+ },
2525
+ "engines": {
2526
+ "node": ">=8.0"
2527
+ }
2528
+ },
2529
+ "node_modules/toidentifier": {
2530
+ "version": "1.0.1",
2531
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
2532
+ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
2533
+ "dev": true,
2534
+ "engines": {
2535
+ "node": ">=0.6"
2536
+ }
2537
+ },
2538
+ "node_modules/type-is": {
2539
+ "version": "1.6.18",
2540
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
2541
+ "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
2542
+ "dev": true,
2543
+ "dependencies": {
2544
+ "media-typer": "0.3.0",
2545
+ "mime-types": "~2.1.24"
2546
+ },
2547
+ "engines": {
2548
+ "node": ">= 0.6"
2549
+ }
2550
+ },
2551
+ "node_modules/undici-types": {
2552
+ "version": "6.20.0",
2553
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz",
2554
+ "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==",
2555
+ "dev": true
2556
+ },
2557
+ "node_modules/universalify": {
2558
+ "version": "2.0.1",
2559
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
2560
+ "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
2561
+ "dev": true,
2562
+ "engines": {
2563
+ "node": ">= 10.0.0"
2564
+ }
2565
+ },
2566
+ "node_modules/unpipe": {
2567
+ "version": "1.0.0",
2568
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
2569
+ "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
2570
+ "dev": true,
2571
+ "engines": {
2572
+ "node": ">= 0.8"
2573
+ }
2574
+ },
2575
+ "node_modules/utils-merge": {
2576
+ "version": "1.0.1",
2577
+ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
2578
+ "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
2579
+ "dev": true,
2580
+ "engines": {
2581
+ "node": ">= 0.4.0"
2582
+ }
2583
+ },
2584
+ "node_modules/vary": {
2585
+ "version": "1.1.2",
2586
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
2587
+ "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
2588
+ "dev": true,
2589
+ "engines": {
2590
+ "node": ">= 0.8"
2591
+ }
2592
+ },
2593
+ "node_modules/which": {
2594
+ "version": "2.0.2",
2595
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
2596
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
2597
+ "dev": true,
2598
+ "dependencies": {
2599
+ "isexe": "^2.0.0"
2600
+ },
2601
+ "bin": {
2602
+ "node-which": "bin/node-which"
2603
+ },
2604
+ "engines": {
2605
+ "node": ">= 8"
2606
+ }
2607
+ },
2608
+ "node_modules/wrap-ansi": {
2609
+ "version": "8.1.0",
2610
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
2611
+ "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
2612
+ "dev": true,
2613
+ "dependencies": {
2614
+ "ansi-styles": "^6.1.0",
2615
+ "string-width": "^5.0.1",
2616
+ "strip-ansi": "^7.0.1"
2617
+ },
2618
+ "engines": {
2619
+ "node": ">=12"
2620
+ },
2621
+ "funding": {
2622
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
2623
+ }
2624
+ },
2625
+ "node_modules/wrap-ansi-cjs": {
2626
+ "name": "wrap-ansi",
2627
+ "version": "7.0.0",
2628
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
2629
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
2630
+ "dev": true,
2631
+ "dependencies": {
2632
+ "ansi-styles": "^4.0.0",
2633
+ "string-width": "^4.1.0",
2634
+ "strip-ansi": "^6.0.0"
2635
+ },
2636
+ "engines": {
2637
+ "node": ">=10"
2638
+ },
2639
+ "funding": {
2640
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
2641
+ }
2642
+ },
2643
+ "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": {
2644
+ "version": "5.0.1",
2645
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
2646
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
2647
+ "dev": true,
2648
+ "engines": {
2649
+ "node": ">=8"
2650
+ }
2651
+ },
2652
+ "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": {
2653
+ "version": "8.0.0",
2654
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
2655
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
2656
+ "dev": true
2657
+ },
2658
+ "node_modules/wrap-ansi-cjs/node_modules/string-width": {
2659
+ "version": "4.2.3",
2660
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
2661
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
2662
+ "dev": true,
2663
+ "dependencies": {
2664
+ "emoji-regex": "^8.0.0",
2665
+ "is-fullwidth-code-point": "^3.0.0",
2666
+ "strip-ansi": "^6.0.1"
2667
+ },
2668
+ "engines": {
2669
+ "node": ">=8"
2670
+ }
2671
+ },
2672
+ "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": {
2673
+ "version": "6.0.1",
2674
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
2675
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
2676
+ "dev": true,
2677
+ "dependencies": {
2678
+ "ansi-regex": "^5.0.1"
2679
+ },
2680
+ "engines": {
2681
+ "node": ">=8"
2682
+ }
2683
+ },
2684
+ "node_modules/wrap-ansi/node_modules/ansi-styles": {
2685
+ "version": "6.2.1",
2686
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
2687
+ "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
2688
+ "dev": true,
2689
+ "engines": {
2690
+ "node": ">=12"
2691
+ },
2692
+ "funding": {
2693
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
2694
+ }
2695
+ },
2696
+ "node_modules/wrappy": {
2697
+ "version": "1.0.2",
2698
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
2699
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
2700
+ "dev": true
2701
+ },
2702
+ "node_modules/ws": {
2703
+ "version": "8.18.0",
2704
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz",
2705
+ "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==",
2706
+ "dev": true,
2707
+ "engines": {
2708
+ "node": ">=10.0.0"
2709
+ },
2710
+ "peerDependencies": {
2711
+ "bufferutil": "^4.0.1",
2712
+ "utf-8-validate": ">=5.0.2"
2713
+ },
2714
+ "peerDependenciesMeta": {
2715
+ "bufferutil": {
2716
+ "optional": true
2717
+ },
2718
+ "utf-8-validate": {
2719
+ "optional": true
2720
+ }
2721
+ }
2722
+ },
2723
+ "node_modules/yaml": {
2724
+ "version": "2.7.0",
2725
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.0.tgz",
2726
+ "integrity": "sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==",
2727
+ "dev": true,
2728
+ "bin": {
2729
+ "yaml": "bin.mjs"
2730
+ },
2731
+ "engines": {
2732
+ "node": ">= 14"
2733
+ }
2734
+ }
2735
+ }
2736
+ }
package.json ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "type": "module",
3
+ "scripts": {
4
+ "start": "five-server . --open index.html --port=4444",
5
+ "postinstall": "patch-package",
6
+ "prettier": "prettier . --write"
7
+ },
8
+ "devDependencies": {
9
+ "five-server": "^0.4.0",
10
+ "patch-package": "^8.0.0",
11
+ "prettier": "^3.4.2"
12
+ }
13
+ }
patches/five-server+0.4.0.patch ADDED
@@ -0,0 +1,886 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ diff --git a/node_modules/five-server/client/injected.js b/node_modules/five-server/client/injected.js
2
+ index 5f797c6..c1ddc39 100644
3
+ --- a/node_modules/five-server/client/injected.js
4
+ +++ b/node_modules/five-server/client/injected.js
5
+ @@ -1 +1,852 @@
6
+ -(()=>{"use strict";const e="__brackets-ld-highlight",t={"background-color":"rgba(0, 162, 255, 0.5)",opacity:0},o={"background-color":"rgb(106, 171, 233)",opacity:.6},n={"background-color":"rgb(156, 221, 156)"},r={"background-color":"rgb(255 ,177 ,95)"},i="rgba(21, 165, 255, 0.85)",s=!0;function a(e){return e.offsetTop+(e.offsetParent?a(e.offsetParent):0)}function l(){}let d,c;const p=function(e){d&&(window.cancelAnimationFrame(d),window.clearTimeout(c)),d=window.requestAnimationFrame(l),c=setTimeout((function(){window.cancelAnimationFrame(d),d=null}),1e3*e)};class f{constructor(e){this.elements=[],this.selector='[data-highlight="true"]',this.trigger=!!e}elementExists(e){let t;for(t in this.elements)if(this.elements[t]===e)return!0;return!1}makeHighlightDiv(a,l){const d=a.getBoundingClientRect(),c=window.document.createElement("div"),f=window.getComputedStyle(a),u=parseFloat(f.getPropertyValue("transition-duration")),g=parseFloat(f.getPropertyValue("animation-duration"));if(u&&p(u),g&&p(g),0===d.width&&0===d.height)return;const h={right:f.getPropertyValue("border-right-width"),left:f.getPropertyValue("border-left-width"),top:f.getPropertyValue("border-top-width"),bottom:f.getPropertyValue("border-bottom-width")},m="border-box"===f.boxSizing;let y=parseFloat(f.width),w=parseFloat(f.height),b=w,v=y;m||(y+=parseFloat(f.paddingLeft)+parseFloat(f.paddingRight),w+=parseFloat(f.paddingTop)+parseFloat(f.paddingBottom),v=y+parseFloat(h.right)+parseFloat(h.left),b=w+parseFloat(h.bottom)+parseFloat(h.top));const x={horizontal:"left, right",vertical:"top, bottom"},F=function(e){const t={};return x.horizontal.indexOf(e)>=0?(t.width=f.getPropertyValue("padding-"+e),t.height=w+"px",t.top=0,m&&(t.height=w-parseFloat(h.top)-parseFloat(h.bottom)+"px")):(t.height=f.getPropertyValue("padding-"+e),t.width=y+"px",t.left=0,m&&(t.width=y-parseFloat(h.left)-parseFloat(h.right)+"px")),t[e]=0,t.position="absolute",t},P=function(e){const t={},o=[];return o.right=parseFloat(f.getPropertyValue("margin-right")),o.top=parseFloat(f.getPropertyValue("margin-top")),o.bottom=parseFloat(f.getPropertyValue("margin-bottom")),o.left=parseFloat(f.getPropertyValue("margin-left")),x.horizontal.indexOf(e)>=0?(t.width=f.getPropertyValue("margin-"+e),t.height=b+o.top+o.bottom+"px",t.top="-"+(o.top+parseFloat(h.top))+"px"):(t.height=f.getPropertyValue("margin-"+e),t.width=v+"px",t.left="-"+h.left),t[e]="-"+(o[e]+parseFloat(h[e]))+"px",t.position="absolute",t},S=function(e){!s||parseInt(e.height,10)<=0||parseInt(e.width,10)<=0?e.display="none":e.display="block"},E=[F("top"),F("right"),F("bottom"),F("left")],k=function(e,t){let o;for(o=0;o<e.length;o++){S(e[o]),e[o].transform="none";const n=window.document.createElement("div");R(Object.assign({},t,e[o]),n.style),c.appendChild(n)}};k([P("top"),P("right"),P("bottom"),P("left")],r),k(E,n),c.className=e,function(e){const t=e.getBoundingClientRect(),o=window.document.body;let n,r;if("static"===window.getComputedStyle(o).position)r=t.left+window.pageXOffset,n=t.top+window.pageYOffset;else{const e=o.getBoundingClientRect();r=t.left-e.left,n=t.top-e.top}}(a);let O=a,T=0,C=0;do{T+=O.offsetLeft,C+=O.offsetTop,O=O.offsetParent}while(O);const H={left:T+"px",top:C+"px",width:y+"px",height:w+"px","z-index":2e6,margin:0,padding:0,position:"absolute","pointer-events":"none","box-shadow":"0 0 1px #fff","box-sizing":f.getPropertyValue("box-sizing"),"border-right":f.getPropertyValue("border-right"),"border-left":f.getPropertyValue("border-left"),"border-top":f.getPropertyValue("border-top"),"border-bottom":f.getPropertyValue("border-bottom"),transform:f.getPropertyValue("transform"),"transform-origin":f.getPropertyValue("transform-origin"),"border-color":i},V=Object.assign({},H),L=t,M=o;function R(e,t){let o;for(o in e)t.setProperty(o,e[o])}R(V,c.style),R(l?L:M,c.style),l&&(R({"transition-property":"opacity, background-color, transform","transition-duration":"300ms, 2.3s"},c.style),window.setTimeout((function(){R(M,c.style)}),20)),window.document.body.appendChild(c)}add(e,t){if(!this.elementExists(e)&&e!==window.document){if(this.trigger,(!window.event||window.event instanceof MessageEvent)&&!function(e){const t=e.getBoundingClientRect(),o=window.document.documentElement;return t.top>=0&&t.left>=0&&t.bottom<=(window.innerHeight||o.clientHeight)&&t.right<=(window.innerWidth||o.clientWidth)}(e)){let t=a(e);t&&(t-=window.innerHeight/2,window.scrollTo(0,t))}this.elements.push(e),this.makeHighlightDiv(e,t)}}clear(){let t;const o=window.document.querySelectorAll("."+e),n=window.document.body;for(t=0;t<o.length;t++)n.removeChild(o[t]);if(this.trigger)for(t=0;t<this.elements.length;t++)this.elements[t];this.elements=[]}redraw(){let e,t;for(t=this.selector?window.document.querySelectorAll(this.selector):this.elements.slice(0),this.clear(),e=0;e<t.length;e++)this.add(t[e],!1)}}var u=function(e,t,o,n){return new(o||(o=Promise))((function(r,i){function s(e){try{l(n.next(e))}catch(e){i(e)}}function a(e){try{l(n.throw(e))}catch(e){i(e)}}function l(e){var t;e.done?r(e.value):(t=e.value,t instanceof o?t:new o((function(e){e(t)}))).then(s,a)}l((n=n.apply(e,t||[])).next())}))};let g;const h=!!document.body&&document.body.hasAttribute("data-server-no-reload");h&&console.info("[Five Server] Reload disabled due to 'data-server-no-reload' attribute on BODY element"),"WebSocket"in window&&!h&&window.addEventListener("load",(()=>{console.log("[Five Server] connecting...");const e=document.querySelector('[data-id="five-server"]'),t=new URL(e.src).pathname.split("/").slice(0,-1).join("/"),o=`${n=`${"http:"===window.location.protocol?"ws://":"wss://"}${new URL(e.src).host}${t}`,n.replace(/\/+$/g,"")}/${(e=>e.replace(/^\/+/g,""))("fsws")}`;var n;const r=e.getAttribute("data-inject-body");r&&"true"===r.toString()&&(g=document.body?document.body.cloneNode(!0):void 0);let i=null;const s=new f(!0);s.redraw(),window.addEventListener("resize",(()=>{s.redraw()}));const a="[Five Server] connected.";let l,d=1e3,c=0,p="";const h=(e,t,o={})=>{const n=JSON.stringify({message:e,type:t,options:o});if(p===n&&"css updated"!==e)return;p=n;let r=document.getElementById("fiveserver-info-wrapper");r&&r.remove();const{time:s=3,animation:a=!0}=o;r=document.createElement("div"),r.id="fiveserver-info-wrapper",r.classList.add(`fiveserver-info-wrapper_${t}`),r.style.zIndex="100",r.style.display="flex",r.style.justifyContent="center",r.style.position="fixed",r.style.top="flex",r.style.left="50%",r.style.transform="translateX(-50%)",r.style.width="100%",r.style.maxWidth="80%";const l=document.createElement("div");l.id="fiveserver-info",l.style.fontSize="16px",l.style.fontFamily="Arial, Helvetica, sans-serif",l.style.color="white",l.style.backgroundColor="black",l.style.padding="4px 12px",l.style.borderRadius="4px",l.style.whiteSpace="pre-wrap",r.appendChild(l),document.body.appendChild(r),i&&(clearTimeout(i),i=null),i=setTimeout((()=>{r&&r.isConnected&&r.remove()}),1e3*s),"error"===t?(r.style.top="4px",r.style.animation="",l.style.color="black",l.style.backgroundColor="red"):a?(r.style.top="-40px",r.style.animation=`fiveserverInfoPopup ${s}s forwards`):(r.style.top="4px",r.style.animation=""),"success"===t?(l.style.color="#498d76",l.style.backgroundColor="#00ffa9"):"info"===t&&(l.style.color="#d2e1f0",l.style.backgroundColor="#2996ff"),l.innerHTML=e.replace(/</gm,"&lt;")},m=(e,...t)=>{l&&1===(null==l?void 0:l.readyState)&&l.send(JSON.stringify({console:{type:e,message:t}}))},y=e=>{const t=document.getElementsByTagName("head")[0];let o=Array.from(document.getElementsByTagName("link"));o=o.filter((e=>/\.css/gm.test(e.href)||"stylesheet"==e.rel.toLowerCase()));for(let e=0;e<o.length;++e){const n=o[e],r=n.cloneNode(!0),i=r.href.replace(/(&|\?)_cacheOverride=\d+/,"");r.href=`${i}${i.indexOf("?")>=0?"&":"?"}_cacheOverride=${(new Date).valueOf()}`,r.onload=()=>{setTimeout((()=>n.remove()),0)},t.appendChild(r)}o.length>0&&e&&h("css updated","info")};let w,b="";const v=new DOMParser;let x=!1;const F=e=>{if("HIDE"===e||"HIDE_MESSAGE"===e||"HIDE_MESSAGES"===e){const e=document.getElementById("fiveserver-info-wrapper");e&&e.remove()}else h(e,"info",{animation:!1})},P=()=>{l=new WebSocket(o),l.onmessage=function(t){if(d=1e3,c=0,"reload"===t.data)window.location.reload();else if("refreshcss"===t.data)y(!0);else if("refreshcss-silent"===t.data)y(!1);else if("connected"===t.data){console.log(a);const e=document.querySelector('[data-id="five-server"]');e&&e.dispatchEvent(new Event("connected"))}else if("initRemoteLogs"===t.data)(()=>{const e=console.log;console.log=function(...t){t[0]===a?h("connected","success"):m("log",...t),e.apply(console,t)};const t=console.warn;console.warn=function(...e){m("warn",...e),t.apply(console,e)};const o=console.error;console.error=function(...e){m("error",...e),o.apply(console,e)}})();else{const n=JSON.parse(t.data);n.navigate&&window.location.replace(n.navigate),n.body&&n.hot?(t=>{u(void 0,void 0,void 0,(function*(){if(""===b&&(yield(b="loading",new Promise((t=>{const o=new URL(e.src).pathname.split("/").slice(0,-1).join("/"),n=`//${new URL(e.src).host}${o}/fiveserver/scripts/diffDOM/diffDOM.js`,r=document.createElement("script");r.type="text/javascript",r.src=n,r.onload=()=>{setTimeout((()=>{w=new diffDOM.DiffDOM,b="ready",t()}))},document.getElementsByTagName("head")[0].appendChild(r)})))),"ready"===b)try{const e=g,o=v.parseFromString(t,"text/html").querySelector("body"),n=document.createElement("body");if(n.innerHTML=t,o&&o.attributes.length>0)for(let e=0;e<o.attributes.length;e++){const t=o.attributes.item(e);if(t){const e=document.createAttribute(t.name);e.value=t.value,n.attributes.setNamedItem(e)}}const r=w.diff(e,n),i=document.body.cloneNode(!0);if(w.apply(i,r)&&w.apply(document.body,r)){g=n,x&&(x=!1,F("HIDE"));const e=document.querySelector('[data-highlight="true"]');if(e){const t=e=>e.offsetTop+(e.offsetParent?t(e.offsetParent):0),o=t(e)-window.innerHeight/2;window.scrollTo(0,o)}}}catch(e){x=!0,F("Having issues parsing the DOM.\nPlease verify that your HTML is valid...")}}))})(n.body):n.body&&(o=n.body,document.body.innerHTML=o),n.messages&&(e=>{F(e.join("\n\n"))})(n.messages),n.message&&F(n.message),n.body&&s.redraw()}var o},l.onopen=function(){if(c>0)return void window.location.reload();const e=document.querySelectorAll("script");for(let t=0;t<e.length;t++){const o=e[t];o.dataset&&o.dataset.file&&l.send(JSON.stringify({file:o.dataset.file}))}const t=document.createElement("style");t.innerHTML=' \n /* Injected by five-server */\n /*[data-highlight="true"] {\n border: 1px rgb(90,170,255) solid !important;\n background-color: rgba(155,215,255,0.5);\n animation: fadeOutHighlight 1s forwards 0.5s;\n }\n img[data-highlight="true"] {\n filter: sepia(100%) hue-rotate(180deg) saturate(200%);\n animation: fadeOutHighlightIMG 0.5s forwards 0.5s;\n }*/\n @keyframes fadeOutHighlight {\n from {background-color: rgba(155,215,255,0.5);}\n to {background-color: rgba(155,215,255,0);}\n } \n @keyframes fadeOutHighlightIMG {\n 0% {filter: sepia(100%) hue-rotate(180deg) saturate(200%);}\n 33% {filter: sepia(66%) hue-rotate(180deg) saturate(100%);}\n 50% {filter: sepia(50%) hue-rotate(90deg) saturate(50%);}\n 66% {filter: sepia(33%) hue-rotate(0deg) saturate(100%);}\n 100% {filter: sepia(0%) hue-rotate(0deg) saturate(100%);}\n }\n @keyframes fiveserverInfoPopup {\n 0% {top:-40px;}\n 15% {top:4px;}\n 85% {top:4px;}\n 100% {top:-40px;}\n }\n /*smaller*/\n @media (max-width: 640px) {\n #fiveserver-info-wrapper {\n max-width: 98%;\n }\n #fiveserver-info {\n border-radius: 0px;\n } \n }\n\n ',document.head.appendChild(t)},l.onclose=function(e){setTimeout((function(){h("lost connection to dev server","error")}),300),0===c&&console.log("Socket is closed. Reconnect will be attempted in 1 second.",e.reason),setTimeout((function(){c++,c>1&&console.log("connecting..."),c<=25&&P(),d=Math.floor(1.1*d)}),d)},l.onerror=function(e){l.close()}};let S=0;const E=()=>{if(S>10)return console.error("[Five Server] status check failed"),console.log("[Five Server] browser reloads in 5 seconds"),void setTimeout((()=>{window.location.reload()}),5e3);console.log("[Five Server] status check..."),setTimeout((()=>{k()}),1e3)},k=()=>u(void 0,void 0,void 0,(function*(){S++;const t=`${new URL(e.src).protocol}//${new URL(e.src).host}${new URL(e.src).pathname.split("/").slice(0,-1).join("/")}/fiveserver/status`;try{const e=yield fetch(t),o=yield e.json();o&&o.status&&"online"===o.status?(P(),S=0):E()}catch(e){E()}}));k()}))})();
7
+
8
+ +const removeLeadingSlash = (str) => {
9
+ + return str.replace(/^\/+/g, '')
10
+ +}
11
+ +
12
+ +const removeTrailingSlash = (str) => {
13
+ + return str.replace(/\/+$/g, '')
14
+ +}
15
+ +
16
+ +/** Just like path.join() (for url) */
17
+ +const appendPathToUrl = (url, append) => {
18
+ + return `${removeTrailingSlash(url)}/${removeLeadingSlash(append)}`
19
+ +}
20
+ +
21
+ +/* eslint-disable prefer-object-spread */
22
+ +/* eslint-disable prefer-template */
23
+ +
24
+ +/**
25
+ + * @copyright
26
+ + * Copyright (c) 2012 - present Adobe Systems Incorporated. All rights reserved. (https://github.com/adobe)
27
+ + * Copyright (c) 2021 Yannick Deubel (https://github.com/yandeu)
28
+ + *
29
+ + * @license {@link https://github.com/yandeu/five-server/blob/main/LICENSE LICENSE}
30
+ + *
31
+ + * @description
32
+ + * copied from https://github.com/adobe/brackets/blob/master/src/LiveDevelopment/Agents/RemoteFunctions.js
33
+ + * previously licensed under MIT (https://github.com/adobe/brackets/blob/master/LICENSE)
34
+ + */
35
+ +
36
+ +let _remoteHighlight
37
+ +const HIGHLIGHT_CLASS_NAME = '__brackets-ld-highlight'
38
+ +
39
+ +const config = {
40
+ + experimental: false, // enable experimental features
41
+ + debug: true, // enable debug output and helpers
42
+ + autoConnect: false, // go live automatically after startup?
43
+ + highlight: true, // enable highlighting?
44
+ + highlightConfig: {
45
+ + // the highlight configuration for the Inspector
46
+ + borderColor: { r: 255, g: 229, b: 153, a: 0.66 },
47
+ + contentColor: { r: 111, g: 168, b: 220, a: 0.55 },
48
+ + marginColor: { r: 246, g: 178, b: 107, a: 0.66 },
49
+ + paddingColor: { r: 147, g: 196, b: 125, a: 0.66 },
50
+ + showInfo: true
51
+ + },
52
+ + remoteHighlight: {
53
+ + animateStartValue: {
54
+ + 'background-color': 'rgba(0, 162, 255, 0.5)',
55
+ + opacity: 0
56
+ + },
57
+ + animateEndValue: {
58
+ + 'background-color': 'rgb(106, 171, 233)', //'rgba(0, 162, 255, 0)',
59
+ + opacity: 0.6
60
+ + },
61
+ + paddingStyling: {
62
+ + //'border-width': '1px',
63
+ + //'border-style': 'dashed',
64
+ + //'border-color': 'rgba(0, 162, 255, 0.5)',
65
+ + 'background-color': 'rgb(156, 221, 156)'
66
+ + },
67
+ + marginStyling: {
68
+ + 'background-color': 'rgb(255 ,177 ,95)' // 'rgba(21, 165, 255, 0.58)'
69
+ + },
70
+ + borderColor: 'rgba(21, 165, 255, 0.85)',
71
+ + showPaddingMargin: true
72
+ + }
73
+ +}
74
+ +
75
+ +// Checks if the element is in Viewport in the client browser
76
+ +function isInViewport(element) {
77
+ + const rect = element.getBoundingClientRect()
78
+ + const html = window.document.documentElement
79
+ + return (
80
+ + rect.top >= 0 &&
81
+ + rect.left >= 0 &&
82
+ + rect.bottom <= (window.innerHeight || html.clientHeight) &&
83
+ + rect.right <= (window.innerWidth || html.clientWidth)
84
+ + )
85
+ +}
86
+ +
87
+ +// set an event on a element
88
+ +function _trigger(element, name, value, autoRemove) {
89
+ + // MOD(yandeu): Do not automatically remove the highlight.
90
+ + /*
91
+ + const key = 'data-ld-' + name
92
+ + if (value !== undefined && value !== null) {
93
+ + element.setAttribute(key, value)
94
+ + if (autoRemove) {
95
+ + window.setTimeout(element.removeAttribute.bind(element, key))
96
+ + }
97
+ + } else {
98
+ + element.removeAttribute(key)
99
+ + }
100
+ + */
101
+ +}
102
+ +
103
+ +// compute the screen offset of an element
104
+ +function _screenOffset(element) {
105
+ + const elemBounds = element.getBoundingClientRect(),
106
+ + body = window.document.body
107
+ + let offsetTop, offsetLeft
108
+ +
109
+ + if (window.getComputedStyle(body).position === 'static') {
110
+ + offsetLeft = elemBounds.left + window.pageXOffset
111
+ + offsetTop = elemBounds.top + window.pageYOffset
112
+ + } else {
113
+ + const bodyBounds = body.getBoundingClientRect()
114
+ + offsetLeft = elemBounds.left - bodyBounds.left
115
+ + offsetTop = elemBounds.top - bodyBounds.top
116
+ + }
117
+ + return { left: offsetLeft, top: offsetTop }
118
+ +}
119
+ +
120
+ +// returns the distance from the top of the closest relatively positioned parent element
121
+ +function getDocumentOffsetTop(element) {
122
+ + return element.offsetTop + (element.offsetParent ? getDocumentOffsetTop(element.offsetParent) : 0)
123
+ +}
124
+ +
125
+ +// redraw active highlights
126
+ +function redrawHighlights() {
127
+ + if (_remoteHighlight) {
128
+ + _remoteHighlight.redraw()
129
+ + }
130
+ +}
131
+ +
132
+ +let req, timeout
133
+ +const animateHighlight = function (time) {
134
+ + if (req) {
135
+ + window.cancelAnimationFrame(req)
136
+ + window.clearTimeout(timeout)
137
+ + }
138
+ + req = window.requestAnimationFrame(redrawHighlights)
139
+ +
140
+ + timeout = setTimeout(function () {
141
+ + window.cancelAnimationFrame(req)
142
+ + req = null
143
+ + }, time * 1000)
144
+ +}
145
+ +
146
+ +class Highlight {
147
+ + trigger
148
+ + elements = []
149
+ + selector = '[data-highlight="true"]'
150
+ +
151
+ + constructor(trigger) {
152
+ + this.trigger = !!trigger
153
+ + }
154
+ +
155
+ + elementExists(element) {
156
+ + let i
157
+ + for (i in this.elements) {
158
+ + if (this.elements[i] === element) {
159
+ + return true
160
+ + }
161
+ + }
162
+ + return false
163
+ + }
164
+ +
165
+ + makeHighlightDiv(element, doAnimation) {
166
+ + const elementBounds = element.getBoundingClientRect(),
167
+ + highlight = window.document.createElement('div'),
168
+ + elementStyling = window.getComputedStyle(element),
169
+ + transitionDuration = parseFloat(elementStyling.getPropertyValue('transition-duration')),
170
+ + animationDuration = parseFloat(elementStyling.getPropertyValue('animation-duration'))
171
+ +
172
+ + if (transitionDuration) {
173
+ + animateHighlight(transitionDuration)
174
+ + }
175
+ +
176
+ + if (animationDuration) {
177
+ + animateHighlight(animationDuration)
178
+ + }
179
+ +
180
+ + // Don't highlight elements with 0 width & height
181
+ + if (elementBounds.width === 0 && elementBounds.height === 0) {
182
+ + return
183
+ + }
184
+ +
185
+ + const realElBorder = {
186
+ + right: elementStyling.getPropertyValue('border-right-width'),
187
+ + left: elementStyling.getPropertyValue('border-left-width'),
188
+ + top: elementStyling.getPropertyValue('border-top-width'),
189
+ + bottom: elementStyling.getPropertyValue('border-bottom-width')
190
+ + }
191
+ +
192
+ + const borderBox = elementStyling.boxSizing === 'border-box'
193
+ +
194
+ + let innerWidth = parseFloat(elementStyling.width),
195
+ + innerHeight = parseFloat(elementStyling.height),
196
+ + outerHeight = innerHeight,
197
+ + outerWidth = innerWidth
198
+ +
199
+ + if (!borderBox) {
200
+ + innerWidth += parseFloat(elementStyling.paddingLeft) + parseFloat(elementStyling.paddingRight)
201
+ + innerHeight += parseFloat(elementStyling.paddingTop) + parseFloat(elementStyling.paddingBottom)
202
+ + ;(outerWidth = innerWidth + parseFloat(realElBorder.right) + parseFloat(realElBorder.left)),
203
+ + (outerHeight = innerHeight + parseFloat(realElBorder.bottom) + parseFloat(realElBorder.top))
204
+ + }
205
+ +
206
+ + const visualizations = {
207
+ + horizontal: 'left, right',
208
+ + vertical: 'top, bottom'
209
+ + }
210
+ +
211
+ + const drawPaddingRect = function (side) {
212
+ + const elStyling = {}
213
+ +
214
+ + if (visualizations.horizontal.indexOf(side) >= 0) {
215
+ + elStyling['width'] = elementStyling.getPropertyValue('padding-' + side)
216
+ + elStyling['height'] = innerHeight + 'px'
217
+ + elStyling['top'] = 0
218
+ +
219
+ + if (borderBox) {
220
+ + elStyling['height'] = innerHeight - parseFloat(realElBorder.top) - parseFloat(realElBorder.bottom) + 'px'
221
+ + }
222
+ + } else {
223
+ + elStyling['height'] = elementStyling.getPropertyValue('padding-' + side)
224
+ + elStyling['width'] = innerWidth + 'px'
225
+ + elStyling['left'] = 0
226
+ +
227
+ + if (borderBox) {
228
+ + elStyling['width'] = innerWidth - parseFloat(realElBorder.left) - parseFloat(realElBorder.right) + 'px'
229
+ + }
230
+ + }
231
+ +
232
+ + elStyling[side] = 0
233
+ + elStyling['position'] = 'absolute'
234
+ +
235
+ + return elStyling
236
+ + }
237
+ +
238
+ + const drawMarginRect = function (side) {
239
+ + const elStyling = {}
240
+ +
241
+ + const margin = []
242
+ + margin['right'] = parseFloat(elementStyling.getPropertyValue('margin-right'))
243
+ + margin['top'] = parseFloat(elementStyling.getPropertyValue('margin-top'))
244
+ + margin['bottom'] = parseFloat(elementStyling.getPropertyValue('margin-bottom'))
245
+ + margin['left'] = parseFloat(elementStyling.getPropertyValue('margin-left'))
246
+ +
247
+ + if (visualizations['horizontal'].indexOf(side) >= 0) {
248
+ + elStyling['width'] = elementStyling.getPropertyValue('margin-' + side)
249
+ + elStyling['height'] = outerHeight + margin['top'] + margin['bottom'] + 'px'
250
+ + elStyling['top'] = '-' + (margin['top'] + parseFloat(realElBorder.top)) + 'px'
251
+ + } else {
252
+ + elStyling['height'] = elementStyling.getPropertyValue('margin-' + side)
253
+ + elStyling['width'] = outerWidth + 'px'
254
+ + elStyling['left'] = '-' + realElBorder.left
255
+ + }
256
+ +
257
+ + elStyling[side] = '-' + (margin[side] + parseFloat(realElBorder[side])) + 'px'
258
+ + elStyling['position'] = 'absolute'
259
+ +
260
+ + return elStyling
261
+ + }
262
+ +
263
+ + const setVisibility = function (el) {
264
+ + if (!config.remoteHighlight.showPaddingMargin || parseInt(el.height, 10) <= 0 || parseInt(el.width, 10) <= 0) {
265
+ + el.display = 'none'
266
+ + } else {
267
+ + el.display = 'block'
268
+ + }
269
+ + }
270
+ +
271
+ + const paddingVisualizations = [
272
+ + drawPaddingRect('top'),
273
+ + drawPaddingRect('right'),
274
+ + drawPaddingRect('bottom'),
275
+ + drawPaddingRect('left')
276
+ + ]
277
+ +
278
+ + const marginVisualizations = [
279
+ + drawMarginRect('top'),
280
+ + drawMarginRect('right'),
281
+ + drawMarginRect('bottom'),
282
+ + drawMarginRect('left')
283
+ + ]
284
+ +
285
+ + const setupVisualizations = function (arr, config) {
286
+ + let i
287
+ + for (i = 0; i < arr.length; i++) {
288
+ + setVisibility(arr[i])
289
+ +
290
+ + // Applies to every visualisationElement (padding or margin div)
291
+ + arr[i]['transform'] = 'none'
292
+ + const el = window.document.createElement('div'),
293
+ + styles = Object.assign({}, config, arr[i])
294
+ +
295
+ + _setStyleValues(styles, el.style)
296
+ +
297
+ + highlight.appendChild(el)
298
+ + }
299
+ + }
300
+ +
301
+ + setupVisualizations(marginVisualizations, config.remoteHighlight.marginStyling)
302
+ + setupVisualizations(paddingVisualizations, config.remoteHighlight.paddingStyling)
303
+ +
304
+ + highlight.className = HIGHLIGHT_CLASS_NAME
305
+ +
306
+ + const offset = _screenOffset(element)
307
+ +
308
+ + let el = element,
309
+ + offsetLeft = 0,
310
+ + offsetTop = 0
311
+ +
312
+ + // Probably the easiest way to get elements position without including transform
313
+ + do {
314
+ + offsetLeft += el.offsetLeft
315
+ + offsetTop += el.offsetTop
316
+ + el = el.offsetParent
317
+ + } while (el)
318
+ +
319
+ + const stylesToSet = {
320
+ + left: offsetLeft + 'px',
321
+ + top: offsetTop + 'px',
322
+ + width: innerWidth + 'px',
323
+ + height: innerHeight + 'px',
324
+ + 'z-index': 2000000,
325
+ + margin: 0,
326
+ + padding: 0,
327
+ + position: 'absolute',
328
+ + 'pointer-events': 'none',
329
+ + 'box-shadow': '0 0 1px #fff',
330
+ + 'box-sizing': elementStyling.getPropertyValue('box-sizing'),
331
+ + 'border-right': elementStyling.getPropertyValue('border-right'),
332
+ + 'border-left': elementStyling.getPropertyValue('border-left'),
333
+ + 'border-top': elementStyling.getPropertyValue('border-top'),
334
+ + 'border-bottom': elementStyling.getPropertyValue('border-bottom'),
335
+ + transform: elementStyling.getPropertyValue('transform'),
336
+ + 'transform-origin': elementStyling.getPropertyValue('transform-origin'),
337
+ + 'border-color': config.remoteHighlight.borderColor
338
+ + }
339
+ +
340
+ + const mergedStyles = Object.assign({}, stylesToSet)
341
+ +
342
+ + const animateStartValues = config.remoteHighlight.animateStartValue
343
+ +
344
+ + const animateEndValues = config.remoteHighlight.animateEndValue
345
+ +
346
+ + const transitionValues = {
347
+ + 'transition-property': 'opacity, background-color, transform',
348
+ + 'transition-duration': '300ms, 2.3s'
349
+ + }
350
+ +
351
+ + function _setStyleValues(styleValues, obj) {
352
+ + let prop
353
+ +
354
+ + for (prop in styleValues) {
355
+ + obj.setProperty(prop, styleValues[prop])
356
+ + }
357
+ + }
358
+ +
359
+ + _setStyleValues(mergedStyles, highlight.style)
360
+ + _setStyleValues(doAnimation ? animateStartValues : animateEndValues, highlight.style)
361
+ +
362
+ + if (doAnimation) {
363
+ + _setStyleValues(transitionValues, highlight.style)
364
+ +
365
+ + window.setTimeout(function () {
366
+ + _setStyleValues(animateEndValues, highlight.style)
367
+ + }, 20)
368
+ + }
369
+ +
370
+ + window.document.body.appendChild(highlight)
371
+ + }
372
+ +
373
+ + add(element, doAnimation) {
374
+ + if (this.elementExists(element) || element === window.document) {
375
+ + return
376
+ + }
377
+ + if (this.trigger) {
378
+ + _trigger(element, 'highlight', 1)
379
+ + }
380
+ +
381
+ + if ((!window.event || window.event instanceof MessageEvent) && !isInViewport(element)) {
382
+ + let top = getDocumentOffsetTop(element)
383
+ + if (top) {
384
+ + top -= window.innerHeight / 2
385
+ + window.scrollTo(0, top)
386
+ + }
387
+ + }
388
+ + this.elements.push(element)
389
+ +
390
+ + this.makeHighlightDiv(element, doAnimation)
391
+ + }
392
+ +
393
+ + clear() {
394
+ + let i
395
+ + const highlights = window.document.querySelectorAll('.' + HIGHLIGHT_CLASS_NAME),
396
+ + body = window.document.body
397
+ +
398
+ + for (i = 0; i < highlights.length; i++) {
399
+ + body.removeChild(highlights[i])
400
+ + }
401
+ +
402
+ + if (this.trigger) {
403
+ + for (i = 0; i < this.elements.length; i++) {
404
+ + _trigger(this.elements[i], 'highlight', 0)
405
+ + }
406
+ + }
407
+ +
408
+ + this.elements = []
409
+ + }
410
+ +
411
+ + redraw() {
412
+ + let i, highlighted
413
+ +
414
+ + // When redrawing a selector-based highlight, run a new selector
415
+ + // query to ensure we have the latest set of elements to highlight.
416
+ + if (this.selector) {
417
+ + highlighted = window.document.querySelectorAll(this.selector)
418
+ + } else {
419
+ + highlighted = this.elements.slice(0)
420
+ + }
421
+ +
422
+ + this.clear()
423
+ + for (i = 0; i < highlighted.length; i++) {
424
+ + this.add(highlighted[i], false)
425
+ + }
426
+ + }
427
+ +}
428
+ +
429
+ +
430
+ +// clone the current state of the body before any javascript
431
+ +// manipulates it inside window.addEventListener('load', (...))
432
+ +let _internalDOMBody
433
+ +
434
+ +const block = document.body ? document.body.hasAttribute('data-server-no-reload') : false
435
+ +
436
+ +if (block) {
437
+ + console.info("[Five Server] Reload disabled due to 'data-server-no-reload' attribute on BODY element")
438
+ +}
439
+ +if ('WebSocket' in window && !block) {
440
+ + window.addEventListener('load', () => {
441
+ + console.log('[Five Server] connecting...')
442
+ +
443
+ + const script = document.querySelector('[data-id="five-server"]')
444
+ +
445
+ + const baseurl = new URL(script.src).pathname.split('/').slice(0, -1).join('/')
446
+ + const protocol = window.location.protocol === 'http:' ? 'ws://' : 'wss://'
447
+ + const address = appendPathToUrl(`${protocol}${new URL(script.src).host}${baseurl}`, 'fsws')
448
+ +
449
+ + // check if we need to clone the body for the "injectBody" feature or not
450
+ + const optionsInjectBody = script.getAttribute('data-inject-body')
451
+ + if (optionsInjectBody && optionsInjectBody.toString() === 'true')
452
+ + _internalDOMBody = document.body ? document.body.cloneNode(true) : undefined
453
+ +
454
+ + let timer = null
455
+ +
456
+ + const highlight = new Highlight(true)
457
+ + highlight.redraw()
458
+ + window.addEventListener('resize', () => {
459
+ + highlight.redraw()
460
+ + })
461
+ +
462
+ + const CONNECTED_MSG = '[Five Server] connected.'
463
+ + const MAX_ATTEMPTS = 25
464
+ + let wait = 1000
465
+ + let attempts = 0
466
+ + let socket
467
+ +
468
+ + let lastPopUp = ''
469
+ + const popup = (
470
+ + message,
471
+ + type,
472
+ + options = {}
473
+ + ) => {
474
+ + const str = JSON.stringify({ message, type, options })
475
+ +
476
+ + // block identical popups, except "css update"
477
+ + if (lastPopUp === str && message !== 'css updated') return
478
+ + lastPopUp = str
479
+ +
480
+ + let wrapper = document.getElementById('fiveserver-info-wrapper')
481
+ + if (wrapper) wrapper.remove()
482
+ +
483
+ + const { time = 3, animation = true } = options
484
+ +
485
+ + wrapper = document.createElement('div')
486
+ + wrapper.id = 'fiveserver-info-wrapper'
487
+ + wrapper.classList.add(`fiveserver-info-wrapper_${type}`)
488
+ +
489
+ + wrapper.style.zIndex = '100'
490
+ + wrapper.style.display = 'flex'
491
+ + wrapper.style.justifyContent = 'center'
492
+ + wrapper.style.position = 'fixed'
493
+ + wrapper.style.top = 'flex'
494
+ +
495
+ + wrapper.style.left = '50%'
496
+ + wrapper.style.transform = 'translateX(-50%)'
497
+ + wrapper.style.width = '100%'
498
+ + wrapper.style.maxWidth = '80%'
499
+ +
500
+ + const el = document.createElement('div')
501
+ + el.id = 'fiveserver-info'
502
+ + el.style.fontSize = '16px'
503
+ + el.style.fontFamily = 'Arial, Helvetica, sans-serif'
504
+ + el.style.color = 'white'
505
+ + el.style.backgroundColor = 'black'
506
+ +
507
+ + el.style.padding = '4px 12px'
508
+ + el.style.borderRadius = '4px'
509
+ + el.style.whiteSpace = 'pre-wrap'
510
+ +
511
+ + wrapper.appendChild(el)
512
+ +
513
+ + document.body.appendChild(wrapper)
514
+ +
515
+ + // remove popup from DOM after 'time'
516
+ + if (timer) {
517
+ + clearTimeout(timer)
518
+ + timer = null
519
+ + }
520
+ + timer = setTimeout(() => {
521
+ + if (wrapper && wrapper.isConnected) wrapper.remove()
522
+ + }, time * 1000)
523
+ +
524
+ + if (type === 'error') {
525
+ + wrapper.style.top = '4px'
526
+ + wrapper.style.animation = ''
527
+ +
528
+ + el.style.color = 'black'
529
+ + el.style.backgroundColor = 'red'
530
+ + } else {
531
+ + if (animation) {
532
+ + wrapper.style.top = '-40px'
533
+ + wrapper.style.animation = `fiveserverInfoPopup ${time}s forwards`
534
+ + } else {
535
+ + wrapper.style.top = '4px'
536
+ + wrapper.style.animation = ''
537
+ + }
538
+ + }
539
+ +
540
+ + if (type === 'success') {
541
+ + el.style.color = '#498d76'
542
+ + el.style.backgroundColor = '#00ffa9'
543
+ + } else if (type === 'info') {
544
+ + el.style.color = '#d2e1f0'
545
+ + el.style.backgroundColor = '#2996ff'
546
+ + }
547
+ + el.innerHTML = message.replace(/</gm, '&lt;')
548
+ + }
549
+ +
550
+ + const send = (type, ...message) => {
551
+ + if (socket && socket?.readyState === 1) {
552
+ + socket.send(JSON.stringify({ console: { type, message } }))
553
+ + }
554
+ + }
555
+ +
556
+ + const overwriteLogs = () => {
557
+ + // log
558
+ + const oldLog = console.log
559
+ + console.log = function (...message) {
560
+ + if (message[0] === CONNECTED_MSG) {
561
+ + popup('connected', 'success')
562
+ + } else {
563
+ + send('log', ...message)
564
+ + }
565
+ + oldLog.apply(console, message)
566
+ + }
567
+ +
568
+ + // warn
569
+ + const oldWarn = console.warn
570
+ + console.warn = function (...message) {
571
+ + send('warn', ...message)
572
+ + oldWarn.apply(console, message)
573
+ + }
574
+ +
575
+ + // error
576
+ + const oldError = console.error
577
+ + console.error = function (...message) {
578
+ + send('error', ...message)
579
+ + oldError.apply(console, message)
580
+ + }
581
+ + }
582
+ +
583
+ + const refreshCSS = (showPopup) => {
584
+ + const head = document.getElementsByTagName('head')[0]
585
+ +
586
+ + let sheets = Array.from(document.getElementsByTagName('link'))
587
+ + sheets = sheets.filter(sheet => /\.css/gm.test(sheet.href) || sheet.rel.toLowerCase() == 'stylesheet')
588
+ +
589
+ + for (let i = 0; i < sheets.length; ++i) {
590
+ + const el = sheets[i]
591
+ +
592
+ + const newEl = el.cloneNode(true)
593
+ +
594
+ + // changing the href of the css file will make the browser refetch it
595
+ + const url = newEl.href.replace(/(&|\?)_cacheOverride=\d+/, '')
596
+ + newEl.href = `${url}${url.indexOf('?') >= 0 ? '&' : '?'}_cacheOverride=${new Date().valueOf()}`
597
+ +
598
+ + newEl.onload = () => {
599
+ + setTimeout(() => el.remove(), 0)
600
+ + }
601
+ +
602
+ + head.appendChild(newEl)
603
+ + }
604
+ +
605
+ + if (sheets.length > 0 && showPopup) popup('css updated', 'info')
606
+ + }
607
+ +
608
+ + const injectBody = body => {
609
+ + document.body.innerHTML = body
610
+ + }
611
+ +
612
+ + let _diffDOMStatus = ''
613
+ + let _dd
614
+ +
615
+ + const addDiffDOM = () => {
616
+ + _diffDOMStatus = 'loading'
617
+ + return new Promise(resolve => {
618
+ + const baseurl = new URL(script.src).pathname.split('/').slice(0, -1).join('/')
619
+ + const url = `//${new URL(script.src).host}${baseurl}/fiveserver/scripts/diffDOM/diffDOM.js`
620
+ + const s = document.createElement('script')
621
+ + s.type = 'text/javascript'
622
+ + s.src = url
623
+ + s.onload = () => {
624
+ + setTimeout(() => {
625
+ + _dd = new diffDOM.DiffDOM()
626
+ + _diffDOMStatus = 'ready'
627
+ + resolve()
628
+ + })
629
+ + }
630
+ + document.getElementsByTagName('head')[0].appendChild(s)
631
+ + })
632
+ + }
633
+ +
634
+ + const domParser = new DOMParser()
635
+ + let diffError = false
636
+ + const updateBody = async (d) => {
637
+ + if (_diffDOMStatus === '') await addDiffDOM()
638
+ +
639
+ + if (_diffDOMStatus === 'ready') {
640
+ + try {
641
+ + const body = _internalDOMBody
642
+ +
643
+ + const newBody = domParser.parseFromString(d, 'text/html').querySelector('body')
644
+ +
645
+ + const tmp = document.createElement('body')
646
+ + tmp.innerHTML = d
647
+ +
648
+ + // copy all attributes
649
+ + if (newBody) {
650
+ + if (newBody.attributes.length > 0)
651
+ + for (let i = 0; i < newBody.attributes.length; i++) {
652
+ + const attr = newBody.attributes.item(i)
653
+ + if (attr) {
654
+ + const newAttr = document.createAttribute(attr.name)
655
+ + newAttr.value = attr.value
656
+ + tmp.attributes.setNamedItem(newAttr)
657
+ + }
658
+ + }
659
+ + }
660
+ +
661
+ + const diff = _dd.diff(body, tmp)
662
+ +
663
+ + const testBody = document.body.cloneNode(true)
664
+ +
665
+ + const testSuccess = _dd.apply(testBody, diff)
666
+ + if (testSuccess) {
667
+ + const success = _dd.apply(document.body, diff)
668
+ +
669
+ + if (success) {
670
+ + _internalDOMBody = tmp
671
+ +
672
+ + if (diffError) {
673
+ + diffError = false
674
+ + appendMessage('HIDE')
675
+ + }
676
+ +
677
+ + // scroll element into view (center of page)
678
+ + const el = document.querySelector(`[data-highlight="true"]`)
679
+ + if (el) {
680
+ + const documentOffsetTop = el => {
681
+ + return el.offsetTop + (el.offsetParent ? documentOffsetTop(el.offsetParent) : 0)
682
+ + }
683
+ + const pos = documentOffsetTop(el) - window.innerHeight / 2
684
+ + window.scrollTo(0, pos)
685
+ + }
686
+ + }
687
+ + }
688
+ + } catch (error) {
689
+ + diffError = true
690
+ + appendMessage('Having issues parsing the DOM.\nPlease verify that your HTML is valid...')
691
+ + }
692
+ + }
693
+ + }
694
+ +
695
+ + const appendMessages = (msg) => {
696
+ + appendMessage(msg.join('\n\n'))
697
+ + }
698
+ +
699
+ + const appendMessage = (msg) => {
700
+ + if (msg === 'HIDE' || msg === 'HIDE_MESSAGE' || msg === 'HIDE_MESSAGES') {
701
+ + const wrapper = document.getElementById('fiveserver-info-wrapper')
702
+ + if (wrapper) wrapper.remove()
703
+ + } else {
704
+ + popup(msg, 'info', { animation: false })
705
+ + }
706
+ + }
707
+ +
708
+ + const connect = () => {
709
+ + socket = new WebSocket(address)
710
+ +
711
+ + socket.onmessage = function (msg) {
712
+ + wait = 1000
713
+ + attempts = 0
714
+ +
715
+ + if (msg.data === 'reload') window.location.reload()
716
+ + else if (msg.data === 'refreshcss') refreshCSS(true)
717
+ + else if (msg.data === 'refreshcss-silent') refreshCSS(false)
718
+ + else if (msg.data === 'connected') {
719
+ + console.log(CONNECTED_MSG)
720
+ + // dispatch "connected" event when client is connected
721
+ + const script = document.querySelector('[data-id="five-server"]')
722
+ + if (script) script.dispatchEvent(new Event('connected'))
723
+ + } else if (msg.data === 'initRemoteLogs') overwriteLogs()
724
+ + else {
725
+ + const d = JSON.parse(msg.data)
726
+ + if (d.navigate) window.location.replace(d.navigate)
727
+ + // hot body injection
728
+ + if (d.body && d.hot) updateBody(d.body)
729
+ + // simple body replacement
730
+ + else if (d.body) injectBody(d.body)
731
+ +
732
+ + // message and messages 🤣
733
+ + if (d.messages) appendMessages(d.messages)
734
+ + if (d.message) appendMessage(d.message)
735
+ +
736
+ + // redraw the highlight on body update
737
+ + if (d.body) highlight.redraw()
738
+ + }
739
+ + }
740
+ + socket.onopen = function () {
741
+ + // reload page on successful reconnection
742
+ + if (attempts > 0) {
743
+ + window.location.reload()
744
+ + return
745
+ + }
746
+ +
747
+ + const scripts = document.querySelectorAll('script')
748
+ + for (let i = 0; i < scripts.length; i++) {
749
+ + const script = scripts[i]
750
+ + if (script.dataset && script.dataset.file) {
751
+ + socket.send(JSON.stringify({ file: script.dataset.file }))
752
+ + }
753
+ + }
754
+ +
755
+ + // add styles to body
756
+ + const style = document.createElement('style')
757
+ + style.innerHTML = `
758
+ + /* Injected by five-server */
759
+ + /*[data-highlight="true"] {
760
+ + border: 1px rgb(90,170,255) solid !important;
761
+ + background-color: rgba(155,215,255,0.5);
762
+ + animation: fadeOutHighlight 1s forwards 0.5s;
763
+ + }
764
+ + img[data-highlight="true"] {
765
+ + filter: sepia(100%) hue-rotate(180deg) saturate(200%);
766
+ + animation: fadeOutHighlightIMG 0.5s forwards 0.5s;
767
+ + }*/
768
+ + @keyframes fadeOutHighlight {
769
+ + from {background-color: rgba(155,215,255,0.5);}
770
+ + to {background-color: rgba(155,215,255,0);}
771
+ + }
772
+ + @keyframes fadeOutHighlightIMG {
773
+ + 0% {filter: sepia(100%) hue-rotate(180deg) saturate(200%);}
774
+ + 33% {filter: sepia(66%) hue-rotate(180deg) saturate(100%);}
775
+ + 50% {filter: sepia(50%) hue-rotate(90deg) saturate(50%);}
776
+ + 66% {filter: sepia(33%) hue-rotate(0deg) saturate(100%);}
777
+ + 100% {filter: sepia(0%) hue-rotate(0deg) saturate(100%);}
778
+ + }
779
+ + @keyframes fiveserverInfoPopup {
780
+ + 0% {top:-40px;}
781
+ + 15% {top:4px;}
782
+ + 85% {top:4px;}
783
+ + 100% {top:-40px;}
784
+ + }
785
+ + /*smaller*/
786
+ + @media (max-width: 640px) {
787
+ + #fiveserver-info-wrapper {
788
+ + max-width: 98%;
789
+ + }
790
+ + #fiveserver-info {
791
+ + border-radius: 0px;
792
+ + }
793
+ + }
794
+ +
795
+ + `
796
+ + document.head.appendChild(style)
797
+ + }
798
+ + socket.onclose = function (e) {
799
+ + setTimeout(function () {
800
+ + popup('lost connection to dev server', 'error')
801
+ + }, 300)
802
+ + if (attempts === 0) console.log('Socket is closed. Reconnect will be attempted in 1 second.', e.reason)
803
+ +
804
+ + setTimeout(function () {
805
+ + attempts++
806
+ + if (attempts > 1) console.log('connecting...')
807
+ + if (attempts <= MAX_ATTEMPTS) connect()
808
+ + wait = Math.floor(wait * 1.1)
809
+ + }, wait)
810
+ + }
811
+ + socket.onerror = function (event) {
812
+ + // console.error('Socket encountered error: ', event, 'Closing socket')
813
+ + socket.close()
814
+ + }
815
+ + }
816
+ +
817
+ + const MAX_STATUS_CHECK = 10
818
+ + let statusChecks = 0
819
+ + const reCheckStatus = () => {
820
+ + if (statusChecks > MAX_STATUS_CHECK) {
821
+ + console.error('[Five Server] status check failed')
822
+ + console.log('[Five Server] browser reloads in 5 seconds')
823
+ + setTimeout(() => {
824
+ + window.location.reload()
825
+ + }, 5000)
826
+ + return
827
+ + }
828
+ + console.log('[Five Server] status check...')
829
+ + setTimeout(() => {
830
+ + checkStatus()
831
+ + }, 1000)
832
+ + }
833
+ +
834
+ + const checkStatus = async () => {
835
+ + statusChecks++
836
+ + const p = new URL(script.src).protocol
837
+ + const h = new URL(script.src).host
838
+ + const baseurl = new URL(script.src).pathname.split('/').slice(0, -1).join('/')
839
+ +
840
+ + const url = `${p}//${h}${baseurl}/fiveserver/status`
841
+ +
842
+ + try {
843
+ + const res = await fetch(url)
844
+ + const json = await res.json()
845
+ +
846
+ + if (json && json.status && json.status === 'online') {
847
+ + connect()
848
+ + statusChecks = 0
849
+ + } else {
850
+ + reCheckStatus()
851
+ + }
852
+ + } catch (error) {
853
+ + reCheckStatus()
854
+ + }
855
+ + }
856
+ +
857
+ + checkStatus()
858
+ + })
859
+ +}
860
+ diff --git a/node_modules/five-server/lib/middleware/injectCode.js b/node_modules/five-server/lib/middleware/injectCode.js
861
+ index 955f273..6109ccf 100644
862
+ --- a/node_modules/five-server/lib/middleware/injectCode.js
863
+ +++ b/node_modules/five-server/lib/middleware/injectCode.js
864
+ @@ -49,6 +49,8 @@ class Inject extends stream_1.Writable {
865
+ }
866
+ if (this.injectTag) {
867
+ data = data.replace(this.injectTag, this.code + this.injectTag);
868
+ + } else {
869
+ + data = data + '\n' + this.code;
870
+ }
871
+ // convert cache to [src|href]="/.cache/.."
872
+ const replacer = (match, p1, p2, _offset, _string) => match.replace(p1, '').replace(p2, `/.cache/${p2.replace(/^\//, '')}`);
873
+ @@ -103,13 +105,9 @@ const injectCode = (root, baseURL, PHP, injectBodyOptions) => {
874
+ (0, fs_1.createReadStream)(filePath)
875
+ .pipe(inject)
876
+ .on('finish', () => {
877
+ - if (!inject.injectTag)
878
+ - return next();
879
+ - else {
880
+ res.type('html');
881
+ res.setHeader('Content-Length', inject.data.length);
882
+ res.send(inject.data);
883
+ - }
884
+ })
885
+ .on('error', () => {
886
+ return next();
prettier.config.js ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /** @type {import('prettier').Config} */
2
+ export default {
3
+ useTabs: true,
4
+ semi: false,
5
+ singleQuote: true,
6
+ trailingComma: 'all',
7
+ bracketSpacing: false,
8
+ printWidth: 120,
9
+ arrowParens: 'avoid',
10
+
11
+ overrides: [{files: '*.md', options: {useTabs: false, tabWidth: 2}}],
12
+ }
scratchpad/holster/importmap.js ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ document.write(/*html*/ `
3
+ <!--
4
+ JSPM Generator Import Map
5
+ Edit URL: https://generator.jspm.io/#Y2thZGBkDM0rySzJSU1hyCnNTXUw0DPWM9BNzCnISNQzMQEAb6aLpyIA
6
+ -->
7
+ <script type="importmap">
8
+ {
9
+ "imports": {
10
+ "lume": "https://cdn.jsdelivr.net/npm/lume@0.3.0-alpha.44/dist/index.js",
11
+ "three": "https://cdn.jsdelivr.net/npm/three@0.168.0/src/Three.js",
12
+ "three/": "https://cdn.jsdelivr.net/npm/three@0.168.0/"
13
+ },
14
+ "scopes": {
15
+ "https://cdn.jsdelivr.net/": {
16
+ "@lume/autolayout": "https://cdn.jsdelivr.net/npm/@lume/autolayout@0.10.2/dist/AutoLayout.js",
17
+ "@lume/custom-attributes/dist/index.js": "https://cdn.jsdelivr.net/npm/@lume/custom-attributes@0.2.4/dist/index.js",
18
+ "@lume/element": "https://cdn.jsdelivr.net/npm/@lume/element@0.13.1/dist/index.js",
19
+ "@lume/eventful": "https://cdn.jsdelivr.net/npm/@lume/eventful@0.3.3/dist/index.js",
20
+ "@lume/kiwi": "https://cdn.jsdelivr.net/npm/@lume/kiwi@0.4.4/dist/kiwi.js",
21
+ "@lume/three-projected-material/dist/ProjectedMaterial.js": "https://cdn.jsdelivr.net/npm/@lume/three-projected-material@0.3.1/dist/ProjectedMaterial.js",
22
+ "classy-solid": "https://cdn.jsdelivr.net/npm/classy-solid@0.4.3/dist/index.js",
23
+ "element-behaviors": "https://cdn.jsdelivr.net/npm/element-behaviors@5.0.5/dist/index.js",
24
+ "james-bond": "https://cdn.jsdelivr.net/npm/james-bond@0.7.4/dist/index.js",
25
+ "lowclass/dist/": "https://cdn.jsdelivr.net/npm/lowclass@8.0.2/dist/",
26
+ "regexr": "https://cdn.jsdelivr.net/npm/regexr@2.0.4/dist/index.js",
27
+ "solid-js": "https://cdn.jsdelivr.net/npm/solid-js@1.9.4/dist/solid.js",
28
+ "solid-js/html": "https://cdn.jsdelivr.net/npm/solid-js@1.9.4/html/dist/html.js",
29
+ "solid-js/store": "https://cdn.jsdelivr.net/npm/solid-js@1.9.4/store/dist/store.js",
30
+ "solid-js/web": "https://cdn.jsdelivr.net/npm/solid-js@1.9.4/web/dist/web.js"
31
+ }
32
+ }
33
+ }
34
+ </script>
35
+ `)
36
+ }
scratchpad/holster/index.html ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <script src="./importmap.js"></script>
2
+
3
+ <style>
4
+ html,
5
+ body {
6
+ margin: 0;
7
+ height: 100%;
8
+ background: #111;
9
+ }
10
+ </style>
11
+
12
+ <lume-scene
13
+ id="scene"
14
+ webgl
15
+ environment="https://rawcdn.githack.com/trusktr/assets/3437564ac855bb0551c25ae990aff94db488c36e/scratchspace/liminal-type/Grad_Hdri_05.jpg"
16
+ >
17
+ <lume-camera-rig min-distance="5" distance="20" dolly-speed="0.005">
18
+ <lume-point-light
19
+ id="light"
20
+ slot="camera-child"
21
+ intensity="2500000"
22
+ color="white"
23
+ position="500 500 500"
24
+ ></lume-point-light>
25
+ </lume-camera-rig>
26
+
27
+ <lume-gltf-model
28
+ id="model"
29
+ mount-point="0.5 0.5 0.5"
30
+ src="https://rawcdn.githack.com/trusktr/assets/18db535d6a29cdb181b7af9341a9fa1e2633c37a/scratchpad/holster/Holster3.glb"
31
+ position="0 0.7 0""
32
+ ></lume-gltf-model>
33
+ </lume-scene>
34
+
35
+ <script type="module">
36
+ import 'lume'
37
+ import * as THREE from 'three'
38
+
39
+ // Temporary: the new default in the next Lume release (for physically correct lights)
40
+ scene.physicallyCorrectLights = true
41
+ light.decay = 2
42
+ </script>
scratchpad/index.html ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ <script src="./listing.js"></script>
2
+
3
+ <a href="../"></a>
4
+ <a href="./holster/index.html"></a>
scratchpad/listing.css ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ html {
2
+ display: flex;
3
+ flex-direction: column;
4
+ align-items: center;
5
+ font-family: monospace;
6
+ font-size: x-large;
7
+ }
8
+ body {
9
+ display: flex;
10
+ flex-direction: column;
11
+ gap: 5px;
12
+ }
13
+ a {
14
+ text-decoration: none;
15
+ padding: 12px;
16
+ background-color: #f8f8f8;
17
+
18
+ &:hover {
19
+ background-color: #f0f0f0;
20
+ }
21
+
22
+ &:active {
23
+ background-color: #e8e8e8;
24
+ }
25
+ }
scratchpad/listing.js ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ document.write(/*html*/ `
3
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
4
+ <link rel="stylesheet" href="./listing.css" />
5
+ `)
6
+
7
+ window.addEventListener('DOMContentLoaded', () => {
8
+ const listing = Array.from(document.documentElement.querySelectorAll('a'))
9
+ console.log(listing)
10
+
11
+ for (const link of listing) {
12
+ console.log('linke', link)
13
+ let href = link.getAttribute('href') ?? ''
14
+ if (href.endsWith('/index.html')) href = href.slice(0, -10) // Remove /index.html
15
+ link.textContent = href
16
+ }
17
+ })
18
+ }