@dxos/plugin-script 0.7.5-main.e9bb01b → 0.7.5-staging.2ff1350

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 (215) hide show
  1. package/dist/lib/browser/{AutomationPanel-KZVZMZE6.mjs → AutomationPanel-6HFRNRWV.mjs} +3 -3
  2. package/dist/lib/browser/{ScriptContainer-AERJBGYK.mjs → ScriptContainer-GR7X5NSI.mjs} +97 -69
  3. package/dist/lib/browser/ScriptContainer-GR7X5NSI.mjs.map +7 -0
  4. package/dist/lib/browser/artifact-definition-NAWYXFF5.mjs +243 -0
  5. package/dist/lib/browser/artifact-definition-NAWYXFF5.mjs.map +7 -0
  6. package/dist/lib/browser/{chunk-Y4CVWFVS.mjs → chunk-5SXOHNAK.mjs} +4 -4
  7. package/dist/lib/browser/chunk-5SXOHNAK.mjs.map +7 -0
  8. package/dist/lib/browser/{chunk-ABNZIPST.mjs → chunk-6MOQ4BP3.mjs} +2 -2
  9. package/dist/lib/browser/{chunk-J7CBIZI2.mjs → chunk-7RUMC44X.mjs} +19 -7
  10. package/dist/lib/browser/{chunk-J7CBIZI2.mjs.map → chunk-7RUMC44X.mjs.map} +3 -3
  11. package/dist/lib/browser/{chunk-ESPJMGXJ.mjs → chunk-FVVCAWNP.mjs} +2 -2
  12. package/dist/lib/browser/chunk-FVVCAWNP.mjs.map +7 -0
  13. package/dist/lib/browser/{chunk-NFPF4OIU.mjs → chunk-N46LE7FS.mjs} +2 -2
  14. package/dist/lib/browser/chunk-YJAKD6E3.mjs +69 -0
  15. package/dist/lib/browser/chunk-YJAKD6E3.mjs.map +7 -0
  16. package/dist/lib/browser/{compiler-4QD7VFZX.mjs → compiler-YY2XSKHQ.mjs} +4 -6
  17. package/dist/lib/browser/compiler-YY2XSKHQ.mjs.map +7 -0
  18. package/dist/lib/browser/index.mjs +47 -30
  19. package/dist/lib/browser/index.mjs.map +4 -4
  20. package/dist/lib/browser/{intent-resolver-YABC4JRJ.mjs → intent-resolver-I6VDXUDH.mjs} +4 -4
  21. package/dist/lib/browser/meta.json +1 -1
  22. package/dist/lib/browser/{react-surface-FRQIIYKG.mjs → react-surface-FGWXHB7P.mjs} +5 -5
  23. package/dist/lib/browser/{react-surface-FRQIIYKG.mjs.map → react-surface-FGWXHB7P.mjs.map} +2 -2
  24. package/dist/lib/browser/{settings-S4MGGM4D.mjs → settings-SZCDKHWO.mjs} +3 -3
  25. package/dist/lib/browser/types.mjs +2 -2
  26. package/dist/lib/node/{AutomationPanel-6QSV7ZYK.cjs → AutomationPanel-RBQ4DODN.cjs} +8 -8
  27. package/dist/lib/node/{ScriptContainer-DOAQ6KOE.cjs → ScriptContainer-SLARXOSU.cjs} +100 -70
  28. package/dist/lib/node/ScriptContainer-SLARXOSU.cjs.map +7 -0
  29. package/dist/lib/node/artifact-definition-7AANUS3X.cjs +262 -0
  30. package/dist/lib/node/artifact-definition-7AANUS3X.cjs.map +7 -0
  31. package/dist/lib/node/{chunk-HU2JXUXI.cjs → chunk-5UH3F7TA.cjs} +5 -5
  32. package/dist/lib/node/chunk-5UH3F7TA.cjs.map +7 -0
  33. package/dist/lib/node/chunk-7XULMIYT.cjs +77 -0
  34. package/dist/lib/node/chunk-7XULMIYT.cjs.map +7 -0
  35. package/dist/lib/node/{chunk-RZHY5LAR.cjs → chunk-ALY3N6PW.cjs} +6 -6
  36. package/dist/lib/node/{chunk-6M2VRFBC.cjs → chunk-DJGLGRQV.cjs} +6 -6
  37. package/dist/lib/node/{chunk-63C2KSD6.cjs → chunk-JITODKGN.cjs} +23 -11
  38. package/dist/lib/node/{chunk-63C2KSD6.cjs.map → chunk-JITODKGN.cjs.map} +3 -3
  39. package/dist/lib/node/{chunk-CZVVFUVL.cjs → chunk-K3ZZWVXS.cjs} +7 -7
  40. package/dist/lib/node/chunk-K3ZZWVXS.cjs.map +7 -0
  41. package/dist/lib/node/{compiler-Q3EXWKV5.cjs → compiler-UIBLKJKG.cjs} +9 -9
  42. package/dist/lib/node/compiler-UIBLKJKG.cjs.map +7 -0
  43. package/dist/lib/node/index.cjs +62 -46
  44. package/dist/lib/node/index.cjs.map +4 -4
  45. package/dist/lib/node/{intent-resolver-7HI2CDGB.cjs → intent-resolver-MYATX7IR.cjs} +9 -9
  46. package/dist/lib/node/meta.json +1 -1
  47. package/dist/lib/node/{react-surface-IKONODLG.cjs → react-surface-2GH5HQX4.cjs} +18 -18
  48. package/dist/lib/node/{react-surface-IKONODLG.cjs.map → react-surface-2GH5HQX4.cjs.map} +2 -2
  49. package/dist/lib/node/{settings-Q5XIA4LZ.cjs → settings-SZFSMSKM.cjs} +9 -9
  50. package/dist/lib/node/types.cjs +4 -4
  51. package/dist/lib/node/types.cjs.map +1 -1
  52. package/dist/lib/node-esm/{AutomationPanel-EZQSGJLS.mjs → AutomationPanel-WTVVVMRH.mjs} +3 -3
  53. package/dist/lib/node-esm/{ScriptContainer-HE5QPPFZ.mjs → ScriptContainer-MHRJXMC4.mjs} +97 -69
  54. package/dist/lib/node-esm/ScriptContainer-MHRJXMC4.mjs.map +7 -0
  55. package/dist/lib/node-esm/artifact-definition-KBASPVMM.mjs +245 -0
  56. package/dist/lib/node-esm/artifact-definition-KBASPVMM.mjs.map +7 -0
  57. package/dist/lib/node-esm/{chunk-77LRZF2W.mjs → chunk-2AFXX34U.mjs} +4 -4
  58. package/dist/lib/node-esm/chunk-2AFXX34U.mjs.map +7 -0
  59. package/dist/lib/node-esm/chunk-6CHX4CEL.mjs +71 -0
  60. package/dist/lib/node-esm/chunk-6CHX4CEL.mjs.map +7 -0
  61. package/dist/lib/node-esm/{chunk-3YOO5E2D.mjs → chunk-CP5LXTK5.mjs} +2 -2
  62. package/dist/lib/node-esm/{chunk-UWHMEJYW.mjs → chunk-IAELQPSI.mjs} +19 -7
  63. package/dist/lib/node-esm/{chunk-UWHMEJYW.mjs.map → chunk-IAELQPSI.mjs.map} +3 -3
  64. package/dist/lib/node-esm/{chunk-EOBGHKNT.mjs → chunk-P2V2Y5LV.mjs} +2 -2
  65. package/dist/lib/node-esm/chunk-P2V2Y5LV.mjs.map +7 -0
  66. package/dist/lib/node-esm/{chunk-5D2AXTAW.mjs → chunk-UNQFIERE.mjs} +2 -2
  67. package/dist/lib/node-esm/{compiler-KJEIPDZ6.mjs → compiler-XTXFGZJM.mjs} +4 -6
  68. package/dist/lib/node-esm/compiler-XTXFGZJM.mjs.map +7 -0
  69. package/dist/lib/node-esm/index.mjs +47 -30
  70. package/dist/lib/node-esm/index.mjs.map +4 -4
  71. package/dist/lib/node-esm/{intent-resolver-KG7I6JJA.mjs → intent-resolver-PBDTYC4P.mjs} +4 -4
  72. package/dist/lib/node-esm/meta.json +1 -1
  73. package/dist/lib/node-esm/{react-surface-YA7WIRAM.mjs → react-surface-MLE3J3TF.mjs} +5 -5
  74. package/dist/lib/node-esm/{react-surface-YA7WIRAM.mjs.map → react-surface-MLE3J3TF.mjs.map} +2 -2
  75. package/dist/lib/node-esm/{settings-NZXHNIQ3.mjs → settings-GR4O2WHZ.mjs} +3 -3
  76. package/dist/lib/node-esm/types.mjs +2 -2
  77. package/dist/types/src/ScriptPlugin.d.ts.map +1 -1
  78. package/dist/types/src/capabilities/artifact-definition.d.ts +11 -0
  79. package/dist/types/src/capabilities/artifact-definition.d.ts.map +1 -0
  80. package/dist/types/src/capabilities/index.d.ts +1 -0
  81. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  82. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  83. package/dist/types/src/components/AutomationPanel/AutomationPanel.d.ts +1 -2
  84. package/dist/types/src/components/AutomationPanel/AutomationPanel.d.ts.map +1 -1
  85. package/dist/types/src/components/DebugPanel/DebugPanel.d.ts +1 -2
  86. package/dist/types/src/components/DebugPanel/DebugPanel.d.ts.map +1 -1
  87. package/dist/types/src/components/FrameContainer/FrameContainer.d.ts +3 -4
  88. package/dist/types/src/components/FrameContainer/FrameContainer.d.ts.map +1 -1
  89. package/dist/types/src/components/ScriptContainer.d.ts +2 -3
  90. package/dist/types/src/components/ScriptContainer.d.ts.map +1 -1
  91. package/dist/types/src/components/ScriptSettings/ScriptSettings.d.ts +1 -2
  92. package/dist/types/src/components/ScriptSettings/ScriptSettings.d.ts.map +1 -1
  93. package/dist/types/src/components/ScriptSettingsPanel.d.ts +1 -2
  94. package/dist/types/src/components/ScriptSettingsPanel.d.ts.map +1 -1
  95. package/dist/types/src/components/ScriptToolbar/ScriptToolbar.d.ts +2 -3
  96. package/dist/types/src/components/ScriptToolbar/ScriptToolbar.d.ts.map +1 -1
  97. package/dist/types/src/components/TypescriptEditor/TypescriptEditor.d.ts +1 -2
  98. package/dist/types/src/components/TypescriptEditor/TypescriptEditor.d.ts.map +1 -1
  99. package/dist/types/src/components/index.d.ts +2 -2
  100. package/dist/types/src/components/index.d.ts.map +1 -1
  101. package/dist/types/src/events.d.ts +4 -0
  102. package/dist/types/src/events.d.ts.map +1 -0
  103. package/dist/types/src/hooks/deploy.d.ts.map +1 -0
  104. package/dist/types/src/hooks/format.d.ts.map +1 -0
  105. package/dist/types/src/hooks/index.d.ts +7 -0
  106. package/dist/types/src/hooks/index.d.ts.map +1 -0
  107. package/dist/types/src/{components/ScriptToolbar/templateSelect.d.ts → hooks/template.d.ts} +1 -1
  108. package/dist/types/src/hooks/template.d.ts.map +1 -0
  109. package/dist/types/src/{components/ScriptToolbar → hooks}/useToolbarAction.d.ts +1 -1
  110. package/dist/types/src/hooks/useToolbarAction.d.ts.map +1 -0
  111. package/dist/types/src/hooks/useToolbarState.d.ts.map +1 -0
  112. package/dist/types/src/hooks/view.d.ts.map +1 -0
  113. package/dist/types/src/index.d.ts +0 -1
  114. package/dist/types/src/index.d.ts.map +1 -1
  115. package/dist/types/src/meta.d.ts.map +1 -1
  116. package/dist/types/src/templates/chess.d.ts +1 -4
  117. package/dist/types/src/templates/chess.d.ts.map +1 -1
  118. package/dist/types/src/templates/discord.d.ts +3 -0
  119. package/dist/types/src/templates/discord.d.ts.map +1 -0
  120. package/dist/types/src/templates/echo.d.ts.map +1 -1
  121. package/dist/types/src/templates/forex-effect.d.ts +3 -0
  122. package/dist/types/src/templates/forex-effect.d.ts.map +1 -0
  123. package/dist/types/src/templates/forex.d.ts +1 -4
  124. package/dist/types/src/templates/forex.d.ts.map +1 -1
  125. package/dist/types/src/templates/index.d.ts.map +1 -1
  126. package/dist/types/src/translations.d.ts +6 -0
  127. package/dist/types/src/translations.d.ts.map +1 -1
  128. package/package.json +42 -42
  129. package/src/ScriptPlugin.tsx +28 -12
  130. package/src/capabilities/artifact-definition.ts +219 -0
  131. package/src/capabilities/compiler.ts +1 -1
  132. package/src/capabilities/index.ts +1 -0
  133. package/src/capabilities/react-surface.tsx +2 -1
  134. package/src/compiler/compiler.browser.test.ts +1 -1
  135. package/src/components/DebugPanel/DebugPanel.tsx +2 -2
  136. package/src/components/FrameContainer/FrameContainer.tsx +5 -4
  137. package/src/components/ScriptContainer.tsx +10 -5
  138. package/src/components/ScriptSettingsPanel.tsx +16 -2
  139. package/src/components/ScriptToolbar/ScriptToolbar.tsx +8 -6
  140. package/src/components/TypescriptEditor/TypescriptEditor.tsx +2 -2
  141. package/src/events.ts +11 -0
  142. package/src/{components/ScriptToolbar → hooks}/deploy.ts +16 -4
  143. package/src/{components/ScriptToolbar → hooks}/format.ts +1 -1
  144. package/src/hooks/index.ts +11 -0
  145. package/src/{components/ScriptToolbar/templateSelect.ts → hooks/template.ts} +2 -2
  146. package/src/{components/ScriptToolbar → hooks}/useToolbarAction.ts +1 -1
  147. package/src/{components/ScriptToolbar → hooks}/view.ts +1 -1
  148. package/src/index.ts +0 -1
  149. package/src/meta.ts +2 -1
  150. package/src/templates/chess.ts +42 -35
  151. package/src/templates/discord.ts +103 -0
  152. package/src/templates/echo.ts +5 -1
  153. package/src/templates/forex-effect.ts +41 -0
  154. package/src/templates/forex.ts +23 -16
  155. package/src/templates/index.ts +15 -0
  156. package/src/translations.ts +2 -0
  157. package/dist/lib/browser/ScriptContainer-AERJBGYK.mjs.map +0 -7
  158. package/dist/lib/browser/chunk-ESPJMGXJ.mjs.map +0 -7
  159. package/dist/lib/browser/chunk-REL2R7SB.mjs +0 -52
  160. package/dist/lib/browser/chunk-REL2R7SB.mjs.map +0 -7
  161. package/dist/lib/browser/chunk-SDHKTS6H.mjs +0 -237
  162. package/dist/lib/browser/chunk-SDHKTS6H.mjs.map +0 -7
  163. package/dist/lib/browser/chunk-Y4CVWFVS.mjs.map +0 -7
  164. package/dist/lib/browser/compiler-4QD7VFZX.mjs.map +0 -7
  165. package/dist/lib/node/ScriptContainer-DOAQ6KOE.cjs.map +0 -7
  166. package/dist/lib/node/chunk-CZVVFUVL.cjs.map +0 -7
  167. package/dist/lib/node/chunk-HU2JXUXI.cjs.map +0 -7
  168. package/dist/lib/node/chunk-T4TXCRN5.cjs +0 -260
  169. package/dist/lib/node/chunk-T4TXCRN5.cjs.map +0 -7
  170. package/dist/lib/node/chunk-TJ4BTPOS.cjs +0 -64
  171. package/dist/lib/node/chunk-TJ4BTPOS.cjs.map +0 -7
  172. package/dist/lib/node/compiler-Q3EXWKV5.cjs.map +0 -7
  173. package/dist/lib/node-esm/ScriptContainer-HE5QPPFZ.mjs.map +0 -7
  174. package/dist/lib/node-esm/chunk-77LRZF2W.mjs.map +0 -7
  175. package/dist/lib/node-esm/chunk-EOBGHKNT.mjs.map +0 -7
  176. package/dist/lib/node-esm/chunk-G76M6O46.mjs +0 -239
  177. package/dist/lib/node-esm/chunk-G76M6O46.mjs.map +0 -7
  178. package/dist/lib/node-esm/chunk-JJZYWSD7.mjs +0 -54
  179. package/dist/lib/node-esm/chunk-JJZYWSD7.mjs.map +0 -7
  180. package/dist/lib/node-esm/compiler-KJEIPDZ6.mjs.map +0 -7
  181. package/dist/types/src/bundler/bundler.d.ts +0 -39
  182. package/dist/types/src/bundler/bundler.d.ts.map +0 -1
  183. package/dist/types/src/bundler/bundler.test.d.ts +0 -2
  184. package/dist/types/src/bundler/bundler.test.d.ts.map +0 -1
  185. package/dist/types/src/bundler/index.d.ts +0 -2
  186. package/dist/types/src/bundler/index.d.ts.map +0 -1
  187. package/dist/types/src/components/ScriptToolbar/deploy.d.ts.map +0 -1
  188. package/dist/types/src/components/ScriptToolbar/format.d.ts.map +0 -1
  189. package/dist/types/src/components/ScriptToolbar/templateSelect.d.ts.map +0 -1
  190. package/dist/types/src/components/ScriptToolbar/useToolbarAction.d.ts.map +0 -1
  191. package/dist/types/src/components/ScriptToolbar/useToolbarState.d.ts.map +0 -1
  192. package/dist/types/src/components/ScriptToolbar/view.d.ts.map +0 -1
  193. package/src/bundler/bundler.test.ts +0 -55
  194. package/src/bundler/bundler.ts +0 -250
  195. package/src/bundler/index.ts +0 -5
  196. /package/dist/lib/browser/{AutomationPanel-KZVZMZE6.mjs.map → AutomationPanel-6HFRNRWV.mjs.map} +0 -0
  197. /package/dist/lib/browser/{chunk-ABNZIPST.mjs.map → chunk-6MOQ4BP3.mjs.map} +0 -0
  198. /package/dist/lib/browser/{chunk-NFPF4OIU.mjs.map → chunk-N46LE7FS.mjs.map} +0 -0
  199. /package/dist/lib/browser/{intent-resolver-YABC4JRJ.mjs.map → intent-resolver-I6VDXUDH.mjs.map} +0 -0
  200. /package/dist/lib/browser/{settings-S4MGGM4D.mjs.map → settings-SZCDKHWO.mjs.map} +0 -0
  201. /package/dist/lib/node/{AutomationPanel-6QSV7ZYK.cjs.map → AutomationPanel-RBQ4DODN.cjs.map} +0 -0
  202. /package/dist/lib/node/{chunk-RZHY5LAR.cjs.map → chunk-ALY3N6PW.cjs.map} +0 -0
  203. /package/dist/lib/node/{chunk-6M2VRFBC.cjs.map → chunk-DJGLGRQV.cjs.map} +0 -0
  204. /package/dist/lib/node/{intent-resolver-7HI2CDGB.cjs.map → intent-resolver-MYATX7IR.cjs.map} +0 -0
  205. /package/dist/lib/node/{settings-Q5XIA4LZ.cjs.map → settings-SZFSMSKM.cjs.map} +0 -0
  206. /package/dist/lib/node-esm/{AutomationPanel-EZQSGJLS.mjs.map → AutomationPanel-WTVVVMRH.mjs.map} +0 -0
  207. /package/dist/lib/node-esm/{chunk-3YOO5E2D.mjs.map → chunk-CP5LXTK5.mjs.map} +0 -0
  208. /package/dist/lib/node-esm/{chunk-5D2AXTAW.mjs.map → chunk-UNQFIERE.mjs.map} +0 -0
  209. /package/dist/lib/node-esm/{intent-resolver-KG7I6JJA.mjs.map → intent-resolver-PBDTYC4P.mjs.map} +0 -0
  210. /package/dist/lib/node-esm/{settings-NZXHNIQ3.mjs.map → settings-GR4O2WHZ.mjs.map} +0 -0
  211. /package/dist/types/src/{components/ScriptToolbar → hooks}/deploy.d.ts +0 -0
  212. /package/dist/types/src/{components/ScriptToolbar → hooks}/format.d.ts +0 -0
  213. /package/dist/types/src/{components/ScriptToolbar → hooks}/useToolbarState.d.ts +0 -0
  214. /package/dist/types/src/{components/ScriptToolbar → hooks}/view.d.ts +0 -0
  215. /package/src/{components/ScriptToolbar → hooks}/useToolbarState.ts +0 -0
