@seanhogg/builderforce-webcontainers-core 2026.10.6 → 2026.10.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (184) hide show
  1. package/dist/archive.d.ts +13 -0
  2. package/dist/archive.d.ts.map +1 -0
  3. package/dist/archive.js +53 -0
  4. package/dist/archive.js.map +1 -0
  5. package/dist/devServer.d.ts +5 -0
  6. package/dist/devServer.d.ts.map +1 -1
  7. package/dist/devServer.js +11 -2
  8. package/dist/devServer.js.map +1 -1
  9. package/dist/html.d.ts +12 -3
  10. package/dist/html.d.ts.map +1 -1
  11. package/dist/html.js +31 -5
  12. package/dist/html.js.map +1 -1
  13. package/dist/index.d.ts +5 -1
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +3 -1
  16. package/dist/index.js.map +1 -1
  17. package/dist/installer/index.d.ts +2 -0
  18. package/dist/installer/index.d.ts.map +1 -1
  19. package/dist/installer/index.js +1 -0
  20. package/dist/installer/index.js.map +1 -1
  21. package/dist/installer/install.d.ts +3 -0
  22. package/dist/installer/install.d.ts.map +1 -1
  23. package/dist/installer/install.js +1 -1
  24. package/dist/installer/install.js.map +1 -1
  25. package/dist/installer/npmrc.d.ts +26 -0
  26. package/dist/installer/npmrc.d.ts.map +1 -0
  27. package/dist/installer/npmrc.js +55 -0
  28. package/dist/installer/npmrc.js.map +1 -0
  29. package/dist/installer/registry.d.ts +3 -0
  30. package/dist/installer/registry.d.ts.map +1 -1
  31. package/dist/installer/registry.js +10 -5
  32. package/dist/installer/registry.js.map +1 -1
  33. package/dist/node/http/client.d.ts +3 -1
  34. package/dist/node/http/client.d.ts.map +1 -1
  35. package/dist/node/http/client.js +74 -5
  36. package/dist/node/http/client.js.map +1 -1
  37. package/dist/node/http/index.d.ts.map +1 -1
  38. package/dist/node/http/index.js +2 -1
  39. package/dist/node/http/index.js.map +1 -1
  40. package/dist/node/http/messages.d.ts +87 -0
  41. package/dist/node/http/messages.d.ts.map +1 -0
  42. package/dist/node/http/messages.js +146 -0
  43. package/dist/node/http/messages.js.map +1 -0
  44. package/dist/node/http/server.d.ts +13 -98
  45. package/dist/node/http/server.d.ts.map +1 -1
  46. package/dist/node/http/server.js +34 -202
  47. package/dist/node/http/server.js.map +1 -1
  48. package/dist/node/http/serverResponse.d.ts +42 -0
  49. package/dist/node/http/serverResponse.d.ts.map +1 -0
  50. package/dist/node/http/serverResponse.js +89 -0
  51. package/dist/node/http/serverResponse.js.map +1 -0
  52. package/dist/node/http/upgradeSocket.d.ts +34 -0
  53. package/dist/node/http/upgradeSocket.d.ts.map +1 -0
  54. package/dist/node/http/upgradeSocket.js +73 -0
  55. package/dist/node/http/upgradeSocket.js.map +1 -0
  56. package/dist/node/runtime.js +2 -2
  57. package/dist/node/runtime.js.map +1 -1
  58. package/dist/previewBridge.d.ts +42 -0
  59. package/dist/previewBridge.d.ts.map +1 -0
  60. package/dist/previewBridge.js +192 -0
  61. package/dist/previewBridge.js.map +1 -0
  62. package/dist/shell/ast.d.ts +101 -0
  63. package/dist/shell/ast.d.ts.map +1 -0
  64. package/dist/shell/ast.js +7 -0
  65. package/dist/shell/ast.js.map +1 -0
  66. package/dist/shell/builtins.d.ts +14 -0
  67. package/dist/shell/builtins.d.ts.map +1 -1
  68. package/dist/shell/builtins.js +87 -7
  69. package/dist/shell/builtins.js.map +1 -1
  70. package/dist/shell/compound.d.ts +30 -0
  71. package/dist/shell/compound.d.ts.map +1 -0
  72. package/dist/shell/compound.js +73 -0
  73. package/dist/shell/compound.js.map +1 -0
  74. package/dist/shell/exec.d.ts +27 -6
  75. package/dist/shell/exec.d.ts.map +1 -1
  76. package/dist/shell/exec.js +127 -41
  77. package/dist/shell/exec.js.map +1 -1
  78. package/dist/shell/expand.d.ts +5 -1
  79. package/dist/shell/expand.d.ts.map +1 -1
  80. package/dist/shell/expand.js +7 -5
  81. package/dist/shell/expand.js.map +1 -1
  82. package/dist/shell/lineReader.d.ts +9 -0
  83. package/dist/shell/lineReader.d.ts.map +1 -0
  84. package/dist/shell/lineReader.js +42 -0
  85. package/dist/shell/lineReader.js.map +1 -0
  86. package/dist/shell/npm.d.ts.map +1 -1
  87. package/dist/shell/npm.js +5 -1
  88. package/dist/shell/npm.js.map +1 -1
  89. package/dist/shell/packageManagers.d.ts +20 -0
  90. package/dist/shell/packageManagers.d.ts.map +1 -0
  91. package/dist/shell/packageManagers.js +74 -0
  92. package/dist/shell/packageManagers.js.map +1 -0
  93. package/dist/shell/parse.d.ts +16 -66
  94. package/dist/shell/parse.d.ts.map +1 -1
  95. package/dist/shell/parse.js +244 -243
  96. package/dist/shell/parse.js.map +1 -1
  97. package/dist/shell/program.d.ts.map +1 -1
  98. package/dist/shell/program.js +2 -1
  99. package/dist/shell/program.js.map +1 -1
  100. package/dist/shell/testCommand.d.ts +9 -0
  101. package/dist/shell/testCommand.d.ts.map +1 -0
  102. package/dist/shell/testCommand.js +105 -0
  103. package/dist/shell/testCommand.js.map +1 -0
  104. package/dist/shell/tokenize.d.ts +25 -0
  105. package/dist/shell/tokenize.d.ts.map +1 -0
  106. package/dist/shell/tokenize.js +279 -0
  107. package/dist/shell/tokenize.js.map +1 -0
  108. package/dist/system/cookieJar.d.ts +59 -0
  109. package/dist/system/cookieJar.d.ts.map +1 -0
  110. package/dist/system/cookieJar.js +187 -0
  111. package/dist/system/cookieJar.js.map +1 -0
  112. package/dist/system/httpStream.d.ts +40 -0
  113. package/dist/system/httpStream.d.ts.map +1 -0
  114. package/dist/system/httpStream.js +156 -0
  115. package/dist/system/httpStream.js.map +1 -0
  116. package/dist/system/index.d.ts +9 -1
  117. package/dist/system/index.d.ts.map +1 -1
  118. package/dist/system/index.js +4 -0
  119. package/dist/system/index.js.map +1 -1
  120. package/dist/system/kernel.d.ts +10 -2
  121. package/dist/system/kernel.d.ts.map +1 -1
  122. package/dist/system/kernel.js +12 -3
  123. package/dist/system/kernel.js.map +1 -1
  124. package/dist/system/ports.d.ts +9 -4
  125. package/dist/system/ports.d.ts.map +1 -1
  126. package/dist/system/ports.js +21 -2
  127. package/dist/system/ports.js.map +1 -1
  128. package/dist/system/programs.d.ts +1 -1
  129. package/dist/system/programs.d.ts.map +1 -1
  130. package/dist/system/programs.js +2 -0
  131. package/dist/system/programs.js.map +1 -1
  132. package/dist/system/types.d.ts +36 -6
  133. package/dist/system/types.d.ts.map +1 -1
  134. package/dist/system/webSocketClient.d.ts +37 -0
  135. package/dist/system/webSocketClient.d.ts.map +1 -0
  136. package/dist/system/webSocketClient.js +152 -0
  137. package/dist/system/webSocketClient.js.map +1 -0
  138. package/dist/system/webSocketFrames.d.ts +39 -0
  139. package/dist/system/webSocketFrames.d.ts.map +1 -0
  140. package/dist/system/webSocketFrames.js +117 -0
  141. package/dist/system/webSocketFrames.js.map +1 -0
  142. package/dist/vfs.d.ts +16 -1
  143. package/dist/vfs.d.ts.map +1 -1
  144. package/dist/vfs.js +45 -3
  145. package/dist/vfs.js.map +1 -1
  146. package/package.json +1 -1
  147. package/src/archive.ts +63 -0
  148. package/src/devServer.ts +12 -2
  149. package/src/html.ts +34 -5
  150. package/src/index.ts +5 -1
  151. package/src/installer/index.ts +2 -0
  152. package/src/installer/install.ts +4 -1
  153. package/src/installer/npmrc.ts +69 -0
  154. package/src/installer/registry.ts +12 -5
  155. package/src/node/http/client.ts +69 -6
  156. package/src/node/http/index.ts +2 -1
  157. package/src/node/http/messages.ts +150 -0
  158. package/src/node/http/server.ts +37 -202
  159. package/src/node/http/serverResponse.ts +98 -0
  160. package/src/node/http/upgradeSocket.ts +79 -0
  161. package/src/node/runtime.ts +2 -2
  162. package/src/previewBridge.ts +194 -0
  163. package/src/shell/ast.ts +85 -0
  164. package/src/shell/builtins.ts +97 -7
  165. package/src/shell/compound.ts +89 -0
  166. package/src/shell/exec.ts +128 -40
  167. package/src/shell/expand.ts +8 -6
  168. package/src/shell/lineReader.ts +46 -0
  169. package/src/shell/npm.ts +5 -1
  170. package/src/shell/packageManagers.ts +75 -0
  171. package/src/shell/parse.ts +233 -236
  172. package/src/shell/program.ts +2 -1
  173. package/src/shell/testCommand.ts +105 -0
  174. package/src/shell/tokenize.ts +257 -0
  175. package/src/system/cookieJar.ts +187 -0
  176. package/src/system/httpStream.ts +168 -0
  177. package/src/system/index.ts +24 -1
  178. package/src/system/kernel.ts +16 -4
  179. package/src/system/ports.ts +23 -4
  180. package/src/system/programs.ts +3 -1
  181. package/src/system/types.ts +40 -6
  182. package/src/system/webSocketClient.ts +177 -0
  183. package/src/system/webSocketFrames.ts +118 -0
  184. package/src/vfs.ts +46 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testCommand.d.ts","sourceRoot":"","sources":["../../src/shell/testCommand.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,OAAO,EAAkB,MAAM,cAAc,CAAC;AA2F5D,eAAO,MAAM,IAAI,EAAE,OAA2C,CAAC;AAE/D,eAAO,MAAM,OAAO,EAAE,OAMrB,CAAC"}
