nadesiko3 3.7.2 → 3.7.4

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.
Files changed (159) hide show
  1. package/batch/command.txt +472 -469
  2. package/batch/pickup_command.nako3 +1 -1
  3. package/core/.eslintrc.cjs +10 -3
  4. package/core/package-lock.json +1184 -645
  5. package/core/package.json +4 -5
  6. package/core/src/nako3.mjs +8 -6
  7. package/core/src/nako3.mts +19 -16
  8. package/core/src/nako_ast.mts +2 -3
  9. package/core/src/nako_core_version.mjs +2 -2
  10. package/core/src/nako_core_version.mts +2 -2
  11. package/core/src/nako_csv.mjs +1 -0
  12. package/core/src/nako_csv.mts +3 -2
  13. package/core/src/nako_from_dncl.mjs +1 -1
  14. package/core/src/nako_from_dncl.mts +1 -1
  15. package/core/src/nako_from_dncl2.mjs +1 -1
  16. package/core/src/nako_from_dncl2.mts +2 -2
  17. package/core/src/nako_gen.mjs +37 -35
  18. package/core/src/nako_gen.mts +70 -67
  19. package/core/src/nako_global.mjs +3 -2
  20. package/core/src/nako_global.mts +3 -2
  21. package/core/src/nako_lexer.mjs +3 -3
  22. package/core/src/nako_lexer.mts +3 -3
  23. package/core/src/nako_logger.mjs +1 -1
  24. package/core/src/nako_logger.mts +2 -2
  25. package/core/src/nako_parser3.mjs +67 -59
  26. package/core/src/nako_parser3.mts +96 -90
  27. package/core/src/nako_parser_base.mts +3 -3
  28. package/core/src/nako_prepare.mjs +1 -1
  29. package/core/src/nako_prepare.mts +1 -1
  30. package/core/src/nako_source_mapping.mts +0 -1
  31. package/core/src/nako_token.mts +8 -8
  32. package/core/src/nako_types.mts +1 -1
  33. package/core/src/plugin_api.mts +1 -1
  34. package/core/src/plugin_csv.mjs +1 -0
  35. package/core/src/plugin_csv.mts +2 -1
  36. package/core/src/plugin_math.mjs +2 -2
  37. package/core/src/plugin_math.mts +3 -3
  38. package/core/src/plugin_promise.mjs +1 -1
  39. package/core/src/plugin_promise.mts +1 -1
  40. package/core/src/plugin_system.mjs +117 -40
  41. package/core/src/plugin_system.mts +132 -58
  42. package/core/src/plugin_test.mjs +3 -1
  43. package/core/src/plugin_test.mts +3 -1
  44. package/core/test/basic_test.mjs +16 -0
  45. package/core/test/calc_test.mjs +7 -0
  46. package/core/test/plugin_system_test.mjs +33 -0
  47. package/doc/files.md +4 -4
  48. package/doc/plugins.md +1 -1
  49. package/package.json +9 -9
  50. package/release/_hash.txt +36 -121
  51. package/release/_script-tags.txt +16 -33
  52. package/release/command.json +1 -1
  53. package/release/command.json.js +1 -1
  54. package/release/command_cnako3.json +1 -1
  55. package/release/command_list.json +1 -1
  56. package/release/edit_main.js +3 -3
  57. package/release/edit_main.js.map +2 -2
  58. package/release/editor.js +3 -3
  59. package/release/plugin_markup.js +53 -53
  60. package/release/plugin_markup.js.map +3 -3
  61. package/release/plugin_weykturtle3d.js +1 -1
  62. package/release/plugin_weykturtle3d.js.map +4 -4
  63. package/release/version.js +3 -3
  64. package/release/version_main.js +3 -3
  65. package/release/version_main.js.map +2 -2
  66. package/release/wnako3.js +66 -66
  67. package/release/wnako3.js.map +3 -3
  68. package/release/wnako3webworker.js +58 -58
  69. package/release/wnako3webworker.js.map +3 -3
  70. package/src/browsers.txt +30 -20
  71. package/src/cnako3mod.mjs +19 -18
  72. package/src/cnako3mod.mts +17 -16
  73. package/src/deno_wrapper.mjs +6 -6
  74. package/src/deno_wrapper.mts +11 -11
  75. package/src/nako_version.mjs +2 -2
  76. package/src/nako_version.mts +2 -2
  77. package/src/plugin_browser.mjs +2 -2
  78. package/src/plugin_browser.mts +5 -5
  79. package/src/plugin_browser_ajax.mjs +2 -2
  80. package/src/plugin_browser_ajax.mts +2 -2
  81. package/src/plugin_browser_api.mts +0 -1
  82. package/src/plugin_browser_crypto.mjs +8 -8
  83. package/src/plugin_browser_crypto.mts +13 -13
  84. package/src/plugin_browser_dom_basic.mjs +3 -3
  85. package/src/plugin_browser_dom_basic.mts +5 -7
  86. package/src/plugin_browser_dom_event.mjs +1 -1
  87. package/src/plugin_browser_dom_event.mts +2 -1
  88. package/src/plugin_browser_dom_parts.mjs +33 -18
  89. package/src/plugin_browser_dom_parts.mts +60 -59
  90. package/src/plugin_browser_speech.mjs +1 -1
  91. package/src/plugin_browser_speech.mts +1 -1
  92. package/src/plugin_node.mjs +5 -3
  93. package/src/plugin_node.mts +6 -4
  94. package/src/plugin_weykturtle3d.mjs +38 -15
  95. package/src/plugin_weykturtle3d.mts +279 -240
  96. package/src/plugin_weykturtle3d_three.mjs +3 -0
  97. package/src/plugin_weykturtle3d_three.mts +214 -0
  98. package/src/plugin_weykturtle3d_threeutil.mjs +28 -0
  99. package/src/plugin_weykturtle3d_threeutil.mts +31 -0
  100. package/src/wnako3.mjs +1 -0
  101. package/src/wnako3.mts +1 -0
  102. package/src/wnako3mod.mjs +5 -2
  103. package/src/wnako3mod.mts +6 -3
  104. package/batch/command_nakopad.txt +0 -1177
  105. package/core/__report.txt +0 -617
  106. package/core/command/plugin_snako.mjs +0 -112
  107. package/core/command/snako.mjs +0 -108
  108. package/release/core_src_nako_josi_list_mjs.js +0 -3
  109. package/release/core_src_nako_josi_list_mjs.js.LICENSE.txt +0 -3
  110. package/release/core_src_nako_josi_list_mjs.js.map +0 -1
  111. package/release/core_src_nako_reserved_words_mjs.js +0 -3
  112. package/release/core_src_nako_reserved_words_mjs.js.LICENSE.txt +0 -3
  113. package/release/core_src_nako_reserved_words_mjs.js.map +0 -1
  114. package/release/editor/edit_main.js +0 -48
  115. package/release/editor/edit_main.js.map +0 -7
  116. package/release/editor/version_main.js +0 -44
  117. package/release/editor/version_main.js.map +0 -7
  118. package/release/editor.js.LICENSE.txt +0 -91
  119. package/release/editor.js.map +0 -1
  120. package/release/nako_gen_async.js +0 -2
  121. package/release/nako_gen_async.js.LICENSE.txt +0 -21
  122. package/release/nako_gen_async.js.map +0 -1
  123. package/release/plugin_caniuse.js.LICENSE.txt +0 -15
  124. package/release/plugin_datetime.js.LICENSE.txt +0 -21
  125. package/release/plugin_kansuji.js.LICENSE.txt +0 -3
  126. package/release/plugin_markup.js.LICENSE.txt +0 -15
  127. package/release/plugin_toml.js +0 -295
  128. package/release/plugin_toml.js.map +0 -7
  129. package/release/plugin_turtle.js.LICENSE.txt +0 -9
  130. package/release/plugin_webworker.js.LICENSE.txt +0 -3
  131. package/release/plugin_weykturtle3d.js.LICENSE.txt +0 -3
  132. package/release/src/plugin_caniuse.js +0 -2
  133. package/release/src/plugin_caniuse.js.map +0 -7
  134. package/release/src/plugin_datetime.js +0 -2
  135. package/release/src/plugin_datetime.js.map +0 -7
  136. package/release/src/plugin_kansuji.js +0 -2
  137. package/release/src/plugin_kansuji.js.map +0 -7
  138. package/release/src/plugin_keigo.js +0 -2
  139. package/release/src/plugin_keigo.js.map +0 -7
  140. package/release/src/plugin_markup.js +0 -64
  141. package/release/src/plugin_markup.js.map +0 -7
  142. package/release/src/plugin_three.js +0 -2
  143. package/release/src/plugin_three.js.map +0 -7
  144. package/release/src/plugin_turtle.js +0 -2
  145. package/release/src/plugin_turtle.js.map +0 -7
  146. package/release/src/plugin_webworker.js +0 -4
  147. package/release/src/plugin_webworker.js.map +0 -7
  148. package/release/src/plugin_weykturtle3d.js +0 -2
  149. package/release/src/plugin_weykturtle3d.js.map +0 -7
  150. package/release/src/wnako3.js +0 -482
  151. package/release/src/wnako3.js.map +0 -7
  152. package/release/src/wnako3webworker.js +0 -428
  153. package/release/src/wnako3webworker.js.map +0 -7
  154. package/release/stats.json +0 -1
  155. package/release/version.js.LICENSE.txt +0 -65
  156. package/release/version.js.map +0 -1
  157. package/release/wnako3.js.LICENSE.txt +0 -341
  158. package/release/wnako3webworker.js.LICENSE.txt +0 -209
  159. package/src/plugin_three.mts +0 -240
