@procedures/client 0.3.0 → 0.4.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 +29 -0
- package/README.md +16 -6
- package/dist/.tsbuildinfo +1 -1
- package/dist/adapters/http/server/transport.d.ts.map +1 -1
- package/dist/adapters/http/server/transport.js +2 -3
- package/dist/adapters/http/server/transport.js.map +1 -1
- package/dist/adapters/local/client/transport.d.ts.map +1 -1
- package/dist/adapters/local/client/transport.js +4 -2
- package/dist/adapters/local/client/transport.js.map +1 -1
- package/dist/adapters/websocket/client/node.d.ts +30 -0
- package/dist/adapters/websocket/client/node.d.ts.map +1 -0
- package/dist/adapters/websocket/client/node.js +32 -0
- package/dist/adapters/websocket/client/node.js.map +1 -0
- package/dist/adapters/websocket/client/transport.d.ts.map +1 -1
- package/dist/adapters/websocket/client/transport.js +17 -9
- package/dist/adapters/websocket/client/transport.js.map +1 -1
- package/dist/adapters/websocket/client/types.d.ts +3 -2
- package/dist/adapters/websocket/client/types.d.ts.map +1 -1
- package/dist/adapters/websocket/client/types.js.map +1 -1
- package/dist/client/errors/http-errors.d.ts.map +1 -1
- package/dist/client/errors/http-errors.js +6 -0
- package/dist/client/errors/http-errors.js.map +1 -1
- package/dist/client/errors/index.d.ts +1 -1
- package/dist/client/errors/index.js +1 -1
- package/dist/client/errors/registry.d.ts +2 -1
- package/dist/client/errors/registry.d.ts.map +1 -1
- package/dist/client/errors/registry.js +72 -22
- package/dist/client/errors/registry.js.map +1 -1
- package/dist/client/middleware/rate-limit.d.ts.map +1 -1
- package/dist/client/middleware/rate-limit.js +0 -1
- package/dist/client/middleware/rate-limit.js.map +1 -1
- package/dist/client/middleware/timeout.d.ts.map +1 -1
- package/dist/client/middleware/timeout.js +2 -9
- package/dist/client/middleware/timeout.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/node.d.ts +11 -0
- package/dist/node.d.ts.map +1 -0
- package/dist/node.js +10 -0
- package/dist/node.js.map +1 -0
- package/dist/procedures/core/array.d.ts +1 -1
- package/dist/procedures/core/array.d.ts.map +1 -1
- package/dist/procedures/core/array.js +56 -15
- package/dist/procedures/core/array.js.map +1 -1
- package/dist/procedures/core/index.d.ts.map +1 -1
- package/dist/procedures/core/index.js +9 -2
- package/dist/procedures/core/index.js.map +1 -1
- package/dist/procedures/core/logic.js +1 -1
- package/dist/procedures/core/logic.js.map +1 -1
- package/dist/procedures/core/math.d.ts.map +1 -1
- package/dist/procedures/core/math.js +5 -1
- package/dist/procedures/core/math.js.map +1 -1
- package/dist/procedures/core/meta.d.ts.map +1 -1
- package/dist/procedures/core/meta.js +41 -7
- package/dist/procedures/core/meta.js.map +1 -1
- package/dist/procedures/core/type.d.ts.map +1 -1
- package/dist/procedures/core/type.js +4 -2
- package/dist/procedures/core/type.js.map +1 -1
- package/dist/procedures/discovery.d.ts +4 -6
- package/dist/procedures/discovery.d.ts.map +1 -1
- package/dist/procedures/discovery.js +4 -6
- package/dist/procedures/discovery.js.map +1 -1
- package/dist/procedures/ref.d.ts +4 -2
- package/dist/procedures/ref.d.ts.map +1 -1
- package/dist/procedures/ref.js +2 -1
- package/dist/procedures/ref.js.map +1 -1
- package/dist/protocol.d.ts +9 -2
- package/dist/protocol.d.ts.map +1 -1
- package/dist/protocol.js +12 -2
- package/dist/protocol.js.map +1 -1
- package/dist/server/procedure-server.d.ts +2 -1
- package/dist/server/procedure-server.d.ts.map +1 -1
- package/dist/server/procedure-server.js +4 -2
- package/dist/server/procedure-server.js.map +1 -1
- package/package.json +5 -4
- package/src/adapters/http/server/transport.ts +2 -3
- package/src/adapters/local/client/transport.ts +4 -2
- package/src/adapters/websocket/client/node.ts +34 -0
- package/src/adapters/websocket/client/transport.ts +20 -9
- package/src/adapters/websocket/client/types.ts +3 -2
- package/src/client/errors/README.md +2 -0
- package/src/client/errors/http-errors.ts +5 -0
- package/src/client/errors/index.ts +1 -1
- package/src/client/errors/registry.ts +79 -22
- package/src/client/middleware/rate-limit.ts +0 -2
- package/src/client/middleware/timeout.ts +2 -9
- package/src/index.ts +4 -0
- package/src/node.ts +11 -0
- package/src/procedures/core/array.ts +53 -16
- package/src/procedures/core/index.ts +9 -2
- package/src/procedures/core/logic.ts +1 -1
- package/src/procedures/core/math.ts +5 -1
- package/src/procedures/core/meta.ts +43 -7
- package/src/procedures/core/type.ts +4 -2
- package/src/procedures/discovery.ts +4 -6
- package/src/procedures/ref.ts +4 -2
- package/src/protocol.ts +13 -2
- package/src/server/procedure-server.ts +4 -2
- package/dist/procedures/cli/announce.d.ts +0 -67
- package/dist/procedures/cli/announce.d.ts.map +0 -1
- package/dist/procedures/cli/announce.js +0 -392
- package/dist/procedures/cli/announce.js.map +0 -1
- package/dist/procedures/cli/discover.d.ts +0 -66
- package/dist/procedures/cli/discover.d.ts.map +0 -1
- package/dist/procedures/cli/discover.js +0 -310
- package/dist/procedures/cli/discover.js.map +0 -1
- package/dist/procedures/cli/index.d.ts +0 -13
- package/dist/procedures/cli/index.d.ts.map +0 -1
- package/dist/procedures/cli/index.js +0 -203
- package/dist/procedures/cli/index.js.map +0 -1
- package/dist/procedures/cli/init.d.ts +0 -17
- package/dist/procedures/cli/init.d.ts.map +0 -1
- package/dist/procedures/cli/init.js +0 -336
- package/dist/procedures/cli/init.js.map +0 -1
- package/src/procedures/cli/announce.ts +0 -470
- package/src/procedures/cli/discover.ts +0 -390
- package/src/procedures/cli/index.ts +0 -231
- package/src/procedures/cli/init.ts +0 -370
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"discover.d.ts","sourceRoot":"","sources":["../../../src/procedures/cli/discover.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAWH,MAAM,WAAW,eAAe;IAC9B,uBAAuB;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,kCAAkC;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,iCAAiC;IACjC,KAAK,EAAE,OAAO,CAAC;IACf,sDAAsD;IACtD,KAAK,EAAE,OAAO,CAAC;IACf,sBAAsB;IACtB,OAAO,EAAE,OAAO,CAAC;CAClB;AAYD,0CAA0C;AAC1C,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,2DAA2D;IAC3D,UAAU,EAAE,MAAM,CAAC;CACpB;AAUD;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,CAyBjH;AAMD;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAqF9B;AAMD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,iBAAiB,EAAE,GAAG,MAAM,CAiClE;AAmDD;;GAEG;AACH,wBAAsB,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CA2FtE"}
|
|
@@ -1,310 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Procedure Discovery
|
|
3
|
-
*
|
|
4
|
-
* Generates a TypeScript file with static imports for all discovered procedures.
|
|
5
|
-
*
|
|
6
|
-
* Fast path: Reads from .client-registry.json (populated by `client-registry announce`)
|
|
7
|
-
* Fallback: Scans node_modules for packages with `client.procedures`
|
|
8
|
-
*
|
|
9
|
-
* This is compile-time discovery - the generated file contains static imports
|
|
10
|
-
* that get compiled/bundled with your application.
|
|
11
|
-
*/
|
|
12
|
-
import * as fs from "node:fs/promises";
|
|
13
|
-
import * as path from "node:path";
|
|
14
|
-
import { watch } from "node:fs";
|
|
15
|
-
import { getRegistry, REGISTRY_FILENAME } from "./announce.js";
|
|
16
|
-
/** The string targets of an exports value: a string, an array, or the leaves of conditions. */
|
|
17
|
-
function exportTargets(value) {
|
|
18
|
-
if (typeof value === "string")
|
|
19
|
-
return [value];
|
|
20
|
-
if (Array.isArray(value))
|
|
21
|
-
return value.flatMap(exportTargets);
|
|
22
|
-
if (value && typeof value === "object")
|
|
23
|
-
return Object.values(value).flatMap(exportTargets);
|
|
24
|
-
return [];
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* The specifier that imports the procedures file of a package. With an `exports` map, a bare
|
|
28
|
-
* `pkg/dist/register.js` import fails unless the map exports that path: the function looks for
|
|
29
|
-
* the subpath (also a `./*` pattern) whose target is the file: for the packages of this
|
|
30
|
-
* repository, `./register`. When the map has none, it imports the package root. (Before, the
|
|
31
|
-
* generated import ignored the map, and failed: deep dive CORE-17.)
|
|
32
|
-
*
|
|
33
|
-
* @param name - Package name
|
|
34
|
-
* @param manifest - The package.json of the package
|
|
35
|
-
* @param proceduresPath - The `client.procedures` field
|
|
36
|
-
* @returns The module specifier for the generated import
|
|
37
|
-
*/
|
|
38
|
-
export function procedureImportPath(name, manifest, proceduresPath) {
|
|
39
|
-
const file = "./" + proceduresPath.replace(/^\.\//, "");
|
|
40
|
-
if (manifest.exports === undefined) {
|
|
41
|
-
return `${name}/${file.slice(2)}`;
|
|
42
|
-
}
|
|
43
|
-
const exportsMap = typeof manifest.exports === "string" || Array.isArray(manifest.exports) ||
|
|
44
|
-
!Object.keys(manifest.exports).some((key) => key.startsWith("."))
|
|
45
|
-
? { ".": manifest.exports }
|
|
46
|
-
: manifest.exports;
|
|
47
|
-
for (const [subpath, value] of Object.entries(exportsMap)) {
|
|
48
|
-
for (const target of exportTargets(value)) {
|
|
49
|
-
if (!subpath.includes("*")) {
|
|
50
|
-
if (target === file)
|
|
51
|
-
return subpath === "." ? name : `${name}/${subpath.slice(2)}`;
|
|
52
|
-
continue;
|
|
53
|
-
}
|
|
54
|
-
// A pattern: "./*" -> "./dist/*.js"
|
|
55
|
-
const [before, after] = target.split("*");
|
|
56
|
-
if (after === undefined || !file.startsWith(before) || !file.endsWith(after))
|
|
57
|
-
continue;
|
|
58
|
-
const star = file.slice(before.length, file.length - after.length);
|
|
59
|
-
return `${name}/${subpath.replace("*", star).slice(2)}`;
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
return name;
|
|
63
|
-
}
|
|
64
|
-
// =============================================================================
|
|
65
|
-
// Discovery
|
|
66
|
-
// =============================================================================
|
|
67
|
-
/**
|
|
68
|
-
* Discover packages with procedure declarations: the dependencies of the root package and
|
|
69
|
-
* their dependencies, in `node_modules`.
|
|
70
|
-
*
|
|
71
|
-
* @param rootDir - The folder of the root package.json
|
|
72
|
-
* @param verbose - Log each package
|
|
73
|
-
* @returns The packages that declare procedures, sorted by name
|
|
74
|
-
*/
|
|
75
|
-
export async function discoverPackages(rootDir, verbose) {
|
|
76
|
-
const discovered = [];
|
|
77
|
-
const scanned = new Set();
|
|
78
|
-
// Read root package.json
|
|
79
|
-
const rootPkgPath = path.join(rootDir, "package.json");
|
|
80
|
-
let rootPkg;
|
|
81
|
-
try {
|
|
82
|
-
const content = await fs.readFile(rootPkgPath, "utf-8");
|
|
83
|
-
rootPkg = JSON.parse(content);
|
|
84
|
-
}
|
|
85
|
-
catch {
|
|
86
|
-
throw new Error(`Could not read package.json at ${rootPkgPath}`);
|
|
87
|
-
}
|
|
88
|
-
// Get all dependencies to scan
|
|
89
|
-
const depsToScan = [
|
|
90
|
-
...Object.keys(rootPkg.dependencies ?? {}),
|
|
91
|
-
...Object.keys(rootPkg.devDependencies ?? {}),
|
|
92
|
-
];
|
|
93
|
-
if (verbose) {
|
|
94
|
-
console.log(`Scanning ${depsToScan.length} dependencies...`);
|
|
95
|
-
}
|
|
96
|
-
// Scan each dependency
|
|
97
|
-
async function scanPackage(packageName, nodeModulesPath) {
|
|
98
|
-
if (scanned.has(packageName))
|
|
99
|
-
return;
|
|
100
|
-
const pkgDir = path.join(nodeModulesPath, packageName);
|
|
101
|
-
const pkgJsonPath = path.join(pkgDir, "package.json");
|
|
102
|
-
let pkg;
|
|
103
|
-
try {
|
|
104
|
-
const content = await fs.readFile(pkgJsonPath, "utf-8");
|
|
105
|
-
pkg = JSON.parse(content);
|
|
106
|
-
}
|
|
107
|
-
catch {
|
|
108
|
-
// Package doesn't exist at this path (might be hoisted differently). It is not scanned
|
|
109
|
-
// yet: the next location can have it. (Before, the name was marked as scanned before
|
|
110
|
-
// the read, so a hoisted transitive package was skipped: deep dive CORE-17.)
|
|
111
|
-
return;
|
|
112
|
-
}
|
|
113
|
-
scanned.add(packageName);
|
|
114
|
-
// Check if this package declares procedures
|
|
115
|
-
if (pkg.client?.procedures) {
|
|
116
|
-
const proceduresPath = pkg.client.procedures;
|
|
117
|
-
// Verify the file exists
|
|
118
|
-
const fullPath = path.join(pkgDir, proceduresPath);
|
|
119
|
-
try {
|
|
120
|
-
await fs.access(fullPath);
|
|
121
|
-
discovered.push({
|
|
122
|
-
name: packageName,
|
|
123
|
-
proceduresPath,
|
|
124
|
-
importPath: procedureImportPath(packageName, pkg, proceduresPath),
|
|
125
|
-
});
|
|
126
|
-
if (verbose) {
|
|
127
|
-
console.log(` Found: ${packageName} -> ${proceduresPath}`);
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
catch {
|
|
131
|
-
console.warn(` Warning: ${packageName} declares procedures at ${proceduresPath} but file not found`);
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
// Recursively scan this package's dependencies
|
|
135
|
-
const subDeps = Object.keys(pkg.dependencies ?? {});
|
|
136
|
-
for (const subDep of subDeps) {
|
|
137
|
-
// Try local node_modules first, then parent
|
|
138
|
-
await scanPackage(subDep, path.join(pkgDir, "node_modules"));
|
|
139
|
-
await scanPackage(subDep, nodeModulesPath);
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
// Scan all dependencies
|
|
143
|
-
const nodeModulesPath = path.join(rootDir, "node_modules");
|
|
144
|
-
for (const dep of depsToScan) {
|
|
145
|
-
await scanPackage(dep, nodeModulesPath);
|
|
146
|
-
}
|
|
147
|
-
// Sort for deterministic output
|
|
148
|
-
discovered.sort((a, b) => a.name.localeCompare(b.name));
|
|
149
|
-
return discovered;
|
|
150
|
-
}
|
|
151
|
-
// =============================================================================
|
|
152
|
-
// Code Generation
|
|
153
|
-
// =============================================================================
|
|
154
|
-
/**
|
|
155
|
-
* Generate the TypeScript file content.
|
|
156
|
-
*
|
|
157
|
-
* @param packages - The discovered packages
|
|
158
|
-
* @returns The file content: one side-effect import for each package
|
|
159
|
-
*/
|
|
160
|
-
export function generateCode(packages) {
|
|
161
|
-
const timestamp = new Date().toISOString();
|
|
162
|
-
const imports = packages
|
|
163
|
-
.map((p) => `import "${p.importPath}";`)
|
|
164
|
-
.join("\n");
|
|
165
|
-
const packageList = packages.map((p) => ` "${p.name}",`).join("\n");
|
|
166
|
-
return `/**
|
|
167
|
-
* Auto-generated procedure imports
|
|
168
|
-
*
|
|
169
|
-
* DO NOT EDIT - This file is generated by \`npx client-registry discover\`
|
|
170
|
-
* Generated at: ${timestamp}
|
|
171
|
-
*
|
|
172
|
-
* Import this file at your app's entry point to register all procedures
|
|
173
|
-
* from your dependencies.
|
|
174
|
-
*/
|
|
175
|
-
|
|
176
|
-
// Side-effect imports that register procedures
|
|
177
|
-
${imports || "// No packages with procedures found"}
|
|
178
|
-
|
|
179
|
-
/**
|
|
180
|
-
* List of packages that were discovered and imported.
|
|
181
|
-
*/
|
|
182
|
-
export const discoveredPackages = [
|
|
183
|
-
${packageList || " // No packages with procedures found"}
|
|
184
|
-
] as const;
|
|
185
|
-
|
|
186
|
-
/**
|
|
187
|
-
* Number of packages with procedures.
|
|
188
|
-
*/
|
|
189
|
-
export const packageCount = ${packages.length};
|
|
190
|
-
`;
|
|
191
|
-
}
|
|
192
|
-
// =============================================================================
|
|
193
|
-
// Main
|
|
194
|
-
// =============================================================================
|
|
195
|
-
/**
|
|
196
|
-
* Try to load packages from registry (fast path).
|
|
197
|
-
* Returns null if registry doesn't exist or is empty.
|
|
198
|
-
*/
|
|
199
|
-
async function loadFromRegistry(rootDir, verbose) {
|
|
200
|
-
try {
|
|
201
|
-
const registry = await getRegistry(rootDir);
|
|
202
|
-
if (Object.keys(registry.packages).length === 0) {
|
|
203
|
-
return null;
|
|
204
|
-
}
|
|
205
|
-
const packages = [];
|
|
206
|
-
for (const [name, entry] of Object.entries(registry.packages)) {
|
|
207
|
-
// The exports map of the installed package decides the import path
|
|
208
|
-
let manifest = {};
|
|
209
|
-
try {
|
|
210
|
-
manifest = JSON.parse(await fs.readFile(path.join(rootDir, "node_modules", name, "package.json"), "utf-8"));
|
|
211
|
-
}
|
|
212
|
-
catch {
|
|
213
|
-
// Not installed at the root: import the declared file
|
|
214
|
-
}
|
|
215
|
-
packages.push({
|
|
216
|
-
name,
|
|
217
|
-
proceduresPath: entry.proceduresPath,
|
|
218
|
-
importPath: procedureImportPath(name, manifest, entry.proceduresPath),
|
|
219
|
-
});
|
|
220
|
-
}
|
|
221
|
-
// Sort for deterministic output
|
|
222
|
-
packages.sort((a, b) => a.name.localeCompare(b.name));
|
|
223
|
-
if (verbose) {
|
|
224
|
-
console.log(`Loaded ${packages.length} package(s) from ${REGISTRY_FILENAME}`);
|
|
225
|
-
}
|
|
226
|
-
return packages;
|
|
227
|
-
}
|
|
228
|
-
catch {
|
|
229
|
-
return null;
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
/**
|
|
233
|
-
* Run procedure discovery.
|
|
234
|
-
*/
|
|
235
|
-
export async function discover(options) {
|
|
236
|
-
const { output, root, watch: watchMode, check, verbose } = options;
|
|
237
|
-
async function runDiscovery() {
|
|
238
|
-
if (verbose) {
|
|
239
|
-
console.log(`Discovering procedures in ${root}...`);
|
|
240
|
-
}
|
|
241
|
-
// Try registry first (fast path)
|
|
242
|
-
let packages = await loadFromRegistry(root, verbose);
|
|
243
|
-
if (packages === null) {
|
|
244
|
-
// Fallback to scanning
|
|
245
|
-
if (verbose) {
|
|
246
|
-
console.log(`No registry found, scanning node_modules...`);
|
|
247
|
-
}
|
|
248
|
-
packages = await discoverPackages(root, verbose);
|
|
249
|
-
}
|
|
250
|
-
const code = generateCode(packages);
|
|
251
|
-
console.log(`Discovered ${packages.length} package(s) with procedures`);
|
|
252
|
-
return code;
|
|
253
|
-
}
|
|
254
|
-
// Run initial discovery
|
|
255
|
-
const code = await runDiscovery();
|
|
256
|
-
// Resolve output path
|
|
257
|
-
const outputPath = path.isAbsolute(output) ? output : path.join(root, output);
|
|
258
|
-
const outputDir = path.dirname(outputPath);
|
|
259
|
-
if (check) {
|
|
260
|
-
// Check mode: verify the file is up-to-date
|
|
261
|
-
try {
|
|
262
|
-
const existing = await fs.readFile(outputPath, "utf-8");
|
|
263
|
-
// Compare ignoring the timestamp line
|
|
264
|
-
const normalizeForCompare = (s) => s.replace(/Generated at: .+/, "Generated at: <timestamp>");
|
|
265
|
-
if (normalizeForCompare(existing) !== normalizeForCompare(code)) {
|
|
266
|
-
console.error("Generated file is out of date!");
|
|
267
|
-
console.error(`Run \`npx client-registry discover\` to update ${output}`);
|
|
268
|
-
process.exit(1);
|
|
269
|
-
}
|
|
270
|
-
console.log("Generated file is up-to-date");
|
|
271
|
-
return;
|
|
272
|
-
}
|
|
273
|
-
catch {
|
|
274
|
-
console.error(`Generated file does not exist: ${output}`);
|
|
275
|
-
console.error(`Run \`npx client-registry discover\` to generate it`);
|
|
276
|
-
process.exit(1);
|
|
277
|
-
}
|
|
278
|
-
}
|
|
279
|
-
// Write the file
|
|
280
|
-
await fs.mkdir(outputDir, { recursive: true });
|
|
281
|
-
await fs.writeFile(outputPath, code, "utf-8");
|
|
282
|
-
console.log(`Generated: ${output}`);
|
|
283
|
-
if (watchMode) {
|
|
284
|
-
// Watch mode: re-run on package.json changes
|
|
285
|
-
console.log("\nWatching for changes...");
|
|
286
|
-
console.log("Press Ctrl+C to stop\n");
|
|
287
|
-
const pkgJsonPath = path.join(root, "package.json");
|
|
288
|
-
const nodeModulesPath = path.join(root, "node_modules");
|
|
289
|
-
// Watch package.json
|
|
290
|
-
watch(pkgJsonPath, async () => {
|
|
291
|
-
console.log("\npackage.json changed, re-discovering...");
|
|
292
|
-
const newCode = await runDiscovery();
|
|
293
|
-
await fs.writeFile(outputPath, newCode, "utf-8");
|
|
294
|
-
console.log(`Updated: ${output}`);
|
|
295
|
-
});
|
|
296
|
-
// Watch node_modules (for package.json files inside)
|
|
297
|
-
// This is a simplified watch - in production you might use chokidar
|
|
298
|
-
watch(nodeModulesPath, { recursive: true }, async (_, filename) => {
|
|
299
|
-
if (filename?.endsWith("package.json")) {
|
|
300
|
-
console.log("\nDependency changed, re-discovering...");
|
|
301
|
-
const newCode = await runDiscovery();
|
|
302
|
-
await fs.writeFile(outputPath, newCode, "utf-8");
|
|
303
|
-
console.log(`Updated: ${output}`);
|
|
304
|
-
}
|
|
305
|
-
});
|
|
306
|
-
// Keep process alive
|
|
307
|
-
await new Promise(() => { });
|
|
308
|
-
}
|
|
309
|
-
}
|
|
310
|
-
//# sourceMappingURL=discover.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"discover.js","sourceRoot":"","sources":["../../../src/procedures/cli/discover.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
* Client CLI
|
|
4
|
-
*
|
|
5
|
-
* Command-line interface for procedure discovery and library scaffolding.
|
|
6
|
-
*
|
|
7
|
-
* Commands:
|
|
8
|
-
* - discover: Generate procedure imports (reads from registry or scans)
|
|
9
|
-
* - announce: Register this package's procedures (called from postinstall)
|
|
10
|
-
* - init: Initialize a new library with procedure support
|
|
11
|
-
*/
|
|
12
|
-
export {};
|
|
13
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/procedures/cli/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;GASG"}
|
|
@@ -1,203 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
* Client CLI
|
|
4
|
-
*
|
|
5
|
-
* Command-line interface for procedure discovery and library scaffolding.
|
|
6
|
-
*
|
|
7
|
-
* Commands:
|
|
8
|
-
* - discover: Generate procedure imports (reads from registry or scans)
|
|
9
|
-
* - announce: Register this package's procedures (called from postinstall)
|
|
10
|
-
* - init: Initialize a new library with procedure support
|
|
11
|
-
*/
|
|
12
|
-
import { readFileSync } from "node:fs";
|
|
13
|
-
import { parseArgs } from "node:util";
|
|
14
|
-
import { discover } from "./discover.js";
|
|
15
|
-
import { init } from "./init.js";
|
|
16
|
-
import { announce, unannounce } from "./announce.js";
|
|
17
|
-
function parseCliArgs() {
|
|
18
|
-
const args = process.argv.slice(2);
|
|
19
|
-
const command = args[0] ?? "help";
|
|
20
|
-
const rest = args.slice(1);
|
|
21
|
-
// Parse based on command
|
|
22
|
-
switch (command) {
|
|
23
|
-
case "discover": {
|
|
24
|
-
const { values } = parseArgs({
|
|
25
|
-
args: rest,
|
|
26
|
-
options: {
|
|
27
|
-
output: { type: "string", short: "o", default: "./__generated__/procedures.ts" },
|
|
28
|
-
root: { type: "string", short: "r", default: process.cwd() },
|
|
29
|
-
watch: { type: "boolean", short: "w", default: false },
|
|
30
|
-
check: { type: "boolean", short: "c", default: false },
|
|
31
|
-
verbose: { type: "boolean", short: "v", default: false },
|
|
32
|
-
},
|
|
33
|
-
allowPositionals: false,
|
|
34
|
-
});
|
|
35
|
-
return { command, options: values, positionals: [] };
|
|
36
|
-
}
|
|
37
|
-
case "init": {
|
|
38
|
-
const { values, positionals } = parseArgs({
|
|
39
|
-
args: rest,
|
|
40
|
-
options: {
|
|
41
|
-
force: { type: "boolean", short: "f", default: false },
|
|
42
|
-
},
|
|
43
|
-
allowPositionals: true,
|
|
44
|
-
});
|
|
45
|
-
return { command, options: values, positionals };
|
|
46
|
-
}
|
|
47
|
-
case "announce": {
|
|
48
|
-
const { values } = parseArgs({
|
|
49
|
-
args: rest,
|
|
50
|
-
options: {
|
|
51
|
-
verbose: { type: "boolean", short: "v", default: false },
|
|
52
|
-
propagate: { type: "boolean", default: false },
|
|
53
|
-
},
|
|
54
|
-
allowPositionals: false,
|
|
55
|
-
});
|
|
56
|
-
return { command, options: values, positionals: [] };
|
|
57
|
-
}
|
|
58
|
-
case "unannounce": {
|
|
59
|
-
const { values } = parseArgs({
|
|
60
|
-
args: rest,
|
|
61
|
-
options: {
|
|
62
|
-
verbose: { type: "boolean", short: "v", default: false },
|
|
63
|
-
},
|
|
64
|
-
allowPositionals: false,
|
|
65
|
-
});
|
|
66
|
-
return { command, options: values, positionals: [] };
|
|
67
|
-
}
|
|
68
|
-
case "help":
|
|
69
|
-
case "--help":
|
|
70
|
-
case "-h":
|
|
71
|
-
return { command: "help", options: {}, positionals: [] };
|
|
72
|
-
case "version":
|
|
73
|
-
case "--version":
|
|
74
|
-
case "-V":
|
|
75
|
-
return { command: "version", options: {}, positionals: [] };
|
|
76
|
-
default:
|
|
77
|
-
console.error(`Unknown command: ${command}`);
|
|
78
|
-
return { command: "help", options: {}, positionals: [] };
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
// =============================================================================
|
|
82
|
-
// Help Text
|
|
83
|
-
// =============================================================================
|
|
84
|
-
function printHelp() {
|
|
85
|
-
console.log(`
|
|
86
|
-
client - Procedure discovery and library scaffolding CLI
|
|
87
|
-
|
|
88
|
-
Usage:
|
|
89
|
-
client <command> [options]
|
|
90
|
-
|
|
91
|
-
Commands:
|
|
92
|
-
discover Generate procedure imports (from registry or by scanning)
|
|
93
|
-
announce Register this package's procedures (used in postinstall)
|
|
94
|
-
init Initialize a new library with procedure support
|
|
95
|
-
help Show this help message
|
|
96
|
-
version Show version
|
|
97
|
-
|
|
98
|
-
Examples:
|
|
99
|
-
# Generate procedure imports from dependencies
|
|
100
|
-
client-registry discover
|
|
101
|
-
|
|
102
|
-
# Generate to custom output path
|
|
103
|
-
client-registry discover --output ./src/generated/procedures.ts
|
|
104
|
-
|
|
105
|
-
# Watch for changes (dev mode)
|
|
106
|
-
client-registry discover --watch
|
|
107
|
-
|
|
108
|
-
# Check if generated file is up-to-date (CI)
|
|
109
|
-
client-registry discover --check
|
|
110
|
-
|
|
111
|
-
# Initialize a new library
|
|
112
|
-
client-registry init my-new-lib
|
|
113
|
-
|
|
114
|
-
# Initialize in current directory
|
|
115
|
-
client-registry init .
|
|
116
|
-
|
|
117
|
-
# Register procedures (called automatically via postinstall)
|
|
118
|
-
client-registry announce
|
|
119
|
-
|
|
120
|
-
# Also add "client-registry announce" to the postinstall script of the package that depends on this one
|
|
121
|
-
client-registry announce --propagate
|
|
122
|
-
|
|
123
|
-
How it works:
|
|
124
|
-
1. Libraries with procedures add to package.json:
|
|
125
|
-
{ "client": { "procedures": "./dist/register.js" } }
|
|
126
|
-
|
|
127
|
-
2. Libraries add postinstall hook:
|
|
128
|
-
{ "scripts": { "postinstall": "client-registry announce" } }
|
|
129
|
-
|
|
130
|
-
3. When installed, each library announces itself to .client-registry.json
|
|
131
|
-
|
|
132
|
-
4. App runs "client-registry discover" to generate imports from the registry
|
|
133
|
-
|
|
134
|
-
For more information, visit: https://mark1russell7.github.io/client/
|
|
135
|
-
`);
|
|
136
|
-
}
|
|
137
|
-
function printVersion() {
|
|
138
|
-
// This file is dist/procedures/cli/index.js: the package.json is three folders up
|
|
139
|
-
const manifest = JSON.parse(readFileSync(new URL("../../../package.json", import.meta.url), "utf8"));
|
|
140
|
-
console.log(`client-registry v${manifest.version}`);
|
|
141
|
-
}
|
|
142
|
-
// =============================================================================
|
|
143
|
-
// Main
|
|
144
|
-
// =============================================================================
|
|
145
|
-
async function main() {
|
|
146
|
-
const { command, options, positionals } = parseCliArgs();
|
|
147
|
-
try {
|
|
148
|
-
switch (command) {
|
|
149
|
-
case "discover":
|
|
150
|
-
await discover({
|
|
151
|
-
output: options["output"],
|
|
152
|
-
root: options["root"],
|
|
153
|
-
watch: options["watch"],
|
|
154
|
-
check: options["check"],
|
|
155
|
-
verbose: options["verbose"],
|
|
156
|
-
});
|
|
157
|
-
break;
|
|
158
|
-
case "init": {
|
|
159
|
-
const name = positionals[0];
|
|
160
|
-
if (!name) {
|
|
161
|
-
console.error("Error: Please provide a library name");
|
|
162
|
-
console.error("Usage: client-registry init <name>");
|
|
163
|
-
process.exit(1);
|
|
164
|
-
}
|
|
165
|
-
await init({
|
|
166
|
-
name,
|
|
167
|
-
force: options["force"],
|
|
168
|
-
});
|
|
169
|
-
break;
|
|
170
|
-
}
|
|
171
|
-
case "announce":
|
|
172
|
-
// announce is best-effort for postinstall - never fail
|
|
173
|
-
try {
|
|
174
|
-
await announce({
|
|
175
|
-
verbose: options["verbose"],
|
|
176
|
-
propagate: options["propagate"],
|
|
177
|
-
});
|
|
178
|
-
}
|
|
179
|
-
catch {
|
|
180
|
-
// Silently ignore errors - this runs in postinstall
|
|
181
|
-
// and should never block package installation
|
|
182
|
-
}
|
|
183
|
-
break;
|
|
184
|
-
case "unannounce":
|
|
185
|
-
await unannounce({
|
|
186
|
-
verbose: options["verbose"],
|
|
187
|
-
});
|
|
188
|
-
break;
|
|
189
|
-
case "help":
|
|
190
|
-
printHelp();
|
|
191
|
-
break;
|
|
192
|
-
case "version":
|
|
193
|
-
printVersion();
|
|
194
|
-
break;
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
catch (error) {
|
|
198
|
-
console.error("Error:", error instanceof Error ? error.message : error);
|
|
199
|
-
process.exit(1);
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
main();
|
|
203
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/procedures/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Library Initialization
|
|
3
|
-
*
|
|
4
|
-
* Scaffolds a new library with procedure support.
|
|
5
|
-
* Creates the necessary file structure and configuration.
|
|
6
|
-
*/
|
|
7
|
-
export interface InitOptions {
|
|
8
|
-
/** Library name or "." for current directory */
|
|
9
|
-
name: string;
|
|
10
|
-
/** Overwrite existing files */
|
|
11
|
-
force: boolean;
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* Initialize a new library with procedure support.
|
|
15
|
-
*/
|
|
16
|
-
export declare function init(options: InitOptions): Promise<void>;
|
|
17
|
-
//# sourceMappingURL=init.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/procedures/cli/init.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,MAAM,WAAW,WAAW;IAC1B,gDAAgD;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,+BAA+B;IAC/B,KAAK,EAAE,OAAO,CAAC;CAChB;AA2SD;;GAEG;AACH,wBAAsB,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAgD9D"}
|