effect-start 0.23.0 → 0.25.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.
- package/dist/ChildProcess.js +32 -20
- package/dist/Commander.js +377 -293
- package/dist/ContentNegotiation.js +424 -318
- package/dist/Cookies.js +340 -271
- package/dist/Development.js +85 -49
- package/dist/Effectify.js +22 -14
- package/dist/Entity.js +260 -195
- package/dist/Fetch.js +192 -0
- package/dist/FilePathPattern.js +88 -77
- package/dist/FileRouter.js +192 -136
- package/dist/FileRouterCodegen.js +262 -191
- package/dist/FileSystem.js +126 -64
- package/dist/Http.js +96 -77
- package/dist/PathPattern.js +311 -273
- package/dist/PlatformError.js +36 -21
- package/dist/PlatformRuntime.js +65 -40
- package/dist/Route.js +122 -79
- package/dist/RouteBody.js +83 -58
- package/dist/RouteError.js +46 -25
- package/dist/RouteHook.js +58 -34
- package/dist/RouteHttp.js +346 -237
- package/dist/RouteHttpTracer.js +86 -58
- package/dist/RouteMount.js +81 -58
- package/dist/RouteSchema.js +253 -170
- package/dist/RouteSse.js +87 -72
- package/dist/RouteTree.js +99 -73
- package/dist/RouteTrie.js +160 -133
- package/dist/SchemaExtra.js +87 -62
- package/dist/Socket.js +32 -21
- package/dist/SqlIntrospect.js +317 -268
- package/dist/Start.js +55 -25
- package/dist/StartApp.js +3 -21
- package/dist/StreamExtra.js +109 -74
- package/dist/System.js +37 -21
- package/dist/TuplePathPattern.js +64 -58
- package/dist/Unique.js +159 -120
- package/dist/Values.js +48 -32
- package/dist/bun/BunBundle.js +158 -109
- package/dist/bun/BunChildProcessSpawner.js +121 -82
- package/dist/bun/BunImportTrackerPlugin.js +85 -63
- package/dist/bun/BunRoute.js +135 -99
- package/dist/bun/BunRuntime.js +39 -29
- package/dist/bun/BunServer.js +268 -140
- package/dist/bun/BunVirtualFilesPlugin.js +47 -33
- package/dist/bun/_BunEnhancedResolve.js +107 -82
- package/dist/bun/index.js +5 -5
- package/dist/bundler/Bundle.js +82 -38
- package/dist/bundler/BundleFiles.js +140 -82
- package/dist/bundler/BundleRoute.js +49 -38
- package/dist/client/Overlay.js +29 -28
- package/dist/client/ScrollState.js +94 -82
- package/dist/client/index.js +79 -61
- package/dist/console/Console.js +40 -24
- package/dist/console/ConsoleErrors.js +189 -178
- package/dist/console/ConsoleLogger.js +52 -43
- package/dist/console/ConsoleMetrics.js +69 -58
- package/dist/console/ConsoleProcess.js +57 -47
- package/dist/console/ConsoleStore.js +56 -45
- package/dist/console/ConsoleTracer.js +101 -88
- package/dist/console/Simulation.js +714 -563
- package/dist/console/index.js +3 -3
- package/dist/console/routes/tree.js +29 -28
- package/dist/datastar/actions/fetch.js +514 -381
- package/dist/datastar/actions/peek.js +12 -12
- package/dist/datastar/actions/setAll.js +18 -11
- package/dist/datastar/actions/toggleAll.js +18 -11
- package/dist/datastar/attributes/attr.js +48 -47
- package/dist/datastar/attributes/bind.js +186 -167
- package/dist/datastar/attributes/class.js +51 -44
- package/dist/datastar/attributes/computed.js +23 -24
- package/dist/datastar/attributes/effect.js +9 -8
- package/dist/datastar/attributes/indicator.js +32 -29
- package/dist/datastar/attributes/init.js +26 -25
- package/dist/datastar/attributes/jsonSignals.js +32 -29
- package/dist/datastar/attributes/on.js +76 -73
- package/dist/datastar/attributes/onIntersect.js +51 -51
- package/dist/datastar/attributes/onInterval.js +30 -29
- package/dist/datastar/attributes/onSignalPatch.js +49 -40
- package/dist/datastar/attributes/ref.js +10 -9
- package/dist/datastar/attributes/show.js +31 -30
- package/dist/datastar/attributes/signals.js +17 -16
- package/dist/datastar/attributes/style.js +56 -49
- package/dist/datastar/attributes/text.js +28 -25
- package/dist/datastar/engine.js +1079 -933
- package/dist/datastar/index.js +25 -24
- package/dist/datastar/utils.js +203 -155
- package/dist/datastar/watchers/patchElements.js +459 -372
- package/dist/datastar/watchers/patchSignals.js +13 -13
- package/dist/experimental/EncryptedCookies.js +305 -189
- package/dist/experimental/index.js +1 -1
- package/dist/hyper/Hyper.js +22 -17
- package/dist/hyper/HyperHtml.js +138 -123
- package/dist/hyper/HyperNode.js +11 -9
- package/dist/hyper/HyperRoute.js +41 -28
- package/dist/hyper/html.js +27 -27
- package/dist/hyper/index.js +5 -5
- package/dist/hyper/jsx-runtime.js +11 -5
- package/dist/index.js +8 -8
- package/dist/node/NodeFileSystem.js +606 -341
- package/dist/node/NodeUtils.js +21 -18
- package/dist/sql/Sql.js +8 -0
- package/dist/sql/bun/index.js +134 -67
- package/dist/sql/index.js +1 -0
- package/dist/sql/libsql/index.js +156 -0
- package/dist/sql/mssql/docker.js +103 -60
- package/dist/sql/mssql/index.js +182 -101
- package/dist/testing/TestLogger.js +39 -29
- package/dist/testing/index.js +2 -2
- package/dist/testing/utils.js +45 -23
- package/dist/x/cloudflare/CloudflareTunnel.js +61 -28
- package/dist/x/cloudflare/index.js +1 -1
- package/dist/x/tailscale/TailscaleTunnel.js +86 -60
- package/dist/x/tailscale/index.js +1 -1
- package/dist/x/tailwind/TailwindPlugin.js +280 -205
- package/dist/x/tailwind/compile.js +185 -129
- package/dist/x/tailwind/plugin.js +13 -11
- package/package.json +1 -1
- package/src/Development.ts +3 -1
- package/src/Entity.ts +17 -0
- package/src/Fetch.ts +271 -0
- package/src/SqlIntrospect.ts +64 -70
- package/src/Start.ts +24 -22
- package/src/StartApp.ts +11 -0
- package/src/bun/BunServer.ts +89 -16
- package/src/hyper/HyperHtml.ts +0 -1
- package/src/sql/bun/index.ts +1 -1
- package/src/sql/index.ts +1 -0
- package/src/sql/libsql/index.ts +173 -0
- package/src/sql/libsql/libsql.d.ts +39 -0
- package/src/sql/mssql/index.ts +1 -1
- package/src/x/tailscale/TailscaleTunnel.ts +7 -5
- package/dist/BlobStore.d.ts +0 -80
- package/dist/BlobStore.js +0 -19
- package/dist/ChildProcess.d.ts +0 -60
- package/dist/Commander.d.ts +0 -100
- package/dist/ContentNegotiation.d.ts +0 -12
- package/dist/Cookies.d.ts +0 -47
- package/dist/Development.d.ts +0 -39
- package/dist/Effectify.d.ts +0 -209
- package/dist/Entity.d.ts +0 -47
- package/dist/FilePathPattern.d.ts +0 -29
- package/dist/FileRouter.d.ts +0 -56
- package/dist/FileRouterCodegen.d.ts +0 -18
- package/dist/FileRouterPattern.d.ts +0 -9
- package/dist/FileRouterPattern.js +0 -35
- package/dist/FileSystem.d.ts +0 -158
- package/dist/Http.d.ts +0 -37
- package/dist/HttpAppExtra.d.ts +0 -7
- package/dist/HttpAppExtra.js +0 -320
- package/dist/HttpUtils.d.ts +0 -3
- package/dist/HttpUtils.js +0 -11
- package/dist/PathPattern.d.ts +0 -134
- package/dist/PlatformError.d.ts +0 -38
- package/dist/PlatformRuntime.d.ts +0 -27
- package/dist/Route.d.ts +0 -97
- package/dist/RouteBody.d.ts +0 -47
- package/dist/RouteError.d.ts +0 -98
- package/dist/RouteHook.d.ts +0 -12
- package/dist/RouteHttp.d.ts +0 -21
- package/dist/RouteHttpTracer.d.ts +0 -10
- package/dist/RouteMount.d.ts +0 -86
- package/dist/RouteSchema.d.ts +0 -86
- package/dist/RouteSse.d.ts +0 -21
- package/dist/RouteTree.d.ts +0 -57
- package/dist/RouteTrie.d.ts +0 -20
- package/dist/RouterPattern.d.ts +0 -118
- package/dist/RouterPattern.js +0 -269
- package/dist/SchemaExtra.d.ts +0 -7
- package/dist/Socket.d.ts +0 -27
- package/dist/Sql.d.ts +0 -34
- package/dist/Sql.js +0 -5
- package/dist/SqlIntrospect.d.ts +0 -91
- package/dist/Start.d.ts +0 -44
- package/dist/StartApp.d.ts +0 -19
- package/dist/StreamExtra.d.ts +0 -28
- package/dist/System.d.ts +0 -7
- package/dist/TuplePathPattern.d.ts +0 -9
- package/dist/Unique.d.ts +0 -50
- package/dist/Values.d.ts +0 -27
- package/dist/bun/BunBlobStoreDisk.d.ts +0 -6
- package/dist/bun/BunBlobStoreDisk.js +0 -116
- package/dist/bun/BunBlobStoreS3.d.ts +0 -11
- package/dist/bun/BunBlobStoreS3.js +0 -89
- package/dist/bun/BunBlobWatcherDisk.d.ts +0 -6
- package/dist/bun/BunBlobWatcherDisk.js +0 -60
- package/dist/bun/BunBlobWatcherQueue.d.ts +0 -6
- package/dist/bun/BunBlobWatcherQueue.js +0 -17
- package/dist/bun/BunBundle.d.ts +0 -11
- package/dist/bun/BunChildProcessSpawner.d.ts +0 -3
- package/dist/bun/BunHttpServer.d.ts +0 -44
- package/dist/bun/BunHttpServer.js +0 -186
- package/dist/bun/BunHttpServer_web.d.ts +0 -60
- package/dist/bun/BunHttpServer_web.js +0 -252
- package/dist/bun/BunImportTrackerPlugin.d.ts +0 -13
- package/dist/bun/BunPlatformHttpServer.d.ts +0 -10
- package/dist/bun/BunPlatformHttpServer.js +0 -53
- package/dist/bun/BunRoute.d.ts +0 -48
- package/dist/bun/BunRuntime.d.ts +0 -2
- package/dist/bun/BunServer.d.ts +0 -40
- package/dist/bun/BunServerRequest.d.ts +0 -60
- package/dist/bun/BunServerRequest.js +0 -252
- package/dist/bun/BunSql.d.ts +0 -4
- package/dist/bun/BunSql.js +0 -81
- package/dist/bun/BunVirtualFilesPlugin.d.ts +0 -4
- package/dist/bun/_BunEnhancedResolve.d.ts +0 -45
- package/dist/bun/index.d.ts +0 -5
- package/dist/bundler/Bundle.d.ts +0 -61
- package/dist/bundler/BundleFiles.d.ts +0 -13
- package/dist/bundler/BundleHttp.d.ts +0 -45
- package/dist/bundler/BundleHttp.js +0 -176
- package/dist/bundler/BundleRoute.d.ts +0 -27
- package/dist/client/Overlay.d.ts +0 -2
- package/dist/client/ScrollState.d.ts +0 -6
- package/dist/client/index.d.ts +0 -6
- package/dist/console/Console.d.ts +0 -6
- package/dist/console/ConsoleErrors.d.ts +0 -3
- package/dist/console/ConsoleLogger.d.ts +0 -3
- package/dist/console/ConsoleMetrics.d.ts +0 -3
- package/dist/console/ConsoleProcess.d.ts +0 -3
- package/dist/console/ConsoleStore.d.ts +0 -144
- package/dist/console/ConsoleTracer.d.ts +0 -3
- package/dist/console/Simulation.d.ts +0 -2
- package/dist/console/index.d.ts +0 -3
- package/dist/console/routes/errors/route.d.ts +0 -10
- package/dist/console/routes/errors/route.js +0 -47
- package/dist/console/routes/fiberDetail.d.ts +0 -16
- package/dist/console/routes/fiberDetail.js +0 -38
- package/dist/console/routes/fibers/route.d.ts +0 -10
- package/dist/console/routes/fibers/route.js +0 -19
- package/dist/console/routes/git/route.d.ts +0 -11
- package/dist/console/routes/git/route.js +0 -33
- package/dist/console/routes/layout.d.ts +0 -9
- package/dist/console/routes/layout.js +0 -3
- package/dist/console/routes/logs/route.d.ts +0 -10
- package/dist/console/routes/logs/route.js +0 -32
- package/dist/console/routes/metrics/route.d.ts +0 -10
- package/dist/console/routes/metrics/route.js +0 -17
- package/dist/console/routes/route.d.ts +0 -6
- package/dist/console/routes/route.js +0 -5
- package/dist/console/routes/routes/route.d.ts +0 -6
- package/dist/console/routes/routes/route.js +0 -20
- package/dist/console/routes/services/route.d.ts +0 -6
- package/dist/console/routes/services/route.js +0 -12
- package/dist/console/routes/system/route.d.ts +0 -10
- package/dist/console/routes/system/route.js +0 -18
- package/dist/console/routes/traceDetail.d.ts +0 -16
- package/dist/console/routes/traceDetail.js +0 -14
- package/dist/console/routes/traces/route.d.ts +0 -10
- package/dist/console/routes/traces/route.js +0 -39
- package/dist/console/routes/tree.d.ts +0 -153
- package/dist/console/ui/Errors.d.ts +0 -4
- package/dist/console/ui/Errors.js +0 -15
- package/dist/console/ui/Fibers.d.ts +0 -24
- package/dist/console/ui/Fibers.js +0 -121
- package/dist/console/ui/Git.d.ts +0 -20
- package/dist/console/ui/Git.js +0 -95
- package/dist/console/ui/Logs.d.ts +0 -4
- package/dist/console/ui/Logs.js +0 -25
- package/dist/console/ui/Metrics.d.ts +0 -4
- package/dist/console/ui/Metrics.js +0 -26
- package/dist/console/ui/Routes.d.ts +0 -8
- package/dist/console/ui/Routes.js +0 -70
- package/dist/console/ui/Services.d.ts +0 -10
- package/dist/console/ui/Services.js +0 -246
- package/dist/console/ui/Shell.d.ts +0 -10
- package/dist/console/ui/Shell.js +0 -7
- package/dist/console/ui/System.d.ts +0 -4
- package/dist/console/ui/System.js +0 -35
- package/dist/console/ui/Traces.d.ts +0 -12
- package/dist/console/ui/Traces.js +0 -179
- package/dist/datastar/actions/fetch.d.ts +0 -30
- package/dist/datastar/actions/peek.d.ts +0 -1
- package/dist/datastar/actions/setAll.d.ts +0 -1
- package/dist/datastar/actions/toggleAll.d.ts +0 -1
- package/dist/datastar/attributes/attr.d.ts +0 -1
- package/dist/datastar/attributes/bind.d.ts +0 -1
- package/dist/datastar/attributes/class.d.ts +0 -1
- package/dist/datastar/attributes/computed.d.ts +0 -1
- package/dist/datastar/attributes/effect.d.ts +0 -1
- package/dist/datastar/attributes/indicator.d.ts +0 -1
- package/dist/datastar/attributes/init.d.ts +0 -1
- package/dist/datastar/attributes/jsonSignals.d.ts +0 -1
- package/dist/datastar/attributes/on.d.ts +0 -1
- package/dist/datastar/attributes/onIntersect.d.ts +0 -1
- package/dist/datastar/attributes/onInterval.d.ts +0 -1
- package/dist/datastar/attributes/onSignalPatch.d.ts +0 -1
- package/dist/datastar/attributes/ref.d.ts +0 -1
- package/dist/datastar/attributes/show.d.ts +0 -1
- package/dist/datastar/attributes/signals.d.ts +0 -1
- package/dist/datastar/attributes/style.d.ts +0 -1
- package/dist/datastar/attributes/text.d.ts +0 -1
- package/dist/datastar/engine.d.ts +0 -162
- package/dist/datastar/happydom.d.ts +0 -1
- package/dist/datastar/happydom.js +0 -8
- package/dist/datastar/index.d.ts +0 -24
- package/dist/datastar/load.d.ts +0 -24
- package/dist/datastar/load.js +0 -24
- package/dist/datastar/utils.d.ts +0 -51
- package/dist/datastar/watchers/patchElements.d.ts +0 -1
- package/dist/datastar/watchers/patchSignals.d.ts +0 -1
- package/dist/experimental/EncryptedCookies.d.ts +0 -48
- package/dist/experimental/SseHttpResponse.d.ts +0 -7
- package/dist/experimental/SseHttpResponse.js +0 -28
- package/dist/experimental/index.d.ts +0 -1
- package/dist/hyper/Hyper.d.ts +0 -25
- package/dist/hyper/HyperHtml.d.ts +0 -23
- package/dist/hyper/HyperHtml.test.d.ts +0 -1
- package/dist/hyper/HyperHtml.test.js +0 -197
- package/dist/hyper/HyperNode.d.ts +0 -14
- package/dist/hyper/HyperRoute.d.ts +0 -8
- package/dist/hyper/HyperRoute.test.d.ts +0 -1
- package/dist/hyper/HyperRoute.test.js +0 -83
- package/dist/hyper/html.d.ts +0 -11
- package/dist/hyper/index.d.ts +0 -6
- package/dist/hyper/jsx-runtime.d.ts +0 -7
- package/dist/index.d.ts +0 -8
- package/dist/inference_check.d.ts +0 -1
- package/dist/inference_check.js +0 -15
- package/dist/lint/plugin.d.ts +0 -86
- package/dist/lint/plugin.js +0 -341
- package/dist/middlewares/BasicAuthMiddleware.d.ts +0 -8
- package/dist/middlewares/BasicAuthMiddleware.js +0 -22
- package/dist/middlewares/index.d.ts +0 -1
- package/dist/middlewares/index.js +0 -1
- package/dist/node/Effectify.d.ts +0 -209
- package/dist/node/Effectify.js +0 -19
- package/dist/node/FileSystem.d.ts +0 -7
- package/dist/node/FileSystem.js +0 -420
- package/dist/node/NodeFileSystem.d.ts +0 -7
- package/dist/node/NodeUtils.d.ts +0 -2
- package/dist/node/PlatformError.d.ts +0 -46
- package/dist/node/PlatformError.js +0 -43
- package/dist/node/Utils.d.ts +0 -1
- package/dist/node/Utils.js +0 -19
- package/dist/repro_fail.d.ts +0 -1
- package/dist/repro_fail.js +0 -14
- package/dist/sql/bun/index.d.ts +0 -3
- package/dist/sql/mssql/docker.d.ts +0 -2
- package/dist/sql/mssql/index.d.ts +0 -21
- package/dist/testing/TestHttpClient.d.ts +0 -13
- package/dist/testing/TestHttpClient.js +0 -68
- package/dist/testing/TestLogger.d.ts +0 -13
- package/dist/testing/index.d.ts +0 -2
- package/dist/testing/utils.d.ts +0 -9
- package/dist/x/cloudflare/CloudflareTunnel.d.ts +0 -10
- package/dist/x/cloudflare/index.d.ts +0 -1
- package/dist/x/datastar/Datastar.d.ts +0 -6
- package/dist/x/datastar/Datastar.js +0 -47
- package/dist/x/datastar/index.d.ts +0 -1
- package/dist/x/datastar/index.js +0 -1
- package/dist/x/tailscale/TailscaleTunnel.d.ts +0 -15
- package/dist/x/tailscale/index.d.ts +0 -1
- package/dist/x/tailwind/TailwindPlugin.d.ts +0 -23
- package/dist/x/tailwind/compile.d.ts +0 -19
- package/dist/x/tailwind/plugin.d.ts +0 -2
- /package/src/{Sql.ts → sql/Sql.ts} +0 -0
package/dist/Unique.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
export const ALPHABET_BASE32_CROCKFORD = "0123456789ABCDEFGHJKMNPQRSTVWXYZ"
|
|
2
|
-
export const ALPHABET_BASE32_RFC4648 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567"
|
|
3
|
-
export const ALPHABET_BASE64_URL =
|
|
4
|
-
|
|
1
|
+
export const ALPHABET_BASE32_CROCKFORD = "0123456789ABCDEFGHJKMNPQRSTVWXYZ"
|
|
2
|
+
export const ALPHABET_BASE32_RFC4648 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567"
|
|
3
|
+
export const ALPHABET_BASE64_URL =
|
|
4
|
+
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"
|
|
5
|
+
export const ALPHABET_HEX = "0123456789abcdef"
|
|
6
|
+
|
|
5
7
|
/**
|
|
6
8
|
* Generate a random string for ids, session tokens, and API keys.
|
|
7
9
|
* It uses human-friendly crockford base32 encoding (5 bit of entropy per char)
|
|
@@ -12,34 +14,43 @@ export const ALPHABET_HEX = "0123456789abcdef";
|
|
|
12
14
|
* - session tokens: 32-40 chars (~160-200 bits)
|
|
13
15
|
*/
|
|
14
16
|
export function token(length = 32) {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
17
|
+
if (length <= 0) return ""
|
|
18
|
+
|
|
19
|
+
const buf = new Uint8Array(length)
|
|
20
|
+
crypto.getRandomValues(buf)
|
|
21
|
+
|
|
22
|
+
let result = ""
|
|
23
|
+
for (let i = 0; i < buf.length; i++) {
|
|
24
|
+
result += ALPHABET_BASE32_CROCKFORD[buf[i] & 31]
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
return result
|
|
24
28
|
}
|
|
29
|
+
|
|
25
30
|
export function bytes(length) {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
31
|
+
const buf = new Uint8Array(length)
|
|
32
|
+
crypto.getRandomValues(buf)
|
|
33
|
+
return buf
|
|
29
34
|
}
|
|
30
|
-
|
|
35
|
+
|
|
36
|
+
export const UUID_NIL = "00000000-0000-0000-0000-000000000000"
|
|
37
|
+
|
|
31
38
|
export function uuid4() {
|
|
32
|
-
|
|
39
|
+
return formatUuid(uuid4bytes())
|
|
33
40
|
}
|
|
41
|
+
|
|
34
42
|
export function uuid7(time = Date.now()) {
|
|
35
|
-
|
|
43
|
+
return formatUuid(uuid7Bytes(time))
|
|
36
44
|
}
|
|
45
|
+
|
|
37
46
|
function uuid4bytes() {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
47
|
+
const buf = bytes(16)
|
|
48
|
+
buf[6] = (buf[6] & 0x0f) | 0x40 // version 4
|
|
49
|
+
buf[8] = (buf[8] & 0x3f) | 0x80 // variant
|
|
50
|
+
|
|
51
|
+
return buf
|
|
42
52
|
}
|
|
53
|
+
|
|
43
54
|
/**
|
|
44
55
|
* Decode a 48-bit Unix timestamp (ms) from UUID7 or ULID.
|
|
45
56
|
*
|
|
@@ -52,33 +63,41 @@ function uuid4bytes() {
|
|
|
52
63
|
* const timestamp = Unique.toTimestamp(bytes)
|
|
53
64
|
*/
|
|
54
65
|
export function toTimestamp(bytes) {
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
66
|
+
if (bytes.length < 6) return 0
|
|
67
|
+
|
|
68
|
+
return (
|
|
69
|
+
bytes[0] * 0x10000000000 +
|
|
70
|
+
bytes[1] * 0x100000000 +
|
|
71
|
+
bytes[2] * 0x1000000 +
|
|
72
|
+
bytes[3] * 0x10000 +
|
|
73
|
+
bytes[4] * 0x100 +
|
|
74
|
+
bytes[5]
|
|
75
|
+
)
|
|
63
76
|
}
|
|
77
|
+
|
|
64
78
|
export function uuid7Bytes(time = Date.now()) {
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
79
|
+
const buf = new Uint8Array(16)
|
|
80
|
+
const timestamp = BigInt(toSafeTime(time))
|
|
81
|
+
|
|
82
|
+
// 48-bit timestamp (6 bytes)
|
|
83
|
+
buf[0] = Number((timestamp >> 40n) & 0xffn)
|
|
84
|
+
buf[1] = Number((timestamp >> 32n) & 0xffn)
|
|
85
|
+
buf[2] = Number((timestamp >> 24n) & 0xffn)
|
|
86
|
+
buf[3] = Number((timestamp >> 16n) & 0xffn)
|
|
87
|
+
buf[4] = Number((timestamp >> 8n) & 0xffn)
|
|
88
|
+
buf[5] = Number(timestamp & 0xffn)
|
|
89
|
+
|
|
90
|
+
// 12-bit random A (1.5 bytes)
|
|
91
|
+
crypto.getRandomValues(buf.subarray(6, 8))
|
|
92
|
+
buf[6] = (buf[6] & 0x0f) | 0x70 // version 7
|
|
93
|
+
|
|
94
|
+
// 2-bit variant + 62-bit random B (8 bytes)
|
|
95
|
+
crypto.getRandomValues(buf.subarray(8, 16))
|
|
96
|
+
buf[8] = (buf[8] & 0x3f) | 0x80 // variant
|
|
97
|
+
|
|
98
|
+
return buf
|
|
81
99
|
}
|
|
100
|
+
|
|
82
101
|
/**
|
|
83
102
|
* Convert UUID bytes to canonical (RFC9562) representation.
|
|
84
103
|
*
|
|
@@ -86,56 +105,70 @@ export function uuid7Bytes(time = Date.now()) {
|
|
|
86
105
|
* Unique.formatUuid(new Uint8Array(16))
|
|
87
106
|
*/
|
|
88
107
|
export function formatUuid(bytes) {
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
108
|
+
if (bytes.length === 0) return ""
|
|
109
|
+
|
|
110
|
+
let result = ""
|
|
111
|
+
|
|
112
|
+
for (let i = 0; i < bytes.length; i++) {
|
|
113
|
+
const byte = bytes[i]
|
|
114
|
+
result += ALPHABET_HEX[(byte >> 4) & 0x0f]
|
|
115
|
+
result += ALPHABET_HEX[byte & 0x0f]
|
|
116
|
+
|
|
117
|
+
if (i === 3 || i === 5 || i === 7 || i === 9) result += "-"
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
return result
|
|
100
121
|
}
|
|
122
|
+
|
|
101
123
|
export function ulid(time = Date.now()) {
|
|
102
|
-
|
|
103
|
-
|
|
124
|
+
const bytes = ulidBytes(time)
|
|
125
|
+
return formatUlid(bytes)
|
|
104
126
|
}
|
|
127
|
+
|
|
105
128
|
export function ulidBytes(time = Date.now()) {
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
129
|
+
const buf = new Uint8Array(16)
|
|
130
|
+
const timestamp = BigInt(toSafeTime(time))
|
|
131
|
+
|
|
132
|
+
buf[0] = Number((timestamp >> 40n) & 0xffn)
|
|
133
|
+
buf[1] = Number((timestamp >> 32n) & 0xffn)
|
|
134
|
+
buf[2] = Number((timestamp >> 24n) & 0xffn)
|
|
135
|
+
buf[3] = Number((timestamp >> 16n) & 0xffn)
|
|
136
|
+
buf[4] = Number((timestamp >> 8n) & 0xffn)
|
|
137
|
+
buf[5] = Number(timestamp & 0xffn)
|
|
138
|
+
|
|
139
|
+
crypto.getRandomValues(buf.subarray(6, 16))
|
|
140
|
+
|
|
141
|
+
return buf
|
|
116
142
|
}
|
|
143
|
+
|
|
117
144
|
function formatUlid(bytes) {
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
145
|
+
if (bytes.length !== 16) return ""
|
|
146
|
+
|
|
147
|
+
const timestamp = toTimestamp(bytes)
|
|
148
|
+
const timePart = encodeUlidTime(timestamp)
|
|
149
|
+
const randomPart = toBase32(bytes.subarray(6, 16))
|
|
150
|
+
|
|
151
|
+
return `${timePart}${randomPart}`
|
|
124
152
|
}
|
|
153
|
+
|
|
125
154
|
function encodeUlidTime(time) {
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
155
|
+
let value = BigInt(time)
|
|
156
|
+
const result = Array.from({ length: 10 })
|
|
157
|
+
|
|
158
|
+
for (let i = 9; i >= 0; i--) {
|
|
159
|
+
result[i] = ALPHABET_BASE32_CROCKFORD[Number(value & 31n)]
|
|
160
|
+
value >>= 5n
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
return result.join("")
|
|
133
164
|
}
|
|
165
|
+
|
|
134
166
|
function toSafeTime(time) {
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
167
|
+
if (!Number.isFinite(time)) return 0
|
|
168
|
+
|
|
169
|
+
return Math.max(0, Math.trunc(time))
|
|
138
170
|
}
|
|
171
|
+
|
|
139
172
|
/**
|
|
140
173
|
* Generate a nanoid-style random string.
|
|
141
174
|
*
|
|
@@ -146,42 +179,48 @@ function toSafeTime(time) {
|
|
|
146
179
|
* were competing to have the smallest possible bundle size.
|
|
147
180
|
*/
|
|
148
181
|
export function nanoid(size = 21, alphabet = ALPHABET_BASE64_URL) {
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
182
|
+
if (size <= 0 || alphabet.length === 0) return ""
|
|
183
|
+
|
|
184
|
+
const length = alphabet.length
|
|
185
|
+
const mask = (2 << Math.floor(Math.log2(length - 1))) - 1
|
|
186
|
+
const step = Math.ceil((1.6 * mask * size) / length)
|
|
187
|
+
|
|
188
|
+
let id = ""
|
|
189
|
+
while (id.length < size) {
|
|
190
|
+
const bytes = new Uint8Array(step)
|
|
191
|
+
crypto.getRandomValues(bytes)
|
|
192
|
+
|
|
193
|
+
for (let i = 0; i < step && id.length < size; i++) {
|
|
194
|
+
const index = bytes[i] & mask
|
|
195
|
+
if (index < length) id += alphabet[index]
|
|
163
196
|
}
|
|
164
|
-
|
|
197
|
+
}
|
|
198
|
+
return id
|
|
165
199
|
}
|
|
200
|
+
|
|
166
201
|
function toBase32(bytes, alphabet = ALPHABET_BASE32_CROCKFORD) {
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
if (bits > 0) {
|
|
183
|
-
const index = (buffer << (5 - bits)) & 31;
|
|
184
|
-
result += alphabet[index];
|
|
202
|
+
if (bytes.length === 0) return ""
|
|
203
|
+
|
|
204
|
+
let result = ""
|
|
205
|
+
let buffer = 0
|
|
206
|
+
let bits = 0
|
|
207
|
+
|
|
208
|
+
for (const byte of bytes) {
|
|
209
|
+
buffer = (buffer << 8) | byte
|
|
210
|
+
bits += 8
|
|
211
|
+
|
|
212
|
+
while (bits >= 5) {
|
|
213
|
+
bits -= 5
|
|
214
|
+
const index = (buffer >> bits) & 31
|
|
215
|
+
result += alphabet[index]
|
|
216
|
+
buffer &= (1 << bits) - 1
|
|
185
217
|
}
|
|
186
|
-
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
if (bits > 0) {
|
|
221
|
+
const index = (buffer << (5 - bits)) & 31
|
|
222
|
+
result += alphabet[index]
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
return result
|
|
187
226
|
}
|
package/dist/Values.js
CHANGED
|
@@ -1,36 +1,52 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
1
3
|
export function isPlainObject(value) {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
4
|
+
if (value === null || typeof value !== "object") {
|
|
5
|
+
return false
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
// Check for built-in types and web APIs
|
|
9
|
+
if (
|
|
10
|
+
ArrayBuffer.isView(value) ||
|
|
11
|
+
value instanceof ArrayBuffer ||
|
|
12
|
+
value instanceof Blob ||
|
|
13
|
+
value instanceof FormData ||
|
|
14
|
+
value instanceof URLSearchParams ||
|
|
15
|
+
value instanceof ReadableStream ||
|
|
16
|
+
value instanceof Date ||
|
|
17
|
+
value instanceof Map ||
|
|
18
|
+
value instanceof Set ||
|
|
19
|
+
value instanceof RegExp ||
|
|
20
|
+
value instanceof Error ||
|
|
21
|
+
value instanceof Promise ||
|
|
22
|
+
Array.isArray(value)
|
|
23
|
+
) {
|
|
24
|
+
return false
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// Check if it's a plain object (Object.prototype or null prototype)
|
|
28
|
+
const proto = Object.getPrototypeOf(value)
|
|
29
|
+
return proto === null || proto === Object.prototype
|
|
24
30
|
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Type helper that returns `true` if type T has any method properties,
|
|
34
|
+
* otherwise returns `never`.
|
|
35
|
+
*
|
|
36
|
+
* Used internally by IsPlainObject to distinguish plain objects from
|
|
37
|
+
* class instances or objects with methods.
|
|
38
|
+
*/
|
|
39
|
+
|
|
25
40
|
export const firstValue = (record) => {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
}
|
|
41
|
+
for (const key in record) {
|
|
42
|
+
return record[key]
|
|
43
|
+
}
|
|
44
|
+
return undefined
|
|
45
|
+
}
|
|
46
|
+
|
|
31
47
|
export const concatBytes = (a, b) => {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
}
|
|
48
|
+
const result = new Uint8Array(a.byteLength + b.byteLength)
|
|
49
|
+
result.set(a)
|
|
50
|
+
result.set(b, a.byteLength)
|
|
51
|
+
return result
|
|
52
|
+
}
|