@dxos/plugin-script 0.6.8-staging.77f93a3 → 0.6.8-staging.dec6b33
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/browser/{ScriptEditor-6Q7HFLJ6.mjs → ScriptEditor-7XICKICQ.mjs} +42 -21
- package/dist/lib/browser/ScriptEditor-7XICKICQ.mjs.map +7 -0
- package/dist/lib/browser/{TypescriptEditor-HP35MTEQ.mjs → TypescriptEditor-PIRIDDUS.mjs} +2 -2
- package/dist/lib/browser/{chunk-2EM5Y66A.mjs → chunk-D4O723CR.mjs} +4 -2
- package/dist/lib/browser/chunk-D4O723CR.mjs.map +7 -0
- package/dist/lib/browser/{chunk-EZ7PWOLU.mjs → chunk-SK3L274X.mjs} +6 -6
- package/dist/lib/browser/{chunk-EZ7PWOLU.mjs.map → chunk-SK3L274X.mjs.map} +2 -2
- package/dist/lib/browser/{chunk-Z72YKDJ2.mjs → chunk-ZGCETT2W.mjs} +13 -3
- package/dist/lib/browser/chunk-ZGCETT2W.mjs.map +7 -0
- package/dist/lib/browser/edge/index.mjs +1 -1
- package/dist/lib/browser/index.mjs +7 -4
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/types/index.mjs +3 -1
- package/dist/lib/node/{ScriptEditor-AIVKL2NX.cjs → ScriptEditor-M7KZ2CRS.cjs} +45 -26
- package/dist/lib/node/ScriptEditor-M7KZ2CRS.cjs.map +7 -0
- package/dist/lib/node/{TypescriptEditor-PWOAN5RQ.cjs → TypescriptEditor-OTWJUIWB.cjs} +7 -7
- package/dist/lib/node/{TypescriptEditor-PWOAN5RQ.cjs.map → TypescriptEditor-OTWJUIWB.cjs.map} +2 -2
- package/dist/lib/node/{chunk-SLV3SDZE.cjs → chunk-ITLHJMWP.cjs} +6 -4
- package/dist/lib/node/chunk-ITLHJMWP.cjs.map +7 -0
- package/dist/lib/node/{chunk-6Y2S6SGK.cjs → chunk-VW2POILW.cjs} +17 -6
- package/dist/lib/node/chunk-VW2POILW.cjs.map +7 -0
- package/dist/lib/node/{chunk-LWUBFTPA.cjs → chunk-X6A3D4PD.cjs} +9 -9
- package/dist/lib/node/{chunk-LWUBFTPA.cjs.map → chunk-X6A3D4PD.cjs.map} +2 -2
- package/dist/lib/node/edge/index.cjs +8 -8
- package/dist/lib/node/edge/index.cjs.map +1 -1
- package/dist/lib/node/index.cjs +16 -13
- package/dist/lib/node/index.cjs.map +3 -3
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/types/index.cjs +5 -3
- package/dist/lib/node/types/index.cjs.map +2 -2
- package/dist/types/src/ScriptPlugin.d.ts.map +1 -1
- package/dist/types/src/components/ScriptEditor.d.ts.map +1 -1
- package/dist/types/src/components/Toolbar.d.ts +1 -1
- package/dist/types/src/components/Toolbar.d.ts.map +1 -1
- package/dist/types/src/components/Toolbar.stories.d.ts +1 -1
- package/dist/types/src/components/TypescriptEditor.d.ts.map +1 -1
- package/dist/types/src/edge/functions.d.ts.map +1 -1
- package/dist/types/src/types/script.d.ts +33 -2
- package/dist/types/src/types/script.d.ts.map +1 -1
- package/dist/types/src/types/types.d.ts +1 -1
- package/dist/types/src/types/types.d.ts.map +1 -1
- package/package.json +33 -33
- package/src/ScriptPlugin.tsx +3 -6
- package/src/components/ScriptEditor.tsx +29 -13
- package/src/components/Toolbar.tsx +24 -4
- package/src/components/TypescriptEditor.tsx +4 -1
- package/src/edge/functions.ts +1 -2
- package/src/types/script.ts +7 -2
- package/src/types/types.tsx +1 -1
- package/dist/lib/browser/ScriptEditor-6Q7HFLJ6.mjs.map +0 -7
- package/dist/lib/browser/chunk-2EM5Y66A.mjs.map +0 -7
- package/dist/lib/browser/chunk-Z72YKDJ2.mjs.map +0 -7
- package/dist/lib/node/ScriptEditor-AIVKL2NX.cjs.map +0 -7
- package/dist/lib/node/chunk-6Y2S6SGK.cjs.map +0 -7
- package/dist/lib/node/chunk-SLV3SDZE.cjs.map +0 -7
- /package/dist/lib/browser/{TypescriptEditor-HP35MTEQ.mjs.map → TypescriptEditor-PIRIDDUS.mjs.map} +0 -0
|
@@ -3,19 +3,22 @@ import {
|
|
|
3
3
|
publicKeyToDid,
|
|
4
4
|
setUserFunctionUrlInMetadata,
|
|
5
5
|
uploadWorkerFunction
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-SK3L274X.mjs";
|
|
7
|
+
import {
|
|
8
|
+
FunctionType
|
|
9
|
+
} from "./chunk-ZGCETT2W.mjs";
|
|
7
10
|
import {
|
|
8
11
|
SCRIPT_PLUGIN
|
|
9
12
|
} from "./chunk-JBACGDOJ.mjs";
|
|
10
13
|
import {
|
|
11
14
|
TypescriptEditor
|
|
12
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-D4O723CR.mjs";
|
|
13
16
|
|
|
14
17
|
// packages/plugins/experimental/plugin-script/src/components/ScriptEditor.tsx
|
|
15
18
|
import React2, { useCallback, useMemo, useState as useState2 } from "react";
|
|
16
19
|
import { log } from "@dxos/log";
|
|
17
20
|
import { useClient } from "@dxos/react-client";
|
|
18
|
-
import { createDocAccessor, getMeta, getSpace } from "@dxos/react-client/echo";
|
|
21
|
+
import { create, createDocAccessor, Filter, getMeta, getSpace, useQuery } from "@dxos/react-client/echo";
|
|
19
22
|
import { useIdentity } from "@dxos/react-client/halo";
|
|
20
23
|
import { useTranslation as useTranslation2 } from "@dxos/react-ui";
|
|
21
24
|
import { createDataExtensions, listener } from "@dxos/react-ui-editor";
|
|
@@ -23,21 +26,29 @@ import { mx as mx2 } from "@dxos/react-ui-theme";
|
|
|
23
26
|
|
|
24
27
|
// packages/plugins/experimental/plugin-script/src/components/Toolbar.tsx
|
|
25
28
|
import { Check, Checks, CircleNotch, Link, PencilSimple, UploadSimple, WarningCircle, X } from "@phosphor-icons/react";
|
|
26
|
-
import React, { useRef, useState } from "react";
|
|
29
|
+
import React, { useEffect, useRef, useState } from "react";
|
|
27
30
|
import { Button, DensityProvider, ElevationProvider, Input, Toolbar as NaturalToolbar, Tooltip, useTranslation } from "@dxos/react-ui";
|
|
28
31
|
import { getSize, mx } from "@dxos/react-ui-theme";
|
|
29
|
-
var Toolbar = ({ binding, onBindingChange, deployed, onDeploy, functionUrl, error }) => {
|
|
32
|
+
var Toolbar = ({ binding: _binding, onBindingChange, deployed, onDeploy, functionUrl, error }) => {
|
|
30
33
|
const { t } = useTranslation(SCRIPT_PLUGIN);
|
|
31
34
|
const [pending, setPending] = useState(false);
|
|
32
35
|
const [editing, setEditing] = useState(false);
|
|
36
|
+
const [binding, setBinding] = useState(_binding);
|
|
33
37
|
const inputRef = useRef(null);
|
|
38
|
+
useEffect(() => {
|
|
39
|
+
if (!editing && _binding !== binding) {
|
|
40
|
+
setBinding(_binding);
|
|
41
|
+
}
|
|
42
|
+
}, [
|
|
43
|
+
_binding
|
|
44
|
+
]);
|
|
34
45
|
const handleEdit = () => {
|
|
35
46
|
setEditing(true);
|
|
36
47
|
inputRef.current?.focus();
|
|
37
48
|
};
|
|
38
49
|
const handleSave = () => {
|
|
39
50
|
setEditing(false);
|
|
40
|
-
onBindingChange(
|
|
51
|
+
onBindingChange(binding);
|
|
41
52
|
};
|
|
42
53
|
const handleCancel = () => {
|
|
43
54
|
setEditing(false);
|
|
@@ -64,9 +75,10 @@ var Toolbar = ({ binding, onBindingChange, deployed, onDeploy, functionUrl, erro
|
|
|
64
75
|
}
|
|
65
76
|
}, /* @__PURE__ */ React.createElement(Input.Root, null, /* @__PURE__ */ React.createElement(Input.Label, null, t("binding label")), /* @__PURE__ */ React.createElement(Input.TextInput, {
|
|
66
77
|
ref: inputRef,
|
|
67
|
-
|
|
78
|
+
classNames: "!is-auto",
|
|
68
79
|
disabled: !editing,
|
|
69
|
-
|
|
80
|
+
value: binding,
|
|
81
|
+
onChange: (event) => setBinding(event.target.value.toUpperCase())
|
|
70
82
|
}), editing ? /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(Button, {
|
|
71
83
|
variant: "ghost",
|
|
72
84
|
onClick: handleCancel
|
|
@@ -118,6 +130,7 @@ var ScriptEditor = ({ script, role }) => {
|
|
|
118
130
|
const client = useClient();
|
|
119
131
|
const identity = useIdentity();
|
|
120
132
|
const space = getSpace(script);
|
|
133
|
+
const [fn] = useQuery(space, Filter.schema(FunctionType, (fn2) => fn2.source === script));
|
|
121
134
|
const extensions = useMemo(() => [
|
|
122
135
|
listener({
|
|
123
136
|
onChange: (text) => {
|
|
@@ -143,15 +156,15 @@ var ScriptEditor = ({ script, role }) => {
|
|
|
143
156
|
const initialValue = useMemo(() => script.source?.content, [
|
|
144
157
|
script.source
|
|
145
158
|
]);
|
|
146
|
-
const existingFunctionUrl = getUserFunctionUrlInMetadata(getMeta(
|
|
159
|
+
const existingFunctionUrl = fn && getUserFunctionUrlInMetadata(getMeta(fn));
|
|
147
160
|
const [error, setError] = useState2();
|
|
148
161
|
const handleBindingChange = useCallback((binding) => {
|
|
149
|
-
|
|
162
|
+
fn.binding = binding;
|
|
150
163
|
}, [
|
|
151
|
-
|
|
164
|
+
fn
|
|
152
165
|
]);
|
|
153
166
|
const handleDeploy = useCallback(async () => {
|
|
154
|
-
if (!script.source || !identity) {
|
|
167
|
+
if (!script.source || !identity || !space) {
|
|
155
168
|
return;
|
|
156
169
|
}
|
|
157
170
|
setError(void 0);
|
|
@@ -163,10 +176,9 @@ var ScriptEditor = ({ script, role }) => {
|
|
|
163
176
|
halo: client.halo,
|
|
164
177
|
ownerDid,
|
|
165
178
|
functionId: existingFunctionId,
|
|
166
|
-
name: script.name,
|
|
167
179
|
source: script.source.content
|
|
168
180
|
});
|
|
169
|
-
if (result !== "success" || functionId === void 0) {
|
|
181
|
+
if (result !== "success" || functionId === void 0 || functionVersionNumber === void 0) {
|
|
170
182
|
throw new Error(errorMessage);
|
|
171
183
|
}
|
|
172
184
|
log.info("function uploaded", {
|
|
@@ -174,23 +186,31 @@ var ScriptEditor = ({ script, role }) => {
|
|
|
174
186
|
functionVersionNumber
|
|
175
187
|
}, {
|
|
176
188
|
F: __dxlog_file,
|
|
177
|
-
L:
|
|
189
|
+
L: 91,
|
|
178
190
|
S: void 0,
|
|
179
191
|
C: (f, a) => f(...a)
|
|
180
192
|
});
|
|
181
|
-
|
|
193
|
+
if (fn) {
|
|
194
|
+
fn.version = functionVersionNumber;
|
|
195
|
+
}
|
|
196
|
+
const deployedFunction = fn ?? space.db.add(create(FunctionType, {
|
|
197
|
+
version: functionVersionNumber,
|
|
198
|
+
source: script
|
|
199
|
+
}));
|
|
200
|
+
const meta = getMeta(deployedFunction);
|
|
182
201
|
setUserFunctionUrlInMetadata(meta, `/${ownerDid}/${functionId}`);
|
|
183
202
|
script.changed = false;
|
|
184
203
|
} catch (err) {
|
|
185
204
|
log.catch(err, void 0, {
|
|
186
205
|
F: __dxlog_file,
|
|
187
|
-
L:
|
|
206
|
+
L: 101,
|
|
188
207
|
S: void 0,
|
|
189
208
|
C: (f, a) => f(...a)
|
|
190
209
|
});
|
|
191
210
|
setError(t("upload failed label"));
|
|
192
211
|
}
|
|
193
212
|
}, [
|
|
213
|
+
fn,
|
|
194
214
|
existingFunctionUrl,
|
|
195
215
|
script,
|
|
196
216
|
script.name,
|
|
@@ -198,9 +218,9 @@ var ScriptEditor = ({ script, role }) => {
|
|
|
198
218
|
]);
|
|
199
219
|
return /* @__PURE__ */ React2.createElement("div", {
|
|
200
220
|
role: "none",
|
|
201
|
-
className: mx2(role === "article" && "row-span-2", "is-full
|
|
221
|
+
className: mx2(role === "article" && "row-span-2", "flex flex-col is-full bs-full overflow-hidden")
|
|
202
222
|
}, /* @__PURE__ */ React2.createElement(Toolbar, {
|
|
203
|
-
binding:
|
|
223
|
+
binding: fn?.binding ?? "",
|
|
204
224
|
onBindingChange: handleBindingChange,
|
|
205
225
|
deployed: Boolean(existingFunctionUrl) && !script.changed,
|
|
206
226
|
onDeploy: handleDeploy,
|
|
@@ -209,7 +229,8 @@ var ScriptEditor = ({ script, role }) => {
|
|
|
209
229
|
}), /* @__PURE__ */ React2.createElement(TypescriptEditor, {
|
|
210
230
|
id: script.id,
|
|
211
231
|
initialValue,
|
|
212
|
-
extensions
|
|
232
|
+
extensions,
|
|
233
|
+
className: "flex is-full bs-full overflow-hidden"
|
|
213
234
|
}));
|
|
214
235
|
};
|
|
215
236
|
var ScriptEditor_default = ScriptEditor;
|
|
@@ -217,4 +238,4 @@ export {
|
|
|
217
238
|
ScriptEditor,
|
|
218
239
|
ScriptEditor_default as default
|
|
219
240
|
};
|
|
220
|
-
//# sourceMappingURL=ScriptEditor-
|
|
241
|
+
//# sourceMappingURL=ScriptEditor-7XICKICQ.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/components/ScriptEditor.tsx", "../../../src/components/Toolbar.tsx"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type DID } from 'iso-did/types';\nimport React, { useCallback, useMemo, useState } from 'react';\n\nimport { log } from '@dxos/log';\nimport { useClient } from '@dxos/react-client';\nimport { create, createDocAccessor, Filter, getMeta, getSpace, useQuery } from '@dxos/react-client/echo';\nimport { useIdentity } from '@dxos/react-client/halo';\nimport { useTranslation } from '@dxos/react-ui';\nimport { createDataExtensions, listener } from '@dxos/react-ui-editor';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { Toolbar } from './Toolbar';\nimport { TypescriptEditor } from './TypescriptEditor';\nimport {\n getUserFunctionUrlInMetadata,\n publicKeyToDid,\n setUserFunctionUrlInMetadata,\n uploadWorkerFunction,\n} from '../edge';\nimport { SCRIPT_PLUGIN } from '../meta';\nimport { FunctionType, type ScriptType } from '../types';\n\nexport type ScriptEditorProps = {\n script: ScriptType;\n role?: string;\n};\n\nexport const ScriptEditor = ({ script, role }: ScriptEditorProps) => {\n const { t } = useTranslation(SCRIPT_PLUGIN);\n const client = useClient();\n const identity = useIdentity();\n const space = getSpace(script);\n const [fn] = useQuery(\n space,\n Filter.schema(FunctionType, (fn) => fn.source === script),\n );\n const extensions = useMemo(\n () => [\n listener({\n onChange: (text) => {\n if (script.source && script.source?.content !== text) {\n script.changed = true;\n }\n },\n }),\n createDataExtensions({\n id: script.id,\n text: script.source && createDocAccessor(script.source, ['content']),\n space,\n identity,\n }),\n ],\n [script, script.source, space, identity],\n );\n const initialValue = useMemo(() => script.source?.content, [script.source]);\n const existingFunctionUrl = fn && getUserFunctionUrlInMetadata(getMeta(fn));\n const [error, setError] = useState<string>();\n\n const handleBindingChange = useCallback(\n (binding: string) => {\n fn.binding = binding;\n },\n [fn],\n );\n\n const handleDeploy = useCallback(async () => {\n if (!script.source || !identity || !space) {\n return;\n }\n\n setError(undefined);\n\n try {\n const existingFunctionId = existingFunctionUrl?.split('/').at(-1);\n const ownerDid = (existingFunctionUrl?.split('/').at(-2) as DID) ?? publicKeyToDid(identity.identityKey);\n\n const { result, functionId, functionVersionNumber, errorMessage } = await uploadWorkerFunction({\n clientConfig: client.config,\n halo: client.halo,\n ownerDid,\n functionId: existingFunctionId,\n source: script.source.content,\n });\n if (result !== 'success' || functionId === undefined || functionVersionNumber === undefined) {\n throw new Error(errorMessage);\n }\n log.info('function uploaded', { functionId, functionVersionNumber });\n if (fn) {\n fn.version = functionVersionNumber;\n }\n const deployedFunction =\n fn ?? space.db.add(create(FunctionType, { version: functionVersionNumber, source: script }));\n const meta = getMeta(deployedFunction);\n setUserFunctionUrlInMetadata(meta, `/${ownerDid}/${functionId}`);\n script.changed = false;\n } catch (err: any) {\n log.catch(err);\n setError(t('upload failed label'));\n }\n }, [fn, existingFunctionUrl, script, script.name, script.source]);\n\n return (\n <div\n role='none'\n className={mx(role === 'article' && 'row-span-2', 'flex flex-col is-full bs-full overflow-hidden')}\n >\n <Toolbar\n binding={fn?.binding ?? ''}\n onBindingChange={handleBindingChange}\n deployed={Boolean(existingFunctionUrl) && !script.changed}\n onDeploy={handleDeploy}\n functionUrl={existingFunctionUrl}\n error={error}\n />\n <TypescriptEditor\n id={script.id}\n initialValue={initialValue}\n extensions={extensions}\n className='flex is-full bs-full overflow-hidden'\n />\n </div>\n );\n};\n\nexport default ScriptEditor;\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { Check, Checks, CircleNotch, Link, PencilSimple, UploadSimple, WarningCircle, X } from '@phosphor-icons/react';\nimport React, { useEffect, useRef, useState } from 'react';\n\nimport {\n Button,\n DensityProvider,\n ElevationProvider,\n Input,\n Toolbar as NaturalToolbar,\n Tooltip,\n useTranslation,\n} from '@dxos/react-ui';\nimport { getSize, mx } from '@dxos/react-ui-theme';\n\nimport { SCRIPT_PLUGIN } from '../meta';\n\nexport type ToolbarProps = {\n binding: string;\n onBindingChange: (binding: string) => void;\n deployed?: boolean;\n onDeploy?: () => Promise<void>;\n functionUrl?: string;\n error?: string;\n};\n\nexport const Toolbar = ({\n binding: _binding,\n onBindingChange,\n deployed,\n onDeploy,\n functionUrl,\n error,\n}: ToolbarProps) => {\n const { t } = useTranslation(SCRIPT_PLUGIN);\n const [pending, setPending] = useState(false);\n const [editing, setEditing] = useState(false);\n const [binding, setBinding] = useState(_binding);\n const inputRef = useRef<HTMLInputElement>(null);\n\n useEffect(() => {\n if (!editing && _binding !== binding) {\n setBinding(_binding);\n }\n }, [_binding]);\n\n const handleEdit = () => {\n setEditing(true);\n inputRef.current?.focus();\n };\n\n const handleSave = () => {\n setEditing(false);\n onBindingChange(binding);\n };\n\n const handleCancel = () => {\n setEditing(false);\n };\n\n const handleCopyLink = async () => {\n if (!functionUrl) {\n return;\n }\n\n await navigator.clipboard.writeText(functionUrl);\n };\n\n const handleDeploy = async () => {\n setPending(true);\n await onDeploy?.();\n setPending(false);\n };\n\n return (\n <DensityProvider density='fine'>\n <ElevationProvider elevation='chrome'>\n <NaturalToolbar.Root\n classNames='p-1 is-full shrink-0 overflow-x-auto overflow-y-hidden'\n style={{ contain: 'layout' }}\n >\n {/* TODO(wittjosiah): Binding input shouldn't be in the toolbar. */}\n <Input.Root>\n <Input.Label>{t('binding label')}</Input.Label>\n <Input.TextInput\n ref={inputRef}\n classNames='!is-auto'\n disabled={!editing}\n value={binding}\n onChange={(event) => setBinding(event.target.value.toUpperCase())}\n />\n {editing ? (\n <>\n <Button variant='ghost' onClick={handleCancel}>\n <X className={getSize(4)} />\n </Button>\n <Button variant='ghost' onClick={handleSave}>\n <Check className={getSize(4)} />\n </Button>\n </>\n ) : (\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n <Button variant='ghost' onClick={handleEdit}>\n <PencilSimple className={getSize(4)} />\n </Button>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content>\n <Tooltip.Arrow />\n {t('edit binding label')}\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n )}\n </Input.Root>\n <div role='separator' className='grow' />\n {/* TODO(wittjosiah): Better treatment for status indicators in toolbar? */}\n {error ? (\n <Tooltip.Root>\n <Tooltip.Trigger>\n <WarningCircle className={getSize(4)} />\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content>\n <Tooltip.Arrow />\n {error}\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n ) : deployed ? (\n <Tooltip.Root>\n <Tooltip.Trigger>\n <Checks className={getSize(4)} />\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content>\n <Tooltip.Arrow />\n {t('deployed label')}\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n ) : null}\n {functionUrl && (\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n <NaturalToolbar.Button variant='ghost' onClick={handleCopyLink}>\n <Link className={getSize(4)} />\n </NaturalToolbar.Button>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content>\n <Tooltip.Arrow />\n {t('copy link label')}\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n )}\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n <NaturalToolbar.Button variant='ghost' onClick={handleDeploy} disabled={pending}>\n {pending ? (\n <CircleNotch className={mx('spinner', getSize(4))} />\n ) : (\n <UploadSimple className={getSize(4)} />\n )}\n </NaturalToolbar.Button>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content>\n <Tooltip.Arrow />\n {pending ? t('pending label') : t('deploy label')}\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n </NaturalToolbar.Root>\n </ElevationProvider>\n </DensityProvider>\n );\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["React", "useCallback", "useMemo", "useState", "log", "useClient", "create", "createDocAccessor", "Filter", "getMeta", "getSpace", "useQuery", "useIdentity", "useTranslation", "createDataExtensions", "listener", "mx", "Check", "Checks", "CircleNotch", "Link", "PencilSimple", "UploadSimple", "WarningCircle", "X", "React", "useEffect", "useRef", "useState", "Button", "DensityProvider", "ElevationProvider", "Input", "Toolbar", "NaturalToolbar", "Tooltip", "useTranslation", "getSize", "mx", "Toolbar", "binding", "_binding", "onBindingChange", "deployed", "onDeploy", "functionUrl", "error", "t", "useTranslation", "SCRIPT_PLUGIN", "pending", "setPending", "useState", "editing", "setEditing", "setBinding", "inputRef", "useRef", "useEffect", "handleEdit", "current", "focus", "handleSave", "handleCancel", "handleCopyLink", "navigator", "clipboard", "writeText", "handleDeploy", "DensityProvider", "density", "ElevationProvider", "elevation", "NaturalToolbar", "Root", "classNames", "style", "contain", "Input", "Label", "TextInput", "ref", "disabled", "value", "onChange", "event", "target", "toUpperCase", "Button", "variant", "onClick", "X", "className", "getSize", "Check", "Tooltip", "Trigger", "asChild", "PencilSimple", "Portal", "Content", "Arrow", "div", "role", "WarningCircle", "Checks", "Link", "CircleNotch", "mx", "UploadSimple", "ScriptEditor", "script", "role", "t", "useTranslation", "SCRIPT_PLUGIN", "client", "useClient", "identity", "useIdentity", "space", "getSpace", "fn", "useQuery", "Filter", "schema", "FunctionType", "source", "extensions", "useMemo", "listener", "onChange", "text", "content", "changed", "createDataExtensions", "id", "createDocAccessor", "initialValue", "existingFunctionUrl", "getUserFunctionUrlInMetadata", "getMeta", "error", "setError", "useState", "handleBindingChange", "useCallback", "binding", "handleDeploy", "undefined", "existingFunctionId", "split", "at", "ownerDid", "publicKeyToDid", "identityKey", "result", "functionId", "functionVersionNumber", "errorMessage", "uploadWorkerFunction", "clientConfig", "config", "halo", "Error", "log", "info", "version", "deployedFunction", "db", "add", "create", "meta", "setUserFunctionUrlInMetadata", "err", "catch", "name", "React", "div", "className", "mx", "Toolbar", "onBindingChange", "deployed", "Boolean", "onDeploy", "functionUrl", "TypescriptEditor"]
|
|
7
|
+
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
TypescriptEditor,
|
|
3
3
|
TypescriptEditor_default
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-D4O723CR.mjs";
|
|
5
5
|
export {
|
|
6
6
|
TypescriptEditor,
|
|
7
7
|
TypescriptEditor_default as default
|
|
8
8
|
};
|
|
9
|
-
//# sourceMappingURL=TypescriptEditor-
|
|
9
|
+
//# sourceMappingURL=TypescriptEditor-PIRIDDUS.mjs.map
|
|
@@ -4,7 +4,7 @@ import { defaultHighlightStyle, syntaxHighlighting } from "@codemirror/language"
|
|
|
4
4
|
import { oneDarkHighlightStyle } from "@codemirror/theme-one-dark";
|
|
5
5
|
import React from "react";
|
|
6
6
|
import { useThemeContext } from "@dxos/react-ui";
|
|
7
|
-
import { autocomplete, createBasicExtensions, createThemeExtensions, editorContent, useTextEditor } from "@dxos/react-ui-editor";
|
|
7
|
+
import { autocomplete, createBasicExtensions, createThemeExtensions, editorContent, editorGutter, editorMonospace, useTextEditor } from "@dxos/react-ui-editor";
|
|
8
8
|
import { nonNullable } from "@dxos/util";
|
|
9
9
|
var TypescriptEditor = ({ id, extensions, initialValue, scrollTo, selection, className, scrollPastEnd }) => {
|
|
10
10
|
const { themeMode } = useThemeContext();
|
|
@@ -30,6 +30,8 @@ var TypescriptEditor = ({ id, extensions, initialValue, scrollTo, selection, cla
|
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
32
|
}),
|
|
33
|
+
editorGutter,
|
|
34
|
+
editorMonospace,
|
|
33
35
|
javascript({
|
|
34
36
|
typescript: true
|
|
35
37
|
}),
|
|
@@ -57,4 +59,4 @@ export {
|
|
|
57
59
|
TypescriptEditor,
|
|
58
60
|
TypescriptEditor_default
|
|
59
61
|
};
|
|
60
|
-
//# sourceMappingURL=chunk-
|
|
62
|
+
//# sourceMappingURL=chunk-D4O723CR.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/components/TypescriptEditor.tsx"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { javascript } from '@codemirror/lang-javascript';\nimport { defaultHighlightStyle, syntaxHighlighting } from '@codemirror/language';\nimport { oneDarkHighlightStyle } from '@codemirror/theme-one-dark';\nimport React from 'react';\n\nimport { useThemeContext } from '@dxos/react-ui';\nimport {\n autocomplete,\n createBasicExtensions,\n createThemeExtensions,\n editorContent,\n editorGutter,\n editorMonospace,\n useTextEditor,\n type UseTextEditorProps,\n} from '@dxos/react-ui-editor';\nimport { nonNullable } from '@dxos/util';\n\nexport type TypescriptEditorProps = {\n id: string;\n className?: string;\n scrollPastEnd?: boolean;\n} & Pick<UseTextEditorProps, 'initialValue' | 'extensions' | 'scrollTo' | 'selection'>;\n\nexport const TypescriptEditor = ({\n id,\n extensions,\n initialValue,\n scrollTo,\n selection,\n className,\n scrollPastEnd,\n}: TypescriptEditorProps) => {\n const { themeMode } = useThemeContext();\n const { parentRef, focusAttributes } = useTextEditor(\n () => ({\n id,\n initialValue,\n extensions: [\n extensions,\n // TODO(wittjosiah): Highlight active line doesn't work.\n createBasicExtensions({ highlightActiveLine: true, indentWithTab: true, lineNumbers: true, scrollPastEnd }),\n // TODO(wittjosiah): Factor out syntax highlighting to theme extensions.\n themeMode === 'dark' ? syntaxHighlighting(oneDarkHighlightStyle) : syntaxHighlighting(defaultHighlightStyle),\n createThemeExtensions({\n themeMode,\n slots: {\n content: { className: editorContent },\n },\n }),\n editorGutter,\n editorMonospace,\n javascript({ typescript: true }),\n autocomplete(),\n ].filter(nonNullable),\n selection,\n scrollTo,\n }),\n [id, initialValue, extensions, themeMode, selection, scrollTo],\n );\n\n return <div ref={parentRef} className={className} {...focusAttributes} />;\n};\n\nexport default TypescriptEditor;\n"],
|
|
5
|
+
"mappings": ";AAIA,SAASA,kBAAkB;AAC3B,SAASC,uBAAuBC,0BAA0B;AAC1D,SAASC,6BAA6B;AACtC,OAAOC,WAAW;AAElB,SAASC,uBAAuB;AAChC,SACEC,cACAC,uBACAC,uBACAC,eACAC,cACAC,iBACAC,qBAEK;AACP,SAASC,mBAAmB;AAQrB,IAAMC,mBAAmB,CAAC,EAC/BC,IACAC,YACAC,cACAC,UACAC,WACAC,WACAC,cAAa,MACS;AACtB,QAAM,EAAEC,UAAS,IAAKC,gBAAAA;AACtB,QAAM,EAAEC,WAAWC,gBAAe,IAAKC,cACrC,OAAO;IACLX;IACAE;IACAD,YAAY;MACVA;;MAEAW,sBAAsB;QAAEC,qBAAqB;QAAMC,eAAe;QAAMC,aAAa;QAAMT;MAAc,CAAA;;MAEzGC,cAAc,SAASS,mBAAmBC,qBAAAA,IAAyBD,mBAAmBE,qBAAAA;MACtFC,sBAAsB;QACpBZ;QACAa,OAAO;UACLC,SAAS;YAAEhB,WAAWiB;UAAc;QACtC;MACF,CAAA;MACAC;MACAC;MACAC,WAAW;QAAEC,YAAY;MAAK,CAAA;MAC9BC,aAAAA;MACAC,OAAOC,WAAAA;IACTzB;IACAD;EACF,IACA;IAACH;IAAIE;IAAcD;IAAYM;IAAWH;IAAWD;GAAS;AAGhE,SAAO,sBAAA,cAAC2B,OAAAA;IAAIC,KAAKtB;IAAWJ;IAAuB,GAAGK;;AACxD;AAEA,IAAA,2BAAeX;",
|
|
6
|
+
"names": ["javascript", "defaultHighlightStyle", "syntaxHighlighting", "oneDarkHighlightStyle", "React", "useThemeContext", "autocomplete", "createBasicExtensions", "createThemeExtensions", "editorContent", "editorGutter", "editorMonospace", "useTextEditor", "nonNullable", "TypescriptEditor", "id", "extensions", "initialValue", "scrollTo", "selection", "className", "scrollPastEnd", "themeMode", "useThemeContext", "parentRef", "focusAttributes", "useTextEditor", "createBasicExtensions", "highlightActiveLine", "indentWithTab", "lineNumbers", "syntaxHighlighting", "oneDarkHighlightStyle", "defaultHighlightStyle", "createThemeExtensions", "slots", "content", "editorContent", "editorGutter", "editorMonospace", "javascript", "typescript", "autocomplete", "filter", "nonNullable", "div", "ref"]
|
|
7
|
+
}
|
|
@@ -108,7 +108,7 @@ var publicKeyToDid = (key) => {
|
|
|
108
108
|
var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/experimental/plugin-script/src/edge/functions.ts";
|
|
109
109
|
var USERFUNCTIONS_META_KEY = "dxos.org/service/function";
|
|
110
110
|
var USERFUNCTIONS_CREDENTIAL_CAPABILITY = "composer:beta";
|
|
111
|
-
var defaultUserFunctionsBaseUrl = "
|
|
111
|
+
var defaultUserFunctionsBaseUrl = "https://functions-staging.dxos.workers.dev";
|
|
112
112
|
var getBaseUrl = (config) => {
|
|
113
113
|
return config.get("runtime.app.env.DX_USERFUNCTIONS_BASE_URL") || defaultUserFunctionsBaseUrl;
|
|
114
114
|
};
|
|
@@ -127,7 +127,7 @@ var uploadWorkerFunction = async ({ clientConfig, halo, name, source, ownerDid,
|
|
|
127
127
|
uploadUrl: uploadUrl.toString()
|
|
128
128
|
}, {
|
|
129
129
|
F: __dxlog_file,
|
|
130
|
-
L:
|
|
130
|
+
L: 64,
|
|
131
131
|
S: void 0,
|
|
132
132
|
C: (f, a) => f(...a)
|
|
133
133
|
});
|
|
@@ -151,7 +151,7 @@ var uploadWorkerFunction = async ({ clientConfig, halo, name, source, ownerDid,
|
|
|
151
151
|
res
|
|
152
152
|
}, {
|
|
153
153
|
F: __dxlog_file,
|
|
154
|
-
L:
|
|
154
|
+
L: 75,
|
|
155
155
|
S: void 0,
|
|
156
156
|
C: (f, a) => f(...a)
|
|
157
157
|
});
|
|
@@ -200,13 +200,13 @@ var presentationForIdentity = async ({ halo, timeout }) => {
|
|
|
200
200
|
credential
|
|
201
201
|
}, {
|
|
202
202
|
F: __dxlog_file,
|
|
203
|
-
L:
|
|
203
|
+
L: 121,
|
|
204
204
|
S: void 0,
|
|
205
205
|
C: (f, a) => f(...a)
|
|
206
206
|
});
|
|
207
207
|
invariant(credential.id, "beta credential missing id", {
|
|
208
208
|
F: __dxlog_file,
|
|
209
|
-
L:
|
|
209
|
+
L: 123,
|
|
210
210
|
S: void 0,
|
|
211
211
|
A: [
|
|
212
212
|
"credential.id",
|
|
@@ -232,4 +232,4 @@ export {
|
|
|
232
232
|
getUserFunctionUrlInMetadata,
|
|
233
233
|
setUserFunctionUrlInMetadata
|
|
234
234
|
};
|
|
235
|
-
//# sourceMappingURL=chunk-
|
|
235
|
+
//# sourceMappingURL=chunk-SK3L274X.mjs.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/edge/codec.ts", "../../../src/edge/header-codec.ts", "../../../src/edge/functions.ts", "../../../src/edge/hub-protocol.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { PublicKey } from '@dxos/keys';\n\nimport { HeaderCodec, type EncodedKey } from './header-codec';\n\nexport const codec = new HeaderCodec<PublicKey>({\n isKey: (value: any): value is PublicKey => value instanceof PublicKey,\n encode: (key: PublicKey): EncodedKey => ({ __k: key.toHex() }),\n decode: (value: EncodedKey): PublicKey => PublicKey.fromHex(value.__k),\n});\n", "//\n// Copyright 2024 DXOS.org\n//\n\n// TODO(burdon): Factor out from @dxos/hub-protocol\n\nconst ENCODING = 'base64';\n\nexport type EncodedKey = { __k: string };\n\nexport type EncodedBytes = { __b: string };\n\nexport type EncodedTimestamp = { __t: number };\n\nexport interface KeyCodec<KeyType> {\n isKey(value: any): value is KeyType;\n encode(key: KeyType): EncodedKey;\n decode(value: EncodedKey): KeyType;\n}\n\n// TODO(wittjosiah): Use deepMapValues from @dxos/util -- it handles recursion for you.\nexport class HeaderCodec<Key> {\n constructor(private readonly _keyCodec: KeyCodec<Key>) {}\n\n encode(obj: any): string {\n const objectToEncode = this._prepareForEncoding(obj);\n const encoded = Buffer.from(JSON.stringify(objectToEncode));\n return encoded.toString(ENCODING);\n }\n\n decode<Type>(buffer: string): Type {\n const json = JSON.parse(Buffer.from(buffer, ENCODING).toString());\n return this._decodeRecursive(json);\n }\n\n private _decodeRecursive(obj: any): any {\n return this._recurse(obj, (value) => {\n if (isEncodedBytes(value)) {\n return decodeBytes(value.__b);\n }\n if (isEncodedKey(value)) {\n return this._keyCodec.decode(value);\n }\n if (isEncodedDate(value)) {\n return decodeDate(value);\n }\n return null;\n });\n }\n\n private _prepareForEncoding(obj: any): any {\n return this._recurse(obj, (value) => {\n if (value instanceof Uint8Array) {\n return { __b: encodeBytes(value) };\n }\n if (this._keyCodec.isKey(value)) {\n return this._keyCodec.encode(value);\n }\n if (value instanceof Date) {\n return encodeDate(value);\n }\n return null;\n });\n }\n\n private _recurse(obj: any, handler: (obj: object) => any | null): any {\n if (typeof obj !== 'object') {\n return obj;\n }\n const handled = handler(obj);\n if (handled != null) {\n return handled;\n }\n if (Array.isArray(obj)) {\n const result = [];\n for (const elem of obj) {\n result.push(this._recurse(elem, handler));\n }\n return result;\n }\n const result: any = {};\n for (const [key, value] of Object.entries(obj)) {\n result[key] = this._recurse(value, handler);\n }\n return result;\n }\n}\n\nconst isEncodedKey = (obj: object): obj is EncodedKey => '__k' in obj && typeof obj.__k === 'string';\nconst isEncodedBytes = (obj: object): obj is EncodedBytes => '__b' in obj && typeof obj.__b === 'string';\nconst isEncodedDate = (obj: object): obj is EncodedTimestamp => '__t' in obj && typeof obj.__t === 'number';\n\nconst encodeDate = (date: Date) => ({ __t: date.getTime() });\nconst decodeDate = (timestamp: EncodedTimestamp) => new Date(timestamp.__t);\n\nconst encodeBytes = (bytes: Uint8Array) => Buffer.from(bytes).toString(ENCODING);\nconst decodeBytes = (bytes: string) => Buffer.from(bytes, ENCODING);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type DID } from 'iso-did/types';\n\nimport { Trigger } from '@dxos/async';\nimport { type Config } from '@dxos/client';\nimport { type Halo } from '@dxos/client-protocol';\nimport { type ObjectMeta } from '@dxos/echo-schema';\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\nimport { type Credential } from '@dxos/protocols/proto/dxos/halo/credentials';\n\nimport { codec } from './codec';\nimport { matchServiceCredential } from './hub-protocol';\n\n// TODO: use URL scheme for source?\nconst USERFUNCTIONS_META_KEY = 'dxos.org/service/function';\nconst USERFUNCTIONS_CREDENTIAL_CAPABILITY = 'composer:beta';\n\n// TODO: Synchronize API types with server\nexport type UserFunctionUploadResult = {\n result: 'success' | 'error';\n errorMessage?: string;\n functionId?: string;\n functionVersionNumber?: number;\n};\n\nexport type UploadWorkerProps = {\n clientConfig: Config;\n halo: Halo;\n name?: string;\n source: string;\n functionId?: string;\n ownerDid: DID;\n credentialLoadTimeout?: number; // ms to wait for credentials to load\n};\n\nconst defaultUserFunctionsBaseUrl = '
|
|
5
|
-
"mappings": "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
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { PublicKey } from '@dxos/keys';\n\nimport { HeaderCodec, type EncodedKey } from './header-codec';\n\nexport const codec = new HeaderCodec<PublicKey>({\n isKey: (value: any): value is PublicKey => value instanceof PublicKey,\n encode: (key: PublicKey): EncodedKey => ({ __k: key.toHex() }),\n decode: (value: EncodedKey): PublicKey => PublicKey.fromHex(value.__k),\n});\n", "//\n// Copyright 2024 DXOS.org\n//\n\n// TODO(burdon): Factor out from @dxos/hub-protocol\n\nconst ENCODING = 'base64';\n\nexport type EncodedKey = { __k: string };\n\nexport type EncodedBytes = { __b: string };\n\nexport type EncodedTimestamp = { __t: number };\n\nexport interface KeyCodec<KeyType> {\n isKey(value: any): value is KeyType;\n encode(key: KeyType): EncodedKey;\n decode(value: EncodedKey): KeyType;\n}\n\n// TODO(wittjosiah): Use deepMapValues from @dxos/util -- it handles recursion for you.\nexport class HeaderCodec<Key> {\n constructor(private readonly _keyCodec: KeyCodec<Key>) {}\n\n encode(obj: any): string {\n const objectToEncode = this._prepareForEncoding(obj);\n const encoded = Buffer.from(JSON.stringify(objectToEncode));\n return encoded.toString(ENCODING);\n }\n\n decode<Type>(buffer: string): Type {\n const json = JSON.parse(Buffer.from(buffer, ENCODING).toString());\n return this._decodeRecursive(json);\n }\n\n private _decodeRecursive(obj: any): any {\n return this._recurse(obj, (value) => {\n if (isEncodedBytes(value)) {\n return decodeBytes(value.__b);\n }\n if (isEncodedKey(value)) {\n return this._keyCodec.decode(value);\n }\n if (isEncodedDate(value)) {\n return decodeDate(value);\n }\n return null;\n });\n }\n\n private _prepareForEncoding(obj: any): any {\n return this._recurse(obj, (value) => {\n if (value instanceof Uint8Array) {\n return { __b: encodeBytes(value) };\n }\n if (this._keyCodec.isKey(value)) {\n return this._keyCodec.encode(value);\n }\n if (value instanceof Date) {\n return encodeDate(value);\n }\n return null;\n });\n }\n\n private _recurse(obj: any, handler: (obj: object) => any | null): any {\n if (typeof obj !== 'object') {\n return obj;\n }\n const handled = handler(obj);\n if (handled != null) {\n return handled;\n }\n if (Array.isArray(obj)) {\n const result = [];\n for (const elem of obj) {\n result.push(this._recurse(elem, handler));\n }\n return result;\n }\n const result: any = {};\n for (const [key, value] of Object.entries(obj)) {\n result[key] = this._recurse(value, handler);\n }\n return result;\n }\n}\n\nconst isEncodedKey = (obj: object): obj is EncodedKey => '__k' in obj && typeof obj.__k === 'string';\nconst isEncodedBytes = (obj: object): obj is EncodedBytes => '__b' in obj && typeof obj.__b === 'string';\nconst isEncodedDate = (obj: object): obj is EncodedTimestamp => '__t' in obj && typeof obj.__t === 'number';\n\nconst encodeDate = (date: Date) => ({ __t: date.getTime() });\nconst decodeDate = (timestamp: EncodedTimestamp) => new Date(timestamp.__t);\n\nconst encodeBytes = (bytes: Uint8Array) => Buffer.from(bytes).toString(ENCODING);\nconst decodeBytes = (bytes: string) => Buffer.from(bytes, ENCODING);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type DID } from 'iso-did/types';\n\nimport { Trigger } from '@dxos/async';\nimport { type Config } from '@dxos/client';\nimport { type Halo } from '@dxos/client-protocol';\nimport { type ObjectMeta } from '@dxos/echo-schema';\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\nimport { type Credential } from '@dxos/protocols/proto/dxos/halo/credentials';\n\nimport { codec } from './codec';\nimport { matchServiceCredential } from './hub-protocol';\n\n// TODO: use URL scheme for source?\nconst USERFUNCTIONS_META_KEY = 'dxos.org/service/function';\nconst USERFUNCTIONS_CREDENTIAL_CAPABILITY = 'composer:beta';\n\n// TODO: Synchronize API types with server\nexport type UserFunctionUploadResult = {\n result: 'success' | 'error';\n errorMessage?: string;\n functionId?: string;\n functionVersionNumber?: number;\n};\n\nexport type UploadWorkerProps = {\n clientConfig: Config;\n halo: Halo;\n name?: string;\n source: string;\n functionId?: string;\n ownerDid: DID;\n credentialLoadTimeout?: number; // ms to wait for credentials to load\n};\n\nconst defaultUserFunctionsBaseUrl = 'https://functions-staging.dxos.workers.dev'; // 'http://localhost:8600';\n\nconst getBaseUrl = (config: Config) => {\n return config.get('runtime.app.env.DX_USERFUNCTIONS_BASE_URL') || defaultUserFunctionsBaseUrl;\n};\n\nexport const uploadWorkerFunction = async ({\n clientConfig,\n halo,\n name,\n source,\n ownerDid,\n functionId,\n credentialLoadTimeout,\n}: UploadWorkerProps) => {\n const identity = halo.identity.get();\n if (!identity) {\n throw new Error('Identity not available');\n }\n const userFunctionsBaseUrl = getBaseUrl(clientConfig);\n\n // TODO: codify naming convention\n const uploadUrl = `${userFunctionsBaseUrl}/${ownerDid}` + (functionId ? `/${functionId}` : '');\n\n log('Upload', { functionId, source, name, identityKey: identity.identityKey, uploadUrl: uploadUrl.toString() });\n const response = await fetch(uploadUrl, {\n method: 'PUT',\n body: JSON.stringify({ script: source, name }),\n headers: await presentationForIdentity({ halo, timeout: credentialLoadTimeout }),\n });\n if (!response.ok) {\n return (await response.json()) as UserFunctionUploadResult;\n }\n\n const res = await response.json();\n log('Upload response', { status: response.status, res });\n\n return res as UserFunctionUploadResult;\n};\n\nexport const getUserFunctionUrlInMetadata = (meta: ObjectMeta) => {\n return meta.keys.find((key) => key.source === USERFUNCTIONS_META_KEY)?.id;\n};\n\nexport const setUserFunctionUrlInMetadata = (meta: ObjectMeta, functionUrl: string) => {\n const key = meta.keys.find((key) => key.source === USERFUNCTIONS_META_KEY);\n if (key) {\n if (key.id !== functionUrl) {\n throw new Error('Metadata mismatch');\n }\n } else {\n meta.keys.push({ source: USERFUNCTIONS_META_KEY, id: functionUrl });\n }\n};\n\n// TODO: handle team owner\n\nconst presentationForIdentity = async ({ halo, timeout }: { halo: Halo; timeout?: number }) => {\n let credential: Credential | undefined;\n\n if (timeout) {\n const credentialsLoaded = new Trigger();\n halo.credentials.subscribe((c) => {\n credential = c.find(matchServiceCredential([USERFUNCTIONS_CREDENTIAL_CAPABILITY]));\n if (credential) {\n credentialsLoaded.wake();\n }\n });\n await credentialsLoaded.wait({\n timeout,\n });\n } else {\n credential = halo\n .queryCredentials()\n .toSorted((a, b) => b.issuanceDate.getTime() - a.issuanceDate.getTime())\n .find(matchServiceCredential([USERFUNCTIONS_CREDENTIAL_CAPABILITY]));\n }\n\n if (!credential) {\n throw new Error('No credential found');\n }\n log('credential found', { credential });\n // TODO(wittjosiah): If id is required to present credentials, then it should always be present for queried credentials.\n invariant(credential.id, 'beta credential missing id');\n const presentation = await halo.presentCredentials({ ids: [credential.id] });\n\n return { Authorization: `Bearer ${codec.encode(presentation)}` };\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type DID } from 'iso-did/types';\n\nimport { type Credential } from '@dxos/client/halo';\nimport { type PublicKey } from '@dxos/keys';\n\n// TODO(burdon): Factor out to @dxos/hub-protocol.\n\nexport const matchServiceCredential =\n (capabilities: string[] = []) =>\n (credential: Credential) => {\n if (credential.subject.assertion['@type'] !== 'dxos.halo.credentials.ServiceAccess') {\n return false;\n }\n\n const { capabilities: credentialCapabilities } = credential.subject.assertion;\n return capabilities.every((capability) => credentialCapabilities.includes(capability));\n };\n\n// TODO: reconcile with @dxos/hub-protocol\n\nexport const publicKeyToDid = (key: PublicKey): DID => {\n return `did:key:${key.toHex()}`;\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["PublicKey", "ENCODING", "HeaderCodec", "constructor", "_keyCodec", "encode", "obj", "objectToEncode", "_prepareForEncoding", "encoded", "Buffer", "from", "JSON", "stringify", "toString", "decode", "buffer", "json", "parse", "_decodeRecursive", "_recurse", "value", "isEncodedBytes", "decodeBytes", "__b", "isEncodedKey", "isEncodedDate", "decodeDate", "Uint8Array", "encodeBytes", "isKey", "Date", "encodeDate", "handler", "handled", "Array", "isArray", "result", "elem", "push", "key", "Object", "entries", "__k", "__t", "date", "getTime", "timestamp", "bytes", "codec", "HeaderCodec", "isKey", "value", "PublicKey", "encode", "key", "__k", "toHex", "decode", "fromHex", "Trigger", "invariant", "log", "matchServiceCredential", "capabilities", "credential", "subject", "assertion", "credentialCapabilities", "every", "capability", "includes", "publicKeyToDid", "key", "toHex", "USERFUNCTIONS_META_KEY", "USERFUNCTIONS_CREDENTIAL_CAPABILITY", "defaultUserFunctionsBaseUrl", "getBaseUrl", "config", "get", "uploadWorkerFunction", "clientConfig", "halo", "name", "source", "ownerDid", "functionId", "credentialLoadTimeout", "identity", "Error", "userFunctionsBaseUrl", "uploadUrl", "log", "identityKey", "toString", "response", "fetch", "method", "body", "JSON", "stringify", "script", "headers", "presentationForIdentity", "timeout", "ok", "json", "res", "status", "getUserFunctionUrlInMetadata", "meta", "keys", "find", "key", "id", "setUserFunctionUrlInMetadata", "functionUrl", "push", "credential", "credentialsLoaded", "Trigger", "credentials", "subscribe", "c", "matchServiceCredential", "wake", "wait", "queryCredentials", "toSorted", "a", "b", "issuanceDate", "getTime", "invariant", "presentation", "presentCredentials", "ids", "Authorization", "codec", "encode"]
|
|
7
7
|
}
|
|
@@ -11,12 +11,21 @@ var ScriptType = class extends TypedObject({
|
|
|
11
11
|
})({
|
|
12
12
|
name: S.optional(S.String),
|
|
13
13
|
source: ref(TextType),
|
|
14
|
-
// Local binding to a function name.
|
|
15
|
-
binding: S.optional(S.String),
|
|
16
14
|
// Whether source has changed since last deploy.
|
|
17
15
|
changed: S.optional(S.Boolean)
|
|
18
16
|
}) {
|
|
19
17
|
};
|
|
18
|
+
var FunctionType = class extends TypedObject({
|
|
19
|
+
typename: "dxos.org/type/Function",
|
|
20
|
+
version: "0.1.0"
|
|
21
|
+
})({
|
|
22
|
+
version: S.Number,
|
|
23
|
+
// Local binding to a function name.
|
|
24
|
+
binding: S.optional(S.String),
|
|
25
|
+
// Reference to a source script if it exists within ECHO.
|
|
26
|
+
source: S.optional(ref(ScriptType))
|
|
27
|
+
}) {
|
|
28
|
+
};
|
|
20
29
|
|
|
21
30
|
// packages/plugins/experimental/plugin-script/src/types/types.tsx
|
|
22
31
|
var ScriptAction;
|
|
@@ -26,6 +35,7 @@ var ScriptAction;
|
|
|
26
35
|
|
|
27
36
|
export {
|
|
28
37
|
ScriptType,
|
|
38
|
+
FunctionType,
|
|
29
39
|
ScriptAction
|
|
30
40
|
};
|
|
31
|
-
//# sourceMappingURL=chunk-
|
|
41
|
+
//# sourceMappingURL=chunk-ZGCETT2W.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/types/script.ts", "../../../src/types/types.tsx"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { ref, S, TypedObject } from '@dxos/echo-schema';\nimport { TextType } from '@dxos/plugin-markdown/types';\n\nexport class ScriptType extends TypedObject({ typename: 'dxos.org/type/Script', version: '0.1.0' })({\n name: S.optional(S.String),\n source: ref(TextType),\n // Whether source has changed since last deploy.\n changed: S.optional(S.Boolean),\n}) {}\n\nexport class FunctionType extends TypedObject({ typename: 'dxos.org/type/Function', version: '0.1.0' })({\n version: S.Number,\n // Local binding to a function name.\n binding: S.optional(S.String),\n // Reference to a source script if it exists within ECHO.\n source: S.optional(ref(ScriptType)),\n}) {}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport type {\n GraphBuilderProvides,\n IntentResolverProvides,\n MetadataRecordsProvides,\n SurfaceProvides,\n TranslationsProvides,\n} from '@dxos/app-framework';\nimport { type SchemaProvides } from '@dxos/plugin-client';\nimport { type StackProvides } from '@dxos/plugin-stack';\n\nimport { SCRIPT_PLUGIN } from '../meta';\n\nexport enum ScriptAction {\n CREATE = `${SCRIPT_PLUGIN}/create`,\n}\n\nexport type ScriptPluginProvides = SurfaceProvides &\n IntentResolverProvides &\n GraphBuilderProvides &\n MetadataRecordsProvides &\n TranslationsProvides &\n SchemaProvides &\n StackProvides;\n"],
|
|
5
|
+
"mappings": ";;;;;AAIA,SAASA,KAAKC,GAAGC,mBAAmB;AACpC,SAASC,gBAAgB;AAElB,IAAMC,aAAN,cAAyBC,YAAY;EAAEC,UAAU;EAAwBC,SAAS;AAAQ,CAAA,EAAG;EAClGC,MAAMC,EAAEC,SAASD,EAAEE,MAAM;EACzBC,QAAQC,IAAIC,QAAAA;;EAEZC,SAASN,EAAEC,SAASD,EAAEO,OAAO;AAC/B,CAAA,EAAA;AAAI;AAEG,IAAMC,eAAN,cAA2BZ,YAAY;EAAEC,UAAU;EAA0BC,SAAS;AAAQ,CAAA,EAAG;EACtGA,SAASE,EAAES;;EAEXC,SAASV,EAAEC,SAASD,EAAEE,MAAM;;EAE5BC,QAAQH,EAAEC,SAASG,IAAIT,UAAAA,CAAAA;AACzB,CAAA,EAAA;AAAI;;;;UCJQgB,eAAAA;0CACD,GAAGC,aAAAA,SAAsB,IAAA;GADxBD,iBAAAA,eAAAA,CAAAA,EAAAA;",
|
|
6
|
+
"names": ["ref", "S", "TypedObject", "TextType", "ScriptType", "TypedObject", "typename", "version", "name", "S", "optional", "String", "source", "ref", "TextType", "changed", "Boolean", "FunctionType", "Number", "binding", "ScriptAction", "SCRIPT_PLUGIN"]
|
|
7
|
+
}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import {
|
|
2
|
+
FunctionType,
|
|
2
3
|
ScriptAction,
|
|
3
4
|
ScriptType
|
|
4
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-ZGCETT2W.mjs";
|
|
5
6
|
import {
|
|
6
7
|
SCRIPT_PLUGIN,
|
|
7
8
|
meta_default
|
|
@@ -20,8 +21,8 @@ import { loadObjectReferences } from "@dxos/react-client/echo";
|
|
|
20
21
|
|
|
21
22
|
// packages/plugins/experimental/plugin-script/src/components/index.ts
|
|
22
23
|
import React from "react";
|
|
23
|
-
var ScriptEditor = React.lazy(() => import("./ScriptEditor-
|
|
24
|
-
var TypescriptEditor = React.lazy(() => import("./TypescriptEditor-
|
|
24
|
+
var ScriptEditor = React.lazy(() => import("./ScriptEditor-7XICKICQ.mjs"));
|
|
25
|
+
var TypescriptEditor = React.lazy(() => import("./TypescriptEditor-PIRIDDUS.mjs"));
|
|
25
26
|
|
|
26
27
|
// packages/plugins/experimental/plugin-script/src/translations.ts
|
|
27
28
|
var translations_default = [
|
|
@@ -70,7 +71,8 @@ var ScriptPlugin = ({ containerUrl }) => {
|
|
|
70
71
|
translations: translations_default,
|
|
71
72
|
echo: {
|
|
72
73
|
schema: [
|
|
73
|
-
ScriptType
|
|
74
|
+
ScriptType,
|
|
75
|
+
FunctionType
|
|
74
76
|
]
|
|
75
77
|
},
|
|
76
78
|
graph: {
|
|
@@ -384,6 +386,7 @@ var analyzeSourceFileImports = (code) => {
|
|
|
384
386
|
var src_default = ScriptPlugin;
|
|
385
387
|
export {
|
|
386
388
|
Compiler,
|
|
389
|
+
FunctionType,
|
|
387
390
|
ScriptAction,
|
|
388
391
|
ScriptEditor,
|
|
389
392
|
ScriptPlugin,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/ScriptPlugin.tsx", "../../../src/components/index.ts", "../../../src/translations.ts", "../../../src/compiler/compiler.ts", "../../../src/index.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { Code, type IconProps } from '@phosphor-icons/react';\nimport React from 'react';\n\nimport { parseIntentPlugin, type PluginDefinition, resolvePlugin, NavigationAction } from '@dxos/app-framework';\nimport { create } from '@dxos/echo-schema';\nimport { parseClientPlugin } from '@dxos/plugin-client';\nimport { type ActionGroup, createExtension, isActionGroup } from '@dxos/plugin-graph';\nimport { TextType } from '@dxos/plugin-markdown/types';\nimport { SpaceAction } from '@dxos/plugin-space';\nimport { loadObjectReferences } from '@dxos/react-client/echo';\n\nimport { ScriptEditor } from './components';\nimport meta, { SCRIPT_PLUGIN } from './meta';\nimport translations from './translations';\nimport { ScriptType } from './types';\nimport { ScriptAction, type ScriptPluginProvides } from './types';\n\nexport type ScriptPluginProps = {\n containerUrl: string;\n};\n\nexport const ScriptPlugin = ({ containerUrl }: ScriptPluginProps): PluginDefinition<ScriptPluginProvides> => {\n return {\n meta,\n provides: {\n metadata: {\n records: {\n [ScriptType.typename]: {\n placeholder: ['object title placeholder', { ns: SCRIPT_PLUGIN }],\n icon: (props: IconProps) => <Code {...props} />,\n iconSymbol: 'ph--code--regular',\n // TODO(wittjosiah): Move out of metadata.\n loadReferences: (script: ScriptType) => loadObjectReferences(script, (script) => [script.source]),\n },\n },\n },\n translations,\n echo: {\n schema: [ScriptType],\n },\n graph: {\n builder: (plugins) => {\n const client = resolvePlugin(plugins, parseClientPlugin)?.provides.client;\n const dispatch = resolvePlugin(plugins, parseIntentPlugin)?.provides.intent.dispatch;\n if (!client || !dispatch) {\n return [];\n }\n\n return createExtension({\n id: ScriptAction.CREATE,\n filter: (node): node is ActionGroup => isActionGroup(node) && node.id.startsWith(SpaceAction.ADD_OBJECT),\n actions: ({ node }) => {\n const id = node.id.split('/').at(-1);\n const [spaceId, objectId] = id?.split(':') ?? [];\n const space = client.spaces.get().find((space) => space.id === spaceId);\n const object = objectId && space?.db.getObjectById(objectId);\n const target = objectId ? object : space;\n if (!target) {\n return;\n }\n\n return [\n {\n id: `${SCRIPT_PLUGIN}/create/${node.id}`,\n data: async () => {\n await dispatch([\n { plugin: SCRIPT_PLUGIN, action: ScriptAction.CREATE },\n { action: SpaceAction.ADD_OBJECT, data: { target } },\n { action: NavigationAction.OPEN },\n ]);\n },\n properties: {\n label: ['create object label', { ns: SCRIPT_PLUGIN }],\n icon: (props: IconProps) => <Code {...props} />,\n iconSymbol: 'ph--code--regular',\n testId: 'scriptPlugin.createObject',\n },\n },\n ];\n },\n });\n },\n },\n stack: {\n creators: [\n {\n id: 'create-stack-section-script',\n testId: 'scriptPlugin.createSectionSpaceScript',\n type: ['plugin name', { ns: SCRIPT_PLUGIN }],\n label: ['create stack section label', { ns: SCRIPT_PLUGIN }],\n icon: (props: any) => <Code {...props} />,\n intent: {\n plugin: SCRIPT_PLUGIN,\n action: ScriptAction.CREATE,\n },\n },\n ],\n },\n surface: {\n component: ({ data, role }) => {\n if (role && !['article', 'section'].includes(role)) {\n return null;\n }\n\n if (data.object instanceof ScriptType) {\n return <ScriptEditor script={data.object} role={role} />;\n }\n\n return null;\n },\n },\n intent: {\n resolver: (intent) => {\n switch (intent.action) {\n case ScriptAction.CREATE: {\n return { data: create(ScriptType, { source: create(TextType, { content: example }) }) };\n }\n }\n },\n },\n },\n };\n};\n\n// TODO(burdon): Import.\nconst example = [\n 'export default {',\n ' async fetch(request, env, ctx) {',\n \" return new Response('Hello World, from ScriptPlugin!');\",\n ' }',\n '}',\n '',\n].join('\\n');\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nexport const ScriptEditor = React.lazy(() => import('./ScriptEditor'));\nexport const TypescriptEditor = React.lazy(() => import('./TypescriptEditor'));\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { SCRIPT_PLUGIN } from './meta';\n\nexport default [\n {\n 'en-US': {\n [SCRIPT_PLUGIN]: {\n 'plugin name': 'Scripts',\n 'object title placeholder': 'New script',\n 'create object label': 'Create script',\n 'create stack section label': 'Create script',\n 'binding label': 'Binding',\n 'binding placeholder': 'Enter binding',\n 'edit binding label': 'Edit binding',\n 'deploy label': 'Deploy',\n 'deployed label': 'Current version of the script is deployed',\n 'upload failed label': 'Upload failed',\n 'copy link label': 'Copy function link',\n },\n },\n },\n];\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type BuildOptions } from 'esbuild';\nimport { build, initialize, type BuildResult } from 'esbuild-wasm';\n\nimport { subtleCrypto } from '@dxos/crypto';\nimport { invariant } from '@dxos/invariant';\n\nexport type Import = {\n moduleUrl: string;\n defaultImport: boolean;\n namedImports: string[];\n};\n\nexport type CompilerResult = {\n timestamp: number;\n sourceHash: Buffer;\n imports?: Import[];\n bundle?: string;\n error?: any;\n};\n\nexport type CompilerOptions = {\n platform: BuildOptions['platform'];\n providedModules: string[];\n};\n\nlet initialized: Promise<void>;\nexport const initializeCompiler = async (options: { wasmURL: string }) => {\n await (initialized ??= initialize({\n wasmURL: options.wasmURL,\n }));\n};\n\n/**\n * ESBuild compiler.\n */\nexport class Compiler {\n constructor(private readonly _options: CompilerOptions) {}\n\n async compile(source: string): Promise<CompilerResult> {\n const { providedModules, ...options } = this._options;\n\n const createResult = async (result?: Partial<CompilerResult>) => {\n return {\n timestamp: Date.now(),\n sourceHash: Buffer.from(await subtleCrypto.digest('SHA-256', Buffer.from(source))),\n ...result,\n };\n };\n\n if (this._options.platform === 'browser') {\n invariant(initialized, 'Compiler not initialized.');\n await initialized;\n }\n\n const imports = analyzeSourceFileImports(source);\n\n // https://esbuild.github.io/api/#build\n try {\n const result = await build({\n ...options,\n metafile: true,\n write: false,\n entryPoints: ['memory:main.tsx'],\n bundle: true,\n format: 'esm',\n plugins: [\n {\n name: 'memory',\n setup: (build) => {\n build.onResolve({ filter: /^memory:/ }, ({ path }) => {\n return { path: path.split(':')[1], namespace: 'memory' };\n });\n\n build.onLoad({ filter: /.*/, namespace: 'memory' }, ({ path }) => {\n const imports = [\"import React from 'react';\"];\n if (path === 'main.tsx') {\n return {\n contents: [...imports, source].join('\\n'),\n loader: 'tsx',\n };\n }\n });\n\n for (const module of providedModules) {\n build.onResolve({ filter: new RegExp(`^${module}$`) }, ({ path }) => {\n return { path, namespace: 'injected-module' };\n });\n }\n\n build.onLoad({ filter: /.*/, namespace: 'injected-module' }, ({ path }) => {\n const namedImports = imports.find((entry) => entry.moduleIdentifier === path)?.namedImports ?? [];\n return {\n contents: `\n const { ${namedImports.join(',')} } = window.__DXOS_SANDBOX_MODULES__[${JSON.stringify(path)}];\n export { ${namedImports.join(',')} };\n export default window.__DXOS_SANDBOX_MODULES__[${JSON.stringify(path)}].default;\n `,\n loader: 'tsx',\n };\n });\n },\n },\n ],\n });\n\n return await createResult({\n imports: this.analyzeImports(result),\n bundle: result.outputFiles![0].text,\n });\n } catch (err) {\n return await createResult({ error: err });\n }\n }\n\n // TODO(dmaretskyi): In the future we can replace the compiler with SWC with plugins running in WASM.\n analyzeImports(result: BuildResult): Import[] {\n invariant(result.outputFiles);\n\n // TODO(dmaretskyi): Support import aliases and wildcard imports.\n const parsedImports = allMatches(IMPORT_REGEX, result.outputFiles[0].text);\n return Object.values(result.metafile!.outputs)[0].imports.map((entry): Import => {\n const namedImports: string[] = [];\n\n const parsedImport = parsedImports.find((capture) => capture?.[4] === entry.path);\n if (parsedImport?.[2]) {\n NAMED_IMPORTS_REGEX.lastIndex = 0;\n const namedImportsMatch = NAMED_IMPORTS_REGEX.exec(parsedImport[2]);\n if (namedImportsMatch) {\n namedImportsMatch[1].split(',').forEach((importName) => {\n namedImports.push(importName.trim());\n });\n }\n }\n\n return {\n moduleUrl: entry.path,\n defaultImport: !!parsedImport?.[1],\n namedImports,\n };\n });\n }\n\n analyzeSourceFileImports(code: string) {\n // TODO(dmaretskyi): Support import aliases and wildcard imports.\n const parsedImports = allMatches(IMPORT_REGEX, code);\n return parsedImports.map((capture) => {\n return {\n defaultImportName: capture[1],\n namedImports: capture[2]?.split(',').map((importName) => importName.trim()),\n wildcardImportName: capture[3],\n moduleIdentifier: capture[4],\n quotes: capture[5],\n };\n });\n }\n}\n\n// https://regex101.com/r/FEN5ks/1\n// https://stackoverflow.com/a/73265022\n// $1 = default import name (can be non-existent)\n// $2 = destructured exports (can be non-existent)\n// $3 = wildcard import name (can be non-existent)\n// $4 = module identifier\n// $5 = quotes used (either ' or \")\nconst IMPORT_REGEX =\n /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;\n\nconst NAMED_IMPORTS_REGEX = /[ \\n\\t]*{((?:[ \\n\\t]*[^ \\n\\t\"'{}]+[ \\n\\t]*,?)+)}[ \\n\\t]*/gm;\n\nconst allMatches = (regex: RegExp, str: string) => {\n regex.lastIndex = 0;\n\n let match;\n const matches = [];\n while ((match = regex.exec(str))) {\n matches.push(match);\n }\n\n return matches;\n};\n\ntype ParsedImport = {\n defaultImportName?: string;\n namedImports: string[];\n wildcardImportName?: string;\n moduleIdentifier: string;\n quotes: string;\n};\n\nconst analyzeSourceFileImports = (code: string): ParsedImport[] => {\n // TODO(dmaretskyi): Support import aliases and wildcard imports.\n const parsedImports = allMatches(IMPORT_REGEX, code);\n return parsedImports.map((capture) => {\n return {\n defaultImportName: capture[1],\n namedImports: capture[2]\n ?.trim()\n .slice(1, -1)\n .split(',')\n .map((importName) => importName.trim()),\n wildcardImportName: capture[3],\n moduleIdentifier: capture[4],\n quotes: capture[5],\n };\n });\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { ScriptPlugin } from './ScriptPlugin';\n\nexport default ScriptPlugin;\n\nexport * from './compiler';\nexport * from './components';\nexport * from './types';\n\nexport * from './ScriptPlugin';\n"],
|
|
5
|
-
"mappings": "
|
|
6
|
-
"names": ["Code", "React", "parseIntentPlugin", "resolvePlugin", "NavigationAction", "create", "parseClientPlugin", "createExtension", "isActionGroup", "TextType", "SpaceAction", "loadObjectReferences", "React", "ScriptEditor", "React", "lazy", "TypescriptEditor", "SCRIPT_PLUGIN", "ScriptPlugin", "containerUrl", "meta", "provides", "metadata", "records", "ScriptType", "typename", "placeholder", "ns", "SCRIPT_PLUGIN", "icon", "props", "React", "Code", "iconSymbol", "loadReferences", "script", "loadObjectReferences", "source", "translations", "echo", "schema", "graph", "builder", "plugins", "client", "resolvePlugin", "parseClientPlugin", "dispatch", "parseIntentPlugin", "intent", "createExtension", "id", "ScriptAction", "CREATE", "filter", "node", "isActionGroup", "startsWith", "SpaceAction", "ADD_OBJECT", "actions", "split", "at", "spaceId", "objectId", "space", "spaces", "get", "find", "object", "db", "getObjectById", "target", "data", "plugin", "action", "NavigationAction", "OPEN", "properties", "label", "testId", "stack", "creators", "type", "surface", "component", "role", "includes", "ScriptEditor", "resolver", "create", "TextType", "content", "example", "join", "build", "initialize", "subtleCrypto", "invariant", "initialized", "initializeCompiler", "options", "wasmURL", "Compiler", "constructor", "_options", "compile", "source", "providedModules", "createResult", "result", "timestamp", "Date", "now", "sourceHash", "Buffer", "from", "digest", "platform", "imports", "analyzeSourceFileImports", "metafile", "write", "entryPoints", "bundle", "format", "plugins", "name", "setup", "onResolve", "filter", "path", "split", "namespace", "onLoad", "contents", "join", "loader", "module", "RegExp", "namedImports", "find", "entry", "moduleIdentifier", "JSON", "stringify", "analyzeImports", "outputFiles", "text", "err", "error", "parsedImports", "allMatches", "IMPORT_REGEX", "Object", "values", "outputs", "map", "parsedImport", "capture", "NAMED_IMPORTS_REGEX", "lastIndex", "namedImportsMatch", "exec", "forEach", "importName", "push", "trim", "moduleUrl", "defaultImport", "code", "defaultImportName", "wildcardImportName", "quotes", "regex", "str", "match", "matches", "slice", "ScriptPlugin"]
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { Code, type IconProps } from '@phosphor-icons/react';\nimport React from 'react';\n\nimport { parseIntentPlugin, type PluginDefinition, resolvePlugin, NavigationAction } from '@dxos/app-framework';\nimport { create } from '@dxos/echo-schema';\nimport { parseClientPlugin } from '@dxos/plugin-client';\nimport { type ActionGroup, createExtension, isActionGroup } from '@dxos/plugin-graph';\nimport { TextType } from '@dxos/plugin-markdown/types';\nimport { SpaceAction } from '@dxos/plugin-space';\nimport { loadObjectReferences } from '@dxos/react-client/echo';\n\nimport { ScriptEditor } from './components';\nimport meta, { SCRIPT_PLUGIN } from './meta';\nimport translations from './translations';\nimport { FunctionType, ScriptType } from './types';\nimport { ScriptAction, type ScriptPluginProvides } from './types';\n\nexport type ScriptPluginProps = {\n containerUrl: string;\n};\n\nexport const ScriptPlugin = ({ containerUrl }: ScriptPluginProps): PluginDefinition<ScriptPluginProvides> => {\n return {\n meta,\n provides: {\n metadata: {\n records: {\n [ScriptType.typename]: {\n placeholder: ['object title placeholder', { ns: SCRIPT_PLUGIN }],\n icon: (props: IconProps) => <Code {...props} />,\n iconSymbol: 'ph--code--regular',\n // TODO(wittjosiah): Move out of metadata.\n loadReferences: (script: ScriptType) => loadObjectReferences(script, (script) => [script.source]),\n },\n },\n },\n translations,\n echo: {\n schema: [ScriptType, FunctionType],\n },\n graph: {\n builder: (plugins) => {\n const client = resolvePlugin(plugins, parseClientPlugin)?.provides.client;\n const dispatch = resolvePlugin(plugins, parseIntentPlugin)?.provides.intent.dispatch;\n if (!client || !dispatch) {\n return [];\n }\n\n return createExtension({\n id: ScriptAction.CREATE,\n filter: (node): node is ActionGroup => isActionGroup(node) && node.id.startsWith(SpaceAction.ADD_OBJECT),\n actions: ({ node }) => {\n const id = node.id.split('/').at(-1);\n const [spaceId, objectId] = id?.split(':') ?? [];\n const space = client.spaces.get().find((space) => space.id === spaceId);\n const object = objectId && space?.db.getObjectById(objectId);\n const target = objectId ? object : space;\n if (!target) {\n return;\n }\n\n return [\n {\n id: `${SCRIPT_PLUGIN}/create/${node.id}`,\n data: async () => {\n await dispatch([\n { plugin: SCRIPT_PLUGIN, action: ScriptAction.CREATE },\n { action: SpaceAction.ADD_OBJECT, data: { target } },\n { action: NavigationAction.OPEN },\n ]);\n },\n properties: {\n label: ['create object label', { ns: SCRIPT_PLUGIN }],\n icon: (props: IconProps) => <Code {...props} />,\n iconSymbol: 'ph--code--regular',\n testId: 'scriptPlugin.createObject',\n },\n },\n ];\n },\n });\n },\n },\n stack: {\n creators: [\n {\n id: 'create-stack-section-script',\n testId: 'scriptPlugin.createSectionSpaceScript',\n type: ['plugin name', { ns: SCRIPT_PLUGIN }],\n label: ['create stack section label', { ns: SCRIPT_PLUGIN }],\n icon: (props: any) => <Code {...props} />,\n intent: { plugin: SCRIPT_PLUGIN, action: ScriptAction.CREATE },\n },\n ],\n },\n surface: {\n component: ({ data, role }) => {\n if (role && !['article', 'section'].includes(role)) {\n return null;\n }\n\n if (data.object instanceof ScriptType) {\n return <ScriptEditor script={data.object} role={role} />;\n }\n\n return null;\n },\n },\n intent: {\n resolver: (intent) => {\n switch (intent.action) {\n case ScriptAction.CREATE: {\n return { data: create(ScriptType, { source: create(TextType, { content: example }) }) };\n }\n }\n },\n },\n },\n };\n};\n\n// TODO(burdon): Import.\nconst example = [\n 'export default {',\n ' async fetch(request, env, ctx) {',\n \" return new Response('Hello World, from ScriptPlugin!');\",\n ' }',\n '}',\n '',\n].join('\\n');\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nexport const ScriptEditor = React.lazy(() => import('./ScriptEditor'));\nexport const TypescriptEditor = React.lazy(() => import('./TypescriptEditor'));\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { SCRIPT_PLUGIN } from './meta';\n\nexport default [\n {\n 'en-US': {\n [SCRIPT_PLUGIN]: {\n 'plugin name': 'Scripts',\n 'object title placeholder': 'New script',\n 'create object label': 'Create script',\n 'create stack section label': 'Create script',\n 'binding label': 'Binding',\n 'binding placeholder': 'Enter binding',\n 'edit binding label': 'Edit binding',\n 'deploy label': 'Deploy',\n 'deployed label': 'Current version of the script is deployed',\n 'upload failed label': 'Upload failed',\n 'copy link label': 'Copy function link',\n },\n },\n },\n];\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type BuildOptions } from 'esbuild';\nimport { build, initialize, type BuildResult } from 'esbuild-wasm';\n\nimport { subtleCrypto } from '@dxos/crypto';\nimport { invariant } from '@dxos/invariant';\n\nexport type Import = {\n moduleUrl: string;\n defaultImport: boolean;\n namedImports: string[];\n};\n\nexport type CompilerResult = {\n timestamp: number;\n sourceHash: Buffer;\n imports?: Import[];\n bundle?: string;\n error?: any;\n};\n\nexport type CompilerOptions = {\n platform: BuildOptions['platform'];\n providedModules: string[];\n};\n\nlet initialized: Promise<void>;\nexport const initializeCompiler = async (options: { wasmURL: string }) => {\n await (initialized ??= initialize({\n wasmURL: options.wasmURL,\n }));\n};\n\n/**\n * ESBuild compiler.\n */\nexport class Compiler {\n constructor(private readonly _options: CompilerOptions) {}\n\n async compile(source: string): Promise<CompilerResult> {\n const { providedModules, ...options } = this._options;\n\n const createResult = async (result?: Partial<CompilerResult>) => {\n return {\n timestamp: Date.now(),\n sourceHash: Buffer.from(await subtleCrypto.digest('SHA-256', Buffer.from(source))),\n ...result,\n };\n };\n\n if (this._options.platform === 'browser') {\n invariant(initialized, 'Compiler not initialized.');\n await initialized;\n }\n\n const imports = analyzeSourceFileImports(source);\n\n // https://esbuild.github.io/api/#build\n try {\n const result = await build({\n ...options,\n metafile: true,\n write: false,\n entryPoints: ['memory:main.tsx'],\n bundle: true,\n format: 'esm',\n plugins: [\n {\n name: 'memory',\n setup: (build) => {\n build.onResolve({ filter: /^memory:/ }, ({ path }) => {\n return { path: path.split(':')[1], namespace: 'memory' };\n });\n\n build.onLoad({ filter: /.*/, namespace: 'memory' }, ({ path }) => {\n const imports = [\"import React from 'react';\"];\n if (path === 'main.tsx') {\n return {\n contents: [...imports, source].join('\\n'),\n loader: 'tsx',\n };\n }\n });\n\n for (const module of providedModules) {\n build.onResolve({ filter: new RegExp(`^${module}$`) }, ({ path }) => {\n return { path, namespace: 'injected-module' };\n });\n }\n\n build.onLoad({ filter: /.*/, namespace: 'injected-module' }, ({ path }) => {\n const namedImports = imports.find((entry) => entry.moduleIdentifier === path)?.namedImports ?? [];\n return {\n contents: `\n const { ${namedImports.join(',')} } = window.__DXOS_SANDBOX_MODULES__[${JSON.stringify(path)}];\n export { ${namedImports.join(',')} };\n export default window.__DXOS_SANDBOX_MODULES__[${JSON.stringify(path)}].default;\n `,\n loader: 'tsx',\n };\n });\n },\n },\n ],\n });\n\n return await createResult({\n imports: this.analyzeImports(result),\n bundle: result.outputFiles![0].text,\n });\n } catch (err) {\n return await createResult({ error: err });\n }\n }\n\n // TODO(dmaretskyi): In the future we can replace the compiler with SWC with plugins running in WASM.\n analyzeImports(result: BuildResult): Import[] {\n invariant(result.outputFiles);\n\n // TODO(dmaretskyi): Support import aliases and wildcard imports.\n const parsedImports = allMatches(IMPORT_REGEX, result.outputFiles[0].text);\n return Object.values(result.metafile!.outputs)[0].imports.map((entry): Import => {\n const namedImports: string[] = [];\n\n const parsedImport = parsedImports.find((capture) => capture?.[4] === entry.path);\n if (parsedImport?.[2]) {\n NAMED_IMPORTS_REGEX.lastIndex = 0;\n const namedImportsMatch = NAMED_IMPORTS_REGEX.exec(parsedImport[2]);\n if (namedImportsMatch) {\n namedImportsMatch[1].split(',').forEach((importName) => {\n namedImports.push(importName.trim());\n });\n }\n }\n\n return {\n moduleUrl: entry.path,\n defaultImport: !!parsedImport?.[1],\n namedImports,\n };\n });\n }\n\n analyzeSourceFileImports(code: string) {\n // TODO(dmaretskyi): Support import aliases and wildcard imports.\n const parsedImports = allMatches(IMPORT_REGEX, code);\n return parsedImports.map((capture) => {\n return {\n defaultImportName: capture[1],\n namedImports: capture[2]?.split(',').map((importName) => importName.trim()),\n wildcardImportName: capture[3],\n moduleIdentifier: capture[4],\n quotes: capture[5],\n };\n });\n }\n}\n\n// https://regex101.com/r/FEN5ks/1\n// https://stackoverflow.com/a/73265022\n// $1 = default import name (can be non-existent)\n// $2 = destructured exports (can be non-existent)\n// $3 = wildcard import name (can be non-existent)\n// $4 = module identifier\n// $5 = quotes used (either ' or \")\nconst IMPORT_REGEX =\n /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;\n\nconst NAMED_IMPORTS_REGEX = /[ \\n\\t]*{((?:[ \\n\\t]*[^ \\n\\t\"'{}]+[ \\n\\t]*,?)+)}[ \\n\\t]*/gm;\n\nconst allMatches = (regex: RegExp, str: string) => {\n regex.lastIndex = 0;\n\n let match;\n const matches = [];\n while ((match = regex.exec(str))) {\n matches.push(match);\n }\n\n return matches;\n};\n\ntype ParsedImport = {\n defaultImportName?: string;\n namedImports: string[];\n wildcardImportName?: string;\n moduleIdentifier: string;\n quotes: string;\n};\n\nconst analyzeSourceFileImports = (code: string): ParsedImport[] => {\n // TODO(dmaretskyi): Support import aliases and wildcard imports.\n const parsedImports = allMatches(IMPORT_REGEX, code);\n return parsedImports.map((capture) => {\n return {\n defaultImportName: capture[1],\n namedImports: capture[2]\n ?.trim()\n .slice(1, -1)\n .split(',')\n .map((importName) => importName.trim()),\n wildcardImportName: capture[3],\n moduleIdentifier: capture[4],\n quotes: capture[5],\n };\n });\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { ScriptPlugin } from './ScriptPlugin';\n\nexport default ScriptPlugin;\n\nexport * from './compiler';\nexport * from './components';\nexport * from './types';\n\nexport * from './ScriptPlugin';\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["Code", "React", "parseIntentPlugin", "resolvePlugin", "NavigationAction", "create", "parseClientPlugin", "createExtension", "isActionGroup", "TextType", "SpaceAction", "loadObjectReferences", "React", "ScriptEditor", "React", "lazy", "TypescriptEditor", "SCRIPT_PLUGIN", "ScriptPlugin", "containerUrl", "meta", "provides", "metadata", "records", "ScriptType", "typename", "placeholder", "ns", "SCRIPT_PLUGIN", "icon", "props", "React", "Code", "iconSymbol", "loadReferences", "script", "loadObjectReferences", "source", "translations", "echo", "schema", "FunctionType", "graph", "builder", "plugins", "client", "resolvePlugin", "parseClientPlugin", "dispatch", "parseIntentPlugin", "intent", "createExtension", "id", "ScriptAction", "CREATE", "filter", "node", "isActionGroup", "startsWith", "SpaceAction", "ADD_OBJECT", "actions", "split", "at", "spaceId", "objectId", "space", "spaces", "get", "find", "object", "db", "getObjectById", "target", "data", "plugin", "action", "NavigationAction", "OPEN", "properties", "label", "testId", "stack", "creators", "type", "surface", "component", "role", "includes", "ScriptEditor", "resolver", "create", "TextType", "content", "example", "join", "build", "initialize", "subtleCrypto", "invariant", "initialized", "initializeCompiler", "options", "wasmURL", "Compiler", "constructor", "_options", "compile", "source", "providedModules", "createResult", "result", "timestamp", "Date", "now", "sourceHash", "Buffer", "from", "digest", "platform", "imports", "analyzeSourceFileImports", "metafile", "write", "entryPoints", "bundle", "format", "plugins", "name", "setup", "onResolve", "filter", "path", "split", "namespace", "onLoad", "contents", "join", "loader", "module", "RegExp", "namedImports", "find", "entry", "moduleIdentifier", "JSON", "stringify", "analyzeImports", "outputFiles", "text", "err", "error", "parsedImports", "allMatches", "IMPORT_REGEX", "Object", "values", "outputs", "map", "parsedImport", "capture", "NAMED_IMPORTS_REGEX", "lastIndex", "namedImportsMatch", "exec", "forEach", "importName", "push", "trim", "moduleUrl", "defaultImport", "code", "defaultImportName", "wildcardImportName", "quotes", "regex", "str", "match", "matches", "slice", "ScriptPlugin"]
|
|
7
7
|
}
|