@tinyrack/dotweave 0.44.0 → 0.46.0
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/dist/cli/init.d.ts.map +1 -1
- package/dist/cli/init.js +21 -13
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/platform-flags.d.ts +8 -0
- package/dist/cli/platform-flags.d.ts.map +1 -0
- package/dist/cli/platform-flags.js +85 -0
- package/dist/cli/platform-flags.js.map +1 -0
- package/dist/cli/track.d.ts.map +1 -1
- package/dist/cli/track.js +60 -14
- package/dist/cli/track.js.map +1 -1
- package/dist/services/init.d.ts +2 -0
- package/dist/services/init.d.ts.map +1 -1
- package/dist/services/init.js +17 -48
- package/dist/services/init.js.map +1 -1
- package/dist/services/track.d.ts +12 -3
- package/dist/services/track.d.ts.map +1 -1
- package/dist/services/track.js +156 -32
- package/dist/services/track.js.map +1 -1
- package/package.json +1 -1
package/dist/cli/init.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAmCxD,QAAA,MAAM,WAAW,qDA2Gf,CAAC;AAEH,eAAe,WAAW,CAAC"}
|
package/dist/cli/init.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { readFile } from "node:fs/promises";
|
|
1
2
|
import { buildCommand } from "@stricli/core";
|
|
2
3
|
import { resolveDefaultIdentityFile } from "#app/config/identity-file.ts";
|
|
3
4
|
import { resolveDotweaveHomeDirectoryFromEnv } from "#app/config/runtime-env.ts";
|
|
@@ -23,17 +24,23 @@ const formatAgeSummary = (result) => {
|
|
|
23
24
|
const initCommand = buildCommand({
|
|
24
25
|
docs: {
|
|
25
26
|
brief: "Initialize the git-backed sync directory",
|
|
26
|
-
fullDescription: "Create or connect the local dotweave repository under your dotweave app-data directory, then store the sync settings used by later pull and push operations. If you omit the repository argument, dotweave initializes a local git repository in the sync directory.",
|
|
27
|
+
fullDescription: "Create or connect the local dotweave repository under your dotweave app-data directory, then store the sync settings used by later pull and push operations. If local sync repository data already exists, init fails unless --force is provided. If you omit the repository argument, dotweave initializes a local git repository in the sync directory.",
|
|
27
28
|
},
|
|
28
29
|
async func(flags, repository) {
|
|
29
30
|
const logger = createCliLogger();
|
|
30
|
-
const
|
|
31
|
+
const keyFileContents = flags.keyFile === undefined
|
|
32
|
+
? undefined
|
|
33
|
+
: await readFile(flags.keyFile, "utf8");
|
|
34
|
+
const requestedKey = keyFileContents?.trim() || undefined;
|
|
35
|
+
const keyFileProvided = flags.keyFile !== undefined;
|
|
31
36
|
const identityFile = resolveDefaultIdentityFile(resolveDotweaveHomeDirectoryFromEnv());
|
|
32
37
|
const identityFileExists = await pathExists(identityFile);
|
|
38
|
+
const effectiveIdentityFileExists = flags.force === true ? false : identityFileExists;
|
|
33
39
|
const importingRepository = repository !== undefined && repository.trim() !== "";
|
|
34
40
|
const shouldPrompt = requestedKey === undefined &&
|
|
35
|
-
!
|
|
36
|
-
|
|
41
|
+
!keyFileProvided &&
|
|
42
|
+
!effectiveIdentityFileExists &&
|
|
43
|
+
importingRepository;
|
|
37
44
|
const promptedKey = shouldPrompt
|
|
38
45
|
? await ask(importingRepository
|
|
39
46
|
? "Enter the age private key for the existing repository: "
|
|
@@ -54,10 +61,11 @@ const initCommand = buildCommand({
|
|
|
54
61
|
: trimmedPromptedKey !== undefined && trimmedPromptedKey !== ""
|
|
55
62
|
? trimmedPromptedKey
|
|
56
63
|
: undefined,
|
|
64
|
+
force: flags.force === true,
|
|
57
65
|
generateAgeIdentity: !importingRepository &&
|
|
58
66
|
requestedKey === undefined &&
|
|
59
67
|
(trimmedPromptedKey === "" ||
|
|
60
|
-
(trimmedPromptedKey === undefined && !
|
|
68
|
+
(trimmedPromptedKey === undefined && !effectiveIdentityFileExists)),
|
|
61
69
|
recipients: [],
|
|
62
70
|
repository,
|
|
63
71
|
});
|
|
@@ -74,17 +82,17 @@ const initCommand = buildCommand({
|
|
|
74
82
|
},
|
|
75
83
|
parameters: {
|
|
76
84
|
flags: {
|
|
77
|
-
|
|
78
|
-
brief: "
|
|
79
|
-
kind: "
|
|
85
|
+
force: {
|
|
86
|
+
brief: "Replace existing local sync repository, identity, and settings before initializing",
|
|
87
|
+
kind: "boolean",
|
|
80
88
|
optional: true,
|
|
81
|
-
parse: String,
|
|
82
|
-
placeholder: "age-private-key",
|
|
83
89
|
},
|
|
84
|
-
|
|
85
|
-
brief: "
|
|
86
|
-
kind: "
|
|
90
|
+
keyFile: {
|
|
91
|
+
brief: "Read an age private key from a file",
|
|
92
|
+
kind: "parsed",
|
|
87
93
|
optional: true,
|
|
94
|
+
parse: String,
|
|
95
|
+
placeholder: "path",
|
|
88
96
|
},
|
|
89
97
|
},
|
|
90
98
|
positional: {
|
package/dist/cli/init.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { PlatformStringValue } from "#app/config/platform.ts";
|
|
2
|
+
import type { PlatformPermission, PlatformSyncMode } from "#app/config/sync-schema.ts";
|
|
3
|
+
export type PlatformFlagKey = "default" | "win" | "mac" | "linux" | "wsl";
|
|
4
|
+
export declare const parsePlatformStringFlags: (flagName: string, values: readonly string[] | undefined) => PlatformStringValue | undefined;
|
|
5
|
+
export declare const parsePlatformStringOverrideFlags: (flagName: string, values: readonly string[] | undefined) => Partial<PlatformStringValue> | undefined;
|
|
6
|
+
export declare const parsePlatformModeFlags: (flagName: string, values: readonly string[] | undefined) => PlatformSyncMode | undefined;
|
|
7
|
+
export declare const parsePlatformPermissionFlags: (flagName: string, values: readonly string[] | undefined) => PlatformPermission | undefined;
|
|
8
|
+
//# sourceMappingURL=platform-flags.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform-flags.d.ts","sourceRoot":"","sources":["../../src/cli/platform-flags.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,KAAK,EACV,kBAAkB,EAClB,gBAAgB,EAEjB,MAAM,4BAA4B,CAAC;AAIpC,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,KAAK,GAAG,KAAK,GAAG,OAAO,GAAG,KAAK,CAAC;AA8E1E,eAAO,MAAM,wBAAwB,GACnC,UAAU,MAAM,EAChB,QAAQ,SAAS,MAAM,EAAE,GAAG,SAAS,KACpC,mBAAmB,GAAG,SAIxB,CAAC;AAEF,eAAO,MAAM,gCAAgC,GAC3C,UAAU,MAAM,EAChB,QAAQ,SAAS,MAAM,EAAE,GAAG,SAAS,KACpC,OAAO,CAAC,mBAAmB,CAAC,GAAG,SAIjC,CAAC;AAEF,eAAO,MAAM,sBAAsB,GACjC,UAAU,MAAM,EAChB,QAAQ,SAAS,MAAM,EAAE,GAAG,SAAS,KACpC,gBAAgB,GAAG,SAcrB,CAAC;AAEF,eAAO,MAAM,4BAA4B,GACvC,UAAU,MAAM,EAChB,QAAQ,SAAS,MAAM,EAAE,GAAG,SAAS,KACpC,kBAAkB,GAAG,SAiBvB,CAAC"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { AppConstants } from "#app/config/constants.ts";
|
|
2
|
+
import { DotweaveError } from "#app/lib/error.ts";
|
|
3
|
+
import { isPermissionOctal } from "#app/lib/file-mode.ts";
|
|
4
|
+
const platformFlagKeys = new Set([
|
|
5
|
+
"default",
|
|
6
|
+
"win",
|
|
7
|
+
"mac",
|
|
8
|
+
"linux",
|
|
9
|
+
"wsl",
|
|
10
|
+
]);
|
|
11
|
+
const syncModes = new Set(AppConstants.SYNC.MODES);
|
|
12
|
+
const parsePlatformFlagValues = (flagName, values, options) => {
|
|
13
|
+
if (values === undefined || values.length === 0) {
|
|
14
|
+
return undefined;
|
|
15
|
+
}
|
|
16
|
+
const parsed = {};
|
|
17
|
+
for (const rawValue of values) {
|
|
18
|
+
const separatorIndex = rawValue.indexOf("=");
|
|
19
|
+
const key = separatorIndex === -1 ? "default" : rawValue.slice(0, separatorIndex);
|
|
20
|
+
const value = separatorIndex === -1 ? rawValue : rawValue.slice(separatorIndex + 1);
|
|
21
|
+
if (key.length === 0 ||
|
|
22
|
+
value.length === 0 ||
|
|
23
|
+
!platformFlagKeys.has(key) ||
|
|
24
|
+
(!options.allowDefault && key === "default")) {
|
|
25
|
+
throw new DotweaveError(`Invalid --${flagName} platform value.`, {
|
|
26
|
+
code: "INVALID_PLATFORM_FLAG",
|
|
27
|
+
hint: options.allowDefault
|
|
28
|
+
? `Use --${flagName} value or --${flagName} platform=value.`
|
|
29
|
+
: `Use --${flagName} platform=value with win, mac, linux, or wsl.`,
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
const platformKey = key;
|
|
33
|
+
if (parsed[platformKey] !== undefined) {
|
|
34
|
+
throw new DotweaveError(`Duplicate --${flagName} platform value.`, {
|
|
35
|
+
code: "DUPLICATE_PLATFORM_FLAG",
|
|
36
|
+
details: [`Platform '${platformKey}' was specified more than once.`],
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
parsed[platformKey] = value;
|
|
40
|
+
}
|
|
41
|
+
return parsed;
|
|
42
|
+
};
|
|
43
|
+
const mapPlatformValues = (parsed, validate) => {
|
|
44
|
+
if (parsed === undefined) {
|
|
45
|
+
return undefined;
|
|
46
|
+
}
|
|
47
|
+
const mapped = {};
|
|
48
|
+
for (const [key, value] of Object.entries(parsed)) {
|
|
49
|
+
mapped[key] = validate(value);
|
|
50
|
+
}
|
|
51
|
+
return mapped;
|
|
52
|
+
};
|
|
53
|
+
export const parsePlatformStringFlags = (flagName, values) => {
|
|
54
|
+
return parsePlatformFlagValues(flagName, values, {
|
|
55
|
+
allowDefault: true,
|
|
56
|
+
});
|
|
57
|
+
};
|
|
58
|
+
export const parsePlatformStringOverrideFlags = (flagName, values) => {
|
|
59
|
+
return parsePlatformFlagValues(flagName, values, {
|
|
60
|
+
allowDefault: false,
|
|
61
|
+
});
|
|
62
|
+
};
|
|
63
|
+
export const parsePlatformModeFlags = (flagName, values) => {
|
|
64
|
+
return mapPlatformValues(parsePlatformFlagValues(flagName, values, { allowDefault: true }), (value) => {
|
|
65
|
+
if (!syncModes.has(value)) {
|
|
66
|
+
throw new DotweaveError(`Invalid --${flagName} mode '${value}'.`, {
|
|
67
|
+
code: "INVALID_SYNC_MODE",
|
|
68
|
+
hint: `Use one of: ${AppConstants.SYNC.MODES.join(", ")}.`,
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
return value;
|
|
72
|
+
});
|
|
73
|
+
};
|
|
74
|
+
export const parsePlatformPermissionFlags = (flagName, values) => {
|
|
75
|
+
return mapPlatformValues(parsePlatformFlagValues(flagName, values, { allowDefault: true }), (value) => {
|
|
76
|
+
if (!isPermissionOctal(value)) {
|
|
77
|
+
throw new DotweaveError(`Invalid --${flagName} permission '${value}'.`, {
|
|
78
|
+
code: "INVALID_PERMISSION",
|
|
79
|
+
hint: "Use a 4-character octal permission like '0600' or '0755'.",
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
return value;
|
|
83
|
+
});
|
|
84
|
+
};
|
|
85
|
+
//# sourceMappingURL=platform-flags.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform-flags.js","sourceRoot":"","sources":["../../src/cli/platform-flags.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/track.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"track.d.ts","sourceRoot":"","sources":["../../src/cli/track.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"track.d.ts","sourceRoot":"","sources":["../../src/cli/track.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAsCxD,QAAA,MAAM,YAAY,qDAuLhB,CAAC;AAEH,eAAe,YAAY,CAAC"}
|
package/dist/cli/track.js
CHANGED
|
@@ -6,29 +6,42 @@ import { setTargetMode } from "#app/services/sync-mode.ts";
|
|
|
6
6
|
import { createCliLogger } from "#app/services/terminal/logger.ts";
|
|
7
7
|
import { proposePathCompletions } from "#app/services/terminal/path-completion.ts";
|
|
8
8
|
import { trackTarget } from "#app/services/track.ts";
|
|
9
|
+
import { parsePlatformModeFlags, parsePlatformPermissionFlags, parsePlatformStringFlags, parsePlatformStringOverrideFlags, } from "./platform-flags.js";
|
|
10
|
+
const normalizeFlagValues = (values) => {
|
|
11
|
+
if (values === undefined) {
|
|
12
|
+
return undefined;
|
|
13
|
+
}
|
|
14
|
+
return typeof values === "string" ? [values] : values;
|
|
15
|
+
};
|
|
9
16
|
const trackCommand = buildCommand({
|
|
10
17
|
docs: {
|
|
11
18
|
brief: "Track local files or directories for syncing",
|
|
12
|
-
fullDescription: "Register
|
|
19
|
+
fullDescription: "Register a file or directory inside your home directory so dotweave can mirror it into the sync directory. If a target is already tracked, specified manifest fields are updated and unspecified fields are preserved.",
|
|
13
20
|
},
|
|
14
21
|
async func(flags, ...targets) {
|
|
15
22
|
const logger = createCliLogger();
|
|
16
23
|
const profiles = [...(flags.profile ?? [])];
|
|
17
24
|
const cwd = process.cwd();
|
|
18
|
-
if (flags.
|
|
19
|
-
throw new DotweaveError("The --repo
|
|
25
|
+
if (flags.repo !== undefined && targets.length !== 1) {
|
|
26
|
+
throw new DotweaveError("The --repo flag can only be used with a single sync target.", {
|
|
20
27
|
code: "REPO_PATH_TARGET_COUNT",
|
|
21
28
|
hint: "Track one target at a time when overriding its repository path.",
|
|
22
29
|
});
|
|
23
30
|
}
|
|
31
|
+
const mode = parsePlatformModeFlags("mode", normalizeFlagValues(flags.mode));
|
|
32
|
+
const fallbackMode = mode?.default ?? AppConstants.SYNC.MODES[0];
|
|
33
|
+
const repoPath = parsePlatformStringFlags("repo", normalizeFlagValues(flags.repo));
|
|
34
|
+
const localPathOverrides = parsePlatformStringOverrideFlags("local", normalizeFlagValues(flags.local));
|
|
35
|
+
const permission = parsePlatformPermissionFlags("permission", normalizeFlagValues(flags.permission));
|
|
24
36
|
for (const target of targets) {
|
|
25
37
|
try {
|
|
26
38
|
const result = await trackTarget({
|
|
27
|
-
|
|
39
|
+
...(flags.kind === undefined ? {} : { kind: flags.kind }),
|
|
40
|
+
...(localPathOverrides === undefined ? {} : { localPathOverrides }),
|
|
41
|
+
...(mode === undefined ? {} : { mode }),
|
|
42
|
+
...(permission === undefined ? {} : { permission }),
|
|
28
43
|
profiles: profiles.length > 0 ? profiles : undefined,
|
|
29
|
-
...(
|
|
30
|
-
? {}
|
|
31
|
-
: { repoPath: flags.repoPath }),
|
|
44
|
+
...(repoPath === undefined ? {} : { repoPath }),
|
|
32
45
|
target,
|
|
33
46
|
}, cwd);
|
|
34
47
|
if (!result.alreadyTracked) {
|
|
@@ -41,23 +54,31 @@ const trackCommand = buildCommand({
|
|
|
41
54
|
logger.info(`${result.repoPath} already tracked`);
|
|
42
55
|
}
|
|
43
56
|
const details = [
|
|
57
|
+
{ key: "kind", value: result.kind },
|
|
44
58
|
{ key: "path", value: result.localPath },
|
|
59
|
+
{ key: "repo", value: result.repoPath },
|
|
45
60
|
{ key: "mode", value: result.mode },
|
|
46
61
|
];
|
|
62
|
+
if (result.configuredPermission !== undefined) {
|
|
63
|
+
details.push({
|
|
64
|
+
key: "permission",
|
|
65
|
+
value: result.configuredPermission.default,
|
|
66
|
+
});
|
|
67
|
+
}
|
|
47
68
|
if (result.profiles.length > 0) {
|
|
48
69
|
details.push({ key: "profiles", value: result.profiles.join(", ") });
|
|
49
70
|
}
|
|
50
71
|
logger.listKeyValue(details);
|
|
51
72
|
}
|
|
52
73
|
catch (error) {
|
|
53
|
-
if (
|
|
74
|
+
if (repoPath === undefined &&
|
|
54
75
|
error instanceof DotweaveError &&
|
|
55
76
|
error.code === "TARGET_NOT_FOUND") {
|
|
56
77
|
const isProfileClear = profiles.length === 1 && profiles[0] === "";
|
|
57
78
|
if (profiles.length > 0 && !isProfileClear) {
|
|
58
79
|
await validateProfilesExist(profiles);
|
|
59
80
|
}
|
|
60
|
-
const setResult = await setTargetMode({ mode:
|
|
81
|
+
const setResult = await setTargetMode({ mode: fallbackMode, target }, cwd);
|
|
61
82
|
if (profiles.length > 0) {
|
|
62
83
|
await assignProfiles({ profiles: isProfileClear ? [] : profiles, target }, cwd);
|
|
63
84
|
}
|
|
@@ -79,11 +100,27 @@ const trackCommand = buildCommand({
|
|
|
79
100
|
},
|
|
80
101
|
parameters: {
|
|
81
102
|
flags: {
|
|
103
|
+
kind: {
|
|
104
|
+
brief: "Target kind to use when the path does not exist yet",
|
|
105
|
+
kind: "enum",
|
|
106
|
+
optional: true,
|
|
107
|
+
values: ["file", "directory"],
|
|
108
|
+
},
|
|
82
109
|
mode: {
|
|
83
110
|
brief: "Sync mode for the tracked targets",
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
111
|
+
kind: "parsed",
|
|
112
|
+
optional: true,
|
|
113
|
+
parse: String,
|
|
114
|
+
placeholder: "mode|platform=mode",
|
|
115
|
+
variadic: true,
|
|
116
|
+
},
|
|
117
|
+
permission: {
|
|
118
|
+
brief: "File permission to restore, as a 4-character octal value",
|
|
119
|
+
kind: "parsed",
|
|
120
|
+
optional: true,
|
|
121
|
+
parse: String,
|
|
122
|
+
placeholder: "octal|platform=octal",
|
|
123
|
+
variadic: true,
|
|
87
124
|
},
|
|
88
125
|
profile: {
|
|
89
126
|
brief: "Restrict syncing to registered profiles (add non-default profiles with 'dotweave profile add')",
|
|
@@ -93,12 +130,21 @@ const trackCommand = buildCommand({
|
|
|
93
130
|
placeholder: "profile",
|
|
94
131
|
variadic: true,
|
|
95
132
|
},
|
|
96
|
-
|
|
133
|
+
local: {
|
|
134
|
+
brief: "Platform-specific local path override",
|
|
135
|
+
kind: "parsed",
|
|
136
|
+
optional: true,
|
|
137
|
+
parse: String,
|
|
138
|
+
placeholder: "platform=path",
|
|
139
|
+
variadic: true,
|
|
140
|
+
},
|
|
141
|
+
repo: {
|
|
97
142
|
brief: "Repository-relative path under the profile namespace",
|
|
98
143
|
kind: "parsed",
|
|
99
144
|
optional: true,
|
|
100
145
|
parse: String,
|
|
101
|
-
placeholder: "path",
|
|
146
|
+
placeholder: "path|platform=path",
|
|
147
|
+
variadic: true,
|
|
102
148
|
},
|
|
103
149
|
},
|
|
104
150
|
positional: {
|
package/dist/cli/track.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"track.js","sourceRoot":"","sources":["../../src/cli/track.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EACL,cAAc,EACd,qBAAqB,GACtB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,2CAA2C,CAAC;AACnF,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"track.js","sourceRoot":"","sources":["../../src/cli/track.ts"],"names":[],"mappings":"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"}
|
package/dist/services/init.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { DotweaveError } from "#app/lib/error.ts";
|
|
2
2
|
export type InitRequest = Readonly<{
|
|
3
3
|
ageIdentity?: string;
|
|
4
|
+
force?: boolean;
|
|
4
5
|
generateAgeIdentity?: boolean;
|
|
5
6
|
identityFile?: string;
|
|
6
7
|
recipients: readonly string[];
|
|
@@ -16,5 +17,6 @@ export type InitResult = Readonly<{
|
|
|
16
17
|
recipientCount: number;
|
|
17
18
|
}>;
|
|
18
19
|
export declare const createMissingRepositoryAgeKeyError: () => DotweaveError;
|
|
20
|
+
export declare const createAlreadyInitializedError: (syncDirectory: string) => DotweaveError;
|
|
19
21
|
export declare const initializeSyncDirectory: (request: InitRequest) => Promise<InitResult>;
|
|
20
22
|
//# sourceMappingURL=init.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/services/init.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/services/init.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAE,aAAa,EAAoB,MAAM,mBAAmB,CAAC;AAUpE,MAAM,MAAM,WAAW,GAAG,QAAQ,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC;IAChC,kBAAkB,EAAE,OAAO,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,QAAQ,GAAG,UAAU,GAAG,aAAa,CAAC;IACjD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC,CAAC;AAKH,eAAO,MAAM,kCAAkC,qBAQ9C,CAAC;AAEF,eAAO,MAAM,6BAA6B,GAAI,eAAe,MAAM,kBAMlE,CAAC;AAkGF,eAAO,MAAM,uBAAuB,GAClC,SAAS,WAAW,KACnB,OAAO,CAAC,UAAU,CA6IpB,CAAC"}
|
package/dist/services/init.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { mkdir, readdir, readFile, writeFile } from "node:fs/promises";
|
|
1
|
+
import { mkdir, readdir, readFile, rm, writeFile } from "node:fs/promises";
|
|
2
2
|
import { dirname, join } from "node:path";
|
|
3
3
|
import { AppConstants } from "#app/config/constants.ts";
|
|
4
4
|
import { formatGlobalDotweaveConfig, readGlobalDotweaveConfig, } from "#app/config/global-config.ts";
|
|
@@ -8,7 +8,7 @@ import { createInitialSyncConfig, formatSyncConfig, parseSyncConfig, readSyncCon
|
|
|
8
8
|
import { createAgeIdentityFile, readAgeRecipientsFromIdentityFile, writeAgeIdentityFile, } from "#app/lib/crypto.ts";
|
|
9
9
|
import { DotweaveError, wrapUnknownError } from "#app/lib/error.ts";
|
|
10
10
|
import { pathExists, writeTextFileAtomically } from "#app/lib/filesystem.ts";
|
|
11
|
-
import { initializeRepository,
|
|
11
|
+
import { initializeRepository, verifyIsGitRepository } from "#app/lib/git.ts";
|
|
12
12
|
import { validateJsoncConfigPath } from "#app/lib/jsonc.ts";
|
|
13
13
|
import { resolveAgeFromSyncConfig, resolveSyncConfigResolutionContext, resolveSyncPaths, } from "./sync-context.js";
|
|
14
14
|
const gitAttributesFileName = ".gitattributes";
|
|
@@ -16,7 +16,14 @@ const gitAttributesContents = "* -text\n";
|
|
|
16
16
|
export const createMissingRepositoryAgeKeyError = () => {
|
|
17
17
|
return new DotweaveError("Existing repository setup requires an age private key.", {
|
|
18
18
|
code: "INIT_AGE_IDENTITY_REQUIRED",
|
|
19
|
-
hint: "Provide your existing age private key with '--key' or
|
|
19
|
+
hint: "Provide your existing age private key with '--key-file', or enter it when prompted in an interactive terminal.",
|
|
20
|
+
});
|
|
21
|
+
};
|
|
22
|
+
export const createAlreadyInitializedError = (syncDirectory) => {
|
|
23
|
+
return new DotweaveError("Sync directory is already initialized.", {
|
|
24
|
+
code: "INIT_ALREADY_INITIALIZED",
|
|
25
|
+
details: [`Sync directory: ${syncDirectory}`],
|
|
26
|
+
hint: "Use 'dotweave init --force' to replace the local sync repository data.",
|
|
20
27
|
});
|
|
21
28
|
};
|
|
22
29
|
const normalizeRecipients = (recipients) => {
|
|
@@ -68,36 +75,6 @@ const resolveInitAgeBootstrap = async (request) => {
|
|
|
68
75
|
recipients: normalizeRecipients([...explicitRecipients, recipient]),
|
|
69
76
|
};
|
|
70
77
|
};
|
|
71
|
-
const assertRecipientMatch = (age, request) => {
|
|
72
|
-
if (age === undefined) {
|
|
73
|
-
return;
|
|
74
|
-
}
|
|
75
|
-
const recipients = normalizeRecipients(request.recipients);
|
|
76
|
-
if (recipients.length > 0 &&
|
|
77
|
-
JSON.stringify(recipients) !==
|
|
78
|
-
JSON.stringify(normalizeRecipients([...age.recipients]))) {
|
|
79
|
-
throw new DotweaveError("Sync configuration already exists with different age recipients.", {
|
|
80
|
-
code: "INIT_RECIPIENT_MISMATCH",
|
|
81
|
-
details: [
|
|
82
|
-
`Requested recipients: ${recipients.join(", ") || "(none)"}`,
|
|
83
|
-
`Configured recipients: ${normalizeRecipients([...age.recipients]).join(", ")}`,
|
|
84
|
-
],
|
|
85
|
-
hint: `Use the existing recipients, or update ${AppConstants.SYNC.CONFIG_FILE_NAME} manually if you intend to rotate recipients.`,
|
|
86
|
-
});
|
|
87
|
-
}
|
|
88
|
-
};
|
|
89
|
-
const buildAlreadyInitializedResult = (config, base) => {
|
|
90
|
-
const age = config.age !== undefined ? resolveAgeFromSyncConfig(config.age) : undefined;
|
|
91
|
-
return {
|
|
92
|
-
alreadyInitialized: true,
|
|
93
|
-
entryCount: config.entries.length,
|
|
94
|
-
gitAction: base.gitAction,
|
|
95
|
-
...(base.gitSource === undefined ? {} : { gitSource: base.gitSource }),
|
|
96
|
-
generatedIdentity: false,
|
|
97
|
-
identityFile: age?.identityFile ?? "",
|
|
98
|
-
recipientCount: age?.recipients.length ?? 0,
|
|
99
|
-
};
|
|
100
|
-
};
|
|
101
78
|
const writeGlobalSettings = async (globalConfigPath) => {
|
|
102
79
|
const existingGlobalConfig = await readGlobalDotweaveConfig(globalConfigPath);
|
|
103
80
|
const globalConfigToWrite = {
|
|
@@ -120,9 +97,14 @@ const ensureManagedRepositoryAttributes = async (syncDirectory) => {
|
|
|
120
97
|
export const initializeSyncDirectory = async (request) => {
|
|
121
98
|
const { syncDirectory, configPath, globalConfigPath } = resolveSyncPaths();
|
|
122
99
|
const context = resolveSyncConfigResolutionContext();
|
|
100
|
+
const identityFile = resolveDefaultIdentityFile(resolveDotweaveHomeDirectoryFromEnv());
|
|
101
|
+
if (request.force === true) {
|
|
102
|
+
await rm(syncDirectory, { force: true, recursive: true });
|
|
103
|
+
await rm(identityFile, { force: true });
|
|
104
|
+
await rm(globalConfigPath, { force: true });
|
|
105
|
+
}
|
|
123
106
|
const resolvedConfigPath = await validateJsoncConfigPath(configPath);
|
|
124
107
|
const configExists = await pathExists(resolvedConfigPath);
|
|
125
|
-
const identityFile = resolveDefaultIdentityFile(resolveDotweaveHomeDirectoryFromEnv());
|
|
126
108
|
const importingRepository = request.repository !== undefined && request.repository.trim() !== "";
|
|
127
109
|
if (importingRepository &&
|
|
128
110
|
request.ageIdentity === undefined &&
|
|
@@ -130,14 +112,7 @@ export const initializeSyncDirectory = async (request) => {
|
|
|
130
112
|
throw createMissingRepositoryAgeKeyError();
|
|
131
113
|
}
|
|
132
114
|
if (configExists) {
|
|
133
|
-
|
|
134
|
-
await ensureManagedRepositoryAttributes(syncDirectory);
|
|
135
|
-
const config = await readSyncConfig(syncDirectory, context);
|
|
136
|
-
assertRecipientMatch(config.age, request);
|
|
137
|
-
await resolveInitAgeBootstrap(request);
|
|
138
|
-
return buildAlreadyInitializedResult(config, {
|
|
139
|
-
gitAction: "existing",
|
|
140
|
-
});
|
|
115
|
+
throw createAlreadyInitializedError(syncDirectory);
|
|
141
116
|
}
|
|
142
117
|
await mkdir(dirname(syncDirectory), {
|
|
143
118
|
recursive: true,
|
|
@@ -190,12 +165,6 @@ export const initializeSyncDirectory = async (request) => {
|
|
|
190
165
|
if (await pathExists(await validateJsoncConfigPath(configPath))) {
|
|
191
166
|
const config = await readSyncConfig(syncDirectory, context);
|
|
192
167
|
const ageBootstrap = await resolveInitAgeBootstrap(request);
|
|
193
|
-
if (configExists) {
|
|
194
|
-
return buildAlreadyInitializedResult(config, {
|
|
195
|
-
gitAction,
|
|
196
|
-
gitSource,
|
|
197
|
-
});
|
|
198
|
-
}
|
|
199
168
|
await writeGlobalSettings(globalConfigPath);
|
|
200
169
|
const age = config.age !== undefined
|
|
201
170
|
? resolveAgeFromSyncConfig(config.age)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/services/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/services/init.ts"],"names":[],"mappings":"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"}
|
package/dist/services/track.d.ts
CHANGED
|
@@ -1,17 +1,26 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type PlatformStringValue } from "#app/config/platform.ts";
|
|
2
|
+
import { type PlatformPermission, type PlatformSyncMode, type SyncConfigEntryKind, type SyncMode } from "#app/config/sync-schema.ts";
|
|
2
3
|
export type TrackRequest = Readonly<{
|
|
4
|
+
kind?: SyncConfigEntryKind;
|
|
5
|
+
localPathOverrides?: Partial<PlatformStringValue>;
|
|
3
6
|
profiles?: readonly string[];
|
|
4
|
-
mode
|
|
5
|
-
|
|
7
|
+
mode?: SyncMode | Partial<PlatformSyncMode>;
|
|
8
|
+
permission?: PlatformPermission;
|
|
9
|
+
repoPath?: Partial<PlatformStringValue>;
|
|
6
10
|
target: string;
|
|
7
11
|
}>;
|
|
8
12
|
export type TrackResult = Readonly<{
|
|
9
13
|
alreadyTracked: boolean;
|
|
10
14
|
changed: boolean;
|
|
15
|
+
configuredLocalPath: PlatformStringValue;
|
|
16
|
+
configuredMode: PlatformSyncMode;
|
|
11
17
|
kind: SyncConfigEntryKind;
|
|
12
18
|
localPath: string;
|
|
13
19
|
profiles: readonly string[];
|
|
14
20
|
mode: SyncMode;
|
|
21
|
+
permission?: number;
|
|
22
|
+
configuredPermission?: PlatformPermission;
|
|
23
|
+
configuredRepoPath?: PlatformStringValue;
|
|
15
24
|
repoPath: string;
|
|
16
25
|
}>;
|
|
17
26
|
export declare const trackTarget: (request: TrackRequest, cwd: string) => Promise<TrackResult>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"track.d.ts","sourceRoot":"","sources":["../../src/services/track.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"track.d.ts","sourceRoot":"","sources":["../../src/services/track.ts"],"names":[],"mappings":"AAIA,OAAO,EAEL,KAAK,mBAAmB,EAEzB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EAGL,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EAErB,KAAK,mBAAmB,EACxB,KAAK,QAAQ,EACd,MAAM,4BAA4B,CAAC;AAgBpC,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC;IAClC,IAAI,CAAC,EAAE,mBAAmB,CAAC;IAC3B,kBAAkB,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAClD,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B,IAAI,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC5C,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAChC,QAAQ,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACxC,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,QAAQ,CAAC;IACjC,cAAc,EAAE,OAAO,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,cAAc,EAAE,gBAAgB,CAAC;IACjC,IAAI,EAAE,mBAAmB,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,IAAI,EAAE,QAAQ,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oBAAoB,CAAC,EAAE,kBAAkB,CAAC;IAC1C,kBAAkB,CAAC,EAAE,mBAAmB,CAAC;IACzC,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC,CAAC;AAuNH,eAAO,MAAM,WAAW,GACtB,SAAS,YAAY,EACrB,KAAK,MAAM,KACV,OAAO,CAAC,WAAW,CA0PrB,CAAC"}
|
package/dist/services/track.js
CHANGED
|
@@ -1,29 +1,58 @@
|
|
|
1
1
|
import { resolve } from "node:path";
|
|
2
2
|
import { AppConstants } from "#app/config/constants.ts";
|
|
3
3
|
import { resolveDefaultIdentityFile } from "#app/config/identity-file.ts";
|
|
4
|
+
import { resolvePlatformValue, } from "#app/config/platform.ts";
|
|
4
5
|
import { resolveDotweaveHomeDirectoryFromEnv } from "#app/config/runtime-env.ts";
|
|
5
|
-
import { buildDefaultPlatformMode
|
|
6
|
+
import { buildDefaultPlatformMode } from "#app/config/sync-queries.ts";
|
|
6
7
|
import { normalizeSyncProfileName, normalizeSyncRepoPath, } from "#app/config/sync-schema.ts";
|
|
7
8
|
import { expandHomePath } from "#app/config/xdg.ts";
|
|
8
9
|
import { DotweaveError } from "#app/lib/error.ts";
|
|
10
|
+
import { parsePermissionOctal } from "#app/lib/file-mode.ts";
|
|
9
11
|
import { getPathStats } from "#app/lib/filesystem.ts";
|
|
10
12
|
import { doPathsOverlap } from "#app/lib/path.ts";
|
|
11
13
|
import { buildSyncConfigDocument, writeValidatedSyncConfig, } from "./config-file.js";
|
|
12
14
|
import { loadWritableSyncConfig } from "./sync-context.js";
|
|
13
15
|
import { buildConfiguredHomeLocalPath, buildRepoPathWithinRoot, } from "./sync-paths.js";
|
|
14
|
-
const
|
|
15
|
-
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
const platformKeys = ["default", "win", "mac", "linux", "wsl"];
|
|
17
|
+
const normalizePlatformRepoPath = (repoPath) => {
|
|
18
|
+
const normalized = {};
|
|
19
|
+
for (const key of platformKeys) {
|
|
20
|
+
if (repoPath[key] !== undefined) {
|
|
21
|
+
normalized[key] = normalizeSyncRepoPath(repoPath[key]);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return normalized;
|
|
25
|
+
};
|
|
26
|
+
const resolvePlatformMode = (configuredMode, platformKey) => {
|
|
27
|
+
if (platformKey === "wsl") {
|
|
28
|
+
return configuredMode.wsl ?? configuredMode.linux ?? configuredMode.default;
|
|
29
|
+
}
|
|
30
|
+
return configuredMode[platformKey] ?? configuredMode.default;
|
|
31
|
+
};
|
|
32
|
+
const buildConfiguredMode = (requestedMode, existingMode) => {
|
|
33
|
+
const base = existingMode ?? buildDefaultPlatformMode(AppConstants.SYNC.MODES[0]);
|
|
34
|
+
const patch = requestedMode === undefined
|
|
35
|
+
? {}
|
|
36
|
+
: typeof requestedMode === "string"
|
|
37
|
+
? buildDefaultPlatformMode(requestedMode)
|
|
38
|
+
: requestedMode;
|
|
39
|
+
return { ...base, ...patch };
|
|
40
|
+
};
|
|
41
|
+
const mergePlatformStringValue = (base, patch) => {
|
|
42
|
+
return { ...base, ...patch };
|
|
43
|
+
};
|
|
44
|
+
const resolveTargetKind = (targetPath, targetStats, requestedKind) => {
|
|
19
45
|
if (targetStats === undefined) {
|
|
20
|
-
|
|
21
|
-
|
|
46
|
+
if (requestedKind !== undefined) {
|
|
47
|
+
return requestedKind;
|
|
48
|
+
}
|
|
49
|
+
throw new DotweaveError("Sync target kind is required.", {
|
|
50
|
+
code: "TARGET_KIND_REQUIRED",
|
|
22
51
|
details: [`Target: ${targetPath}`],
|
|
23
|
-
hint: "
|
|
52
|
+
hint: "Pass --kind file or --kind directory when tracking a path that does not exist yet.",
|
|
24
53
|
});
|
|
25
54
|
}
|
|
26
|
-
const
|
|
55
|
+
const actualKind = (() => {
|
|
27
56
|
if (targetStats.isDirectory()) {
|
|
28
57
|
return "directory";
|
|
29
58
|
}
|
|
@@ -36,6 +65,22 @@ const buildTrackEntryCandidate = async (targetPath, syncDirectory, homeDirectory
|
|
|
36
65
|
hint: "Track a regular file, symlink, or directory.",
|
|
37
66
|
});
|
|
38
67
|
})();
|
|
68
|
+
if (requestedKind !== undefined && requestedKind !== actualKind) {
|
|
69
|
+
throw new DotweaveError("Sync target kind does not match the path.", {
|
|
70
|
+
code: "TARGET_KIND_MISMATCH",
|
|
71
|
+
details: [
|
|
72
|
+
`Target: ${targetPath}`,
|
|
73
|
+
`Requested kind: ${requestedKind}`,
|
|
74
|
+
`Actual kind: ${actualKind}`,
|
|
75
|
+
],
|
|
76
|
+
hint: `Use --kind ${actualKind} for this target, or choose a matching path.`,
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
return actualKind;
|
|
80
|
+
};
|
|
81
|
+
const buildTrackEntryCandidate = async (targetPath, syncDirectory, homeDirectory, input) => {
|
|
82
|
+
const targetStats = await getPathStats(targetPath);
|
|
83
|
+
const kind = resolveTargetKind(targetPath, targetStats, input.kind);
|
|
39
84
|
if (doPathsOverlap(targetPath, syncDirectory)) {
|
|
40
85
|
throw new DotweaveError("Sync target overlaps the dotweave sync directory.", {
|
|
41
86
|
code: "TARGET_OVERLAPS_SYNC_DIR",
|
|
@@ -55,22 +100,35 @@ const buildTrackEntryCandidate = async (targetPath, syncDirectory, homeDirectory
|
|
|
55
100
|
});
|
|
56
101
|
}
|
|
57
102
|
const localRepoPath = buildRepoPathWithinRoot(targetPath, homeDirectory, "Sync target");
|
|
58
|
-
const configuredLocalPath = buildConfiguredHomeLocalPath(localRepoPath);
|
|
103
|
+
const configuredLocalPath = mergePlatformStringValue(buildConfiguredHomeLocalPath(localRepoPath), input.localPathOverrides ?? {});
|
|
59
104
|
const configuredRepoPath = input.repoPath === undefined
|
|
60
105
|
? undefined
|
|
61
|
-
:
|
|
62
|
-
|
|
106
|
+
: normalizePlatformRepoPath({
|
|
107
|
+
default: localRepoPath,
|
|
108
|
+
...input.repoPath,
|
|
109
|
+
});
|
|
110
|
+
const repoPath = configuredRepoPath === undefined
|
|
111
|
+
? localRepoPath
|
|
112
|
+
: resolvePlatformValue(configuredRepoPath, input.platformKey);
|
|
113
|
+
const configuredPermission = input.permission;
|
|
114
|
+
const configuredMode = buildConfiguredMode(input.mode);
|
|
63
115
|
return {
|
|
64
116
|
configuredLocalPath,
|
|
65
117
|
...(configuredRepoPath === undefined ? {} : { configuredRepoPath }),
|
|
118
|
+
...(configuredPermission === undefined
|
|
119
|
+
? {}
|
|
120
|
+
: {
|
|
121
|
+
configuredPermission,
|
|
122
|
+
permission: parsePermissionOctal(configuredPermission.default),
|
|
123
|
+
}),
|
|
66
124
|
kind,
|
|
67
125
|
localPath: targetPath,
|
|
68
126
|
profiles: input.profiles?.map((m) => normalizeSyncProfileName(m)) ?? [],
|
|
69
127
|
profilesExplicit: input.profiles !== undefined,
|
|
70
|
-
mode: input.
|
|
128
|
+
mode: resolvePlatformMode(configuredMode, input.platformKey),
|
|
71
129
|
modeExplicit: true,
|
|
72
|
-
configuredMode
|
|
73
|
-
permissionExplicit:
|
|
130
|
+
configuredMode,
|
|
131
|
+
permissionExplicit: configuredPermission !== undefined,
|
|
74
132
|
repoPath,
|
|
75
133
|
};
|
|
76
134
|
};
|
|
@@ -111,8 +169,12 @@ export const trackTarget = async (request, cwd) => {
|
|
|
111
169
|
validateRequestedProfiles(effectiveProfiles, config.profiles);
|
|
112
170
|
const candidate = await buildTrackEntryCandidate(resolve(cwd, expandHomePath(target, context.homeDirectory)), syncDirectory, context.homeDirectory, {
|
|
113
171
|
identityFile,
|
|
172
|
+
kind: request.kind,
|
|
173
|
+
localPathOverrides: request.localPathOverrides,
|
|
114
174
|
profiles: effectiveProfiles,
|
|
115
175
|
mode: request.mode,
|
|
176
|
+
permission: request.permission,
|
|
177
|
+
platformKey: context.platformKey,
|
|
116
178
|
repoPath: request.repoPath,
|
|
117
179
|
});
|
|
118
180
|
const existingEntry = config.entries.find((entry) => entry.localPath === candidate.localPath);
|
|
@@ -128,13 +190,34 @@ export const trackTarget = async (request, cwd) => {
|
|
|
128
190
|
hint: "Untrack or rename the existing entry before adding this root.",
|
|
129
191
|
});
|
|
130
192
|
}
|
|
131
|
-
const nextEntry =
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
configuredRepoPath: existingEntry.configuredRepoPath,
|
|
135
|
-
repoPath: existingEntry.repoPath,
|
|
193
|
+
const nextEntry = (() => {
|
|
194
|
+
if (existingEntry === undefined) {
|
|
195
|
+
return candidate;
|
|
136
196
|
}
|
|
137
|
-
|
|
197
|
+
const configuredRepoPath = request.repoPath === undefined
|
|
198
|
+
? existingEntry.configuredRepoPath
|
|
199
|
+
: mergePlatformStringValue(existingEntry.configuredRepoPath ?? {
|
|
200
|
+
default: existingEntry.repoPath,
|
|
201
|
+
}, normalizePlatformRepoPath(request.repoPath));
|
|
202
|
+
const configuredMode = buildConfiguredMode(request.mode, existingEntry.configuredMode);
|
|
203
|
+
const configuredLocalPath = request.localPathOverrides === undefined
|
|
204
|
+
? existingEntry.configuredLocalPath
|
|
205
|
+
: {
|
|
206
|
+
...existingEntry.configuredLocalPath,
|
|
207
|
+
...request.localPathOverrides,
|
|
208
|
+
default: candidate.configuredLocalPath.default,
|
|
209
|
+
};
|
|
210
|
+
return {
|
|
211
|
+
...candidate,
|
|
212
|
+
configuredLocalPath,
|
|
213
|
+
configuredMode,
|
|
214
|
+
...(configuredRepoPath === undefined ? {} : { configuredRepoPath }),
|
|
215
|
+
mode: resolvePlatformMode(configuredMode, context.platformKey),
|
|
216
|
+
repoPath: configuredRepoPath === undefined
|
|
217
|
+
? existingEntry.repoPath
|
|
218
|
+
: resolvePlatformValue(configuredRepoPath, context.platformKey),
|
|
219
|
+
};
|
|
220
|
+
})();
|
|
138
221
|
const repoPathConflict = config.entries.find((entry) => {
|
|
139
222
|
return (entry.repoPath === nextEntry.repoPath &&
|
|
140
223
|
entry.localPath !== nextEntry.localPath);
|
|
@@ -147,7 +230,7 @@ export const trackTarget = async (request, cwd) => {
|
|
|
147
230
|
`Requested repo path: ${nextEntry.repoPath}`,
|
|
148
231
|
`Existing entry: ${repoPathConflict.localPath} -> ${repoPathConflict.repoPath}`,
|
|
149
232
|
],
|
|
150
|
-
hint: "Change --repo
|
|
233
|
+
hint: "Change --repo or untrack the conflicting entry first.",
|
|
151
234
|
});
|
|
152
235
|
}
|
|
153
236
|
if (!alreadyTracked) {
|
|
@@ -159,18 +242,25 @@ export const trackTarget = async (request, cwd) => {
|
|
|
159
242
|
return {
|
|
160
243
|
alreadyTracked,
|
|
161
244
|
changed: true,
|
|
245
|
+
configuredLocalPath: nextEntry.configuredLocalPath,
|
|
246
|
+
configuredMode: nextEntry.configuredMode,
|
|
162
247
|
kind: nextEntry.kind,
|
|
163
248
|
localPath: nextEntry.localPath,
|
|
164
249
|
profiles: nextEntry.profiles,
|
|
165
250
|
mode: nextEntry.mode,
|
|
251
|
+
permission: nextEntry.permission,
|
|
252
|
+
configuredPermission: nextEntry.configuredPermission,
|
|
253
|
+
configuredRepoPath: nextEntry.configuredRepoPath,
|
|
166
254
|
repoPath: nextEntry.repoPath,
|
|
167
255
|
};
|
|
168
256
|
}
|
|
169
|
-
const
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
257
|
+
const modeChanged = request.mode !== undefined &&
|
|
258
|
+
(existingEntry?.mode !== nextEntry.mode ||
|
|
259
|
+
JSON.stringify(existingEntry?.configuredMode) !==
|
|
260
|
+
JSON.stringify(nextEntry.configuredMode));
|
|
261
|
+
const localPathChanged = request.localPathOverrides !== undefined &&
|
|
262
|
+
JSON.stringify(existingEntry?.configuredLocalPath) !==
|
|
263
|
+
JSON.stringify(nextEntry.configuredLocalPath);
|
|
174
264
|
const profilesChanged = effectiveProfiles !== undefined &&
|
|
175
265
|
(existingEntry?.profiles.length !== candidate.profiles.length ||
|
|
176
266
|
!candidate.profiles.every((m) => existingEntry?.profiles.includes(m)));
|
|
@@ -178,7 +268,14 @@ export const trackTarget = async (request, cwd) => {
|
|
|
178
268
|
(existingEntry?.repoPath !== nextEntry.repoPath ||
|
|
179
269
|
JSON.stringify(existingEntry?.configuredRepoPath) !==
|
|
180
270
|
JSON.stringify(nextEntry.configuredRepoPath));
|
|
181
|
-
const
|
|
271
|
+
const permissionChanged = request.permission !== undefined &&
|
|
272
|
+
JSON.stringify(existingEntry?.configuredPermission) !==
|
|
273
|
+
JSON.stringify(request.permission);
|
|
274
|
+
const changed = localPathChanged ||
|
|
275
|
+
modeChanged ||
|
|
276
|
+
profilesChanged ||
|
|
277
|
+
repoPathChanged ||
|
|
278
|
+
permissionChanged;
|
|
182
279
|
if (changed) {
|
|
183
280
|
const nextConfig = buildSyncConfigDocument({
|
|
184
281
|
...config,
|
|
@@ -188,6 +285,9 @@ export const trackTarget = async (request, cwd) => {
|
|
|
188
285
|
}
|
|
189
286
|
return {
|
|
190
287
|
...entry,
|
|
288
|
+
...(localPathChanged
|
|
289
|
+
? { configuredLocalPath: nextEntry.configuredLocalPath }
|
|
290
|
+
: {}),
|
|
191
291
|
...(repoPathChanged
|
|
192
292
|
? {
|
|
193
293
|
configuredRepoPath: nextEntry.configuredRepoPath,
|
|
@@ -196,8 +296,15 @@ export const trackTarget = async (request, cwd) => {
|
|
|
196
296
|
: {}),
|
|
197
297
|
...(modeChanged
|
|
198
298
|
? {
|
|
199
|
-
configuredMode:
|
|
200
|
-
mode:
|
|
299
|
+
configuredMode: nextEntry.configuredMode,
|
|
300
|
+
mode: nextEntry.mode,
|
|
301
|
+
}
|
|
302
|
+
: {}),
|
|
303
|
+
...(permissionChanged
|
|
304
|
+
? {
|
|
305
|
+
configuredPermission: request.permission,
|
|
306
|
+
permission: parsePermissionOctal(request.permission.default),
|
|
307
|
+
permissionExplicit: true,
|
|
201
308
|
}
|
|
202
309
|
: {}),
|
|
203
310
|
...(profilesChanged
|
|
@@ -214,12 +321,29 @@ export const trackTarget = async (request, cwd) => {
|
|
|
214
321
|
return {
|
|
215
322
|
alreadyTracked,
|
|
216
323
|
changed,
|
|
324
|
+
configuredLocalPath: localPathChanged
|
|
325
|
+
? nextEntry.configuredLocalPath
|
|
326
|
+
: (existingEntry?.configuredLocalPath ?? nextEntry.configuredLocalPath),
|
|
327
|
+
configuredMode: modeChanged
|
|
328
|
+
? nextEntry.configuredMode
|
|
329
|
+
: (existingEntry?.configuredMode ?? nextEntry.configuredMode),
|
|
217
330
|
kind: nextEntry.kind,
|
|
218
331
|
localPath: nextEntry.localPath,
|
|
219
332
|
profiles: profilesChanged
|
|
220
333
|
? nextEntry.profiles
|
|
221
334
|
: (existingEntry?.profiles ?? []),
|
|
222
|
-
mode: modeChanged
|
|
335
|
+
mode: modeChanged
|
|
336
|
+
? nextEntry.mode
|
|
337
|
+
: (existingEntry?.mode ?? nextEntry.mode),
|
|
338
|
+
permission: permissionChanged
|
|
339
|
+
? parsePermissionOctal(request.permission.default)
|
|
340
|
+
: existingEntry?.permission,
|
|
341
|
+
configuredPermission: permissionChanged
|
|
342
|
+
? request.permission
|
|
343
|
+
: existingEntry?.configuredPermission,
|
|
344
|
+
configuredRepoPath: repoPathChanged || !alreadyTracked
|
|
345
|
+
? nextEntry.configuredRepoPath
|
|
346
|
+
: existingEntry?.configuredRepoPath,
|
|
223
347
|
repoPath: repoPathChanged || !alreadyTracked
|
|
224
348
|
? nextEntry.repoPath
|
|
225
349
|
: (existingEntry?.repoPath ?? nextEntry.repoPath),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"track.js","sourceRoot":"","sources":["../../src/services/track.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"track.js","sourceRoot":"","sources":["../../src/services/track.ts"],"names":[],"mappings":"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"}
|