bunderstack 0.17.0-beta.2 → 0.17.0-beta.3

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 (336) hide show
  1. package/CHANGELOG.md +227 -0
  2. package/README.md +11 -1
  3. package/dist/access.d.ts +116 -0
  4. package/dist/access.d.ts.map +1 -0
  5. package/dist/access.js +325 -0
  6. package/dist/access.js.map +1 -0
  7. package/dist/api/builder.d.ts +145 -0
  8. package/dist/api/builder.d.ts.map +1 -0
  9. package/dist/api/builder.js +28 -0
  10. package/dist/api/builder.js.map +1 -0
  11. package/dist/api/context.d.ts +34 -0
  12. package/dist/api/context.d.ts.map +1 -0
  13. package/dist/api/context.js +32 -0
  14. package/dist/api/context.js.map +1 -0
  15. package/dist/api/crud-router.d.ts +290 -0
  16. package/dist/api/crud-router.d.ts.map +1 -0
  17. package/dist/api/crud-router.js +249 -0
  18. package/dist/api/crud-router.js.map +1 -0
  19. package/dist/api/openapi.d.ts +6 -0
  20. package/dist/api/openapi.d.ts.map +1 -0
  21. package/dist/api/openapi.js +146 -0
  22. package/dist/api/openapi.js.map +1 -0
  23. package/dist/api/realtime-router.d.ts +76 -0
  24. package/dist/api/realtime-router.d.ts.map +1 -0
  25. package/dist/api/realtime-router.js +41 -0
  26. package/dist/api/realtime-router.js.map +1 -0
  27. package/dist/api/registry.d.ts +30 -0
  28. package/dist/api/registry.d.ts.map +1 -0
  29. package/dist/api/registry.js +239 -0
  30. package/dist/api/registry.js.map +1 -0
  31. package/dist/api/router.d.ts +9 -0
  32. package/dist/api/router.d.ts.map +1 -0
  33. package/dist/api/router.js +19 -0
  34. package/dist/api/router.js.map +1 -0
  35. package/dist/api/storage-router.d.ts +279 -0
  36. package/dist/api/storage-router.d.ts.map +1 -0
  37. package/dist/api/storage-router.js +155 -0
  38. package/dist/api/storage-router.js.map +1 -0
  39. package/dist/api/types.d.ts +55 -0
  40. package/dist/api/types.d.ts.map +1 -0
  41. package/dist/api/types.js +2 -0
  42. package/dist/api/types.js.map +1 -0
  43. package/dist/auth.d.ts +31 -0
  44. package/dist/auth.d.ts.map +1 -0
  45. package/dist/auth.js +102 -0
  46. package/dist/auth.js.map +1 -0
  47. package/dist/blueprint-generator.d.ts +18 -0
  48. package/dist/blueprint-generator.d.ts.map +1 -0
  49. package/dist/blueprint-generator.js +125 -0
  50. package/dist/blueprint-generator.js.map +1 -0
  51. package/dist/blueprint.d.ts +46 -0
  52. package/dist/blueprint.d.ts.map +1 -0
  53. package/dist/blueprint.js +162 -0
  54. package/dist/blueprint.js.map +1 -0
  55. package/dist/cli.d.ts +8 -0
  56. package/dist/cli.d.ts.map +1 -0
  57. package/dist/cli.js +68 -0
  58. package/dist/cli.js.map +1 -0
  59. package/dist/config.d.ts +76 -0
  60. package/dist/config.d.ts.map +1 -0
  61. package/dist/config.js +81 -0
  62. package/dist/config.js.map +1 -0
  63. package/dist/cron.d.ts +4 -0
  64. package/dist/cron.d.ts.map +1 -0
  65. package/dist/cron.js +3 -0
  66. package/dist/cron.js.map +1 -0
  67. package/dist/crud-operations.d.ts +43 -0
  68. package/dist/crud-operations.d.ts.map +1 -0
  69. package/dist/crud-operations.js +238 -0
  70. package/dist/crud-operations.js.map +1 -0
  71. package/dist/database/adapter.d.ts +20 -0
  72. package/dist/database/adapter.d.ts.map +1 -0
  73. package/dist/database/adapter.js +2 -0
  74. package/dist/database/adapter.js.map +1 -0
  75. package/dist/database/bun-sql.d.ts +3 -0
  76. package/dist/database/bun-sql.d.ts.map +1 -0
  77. package/dist/database/bun-sql.js +21 -0
  78. package/dist/database/bun-sql.js.map +1 -0
  79. package/dist/database/libsql.d.ts +3 -0
  80. package/dist/database/libsql.d.ts.map +1 -0
  81. package/dist/database/libsql.js +22 -0
  82. package/dist/database/libsql.js.map +1 -0
  83. package/dist/database/pglite.d.ts +3 -0
  84. package/dist/database/pglite.d.ts.map +1 -0
  85. package/dist/database/pglite.js +27 -0
  86. package/dist/database/pglite.js.map +1 -0
  87. package/dist/database/postgres-js.d.ts +3 -0
  88. package/dist/database/postgres-js.d.ts.map +1 -0
  89. package/dist/database/postgres-js.js +21 -0
  90. package/dist/database/postgres-js.js.map +1 -0
  91. package/dist/db.d.ts +18 -0
  92. package/dist/db.d.ts.map +1 -0
  93. package/dist/db.js +26 -0
  94. package/dist/db.js.map +1 -0
  95. package/dist/dialect.d.ts +17 -0
  96. package/dist/dialect.d.ts.map +1 -0
  97. package/dist/dialect.js +22 -0
  98. package/dist/dialect.js.map +1 -0
  99. package/dist/email/smtp.d.ts +14 -0
  100. package/dist/email/smtp.d.ts.map +1 -0
  101. package/dist/email/smtp.js +27 -0
  102. package/dist/email/smtp.js.map +1 -0
  103. package/dist/email.d.ts +39 -0
  104. package/dist/email.d.ts.map +1 -0
  105. package/dist/email.js +97 -0
  106. package/dist/email.js.map +1 -0
  107. package/dist/env.d.ts +47 -0
  108. package/dist/env.d.ts.map +1 -0
  109. package/dist/env.js +99 -0
  110. package/dist/env.js.map +1 -0
  111. package/dist/errors.d.ts +125 -0
  112. package/dist/errors.d.ts.map +1 -0
  113. package/dist/errors.js +92 -0
  114. package/dist/errors.js.map +1 -0
  115. package/dist/handler.d.ts +9 -0
  116. package/dist/handler.d.ts.map +1 -0
  117. package/dist/handler.js +22 -0
  118. package/dist/handler.js.map +1 -0
  119. package/dist/idempotency.d.ts +17 -0
  120. package/dist/idempotency.d.ts.map +1 -0
  121. package/dist/idempotency.js +65 -0
  122. package/dist/idempotency.js.map +1 -0
  123. package/dist/index.d.ts +134 -0
  124. package/dist/index.d.ts.map +1 -0
  125. package/dist/index.js +477 -0
  126. package/dist/index.js.map +1 -0
  127. package/dist/internal-tables-pg.d.ts +481 -0
  128. package/dist/internal-tables-pg.d.ts.map +1 -0
  129. package/{src/internal-tables-pg.ts → dist/internal-tables-pg.js} +10 -34
  130. package/dist/internal-tables-pg.js.map +1 -0
  131. package/dist/internal-tables.d.ts +2509 -0
  132. package/dist/internal-tables.d.ts.map +1 -0
  133. package/dist/internal-tables.js +108 -0
  134. package/dist/internal-tables.js.map +1 -0
  135. package/dist/jobs/cron.d.ts +15 -0
  136. package/dist/jobs/cron.d.ts.map +1 -0
  137. package/dist/jobs/cron.js +74 -0
  138. package/dist/jobs/cron.js.map +1 -0
  139. package/dist/jobs/define.d.ts +133 -0
  140. package/dist/jobs/define.d.ts.map +1 -0
  141. package/dist/jobs/define.js +74 -0
  142. package/dist/jobs/define.js.map +1 -0
  143. package/dist/jobs/index.d.ts +11 -0
  144. package/dist/jobs/index.d.ts.map +1 -0
  145. package/dist/jobs/index.js +8 -0
  146. package/dist/jobs/index.js.map +1 -0
  147. package/dist/jobs/queue.d.ts +6 -0
  148. package/dist/jobs/queue.d.ts.map +1 -0
  149. package/dist/jobs/queue.js +55 -0
  150. package/dist/jobs/queue.js.map +1 -0
  151. package/dist/jobs/runtime.d.ts +13 -0
  152. package/dist/jobs/runtime.d.ts.map +1 -0
  153. package/dist/jobs/runtime.js +46 -0
  154. package/dist/jobs/runtime.js.map +1 -0
  155. package/dist/jobs/slots.d.ts +25 -0
  156. package/dist/jobs/slots.d.ts.map +1 -0
  157. package/dist/jobs/slots.js +41 -0
  158. package/dist/jobs/slots.js.map +1 -0
  159. package/dist/jobs/worker.d.ts +12 -0
  160. package/dist/jobs/worker.d.ts.map +1 -0
  161. package/dist/jobs/worker.js +311 -0
  162. package/dist/jobs/worker.js.map +1 -0
  163. package/dist/lifecycle.d.ts +10 -0
  164. package/dist/lifecycle.d.ts.map +1 -0
  165. package/dist/lifecycle.js +37 -0
  166. package/dist/lifecycle.js.map +1 -0
  167. package/dist/list-query.d.ts +62 -0
  168. package/dist/list-query.d.ts.map +1 -0
  169. package/dist/list-query.js +194 -0
  170. package/dist/list-query.js.map +1 -0
  171. package/dist/manifest.d.ts +59 -0
  172. package/dist/manifest.d.ts.map +1 -0
  173. package/dist/manifest.js +167 -0
  174. package/dist/manifest.js.map +1 -0
  175. package/dist/provision-internals.d.ts +24 -0
  176. package/dist/provision-internals.d.ts.map +1 -0
  177. package/dist/provision-internals.js +7 -0
  178. package/dist/provision-internals.js.map +1 -0
  179. package/dist/provision.d.ts +23 -0
  180. package/dist/provision.d.ts.map +1 -0
  181. package/dist/provision.js +96 -0
  182. package/dist/provision.js.map +1 -0
  183. package/dist/rate-limit.d.ts +7 -0
  184. package/dist/rate-limit.d.ts.map +1 -0
  185. package/dist/rate-limit.js +49 -0
  186. package/dist/rate-limit.js.map +1 -0
  187. package/dist/realtime/facade.d.ts +18 -0
  188. package/dist/realtime/facade.d.ts.map +1 -0
  189. package/dist/realtime/facade.js +36 -0
  190. package/dist/realtime/facade.js.map +1 -0
  191. package/dist/realtime/filter.d.ts +13 -0
  192. package/dist/realtime/filter.d.ts.map +1 -0
  193. package/dist/realtime/filter.js +48 -0
  194. package/dist/realtime/filter.js.map +1 -0
  195. package/dist/realtime/heartbeat.d.ts +14 -0
  196. package/dist/realtime/heartbeat.d.ts.map +1 -0
  197. package/dist/realtime/heartbeat.js +64 -0
  198. package/dist/realtime/heartbeat.js.map +1 -0
  199. package/dist/realtime/publisher.d.ts +21 -0
  200. package/dist/realtime/publisher.d.ts.map +1 -0
  201. package/dist/realtime/publisher.js +17 -0
  202. package/dist/realtime/publisher.js.map +1 -0
  203. package/dist/schema-export-pg.d.ts +2 -0
  204. package/dist/schema-export-pg.d.ts.map +1 -0
  205. package/dist/schema-export-pg.js +4 -0
  206. package/dist/schema-export-pg.js.map +1 -0
  207. package/dist/schema-export.d.ts +2 -0
  208. package/dist/schema-export.d.ts.map +1 -0
  209. package/dist/schema-export.js +2 -0
  210. package/dist/schema-export.js.map +1 -0
  211. package/dist/scope.d.ts +4 -0
  212. package/dist/scope.d.ts.map +1 -0
  213. package/dist/scope.js +13 -0
  214. package/dist/scope.js.map +1 -0
  215. package/dist/standard-schema.d.ts +13 -0
  216. package/dist/standard-schema.d.ts.map +1 -0
  217. package/dist/standard-schema.js +34 -0
  218. package/dist/standard-schema.js.map +1 -0
  219. package/dist/storage/buckets.d.ts +80 -0
  220. package/dist/storage/buckets.d.ts.map +1 -0
  221. package/dist/storage/buckets.js +178 -0
  222. package/dist/storage/buckets.js.map +1 -0
  223. package/dist/storage/delete.d.ts +11 -0
  224. package/dist/storage/delete.d.ts.map +1 -0
  225. package/dist/storage/delete.js +18 -0
  226. package/dist/storage/delete.js.map +1 -0
  227. package/dist/storage/file-meta.d.ts +37 -0
  228. package/dist/storage/file-meta.d.ts.map +1 -0
  229. package/dist/storage/file-meta.js +166 -0
  230. package/dist/storage/file-meta.js.map +1 -0
  231. package/dist/storage/index.d.ts +28 -0
  232. package/dist/storage/index.d.ts.map +1 -0
  233. package/dist/storage/index.js +5 -0
  234. package/dist/storage/index.js.map +1 -0
  235. package/dist/storage/local.d.ts +15 -0
  236. package/dist/storage/local.d.ts.map +1 -0
  237. package/dist/storage/local.js +56 -0
  238. package/dist/storage/local.js.map +1 -0
  239. package/dist/storage/operations.d.ts +54 -0
  240. package/dist/storage/operations.d.ts.map +1 -0
  241. package/dist/storage/operations.js +250 -0
  242. package/dist/storage/operations.js.map +1 -0
  243. package/dist/storage/registry.d.ts +10 -0
  244. package/dist/storage/registry.d.ts.map +1 -0
  245. package/dist/storage/registry.js +23 -0
  246. package/dist/storage/registry.js.map +1 -0
  247. package/dist/storage/s3.d.ts +28 -0
  248. package/dist/storage/s3.d.ts.map +1 -0
  249. package/dist/storage/s3.js +71 -0
  250. package/dist/storage/s3.js.map +1 -0
  251. package/dist/storage/sweep.d.ts +9 -0
  252. package/dist/storage/sweep.d.ts.map +1 -0
  253. package/dist/storage/sweep.js +17 -0
  254. package/dist/storage/sweep.js.map +1 -0
  255. package/dist/storage/thumbnails.d.ts +11 -0
  256. package/dist/storage/thumbnails.d.ts.map +1 -0
  257. package/dist/storage/thumbnails.js +60 -0
  258. package/dist/storage/thumbnails.js.map +1 -0
  259. package/dist/testing.d.ts +27 -0
  260. package/dist/testing.d.ts.map +1 -0
  261. package/dist/testing.js +11 -0
  262. package/dist/testing.js.map +1 -0
  263. package/dist/typeid-pg.d.ts +19 -0
  264. package/dist/typeid-pg.d.ts.map +1 -0
  265. package/{src/typeid-pg.ts → dist/typeid-pg.js} +10 -13
  266. package/dist/typeid-pg.js.map +1 -0
  267. package/dist/typeid.d.ts +45 -0
  268. package/dist/typeid.d.ts.map +1 -0
  269. package/dist/typeid.js +100 -0
  270. package/dist/typeid.js.map +1 -0
  271. package/package.json +77 -28
  272. package/src/access.ts +0 -532
  273. package/src/api/builder.ts +0 -52
  274. package/src/api/context.ts +0 -83
  275. package/src/api/crud-router.ts +0 -386
  276. package/src/api/openapi.ts +0 -184
  277. package/src/api/realtime-router.ts +0 -75
  278. package/src/api/registry.ts +0 -338
  279. package/src/api/router.ts +0 -34
  280. package/src/api/storage-router.ts +0 -224
  281. package/src/api/types.ts +0 -105
  282. package/src/auth.ts +0 -117
  283. package/src/blueprint-generator.ts +0 -203
  284. package/src/blueprint.ts +0 -264
  285. package/src/cli.ts +0 -90
  286. package/src/config.ts +0 -215
  287. package/src/cron.ts +0 -3
  288. package/src/crud-operations.ts +0 -478
  289. package/src/database/adapter.ts +0 -26
  290. package/src/database/bun-sql.ts +0 -23
  291. package/src/database/libsql.ts +0 -28
  292. package/src/database/pglite.ts +0 -33
  293. package/src/database/postgres-js.ts +0 -33
  294. package/src/db.ts +0 -61
  295. package/src/dialect.ts +0 -38
  296. package/src/email/smtp.ts +0 -45
  297. package/src/email.ts +0 -154
  298. package/src/env.ts +0 -180
  299. package/src/errors.ts +0 -123
  300. package/src/handler.ts +0 -30
  301. package/src/idempotency.ts +0 -97
  302. package/src/index.ts +0 -834
  303. package/src/internal-tables.ts +0 -149
  304. package/src/jobs/cron.ts +0 -87
  305. package/src/jobs/define.ts +0 -283
  306. package/src/jobs/index.ts +0 -37
  307. package/src/jobs/queue.ts +0 -67
  308. package/src/jobs/runtime.ts +0 -58
  309. package/src/jobs/slots.ts +0 -52
  310. package/src/jobs/worker.ts +0 -369
  311. package/src/lifecycle.ts +0 -49
  312. package/src/list-query.ts +0 -333
  313. package/src/manifest.ts +0 -297
  314. package/src/provision-internals.ts +0 -29
  315. package/src/provision.ts +0 -128
  316. package/src/rate-limit.ts +0 -71
  317. package/src/realtime/facade.ts +0 -74
  318. package/src/realtime/filter.ts +0 -81
  319. package/src/realtime/heartbeat.ts +0 -80
  320. package/src/realtime/publisher.ts +0 -46
  321. package/src/schema-export-pg.ts +0 -7
  322. package/src/schema-export.ts +0 -5
  323. package/src/scope.ts +0 -17
  324. package/src/standard-schema.ts +0 -59
  325. package/src/storage/buckets.ts +0 -308
  326. package/src/storage/delete.ts +0 -26
  327. package/src/storage/file-meta.ts +0 -222
  328. package/src/storage/index.ts +0 -39
  329. package/src/storage/local.ts +0 -69
  330. package/src/storage/operations.ts +0 -398
  331. package/src/storage/registry.ts +0 -40
  332. package/src/storage/s3.ts +0 -99
  333. package/src/storage/sweep.ts +0 -25
  334. package/src/storage/thumbnails.ts +0 -65
  335. package/src/testing.ts +0 -31
  336. package/src/typeid.ts +0 -116
