@tinyrack/devsync 1.1.0 → 1.3.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.
Files changed (220) hide show
  1. package/README.md +230 -62
  2. package/dist/cli/base-command.d.ts +14 -0
  3. package/dist/cli/base-command.d.ts.map +1 -0
  4. package/dist/cli/base-command.js +22 -0
  5. package/dist/cli/base-command.js.map +1 -0
  6. package/dist/cli/commands/dir.d.ts +8 -0
  7. package/dist/cli/commands/dir.d.ts.map +1 -0
  8. package/dist/cli/commands/dir.js +16 -0
  9. package/dist/cli/commands/dir.js.map +1 -0
  10. package/dist/cli/commands/doctor.d.ts +8 -0
  11. package/dist/cli/commands/doctor.d.ts.map +1 -0
  12. package/dist/cli/commands/doctor.js +18 -0
  13. package/dist/cli/commands/doctor.js.map +1 -0
  14. package/dist/cli/commands/index.d.ts +23 -0
  15. package/dist/cli/commands/index.d.ts.map +1 -0
  16. package/dist/cli/commands/index.js +23 -0
  17. package/dist/cli/commands/index.js.map +1 -0
  18. package/dist/cli/commands/init.d.ts +15 -0
  19. package/dist/cli/commands/init.d.ts.map +1 -0
  20. package/dist/cli/commands/init.js +43 -0
  21. package/dist/cli/commands/init.js.map +1 -0
  22. package/dist/cli/commands/machine/list.d.ts +7 -0
  23. package/dist/cli/commands/machine/list.d.ts.map +1 -0
  24. package/dist/cli/commands/machine/list.js +12 -0
  25. package/dist/cli/commands/machine/list.js.map +1 -0
  26. package/dist/cli/commands/machine/use.d.ts +11 -0
  27. package/dist/cli/commands/machine/use.d.ts.map +1 -0
  28. package/dist/cli/commands/machine/use.js +28 -0
  29. package/dist/cli/commands/machine/use.js.map +1 -0
  30. package/dist/cli/commands/pull.d.ts +12 -0
  31. package/dist/cli/commands/pull.d.ts.map +1 -0
  32. package/dist/cli/commands/pull.js +34 -0
  33. package/dist/cli/commands/pull.js.map +1 -0
  34. package/dist/cli/commands/push.d.ts +12 -0
  35. package/dist/cli/commands/push.d.ts.map +1 -0
  36. package/dist/cli/commands/push.js +34 -0
  37. package/dist/cli/commands/push.js.map +1 -0
  38. package/dist/cli/commands/status.d.ts +11 -0
  39. package/dist/cli/commands/status.d.ts.map +1 -0
  40. package/dist/cli/commands/status.js +27 -0
  41. package/dist/cli/commands/status.js.map +1 -0
  42. package/dist/cli/commands/track.d.ts +16 -0
  43. package/dist/cli/commands/track.d.ts.map +1 -0
  44. package/dist/cli/commands/track.js +82 -0
  45. package/dist/cli/commands/track.js.map +1 -0
  46. package/dist/cli/commands/untrack.d.ts +11 -0
  47. package/dist/cli/commands/untrack.d.ts.map +1 -0
  48. package/dist/cli/commands/untrack.js +28 -0
  49. package/dist/cli/commands/untrack.js.map +1 -0
  50. package/dist/config/global-config.d.ts +21 -0
  51. package/dist/config/global-config.d.ts.map +1 -0
  52. package/dist/config/global-config.js +106 -0
  53. package/dist/config/global-config.js.map +1 -0
  54. package/dist/config/platform.d.ts +11 -0
  55. package/dist/config/platform.d.ts.map +1 -0
  56. package/dist/config/platform.js +19 -0
  57. package/dist/config/platform.js.map +1 -0
  58. package/dist/config/sync.d.ts +107 -0
  59. package/dist/config/sync.d.ts.map +1 -0
  60. package/dist/config/sync.js +424 -0
  61. package/dist/config/sync.js.map +1 -0
  62. package/dist/config/xdg.d.ts +14 -0
  63. package/dist/config/xdg.d.ts.map +1 -0
  64. package/dist/config/xdg.js +102 -0
  65. package/dist/config/xdg.js.map +1 -0
  66. package/dist/index.d.ts +3 -0
  67. package/dist/index.d.ts.map +1 -0
  68. package/{src/index.ts → dist/index.js} +1 -1
  69. package/dist/index.js.map +1 -0
  70. package/dist/lib/file-mode.d.ts +3 -0
  71. package/dist/lib/file-mode.d.ts.map +1 -0
  72. package/dist/lib/file-mode.js +7 -0
  73. package/dist/lib/file-mode.js.map +1 -0
  74. package/dist/lib/output.d.ts +31 -0
  75. package/dist/lib/output.d.ts.map +1 -0
  76. package/dist/lib/output.js +198 -0
  77. package/dist/lib/output.js.map +1 -0
  78. package/dist/lib/path.d.ts +5 -0
  79. package/dist/lib/path.d.ts.map +1 -0
  80. package/dist/lib/path.js +25 -0
  81. package/dist/lib/path.js.map +1 -0
  82. package/dist/lib/string.d.ts +2 -0
  83. package/dist/lib/string.d.ts.map +1 -0
  84. package/dist/lib/string.js +4 -0
  85. package/dist/lib/string.js.map +1 -0
  86. package/dist/lib/validation.d.ts +3 -0
  87. package/dist/lib/validation.d.ts.map +1 -0
  88. package/dist/lib/validation.js +9 -0
  89. package/dist/lib/validation.js.map +1 -0
  90. package/dist/services/add.d.ts +20 -0
  91. package/dist/services/add.d.ts.map +1 -0
  92. package/dist/services/add.js +161 -0
  93. package/dist/services/add.js.map +1 -0
  94. package/dist/services/config-file.d.ts +45 -0
  95. package/dist/services/config-file.d.ts.map +1 -0
  96. package/dist/services/config-file.js +35 -0
  97. package/dist/services/config-file.js.map +1 -0
  98. package/dist/services/crypto.d.ts +9 -0
  99. package/dist/services/crypto.d.ts.map +1 -0
  100. package/dist/services/crypto.js +75 -0
  101. package/dist/services/crypto.js.map +1 -0
  102. package/dist/services/doctor.d.ts +16 -0
  103. package/dist/services/doctor.d.ts.map +1 -0
  104. package/dist/services/doctor.js +84 -0
  105. package/dist/services/doctor.js.map +1 -0
  106. package/dist/services/error.d.ts +14 -0
  107. package/dist/services/error.d.ts.map +1 -0
  108. package/dist/services/error.js +38 -0
  109. package/dist/services/error.js.map +1 -0
  110. package/dist/services/filesystem.d.ts +15 -0
  111. package/dist/services/filesystem.d.ts.map +1 -0
  112. package/dist/services/filesystem.js +113 -0
  113. package/dist/services/filesystem.js.map +1 -0
  114. package/dist/services/forget.d.ts +14 -0
  115. package/dist/services/forget.d.ts.map +1 -0
  116. package/dist/services/forget.js +124 -0
  117. package/dist/services/forget.js.map +1 -0
  118. package/dist/services/git.d.ts +10 -0
  119. package/dist/services/git.d.ts.map +1 -0
  120. package/dist/services/git.js +57 -0
  121. package/dist/services/git.js.map +1 -0
  122. package/dist/services/init.d.ts +19 -0
  123. package/dist/services/init.d.ts.map +1 -0
  124. package/dist/services/init.js +203 -0
  125. package/dist/services/init.js.map +1 -0
  126. package/dist/services/local-materialization.d.ts +28 -0
  127. package/dist/services/local-materialization.d.ts.map +1 -0
  128. package/dist/services/local-materialization.js +262 -0
  129. package/dist/services/local-materialization.js.map +1 -0
  130. package/dist/services/local-snapshot.d.ts +25 -0
  131. package/dist/services/local-snapshot.d.ts.map +1 -0
  132. package/dist/services/local-snapshot.js +93 -0
  133. package/dist/services/local-snapshot.js.map +1 -0
  134. package/dist/services/machine.d.ts +40 -0
  135. package/dist/services/machine.d.ts.map +1 -0
  136. package/dist/services/machine.js +113 -0
  137. package/dist/services/machine.js.map +1 -0
  138. package/dist/services/paths.d.ts +13 -0
  139. package/dist/services/paths.d.ts.map +1 -0
  140. package/dist/services/paths.js +71 -0
  141. package/dist/services/paths.js.map +1 -0
  142. package/dist/services/pull.d.ts +28 -0
  143. package/dist/services/pull.d.ts.map +1 -0
  144. package/dist/services/pull.js +67 -0
  145. package/dist/services/pull.js.map +1 -0
  146. package/dist/services/push.d.ts +35 -0
  147. package/dist/services/push.d.ts.map +1 -0
  148. package/dist/services/push.js +96 -0
  149. package/dist/services/push.js.map +1 -0
  150. package/dist/services/repo-artifacts.d.ts +52 -0
  151. package/dist/services/repo-artifacts.d.ts.map +1 -0
  152. package/dist/services/repo-artifacts.js +251 -0
  153. package/dist/services/repo-artifacts.js.map +1 -0
  154. package/dist/services/repo-snapshot.d.ts +6 -0
  155. package/dist/services/repo-snapshot.d.ts.map +1 -0
  156. package/dist/services/repo-snapshot.js +163 -0
  157. package/dist/services/repo-snapshot.js.map +1 -0
  158. package/dist/services/runtime.d.ts +40 -0
  159. package/dist/services/runtime.d.ts.map +1 -0
  160. package/dist/services/runtime.js +71 -0
  161. package/dist/services/runtime.js.map +1 -0
  162. package/dist/services/set.d.ts +38 -0
  163. package/dist/services/set.d.ts.map +1 -0
  164. package/dist/services/set.js +184 -0
  165. package/dist/services/set.js.map +1 -0
  166. package/dist/services/status.d.ts +30 -0
  167. package/dist/services/status.d.ts.map +1 -0
  168. package/dist/services/status.js +35 -0
  169. package/dist/services/status.js.map +1 -0
  170. package/package.json +15 -7
  171. package/src/cli/commands/add.ts +0 -40
  172. package/src/cli/commands/cd.ts +0 -80
  173. package/src/cli/commands/doctor.ts +0 -20
  174. package/src/cli/commands/forget.ts +0 -32
  175. package/src/cli/commands/index.ts +0 -23
  176. package/src/cli/commands/init.ts +0 -43
  177. package/src/cli/commands/list.ts +0 -17
  178. package/src/cli/commands/pull.ts +0 -31
  179. package/src/cli/commands/push.ts +0 -31
  180. package/src/cli/commands/set.ts +0 -47
  181. package/src/cli/commands/status.ts +0 -18
  182. package/src/cli/sync-output.test.ts +0 -173
  183. package/src/cli/sync-output.ts +0 -200
  184. package/src/config/sync.test.ts +0 -609
  185. package/src/config/sync.ts +0 -572
  186. package/src/config/xdg.ts +0 -138
  187. package/src/lib/string.test.ts +0 -13
  188. package/src/lib/string.ts +0 -3
  189. package/src/lib/validation.test.ts +0 -32
  190. package/src/lib/validation.ts +0 -11
  191. package/src/services/add.ts +0 -178
  192. package/src/services/config-file.test.ts +0 -161
  193. package/src/services/config-file.ts +0 -101
  194. package/src/services/crypto.test.ts +0 -132
  195. package/src/services/crypto.ts +0 -83
  196. package/src/services/doctor.ts +0 -142
  197. package/src/services/error.ts +0 -6
  198. package/src/services/filesystem.test.ts +0 -171
  199. package/src/services/filesystem.ts +0 -183
  200. package/src/services/forget.ts +0 -261
  201. package/src/services/git.test.ts +0 -83
  202. package/src/services/git.ts +0 -74
  203. package/src/services/init.test.ts +0 -109
  204. package/src/services/init.ts +0 -244
  205. package/src/services/list.ts +0 -63
  206. package/src/services/local-materialization.ts +0 -421
  207. package/src/services/local-snapshot.ts +0 -173
  208. package/src/services/paths.test.ts +0 -74
  209. package/src/services/paths.ts +0 -98
  210. package/src/services/pull.ts +0 -144
  211. package/src/services/push.ts +0 -168
  212. package/src/services/repo-artifacts.ts +0 -262
  213. package/src/services/repo-snapshot.ts +0 -197
  214. package/src/services/runtime.ts +0 -57
  215. package/src/services/set.ts +0 -383
  216. package/src/services/status.ts +0 -57
  217. package/src/services/sync.dry-run.test.ts +0 -179
  218. package/src/services/sync.runtime.test.ts +0 -756
  219. package/src/services/sync.service.test.ts +0 -1169
  220. package/src/test/helpers/sync-fixture.ts +0 -47
