@swissjs/swite 0.3.0 → 0.3.2

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 (187) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/dist/adapters/proxy/SwiteProxyError.d.ts.map +1 -0
  3. package/dist/{proxy → adapters/proxy}/proxyToPython.d.ts +1 -1
  4. package/dist/adapters/proxy/proxyToPython.d.ts.map +1 -0
  5. package/dist/build-engine/builder.d.ts.map +1 -0
  6. package/dist/{builder.js → build-engine/builder.js} +8 -14
  7. package/dist/cli.js +5 -5
  8. package/dist/config/config-loader.d.ts.map +1 -0
  9. package/dist/{config.d.ts → config/config.d.ts} +11 -0
  10. package/dist/config/config.d.ts.map +1 -0
  11. package/dist/config/env.d.ts +25 -0
  12. package/dist/config/env.d.ts.map +1 -0
  13. package/dist/config/env.js +84 -0
  14. package/dist/{handlers → dev-engine/handlers}/base-handler.d.ts +5 -1
  15. package/dist/dev-engine/handlers/base-handler.d.ts.map +1 -0
  16. package/dist/dev-engine/handlers/base-handler.js +58 -0
  17. package/dist/dev-engine/handlers/js-handler.d.ts.map +1 -0
  18. package/dist/{handlers → dev-engine/handlers}/js-handler.js +1 -1
  19. package/dist/dev-engine/handlers/mjs-handler.d.ts.map +1 -0
  20. package/dist/{handlers → dev-engine/handlers}/mjs-handler.js +1 -1
  21. package/dist/dev-engine/handlers/node-module-handler.d.ts.map +1 -0
  22. package/dist/{handlers → dev-engine/handlers}/node-module-handler.js +33 -44
  23. package/dist/{handlers → dev-engine/handlers}/ts-handler.d.ts +0 -4
  24. package/dist/dev-engine/handlers/ts-handler.d.ts.map +1 -0
  25. package/dist/{handlers → dev-engine/handlers}/ts-handler.js +5 -28
  26. package/dist/{handlers → dev-engine/handlers}/ui-handler.d.ts +0 -4
  27. package/dist/dev-engine/handlers/ui-handler.d.ts.map +1 -0
  28. package/dist/dev-engine/handlers/ui-handler.js +84 -0
  29. package/dist/{handlers → dev-engine/handlers}/uix-handler.d.ts +0 -4
  30. package/dist/dev-engine/handlers/uix-handler.d.ts.map +1 -0
  31. package/dist/dev-engine/handlers/uix-handler.js +70 -0
  32. package/dist/dev-engine/hmr/hmr-client-template.d.ts +10 -0
  33. package/dist/dev-engine/hmr/hmr-client-template.d.ts.map +1 -0
  34. package/dist/dev-engine/hmr/hmr-client-template.js +122 -0
  35. package/dist/dev-engine/hmr/hmr.d.ts.map +1 -0
  36. package/dist/{hmr.js → dev-engine/hmr/hmr.js} +2 -134
  37. package/dist/{middleware → dev-engine/middleware}/hmr-routes.d.ts +2 -2
  38. package/dist/dev-engine/middleware/hmr-routes.d.ts.map +1 -0
  39. package/dist/{middleware → dev-engine/middleware}/hmr-routes.js +1 -1
  40. package/dist/dev-engine/middleware/middleware-setup.d.ts +35 -0
  41. package/dist/dev-engine/middleware/middleware-setup.d.ts.map +1 -0
  42. package/dist/dev-engine/middleware/middleware-setup.js +327 -0
  43. package/dist/dev-engine/middleware/static-files.d.ts.map +1 -0
  44. package/dist/{middleware → dev-engine/middleware}/static-files.js +2 -2
  45. package/dist/{dev → dev-engine}/pythonDevManager.d.ts +1 -1
  46. package/dist/dev-engine/pythonDevManager.d.ts.map +1 -0
  47. package/dist/{dev → dev-engine}/pythonDevManager.js +1 -1
  48. package/dist/{router → dev-engine/router}/file-router.d.ts +4 -4
  49. package/dist/dev-engine/router/file-router.d.ts.map +1 -0
  50. package/dist/{router → dev-engine/router}/file-router.js +4 -4
  51. package/dist/dev-engine/server.d.ts.map +1 -0
  52. package/dist/{server.js → dev-engine/server.js} +10 -6
  53. package/dist/index.d.ts +13 -13
  54. package/dist/index.d.ts.map +1 -1
  55. package/dist/index.js +9 -9
  56. package/dist/internal/cache/compilation-cache.d.ts.map +1 -0
  57. package/dist/{cache → internal/cache}/compilation-cache.js +3 -2
  58. package/dist/internal/generate-import-map-cli.d.ts.map +1 -0
  59. package/dist/{utils → internal}/generate-import-map-cli.js +1 -1
  60. package/dist/internal/generate-import-map.d.ts.map +1 -0
  61. package/dist/{utils → internal}/generate-import-map.js +3 -3
  62. package/dist/{utils → kernel}/package-finder.d.ts +7 -5
  63. package/dist/kernel/package-finder.d.ts.map +1 -0
  64. package/dist/kernel/package-finder.js +154 -0
  65. package/dist/kernel/package-registry.d.ts.map +1 -0
  66. package/dist/kernel/workspace.d.ts.map +1 -0
  67. package/dist/{resolver → resolution}/bare-import-resolver.d.ts +1 -1
  68. package/dist/resolution/bare-import-resolver.d.ts.map +1 -0
  69. package/dist/{resolver → resolution}/bare-import-resolver.js +25 -53
  70. package/dist/resolution/cdn/cdn-fallback.d.ts.map +1 -0
  71. package/dist/{utils → resolution/path}/file-path-resolver.d.ts +2 -1
  72. package/dist/resolution/path/file-path-resolver.d.ts.map +1 -0
  73. package/dist/{utils → resolution/path}/file-path-resolver.js +46 -28
  74. package/dist/resolution/path/path-fixup.d.ts +13 -0
  75. package/dist/resolution/path/path-fixup.d.ts.map +1 -0
  76. package/dist/resolution/path/path-fixup.js +20 -0
  77. package/dist/{resolver.d.ts → resolution/resolver.d.ts} +1 -1
  78. package/dist/resolution/resolver.d.ts.map +1 -0
  79. package/dist/{resolver.js → resolution/resolver.js} +8 -37
  80. package/dist/{import-rewriter.d.ts → resolution/rewriting/import-rewriter.d.ts} +1 -1
  81. package/dist/resolution/rewriting/import-rewriter.d.ts.map +1 -0
  82. package/dist/resolution/rewriting/import-rewriter.js +199 -0
  83. package/dist/{resolver → resolution}/symlink-registry.d.ts +1 -1
  84. package/dist/resolution/symlink-registry.d.ts.map +1 -0
  85. package/dist/{resolver → resolution}/symlink-registry.js +1 -1
  86. package/dist/resolution/url-resolver.d.ts.map +1 -0
  87. package/dist/{resolver → resolution}/url-resolver.js +38 -109
  88. package/dist/resolution/workspace-package-resolver.d.ts.map +1 -0
  89. package/dist/resolution/workspace-package-resolver.js +77 -0
  90. package/docs/architecture/build-pipeline.md +97 -0
  91. package/docs/architecture/dev-server.md +87 -0
  92. package/docs/architecture/hmr.md +78 -0
  93. package/docs/architecture/import-rewriting.md +101 -0
  94. package/docs/architecture/index.md +16 -0
  95. package/docs/architecture/python-integration.md +93 -0
  96. package/docs/architecture/resolution.md +92 -0
  97. package/docs/cli/build.md +78 -0
  98. package/docs/cli/dev.md +90 -0
  99. package/docs/cli/index.md +15 -0
  100. package/docs/cli/start.md +45 -0
  101. package/docs/development/contributing.md +74 -0
  102. package/docs/development/index.md +12 -0
  103. package/docs/development/internals.md +101 -0
  104. package/docs/guide/configuration.md +89 -0
  105. package/docs/guide/index.md +13 -0
  106. package/docs/guide/project-structure.md +75 -0
  107. package/docs/guide/quickstart.md +113 -0
  108. package/docs/index.md +16 -0
  109. package/package.json +5 -5
  110. package/src/cli.ts +1 -1
  111. package/src/config/config.ts +11 -0
  112. package/src/dev-engine/handlers/base-handler.ts +4 -2
  113. package/src/dev-engine/handlers/node-module-handler.ts +51 -78
  114. package/src/dev-engine/middleware/middleware-setup.ts +1 -0
  115. package/src/dev-engine/server.ts +38 -33
  116. package/src/kernel/package-finder.ts +59 -43
  117. package/src/resolution/bare-import-resolver.ts +14 -4
  118. package/src/resolution/path/file-path-resolver.ts +44 -10
  119. package/src/resolution/url-resolver.ts +1 -1
  120. package/dist/builder.d.ts.map +0 -1
  121. package/dist/cache/compilation-cache.d.ts.map +0 -1
  122. package/dist/config-loader.d.ts.map +0 -1
  123. package/dist/config.d.ts.map +0 -1
  124. package/dist/dev/pythonDevManager.d.ts.map +0 -1
  125. package/dist/env.d.ts +0 -19
  126. package/dist/env.d.ts.map +0 -1
  127. package/dist/env.js +0 -112
  128. package/dist/handlers/base-handler.d.ts.map +0 -1
  129. package/dist/handlers/base-handler.js +0 -38
  130. package/dist/handlers/js-handler.d.ts.map +0 -1
  131. package/dist/handlers/mjs-handler.d.ts.map +0 -1
  132. package/dist/handlers/node-module-handler.d.ts.map +0 -1
  133. package/dist/handlers/ts-handler.d.ts.map +0 -1
  134. package/dist/handlers/ui-handler.d.ts.map +0 -1
  135. package/dist/handlers/ui-handler.js +0 -182
  136. package/dist/handlers/uix-handler.d.ts.map +0 -1
  137. package/dist/handlers/uix-handler.js +0 -135
  138. package/dist/hmr.d.ts.map +0 -1
  139. package/dist/import-rewriter.d.ts.map +0 -1
  140. package/dist/import-rewriter.js +0 -351
  141. package/dist/middleware/hmr-routes.d.ts.map +0 -1
  142. package/dist/middleware/middleware-setup.d.ts +0 -23
  143. package/dist/middleware/middleware-setup.d.ts.map +0 -1
  144. package/dist/middleware/middleware-setup.js +0 -596
  145. package/dist/middleware/static-files.d.ts.map +0 -1
  146. package/dist/proxy/SwiteProxyError.d.ts.map +0 -1
  147. package/dist/proxy/proxyToPython.d.ts.map +0 -1
  148. package/dist/resolver/bare-import-resolver.d.ts.map +0 -1
  149. package/dist/resolver/symlink-registry.d.ts.map +0 -1
  150. package/dist/resolver/url-resolver.d.ts.map +0 -1
  151. package/dist/resolver/workspace-package-resolver.d.ts.map +0 -1
  152. package/dist/resolver/workspace-package-resolver.js +0 -185
  153. package/dist/resolver.d.ts.map +0 -1
  154. package/dist/router/file-router.d.ts.map +0 -1
  155. package/dist/server.d.ts.map +0 -1
  156. package/dist/utils/cdn-fallback.d.ts.map +0 -1
  157. package/dist/utils/file-path-resolver.d.ts.map +0 -1
  158. package/dist/utils/generate-import-map-cli.d.ts.map +0 -1
  159. package/dist/utils/generate-import-map.d.ts.map +0 -1
  160. package/dist/utils/package-finder.d.ts.map +0 -1
  161. package/dist/utils/package-finder.js +0 -161
  162. package/dist/utils/package-registry.d.ts.map +0 -1
  163. package/dist/utils/workspace.d.ts.map +0 -1
  164. /package/dist/{proxy → adapters/proxy}/SwiteProxyError.d.ts +0 -0
  165. /package/dist/{proxy → adapters/proxy}/SwiteProxyError.js +0 -0
  166. /package/dist/{proxy → adapters/proxy}/proxyToPython.js +0 -0
  167. /package/dist/{builder.d.ts → build-engine/builder.d.ts} +0 -0
  168. /package/dist/{config-loader.d.ts → config/config-loader.d.ts} +0 -0
  169. /package/dist/{config-loader.js → config/config-loader.js} +0 -0
  170. /package/dist/{config.js → config/config.js} +0 -0
  171. /package/dist/{handlers → dev-engine/handlers}/js-handler.d.ts +0 -0
  172. /package/dist/{handlers → dev-engine/handlers}/mjs-handler.d.ts +0 -0
  173. /package/dist/{handlers → dev-engine/handlers}/node-module-handler.d.ts +0 -0
  174. /package/dist/{hmr.d.ts → dev-engine/hmr/hmr.d.ts} +0 -0
  175. /package/dist/{middleware → dev-engine/middleware}/static-files.d.ts +0 -0
  176. /package/dist/{server.d.ts → dev-engine/server.d.ts} +0 -0
  177. /package/dist/{cache → internal/cache}/compilation-cache.d.ts +0 -0
  178. /package/dist/{utils → internal}/generate-import-map-cli.d.ts +0 -0
  179. /package/dist/{utils → internal}/generate-import-map.d.ts +0 -0
  180. /package/dist/{utils → kernel}/package-registry.d.ts +0 -0
  181. /package/dist/{utils → kernel}/package-registry.js +0 -0
  182. /package/dist/{utils → kernel}/workspace.d.ts +0 -0
  183. /package/dist/{utils → kernel}/workspace.js +0 -0
  184. /package/dist/{utils → resolution/cdn}/cdn-fallback.d.ts +0 -0
  185. /package/dist/{utils → resolution/cdn}/cdn-fallback.js +0 -0
  186. /package/dist/{resolver → resolution}/url-resolver.d.ts +0 -0
  187. /package/dist/{resolver → resolution}/workspace-package-resolver.d.ts +0 -0