@@ -1,10 +1,8 @@
1
1
  // src/typeid-pg.ts — Postgres twin of the typeid column builder. The codec
2
2
  // (generate/parse/encode/decode) is dialect-neutral and lives in ./typeid;
3
3
  // only the drizzle customType wrapper differs.
4
- import { customType } from 'drizzle-orm/pg-core'
5
-
6
- import { isValidPrefix, type TypeId } from './typeid'
7
-
4
+ import { customType } from 'drizzle-orm/pg-core';
5
+ import { isValidPrefix } from './typeid.js';
8
6
  /**
9
7
  * Drizzle column builder for a branded TypeID text value (Postgres). Stores a
10
8
  * plain `text` column so drizzle-kit migrations and `$inferSelect` work
@@ -12,13 +10,12 @@ import { isValidPrefix, type TypeId } from './typeid'
12
10
  *
13
11
  * id: typeid('post').primaryKey().$defaultFn(() => generate('post'))
14
12
  */
15
- export function typeid<P extends string>(prefix: P) {
16
- if (!isValidPrefix(prefix))
17
- throw new Error(`Invalid typeid prefix: "${prefix}"`)
18
- return customType<{ data: TypeId<P>; driverData: string }>({
19
- dataType: () => 'text',
20
- })()
13
+ export function typeid(prefix) {
14
+ if (!isValidPrefix(prefix))
15
+ throw new Error(`Invalid typeid prefix: "${prefix}"`);
16
+ return customType({
17
+ dataType: () => 'text',
18
+ })();
21
19
  }
22
-
23
- export { generate, parse, asTypeId, encode, decode } from './typeid'
24
- export type { TypeId } from './typeid'
20
+ export { generate, parse, asTypeId, encode, decode } from './typeid.js';
21
+ //# sourceMappingURL=typeid-pg.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typeid-pg.js","sourceRoot":"","sources":["../src/typeid-pg.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,2EAA2E;AAC3E,+CAA+C;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAEhD,OAAO,EAAE,aAAa,EAAe,MAAM,UAAU,CAAA;AAErD;;;;;;GAMG;AACH,MAAM,UAAU,MAAM,CAAmB,MAAS;IAChD,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,2BAA2B,MAAM,GAAG,CAAC,CAAA;IACvD,OAAO,UAAU,CAA0C;QACzD,QAAQ,EAAE,GAAG,EAAE,CAAC,MAAM;KACvB,CAAC,EAAE,CAAA;AACN,CAAC;AAED,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA"}
@@ -0,0 +1,45 @@
1
+ declare const typeIdBrand: unique symbol;
2
+ /** A branded TypeID string. `TypeId<'post'>` is incompatible with `TypeId<'user'>`. */
3
+ export type TypeId<P extends string> = string & {
4
+ readonly [typeIdBrand]?: P;
5
+ };
6
+ /** Encode a 16-byte UUID into the 26-character base32 suffix. */
7
+ export declare function encode(bytes: Uint8Array): string;
8
+ /** Decode a 26-character base32 suffix back into the original 16 UUID bytes. */
9
+ export declare function decode(suffix: string): Uint8Array;
10
+ /** Whether a string is a valid, non-empty TypeID prefix. */
11
+ export declare function isValidPrefix(prefix: string): boolean;
12
+ /** Generate a new, branded TypeID for the given prefix. */
13
+ export declare function generate<P extends string>(prefix: P): TypeId<P>;
14
+ /**
15
+ * Parse a TypeID into its parts and the decoded UUID. Throws if the id is
16
+ * malformed or — when `expectedPrefix` is given — if the prefix does not match.
17
+ */
18
+ export declare function parse<P extends string>(id: string, expectedPrefix?: P): {
19
+ prefix: string;
20
+ suffix: string;
21
+ uuid: string;
22
+ };
23
+ /**
24
+ * Escape hatch: validate a raw string against a prefix and brand it as a TypeID.
25
+ * Use at trust boundaries (e.g. a raw URL param) where the string isn't yet typed.
26
+ */
27
+ export declare function asTypeId<P extends string>(prefix: P, raw: string): TypeId<P>;
28
+ /**
29
+ * Drizzle column builder for a branded TypeID text value. Stores a plain `text`
30
+ * column so drizzle-kit migrations and `$inferSelect` work unchanged.
31
+ *
32
+ * Use Drizzle's `$defaultFn` when a column should generate IDs on insert:
33
+ *
34
+ * id: typeid('post').primaryKey().$defaultFn(() => generate('post'))
35
+ */
36
+ export declare function typeid<P extends string>(prefix: P): import("drizzle-orm/sqlite-core").SQLiteCustomColumnBuilder<{
37
+ name: "";
38
+ dataType: "custom";
39
+ columnType: "SQLiteCustomColumn";
40
+ data: TypeId<P>;
41
+ driverParam: string;
42
+ enumValues: undefined;
43
+ }>;
44
+ export {};
45
+ //# sourceMappingURL=typeid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typeid.d.ts","sourceRoot":"","sources":["../src/typeid.ts"],"names":[],"mappings":"AAkBA,OAAO,CAAC,MAAM,WAAW,EAAE,OAAO,MAAM,CAAA;AAExC,uFAAuF;AACvF,MAAM,MAAM,MAAM,CAAC,CAAC,SAAS,MAAM,IAAI,MAAM,GAAG;IAAE,QAAQ,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAA;CAAE,CAAA;AAE9E,iEAAiE;AACjE,wBAAgB,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAWhD;AAED,gFAAgF;AAChF,wBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAUjD;AAED,4DAA4D;AAC5D,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAErD;AAOD,2DAA2D;AAC3D,wBAAgB,QAAQ,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAK/D;AAED;;;GAGG;AACH,wBAAgB,KAAK,CAAC,CAAC,SAAS,MAAM,EACpC,EAAE,EAAE,MAAM,EACV,cAAc,CAAC,EAAE,CAAC,GACjB;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAelD;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAG5E;AAED;;;;;;;GAOG;AACH,wBAAgB,MAAM,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,CAAC;;;;;;;GAMjD"}
package/dist/typeid.js ADDED
@@ -0,0 +1,100 @@
1
+ // src/typeid.ts
2
+ //
3
+ // Zero-dependency TypeID implementation (https://github.com/jetify-com/typeid).
4
+ // Stripe-style prefixed, k-sortable identifiers: `prefix_<26-char base32 UUIDv7>`.
5
+ // The only runtime primitive we need is the raw UUIDv7 bytes, which Bun gives us
6
+ // natively via `Bun.randomUUIDv7("buffer")` — so we don't pull in the `uuid` dep
7
+ // that the reference `typeid-js` package relies on.
8
+ import { customType } from 'drizzle-orm/sqlite-core';
9
+ // Crockford base32 alphabet (lowercase, excludes i/l/o/u), as used by the TypeID spec.
10
+ const ALPHABET = '0123456789abcdefghjkmnpqrstvwxyz';
11
+ // Spec prefix rules: lowercase ascii, underscores allowed only internally, 1–63 chars.
12
+ const PREFIX_RE = /^[a-z]([a-z_]{0,61}[a-z])?$/;
13
+ // 26 base32 chars from the alphabet above.
14
+ const SUFFIX_RE = /^[0-9a-hjkmnp-tv-z]{26}$/;
15
+ /** Encode a 16-byte UUID into the 26-character base32 suffix. */
16
+ export function encode(bytes) {
17
+ // First two chars cover byte 0: top 3 bits, then low 5 bits.
18
+ let out = ALPHABET[bytes[0] >> 5] + ALPHABET[bytes[0] & 31];
19
+ // Remaining 15 bytes (120 bits) → 24 groups of 5 bits.
20
+ let buf = 0n;
21
+ for (let i = 1; i < 16; i++)
22
+ buf = (buf << 8n) | BigInt(bytes[i]);
23
+ const chars = [];
24
+ for (let i = 0; i < 24; i++) {
25
+ chars.push(ALPHABET[Number((buf >> (BigInt(23 - i) * 5n)) & 31n)]);
26
+ }
27
+ return out + chars.join('');
28
+ }
29
+ /** Decode a 26-character base32 suffix back into the original 16 UUID bytes. */
30
+ export function decode(suffix) {
31
+ const map = {};
32
+ for (let i = 0; i < ALPHABET.length; i++)
33
+ map[ALPHABET[i]] = i;
34
+ const bytes = new Uint8Array(16);
35
+ bytes[0] = (map[suffix[0]] << 5) | map[suffix[1]];
36
+ let buf = 0n;
37
+ for (let i = 2; i < 26; i++)
38
+ buf = (buf << 5n) | BigInt(map[suffix[i]]);
39
+ for (let i = 0; i < 15; i++)
40
+ bytes[15 - i] = Number((buf >> BigInt(i * 8)) & 0xffn);
41
+ return bytes;
42
+ }
43
+ /** Whether a string is a valid, non-empty TypeID prefix. */
44
+ export function isValidPrefix(prefix) {
45
+ return PREFIX_RE.test(prefix);
46
+ }
47
+ function bytesToUuid(bytes) {
48
+ const hex = Array.from(bytes, (b) => b.toString(16).padStart(2, '0')).join('');
49
+ return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;
50
+ }
51
+ /** Generate a new, branded TypeID for the given prefix. */
52
+ export function generate(prefix) {
53
+ if (!isValidPrefix(prefix))
54
+ throw new Error(`Invalid typeid prefix: "${prefix}"`);
55
+ const bytes = Bun.randomUUIDv7('buffer');
56
+ return `${prefix}_${encode(bytes)}`;
57
+ }
58
+ /**
59
+ * Parse a TypeID into its parts and the decoded UUID. Throws if the id is
60
+ * malformed or — when `expectedPrefix` is given — if the prefix does not match.
61
+ */
62
+ export function parse(id, expectedPrefix) {
63
+ const sep = id.lastIndexOf('_');
64
+ if (sep <= 0)
65
+ throw new Error(`Malformed typeid: "${id}"`);
66
+ const prefix = id.slice(0, sep);
67
+ const suffix = id.slice(sep + 1);
68
+ if (!isValidPrefix(prefix))
69
+ throw new Error(`Malformed typeid prefix: "${id}"`);
70
+ if (!SUFFIX_RE.test(suffix))
71
+ throw new Error(`Malformed typeid suffix: "${id}"`);
72
+ if (expectedPrefix !== undefined && prefix !== expectedPrefix) {
73
+ throw new Error(`Expected typeid prefix "${expectedPrefix}" but got "${prefix}"`);
74
+ }
75
+ return { prefix, suffix, uuid: bytesToUuid(decode(suffix)) };
76
+ }
77
+ /**
78
+ * Escape hatch: validate a raw string against a prefix and brand it as a TypeID.
79
+ * Use at trust boundaries (e.g. a raw URL param) where the string isn't yet typed.
80
+ */
81
+ export function asTypeId(prefix, raw) {
82
+ parse(raw, prefix);
83
+ return raw;
84
+ }
85
+ /**
86
+ * Drizzle column builder for a branded TypeID text value. Stores a plain `text`
87
+ * column so drizzle-kit migrations and `$inferSelect` work unchanged.
88
+ *
89
+ * Use Drizzle's `$defaultFn` when a column should generate IDs on insert:
90
+ *
91
+ * id: typeid('post').primaryKey().$defaultFn(() => generate('post'))
92
+ */
93
+ export function typeid(prefix) {
94
+ if (!isValidPrefix(prefix))
95
+ throw new Error(`Invalid typeid prefix: "${prefix}"`);
96
+ return customType({
97
+ dataType: () => 'text',
98
+ })();
99
+ }
100
+ //# sourceMappingURL=typeid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typeid.js","sourceRoot":"","sources":["../src/typeid.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bunderstack",
3
- "version": "0.17.0-beta.2",
3
+ "version": "0.17.0-beta.3",
4
4
  "description": "Batteries-included backend framework for Bun: type-safe oRPC APIs, auth, storage, realtime, jobs, email, and validated env from one config.",
5
5
  "keywords": [
6
6
  "backend",
@@ -21,43 +21,92 @@
21
21
  "directory": "packages/bunderstack"
22
22
  },
23
23
  "bin": {
24
- "bunderstack": "./src/cli.ts"
24
+ "bunderstack": "./dist/cli.js"
25
25
  },
26
26
  "files": [
27
- "src",
28
- "!src/**/*.test.ts",
29
- "!src/**/*.types.ts",
27
+ "dist",
28
+ "CHANGELOG.md",
30
29
  "README.md",
31
30
  "LICENSE"
32
31
  ],
33
32
  "type": "module",
34
- "main": "./src/index.ts",
35
- "module": "./src/index.ts",
36
- "types": "./src/index.ts",
33
+ "main": "./dist/index.js",
34
+ "module": "./dist/index.js",
35
+ "types": "./dist/index.d.ts",
37
36
  "exports": {
38
- ".": "./src/index.ts",
39
- "./access": "./src/access.ts",
40
- "./database/bun-sql": "./src/database/bun-sql.ts",
41
- "./database/libsql": "./src/database/libsql.ts",
42
- "./database/pglite": "./src/database/pglite.ts",
43
- "./database/postgres-js": "./src/database/postgres-js.ts",
44
- "./provision": "./src/provision.ts",
45
- "./schema": "./src/schema-export.ts",
46
- "./schema/pg": "./src/schema-export-pg.ts",
47
- "./typeid": "./src/typeid.ts",
48
- "./typeid/pg": "./src/typeid-pg.ts",
49
- "./env": "./src/env.ts",
50
- "./blueprint": "./src/blueprint.ts",
51
- "./cron": "./src/cron.ts",
52
- "./email/smtp": "./src/email/smtp.ts",
53
- "./api": "./src/api/types.ts"
37
+ ".": {
38
+ "types": "./dist/index.d.ts",
39
+ "default": "./dist/index.js"
40
+ },
41
+ "./access": {
42
+ "types": "./dist/access.d.ts",
43
+ "default": "./dist/access.js"
44
+ },
45
+ "./database/bun-sql": {
46
+ "types": "./dist/database/bun-sql.d.ts",
47
+ "default": "./dist/database/bun-sql.js"
48
+ },
49
+ "./database/libsql": {
50
+ "types": "./dist/database/libsql.d.ts",
51
+ "default": "./dist/database/libsql.js"
52
+ },
53
+ "./database/pglite": {
54
+ "types": "./dist/database/pglite.d.ts",
55
+ "default": "./dist/database/pglite.js"
56
+ },
57
+ "./database/postgres-js": {
58
+ "types": "./dist/database/postgres-js.d.ts",
59
+ "default": "./dist/database/postgres-js.js"
60
+ },
61
+ "./provision": {
62
+ "types": "./dist/provision.d.ts",
63
+ "default": "./dist/provision.js"
64
+ },
65
+ "./schema": {
66
+ "types": "./dist/schema-export.d.ts",
67
+ "default": "./dist/schema-export.js"
68
+ },
69
+ "./schema/pg": {
70
+ "types": "./dist/schema-export-pg.d.ts",
71
+ "default": "./dist/schema-export-pg.js"
72
+ },
73
+ "./typeid": {
74
+ "types": "./dist/typeid.d.ts",
75
+ "default": "./dist/typeid.js"
76
+ },
77
+ "./typeid/pg": {
78
+ "types": "./dist/typeid-pg.d.ts",
79
+ "default": "./dist/typeid-pg.js"
80
+ },
81
+ "./env": {
82
+ "types": "./dist/env.d.ts",
83
+ "default": "./dist/env.js"
84
+ },
85
+ "./blueprint": {
86
+ "types": "./dist/blueprint.d.ts",
87
+ "default": "./dist/blueprint.js"
88
+ },
89
+ "./cron": {
90
+ "types": "./dist/cron.d.ts",
91
+ "default": "./dist/cron.js"
92
+ },
93
+ "./email/smtp": {
94
+ "types": "./dist/email/smtp.d.ts",
95
+ "default": "./dist/email/smtp.js"
96
+ },
97
+ "./api": {
98
+ "types": "./dist/api/types.d.ts",
99
+ "default": "./dist/api/types.js"
100
+ }
54
101
  },
55
102
  "scripts": {
56
- "test": "bun test",
57
- "typecheck": "tsc --noEmit",
58
- "dev": "bun --hot ../../examples/standalone/server.ts",
103
+ "build": "bun ../../scripts/build-package.ts bunderstack",
104
+ "db:migrate": "drizzle-kit migrate",
59
105
  "db:push": "drizzle-kit push",
60
- "db:migrate": "drizzle-kit migrate"
106
+ "dev": "bun --hot ../../examples/standalone/server.ts",
107
+ "prepack": "bun run build",
108
+ "test": "bun test",
109
+ "typecheck": "tsc --noEmit"
61
110
  },
62
111
  "dependencies": {
63
112
  "@standard-schema/spec": "1.1.0",