@@ -296,6 +296,7 @@ export default {
296
296
  rows = s;
297
297
  }
298
298
  // 入力項目に合わせて行を追加
299
+ // eslint-disable-next-line @typescript-eslint/no-for-in-array
299
300
  for (const rowIndex in rows) {
300
301
  const row = rows[rowIndex];
301
302
  let cols;
@@ -421,8 +422,7 @@ export default {
421
422
  lbl2.innerHTML = ' ' + sys.__tohtmlQ(opt2);
422
423
  lbl2.htmlFor = inp.id;
423
424
  }
424
- // v3.2.33での拡張
425
- else if (val === '?送信' || val === '?submit') {
425
+ else if (val === '?送信' || val === '?submit') { // v3.2.33での拡張
426
426
  inp.type = 'submit';
427
427
  inp.value = val.substring(1);
428
428
  if (key !== '') {
@@ -533,43 +533,58 @@ export default {
533
533
  const rr = [];
534
534
  const rows = aa.split('\n');
535
535
  for (const row of rows) {
536
- rr.push(row.split(","));
536
+ rr.push(row.split(','));
537
537
  }
538
538
  aa = rr;
539
539
  }
540
- const domOption = sys.__getSysVar("DOM部品オプション");
541
- const bgColor = JSON.parse(JSON.stringify(domOption["テーブル背景色"])); // 複製して使う
542
- const hasHeader = domOption["テーブルヘッダ"];
543
- const isNumRight = domOption["テーブル数値右寄せ"];
540
+ const table = tbl;
541
+ // テーブル作成/テーブル更新の設定を読み取る
542
+ const domOption = sys.__getSysVar('DOM部品オプション');
543
+ // 背景色は複製して使う
544
+ const bgColor = JSON.parse(JSON.stringify(domOption['テーブル背景色']));
544
545
  for (let i = 0; i < 3; i++) {
545
- bgColor.push("");
546
+ bgColor.push('');
546
547
  }
547
- const bgHead = bgColor.shift() || "";
548
- const table = tbl;
548
+ const bgHead = bgColor.shift() || '';
549
+ let hasHeader = domOption['テーブルヘッダ'];
550
+ let isNumRight = domOption['テーブル数値右寄せ'];
551
+ if (table.dataset.nakoTags) {
552
+ // 既存DOMから設定を読む
553
+ hasHeader = table.dataset.nakoTags.hasHeader;
554
+ isNumRight = table.dataset.nakoTags.isNumRight;
555
+ }
556
+ else {
557
+ // 設定をDOMに保存する
558
+ table.dataset.nakoTags = {
559
+ hasHeader,
560
+ isNumRight
561
+ };
562
+ }
563
+ // テーブルにデータを追加していく
549
564
  for (let i = 0; i < aa.length; i++) {
550
565
  const rowNo = i;
551
566
  const row = aa[rowNo];
552
- const tr = document.createElement("tr");
567
+ const tr = document.createElement('tr');
553
568
  // 色指定
554
- if (bgHead !== "") {
569
+ if (bgHead !== '') {
555
570
  const no = hasHeader ? rowNo : rowNo + 1;
556
571
  tr.style.backgroundColor = no === 0 ? bgHead : bgColor[no % 2];
557
- tr.style.color = no === 0 ? "white" : "black";
572
+ tr.style.color = no === 0 ? 'white' : 'black';
558
573
  }
559
574
  for (let col of row) {
560
- col = "" + col;
561
- const td = document.createElement(rowNo === 0 && hasHeader ? "th" : "td");
575
+ col = '' + col;
576
+ const td = document.createElement(rowNo === 0 && hasHeader ? 'th' : 'td');
562
577
  td.innerHTML = sys.__tohtml(col);
563
578
  if (isNumRight && col.match(/^(\+|-)?\d+(\.\d+)?$/)) {
564
579
  // number?
565
- td.style.textAlign = "right";
580
+ td.style.textAlign = 'right';
566
581
  }
567
582
  tr.appendChild(td);
568
583
  }
569
584
  table.appendChild(tr);
570
585
  }
571
586
  return table;
572
- },
587
+ }
573
588
  },
574
589
  'テーブルセル変更': {
575
590
  type: 'func',
@@ -595,7 +610,7 @@ export default {
595
610
  const bgColor = JSON.parse(JSON.stringify(domOption['テーブル背景色'])); // 複製して使う
596
611
  const isNumRight = domOption['テーブル数値右寄せ'];
597
612
  while (bgColor.length < 3) { // オプションが壊れていた時のための補完
598
- bgColor.push("white");
613
+ bgColor.push('white');
599
614
  }
600
615
  // 複数の範囲を一気に変更
601
616
  for (let y = 0; y < v.length; y++) {
@@ -32,7 +32,7 @@ export default {
32
32
  fn: function (skin: any, sys: any) {
33
33
  sys.__setSysVar('DOMスキン', skin)
34
34
  },
35
-
35
+
36
36
  return_none: true
37
37
  },
38
38
  'DOM部品作成': { // @elmの要素を作成して『DOM親要素設定』で指定した要素に追加して、DOMオブジェクトを返す。(elmがDOM要素なら追加する) // @DOMぶひんさくせい
@@ -284,6 +284,7 @@ export default {
284
284
  rows = s
285
285
  }
286
286
  // 入力項目に合わせて行を追加
287
+ // eslint-disable-next-line @typescript-eslint/no-for-in-array
287
288
  for (const rowIndex in rows) {
288
289
  const row: Array<string>|string = rows[rowIndex]
289
290
  let cols: Array<string>
@@ -338,76 +339,62 @@ export default {
338
339
  inp.value = opt1
339
340
  inp.placeholder = opt2
340
341
  inp.name = key
341
- }
342
- else if (val === '?password') {
342
+ } else if (val === '?password') {
343
343
  inp.type = 'password'
344
344
  inp.value = opt1
345
345
  inp.placeholder = opt2
346
346
  inp.name = key
347
- }
348
- else if (val === '?number') {
347
+ } else if (val === '?number') {
349
348
  inp.type = 'number'
350
349
  inp.value = opt1
351
350
  inp.placeholder = opt2
352
351
  inp.name = key
353
- }
354
- else if (val === '?email') {
352
+ } else if (val === '?email') {
355
353
  inp.type = 'email'
356
354
  inp.value = opt1
357
355
  inp.placeholder = opt2
358
356
  inp.name = key
359
- }
360
- else if (val === '?tel') {
357
+ } else if (val === '?tel') {
361
358
  inp.type = 'tel'
362
359
  inp.value = opt1
363
360
  inp.placeholder = opt2
364
361
  inp.name = key
365
- }
366
- else if (val === '?file') {
362
+ } else if (val === '?file') {
367
363
  inp.type = 'file'
368
364
  inp.name = key
369
- }
370
- else if (val === '?date') {
365
+ } else if (val === '?date') {
371
366
  inp.type = 'date'
372
367
  inp.value = opt1.replace(/\//g, '-')
373
368
  inp.name = key
374
- }
375
- else if (val === '?month') {
369
+ } else if (val === '?month') {
376
370
  inp.type = 'month'
377
371
  inp.value = opt1.replace(/\//g, '-')
378
372
  inp.name = key
379
- }
380
- else if (val === '?time') {
373
+ } else if (val === '?time') {
381
374
  inp.type = 'time'
382
375
  inp.value = opt1
383
376
  inp.name = key
384
- }
385
- else if (val === '?color') {
377
+ } else if (val === '?color') {
386
378
  inp.type = 'color'
387
379
  inp.value = opt1
388
380
  inp.name = key
389
- }
390
- else if (val === '?hidden') {
381
+ } else if (val === '?hidden') {
391
382
  inp.type = 'hidden'
392
383
  inp.value = opt1
393
384
  inp.name = key
394
385
  isHidden = true
395
386
  frm.appendChild(inp)
396
- }
397
- else if (val === '?checkbox') {
387
+ } else if (val === '?checkbox') {
398
388
  inp.type = 'checkbox'
399
389
  inp.value = opt1
400
390
  inp.name = key
401
391
  lbl2.innerHTML = ' ' + sys.__tohtmlQ(opt2)
402
392
  lbl2.htmlFor = inp.id
403
- }
404
- // v3.2.33での拡張
405
- else if (val === '?送信' || val === '?submit') {
393
+ } else if (val === '?送信' || val === '?submit') { // v3.2.33での拡張
406
394
  inp.type = 'submit'
407
395
  inp.value = val.substring(1)
408
396
  if (key !== '') { inp.name = key }
409
- }
410
- else if (val.substring(0, 3) === '?c#') {
397
+ } else if (val.substring(0, 3) === '?c#') {
411
398
  inp.type = 'color'
412
399
  inp.value = val.substring(2)
413
400
  inp.name = key
@@ -491,55 +478,69 @@ export default {
491
478
  fn: function (tbl: any, aa: any, sys: any) {
492
479
  // 既存のテーブルを取得
493
480
  if (typeof tbl === 'string') {
494
- tbl = sys.__query(tbl, 'テーブル更新', false);
481
+ tbl = sys.__query(tbl, 'テーブル更新', false)
495
482
  }
496
- tbl.innerHTML = ''; // 初期化
483
+ tbl.innerHTML = '' // 初期化
497
484
  // テーブルに差し込むデータを確認
498
485
  if (typeof aa === 'string') {
499
- const rr = [];
500
- const rows = aa.split('\n');
486
+ const rr = []
487
+ const rows = aa.split('\n')
501
488
  for (const row of rows) {
502
- rr.push(row.split(","));
489
+ rr.push(row.split(','))
503
490
  }
504
- aa = rr;
491
+ aa = rr
505
492
  }
506
- const domOption = sys.__getSysVar("DOM部品オプション");
493
+ const table = tbl
494
+ // テーブル作成/テーブル更新の設定を読み取る
495
+ const domOption = sys.__getSysVar('DOM部品オプション')
496
+ // 背景色は複製して使う
507
497
  const bgColor: Array<string> = JSON.parse(
508
- JSON.stringify(domOption["テーブル背景色"]),
509
- ); // 複製して使う
510
- const hasHeader: boolean = domOption["テーブルヘッダ"];
511
- const isNumRight: boolean = domOption["テーブル数値右寄せ"];
498
+ JSON.stringify(domOption['テーブル背景色'])
499
+ )
512
500
  for (let i = 0; i < 3; i++) {
513
- bgColor.push("");
501
+ bgColor.push('')
514
502
  }
515
- const bgHead = bgColor.shift() || "";
516
- const table = tbl
503
+ const bgHead = bgColor.shift() || ''
504
+ let hasHeader: boolean = domOption['テーブルヘッダ']
505
+ let isNumRight: boolean = domOption['テーブル数値右寄せ']
506
+ if (table.dataset.nakoTags) {
507
+ // 既存DOMから設定を読む
508
+ hasHeader = table.dataset.nakoTags.hasHeader
509
+ isNumRight = table.dataset.nakoTags.isNumRight
510
+ } else {
511
+ // 設定をDOMに保存する
512
+ table.dataset.nakoTags = {
513
+ hasHeader,
514
+ isNumRight
515
+ }
516
+ }
517
+ // テーブルにデータを追加していく
517
518
  for (let i = 0; i < aa.length; i++) {
518
- const rowNo = i;
519
- const row = aa[rowNo];
520
- const tr = document.createElement("tr");
519
+ const rowNo = i
520
+ const row = aa[rowNo]
521
+ const tr = document.createElement('tr')
521
522
  // 色指定
522
- if (bgHead !== "") {
523
- const no = hasHeader ? rowNo : rowNo + 1;
524
- tr.style.backgroundColor = no === 0 ? bgHead : bgColor[no % 2];
525
- tr.style.color = no === 0 ? "white" : "black";
523
+ if (bgHead !== '') {
524
+ const no = hasHeader ? rowNo : rowNo + 1
525
+ tr.style.backgroundColor = no === 0 ? bgHead : bgColor[no % 2]
526
+ tr.style.color = no === 0 ? 'white' : 'black'
526
527
  }
527
528
  for (let col of row) {
528
- col = "" + col;
529
+ col = '' + col
529
530
  const td = document.createElement(
530
- rowNo === 0 && hasHeader ? "th" : "td",
531
- );
532
- td.innerHTML = sys.__tohtml(col);
531
+ rowNo === 0 && hasHeader ? 'th' : 'td'
532
+ )
533
+ td.innerHTML = sys.__tohtml(col)
533
534
  if (isNumRight && col.match(/^(\+|-)?\d+(\.\d+)?$/)) {
534
535
  // number?
535
- td.style.textAlign = "right";
536
+ td.style.textAlign = 'right'
536
537
  }
537
- tr.appendChild(td);
538
+ tr.appendChild(td)
538
539
  }
539
- table.appendChild(tr);
540
+ table.appendChild(tr)
540
541
  }
541
- return table;
542
- },
542
+ return table
543
+ }
543
544
  },
544
545
  'テーブルセル変更': { // @TABLE要素のセル[行,列]をVへ変更する。Vが二次元配列変数であれば複数のセルを一括変更する // @てーぶるせるへんこう
545
546
  type: 'func',
@@ -561,7 +562,7 @@ export default {
561
562
  const bgColor = JSON.parse(JSON.stringify(domOption['テーブル背景色'])) // 複製して使う
562
563
  const isNumRight: boolean = domOption['テーブル数値右寄せ']
563
564
  while (bgColor.length < 3) { // オプションが壊れていた時のための補完
564
- bgColor.push("white")
565
+ bgColor.push('white')
565
566
  }
566
567
  // 複数の範囲を一気に変更
567
568
  for (let y = 0; y < v.length; y++) {
@@ -26,7 +26,7 @@ export default {
26
26
  console.log('#話す:', s);
27
27
  }
28
28
  catch (err) {
29
- reject(err);
29
+ reject(err instanceof Error ? err : new Error(String(err)));
30
30
  }
31
31
  });
32
32
  }
@@ -25,7 +25,7 @@ export default {
25
25
  window.speechSynthesis.speak(msg)
26
26
  console.log('#話す:', s)
27
27
  } catch (err) {
28
- reject(err)
28
+ reject(err instanceof Error ? err : new Error(String(err)))
29
29
  }
30
30
  })
31
31
  }
@@ -753,7 +753,7 @@ export default {
753
753
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
754
754
  exec(cmd, (err, stdout, stderr) => {
755
755
  if (err) {
756
- throw new Error('[エラー]『圧縮時』' + err);
756
+ throw new Error('[エラー]『圧縮時』' + (err.message || JSON.stringify(err)));
757
757
  }
758
758
  callback(stdout);
759
759
  });
@@ -998,6 +998,7 @@ export default {
998
998
  pure: true,
999
999
  fn: function (callback, url, params, sys) {
1000
1000
  const flist = [];
1001
+ // eslint-disable-next-line @typescript-eslint/no-for-in-array
1001
1002
  for (const key in params) {
1002
1003
  const v = params[key];
1003
1004
  const kv = encodeURIComponent(key) + '=' + encodeURIComponent(v);
@@ -1103,6 +1104,7 @@ export default {
1103
1104
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
1104
1105
  fn: function (url, params, sys) {
1105
1106
  const flist = [];
1107
+ // eslint-disable-next-line @typescript-eslint/no-for-in-array
1106
1108
  for (const key in params) {
1107
1109
  const v = params[key];
1108
1110
  const kv = encodeURIComponent(key) + '=' + encodeURIComponent(v);
@@ -1224,7 +1226,7 @@ export default {
1224
1226
  }).then(text => {
1225
1227
  resolve(text);
1226
1228
  }).catch(err => {
1227
- reject(err.message);
1229
+ reject(new Error(err.message));
1228
1230
  });
1229
1231
  });
1230
1232
  }
@@ -1250,7 +1252,7 @@ export default {
1250
1252
  }).then(text => {
1251
1253
  resolve(text);
1252
1254
  }).catch(err => {
1253
- reject(err.message);
1255
+ reject(new Error(err.message));
1254
1256
  });
1255
1257
  });
1256
1258
  }
@@ -683,7 +683,7 @@ export default {
683
683
  const cmd = `${tpath} x ${a} -o${b} -y`
684
684
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
685
685
  exec(cmd, (err, stdout, stderr) => {
686
- if (err) { throw new Error('[エラー]『解凍時』' + err) }
686
+ if (err) { throw new Error('[エラー]『解凍時』' + (err as unknown as string)) }
687
687
  callback(stdout)
688
688
  })
689
689
  },
@@ -713,7 +713,7 @@ export default {
713
713
  const cmd = `${tpath} a -r ${b} ${a} -y`
714
714
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
715
715
  exec(cmd, (err, stdout, stderr) => {
716
- if (err) { throw new Error('[エラー]『圧縮時』' + err) }
716
+ if (err) { throw new Error('[エラー]『圧縮時』' + (err.message || JSON.stringify(err))) }
717
717
  callback(stdout)
718
718
  })
719
719
  },
@@ -942,6 +942,7 @@ export default {
942
942
  pure: true,
943
943
  fn: function (callback: any, url: string, params: [key: string], sys: NakoSystem) {
944
944
  const flist: Array<string> = []
945
+ // eslint-disable-next-line @typescript-eslint/no-for-in-array
945
946
  for (const key in params) {
946
947
  const v: string = params[key]
947
948
  const kv: string = encodeURIComponent(key) + '=' + encodeURIComponent(v)
@@ -1044,6 +1045,7 @@ export default {
1044
1045
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
1045
1046
  fn: function (url: string, params: [key: string], sys: NakoSystem) {
1046
1047
  const flist: Array<string> = []
1048
+ // eslint-disable-next-line @typescript-eslint/no-for-in-array
1047
1049
  for (const key in params) {
1048
1050
  const v: string = params[key]
1049
1051
  const kv: string = encodeURIComponent(key) + '=' + encodeURIComponent(v)
@@ -1161,7 +1163,7 @@ export default {
1161
1163
  }).then(text => {
1162
1164
  resolve(text)
1163
1165
  }).catch(err => {
1164
- reject(err.message)
1166
+ reject(new Error(err.message))
1165
1167
  })
1166
1168
  })
1167
1169
  }
@@ -1185,7 +1187,7 @@ export default {
1185
1187
  }).then(text => {
1186
1188
  resolve(text)
1187
1189
  }).catch(err => {
1188
- reject(err.message)
1190
+ reject(new Error(err.message))
1189
1191
  })
1190
1192
  })
1191
1193
  }
@@ -2,7 +2,7 @@
2
2
  * PluginWeykTurtle3D
3
3
  * 3d turtle graphics plugin
4
4
  */
5
- import { ThreeUtil } from './plugin_three.mjs';
5
+ import { ThreeUtil } from './plugin_weykturtle3d_threeutil.mjs';
6
6
  class DrawLineEventArgs {
7
7
  constructor(v1, v2, width, color) {
8
8
  this.v1 = v1;
@@ -11,6 +11,8 @@ class DrawLineEventArgs {
11
11
  this.color = color;
12
12
  }
13
13
  }
14
+ class Command {
15
+ }
14
16
  class CommandPromise {
15
17
  constructor(command, resolve, reject) {
16
18
  this.command = command;
@@ -18,8 +20,6 @@ class CommandPromise {
18
20
  this.reject = reject;
19
21
  }
20
22
  }
21
- class Command {
22
- }
23
23
  class CommandHome extends Command {
24
24
  constructor(mode) {
25
25
  super();
@@ -112,7 +112,8 @@ class CommandModel extends Command {
112
112
  this.model = model;
113
113
  }
114
114
  }
115
- class Turtle3D extends EventTarget {
115
+ const TypedTurtle3DEventTarget = EventTarget;
116
+ class Turtle3D extends TypedTurtle3DEventTarget {
116
117
  constructor(three, id) {
117
118
  super();
118
119
  this.three = three;
@@ -395,6 +396,10 @@ class WeykTurtle3DSystem {
395
396
  if (WeykTurtle3DSystem.instance === undefined) {
396
397
  WeykTurtle3DSystem.instance = new WeykTurtle3DSystem(sys);
397
398
  }
399
+ else if (WeykTurtle3DSystem.instance.sys !== sys) {
400
+ console.log('T3D: difference sys instance');
401
+ WeykTurtle3DSystem.instance.sys = sys;
402
+ }
398
403
  const i = WeykTurtle3DSystem.instance;
399
404
  i.instanceCount += 1;
400
405
  return WeykTurtle3DSystem.instance;
@@ -434,7 +439,6 @@ class WeykTurtle3DSystem {
434
439
  scene.remove(this._axishelper);
435
440
  scene.add(this._axishelper);
436
441
  }
437
- this.initTurtle();
438
442
  }
439
443
  }
440
444
  disposeAllTurtle() {
@@ -659,22 +663,22 @@ class WeykTurtle3DSystem {
659
663
  else if (to instanceof HTMLCanvasElement) {
660
664
  renderer = new three.WebGLRenderer({ antialias: false, alpha: true, canvas: to });
661
665
  if (renderer === null) {
662
- throw new Error('レンダラを作成できません');
666
+ throw new Error('レンダラを作成できません。指定したCanvas要素は使用できません');
663
667
  }
664
668
  renderer.setSize(to.width, to.height);
665
669
  }
666
670
  else if (to instanceof Element) {
667
671
  renderer = new three.WebGLRenderer({ antialias: false, alpha: true });
668
672
  if (renderer === null) {
669
- throw new Error('レンダラを作成できません');
673
+ throw new Error('レンダラを作成できません。指定したDOM要素は使用できません');
670
674
  }
671
675
  renderer.setSize(to.clientWidth, to.clientHeight);
672
676
  to.appendChild(renderer.domElement);
673
677
  }
674
- else
675
- [
678
+ else {
676
679
  // never
677
- ];
680
+ throw new Error('レンダラを作成できません。それは作成先に指定できません');
681
+ }
678
682
  renderer.setPixelRatio(window.devicePixelRatio);
679
683
  this._renderer = renderer;
680
684
  return this._renderer;
@@ -722,7 +726,7 @@ class WeykTurtle3DSystem {
722
726
  const geometry = new three.BufferGeometry();
723
727
  const vertices = new three.Float32BufferAttribute(6, 3);
724
728
  vertices.copyArray([v1.x, v1.y, v1.z, v2.x, v2.y, v2.z]);
725
- const material = new three.LineBasicMaterial({ color: color, linewidth: width });
729
+ const material = new three.LineBasicMaterial({ color, linewidth: width });
726
730
  geometry.setAttribute('position', vertices);
727
731
  const line = new three.Line(geometry, material);
728
732
  if (this._lines) {
@@ -858,6 +862,17 @@ const PluginWeykTurtle3D = {
858
862
  sys.__setSysVar('THREE', null);
859
863
  }
860
864
  },
865
+ '!クリア': {
866
+ type: 'func',
867
+ josi: [],
868
+ pure: true,
869
+ fn: function (sys) {
870
+ if (sys.tags.weykturtle3d) {
871
+ sys.tags.weykturtle3d.clearAll();
872
+ sys.tags.weykturtle3d.clearRenderer();
873
+ }
874
+ }
875
+ },
861
876
  // @3Dタートルグラフィックス・ライブラリとプラグイン
862
877
  'THREE': { type: 'const', value: '' }, // @THREE
863
878
  'T3DベースURL': { type: 'var', value: 'https://cdn.jsdelivr.net/npm/three@0.127.0' }, // @T3DべーすURL
@@ -878,6 +893,8 @@ const PluginWeykTurtle3D = {
878
893
  return true;
879
894
  });
880
895
  promise.catch(err => {
896
+ console.error('T3D:ThreeJSのライブラリの読み込みに失敗しました');
897
+ console.error(err);
881
898
  return false;
882
899
  });
883
900
  return await promise;
@@ -902,15 +919,17 @@ const PluginWeykTurtle3D = {
902
919
  promise.then(module => {
903
920
  turtle3d.three = Object.assign({}, module);
904
921
  turtle3d.ck();
905
- callback(true);
922
+ callback(turtle3d.three !== null);
906
923
  });
907
924
  promise.catch(err => {
908
- callback(false);
925
+ console.error('T3D:ThreeJSのライブラリの読み込みに失敗しました');
926
+ console.error(err);
927
+ callback(turtle3d.three !== null);
909
928
  });
910
929
  }
911
930
  else {
912
931
  turtle3d.ck();
913
- callback(true);
932
+ callback(turtle3d.three !== null);
914
933
  }
915
934
  },
916
935
  return_none: true
@@ -941,7 +960,7 @@ const PluginWeykTurtle3D = {
941
960
  resolve();
942
961
  }
943
962
  else {
944
- reject();
963
+ reject(new Error('読み込みに失敗したプラグインがあります'));
945
964
  }
946
965
  }
947
966
  };
@@ -954,6 +973,8 @@ const PluginWeykTurtle3D = {
954
973
  callbacks(true);
955
974
  });
956
975
  promise.catch(err => {
976
+ console.error('T3D:ThreeJSのプラグインの読み込みに失敗しました');
977
+ console.error(err);
957
978
  callbacks(false);
958
979
  });
959
980
  }
@@ -992,6 +1013,8 @@ const PluginWeykTurtle3D = {
992
1013
  callbacks(true);
993
1014
  });
994
1015
  promise.catch(err => {
1016
+ console.error('T3D:ThreeJSのプラグインの読み込みに失敗しました');
1017
+ console.error(err);
995
1018
  callbacks(false);
996
1019
  });
997
1020
  }