Imports
Calcit loads namespaces from compact.cirru and modules from ~/.config/calcit/modules/. It's using 2 rules:
ns app.demo
:require
app.lib :as lib
app.lib :refer $ f1 f2
By using :as, it's loading a namespace as lib, then access a definition like lib/f1. By using :refer, it's importing the definition.
JavaScript imports
Imports for JavaScript is similar,
ns app.demo
:require
app.lib :as lib
app.lib :refer $ f1 f2
after it compiles, the namespace is eliminated, and ES Modules import syntax is generated:
import * as $calcit from "./calcit.core";
import * as $app_DOT_lib from "app.lib"; // also it will generate `$app_DOT_lib.f1` for `lib/f1`
import { f1, f2 } from "app.lib";
There's an extra :default rule for loading Module.default.
ns app.demo
:require
app.lib :as lib
app.lib :refer $ f1 f2
|chalk :default chalk
which generates:
// ...
import chalk from "chalk";