@@ -0,0 +1,327 @@
1
+ /*
2
+ * Copyright (c) 2024 Themba Mzumara
3
+ * SWITE - SWISS Development Server
4
+ * Licensed under the MIT License.
5
+ */
6
+ import { RouteScanner } from "@swissjs/plugin-file-router/core";
7
+ import { createFileWatcher } from "@swissjs/plugin-file-router/dev";
8
+ import chalk from "chalk";
9
+ import path from "path";
10
+ import fs from "fs/promises";
11
+ import { ModuleResolver } from "../../resolution/resolver.js";
12
+ import { UIHandler } from "../handlers/ui-handler.js";
13
+ import { UIXHandler } from "../handlers/uix-handler.js";
14
+ import { TSHandler } from "../handlers/ts-handler.js";
15
+ import { JSHandler } from "../handlers/js-handler.js";
16
+ import { MJSHandler } from "../handlers/mjs-handler.js";
17
+ import { NodeModuleHandler } from "../handlers/node-module-handler.js";
18
+ import { setupStaticFiles, setupSPAFallback } from "./static-files.js";
19
+ import { setupHMRRoutes } from "./hmr-routes.js";
20
+ import { setupFileRouter, } from "../router/file-router.js";
21
+ import { HMREngine } from "../hmr/hmr.js";
22
+ import { findWorkspaceRoot } from "../../kernel/workspace.js";
23
+ import { loadImportMap } from "../../internal/generate-import-map.js";
24
+ import { loadEnv } from "../../config/env.js";
25
+ const SOURCE_EXTS = new Set([".ui", ".uix", ".ts", ".mjs"]);
26
+ function isFileNotFoundError(error) {
27
+ return (error instanceof Error &&
28
+ (("code" in error && error.code === "ENOENT") ||
29
+ ("errno" in error && error.errno === -4058)));
30
+ }
31
+ function sendSourceError(res, error, fullPath) {
32
+ if (res.headersSent)
33
+ return;
34
+ const status = isFileNotFoundError(error) ? 404 : 500;
35
+ res.status(status).setHeader("Content-Type", "text/plain");
36
+ res.send(isFileNotFoundError(error)
37
+ ? `File not found: ${fullPath}`
38
+ : `Error loading module: ${error instanceof Error ? error.message : String(error)}`);
39
+ }
40
+ /**
41
+ * Setup all middleware for the SWITE server.
42
+ *
43
+ * Middleware registration order (matters for Express):
44
+ * 1. File router + HMR routes
45
+ * 2. /packages source files
46
+ * 3. /src source files (highest priority for that prefix)
47
+ * 4. /lib source files (pre-static guard)
48
+ * 5. .ui/.uix MIME-type guard (belt-and-suspenders for slipped-through requests)
49
+ * 6. /.skltn/modules.css → 204
50
+ * 7. Static file serving (public/, node_modules/, lib/)
51
+ * 8. General source-file transformation (all other paths)
52
+ * 9. SPA fallback
53
+ */
54
+ export async function setupMiddleware(app, config) {
55
+ // ── 1. File router + HMR ───────────────────────────────────────────────────
56
+ const fileRouterResult = await setupFileRouter({
57
+ root: config.root,
58
+ hmr: config.hmr,
59
+ });
60
+ setupHMRRoutes(app, {
61
+ hmr: config.hmr,
62
+ routes: fileRouterResult.routes,
63
+ });
64
+ // ── Workspace + import-map setup ───────────────────────────────────────────
65
+ const workspaceRoot = await findWorkspaceRoot(config.root);
66
+ console.log(chalk.blue(`[SWITE] App root: ${config.root}`));
67
+ console.log(chalk.blue(`[SWITE] Workspace root: ${workspaceRoot}`));
68
+ const { join } = await import("node:path");
69
+ const importMapPath = join(config.root, ".swite", "import-map.json");
70
+ const importMap = await loadImportMap(importMapPath);
71
+ if (importMap) {
72
+ config.resolver.setImportMap(importMap);
73
+ }
74
+ else {
75
+ console.log(chalk.yellow(`[SWITE] No import map at ${importMapPath}, using runtime resolution`));
76
+ }
77
+ // ── Load .env files for import.meta.env inlining ──────────────────────────
78
+ const mode = process.env.NODE_ENV === "production" ? "production" : "development";
79
+ const env = loadEnv(config.root, mode);
80
+ // ── Create handlers ────────────────────────────────────────────────────────
81
+ const handlerContext = {
82
+ resolver: config.resolver,
83
+ root: config.root,
84
+ workspaceRoot,
85
+ env,
86
+ };
87
+ const uiHandler = new UIHandler(handlerContext);
88
+ const uixHandler = new UIXHandler(handlerContext);
89
+ const tsHandler = new TSHandler(handlerContext);
90
+ const jsHandler = new JSHandler(handlerContext);
91
+ const mjsHandler = new MJSHandler(handlerContext);
92
+ const nodeModuleHandler = new NodeModuleHandler(handlerContext);
93
+ // ── 2. /packages workspace source files ────────────────────────────────────
94
+ app.use("/packages", async (req, res, next) => {
95
+ const rawUrl = req.url?.split("?")[0] || "";
96
+ const fullUrl = "/packages" + (rawUrl.startsWith("/") ? rawUrl : "/" + rawUrl);
97
+ try {
98
+ if (fullUrl.endsWith(".ts") && !fullUrl.endsWith(".d.ts")) {
99
+ await tsHandler.handle(fullUrl, res);
100
+ if (res.headersSent)
101
+ return;
102
+ }
103
+ else if (fullUrl.endsWith(".js") || fullUrl.endsWith(".mjs")) {
104
+ await (fullUrl.endsWith(".js") ? jsHandler : mjsHandler).handle(fullUrl, res);
105
+ if (res.headersSent)
106
+ return;
107
+ }
108
+ }
109
+ catch (error) {
110
+ console.error(chalk.red(`[/packages] Error ${fullUrl}:`), error);
111
+ if (!res.headersSent)
112
+ res.status(500).setHeader("Content-Type", "text/plain").send(String(error));
113
+ return;
114
+ }
115
+ next();
116
+ });
117
+ // ── 3. /src source files ───────────────────────────────────────────────────
118
+ // When Express mounts at "/src", req.url is relative (e.g. "/index.ui")
119
+ app.use("/src", async (req, res, next) => {
120
+ const relativeUrl = req.url.split("?")[0];
121
+ const fullPath = "/src" + relativeUrl;
122
+ if (relativeUrl.endsWith(".ui")) {
123
+ if (res.headersSent)
124
+ return;
125
+ if (req.method === "HEAD") {
126
+ res.setHeader("Content-Type", "application/javascript; charset=utf-8");
127
+ res.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
128
+ res.setHeader("Pragma", "no-cache");
129
+ res.setHeader("Expires", "0");
130
+ return res.status(200).end();
131
+ }
132
+ try {
133
+ await uiHandler.handle(fullPath, res);
134
+ if (!res.headersSent)
135
+ res.status(500).send("Internal server error: handler did not send response");
136
+ }
137
+ catch (error) {
138
+ console.error(chalk.red(`[/src] .ui error ${fullPath}:`), error);
139
+ sendSourceError(res, error, fullPath);
140
+ }
141
+ return;
142
+ }
143
+ if (relativeUrl.endsWith(".uix")) {
144
+ try {
145
+ await uixHandler.handle(fullPath, res);
146
+ if (!res.headersSent)
147
+ res.status(500).setHeader("Content-Type", "text/plain").send("Error loading module");
148
+ }
149
+ catch (error) {
150
+ console.error(chalk.red(`[/src] .uix error ${fullPath}:`), error);
151
+ sendSourceError(res, error, fullPath);
152
+ }
153
+ return;
154
+ }
155
+ if (relativeUrl.endsWith(".ts") && !relativeUrl.endsWith(".d.ts")) {
156
+ try {
157
+ await tsHandler.handle(fullPath, res);
158
+ if (!res.headersSent)
159
+ res.status(500).setHeader("Content-Type", "text/plain").send("Error loading module");
160
+ }
161
+ catch (error) {
162
+ console.error(chalk.red(`[/src] .ts error ${fullPath}:`), error);
163
+ sendSourceError(res, error, fullPath);
164
+ }
165
+ return;
166
+ }
167
+ if (relativeUrl.endsWith(".js") || relativeUrl.endsWith(".mjs")) {
168
+ try {
169
+ await (relativeUrl.endsWith(".js") ? jsHandler : mjsHandler).handle(fullPath, res);
170
+ if (res.headersSent)
171
+ return;
172
+ }
173
+ catch {
174
+ // fall through to static file serving below
175
+ }
176
+ if (!res.headersSent)
177
+ return next();
178
+ return;
179
+ }
180
+ // Other files under /src (CSS, images, etc.) — serve as static
181
+ const filePath = path.join(config.root, "src", relativeUrl);
182
+ try {
183
+ const stats = await fs.stat(filePath);
184
+ if (!stats.isFile())
185
+ return next();
186
+ const ext = path.extname(relativeUrl).toLowerCase();
187
+ // Guard: source files should never reach here
188
+ if (SOURCE_EXTS.has(ext) || ext === ".js") {
189
+ res.status(404).setHeader("Content-Type", "text/plain");
190
+ return res.send(`Source file not found: ${fullPath}`);
191
+ }
192
+ const contentTypeMap = {
193
+ ".css": "text/css",
194
+ ".json": "application/json",
195
+ ".png": "image/png",
196
+ ".jpg": "image/jpeg",
197
+ ".jpeg": "image/jpeg",
198
+ ".gif": "image/gif",
199
+ ".svg": "image/svg+xml",
200
+ ".webp": "image/webp",
201
+ };
202
+ const content = await fs.readFile(filePath);
203
+ res.setHeader("Content-Type", contentTypeMap[ext] || "application/octet-stream");
204
+ res.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
205
+ res.setHeader("Pragma", "no-cache");
206
+ res.setHeader("Expires", "0");
207
+ res.send(content);
208
+ }
209
+ catch {
210
+ res.status(404).setHeader("Content-Type", "text/plain");
211
+ res.send(`File not found: ${fullPath}`);
212
+ }
213
+ });
214
+ // ── 4. /lib source files (pre-static guard) ────────────────────────────────
215
+ app.use(async (req, res, next) => {
216
+ const url = req.url.split("?")[0];
217
+ if (!url.startsWith("/lib/"))
218
+ return next();
219
+ const isSource = url.endsWith(".ui") ||
220
+ url.endsWith(".uix") ||
221
+ url.endsWith(".ts") ||
222
+ (url.endsWith(".js") && !url.includes("node_modules"));
223
+ if (!isSource)
224
+ return next();
225
+ res.setHeader("Content-Type", "application/javascript; charset=utf-8");
226
+ try {
227
+ if (url.endsWith(".ui")) {
228
+ await uiHandler.handle(url, res);
229
+ return;
230
+ }
231
+ if (url.endsWith(".uix")) {
232
+ await uixHandler.handle(url, res);
233
+ return;
234
+ }
235
+ // .ts/.js — fall through to general middleware
236
+ return next();
237
+ }
238
+ catch (error) {
239
+ console.error(chalk.red(`[/lib] Error ${url}:`), error);
240
+ if (!res.headersSent)
241
+ res.status(500).send("Internal server error");
242
+ }
243
+ });
244
+ // ── 5. .ui/.uix MIME guard (belt-and-suspenders) ──────────────────────────
245
+ app.use((req, res, next) => {
246
+ const url = req.url.split("?")[0];
247
+ if (url.endsWith(".ui") || url.endsWith(".uix")) {
248
+ res.setHeader("Content-Type", "application/javascript; charset=utf-8");
249
+ }
250
+ next();
251
+ });
252
+ // ── 6. /.skltn/modules.css → 204 (dev mode — CSS not bundled) ─────────────
253
+ app.use("/.skltn/modules.css", (_req, res) => {
254
+ res.status(204).end();
255
+ });
256
+ // ── 7. Static file serving ─────────────────────────────────────────────────
257
+ await setupStaticFiles(app, {
258
+ root: config.root,
259
+ publicDir: config.publicDir,
260
+ workspaceRoot: config.workspaceRoot ?? null,
261
+ });
262
+ // ── 8. General source-file transformation ──────────────────────────────────
263
+ app.use(async (req, res, next) => {
264
+ const url = req.url.split("?")[0];
265
+ // /src is already handled above
266
+ if (url.startsWith("/src"))
267
+ return next();
268
+ // /lib static files are handled by static middleware; source files handled above
269
+ if (url.startsWith("/lib/")) {
270
+ const isSource = url.endsWith(".ui") ||
271
+ url.endsWith(".uix") ||
272
+ url.endsWith(".ts") ||
273
+ (url.endsWith(".js") && !url.includes("node_modules"));
274
+ if (!isSource)
275
+ return next();
276
+ }
277
+ try {
278
+ if (url.endsWith(".ui")) {
279
+ res.setHeader("Content-Type", "application/javascript; charset=utf-8");
280
+ if (res.headersSent)
281
+ return;
282
+ await uiHandler.handle(url, res);
283
+ if (!res.headersSent)
284
+ res.status(500).send("Internal server error: handler did not send response");
285
+ return;
286
+ }
287
+ if (url.endsWith(".uix")) {
288
+ await uixHandler.handle(url, res);
289
+ return;
290
+ }
291
+ if (url.endsWith(".ts") && !url.endsWith(".d.ts")) {
292
+ await tsHandler.handle(url, res);
293
+ return;
294
+ }
295
+ if ((url.endsWith(".js") || url.endsWith(".mjs")) && url.includes("node_modules")) {
296
+ await nodeModuleHandler.handle(url, res);
297
+ return;
298
+ }
299
+ if (url.endsWith(".js")) {
300
+ await jsHandler.handle(url, res);
301
+ return;
302
+ }
303
+ if (url.endsWith(".mjs")) {
304
+ await mjsHandler.handle(url, res);
305
+ return;
306
+ }
307
+ // Static assets — pass to static middleware
308
+ next();
309
+ }
310
+ catch (error) {
311
+ console.error(chalk.red(`[middleware] Error ${url}:`), error);
312
+ if (!res.headersSent) {
313
+ res.status(500).send(`Error: ${error instanceof Error ? error.message : String(error)}`);
314
+ }
315
+ }
316
+ });
317
+ // ── 9. SPA fallback ────────────────────────────────────────────────────────
318
+ await setupSPAFallback(app, {
319
+ root: config.root,
320
+ publicDir: config.publicDir,
321
+ });
322
+ return {
323
+ routes: fileRouterResult.routes,
324
+ routeScanner: fileRouterResult.routeScanner,
325
+ routeWatcher: fileRouterResult.routeWatcher,
326
+ };
327
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static-files.d.ts","sourceRoot":"","sources":["../../../src/dev-engine/middleware/static-files.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAMvC,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,OAAO,EACZ,MAAM,EAAE,iBAAiB,GACxB,OAAO,CAAC,IAAI,CAAC,CAuYf;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,OAAO,EACZ,MAAM,EAAE,iBAAiB,GACxB,OAAO,CAAC,IAAI,CAAC,CA+Sf"}
@@ -7,7 +7,7 @@ import express from "express";
7
7
  import { promises as fs, realpathSync, existsSync } from "node:fs";
8
8
  import path from "node:path";
9
9
  import chalk from "chalk";
10
- import { findWorkspaceRoot } from "../utils/workspace.js";
10
+ import { findWorkspaceRoot } from "../../kernel/workspace.js";
11
11
  /**
12
12
  * Setup static file serving for public directory, node_modules, and workspace packages
13
13
  */
@@ -86,7 +86,7 @@ export async function setupStaticFiles(app, config) {
86
86
  return next();
87
87
  }
88
88
  // Strip leading slash: req.path inside app.use('/node_modules') is already
89
- // relative to that prefix, e.g. '/@kibologic/shell/design-tokens/primitive.css'
89
+ // relative to that prefix, e.g. '/@swissjs/shell/design-tokens/primitive.css'
90
90
  const relPath = req.path.replace(/^\/+/, "");
91
91
  if (!relPath)
92
92
  return next();
@@ -1,4 +1,4 @@
1
- import type { PythonServiceConfig } from "../config.js";
1
+ import type { PythonServiceConfig } from "../config/config.js";
2
2
  /**
3
3
  * Spawn the Python service and wait until its health endpoint responds 200.
4
4
  * Streams stdout/stderr line-buffered, prefixed with [python].
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pythonDevManager.d.ts","sourceRoot":"","sources":["../../src/dev-engine/pythonDevManager.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAQ/D;;;;GAIG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,mBAAmB,EAC3B,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC,CAuCf;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAM3C"}
@@ -1,7 +1,7 @@
1
1
  import { spawn } from "node:child_process";
2
2
  import { resolve } from "node:path";
3
3
  import chalk from "chalk";
4
- import { initPythonProxy } from "../proxy/proxyToPython.js";
4
+ import { initPythonProxy } from "../adapters/proxy/proxyToPython.js";
5
5
  const POLL_INTERVAL_MS = 500;
6
6
  const HEALTH_TIMEOUT_MS = 15000;
7
7
  const BACKOFF_THRESHOLD = 5;
@@ -1,7 +1,7 @@
1
- import type { RouteDefinition } from "@kibologic/core";
2
- import { RouteScanner } from "@kibologic/plugin-file-router/core";
3
- import { createFileWatcher } from "@kibologic/plugin-file-router/dev";
4
- import { HMREngine } from "../hmr.js";
1
+ import type { RouteDefinition } from "@swissjs/core";
2
+ import { RouteScanner } from "@swissjs/plugin-file-router/core";
3
+ import { createFileWatcher } from "@swissjs/plugin-file-router/dev";
4
+ import { HMREngine } from "../hmr/hmr.js";
5
5
  export interface FileRouterConfig {
6
6
  root: string;
7
7
  hmr: HMREngine;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-router.d.ts","sourceRoot":"","sources":["../../../src/dev-engine/router/file-router.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAG1C,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,SAAS,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;IAClC,YAAY,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC,GAAG,IAAI,CAAC;IACnE,MAAM,EAAE,eAAe,EAAE,CAAC;CAC3B;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC,gBAAgB,CAAC,CAmI3B"}
@@ -6,10 +6,10 @@
6
6
  import { promises as fs } from "node:fs";
7
7
  import path from "node:path";
8
8
  import chalk from "chalk";
9
- import { RouteScanner } from "@kibologic/plugin-file-router/core";
10
- import { createFileWatcher } from "@kibologic/plugin-file-router/dev";
11
- import { HMREngine } from "../hmr.js";
12
- import { findWorkspaceRoot } from "../utils/workspace.js";
9
+ import { RouteScanner } from "@swissjs/plugin-file-router/core";
10
+ import { createFileWatcher } from "@swissjs/plugin-file-router/dev";
11
+ import { HMREngine } from "../hmr/hmr.js";
12
+ import { findWorkspaceRoot } from "../../kernel/workspace.js";
13
13
  /**
14
14
  * Setup file-based routing
15
15
  * Scans for route files in pages/ directories and watches for changes
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/dev-engine/server.ts"],"names":[],"mappings":"AAoBA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IAKb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,GAAG,CAAa;IACxB,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,GAAG,CAAY;IACvB,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,YAAY,CACb;IACP,OAAO,CAAC,MAAM,CAAyB;gBAE3B,MAAM,GAAE,OAAO,CAAC,WAAW,CAAM;YAe/B,iBAAiB;IAuBzB,KAAK;CA0EZ"}
@@ -3,17 +3,18 @@
3
3
  * SWITE - SWISS Development Server
4
4
  * Licensed under the MIT License.
5
5
  */
6
- import { RouteScanner } from "@kibologic/plugin-file-router/core";
7
- import { createFileWatcher } from "@kibologic/plugin-file-router/dev";
6
+ import { RouteScanner } from "@swissjs/plugin-file-router/core";
7
+ import { createFileWatcher } from "@swissjs/plugin-file-router/dev";
8
8
  import express from "express";
9
9
  import path from "node:path";
10
10
  import { promises as fs } from "node:fs";
11
- import { ModuleResolver } from "./resolver.js";
12
- import { HMREngine } from "./hmr.js";
11
+ import { ModuleResolver } from "../resolution/resolver.js";
12
+ import { HMREngine } from "./hmr/hmr.js";
13
13
  import chalk from "chalk";
14
14
  import { setupMiddleware } from "./middleware/middleware-setup.js";
15
- import { buildSymlinkRegistry } from "./resolver/symlink-registry.js";
16
- import { findSwissLibMonorepo } from "./utils/package-finder.js";
15
+ import { buildSymlinkRegistry } from "../resolution/symlink-registry.js";
16
+ import { findSwissLibMonorepo } from "../kernel/package-finder.js";
17
+ import { loadUserConfig } from "../config/config-loader.js";
17
18
  export class SwiteServer {
18
19
  constructor(config = {}) {
19
20
  this.app = express();
@@ -86,6 +87,8 @@ export class SwiteServer {
86
87
  console.warn(`[SWITE] Symlink registry build failed: ${err.message}`);
87
88
  }
88
89
  console.timeEnd("Symlink Registry");
90
+ // Load user config (swiss.config.ts) so internalScopes etc. flow into handlers
91
+ const userConfig = await loadUserConfig(this.config.root);
89
92
  // Setup middleware
90
93
  console.time("Middleware Setup");
91
94
  const workspaceRoot = await this.findWorkspaceRoot(this.config.root);
@@ -95,6 +98,7 @@ export class SwiteServer {
95
98
  publicDir: this.config.publicDir,
96
99
  resolver: this.resolver,
97
100
  hmr: this.hmr,
101
+ userConfig,
98
102
  });
99
103
  this.routes = middlewareResult.routes;
100
104
  this.routeScanner = middlewareResult.routeScanner;
package/dist/index.d.ts CHANGED
@@ -1,14 +1,14 @@
1
- export { SwiteServer } from "./server.js";
2
- export type { SwiteConfig } from "./server.js";
3
- export { SwiteBuilder, build } from "./builder.js";
4
- export type { BuildConfig } from "./builder.js";
5
- export { ModuleResolver } from "./resolver.js";
6
- export { HMREngine } from "./hmr.js";
7
- export { defineConfig } from "./config.js";
8
- export type { SwiteUserConfig, ServerConfig, ServicesConfig, PythonServiceConfig, } from "./config.js";
9
- export { proxyToPython, initPythonProxy, setProductionMode } from "./proxy/proxyToPython.js";
10
- export type { ProxyOptions } from "./proxy/proxyToPython.js";
11
- export { SwiteProxyError } from "./proxy/SwiteProxyError.js";
12
- export { loadUserConfig } from "./config-loader.js";
13
- export { startPythonDevService, stopPythonDevService, } from "./dev/pythonDevManager.js";
1
+ export { SwiteServer } from "./dev-engine/server.js";
2
+ export type { SwiteConfig } from "./dev-engine/server.js";
3
+ export { SwiteBuilder, build } from "./build-engine/builder.js";
4
+ export type { BuildConfig } from "./build-engine/builder.js";
5
+ export { ModuleResolver } from "./resolution/resolver.js";
6
+ export { HMREngine } from "./dev-engine/hmr/hmr.js";
7
+ export { defineConfig } from "./config/config.js";
8
+ export type { SwiteUserConfig, ServerConfig, ServicesConfig, PythonServiceConfig, } from "./config/config.js";
9
+ export { proxyToPython, initPythonProxy, setProductionMode } from "./adapters/proxy/proxyToPython.js";
10
+ export type { ProxyOptions } from "./adapters/proxy/proxyToPython.js";
11
+ export { SwiteProxyError } from "./adapters/proxy/SwiteProxyError.js";
12
+ export { loadUserConfig } from "./config/config-loader.js";
13
+ export { startPythonDevService, stopPythonDevService, } from "./dev-engine/pythonDevManager.js";
14
14
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AACnD,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,YAAY,EACV,eAAe,EACf,YAAY,EACZ,cAAc,EACd,mBAAmB,GACpB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7F,YAAY,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EACL,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,2BAA2B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,YAAY,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAChE,YAAY,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,YAAY,EACV,eAAe,EACf,YAAY,EACZ,cAAc,EACd,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtG,YAAY,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EACL,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,kCAAkC,CAAC"}
package/dist/index.js CHANGED
@@ -2,12 +2,12 @@
2
2
  * SWITE - SWISS Development Server
3
3
  * Main exports
4
4
  */
5
- export { SwiteServer } from "./server.js";
6
- export { SwiteBuilder, build } from "./builder.js";
7
- export { ModuleResolver } from "./resolver.js";
8
- export { HMREngine } from "./hmr.js";
9
- export { defineConfig } from "./config.js";
10
- export { proxyToPython, initPythonProxy, setProductionMode } from "./proxy/proxyToPython.js";
11
- export { SwiteProxyError } from "./proxy/SwiteProxyError.js";
12
- export { loadUserConfig } from "./config-loader.js";
13
- export { startPythonDevService, stopPythonDevService, } from "./dev/pythonDevManager.js";
5
+ export { SwiteServer } from "./dev-engine/server.js";
6
+ export { SwiteBuilder, build } from "./build-engine/builder.js";
7
+ export { ModuleResolver } from "./resolution/resolver.js";
8
+ export { HMREngine } from "./dev-engine/hmr/hmr.js";
9
+ export { defineConfig } from "./config/config.js";
10
+ export { proxyToPython, initPythonProxy, setProductionMode } from "./adapters/proxy/proxyToPython.js";
11
+ export { SwiteProxyError } from "./adapters/proxy/SwiteProxyError.js";
12
+ export { loadUserConfig } from "./config/config-loader.js";
13
+ export { startPythonDevService, stopPythonDevService, } from "./dev-engine/pythonDevManager.js";
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compilation-cache.d.ts","sourceRoot":"","sources":["../../../src/internal/cache/compilation-cache.ts"],"names":[],"mappings":"AAmBA;;;GAGG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,KAAK,CAAiC;IAC9C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAEhC;;OAEG;IACG,GAAG,CACP,QAAQ,EAAE,MAAM,EAChB,eAAe,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,GACvD,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAgFzB;;OAEG;IACG,GAAG,CACP,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,GACvD,OAAO,CAAC,IAAI,CAAC;IAiChB;;OAEG;IACH,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAI7B;;OAEG;IACH,QAAQ,IAAI,IAAI;IAKhB;;OAEG;IACH,QAAQ,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;CAM9C;AAGD,eAAO,MAAM,gBAAgB,kBAAyB,CAAC"}
@@ -38,10 +38,11 @@ export class CompilationCache {
38
38
  this.cache.delete(filePath);
39
39
  return null;
40
40
  }
41
- // Check if dependencies changed
41
+ // Check if dependencies changed (order-independent comparison)
42
42
  const currentDeps = await getDependencies(entry.compiled);
43
+ const prevSet = new Set(entry.dependencies);
43
44
  const depsChanged = currentDeps.length !== entry.dependencies.length ||
44
- currentDeps.some((dep, i) => dep !== entry.dependencies[i]);
45
+ currentDeps.some((dep) => !prevSet.has(dep));
45
46
  if (depsChanged) {
46
47
  console.log(chalk.yellow(`[Cache] Invalidating ${filePath}: dependencies changed`));
47
48
  this.cache.delete(filePath);
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-import-map-cli.d.ts","sourceRoot":"","sources":["../../src/internal/generate-import-map-cli.ts"],"names":[],"mappings":""}
@@ -6,7 +6,7 @@
6
6
  * Licensed under the MIT License.
7
7
  */
8
8
  import { generateImportMap, saveImportMap } from "./generate-import-map.js";
9
- import { findWorkspaceRoot } from "./workspace.js";
9
+ import { findWorkspaceRoot } from "../kernel/workspace.js";
10
10
  import path from "node:path";
11
11
  import { fileURLToPath } from "node:url";
12
12
  const __filename = fileURLToPath(import.meta.url);
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-import-map.d.ts","sourceRoot":"","sources":["../../src/internal/generate-import-map.ts"],"names":[],"mappings":"AAcA,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE;QACP,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC;KAC7B,CAAC;CACH;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,MAAM,GAAG,IAAI,GAC3B,OAAO,CAAC,SAAS,CAAC,CAkGpB;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAIf;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAO3B"}
@@ -6,10 +6,10 @@
6
6
  */
7
7
  import { promises as fs } from "node:fs";
8
8
  import path from "node:path";
9
- import { ModuleResolver } from "../resolver.js";
9
+ import { ModuleResolver } from "../resolution/resolver.js";
10
10
  import chalk from "chalk";
11
- import { getPackageRegistry } from "./package-registry.js";
12
- import { findSwissLibMonorepo } from "./package-finder.js";
11
+ import { getPackageRegistry } from "../kernel/package-registry.js";
12
+ import { findSwissLibMonorepo } from "../kernel/package-finder.js";
13
13
  /**
14
14
  * Scan workspace and generate import map
15
15
  * This pre-resolves all known packages to eliminate runtime scanning
@@ -7,14 +7,16 @@ export interface PackageLocation {
7
7
  type: 'swiss-lib' | 'workspace' | 'node_modules';
8
8
  }
9
9
  /**
10
- * Find swiss-lib monorepo by searching for swiss-lib/package.json or swiss-lib/packages/core
10
+ * Find any sibling monorepo by searching for its package.json
11
+ */
12
+ export declare function findSiblingRepository(startPath: string, repoName: string): Promise<string | null>;
13
+ /**
14
+ * Backward compatibility wrapper for finding swiss-lib
11
15
  */
12
16
  export declare function findSwissLibMonorepo(startPath: string): Promise<string | null>;
13
17
  /**
14
- * Find a specific package by name, searching in:
15
- * 1. node_modules (local and workspace)
16
- * 2. swiss-lib/packages (if found)
17
- * 3. workspace packages (lib/, packages/, modules/)
18
+ * Find a specific package by name, with priority given based on environment.
19
+ * In development, we prioritize local sibling source code.
18
20
  */
19
21
  export declare function findPackage(packageName: string, startPath: string, workspaceRoot?: string | null): Promise<PackageLocation | null>;
20
22
  /**
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-finder.d.ts","sourceRoot":"","sources":["../../src/kernel/package-finder.ts"],"names":[],"mappings":"AASA;;;GAGG;AAEH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,WAAW,GAAG,WAAW,GAAG,cAAc,CAAC;CAClD;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAyBvG;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAEpF;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,GAC5B,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAuEjC;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CA2B7E"}