Skip to content
Merged
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
7 changes: 7 additions & 0 deletions .changeset/violet-buckets-run.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
"hyperbook": patch
"@hyperbook/markdown": patch
"hyperbook-studio": patch
---

Update emoji shortcodes.
1 change: 0 additions & 1 deletion packages/hyperbook/dev.ts
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,6 @@ socket.addEventListener("message", (event) => {
try {
// Try to read the given resource into a Buffer.
pathname = decodeURIComponent(pathname);
console.log(pathname);
let resourcePath = path.join(outDir, pathname);
let responseBody: Buffer;
responseBody = await fs.promises
Expand Down
5 changes: 3 additions & 2 deletions packages/markdown/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,9 @@
"version": "pnpm build",
"lint": "tsc --noEmit",
"dev": "node devWatcher.mjs",
"dev:build": "node devBuild.mjs && node postbuild.mjs",
"dev:build": "node prebuild.mjs && node devBuild.mjs && node postbuild.mjs",
"test": "vitest",
"build": "rimraf dist && pnpm build:pkg && pnpm build:types && node postbuild.mjs",
"build": "rimraf dist && node prebuild.mjs && pnpm build:pkg && pnpm build:types && node postbuild.mjs",
"build:pkg": "node ../../scripts/build.mjs && ncp assets dist/assets",
"build:types": "tsc --project tsconfig.build.json --declaration --emitDeclarationOnly"
},
Expand Down Expand Up @@ -94,6 +94,7 @@
"lunr-languages": "^1.14.0",
"mermaid": "11.6.0",
"ncp": "^2.0.0",
"node-fetch": "^3.3.2",
"p5": "^2.0.1",
"scratchblocks": "^3.6.4",
"vfile": "^6.0.3",
Expand Down
119 changes: 119 additions & 0 deletions packages/markdown/prebuild.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
// scripts/build-emoji-json.ts
import fs from "fs";
import path from "path";
import fetch from "node-fetch";

async function buildEmojiJson() {
const res = await fetch("https://api.github.com/emojis");
const json = await res.json();
const emojiMap = {};

for (const [name, url] of Object.entries(json)) {
const match = url.match(/unicode\/([a-f0-9\-]+)\.png/);
if (match) {
const codepoints = match[1]
.split("-")
.map((cp) => String.fromCodePoint(parseInt(cp, 16)))
.join("\u200D");
emojiMap[name] = codepoints;
}
}

const outputPath = path.join("src/github-emojis.json");
fs.writeFileSync(outputPath, JSON.stringify(emojiMap, null, 2), "utf8");
console.log(
`✅ Saved ${Object.keys(emojiMap).length} emojis to ${outputPath}`,
);

return emojiMap;
}

async function updateDocs(emojiMap) {
const enBase = `---
name: Emoji
permaid: emoji
---

# Emoji

Just like in most chat apps you can insert an emoji by using its name.

\`\`\`md
:smiley: :apple: :penguin:
\`\`\`

:smiley: :apple: :penguin:
`;

const deBase = `---
name: Emoji
permaid: emoji
---

# Emoji

Wie in den meisten Chat-Apps kannst du Emojis durch Eingabe ihres Namens einfügen.

\`\`\`md
:smiley: :apple: :penguin:
\`\`\`

:smiley: :apple: :penguin:
`;

const enHeader = `# GitHub Emoji Cheat Sheet

This file lists all supported GitHub-style emoji shortcodes and their corresponding Unicode characters.

| Emoji | Shortcode |
|:------|:----------|
`;

const deHeader = `# GitHub Emoji Cheat Sheet
Diese Datei listet alle unterstützten GitHub-Emoji-Kürzel und ihre entsprechenden Unicode-Zeichen auf.

| Emoji | Shortcode
|:------|:----------|
`;

const rows = Object.entries(emojiMap)
.sort(([a], [b]) => a.localeCompare(b))
.map(([name, emoji]) => `| ${emoji} | \`:${name}:\` |`)
.join("\n");

fs.writeFileSync(
path.join(
process.cwd(),
"..",
"..",
"website",
"en",
"book",
"elements",
"emoji.md",
),
enBase + "\n" + enHeader + rows + "\n",
"utf8",
);

fs.writeFileSync(
path.join(
process.cwd(),
"..",
"..",
"website",
"de",
"book",
"elements",
"emoji.md",
),
deBase + "\n" + deHeader + rows + "\n",
"utf8",
);
}

buildEmojiJson()
.catch((err) => {
console.error("❌ Failed to fetch and build emoji map", err);
})
.then(updateDocs);
Loading