freelang-editor 11.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 (1473) hide show
  1. package/.config/jest.config.js +47 -0
  2. package/.config/jest.fast.config.js +9 -0
  3. package/.config/openapi.yaml +457 -0
  4. package/.config/tsconfig.json +30 -0
  5. package/.github/CODE_OF_CONDUCT.md +176 -0
  6. package/.github/CONTRIBUTING.md +296 -0
  7. package/.github/DISCUSSIONS.md +179 -0
  8. package/.github/ISSUE_TEMPLATE/bug-report.md +44 -0
  9. package/.github/ISSUE_TEMPLATE/feature-request.md +39 -0
  10. package/.github/pull_request_template.md +87 -0
  11. package/.github/workflows/phase-3c-l2-proof.yml +101 -0
  12. package/.github/workflows/phase-c-full-slack.yml +409 -0
  13. package/.github/workflows/phase-c-full.yml +241 -0
  14. package/.github/workflows/phase-c-scan.yml +64 -0
  15. package/.gitmodules +3 -0
  16. package/.tmp.js +3 -0
  17. package/CHANGELOG.md +1182 -0
  18. package/CLAUDE.md +633 -0
  19. package/Dockerfile +3 -0
  20. package/LICENSE +21 -0
  21. package/MISTAKES-COVERAGE.json +115 -0
  22. package/Makefile +95 -0
  23. package/PHASE-F-ROADMAP.md +554 -0
  24. package/README.md +459 -0
  25. package/SELF_HOSTING_CHECKLIST.md +155 -0
  26. package/benchmark-freelang.fl +47 -0
  27. package/benchmark-results.json +37 -0
  28. package/benchmark-simple.fl +38 -0
  29. package/bin/freelang-migrate +310 -0
  30. package/bin/freelang-smart +258 -0
  31. package/bootstrap.js +1134 -0
  32. package/docker-compose.yml +3 -0
  33. package/docs/AI_FRIENDLINESS.md +181 -0
  34. package/docs/AI_LEARNING_PATH.md +542 -0
  35. package/docs/AI_MAINTENANCE.md +153 -0
  36. package/docs/AI_QUICKSTART.md +380 -0
  37. package/docs/AI_REFERENCE.md +559 -0
  38. package/docs/AI_RELIABILITY_GUIDE.md +597 -0
  39. package/docs/AKL_ARCHITECTURE.md +228 -0
  40. package/docs/AKL_P0_KIMDB.md +215 -0
  41. package/docs/API.md +380 -0
  42. package/docs/ARCHITECTURE.md +208 -0
  43. package/docs/CHANGELOG.md +1014 -0
  44. package/docs/CLAUDE.md +991 -0
  45. package/docs/CLAUDE_AI.md +210 -0
  46. package/docs/CODEGEN_IMPROVEMENTS.md +158 -0
  47. package/docs/CODE_OF_CONDUCT.md +337 -0
  48. package/docs/CONTRIBUTING.md +437 -0
  49. package/docs/CRON_AUTOMATION.md +97 -0
  50. package/docs/DEPLOYMENT.md +357 -0
  51. package/docs/DETERMINISM_GUIDE.md +174 -0
  52. package/docs/HUMAN_GUIDE.md +599 -0
  53. package/docs/INDEX.md +199 -0
  54. package/docs/INLINE_TEST_GUIDE.md +231 -0
  55. package/docs/LANGUAGE-FAULTS.md +583 -0
  56. package/docs/LANGUAGE_IMPROVEMENT_REQUESTS.md +187 -0
  57. package/docs/LEARNING.md +257 -0
  58. package/docs/MISTAKES-100.md +52 -0
  59. package/docs/MISTAKES.md +131 -0
  60. package/docs/NAMING_CONVENTIONS.md +158 -0
  61. package/docs/NIGHTLY-MONITORING.md +222 -0
  62. package/docs/OFFICIAL_LANGUAGE.md +249 -0
  63. package/docs/ONBOARDING_1HOUR.md +210 -0
  64. package/docs/PERFORMANCE.md +329 -0
  65. package/docs/PHASE-3C-L2-PROOF-PLAN.md +282 -0
  66. package/docs/PHASE-3C-L2-RESULTS.md +183 -0
  67. package/docs/PHASE-3D-AI-LIBRARY.md +170 -0
  68. package/docs/PHASE-3E-VM-OPTIMIZATION.md +192 -0
  69. package/docs/PHASE-C-CI.md +242 -0
  70. package/docs/PHASE-C-PR-CHECKLIST.md +267 -0
  71. package/docs/PHASE-C-ROADMAP.md +141 -0
  72. package/docs/PHASE-C-SCAN.md +205 -0
  73. package/docs/PHASE-G-ROADMAP.md +228 -0
  74. package/docs/PHASE-X-V11.5-ROADMAP.md +267 -0
  75. package/docs/PHASE4_IMPLEMENTATION_PLAN.md +290 -0
  76. package/docs/PHASE5-COMPLETION.md +186 -0
  77. package/docs/PHASE5-SUMMARY.md +82 -0
  78. package/docs/PLUGIN_GUIDE.md +241 -0
  79. package/docs/PROJECT_OVERVIEW_KO.md +66 -0
  80. package/docs/QUICKSTART.md +160 -0
  81. package/docs/README.md +192 -0
  82. package/docs/RESERVED.md +125 -0
  83. package/docs/ROADMAP.md +191 -0
  84. package/docs/SECURITY.md +518 -0
  85. package/docs/SETUP.md +127 -0
  86. package/docs/SLACK-SETUP.md +190 -0
  87. package/docs/STATE_OF_V11.md +74 -0
  88. package/docs/STDLIB_NAMING_AUDIT.md +154 -0
  89. package/docs/STDLIB_REFERENCE.md +2722 -0
  90. package/docs/STYLE_GUIDE.md +559 -0
  91. package/docs/TASK5-MAP-DESTRUCTURE-DESIGN.md +136 -0
  92. package/docs/TOOLS.md +357 -0
  93. package/docs/TYPE_SYSTEM_GUIDE.md +201 -0
  94. package/docs/UI-PATTERN.md +265 -0
  95. package/docs/V11.5-RULES.md +416 -0
  96. package/docs/V11.6-HARNESS-RULES.md +222 -0
  97. package/docs/V11.6-MULTI-AGENT-PLAN.md +265 -0
  98. package/docs/V11.6-STABILIZATION-PLAN.md +290 -0
  99. package/docs/Y4-2B_DRY_RUN.md +142 -0
  100. package/docs/_classifications.json +882 -0
  101. package/docs/api/stdlib.md +134 -0
  102. package/docs/blog/2026-04-17-v11-ai-first-evolution.md +223 -0
  103. package/docs/blog/2026-04-20-self-hosting-fixedpoint.md +269 -0
  104. package/docs/blog/2026-05-04-mistakes-are-language-faults.md +267 -0
  105. package/docs/blog/2026-05-04-mistakes-coverage-honest.md +170 -0
  106. package/docs/blog/2026-05-04-phase-g-followup-smart-wrapper.md +188 -0
  107. package/docs/blog/2026-05-04-phase-g-mistakes-100.md +269 -0
  108. package/docs/blog/2026-05-04-phase-x-v11.5-launch.md +224 -0
  109. package/docs/blog/2026-05-04-v11.5.0-real-language-change.md +252 -0
  110. package/docs/blog-demo/README.md +44 -0
  111. package/docs/examples/index.md +78 -0
  112. package/docs/examples/todo-app.md +99 -0
  113. package/docs/guide/ai-blocks.md +335 -0
  114. package/docs/guide/basics.md +235 -0
  115. package/docs/guide/frameworks.md +319 -0
  116. package/docs/homepage/README.md +164 -0
  117. package/docs/index.md +183 -0
  118. package/docs/v12-DESIGN.md +214 -0
  119. package/examples/README.md +26 -0
  120. package/examples/browser-test.html +149 -0
  121. package/examples/csv-tool/analyze.fl +222 -0
  122. package/examples/csv-tool/employees.csv +16 -0
  123. package/examples/csv-tool/products.csv +21 -0
  124. package/examples/factorial.fl +9 -0
  125. package/examples/fib30.fl +4 -0
  126. package/examples/hello.fl +2 -0
  127. package/examples/hello.fl.js +3 -0
  128. package/examples/learning-session/01-grade-stats.fl +49 -0
  129. package/examples/learning-session/02-class-stats.fl +52 -0
  130. package/examples/learning-session/03-cart.fl +61 -0
  131. package/examples/learning-session/04-word-freq.fl +57 -0
  132. package/examples/learning-session/05-todo.fl +69 -0
  133. package/examples/learning-session/06-library.fl +76 -0
  134. package/examples/learning-session/07-currency.fl +99 -0
  135. package/examples/learning-session/08-csv-grades.fl +104 -0
  136. package/examples/learning-session/09-calc-repl.fl +92 -0
  137. package/examples/learning-session/10-contacts.fl +109 -0
  138. package/examples/learning-session/11-markdown.fl +107 -0
  139. package/examples/learning-session/12-calendar.fl +87 -0
  140. package/examples/learning-session/13-statistics.fl +123 -0
  141. package/examples/learning-session/14-primes.fl +107 -0
  142. package/examples/learning-session/15-statistics.fl +123 -0
  143. package/examples/learning-session/16-calendar.fl +87 -0
  144. package/examples/learning-session/17-markdown.fl +107 -0
  145. package/examples/learning-session/18-contacts.fl +109 -0
  146. package/examples/learning-session/19-json-serializer.fl +86 -0
  147. package/examples/learning-session/20-template.fl +201 -0
  148. package/examples/learning-session/21-calc-parser.fl +148 -0
  149. package/examples/learning-session/22-table.fl +96 -0
  150. package/examples/patterns/01-map-filter-reduce.fl +50 -0
  151. package/examples/patterns/02-error-handling.fl +51 -0
  152. package/examples/patterns/03-type-validation.fl +57 -0
  153. package/examples/patterns/04-state-management.fl +44 -0
  154. package/examples/patterns/05-api-integration.fl +95 -0
  155. package/examples/patterns/06-database-operations.fl +113 -0
  156. package/examples/patterns/07-string-processing.fl +86 -0
  157. package/examples/patterns/08-data-transformation.fl +92 -0
  158. package/examples/patterns/09-decision-logic.fl +122 -0
  159. package/examples/patterns/10-agent-orchestration.fl +184 -0
  160. package/examples/patterns/README.md +344 -0
  161. package/examples/simple-server.fl +29 -0
  162. package/examples/tables-app.fl +219 -0
  163. package/examples/test-libs.fl +272 -0
  164. package/jest.config.js +4 -0
  165. package/lib/datetime.fl +123 -0
  166. package/lib/http-client.fl +129 -0
  167. package/lib/pipeline.fl +150 -0
  168. package/lib/query.fl +160 -0
  169. package/lib/result.fl +124 -0
  170. package/lib/template.fl +161 -0
  171. package/lib/validate.fl +136 -0
  172. package/package.json +58 -0
  173. package/scripts/ai-eval.js +318 -0
  174. package/scripts/ai-self-verify.js +200 -0
  175. package/scripts/ai-validate.js +302 -0
  176. package/scripts/bench.sh +71 -0
  177. package/scripts/benchmark.js +258 -0
  178. package/scripts/benchmark.sh +99 -0
  179. package/scripts/build-binary.sh +68 -0
  180. package/scripts/build-runtime.sh +46 -0
  181. package/scripts/build-stage1-final.sh +58 -0
  182. package/scripts/build-stage1.sh +119 -0
  183. package/scripts/build-standalone.sh +17 -0
  184. package/scripts/build.js +130 -0
  185. package/scripts/check-let-regressions.js +95 -0
  186. package/scripts/check-parens.py +117 -0
  187. package/scripts/check-ports.sh +49 -0
  188. package/scripts/check-syntax.js +30 -0
  189. package/scripts/cli-extras.js +135 -0
  190. package/scripts/cron-daily-verify.sh +101 -0
  191. package/scripts/deploy.sh +91 -0
  192. package/scripts/dev.sh +37 -0
  193. package/scripts/extract-fl-examples.js +29 -0
  194. package/scripts/extract-runtime-helpers.js +122 -0
  195. package/scripts/fl-compile.sh +14 -0
  196. package/scripts/fl-fixpoint.sh +28 -0
  197. package/scripts/fl-repl.sh +21 -0
  198. package/scripts/fl-run.sh +41 -0
  199. package/scripts/fl-serve.sh +25 -0
  200. package/scripts/fuzz-compiler.js +92 -0
  201. package/scripts/gen-ai-prompt.js +340 -0
  202. package/scripts/gen-fixtures.js +166 -0
  203. package/scripts/gen-mistakes-split.js +199 -0
  204. package/scripts/gen-stdlib-docs.js +69 -0
  205. package/scripts/lint-stdlib-aliases.js +166 -0
  206. package/scripts/measure-baseline.sh +43 -0
  207. package/scripts/property-test.js +885 -0
  208. package/scripts/push-to-gogs.sh +60 -0
  209. package/scripts/regression-scan.js +132 -0
  210. package/scripts/run-jest-shard.sh +85 -0
  211. package/scripts/safe-push.sh +37 -0
  212. package/scripts/scan-fl-tokens.js +170 -0
  213. package/scripts/scan-for-fl-tokens.sh +17 -0
  214. package/scripts/self-diff.sh +95 -0
  215. package/scripts/snapshot-v0.sh +35 -0
  216. package/scripts/test-l2-fixpoint.sh +54 -0
  217. package/scripts/verify-all.sh +130 -0
  218. package/scripts/verify-build-deterministic.sh +110 -0
  219. package/scripts/verify-c7-bootstrap.sh +150 -0
  220. package/scripts/verify-c8-fixed-point-simple.sh +121 -0
  221. package/scripts/verify-c8-fixed-point.sh +133 -0
  222. package/scripts/verify-c9-fuzzing.sh +214 -0
  223. package/scripts/verify-fixed-point-deep.sh +133 -0
  224. package/scripts/verify-fixed-point.sh +65 -0
  225. package/scripts/verify-l2-proof.sh +153 -0
  226. package/scripts/verify-l3-proof.sh +40 -0
  227. package/scripts/verify-mistakes-coverage.js +120 -0
  228. package/scripts/verify-self-host.sh +509 -0
  229. package/self/CHANGELOG.md +964 -0
  230. package/self/COMPILER_REDESIGN_FAILURES.md +59 -0
  231. package/self/INTEGRATION-CHECKLIST.md +113 -0
  232. package/self/README.md +34 -0
  233. package/self/all.fl +1353 -0
  234. package/self/ast.fl +219 -0
  235. package/self/ast.self.js +47 -0
  236. package/self/bench/_bi_json-parse.js +46 -0
  237. package/self/bench/_bi_json-str.js +60 -0
  238. package/self/bench/_bi_list-distinct.js +37 -0
  239. package/self/bench/_bi_list-filter-even.js +56 -0
  240. package/self/bench/_bi_list-first.js +29 -0
  241. package/self/bench/_bi_list-last.js +28 -0
  242. package/self/bench/_bi_list-map-inc.js +41 -0
  243. package/self/bench/_bi_list-range.js +22 -0
  244. package/self/bench/_bi_list-reduce-sum.js +50 -0
  245. package/self/bench/_bi_list-reverse.js +28 -0
  246. package/self/bench/_bi_list-sort.js +35 -0
  247. package/self/bench/_bi_list-take.js +36 -0
  248. package/self/bench/_bi_m-abs.js +24 -0
  249. package/self/bench/_bi_m-floor.js +22 -0
  250. package/self/bench/_bi_m-max.js +26 -0
  251. package/self/bench/_bi_m-min.js +26 -0
  252. package/self/bench/_bi_m-mod.js +21 -0
  253. package/self/bench/_bi_map-has.js +50 -0
  254. package/self/bench/_bi_map-keys.js +50 -0
  255. package/self/bench/_bi_map-values.js +52 -0
  256. package/self/bench/_bi_str-concat.js +36 -0
  257. package/self/bench/_bi_str-contains.js +43 -0
  258. package/self/bench/_bi_str-ends.js +45 -0
  259. package/self/bench/_bi_str-index.js +34 -0
  260. package/self/bench/_bi_str-lower.js +23 -0
  261. package/self/bench/_bi_str-repeat.js +26 -0
  262. package/self/bench/_bi_str-split.js +41 -0
  263. package/self/bench/_bi_str-starts.js +47 -0
  264. package/self/bench/_bi_str-trim.js +26 -0
  265. package/self/bench/_bi_str-upper.js +23 -0
  266. package/self/bench/_bi_t-list.js +24 -0
  267. package/self/bench/_bi_t-null.js +23 -0
  268. package/self/bench/_bi_t-number.js +23 -0
  269. package/self/bench/_bi_t-string.js +25 -0
  270. package/self/bench/_bi_t-typeof.js +25 -0
  271. package/self/bench/_c_parse_probe.fl +426 -0
  272. package/self/bench/_c_parse_probe.js +67 -0
  273. package/self/bench/_codegen_nodrv.fl +751 -0
  274. package/self/bench/_combined2.fl +423 -0
  275. package/self/bench/_combined_arr.fl +422 -0
  276. package/self/bench/_combined_astprobe.fl +429 -0
  277. package/self/bench/_combined_astprobe.js +69 -0
  278. package/self/bench/_combined_cg.fl +424 -0
  279. package/self/bench/_combined_cg.js +64 -0
  280. package/self/bench/_combined_lex.fl +421 -0
  281. package/self/bench/_combined_trace.fl +435 -0
  282. package/self/bench/_combined_trace.js +75 -0
  283. package/self/bench/_ext_abs-neg.js +2 -0
  284. package/self/bench/_ext_and.js +2 -0
  285. package/self/bench/_ext_cond-1.js +2 -0
  286. package/self/bench/_ext_cond-2.js +2 -0
  287. package/self/bench/_ext_do-seq.js +2 -0
  288. package/self/bench/_ext_fact20.js +3 -0
  289. package/self/bench/_ext_fib25.js +3 -0
  290. package/self/bench/_ext_length.js +2 -0
  291. package/self/bench/_ext_let-1d.js +18 -0
  292. package/self/bench/_ext_let-2d.js +2 -0
  293. package/self/bench/_ext_list-sum.js +3 -0
  294. package/self/bench/_ext_math.js +2 -0
  295. package/self/bench/_ext_or.js +2 -0
  296. package/self/bench/_ext_str.js +2 -0
  297. package/self/bench/_fact15.js +2 -0
  298. package/self/bench/_fb_fact15.js +2 -0
  299. package/self/bench/_fb_func-fact.js +2 -0
  300. package/self/bench/_fb_func-multi.js +2 -0
  301. package/self/bench/_fb_func-mutual.js +3 -0
  302. package/self/bench/_fb_func-simple.js +21 -0
  303. package/self/bench/_fib.js +2 -0
  304. package/self/bench/_fn_async-await-seq.js +40 -0
  305. package/self/bench/_fn_async-await.js +3 -0
  306. package/self/bench/_fn_async-print.js +26 -0
  307. package/self/bench/_fn_async-result.js +1 -0
  308. package/self/bench/_fn_call-form.js +24 -0
  309. package/self/bench/_fn_compose.js +37 -0
  310. package/self/bench/_fn_pipe.js +34 -0
  311. package/self/bench/_fn_thread-first-sexpr.js +31 -0
  312. package/self/bench/_fn_thread-first.js +25 -0
  313. package/self/bench/_fn_thread-last.js +31 -0
  314. package/self/bench/_generated.js +35 -0
  315. package/self/bench/_mt_match-default.js +51 -0
  316. package/self/bench/_mt_match-num.js +58 -0
  317. package/self/bench/_mt_match-str.js +56 -0
  318. package/self/bench/_mt_match-var.js +32 -0
  319. package/self/bench/_mt_match-wild.js +36 -0
  320. package/self/bench/_mt_struct-make.js +81 -0
  321. package/self/bench/_mt_struct-tag.js +81 -0
  322. package/self/bench/_probe.fl +1 -0
  323. package/self/bench/_probe2.fl +1 -0
  324. package/self/bench/_probe3.fl +3 -0
  325. package/self/bench/_probe_apply.fl +1 -0
  326. package/self/bench/_probe_args.fl +7 -0
  327. package/self/bench/_probe_arr.fl +7 -0
  328. package/self/bench/_probe_arr2.fl +5 -0
  329. package/self/bench/_probe_block.fl +7 -0
  330. package/self/bench/_probe_call.fl +1 -0
  331. package/self/bench/_probe_cg.fl +27 -0
  332. package/self/bench/_probe_compose.fl +13 -0
  333. package/self/bench/_probe_define.fl +1 -0
  334. package/self/bench/_probe_keys.fl +5 -0
  335. package/self/bench/_probe_length.fl +5 -0
  336. package/self/bench/_probe_lexparse.fl +4 -0
  337. package/self/bench/_probe_loop.fl +12 -0
  338. package/self/bench/_probe_map.fl +8 -0
  339. package/self/bench/_probe_map2.fl +8 -0
  340. package/self/bench/_probe_map3.fl +5 -0
  341. package/self/bench/_probe_mapkeys.fl +5 -0
  342. package/self/bench/_probe_mapv12.fl +1 -0
  343. package/self/bench/_probe_mapv12.js +2 -0
  344. package/self/bench/_probe_match.fl +1 -0
  345. package/self/bench/_probe_match2.fl +1 -0
  346. package/self/bench/_probe_neg.fl +7 -0
  347. package/self/bench/_probe_neg2.fl +3 -0
  348. package/self/bench/_probe_protocol.fl +7 -0
  349. package/self/bench/_probe_self_parse.fl +6 -0
  350. package/self/bench/_probe_struct.fl +1 -0
  351. package/self/bench/_probe_true.fl +3 -0
  352. package/self/bench/_probe_true2.fl +6 -0
  353. package/self/bench/_probe_v12_cg.fl +7 -0
  354. package/self/bench/_probe_v12_extract.fl +8 -0
  355. package/self/bench/_probe_v12_extract.js +7 -0
  356. package/self/bench/_probe_v12_internal.fl +21 -0
  357. package/self/bench/_probe_v12_map_ast.fl +12 -0
  358. package/self/bench/_rs_combo.js +3 -0
  359. package/self/bench/_rs_gcd.js +36 -0
  360. package/self/bench/_rs_grade.js +2 -0
  361. package/self/bench/_rs_mutual-fib.js +2 -0
  362. package/self/bench/_rs_range-sum.js +2 -0
  363. package/self/bench/_rs_sum-10k.js +2 -0
  364. package/self/bench/_rs_sum-5k.js +2 -0
  365. package/self/bench/_sf_loop-fact-10.js +73 -0
  366. package/self/bench/_sf_loop-sum-10k.js +87 -0
  367. package/self/bench/_sf_set-x.js +40 -0
  368. package/self/bench/_sf_throw-catch.js +1 -0
  369. package/self/bench/_sf_while-5.js +62 -0
  370. package/self/bench/_v12_combined.fl +1184 -0
  371. package/self/bench/_v12_extract_test.fl +14 -0
  372. package/self/bench/_v12_extract_test.js +7 -0
  373. package/self/bench/_v12_inspect.js +26 -0
  374. package/self/bench/_v12_inspect_mod.js +137 -0
  375. package/self/bench/_v12_makevartest.fl +8 -0
  376. package/self/bench/_v12_makevartest.js +6 -0
  377. package/self/bench/_v12_parse_probe.fl +9 -0
  378. package/self/bench/_v12_parse_trace.fl +18 -0
  379. package/self/bench/_v12_simple_fn.fl +2 -0
  380. package/self/bench/_v12_simple_fn.js +3 -0
  381. package/self/bench/_v12_trace.fl +2 -0
  382. package/self/bench/_v12_trace.js +3 -0
  383. package/self/bench/collection.js +13 -0
  384. package/self/bench/fib30.fl +4 -0
  385. package/self/bench/final-test.fl +12 -0
  386. package/self/bench/final-test.js +2 -0
  387. package/self/bench/fp1-v12.js +4 -0
  388. package/self/bench/fp1.fl +3 -0
  389. package/self/bench/fp1.fp.js +4 -0
  390. package/self/bench/fp2-v12.js +4 -0
  391. package/self/bench/fp2.fl +3 -0
  392. package/self/bench/fp2.fp.js +4 -0
  393. package/self/bench/fp3-v12.js +8 -0
  394. package/self/bench/fp3.fl +11 -0
  395. package/self/bench/fp3.fp.js +8 -0
  396. package/self/bench/fp4-v12.js +6 -0
  397. package/self/bench/fp4.fl +9 -0
  398. package/self/bench/fp4.fp.js +6 -0
  399. package/self/bench/hello-sample.fl +3 -0
  400. package/self/bench/hello-sample.js +4 -0
  401. package/self/bench/hello.fl +1 -0
  402. package/self/bench/json.js +9 -0
  403. package/self/bench/json1mb.fl +3 -0
  404. package/self/bench/math.js +8 -0
  405. package/self/bench/realworld.fl +17 -0
  406. package/self/bench/realworld.js +8 -0
  407. package/self/bench/regex.js +10 -0
  408. package/self/bench/sample.json +1 -0
  409. package/self/bench/string.js +7 -0
  410. package/self/bench/test-ffi.fl +3 -0
  411. package/self/bench/test-ffi.js +2 -0
  412. package/self/bench/test-hof-advanced.fl +7 -0
  413. package/self/bench/test-hof-advanced.js +2 -0
  414. package/self/bench/test-hof.fl +5 -0
  415. package/self/bench/test-hof.js +2 -0
  416. package/self/bench/test-output.txt +1 -0
  417. package/self/bench/test-phase15-integration.fl +16 -0
  418. package/self/bench/test-phase15-integration.js +3 -0
  419. package/self/bench/test-phase19-complete.fl +24 -0
  420. package/self/bench/test-phase19-complete.js +2 -0
  421. package/self/bench/test-stdlib-codegen.fl +9 -0
  422. package/self/bench/test-stdlib-codegen.js +2 -0
  423. package/self/bench/test-time.fl +8 -0
  424. package/self/bench/test-time.js +2 -0
  425. package/self/bench/time.js +9 -0
  426. package/self/bench/tiny-v12.js +2 -0
  427. package/self/bench/tiny.fl +1 -0
  428. package/self/builtins/core.fl +150 -0
  429. package/self/char-class.fl +45 -0
  430. package/self/codegen-core.fl +733 -0
  431. package/self/codegen-final.fl +135 -0
  432. package/self/codegen.fl +379 -0
  433. package/self/codegen.fl.bak +856 -0
  434. package/self/codegen.self.js +75 -0
  435. package/self/examples/agent-loop.fl +32 -0
  436. package/self/examples/ci-cd-example.fl +114 -0
  437. package/self/examples/cloud-real.fl +134 -0
  438. package/self/examples/docker-example.fl +67 -0
  439. package/self/examples/fullstack-app.fl +330 -0
  440. package/self/examples/k8s-example.fl +91 -0
  441. package/self/examples/microservices.fl +448 -0
  442. package/self/examples/rest-api.fl +253 -0
  443. package/self/examples/style-example.fl +133 -0
  444. package/self/examples/workflow-orchestration.fl +44 -0
  445. package/self/fixtures/eval/add.fl +1 -0
  446. package/self/fixtures/eval/and-sc.fl +1 -0
  447. package/self/fixtures/eval/bool-false.fl +1 -0
  448. package/self/fixtures/eval/bool-true.fl +1 -0
  449. package/self/fixtures/eval/closure.fl +1 -0
  450. package/self/fixtures/eval/cmp-eq.fl +1 -0
  451. package/self/fixtures/eval/cmp-lt.fl +1 -0
  452. package/self/fixtures/eval/cond-first.fl +1 -0
  453. package/self/fixtures/eval/define-fn3.fl +1 -0
  454. package/self/fixtures/eval/define-var.fl +1 -0
  455. package/self/fixtures/eval/defn-bare.fl +1 -0
  456. package/self/fixtures/eval/defn-call.fl +1 -0
  457. package/self/fixtures/eval/div.fl +1 -0
  458. package/self/fixtures/eval/filter-hof.fl +1 -0
  459. package/self/fixtures/eval/floor.fl +1 -0
  460. package/self/fixtures/eval/fn-apply.fl +1 -0
  461. package/self/fixtures/eval/get-idx.fl +1 -0
  462. package/self/fixtures/eval/get-key.fl +1 -0
  463. package/self/fixtures/eval/higher-order.fl +1 -0
  464. package/self/fixtures/eval/let-bare.fl +1 -0
  465. package/self/fixtures/eval/let-flat.fl +1 -0
  466. package/self/fixtures/eval/let-use.fl +1 -0
  467. package/self/fixtures/eval/list-first.fl +1 -0
  468. package/self/fixtures/eval/list-last.fl +1 -0
  469. package/self/fixtures/eval/list-len.fl +1 -0
  470. package/self/fixtures/eval/map-hof.fl +1 -0
  471. package/self/fixtures/eval/mod.fl +1 -0
  472. package/self/fixtures/eval/mul-nested.fl +1 -0
  473. package/self/fixtures/eval/not.fl +1 -0
  474. package/self/fixtures/eval/null-p.fl +1 -0
  475. package/self/fixtures/eval/or-sc.fl +1 -0
  476. package/self/fixtures/eval/pow.fl +1 -0
  477. package/self/fixtures/eval/recursion.fl +1 -0
  478. package/self/fixtures/eval/reduce-hof.fl +1 -0
  479. package/self/fixtures/eval/replace.fl +1 -0
  480. package/self/fixtures/eval/sqrt.fl +1 -0
  481. package/self/fixtures/eval/str-concat.fl +1 -0
  482. package/self/fixtures/eval/str-num.fl +1 -0
  483. package/self/fixtures/eval/sub.fl +1 -0
  484. package/self/fixtures/eval/substring.fl +1 -0
  485. package/self/fixtures/lex/array.fl +1 -0
  486. package/self/fixtures/lex/at-atom.fl +1 -0
  487. package/self/fixtures/lex/block.fl +1 -0
  488. package/self/fixtures/lex/comment.fl +2 -0
  489. package/self/fixtures/lex/deep-array.fl +1 -0
  490. package/self/fixtures/lex/deep-map.fl +1 -0
  491. package/self/fixtures/lex/deep-nest.fl +1 -0
  492. package/self/fixtures/lex/dollar-dot.fl +1 -0
  493. package/self/fixtures/lex/empty-list.fl +1 -0
  494. package/self/fixtures/lex/empty-str.fl +1 -0
  495. package/self/fixtures/lex/empty.fl +1 -0
  496. package/self/fixtures/lex/float.fl +1 -0
  497. package/self/fixtures/lex/hex.fl +1 -0
  498. package/self/fixtures/lex/kebab-sym.fl +1 -0
  499. package/self/fixtures/lex/keyword.fl +1 -0
  500. package/self/fixtures/lex/leading-zero.fl +1 -0
  501. package/self/fixtures/lex/long-num.fl +1 -0
  502. package/self/fixtures/lex/many-args.fl +1 -0
  503. package/self/fixtures/lex/map.fl +1 -0
  504. package/self/fixtures/lex/mixed.fl +1 -0
  505. package/self/fixtures/lex/neg-float.fl +1 -0
  506. package/self/fixtures/lex/negative.fl +1 -0
  507. package/self/fixtures/lex/nested.fl +1 -0
  508. package/self/fixtures/lex/null.fl +1 -0
  509. package/self/fixtures/lex/pipe-op.fl +1 -0
  510. package/self/fixtures/lex/route-like.fl +1 -0
  511. package/self/fixtures/lex/scientific.fl +1 -0
  512. package/self/fixtures/lex/single-num.fl +1 -0
  513. package/self/fixtures/lex/small-sexpr.fl +1 -0
  514. package/self/fixtures/lex/spaces.fl +1 -0
  515. package/self/fixtures/lex/str-quote.fl +1 -0
  516. package/self/fixtures/lex/str-tab.fl +1 -0
  517. package/self/fixtures/lex/string-esc.fl +1 -0
  518. package/self/fixtures/lex/string.fl +1 -0
  519. package/self/fixtures/lex/symbol.fl +1 -0
  520. package/self/fixtures/lex/tabs-nl.fl +3 -0
  521. package/self/fixtures/lex/true-false.fl +1 -0
  522. package/self/fixtures/lex/unicode.fl +1 -0
  523. package/self/fixtures/lex/variable.fl +1 -0
  524. package/self/fixtures/lex/zero.fl +1 -0
  525. package/self/fixtures/parse/and-or.fl +1 -0
  526. package/self/fixtures/parse/array-lit.fl +1 -0
  527. package/self/fixtures/parse/block-func.fl +1 -0
  528. package/self/fixtures/parse/compose.fl +1 -0
  529. package/self/fixtures/parse/cond.fl +1 -0
  530. package/self/fixtures/parse/define-fn.fl +1 -0
  531. package/self/fixtures/parse/define-val.fl +1 -0
  532. package/self/fixtures/parse/defn.fl +1 -0
  533. package/self/fixtures/parse/do-begin.fl +1 -0
  534. package/self/fixtures/parse/dotted.fl +1 -0
  535. package/self/fixtures/parse/empty-fn.fl +1 -0
  536. package/self/fixtures/parse/empty-list.fl +1 -0
  537. package/self/fixtures/parse/fn.fl +1 -0
  538. package/self/fixtures/parse/if-else.fl +1 -0
  539. package/self/fixtures/parse/if-only.fl +1 -0
  540. package/self/fixtures/parse/keyword-arg.fl +1 -0
  541. package/self/fixtures/parse/kw.fl +1 -0
  542. package/self/fixtures/parse/let-1d.fl +1 -0
  543. package/self/fixtures/parse/let-2d.fl +1 -0
  544. package/self/fixtures/parse/let-bare.fl +1 -0
  545. package/self/fixtures/parse/literal-num.fl +1 -0
  546. package/self/fixtures/parse/literal-str.fl +1 -0
  547. package/self/fixtures/parse/loop-recur.fl +1 -0
  548. package/self/fixtures/parse/map-lit.fl +1 -0
  549. package/self/fixtures/parse/match-simple.fl +1 -0
  550. package/self/fixtures/parse/multi-body.fl +1 -0
  551. package/self/fixtures/parse/nested-arr.fl +1 -0
  552. package/self/fixtures/parse/nested-block.fl +1 -0
  553. package/self/fixtures/parse/nested-map.fl +1 -0
  554. package/self/fixtures/parse/nested.fl +1 -0
  555. package/self/fixtures/parse/pipe.fl +1 -0
  556. package/self/fixtures/parse/quote.fl +1 -0
  557. package/self/fixtures/parse/set-bang.fl +1 -0
  558. package/self/fixtures/parse/sexpr.fl +1 -0
  559. package/self/fixtures/parse/str-interp.fl +1 -0
  560. package/self/fixtures/parse/sym.fl +1 -0
  561. package/self/fixtures/parse/thread-first.fl +1 -0
  562. package/self/fixtures/parse/thread-last.fl +1 -0
  563. package/self/fixtures/parse/try-catch.fl +1 -0
  564. package/self/fixtures/parse/var.fl +1 -0
  565. package/self/full-compiler-fixed.fl +1308 -0
  566. package/self/full-compiler-v1-bloated.fl +1298 -0
  567. package/self/full-compiler.fl +1301 -0
  568. package/self/interpreter.fl +351 -0
  569. package/self/lexer.fl +200 -0
  570. package/self/lexer.self.js +30 -0
  571. package/self/main.fl +22 -0
  572. package/self/parser.fl +241 -0
  573. package/self/parser.self.js +33 -0
  574. package/self/runtime/http-server.js +642 -0
  575. package/self/runtime/interpreter.js +30787 -0
  576. package/self/runtime/repl.js +186 -0
  577. package/self/runtime-helpers.ts +282 -0
  578. package/self/scope.fl +80 -0
  579. package/self/scope.self.js +1 -0
  580. package/self/self/bench/_bi_list-distinct.js +2 -0
  581. package/self/self/bench/_bi_list-filter-even.js +2 -0
  582. package/self/self/bench/_bi_list-first.js +2 -0
  583. package/self/self/bench/_bi_list-last.js +2 -0
  584. package/self/self/bench/_bi_list-map-inc.js +2 -0
  585. package/self/self/bench/_bi_list-range.js +2 -0
  586. package/self/self/bench/_bi_list-reduce-sum.js +2 -0
  587. package/self/self/bench/_bi_list-reverse.js +2 -0
  588. package/self/self/bench/_bi_list-sort.js +2 -0
  589. package/self/self/bench/_bi_list-take.js +2 -0
  590. package/self/self/bench/_bi_map-has.js +2 -0
  591. package/self/self/bench/_bi_map-keys.js +2 -0
  592. package/self/self/bench/_bi_map-values.js +2 -0
  593. package/self/self/bench/_bi_str-concat.js +2 -0
  594. package/self/self/bench/_bi_str-contains.js +2 -0
  595. package/self/self/bench/_bi_str-ends.js +2 -0
  596. package/self/self/bench/_bi_str-index.js +2 -0
  597. package/self/self/bench/_bi_str-lower.js +2 -0
  598. package/self/self/bench/_bi_str-repeat.js +2 -0
  599. package/self/self/bench/_bi_str-split.js +2 -0
  600. package/self/self/bench/_bi_str-starts.js +2 -0
  601. package/self/self/bench/_bi_str-trim.js +2 -0
  602. package/self/self/bench/_bi_str-upper.js +2 -0
  603. package/self/self/bench/_ext_abs-neg.js +2 -0
  604. package/self/self/bench/_ext_and.js +2 -0
  605. package/self/self/bench/_ext_cond-1.js +2 -0
  606. package/self/self/bench/_ext_cond-2.js +2 -0
  607. package/self/self/bench/_ext_do-seq.js +2 -0
  608. package/self/self/bench/_ext_fact20.js +3 -0
  609. package/self/self/bench/_ext_fib25.js +3 -0
  610. package/self/self/bench/_ext_length.js +2 -0
  611. package/self/self/bench/_ext_let-1d.js +2 -0
  612. package/self/self/bench/_ext_let-2d.js +2 -0
  613. package/self/self/bench/_ext_list-sum.js +3 -0
  614. package/self/self/bench/_ext_math.js +2 -0
  615. package/self/self/bench/_ext_or.js +2 -0
  616. package/self/self/bench/_ext_str.js +2 -0
  617. package/self/self/bench/_fact15.js +2 -0
  618. package/self/self/bench/_fb_fact15.js +2 -0
  619. package/self/self/bench/_fb_func-fact.js +2 -0
  620. package/self/self/bench/_fb_func-multi.js +2 -0
  621. package/self/self/bench/_fb_func-mutual.js +3 -0
  622. package/self/self/bench/_fb_func-simple.js +2 -0
  623. package/self/self/bench/_fib.js +2 -0
  624. package/self/self/bench/_fn_async-await-seq.js +2 -0
  625. package/self/self/bench/_fn_async-print.js +2 -0
  626. package/self/self/bench/_fn_call-form.js +2 -0
  627. package/self/self/bench/_fn_compose.js +2 -0
  628. package/self/self/bench/_fn_pipe.js +2 -0
  629. package/self/self/bench/_fn_thread-first-sexpr.js +2 -0
  630. package/self/self/bench/_fn_thread-first.js +2 -0
  631. package/self/self/bench/_fn_thread-last.js +2 -0
  632. package/self/self/bench/_generated.js +2 -0
  633. package/self/self/bench/_mt_match-default.js +2 -0
  634. package/self/self/bench/_mt_match-num.js +2 -0
  635. package/self/self/bench/_mt_match-str.js +2 -0
  636. package/self/self/bench/_mt_match-var.js +2 -0
  637. package/self/self/bench/_mt_match-wild.js +2 -0
  638. package/self/self/bench/_mt_struct-make.js +4 -0
  639. package/self/self/bench/_mt_struct-tag.js +4 -0
  640. package/self/self/bench/_rs_combo.js +3 -0
  641. package/self/self/bench/_rs_gcd.js +2 -0
  642. package/self/self/bench/_rs_grade.js +2 -0
  643. package/self/self/bench/_rs_mutual-fib.js +2 -0
  644. package/self/self/bench/_rs_range-sum.js +2 -0
  645. package/self/self/bench/_rs_sum-5k.js +2 -0
  646. package/self/self/bench/_sf_loop-fact-10.js +1 -0
  647. package/self/self/bench/_sf_loop-sum-10k.js +1 -0
  648. package/self/self/bench/_sf_set-x.js +3 -0
  649. package/self/self/bench/_sf_throw-catch.js +1 -0
  650. package/self/self/bench/_sf_while-5.js +3 -0
  651. package/self/stdlib/ai.fl +73 -0
  652. package/self/stdlib/assert.fl +30 -0
  653. package/self/stdlib/async.fl +48 -0
  654. package/self/stdlib/base64.fl +22 -0
  655. package/self/stdlib/binary.fl +30 -0
  656. package/self/stdlib/build.fl +69 -0
  657. package/self/stdlib/collection.fl +37 -0
  658. package/self/stdlib/color.fl +35 -0
  659. package/self/stdlib/crypto-hash.fl +29 -0
  660. package/self/stdlib/crypto.fl +56 -0
  661. package/self/stdlib/data.fl +69 -0
  662. package/self/stdlib/db.fl +53 -0
  663. package/self/stdlib/encoding.fl +49 -0
  664. package/self/stdlib/error.fl +36 -0
  665. package/self/stdlib/feed.fl +86 -0
  666. package/self/stdlib/file.fl +53 -0
  667. package/self/stdlib/format.fl +34 -0
  668. package/self/stdlib/graph.fl +72 -0
  669. package/self/stdlib/hash.fl +32 -0
  670. package/self/stdlib/heap.fl +76 -0
  671. package/self/stdlib/http.fl +47 -0
  672. package/self/stdlib/image.fl +45 -0
  673. package/self/stdlib/json.fl +11 -0
  674. package/self/stdlib/list-extra.fl +32 -0
  675. package/self/stdlib/markdown.fl +59 -0
  676. package/self/stdlib/math-extra.fl +34 -0
  677. package/self/stdlib/math.fl +13 -0
  678. package/self/stdlib/metadata.fl +66 -0
  679. package/self/stdlib/mongodb/bson.fl +21 -0
  680. package/self/stdlib/mongodb/schema.fl +95 -0
  681. package/self/stdlib/mongodb/wire.fl +54 -0
  682. package/self/stdlib/mongodb.fl +172 -0
  683. package/self/stdlib/path.fl +72 -0
  684. package/self/stdlib/plot.fl +56 -0
  685. package/self/stdlib/process.fl +50 -0
  686. package/self/stdlib/queue.fl +65 -0
  687. package/self/stdlib/regex.fl +11 -0
  688. package/self/stdlib/resource.fl +61 -0
  689. package/self/stdlib/search.fl +54 -0
  690. package/self/stdlib/set-extra.fl +35 -0
  691. package/self/stdlib/sort.fl +61 -0
  692. package/self/stdlib/stack.fl +54 -0
  693. package/self/stdlib/stats.fl +110 -0
  694. package/self/stdlib/stream.fl +56 -0
  695. package/self/stdlib/string-extended.fl +25 -0
  696. package/self/stdlib/string-extra.fl +40 -0
  697. package/self/stdlib/string.fl +21 -0
  698. package/self/stdlib/test-helpers.fl +51 -0
  699. package/self/stdlib/test-runner.fl +76 -0
  700. package/self/stdlib/time-extra.fl +27 -0
  701. package/self/stdlib/time.fl +31 -0
  702. package/self/stdlib/tree.fl +57 -0
  703. package/self/stdlib/types.fl +85 -0
  704. package/self/stdlib/url.fl +33 -0
  705. package/self/stdlib/uuid.fl +28 -0
  706. package/self/stdlib/validation.fl +42 -0
  707. package/self/stdlib/vector-math.fl +52 -0
  708. package/self/stdlib/ws.fl +52 -0
  709. package/self/tests/mongodb-phase3.fl +75 -0
  710. package/self/tests/mongodb-wire-phase2.fl +45 -0
  711. package/self/tests/test-ast.fl +36 -0
  712. package/self/tests/test-builtins.fl +340 -0
  713. package/self/tests/test-char-class.fl +29 -0
  714. package/self/tests/test-codegen-builtins.fl +240 -0
  715. package/self/tests/test-codegen-ext.fl +380 -0
  716. package/self/tests/test-codegen-ffi.fl +295 -0
  717. package/self/tests/test-codegen-fn.fl +177 -0
  718. package/self/tests/test-codegen-match.fl +161 -0
  719. package/self/tests/test-codegen-run.fl +252 -0
  720. package/self/tests/test-codegen-sf.fl +262 -0
  721. package/self/tests/test-codegen.fl +260 -0
  722. package/self/tests/test-core-fl.fl +63 -0
  723. package/self/tests/test-forward-decl.fl +5 -0
  724. package/self/tests/test-func-block.fl +4 -0
  725. package/self/tests/test-interp-user-fn.fl +296 -0
  726. package/self/tests/test-interp.fl +225 -0
  727. package/self/tests/test-lexer.fl +162 -0
  728. package/self/tests/test-list-debug.fl +21 -0
  729. package/self/tests/test-mutual-rec.fl +6 -0
  730. package/self/tests/test-parser-debug.fl +35 -0
  731. package/self/tests/test-parser-full-debug.fl +66 -0
  732. package/self/tests/test-parser-lex-debug.fl +107 -0
  733. package/self/tests/test-parser-lex-only.fl +40 -0
  734. package/self/tests/test-parser-simple-debug.fl +35 -0
  735. package/self/tests/test-parser.fl +262 -0
  736. package/self/tests/test-real-stdlib.fl +377 -0
  737. package/self/tests/test-scope.fl +74 -0
  738. package/self/tests/test-selfcompile.fl +325 -0
  739. package/self/tests/test-stdlib.fl +44 -0
  740. package/self/tests/test-tco.fl +16 -0
  741. package/self/tests/test-token.fl +4 -0
  742. package/self/token.fl +38 -0
  743. package/self/token.self.js +8 -0
  744. package/self/v12-driver.fl +16 -0
  745. package/self/verify.fl +39 -0
  746. package/self-evolve/1-observe-ast.fl +28 -0
  747. package/self-evolve/2-inspect-block.fl +35 -0
  748. package/self-evolve/3-full-ast-json.fl +10 -0
  749. package/self-evolve/4-trace-block-fields.fl +23 -0
  750. package/self-evolve/5-analyze-do-ast.fl +29 -0
  751. package/self-evolve/6-test-do-elim-simple.fl +14 -0
  752. package/self-evolve/debug-evaluate.fl +24 -0
  753. package/self-evolve/debug-gen1-const-fold.fl +57 -0
  754. package/self-evolve/debug-map.fl +15 -0
  755. package/self-evolve/debug-optimize-simple.fl +95 -0
  756. package/self-evolve/debug-recursive-map.fl +23 -0
  757. package/self-evolve/logs/gen-0.fl +1658 -0
  758. package/self-evolve/logs/gen-1.fl +1658 -0
  759. package/self-evolve/logs/gen-2.fl +1658 -0
  760. package/self-evolve/logs/speed-gen-0.fl +1423 -0
  761. package/self-evolve/run-semantic-test.js +130 -0
  762. package/self-evolve/test-basic.fl +19 -0
  763. package/self-evolve/test-fold-direct.fl +60 -0
  764. package/self-evolve/test-gen1-simple.fl +67 -0
  765. package/self-evolve/test-optimize-debug.fl +63 -0
  766. package/self-evolve/tmp-test.fl +1 -0
  767. package/self-evolve/v11-analyzer.fl +40 -0
  768. package/self-evolve/v11-benchmark.fl +45 -0
  769. package/self-evolve/v11-evolution-real.fl +45 -0
  770. package/self-evolve/v11-evolution.fl +32 -0
  771. package/self-evolve/v11-gen1-validate.fl +157 -0
  772. package/self-evolve/v11-optimizer-constant-fold.fl +124 -0
  773. package/self-evolve/v11-optimizer-dead-expr.fl +111 -0
  774. package/self-evolve/v11-optimizer-gen1-complete.fl +180 -0
  775. package/self-evolve/v11-optimizer-gen1.fl +68 -0
  776. package/self-evolve/v11-optimizer.fl +56 -0
  777. package/self-evolve/v11-semantic-test.fl +54 -0
  778. package/self-evolve/v11-speed-benchmark.fl +106 -0
  779. package/self-evolve/v11-speed-optimizer.fl +79 -0
  780. package/src/AGENT-DSL.md +527 -0
  781. package/src/CLI-DEPLOYMENT.md +204 -0
  782. package/src/CLI.md +361 -0
  783. package/src/EXPRESS-ADVANCED.md +294 -0
  784. package/src/EXPRESS-AUTH.md +365 -0
  785. package/src/EXPRESS-CACHE.md +409 -0
  786. package/src/EXPRESS-COMPLETE.md +569 -0
  787. package/src/EXPRESS-README.md +121 -0
  788. package/src/EXPRESS-TEST.md +492 -0
  789. package/src/EXPRESS-WEBSOCKET.md +391 -0
  790. package/src/LOGGING-GUIDE.md +354 -0
  791. package/src/STORAGE-GUIDE.md +416 -0
  792. package/src/__tests__/advanced.test.ts +573 -0
  793. package/src/__tests__/ai-library.test.ts +210 -0
  794. package/src/__tests__/build-determinism.test.ts +33 -0
  795. package/src/__tests__/builtins-advanced.test.ts +150 -0
  796. package/src/__tests__/builtins-sanity.test.ts +180 -0
  797. package/src/__tests__/codegen.let.test.ts +81 -0
  798. package/src/__tests__/core.test.ts +188 -0
  799. package/src/__tests__/coverage-boost.test.ts +626 -0
  800. package/src/__tests__/cron-scheduler.test.ts +269 -0
  801. package/src/__tests__/enterprise-blocks.test.ts +63 -0
  802. package/src/__tests__/errors.test.ts +313 -0
  803. package/src/__tests__/integration.test.ts +219 -0
  804. package/src/__tests__/interpreter.test.ts +170 -0
  805. package/src/__tests__/l2-proof.test.ts +78 -0
  806. package/src/__tests__/lexer-parser.test.ts +366 -0
  807. package/src/__tests__/lexer.test.ts +106 -0
  808. package/src/__tests__/mariadb-prepared-statement.test.ts +206 -0
  809. package/src/__tests__/migrate.test.ts +403 -0
  810. package/src/__tests__/mongodb-integration.test.ts.skip +207 -0
  811. package/src/__tests__/mongodb-phase4.test.ts +132 -0
  812. package/src/__tests__/p1-1-parallel-tasks.test.ts +179 -0
  813. package/src/__tests__/p1-2-compensation.test.ts +242 -0
  814. package/src/__tests__/p1-3-distributed.test.ts +160 -0
  815. package/src/__tests__/p1-4-observability.test.ts +161 -0
  816. package/src/__tests__/parser.test.ts +142 -0
  817. package/src/__tests__/phase151-self-evolve.test.ts +161 -0
  818. package/src/__tests__/rate-limiter.test.ts +274 -0
  819. package/src/__tests__/self-hosting.test.ts +174 -0
  820. package/src/__tests__/semantic-preservation.test.ts +207 -0
  821. package/src/__tests__/setup.ts +34 -0
  822. package/src/__tests__/special-forms-advanced.test.ts +106 -0
  823. package/src/__tests__/stdlib-crypto-rsa.test.ts +122 -0
  824. package/src/__tests__/stdlib-f4.test.ts +159 -0
  825. package/src/__tests__/stdlib-helpers.test.ts +128 -0
  826. package/src/__tests__/stdlib-modules.test.ts +161 -0
  827. package/src/__tests__/stdlib-mongodb.test.ts +331 -0
  828. package/src/__tests__/stdlib-new.test.ts +269 -0
  829. package/src/__tests__/stdlib-perf.test.ts +125 -0
  830. package/src/__tests__/stdlib-phase-b.test.ts +249 -0
  831. package/src/__tests__/stdlib.test.ts +163 -0
  832. package/src/__tests__/v12-alpha.test.ts +205 -0
  833. package/src/__tests__/vm-optin.test.ts +141 -0
  834. package/src/__tests__/web-integration.test.ts +1452 -0
  835. package/src/__tests__/weblibs.test.ts +210 -0
  836. package/src/_aliases.json +1123 -0
  837. package/src/_mongodb_helper.js +272 -0
  838. package/src/_stdlib-signatures.json +1 -0
  839. package/src/agent-chain.ts +71 -0
  840. package/src/agent-dsl.fl +168 -0
  841. package/src/agent-example-error-handling.fl +51 -0
  842. package/src/agent-example-sequential.fl +66 -0
  843. package/src/agent-example-state-tracking.fl +70 -0
  844. package/src/agent.ts +393 -0
  845. package/src/align.ts +349 -0
  846. package/src/analogy.ts +78 -0
  847. package/src/ast-helpers.ts +199 -0
  848. package/src/ast.ts +817 -0
  849. package/src/async-runtime.ts +263 -0
  850. package/src/belief.ts +86 -0
  851. package/src/benchmark-self.ts +275 -0
  852. package/src/benchmarks/bench-interpreter.ts +73 -0
  853. package/src/benchmarks/bench-runner.ts +85 -0
  854. package/src/benchmarks/bench-vm.ts +128 -0
  855. package/src/browser-debug-panel.ts +220 -0
  856. package/src/browser-entry.ts +79 -0
  857. package/src/browser-stubs/child-process-stubs.ts +6 -0
  858. package/src/browser-stubs/crypto-stubs.ts +15 -0
  859. package/src/browser-stubs/misc-stubs.ts +4 -0
  860. package/src/browser-stubs/node-stubs.ts +17 -0
  861. package/src/browser-stubs/path-stubs.ts +6 -0
  862. package/src/bytecode.ts +41 -0
  863. package/src/causal.ts +258 -0
  864. package/src/chain-agents.ts +86 -0
  865. package/src/checkpoint.ts +106 -0
  866. package/src/ci-runner.ts +279 -0
  867. package/src/cli.ts +2136 -0
  868. package/src/codegen-js.ts +847 -0
  869. package/src/cognitive.ts +95 -0
  870. package/src/compete.ts +60 -0
  871. package/src/compiler.ts +267 -0
  872. package/src/compose-reason.ts +118 -0
  873. package/src/consensus.ts +109 -0
  874. package/src/context-window.ts +139 -0
  875. package/src/cot.ts +241 -0
  876. package/src/counterfactual.ts +268 -0
  877. package/src/critique.ts +77 -0
  878. package/src/crossover.ts +218 -0
  879. package/src/curiosity.ts +305 -0
  880. package/src/debate.ts +64 -0
  881. package/src/debug-api.ts +92 -0
  882. package/src/debugger.ts +185 -0
  883. package/src/delegate.ts +78 -0
  884. package/src/doc-extractor.ts +255 -0
  885. package/src/doc-renderer.ts +131 -0
  886. package/src/echo-server-demo.fl +17 -0
  887. package/src/error-formatter.ts +369 -0
  888. package/src/error-system.ts +88 -0
  889. package/src/errors.ts +281 -0
  890. package/src/ethics-check.ts +408 -0
  891. package/src/eval-ai-blocks.ts +182 -0
  892. package/src/eval-ai-handlers.ts +132 -0
  893. package/src/eval-builtins-ai.ts +1659 -0
  894. package/src/eval-builtins.ts +5956 -0
  895. package/src/eval-call-function.ts +665 -0
  896. package/src/eval-infra-blocks.ts +450 -0
  897. package/src/eval-module-system.ts +286 -0
  898. package/src/eval-pattern-match.ts +289 -0
  899. package/src/eval-phase150.ts +87 -0
  900. package/src/eval-reasoning-sequence.ts +218 -0
  901. package/src/eval-special-forms.ts +2154 -0
  902. package/src/eval-style-blocks.ts +193 -0
  903. package/src/eval-type-classes.ts +148 -0
  904. package/src/evolve.ts +276 -0
  905. package/src/explain.ts +345 -0
  906. package/src/express-advanced.fl +78 -0
  907. package/src/express-auth.fl +118 -0
  908. package/src/express-cache.fl +118 -0
  909. package/src/express-chat.fl +81 -0
  910. package/src/express-example.fl +67 -0
  911. package/src/express-test.fl +331 -0
  912. package/src/express.fl +92 -0
  913. package/src/fitness.ts +238 -0
  914. package/src/fl-app-demo.fl +19 -0
  915. package/src/fl-files/fl-fmt.fl +29 -0
  916. package/src/fl-files/fl-lint.fl +61 -0
  917. package/src/fl-files/fl-test.fl +52 -0
  918. package/src/fl-http-demo.fl +19 -0
  919. package/src/fl-list-utils.fl +108 -0
  920. package/src/fl-math-lib.fl +14 -0
  921. package/src/fl-sdk.ts +154 -0
  922. package/src/fl-server-demo.fl +74 -0
  923. package/src/fl-str-utils.fl +29 -0
  924. package/src/fl-tutor.ts +126 -0
  925. package/src/formatter.ts +581 -0
  926. package/src/freelang-codegen.fl +904 -0
  927. package/src/freelang-interpreter.fl +483 -0
  928. package/src/freelang-lexer.fl +337 -0
  929. package/src/freelang-parser.fl +349 -0
  930. package/src/freelang-stdlib.fl +246 -0
  931. package/src/freelang-typechecker.fl +422 -0
  932. package/src/freelang-v9-complete.ts +474 -0
  933. package/src/generation.ts +201 -0
  934. package/src/gpt-mini-p3.fl +316 -0
  935. package/src/hot-reload.ts +235 -0
  936. package/src/http-server-runner.ts +89 -0
  937. package/src/hypothesis.ts +62 -0
  938. package/src/immutable.ts +140 -0
  939. package/src/interpreter-context.ts +87 -0
  940. package/src/interpreter-scope.ts +140 -0
  941. package/src/interpreter.ts +2351 -0
  942. package/src/lazy-seq.ts +134 -0
  943. package/src/learned-facts-store.ts +306 -0
  944. package/src/lexer.ts +359 -0
  945. package/src/lint-rules.ts +584 -0
  946. package/src/linter.ts +237 -0
  947. package/src/logger.ts +128 -0
  948. package/src/logging-deterministic.fl +138 -0
  949. package/src/lsp-server.ts +379 -0
  950. package/src/macro-expander.ts +195 -0
  951. package/src/maybe-chain.ts +108 -0
  952. package/src/maybe-type.ts +163 -0
  953. package/src/memory-system.ts +142 -0
  954. package/src/meta-reason.ts +93 -0
  955. package/src/multi-agent-hub.ts +247 -0
  956. package/src/multi-agent.ts +101 -0
  957. package/src/mutate.ts +226 -0
  958. package/src/negotiate.ts +55 -0
  959. package/src/optimizer.ts +277 -0
  960. package/src/orchestrate.ts +154 -0
  961. package/src/package-manager.ts +375 -0
  962. package/src/parser.ts +2722 -0
  963. package/src/peer-review.ts +53 -0
  964. package/src/predict.ts +365 -0
  965. package/src/profiler.ts +150 -0
  966. package/src/prompt-compiler.ts +123 -0
  967. package/src/protocol.ts +114 -0
  968. package/src/prune.ts +195 -0
  969. package/src/quality-loop.ts +105 -0
  970. package/src/rag.ts +81 -0
  971. package/src/reasoning-debugger.ts +122 -0
  972. package/src/refactor-self.ts +362 -0
  973. package/src/reflect.ts +186 -0
  974. package/src/repl.ts +323 -0
  975. package/src/result-type.ts +126 -0
  976. package/src/return-signal.ts +10 -0
  977. package/src/runtime-entry.ts +8 -0
  978. package/src/runtime-helpers.ts +234 -0
  979. package/src/self-evolution-hub.ts +431 -0
  980. package/src/self-improve.ts +107 -0
  981. package/src/source-map.ts +114 -0
  982. package/src/stdlib-agent.js +164 -0
  983. package/src/stdlib-agent.ts +225 -0
  984. package/src/stdlib-ai-native.ts +176 -0
  985. package/src/stdlib-ai-workflow.ts +308 -0
  986. package/src/stdlib-ai.ts +180 -0
  987. package/src/stdlib-async.ts +179 -0
  988. package/src/stdlib-audit.ts +94 -0
  989. package/src/stdlib-auth.ts +196 -0
  990. package/src/stdlib-bits.ts +86 -0
  991. package/src/stdlib-blog.ts +127 -0
  992. package/src/stdlib-browser.ts +239 -0
  993. package/src/stdlib-cache.ts +147 -0
  994. package/src/stdlib-capture-error.ts +183 -0
  995. package/src/stdlib-channel.ts +96 -0
  996. package/src/stdlib-checkpoint.js +109 -0
  997. package/src/stdlib-checkpoint.ts +97 -0
  998. package/src/stdlib-cloud.ts +317 -0
  999. package/src/stdlib-collection.ts +227 -0
  1000. package/src/stdlib-compile.ts +111 -0
  1001. package/src/stdlib-cron.ts +219 -0
  1002. package/src/stdlib-crypto-rsa.ts +82 -0
  1003. package/src/stdlib-crypto.js +203 -0
  1004. package/src/stdlib-crypto.ts +208 -0
  1005. package/src/stdlib-data.ts +614 -0
  1006. package/src/stdlib-db-query.ts +198 -0
  1007. package/src/stdlib-db.ts +185 -0
  1008. package/src/stdlib-distributed.ts +292 -0
  1009. package/src/stdlib-error.ts +90 -0
  1010. package/src/stdlib-fd.ts +130 -0
  1011. package/src/stdlib-feed.ts +171 -0
  1012. package/src/stdlib-file.ts +182 -0
  1013. package/src/stdlib-helpers.ts +273 -0
  1014. package/src/stdlib-http-macro.ts +178 -0
  1015. package/src/stdlib-http-server.ts +1229 -0
  1016. package/src/stdlib-http.ts +405 -0
  1017. package/src/stdlib-image.ts +92 -0
  1018. package/src/stdlib-kebab-aliases.ts +131 -0
  1019. package/src/stdlib-lazy-registry.ts +106 -0
  1020. package/src/stdlib-loader.ts +810 -0
  1021. package/src/stdlib-mail.ts +251 -0
  1022. package/src/stdlib-mariadb.ts +467 -0
  1023. package/src/stdlib-markdown.ts +227 -0
  1024. package/src/stdlib-matrix.ts +170 -0
  1025. package/src/stdlib-middleware.ts +221 -0
  1026. package/src/stdlib-module.ts +178 -0
  1027. package/src/stdlib-mongodb.ts +174 -0
  1028. package/src/stdlib-oci.ts +321 -0
  1029. package/src/stdlib-optional.ts +56 -0
  1030. package/src/stdlib-orm.ts +241 -0
  1031. package/src/stdlib-perf.ts +140 -0
  1032. package/src/stdlib-pg.ts +181 -0
  1033. package/src/stdlib-plot.ts +196 -0
  1034. package/src/stdlib-process.ts +120 -0
  1035. package/src/stdlib-property.ts +157 -0
  1036. package/src/stdlib-pubsub.ts +93 -0
  1037. package/src/stdlib-queue-helpers.ts +92 -0
  1038. package/src/stdlib-registry.ts +78 -0
  1039. package/src/stdlib-resource.ts +553 -0
  1040. package/src/stdlib-rest-crud.ts +146 -0
  1041. package/src/stdlib-service.ts +206 -0
  1042. package/src/stdlib-shell.ts +76 -0
  1043. package/src/stdlib-stats.ts +172 -0
  1044. package/src/stdlib-table.ts +200 -0
  1045. package/src/stdlib-test-enhanced.ts +76 -0
  1046. package/src/stdlib-test.ts +153 -0
  1047. package/src/stdlib-time.js +217 -0
  1048. package/src/stdlib-time.ts +282 -0
  1049. package/src/stdlib-timer.ts +134 -0
  1050. package/src/stdlib-totp.ts +110 -0
  1051. package/src/stdlib-type-predicates.ts +136 -0
  1052. package/src/stdlib-types.ts +107 -0
  1053. package/src/stdlib-validation.ts +248 -0
  1054. package/src/stdlib-verify.ts +181 -0
  1055. package/src/stdlib-webauthn.ts +192 -0
  1056. package/src/stdlib-workflow.js +715 -0
  1057. package/src/stdlib-workflow.ts +950 -0
  1058. package/src/stdlib-ws.ts +333 -0
  1059. package/src/stdlib-wsc.test.ts +122 -0
  1060. package/src/stdlib-wsc.ts +243 -0
  1061. package/src/storage-unified.fl +279 -0
  1062. package/src/streaming.ts +101 -0
  1063. package/src/struct-system.ts +104 -0
  1064. package/src/style-registry.ts +54 -0
  1065. package/src/swarm.ts +89 -0
  1066. package/src/tco.ts +31 -0
  1067. package/src/test-advanced-patterns.ts +211 -0
  1068. package/src/test-ast-debug.ts +20 -0
  1069. package/src/test-ast-helpers.ts +208 -0
  1070. package/src/test-async.ts +406 -0
  1071. package/src/test-bootstrap-self-compile.ts +449 -0
  1072. package/src/test-bootstrap-verification.ts +336 -0
  1073. package/src/test-composition.ts +206 -0
  1074. package/src/test-errors-phase6.ts +166 -0
  1075. package/src/test-extended-monads.ts +313 -0
  1076. package/src/test-field-parsing.ts +135 -0
  1077. package/src/test-first-class-functions.ts +257 -0
  1078. package/src/test-freelang-interpreter.ts +320 -0
  1079. package/src/test-freelang-lexer.ts +306 -0
  1080. package/src/test-freelang-parser.ts +268 -0
  1081. package/src/test-fullstack-core.ts +258 -0
  1082. package/src/test-fullstack-phase7-12.ts +305 -0
  1083. package/src/test-fullstack-practical.ts +338 -0
  1084. package/src/test-integration-stdlib.ts +195 -0
  1085. package/src/test-interpreter-phase6.ts +305 -0
  1086. package/src/test-lexer-comparison.ts +108 -0
  1087. package/src/test-lexer-phase6.ts +271 -0
  1088. package/src/test-modules.ts +325 -0
  1089. package/src/test-monad-laws.ts +383 -0
  1090. package/src/test-monads.ts +197 -0
  1091. package/src/test-p0-checkpoint.ts +304 -0
  1092. package/src/test-p0-conditional.ts +284 -0
  1093. package/src/test-p0-error-handling.ts +231 -0
  1094. package/src/test-p0-error-messages.ts +220 -0
  1095. package/src/test-p1-1-parallel-tasks.js +214 -0
  1096. package/src/test-parser-phase6.ts +222 -0
  1097. package/src/test-performance.ts +206 -0
  1098. package/src/test-phase10-data.ts +259 -0
  1099. package/src/test-phase10-file.ts +216 -0
  1100. package/src/test-phase100-stdlib-ai.ts +343 -0
  1101. package/src/test-phase101-memory.ts +309 -0
  1102. package/src/test-phase102-rag.ts +296 -0
  1103. package/src/test-phase103-multi-agent.ts +418 -0
  1104. package/src/test-phase104-try-reason.ts +459 -0
  1105. package/src/test-phase105-streaming.ts +287 -0
  1106. package/src/test-phase106-quality.ts +397 -0
  1107. package/src/test-phase107-tutor.ts +305 -0
  1108. package/src/test-phase108-debugger.ts +316 -0
  1109. package/src/test-phase109-prompt-compiler.ts +333 -0
  1110. package/src/test-phase11-12-complete.ts +275 -0
  1111. package/src/test-phase11-error.ts +192 -0
  1112. package/src/test-phase110-sdk.ts +320 -0
  1113. package/src/test-phase111-hypothesis.ts +380 -0
  1114. package/src/test-phase112-maybe-chain.ts +313 -0
  1115. package/src/test-phase113-debate.ts +364 -0
  1116. package/src/test-phase114-checkpoint.ts +348 -0
  1117. package/src/test-phase115-meta-reason.ts +277 -0
  1118. package/src/test-phase116-belief.ts +275 -0
  1119. package/src/test-phase117-analogy.ts +325 -0
  1120. package/src/test-phase118-critique.ts +308 -0
  1121. package/src/test-phase119-compose.ts +434 -0
  1122. package/src/test-phase12-http-shell.ts +120 -0
  1123. package/src/test-phase120-cognitive.ts +297 -0
  1124. package/src/test-phase121-consensus.ts +404 -0
  1125. package/src/test-phase122-delegate.ts +411 -0
  1126. package/src/test-phase123-vote.ts +339 -0
  1127. package/src/test-phase124-negotiate.ts +403 -0
  1128. package/src/test-phase125-swarm.ts +321 -0
  1129. package/src/test-phase126-orchestrate.ts +343 -0
  1130. package/src/test-phase127-peer-review.ts +279 -0
  1131. package/src/test-phase128-chain-agents.ts +456 -0
  1132. package/src/test-phase129-compete.ts +256 -0
  1133. package/src/test-phase13-data.ts +223 -0
  1134. package/src/test-phase130-hub.ts +390 -0
  1135. package/src/test-phase131-evolve.ts +536 -0
  1136. package/src/test-phase132-mutate.ts +268 -0
  1137. package/src/test-phase133-crossover.ts +289 -0
  1138. package/src/test-phase134-fitness.ts +306 -0
  1139. package/src/test-phase135-generation.ts +328 -0
  1140. package/src/test-phase136-prune.ts +228 -0
  1141. package/src/test-phase137-refactor-self.ts +354 -0
  1142. package/src/test-phase138-benchmark-self.ts +325 -0
  1143. package/src/test-phase139-version-self.ts +278 -0
  1144. package/src/test-phase14-collection.ts +254 -0
  1145. package/src/test-phase140-self-evolution.ts +410 -0
  1146. package/src/test-phase141-world-model.ts +387 -0
  1147. package/src/test-phase142-causal.ts +384 -0
  1148. package/src/test-phase143-counterfactual.ts +280 -0
  1149. package/src/test-phase144-predict.ts +312 -0
  1150. package/src/test-phase145-explain.ts +287 -0
  1151. package/src/test-phase146-align.ts +439 -0
  1152. package/src/test-phase147-ethics-check.ts +399 -0
  1153. package/src/test-phase148-curiosity.ts +247 -0
  1154. package/src/test-phase149-wisdom.ts +758 -0
  1155. package/src/test-phase15-agent.ts +320 -0
  1156. package/src/test-phase150-complete.ts +481 -0
  1157. package/src/test-phase16-time.ts +292 -0
  1158. package/src/test-phase17-crypto.ts +312 -0
  1159. package/src/test-phase18-integration.ts +429 -0
  1160. package/src/test-phase19-resource.ts +214 -0
  1161. package/src/test-phase20-server-db.ts +160 -0
  1162. package/src/test-phase21-ws-auth-cache-pubsub.ts +212 -0
  1163. package/src/test-phase22-process.ts +166 -0
  1164. package/src/test-phase23-selfhosting.ts +383 -0
  1165. package/src/test-phase24-codegen.ts +236 -0
  1166. package/src/test-phase25-bootstrap.ts +227 -0
  1167. package/src/test-phase26-map-filter-reduce.ts +282 -0
  1168. package/src/test-phase27-stdlib-codegen.ts +325 -0
  1169. package/src/test-phase28-loop-recur.ts +182 -0
  1170. package/src/test-phase29-import.ts +165 -0
  1171. package/src/test-phase3-web-server.ts +234 -0
  1172. package/src/test-phase30-selfcompile.ts +254 -0
  1173. package/src/test-phase31-gen2-lexer.ts +251 -0
  1174. package/src/test-phase33-gen3-bootstrap.ts +323 -0
  1175. package/src/test-phase34-parser-tco.ts +268 -0
  1176. package/src/test-phase35-error-messages.ts +280 -0
  1177. package/src/test-phase36-sourcemap.ts +240 -0
  1178. package/src/test-phase37-variadic.ts +228 -0
  1179. package/src/test-phase38-destructuring.ts +261 -0
  1180. package/src/test-phase39-do-block.ts +288 -0
  1181. package/src/test-phase40-const-fold.ts +249 -0
  1182. package/src/test-phase41-repl.ts +312 -0
  1183. package/src/test-phase42-watch.ts +314 -0
  1184. package/src/test-phase43-format.ts +377 -0
  1185. package/src/test-phase44-check.ts +505 -0
  1186. package/src/test-phase45-interpreter.ts +367 -0
  1187. package/src/test-phase46-match.ts +390 -0
  1188. package/src/test-phase47-file-io.ts +338 -0
  1189. package/src/test-phase48-types.ts +308 -0
  1190. package/src/test-phase49-stdlib.ts +365 -0
  1191. package/src/test-phase5-week1.ts +160 -0
  1192. package/src/test-phase50-fl-server.ts +159 -0
  1193. package/src/test-phase51-transformer.ts +152 -0
  1194. package/src/test-phase52-import.ts +161 -0
  1195. package/src/test-phase53-training.ts +122 -0
  1196. package/src/test-phase54-fl-utils.ts +122 -0
  1197. package/src/test-phase55-http-client.ts +182 -0
  1198. package/src/test-phase56-lexical-scope.ts +230 -0
  1199. package/src/test-phase58-module-refactor.ts +298 -0
  1200. package/src/test-phase59-errors.ts +226 -0
  1201. package/src/test-phase6-compile.ts +227 -0
  1202. package/src/test-phase60-types.ts +457 -0
  1203. package/src/test-phase61-tco.ts +209 -0
  1204. package/src/test-phase63-macros.ts +191 -0
  1205. package/src/test-phase64-protocols.ts +451 -0
  1206. package/src/test-phase65-patterns.ts +301 -0
  1207. package/src/test-phase66-structs.ts +215 -0
  1208. package/src/test-phase67-concurrency.ts +348 -0
  1209. package/src/test-phase68-pipeline.ts +209 -0
  1210. package/src/test-phase69-lazy.ts +237 -0
  1211. package/src/test-phase7-registry.ts +236 -0
  1212. package/src/test-phase70-immutable.ts +488 -0
  1213. package/src/test-phase71-ai-native.ts +252 -0
  1214. package/src/test-phase72-integration.ts +533 -0
  1215. package/src/test-phase73-formatter.ts +361 -0
  1216. package/src/test-phase74-linter.ts +565 -0
  1217. package/src/test-phase75-repl.ts +227 -0
  1218. package/src/test-phase76-testrunner.ts +439 -0
  1219. package/src/test-phase77-doc.ts +416 -0
  1220. package/src/test-phase78-debugger.ts +370 -0
  1221. package/src/test-phase79-watch.ts +224 -0
  1222. package/src/test-phase8-oci.ts +264 -0
  1223. package/src/test-phase80-ci.ts +282 -0
  1224. package/src/test-phase81-pkg.ts +383 -0
  1225. package/src/test-phase82-profiler.ts +336 -0
  1226. package/src/test-phase83-vm.ts +318 -0
  1227. package/src/test-phase84-optimizer.ts +424 -0
  1228. package/src/test-phase85-codegen.ts +380 -0
  1229. package/src/test-phase86-lsp.ts +533 -0
  1230. package/src/test-phase87-packages.ts +277 -0
  1231. package/src/test-phase88-selfhost.ts +412 -0
  1232. package/src/test-phase89-bench.ts +361 -0
  1233. package/src/test-phase9-flnext-v2.ts +372 -0
  1234. package/src/test-phase9-learn.ts +241 -0
  1235. package/src/test-phase9-reasoning.ts +312 -0
  1236. package/src/test-phase9-search.ts +212 -0
  1237. package/src/test-phase90-release.ts +365 -0
  1238. package/src/test-phase91-maybe.ts +257 -0
  1239. package/src/test-phase92-cot.ts +438 -0
  1240. package/src/test-phase93-tot.ts +462 -0
  1241. package/src/test-phase94-reflect.ts +498 -0
  1242. package/src/test-phase95-context.ts +268 -0
  1243. package/src/test-phase96-errors.ts +296 -0
  1244. package/src/test-phase97-tools.ts +344 -0
  1245. package/src/test-phase98-agent.ts +370 -0
  1246. package/src/test-phase99-self-improve.ts +394 -0
  1247. package/src/test-phase9a-websearch.ts +283 -0
  1248. package/src/test-phase9ab-integration.ts +140 -0
  1249. package/src/test-phase9b-persistence.ts +448 -0
  1250. package/src/test-phase9c-conditional.ts +251 -0
  1251. package/src/test-phase9c-extension.ts +270 -0
  1252. package/src/test-phase9c-feedback.ts +263 -0
  1253. package/src/test-phase9c-loop.ts +239 -0
  1254. package/src/test-selfhosting-sh1.ts +41 -0
  1255. package/src/test-selfhosting-sh2.ts +84 -0
  1256. package/src/test-selfhosting-sh3.ts +61 -0
  1257. package/src/test-selfhosting-sh4.ts +65 -0
  1258. package/src/test-type-classes-dispatch.ts +202 -0
  1259. package/src/test-type-classes.ts +320 -0
  1260. package/src/test-type-inference.ts +464 -0
  1261. package/src/test-typeclass-parsing-final.ts +218 -0
  1262. package/src/test-typeclass-parsing.ts +264 -0
  1263. package/src/todo-server-30116.ts +53 -0
  1264. package/src/token.ts +130 -0
  1265. package/src/tool-registry.ts +195 -0
  1266. package/src/tot.ts +258 -0
  1267. package/src/try-reason.ts +109 -0
  1268. package/src/type-check-static.ts +417 -0
  1269. package/src/type-checker.ts +245 -0
  1270. package/src/type-inference.ts +271 -0
  1271. package/src/type-system.ts +169 -0
  1272. package/src/version-self.ts +219 -0
  1273. package/src/vm-eligible.ts +106 -0
  1274. package/src/vm.ts +219 -0
  1275. package/src/vote.ts +127 -0
  1276. package/src/vpm/checksum-test.fl +193 -0
  1277. package/src/vpm/checksum.fl +219 -0
  1278. package/src/vpm/error-test.fl +211 -0
  1279. package/src/vpm/error.fl +218 -0
  1280. package/src/vpm/lock-file.fl +380 -0
  1281. package/src/vpm/logging-test.fl +194 -0
  1282. package/src/vpm/logging.fl +294 -0
  1283. package/src/vpm/resolver-test.fl +117 -0
  1284. package/src/vpm/resolver.fl +618 -0
  1285. package/src/vpm/semver-test.fl +180 -0
  1286. package/src/vpm/semver.fl +143 -0
  1287. package/src/vpm-cli.ts +1955 -0
  1288. package/src/web/app-router.ts +286 -0
  1289. package/src/web/fl-executor.ts +655 -0
  1290. package/src/web/image-optimizer.ts +206 -0
  1291. package/src/web/index.ts +14 -0
  1292. package/src/web/page-renderer.ts +287 -0
  1293. package/src/web/server.ts +553 -0
  1294. package/src/web-search-adapter.ts +348 -0
  1295. package/src/wisdom.ts +441 -0
  1296. package/src/world-model.ts +348 -0
  1297. package/stdlib/cache.fl +42 -0
  1298. package/stdlib/csv.fl +38 -0
  1299. package/stdlib/date-ext.fl +68 -0
  1300. package/stdlib/log.fl +44 -0
  1301. package/stdlib/math-ext.fl +57 -0
  1302. package/stdlib/number-ext.fl +47 -0
  1303. package/stdlib/queue.fl +57 -0
  1304. package/stdlib/string-ext.fl +45 -0
  1305. package/stdlib/validate.fl +123 -0
  1306. package/stdlib/web/components.fl +125 -0
  1307. package/stdlib/web/csrf.fl +61 -0
  1308. package/stdlib/web/format.fl +75 -0
  1309. package/stdlib/web/forms.fl +94 -0
  1310. package/stdlib/web/image.fl +77 -0
  1311. package/stdlib/web/metadata.fl +85 -0
  1312. package/stdlib/web/pagination.fl +62 -0
  1313. package/stdlib/web/state.fl +167 -0
  1314. package/stdlib/web/styles.fl +68 -0
  1315. package/stdlib/web/toast.fl +62 -0
  1316. package/stdlib/web/v9-stdlib-dom.fl +92 -0
  1317. package/stdlib/web/v9-stdlib-fetch.fl +90 -0
  1318. package/stdlib/web/v9-stdlib-storage.fl +70 -0
  1319. package/stdlib/web/v9-stdlib-ui.fl +115 -0
  1320. package/stdlib/web/ws-client.fl +125 -0
  1321. package/tests/.v11-backup/test-migrate-sample.fl +22 -0
  1322. package/tests/PHASE-C-VERIFICATION-REPORT.md +125 -0
  1323. package/tests/benchmark-v11.1.js +103 -0
  1324. package/tests/evidence/01-about.html +1 -0
  1325. package/tests/evidence/02-post-hello.html +1 -0
  1326. package/tests/evidence/02-post-world.html +1 -0
  1327. package/tests/evidence/03-home.html +1 -0
  1328. package/tests/evidence/04-dist/404.html +1 -0
  1329. package/tests/evidence/04-dist/about/index.html +1 -0
  1330. package/tests/evidence/04-dist/index.html +1 -0
  1331. package/tests/evidence/04-dist/post/hello/index.html +1 -0
  1332. package/tests/evidence/04-dist/post/world/index.html +1 -0
  1333. package/tests/evidence/05-dist/404.html +1 -0
  1334. package/tests/evidence/05-dist/about/index.html +1 -0
  1335. package/tests/evidence/05-dist/index.html +1 -0
  1336. package/tests/evidence/05-dist/post/hello/index.html +1 -0
  1337. package/tests/evidence/05-dist/post/world/index.html +1 -0
  1338. package/tests/evidence/06-dist/404.html +1 -0
  1339. package/tests/evidence/06-dist/about/index.html +1 -0
  1340. package/tests/evidence/06-dist/index.html +1 -0
  1341. package/tests/evidence/06-dist/post/hello/index.html +1 -0
  1342. package/tests/evidence/06-dist/post/world/index.html +1 -0
  1343. package/tests/evidence/07-markdown.html +1 -0
  1344. package/tests/evidence/08-rss.xml +25 -0
  1345. package/tests/evidence/09-robots.txt +4 -0
  1346. package/tests/evidence/09-sitemap.xml +12 -0
  1347. package/tests/evidence/10-jsonld.html +1 -0
  1348. package/tests/evidence/_results.txt +11 -0
  1349. package/tests/evidence/about.html +1 -0
  1350. package/tests/evidence/home.html +1 -0
  1351. package/tests/evidence/missing.html +42 -0
  1352. package/tests/evidence/post-hello.html +1 -0
  1353. package/tests/evidence/post-world.html +1 -0
  1354. package/tests/fixtures/basic-app/about/page.fl +1 -0
  1355. package/tests/fixtures/basic-app/api/echo/route.fl +5 -0
  1356. package/tests/fixtures/basic-app/layout.fl +1 -0
  1357. package/tests/fixtures/basic-app/not-found.fl +1 -0
  1358. package/tests/fixtures/basic-app/page.fl +1 -0
  1359. package/tests/fixtures/basic-app/post/[slug]/generate-static-params.fl +1 -0
  1360. package/tests/fixtures/basic-app/post/[slug]/page.fl +1 -0
  1361. package/tests/fixtures/stdlib-probes/blog.fl +6 -0
  1362. package/tests/fixtures/stdlib-probes/jsonld.fl +1 -0
  1363. package/tests/fixtures/stdlib-probes/map-probe.fl +3 -0
  1364. package/tests/fixtures/stdlib-probes/map-shape.fl +2 -0
  1365. package/tests/fixtures/stdlib-probes/md.fl +1 -0
  1366. package/tests/fixtures/stdlib-probes/robots.fl +1 -0
  1367. package/tests/fixtures/stdlib-probes/rss.fl +4 -0
  1368. package/tests/fixtures/stdlib-probes/sitemap.fl +1 -0
  1369. package/tests/l2/case-01-arithmetic.fl +6 -0
  1370. package/tests/l2/case-02-comparisons.fl +15 -0
  1371. package/tests/l2/case-03-logic.fl +15 -0
  1372. package/tests/l2/case-04-control-flow.fl +15 -0
  1373. package/tests/l2/case-05-functions.fl +13 -0
  1374. package/tests/l2/case-06-collections.fl +14 -0
  1375. package/tests/l2/case-07-pattern-matching.fl +14 -0
  1376. package/tests/l2/case-08-recursion.fl +19 -0
  1377. package/tests/l2/case-09-strings.fl +13 -0
  1378. package/tests/l2/case-10-loops.fl +17 -0
  1379. package/tests/l2/case-11-higher-order.fl +13 -0
  1380. package/tests/l2/case-12-edge-cases.fl +14 -0
  1381. package/tests/l2/case-13-ai-vector.fl +22 -0
  1382. package/tests/l2/case-14-ai-cosine.fl +25 -0
  1383. package/tests/l2/case-15-ai-template.fl +22 -0
  1384. package/tests/l2/case-16-ai-ranking.fl +20 -0
  1385. package/tests/l2/case-17-stdlib-extended.fl +32 -0
  1386. package/tests/l2-proof/01-arithmetic.bootstrap.js +141 -0
  1387. package/tests/l2-proof/01-arithmetic.fl +15 -0
  1388. package/tests/l2-proof/01-arithmetic.stage1.js +141 -0
  1389. package/tests/l2-proof/02-comparisons.bootstrap.js +141 -0
  1390. package/tests/l2-proof/02-comparisons.fl +17 -0
  1391. package/tests/l2-proof/03-logic.bootstrap.js +141 -0
  1392. package/tests/l2-proof/03-logic.fl +15 -0
  1393. package/tests/l2-proof/04-control-flow.bootstrap.js +146 -0
  1394. package/tests/l2-proof/04-control-flow.fl +24 -0
  1395. package/tests/l2-proof/05-functions.bootstrap.js +143 -0
  1396. package/tests/l2-proof/05-functions.fl +16 -0
  1397. package/tests/l2-proof/06-collections.bootstrap.js +146 -0
  1398. package/tests/l2-proof/06-collections.fl +27 -0
  1399. package/tests/l2-proof/07-pattern-matching.bootstrap.js +142 -0
  1400. package/tests/l2-proof/07-pattern-matching.fl +23 -0
  1401. package/tests/l2-proof/08-async-errors.bootstrap.js +142 -0
  1402. package/tests/l2-proof/08-async-errors.fl +17 -0
  1403. package/tests/l2-proof/09-strings.bootstrap.js +141 -0
  1404. package/tests/l2-proof/09-strings.fl +13 -0
  1405. package/tests/l2-proof/10-type-checks.bootstrap.js +141 -0
  1406. package/tests/l2-proof/10-type-checks.fl +17 -0
  1407. package/tests/l2-proof/11-recursion.bootstrap.js +143 -0
  1408. package/tests/l2-proof/11-recursion.fl +21 -0
  1409. package/tests/l2-proof/12-edge-cases.bootstrap.js +141 -0
  1410. package/tests/l2-proof/12-edge-cases.fl +17 -0
  1411. package/tests/parity/01-app-router-static.sh +18 -0
  1412. package/tests/parity/02-app-router-dynamic.sh +18 -0
  1413. package/tests/parity/03-layout-children.sh +17 -0
  1414. package/tests/parity/04-not-found.sh +22 -0
  1415. package/tests/parity/05-ssg.sh +21 -0
  1416. package/tests/parity/06-parallel-render.sh +21 -0
  1417. package/tests/parity/07-markdown.sh +16 -0
  1418. package/tests/parity/08-rss-atom.sh +18 -0
  1419. package/tests/parity/09-sitemap-robots.sh +23 -0
  1420. package/tests/parity/10-jsonld.sh +16 -0
  1421. package/tests/parity/11-blog-helpers.sh +28 -0
  1422. package/tests/parity/12-api-routes.sh +25 -0
  1423. package/tests/parity/_lib.sh +53 -0
  1424. package/tests/parity/run-all.sh +89 -0
  1425. package/tests/parity/score.sh +20 -0
  1426. package/tests/phase-c-fuzzing.fl +89 -0
  1427. package/tests/phase-c-property-testing.fl +137 -0
  1428. package/tests/phase-c-sha-verification.fl +117 -0
  1429. package/tests/phase-c-validation.fl +194 -0
  1430. package/tests/property-testing.sh +47 -0
  1431. package/tests/regen/let-in-expr-01.fl +5 -0
  1432. package/tests/regen/let-in-expr-02.fl +6 -0
  1433. package/tests/regen/let-in-expr-03.fl +4 -0
  1434. package/tests/regen/let-in-expr-04.fl +6 -0
  1435. package/tests/regen/let-in-expr-05.fl +5 -0
  1436. package/tests/test-ai-library.fl +36 -0
  1437. package/tests/test-andor.fl +2 -0
  1438. package/tests/test-bootstrap-match.fl +5 -0
  1439. package/tests/test-cg-final.fl +5 -0
  1440. package/tests/test-cli.fl +19 -0
  1441. package/tests/test-codegen.fl +4 -0
  1442. package/tests/test-cond-flat.fl +1 -0
  1443. package/tests/test-fl-exec-op.fl +1 -0
  1444. package/tests/test-fp.fl +10 -0
  1445. package/tests/test-funcs.fl +11 -0
  1446. package/tests/test-fuzz-crash.fl +3 -0
  1447. package/tests/test-http-get.fl +3 -0
  1448. package/tests/test-json-load.fl +32 -0
  1449. package/tests/test-let-flat.fl +2 -0
  1450. package/tests/test-let-order.fl +3 -0
  1451. package/tests/test-let-simple.fl +3 -0
  1452. package/tests/test-let-syntax.fl +2 -0
  1453. package/tests/test-let.fl +3 -0
  1454. package/tests/test-lex-debug.fl +75 -0
  1455. package/tests/test-loop-bug.fl +5 -0
  1456. package/tests/test-map-entries.fl +1 -0
  1457. package/tests/test-map-pattern.fl +3 -0
  1458. package/tests/test-match-syntax.fl +5 -0
  1459. package/tests/test-migrate-sample.fl +22 -0
  1460. package/tests/test-neg.fl +1 -0
  1461. package/tests/test-nested-let.fl +4 -0
  1462. package/tests/test-node-to-pattern.fl +8 -0
  1463. package/tests/test-quant-lib.fl +114 -0
  1464. package/tests/test-reduce.fl +10 -0
  1465. package/tests/test-server.fl +3 -0
  1466. package/tests/test-simple-map.fl +4 -0
  1467. package/tests/test-simple-match.fl +3 -0
  1468. package/tests/test-simple.fl +1 -0
  1469. package/tests/test-try-bootstrap.fl +7 -0
  1470. package/tests/test-try-catch.fl +3 -0
  1471. package/tests/test-watchdog-lib.fl +69 -0
  1472. package/tests/test-which-lex.fl +4 -0
  1473. package/tsconfig.json +39 -0
