@procedures/cue 0.0.0-stage → 0.2.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/CHANGELOG.md +27 -0
- package/LICENSE +21 -0
- package/README.md +71 -2
- package/dist/.tsbuildinfo +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/module.d.ts +22 -0
- package/dist/module.d.ts.map +1 -0
- package/dist/module.js +127 -0
- package/dist/module.js.map +1 -0
- package/dist/procedures/cue/add.d.ts +13 -0
- package/dist/procedures/cue/add.d.ts.map +1 -0
- package/dist/procedures/cue/add.js +63 -0
- package/dist/procedures/cue/add.js.map +1 -0
- package/dist/procedures/cue/generate.d.ts +14 -0
- package/dist/procedures/cue/generate.d.ts.map +1 -0
- package/dist/procedures/cue/generate.js +189 -0
- package/dist/procedures/cue/generate.js.map +1 -0
- package/dist/procedures/cue/index.d.ts +6 -0
- package/dist/procedures/cue/index.d.ts.map +1 -0
- package/dist/procedures/cue/index.js +6 -0
- package/dist/procedures/cue/index.js.map +1 -0
- package/dist/procedures/cue/init.d.ts +13 -0
- package/dist/procedures/cue/init.d.ts.map +1 -0
- package/dist/procedures/cue/init.js +79 -0
- package/dist/procedures/cue/init.js.map +1 -0
- package/dist/procedures/cue/remove.d.ts +13 -0
- package/dist/procedures/cue/remove.d.ts.map +1 -0
- package/dist/procedures/cue/remove.js +52 -0
- package/dist/procedures/cue/remove.js.map +1 -0
- package/dist/procedures/cue/validate.d.ts +13 -0
- package/dist/procedures/cue/validate.d.ts.map +1 -0
- package/dist/procedures/cue/validate.js +76 -0
- package/dist/procedures/cue/validate.js.map +1 -0
- package/dist/register.d.ts +7 -0
- package/dist/register.d.ts.map +1 -0
- package/dist/register.js +9 -0
- package/dist/register.js.map +1 -0
- package/dist/shared.d.ts +39 -0
- package/dist/shared.d.ts.map +1 -0
- package/dist/shared.js +148 -0
- package/dist/shared.js.map +1 -0
- package/dist/types.d.ts +80 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +81 -0
- package/dist/types.js.map +1 -0
- package/package.json +81 -3
- package/src/index.ts +18 -0
- package/src/module.ts +158 -0
- package/src/procedures/cue/add.ts +80 -0
- package/src/procedures/cue/generate.ts +245 -0
- package/src/procedures/cue/index.ts +5 -0
- package/src/procedures/cue/init.ts +98 -0
- package/src/procedures/cue/remove.ts +64 -0
- package/src/procedures/cue/validate.ts +96 -0
- package/src/register.ts +11 -0
- package/src/shared.ts +216 -0
- package/src/types.ts +181 -0
package/dist/module.js
ADDED
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Module (no side effects): the procedures of this package as data, for `createRegistry()`.
|
|
3
|
+
*
|
|
4
|
+
* Procedure Registration for cue operations
|
|
5
|
+
*
|
|
6
|
+
* Registers cue.* procedures with the client system.
|
|
7
|
+
* This file is referenced by package.json's client.procedures field.
|
|
8
|
+
*/
|
|
9
|
+
import { createProcedure, zodAdapter, defineModule, PROCEDURE_REGISTRY, registerModules } from "@procedures/client";
|
|
10
|
+
import fsModule from "@procedures/fs/module";
|
|
11
|
+
import { cueInit } from "./procedures/cue/init.js";
|
|
12
|
+
import { cueAdd } from "./procedures/cue/add.js";
|
|
13
|
+
import { cueRemove } from "./procedures/cue/remove.js";
|
|
14
|
+
import { cueGenerate } from "./procedures/cue/generate.js";
|
|
15
|
+
import { cueValidate } from "./procedures/cue/validate.js";
|
|
16
|
+
import { CueInitInputSchema, CueAddInputSchema, CueRemoveInputSchema, CueGenerateInputSchema, CueValidateInputSchema, CueInitOutputSchema, CueAddOutputSchema, CueRemoveOutputSchema, CueGenerateOutputSchema, CueValidateOutputSchema, } from "./types.js";
|
|
17
|
+
// =============================================================================
|
|
18
|
+
// Procedure Definitions
|
|
19
|
+
// =============================================================================
|
|
20
|
+
const cueInitProcedure = createProcedure()
|
|
21
|
+
.path(["cue", "init"])
|
|
22
|
+
.input(zodAdapter(CueInitInputSchema))
|
|
23
|
+
.output(zodAdapter(CueInitOutputSchema))
|
|
24
|
+
.meta({
|
|
25
|
+
description: "Initialize dependencies.json with a preset",
|
|
26
|
+
calls: ["fs.exists", "fs.read", "fs.write", "fs.mkdir"],
|
|
27
|
+
// With `force`, it overwrites dependencies.json. A second call writes the same preset again.
|
|
28
|
+
effects: { reads: ["fs"], writes: ["fs"], idempotent: true },
|
|
29
|
+
args: [],
|
|
30
|
+
shorts: { preset: "p", force: "f", cwd: "C" },
|
|
31
|
+
output: "json",
|
|
32
|
+
})
|
|
33
|
+
.handler(async (input, ctx) => {
|
|
34
|
+
return cueInit(input, ctx);
|
|
35
|
+
})
|
|
36
|
+
.build();
|
|
37
|
+
const cueAddProcedure = createProcedure()
|
|
38
|
+
.path(["cue", "add"])
|
|
39
|
+
.input(zodAdapter(CueAddInputSchema))
|
|
40
|
+
.output(zodAdapter(CueAddOutputSchema))
|
|
41
|
+
.meta({
|
|
42
|
+
description: "Add a feature to dependencies.json",
|
|
43
|
+
calls: ["fs.exists", "fs.read", "fs.write"],
|
|
44
|
+
// It writes dependencies.json again with only `$schema` and `dependencies`. Other fields go.
|
|
45
|
+
effects: { reads: ["fs"], writes: ["fs"], idempotent: true },
|
|
46
|
+
args: ["feature"],
|
|
47
|
+
shorts: { cwd: "C" },
|
|
48
|
+
output: "json",
|
|
49
|
+
})
|
|
50
|
+
.handler(async (input, ctx) => {
|
|
51
|
+
return cueAdd(input, ctx);
|
|
52
|
+
})
|
|
53
|
+
.build();
|
|
54
|
+
const cueRemoveProcedure = createProcedure()
|
|
55
|
+
.path(["cue", "remove"])
|
|
56
|
+
.input(zodAdapter(CueRemoveInputSchema))
|
|
57
|
+
.output(zodAdapter(CueRemoveOutputSchema))
|
|
58
|
+
.meta({
|
|
59
|
+
description: "Remove a feature from dependencies.json",
|
|
60
|
+
calls: ["fs.exists", "fs.read", "fs.write"],
|
|
61
|
+
effects: { reads: ["fs"], writes: ["fs"], idempotent: true },
|
|
62
|
+
args: ["feature"],
|
|
63
|
+
shorts: { cwd: "C" },
|
|
64
|
+
output: "json",
|
|
65
|
+
})
|
|
66
|
+
.handler(async (input, ctx) => {
|
|
67
|
+
return cueRemove(input, ctx);
|
|
68
|
+
})
|
|
69
|
+
.build();
|
|
70
|
+
const cueGenerateProcedure = createProcedure()
|
|
71
|
+
.path(["cue", "generate"])
|
|
72
|
+
.input(zodAdapter(CueGenerateInputSchema))
|
|
73
|
+
.output(zodAdapter(CueGenerateOutputSchema))
|
|
74
|
+
.meta({
|
|
75
|
+
description: "Generate config files from dependencies.json",
|
|
76
|
+
calls: ["fs.exists", "fs.read", "fs.write", "fs.mkdir"],
|
|
77
|
+
// The cue program evaluates the CUE files of @mark1russell7/cue, not code of the project.
|
|
78
|
+
// The procedure rewrites package.json, tsconfig.json and .gitignore.
|
|
79
|
+
effects: { reads: ["fs"], writes: ["fs"], idempotent: true },
|
|
80
|
+
args: [],
|
|
81
|
+
shorts: { cwd: "C" },
|
|
82
|
+
output: "json",
|
|
83
|
+
})
|
|
84
|
+
.handler(async (input, ctx) => {
|
|
85
|
+
return cueGenerate(input, ctx);
|
|
86
|
+
})
|
|
87
|
+
.build();
|
|
88
|
+
const cueValidateProcedure = createProcedure()
|
|
89
|
+
.path(["cue", "validate"])
|
|
90
|
+
.input(zodAdapter(CueValidateInputSchema))
|
|
91
|
+
.output(zodAdapter(CueValidateOutputSchema))
|
|
92
|
+
.meta({
|
|
93
|
+
description: "Validate dependencies.json",
|
|
94
|
+
calls: ["fs.exists", "fs.read"],
|
|
95
|
+
effects: { reads: ["fs"], writes: [] },
|
|
96
|
+
args: [],
|
|
97
|
+
shorts: { cwd: "C" },
|
|
98
|
+
output: "json",
|
|
99
|
+
})
|
|
100
|
+
.handler(async (input, ctx) => {
|
|
101
|
+
return cueValidate(input, ctx);
|
|
102
|
+
})
|
|
103
|
+
.build();
|
|
104
|
+
// =============================================================================
|
|
105
|
+
// Registration
|
|
106
|
+
// =============================================================================
|
|
107
|
+
/**
|
|
108
|
+
* The module of this package, for `createRegistry()`: its procedures as data. Importing this
|
|
109
|
+
* file registers nothing. (`register.ts` registers the same procedures in the global registry.)
|
|
110
|
+
*/
|
|
111
|
+
export const cueModule = defineModule("@procedures/cue", [
|
|
112
|
+
cueInitProcedure,
|
|
113
|
+
cueAddProcedure,
|
|
114
|
+
cueRemoveProcedure,
|
|
115
|
+
cueGenerateProcedure,
|
|
116
|
+
cueValidateProcedure,
|
|
117
|
+
], [fsModule]);
|
|
118
|
+
export default cueModule;
|
|
119
|
+
/**
|
|
120
|
+
* This function registers the procedures of @procedures/cue, and of the modules that it requires, in
|
|
121
|
+
* a registry. The default is the global registry. Importing this file registers nothing: the
|
|
122
|
+
* `./register` entry starts this function (ARCHITECTURE-PROPOSALS-2026-10, P9).
|
|
123
|
+
*/
|
|
124
|
+
export function registerCueProcedures(registry = PROCEDURE_REGISTRY) {
|
|
125
|
+
registerModules(registry, [cueModule]);
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"module.js","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,YAAY,EAAwB,kBAAkB,EAAE,eAAe,EAA0B,MAAM,oBAAoB,CAAC;AAClK,OAAO,QAAQ,MAAM,uBAAuB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EACpB,sBAAsB,EACtB,sBAAsB,EAWtB,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,EACrB,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,YAAY,CAAC;AAEpB,gFAAgF;AAChF,wBAAwB;AACxB,gFAAgF;AAEhF,MAAM,gBAAgB,GAAG,eAAe,EAAE;KACvC,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;KACrB,KAAK,CAAC,UAAU,CAAe,kBAAkB,CAAC,CAAC;KACnD,MAAM,CAAC,UAAU,CAAgB,mBAAmB,CAAC,CAAC;KACtD,IAAI,CAAC;IACJ,WAAW,EAAE,4CAA4C;IACzD,KAAK,EAAE,CAAC,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,CAAC;IACvD,6FAA6F;IAC7F,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE;IAC5D,IAAI,EAAE,EAAE;IACR,MAAM,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;IAC7C,MAAM,EAAE,MAAM;CACf,CAAC;KACD,OAAO,CAAC,KAAK,EAAE,KAAmB,EAAE,GAAG,EAA0B,EAAE;IAClE,OAAO,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AAC7B,CAAC,CAAC;KACD,KAAK,EAAE,CAAC;AAEX,MAAM,eAAe,GAAG,eAAe,EAAE;KACtC,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;KACpB,KAAK,CAAC,UAAU,CAAc,iBAAiB,CAAC,CAAC;KACjD,MAAM,CAAC,UAAU,CAAe,kBAAkB,CAAC,CAAC;KACpD,IAAI,CAAC;IACJ,WAAW,EAAE,oCAAoC;IACjD,KAAK,EAAE,CAAC,WAAW,EAAE,SAAS,EAAE,UAAU,CAAC;IAC3C,6FAA6F;IAC7F,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE;IAC5D,IAAI,EAAE,CAAC,SAAS,CAAC;IACjB,MAAM,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE;IACpB,MAAM,EAAE,MAAM;CACf,CAAC;KACD,OAAO,CAAC,KAAK,EAAE,KAAkB,EAAE,GAAG,EAAyB,EAAE;IAChE,OAAO,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AAC5B,CAAC,CAAC;KACD,KAAK,EAAE,CAAC;AAEX,MAAM,kBAAkB,GAAG,eAAe,EAAE;KACzC,IAAI,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;KACvB,KAAK,CAAC,UAAU,CAAiB,oBAAoB,CAAC,CAAC;KACvD,MAAM,CAAC,UAAU,CAAkB,qBAAqB,CAAC,CAAC;KAC1D,IAAI,CAAC;IACJ,WAAW,EAAE,yCAAyC;IACtD,KAAK,EAAE,CAAC,WAAW,EAAE,SAAS,EAAE,UAAU,CAAC;IAC3C,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE;IAC5D,IAAI,EAAE,CAAC,SAAS,CAAC;IACjB,MAAM,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE;IACpB,MAAM,EAAE,MAAM;CACf,CAAC;KACD,OAAO,CAAC,KAAK,EAAE,KAAqB,EAAE,GAAG,EAA4B,EAAE;IACtE,OAAO,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AAC/B,CAAC,CAAC;KACD,KAAK,EAAE,CAAC;AAEX,MAAM,oBAAoB,GAAG,eAAe,EAAE;KAC3C,IAAI,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;KACzB,KAAK,CAAC,UAAU,CAAmB,sBAAsB,CAAC,CAAC;KAC3D,MAAM,CAAC,UAAU,CAAoB,uBAAuB,CAAC,CAAC;KAC9D,IAAI,CAAC;IACJ,WAAW,EAAE,8CAA8C;IAC3D,KAAK,EAAE,CAAC,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,CAAC;IACvD,0FAA0F;IAC1F,qEAAqE;IACrE,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE;IAC5D,IAAI,EAAE,EAAE;IACR,MAAM,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE;IACpB,MAAM,EAAE,MAAM;CACf,CAAC;KACD,OAAO,CAAC,KAAK,EAAE,KAAuB,EAAE,GAAG,EAA8B,EAAE;IAC1E,OAAO,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACjC,CAAC,CAAC;KACD,KAAK,EAAE,CAAC;AAEX,MAAM,oBAAoB,GAAG,eAAe,EAAE;KAC3C,IAAI,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;KACzB,KAAK,CAAC,UAAU,CAAmB,sBAAsB,CAAC,CAAC;KAC3D,MAAM,CAAC,UAAU,CAAoB,uBAAuB,CAAC,CAAC;KAC9D,IAAI,CAAC;IACJ,WAAW,EAAE,4BAA4B;IACzC,KAAK,EAAE,CAAC,WAAW,EAAE,SAAS,CAAC;IAC/B,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;IACtC,IAAI,EAAE,EAAE;IACR,MAAM,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE;IACpB,MAAM,EAAE,MAAM;CACf,CAAC;KACD,OAAO,CAAC,KAAK,EAAE,KAAuB,EAAE,GAAG,EAA8B,EAAE;IAC1E,OAAO,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACjC,CAAC,CAAC;KACD,KAAK,EAAE,CAAC;AAEX,gFAAgF;AAChF,eAAe;AACf,gFAAgF;AAEhF;;;GAGG;AACH,MAAM,CAAC,MAAM,SAAS,GAAoB,YAAY,CAAC,iBAAiB,EAAE;IACtE,gBAAgB;IAChB,eAAe;IACf,kBAAkB;IAClB,oBAAoB;IACpB,oBAAoB;CACrB,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;AAEjB,eAAe,SAAS,CAAC;AAEzB;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,QAAQ,GAAsB,kBAAkB;IACpF,eAAe,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;AACzC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* cue.add procedure
|
|
3
|
+
*
|
|
4
|
+
* Add a feature to dependencies.json.
|
|
5
|
+
* Uses ctx.client.call() for file system operations (dogfooding).
|
|
6
|
+
*/
|
|
7
|
+
import type { ProcedureContext } from "@procedures/client";
|
|
8
|
+
import type { CueAddInput, CueAddOutput } from "../../types.js";
|
|
9
|
+
/**
|
|
10
|
+
* Add a feature to dependencies.json
|
|
11
|
+
*/
|
|
12
|
+
export declare function cueAdd(input: CueAddInput, ctx: ProcedureContext): Promise<CueAddOutput>;
|
|
13
|
+
//# sourceMappingURL=add.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../../src/procedures/cue/add.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAOhE;;GAEG;AACH,wBAAsB,MAAM,CAC1B,KAAK,EAAE,WAAW,EAClB,GAAG,EAAE,gBAAgB,GACpB,OAAO,CAAC,YAAY,CAAC,CA0DvB"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* cue.add procedure
|
|
3
|
+
*
|
|
4
|
+
* Add a feature to dependencies.json.
|
|
5
|
+
* Uses ctx.client.call() for file system operations (dogfooding).
|
|
6
|
+
*/
|
|
7
|
+
import { loadFeatures, loadDependencies, saveDependencies, } from "../../shared.js";
|
|
8
|
+
/**
|
|
9
|
+
* Add a feature to dependencies.json
|
|
10
|
+
*/
|
|
11
|
+
export async function cueAdd(input, ctx) {
|
|
12
|
+
const projectPath = input.cwd ?? process.cwd();
|
|
13
|
+
const feature = input.feature;
|
|
14
|
+
// Load features manifest
|
|
15
|
+
const manifest = await loadFeatures(ctx);
|
|
16
|
+
if (!manifest) {
|
|
17
|
+
return {
|
|
18
|
+
success: false,
|
|
19
|
+
feature,
|
|
20
|
+
added: false,
|
|
21
|
+
error: "Could not load features.json from @mark1russell7/cue package",
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
// Validate feature exists
|
|
25
|
+
if (!manifest.features[feature]) {
|
|
26
|
+
const available = Object.keys(manifest.features).join(", ");
|
|
27
|
+
return {
|
|
28
|
+
success: false,
|
|
29
|
+
feature,
|
|
30
|
+
added: false,
|
|
31
|
+
error: `Unknown feature: ${feature}. Available: ${available}`,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
// Load current dependencies
|
|
35
|
+
const deps = await loadDependencies(projectPath, ctx) ?? [];
|
|
36
|
+
// Check if already present
|
|
37
|
+
if (deps.includes(feature)) {
|
|
38
|
+
return {
|
|
39
|
+
success: true,
|
|
40
|
+
feature,
|
|
41
|
+
added: false,
|
|
42
|
+
message: `Feature '${feature}' is already in dependencies`,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
// Add feature and save
|
|
46
|
+
deps.push(feature);
|
|
47
|
+
const saved = await saveDependencies(deps, projectPath, ctx);
|
|
48
|
+
if (!saved) {
|
|
49
|
+
return {
|
|
50
|
+
success: false,
|
|
51
|
+
feature,
|
|
52
|
+
added: false,
|
|
53
|
+
error: "Failed to write dependencies.json",
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
return {
|
|
57
|
+
success: true,
|
|
58
|
+
feature,
|
|
59
|
+
added: true,
|
|
60
|
+
message: `Added '${feature}' to dependencies.json`,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=add.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add.js","sourceRoot":"","sources":["../../../src/procedures/cue/add.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AAEzB;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM,CAC1B,KAAkB,EAClB,GAAqB;IAErB,MAAM,WAAW,GAAG,KAAK,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAC/C,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IAE9B,yBAAyB;IACzB,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;IACzC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO;YACL,OAAO,EAAE,KAAK;YACd,OAAO;YACP,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,8DAA8D;SACtE,CAAC;IACJ,CAAC;IAED,0BAA0B;IAC1B,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAChC,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5D,OAAO;YACL,OAAO,EAAE,KAAK;YACd,OAAO;YACP,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,oBAAoB,OAAO,gBAAgB,SAAS,EAAE;SAC9D,CAAC;IACJ,CAAC;IAED,4BAA4B;IAC5B,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,WAAW,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;IAE5D,2BAA2B;IAC3B,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,OAAO;YACL,OAAO,EAAE,IAAI;YACb,OAAO;YACP,KAAK,EAAE,KAAK;YACZ,OAAO,EAAE,YAAY,OAAO,8BAA8B;SAC3D,CAAC;IACJ,CAAC;IAED,uBAAuB;IACvB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACnB,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,CAAC,CAAC;IAE7D,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO;YACL,OAAO,EAAE,KAAK;YACd,OAAO;YACP,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,mCAAmC;SAC3C,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,EAAE,IAAI;QACb,OAAO;QACP,KAAK,EAAE,IAAI;QACX,OAAO,EAAE,UAAU,OAAO,wBAAwB;KACnD,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* cue.generate procedure
|
|
3
|
+
*
|
|
4
|
+
* Generate config files (package.json, tsconfig.json, .gitignore).
|
|
5
|
+
* Uses ctx.client.call() for file system operations (dogfooding).
|
|
6
|
+
* Runs the cue program through runCommand of client-shell (async, no shell).
|
|
7
|
+
*/
|
|
8
|
+
import type { ProcedureContext } from "@procedures/client";
|
|
9
|
+
import type { CueGenerateInput, CueGenerateOutput } from "../../types.js";
|
|
10
|
+
/**
|
|
11
|
+
* Generate config files from dependencies.json
|
|
12
|
+
*/
|
|
13
|
+
export declare function cueGenerate(input: CueGenerateInput, ctx: ProcedureContext): Promise<CueGenerateOutput>;
|
|
14
|
+
//# sourceMappingURL=generate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../../src/procedures/cue/generate.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AA0I1E;;GAEG;AACH,wBAAsB,WAAW,CAC/B,KAAK,EAAE,gBAAgB,EACvB,GAAG,EAAE,gBAAgB,GACpB,OAAO,CAAC,iBAAiB,CAAC,CA0F5B"}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* cue.generate procedure
|
|
3
|
+
*
|
|
4
|
+
* Generate config files (package.json, tsconfig.json, .gitignore).
|
|
5
|
+
* Uses ctx.client.call() for file system operations (dogfooding).
|
|
6
|
+
* Runs the cue program through runCommand of client-shell (async, no shell).
|
|
7
|
+
*/
|
|
8
|
+
import { resolve } from "node:path";
|
|
9
|
+
import { loadFeatures, loadDependencies, resolveFeatures, checkCue, runCue, determineTsconfig, featureToFieldName, packageRoot, fileExists, readJson, writeJson, writeFile, mkdir, } from "../../shared.js";
|
|
10
|
+
/**
|
|
11
|
+
* Keys that describe a package's own entry points. The package owns them: a generated value
|
|
12
|
+
* is only a default for a package that has none. (BUGS-2026-07 H33: generate replaced a
|
|
13
|
+
* multi-entry "exports" with the generated "." entry, and dropped bin and sideEffects.)
|
|
14
|
+
* Policy keys, for example "engines", still come from the generator.
|
|
15
|
+
*/
|
|
16
|
+
const PACKAGE_OWNED_KEYS = new Set(["exports", "main", "types", "bin", "sideEffects"]);
|
|
17
|
+
/**
|
|
18
|
+
* Generate package.json via CUE evaluation
|
|
19
|
+
*/
|
|
20
|
+
async function generatePackageJson(resolvedFeatures, existingPkg, ctx) {
|
|
21
|
+
const configDir = resolve(packageRoot, "npm/package");
|
|
22
|
+
// Build list of CUE files to evaluate
|
|
23
|
+
const files = ["base.cue"];
|
|
24
|
+
for (const feature of resolvedFeatures) {
|
|
25
|
+
const fieldName = featureToFieldName(feature);
|
|
26
|
+
const cuePath = resolve(configDir, `${fieldName}.cue`);
|
|
27
|
+
if (await fileExists(cuePath, ctx)) {
|
|
28
|
+
files.push(`${fieldName}.cue`);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
// Run cue eval
|
|
32
|
+
const result = await runCue(["eval", ...files, "-e", "output", "--out", "json"], { cwd: configDir, signal: ctx.signal });
|
|
33
|
+
if (!result.success) {
|
|
34
|
+
throw new Error(`cue eval failed for package.json: ${(result.stderr || result.stdout || "").trim()}`);
|
|
35
|
+
}
|
|
36
|
+
const generated = JSON.parse(result.stdout);
|
|
37
|
+
// Merge with existing package.json
|
|
38
|
+
const pkg = { ...existingPkg };
|
|
39
|
+
for (const [key, value] of Object.entries(generated)) {
|
|
40
|
+
if (key === "name" || key === "version" || key === "description") {
|
|
41
|
+
if (!pkg[key])
|
|
42
|
+
pkg[key] = value;
|
|
43
|
+
}
|
|
44
|
+
else if (key === "devDependencies" || key === "peerDependencies" || key === "scripts") {
|
|
45
|
+
pkg[key] = { ...value, ...(pkg[key] ?? {}) };
|
|
46
|
+
}
|
|
47
|
+
else if (key === "files" && Array.isArray(value) && Array.isArray(pkg[key])) {
|
|
48
|
+
const merged = [...value];
|
|
49
|
+
for (const item of pkg[key]) {
|
|
50
|
+
if (!merged.includes(item))
|
|
51
|
+
merged.push(item);
|
|
52
|
+
}
|
|
53
|
+
pkg[key] = merged;
|
|
54
|
+
}
|
|
55
|
+
else if (PACKAGE_OWNED_KEYS.has(key)) {
|
|
56
|
+
if (pkg[key] === undefined)
|
|
57
|
+
pkg[key] = value;
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
pkg[key] = value;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
// Ensure $schema is first
|
|
64
|
+
const ordered = { $schema: "https://json.schemastore.org/package" };
|
|
65
|
+
for (const [key, value] of Object.entries(pkg)) {
|
|
66
|
+
if (key !== "$schema")
|
|
67
|
+
ordered[key] = value;
|
|
68
|
+
}
|
|
69
|
+
return ordered;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Generate .gitignore via CUE evaluation
|
|
73
|
+
*/
|
|
74
|
+
async function generateGitignore(resolvedFeatures, ctx) {
|
|
75
|
+
const configDir = resolve(packageRoot, "git/ignore");
|
|
76
|
+
const files = ["base.cue"];
|
|
77
|
+
for (const feature of resolvedFeatures) {
|
|
78
|
+
const cuePath = resolve(configDir, `${feature}.cue`);
|
|
79
|
+
if (await fileExists(cuePath, ctx)) {
|
|
80
|
+
files.push(`${feature}.cue`);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
const result = await runCue(["eval", ...files, "-e", "patterns", "--out", "json"], { cwd: configDir, signal: ctx.signal });
|
|
84
|
+
if (!result.success) {
|
|
85
|
+
throw new Error(`cue eval failed for .gitignore: ${(result.stderr || result.stdout || "").trim()}`);
|
|
86
|
+
}
|
|
87
|
+
const patterns = JSON.parse(result.stdout);
|
|
88
|
+
return patterns.join("\n") + "\n";
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Setup cue.mod directory
|
|
92
|
+
*/
|
|
93
|
+
async function setupCueMod(projectPath, ctx) {
|
|
94
|
+
const cueModPath = resolve(projectPath, "cue.mod");
|
|
95
|
+
if (!(await fileExists(cueModPath, ctx))) {
|
|
96
|
+
await mkdir(cueModPath, ctx);
|
|
97
|
+
}
|
|
98
|
+
await writeFile(resolve(cueModPath, "module.cue"), `module: "project.local"
|
|
99
|
+
language: {
|
|
100
|
+
\tversion: "v0.15.1"
|
|
101
|
+
}
|
|
102
|
+
`, ctx);
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Generate config files from dependencies.json
|
|
106
|
+
*/
|
|
107
|
+
export async function cueGenerate(input, ctx) {
|
|
108
|
+
const projectPath = input.cwd ?? process.cwd();
|
|
109
|
+
const generated = [];
|
|
110
|
+
// Check CUE is installed
|
|
111
|
+
if (!(await checkCue(ctx.signal))) {
|
|
112
|
+
return {
|
|
113
|
+
success: false,
|
|
114
|
+
resolvedFeatures: [],
|
|
115
|
+
generated: [],
|
|
116
|
+
error: "CUE is not installed. Install from: https://cuelang.org/docs/install/",
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
// Load features manifest
|
|
120
|
+
const manifest = await loadFeatures(ctx);
|
|
121
|
+
if (!manifest) {
|
|
122
|
+
return {
|
|
123
|
+
success: false,
|
|
124
|
+
resolvedFeatures: [],
|
|
125
|
+
generated: [],
|
|
126
|
+
error: "Could not load features.json from @mark1russell7/cue package",
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
// Load dependencies
|
|
130
|
+
const deps = await loadDependencies(projectPath, ctx);
|
|
131
|
+
if (!deps) {
|
|
132
|
+
return {
|
|
133
|
+
success: false,
|
|
134
|
+
resolvedFeatures: [],
|
|
135
|
+
generated: [],
|
|
136
|
+
error: "No dependencies.json found. Run cue.init first.",
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
// Resolve transitive dependencies
|
|
140
|
+
const resolvedFeatures = resolveFeatures(deps, manifest);
|
|
141
|
+
// Load existing package.json
|
|
142
|
+
const existingPkg = await readJson(resolve(projectPath, "package.json"), ctx);
|
|
143
|
+
// A failed cue eval is an error of the whole call, not a silently skipped file
|
|
144
|
+
// (BUGS-2026-07 M36: the procedure reported success with nothing generated).
|
|
145
|
+
try {
|
|
146
|
+
// Generate package.json
|
|
147
|
+
const packageJson = await generatePackageJson(resolvedFeatures, existingPkg, ctx);
|
|
148
|
+
if (packageJson) {
|
|
149
|
+
await writeJson(resolve(projectPath, "package.json"), packageJson, ctx);
|
|
150
|
+
generated.push("package.json");
|
|
151
|
+
}
|
|
152
|
+
// Generate tsconfig.json if ts feature is present
|
|
153
|
+
if (resolvedFeatures.includes("ts")) {
|
|
154
|
+
const tsconfigName = determineTsconfig(resolvedFeatures);
|
|
155
|
+
const tsconfig = {
|
|
156
|
+
$schema: "https://json.schemastore.org/tsconfig",
|
|
157
|
+
extends: `@mark1russell7/cue/ts/config/${tsconfigName}.json`,
|
|
158
|
+
};
|
|
159
|
+
await writeJson(resolve(projectPath, "tsconfig.json"), tsconfig, ctx);
|
|
160
|
+
generated.push("tsconfig.json");
|
|
161
|
+
}
|
|
162
|
+
// Generate .gitignore
|
|
163
|
+
const gitignoreContent = await generateGitignore(resolvedFeatures, ctx);
|
|
164
|
+
if (gitignoreContent) {
|
|
165
|
+
await writeFile(resolve(projectPath, ".gitignore"), gitignoreContent, ctx);
|
|
166
|
+
generated.push(".gitignore");
|
|
167
|
+
}
|
|
168
|
+
// Setup cue.mod if cue feature is present
|
|
169
|
+
if (resolvedFeatures.includes("cue")) {
|
|
170
|
+
await setupCueMod(projectPath, ctx);
|
|
171
|
+
generated.push("cue.mod/");
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
catch (error) {
|
|
175
|
+
return {
|
|
176
|
+
success: false,
|
|
177
|
+
resolvedFeatures,
|
|
178
|
+
generated,
|
|
179
|
+
error: error instanceof Error ? error.message : String(error),
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
return {
|
|
183
|
+
success: true,
|
|
184
|
+
resolvedFeatures,
|
|
185
|
+
generated,
|
|
186
|
+
message: `Generated ${generated.length} files`,
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
//# sourceMappingURL=generate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/procedures/cue/generate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/procedures/cue/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/procedures/cue/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* cue.init procedure
|
|
3
|
+
*
|
|
4
|
+
* Initialize dependencies.json with a preset.
|
|
5
|
+
* Uses ctx.client.call() for file system operations (dogfooding).
|
|
6
|
+
*/
|
|
7
|
+
import type { ProcedureContext } from "@procedures/client";
|
|
8
|
+
import type { CueInitInput, CueInitOutput } from "../../types.js";
|
|
9
|
+
/**
|
|
10
|
+
* Initialize a project with dependencies.json
|
|
11
|
+
*/
|
|
12
|
+
export declare function cueInit(input: CueInitInput, ctx: ProcedureContext): Promise<CueInitOutput>;
|
|
13
|
+
//# sourceMappingURL=init.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/procedures/cue/init.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AASlE;;GAEG;AACH,wBAAsB,OAAO,CAC3B,KAAK,EAAE,YAAY,EACnB,GAAG,EAAE,gBAAgB,GACpB,OAAO,CAAC,aAAa,CAAC,CAyExB"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* cue.init procedure
|
|
3
|
+
*
|
|
4
|
+
* Initialize dependencies.json with a preset.
|
|
5
|
+
* Uses ctx.client.call() for file system operations (dogfooding).
|
|
6
|
+
*/
|
|
7
|
+
import { resolve } from "node:path";
|
|
8
|
+
import { loadFeatures, saveDependencies, fileExists, mkdir, writeFile, } from "../../shared.js";
|
|
9
|
+
/**
|
|
10
|
+
* Initialize a project with dependencies.json
|
|
11
|
+
*/
|
|
12
|
+
export async function cueInit(input, ctx) {
|
|
13
|
+
const projectPath = input.cwd ?? process.cwd();
|
|
14
|
+
const presetName = input.preset ?? "lib";
|
|
15
|
+
const created = [];
|
|
16
|
+
// Load features manifest
|
|
17
|
+
const manifest = await loadFeatures(ctx);
|
|
18
|
+
if (!manifest) {
|
|
19
|
+
return {
|
|
20
|
+
success: false,
|
|
21
|
+
preset: presetName,
|
|
22
|
+
created: [],
|
|
23
|
+
error: "Could not load features.json from @mark1russell7/cue package",
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
// Validate preset
|
|
27
|
+
const preset = manifest.presets[presetName];
|
|
28
|
+
if (!preset) {
|
|
29
|
+
const available = Object.keys(manifest.presets).join(", ");
|
|
30
|
+
return {
|
|
31
|
+
success: false,
|
|
32
|
+
preset: presetName,
|
|
33
|
+
created: [],
|
|
34
|
+
error: `Unknown preset: ${presetName}. Available: ${available}`,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
// Check if dependencies.json exists
|
|
38
|
+
const depsPath = resolve(projectPath, "dependencies.json");
|
|
39
|
+
if (await fileExists(depsPath, ctx)) {
|
|
40
|
+
if (!input.force) {
|
|
41
|
+
return {
|
|
42
|
+
success: true,
|
|
43
|
+
preset: presetName,
|
|
44
|
+
created: [],
|
|
45
|
+
message: "dependencies.json already exists (use force: true to overwrite)",
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
// Create dependencies.json
|
|
50
|
+
const saved = await saveDependencies(preset, projectPath, ctx);
|
|
51
|
+
if (!saved) {
|
|
52
|
+
return {
|
|
53
|
+
success: false,
|
|
54
|
+
preset: presetName,
|
|
55
|
+
created: [],
|
|
56
|
+
error: "Failed to write dependencies.json",
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
created.push("dependencies.json");
|
|
60
|
+
// Create src directory if needed
|
|
61
|
+
const srcPath = resolve(projectPath, "src");
|
|
62
|
+
if (!(await fileExists(srcPath, ctx))) {
|
|
63
|
+
await mkdir(srcPath, ctx);
|
|
64
|
+
created.push("src/");
|
|
65
|
+
}
|
|
66
|
+
// Create src/index.ts if needed
|
|
67
|
+
const indexPath = resolve(projectPath, "src", "index.ts");
|
|
68
|
+
if (!(await fileExists(indexPath, ctx))) {
|
|
69
|
+
await writeFile(indexPath, "// Entry point\nexport {};\n", ctx);
|
|
70
|
+
created.push("src/index.ts");
|
|
71
|
+
}
|
|
72
|
+
return {
|
|
73
|
+
success: true,
|
|
74
|
+
preset: presetName,
|
|
75
|
+
created,
|
|
76
|
+
message: `Initialized with preset '${presetName}'. Run cue.generate to create config files.`,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/procedures/cue/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* cue.remove procedure
|
|
3
|
+
*
|
|
4
|
+
* Remove a feature from dependencies.json.
|
|
5
|
+
* Uses ctx.client.call() for file system operations (dogfooding).
|
|
6
|
+
*/
|
|
7
|
+
import type { ProcedureContext } from "@procedures/client";
|
|
8
|
+
import type { CueRemoveInput, CueRemoveOutput } from "../../types.js";
|
|
9
|
+
/**
|
|
10
|
+
* Remove a feature from dependencies.json
|
|
11
|
+
*/
|
|
12
|
+
export declare function cueRemove(input: CueRemoveInput, ctx: ProcedureContext): Promise<CueRemoveOutput>;
|
|
13
|
+
//# sourceMappingURL=remove.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remove.d.ts","sourceRoot":"","sources":["../../../src/procedures/cue/remove.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGtE;;GAEG;AACH,wBAAsB,SAAS,CAC7B,KAAK,EAAE,cAAc,EACrB,GAAG,EAAE,gBAAgB,GACpB,OAAO,CAAC,eAAe,CAAC,CA8C1B"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* cue.remove procedure
|
|
3
|
+
*
|
|
4
|
+
* Remove a feature from dependencies.json.
|
|
5
|
+
* Uses ctx.client.call() for file system operations (dogfooding).
|
|
6
|
+
*/
|
|
7
|
+
import { loadDependencies, saveDependencies } from "../../shared.js";
|
|
8
|
+
/**
|
|
9
|
+
* Remove a feature from dependencies.json
|
|
10
|
+
*/
|
|
11
|
+
export async function cueRemove(input, ctx) {
|
|
12
|
+
const projectPath = input.cwd ?? process.cwd();
|
|
13
|
+
const feature = input.feature;
|
|
14
|
+
// Load current dependencies
|
|
15
|
+
const deps = await loadDependencies(projectPath, ctx);
|
|
16
|
+
if (!deps) {
|
|
17
|
+
return {
|
|
18
|
+
success: false,
|
|
19
|
+
feature,
|
|
20
|
+
removed: false,
|
|
21
|
+
error: "No dependencies.json found. Run cue.init first.",
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
// Check if feature is present
|
|
25
|
+
const idx = deps.indexOf(feature);
|
|
26
|
+
if (idx === -1) {
|
|
27
|
+
return {
|
|
28
|
+
success: true,
|
|
29
|
+
feature,
|
|
30
|
+
removed: false,
|
|
31
|
+
message: `Feature '${feature}' is not in dependencies`,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
// Remove feature and save
|
|
35
|
+
deps.splice(idx, 1);
|
|
36
|
+
const saved = await saveDependencies(deps, projectPath, ctx);
|
|
37
|
+
if (!saved) {
|
|
38
|
+
return {
|
|
39
|
+
success: false,
|
|
40
|
+
feature,
|
|
41
|
+
removed: false,
|
|
42
|
+
error: "Failed to write dependencies.json",
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
return {
|
|
46
|
+
success: true,
|
|
47
|
+
feature,
|
|
48
|
+
removed: true,
|
|
49
|
+
message: `Removed '${feature}' from dependencies.json`,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=remove.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remove.js","sourceRoot":"","sources":["../../../src/procedures/cue/remove.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAErE;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,KAAqB,EACrB,GAAqB;IAErB,MAAM,WAAW,GAAG,KAAK,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAC/C,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IAE9B,4BAA4B;IAC5B,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;IAEtD,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO;YACL,OAAO,EAAE,KAAK;YACd,OAAO;YACP,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,iDAAiD;SACzD,CAAC;IACJ,CAAC;IAED,8BAA8B;IAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAClC,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,IAAI;YACb,OAAO;YACP,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,YAAY,OAAO,0BAA0B;SACvD,CAAC;IACJ,CAAC;IAED,0BAA0B;IAC1B,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IACpB,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,CAAC,CAAC;IAE7D,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO;YACL,OAAO,EAAE,KAAK;YACd,OAAO;YACP,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,mCAAmC;SAC3C,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,EAAE,IAAI;QACb,OAAO;QACP,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,YAAY,OAAO,0BAA0B;KACvD,CAAC;AACJ,CAAC"}
|