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
@@ -1,36 +1,169 @@
1
+ #!/usr/bin/env cnako3
2
+ # 超簡易サーバ(なでしこ3だけで簡単HTTPサーバ)
3
+ # もともと index.mjs (Node.js) で書かれていたものを、なでしこ3で書き直したものです。
1
4
  !「plugin_httpserver.mjs」を取り込む。
2
5
 
3
- ルート=母艦パスを「../../」で相対パス展開。
4
- DEMOパス=ルート&「/demo」
5
- PORT=8888
6
+ # --- 定数 ---
7
+ 定数のルートパス=母艦パスを「../../」で相対パス展開。
8
+ 定数のデモパス=「{ルートパス}/demo」
9
+ 定数の既定ポート=3000
10
+ 定数の環境変数一覧=環境変数一覧取得。
11
+ # デモフォルダへ割り当てるエイリアス
12
+ 定数のエイリアス一覧=["/extlib", "/css", "/image"]
13
+ # MIMEタイプの一覧
14
+ 定数のMIME一覧={
15
+ ".html": "text/html; charset=utf-8",
16
+ ".css": "text/css",
17
+ ".js": "text/javascript",
18
+ ".png": "image/png",
19
+ ".gif": "image/gif",
20
+ ".svg": "image/svg+xml"
21
+ }
6
22
 
7
- PORTで簡易HTTPサーバ起動時には
8
- 「起動しました。ブラウザで以下のURLにアクセスしてください。」と表示。
9
- 「http://localhost:{PORT}」と表示。
23
+ # --- 小さな便利関数 ---
24
+
25
+ # 文字列Sが文字列Pで始まるかどうかを調べる
26
+ ●(SがPで)先頭一致とは
27
+ ((Sで1からPを文字検索)=1)を戻す。
10
28
  ここまで。
11
29
 
12
- # 挨拶
13
- 「/hello」で簡易HTTPサーバ受信した時には
14
-   「hello」を表示。
15
-   「<h1>こんにちは</h1>」を簡易HTTPサーバ出力。
30
+ # 環境変数KEYの値を返す。未設定なら既定値Dを返す。
31
+ ●(KEYとDの)環境変数参照とは
32
+ もし、(環境変数一覧のKEYが辞書キー存在)ならば
33
+ (環境変数一覧[KEY])を戻す。
34
+ ここまで。
35
+ Dを戻す。
16
36
  ここまで。
17
- 「/mul」で簡易HTTPサーバ受信した時には
18
-   GETデータをJSONエンコードして表示。
19
-   「<h1>計算:{GETデータ['a'] * GETデータ['b']}</h1>」を簡易HTTPサーバ出力。
37
+
38
+ # パスPATHからMIMEタイプを求めて返す
39
+ ●(PATHの)MIMEタイプ取得とは
40
+ 拡張子=「.txt」
41
+ 部品=PATHを「.」で区切る。
42
+ もし、((部品の要素数)>1)ならば
43
+ 拡張子=「.{(部品[(部品の要素数)-1])を小文字変換}」
44
+ ここまで。
45
+ もし、(MIME一覧の拡張子が辞書キー存在)ならば
46
+ (MIME一覧[拡張子])を戻す。
47
+ ここまで。
48
+ 「text/plain; charset=utf-8」を戻す。
20
49
  ここまで。
21
50
 
22
- # 静的リソースの割り当て
23
- 「/release」を「{ルート}/release」に簡易HTTPサーバ静的パス指定。
24
- 「/demo」をDEMOパスに簡易HTTPサーバ静的パス指定。
25
- 「/src」を「{ルート}/src」に簡易HTTPサーバ静的パス指定。
26
- 「/css」を「{DEMOパス}/css」に簡易HTTPサーバ静的パス指定。
27
- 「/extlib」を「{DEMOパス}/extlib」に簡易HTTPサーバ静的パス指定。
28
- 「/static」を母艦パスに簡易HTTPサーバ静的パス指定。
51
+ # --- 起動前の準備 ---
29
52
 
30
- # ルートなら「/demo」にリダイレクトする
31
- 「/」で簡易HTTPサーバ受信した時には
32
-   「/demo/」へ簡易HTTPサーバ移動。
53
+ # ポート番号を検証して、安全な値のみを利用する
54
+ ●サーバポート解決とは
55
+ 生ポート=「PORT」と「」の環境変数参照。
56
+ # 環境変数になければコマンドライン引数を見る(cnako3ではスクリプト名の次が引数)
57
+ もし、(生ポート=「」)ならば
58
+ もし、((コマンドラインの要素数)>3)ならば
59
+ 生ポート=コマンドライン[3]
60
+ ここまで。
61
+ ここまで。
62
+ もし、(生ポート=「」)ならば
63
+ 既定ポートを戻す。
64
+ ここまで。
65
+ ポート番号=生ポートを整数変換。
66
+ もし、((ポート番号を非数判定)または(ポート番号<0)または(ポート番号>65535))ならば
67
+ 「[ERROR] 無効なポート番号です: {生ポート}」と表示。
68
+ 「[ERROR] 環境変数 PORT またはコマンドライン引数には 0 から 65535 の整数を指定してください。」と表示。
69
+ 終了。
70
+ ここまで。
71
+ ポート番号を戻す。
72
+ ここまで。
73
+
74
+ # ライブラリ(extlib)があるかチェックして、なければダウンロードする
75
+ ●外部ライブラリ確認とは
76
+ テストファイル=「{デモパス}/extlib/pure-min.css」
77
+ もし、(テストファイルが存在)ならば、戻る。
78
+ 「try to download extlib」と表示。
79
+ エラー監視
80
+ 「npm run extlib:install」を起動待機。
81
+ エラーならば
82
+ エラーメッセージを表示。
83
+ ここまで。
33
84
  ここまで。