@@ -0,0 +1,107 @@
1
+ import { z } from "zod";
2
+ import type { ConfiguredLocalPath } from "#app/config/platform.js";
3
+ export declare const syncConfigFileName = "manifest.json";
4
+ export declare const syncSecretArtifactSuffix = ".devsync.secret";
5
+ declare const syncEntryKinds: readonly ["file", "directory"];
6
+ export declare const syncModes: readonly ["normal", "secret", "ignore"];
7
+ declare const syncConfigSchema: z.ZodUnion<readonly [z.ZodObject<{
8
+ version: z.ZodLiteral<5>;
9
+ entries: z.ZodArray<z.ZodObject<{
10
+ kind: z.ZodEnum<{
11
+ file: "file";
12
+ directory: "directory";
13
+ }>;
14
+ localPath: z.ZodObject<{
15
+ default: z.ZodString;
16
+ win: z.ZodOptional<z.ZodString>;
17
+ mac: z.ZodOptional<z.ZodString>;
18
+ linux: z.ZodOptional<z.ZodString>;
19
+ }, z.core.$strict>;
20
+ machines: z.ZodOptional<z.ZodArray<z.ZodString>>;
21
+ mode: z.ZodOptional<z.ZodEnum<{
22
+ normal: "normal";
23
+ secret: "secret";
24
+ ignore: "ignore";
25
+ }>>;
26
+ }, z.core.$strict>>;
27
+ }, z.core.$strict>, z.ZodObject<{
28
+ version: z.ZodLiteral<6>;
29
+ age: z.ZodObject<{
30
+ identityFile: z.ZodString;
31
+ recipients: z.ZodArray<z.ZodString>;
32
+ }, z.core.$strict>;
33
+ entries: z.ZodArray<z.ZodObject<{
34
+ kind: z.ZodEnum<{
35
+ file: "file";
36
+ directory: "directory";
37
+ }>;
38
+ localPath: z.ZodObject<{
39
+ default: z.ZodString;
40
+ win: z.ZodOptional<z.ZodString>;
41
+ mac: z.ZodOptional<z.ZodString>;
42
+ linux: z.ZodOptional<z.ZodString>;
43
+ }, z.core.$strict>;
44
+ machines: z.ZodOptional<z.ZodArray<z.ZodString>>;
45
+ mode: z.ZodOptional<z.ZodEnum<{
46
+ normal: "normal";
47
+ secret: "secret";
48
+ ignore: "ignore";
49
+ }>>;
50
+ }, z.core.$strict>>;
51
+ }, z.core.$strict>]>;
52
+ export type SyncConfigEntryKind = (typeof syncEntryKinds)[number];
53
+ export type SyncMode = (typeof syncModes)[number];
54
+ export type SyncConfig = z.infer<typeof syncConfigSchema>;
55
+ export type ResolvedSyncConfigEntry = Readonly<{
56
+ configuredLocalPath: ConfiguredLocalPath;
57
+ kind: SyncConfigEntryKind;
58
+ localPath: string;
59
+ machines: readonly string[];
60
+ machinesExplicit: boolean;
61
+ mode: SyncMode;
62
+ modeExplicit: boolean;
63
+ name: string;
64
+ repoPath: string;
65
+ }>;
66
+ export type ResolvedSyncConfigAge = Readonly<{
67
+ identityFile: string;
68
+ recipients: readonly string[];
69
+ }>;
70
+ export type ResolvedSyncConfig = Readonly<{
71
+ age?: ResolvedSyncConfigAge;
72
+ entries: readonly ResolvedSyncConfigEntry[];
73
+ version: 5 | 6;
74
+ }>;
75
+ export declare const syncDefaultMachine = "default";
76
+ export declare const normalizeSyncRepoPath: (value: string) => string;
77
+ export declare const normalizeSyncMachineName: (value: string, description?: string) => string;
78
+ export declare const hasReservedSyncArtifactSuffixSegment: (value: string) => boolean;
79
+ export declare const findOwningSyncEntry: (config: Pick<ResolvedSyncConfig, "entries">, repoPath: string) => ResolvedSyncConfigEntry | undefined;
80
+ export declare const resolveEntryRelativeRepoPath: (entry: Pick<ResolvedSyncConfigEntry, "kind" | "repoPath">, repoPath: string) => string | undefined;
81
+ export declare const deriveRepoPathFromLocalPath: (localPath: ConfiguredLocalPath, environment: NodeJS.ProcessEnv) => string;
82
+ export declare const validateResolvedSyncConfigEntries: (entries: readonly ResolvedSyncConfigEntry[]) => void;
83
+ export declare const parseSyncConfig: (input: unknown, environment?: NodeJS.ProcessEnv) => ResolvedSyncConfig;
84
+ export declare const createInitialSyncConfig: (age: {
85
+ identityFile: string;
86
+ recipients: string[];
87
+ }) => SyncConfig;
88
+ export declare const formatSyncConfig: (config: SyncConfig) => string;
89
+ export declare const resolveSyncConfigPath: (environment?: NodeJS.ProcessEnv) => string;
90
+ export declare const resolveSyncConfigFilePath: (syncDirectory?: string) => string;
91
+ export declare const resolveSyncArtifactsDirectoryPath: (syncDirectory: string) => string;
92
+ export declare const readSyncConfig: (syncDirectory?: string, environment?: NodeJS.ProcessEnv) => Promise<Readonly<{
93
+ age?: ResolvedSyncConfigAge;
94
+ entries: readonly ResolvedSyncConfigEntry[];
95
+ version: 5 | 6;
96
+ }>>;
97
+ export declare const resolveSyncRule: (config: ResolvedSyncConfig, repoPath: string, activeMachine?: string) => {
98
+ mode: SyncMode;
99
+ machine: string;
100
+ } | undefined;
101
+ export declare const resolveSyncMode: (config: ResolvedSyncConfig, repoPath: string, activeMachine?: string) => SyncMode | undefined;
102
+ export declare const isIgnoredSyncPath: (config: ResolvedSyncConfig, repoPath: string) => boolean;
103
+ export declare const isSecretSyncPath: (config: ResolvedSyncConfig, repoPath: string) => boolean;
104
+ export declare const resolveManagedSyncMode: (config: ResolvedSyncConfig, repoPath: string, activeMachine?: string, context?: string) => "normal" | "secret" | "ignore";
105
+ export declare const collectAllMachineNames: (entries: readonly ResolvedSyncConfigEntry[]) => string[];
106
+ export {};
107
+ //# sourceMappingURL=sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/config/sync.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,424 @@
1
+ import { readFile } from "node:fs/promises";
2
+ import { isAbsolute, join, posix, relative, sep } from "node:path";
3
+ import { z } from "zod";
4
+ import { getDefaultLocalPath, resolveLocalPathForPlatform, } from "#app/config/platform.js";
5
+ import { resolveDevsyncSyncDirectory, resolveHomeConfiguredAbsolutePath, resolveHomeDirectory, resolvePlatformConfiguredAbsolutePath, } from "#app/config/xdg.js";
6
+ import { doPathsOverlap } from "#app/lib/path.js";
7
+ import { ensureTrailingNewline } from "#app/lib/string.js";
8
+ import { formatInputIssues } from "#app/lib/validation.js";
9
+ import { DevsyncError } from "#app/services/error.js";
10
+ export const syncConfigFileName = "manifest.json";
11
+ export const syncSecretArtifactSuffix = ".devsync.secret";
12
+ const syncEntryKinds = ["file", "directory"];
13
+ export const syncModes = ["normal", "secret", "ignore"];
14
+ const requiredTrimmedStringSchema = z
15
+ .string()
16
+ .trim()
17
+ .min(1, "Value must not be empty.");
18
+ const syncMachineNameArraySchema = z
19
+ .array(requiredTrimmedStringSchema)
20
+ .min(1, "At least one machine must be specified.");
21
+ const platformLocalPathSchema = z
22
+ .object({
23
+ default: requiredTrimmedStringSchema,
24
+ win: requiredTrimmedStringSchema.optional(),
25
+ mac: requiredTrimmedStringSchema.optional(),
26
+ linux: requiredTrimmedStringSchema.optional(),
27
+ })
28
+ .strict();
29
+ const localPathSchema = platformLocalPathSchema;
30
+ const syncConfigEntrySchema = z
31
+ .object({
32
+ kind: z.enum(syncEntryKinds),
33
+ localPath: localPathSchema,
34
+ machines: syncMachineNameArraySchema.optional(),
35
+ mode: z.enum(syncModes).optional(),
36
+ })
37
+ .strict();
38
+ const syncConfigAgeSchema = z
39
+ .object({
40
+ identityFile: requiredTrimmedStringSchema,
41
+ recipients: z
42
+ .array(requiredTrimmedStringSchema)
43
+ .min(1, "At least one age recipient is required."),
44
+ })
45
+ .strict();
46
+ const syncConfigSchemaV5 = z
47
+ .object({
48
+ version: z.literal(5),
49
+ entries: z.array(syncConfigEntrySchema),
50
+ })
51
+ .strict();
52
+ const syncConfigSchemaV6 = z
53
+ .object({
54
+ version: z.literal(6),
55
+ age: syncConfigAgeSchema,
56
+ entries: z.array(syncConfigEntrySchema),
57
+ })
58
+ .strict();
59
+ const syncConfigSchema = z.union([syncConfigSchemaV5, syncConfigSchemaV6]);
60
+ export const syncDefaultMachine = "default";
61
+ export const normalizeSyncRepoPath = (value) => {
62
+ const normalizedValue = posix.normalize(value.replaceAll("\\", "/"));
63
+ if (normalizedValue === "" ||
64
+ normalizedValue === "." ||
65
+ normalizedValue.startsWith("../") ||
66
+ normalizedValue.includes("/../") ||
67
+ normalizedValue.startsWith("/")) {
68
+ throw new DevsyncError("Repository path must be a relative POSIX path inside the repository root.", {
69
+ code: "INVALID_REPO_PATH",
70
+ details: [`Repository path: ${value}`],
71
+ hint: "Use a relative path like '.config/tool/settings.json' without '..' segments.",
72
+ });
73
+ }
74
+ if (hasReservedSyncArtifactSuffixSegment(normalizedValue)) {
75
+ throw new DevsyncError(`Repository path must not use the reserved suffix ${syncSecretArtifactSuffix}.`, {
76
+ code: "RESERVED_SECRET_SUFFIX",
77
+ details: [`Repository path: ${value}`],
78
+ hint: "Rename the path so no segment ends with the secret artifact suffix.",
79
+ });
80
+ }
81
+ return normalizedValue;
82
+ };
83
+ export const normalizeSyncMachineName = (value, description = "Machine name") => {
84
+ const normalizedValue = value.trim();
85
+ if (normalizedValue.length === 0) {
86
+ throw new DevsyncError(`${description} must not be empty.`, {
87
+ code: "INVALID_MACHINE_NAME",
88
+ details: [`${description}: ${value}`],
89
+ hint: "Use a short machine name like 'work' or 'personal'.",
90
+ });
91
+ }
92
+ if (!/^[A-Za-z0-9][A-Za-z0-9._-]*$/u.test(normalizedValue)) {
93
+ throw new DevsyncError(`${description} contains unsupported characters.`, {
94
+ code: "INVALID_MACHINE_NAME",
95
+ details: [`${description}: ${value}`],
96
+ hint: "Use letters, numbers, dots, underscores, or hyphens, and start with a letter or number.",
97
+ });
98
+ }
99
+ if (normalizedValue.startsWith(".")) {
100
+ throw new DevsyncError(`${description} must not start with '.'.`, {
101
+ code: "INVALID_MACHINE_NAME",
102
+ details: [`${description}: ${value}`],
103
+ hint: "Use a plain name like 'work' instead of hidden-path style names.",
104
+ });
105
+ }
106
+ if (normalizedValue === "." || normalizedValue === "..") {
107
+ throw new DevsyncError(`${description} is invalid.`, {
108
+ code: "INVALID_MACHINE_NAME",
109
+ details: [`${description}: ${value}`],
110
+ });
111
+ }
112
+ return normalizedValue;
113
+ };
114
+ export const hasReservedSyncArtifactSuffixSegment = (value) => {
115
+ return value
116
+ .replaceAll("\\", "/")
117
+ .split("/")
118
+ .some((segment) => segment.endsWith(syncSecretArtifactSuffix));
119
+ };
120
+ const matchesEntryPath = (entry, repoPath) => {
121
+ return (entry.repoPath === repoPath ||
122
+ (entry.kind === "directory" && repoPath.startsWith(`${entry.repoPath}/`)));
123
+ };
124
+ export const findOwningSyncEntry = (config, repoPath) => {
125
+ let best;
126
+ for (const entry of config.entries) {
127
+ if (matchesEntryPath(entry, repoPath) &&
128
+ (best === undefined || entry.repoPath.length > best.repoPath.length)) {
129
+ best = entry;
130
+ }
131
+ }
132
+ return best;
133
+ };
134
+ export const resolveEntryRelativeRepoPath = (entry, repoPath) => {
135
+ if (entry.kind === "file") {
136
+ return repoPath === entry.repoPath ? "" : undefined;
137
+ }
138
+ if (repoPath === entry.repoPath) {
139
+ return "";
140
+ }
141
+ if (!repoPath.startsWith(`${entry.repoPath}/`)) {
142
+ return undefined;
143
+ }
144
+ return repoPath.slice(entry.repoPath.length + 1);
145
+ };
146
+ const resolveSyncEntryLocalPath = (value, environment) => {
147
+ const homeDirectory = resolveHomeDirectory(environment);
148
+ const platformPath = resolveLocalPathForPlatform(value);
149
+ let resolvedLocalPath;
150
+ try {
151
+ resolvedLocalPath = resolvePlatformConfiguredAbsolutePath(platformPath, environment);
152
+ }
153
+ catch (error) {
154
+ throw new DevsyncError(error instanceof Error
155
+ ? error.message
156
+ : `Invalid sync entry local path: ${platformPath}`);
157
+ }
158
+ const relativePath = relative(homeDirectory, resolvedLocalPath);
159
+ if (relativePath === "") {
160
+ throw new DevsyncError("Sync entry local path cannot be the home directory itself.", {
161
+ code: "ENTRY_ROOT_DISALLOWED",
162
+ details: [
163
+ `Configured path: ${platformPath}`,
164
+ `Home directory: ${homeDirectory}`,
165
+ ],
166
+ hint: "Track a file or subdirectory inside HOME instead.",
167
+ });
168
+ }
169
+ if (isAbsolute(relativePath) ||
170
+ relativePath.startsWith("..") ||
171
+ relativePath === "..") {
172
+ throw new DevsyncError("Sync entry local path must stay inside HOME.", {
173
+ code: "ENTRY_OUTSIDE_HOME",
174
+ details: [
175
+ `Configured path: ${platformPath}`,
176
+ `Home directory: ${homeDirectory}`,
177
+ ],
178
+ hint: "Use a path under HOME, such as '~/...'.",
179
+ });
180
+ }
181
+ return resolvedLocalPath;
182
+ };
183
+ export const deriveRepoPathFromLocalPath = (localPath, environment) => {
184
+ const homeDirectory = resolveHomeDirectory(environment);
185
+ const defaultPath = getDefaultLocalPath(localPath);
186
+ const resolvedDefaultPath = resolveHomeConfiguredAbsolutePath(defaultPath, environment);
187
+ const relativePath = relative(homeDirectory, resolvedDefaultPath);
188
+ return normalizeSyncRepoPath(relativePath.replaceAll("\\", "/"));
189
+ };
190
+ const validatePathOverlaps = (entries, property, description) => {
191
+ for (let index = 0; index < entries.length; index += 1) {
192
+ const currentEntry = entries[index];
193
+ if (currentEntry === undefined) {
194
+ continue;
195
+ }
196
+ for (let otherIndex = index + 1; otherIndex < entries.length; otherIndex += 1) {
197
+ const otherEntry = entries[otherIndex];
198
+ if (otherEntry === undefined) {
199
+ continue;
200
+ }
201
+ const currentValue = currentEntry[property];
202
+ const otherValue = otherEntry[property];
203
+ if (currentValue === otherValue) {
204
+ throw new DevsyncError(`Duplicate ${description.toLowerCase()} paths in manifest.json.`, {
205
+ code: "DUPLICATE_PATHS",
206
+ details: [
207
+ `${currentEntry.name}: ${currentValue}`,
208
+ `${otherEntry.name}: ${otherValue}`,
209
+ ],
210
+ hint: "Remove the duplicate entry from manifest.json.",
211
+ });
212
+ }
213
+ const isParentChild = currentValue.startsWith(`${otherValue}/`) ||
214
+ currentValue.startsWith(`${otherValue}${sep}`) ||
215
+ otherValue.startsWith(`${currentValue}/`) ||
216
+ otherValue.startsWith(`${currentValue}${sep}`);
217
+ if (isParentChild) {
218
+ continue;
219
+ }
220
+ const overlaps = property === "repoPath"
221
+ ? false
222
+ : doPathsOverlap(currentValue, otherValue);
223
+ if (overlaps) {
224
+ throw new DevsyncError(`${description} paths must not overlap in manifest.json.`, {
225
+ code: "OVERLAPPING_PATHS",
226
+ details: [
227
+ `${currentEntry.name}: ${currentValue}`,
228
+ `${otherEntry.name}: ${otherValue}`,
229
+ ],
230
+ hint: "Split overlapping entries so each tracked root owns a distinct path.",
231
+ });
232
+ }
233
+ }
234
+ }
235
+ };
236
+ export const validateResolvedSyncConfigEntries = (entries) => {
237
+ validatePathOverlaps(entries, "repoPath", "Repository");
238
+ validatePathOverlaps(entries, "localPath", "Local");
239
+ };
240
+ const buildNormalizedMachines = (entry) => {
241
+ if (entry.machines === undefined || entry.machines.length === 0) {
242
+ return [];
243
+ }
244
+ for (const machine of entry.machines) {
245
+ normalizeSyncMachineName(machine);
246
+ }
247
+ return entry.machines;
248
+ };
249
+ const findNearestParentEntry = (entries, childRepoPath) => {
250
+ let best;
251
+ for (const entry of entries.values()) {
252
+ if (entry.kind === "directory" &&
253
+ childRepoPath !== entry.repoPath &&
254
+ childRepoPath.startsWith(`${entry.repoPath}/`) &&
255
+ (best === undefined || entry.repoPath.length > best.repoPath.length)) {
256
+ best = entry;
257
+ }
258
+ }
259
+ return best;
260
+ };
261
+ const applyEntryInheritance = (entries) => {
262
+ const sorted = [...entries].sort((a, b) => a.repoPath.length - b.repoPath.length);
263
+ const resolved = new Map();
264
+ for (const entry of sorted) {
265
+ const parent = findNearestParentEntry(resolved, entry.repoPath);
266
+ const inheritedMode = !entry.modeExplicit && parent !== undefined ? parent.mode : entry.mode;
267
+ const inheritedMachines = !entry.machinesExplicit && parent !== undefined
268
+ ? parent.machines
269
+ : entry.machines;
270
+ resolved.set(entry.repoPath, {
271
+ ...entry,
272
+ machines: inheritedMachines,
273
+ mode: inheritedMode,
274
+ });
275
+ }
276
+ return entries.map((e) => {
277
+ const entry = resolved.get(e.repoPath);
278
+ if (entry === undefined) {
279
+ throw new Error(`Missing resolved entry for ${e.repoPath}`);
280
+ }
281
+ return entry;
282
+ });
283
+ };
284
+ export const parseSyncConfig = (input, environment = process.env) => {
285
+ const result = syncConfigSchema.safeParse(input);
286
+ if (!result.success) {
287
+ throw new DevsyncError("Sync configuration is invalid.", {
288
+ code: "CONFIG_VALIDATION_FAILED",
289
+ details: formatInputIssues(result.error.issues).split("\n"),
290
+ hint: "Fix the invalid fields in manifest.json, then run the command again.",
291
+ });
292
+ }
293
+ const rawEntries = result.data.entries.map((entry) => {
294
+ const resolvedLocalPath = resolveSyncEntryLocalPath(entry.localPath, environment);
295
+ const repoPath = deriveRepoPathFromLocalPath(entry.localPath, environment);
296
+ const machines = buildNormalizedMachines(entry);
297
+ const mode = entry.mode ?? "normal";
298
+ return {
299
+ configuredLocalPath: entry.localPath,
300
+ kind: entry.kind,
301
+ localPath: resolvedLocalPath,
302
+ machines,
303
+ machinesExplicit: entry.machines !== undefined,
304
+ mode,
305
+ modeExplicit: entry.mode !== undefined,
306
+ name: repoPath,
307
+ repoPath,
308
+ };
309
+ });
310
+ validateResolvedSyncConfigEntries(rawEntries);
311
+ const entries = applyEntryInheritance(rawEntries);
312
+ const age = result.data.version === 6
313
+ ? {
314
+ identityFile: result.data.age.identityFile,
315
+ recipients: [...new Set(result.data.age.recipients)],
316
+ }
317
+ : undefined;
318
+ return {
319
+ ...(age === undefined ? {} : { age }),
320
+ entries,
321
+ version: result.data.version,
322
+ };
323
+ };
324
+ export const createInitialSyncConfig = (age) => {
325
+ return {
326
+ version: 6,
327
+ age,
328
+ entries: [],
329
+ };
330
+ };
331
+ export const formatSyncConfig = (config) => {
332
+ return ensureTrailingNewline(JSON.stringify(config, null, 2));
333
+ };
334
+ export const resolveSyncConfigPath = (environment = process.env) => {
335
+ return posix.join(resolveDevsyncSyncDirectory(environment).replaceAll("\\", "/"), syncConfigFileName);
336
+ };
337
+ export const resolveSyncConfigFilePath = (syncDirectory = resolveDevsyncSyncDirectory()) => {
338
+ return join(syncDirectory, syncConfigFileName);
339
+ };
340
+ export const resolveSyncArtifactsDirectoryPath = (syncDirectory) => {
341
+ return syncDirectory;
342
+ };
343
+ export const readSyncConfig = async (syncDirectory = resolveDevsyncSyncDirectory(), environment = process.env) => {
344
+ try {
345
+ const contents = await readFile(resolveSyncConfigFilePath(syncDirectory), "utf8");
346
+ return parseSyncConfig(JSON.parse(contents), environment);
347
+ }
348
+ catch (error) {
349
+ if (error instanceof DevsyncError) {
350
+ throw error;
351
+ }
352
+ if (error instanceof SyntaxError) {
353
+ throw new DevsyncError("Sync configuration is not valid JSON.", {
354
+ code: "CONFIG_INVALID_JSON",
355
+ details: [
356
+ `Config file: ${resolveSyncConfigFilePath(syncDirectory)}`,
357
+ error.message,
358
+ ],
359
+ hint: "Fix the JSON syntax in manifest.json, then run the command again.",
360
+ });
361
+ }
362
+ throw new DevsyncError("Failed to read sync configuration.", {
363
+ code: "CONFIG_READ_FAILED",
364
+ details: [
365
+ `Config file: ${resolveSyncConfigFilePath(syncDirectory)}`,
366
+ ...(error instanceof Error ? [error.message] : []),
367
+ ],
368
+ hint: "Run 'devsync init' if the sync repository has not been initialized yet.",
369
+ });
370
+ }
371
+ };
372
+ const resolveMachineForEntry = (entry, activeMachine) => {
373
+ if (entry.machines.length === 0) {
374
+ return syncDefaultMachine;
375
+ }
376
+ const effective = activeMachine !== undefined && activeMachine !== syncDefaultMachine
377
+ ? activeMachine
378
+ : syncDefaultMachine;
379
+ return entry.machines.includes(effective) ? effective : undefined;
380
+ };
381
+ export const resolveSyncRule = (config, repoPath, activeMachine) => {
382
+ const entry = findOwningSyncEntry(config, repoPath);
383
+ if (entry === undefined) {
384
+ return undefined;
385
+ }
386
+ const machine = resolveMachineForEntry(entry, activeMachine);
387
+ if (machine === undefined) {
388
+ return undefined;
389
+ }
390
+ return { mode: entry.mode, machine };
391
+ };
392
+ export const resolveSyncMode = (config, repoPath, activeMachine) => {
393
+ return resolveSyncRule(config, repoPath, activeMachine)?.mode;
394
+ };
395
+ export const isIgnoredSyncPath = (config, repoPath) => {
396
+ return resolveSyncMode(config, repoPath) === "ignore";
397
+ };
398
+ export const isSecretSyncPath = (config, repoPath) => {
399
+ return resolveSyncMode(config, repoPath) === "secret";
400
+ };
401
+ export const resolveManagedSyncMode = (config, repoPath, activeMachine, context) => {
402
+ const mode = resolveSyncMode(config, repoPath, activeMachine);
403
+ if (mode === undefined) {
404
+ throw new DevsyncError("Repository path is not managed by the current sync configuration.", {
405
+ code: "UNMANAGED_SYNC_PATH",
406
+ details: [
407
+ `Repository path: ${repoPath}`,
408
+ ...(context === undefined ? [] : [`Context: ${context}`]),
409
+ ],
410
+ hint: "Add the parent path to devsync, or remove stray artifacts from the sync repository.",
411
+ });
412
+ }
413
+ return mode;
414
+ };
415
+ export const collectAllMachineNames = (entries) => {
416
+ const machines = new Set();
417
+ for (const entry of entries) {
418
+ for (const machine of entry.machines) {
419
+ machines.add(machine);
420
+ }
421
+ }
422
+ return [...machines].sort((left, right) => left.localeCompare(right));
423
+ };
424
+ //# sourceMappingURL=sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/config/sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAEnE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EACL,mBAAmB,EACnB,2BAA2B,GAC5B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,2BAA2B,EAC3B,iCAAiC,EACjC,oBAAoB,EACpB,qCAAqC,GACtC,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD,MAAM,CAAC,MAAM,kBAAkB,GAAG,eAAe,CAAC;AAClD,MAAM,CAAC,MAAM,wBAAwB,GAAG,iBAAiB,CAAC;AAE1D,MAAM,cAAc,GAAG,CAAC,MAAM,EAAE,WAAW,CAAU,CAAC;AACtD,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAU,CAAC;AAEjE,MAAM,2BAA2B,GAAG,CAAC;KAClC,MAAM,EAAE;KACR,IAAI,EAAE;KACN,GAAG,CAAC,CAAC,EAAE,0BAA0B,CAAC,CAAC;AAEtC,MAAM,0BAA0B,GAAG,CAAC;KACjC,KAAK,CAAC,2BAA2B,CAAC;KAClC,GAAG,CAAC,CAAC,EAAE,yCAAyC,CAAC,CAAC;AAErD,MAAM,uBAAuB,GAAG,CAAC;KAC9B,MAAM,CAAC;IACN,OAAO,EAAE,2BAA2B;IACpC,GAAG,EAAE,2BAA2B,CAAC,QAAQ,EAAE;IAC3C,GAAG,EAAE,2BAA2B,CAAC,QAAQ,EAAE;IAC3C,KAAK,EAAE,2BAA2B,CAAC,QAAQ,EAAE;CAC9C,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,MAAM,eAAe,GAAG,uBAAuB,CAAC;AAEhD,MAAM,qBAAqB,GAAG,CAAC;KAC5B,MAAM,CAAC;IACN,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC;IAC5B,SAAS,EAAE,eAAe;IAC1B,QAAQ,EAAE,0BAA0B,CAAC,QAAQ,EAAE;IAC/C,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE;CACnC,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,MAAM,mBAAmB,GAAG,CAAC;KAC1B,MAAM,CAAC;IACN,YAAY,EAAE,2BAA2B;IACzC,UAAU,EAAE,CAAC;SACV,KAAK,CAAC,2BAA2B,CAAC;SAClC,GAAG,CAAC,CAAC,EAAE,yCAAyC,CAAC;CACrD,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,MAAM,kBAAkB,GAAG,CAAC;KACzB,MAAM,CAAC;IACN,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACrB,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,qBAAqB,CAAC;CACxC,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,MAAM,kBAAkB,GAAG,CAAC;KACzB,MAAM,CAAC;IACN,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACrB,GAAG,EAAE,mBAAmB;IACxB,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,qBAAqB,CAAC;CACxC,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,CAAC,CAAC;AA6B3E,MAAM,CAAC,MAAM,kBAAkB,GAAG,SAAS,CAAC;AAE5C,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,KAAa,EAAE,EAAE;IACrD,MAAM,eAAe,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;IAErE,IACE,eAAe,KAAK,EAAE;QACtB,eAAe,KAAK,GAAG;QACvB,eAAe,CAAC,UAAU,CAAC,KAAK,CAAC;QACjC,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC;QAChC,eAAe,CAAC,UAAU,CAAC,GAAG,CAAC,EAC/B,CAAC;QACD,MAAM,IAAI,YAAY,CACpB,2EAA2E,EAC3E;YACE,IAAI,EAAE,mBAAmB;YACzB,OAAO,EAAE,CAAC,oBAAoB,KAAK,EAAE,CAAC;YACtC,IAAI,EAAE,8EAA8E;SACrF,CACF,CAAC;IACJ,CAAC;IAED,IAAI,oCAAoC,CAAC,eAAe,CAAC,EAAE,CAAC;QAC1D,MAAM,IAAI,YAAY,CACpB,oDAAoD,wBAAwB,GAAG,EAC/E;YACE,IAAI,EAAE,wBAAwB;YAC9B,OAAO,EAAE,CAAC,oBAAoB,KAAK,EAAE,CAAC;YACtC,IAAI,EAAE,qEAAqE;SAC5E,CACF,CAAC;IACJ,CAAC;IAED,OAAO,eAAe,CAAC;AACzB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG,CACtC,KAAa,EACb,WAAW,GAAG,cAAc,EAC5B,EAAE;IACF,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAErC,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,YAAY,CAAC,GAAG,WAAW,qBAAqB,EAAE;YAC1D,IAAI,EAAE,sBAAsB;YAC5B,OAAO,EAAE,CAAC,GAAG,WAAW,KAAK,KAAK,EAAE,CAAC;YACrC,IAAI,EAAE,qDAAqD;SAC5D,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,+BAA+B,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC;QAC3D,MAAM,IAAI,YAAY,CAAC,GAAG,WAAW,mCAAmC,EAAE;YACxE,IAAI,EAAE,sBAAsB;YAC5B,OAAO,EAAE,CAAC,GAAG,WAAW,KAAK,KAAK,EAAE,CAAC;YACrC,IAAI,EAAE,yFAAyF;SAChG,CAAC,CAAC;IACL,CAAC;IAED,IAAI,eAAe,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,YAAY,CAAC,GAAG,WAAW,2BAA2B,EAAE;YAChE,IAAI,EAAE,sBAAsB;YAC5B,OAAO,EAAE,CAAC,GAAG,WAAW,KAAK,KAAK,EAAE,CAAC;YACrC,IAAI,EAAE,kEAAkE;SACzE,CAAC,CAAC;IACL,CAAC;IAED,IAAI,eAAe,KAAK,GAAG,IAAI,eAAe,KAAK,IAAI,EAAE,CAAC;QACxD,MAAM,IAAI,YAAY,CAAC,GAAG,WAAW,cAAc,EAAE;YACnD,IAAI,EAAE,sBAAsB;YAC5B,OAAO,EAAE,CAAC,GAAG,WAAW,KAAK,KAAK,EAAE,CAAC;SACtC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,eAAe,CAAC;AACzB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,oCAAoC,GAAG,CAAC,KAAa,EAAE,EAAE;IACpE,OAAO,KAAK;SACT,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC;SACrB,KAAK,CAAC,GAAG,CAAC;SACV,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC,CAAC;AACnE,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CACvB,KAAyD,EACzD,QAAgB,EAChB,EAAE;IACF,OAAO,CACL,KAAK,CAAC,QAAQ,KAAK,QAAQ;QAC3B,CAAC,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAC1E,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,MAA2C,EAC3C,QAAgB,EACqB,EAAE;IACvC,IAAI,IAAyC,CAAC;IAE9C,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnC,IACE,gBAAgB,CAAC,KAAK,EAAE,QAAQ,CAAC;YACjC,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EACpE,CAAC;YACD,IAAI,GAAG,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAC1C,KAAyD,EACzD,QAAgB,EAChB,EAAE;IACF,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC1B,OAAO,QAAQ,KAAK,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IACtD,CAAC;IAED,IAAI,QAAQ,KAAK,KAAK,CAAC,QAAQ,EAAE,CAAC;QAChC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC;QAC/C,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACnD,CAAC,CAAC;AAEF,MAAM,yBAAyB,GAAG,CAChC,KAA0B,EAC1B,WAA8B,EAC9B,EAAE;IACF,MAAM,aAAa,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;IACxD,MAAM,YAAY,GAAG,2BAA2B,CAAC,KAAK,CAAC,CAAC;IACxD,IAAI,iBAAyB,CAAC;IAE9B,IAAI,CAAC;QACH,iBAAiB,GAAG,qCAAqC,CACvD,YAAY,EACZ,WAAW,CACZ,CAAC;IACJ,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,MAAM,IAAI,YAAY,CACpB,KAAK,YAAY,KAAK;YACpB,CAAC,CAAC,KAAK,CAAC,OAAO;YACf,CAAC,CAAC,kCAAkC,YAAY,EAAE,CACrD,CAAC;IACJ,CAAC;IAED,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,EAAE,iBAAiB,CAAC,CAAC;IAEhE,IAAI,YAAY,KAAK,EAAE,EAAE,CAAC;QACxB,MAAM,IAAI,YAAY,CACpB,4DAA4D,EAC5D;YACE,IAAI,EAAE,uBAAuB;YAC7B,OAAO,EAAE;gBACP,oBAAoB,YAAY,EAAE;gBAClC,mBAAmB,aAAa,EAAE;aACnC;YACD,IAAI,EAAE,mDAAmD;SAC1D,CACF,CAAC;IACJ,CAAC;IAED,IACE,UAAU,CAAC,YAAY,CAAC;QACxB,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC;QAC7B,YAAY,KAAK,IAAI,EACrB,CAAC;QACD,MAAM,IAAI,YAAY,CAAC,8CAA8C,EAAE;YACrE,IAAI,EAAE,oBAAoB;YAC1B,OAAO,EAAE;gBACP,oBAAoB,YAAY,EAAE;gBAClC,mBAAmB,aAAa,EAAE;aACnC;YACD,IAAI,EAAE,yCAAyC;SAChD,CAAC,CAAC;IACL,CAAC;IAED,OAAO,iBAAiB,CAAC;AAC3B,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,2BAA2B,GAAG,CACzC,SAA8B,EAC9B,WAA8B,EAC9B,EAAE;IACF,MAAM,aAAa,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;IACxD,MAAM,WAAW,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAC;IACnD,MAAM,mBAAmB,GAAG,iCAAiC,CAC3D,WAAW,EACX,WAAW,CACZ,CAAC;IACF,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,EAAE,mBAAmB,CAAC,CAAC;IAElE,OAAO,qBAAqB,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;AACnE,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAC3B,OAA2C,EAC3C,QAAkC,EAClC,WAAmB,EACnB,EAAE;IACF,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACvD,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;QAEpC,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;YAC/B,SAAS;QACX,CAAC;QAED,KACE,IAAI,UAAU,GAAG,KAAK,GAAG,CAAC,EAC1B,UAAU,GAAG,OAAO,CAAC,MAAM,EAC3B,UAAU,IAAI,CAAC,EACf,CAAC;YACD,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;YAEvC,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;gBAC7B,SAAS;YACX,CAAC;YAED,MAAM,YAAY,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;YAC5C,MAAM,UAAU,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;YAExC,IAAI,YAAY,KAAK,UAAU,EAAE,CAAC;gBAChC,MAAM,IAAI,YAAY,CACpB,aAAa,WAAW,CAAC,WAAW,EAAE,0BAA0B,EAChE;oBACE,IAAI,EAAE,iBAAiB;oBACvB,OAAO,EAAE;wBACP,GAAG,YAAY,CAAC,IAAI,KAAK,YAAY,EAAE;wBACvC,GAAG,UAAU,CAAC,IAAI,KAAK,UAAU,EAAE;qBACpC;oBACD,IAAI,EAAE,gDAAgD;iBACvD,CACF,CAAC;YACJ,CAAC;YAED,MAAM,aAAa,GACjB,YAAY,CAAC,UAAU,CAAC,GAAG,UAAU,GAAG,CAAC;gBACzC,YAAY,CAAC,UAAU,CAAC,GAAG,UAAU,GAAG,GAAG,EAAE,CAAC;gBAC9C,UAAU,CAAC,UAAU,CAAC,GAAG,YAAY,GAAG,CAAC;gBACzC,UAAU,CAAC,UAAU,CAAC,GAAG,YAAY,GAAG,GAAG,EAAE,CAAC,CAAC;YAEjD,IAAI,aAAa,EAAE,CAAC;gBAClB,SAAS;YACX,CAAC;YAED,MAAM,QAAQ,GACZ,QAAQ,KAAK,UAAU;gBACrB,CAAC,CAAC,KAAK;gBACP,CAAC,CAAC,cAAc,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;YAE/C,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,IAAI,YAAY,CACpB,GAAG,WAAW,2CAA2C,EACzD;oBACE,IAAI,EAAE,mBAAmB;oBACzB,OAAO,EAAE;wBACP,GAAG,YAAY,CAAC,IAAI,KAAK,YAAY,EAAE;wBACvC,GAAG,UAAU,CAAC,IAAI,KAAK,UAAU,EAAE;qBACpC;oBACD,IAAI,EAAE,sEAAsE;iBAC7E,CACF,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iCAAiC,GAAG,CAC/C,OAA2C,EAC3C,EAAE;IACF,oBAAoB,CAAC,OAAO,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;IACxD,oBAAoB,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;AACtD,CAAC,CAAC;AAEF,MAAM,uBAAuB,GAAG,CAC9B,KAA4C,EACzB,EAAE;IACrB,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChE,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QACrC,wBAAwB,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;IAED,OAAO,KAAK,CAAC,QAAQ,CAAC;AACxB,CAAC,CAAC;AAEF,MAAM,sBAAsB,GAAG,CAC7B,OAAqD,EACrD,aAAqB,EACgB,EAAE;IACvC,IAAI,IAAyC,CAAC;IAE9C,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;QACrC,IACE,KAAK,CAAC,IAAI,KAAK,WAAW;YAC1B,aAAa,KAAK,KAAK,CAAC,QAAQ;YAChC,aAAa,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC,QAAQ,GAAG,CAAC;YAC9C,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EACpE,CAAC;YACD,IAAI,GAAG,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAC5B,OAAkC,EACP,EAAE;IAC7B,MAAM,MAAM,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAC9B,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,CAChD,CAAC;IAEF,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAmC,CAAC;IAE5D,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,sBAAsB,CAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;QAEhE,MAAM,aAAa,GACjB,CAAC,KAAK,CAAC,YAAY,IAAI,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;QAEzE,MAAM,iBAAiB,GACrB,CAAC,KAAK,CAAC,gBAAgB,IAAI,MAAM,KAAK,SAAS;YAC7C,CAAC,CAAC,MAAM,CAAC,QAAQ;YACjB,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC;QAErB,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE;YAC3B,GAAG,KAAK;YACR,QAAQ,EAAE,iBAAiB;YAC3B,IAAI,EAAE,aAAa;SACpB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACvB,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAEvC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC9D,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,KAAc,EACd,cAAiC,OAAO,CAAC,GAAG,EACxB,EAAE;IACtB,MAAM,MAAM,GAAG,gBAAgB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAEjD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,YAAY,CAAC,gCAAgC,EAAE;YACvD,IAAI,EAAE,0BAA0B;YAChC,OAAO,EAAE,iBAAiB,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;YAC3D,IAAI,EAAE,sEAAsE;SAC7E,CAAC,CAAC;IACL,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACnD,MAAM,iBAAiB,GAAG,yBAAyB,CACjD,KAAK,CAAC,SAAS,EACf,WAAW,CACZ,CAAC;QACF,MAAM,QAAQ,GAAG,2BAA2B,CAAC,KAAK,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QAC3E,MAAM,QAAQ,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;QAChD,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,QAAQ,CAAC;QAEpC,OAAO;YACL,mBAAmB,EAAE,KAAK,CAAC,SAAS;YACpC,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,SAAS,EAAE,iBAAiB;YAC5B,QAAQ;YACR,gBAAgB,EAAE,KAAK,CAAC,QAAQ,KAAK,SAAS;YAC9C,IAAI;YACJ,YAAY,EAAE,KAAK,CAAC,IAAI,KAAK,SAAS;YACtC,IAAI,EAAE,QAAQ;YACd,QAAQ;SACyB,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,iCAAiC,CAAC,UAAU,CAAC,CAAC;IAE9C,MAAM,OAAO,GAAG,qBAAqB,CAAC,UAAU,CAAC,CAAC;IAElD,MAAM,GAAG,GACP,MAAM,CAAC,IAAI,CAAC,OAAO,KAAK,CAAC;QACvB,CAAC,CAAC;YACE,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY;YAC1C,UAAU,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;SACrD;QACH,CAAC,CAAC,SAAS,CAAC;IAEhB,OAAO;QACL,GAAG,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC;QACrC,OAAO;QACP,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO;KAC7B,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,GAGvC,EAAc,EAAE;IACf,OAAO;QACL,OAAO,EAAE,CAAC;QACV,GAAG;QACH,OAAO,EAAE,EAAE;KACZ,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,MAAkB,EAAE,EAAE;IACrD,OAAO,qBAAqB,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAChE,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,cAAiC,OAAO,CAAC,GAAG,EAC5C,EAAE;IACF,OAAO,KAAK,CAAC,IAAI,CACf,2BAA2B,CAAC,WAAW,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,EAC9D,kBAAkB,CACnB,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAG,CACvC,gBAAwB,2BAA2B,EAAE,EACrD,EAAE;IACF,OAAO,IAAI,CAAC,aAAa,EAAE,kBAAkB,CAAC,CAAC;AACjD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iCAAiC,GAAG,CAAC,aAAqB,EAAE,EAAE;IACzE,OAAO,aAAa,CAAC;AACvB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EACjC,gBAAwB,2BAA2B,EAAE,EACrD,cAAiC,OAAO,CAAC,GAAG,EAC5C,EAAE;IACF,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAC7B,yBAAyB,CAAC,aAAa,CAAC,EACxC,MAAM,CACP,CAAC;QAEF,OAAO,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAY,EAAE,WAAW,CAAC,CAAC;IACvE,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,IAAI,KAAK,YAAY,YAAY,EAAE,CAAC;YAClC,MAAM,KAAK,CAAC;QACd,CAAC;QAED,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;YACjC,MAAM,IAAI,YAAY,CAAC,uCAAuC,EAAE;gBAC9D,IAAI,EAAE,qBAAqB;gBAC3B,OAAO,EAAE;oBACP,gBAAgB,yBAAyB,CAAC,aAAa,CAAC,EAAE;oBAC1D,KAAK,CAAC,OAAO;iBACd;gBACD,IAAI,EAAE,mEAAmE;aAC1E,CAAC,CAAC;QACL,CAAC;QAED,MAAM,IAAI,YAAY,CAAC,oCAAoC,EAAE;YAC3D,IAAI,EAAE,oBAAoB;YAC1B,OAAO,EAAE;gBACP,gBAAgB,yBAAyB,CAAC,aAAa,CAAC,EAAE;gBAC1D,GAAG,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;aACnD;YACD,IAAI,EAAE,yEAAyE;SAChF,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,sBAAsB,GAAG,CAC7B,KAAgD,EAChD,aAAiC,EACb,EAAE;IACtB,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChC,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IAED,MAAM,SAAS,GACb,aAAa,KAAK,SAAS,IAAI,aAAa,KAAK,kBAAkB;QACjE,CAAC,CAAC,aAAa;QACf,CAAC,CAAC,kBAAkB,CAAC;IAEzB,OAAO,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;AACpE,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,MAA0B,EAC1B,QAAgB,EAChB,aAAsB,EAC2B,EAAE;IACnD,MAAM,KAAK,GAAG,mBAAmB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAEpD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,OAAO,GAAG,sBAAsB,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;IAE7D,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC;AACvC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,MAA0B,EAC1B,QAAgB,EAChB,aAAsB,EACA,EAAE;IACxB,OAAO,eAAe,CAAC,MAAM,EAAE,QAAQ,EAAE,aAAa,CAAC,EAAE,IAAI,CAAC;AAChE,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,MAA0B,EAC1B,QAAgB,EAChB,EAAE;IACF,OAAO,eAAe,CAAC,MAAM,EAAE,QAAQ,CAAC,KAAK,QAAQ,CAAC;AACxD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,MAA0B,EAC1B,QAAgB,EAChB,EAAE;IACF,OAAO,eAAe,CAAC,MAAM,EAAE,QAAQ,CAAC,KAAK,QAAQ,CAAC;AACxD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,MAA0B,EAC1B,QAAgB,EAChB,aAAsB,EACtB,OAAgB,EAChB,EAAE;IACF,MAAM,IAAI,GAAG,eAAe,CAAC,MAAM,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;IAE9D,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,MAAM,IAAI,YAAY,CACpB,mEAAmE,EACnE;YACE,IAAI,EAAE,qBAAqB;YAC3B,OAAO,EAAE;gBACP,oBAAoB,QAAQ,EAAE;gBAC9B,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,OAAO,EAAE,CAAC,CAAC;aAC1D;YACD,IAAI,EAAE,qFAAqF;SAC5F,CACF,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,OAA2C,EACjC,EAAE;IACZ,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IAEnC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACrC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;AACxE,CAAC,CAAC"}
@@ -0,0 +1,14 @@
1
+ export declare const resolveHomeDirectory: (environment?: NodeJS.ProcessEnv) => string;
2
+ export declare const resolveXdgConfigHome: (environment?: NodeJS.ProcessEnv) => string;
3
+ export declare const resolveDevsyncConfigDirectory: (environment?: NodeJS.ProcessEnv) => string;
4
+ export declare const resolveDevsyncGlobalConfigFilePath: (environment?: NodeJS.ProcessEnv) => string;
5
+ export declare const resolveDevsyncSyncDirectory: (environment?: NodeJS.ProcessEnv) => string;
6
+ export declare const resolveDevsyncAgeDirectory: (environment?: NodeJS.ProcessEnv) => string;
7
+ export declare const expandHomePath: (value: string, environment?: NodeJS.ProcessEnv) => string;
8
+ export declare const expandConfiguredPath: (value: string, environment?: NodeJS.ProcessEnv) => string;
9
+ export declare const resolveConfiguredAbsolutePath: (value: string, environment?: NodeJS.ProcessEnv) => string;
10
+ export declare const expandWindowsEnvVars: (value: string, environment?: NodeJS.ProcessEnv) => string;
11
+ export declare const expandPlatformConfiguredPath: (value: string, environment?: NodeJS.ProcessEnv) => string;
12
+ export declare const resolvePlatformConfiguredAbsolutePath: (value: string, environment?: NodeJS.ProcessEnv) => string;
13
+ export declare const resolveHomeConfiguredAbsolutePath: (value: string, environment?: NodeJS.ProcessEnv) => string;
14
+ //# sourceMappingURL=xdg.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xdg.d.ts","sourceRoot":"","sources":["../../src/config/xdg.ts"],"names":[],"mappings":"AAqBA,eAAO,MAAM,oBAAoB,GAC/B,cAAa,MAAM,CAAC,UAAwB,WAS7C,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC/B,cAAa,MAAM,CAAC,UAAwB,WAY7C,CAAC;AAEF,eAAO,MAAM,6BAA6B,GACxC,cAAa,MAAM,CAAC,UAAwB,WAG7C,CAAC;AAEF,eAAO,MAAM,kCAAkC,GAC7C,cAAa,MAAM,CAAC,UAAwB,WAG7C,CAAC;AAEF,eAAO,MAAM,2BAA2B,GACtC,cAAa,MAAM,CAAC,UAAwB,WAG7C,CAAC;AAEF,eAAO,MAAM,0BAA0B,GACrC,cAAa,MAAM,CAAC,UAAwB,WAG7C,CAAC;AAEF,eAAO,MAAM,cAAc,GACzB,OAAO,MAAM,EACb,cAAa,MAAM,CAAC,UAAwB,WAc7C,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC/B,OAAO,MAAM,EACb,cAAa,MAAM,CAAC,UAAwB,WAqB7C,CAAC;AAEF,eAAO,MAAM,6BAA6B,GACxC,OAAO,MAAM,EACb,cAAa,MAAM,CAAC,UAAwB,WAW7C,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC/B,OAAO,MAAM,EACb,cAAa,MAAM,CAAC,UAAwB,KAC3C,MAUF,CAAC;AAEF,eAAO,MAAM,4BAA4B,GACvC,OAAO,MAAM,EACb,cAAa,MAAM,CAAC,UAAwB,KAC3C,MAQF,CAAC;AAEF,eAAO,MAAM,qCAAqC,GAChD,OAAO,MAAM,EACb,cAAa,MAAM,CAAC,UAAwB,WAW7C,CAAC;AAEF,eAAO,MAAM,iCAAiC,GAC5C,OAAO,MAAM,EACb,cAAa,MAAM,CAAC,UAAwB,WAW7C,CAAC"}