meta-language
v0.46.0
Published
JavaScript implementation of the meta-language links-network core
Readme
meta-language (JavaScript)
JavaScript implementation of the meta-language links-network core. It is the
JavaScript half of the meta-language multi-language project; the
Rust crate lives in ../rust.
The package mirrors the Rust operation families used by the parity registry:
parse, query, transform, substitute, serialize, snapshot, translate, and verify.
It is intentionally dependency-light and uses links-notation for LiNo and
link-cli-style substitution text plus peggy for generated parser modules.
Feature parity with the Rust crate is enforced by
../parity/language-features.json and the
npm run check:parity gate (see Parity below).
Usage
import {
LinkNetwork,
LinkQuery,
ParseConfiguration,
ReplacementRule,
} from 'meta-language';
const network = LinkNetwork.parse(
'const oldName = call(oldName);\n',
'JavaScript',
ParseConfiguration.default(),
);
const query = LinkQuery.fromSexpression(`
(identifier) @target
(#eq? @target "oldName")
`);
network.replace(
network.find(query),
ReplacementRule.capturedText('target', 'newName'),
);
console.log(network.reconstructText());
// const newName = call(newName);Parity
Every feature in ../parity/language-features.json
must be implemented in both Rust and JavaScript. npm run check:parity validates
the manifest, confirms each cell's evidence files exist, and asserts the
JavaScript API_OPERATIONS registry covers every operation family and API style.
The same check runs in both js.yml and rust.yml, so a change to one language
that is not mirrored in the other fails CI.
Development
npm ci
npm test
npm run check:parity
npm pack --dry-run