bunderstack 0.17.0-beta.0 → 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 (337) 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 +81 -29
  272. package/src/access.ts +0 -552
  273. package/src/api/api-types.types.ts +0 -106
  274. package/src/api/builder.ts +0 -52
  275. package/src/api/context.ts +0 -83
  276. package/src/api/crud-router.ts +0 -321
  277. package/src/api/openapi.ts +0 -184
  278. package/src/api/realtime-router.ts +0 -75
  279. package/src/api/registry.ts +0 -338
  280. package/src/api/router.ts +0 -34
  281. package/src/api/storage-router.ts +0 -224
  282. package/src/api/types.ts +0 -84
  283. package/src/auth.ts +0 -117
  284. package/src/blueprint-generator.ts +0 -203
  285. package/src/blueprint.ts +0 -264
  286. package/src/cli.ts +0 -90
  287. package/src/config.ts +0 -215
  288. package/src/cron.ts +0 -3
  289. package/src/crud-operations.ts +0 -488
  290. package/src/database/adapter.ts +0 -26
  291. package/src/database/bun-sql.ts +0 -23
  292. package/src/database/libsql.ts +0 -28
  293. package/src/database/pglite.ts +0 -33
  294. package/src/database/postgres-js.ts +0 -33
  295. package/src/db.ts +0 -61
  296. package/src/dialect.ts +0 -38
  297. package/src/email/smtp.ts +0 -45
  298. package/src/email.ts +0 -154
  299. package/src/env.ts +0 -180
  300. package/src/errors.ts +0 -118
  301. package/src/handler.ts +0 -30
  302. package/src/idempotency.ts +0 -97
  303. package/src/index.ts +0 -822
  304. package/src/internal-tables.ts +0 -149
  305. package/src/jobs/cron.ts +0 -87
  306. package/src/jobs/define.ts +0 -283
  307. package/src/jobs/index.ts +0 -37
  308. package/src/jobs/queue.ts +0 -67
  309. package/src/jobs/runtime.ts +0 -58
  310. package/src/jobs/slots.ts +0 -52
  311. package/src/jobs/worker.ts +0 -369
  312. package/src/lifecycle.ts +0 -49
  313. package/src/list-query.ts +0 -416
  314. package/src/manifest.ts +0 -297
  315. package/src/provision-internals.ts +0 -29
  316. package/src/provision.ts +0 -128
  317. package/src/rate-limit.ts +0 -71
  318. package/src/realtime/facade.ts +0 -55
  319. package/src/realtime/filter.ts +0 -77
  320. package/src/realtime/heartbeat.ts +0 -80
  321. package/src/realtime/publisher.ts +0 -46
  322. package/src/schema-export-pg.ts +0 -7
  323. package/src/schema-export.ts +0 -5
  324. package/src/scope.ts +0 -17
  325. package/src/standard-schema.ts +0 -59
  326. package/src/storage/buckets.ts +0 -308
  327. package/src/storage/delete.ts +0 -26
  328. package/src/storage/file-meta.ts +0 -222
  329. package/src/storage/index.ts +0 -39
  330. package/src/storage/local.ts +0 -69
  331. package/src/storage/operations.ts +0 -398
  332. package/src/storage/registry.ts +0 -40
  333. package/src/storage/s3.ts +0 -99
  334. package/src/storage/sweep.ts +0 -25
  335. package/src/storage/thumbnails.ts +0 -65
  336. package/src/testing.ts +0 -31
  337. 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.0",
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,42 +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",
27
+ "dist",
28
+ "CHANGELOG.md",
29
29
  "README.md",
30
30
  "LICENSE"
31
31
  ],
32
32
  "type": "module",
33
- "main": "./src/index.ts",
34
- "module": "./src/index.ts",
35
- "types": "./src/index.ts",
33
+ "main": "./dist/index.js",
34
+ "module": "./dist/index.js",
35
+ "types": "./dist/index.d.ts",
36
36
  "exports": {
37
- ".": "./src/index.ts",
38
- "./access": "./src/access.ts",
39
- "./database/bun-sql": "./src/database/bun-sql.ts",
40
- "./database/libsql": "./src/database/libsql.ts",
41
- "./database/pglite": "./src/database/pglite.ts",
42
- "./database/postgres-js": "./src/database/postgres-js.ts",
43
- "./provision": "./src/provision.ts",
44
- "./schema": "./src/schema-export.ts",
45
- "./schema/pg": "./src/schema-export-pg.ts",
46
- "./typeid": "./src/typeid.ts",
47
- "./typeid/pg": "./src/typeid-pg.ts",
48
- "./env": "./src/env.ts",
49
- "./blueprint": "./src/blueprint.ts",
50
- "./cron": "./src/cron.ts",
51
- "./email/smtp": "./src/email/smtp.ts",
52
- "./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
+ }
53
101
  },
54
102
  "scripts": {
55
- "test": "bun test",
56
- "typecheck": "tsc --noEmit",
57
- "dev": "bun --hot ../../examples/standalone/server.ts",
103
+ "build": "bun ../../scripts/build-package.ts bunderstack",
104
+ "db:migrate": "drizzle-kit migrate",
58
105
  "db:push": "drizzle-kit push",
59
- "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"
60
110
  },
61
111
  "dependencies": {
62
112
  "@standard-schema/spec": "1.1.0",
@@ -66,8 +116,9 @@
66
116
  "devDependencies": {
67
117
  "@electric-sql/pglite": ">=0.3.0",
68
118
  "@libsql/client": ">=0.14.0",
69
- "@orpc/openapi": "2.0.0-beta.26",
70
119
  "@orpc/bun": "2.0.0-beta.26",
120
+ "@orpc/json-schema": "2.0.0-beta.26",
121
+ "@orpc/openapi": "2.0.0-beta.26",
71
122
  "@orpc/publisher": "2.0.0-beta.26",
72
123
  "@orpc/server": "2.0.0-beta.26",
73
124
  "@orpc/valibot": "2.0.0-beta.26",
@@ -80,8 +131,9 @@
80
131
  "peerDependencies": {
81
132
  "@electric-sql/pglite": ">=0.3.0",
82
133
  "@libsql/client": ">=0.14.0",
83
- "@orpc/openapi": "2.0.0-beta.26",
84
134
  "@orpc/bun": "2.0.0-beta.26",
135
+ "@orpc/json-schema": "2.0.0-beta.26",
136
+ "@orpc/openapi": "2.0.0-beta.26",
85
137
  "@orpc/publisher": "2.0.0-beta.26",
86
138
  "@orpc/server": "2.0.0-beta.26",
87
139
  "@orpc/valibot": "2.0.0-beta.26",