@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
package/dist/services/init.js
CHANGED
|
@@ -1,19 +1,18 @@
|
|
|
1
1
|
import { mkdir, readdir, readFile, writeFile } from "node:fs/promises";
|
|
2
2
|
import { dirname, join } from "node:path";
|
|
3
|
-
import {
|
|
3
|
+
import { AppConstants } from "#app/config/constants.ts";
|
|
4
4
|
import { formatGlobalDotweaveConfig, readGlobalDotweaveConfig, } from "#app/config/global-config.ts";
|
|
5
5
|
import { resolveDefaultIdentityFile } from "#app/config/identity-file.ts";
|
|
6
6
|
import { readEnvValue } from "#app/config/runtime-env.ts";
|
|
7
|
-
import { createInitialSyncConfig, formatSyncConfig, parseSyncConfig, readSyncConfig,
|
|
7
|
+
import { createInitialSyncConfig, formatSyncConfig, parseSyncConfig, readSyncConfig, } from "#app/config/sync-schema.ts";
|
|
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 {
|
|
12
|
-
import {
|
|
13
|
-
import { resolveAgeFromSyncConfig, resolveSyncConfigResolutionContext, resolveSyncPaths, } from "./
|
|
14
|
-
|
|
15
|
-
const
|
|
16
|
-
const managedRepositoryAttributesContents = "* -text\n";
|
|
11
|
+
import { initializeRepository, requireGitRepository, verifyIsGitRepository, } from "#app/lib/git.ts";
|
|
12
|
+
import { validateJsoncConfigPath } from "#app/lib/jsonc.ts";
|
|
13
|
+
import { resolveAgeFromSyncConfig, resolveSyncConfigResolutionContext, resolveSyncPaths, } from "./sync-context.js";
|
|
14
|
+
const gitAttributesFileName = ".gitattributes";
|
|
15
|
+
const gitAttributesContents = "* -text\n";
|
|
17
16
|
export const createMissingRepositoryAgeKeyError = () => {
|
|
18
17
|
return new DotweaveError("Existing repository setup requires an age private key.", {
|
|
19
18
|
code: "INIT_AGE_IDENTITY_REQUIRED",
|
|
@@ -27,11 +26,10 @@ const normalizeRecipients = (recipients) => {
|
|
|
27
26
|
return left.localeCompare(right);
|
|
28
27
|
});
|
|
29
28
|
};
|
|
30
|
-
const resolveInitAgeBootstrap = async (request
|
|
29
|
+
const resolveInitAgeBootstrap = async (request) => {
|
|
31
30
|
const identityFile = resolveDefaultIdentityFile(readEnvValue("HOME"), readEnvValue("XDG_CONFIG_HOME"));
|
|
32
31
|
const explicitRecipients = normalizeRecipients(request.recipients);
|
|
33
32
|
if (request.ageIdentity !== undefined) {
|
|
34
|
-
reporter?.start("Writing age identity file...");
|
|
35
33
|
const { recipient } = await writeAgeIdentityFile(identityFile, request.ageIdentity);
|
|
36
34
|
return {
|
|
37
35
|
generatedIdentity: false,
|
|
@@ -40,13 +38,11 @@ const resolveInitAgeBootstrap = async (request, reporter) => {
|
|
|
40
38
|
}
|
|
41
39
|
if (explicitRecipients.length === 0) {
|
|
42
40
|
if (await pathExists(identityFile)) {
|
|
43
|
-
reporter?.start("Loading age recipients from the existing identity...");
|
|
44
41
|
return {
|
|
45
42
|
generatedIdentity: false,
|
|
46
43
|
recipients: normalizeRecipients(await readAgeRecipientsFromIdentityFile(identityFile)),
|
|
47
44
|
};
|
|
48
45
|
}
|
|
49
|
-
reporter?.start("Generating a new age identity...");
|
|
50
46
|
const { recipient } = await createAgeIdentityFile(identityFile);
|
|
51
47
|
return {
|
|
52
48
|
generatedIdentity: true,
|
|
@@ -54,7 +50,6 @@ const resolveInitAgeBootstrap = async (request, reporter) => {
|
|
|
54
50
|
};
|
|
55
51
|
}
|
|
56
52
|
if (request.generateAgeIdentity === true) {
|
|
57
|
-
reporter?.start("Generating a new age identity...");
|
|
58
53
|
const { recipient } = await createAgeIdentityFile(identityFile);
|
|
59
54
|
return {
|
|
60
55
|
generatedIdentity: true,
|
|
@@ -62,20 +57,18 @@ const resolveInitAgeBootstrap = async (request, reporter) => {
|
|
|
62
57
|
};
|
|
63
58
|
}
|
|
64
59
|
if (await pathExists(identityFile)) {
|
|
65
|
-
reporter?.start("Using the existing age identity file...");
|
|
66
60
|
return {
|
|
67
61
|
generatedIdentity: false,
|
|
68
62
|
recipients: explicitRecipients,
|
|
69
63
|
};
|
|
70
64
|
}
|
|
71
|
-
reporter?.start("Generating a new age identity...");
|
|
72
65
|
const { recipient } = await createAgeIdentityFile(identityFile);
|
|
73
66
|
return {
|
|
74
67
|
generatedIdentity: true,
|
|
75
68
|
recipients: normalizeRecipients([...explicitRecipients, recipient]),
|
|
76
69
|
};
|
|
77
70
|
};
|
|
78
|
-
const
|
|
71
|
+
const assertRecipientMatch = (age, request) => {
|
|
79
72
|
if (age === undefined) {
|
|
80
73
|
return;
|
|
81
74
|
}
|
|
@@ -89,7 +82,7 @@ const assertInitRequestMatchesConfig = (age, request) => {
|
|
|
89
82
|
`Requested recipients: ${recipients.join(", ") || "(none)"}`,
|
|
90
83
|
`Configured recipients: ${normalizeRecipients([...age.recipients]).join(", ")}`,
|
|
91
84
|
],
|
|
92
|
-
hint: `Use the existing recipients, or update ${
|
|
85
|
+
hint: `Use the existing recipients, or update ${AppConstants.SYNC.CONFIG_FILE_NAME} manually if you intend to rotate recipients.`,
|
|
93
86
|
});
|
|
94
87
|
}
|
|
95
88
|
};
|
|
@@ -97,40 +90,37 @@ const buildAlreadyInitializedResult = (config, base) => {
|
|
|
97
90
|
const age = config.age !== undefined ? resolveAgeFromSyncConfig(config.age) : undefined;
|
|
98
91
|
return {
|
|
99
92
|
alreadyInitialized: true,
|
|
100
|
-
configPath: base.configPath,
|
|
101
93
|
entryCount: config.entries.length,
|
|
102
94
|
gitAction: base.gitAction,
|
|
103
95
|
...(base.gitSource === undefined ? {} : { gitSource: base.gitSource }),
|
|
104
96
|
generatedIdentity: false,
|
|
105
97
|
identityFile: age?.identityFile ?? "",
|
|
106
98
|
recipientCount: age?.recipients.length ?? 0,
|
|
107
|
-
syncDirectory: base.syncDirectory,
|
|
108
99
|
};
|
|
109
100
|
};
|
|
110
101
|
const writeGlobalSettings = async (globalConfigPath) => {
|
|
111
102
|
const existingGlobalConfig = await readGlobalDotweaveConfig(globalConfigPath);
|
|
112
103
|
const globalConfigToWrite = {
|
|
113
|
-
activeProfile: existingGlobalConfig?.activeProfile ??
|
|
114
|
-
version:
|
|
104
|
+
activeProfile: existingGlobalConfig?.activeProfile ?? AppConstants.SYNC.DEFAULT_PROFILE,
|
|
105
|
+
version: AppConstants.GLOBAL_CONFIG.CURRENT_VERSION,
|
|
115
106
|
};
|
|
116
107
|
await mkdir(dirname(globalConfigPath), { recursive: true });
|
|
117
108
|
await writeTextFileAtomically(globalConfigPath, formatGlobalDotweaveConfig(globalConfigToWrite));
|
|
118
109
|
};
|
|
119
110
|
const ensureManagedRepositoryAttributes = async (syncDirectory) => {
|
|
120
|
-
const attributesPath = join(syncDirectory,
|
|
111
|
+
const attributesPath = join(syncDirectory, gitAttributesFileName);
|
|
121
112
|
if (await pathExists(attributesPath)) {
|
|
122
113
|
const existingContents = await readFile(attributesPath, "utf8");
|
|
123
|
-
if (existingContents ===
|
|
114
|
+
if (existingContents === gitAttributesContents) {
|
|
124
115
|
return;
|
|
125
116
|
}
|
|
126
117
|
}
|
|
127
|
-
await writeTextFileAtomically(attributesPath,
|
|
118
|
+
await writeTextFileAtomically(attributesPath, gitAttributesContents);
|
|
128
119
|
};
|
|
129
|
-
export const initializeSyncDirectory = async (request
|
|
130
|
-
reporter?.start("Initializing sync directory...");
|
|
120
|
+
export const initializeSyncDirectory = async (request) => {
|
|
131
121
|
const { syncDirectory, configPath, globalConfigPath } = resolveSyncPaths();
|
|
132
122
|
const context = resolveSyncConfigResolutionContext();
|
|
133
|
-
const resolvedConfigPath = await
|
|
123
|
+
const resolvedConfigPath = await validateJsoncConfigPath(configPath);
|
|
134
124
|
const configExists = await pathExists(resolvedConfigPath);
|
|
135
125
|
const identityFile = resolveDefaultIdentityFile(readEnvValue("HOME"), readEnvValue("XDG_CONFIG_HOME"));
|
|
136
126
|
const importingRepository = request.repository !== undefined && request.repository.trim() !== "";
|
|
@@ -140,29 +130,22 @@ export const initializeSyncDirectory = async (request, reporter) => {
|
|
|
140
130
|
throw createMissingRepositoryAgeKeyError();
|
|
141
131
|
}
|
|
142
132
|
if (configExists) {
|
|
143
|
-
|
|
144
|
-
await ensureGitRepository(syncDirectory);
|
|
133
|
+
await requireGitRepository(syncDirectory);
|
|
145
134
|
await ensureManagedRepositoryAttributes(syncDirectory);
|
|
146
|
-
reporter?.start("Loading the existing sync config...");
|
|
147
135
|
const config = await readSyncConfig(syncDirectory, context);
|
|
148
|
-
|
|
149
|
-
await resolveInitAgeBootstrap(request
|
|
136
|
+
assertRecipientMatch(config.age, request);
|
|
137
|
+
await resolveInitAgeBootstrap(request);
|
|
150
138
|
return buildAlreadyInitializedResult(config, {
|
|
151
|
-
configPath,
|
|
152
139
|
gitAction: "existing",
|
|
153
|
-
syncDirectory,
|
|
154
140
|
});
|
|
155
141
|
}
|
|
156
142
|
await mkdir(dirname(syncDirectory), {
|
|
157
143
|
recursive: true,
|
|
158
144
|
});
|
|
159
|
-
reporter?.start("Preparing the sync directory...");
|
|
160
145
|
let gitAction = "existing";
|
|
161
146
|
let gitSource;
|
|
162
147
|
try {
|
|
163
|
-
|
|
164
|
-
await ensureRepository(syncDirectory);
|
|
165
|
-
reporter?.start("Using the existing git repository...");
|
|
148
|
+
await verifyIsGitRepository(syncDirectory);
|
|
166
149
|
}
|
|
167
150
|
catch {
|
|
168
151
|
const syncDirectoryExists = await pathExists(syncDirectory);
|
|
@@ -179,10 +162,7 @@ export const initializeSyncDirectory = async (request, reporter) => {
|
|
|
179
162
|
const gitSourceInput = request.repository?.trim() || undefined;
|
|
180
163
|
let gitResult;
|
|
181
164
|
try {
|
|
182
|
-
|
|
183
|
-
? "Initializing a new git repository..."
|
|
184
|
-
: `Cloning the sync directory from ${gitSourceInput}...`);
|
|
185
|
-
gitResult = await initializeRepository(syncDirectory, gitSourceInput, reporter);
|
|
165
|
+
gitResult = await initializeRepository(syncDirectory, gitSourceInput);
|
|
186
166
|
}
|
|
187
167
|
catch (error) {
|
|
188
168
|
throw wrapUnknownError(gitSourceInput === undefined
|
|
@@ -205,29 +185,23 @@ export const initializeSyncDirectory = async (request, reporter) => {
|
|
|
205
185
|
gitAction = gitResult.action;
|
|
206
186
|
gitSource = gitResult.source;
|
|
207
187
|
}
|
|
208
|
-
reporter?.start("Preparing the sync artifact directory...");
|
|
209
188
|
await mkdir(syncDirectory, { recursive: true });
|
|
210
189
|
await ensureManagedRepositoryAttributes(syncDirectory);
|
|
211
|
-
if (await pathExists(await
|
|
212
|
-
reporter?.start("Loading the existing sync config...");
|
|
190
|
+
if (await pathExists(await validateJsoncConfigPath(configPath))) {
|
|
213
191
|
const config = await readSyncConfig(syncDirectory, context);
|
|
214
|
-
const ageBootstrap = await resolveInitAgeBootstrap(request
|
|
192
|
+
const ageBootstrap = await resolveInitAgeBootstrap(request);
|
|
215
193
|
if (configExists) {
|
|
216
194
|
return buildAlreadyInitializedResult(config, {
|
|
217
|
-
configPath,
|
|
218
195
|
gitAction,
|
|
219
196
|
gitSource,
|
|
220
|
-
syncDirectory,
|
|
221
197
|
});
|
|
222
198
|
}
|
|
223
|
-
reporter?.start("Writing global dotweave settings...");
|
|
224
199
|
await writeGlobalSettings(globalConfigPath);
|
|
225
200
|
const age = config.age !== undefined
|
|
226
201
|
? resolveAgeFromSyncConfig(config.age)
|
|
227
202
|
: undefined;
|
|
228
203
|
return {
|
|
229
204
|
alreadyInitialized: false,
|
|
230
|
-
configPath,
|
|
231
205
|
entryCount: config.entries.length,
|
|
232
206
|
gitAction,
|
|
233
207
|
...(gitSource === undefined ? {} : { gitSource }),
|
|
@@ -235,31 +209,23 @@ export const initializeSyncDirectory = async (request, reporter) => {
|
|
|
235
209
|
identityFile: age?.identityFile ??
|
|
236
210
|
resolveDefaultIdentityFile(readEnvValue("HOME"), readEnvValue("XDG_CONFIG_HOME")),
|
|
237
211
|
recipientCount: age?.recipients.length ?? 0,
|
|
238
|
-
syncDirectory,
|
|
239
212
|
};
|
|
240
213
|
}
|
|
241
|
-
|
|
242
|
-
const ageBootstrap = await resolveInitAgeBootstrap(request, reporter);
|
|
243
|
-
// Write global settings.jsonc (without age)
|
|
244
|
-
reporter?.start("Writing global dotweave settings...");
|
|
214
|
+
const ageBootstrap = await resolveInitAgeBootstrap(request);
|
|
245
215
|
await writeGlobalSettings(globalConfigPath);
|
|
246
|
-
// Write sync config with age
|
|
247
216
|
const initialConfig = createInitialSyncConfig({
|
|
248
217
|
recipients: [...new Set(ageBootstrap.recipients.map((r) => r.trim()))],
|
|
249
218
|
});
|
|
250
|
-
reporter?.start("Writing sync config...");
|
|
251
219
|
parseSyncConfig(initialConfig, context);
|
|
252
220
|
await writeFile(configPath, formatSyncConfig(initialConfig), "utf8");
|
|
253
221
|
return {
|
|
254
222
|
alreadyInitialized: false,
|
|
255
|
-
configPath,
|
|
256
223
|
entryCount: 0,
|
|
257
224
|
gitAction,
|
|
258
225
|
...(gitSource === undefined ? {} : { gitSource }),
|
|
259
226
|
generatedIdentity: ageBootstrap.generatedIdentity,
|
|
260
227
|
identityFile: resolveDefaultIdentityFile(readEnvValue("HOME"), readEnvValue("XDG_CONFIG_HOME")),
|
|
261
228
|
recipientCount: ageBootstrap.recipients.length,
|
|
262
|
-
syncDirectory,
|
|
263
229
|
};
|
|
264
230
|
};
|
|
265
231
|
//# sourceMappingURL=init.js.map
|
|
@@ -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;AACvE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/services/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,4 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import { type ResolvedSyncConfig } from "#app/config/sync.ts";
|
|
3
|
-
type SnapshotConfig = ResolvedSyncConfig & Readonly<{
|
|
4
|
-
activeProfile?: string;
|
|
5
|
-
}>;
|
|
1
|
+
import type { EffectiveSyncConfig } from "./sync-context.ts";
|
|
6
2
|
export type SnapshotNode = Readonly<{
|
|
7
3
|
type: "directory";
|
|
8
4
|
}> | Readonly<{
|
|
@@ -21,6 +17,5 @@ export type FileLikeSnapshotNode = Extract<SnapshotNode, Readonly<{
|
|
|
21
17
|
type: "file" | "symlink";
|
|
22
18
|
}>>;
|
|
23
19
|
export declare const addSnapshotNode: (snapshot: Map<string, SnapshotNode>, repoPath: string, node: SnapshotNode) => void;
|
|
24
|
-
export declare const buildLocalSnapshot: (config:
|
|
25
|
-
export {};
|
|
20
|
+
export declare const buildLocalSnapshot: (config: EffectiveSyncConfig) => Promise<Map<string, SnapshotNode>>;
|
|
26
21
|
//# sourceMappingURL=local-snapshot.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-snapshot.d.ts","sourceRoot":"","sources":["../../src/services/local-snapshot.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"local-snapshot.d.ts","sourceRoot":"","sources":["../../src/services/local-snapshot.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAE7D,MAAM,MAAM,YAAY,GACpB,QAAQ,CAAC;IACP,IAAI,EAAE,WAAW,CAAC;CACnB,CAAC,GACF,QAAQ,CAAC;IACP,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,UAAU,CAAC;CACtB,CAAC,GACF,QAAQ,CAAC;IACP,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,SAAS,CAAC;CACjB,CAAC,CAAC;AAEP,MAAM,MAAM,gBAAgB,GAAG,OAAO,CACpC,YAAY,EACZ,QAAQ,CAAC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAC3B,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,OAAO,CACxC,YAAY,EACZ,QAAQ,CAAC;IAAE,IAAI,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC,CACvC,CAAC;AAYF,eAAO,MAAM,eAAe,GAC1B,UAAU,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,EACnC,UAAU,MAAM,EAChB,MAAM,YAAY,SAOnB,CAAC;AAoFF,eAAO,MAAM,kBAAkB,GAAU,QAAQ,mBAAmB,uCAgEnE,CAAC"}
|
|
@@ -1,29 +1,23 @@
|
|
|
1
1
|
import { lstat, readFile, readlink } from "node:fs/promises";
|
|
2
2
|
import { join, posix } from "node:path";
|
|
3
|
-
import { collectChildEntryPaths,
|
|
3
|
+
import { collectChildEntryPaths, findOwningSyncEntry, requireManagedSyncMode, } from "#app/config/sync-queries.ts";
|
|
4
4
|
import { DotweaveError } from "#app/lib/error.ts";
|
|
5
5
|
import { isExecutableMode } from "#app/lib/file-mode.ts";
|
|
6
6
|
import { getPathStats, listDirectoryEntries } from "#app/lib/filesystem.ts";
|
|
7
7
|
import { assertStorageSafeRepoPath } from "./repo-artifacts.js";
|
|
8
|
+
const resolveSnapshotExecutable = (config, repoPath, filesystemMode) => {
|
|
9
|
+
const entry = findOwningSyncEntry(config, repoPath);
|
|
10
|
+
return isExecutableMode(entry?.permission ?? filesystemMode);
|
|
11
|
+
};
|
|
8
12
|
export const addSnapshotNode = (snapshot, repoPath, node) => {
|
|
9
13
|
if (snapshot.has(repoPath)) {
|
|
10
14
|
throw new DotweaveError(`Duplicate sync path generated for ${repoPath}`);
|
|
11
15
|
}
|
|
12
16
|
snapshot.set(repoPath, node);
|
|
13
17
|
};
|
|
14
|
-
const reportLocalScanProgress = (reporter, state, repoPath, kind) => {
|
|
15
|
-
state.scannedEntryCount += 1;
|
|
16
|
-
if ((reporter?.level ?? 0) >= 4) {
|
|
17
|
-
reporter?.verbose(`scanned local ${kind} ${repoPath}`);
|
|
18
|
-
return;
|
|
19
|
-
}
|
|
20
|
-
if (state.scannedEntryCount % 100 === 0) {
|
|
21
|
-
reporter?.start(`Scanned ${state.scannedEntryCount} local filesystem entries...`);
|
|
22
|
-
}
|
|
23
|
-
};
|
|
24
18
|
const addLocalNode = async (snapshot, config, repoPath, path, stats) => {
|
|
25
19
|
assertStorageSafeRepoPath(repoPath);
|
|
26
|
-
const mode =
|
|
20
|
+
const mode = requireManagedSyncMode(config, repoPath, config.activeProfile);
|
|
27
21
|
if (mode === "ignore") {
|
|
28
22
|
return;
|
|
29
23
|
}
|
|
@@ -45,12 +39,12 @@ const addLocalNode = async (snapshot, config, repoPath, path, stats) => {
|
|
|
45
39
|
}
|
|
46
40
|
addSnapshotNode(snapshot, repoPath, {
|
|
47
41
|
contents: await readFile(path),
|
|
48
|
-
executable:
|
|
42
|
+
executable: resolveSnapshotExecutable(config, repoPath, stats.mode),
|
|
49
43
|
secret: mode === "secret",
|
|
50
44
|
type: "file",
|
|
51
45
|
});
|
|
52
46
|
};
|
|
53
|
-
const walkLocalDirectory = async (snapshot, config, localDirectory, repoPathPrefix, childEntryPaths
|
|
47
|
+
const walkLocalDirectory = async (snapshot, config, localDirectory, repoPathPrefix, childEntryPaths) => {
|
|
54
48
|
const entries = await listDirectoryEntries(localDirectory);
|
|
55
49
|
for (const entry of entries) {
|
|
56
50
|
const localPath = join(localDirectory, entry.name);
|
|
@@ -59,43 +53,26 @@ const walkLocalDirectory = async (snapshot, config, localDirectory, repoPathPref
|
|
|
59
53
|
continue;
|
|
60
54
|
}
|
|
61
55
|
const stats = await lstat(localPath);
|
|
62
|
-
reportLocalScanProgress(reporter, progressState, repoPath, stats.isDirectory()
|
|
63
|
-
? "directory"
|
|
64
|
-
: stats.isSymbolicLink()
|
|
65
|
-
? "symlink"
|
|
66
|
-
: stats.isFile()
|
|
67
|
-
? "file"
|
|
68
|
-
: "other");
|
|
69
56
|
if (stats.isDirectory()) {
|
|
70
57
|
assertStorageSafeRepoPath(repoPath);
|
|
71
|
-
await walkLocalDirectory(snapshot, config, localPath, repoPath, childEntryPaths
|
|
58
|
+
await walkLocalDirectory(snapshot, config, localPath, repoPath, childEntryPaths);
|
|
72
59
|
continue;
|
|
73
60
|
}
|
|
74
61
|
await addLocalNode(snapshot, config, repoPath, localPath, stats);
|
|
75
62
|
}
|
|
76
63
|
};
|
|
77
|
-
export const buildLocalSnapshot = async (config
|
|
64
|
+
export const buildLocalSnapshot = async (config) => {
|
|
78
65
|
const snapshot = new Map();
|
|
79
|
-
const progressState = { scannedEntryCount: 0 };
|
|
80
66
|
for (const entry of config.entries) {
|
|
81
|
-
reporter?.start(`Scanning tracked entry ${entry.repoPath}...`);
|
|
82
67
|
const stats = await getPathStats(entry.localPath);
|
|
83
68
|
if (stats === undefined) {
|
|
84
|
-
reporter?.verbose(`skipped missing local entry ${entry.repoPath}`);
|
|
85
69
|
continue;
|
|
86
70
|
}
|
|
87
|
-
const entryMode =
|
|
71
|
+
const entryMode = requireManagedSyncMode(config, entry.repoPath, config.activeProfile);
|
|
88
72
|
if (entry.kind === "file") {
|
|
89
73
|
if (entryMode === "ignore") {
|
|
90
74
|
continue;
|
|
91
75
|
}
|
|
92
|
-
reportLocalScanProgress(reporter, progressState, entry.repoPath, stats.isSymbolicLink()
|
|
93
|
-
? "symlink"
|
|
94
|
-
: stats.isFile()
|
|
95
|
-
? "file"
|
|
96
|
-
: stats.isDirectory()
|
|
97
|
-
? "directory"
|
|
98
|
-
: "other");
|
|
99
76
|
if (stats.isDirectory()) {
|
|
100
77
|
throw new DotweaveError(`Sync entry ${entry.repoPath} expects a file, but found a directory: ${entry.localPath}`);
|
|
101
78
|
}
|
|
@@ -109,7 +86,7 @@ export const buildLocalSnapshot = async (config, reporter) => {
|
|
|
109
86
|
if (entryMode === "ignore") {
|
|
110
87
|
continue;
|
|
111
88
|
}
|
|
112
|
-
await walkLocalDirectory(snapshot, config, entry.localPath, entry.repoPath, childEntryPaths
|
|
89
|
+
await walkLocalDirectory(snapshot, config, entry.localPath, entry.repoPath, childEntryPaths);
|
|
113
90
|
addSnapshotNode(snapshot, entry.repoPath, {
|
|
114
91
|
type: "directory",
|
|
115
92
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-snapshot.js","sourceRoot":"","sources":["../../src/services/local-snapshot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"local-snapshot.js","sourceRoot":"","sources":["../../src/services/local-snapshot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC5E,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AA4BhE,MAAM,yBAAyB,GAAG,CAChC,MAA2B,EAC3B,QAAgB,EAChB,cAA+B,EAC/B,EAAE;IACF,MAAM,KAAK,GAAG,mBAAmB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAEpD,OAAO,gBAAgB,CAAC,KAAK,EAAE,UAAU,IAAI,cAAc,CAAC,CAAC;AAC/D,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,QAAmC,EACnC,QAAgB,EAChB,IAAkB,EAClB,EAAE;IACF,IAAI,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,aAAa,CAAC,qCAAqC,QAAQ,EAAE,CAAC,CAAC;IAC3E,CAAC;IAED,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AAC/B,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,KAAK,EACxB,QAAmC,EACnC,MAA2B,EAC3B,QAAgB,EAChB,IAAY,EACZ,KAAwC,EACxC,EAAE;IACF,yBAAyB,CAAC,QAAQ,CAAC,CAAC;IACpC,MAAM,IAAI,GAAG,sBAAsB,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;IAE5E,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtB,OAAO;IACT,CAAC;IAED,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;QACxB,MAAM,IAAI,aAAa,CACrB,oDAAoD,IAAI,EAAE,CAC3D,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,cAAc,EAAE,EAAE,CAAC;QAC3B,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtB,MAAM,IAAI,aAAa,CACrB,0DAA0D,QAAQ,EAAE,CACrE,CAAC;QACJ,CAAC;QAED,eAAe,CAAC,QAAQ,EAAE,QAAQ,EAAE;YAClC,UAAU,EAAE,MAAM,QAAQ,CAAC,IAAI,CAAC;YAChC,IAAI,EAAE,SAAS;SAChB,CAAC,CAAC;QAEH,OAAO;IACT,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;QACpB,MAAM,IAAI,aAAa,CAAC,iCAAiC,IAAI,EAAE,CAAC,CAAC;IACnE,CAAC;IAED,eAAe,CAAC,QAAQ,EAAE,QAAQ,EAAE;QAClC,QAAQ,EAAE,MAAM,QAAQ,CAAC,IAAI,CAAC;QAC9B,UAAU,EAAE,yBAAyB,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC;QACnE,MAAM,EAAE,IAAI,KAAK,QAAQ;QACzB,IAAI,EAAE,MAAM;KACb,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,KAAK,EAC9B,QAAmC,EACnC,MAA2B,EAC3B,cAAsB,EACtB,cAAsB,EACtB,eAAoC,EACpC,EAAE;IACF,MAAM,OAAO,GAAG,MAAM,oBAAoB,CAAC,cAAc,CAAC,CAAC;IAE3D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACnD,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAExD,IAAI,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAClC,SAAS;QACX,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,CAAC;QAErC,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,yBAAyB,CAAC,QAAQ,CAAC,CAAC;YACpC,MAAM,kBAAkB,CACtB,QAAQ,EACR,MAAM,EACN,SAAS,EACT,QAAQ,EACR,eAAe,CAChB,CAAC;YACF,SAAS;QACX,CAAC;QAED,MAAM,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IACnE,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,EAAE,MAA2B,EAAE,EAAE;IACtE,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAwB,CAAC;IAEjD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAElD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,SAAS;QACX,CAAC;QAED,MAAM,SAAS,GAAG,sBAAsB,CACtC,MAAM,EACN,KAAK,CAAC,QAAQ,EACd,MAAM,CAAC,aAAa,CACrB,CAAC;QAEF,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC1B,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;gBAC3B,SAAS;YACX,CAAC;YAED,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxB,MAAM,IAAI,aAAa,CACrB,cAAc,KAAK,CAAC,QAAQ,2CAA2C,KAAK,CAAC,SAAS,EAAE,CACzF,CAAC;YACJ,CAAC;YAED,MAAM,YAAY,CAChB,QAAQ,EACR,MAAM,EACN,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,SAAS,EACf,KAAK,CACN,CAAC;YACF,SAAS;QACX,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACzB,MAAM,IAAI,aAAa,CACrB,cAAc,KAAK,CAAC,QAAQ,yBAAyB,KAAK,CAAC,SAAS,EAAE,CACvE,CAAC;QACJ,CAAC;QAED,MAAM,eAAe,GAAG,IAAI,GAAG,CAC7B,sBAAsB,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,CAC/C,CAAC;QAEF,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;YAC3B,SAAS;QACX,CAAC;QAED,MAAM,kBAAkB,CACtB,QAAQ,EACR,MAAM,EACN,KAAK,CAAC,SAAS,EACf,KAAK,CAAC,QAAQ,EACd,eAAe,CAChB,CAAC;QACF,eAAe,CAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE;YACxC,IAAI,EAAE,WAAW;SAClB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC"}
|
|
@@ -6,34 +6,38 @@ export type ProfileAssignment = Readonly<{
|
|
|
6
6
|
export type ProfileListResult = Readonly<{
|
|
7
7
|
activeProfile?: string;
|
|
8
8
|
activeProfileMode: "none" | "single";
|
|
9
|
+
activeProfileWarning?: string;
|
|
9
10
|
assignments: readonly ProfileAssignment[];
|
|
10
11
|
availableProfiles: readonly string[];
|
|
11
12
|
globalConfigExists: boolean;
|
|
12
13
|
globalConfigPath: string;
|
|
13
|
-
syncDirectory: string;
|
|
14
14
|
}>;
|
|
15
15
|
export type ProfileUpdateResult = Readonly<{
|
|
16
16
|
activeProfile?: string;
|
|
17
17
|
action: "clear" | "use";
|
|
18
18
|
globalConfigPath: string;
|
|
19
19
|
profile?: string;
|
|
20
|
-
syncDirectory: string;
|
|
21
20
|
warning?: string;
|
|
22
21
|
}>;
|
|
22
|
+
export type ProfileRegistryUpdateResult = Readonly<{
|
|
23
|
+
action: "added" | "removed";
|
|
24
|
+
profile: string;
|
|
25
|
+
}>;
|
|
23
26
|
type AssignProfilesRequest = Readonly<{
|
|
24
27
|
profiles: readonly string[];
|
|
25
28
|
target: string;
|
|
26
29
|
}>;
|
|
27
30
|
type AssignProfilesResult = Readonly<{
|
|
28
31
|
action: "assigned" | "unchanged";
|
|
29
|
-
configPath: string;
|
|
30
32
|
entryRepoPath: string;
|
|
31
33
|
profiles: readonly string[];
|
|
32
|
-
syncDirectory: string;
|
|
33
34
|
}>;
|
|
34
35
|
export declare const listProfiles: () => Promise<ProfileListResult>;
|
|
35
36
|
export declare const setActiveProfile: (profile: string) => Promise<ProfileUpdateResult>;
|
|
37
|
+
export declare const addProfile: (profile: string) => Promise<ProfileRegistryUpdateResult>;
|
|
38
|
+
export declare const removeProfile: (profile: string) => Promise<ProfileRegistryUpdateResult>;
|
|
36
39
|
export declare const clearActiveProfile: () => Promise<ProfileUpdateResult>;
|
|
40
|
+
export declare const validateProfilesExist: (profiles: readonly string[]) => Promise<readonly string[]>;
|
|
37
41
|
export declare const assignProfiles: (request: AssignProfilesRequest, cwd: string) => Promise<AssignProfilesResult>;
|
|
38
42
|
export {};
|
|
39
43
|
//# sourceMappingURL=profile.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../src/services/profile.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../src/services/profile.ts"],"names":[],"mappings":"AA0BA,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC;IACvC,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7B,CAAC,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC;IACvC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,GAAG,QAAQ,CAAC;IACrC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,WAAW,EAAE,SAAS,iBAAiB,EAAE,CAAC;IAC1C,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,kBAAkB,EAAE,OAAO,CAAC;IAC5B,gBAAgB,EAAE,MAAM,CAAC;CAC1B,CAAC,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,QAAQ,CAAC;IACzC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,OAAO,GAAG,KAAK,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC,CAAC;AAEH,MAAM,MAAM,2BAA2B,GAAG,QAAQ,CAAC;IACjD,MAAM,EAAE,OAAO,GAAG,SAAS,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC,CAAC;AAEH,KAAK,qBAAqB,GAAG,QAAQ,CAAC;IACpC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC,CAAC;AAEH,KAAK,oBAAoB,GAAG,QAAQ,CAAC;IACnC,MAAM,EAAE,UAAU,GAAG,WAAW,CAAC;IACjC,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7B,CAAC,CAAC;AA6CH,eAAO,MAAM,YAAY,QAAa,OAAO,CAAC,iBAAiB,CAmC9D,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAC3B,SAAS,MAAM,KACd,OAAO,CAAC,mBAAmB,CA2B7B,CAAC;AAEF,eAAO,MAAM,UAAU,GACrB,SAAS,MAAM,KACd,OAAO,CAAC,2BAA2B,CA0BrC,CAAC;AAEF,eAAO,MAAM,aAAa,GACxB,SAAS,MAAM,KACd,OAAO,CAAC,2BAA2B,CAmDrC,CAAC;AAEF,eAAO,MAAM,kBAAkB,QAAa,OAAO,CAAC,mBAAmB,CAgBtE,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAChC,UAAU,SAAS,MAAM,EAAE,KAC1B,OAAO,CAAC,SAAS,MAAM,EAAE,CAG3B,CAAC;AAEF,eAAO,MAAM,cAAc,GACzB,SAAS,qBAAqB,EAC9B,KAAK,MAAM,KACV,OAAO,CAAC,oBAAoB,CA+D9B,CAAC"}
|