nadesiko3 3.3.49 → 3.3.52
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/LICENSE +21 -21
- package/README.md +143 -143
- package/batch/.DS_Store +0 -0
- package/batch/browsers.template.md +3 -3
- package/batch/build_browsers.nako3 +72 -72
- package/batch/build_command.nako3 +44 -44
- package/batch/build_nako_version.nako3 +42 -42
- package/batch/calc_hash.nako3 +29 -29
- package/batch/cmd_txt2json.nako3 +74 -74
- package/batch/command.txt +162 -83
- package/batch/command_nakopad.txt +69 -0
- package/batch/download-extlib.nako3 +43 -43
- package/batch/gen_command_nakopad.nako3 +57 -57
- package/batch/jsplugin2text.nako3 +285 -285
- package/batch/pickup_command.nako3 +113 -110
- package/batch/pickup_reserved_words.nako3 +11 -11
- package/batch/publish_version.nako3 +46 -46
- package/batch/show_agents.js +14 -14
- package/batch/turtle2js.nako3 +21 -21
- package/bin/cnako3 +10 -10
- package/core/LICENSE +21 -21
- package/core/README.md +66 -66
- package/core/batch/build_nako_version.nako3 +42 -42
- package/core/command/snako.mjs +105 -105
- package/core/command/snako.mts +116 -116
- package/core/index.mjs +21 -21
- package/core/package.json +47 -47
- package/core/sample/hello.nako3 +7 -7
- package/core/sample/hoge.mjs +4 -4
- package/core/sample/hoge.mts +6 -6
- package/core/src/nako3.mjs +870 -858
- package/core/src/nako3.mts +983 -967
- package/core/src/nako_colors.mjs +78 -78
- package/core/src/nako_colors.mts +86 -86
- package/core/src/nako_core_version.mjs +8 -8
- package/core/src/nako_core_version.mts +19 -19
- package/core/src/nako_csv.mjs +185 -185
- package/core/src/nako_csv.mts +188 -188
- package/core/src/nako_errors.mjs +173 -173
- package/core/src/nako_errors.mts +197 -197
- package/core/src/nako_from_dncl.mjs +255 -255
- package/core/src/nako_from_dncl.mts +250 -250
- package/core/src/nako_gen.mjs +1647 -1648
- package/core/src/nako_gen.mts +1718 -1719
- package/core/src/nako_gen_async.mjs +1659 -1659
- package/core/src/nako_gen_async.mts +1732 -1732
- package/core/src/nako_global.mjs +109 -107
- package/core/src/nako_global.mts +141 -138
- package/core/src/nako_indent.mjs +445 -445
- package/core/src/nako_indent.mts +492 -492
- package/core/src/nako_josi_list.mjs +38 -38
- package/core/src/nako_josi_list.mts +45 -45
- package/core/src/nako_lex_rules.mjs +253 -253
- package/core/src/nako_lex_rules.mts +260 -260
- package/core/src/nako_lexer.mjs +609 -609
- package/core/src/nako_lexer.mts +612 -612
- package/core/src/nako_logger.mjs +199 -199
- package/core/src/nako_logger.mts +232 -232
- package/core/src/nako_parser3.mjs +2441 -2439
- package/core/src/nako_parser3.mts +2197 -2195
- package/core/src/nako_parser_base.mjs +371 -370
- package/core/src/nako_parser_base.mts +372 -370
- package/core/src/nako_parser_const.mjs +37 -37
- package/core/src/nako_parser_const.mts +37 -37
- package/core/src/nako_prepare.mjs +304 -304
- package/core/src/nako_prepare.mts +315 -315
- package/core/src/nako_reserved_words.mjs +38 -38
- package/core/src/nako_reserved_words.mts +38 -38
- package/core/src/nako_source_mapping.mjs +207 -207
- package/core/src/nako_source_mapping.mts +262 -262
- package/core/src/nako_test.mjs +37 -37
- package/core/src/nako_types.mjs +13 -25
- package/core/src/nako_types.mts +144 -151
- package/core/src/plugin_csv.mjs +49 -49
- package/core/src/plugin_csv.mts +50 -50
- package/core/src/plugin_math.mjs +328 -328
- package/core/src/plugin_math.mts +326 -326
- package/core/src/plugin_promise.mjs +91 -91
- package/core/src/plugin_promise.mts +91 -91
- package/core/src/plugin_system.mjs +2832 -2832
- package/core/src/plugin_system.mts +2690 -2690
- package/core/src/plugin_test.mjs +34 -34
- package/core/src/plugin_test.mts +34 -34
- package/demo/.DS_Store +0 -0
- package/demo/ace_editor.html +89 -89
- package/demo/ace_editor_tabs.html +161 -161
- package/demo/basic.html +71 -71
- package/demo/browsers.html +10 -9
- package/demo/css/basic.css +3 -3
- package/demo/css/common.css +157 -157
- package/demo/css/editor.css +8 -8
- package/demo/css/flow.css +3 -3
- package/demo/css/index.css +3 -3
- package/demo/extlib/.DS_Store +0 -0
- package/demo/flow.html +98 -98
- package/demo/graph.html +53 -53
- package/demo/image/nakopad-icon256.png +0 -0
- package/demo/index.html +133 -133
- package/demo/js/common.js +17 -17
- package/demo/js/turtle3d_test.js +44 -44
- package/demo/js/turtle_test.js +45 -45
- package/demo/nako3/calc.nako3 +4 -4
- package/demo/runscript.html +47 -47
- package/demo/runscript2.html +33 -33
- package/demo/runscript3.html +35 -35
- package/demo/runscript4.html +33 -33
- package/demo/turtle.html +58 -58
- package/demo/turtle2.html +141 -141
- package/demo/turtle3.html +279 -279
- package/demo/turtle3d.html +58 -58
- package/demo/turtle3d2.html +107 -107
- package/demo/version.html +24 -24
- package/doc/SETUP.md +157 -157
- package/doc/about.md +17 -17
- package/doc/browsers.md +26 -26
- package/doc/docgen.md +21 -21
- package/doc/editor.md +44 -44
- package/doc/files.md +39 -39
- package/doc/plugins.md +234 -234
- package/doc/release.md +79 -79
- package/doc/textlint.md +43 -43
- package/doc/win32.md +57 -57
- package/package.json +195 -195
- package/release/_hash.txt +28 -28
- package/release/_script-tags.txt +14 -14
- package/release/command.json +1 -1
- package/release/command.json.js +1 -1
- package/release/command_cnako3.json +1 -1
- package/release/command_list.json +1 -1
- package/release/editor.js +1 -1
- package/release/nako_gen_async.js +2 -1
- package/release/nako_gen_async.js.LICENSE.txt +35 -0
- package/release/plugin_caniuse.js.LICENSE.txt +11 -0
- package/release/plugin_csv.js +1 -1
- package/release/plugin_csv.js.LICENSE.txt +15 -0
- package/release/plugin_datetime.js.LICENSE.txt +15 -0
- package/release/plugin_kansuji.js.LICENSE.txt +3 -0
- package/release/plugin_markup.js.LICENSE.txt +11 -0
- package/release/plugin_turtle.js.LICENSE.txt +15 -0
- package/release/plugin_webworker.js.LICENSE.txt +3 -0
- package/release/plugin_weykturtle3d.js.LICENSE.txt +3 -0
- package/release/stats.json +1 -1
- package/release/version.js +1 -1
- package/release/wnako3.js +1 -1
- package/release/wnako3.js.LICENSE.txt +203 -1
- package/release/wnako3webworker.js +2 -1
- package/release/wnako3webworker.js.LICENSE.txt +131 -0
- package/src/.DS_Store +0 -0
- package/src/browsers.txt +12 -11
- package/src/browsers_agents.json +2 -2
- package/src/browsers_agents.mjs +1 -1
- package/src/cnako3.mjs +17 -17
- package/src/cnako3.mts +18 -18
- package/src/cnako3mod.mjs +682 -707
- package/src/cnako3mod.mts +688 -712
- package/src/commander_ja.mjs +164 -164
- package/src/commander_ja.mts +161 -161
- package/src/enako3.mjs +68 -68
- package/src/era.mjs +22 -22
- package/src/image_turtle-elephant.mjs +2 -2
- package/src/image_turtle-panda.mjs +2 -2
- package/src/image_turtle64.mjs +2 -2
- package/src/index.mjs +9 -9
- package/src/index.mts +10 -10
- package/src/nako3editorfix.sfd +106 -106
- package/src/nako_version.mjs +8 -8
- package/src/nako_version.mts +2 -2
- package/src/plugin_browser.mjs +213 -213
- package/src/plugin_browser.mts +206 -206
- package/src/plugin_browser_ajax.mjs +399 -399
- package/src/plugin_browser_audio.mjs +109 -109
- package/src/plugin_browser_canvas.mjs +449 -449
- package/src/plugin_browser_chart.mjs +294 -294
- package/src/plugin_browser_color.mjs +49 -49
- package/src/plugin_browser_crypto.mjs +26 -26
- package/src/plugin_browser_dialog.mjs +53 -53
- package/src/plugin_browser_dom_basic.mjs +336 -336
- package/src/plugin_browser_dom_event.mjs +193 -193
- package/src/plugin_browser_dom_parts.mjs +396 -396
- package/src/plugin_browser_geolocation.mjs +51 -51
- package/src/plugin_browser_hotkey.mjs +25 -25
- package/src/plugin_browser_html.mjs +59 -59
- package/src/plugin_browser_in_worker.mjs +45 -45
- package/src/plugin_browser_location.mjs +21 -21
- package/src/plugin_browser_speech.mjs +111 -111
- package/src/plugin_browser_storage.mjs +121 -121
- package/src/plugin_browser_system.mjs +31 -31
- package/src/plugin_browser_websocket.mjs +73 -73
- package/src/plugin_caniuse.mjs +29 -29
- package/src/plugin_datetime.mjs +394 -394
- package/src/plugin_httpserver.mjs +277 -277
- package/src/plugin_httpserver.mts +286 -286
- package/src/plugin_kansuji.mjs +224 -224
- package/src/plugin_keigo.mjs +55 -55
- package/src/plugin_markup.mjs +32 -32
- package/src/plugin_node.mjs +1047 -1047
- package/src/plugin_node.mts +980 -980
- package/src/plugin_turtle.mjs +647 -647
- package/src/plugin_webworker.mjs +334 -334
- package/src/plugin_weykturtle3d.mjs +1214 -1214
- package/src/plugin_worker.mjs +95 -95
- package/src/repl.nako3 +63 -63
- package/src/wnako3.mjs +12 -12
- package/src/wnako3.mts +11 -11
- package/src/wnako3_editor.css +215 -215
- package/src/wnako3_editor.mjs +1542 -1542
- package/src/wnako3_editor.mts +1658 -1657
- package/src/wnako3mod.mjs +213 -213
- package/src/wnako3mod.mts +214 -214
- package/src/wnako3webworker.mjs +69 -69
- package/test/.DS_Store +0 -0
- package/test/ace_editor/karma.config.js +94 -94
- package/test/ace_editor/test/.babelrc.json +3 -3
- package/test/ace_editor/test/ace_editor_test.js +178 -178
- package/test/ace_editor/test/html/custom_context.html +139 -139
- package/test/async/async_basic_test.mjs +122 -122
- package/test/browser/.DS_Store +0 -0
- package/test/browser/karma.config.js +221 -221
- package/test/browser/test/.babelrc.json +3 -3
- package/test/browser/test/compare_util.js +50 -50
- package/test/browser/test/html/div_basic.html +2 -2
- package/test/browser/test/html/event_dom_form.html +4 -4
- package/test/browser/test/html/event_dom_scrolldiv.html +5 -5
- package/test/browser/test/import_plugin_checker.js +24 -24
- package/test/browser/test/plugin_browser_test.js +51 -51
- package/test/browser/test/plugin_browser_test_ajax.js +123 -123
- package/test/browser/test/plugin_browser_test_color.js +18 -18
- package/test/browser/test/plugin_browser_test_dialog.js +72 -72
- package/test/browser/test/plugin_browser_test_dom_event.js +598 -598
- package/test/browser/test/plugin_browser_test_dom_parts.js +125 -125
- package/test/browser/test/plugin_browser_test_system.js +9 -9
- package/test/browser/test/plugin_turtle_test.js +817 -817
- package/test/browser/test/plugin_webworker_test.js +86 -86
- package/test/browser/test/require_test.js +68 -68
- package/test/bundled/.DS_Store +0 -0
- package/test/bundled/karma.config.base.js +117 -117
- package/test/bundled/karma.config.js +86 -86
- package/test/bundled/test/.babelrc.json +3 -3
- package/test/bundled/test/bundled_test.js +69 -69
- package/test/bundled/test/html/custom_context.html +65 -65
- package/test/bundled/test/html/custom_debug.html +66 -66
- package/test/bundled/test4b.cmd +52 -52
- package/test/bundled/test_base/.DS_Store +0 -0
- package/test/bundled/test_base/.babelrc.json +3 -3
- package/test/bundled/test_base/_checktool_test.js +25 -25
- package/test/bundled/test_base/basic_ajax_test.js +56 -56
- package/test/bundled/test_base/basic_async_test.js +18 -18
- package/test/bundled/test_base/basic_test.js +153 -153
- package/test/bundled/test_base/calc_test.js +132 -132
- package/test/bundled/test_base/css/browsers_box.css +114 -114
- package/test/bundled/test_base/html/custom_context.html +69 -69
- package/test/bundled/test_base/html/custom_debug.html +71 -71
- package/test/bundled/test_base/js/browsers_box.js +72 -72
- package/test/bundled/test_base/plugin_csv_test.js +37 -37
- package/test/bundled/test_base/plugin_datetime_test.js +115 -115
- package/test/bundled/test_base/plugin_kansuji_test.js +49 -49
- package/test/bundled/test_base/plugin_system_test.js +410 -410
- package/test/bundled/test_base/plugin_webworker_test.js +53 -53
- package/test/bundled/test_base/test_utils.js +191 -191
- package/test/common/.DS_Store +0 -0
- package/test/common/plugin_browser_test.mjs +22 -22
- package/test/common/plugin_browser_ut_audio_test.mjs +108 -108
- package/test/common/plugin_browser_ut_color_test.mjs +21 -21
- package/test/common/plugin_browser_ut_dialog_test.mjs +100 -100
- package/test/common/plugin_browser_ut_html_test.mjs +13 -13
- package/test/common/plugin_browser_ut_system_test.mjs +10 -10
- package/test/common/plugin_markup_test.mjs +23 -23
- package/test/jsconfig.json +19 -19
- package/test/karma.config.js +91 -91
- package/test/node/.DS_Store +0 -0
- package/test/node/async_test.mjs +96 -96
- package/test/node/commander_ja_test.mjs +89 -89
- package/test/node/error_message_test.mjs +243 -243
- package/test/node/kai_test.nako3 +6 -6
- package/test/node/node_test.mjs +60 -60
- package/test/node/plugin_broken.js.txt +3 -3
- package/test/node/plugin_browser_ut_ajax_test.mjs.todo +357 -357
- package/test/node/plugin_browser_ut_location_test.mjs +42 -42
- package/test/node/plugin_markup_test.mjs +47 -47
- package/test/node/plugin_math_test.mjs +45 -45
- package/test/node/plugin_node_test.mjs +98 -98
- package/test/node/plugin_test.mjs +44 -44
- package/test/node/relative_import_test_1.nako3 +1 -1
- package/test/node/relative_import_test_2.nako3 +2 -2
- package/test/node/require_nako3_test.mjs +67 -67
- package/test/node/requiretest.nako3 +4 -4
- package/test/node/requiretest_indirect.nako3 +1 -1
- package/test/node/requiretest_name.nako3 +5 -5
- package/test/node/runtime_error.nako3 +2 -2
- package/test/node/scope1.nako3 +10 -10
- package/test/node/scope2.nako3 +12 -12
- package/test/node/side_effects_test.mjs +39 -39
- package/test/node/sjis.txt +5 -5
- package/test/node/syntax_error.nako3 +1 -1
- package/test/node/wnako3_editor_test.mjs +384 -384
- package/tools/.DS_Store +0 -0
- package/tools/README.md +12 -12
- package/tools/check_new_version.nako3 +25 -25
- package/tools/nako3edit/.DS_Store +0 -0
- package/tools/nako3edit/a.sqlite3 +0 -0
- package/tools/nako3edit/html/.DS_Store +0 -0
- package/tools/nako3edit/html/daisyui/LICENSE +22 -22
- package/tools/nako3edit/html/daisyui/version_2.14.1 +1 -1
- package/tools/nako3edit/html/edit.html +170 -170
- package/tools/nako3edit/html/edit_plugin.js +6 -6
- package/tools/nako3edit/html/files.html +125 -125
- package/tools/nako3edit/html/nako3edit.css +65 -65
- package/tools/nako3edit/index.mjs +248 -248
- package/tools/nako3server/index.html +10 -10
- package/tools/nako3server/index.mjs +116 -116
- package/tools/nako3server/index.nako3 +34 -34
- package/core/.editorconfig +0 -6
- package/core/.eslintrc.cjs +0 -33
- package/core/.github/dependabot.yml +0 -7
- package/core/.github/workflows/nodejs.yml +0 -37
- package/core/.github/workflows/super-linter.yml +0 -61
- package/core/.github/workflows/textlint.yml +0 -199
- package/core/index.mts +0 -21
- package/core/test/array_test.mjs +0 -34
- package/core/test/basic_test.mjs +0 -344
- package/core/test/calc_test.mjs +0 -140
- package/core/test/core_module_test.mjs +0 -23
- package/core/test/debug_test.mjs +0 -16
- package/core/test/dncl_test.mjs +0 -94
- package/core/test/error_message_test.mjs +0 -210
- package/core/test/error_test.mjs +0 -16
- package/core/test/flow_test.mjs +0 -373
- package/core/test/func_call.mjs +0 -160
- package/core/test/func_test.mjs +0 -149
- package/core/test/indent_test.mjs +0 -364
- package/core/test/lex_test.mjs +0 -168
- package/core/test/literal_test.mjs +0 -73
- package/core/test/nako_lexer_test.mjs +0 -35
- package/core/test/nako_logger_test.mjs +0 -76
- package/core/test/nako_logger_test.mts +0 -78
- package/core/test/plugin_csv_test.mjs +0 -38
- package/core/test/plugin_promise_test.mjs +0 -18
- package/core/test/plugin_system_test.mjs +0 -630
- package/core/test/prepare_test.mjs +0 -96
- package/core/test/re_test.mjs +0 -22
- package/core/test/side_effects_test.mjs +0 -92
- package/core/test/variable_scope_test.mjs +0 -149
- package/core/tsconfig.json +0 -101
package/src/wnako3mod.mts
CHANGED
|
@@ -1,214 +1,214 @@
|
|
|
1
|
-
// wnako3mod - nadesiko for web browser
|
|
2
|
-
// - wnako3 から wnako3mod を取り込む。
|
|
3
|
-
// - このファイルはモジュールとして別のファイルから取り込み可能。
|
|
4
|
-
import { NakoCompiler, LoaderToolTask } from '../core/src/nako3.mjs'
|
|
5
|
-
import { NakoGlobal } from '../core/src/nako_global.mjs'
|
|
6
|
-
import { NakoImportError } from '../core/src/nako_errors.mjs'
|
|
7
|
-
import { Token } from '../core/src/nako_types.mjs'
|
|
8
|
-
import { setupEditor } from './wnako3_editor.mjs'
|
|
9
|
-
import nakoVersion, { NakoVersion } from './nako_version.mjs'
|
|
10
|
-
import PluginBrowser from './plugin_browser.mjs'
|
|
11
|
-
|
|
12
|
-
const NAKO_SCRIPT_RE = /^(なでしこ|nako|nadesiko)3?$/
|
|
13
|
-
|
|
14
|
-
export class WebNakoCompiler extends NakoCompiler {
|
|
15
|
-
wnakoVersion: NakoVersion
|
|
16
|
-
constructor () {
|
|
17
|
-
super({ useBasicPlugin: true })
|
|
18
|
-
this.wnakoVersion = nakoVersion
|
|
19
|
-
// プラグインを追加
|
|
20
|
-
this.addPluginObject('PluginBrowser', PluginBrowser)
|
|
21
|
-
// 必要な定数を設定
|
|
22
|
-
this.addListener('beforeRun', (g: NakoGlobal) => {
|
|
23
|
-
g.__varslist[0]['ナデシコ種類'] = 'wnako3'
|
|
24
|
-
g.__varslist[0]['ナデシコバージョン'] = nakoVersion.version
|
|
25
|
-
})
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* ブラウザでtype="なでしこ"というスクリプトを得て実行する
|
|
30
|
-
*/
|
|
31
|
-
async runNakoScript () {
|
|
32
|
-
// スクリプトタグの中身を得る
|
|
33
|
-
let nakoScriptCount = 0
|
|
34
|
-
const scripts = document.querySelectorAll('script')
|
|
35
|
-
for (let i = 0; i < scripts.length; i++) {
|
|
36
|
-
const script = scripts[i]
|
|
37
|
-
if (script.type.match(NAKO_SCRIPT_RE)) {
|
|
38
|
-
nakoScriptCount++
|
|
39
|
-
// URLからスクリプト名を見つける
|
|
40
|
-
const url = (typeof (window.location) === 'object') ? window.location.href : 'url_unknown'
|
|
41
|
-
const fname = `${url}#script${nakoScriptCount}.nako3`
|
|
42
|
-
const code = script.text
|
|
43
|
-
// 依存するライブラリをロード
|
|
44
|
-
await this.loadDependencies(code, fname)
|
|
45
|
-
// プログラムを実行
|
|
46
|
-
await this.runAsync(script.text, fname)
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
if (nakoScriptCount > 1) {
|
|
50
|
-
console.log('実行したなでしこの個数=', nakoScriptCount)
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* @this {WebNakoCompiler}
|
|
56
|
-
* @param {string} code
|
|
57
|
-
* @param {string} filename
|
|
58
|
-
* @param {string} [preCode]
|
|
59
|
-
* @param {Record<string, string>} [localFiles]
|
|
60
|
-
* @returns {Promise<unknown>}
|
|
61
|
-
*/
|
|
62
|
-
async loadDependencies (code: string, filename: string, preCode = '', localFiles: any = {}) {
|
|
63
|
-
return this._loadDependencies(code, filename, preCode, {
|
|
64
|
-
readJs: (filePath, token) => {
|
|
65
|
-
if (Object.prototype.hasOwnProperty.call(localFiles, filePath)) {
|
|
66
|
-
return {
|
|
67
|
-
task: (async () => () => {
|
|
68
|
-
// eslint-disable-next-line no-new-func
|
|
69
|
-
Function(localFiles[filePath])()
|
|
70
|
-
return {}
|
|
71
|
-
})()
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
return {
|
|
75
|
-
task: (async () => {
|
|
76
|
-
const res = await fetch(filePath)
|
|
77
|
-
if (!res.ok) {
|
|
78
|
-
throw new NakoImportError(`ファイル『${filePath}』のダウンロードに失敗しました: ${res.status} ${res.statusText}`, token.file, token.line)
|
|
79
|
-
}
|
|
80
|
-
const text = await res.text()
|
|
81
|
-
if (!text.includes('navigator.nako3.addPluginObject')) {
|
|
82
|
-
throw new NakoImportError(`ファイル ${filePath} の中に文字列 "navigator.nako3.addPluginObject" が存在しません。現在、ブラウザ版のなでしこ言語v3は自動登録するプラグインのみをサポートしています。`, token.file, token.line)
|
|
83
|
-
}
|
|
84
|
-
// textの例: `navigator.nako3.addPluginObject('PluginRequireTest', { requiretest: { type: 'var', value: 100 } })`
|
|
85
|
-
return () => {
|
|
86
|
-
// プラグインの自動登録は navigator.nako3 を参照するため、 navigator.nako3 を一時的に現在のインスタンスにする。
|
|
87
|
-
const globalNavigator: any = navigator
|
|
88
|
-
const globalNako3 = globalNavigator.nako3
|
|
89
|
-
globalNavigator.nako3 = this
|
|
90
|
-
try {
|
|
91
|
-
// eslint-disable-next-line no-new-func
|
|
92
|
-
Function(text)()
|
|
93
|
-
} catch (err) {
|
|
94
|
-
throw new NakoImportError(`プラグイン ${filePath} の取り込みに失敗: ${err instanceof Error ? err.message : err + ''}`, token.file, token.line)
|
|
95
|
-
} finally {
|
|
96
|
-
globalNavigator.nako3 = globalNako3
|
|
97
|
-
}
|
|
98
|
-
return {}
|
|
99
|
-
}
|
|
100
|
-
})()
|
|
101
|
-
}
|
|
102
|
-
},
|
|
103
|
-
readNako3: (filePath: string, token: Token): LoaderToolTask<string> => {
|
|
104
|
-
if (Object.prototype.hasOwnProperty.call(localFiles, filePath)) {
|
|
105
|
-
return {
|
|
106
|
-
task: (() => {
|
|
107
|
-
return (new Promise((resolve, reject) => {
|
|
108
|
-
const s: string = localFiles[filePath]
|
|
109
|
-
resolve(s)
|
|
110
|
-
}))
|
|
111
|
-
})()
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
return {
|
|
115
|
-
task: (async () => {
|
|
116
|
-
const res = await fetch(filePath)
|
|
117
|
-
if (!res.ok) {
|
|
118
|
-
throw new NakoImportError(`ファイル ${filePath} のダウンロードに失敗しました: ${res.status} ${res.statusText}`, token.file, token.line)
|
|
119
|
-
}
|
|
120
|
-
return await res.text()
|
|
121
|
-
})()
|
|
122
|
-
}
|
|
123
|
-
},
|
|
124
|
-
resolvePath: (name, token, fromFile) => {
|
|
125
|
-
let pathname = name
|
|
126
|
-
// http から始まっていれば解決は不要
|
|
127
|
-
if (pathname.startsWith('http://') || pathname.startsWith('https://')) {
|
|
128
|
-
// fullpath
|
|
129
|
-
} else {
|
|
130
|
-
// ローカルにファイルが存在するならそれを使う。そうでなければURLとして解釈する。
|
|
131
|
-
if (!Object.prototype.hasOwnProperty.call(localFiles, name)) {
|
|
132
|
-
try {
|
|
133
|
-
pathname = new URL(name).pathname
|
|
134
|
-
} catch (e) {
|
|
135
|
-
// 単純にパスに変換できなければ、location.hrefを参考にパスを組み立てる
|
|
136
|
-
try {
|
|
137
|
-
let baseDir = dirname(fromFile)
|
|
138
|
-
if (baseDir === '') {
|
|
139
|
-
// https://2/3/4.html
|
|
140
|
-
const a = window.location.href.split('/')
|
|
141
|
-
baseDir = '/' + a.slice(3, a.length - 1).join('/')
|
|
142
|
-
}
|
|
143
|
-
pathname = resolveURL(baseDir, name)
|
|
144
|
-
} catch (e) {
|
|
145
|
-
throw new NakoImportError(`取り込み文の引数でパスが解決できません。https:// か http:// で始まるアドレスを指定してください。\n${e}`, token.file, token.line)
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
} else {
|
|
149
|
-
pathname = localFiles[name]
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
// .js および .mjs なら JSプラグイン
|
|
153
|
-
if (pathname.endsWith('.js') || pathname.endsWith('.js.txt') || pathname.endsWith('.mjs') || pathname.endsWith('.mjs.txt')) {
|
|
154
|
-
return { filePath: pathname, type: 'js' }
|
|
155
|
-
}
|
|
156
|
-
// .nako3 なら なでしこ3プラグイン
|
|
157
|
-
if (pathname.endsWith('.nako3') || pathname.endsWith('.nako3.txt')) {
|
|
158
|
-
return { filePath: pathname, type: 'nako3' }
|
|
159
|
-
}
|
|
160
|
-
// ファイル拡張子が未指定の場合
|
|
161
|
-
throw new NakoImportError(`ファイル『${name}』は拡張子が(.nako3|.js|.js.txt|.mjs|.mjs.txt)以外なので取り込めません。`, token.file, token.line)
|
|
162
|
-
}
|
|
163
|
-
})
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
/**
|
|
167
|
-
* type=なでしこ のスクリプトを自動実行するべきかどうかを返す
|
|
168
|
-
* @returns
|
|
169
|
-
*/
|
|
170
|
-
checkScriptTagParam () {
|
|
171
|
-
const scripts = document.querySelectorAll('script')
|
|
172
|
-
for (let i = 0; i < scripts.length; i++) {
|
|
173
|
-
const script = scripts[i]
|
|
174
|
-
const src = script.src || ''
|
|
175
|
-
if (src.indexOf('wnako3.js?run') >= 0 ||
|
|
176
|
-
src.indexOf('wnako3.js&run') >= 0) {
|
|
177
|
-
return true
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
return false
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
/**
|
|
184
|
-
* 指定したidのHTML要素をなでしこ言語のエディタにする。
|
|
185
|
-
* @param {string | Element} idOrElement HTML要素
|
|
186
|
-
* @see {setupEditor}
|
|
187
|
-
*/
|
|
188
|
-
setupEditor (idOrElement: any) {
|
|
189
|
-
return setupEditor(idOrElement, this, (window as any).ace)
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
function dirname (s: string) {
|
|
194
|
-
const a = s.split('/')
|
|
195
|
-
if (a && a.length > 1) {
|
|
196
|
-
return a.slice(0, a.length - 1).join('/')
|
|
197
|
-
}
|
|
198
|
-
return ''
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
function resolveURL (base: string, s: string) {
|
|
202
|
-
const baseA = base.split('/')
|
|
203
|
-
const sA = s.split('/')
|
|
204
|
-
for (const p of sA) {
|
|
205
|
-
if (p === '') { continue }
|
|
206
|
-
if (p === '.') { continue }
|
|
207
|
-
if (p === '..') {
|
|
208
|
-
baseA.pop()
|
|
209
|
-
continue
|
|
210
|
-
}
|
|
211
|
-
baseA.push(p)
|
|
212
|
-
}
|
|
213
|
-
return baseA.join('/')
|
|
214
|
-
}
|
|
1
|
+
// wnako3mod - nadesiko for web browser
|
|
2
|
+
// - wnako3 から wnako3mod を取り込む。
|
|
3
|
+
// - このファイルはモジュールとして別のファイルから取り込み可能。
|
|
4
|
+
import { NakoCompiler, LoaderToolTask } from '../core/src/nako3.mjs'
|
|
5
|
+
import { NakoGlobal } from '../core/src/nako_global.mjs'
|
|
6
|
+
import { NakoImportError } from '../core/src/nako_errors.mjs'
|
|
7
|
+
import { Token } from '../core/src/nako_types.mjs'
|
|
8
|
+
import { setupEditor } from './wnako3_editor.mjs'
|
|
9
|
+
import nakoVersion, { NakoVersion } from './nako_version.mjs'
|
|
10
|
+
import PluginBrowser from './plugin_browser.mjs'
|
|
11
|
+
|
|
12
|
+
const NAKO_SCRIPT_RE = /^(なでしこ|nako|nadesiko)3?$/
|
|
13
|
+
|
|
14
|
+
export class WebNakoCompiler extends NakoCompiler {
|
|
15
|
+
wnakoVersion: NakoVersion
|
|
16
|
+
constructor () {
|
|
17
|
+
super({ useBasicPlugin: true })
|
|
18
|
+
this.wnakoVersion = nakoVersion
|
|
19
|
+
// プラグインを追加
|
|
20
|
+
this.addPluginObject('PluginBrowser', PluginBrowser)
|
|
21
|
+
// 必要な定数を設定
|
|
22
|
+
this.addListener('beforeRun', (g: NakoGlobal) => {
|
|
23
|
+
g.__varslist[0]['ナデシコ種類'] = 'wnako3'
|
|
24
|
+
g.__varslist[0]['ナデシコバージョン'] = nakoVersion.version
|
|
25
|
+
})
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* ブラウザでtype="なでしこ"というスクリプトを得て実行する
|
|
30
|
+
*/
|
|
31
|
+
async runNakoScript () {
|
|
32
|
+
// スクリプトタグの中身を得る
|
|
33
|
+
let nakoScriptCount = 0
|
|
34
|
+
const scripts = document.querySelectorAll('script')
|
|
35
|
+
for (let i = 0; i < scripts.length; i++) {
|
|
36
|
+
const script = scripts[i]
|
|
37
|
+
if (script.type.match(NAKO_SCRIPT_RE)) {
|
|
38
|
+
nakoScriptCount++
|
|
39
|
+
// URLからスクリプト名を見つける
|
|
40
|
+
const url = (typeof (window.location) === 'object') ? window.location.href : 'url_unknown'
|
|
41
|
+
const fname = `${url}#script${nakoScriptCount}.nako3`
|
|
42
|
+
const code = script.text
|
|
43
|
+
// 依存するライブラリをロード
|
|
44
|
+
await this.loadDependencies(code, fname)
|
|
45
|
+
// プログラムを実行
|
|
46
|
+
await this.runAsync(script.text, fname)
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
if (nakoScriptCount > 1) {
|
|
50
|
+
console.log('実行したなでしこの個数=', nakoScriptCount)
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* @this {WebNakoCompiler}
|
|
56
|
+
* @param {string} code
|
|
57
|
+
* @param {string} filename
|
|
58
|
+
* @param {string} [preCode]
|
|
59
|
+
* @param {Record<string, string>} [localFiles]
|
|
60
|
+
* @returns {Promise<unknown>}
|
|
61
|
+
*/
|
|
62
|
+
async loadDependencies (code: string, filename: string, preCode = '', localFiles: any = {}) {
|
|
63
|
+
return this._loadDependencies(code, filename, preCode, {
|
|
64
|
+
readJs: (filePath, token) => {
|
|
65
|
+
if (Object.prototype.hasOwnProperty.call(localFiles, filePath)) {
|
|
66
|
+
return {
|
|
67
|
+
task: (async () => () => {
|
|
68
|
+
// eslint-disable-next-line no-new-func
|
|
69
|
+
Function(localFiles[filePath])()
|
|
70
|
+
return {}
|
|
71
|
+
})()
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return {
|
|
75
|
+
task: (async () => {
|
|
76
|
+
const res = await fetch(filePath)
|
|
77
|
+
if (!res.ok) {
|
|
78
|
+
throw new NakoImportError(`ファイル『${filePath}』のダウンロードに失敗しました: ${res.status} ${res.statusText}`, token.file, token.line)
|
|
79
|
+
}
|
|
80
|
+
const text = await res.text()
|
|
81
|
+
if (!text.includes('navigator.nako3.addPluginObject')) {
|
|
82
|
+
throw new NakoImportError(`ファイル ${filePath} の中に文字列 "navigator.nako3.addPluginObject" が存在しません。現在、ブラウザ版のなでしこ言語v3は自動登録するプラグインのみをサポートしています。`, token.file, token.line)
|
|
83
|
+
}
|
|
84
|
+
// textの例: `navigator.nako3.addPluginObject('PluginRequireTest', { requiretest: { type: 'var', value: 100 } })`
|
|
85
|
+
return () => {
|
|
86
|
+
// プラグインの自動登録は navigator.nako3 を参照するため、 navigator.nako3 を一時的に現在のインスタンスにする。
|
|
87
|
+
const globalNavigator: any = navigator
|
|
88
|
+
const globalNako3 = globalNavigator.nako3
|
|
89
|
+
globalNavigator.nako3 = this
|
|
90
|
+
try {
|
|
91
|
+
// eslint-disable-next-line no-new-func
|
|
92
|
+
Function(text)()
|
|
93
|
+
} catch (err) {
|
|
94
|
+
throw new NakoImportError(`プラグイン ${filePath} の取り込みに失敗: ${err instanceof Error ? err.message : err + ''}`, token.file, token.line)
|
|
95
|
+
} finally {
|
|
96
|
+
globalNavigator.nako3 = globalNako3
|
|
97
|
+
}
|
|
98
|
+
return {}
|
|
99
|
+
}
|
|
100
|
+
})()
|
|
101
|
+
}
|
|
102
|
+
},
|
|
103
|
+
readNako3: (filePath: string, token: Token): LoaderToolTask<string> => {
|
|
104
|
+
if (Object.prototype.hasOwnProperty.call(localFiles, filePath)) {
|
|
105
|
+
return {
|
|
106
|
+
task: (() => {
|
|
107
|
+
return (new Promise((resolve, reject) => {
|
|
108
|
+
const s: string = localFiles[filePath]
|
|
109
|
+
resolve(s)
|
|
110
|
+
}))
|
|
111
|
+
})()
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return {
|
|
115
|
+
task: (async () => {
|
|
116
|
+
const res = await fetch(filePath)
|
|
117
|
+
if (!res.ok) {
|
|
118
|
+
throw new NakoImportError(`ファイル ${filePath} のダウンロードに失敗しました: ${res.status} ${res.statusText}`, token.file, token.line)
|
|
119
|
+
}
|
|
120
|
+
return await res.text()
|
|
121
|
+
})()
|
|
122
|
+
}
|
|
123
|
+
},
|
|
124
|
+
resolvePath: (name, token, fromFile) => {
|
|
125
|
+
let pathname = name
|
|
126
|
+
// http から始まっていれば解決は不要
|
|
127
|
+
if (pathname.startsWith('http://') || pathname.startsWith('https://')) {
|
|
128
|
+
// fullpath
|
|
129
|
+
} else {
|
|
130
|
+
// ローカルにファイルが存在するならそれを使う。そうでなければURLとして解釈する。
|
|
131
|
+
if (!Object.prototype.hasOwnProperty.call(localFiles, name)) {
|
|
132
|
+
try {
|
|
133
|
+
pathname = new URL(name).pathname
|
|
134
|
+
} catch (e) {
|
|
135
|
+
// 単純にパスに変換できなければ、location.hrefを参考にパスを組み立てる
|
|
136
|
+
try {
|
|
137
|
+
let baseDir = dirname(fromFile)
|
|
138
|
+
if (baseDir === '') {
|
|
139
|
+
// https://2/3/4.html
|
|
140
|
+
const a = window.location.href.split('/')
|
|
141
|
+
baseDir = '/' + a.slice(3, a.length - 1).join('/')
|
|
142
|
+
}
|
|
143
|
+
pathname = resolveURL(baseDir, name)
|
|
144
|
+
} catch (e) {
|
|
145
|
+
throw new NakoImportError(`取り込み文の引数でパスが解決できません。https:// か http:// で始まるアドレスを指定してください。\n${e}`, token.file, token.line)
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
} else {
|
|
149
|
+
pathname = localFiles[name]
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
// .js および .mjs なら JSプラグイン
|
|
153
|
+
if (pathname.endsWith('.js') || pathname.endsWith('.js.txt') || pathname.endsWith('.mjs') || pathname.endsWith('.mjs.txt')) {
|
|
154
|
+
return { filePath: pathname, type: 'js' }
|
|
155
|
+
}
|
|
156
|
+
// .nako3 なら なでしこ3プラグイン
|
|
157
|
+
if (pathname.endsWith('.nako3') || pathname.endsWith('.nako3.txt')) {
|
|
158
|
+
return { filePath: pathname, type: 'nako3' }
|
|
159
|
+
}
|
|
160
|
+
// ファイル拡張子が未指定の場合
|
|
161
|
+
throw new NakoImportError(`ファイル『${name}』は拡張子が(.nako3|.js|.js.txt|.mjs|.mjs.txt)以外なので取り込めません。`, token.file, token.line)
|
|
162
|
+
}
|
|
163
|
+
})
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* type=なでしこ のスクリプトを自動実行するべきかどうかを返す
|
|
168
|
+
* @returns type=なでしこ のスクリプトを自動実行するべきかどうか
|
|
169
|
+
*/
|
|
170
|
+
checkScriptTagParam (): boolean {
|
|
171
|
+
const scripts = document.querySelectorAll('script')
|
|
172
|
+
for (let i = 0; i < scripts.length; i++) {
|
|
173
|
+
const script = scripts[i]
|
|
174
|
+
const src = script.src || ''
|
|
175
|
+
if (src.indexOf('wnako3.js?run') >= 0 ||
|
|
176
|
+
src.indexOf('wnako3.js&run') >= 0) {
|
|
177
|
+
return true
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
return false
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* 指定したidのHTML要素をなでしこ言語のエディタにする。
|
|
185
|
+
* @param {string | Element} idOrElement HTML要素
|
|
186
|
+
* @see {setupEditor}
|
|
187
|
+
*/
|
|
188
|
+
setupEditor (idOrElement: any) {
|
|
189
|
+
return setupEditor(idOrElement, this, (window as any).ace)
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
function dirname (s: string) {
|
|
194
|
+
const a = s.split('/')
|
|
195
|
+
if (a && a.length > 1) {
|
|
196
|
+
return a.slice(0, a.length - 1).join('/')
|
|
197
|
+
}
|
|
198
|
+
return ''
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
function resolveURL (base: string, s: string) {
|
|
202
|
+
const baseA = base.split('/')
|
|
203
|
+
const sA = s.split('/')
|
|
204
|
+
for (const p of sA) {
|
|
205
|
+
if (p === '') { continue }
|
|
206
|
+
if (p === '.') { continue }
|
|
207
|
+
if (p === '..') {
|
|
208
|
+
baseA.pop()
|
|
209
|
+
continue
|
|
210
|
+
}
|
|
211
|
+
baseA.push(p)
|
|
212
|
+
}
|
|
213
|
+
return baseA.join('/')
|
|
214
|
+
}
|
package/src/wnako3webworker.mjs
CHANGED
|
@@ -1,69 +1,69 @@
|
|
|
1
|
-
// @ts-nocheck
|
|
2
|
-
// nadesiko for web browser worker
|
|
3
|
-
// wwnako3.js
|
|
4
|
-
import { NakoCompiler } from '../core/src/nako3.mjs'
|
|
5
|
-
import PluginBrowserInWorker from './plugin_browser_in_worker.mjs'
|
|
6
|
-
import PluginWorker from './plugin_worker.mjs'
|
|
7
|
-
|
|
8
|
-
class WebWorkerNakoCompiler extends NakoCompiler {
|
|
9
|
-
constructor () {
|
|
10
|
-
super()
|
|
11
|
-
this.__varslist[0]['ナデシコ種類'] = 'wwnako3'
|
|
12
|
-
this.__varslist[0]['PluginWorker:ondata'] = (data, event) => {
|
|
13
|
-
throw new Error('『NAKOワーカーデータ受信時』が呼ばれていません。')
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
// ブラウザワーカーなら navigator.nako3 になでしこを登録
|
|
19
|
-
// eslint-disable-next-line no-undef
|
|
20
|
-
if (typeof (navigator) === 'object' && self && self instanceof WorkerGlobalScope) {
|
|
21
|
-
/** @type {WebWorkerNakoCompiler} */
|
|
22
|
-
const nako3Compiler = navigator.nako3 = new WebWorkerNakoCompiler()
|
|
23
|
-
/** @type {WebWorkerNakoCompiler | import('./nako_global')} */
|
|
24
|
-
let nako3Global = nako3Compiler
|
|
25
|
-
|
|
26
|
-
nako3Compiler.addPluginObject('PluginBrowserInWorker', PluginBrowserInWorker)
|
|
27
|
-
nako3Compiler.addPluginObject('PluginWorker', PluginWorker)
|
|
28
|
-
|
|
29
|
-
nako3Compiler.logger.addListener('error', function (obj) {
|
|
30
|
-
self.postMessage({
|
|
31
|
-
type: 'error',
|
|
32
|
-
data: obj
|
|
33
|
-
})
|
|
34
|
-
}, false)
|
|
35
|
-
|
|
36
|
-
self.onmessage = (event) => {
|
|
37
|
-
const data = event.data || { type: '', data: '' }
|
|
38
|
-
const type = data.type || ''
|
|
39
|
-
const value = data.data || ''
|
|
40
|
-
switch (type) {
|
|
41
|
-
case 'reset':
|
|
42
|
-
nako3Compiler.reset()
|
|
43
|
-
break
|
|
44
|
-
case 'close':
|
|
45
|
-
self.close()
|
|
46
|
-
break
|
|
47
|
-
case 'run':
|
|
48
|
-
nako3Global = nako3Global.runEx(value, '_webworker.nako3', { resetEnv: false, resetLog: false })
|
|
49
|
-
break
|
|
50
|
-
case 'trans':
|
|
51
|
-
value.forEach(o => {
|
|
52
|
-
if (o.type === 'func') {
|
|
53
|
-
nako3Compiler.nako_func[o.name] = o.content.meta
|
|
54
|
-
nako3Compiler.funclist[o.name] = o.content.func
|
|
55
|
-
nako3Compiler.__varslist[1][o.name] = () => {}
|
|
56
|
-
} else if (o.type === 'val') {
|
|
57
|
-
nako3Compiler.__varslist[2][o.name] = o.content
|
|
58
|
-
}
|
|
59
|
-
})
|
|
60
|
-
break
|
|
61
|
-
case 'data':
|
|
62
|
-
if (nako3Global.__varslist[0]['PluginWorker:ondata']) {
|
|
63
|
-
nako3Global.__varslist[0]['PluginWorker:ondata'].apply(nako3Global, [value, event])
|
|
64
|
-
}
|
|
65
|
-
break
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
|
|
1
|
+
// @ts-nocheck
|
|
2
|
+
// nadesiko for web browser worker
|
|
3
|
+
// wwnako3.js
|
|
4
|
+
import { NakoCompiler } from '../core/src/nako3.mjs'
|
|
5
|
+
import PluginBrowserInWorker from './plugin_browser_in_worker.mjs'
|
|
6
|
+
import PluginWorker from './plugin_worker.mjs'
|
|
7
|
+
|
|
8
|
+
class WebWorkerNakoCompiler extends NakoCompiler {
|
|
9
|
+
constructor () {
|
|
10
|
+
super()
|
|
11
|
+
this.__varslist[0]['ナデシコ種類'] = 'wwnako3'
|
|
12
|
+
this.__varslist[0]['PluginWorker:ondata'] = (data, event) => {
|
|
13
|
+
throw new Error('『NAKOワーカーデータ受信時』が呼ばれていません。')
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
// ブラウザワーカーなら navigator.nako3 になでしこを登録
|
|
19
|
+
// eslint-disable-next-line no-undef
|
|
20
|
+
if (typeof (navigator) === 'object' && self && self instanceof WorkerGlobalScope) {
|
|
21
|
+
/** @type {WebWorkerNakoCompiler} */
|
|
22
|
+
const nako3Compiler = navigator.nako3 = new WebWorkerNakoCompiler()
|
|
23
|
+
/** @type {WebWorkerNakoCompiler | import('./nako_global')} */
|
|
24
|
+
let nako3Global = nako3Compiler
|
|
25
|
+
|
|
26
|
+
nako3Compiler.addPluginObject('PluginBrowserInWorker', PluginBrowserInWorker)
|
|
27
|
+
nako3Compiler.addPluginObject('PluginWorker', PluginWorker)
|
|
28
|
+
|
|
29
|
+
nako3Compiler.logger.addListener('error', function (obj) {
|
|
30
|
+
self.postMessage({
|
|
31
|
+
type: 'error',
|
|
32
|
+
data: obj
|
|
33
|
+
})
|
|
34
|
+
}, false)
|
|
35
|
+
|
|
36
|
+
self.onmessage = (event) => {
|
|
37
|
+
const data = event.data || { type: '', data: '' }
|
|
38
|
+
const type = data.type || ''
|
|
39
|
+
const value = data.data || ''
|
|
40
|
+
switch (type) {
|
|
41
|
+
case 'reset':
|
|
42
|
+
nako3Compiler.reset()
|
|
43
|
+
break
|
|
44
|
+
case 'close':
|
|
45
|
+
self.close()
|
|
46
|
+
break
|
|
47
|
+
case 'run':
|
|
48
|
+
nako3Global = nako3Global.runEx(value, '_webworker.nako3', { resetEnv: false, resetLog: false })
|
|
49
|
+
break
|
|
50
|
+
case 'trans':
|
|
51
|
+
value.forEach(o => {
|
|
52
|
+
if (o.type === 'func') {
|
|
53
|
+
nako3Compiler.nako_func[o.name] = o.content.meta
|
|
54
|
+
nako3Compiler.funclist[o.name] = o.content.func
|
|
55
|
+
nako3Compiler.__varslist[1][o.name] = () => {}
|
|
56
|
+
} else if (o.type === 'val') {
|
|
57
|
+
nako3Compiler.__varslist[2][o.name] = o.content
|
|
58
|
+
}
|
|
59
|
+
})
|
|
60
|
+
break
|
|
61
|
+
case 'data':
|
|
62
|
+
if (nako3Global.__varslist[0]['PluginWorker:ondata']) {
|
|
63
|
+
nako3Global.__varslist[0]['PluginWorker:ondata'].apply(nako3Global, [value, event])
|
|
64
|
+
}
|
|
65
|
+
break
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
package/test/.DS_Store
ADDED
|
Binary file
|