@jk2908/solas 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 (105) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +333 -0
  3. package/dist/cli.d.ts +2 -0
  4. package/dist/cli.js +219 -0
  5. package/dist/error-boundary.d.ts +1 -0
  6. package/dist/error-boundary.js +1 -0
  7. package/dist/index.d.ts +7 -0
  8. package/dist/index.js +235 -0
  9. package/dist/internal/build.d.ts +104 -0
  10. package/dist/internal/build.js +633 -0
  11. package/dist/internal/codegen/config.d.ts +5 -0
  12. package/dist/internal/codegen/config.js +19 -0
  13. package/dist/internal/codegen/environments.d.ts +12 -0
  14. package/dist/internal/codegen/environments.js +42 -0
  15. package/dist/internal/codegen/manifest.d.ts +5 -0
  16. package/dist/internal/codegen/manifest.js +15 -0
  17. package/dist/internal/codegen/maps.d.ts +5 -0
  18. package/dist/internal/codegen/maps.js +75 -0
  19. package/dist/internal/codegen/utils.d.ts +1 -0
  20. package/dist/internal/codegen/utils.js +2 -0
  21. package/dist/internal/env/browser.d.ts +4 -0
  22. package/dist/internal/env/browser.js +58 -0
  23. package/dist/internal/env/request-context.d.ts +19 -0
  24. package/dist/internal/env/request-context.js +2 -0
  25. package/dist/internal/env/rsc.d.ts +39 -0
  26. package/dist/internal/env/rsc.js +368 -0
  27. package/dist/internal/env/ssr.d.ts +42 -0
  28. package/dist/internal/env/ssr.js +149 -0
  29. package/dist/internal/env/utils.d.ts +2 -0
  30. package/dist/internal/env/utils.js +28 -0
  31. package/dist/internal/metadata.d.ts +81 -0
  32. package/dist/internal/metadata.js +185 -0
  33. package/dist/internal/navigation/http-exception-boundary.d.ts +12 -0
  34. package/dist/internal/navigation/http-exception-boundary.js +48 -0
  35. package/dist/internal/navigation/http-exception.d.ts +33 -0
  36. package/dist/internal/navigation/http-exception.js +45 -0
  37. package/dist/internal/navigation/link.d.ts +13 -0
  38. package/dist/internal/navigation/link.js +63 -0
  39. package/dist/internal/navigation/redirect-boundary.d.ts +12 -0
  40. package/dist/internal/navigation/redirect-boundary.js +39 -0
  41. package/dist/internal/navigation/redirect.d.ts +21 -0
  42. package/dist/internal/navigation/redirect.js +63 -0
  43. package/dist/internal/navigation/use-search-params.d.ts +1 -0
  44. package/dist/internal/navigation/use-search-params.js +13 -0
  45. package/dist/internal/prerender.d.ts +151 -0
  46. package/dist/internal/prerender.js +422 -0
  47. package/dist/internal/render/head.d.ts +4 -0
  48. package/dist/internal/render/head.js +38 -0
  49. package/dist/internal/render/tree.d.ts +47 -0
  50. package/dist/internal/render/tree.js +108 -0
  51. package/dist/internal/router/create-router.d.ts +6 -0
  52. package/dist/internal/router/create-router.js +95 -0
  53. package/dist/internal/router/pattern.d.ts +8 -0
  54. package/dist/internal/router/pattern.js +31 -0
  55. package/dist/internal/router/prefetcher.d.ts +47 -0
  56. package/dist/internal/router/prefetcher.js +90 -0
  57. package/dist/internal/router/resolver.d.ts +174 -0
  58. package/dist/internal/router/resolver.js +356 -0
  59. package/dist/internal/router/router-context.d.ts +11 -0
  60. package/dist/internal/router/router-context.js +7 -0
  61. package/dist/internal/router/router-provider.d.ts +6 -0
  62. package/dist/internal/router/router-provider.js +131 -0
  63. package/dist/internal/router/router.d.ts +79 -0
  64. package/dist/internal/router/router.js +417 -0
  65. package/dist/internal/router/use-router.d.ts +5 -0
  66. package/dist/internal/router/use-router.js +5 -0
  67. package/dist/internal/server/cookies.d.ts +6 -0
  68. package/dist/internal/server/cookies.js +17 -0
  69. package/dist/internal/server/dynamic.d.ts +9 -0
  70. package/dist/internal/server/dynamic.js +22 -0
  71. package/dist/internal/server/headers.d.ts +5 -0
  72. package/dist/internal/server/headers.js +19 -0
  73. package/dist/internal/server/url.d.ts +5 -0
  74. package/dist/internal/server/url.js +16 -0
  75. package/dist/internal/ui/defaults/error.d.ts +4 -0
  76. package/dist/internal/ui/defaults/error.js +6 -0
  77. package/dist/internal/ui/error-boundary.d.ts +26 -0
  78. package/dist/internal/ui/error-boundary.js +41 -0
  79. package/dist/navigation.d.ts +6 -0
  80. package/dist/navigation.js +6 -0
  81. package/dist/prerender.d.ts +1 -0
  82. package/dist/prerender.js +1 -0
  83. package/dist/router.d.ts +4 -0
  84. package/dist/router.js +4 -0
  85. package/dist/server.d.ts +4 -0
  86. package/dist/server.js +4 -0
  87. package/dist/solas.d.ts +32 -0
  88. package/dist/solas.js +125 -0
  89. package/dist/types.d.ts +93 -0
  90. package/dist/types.js +1 -0
  91. package/dist/utils/compress.d.ts +11 -0
  92. package/dist/utils/compress.js +76 -0
  93. package/dist/utils/context.d.ts +6 -0
  94. package/dist/utils/context.js +25 -0
  95. package/dist/utils/cookies.d.ts +3 -0
  96. package/dist/utils/cookies.js +35 -0
  97. package/dist/utils/export-reader.d.ts +29 -0
  98. package/dist/utils/export-reader.js +117 -0
  99. package/dist/utils/format.d.ts +6 -0
  100. package/dist/utils/format.js +72 -0
  101. package/dist/utils/logger.d.ts +52 -0
  102. package/dist/utils/logger.js +105 -0
  103. package/dist/utils/time.d.ts +4 -0
  104. package/dist/utils/time.js +29 -0
  105. package/package.json +111 -0
