@codetreker/daynight 0.2.4 → 0.6.1

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 (189) hide show
  1. package/dist/api/client.d.ts +43 -0
  2. package/dist/api/client.js +285 -0
  3. package/dist/api/client.js.map +1 -0
  4. package/dist/api/index.d.ts +7 -0
  5. package/dist/api/index.js +5 -0
  6. package/dist/api/index.js.map +1 -0
  7. package/dist/api/json.d.ts +3 -0
  8. package/dist/api/json.js +25 -0
  9. package/dist/api/json.js.map +1 -0
  10. package/dist/api/operation.d.ts +23 -0
  11. package/dist/api/operation.js +78 -0
  12. package/dist/api/operation.js.map +1 -0
  13. package/dist/api/parse.d.ts +12 -0
  14. package/dist/api/parse.js +160 -0
  15. package/dist/api/parse.js.map +1 -0
  16. package/dist/api/types.d.ts +75 -0
  17. package/dist/api/types.js +2 -0
  18. package/dist/api/types.js.map +1 -0
  19. package/dist/cli/application.d.ts +3 -0
  20. package/dist/cli/application.js +31 -0
  21. package/dist/cli/application.js.map +1 -0
  22. package/dist/cli/commands.d.ts +7 -0
  23. package/dist/cli/commands.js +38 -0
  24. package/dist/cli/commands.js.map +1 -0
  25. package/dist/cli/context.d.ts +17 -0
  26. package/dist/cli/context.js +19 -0
  27. package/dist/cli/context.js.map +1 -0
  28. package/dist/cli/schema.d.ts +52 -0
  29. package/dist/cli/schema.js +108 -0
  30. package/dist/cli/schema.js.map +1 -0
  31. package/dist/commands/completion/bash.d.ts +2 -0
  32. package/dist/commands/completion/bash.js +272 -0
  33. package/dist/commands/completion/bash.js.map +1 -0
  34. package/dist/commands/completion/command.d.ts +2 -0
  35. package/dist/commands/completion/command.js +20 -0
  36. package/dist/commands/completion/command.js.map +1 -0
  37. package/dist/commands/completion/definition.d.ts +2 -0
  38. package/dist/commands/completion/definition.js +8 -0
  39. package/dist/commands/completion/definition.js.map +1 -0
  40. package/dist/commands/completion/zsh.d.ts +2 -0
  41. package/dist/commands/completion/zsh.js +136 -0
  42. package/dist/commands/completion/zsh.js.map +1 -0
  43. package/dist/commands/project/command.d.ts +6 -0
  44. package/dist/commands/project/command.js +39 -0
  45. package/dist/commands/project/command.js.map +1 -0
  46. package/dist/commands/project/definition.d.ts +2 -0
  47. package/dist/commands/project/definition.js +34 -0
  48. package/dist/commands/project/definition.js.map +1 -0
  49. package/dist/commands/project/rendering.d.ts +4 -0
  50. package/dist/commands/project/rendering.js +17 -0
  51. package/dist/commands/project/rendering.js.map +1 -0
  52. package/dist/{copilot.d.ts → commands/review/adapters/copilot.d.ts} +20 -12
  53. package/dist/commands/review/adapters/copilot.js +360 -0
  54. package/dist/commands/review/adapters/copilot.js.map +1 -0
  55. package/dist/{github.d.ts → commands/review/adapters/github.d.ts} +2 -19
  56. package/dist/{github.js → commands/review/adapters/github.js} +0 -43
  57. package/dist/commands/review/adapters/github.js.map +1 -0
  58. package/dist/{git.d.ts → commands/review/adapters/worktrees.d.ts} +3 -2
  59. package/dist/{git.js → commands/review/adapters/worktrees.js} +3 -3
  60. package/dist/commands/review/adapters/worktrees.js.map +1 -0
  61. package/dist/commands/review/command.d.ts +11 -0
  62. package/dist/commands/review/command.js +42 -0
  63. package/dist/commands/review/command.js.map +1 -0
  64. package/dist/{config.d.ts → commands/review/config.d.ts} +8 -8
  65. package/dist/{config.js → commands/review/config.js} +25 -44
  66. package/dist/commands/review/config.js.map +1 -0
  67. package/dist/{coordinator.d.ts → commands/review/coordinator.d.ts} +8 -7
  68. package/dist/{coordinator.js → commands/review/coordinator.js} +8 -3
  69. package/dist/commands/review/coordinator.js.map +1 -0
  70. package/dist/commands/review/definition.d.ts +2 -0
  71. package/dist/commands/review/definition.js +33 -0
  72. package/dist/commands/review/definition.js.map +1 -0
  73. package/dist/commands/review/instance-lock.js.map +1 -0
  74. package/dist/commands/review/listing.d.ts +5 -0
  75. package/dist/{review-list.js → commands/review/listing.js} +3 -9
  76. package/dist/commands/review/listing.js.map +1 -0
  77. package/dist/commands/review/model.d.ts +79 -0
  78. package/dist/commands/review/model.js +2 -0
  79. package/dist/commands/review/model.js.map +1 -0
  80. package/dist/commands/review/paths.d.ts +11 -0
  81. package/dist/commands/review/paths.js +16 -0
  82. package/dist/commands/review/paths.js.map +1 -0
  83. package/dist/commands/review/polling.d.ts +21 -0
  84. package/dist/commands/review/polling.js +44 -0
  85. package/dist/commands/review/polling.js.map +1 -0
  86. package/dist/{processes.d.ts → commands/review/processes.d.ts} +3 -3
  87. package/dist/commands/review/processes.js.map +1 -0
  88. package/dist/{repositories.d.ts → commands/review/repositories.d.ts} +2 -2
  89. package/dist/commands/review/repositories.js +70 -0
  90. package/dist/commands/review/repositories.js.map +1 -0
  91. package/dist/{runtime.d.ts → commands/review/runtime.d.ts} +9 -6
  92. package/dist/{runtime.js → commands/review/runtime.js} +11 -8
  93. package/dist/commands/review/runtime.js.map +1 -0
  94. package/dist/commands/review/skill.d.ts +11 -0
  95. package/dist/commands/review/skill.js +242 -0
  96. package/dist/commands/review/skill.js.map +1 -0
  97. package/dist/commands/review/skills/daynight-review/SKILL.md +63 -0
  98. package/dist/{store.d.ts → commands/review/store.d.ts} +5 -79
  99. package/dist/{store.js → commands/review/store.js} +8 -0
  100. package/dist/commands/review/store.js.map +1 -0
  101. package/dist/commands/server/runtime.d.ts +16 -0
  102. package/dist/commands/server/runtime.js +52 -0
  103. package/dist/commands/server/runtime.js.map +1 -0
  104. package/dist/commands/task/command.d.ts +8 -0
  105. package/dist/commands/task/command.js +106 -0
  106. package/dist/commands/task/command.js.map +1 -0
  107. package/dist/commands/task/definition.d.ts +2 -0
  108. package/dist/commands/task/definition.js +50 -0
  109. package/dist/commands/task/definition.js.map +1 -0
  110. package/dist/commands/task/rendering.d.ts +5 -0
  111. package/dist/commands/task/rendering.js +49 -0
  112. package/dist/commands/task/rendering.js.map +1 -0
  113. package/dist/commands/update/command.d.ts +6 -0
  114. package/dist/commands/update/command.js +23 -0
  115. package/dist/commands/update/command.js.map +1 -0
  116. package/dist/commands/update/definition.d.ts +2 -0
  117. package/dist/commands/update/definition.js +7 -0
  118. package/dist/commands/update/definition.js.map +1 -0
  119. package/dist/{update.d.ts → commands/update/updater.d.ts} +2 -2
  120. package/dist/{update.js → commands/update/updater.js} +3 -3
  121. package/dist/commands/update/updater.js.map +1 -0
  122. package/dist/config/document.d.ts +9 -0
  123. package/dist/config/document.js +45 -0
  124. package/dist/config/document.js.map +1 -0
  125. package/dist/config/files.d.ts +7 -0
  126. package/dist/config/files.js +69 -0
  127. package/dist/config/files.js.map +1 -0
  128. package/dist/config/paths.d.ts +6 -0
  129. package/dist/config/paths.js +9 -0
  130. package/dist/config/paths.js.map +1 -0
  131. package/dist/config/server.d.ts +7 -0
  132. package/dist/config/server.js +34 -0
  133. package/dist/config/server.js.map +1 -0
  134. package/dist/main.js +6 -2
  135. package/dist/main.js.map +1 -1
  136. package/dist/platform/diagnostics.js.map +1 -0
  137. package/dist/platform/files.d.ts +1 -0
  138. package/dist/platform/files.js +48 -0
  139. package/dist/platform/files.js.map +1 -0
  140. package/dist/{paths.d.ts → platform/filesystem.d.ts} +0 -11
  141. package/dist/{paths.js → platform/filesystem.js} +1 -17
  142. package/dist/platform/filesystem.js.map +1 -0
  143. package/dist/platform/terminal.d.ts +1 -0
  144. package/dist/platform/terminal.js +10 -0
  145. package/dist/platform/terminal.js.map +1 -0
  146. package/dist/platform/text.d.ts +2 -0
  147. package/dist/platform/text.js +3 -0
  148. package/dist/platform/text.js.map +1 -0
  149. package/dist/repository/binding.d.ts +21 -0
  150. package/dist/repository/binding.js +242 -0
  151. package/dist/repository/binding.js.map +1 -0
  152. package/dist/repository/context.d.ts +10 -0
  153. package/dist/repository/context.js +32 -0
  154. package/dist/repository/context.js.map +1 -0
  155. package/dist/repository/git.d.ts +20 -0
  156. package/dist/repository/git.js +213 -0
  157. package/dist/repository/git.js.map +1 -0
  158. package/dist/repository/identity.d.ts +5 -0
  159. package/dist/repository/identity.js +154 -0
  160. package/dist/repository/identity.js.map +1 -0
  161. package/dist/repository/index.d.ts +4 -0
  162. package/dist/repository/index.js +3 -0
  163. package/dist/repository/index.js.map +1 -0
  164. package/package.json +6 -5
  165. package/dist/cli.d.ts +0 -19
  166. package/dist/cli.js +0 -202
  167. package/dist/cli.js.map +0 -1
  168. package/dist/config.js.map +0 -1
  169. package/dist/coordinator.js.map +0 -1
  170. package/dist/copilot.js +0 -263
  171. package/dist/copilot.js.map +0 -1
  172. package/dist/diagnostics.js.map +0 -1
  173. package/dist/git.js.map +0 -1
  174. package/dist/github.js.map +0 -1
  175. package/dist/instance-lock.js.map +0 -1
  176. package/dist/paths.js.map +0 -1
  177. package/dist/processes.js.map +0 -1
  178. package/dist/repositories.js +0 -159
  179. package/dist/repositories.js.map +0 -1
  180. package/dist/review-list.d.ts +0 -5
  181. package/dist/review-list.js.map +0 -1
  182. package/dist/runtime.js.map +0 -1
  183. package/dist/store.js.map +0 -1
  184. package/dist/update.js.map +0 -1
  185. /package/dist/{instance-lock.d.ts → commands/review/instance-lock.d.ts} +0 -0
  186. /package/dist/{instance-lock.js → commands/review/instance-lock.js} +0 -0
  187. /package/dist/{processes.js → commands/review/processes.js} +0 -0
  188. /package/dist/{diagnostics.d.ts → platform/diagnostics.d.ts} +0 -0
  189. /package/dist/{diagnostics.js → platform/diagnostics.js} +0 -0
