mapples 0.2.0-beta.4 → 0.2.0-beta.6
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/README.md +42 -0
- package/dist/api/agent.d.ts +84 -0
- package/dist/api/agent.js +92 -0
- package/dist/api/agent.js.map +1 -0
- package/dist/api/client.d.ts +3 -0
- package/dist/api/client.js +2 -0
- package/dist/api/client.js.map +1 -1
- package/dist/api/commit.js +1 -0
- package/dist/api/commit.js.map +1 -1
- package/dist/api/objects.d.ts +12 -0
- package/dist/api/objects.js +2 -0
- package/dist/api/objects.js.map +1 -1
- package/dist/api/txPlan.d.ts +15 -0
- package/dist/api/txPlan.js +196 -0
- package/dist/api/txPlan.js.map +1 -0
- package/dist/commands/agent.d.ts +2 -0
- package/dist/commands/agent.js +76 -0
- package/dist/commands/agent.js.map +1 -0
- package/dist/commands/create.js +1 -0
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/impl/adoptImpl.js +3 -0
- package/dist/commands/impl/adoptImpl.js.map +1 -1
- package/dist/commands/impl/agentImpl.d.ts +10 -0
- package/dist/commands/impl/agentImpl.js +349 -0
- package/dist/commands/impl/agentImpl.js.map +1 -0
- package/dist/commands/impl/createImpl.js +19 -0
- package/dist/commands/impl/createImpl.js.map +1 -1
- package/dist/commands/impl/initImpl.js +19 -0
- package/dist/commands/impl/initImpl.js.map +1 -1
- package/dist/commands/impl/syncImpl.js +9 -3
- package/dist/commands/impl/syncImpl.js.map +1 -1
- package/dist/commands/init.js +1 -0
- package/dist/commands/init.js.map +1 -1
- package/dist/index.js +12 -1
- package/dist/index.js.map +1 -1
- package/dist/merge/applyOps.d.ts +4 -1
- package/dist/merge/applyOps.js +42 -30
- package/dist/merge/applyOps.js.map +1 -1
- package/dist/merge/childrenOrder.d.ts +13 -0
- package/dist/merge/childrenOrder.js +51 -0
- package/dist/merge/childrenOrder.js.map +1 -0
- package/dist/project/agentState.d.ts +24 -0
- package/dist/project/agentState.js +42 -0
- package/dist/project/agentState.js.map +1 -0
- package/dist/project/secret.d.ts +6 -2
- package/dist/project/secret.js +11 -5
- package/dist/project/secret.js.map +1 -1
- package/dist/services/adoptService.js +11 -0
- package/dist/services/adoptService.js.map +1 -1
- package/dist/services/agentInstall.d.ts +35 -0
- package/dist/services/agentInstall.js +180 -0
- package/dist/services/agentInstall.js.map +1 -0
- package/dist/services/agentLease.d.ts +2 -0
- package/dist/services/agentLease.js +32 -0
- package/dist/services/agentLease.js.map +1 -0
- package/dist/services/clientFactory.d.ts +2 -0
- package/dist/services/clientFactory.js +16 -1
- package/dist/services/clientFactory.js.map +1 -1
- package/dist/services/scaffold.js +4 -0
- package/dist/services/scaffold.js.map +1 -1
- package/dist/services/syncEngine.js +91 -42
- package/dist/services/syncEngine.js.map +1 -1
- package/dist/types.d.ts +11 -0
- package/dist/types.js.map +1 -1
- package/dist/ui/report.d.ts +7 -0
- package/dist/ui/report.js +8 -0
- package/dist/ui/report.js.map +1 -1
- package/package.json +3 -3
- package/templates/claude/CLAUDE.md +7 -0
- package/templates/claude/mapples.md +118 -0
- package/templates/claude/mcp.json +11 -0
- package/templates/claude/skills/mapples-conventions/SKILL.md +136 -0
- package/templates/claude/skills/mapples-design/SKILL.md +218 -0
- package/templates/claude/skills/mapples-design/reference/component-library.md +128 -0
- package/templates/claude/skills/mapples-design/reference/design-tokens.md +132 -0
- package/templates/claude/skills/mapples-design/reference/layout-contract.md +227 -0
- package/templates/claude/skills/mapples-design/reference/lint-checklist.md +51 -0
- package/templates/claude/skills/mapples-design/reference/plan.md +95 -0
- package/templates/claude/skills/mapples-design/reference/playbooks/empty-states.md +14 -0
- package/templates/claude/skills/mapples-design/reference/playbooks/forms-and-auth.md +22 -0
- package/templates/claude/skills/mapples-design/reference/playbooks/home-dashboard.md +14 -0
- package/templates/claude/skills/mapples-design/reference/playbooks/list-and-detail.md +18 -0
- package/templates/claude/skills/mapples-design/reference/playbooks/microcopy.md +20 -0
- package/templates/claude/skills/mapples-design/reference/playbooks/navigation-chrome.md +21 -0
- package/templates/claude/skills/mapples-design/reference/playbooks/onboarding-flow.md +15 -0
- package/templates/claude/skills/mapples-design/reference/playbooks/screen-flow-wiring.md +37 -0
- package/templates/claude/skills/mapples-design/reference/playbooks/settings-profile.md +16 -0
- package/templates/claude/skills/mapples-design/reference/playbooks/stats-and-progress.md +17 -0
- package/templates/claude/skills/mapples-design/reference/playbooks/visual-hierarchy.md +18 -0
- package/templates/claude/skills/mapples-design/reference/style-guides.md +92 -0
- package/templates/claude/skills/mapples-sync/SKILL.md +92 -0
- package/templates/gitignore +2 -0
- package/templates/package.json +1 -0
package/README.md
CHANGED
|
@@ -12,6 +12,8 @@ npx mapples sync # pull + push in one r
|
|
|
12
12
|
npx mapples sync --yes # …accepting every adoption proposal
|
|
13
13
|
npx mapples adopt app/settings.tsx # adopt a plain RN screen, no prompt
|
|
14
14
|
npx mapples doctor # $sid lint + drift check
|
|
15
|
+
npx mapples create my-app --secret <secret> --agent claude # …plus the Claude Code bundle
|
|
16
|
+
npx mapples agent install # add the bundle to a linked app
|
|
15
17
|
```
|
|
16
18
|
|
|
17
19
|
The project API secret comes from Creator (Project → Settings). It identifies the project and
|
|
@@ -73,6 +75,45 @@ Every lossy step is reported: expression props keep their last-known canvas valu
|
|
|
73
75
|
(`NON_LITERAL_PROP`), props a component instance cannot carry stay in code only, and so on.
|
|
74
76
|
Nothing is dropped silently.
|
|
75
77
|
|
|
78
|
+
## Run in agent (Claude Code)
|
|
79
|
+
|
|
80
|
+
`--agent claude` on `create`/`init` (or `mapples agent install` in a linked app) sets the app
|
|
81
|
+
up for your local Claude Code: project-local skills under `.claude/skills/` — `/mapples-design`
|
|
82
|
+
builds the app from a product brief the way the Creator's AI does (style guides → design
|
|
83
|
+
tokens in `mapples/theme.ts` → implementation plan → one screen per phase from the design
|
|
84
|
+
playbooks → wiring → review), `mapples-conventions` teaches how Mapples files are written and
|
|
85
|
+
`mapples-sync` how to run and read a sync — plus `.claude/mapples.md` (pointed at from
|
|
86
|
+
`CLAUDE.md`) and a read-only `mapples` MCP entry in `.mcp.json`. Then:
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
cd my-app && MAPPLES_SECRET=$(cat .mapples/secret) claude
|
|
90
|
+
# type /mapples-design and describe your app
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
Every write still goes through `mapples sync`; the MCP server only reads. Generated bundle
|
|
94
|
+
files carry a `<!-- GENERATED by Mapples … -->` header and are refreshed by
|
|
95
|
+
`mapples agent install`; a file you edited is left alone (`--force` keeps it as `_depr_…old`
|
|
96
|
+
and regenerates).
|
|
97
|
+
|
|
98
|
+
While a run is in progress the CLI holds the project's **agent-session lease** so Creator shows
|
|
99
|
+
"Claude Code is working on this project", a step log, and locks its own chat:
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
mapples agent start --label "Claude Code" --steps "Brief,Style guides,…" # take the lease (exit 4 if busy; --takeover)
|
|
103
|
+
mapples agent step --index 5 --title "Build the Home screen" --status running # report progress (exit 3 if the lease is gone)
|
|
104
|
+
mapples agent status --json # live session + local state
|
|
105
|
+
mapples agent stop --status done # release (or --status failed --error "…")
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
`start` writes `.mapples/agent.json` (git-ignored) and spawns a detached heartbeat daemon
|
|
109
|
+
(`mapples agent heartbeat --loop`, every `heartbeatSeconds` from the session; `--no-daemon`
|
|
110
|
+
to skip it) because the lease expires 90 s after the last heartbeat. Every `mapples sync` and
|
|
111
|
+
`mapples adopt` inside a session heartbeats too, and their commits are labelled
|
|
112
|
+
`Claude Code: <current step>` in Creator's history. Disconnecting the agent in Creator makes
|
|
113
|
+
the next heartbeat/step exit 3. macOS/Linux daemon semantics in this version.
|
|
114
|
+
|
|
115
|
+
Exit codes: `0` ok · `1` error · `2` sync conflicts · `3` agent lease gone · `4` project busy.
|
|
116
|
+
|
|
76
117
|
## Project state
|
|
77
118
|
|
|
78
119
|
```
|
|
@@ -84,6 +125,7 @@ Nothing is dropped silently.
|
|
|
84
125
|
components.json # componentId <-> file mapping
|
|
85
126
|
base/ # canonical JSON per entity at the last synced HEAD
|
|
86
127
|
outbox/ # parked transactions (offline)
|
|
128
|
+
agent.json # agent-session lease held by this checkout — git-ignored, present during a run
|
|
87
129
|
```
|
|
88
130
|
|
|
89
131
|
`mapples/sid.d.ts` declares the transient JSX attributes (`$sid`, `$refs`, `$data`, `$actions`,
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { type AxiosInstance } from 'axios';
|
|
2
|
+
export type AgentSessionStatus = 'active' | 'done' | 'failed' | 'expired' | 'disconnected';
|
|
3
|
+
export type AgentStepStatus = 'pending' | 'running' | 'done' | 'failed' | 'skipped';
|
|
4
|
+
export interface AgentSessionStep {
|
|
5
|
+
index: number;
|
|
6
|
+
title: string;
|
|
7
|
+
status: AgentStepStatus;
|
|
8
|
+
startedAt?: string | null;
|
|
9
|
+
finishedAt?: string | null;
|
|
10
|
+
detail?: string | null;
|
|
11
|
+
}
|
|
12
|
+
/** The session object every route returns (camelCase, as the backend serializes it). */
|
|
13
|
+
export interface AgentSession {
|
|
14
|
+
uuid: string;
|
|
15
|
+
project: string;
|
|
16
|
+
agent: string;
|
|
17
|
+
label: string | null;
|
|
18
|
+
status: AgentSessionStatus;
|
|
19
|
+
apiKey: {
|
|
20
|
+
uuid: string;
|
|
21
|
+
name: string | null;
|
|
22
|
+
} | null;
|
|
23
|
+
startedAt: string;
|
|
24
|
+
lastHeartbeatAt: string;
|
|
25
|
+
expiresAt: string;
|
|
26
|
+
endedAt: string | null;
|
|
27
|
+
currentStep: string | null;
|
|
28
|
+
steps: AgentSessionStep[];
|
|
29
|
+
error: string | null;
|
|
30
|
+
rev: number;
|
|
31
|
+
heartbeatSeconds: number;
|
|
32
|
+
}
|
|
33
|
+
export interface AgentStartBody {
|
|
34
|
+
agent: 'claude-code';
|
|
35
|
+
label?: string;
|
|
36
|
+
steps?: {
|
|
37
|
+
title: string;
|
|
38
|
+
}[];
|
|
39
|
+
force?: boolean;
|
|
40
|
+
}
|
|
41
|
+
export interface AgentHeartbeatBody {
|
|
42
|
+
step?: {
|
|
43
|
+
index: number;
|
|
44
|
+
title?: string;
|
|
45
|
+
status: AgentStepStatus;
|
|
46
|
+
detail?: string;
|
|
47
|
+
};
|
|
48
|
+
currentStep?: string;
|
|
49
|
+
}
|
|
50
|
+
export interface AgentReleaseBody {
|
|
51
|
+
status: 'done' | 'failed';
|
|
52
|
+
error?: string;
|
|
53
|
+
}
|
|
54
|
+
export type AgentSessionErrorCode = 'SESSION_ACTIVE' | 'SESSION_GONE' | 'NOT_OWNER' | 'FORBIDDEN' | 'UNEXPECTED';
|
|
55
|
+
export declare class AgentSessionError extends Error {
|
|
56
|
+
readonly code: AgentSessionErrorCode;
|
|
57
|
+
readonly http: number;
|
|
58
|
+
readonly body: unknown;
|
|
59
|
+
/** The live session that refused a start (409 AGENT_SESSION_ACTIVE). */
|
|
60
|
+
readonly session: AgentSession | null;
|
|
61
|
+
constructor(code: AgentSessionErrorCode, http: number, message: string, body: unknown);
|
|
62
|
+
}
|
|
63
|
+
/** Maps a non-success response to the typed error (never returns for 2xx). */
|
|
64
|
+
export declare function agentErrorFromResponse(status: number, body: unknown): AgentSessionError;
|
|
65
|
+
export interface AgentSessionClientOptions {
|
|
66
|
+
baseUrl: string;
|
|
67
|
+
projectId: string;
|
|
68
|
+
/** Project API key (write-scoped for start/heartbeat/release). */
|
|
69
|
+
token?: string;
|
|
70
|
+
}
|
|
71
|
+
export declare class AgentSessionClient {
|
|
72
|
+
readonly http: AxiosInstance;
|
|
73
|
+
readonly projectId: string;
|
|
74
|
+
constructor(opts: AgentSessionClientOptions);
|
|
75
|
+
private path;
|
|
76
|
+
/** POST …/agent-session → 201 session, 409 AGENT_SESSION_ACTIVE (SESSION_ACTIVE carries the live one). */
|
|
77
|
+
start(body: AgentStartBody): Promise<AgentSession>;
|
|
78
|
+
/** POST …/agent-session/{uuid}/heartbeat → 200 session, 409 SESSION_NOT_ACTIVE, 403, 404. */
|
|
79
|
+
heartbeat(uuid: string, body?: AgentHeartbeatBody): Promise<AgentSession>;
|
|
80
|
+
/** POST …/agent-session/{uuid}/release → 200 session (idempotent on terminal sessions). */
|
|
81
|
+
release(uuid: string, body: AgentReleaseBody): Promise<AgentSession>;
|
|
82
|
+
/** GET …/agent-session → {session: live | recently ended | null}. */
|
|
83
|
+
current(): Promise<AgentSession | null>;
|
|
84
|
+
}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
// Agent-session lease client (service--mapplesorg `api/agent`): one live
|
|
2
|
+
// lease per project, kept alive by heartbeats, with a step log the Creator
|
|
3
|
+
// renders while the agent works. Same transport discipline as JpatchClient:
|
|
4
|
+
// X-API-Key auth, statuses mapped here, nothing retried at this layer.
|
|
5
|
+
import axios from 'axios';
|
|
6
|
+
export class AgentSessionError extends Error {
|
|
7
|
+
code;
|
|
8
|
+
http;
|
|
9
|
+
body;
|
|
10
|
+
/** The live session that refused a start (409 AGENT_SESSION_ACTIVE). */
|
|
11
|
+
session;
|
|
12
|
+
constructor(code, http, message, body) {
|
|
13
|
+
super(message);
|
|
14
|
+
this.name = 'AgentSessionError';
|
|
15
|
+
this.code = code;
|
|
16
|
+
this.http = http;
|
|
17
|
+
this.body = body;
|
|
18
|
+
const session = typeof body === 'object' && body !== null
|
|
19
|
+
? body.session
|
|
20
|
+
: undefined;
|
|
21
|
+
this.session = code === 'SESSION_ACTIVE' && session ? session : null;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
function bodyField(body, key) {
|
|
25
|
+
return typeof body === 'object' && body !== null
|
|
26
|
+
? body[key]
|
|
27
|
+
: undefined;
|
|
28
|
+
}
|
|
29
|
+
/** Maps a non-success response to the typed error (never returns for 2xx). */
|
|
30
|
+
export function agentErrorFromResponse(status, body) {
|
|
31
|
+
const code = bodyField(body, 'code');
|
|
32
|
+
const detail = bodyField(body, 'detail');
|
|
33
|
+
const message = typeof detail === 'string' ? detail : typeof code === 'string' ? code : `HTTP ${status}`;
|
|
34
|
+
if (status === 409 && code === 'AGENT_SESSION_ACTIVE') {
|
|
35
|
+
return new AgentSessionError('SESSION_ACTIVE', status, message, body);
|
|
36
|
+
}
|
|
37
|
+
if ((status === 409 && code === 'SESSION_NOT_ACTIVE') || status === 404) {
|
|
38
|
+
return new AgentSessionError('SESSION_GONE', status, message, body);
|
|
39
|
+
}
|
|
40
|
+
if (status === 403 && code === 'NOT_SESSION_OWNER') {
|
|
41
|
+
return new AgentSessionError('NOT_OWNER', status, message, body);
|
|
42
|
+
}
|
|
43
|
+
if (status === 403 || status === 401) {
|
|
44
|
+
return new AgentSessionError('FORBIDDEN', status, message, body);
|
|
45
|
+
}
|
|
46
|
+
return new AgentSessionError('UNEXPECTED', status, `unexpected response (HTTP ${status}): ${JSON.stringify(body)}`, body);
|
|
47
|
+
}
|
|
48
|
+
export class AgentSessionClient {
|
|
49
|
+
http;
|
|
50
|
+
projectId;
|
|
51
|
+
constructor(opts) {
|
|
52
|
+
this.projectId = opts.projectId;
|
|
53
|
+
this.http = axios.create({
|
|
54
|
+
baseURL: opts.baseUrl.replace(/\/+$/, ''),
|
|
55
|
+
headers: opts.token ? { 'X-API-Key': opts.token } : {},
|
|
56
|
+
validateStatus: () => true,
|
|
57
|
+
timeout: 15_000,
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
path(suffix = '') {
|
|
61
|
+
return `/projects/${this.projectId}/agent-session${suffix}`;
|
|
62
|
+
}
|
|
63
|
+
/** POST …/agent-session → 201 session, 409 AGENT_SESSION_ACTIVE (SESSION_ACTIVE carries the live one). */
|
|
64
|
+
async start(body) {
|
|
65
|
+
const res = await this.http.post(this.path(), body);
|
|
66
|
+
if (res.status === 201 || res.status === 200)
|
|
67
|
+
return res.data;
|
|
68
|
+
throw agentErrorFromResponse(res.status, res.data);
|
|
69
|
+
}
|
|
70
|
+
/** POST …/agent-session/{uuid}/heartbeat → 200 session, 409 SESSION_NOT_ACTIVE, 403, 404. */
|
|
71
|
+
async heartbeat(uuid, body = {}) {
|
|
72
|
+
const res = await this.http.post(this.path(`/${encodeURIComponent(uuid)}/heartbeat`), body);
|
|
73
|
+
if (res.status === 200)
|
|
74
|
+
return res.data;
|
|
75
|
+
throw agentErrorFromResponse(res.status, res.data);
|
|
76
|
+
}
|
|
77
|
+
/** POST …/agent-session/{uuid}/release → 200 session (idempotent on terminal sessions). */
|
|
78
|
+
async release(uuid, body) {
|
|
79
|
+
const res = await this.http.post(this.path(`/${encodeURIComponent(uuid)}/release`), body);
|
|
80
|
+
if (res.status === 200)
|
|
81
|
+
return res.data;
|
|
82
|
+
throw agentErrorFromResponse(res.status, res.data);
|
|
83
|
+
}
|
|
84
|
+
/** GET …/agent-session → {session: live | recently ended | null}. */
|
|
85
|
+
async current() {
|
|
86
|
+
const res = await this.http.get(this.path());
|
|
87
|
+
if (res.status === 200)
|
|
88
|
+
return res.data.session;
|
|
89
|
+
throw agentErrorFromResponse(res.status, res.data);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/api/agent.ts"],"names":[],"mappings":"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"}
|
package/dist/api/client.d.ts
CHANGED
|
@@ -9,6 +9,8 @@ export interface JpatchClientOptions {
|
|
|
9
9
|
origin?: string;
|
|
10
10
|
/** Host serving asset bodies (per-stage assets host); defaults to baseUrl. */
|
|
11
11
|
assetsBaseUrl?: string;
|
|
12
|
+
/** Commit summary for every envelope this client sends (`meta.summary`), e.g. the agent step. */
|
|
13
|
+
summary?: string;
|
|
12
14
|
}
|
|
13
15
|
/**
|
|
14
16
|
* Thin, faithful JPATCH/1 transport (RFC-0001 §5–§8). No retry logic here —
|
|
@@ -19,6 +21,7 @@ export declare class JpatchClient {
|
|
|
19
21
|
readonly projectId: string;
|
|
20
22
|
readonly actor: string | undefined;
|
|
21
23
|
readonly origin: string | undefined;
|
|
24
|
+
readonly summary: string | undefined;
|
|
22
25
|
readonly assetsBaseUrl: string;
|
|
23
26
|
constructor(opts: JpatchClientOptions);
|
|
24
27
|
private path;
|
package/dist/api/client.js
CHANGED
|
@@ -9,11 +9,13 @@ export class JpatchClient {
|
|
|
9
9
|
projectId;
|
|
10
10
|
actor;
|
|
11
11
|
origin;
|
|
12
|
+
summary;
|
|
12
13
|
assetsBaseUrl;
|
|
13
14
|
constructor(opts) {
|
|
14
15
|
this.projectId = opts.projectId;
|
|
15
16
|
this.actor = opts.actor;
|
|
16
17
|
this.origin = opts.origin;
|
|
18
|
+
this.summary = opts.summary;
|
|
17
19
|
this.assetsBaseUrl = (opts.assetsBaseUrl ?? opts.baseUrl).replace(/\/+$/, '');
|
|
18
20
|
this.http = axios.create({
|
|
19
21
|
baseURL: opts.baseUrl.replace(/\/+$/, ''),
|
package/dist/api/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,UAAU,EAAsB,MAAM,OAAO,CAAC;AAG9D,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"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"}
|
package/dist/api/commit.js
CHANGED
|
@@ -44,6 +44,7 @@ export function buildEnvelope(client, params) {
|
|
|
44
44
|
meta: {
|
|
45
45
|
...(client.actor ? { actor: client.actor } : {}),
|
|
46
46
|
...(client.origin ? { origin: client.origin } : {}),
|
|
47
|
+
...(client.summary ? { summary: client.summary } : {}),
|
|
47
48
|
ts: new Date().toISOString(),
|
|
48
49
|
},
|
|
49
50
|
};
|
package/dist/api/commit.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commit.js","sourceRoot":"","sources":["../../src/api/commit.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"commit.js","sourceRoot":"","sources":["../../src/api/commit.ts"],"names":[],"mappings":"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"}
|
package/dist/api/objects.d.ts
CHANGED
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
import { type Bootstrap, type RenderDomNode, type SourceEntity } from '../types.js';
|
|
2
2
|
import type { JpatchClient } from './client.js';
|
|
3
|
+
/**
|
|
4
|
+
* A container's render states by key — what a node's `style::<key>` variant
|
|
5
|
+
* renders under (RFC-0001 §4.1 `state`). The file owns the states its prop
|
|
6
|
+
* tests declare (`props.*` conditions); the Creator owns the rest.
|
|
7
|
+
*/
|
|
8
|
+
export type EntityStates = Record<string, {
|
|
9
|
+
name: string;
|
|
10
|
+
condition: string;
|
|
11
|
+
id?: string;
|
|
12
|
+
}>;
|
|
3
13
|
export interface PageEntity {
|
|
4
14
|
id: string;
|
|
5
15
|
name: string;
|
|
@@ -7,6 +17,7 @@ export interface PageEntity {
|
|
|
7
17
|
root: RenderDomNode;
|
|
8
18
|
/** Creator page uuid — navigator route targets reference pages by this. */
|
|
9
19
|
uuid?: string;
|
|
20
|
+
state?: EntityStates;
|
|
10
21
|
}
|
|
11
22
|
export interface ComponentEntity {
|
|
12
23
|
id: string;
|
|
@@ -14,6 +25,7 @@ export interface ComponentEntity {
|
|
|
14
25
|
root: RenderDomNode;
|
|
15
26
|
/** Creator component uuid — a page's `ComponentInstance` nodes link to it. */
|
|
16
27
|
uuid?: string;
|
|
28
|
+
state?: EntityStates;
|
|
17
29
|
}
|
|
18
30
|
export interface NavigationDocument {
|
|
19
31
|
/** Legacy/CLI route list. The real backend serves a navigator document
|
package/dist/api/objects.js
CHANGED
|
@@ -133,6 +133,7 @@ export async function fetchProjectState(client, boot) {
|
|
|
133
133
|
route: blob.route ?? deriveRoute(blob.name),
|
|
134
134
|
root: await materializeTree(client, blob.root),
|
|
135
135
|
...(blob.uuid ? { uuid: blob.uuid } : {}),
|
|
136
|
+
...(blob.state ? { state: blob.state } : {}),
|
|
136
137
|
});
|
|
137
138
|
}
|
|
138
139
|
const componentBlobs = await fetchObjects(client, Object.values(componentsIndex));
|
|
@@ -144,6 +145,7 @@ export async function fetchProjectState(client, boot) {
|
|
|
144
145
|
name: blob.name,
|
|
145
146
|
root: await materializeTree(client, blob.root),
|
|
146
147
|
...(blob.uuid ? { uuid: blob.uuid } : {}),
|
|
148
|
+
...(blob.state ? { state: blob.state } : {}),
|
|
147
149
|
});
|
|
148
150
|
}
|
|
149
151
|
const style = {
|
package/dist/api/objects.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"objects.js","sourceRoot":"","sources":["../../src/api/objects.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EACL,SAAS,GAKV,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"objects.js","sourceRoot":"","sources":["../../src/api/objects.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { JpatchOp } from '../types.js';
|
|
2
|
+
export declare const MAX_OPS_PER_TX = 200;
|
|
3
|
+
/** A placement group larger than one transaction: the push stops, nothing is sent. */
|
|
4
|
+
export declare class PushGroupTooLargeError extends Error {
|
|
5
|
+
readonly size: number;
|
|
6
|
+
readonly limit: number;
|
|
7
|
+
readonly sample: JpatchOp[];
|
|
8
|
+
constructor(size: number, limit: number, sample: JpatchOp[]);
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Plan `ops` as sequential transactions, each at most `limit` ops. Flattening
|
|
12
|
+
* the result gives the order the ops are sent in; a caller that tracks how
|
|
13
|
+
* many ops committed must count against that flattened order.
|
|
14
|
+
*/
|
|
15
|
+
export declare function planTransactions(ops: JpatchOp[], limit?: number): JpatchOp[][];
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
// Splitting a push into transactions of at most MAX_OPS_PER_TX ops without
|
|
2
|
+
// losing nodes (RFC-0001 §5.2, rev. 2026-09-15). The server serializes only
|
|
3
|
+
// what the manifest reaches when a transaction ends, so a create that is not
|
|
4
|
+
// placed in its own transaction is gone. A split therefore:
|
|
5
|
+
// - keeps an unplaced create and the op that places it (a children
|
|
6
|
+
// directive or a Page/Component root) in one transaction;
|
|
7
|
+
// - never sends an op before the create that mints a cid it references
|
|
8
|
+
// (cids resolve through earlier transactions' idMaps);
|
|
9
|
+
// - keeps the relative order of ops aimed at the same target;
|
|
10
|
+
// - refuses, rather than sends, a group that cannot fit one transaction.
|
|
11
|
+
export const MAX_OPS_PER_TX = 200;
|
|
12
|
+
/** A placement group larger than one transaction: the push stops, nothing is sent. */
|
|
13
|
+
export class PushGroupTooLargeError extends Error {
|
|
14
|
+
size;
|
|
15
|
+
limit;
|
|
16
|
+
sample;
|
|
17
|
+
constructor(size, limit, sample) {
|
|
18
|
+
super(`a new element and everything that must land with it is ${size} ops, over the ${limit}-op transaction limit — nothing was pushed. ` +
|
|
19
|
+
'Sync the change in smaller steps (e.g. add the container first, then its children).');
|
|
20
|
+
this.size = size;
|
|
21
|
+
this.limit = limit;
|
|
22
|
+
this.sample = sample;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
function cidsIn(value, out) {
|
|
26
|
+
if (typeof value === 'string') {
|
|
27
|
+
if (value.startsWith('c_'))
|
|
28
|
+
out.add(value);
|
|
29
|
+
}
|
|
30
|
+
else if (Array.isArray(value)) {
|
|
31
|
+
for (const v of value)
|
|
32
|
+
cidsIn(v, out);
|
|
33
|
+
}
|
|
34
|
+
else if (value !== null && typeof value === 'object') {
|
|
35
|
+
for (const v of Object.values(value))
|
|
36
|
+
cidsIn(v, out);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/** Refs an op links under its target: the op that places them. */
|
|
40
|
+
function placedRefs(op) {
|
|
41
|
+
if (op.op === 'create' && (op.entity === 'Page' || op.entity === 'Component')) {
|
|
42
|
+
const root = op.data?.root;
|
|
43
|
+
return typeof root === 'string' ? [root] : [];
|
|
44
|
+
}
|
|
45
|
+
if (op.op === 'update' && op.children) {
|
|
46
|
+
return [...(op.children.insert ?? []).map((i) => i.ref), ...(op.children.set ?? [])];
|
|
47
|
+
}
|
|
48
|
+
return [];
|
|
49
|
+
}
|
|
50
|
+
/** The entity whose state an op's position matters for. */
|
|
51
|
+
function orderKey(op) {
|
|
52
|
+
if (op.op === 'create') {
|
|
53
|
+
const parent = op.data?.parent;
|
|
54
|
+
return typeof parent === 'string' ? parent : undefined;
|
|
55
|
+
}
|
|
56
|
+
return op.id;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Plan `ops` as sequential transactions, each at most `limit` ops. Flattening
|
|
60
|
+
* the result gives the order the ops are sent in; a caller that tracks how
|
|
61
|
+
* many ops committed must count against that flattened order.
|
|
62
|
+
*/
|
|
63
|
+
export function planTransactions(ops, limit = MAX_OPS_PER_TX) {
|
|
64
|
+
if (ops.length <= limit)
|
|
65
|
+
return ops.length === 0 ? [] : [ops];
|
|
66
|
+
const n = ops.length;
|
|
67
|
+
// Union-find: an unplaced RenderNode create joins the op that places it.
|
|
68
|
+
const group = Array.from({ length: n }, (_, i) => i);
|
|
69
|
+
const find = (i) => {
|
|
70
|
+
while (group[i] !== i) {
|
|
71
|
+
group[i] = group[group[i]];
|
|
72
|
+
i = group[i];
|
|
73
|
+
}
|
|
74
|
+
return i;
|
|
75
|
+
};
|
|
76
|
+
const union = (a, b) => {
|
|
77
|
+
group[find(a)] = find(b);
|
|
78
|
+
};
|
|
79
|
+
const minter = new Map();
|
|
80
|
+
const unplaced = new Set();
|
|
81
|
+
const deps = Array.from({ length: n }, () => []);
|
|
82
|
+
const lastByKey = new Map();
|
|
83
|
+
ops.forEach((op, i) => {
|
|
84
|
+
const refs = new Set();
|
|
85
|
+
cidsIn({ ...op, cid: undefined }, refs);
|
|
86
|
+
for (const cid of refs) {
|
|
87
|
+
const m = minter.get(cid);
|
|
88
|
+
if (m !== undefined)
|
|
89
|
+
deps[i].push(m);
|
|
90
|
+
}
|
|
91
|
+
for (const ref of placedRefs(op)) {
|
|
92
|
+
const m = minter.get(ref);
|
|
93
|
+
if (m !== undefined && unplaced.delete(ref))
|
|
94
|
+
union(i, m);
|
|
95
|
+
}
|
|
96
|
+
const key = orderKey(op);
|
|
97
|
+
if (key !== undefined) {
|
|
98
|
+
const prev = lastByKey.get(key);
|
|
99
|
+
if (prev !== undefined)
|
|
100
|
+
deps[i].push(prev);
|
|
101
|
+
lastByKey.set(key, i);
|
|
102
|
+
}
|
|
103
|
+
if (op.op === 'create' && op.cid) {
|
|
104
|
+
minter.set(op.cid, i);
|
|
105
|
+
if (op.entity === 'RenderNode' && typeof op.data?.parent !== 'string')
|
|
106
|
+
unplaced.add(op.cid);
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
// Group graph, then merge its cycles (Tarjan) so it becomes a DAG.
|
|
110
|
+
const roots = [...new Set(group.map((_, i) => find(i)))];
|
|
111
|
+
const edges = new Map(roots.map((r) => [r, new Set()]));
|
|
112
|
+
ops.forEach((_, i) => {
|
|
113
|
+
for (const d of deps[i]) {
|
|
114
|
+
const from = find(i);
|
|
115
|
+
const to = find(d);
|
|
116
|
+
if (from !== to)
|
|
117
|
+
edges.get(from).add(to);
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
const component = new Map();
|
|
121
|
+
const indexOf = new Map();
|
|
122
|
+
const low = new Map();
|
|
123
|
+
const stack = [];
|
|
124
|
+
const onStack = new Set();
|
|
125
|
+
let counter = 0;
|
|
126
|
+
const strongConnect = (v) => {
|
|
127
|
+
indexOf.set(v, counter);
|
|
128
|
+
low.set(v, counter);
|
|
129
|
+
counter += 1;
|
|
130
|
+
stack.push(v);
|
|
131
|
+
onStack.add(v);
|
|
132
|
+
for (const w of edges.get(v)) {
|
|
133
|
+
if (!indexOf.has(w)) {
|
|
134
|
+
strongConnect(w);
|
|
135
|
+
low.set(v, Math.min(low.get(v), low.get(w)));
|
|
136
|
+
}
|
|
137
|
+
else if (onStack.has(w)) {
|
|
138
|
+
low.set(v, Math.min(low.get(v), indexOf.get(w)));
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
if (low.get(v) === indexOf.get(v)) {
|
|
142
|
+
for (;;) {
|
|
143
|
+
const w = stack.pop();
|
|
144
|
+
onStack.delete(w);
|
|
145
|
+
component.set(w, v);
|
|
146
|
+
if (w === v)
|
|
147
|
+
break;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
};
|
|
151
|
+
for (const r of roots)
|
|
152
|
+
if (!indexOf.has(r))
|
|
153
|
+
strongConnect(r);
|
|
154
|
+
const members = new Map();
|
|
155
|
+
ops.forEach((_, i) => {
|
|
156
|
+
const c = component.get(find(i));
|
|
157
|
+
const list = members.get(c) ?? [];
|
|
158
|
+
list.push(i);
|
|
159
|
+
members.set(c, list);
|
|
160
|
+
});
|
|
161
|
+
const needs = new Map([...members.keys()].map((c) => [c, new Set()]));
|
|
162
|
+
for (const [from, tos] of edges) {
|
|
163
|
+
for (const to of tos) {
|
|
164
|
+
const a = component.get(from);
|
|
165
|
+
const b = component.get(to);
|
|
166
|
+
if (a !== b)
|
|
167
|
+
needs.get(a).add(b);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
// Kahn's order, earliest first op first: untouched ops keep their order.
|
|
171
|
+
const done = new Set();
|
|
172
|
+
const ordered = [];
|
|
173
|
+
const pending = [...members.entries()].sort((a, b) => a[1][0] - b[1][0]);
|
|
174
|
+
while (ordered.length < pending.length) {
|
|
175
|
+
const next = pending.find(([c]) => !done.has(c) && [...needs.get(c)].every((d) => done.has(d)));
|
|
176
|
+
done.add(next[0]);
|
|
177
|
+
ordered.push(next[1]);
|
|
178
|
+
}
|
|
179
|
+
const txs = [];
|
|
180
|
+
let current = [];
|
|
181
|
+
for (const indices of ordered) {
|
|
182
|
+
if (indices.length > limit) {
|
|
183
|
+
throw new PushGroupTooLargeError(indices.length, limit, indices.slice(0, 3).map((i) => ops[i]));
|
|
184
|
+
}
|
|
185
|
+
if (current.length + indices.length > limit) {
|
|
186
|
+
txs.push(current);
|
|
187
|
+
current = [];
|
|
188
|
+
}
|
|
189
|
+
for (const i of indices)
|
|
190
|
+
current.push(ops[i]);
|
|
191
|
+
}
|
|
192
|
+
if (current.length > 0)
|
|
193
|
+
txs.push(current);
|
|
194
|
+
return txs;
|
|
195
|
+
}
|
|
196
|
+
//# sourceMappingURL=txPlan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"txPlan.js","sourceRoot":"","sources":["../../src/api/txPlan.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,4EAA4E;AAC5E,6EAA6E;AAC7E,4DAA4D;AAC5D,qEAAqE;AACrE,8DAA8D;AAC9D,yEAAyE;AACzE,2DAA2D;AAC3D,gEAAgE;AAChE,2EAA2E;AAI3E,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,CAAC;AAElC,sFAAsF;AACtF,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IAEpC;IACA;IACA;IAHX,YACW,IAAY,EACZ,KAAa,EACb,MAAkB;QAE3B,KAAK,CACH,0DAA0D,IAAI,kBAAkB,KAAK,8CAA8C;YACjI,qFAAqF,CACxF,CAAC;QAPO,SAAI,GAAJ,IAAI,CAAQ;QACZ,UAAK,GAAL,KAAK,CAAQ;QACb,WAAM,GAAN,MAAM,CAAY;IAM7B,CAAC;CACF;AAED,SAAS,MAAM,CAAC,KAAc,EAAE,GAAgB;IAC9C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC7C,CAAC;SAAM,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAChC,KAAK,MAAM,CAAC,IAAI,KAAK;YAAE,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACxC,CAAC;SAAM,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvD,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;YAAE,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACvD,CAAC;AACH,CAAC;AAED,kEAAkE;AAClE,SAAS,UAAU,CAAC,EAAY;IAC9B,IAAI,EAAE,CAAC,EAAE,KAAK,QAAQ,IAAI,CAAC,EAAE,CAAC,MAAM,KAAK,MAAM,IAAI,EAAE,CAAC,MAAM,KAAK,WAAW,CAAC,EAAE,CAAC;QAC9E,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;QAC3B,OAAO,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAChD,CAAC;IACD,IAAI,EAAE,CAAC,EAAE,KAAK,QAAQ,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;IACvF,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,2DAA2D;AAC3D,SAAS,QAAQ,CAAC,EAAY;IAC5B,IAAI,EAAE,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC;QAC/B,OAAO,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IACzD,CAAC;IACD,OAAO,EAAE,CAAC,EAAE,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAe,EAAE,KAAK,GAAG,cAAc;IACtE,IAAI,GAAG,CAAC,MAAM,IAAI,KAAK;QAAE,OAAO,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC9D,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC;IAErB,yEAAyE;IACzE,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IACrD,MAAM,IAAI,GAAG,CAAC,CAAS,EAAU,EAAE;QACjC,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;YACtB,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAE,CAAE,CAAC;YAC7B,CAAC,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;QAChB,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC,CAAC;IACF,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,CAAS,EAAQ,EAAE;QAC3C,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC,CAAC;IAEF,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IACnC,MAAM,IAAI,GAAe,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IAC7D,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE5C,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;QACpB,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,MAAM,CAAC,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,IAAI,CAAC,CAAC;QACxC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC1B,IAAI,CAAC,KAAK,SAAS;gBAAE,IAAI,CAAC,CAAC,CAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACxC,CAAC;QACD,KAAK,MAAM,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC;YACjC,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC1B,IAAI,CAAC,KAAK,SAAS,IAAI,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC;gBAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3D,CAAC;QACD,MAAM,GAAG,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;QACzB,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAChC,IAAI,IAAI,KAAK,SAAS;gBAAE,IAAI,CAAC,CAAC,CAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5C,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACxB,CAAC;QACD,IAAI,EAAE,CAAC,EAAE,KAAK,QAAQ,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC;YACjC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACtB,IAAI,EAAE,CAAC,MAAM,KAAK,YAAY,IAAI,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,QAAQ;gBAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;QAC9F,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,mEAAmE;IACnE,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACzD,MAAM,KAAK,GAAG,IAAI,GAAG,CAAsB,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7E,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACnB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,CAAE,EAAE,CAAC;YACzB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACrB,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACnB,IAAI,IAAI,KAAK,EAAE;gBAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC5C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC1C,MAAM,GAAG,GAAG,IAAI,GAAG,EAAkB,CAAC;IACtC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,MAAM,aAAa,GAAG,CAAC,CAAS,EAAQ,EAAE;QACxC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QACxB,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QACpB,OAAO,IAAI,CAAC,CAAC;QACb,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACf,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAE,EAAE,CAAC;YAC9B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpB,aAAa,CAAC,CAAC,CAAC,CAAC;gBACjB,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAE,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC;YACjD,CAAC;iBAAM,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1B,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAE,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC;YACrD,CAAC;QACH,CAAC;QACD,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAClC,SAAS,CAAC;gBACR,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,EAAG,CAAC;gBACvB,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBAClB,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,KAAK,CAAC;oBAAE,MAAM;YACrB,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,KAAK;QAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;YAAE,aAAa,CAAC,CAAC,CAAC,CAAC;IAE7D,MAAM,OAAO,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC5C,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACnB,MAAM,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAE,CAAC;QAClC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAClC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,IAAI,GAAG,CAAsB,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IAC3F,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,KAAK,EAAE,CAAC;QAChC,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;YACrB,MAAM,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC;YAC/B,MAAM,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE,CAAE,CAAC;YAC7B,IAAI,CAAC,KAAK,CAAC;gBAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAED,yEAAyE;IACzE,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,OAAO,GAAe,EAAE,CAAC;IAC/B,MAAM,OAAO,GAAG,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC;IAC3E,OAAO,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CACvB,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CACrE,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAClB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC;IAED,MAAM,GAAG,GAAiB,EAAE,CAAC;IAC7B,IAAI,OAAO,GAAe,EAAE,CAAC;IAC7B,KAAK,MAAM,OAAO,IAAI,OAAO,EAAE,CAAC;QAC9B,IAAI,OAAO,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;YAC3B,MAAM,IAAI,sBAAsB,CAC9B,OAAO,CAAC,MAAM,EACd,KAAK,EACL,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,CACxC,CAAC;QACJ,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;YAC5C,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAClB,OAAO,GAAG,EAAE,CAAC;QACf,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,OAAO;YAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,CAAC;IACjD,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;QAAE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC1C,OAAO,GAAG,CAAC;AACb,CAAC"}
|