@reqlan/cli 0.5.2 → 0.7.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/README.md +37 -2
- package/README.template.md +2 -2
- package/bin/cli.js +2 -1
- package/out/commands/barrel.js +1 -1
- package/out/commands/barrel.js.map +1 -1
- package/out/commands/export.js +1 -1
- package/out/commands/export.js.map +1 -1
- package/out/commands/init.js +1 -1
- package/out/commands/init.js.map +1 -1
- package/out/commands/parse.js +21 -22
- package/out/commands/parse.js.map +1 -1
- package/out/commands/search.d.ts +1 -0
- package/out/commands/search.js +9 -2
- package/out/commands/search.js.map +1 -1
- package/out/esm-path.d.ts +1 -0
- package/out/esm-path.js +20 -0
- package/out/esm-path.js.map +1 -0
- package/out/runtime.d.ts +2 -2
- package/out/runtime.js +9 -6
- package/out/runtime.js.map +1 -1
- package/package.json +6 -6
- package/out/util.d.ts +0 -14
- package/out/util.js +0 -35
- package/out/util.js.map +0 -1
package/README.md
CHANGED
|
@@ -11,7 +11,7 @@ CLI for parsing, analysing, and exporting reqlan requirement graphs
|
|
|
11
11
|
- `reqlan` / `rq` Clipanion CLI for requirement workspaces
|
|
12
12
|
- `parse` — parse a `.rq` file and print diagnostics or an AST summary
|
|
13
13
|
- `analyse` / `analyze` — file, idea, or workspace graph analysis via `AnalysisApi`
|
|
14
|
-
- `search` — semantic search across indexed requirements (`--json` for scripting)
|
|
14
|
+
- `search` — semantic search across indexed requirements (`--context`, `--json` for scripting)
|
|
15
15
|
|
|
16
16
|
## Install
|
|
17
17
|
|
|
@@ -27,7 +27,7 @@ npx @reqlan/cli --help
|
|
|
27
27
|
reqlan parse <file> [--json]
|
|
28
28
|
reqlan analyse [--file <path> | --idea <name>] [--depth <n>] [--cwd <dir>] [--json]
|
|
29
29
|
reqlan analyze # alias of analyse
|
|
30
|
-
reqlan search <query> [--limit <n>] [--cwd <dir>] [--json]
|
|
30
|
+
reqlan search <query> [--limit <n>] [--context <path|path#idea|name>]... [--cwd <dir>] [--json]
|
|
31
31
|
```
|
|
32
32
|
|
|
33
33
|
Set `REQLAN_WORKSPACE` or pass `--cwd` to override the workspace root.
|
|
@@ -44,6 +44,41 @@ The ideas index is shared application memory at `<workspace>/.reqlan/ideas-index
|
|
|
44
44
|
|
|
45
45
|
## Changelog
|
|
46
46
|
|
|
47
|
+
### 0.7.0
|
|
48
|
+
|
|
49
|
+
#### Minor Changes
|
|
50
|
+
|
|
51
|
+
- e9b7e8a: rust
|
|
52
|
+
|
|
53
|
+
#### Patch Changes
|
|
54
|
+
|
|
55
|
+
- 72246b6: up pnpm
|
|
56
|
+
- 70ccc6f: up pnpm version
|
|
57
|
+
- Updated dependencies [72246b6]
|
|
58
|
+
- Updated dependencies [e9b7e8a]
|
|
59
|
+
- Updated dependencies [70ccc6f]
|
|
60
|
+
- @reqlan/analytical@0.10.0
|
|
61
|
+
|
|
62
|
+
### 0.6.1
|
|
63
|
+
|
|
64
|
+
#### Patch Changes
|
|
65
|
+
|
|
66
|
+
- 45d37df: Fix Windows CLI startup: dynamic import of `C:\...` is protocol `c:`; use `file://` URLs. Treat drive-letter paths as filesystem paths, not URI schemes.
|
|
67
|
+
- Updated dependencies [45d37df]
|
|
68
|
+
- @reqlan/language@1.8.3
|
|
69
|
+
- @reqlan/analytical@0.9.1
|
|
70
|
+
|
|
71
|
+
### 0.6.0
|
|
72
|
+
|
|
73
|
+
#### Minor Changes
|
|
74
|
+
|
|
75
|
+
- 2294beb: minor improvements to graph and search and website
|
|
76
|
+
|
|
77
|
+
#### Patch Changes
|
|
78
|
+
|
|
79
|
+
- Updated dependencies [2294beb]
|
|
80
|
+
- @reqlan/analytical@0.9.0
|
|
81
|
+
|
|
47
82
|
### 0.5.2
|
|
48
83
|
|
|
49
84
|
#### Patch Changes
|
package/README.template.md
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
- `reqlan` / `rq` Clipanion CLI for requirement workspaces
|
|
12
12
|
- `parse` — parse a `.rq` file and print diagnostics or an AST summary
|
|
13
13
|
- `analyse` / `analyze` — file, idea, or workspace graph analysis via `AnalysisApi`
|
|
14
|
-
- `search` — semantic search across indexed requirements (`--json` for scripting)
|
|
14
|
+
- `search` — semantic search across indexed requirements (`--context`, `--json` for scripting)
|
|
15
15
|
|
|
16
16
|
## Install
|
|
17
17
|
|
|
@@ -27,7 +27,7 @@ npx @reqlan/cli --help
|
|
|
27
27
|
reqlan parse <file> [--json]
|
|
28
28
|
reqlan analyse [--file <path> | --idea <name>] [--depth <n>] [--cwd <dir>] [--json]
|
|
29
29
|
reqlan analyze # alias of analyse
|
|
30
|
-
reqlan search <query> [--limit <n>] [--cwd <dir>] [--json]
|
|
30
|
+
reqlan search <query> [--limit <n>] [--context <path|path#idea|name>]... [--cwd <dir>] [--json]
|
|
31
31
|
```
|
|
32
32
|
|
|
33
33
|
Set `REQLAN_WORKSPACE` or pass `--cwd` to override the workspace root.
|
package/bin/cli.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { fileURLToPath } from 'node:url';
|
|
3
3
|
import { dirname, join } from 'node:path';
|
|
4
|
+
import { fsPathToEsmSpecifier } from '../out/esm-path.js';
|
|
4
5
|
|
|
5
6
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
6
|
-
await import(join(__dirname, '..', 'out', 'main.js'));
|
|
7
|
+
await import(fsPathToEsmSpecifier(join(__dirname, '..', 'out', 'main.js')));
|
package/out/commands/barrel.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { Command, Option } from 'clipanion';
|
|
2
2
|
import { resolve } from 'node:path';
|
|
3
|
-
import { barrelPage } from '@reqlan/analytical';
|
|
4
3
|
import { emit } from '../output.js';
|
|
5
4
|
/**
|
|
6
5
|
* rq:["../../../reqlan rq/extension/features-commands.rq".barrel_page]
|
|
@@ -21,6 +20,7 @@ export class BarrelCommand extends Command {
|
|
|
21
20
|
}
|
|
22
21
|
async execute() {
|
|
23
22
|
try {
|
|
23
|
+
const { barrelPage } = await import('@reqlan/analytical/core');
|
|
24
24
|
const result = await barrelPage(resolve(this.file), {
|
|
25
25
|
containerName: this.name,
|
|
26
26
|
dryRun: this.dryRun
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"barrel.js","sourceRoot":"","sources":["../../src/commands/barrel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"barrel.js","sourceRoot":"","sources":["../../src/commands/barrel.ts"],"names":[],"mappings":"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"}
|
package/out/commands/export.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Command, Option } from 'clipanion';
|
|
2
2
|
import { resolve } from 'node:path';
|
|
3
|
-
import { toWorkspaceRelativePath } from '@reqlan/analytical';
|
|
3
|
+
import { toWorkspaceRelativePath } from '@reqlan/analytical/core';
|
|
4
4
|
import { withAnalysisApi, resolveWorkspaceRoot } from '../runtime.js';
|
|
5
5
|
import { emit } from '../output.js';
|
|
6
6
|
const RUNTIME_MODES = new Set(['interactive', 'document', 'print']);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"export.js","sourceRoot":"","sources":["../../src/commands/export.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EACH,uBAAuB,EAI1B,MAAM,
|
|
1
|
+
{"version":3,"file":"export.js","sourceRoot":"","sources":["../../src/commands/export.ts"],"names":[],"mappings":"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"}
|
package/out/commands/init.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Command, Option } from 'clipanion';
|
|
2
2
|
import { resolve } from 'node:path';
|
|
3
|
-
import { createBase } from '@reqlan/analytical';
|
|
3
|
+
import { createBase } from '@reqlan/analytical/core';
|
|
4
4
|
import { emit } from '../output.js';
|
|
5
5
|
export class InitCommand extends Command {
|
|
6
6
|
constructor() {
|
package/out/commands/init.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEpC,MAAM,OAAO,WAAY,SAAQ,OAAO;IAAxC;;QAgBI,cAAS,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;QAC/C,SAAI,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,EAAE;YACnC,WAAW,EAAE,4BAA4B;SAC5C,CAAC,CAAC;IAiCP,CAAC;IA/BG,KAAK,CAAC,OAAO;QACT,IAAI,CAAC;YACD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;YACtD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC;YACtC,MAAM,OAAO,GAAG;gBACZ,EAAE,EAAE,IAAI;gBACR,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI;gBACtB,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU;gBAClC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK;aAC3B,CAAC;YACF,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACZ,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YACxB,CAAC;iBAAM,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACxB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CACrB,8BAA8B,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI;oBAC9C,WAAW,MAAM,CAAC,IAAI,CAAC,UAAU,IAAI,CAC5C,CAAC;YACN,CAAC;iBAAM,CAAC;gBACJ,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CACrB,iCAAiC,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI;oBACjD,WAAW,MAAM,CAAC,IAAI,CAAC,UAAU,IAAI,CAC5C,CAAC;YACN,CAAC;YACD,OAAO,CAAC,CAAC;QACb,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC;YAC1C,OAAO,CAAC,CAAC;QACb,CAAC;IACL,CAAC;;AAlDe,iBAAK,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,AAAb,CAAc;AAEnB,iBAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAClC,WAAW,EAAE,oEAAoE;IACjF,OAAO,EAAE;;;SAGR;IACD,QAAQ,EAAE;QACN,CAAC,4BAA4B,EAAE,SAAS,CAAC;QACzC,CAAC,wBAAwB,EAAE,sBAAsB,CAAC;QAClD,CAAC,aAAa,EAAE,gBAAgB,CAAC;KACpC;CACJ,CAAC,AAXmB,CAWlB"}
|
package/out/commands/parse.js
CHANGED
|
@@ -1,14 +1,8 @@
|
|
|
1
1
|
import { Command, Option } from 'clipanion';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
2
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
3
|
+
import { extname, resolve } from 'node:path';
|
|
4
|
+
import { parseReqlanSource } from '@reqlan/analytical/core';
|
|
5
5
|
import { emit } from '../output.js';
|
|
6
|
-
function elementSummary(model) {
|
|
7
|
-
return model.elements.map(element => ({
|
|
8
|
-
type: element.$type,
|
|
9
|
-
name: 'name' in element ? element.name : undefined
|
|
10
|
-
}));
|
|
11
|
-
}
|
|
12
6
|
export class ParseCommand extends Command {
|
|
13
7
|
constructor() {
|
|
14
8
|
super(...arguments);
|
|
@@ -18,32 +12,37 @@ export class ParseCommand extends Command {
|
|
|
18
12
|
});
|
|
19
13
|
}
|
|
20
14
|
async execute() {
|
|
21
|
-
const services = createReqlanServices(NodeFileSystem).Reqlan;
|
|
22
15
|
try {
|
|
23
|
-
|
|
24
|
-
|
|
16
|
+
if (extname(this.file) !== '.rq') {
|
|
17
|
+
throw new Error('Please choose a file with one of these extensions: .rq.');
|
|
18
|
+
}
|
|
19
|
+
if (!existsSync(this.file)) {
|
|
20
|
+
throw new Error(`File ${this.file} does not exist.`);
|
|
21
|
+
}
|
|
22
|
+
const source = readFileSync(resolve(this.file), 'utf8');
|
|
23
|
+
const parsed = parseReqlanSource(source);
|
|
25
24
|
const payload = {
|
|
26
25
|
file: this.file,
|
|
27
|
-
ok:
|
|
28
|
-
errorCount,
|
|
29
|
-
diagnostics,
|
|
30
|
-
elements:
|
|
26
|
+
ok: parsed.ok,
|
|
27
|
+
errorCount: parsed.errorCount,
|
|
28
|
+
diagnostics: parsed.diagnostics,
|
|
29
|
+
elements: parsed.elements
|
|
31
30
|
};
|
|
32
31
|
if (this.json) {
|
|
33
32
|
emit(payload, true);
|
|
34
33
|
}
|
|
35
|
-
else if (errorCount > 0) {
|
|
34
|
+
else if (parsed.errorCount > 0) {
|
|
36
35
|
this.context.stderr.write('There are validation errors:\n');
|
|
37
|
-
for (const
|
|
38
|
-
this.context.stderr.write(`line ${
|
|
36
|
+
for (const diagnostic of parsed.diagnostics.filter(item => item.severity === 1)) {
|
|
37
|
+
this.context.stderr.write(`line ${diagnostic.line}: ${diagnostic.message} [${diagnostic.text}]\n`);
|
|
39
38
|
}
|
|
40
39
|
}
|
|
41
40
|
else {
|
|
42
|
-
const lines =
|
|
41
|
+
const lines = parsed.elements.map(element => element.name ? `${element.type} ${element.name}` : element.type);
|
|
43
42
|
this.context.stdout.write(`Parsed ${this.file}: ${lines.length} top-level element(s)\n` +
|
|
44
|
-
(lines.length > 0 ? lines.map(
|
|
43
|
+
(lines.length > 0 ? lines.map(line => ` - ${line}`).join('\n') + '\n' : ''));
|
|
45
44
|
}
|
|
46
|
-
return errorCount > 0 ? 1 : 0;
|
|
45
|
+
return parsed.errorCount > 0 ? 1 : 0;
|
|
47
46
|
}
|
|
48
47
|
catch (error) {
|
|
49
48
|
const message = error instanceof Error ? error.message : String(error);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/commands/parse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/commands/parse.ts"],"names":[],"mappings":"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"}
|
package/out/commands/search.d.ts
CHANGED
package/out/commands/search.js
CHANGED
|
@@ -8,6 +8,9 @@ export class SearchCommand extends Command {
|
|
|
8
8
|
this.limit = Option.String('--limit', '8', {
|
|
9
9
|
description: 'Maximum number of matches (default 8)'
|
|
10
10
|
});
|
|
11
|
+
this.contextRefs = Option.Array('--context', {
|
|
12
|
+
description: 'Relative .rq path, path#idea, or idea name that biases ranking by graph hop distance (repeatable)'
|
|
13
|
+
});
|
|
11
14
|
this.cwd = Option.String('--cwd', {
|
|
12
15
|
description: 'Workspace root (default: walk from cwd, or REQLAN_WORKSPACE)'
|
|
13
16
|
});
|
|
@@ -19,7 +22,7 @@ export class SearchCommand extends Command {
|
|
|
19
22
|
const limit = Number.parseInt(this.limit, 10);
|
|
20
23
|
try {
|
|
21
24
|
await withAnalysisApi(this.cwd, async (api) => {
|
|
22
|
-
const matches = await api.searchRequirements(this.query, Number.isFinite(limit) && limit > 0 ? limit : 8);
|
|
25
|
+
const matches = await api.searchRequirements(this.query, Number.isFinite(limit) && limit > 0 ? limit : 8, this.contextRefs?.length ? { context: this.contextRefs } : undefined);
|
|
23
26
|
if (this.json) {
|
|
24
27
|
emit(matches.map(match => ({
|
|
25
28
|
idea: match.idea,
|
|
@@ -55,7 +58,11 @@ SearchCommand.usage = Command.Usage({
|
|
|
55
58
|
description: 'Search requirements by keyword across names, summaries, tags, and references.',
|
|
56
59
|
examples: [
|
|
57
60
|
['Search ideas', '$0 search "cli package"'],
|
|
58
|
-
['Limit results', '$0 search parse --limit 5 --json']
|
|
61
|
+
['Limit results', '$0 search parse --limit 5 --json'],
|
|
62
|
+
[
|
|
63
|
+
'Bias by context',
|
|
64
|
+
'$0 search ranking --context "reqlan rq/core_analysis/search.rq" --context fuzzy_search'
|
|
65
|
+
]
|
|
59
66
|
]
|
|
60
67
|
});
|
|
61
68
|
//# sourceMappingURL=search.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEpC,MAAM,OAAO,aAAc,SAAQ,OAAO;IAA1C;;
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function fsPathToEsmSpecifier(fsPath: string): string;
|
package/out/esm-path.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Convert a filesystem path into an ESM import specifier.
|
|
3
|
+
* Node's ESM loader on Windows rejects absolute paths like `C:\...`
|
|
4
|
+
* (protocol `c:`) and requires `file://` URLs.
|
|
5
|
+
*/
|
|
6
|
+
import { pathToFileURL } from 'node:url';
|
|
7
|
+
const WINDOWS_DRIVE_ABS = /^[A-Za-z]:[\\/]/;
|
|
8
|
+
export function fsPathToEsmSpecifier(fsPath) {
|
|
9
|
+
if (fsPath.startsWith('file:')) {
|
|
10
|
+
return fsPath;
|
|
11
|
+
}
|
|
12
|
+
if (WINDOWS_DRIVE_ABS.test(fsPath)) {
|
|
13
|
+
return `file:///${fsPath.replace(/\\/g, '/')}`;
|
|
14
|
+
}
|
|
15
|
+
if (fsPath.startsWith('\\\\')) {
|
|
16
|
+
return `file:${fsPath.replace(/\\/g, '/')}`;
|
|
17
|
+
}
|
|
18
|
+
return pathToFileURL(fsPath).href;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=esm-path.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"esm-path.js","sourceRoot":"","sources":["../src/esm-path.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,iBAAiB,GAAG,iBAAiB,CAAC;AAE5C,MAAM,UAAU,oBAAoB,CAAC,MAAc;IAC/C,IAAI,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7B,OAAO,MAAM,CAAC;IAClB,CAAC;IACD,IAAI,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACjC,OAAO,WAAW,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC;IACnD,CAAC;IACD,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5B,OAAO,QAAQ,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC;IAChD,CAAC;IACD,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC;AACtC,CAAC"}
|
package/out/runtime.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { type HeadlessAnalysisApi } from '@reqlan/analytical/core';
|
|
2
2
|
export declare function resolveWorkspaceRoot(cwd?: string): string;
|
|
3
|
-
export declare function withAnalysisApi<T>(cwd: string | undefined, run: (api:
|
|
3
|
+
export declare function withAnalysisApi<T>(cwd: string | undefined, run: (api: HeadlessAnalysisApi) => Promise<T>): Promise<T>;
|
package/out/runtime.js
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI runtime uses the core analytical engine, not Langium.
|
|
3
|
+
* rq:["../../../reqlan rq/core_analysis/rust_port.rq".cutover]
|
|
4
|
+
* rq:["../../../reqlan rq/cli/cli_package.rq".architecture]
|
|
5
|
+
*/
|
|
1
6
|
import { existsSync } from 'node:fs';
|
|
2
7
|
import { dirname, resolve } from 'node:path';
|
|
3
|
-
import {
|
|
8
|
+
import { openAnalysisApi } from '@reqlan/analytical/core';
|
|
4
9
|
export function resolveWorkspaceRoot(cwd) {
|
|
5
10
|
const fromEnv = process.env.REQLAN_WORKSPACE?.trim();
|
|
6
11
|
if (fromEnv) {
|
|
@@ -20,17 +25,15 @@ export function resolveWorkspaceRoot(cwd) {
|
|
|
20
25
|
}
|
|
21
26
|
export async function withAnalysisApi(cwd, run) {
|
|
22
27
|
const workspaceRoot = resolveWorkspaceRoot(cwd);
|
|
23
|
-
const
|
|
28
|
+
const opened = await openAnalysisApi({
|
|
24
29
|
workspaceRoot,
|
|
25
|
-
cwd: cwd ? resolve(cwd) : process.cwd(),
|
|
26
30
|
storagePath: process.env.REQLAN_INDEX_PATH
|
|
27
31
|
});
|
|
28
|
-
await activateAnalysisRuntime(runtime);
|
|
29
32
|
try {
|
|
30
|
-
return await run(
|
|
33
|
+
return await run(opened.api);
|
|
31
34
|
}
|
|
32
35
|
finally {
|
|
33
|
-
await
|
|
36
|
+
await opened.dispose();
|
|
34
37
|
}
|
|
35
38
|
}
|
|
36
39
|
//# sourceMappingURL=runtime.js.map
|
package/out/runtime.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,eAAe,EAA4B,MAAM,yBAAyB,CAAC;AAEpF,MAAM,UAAU,oBAAoB,CAAC,GAAY;IAC7C,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,EAAE,CAAC;IACrD,IAAI,OAAO,EAAE,CAAC;QACV,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;IACD,IAAI,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACxC,SAAS,CAAC;QACN,IAAI,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,qBAAqB,CAAC,CAAC,EAAE,CAAC;YACtF,OAAO,GAAG,CAAC;QACf,CAAC;QACD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;YACjB,OAAO,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QACzC,CAAC;QACD,GAAG,GAAG,MAAM,CAAC;IACjB,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACjC,GAAuB,EACvB,GAA6C;IAE7C,MAAM,aAAa,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC;QACjC,aAAa;QACb,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB;KAC7C,CAAC,CAAC;IACH,IAAI,CAAC;QACD,OAAO,MAAM,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC;YAAS,CAAC;QACP,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;AACL,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@reqlan/cli",
|
|
3
3
|
"description": "CLI for parsing, analysing, and exporting reqlan requirement graphs",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.7.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "AGPL-3.0-only",
|
|
7
7
|
"repository": {
|
|
@@ -25,16 +25,16 @@
|
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
27
|
"clipanion": "3.2.1",
|
|
28
|
-
"
|
|
29
|
-
"@reqlan/analytical": "0.8.2",
|
|
30
|
-
"@reqlan/language": "1.8.2"
|
|
28
|
+
"@reqlan/analytical": "0.10.0"
|
|
31
29
|
},
|
|
32
30
|
"devDependencies": {
|
|
33
|
-
"shx": "~0.4.0"
|
|
31
|
+
"shx": "~0.4.0",
|
|
32
|
+
"vitest": "~3.1.3"
|
|
34
33
|
},
|
|
35
34
|
"scripts": {
|
|
36
35
|
"clean": "shx rm -fr *.tsbuildinfo out",
|
|
37
36
|
"build": "tsc -b tsconfig.json",
|
|
38
|
-
"build:clean": "pnpm run clean && pnpm run build"
|
|
37
|
+
"build:clean": "pnpm run clean && pnpm run build",
|
|
38
|
+
"test": "vitest run"
|
|
39
39
|
}
|
|
40
40
|
}
|
package/out/util.d.ts
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import type { AstNode, LangiumCoreServices, LangiumDocument } from 'langium';
|
|
2
|
-
export interface ParseResult {
|
|
3
|
-
document: LangiumDocument;
|
|
4
|
-
diagnostics: Array<{
|
|
5
|
-
severity: number;
|
|
6
|
-
line: number;
|
|
7
|
-
character: number;
|
|
8
|
-
message: string;
|
|
9
|
-
text: string;
|
|
10
|
-
}>;
|
|
11
|
-
errorCount: number;
|
|
12
|
-
}
|
|
13
|
-
export declare function parseDocument(fileName: string, services: LangiumCoreServices): Promise<ParseResult>;
|
|
14
|
-
export declare function extractAstNode<T extends AstNode>(fileName: string, services: LangiumCoreServices): Promise<T>;
|
package/out/util.js
DELETED
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import * as path from 'node:path';
|
|
2
|
-
import * as fs from 'node:fs';
|
|
3
|
-
import { URI } from 'langium';
|
|
4
|
-
export async function parseDocument(fileName, services) {
|
|
5
|
-
const extensions = services.LanguageMetaData.fileExtensions;
|
|
6
|
-
if (!extensions.includes(path.extname(fileName))) {
|
|
7
|
-
throw new Error(`Please choose a file with one of these extensions: ${extensions.join(', ')}.`);
|
|
8
|
-
}
|
|
9
|
-
if (!fs.existsSync(fileName)) {
|
|
10
|
-
throw new Error(`File ${fileName} does not exist.`);
|
|
11
|
-
}
|
|
12
|
-
const document = await services.shared.workspace.LangiumDocuments.getOrCreateDocument(URI.file(path.resolve(fileName)));
|
|
13
|
-
await services.shared.workspace.DocumentBuilder.build([document], { validation: true });
|
|
14
|
-
const diagnostics = (document.diagnostics ?? []).map(d => ({
|
|
15
|
-
severity: d.severity ?? 0,
|
|
16
|
-
line: d.range.start.line + 1,
|
|
17
|
-
character: d.range.start.character + 1,
|
|
18
|
-
message: typeof d.message === 'string' ? d.message : d.message.value,
|
|
19
|
-
text: document.textDocument.getText(d.range)
|
|
20
|
-
}));
|
|
21
|
-
const errorCount = diagnostics.filter(d => d.severity === 1).length;
|
|
22
|
-
return { document, diagnostics, errorCount };
|
|
23
|
-
}
|
|
24
|
-
export async function extractAstNode(fileName, services) {
|
|
25
|
-
const { document, errorCount, diagnostics } = await parseDocument(fileName, services);
|
|
26
|
-
if (errorCount > 0) {
|
|
27
|
-
const details = diagnostics
|
|
28
|
-
.filter(d => d.severity === 1)
|
|
29
|
-
.map(d => `line ${d.line}: ${d.message}`)
|
|
30
|
-
.join('\n');
|
|
31
|
-
throw new Error(`Validation errors:\n${details}`);
|
|
32
|
-
}
|
|
33
|
-
return document.parseResult?.value;
|
|
34
|
-
}
|
|
35
|
-
//# sourceMappingURL=util.js.map
|
package/out/util.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,GAAG,EAAE,MAAM,SAAS,CAAC;AAc9B,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,QAAgB,EAAE,QAA6B;IAC/E,MAAM,UAAU,GAAG,QAAQ,CAAC,gBAAgB,CAAC,cAAc,CAAC;IAC5D,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;QAC/C,MAAM,IAAI,KAAK,CAAC,sDAAsD,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACpG,CAAC;IAED,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,QAAQ,QAAQ,kBAAkB,CAAC,CAAC;IACxD,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,mBAAmB,CACjF,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CACnC,CAAC;IACF,MAAM,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;IAExF,MAAM,WAAW,GAAG,CAAC,QAAQ,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACvD,QAAQ,EAAE,CAAC,CAAC,QAAQ,IAAI,CAAC;QACzB,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC;QAC5B,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC;QACtC,OAAO,EAAE,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK;QACpE,IAAI,EAAE,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;KAC/C,CAAC,CAAC,CAAC;IACJ,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;IAEpE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC;AACjD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAChC,QAAgB,EAChB,QAA6B;IAE7B,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,MAAM,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACtF,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;QACjB,MAAM,OAAO,GAAG,WAAW;aACtB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC;aAC7B,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;aACxC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,uBAAuB,OAAO,EAAE,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,QAAQ,CAAC,WAAW,EAAE,KAAU,CAAC;AAC5C,CAAC"}
|