nadesiko3 3.4.13 → 3.4.15

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 (58) hide show
  1. package/batch/command.txt +325 -323
  2. package/batch/command_nakopad.txt +2 -0
  3. package/core/package.json +1 -1
  4. package/core/src/nako_core_version.mjs +2 -2
  5. package/core/src/nako_core_version.mts +2 -2
  6. package/core/src/nako_from_dncl2.mjs +34 -2
  7. package/core/src/nako_from_dncl2.mts +31 -2
  8. package/core/src/nako_gen.mjs +110 -76
  9. package/core/src/nako_gen.mts +114 -75
  10. package/core/src/plugin_system.mjs +13 -3
  11. package/core/src/plugin_system.mts +11 -3
  12. package/core/test/dncl2_test.mjs +161 -152
  13. package/package.json +4 -33
  14. package/release/_hash.txt +28 -28
  15. package/release/_script-tags.txt +14 -14
  16. package/release/command.json +1 -1
  17. package/release/command.json.js +1 -1
  18. package/release/command_cnako3.json +1 -1
  19. package/release/command_list.json +1 -1
  20. package/release/editor.js +1 -1
  21. package/release/editor.js.map +1 -1
  22. package/release/nako_gen_async.js +1 -1
  23. package/release/nako_gen_async.js.map +1 -1
  24. package/release/plugin_datetime.js +1 -1
  25. package/release/plugin_datetime.js.map +1 -1
  26. package/release/stats.json +1 -1
  27. package/release/version.js +1 -1
  28. package/release/version.js.map +1 -1
  29. package/release/wnako3.js +1 -1
  30. package/release/wnako3.js.map +1 -1
  31. package/release/wnako3webworker.js +1 -1
  32. package/release/wnako3webworker.js.map +1 -1
  33. package/src/nako_version.mjs +2 -2
  34. package/src/nako_version.mts +2 -2
  35. package/src/plugin_browser.mjs +1 -1
  36. package/src/plugin_browser.mts +1 -1
  37. package/src/plugin_browser_ajax.mjs +6 -6
  38. package/src/plugin_browser_ajax.mts +8 -8
  39. package/src/plugin_browser_canvas.mjs +2 -2
  40. package/src/plugin_browser_canvas.mts +2 -2
  41. package/src/plugin_browser_chart.mjs +17 -13
  42. package/src/plugin_browser_chart.mts +25 -21
  43. package/src/plugin_browser_crypto.mjs +1 -1
  44. package/src/plugin_browser_crypto.mts +2 -2
  45. package/src/plugin_browser_dom_basic.mjs +5 -5
  46. package/src/plugin_browser_dom_basic.mts +5 -5
  47. package/src/plugin_browser_dom_event.mjs +17 -17
  48. package/src/plugin_browser_dom_event.mts +17 -17
  49. package/src/plugin_browser_dom_parts.mjs +21 -21
  50. package/src/plugin_browser_dom_parts.mts +21 -21
  51. package/src/plugin_browser_geolocation.mjs +2 -2
  52. package/src/plugin_browser_geolocation.mts +2 -2
  53. package/src/plugin_browser_storage.mjs +3 -3
  54. package/src/plugin_browser_storage.mts +3 -3
  55. package/src/plugin_datetime.mjs +9 -9
  56. package/src/plugin_node.mjs +52 -10
  57. package/src/plugin_node.mts +52 -8
  58. package/test/node/plugin_node_test.mjs +181 -180
