@waldjs/cli 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.
Files changed (67) hide show
  1. package/LICENSE +21 -0
  2. package/bin/wald.js +34 -0
  3. package/dist/adapters.d.ts +21 -0
  4. package/dist/adapters.d.ts.map +1 -0
  5. package/dist/adapters.js +67 -0
  6. package/dist/adapters.js.map +1 -0
  7. package/dist/canopy-build.d.ts +5 -0
  8. package/dist/canopy-build.d.ts.map +1 -0
  9. package/dist/canopy-build.js +41 -0
  10. package/dist/canopy-build.js.map +1 -0
  11. package/dist/canopy-scan.d.ts +7 -0
  12. package/dist/canopy-scan.d.ts.map +1 -0
  13. package/dist/canopy-scan.js +70 -0
  14. package/dist/canopy-scan.js.map +1 -0
  15. package/dist/checker.d.ts +8 -0
  16. package/dist/checker.d.ts.map +1 -0
  17. package/dist/checker.js +175 -0
  18. package/dist/checker.js.map +1 -0
  19. package/dist/cli.d.ts +2 -0
  20. package/dist/cli.d.ts.map +1 -0
  21. package/dist/cli.js +22 -0
  22. package/dist/cli.js.map +1 -0
  23. package/dist/commands/build.d.ts +26 -0
  24. package/dist/commands/build.d.ts.map +1 -0
  25. package/dist/commands/build.js +250 -0
  26. package/dist/commands/build.js.map +1 -0
  27. package/dist/commands/check.d.ts +5 -0
  28. package/dist/commands/check.d.ts.map +1 -0
  29. package/dist/commands/check.js +46 -0
  30. package/dist/commands/check.js.map +1 -0
  31. package/dist/commands/grow.d.ts +15 -0
  32. package/dist/commands/grow.d.ts.map +1 -0
  33. package/dist/commands/grow.js +104 -0
  34. package/dist/commands/grow.js.map +1 -0
  35. package/dist/commands/plant.d.ts +9 -0
  36. package/dist/commands/plant.d.ts.map +1 -0
  37. package/dist/commands/plant.js +132 -0
  38. package/dist/commands/plant.js.map +1 -0
  39. package/dist/commands/preview.d.ts +4 -0
  40. package/dist/commands/preview.d.ts.map +1 -0
  41. package/dist/commands/preview.js +25 -0
  42. package/dist/commands/preview.js.map +1 -0
  43. package/dist/config.d.ts +11 -0
  44. package/dist/config.d.ts.map +1 -0
  45. package/dist/config.js +26 -0
  46. package/dist/config.js.map +1 -0
  47. package/dist/growing-tree.d.ts +2 -0
  48. package/dist/growing-tree.d.ts.map +1 -0
  49. package/dist/growing-tree.js +202 -0
  50. package/dist/growing-tree.js.map +1 -0
  51. package/dist/index.d.ts +5 -0
  52. package/dist/index.d.ts.map +1 -0
  53. package/dist/index.js +3 -0
  54. package/dist/index.js.map +1 -0
  55. package/dist/router/index.d.ts +11 -0
  56. package/dist/router/index.d.ts.map +1 -0
  57. package/dist/router/index.js +66 -0
  58. package/dist/router/index.js.map +1 -0
  59. package/dist/shell.d.ts +4 -0
  60. package/dist/shell.d.ts.map +1 -0
  61. package/dist/shell.js +39 -0
  62. package/dist/shell.js.map +1 -0
  63. package/dist/vite-plugin.d.ts +3 -0
  64. package/dist/vite-plugin.d.ts.map +1 -0
  65. package/dist/vite-plugin.js +75 -0
  66. package/dist/vite-plugin.js.map +1 -0
  67. package/package.json +46 -0
