nadesiko3 3.6.8 → 3.6.9
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/core/command/plugin_snako.mjs +112 -0
- package/core/command/snako.mjs +114 -0
- package/core/package.json +1 -1
- package/core/sample/hoge.mjs +7 -0
- package/core/src/nako3.mjs +2 -2
- package/core/src/nako3.mts +3 -2
- package/core/src/nako_core_version.mjs +2 -2
- package/core/src/nako_core_version.mts +2 -2
- package/package.json +1 -1
- package/release/_hash.txt +12 -12
- package/release/_script-tags.txt +20 -20
- package/release/version_main.js +1 -1
- package/release/version_main.js.map +1 -1
- package/release/wnako3.js +3 -3
- package/release/wnako3.js.map +2 -2
- package/release/wnako3webworker.js +2 -2
- package/release/wnako3webworker.js.map +2 -2
- package/src/nako_version.mjs +2 -2
- package/src/nako_version.mts +2 -2
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* file: plugin_snako.js
|
|
3
|
+
* 簡単なファイル読み書きのプラグイン
|
|
4
|
+
*/
|
|
5
|
+
import fs from 'node:fs';
|
|
6
|
+
import { execSync } from 'node:child_process';
|
|
7
|
+
import path from 'node:path';
|
|
8
|
+
export default {
|
|
9
|
+
'meta': {
|
|
10
|
+
type: 'const',
|
|
11
|
+
value: {
|
|
12
|
+
pluginName: 'plugin_snako',
|
|
13
|
+
description: '最小の機能を提供するプラグイン',
|
|
14
|
+
pluginVersion: '3.6.3',
|
|
15
|
+
nakoRuntime: ['cnako'],
|
|
16
|
+
nakoVersion: '3.6.3' // 要求なでしこバージョン
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
'初期化': {
|
|
20
|
+
type: 'func',
|
|
21
|
+
josi: [],
|
|
22
|
+
pure: true,
|
|
23
|
+
fn: function (sys) {
|
|
24
|
+
sys.__getBokanPath = () => {
|
|
25
|
+
let nakofile;
|
|
26
|
+
const cmd = path.basename(process.argv[1]);
|
|
27
|
+
if (cmd.indexOf('snako') < 0) {
|
|
28
|
+
nakofile = process.argv[1];
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
nakofile = process.argv[2];
|
|
32
|
+
}
|
|
33
|
+
return path.dirname(path.resolve(nakofile));
|
|
34
|
+
};
|
|
35
|
+
sys.__setSysVar('コマンドライン', process.argv);
|
|
36
|
+
sys.__setSysVar('ナデシコランタイムパス', process.argv[0]);
|
|
37
|
+
sys.__setSysVar('ナデシコランタイム', path.basename(process.argv[0]));
|
|
38
|
+
sys.__setSysVar('母艦パス', sys.__getBokanPath());
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
// @SNAKO
|
|
42
|
+
'コマンドライン': { type: 'const', value: '' },
|
|
43
|
+
'ナデシコランタイムパス': { type: 'const', value: '' },
|
|
44
|
+
'ナデシコランタイム': { type: 'const', value: '' },
|
|
45
|
+
'母艦パス': { type: 'const', value: '' },
|
|
46
|
+
'読': {
|
|
47
|
+
type: 'func',
|
|
48
|
+
josi: [['を', 'から']],
|
|
49
|
+
pure: true,
|
|
50
|
+
fn: function (f) {
|
|
51
|
+
return '' + fs.readFileSync(f);
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
'開': {
|
|
55
|
+
type: 'func',
|
|
56
|
+
josi: [['を', 'から']],
|
|
57
|
+
pure: true,
|
|
58
|
+
fn: function (f) {
|
|
59
|
+
return '' + fs.readFileSync(f);
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
'保存': {
|
|
63
|
+
type: 'func',
|
|
64
|
+
josi: [['を'], ['に', 'へ']],
|
|
65
|
+
pure: true,
|
|
66
|
+
fn: function (s, f) {
|
|
67
|
+
fs.writeFileSync(f, s, 'utf-8');
|
|
68
|
+
},
|
|
69
|
+
return_none: true
|
|
70
|
+
},
|
|
71
|
+
'起動待機': {
|
|
72
|
+
type: 'func',
|
|
73
|
+
josi: [['を']],
|
|
74
|
+
pure: true,
|
|
75
|
+
fn: function (s) {
|
|
76
|
+
const r = execSync(s);
|
|
77
|
+
return r.toString();
|
|
78
|
+
}
|
|
79
|
+
},
|
|
80
|
+
'ファイル名抽出': {
|
|
81
|
+
type: 'func',
|
|
82
|
+
josi: [['から', 'の']],
|
|
83
|
+
pure: true,
|
|
84
|
+
fn: function (s) {
|
|
85
|
+
return path.basename(s);
|
|
86
|
+
}
|
|
87
|
+
},
|
|
88
|
+
'パス抽出': {
|
|
89
|
+
type: 'func',
|
|
90
|
+
josi: [['から', 'の']],
|
|
91
|
+
pure: true,
|
|
92
|
+
fn: function (s) {
|
|
93
|
+
return path.dirname(s);
|
|
94
|
+
}
|
|
95
|
+
},
|
|
96
|
+
'絶対パス変換': {
|
|
97
|
+
type: 'func',
|
|
98
|
+
josi: [['を', 'の']],
|
|
99
|
+
pure: true,
|
|
100
|
+
fn: function (a) {
|
|
101
|
+
return path.resolve(a);
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
'相対パス展開': {
|
|
105
|
+
type: 'func',
|
|
106
|
+
josi: [['を'], ['で']],
|
|
107
|
+
pure: true,
|
|
108
|
+
fn: function (a, b) {
|
|
109
|
+
return path.resolve(path.join(a, b));
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
};
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
#!/usr/bin/env node --no-warnings=ExperimentalWarning --loader ts-node/esm
|
|
2
|
+
import fs from 'node:fs';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import com from '../index.mjs';
|
|
5
|
+
import { argv as nodejs_argv } from 'node:process';
|
|
6
|
+
import * as url from 'node:url';
|
|
7
|
+
import { NakoGenOptions } from '../src/nako_gen.mjs';
|
|
8
|
+
import PluginSnako from './plugin_snako.mjs';
|
|
9
|
+
const __dirname = url.fileURLToPath(new URL('.', import.meta.url));
|
|
10
|
+
/** コマンドラインオプション */
|
|
11
|
+
class CommandOptions {
|
|
12
|
+
isDebug;
|
|
13
|
+
filename;
|
|
14
|
+
nodePath;
|
|
15
|
+
scriptPath;
|
|
16
|
+
evalStr;
|
|
17
|
+
flagConvert;
|
|
18
|
+
constructor() {
|
|
19
|
+
this.nodePath = '';
|
|
20
|
+
this.scriptPath = '';
|
|
21
|
+
this.filename = '';
|
|
22
|
+
this.evalStr = '';
|
|
23
|
+
this.isDebug = false;
|
|
24
|
+
this.flagConvert = false;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/** メイン処理 */
|
|
28
|
+
async function main(argvOrg) {
|
|
29
|
+
// コマンドラインオプションを確認
|
|
30
|
+
const argv = [...argvOrg];
|
|
31
|
+
const opt = new CommandOptions();
|
|
32
|
+
opt.nodePath = argv.shift() || '';
|
|
33
|
+
opt.scriptPath = argv.shift() || '';
|
|
34
|
+
while (argv.length > 0) {
|
|
35
|
+
const arg = argv.shift() || '';
|
|
36
|
+
if (arg === '-d' || arg === '--debug') {
|
|
37
|
+
opt.isDebug = true;
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
if (arg === '-e' || arg === '--eval') {
|
|
41
|
+
opt.evalStr = argv.shift() || '';
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
if (arg === '-c' || arg === '--convert') {
|
|
45
|
+
opt.flagConvert = true;
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
if (opt.filename === '') {
|
|
49
|
+
opt.filename = arg;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
// なでしこのコンパイラを生成
|
|
53
|
+
const nako = new com.NakoCompiler();
|
|
54
|
+
nako.addPluginObject('PluginSnako', PluginSnako);
|
|
55
|
+
// 実行前にイベントを挟みたいとき
|
|
56
|
+
nako.addListener('beforeRun', (g) => {
|
|
57
|
+
g.__varslist[0].set('ナデシコ種類', 'snako');
|
|
58
|
+
});
|
|
59
|
+
// logger を設定 --- リスナーを登録することでデバッグレベルを指定
|
|
60
|
+
const logger = nako.getLogger();
|
|
61
|
+
if (opt.isDebug) {
|
|
62
|
+
logger.addListener('trace', (data) => {
|
|
63
|
+
console.log(data.nodeConsole);
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
logger.addListener('stdout', (data) => {
|
|
67
|
+
console.log(data.noColor);
|
|
68
|
+
});
|
|
69
|
+
// -e オプションを実行したとき
|
|
70
|
+
if (opt.evalStr) {
|
|
71
|
+
await nako.runAsync(opt.evalStr, 'main.nako3');
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
// パラメータが空だったとき
|
|
75
|
+
if (opt.filename === '') {
|
|
76
|
+
showHelp();
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
// ソースコードをファイルから読み込む
|
|
80
|
+
const code = fs.readFileSync(opt.filename, 'utf-8');
|
|
81
|
+
// -c オプションが指定されたとき
|
|
82
|
+
if (opt.flagConvert) {
|
|
83
|
+
convert(nako, code, opt);
|
|
84
|
+
}
|
|
85
|
+
// 実行
|
|
86
|
+
await nako.runAsync(code, opt.filename);
|
|
87
|
+
}
|
|
88
|
+
// -c オプションを指定したとき
|
|
89
|
+
function convert(nako, code, opt) {
|
|
90
|
+
// オプションを指定
|
|
91
|
+
const genOpt = new NakoGenOptions(false, ['nako_errors.mjs', 'nako_core_version.mjs', 'plugin_system.mjs'], '__self.__varslist[0].set(\'ナデシコ種類\', \'snako\')');
|
|
92
|
+
// スタンドアロンコードを生成
|
|
93
|
+
const js = nako.compileStandalone(code, opt.filename, genOpt);
|
|
94
|
+
const jsFilename = opt.filename + '.js';
|
|
95
|
+
fs.writeFileSync(jsFilename, js, { encoding: 'utf-8' });
|
|
96
|
+
// 必要なライブラリをコピー
|
|
97
|
+
const runtimeDir = path.join(path.dirname(jsFilename), 'nako3runtime');
|
|
98
|
+
const srcDir = path.join(__dirname, '..', 'src');
|
|
99
|
+
if (!fs.existsSync(runtimeDir)) {
|
|
100
|
+
fs.mkdirSync(runtimeDir);
|
|
101
|
+
}
|
|
102
|
+
for (const f of genOpt.importFiles) {
|
|
103
|
+
fs.copyFileSync(path.join(srcDir, f), path.join(runtimeDir, f));
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
/** 使い方を表示 */
|
|
107
|
+
function showHelp() {
|
|
108
|
+
console.log('●なでしこ(簡易版) # v.' + com.version.version);
|
|
109
|
+
console.log('[使い方] node snako.mjs [--debug|-d] (filename)');
|
|
110
|
+
console.log('[使い方] node snako.mjs [--eval|-e] (source)');
|
|
111
|
+
console.log('[使い方] node snako.mjs [-c] (source) ... convert');
|
|
112
|
+
}
|
|
113
|
+
/** メイン処理を実行 */
|
|
114
|
+
main(nodejs_argv);
|
package/core/package.json
CHANGED
package/core/src/nako3.mjs
CHANGED
|
@@ -85,8 +85,8 @@ export class NakoCompiler {
|
|
|
85
85
|
this.lexer.setFuncList(this.funclist);
|
|
86
86
|
this.lexer.setModuleExport(this.moduleExport);
|
|
87
87
|
// link for plysin_system::予約語一覧取得/助詞一覧取得
|
|
88
|
-
this.reservedWords = this.lexer.reservedWords;
|
|
89
|
-
this.josiList = this.lexer.josiList;
|
|
88
|
+
this.reservedWords = JSON.parse(JSON.stringify(this.lexer.reservedWords)); // 外部公開用のデータなので複製して保持する
|
|
89
|
+
this.josiList = JSON.parse(JSON.stringify(this.lexer.josiList));
|
|
90
90
|
}
|
|
91
91
|
/** モジュール(名前空間)の一覧を取得する */
|
|
92
92
|
getModList() {
|
package/core/src/nako3.mts
CHANGED
|
@@ -159,9 +159,10 @@ export class NakoCompiler {
|
|
|
159
159
|
// 関数一覧を設定
|
|
160
160
|
this.lexer.setFuncList(this.funclist)
|
|
161
161
|
this.lexer.setModuleExport(this.moduleExport)
|
|
162
|
+
|
|
162
163
|
// link for plysin_system::予約語一覧取得/助詞一覧取得
|
|
163
|
-
this.reservedWords = this.lexer.reservedWords
|
|
164
|
-
this.josiList = this.lexer.josiList
|
|
164
|
+
this.reservedWords = JSON.parse(JSON.stringify(this.lexer.reservedWords)) // 外部公開用のデータなので複製して保持する
|
|
165
|
+
this.josiList = JSON.parse(JSON.stringify(this.lexer.josiList))
|
|
165
166
|
}
|
|
166
167
|
|
|
167
168
|
/** モジュール(名前空間)の一覧を取得する */
|
package/package.json
CHANGED
package/release/_hash.txt
CHANGED
|
@@ -84,17 +84,17 @@ version.js:
|
|
|
84
84
|
sha256(base64): Q7iWMzjAsyPLlmEJxtzb112R+2ghvBYLMEynLvkCpFY=
|
|
85
85
|
sha512(base64): Xy8RMyAkohHiIXAKfISKFZTnAAHK1dLZWOV2kU15Hx/r6fpZOtHt7j4okKPgKOZoGs/BLozy8YS5nIU/Sfk/2g==
|
|
86
86
|
version_main.js:
|
|
87
|
-
md5(hex):
|
|
88
|
-
sha256(hex):
|
|
89
|
-
sha256(base64):
|
|
90
|
-
sha512(base64):
|
|
87
|
+
md5(hex): aa9ff0a804dcd29812959dfcd1b56e46
|
|
88
|
+
sha256(hex): 72778f675b30b035d9c7adaf173567ba759f0f4068a0640a3991aa2581b170fe
|
|
89
|
+
sha256(base64): cnePZ1swsDXZx62vFzVnunWfD0BooGQKOZGqJYGxcP4=
|
|
90
|
+
sha512(base64): GBZbCqacmFhttCJKlGIelRRunW1X/KJj2J49MCqgLwJPXrCG4A7XV+lMxnfJfTelxK2mVPaxPWEZXwpYbVTe7g==
|
|
91
91
|
wnako3.js:
|
|
92
|
-
md5(hex):
|
|
93
|
-
sha256(hex):
|
|
94
|
-
sha256(base64):
|
|
95
|
-
sha512(base64):
|
|
92
|
+
md5(hex): a9760502e2de9976a8c3730013c7a67c
|
|
93
|
+
sha256(hex): ab28236d512bd639acedaf1ed611cacc849d3d4f57c415e09094222104944050
|
|
94
|
+
sha256(base64): qygjbVEr1jms7a8e1hHKzISdPU9XxBXgkJQiIQSUQFA=
|
|
95
|
+
sha512(base64): oTGn4LbcVyEMxQRiQLrQGcUt22xH3fcoj8fFlISPH7gbjkDWUC4M3QsSrj11GKwBQPN4focGhl4miKUn5wgL9A==
|
|
96
96
|
wnako3webworker.js:
|
|
97
|
-
md5(hex):
|
|
98
|
-
sha256(hex):
|
|
99
|
-
sha256(base64):
|
|
100
|
-
sha512(base64):
|
|
97
|
+
md5(hex): aeef039f9830c81dbd2fbd7003f49f86
|
|
98
|
+
sha256(hex): eab26a501c7163fec72ed2be492c2431a11889adf4c0cfc14f45a2c4ff95f9df
|
|
99
|
+
sha256(base64): 6rJqUBxxY/7HLtK+SSwkMaEYia30wM/BT0WixP+V+d8=
|
|
100
|
+
sha512(base64): G/11XuyLs8/XPhzAdsORCkORBzQrmxjKX84t2zin6N6fKjD4H88dOpTQVGkClRWNqkwGOgR40hQvCNrX+Q4M9w==
|
package/release/_script-tags.txt
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
<script defer src="https://nadesi.com/v3/cdn.php?v=3.6.
|
|
2
|
-
<script defer src="https://nadesi.com/v3/cdn.php?v=3.6.
|
|
3
|
-
<script defer src="https://nadesi.com/v3/cdn.php?v=3.6.
|
|
4
|
-
<script defer src="https://nadesi.com/v3/cdn.php?v=3.6.
|
|
5
|
-
<script defer src="https://nadesi.com/v3/cdn.php?v=3.6.
|
|
6
|
-
<script defer src="https://nadesi.com/v3/cdn.php?v=3.6.
|
|
7
|
-
<script defer src="https://nadesi.com/v3/cdn.php?v=3.6.
|
|
8
|
-
<script defer src="https://nadesi.com/v3/cdn.php?v=3.6.
|
|
9
|
-
<script defer src="https://nadesi.com/v3/cdn.php?v=3.6.
|
|
10
|
-
<script defer src="https://nadesi.com/v3/cdn.php?v=3.6.
|
|
11
|
-
<script defer src="https://nadesi.com/v3/cdn.php?v=3.6.
|
|
12
|
-
<script defer src="https://nadesi.com/v3/cdn.php?v=3.6.
|
|
13
|
-
<script defer src="https://nadesi.com/v3/cdn.php?v=3.6.
|
|
14
|
-
<script defer src="https://nadesi.com/v3/cdn.php?v=3.6.
|
|
15
|
-
<script defer src="https://nadesi.com/v3/cdn.php?v=3.6.
|
|
16
|
-
<script defer src="https://nadesi.com/v3/cdn.php?v=3.6.
|
|
17
|
-
<script defer src="https://nadesi.com/v3/cdn.php?v=3.6.
|
|
18
|
-
<script defer src="https://nadesi.com/v3/cdn.php?v=3.6.
|
|
19
|
-
<script defer src="https://nadesi.com/v3/cdn.php?v=3.6.
|
|
20
|
-
<script defer src="https://nadesi.com/v3/cdn.php?v=3.6.
|
|
1
|
+
<script defer src="https://nadesi.com/v3/cdn.php?v=3.6.9&f=release/command.json.js" integrity="sha512-tw3Ekhmb5CbA1OCr2zrzJgckcHHjYKBFH+5AZ2NQExb7yjQ6QXrUxZ0+6kE5MhBRBWPWLAp3OK6s0OpYHLGDhA==" crossorigin="anonymous"></script>
|
|
2
|
+
<script defer src="https://nadesi.com/v3/cdn.php?v=3.6.9&f=release/core_src_nako_josi_list_mjs.js" integrity="sha512-0+LAeEfPy2Lrl+DeJMjbBIUda9Y5ttpLGy3/FW8rjSW8bN3udrALJa5V/bhjxU7mYouumV/QGN2wt3oxMCKy9g==" crossorigin="anonymous"></script>
|
|
3
|
+
<script defer src="https://nadesi.com/v3/cdn.php?v=3.6.9&f=release/core_src_nako_reserved_words_mjs.js" integrity="sha512-UzZigh2tIhgBO3+Sp1wnqKMvAGfhqSRdH2+ffmRy4+8CVNEeepddaDV0oKJ+vyvi28zQLmXeMsjRu+Frj3YlTg==" crossorigin="anonymous"></script>
|
|
4
|
+
<script defer src="https://nadesi.com/v3/cdn.php?v=3.6.9&f=release/edit_main.js" integrity="sha512-nCzb2xG7wJkltOa2M4SPg4k5Xz05Q7G8szUCRbEO5cfzrkrHG+r1Hkvm7+wQ7cQ85seqcAFgnCeRthkoxcXHTw==" crossorigin="anonymous"></script>
|
|
5
|
+
<script defer src="https://nadesi.com/v3/cdn.php?v=3.6.9&f=release/editor.js" integrity="sha512-60RfvbeW58u/tKFDLZxjYlxeMCCqE2vx+zp969gt/Ed9gvyUQnNb2o8jR5ePaW253JI+WlJy2uaC2kpAqfq59A==" crossorigin="anonymous"></script>
|
|
6
|
+
<script defer src="https://nadesi.com/v3/cdn.php?v=3.6.9&f=release/nako_gen_async.js" integrity="sha512-/73lycspxJ921s+NmqaOKF58X9rCsgEZrZT4O4sW1aCe5CSXtQevIasAoGgIoL3a5RmlaghbaIVASwAgmoE3+g==" crossorigin="anonymous"></script>
|
|
7
|
+
<script defer src="https://nadesi.com/v3/cdn.php?v=3.6.9&f=release/plugin_caniuse.js" integrity="sha512-V6nOBHnhxPChu+S/LfB7elCeBk985ukLmBmkCyPk4ai5VfoJZuOIttg72PbZSxWfP5eQTrlLNajsorfwNw/vcA==" crossorigin="anonymous"></script>
|
|
8
|
+
<script defer src="https://nadesi.com/v3/cdn.php?v=3.6.9&f=release/plugin_datetime.js" integrity="sha512-ofb5jVaHjjTRoCAmHnbewc2fS8vr1oEkX/B3WoOCjYpDnZ3nnl3EDz6fdAS8CFFzGvuekCk2RFN5BuM9kX6FAg==" crossorigin="anonymous"></script>
|
|
9
|
+
<script defer src="https://nadesi.com/v3/cdn.php?v=3.6.9&f=release/plugin_kansuji.js" integrity="sha512-N+S8Th1yCiQy3q5jh0TFvlTOtrWNE82a4UJZ9O3ml3BGBYA141bpWlJR5c34dObTe1prbLJZ7v5WvV0vnDnr9A==" crossorigin="anonymous"></script>
|
|
10
|
+
<script defer src="https://nadesi.com/v3/cdn.php?v=3.6.9&f=release/plugin_keigo.js" integrity="sha512-u067+CeBvMb6+oINFY9Wz77GBk4NSxS2+k35GJ3RsFFmphJliwzwmV2ceID0gZ4mbjJ0xJHQX9WIypiyI6yfdA==" crossorigin="anonymous"></script>
|
|
11
|
+
<script defer src="https://nadesi.com/v3/cdn.php?v=3.6.9&f=release/plugin_markup.js" integrity="sha512-XmP8FPW17hFb5Ar0s12bAehE4sD+bbk4SQc08Fp2qjsuL0itHy5VzSsRS+KV3t3ShjCOhnbaMLKnDFGAdYGroA==" crossorigin="anonymous"></script>
|
|
12
|
+
<script defer src="https://nadesi.com/v3/cdn.php?v=3.6.9&f=release/plugin_three.js" integrity="sha512-4loRkhlxZ9A9v5t3sk5VECW7T33axIVbBQgwkNdgcjk03yRqAvxut5OS4n3BBS4jnWWHOE3i0vj9qxOOp4uV3Q==" crossorigin="anonymous"></script>
|
|
13
|
+
<script defer src="https://nadesi.com/v3/cdn.php?v=3.6.9&f=release/plugin_toml.js" integrity="sha512-Z4JmOCY66VuyoD8m4dCzKttEbCTEUfqyuqlmcOhs69m/88skKcPYWXi+4W+Td5LdI3xqezn4BkN32F9ZkPzUpQ==" crossorigin="anonymous"></script>
|
|
14
|
+
<script defer src="https://nadesi.com/v3/cdn.php?v=3.6.9&f=release/plugin_turtle.js" integrity="sha512-ce8etr+HoC+UjUyXSgxJzy3+pOYhsBdt9jDzhks2H/eEPQ1gIz7M8hoeyP0223zLLZHBBzlHiL/a6mmJdoKQ+w==" crossorigin="anonymous"></script>
|
|
15
|
+
<script defer src="https://nadesi.com/v3/cdn.php?v=3.6.9&f=release/plugin_webworker.js" integrity="sha512-6UHX2dgMPRY4BuIxLXaERKaA8Wg5eK2pWy+OysU0/+gt2E15M7K5Vr8+4CQt6hylWnmzmJQJfgObIr+yjW5kPw==" crossorigin="anonymous"></script>
|
|
16
|
+
<script defer src="https://nadesi.com/v3/cdn.php?v=3.6.9&f=release/plugin_weykturtle3d.js" integrity="sha512-ONFdombPCdgdnXs7VMUAHpe8IBvTuLzSgzmERf1jEhHo4l06wDpkpRRCk3/9a1hiXRHQ+le2LZBT7XH4VA27sQ==" crossorigin="anonymous"></script>
|
|
17
|
+
<script defer src="https://nadesi.com/v3/cdn.php?v=3.6.9&f=release/version.js" integrity="sha512-Xy8RMyAkohHiIXAKfISKFZTnAAHK1dLZWOV2kU15Hx/r6fpZOtHt7j4okKPgKOZoGs/BLozy8YS5nIU/Sfk/2g==" crossorigin="anonymous"></script>
|
|
18
|
+
<script defer src="https://nadesi.com/v3/cdn.php?v=3.6.9&f=release/version_main.js" integrity="sha512-GBZbCqacmFhttCJKlGIelRRunW1X/KJj2J49MCqgLwJPXrCG4A7XV+lMxnfJfTelxK2mVPaxPWEZXwpYbVTe7g==" crossorigin="anonymous"></script>
|
|
19
|
+
<script defer src="https://nadesi.com/v3/cdn.php?v=3.6.9&f=release/wnako3.js" integrity="sha512-oTGn4LbcVyEMxQRiQLrQGcUt22xH3fcoj8fFlISPH7gbjkDWUC4M3QsSrj11GKwBQPN4focGhl4miKUn5wgL9A==" crossorigin="anonymous"></script>
|
|
20
|
+
<script defer src="https://nadesi.com/v3/cdn.php?v=3.6.9&f=release/wnako3webworker.js" integrity="sha512-G/11XuyLs8/XPhzAdsORCkORBzQrmxjKX84t2zin6N6fKjD4H88dOpTQVGkClRWNqkwGOgR40hQvCNrX+Q4M9w==" crossorigin="anonymous"></script>
|