nadesiko3 3.7.21 → 3.7.23

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 (212) hide show
  1. package/README.md +20 -1
  2. package/batch/command.txt +370 -334
  3. package/batch/generate_command_list.mjs +102 -0
  4. package/batch/jsplugin2text.nako3 +1 -1
  5. package/batch/pickup_command.nako3 +12 -0
  6. package/batch/search_command.mjs +34 -0
  7. package/batch/search_command.nako3 +430 -0
  8. package/core/command/snako.mts +5 -1
  9. package/core/deno/snako.ts +5 -1
  10. package/core/package-lock.json +382 -21
  11. package/core/package.json +7 -4
  12. package/core/sample/algorithms/README.md +43 -0
  13. package/core/sample/algorithms/graph/dijkstra.nako3 +47 -0
  14. package/core/sample/algorithms/graph/kruskal.nako3 +69 -0
  15. package/core/sample/algorithms/math/euclidean_gcd.nako3 +15 -0
  16. package/core/sample/algorithms/math/sieve_of_eratosthenes.nako3 +26 -0
  17. package/core/sample/algorithms/search/binary_search.nako3 +17 -0
  18. package/core/sample/algorithms/search/breadth_first_search.nako3 +33 -0
  19. package/core/sample/algorithms/search/depth_first_search.nako3 +25 -0
  20. package/core/sample/algorithms/sort/heap_sort.nako3 +37 -0
  21. package/core/sample/algorithms/sort/insertion_sort.nako3 +18 -0
  22. package/core/sample/algorithms/sort/merge_sort.nako3 +40 -0
  23. package/core/sample/algorithms/sort/quick_sort.nako3 +36 -0
  24. package/core/sample/algorithms/string/knuth_morris_pratt.nako3 +50 -0
  25. package/core/sample/algorithms/string/run_length_encoding.nako3 +25 -0
  26. package/core/src/nako3.mts +178 -614
  27. package/core/src/nako_basic_plugins.mts +39 -0
  28. package/core/src/nako_core_version.mts +2 -2
  29. package/core/src/nako_csv.mts +0 -1
  30. package/core/src/nako_event.mts +49 -0
  31. package/core/src/nako_gen.mts +320 -209
  32. package/core/src/nako_global.mts +18 -0
  33. package/core/src/nako_indent_inline.mts +2 -2
  34. package/core/src/nako_lex_rules.mts +1 -1
  35. package/core/src/nako_parser3.mts +111 -166
  36. package/core/src/nako_parser_async.mts +165 -0
  37. package/core/src/nako_parser_base.mts +4 -55
  38. package/core/src/nako_parser_message.mts +105 -0
  39. package/core/src/nako_parser_operator.mts +93 -0
  40. package/core/src/nako_plugin_manager.mts +260 -0
  41. package/core/src/nako_require.mts +292 -0
  42. package/core/src/nako_runner.mts +208 -0
  43. package/core/src/nako_tokenizer.mts +221 -0
  44. package/core/src/plugin_csv.mts +1 -1
  45. package/core/src/plugin_system.mts +34 -3259
  46. package/core/src/plugin_system_array.mts +699 -0
  47. package/core/src/plugin_system_datetime.mts +368 -0
  48. package/core/src/plugin_system_debug.mts +403 -0
  49. package/core/src/plugin_system_dict.mts +85 -0
  50. package/core/src/plugin_system_json.mts +73 -0
  51. package/core/src/plugin_system_math.mts +383 -0
  52. package/core/src/plugin_system_regexp.mts +120 -0
  53. package/core/src/plugin_system_stdio.mts +86 -0
  54. package/core/src/plugin_system_string.mts +666 -0
  55. package/core/src/plugin_system_timer.mts +152 -0
  56. package/core/src/plugin_system_types.mts +151 -0
  57. package/core/src/plugin_system_url.mts +193 -0
  58. package/core/src/plugin_toml.mts +3 -3
  59. package/core/test/algorithm_samples_test.mjs +58 -0
  60. package/core/test/algorithms/graph/dijkstra_test.nako3 +21 -0
  61. package/core/test/algorithms/graph/kruskal_test.nako3 +21 -0
  62. package/core/test/algorithms/helper.mjs +13 -0
  63. package/core/test/algorithms/math/euclidean_gcd_test.nako3 +13 -0
  64. package/core/test/algorithms/math/sieve_of_eratosthenes_test.nako3 +10 -0
  65. package/core/test/algorithms/search/binary_search_test.nako3 +15 -0
  66. package/core/test/algorithms/search/breadth_first_search_test.nako3 +13 -0
  67. package/core/test/algorithms/search/depth_first_search_test.nako3 +13 -0
  68. package/core/test/algorithms/sort/heap_sort_test.nako3 +13 -0
  69. package/core/test/algorithms/sort/insertion_sort_test.nako3 +13 -0
  70. package/core/test/algorithms/sort/merge_sort_test.nako3 +18 -0
  71. package/core/test/algorithms/sort/quick_sort_test.nako3 +34 -0
  72. package/core/test/algorithms/string/knuth_morris_pratt_test.nako3 +16 -0
  73. package/core/test/algorithms/string/run_length_encoding_test.nako3 +13 -0
  74. package/core/test/array_test.mjs +3 -0
  75. package/core/test/fixtures/README.md +39 -0
  76. package/core/test/fixtures/make_parser_ast_golden.mjs +31 -0
  77. package/core/test/fixtures/parser_ast_golden.json +8027 -0
  78. package/core/test/fixtures/parser_corpus.mjs +120 -0
  79. package/core/test/func_call.mjs +18 -0
  80. package/core/test/func_test.mjs +28 -0
  81. package/core/test/indent_test.mjs +6 -0
  82. package/core/test/nako_basic_plugins_test.mjs +44 -0
  83. package/core/test/nako_event_test.mjs +127 -0
  84. package/core/test/nako_gen_perf_test.mjs +178 -0
  85. package/core/test/nako_parser_async_test.mjs +385 -0
  86. package/core/test/nako_parser_test.mjs +160 -0
  87. package/core/test/nako_plugin_manager_test.mjs +185 -0
  88. package/core/test/nako_require_test.mjs +153 -0
  89. package/core/test/nako_runner_test.mjs +174 -0
  90. package/core/test/nako_tokenizer_test.mjs +115 -0
  91. package/core/test/plugin_system_debug_test.mjs +138 -0
  92. package/core/test/plugin_system_split_test.mjs +179 -0
  93. package/core/test/plugin_system_test.mjs +6 -0
  94. package/core/tsconfig.json +0 -1
  95. package/demo/browsers.html +1 -1
  96. package/doc/SETUP.md +1 -1
  97. package/doc/ai-code-generation.md +136 -0
  98. package/doc/browsers.md +1 -1
  99. package/doc/command_list.json +16842 -0
  100. package/doc/search_command.md +222 -0
  101. package/doc/syntax-nako3.md +344 -0
  102. package/package.json +29 -26
  103. package/release/_hash.txt +40 -40
  104. package/release/_script-tags.txt +16 -16
  105. package/release/command.json +1 -1
  106. package/release/command.json.js +1 -1
  107. package/release/command_cnako3.json +1 -1
  108. package/release/command_list.json +1 -1
  109. package/release/edit_main.js +6 -6
  110. package/release/edit_main.js.map +3 -3
  111. package/release/editor.js +6 -6
  112. package/release/plugin_caniuse.js +1 -1
  113. package/release/plugin_caniuse.js.map +2 -2
  114. package/release/plugin_keigo.js.map +3 -3
  115. package/release/plugin_markup.js +46 -46
  116. package/release/plugin_markup.js.map +3 -3
  117. package/release/plugin_weykturtle3d.js +1 -1
  118. package/release/plugin_weykturtle3d.js.map +3 -3
  119. package/release/version.js +2 -2
  120. package/release/version_main.js +2 -2
  121. package/release/version_main.js.map +1 -1
  122. package/release/wnako3.js +219 -230
  123. package/release/wnako3.js.map +4 -4
  124. package/release/wnako3webworker.js +193 -204
  125. package/release/wnako3webworker.js.map +4 -4
  126. package/src/browsers.mjs +1 -1
  127. package/src/browsers.txt +0 -1
  128. package/src/cnako3mod.mjs +7 -2
  129. package/src/cnako3mod.mts +7 -2
  130. package/src/nako_version.mjs +2 -2
  131. package/src/nako_version.mts +2 -2
  132. package/src/plugin_browser_ajax.mjs +4 -4
  133. package/src/plugin_browser_ajax.mts +4 -4
  134. package/src/plugin_browser_audio.mjs +10 -10
  135. package/src/plugin_browser_audio.mts +10 -10
  136. package/src/plugin_browser_camera.mjs +4 -4
  137. package/src/plugin_browser_camera.mts +4 -4
  138. package/src/plugin_browser_canvas.mjs +2 -2
  139. package/src/plugin_browser_canvas.mts +2 -2
  140. package/src/plugin_browser_crypto.mjs +3 -3
  141. package/src/plugin_browser_crypto.mts +3 -3
  142. package/src/plugin_browser_dom_event.mjs +1 -1
  143. package/src/plugin_browser_dom_event.mts +1 -1
  144. package/src/plugin_browser_geolocation.mjs +1 -1
  145. package/src/plugin_browser_geolocation.mts +1 -1
  146. package/src/plugin_browser_hotkey.mjs +1 -1
  147. package/src/plugin_browser_hotkey.mts +1 -1
  148. package/src/plugin_browser_html.mjs +1 -1
  149. package/src/plugin_browser_html.mts +1 -1
  150. package/src/plugin_browser_location.mjs +1 -1
  151. package/src/plugin_browser_location.mts +1 -1
  152. package/src/plugin_browser_speech.mjs +1 -1
  153. package/src/plugin_browser_speech.mts +1 -1
  154. package/src/plugin_browser_storage.mjs +2 -2
  155. package/src/plugin_browser_storage.mts +2 -2
  156. package/src/plugin_httpserver.mjs +3 -3
  157. package/src/plugin_httpserver.mts +3 -3
  158. package/src/plugin_keigo.mjs +2 -2
  159. package/src/plugin_keigo.mts +2 -2
  160. package/src/plugin_node.mjs +48 -48
  161. package/src/plugin_node.mts +53 -53
  162. package/src/plugin_weykturtle3d.mjs +56 -56
  163. package/src/plugin_weykturtle3d.mts +56 -56
  164. package/src/wnako3.mjs +1 -1
  165. package/src/wnako3.mts +1 -1
  166. package/src/wnako3_editor.mjs +5 -5
  167. package/src/wnako3_editor.mts +5 -5
  168. package/src/wnako3mod.mjs +2 -2
  169. package/src/wnako3mod.mts +2 -2
  170. package/test/nako3edit/index_nako3_test.mjs +282 -0
  171. package/test/nako3server/index_nako3_test.mjs +239 -0
  172. package/test/node/ai_code_generation_guide_test.mjs +29 -0
  173. package/test/node/node_version_support_test.mjs +45 -0
  174. package/test/node/search_command_test.mjs +174 -0
  175. package/tools/nako3edit/AGENTS.md +23 -0
  176. package/tools/nako3edit/index.nako3 +404 -0
  177. package/tools/nako3server/AGENTS.md +23 -0
  178. package/tools/nako3server/index.nako3 +156 -23
  179. package/core/src/nako3.mjs +0 -1021
  180. package/core/src/nako_ast.mjs +0 -4
  181. package/core/src/nako_colors.mjs +0 -77
  182. package/core/src/nako_core_version.mjs +0 -8
  183. package/core/src/nako_csv.mjs +0 -193
  184. package/core/src/nako_errors.mjs +0 -166
  185. package/core/src/nako_from_dncl.mjs +0 -285
  186. package/core/src/nako_from_dncl2.mjs +0 -347
  187. package/core/src/nako_gen.mjs +0 -2500
  188. package/core/src/nako_global.mjs +0 -138
  189. package/core/src/nako_indent.mjs +0 -442
  190. package/core/src/nako_indent_chars.mjs +0 -29
  191. package/core/src/nako_indent_inline.mjs +0 -361
  192. package/core/src/nako_josi_list.mjs +0 -47
  193. package/core/src/nako_lex_rules.mjs +0 -319
  194. package/core/src/nako_lexer.mjs +0 -794
  195. package/core/src/nako_logger.mjs +0 -221
  196. package/core/src/nako_parser3.mjs +0 -3250
  197. package/core/src/nako_parser_base.mjs +0 -403
  198. package/core/src/nako_parser_const.mjs +0 -37
  199. package/core/src/nako_prepare.mjs +0 -329
  200. package/core/src/nako_reserved_words.mjs +0 -42
  201. package/core/src/nako_source_mapping.mjs +0 -207
  202. package/core/src/nako_test.mjs +0 -37
  203. package/core/src/nako_token.mjs +0 -1
  204. package/core/src/nako_tools.mjs +0 -53
  205. package/core/src/nako_types.mjs +0 -14
  206. package/core/src/plugin_api.mjs +0 -4
  207. package/core/src/plugin_csv.mjs +0 -97
  208. package/core/src/plugin_math.mjs +0 -352
  209. package/core/src/plugin_promise.mjs +0 -102
  210. package/core/src/plugin_system.mjs +0 -3810
  211. package/core/src/plugin_test.mjs +0 -52
  212. package/core/src/plugin_toml.mjs +0 -39