@@ -0,0 +1,186 @@
1
+ // self/runtime/repl.js — Y4-3 단계B
2
+ //
3
+ // readline + Interpreter wrapper. self/runtime/interpreter.js 에 의존.
4
+ // bootstrap.js 의존 없는 REPL 진입점.
5
+ //
6
+ // 사용:
7
+ // node self/runtime/repl.js
8
+ //
9
+ // 명령:
10
+ // :q / :quit / :exit — 종료
11
+ // :clear — 입력 버퍼 초기화
12
+ // :reset — 세션 (변수/함수) 초기화
13
+ // :help — 도움말
14
+ // :ls — 정의된 함수 목록
15
+ // :stack — callStack (최근 20개)
16
+ // :locals — 현재 변수 dump
17
+ //
18
+ // src/cli.ts cmdRepl 의 핵심 로직을 단순화. fl_history (~/.fl_history) 보존.
19
+
20
+ const readline = require("readline");
21
+ const fs = require("fs");
22
+ const os = require("os");
23
+ const path = require("path");
24
+
25
+ const { Interpreter, lex, parse } = require("./interpreter");
26
+
27
+ const historyPath = (() => {
28
+ try { return path.join(os.homedir(), ".fl_history"); }
29
+ catch { return null; }
30
+ })();
31
+
32
+ let initialHistory = [];
33
+ if (historyPath) {
34
+ try {
35
+ if (fs.existsSync(historyPath)) {
36
+ initialHistory = fs.readFileSync(historyPath, "utf8")
37
+ .split("\n").filter(l => l.trim()).slice(-500).reverse();
38
+ }
39
+ } catch {}
40
+ }
41
+
42
+ console.log(`FreeLang v11 REPL (self/runtime) (\x1b[2m:q 종료 :help 도움말 :reset 세션 초기화\x1b[0m)`);
43
+ console.log(`─────────────────────────────────────────`);
44
+
45
+ const rl = readline.createInterface({
46
+ input: process.stdin,
47
+ output: process.stdout,
48
+ prompt: "\x1b[36mfl>\x1b[0m ",
49
+ terminal: true,
50
+ history: initialHistory,
51
+ historySize: 500,
52
+ });
53
+
54
+ let buffer = "";
55
+ let sessionInterp = new Interpreter();
56
+
57
+ function countBalance(s) {
58
+ let balance = 0;
59
+ let inStr = false;
60
+ for (let i = 0; i < s.length; i++) {
61
+ const ch = s[i];
62
+ if (ch === '"') {
63
+ let bs = 0, j = i - 1;
64
+ while (j >= 0 && s[j] === "\\") { bs++; j--; }
65
+ if (bs % 2 === 0) inStr = !inStr;
66
+ }
67
+ if (!inStr) {
68
+ if (ch === "(" || ch === "[" || ch === "{") balance++;
69
+ if (ch === ")" || ch === "]" || ch === "}") balance--;
70
+ }
71
+ }
72
+ return balance;
73
+ }
74
+
75
+ rl.prompt();
76
+
77
+ rl.on("line", (line) => {
78
+ const trimmed = line.trim();
79
+
80
+ if (trimmed === ":q" || trimmed === ":quit" || trimmed === ":exit") {
81
+ console.log("bye.");
82
+ rl.close();
83
+ return;
84
+ }
85
+ if (trimmed === ":help") {
86
+ console.log([
87
+ " :q / :quit 종료",
88
+ " :clear 버퍼 초기화",
89
+ " :reset 세션 초기화",
90
+ " :help 이 도움말",
91
+ " :ls 정의된 함수 목록",
92
+ " :stack callStack (최근 20개)",
93
+ " :locals 현재 변수 dump",
94
+ ].join("\n"));
95
+ rl.prompt();
96
+ return;
97
+ }
98
+ if (trimmed === ":clear") {
99
+ buffer = "";
100
+ console.log(" 버퍼 초기화됨.");
101
+ rl.prompt();
102
+ return;
103
+ }
104
+ if (trimmed === ":reset") {
105
+ buffer = "";
106
+ sessionInterp = new Interpreter();
107
+ console.log(" 세션 초기화됨.");
108
+ rl.prompt();
109
+ return;
110
+ }
111
+ if (trimmed === ":ls") {
112
+ const fns = [...sessionInterp.context.functions.keys()];
113
+ console.log(fns.length === 0 ? "(함수 없음)" : fns.slice(0, 50).join(" "));
114
+ if (fns.length > 50) console.log(` ... 외 ${fns.length - 50}개`);
115
+ rl.prompt();
116
+ return;
117
+ }
118
+ if (trimmed === ":stack") {
119
+ const stack = sessionInterp.callStack || [];
120
+ if (stack.length === 0) console.log(" (callStack 비어있음)");
121
+ else {
122
+ const tail = stack.slice(-20);
123
+ for (let i = 0; i < tail.length; i++) {
124
+ const argsStr = tail[i].args ? `(${tail[i].args.join(", ")})` : "";
125
+ console.log(` #${stack.length - tail.length + i}: ${tail[i].fn}${argsStr} (line ${tail[i].line})`);
126
+ }
127
+ }
128
+ rl.prompt();
129
+ return;
130
+ }
131
+ if (trimmed === ":locals") {
132
+ const snap = sessionInterp.context.variables.snapshot
133
+ ? sessionInterp.context.variables.snapshot()
134
+ : new Map();
135
+ if (snap.size === 0) console.log(" (변수 없음)");
136
+ else {
137
+ let count = 0;
138
+ for (const [k, v] of snap) {
139
+ if (count++ >= 30) { console.log(` ... ${snap.size - 30}개 더`); break; }
140
+ const valStr = typeof v === "function" ? "<function>"
141
+ : v && v.kind === "function-value" ? "<fn-value>"
142
+ : (() => { try { return JSON.stringify(v)?.slice(0, 60); } catch { return "<unserializable>"; } })();
143
+ console.log(` ${k} = ${valStr}`);
144
+ }
145
+ }
146
+ rl.prompt();
147
+ return;
148
+ }
149
+ if (trimmed.startsWith(";")) {
150
+ rl.prompt();
151
+ return;
152
+ }
153
+
154
+ buffer += (buffer ? "\n" : "") + line;
155
+ if (countBalance(buffer) > 0) {
156
+ process.stdout.write("\x1b[2m …\x1b[0m ");
157
+ return;
158
+ }
159
+
160
+ const source = buffer.trim();
161
+ buffer = "";
162
+ if (!source) { rl.prompt(); return; }
163
+
164
+ try {
165
+ const ast = parse(lex(source));
166
+ const ctx = sessionInterp.interpret(ast);
167
+ const val = ctx.lastValue;
168
+ if (val !== null && val !== undefined) {
169
+ if (typeof val === "object") {
170
+ console.log("\x1b[33m=>\x1b[0m", JSON.stringify(val, null, 2));
171
+ } else {
172
+ console.log("\x1b[33m=>\x1b[0m", String(val));
173
+ }
174
+ }
175
+ } catch (err) {
176
+ console.error("\x1b[31merror:\x1b[0m", err && err.message ? err.message : String(err));
177
+ }
178
+
179
+ if (historyPath && source) {
180
+ try { fs.appendFileSync(historyPath, source.replace(/\n/g, " ") + "\n"); } catch {}
181
+ }
182
+
183
+ rl.prompt();
184
+ });
185
+
186
+ rl.on("close", () => process.exit(0));
@@ -0,0 +1,282 @@
1
+ /**
2
+ * FreeLang v11 Runtime Helpers
3
+ * 자체호스팅을 위한 필수 헬퍼 함수 모음
4
+ *
5
+ * 생성: 2026-04-29
6
+ * 목표: bootstrap.js에서 자동 추출한 _fl_* 헬퍼 36개를 TS로 재구현
7
+ *
8
+ * 사용법:
9
+ * - codegen의 프리앰블에 이 파일을 주입
10
+ * - stage1-new.js 빌드 시 esbuild로 번들링
11
+ * - self-host compile/run 검증
12
+ */
13
+
14
+ // ─────────────────────────────────────────────────────
15
+ // 타입 정의
16
+ // ─────────────────────────────────────────────────────
17
+
18
+ type FlValue = any;
19
+ type FlFn = (...args: any[]) => any;
20
+ type FlArray = FlValue[];
21
+ type FlMap = Record<string, FlValue>;
22
+
23
+ // ─────────────────────────────────────────────────────
24
+ // 카테고리 1: 타입 체크 (8개)
25
+ // ─────────────────────────────────────────────────────
26
+
27
+ export function _fl_null_q(v: FlValue): boolean {
28
+ return v === null || v === undefined;
29
+ }
30
+
31
+ export function _fl_true_q(v: FlValue): boolean {
32
+ return v === true;
33
+ }
34
+
35
+ export function _fl_false_q(v: FlValue): boolean {
36
+ return v === false;
37
+ }
38
+
39
+ export function _fl_number_q(v: FlValue): boolean {
40
+ return typeof v === 'number';
41
+ }
42
+
43
+ export function _fl_string_q(v: FlValue): boolean {
44
+ return typeof v === 'string';
45
+ }
46
+
47
+ export function _fl_list_q(v: FlValue): boolean {
48
+ return Array.isArray(v);
49
+ }
50
+
51
+ export function _fl_map_q(v: FlValue): boolean {
52
+ return v !== null && typeof v === 'object' && !Array.isArray(v);
53
+ }
54
+
55
+ export function _fl_fn_q(v: FlValue): boolean {
56
+ return typeof v === 'function' || (v && typeof v === 'object' && v.__fn === true);
57
+ }
58
+
59
+ // ─────────────────────────────────────────────────────
60
+ // 카테고리 2: 배열 조작 (8개)
61
+ // ─────────────────────────────────────────────────────
62
+
63
+ export function _fl_length(arr: FlValue): number {
64
+ if (Array.isArray(arr)) return arr.length;
65
+ if (typeof arr === 'object' && arr !== null) return Object.keys(arr).length;
66
+ if (typeof arr === 'string') return arr.length;
67
+ return 0;
68
+ }
69
+
70
+ export function _fl_first(arr: FlArray): FlValue {
71
+ return Array.isArray(arr) ? arr[0] : null;
72
+ }
73
+
74
+ export function _fl_last(arr: FlArray): FlValue {
75
+ return Array.isArray(arr) ? arr[arr.length - 1] : null;
76
+ }
77
+
78
+ export function _fl_rest(arr: FlArray): FlArray {
79
+ return Array.isArray(arr) ? arr.slice(1) : [];
80
+ }
81
+
82
+ export function _fl_append(arr: FlArray, item: FlValue): FlArray {
83
+ return Array.isArray(arr) ? [...arr, item] : [item];
84
+ }
85
+
86
+ export function _fl_get(obj: FlValue, key: FlValue, defaultVal?: FlValue): FlValue {
87
+ if (Array.isArray(obj) && typeof key === 'number') {
88
+ return obj[key] ?? defaultVal ?? null;
89
+ }
90
+ if (typeof obj === 'object' && obj !== null) {
91
+ const result = obj[String(key)];
92
+ return result !== undefined ? result : (defaultVal ?? null);
93
+ }
94
+ return defaultVal ?? null;
95
+ }
96
+
97
+ export function _fl_map_set(obj: FlMap, key: FlValue, value: FlValue): FlMap {
98
+ return { ...obj, [String(key)]: value };
99
+ }
100
+
101
+ export function _fl_keys(obj: FlValue): string[] {
102
+ if (typeof obj === 'object' && obj !== null) {
103
+ return Object.keys(obj);
104
+ }
105
+ return [];
106
+ }
107
+
108
+ // ─────────────────────────────────────────────────────
109
+ // 카테고리 3: 문자열 조작 (5개)
110
+ // ─────────────────────────────────────────────────────
111
+
112
+ export function _fl_str(...args: FlValue[]): string {
113
+ return args.map(v => {
114
+ if (v === null || v === undefined) return '';
115
+ if (typeof v === 'object') return JSON.stringify(v);
116
+ return String(v);
117
+ }).join('');
118
+ }
119
+
120
+ export function _fl_lower(s: string): string {
121
+ return String(s).toLowerCase();
122
+ }
123
+
124
+ export function _fl_upper(s: string): string {
125
+ return String(s).toUpperCase();
126
+ }
127
+
128
+ export function _fl_trim(s: string): string {
129
+ return String(s).trim();
130
+ }
131
+
132
+ export function _fl_contains_q(s: string, substr: string): boolean {
133
+ return String(s).includes(String(substr));
134
+ }
135
+
136
+ // ─────────────────────────────────────────────────────
137
+ // 카테고리 4: 문자 분류 (5개)
138
+ // ─────────────────────────────────────────────────────
139
+
140
+ export function _fl_is_alpha_q(c: string): boolean {
141
+ const ch = String(c)[0];
142
+ return /[a-zA-Z]/.test(ch);
143
+ }
144
+
145
+ export function _fl_is_digit_q(c: string): boolean {
146
+ const ch = String(c)[0];
147
+ return /[0-9]/.test(ch);
148
+ }
149
+
150
+ export function _fl_is_alnum_q(c: string): boolean {
151
+ const ch = String(c)[0];
152
+ return /[a-zA-Z0-9]/.test(ch);
153
+ }
154
+
155
+ export function _fl_is_space_q(c: string): boolean {
156
+ const ch = String(c)[0];
157
+ return /\s/.test(ch);
158
+ }
159
+
160
+ export function _fl_is_symbol_char_q(c: string): boolean {
161
+ const ch = String(c)[0];
162
+ return /[!@#$%^&*\-_+=]/.test(ch);
163
+ }
164
+
165
+ // ─────────────────────────────────────────────────────
166
+ // 카테고리 5: 고차 함수 (3개)
167
+ // ─────────────────────────────────────────────────────
168
+
169
+ export function _fl_map(fn: FlFn, arr: FlArray): FlArray {
170
+ return arr.map(item => fn([item]));
171
+ }
172
+
173
+ export function _fl_filter(arr: FlArray, fn: FlFn): FlArray {
174
+ return arr.filter(item => {
175
+ const result = fn([item]);
176
+ return result !== false && result !== null;
177
+ });
178
+ }
179
+
180
+ export function _fl_reduce(fn: FlFn, init: FlValue, arr: FlArray): FlValue {
181
+ return arr.reduce((acc, item) => fn([acc, item]), init);
182
+ }
183
+
184
+ // ─────────────────────────────────────────────────────
185
+ // 카테고리 6: 조건부 로직 (2개)
186
+ // ─────────────────────────────────────────────────────
187
+
188
+ export function _fl_empty_q(v: FlValue): boolean {
189
+ if (v === null || v === undefined) return true;
190
+ if (Array.isArray(v)) return v.length === 0;
191
+ if (typeof v === 'object') return Object.keys(v).length === 0;
192
+ if (typeof v === 'string') return v === '';
193
+ return false;
194
+ }
195
+
196
+ export function _fl_has_key_q(obj: FlValue, key: FlValue): boolean {
197
+ if (typeof obj === 'object' && obj !== null) {
198
+ return String(key) in obj;
199
+ }
200
+ return false;
201
+ }
202
+
203
+ // ─────────────────────────────────────────────────────
204
+ // 카테고리 7: I/O (2개)
205
+ // ─────────────────────────────────────────────────────
206
+
207
+ export function _fl_print(msg: FlValue): FlValue {
208
+ console.log(msg);
209
+ return msg;
210
+ }
211
+
212
+ export function _fl_array_q(v: FlValue): boolean {
213
+ return Array.isArray(v);
214
+ }
215
+
216
+ // ─────────────────────────────────────────────────────
217
+ // 카테고리 8: HTTP (2개) — 자체호스팅용 스텁
218
+ // ─────────────────────────────────────────────────────
219
+
220
+ export function _fl_request(obj: FlMap): FlMap {
221
+ // HTTP 요청 처리 (서버 모드용 스텁)
222
+ return { status: 200, body: '{}', error: null };
223
+ }
224
+
225
+ export function _fl_response(obj: FlMap): FlMap {
226
+ // HTTP 응답 처리 (서버 모드용 스텁)
227
+ return obj;
228
+ }
229
+
230
+ // ─────────────────────────────────────────────────────
231
+ // 카테고리 9: 기타 (1개)
232
+ // ─────────────────────────────────────────────────────
233
+
234
+ export function _fl_wait_and_respond(fn: FlFn, timeout?: number): FlValue {
235
+ // 비동기 작업 (현재 동기로 처리)
236
+ return fn([]);
237
+ }
238
+
239
+ // ─────────────────────────────────────────────────────
240
+ // 헬퍼 맵 (codegen 주입용)
241
+ // ─────────────────────────────────────────────────────
242
+
243
+ export const RUNTIME_HELPERS: Record<string, FlFn> = {
244
+ _fl_null_q,
245
+ _fl_true_q,
246
+ _fl_false_q,
247
+ _fl_number_q,
248
+ _fl_string_q,
249
+ _fl_list_q,
250
+ _fl_map_q,
251
+ _fl_fn_q,
252
+ _fl_length,
253
+ _fl_first,
254
+ _fl_last,
255
+ _fl_rest,
256
+ _fl_append,
257
+ _fl_get,
258
+ _fl_map_set,
259
+ _fl_keys,
260
+ _fl_str,
261
+ _fl_lower,
262
+ _fl_upper,
263
+ _fl_trim,
264
+ _fl_contains_q,
265
+ _fl_is_alpha_q,
266
+ _fl_is_digit_q,
267
+ _fl_is_alnum_q,
268
+ _fl_is_space_q,
269
+ _fl_is_symbol_char_q,
270
+ _fl_map,
271
+ _fl_filter,
272
+ _fl_reduce,
273
+ _fl_empty_q,
274
+ _fl_has_key_q,
275
+ _fl_print,
276
+ _fl_array_q,
277
+ _fl_request,
278
+ _fl_response,
279
+ _fl_wait_and_respond,
280
+ };
281
+
282
+ export default RUNTIME_HELPERS;
package/self/scope.fl ADDED
@@ -0,0 +1,80 @@
1
+ ;; self/scope.fl — 변수 스코프 (Phase 04/46-52)
2
+ ;;
3
+ ;; 구조: scope = list of maps. top 이 현재, last 가 global.
4
+ ;; push-scope: 새 map 을 앞에 붙임.
5
+ ;; pop-scope: 첫번째 제거.
6
+ ;; set: 최상위 scope 에 기록.
7
+ ;; get: top → ... → global 순 탐색.
8
+ ;; x 정규화: "x" 또는 "x" 둘 다 같은 key 로 저장/조회.
9
+
10
+ ;; ──────────────────────────────────────
11
+ ;; 46 make-scope / push / pop
12
+ ;; ──────────────────────────────────────
13
+
14
+ [FUNC make-scope :params [] :body (list {})]
15
+
16
+ [FUNC push-scope :params [s]
17
+ :body (append (list {}) s)]
18
+
19
+ [FUNC pop-scope :params [s]
20
+ :body (if (= (length s) 0) s (slice s 1 (length s)))]
21
+
22
+ ;; ──────────────────────────────────────
23
+ ;; 47 $ 접두사 정규화
24
+ ;; ──────────────────────────────────────
25
+
26
+ [FUNC norm-key :params [k]
27
+ :body (if (null? k) ""
28
+ (if (and (>= (length k) 1) (= (char-at k 0) "$"))
29
+ (substring k 1 (length k))
30
+ k))]
31
+
32
+ ;; ──────────────────────────────────────
33
+ ;; 48 has? / get / set
34
+ ;; ──────────────────────────────────────
35
+
36
+ ;; scope chain 에서 키 탐색. first match return.
37
+ [FUNC has-key? :params [s k]
38
+ :body (has-key-loop s (norm-key k) 0)]
39
+
40
+ [FUNC has-key-loop :params [s k i]
41
+ :body (cond
42
+ [(>= i (length s)) false]
43
+ [(not (null? (get (get s i) k))) true]
44
+ [true (has-key-loop s k (+ i 1))])]
45
+
46
+ [FUNC scope-get :params [s k]
47
+ :body (scope-get-loop s (norm-key k) 0)]
48
+
49
+ [FUNC scope-get-loop :params [s k i]
50
+ :body (cond
51
+ [(>= i (length s)) null]
52
+ [(not (null? (get (get s i) k))) (get (get s i) k)]
53
+ [true (scope-get-loop s k (+ i 1))])]
54
+
55
+ ;; 최상위 scope 에 set. 새 scope 반환.
56
+ [FUNC scope-set :params [s k v]
57
+ :body (let [[nk (norm-key k)]
58
+ [top (get s 0)]
59
+ [rest (slice s 1 (length s))]
60
+ [top2 (json_set top nk v)]]
61
+ (append (list top2) rest))]
62
+
63
+ ;; ──────────────────────────────────────
64
+ ;; 49 snapshot (closure capture)
65
+ ;; ──────────────────────────────────────
66
+
67
+ [FUNC scope-snapshot :params [s] :body s]
68
+
69
+ ;; ──────────────────────────────────────
70
+ ;; 50 restore (rollback 은 pop 의 alias)
71
+ ;; ──────────────────────────────────────
72
+
73
+ [FUNC scope-restore :params [old new] :body old]
74
+
75
+ ;; ──────────────────────────────────────
76
+ ;; 52 test helpers — (다중 스코프 시퀀스 재현)
77
+ ;; ──────────────────────────────────────
78
+
79
+ [FUNC scope-debug :params [s]
80
+ :body (str "scope-depth=" (length s)))
@@ -0,0 +1 @@
1
+ const _fl_str = (...xs) => xs.map(x => x==null?'null':String(x)).join('');const _fl_length = (x) => (x==null ? 0 : x.length);const _fl_substring = (s, a, b) => (b==null ? s.slice(a) : s.slice(a, b));const _fl_char_at = (s, i) => (s[i] || null);const _fl_replace = (s, a, b) => s.split(a).join(b);const _fl_starts_with = (s, p) => s.startsWith(p);const _fl_ends_with = (s, p) => s.endsWith(p);const _fl_contains = (s, p) => s.includes(p);const _fl_split = (s, sep) => s.split(sep);const _fl_join = (l, sep) => l.join(sep==null?'':sep);const _fl_trim = (s) => s.trim();const _fl_upper = (s) => s.toUpperCase();const _fl_lower = (s) => s.toLowerCase();const _fl_repeat = (s, n) => s.repeat(n);const _fl_index_of = (s, p) => s.indexOf(p);const _fl_first = (l) => (l==null || l.length===0 ? null : l[0]);const _fl_last = (l) => (l==null || l.length===0 ? null : l[l.length-1]);const _fl_rest = (l) => (l==null || l.length===0 ? [] : l.slice(1));const _fl_append = (a, b) => (Array.isArray(b) ? [...a, ...b] : [...a, b]);const _fl_slice = (l, a, b) => l.slice(a, b);const _fl_map = (f, l) => l.map(x => f(x));const _fl_filter = (f, l) => l.filter(x => f(x));const _fl_reduce = (f, init, l) => l.reduce((acc, x) => f(acc, x), init);const _fl_find = (f, l) => (l.find(x => f(x)) ?? null);const _fl_every = (f, l) => l.every(x => f(x));const _fl_some = (f, l) => l.some(x => f(x));const _fl_sort = (l, cmp) => [...l].sort(cmp || ((a,b)=>a<b?-1:a>b?1:0));const _fl_reverse = (l) => [...l].reverse();const _fl_flatten = (l) => l.flat(Infinity);const _fl_distinct = (l) => [...new Set(l)];const _fl_range = (a, b, s) => { let r=[]; let step=s||1; for(let i=a;i<b;i+=step)r.push(i); return r; };const _fl_take = (n, l) => l.slice(0, n);const _fl_drop = (n, l) => l.slice(n);const _fl_get = (o, k) => (o==null ? null : (o[k]===undefined ? null : o[k]));const _fl_keys = (o) => (o==null ? [] : Object.keys(o));const _fl_values = (o) => (o==null ? [] : Object.values(o));const _fl_entries = (o) => (o==null ? [] : Object.entries(o).map(([k,v])=>[k,v]));const _fl_has_key = (o, k) => (o!=null && k in o);const _fl_map_set = (o, k, v) => ({...o, [k]: v});const _fl_map_delete = (o, k) => { const c={...o}; delete c[k]; return c; };const _fl_merge = (...os) => Object.assign({}, ...os);const _fl_is_map = (x) => (x!=null && typeof x==='object' && !Array.isArray(x));const _fl_type_of = (x) => (x==null?'null':Array.isArray(x)?'list':typeof x);const _fl_file_read = (p) => require('fs').readFileSync(p, 'utf8');const _fl_file_write = (p, c) => require('fs').writeFileSync(p, c);const _fl_file_exists = (p) => require('fs').existsSync(p);const _fl_shell_capture = (cmd) => { try { const {execSync}=require('child_process'); return {stdout:execSync(cmd,{encoding:'utf8'}),stderr:'',code:0}; } catch(e) { return {stdout:'',stderr:String(e),code:1}; } };const _fl_empty_q = (x) => (x==null || x.length===0);
@@ -0,0 +1,2 @@
1
+ const _fl_str = (...xs) => xs.map(x => x==null?'null':String(x)).join('');const _fl_length = (x) => (x==null ? 0 : x.length);const _fl_substring = (s, a, b) => (b==null ? s.slice(a) : s.slice(a, b));const _fl_char_at = (s, i) => (s[i] || null);const _fl_replace = (s, a, b) => s.split(a).join(b);const _fl_starts_with = (s, p) => s.startsWith(p);const _fl_ends_with = (s, p) => s.endsWith(p);const _fl_contains = (s, p) => s.includes(p);const _fl_split = (s, sep) => s.split(sep);const _fl_join = (l, sep) => l.join(sep==null?'':sep);const _fl_trim = (s) => s.trim();const _fl_upper = (s) => s.toUpperCase();const _fl_lower = (s) => s.toLowerCase();const _fl_repeat = (s, n) => s.repeat(n);const _fl_index_of = (s, p) => s.indexOf(p);const _fl_first = (l) => (l==null || l.length===0 ? null : l[0]);const _fl_last = (l) => (l==null || l.length===0 ? null : l[l.length-1]);const _fl_rest = (l) => (l==null || l.length===0 ? [] : l.slice(1));const _fl_append = (a, b) => (Array.isArray(b) ? [...a, ...b] : [...a, b]);const _fl_slice = (l, a, b) => l.slice(a, b);const _fl_map = (f, l) => l.map(x => f(x));const _fl_filter = (f, l) => l.filter(x => f(x));const _fl_reduce = (f, init, l) => l.reduce((acc, x) => f(acc, x), init);const _fl_sort = (l, cmp) => [...l].sort(cmp || ((a,b)=>a<b?-1:a>b?1:0));const _fl_reverse = (l) => [...l].reverse();const _fl_distinct = (l) => [...new Set(l)];const _fl_range = (a, b, s) => { let r=[]; let step=s||1; for(let i=a;i<b;i+=step)r.push(i); return r; };const _fl_take = (n, l) => l.slice(0, n);const _fl_drop = (n, l) => l.slice(n);const _fl_flatten = (l) => l.flat(Infinity);const _fl_get = (o, k) => (o==null ? null : (o[k]===undefined ? null : o[k]));const _fl_keys = (o) => (o==null ? [] : Object.keys(o));const _fl_values = (o) => (o==null ? [] : Object.values(o));const _fl_has_key = (o, k) => (o!=null && k in o);const _fl_merge = (...os) => Object.assign({}, ...os);const _fl_is_map = (x) => (x!=null && typeof x==='object' && !Array.isArray(x));const _fl_type_of = (x) => (x==null?'null':Array.isArray(x)?'list':typeof x);
2
+ console.log(_fl_distinct([1,2,2,3,3,3,4]));
@@ -0,0 +1,2 @@
1
+ const _fl_str = (...xs) => xs.map(x => x==null?'null':String(x)).join('');const _fl_length = (x) => (x==null ? 0 : x.length);const _fl_substring = (s, a, b) => (b==null ? s.slice(a) : s.slice(a, b));const _fl_char_at = (s, i) => (s[i] || null);const _fl_replace = (s, a, b) => s.split(a).join(b);const _fl_starts_with = (s, p) => s.startsWith(p);const _fl_ends_with = (s, p) => s.endsWith(p);const _fl_contains = (s, p) => s.includes(p);const _fl_split = (s, sep) => s.split(sep);const _fl_join = (l, sep) => l.join(sep==null?'':sep);const _fl_trim = (s) => s.trim();const _fl_upper = (s) => s.toUpperCase();const _fl_lower = (s) => s.toLowerCase();const _fl_repeat = (s, n) => s.repeat(n);const _fl_index_of = (s, p) => s.indexOf(p);const _fl_first = (l) => (l==null || l.length===0 ? null : l[0]);const _fl_last = (l) => (l==null || l.length===0 ? null : l[l.length-1]);const _fl_rest = (l) => (l==null || l.length===0 ? [] : l.slice(1));const _fl_append = (a, b) => (Array.isArray(b) ? [...a, ...b] : [...a, b]);const _fl_slice = (l, a, b) => l.slice(a, b);const _fl_map = (f, l) => l.map(x => f(x));const _fl_filter = (f, l) => l.filter(x => f(x));const _fl_reduce = (f, init, l) => l.reduce((acc, x) => f(acc, x), init);const _fl_sort = (l, cmp) => [...l].sort(cmp || ((a,b)=>a<b?-1:a>b?1:0));const _fl_reverse = (l) => [...l].reverse();const _fl_distinct = (l) => [...new Set(l)];const _fl_range = (a, b, s) => { let r=[]; let step=s||1; for(let i=a;i<b;i+=step)r.push(i); return r; };const _fl_take = (n, l) => l.slice(0, n);const _fl_drop = (n, l) => l.slice(n);const _fl_flatten = (l) => l.flat(Infinity);const _fl_get = (o, k) => (o==null ? null : (o[k]===undefined ? null : o[k]));const _fl_keys = (o) => (o==null ? [] : Object.keys(o));const _fl_values = (o) => (o==null ? [] : Object.values(o));const _fl_has_key = (o, k) => (o!=null && k in o);const _fl_merge = (...os) => Object.assign({}, ...os);const _fl_is_map = (x) => (x!=null && typeof x==='object' && !Array.isArray(x));const _fl_type_of = (x) => (x==null?'null':Array.isArray(x)?'list':typeof x);
2
+ console.log(_fl_filter(((x)=>((x%2)===0)),[1,2,3,4,5]));
@@ -0,0 +1,2 @@
1
+ const _fl_str = (...xs) => xs.map(x => x==null?'null':String(x)).join('');const _fl_length = (x) => (x==null ? 0 : x.length);const _fl_substring = (s, a, b) => (b==null ? s.slice(a) : s.slice(a, b));const _fl_char_at = (s, i) => (s[i] || null);const _fl_replace = (s, a, b) => s.split(a).join(b);const _fl_starts_with = (s, p) => s.startsWith(p);const _fl_ends_with = (s, p) => s.endsWith(p);const _fl_contains = (s, p) => s.includes(p);const _fl_split = (s, sep) => s.split(sep);const _fl_join = (l, sep) => l.join(sep==null?'':sep);const _fl_trim = (s) => s.trim();const _fl_upper = (s) => s.toUpperCase();const _fl_lower = (s) => s.toLowerCase();const _fl_repeat = (s, n) => s.repeat(n);const _fl_index_of = (s, p) => s.indexOf(p);const _fl_first = (l) => (l==null || l.length===0 ? null : l[0]);const _fl_last = (l) => (l==null || l.length===0 ? null : l[l.length-1]);const _fl_rest = (l) => (l==null || l.length===0 ? [] : l.slice(1));const _fl_append = (a, b) => (Array.isArray(b) ? [...a, ...b] : [...a, b]);const _fl_slice = (l, a, b) => l.slice(a, b);const _fl_map = (f, l) => l.map(x => f(x));const _fl_filter = (f, l) => l.filter(x => f(x));const _fl_reduce = (f, init, l) => l.reduce((acc, x) => f(acc, x), init);const _fl_sort = (l, cmp) => [...l].sort(cmp || ((a,b)=>a<b?-1:a>b?1:0));const _fl_reverse = (l) => [...l].reverse();const _fl_distinct = (l) => [...new Set(l)];const _fl_range = (a, b, s) => { let r=[]; let step=s||1; for(let i=a;i<b;i+=step)r.push(i); return r; };const _fl_take = (n, l) => l.slice(0, n);const _fl_drop = (n, l) => l.slice(n);const _fl_flatten = (l) => l.flat(Infinity);const _fl_get = (o, k) => (o==null ? null : (o[k]===undefined ? null : o[k]));const _fl_keys = (o) => (o==null ? [] : Object.keys(o));const _fl_values = (o) => (o==null ? [] : Object.values(o));const _fl_has_key = (o, k) => (o!=null && k in o);const _fl_merge = (...os) => Object.assign({}, ...os);const _fl_is_map = (x) => (x!=null && typeof x==='object' && !Array.isArray(x));const _fl_type_of = (x) => (x==null?'null':Array.isArray(x)?'list':typeof x);
2
+ console.log(_fl_first([10,20,30]));
@@ -0,0 +1,2 @@
1
+ const _fl_str = (...xs) => xs.map(x => x==null?'null':String(x)).join('');const _fl_length = (x) => (x==null ? 0 : x.length);const _fl_substring = (s, a, b) => (b==null ? s.slice(a) : s.slice(a, b));const _fl_char_at = (s, i) => (s[i] || null);const _fl_replace = (s, a, b) => s.split(a).join(b);const _fl_starts_with = (s, p) => s.startsWith(p);const _fl_ends_with = (s, p) => s.endsWith(p);const _fl_contains = (s, p) => s.includes(p);const _fl_split = (s, sep) => s.split(sep);const _fl_join = (l, sep) => l.join(sep==null?'':sep);const _fl_trim = (s) => s.trim();const _fl_upper = (s) => s.toUpperCase();const _fl_lower = (s) => s.toLowerCase();const _fl_repeat = (s, n) => s.repeat(n);const _fl_index_of = (s, p) => s.indexOf(p);const _fl_first = (l) => (l==null || l.length===0 ? null : l[0]);const _fl_last = (l) => (l==null || l.length===0 ? null : l[l.length-1]);const _fl_rest = (l) => (l==null || l.length===0 ? [] : l.slice(1));const _fl_append = (a, b) => (Array.isArray(b) ? [...a, ...b] : [...a, b]);const _fl_slice = (l, a, b) => l.slice(a, b);const _fl_map = (f, l) => l.map(x => f(x));const _fl_filter = (f, l) => l.filter(x => f(x));const _fl_reduce = (f, init, l) => l.reduce((acc, x) => f(acc, x), init);const _fl_sort = (l, cmp) => [...l].sort(cmp || ((a,b)=>a<b?-1:a>b?1:0));const _fl_reverse = (l) => [...l].reverse();const _fl_distinct = (l) => [...new Set(l)];const _fl_range = (a, b, s) => { let r=[]; let step=s||1; for(let i=a;i<b;i+=step)r.push(i); return r; };const _fl_take = (n, l) => l.slice(0, n);const _fl_drop = (n, l) => l.slice(n);const _fl_flatten = (l) => l.flat(Infinity);const _fl_get = (o, k) => (o==null ? null : (o[k]===undefined ? null : o[k]));const _fl_keys = (o) => (o==null ? [] : Object.keys(o));const _fl_values = (o) => (o==null ? [] : Object.values(o));const _fl_has_key = (o, k) => (o!=null && k in o);const _fl_merge = (...os) => Object.assign({}, ...os);const _fl_is_map = (x) => (x!=null && typeof x==='object' && !Array.isArray(x));const _fl_type_of = (x) => (x==null?'null':Array.isArray(x)?'list':typeof x);
2
+ console.log(_fl_last([10,20,30]));
@@ -0,0 +1,2 @@
1
+ const _fl_str = (...xs) => xs.map(x => x==null?'null':String(x)).join('');const _fl_length = (x) => (x==null ? 0 : x.length);const _fl_substring = (s, a, b) => (b==null ? s.slice(a) : s.slice(a, b));const _fl_char_at = (s, i) => (s[i] || null);const _fl_replace = (s, a, b) => s.split(a).join(b);const _fl_starts_with = (s, p) => s.startsWith(p);const _fl_ends_with = (s, p) => s.endsWith(p);const _fl_contains = (s, p) => s.includes(p);const _fl_split = (s, sep) => s.split(sep);const _fl_join = (l, sep) => l.join(sep==null?'':sep);const _fl_trim = (s) => s.trim();const _fl_upper = (s) => s.toUpperCase();const _fl_lower = (s) => s.toLowerCase();const _fl_repeat = (s, n) => s.repeat(n);const _fl_index_of = (s, p) => s.indexOf(p);const _fl_first = (l) => (l==null || l.length===0 ? null : l[0]);const _fl_last = (l) => (l==null || l.length===0 ? null : l[l.length-1]);const _fl_rest = (l) => (l==null || l.length===0 ? [] : l.slice(1));const _fl_append = (a, b) => (Array.isArray(b) ? [...a, ...b] : [...a, b]);const _fl_slice = (l, a, b) => l.slice(a, b);const _fl_map = (f, l) => l.map(x => f(x));const _fl_filter = (f, l) => l.filter(x => f(x));const _fl_reduce = (f, init, l) => l.reduce((acc, x) => f(acc, x), init);const _fl_sort = (l, cmp) => [...l].sort(cmp || ((a,b)=>a<b?-1:a>b?1:0));const _fl_reverse = (l) => [...l].reverse();const _fl_distinct = (l) => [...new Set(l)];const _fl_range = (a, b, s) => { let r=[]; let step=s||1; for(let i=a;i<b;i+=step)r.push(i); return r; };const _fl_take = (n, l) => l.slice(0, n);const _fl_drop = (n, l) => l.slice(n);const _fl_flatten = (l) => l.flat(Infinity);const _fl_get = (o, k) => (o==null ? null : (o[k]===undefined ? null : o[k]));const _fl_keys = (o) => (o==null ? [] : Object.keys(o));const _fl_values = (o) => (o==null ? [] : Object.values(o));const _fl_has_key = (o, k) => (o!=null && k in o);const _fl_merge = (...os) => Object.assign({}, ...os);const _fl_is_map = (x) => (x!=null && typeof x==='object' && !Array.isArray(x));const _fl_type_of = (x) => (x==null?'null':Array.isArray(x)?'list':typeof x);
2
+ console.log(_fl_map(((x)=>(x+1)),[1,2,3]));
@@ -0,0 +1,2 @@
1
+ const _fl_str = (...xs) => xs.map(x => x==null?'null':String(x)).join('');const _fl_length = (x) => (x==null ? 0 : x.length);const _fl_substring = (s, a, b) => (b==null ? s.slice(a) : s.slice(a, b));const _fl_char_at = (s, i) => (s[i] || null);const _fl_replace = (s, a, b) => s.split(a).join(b);const _fl_starts_with = (s, p) => s.startsWith(p);const _fl_ends_with = (s, p) => s.endsWith(p);const _fl_contains = (s, p) => s.includes(p);const _fl_split = (s, sep) => s.split(sep);const _fl_join = (l, sep) => l.join(sep==null?'':sep);const _fl_trim = (s) => s.trim();const _fl_upper = (s) => s.toUpperCase();const _fl_lower = (s) => s.toLowerCase();const _fl_repeat = (s, n) => s.repeat(n);const _fl_index_of = (s, p) => s.indexOf(p);const _fl_first = (l) => (l==null || l.length===0 ? null : l[0]);const _fl_last = (l) => (l==null || l.length===0 ? null : l[l.length-1]);const _fl_rest = (l) => (l==null || l.length===0 ? [] : l.slice(1));const _fl_append = (a, b) => (Array.isArray(b) ? [...a, ...b] : [...a, b]);const _fl_slice = (l, a, b) => l.slice(a, b);const _fl_map = (f, l) => l.map(x => f(x));const _fl_filter = (f, l) => l.filter(x => f(x));const _fl_reduce = (f, init, l) => l.reduce((acc, x) => f(acc, x), init);const _fl_sort = (l, cmp) => [...l].sort(cmp || ((a,b)=>a<b?-1:a>b?1:0));const _fl_reverse = (l) => [...l].reverse();const _fl_distinct = (l) => [...new Set(l)];const _fl_range = (a, b, s) => { let r=[]; let step=s||1; for(let i=a;i<b;i+=step)r.push(i); return r; };const _fl_take = (n, l) => l.slice(0, n);const _fl_drop = (n, l) => l.slice(n);const _fl_flatten = (l) => l.flat(Infinity);const _fl_get = (o, k) => (o==null ? null : (o[k]===undefined ? null : o[k]));const _fl_keys = (o) => (o==null ? [] : Object.keys(o));const _fl_values = (o) => (o==null ? [] : Object.values(o));const _fl_has_key = (o, k) => (o!=null && k in o);const _fl_merge = (...os) => Object.assign({}, ...os);const _fl_is_map = (x) => (x!=null && typeof x==='object' && !Array.isArray(x));const _fl_type_of = (x) => (x==null?'null':Array.isArray(x)?'list':typeof x);
2
+ console.log(_fl_range(0,5));
@@ -0,0 +1,2 @@
1
+ const _fl_str = (...xs) => xs.map(x => x==null?'null':String(x)).join('');const _fl_length = (x) => (x==null ? 0 : x.length);const _fl_substring = (s, a, b) => (b==null ? s.slice(a) : s.slice(a, b));const _fl_char_at = (s, i) => (s[i] || null);const _fl_replace = (s, a, b) => s.split(a).join(b);const _fl_starts_with = (s, p) => s.startsWith(p);const _fl_ends_with = (s, p) => s.endsWith(p);const _fl_contains = (s, p) => s.includes(p);const _fl_split = (s, sep) => s.split(sep);const _fl_join = (l, sep) => l.join(sep==null?'':sep);const _fl_trim = (s) => s.trim();const _fl_upper = (s) => s.toUpperCase();const _fl_lower = (s) => s.toLowerCase();const _fl_repeat = (s, n) => s.repeat(n);const _fl_index_of = (s, p) => s.indexOf(p);const _fl_first = (l) => (l==null || l.length===0 ? null : l[0]);const _fl_last = (l) => (l==null || l.length===0 ? null : l[l.length-1]);const _fl_rest = (l) => (l==null || l.length===0 ? [] : l.slice(1));const _fl_append = (a, b) => (Array.isArray(b) ? [...a, ...b] : [...a, b]);const _fl_slice = (l, a, b) => l.slice(a, b);const _fl_map = (f, l) => l.map(x => f(x));const _fl_filter = (f, l) => l.filter(x => f(x));const _fl_reduce = (f, init, l) => l.reduce((acc, x) => f(acc, x), init);const _fl_sort = (l, cmp) => [...l].sort(cmp || ((a,b)=>a<b?-1:a>b?1:0));const _fl_reverse = (l) => [...l].reverse();const _fl_distinct = (l) => [...new Set(l)];const _fl_range = (a, b, s) => { let r=[]; let step=s||1; for(let i=a;i<b;i+=step)r.push(i); return r; };const _fl_take = (n, l) => l.slice(0, n);const _fl_drop = (n, l) => l.slice(n);const _fl_flatten = (l) => l.flat(Infinity);const _fl_get = (o, k) => (o==null ? null : (o[k]===undefined ? null : o[k]));const _fl_keys = (o) => (o==null ? [] : Object.keys(o));const _fl_values = (o) => (o==null ? [] : Object.values(o));const _fl_has_key = (o, k) => (o!=null && k in o);const _fl_merge = (...os) => Object.assign({}, ...os);const _fl_is_map = (x) => (x!=null && typeof x==='object' && !Array.isArray(x));const _fl_type_of = (x) => (x==null?'null':Array.isArray(x)?'list':typeof x);
2
+ console.log(_fl_reduce(((a,b)=>(a+b)),0,[1,2,3,4]));
@@ -0,0 +1,2 @@
1
+ const _fl_str = (...xs) => xs.map(x => x==null?'null':String(x)).join('');const _fl_length = (x) => (x==null ? 0 : x.length);const _fl_substring = (s, a, b) => (b==null ? s.slice(a) : s.slice(a, b));const _fl_char_at = (s, i) => (s[i] || null);const _fl_replace = (s, a, b) => s.split(a).join(b);const _fl_starts_with = (s, p) => s.startsWith(p);const _fl_ends_with = (s, p) => s.endsWith(p);const _fl_contains = (s, p) => s.includes(p);const _fl_split = (s, sep) => s.split(sep);const _fl_join = (l, sep) => l.join(sep==null?'':sep);const _fl_trim = (s) => s.trim();const _fl_upper = (s) => s.toUpperCase();const _fl_lower = (s) => s.toLowerCase();const _fl_repeat = (s, n) => s.repeat(n);const _fl_index_of = (s, p) => s.indexOf(p);const _fl_first = (l) => (l==null || l.length===0 ? null : l[0]);const _fl_last = (l) => (l==null || l.length===0 ? null : l[l.length-1]);const _fl_rest = (l) => (l==null || l.length===0 ? [] : l.slice(1));const _fl_append = (a, b) => (Array.isArray(b) ? [...a, ...b] : [...a, b]);const _fl_slice = (l, a, b) => l.slice(a, b);const _fl_map = (f, l) => l.map(x => f(x));const _fl_filter = (f, l) => l.filter(x => f(x));const _fl_reduce = (f, init, l) => l.reduce((acc, x) => f(acc, x), init);const _fl_sort = (l, cmp) => [...l].sort(cmp || ((a,b)=>a<b?-1:a>b?1:0));const _fl_reverse = (l) => [...l].reverse();const _fl_distinct = (l) => [...new Set(l)];const _fl_range = (a, b, s) => { let r=[]; let step=s||1; for(let i=a;i<b;i+=step)r.push(i); return r; };const _fl_take = (n, l) => l.slice(0, n);const _fl_drop = (n, l) => l.slice(n);const _fl_flatten = (l) => l.flat(Infinity);const _fl_get = (o, k) => (o==null ? null : (o[k]===undefined ? null : o[k]));const _fl_keys = (o) => (o==null ? [] : Object.keys(o));const _fl_values = (o) => (o==null ? [] : Object.values(o));const _fl_has_key = (o, k) => (o!=null && k in o);const _fl_merge = (...os) => Object.assign({}, ...os);const _fl_is_map = (x) => (x!=null && typeof x==='object' && !Array.isArray(x));const _fl_type_of = (x) => (x==null?'null':Array.isArray(x)?'list':typeof x);
2
+ console.log(_fl_reverse([1,2,3]));
@@ -0,0 +1,2 @@
1
+ const _fl_str = (...xs) => xs.map(x => x==null?'null':String(x)).join('');const _fl_length = (x) => (x==null ? 0 : x.length);const _fl_substring = (s, a, b) => (b==null ? s.slice(a) : s.slice(a, b));const _fl_char_at = (s, i) => (s[i] || null);const _fl_replace = (s, a, b) => s.split(a).join(b);const _fl_starts_with = (s, p) => s.startsWith(p);const _fl_ends_with = (s, p) => s.endsWith(p);const _fl_contains = (s, p) => s.includes(p);const _fl_split = (s, sep) => s.split(sep);const _fl_join = (l, sep) => l.join(sep==null?'':sep);const _fl_trim = (s) => s.trim();const _fl_upper = (s) => s.toUpperCase();const _fl_lower = (s) => s.toLowerCase();const _fl_repeat = (s, n) => s.repeat(n);const _fl_index_of = (s, p) => s.indexOf(p);const _fl_first = (l) => (l==null || l.length===0 ? null : l[0]);const _fl_last = (l) => (l==null || l.length===0 ? null : l[l.length-1]);const _fl_rest = (l) => (l==null || l.length===0 ? [] : l.slice(1));const _fl_append = (a, b) => (Array.isArray(b) ? [...a, ...b] : [...a, b]);const _fl_slice = (l, a, b) => l.slice(a, b);const _fl_map = (f, l) => l.map(x => f(x));const _fl_filter = (f, l) => l.filter(x => f(x));const _fl_reduce = (f, init, l) => l.reduce((acc, x) => f(acc, x), init);const _fl_sort = (l, cmp) => [...l].sort(cmp || ((a,b)=>a<b?-1:a>b?1:0));const _fl_reverse = (l) => [...l].reverse();const _fl_distinct = (l) => [...new Set(l)];const _fl_range = (a, b, s) => { let r=[]; let step=s||1; for(let i=a;i<b;i+=step)r.push(i); return r; };const _fl_take = (n, l) => l.slice(0, n);const _fl_drop = (n, l) => l.slice(n);const _fl_flatten = (l) => l.flat(Infinity);const _fl_get = (o, k) => (o==null ? null : (o[k]===undefined ? null : o[k]));const _fl_keys = (o) => (o==null ? [] : Object.keys(o));const _fl_values = (o) => (o==null ? [] : Object.values(o));const _fl_has_key = (o, k) => (o!=null && k in o);const _fl_merge = (...os) => Object.assign({}, ...os);const _fl_is_map = (x) => (x!=null && typeof x==='object' && !Array.isArray(x));const _fl_type_of = (x) => (x==null?'null':Array.isArray(x)?'list':typeof x);
2
+ console.log(_fl_sort([3,1,4,1,5,9,2,6]));
@@ -0,0 +1,2 @@
1
+ const _fl_str = (...xs) => xs.map(x => x==null?'null':String(x)).join('');const _fl_length = (x) => (x==null ? 0 : x.length);const _fl_substring = (s, a, b) => (b==null ? s.slice(a) : s.slice(a, b));const _fl_char_at = (s, i) => (s[i] || null);const _fl_replace = (s, a, b) => s.split(a).join(b);const _fl_starts_with = (s, p) => s.startsWith(p);const _fl_ends_with = (s, p) => s.endsWith(p);const _fl_contains = (s, p) => s.includes(p);const _fl_split = (s, sep) => s.split(sep);const _fl_join = (l, sep) => l.join(sep==null?'':sep);const _fl_trim = (s) => s.trim();const _fl_upper = (s) => s.toUpperCase();const _fl_lower = (s) => s.toLowerCase();const _fl_repeat = (s, n) => s.repeat(n);const _fl_index_of = (s, p) => s.indexOf(p);const _fl_first = (l) => (l==null || l.length===0 ? null : l[0]);const _fl_last = (l) => (l==null || l.length===0 ? null : l[l.length-1]);const _fl_rest = (l) => (l==null || l.length===0 ? [] : l.slice(1));const _fl_append = (a, b) => (Array.isArray(b) ? [...a, ...b] : [...a, b]);const _fl_slice = (l, a, b) => l.slice(a, b);const _fl_map = (f, l) => l.map(x => f(x));const _fl_filter = (f, l) => l.filter(x => f(x));const _fl_reduce = (f, init, l) => l.reduce((acc, x) => f(acc, x), init);const _fl_sort = (l, cmp) => [...l].sort(cmp || ((a,b)=>a<b?-1:a>b?1:0));const _fl_reverse = (l) => [...l].reverse();const _fl_distinct = (l) => [...new Set(l)];const _fl_range = (a, b, s) => { let r=[]; let step=s||1; for(let i=a;i<b;i+=step)r.push(i); return r; };const _fl_take = (n, l) => l.slice(0, n);const _fl_drop = (n, l) => l.slice(n);const _fl_flatten = (l) => l.flat(Infinity);const _fl_get = (o, k) => (o==null ? null : (o[k]===undefined ? null : o[k]));const _fl_keys = (o) => (o==null ? [] : Object.keys(o));const _fl_values = (o) => (o==null ? [] : Object.values(o));const _fl_has_key = (o, k) => (o!=null && k in o);const _fl_merge = (...os) => Object.assign({}, ...os);const _fl_is_map = (x) => (x!=null && typeof x==='object' && !Array.isArray(x));const _fl_type_of = (x) => (x==null?'null':Array.isArray(x)?'list':typeof x);
2
+ console.log(_fl_take(3,[10,20,30,40,50]));
@@ -0,0 +1,2 @@
1
+ const _fl_str = (...xs) => xs.map(x => x==null?'null':String(x)).join('');const _fl_length = (x) => (x==null ? 0 : x.length);const _fl_substring = (s, a, b) => (b==null ? s.slice(a) : s.slice(a, b));const _fl_char_at = (s, i) => (s[i] || null);const _fl_replace = (s, a, b) => s.split(a).join(b);const _fl_starts_with = (s, p) => s.startsWith(p);const _fl_ends_with = (s, p) => s.endsWith(p);const _fl_contains = (s, p) => s.includes(p);const _fl_split = (s, sep) => s.split(sep);const _fl_join = (l, sep) => l.join(sep==null?'':sep);const _fl_trim = (s) => s.trim();const _fl_upper = (s) => s.toUpperCase();const _fl_lower = (s) => s.toLowerCase();const _fl_repeat = (s, n) => s.repeat(n);const _fl_index_of = (s, p) => s.indexOf(p);const _fl_first = (l) => (l==null || l.length===0 ? null : l[0]);const _fl_last = (l) => (l==null || l.length===0 ? null : l[l.length-1]);const _fl_rest = (l) => (l==null || l.length===0 ? [] : l.slice(1));const _fl_append = (a, b) => (Array.isArray(b) ? [...a, ...b] : [...a, b]);const _fl_slice = (l, a, b) => l.slice(a, b);const _fl_map = (f, l) => l.map(x => f(x));const _fl_filter = (f, l) => l.filter(x => f(x));const _fl_reduce = (f, init, l) => l.reduce((acc, x) => f(acc, x), init);const _fl_sort = (l, cmp) => [...l].sort(cmp || ((a,b)=>a<b?-1:a>b?1:0));const _fl_reverse = (l) => [...l].reverse();const _fl_distinct = (l) => [...new Set(l)];const _fl_range = (a, b, s) => { let r=[]; let step=s||1; for(let i=a;i<b;i+=step)r.push(i); return r; };const _fl_take = (n, l) => l.slice(0, n);const _fl_drop = (n, l) => l.slice(n);const _fl_flatten = (l) => l.flat(Infinity);const _fl_get = (o, k) => (o==null ? null : (o[k]===undefined ? null : o[k]));const _fl_keys = (o) => (o==null ? [] : Object.keys(o));const _fl_values = (o) => (o==null ? [] : Object.values(o));const _fl_has_key = (o, k) => (o!=null && k in o);const _fl_merge = (...os) => Object.assign({}, ...os);const _fl_is_map = (x) => (x!=null && typeof x==='object' && !Array.isArray(x));const _fl_type_of = (x) => (x==null?'null':Array.isArray(x)?'list':typeof x);
2
+ console.log(_fl_has_key(JSON.parse("{\"a\":1}"),"a"));
@@ -0,0 +1,2 @@
1
+ const _fl_str = (...xs) => xs.map(x => x==null?'null':String(x)).join('');const _fl_length = (x) => (x==null ? 0 : x.length);const _fl_substring = (s, a, b) => (b==null ? s.slice(a) : s.slice(a, b));const _fl_char_at = (s, i) => (s[i] || null);const _fl_replace = (s, a, b) => s.split(a).join(b);const _fl_starts_with = (s, p) => s.startsWith(p);const _fl_ends_with = (s, p) => s.endsWith(p);const _fl_contains = (s, p) => s.includes(p);const _fl_split = (s, sep) => s.split(sep);const _fl_join = (l, sep) => l.join(sep==null?'':sep);const _fl_trim = (s) => s.trim();const _fl_upper = (s) => s.toUpperCase();const _fl_lower = (s) => s.toLowerCase();const _fl_repeat = (s, n) => s.repeat(n);const _fl_index_of = (s, p) => s.indexOf(p);const _fl_first = (l) => (l==null || l.length===0 ? null : l[0]);const _fl_last = (l) => (l==null || l.length===0 ? null : l[l.length-1]);const _fl_rest = (l) => (l==null || l.length===0 ? [] : l.slice(1));const _fl_append = (a, b) => (Array.isArray(b) ? [...a, ...b] : [...a, b]);const _fl_slice = (l, a, b) => l.slice(a, b);const _fl_map = (f, l) => l.map(x => f(x));const _fl_filter = (f, l) => l.filter(x => f(x));const _fl_reduce = (f, init, l) => l.reduce((acc, x) => f(acc, x), init);const _fl_sort = (l, cmp) => [...l].sort(cmp || ((a,b)=>a<b?-1:a>b?1:0));const _fl_reverse = (l) => [...l].reverse();const _fl_distinct = (l) => [...new Set(l)];const _fl_range = (a, b, s) => { let r=[]; let step=s||1; for(let i=a;i<b;i+=step)r.push(i); return r; };const _fl_take = (n, l) => l.slice(0, n);const _fl_drop = (n, l) => l.slice(n);const _fl_flatten = (l) => l.flat(Infinity);const _fl_get = (o, k) => (o==null ? null : (o[k]===undefined ? null : o[k]));const _fl_keys = (o) => (o==null ? [] : Object.keys(o));const _fl_values = (o) => (o==null ? [] : Object.values(o));const _fl_has_key = (o, k) => (o!=null && k in o);const _fl_merge = (...os) => Object.assign({}, ...os);const _fl_is_map = (x) => (x!=null && typeof x==='object' && !Array.isArray(x));const _fl_type_of = (x) => (x==null?'null':Array.isArray(x)?'list':typeof x);
2
+ console.log(_fl_keys(JSON.parse("{\"a\":1,\"b\":2}")));
@@ -0,0 +1,2 @@
1
+ const _fl_str = (...xs) => xs.map(x => x==null?'null':String(x)).join('');const _fl_length = (x) => (x==null ? 0 : x.length);const _fl_substring = (s, a, b) => (b==null ? s.slice(a) : s.slice(a, b));const _fl_char_at = (s, i) => (s[i] || null);const _fl_replace = (s, a, b) => s.split(a).join(b);const _fl_starts_with = (s, p) => s.startsWith(p);const _fl_ends_with = (s, p) => s.endsWith(p);const _fl_contains = (s, p) => s.includes(p);const _fl_split = (s, sep) => s.split(sep);const _fl_join = (l, sep) => l.join(sep==null?'':sep);const _fl_trim = (s) => s.trim();const _fl_upper = (s) => s.toUpperCase();const _fl_lower = (s) => s.toLowerCase();const _fl_repeat = (s, n) => s.repeat(n);const _fl_index_of = (s, p) => s.indexOf(p);const _fl_first = (l) => (l==null || l.length===0 ? null : l[0]);const _fl_last = (l) => (l==null || l.length===0 ? null : l[l.length-1]);const _fl_rest = (l) => (l==null || l.length===0 ? [] : l.slice(1));const _fl_append = (a, b) => (Array.isArray(b) ? [...a, ...b] : [...a, b]);const _fl_slice = (l, a, b) => l.slice(a, b);const _fl_map = (f, l) => l.map(x => f(x));const _fl_filter = (f, l) => l.filter(x => f(x));const _fl_reduce = (f, init, l) => l.reduce((acc, x) => f(acc, x), init);const _fl_sort = (l, cmp) => [...l].sort(cmp || ((a,b)=>a<b?-1:a>b?1:0));const _fl_reverse = (l) => [...l].reverse();const _fl_distinct = (l) => [...new Set(l)];const _fl_range = (a, b, s) => { let r=[]; let step=s||1; for(let i=a;i<b;i+=step)r.push(i); return r; };const _fl_take = (n, l) => l.slice(0, n);const _fl_drop = (n, l) => l.slice(n);const _fl_flatten = (l) => l.flat(Infinity);const _fl_get = (o, k) => (o==null ? null : (o[k]===undefined ? null : o[k]));const _fl_keys = (o) => (o==null ? [] : Object.keys(o));const _fl_values = (o) => (o==null ? [] : Object.values(o));const _fl_has_key = (o, k) => (o!=null && k in o);const _fl_merge = (...os) => Object.assign({}, ...os);const _fl_is_map = (x) => (x!=null && typeof x==='object' && !Array.isArray(x));const _fl_type_of = (x) => (x==null?'null':Array.isArray(x)?'list':typeof x);
2
+ console.log(_fl_values(JSON.parse("{\"a\":1,\"b\":2}")));