@llodev/pm-tasks-linear 0.0.0-pr-48-70482cb
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +113 -0
- package/SKILL.md +298 -0
- package/dist/adapter.d.ts +25 -0
- package/dist/adapter.d.ts.map +1 -0
- package/dist/adapter.js +29 -0
- package/dist/adapter.js.map +1 -0
- package/dist/bin/init.d.ts +3 -0
- package/dist/bin/init.d.ts.map +1 -0
- package/dist/bin/init.js +20 -0
- package/dist/bin/init.js.map +1 -0
- package/dist/doctor-cli.d.ts +18 -0
- package/dist/doctor-cli.d.ts.map +1 -0
- package/dist/doctor-cli.js +315 -0
- package/dist/doctor-cli.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/init-flow.d.ts +60 -0
- package/dist/init-flow.d.ts.map +1 -0
- package/dist/init-flow.js +410 -0
- package/dist/init-flow.js.map +1 -0
- package/dist/transport-linear.d.ts +107 -0
- package/dist/transport-linear.d.ts.map +1 -0
- package/dist/transport-linear.js +415 -0
- package/dist/transport-linear.js.map +1 -0
- package/i18n/en-US.json +26 -0
- package/i18n/es-ES.json +26 -0
- package/i18n/pt-BR.json +26 -0
- package/manifest.json +15 -0
- package/package.json +61 -0
- package/schemas/config.json +161 -0
|
@@ -0,0 +1,315 @@
|
|
|
1
|
+
// pm-tasks-linear doctor-cli — adapter-specific health checks (C-LIN-*)
|
|
2
|
+
import { readFile } from "node:fs/promises";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
import { resolveDataDir } from "@llodev/pm-tasks-core/audit";
|
|
6
|
+
import { runChecks } from "@llodev/pm-tasks-core/doctor";
|
|
7
|
+
import { renderReport } from "@llodev/pm-tasks-core/bin/doctor";
|
|
8
|
+
const ROOT = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
|
|
9
|
+
// ---------------------------------------------------------------------------
|
|
10
|
+
// C-LIN-1: Config present and parseable (pure filesystem check)
|
|
11
|
+
// ---------------------------------------------------------------------------
|
|
12
|
+
const C_LIN_1 = {
|
|
13
|
+
id: "C-LIN-1",
|
|
14
|
+
label: "Config present and parseable",
|
|
15
|
+
severity: "error",
|
|
16
|
+
async run(ctx) {
|
|
17
|
+
const cfg = ctx.config;
|
|
18
|
+
if (!cfg || Object.keys(cfg).length === 0) {
|
|
19
|
+
return {
|
|
20
|
+
ok: false,
|
|
21
|
+
message: `Config not found or empty at ${ctx.configPath}`,
|
|
22
|
+
fixHint: "Run pm-tasks-linear init to generate a .linear.json config file.",
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
if (typeof cfg["version"] !== "string") {
|
|
26
|
+
return {
|
|
27
|
+
ok: false,
|
|
28
|
+
message: "Config is missing the required `version` field",
|
|
29
|
+
fixHint: "Re-run pm-tasks-linear init to regenerate the config.",
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
return { ok: true, message: `Config present (version ${String(cfg["version"])})` };
|
|
33
|
+
},
|
|
34
|
+
};
|
|
35
|
+
// ---------------------------------------------------------------------------
|
|
36
|
+
// C-LIN-2: Team id present in config
|
|
37
|
+
// ---------------------------------------------------------------------------
|
|
38
|
+
const C_LIN_2 = {
|
|
39
|
+
id: "C-LIN-2",
|
|
40
|
+
label: "Team id resolvable",
|
|
41
|
+
severity: "error",
|
|
42
|
+
async run(ctx) {
|
|
43
|
+
const cfg = ctx.config;
|
|
44
|
+
const team = (cfg["team"] ?? {});
|
|
45
|
+
const id = typeof team["id"] === "string" ? team["id"] : "";
|
|
46
|
+
const key = typeof team["key"] === "string" ? team["key"] : "";
|
|
47
|
+
if (!id || !key) {
|
|
48
|
+
return {
|
|
49
|
+
ok: false,
|
|
50
|
+
message: "team.id or team.key is missing in config",
|
|
51
|
+
fixHint: "Re-run pm-tasks-linear init to regenerate the config.",
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
return { ok: true, message: `team present: ${key} (${id})` };
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
// ---------------------------------------------------------------------------
|
|
58
|
+
// C-LIN-3: states[] includes a completed-type entry
|
|
59
|
+
// ---------------------------------------------------------------------------
|
|
60
|
+
const C_LIN_3 = {
|
|
61
|
+
id: "C-LIN-3",
|
|
62
|
+
label: "Completed state present",
|
|
63
|
+
severity: "warn",
|
|
64
|
+
async run(ctx) {
|
|
65
|
+
const cfg = ctx.config;
|
|
66
|
+
const states = cfg["states"];
|
|
67
|
+
if (!Array.isArray(states) || states.length === 0) {
|
|
68
|
+
return {
|
|
69
|
+
ok: false,
|
|
70
|
+
message: "states[] is empty — task.close and task.move to done will fail at runtime",
|
|
71
|
+
fixHint: "Re-run pm-tasks-linear init to populate workflow states.",
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
const hasCompleted = states.some((s) => s["type"] === "completed");
|
|
75
|
+
if (!hasCompleted) {
|
|
76
|
+
return {
|
|
77
|
+
ok: false,
|
|
78
|
+
message: "No state with type=completed found in config.states — task.close and task.move to done may fail",
|
|
79
|
+
fixHint: "Re-run pm-tasks-linear init or manually add a completed-type state to .linear.json.",
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
return { ok: true, message: "Completed state present in config.states" };
|
|
83
|
+
},
|
|
84
|
+
};
|
|
85
|
+
// ---------------------------------------------------------------------------
|
|
86
|
+
// C-LIN-4: estimation.enabled coherent with linearTarget
|
|
87
|
+
// ---------------------------------------------------------------------------
|
|
88
|
+
const C_LIN_4 = {
|
|
89
|
+
id: "C-LIN-4",
|
|
90
|
+
label: "Estimation config coherent",
|
|
91
|
+
severity: "error",
|
|
92
|
+
async run(ctx) {
|
|
93
|
+
const cfg = ctx.config;
|
|
94
|
+
const estimation = (cfg["estimation"] ?? {});
|
|
95
|
+
const enabled = estimation["enabled"];
|
|
96
|
+
const linearTarget = estimation["linearTarget"];
|
|
97
|
+
if (enabled === undefined) {
|
|
98
|
+
return {
|
|
99
|
+
ok: false,
|
|
100
|
+
message: "estimation.enabled is not set — re-run pm-tasks-linear init (M2 fix required)",
|
|
101
|
+
fixHint: "Re-run pm-tasks-linear init to regenerate estimation block.",
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
if (enabled === false && linearTarget === "points") {
|
|
105
|
+
return {
|
|
106
|
+
ok: false,
|
|
107
|
+
message: "estimation.enabled=false but linearTarget=points — inconsistent",
|
|
108
|
+
fixHint: 'Set linearTarget to "none", or re-run pm-tasks-linear init with estimation enabled.',
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
return {
|
|
112
|
+
ok: true,
|
|
113
|
+
message: `estimation: enabled=${String(enabled)}, linearTarget=${String(linearTarget ?? "not set")}`,
|
|
114
|
+
};
|
|
115
|
+
},
|
|
116
|
+
};
|
|
117
|
+
// ---------------------------------------------------------------------------
|
|
118
|
+
// C-LIN-5: cycles.enabled present
|
|
119
|
+
// ---------------------------------------------------------------------------
|
|
120
|
+
const C_LIN_5 = {
|
|
121
|
+
id: "C-LIN-5",
|
|
122
|
+
label: "Cycles config present",
|
|
123
|
+
severity: "warn",
|
|
124
|
+
async run(ctx) {
|
|
125
|
+
const cfg = ctx.config;
|
|
126
|
+
const cycles = cfg["cycles"];
|
|
127
|
+
if (!cycles || typeof cycles["enabled"] !== "boolean") {
|
|
128
|
+
return {
|
|
129
|
+
ok: false,
|
|
130
|
+
message: "cycles.enabled is missing — task.sprint.set will be NOT_APPLICABLE at runtime",
|
|
131
|
+
fixHint: "Re-run pm-tasks-linear init to populate cycles block.",
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
return {
|
|
135
|
+
ok: true,
|
|
136
|
+
message: `cycles.enabled=${String(cycles["enabled"])}`,
|
|
137
|
+
};
|
|
138
|
+
},
|
|
139
|
+
};
|
|
140
|
+
// ---------------------------------------------------------------------------
|
|
141
|
+
// C-LIN-6: autonomous scope references real team ids (pure config check)
|
|
142
|
+
// ---------------------------------------------------------------------------
|
|
143
|
+
const C_LIN_6 = {
|
|
144
|
+
id: "C-LIN-6",
|
|
145
|
+
label: "Autonomous scope uses team id",
|
|
146
|
+
severity: "warn",
|
|
147
|
+
async run(ctx) {
|
|
148
|
+
const cfg = ctx.config;
|
|
149
|
+
const autonomous = cfg["autonomous"];
|
|
150
|
+
if (!autonomous) {
|
|
151
|
+
return { ok: true, message: "No autonomous block — check not applicable" };
|
|
152
|
+
}
|
|
153
|
+
const scope = autonomous["scope"];
|
|
154
|
+
if (!scope) {
|
|
155
|
+
return { ok: true, message: "Autonomous enabled but no scope restrictions — open scope" };
|
|
156
|
+
}
|
|
157
|
+
const teams = scope["teams"] ?? [];
|
|
158
|
+
const team = (cfg["team"] ?? {});
|
|
159
|
+
const teamId = typeof team["id"] === "string" ? team["id"] : "";
|
|
160
|
+
if (teams.length > 0 && teamId && !teams.includes(teamId)) {
|
|
161
|
+
return {
|
|
162
|
+
ok: false,
|
|
163
|
+
message: `autonomous.scope.teams does not include the configured team id (${teamId})`,
|
|
164
|
+
fixHint: "Re-run pm-tasks-linear init --doctor or update autonomous.scope.teams manually.",
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
return { ok: true, message: "Autonomous scope is consistent with team config" };
|
|
168
|
+
},
|
|
169
|
+
};
|
|
170
|
+
// ---------------------------------------------------------------------------
|
|
171
|
+
// C-LIN-8: Project ids consistent — defaultProjectId and scope.projects must
|
|
172
|
+
// reference ids declared in the projects[] array.
|
|
173
|
+
// ---------------------------------------------------------------------------
|
|
174
|
+
const C_LIN_8 = {
|
|
175
|
+
id: "C-LIN-8",
|
|
176
|
+
label: "Project ids consistent",
|
|
177
|
+
severity: "warn",
|
|
178
|
+
async run(ctx) {
|
|
179
|
+
const cfg = ctx.config;
|
|
180
|
+
const projects = cfg["projects"];
|
|
181
|
+
// If no projects array at all, check is not applicable.
|
|
182
|
+
if (!projects || projects.length === 0) {
|
|
183
|
+
const hasDefaultOrScope = typeof cfg["defaultProjectId"] === "string" ||
|
|
184
|
+
(() => {
|
|
185
|
+
const auto = cfg["autonomous"];
|
|
186
|
+
const scope = auto?.["scope"];
|
|
187
|
+
const sp = scope?.["projects"];
|
|
188
|
+
return sp && sp.length > 0;
|
|
189
|
+
})();
|
|
190
|
+
if (hasDefaultOrScope) {
|
|
191
|
+
return {
|
|
192
|
+
ok: false,
|
|
193
|
+
message: "defaultProjectId or autonomous.scope.projects set but projects[] is absent",
|
|
194
|
+
fixHint: "Re-run pm-tasks-linear init to populate projects array.",
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
return { ok: true, message: "No projects configured — check not applicable" };
|
|
198
|
+
}
|
|
199
|
+
const knownIds = new Set(projects.filter((p) => typeof p["id"] === "string").map((p) => p["id"]));
|
|
200
|
+
const failures = [];
|
|
201
|
+
// Check defaultProjectId
|
|
202
|
+
const defaultId = cfg["defaultProjectId"];
|
|
203
|
+
if (typeof defaultId === "string" && !knownIds.has(defaultId)) {
|
|
204
|
+
failures.push(`defaultProjectId "${defaultId}" not in projects[]`);
|
|
205
|
+
}
|
|
206
|
+
// Check autonomous.scope.projects
|
|
207
|
+
const auto = cfg["autonomous"];
|
|
208
|
+
const scope = auto?.["scope"];
|
|
209
|
+
const scopeProjects = scope?.["projects"] ?? [];
|
|
210
|
+
for (const pid of scopeProjects) {
|
|
211
|
+
if (!knownIds.has(pid)) {
|
|
212
|
+
failures.push(`autonomous.scope.projects id "${pid}" not in projects[]`);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
if (failures.length > 0) {
|
|
216
|
+
return {
|
|
217
|
+
ok: false,
|
|
218
|
+
message: failures.join("; "),
|
|
219
|
+
fixHint: "Re-run pm-tasks-linear init to refresh project list.",
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
return { ok: true, message: `projects[] consistent (${knownIds.size} declared)` };
|
|
223
|
+
},
|
|
224
|
+
};
|
|
225
|
+
// ---------------------------------------------------------------------------
|
|
226
|
+
// C-LIN-7: Team reachable (probe-based; degrades gracefully when no probe)
|
|
227
|
+
// ---------------------------------------------------------------------------
|
|
228
|
+
function makeC_LIN_7(probe) {
|
|
229
|
+
return {
|
|
230
|
+
id: "C-LIN-7",
|
|
231
|
+
label: "Team reachable",
|
|
232
|
+
severity: "warn",
|
|
233
|
+
async run(ctx) {
|
|
234
|
+
if (!probe?.getTeam) {
|
|
235
|
+
return {
|
|
236
|
+
ok: true,
|
|
237
|
+
message: "No Linear probe injected — skipping reachability check. Run from a Claude Code session to verify.",
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
const cfg = ctx.config;
|
|
241
|
+
const team = (cfg["team"] ?? {});
|
|
242
|
+
const id = typeof team["id"] === "string" ? team["id"] : "";
|
|
243
|
+
try {
|
|
244
|
+
const result = await probe.getTeam(id);
|
|
245
|
+
if (!result) {
|
|
246
|
+
return {
|
|
247
|
+
ok: false,
|
|
248
|
+
message: `Team id ${id} not found in Linear`,
|
|
249
|
+
fixHint: "Ensure the Linear MCP is authenticated and the team id matches.",
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
return { ok: true, message: `Team reachable: ${result.key} (${result.id})` };
|
|
253
|
+
}
|
|
254
|
+
catch (e) {
|
|
255
|
+
return {
|
|
256
|
+
ok: false,
|
|
257
|
+
message: `Team reachability probe error: ${e.message}`,
|
|
258
|
+
fixHint: "Ensure the Linear MCP is authenticated and the team id matches.",
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
},
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
// ---------------------------------------------------------------------------
|
|
265
|
+
// Factory + default export
|
|
266
|
+
// ---------------------------------------------------------------------------
|
|
267
|
+
/** Create the linear-specific check array, optionally with a live probe for C-LIN-7. */
|
|
268
|
+
export function makeLinearChecks(probe) {
|
|
269
|
+
return [C_LIN_1, C_LIN_2, C_LIN_3, C_LIN_4, C_LIN_5, C_LIN_6, makeC_LIN_7(probe), C_LIN_8];
|
|
270
|
+
}
|
|
271
|
+
/** Pre-built checks without a probe (used when running standalone without MCP). */
|
|
272
|
+
export const ADAPTER_CHECKS = makeLinearChecks();
|
|
273
|
+
export async function runDoctor({ argv }) {
|
|
274
|
+
const jsonMode = argv.includes("--json");
|
|
275
|
+
const fixHintsOnly = argv.includes("--fix-hints-only");
|
|
276
|
+
// --config override
|
|
277
|
+
const configIdx = argv.indexOf("--config");
|
|
278
|
+
let configPath;
|
|
279
|
+
if (configIdx !== -1 && argv[configIdx + 1]) {
|
|
280
|
+
configPath = argv[configIdx + 1];
|
|
281
|
+
}
|
|
282
|
+
else {
|
|
283
|
+
configPath = path.resolve(process.cwd(), ".linear.json");
|
|
284
|
+
}
|
|
285
|
+
let config;
|
|
286
|
+
try {
|
|
287
|
+
const raw = await readFile(configPath, "utf8");
|
|
288
|
+
config = JSON.parse(raw);
|
|
289
|
+
}
|
|
290
|
+
catch {
|
|
291
|
+
config = {};
|
|
292
|
+
}
|
|
293
|
+
const schemaRaw = await readFile(path.join(ROOT, "schemas", "config.json"), "utf8");
|
|
294
|
+
const manifestRaw = await readFile(path.join(ROOT, "manifest.json"), "utf8");
|
|
295
|
+
const schema = JSON.parse(schemaRaw);
|
|
296
|
+
const manifest = JSON.parse(manifestRaw);
|
|
297
|
+
const ctx = {
|
|
298
|
+
tool: "linear",
|
|
299
|
+
configPath,
|
|
300
|
+
config,
|
|
301
|
+
manifest,
|
|
302
|
+
schema,
|
|
303
|
+
auditLogPath: path.join(resolveDataDir("linear"), "audit.log"),
|
|
304
|
+
auditRotationMaxBytes: 10 * 1024 * 1024,
|
|
305
|
+
};
|
|
306
|
+
const report = await runChecks(ctx, ADAPTER_CHECKS);
|
|
307
|
+
const opts = {
|
|
308
|
+
format: jsonMode ? "json" : "md",
|
|
309
|
+
fixHintsOnly,
|
|
310
|
+
};
|
|
311
|
+
console.log(renderReport(report, opts));
|
|
312
|
+
const hasError = report.results.some((r) => !r.result.ok && r.check.severity === "error");
|
|
313
|
+
process.exit(hasError ? 1 : 0);
|
|
314
|
+
}
|
|
315
|
+
//# sourceMappingURL=doctor-cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor-cli.js","sourceRoot":"","sources":["../src/doctor-cli.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { createLinearTransport } from "./transport-linear.js";
|
|
2
|
+
export type { McpCaller, CreateLinearTransportOptions, LinearTransport, LinearEstimationConfig, LinearTaskEstimateSetRequest, } from "./transport-linear.js";
|
|
3
|
+
export { createAdapter } from "./adapter.js";
|
|
4
|
+
export type { CreateAdapterOptions } from "./adapter.js";
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,YAAY,EACV,SAAS,EACT,4BAA4B,EAC5B,eAAe,EACf,sBAAsB,EACtB,4BAA4B,GAC7B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,YAAY,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAQ9D,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { type Choice, type PromptPickOptions, type ValidationResult } from "@llodev/pm-tasks-core/init-lib";
|
|
2
|
+
import type { McpCaller } from "./transport-linear.js";
|
|
3
|
+
export interface LinearTeam {
|
|
4
|
+
id: string;
|
|
5
|
+
key: string;
|
|
6
|
+
name: string;
|
|
7
|
+
}
|
|
8
|
+
export interface LinearState {
|
|
9
|
+
id: string;
|
|
10
|
+
name: string;
|
|
11
|
+
type: string;
|
|
12
|
+
}
|
|
13
|
+
export interface LinearLabel {
|
|
14
|
+
id: string;
|
|
15
|
+
name: string;
|
|
16
|
+
}
|
|
17
|
+
export interface LinearMember {
|
|
18
|
+
id: string;
|
|
19
|
+
name: string;
|
|
20
|
+
email?: string;
|
|
21
|
+
}
|
|
22
|
+
export interface LinearProject {
|
|
23
|
+
id: string;
|
|
24
|
+
name: string;
|
|
25
|
+
}
|
|
26
|
+
export interface LinearTeamSettings {
|
|
27
|
+
cyclesEnabled: boolean;
|
|
28
|
+
issueEstimationType: string;
|
|
29
|
+
}
|
|
30
|
+
export interface LinearInitApi {
|
|
31
|
+
getTeams(): Promise<LinearTeam[]>;
|
|
32
|
+
getStates(teamId: string): Promise<LinearState[]>;
|
|
33
|
+
getLabels(): Promise<LinearLabel[]>;
|
|
34
|
+
getUsers(): Promise<LinearMember[]>;
|
|
35
|
+
getTeamSettings(teamId: string): Promise<LinearTeamSettings>;
|
|
36
|
+
getCycles(teamId: string): Promise<unknown[]>;
|
|
37
|
+
getProjects(teamId: string): Promise<LinearProject[]>;
|
|
38
|
+
}
|
|
39
|
+
export type PickFn = <T>(label: string, choices: Choice<T>[], opts?: PromptPickOptions<T>) => Promise<T | null>;
|
|
40
|
+
export interface InitDeps {
|
|
41
|
+
/** Injected API implementation (MCP or GraphQL stub — used in tests) */
|
|
42
|
+
api?: LinearInitApi;
|
|
43
|
+
/** Injected MCP caller — builds MCP-based API when no api is provided */
|
|
44
|
+
mcp?: McpCaller;
|
|
45
|
+
pick?: PickFn;
|
|
46
|
+
yesNo?: (question: string) => Promise<boolean>;
|
|
47
|
+
/** Pre-resolved locale (tests pass this to skip interactive promptLocale) */
|
|
48
|
+
locale?: string;
|
|
49
|
+
doWrite?: (targetPath: string, data: unknown, opts?: {
|
|
50
|
+
locale?: string;
|
|
51
|
+
}) => Promise<void>;
|
|
52
|
+
doValidate?: (data: unknown, schema: unknown) => Promise<ValidationResult>;
|
|
53
|
+
doLoadSchema?: () => Promise<unknown>;
|
|
54
|
+
outPath?: string;
|
|
55
|
+
}
|
|
56
|
+
export declare function sanitizePersistedConfig<T>(value: T): T;
|
|
57
|
+
/** Strip surrounding quotes from an env value (defense against dotenv quoting). */
|
|
58
|
+
export declare function stripEnvQuotes(value: string): string;
|
|
59
|
+
export declare function runInit(deps?: InitDeps): Promise<Record<string, unknown>>;
|
|
60
|
+
//# sourceMappingURL=init-flow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init-flow.d.ts","sourceRoot":"","sources":["../src/init-flow.ts"],"names":[],"mappings":"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"}
|