@stonedeck/cli 0.7.2 ā 0.7.3
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/index.js +65 -2
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/src/index.ts +69 -2
package/dist/index.js
CHANGED
|
@@ -3,6 +3,7 @@ import { processStoneDeck } from '@stonedeck/core';
|
|
|
3
3
|
import { HtmlPlugin } from '@stonedeck/html-plugin';
|
|
4
4
|
import * as fs from 'fs';
|
|
5
5
|
import * as path from 'path';
|
|
6
|
+
import * as http from 'http';
|
|
6
7
|
import { createRequire } from 'module';
|
|
7
8
|
const require = createRequire(import.meta.url);
|
|
8
9
|
const pkg = require('../package.json');
|
|
@@ -101,8 +102,10 @@ async function handleExport(args, legacy = false) {
|
|
|
101
102
|
}
|
|
102
103
|
const htmlPlugin = new HtmlPlugin();
|
|
103
104
|
const offline = !args.includes('--no-offline');
|
|
105
|
+
const portIdx = args.indexOf('--live-reload-port');
|
|
106
|
+
const liveReloadPort = portIdx !== -1 ? parseInt(args[portIdx + 1]) : undefined;
|
|
104
107
|
console.log(`š Generating HTML: ${path.basename(outputPath)}...`);
|
|
105
|
-
await htmlPlugin.generate(ir, outputPath, { offline });
|
|
108
|
+
await htmlPlugin.generate(ir, outputPath, { offline, liveReloadPort });
|
|
106
109
|
console.log('ā
Done!');
|
|
107
110
|
}
|
|
108
111
|
catch (e) {
|
|
@@ -120,6 +123,56 @@ async function handlePreview(args) {
|
|
|
120
123
|
const isWatch = args.includes('--watch') || args.includes('-w');
|
|
121
124
|
// Default preview is always HTML
|
|
122
125
|
const outputPath = inputPath.replace(/\.md$/, '.preview.html');
|
|
126
|
+
// Live Reload Server State
|
|
127
|
+
let sseClients = [];
|
|
128
|
+
let lrPort = 3000;
|
|
129
|
+
const startLiveReloadServer = async () => {
|
|
130
|
+
return new Promise((resolve) => {
|
|
131
|
+
const server = http.createServer((req, res) => {
|
|
132
|
+
const url = new URL(req.url || '/', `http://localhost:${lrPort}`);
|
|
133
|
+
if (url.pathname === '/live-reload') {
|
|
134
|
+
res.writeHead(200, {
|
|
135
|
+
'Content-Type': 'text/event-stream',
|
|
136
|
+
'Cache-Control': 'no-cache',
|
|
137
|
+
'Connection': 'keep-alive',
|
|
138
|
+
'Access-Control-Allow-Origin': '*'
|
|
139
|
+
});
|
|
140
|
+
res.write('data: connected\n\n');
|
|
141
|
+
sseClients.push(res);
|
|
142
|
+
req.on('close', () => {
|
|
143
|
+
sseClients = sseClients.filter(c => c !== res);
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
else if (url.pathname === '/' || url.pathname === '/index.html') {
|
|
147
|
+
if (fs.existsSync(outputPath)) {
|
|
148
|
+
res.writeHead(200, { 'Content-Type': 'text/html' });
|
|
149
|
+
res.end(fs.readFileSync(outputPath));
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
res.writeHead(404);
|
|
153
|
+
res.end('Preview not generated yet. Please wait...');
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
res.writeHead(404);
|
|
158
|
+
res.end();
|
|
159
|
+
}
|
|
160
|
+
});
|
|
161
|
+
server.on('error', (e) => {
|
|
162
|
+
if (e.code === 'EADDRINUSE') {
|
|
163
|
+
lrPort++;
|
|
164
|
+
server.listen(lrPort);
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
server.listen(lrPort, () => {
|
|
168
|
+
resolve(lrPort);
|
|
169
|
+
});
|
|
170
|
+
});
|
|
171
|
+
};
|
|
172
|
+
if (isWatch) {
|
|
173
|
+
lrPort = await startLiveReloadServer();
|
|
174
|
+
console.log(`š” Live Reload server started on port ${lrPort}`);
|
|
175
|
+
}
|
|
123
176
|
const run = async () => {
|
|
124
177
|
try {
|
|
125
178
|
console.log(`\nš ${isWatch ? 'Updating' : 'Generating'} preview...`);
|
|
@@ -127,8 +180,18 @@ async function handlePreview(args) {
|
|
|
127
180
|
const exportArgs = [args[0], '--output', outputPath, ...args.filter(a => a !== args[0] && a !== '--watch' && a !== '-w')];
|
|
128
181
|
if (!exportArgs.includes('--no-offline'))
|
|
129
182
|
exportArgs.push('--no-offline');
|
|
183
|
+
if (isWatch) {
|
|
184
|
+
exportArgs.push('--live-reload-port', lrPort.toString());
|
|
185
|
+
}
|
|
130
186
|
await handleExport(exportArgs, false);
|
|
131
|
-
|
|
187
|
+
// Notify clients
|
|
188
|
+
sseClients.forEach(client => client.write('data: reload\n\n'));
|
|
189
|
+
if (isWatch) {
|
|
190
|
+
console.log(`š Preview available at: http://localhost:${lrPort}`);
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
console.log(`š Preview available at: file://${outputPath}`);
|
|
194
|
+
}
|
|
132
195
|
}
|
|
133
196
|
catch (e) {
|
|
134
197
|
const message = e instanceof Error ? e.message : String(e);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -3,6 +3,7 @@ import { processStoneDeck } from '@stonedeck/core';
|
|
|
3
3
|
import { HtmlPlugin } from '@stonedeck/html-plugin';
|
|
4
4
|
import * as fs from 'fs';
|
|
5
5
|
import * as path from 'path';
|
|
6
|
+
import * as http from 'http';
|
|
6
7
|
import { createRequire } from 'module';
|
|
7
8
|
|
|
8
9
|
const require = createRequire(import.meta.url);
|
|
@@ -115,8 +116,11 @@ async function handleExport(args: string[], legacy = false) {
|
|
|
115
116
|
const htmlPlugin = new HtmlPlugin();
|
|
116
117
|
const offline = !args.includes('--no-offline');
|
|
117
118
|
|
|
119
|
+
const portIdx = args.indexOf('--live-reload-port');
|
|
120
|
+
const liveReloadPort = portIdx !== -1 ? parseInt(args[portIdx + 1]!) : undefined;
|
|
121
|
+
|
|
118
122
|
console.log(`š Generating HTML: ${path.basename(outputPath)}...`);
|
|
119
|
-
await htmlPlugin.generate(ir, outputPath, { offline });
|
|
123
|
+
await htmlPlugin.generate(ir, outputPath, { offline, liveReloadPort });
|
|
120
124
|
|
|
121
125
|
console.log('ā
Done!');
|
|
122
126
|
} catch (e: unknown) {
|
|
@@ -138,15 +142,78 @@ async function handlePreview(args: string[]) {
|
|
|
138
142
|
// Default preview is always HTML
|
|
139
143
|
const outputPath = inputPath.replace(/\.md$/, '.preview.html');
|
|
140
144
|
|
|
145
|
+
// Live Reload Server State
|
|
146
|
+
let sseClients: http.ServerResponse[] = [];
|
|
147
|
+
let lrPort = 3000;
|
|
148
|
+
|
|
149
|
+
const startLiveReloadServer = async () => {
|
|
150
|
+
return new Promise<number>((resolve) => {
|
|
151
|
+
const server = http.createServer((req, res) => {
|
|
152
|
+
const url = new URL(req.url || '/', `http://localhost:${lrPort}`);
|
|
153
|
+
if (url.pathname === '/live-reload') {
|
|
154
|
+
res.writeHead(200, {
|
|
155
|
+
'Content-Type': 'text/event-stream',
|
|
156
|
+
'Cache-Control': 'no-cache',
|
|
157
|
+
'Connection': 'keep-alive',
|
|
158
|
+
'Access-Control-Allow-Origin': '*'
|
|
159
|
+
});
|
|
160
|
+
res.write('data: connected\n\n');
|
|
161
|
+
sseClients.push(res);
|
|
162
|
+
req.on('close', () => {
|
|
163
|
+
sseClients = sseClients.filter(c => c !== res);
|
|
164
|
+
});
|
|
165
|
+
} else if (url.pathname === '/' || url.pathname === '/index.html') {
|
|
166
|
+
if (fs.existsSync(outputPath)) {
|
|
167
|
+
res.writeHead(200, { 'Content-Type': 'text/html' });
|
|
168
|
+
res.end(fs.readFileSync(outputPath));
|
|
169
|
+
} else {
|
|
170
|
+
res.writeHead(404);
|
|
171
|
+
res.end('Preview not generated yet. Please wait...');
|
|
172
|
+
}
|
|
173
|
+
} else {
|
|
174
|
+
res.writeHead(404);
|
|
175
|
+
res.end();
|
|
176
|
+
}
|
|
177
|
+
});
|
|
178
|
+
|
|
179
|
+
server.on('error', (e: any) => {
|
|
180
|
+
if (e.code === 'EADDRINUSE') {
|
|
181
|
+
lrPort++;
|
|
182
|
+
server.listen(lrPort);
|
|
183
|
+
}
|
|
184
|
+
});
|
|
185
|
+
|
|
186
|
+
server.listen(lrPort, () => {
|
|
187
|
+
resolve(lrPort);
|
|
188
|
+
});
|
|
189
|
+
});
|
|
190
|
+
};
|
|
191
|
+
|
|
192
|
+
if (isWatch) {
|
|
193
|
+
lrPort = await startLiveReloadServer();
|
|
194
|
+
console.log(`š” Live Reload server started on port ${lrPort}`);
|
|
195
|
+
}
|
|
196
|
+
|
|
141
197
|
const run = async () => {
|
|
142
198
|
try {
|
|
143
199
|
console.log(`\nš ${isWatch ? 'Updating' : 'Generating'} preview...`);
|
|
144
200
|
// Preview defaults to no-offline for speed
|
|
145
201
|
const exportArgs = [args[0]!, '--output', outputPath, ...args.filter(a => a !== args[0] && a !== '--watch' && a !== '-w')];
|
|
146
202
|
if (!exportArgs.includes('--no-offline')) exportArgs.push('--no-offline');
|
|
203
|
+
if (isWatch) {
|
|
204
|
+
exportArgs.push('--live-reload-port', lrPort.toString());
|
|
205
|
+
}
|
|
147
206
|
|
|
148
207
|
await handleExport(exportArgs, false);
|
|
149
|
-
|
|
208
|
+
|
|
209
|
+
// Notify clients
|
|
210
|
+
sseClients.forEach(client => client.write('data: reload\n\n'));
|
|
211
|
+
|
|
212
|
+
if (isWatch) {
|
|
213
|
+
console.log(`š Preview available at: http://localhost:${lrPort}`);
|
|
214
|
+
} else {
|
|
215
|
+
console.log(`š Preview available at: file://${outputPath}`);
|
|
216
|
+
}
|
|
150
217
|
} catch (e: unknown) {
|
|
151
218
|
const message = e instanceof Error ? e.message : String(e);
|
|
152
219
|
console.error(`ā Preview update failed: ${message}`);
|