From 8b772c20a9d80068bd53f690e38898189604ac04 Mon Sep 17 00:00:00 2001 From: Bernhard Seefeld Date: Thu, 27 Feb 2025 16:30:49 -0800 Subject: [PATCH 1/3] rewrote main.ts as a general debug tool that launches a recipe --- typescript/packages/common-cli/main.ts | 69 +++++++++++++++++--------- 1 file changed, 46 insertions(+), 23 deletions(-) diff --git a/typescript/packages/common-cli/main.ts b/typescript/packages/common-cli/main.ts index 9b5966da9..981997db7 100644 --- a/typescript/packages/common-cli/main.ts +++ b/typescript/packages/common-cli/main.ts @@ -1,34 +1,57 @@ // Load .env file -import { CharmManager, createStorage } from "@commontools/charm"; -import { fetchInboxEmails } from "./gmail.ts"; +import { parse } from "https://deno.land/std/flags/mod.ts"; +import { CharmManager, storage, compileRecipe } from "@commontools/charm"; +import { getEntityId, isStream } from "@commontools/runner"; + +const { replica, charmId, recipeFile, cause } = parse(Deno.args); + +storage.setRemoteStorage( + new URL(process?.env?.TOOLSHED_API_URL ?? "https://toolshed.saga-castor.ts.net/"), +); -const replica = "anotherjesse-test5"; -const charmId = "baedreihwuw4dbkvcel76siqztlxvloddfahgu535yupgxvkh5ml3wtqgqu"; async function main() { - const storage = createStorage({ - type: "remote", - replica, - url: new URL("https://toolshed.saga-castor.ts.net/"), - }); - const manager = new CharmManager(storage); + const manager = new CharmManager(replica ?? "common-cli"); const charms = await manager.getCharms(); - await new Promise((resolve) => { - charms.sink((charms) => { - if (charms.length > 0) { - charms.forEach((charm) => { - manager.get(charm.cell.entityId["/"]); - }); - resolve(undefined); - } - }); + charms.sink((charms) => { + console.log( + "charms:", + charms.map((c) => c.toJSON().cell["/"]), + ); }); - const charm = await charms.get(charmId); - console.log({ charm }); + if (charmId) { + const charm = await manager.get(charmId); + charm?.sink((value) => { + console.log("charm:", charmId, value); + }); + } + + if (recipeFile) { + try { + const recipeSrc = await Deno.readTextFile(recipeFile); + const recipe = await compileRecipe(recipeSrc, "recipe", []); + const charm = await manager.runPersistent(recipe, undefined, cause); + await manager.syncRecipe(charm); + manager.add([charm]); + const charmWithSchema = await manager.get(charm); + charmWithSchema.sink((value) => { + console.log("running charm:", getEntityId(charm), value); + }); + const updater = charmWithSchema.get()?.updater; + if (isStream(updater)) { + console.log("running updater"); + updater.send({ newValues: ["test"] }); + } + } catch (error) { + console.error("Error loading and compiling recipe:", error); + } + } - const emails = await fetchInboxEmails(); - console.log({ emails }); + return new Promise(() => { + // This promise never resolves, keeping the program alive + console.log("Program running. Press Ctrl+C to exit."); + }); } main(); From 3b0e605f723e6892fef66f33ffa6eda3c8f1325f Mon Sep 17 00:00:00 2001 From: Bernhard Seefeld Date: Thu, 27 Feb 2025 16:30:54 -0800 Subject: [PATCH 2/3] example recipes --- .../common-cli/recipes/simpleValue.tsx | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 typescript/packages/common-cli/recipes/simpleValue.tsx diff --git a/typescript/packages/common-cli/recipes/simpleValue.tsx b/typescript/packages/common-cli/recipes/simpleValue.tsx new file mode 100644 index 000000000..ee4a7f1b6 --- /dev/null +++ b/typescript/packages/common-cli/recipes/simpleValue.tsx @@ -0,0 +1,55 @@ +import { h } from "@commontools/html"; +import { recipe, handler, UI, NAME, cell, derive, JSONSchema } from "@commontools/builder"; + +const inputSchema: JSONSchema = { + type: "object", + properties: { + values: { type: "array", items: { type: "string" } }, + }, +}; + +const outputSchema: JSONSchema = { + type: "object", + properties: { + values: { type: "array", items: { type: "string" } }, + updater: { asCell: true, type: "action" }, + }, +}; + +const updater = handler<{ newValues: string[] }, { values: string[] }>((event, state) => { + if (!state.values) state.values = []; + console.log("updating values", event); + event?.newValues?.forEach((value) => { + console.log("adding value", value); + state.values.push(value); + }); +}); + +const adder = handler<{}, { values: string[] }>((_, state) => { + console.log("adding a value"); + if (!state.values) state.values = []; + state.values.push(Math.random().toString(36).substring(2, 15)); +}); + +export default recipe(inputSchema, outputSchema, ({ values }) => { + /*derive(values, (values) => { + console.log("values#", values.length); + });*/ + return { + [NAME]: "Simple Value", + [UI]: ( +
+ +
+ {values.map((value, index) => ( +
+ {index}: {value} +
+ ))} +
+
+ ), + updater: updater({ values }), + values, + }; +}); From b40222d2ca00f942c8ea1cd1553c358ac23c2a97 Mon Sep 17 00:00:00 2001 From: Bernhard Seefeld Date: Thu, 27 Feb 2025 16:34:48 -0800 Subject: [PATCH 3/3] rename replica to space --- typescript/packages/common-cli/main.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/typescript/packages/common-cli/main.ts b/typescript/packages/common-cli/main.ts index 981997db7..4006bce2f 100644 --- a/typescript/packages/common-cli/main.ts +++ b/typescript/packages/common-cli/main.ts @@ -3,14 +3,14 @@ import { parse } from "https://deno.land/std/flags/mod.ts"; import { CharmManager, storage, compileRecipe } from "@commontools/charm"; import { getEntityId, isStream } from "@commontools/runner"; -const { replica, charmId, recipeFile, cause } = parse(Deno.args); +const { space, charmId, recipeFile, cause } = parse(Deno.args); storage.setRemoteStorage( new URL(process?.env?.TOOLSHED_API_URL ?? "https://toolshed.saga-castor.ts.net/"), ); async function main() { - const manager = new CharmManager(replica ?? "common-cli"); + const manager = new CharmManager(space ?? "common-cli"); const charms = await manager.getCharms(); charms.sink((charms) => {