Bundle language tools with CodeMirror package

This commit is contained in:
2026-07-09 21:25:04 +09:00
parent 59cb8f31e4
commit 8eac5c5cb4
24 changed files with 155 additions and 219 deletions
+3 -10
View File
@@ -16,7 +16,6 @@
"astro": "^4.16.18",
"codemirror": "^6.0.2",
"decodal-codemirror": "file:../../packages/decodal-codemirror",
"decodal-language-tools": "file:../../packages/decodal-language-tools",
"decodal-wasm": "file:../../packages/decodal-wasm",
"marked": "^12.0.2"
},
@@ -26,23 +25,21 @@
}
},
"../../packages/decodal-codemirror": {
"version": "0.1.3",
"version": "0.1.4",
"license": "MIT OR Apache-2.0",
"devDependencies": {
"@codemirror/language": "^6.12.4",
"@codemirror/view": "^6.43.6",
"@lezer/highlight": "^1.2.3",
"@lezer/lr": "^1.4.10"
},
"peerDependencies": {
"@codemirror/language": "^6.12.4",
"@codemirror/view": "^6.43.6",
"@lezer/highlight": "^1.2.3",
"@lezer/lr": "^1.4.10"
}
},
"../../packages/decodal-language-tools": {
"version": "0.1.2",
"license": "MIT OR Apache-2.0"
},
"../../packages/decodal-wasm": {
"version": "0.1.2",
"license": "MIT OR Apache-2.0"
@@ -3265,10 +3262,6 @@
"resolved": "../../packages/decodal-codemirror",
"link": true
},
"node_modules/decodal-language-tools": {
"resolved": "../../packages/decodal-language-tools",
"link": true
},
"node_modules/decodal-wasm": {
"resolved": "../../packages/decodal-wasm",
"link": true
+1 -2
View File
@@ -8,7 +8,7 @@
"build": "astro build",
"preview": "astro preview --host 0.0.0.0",
"build:runtime": "wasm-pack build ../../crates/decodal-wasm --target web --out-dir ../../packages/decodal-wasm --release && node scripts/prepare-wasm-package.mjs",
"build:tools": "wasm-pack build ../../crates/decodal-language-tools --target web --out-dir ../../packages/decodal-language-tools --release && node scripts/prepare-language-tools-package.mjs",
"build:tools": "wasm-pack build ../../crates/decodal-language-tools --target web --out-dir ../../packages/decodal-codemirror/wasm --release && node scripts/prepare-codemirror-wasm.mjs",
"build:wasm": "npm run build:runtime && npm run build:tools",
"build:packages": "npm run build:wasm",
"deploy": "npm run build && node scripts/deploy-pages.mjs",
@@ -23,7 +23,6 @@
"astro": "^4.16.18",
"codemirror": "^6.0.2",
"decodal-codemirror": "file:../../packages/decodal-codemirror",
"decodal-language-tools": "file:../../packages/decodal-language-tools",
"decodal-wasm": "file:../../packages/decodal-wasm",
"marked": "^12.0.2"
},
@@ -0,0 +1,12 @@
import { rmSync, writeFileSync } from 'node:fs';
import { resolve } from 'node:path';
const wasmDir = resolve(import.meta.dirname, '../../../packages/decodal-codemirror/wasm');
rmSync(resolve(wasmDir, 'README.md'), { force: true });
rmSync(resolve(wasmDir, 'package.json'), { force: true });
writeFileSync(
resolve(wasmDir, '.gitignore'),
'# wasm-pack output is committed as part of decodal-codemirror.\n',
);
@@ -1,76 +0,0 @@
import { writeFileSync } from 'node:fs';
import { resolve } from 'node:path';
const packageDir = resolve(import.meta.dirname, '../../../packages/decodal-language-tools');
writeFileSync(
resolve(packageDir, '.gitignore'),
'# wasm-pack output is committed for the browser language tools package.\n',
);
writeFileSync(
resolve(packageDir, 'README.md'),
`# decodal-language-tools
Source-level language tooling for Decodal.
This package is generated from the Rust crate in \`crates/decodal-language-tools\` with \`wasm-pack\`.
It currently exposes a comment-preserving formatter that is shared by the official playground and future editor/LSP tooling.
Use \`decodal-codemirror\` separately when you need CodeMirror 6 language support.
Use \`decodal-wasm\` separately when you need to evaluate Decodal in a browser.
## Install
\`\`\`sh
npm install decodal-language-tools
\`\`\`
JSR:
\`\`\`sh
deno add jsr:@hare/decodal-language-tools
\`\`\`
## Usage
\`\`\`js
import init, { formatSource } from 'decodal-language-tools';
await init();
const result = JSON.parse(formatSource('Server={# host\\nhost=String default "localhost";};'));
if (result.ok) {
console.log(result.source);
} else {
console.error(result.error);
}
\`\`\`
The exported functions return JSON strings so callers can handle diagnostics without depending on Rust data structures.
`,
);
writeFileSync(
resolve(packageDir, 'jsr.json'),
JSON.stringify(
{
name: '@hare/decodal-language-tools',
version: '0.1.2',
license: 'MIT',
exports: './decodal_language_tools.js',
publish: {
include: [
'README.md',
'decodal_language_tools.js',
'decodal_language_tools.d.ts',
'decodal_language_tools_bg.wasm',
'package.json',
],
},
},
null,
2,
) + '\n',
);
+3 -4
View File
@@ -33,8 +33,7 @@ Production = Server & {
</a>
<ul class="package-list">
<li>decodal-wasm on <a href="https://jsr.io/@hare/decodal-wasm@0.1.2">jsr</a> / <a href="https://www.npmjs.com/package/decodal-wasm">npm</a></li>
<li>decodal-language-tools on <a href="https://jsr.io/@hare/decodal-language-tools@0.1.2">jsr</a> / <a href="https://www.npmjs.com/package/decodal-language-tools">npm</a></li>
<li>decodal-codemirror on <a href="https://jsr.io/@hare/decodal-codemirror@0.1.3">jsr</a> / <a href="https://www.npmjs.com/package/decodal-codemirror">npm</a></li>
<li>decodal-codemirror on <a href="https://jsr.io/@hare/decodal-codemirror@0.1.4">jsr</a> / <a href="https://www.npmjs.com/package/decodal-codemirror">npm</a></li>
</ul>
</section>
@@ -49,8 +48,8 @@ Production = Server & {
<article class="home-card">
<h2>Where it runs</h2>
<p>
Use the Rust crate for runtime embedding, the WASM package in browsers, language-tools for formatting,
CodeMirror/Lezer for the Web editor, and Tree-sitter for general editor integration.
Use the Rust crate for runtime embedding, the WASM package in browsers, CodeMirror/Lezer for Web editing
and formatting, and Tree-sitter for general editor integration.
</p>
</article>
<article class="home-card">
+4 -4
View File
@@ -1,10 +1,10 @@
import initRuntime, { evaluateProject } from 'decodal-wasm';
import runtimeWasmUrl from 'decodal-wasm/decodal_wasm_bg.wasm?url';
import initTools, { formatSource } from 'decodal-language-tools';
import toolsWasmUrl from 'decodal-language-tools/decodal_language_tools_bg.wasm?url';
import { EditorView, basicSetup } from 'codemirror';
import { keymap } from '@codemirror/view';
import { decodal } from 'decodal-codemirror';
import { formatDecodal, initDecodalFormatter } from 'decodal-codemirror/format';
import toolsWasmUrl from 'decodal-codemirror/wasm/decodal_language_tools_bg.wasm?url';
import { playgroundExamples } from './playground-examples.js';
const STORAGE_KEY = 'decodal-playground-project-v2';
@@ -221,7 +221,7 @@ function execute() {
}
function formatActiveFile() {
const result = JSON.parse(formatSource(getEditorText()));
const result = formatDecodal(getEditorText());
if (!result.ok) {
output.textContent = result.error;
output.classList.add('error');
@@ -285,7 +285,7 @@ function compareNodes(a, b) {
}
try {
await Promise.all([initRuntime(runtimeWasmUrl), initTools(toolsWasmUrl)]);
await Promise.all([initRuntime(runtimeWasmUrl), initDecodalFormatter(toolsWasmUrl)]);
run.disabled = false;
formatButton.disabled = false;
status.textContent = '';