@noego/forge 0.0.26 → 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/bin/forge.js +98 -0
- package/dist/plugins-cjs/routing/html_render/html_render.js +2 -2
- package/dist/plugins-cjs/routing/html_render/html_render.js.map +1 -1
- package/dist/plugins-es/routing/html_render/html_render.js +3 -3
- package/dist/plugins-es/routing/html_render/html_render.js.map +1 -1
- package/dist/routing/html_render/html_render.js +3 -3
- package/dist/routing/html_render/html_render.js.map +1 -1
- package/dist-ssr/server.cjs +24 -381
- package/dist-ssr/server.cjs.map +1 -1
- package/dist-ssr/server.js +42 -399
- package/dist-ssr/server.js.map +1 -1
- package/dist-ssr/static.cjs +107 -0
- package/dist-ssr/static.cjs.map +1 -0
- package/dist-ssr/static.d.ts +151 -0
- package/dist-ssr/static.js +107 -0
- package/dist-ssr/static.js.map +1 -0
- package/dist-ssr/test.cjs +223 -0
- package/dist-ssr/test.cjs.map +1 -0
- package/dist-ssr/test.d.ts +239 -0
- package/dist-ssr/test.js +184 -0
- package/dist-ssr/test.js.map +1 -0
- package/dist-ssr/url_parser-CsBTlLeJ.cjs +418 -0
- package/dist-ssr/url_parser-CsBTlLeJ.cjs.map +1 -0
- package/dist-ssr/url_parser-DRWHePkU.js +398 -0
- package/dist-ssr/url_parser-DRWHePkU.js.map +1 -0
- package/package.json +39 -2
package/bin/forge.js
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import { spawn } from 'child_process';
|
|
4
|
+
import { glob } from 'fs/promises';
|
|
5
|
+
|
|
6
|
+
const args = process.argv.slice(2);
|
|
7
|
+
|
|
8
|
+
if (args.length === 0) {
|
|
9
|
+
console.log('Usage: forge <pattern|files...>');
|
|
10
|
+
console.log('');
|
|
11
|
+
console.log('Runs TypeScript files with Svelte support.');
|
|
12
|
+
console.log('');
|
|
13
|
+
console.log('Examples:');
|
|
14
|
+
console.log(' forge test/ui/auth.test.ts');
|
|
15
|
+
console.log(' forge test/ui/*.test.ts');
|
|
16
|
+
console.log(' forge "test/ui/**/*.test.ts"');
|
|
17
|
+
process.exit(0);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
async function runFile(file) {
|
|
21
|
+
return new Promise((resolve) => {
|
|
22
|
+
const child = spawn(
|
|
23
|
+
'npx',
|
|
24
|
+
['tsx', '--loader', '@noego/forge/loader', file],
|
|
25
|
+
{
|
|
26
|
+
stdio: 'inherit',
|
|
27
|
+
shell: true,
|
|
28
|
+
}
|
|
29
|
+
);
|
|
30
|
+
|
|
31
|
+
child.on('close', (code) => {
|
|
32
|
+
resolve({ file, code: code ?? 0 });
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
child.on('error', (err) => {
|
|
36
|
+
console.error(`Error running ${file}:`, err.message);
|
|
37
|
+
resolve({ file, code: 1 });
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
async function main() {
|
|
43
|
+
const files = [];
|
|
44
|
+
|
|
45
|
+
// Support both shell expansion (multiple args) and glob patterns
|
|
46
|
+
for (const arg of args) {
|
|
47
|
+
if (arg.includes('*')) {
|
|
48
|
+
// Glob pattern - expand it
|
|
49
|
+
for await (const file of glob(arg)) {
|
|
50
|
+
files.push(file);
|
|
51
|
+
}
|
|
52
|
+
} else {
|
|
53
|
+
// Direct file path
|
|
54
|
+
files.push(arg);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
if (files.length === 0) {
|
|
59
|
+
console.error(`No files found matching: ${args.join(' ')}`);
|
|
60
|
+
process.exit(1);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// Sort for consistent ordering
|
|
64
|
+
files.sort();
|
|
65
|
+
|
|
66
|
+
const results = [];
|
|
67
|
+
|
|
68
|
+
for (const file of files) {
|
|
69
|
+
if (files.length > 1) {
|
|
70
|
+
console.log(`\n━━━ ${file} ━━━\n`);
|
|
71
|
+
}
|
|
72
|
+
const result = await runFile(file);
|
|
73
|
+
results.push(result);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// Summary if multiple files
|
|
77
|
+
if (files.length > 1) {
|
|
78
|
+
const passed = results.filter(r => r.code === 0);
|
|
79
|
+
const failed = results.filter(r => r.code !== 0);
|
|
80
|
+
|
|
81
|
+
console.log('\n━━━ Summary ━━━\n');
|
|
82
|
+
console.log(`Passed: ${passed.length}/${results.length}`);
|
|
83
|
+
|
|
84
|
+
if (failed.length > 0) {
|
|
85
|
+
console.log('\nFailed:');
|
|
86
|
+
failed.forEach(r => console.log(` - ${r.file}`));
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
process.exit(failed.length > 0 ? 1 : 0);
|
|
90
|
+
} else {
|
|
91
|
+
process.exit(results[0].code);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
main().catch(err => {
|
|
96
|
+
console.error('Error:', err);
|
|
97
|
+
process.exit(1);
|
|
98
|
+
});
|
|
@@ -43,7 +43,7 @@ class BaseHTMLRender {
|
|
|
43
43
|
try {
|
|
44
44
|
// Parse and re-serialize with devalue to prevent XSS
|
|
45
45
|
const configData = JSON.parse(configJson);
|
|
46
|
-
const safeConfigJson = (0, devalue_1.
|
|
46
|
+
const safeConfigJson = (0, devalue_1.uneval)(configData);
|
|
47
47
|
const configScript = `<script>window.__CONFIGURATION__ = ${safeConfigJson};</script>`;
|
|
48
48
|
// Inject before closing </head> tag, or at the beginning of <body> if no </head>
|
|
49
49
|
if (html.includes('</head>')) {
|
|
@@ -113,7 +113,7 @@ class LiveHTMLRender {
|
|
|
113
113
|
try {
|
|
114
114
|
// Parse and re-serialize with devalue to prevent XSS
|
|
115
115
|
const configData = JSON.parse(configJson);
|
|
116
|
-
const safeConfigJson = (0, devalue_1.
|
|
116
|
+
const safeConfigJson = (0, devalue_1.uneval)(configData);
|
|
117
117
|
const configScript = `<script>window.__CONFIGURATION__ = ${safeConfigJson};</script>`;
|
|
118
118
|
// Inject before closing </head> tag, or at the beginning of <body> if no </head>
|
|
119
119
|
if (html.includes('</head>')) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"html_render.js","sourceRoot":"","sources":["../../../../src/routing/html_render/html_render.ts"],"names":[],"mappings":";;;;;;AAAA,4DAAmC;AACnC,2DAA4B;AAC5B,
|
|
1
|
+
{"version":3,"file":"html_render.js","sourceRoot":"","sources":["../../../../src/routing/html_render/html_render.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import Handlebars from 'handlebars';
|
|
2
2
|
import fs from "fs/promises";
|
|
3
|
-
import {
|
|
3
|
+
import { uneval } from 'devalue';
|
|
4
4
|
const default_template = `
|
|
5
5
|
<!DOCTYPE html>
|
|
6
6
|
<html lang="en">
|
|
@@ -37,7 +37,7 @@ export class BaseHTMLRender {
|
|
|
37
37
|
try {
|
|
38
38
|
// Parse and re-serialize with devalue to prevent XSS
|
|
39
39
|
const configData = JSON.parse(configJson);
|
|
40
|
-
const safeConfigJson =
|
|
40
|
+
const safeConfigJson = uneval(configData);
|
|
41
41
|
const configScript = `<script>window.__CONFIGURATION__ = ${safeConfigJson};</script>`;
|
|
42
42
|
// Inject before closing </head> tag, or at the beginning of <body> if no </head>
|
|
43
43
|
if (html.includes('</head>')) {
|
|
@@ -105,7 +105,7 @@ export class LiveHTMLRender {
|
|
|
105
105
|
try {
|
|
106
106
|
// Parse and re-serialize with devalue to prevent XSS
|
|
107
107
|
const configData = JSON.parse(configJson);
|
|
108
|
-
const safeConfigJson =
|
|
108
|
+
const safeConfigJson = uneval(configData);
|
|
109
109
|
const configScript = `<script>window.__CONFIGURATION__ = ${safeConfigJson};</script>`;
|
|
110
110
|
// Inject before closing </head> tag, or at the beginning of <body> if no </head>
|
|
111
111
|
if (html.includes('</head>')) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"html_render.js","sourceRoot":"","sources":["../../../../src/routing/html_render/html_render.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,YAAY,CAAA;AACnC,OAAO,EAAE,MAAM,aAAa,CAAA;AAC5B,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"html_render.js","sourceRoot":"","sources":["../../../../src/routing/html_render/html_render.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import Handlebars from 'handlebars';
|
|
2
2
|
import fs from "fs/promises";
|
|
3
|
-
import {
|
|
3
|
+
import { uneval } from 'devalue';
|
|
4
4
|
const default_template = `
|
|
5
5
|
<!DOCTYPE html>
|
|
6
6
|
<html lang="en">
|
|
@@ -37,7 +37,7 @@ export class BaseHTMLRender {
|
|
|
37
37
|
try {
|
|
38
38
|
// Parse and re-serialize with devalue to prevent XSS
|
|
39
39
|
const configData = JSON.parse(configJson);
|
|
40
|
-
const safeConfigJson =
|
|
40
|
+
const safeConfigJson = uneval(configData);
|
|
41
41
|
const configScript = `<script>window.__CONFIGURATION__ = ${safeConfigJson};</script>`;
|
|
42
42
|
// Inject before closing </head> tag, or at the beginning of <body> if no </head>
|
|
43
43
|
if (html.includes('</head>')) {
|
|
@@ -105,7 +105,7 @@ export class LiveHTMLRender {
|
|
|
105
105
|
try {
|
|
106
106
|
// Parse and re-serialize with devalue to prevent XSS
|
|
107
107
|
const configData = JSON.parse(configJson);
|
|
108
|
-
const safeConfigJson =
|
|
108
|
+
const safeConfigJson = uneval(configData);
|
|
109
109
|
const configScript = `<script>window.__CONFIGURATION__ = ${safeConfigJson};</script>`;
|
|
110
110
|
// Inject before closing </head> tag, or at the beginning of <body> if no </head>
|
|
111
111
|
if (html.includes('</head>')) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"html_render.js","sourceRoot":"","sources":["../../../../src/routing/html_render/html_render.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,YAAY,CAAA;AACnC,OAAO,EAAE,MAAM,aAAa,CAAA;AAC5B,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"html_render.js","sourceRoot":"","sources":["../../../../src/routing/html_render/html_render.ts"],"names":[],"mappings":"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"}
|