@@ -1,250 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
-
5
- import { type BuildOptions } from 'esbuild';
6
- import { build, initialize, type BuildResult, type Plugin } from 'esbuild-wasm';
7
-
8
- import { subtleCrypto } from '@dxos/crypto';
9
- import { invariant } from '@dxos/invariant';
10
- import { log } from '@dxos/log';
11
-
12
- export type Import = {
13
- moduleUrl: string;
14
- defaultImport: boolean;
15
- namedImports: string[];
16
- };
17
-
18
- export type BundlerResult = {
19
- timestamp: number;
20
- sourceHash: Buffer;
21
- imports?: Import[];
22
- bundle?: string;
23
- error?: any;
24
- };
25
-
26
- export type BundlerOptions = {
27
- platform: BuildOptions['platform'];
28
- sandboxedModules: string[];
29
- remoteModules: Record<string, string>;
30
- };
31
-
32
- let initialized: Promise<void>;
33
- export const initializeBundler = async (options: { wasmUrl: string }) => {
34
- await (initialized ??= initialize({
35
- wasmURL: options.wasmUrl,
36
- }));
37
- };
38
-
39
- /**
40
- * ESBuild bundler.
41
- */
42
- export class Bundler {
43
- constructor(private readonly _options: BundlerOptions) {}
44
-
45
- async bundle(source: string): Promise<BundlerResult> {
46
- const { sandboxedModules: providedModules, ...options } = this._options;
47
-
48
- const createResult = async (result?: Partial<BundlerResult>) => {
49
- return {
50
- timestamp: Date.now(),
51
- sourceHash: Buffer.from(await subtleCrypto.digest('SHA-256', Buffer.from(source))),
52
- ...result,
53
- };
54
- };
55
-
56
- if (this._options.platform === 'browser') {
57
- invariant(initialized, 'Compiler not initialized.');
58
- await initialized;
59
- }
60
-
61
- const imports = analyzeSourceFileImports(source);
62
-
63
- // https://esbuild.github.io/api/#build
64
- try {
65
- const result = await build({
66
- platform: options.platform,
67
- conditions: ['workerd', 'browser'],
68
- metafile: true,
69
- write: false,
70
- entryPoints: ['memory:main.tsx'],
71
- bundle: true,
72
- format: 'esm',
73
- plugins: [
74
- {
75
- name: 'memory',
76
- setup: (build) => {
77
- build.onResolve({ filter: /^\.\/runtime\.js$/ }, ({ path }) => {
78
- return { path, external: true };
79
- });
80
-
81
- build.onResolve({ filter: /^dxos:functions$/ }, ({ path }) => {
82
- return { path: './runtime.js', external: true };
83
- });
84
-
85
- build.onResolve({ filter: /^memory:/ }, ({ path }) => {
86
- return { path: path.split(':')[1], namespace: 'memory' };
87
- });
88
-
89
- build.onLoad({ filter: /.*/, namespace: 'memory' }, ({ path }) => {
90
- if (path === 'main.tsx') {
91
- return {
92
- contents: source,
93
- loader: 'tsx',
94
- };
95
- }
96
- });
97
-
98
- for (const module of providedModules) {
99
- build.onResolve({ filter: new RegExp(`^${module}$`) }, ({ path }) => {
100
- return { path, namespace: 'injected-module' };
101
- });
102
- }
103
-
104
- build.onLoad({ filter: /.*/, namespace: 'injected-module' }, ({ path }) => {
105
- const namedImports = imports.find((entry) => entry.moduleIdentifier === path)?.namedImports ?? [];
106
- return {
107
- contents: `
108
- const { ${namedImports.join(',')} } = window.__DXOS_SANDBOX_MODULES__[${JSON.stringify(path)}];
109
- export { ${namedImports.join(',')} };
110
- export default window.__DXOS_SANDBOX_MODULES__[${JSON.stringify(path)}].default;
111
- `,
112
- loader: 'tsx',
113
- };
114
- });
115
- },
116
- },
117
- httpPlugin,
118
- ],
119
- });
120
-
121
- log('compile complete', result.metafile);
122
-
123
- return await createResult({
124
- imports: this.analyzeImports(result),
125
- bundle: result.outputFiles![0].text,
126
- });
127
- } catch (err) {
128
- return await createResult({ error: err });
129
- }
130
- }
131
-
132
- // TODO(dmaretskyi): In the future we can replace the compiler with SWC with plugins running in WASM.
133
- analyzeImports(result: BuildResult): Import[] {
134
- invariant(result.outputFiles);
135
-
136
- // TODO(dmaretskyi): Support import aliases and wildcard imports.
137
- const parsedImports = allMatches(IMPORT_REGEX, result.outputFiles[0].text);
138
- return Object.values(result.metafile!.outputs)[0].imports.map((entry): Import => {
139
- const namedImports: string[] = [];
140
-
141
- const parsedImport = parsedImports.find((capture) => capture?.[4] === entry.path);
142
- if (parsedImport?.[2]) {
143
- NAMED_IMPORTS_REGEX.lastIndex = 0;
144
- const namedImportsMatch = NAMED_IMPORTS_REGEX.exec(parsedImport[2]);
145
- if (namedImportsMatch) {
146
- namedImportsMatch[1].split(',').forEach((importName) => {
147
- namedImports.push(importName.trim());
148
- });
149
- }
150
- }
151
-
152
- return {
153
- moduleUrl: entry.path,
154
- defaultImport: !!parsedImport?.[1],
155
- namedImports,
156
- };
157
- });
158
- }
159
-
160
- analyzeSourceFileImports(code: string) {
161
- // TODO(dmaretskyi): Support import aliases and wildcard imports.
162
- const parsedImports = allMatches(IMPORT_REGEX, code);
163
- return parsedImports.map((capture) => {
164
- return {
165
- defaultImportName: capture[1],
166
- namedImports: capture[2]?.split(',').map((importName) => importName.trim()),
167
- wildcardImportName: capture[3],
168
- moduleIdentifier: capture[4],
169
- quotes: capture[5],
170
- };
171
- });
172
- }
173
- }
174
-
175
- // https://regex101.com/r/FEN5ks/1
176
- // https://stackoverflow.com/a/73265022
177
- // $1 = default import name (can be non-existent)
178
- // $2 = destructured exports (can be non-existent)
179
- // $3 = wildcard import name (can be non-existent)
180
- // $4 = module identifier
181
- // $5 = quotes used (either ' or ")
182
- const IMPORT_REGEX =
183
- /import(?:(?:(?:[ \n\t]+([^ *\n\t{},]+)[ \n\t]*(?:,|[ \n\t]+))?([ \n\t]*{(?:[ \n\t]*[^ \n\t"'{}]+[ \n\t]*,?)+})?[ \n\t]*)|[ \n\t]*\*[ \n\t]*as[ \n\t]+([^ \n\t{}]+)[ \n\t]+)from[ \n\t]*(?:['"])([^'"\n]+)(['"])/gm;
184
-
185
- const NAMED_IMPORTS_REGEX = /[ \n\t]*{((?:[ \n\t]*[^ \n\t"'{}]+[ \n\t]*,?)+)}[ \n\t]*/gm;
186
-
187
- const allMatches = (regex: RegExp, str: string) => {
188
- regex.lastIndex = 0;
189
-
190
- let match;
191
- const matches = [];
192
- while ((match = regex.exec(str))) {
193
- matches.push(match);
194
- }
195
-
196
- return matches;
197
- };
198
-
199
- type ParsedImport = {
200
- defaultImportName?: string;
201
- namedImports: string[];
202
- wildcardImportName?: string;
203
- moduleIdentifier: string;
204
- quotes: string;
205
- };
206
-
207
- const analyzeSourceFileImports = (code: string): ParsedImport[] => {
208
- // TODO(dmaretskyi): Support import aliases and wildcard imports.
209
- const parsedImports = allMatches(IMPORT_REGEX, code);
210
- return parsedImports.map((capture) => {
211
- return {
212
- defaultImportName: capture[1],
213
- namedImports: capture[2]
214
- ?.trim()
215
- .slice(1, -1)
216
- .split(',')
217
- .map((importName) => importName.trim()),
218
- wildcardImportName: capture[3],
219
- moduleIdentifier: capture[4],
220
- quotes: capture[5],
221
- };
222
- });
223
- };
224
-
225
- const httpPlugin: Plugin = {
226
- name: 'http',
227
- setup: (build) => {
228
- // Intercept import paths starting with "http:" and "https:" so esbuild doesn't attempt to map them to a file system location.
229
- // Tag them with the "http-url" namespace to associate them with this plugin.
230
- build.onResolve({ filter: /^https?:\/\// }, (args) => ({
231
- path: args.path,
232
- namespace: 'http-url',
233
- }));
234
-
235
- // We also want to intercept all import paths inside downloaded files and resolve them against the original URL.
236
- // All of these files will be in the "http-url" namespace.
237
- // Make sure to keep the newly resolved URL in the "http-url" namespace so imports inside it will also be resolved as URLs recursively.
238
- build.onResolve({ filter: /.*/, namespace: 'http-url' }, (args) => ({
239
- path: new URL(args.path, args.importer).toString(),
240
- namespace: 'http-url',
241
- }));
242
-
243
- // When a URL is loaded, we want to actually download the content from the internet.
244
- // This has just enough logic to be able to handle the example import from unpkg.com but in reality this would probably need to be more complex.
245
- build.onLoad({ filter: /.*/, namespace: 'http-url' }, async (args) => {
246
- const response = await fetch(args.path);
247
- return { contents: await response.text(), loader: 'jsx' };
248
- });
249
- },
250
- };
@@ -1,5 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
-
5
- export * from './bundler';