@kb-labs/devlink-contracts 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +4 -0
- package/README.md +90 -0
- package/dist/index.d.ts +116 -0
- package/dist/index.js +183 -0
- package/dist/index.js.map +1 -0
- package/dist/schema.d.ts +263 -0
- package/dist/schema.js +80 -0
- package/dist/schema.js.map +1 -0
- package/package.json +50 -0
package/LICENSE
ADDED
package/README.md
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# @kb-labs/plugin-template-contracts
|
|
2
|
+
|
|
3
|
+
Lightweight public contracts package for the plugin: it describes guaranteed artifacts, commands, workflows, API payloads, and the version of these promises.
|
|
4
|
+
|
|
5
|
+
## Why this package exists
|
|
6
|
+
|
|
7
|
+
Every KB Labs plugin is expected to publish a clear, lightweight “promise” to the rest of the ecosystem. This package is that promise: it contains only types, manifests, and validation helpers, so other teams (CLI, Workflow Engine, Studio, REST, marketplace tooling) can rely on a single source of truth without dragging in plugin runtime code.
|
|
8
|
+
|
|
9
|
+
## Quick start checklist
|
|
10
|
+
|
|
11
|
+
1. Clone this package as part of your plugin workspace (`packages/contracts`).
|
|
12
|
+
2. Update `pluginContractsManifest` with your plugin ID and initial artifacts/commands.
|
|
13
|
+
3. Adjust Zod schemas in `src/schema.ts` (or add new ones) to match your payloads.
|
|
14
|
+
4. Bump `contractsVersion` whenever the public promise changes (SemVer rules below).
|
|
15
|
+
5. Run `pnpm test` and `pnpm type-check` to ensure the manifest validates.
|
|
16
|
+
6. Import the manifest in your CLI/REST/workflow code to avoid hard-coded IDs.
|
|
17
|
+
|
|
18
|
+
### Renaming this package
|
|
19
|
+
|
|
20
|
+
When you turn the template into your own plugin:
|
|
21
|
+
- Change the npm name in `package.json` (e.g. `@kb-labs/my-plugin-contracts`).
|
|
22
|
+
- Update `pluginContractsManifest.pluginId` in `src/contract.ts`.
|
|
23
|
+
- Adjust aliases in `tsconfig.paths.json` and imports across the workspace (`@kb-labs/plugin-template-contracts` → your new name).
|
|
24
|
+
- Replace sample artifact IDs (`template.hello.*`) with your own naming scheme.
|
|
25
|
+
|
|
26
|
+
## What's inside
|
|
27
|
+
|
|
28
|
+
- `pluginContractsManifest` — the single source of truth for the plugin's public capabilities
|
|
29
|
+
- TypeScript types (`src/types`) and Zod schemas (`src/schema`) for artifacts, commands, workflows, and API payloads
|
|
30
|
+
- `parsePluginContracts` utility for runtime validation of the manifest and third-party contracts
|
|
31
|
+
|
|
32
|
+
## Versioning rules
|
|
33
|
+
|
|
34
|
+
- `contractsVersion` follows SemVer and is **independent** from the plugin's npm version.
|
|
35
|
+
- **MAJOR** — breaking changes (removing/renaming artifacts, changing payload formats).
|
|
36
|
+
- **MINOR** — backwards-compatible extensions (new artifacts, commands, fields).
|
|
37
|
+
- **PATCH** — documentation/metadata updates without altering payload formats.
|
|
38
|
+
|
|
39
|
+
## Minimal manifest example
|
|
40
|
+
|
|
41
|
+
```ts
|
|
42
|
+
import type { PluginContracts } from '@kb-labs/plugin-template-contracts';
|
|
43
|
+
|
|
44
|
+
export const pluginContractsManifest: PluginContracts = {
|
|
45
|
+
schema: 'kb.plugin.contracts/1',
|
|
46
|
+
pluginId: '@kb-labs/my-plugin',
|
|
47
|
+
contractsVersion: '1.0.0',
|
|
48
|
+
artifacts: {
|
|
49
|
+
'my-plugin.result': {
|
|
50
|
+
id: 'my-plugin.result',
|
|
51
|
+
kind: 'json',
|
|
52
|
+
description: 'Primary output of the CLI command.'
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
// commands/workflows/api can be added later when needed
|
|
56
|
+
};
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## Optional sections
|
|
60
|
+
|
|
61
|
+
All additional sections are **optional** — include only what your plugin actually supports:
|
|
62
|
+
|
|
63
|
+
- `commands` — define CLI or workflow commands that produce/consume artifacts.
|
|
64
|
+
- `workflows` — describe composed workflows and their steps.
|
|
65
|
+
- `api` — document REST (or future surfaces) when the plugin exposes them.
|
|
66
|
+
|
|
67
|
+
If your plugin only ships a CLI command, keep `commands` + `artifacts` and omit `workflows`/`api`. The Zod schema accepts missing sections.
|
|
68
|
+
|
|
69
|
+
## Usage in plugin code
|
|
70
|
+
|
|
71
|
+
```ts
|
|
72
|
+
import { pluginContractsManifest } from '@kb-labs/plugin-template-contracts';
|
|
73
|
+
|
|
74
|
+
const helloArtifactId = pluginContractsManifest.artifacts['template.hello.greeting'].id;
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Use the manifest to avoid magic strings, assert that required artifacts exist, or log which promises were fulfilled.
|
|
78
|
+
|
|
79
|
+
## Who relies on the contract
|
|
80
|
+
|
|
81
|
+
- **Workflow Engine** — verifies allowed steps, required artifacts, and matches produced results with the contract.
|
|
82
|
+
- **Studio** — builds UI and hints based on declared artifacts and commands.
|
|
83
|
+
- **CLI / REST / other plugins** — reuse types and schemas as the source of truth, validate inputs/outputs.
|
|
84
|
+
- **Marketplace & QA tooling** — checks plugin compatibility and correctness before publishing.
|
|
85
|
+
|
|
86
|
+
## Looking ahead
|
|
87
|
+
|
|
88
|
+
- Generate JSON Schema / OpenAPI from the `api` contract surface.
|
|
89
|
+
- Add automatic inspectors in Studio and validators for the marketplace.
|
|
90
|
+
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
export { DependencyMode, DependencyModeSchema, DevlinkBackup, DevlinkBackupSchema, DevlinkMode, DevlinkModeSchema, DevlinkPlan, DevlinkPlanItem, DevlinkPlanItemSchema, DevlinkPlanSchema, DevlinkState, DevlinkStateSchema, DevlinkStatus, DevlinkStatusSchema, DiagnosticIssue, DiagnosticIssueSchema, PackageEntry, PackageEntrySchema, PackageMap, PackageMapSchema } from './schema.js';
|
|
2
|
+
import 'zod';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Flag definitions for DevLink CLI commands.
|
|
6
|
+
* Defined once here, reused in both manifest.ts and command handlers.
|
|
7
|
+
*/
|
|
8
|
+
declare const switchFlags: {
|
|
9
|
+
mode: {
|
|
10
|
+
type: "string";
|
|
11
|
+
description: string;
|
|
12
|
+
choices: string[];
|
|
13
|
+
alias: string;
|
|
14
|
+
demandOption: boolean;
|
|
15
|
+
};
|
|
16
|
+
'dry-run': {
|
|
17
|
+
type: "boolean";
|
|
18
|
+
description: string;
|
|
19
|
+
default: boolean;
|
|
20
|
+
alias: string;
|
|
21
|
+
};
|
|
22
|
+
repos: {
|
|
23
|
+
type: "string";
|
|
24
|
+
description: string;
|
|
25
|
+
alias: string;
|
|
26
|
+
};
|
|
27
|
+
yes: {
|
|
28
|
+
type: "boolean";
|
|
29
|
+
description: string;
|
|
30
|
+
default: boolean;
|
|
31
|
+
alias: string;
|
|
32
|
+
};
|
|
33
|
+
json: {
|
|
34
|
+
type: "boolean";
|
|
35
|
+
description: string;
|
|
36
|
+
default: boolean;
|
|
37
|
+
};
|
|
38
|
+
ttl: {
|
|
39
|
+
type: "number";
|
|
40
|
+
description: string;
|
|
41
|
+
default: number;
|
|
42
|
+
};
|
|
43
|
+
};
|
|
44
|
+
declare const statusFlags: {
|
|
45
|
+
json: {
|
|
46
|
+
type: "boolean";
|
|
47
|
+
description: string;
|
|
48
|
+
default: boolean;
|
|
49
|
+
};
|
|
50
|
+
verbose: {
|
|
51
|
+
type: "boolean";
|
|
52
|
+
description: string;
|
|
53
|
+
default: boolean;
|
|
54
|
+
alias: string;
|
|
55
|
+
};
|
|
56
|
+
};
|
|
57
|
+
declare const planFlags: {
|
|
58
|
+
mode: {
|
|
59
|
+
type: "string";
|
|
60
|
+
description: string;
|
|
61
|
+
choices: string[];
|
|
62
|
+
alias: string;
|
|
63
|
+
};
|
|
64
|
+
repos: {
|
|
65
|
+
type: "string";
|
|
66
|
+
description: string;
|
|
67
|
+
alias: string;
|
|
68
|
+
};
|
|
69
|
+
json: {
|
|
70
|
+
type: "boolean";
|
|
71
|
+
description: string;
|
|
72
|
+
default: boolean;
|
|
73
|
+
};
|
|
74
|
+
ttl: {
|
|
75
|
+
type: "number";
|
|
76
|
+
description: string;
|
|
77
|
+
default: number;
|
|
78
|
+
};
|
|
79
|
+
};
|
|
80
|
+
declare const freezeFlags: {
|
|
81
|
+
json: {
|
|
82
|
+
type: "boolean";
|
|
83
|
+
description: string;
|
|
84
|
+
default: boolean;
|
|
85
|
+
};
|
|
86
|
+
};
|
|
87
|
+
declare const undoFlags: {
|
|
88
|
+
json: {
|
|
89
|
+
type: "boolean";
|
|
90
|
+
description: string;
|
|
91
|
+
default: boolean;
|
|
92
|
+
};
|
|
93
|
+
};
|
|
94
|
+
declare const backupsFlags: {
|
|
95
|
+
restore: {
|
|
96
|
+
type: "string";
|
|
97
|
+
description: string;
|
|
98
|
+
alias: string;
|
|
99
|
+
};
|
|
100
|
+
json: {
|
|
101
|
+
type: "boolean";
|
|
102
|
+
description: string;
|
|
103
|
+
default: boolean;
|
|
104
|
+
};
|
|
105
|
+
};
|
|
106
|
+
type SwitchFlags = typeof switchFlags;
|
|
107
|
+
type StatusFlags = typeof statusFlags;
|
|
108
|
+
type PlanFlags = typeof planFlags;
|
|
109
|
+
type FreezeFlags = typeof freezeFlags;
|
|
110
|
+
type UndoFlags = typeof undoFlags;
|
|
111
|
+
type BackupsFlags = typeof backupsFlags;
|
|
112
|
+
|
|
113
|
+
/** Cache namespace prefix for devlink — used in manifest and npm checker */
|
|
114
|
+
declare const DEVLINK_CACHE_PREFIX: "devlink:";
|
|
115
|
+
|
|
116
|
+
export { type BackupsFlags, DEVLINK_CACHE_PREFIX, type FreezeFlags, type PlanFlags, type StatusFlags, type SwitchFlags, type UndoFlags, backupsFlags, freezeFlags, planFlags, statusFlags, switchFlags, undoFlags };
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
|
|
3
|
+
// src/schema.ts
|
|
4
|
+
var DevlinkModeSchema = z.enum(["local", "npm", "auto"]);
|
|
5
|
+
var PackageEntrySchema = z.object({
|
|
6
|
+
/** npm package name e.g. @kb-labs/core-platform */
|
|
7
|
+
name: z.string(),
|
|
8
|
+
/** Relative path for link: resolution e.g. ../kb-labs-core/packages/core-platform */
|
|
9
|
+
linkPath: z.string(),
|
|
10
|
+
/** npm version e.g. ^1.0.0 */
|
|
11
|
+
npmVersion: z.string(),
|
|
12
|
+
/** Source monorepo dir name e.g. kb-labs-core */
|
|
13
|
+
monorepo: z.string(),
|
|
14
|
+
/** Whether package.json has "private": true (stays as link: in npm mode) */
|
|
15
|
+
private: z.boolean().optional()
|
|
16
|
+
});
|
|
17
|
+
var PackageMapSchema = z.record(z.string(), PackageEntrySchema);
|
|
18
|
+
var DevlinkPlanItemSchema = z.object({
|
|
19
|
+
/** Absolute path to the package.json file to modify */
|
|
20
|
+
packageJsonPath: z.string(),
|
|
21
|
+
/** Relative path to packageJsonPath from repo root (for display) */
|
|
22
|
+
packageJsonRel: z.string(),
|
|
23
|
+
/** Owner monorepo e.g. kb-labs-cli */
|
|
24
|
+
monorepo: z.string(),
|
|
25
|
+
/** The dependency package being changed e.g. @kb-labs/core-platform */
|
|
26
|
+
depName: z.string(),
|
|
27
|
+
/** Current value in package.json */
|
|
28
|
+
from: z.string(),
|
|
29
|
+
/** New value to write */
|
|
30
|
+
to: z.string(),
|
|
31
|
+
/** Section: dependencies | devDependencies | peerDependencies */
|
|
32
|
+
section: z.enum(["dependencies", "devDependencies", "peerDependencies"])
|
|
33
|
+
});
|
|
34
|
+
var DevlinkPlanSchema = z.object({
|
|
35
|
+
mode: DevlinkModeSchema,
|
|
36
|
+
items: z.array(DevlinkPlanItemSchema),
|
|
37
|
+
timestamp: z.string(),
|
|
38
|
+
/** Filtered to specific repos if --repos flag was used */
|
|
39
|
+
scopedRepos: z.array(z.string()).optional()
|
|
40
|
+
});
|
|
41
|
+
var DevlinkStateSchema = z.object({
|
|
42
|
+
currentMode: DevlinkModeSchema.nullable(),
|
|
43
|
+
lastApplied: z.string().nullable(),
|
|
44
|
+
frozenAt: z.string().nullable()
|
|
45
|
+
});
|
|
46
|
+
var DevlinkBackupSchema = z.object({
|
|
47
|
+
id: z.string(),
|
|
48
|
+
timestamp: z.string(),
|
|
49
|
+
description: z.string(),
|
|
50
|
+
/** List of package.json paths that were backed up */
|
|
51
|
+
files: z.array(z.string()),
|
|
52
|
+
/** Mode that was active before backup was created */
|
|
53
|
+
modeAtBackup: DevlinkModeSchema.nullable()
|
|
54
|
+
});
|
|
55
|
+
var DiagnosticIssueSchema = z.object({
|
|
56
|
+
type: z.enum(["broken-link", "cross-repo-workspace", "stale-lockfile", "stale-workspace-yaml"]),
|
|
57
|
+
severity: z.enum(["error", "warning"]),
|
|
58
|
+
file: z.string(),
|
|
59
|
+
dep: z.string().optional(),
|
|
60
|
+
message: z.string(),
|
|
61
|
+
fix: z.string()
|
|
62
|
+
});
|
|
63
|
+
var DependencyModeSchema = z.enum(["local", "npm", "workspace", "mixed", "unknown"]);
|
|
64
|
+
var DevlinkStatusSchema = z.object({
|
|
65
|
+
currentMode: DevlinkModeSchema.nullable(),
|
|
66
|
+
lastApplied: z.string().nullable(),
|
|
67
|
+
linkCount: z.number(),
|
|
68
|
+
npmCount: z.number(),
|
|
69
|
+
workspaceCount: z.number(),
|
|
70
|
+
discrepancies: z.array(z.object({
|
|
71
|
+
packageJsonPath: z.string(),
|
|
72
|
+
depName: z.string(),
|
|
73
|
+
value: z.string(),
|
|
74
|
+
expected: z.string()
|
|
75
|
+
}))
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
// src/flags.ts
|
|
79
|
+
var switchFlags = {
|
|
80
|
+
mode: {
|
|
81
|
+
type: "string",
|
|
82
|
+
description: "Linking mode: local (link:), npm (^version), auto",
|
|
83
|
+
choices: ["local", "npm", "auto"],
|
|
84
|
+
alias: "m",
|
|
85
|
+
demandOption: true
|
|
86
|
+
},
|
|
87
|
+
"dry-run": {
|
|
88
|
+
type: "boolean",
|
|
89
|
+
description: "Preview changes without applying them",
|
|
90
|
+
default: false,
|
|
91
|
+
alias: "d"
|
|
92
|
+
},
|
|
93
|
+
repos: {
|
|
94
|
+
type: "string",
|
|
95
|
+
description: "Comma-separated list of repos to scope (e.g. kb-labs-cli,kb-labs-core)",
|
|
96
|
+
alias: "r"
|
|
97
|
+
},
|
|
98
|
+
yes: {
|
|
99
|
+
type: "boolean",
|
|
100
|
+
description: "Skip confirmation prompt",
|
|
101
|
+
default: false,
|
|
102
|
+
alias: "y"
|
|
103
|
+
},
|
|
104
|
+
json: {
|
|
105
|
+
type: "boolean",
|
|
106
|
+
description: "Output as JSON",
|
|
107
|
+
default: false
|
|
108
|
+
},
|
|
109
|
+
ttl: {
|
|
110
|
+
type: "number",
|
|
111
|
+
description: "npm registry cache TTL in hours (default: 24)",
|
|
112
|
+
default: 24
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
var statusFlags = {
|
|
116
|
+
json: {
|
|
117
|
+
type: "boolean",
|
|
118
|
+
description: "Output as JSON",
|
|
119
|
+
default: false
|
|
120
|
+
},
|
|
121
|
+
verbose: {
|
|
122
|
+
type: "boolean",
|
|
123
|
+
description: "Show all dependencies, not just cross-repo",
|
|
124
|
+
default: false,
|
|
125
|
+
alias: "v"
|
|
126
|
+
}
|
|
127
|
+
};
|
|
128
|
+
var planFlags = {
|
|
129
|
+
mode: {
|
|
130
|
+
type: "string",
|
|
131
|
+
description: "Target mode to plan for (defaults to opposite of current)",
|
|
132
|
+
choices: ["local", "npm", "auto"],
|
|
133
|
+
alias: "m"
|
|
134
|
+
},
|
|
135
|
+
repos: {
|
|
136
|
+
type: "string",
|
|
137
|
+
description: "Comma-separated list of repos to scope",
|
|
138
|
+
alias: "r"
|
|
139
|
+
},
|
|
140
|
+
json: {
|
|
141
|
+
type: "boolean",
|
|
142
|
+
description: "Output as JSON",
|
|
143
|
+
default: false
|
|
144
|
+
},
|
|
145
|
+
ttl: {
|
|
146
|
+
type: "number",
|
|
147
|
+
description: "npm registry cache TTL in hours (default: 24)",
|
|
148
|
+
default: 24
|
|
149
|
+
}
|
|
150
|
+
};
|
|
151
|
+
var freezeFlags = {
|
|
152
|
+
json: {
|
|
153
|
+
type: "boolean",
|
|
154
|
+
description: "Output as JSON",
|
|
155
|
+
default: false
|
|
156
|
+
}
|
|
157
|
+
};
|
|
158
|
+
var undoFlags = {
|
|
159
|
+
json: {
|
|
160
|
+
type: "boolean",
|
|
161
|
+
description: "Output as JSON",
|
|
162
|
+
default: false
|
|
163
|
+
}
|
|
164
|
+
};
|
|
165
|
+
var backupsFlags = {
|
|
166
|
+
restore: {
|
|
167
|
+
type: "string",
|
|
168
|
+
description: "Restore a specific backup by ID",
|
|
169
|
+
alias: "r"
|
|
170
|
+
},
|
|
171
|
+
json: {
|
|
172
|
+
type: "boolean",
|
|
173
|
+
description: "Output as JSON",
|
|
174
|
+
default: false
|
|
175
|
+
}
|
|
176
|
+
};
|
|
177
|
+
|
|
178
|
+
// src/index.ts
|
|
179
|
+
var DEVLINK_CACHE_PREFIX = "devlink:";
|
|
180
|
+
|
|
181
|
+
export { DEVLINK_CACHE_PREFIX, DependencyModeSchema, DevlinkBackupSchema, DevlinkModeSchema, DevlinkPlanItemSchema, DevlinkPlanSchema, DevlinkStateSchema, DevlinkStatusSchema, DiagnosticIssueSchema, PackageEntrySchema, PackageMapSchema, backupsFlags, freezeFlags, planFlags, statusFlags, switchFlags, undoFlags };
|
|
182
|
+
//# sourceMappingURL=index.js.map
|
|
183
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/schema.ts","../src/flags.ts","../src/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import { z } from 'zod';\n\n// ─── Mode ────────────────────────────────────────────────────────────────────\n\nexport const DevlinkModeSchema = z.enum(['local', 'npm', 'auto']);\nexport type DevlinkMode = z.infer<typeof DevlinkModeSchema>;\n\n// ─── Package Map ──────────────────────────────────────────────────────────────\n\nexport const PackageEntrySchema = z.object({\n /** npm package name e.g. @kb-labs/core-platform */\n name: z.string(),\n /** Relative path for link: resolution e.g. ../kb-labs-core/packages/core-platform */\n linkPath: z.string(),\n /** npm version e.g. ^1.0.0 */\n npmVersion: z.string(),\n /** Source monorepo dir name e.g. kb-labs-core */\n monorepo: z.string(),\n /** Whether package.json has \"private\": true (stays as link: in npm mode) */\n private: z.boolean().optional(),\n});\nexport type PackageEntry = z.infer<typeof PackageEntrySchema>;\n\nexport const PackageMapSchema = z.record(z.string(), PackageEntrySchema);\nexport type PackageMap = z.infer<typeof PackageMapSchema>;\n\n// ─── Plan ─────────────────────────────────────────────────────────────────────\n\nexport const DevlinkPlanItemSchema = z.object({\n /** Absolute path to the package.json file to modify */\n packageJsonPath: z.string(),\n /** Relative path to packageJsonPath from repo root (for display) */\n packageJsonRel: z.string(),\n /** Owner monorepo e.g. kb-labs-cli */\n monorepo: z.string(),\n /** The dependency package being changed e.g. @kb-labs/core-platform */\n depName: z.string(),\n /** Current value in package.json */\n from: z.string(),\n /** New value to write */\n to: z.string(),\n /** Section: dependencies | devDependencies | peerDependencies */\n section: z.enum(['dependencies', 'devDependencies', 'peerDependencies']),\n});\nexport type DevlinkPlanItem = z.infer<typeof DevlinkPlanItemSchema>;\n\nexport const DevlinkPlanSchema = z.object({\n mode: DevlinkModeSchema,\n items: z.array(DevlinkPlanItemSchema),\n timestamp: z.string(),\n /** Filtered to specific repos if --repos flag was used */\n scopedRepos: z.array(z.string()).optional(),\n});\nexport type DevlinkPlan = z.infer<typeof DevlinkPlanSchema>;\n\n// ─── State ────────────────────────────────────────────────────────────────────\n\nexport const DevlinkStateSchema = z.object({\n currentMode: DevlinkModeSchema.nullable(),\n lastApplied: z.string().nullable(),\n frozenAt: z.string().nullable(),\n});\nexport type DevlinkState = z.infer<typeof DevlinkStateSchema>;\n\n// ─── Backup ───────────────────────────────────────────────────────────────────\n\nexport const DevlinkBackupSchema = z.object({\n id: z.string(),\n timestamp: z.string(),\n description: z.string(),\n /** List of package.json paths that were backed up */\n files: z.array(z.string()),\n /** Mode that was active before backup was created */\n modeAtBackup: DevlinkModeSchema.nullable(),\n});\nexport type DevlinkBackup = z.infer<typeof DevlinkBackupSchema>;\n\n// ─── Diagnostics ─────────────────────────────────────────────────────────────\n\nexport const DiagnosticIssueSchema = z.object({\n type: z.enum(['broken-link', 'cross-repo-workspace', 'stale-lockfile', 'stale-workspace-yaml']),\n severity: z.enum(['error', 'warning']),\n file: z.string(),\n dep: z.string().optional(),\n message: z.string(),\n fix: z.string(),\n});\nexport type DiagnosticIssue = z.infer<typeof DiagnosticIssueSchema>;\n\n// ─── Status ───────────────────────────────────────────────────────────────────\n\nexport const DependencyModeSchema = z.enum(['local', 'npm', 'workspace', 'mixed', 'unknown']);\nexport type DependencyMode = z.infer<typeof DependencyModeSchema>;\n\nexport const DevlinkStatusSchema = z.object({\n currentMode: DevlinkModeSchema.nullable(),\n lastApplied: z.string().nullable(),\n linkCount: z.number(),\n npmCount: z.number(),\n workspaceCount: z.number(),\n discrepancies: z.array(z.object({\n packageJsonPath: z.string(),\n depName: z.string(),\n value: z.string(),\n expected: z.string(),\n })),\n});\nexport type DevlinkStatus = z.infer<typeof DevlinkStatusSchema>;\n","/**\n * Flag definitions for DevLink CLI commands.\n * Defined once here, reused in both manifest.ts and command handlers.\n */\n\nexport const switchFlags = {\n mode: {\n type: 'string' as const,\n description: 'Linking mode: local (link:), npm (^version), auto',\n choices: ['local', 'npm', 'auto'] as string[],\n alias: 'm',\n demandOption: true,\n },\n 'dry-run': {\n type: 'boolean' as const,\n description: 'Preview changes without applying them',\n default: false,\n alias: 'd',\n },\n repos: {\n type: 'string' as const,\n description: 'Comma-separated list of repos to scope (e.g. kb-labs-cli,kb-labs-core)',\n alias: 'r',\n },\n yes: {\n type: 'boolean' as const,\n description: 'Skip confirmation prompt',\n default: false,\n alias: 'y',\n },\n json: {\n type: 'boolean' as const,\n description: 'Output as JSON',\n default: false,\n },\n ttl: {\n type: 'number' as const,\n description: 'npm registry cache TTL in hours (default: 24)',\n default: 24,\n },\n};\n\nexport const statusFlags = {\n json: {\n type: 'boolean' as const,\n description: 'Output as JSON',\n default: false,\n },\n verbose: {\n type: 'boolean' as const,\n description: 'Show all dependencies, not just cross-repo',\n default: false,\n alias: 'v',\n },\n};\n\nexport const planFlags = {\n mode: {\n type: 'string' as const,\n description: 'Target mode to plan for (defaults to opposite of current)',\n choices: ['local', 'npm', 'auto'] as string[],\n alias: 'm',\n },\n repos: {\n type: 'string' as const,\n description: 'Comma-separated list of repos to scope',\n alias: 'r',\n },\n json: {\n type: 'boolean' as const,\n description: 'Output as JSON',\n default: false,\n },\n ttl: {\n type: 'number' as const,\n description: 'npm registry cache TTL in hours (default: 24)',\n default: 24,\n },\n};\n\nexport const freezeFlags = {\n json: {\n type: 'boolean' as const,\n description: 'Output as JSON',\n default: false,\n },\n};\n\nexport const undoFlags = {\n json: {\n type: 'boolean' as const,\n description: 'Output as JSON',\n default: false,\n },\n};\n\nexport const backupsFlags = {\n restore: {\n type: 'string' as const,\n description: 'Restore a specific backup by ID',\n alias: 'r',\n },\n json: {\n type: 'boolean' as const,\n description: 'Output as JSON',\n default: false,\n },\n};\n\nexport type SwitchFlags = typeof switchFlags;\nexport type StatusFlags = typeof statusFlags;\nexport type PlanFlags = typeof planFlags;\nexport type FreezeFlags = typeof freezeFlags;\nexport type UndoFlags = typeof undoFlags;\nexport type BackupsFlags = typeof backupsFlags;\n","export * from './schema.js';\nexport * from './flags.js';\n\n/** Cache namespace prefix for devlink — used in manifest and npm checker */\nexport const DEVLINK_CACHE_PREFIX = 'devlink:' as const;\n"]}
|
package/dist/schema.d.ts
ADDED
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
|
|
3
|
+
declare const DevlinkModeSchema: z.ZodEnum<["local", "npm", "auto"]>;
|
|
4
|
+
type DevlinkMode = z.infer<typeof DevlinkModeSchema>;
|
|
5
|
+
declare const PackageEntrySchema: z.ZodObject<{
|
|
6
|
+
/** npm package name e.g. @kb-labs/core-platform */
|
|
7
|
+
name: z.ZodString;
|
|
8
|
+
/** Relative path for link: resolution e.g. ../kb-labs-core/packages/core-platform */
|
|
9
|
+
linkPath: z.ZodString;
|
|
10
|
+
/** npm version e.g. ^1.0.0 */
|
|
11
|
+
npmVersion: z.ZodString;
|
|
12
|
+
/** Source monorepo dir name e.g. kb-labs-core */
|
|
13
|
+
monorepo: z.ZodString;
|
|
14
|
+
/** Whether package.json has "private": true (stays as link: in npm mode) */
|
|
15
|
+
private: z.ZodOptional<z.ZodBoolean>;
|
|
16
|
+
}, "strip", z.ZodTypeAny, {
|
|
17
|
+
name: string;
|
|
18
|
+
linkPath: string;
|
|
19
|
+
npmVersion: string;
|
|
20
|
+
monorepo: string;
|
|
21
|
+
private?: boolean | undefined;
|
|
22
|
+
}, {
|
|
23
|
+
name: string;
|
|
24
|
+
linkPath: string;
|
|
25
|
+
npmVersion: string;
|
|
26
|
+
monorepo: string;
|
|
27
|
+
private?: boolean | undefined;
|
|
28
|
+
}>;
|
|
29
|
+
type PackageEntry = z.infer<typeof PackageEntrySchema>;
|
|
30
|
+
declare const PackageMapSchema: z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
31
|
+
/** npm package name e.g. @kb-labs/core-platform */
|
|
32
|
+
name: z.ZodString;
|
|
33
|
+
/** Relative path for link: resolution e.g. ../kb-labs-core/packages/core-platform */
|
|
34
|
+
linkPath: z.ZodString;
|
|
35
|
+
/** npm version e.g. ^1.0.0 */
|
|
36
|
+
npmVersion: z.ZodString;
|
|
37
|
+
/** Source monorepo dir name e.g. kb-labs-core */
|
|
38
|
+
monorepo: z.ZodString;
|
|
39
|
+
/** Whether package.json has "private": true (stays as link: in npm mode) */
|
|
40
|
+
private: z.ZodOptional<z.ZodBoolean>;
|
|
41
|
+
}, "strip", z.ZodTypeAny, {
|
|
42
|
+
name: string;
|
|
43
|
+
linkPath: string;
|
|
44
|
+
npmVersion: string;
|
|
45
|
+
monorepo: string;
|
|
46
|
+
private?: boolean | undefined;
|
|
47
|
+
}, {
|
|
48
|
+
name: string;
|
|
49
|
+
linkPath: string;
|
|
50
|
+
npmVersion: string;
|
|
51
|
+
monorepo: string;
|
|
52
|
+
private?: boolean | undefined;
|
|
53
|
+
}>>;
|
|
54
|
+
type PackageMap = z.infer<typeof PackageMapSchema>;
|
|
55
|
+
declare const DevlinkPlanItemSchema: z.ZodObject<{
|
|
56
|
+
/** Absolute path to the package.json file to modify */
|
|
57
|
+
packageJsonPath: z.ZodString;
|
|
58
|
+
/** Relative path to packageJsonPath from repo root (for display) */
|
|
59
|
+
packageJsonRel: z.ZodString;
|
|
60
|
+
/** Owner monorepo e.g. kb-labs-cli */
|
|
61
|
+
monorepo: z.ZodString;
|
|
62
|
+
/** The dependency package being changed e.g. @kb-labs/core-platform */
|
|
63
|
+
depName: z.ZodString;
|
|
64
|
+
/** Current value in package.json */
|
|
65
|
+
from: z.ZodString;
|
|
66
|
+
/** New value to write */
|
|
67
|
+
to: z.ZodString;
|
|
68
|
+
/** Section: dependencies | devDependencies | peerDependencies */
|
|
69
|
+
section: z.ZodEnum<["dependencies", "devDependencies", "peerDependencies"]>;
|
|
70
|
+
}, "strip", z.ZodTypeAny, {
|
|
71
|
+
monorepo: string;
|
|
72
|
+
packageJsonPath: string;
|
|
73
|
+
packageJsonRel: string;
|
|
74
|
+
depName: string;
|
|
75
|
+
from: string;
|
|
76
|
+
to: string;
|
|
77
|
+
section: "dependencies" | "devDependencies" | "peerDependencies";
|
|
78
|
+
}, {
|
|
79
|
+
monorepo: string;
|
|
80
|
+
packageJsonPath: string;
|
|
81
|
+
packageJsonRel: string;
|
|
82
|
+
depName: string;
|
|
83
|
+
from: string;
|
|
84
|
+
to: string;
|
|
85
|
+
section: "dependencies" | "devDependencies" | "peerDependencies";
|
|
86
|
+
}>;
|
|
87
|
+
type DevlinkPlanItem = z.infer<typeof DevlinkPlanItemSchema>;
|
|
88
|
+
declare const DevlinkPlanSchema: z.ZodObject<{
|
|
89
|
+
mode: z.ZodEnum<["local", "npm", "auto"]>;
|
|
90
|
+
items: z.ZodArray<z.ZodObject<{
|
|
91
|
+
/** Absolute path to the package.json file to modify */
|
|
92
|
+
packageJsonPath: z.ZodString;
|
|
93
|
+
/** Relative path to packageJsonPath from repo root (for display) */
|
|
94
|
+
packageJsonRel: z.ZodString;
|
|
95
|
+
/** Owner monorepo e.g. kb-labs-cli */
|
|
96
|
+
monorepo: z.ZodString;
|
|
97
|
+
/** The dependency package being changed e.g. @kb-labs/core-platform */
|
|
98
|
+
depName: z.ZodString;
|
|
99
|
+
/** Current value in package.json */
|
|
100
|
+
from: z.ZodString;
|
|
101
|
+
/** New value to write */
|
|
102
|
+
to: z.ZodString;
|
|
103
|
+
/** Section: dependencies | devDependencies | peerDependencies */
|
|
104
|
+
section: z.ZodEnum<["dependencies", "devDependencies", "peerDependencies"]>;
|
|
105
|
+
}, "strip", z.ZodTypeAny, {
|
|
106
|
+
monorepo: string;
|
|
107
|
+
packageJsonPath: string;
|
|
108
|
+
packageJsonRel: string;
|
|
109
|
+
depName: string;
|
|
110
|
+
from: string;
|
|
111
|
+
to: string;
|
|
112
|
+
section: "dependencies" | "devDependencies" | "peerDependencies";
|
|
113
|
+
}, {
|
|
114
|
+
monorepo: string;
|
|
115
|
+
packageJsonPath: string;
|
|
116
|
+
packageJsonRel: string;
|
|
117
|
+
depName: string;
|
|
118
|
+
from: string;
|
|
119
|
+
to: string;
|
|
120
|
+
section: "dependencies" | "devDependencies" | "peerDependencies";
|
|
121
|
+
}>, "many">;
|
|
122
|
+
timestamp: z.ZodString;
|
|
123
|
+
/** Filtered to specific repos if --repos flag was used */
|
|
124
|
+
scopedRepos: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
125
|
+
}, "strip", z.ZodTypeAny, {
|
|
126
|
+
mode: "local" | "npm" | "auto";
|
|
127
|
+
items: {
|
|
128
|
+
monorepo: string;
|
|
129
|
+
packageJsonPath: string;
|
|
130
|
+
packageJsonRel: string;
|
|
131
|
+
depName: string;
|
|
132
|
+
from: string;
|
|
133
|
+
to: string;
|
|
134
|
+
section: "dependencies" | "devDependencies" | "peerDependencies";
|
|
135
|
+
}[];
|
|
136
|
+
timestamp: string;
|
|
137
|
+
scopedRepos?: string[] | undefined;
|
|
138
|
+
}, {
|
|
139
|
+
mode: "local" | "npm" | "auto";
|
|
140
|
+
items: {
|
|
141
|
+
monorepo: string;
|
|
142
|
+
packageJsonPath: string;
|
|
143
|
+
packageJsonRel: string;
|
|
144
|
+
depName: string;
|
|
145
|
+
from: string;
|
|
146
|
+
to: string;
|
|
147
|
+
section: "dependencies" | "devDependencies" | "peerDependencies";
|
|
148
|
+
}[];
|
|
149
|
+
timestamp: string;
|
|
150
|
+
scopedRepos?: string[] | undefined;
|
|
151
|
+
}>;
|
|
152
|
+
type DevlinkPlan = z.infer<typeof DevlinkPlanSchema>;
|
|
153
|
+
declare const DevlinkStateSchema: z.ZodObject<{
|
|
154
|
+
currentMode: z.ZodNullable<z.ZodEnum<["local", "npm", "auto"]>>;
|
|
155
|
+
lastApplied: z.ZodNullable<z.ZodString>;
|
|
156
|
+
frozenAt: z.ZodNullable<z.ZodString>;
|
|
157
|
+
}, "strip", z.ZodTypeAny, {
|
|
158
|
+
currentMode: "local" | "npm" | "auto" | null;
|
|
159
|
+
lastApplied: string | null;
|
|
160
|
+
frozenAt: string | null;
|
|
161
|
+
}, {
|
|
162
|
+
currentMode: "local" | "npm" | "auto" | null;
|
|
163
|
+
lastApplied: string | null;
|
|
164
|
+
frozenAt: string | null;
|
|
165
|
+
}>;
|
|
166
|
+
type DevlinkState = z.infer<typeof DevlinkStateSchema>;
|
|
167
|
+
declare const DevlinkBackupSchema: z.ZodObject<{
|
|
168
|
+
id: z.ZodString;
|
|
169
|
+
timestamp: z.ZodString;
|
|
170
|
+
description: z.ZodString;
|
|
171
|
+
/** List of package.json paths that were backed up */
|
|
172
|
+
files: z.ZodArray<z.ZodString, "many">;
|
|
173
|
+
/** Mode that was active before backup was created */
|
|
174
|
+
modeAtBackup: z.ZodNullable<z.ZodEnum<["local", "npm", "auto"]>>;
|
|
175
|
+
}, "strip", z.ZodTypeAny, {
|
|
176
|
+
timestamp: string;
|
|
177
|
+
id: string;
|
|
178
|
+
description: string;
|
|
179
|
+
files: string[];
|
|
180
|
+
modeAtBackup: "local" | "npm" | "auto" | null;
|
|
181
|
+
}, {
|
|
182
|
+
timestamp: string;
|
|
183
|
+
id: string;
|
|
184
|
+
description: string;
|
|
185
|
+
files: string[];
|
|
186
|
+
modeAtBackup: "local" | "npm" | "auto" | null;
|
|
187
|
+
}>;
|
|
188
|
+
type DevlinkBackup = z.infer<typeof DevlinkBackupSchema>;
|
|
189
|
+
declare const DiagnosticIssueSchema: z.ZodObject<{
|
|
190
|
+
type: z.ZodEnum<["broken-link", "cross-repo-workspace", "stale-lockfile", "stale-workspace-yaml"]>;
|
|
191
|
+
severity: z.ZodEnum<["error", "warning"]>;
|
|
192
|
+
file: z.ZodString;
|
|
193
|
+
dep: z.ZodOptional<z.ZodString>;
|
|
194
|
+
message: z.ZodString;
|
|
195
|
+
fix: z.ZodString;
|
|
196
|
+
}, "strip", z.ZodTypeAny, {
|
|
197
|
+
message: string;
|
|
198
|
+
type: "broken-link" | "cross-repo-workspace" | "stale-lockfile" | "stale-workspace-yaml";
|
|
199
|
+
severity: "error" | "warning";
|
|
200
|
+
file: string;
|
|
201
|
+
fix: string;
|
|
202
|
+
dep?: string | undefined;
|
|
203
|
+
}, {
|
|
204
|
+
message: string;
|
|
205
|
+
type: "broken-link" | "cross-repo-workspace" | "stale-lockfile" | "stale-workspace-yaml";
|
|
206
|
+
severity: "error" | "warning";
|
|
207
|
+
file: string;
|
|
208
|
+
fix: string;
|
|
209
|
+
dep?: string | undefined;
|
|
210
|
+
}>;
|
|
211
|
+
type DiagnosticIssue = z.infer<typeof DiagnosticIssueSchema>;
|
|
212
|
+
declare const DependencyModeSchema: z.ZodEnum<["local", "npm", "workspace", "mixed", "unknown"]>;
|
|
213
|
+
type DependencyMode = z.infer<typeof DependencyModeSchema>;
|
|
214
|
+
declare const DevlinkStatusSchema: z.ZodObject<{
|
|
215
|
+
currentMode: z.ZodNullable<z.ZodEnum<["local", "npm", "auto"]>>;
|
|
216
|
+
lastApplied: z.ZodNullable<z.ZodString>;
|
|
217
|
+
linkCount: z.ZodNumber;
|
|
218
|
+
npmCount: z.ZodNumber;
|
|
219
|
+
workspaceCount: z.ZodNumber;
|
|
220
|
+
discrepancies: z.ZodArray<z.ZodObject<{
|
|
221
|
+
packageJsonPath: z.ZodString;
|
|
222
|
+
depName: z.ZodString;
|
|
223
|
+
value: z.ZodString;
|
|
224
|
+
expected: z.ZodString;
|
|
225
|
+
}, "strip", z.ZodTypeAny, {
|
|
226
|
+
value: string;
|
|
227
|
+
expected: string;
|
|
228
|
+
packageJsonPath: string;
|
|
229
|
+
depName: string;
|
|
230
|
+
}, {
|
|
231
|
+
value: string;
|
|
232
|
+
expected: string;
|
|
233
|
+
packageJsonPath: string;
|
|
234
|
+
depName: string;
|
|
235
|
+
}>, "many">;
|
|
236
|
+
}, "strip", z.ZodTypeAny, {
|
|
237
|
+
currentMode: "local" | "npm" | "auto" | null;
|
|
238
|
+
lastApplied: string | null;
|
|
239
|
+
linkCount: number;
|
|
240
|
+
npmCount: number;
|
|
241
|
+
workspaceCount: number;
|
|
242
|
+
discrepancies: {
|
|
243
|
+
value: string;
|
|
244
|
+
expected: string;
|
|
245
|
+
packageJsonPath: string;
|
|
246
|
+
depName: string;
|
|
247
|
+
}[];
|
|
248
|
+
}, {
|
|
249
|
+
currentMode: "local" | "npm" | "auto" | null;
|
|
250
|
+
lastApplied: string | null;
|
|
251
|
+
linkCount: number;
|
|
252
|
+
npmCount: number;
|
|
253
|
+
workspaceCount: number;
|
|
254
|
+
discrepancies: {
|
|
255
|
+
value: string;
|
|
256
|
+
expected: string;
|
|
257
|
+
packageJsonPath: string;
|
|
258
|
+
depName: string;
|
|
259
|
+
}[];
|
|
260
|
+
}>;
|
|
261
|
+
type DevlinkStatus = z.infer<typeof DevlinkStatusSchema>;
|
|
262
|
+
|
|
263
|
+
export { type DependencyMode, DependencyModeSchema, type DevlinkBackup, DevlinkBackupSchema, type DevlinkMode, DevlinkModeSchema, type DevlinkPlan, type DevlinkPlanItem, DevlinkPlanItemSchema, DevlinkPlanSchema, type DevlinkState, DevlinkStateSchema, type DevlinkStatus, DevlinkStatusSchema, type DiagnosticIssue, DiagnosticIssueSchema, type PackageEntry, PackageEntrySchema, type PackageMap, PackageMapSchema };
|
package/dist/schema.js
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
|
|
3
|
+
// src/schema.ts
|
|
4
|
+
var DevlinkModeSchema = z.enum(["local", "npm", "auto"]);
|
|
5
|
+
var PackageEntrySchema = z.object({
|
|
6
|
+
/** npm package name e.g. @kb-labs/core-platform */
|
|
7
|
+
name: z.string(),
|
|
8
|
+
/** Relative path for link: resolution e.g. ../kb-labs-core/packages/core-platform */
|
|
9
|
+
linkPath: z.string(),
|
|
10
|
+
/** npm version e.g. ^1.0.0 */
|
|
11
|
+
npmVersion: z.string(),
|
|
12
|
+
/** Source monorepo dir name e.g. kb-labs-core */
|
|
13
|
+
monorepo: z.string(),
|
|
14
|
+
/** Whether package.json has "private": true (stays as link: in npm mode) */
|
|
15
|
+
private: z.boolean().optional()
|
|
16
|
+
});
|
|
17
|
+
var PackageMapSchema = z.record(z.string(), PackageEntrySchema);
|
|
18
|
+
var DevlinkPlanItemSchema = z.object({
|
|
19
|
+
/** Absolute path to the package.json file to modify */
|
|
20
|
+
packageJsonPath: z.string(),
|
|
21
|
+
/** Relative path to packageJsonPath from repo root (for display) */
|
|
22
|
+
packageJsonRel: z.string(),
|
|
23
|
+
/** Owner monorepo e.g. kb-labs-cli */
|
|
24
|
+
monorepo: z.string(),
|
|
25
|
+
/** The dependency package being changed e.g. @kb-labs/core-platform */
|
|
26
|
+
depName: z.string(),
|
|
27
|
+
/** Current value in package.json */
|
|
28
|
+
from: z.string(),
|
|
29
|
+
/** New value to write */
|
|
30
|
+
to: z.string(),
|
|
31
|
+
/** Section: dependencies | devDependencies | peerDependencies */
|
|
32
|
+
section: z.enum(["dependencies", "devDependencies", "peerDependencies"])
|
|
33
|
+
});
|
|
34
|
+
var DevlinkPlanSchema = z.object({
|
|
35
|
+
mode: DevlinkModeSchema,
|
|
36
|
+
items: z.array(DevlinkPlanItemSchema),
|
|
37
|
+
timestamp: z.string(),
|
|
38
|
+
/** Filtered to specific repos if --repos flag was used */
|
|
39
|
+
scopedRepos: z.array(z.string()).optional()
|
|
40
|
+
});
|
|
41
|
+
var DevlinkStateSchema = z.object({
|
|
42
|
+
currentMode: DevlinkModeSchema.nullable(),
|
|
43
|
+
lastApplied: z.string().nullable(),
|
|
44
|
+
frozenAt: z.string().nullable()
|
|
45
|
+
});
|
|
46
|
+
var DevlinkBackupSchema = z.object({
|
|
47
|
+
id: z.string(),
|
|
48
|
+
timestamp: z.string(),
|
|
49
|
+
description: z.string(),
|
|
50
|
+
/** List of package.json paths that were backed up */
|
|
51
|
+
files: z.array(z.string()),
|
|
52
|
+
/** Mode that was active before backup was created */
|
|
53
|
+
modeAtBackup: DevlinkModeSchema.nullable()
|
|
54
|
+
});
|
|
55
|
+
var DiagnosticIssueSchema = z.object({
|
|
56
|
+
type: z.enum(["broken-link", "cross-repo-workspace", "stale-lockfile", "stale-workspace-yaml"]),
|
|
57
|
+
severity: z.enum(["error", "warning"]),
|
|
58
|
+
file: z.string(),
|
|
59
|
+
dep: z.string().optional(),
|
|
60
|
+
message: z.string(),
|
|
61
|
+
fix: z.string()
|
|
62
|
+
});
|
|
63
|
+
var DependencyModeSchema = z.enum(["local", "npm", "workspace", "mixed", "unknown"]);
|
|
64
|
+
var DevlinkStatusSchema = z.object({
|
|
65
|
+
currentMode: DevlinkModeSchema.nullable(),
|
|
66
|
+
lastApplied: z.string().nullable(),
|
|
67
|
+
linkCount: z.number(),
|
|
68
|
+
npmCount: z.number(),
|
|
69
|
+
workspaceCount: z.number(),
|
|
70
|
+
discrepancies: z.array(z.object({
|
|
71
|
+
packageJsonPath: z.string(),
|
|
72
|
+
depName: z.string(),
|
|
73
|
+
value: z.string(),
|
|
74
|
+
expected: z.string()
|
|
75
|
+
}))
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
export { DependencyModeSchema, DevlinkBackupSchema, DevlinkModeSchema, DevlinkPlanItemSchema, DevlinkPlanSchema, DevlinkStateSchema, DevlinkStatusSchema, DiagnosticIssueSchema, PackageEntrySchema, PackageMapSchema };
|
|
79
|
+
//# sourceMappingURL=schema.js.map
|
|
80
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/schema.ts"],"names":[],"mappings":"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","file":"schema.js","sourcesContent":["import { z } from 'zod';\n\n// ─── Mode ────────────────────────────────────────────────────────────────────\n\nexport const DevlinkModeSchema = z.enum(['local', 'npm', 'auto']);\nexport type DevlinkMode = z.infer<typeof DevlinkModeSchema>;\n\n// ─── Package Map ──────────────────────────────────────────────────────────────\n\nexport const PackageEntrySchema = z.object({\n /** npm package name e.g. @kb-labs/core-platform */\n name: z.string(),\n /** Relative path for link: resolution e.g. ../kb-labs-core/packages/core-platform */\n linkPath: z.string(),\n /** npm version e.g. ^1.0.0 */\n npmVersion: z.string(),\n /** Source monorepo dir name e.g. kb-labs-core */\n monorepo: z.string(),\n /** Whether package.json has \"private\": true (stays as link: in npm mode) */\n private: z.boolean().optional(),\n});\nexport type PackageEntry = z.infer<typeof PackageEntrySchema>;\n\nexport const PackageMapSchema = z.record(z.string(), PackageEntrySchema);\nexport type PackageMap = z.infer<typeof PackageMapSchema>;\n\n// ─── Plan ─────────────────────────────────────────────────────────────────────\n\nexport const DevlinkPlanItemSchema = z.object({\n /** Absolute path to the package.json file to modify */\n packageJsonPath: z.string(),\n /** Relative path to packageJsonPath from repo root (for display) */\n packageJsonRel: z.string(),\n /** Owner monorepo e.g. kb-labs-cli */\n monorepo: z.string(),\n /** The dependency package being changed e.g. @kb-labs/core-platform */\n depName: z.string(),\n /** Current value in package.json */\n from: z.string(),\n /** New value to write */\n to: z.string(),\n /** Section: dependencies | devDependencies | peerDependencies */\n section: z.enum(['dependencies', 'devDependencies', 'peerDependencies']),\n});\nexport type DevlinkPlanItem = z.infer<typeof DevlinkPlanItemSchema>;\n\nexport const DevlinkPlanSchema = z.object({\n mode: DevlinkModeSchema,\n items: z.array(DevlinkPlanItemSchema),\n timestamp: z.string(),\n /** Filtered to specific repos if --repos flag was used */\n scopedRepos: z.array(z.string()).optional(),\n});\nexport type DevlinkPlan = z.infer<typeof DevlinkPlanSchema>;\n\n// ─── State ────────────────────────────────────────────────────────────────────\n\nexport const DevlinkStateSchema = z.object({\n currentMode: DevlinkModeSchema.nullable(),\n lastApplied: z.string().nullable(),\n frozenAt: z.string().nullable(),\n});\nexport type DevlinkState = z.infer<typeof DevlinkStateSchema>;\n\n// ─── Backup ───────────────────────────────────────────────────────────────────\n\nexport const DevlinkBackupSchema = z.object({\n id: z.string(),\n timestamp: z.string(),\n description: z.string(),\n /** List of package.json paths that were backed up */\n files: z.array(z.string()),\n /** Mode that was active before backup was created */\n modeAtBackup: DevlinkModeSchema.nullable(),\n});\nexport type DevlinkBackup = z.infer<typeof DevlinkBackupSchema>;\n\n// ─── Diagnostics ─────────────────────────────────────────────────────────────\n\nexport const DiagnosticIssueSchema = z.object({\n type: z.enum(['broken-link', 'cross-repo-workspace', 'stale-lockfile', 'stale-workspace-yaml']),\n severity: z.enum(['error', 'warning']),\n file: z.string(),\n dep: z.string().optional(),\n message: z.string(),\n fix: z.string(),\n});\nexport type DiagnosticIssue = z.infer<typeof DiagnosticIssueSchema>;\n\n// ─── Status ───────────────────────────────────────────────────────────────────\n\nexport const DependencyModeSchema = z.enum(['local', 'npm', 'workspace', 'mixed', 'unknown']);\nexport type DependencyMode = z.infer<typeof DependencyModeSchema>;\n\nexport const DevlinkStatusSchema = z.object({\n currentMode: DevlinkModeSchema.nullable(),\n lastApplied: z.string().nullable(),\n linkCount: z.number(),\n npmCount: z.number(),\n workspaceCount: z.number(),\n discrepancies: z.array(z.object({\n packageJsonPath: z.string(),\n depName: z.string(),\n value: z.string(),\n expected: z.string(),\n })),\n});\nexport type DevlinkStatus = z.infer<typeof DevlinkStatusSchema>;\n"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@kb-labs/devlink-contracts",
|
|
3
|
+
"version": "1.5.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"description": "Contracts package for DevLink plugin — types, Zod schemas, flags.",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"import": "./dist/index.js",
|
|
11
|
+
"types": "./dist/index.d.ts"
|
|
12
|
+
},
|
|
13
|
+
"./schema": {
|
|
14
|
+
"import": "./dist/schema.js",
|
|
15
|
+
"types": "./dist/schema.d.ts"
|
|
16
|
+
},
|
|
17
|
+
"./dist/*": "./dist/*"
|
|
18
|
+
},
|
|
19
|
+
"files": [
|
|
20
|
+
"dist",
|
|
21
|
+
"README.md"
|
|
22
|
+
],
|
|
23
|
+
"sideEffects": false,
|
|
24
|
+
"scripts": {
|
|
25
|
+
"clean": "rimraf dist",
|
|
26
|
+
"build": "tsup --config tsup.config.ts",
|
|
27
|
+
"dev": "tsup --config tsup.config.ts --watch",
|
|
28
|
+
"lint": "eslint src --ext .ts",
|
|
29
|
+
"lint:fix": "eslint src --ext .ts --fix",
|
|
30
|
+
"type-check": "tsc --noEmit",
|
|
31
|
+
"test": "vitest run --passWithNoTests",
|
|
32
|
+
"test:watch": "vitest"
|
|
33
|
+
},
|
|
34
|
+
"dependencies": {
|
|
35
|
+
"zod": "^3.23.8"
|
|
36
|
+
},
|
|
37
|
+
"devDependencies": {
|
|
38
|
+
"@kb-labs/devkit": "link:../../../../infra/kb-labs-devkit",
|
|
39
|
+
"@types/node": "^24.3.3",
|
|
40
|
+
"eslint": "^9",
|
|
41
|
+
"rimraf": "^6.0.1",
|
|
42
|
+
"tsup": "^8.5.0",
|
|
43
|
+
"typescript": "^5.6.3",
|
|
44
|
+
"vitest": "^3.2.4"
|
|
45
|
+
},
|
|
46
|
+
"engines": {
|
|
47
|
+
"node": ">=20.0.0",
|
|
48
|
+
"pnpm": ">=9.0.0"
|
|
49
|
+
}
|
|
50
|
+
}
|