create-refrakt 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/bin.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=bin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.d.ts","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":""}
package/dist/bin.js ADDED
@@ -0,0 +1,69 @@
1
+ #!/usr/bin/env node
2
+ import { scaffold } from './scaffold.js';
3
+ import * as path from 'node:path';
4
+ const args = process.argv.slice(2);
5
+ let projectName;
6
+ let theme = '@refrakt-md/theme-lumina';
7
+ for (let i = 0; i < args.length; i++) {
8
+ const arg = args[i];
9
+ if (arg === '--theme' || arg === '-t') {
10
+ theme = args[++i];
11
+ if (!theme) {
12
+ console.error('Error: --theme requires a value');
13
+ process.exit(1);
14
+ }
15
+ }
16
+ else if (arg === '--help' || arg === '-h') {
17
+ printUsage();
18
+ process.exit(0);
19
+ }
20
+ else if (arg.startsWith('-')) {
21
+ console.error(`Error: Unknown flag "${arg}"\n`);
22
+ printUsage();
23
+ process.exit(1);
24
+ }
25
+ else if (!projectName) {
26
+ projectName = arg;
27
+ }
28
+ else {
29
+ console.error(`Error: Unexpected argument "${arg}"\n`);
30
+ printUsage();
31
+ process.exit(1);
32
+ }
33
+ }
34
+ if (!projectName) {
35
+ console.error('Error: Missing project name\n');
36
+ printUsage();
37
+ process.exit(1);
38
+ }
39
+ function printUsage() {
40
+ console.log(`
41
+ Usage: create-refrakt <project-name> [options]
42
+
43
+ Options:
44
+ --theme, -t <package> Theme package to use (default: @refrakt-md/theme-lumina)
45
+ --help, -h Show this help message
46
+
47
+ Example:
48
+ npx create-refrakt my-site
49
+ npx create-refrakt my-site --theme @refrakt-md/theme-aurora
50
+ `);
51
+ }
52
+ const targetDir = path.resolve(process.cwd(), projectName);
53
+ try {
54
+ scaffold({ projectName, targetDir, theme });
55
+ }
56
+ catch (err) {
57
+ console.error(`\nError: ${err.message}`);
58
+ process.exit(1);
59
+ }
60
+ console.log(`
61
+ Done! Your refrakt.md site is ready.
62
+
63
+ Next steps:
64
+
65
+ cd ${projectName}
66
+ npm install
67
+ npm run dev
68
+ `);
69
+ //# sourceMappingURL=bin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAEnC,IAAI,WAA+B,CAAC;AACpC,IAAI,KAAK,GAAG,0BAA0B,CAAC;AAEvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;IACtC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACvC,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAClB,IAAI,CAAC,KAAK,EAAE,CAAC;YACZ,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;YACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACF,CAAC;SAAM,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QAC7C,UAAU,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;SAAM,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAChC,OAAO,CAAC,KAAK,CAAC,wBAAwB,GAAG,KAAK,CAAC,CAAC;QAChD,UAAU,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;SAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QACzB,WAAW,GAAG,GAAG,CAAC;IACnB,CAAC;SAAM,CAAC;QACP,OAAO,CAAC,KAAK,CAAC,+BAA+B,GAAG,KAAK,CAAC,CAAC;QACvD,UAAU,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;AACF,CAAC;AAED,IAAI,CAAC,WAAW,EAAE,CAAC;IAClB,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;IAC/C,UAAU,EAAE,CAAC;IACb,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjB,CAAC;AAED,SAAS,UAAU;IAClB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;CAUZ,CAAC,CAAC;AACH,CAAC;AAED,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,WAAW,CAAC,CAAC;AAE3D,IAAI,CAAC;IACJ,QAAQ,CAAC,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;AAC7C,CAAC;AAAC,OAAO,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,KAAK,CAAC,YAAa,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjB,CAAC;AAED,OAAO,CAAC,GAAG,CAAC;;;;;OAKL,WAAW;;;CAGjB,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ export interface ScaffoldOptions {
2
+ projectName: string;
3
+ targetDir: string;
4
+ theme: string;
5
+ }
6
+ export declare function scaffold(options: ScaffoldOptions): void;
7
+ //# sourceMappingURL=scaffold.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,eAAe;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,CAoDvD"}
@@ -0,0 +1,96 @@
1
+ import { mkdirSync, cpSync, writeFileSync, existsSync, renameSync } from 'node:fs';
2
+ import * as path from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
4
+ export function scaffold(options) {
5
+ const { projectName, targetDir, theme } = options;
6
+ if (existsSync(targetDir)) {
7
+ throw new Error(`Directory "${targetDir}" already exists`);
8
+ }
9
+ mkdirSync(targetDir, { recursive: true });
10
+ // Copy template directory recursively
11
+ const templateDir = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..', 'template');
12
+ if (!existsSync(templateDir)) {
13
+ throw new Error(`Template directory not found at ${templateDir}. ` +
14
+ `This is a bug in create-refrakt — please report it.`);
15
+ }
16
+ cpSync(templateDir, targetDir, { recursive: true });
17
+ // Rename dotfiles (npm strips .gitignore from published tarballs)
18
+ const dotfileRenames = {
19
+ '_gitignore': '.gitignore',
20
+ '_npmrc': '.npmrc',
21
+ };
22
+ for (const [from, to] of Object.entries(dotfileRenames)) {
23
+ const srcPath = path.join(targetDir, from);
24
+ if (existsSync(srcPath)) {
25
+ renameSync(srcPath, path.join(targetDir, to));
26
+ }
27
+ }
28
+ // Generate interpolated files
29
+ writeFileSync(path.join(targetDir, 'package.json'), generatePackageJson(projectName, theme));
30
+ writeFileSync(path.join(targetDir, 'refrakt.config.json'), generateRefraktConfig(theme));
31
+ writeFileSync(path.join(targetDir, 'README.md'), generateReadme(projectName));
32
+ }
33
+ function generatePackageJson(projectName, theme) {
34
+ const pkg = {
35
+ name: projectName,
36
+ private: true,
37
+ version: '0.0.1',
38
+ type: 'module',
39
+ scripts: {
40
+ dev: 'vite dev',
41
+ build: 'vite build',
42
+ preview: 'vite preview',
43
+ prepare: "svelte-kit sync || echo ''",
44
+ check: 'svelte-kit sync && svelte-check --tsconfig ./tsconfig.json',
45
+ },
46
+ dependencies: {
47
+ '@refrakt-md/content': '^0.1.0',
48
+ '@refrakt-md/runes': '^0.1.0',
49
+ '@refrakt-md/svelte': '^0.1.0',
50
+ '@refrakt-md/sveltekit': '^0.1.0',
51
+ [theme]: '^0.1.0',
52
+ '@markdoc/markdoc': '^0.4.0',
53
+ },
54
+ devDependencies: {
55
+ '@sveltejs/adapter-static': '^3.0.0',
56
+ '@sveltejs/kit': '^2.50.0',
57
+ '@sveltejs/vite-plugin-svelte': '^6.0.0',
58
+ '@tailwindcss/vite': '^4.0.0',
59
+ 'svelte': '^5.0.0',
60
+ 'svelte-check': '^4.0.0',
61
+ 'tailwindcss': '^4.0.0',
62
+ 'typescript': '^5.4.0',
63
+ 'vite': '^7.0.0',
64
+ },
65
+ };
66
+ return JSON.stringify(pkg, null, '\t') + '\n';
67
+ }
68
+ function generateRefraktConfig(theme) {
69
+ const config = {
70
+ contentDir: './content',
71
+ theme,
72
+ target: 'sveltekit',
73
+ };
74
+ return JSON.stringify(config, null, '\t') + '\n';
75
+ }
76
+ function generateReadme(projectName) {
77
+ return `# ${projectName}
78
+
79
+ A [refrakt.md](https://github.com/bjornandersson/refrakt.md) site.
80
+
81
+ ## Development
82
+
83
+ \`\`\`sh
84
+ npm install
85
+ npm run dev
86
+ \`\`\`
87
+
88
+ ## Building
89
+
90
+ \`\`\`sh
91
+ npm run build
92
+ npm run preview
93
+ \`\`\`
94
+ `;
95
+ }
96
+ //# sourceMappingURL=scaffold.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,26 @@
1
+ {
2
+ "name": "create-refrakt",
3
+ "description": "Scaffold a new refrakt.md project",
4
+ "version": "0.1.0",
5
+ "type": "module",
6
+ "license": "MIT",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "https://github.com/refrakt-md/refrakt.git",
10
+ "directory": "packages/create-refrakt"
11
+ },
12
+ "bugs": "https://github.com/refrakt-md/refrakt/issues",
13
+ "homepage": "https://github.com/refrakt-md/refrakt",
14
+ "bin": {
15
+ "create-refrakt": "./dist/bin.js"
16
+ },
17
+ "main": "dist/scaffold.js",
18
+ "types": "dist/scaffold.d.ts",
19
+ "files": [
20
+ "dist",
21
+ "template"
22
+ ],
23
+ "scripts": {
24
+ "build": "tsc"
25
+ }
26
+ }
@@ -0,0 +1,23 @@
1
+ node_modules
2
+
3
+ # Output
4
+ .output
5
+ .vercel
6
+ .netlify
7
+ .wrangler
8
+ /.svelte-kit
9
+ /build
10
+
11
+ # OS
12
+ .DS_Store
13
+ Thumbs.db
14
+
15
+ # Env
16
+ .env
17
+ .env.*
18
+ !.env.example
19
+ !.env.test
20
+
21
+ # Vite
22
+ vite.config.js.timestamp-*
23
+ vite.config.ts.timestamp-*
@@ -0,0 +1 @@
1
+ engine-strict=true
@@ -0,0 +1,14 @@
1
+ {% layout %}
2
+ {% region name="header" %}
3
+ # My Site
4
+ {% /region %}
5
+
6
+ {% region name="nav" %}
7
+ {% nav %}
8
+ ## Docs
9
+
10
+ - getting-started
11
+
12
+ {% /nav %}
13
+ {% /region %}
14
+ {% /layout %}
@@ -0,0 +1,41 @@
1
+ ---
2
+ title: Getting Started
3
+ description: Learn how to work with your refrakt.md site
4
+ ---
5
+
6
+ # Getting Started
7
+
8
+ This is your first documentation page. You can find this file at `content/docs/getting-started.md`.
9
+
10
+ ## Project Structure
11
+
12
+ Your site has three key directories:
13
+
14
+ - `content/` — Markdown files that make up your pages
15
+ - `src/` — SvelteKit application shell (rarely needs editing)
16
+ - `static/` — Static assets served as-is
17
+
18
+ ## Writing Content
19
+
20
+ Every Markdown file in `content/` becomes a page. Add frontmatter at the top for metadata:
21
+
22
+ ```markdown
23
+ ---
24
+ title: Page Title
25
+ description: A brief description
26
+ ---
27
+ ```
28
+
29
+ ## Using Runes
30
+
31
+ Runes are Markdoc tags that give your Markdown semantic meaning:
32
+
33
+ {% hint type="note" %}
34
+ This callout is created with the `hint` rune. Try changing the `type` attribute to `warning`, `caution`, or `check`.
35
+ {% /hint %}
36
+
37
+ ## Next Steps
38
+
39
+ - Add more pages by creating `.md` files in `content/`
40
+ - Edit `content/_layout.md` to customize your site's header and navigation
41
+ - Explore the available runes in the refrakt.md documentation
@@ -0,0 +1,18 @@
1
+ ---
2
+ title: Welcome
3
+ description: A new refrakt.md site
4
+ ---
5
+
6
+ {% cta %}
7
+
8
+ # Welcome to your site
9
+
10
+ This site is built with refrakt.md — a content framework that extends Markdown with semantic runes.
11
+
12
+ - [Get Started](/docs/getting-started)
13
+
14
+ {% /cta %}
15
+
16
+ {% hint type="note" %}
17
+ Edit the files in `content/` to start building your site. Changes will hot-reload in development mode.
18
+ {% /hint %}
@@ -0,0 +1,15 @@
1
+ /// <reference types="@refrakt-md/sveltekit/virtual" />
2
+
3
+ // See https://svelte.dev/docs/kit/types#app.d.ts
4
+ // for information about these interfaces
5
+ declare global {
6
+ namespace App {
7
+ // interface Error {}
8
+ // interface Locals {}
9
+ // interface PageData {}
10
+ // interface PageState {}
11
+ // interface Platform {}
12
+ }
13
+ }
14
+
15
+ export {};
@@ -0,0 +1,11 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
6
+ %sveltekit.head%
7
+ </head>
8
+ <body data-sveltekit-preload-data="hover">
9
+ <div style="display: contents">%sveltekit.body%</div>
10
+ </body>
11
+ </html>
@@ -0,0 +1 @@
1
+ // place files you want to import through the `$lib` alias in this folder.
@@ -0,0 +1,16 @@
1
+ import { loadContent } from '@refrakt-md/content';
2
+ import * as path from 'node:path';
3
+
4
+ const contentDir = path.resolve('content');
5
+
6
+ export async function load() {
7
+ const site = await loadContent(contentDir);
8
+
9
+ return {
10
+ pages: site.pages.map(p => ({
11
+ url: p.route.url,
12
+ title: p.frontmatter.title ?? '',
13
+ draft: p.route.draft,
14
+ })),
15
+ };
16
+ }
@@ -0,0 +1,17 @@
1
+ <script lang="ts">
2
+ import 'virtual:refrakt/tokens';
3
+
4
+ let { children } = $props();
5
+ </script>
6
+
7
+ <div class="site-layout">
8
+ {@render children()}
9
+ </div>
10
+
11
+ <style>
12
+ .site-layout {
13
+ max-width: 72rem;
14
+ margin: 0 auto;
15
+ padding: 0 1.5rem;
16
+ }
17
+ </style>
@@ -0,0 +1,41 @@
1
+ import { loadContent } from '@refrakt-md/content';
2
+ import { serialize, serializeTree } from '@refrakt-md/svelte';
3
+ import { error } from '@sveltejs/kit';
4
+ import * as path from 'node:path';
5
+ import type { PageServerLoad } from './$types';
6
+
7
+ const contentDir = path.resolve('content');
8
+
9
+ export const prerender = true;
10
+
11
+ export const load: PageServerLoad = async ({ params }) => {
12
+ const site = await loadContent(contentDir);
13
+ const slug = params.slug || '';
14
+ const url = '/' + slug;
15
+
16
+ const page = site.pages.find(p => p.route.url === url);
17
+
18
+ if (!page || page.route.draft) {
19
+ error(404, 'Page not found');
20
+ }
21
+
22
+ return {
23
+ title: page.frontmatter.title ?? '',
24
+ description: page.frontmatter.description ?? '',
25
+ renderable: serializeTree(page.renderable),
26
+ regions: Object.fromEntries(
27
+ [...page.layout.regions.entries()].map(([name, region]) => [
28
+ name,
29
+ { name: region.name, mode: region.mode, content: region.content.map(serialize) }
30
+ ])
31
+ ),
32
+ url,
33
+ };
34
+ };
35
+
36
+ export async function entries() {
37
+ const site = await loadContent(contentDir);
38
+ return site.pages
39
+ .filter(p => !p.route.draft)
40
+ .map(p => ({ slug: p.route.url === '/' ? '' : p.route.url.slice(1) }));
41
+ }
@@ -0,0 +1,18 @@
1
+ <script lang="ts">
2
+ import { ThemeShell } from '@refrakt-md/svelte';
3
+ import { theme } from 'virtual:refrakt/theme';
4
+
5
+ let { data } = $props();
6
+ </script>
7
+
8
+ <ThemeShell
9
+ {theme}
10
+ page={{
11
+ title: data.title,
12
+ description: data.description,
13
+ regions: data.regions,
14
+ renderable: data.renderable,
15
+ pages: data.pages,
16
+ url: data.url,
17
+ }}
18
+ />
@@ -0,0 +1,3 @@
1
+ # allow crawling everything by default
2
+ User-agent: *
3
+ Disallow:
@@ -0,0 +1,16 @@
1
+ import adapter from '@sveltejs/adapter-static';
2
+
3
+ /** @type {import('@sveltejs/kit').Config} */
4
+ const config = {
5
+ kit: {
6
+ adapter: adapter({
7
+ pages: 'build',
8
+ assets: 'build',
9
+ fallback: undefined,
10
+ precompress: false,
11
+ strict: true
12
+ })
13
+ }
14
+ };
15
+
16
+ export default config;
@@ -0,0 +1,15 @@
1
+ {
2
+ "extends": "./.svelte-kit/tsconfig.json",
3
+ "compilerOptions": {
4
+ "rewriteRelativeImportExtensions": true,
5
+ "allowJs": true,
6
+ "checkJs": true,
7
+ "esModuleInterop": true,
8
+ "forceConsistentCasingInFileNames": true,
9
+ "resolveJsonModule": true,
10
+ "skipLibCheck": true,
11
+ "sourceMap": true,
12
+ "strict": true,
13
+ "moduleResolution": "bundler"
14
+ }
15
+ }
@@ -0,0 +1,8 @@
1
+ import { sveltekit } from '@sveltejs/kit/vite';
2
+ import { refrakt } from '@refrakt-md/sveltekit';
3
+ import tailwindcss from '@tailwindcss/vite';
4
+ import { defineConfig } from 'vite';
5
+
6
+ export default defineConfig({
7
+ plugins: [tailwindcss(), sveltekit(), refrakt()],
8
+ });