mapples 0.2.0-beta.0 → 0.2.0-beta.10
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 +133 -22
- package/dist/adopt/scan.d.ts +8 -2
- package/dist/adopt/scan.js +31 -13
- package/dist/adopt/scan.js.map +1 -1
- package/dist/api/agent.d.ts +85 -0
- package/dist/api/agent.js +92 -0
- package/dist/api/agent.js.map +1 -0
- package/dist/api/auth.d.ts +2 -0
- package/dist/api/auth.js +28 -6
- package/dist/api/auth.js.map +1 -1
- package/dist/api/client.d.ts +13 -1
- package/dist/api/client.js +26 -4
- package/dist/api/client.js.map +1 -1
- package/dist/api/commit.d.ts +9 -0
- package/dist/api/commit.js +36 -0
- package/dist/api/commit.js.map +1 -1
- package/dist/api/errors.js +12 -2
- package/dist/api/errors.js.map +1 -1
- package/dist/api/objects.d.ts +36 -5
- package/dist/api/objects.js +176 -10
- package/dist/api/objects.js.map +1 -1
- package/dist/api/poll.d.ts +5 -3
- package/dist/api/poll.js +17 -6
- package/dist/api/poll.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/assets/assets.d.ts +9 -0
- package/dist/assets/assets.js +33 -4
- package/dist/assets/assets.js.map +1 -1
- package/dist/codegen/emit.d.ts +4 -7
- package/dist/codegen/emit.js +10 -29
- package/dist/codegen/emit.js.map +1 -1
- package/dist/codegen/imports.d.ts +8 -15
- package/dist/codegen/imports.js +27 -72
- package/dist/codegen/imports.js.map +1 -1
- package/dist/codegen/instances.d.ts +5 -0
- package/dist/codegen/instances.js +30 -0
- package/dist/codegen/instances.js.map +1 -0
- package/dist/codegen/styles.d.ts +1 -0
- package/dist/codegen/styles.js +3 -0
- package/dist/codegen/styles.js.map +1 -0
- package/dist/commands/agent.d.ts +2 -0
- package/dist/commands/agent.js +87 -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 +23 -0
- package/dist/commands/impl/agentImpl.js +426 -0
- package/dist/commands/impl/agentImpl.js.map +1 -0
- package/dist/commands/impl/createImpl.js +31 -4
- package/dist/commands/impl/createImpl.js.map +1 -1
- package/dist/commands/impl/initImpl.js +28 -4
- package/dist/commands/impl/initImpl.js.map +1 -1
- package/dist/commands/impl/syncImpl.js +30 -5
- 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 +5 -2
- package/dist/merge/applyOps.js +75 -32
- 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/merge/diff.d.ts +20 -1
- package/dist/merge/diff.js +77 -17
- package/dist/merge/diff.js.map +1 -1
- package/dist/merge/threeWay.d.ts +2 -2
- package/dist/merge/threeWay.js +74 -10
- package/dist/merge/threeWay.js.map +1 -1
- package/dist/merge/toEdits.d.ts +1 -3
- package/dist/merge/toEdits.js +3 -91
- package/dist/merge/toEdits.js.map +1 -1
- package/dist/nav/navigatorTree.d.ts +78 -0
- package/dist/nav/navigatorTree.js +410 -0
- package/dist/nav/navigatorTree.js.map +1 -0
- package/dist/nav/placement.d.ts +53 -0
- package/dist/nav/placement.js +260 -0
- package/dist/nav/placement.js.map +1 -0
- package/dist/nav/routeTree.d.ts +8 -2
- package/dist/nav/routeTree.js +79 -151
- package/dist/nav/routeTree.js.map +1 -1
- package/dist/nav/screenOptions.d.ts +15 -0
- package/dist/nav/screenOptions.js +213 -0
- package/dist/nav/screenOptions.js.map +1 -0
- package/dist/project/agentState.d.ts +30 -0
- package/dist/project/agentState.js +42 -0
- package/dist/project/agentState.js.map +1 -0
- package/dist/project/baseStore.d.ts +19 -1
- package/dist/project/baseStore.js +28 -0
- package/dist/project/baseStore.js.map +1 -1
- package/dist/project/componentsMap.d.ts +7 -0
- package/dist/project/componentsMap.js +21 -0
- package/dist/project/componentsMap.js.map +1 -0
- package/dist/project/config.d.ts +12 -3
- package/dist/project/config.js +11 -2
- package/dist/project/config.js.map +1 -1
- package/dist/project/env.d.ts +10 -3
- package/dist/project/env.js +23 -5
- package/dist/project/env.js.map +1 -1
- package/dist/project/pagesMap.d.ts +2 -0
- package/dist/project/pagesMap.js.map +1 -1
- 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.d.ts +3 -0
- package/dist/services/adoptService.js +357 -38
- package/dist/services/adoptService.js.map +1 -1
- package/dist/services/agentInstall.d.ts +80 -0
- package/dist/services/agentInstall.js +309 -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 +20 -3
- package/dist/services/clientFactory.js.map +1 -1
- package/dist/services/doctorService.js +77 -66
- package/dist/services/doctorService.js.map +1 -1
- package/dist/services/scaffold.js +4 -0
- package/dist/services/scaffold.js.map +1 -1
- package/dist/services/syncEngine.d.ts +7 -0
- package/dist/services/syncEngine.js +719 -306
- package/dist/services/syncEngine.js.map +1 -1
- package/dist/style/theme.js +17 -1
- package/dist/style/theme.js.map +1 -1
- package/dist/types.d.ts +51 -2
- package/dist/types.js +25 -0
- package/dist/types.js.map +1 -1
- package/dist/ui/report.d.ts +15 -0
- package/dist/ui/report.js +30 -0
- package/dist/ui/report.js.map +1 -1
- package/package.json +3 -2
- package/templates/agent/agents-md/AGENTS.md +8 -0
- package/templates/agent/claude/CLAUDE.md +7 -0
- package/templates/agent/claude/mcp.json +11 -0
- package/templates/agent/claude/settings.json +26 -0
- package/templates/agent/codex/config.toml +6 -0
- package/templates/agent/codex/hooks.json +26 -0
- package/templates/agent/cursor/hooks.json +9 -0
- package/templates/agent/cursor/mcp.json +10 -0
- package/templates/agent/mapples.md +124 -0
- package/templates/agent/skills/mapples-conventions/SKILL.md +137 -0
- package/templates/agent/skills/mapples-design/SKILL.md +235 -0
- package/templates/agent/skills/mapples-design/reference/component-library.md +128 -0
- package/templates/agent/skills/mapples-design/reference/design-tokens.md +132 -0
- package/templates/agent/skills/mapples-design/reference/layout-contract.md +227 -0
- package/templates/agent/skills/mapples-design/reference/lint-checklist.md +51 -0
- package/templates/agent/skills/mapples-design/reference/plan.md +95 -0
- package/templates/agent/skills/mapples-design/reference/playbooks/empty-states.md +14 -0
- package/templates/agent/skills/mapples-design/reference/playbooks/forms-and-auth.md +22 -0
- package/templates/agent/skills/mapples-design/reference/playbooks/home-dashboard.md +14 -0
- package/templates/agent/skills/mapples-design/reference/playbooks/list-and-detail.md +18 -0
- package/templates/agent/skills/mapples-design/reference/playbooks/microcopy.md +20 -0
- package/templates/agent/skills/mapples-design/reference/playbooks/navigation-chrome.md +21 -0
- package/templates/agent/skills/mapples-design/reference/playbooks/onboarding-flow.md +15 -0
- package/templates/agent/skills/mapples-design/reference/playbooks/screen-flow-wiring.md +37 -0
- package/templates/agent/skills/mapples-design/reference/playbooks/settings-profile.md +16 -0
- package/templates/agent/skills/mapples-design/reference/playbooks/stats-and-progress.md +17 -0
- package/templates/agent/skills/mapples-design/reference/playbooks/visual-hierarchy.md +18 -0
- package/templates/agent/skills/mapples-design/reference/style-guides.md +92 -0
- package/templates/agent/skills/mapples-sync/SKILL.md +93 -0
- package/templates/app/_layout.tsx +3 -0
- package/templates/app.json +0 -1
- package/templates/gitignore +2 -0
- package/templates/mapples/sid.d.ts +6 -0
- package/templates/package.json +12 -10
|
@@ -4,13 +4,15 @@ import chalk from 'chalk';
|
|
|
4
4
|
import prompts from 'prompts';
|
|
5
5
|
import { JpatchClient, isNetworkError } from '../../api/client.js';
|
|
6
6
|
import { resolveProject } from '../../api/auth.js';
|
|
7
|
-
import { writeConfig } from '../../project/config.js';
|
|
8
|
-
import { resolveApiUrl } from '../../project/env.js';
|
|
7
|
+
import { DEFAULT_PAGES_DIR, writeConfig } from '../../project/config.js';
|
|
8
|
+
import { assetUrlFor, resolveApiUrl } from '../../project/env.js';
|
|
9
9
|
import { writeSecret } from '../../project/secret.js';
|
|
10
|
+
import { agentNextSteps, installAgentIntegration, hooksSnippetHeading, mcpSnippetHeading, parseAgentName, } from '../../services/agentInstall.js';
|
|
10
11
|
import { scaffoldApp } from '../../services/scaffold.js';
|
|
11
12
|
import { runSyncEngine } from '../../services/syncEngine.js';
|
|
12
13
|
import { renderReport } from '../../ui/report.js';
|
|
13
14
|
import { cliOrigin } from '../../version.js';
|
|
15
|
+
import { renderInstallOutcomes } from './agentImpl.js';
|
|
14
16
|
export async function askSecret(opts) {
|
|
15
17
|
if (typeof opts.secret === 'string' && opts.secret.length > 0)
|
|
16
18
|
return opts.secret;
|
|
@@ -29,6 +31,7 @@ export async function runCreate(app, opts) {
|
|
|
29
31
|
if (existsSync(target) && readdirSync(target).length > 0) {
|
|
30
32
|
throw new Error(`${target} already exists and is not empty`);
|
|
31
33
|
}
|
|
34
|
+
const agent = parseAgentName(opts.agent);
|
|
32
35
|
const secret = await askSecret(opts);
|
|
33
36
|
const apiUrl = resolveApiUrl({ apiUrl: opts.apiUrl, denv: opts.denv });
|
|
34
37
|
const { projectId, name } = await resolveProject(apiUrl, secret);
|
|
@@ -38,8 +41,11 @@ export async function runCreate(app, opts) {
|
|
|
38
41
|
writeConfig(target, {
|
|
39
42
|
projectId,
|
|
40
43
|
apiUrl,
|
|
41
|
-
|
|
42
|
-
|
|
44
|
+
pagesDir: DEFAULT_PAGES_DIR,
|
|
45
|
+
// Apps born from `mapples create` get a NATIVE expo-router tree: the
|
|
46
|
+
// navigation document owns app/ from the root _layout.tsx down. Linked
|
|
47
|
+
// existing apps (init) use the app/(mapples) group instead.
|
|
48
|
+
routesDir: 'app',
|
|
43
49
|
schema: 1,
|
|
44
50
|
});
|
|
45
51
|
writeSecret(target, secret);
|
|
@@ -47,9 +53,23 @@ export async function runCreate(app, opts) {
|
|
|
47
53
|
for (const file of written)
|
|
48
54
|
console.log(` ${chalk.green('A')} ${file}`);
|
|
49
55
|
console.log(` ${chalk.green('A')} .mapples/secret ${chalk.gray('(gitignored)')}`);
|
|
56
|
+
let mcpSnippet = null;
|
|
57
|
+
let hooksSnippet = null;
|
|
58
|
+
if (agent) {
|
|
59
|
+
const install = installAgentIntegration(target, agent, {
|
|
60
|
+
apiUrl,
|
|
61
|
+
routesDir: 'app',
|
|
62
|
+
pagesDir: DEFAULT_PAGES_DIR,
|
|
63
|
+
});
|
|
64
|
+
for (const line of renderInstallOutcomes(install.outcomes))
|
|
65
|
+
console.log(line);
|
|
66
|
+
mcpSnippet = install.mcpSnippet;
|
|
67
|
+
hooksSnippet = install.hooksSnippet;
|
|
68
|
+
}
|
|
50
69
|
// First sync pulls the whole project (tolerates being offline).
|
|
51
70
|
const client = new JpatchClient({
|
|
52
71
|
baseUrl: apiUrl,
|
|
72
|
+
assetsBaseUrl: assetUrlFor(apiUrl),
|
|
53
73
|
projectId,
|
|
54
74
|
token: secret,
|
|
55
75
|
origin: cliOrigin(),
|
|
@@ -70,5 +90,12 @@ export async function runCreate(app, opts) {
|
|
|
70
90
|
' yarn install (or npm install)',
|
|
71
91
|
' npx expo start',
|
|
72
92
|
].join('\n'));
|
|
93
|
+
if (agent) {
|
|
94
|
+
if (mcpSnippet)
|
|
95
|
+
console.log(['', mcpSnippetHeading(agent), mcpSnippet].join('\n'));
|
|
96
|
+
if (hooksSnippet)
|
|
97
|
+
console.log(['', hooksSnippetHeading(agent), hooksSnippet].join('\n'));
|
|
98
|
+
console.log(['', ...agentNextSteps(agent, app)].join('\n'));
|
|
99
|
+
}
|
|
73
100
|
}
|
|
74
101
|
//# sourceMappingURL=createImpl.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createImpl.js","sourceRoot":"","sources":["../../../src/commands/impl/createImpl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE9C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"createImpl.js","sourceRoot":"","sources":["../../../src/commands/impl/createImpl.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,13 +3,15 @@ import { join } from 'node:path';
|
|
|
3
3
|
import chalk from 'chalk';
|
|
4
4
|
import { JpatchClient, isNetworkError } from '../../api/client.js';
|
|
5
5
|
import { resolveProject } from '../../api/auth.js';
|
|
6
|
-
import { writeConfig, configPath } from '../../project/config.js';
|
|
7
|
-
import { resolveApiUrl } from '../../project/env.js';
|
|
6
|
+
import { DEFAULT_PAGES_DIR, DEFAULT_ROUTES_DIR, writeConfig, configPath, } from '../../project/config.js';
|
|
7
|
+
import { assetUrlFor, resolveApiUrl } from '../../project/env.js';
|
|
8
8
|
import { writeSecret } from '../../project/secret.js';
|
|
9
|
+
import { agentNextSteps, installAgentIntegration, hooksSnippetHeading, mcpSnippetHeading, parseAgentName, } from '../../services/agentInstall.js';
|
|
9
10
|
import { ensureBabelPlugin, writeSidTypes } from '../../services/scaffold.js';
|
|
10
11
|
import { runSyncEngine } from '../../services/syncEngine.js';
|
|
11
12
|
import { renderReport } from '../../ui/report.js';
|
|
12
13
|
import { cliOrigin } from '../../version.js';
|
|
14
|
+
import { renderInstallOutcomes } from './agentImpl.js';
|
|
13
15
|
import { askSecret } from './createImpl.js';
|
|
14
16
|
export async function runInit(opts) {
|
|
15
17
|
const root = process.cwd();
|
|
@@ -19,14 +21,15 @@ export async function runInit(opts) {
|
|
|
19
21
|
if (existsSync(configPath(root))) {
|
|
20
22
|
throw new Error('this app is already linked (.mapples/config.json exists) — run `mapples sync`');
|
|
21
23
|
}
|
|
24
|
+
const agent = parseAgentName(opts.agent);
|
|
22
25
|
const secret = await askSecret(opts);
|
|
23
26
|
const apiUrl = resolveApiUrl({ apiUrl: opts.apiUrl, denv: opts.denv });
|
|
24
27
|
const { projectId, name } = await resolveProject(apiUrl, secret);
|
|
25
28
|
writeConfig(root, {
|
|
26
29
|
projectId,
|
|
27
30
|
apiUrl,
|
|
28
|
-
|
|
29
|
-
routesDir:
|
|
31
|
+
pagesDir: DEFAULT_PAGES_DIR,
|
|
32
|
+
routesDir: DEFAULT_ROUTES_DIR,
|
|
30
33
|
schema: 1,
|
|
31
34
|
});
|
|
32
35
|
writeSecret(root, secret);
|
|
@@ -42,8 +45,22 @@ export async function runInit(opts) {
|
|
|
42
45
|
console.log(chalk.yellow(` ⚠ add 'babel-plugin-mapples-sid' to the plugins of your babel.config.js (not edited automatically)`));
|
|
43
46
|
}
|
|
44
47
|
console.log(chalk.gray(` ℹ ensure mapples/sid.d.ts is included by your tsconfig (add it to "include" if needed)`));
|
|
48
|
+
let mcpSnippet = null;
|
|
49
|
+
let hooksSnippet = null;
|
|
50
|
+
if (agent) {
|
|
51
|
+
const install = installAgentIntegration(root, agent, {
|
|
52
|
+
apiUrl,
|
|
53
|
+
routesDir: DEFAULT_ROUTES_DIR,
|
|
54
|
+
pagesDir: DEFAULT_PAGES_DIR,
|
|
55
|
+
});
|
|
56
|
+
for (const line of renderInstallOutcomes(install.outcomes))
|
|
57
|
+
console.log(line);
|
|
58
|
+
mcpSnippet = install.mcpSnippet;
|
|
59
|
+
hooksSnippet = install.hooksSnippet;
|
|
60
|
+
}
|
|
45
61
|
const client = new JpatchClient({
|
|
46
62
|
baseUrl: apiUrl,
|
|
63
|
+
assetsBaseUrl: assetUrlFor(apiUrl),
|
|
47
64
|
projectId,
|
|
48
65
|
token: secret,
|
|
49
66
|
origin: cliOrigin(),
|
|
@@ -57,5 +74,12 @@ export async function runInit(opts) {
|
|
|
57
74
|
throw err;
|
|
58
75
|
console.log(chalk.yellow(' offline — run `mapples sync` once you are online'));
|
|
59
76
|
}
|
|
77
|
+
if (agent) {
|
|
78
|
+
if (mcpSnippet)
|
|
79
|
+
console.log(['', mcpSnippetHeading(agent), mcpSnippet].join('\n'));
|
|
80
|
+
if (hooksSnippet)
|
|
81
|
+
console.log(['', hooksSnippetHeading(agent), hooksSnippet].join('\n'));
|
|
82
|
+
console.log(['', ...agentNextSteps(agent, null)].join('\n'));
|
|
83
|
+
}
|
|
60
84
|
}
|
|
61
85
|
//# sourceMappingURL=initImpl.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"initImpl.js","sourceRoot":"","sources":["../../../src/commands/impl/initImpl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,
|
|
1
|
+
{"version":3,"file":"initImpl.js","sourceRoot":"","sources":["../../../src/commands/impl/initImpl.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,22 +1,47 @@
|
|
|
1
1
|
import chalk from 'chalk';
|
|
2
2
|
import { runSyncEngine } from '../../services/syncEngine.js';
|
|
3
|
+
import { touchAgentLease } from '../../services/agentLease.js';
|
|
3
4
|
import { clientForApp } from '../../services/clientFactory.js';
|
|
4
|
-
import {
|
|
5
|
+
import { readHead } from '../../project/head.js';
|
|
6
|
+
import { emptyReport, isAlreadyRemoved, renderReport } from '../../ui/report.js';
|
|
5
7
|
export async function runSync(opts) {
|
|
6
8
|
const root = process.cwd();
|
|
7
9
|
const client = clientForApp(root, opts);
|
|
10
|
+
const adopt = opts.adopt !== false;
|
|
11
|
+
const leaseNotes = emptyReport();
|
|
12
|
+
await touchAgentLease(root, leaseNotes, opts);
|
|
13
|
+
// Adoption goes first once the project has a base: a new component file
|
|
14
|
+
// and the managed page that already uses it then link in the same run
|
|
15
|
+
// (the merge tags the usage as an instance of the component just adopted).
|
|
16
|
+
// The very first sync bootstraps before anything can be adopted.
|
|
17
|
+
let adoption = null;
|
|
18
|
+
if (adopt && readHead(root)) {
|
|
19
|
+
const { proposeAdoptions } = await import('../../services/adoptService.js');
|
|
20
|
+
adoption = emptyReport();
|
|
21
|
+
await proposeAdoptions({ root, client, report: adoption, yes: opts.yes === true });
|
|
22
|
+
}
|
|
8
23
|
const report = await runSyncEngine({ root, client });
|
|
9
|
-
if (
|
|
24
|
+
if (adoption) {
|
|
25
|
+
report.files.unshift(...adoption.files);
|
|
26
|
+
report.notes.unshift(...adoption.notes);
|
|
27
|
+
report.warnings.unshift(...adoption.warnings);
|
|
28
|
+
report.pushedOps += adoption.pushedOps;
|
|
29
|
+
}
|
|
30
|
+
else if (adopt) {
|
|
10
31
|
const { proposeAdoptions } = await import('../../services/adoptService.js');
|
|
11
32
|
await proposeAdoptions({ root, client, report, yes: opts.yes === true });
|
|
12
33
|
}
|
|
34
|
+
await touchAgentLease(root, leaseNotes, opts);
|
|
35
|
+
report.notes.push(...leaseNotes.notes);
|
|
36
|
+
const exitCode = report.conflicts.length > 0 ? 2 : 0;
|
|
37
|
+
if (exitCode !== 0)
|
|
38
|
+
process.exitCode = exitCode;
|
|
13
39
|
if (opts.json === true) {
|
|
14
|
-
|
|
40
|
+
const dropped = report.dropped.map((d) => isAlreadyRemoved(d) ? { ...d, alreadyRemoved: true } : d);
|
|
41
|
+
console.log(JSON.stringify({ ...report, dropped, exitCode }, null, 2));
|
|
15
42
|
return;
|
|
16
43
|
}
|
|
17
44
|
console.log(chalk.bold('\nmapples sync'));
|
|
18
45
|
console.log(renderReport(report));
|
|
19
|
-
if (report.conflicts.length > 0)
|
|
20
|
-
process.exitCode = 2;
|
|
21
46
|
}
|
|
22
47
|
//# sourceMappingURL=syncImpl.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"syncImpl.js","sourceRoot":"","sources":["../../../src/commands/impl/syncImpl.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"syncImpl.js","sourceRoot":"","sources":["../../../src/commands/impl/syncImpl.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/init.js
CHANGED
|
@@ -5,6 +5,7 @@ export function registerInit(program) {
|
|
|
5
5
|
.description('Link an existing Expo app to a Mapples project')
|
|
6
6
|
.option('--secret <secret>', 'project API secret (Creator: Project → Settings)')
|
|
7
7
|
.option('--api-url <url>', 'Mapples API base URL')
|
|
8
|
+
.option('--agent <name>', 'also set up an AI agent: claude (Claude Code) | cursor | codex (ChatGPT) — skills, instructions, MCP entry')
|
|
8
9
|
.addOption(new Option('--denv <env>').hideHelp()) // internal: dev|staging|prod
|
|
9
10
|
.option('--json', 'machine-readable output')
|
|
10
11
|
.action(async (opts) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,MAAM,EAAE,MAAM,WAAW,CAAC;AAE5C,MAAM,UAAU,YAAY,CAAC,OAAgB;IAC3C,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,gDAAgD,CAAC;SAC7D,MAAM,CAAC,mBAAmB,EAAE,kDAAkD,CAAC;SAC/E,MAAM,CAAC,iBAAiB,EAAE,sBAAsB,CAAC;SACjD,SAAS,CAAC,IAAI,MAAM,CAAC,cAAc,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,6BAA6B;SAC9E,MAAM,CAAC,QAAQ,EAAE,yBAAyB,CAAC;SAC3C,MAAM,CAAC,KAAK,EAAE,IAA6B,EAAE,EAAE;QAC9C,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACvD,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,MAAM,EAAE,MAAM,WAAW,CAAC;AAE5C,MAAM,UAAU,YAAY,CAAC,OAAgB;IAC3C,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,gDAAgD,CAAC;SAC7D,MAAM,CAAC,mBAAmB,EAAE,kDAAkD,CAAC;SAC/E,MAAM,CAAC,iBAAiB,EAAE,sBAAsB,CAAC;SACjD,MAAM,CACL,gBAAgB,EAChB,4GAA4G,CAC7G;SACA,SAAS,CAAC,IAAI,MAAM,CAAC,cAAc,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,6BAA6B;SAC9E,MAAM,CAAC,QAAQ,EAAE,yBAAyB,CAAC;SAC3C,MAAM,CAAC,KAAK,EAAE,IAA6B,EAAE,EAAE;QAC9C,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACvD,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC,CAAC,CAAC;AACP,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -6,16 +6,27 @@ import { registerInit } from './commands/init.js';
|
|
|
6
6
|
import { registerSync } from './commands/sync.js';
|
|
7
7
|
import { registerAdopt } from './commands/adopt.js';
|
|
8
8
|
import { registerDoctor } from './commands/doctor.js';
|
|
9
|
+
import { registerAgent } from './commands/agent.js';
|
|
9
10
|
const program = new Command();
|
|
10
11
|
program
|
|
11
12
|
.name('mapples')
|
|
12
13
|
.description('Mapples CLI — two-way code sync between Mapples Creator and your Expo project')
|
|
13
|
-
.version(cliVersion())
|
|
14
|
+
.version(cliVersion())
|
|
15
|
+
.addHelpText('after', [
|
|
16
|
+
'',
|
|
17
|
+
'Exit codes:',
|
|
18
|
+
' 0 ok',
|
|
19
|
+
' 1 error',
|
|
20
|
+
' 2 sync finished with conflicts (files deprecated, never overwritten)',
|
|
21
|
+
' 3 agent lease gone (session expired, released or disconnected in Creator)',
|
|
22
|
+
' 4 project busy (another agent session holds it — `agent start --takeover`)',
|
|
23
|
+
].join('\n'));
|
|
14
24
|
registerCreate(program);
|
|
15
25
|
registerInit(program);
|
|
16
26
|
registerSync(program);
|
|
17
27
|
registerAdopt(program);
|
|
18
28
|
registerDoctor(program);
|
|
29
|
+
registerAgent(program);
|
|
19
30
|
program.parseAsync(process.argv).catch((err) => {
|
|
20
31
|
// Top-level failure surface: print and exit non-zero. Never swallow.
|
|
21
32
|
console.error(err instanceof Error ? err.message : String(err));
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,SAAS,CAAC;KACf,WAAW,CAAC,+EAA+E,CAAC;KAC5F,OAAO,CAAC,UAAU,EAAE,CAAC;KACrB,WAAW,CACV,OAAO,EACP;IACE,EAAE;IACF,aAAa;IACb,SAAS;IACT,YAAY;IACZ,yEAAyE;IACzE,8EAA8E;IAC9E,+EAA+E;CAChF,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;AAEJ,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,aAAa,CAAC,OAAO,CAAC,CAAC;AACvB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,aAAa,CAAC,OAAO,CAAC,CAAC;AAEvB,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;IACtD,qEAAqE;IACrE,OAAO,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IAChE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACvB,CAAC,CAAC,CAAC"}
|
package/dist/merge/applyOps.d.ts
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type JpatchOp, type RenderDomNode } from '../types.js';
|
|
2
2
|
/**
|
|
3
3
|
* Apply RenderNode ops to one page tree. Ops whose target is not in this tree
|
|
4
4
|
* are ignored (they belong to another page) and returned in `skipped` so the
|
|
5
|
-
* caller can route them; nothing is dropped silently.
|
|
5
|
+
* caller can route them; nothing is dropped silently. `warnings` carries
|
|
6
|
+
* CHILDREN_REBASED when a directive resolved differently from its literal
|
|
7
|
+
* intent, exactly when the server flags it.
|
|
6
8
|
*/
|
|
7
9
|
export declare function applyNodeOps(root: RenderDomNode | null, ops: JpatchOp[]): {
|
|
8
10
|
root: RenderDomNode | null;
|
|
9
11
|
skipped: JpatchOp[];
|
|
10
12
|
orphans: Map<string, RenderDomNode>;
|
|
13
|
+
warnings: string[];
|
|
11
14
|
};
|
package/dist/merge/applyOps.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
// Apply RenderNode ops to a page tree (the pull direction). The inverse of
|
|
2
2
|
// diffTree: applyNodeOps(base, diffTree(base, x)) ≡ x.
|
|
3
|
+
import { sidecarFilled, sidecarOf, } from '../types.js';
|
|
4
|
+
import { resolveChildOrder } from './childrenOrder.js';
|
|
3
5
|
import { applyMergePatch } from './mergePatch.js';
|
|
4
6
|
function buildState(root) {
|
|
5
7
|
const index = new Map();
|
|
@@ -19,13 +21,16 @@ function buildState(root) {
|
|
|
19
21
|
/**
|
|
20
22
|
* Apply RenderNode ops to one page tree. Ops whose target is not in this tree
|
|
21
23
|
* are ignored (they belong to another page) and returned in `skipped` so the
|
|
22
|
-
* caller can route them; nothing is dropped silently.
|
|
24
|
+
* caller can route them; nothing is dropped silently. `warnings` carries
|
|
25
|
+
* CHILDREN_REBASED when a directive resolved differently from its literal
|
|
26
|
+
* intent, exactly when the server flags it.
|
|
23
27
|
*/
|
|
24
28
|
export function applyNodeOps(root, ops) {
|
|
25
29
|
const state = buildState(root);
|
|
26
30
|
const skipped = [];
|
|
27
31
|
// Created-but-not-yet-linked nodes park here until a children directive links them.
|
|
28
32
|
const orphans = new Map();
|
|
33
|
+
let rebased = false;
|
|
29
34
|
for (const op of ops) {
|
|
30
35
|
if (op.entity !== 'RenderNode') {
|
|
31
36
|
skipped.push(op);
|
|
@@ -42,9 +47,26 @@ export function applyNodeOps(root, ops) {
|
|
|
42
47
|
type: data.type,
|
|
43
48
|
props: data.props ?? {},
|
|
44
49
|
children: [],
|
|
50
|
+
...sidecarOf(op.data),
|
|
45
51
|
};
|
|
46
52
|
state.index.set(id, node);
|
|
47
|
-
|
|
53
|
+
// A create may link itself under its parent (RFC-0001 §5 create.data.parent/index).
|
|
54
|
+
const parent = typeof data.parent === 'string' ? state.index.get(data.parent) : undefined;
|
|
55
|
+
if (parent) {
|
|
56
|
+
const at = typeof data.index === 'number'
|
|
57
|
+
? Math.max(0, Math.min(data.index, parent.children.length))
|
|
58
|
+
: parent.children.length;
|
|
59
|
+
parent.children.splice(at, 0, node);
|
|
60
|
+
state.parents.set(id, parent.sid);
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
if (typeof data.parent === 'string') {
|
|
64
|
+
skipped.push(op); // parent lives in another tree — route it there
|
|
65
|
+
state.index.delete(id);
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
orphans.set(id, node);
|
|
69
|
+
}
|
|
48
70
|
continue;
|
|
49
71
|
}
|
|
50
72
|
const id = op.id;
|
|
@@ -79,12 +101,25 @@ export function applyNodeOps(root, ops) {
|
|
|
79
101
|
}
|
|
80
102
|
// update
|
|
81
103
|
if (op.patch) {
|
|
82
|
-
const patched = applyMergePatch({ type: node.type, props: node.props }, op.patch);
|
|
104
|
+
const patched = applyMergePatch({ type: node.type, props: node.props, ...sidecarFilled(node) }, op.patch);
|
|
83
105
|
node.type = patched.type;
|
|
84
106
|
node.props = patched.props ?? {};
|
|
107
|
+
const sidecar = sidecarOf(patched);
|
|
108
|
+
if (sidecar.refProps)
|
|
109
|
+
node.refProps = sidecar.refProps;
|
|
110
|
+
else
|
|
111
|
+
delete node.refProps;
|
|
112
|
+
if (sidecar.dataProps)
|
|
113
|
+
node.dataProps = sidecar.dataProps;
|
|
114
|
+
else
|
|
115
|
+
delete node.dataProps;
|
|
116
|
+
if (sidecar.actionProps)
|
|
117
|
+
node.actionProps = sidecar.actionProps;
|
|
118
|
+
else
|
|
119
|
+
delete node.actionProps;
|
|
85
120
|
}
|
|
86
|
-
if (op.children) {
|
|
87
|
-
|
|
121
|
+
if (op.children && applyChildrenDirective(state, node, op.children, orphans)) {
|
|
122
|
+
rebased = true;
|
|
88
123
|
}
|
|
89
124
|
}
|
|
90
125
|
// Root replacement: the old root was deleted and a new tree created with no
|
|
@@ -96,39 +131,47 @@ export function applyNodeOps(root, ops) {
|
|
|
96
131
|
orphans.clear();
|
|
97
132
|
}
|
|
98
133
|
}
|
|
99
|
-
return { root: state.root, skipped, orphans };
|
|
134
|
+
return { root: state.root, skipped, orphans, warnings: rebased ? ['CHILDREN_REBASED'] : [] };
|
|
100
135
|
}
|
|
136
|
+
/**
|
|
137
|
+
* Resolve a children directive the way the server does (RFC-0001 §5.2,
|
|
138
|
+
* service--mapplesorg #724/#725): order via resolveChildOrder, then every ref
|
|
139
|
+
* must resolve in this tree and must not be the target or one of its
|
|
140
|
+
* ancestors — such a ref is skipped. A ref linked elsewhere is reparented; a
|
|
141
|
+
* child left out parks in `orphans`. Returns whether the result was rebased.
|
|
142
|
+
*/
|
|
101
143
|
function applyChildrenDirective(state, node, directive, orphans) {
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
orphans.set(ref, removed); // may be re-linked under a new parent
|
|
109
|
-
}
|
|
110
|
-
}
|
|
144
|
+
const current = node.children.map((c) => c.sid);
|
|
145
|
+
const resolved = resolveChildOrder(current, directive);
|
|
146
|
+
let rebased = resolved.rebased;
|
|
147
|
+
const lineage = new Set();
|
|
148
|
+
for (let sid = node.sid; sid !== undefined; sid = state.parents.get(sid)) {
|
|
149
|
+
lineage.add(sid);
|
|
111
150
|
}
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
state.parents.
|
|
151
|
+
const kept = [];
|
|
152
|
+
for (const sid of resolved.order) {
|
|
153
|
+
const child = state.index.get(sid) ?? orphans.get(sid);
|
|
154
|
+
if (!child || lineage.has(sid)) {
|
|
155
|
+
rebased = true;
|
|
156
|
+
continue;
|
|
157
|
+
}
|
|
158
|
+
if (!current.includes(sid)) {
|
|
159
|
+
const oldParent = state.parents.get(sid);
|
|
160
|
+
const parent = oldParent === undefined ? undefined : state.index.get(oldParent);
|
|
161
|
+
if (parent)
|
|
162
|
+
parent.children = parent.children.filter((c) => c.sid !== sid);
|
|
163
|
+
orphans.delete(sid);
|
|
121
164
|
}
|
|
165
|
+
state.parents.set(sid, node.sid);
|
|
166
|
+
kept.push(child);
|
|
122
167
|
}
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
continue; // clamped server-side; mirror the tolerance
|
|
128
|
-
const [child] = node.children.splice(from, 1);
|
|
129
|
-
const to = Math.max(0, Math.min(mv.to, node.children.length));
|
|
130
|
-
node.children.splice(to, 0, child);
|
|
168
|
+
for (const child of node.children) {
|
|
169
|
+
if (!kept.includes(child)) {
|
|
170
|
+
state.parents.delete(child.sid);
|
|
171
|
+
orphans.set(child.sid, child); // may be re-linked under a new parent
|
|
131
172
|
}
|
|
132
173
|
}
|
|
174
|
+
node.children = kept;
|
|
175
|
+
return rebased;
|
|
133
176
|
}
|
|
134
177
|
//# sourceMappingURL=applyOps.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"applyOps.js","sourceRoot":"","sources":["../../src/merge/applyOps.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,uDAAuD;
|
|
1
|
+
{"version":3,"file":"applyOps.js","sourceRoot":"","sources":["../../src/merge/applyOps.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ChildrenDirective } from '../types.js';
|
|
2
|
+
export interface ChildOrder {
|
|
3
|
+
order: string[];
|
|
4
|
+
/** The result diverges from the directive's literal intent (CHILDREN_REBASED). */
|
|
5
|
+
rebased: boolean;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* `set` is wholesale and exclusive; the first occurrence of each ref wins.
|
|
9
|
+
* Otherwise remove → move → insert: a missing remove/move ref is skipped,
|
|
10
|
+
* `move.to` and `insert.at` clamp to bounds, and inserting a present ref moves
|
|
11
|
+
* it. Ref resolution (unknown refs, cycles) is the caller's second pass.
|
|
12
|
+
*/
|
|
13
|
+
export declare function resolveChildOrder(children: string[], directive: ChildrenDirective): ChildOrder;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
// Child-order directive resolution, identical to the backend's
|
|
2
|
+
// `api/canvas/tree.py` apply_children (service--mapplesorg #724, #725).
|
|
3
|
+
// Pull replay and the mock server both resolve directives through here, so a
|
|
4
|
+
// replayed tree lands exactly on HEAD.
|
|
5
|
+
/**
|
|
6
|
+
* `set` is wholesale and exclusive; the first occurrence of each ref wins.
|
|
7
|
+
* Otherwise remove → move → insert: a missing remove/move ref is skipped,
|
|
8
|
+
* `move.to` and `insert.at` clamp to bounds, and inserting a present ref moves
|
|
9
|
+
* it. Ref resolution (unknown refs, cycles) is the caller's second pass.
|
|
10
|
+
*/
|
|
11
|
+
export function resolveChildOrder(children, directive) {
|
|
12
|
+
if (directive.set !== undefined) {
|
|
13
|
+
const order = [...new Set(directive.set)];
|
|
14
|
+
return { order, rebased: order.length !== directive.set.length };
|
|
15
|
+
}
|
|
16
|
+
const out = [...children];
|
|
17
|
+
let rebased = false;
|
|
18
|
+
for (const ref of directive.remove ?? []) {
|
|
19
|
+
const at = out.indexOf(ref);
|
|
20
|
+
if (at === -1) {
|
|
21
|
+
rebased = true;
|
|
22
|
+
continue;
|
|
23
|
+
}
|
|
24
|
+
out.splice(at, 1);
|
|
25
|
+
}
|
|
26
|
+
for (const mv of directive.move ?? []) {
|
|
27
|
+
const from = out.indexOf(mv.ref);
|
|
28
|
+
if (from === -1) {
|
|
29
|
+
rebased = true;
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
out.splice(from, 1);
|
|
33
|
+
const to = Math.min(mv.to, out.length);
|
|
34
|
+
if (to !== mv.to)
|
|
35
|
+
rebased = true;
|
|
36
|
+
out.splice(to, 0, mv.ref);
|
|
37
|
+
}
|
|
38
|
+
for (const ins of directive.insert ?? []) {
|
|
39
|
+
const present = out.indexOf(ins.ref);
|
|
40
|
+
if (present !== -1) {
|
|
41
|
+
out.splice(present, 1);
|
|
42
|
+
rebased = true;
|
|
43
|
+
}
|
|
44
|
+
const at = Math.min(ins.at, out.length);
|
|
45
|
+
if (at !== ins.at)
|
|
46
|
+
rebased = true;
|
|
47
|
+
out.splice(at, 0, ins.ref);
|
|
48
|
+
}
|
|
49
|
+
return { order: out, rebased };
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=childrenOrder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"childrenOrder.js","sourceRoot":"","sources":["../../src/merge/childrenOrder.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,wEAAwE;AACxE,6EAA6E;AAC7E,uCAAuC;AAUvC;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAAkB,EAAE,SAA4B;IAChF,IAAI,SAAS,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1C,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;IACnE,CAAC;IACD,MAAM,GAAG,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC;IAC1B,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,KAAK,MAAM,GAAG,IAAI,SAAS,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;QACzC,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC;YACd,OAAO,GAAG,IAAI,CAAC;YACf,SAAS;QACX,CAAC;QACD,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACpB,CAAC;IACD,KAAK,MAAM,EAAE,IAAI,SAAS,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC;YAChB,OAAO,GAAG,IAAI,CAAC;YACf,SAAS;QACX,CAAC;QACD,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACpB,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;QACvC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE;YAAE,OAAO,GAAG,IAAI,CAAC;QACjC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,SAAS,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,OAAO,KAAK,CAAC,CAAC,EAAE,CAAC;YACnB,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YACvB,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;QACD,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;QACxC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE;YAAE,OAAO,GAAG,IAAI,CAAC;QAClC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;AACjC,CAAC"}
|
package/dist/merge/diff.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type JpatchOp, type RenderDomNode } from '../types.js';
|
|
2
2
|
interface Indexed {
|
|
3
3
|
node: RenderDomNode;
|
|
4
4
|
parentSid: string | null;
|
|
@@ -12,4 +12,23 @@ export declare function indexTree(root: RenderDomNode | null): Map<string, Index
|
|
|
12
12
|
* `c_` sids for genuinely new nodes before diffing).
|
|
13
13
|
*/
|
|
14
14
|
export declare function diffTree(base: RenderDomNode | null, next: RenderDomNode | null): JpatchOp[];
|
|
15
|
+
export interface StagedDiff {
|
|
16
|
+
/** Everything but the moves into new containers — one push. */
|
|
17
|
+
ops: JpatchOp[];
|
|
18
|
+
/**
|
|
19
|
+
* The moves into containers `ops` creates. They target those containers by
|
|
20
|
+
* id, and the server resolves a cid only as a reference, never as the
|
|
21
|
+
* target of an update — so they go in a LATER transaction, once the
|
|
22
|
+
* earlier one has minted the ids (the push resolves cids per transaction).
|
|
23
|
+
* Each move's remove and insert stay together, so no node is ever orphaned.
|
|
24
|
+
*/
|
|
25
|
+
deferred: JpatchOp[];
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* `diffTree`, staged so an existing element can move into a container created
|
|
29
|
+
* in the same change (wrapping, grouping). Stage one creates the containers
|
|
30
|
+
* and applies every other change with the moved elements still under a
|
|
31
|
+
* surviving ancestor from `base`; stage two moves them into place.
|
|
32
|
+
*/
|
|
33
|
+
export declare function diffTreeStaged(base: RenderDomNode | null, next: RenderDomNode | null): StagedDiff;
|
|
15
34
|
export {};
|