Native Shell
Native Shell:AI 生成的 UI,在你的應用中原生呈現,涵蓋每個平台。iOS、Android、macOS、Windows 與 Linux 上的應用、GPUI 應用與網頁在執行時載入已簽名、沙箱隔離的 TSX 模組並繪製 th
AI 翻譯
Parses, validates, inspects and generates universally unique identifiers (UUIDs) of every version defined by RFC 9562 <doi:10.17487/RFC9562>, and re-encodes them in alternative text forms such as Croc
翻譯準備中
開發工具GitHub @pedrobtz上線中營運者未確認
試用過了嗎? 點一下就好,不需要登入。
尚未收集儲存庫資訊。
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
Universally Unique Identifiers, Their Encodings and Their Kin
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗Identifiers arrive as opaque strings: a UUID from a database, a ULID from a log line, a KSUID from an event stream, a Snowflake from a chat platform. Each one carries information, often a creation time, sometimes a node or a counter. Reading it means knowing which format the string is, and that is the step most code guesses at.
zuid is a complete UUID implementation for R, with the formats around
it. The core is RFC 9562 in
full: versions 1 to 8, nil and max, and every text form. Around it are
the same 128 bits in other alphabets, and fourteen kindred formats:
ULID, TypeID, UPID, SCRU128, SCRU64, KSUID, Snowflake and Sonyflake,
XID, ObjectId, NanoID, Cuid2, Sqids and CID. Each format’s generator is
named after it, and one id_ vocabulary reads, checks and converts all
of them.
NA, with the candidates listed. A hint settles it.id_valid(), id_fields() and
id_time() return NA for what they cannot read.set.seed() never
changes a generated identifier. Tests pass the random bytes in
instead.Imports. The C code is the package’s own, checked against the
reference vectors of each format that publishes them.Install the released version from CRAN:
install.packages("zuid")
Or the development version from GitHub:
# install.packages("pak")
pak::pak("pedrobtz/zuid")
library(zuid)
id_detect() names the format of each string. The lowercase ULID could
also be a TypeID without a prefix, so its answer is NA:
ids <- c(
"018f6b1c-2d3e-7a4b-8c5d-6e7f8091a2b3",
"01ARZ3NDEKTSV4RRFFQ69G5FAV",
"01arz3ndektsv4rrffq69g5fav",
"0ujtsYcgvSTl8PAuAdqWYSMnLOv"
)
found <- id_detect(ids)
as.vector(found)
#> [1] "uuid" "ulid" NA "ksuid"
attr(found, "candidates")[[3]]
#> [1] "ulid" "typeid"
id_parse() gives a typed vector, and id_time() reads the creation
time each format records:
uuid <- id_parse(ids[1])
uuid
#> <zuid_uuid[1]>
#> [1] 018f6b1c-2d3e-7a4b-8c5d-6e7f8091a2b3
id_time(uuid)
#> [1] "2024-05-12 04:42:39 UTC"
id_time(id_parse(ids[4], "ksuid"))
#> [1] "2017-10-10 04:00:47 UTC"
id_fields() reads everything else a format knows. A Snowflake means
nothing without its layout, so the layout is an argument:
discord <- id_layout("discord")
discord
#> <zuid_layout discord>
#> | time 42 | worker 5 | process 5 | sequence 12 |
#> time: ms units from 2015-01-01T00:00:00.000Z
id_fields(id_parse("175928847299117063", "snowflake", layout = discord))[
c("time", "node", "sequence")
]
#> time node sequence
#> 1 2016-04-30 11:18:25 worker=1,process=0 7
The same 16 bytes can be written in other alphabets, read back, or carried into another format:
id_format(uuid, "base58")
#> [1] "CB7z5qdx3BKrzyaKnqWbU"
id_format(uuid, "words")
#> [1] "advertised-impunity-counterrevolutionary-lecher-munition-injecting-maladroit-pitch"
id_parse("CB7z5qdx3BKrzyaKnqWbU", "uuid", form = "base58")
#> <zuid_uuid[1]>
#> [1] 018f6b1c-2d3e-7a4b-8c5d-6e7f8091a2b3
id_convert(uuid, "typeid", prefix = "user")
#> <zuid_typeid[1]>
#> [1] user_01hxnhrb9yf95rrqbefy0938nk
Generators read the clock and the operating system’s entropy once per call. Version 7 UUIDs and ULIDs are monotonic within a session:
uuid(3)
#> <zuid_uuid[3]>
#> [1] 01a1ab9e-45b4-733a-8622-f01f4357e063 01a1ab9e-45b4-733b-ba6a-ac9443264140
#> [3] 01a1ab9e-45b4-733c-b6d1-18c903b1debd
ulid(2)
#> <zuid_ulid[2]>
#> [1] 01M6NSWHDP667MEMNBW2F8SFFY 01M6NSWHDP667MEMNBW2F8SFFZ
A generator is named after its format, as in uuid() and ulid().
Every function that takes identifiers starts with id_ and takes the
vector first. A function that inspects returns NA where the input says
nothing; a function that builds raises a classed zuid_error.
zuid is checked against the reference vectors of RFC 9562, TypeID’s
valid.yml and invalid.yml, Discord’s Snowflake example, and the
specifications or reference implementations of ULID, UPID, SCRU128,
SCRU64, KSUID, XID, Sqids, NanoID, Proquint, Niceware and multiformats
CID. The Sqids blocklist and the Niceware word list are data from their
upstream projects; inst/COPYRIGHTS names their sources and authors.