Port the everything repo to funee - same concepts as Opah but funee's implementation.
- Macro detection (
createMacro()pattern) - Closure capture (expression + references)
- Macro execution via deno_core
- AST replacement with reference merging
- Recursive macro support
- Infinite recursion prevention
- funee-lib integration (Closure, CanonicalName, createMacro, log)
-
Closure<T>type and constructor -
CanonicalNametype -
createMacro()marker function - Host functions (log via Deno.core.ops)
- All imports from "funee" working
- AST types, predicates, and builders
- AST utilities (walkAST, cloneAST, replaceNodesByType, getOutOfScopeReferences)
- Implement reqwest-based HTTP fetching
- Cache at ~/.funee/cache/
- Handle network failures with stale cache fallback
- Support https:// and http:// URLs
- Resolve relative imports from HTTP base URLs
- Follow HTTP redirects (302, chains)
- Tree-shake HTTP modules
- CLI flag:
--reloadto bypass cache
- closure - captures expression as Closure<Closure>
- canonicalName - gets CanonicalName for a reference
- definition - captures as Definition
- tuple - combines multiple closures
- unsafeCast, unsafeDefined - type assertions
- functions/ - curry, not
- collections/ - without
- axax/ - 16 async iterator utilities
- refine/ - type refinement (Refine, KeySet, ensure, encode)
- assertions/ - testing library (assertThat, is, not, both, otherwise)
- random/ - cryptoRandomString
- git/ - ref parsing
- filesystem/ - readFile, writeFile, isFile, lstat, readdir
- http/ - httpRequest, httpGetJSON, httpPostJSON
- streams/ - toString, toBuffer, fromString, fromBuffer, empty
- validator/ - scenario, runScenarios
- tar/ - archive handling
- github/ - GitHub API
- npm/ - NPM publishing
- memoize/ - FS-based memoization
- watcher/ - file watching
- Import maps support
- 96 E2E tests passing β
- 22 Rust unit tests passing β
- Functional-only architecture (no classes)
- Complete macro system
- Full I/O capabilities
- Arrow functions only: Use
const fn = () => {}notfunction fn() {} - No classes: Use factory functions
- No Node.js APIs: Use web-standard APIs or add host functions
- Op naming: Host function names become
op_<name>in Deno.core.ops