34
85
 
86
+ # --- リクエストの処理 ---
87
+
88
+ # 404エラーを返す
89
+ ●(URIとFPATHで)エラー404返信とは
90
+ 「[ERROR] 404 {URI}」と表示。
91
+ 「| file= {FPATH}」と表示。
92
+ ヘッダ={"Content-Type": "text/html; charset=utf-8"}
93
+ 404でヘッダを簡易HTTPサーバヘッダ出力。
94
+ 「<html><meta charset="utf-8"><body><h1>404 残念(ToT) ファイルがありません。</h1></body></html>」を簡易HTTPサーバ出力。
95
+ ここまで。
35
96
 
97
+ # URIを元にして返信すべきファイルのパスを求める
98
+ ●(URIの)ファイルパス取得とは
99
+ # サニタイズ - 上のフォルダは許さない
100
+ 安全URI=URIの「..」を「」に置換。
101
+ # ファイルパスを生成
102
+ 基準パス=ルートパス
103
+ # エイリアス(demoフォルダ以下へ割り当てる)
104
+ エイリアス一覧を反復
105
+ もし、(安全URIが対象で先頭一致)ならば
106
+ 基準パス=デモパス
107
+ ここまで。
108
+ ここまで。
109
+ FPATH=(「{基準パス}/{安全URI}」の「//」を「/」に置換)
110
+ # フォルダなら index.html を足す
111
+ もし、(FPATHがフォルダ存在)ならば
112
+ FPATH=(「{FPATH}/index.html」の「//」を「/」に置換)
113
+ ここまで。
114
+ FPATHを戻す。
115
+ ここまで。
36
116
 
117
+ # リクエストされたURIを処理して返信する
118
+ ●(URIの)リクエスト処理とは
119
+ 「[ようこそ] {URIをJSONエンコード}」と表示。
120
+ # root なら "demo/" へリダイレクト
121
+ もし、(URI=「/」)ならば
122
+ 「/demo/」へ簡易HTTPサーバ移動。
123
+ 戻る。
124
+ ここまで。
125
+ FPATH=URIのファイルパス取得。
126
+ # ファイルの存在確認
127
+ もし、((FPATHが存在)=偽)ならば
128
+ URIとFPATHでエラー404返信。
129
+ 戻る。
130
+ ここまで。
131
+ # ファイルを読んで返す
132
+ 読込成功=真
133
+ エラー監視
134
+ データ=FPATHをバイナリ読。
135
+ エラーならば
136
+ 読込成功=偽
137
+ ここまで。
138
+ もし、(読込成功=偽)ならば
139
+ ヘッダ={"Content-Type": "text/plain; charset=utf-8"}
140
+ 500でヘッダを簡易HTTPサーバヘッダ出力。
141
+ 「Failed to read file.」を簡易HTTPサーバ出力。
142
+ 戻る。
143
+ ここまで。
144
+ ヘッダ={"Content-Type": ""}
145
+ ヘッダ["Content-Type"]=FPATHのMIMEタイプ取得。
146
+ 200でヘッダを簡易HTTPサーバヘッダ出力。
147
+ データを簡易HTTPサーバ出力。
148
+ ここまで。
149
+
150
+ # --- ここからメイン処理 ---
151
+ 外部ライブラリ確認。
152
+ 定数のサーバポート=サーバポート解決。
153
+ 定数のサーバホスト=「NAKO3SERVER_HOST」と「localhost」の環境変数参照。
154
+ 定数の自動起動=「NAKO3SERVER_OPEN」と「1」の環境変数参照。
155
+
156
+ # サーバを起動
157
+ サーバポートで簡易HTTPサーバ起動時には
158
+ サーバURL=「http://{サーバホスト}:{サーバポート}」
159
+ 「### 超簡易Webサーバが起動しました」と表示。
160
+ 「[URL] {サーバURL}」と表示。
161
+ もし、(自動起動≠「0」)ならば
162
+ サーバURLをブラウザ起動。
163
+ ここまで。
164
+ ここまで。
165
+
166
+ # すべてのリクエストを受け取って処理する
167
+ 「/」で簡易HTTPサーバ受信した時には
168
+ (GETデータ["?URL"])のリクエスト処理。
169
+ ここまで。