mates-fullstack 1.0.0-beta.1

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 (202) hide show
  1. package/README.md +311 -0
  2. package/dist/arctic-auth.d.ts +101 -0
  3. package/dist/arctic-auth.d.ts.map +1 -0
  4. package/dist/arctic-auth.js +538 -0
  5. package/dist/arctic-auth.js.map +1 -0
  6. package/dist/asset-manifest.d.ts +14 -0
  7. package/dist/asset-manifest.d.ts.map +1 -0
  8. package/dist/asset-manifest.js +102 -0
  9. package/dist/asset-manifest.js.map +1 -0
  10. package/dist/browser.d.ts +18 -0
  11. package/dist/browser.d.ts.map +1 -0
  12. package/dist/browser.js +25 -0
  13. package/dist/browser.js.map +1 -0
  14. package/dist/build-esbuild.d.ts +29 -0
  15. package/dist/build-esbuild.d.ts.map +1 -0
  16. package/dist/build-esbuild.js +699 -0
  17. package/dist/build-esbuild.js.map +1 -0
  18. package/dist/build-prod.d.ts +126 -0
  19. package/dist/build-prod.d.ts.map +1 -0
  20. package/dist/build-prod.js +1014 -0
  21. package/dist/build-prod.js.map +1 -0
  22. package/dist/cli-new.d.ts +14 -0
  23. package/dist/cli-new.d.ts.map +1 -0
  24. package/dist/cli-new.js +637 -0
  25. package/dist/cli-new.js.map +1 -0
  26. package/dist/client.d.ts +43 -0
  27. package/dist/client.d.ts.map +1 -0
  28. package/dist/client.js +130 -0
  29. package/dist/client.js.map +1 -0
  30. package/dist/cors.d.ts +16 -0
  31. package/dist/cors.d.ts.map +1 -0
  32. package/dist/cors.js +60 -0
  33. package/dist/cors.js.map +1 -0
  34. package/dist/ctx.d.ts +78 -0
  35. package/dist/ctx.d.ts.map +1 -0
  36. package/dist/ctx.js +280 -0
  37. package/dist/ctx.js.map +1 -0
  38. package/dist/dev-watcher.d.ts +23 -0
  39. package/dist/dev-watcher.d.ts.map +1 -0
  40. package/dist/dev-watcher.js +136 -0
  41. package/dist/dev-watcher.js.map +1 -0
  42. package/dist/docs-generator.d.ts +69 -0
  43. package/dist/docs-generator.d.ts.map +1 -0
  44. package/dist/docs-generator.js +557 -0
  45. package/dist/docs-generator.js.map +1 -0
  46. package/dist/docs-page.d.ts +20 -0
  47. package/dist/docs-page.d.ts.map +1 -0
  48. package/dist/docs-page.js +1152 -0
  49. package/dist/docs-page.js.map +1 -0
  50. package/dist/download.d.ts +78 -0
  51. package/dist/download.d.ts.map +1 -0
  52. package/dist/download.js +202 -0
  53. package/dist/download.js.map +1 -0
  54. package/dist/env-loader.d.ts +76 -0
  55. package/dist/env-loader.d.ts.map +1 -0
  56. package/dist/env-loader.js +213 -0
  57. package/dist/env-loader.js.map +1 -0
  58. package/dist/errors.d.ts +146 -0
  59. package/dist/errors.d.ts.map +1 -0
  60. package/dist/errors.js +386 -0
  61. package/dist/errors.js.map +1 -0
  62. package/dist/head.d.ts +31 -0
  63. package/dist/head.d.ts.map +1 -0
  64. package/dist/head.js +245 -0
  65. package/dist/head.js.map +1 -0
  66. package/dist/index.d.ts +30 -0
  67. package/dist/index.d.ts.map +1 -0
  68. package/dist/index.js +30 -0
  69. package/dist/index.js.map +1 -0
  70. package/dist/internal-prefixes.d.ts +16 -0
  71. package/dist/internal-prefixes.d.ts.map +1 -0
  72. package/dist/internal-prefixes.js +16 -0
  73. package/dist/internal-prefixes.js.map +1 -0
  74. package/dist/internal.d.ts +25 -0
  75. package/dist/internal.d.ts.map +1 -0
  76. package/dist/internal.js +25 -0
  77. package/dist/internal.js.map +1 -0
  78. package/dist/jwt.d.ts +166 -0
  79. package/dist/jwt.d.ts.map +1 -0
  80. package/dist/jwt.js +261 -0
  81. package/dist/jwt.js.map +1 -0
  82. package/dist/log.d.ts +44 -0
  83. package/dist/log.d.ts.map +1 -0
  84. package/dist/log.js +66 -0
  85. package/dist/log.js.map +1 -0
  86. package/dist/logger.d.ts +76 -0
  87. package/dist/logger.d.ts.map +1 -0
  88. package/dist/logger.js +138 -0
  89. package/dist/logger.js.map +1 -0
  90. package/dist/main-runner.d.ts +59 -0
  91. package/dist/main-runner.d.ts.map +1 -0
  92. package/dist/main-runner.js +157 -0
  93. package/dist/main-runner.js.map +1 -0
  94. package/dist/mates-auth.d.ts +82 -0
  95. package/dist/mates-auth.d.ts.map +1 -0
  96. package/dist/mates-auth.js +323 -0
  97. package/dist/mates-auth.js.map +1 -0
  98. package/dist/middleware.d.ts +30 -0
  99. package/dist/middleware.d.ts.map +1 -0
  100. package/dist/middleware.js +67 -0
  101. package/dist/middleware.js.map +1 -0
  102. package/dist/project-resolver.d.ts +102 -0
  103. package/dist/project-resolver.d.ts.map +1 -0
  104. package/dist/project-resolver.js +271 -0
  105. package/dist/project-resolver.js.map +1 -0
  106. package/dist/rate-limit.d.ts +37 -0
  107. package/dist/rate-limit.d.ts.map +1 -0
  108. package/dist/rate-limit.js +109 -0
  109. package/dist/rate-limit.js.map +1 -0
  110. package/dist/redirect.d.ts +84 -0
  111. package/dist/redirect.d.ts.map +1 -0
  112. package/dist/redirect.js +105 -0
  113. package/dist/redirect.js.map +1 -0
  114. package/dist/renderer.d.ts +91 -0
  115. package/dist/renderer.d.ts.map +1 -0
  116. package/dist/renderer.js +630 -0
  117. package/dist/renderer.js.map +1 -0
  118. package/dist/request-logger.d.ts +12 -0
  119. package/dist/request-logger.d.ts.map +1 -0
  120. package/dist/request-logger.js +55 -0
  121. package/dist/request-logger.js.map +1 -0
  122. package/dist/rest.d.ts +25 -0
  123. package/dist/rest.d.ts.map +1 -0
  124. package/dist/rest.js +93 -0
  125. package/dist/rest.js.map +1 -0
  126. package/dist/router.d.ts +71 -0
  127. package/dist/router.d.ts.map +1 -0
  128. package/dist/router.js +222 -0
  129. package/dist/router.js.map +1 -0
  130. package/dist/rpc-registry.d.ts +84 -0
  131. package/dist/rpc-registry.d.ts.map +1 -0
  132. package/dist/rpc-registry.js +271 -0
  133. package/dist/rpc-registry.js.map +1 -0
  134. package/dist/rpc-runner.d.ts +82 -0
  135. package/dist/rpc-runner.d.ts.map +1 -0
  136. package/dist/rpc-runner.js +564 -0
  137. package/dist/rpc-runner.js.map +1 -0
  138. package/dist/sanitize.d.ts +61 -0
  139. package/dist/sanitize.d.ts.map +1 -0
  140. package/dist/sanitize.js +193 -0
  141. package/dist/sanitize.js.map +1 -0
  142. package/dist/security-headers.d.ts +114 -0
  143. package/dist/security-headers.d.ts.map +1 -0
  144. package/dist/security-headers.js +121 -0
  145. package/dist/security-headers.js.map +1 -0
  146. package/dist/server-fn.d.ts +323 -0
  147. package/dist/server-fn.d.ts.map +1 -0
  148. package/dist/server-fn.js +373 -0
  149. package/dist/server-fn.js.map +1 -0
  150. package/dist/server-public.d.ts +13 -0
  151. package/dist/server-public.d.ts.map +1 -0
  152. package/dist/server-public.js +12 -0
  153. package/dist/server-public.js.map +1 -0
  154. package/dist/server-timeout.d.ts +38 -0
  155. package/dist/server-timeout.d.ts.map +1 -0
  156. package/dist/server-timeout.js +46 -0
  157. package/dist/server-timeout.js.map +1 -0
  158. package/dist/server.d.ts +100 -0
  159. package/dist/server.d.ts.map +1 -0
  160. package/dist/server.js +1218 -0
  161. package/dist/server.js.map +1 -0
  162. package/dist/socket-router.d.ts +153 -0
  163. package/dist/socket-router.d.ts.map +1 -0
  164. package/dist/socket-router.js +612 -0
  165. package/dist/socket-router.js.map +1 -0
  166. package/dist/sso.d.ts +90 -0
  167. package/dist/sso.d.ts.map +1 -0
  168. package/dist/sso.js +261 -0
  169. package/dist/sso.js.map +1 -0
  170. package/dist/ssr-context.d.ts +49 -0
  171. package/dist/ssr-context.d.ts.map +1 -0
  172. package/dist/ssr-context.js +85 -0
  173. package/dist/ssr-context.js.map +1 -0
  174. package/dist/ssr-globals.d.ts +32 -0
  175. package/dist/ssr-globals.d.ts.map +1 -0
  176. package/dist/ssr-globals.js +1010 -0
  177. package/dist/ssr-globals.js.map +1 -0
  178. package/dist/ssr-template.d.ts +73 -0
  179. package/dist/ssr-template.d.ts.map +1 -0
  180. package/dist/ssr-template.js +507 -0
  181. package/dist/ssr-template.js.map +1 -0
  182. package/dist/stack-mapper.d.ts +25 -0
  183. package/dist/stack-mapper.d.ts.map +1 -0
  184. package/dist/stack-mapper.js +139 -0
  185. package/dist/stack-mapper.js.map +1 -0
  186. package/dist/stream.d.ts +89 -0
  187. package/dist/stream.d.ts.map +1 -0
  188. package/dist/stream.js +299 -0
  189. package/dist/stream.js.map +1 -0
  190. package/dist/upload.d.ts +69 -0
  191. package/dist/upload.d.ts.map +1 -0
  192. package/dist/upload.js +110 -0
  193. package/dist/upload.js.map +1 -0
  194. package/dist/validate.d.ts +58 -0
  195. package/dist/validate.d.ts.map +1 -0
  196. package/dist/validate.js +89 -0
  197. package/dist/validate.js.map +1 -0
  198. package/dist/verify-package.d.ts +3 -0
  199. package/dist/verify-package.d.ts.map +1 -0
  200. package/dist/verify-package.js +128 -0
  201. package/dist/verify-package.js.map +1 -0
  202. package/package.json +79 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs-page.js","sourceRoot":"","sources":["../src/docs-page.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * mates-fullstack — download.ts