@@ -0,0 +1,106 @@
1
+ import { UsageError } from "../../cli/context.js";
2
+ import { parseCommand, renderCommandHelp } from "../../cli/schema.js";
3
+ import { isNonemptyText, isText } from "../../platform/text.js";
4
+ import { taskDefinition } from "./definition.js";
5
+ const defaultDependencies = {
6
+ runServerCommand: async (...args) => (await import("../server/runtime.js")).runServerCommand(...args),
7
+ resolveProject: async (...args) => (await import("../../repository/index.js")).resolveProject(...args),
8
+ };
9
+ export const runTaskCommand = async (args, context, dependencies = defaultDependencies) => {
10
+ const command = parseCommand(taskDefinition, args, ["daynight", "task"], "daynight task --help");
11
+ if (command.kind !== "run") {
12
+ context.stdout(renderCommandHelp(command.command, command.path));
13
+ return;
14
+ }
15
+ const help = `daynight task ${command.command.name} --help`;
16
+ const title = command.options.get("--title");
17
+ const description = command.options.get("--description");
18
+ const status = command.options.get("--status");
19
+ const dependsOn = command.options.get("--depends-on");
20
+ const clearDependencies = command.options.has("--clear-dependencies");
21
+ if (title !== undefined && !isNonemptyText(title))
22
+ throw new UsageError("Task title must be nonempty UTF-8 text without NUL characters.", help);
23
+ if (description !== undefined && !isText(description))
24
+ throw new UsageError("Task description must be UTF-8 text without NUL characters.", help);
25
+ if (status !== undefined && !["todo", "in_progress", "done"].includes(status))
26
+ throw new UsageError("Task status must be todo, in_progress, or done.", help);
27
+ if (dependsOn !== undefined && clearDependencies)
28
+ throw new UsageError("Specify --depends-on or --clear-dependencies, not both.", help);
29
+ const changes = {
30
+ ...(title === undefined ? {} : { title }),
31
+ ...(description === undefined ? {} : { description }),
32
+ ...(status === undefined ? {} : { status }),
33
+ ...(dependsOn === undefined ? {} : { dependsOn }),
34
+ ...(clearDependencies ? { dependsOn: [] } : {}),
35
+ };
36
+ if (command.command.name === "update" && Object.keys(changes).length === 0)
37
+ throw new UsageError("Task update requires a title, description, status, or dependency change.", help);
38
+ const rawProjectId = command.options.get("--project");
39
+ let projectId;
40
+ let taskId;
41
+ if (rawProjectId !== undefined || command.command.name === "show" || command.command.name === "update") {
42
+ const { canonicalId } = await import("../../api/parse.js");
43
+ if (rawProjectId !== undefined) {
44
+ projectId = canonicalId(rawProjectId) ?? undefined;
45
+ if (projectId === undefined)
46
+ throw new UsageError("project-id must be a hyphenated UUID.", help);
47
+ }
48
+ if (command.command.name === "show" || command.command.name === "update") {
49
+ taskId = canonicalId(command.values[0]) ?? undefined;
50
+ if (taskId === undefined)
51
+ throw new UsageError("task-id must be a hyphenated UUID.", help);
52
+ }
53
+ }
54
+ const versionArgument = command.options.get("--if-version");
55
+ let expectedVersion;
56
+ if (versionArgument !== undefined) {
57
+ const { parseVersionArgument } = await import("../../api/json.js");
58
+ try {
59
+ expectedVersion = parseVersionArgument(versionArgument);
60
+ }
61
+ catch (cause) {
62
+ throw new UsageError(cause instanceof Error ? cause.message : String(cause), help);
63
+ }
64
+ }
65
+ await dependencies.runServerCommand(context, async ({ api, operation, serverUrl }) => {
66
+ operation.check();
67
+ let project;
68
+ if (projectId !== undefined) {
69
+ project = await api.getProject(projectId);
70
+ }
71
+ else {
72
+ project = await dependencies.resolveProject({ serverUrl, operation, api, workingDirectory: context.workingDirectory() });
73
+ }
74
+ operation.check();
75
+ const { renderTask, renderTaskGraph, renderTaskJson, renderTaskList } = await import("./rendering.js");
76
+ operation.check();
77
+ if (command.command.name === "create") {
78
+ const input = { title: title, ...(description === undefined ? {} : { description }), ...(dependsOn === undefined ? {} : { dependsOn }) };
79
+ const task = await api.createTask(project.id, input);
80
+ operation.check();
81
+ return `Task created.\n${renderTask(task)}`;
82
+ }
83
+ if (command.command.name === "list") {
84
+ const filters = { ...(status === undefined ? {} : { status }), ...(command.options.has("--ready") ? { ready: true } : {}) };
85
+ const tasks = await api.listTasks(project.id, filters);
86
+ operation.check();
87
+ return command.options.has("--json") ? renderTaskJson(tasks) : renderTaskList(tasks);
88
+ }
89
+ if (command.command.name === "graph") {
90
+ const graph = await api.getTaskGraph(project.id);
91
+ operation.check();
92
+ return command.options.has("--json") ? renderTaskJson(graph) : renderTaskGraph(graph);
93
+ }
94
+ if (command.command.name === "show") {
95
+ const task = await api.getTask(project.id, taskId);
96
+ operation.check();
97
+ return command.options.has("--json") ? renderTaskJson(task) : renderTask(task);
98
+ }
99
+ const version = expectedVersion === undefined ? (await api.getTask(project.id, taskId)).version : expectedVersion;
100
+ operation.check();
101
+ const task = await api.updateTask(project.id, taskId, { ...changes, version });
102
+ operation.check();
103
+ return `Task updated.\n${renderTask(task)}`;
104
+ });
105
+ };
106
+ //# sourceMappingURL=command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command.js","sourceRoot":"","sources":["../../../src/commands/task/command.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { CommandDefinition } from "../../cli/schema.js";
2
+ export declare const taskDefinition: CommandDefinition;
@@ -0,0 +1,50 @@
1
+ const helpOption = { names: ["-h", "--help"], description: "Show this help", action: "help" };
2
+ const projectOption = { names: ["--project"], description: "Use this project UUID for this invocation", value: { name: "project-id", kind: "text" } };
3
+ const jsonOption = { names: ["--json"], description: "Print the complete API resource data as JSON" };
4
+ const titleOption = { names: ["--title"], description: "Task title", value: { name: "title", kind: "text" } };
5
+ const descriptionOption = { names: ["--description"], description: "Task description; an empty value clears it", value: { name: "description", kind: "text", allowEmpty: true } };
6
+ const dependencyOption = { names: ["--depends-on"], description: "Direct dependency task UUID; repeat to supply the full set", value: { name: "task-id", kind: "text" }, repeatable: true };
7
+ const statusOption = { names: ["--status"], description: "Task status", value: { name: "status", kind: "text", choices: ["todo", "in_progress", "done"] } };
8
+ const taskArgument = { name: "task-id", description: "Task UUID" };
9
+ export const taskDefinition = {
10
+ name: "task",
11
+ description: "Create, query, and update project tasks on the configured server",
12
+ commands: [
13
+ {
14
+ name: "create",
15
+ description: "Create a todo task with optional dependencies",
16
+ options: [{ ...titleOption, required: true }, descriptionOption, dependencyOption, projectOption, helpOption],
17
+ details: "New tasks start in todo. Repeated --depends-on values preserve the supplied dependency set.",
18
+ },
19
+ {
20
+ name: "list",
21
+ description: "List all matching tasks in the project",
22
+ options: [statusOption, { names: ["--ready"], description: "Include only tasks ready to start" }, projectOption, jsonOption, helpOption],
23
+ details: "Combine --status and --ready with AND. Read every page before printing the complete result.",
24
+ },
25
+ {
26
+ name: "show",
27
+ description: "Show a task by its ID",
28
+ arguments: [taskArgument],
29
+ options: [projectOption, jsonOption, helpOption],
30
+ },
31
+ {
32
+ name: "update",
33
+ description: "Atomically update task fields and dependencies",
34
+ arguments: [taskArgument],
35
+ options: [titleOption, descriptionOption, statusOption, dependencyOption,
36
+ { names: ["--clear-dependencies"], description: "Clear the complete dependency set" },
37
+ { names: ["--if-version"], description: "Use this expected task version without reading a newer version", value: { name: "version", kind: "text" } },
38
+ projectOption, helpOption],
39
+ details: "Provide at least one changed field. --depends-on replaces all dependencies; it conflicts with --clear-dependencies.\nWithout --if-version, read the current version before submitting the update. Conflicts are not retried.",
40
+ },
41
+ {
42
+ name: "graph",
43
+ description: "Show the complete task graph and summary",
44
+ options: [projectOption, jsonOption, helpOption],
45
+ },
46
+ ],
47
+ options: [helpOption],
48
+ details: "Without --project, resolve the current Git origin to its project using the repository binding.\nText options also accept --option=value; use this form for values starting with a dash.\nServer: serverUrl in ~/.daynight/config.yml\nRun daynight task <command> --help for command usage.",
49
+ };
50
+ //# sourceMappingURL=definition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definition.js","sourceRoot":"","sources":["../../../src/commands/task/definition.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { Task, TaskGraph } from "../../api/types.js";
2
+ export declare const renderTask: (task: Task) => string;
3
+ export declare const renderTaskList: (tasks: readonly Task[]) => string;
4
+ export declare const renderTaskGraph: (graph: TaskGraph) => string;
5
+ export declare const renderTaskJson: (value: Task | readonly Task[] | TaskGraph) => string;
@@ -0,0 +1,49 @@
1
+ import { stringifyApiJson } from "../../api/json.js";
2
+ import { terminalText } from "../../platform/terminal.js";
3
+ const identifiers = (values) => values.length === 0 ? "none" : values.map(terminalText).join(", ");
4
+ export const renderTask = (task) => [
5
+ `ID: ${terminalText(task.id)}`,
6
+ `Project: ${terminalText(task.projectId)}`,
7
+ `Title: ${terminalText(task.title)}`,
8
+ `Description: ${terminalText(task.description)}`,
9
+ `Status: ${terminalText(task.status)}`,
10
+ `Version: ${task.version}`,
11
+ `Ready: ${task.ready}`,
12
+ `Depends on: ${identifiers(task.dependsOn)}`,
13
+ `Blocked by: ${identifiers(task.blockedBy)}`,
14
+ `Created: ${terminalText(task.createdAt)}`,
15
+ `Updated: ${terminalText(task.updatedAt)}`,
16
+ "",
17
+ ].join("\n");
18
+ export const renderTaskList = (tasks) => tasks.length === 0 ? "No tasks.\n" : tasks.map(renderTask).join("\n");
19
+ const renderGraphTask = (task) => [
20
+ `ID: ${terminalText(task.id)}`,
21
+ `Title preview: ${terminalText(task.titlePreview)}`,
22
+ `Title truncated: ${task.titleTruncated}`,
23
+ `Status: ${terminalText(task.status)}`,
24
+ `Ready: ${task.ready}`,
25
+ `Depends on: ${identifiers(task.dependsOn)}`,
26
+ `Blocked by: ${identifiers(task.blockedBy)}`,
27
+ `Created: ${terminalText(task.createdAt)}`,
28
+ `Updated: ${terminalText(task.updatedAt)}`,
29
+ "",
30
+ ].join("\n");
31
+ export const renderTaskGraph = (graph) => [
32
+ `Project: ${terminalText(graph.project.id)}`,
33
+ `Name: ${terminalText(graph.project.name)}`,
34
+ `Repository: ${terminalText(graph.project.repoUrl)}`,
35
+ `Created: ${terminalText(graph.project.createdAt)}`,
36
+ `Updated: ${terminalText(graph.project.updatedAt)}`,
37
+ "",
38
+ "Summary:",
39
+ `Total: ${graph.summary.total}`,
40
+ `Todo: ${graph.summary.todo}`,
41
+ `In progress: ${graph.summary.inProgress}`,
42
+ `Done: ${graph.summary.done}`,
43
+ `Ready: ${graph.summary.ready}`,
44
+ `Blocked: ${graph.summary.blocked}`,
45
+ "",
46
+ graph.tasks.length === 0 ? "No tasks.\n" : graph.tasks.map(renderGraphTask).join("\n"),
47
+ ].join("\n");
48
+ export const renderTaskJson = (value) => `${stringifyApiJson(value)}\n`;
49
+ //# sourceMappingURL=rendering.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rendering.js","sourceRoot":"","sources":["../../../src/commands/task/rendering.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { CliContext } from "../../cli/context.js";
2
+ import type { UpdateResult } from "./updater.js";
3
+ export type UpdateCommandDependencies = {
4
+ update: (packageDirectory: string) => Promise<UpdateResult>;
5
+ };
6
+ export declare const runUpdateCommand: (args: readonly string[], context: CliContext, dependencies?: UpdateCommandDependencies) => Promise<void>;
@@ -0,0 +1,23 @@
1
+ import { parseCommand, renderCommandHelp } from "../../cli/schema.js";
2
+ import { updateDefinition } from "./definition.js";
3
+ const defaultDependencies = {
4
+ update: async (packageDirectory) => (await import("./updater.js")).updateSelf({ packageDirectory }),
5
+ };
6
+ export const runUpdateCommand = async (args, context, dependencies = defaultDependencies) => {
7
+ const operation = parseCommand(updateDefinition, args, ["daynight", "update"]);
8
+ if (operation.kind !== "run") {
9
+ context.stdout(renderCommandHelp(operation.command, operation.path));
10
+ return;
11
+ }
12
+ const result = await dependencies.update(context.packageDirectory);
13
+ if (result.status === "updated") {
14
+ context.stdout(`Updated daynight from ${result.previousVersion} to ${result.targetVersion}.\nRestart any running reviewer to use the new version.\n`);
15
+ }
16
+ else if (result.status === "current") {
17
+ context.stdout(`daynight ${result.previousVersion} is already up to date.\n`);
18
+ }
19
+ else {
20
+ context.stdout(`daynight ${result.previousVersion} is newer than latest ${result.targetVersion}.\n`);
21
+ }
22
+ };
23
+ //# sourceMappingURL=command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command.js","sourceRoot":"","sources":["../../../src/commands/update/command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAEtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAOnD,MAAM,mBAAmB,GAA8B;IACrD,MAAM,EAAE,KAAK,EAAE,gBAAgB,EAAE,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,gBAAgB,EAAE,CAAC;CACpG,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EACnC,IAAuB,EACvB,OAAmB,EACnB,YAAY,GAA8B,mBAAmB,EAC9C,EAAE;IACjB,MAAM,SAAS,GAAG,YAAY,CAAC,gBAAgB,EAAE,IAAI,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC/E,IAAI,SAAS,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QAC7B,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QACrE,OAAO;IACT,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACnE,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO,CAAC,MAAM,CAAC,yBAAyB,MAAM,CAAC,eAAe,OAAO,MAAM,CAAC,aAAa,2DAA2D,CAAC,CAAC;IACxJ,CAAC;SAAM,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QACvC,OAAO,CAAC,MAAM,CAAC,YAAY,MAAM,CAAC,eAAe,2BAA2B,CAAC,CAAC;IAChF,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,MAAM,CAAC,YAAY,MAAM,CAAC,eAAe,yBAAyB,MAAM,CAAC,aAAa,KAAK,CAAC,CAAC;IACvG,CAAC;AACH,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { CommandDefinition } from "../../cli/schema.js";
2
+ export declare const updateDefinition: CommandDefinition;
@@ -0,0 +1,7 @@
1
+ export const updateDefinition = {
2
+ name: "update",
3
+ description: "Update this npm global installation to the latest version",
4
+ options: [{ names: ["-h", "--help"], description: "Show this help", action: "help" }],
5
+ details: "Update the current npm global installation to the registry's latest version.\nAn already-current or newer installation is kept. npm configuration and\nauthentication select the registry; review configuration and state are not read.\nRestart any running reviewer after updating to use the new version.",
6
+ };
7
+ //# sourceMappingURL=definition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definition.js","sourceRoot":"","sources":["../../../src/commands/update/definition.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,gBAAgB,GAAsB;IACjD,IAAI,EAAE,QAAQ;IACd,WAAW,EAAE,2DAA2D;IACxE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IACrF,OAAO,EAAE,8SAA8S;CACxT,CAAC"}
@@ -18,7 +18,7 @@ type UpdateOperations = {
18
18
  run: (command: UpdateCommand) => Promise<string>;
19
19
  };
