@tinyrack/dotweave 0.42.13 → 0.42.21
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 +6 -2
- package/dist/application.d.ts +0 -3
- package/dist/application.d.ts.map +1 -1
- package/dist/application.js +23 -22
- package/dist/application.js.map +1 -1
- package/dist/cli/autocomplete.d.ts +5 -4
- package/dist/cli/autocomplete.d.ts.map +1 -1
- package/dist/cli/autocomplete.js +33 -28
- package/dist/cli/autocomplete.js.map +1 -1
- package/dist/cli/cd.d.ts +2 -2
- package/dist/cli/cd.d.ts.map +1 -1
- package/dist/cli/cd.js +1 -4
- package/dist/cli/cd.js.map +1 -1
- package/dist/cli/doctor.d.ts +2 -2
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +19 -28
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/index.d.ts +1 -3
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +5 -5
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init.d.ts +2 -2
- package/dist/cli/init.d.ts.map +1 -1
- package/dist/cli/init.js +9 -15
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/profile/add.d.ts +4 -0
- package/dist/cli/profile/add.d.ts.map +1 -0
- package/dist/cli/profile/add.js +29 -0
- package/dist/cli/profile/add.js.map +1 -0
- package/dist/cli/profile/index.d.ts +1 -1
- package/dist/cli/profile/index.d.ts.map +1 -1
- package/dist/cli/profile/index.js +5 -1
- package/dist/cli/profile/index.js.map +1 -1
- package/dist/cli/profile/list.d.ts +2 -2
- package/dist/cli/profile/list.d.ts.map +1 -1
- package/dist/cli/profile/list.js +8 -26
- package/dist/cli/profile/list.js.map +1 -1
- package/dist/cli/profile/remove.d.ts +4 -0
- package/dist/cli/profile/remove.d.ts.map +1 -0
- package/dist/cli/profile/remove.js +29 -0
- package/dist/cli/profile/remove.js.map +1 -0
- package/dist/cli/profile/use.d.ts +2 -2
- package/dist/cli/profile/use.d.ts.map +1 -1
- package/dist/cli/profile/use.js +5 -14
- package/dist/cli/profile/use.js.map +1 -1
- package/dist/cli/pull.d.ts +2 -2
- package/dist/cli/pull.d.ts.map +1 -1
- package/dist/cli/pull.js +22 -41
- package/dist/cli/pull.js.map +1 -1
- package/dist/cli/push.d.ts +2 -2
- package/dist/cli/push.d.ts.map +1 -1
- package/dist/cli/push.js +17 -23
- package/dist/cli/push.js.map +1 -1
- package/dist/cli/root-commands.d.ts +9 -10
- package/dist/cli/root-commands.d.ts.map +1 -1
- package/dist/cli/root-commands.js +0 -4
- package/dist/cli/root-commands.js.map +1 -1
- package/dist/cli/shared-flags.d.ts +9 -0
- package/dist/cli/shared-flags.d.ts.map +1 -0
- package/dist/cli/shared-flags.js +8 -0
- package/dist/cli/shared-flags.js.map +1 -0
- package/dist/cli/status.d.ts +2 -2
- package/dist/cli/status.d.ts.map +1 -1
- package/dist/cli/status.js +26 -55
- package/dist/cli/status.js.map +1 -1
- package/dist/cli/track.d.ts +2 -2
- package/dist/cli/track.d.ts.map +1 -1
- package/dist/cli/track.js +19 -35
- package/dist/cli/track.js.map +1 -1
- package/dist/cli/untrack.d.ts +2 -2
- package/dist/cli/untrack.d.ts.map +1 -1
- package/dist/cli/untrack.js +5 -14
- package/dist/cli/untrack.js.map +1 -1
- package/dist/config/constants.d.ts +2 -2
- package/dist/config/constants.d.ts.map +1 -1
- package/dist/config/constants.js +2 -2
- package/dist/config/constants.js.map +1 -1
- package/dist/config/global-config.d.ts +3 -3
- package/dist/config/global-config.d.ts.map +1 -1
- package/dist/config/global-config.js +7 -8
- package/dist/config/global-config.js.map +1 -1
- package/dist/config/identity-file.d.ts +0 -7
- package/dist/config/identity-file.d.ts.map +1 -1
- package/dist/config/identity-file.js +2 -44
- package/dist/config/identity-file.js.map +1 -1
- package/dist/config/migration.d.ts +6 -0
- package/dist/config/migration.d.ts.map +1 -1
- package/dist/config/migration.js +35 -13
- package/dist/config/migration.js.map +1 -1
- package/dist/config/runtime-env.d.ts.map +1 -1
- package/dist/config/runtime-env.js +2 -7
- package/dist/config/runtime-env.js.map +1 -1
- package/dist/config/{sync-entry.d.ts → sync-queries.d.ts} +5 -3
- package/dist/config/sync-queries.d.ts.map +1 -0
- package/dist/config/{sync-entry.js → sync-queries.js} +15 -6
- package/dist/config/sync-queries.js.map +1 -0
- package/dist/config/sync-schema.d.ts +13 -8
- package/dist/config/sync-schema.d.ts.map +1 -1
- package/dist/config/sync-schema.js +138 -18
- package/dist/config/sync-schema.js.map +1 -1
- package/dist/config/xdg.d.ts.map +1 -1
- package/dist/config/xdg.js +15 -34
- package/dist/config/xdg.js.map +1 -1
- package/dist/lib/error.js +1 -1
- package/dist/lib/error.js.map +1 -1
- package/dist/lib/git.d.ts +3 -4
- package/dist/lib/git.d.ts.map +1 -1
- package/dist/lib/git.js +7 -48
- package/dist/lib/git.js.map +1 -1
- package/dist/lib/jsonc.d.ts +1 -1
- package/dist/lib/jsonc.d.ts.map +1 -1
- package/dist/lib/jsonc.js +1 -1
- package/dist/lib/jsonc.js.map +1 -1
- package/dist/lib/path.d.ts +3 -16
- package/dist/lib/path.d.ts.map +1 -1
- package/dist/lib/path.js +36 -19
- package/dist/lib/path.js.map +1 -1
- package/dist/lib/string.d.ts +1 -4
- package/dist/lib/string.d.ts.map +1 -1
- package/dist/lib/string.js +6 -4
- package/dist/lib/string.js.map +1 -1
- package/dist/lib/version.d.ts.map +1 -1
- package/dist/lib/version.js +2 -2
- package/dist/lib/version.js.map +1 -1
- package/dist/migrations/sync-v8.d.ts +3 -0
- package/dist/migrations/sync-v8.d.ts.map +1 -0
- package/dist/migrations/sync-v8.js +66 -0
- package/dist/migrations/sync-v8.js.map +1 -0
- package/dist/services/autocomplete.js +13 -13
- package/dist/services/autocomplete.js.map +1 -1
- package/dist/services/config-file.d.ts +6 -5
- package/dist/services/config-file.d.ts.map +1 -1
- package/dist/services/config-file.js +9 -8
- package/dist/services/config-file.js.map +1 -1
- package/dist/services/doctor.d.ts +1 -4
- package/dist/services/doctor.d.ts.map +1 -1
- package/dist/services/doctor.js +10 -37
- package/dist/services/doctor.js.map +1 -1
- package/dist/services/init.d.ts +1 -5
- package/dist/services/init.d.ts.map +1 -1
- package/dist/services/init.js +25 -59
- package/dist/services/init.js.map +1 -1
- package/dist/services/local-snapshot.d.ts +2 -7
- package/dist/services/local-snapshot.d.ts.map +1 -1
- package/dist/services/local-snapshot.js +12 -35
- package/dist/services/local-snapshot.js.map +1 -1
- package/dist/services/profile.d.ts +8 -4
- package/dist/services/profile.d.ts.map +1 -1
- package/dist/services/profile.js +110 -34
- package/dist/services/profile.js.map +1 -1
- package/dist/services/pull-apply.d.ts +30 -0
- package/dist/services/pull-apply.d.ts.map +1 -0
- package/dist/services/{local-materialization.js → pull-apply.js} +150 -210
- package/dist/services/pull-apply.js.map +1 -0
- package/dist/services/pull.d.ts +7 -10
- package/dist/services/pull.d.ts.map +1 -1
- package/dist/services/pull.js +19 -30
- package/dist/services/pull.js.map +1 -1
- package/dist/services/push.d.ts +4 -7
- package/dist/services/push.d.ts.map +1 -1
- package/dist/services/push.js +15 -38
- package/dist/services/push.js.map +1 -1
- package/dist/services/repo-artifacts.d.ts +5 -6
- package/dist/services/repo-artifacts.d.ts.map +1 -1
- package/dist/services/repo-artifacts.js +21 -60
- package/dist/services/repo-artifacts.js.map +1 -1
- package/dist/services/repo-snapshot.d.ts +2 -3
- package/dist/services/repo-snapshot.d.ts.map +1 -1
- package/dist/services/repo-snapshot.js +14 -26
- package/dist/services/repo-snapshot.js.map +1 -1
- package/dist/services/status.d.ts +1 -5
- package/dist/services/status.d.ts.map +1 -1
- package/dist/services/status.js +7 -17
- package/dist/services/status.js.map +1 -1
- package/dist/services/{runtime.d.ts → sync-context.d.ts} +9 -3
- package/dist/services/sync-context.d.ts.map +1 -0
- package/dist/services/{runtime.js → sync-context.js} +24 -8
- package/dist/services/sync-context.js.map +1 -0
- package/dist/services/{set.d.ts → sync-mode.d.ts} +7 -9
- package/dist/services/sync-mode.d.ts.map +1 -0
- package/dist/services/{set.js → sync-mode.js} +9 -23
- package/dist/services/sync-mode.js.map +1 -0
- package/dist/services/{paths.d.ts → sync-paths.d.ts} +2 -2
- package/dist/services/sync-paths.d.ts.map +1 -0
- package/dist/services/{paths.js → sync-paths.js} +4 -6
- package/dist/services/sync-paths.js.map +1 -0
- package/dist/services/terminal/logger.d.ts +30 -5
- package/dist/services/terminal/logger.d.ts.map +1 -1
- package/dist/services/terminal/logger.js +61 -14
- package/dist/services/terminal/logger.js.map +1 -1
- package/dist/services/terminal/path-completion.d.ts +2 -2
- package/dist/services/terminal/path-completion.d.ts.map +1 -1
- package/dist/services/terminal/path-completion.js +16 -13
- package/dist/services/terminal/path-completion.js.map +1 -1
- package/dist/services/terminal/shell.d.ts +1 -12
- package/dist/services/terminal/shell.d.ts.map +1 -1
- package/dist/services/terminal/shell.js +7 -160
- package/dist/services/terminal/shell.js.map +1 -1
- package/dist/services/terminal/spinner.d.ts +10 -0
- package/dist/services/terminal/spinner.d.ts.map +1 -0
- package/dist/services/terminal/spinner.js +61 -0
- package/dist/services/terminal/spinner.js.map +1 -0
- package/dist/services/terminal/theme.d.ts +31 -0
- package/dist/services/terminal/theme.d.ts.map +1 -0
- package/dist/services/terminal/theme.js +32 -0
- package/dist/services/terminal/theme.js.map +1 -0
- package/dist/services/track.d.ts +1 -3
- package/dist/services/track.d.ts.map +1 -1
- package/dist/services/track.js +27 -23
- package/dist/services/track.js.map +1 -1
- package/dist/services/untrack.d.ts +0 -2
- package/dist/services/untrack.d.ts.map +1 -1
- package/dist/services/untrack.js +4 -11
- package/dist/services/untrack.js.map +1 -1
- package/package.json +1 -2
- package/dist/config/sync-entry.d.ts.map +0 -1
- package/dist/config/sync-entry.js.map +0 -1
- package/dist/config/sync.d.ts +0 -8
- package/dist/config/sync.d.ts.map +0 -1
- package/dist/config/sync.js +0 -53
- package/dist/config/sync.js.map +0 -1
- package/dist/services/local-materialization.d.ts +0 -30
- package/dist/services/local-materialization.d.ts.map +0 -1
- package/dist/services/local-materialization.js.map +0 -1
- package/dist/services/paths.d.ts.map +0 -1
- package/dist/services/paths.js.map +0 -1
- package/dist/services/runtime.d.ts.map +0 -1
- package/dist/services/runtime.js.map +0 -1
- package/dist/services/set.d.ts.map +0 -1
- package/dist/services/set.js.map +0 -1
- package/dist/services/terminal/cli-runtime.d.ts +0 -18
- package/dist/services/terminal/cli-runtime.d.ts.map +0 -1
- package/dist/services/terminal/cli-runtime.js +0 -19
- package/dist/services/terminal/cli-runtime.js.map +0 -1
|
@@ -1,74 +1,104 @@
|
|
|
1
1
|
import { realpathSync } from "node:fs";
|
|
2
2
|
import { chmod, mkdir, mkdtemp, readFile, readlink, rm, } from "node:fs/promises";
|
|
3
|
-
import { basename, dirname,
|
|
4
|
-
import {
|
|
5
|
-
import { collectChildEntryPaths, findOwningSyncEntry, resolveSyncRule, } from "#app/config/sync.ts";
|
|
3
|
+
import { basename, dirname, join, posix } from "node:path";
|
|
4
|
+
import { AppConstants } from "#app/config/constants.ts";
|
|
5
|
+
import { collectChildEntryPaths, findOwningSyncEntry, resolveSyncRule, } from "#app/config/sync-queries.ts";
|
|
6
6
|
import { fileContentsEqual, shouldNormalizeTextLineEndings, } from "#app/lib/content.ts";
|
|
7
7
|
import { DotweaveError } from "#app/lib/error.ts";
|
|
8
|
-
import {
|
|
8
|
+
import { buildSearchableDirectoryMode, isExecutableMode, supportsPosixFileModes, } from "#app/lib/file-mode.ts";
|
|
9
9
|
import { createSymlink, getFollowedPathStats, getPathStats, listDirectoryEntries, removePathAtomically, replacePathAtomically, writeFileNode, } from "#app/lib/filesystem.ts";
|
|
10
|
-
import { buildDirectoryKey } from "#app/lib/path.ts";
|
|
10
|
+
import { buildDirectoryKey, normalizeLinkTarget } from "#app/lib/path.ts";
|
|
11
11
|
import { limitConcurrency } from "#app/lib/promise.ts";
|
|
12
|
-
const
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
12
|
+
export const buildDesiredDirectoryKeys = (entry, desiredNodes) => {
|
|
13
|
+
const desiredDirectoryKeys = new Set([
|
|
14
|
+
buildDirectoryKey(entry.repoPath),
|
|
15
|
+
]);
|
|
16
|
+
for (const relativePath of desiredNodes.keys()) {
|
|
17
|
+
const segments = relativePath.split("/");
|
|
18
|
+
for (let index = 1; index < segments.length; index += 1) {
|
|
19
|
+
desiredDirectoryKeys.add(buildDirectoryKey(posix.join(entry.repoPath, ...segments.slice(0, index))));
|
|
20
|
+
}
|
|
17
21
|
}
|
|
18
|
-
|
|
19
|
-
|
|
22
|
+
return desiredDirectoryKeys;
|
|
23
|
+
};
|
|
24
|
+
export const buildEntryMaterialization = (entry, snapshot, config) => {
|
|
25
|
+
if (entry.kind === "file") {
|
|
26
|
+
const node = snapshot.get(entry.repoPath);
|
|
27
|
+
if (node === undefined) {
|
|
28
|
+
return {
|
|
29
|
+
desiredKeys: new Set(),
|
|
30
|
+
type: "absent",
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
if (node.type === "directory") {
|
|
34
|
+
throw new DotweaveError("File sync entry resolves to a directory in the repository.", {
|
|
35
|
+
code: "FILE_ENTRY_RESOLVES_DIRECTORY",
|
|
36
|
+
details: [`Repository path: ${entry.repoPath}`],
|
|
37
|
+
hint: "Run 'dotweave push' or fix the repository so this path is stored as a file.",
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
return {
|
|
41
|
+
desiredKeys: new Set([entry.repoPath]),
|
|
42
|
+
node,
|
|
43
|
+
type: "file",
|
|
44
|
+
};
|
|
20
45
|
}
|
|
46
|
+
const rootNode = snapshot.get(entry.repoPath);
|
|
47
|
+
if (rootNode !== undefined && rootNode.type !== "directory") {
|
|
48
|
+
throw new DotweaveError("Directory sync entry resolves to a file in the repository.", {
|
|
49
|
+
code: "DIRECTORY_ENTRY_RESOLVES_FILE",
|
|
50
|
+
details: [`Repository path: ${entry.repoPath}`],
|
|
51
|
+
hint: "Run 'dotweave push' or fix the repository so this path is stored as a directory.",
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
const nodes = new Map();
|
|
55
|
+
const desiredKeys = new Set();
|
|
56
|
+
for (const [repoPath, node] of snapshot.entries()) {
|
|
57
|
+
if (!repoPath.startsWith(`${entry.repoPath}/`)) {
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
60
|
+
if (node.type === "directory") {
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
if (findOwningSyncEntry(config, repoPath) !== entry) {
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
const relativePath = repoPath.slice(entry.repoPath.length + 1);
|
|
67
|
+
nodes.set(relativePath, node);
|
|
68
|
+
desiredKeys.add(repoPath);
|
|
69
|
+
}
|
|
70
|
+
if (rootNode === undefined && nodes.size === 0) {
|
|
71
|
+
return {
|
|
72
|
+
desiredKeys,
|
|
73
|
+
type: "absent",
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
desiredKeys.add(buildDirectoryKey(entry.repoPath));
|
|
77
|
+
return {
|
|
78
|
+
desiredKeys,
|
|
79
|
+
nodes,
|
|
80
|
+
type: "directory",
|
|
81
|
+
};
|
|
21
82
|
};
|
|
22
83
|
const materializedDirectoryModeMatches = (actualMode, fileMode) => {
|
|
23
84
|
if (!supportsPosixFileModes()) {
|
|
24
85
|
return true;
|
|
25
86
|
}
|
|
26
|
-
const maskedActualMode = actualMode & 0o777;
|
|
27
87
|
if (fileMode === undefined) {
|
|
28
|
-
|
|
29
|
-
// We allow group-write (0775 vs 0755) common in some umasks.
|
|
30
|
-
const ownerAndSearchMask = 0o711;
|
|
31
|
-
return (maskedActualMode & ownerAndSearchMask) === ownerAndSearchMask;
|
|
88
|
+
return true;
|
|
32
89
|
}
|
|
90
|
+
const maskedActualMode = actualMode & 0o777;
|
|
33
91
|
return maskedActualMode === (buildSearchableDirectoryMode(fileMode) & 0o777);
|
|
34
92
|
};
|
|
35
93
|
const materializedFileModeMatches = (actualMode, executable, fileMode) => {
|
|
36
94
|
if (!supportsPosixFileModes()) {
|
|
37
95
|
return true;
|
|
38
96
|
}
|
|
39
|
-
const expectedMode = (fileMode ?? buildExecutableMode(executable)) & 0o777;
|
|
40
97
|
const maskedActualMode = actualMode & 0o777;
|
|
41
|
-
if (maskedActualMode === expectedMode) {
|
|
42
|
-
return true;
|
|
43
|
-
}
|
|
44
|
-
// If no explicit fileMode is provided, we allow common umask variations (like 0664 vs 0644)
|
|
45
|
-
// as long as the owner permissions and executable bits match.
|
|
46
98
|
if (fileMode === undefined) {
|
|
47
|
-
|
|
48
|
-
return ((maskedActualMode & ownerAndExecMask) ===
|
|
49
|
-
(expectedMode & ownerAndExecMask));
|
|
50
|
-
}
|
|
51
|
-
return false;
|
|
52
|
-
};
|
|
53
|
-
const normalizeLinkTargetForComparison = (target, baseDir) => {
|
|
54
|
-
const absoluteTarget = isAbsolute(target) ? target : resolve(baseDir, target);
|
|
55
|
-
if (process.platform !== "win32") {
|
|
56
|
-
return absoluteTarget;
|
|
57
|
-
}
|
|
58
|
-
const normalizeSlashes = (p) => p.replaceAll("\\", "/").toLowerCase();
|
|
59
|
-
try {
|
|
60
|
-
return normalizeSlashes(require("node:fs").realpathSync.native(absoluteTarget));
|
|
61
|
-
}
|
|
62
|
-
catch {
|
|
63
|
-
try {
|
|
64
|
-
const dir = dirname(absoluteTarget);
|
|
65
|
-
const base = basename(absoluteTarget);
|
|
66
|
-
return normalizeSlashes(join(require("node:fs").realpathSync.native(dir), base));
|
|
67
|
-
}
|
|
68
|
-
catch {
|
|
69
|
-
return normalizeSlashes(absoluteTarget);
|
|
70
|
-
}
|
|
99
|
+
return isExecutableMode(maskedActualMode) === executable;
|
|
71
100
|
}
|
|
101
|
+
return maskedActualMode === (fileMode & 0o777);
|
|
72
102
|
};
|
|
73
103
|
const isMaterializedFileLikeNodeCurrent = async (targetPath, node, fileMode) => {
|
|
74
104
|
const stats = await getPathStats(targetPath);
|
|
@@ -80,8 +110,8 @@ const isMaterializedFileLikeNodeCurrent = async (targetPath, node, fileMode) =>
|
|
|
80
110
|
return false;
|
|
81
111
|
}
|
|
82
112
|
const currentLinkTarget = await readlink(targetPath);
|
|
83
|
-
return (
|
|
84
|
-
|
|
113
|
+
return (normalizeLinkTarget(currentLinkTarget, dirname(targetPath)) ===
|
|
114
|
+
normalizeLinkTarget(node.linkTarget, dirname(targetPath)));
|
|
85
115
|
}
|
|
86
116
|
if (!stats.isFile()) {
|
|
87
117
|
return false;
|
|
@@ -103,8 +133,7 @@ const resolveStagingParentDirectory = (targetPath) => {
|
|
|
103
133
|
return parentDirectory;
|
|
104
134
|
}
|
|
105
135
|
};
|
|
106
|
-
const
|
|
107
|
-
reporter?.verbose(`staging local file ${targetPath}`);
|
|
136
|
+
const stageAndReplacePath = async (targetPath, node, fileMode) => {
|
|
108
137
|
await mkdir(dirname(targetPath), { recursive: true });
|
|
109
138
|
const stagingDirectory = await mkdtemp(join(resolveStagingParentDirectory(targetPath), `.${basename(targetPath)}.dotweave-sync-`));
|
|
110
139
|
const stagedPath = join(stagingDirectory, basename(targetPath));
|
|
@@ -152,90 +181,12 @@ const ensureMaterializedDirectoryPath = async (targetPath, fileMode) => {
|
|
|
152
181
|
await chmod(targetPath, buildSearchableDirectoryMode(fileMode));
|
|
153
182
|
}
|
|
154
183
|
};
|
|
155
|
-
const
|
|
156
|
-
const desiredDirectoryKeys = new Set([
|
|
157
|
-
buildDirectoryKey(entry.repoPath),
|
|
158
|
-
]);
|
|
159
|
-
for (const relativePath of desiredNodes.keys()) {
|
|
160
|
-
const segments = relativePath.split("/");
|
|
161
|
-
for (let index = 1; index < segments.length; index += 1) {
|
|
162
|
-
desiredDirectoryKeys.add(buildDirectoryKey(posix.join(entry.repoPath, ...segments.slice(0, index))));
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
return desiredDirectoryKeys;
|
|
166
|
-
};
|
|
167
|
-
export const buildEntryMaterialization = (entry, snapshot, config, reporter) => {
|
|
168
|
-
if (entry.kind === "file") {
|
|
169
|
-
const node = snapshot.get(entry.repoPath);
|
|
170
|
-
if (node === undefined) {
|
|
171
|
-
reporter?.verbose(`planned an absent local file ${entry.repoPath}`);
|
|
172
|
-
return {
|
|
173
|
-
desiredKeys: new Set(),
|
|
174
|
-
type: "absent",
|
|
175
|
-
};
|
|
176
|
-
}
|
|
177
|
-
if (node.type === "directory") {
|
|
178
|
-
throw new DotweaveError("File sync entry resolves to a directory in the repository.", {
|
|
179
|
-
code: "FILE_ENTRY_RESOLVES_DIRECTORY",
|
|
180
|
-
details: [`Repository path: ${entry.repoPath}`],
|
|
181
|
-
hint: "Run 'dotweave push' or fix the repository so this path is stored as a file.",
|
|
182
|
-
});
|
|
183
|
-
}
|
|
184
|
-
reporter?.verbose(`planned a local file ${entry.repoPath}`);
|
|
185
|
-
return {
|
|
186
|
-
desiredKeys: new Set([entry.repoPath]),
|
|
187
|
-
node,
|
|
188
|
-
type: "file",
|
|
189
|
-
};
|
|
190
|
-
}
|
|
191
|
-
const rootNode = snapshot.get(entry.repoPath);
|
|
192
|
-
if (rootNode !== undefined && rootNode.type !== "directory") {
|
|
193
|
-
throw new DotweaveError("Directory sync entry resolves to a file in the repository.", {
|
|
194
|
-
code: "DIRECTORY_ENTRY_RESOLVES_FILE",
|
|
195
|
-
details: [`Repository path: ${entry.repoPath}`],
|
|
196
|
-
hint: "Run 'dotweave push' or fix the repository so this path is stored as a directory.",
|
|
197
|
-
});
|
|
198
|
-
}
|
|
199
|
-
const nodes = new Map();
|
|
200
|
-
const desiredKeys = new Set();
|
|
201
|
-
for (const [repoPath, node] of snapshot.entries()) {
|
|
202
|
-
if (!repoPath.startsWith(`${entry.repoPath}/`)) {
|
|
203
|
-
continue;
|
|
204
|
-
}
|
|
205
|
-
if (node.type === "directory") {
|
|
206
|
-
continue;
|
|
207
|
-
}
|
|
208
|
-
if (findOwningSyncEntry(config, repoPath) !== entry) {
|
|
209
|
-
continue;
|
|
210
|
-
}
|
|
211
|
-
const relativePath = repoPath.slice(entry.repoPath.length + 1);
|
|
212
|
-
nodes.set(relativePath, node);
|
|
213
|
-
desiredKeys.add(repoPath);
|
|
214
|
-
}
|
|
215
|
-
if (rootNode === undefined && nodes.size === 0) {
|
|
216
|
-
reporter?.verbose(`planned an absent local directory ${entry.repoPath}`);
|
|
217
|
-
return {
|
|
218
|
-
desiredKeys,
|
|
219
|
-
type: "absent",
|
|
220
|
-
};
|
|
221
|
-
}
|
|
222
|
-
desiredKeys.add(buildDirectoryKey(entry.repoPath));
|
|
223
|
-
reporter?.verbose(`planned a local directory ${entry.repoPath}`);
|
|
224
|
-
return {
|
|
225
|
-
desiredKeys,
|
|
226
|
-
nodes,
|
|
227
|
-
type: "directory",
|
|
228
|
-
};
|
|
229
|
-
};
|
|
230
|
-
const collectLocalLeafKeys = async (targetPath, repoPathPrefix, keys, keyToLocalPath, childEntryPaths, prefix, reporter, progressState = {
|
|
231
|
-
scannedLocalNodeCount: 0,
|
|
232
|
-
}, providedStats) => {
|
|
184
|
+
export const collectLocalLeafKeys = async (targetPath, repoPathPrefix, keys, keyToLocalPath, childEntryPaths, prefix, providedStats) => {
|
|
233
185
|
const stats = providedStats ?? (await getPathStats(targetPath));
|
|
234
186
|
if (stats === undefined) {
|
|
235
187
|
return;
|
|
236
188
|
}
|
|
237
189
|
if (!stats.isDirectory()) {
|
|
238
|
-
reportPullPlanningProgress(reporter, progressState, repoPathPrefix);
|
|
239
190
|
keys.add(repoPathPrefix);
|
|
240
191
|
keyToLocalPath?.set(repoPathPrefix, targetPath);
|
|
241
192
|
return;
|
|
@@ -256,9 +207,8 @@ const collectLocalLeafKeys = async (targetPath, repoPathPrefix, keys, keyToLocal
|
|
|
256
207
|
if (childEntryPaths.has(repoPath)) {
|
|
257
208
|
continue;
|
|
258
209
|
}
|
|
259
|
-
reportPullPlanningProgress(reporter, progressState, repoPath);
|
|
260
210
|
if (childStats?.isDirectory()) {
|
|
261
|
-
await collectLocalLeafKeys(absolutePath, repoPathPrefix, keys, keyToLocalPath, childEntryPaths, relativePath
|
|
211
|
+
await collectLocalLeafKeys(absolutePath, repoPathPrefix, keys, keyToLocalPath, childEntryPaths, relativePath);
|
|
262
212
|
continue;
|
|
263
213
|
}
|
|
264
214
|
keys.add(repoPath);
|
|
@@ -268,7 +218,7 @@ const collectLocalLeafKeys = async (targetPath, repoPathPrefix, keys, keyToLocal
|
|
|
268
218
|
const buildLocalPathDepth = (localPath) => {
|
|
269
219
|
return localPath.split(/[/\\]+/u).length;
|
|
270
220
|
};
|
|
271
|
-
const collectDeletableLocalKeys = async (existingKeys, desiredKeys, keyToLocalPath) => {
|
|
221
|
+
export const collectDeletableLocalKeys = async (existingKeys, desiredKeys, keyToLocalPath) => {
|
|
272
222
|
const deletableKeys = [];
|
|
273
223
|
const scheduledLocalPaths = new Set();
|
|
274
224
|
const isWindows = process.platform === "win32";
|
|
@@ -313,71 +263,18 @@ const collectDeletableLocalKeys = async (existingKeys, desiredKeys, keyToLocalPa
|
|
|
313
263
|
}
|
|
314
264
|
return deletableKeys;
|
|
315
265
|
};
|
|
316
|
-
const
|
|
317
|
-
const desiredRootKey = buildDirectoryKey(entry.repoPath);
|
|
318
|
-
const desiredRootExists = desiredKeys.has(desiredRootKey);
|
|
319
|
-
if (desiredRootExists) {
|
|
320
|
-
await ensureMaterializedDirectoryPath(entry.localPath, fileMode);
|
|
321
|
-
}
|
|
322
|
-
const desiredDirectoryKeys = desiredRootExists
|
|
323
|
-
? buildDesiredDirectoryKeys(entry, desiredNodes)
|
|
324
|
-
: new Set();
|
|
325
|
-
await limitConcurrency(CONSTANTS.SYNC.DEFAULT_CONCURRENCY, [...desiredDirectoryKeys].sort((left, right) => {
|
|
326
|
-
return left.localeCompare(right);
|
|
327
|
-
}), async (directoryKey) => {
|
|
328
|
-
if (directoryKey === desiredRootKey) {
|
|
329
|
-
return;
|
|
330
|
-
}
|
|
331
|
-
const relativePath = directoryKey.slice(entry.repoPath.length + 1, -1);
|
|
332
|
-
await ensureMaterializedDirectoryPath(join(entry.localPath, ...relativePath.split("/")), fileMode);
|
|
333
|
-
});
|
|
334
|
-
let processedNodeCount = 0;
|
|
335
|
-
await limitConcurrency(CONSTANTS.SYNC.DEFAULT_CONCURRENCY, [...desiredNodes.keys()].sort((left, right) => {
|
|
336
|
-
return left.localeCompare(right);
|
|
337
|
-
}), async (relativePath) => {
|
|
338
|
-
const node = desiredNodes.get(relativePath);
|
|
339
|
-
if (node === undefined) {
|
|
340
|
-
return;
|
|
341
|
-
}
|
|
342
|
-
const targetNodePath = join(entry.localPath, ...relativePath.split("/"));
|
|
343
|
-
if (await isMaterializedFileLikeNodeCurrent(targetNodePath, node, fileMode)) {
|
|
344
|
-
return;
|
|
345
|
-
}
|
|
346
|
-
await stageAndReplaceFilePath(targetNodePath, node, reporter, fileMode);
|
|
347
|
-
processedNodeCount += 1;
|
|
348
|
-
if ((reporter?.level ?? 0) >= 4) {
|
|
349
|
-
reporter?.verbose(`updated local node ${posix.join(entry.repoPath, relativePath)}`);
|
|
350
|
-
}
|
|
351
|
-
else if (processedNodeCount % 100 === 0) {
|
|
352
|
-
reporter?.start(`Updated ${processedNodeCount} local nodes for ${entry.repoPath}...`);
|
|
353
|
-
}
|
|
354
|
-
});
|
|
355
|
-
const existingKeys = new Set();
|
|
356
|
-
const keyToLocalPath = new Map();
|
|
357
|
-
await countDeletedLocalNodes(entry, desiredKeys, config, existingKeys, reporter, keyToLocalPath);
|
|
358
|
-
const deletableKeys = await collectDeletableLocalKeys(existingKeys, desiredKeys, keyToLocalPath);
|
|
359
|
-
for (const key of deletableKeys) {
|
|
360
|
-
const localPath = keyToLocalPath.get(key);
|
|
361
|
-
if (localPath === undefined) {
|
|
362
|
-
continue;
|
|
363
|
-
}
|
|
364
|
-
await removePathAtomically(localPath);
|
|
365
|
-
reporter?.verbose(`removed stale local path ${key}`);
|
|
366
|
-
}
|
|
367
|
-
};
|
|
368
|
-
export const countDeletedLocalNodes = async (entry, desiredKeys, config, existingKeys = new Set(), reporter, keyToLocalPath, deletedKeys) => {
|
|
266
|
+
export const countDeletedLocalNodes = async (entry, desiredKeys, config, existingKeys = new Set(), keyToLocalPath, deletedKeys) => {
|
|
369
267
|
const rule = resolveSyncRule(config, entry.repoPath, config.activeProfile);
|
|
370
268
|
if (rule === undefined || rule.mode === "ignore") {
|
|
371
269
|
return 0;
|
|
372
270
|
}
|
|
373
|
-
const progressState = { scannedLocalNodeCount: 0 };
|
|
374
271
|
const childEntryPaths = entry.kind === "directory"
|
|
375
272
|
? collectChildEntryPaths(config, entry.repoPath)
|
|
376
273
|
: new Set();
|
|
377
274
|
const rootStats = entry.kind === "directory"
|
|
378
275
|
? await getFollowedPathStats(entry.localPath)
|
|
379
276
|
: await getPathStats(entry.localPath);
|
|
380
|
-
await collectLocalLeafKeys(entry.localPath, entry.repoPath, existingKeys, keyToLocalPath, childEntryPaths, undefined,
|
|
277
|
+
await collectLocalLeafKeys(entry.localPath, entry.repoPath, existingKeys, keyToLocalPath, childEntryPaths, undefined, rootStats);
|
|
381
278
|
const deletableKeys = await collectDeletableLocalKeys(existingKeys, desiredKeys, keyToLocalPath ?? new Map());
|
|
382
279
|
for (const key of deletableKeys) {
|
|
383
280
|
deletedKeys?.add(key);
|
|
@@ -392,7 +289,7 @@ export const collectChangedLocalPaths = async (entry, materialization, config) =
|
|
|
392
289
|
const existingKeys = new Set();
|
|
393
290
|
const keyToLocalPath = new Map();
|
|
394
291
|
const deletedKeys = new Set();
|
|
395
|
-
await countDeletedLocalNodes(entry, materialization.desiredKeys, config, existingKeys,
|
|
292
|
+
await countDeletedLocalNodes(entry, materialization.desiredKeys, config, existingKeys, keyToLocalPath, deletedKeys);
|
|
396
293
|
return [...deletedKeys]
|
|
397
294
|
.map((key) => {
|
|
398
295
|
return keyToLocalPath.get(key);
|
|
@@ -433,7 +330,7 @@ export const collectChangedLocalPaths = async (entry, materialization, config) =
|
|
|
433
330
|
const existingKeys = new Set();
|
|
434
331
|
const keyToLocalPath = new Map();
|
|
435
332
|
const deletedKeys = new Set();
|
|
436
|
-
await countDeletedLocalNodes(entry, materialization.desiredKeys, config, existingKeys,
|
|
333
|
+
await countDeletedLocalNodes(entry, materialization.desiredKeys, config, existingKeys, keyToLocalPath, deletedKeys);
|
|
437
334
|
for (const key of deletedKeys) {
|
|
438
335
|
const localPath = keyToLocalPath.get(key);
|
|
439
336
|
if (localPath !== undefined) {
|
|
@@ -445,25 +342,6 @@ export const collectChangedLocalPaths = async (entry, materialization, config) =
|
|
|
445
342
|
return left.localeCompare(right);
|
|
446
343
|
});
|
|
447
344
|
};
|
|
448
|
-
export const applyEntryMaterialization = async (entry, materialization, config, reporter) => {
|
|
449
|
-
const rule = resolveSyncRule(config, entry.repoPath, config.activeProfile);
|
|
450
|
-
if (rule === undefined || rule.mode === "ignore") {
|
|
451
|
-
return;
|
|
452
|
-
}
|
|
453
|
-
if (materialization.type === "absent") {
|
|
454
|
-
if (entry.kind === "directory") {
|
|
455
|
-
await reconcileMaterializedDirectoryPath(entry, materialization.desiredKeys, new Map(), config, reporter, entry.permission);
|
|
456
|
-
return;
|
|
457
|
-
}
|
|
458
|
-
await removePathAtomically(entry.localPath);
|
|
459
|
-
return;
|
|
460
|
-
}
|
|
461
|
-
if (materialization.type === "file") {
|
|
462
|
-
await stageAndReplaceFilePath(entry.localPath, materialization.node, reporter, entry.permission);
|
|
463
|
-
return;
|
|
464
|
-
}
|
|
465
|
-
await reconcileMaterializedDirectoryPath(entry, materialization.desiredKeys, materialization.nodes, config, reporter, entry.permission);
|
|
466
|
-
};
|
|
467
345
|
export const buildPullCounts = (materializations) => {
|
|
468
346
|
let decryptedFileCount = 0;
|
|
469
347
|
let directoryCount = 0;
|
|
@@ -508,4 +386,66 @@ export const buildPullCounts = (materializations) => {
|
|
|
508
386
|
symlinkCount,
|
|
509
387
|
};
|
|
510
388
|
};
|
|
511
|
-
|
|
389
|
+
const reconcileMaterializedDirectoryPath = async (entry, desiredKeys, desiredNodes, config, fileMode) => {
|
|
390
|
+
const desiredRootKey = buildDirectoryKey(entry.repoPath);
|
|
391
|
+
const desiredRootExists = desiredKeys.has(desiredRootKey);
|
|
392
|
+
if (desiredRootExists) {
|
|
393
|
+
await ensureMaterializedDirectoryPath(entry.localPath, fileMode);
|
|
394
|
+
}
|
|
395
|
+
const desiredDirectoryKeys = desiredRootExists
|
|
396
|
+
? buildDesiredDirectoryKeys(entry, desiredNodes)
|
|
397
|
+
: new Set();
|
|
398
|
+
await limitConcurrency(AppConstants.SYNC.DEFAULT_CONCURRENCY, [...desiredDirectoryKeys].sort((left, right) => {
|
|
399
|
+
return left.localeCompare(right);
|
|
400
|
+
}), async (directoryKey) => {
|
|
401
|
+
if (directoryKey === desiredRootKey) {
|
|
402
|
+
return;
|
|
403
|
+
}
|
|
404
|
+
const relativePath = directoryKey.slice(entry.repoPath.length + 1, -1);
|
|
405
|
+
await ensureMaterializedDirectoryPath(join(entry.localPath, ...relativePath.split("/")), fileMode);
|
|
406
|
+
});
|
|
407
|
+
await limitConcurrency(AppConstants.SYNC.DEFAULT_CONCURRENCY, [...desiredNodes.keys()].sort((left, right) => {
|
|
408
|
+
return left.localeCompare(right);
|
|
409
|
+
}), async (relativePath) => {
|
|
410
|
+
const node = desiredNodes.get(relativePath);
|
|
411
|
+
if (node === undefined) {
|
|
412
|
+
return;
|
|
413
|
+
}
|
|
414
|
+
const targetNodePath = join(entry.localPath, ...relativePath.split("/"));
|
|
415
|
+
if (await isMaterializedFileLikeNodeCurrent(targetNodePath, node, fileMode)) {
|
|
416
|
+
return;
|
|
417
|
+
}
|
|
418
|
+
await stageAndReplacePath(targetNodePath, node, fileMode);
|
|
419
|
+
});
|
|
420
|
+
const existingKeys = new Set();
|
|
421
|
+
const keyToLocalPath = new Map();
|
|
422
|
+
await countDeletedLocalNodes(entry, desiredKeys, config, existingKeys, keyToLocalPath);
|
|
423
|
+
const deletableKeys = await collectDeletableLocalKeys(existingKeys, desiredKeys, keyToLocalPath);
|
|
424
|
+
for (const key of deletableKeys) {
|
|
425
|
+
const localPath = keyToLocalPath.get(key);
|
|
426
|
+
if (localPath === undefined) {
|
|
427
|
+
continue;
|
|
428
|
+
}
|
|
429
|
+
await removePathAtomically(localPath);
|
|
430
|
+
}
|
|
431
|
+
};
|
|
432
|
+
export const applyEntryMaterialization = async (entry, materialization, config) => {
|
|
433
|
+
const rule = resolveSyncRule(config, entry.repoPath, config.activeProfile);
|
|
434
|
+
if (rule === undefined || rule.mode === "ignore") {
|
|
435
|
+
return;
|
|
436
|
+
}
|
|
437
|
+
if (materialization.type === "absent") {
|
|
438
|
+
if (entry.kind === "directory") {
|
|
439
|
+
await reconcileMaterializedDirectoryPath(entry, materialization.desiredKeys, new Map(), config, entry.permission);
|
|
440
|
+
return;
|
|
441
|
+
}
|
|
442
|
+
await removePathAtomically(entry.localPath);
|
|
443
|
+
return;
|
|
444
|
+
}
|
|
445
|
+
if (materialization.type === "file") {
|
|
446
|
+
await stageAndReplacePath(entry.localPath, materialization.node, entry.permission);
|
|
447
|
+
return;
|
|
448
|
+
}
|
|
449
|
+
await reconcileMaterializedDirectoryPath(entry, materialization.desiredKeys, materialization.nodes, config, entry.permission);
|
|
450
|
+
};
|
|
451
|
+
//# sourceMappingURL=pull-apply.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pull-apply.js","sourceRoot":"","sources":["../../src/services/pull-apply.ts"],"names":[],"mappings":"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"}
|
package/dist/services/pull.d.ts
CHANGED
|
@@ -1,19 +1,16 @@
|
|
|
1
|
-
import type
|
|
2
|
-
import {
|
|
3
|
-
import { type EffectiveSyncConfig } from "./runtime.ts";
|
|
1
|
+
import { buildPullCounts, type EntryMaterialization } from "./pull-apply.ts";
|
|
2
|
+
import { type EffectiveSyncConfig } from "./sync-context.ts";
|
|
4
3
|
export type PullRequest = Readonly<{
|
|
5
4
|
dryRun: boolean;
|
|
6
5
|
profile?: string;
|
|
7
6
|
}>;
|
|
8
7
|
export type PullResult = Readonly<{
|
|
9
|
-
configPath: string;
|
|
10
8
|
decryptedFileCount: number;
|
|
11
9
|
deletedLocalCount: number;
|
|
12
10
|
directoryCount: number;
|
|
13
11
|
dryRun: boolean;
|
|
14
12
|
plainFileCount: number;
|
|
15
13
|
symlinkCount: number;
|
|
16
|
-
syncDirectory: string;
|
|
17
14
|
}>;
|
|
18
15
|
export type PullPlan = Readonly<{
|
|
19
16
|
counts: ReturnType<typeof buildPullCounts>;
|
|
@@ -29,10 +26,10 @@ export type PreparedPull = Readonly<{
|
|
|
29
26
|
plan: PullPlan;
|
|
30
27
|
syncDirectory: string;
|
|
31
28
|
}>;
|
|
32
|
-
export declare const buildPullPlan: (config: EffectiveSyncConfig, syncDirectory: string
|
|
29
|
+
export declare const buildPullPlan: (config: EffectiveSyncConfig, syncDirectory: string) => Promise<PullPlan>;
|
|
33
30
|
export declare const buildPullPlanPreview: (plan: PullPlan) => string[];
|
|
34
|
-
export declare const buildPullResultFromPlan: (plan: PullPlan,
|
|
35
|
-
export declare const pullChanges: (request: PullRequest
|
|
36
|
-
export declare const preparePull: (request: PullRequest
|
|
37
|
-
export declare const applyPullPlan: (config: EffectiveSyncConfig, plan: PullPlan
|
|
31
|
+
export declare const buildPullResultFromPlan: (plan: PullPlan, dryRun: boolean) => PullResult;
|
|
32
|
+
export declare const pullChanges: (request: PullRequest) => Promise<PullResult>;
|
|
33
|
+
export declare const preparePull: (request: PullRequest) => Promise<PreparedPull>;
|
|
34
|
+
export declare const applyPullPlan: (config: EffectiveSyncConfig, plan: PullPlan) => Promise<void>;
|
|
38
35
|
//# sourceMappingURL=pull.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../../src/services/pull.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../../src/services/pull.ts"],"names":[],"mappings":"AAIA,OAAO,EAGL,eAAe,EAGf,KAAK,oBAAoB,EAC1B,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,KAAK,mBAAmB,EAGzB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,MAAM,WAAW,GAAG,QAAQ,CAAC;IACjC,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC;IAChC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,OAAO,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC,CAAC;AAEH,MAAM,MAAM,QAAQ,GAAG,QAAQ,CAAC;IAC9B,MAAM,EAAE,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;IAC3C,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACjC,YAAY,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAClC,gBAAgB,EAAE,SAAS,CAAC,oBAAoB,GAAG,SAAS,CAAC,EAAE,CAAC;IAChE,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC,CAAC,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC;IAClC,MAAM,EAAE,mBAAmB,CAAC;IAC5B,IAAI,EAAE,QAAQ,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC,CAAC;AAoEH,eAAO,MAAM,aAAa,GACxB,QAAQ,mBAAmB,EAC3B,eAAe,MAAM,KACpB,OAAO,CAAC,QAAQ,CAkElB,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAI,MAAM,QAAQ,aAKlD,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAClC,MAAM,QAAQ,EACd,QAAQ,OAAO,KACd,UAMF,CAAC;AAEF,eAAO,MAAM,WAAW,GACtB,SAAS,WAAW,KACnB,OAAO,CAAC,UAAU,CAQpB,CAAC;AAEF,eAAO,MAAM,WAAW,GACtB,SAAS,WAAW,KACnB,OAAO,CAAC,YAAY,CAetB,CAAC;AA6CF,eAAO,MAAM,aAAa,GACxB,QAAQ,mBAAmB,EAC3B,MAAM,QAAQ,kBAkBf,CAAC"}
|