@@ -0,0 +1,13 @@
1
+ # 幅優先探索処理のテスト
2
+
3
+ G=[[1,2],[0,3,4],[0,5],[1],[1,5],[2,4]]
4
+ 実際はGを0から幅優先探索処理してJSONエンコード
5
+ 実際と『[0,1,2,3,4,5]』がASSERT等
6
+
7
+ G=[[1],[2],[0]]
8
+ 実際はGを1から幅優先探索処理してJSONエンコード
9
+ 実際と『[1,2,0]』がASSERT等
10
+
11
+ G=[[1],[0]]
12
+ 実際はGを3から幅優先探索処理してJSONエンコード
13
+ 実際と『[]』がASSERT等
@@ -0,0 +1,13 @@
1
+ # 深さ優先探索処理のテスト
2
+
3
+ G=[[1,2],[0,3,4],[0,5],[1],[1,5],[2,4]]
4
+ 実際はGを0から深さ優先探索処理してJSONエンコード
5
+ 実際と『[0,1,3,4,5,2]』がASSERT等
6
+
7
+ G=[[1],[2],[0]]
8
+ 実際はGを1から深さ優先探索処理してJSONエンコード
9
+ 実際と『[1,2,0]』がASSERT等
10
+
11
+ G=[[1],[0]]
12
+ 実際はGを-1から深さ優先探索処理してJSONエンコード
13
+ 実際と『[]』がASSERT等
@@ -0,0 +1,13 @@
1
+ # ヒープソート処理のテスト
2
+
3
+ A=[12,11,13,5,6,7]
4
+ 実際はAをヒープソート処理してJSONエンコード
5
+ 実際と『[5,6,7,11,12,13]』がASSERT等
6
+
7
+ A=[]
8
+ 実際はAをヒープソート処理してJSONエンコード
9
+ 実際と『[]』がASSERT等
10
+
11
+ A=[4,-2,4,0,-2]
12
+ 実際はAをヒープソート処理してJSONエンコード
13
+ 実際と『[-2,-2,0,4,4]』がASSERT等
@@ -0,0 +1,13 @@
1
+ # 挿入ソート処理のテスト
2
+
3
+ A=[5,2,4,6,1,3]
4
+ 実際はAを挿入ソート処理してJSONエンコード
5
+ 実際と『[1,2,3,4,5,6]』がASSERT等
6
+
7
+ A=[]
8
+ 実際はAを挿入ソート処理してJSONエンコード
9
+ 実際と『[]』がASSERT等
10
+
11
+ A=[3,-1,3,0,-1]
12
+ 実際はAを挿入ソート処理してJSONエンコード
13
+ 実際と『[-1,-1,0,3,3]』がASSERT等
@@ -0,0 +1,18 @@
1
+ # マージソート処理のテスト
2
+
3
+ A=[38,27,43,3,9,82,10]
4
+ 実際はAをマージソート処理してJSONエンコード
5
+ 実際と『[3,9,10,27,38,43,82]』がASSERT等
6
+
7
+ A=[]
8
+ 実際はAをマージソート処理してJSONエンコード
9
+ 実際と『[]』がASSERT等
10
+
11
+ A=[2,-3,2,0,-3]
12
+ 実際はAをマージソート処理してJSONエンコード
13
+ 実際と『[-3,-3,0,2,2]』がASSERT等
14
+
15
+ A=[3,1,2]
16
+ Aをマージソート処理
17
+ 実際はAをJSONエンコード
18
+ 実際と『[3,1,2]』がASSERT等
@@ -0,0 +1,34 @@
1
+ # クイックソート処理のテスト
2
+
3
+ A=[5,3,8,4,2,7,1,10]
4
+ 実際はAをクイックソート処理してJSONエンコード
5
+ 実際と『[1,2,3,4,5,7,8,10]』がASSERT等
6
+
7
+ A=[]
8
+ 実際はAをクイックソート処理してJSONエンコード
9
+ 実際と『[]』がASSERT等
10
+
11
+ A=[42]
12
+ 実際はAをクイックソート処理してJSONエンコード
13
+ 実際と『[42]』がASSERT等
14
+
15
+ A=[1,2,3,4,5]
16
+ 実際はAをクイックソート処理してJSONエンコード
17
+ 実際と『[1,2,3,4,5]』がASSERT等
18
+
19
+ A=[5,4,3,2,1]
20
+ 実際はAをクイックソート処理してJSONエンコード
21
+ 実際と『[1,2,3,4,5]』がASSERT等
22
+
23
+ A=[3,1,3,2,1,3]
24
+ 実際はAをクイックソート処理してJSONエンコード
25
+ 実際と『[1,1,2,3,3,3]』がASSERT等
26
+
27
+ A=[0,-5,3,-1,2,-5]
28
+ 実際はAをクイックソート処理してJSONエンコード
29
+ 実際と『[-5,-5,-1,0,2,3]』がASSERT等
30
+
31
+ A=[3,1,2]
32
+ Aをクイックソート処理
33
+ 実際はAをJSONエンコード
34
+ 実際と『[1,2,3]』がASSERT等
@@ -0,0 +1,16 @@
1
+ # KMP法のテスト
2
+
3
+ 実際は「ABC ABCDAB ABCDABCDABDE」から「ABCDABD」をKMP検索処理
4
+ 実際と15がASSERT等
5
+
6
+ 実際は「なでしこ3」から「なでしこ」をKMP検索処理
7
+ 実際と0がASSERT等
8
+
9
+ 実際は「ABCDEFG」から「XYZ」をKMP検索処理
10
+ 実際と-1がASSERT等
11
+
12
+ 実際は「😀A😀B」から「😀B」をKMP検索処理
13
+ 実際と2がASSERT等
14
+
15
+ 実際は「ABC」から「」をKMP検索処理
16
+ 実際と0がASSERT等
@@ -0,0 +1,13 @@
1
+ # ランレングス圧縮処理のテスト
2
+
3
+ 実際は「AAABCCDDDD」をランレングス圧縮処理してJSONエンコード
4
+ 実際と『[["A",3],["B",1],["C",2],["D",4]]』がASSERT等
5
+
6
+ 実際は「あああいうう」をランレングス圧縮処理してJSONエンコード
7
+ 実際と『[["あ",3],["い",1],["う",2]]』がASSERT等
8
+
9
+ 実際は「😀😀A」をランレングス圧縮処理してJSONエンコード
10
+ 実際と『[["😀",2],["A",1]]』がASSERT等
11
+
12
+ 実際は「」をランレングス圧縮処理してJSONエンコード
13
+ 実際と『[]』がASSERT等
@@ -131,6 +131,9 @@ describe('array_test', async () => {
131
131
  it('二次元配列+オブジェクトプロパティ #2139', async () => {
132
132
  await cmp('A=[[{"b":10}],[{"b":20}]]; A[0][0].b = 88; A[0][0].bを表示。', '88')
133
133
  })
134
+ it('カンマ指定の二次元配列+オブジェクトプロパティ', async () => {
135
+ await cmp('A=[[{"c":10}]]; A[0,0]$c = 88; A[0][0]$cを表示。', '88')
136
+ })
134
137
  it('配列+オブジェクトプロパティ(DOM和スタイル適用) #2139', async () => {
135
138
  // __getProp/__setPropを使った例
136
139
  await cmp(`
@@ -0,0 +1,39 @@
1
+ # core/test/fixtures
2
+
3
+ テストが読み込む固定データを置くディレクトリです。
4
+ `npm run test:core` のテストグロブは `core/test/*.mjs` なので、
5
+ このディレクトリのファイルがテストとして実行されることはありません。
6
+
7
+ ## 構文解析器のゴールデン AST (#2364)
8
+
9
+ | ファイル | 役割 |
10
+ |---|---|
11
+ | `parser_corpus.mjs` | 構文解析のコーパス(なでしこコード集)と、AST をプレーン化するヘルパー |
12
+ | `parser_ast_golden.json` | コーパスを構文解析した結果の AST を固定したもの |
13
+ | `make_parser_ast_golden.mjs` | `parser_ast_golden.json` を生成するスクリプト |
14
+
15
+ `core/test/nako_parser_test.mjs` が、現在の構文解析結果と
16
+ `parser_ast_golden.json` を `assert.deepStrictEqual` で比較します。
17
+ AST の全キー・全値に加えて**キーの並び順**まで比較するため、
18
+ 構文解析器に手を入れて結果が少しでも変われば必ず検出できます。
19
+
20
+ ### ゴールデンを再生成する
21
+
22
+ コーパス(`parser_corpus.mjs` の `PARSER_CORPUS`)を追加・変更したときや、
23
+ **意図的に**構文解析の結果を変更したときに再生成します。
24
+
25
+ ```bash
26
+ npm run build:tsc && node core/test/fixtures/make_parser_ast_golden.mjs
27
+ ```
28
+
29
+ `core/src/*.mjs` はビルド生成物(git 管理外)なので、
30
+ **再生成の前に必ずビルドしてください**。ビルドを忘れると古いコードの
31
+ AST がゴールデンになってしまいます。
32
+
33
+ ### 差分が出たときの読み方
34
+
35
+ 構文解析器のリファクタリング中にこのテストが落ちた場合、それは
36
+ **リファクタリングで挙動が変わってしまった**ことを意味します。
37
+ ゴールデンを再生成して通す前に、差分が意図したものか必ず確認してください。
38
+ `assert.deepStrictEqual` は差分箇所を表示するので、
39
+ どのノードのどのキーが変わったかを追えます。
@@ -0,0 +1,31 @@
1
+ /* eslint-disable no-undef */
2
+ /**
3
+ * `parser_ast_golden.json` を生成するスクリプト (#2364)
4
+ *
5
+ * コーパス(`parser_corpus.mjs` の PARSER_CORPUS)を構文解析し、
6
+ * その AST をゴールデンファイルとして書き出す。
7
+ *
8
+ * 実行前に必ずビルドすること(core/src/*.mjs はビルド生成物のため)。
9
+ *
10
+ * npm run build:tsc
11
+ * node core/test/fixtures/make_parser_ast_golden.mjs
12
+ *
13
+ * このディレクトリは `core/test/*.mjs` のテストグロブに含まれないので、
14
+ * テスト実行時にこのファイルが走ることはない。
15
+ */
16
+ import fs from 'node:fs'
17
+ import { PARSER_CORPUS, parseToPlainAst } from './parser_corpus.mjs'
18
+
19
+ const golden = {}
20
+ for (const [name, code] of Object.entries(PARSER_CORPUS)) {
21
+ try {
22
+ golden[name] = parseToPlainAst(code)
23
+ } catch (err) {
24
+ console.error(`構文解析に失敗しました: ${name}`)
25
+ throw err
26
+ }
27
+ }
28
+
29
+ const outPath = new URL('./parser_ast_golden.json', import.meta.url)
30
+ fs.writeFileSync(outPath, JSON.stringify(golden, null, 1) + '\n', 'utf8')
31
+ console.log(`${Object.keys(golden).length} 件のゴールデン AST を書き出しました`)