Expand description
The Bynk standard library’s first-party sources, as data.
The bynk conformance surface, the Bynk-written commons (bynk.list,
bynk.map, bynk.string, bynk.locale, bynk.locale.types) and the
bynk.cloudflare platform adapter ship with the compiler rather than being
authored by the user. This crate holds their .bynk sources, their
per-platform TypeScript bindings and the metadata the toolchain reads about
them, embedded with include_str!. It holds no logic: bynk-check parses and
injects these sources when a project uses or consumes them, and provides
each binding for the selected Platform. The bynk root namespace is
reserved (bynk.namespace.reserved) so user code can never collide with it.
The sources live under lib/: the portable layers in lib/core/ (with the
bynk surface’s bindings in lib/core/bindings/) and the platform adapter in
lib/cloudflare/. Nothing in lib/core/ depends on lib/cloudflare/, so the
platform layer can be split out later without renaming a unit.
Structs§
- Instantiable
- A capability a context may declare instances of (S4a, #1966, track D3).
- Unit
- One first-party unit, as data (standard-library track, S1 #1945). Adding a
unit to the standard library is an entry in
UNITSplus its files; the checker’s injection reads this table and needs no change.
Enums§
- Binding
- The TypeScript binding the toolchain supplies for a first-party unit.
- Option
Kind - The literal an instance option takes (standard-library P3, #2342).
- Platform
- The deploy platform — a selection axis distinct from the
--target {bundle,workers}emit mode (§6.2). It chooses whichbynk-<platform>.tsbinding is linked for thebynksurface. v0.17 shippedcloudflare; v0.18 addsnode, making the axis observable (and giving v0.19’s platform-lock enforcement a second platform to fire against). - Stability
- Whether a first-party item is under the 1.0 promise (track D2).
- Unit
Kind - What a first-party unit is, and so how a project brings it in: an adapter is
injected when a unit
consumesit, a commons when a unitusesit. Local to this crate, which has no dependencies;bynk-checkmaps it onto its own unit kind.
Constants§
- BYNK_
ADAPTER_ SRC - The reserved
bynkconformance-surface adapter (env-free core). It has nobindingclause — the toolchain supplies one per platform (seePlatform::bynk_binding_source). - BYNK_
CRYPTO_ SRC bynk.crypto— digests, HMAC, constant-time comparison, and signing and verification with imported keys, asEffects over Web Crypto.- BYNK_
LIST_ SRC bynk.list— combinators over theListkernel (fold,prepend,length,get,foldEff), written in ordinary Bynk (decision 0034): the first real consumer of v0.20a generics, lambdas, and effectful traversal. Order-preserving combinators build withfold+prependand a finalreverse— O(n) builds, neverappend(which would be O(n²) over the array lowering).- BYNK_
LOCALE_ SRC bynk.locale— the bundle-freerender/renderArghelpers and themessage/withText/withWhole/withNum/withMomentbuilder API (slice 1:renderformatscodeplus a deterministic sorted-by-key rendering ofparams; no lookup, no locale-dependent behaviour).uses bynk.locale.typesfor the types its own signatures name.- BYNK_
LOCALE_ TYPES_ SRC bynk.locale.types—LocaleTag,MessageArg,Message: a dependency-free leaf (nousesof its own) so any consumer, including thebynkadapter itself, can reach these types without also reachingbynk.locale’s value-level API.- BYNK_
MAP_ SRC bynk.map— combinators over theMapkernel (empty,insert,get,keys,length).fromListis deliberately absent: Bynk has no pair type to spell aList[(K, V)]with, so map construction isMap.empty()- BYNK_
STRING_ SRC bynk.string— Bynk-written helpers over the v0.22a string kernel (concat, theListfold, and theOptionkernel methods). The kernel itself is compiler built-in (ADR 0046); only derived helpers live here.joinfolds toOption[String]so empty-string elements are joined faithfully (a bare""accumulator could not tell “nothing yet” from “first element was empty”).- BYNK_
SURFACE_ CAPABILITIES - The capabilities the env-free
bynksurface exports (itsexports capability { … }line inbynk.bynk). First-party symbols live on synthetic files and are excluded from the binding index, so the unknown-name quick-fix (#852) offeringconsumes bynk { … }needs this explicit list. Kept in sync with the adapter source bybynk_surface_capabilities_match_the_adapter. - BYNK_
UNIT - The unit name of the reserved first-party surface adapter.
- CLOUDFLARE_
ADAPTER_ SRC - The first-party Cloudflare platform adapter (v0.19): the platform’s real
infrastructure capabilities, as they are — no portable intersection
(decision 0016). The v0.19 surface was the minimal, collection-free
Kv(decision 0023); v0.23 adds thelistdrain andputTtl(0050/0051); structured values are v0.22-codec composition, andQueueremains its own future increment. Like thebynksurface it has nobindingclause — the toolchain supplies the binding. - CLOUDFLARE_
BINDING_ FILENAME - The output path of the Cloudflare platform adapter’s binding module,
beside the adapter’s emitted
bynk/cloudflare.ts(distinct from thebynksurface’s per-platformbynk-cloudflare.ts). - CLOUDFLARE_
UNIT - The unit name of the first-party Cloudflare platform adapter (v0.19,
decision 0026): inside the reserved
bynk.*prefix, so no separate reservation rule is needed. The surface unitbynkstays the portability marker;bynk.<platform>units are the platform-locked ones. - CRYPTO_
KEY_ TYPES - The opaque key types
bynk.cryptoexports. A value of one holds a non-extractable platform key, so it is never stored, persisted, logged or sent (bynk.types.key_at_boundary), as aStreamis not. The checker finds them by the unit’s reserved span file, so a user type of the same name is not mistaken for one. - CRYPTO_
UNIT - The unit name of the first-party cryptography adapter (standard-library K4,
D5/D6): a flat sibling of
bynk, platform-free, with a binding per platform. - EDGE_
CACHE_ BINDING_ PREFIX - The prefix an
EdgeCacheinstance’s binding name would carry (first-party registry L7, #2414). Workers Cache is a Worker-wide[cache]setting with noenvbinding, so the name is never emitted: the instance is built from the entry’sctxinstead. - FIRSTPARTY_
SOURCES - Every first-party
.bynksource, paired with its unit name — the single list every consumer iterates: hover (describe_firstparty_symbol), completion (EMBEDDED_UNITS), and the parse guard (every_first_party_source_parses). Before this list each consumer kept its own hand-maintained copy, andbynk.locale/bynk.locale.typeswere added to none of them — so the whole locale surface hovered as nothing and was absent from completion (#901). - KV_
BINDING_ NAME - The fixed Worker binding name for the Kv namespace (decision C1, v0.19):
one namespace, one
[[kv_namespaces]]stanza, oneenv.KVfield. - LIST_
UNIT - The unit names of the first-party collection commons (v0.20b): the
Bynk-written combinator stdlib over the built-in
List/Mapkernel. Inside the reservedbynk.*prefix; injected whenuses-imported. - LOCALE_
TYPES_ UNIT - Inside the reserved
bynk.*prefix; injected whenuses-imported. Alsouses-imported by thebynkadapter itself, to givecapability Locale’scurrent() -> Effect[LocaleTag]a type to name (an adapter mayusesa commons; a commons cannot in turn reference an adapter). Split out ofbynk.locale(locale-negotiation-slice-2 follow-up, #886) specifically so a context can reachLocaleTagwithout also pulling inbynk.locale’s ownrender— which previously collided with a message-bundle commons’s own synthesisedrender(ADR 0272) the moment a context needed both. - LOCALE_
UNIT - Inside the reserved
bynk.*prefix; injected whenuses-imported by application code (a message-bundle commons, ADR 0272) — never directly by thebynkadapter itself any more (seeLOCALE_TYPES_UNIT). - MAP_
UNIT - R2_
BINDING_ PREFIX - The Worker binding prefix of an
R2instance (standard-library P5, #2323):capability Archives = R2binds asR2_ARCHIVES, an[[r2_buckets]]entry. - R2_
JURISDICTIONS - The jurisdictions an
R2bucket may be pinned to, as@jurisdiction(…)takes them andwrangler r2 bucket create --jurisdictionaccepts them. - R2_
JURISDICTION_ OPTION - The one creation option of an
R2instance: the bucket’s jurisdiction. - RATELIMIT_
BINDING_ PREFIX - The Worker binding prefix of a
RateLimitinstance (standard-library P3, #2342):capability LoginLimit = RateLimit @limit(100) @period(60.seconds)binds asRATELIMIT_LOGIN_LIMIT, a[[ratelimits]]entry. - RATELIMIT_
LIMIT_ OPTION - A
RateLimitinstance’s count: the calls per key allowed in one period. - RATELIMIT_
PERIODS - The windows the Workers Rate Limiting binding offers, in seconds.
- RATELIMIT_
PERIOD_ OPTION - A
RateLimitinstance’s window. - SERVICE_
BINDING_ PREFIX - The Worker binding prefix of a
Serviceinstance (interop I5, #1972):capability Billing = Service @worker("legacy-billing")binds asSERVICE_BILLING, a[[services]]entry naminglegacy-billing. - SERVICE_
WORKER_ OPTION - The option of a
Serviceinstance that names the Worker it reaches.worker, not D4’sservice:serviceis a keyword, so@service(…)does not parse, and widening the annotation grammar is language work (ADR 0023). - STRING_
UNIT - Inside the reserved
bynk.*prefix; injected whenuses-imported. - UNITS
- The standard library’s first-party units. Dependencies between them are not
listed here: they are the
uses/consumeslines of each unit’s own source, which the checker follows when it injects. The table’s order isFIRSTPARTY_SOURCES’ order; injection followsUnit::id_block.
Functions§
- allow_
entry_ is_ live - Whether
entry, an[unstable] allowentry, reaches anything inexperimental(a list of experimental item paths, such asexperimental_items): it names an experimental item, lies under one, or contains one. An entry that reaches nothing is stale. - allows
- Whether an
[unstable] allowlist coverspath: an entry covers itself and everything under it. - cloudflare_
binding_ source - The toolchain-supplied binding for the Cloudflare platform adapter.
- covers
- Whether
pathisprefixor lies under it, by whole dotted segments. - experimental_
items - Every experimental item, as a full path: each experimental unit, and each listed item of a stable one.
- experimental_
items_ in experimental_itemsover a given table.- exported_
names - The names a first-party unit exports: those on its
exports … { … }lines (an adapter) and its ownfns andtypes (a commons). Read from the source, so the list cannot fall behind it. - instantiable
- The instance kind
capabilityofunitis, if a context may declare named instances of it (S4a, #1966). - is_
extensible - Whether
name, an enum exported byunit, is extensible. - is_
extensible_ in is_extensibleover a given table.- names_
first_ party_ item - Whether
pathnames a first-party unit or an item it exports. Operation paths (bynk.cloudflare.Kv.list) are accepted when their item exists. - names_
first_ party_ item_ in names_first_party_itemover a given table.- platform_
of - v0.19 decision 0024: which first-party units are platform-native —
consuming one locks its deployment unit to the returned platform. This is
the metadata that drives effective-platform computation,
envresource typing, andwrangler.tomlstanza derivation; no user-facing marker syntax exists (additive later, when third-party platform adapters become a goal). - provider_
takes_ env - v0.18 decision 0021 / v0.19 decision 0025: which first-party provider
classes take the Worker
envas a constructor argument, keyed by (unit, provider class).SecretsProvideraccepts an optional env with aglobalThisprobe fallback;WorkersKvrequires env on use — KV namespaces exist only on the Workerenv, never onglobalThis. - split_
item_ path - The unit a dotted item path lies in, and the rest of the path relative to it
(empty for the unit itself). Unit names contain dots, so the longest unit
name that is a whole-segment prefix wins:
bynk.cloudflare.Kvis inbynk.cloudflare, not inbynk. - split_
item_ path_ in split_item_pathover a given table (tests pass a synthetic one).- stability_
of - The stability of a first-party item: a unit (
bynk.cloudflare), an exported item (bynk.cloudflare.Kv) or a capability operation (bynk.cloudflare.Kv.list). An item in an experimental unit, or under an experimental item, is experimental.Nonewhen no first-party unit holds the path. - stability_
of_ in stability_ofover a given table.- unit
- The registry entry for
name, if it is a first-party unit.