@@ -0,0 +1,25 @@
1
+ import { createServer } from 'node:http';
2
+ import { join } from 'node:path';
3
+ import sirv from 'sirv';
4
+ import { defineCommand } from 'citty';
5
+ import ora from 'ora';
6
+ export function startPreview(distDir, port) {
7
+ return new Promise((resolve) => {
8
+ const serve = sirv(distDir, { extensions: ['html'] });
9
+ const server = createServer(serve);
10
+ server.listen(port, () => resolve(server));
11
+ });
12
+ }
13
+ export const previewCommand = defineCommand({
14
+ meta: { description: 'Preview the production build locally' },
15
+ async run() {
16
+ const distDir = join(process.cwd(), 'dist');
17
+ const port = 4321;
18
+ const spinner = ora('Starting preview server...').start();
19
+ const server = await startPreview(distDir, port);
20
+ spinner.succeed(`Preview running at http://localhost:${port}`);
21
+ console.log('\n Press Ctrl+C to stop');
22
+ process.on('SIGINT', () => { server.close(); process.exit(0); });
23
+ },
24
+ });
25
+ //# sourceMappingURL=preview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preview.js","sourceRoot":"","sources":["../../src/commands/preview.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AACrC,OAAO,GAAG,MAAM,KAAK,CAAA;AAErB,MAAM,UAAU,YAAY,CAAC,OAAe,EAAE,IAAY;IACxD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QACrD,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAA;QAClC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAA;IAC5C,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,aAAa,CAAC;IAC1C,IAAI,EAAE,EAAE,WAAW,EAAE,sCAAsC,EAAE;IAC7D,KAAK,CAAC,GAAG;QACP,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAA;QAC3C,MAAM,IAAI,GAAG,IAAI,CAAA;QACjB,MAAM,OAAO,GAAG,GAAG,CAAC,4BAA4B,CAAC,CAAC,KAAK,EAAE,CAAA;QACzD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;QAChD,OAAO,CAAC,OAAO,CAAC,uCAAuC,IAAI,EAAE,CAAC,CAAA;QAC9D,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAA;QACvC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA,CAAC,CAAC,CAAC,CAAA;IACjE,CAAC;CACF,CAAC,CAAA"}
@@ -0,0 +1,11 @@
1
+ import { type UserConfig } from 'vite';
2
+ import { type WaldAdapter } from './adapters.js';
3
+ export interface WaldConfig {
4
+ outDir?: string;
5
+ base?: string;
6
+ vite?: UserConfig;
7
+ adapter?: WaldAdapter;
8
+ }
9
+ export declare function defineConfig(config: WaldConfig): WaldConfig;
10
+ export declare function loadWaldConfig(root?: string): Promise<Required<WaldConfig>>;
11
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,OAAO,EAAsB,KAAK,UAAU,EAAE,MAAM,MAAM,CAAA;AAC1D,OAAO,EAAiB,KAAK,WAAW,EAAE,MAAM,eAAe,CAAA;AAE/D,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,UAAU,CAAA;IACjB,OAAO,CAAC,EAAE,WAAW,CAAA;CACtB;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,CAE3D;AASD,wBAAsB,cAAc,CAAC,IAAI,SAAgB,GAAG,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAaxF"}
package/dist/config.js ADDED
@@ -0,0 +1,26 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import { loadConfigFromFile } from 'vite';
4
+ import { staticAdapter } from './adapters.js';
5
+ export function defineConfig(config) {
6
+ return config;
7
+ }
8
+ const DEFAULTS = {
9
+ outDir: 'dist',
10
+ base: '/',
11
+ vite: {},
12
+ adapter: staticAdapter(),
13
+ };
14
+ export async function loadWaldConfig(root = process.cwd()) {
15
+ const configFile = join(root, 'wald.config.ts');
16
+ if (!existsSync(configFile))
17
+ return { ...DEFAULTS };
18
+ const result = await loadConfigFromFile({ command: 'build', mode: 'production' }, configFile, root);
19
+ if (!result)
20
+ return { ...DEFAULTS };
21
+ const merged = { ...DEFAULTS, ...result.config };
22
+ if (merged.adapter?.outDir)
23
+ merged.outDir = merged.adapter.outDir;
24
+ return merged;
25
+ }
26
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,kBAAkB,EAAmB,MAAM,MAAM,CAAA;AAC1D,OAAO,EAAE,aAAa,EAAoB,MAAM,eAAe,CAAA;AAS/D,MAAM,UAAU,YAAY,CAAC,MAAkB;IAC7C,OAAO,MAAM,CAAA;AACf,CAAC;AAED,MAAM,QAAQ,GAAyB;IACrC,MAAM,EAAE,MAAM;IACd,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,EAAE;IACR,OAAO,EAAE,aAAa,EAAE;CACzB,CAAA;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE;IACvD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAA;IAC/C,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,EAAE,GAAG,QAAQ,EAAE,CAAA;IAEnD,MAAM,MAAM,GAAG,MAAM,kBAAkB,CACrC,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,EACxC,UAAU,EACV,IAAI,CACL,CAAA;IACD,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,GAAG,QAAQ,EAAE,CAAA;IACnC,MAAM,MAAM,GAAG,EAAE,GAAG,QAAQ,EAAE,GAAI,MAAM,CAAC,MAAqB,EAAE,CAAA;IAChE,IAAI,MAAM,CAAC,OAAO,EAAE,MAAM;QAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAA;IACjE,OAAO,MAAM,CAAA;AACf,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function withGrowingTree<T>(label: string, task: Promise<T>): Promise<T>;
2
+ //# sourceMappingURL=growing-tree.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"growing-tree.d.ts","sourceRoot":"","sources":["../src/growing-tree.ts"],"names":[],"mappings":"AA8JA,wBAAsB,eAAe,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAyDpF"}
@@ -0,0 +1,202 @@
1
+ const GREEN = '\x1b[32m';
2
+ const TRUNK_COLOR = '\x1b[33m';
3
+ const DIM = '\x1b[2m';
4
+ const STAR_COLOR = '\x1b[2;37m';
5
+ const MOON_COLOR = '\x1b[97m';
6
+ const RESET = '\x1b[0m';
7
+ const HIDE_CURSOR = '\x1b[?25l';
8
+ const SHOW_CURSOR = '\x1b[?25h';
9
+ const CLEAR_LINE = '\x1b[2K';
10
+ const DEER_COLOR = '\x1b[97m';
11
+ const CANVAS_WIDTH = 70;
12
+ const CENTER_COL = 35;
13
+ const MAX_TIERS = 5;
14
+ const SIDE_TREES = [
15
+ { col: 26, revealAt: 2, tiers: 2 },
16
+ { col: 44, revealAt: 2, tiers: 2 },
17
+ { col: 17, revealAt: 4, tiers: 3 },
18
+ { col: 53, revealAt: 4, tiers: 3 },
19
+ ];
20
+ const CANOPY_ROWS = MAX_TIERS;
21
+ const TOTAL_LINES = CANOPY_ROWS + 15;
22
+ const SPINNER_FRAMES = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];
23
+ const FRAME_MS = 140;
24
+ const MIN_VISIBLE_MS = FRAME_MS * (MAX_TIERS + 6);
25
+ const STORY_BEATS = [
26
+ 'Planting a seed…',
27
+ 'Roots taking hold…',
28
+ 'A sapling reaches up…',
29
+ 'Branches spreading wide…',
30
+ 'The forest is waking up…',
31
+ ];
32
+ const STARS = [
33
+ { row: 0, col: 1 },
34
+ { row: 0, col: 6 },
35
+ { row: 0, col: 26 },
36
+ { row: 1, col: 8 },
37
+ { row: 1, col: 25 },
38
+ ];
39
+ const MOON = { row: 0, col: 68 };
40
+ function sleep(ms) {
41
+ return new Promise(resolve => setTimeout(resolve, ms));
42
+ }
43
+ function blankRow(bg) {
44
+ return Array.from({ length: CANVAS_WIDTH }, () => ({ ch: bg, color: '' }));
45
+ }
46
+ function stamp(row, centerCol, text, color) {
47
+ const startCol = centerCol - Math.floor(text.length / 2);
48
+ for (let i = 0; i < text.length; i++) {
49
+ const col = startCol + i;
50
+ if (col >= 0 && col < CANVAS_WIDTH)
51
+ row[col] = { ch: text[i], color };
52
+ }
53
+ }
54
+ function rowToString(row) {
55
+ return row.map(c => (c.color ? c.color + c.ch + RESET : c.ch)).join('');
56
+ }
57
+ function stampTree(rows, col, totalTiers, grownTiers) {
58
+ for (let t = 1; t <= grownTiers; t++) {
59
+ const row = CANOPY_ROWS - 1 - totalTiers + t;
60
+ if (row >= 0 && row < CANOPY_ROWS)
61
+ stamp(rows[row], col, '*'.repeat(t * 2 - 1), GREEN);
62
+ }
63
+ }
64
+ function buildCanopy(tier) {
65
+ const rows = Array.from({ length: CANOPY_ROWS }, () => blankRow(' '));
66
+ stampTree(rows, CENTER_COL, tier, tier);
67
+ for (const side of SIDE_TREES) {
68
+ if (tier >= side.revealAt)
69
+ stampTree(rows, side.col, side.tiers, side.tiers);
70
+ }
71
+ for (const star of STARS) {
72
+ if (rows[star.row][star.col].ch === ' ')
73
+ rows[star.row][star.col] = { ch: '.', color: STAR_COLOR };
74
+ }
75
+ if (rows[MOON.row][MOON.col].ch === ' ')
76
+ rows[MOON.row][MOON.col] = { ch: 'O', color: MOON_COLOR };
77
+ return rows;
78
+ }
79
+ function trunkRow(tier) {
80
+ const row = blankRow(' ');
81
+ stamp(row, CENTER_COL, '|', TRUNK_COLOR);
82
+ for (const side of SIDE_TREES) {
83
+ if (tier >= side.revealAt)
84
+ stamp(row, side.col, '|', TRUNK_COLOR);
85
+ }
86
+ return row;
87
+ }
88
+ const DEER_FRAMES = [
89
+ [
90
+ ' ,_)/',
91
+ " (-'",
92
+ " .-'\\\\ ",
93
+ " \"'\\\\'\"\"\"\"\"'),",
94
+ ' )/---,(',
95
+ ' / \\\\ / |',
96
+ ],
97
+ [
98
+ ' ,_)/',
99
+ " (-'",
100
+ " .-'\\\\ ",
101
+ " \"'\\\\'\"\"\"\"\"'),",
102
+ ' )/---,(',
103
+ ' \\\\ / \\\\|',
104
+ ],
105
+ ];
106
+ const DEER_WIDTH = Math.max(...DEER_FRAMES.flat().map(row => row.length));
107
+ const DEER_TARGET_COL = CENTER_COL - Math.floor(DEER_WIDTH / 2);
108
+ const DEER_STEP_COLS = 3;
109
+ function deerColForTick(tick) {
110
+ return Math.max(DEER_TARGET_COL, CANVAS_WIDTH - tick * DEER_STEP_COLS);
111
+ }
112
+ function deerRows(leftCol, tick) {
113
+ const isWalking = leftCol > DEER_TARGET_COL;
114
+ const sprites = isWalking ? DEER_FRAMES[tick % DEER_FRAMES.length] : DEER_FRAMES[0];
115
+ return sprites.map(sprite => {
116
+ const row = blankRow(' ');
117
+ for (let i = 0; i < sprite.length; i++) {
118
+ const col = leftCol + i;
119
+ if (col >= 0 && col < CANVAS_WIDTH)
120
+ row[col] = { ch: sprite[i], color: DEER_COLOR };
121
+ }
122
+ return row;
123
+ });
124
+ }
125
+ const WALD_MARK_ROWS = [
126
+ '░██ ░██ ░██ ░██ ░█████ ░██████ ',
127
+ '░██ ░██ ░██ ░██ ░██ ░██ ░██ ',
128
+ '░██ ░██ ░██ ░██████ ░██ ░████████ ░██ ░██ ',
129
+ '░██ ░████ ░██ ░██ ░██ ░██ ░██ ░██ ░████████ ',
130
+ '░██░██ ░██░██ ░███████ ░██ ░██ ░██ ░██ ░██ ░██ ',
131
+ '░████ ░████ ░██ ░██ ░██ ░██ ░███ ░██ ░██ ░██ ░██ ',
132
+ '░███ ░███ ░█████░██ ░██ ░█████░██ ░██████ ░██████ ',
133
+ ];
134
+ function waldMarkRows() {
135
+ return WALD_MARK_ROWS.map(sprite => {
136
+ const row = blankRow(' ');
137
+ stamp(row, CENTER_COL, sprite, DIM);
138
+ return row;
139
+ });
140
+ }
141
+ export async function withGrowingTree(label, task) {
142
+ if (!process.stdout.isTTY) {
143
+ console.log(label);
144
+ return task;
145
+ }
146
+ let tier = 1;
147
+ let spinnerIdx = 0;
148
+ let tick = 0;
149
+ process.stdout.write(HIDE_CURSOR);
150
+ process.stdout.write('\n'.repeat(TOTAL_LINES));
151
+ const draw = () => {
152
+ process.stdout.write(`\x1b[${TOTAL_LINES}A`);
153
+ for (const row of buildCanopy(tier))
154
+ process.stdout.write(CLEAR_LINE + rowToString(row) + '\n');
155
+ process.stdout.write(CLEAR_LINE + rowToString(trunkRow(tier)) + '\n');
156
+ for (const row of deerRows(deerColForTick(tick), tick))
157
+ process.stdout.write(CLEAR_LINE + rowToString(row) + '\n');
158
+ for (const row of waldMarkRows())
159
+ process.stdout.write(CLEAR_LINE + rowToString(row) + '\n');
160
+ const story = STORY_BEATS[Math.min(tier, STORY_BEATS.length) - 1];
161
+ const spinner = tier >= MAX_TIERS ? `${SPINNER_FRAMES[spinnerIdx]} ` : '';
162
+ process.stdout.write(CLEAR_LINE + DIM + spinner + story + ` (${label})` + RESET + '\n');
163
+ };
164
+ draw();
165
+ const interval = setInterval(() => {
166
+ if (tier < MAX_TIERS)
167
+ tier++;
168
+ tick++;
169
+ spinnerIdx = (spinnerIdx + 1) % SPINNER_FRAMES.length;
170
+ draw();
171
+ }, FRAME_MS);
172
+ const finish = () => {
173
+ clearInterval(interval);
174
+ process.stdout.write(`\x1b[${TOTAL_LINES}A`);
175
+ for (const row of buildCanopy(MAX_TIERS))
176
+ process.stdout.write(CLEAR_LINE + rowToString(row) + '\n');
177
+ process.stdout.write(CLEAR_LINE + rowToString(trunkRow(MAX_TIERS)) + '\n');
178
+ for (const row of deerRows(deerColForTick(tick), tick))
179
+ process.stdout.write(CLEAR_LINE + rowToString(row) + '\n');
180
+ for (const row of waldMarkRows())
181
+ process.stdout.write(CLEAR_LINE + rowToString(row) + '\n');
182
+ process.stdout.write(CLEAR_LINE + '\n');
183
+ process.stdout.write(SHOW_CURSOR);
184
+ };
185
+ const started = Date.now();
186
+ try {
187
+ const result = await task;
188
+ const elapsed = Date.now() - started;
189
+ if (elapsed < MIN_VISIBLE_MS)
190
+ await sleep(MIN_VISIBLE_MS - elapsed);
191
+ finish();
192
+ return result;
193
+ }
194
+ catch (e) {
195
+ const elapsed = Date.now() - started;
196
+ if (elapsed < MIN_VISIBLE_MS)
197
+ await sleep(MIN_VISIBLE_MS - elapsed);
198
+ finish();
199
+ throw e;
200
+ }
201
+ }
202
+ //# sourceMappingURL=growing-tree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"growing-tree.js","sourceRoot":"","sources":["../src/growing-tree.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export { defineConfig, loadWaldConfig } from './config.js';
2
+ export type { WaldConfig } from './config.js';
3
+ export { defineAdapter, staticAdapter, netlifyAdapter, cloudflarePagesAdapter, vercelAdapter, } from './adapters.js';
4
+ export type { WaldAdapter, WaldAdapterContext } from './adapters.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC1D,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,EACL,aAAa,EACb,aAAa,EACb,cAAc,EACd,sBAAsB,EACtB,aAAa,GACd,MAAM,eAAe,CAAA;AACtB,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,3 @@
1
+ export { defineConfig, loadWaldConfig } from './config.js';
2
+ export { defineAdapter, staticAdapter, netlifyAdapter, cloudflarePagesAdapter, vercelAdapter, } from './adapters.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAE1D,OAAO,EACL,aAAa,EACb,aAAa,EACb,cAAc,EACd,sBAAsB,EACtB,aAAa,GACd,MAAM,eAAe,CAAA"}
@@ -0,0 +1,11 @@
1
+ export type Route = {
2
+ pattern: string;
3
+ file: string;
4
+ params: string[];
5
+ };
6
+ export declare function scanRoutes(pagesDir: string): Route[];
7
+ export declare function matchRoute(routes: Route[], url: string): {
8
+ route: Route;
9
+ params: Record<string, string>;
10
+ } | null;
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/router/index.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,KAAK,GAAG;IAClB,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,EAAE,CAAA;CACjB,CAAA;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,KAAK,EAAE,CAEpD;AAED,wBAAgB,UAAU,CACxB,MAAM,EAAE,KAAK,EAAE,EACf,GAAG,EAAE,MAAM,GACV;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GAAG,IAAI,CAOzD"}
@@ -0,0 +1,66 @@
1
+ import { readdirSync } from 'node:fs';
2
+ import { join, relative } from 'node:path';
3
+ export function scanRoutes(pagesDir) {
4
+ return walkDir(pagesDir).map(file => fileToRoute(pagesDir, file));
5
+ }
6
+ export function matchRoute(routes, url) {
7
+ const pathname = url.split('?')[0];
8
+ for (const route of routes) {
9
+ const params = matchPattern(route.pattern, pathname);
10
+ if (params !== null)
11
+ return { route, params };
12
+ }
13
+ return null;
14
+ }
15
+ function walkDir(dir) {
16
+ const files = [];
17
+ for (const entry of readdirSync(dir, { withFileTypes: true })) {
18
+ const full = join(dir, entry.name);
19
+ if (entry.isDirectory()) {
20
+ files.push(...walkDir(full));
21
+ }
22
+ else if (entry.name.endsWith('.wald')) {
23
+ files.push(full);
24
+ }
25
+ }
26
+ return files;
27
+ }
28
+ function fileToRoute(pagesDir, file) {
29
+ const rel = relative(pagesDir, file).replace(/\\/g, '/');
30
+ const withoutExt = rel.slice(0, -'.wald'.length);
31
+ const segments = withoutExt.split('/');
32
+ if (segments[segments.length - 1] === 'index') {
33
+ segments.pop();
34
+ }
35
+ const params = [];
36
+ const patternSegments = segments.map(seg => {
37
+ const match = seg.match(/^\[(\w+)\]$/);
38
+ if (match) {
39
+ params.push(match[1]);
40
+ return `:${match[1]}`;
41
+ }
42
+ return seg;
43
+ });
44
+ return {
45
+ pattern: '/' + patternSegments.join('/'),
46
+ file,
47
+ params,
48
+ };
49
+ }
50
+ function matchPattern(pattern, url) {
51
+ const ps = pattern.split('/').filter(Boolean);
52
+ const us = url.split('/').filter(Boolean);
53
+ if (ps.length !== us.length)
54
+ return null;
55
+ const params = {};
56
+ for (let i = 0; i < ps.length; i++) {
57
+ if (ps[i].startsWith(':')) {
58
+ params[ps[i].slice(1)] = us[i];
59
+ }
60
+ else if (ps[i] !== us[i]) {
61
+ return null;
62
+ }
63
+ }
64
+ return params;
65
+ }
66
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/router/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare function wrapHtml(content: string): string;
2
+ export declare function maybeWrap(html: string): string;
3
+ export declare function hoistScripts(html: string): string;
4
+ //# sourceMappingURL=shell.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../src/shell.ts"],"names":[],"mappings":"AAAA,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAYhD;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAK9C;AAID,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAejD"}
package/dist/shell.js ADDED
@@ -0,0 +1,39 @@
1
+ export function wrapHtml(content) {
2
+ return `<!DOCTYPE html>
3
+ <html lang="en">
4
+ <head>
5
+ <meta charset="UTF-8">
6
+ <meta name="viewport" content="width=device-width">
7
+ <title>WaldJS</title>
8
+ </head>
9
+ <body>
10
+ ${content}
11
+ </body>
12
+ </html>`;
13
+ }
14
+ export function maybeWrap(html) {
15
+ const t = html.trimStart();
16
+ return t.startsWith('<!DOCTYPE') || t.startsWith('<html')
17
+ ? html
18
+ : wrapHtml(html);
19
+ }
20
+ const NO_HOIST_ATTR = /\sdata-wald-no-hoist(?=[\s=/>])/i;
21
+ export function hoistScripts(html) {
22
+ const seen = new Set();
23
+ const collected = [];
24
+ const stripped = html.replace(/(<script\b[^>]*>)[\s\S]*?<\/script>/gi, (match, openTag) => {
25
+ // Scripts marked with data-wald-no-hoist stay exactly where the author put them
26
+ // (e.g. an early inline script in <head> that must run before first paint).
27
+ if (NO_HOIST_ATTR.test(openTag))
28
+ return match;
29
+ if (!seen.has(match)) {
30
+ seen.add(match);
31
+ collected.push(match);
32
+ }
33
+ return '';
34
+ });
35
+ if (collected.length === 0)
36
+ return html;
37
+ return stripped.replace('</body>', collected.join('\n') + '\n</body>');
38
+ }
39
+ //# sourceMappingURL=shell.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell.js","sourceRoot":"","sources":["../src/shell.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,QAAQ,CAAC,OAAe;IACtC,OAAO;;;;;;;;EAQP,OAAO;;QAED,CAAA;AACR,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,CAAA;IAC1B,OAAO,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC;QACvD,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;AACpB,CAAC;AAED,MAAM,aAAa,GAAG,kCAAkC,CAAA;AAExD,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;IAC9B,MAAM,SAAS,GAAa,EAAE,CAAA;IAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,uCAAuC,EAAE,CAAC,KAAK,EAAE,OAAe,EAAE,EAAE;QAChG,gFAAgF;QAChF,4EAA4E;QAC5E,IAAI,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC;YAAE,OAAO,KAAK,CAAA;QAC7C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACrB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;YACf,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACvB,CAAC;QACD,OAAO,EAAE,CAAA;IACX,CAAC,CAAC,CAAA;IACF,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IACvC,OAAO,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAA;AACxE,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Plugin } from 'vite';
2
+ export declare function waldPlugin(): Plugin[];
3
+ //# sourceMappingURL=vite-plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vite-plugin.d.ts","sourceRoot":"","sources":["../src/vite-plugin.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAMlC,wBAAgB,UAAU,IAAI,MAAM,EAAE,CAiErC"}
@@ -0,0 +1,75 @@
1
+ import { compile, parse } from '@waldjs/compiler';
2
+ import { readFileSync } from 'node:fs';
3
+ import { join } from 'node:path';
4
+ import { transformWithEsbuild } from 'vite';
5
+ const VIRTUAL_CONTENT_ID = '\0wald:content';
6
+ const CANOPY_SCRIPT_SUFFIX = '.wald?canopy-script';
7
+ export function waldPlugin() {
8
+ return [
9
+ {
10
+ name: 'vite-plugin-wald',
11
+ resolveId(id) {
12
+ if (id.endsWith('.wald'))
13
+ return id;
14
+ },
15
+ async transform(code, id) {
16
+ if (!id.endsWith('.wald'))
17
+ return;
18
+ try {
19
+ const compiled = compile(code, id);
20
+ const { code: stripped, map } = await transformWithEsbuild(compiled, `${id}.ts`, { loader: 'ts' });
21
+ return { code: stripped, map };
22
+ }
23
+ catch (e) {
24
+ const message = `[waldjs] ${e instanceof Error ? e.message : String(e)}`;
25
+ const loc = typeof e === 'object' && e !== null && 'line' in e
26
+ ? {
27
+ line: e.line,
28
+ column: 'column' in e ? e.column - 1 : 0,
29
+ }
30
+ : undefined;
31
+ this.error({ message, loc });
32
+ }
33
+ },
34
+ },
35
+ {
36
+ name: 'vite-plugin-wald-content',
37
+ resolveId(id) {
38
+ if (id === 'wald:content')
39
+ return VIRTUAL_CONTENT_ID;
40
+ },
41
+ load(id) {
42
+ if (id !== VIRTUAL_CONTENT_ID)
43
+ return;
44
+ const contentDir = JSON.stringify(join(process.cwd(), 'content'));
45
+ return [
46
+ `import { readCollection as _rc, readEntry as _re } from '@waldjs/content'`,
47
+ `const contentDir = ${contentDir}`,
48
+ `export const getCollection = (name) => _rc(name, contentDir)`,
49
+ `export const getEntry = (collection, slug) => _re(collection, slug, contentDir)`,
50
+ ].join('\n');
51
+ },
52
+ },
53
+ {
54
+ name: 'vite-plugin-wald-canopy-script',
55
+ resolveId(id) {
56
+ if (id.endsWith(CANOPY_SCRIPT_SUFFIX))
57
+ return '\0' + id;
58
+ },
59
+ load(id) {
60
+ if (!id.endsWith(CANOPY_SCRIPT_SUFFIX))
61
+ return;
62
+ const file = id.startsWith('\0')
63
+ ? id.slice(1, -'?canopy-script'.length)
64
+ : id.slice(0, -'?canopy-script'.length);
65
+ const source = readFileSync(file, 'utf8');
66
+ const ast = parse(source);
67
+ const scriptNode = ast.template.find((node) => node.type === 'script');
68
+ if (!scriptNode)
69
+ return 'export default function() {}';
70
+ return scriptNode.content.replace(/^<script[^>]*>/, '').replace(/<\/script>$/, '');
71
+ },
72
+ },
73
+ ];
74
+ }
75
+ //# sourceMappingURL=vite-plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vite-plugin.js","sourceRoot":"","sources":["../src/vite-plugin.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,46 @@
1
+ {
2
+ "name": "@waldjs/cli",
3
+ "version": "0.1.0",
4
+ "description": "CLI for WaldJS — plant, grow, build, preview",
5
+ "license": "MIT",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "https://github.com/Stefan-Espant/WaldJS.git",
9
+ "directory": "packages/cli"
10
+ },
11
+ "author": "Stefan van der Kort",
12
+ "private": false,
13
+ "type": "module",
14
+ "bin": {
15
+ "wald": "./bin/wald.js"
16
+ },
17
+ "exports": {
18
+ ".": "./dist/index.js"
19
+ },
20
+ "files": [
21
+ "dist",
22
+ "bin"
23
+ ],
24
+ "publishConfig": {
25
+ "access": "public"
26
+ },
27
+ "dependencies": {
28
+ "citty": "^0.1.6",
29
+ "ora": "^8.0.0",
30
+ "sirv": "^3.0.0",
31
+ "typescript": "^5.5.0",
32
+ "vite": "^5.0.0",
33
+ "@waldjs/canopy": "0.1.0",
34
+ "@waldjs/compiler": "0.1.0",
35
+ "@waldjs/content": "0.1.0",
36
+ "@waldjs/runtime": "0.1.0"
37
+ },
38
+ "devDependencies": {
39
+ "@types/node": "^20.0.0",
40
+ "vitest": "^2.0.0"
41
+ },
42
+ "scripts": {
43
+ "build": "tsc",
44
+ "test": "vitest run"
45
+ }
46
+ }