Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,4 @@
index.html
.vercel
node_modules/
out.html
9 changes: 9 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# Runtime Keys

This repo contains the WinterTC Runtime Keys ECMA Technical Report source and build tooling.

To get started, run `npm install` to install project dependencies
Copy link

@thescientist13 thescientist13 Jan 23, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: maybe we want to recommend using npm ci instead? (to avoid modifying the existing lock file)


To build the report run `npm run build`

To view the report open `out.html`
33 changes: 33 additions & 0 deletions build.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import { readFileSync, writeFileSync } from "node:fs";
import { resolve } from "node:path";

const specPath = resolve(import.meta.dirname, "spec.html");
const dataPath = resolve(import.meta.dirname, "runtime-keys.json");
const outPath = resolve(import.meta.dirname, "spec-injected.html");

const spec = readFileSync(specPath, "utf8");
const { runtimes } = JSON.parse(readFileSync(dataPath, "utf8"));

function escapeHtml(str) {
return str
.replace(/&/g, "&")
.replace(/</g, "&lt;")
.replace(/>/g, "&gt;")
.replace(/"/g, "&quot;");
}

const rows = runtimes
// intentional whitespace so output is human readable
.map((r) => ` <tr>
<td>${escapeHtml(r.organization)}</td>
<td>${escapeHtml(r.name)}</td>
<td><code>${escapeHtml(r.key)}</code></td>
<td>${escapeHtml(r.description)}</td>
<td>${r.website ? `<a href="${escapeHtml(r.website)}">Website</a>` : "-"}</td>
<td>${r.repository ? `<a href="${escapeHtml(r.repository)}">Repository</a>` : "-"}</td>
</tr>`
)
.join("\n");
const injected = spec.replace(" <!-- RUNTIME_KEYS_ROWS -->", rows);

writeFileSync(outPath, injected, "utf8");
Loading