@@ -0,0 +1,105 @@
1
+ import { resolvePath } from './context.js';
2
+ class TestSyntaxError extends Error {
3
+ }
4
+ const FILE_TESTS = new Set(['-e', '-f', '-d', '-s', '-r', '-w', '-x', '-L', '-h']);
5
+ const INT_OPS = new Set(['-eq', '-ne', '-lt', '-le', '-gt', '-ge']);
6
+ function evaluate(ctx, args) {
7
+ let pos = 0;
8
+ const peek = () => args[pos];
9
+ const next = () => {
10
+ if (pos >= args.length)
11
+ throw new TestSyntaxError('argument expected');
12
+ return args[pos++];
13
+ };
14
+ const integer = (value) => {
15
+ if (!/^\s*-?\d+\s*$/.test(value))
16
+ throw new TestSyntaxError(`${value}: integer expression expected`);
17
+ return Number(value);
18
+ };
19
+ const primary = () => {
20
+ const token = next();
21
+ if (token === '!')
22
+ return !primary();
23
+ if (token === '(') {
24
+ const value = or();
25
+ if (next() !== ')')
26
+ throw new TestSyntaxError("')' expected");
27
+ return value;
28
+ }
29
+ const op = peek();
30
+ if (op !== undefined && (op === '=' || op === '==' || op === '!=' || INT_OPS.has(op)) && args[pos + 1] !== undefined) {
31
+ pos++;
32
+ const right = next();
33
+ if (op === '=' || op === '==')
34
+ return token === right;
35
+ if (op === '!=')
36
+ return token !== right;
37
+ const [a, b] = [integer(token), integer(right)];
38
+ return op === '-eq' ? a === b : op === '-ne' ? a !== b : op === '-lt' ? a < b : op === '-le' ? a <= b : op === '-gt' ? a > b : a >= b;
39
+ }
40
+ if (token === '-z' && peek() !== undefined)
41
+ return next().length === 0;
42
+ if (token === '-n' && peek() !== undefined)
43
+ return next().length > 0;
44
+ if (FILE_TESTS.has(token) && peek() !== undefined) {
45
+ const path = resolvePath(ctx, next());
46
+ const fs = ctx.fs;
47
+ switch (token) {
48
+ case '-f': return fs.isFile(path);
49
+ case '-d': return fs.isDirectory(path);
50
+ case '-s': {
51
+ const contents = fs.readFile(path);
52
+ return contents !== undefined && contents.length > 0;
53
+ }
54
+ case '-L':
55
+ case '-h': return false;
56
+ default: return fs.exists(path);
57
+ }
58
+ }
59
+ return token.length > 0;
60
+ };
61
+ const and = () => {
62
+ let value = primary();
63
+ while (peek() === '-a') {
64
+ pos++;
65
+ const right = primary();
66
+ value = value && right;
67
+ }
68
+ return value;
69
+ };
70
+ const or = () => {
71
+ let value = and();
72
+ while (peek() === '-o') {
73
+ pos++;
74
+ const right = and();
75
+ value = value || right;
76
+ }
77
+ return value;
78
+ };
79
+ if (!args.length)
80
+ return false;
81
+ const result = or();
82
+ if (pos < args.length)
83
+ throw new TestSyntaxError(`${args[pos]}: unexpected argument`);
84
+ return result;
85
+ }
86
+ function run(ctx, args) {
87
+ try {
88
+ return evaluate(ctx, args) ? 0 : 1;
89
+ }
90
+ catch (error) {
91
+ if (!(error instanceof TestSyntaxError))
92
+ throw error;
93
+ ctx.io.stderr(`${ctx.name}: ${error.message}\n`);
94
+ return 2;
95
+ }
96
+ }
97
+ export const test = async (ctx) => run(ctx, ctx.args);
98
+ export const bracket = async (ctx) => {
99
+ if (ctx.args[ctx.args.length - 1] !== ']') {
100
+ ctx.io.stderr("[: missing ']'\n");
101
+ return 2;
102
+ }
103
+ return run(ctx, ctx.args.slice(0, -1));
104
+ };
105
+ //# sourceMappingURL=testCommand.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testCommand.js","sourceRoot":"","sources":["../../src/shell/testCommand.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,MAAM,eAAgB,SAAQ,KAAK;CAAG;AAEtC,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AACnF,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;AAEpE,SAAS,QAAQ,CAAC,GAAmB,EAAE,IAAc;IACnD,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7B,MAAM,IAAI,GAAG,GAAG,EAAE;QAChB,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,eAAe,CAAC,mBAAmB,CAAC,CAAC;QACvE,OAAO,IAAI,CAAC,GAAG,EAAE,CAAE,CAAC;IACtB,CAAC,CAAC;IACF,MAAM,OAAO,GAAG,CAAC,KAAa,EAAE,EAAE;QAChC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,MAAM,IAAI,eAAe,CAAC,GAAG,KAAK,+BAA+B,CAAC,CAAC;QACrG,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,GAAY,EAAE;QAC5B,MAAM,KAAK,GAAG,IAAI,EAAE,CAAC;QACrB,IAAI,KAAK,KAAK,GAAG;YAAE,OAAO,CAAC,OAAO,EAAE,CAAC;QACrC,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;YAClB,MAAM,KAAK,GAAG,EAAE,EAAE,CAAC;YACnB,IAAI,IAAI,EAAE,KAAK,GAAG;gBAAE,MAAM,IAAI,eAAe,CAAC,cAAc,CAAC,CAAC;YAC9D,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,EAAE,GAAG,IAAI,EAAE,CAAC;QAClB,IAAI,EAAE,KAAK,SAAS,IAAI,CAAC,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;YACrH,GAAG,EAAE,CAAC;YACN,MAAM,KAAK,GAAG,IAAI,EAAE,CAAC;YACrB,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,IAAI;gBAAE,OAAO,KAAK,KAAK,KAAK,CAAC;YACtD,IAAI,EAAE,KAAK,IAAI;gBAAE,OAAO,KAAK,KAAK,KAAK,CAAC;YACxC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;YAChD,OAAO,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACxI,CAAC;QACD,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,EAAE,KAAK,SAAS;YAAE,OAAO,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC;QACvE,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,EAAE,KAAK,SAAS;YAAE,OAAO,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;QACrE,IAAI,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;YAClD,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;YACtC,MAAM,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;YAClB,QAAQ,KAAK,EAAE,CAAC;gBACd,KAAK,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAClC,KAAK,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;gBACvC,KAAK,IAAI,CAAC,CAAC,CAAC;oBACV,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;oBACnC,OAAO,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;gBACvD,CAAC;gBACD,KAAK,IAAI,CAAC;gBACV,KAAK,IAAI,CAAC,CAAC,OAAO,KAAK,CAAC;gBACxB,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IAC1B,CAAC,CAAC;IACF,MAAM,GAAG,GAAG,GAAY,EAAE;QACxB,IAAI,KAAK,GAAG,OAAO,EAAE,CAAC;QACtB,OAAO,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;YACvB,GAAG,EAAE,CAAC;YACN,MAAM,KAAK,GAAG,OAAO,EAAE,CAAC;YACxB,KAAK,GAAG,KAAK,IAAI,KAAK,CAAC;QACzB,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IACF,MAAM,EAAE,GAAG,GAAY,EAAE;QACvB,IAAI,KAAK,GAAG,GAAG,EAAE,CAAC;QAClB,OAAO,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;YACvB,GAAG,EAAE,CAAC;YACN,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC;YACpB,KAAK,GAAG,KAAK,IAAI,KAAK,CAAC;QACzB,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IAEF,IAAI,CAAC,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAC/B,MAAM,MAAM,GAAG,EAAE,EAAE,CAAC;IACpB,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,eAAe,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;IACtF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,GAAG,CAAC,GAAmB,EAAE,IAAc;IAC9C,IAAI,CAAC;QACH,OAAO,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,CAAC,KAAK,YAAY,eAAe,CAAC;YAAE,MAAM,KAAK,CAAC;QACrD,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;QACjD,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,IAAI,GAAY,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;AAE/D,MAAM,CAAC,MAAM,OAAO,GAAY,KAAK,EAAE,GAAG,EAAE,EAAE;IAC5C,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;QAC1C,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;QAClC,OAAO,CAAC,CAAC;IACX,CAAC;IACD,OAAO,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACzC,CAAC,CAAC"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Shell tokens: words (with their quoting, as segments) and operators. Here-
3
+ * documents are read here too — `<<EOF` is followed, after the end of its line,
4
+ * by body lines up to the delimiter — so the parser sees each body attached to
5
+ * its redirect.
6
+ */
7
+ import type { Word } from './ast.js';
8
+ export type Token = {
9
+ type: 'word';
10
+ word: Word;
11
+ raw: string;
12
+ } | {
13
+ type: 'op';
14
+ op: string;
15
+ } | {
16
+ type: 'heredoc';
17
+ body?: Word;
18
+ };
19
+ export declare class ShellSyntaxError extends Error {
20
+ readonly incomplete: boolean;
21
+ /** The input ended inside a quote, a block or a here-document: an interactive shell asks for more. */
22
+ constructor(message: string, incomplete?: boolean);
23
+ }
24
+ export declare function tokenize(input: string, wordOnly?: boolean): Token[];
25
+ //# sourceMappingURL=tokenize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenize.d.ts","sourceRoot":"","sources":["../../src/shell/tokenize.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAW,IAAI,EAAE,MAAM,UAAU,CAAC;AAE9C,MAAM,MAAM,KAAK,GACb;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GACzC;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAC1B;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,CAAC,EAAE,IAAI,CAAA;CAAE,CAAC;AAErC,qBAAa,gBAAiB,SAAQ,KAAK;IAEZ,QAAQ,CAAC,UAAU;IADhD,sGAAsG;gBAC1F,OAAO,EAAE,MAAM,EAAW,UAAU,UAAQ;CAGzD;AAqHD,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,UAAQ,GAAG,KAAK,EAAE,CAyHjE"}
@@ -0,0 +1,279 @@
1
+ export class ShellSyntaxError extends Error {
2
+ incomplete;
3
+ /** The input ended inside a quote, a block or a here-document: an interactive shell asks for more. */
4
+ constructor(message, incomplete = false) {
5
+ super(message);
6
+ this.incomplete = incomplete;
7
+ }
8
+ }
9
+ const OPERATORS = ['2>&1', '>&2', '2>>', '<<-', '&&', '||', ';;', '>>', '<<', '2>', '&>', '|', '&', ';', '>', '<', '(', ')', '\n'];
10
+ const SPECIAL_VARS = /^[?$#@*!0-9]/;
11
+ /** Unquoted characters that end a word. */
12
+ const WORD_BREAK = /[;|&<>()]/;
13
+ /** Find the `)` closing a `$(` at `start` (just after the paren), honouring quotes and nesting. */
14
+ function matchParen(input, start) {
15
+ let depth = 1;
16
+ for (let i = start; i < input.length; i++) {
17
+ const ch = input[i];
18
+ if (ch === '\\')
19
+ i++;
20
+ else if (ch === "'")
21
+ i = input.indexOf("'", i + 1) < 0 ? input.length : input.indexOf("'", i + 1);
22
+ else if (ch === '"') {
23
+ for (i++; i < input.length && input[i] !== '"'; i++)
24
+ if (input[i] === '\\')
25
+ i++;
26
+ }
27
+ else if (ch === '(')
28
+ depth++;
29
+ else if (ch === ')' && --depth === 0)
30
+ return i;
31
+ }
32
+ throw new ShellSyntaxError('unexpected end of input: missing )', true);
33
+ }
34
+ /** Parse `$…` at `i` (pointing at `$`); returns the segment and the index after it. */
35
+ function readDollar(input, i, quoted) {
36
+ const next = input[i + 1];
37
+ if (next === '(') {
38
+ const end = matchParen(input, i + 2);
39
+ return [{ kind: 'cmd', source: input.slice(i + 2, end), quoted }, end + 1];
40
+ }
41
+ if (next === '{') {
42
+ const end = input.indexOf('}', i + 2);
43
+ if (end < 0)
44
+ throw new ShellSyntaxError('unexpected end of input: missing }', true);
45
+ const body = input.slice(i + 2, end);
46
+ const m = /^([A-Za-z_][\w]*|[?$#@*!0-9])(?:(:-|-|:=|:\+)(.*))?$/s.exec(body);
47
+ if (!m)
48
+ throw new ShellSyntaxError(`bad substitution: \${${body}}`);
49
+ const seg = { kind: 'var', name: m[1], quoted };
50
+ if (m[2]) {
51
+ seg.op = m[2];
52
+ seg.arg = tokenizeWord(m[3] ?? '', quoted);
53
+ }
54
+ return [seg, end + 1];
55
+ }
56
+ if (next && SPECIAL_VARS.test(next))
57
+ return [{ kind: 'var', name: next, quoted }, i + 2];
58
+ const m = /^[A-Za-z_]\w*/.exec(input.slice(i + 1));
59
+ if (!m)
60
+ return [{ kind: 'text', value: '$', quoted }, i + 1];
61
+ return [{ kind: 'var', name: m[0], quoted }, i + 1 + m[0].length];
62
+ }
63
+ /** Segments of a word body (used for `${x:-default}` arguments). */
64
+ function tokenizeWord(text, quoted) {
65
+ const tokens = tokenize(text, true);
66
+ const word = [];
67
+ for (const t of tokens)
68
+ if (t.type === 'word')
69
+ word.push(...t.word.map((s) => (s.kind === 'tilde' ? s : { ...s, quoted: quoted || ('quoted' in s && s.quoted) })));
70
+ return word;
71
+ }
72
+ /** A here-document body as a word: `$VAR`, `$(…)` and backticks expand, nothing splits or globs. */
73
+ function heredocWord(body) {
74
+ const word = [];
75
+ let text = '';
76
+ const flush = () => {
77
+ if (text)
78
+ word.push({ kind: 'text', value: text, quoted: true });
79
+ text = '';
80
+ };
81
+ for (let i = 0; i < body.length;) {
82
+ const c = body[i];
83
+ if (c === '\\' && /[$`\\\n]/.test(body[i + 1] ?? '')) {
84
+ if (body[i + 1] !== '\n')
85
+ text += body[i + 1];
86
+ i += 2;
87
+ }
88
+ else if (c === '$') {
89
+ flush();
90
+ const [seg, next] = readDollar(body, i, true);
91
+ word.push(seg);
92
+ i = next;
93
+ }
94
+ else if (c === '`') {
95
+ flush();
96
+ const end = body.indexOf('`', i + 1);
97
+ if (end < 0)
98
+ throw new ShellSyntaxError('unterminated ` in here-document');
99
+ word.push({ kind: 'cmd', source: body.slice(i + 1, end), quoted: true });
100
+ i = end + 1;
101
+ }
102
+ else {
103
+ text += c;
104
+ i++;
105
+ }
106
+ }
107
+ flush();
108
+ return word.length ? word : [{ kind: 'text', value: '', quoted: true }];
109
+ }
110
+ /** Read the bodies of pending here-documents starting at `i` (the start of a line); returns the index after them. */
111
+ function readHeredocs(input, i, pending) {
112
+ for (const doc of pending) {
113
+ const lines = [];
114
+ for (;;) {
115
+ if (i >= input.length)
116
+ throw new ShellSyntaxError(`unexpected end of input: here-document delimited by ${doc.delimiter}`, true);
117
+ const end = input.indexOf('\n', i);
118
+ let line = input.slice(i, end < 0 ? input.length : end).replace(/\r$/, '');
119
+ i = end < 0 ? input.length : end + 1;
120
+ if (doc.strip)
121
+ line = line.replace(/^\t+/, '');
122
+ if (line === doc.delimiter)
123
+ break;
124
+ if (end < 0)
125
+ throw new ShellSyntaxError(`unexpected end of input: here-document delimited by ${doc.delimiter}`, true);
126
+ lines.push(line);
127
+ }
128
+ const body = lines.map((l) => l + '\n').join('');
129
+ doc.token.body = doc.quoted ? [{ kind: 'text', value: body, quoted: true }] : heredocWord(body);
130
+ }
131
+ pending.length = 0;
132
+ return i;
133
+ }
134
+ export function tokenize(input, wordOnly = false) {
135
+ const tokens = [];
136
+ const pending = [];
137
+ let i = 0;
138
+ while (i < input.length) {
139
+ const ch = input[i];
140
+ if (ch === ' ' || ch === '\t' || ch === '\r') {
141
+ i++;
142
+ continue;
143
+ }
144
+ if (ch === '\\' && input[i + 1] === '\n') {
145
+ i += 2;
146
+ continue;
147
+ }
148
+ if (ch === '#') {
149
+ while (i < input.length && input[i] !== '\n')
150
+ i++;
151
+ continue;
152
+ }
153
+ if (!wordOnly) {
154
+ const op = OPERATORS.find((o) => input.startsWith(o, i));
155
+ if (op) {
156
+ tokens.push({ type: 'op', op });
157
+ i += op.length;
158
+ if (op === '\n' && pending.length)
159
+ i = readHeredocs(input, i, pending);
160
+ if (op === '<<' || op === '<<-') {
161
+ while (input[i] === ' ' || input[i] === '\t')
162
+ i++;
163
+ const start = i;
164
+ while (i < input.length && !/[\s;|&<>()]/.test(input[i]))
165
+ i++;
166
+ const raw = input.slice(start, i);
167
+ if (!raw)
168
+ throw new ShellSyntaxError('syntax error: here-document needs a delimiter');
169
+ const token = { type: 'heredoc' };
170
+ tokens.push(token);
171
+ pending.push({ token, delimiter: raw.replace(/["'\\]/g, ''), strip: op === '<<-', quoted: /["'\\]/.test(raw) });
172
+ }
173
+ continue;
174
+ }
175
+ }
176
+ // A word: runs until unquoted whitespace or an operator character.
177
+ const word = [];
178
+ const start = i;
179
+ let text = '';
180
+ const flush = () => {
181
+ if (text)
182
+ word.push({ kind: 'text', value: text, quoted: false });
183
+ text = '';
184
+ };
185
+ if (input[i] === '~' && (i + 1 >= input.length || /[\s/;|&<>()]/.test(input[i + 1]))) {
186
+ word.push({ kind: 'tilde' });
187
+ i++;
188
+ }
189
+ while (i < input.length) {
190
+ const c = input[i];
191
+ if (/[\s]/.test(c) && !wordOnly)
192
+ break;
193
+ if (!wordOnly && WORD_BREAK.test(c))
194
+ break;
195
+ if (c === '\\') {
196
+ text += input[i + 1] ?? '';
197
+ i += 2;
198
+ }
199
+ else if (c === "'") {
200
+ const end = input.indexOf("'", i + 1);
201
+ if (end < 0)
202
+ throw new ShellSyntaxError('unexpected end of input: unterminated quote', true);
203
+ flush();
204
+ word.push({ kind: 'text', value: input.slice(i + 1, end), quoted: true });
205
+ i = end + 1;
206
+ }
207
+ else if (c === '"') {
208
+ flush();
209
+ i++;
210
+ let inner = '';
211
+ const pushInner = () => {
212
+ if (inner)
213
+ word.push({ kind: 'text', value: inner, quoted: true });
214
+ inner = '';
215
+ };
216
+ let closed = false;
217
+ while (i < input.length) {
218
+ const d = input[i];
219
+ if (d === '"') {
220
+ closed = true;
221
+ i++;
222
+ break;
223
+ }
224
+ if (d === '\\' && /["\\$`\n]/.test(input[i + 1] ?? '')) {
225
+ inner += input[i + 1];
226
+ i += 2;
227
+ }
228
+ else if (d === '$') {
229
+ pushInner();
230
+ const [seg, next] = readDollar(input, i, true);
231
+ word.push(seg);
232
+ i = next;
233
+ }
234
+ else if (d === '`') {
235
+ pushInner();
236
+ const end = input.indexOf('`', i + 1);
237
+ if (end < 0)
238
+ throw new ShellSyntaxError('unexpected end of input: unterminated `', true);
239
+ word.push({ kind: 'cmd', source: input.slice(i + 1, end), quoted: true });
240
+ i = end + 1;
241
+ }
242
+ else {
243
+ inner += d;
244
+ i++;
245
+ }
246
+ }
247
+ if (!closed)
248
+ throw new ShellSyntaxError('unexpected end of input: unterminated quote', true);
249
+ pushInner();
250
+ if (!word.length || word[word.length - 1].kind !== 'text')
251
+ word.push({ kind: 'text', value: '', quoted: true });
252
+ }
253
+ else if (c === '$') {
254
+ flush();
255
+ const [seg, next] = readDollar(input, i, false);
256
+ word.push(seg);
257
+ i = next;
258
+ }
259
+ else if (c === '`') {
260
+ flush();
261
+ const end = input.indexOf('`', i + 1);
262
+ if (end < 0)
263
+ throw new ShellSyntaxError('unexpected end of input: unterminated `', true);
264
+ word.push({ kind: 'cmd', source: input.slice(i + 1, end), quoted: false });
265
+ i = end + 1;
266
+ }
267
+ else {
268
+ text += c;
269
+ i++;
270
+ }
271
+ }
272
+ flush();
273
+ tokens.push({ type: 'word', word, raw: input.slice(start, i) });
274
+ }
275
+ if (pending.length)
276
+ throw new ShellSyntaxError(`unexpected end of input: here-document delimited by ${pending[0].delimiter}`, true);
277
+ return tokens;
278
+ }
279
+ //# sourceMappingURL=tokenize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenize.js","sourceRoot":"","sources":["../../src/shell/tokenize.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Cookies for virtual servers. A service worker cannot hand `Set-Cookie` to
3
+ * the browser (it is a forbidden header on a synthesized response), so the
4
+ * host keeps the jar itself: it stores what a server sets and sends it back as
5
+ * the `Cookie` header on later requests — per preview and per port, which is
6
+ * the origin a server would have had. Paths, `Max-Age`/`Expires` and deletion
7
+ * follow RFC 6265; `HttpOnly` cookies are stored and sent but never shown to
8
+ * page script; `Domain`, `Secure` and `SameSite` have nothing to choose between
9
+ * (every request goes to the one server) and are kept only as metadata.
10
+ */
11
+ export interface StoredCookie {
12
+ name: string;
13
+ value: string;
14
+ path: string;
15
+ /** Epoch ms; undefined for a session cookie (lives as long as the runtime). */
16
+ expires?: number;
17
+ httpOnly: boolean;
18
+ secure: boolean;
19
+ sameSite?: string;
20
+ }
21
+ /** RFC 6265 §5.1.4: the directory of the request path. */
22
+ export declare function defaultCookiePath(requestPath: string): string;
23
+ /** RFC 6265 §5.1.4 path-match. */
24
+ export declare function cookiePathMatches(cookiePath: string, requestPath: string): boolean;
25
+ /** Parse one `Set-Cookie` value; undefined when malformed. `deleted` marks an already-expired cookie (a deletion). */
26
+ export declare function parseSetCookie(header: string, requestPath: string, now?: number): (StoredCookie & {
27
+ deleted: boolean;
28
+ }) | undefined;
29
+ export declare class CookieJar {
30
+ private cookies;
31
+ private readonly listeners;
32
+ /** Store `Set-Cookie` values from a response to `requestPath`; returns whether anything changed. */
33
+ store(setCookie: string | readonly string[] | undefined, requestPath: string, now?: number): boolean;
34
+ /** A `document.cookie = '…'` assignment from a page at `pagePath`. Script cannot create or replace an `HttpOnly` cookie. */
35
+ setFromDocument(assignment: string, pagePath: string, now?: number): boolean;
36
+ /** The `Cookie` header for a request to `path`; undefined when no cookie applies. Longer paths first. */
37
+ header(path: string, now?: number): string | undefined;
38
+ /** What `document.cookie` reads on a page at `path`: the same cookies, minus `HttpOnly` ones. */
39
+ documentCookie(path: string, now?: number): string;
40
+ /** Every live cookie. */
41
+ list(now?: number): StoredCookie[];
42
+ clear(): void;
43
+ /** The jar changed (a server or a page set or deleted a cookie). */
44
+ onChange(listener: () => void): () => void;
45
+ private put;
46
+ private matching;
47
+ private expire;
48
+ private notify;
49
+ }
50
+ /** One jar per virtual server port — what the preview host keeps for its runtime. */
51
+ export declare class PortCookieJars {
52
+ private readonly jars;
53
+ private readonly listeners;
54
+ jar(port: number): CookieJar;
55
+ /** Some port's jar changed. */
56
+ onChange(listener: (port: number) => void): () => void;
57
+ clear(): void;
58
+ }
59
+ //# sourceMappingURL=cookieJar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cookieJar.d.ts","sourceRoot":"","sources":["../../src/system/cookieJar.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,+EAA+E;IAC/E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,0DAA0D;AAC1D,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAK7D;AAED,kCAAkC;AAClC,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAKlF;AAED,sHAAsH;AACtH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,SAAa,GAAG,CAAC,YAAY,GAAG;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,GAAG,SAAS,CA2BvI;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAyB;IAEnD,oGAAoG;IACpG,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,GAAG,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,SAAa,GAAG,OAAO;IAWxG,4HAA4H;IAC5H,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,SAAa,GAAG,OAAO;IAQhF,yGAAyG;IACzG,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,SAAa,GAAG,MAAM,GAAG,SAAS;IAK1D,iGAAiG;IACjG,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,SAAa,GAAG,MAAM;IAItD,yBAAyB;IACzB,IAAI,CAAC,GAAG,SAAa,GAAG,YAAY,EAAE;IAKtC,KAAK,IAAI,IAAI;IAMb,oEAAoE;IACpE,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IAK1C,OAAO,CAAC,GAAG;IAiBX,OAAO,CAAC,QAAQ;IAShB,OAAO,CAAC,MAAM;IAOd,OAAO,CAAC,MAAM;CAGf;AAED,qFAAqF;AACrF,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAgC;IACrD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqC;IAE/D,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS;IAY5B,+BAA+B;IAC/B,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,MAAM,IAAI;IAKtD,KAAK,IAAI,IAAI;CAGd"}