|
1 | 1 | // Load .env file |
2 | | -import { CharmManager, createStorage } from "@commontools/charm"; |
3 | | -import { fetchInboxEmails } from "./gmail.ts"; |
| 2 | +import { parse } from "https://deno.land/std/flags/mod.ts"; |
| 3 | +import { CharmManager, storage, compileRecipe } from "@commontools/charm"; |
| 4 | +import { getEntityId, isStream } from "@commontools/runner"; |
| 5 | + |
| 6 | +const { space, charmId, recipeFile, cause } = parse(Deno.args); |
| 7 | + |
| 8 | +storage.setRemoteStorage( |
| 9 | + new URL(process?.env?.TOOLSHED_API_URL ?? "https://toolshed.saga-castor.ts.net/"), |
| 10 | +); |
4 | 11 |
|
5 | | -const replica = "anotherjesse-test5"; |
6 | | -const charmId = "baedreihwuw4dbkvcel76siqztlxvloddfahgu535yupgxvkh5ml3wtqgqu"; |
7 | 12 | async function main() { |
8 | | - const storage = createStorage({ |
9 | | - type: "remote", |
10 | | - replica, |
11 | | - url: new URL("https://toolshed.saga-castor.ts.net/"), |
12 | | - }); |
13 | | - const manager = new CharmManager(storage); |
| 13 | + const manager = new CharmManager(space ?? "common-cli"); |
14 | 14 | const charms = await manager.getCharms(); |
15 | 15 |
|
16 | | - await new Promise((resolve) => { |
17 | | - charms.sink((charms) => { |
18 | | - if (charms.length > 0) { |
19 | | - charms.forEach((charm) => { |
20 | | - manager.get(charm.cell.entityId["/"]); |
21 | | - }); |
22 | | - resolve(undefined); |
23 | | - } |
24 | | - }); |
| 16 | + charms.sink((charms) => { |
| 17 | + console.log( |
| 18 | + "charms:", |
| 19 | + charms.map((c) => c.toJSON().cell["/"]), |
| 20 | + ); |
25 | 21 | }); |
26 | 22 |
|
27 | | - const charm = await charms.get(charmId); |
28 | | - console.log({ charm }); |
| 23 | + if (charmId) { |
| 24 | + const charm = await manager.get(charmId); |
| 25 | + charm?.sink((value) => { |
| 26 | + console.log("charm:", charmId, value); |
| 27 | + }); |
| 28 | + } |
| 29 | + |
| 30 | + if (recipeFile) { |
| 31 | + try { |
| 32 | + const recipeSrc = await Deno.readTextFile(recipeFile); |
| 33 | + const recipe = await compileRecipe(recipeSrc, "recipe", []); |
| 34 | + const charm = await manager.runPersistent(recipe, undefined, cause); |
| 35 | + await manager.syncRecipe(charm); |
| 36 | + manager.add([charm]); |
| 37 | + const charmWithSchema = await manager.get(charm); |
| 38 | + charmWithSchema.sink((value) => { |
| 39 | + console.log("running charm:", getEntityId(charm), value); |
| 40 | + }); |
| 41 | + const updater = charmWithSchema.get()?.updater; |
| 42 | + if (isStream(updater)) { |
| 43 | + console.log("running updater"); |
| 44 | + updater.send({ newValues: ["test"] }); |
| 45 | + } |
| 46 | + } catch (error) { |
| 47 | + console.error("Error loading and compiling recipe:", error); |
| 48 | + } |
| 49 | + } |
29 | 50 |
|
30 | | - const emails = await fetchInboxEmails(); |
31 | | - console.log({ emails }); |
| 51 | + return new Promise(() => { |
| 52 | + // This promise never resolves, keeping the program alive |
| 53 | + console.log("Program running. Press Ctrl+C to exit."); |
| 54 | + }); |
32 | 55 | } |
33 | 56 |
|
34 | 57 | main(); |
0 commit comments