effect-start 0.23.1 → 0.26.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 (351) hide show
  1. package/package.json +18 -86
  2. package/src/Development.ts +3 -1
  3. package/src/Entity.ts +17 -0
  4. package/src/Fetch.ts +271 -0
  5. package/src/SqlIntrospect.ts +64 -70
  6. package/src/Start.ts +21 -24
  7. package/src/StartApp.ts +1 -1
  8. package/src/bun/BunServer.ts +42 -10
  9. package/src/hyper/HyperHtml.ts +0 -1
  10. package/src/sql/bun/index.ts +1 -1
  11. package/src/sql/index.ts +1 -0
  12. package/src/sql/libsql/index.ts +173 -0
  13. package/src/sql/libsql/libsql.d.ts +39 -0
  14. package/src/sql/mssql/index.ts +1 -1
  15. package/dist/BlobStore.d.ts +0 -80
  16. package/dist/BlobStore.js +0 -19
  17. package/dist/ChildProcess.d.ts +0 -60
  18. package/dist/ChildProcess.js +0 -30
  19. package/dist/Commander.d.ts +0 -100
  20. package/dist/Commander.js +0 -326
  21. package/dist/ContentNegotiation.d.ts +0 -12
  22. package/dist/ContentNegotiation.js +0 -359
  23. package/dist/Cookies.d.ts +0 -47
  24. package/dist/Cookies.js +0 -302
  25. package/dist/Development.d.ts +0 -39
  26. package/dist/Development.js +0 -58
  27. package/dist/Effectify.d.ts +0 -209
  28. package/dist/Effectify.js +0 -19
  29. package/dist/Entity.d.ts +0 -47
  30. package/dist/Entity.js +0 -224
  31. package/dist/FilePathPattern.d.ts +0 -29
  32. package/dist/FilePathPattern.js +0 -86
  33. package/dist/FileRouter.d.ts +0 -56
  34. package/dist/FileRouter.js +0 -148
  35. package/dist/FileRouterCodegen.d.ts +0 -18
  36. package/dist/FileRouterCodegen.js +0 -227
  37. package/dist/FileRouterPattern.d.ts +0 -9
  38. package/dist/FileRouterPattern.js +0 -35
  39. package/dist/FileSystem.d.ts +0 -158
  40. package/dist/FileSystem.js +0 -70
  41. package/dist/Http.d.ts +0 -37
  42. package/dist/Http.js +0 -88
  43. package/dist/HttpAppExtra.d.ts +0 -7
  44. package/dist/HttpAppExtra.js +0 -320
  45. package/dist/HttpUtils.d.ts +0 -3
  46. package/dist/HttpUtils.js +0 -11
  47. package/dist/PathPattern.d.ts +0 -134
  48. package/dist/PathPattern.js +0 -413
  49. package/dist/PlatformError.d.ts +0 -38
  50. package/dist/PlatformError.js +0 -25
  51. package/dist/PlatformRuntime.d.ts +0 -27
  52. package/dist/PlatformRuntime.js +0 -46
  53. package/dist/Route.d.ts +0 -97
  54. package/dist/Route.js +0 -100
  55. package/dist/RouteBody.d.ts +0 -47
  56. package/dist/RouteBody.js +0 -67
  57. package/dist/RouteError.d.ts +0 -98
  58. package/dist/RouteError.js +0 -55
  59. package/dist/RouteHook.d.ts +0 -12
  60. package/dist/RouteHook.js +0 -40
  61. package/dist/RouteHttp.d.ts +0 -21
  62. package/dist/RouteHttp.js +0 -258
  63. package/dist/RouteHttpTracer.d.ts +0 -10
  64. package/dist/RouteHttpTracer.js +0 -62
  65. package/dist/RouteMount.d.ts +0 -86
  66. package/dist/RouteMount.js +0 -63
  67. package/dist/RouteSchema.d.ts +0 -86
  68. package/dist/RouteSchema.js +0 -188
  69. package/dist/RouteSse.d.ts +0 -21
  70. package/dist/RouteSse.js +0 -79
  71. package/dist/RouteTree.d.ts +0 -57
  72. package/dist/RouteTree.js +0 -93
  73. package/dist/RouteTrie.d.ts +0 -20
  74. package/dist/RouteTrie.js +0 -152
  75. package/dist/RouterPattern.d.ts +0 -118
  76. package/dist/RouterPattern.js +0 -269
  77. package/dist/SchemaExtra.d.ts +0 -7
  78. package/dist/SchemaExtra.js +0 -74
  79. package/dist/Socket.d.ts +0 -27
  80. package/dist/Socket.js +0 -29
  81. package/dist/Sql.d.ts +0 -34
  82. package/dist/Sql.js +0 -5
  83. package/dist/SqlIntrospect.d.ts +0 -91
  84. package/dist/SqlIntrospect.js +0 -466
  85. package/dist/Start.d.ts +0 -44
  86. package/dist/Start.js +0 -49
  87. package/dist/StartApp.d.ts +0 -19
  88. package/dist/StartApp.js +0 -21
  89. package/dist/StreamExtra.d.ts +0 -28
  90. package/dist/StreamExtra.js +0 -100
  91. package/dist/System.d.ts +0 -7
  92. package/dist/System.js +0 -22
  93. package/dist/TuplePathPattern.d.ts +0 -9
  94. package/dist/TuplePathPattern.js +0 -68
  95. package/dist/Unique.d.ts +0 -50
  96. package/dist/Unique.js +0 -187
  97. package/dist/Values.d.ts +0 -27
  98. package/dist/Values.js +0 -36
  99. package/dist/bun/BunBlobStoreDisk.d.ts +0 -6
  100. package/dist/bun/BunBlobStoreDisk.js +0 -116
  101. package/dist/bun/BunBlobStoreS3.d.ts +0 -11
  102. package/dist/bun/BunBlobStoreS3.js +0 -89
  103. package/dist/bun/BunBlobWatcherDisk.d.ts +0 -6
  104. package/dist/bun/BunBlobWatcherDisk.js +0 -60
  105. package/dist/bun/BunBlobWatcherQueue.d.ts +0 -6
  106. package/dist/bun/BunBlobWatcherQueue.js +0 -17
  107. package/dist/bun/BunBundle.d.ts +0 -11
  108. package/dist/bun/BunBundle.js +0 -137
  109. package/dist/bun/BunChildProcessSpawner.d.ts +0 -3
  110. package/dist/bun/BunChildProcessSpawner.js +0 -103
  111. package/dist/bun/BunHttpServer.d.ts +0 -44
  112. package/dist/bun/BunHttpServer.js +0 -186
  113. package/dist/bun/BunHttpServer_web.d.ts +0 -60
  114. package/dist/bun/BunHttpServer_web.js +0 -252
  115. package/dist/bun/BunImportTrackerPlugin.d.ts +0 -13
  116. package/dist/bun/BunImportTrackerPlugin.js +0 -69
  117. package/dist/bun/BunPlatformHttpServer.d.ts +0 -10
  118. package/dist/bun/BunPlatformHttpServer.js +0 -53
  119. package/dist/bun/BunRoute.d.ts +0 -48
  120. package/dist/bun/BunRoute.js +0 -121
  121. package/dist/bun/BunRuntime.d.ts +0 -2
  122. package/dist/bun/BunRuntime.js +0 -31
  123. package/dist/bun/BunServer.d.ts +0 -40
  124. package/dist/bun/BunServer.js +0 -157
  125. package/dist/bun/BunServerRequest.d.ts +0 -60
  126. package/dist/bun/BunServerRequest.js +0 -252
  127. package/dist/bun/BunSql.d.ts +0 -4
  128. package/dist/bun/BunSql.js +0 -81
  129. package/dist/bun/BunVirtualFilesPlugin.d.ts +0 -4
  130. package/dist/bun/BunVirtualFilesPlugin.js +0 -40
  131. package/dist/bun/_BunEnhancedResolve.d.ts +0 -45
  132. package/dist/bun/_BunEnhancedResolve.js +0 -102
  133. package/dist/bun/index.d.ts +0 -5
  134. package/dist/bun/index.js +0 -5
  135. package/dist/bundler/Bundle.d.ts +0 -61
  136. package/dist/bundler/Bundle.js +0 -48
  137. package/dist/bundler/BundleFiles.d.ts +0 -13
  138. package/dist/bundler/BundleFiles.js +0 -96
  139. package/dist/bundler/BundleHttp.d.ts +0 -45
  140. package/dist/bundler/BundleHttp.js +0 -176
  141. package/dist/bundler/BundleRoute.d.ts +0 -27
  142. package/dist/bundler/BundleRoute.js +0 -51
  143. package/dist/client/Overlay.d.ts +0 -2
  144. package/dist/client/Overlay.js +0 -32
  145. package/dist/client/ScrollState.d.ts +0 -6
  146. package/dist/client/ScrollState.js +0 -94
  147. package/dist/client/index.d.ts +0 -6
  148. package/dist/client/index.js +0 -79
  149. package/dist/console/Console.d.ts +0 -6
  150. package/dist/console/Console.js +0 -26
  151. package/dist/console/ConsoleErrors.d.ts +0 -3
  152. package/dist/console/ConsoleErrors.js +0 -200
  153. package/dist/console/ConsoleLogger.d.ts +0 -3
  154. package/dist/console/ConsoleLogger.js +0 -47
  155. package/dist/console/ConsoleMetrics.d.ts +0 -3
  156. package/dist/console/ConsoleMetrics.js +0 -61
  157. package/dist/console/ConsoleProcess.d.ts +0 -3
  158. package/dist/console/ConsoleProcess.js +0 -49
  159. package/dist/console/ConsoleStore.d.ts +0 -144
  160. package/dist/console/ConsoleStore.js +0 -61
  161. package/dist/console/ConsoleTracer.d.ts +0 -3
  162. package/dist/console/ConsoleTracer.js +0 -94
  163. package/dist/console/Simulation.d.ts +0 -2
  164. package/dist/console/Simulation.js +0 -633
  165. package/dist/console/index.d.ts +0 -3
  166. package/dist/console/index.js +0 -3
  167. package/dist/console/routes/errors/route.d.ts +0 -10
  168. package/dist/console/routes/errors/route.js +0 -47
  169. package/dist/console/routes/fiberDetail.d.ts +0 -16
  170. package/dist/console/routes/fiberDetail.js +0 -38
  171. package/dist/console/routes/fibers/route.d.ts +0 -10
  172. package/dist/console/routes/fibers/route.js +0 -19
  173. package/dist/console/routes/git/route.d.ts +0 -11
  174. package/dist/console/routes/git/route.js +0 -33
  175. package/dist/console/routes/layout.d.ts +0 -9
  176. package/dist/console/routes/layout.js +0 -3
  177. package/dist/console/routes/logs/route.d.ts +0 -10
  178. package/dist/console/routes/logs/route.js +0 -32
  179. package/dist/console/routes/metrics/route.d.ts +0 -10
  180. package/dist/console/routes/metrics/route.js +0 -17
  181. package/dist/console/routes/route.d.ts +0 -6
  182. package/dist/console/routes/route.js +0 -5
  183. package/dist/console/routes/routes/route.d.ts +0 -6
  184. package/dist/console/routes/routes/route.js +0 -20
  185. package/dist/console/routes/services/route.d.ts +0 -6
  186. package/dist/console/routes/services/route.js +0 -12
  187. package/dist/console/routes/system/route.d.ts +0 -10
  188. package/dist/console/routes/system/route.js +0 -18
  189. package/dist/console/routes/traceDetail.d.ts +0 -16
  190. package/dist/console/routes/traceDetail.js +0 -14
  191. package/dist/console/routes/traces/route.d.ts +0 -10
  192. package/dist/console/routes/traces/route.js +0 -39
  193. package/dist/console/routes/tree.d.ts +0 -153
  194. package/dist/console/routes/tree.js +0 -29
  195. package/dist/console/ui/Errors.d.ts +0 -4
  196. package/dist/console/ui/Errors.js +0 -15
  197. package/dist/console/ui/Fibers.d.ts +0 -24
  198. package/dist/console/ui/Fibers.js +0 -121
  199. package/dist/console/ui/Git.d.ts +0 -20
  200. package/dist/console/ui/Git.js +0 -95
  201. package/dist/console/ui/Logs.d.ts +0 -4
  202. package/dist/console/ui/Logs.js +0 -25
  203. package/dist/console/ui/Metrics.d.ts +0 -4
  204. package/dist/console/ui/Metrics.js +0 -26
  205. package/dist/console/ui/Routes.d.ts +0 -8
  206. package/dist/console/ui/Routes.js +0 -70
  207. package/dist/console/ui/Services.d.ts +0 -10
  208. package/dist/console/ui/Services.js +0 -246
  209. package/dist/console/ui/Shell.d.ts +0 -10
  210. package/dist/console/ui/Shell.js +0 -7
  211. package/dist/console/ui/System.d.ts +0 -4
  212. package/dist/console/ui/System.js +0 -35
  213. package/dist/console/ui/Traces.d.ts +0 -12
  214. package/dist/console/ui/Traces.js +0 -179
  215. package/dist/datastar/actions/fetch.d.ts +0 -30
  216. package/dist/datastar/actions/fetch.js +0 -403
  217. package/dist/datastar/actions/peek.d.ts +0 -1
  218. package/dist/datastar/actions/peek.js +0 -13
  219. package/dist/datastar/actions/setAll.d.ts +0 -1
  220. package/dist/datastar/actions/setAll.js +0 -12
  221. package/dist/datastar/actions/toggleAll.d.ts +0 -1
  222. package/dist/datastar/actions/toggleAll.js +0 -12
  223. package/dist/datastar/attributes/attr.d.ts +0 -1
  224. package/dist/datastar/attributes/attr.js +0 -48
  225. package/dist/datastar/attributes/bind.d.ts +0 -1
  226. package/dist/datastar/attributes/bind.js +0 -175
  227. package/dist/datastar/attributes/class.d.ts +0 -1
  228. package/dist/datastar/attributes/class.js +0 -47
  229. package/dist/datastar/attributes/computed.d.ts +0 -1
  230. package/dist/datastar/attributes/computed.js +0 -26
  231. package/dist/datastar/attributes/effect.d.ts +0 -1
  232. package/dist/datastar/attributes/effect.js +0 -9
  233. package/dist/datastar/attributes/indicator.d.ts +0 -1
  234. package/dist/datastar/attributes/indicator.js +0 -30
  235. package/dist/datastar/attributes/init.d.ts +0 -1
  236. package/dist/datastar/attributes/init.js +0 -26
  237. package/dist/datastar/attributes/jsonSignals.d.ts +0 -1
  238. package/dist/datastar/attributes/jsonSignals.js +0 -30
  239. package/dist/datastar/attributes/on.d.ts +0 -1
  240. package/dist/datastar/attributes/on.js +0 -78
  241. package/dist/datastar/attributes/onIntersect.d.ts +0 -1
  242. package/dist/datastar/attributes/onIntersect.js +0 -53
  243. package/dist/datastar/attributes/onInterval.d.ts +0 -1
  244. package/dist/datastar/attributes/onInterval.js +0 -30
  245. package/dist/datastar/attributes/onSignalPatch.d.ts +0 -1
  246. package/dist/datastar/attributes/onSignalPatch.js +0 -42
  247. package/dist/datastar/attributes/ref.d.ts +0 -1
  248. package/dist/datastar/attributes/ref.js +0 -10
  249. package/dist/datastar/attributes/show.d.ts +0 -1
  250. package/dist/datastar/attributes/show.js +0 -31
  251. package/dist/datastar/attributes/signals.d.ts +0 -1
  252. package/dist/datastar/attributes/signals.js +0 -17
  253. package/dist/datastar/attributes/style.d.ts +0 -1
  254. package/dist/datastar/attributes/style.js +0 -50
  255. package/dist/datastar/attributes/text.d.ts +0 -1
  256. package/dist/datastar/attributes/text.js +0 -26
  257. package/dist/datastar/engine.d.ts +0 -162
  258. package/dist/datastar/engine.js +0 -999
  259. package/dist/datastar/happydom.d.ts +0 -1
  260. package/dist/datastar/happydom.js +0 -8
  261. package/dist/datastar/index.d.ts +0 -24
  262. package/dist/datastar/index.js +0 -24
  263. package/dist/datastar/load.d.ts +0 -24
  264. package/dist/datastar/load.js +0 -24
  265. package/dist/datastar/utils.d.ts +0 -51
  266. package/dist/datastar/utils.js +0 -202
  267. package/dist/datastar/watchers/patchElements.d.ts +0 -1
  268. package/dist/datastar/watchers/patchElements.js +0 -399
  269. package/dist/datastar/watchers/patchSignals.d.ts +0 -1
  270. package/dist/datastar/watchers/patchSignals.js +0 -14
  271. package/dist/experimental/EncryptedCookies.d.ts +0 -48
  272. package/dist/experimental/EncryptedCookies.js +0 -212
  273. package/dist/experimental/SseHttpResponse.d.ts +0 -7
  274. package/dist/experimental/SseHttpResponse.js +0 -28
  275. package/dist/experimental/index.d.ts +0 -1
  276. package/dist/experimental/index.js +0 -1
  277. package/dist/hyper/Hyper.d.ts +0 -25
  278. package/dist/hyper/Hyper.js +0 -23
  279. package/dist/hyper/HyperHtml.d.ts +0 -23
  280. package/dist/hyper/HyperHtml.js +0 -150
  281. package/dist/hyper/HyperHtml.test.d.ts +0 -1
  282. package/dist/hyper/HyperHtml.test.js +0 -197
  283. package/dist/hyper/HyperNode.d.ts +0 -14
  284. package/dist/hyper/HyperNode.js +0 -11
  285. package/dist/hyper/HyperRoute.d.ts +0 -8
  286. package/dist/hyper/HyperRoute.js +0 -32
  287. package/dist/hyper/HyperRoute.test.d.ts +0 -1
  288. package/dist/hyper/HyperRoute.test.js +0 -83
  289. package/dist/hyper/html.d.ts +0 -11
  290. package/dist/hyper/html.js +0 -30
  291. package/dist/hyper/index.d.ts +0 -6
  292. package/dist/hyper/index.js +0 -5
  293. package/dist/hyper/jsx-runtime.d.ts +0 -7
  294. package/dist/hyper/jsx-runtime.js +0 -8
  295. package/dist/index.d.ts +0 -8
  296. package/dist/index.js +0 -8
  297. package/dist/inference_check.d.ts +0 -1
  298. package/dist/inference_check.js +0 -15
  299. package/dist/lint/plugin.d.ts +0 -86
  300. package/dist/lint/plugin.js +0 -341
  301. package/dist/middlewares/BasicAuthMiddleware.d.ts +0 -8
  302. package/dist/middlewares/BasicAuthMiddleware.js +0 -22
  303. package/dist/middlewares/index.d.ts +0 -1
  304. package/dist/middlewares/index.js +0 -1
  305. package/dist/node/Effectify.d.ts +0 -209
  306. package/dist/node/Effectify.js +0 -19
  307. package/dist/node/FileSystem.d.ts +0 -7
  308. package/dist/node/FileSystem.js +0 -420
  309. package/dist/node/NodeFileSystem.d.ts +0 -7
  310. package/dist/node/NodeFileSystem.js +0 -410
  311. package/dist/node/NodeUtils.d.ts +0 -2
  312. package/dist/node/NodeUtils.js +0 -20
  313. package/dist/node/PlatformError.d.ts +0 -46
  314. package/dist/node/PlatformError.js +0 -43
  315. package/dist/node/Utils.d.ts +0 -1
  316. package/dist/node/Utils.js +0 -19
  317. package/dist/repro_fail.d.ts +0 -1
  318. package/dist/repro_fail.js +0 -14
  319. package/dist/sql/bun/index.d.ts +0 -3
  320. package/dist/sql/bun/index.js +0 -75
  321. package/dist/sql/mssql/docker.d.ts +0 -2
  322. package/dist/sql/mssql/docker.js +0 -67
  323. package/dist/sql/mssql/index.d.ts +0 -21
  324. package/dist/sql/mssql/index.js +0 -113
  325. package/dist/testing/TestHttpClient.d.ts +0 -13
  326. package/dist/testing/TestHttpClient.js +0 -68
  327. package/dist/testing/TestLogger.d.ts +0 -13
  328. package/dist/testing/TestLogger.js +0 -32
  329. package/dist/testing/index.d.ts +0 -2
  330. package/dist/testing/index.js +0 -2
  331. package/dist/testing/utils.d.ts +0 -9
  332. package/dist/testing/utils.js +0 -39
  333. package/dist/x/cloudflare/CloudflareTunnel.d.ts +0 -10
  334. package/dist/x/cloudflare/CloudflareTunnel.js +0 -30
  335. package/dist/x/cloudflare/index.d.ts +0 -1
  336. package/dist/x/cloudflare/index.js +0 -1
  337. package/dist/x/datastar/Datastar.d.ts +0 -6
  338. package/dist/x/datastar/Datastar.js +0 -47
  339. package/dist/x/datastar/index.d.ts +0 -1
  340. package/dist/x/datastar/index.js +0 -1
  341. package/dist/x/tailscale/TailscaleTunnel.d.ts +0 -15
  342. package/dist/x/tailscale/TailscaleTunnel.js +0 -68
  343. package/dist/x/tailscale/index.d.ts +0 -1
  344. package/dist/x/tailscale/index.js +0 -1
  345. package/dist/x/tailwind/TailwindPlugin.d.ts +0 -23
  346. package/dist/x/tailwind/TailwindPlugin.js +0 -219
  347. package/dist/x/tailwind/compile.d.ts +0 -19
  348. package/dist/x/tailwind/compile.js +0 -154
  349. package/dist/x/tailwind/plugin.d.ts +0 -2
  350. package/dist/x/tailwind/plugin.js +0 -15
  351. /package/src/{Sql.ts → sql/Sql.ts} +0 -0
