Format authored monorepo code with pinned language formatters
This commit is contained in:
+19
-5
@@ -4,13 +4,18 @@ import { compileCapabilityResourceSource } from "../src/capability-language/pars
|
||||
import { generateTypeScriptBindings, type BindingSchema } from "../src/bindings/index.js";
|
||||
const source = { repository: "https://example.test/p.git", commit: "1".repeat(40) };
|
||||
const schemaFor = (body: string): BindingSchema => {
|
||||
const compiled = compileCapabilityResourceSource(`external atom Thing id "thing"; package Demo id "demo" revision "demo@1" { ${body} }`, { source });
|
||||
const compiled = compileCapabilityResourceSource(
|
||||
`external atom Thing id "thing"; package Demo id "demo" revision "demo@1" { ${body} }`,
|
||||
{ source },
|
||||
);
|
||||
assert.equal(compiled.ok, true, JSON.stringify(compiled.diagnostics));
|
||||
if (!compiled.ok || compiled.resource.kind !== "package") throw new Error("expected package");
|
||||
return { format: "quixos-bindings", version: 1, interfaces: [], packages: [compiled.resource.revision] };
|
||||
};
|
||||
test("generator uses exact IDs, restricted ports, nominal references, and lossless scalar types", () => {
|
||||
const schema = schemaFor('operation run id "run-id" : list<int64> -> optional<atom-ref<Thing>> mode call receiver atom Thing requires { state payload id "payload-id" : bytes [read]; };');
|
||||
const schema = schemaFor(
|
||||
'operation run id "run-id" : list<int64> -> optional<atom-ref<Thing>> mode call receiver atom Thing requires { state payload id "payload-id" : bytes [read]; };',
|
||||
);
|
||||
const generated = generateTypeScriptBindings(schema, "demo@1");
|
||||
assert.match(generated, /Array<bigint>/);
|
||||
assert.match(generated, /Promise<Uint8Array>/);
|
||||
@@ -22,9 +27,18 @@ test("generator uses exact IDs, restricted ports, nominal references, and lossle
|
||||
test("missing external types and constructor signatures fail generation", () => {
|
||||
const schema = schemaFor('function run id "run" : unit -> message "example.Payload";');
|
||||
assert.throws(() => generateTypeScriptBindings(schema, "demo@1"), /Missing TypeScript message binding/);
|
||||
assert.match(generateTypeScriptBindings(schema, "demo@1", { messages: { "example.Payload": { module: "./payload.js", export: "payload" } } }), /BindingValue<typeof message0>/);
|
||||
const constructor = schemaFor('function run id "run" : unit -> unit requires { constructor thing id "ctor" : Thing; };');
|
||||
assert.match(
|
||||
generateTypeScriptBindings(schema, "demo@1", {
|
||||
messages: { "example.Payload": { module: "./payload.js", export: "payload" } },
|
||||
}),
|
||||
/BindingValue<typeof message0>/,
|
||||
);
|
||||
const constructor = schemaFor(
|
||||
'function run id "run" : unit -> unit requires { constructor thing id "ctor" : Thing; };',
|
||||
);
|
||||
assert.throws(() => generateTypeScriptBindings(constructor, "demo@1"), /explicit input contract/);
|
||||
const typed = schemaFor('function run id "run" : unit -> unit requires { constructor thing id "ctor" : Thing input string; };');
|
||||
const typed = schemaFor(
|
||||
'function run id "run" : unit -> unit requires { constructor thing id "ctor" : Thing input string; };',
|
||||
);
|
||||
assert.match(generateTypeScriptBindings(typed, "demo@1"), /construct.*input: string/);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user