summaryrefslogtreecommitdiff
path: root/src/client
diff options
context:
space:
mode:
authorsyuilo <syuilotan@yahoo.co.jp>2020-04-12 19:38:19 +0900
committersyuilo <syuilotan@yahoo.co.jp>2020-04-12 19:38:19 +0900
commitf07047d1e89586a3bcaf36d6d2667e89e1a49d1e (patch)
tree03986214247ed3750e780ac8568e4d4f38adbf5a /src/client
parent12.30.0 (diff)
downloadsharkey-f07047d1e89586a3bcaf36d6d2667e89e1a49d1e.tar.gz
sharkey-f07047d1e89586a3bcaf36d6d2667e89e1a49d1e.tar.bz2
sharkey-f07047d1e89586a3bcaf36d6d2667e89e1a49d1e.zip
AiScript関連
Diffstat (limited to 'src/client')
-rw-r--r--src/client/components/page/page.vue2
-rw-r--r--src/client/pages/page-editor/page-editor.script-block.vue2
-rw-r--r--src/client/pages/page-editor/page-editor.vue4
-rw-r--r--src/client/pages/scratchpad.vue20
-rw-r--r--src/client/scripts/aoiscript/evaluator.ts (renamed from src/client/scripts/aiscript/evaluator.ts)12
-rw-r--r--src/client/scripts/aoiscript/index.ts (renamed from src/client/scripts/aiscript/index.ts)2
-rw-r--r--src/client/scripts/aoiscript/type-checker.ts (renamed from src/client/scripts/aiscript/type-checker.ts)2
-rw-r--r--src/client/scripts/create-aiscript-env.ts28
-rw-r--r--src/client/store.ts2
9 files changed, 43 insertions, 31 deletions
diff --git a/src/client/components/page/page.vue b/src/client/components/page/page.vue
index b8f6fd2f95..977d384b30 100644
--- a/src/client/components/page/page.vue
+++ b/src/client/components/page/page.vue
@@ -10,7 +10,7 @@ import i18n from '../../i18n';
import { faHeart as faHeartS } from '@fortawesome/free-solid-svg-icons';
import { faHeart } from '@fortawesome/free-regular-svg-icons';
import XBlock from './page.block.vue';
-import { ASEvaluator } from '../../scripts/aiscript/evaluator';
+import { ASEvaluator } from '../../scripts/aoiscript/evaluator';
import { collectPageVars } from '../../scripts/collect-page-vars';
import { url } from '../../config';
diff --git a/src/client/pages/page-editor/page-editor.script-block.vue b/src/client/pages/page-editor/page-editor.script-block.vue
index f56e848c39..4f30b7136b 100644
--- a/src/client/pages/page-editor/page-editor.script-block.vue
+++ b/src/client/pages/page-editor/page-editor.script-block.vue
@@ -59,7 +59,7 @@ import { v4 as uuid } from 'uuid';
import i18n from '../../i18n';
import XContainer from './page-editor.container.vue';
import MkTextarea from '../../components/ui/textarea.vue';
-import { isLiteralBlock, funcDefs, blockDefs } from '../../scripts/aiscript/index';
+import { isLiteralBlock, funcDefs, blockDefs } from '../../scripts/aoiscript/index';
export default Vue.extend({
i18n,
diff --git a/src/client/pages/page-editor/page-editor.vue b/src/client/pages/page-editor/page-editor.vue
index 04117b501f..b3350e0c63 100644
--- a/src/client/pages/page-editor/page-editor.vue
+++ b/src/client/pages/page-editor/page-editor.vue
@@ -98,8 +98,8 @@ import MkButton from '../../components/ui/button.vue';
import MkSelect from '../../components/ui/select.vue';
import MkSwitch from '../../components/ui/switch.vue';
import MkInput from '../../components/ui/input.vue';
-import { blockDefs } from '../../scripts/aiscript/index';
-import { ASTypeChecker } from '../../scripts/aiscript/type-checker';
+import { blockDefs } from '../../scripts/aoiscript/index';
+import { ASTypeChecker } from '../../scripts/aoiscript/type-checker';
import { url } from '../../config';
import { collectPageVars } from '../../scripts/collect-page-vars';
import { selectDriveFile } from '../../scripts/select-drive-file';
diff --git a/src/client/pages/scratchpad.vue b/src/client/pages/scratchpad.vue
index 2178e35b9b..10292e60c6 100644
--- a/src/client/pages/scratchpad.vue
+++ b/src/client/pages/scratchpad.vue
@@ -31,6 +31,7 @@ import { AiScript, parse, utils, values } from '@syuilo/aiscript';
import i18n from '../i18n';
import MkContainer from '../components/ui/container.vue';
import MkButton from '../components/ui/button.vue';
+import { createAiScriptEnv } from '../scripts/create-aiscript-env';
export default Vue.extend({
i18n,
@@ -71,24 +72,7 @@ export default Vue.extend({
methods: {
async run() {
this.logs = [];
- const aiscript = new AiScript({
- dialog: values.FN_NATIVE(async ([title, text, type]) => {
- await this.$root.dialog({
- type: type ? type.value : 'info',
- title: title.value,
- text: text.value,
- });
- }),
- confirm: values.FN_NATIVE(async ([title, text]) => {
- const confirm = await this.$root.dialog({
- type: 'warning',
- showCancelButton: true,
- title: title.value,
- text: text.value,
- });
- return confirm.canceled ? values.FALSE : values.TRUE
- }),
- }, {
+ const aiscript = new AiScript(createAiScriptEnv(this), {
in: (q) => {
return new Promise(ok => {
this.$root.dialog({
diff --git a/src/client/scripts/aiscript/evaluator.ts b/src/client/scripts/aoiscript/evaluator.ts
index 5cdf5e0b84..2e952da404 100644
--- a/src/client/scripts/aiscript/evaluator.ts
+++ b/src/client/scripts/aoiscript/evaluator.ts
@@ -9,7 +9,7 @@ type Fn = {
};
/**
- * AiScript evaluator
+ * AoiScript evaluator
*/
export class ASEvaluator {
private variables: Variable[];
@@ -51,7 +51,7 @@ export class ASEvaluator {
if (pageVar !== undefined) {
pageVar.value = value;
} else {
- throw new AiScriptError(`No such page var '${name}'`);
+ throw new AoiScriptError(`No such page var '${name}'`);
}
}
@@ -206,14 +206,14 @@ export class ASEvaluator {
const fnName = block.type;
const fn = (funcs as any)[fnName];
if (fn == null) {
- throw new AiScriptError(`No such function '${fnName}'`);
+ throw new AoiScriptError(`No such function '${fnName}'`);
} else {
return fn(...block.args.map(x => this.evaluate(x, scope)));
}
}
}
-class AiScriptError extends Error {
+class AoiScriptError extends Error {
public info?: any;
constructor(message: string, info?: any) {
@@ -223,7 +223,7 @@ class AiScriptError extends Error {
// Maintains proper stack trace for where our error was thrown (only available on V8)
if (Error.captureStackTrace) {
- Error.captureStackTrace(this, AiScriptError);
+ Error.captureStackTrace(this, AoiScriptError);
}
}
}
@@ -256,7 +256,7 @@ class Scope {
}
}
- throw new AiScriptError(
+ throw new AoiScriptError(
`No such variable '${name}' in scope '${this.name}'`, {
scope: this.layerdStates
});
diff --git a/src/client/scripts/aiscript/index.ts b/src/client/scripts/aoiscript/index.ts
index 8e7b1f052a..42d67b3fad 100644
--- a/src/client/scripts/aiscript/index.ts
+++ b/src/client/scripts/aoiscript/index.ts
@@ -1,5 +1,5 @@
/**
- * AiScript
+ * AoiScript
*/
import {
diff --git a/src/client/scripts/aiscript/type-checker.ts b/src/client/scripts/aoiscript/type-checker.ts
index 817e549864..93b13c4bda 100644
--- a/src/client/scripts/aiscript/type-checker.ts
+++ b/src/client/scripts/aoiscript/type-checker.ts
@@ -8,7 +8,7 @@ type TypeError = {
};
/**
- * AiScript type checker
+ * AoiScript type checker
*/
export class ASTypeChecker {
public variables: Variable[];
diff --git a/src/client/scripts/create-aiscript-env.ts b/src/client/scripts/create-aiscript-env.ts
new file mode 100644
index 0000000000..75f402e13e
--- /dev/null
+++ b/src/client/scripts/create-aiscript-env.ts
@@ -0,0 +1,28 @@
+import { utils, values } from '@syuilo/aiscript';
+
+export function createAiScriptEnv(vm) {
+ return {
+ USER_ID: values.STR(vm.$store.state.i.id),
+ USER_USERNAME: values.STR(vm.$store.state.i.username),
+ 'Mk:dialog': values.FN_NATIVE(async ([title, text, type]) => {
+ await vm.$root.dialog({
+ type: type ? type.value : 'info',
+ title: title.value,
+ text: text.value,
+ });
+ }),
+ 'Mk:confirm': values.FN_NATIVE(async ([title, text]) => {
+ const confirm = await vm.$root.dialog({
+ type: 'warning',
+ showCancelButton: true,
+ title: title.value,
+ text: text.value,
+ });
+ return confirm.canceled ? values.FALSE : values.TRUE
+ }),
+ 'Mk:api': values.FN_NATIVE(async ([ep, param, token]) => {
+ const res = await vm.$root.api(ep.value, utils.valToJs(param), token || null);
+ return utils.jsToVal(res);
+ }),
+ };
+}
diff --git a/src/client/store.ts b/src/client/store.ts
index b2aea38391..14c8548602 100644
--- a/src/client/store.ts
+++ b/src/client/store.ts
@@ -138,7 +138,7 @@ export default () => new Vuex.Store({
const promise = new Promise((resolve, reject) => {
// Append a credential
if (ctx.getters.isSignedIn) (data as any).i = ctx.state.i.token;
- if (token) (data as any).i = token;
+ if (token !== undefined) (data as any).i = token;
// Send request
fetch(endpoint.indexOf('://') > -1 ? endpoint : `${apiUrl}/${endpoint}`, {