@@ -0,0 +1,52 @@
1
+ declare const LEVELS: {
2
+ readonly debug: 0;
3
+ readonly info: 1;
4
+ readonly warn: 2;
5
+ readonly error: 3;
6
+ readonly fatal: 4;
7
+ };
8
+ export type LogLevel = keyof typeof LEVELS;
9
+ /**
10
+ * Log messages with different severity levels
11
+ */
12
+ export declare class Logger {
13
+ #private;
14
+ constructor(level?: LogLevel);
15
+ static set defaultLevel(level: LogLevel);
16
+ static get defaultLevel(): "debug" | "error" | "fatal" | "info" | "warn";
17
+ /**
18
+ * Convert a value to an Error instance
19
+ */
20
+ static toError(err: unknown): Error;
21
+ /**
22
+ * Stringify the error for logging
23
+ */
24
+ static print(err: unknown): string;
25
+ set level(level: LogLevel);
26
+ get level(): "debug" | "error" | "fatal" | "info" | "warn";
27
+ /**
28
+ * Log a message with a specific level
29
+ */
30
+ log(level: LogLevel, message: string, error?: Error): void;
31
+ /**
32
+ * Log a debug message
33
+ */
34
+ debug(...messages: string[]): void;
35
+ /**
36
+ * Log an info message
37
+ */
38
+ info(...messages: string[]): void;
39
+ /**
40
+ * Log a warning message
41
+ */
42
+ warn(...messages: string[]): void;
43
+ /**
44
+ * Log an error message
45
+ */
46
+ error(message: string, error?: unknown): void;
47
+ /**
48
+ * Log a fatal error message
49
+ */
50
+ fatal(message: string, error?: unknown): void;
51
+ }
52
+ export {};
@@ -0,0 +1,105 @@
1
+ import { Solas } from '../solas';
2
+ import { HttpException } from '../internal/navigation/http-exception';
3
+ const LEVELS = {
4
+ debug: 0,
5
+ info: 1,
6
+ warn: 2,
7
+ error: 3,
8
+ fatal: 4,
9
+ };
10
+ /**
11
+ * Log messages with different severity levels
12
+ */
13
+ export class Logger {
14
+ static #defaultLevel = 'info';
15
+ #level;
16
+ constructor(level) {
17
+ this.#level = level;
18
+ }
19
+ static set defaultLevel(level) {
20
+ Logger.#defaultLevel = level;
21
+ }
22
+ static get defaultLevel() {
23
+ return Logger.#defaultLevel;
24
+ }
25
+ /**
26
+ * Convert a value to an Error instance
27
+ */
28
+ static toError(err) {
29
+ return err instanceof Error ? err : new Error(String(err), { cause: err });
30
+ }
31
+ /**
32
+ * Stringify the error for logging
33
+ */
34
+ static print(err) {
35
+ if (err instanceof Error || err instanceof HttpException) {
36
+ return err.message + (err.stack ? `\n${err.stack}` : '');
37
+ }
38
+ if (typeof err === 'object' && err !== null) {
39
+ return JSON.stringify(err, null, 2);
40
+ }
41
+ return String(err);
42
+ }
43
+ set level(level) {
44
+ this.#level = level;
45
+ }
46
+ get level() {
47
+ return this.#level ?? Logger.#defaultLevel;
48
+ }
49
+ /**
50
+ * Log a message with a specific level
51
+ */
52
+ log(level, message, error) {
53
+ if (LEVELS[level] < LEVELS[this.level])
54
+ return;
55
+ const entry = {
56
+ ts: Date.now(),
57
+ level,
58
+ message,
59
+ };
60
+ if (level === 'error' || level === 'fatal') {
61
+ entry.error = error ? Logger.toError(error) : new Error(message);
62
+ }
63
+ const line = `[${Solas.Config.NAME}] [${entry.ts}] [${level.toUpperCase()}] ${message}`;
64
+ const extra = entry.error ? `\n${Logger.print(entry.error)}` : '';
65
+ if (level === 'warn') {
66
+ console.warn(line, extra);
67
+ return;
68
+ }
69
+ if (level === 'error' || level === 'fatal') {
70
+ console.error(line, extra);
71
+ return;
72
+ }
73
+ console.log(line, extra);
74
+ }
75
+ /**
76
+ * Log a debug message
77
+ */
78
+ debug(...messages) {
79
+ this.log('debug', messages.join(' '));
80
+ }
81
+ /**
82
+ * Log an info message
83
+ */
84
+ info(...messages) {
85
+ this.log('info', messages.join(' '));
86
+ }
87
+ /**
88
+ * Log a warning message
89
+ */
90
+ warn(...messages) {
91
+ this.log('warn', messages.join(' '));
92
+ }
93
+ /**
94
+ * Log an error message
95
+ */
96
+ error(message, error) {
97
+ this.log('error', message, error === undefined ? undefined : Logger.toError(error));
98
+ }
99
+ /**
100
+ * Log a fatal error message
101
+ */
102
+ fatal(message, error) {
103
+ this.log('fatal', message, error === undefined ? undefined : Logger.toError(error));
104
+ }
105
+ }
@@ -0,0 +1,4 @@
1
+ export declare namespace Time {
2
+ function debounce<T extends unknown[]>(fn: (...args: T) => void, wait: number): (...args: T) => void;
3
+ function timeout<T>(task: Promise<T>, timeoutMs: number, label: string): Promise<Awaited<T>>;
4
+ }
@@ -0,0 +1,29 @@
1
+ export { Time };
2
+ var Time;
3
+ (function (Time) {
4
+ function debounce(fn, wait) {
5
+ let timeoutId = null;
6
+ return (...args) => {
7
+ if (timeoutId) {
8
+ clearTimeout(timeoutId);
9
+ }
10
+ timeoutId = setTimeout(() => {
11
+ fn.apply(null, args);
12
+ }, wait);
13
+ };
14
+ }
15
+ Time.debounce = debounce;
16
+ function timeout(task, timeoutMs, label) {
17
+ let timer;
18
+ const timeout = new Promise((_, reject) => {
19
+ timer = setTimeout(() => {
20
+ reject(new Error(`Timed out after ${timeoutMs}ms (${label})`));
21
+ }, timeoutMs);
22
+ });
23
+ return Promise.race([task, timeout]).finally(() => {
24
+ if (timer)
25
+ clearTimeout(timer);
26
+ });
27
+ }
28
+ Time.timeout = timeout;
29
+ })(Time || (Time = {}));
package/package.json ADDED
@@ -0,0 +1,111 @@
1
+ {
2
+ "name": "@jk2908/solas",
3
+ "version": "0.1.0",
4
+ "description": "A React Server Components meta-framework powered by Vite",
5
+ "keywords": [
6
+ "framework",
7
+ "ppr",
8
+ "react",
9
+ "rsc",
10
+ "ssr",
11
+ "vite"
12
+ ],
13
+ "homepage": "https://github.com/jk2908/solas/tree/main/packages/solas#readme",
14
+ "bugs": {
15
+ "url": "https://github.com/jk2908/solas/issues"
16
+ },
17
+ "license": "MIT",
18
+ "repository": {
19
+ "type": "git",
20
+ "url": "https://github.com/jk2908/solas.git"
21
+ },
22
+ "bin": {
23
+ "solas": "./dist/cli.js"
24
+ },
25
+ "files": [
26
+ "dist"
27
+ ],
28
+ "type": "module",
29
+ "main": "./dist/index.js",
30
+ "types": "./dist/index.d.ts",
31
+ "exports": {
32
+ ".": {
33
+ "types": "./dist/index.d.ts",
34
+ "import": "./dist/index.js"
35
+ },
36
+ "./env/rsc": {
37
+ "types": "./dist/internal/env/rsc.d.ts",
38
+ "import": "./dist/internal/env/rsc.js"
39
+ },
40
+ "./env/ssr": {
41
+ "types": "./dist/internal/env/ssr.d.ts",
42
+ "import": "./dist/internal/env/ssr.js"
43
+ },
44
+ "./env/browser": {
45
+ "types": "./dist/internal/env/browser.d.ts",
46
+ "import": "./dist/internal/env/browser.js"
47
+ },
48
+ "./router": {
49
+ "types": "./dist/router.d.ts",
50
+ "import": "./dist/router.js"
51
+ },
52
+ "./navigation": {
53
+ "types": "./dist/navigation.d.ts",
54
+ "import": "./dist/navigation.js"
55
+ },
56
+ "./prerender": {
57
+ "types": "./dist/prerender.d.ts",
58
+ "import": "./dist/prerender.js"
59
+ },
60
+ "./server": {
61
+ "types": "./dist/server.d.ts",
62
+ "import": "./dist/server.js"
63
+ },
64
+ "./error-boundary": {
65
+ "types": "./dist/error-boundary.d.ts",
66
+ "import": "./dist/error-boundary.js"
67
+ },
68
+ "./solas": {
69
+ "types": "./dist/solas.d.ts",
70
+ "import": "./dist/solas.js"
71
+ }
72
+ },
73
+ "scripts": {
74
+ "build": "rm -rf dist && tsgo && chmod +x dist/cli.js",
75
+ "lint": "bunx oxlint .",
76
+ "lint:fix": "bunx oxlint --fix .",
77
+ "format": "bunx oxfmt --write .",
78
+ "format:check": "bunx oxfmt --check .",
79
+ "pack:dry": "npm pack --dry-run",
80
+ "release:check": "npm run prepublishOnly",
81
+ "prepublishOnly": "npm run build && npm run pack:dry"
82
+ },
83
+ "dependencies": {
84
+ "@vitejs/plugin-rsc": "^0.5.20",
85
+ "path-to-regexp": "^8.3.0",
86
+ "rsc-html-stream": "^0.0.7"
87
+ },
88
+ "devDependencies": {
89
+ "@prettier/plugin-oxc": "^0.1.3",
90
+ "@types/bun": "^1.2.22",
91
+ "@typescript/native-preview": "^7.0.0-dev.20260224.1",
92
+ "network-information-types": "^0.1.1",
93
+ "typescript": "^5.9.3"
94
+ },
95
+ "peerDependencies": {
96
+ "@types/react": "^19.2.14",
97
+ "@types/react-dom": "^19.2.3",
98
+ "react": "^19.2.4",
99
+ "react-dom": "^19.2.4",
100
+ "react-server-dom-webpack": "^19.2.4",
101
+ "vite": "^7.3.1 || ^8.0.0"
102
+ },
103
+ "peerDependenciesMeta": {
104
+ "react-server-dom-webpack": {
105
+ "optional": true
106
+ }
107
+ },
108
+ "engines": {
109
+ "bun": ">=1.2.0"
110
+ }
111
+ }