20
20
  export type UpdateOptions = {
21
- packageDirectory?: string;
21
+ packageDirectory: string;
22
22
  platform?: NodeJS.Platform;
23
23
  nodeExecutable?: string;
24
24
  workingDirectory?: string;
@@ -28,5 +28,5 @@ export type UpdateOptions = {
28
28
  /** Parent interruption and command limits terminate only this invocation's process tree before rejecting. */
29
29
  export declare const runUpdateCommand: (command: UpdateCommand) => Promise<string>;
30
30
  /** Updates only the npm global installation containing this module; no configuration or review state is opened. */
31
- export declare const updateSelf: (options?: UpdateOptions) => Promise<UpdateResult>;
31
+ export declare const updateSelf: (options: UpdateOptions) => Promise<UpdateResult>;
32
32
  export {};
@@ -128,13 +128,13 @@ const parseVersion = (value, subject) => {
128
128
  };
129
129
  const isMissing = (cause) => cause instanceof Error && "code" in cause && (cause.code === "ENOENT" || cause.code === "ENOTDIR");
130
130
  /** Updates only the npm global installation containing this module; no configuration or review state is opened. */
131
- export const updateSelf = async (options = {}) => {
131
+ export const updateSelf = async (options) => {
132
132
  const operations = options.operations === undefined ? defaultOperations : options.operations;
133
133
  const platform = options.platform === undefined ? process.platform : options.platform;
134
134
  const paths = platform === "win32" ? path.win32 : path.posix;
135
135
  const environment = options.environment === undefined ? process.env : options.environment;
136
136
  const nodeExecutable = options.nodeExecutable === undefined ? process.execPath : options.nodeExecutable;
137
- const packageDirectory = await operations.realpath(options.packageDirectory === undefined ? path.resolve(import.meta.dirname, "..") : options.packageDirectory);
137
+ const packageDirectory = await operations.realpath(options.packageDirectory);
138
138
  const samePath = (left, right) => paths.relative(left, right) === "";
139
139
  const contains = (parent, child) => {
140
140
  const relative = paths.relative(parent, child);
@@ -230,4 +230,4 @@ export const updateSelf = async (options = {}) => {
230
230
  throw new Error(`The updated executable returned version ${JSON.stringify(installedVersion)}; expected ${targetVersion}.`);
231
231
  return { status: "updated", previousVersion, targetVersion };
232
232
  };
233
- //# sourceMappingURL=update.js.map
233
+ //# sourceMappingURL=updater.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"updater.js","sourceRoot":"","sources":["../../../src/commands/update/updater.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,WAAW,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAEzC,MAAM,WAAW,GAAG,sBAAsB,CAAC;AAC3C,MAAM,QAAQ,GAAG,8GAA8G,CAAC;AAChI,MAAM,WAAW,GAAG,GAAU,EAAE,CAAC,IAAI,KAAK,CAAC,uFAAuF,QAAQ,EAAE,CAAC,CAAC;AAiC9I,6GAA6G;AAC7G,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EAAE,OAAsB,EAAmB,EAAE;IAChF,IAAI,QAA4B,CAAC;IACjC,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAClH,IAAI,UAAU,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,+FAA+F,CAAC,CAAC;QACrL,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE,cAAc,CAAC,CAAC;QACnE,IAAI,CAAC;YAAC,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QAAC,CAAC;QAC7F,OAAO,KAAK,EAAE,CAAC;YAAC,MAAM,IAAI,KAAK,CAAC,kFAAkF,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QAAC,CAAC;IACnI,CAAC;IACD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,SAAS,EAAE;YACzD,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,GAAG,EAAE,OAAO,CAAC,WAAW;YACxB,WAAW,EAAE,IAAI;YACjB,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC;SACjF,CAAC,CAAC;QACH,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,OAA0B,CAAC;QAC/B,IAAI,WAAsC,CAAC;QAC3C,MAAM,SAAS,GAAG,GAAS,EAAE;YAC3B,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,IAAI,WAAW,KAAK,SAAS;gBAAE,OAAO;YACjE,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;gBACjC,WAAW,GAAG,IAAI,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;oBACjC,MAAM,UAAU,GAAG,KAAK,CAAC,QAAS,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,GAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;oBAC/J,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,GAAG,OAAO,GAAG,IAAI,KAAK,CAAC,0CAA0C,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACpM,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;wBAChC,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;4BACf,OAAO,GAAG,IAAI,KAAK,CAAC,4EAA4E,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;4BACrI,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;wBACxB,CAAC;wBACD,IAAI,EAAE,CAAC;oBACT,CAAC,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YACD,MAAM,MAAM,GAAG,CAAC,KAAqB,EAAQ,EAAE;gBAC7C,IAAI,CAAC;oBAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAI,EAAE,KAAK,CAAC,CAAC;gBAAC,CAAC;gBACzC,OAAO,KAAK,EAAE,CAAC;oBACb,IAAI,CAAC,CAAC,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC;wBAAE,OAAO,GAAG,IAAI,KAAK,CAAC,2CAA2C,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;gBAClN,CAAC;YACH,CAAC,CAAC;YACF,MAAM,CAAC,SAAS,CAAC,CAAC;YAClB,WAAW,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;QAClC,CAAC,CAAC;QACF,MAAM,SAAS,GAAG,CAAC,MAAsB,EAAQ,EAAE;YACjD,IAAI,OAAO,KAAK,SAAS;gBAAE,OAAO,GAAG,IAAI,KAAK,CAAC,yCAAyC,MAAM,GAAG,CAAC,CAAC;YACnG,SAAS,EAAE,CAAC;QACd,CAAC,CAAC;QACF,MAAM,cAAc,GAAG,GAAS,EAAE,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,MAAM,eAAe,GAAG,GAAS,EAAE,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9D,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;QACrC,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;QACvC,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;QAClC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YACzC,IAAI,OAAO,KAAK,SAAS;gBAAE,OAAO;YAClC,MAAM,IAAI,KAAK,CAAC;YAChB,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;gBAClD,OAAO,GAAG,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAC;gBACxF,SAAS,EAAE,CAAC;YACd,CAAC;QACH,CAAC,CAAC,CAAC;QACH,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,IAAI,OAAO,KAAK,SAAS;gBAAE,OAAO,GAAG,IAAI,KAAK,CAAC,sCAAsC,OAAO,CAAC,SAAS,GAAG,KAAK,WAAW,CAAC,CAAC;YAC3H,SAAS,EAAE,CAAC;QACd,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;QACtB,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,GAAG,IAAI,OAAO,KAAK,SAAS;YAAE,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAChF,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE;YACzC,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,IAAI,WAAW,KAAK,SAAS;gBAAE,MAAM,WAAW,CAAC;YACjD,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;YACjD,OAAO,CAAC,cAAc,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;YACnD,IAAI,OAAO,KAAK,SAAS;gBAAE,MAAM,CAAC,OAAO,CAAC,CAAC;iBACtC,IAAI,MAAM,KAAK,IAAI;gBAAE,MAAM,CAAC,IAAI,KAAK,CAAC,wCAAwC,MAAM,GAAG,CAAC,CAAC,CAAC;iBAC1F,IAAI,IAAI,KAAK,CAAC;gBAAE,MAAM,CAAC,IAAI,KAAK,CAAC,uCAAuC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;;gBAC1F,OAAO,CAAC,MAAM,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAqB;IAC1C,QAAQ,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAClD,QAAQ;IACR,WAAW;IACX,GAAG,EAAE,gBAAgB;CACtB,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,KAAc,EAAE,OAAe,EAAU,EAAE;IAC/D,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,OAAO,wCAAwC,CAAC,CAAC;IACnG,IAAI,MAAc,CAAC;IACnB,IAAI,CAAC;QAAC,MAAM,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;IAAC,CAAC;IACnC,OAAO,KAAK,EAAE,CAAC;QAAC,MAAM,IAAI,KAAK,CAAC,GAAG,OAAO,wCAAwC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IAAC,CAAC;IACjG,MAAM,SAAS,GAAG,GAAG,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;IACtG,IAAI,KAAK,KAAK,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,OAAO,wCAAwC,CAAC,CAAC;IAC7F,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,KAAc,EAAW,EAAE,CAAC,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;AAElJ,mHAAmH;AACnH,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,EAAE,OAAsB,EAAyB,EAAE;IAChF,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;IAC7F,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;IACtF,MAAM,KAAK,GAAG,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;IAC7D,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC;IAC1F,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC;IACxG,MAAM,gBAAgB,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC7E,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAE,KAAa,EAAW,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;IAC9F,MAAM,QAAQ,GAAG,CAAC,MAAc,EAAE,KAAa,EAAW,EAAE;QAC1D,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAC/C,OAAO,QAAQ,KAAK,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,QAAQ,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;IACzH,CAAC,CAAC;IACF,MAAM,UAAU,GAAG,KAAK,EAAE,SAAiB,EAAoC,EAAE;QAC/E,MAAM,QAAQ,GAAY,IAAI,CAAC,KAAK,CAAC,MAAM,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;QACvG,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,SAAS,GAAG,CAAC,CAAC;QAC/I,OAAO,QAAmC,CAAC;IAC7C,CAAC,CAAC;IACF,MAAM,eAAe,GAAG,MAAM,UAAU,CAAC,gBAAgB,CAAC,CAAC;IAC3D,MAAM,aAAa,GAAG,CAAC,QAAiC,EAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,KAAK,WAAW,IAAI,QAAQ,CAAC,OAAO,KAAK,IAAI;QAC9H,OAAO,QAAQ,CAAC,GAAG,KAAK,QAAQ,IAAI,QAAQ,CAAC,GAAG,KAAK,IAAI,IAAI,UAAU,IAAI,QAAQ,CAAC,GAAG,IAAI,QAAQ,CAAC,GAAG,CAAC,QAAQ,KAAK,cAAc,CAAC;IACtI,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC;QAAE,MAAM,WAAW,EAAE,CAAC;IACzD,MAAM,eAAe,GAAG,YAAY,CAAC,eAAe,CAAC,OAAO,EAAE,+BAA+B,CAAC,CAAC;IAC/F,MAAM,MAAM,GAAG,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,gBAAgB,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAC;IACnI,MAAM,YAAY,GAAG,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC;IACrJ,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,YAAY,CAAC;QAAE,MAAM,WAAW,EAAE,CAAC;IACnE,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,gBAAgB,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;IAC7D,MAAM,QAAQ,GAAG,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;IACnH,MAAM,cAAc,GAAG,KAAK,IAAmB,EAAE;QAC/C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,MAAM,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;YAChI,IAAI,CAAC,QAAQ,CAAC,MAAM,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC;gBAAE,MAAM,WAAW,EAAE,CAAC;QAClI,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW;gBAAE,MAAM,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YACnJ,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC,CAAC;IACF,MAAM,cAAc,EAAE,CAAC;IACvB,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,UAAU,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC;IAC/E,MAAM,aAAa,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE,cAAc,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,aAAa,EAAE,wCAAwC,CAAC,CAAC,CAAC;IACtK,MAAM,cAAc,GAAG,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;IAChE,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;IACvI,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS;QAAE,KAAK,MAAM,SAAS,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;YACvH,IAAI,SAAS,KAAK,EAAE;gBAAE,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC,CAAC;QAClF,CAAC;IACD,IAAI,MAA0B,CAAC;IAC/B,KAAK,MAAM,SAAS,IAAI,aAAa,EAAE,CAAC;QACtC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,QAAQ,KAAK,OAAO,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,MAAM,UAAU,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACjK,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACnD,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,YAAY,IAAI,QAAQ,CAAC,gBAAgB,EAAE,QAAQ,CAAC;gBAAE,SAAS;YAChG,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;YACpE,IAAI,QAAQ,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;gBAAC,MAAM,GAAG,QAAQ,CAAC;gBAAC,MAAM;YAAC,CAAC;QAC5D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW;gBAAE,SAAS;YAC1G,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IACD,IAAI,MAAM,KAAK,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,4EAA4E,QAAQ,EAAE,CAAC,CAAC;IAClI,MAAM,OAAO,GAAG,CAAC,cAAwB,EAAE,MAA6B,EAAE,SAAiB,EAAmB,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;QAC9H,UAAU,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC,MAAM,EAAE,GAAG,cAAc,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM;KAChH,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,CAAC,MAAM,EAAE,GAAG,WAAW,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,iBAAiB,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IAC7J,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAAC,CAAC;IACtC,OAAO,KAAK,EAAE,CAAC;QAAC,MAAM,IAAI,KAAK,CAAC,2DAA2D,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IAAC,CAAC;IAC1G,MAAM,aAAa,GAAG,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,gCAAgC,CAAC,CAAC;IACxI,MAAM,KAAK,GAAG,OAAO,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC;IACtD,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,CAAC;IACrG,MAAM,gBAAgB,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACtI,IAAI,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,+FAA+F,CAAC,CAAC;IACnK,MAAM,OAAO,CAAC,CAAC,SAAS,EAAE,GAAG,WAAW,IAAI,aAAa,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,iBAAiB,EAAE,eAAe,EAAE,YAAY,EAAE,WAAW,CAAC,EAAE,SAAS,EAAE,EAAE,GAAG,MAAM,CAAC,CAAC;IACrL,MAAM,iBAAiB,GAAG,MAAM,UAAU,CAAC,gBAAgB,CAAC,CAAC;IAC7D,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,IAAI,YAAY,CAAC,iBAAiB,CAAC,OAAO,EAAE,6BAA6B,CAAC,KAAK,aAAa,EAAE,CAAC;QAClI,MAAM,IAAI,KAAK,CAAC,2DAA2D,WAAW,IAAI,aAAa,GAAG,CAAC,CAAC;IAC9G,CAAC;IACD,MAAM,cAAc,EAAE,CAAC;IACvB,MAAM,gBAAgB,GAAG,CAAC,MAAM,UAAU,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACvL,IAAI,gBAAgB,KAAK,aAAa;QAAE,MAAM,IAAI,KAAK,CAAC,2CAA2C,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,cAAc,aAAa,GAAG,CAAC,CAAC;IACnK,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,aAAa,EAAE,CAAC;AAC/D,CAAC,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { parseDocument } from "yaml";
2
+ import type { ConfigurationPaths } from "./paths.js";
3
+ export type ConfigurationDocument = {
4
+ document: ReturnType<typeof parseDocument>;
5
+ mapping: Record<string, unknown>;
6
+ };
7
+ export declare const supportedConfigurationFields: readonly ["serverUrl", "repositoryRoot", "repositories", "pollIntervalMs", "maxConcurrentWorker", "agentTimeoutMs", "maxAttempts", "retryDelayMs"];
8
+ export declare const parseConfigurationDocument: (source: string, paths: ConfigurationPaths) => ConfigurationDocument;
9
+ export declare const readConfiguration: (paths: ConfigurationPaths) => Promise<ConfigurationDocument>;
@@ -0,0 +1,45 @@
1
+ import { parseDocument } from "yaml";
2
+ import { readConfigurationSource } from "./files.js";
3
+ export const supportedConfigurationFields = [
4
+ "serverUrl",
5
+ "repositoryRoot",
6
+ "repositories",
7
+ "pollIntervalMs",
8
+ "maxConcurrentWorker",
9
+ "agentTimeoutMs",
10
+ "maxAttempts",
11
+ "retryDelayMs",
12
+ ];
13
+ export const parseConfigurationDocument = (source, paths) => {
14
+ const document = parseDocument(source, {
15
+ strict: true,
16
+ uniqueKeys: true,
17
+ stringKeys: true,
18
+ prettyErrors: false,
19
+ });
20
+ const problems = [...document.errors, ...document.warnings];
21
+ if (problems.length !== 0) {
22
+ throw new Error(`Invalid YAML in ${paths.configFile}.`, {
23
+ cause: new AggregateError(problems, "YAML configuration was rejected."),
24
+ });
25
+ }
26
+ let parsed;
27
+ try {
28
+ parsed = document.toJS();
29
+ }
30
+ catch (cause) {
31
+ throw new Error(`Cannot decode YAML in ${paths.configFile}.`, { cause });
32
+ }
33
+ if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
34
+ throw new Error("Configuration must be a mapping.");
35
+ }
36
+ const mapping = parsed;
37
+ for (const field of Object.keys(mapping)) {
38
+ if (!supportedConfigurationFields.includes(field)) {
39
+ throw new Error(`Configuration contains unsupported field ${JSON.stringify(field)}.`);
40
+ }
41
+ }
42
+ return { document, mapping };
43
+ };
44
+ export const readConfiguration = async (paths) => parseConfigurationDocument(await readConfigurationSource(paths), paths);
45
+ //# sourceMappingURL=document.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document.js","sourceRoot":"","sources":["../../src/config/document.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAQrD,MAAM,CAAC,MAAM,4BAA4B,GAAG;IAC1C,WAAW;IACX,gBAAgB;IAChB,cAAc;IACd,gBAAgB;IAChB,qBAAqB;IACrB,gBAAgB;IAChB,aAAa;IACb,cAAc;CACN,CAAC;AAEX,MAAM,CAAC,MAAM,0BAA0B,GAAG,CACxC,MAAc,EACd,KAAyB,EACF,EAAE;IACzB,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,EAAE;QACrC,MAAM,EAAE,IAAI;QACZ,UAAU,EAAE,IAAI;QAChB,UAAU,EAAE,IAAI;QAChB,YAAY,EAAE,KAAK;KACpB,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC5D,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,mBAAmB,KAAK,CAAC,UAAU,GAAG,EAAE;YACtD,KAAK,EAAE,IAAI,cAAc,CAAC,QAAQ,EAAE,kCAAkC,CAAC;SACxE,CAAC,CAAC;IACL,CAAC;IACD,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC3B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,yBAAyB,KAAK,CAAC,UAAU,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3E,CAAC;IACD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3E,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACtD,CAAC;IACD,MAAM,OAAO,GAAG,MAAiC,CAAC;IAClD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACzC,IAAI,CAAE,4BAAkD,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACzE,MAAM,IAAI,KAAK,CAAC,4CAA4C,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACxF,CAAC;IACH,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;AAC/B,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,EAAE,KAAyB,EAAkC,EAAE,CACnG,0BAA0B,CAAC,MAAM,uBAAuB,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { ConfigurationPaths } from "./paths.js";
2
+ export declare const readConfigurationSource: (paths: ConfigurationPaths, signal?: AbortSignal) => Promise<string>;
3
+ export type ConfigurationUpdate<Result> = {
4
+ result: Result;
5
+ source?: string;
6
+ };
7
+ export declare const updateConfigurationFile: <Result>(paths: ConfigurationPaths, update: (source: string | undefined) => Promise<ConfigurationUpdate<Result>>) => Promise<Result>;
@@ -0,0 +1,69 @@
1
+ import { lstat, mkdir, open, readFile, unlink } from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { replaceFileAtomically } from "../platform/files.js";
4
+ const hasCode = (error, code) => error instanceof Error && "code" in error && error.code === code;
5
+ export const readConfigurationSource = async (paths, signal) => {
6
+ try {
7
+ return await readFile(paths.configFile, { encoding: "utf8", ...(signal === undefined ? {} : { signal }) });
8
+ }
9
+ catch (cause) {
10
+ throw new Error(`Cannot read configuration file ${paths.configFile}.`, { cause });
11
+ }
12
+ };
13
+ export const updateConfigurationFile = async (paths, update) => {
14
+ await mkdir(path.dirname(paths.configFile), { recursive: true });
15
+ const lockFile = `${paths.configFile}.lock`;
16
+ let lock;
17
+ try {
18
+ lock = await open(lockFile, "wx", 0o600);
19
+ }
20
+ catch (cause) {
21
+ throw new Error(hasCode(cause, "EEXIST")
22
+ ? `Configuration is locked by another writer at ${lockFile}; retry when that writer exits. Remove the lock only after confirming no writer is running.`
23
+ : `Cannot acquire configuration lock ${lockFile}.`, { cause });
24
+ }
25
+ let failure;
26
+ try {
27
+ let existingEntry;
28
+ try {
29
+ existingEntry = await lstat(paths.configFile);
30
+ }
31
+ catch (cause) {
32
+ if (!hasCode(cause, "ENOENT")) {
33
+ throw new Error(`Cannot inspect configuration file ${paths.configFile}.`, { cause });
34
+ }
35
+ }
36
+ if (existingEntry !== undefined && !existingEntry.isFile()) {
37
+ throw new Error(`Configuration file ${paths.configFile} must be a regular file; symbolic-link writes are not supported.`);
38
+ }
39
+ const source = existingEntry === undefined ? undefined : await readConfigurationSource(paths);
40
+ const updated = await update(source);
41
+ if (updated.source !== undefined) {
42
+ await replaceFileAtomically(paths.configFile, updated.source, existingEntry?.mode);
43
+ }
44
+ return updated.result;
45
+ }
46
+ catch (cause) {
47
+ failure = cause;
48
+ throw cause;
49
+ }
50
+ finally {
51
+ const cleanup = [];
52
+ try {
53
+ await lock.close();
54
+ }
55
+ catch (cause) {
56
+ cleanup.push(cause);
57
+ }
58
+ try {
59
+ await unlink(lockFile);
60
+ }
61
+ catch (cause) {
62
+ cleanup.push(cause);
63
+ }
64
+ if (cleanup.length !== 0) {
65
+ throw new AggregateError(failure === undefined ? cleanup : [failure, ...cleanup], "Configuration update or lock cleanup failed.");
66
+ }
67
+ }
68
+ };
69
+ //# sourceMappingURL=files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/config/files.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { PathApi } from "../platform/filesystem.js";
2
+ export type ConfigurationPaths = {
3
+ stateDirectory: string;
4
+ configFile: string;
5
+ };
6
+ export declare const resolveConfigurationPaths: (homeDirectory: string, pathApi?: PathApi) => ConfigurationPaths;
@@ -0,0 +1,9 @@
1
+ import path from "node:path";
2
+ export const resolveConfigurationPaths = (homeDirectory, pathApi = path) => {
3
+ if (!pathApi.isAbsolute(homeDirectory)) {
4
+ throw new Error("The current user's home directory must be an absolute path.");
5
+ }
6
+ const stateDirectory = pathApi.resolve(homeDirectory, ".daynight");
7
+ return { stateDirectory, configFile: pathApi.join(stateDirectory, "config.yml") };
8
+ };
9
+ //# sourceMappingURL=paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/config/paths.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAQ7B,MAAM,CAAC,MAAM,yBAAyB,GAAG,CACvC,aAAqB,EACrB,OAAO,GAAY,IAAI,EACH,EAAE;IACtB,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;IACjF,CAAC;IACD,MAAM,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;IACnE,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,YAAY,CAAC,EAAE,CAAC;AACpF,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { ConfigurationPaths } from "./paths.js";
2
+ export type ServerConfiguration = {
3
+ serverUrl: string;
4
+ };
5
+ export declare const normalizeServerUrl: (value: unknown) => string;
6
+ export declare const parseServerConfiguration: (source: string, paths: ConfigurationPaths) => ServerConfiguration;
7
+ export declare const loadServerConfiguration: (paths: ConfigurationPaths, signal?: AbortSignal) => Promise<ServerConfiguration>;
@@ -0,0 +1,34 @@
1
+ import { parseConfigurationDocument } from "./document.js";
2
+ import { readConfigurationSource } from "./files.js";
3
+ export const normalizeServerUrl = (value) => {
4
+ const invalid = () => new Error("serverUrl must be an HTTP(S) origin without credentials, a non-root path, query, fragment, whitespace, or backslashes.");
5
+ if (typeof value !== "string" || !/^https?:\/\//i.test(value) || /[\s\u0000-\u001f\u007f-\u009f\\?#]/u.test(value)) {
6
+ throw invalid();
7
+ }
8
+ let url;
9
+ try {
10
+ url = new URL(value);
11
+ }
12
+ catch (cause) {
13
+ throw new Error("serverUrl must be a valid HTTP(S) origin.", { cause });
14
+ }
15
+ const authority = value.slice(value.indexOf("://") + 3);
16
+ if (authority.includes("@") || /\//.test(authority.replace(/\/$/, "")) || !["http:", "https:"].includes(url.protocol) || url.hostname === "" || url.username !== "" || url.password !== "" || url.pathname !== "/" || url.search !== "" || url.hash !== "") {
17
+ throw invalid();
18
+ }
19
+ return url.origin;
20
+ };
21
+ export const parseServerConfiguration = (source, paths) => {
22
+ try {
23
+ const { mapping } = parseConfigurationDocument(source, paths);
24
+ if (!Object.hasOwn(mapping, "serverUrl")) {
25
+ throw new Error("serverUrl is not configured; set it to the daynight-server HTTP(S) origin.");
26
+ }
27
+ return { serverUrl: normalizeServerUrl(mapping.serverUrl) };
28
+ }
29
+ catch (cause) {
30
+ throw new Error(`Invalid configuration file ${paths.configFile}: ${cause instanceof Error ? cause.message : String(cause)}`, { cause });
31
+ }
32
+ };
33
+ export const loadServerConfiguration = async (paths, signal) => parseServerConfiguration(await readConfigurationSource(paths, signal), paths);
34
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/config/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAKrD,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,KAAc,EAAU,EAAE;IAC3D,MAAM,OAAO,GAAG,GAAU,EAAE,CAAC,IAAI,KAAK,CAAC,wHAAwH,CAAC,CAAC;IACjK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,qCAAqC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACnH,MAAM,OAAO,EAAE,CAAC;IAClB,CAAC;IACD,IAAI,GAAQ,CAAC;IACb,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,2CAA2C,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IAC1E,CAAC;IACD,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IACxD,IAAI,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,QAAQ,KAAK,EAAE,IAAI,GAAG,CAAC,QAAQ,KAAK,EAAE,IAAI,GAAG,CAAC,QAAQ,KAAK,EAAE,IAAI,GAAG,CAAC,QAAQ,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,EAAE,IAAI,GAAG,CAAC,IAAI,KAAK,EAAE,EAAE,CAAC;QAC3P,MAAM,OAAO,EAAE,CAAC;IAClB,CAAC;IACD,OAAO,GAAG,CAAC,MAAM,CAAC;AACpB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,MAAc,EAAE,KAAyB,EAAuB,EAAE;IACzG,IAAI,CAAC;QACH,MAAM,EAAE,OAAO,EAAE,GAAG,0BAA0B,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAC9D,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CAAC,4EAA4E,CAAC,CAAC;QAChG,CAAC;QACD,OAAO,EAAE,SAAS,EAAE,kBAAkB,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;IAC9D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,8BAA8B,KAAK,CAAC,UAAU,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IAC1I,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAK,EAAE,KAAyB,EAAE,MAAoB,EAAgC,EAAE,CAC7H,wBAAwB,CAAC,MAAM,uBAAuB,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC"}
package/dist/main.js CHANGED
@@ -1,9 +1,13 @@
1
1
  #!/usr/bin/env node
2
2
  import { readFile } from "node:fs/promises";
3
- import { defaultCliDependencies, formatError, runCli } from "./cli.js";
3
+ import { fileURLToPath } from "node:url";
4
+ import { runCli } from "./cli/application.js";
5
+ import { createCliContext } from "./cli/context.js";
6
+ import { formatError } from "./platform/diagnostics.js";
4
7
  try {
5
8
  const manifest = JSON.parse(await readFile(new URL("../package.json", import.meta.url), "utf8"));
6
- process.exitCode = await runCli(process.argv.slice(2), defaultCliDependencies(manifest.version));
9
+ const packageDirectory = fileURLToPath(new URL("../", import.meta.url));
10
+ process.exitCode = await runCli(process.argv.slice(2), createCliContext(manifest.version, packageDirectory));
7
11
  }
8
12
  catch (error) {
9
13
  process.stderr.write(`${formatError(error)}\n`);