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 +3 -0
- package/dist/bin.d.ts.map +1 -0
- package/dist/bin.js +69 -0
- package/dist/bin.js.map +1 -0
- package/dist/scaffold.d.ts +7 -0
- package/dist/scaffold.d.ts.map +1 -0
- package/dist/scaffold.js +96 -0
- package/dist/scaffold.js.map +1 -0
- package/package.json +26 -0
- package/template/_gitignore +23 -0
- package/template/_npmrc +1 -0
- package/template/content/_layout.md +14 -0
- package/template/content/docs/getting-started.md +41 -0
- package/template/content/index.md +18 -0
- package/template/src/app.d.ts +15 -0
- package/template/src/app.html +11 -0
- package/template/src/lib/index.ts +1 -0
- package/template/src/routes/+layout.server.ts +16 -0
- package/template/src/routes/+layout.svelte +17 -0
- package/template/src/routes/[...slug]/+page.server.ts +41 -0
- package/template/src/routes/[...slug]/+page.svelte +18 -0
- package/template/static/robots.txt +3 -0
- package/template/svelte.config.js +16 -0
- package/template/tsconfig.json +15 -0
- package/template/vite.config.ts +8 -0
package/dist/bin.d.ts
ADDED
|
@@ -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
|
package/dist/bin.js.map
ADDED
|
@@ -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 @@
|
|
|
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"}
|
package/dist/scaffold.js
ADDED
|
@@ -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":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnF,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAQzC,MAAM,UAAU,QAAQ,CAAC,OAAwB;IAChD,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IAElD,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,cAAc,SAAS,kBAAkB,CAAC,CAAC;IAC5D,CAAC;IAED,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE1C,sCAAsC;IACtC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAC/B,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAC5C,IAAI,EACJ,UAAU,CACV,CAAC;IAEF,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CACd,mCAAmC,WAAW,IAAI;YAClD,qDAAqD,CACrD,CAAC;IACH,CAAC;IAED,MAAM,CAAC,WAAW,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEpD,kEAAkE;IAClE,MAAM,cAAc,GAA2B;QAC9C,YAAY,EAAE,YAAY;QAC1B,QAAQ,EAAE,QAAQ;KAClB,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;QACzD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAC3C,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACzB,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC;QAC/C,CAAC;IACF,CAAC;IAED,8BAA8B;IAC9B,aAAa,CACZ,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,EACpC,mBAAmB,CAAC,WAAW,EAAE,KAAK,CAAC,CACvC,CAAC;IAEF,aAAa,CACZ,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,qBAAqB,CAAC,EAC3C,qBAAqB,CAAC,KAAK,CAAC,CAC5B,CAAC;IAEF,aAAa,CACZ,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,EACjC,cAAc,CAAC,WAAW,CAAC,CAC3B,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,WAAmB,EAAE,KAAa;IAC9D,MAAM,GAAG,GAAG;QACX,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE;YACR,GAAG,EAAE,UAAU;YACf,KAAK,EAAE,YAAY;YACnB,OAAO,EAAE,cAAc;YACvB,OAAO,EAAE,4BAA4B;YACrC,KAAK,EAAE,4DAA4D;SACnE;QACD,YAAY,EAAE;YACb,qBAAqB,EAAE,QAAQ;YAC/B,mBAAmB,EAAE,QAAQ;YAC7B,oBAAoB,EAAE,QAAQ;YAC9B,uBAAuB,EAAE,QAAQ;YACjC,CAAC,KAAK,CAAC,EAAE,QAAQ;YACjB,kBAAkB,EAAE,QAAQ;SAC5B;QACD,eAAe,EAAE;YAChB,0BAA0B,EAAE,QAAQ;YACpC,eAAe,EAAE,SAAS;YAC1B,8BAA8B,EAAE,QAAQ;YACxC,mBAAmB,EAAE,QAAQ;YAC7B,QAAQ,EAAE,QAAQ;YAClB,cAAc,EAAE,QAAQ;YACxB,aAAa,EAAE,QAAQ;YACvB,YAAY,EAAE,QAAQ;YACtB,MAAM,EAAE,QAAQ;SAChB;KACD,CAAC;IACF,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC;AAC/C,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAa;IAC3C,MAAM,MAAM,GAAG;QACd,UAAU,EAAE,WAAW;QACvB,KAAK;QACL,MAAM,EAAE,WAAW;KACnB,CAAC;IACF,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC;AAClD,CAAC;AAED,SAAS,cAAc,CAAC,WAAmB;IAC1C,OAAO,KAAK,WAAW;;;;;;;;;;;;;;;;;CAiBvB,CAAC;AACF,CAAC"}
|
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-*
|
package/template/_npmrc
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
engine-strict=true
|
|
@@ -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,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
|
+
});
|