mirror of
https://activitypub.software/TransFem-org/Sharkey
synced 2024-12-22 08:20:10 +00:00
update AiScript to 0.12.0
This commit is contained in:
parent
db1ca28de3
commit
e44f83fb9c
15 changed files with 75 additions and 157 deletions
|
@ -20,6 +20,9 @@ You should also include the user name that made the change.
|
||||||
- You may have to `yarn run clean-all`, `sudo corepack enable` and `yarn set version berry` before running `yarn install` if you're still on yarn classic
|
- You may have to `yarn run clean-all`, `sudo corepack enable` and `yarn set version berry` before running `yarn install` if you're still on yarn classic
|
||||||
- 新たに動的なPagesを作ることはできなくなりました
|
- 新たに動的なPagesを作ることはできなくなりました
|
||||||
- 代わりに今後AiScriptを用いてより柔軟に動的なコンテンツを作成できるMisskey Play機能の実装を予定しています。
|
- 代わりに今後AiScriptを用いてより柔軟に動的なコンテンツを作成できるMisskey Play機能の実装を予定しています。
|
||||||
|
- AiScriptが0.12.0にアップデートされました
|
||||||
|
- 0.12.0の変更点についてはこちら https://github.com/syuilo/aiscript/blob/master/CHANGELOG.md#0120
|
||||||
|
- 0.12.0未満のプラグインは読み込むことはできません
|
||||||
- iOS15以下のデバイスはサポートされなくなりました
|
- iOS15以下のデバイスはサポートされなくなりました
|
||||||
- API: カスタム絵文字エンティティに`url`プロパティが含まれなくなりました
|
- API: カスタム絵文字エンティティに`url`プロパティが含まれなくなりました
|
||||||
- 絵文字画像を表示するには、`<instance host>/emoji/<emoji name>.webp`にリクエストすると画像が返ります。
|
- 絵文字画像を表示するには、`<instance host>/emoji/<emoji name>.webp`にリクエストすると画像が返ります。
|
||||||
|
|
|
@ -37,7 +37,6 @@
|
||||||
"@nestjs/testing": "9.2.1",
|
"@nestjs/testing": "9.2.1",
|
||||||
"@peertube/http-signature": "1.7.0",
|
"@peertube/http-signature": "1.7.0",
|
||||||
"@sinonjs/fake-timers": "10.0.2",
|
"@sinonjs/fake-timers": "10.0.2",
|
||||||
"@syuilo/aiscript": "0.11.1",
|
|
||||||
"accepts": "^1.3.8",
|
"accepts": "^1.3.8",
|
||||||
"ajv": "8.11.2",
|
"ajv": "8.11.2",
|
||||||
"archiver": "5.3.1",
|
"archiver": "5.3.1",
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
"@rollup/plugin-alias": "4.0.2",
|
"@rollup/plugin-alias": "4.0.2",
|
||||||
"@rollup/plugin-json": "6.0.0",
|
"@rollup/plugin-json": "6.0.0",
|
||||||
"@rollup/pluginutils": "5.0.2",
|
"@rollup/pluginutils": "5.0.2",
|
||||||
"@syuilo/aiscript": "0.11.1",
|
"@syuilo/aiscript": "0.12.0",
|
||||||
"@tabler/icons": "^1.118.0",
|
"@tabler/icons": "^1.118.0",
|
||||||
"@vitejs/plugin-vue": "4.0.0",
|
"@vitejs/plugin-vue": "4.0.0",
|
||||||
"@vue/compiler-sfc": "3.2.45",
|
"@vue/compiler-sfc": "3.2.45",
|
||||||
|
|
|
@ -6,7 +6,6 @@
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { defineComponent, onMounted, nextTick, onUnmounted, PropType } from 'vue';
|
import { defineComponent, onMounted, nextTick, onUnmounted, PropType } from 'vue';
|
||||||
import { parse } from '@syuilo/aiscript';
|
|
||||||
import XBlock from './page.block.vue';
|
import XBlock from './page.block.vue';
|
||||||
import { Hpml } from '@/scripts/hpml/evaluator';
|
import { Hpml } from '@/scripts/hpml/evaluator';
|
||||||
import { url } from '@/config';
|
import { url } from '@/config';
|
||||||
|
@ -28,38 +27,11 @@ export default defineComponent({
|
||||||
randomSeed: Math.random(),
|
randomSeed: Math.random(),
|
||||||
visitor: $i,
|
visitor: $i,
|
||||||
url: url,
|
url: url,
|
||||||
enableAiScript: !defaultStore.state.disablePagesScript,
|
|
||||||
});
|
});
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
nextTick(() => {
|
nextTick(() => {
|
||||||
if (props.page.script && hpml.aiscript) {
|
|
||||||
let ast;
|
|
||||||
try {
|
|
||||||
ast = parse(props.page.script);
|
|
||||||
} catch (err) {
|
|
||||||
console.error(err);
|
|
||||||
/*os.alert({
|
|
||||||
type: 'error',
|
|
||||||
text: 'Syntax error :('
|
|
||||||
});*/
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
hpml.aiscript.exec(ast).then(() => {
|
|
||||||
hpml.eval();
|
hpml.eval();
|
||||||
}).catch(err => {
|
|
||||||
console.error(err);
|
|
||||||
/*os.alert({
|
|
||||||
type: 'error',
|
|
||||||
text: err
|
|
||||||
});*/
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
hpml.eval();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
onUnmounted(() => {
|
|
||||||
if (hpml.aiscript) hpml.aiscript.abort();
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -27,7 +27,7 @@ import 'prismjs/components/prism-javascript';
|
||||||
import 'prismjs/themes/prism-okaidia.css';
|
import 'prismjs/themes/prism-okaidia.css';
|
||||||
import { PrismEditor } from 'vue-prism-editor';
|
import { PrismEditor } from 'vue-prism-editor';
|
||||||
import 'vue-prism-editor/dist/prismeditor.min.css';
|
import 'vue-prism-editor/dist/prismeditor.min.css';
|
||||||
import { AiScript, parse, utils } from '@syuilo/aiscript';
|
import { Interpreter, Parser, utils } from '@syuilo/aiscript';
|
||||||
import MkContainer from '@/components/MkContainer.vue';
|
import MkContainer from '@/components/MkContainer.vue';
|
||||||
import MkButton from '@/components/MkButton.vue';
|
import MkButton from '@/components/MkButton.vue';
|
||||||
import { createAiScriptEnv } from '@/scripts/aiscript/api';
|
import { createAiScriptEnv } from '@/scripts/aiscript/api';
|
||||||
|
@ -36,6 +36,8 @@ import { $i } from '@/account';
|
||||||
import { i18n } from '@/i18n';
|
import { i18n } from '@/i18n';
|
||||||
import { definePageMetadata } from '@/scripts/page-metadata';
|
import { definePageMetadata } from '@/scripts/page-metadata';
|
||||||
|
|
||||||
|
const parser = new Parser();
|
||||||
|
|
||||||
const code = ref('');
|
const code = ref('');
|
||||||
const logs = ref<any[]>([]);
|
const logs = ref<any[]>([]);
|
||||||
|
|
||||||
|
@ -50,7 +52,7 @@ watch(code, () => {
|
||||||
|
|
||||||
async function run() {
|
async function run() {
|
||||||
logs.value = [];
|
logs.value = [];
|
||||||
const aiscript = new AiScript(createAiScriptEnv({
|
const aiscript = new Interpreter(createAiScriptEnv({
|
||||||
storageKey: 'scratchpad',
|
storageKey: 'scratchpad',
|
||||||
token: $i?.token,
|
token: $i?.token,
|
||||||
}), {
|
}), {
|
||||||
|
@ -84,7 +86,7 @@ async function run() {
|
||||||
|
|
||||||
let ast;
|
let ast;
|
||||||
try {
|
try {
|
||||||
ast = parse(code.value);
|
ast = parser.parse(code.value);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
os.alert({
|
os.alert({
|
||||||
type: 'error',
|
type: 'error',
|
||||||
|
|
|
@ -27,7 +27,6 @@
|
||||||
<FormSwitch v-model="imageNewTab" class="_formBlock">{{ i18n.ts.openImageInNewTab }}</FormSwitch>
|
<FormSwitch v-model="imageNewTab" class="_formBlock">{{ i18n.ts.openImageInNewTab }}</FormSwitch>
|
||||||
<FormSwitch v-model="enableInfiniteScroll" class="_formBlock">{{ i18n.ts.enableInfiniteScroll }}</FormSwitch>
|
<FormSwitch v-model="enableInfiniteScroll" class="_formBlock">{{ i18n.ts.enableInfiniteScroll }}</FormSwitch>
|
||||||
<FormSwitch v-model="useReactionPickerForContextMenu" class="_formBlock">{{ i18n.ts.useReactionPickerForContextMenu }}</FormSwitch>
|
<FormSwitch v-model="useReactionPickerForContextMenu" class="_formBlock">{{ i18n.ts.useReactionPickerForContextMenu }}</FormSwitch>
|
||||||
<FormSwitch v-model="disablePagesScript" class="_formBlock">{{ i18n.ts.disablePagesScript }}</FormSwitch>
|
|
||||||
|
|
||||||
<FormSelect v-model="serverDisconnectedBehavior" class="_formBlock">
|
<FormSelect v-model="serverDisconnectedBehavior" class="_formBlock">
|
||||||
<template #label>{{ i18n.ts.whenServerDisconnected }}</template>
|
<template #label>{{ i18n.ts.whenServerDisconnected }}</template>
|
||||||
|
@ -141,7 +140,6 @@ const disableShowingAnimatedImages = computed(defaultStore.makeGetterSetter('dis
|
||||||
const loadRawImages = computed(defaultStore.makeGetterSetter('loadRawImages'));
|
const loadRawImages = computed(defaultStore.makeGetterSetter('loadRawImages'));
|
||||||
const imageNewTab = computed(defaultStore.makeGetterSetter('imageNewTab'));
|
const imageNewTab = computed(defaultStore.makeGetterSetter('imageNewTab'));
|
||||||
const nsfw = computed(defaultStore.makeGetterSetter('nsfw'));
|
const nsfw = computed(defaultStore.makeGetterSetter('nsfw'));
|
||||||
const disablePagesScript = computed(defaultStore.makeGetterSetter('disablePagesScript'));
|
|
||||||
const showFixedPostForm = computed(defaultStore.makeGetterSetter('showFixedPostForm'));
|
const showFixedPostForm = computed(defaultStore.makeGetterSetter('showFixedPostForm'));
|
||||||
const numberOfPageCache = computed(defaultStore.makeGetterSetter('numberOfPageCache'));
|
const numberOfPageCache = computed(defaultStore.makeGetterSetter('numberOfPageCache'));
|
||||||
const instanceTicker = computed(defaultStore.makeGetterSetter('instanceTicker'));
|
const instanceTicker = computed(defaultStore.makeGetterSetter('instanceTicker'));
|
||||||
|
|
|
@ -14,8 +14,7 @@
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { defineAsyncComponent, nextTick, ref } from 'vue';
|
import { defineAsyncComponent, nextTick, ref } from 'vue';
|
||||||
import { AiScript, parse } from '@syuilo/aiscript';
|
import { Interpreter, Parser, utils } from '@syuilo/aiscript';
|
||||||
import { serialize } from '@syuilo/aiscript/built/serializer';
|
|
||||||
import { v4 as uuid } from 'uuid';
|
import { v4 as uuid } from 'uuid';
|
||||||
import FormTextarea from '@/components/form/textarea.vue';
|
import FormTextarea from '@/components/form/textarea.vue';
|
||||||
import FormButton from '@/components/MkButton.vue';
|
import FormButton from '@/components/MkButton.vue';
|
||||||
|
@ -26,23 +25,41 @@ import { unisonReload } from '@/scripts/unison-reload';
|
||||||
import { i18n } from '@/i18n';
|
import { i18n } from '@/i18n';
|
||||||
import { definePageMetadata } from '@/scripts/page-metadata';
|
import { definePageMetadata } from '@/scripts/page-metadata';
|
||||||
|
|
||||||
|
const parser = new Parser();
|
||||||
const code = ref(null);
|
const code = ref(null);
|
||||||
|
|
||||||
function installPlugin({ id, meta, ast, token }) {
|
function installPlugin({ id, meta, src, token }) {
|
||||||
ColdDeviceStorage.set('plugins', ColdDeviceStorage.get('plugins').concat({
|
ColdDeviceStorage.set('plugins', ColdDeviceStorage.get('plugins').concat({
|
||||||
...meta,
|
...meta,
|
||||||
id,
|
id,
|
||||||
active: true,
|
active: true,
|
||||||
configData: {},
|
configData: {},
|
||||||
token: token,
|
token: token,
|
||||||
ast: ast,
|
src: src,
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
async function install() {
|
async function install() {
|
||||||
|
if (code.value == null) return;
|
||||||
|
|
||||||
|
const lv = utils.getLangVersion(code.value);
|
||||||
|
if (lv == null) {
|
||||||
|
os.alert({
|
||||||
|
type: 'error',
|
||||||
|
text: 'No language version annotation found :(',
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
} else if (lv !== '0.12.0') {
|
||||||
|
os.alert({
|
||||||
|
type: 'error',
|
||||||
|
text: `aiscript version '${lv}' is not supported :(`,
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
let ast;
|
let ast;
|
||||||
try {
|
try {
|
||||||
ast = parse(code.value);
|
ast = parser.parse(code.value);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
os.alert({
|
os.alert({
|
||||||
type: 'error',
|
type: 'error',
|
||||||
|
@ -51,7 +68,7 @@ async function install() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const meta = AiScript.collectMetadata(ast);
|
const meta = Interpreter.collectMetadata(ast);
|
||||||
if (meta == null) {
|
if (meta == null) {
|
||||||
os.alert({
|
os.alert({
|
||||||
type: 'error',
|
type: 'error',
|
||||||
|
@ -103,7 +120,7 @@ async function install() {
|
||||||
name, version, author, description, permissions, config,
|
name, version, author, description, permissions, config,
|
||||||
},
|
},
|
||||||
token,
|
token,
|
||||||
ast: serialize(ast),
|
src: code.value,
|
||||||
});
|
});
|
||||||
|
|
||||||
os.success();
|
os.success();
|
||||||
|
|
|
@ -62,7 +62,6 @@ const defaultStoreSaveKeys: (keyof typeof defaultStore['state'])[] = [
|
||||||
'loadRawImages',
|
'loadRawImages',
|
||||||
'imageNewTab',
|
'imageNewTab',
|
||||||
'disableShowingAnimatedImages',
|
'disableShowingAnimatedImages',
|
||||||
'disablePagesScript',
|
|
||||||
'emojiStyle',
|
'emojiStyle',
|
||||||
'disableDrawer',
|
'disableDrawer',
|
||||||
'useBlurEffectForModal',
|
'useBlurEffectForModal',
|
||||||
|
|
|
@ -1,16 +1,17 @@
|
||||||
import { AiScript, utils, values } from '@syuilo/aiscript';
|
import { Interpreter, Parser, utils, values } from '@syuilo/aiscript';
|
||||||
import { deserialize } from '@syuilo/aiscript/built/serializer';
|
|
||||||
import { jsToVal } from '@syuilo/aiscript/built/interpreter/util';
|
|
||||||
import { createAiScriptEnv } from '@/scripts/aiscript/api';
|
import { createAiScriptEnv } from '@/scripts/aiscript/api';
|
||||||
import { inputText } from '@/os';
|
import { inputText } from '@/os';
|
||||||
import { noteActions, notePostInterruptors, noteViewInterruptors, postFormActions, userActions } from '@/store';
|
import { noteActions, notePostInterruptors, noteViewInterruptors, postFormActions, userActions } from '@/store';
|
||||||
|
|
||||||
const pluginContexts = new Map<string, AiScript>();
|
const parser = new Parser();
|
||||||
|
const pluginContexts = new Map<string, Interpreter>();
|
||||||
|
|
||||||
export function install(plugin) {
|
export function install(plugin) {
|
||||||
|
// 後方互換性のため
|
||||||
|
if (plugin.src == null) return;
|
||||||
console.info('Plugin installed:', plugin.name, 'v' + plugin.version);
|
console.info('Plugin installed:', plugin.name, 'v' + plugin.version);
|
||||||
|
|
||||||
const aiscript = new AiScript(createPluginEnv({
|
const aiscript = new Interpreter(createPluginEnv({
|
||||||
plugin: plugin,
|
plugin: plugin,
|
||||||
storageKey: 'plugins:' + plugin.id,
|
storageKey: 'plugins:' + plugin.id,
|
||||||
}), {
|
}), {
|
||||||
|
@ -32,13 +33,13 @@ export function install(plugin) {
|
||||||
|
|
||||||
initPlugin({ plugin, aiscript });
|
initPlugin({ plugin, aiscript });
|
||||||
|
|
||||||
aiscript.exec(deserialize(plugin.ast));
|
aiscript.exec(parser.parse(plugin.src));
|
||||||
}
|
}
|
||||||
|
|
||||||
function createPluginEnv(opts) {
|
function createPluginEnv(opts) {
|
||||||
const config = new Map();
|
const config = new Map();
|
||||||
for (const [k, v] of Object.entries(opts.plugin.config || {})) {
|
for (const [k, v] of Object.entries(opts.plugin.config || {})) {
|
||||||
config.set(k, jsToVal(typeof opts.plugin.configData[k] !== 'undefined' ? opts.plugin.configData[k] : v.default));
|
config.set(k, utils.jsToVal(typeof opts.plugin.configData[k] !== 'undefined' ? opts.plugin.configData[k] : v.default));
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|
|
@ -1,13 +1,11 @@
|
||||||
import autobind from 'autobind-decorator';
|
import autobind from 'autobind-decorator';
|
||||||
import { PageVar, envVarsDef, Fn, HpmlScope, HpmlError } from '.';
|
import { markRaw, ref, Ref, unref } from 'vue';
|
||||||
import { version } from '@/config';
|
|
||||||
import { AiScript, utils, values } from '@syuilo/aiscript';
|
|
||||||
import { createAiScriptEnv } from '../aiscript/api';
|
|
||||||
import { collectPageVars } from '../collect-page-vars';
|
import { collectPageVars } from '../collect-page-vars';
|
||||||
import { initHpmlLib, initAiLib } from './lib';
|
import { initHpmlLib, initAiLib } from './lib';
|
||||||
import * as os from '@/os';
|
|
||||||
import { markRaw, ref, Ref, unref } from 'vue';
|
|
||||||
import { Expr, isLiteralValue, Variable } from './expr';
|
import { Expr, isLiteralValue, Variable } from './expr';
|
||||||
|
import { PageVar, envVarsDef, Fn, HpmlScope, HpmlError } from '.';
|
||||||
|
import { version } from '@/config';
|
||||||
|
import * as os from '@/os';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Hpml evaluator
|
* Hpml evaluator
|
||||||
|
@ -16,7 +14,6 @@ export class Hpml {
|
||||||
private variables: Variable[];
|
private variables: Variable[];
|
||||||
private pageVars: PageVar[];
|
private pageVars: PageVar[];
|
||||||
private envVars: Record<keyof typeof envVarsDef, any>;
|
private envVars: Record<keyof typeof envVarsDef, any>;
|
||||||
public aiscript?: AiScript;
|
|
||||||
public pageVarUpdatedCallback?: values.VFn;
|
public pageVarUpdatedCallback?: values.VFn;
|
||||||
public canvases: Record<string, HTMLCanvasElement> = {};
|
public canvases: Record<string, HTMLCanvasElement> = {};
|
||||||
public vars: Ref<Record<string, any>> = ref({});
|
public vars: Ref<Record<string, any>> = ref({});
|
||||||
|
@ -24,7 +21,6 @@ export class Hpml {
|
||||||
|
|
||||||
private opts: {
|
private opts: {
|
||||||
randomSeed: string; visitor?: any; url?: string;
|
randomSeed: string; visitor?: any; url?: string;
|
||||||
enableAiScript: boolean;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
constructor(page: Hpml['page'], opts: Hpml['opts']) {
|
constructor(page: Hpml['page'], opts: Hpml['opts']) {
|
||||||
|
@ -33,31 +29,6 @@ export class Hpml {
|
||||||
this.pageVars = collectPageVars(this.page.content);
|
this.pageVars = collectPageVars(this.page.content);
|
||||||
this.opts = opts;
|
this.opts = opts;
|
||||||
|
|
||||||
if (this.opts.enableAiScript) {
|
|
||||||
this.aiscript = markRaw(new AiScript({ ...createAiScriptEnv({
|
|
||||||
storageKey: 'pages:' + this.page.id,
|
|
||||||
}), ...initAiLib(this) }, {
|
|
||||||
in: (q) => {
|
|
||||||
return new Promise(ok => {
|
|
||||||
os.inputText({
|
|
||||||
title: q,
|
|
||||||
}).then(({ canceled, result: a }) => {
|
|
||||||
ok(a);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
},
|
|
||||||
out: (value) => {
|
|
||||||
console.log(value);
|
|
||||||
},
|
|
||||||
log: (type, params) => {
|
|
||||||
},
|
|
||||||
}));
|
|
||||||
|
|
||||||
this.aiscript.scope.opts.onUpdated = (name, value) => {
|
|
||||||
this.eval();
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
const date = new Date();
|
const date = new Date();
|
||||||
|
|
||||||
this.envVars = {
|
this.envVars = {
|
||||||
|
@ -74,7 +45,7 @@ export class Hpml {
|
||||||
IS_CAT: opts.visitor ? opts.visitor.isCat : false,
|
IS_CAT: opts.visitor ? opts.visitor.isCat : false,
|
||||||
SEED: opts.randomSeed ? opts.randomSeed : '',
|
SEED: opts.randomSeed ? opts.randomSeed : '',
|
||||||
YMD: `${date.getFullYear()}/${date.getMonth() + 1}/${date.getDate()}`,
|
YMD: `${date.getFullYear()}/${date.getMonth() + 1}/${date.getDate()}`,
|
||||||
AISCRIPT_DISABLED: !this.opts.enableAiScript,
|
AISCRIPT_DISABLED: true,
|
||||||
NULL: null,
|
NULL: null,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -99,13 +70,6 @@ export class Hpml {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@autobind
|
|
||||||
public callAiScript(fn: string) {
|
|
||||||
try {
|
|
||||||
if (this.aiscript) this.aiscript.execFn(this.aiscript.scope.get(fn), []);
|
|
||||||
} catch (err) {}
|
|
||||||
}
|
|
||||||
|
|
||||||
@autobind
|
@autobind
|
||||||
public registerCanvas(id: string, canvas: any) {
|
public registerCanvas(id: string, canvas: any) {
|
||||||
this.canvases[id] = canvas;
|
this.canvases[id] = canvas;
|
||||||
|
@ -116,9 +80,6 @@ export class Hpml {
|
||||||
const pageVar = this.pageVars.find(v => v.name === name);
|
const pageVar = this.pageVars.find(v => v.name === name);
|
||||||
if (pageVar !== undefined) {
|
if (pageVar !== undefined) {
|
||||||
pageVar.value = value;
|
pageVar.value = value;
|
||||||
if (this.pageVarUpdatedCallback) {
|
|
||||||
if (this.aiscript) this.aiscript.execFn(this.pageVarUpdatedCallback, [values.STR(name), utils.jsToVal(value)]);
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
throw new HpmlError(`No such page var '${name}'`);
|
throw new HpmlError(`No such page var '${name}'`);
|
||||||
}
|
}
|
||||||
|
@ -180,18 +141,6 @@ export class Hpml {
|
||||||
return scope.getState(expr.value);
|
return scope.getState(expr.value);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (expr.type === 'aiScriptVar') {
|
|
||||||
if (this.aiscript) {
|
|
||||||
try {
|
|
||||||
return utils.valToJs(this.aiscript.scope.get(expr.value));
|
|
||||||
} catch (err) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Define user function
|
// Define user function
|
||||||
if (expr.type === 'fn') {
|
if (expr.type === 'fn') {
|
||||||
return {
|
return {
|
||||||
|
|
|
@ -1,9 +1,8 @@
|
||||||
import tinycolor from 'tinycolor2';
|
import tinycolor from 'tinycolor2';
|
||||||
import { Hpml } from './evaluator';
|
|
||||||
import { values, utils } from '@syuilo/aiscript';
|
|
||||||
import { Fn, HpmlScope } from '.';
|
|
||||||
import { Expr } from './expr';
|
|
||||||
import seedrandom from 'seedrandom';
|
import seedrandom from 'seedrandom';
|
||||||
|
import { Hpml } from './evaluator';
|
||||||
|
import { Expr } from './expr';
|
||||||
|
import { Fn, HpmlScope } from '.';
|
||||||
|
|
||||||
/* TODO: https://www.chartjs.org/docs/latest/configuration/canvas-background.html#color
|
/* TODO: https://www.chartjs.org/docs/latest/configuration/canvas-background.html#color
|
||||||
// https://stackoverflow.com/questions/38493564/chart-area-background-color-chartjs
|
// https://stackoverflow.com/questions/38493564/chart-area-background-color-chartjs
|
||||||
|
|
|
@ -170,10 +170,6 @@ export const defaultStore = markRaw(new Storage('base', {
|
||||||
where: 'device',
|
where: 'device',
|
||||||
default: false,
|
default: false,
|
||||||
},
|
},
|
||||||
disablePagesScript: {
|
|
||||||
where: 'device',
|
|
||||||
default: false,
|
|
||||||
},
|
|
||||||
emojiStyle: {
|
emojiStyle: {
|
||||||
where: 'device',
|
where: 'device',
|
||||||
default: 'twemoji', // twemoji / fluentEmoji / native
|
default: 'twemoji', // twemoji / fluentEmoji / native
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { onMounted, onUnmounted, ref, watch } from 'vue';
|
import { onMounted, onUnmounted, ref, watch } from 'vue';
|
||||||
import { AiScript, parse, utils } from '@syuilo/aiscript';
|
import { Interpreter, Parser, utils } from '@syuilo/aiscript';
|
||||||
import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget';
|
import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget';
|
||||||
import { GetFormResultType } from '@/scripts/form';
|
import { GetFormResultType } from '@/scripts/form';
|
||||||
import * as os from '@/os';
|
import * as os from '@/os';
|
||||||
|
@ -52,6 +52,8 @@ const { widgetProps, configure } = useWidgetPropsManager(name,
|
||||||
emit,
|
emit,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const parser = new Parser();
|
||||||
|
|
||||||
const logs = ref<{
|
const logs = ref<{
|
||||||
id: string;
|
id: string;
|
||||||
text: string;
|
text: string;
|
||||||
|
@ -60,7 +62,7 @@ const logs = ref<{
|
||||||
|
|
||||||
const run = async () => {
|
const run = async () => {
|
||||||
logs.value = [];
|
logs.value = [];
|
||||||
const aiscript = new AiScript(createAiScriptEnv({
|
const aiscript = new Interpreter(createAiScriptEnv({
|
||||||
storageKey: 'widget',
|
storageKey: 'widget',
|
||||||
token: $i?.token,
|
token: $i?.token,
|
||||||
}), {
|
}), {
|
||||||
|
@ -94,7 +96,7 @@ const run = async () => {
|
||||||
|
|
||||||
let ast;
|
let ast;
|
||||||
try {
|
try {
|
||||||
ast = parse(widgetProps.script);
|
ast = parser.parse(widgetProps.script);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
os.alert({
|
os.alert({
|
||||||
type: 'error',
|
type: 'error',
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { onMounted, onUnmounted, ref, watch } from 'vue';
|
import { onMounted, onUnmounted, ref, watch } from 'vue';
|
||||||
import { AiScript, parse, utils } from '@syuilo/aiscript';
|
import { Interpreter, Parser, utils } from '@syuilo/aiscript';
|
||||||
import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget';
|
import { useWidgetPropsManager, Widget, WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget';
|
||||||
import { GetFormResultType } from '@/scripts/form';
|
import { GetFormResultType } from '@/scripts/form';
|
||||||
import * as os from '@/os';
|
import * as os from '@/os';
|
||||||
|
@ -48,8 +48,10 @@ const { widgetProps, configure } = useWidgetPropsManager(name,
|
||||||
emit,
|
emit,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const parser = new Parser();
|
||||||
|
|
||||||
const run = async () => {
|
const run = async () => {
|
||||||
const aiscript = new AiScript(createAiScriptEnv({
|
const aiscript = new Interpreter(createAiScriptEnv({
|
||||||
storageKey: 'widget',
|
storageKey: 'widget',
|
||||||
token: $i?.token,
|
token: $i?.token,
|
||||||
}), {
|
}), {
|
||||||
|
@ -72,7 +74,7 @@ const run = async () => {
|
||||||
|
|
||||||
let ast;
|
let ast;
|
||||||
try {
|
try {
|
||||||
ast = parse(widgetProps.script);
|
ast = parser.parse(widgetProps.script);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
os.alert({
|
os.alert({
|
||||||
type: 'error',
|
type: 'error',
|
||||||
|
|
51
yarn.lock
51
yarn.lock
|
@ -1973,16 +1973,15 @@ __metadata:
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@syuilo/aiscript@npm:0.11.1":
|
"@syuilo/aiscript@npm:0.12.0":
|
||||||
version: 0.11.1
|
version: 0.12.0
|
||||||
resolution: "@syuilo/aiscript@npm:0.11.1"
|
resolution: "@syuilo/aiscript@npm:0.12.0"
|
||||||
dependencies:
|
dependencies:
|
||||||
autobind-decorator: 2.4.0
|
autobind-decorator: 2.4.0
|
||||||
chalk: 4.0.0
|
|
||||||
seedrandom: 3.0.5
|
seedrandom: 3.0.5
|
||||||
stringz: 2.1.0
|
stringz: 2.1.0
|
||||||
uuid: 7.0.3
|
uuid: 8.3.2
|
||||||
checksum: c5e15045abdf1393f1da9c58f25dd301bd2b6c5808f2ca58334e5d488c227b189ec5200ec86326ed381380a9ff76dbc05fd30882f562383be76b83dc4fabb11b
|
checksum: 82b52a6c602a8c3090b9457a0e9de99898b03cd8f054855b2f57439534257ef2780013a53eaeeef68c9893d96d3ec02fc6d0ede56396c2bcf054cf43b2297b67
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
@ -4136,7 +4135,6 @@ __metadata:
|
||||||
"@sinonjs/fake-timers": 10.0.2
|
"@sinonjs/fake-timers": 10.0.2
|
||||||
"@swc/core": 1.3.24
|
"@swc/core": 1.3.24
|
||||||
"@swc/jest": 0.2.24
|
"@swc/jest": 0.2.24
|
||||||
"@syuilo/aiscript": 0.11.1
|
|
||||||
"@tensorflow/tfjs": ^4.1.0
|
"@tensorflow/tfjs": ^4.1.0
|
||||||
"@tensorflow/tfjs-node": 4.1.0
|
"@tensorflow/tfjs-node": 4.1.0
|
||||||
"@types/accepts": 1.3.5
|
"@types/accepts": 1.3.5
|
||||||
|
@ -4869,16 +4867,6 @@ __metadata:
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"chalk@npm:4.0.0":
|
|
||||||
version: 4.0.0
|
|
||||||
resolution: "chalk@npm:4.0.0"
|
|
||||||
dependencies:
|
|
||||||
ansi-styles: ^4.1.0
|
|
||||||
supports-color: ^7.1.0
|
|
||||||
checksum: a9580afd4af8ffa8add8edb565d1b3f77efb880c5d887d3bb72a948d1bfb2bc764db2ceb6d62a60103aa384f3da71eb1969c7f68e886055e0a3438550e809cde
|
|
||||||
languageName: node
|
|
||||||
linkType: hard
|
|
||||||
|
|
||||||
"chalk@npm:5.2.0":
|
"chalk@npm:5.2.0":
|
||||||
version: 5.2.0
|
version: 5.2.0
|
||||||
resolution: "chalk@npm:5.2.0"
|
resolution: "chalk@npm:5.2.0"
|
||||||
|
@ -8038,7 +8026,7 @@ __metadata:
|
||||||
"@rollup/plugin-alias": 4.0.2
|
"@rollup/plugin-alias": 4.0.2
|
||||||
"@rollup/plugin-json": 6.0.0
|
"@rollup/plugin-json": 6.0.0
|
||||||
"@rollup/pluginutils": 5.0.2
|
"@rollup/pluginutils": 5.0.2
|
||||||
"@syuilo/aiscript": 0.11.1
|
"@syuilo/aiscript": 0.12.0
|
||||||
"@tabler/icons": ^1.118.0
|
"@tabler/icons": ^1.118.0
|
||||||
"@types/escape-regexp": 0.0.1
|
"@types/escape-regexp": 0.0.1
|
||||||
"@types/glob": 8.0.0
|
"@types/glob": 8.0.0
|
||||||
|
@ -16915,15 +16903,6 @@ __metadata:
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"uuid@npm:7.0.3":
|
|
||||||
version: 7.0.3
|
|
||||||
resolution: "uuid@npm:7.0.3"
|
|
||||||
bin:
|
|
||||||
uuid: dist/bin/uuid
|
|
||||||
checksum: f5b7b5cc28accac68d5c083fd51cca64896639ebd4cca88c6cfb363801aaa83aa439c86dfc8446ea250a7a98d17afd2ad9e88d9d4958c79a412eccb93bae29de
|
|
||||||
languageName: node
|
|
||||||
linkType: hard
|
|
||||||
|
|
||||||
"uuid@npm:8.0.0":
|
"uuid@npm:8.0.0":
|
||||||
version: 8.0.0
|
version: 8.0.0
|
||||||
resolution: "uuid@npm:8.0.0"
|
resolution: "uuid@npm:8.0.0"
|
||||||
|
@ -16933,6 +16912,15 @@ __metadata:
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"uuid@npm:8.3.2, uuid@npm:^8.3.0, uuid@npm:^8.3.2":
|
||||||
|
version: 8.3.2
|
||||||
|
resolution: "uuid@npm:8.3.2"
|
||||||
|
bin:
|
||||||
|
uuid: dist/bin/uuid
|
||||||
|
checksum: 5575a8a75c13120e2f10e6ddc801b2c7ed7d8f3c8ac22c7ed0c7b2ba6383ec0abda88c905085d630e251719e0777045ae3236f04c812184b7c765f63a70e58df
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"uuid@npm:9.0.0":
|
"uuid@npm:9.0.0":
|
||||||
version: 9.0.0
|
version: 9.0.0
|
||||||
resolution: "uuid@npm:9.0.0"
|
resolution: "uuid@npm:9.0.0"
|
||||||
|
@ -16951,15 +16939,6 @@ __metadata:
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"uuid@npm:^8.3.0, uuid@npm:^8.3.2":
|
|
||||||
version: 8.3.2
|
|
||||||
resolution: "uuid@npm:8.3.2"
|
|
||||||
bin:
|
|
||||||
uuid: dist/bin/uuid
|
|
||||||
checksum: 5575a8a75c13120e2f10e6ddc801b2c7ed7d8f3c8ac22c7ed0c7b2ba6383ec0abda88c905085d630e251719e0777045ae3236f04c812184b7c765f63a70e58df
|
|
||||||
languageName: node
|
|
||||||
linkType: hard
|
|
||||||
|
|
||||||
"v8-to-istanbul@npm:^9.0.1":
|
"v8-to-istanbul@npm:^9.0.1":
|
||||||
version: 9.0.1
|
version: 9.0.1
|
||||||
resolution: "v8-to-istanbul@npm:9.0.1"
|
resolution: "v8-to-istanbul@npm:9.0.1"
|
||||||
|
|
Loading…
Reference in a new issue