3
+ *
4
+ * The Download class for server functions that return file downloads.
5
+ * Returned by a server function, detected by rpc-runner,
6
+ * and written as a binary response with Content-Disposition: attachment.
7
+ *
8
+ * Usage:
9
+ * import { Download } from "mates-fullstack/server";
10
+ *
11
+ * export async function downloadReport(
12
+ * payload: { id: string },
13
+ * ctx: Context
14
+ * ) {
15
+ * const pdf = await generatePdf(payload.id);
16
+ * return new Download(pdf, { filename: "report.pdf" });
17
+ * }
18
+ *
19
+ * On the client, the RPC stub detects the binary response and
20
+ * triggers a browser download automatically — no client-side code needed.
21
+ */
22
+ /// <reference types="node" />
23
+ /// <reference types="node" />
24
+ import type { ServerResponse } from "node:http";
25
+ /**
26
+ * Returned from a server function to trigger a file download in the browser.
27
+ *
28
+ * @example
29
+ * return new Download(pdfBuffer, { filename: "report.pdf" });
30
+ * return new Download(csvString, { filename: "export.csv", contentType: "text/csv" });
31
+ * return new Download(imageBuffer, { filename: "photo.jpg", contentType: "image/jpeg" });
32
+ */
33
+ export declare class Download {
34
+ readonly data: Buffer;
35
+ readonly filename: string;
36
+ readonly contentType: string;
37
+ constructor(data: Buffer | Uint8Array | string, options: {
38
+ filename: string;
39
+ /**
40
+ * MIME type for the Content-Type header.
41
+ * Defaults to "application/octet-stream" (generic binary).
42
+ * Common values:
43
+ * - "application/pdf"
44
+ * - "text/csv"
45
+ * - "application/json"
46
+ * - "image/png"
47
+ * - "application/zip"
48
+ */
49
+ contentType?: string;
50
+ });
51
+ }
52
+ /**
53
+ * Write a Download to a Node.js ServerResponse.
54
+ * Sets Content-Type, Content-Length, and Content-Disposition headers.
55
+ * Writes the binary data and ends the response.
56
+ */
57
+ export declare function writeDownload(download: Download, res: ServerResponse): void;
58
+ /**
59
+ * Trigger a file download in the browser from a fetch Response.
60
+ * Called by the RPC stub when it detects Content-Disposition: attachment.
61
+ *
62
+ * Creates a temporary blob URL, clicks a hidden <a> element, then cleans up.
63
+ */
64
+ export declare function triggerBrowserDownload(response: Response, fallbackFilename?: string): void;
65
+ /**
66
+ * Returns true if the value is a Download instance.
67
+ * Used by rpc-runner to detect download returns.
68
+ */
69
+ export declare function isDownload(value: unknown): value is Download;
70
+ /**
71
+ * Build a Content-Disposition header for a file download.
72
+ * Uses RFC 5987 encoding for filenames with non-ASCII characters.
73
+ *
74
+ * Always includes both the ASCII fallback (filename=) and
75
+ * the encoded form (filename*=) for maximum compatibility.
76
+ */
77
+ export declare function buildContentDisposition(filename: string): string;
78
+ //# sourceMappingURL=download.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"download.d.ts","sourceRoot":"","sources":["../src/download.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;;;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAIhD;;;;;;;GAOG;AACH,qBAAa,QAAQ;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;gBAG3B,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,MAAM,EAClC,OAAO,EAAE;QACP,QAAQ,EAAE,MAAM,CAAC;QACjB;;;;;;;;;WASG;QACH,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB;CAcJ;AAID;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,QAAQ,EAClB,GAAG,EAAE,cAAc,GAClB,IAAI,CAaN;AAID;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,QAAQ,EAClB,gBAAgB,SAAa,GAC5B,IAAI,CAoBN;AAID;;;GAGG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,QAAQ,CAE5D;AAID;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAuBhE"}
@@ -0,0 +1,202 @@
1
+ /**
2
+ * mates-fullstack — download.ts
3
+ *
4
+ * The Download class for server functions that return file downloads.
5
+ * Returned by a server function, detected by rpc-runner,
6
+ * and written as a binary response with Content-Disposition: attachment.
7
+ *
8
+ * Usage:
9
+ * import { Download } from "mates-fullstack/server";
10
+ *
11
+ * export async function downloadReport(
12
+ * payload: { id: string },
13
+ * ctx: Context
14
+ * ) {
15
+ * const pdf = await generatePdf(payload.id);
16
+ * return new Download(pdf, { filename: "report.pdf" });
17
+ * }
18
+ *
19
+ * On the client, the RPC stub detects the binary response and
20
+ * triggers a browser download automatically — no client-side code needed.
21
+ */
22
+ // ─── Download class ───────────────────────────────────────────────────────────
23
+ /**
24
+ * Returned from a server function to trigger a file download in the browser.
25
+ *
26
+ * @example
27
+ * return new Download(pdfBuffer, { filename: "report.pdf" });
28
+ * return new Download(csvString, { filename: "export.csv", contentType: "text/csv" });
29
+ * return new Download(imageBuffer, { filename: "photo.jpg", contentType: "image/jpeg" });
30
+ */
31
+ export class Download {
32
+ data;
33
+ filename;
34
+ contentType;
35
+ constructor(data, options) {
36
+ // Normalize all data types to Buffer
37
+ if (typeof data === "string") {
38
+ this.data = Buffer.from(data, "utf-8");
39
+ }
40
+ else if (data instanceof Uint8Array) {
41
+ this.data = Buffer.from(data);
42
+ }
43
+ else {
44
+ this.data = data;
45
+ }
46
+ this.filename = options.filename;
47
+ this.contentType = options.contentType ?? _guessContentType(options.filename);
48
+ }
49
+ }
50
+ // ─── Response writer ──────────────────────────────────────────────────────────
51
+ /**
52
+ * Write a Download to a Node.js ServerResponse.
53
+ * Sets Content-Type, Content-Length, and Content-Disposition headers.
54
+ * Writes the binary data and ends the response.
55
+ */
56
+ export function writeDownload(download, res) {
57
+ if (res.headersSent)
58
+ return;
59
+ res.writeHead(200, {
60
+ "Content-Type": download.contentType,
61
+ "Content-Length": download.data.length,
62
+ "Content-Disposition": buildContentDisposition(download.filename),
63
+ // Prevent browser from caching downloads
64
+ "Cache-Control": "no-store",
65
+ "Pragma": "no-cache",
66
+ });
67
+ res.end(download.data);
68
+ }
69
+ // ─── Client-side helper ───────────────────────────────────────────────────────
70
+ /**
71
+ * Trigger a file download in the browser from a fetch Response.
72
+ * Called by the RPC stub when it detects Content-Disposition: attachment.
73
+ *
74
+ * Creates a temporary blob URL, clicks a hidden <a> element, then cleans up.
75
+ */
76
+ export function triggerBrowserDownload(response, fallbackFilename = "download") {
77
+ // Extract filename from Content-Disposition header if present
78
+ const disposition = response.headers.get("content-disposition") ?? "";
79
+ const filename = _extractFilename(disposition) ?? fallbackFilename;
80
+ response.blob().then((blob) => {
81
+ const url = URL.createObjectURL(blob);
82
+ const a = document.createElement("a");
83
+ a.href = url;
84
+ a.download = filename;
85
+ a.style.display = "none";
86
+ document.body.appendChild(a);
87
+ a.click();
88
+ // Clean up after a short delay to allow the download to start
89
+ setTimeout(() => {
90
+ document.body.removeChild(a);
91
+ URL.revokeObjectURL(url);
92
+ }, 100);
93
+ });
94
+ }
95
+ // ─── Type guard ───────────────────────────────────────────────────────────────
96
+ /**
97
+ * Returns true if the value is a Download instance.
98
+ * Used by rpc-runner to detect download returns.
99
+ */
100
+ export function isDownload(value) {
101
+ return value instanceof Download;
102
+ }
103
+ // ─── Helpers ──────────────────────────────────────────────────────────────────
104
+ /**
105
+ * Build a Content-Disposition header for a file download.
106
+ * Uses RFC 5987 encoding for filenames with non-ASCII characters.
107
+ *
108
+ * Always includes both the ASCII fallback (filename=) and
109
+ * the encoded form (filename*=) for maximum compatibility.
110
+ */
111
+ export function buildContentDisposition(filename) {
112
+ // Strip path separators and null bytes for security
113
+ const safe = filename
114
+ .replace(/[\\/]/g, "_")
115
+ .replace(/\0/g, "")
116
+ .trim();
117
+ // Check if filename is pure ASCII
118
+ const isAscii = /^[\x20-\x7E]+$/.test(safe);
119
+ if (isAscii) {
120
+ // Simple case — quote the filename in case it has spaces or special chars
121
+ const escaped = safe.replace(/["\\]/g, "\\$&");
122
+ return `attachment; filename="${escaped}"`;
123
+ }
124
+ // Non-ASCII filename — use RFC 5987 encoding
125
+ const encoded = encodeURIComponent(safe);
126
+ // ASCII fallback (replace non-ASCII with "?")
127
+ const asciiFallback = safe.replace(/[^\x20-\x7E]/g, "?");
128
+ const asciiEscaped = asciiFallback.replace(/["\\]/g, "\\$&");
129
+ return `attachment; filename="${asciiEscaped}"; filename*=UTF-8''${encoded}`;
130
+ }
131
+ /**
132
+ * Extract filename from a Content-Disposition header string.
133
+ * Tries filename*= (RFC 5987) first, then filename=.
134
+ * Returns null if no filename is found.
135
+ */
136
+ function _extractFilename(disposition) {
137
+ if (!disposition)
138
+ return null;
139
+ // Try filename*= (RFC 5987 encoded)
140
+ const encodedMatch = disposition.match(/filename\*=UTF-8''([^;]+)/i);
141
+ if (encodedMatch?.[1]) {
142
+ try {
143
+ return decodeURIComponent(encodedMatch[1]);
144
+ }
145
+ catch {
146
+ // Fall through to plain filename
147
+ }
148
+ }
149
+ // Try filename= (plain, possibly quoted)
150
+ const plainMatch = disposition.match(/filename="?([^";]+)"?/i);
151
+ if (plainMatch?.[1]) {
152
+ return plainMatch[1].trim();
153
+ }
154
+ return null;
155
+ }
156
+ /**
157
+ * Guess Content-Type from file extension.
158
+ * Falls back to application/octet-stream for unknown extensions.
159
+ */
160
+ function _guessContentType(filename) {
161
+ const ext = filename.toLowerCase().split(".").pop() ?? "";
162
+ const mimeTypes = {
163
+ // Documents
164
+ pdf: "application/pdf",
165
+ doc: "application/msword",
166
+ docx: "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
167
+ xls: "application/vnd.ms-excel",
168
+ xlsx: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
169
+ ppt: "application/vnd.ms-powerpoint",
170
+ pptx: "application/vnd.openxmlformats-officedocument.presentationml.presentation",
171
+ // Text
172
+ txt: "text/plain",
173
+ csv: "text/csv",
174
+ html: "text/html",
175
+ htm: "text/html",
176
+ xml: "application/xml",
177
+ json: "application/json",
178
+ // Images
179
+ png: "image/png",
180
+ jpg: "image/jpeg",
181
+ jpeg: "image/jpeg",
182
+ gif: "image/gif",
183
+ webp: "image/webp",
184
+ svg: "image/svg+xml",
185
+ ico: "image/x-icon",
186
+ avif: "image/avif",
187
+ // Archives
188
+ zip: "application/zip",
189
+ gz: "application/gzip",
190
+ tar: "application/x-tar",
191
+ // Audio / Video
192
+ mp3: "audio/mpeg",
193
+ mp4: "video/mp4",
194
+ webm: "video/webm",
195
+ // Fonts
196
+ woff: "font/woff",
197
+ woff2: "font/woff2",
198
+ ttf: "font/ttf",
199
+ };
200
+ return mimeTypes[ext] ?? "application/octet-stream";
201
+ }
202
+ //# sourceMappingURL=download.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"download.js","sourceRoot":"","sources":["../src/download.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * mates-fullstack — env-loader.ts
3
+ *
4
+ * Loads .env files into process.env at startup.
5
+ * No external dependencies — pure Node.js fs + path.
6
+ *
7
+ * Loading order (later overrides earlier):
8
+ * 1. .env
9
+ * 2. .env.local
10
+ * 3. .env.{mode} (e.g. .env.production)
11
+ * 4. .env.{mode}.local (e.g. .env.production.local)
12
+ * 5. Existing process.env (always wins — platform/CI vars take precedence)
13
+ *
14
+ * MATES_PUBLIC_ prefix:
15
+ * Variables prefixed with MATES_PUBLIC_ are safe to expose to the
16
+ * browser bundle. All other variables stay server-only.
17
+ * The build plugin uses getPublicEnv() to inject them as
18
+ * import.meta.env.MATES_PUBLIC_* in the client bundle.
19
+ *
20
+ * Parsing rules:
21
+ * - Lines starting with # are comments
22
+ * - Empty lines are skipped
23
+ * - KEY=VALUE (split on first = only)
24
+ * - Quoted values: KEY="value with spaces" → strips quotes
25
+ * - Existing process.env values are never overwritten
26
+ * - Invalid lines (no =) are skipped with a warning
27
+ */
28
+ /**
29
+ * Load .env files for the given mode into process.env.
30
+ * Call once at startup before anything reads process.env.
31
+ *
32
+ * Order: .env (base, lowest priority), .env.local, .env.{mode}, .env.{mode}.local (highest priority).
33
+ * Later files override earlier files. Original platform/CI env vars always win.
34
+ *
35
+ * @param projectRoot - Absolute path to the project root.
36
+ * @param mode - "development" or "production".
37
+ */
38
+ export declare function loadEnv(projectRoot: string, mode: "development" | "production"): void;
39
+ /**
40
+ * Returns only the MATES_PUBLIC_ prefixed variables from process.env.
41
+ * These are safe to inject into the client bundle.
42
+ *
43
+ * Keys are returned as-is (with the MATES_PUBLIC_ prefix).
44
+ *
45
+ * @example
46
+ * // .env
47
+ * MATES_PUBLIC_STRIPE_KEY=pk_live_...
48
+ * DATABASE_URL=postgres://... ← not included
49
+ *
50
+ * getPublicEnv()
51
+ * // { MATES_PUBLIC_STRIPE_KEY: "pk_live_..." }
52
+ */
53
+ export declare function getPublicEnv(): Record<string, string>;
54
+ /**
55
+ * Returns a define map for the bundler (esbuild/rolldown).
56
+ * Maps import.meta.env.MATES_PUBLIC_* to the actual values.
57
+ *
58
+ * Only MATES_PUBLIC_ variables are included — other env vars
59
+ * are never injected into the client bundle.
60
+ *
61
+ * @example
62
+ * // Returns:
63
+ * {
64
+ * "import.meta.env.MATES_PUBLIC_STRIPE_KEY": '"pk_live_..."',
65
+ * "import.meta.env.NODE_ENV": '"development"',
66
+ * }
67
+ */
68
+ export declare function getBundlerDefines(mode: "development" | "production"): Record<string, string>;
69
+ /**
70
+ * Parse a .env file string into a key-value map.
71
+ * Exported for testing.
72
+ *
73
+ * Does NOT modify process.env — use loadEnv() for that.
74
+ */
75
+ export declare function parseEnvFile(content: string): Record<string, string>;
76
+ //# sourceMappingURL=env-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-loader.d.ts","sourceRoot":"","sources":["../src/env-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAQH;;;;;;;;;GASG;AACH,wBAAgB,OAAO,CACrB,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,aAAa,GAAG,YAAY,GACjC,IAAI,CAUN;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAUrD;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,aAAa,GAAG,YAAY,GACjC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAaxB;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAoDpE"}
@@ -0,0 +1,213 @@
1
+ /**
2
+ * mates-fullstack — env-loader.ts
3
+ *
4
+ * Loads .env files into process.env at startup.
5
+ * No external dependencies — pure Node.js fs + path.
6
+ *
7
+ * Loading order (later overrides earlier):
8
+ * 1. .env
9
+ * 2. .env.local
10
+ * 3. .env.{mode} (e.g. .env.production)
11
+ * 4. .env.{mode}.local (e.g. .env.production.local)
12
+ * 5. Existing process.env (always wins — platform/CI vars take precedence)
13
+ *
14
+ * MATES_PUBLIC_ prefix:
15
+ * Variables prefixed with MATES_PUBLIC_ are safe to expose to the
16
+ * browser bundle. All other variables stay server-only.
17
+ * The build plugin uses getPublicEnv() to inject them as
18
+ * import.meta.env.MATES_PUBLIC_* in the client bundle.
19
+ *
20
+ * Parsing rules:
21
+ * - Lines starting with # are comments
22
+ * - Empty lines are skipped
23
+ * - KEY=VALUE (split on first = only)
24
+ * - Quoted values: KEY="value with spaces" → strips quotes
25
+ * - Existing process.env values are never overwritten
26
+ * - Invalid lines (no =) are skipped with a warning
27
+ */
28
+ import fs from "node:fs";
29
+ import path from "node:path";
30
+ import { devWarn } from "./log.js";
31
+ // ─── Public API ───────────────────────────────────────────────────────────────
32
+ /**
33
+ * Load .env files for the given mode into process.env.
34
+ * Call once at startup before anything reads process.env.
35
+ *
36
+ * Order: .env (base, lowest priority), .env.local, .env.{mode}, .env.{mode}.local (highest priority).
37
+ * Later files override earlier files. Original platform/CI env vars always win.
38
+ *
39
+ * @param projectRoot - Absolute path to the project root.
40
+ * @param mode - "development" or "production".
41
+ */
42
+ export function loadEnv(projectRoot, mode) {
43
+ // Snapshot original env vars so platform/CI values are never overwritten
44
+ const originalKeys = new Set(Object.keys(process.env));
45
+ const files = [".env", ".env.local", `.env.${mode}`, `.env.${mode}.local`];
46
+ for (const filename of files) {
47
+ const filePath = path.join(projectRoot, filename);
48
+ _loadEnvFile(filePath, originalKeys);
49
+ }
50
+ }
51
+ /**
52
+ * Returns only the MATES_PUBLIC_ prefixed variables from process.env.
53
+ * These are safe to inject into the client bundle.
54
+ *
55
+ * Keys are returned as-is (with the MATES_PUBLIC_ prefix).
56
+ *
57
+ * @example
58
+ * // .env
59
+ * MATES_PUBLIC_STRIPE_KEY=pk_live_...
60
+ * DATABASE_URL=postgres://... ← not included
61
+ *
62
+ * getPublicEnv()
63
+ * // { MATES_PUBLIC_STRIPE_KEY: "pk_live_..." }
64
+ */
65
+ export function getPublicEnv() {
66
+ const result = {};
67
+ for (const [key, value] of Object.entries(process.env)) {
68
+ if (key.startsWith("MATES_PUBLIC_") && typeof value === "string") {
69
+ result[key] = value;
70
+ }
71
+ }
72
+ return result;
73
+ }
74
+ /**
75
+ * Returns a define map for the bundler (esbuild/rolldown).
76
+ * Maps import.meta.env.MATES_PUBLIC_* to the actual values.
77
+ *
78
+ * Only MATES_PUBLIC_ variables are included — other env vars
79
+ * are never injected into the client bundle.
80
+ *
81
+ * @example
82
+ * // Returns:
83
+ * {
84
+ * "import.meta.env.MATES_PUBLIC_STRIPE_KEY": '"pk_live_..."',
85
+ * "import.meta.env.NODE_ENV": '"development"',
86
+ * }
87
+ */
88
+ export function getBundlerDefines(mode) {
89
+ const defines = {};
90
+ // Always inject NODE_ENV
91
+ defines["import.meta.env.NODE_ENV"] = JSON.stringify(mode);
92
+ defines["process.env.NODE_ENV"] = JSON.stringify(mode);
93
+ // Inject MATES_PUBLIC_ vars
94
+ for (const [key, value] of Object.entries(getPublicEnv())) {
95
+ defines[`import.meta.env.${key}`] = JSON.stringify(value);
96
+ }
97
+ return defines;
98
+ }
99
+ /**
100
+ * Parse a .env file string into a key-value map.
101
+ * Exported for testing.
102
+ *
103
+ * Does NOT modify process.env — use loadEnv() for that.
104
+ */
105
+ export function parseEnvFile(content) {
106
+ const result = {};
107
+ const lines = content.split(/\r?\n/);
108
+ for (let i = 0; i < lines.length; i++) {
109
+ const line = lines[i].trim();
110
+ // Skip empty lines and comments
111
+ if (!line || line.startsWith("#"))
112
+ continue;
113
+ // Find the first = sign
114
+ const eqIndex = line.indexOf("=");
115
+ if (eqIndex === -1) {
116
+ // No = found — malformed line, skip with warning
117
+ devWarn(`.env line ${i + 1} has no "=" — skipped: ${line}`);
118
+ continue;
119
+ }
120
+ const key = line.slice(0, eqIndex).trim();
121
+ let value = line.slice(eqIndex + 1).trim();
122
+ // Skip empty keys
123
+ if (!key)
124
+ continue;
125
+ // Validate key — must be a valid env var name
126
+ if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(key)) {
127
+ devWarn(`.env line ${i + 1} has invalid key "${key}" — skipped`);
128
+ continue;
129
+ }
130
+ // Strip inline comments — only strip if # is preceded by whitespace
131
+ // e.g. KEY=value # comment → "value"
132
+ // but KEY=value#nospace stays as "value#nospace"
133
+ const commentMatch = value.match(/^(.*?)\s+#.*$/);
134
+ if (commentMatch) {
135
+ value = commentMatch[1].trim();
136
+ }
137
+ // Handle quoted values
138
+ value = _stripQuotes(value);
139
+ // Handle escaped characters inside double-quoted strings
140
+ // \n → newline, \t → tab, \\ → backslash
141
+ if (_isDoubleQuoted(line.slice(eqIndex + 1).trim())) {
142
+ value = _unescapeDoubleQuoted(value);
143
+ }
144
+ result[key] = value;
145
+ }
146
+ return result;
147
+ }
148
+ // ─── Internal helpers ─────────────────────────────────────────────────────────
149
+ /**
150
+ * Load a single .env file into process.env.
151
+ * Silently skips if the file does not exist.
152
+ * Later .env files can override earlier ones, but original platform/CI env vars always win.
153
+ */
154
+ function _loadEnvFile(filePath, originalKeys) {
155
+ let content;
156
+ try {
157
+ content = fs.readFileSync(filePath, "utf-8");
158
+ }
159
+ catch (err) {
160
+ // ENOENT → file doesn't exist, skip silently
161
+ if (err.code === "ENOENT")
162
+ return;
163
+ // Other read errors → warn but don't crash
164
+ devWarn(`could not read ${filePath}: ${err.message}`);
165
+ return;
166
+ }
167
+ const parsed = parseEnvFile(content);
168
+ for (const [key, value] of Object.entries(parsed)) {
169
+ // Original platform/CI env vars always win — never overwrite
170
+ if (originalKeys?.has(key))
171
+ continue;
172
+ // For other keys, later files override earlier ones
173
+ process.env[key] = value;
174
+ }
175
+ }
176
+ /**
177
+ * Strip surrounding single or double quotes from a value string.
178
+ * Handles:
179
+ * "hello world" → hello world
180
+ * 'hello world' → hello world
181
+ * "it's fine" → it's fine
182
+ * unquoted → unquoted (unchanged)
183
+ */
184
+ function _stripQuotes(value) {
185
+ if (value.length < 2)
186
+ return value;
187
+ const first = value[0];
188
+ const last = value[value.length - 1];
189
+ if ((first === '"' && last === '"') || (first === "'" && last === "'")) {
190
+ return value.slice(1, -1);
191
+ }
192
+ return value;
193
+ }
194
+ /**
195
+ * Returns true if the raw value string (before stripping quotes) is double-quoted.
196
+ * Used to decide whether to unescape \n, \t etc.
197
+ */
198
+ function _isDoubleQuoted(rawValue) {
199
+ return (rawValue.length >= 2 && rawValue.startsWith('"') && rawValue.endsWith('"'));
200
+ }
201
+ /**
202
+ * Process escape sequences inside a double-quoted .env value.
203
+ * Only handles common cases: \n, \r, \t, \\, \".
204
+ */
205
+ function _unescapeDoubleQuoted(value) {
206
+ return value
207
+ .replace(/\\n/g, "\n")
208
+ .replace(/\\r/g, "\r")
209
+ .replace(/\\t/g, "\t")
210
+ .replace(/\\"/g, '"')
211
+ .replace(/\\\\/g, "\\");
212
+ }
213
+ //# sourceMappingURL=env-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-loader.js","sourceRoot":"","sources":["../src/env-loader.ts"],"names":[],"mappings":"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"}