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.
- package/CHANGELOG.md +227 -0
- package/README.md +11 -1
- package/dist/access.d.ts +116 -0
- package/dist/access.d.ts.map +1 -0
- package/dist/access.js +325 -0
- package/dist/access.js.map +1 -0
- package/dist/api/builder.d.ts +145 -0
- package/dist/api/builder.d.ts.map +1 -0
- package/dist/api/builder.js +28 -0
- package/dist/api/builder.js.map +1 -0
- package/dist/api/context.d.ts +34 -0
- package/dist/api/context.d.ts.map +1 -0
- package/dist/api/context.js +32 -0
- package/dist/api/context.js.map +1 -0
- package/dist/api/crud-router.d.ts +290 -0
- package/dist/api/crud-router.d.ts.map +1 -0
- package/dist/api/crud-router.js +249 -0
- package/dist/api/crud-router.js.map +1 -0
- package/dist/api/openapi.d.ts +6 -0
- package/dist/api/openapi.d.ts.map +1 -0
- package/dist/api/openapi.js +146 -0
- package/dist/api/openapi.js.map +1 -0
- package/dist/api/realtime-router.d.ts +76 -0
- package/dist/api/realtime-router.d.ts.map +1 -0
- package/dist/api/realtime-router.js +41 -0
- package/dist/api/realtime-router.js.map +1 -0
- package/dist/api/registry.d.ts +30 -0
- package/dist/api/registry.d.ts.map +1 -0
- package/dist/api/registry.js +239 -0
- package/dist/api/registry.js.map +1 -0
- package/dist/api/router.d.ts +9 -0
- package/dist/api/router.d.ts.map +1 -0
- package/dist/api/router.js +19 -0
- package/dist/api/router.js.map +1 -0
- package/dist/api/storage-router.d.ts +279 -0
- package/dist/api/storage-router.d.ts.map +1 -0
- package/dist/api/storage-router.js +155 -0
- package/dist/api/storage-router.js.map +1 -0
- package/dist/api/types.d.ts +55 -0
- package/dist/api/types.d.ts.map +1 -0
- package/dist/api/types.js +2 -0
- package/dist/api/types.js.map +1 -0
- package/dist/auth.d.ts +31 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +102 -0
- package/dist/auth.js.map +1 -0
- package/dist/blueprint-generator.d.ts +18 -0
- package/dist/blueprint-generator.d.ts.map +1 -0
- package/dist/blueprint-generator.js +125 -0
- package/dist/blueprint-generator.js.map +1 -0
- package/dist/blueprint.d.ts +46 -0
- package/dist/blueprint.d.ts.map +1 -0
- package/dist/blueprint.js +162 -0
- package/dist/blueprint.js.map +1 -0
- package/dist/cli.d.ts +8 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +68 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +76 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +81 -0
- package/dist/config.js.map +1 -0
- package/dist/cron.d.ts +4 -0
- package/dist/cron.d.ts.map +1 -0
- package/dist/cron.js +3 -0
- package/dist/cron.js.map +1 -0
- package/dist/crud-operations.d.ts +43 -0
- package/dist/crud-operations.d.ts.map +1 -0
- package/dist/crud-operations.js +238 -0
- package/dist/crud-operations.js.map +1 -0
- package/dist/database/adapter.d.ts +20 -0
- package/dist/database/adapter.d.ts.map +1 -0
- package/dist/database/adapter.js +2 -0
- package/dist/database/adapter.js.map +1 -0
- package/dist/database/bun-sql.d.ts +3 -0
- package/dist/database/bun-sql.d.ts.map +1 -0
- package/dist/database/bun-sql.js +21 -0
- package/dist/database/bun-sql.js.map +1 -0
- package/dist/database/libsql.d.ts +3 -0
- package/dist/database/libsql.d.ts.map +1 -0
- package/dist/database/libsql.js +22 -0
- package/dist/database/libsql.js.map +1 -0
- package/dist/database/pglite.d.ts +3 -0
- package/dist/database/pglite.d.ts.map +1 -0
- package/dist/database/pglite.js +27 -0
- package/dist/database/pglite.js.map +1 -0
- package/dist/database/postgres-js.d.ts +3 -0
- package/dist/database/postgres-js.d.ts.map +1 -0
- package/dist/database/postgres-js.js +21 -0
- package/dist/database/postgres-js.js.map +1 -0
- package/dist/db.d.ts +18 -0
- package/dist/db.d.ts.map +1 -0
- package/dist/db.js +26 -0
- package/dist/db.js.map +1 -0
- package/dist/dialect.d.ts +17 -0
- package/dist/dialect.d.ts.map +1 -0
- package/dist/dialect.js +22 -0
- package/dist/dialect.js.map +1 -0
- package/dist/email/smtp.d.ts +14 -0
- package/dist/email/smtp.d.ts.map +1 -0
- package/dist/email/smtp.js +27 -0
- package/dist/email/smtp.js.map +1 -0
- package/dist/email.d.ts +39 -0
- package/dist/email.d.ts.map +1 -0
- package/dist/email.js +97 -0
- package/dist/email.js.map +1 -0
- package/dist/env.d.ts +47 -0
- package/dist/env.d.ts.map +1 -0
- package/dist/env.js +99 -0
- package/dist/env.js.map +1 -0
- package/dist/errors.d.ts +125 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +92 -0
- package/dist/errors.js.map +1 -0
- package/dist/handler.d.ts +9 -0
- package/dist/handler.d.ts.map +1 -0
- package/dist/handler.js +22 -0
- package/dist/handler.js.map +1 -0
- package/dist/idempotency.d.ts +17 -0
- package/dist/idempotency.d.ts.map +1 -0
- package/dist/idempotency.js +65 -0
- package/dist/idempotency.js.map +1 -0
- package/dist/index.d.ts +134 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +477 -0
- package/dist/index.js.map +1 -0
- package/dist/internal-tables-pg.d.ts +481 -0
- package/dist/internal-tables-pg.d.ts.map +1 -0
- package/{src/internal-tables-pg.ts → dist/internal-tables-pg.js} +10 -34
- package/dist/internal-tables-pg.js.map +1 -0
- package/dist/internal-tables.d.ts +2509 -0
- package/dist/internal-tables.d.ts.map +1 -0
- package/dist/internal-tables.js +108 -0
- package/dist/internal-tables.js.map +1 -0
- package/dist/jobs/cron.d.ts +15 -0
- package/dist/jobs/cron.d.ts.map +1 -0
- package/dist/jobs/cron.js +74 -0
- package/dist/jobs/cron.js.map +1 -0
- package/dist/jobs/define.d.ts +133 -0
- package/dist/jobs/define.d.ts.map +1 -0
- package/dist/jobs/define.js +74 -0
- package/dist/jobs/define.js.map +1 -0
- package/dist/jobs/index.d.ts +11 -0
- package/dist/jobs/index.d.ts.map +1 -0
- package/dist/jobs/index.js +8 -0
- package/dist/jobs/index.js.map +1 -0
- package/dist/jobs/queue.d.ts +6 -0
- package/dist/jobs/queue.d.ts.map +1 -0
- package/dist/jobs/queue.js +55 -0
- package/dist/jobs/queue.js.map +1 -0
- package/dist/jobs/runtime.d.ts +13 -0
- package/dist/jobs/runtime.d.ts.map +1 -0
- package/dist/jobs/runtime.js +46 -0
- package/dist/jobs/runtime.js.map +1 -0
- package/dist/jobs/slots.d.ts +25 -0
- package/dist/jobs/slots.d.ts.map +1 -0
- package/dist/jobs/slots.js +41 -0
- package/dist/jobs/slots.js.map +1 -0
- package/dist/jobs/worker.d.ts +12 -0
- package/dist/jobs/worker.d.ts.map +1 -0
- package/dist/jobs/worker.js +311 -0
- package/dist/jobs/worker.js.map +1 -0
- package/dist/lifecycle.d.ts +10 -0
- package/dist/lifecycle.d.ts.map +1 -0
- package/dist/lifecycle.js +37 -0
- package/dist/lifecycle.js.map +1 -0
- package/dist/list-query.d.ts +62 -0
- package/dist/list-query.d.ts.map +1 -0
- package/dist/list-query.js +194 -0
- package/dist/list-query.js.map +1 -0
- package/dist/manifest.d.ts +59 -0
- package/dist/manifest.d.ts.map +1 -0
- package/dist/manifest.js +167 -0
- package/dist/manifest.js.map +1 -0
- package/dist/provision-internals.d.ts +24 -0
- package/dist/provision-internals.d.ts.map +1 -0
- package/dist/provision-internals.js +7 -0
- package/dist/provision-internals.js.map +1 -0
- package/dist/provision.d.ts +23 -0
- package/dist/provision.d.ts.map +1 -0
- package/dist/provision.js +96 -0
- package/dist/provision.js.map +1 -0
- package/dist/rate-limit.d.ts +7 -0
- package/dist/rate-limit.d.ts.map +1 -0
- package/dist/rate-limit.js +49 -0
- package/dist/rate-limit.js.map +1 -0
- package/dist/realtime/facade.d.ts +18 -0
- package/dist/realtime/facade.d.ts.map +1 -0
- package/dist/realtime/facade.js +36 -0
- package/dist/realtime/facade.js.map +1 -0
- package/dist/realtime/filter.d.ts +13 -0
- package/dist/realtime/filter.d.ts.map +1 -0
- package/dist/realtime/filter.js +48 -0
- package/dist/realtime/filter.js.map +1 -0
- package/dist/realtime/heartbeat.d.ts +14 -0
- package/dist/realtime/heartbeat.d.ts.map +1 -0
- package/dist/realtime/heartbeat.js +64 -0
- package/dist/realtime/heartbeat.js.map +1 -0
- package/dist/realtime/publisher.d.ts +21 -0
- package/dist/realtime/publisher.d.ts.map +1 -0
- package/dist/realtime/publisher.js +17 -0
- package/dist/realtime/publisher.js.map +1 -0
- package/dist/schema-export-pg.d.ts +2 -0
- package/dist/schema-export-pg.d.ts.map +1 -0
- package/dist/schema-export-pg.js +4 -0
- package/dist/schema-export-pg.js.map +1 -0
- package/dist/schema-export.d.ts +2 -0
- package/dist/schema-export.d.ts.map +1 -0
- package/dist/schema-export.js +2 -0
- package/dist/schema-export.js.map +1 -0
- package/dist/scope.d.ts +4 -0
- package/dist/scope.d.ts.map +1 -0
- package/dist/scope.js +13 -0
- package/dist/scope.js.map +1 -0
- package/dist/standard-schema.d.ts +13 -0
- package/dist/standard-schema.d.ts.map +1 -0
- package/dist/standard-schema.js +34 -0
- package/dist/standard-schema.js.map +1 -0
- package/dist/storage/buckets.d.ts +80 -0
- package/dist/storage/buckets.d.ts.map +1 -0
- package/dist/storage/buckets.js +178 -0
- package/dist/storage/buckets.js.map +1 -0
- package/dist/storage/delete.d.ts +11 -0
- package/dist/storage/delete.d.ts.map +1 -0
- package/dist/storage/delete.js +18 -0
- package/dist/storage/delete.js.map +1 -0
- package/dist/storage/file-meta.d.ts +37 -0
- package/dist/storage/file-meta.d.ts.map +1 -0
- package/dist/storage/file-meta.js +166 -0
- package/dist/storage/file-meta.js.map +1 -0
- package/dist/storage/index.d.ts +28 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +5 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/local.d.ts +15 -0
- package/dist/storage/local.d.ts.map +1 -0
- package/dist/storage/local.js +56 -0
- package/dist/storage/local.js.map +1 -0
- package/dist/storage/operations.d.ts +54 -0
- package/dist/storage/operations.d.ts.map +1 -0
- package/dist/storage/operations.js +250 -0
- package/dist/storage/operations.js.map +1 -0
- package/dist/storage/registry.d.ts +10 -0
- package/dist/storage/registry.d.ts.map +1 -0
- package/dist/storage/registry.js +23 -0
- package/dist/storage/registry.js.map +1 -0
- package/dist/storage/s3.d.ts +28 -0
- package/dist/storage/s3.d.ts.map +1 -0
- package/dist/storage/s3.js +71 -0
- package/dist/storage/s3.js.map +1 -0
- package/dist/storage/sweep.d.ts +9 -0
- package/dist/storage/sweep.d.ts.map +1 -0
- package/dist/storage/sweep.js +17 -0
- package/dist/storage/sweep.js.map +1 -0
- package/dist/storage/thumbnails.d.ts +11 -0
- package/dist/storage/thumbnails.d.ts.map +1 -0
- package/dist/storage/thumbnails.js +60 -0
- package/dist/storage/thumbnails.js.map +1 -0
- package/dist/testing.d.ts +27 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +11 -0
- package/dist/testing.js.map +1 -0
- package/dist/typeid-pg.d.ts +19 -0
- package/dist/typeid-pg.d.ts.map +1 -0
- package/{src/typeid-pg.ts → dist/typeid-pg.js} +10 -13
- package/dist/typeid-pg.js.map +1 -0
- package/dist/typeid.d.ts +45 -0
- package/dist/typeid.d.ts.map +1 -0
- package/dist/typeid.js +100 -0
- package/dist/typeid.js.map +1 -0
- package/package.json +77 -28
- package/src/access.ts +0 -532
- package/src/api/builder.ts +0 -52
- package/src/api/context.ts +0 -83
- package/src/api/crud-router.ts +0 -386
- package/src/api/openapi.ts +0 -184
- package/src/api/realtime-router.ts +0 -75
- package/src/api/registry.ts +0 -338
- package/src/api/router.ts +0 -34
- package/src/api/storage-router.ts +0 -224
- package/src/api/types.ts +0 -105
- package/src/auth.ts +0 -117
- package/src/blueprint-generator.ts +0 -203
- package/src/blueprint.ts +0 -264
- package/src/cli.ts +0 -90
- package/src/config.ts +0 -215
- package/src/cron.ts +0 -3
- package/src/crud-operations.ts +0 -478
- package/src/database/adapter.ts +0 -26
- package/src/database/bun-sql.ts +0 -23
- package/src/database/libsql.ts +0 -28
- package/src/database/pglite.ts +0 -33
- package/src/database/postgres-js.ts +0 -33
- package/src/db.ts +0 -61
- package/src/dialect.ts +0 -38
- package/src/email/smtp.ts +0 -45
- package/src/email.ts +0 -154
- package/src/env.ts +0 -180
- package/src/errors.ts +0 -123
- package/src/handler.ts +0 -30
- package/src/idempotency.ts +0 -97
- package/src/index.ts +0 -834
- package/src/internal-tables.ts +0 -149
- package/src/jobs/cron.ts +0 -87
- package/src/jobs/define.ts +0 -283
- package/src/jobs/index.ts +0 -37
- package/src/jobs/queue.ts +0 -67
- package/src/jobs/runtime.ts +0 -58
- package/src/jobs/slots.ts +0 -52
- package/src/jobs/worker.ts +0 -369
- package/src/lifecycle.ts +0 -49
- package/src/list-query.ts +0 -333
- package/src/manifest.ts +0 -297
- package/src/provision-internals.ts +0 -29
- package/src/provision.ts +0 -128
- package/src/rate-limit.ts +0 -71
- package/src/realtime/facade.ts +0 -74
- package/src/realtime/filter.ts +0 -81
- package/src/realtime/heartbeat.ts +0 -80
- package/src/realtime/publisher.ts +0 -46
- package/src/schema-export-pg.ts +0 -7
- package/src/schema-export.ts +0 -5
- package/src/scope.ts +0 -17
- package/src/standard-schema.ts +0 -59
- package/src/storage/buckets.ts +0 -308
- package/src/storage/delete.ts +0 -26
- package/src/storage/file-meta.ts +0 -222
- package/src/storage/index.ts +0 -39
- package/src/storage/local.ts +0 -69
- package/src/storage/operations.ts +0 -398
- package/src/storage/registry.ts +0 -40
- package/src/storage/s3.ts +0 -99
- package/src/storage/sweep.ts +0 -25
- package/src/storage/thumbnails.ts +0 -65
- package/src/testing.ts +0 -31
- 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
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
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
|
-
|
|
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"}
|
package/dist/typeid.d.ts
ADDED
|
@@ -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.
|
|
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": "./
|
|
24
|
+
"bunderstack": "./dist/cli.js"
|
|
25
25
|
},
|
|
26
26
|
"files": [
|
|
27
|
-
"
|
|
28
|
-
"
|
|
29
|
-
"!src/**/*.types.ts",
|
|
27
|
+
"dist",
|
|
28
|
+
"CHANGELOG.md",
|
|
30
29
|
"README.md",
|
|
31
30
|
"LICENSE"
|
|
32
31
|
],
|
|
33
32
|
"type": "module",
|
|
34
|
-
"main": "./
|
|
35
|
-
"module": "./
|
|
36
|
-
"types": "./
|
|
33
|
+
"main": "./dist/index.js",
|
|
34
|
+
"module": "./dist/index.js",
|
|
35
|
+
"types": "./dist/index.d.ts",
|
|
37
36
|
"exports": {
|
|
38
|
-
".":
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
"./
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
"./
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
"./
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
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
|
-
"
|
|
57
|
-
"
|
|
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
|
-
"
|
|
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",
|