From 74af4c9008da137f844a4102bb5fe12fb46c3741 Mon Sep 17 00:00:00 2001 From: FineArchs <133759614+FineArchs@users.noreply.github.com> Date: Thu, 22 Aug 2024 05:35:45 +0900 Subject: [PATCH 1/9] Update ui.ts --- packages/frontend/src/scripts/aiscript/ui.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/frontend/src/scripts/aiscript/ui.ts b/packages/frontend/src/scripts/aiscript/ui.ts index fa3fcac2e79..82ccce76be0 100644 --- a/packages/frontend/src/scripts/aiscript/ui.ts +++ b/packages/frontend/src/scripts/aiscript/ui.ts @@ -502,8 +502,8 @@ function getPostFormOptions(def: values.Value | undefined, call: (fn: values.VFn }; } -export function registerAsUiLib(components: Ref[], done: (root: Ref) => void) { - const instances = {}; +export function registerAsUiLib(components: Map>, done: (root: Ref) => void) { + const instances = new Map(); function createComponentInstance(type: AsUiComponent['type'], def: values.Value | undefined, id: values.Value | undefined, getOptions: (def: values.Value | undefined, call: (fn: values.VFn, args: values.Value[]) => Promise) => any, call: (fn: values.VFn, args: values.Value[]) => Promise) { if (id) utils.assertString(id); @@ -513,7 +513,7 @@ export function registerAsUiLib(components: Ref[], done: (root: R type, id: _id, }); - components.push(component); + components.set(_id, component); const instance = values.OBJ(new Map([ ['id', values.STR(_id)], ['update', values.FN_NATIVE(([def], opts) => { @@ -525,12 +525,12 @@ export function registerAsUiLib(components: Ref[], done: (root: R } })], ])); - instances[_id] = instance; + instances.set(_id, instance); return instance; } const rootInstance = createComponentInstance('root', utils.jsToVal({ children: [] }), utils.jsToVal('___root___'), getRootOptions, () => {}); - const rootComponent = components[0] as Ref; + const rootComponent = components.get('___root___') as Ref; done(rootComponent); return { @@ -544,7 +544,7 @@ export function registerAsUiLib(components: Ref[], done: (root: R 'Ui:get': values.FN_NATIVE(([id], opts) => { utils.assertString(id); - const instance = instances[id.value]; + const instance = instances.get(id.value); if (instance) { return instance; } else { From 77017cbdfc38e9c67a7380f6005c5a0cbd01751f Mon Sep 17 00:00:00 2001 From: FineArchs <133759614+FineArchs@users.noreply.github.com> Date: Thu, 22 Aug 2024 06:03:14 +0900 Subject: [PATCH 2/9] Update MkAsUi.vue --- packages/frontend/src/components/MkAsUi.vue | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/frontend/src/components/MkAsUi.vue b/packages/frontend/src/components/MkAsUi.vue index 18e8e7542e3..bb050e2c640 100644 --- a/packages/frontend/src/components/MkAsUi.vue +++ b/packages/frontend/src/components/MkAsUi.vue @@ -7,7 +7,7 @@ SPDX-License-Identifier: AGPL-3.0-only
{{ c.text }} @@ -56,7 +56,7 @@ SPDX-License-Identifier: AGPL-3.0-only
@@ -75,8 +75,8 @@ import MkFolder from '@/components/MkFolder.vue'; import MkPostForm from '@/components/MkPostForm.vue'; const props = withDefaults(defineProps<{ - component: AsUiComponent; - components: Ref[]; + cid: string; + components: Map>; size: 'small' | 'medium' | 'large'; align: 'left' | 'center' | 'right'; }>(), { @@ -84,10 +84,10 @@ const props = withDefaults(defineProps<{ align: 'left', }); -const c = props.component; +const c = props.components.get(props.cid).value; function g(id) { - const v = props.components.find(x => x.value.id === id)?.value; + const v = props.components.get(id).value; if (v) return v; return { From aeef68a4ffda376dbd6ef0da0e013fe612bdd1c3 Mon Sep 17 00:00:00 2001 From: FineArchs <133759614+FineArchs@users.noreply.github.com> Date: Thu, 22 Aug 2024 06:09:47 +0900 Subject: [PATCH 3/9] Update flash.vue --- packages/frontend/src/pages/flash/flash.vue | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/frontend/src/pages/flash/flash.vue b/packages/frontend/src/pages/flash/flash.vue index a6a99ba6332..cce52113c33 100644 --- a/packages/frontend/src/pages/flash/flash.vue +++ b/packages/frontend/src/pages/flash/flash.vue @@ -12,7 +12,7 @@ SPDX-License-Identifier: AGPL-3.0-only
- +
@@ -180,7 +180,7 @@ const parser = new Parser(); const started = ref(false); const aiscript = shallowRef(null); const root = ref(); -const components = ref[]>([]); +const components = ref>>(new Map()); function start() { started.value = true; From be211fc0aa52e8412dd83fcc8f8e25b2a87d62c9 Mon Sep 17 00:00:00 2001 From: FineArchs <133759614+FineArchs@users.noreply.github.com> Date: Thu, 22 Aug 2024 06:42:30 +0900 Subject: [PATCH 4/9] Update ui.ts --- packages/frontend/src/scripts/aiscript/ui.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/frontend/src/scripts/aiscript/ui.ts b/packages/frontend/src/scripts/aiscript/ui.ts index 82ccce76be0..7cd3d186654 100644 --- a/packages/frontend/src/scripts/aiscript/ui.ts +++ b/packages/frontend/src/scripts/aiscript/ui.ts @@ -502,7 +502,7 @@ function getPostFormOptions(def: values.Value | undefined, call: (fn: values.VFn }; } -export function registerAsUiLib(components: Map>, done: (root: Ref) => void) { +export function registerAsUiLib(components: Map>, done?: (root: Ref) => void) { const instances = new Map(); function createComponentInstance(type: AsUiComponent['type'], def: values.Value | undefined, id: values.Value | undefined, getOptions: (def: values.Value | undefined, call: (fn: values.VFn, args: values.Value[]) => Promise) => any, call: (fn: values.VFn, args: values.Value[]) => Promise) { From 48e3c7f48dc49d8234c3cf3c7ffdb02854115ebd Mon Sep 17 00:00:00 2001 From: FineArchs <133759614+FineArchs@users.noreply.github.com> Date: Thu, 22 Aug 2024 06:45:18 +0900 Subject: [PATCH 5/9] Update flash.vue --- packages/frontend/src/pages/flash/flash.vue | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/packages/frontend/src/pages/flash/flash.vue b/packages/frontend/src/pages/flash/flash.vue index cce52113c33..a16407e9f54 100644 --- a/packages/frontend/src/pages/flash/flash.vue +++ b/packages/frontend/src/pages/flash/flash.vue @@ -179,7 +179,6 @@ const parser = new Parser(); const started = ref(false); const aiscript = shallowRef(null); -const root = ref(); const components = ref>>(new Map()); function start() { @@ -195,9 +194,7 @@ async function run() { ...createAiScriptEnv({ storageKey: 'flash:' + flash.value.id, }), - ...registerAsUiLib(components.value, (_root) => { - root.value = _root.value; - }), + ...registerAsUiLib(components.value), THIS_ID: values.STR(flash.value.id), THIS_URL: values.STR(`${url}/play/${flash.value.id}`), }, { From 13480fd0e285a953c15b693a8388bbb7912caef9 Mon Sep 17 00:00:00 2001 From: FineArchs <133759614+FineArchs@users.noreply.github.com> Date: Thu, 22 Aug 2024 06:55:17 +0900 Subject: [PATCH 6/9] Update scratchpad.vue --- packages/frontend/src/pages/scratchpad.vue | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/packages/frontend/src/pages/scratchpad.vue b/packages/frontend/src/pages/scratchpad.vue index 9aaa8ff9c63..c171b3d6664 100644 --- a/packages/frontend/src/pages/scratchpad.vue +++ b/packages/frontend/src/pages/scratchpad.vue @@ -19,7 +19,7 @@ SPDX-License-Identifier: AGPL-3.0-only
- +
@@ -58,8 +58,7 @@ const parser = new Parser(); let aiscript: Interpreter; const code = ref(''); const logs = ref([]); -const root = ref(); -const components = ref[]>([]); +const components = ref>>(new Map()); const uiKey = ref(0); const saved = miLocalStorage.getItem('scratchpad'); @@ -74,7 +73,7 @@ watch(code, () => { async function run() { if (aiscript) aiscript.abort(); root.value = undefined; - components.value = []; + components.value.clear(); uiKey.value++; logs.value = []; aiscript = new Interpreter(({ @@ -82,9 +81,7 @@ async function run() { storageKey: 'widget', token: $i?.token, }), - ...registerAsUiLib(components.value, (_root) => { - root.value = _root.value; - }), + ...registerAsUiLib(components.value), }), { in: aiScriptReadline, out: (value) => { From 53fdeac607ee6c9a861629f523eb1672d58fdc1e Mon Sep 17 00:00:00 2001 From: FineArchs <133759614+FineArchs@users.noreply.github.com> Date: Thu, 22 Aug 2024 06:56:37 +0900 Subject: [PATCH 7/9] Update flash.vue --- packages/frontend/src/pages/flash/flash.vue | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/frontend/src/pages/flash/flash.vue b/packages/frontend/src/pages/flash/flash.vue index a16407e9f54..b7cdbe23ba1 100644 --- a/packages/frontend/src/pages/flash/flash.vue +++ b/packages/frontend/src/pages/flash/flash.vue @@ -189,6 +189,7 @@ function start() { async function run() { if (aiscript.value) aiscript.value.abort(); if (!flash.value) return; + components.value.clear(); aiscript.value = new Interpreter({ ...createAiScriptEnv({ From b9fa93d1c4e415b036f23d8affa637e2ab39d388 Mon Sep 17 00:00:00 2001 From: FineArchs <133759614+FineArchs@users.noreply.github.com> Date: Thu, 22 Aug 2024 06:59:49 +0900 Subject: [PATCH 8/9] Update flash.vue --- packages/frontend/src/pages/flash/flash.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/frontend/src/pages/flash/flash.vue b/packages/frontend/src/pages/flash/flash.vue index b7cdbe23ba1..96c4446938e 100644 --- a/packages/frontend/src/pages/flash/flash.vue +++ b/packages/frontend/src/pages/flash/flash.vue @@ -12,7 +12,7 @@ SPDX-License-Identifier: AGPL-3.0-only
- +
From 5605b28d5f4b852edfa6e471af4016790071056f Mon Sep 17 00:00:00 2001 From: FineArchs <133759614+FineArchs@users.noreply.github.com> Date: Thu, 22 Aug 2024 07:03:43 +0900 Subject: [PATCH 9/9] Update WidgetAiscriptApp.vue --- packages/frontend/src/widgets/WidgetAiscriptApp.vue | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/packages/frontend/src/widgets/WidgetAiscriptApp.vue b/packages/frontend/src/widgets/WidgetAiscriptApp.vue index fa79e4aeb73..3079d7bcf5c 100644 --- a/packages/frontend/src/widgets/WidgetAiscriptApp.vue +++ b/packages/frontend/src/widgets/WidgetAiscriptApp.vue @@ -7,7 +7,7 @@ SPDX-License-Identifier: AGPL-3.0-only
- +
@@ -51,18 +51,16 @@ const { widgetProps, configure } = useWidgetPropsManager(name, const parser = new Parser(); -const root = ref(); -const components = ref[]>([]); +const components = ref>>(new Map()); async function run() { + components.value.clear(); const aiscript = new Interpreter({ ...createAiScriptEnv({ storageKey: 'widget', token: $i?.token, }), - ...registerAsUiLib(components.value, (_root) => { - root.value = _root.value; - }), + ...registerAsUiLib(components.value), }, { in: aiScriptReadline, out: (value) => {