@@ -1,219 +0,0 @@
1
- import * as NPath from "node:path";
2
- import * as Tailwind from "./compile.js";
3
- export const make = (opts) => {
4
- const { filesPattern = /\.(jsx?|tsx?|html|svelte|vue|astro)$/, cssPattern = /\.css$/, target = "browser", } = opts ?? {};
5
- return {
6
- name: "Tailwind.css plugin",
7
- target,
8
- async setup(builder) {
9
- const scannedCandidates = new Set();
10
- // (file) -> (class names)
11
- const classNameCandidates = new Map();
12
- // (importer path) -> (imported paths)
13
- const importAncestors = new Map();
14
- // (imported path) -> (importer paths)
15
- const importDescendants = new Map();
16
- const prepopulateCandidates = opts?.scanPath
17
- ? async () => {
18
- const candidates = await scanFiles(opts.scanPath);
19
- scannedCandidates.clear();
20
- candidates.forEach((candidate) => scannedCandidates.add(candidate));
21
- }
22
- : null;
23
- // Track import relationships when dynamically scanning
24
- // from tailwind entrypoints.
25
- // As of Bun 1.3 this pathway break for Bun Full-Stack server.
26
- // Better to pass scanPath explicitly.
27
- // @see https://github.com/oven-sh/bun/issues/20877
28
- if (!prepopulateCandidates) {
29
- builder.onResolve({
30
- filter: /.*/,
31
- }, (args) => {
32
- const fullPath = Bun.resolveSync(args.path, args.resolveDir);
33
- const importer = args.importer;
34
- if (fullPath.includes("/node_modules/")) {
35
- return undefined;
36
- }
37
- /**
38
- * Register every visited module.
39
- */
40
- {
41
- if (!importAncestors.has(fullPath)) {
42
- importAncestors.set(fullPath, new Set());
43
- }
44
- if (!importDescendants.has(fullPath)) {
45
- importDescendants.set(fullPath, new Set());
46
- }
47
- if (!importAncestors.has(importer)) {
48
- importAncestors.set(args.importer, new Set());
49
- }
50
- if (!importDescendants.has(importer)) {
51
- importDescendants.set(importer, new Set());
52
- }
53
- }
54
- importAncestors.get(fullPath).add(importer);
55
- importDescendants.get(importer).add(fullPath);
56
- return undefined;
57
- });
58
- }
59
- /**
60
- * Scan for class name candidates in component files.
61
- */
62
- builder.onLoad({
63
- filter: filesPattern,
64
- }, async (args) => {
65
- const contents = await Bun.file(args.path).text();
66
- const classNames = extractClassNames(contents);
67
- if (classNames.size > 0) {
68
- classNameCandidates.set(args.path, classNames);
69
- }
70
- return undefined;
71
- });
72
- /**
73
- * Compile tailwind entrypoints.
74
- */
75
- builder.onLoad({
76
- filter: cssPattern,
77
- }, async (args) => {
78
- const source = await Bun.file(args.path).text();
79
- if (!hasCssImport(source, "tailwindcss")) {
80
- return undefined;
81
- }
82
- const compiler = await Tailwind.compile(source, {
83
- base: NPath.dirname(args.path),
84
- onDependency: (path) => { },
85
- });
86
- await prepopulateCandidates?.();
87
- // wait for other files to be loaded so we can collect class name candidates
88
- await args.defer();
89
- const candidates = new Set(scannedCandidates);
90
- // when we scan a path, we don't need to track candidate tree
91
- if (!prepopulateCandidates) {
92
- const pendingModules = [
93
- // get class name candidates from all modules that import this one
94
- ...(importAncestors.get(args.path) ?? []),
95
- ];
96
- const visitedModules = new Set();
97
- while (pendingModules.length > 0) {
98
- const currentPath = pendingModules.shift();
99
- if (visitedModules.has(currentPath)) {
100
- continue;
101
- }
102
- const moduleImports = importDescendants.get(currentPath);
103
- moduleImports?.forEach((moduleImport) => {
104
- const moduleCandidates = classNameCandidates.get(moduleImport);
105
- moduleCandidates?.forEach((candidate) => candidates.add(candidate));
106
- pendingModules.push(moduleImport);
107
- });
108
- visitedModules.add(currentPath);
109
- }
110
- }
111
- const contents = compiler.build([...candidates]);
112
- return {
113
- contents,
114
- loader: "css",
115
- };
116
- });
117
- },
118
- };
119
- };
120
- const CSS_IMPORT_REGEX = /@import\s+(?:url\()?["']?([^"')]+)["']?\)?\s*[^;]*;/;
121
- const HTML_COMMENT_REGEX = /<!--[\s\S]*?-->/g;
122
- const TEMPLATE_EXPRESSION_REGEX = /\$\{[^}]*\}/g;
123
- const TAILWIND_CLASS_REGEX = /^[a-zA-Z0-9_:-]+(\[[^\]]*\])?$/;
124
- const CLASS_NAME_PATTERNS = [
125
- // HTML class attributes with double quotes: <div class="bg-blue-500 text-white">
126
- '<[^>]*?\\sclass\\s*=\\s*"([^"]+)"',
127
- // HTML class attributes with single quotes: <div class='bg-blue-500 text-white'>
128
- "<[^>]*?\\sclass\\s*=\\s*'([^']+)'",
129
- // JSX className attributes with double quotes: <div className="bg-blue-500 text-white">
130
- '<[^>]*?\\sclassName\\s*=\\s*"([^"]+)"',
131
- // JSX className attributes with single quotes: <div className='bg-blue-500 text-white'>
132
- "<[^>]*?\\sclassName\\s*=\\s*'([^']+)'",
133
- // JSX className with braces and double quotes: <div className={"bg-blue-500 text-white"}>
134
- '<[^>]*?\\sclassName\\s*=\\s*\\{\\s*"([^"]+)"\\s*\\}',
135
- // JSX className with braces and single quotes: <div className={'bg-blue-500 text-white'}>
136
- "<[^>]*?\\sclassName\\s*=\\s*\\{\\s*'([^']+)'\\s*\\}",
137
- // JSX className with template literals: <div className={`bg-blue-500 ${variable}`}>
138
- "<[^>]*?\\sclassName\\s*=\\s*\\{\\s*`([^`]*)`\\s*\\}",
139
- // HTML class with template literals: <div class={`bg-blue-500 ${variable}`}>
140
- "<[^>]*?\\sclass\\s*=\\s*\\{\\s*`([^`]*)`\\s*\\}",
141
- // HTML class at start of tag with double quotes: <div class="bg-blue-500">
142
- '<\\w+\\s+class\\s*=\\s*"([^"]+)"',
143
- // HTML class at start of tag with single quotes: <div class='bg-blue-500'>
144
- "<\\w+\\s+class\\s*=\\s*'([^']+)'",
145
- // JSX className at start of tag with double quotes: <div className="bg-blue-500">
146
- '<\\w+\\s+className\\s*=\\s*"([^"]+)"',
147
- // JSX className at start of tag with single quotes: <div className='bg-blue-500'>
148
- "<\\w+\\s+className\\s*=\\s*'([^']+)'",
149
- // JSX className at start with braces and double quotes: <div className={"bg-blue-500"}>
150
- '<\\w+\\s+className\\s*=\\s*\\{\\s*"([^"]+)"\\s*\\}',
151
- // JSX className at start with braces and single quotes: <div className={'bg-blue-500'}>
152
- "<\\w+\\s+className\\s*=\\s*\\{\\s*'([^']+)'\\s*\\}",
153
- // JSX className at start with template literals: <div className={`bg-blue-500 ${variable}`}>
154
- "<\\w+\\s+className\\s*=\\s*\\{\\s*`([^`]*)`\\s*\\}",
155
- // HTML class at start with template literals: <div class={`bg-blue-500 ${variable}`}>
156
- "<\\w+\\s+class\\s*=\\s*\\{\\s*`([^`]*)`\\s*\\}",
157
- ];
158
- const CLASS_NAME_REGEX = new RegExp(CLASS_NAME_PATTERNS.map((pattern) => `(?:${pattern})`).join("|"), "g");
159
- function hasCssImport(css, specifier) {
160
- const [, importPath] = css.match(CSS_IMPORT_REGEX) ?? [];
161
- if (!importPath)
162
- return false;
163
- return specifier === undefined || importPath.includes(specifier);
164
- }
165
- export function extractClassNames(source) {
166
- const candidates = new Set();
167
- const sourceWithoutComments = source.replace(HTML_COMMENT_REGEX, "");
168
- for (const match of sourceWithoutComments.matchAll(CLASS_NAME_REGEX)) {
169
- // Find the first non-undefined capture group (skip match[0] which is full match)
170
- let classString = "";
171
- for (let i = 1; i < match.length; i++) {
172
- if (match[i] !== undefined) {
173
- classString = match[i];
174
- break;
175
- }
176
- }
177
- if (!classString) {
178
- continue;
179
- }
180
- if (classString.includes("${")) {
181
- const staticParts = classString.split(TEMPLATE_EXPRESSION_REGEX);
182
- for (const part of staticParts) {
183
- const names = part
184
- .trim()
185
- .split(/\s+/)
186
- .filter((name) => {
187
- if (name.length === 0)
188
- return false;
189
- if (name.endsWith("-") || name.startsWith("-"))
190
- return false;
191
- return TAILWIND_CLASS_REGEX.test(name);
192
- });
193
- names.forEach((name) => candidates.add(name));
194
- }
195
- }
196
- else {
197
- // Simple case: regular class string without expressions
198
- const names = classString.split(/\s+/).filter((name) => name.length > 0);
199
- names.forEach((name) => candidates.add(name));
200
- }
201
- }
202
- return candidates;
203
- }
204
- async function scanFiles(dir) {
205
- const candidates = new Set();
206
- const glob = new Bun.Glob("**/*.{js,jsx,ts,tsx,html,vue,svelte,astro}");
207
- for await (const filePath of glob.scan({
208
- cwd: dir,
209
- absolute: true,
210
- })) {
211
- if (filePath.includes("/node_modules/")) {
212
- continue;
213
- }
214
- const contents = await Bun.file(filePath).text();
215
- const classNames = extractClassNames(contents);
216
- classNames.forEach((className) => candidates.add(className));
217
- }
218
- return candidates;
219
- }
@@ -1,19 +0,0 @@
1
- import { compile as _compile, compileAst as _compileAst, Features, Polyfills } from "tailwindcss";
2
- type AstNode = Parameters<typeof _compileAst>[0][number];
3
- export { Features, Polyfills };
4
- export type Resolver = (id: string, base: string) => Promise<string | false | undefined>;
5
- export interface CompileOptions {
6
- base: string;
7
- from?: string;
8
- onDependency: (path: string) => void;
9
- polyfills?: Polyfills;
10
- customCssResolver?: Resolver;
11
- customJsResolver?: Resolver;
12
- }
13
- export declare function compileAst(ast: Array<AstNode>, options: CompileOptions): ReturnType<typeof _compileAst>;
14
- export declare function compile(css: string, options: CompileOptions): ReturnType<typeof _compile>;
15
- export declare function loadModule(id: string, base: string, _onDependency: (path: string) => void, customJsResolver?: Resolver): Promise<{
16
- path: string;
17
- base: string;
18
- module: any;
19
- }>;
@@ -1,154 +0,0 @@
1
- var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
2
- if (typeof path === "string" && /^\.\.?\//.test(path)) {
3
- return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
4
- return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
5
- });
6
- }
7
- return path;
8
- };
9
- import fsPromises from "node:fs/promises";
10
- import path from "node:path";
11
- import { pathToFileURL } from "node:url";
12
- import { compile as _compile, compileAst as _compileAst } from "tailwindcss";
13
- import * as BunEnhancedResolve from "../../bun/_BunEnhancedResolve";
14
- function createCompileOptions({ base, from, polyfills, onDependency, customCssResolver, customJsResolver, }) {
15
- return {
16
- base,
17
- polyfills,
18
- from,
19
- async loadModule(id, base) {
20
- return loadModule(id, base, onDependency, customJsResolver);
21
- },
22
- async loadStylesheet(id, sheetBase) {
23
- let sheet = await loadStylesheet(id, sheetBase, onDependency, customCssResolver);
24
- return sheet;
25
- },
26
- };
27
- }
28
- async function ensureSourceDetectionRootExists(compiler) {
29
- // Verify if the `source(…)` path exists (until the glob pattern starts)
30
- if (compiler.root && compiler.root !== "none") {
31
- let globSymbols = /[*{]/;
32
- let basePath = [];
33
- for (let segment of compiler.root.pattern.split("/")) {
34
- if (globSymbols.test(segment)) {
35
- break;
36
- }
37
- basePath.push(segment);
38
- }
39
- let exists = await fsPromises
40
- .stat(path.resolve(compiler.root.base, basePath.join("/")))
41
- .then((stat) => stat.isDirectory())
42
- .catch(() => false);
43
- if (!exists) {
44
- throw new Error(`The \`source(${compiler.root.pattern})\` does not exist or is not a directory.`);
45
- }
46
- }
47
- }
48
- export async function compileAst(ast, options) {
49
- let compiler = await _compileAst(ast, createCompileOptions(options));
50
- await ensureSourceDetectionRootExists(compiler);
51
- return compiler;
52
- }
53
- export async function compile(css, options) {
54
- let compiler = await _compile(css, createCompileOptions(options));
55
- await ensureSourceDetectionRootExists(compiler);
56
- return compiler;
57
- }
58
- export async function loadModule(id, base, _onDependency, customJsResolver) {
59
- if (id[0] !== ".") {
60
- let resolvedPath = await resolveJsId(id, base, customJsResolver);
61
- if (!resolvedPath) {
62
- throw new Error(`Could not resolve '${id}' from '${base}'`);
63
- }
64
- let module = await importModule(pathToFileURL(resolvedPath).href);
65
- return {
66
- path: resolvedPath,
67
- base: path.dirname(resolvedPath),
68
- module: module.default ?? module,
69
- };
70
- }
71
- let resolvedPath = await resolveJsId(id, base, customJsResolver);
72
- if (!resolvedPath) {
73
- throw new Error(`Could not resolve '${id}' from '${base}'`);
74
- }
75
- let module = await importModule(pathToFileURL(resolvedPath).href + "?id=" + Date.now());
76
- return {
77
- path: resolvedPath,
78
- base: path.dirname(resolvedPath),
79
- module: module.default ?? module,
80
- };
81
- }
82
- async function loadStylesheet(id, base, onDependency, cssResolver) {
83
- let resolvedPath = await resolveCssId(id, base, cssResolver);
84
- if (!resolvedPath)
85
- throw new Error(`Could not resolve '${id}' from '${base}'`);
86
- onDependency(resolvedPath);
87
- let file = await fsPromises.readFile(resolvedPath, "utf-8");
88
- return {
89
- path: resolvedPath,
90
- base: path.dirname(resolvedPath),
91
- content: file,
92
- };
93
- }
94
- async function importModule(path) {
95
- if (typeof globalThis.__tw_load === "function") {
96
- let module = await globalThis.__tw_load(path);
97
- if (module) {
98
- return module;
99
- }
100
- }
101
- return await import(__rewriteRelativeImportExtension(path));
102
- }
103
- const cssResolver = BunEnhancedResolve.ResolverFactory.createResolver({
104
- extensions: [".css"],
105
- mainFields: ["style"],
106
- conditionNames: ["style"],
107
- });
108
- async function resolveCssId(id, base, customCssResolver) {
109
- if (typeof globalThis.__tw_resolve === "function") {
110
- let resolved = globalThis.__tw_resolve(id, base);
111
- if (resolved) {
112
- return Promise.resolve(resolved);
113
- }
114
- }
115
- if (customCssResolver) {
116
- let customResolution = await customCssResolver(id, base);
117
- if (customResolution) {
118
- return customResolution;
119
- }
120
- }
121
- return runResolver(cssResolver, id, base);
122
- }
123
- const esmResolver = BunEnhancedResolve.ResolverFactory.createResolver({
124
- extensions: [".js", ".json", ".node", ".ts"],
125
- conditionNames: ["node", "import"],
126
- mainFields: ["module", "main"],
127
- });
128
- const cjsResolver = BunEnhancedResolve.ResolverFactory.createResolver({
129
- extensions: [".js", ".json", ".node", ".ts"],
130
- conditionNames: ["node", "require"],
131
- mainFields: ["main"],
132
- });
133
- async function resolveJsId(id, base, customJsResolver) {
134
- if (typeof globalThis.__tw_resolve === "function") {
135
- let resolved = globalThis.__tw_resolve(id, base);
136
- if (resolved) {
137
- return Promise.resolve(resolved);
138
- }
139
- }
140
- if (customJsResolver) {
141
- let customResolution = await customJsResolver(id, base);
142
- if (customResolution) {
143
- return customResolution;
144
- }
145
- }
146
- return runResolver(esmResolver, id, base).catch(() => runResolver(cjsResolver, id, base));
147
- }
148
- function runResolver(resolver, id, base) {
149
- return new Promise((resolve, reject) => resolver.resolve({}, base, id, {}, (err, result) => {
150
- if (err)
151
- return reject(err);
152
- resolve(result);
153
- }));
154
- }
@@ -1,2 +0,0 @@
1
- declare const _default: Bun.BunPlugin;
2
- export default _default;
@@ -1,15 +0,0 @@
1
- import * as NPath from "node:path";
2
- import * as NodeUtils from "../../node/NodeUtils.js";
3
- import * as TailwindPlugin from "./TailwindPlugin.js";
4
- // Append `?dir=` to module identifier to pass custom directory to scan
5
- const dirParam = URL.parse(import.meta.url)?.searchParams.get("dir");
6
- const packageJson = await NodeUtils.findClosestPackageJson(process.cwd());
7
- const scanPath = dirParam
8
- ? NPath.resolve(process.cwd(), dirParam)
9
- : packageJson
10
- ? NPath.dirname(packageJson)
11
- : process.cwd();
12
- // Export as default to be used in bunfig.toml
13
- export default TailwindPlugin.make({
14
- scanPath,
15
- });
File without changes