vibes-diy 12.3.0 → 12.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cli/cmd-evento.d.ts +197 -181
- package/cli/cmd-evento.js +2 -1
- package/cli/cmd-evento.js.map +1 -1
- package/cli/cmd-request-dispatch.test.d.ts +1 -0
- package/cli/cmd-request-dispatch.test.js +67 -0
- package/cli/cmd-request-dispatch.test.js.map +1 -0
- package/cli/cmds/access-wizard.d.ts +39 -0
- package/cli/cmds/access-wizard.js +58 -0
- package/cli/cmds/access-wizard.js.map +1 -0
- package/cli/cmds/access-wizard.test.d.ts +1 -0
- package/cli/cmds/access-wizard.test.js +112 -0
- package/cli/cmds/access-wizard.test.js.map +1 -0
- package/cli/cmds/app/chips-cmd.d.ts +50 -0
- package/cli/cmds/app/chips-cmd.js +145 -0
- package/cli/cmds/app/chips-cmd.js.map +1 -0
- package/cli/cmds/app/chips-render.test.d.ts +1 -0
- package/cli/cmds/app/chips-render.test.js +30 -0
- package/cli/cmds/app/chips-render.test.js.map +1 -0
- package/cli/cmds/app/index.d.ts +33 -0
- package/cli/cmds/app/index.js +4 -1
- package/cli/cmds/app/index.js.map +1 -1
- package/cli/cmds/generate-cmd.d.ts +3 -0
- package/cli/cmds/generate-cmd.js +6 -0
- package/cli/cmds/generate-cmd.js.map +1 -1
- package/cli/cmds/generate-cmd.test.js +3 -0
- package/cli/cmds/generate-cmd.test.js.map +1 -1
- package/cli/cmds/generate-core.d.ts +1 -0
- package/cli/cmds/generate-core.js +3 -0
- package/cli/cmds/generate-core.js.map +1 -1
- package/cli/cmds/generate-core.test.js +6 -0
- package/cli/cmds/generate-core.test.js.map +1 -1
- package/cli/cmds/push-access-flags.test.d.ts +1 -0
- package/cli/cmds/push-access-flags.test.js +51 -0
- package/cli/cmds/push-access-flags.test.js.map +1 -0
- package/cli/cmds/push-cmd.d.ts +12 -7
- package/cli/cmds/push-cmd.js +48 -13
- package/cli/cmds/push-cmd.js.map +1 -1
- package/cli/cmds/push-from-dir.d.ts +11 -25
- package/cli/cmds/push-from-dir.js +57 -32
- package/cli/cmds/push-from-dir.js.map +1 -1
- package/cli/cmds/push-from-dir.test.js +245 -24
- package/cli/cmds/push-from-dir.test.js.map +1 -1
- package/cli/main.js +13 -1
- package/cli/main.js.map +1 -1
- package/package.json +8 -8
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { Result } from "@adviser/cement";
|
|
2
|
+
import { accessFnProposesAnonymousWrites, isSectionEvent } from "@vibes.diy/api-types";
|
|
3
|
+
import { resolveSectionStream } from "./resolve-section-stream.js";
|
|
4
|
+
export const CLI_ACCESS_WIZARD_PROMPT = "Set up data access control rules before opening this app to everyone with the link.";
|
|
5
|
+
export const ACCESS_FN_FILENAME = "access.js";
|
|
6
|
+
export const declaresAllowAnonymous = accessFnProposesAnonymousWrites;
|
|
7
|
+
export async function runAccessWizard(args) {
|
|
8
|
+
await args.note("info", "No access.js found — running the access wizard before going public (this is a codegen turn).");
|
|
9
|
+
const rChat = await args.api.openChat({ ownerHandle: args.ownerHandle, appSlug: args.appSlug, mode: "codegen" });
|
|
10
|
+
if (rChat.isErr()) {
|
|
11
|
+
return Result.Err(`Access wizard failed to open a chat: ${JSON.stringify(rChat.Err())}`);
|
|
12
|
+
}
|
|
13
|
+
const chat = rChat.Ok();
|
|
14
|
+
const draft = {
|
|
15
|
+
kind: "draft",
|
|
16
|
+
files: args.files.flatMap((f) => "content" in f && typeof f.content === "string"
|
|
17
|
+
? [{ type: "code-block", lang: langOf(f.filename), filename: f.filename, content: f.content }]
|
|
18
|
+
: []),
|
|
19
|
+
};
|
|
20
|
+
const rPrompt = await chat.prompt({ messages: [{ role: "user", content: [{ type: "text", text: CLI_ACCESS_WIZARD_PROMPT }] }] }, { variant: "access-wizard", selected: draft, ...(args.apiKey === undefined ? {} : { apiKey: args.apiKey }) });
|
|
21
|
+
if (rPrompt.isErr()) {
|
|
22
|
+
await chat.close();
|
|
23
|
+
return Result.Err(`Access wizard turn was refused: ${JSON.stringify(rPrompt.Err())}`);
|
|
24
|
+
}
|
|
25
|
+
const sectionOnly = chat.sectionStream.pipeThrough(new TransformStream({
|
|
26
|
+
transform(msg, controller) {
|
|
27
|
+
if (isSectionEvent(msg))
|
|
28
|
+
controller.enqueue(msg);
|
|
29
|
+
},
|
|
30
|
+
}));
|
|
31
|
+
const rResolved = await resolveSectionStream({
|
|
32
|
+
sectionStream: sectionOnly,
|
|
33
|
+
streamId: rPrompt.Ok().promptId,
|
|
34
|
+
seed: new Map(args.files.flatMap((f) => "content" in f && typeof f.content === "string" ? [[stripLeadingSlash(f.filename), f.content]] : [])),
|
|
35
|
+
});
|
|
36
|
+
await chat.close();
|
|
37
|
+
if (rResolved.isErr()) {
|
|
38
|
+
return Result.Err(`Access wizard stream failed: ${rResolved.Err().message}`);
|
|
39
|
+
}
|
|
40
|
+
const files = rResolved.Ok().files;
|
|
41
|
+
const source = files[ACCESS_FN_FILENAME];
|
|
42
|
+
if (source === undefined || source.trim() === "") {
|
|
43
|
+
return Result.Err("Access wizard finished without writing an access.js. Nothing was published — re-run the push, or pass --no-access-fn to publish without data access rules.");
|
|
44
|
+
}
|
|
45
|
+
const declaresAnonymous = declaresAllowAnonymous(source);
|
|
46
|
+
await args.note("info", declaresAnonymous
|
|
47
|
+
? "Access wizard wrote access.js (anonymous submissions declared — publishing with anonymous writes admitted)."
|
|
48
|
+
: "Access wizard wrote access.js.");
|
|
49
|
+
return Result.Ok({ source, files, declaresAnonymous });
|
|
50
|
+
}
|
|
51
|
+
function stripLeadingSlash(path) {
|
|
52
|
+
return path.startsWith("/") ? path.slice(1) : path;
|
|
53
|
+
}
|
|
54
|
+
function langOf(filename) {
|
|
55
|
+
const dot = filename.lastIndexOf(".");
|
|
56
|
+
return dot === -1 ? "js" : filename.slice(dot + 1).toLowerCase();
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=access-wizard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"access-wizard.js","sourceRoot":"","sources":["../../../jsr/cli/cmds/access-wizard.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { Result } from "@adviser/cement";
|
|
2
|
+
import { describe, expect, it, vi } from "vitest";
|
|
3
|
+
import { runAccessWizard } from "./access-wizard.js";
|
|
4
|
+
const APP = {
|
|
5
|
+
type: "code-block",
|
|
6
|
+
lang: "jsx",
|
|
7
|
+
filename: "/App.jsx",
|
|
8
|
+
content: "export default function App(){ return <div>todo list with authorHandle</div>; }",
|
|
9
|
+
};
|
|
10
|
+
function turnStream(files, streamId) {
|
|
11
|
+
const base = (seq) => ({ blockId: "b1", streamId, seq, blockNr: 1, timestamp: new Date() });
|
|
12
|
+
const blocks = [];
|
|
13
|
+
let seq = 0;
|
|
14
|
+
let n = 0;
|
|
15
|
+
for (const [path, content] of Object.entries(files)) {
|
|
16
|
+
n += 1;
|
|
17
|
+
const sectionId = `s${n}`;
|
|
18
|
+
const lang = path.endsWith(".jsx") ? "jsx" : "js";
|
|
19
|
+
blocks.push({ type: "block.code.begin", sectionId, lang, path, ...base(seq++) });
|
|
20
|
+
content.split("\n").forEach((line, i) => {
|
|
21
|
+
blocks.push({ type: "block.code.line", sectionId, lang, path, lineNr: i + 1, line, ...base(seq++) });
|
|
22
|
+
});
|
|
23
|
+
blocks.push({
|
|
24
|
+
type: "block.code.end",
|
|
25
|
+
sectionId,
|
|
26
|
+
lang,
|
|
27
|
+
path,
|
|
28
|
+
stats: { lines: content.split("\n").length, bytes: content.length },
|
|
29
|
+
...base(seq++),
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
blocks.push({
|
|
33
|
+
type: "block.end",
|
|
34
|
+
stats: {
|
|
35
|
+
toplevel: { lines: 0, bytes: 0 },
|
|
36
|
+
code: { lines: 1, bytes: 1 },
|
|
37
|
+
image: { lines: 0, bytes: 0 },
|
|
38
|
+
total: { lines: 1, bytes: 1 },
|
|
39
|
+
},
|
|
40
|
+
usage: { given: [], calculated: { prompt_tokens: 0, completion_tokens: 0, total_tokens: 0 } },
|
|
41
|
+
...base(seq++),
|
|
42
|
+
});
|
|
43
|
+
blocks.push({ type: "prompt.block-end", chatId: "chat-live", ...base(seq++) });
|
|
44
|
+
return new ReadableStream({
|
|
45
|
+
start(controller) {
|
|
46
|
+
controller.enqueue({
|
|
47
|
+
type: "vibes.diy.section-event",
|
|
48
|
+
chatId: "chat-live",
|
|
49
|
+
promptId: streamId,
|
|
50
|
+
blockSeq: 0,
|
|
51
|
+
timestamp: new Date(),
|
|
52
|
+
blocks: blocks,
|
|
53
|
+
});
|
|
54
|
+
controller.close();
|
|
55
|
+
},
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
function makeApi(files) {
|
|
59
|
+
const prompt = vi.fn().mockResolvedValue(Result.Ok({ promptId: "stream-1" }));
|
|
60
|
+
const close = vi.fn().mockResolvedValue(undefined);
|
|
61
|
+
const openChat = vi.fn().mockResolvedValue(Result.Ok({ sectionStream: turnStream(files, "stream-1"), prompt, close }));
|
|
62
|
+
return { api: { openChat }, prompt, openChat };
|
|
63
|
+
}
|
|
64
|
+
describe("the CLI access wizard (#4699 Task 11)", () => {
|
|
65
|
+
it("sends the LOCAL directory as the turn's draft selection", async () => {
|
|
66
|
+
const { api, prompt } = makeApi({ "access.js": "export function todos(){ return {}; }" });
|
|
67
|
+
const r = await runAccessWizard({
|
|
68
|
+
api,
|
|
69
|
+
ownerHandle: "testuser",
|
|
70
|
+
appSlug: "test-app",
|
|
71
|
+
files: [APP],
|
|
72
|
+
note: () => undefined,
|
|
73
|
+
});
|
|
74
|
+
expect(r.isErr()).toBe(false);
|
|
75
|
+
const opts = prompt.mock.calls[0][1];
|
|
76
|
+
expect(opts.variant).toBe("access-wizard");
|
|
77
|
+
expect(opts.selected.kind).toBe("draft");
|
|
78
|
+
expect(opts.selected.files.map((f) => f.filename)).toContain("/App.jsx");
|
|
79
|
+
expect(opts.selected.files[0].content).toContain("authorHandle");
|
|
80
|
+
});
|
|
81
|
+
it("returns the WHOLE resolved file set, not only access.js", async () => {
|
|
82
|
+
const { api } = makeApi({
|
|
83
|
+
"access.js": "export function todos(doc){ return doc.authorHandle ? {} : { forbidden: 'x' }; }",
|
|
84
|
+
"App.jsx": "export default function App(){ return <div>now stamps authorHandle</div>; }",
|
|
85
|
+
});
|
|
86
|
+
const r = await runAccessWizard({
|
|
87
|
+
api,
|
|
88
|
+
ownerHandle: "testuser",
|
|
89
|
+
appSlug: "test-app",
|
|
90
|
+
files: [APP],
|
|
91
|
+
note: () => undefined,
|
|
92
|
+
});
|
|
93
|
+
expect(r.isErr()).toBe(false);
|
|
94
|
+
expect(Object.keys(r.Ok().files).sort()).toEqual(["App.jsx", "access.js"]);
|
|
95
|
+
expect(r.Ok().source).toContain("authorHandle");
|
|
96
|
+
expect(r.Ok().declaresAnonymous).toBe(false);
|
|
97
|
+
});
|
|
98
|
+
it("reads a real allowAnonymous declaration as the dial's intent", async () => {
|
|
99
|
+
const { api } = makeApi({
|
|
100
|
+
"access.js": "export function s(doc, old, user){ if (!user) return { allowAnonymous: true }; return {}; }",
|
|
101
|
+
});
|
|
102
|
+
const r = await runAccessWizard({ api, ownerHandle: "u", appSlug: "a", files: [APP], note: () => undefined });
|
|
103
|
+
expect(r.Ok().declaresAnonymous).toBe(true);
|
|
104
|
+
});
|
|
105
|
+
it("fails closed when the turn writes no access.js", async () => {
|
|
106
|
+
const { api } = makeApi({ "App.jsx": "export default function App(){ return null; }" });
|
|
107
|
+
const r = await runAccessWizard({ api, ownerHandle: "u", appSlug: "a", files: [APP], note: () => undefined });
|
|
108
|
+
expect(r.isErr()).toBe(true);
|
|
109
|
+
expect(String(r.Err())).toContain("without writing an access.js");
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
//# sourceMappingURL=access-wizard.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"access-wizard.test.js","sourceRoot":"","sources":["../../../jsr/cli/cmds/access-wizard.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { EventoHandler } from "@adviser/cement";
|
|
2
|
+
import { CliCtx } from "../../cli-ctx.js";
|
|
3
|
+
import { WrapCmdTSMsg } from "../../cmd-evento.js";
|
|
4
|
+
export declare const ReqAppChips: import("arktype/internal/variants/object.ts").ObjectType<{
|
|
5
|
+
type: "vibes-diy.cli.app-chips";
|
|
6
|
+
appSlug: string;
|
|
7
|
+
ownerHandle: string;
|
|
8
|
+
apiUrl: string;
|
|
9
|
+
chips: string[];
|
|
10
|
+
fsId: string;
|
|
11
|
+
}, {}>;
|
|
12
|
+
export type ReqAppChips = typeof ReqAppChips.infer;
|
|
13
|
+
export declare function isReqAppChips(obj: unknown): obj is ReqAppChips;
|
|
14
|
+
export declare const ResAppChipsCli: import("arktype/internal/variants/object.ts").ObjectType<{
|
|
15
|
+
type: "vibes-diy.cli.res-app-chips";
|
|
16
|
+
appSlug: string;
|
|
17
|
+
ownerHandle: string;
|
|
18
|
+
fsId: string;
|
|
19
|
+
releaseSeq: number;
|
|
20
|
+
chips: string[];
|
|
21
|
+
}, {}>;
|
|
22
|
+
export type ResAppChipsCli = typeof ResAppChipsCli.infer;
|
|
23
|
+
export declare function isResAppChipsCli(obj: unknown): obj is ResAppChipsCli;
|
|
24
|
+
export declare function renderAppChipsLines(msg: ResAppChipsCli): string[];
|
|
25
|
+
export declare const appChipsEvento: EventoHandler<WrapCmdTSMsg<unknown>, ReqAppChips, ResAppChipsCli>;
|
|
26
|
+
export declare function appChipsCmd(ctx: CliCtx): Partial<import("cmd-ts/dist/cjs/argparser.js").Register> & {
|
|
27
|
+
parse(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<{
|
|
28
|
+
apiUrl: string;
|
|
29
|
+
json: boolean;
|
|
30
|
+
text: boolean;
|
|
31
|
+
appSlug: string | undefined;
|
|
32
|
+
chips: string[];
|
|
33
|
+
vibe: string;
|
|
34
|
+
handle: string;
|
|
35
|
+
clear: boolean;
|
|
36
|
+
fsId: string;
|
|
37
|
+
}>>;
|
|
38
|
+
} & import("cmd-ts/dist/cjs/helpdoc.js").PrintHelp & import("cmd-ts/dist/cjs/helpdoc.js").ProvidesHelp & import("cmd-ts/dist/cjs/helpdoc.js").Named & Partial<import("cmd-ts/dist/cjs/helpdoc.js").Versioned> & import("cmd-ts/dist/cjs/argparser.js").Register & import("cmd-ts/dist/cjs/runner.js").Handling<{
|
|
39
|
+
apiUrl: string;
|
|
40
|
+
json: boolean;
|
|
41
|
+
text: boolean;
|
|
42
|
+
appSlug: string | undefined;
|
|
43
|
+
chips: string[];
|
|
44
|
+
vibe: string;
|
|
45
|
+
handle: string;
|
|
46
|
+
clear: boolean;
|
|
47
|
+
fsId: string;
|
|
48
|
+
}, never> & {
|
|
49
|
+
run(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<never>>;
|
|
50
|
+
} & Partial<import("cmd-ts/dist/cjs/helpdoc.js").Versioned & import("cmd-ts/dist/cjs/helpdoc.js").Descriptive & import("cmd-ts/dist/cjs/helpdoc.js").Aliased>;
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { command, flag, option, optional, positional, restPositionals, string } from "cmd-ts";
|
|
2
|
+
import { Result, Option } from "@adviser/cement";
|
|
3
|
+
import { type } from "arktype";
|
|
4
|
+
import { cmdTsDefaultArgs } from "../../cli-ctx.js";
|
|
5
|
+
import { sendMsg } from "../../cmd-evento.js";
|
|
6
|
+
import { resolveHandle } from "../../resolve-handle.js";
|
|
7
|
+
import { resolveVibePositionals } from "../../parse-vibe.js";
|
|
8
|
+
import { formatErr } from "../format-err.js";
|
|
9
|
+
import { HANDLE_REQUIRED_CLI_MESSAGE } from "../../handle-required.js";
|
|
10
|
+
export const ReqAppChips = type({
|
|
11
|
+
type: "'vibes-diy.cli.app-chips'",
|
|
12
|
+
appSlug: "string",
|
|
13
|
+
ownerHandle: "string",
|
|
14
|
+
apiUrl: "string",
|
|
15
|
+
chips: "string[]",
|
|
16
|
+
fsId: "string",
|
|
17
|
+
});
|
|
18
|
+
export function isReqAppChips(obj) {
|
|
19
|
+
return !(ReqAppChips(obj) instanceof type.errors);
|
|
20
|
+
}
|
|
21
|
+
export const ResAppChipsCli = type({
|
|
22
|
+
type: "'vibes-diy.cli.res-app-chips'",
|
|
23
|
+
appSlug: "string",
|
|
24
|
+
ownerHandle: "string",
|
|
25
|
+
fsId: "string",
|
|
26
|
+
releaseSeq: "number",
|
|
27
|
+
chips: "string[]",
|
|
28
|
+
});
|
|
29
|
+
export function isResAppChipsCli(obj) {
|
|
30
|
+
return !(ResAppChipsCli(obj) instanceof type.errors);
|
|
31
|
+
}
|
|
32
|
+
export function renderAppChipsLines(msg) {
|
|
33
|
+
const app = `${msg.ownerHandle}/${msg.appSlug}`;
|
|
34
|
+
const where = ` on release ${msg.fsId} (seq ${msg.releaseSeq})`;
|
|
35
|
+
if (msg.chips.length === 0) {
|
|
36
|
+
return [`${app}: cleared — visitors now see no suggestion chips.`, where];
|
|
37
|
+
}
|
|
38
|
+
return [`${app}: visitors now see these chips:`, ...msg.chips.map((c) => ` ▸ ${c}`), where];
|
|
39
|
+
}
|
|
40
|
+
export const appChipsEvento = {
|
|
41
|
+
hash: "vibes-diy.cli.app-chips",
|
|
42
|
+
validate: (ctx) => {
|
|
43
|
+
if (isReqAppChips(ctx.enRequest)) {
|
|
44
|
+
return Promise.resolve(Result.Ok(Option.Some(ctx.enRequest)));
|
|
45
|
+
}
|
|
46
|
+
return Promise.resolve(Result.Ok(Option.None()));
|
|
47
|
+
},
|
|
48
|
+
handle: async (ctx) => {
|
|
49
|
+
const ectx = ctx.ctx.getOrThrow("cliCtx");
|
|
50
|
+
if (!ectx.vibesDiyApiFactory) {
|
|
51
|
+
return Result.Err("Not logged in. Run 'vibes-diy login' first.");
|
|
52
|
+
}
|
|
53
|
+
const args = ctx.validated;
|
|
54
|
+
const api = ectx.vibesDiyApiFactory(args.apiUrl);
|
|
55
|
+
const ownerHandle = await resolveHandle(api, args.ownerHandle === "" ? undefined : args.ownerHandle);
|
|
56
|
+
if (ownerHandle === undefined) {
|
|
57
|
+
return Result.Err(HANDLE_REQUIRED_CLI_MESSAGE);
|
|
58
|
+
}
|
|
59
|
+
if (args.appSlug === "") {
|
|
60
|
+
return Result.Err("Missing vibe — pass an app slug or handle/app-slug.");
|
|
61
|
+
}
|
|
62
|
+
const rSet = await api.setVibeChips({
|
|
63
|
+
appSlug: args.appSlug,
|
|
64
|
+
ownerHandle,
|
|
65
|
+
chips: args.chips,
|
|
66
|
+
...(args.fsId === "" ? {} : { fsId: args.fsId }),
|
|
67
|
+
});
|
|
68
|
+
if (rSet.isErr()) {
|
|
69
|
+
return Result.Err(formatErr(rSet.Err()));
|
|
70
|
+
}
|
|
71
|
+
const r = rSet.Ok();
|
|
72
|
+
return sendMsg(ctx, {
|
|
73
|
+
type: "vibes-diy.cli.res-app-chips",
|
|
74
|
+
appSlug: r.appSlug,
|
|
75
|
+
ownerHandle: r.ownerHandle,
|
|
76
|
+
fsId: r.fsId,
|
|
77
|
+
releaseSeq: r.releaseSeq,
|
|
78
|
+
chips: r.chips,
|
|
79
|
+
});
|
|
80
|
+
},
|
|
81
|
+
};
|
|
82
|
+
export function appChipsCmd(ctx) {
|
|
83
|
+
return command({
|
|
84
|
+
name: "chips",
|
|
85
|
+
description: "Set the suggestion chips visitors see on a vibe's edit card (up to 3). --clear shows none. This is a publish: it changes what strangers see, not your own card. Publishing the vibe again re-derives the chips from your chat and overwrites what you set here — so set them after you publish.",
|
|
86
|
+
args: {
|
|
87
|
+
...cmdTsDefaultArgs(ctx),
|
|
88
|
+
appSlug: positional({
|
|
89
|
+
displayName: "vibe",
|
|
90
|
+
description: "App slug or handle/app-slug (e.g. jchris/hat-smeller)",
|
|
91
|
+
type: optional(string),
|
|
92
|
+
}),
|
|
93
|
+
chips: restPositionals({
|
|
94
|
+
displayName: "chip",
|
|
95
|
+
description: "The chip labels, in order. More than 3 are trimmed to the first 3.",
|
|
96
|
+
type: string,
|
|
97
|
+
}),
|
|
98
|
+
vibe: option({
|
|
99
|
+
long: "vibe",
|
|
100
|
+
description: "Vibe identifier as handle/app-slug",
|
|
101
|
+
type: string,
|
|
102
|
+
defaultValue: () => "",
|
|
103
|
+
defaultValueIsSerializable: true,
|
|
104
|
+
}),
|
|
105
|
+
handle: option({
|
|
106
|
+
long: "handle",
|
|
107
|
+
description: "Act as this bound handle for this call only (leaves your default handle unchanged)",
|
|
108
|
+
type: string,
|
|
109
|
+
defaultValue: () => "",
|
|
110
|
+
defaultValueIsSerializable: true,
|
|
111
|
+
}),
|
|
112
|
+
clear: flag({
|
|
113
|
+
long: "clear",
|
|
114
|
+
description: "Show visitors no chips at all",
|
|
115
|
+
}),
|
|
116
|
+
fsId: option({
|
|
117
|
+
long: "fs-id",
|
|
118
|
+
description: "Stamp this published version instead of the live release",
|
|
119
|
+
type: string,
|
|
120
|
+
defaultValue: () => "",
|
|
121
|
+
defaultValueIsSerializable: true,
|
|
122
|
+
}),
|
|
123
|
+
},
|
|
124
|
+
handler: ctx.cliStream.enqueue((args) => {
|
|
125
|
+
const resolved = resolveVibePositionals({
|
|
126
|
+
vibe: args.vibe,
|
|
127
|
+
handle: args.handle,
|
|
128
|
+
positionals: [args.appSlug],
|
|
129
|
+
});
|
|
130
|
+
const chips = [...resolved.trailing, ...args.chips];
|
|
131
|
+
if (args.clear === false && chips.length === 0) {
|
|
132
|
+
throw new Error("Pass at least one chip, or --clear to show visitors no chips.");
|
|
133
|
+
}
|
|
134
|
+
return {
|
|
135
|
+
type: "vibes-diy.cli.app-chips",
|
|
136
|
+
appSlug: resolved.appSlug,
|
|
137
|
+
ownerHandle: resolved.handle,
|
|
138
|
+
apiUrl: args.apiUrl,
|
|
139
|
+
chips: args.clear ? [] : chips,
|
|
140
|
+
fsId: args.fsId,
|
|
141
|
+
};
|
|
142
|
+
}),
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=chips-cmd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chips-cmd.js","sourceRoot":"","sources":["../../../../jsr/cli/cmds/app/chips-cmd.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { renderAppChipsLines } from "./chips-cmd.js";
|
|
3
|
+
const base = {
|
|
4
|
+
type: "vibes-diy.cli.res-app-chips",
|
|
5
|
+
ownerHandle: "og",
|
|
6
|
+
appSlug: "potluck",
|
|
7
|
+
fsId: "zFsIdOfTheLiveRelease",
|
|
8
|
+
releaseSeq: 7,
|
|
9
|
+
chips: ["Add a signup sheet", "Track who brings what"],
|
|
10
|
+
};
|
|
11
|
+
describe("renderAppChipsLines (#4807)", () => {
|
|
12
|
+
it("reports the chips that landed and the release they landed on", () => {
|
|
13
|
+
const out = renderAppChipsLines(base).join("\n");
|
|
14
|
+
expect(out).toContain("og/potluck: visitors now see these chips:");
|
|
15
|
+
expect(out).toContain("▸ Add a signup sheet");
|
|
16
|
+
expect(out).toContain("▸ Track who brings what");
|
|
17
|
+
expect(out).toContain("on release zFsIdOfTheLiveRelease (seq 7)");
|
|
18
|
+
});
|
|
19
|
+
it("reports the capped list, not what was typed", () => {
|
|
20
|
+
const out = renderAppChipsLines({ ...base, chips: ["One", "Two", "Three"] }).join("\n");
|
|
21
|
+
expect(out).toContain("▸ Three");
|
|
22
|
+
expect(out).not.toContain("Four");
|
|
23
|
+
});
|
|
24
|
+
it("says cleared in words, so an empty stamp never reads as 'nothing happened'", () => {
|
|
25
|
+
const out = renderAppChipsLines({ ...base, chips: [] }).join("\n");
|
|
26
|
+
expect(out).toContain("cleared — visitors now see no suggestion chips");
|
|
27
|
+
expect(out).toContain("on release zFsIdOfTheLiveRelease");
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
//# sourceMappingURL=chips-render.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chips-render.test.js","sourceRoot":"","sources":["../../../../jsr/cli/cmds/app/chips-render.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAuB,MAAM,gBAAgB,CAAC;AAM1E,MAAM,IAAI,GAAmB;IAC3B,IAAI,EAAE,6BAA6B;IACnC,WAAW,EAAE,IAAI;IACjB,OAAO,EAAE,SAAS;IAClB,IAAI,EAAE,uBAAuB;IAC7B,UAAU,EAAE,CAAC;IACb,KAAK,EAAE,CAAC,oBAAoB,EAAE,uBAAuB,CAAC;CACvD,CAAC;AAEF,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;IAC3C,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACtE,MAAM,GAAG,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjD,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,2CAA2C,CAAC,CAAC;QACnE,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;QAC9C,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC;QACjD,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,4CAA4C,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IAIH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,GAAG,GAAG,mBAAmB,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxF,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACjC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4EAA4E,EAAE,GAAG,EAAE;QACpF,MAAM,GAAG,GAAG,mBAAmB,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnE,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,gDAAgD,CAAC,CAAC;QACxE,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,oCAAoC,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/cli/cmds/app/index.d.ts
CHANGED
|
@@ -2,8 +2,22 @@ import type { CliCtx } from "../../cli-ctx.js";
|
|
|
2
2
|
export { appStatusEvento, isResAppStatusCli, renderAppStatusLines, type ResAppStatusCli } from "./status-cmd.js";
|
|
3
3
|
export { appRearmEvento, isResAppRearmCli, renderAppRearmLines, type ResAppRearmCli } from "./rearm-cmd.js";
|
|
4
4
|
export { appLogsEvento, isResAppLogsCli, renderAppLogLines, parseSince, type ResAppLogsCli } from "./logs-cmd.js";
|
|
5
|
+
export { appChipsEvento, isResAppChipsCli, renderAppChipsLines, type ResAppChipsCli } from "./chips-cmd.js";
|
|
5
6
|
export declare function appSubcommands(ctx: CliCtx): Partial<import("cmd-ts/dist/cjs/argparser.js").Register> & {
|
|
6
7
|
parse(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<{
|
|
8
|
+
command: "chips";
|
|
9
|
+
args: {
|
|
10
|
+
apiUrl: string;
|
|
11
|
+
json: boolean;
|
|
12
|
+
text: boolean;
|
|
13
|
+
appSlug: string | undefined;
|
|
14
|
+
chips: string[];
|
|
15
|
+
vibe: string;
|
|
16
|
+
handle: string;
|
|
17
|
+
clear: boolean;
|
|
18
|
+
fsId: string;
|
|
19
|
+
};
|
|
20
|
+
} | {
|
|
7
21
|
command: "logs";
|
|
8
22
|
args: {
|
|
9
23
|
apiUrl: string;
|
|
@@ -39,6 +53,19 @@ export declare function appSubcommands(ctx: CliCtx): Partial<import("cmd-ts/dist
|
|
|
39
53
|
};
|
|
40
54
|
}>>;
|
|
41
55
|
} & import("cmd-ts/dist/cjs/helpdoc.js").Named & Partial<import("cmd-ts/dist/cjs/helpdoc.js").Descriptive & import("cmd-ts/dist/cjs/helpdoc.js").Versioned> & import("cmd-ts/dist/cjs/helpdoc.js").PrintHelp & Partial<import("cmd-ts/dist/cjs/helpdoc.js").Versioned> & import("cmd-ts/dist/cjs/argparser.js").Register & import("cmd-ts/dist/cjs/runner.js").Handling<{
|
|
56
|
+
command: "chips";
|
|
57
|
+
args: {
|
|
58
|
+
apiUrl: string;
|
|
59
|
+
json: boolean;
|
|
60
|
+
text: boolean;
|
|
61
|
+
appSlug: string | undefined;
|
|
62
|
+
chips: string[];
|
|
63
|
+
vibe: string;
|
|
64
|
+
handle: string;
|
|
65
|
+
clear: boolean;
|
|
66
|
+
fsId: string;
|
|
67
|
+
};
|
|
68
|
+
} | {
|
|
42
69
|
command: "logs";
|
|
43
70
|
args: {
|
|
44
71
|
apiUrl: string;
|
|
@@ -73,6 +100,9 @@ export declare function appSubcommands(ctx: CliCtx): Partial<import("cmd-ts/dist
|
|
|
73
100
|
handle: string;
|
|
74
101
|
};
|
|
75
102
|
}, {
|
|
103
|
+
command: "chips";
|
|
104
|
+
value: never;
|
|
105
|
+
} | {
|
|
76
106
|
command: "logs";
|
|
77
107
|
value: never;
|
|
78
108
|
} | {
|
|
@@ -83,6 +113,9 @@ export declare function appSubcommands(ctx: CliCtx): Partial<import("cmd-ts/dist
|
|
|
83
113
|
value: never;
|
|
84
114
|
}> & {
|
|
85
115
|
run(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<{
|
|
116
|
+
command: "chips";
|
|
117
|
+
value: never;
|
|
118
|
+
} | {
|
|
86
119
|
command: "logs";
|
|
87
120
|
value: never;
|
|
88
121
|
} | {
|
package/cli/cmds/app/index.js
CHANGED
|
@@ -2,17 +2,20 @@ import { subcommands } from "cmd-ts";
|
|
|
2
2
|
import { appStatusCmd } from "./status-cmd.js";
|
|
3
3
|
import { appRearmCmd } from "./rearm-cmd.js";
|
|
4
4
|
import { appLogsCmd } from "./logs-cmd.js";
|
|
5
|
+
import { appChipsCmd } from "./chips-cmd.js";
|
|
5
6
|
export { appStatusEvento, isResAppStatusCli, renderAppStatusLines } from "./status-cmd.js";
|
|
6
7
|
export { appRearmEvento, isResAppRearmCli, renderAppRearmLines } from "./rearm-cmd.js";
|
|
7
8
|
export { appLogsEvento, isResAppLogsCli, renderAppLogLines, parseSince } from "./logs-cmd.js";
|
|
9
|
+
export { appChipsEvento, isResAppChipsCli, renderAppChipsLines } from "./chips-cmd.js";
|
|
8
10
|
export function appSubcommands(ctx) {
|
|
9
11
|
return subcommands({
|
|
10
12
|
name: "app",
|
|
11
|
-
description: "Operate a deployed vibe: scheduled-task health, recovery,
|
|
13
|
+
description: "Operate a deployed vibe: scheduled-task health, recovery, its ctx.log diagnostics, and its visitor-facing chips",
|
|
12
14
|
cmds: {
|
|
13
15
|
status: appStatusCmd(ctx),
|
|
14
16
|
rearm: appRearmCmd(ctx),
|
|
15
17
|
logs: appLogsCmd(ctx),
|
|
18
|
+
chips: appChipsCmd(ctx),
|
|
16
19
|
},
|
|
17
20
|
});
|
|
18
21
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../jsr/cli/cmds/app/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAErC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../jsr/cli/cmds/app/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAErC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,oBAAoB,EAAwB,MAAM,iBAAiB,CAAC;AACjH,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,mBAAmB,EAAuB,MAAM,gBAAgB,CAAC;AAC5G,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,iBAAiB,EAAE,UAAU,EAAsB,MAAM,eAAe,CAAC;AAClH,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,mBAAmB,EAAuB,MAAM,gBAAgB,CAAC;AAE5G,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,OAAO,WAAW,CAAC;QACjB,IAAI,EAAE,KAAK;QACX,WAAW,EAAE,iHAAiH;QAC9H,IAAI,EAAE;YACJ,MAAM,EAAE,YAAY,CAAC,GAAG,CAAC;YACzB,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC;YACvB,IAAI,EAAE,UAAU,CAAC,GAAG,CAAC;YACrB,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC;SACxB;KACF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -11,6 +11,7 @@ export declare const ReqGenerate: import("arktype/internal/variants/object.ts").
|
|
|
11
11
|
appSlug: string;
|
|
12
12
|
ownerHandle: string;
|
|
13
13
|
instantJoin?: boolean | undefined;
|
|
14
|
+
noAccessFn?: boolean | undefined;
|
|
14
15
|
verbose: boolean;
|
|
15
16
|
apiUrl: string;
|
|
16
17
|
dryRun: boolean;
|
|
@@ -33,6 +34,7 @@ export declare function generateCmd(ctx: CliCtx): Partial<import("cmd-ts/dist/cj
|
|
|
33
34
|
userSlug: string;
|
|
34
35
|
vibe: string;
|
|
35
36
|
instantJoin: boolean;
|
|
37
|
+
noAccessFn: boolean;
|
|
36
38
|
verbose: boolean;
|
|
37
39
|
dryRun: boolean;
|
|
38
40
|
transcript: boolean;
|
|
@@ -50,6 +52,7 @@ export declare function generateCmd(ctx: CliCtx): Partial<import("cmd-ts/dist/cj
|
|
|
50
52
|
userSlug: string;
|
|
51
53
|
vibe: string;
|
|
52
54
|
instantJoin: boolean;
|
|
55
|
+
noAccessFn: boolean;
|
|
53
56
|
verbose: boolean;
|
|
54
57
|
dryRun: boolean;
|
|
55
58
|
transcript: boolean;
|
package/cli/cmds/generate-cmd.js
CHANGED
|
@@ -14,6 +14,7 @@ export const ReqGenerate = type({
|
|
|
14
14
|
appSlug: "string",
|
|
15
15
|
ownerHandle: "string",
|
|
16
16
|
"instantJoin?": "boolean",
|
|
17
|
+
"noAccessFn?": "boolean",
|
|
17
18
|
verbose: "boolean",
|
|
18
19
|
apiUrl: "string",
|
|
19
20
|
dryRun: "boolean",
|
|
@@ -83,6 +84,7 @@ export const generateEvento = {
|
|
|
83
84
|
...(args.model !== undefined ? { model: args.model } : {}),
|
|
84
85
|
...(args.apiKey !== undefined ? { apiKey: args.apiKey } : {}),
|
|
85
86
|
...(args.focusPath !== undefined ? { focusPath: args.focusPath } : {}),
|
|
87
|
+
...(args.noAccessFn === undefined ? {} : { noAccessFn: args.noAccessFn }),
|
|
86
88
|
verbose: args.verbose,
|
|
87
89
|
baseDir: ectx.cwd === undefined ? process.cwd() : ectx.cwd(),
|
|
88
90
|
}, (level, message) => sendProgress(ctx, level, message));
|
|
@@ -134,6 +136,10 @@ export function generateCmd(ctx) {
|
|
|
134
136
|
long: "instant-join",
|
|
135
137
|
description: "[Deprecated: no-op. Auto-accept editor is now always enabled by default.]",
|
|
136
138
|
}),
|
|
139
|
+
noAccessFn: flag({
|
|
140
|
+
long: "no-access-fn",
|
|
141
|
+
description: "Publish without running the access wizard (a second codegen turn) when the generated app has no access.js. Nothing will govern what visitors do with its documents.",
|
|
142
|
+
}),
|
|
137
143
|
verbose: flag({
|
|
138
144
|
long: "verbose",
|
|
139
145
|
short: "v",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-cmd.js","sourceRoot":"","sources":["../../../jsr/cli/cmds/generate-cmd.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC7E,OAAO,EAAsB,MAAM,EAAoB,MAAM,EAAmC,MAAM,iBAAiB,CAAC;AACxH,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAE/B,OAAO,EAAU,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,YAAY,EAAgB,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAOjD,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAGrF,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC;IAC9B,IAAI,EAAE,0BAA0B;IAChC,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,QAAQ;IACjB,WAAW,EAAE,QAAQ;IACrB,cAAc,EAAE,SAAS;
|
|
1
|
+
{"version":3,"file":"generate-cmd.js","sourceRoot":"","sources":["../../../jsr/cli/cmds/generate-cmd.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC7E,OAAO,EAAsB,MAAM,EAAoB,MAAM,EAAmC,MAAM,iBAAiB,CAAC;AACxH,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAE/B,OAAO,EAAU,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,YAAY,EAAgB,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAOjD,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAGrF,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC;IAC9B,IAAI,EAAE,0BAA0B;IAChC,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,QAAQ;IACjB,WAAW,EAAE,QAAQ;IACrB,cAAc,EAAE,SAAS;IAEzB,aAAa,EAAE,SAAS;IACxB,OAAO,EAAE,SAAS;IAClB,MAAM,EAAE,QAAQ;IAKhB,MAAM,EAAE,SAAS;IACjB,UAAU,EAAE,SAAS;IAGrB,YAAY,EAAE,QAAQ;IAItB,QAAQ,EAAE,QAAQ;IAIlB,SAAS,EAAE,QAAQ;CACpB,CAAC,CAAC;AAGH,MAAM,UAAU,aAAa,CAAC,GAAY;IACxC,OAAO,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,IAAI,CAAC,MAAM,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,CAAC,MAAM,cAAc,GAAsF;IAC/G,IAAI,EAAE,wBAAwB;IAC9B,QAAQ,EAAE,CAAC,GAA2F,EAAE,EAAE;QACxG,IAAI,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YACjC,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAChE,CAAC;QACD,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACnD,CAAC;IACD,MAAM,EAAE,KAAK,EACX,GAAyF,EACtD,EAAE;QACrC,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,UAAU,CAAS,QAAQ,CAAC,CAAC;QAClD,IAAI,IAAI,CAAC,kBAAkB,KAAK,SAAS,EAAE,CAAC;YAC1C,OAAO,MAAM,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;QACnE,CAAC;QACD,MAAM,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC;QAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAEjD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,wCAAwC,CAAC,CAAC;YAkB1E,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;YAC3E,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;YAC/D,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1F,IAAI,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;gBAClB,OAAO,MAAM,CAAC,GAAG,CAAC,wBAAwB,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;YACtE,CAAC;YACD,MAAM,IAAI,GAAG,KAAK,CAAC,EAAE,EAAE,CAAC;YACxB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAC/B;gBACE,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1D,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;aAC7E,EACD,EAAE,GAAG,CAAC,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAClH,CAAC;YACF,IAAI,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;gBACpB,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;gBACnB,OAAO,MAAM,CAAC,GAAG,CAAC,mBAAmB,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;YACnE,CAAC;YACD,MAAM,OAAO,GAAG,MAAM,2BAA2B,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YACnF,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;YACnB,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,MAAM,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC;YACtE,CAAC;YACD,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU;gBACzB,CAAC,CAAC,kBAAkB,CAAC,OAAO,CAAC;gBAC7B,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YAClF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;YACjC,OAAO,OAAO,CAAC,GAAG,EAAE;gBAClB,IAAI,EAAE,4BAA4B;gBAClC,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,GAAG,EAAE,EAAE;gBACP,SAAS,EAAE,EAAE;gBAGb,MAAM,EAAE,IAAI;aACS,CAAC,CAAC;QAC3B,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,WAAW,CACjC,GAAG,EACH;YACE,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1D,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7D,GAAG,CAAC,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACtE,GAAG,CAAC,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;YACzE,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,OAAO,EAAE,IAAI,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;SAC7D,EACD,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,CACtD,CAAC;QACF,IAAI,SAAS,CAAC,KAAK,EAAE;YAAE,OAAO,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC;QAE1D,OAAO,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC;IACtC,CAAC;CACF,CAAC;AAEF,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,OAAO,OAAO,CAAC;QACb,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,yEAAyE;QACtF,IAAI,EAAE;YACJ,GAAG,gBAAgB,CAAC,GAAG,CAAC;YACxB,MAAM,EAAE,UAAU,CAAC;gBACjB,WAAW,EAAE,QAAQ;gBACrB,WAAW,EAAE,qCAAqC;gBAClD,IAAI,EAAE,MAAM;aACb,CAAC;YACF,OAAO,EAAE,MAAM,CAAC;gBACd,IAAI,EAAE,UAAU;gBAChB,KAAK,EAAE,GAAG;gBACV,WAAW,EAAE,4CAA4C;gBACzD,IAAI,EAAE,MAAM;gBACZ,YAAY,EAAE,GAAG,EAAE,CAAC,EAAE;gBACtB,0BAA0B,EAAE,IAAI;aACjC,CAAC;YACF,MAAM,EAAE,MAAM,CAAC;gBACb,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,2FAA2F;gBACxG,IAAI,EAAE,MAAM;gBACZ,YAAY,EAAE,GAAG,EAAE,CAAC,EAAE;gBACtB,0BAA0B,EAAE,IAAI;aACjC,CAAC;YACF,QAAQ,EAAE,MAAM,CAAC;gBACf,IAAI,EAAE,WAAW;gBAEjB,IAAI,EAAE,MAAM;gBACZ,YAAY,EAAE,GAAG,EAAE,CAAC,EAAE;gBACtB,0BAA0B,EAAE,IAAI;aACjC,CAAC;YACF,IAAI,EAAE,MAAM,CAAC;gBACX,IAAI,EAAE,MAAM;gBACZ,WAAW,EAAE,oCAAoC;gBACjD,IAAI,EAAE,MAAM;gBACZ,YAAY,EAAE,GAAG,EAAE,CAAC,EAAE;gBACtB,0BAA0B,EAAE,IAAI;aACjC,CAAC;YACF,WAAW,EAAE,IAAI,CAAC;gBAChB,IAAI,EAAE,cAAc;gBACpB,WAAW,EAAE,2EAA2E;aACzF,CAAC;YACF,UAAU,EAAE,IAAI,CAAC;gBACf,IAAI,EAAE,cAAc;gBACpB,WAAW,EACT,qKAAqK;aACxK,CAAC;YACF,OAAO,EAAE,IAAI,CAAC;gBACZ,IAAI,EAAE,SAAS;gBACf,KAAK,EAAE,GAAG;gBACV,WAAW,EAAE,4CAA4C;aAC1D,CAAC;YACF,MAAM,EAAE,IAAI,CAAC;gBACX,IAAI,EAAE,SAAS;gBACf,WAAW,EACT,qKAAqK;aACxK,CAAC;YACF,UAAU,EAAE,IAAI,CAAC;gBACf,IAAI,EAAE,YAAY;gBAClB,WAAW,EAAE,mFAAmF;aACjG,CAAC;YACF,KAAK,EAAE,MAAM,CAAC;gBACZ,IAAI,EAAE,OAAO;gBACb,WAAW,EAAE,4EAA4E;gBACzF,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC;aACvB,CAAC;YACF,KAAK,EAAE,MAAM,CAAC;gBACZ,IAAI,EAAE,OAAO;gBACb,WAAW,EAAE,iGAAiG;gBAC9G,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC;aACvB,CAAC;YACF,MAAM,EAAE,MAAM,CAAC;gBACb,IAAI,EAAE,SAAS;gBACf,WAAW,EACT,2IAA2I;gBAC7I,IAAI,EAAE,MAAM;gBACZ,YAAY,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,EAAE;aAKjE,CAAC;SACH;QACD,OAAO,EAAE,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE;YAC3F,IAAI,QAAQ;gBAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,0EAA0E,CAAC,CAAC;YAC/G,MAAM,QAAQ,GAAG,eAAe,CAAC;gBAC/B,IAAI;gBACJ,MAAM,EAAE,MAAM,IAAI,QAAQ;gBAC1B,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,iBAAiB,EAAE,EAAE;aACtB,CAAC,CAAC;YAKH,MAAM,IAAI,GAAG,EAAE,IAAI,EAAE,wBAAiC,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;YAC3H,MAAM,SAAS,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;YAC7E,MAAM,SAAS,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,SAAS,EAAE,KAAK,EAAE,CAAC;YAC5E,OAAO,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAC9D,CAAC,CAAC;KACH,CAAC,CAAC;AACL,CAAC"}
|