@@ -4,7 +4,7 @@ export default {
4
4
  '位置情報取得時': {
5
5
  type: 'func',
6
6
  josi: [['の', 'に', 'へ']],
7
- pure: false,
7
+ pure: true,
8
8
  fn: function (func, sys) {
9
9
  let cb = func;
10
10
  if (typeof cb === 'string') {
@@ -26,7 +26,7 @@ export default {
26
26
  '位置情報監視時': {
27
27
  type: 'func',
28
28
  josi: [['の', 'に', 'へ']],
29
- pure: false,
29
+ pure: true,
30
30
  fn: function (func, sys) {
31
31
  let cb = func;
32
32
  if (typeof cb === 'string') {
@@ -4,7 +4,7 @@ export default {
4
4
  '位置情報取得時': { // @位置情報を取得してコールバック関数内で変数「対象」に配列で[緯度,経度]を返す // @いちじょうほうしゅとくしたとき
5
5
  type: 'func',
6
6
  josi: [['の', 'に', 'へ']],
7
- pure: false,
7
+ pure: true,
8
8
  fn: function (func: any, sys: any) {
9
9
  let cb = func
10
10
  if (typeof cb === 'string') { cb = sys.__findVar(cb) }
@@ -23,7 +23,7 @@ export default {
23
23
  '位置情報監視時': { // @位置情報を監視してIDを返す。引数に指定したコールバック関数内で変数「対象」に配列で[緯度,経度]を返す // @いちじょうほうかんししたとき
24
24
  type: 'func',
25
25
  josi: [['の', 'に', 'へ']],
26
- pure: false,
26
+ pure: true,
27
27
  fn: function (func: any, sys: any) {
28
28
  let cb = func
29
29
  if (typeof cb === 'string') { cb = sys.__findVar(cb) }
@@ -4,7 +4,7 @@ export default {
4
4
  '保存': {
5
5
  type: 'func',
6
6
  josi: [['を'], ['に', 'へ']],
7
- pure: false,
7
+ pure: true,
8
8
  fn: function (v, key, sys) {
9
9
  sys.__exec('ローカルストレージ保存', [v, key, sys]);
10
10
  },
@@ -13,7 +13,7 @@ export default {
13
13
  '開': {
14
14
  type: 'func',
15
15
  josi: [['を', 'から', 'の']],
16
- pure: false,
16
+ pure: true,
17
17
  fn: function (key, sys) {
18
18
  return sys.__exec('ローカルストレージ読', [key, sys]);
19
19
  },
@@ -22,7 +22,7 @@ export default {
22
22
  '読': {
23
23
  type: 'func',
24
24
  josi: [['を', 'から', 'の']],
25
- pure: false,
25
+ pure: true,
26
26
  fn: function (key, sys) {
27
27
  return sys.__exec('ローカルストレージ読', [key, sys]);
28
28
  },
@@ -4,7 +4,7 @@ export default {
4
4
  '保存': { // @ブラウザのlocalStorageのキーKに文字列Vを保存 // @ほぞん
5
5
  type: 'func',
6
6
  josi: [['を'], ['に', 'へ']],
7
- pure: false,
7
+ pure: true,
8
8
  fn: function (v: any, key: any, sys: any) {
9
9
  sys.__exec('ローカルストレージ保存', [v, key, sys])
10
10
  },
@@ -13,7 +13,7 @@ export default {
13
13
  '開': { // @ブラウザのlocalStorageからVを読む // @ひらく
14
14
  type: 'func',
15
15
  josi: [['を', 'から', 'の']],
16
- pure: false,
16
+ pure: true,
17
17
  fn: function (key: any, sys: any) {
18
18
  return sys.__exec('ローカルストレージ読', [key, sys])
19
19
  },
@@ -22,7 +22,7 @@ export default {
22
22
  '読': { // @ブラウザのlocalStorageからVを読む // @よむ
23
23
  type: 'func',
24
24
  josi: [['を', 'から', 'の']],
25
- pure: false,
25
+ pure: true,
26
26
  fn: function (key: any, sys: any) {
27
27
  return sys.__exec('ローカルストレージ読', [key, sys])
28
28
  },
@@ -126,7 +126,7 @@ const PluginDateTime = {
126
126
  'UNIX時間変換': { // @日時SをUNIX時間 (UTC(1970/1/1)からの経過秒数) に変換して返す(v1非互換) // @UNIXじかんへんかん
127
127
  type: 'func',
128
128
  josi: [['の', 'を', 'から']],
129
- pure: false,
129
+ pure: true,
130
130
  fn: function (s, sys) {
131
131
  return sys.__exec('UNIXTIME変換', [s])
132
132
  }
@@ -173,7 +173,7 @@ const PluginDateTime = {
173
173
  '年数差': { // @日付AとBの差を年数で求めて返す。A<Bなら正の数、そうでないなら負の数を返す (v1非互換)。 // @ねんすうさ
174
174
  type: 'func',
175
175
  josi: [['と', 'から'], ['の', 'までの']],
176
- pure: false,
176
+ pure: true,
177
177
  fn: function (a, b, sys) {
178
178
  return sys.__exec('日時差', [a, b, '年'])
179
179
  }
@@ -181,7 +181,7 @@ const PluginDateTime = {
181
181
  '月数差': { // @日付AとBの差を月数で求めて返す。A<Bなら正の数、そうでないなら負の数を返す (v1非互換)。 // @げっすうさ
182
182
  type: 'func',
183
183
  josi: [['と', 'から'], ['の', 'までの']],
184
- pure: false,
184
+ pure: true,
185
185
  fn: function (a, b, sys) {
186
186
  return sys.__exec('日時差', [a, b, '月'])
187
187
  }
@@ -189,7 +189,7 @@ const PluginDateTime = {
189
189
  '日数差': { // @日付AとBの差を日数で求めて返す。A<Bなら正の数、そうでないなら負の数を返す。 // @にっすうさ
190
190
  type: 'func',
191
191
  josi: [['と', 'から'], ['の', 'までの']],
192
- pure: false,
192
+ pure: true,
193
193
  fn: function (a, b, sys) {
194
194
  return sys.__exec('日時差', [a, b, '日'])
195
195
  }
@@ -252,7 +252,7 @@ const PluginDateTime = {
252
252
  '時間差': { // @時間AとBの時間の差を求めて返す。A<Bなら正の数、そうでないなら負の数を返す。 // @じかんさ
253
253
  type: 'func',
254
254
  josi: [['と', 'から'], ['の', 'までの']],
255
- pure: false,
255
+ pure: true,
256
256
  fn: function (a, b, sys) {
257
257
  return sys.__exec('日時差', [a, b, '時間'])
258
258
  }
@@ -260,7 +260,7 @@ const PluginDateTime = {
260
260
  '分差': { // @時間AとBの分数の差を求めて返す。A<Bなら正の数、そうでないなら負の数を返す。 // @ふんさ
261
261
  type: 'func',
262
262
  josi: [['と', 'から'], ['の', 'までの']],
263
- pure: false,
263
+ pure: true,
264
264
  fn: function (a, b, sys) {
265
265
  return sys.__exec('日時差', [a, b, '分'])
266
266
  }
@@ -268,7 +268,7 @@ const PluginDateTime = {
268
268
  '秒差': { // @時間AとBの差を秒差で求めて返す。A<Bなら正の数、そうでないなら負の数を返す。 // @びょうさ
269
269
  type: 'func',
270
270
  josi: [['と', 'から'], ['の', 'までの']],
271
- pure: false,
271
+ pure: true,
272
272
  fn: function (a, b, sys) {
273
273
  return sys.__exec('日時差', [a, b, '秒'])
274
274
  }
@@ -276,7 +276,7 @@ const PluginDateTime = {
276
276
  '時間加算': { // @時間SにAを加えて返す。Aには「(+|-)hh:nn:dd」で指定する。 // @じかんかさん
277
277
  type: 'func',
278
278
  josi: [['に'], ['を']],
279
- pure: false,
279
+ pure: true,
280
280
  fn: function (s, a, sys) {
281
281
  const pm = a.slice(0, 1)
282
282
 
@@ -297,7 +297,7 @@ const PluginDateTime = {
297
297
  '日付加算': { // @日付SにAを加えて返す。Aには「(+|-)yyyy/mm/dd」で指定する。 // @ひづけかさん
298
298
  type: 'func',
299
299
  josi: [['に'], ['を']],
300
- pure: false,
300
+ pure: true,
301
301
  fn: function (s, a, sys) {
302
302
  const pm = a.slice(0, 1)
303
303
 
@@ -82,7 +82,7 @@ export default {
82
82
  '読': {
83
83
  type: 'func',
84
84
  josi: [['を', 'から']],
85
- pure: false,
85
+ pure: true,
86
86
  fn: function (s, sys) {
87
87
  return sys.__exec('開', [s]);
88
88
  }
@@ -638,7 +638,7 @@ export default {
638
638
  '終了': {
639
639
  type: 'func',
640
640
  josi: [],
641
- pure: false,
641
+ pure: true,
642
642
  fn: function (sys) {
643
643
  sys.__exec('終', []);
644
644
  },
@@ -683,23 +683,65 @@ export default {
683
683
  josi: [['と', 'を']],
684
684
  pure: true,
685
685
  asyncFn: true,
686
- fn: function (msg) {
686
+ fn: function (msg, sys) {
687
687
  return new Promise((resolve, reject) => {
688
- const rl = readline.createInterface(process.stdin, process.stdout);
689
- if (!rl) {
688
+ // process.stdin.resume()
689
+ const cli = readline.createInterface(process.stdin, process.stdout);
690
+ if (!cli) {
690
691
  reject(new Error('『尋』命令で標準入力が取得できません'));
691
692
  return;
692
693
  }
693
- rl.question(msg, (buf) => {
694
- rl.close();
695
- if (buf && buf.match(/^[0-9.]+$/)) {
696
- buf = parseFloat(buf);
694
+ cli.question(msg, (line) => {
695
+ if (line & line.match(/^[0-9.]+$/)) {
696
+ line = parseFloat(line);
697
697
  }
698
+ cli.close();
699
+ resolve(line);
700
+ });
701
+ });
702
+ }
703
+ },
704
+ '文字尋': {
705
+ type: 'func',
706
+ josi: [['と', 'を']],
707
+ pure: true,
708
+ asyncFn: true,
709
+ fn: function (msg) {
710
+ return new Promise((resolve, reject) => {
711
+ const cli = readline.createInterface(process.stdin, process.stdout);
712
+ if (!cli) {
713
+ reject(new Error('『尋』命令で標準入力が取得できません'));
714
+ return;
715
+ }
716
+ cli.question(msg, (buf) => {
717
+ cli.close();
698
718
  resolve(buf);
699
719
  });
700
720
  });
701
721
  }
702
722
  },
723
+ '標準入力全取得': {
724
+ type: 'func',
725
+ josi: [],
726
+ pure: true,
727
+ asyncFn: true,
728
+ fn: function () {
729
+ return new Promise((resolve, _reject) => {
730
+ let dataStr = '';
731
+ const reader = readline.createInterface({
732
+ input: process.stdin,
733
+ output: process.stdout
734
+ });
735
+ reader.on('line', (line) => {
736
+ dataStr += line + '\n';
737
+ });
738
+ reader.on('close', () => {
739
+ reader.close();
740
+ resolve(dataStr);
741
+ });
742
+ });
743
+ }
744
+ },
703
745
  // @テスト
704
746
  'ASSERT等': {
705
747
  type: 'func',
@@ -795,7 +837,7 @@ export default {
795
837
  'GET送信時': {
796
838
  type: 'func',
797
839
  josi: [['の'], ['まで', 'へ', 'に']],
798
- pure: false,
840
+ pure: true,
799
841
  fn: function (callback, url, sys) {
800
842
  sys.__exec('AJAX送信時', [callback, url, sys]);
801
843
  },
@@ -76,7 +76,7 @@ export default {
76
76
  '読': { // @ファイルSを開く // @よむ
77
77
  type: 'func',
78
78
  josi: [['を', 'から']],
79
- pure: false,
79
+ pure: true,
80
80
  fn: function (s: string, sys: any) {
81
81
  return sys.__exec('開', [s])
82
82
  }
@@ -587,7 +587,7 @@ export default {
587
587
  '終了': { // @Nodeでプログラム実行を強制終了する // @しゅうりょう
588
588
  type: 'func',
589
589
  josi: [],
590
- pure: false,
590
+ pure: true,
591
591
  fn: function (sys: any) {
592
592
  sys.__exec('終', [])
593
593
  },
@@ -628,25 +628,69 @@ export default {
628
628
  }
629
629
  },
630
630
  '尋': { // @標準入力を一行取得する // @たずねる
631
+ type: 'func',
632
+ josi: [['と', 'を']],
633
+ pure: true,
634
+ asyncFn: true,
635
+ fn: function (msg: string, sys: any): Promise<string> {
636
+ return new Promise((resolve, reject) => {
637
+ // process.stdin.resume()
638
+ const cli = readline.createInterface(process.stdin, process.stdout)
639
+ if (!cli) {
640
+ reject(new Error('『尋』命令で標準入力が取得できません'))
641
+ return
642
+ }
643
+ cli.question(msg, (line: any) => {
644
+ if (line & line.match(/^[0-9.]+$/)) {
645
+ line = parseFloat(line)
646
+ }
647
+ cli.close()
648
+ resolve(line)
649
+ })
650
+ })
651
+ }
652
+ },
653
+ '文字尋': { // @標準入力を一行取得する。ただし自動で数値に変換しない // @もじたずねる
631
654
  type: 'func',
632
655
  josi: [['と', 'を']],
633
656
  pure: true,
634
657
  asyncFn: true,
635
658
  fn: function (msg: string): Promise<any> {
636
659
  return new Promise((resolve, reject) => {
637
- const rl = readline.createInterface(process.stdin, process.stdout)
638
- if (!rl) {
660
+ const cli = readline.createInterface(process.stdin, process.stdout)
661
+ if (!cli) {
639
662
  reject(new Error('『尋』命令で標準入力が取得できません'))
640
663
  return
641
664
  }
642
- rl.question(msg, (buf: any) => {
643
- rl.close()
644
- if (buf && buf.match(/^[0-9.]+$/)) { buf = parseFloat(buf) }
665
+ cli.question(msg, (buf: any) => {
666
+ cli.close()
645
667
  resolve(buf)
646
668
  })
647
669
  })
648
670
  }
649
671
  },
672
+ '標準入力全取得': { // @標準入力を全部取得して返す // @ひょうじゅんにゅうりょくぜんしゅとく
673
+ type: 'func',
674
+ josi: [],
675
+ pure: true,
676
+ asyncFn: true,
677
+ fn: function (): Promise<string> {
678
+ return new Promise((resolve, _reject) => {
679
+ let dataStr = ''
680
+ const reader = readline.createInterface({
681
+ input: process.stdin,
682
+ output: process.stdout
683
+ })
684
+ reader.on('line', (line) => {
685
+ dataStr += line + '\n'
686
+ })
687
+ reader.on('close', () => {
688
+ reader.close()
689
+ resolve(dataStr)
690
+ })
691
+ })
692
+ }
693
+ },
650
694
  // @テスト
651
695
  'ASSERT等': { // @ mochaによるテストで、ASSERTでAとBが正しいことを報告する // @ASSERTひとしい
652
696
  type: 'func',
@@ -730,7 +774,7 @@ export default {
730
774
  'GET送信時': { // @非同期通信(Ajax)でURLにデータを送信し、成功するとcallbackが実行される。その際『対象』にデータが代入される。 // @GETそうしんしたとき
731
775
  type: 'func',
732
776
  josi: [['の'], ['まで', 'へ', 'に']],
733
- pure: false,
777
+ pure: true,
734
778
  fn: function (callback: any, url: string, sys: any) {
735
779
  sys.__exec('AJAX送信時', [callback, url, sys])
736
780
  },