pub struct Pinned {
pub name: &'static str,
pub version: &'static str,
pub role: Role,
pub meta: &'static str,
pub integrity: &'static str,
}
#[derive(PartialEq, Eq, Clone, Copy)]
pub enum Role {
Runtime,
Dev,
Transitive,
}
pub const CURATED: &[Pinned] = &[
Pinned {
name: "react",
version: "18.3.1",
role: Role::Runtime,
meta: r#"{ "dependencies": { "loose-envify": "^1.1.0" } }"#,
integrity: "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
},
Pinned {
name: "react-dom",
version: "18.3.1",
role: Role::Runtime,
meta: r#"{ "dependencies": { "loose-envify": "^1.1.0", "scheduler": "^0.23.2" }, "peerDependencies": { "react": "^18.3.1" } }"#,
integrity: "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==",
},
Pinned {
name: "scheduler",
version: "0.23.2",
role: Role::Transitive,
meta: r#"{ "dependencies": { "loose-envify": "^1.1.0" } }"#,
integrity: "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==",
},
Pinned {
name: "loose-envify",
version: "1.4.0",
role: Role::Transitive,
meta: r#"{ "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, "bin": { "loose-envify": "cli.js" } }"#,
integrity: "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
},
Pinned {
name: "js-tokens",
version: "4.0.0",
role: Role::Transitive,
meta: "{}",
integrity: "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
},
Pinned {
name: "typescript",
version: "5.9.3",
role: Role::Dev,
meta: r#"{ "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }"#,
integrity: "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
},
Pinned {
name: "@types/react",
version: "18.3.31",
role: Role::Dev,
meta: r#"{ "dependencies": { "@types/prop-types": "*", "csstype": "^3.2.2" } }"#,
integrity: "sha512-vfEqpXTvwT91yhmwdfouStN2hSKwTvyRs8qpLfADyrq/kxDw0hZM7Wk9Ug1FELj8hIby+S/+kQCSRFF32nv2Qw==",
},
Pinned {
name: "@types/react-dom",
version: "18.3.7",
role: Role::Dev,
meta: r#"{ "peerDependencies": { "@types/react": "^18.0.0" } }"#,
integrity: "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==",
},
Pinned {
name: "@types/prop-types",
version: "15.7.15",
role: Role::Transitive,
meta: "{}",
integrity: "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==",
},
Pinned {
name: "csstype",
version: "3.2.3",
role: Role::Transitive,
meta: "{}",
integrity: "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==",
},
];
pub const RUNTIME_BARREL: &str = "@mesofact/runtime";
pub const RUNTIME_BARREL_DIR: &str = "vendor/mesofact-runtime";
pub const MESOFACT_VERSION: &str = env!("CARGO_PKG_VERSION");
fn of_role(role: Role) -> impl Iterator<Item = &'static Pinned> {
CURATED.iter().filter(move |p| p.role == role)
}
pub fn package_json(project: &str) -> String {
let mut s = String::new();
s.push_str("{\n");
s.push_str(&format!(" \"name\": {},\n", json_str(project)));
s.push_str(" \"version\": \"0.0.0\",\n");
s.push_str(" \"private\": true,\n");
s.push_str(" \"type\": \"module\",\n");
s.push_str(" \"scripts\": {\n");
s.push_str(" \"typecheck\": \"tsc --noEmit\"\n");
s.push_str(" },\n");
s.push_str(" \"dependencies\": {\n");
let mut deps: Vec<String> = vec![format!(
" {}: \"file:{RUNTIME_BARREL_DIR}\"",
json_str(RUNTIME_BARREL)
)];
deps.extend(of_role(Role::Runtime).map(|p| format!(" {}: {}", json_str(p.name), json_str(p.version))));
s.push_str(&deps.join(",\n"));
s.push_str("\n },\n");
s.push_str(" \"devDependencies\": {\n");
let dev: Vec<String> = of_role(Role::Dev)
.map(|p| format!(" {}: {}", json_str(p.name), json_str(p.version)))
.collect();
s.push_str(&dev.join(",\n"));
s.push_str("\n }\n");
s.push_str("}\n");
s
}
pub fn bun_lock(project: &str) -> String {
let mut s = String::new();
s.push_str("{\n");
s.push_str(" \"lockfileVersion\": 1,\n");
s.push_str(" \"configVersion\": 1,\n");
s.push_str(" \"workspaces\": {\n");
s.push_str(" \"\": {\n");
s.push_str(&format!(" \"name\": {},\n", json_str(project)));
s.push_str(" \"dependencies\": {\n");
let mut deps: Vec<String> = vec![format!(
" {}: \"file:{RUNTIME_BARREL_DIR}\"",
json_str(RUNTIME_BARREL)
)];
deps.extend(
of_role(Role::Runtime).map(|p| format!(" {}: {}", json_str(p.name), json_str(p.version))),
);
s.push_str(&deps.join(",\n"));
s.push_str("\n },\n");
s.push_str(" \"devDependencies\": {\n");
let dev: Vec<String> = of_role(Role::Dev)
.map(|p| format!(" {}: {}", json_str(p.name), json_str(p.version)))
.collect();
s.push_str(&dev.join(",\n"));
s.push_str("\n },\n");
s.push_str(" },\n");
s.push_str(" },\n");
s.push_str(" \"packages\": {\n");
s.push_str(&format!(
" {}: [\"{RUNTIME_BARREL}@file:{RUNTIME_BARREL_DIR}\", {{}}],\n\n",
json_str(RUNTIME_BARREL)
));
let mut entries: Vec<&Pinned> = CURATED.iter().collect();
entries.sort_by_key(|p| p.name);
for p in entries {
s.push_str(&format!(
" {}: [\"{}@{}\", \"\", {}, {}],\n\n",
json_str(p.name),
p.name,
p.version,
p.meta,
json_str(p.integrity),
));
}
s.push_str(" }\n");
s.push_str("}\n");
s
}
pub fn barrel_package_json() -> String {
format!(
r#"{{
"name": "{RUNTIME_BARREL}",
"version": "{MESOFACT_VERSION}",
"private": true,
"type": "module",
"types": "./index.d.ts",
"exports": {{
".": {{
"types": "./index.d.ts"
}}
}}
}}
"#
)
}
fn json_str(s: &str) -> String {
let mut out = String::with_capacity(s.len() + 2);
out.push('"');
for c in s.chars() {
match c {
'"' => out.push_str("\\\""),
'\\' => out.push_str("\\\\"),
_ => out.push(c),
}
}
out.push('"');
out
}
#[cfg(test)]
mod tests {
use super::*;
use serde_json::Value;
#[test]
fn package_json_and_lock_pin_the_same_versions() {
let pkg: Value = serde_json::from_str(&package_json("demo")).expect("package.json is JSON");
let lock_src = bun_lock("demo");
let lock: Value =
serde_json::from_str(&strip_trailing_commas(&lock_src)).expect("bun.lock is JSONC");
let packages = lock["packages"].as_object().expect("packages map");
for p in CURATED {
let entry = packages
.get(p.name)
.unwrap_or_else(|| panic!("{} missing from the emitted lock", p.name));
let locator = entry[0].as_str().expect("locator");
assert_eq!(locator, format!("{}@{}", p.name, p.version));
let section = match p.role {
Role::Runtime => &pkg["dependencies"],
Role::Dev => &pkg["devDependencies"],
Role::Transitive => {
assert!(pkg["dependencies"].get(p.name).is_none());
assert!(pkg["devDependencies"].get(p.name).is_none());
continue;
}
};
assert_eq!(
section[p.name].as_str(),
Some(p.version),
"{} disagrees between package.json and the table",
p.name
);
}
}
#[test]
fn every_registry_entry_carries_sha512_integrity() {
for p in CURATED {
assert!(
p.integrity.starts_with("sha512-"),
"{} has integrity {:?}; the materializer only verifies sha512",
p.name,
p.integrity
);
}
}
#[test]
fn no_pinned_version_is_a_range() {
for p in CURATED {
assert!(
!p.version.contains(['^', '~', '*', '>', '<', '|', ' ']),
"{} is pinned to {:?}, which is a range, not a version",
p.name,
p.version
);
}
}
#[test]
fn the_set_is_closed_under_dependency() {
let names: Vec<&str> = CURATED.iter().map(|p| p.name).collect();
for p in CURATED {
let meta: Value = serde_json::from_str(p.meta)
.unwrap_or_else(|e| panic!("{} meta is not JSON: {e}", p.name));
let Some(deps) = meta.get("dependencies").and_then(Value::as_object) else {
continue;
};
for dep in deps.keys() {
assert!(
names.contains(&dep.as_str()),
"{} depends on {dep}, which is not in the curated closure",
p.name
);
}
}
}
#[test]
fn vended_barrel_is_versioned_with_this_binary() {
let v: Value = serde_json::from_str(&barrel_package_json()).expect("barrel pkg is JSON");
assert_eq!(v["version"].as_str(), Some(MESOFACT_VERSION));
assert_eq!(v["name"].as_str(), Some(RUNTIME_BARREL));
}
fn strip_trailing_commas(src: &str) -> String {
let bytes = src.as_bytes();
let mut out = String::with_capacity(src.len());
let (mut in_string, mut escaped, mut i) = (false, false, 0);
while i < bytes.len() {
let c = bytes[i] as char;
if in_string {
out.push(c);
if escaped {
escaped = false;
} else if c == '\\' {
escaped = true;
} else if c == '"' {
in_string = false;
}
i += 1;
continue;
}
match c {
'"' => {
in_string = true;
out.push(c);
}
',' => {
let mut j = i + 1;
while j < bytes.len() && (bytes[j] as char).is_whitespace() {
j += 1;
}
if !(j < bytes.len() && (bytes[j] == b'}' || bytes[j] == b']')) {
out.push(c);
}
}
_ => out.push(c),
}
i += 1;
}
out
}
}