@aligndottech/cli 0.1.2 → 0.1.4
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 +151 -54
- package/dist/commands/check.d.ts.map +1 -1
- package/dist/commands/check.js +125 -0
- package/dist/commands/check.js.map +1 -1
- package/dist/commands/export.d.ts +3 -0
- package/dist/commands/export.d.ts.map +1 -0
- package/dist/commands/export.js +76 -0
- package/dist/commands/export.js.map +1 -0
- package/dist/commands/import/confluence.d.ts.map +1 -1
- package/dist/commands/import/confluence.js +25 -6
- package/dist/commands/import/confluence.js.map +1 -1
- package/dist/commands/import/git.js +1 -1
- package/dist/commands/import/jira.d.ts.map +1 -1
- package/dist/commands/import/jira.js +26 -6
- package/dist/commands/import/jira.js.map +1 -1
- package/dist/commands/links.js +1 -1
- package/dist/commands/links.js.map +1 -1
- package/dist/commands/local.d.ts +3 -0
- package/dist/commands/local.d.ts.map +1 -0
- package/dist/commands/local.js +71 -0
- package/dist/commands/local.js.map +1 -0
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +5 -32
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/mcp.d.ts +2 -0
- package/dist/commands/mcp.d.ts.map +1 -1
- package/dist/commands/mcp.js +34 -12
- package/dist/commands/mcp.js.map +1 -1
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +609 -163
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/why.d.ts.map +1 -1
- package/dist/commands/why.js +46 -4
- package/dist/commands/why.js.map +1 -1
- package/dist/index.js +10 -4
- package/dist/index.js.map +1 -1
- package/dist/lib/advisory-dedup.d.ts +3 -0
- package/dist/lib/advisory-dedup.d.ts.map +1 -0
- package/dist/lib/advisory-dedup.js +44 -0
- package/dist/lib/advisory-dedup.js.map +1 -0
- package/dist/lib/agent-rules.d.ts +10 -0
- package/dist/lib/agent-rules.d.ts.map +1 -0
- package/dist/lib/agent-rules.js +137 -0
- package/dist/lib/agent-rules.js.map +1 -0
- package/dist/lib/cli-oauth.d.ts +11 -0
- package/dist/lib/cli-oauth.d.ts.map +1 -0
- package/dist/lib/cli-oauth.js +71 -0
- package/dist/lib/cli-oauth.js.map +1 -0
- package/dist/lib/config.d.ts +10 -1
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +36 -1
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/errors.d.ts +5 -0
- package/dist/lib/errors.d.ts.map +1 -0
- package/dist/lib/errors.js +9 -0
- package/dist/lib/errors.js.map +1 -0
- package/dist/lib/fetchers/confluence.d.ts +4 -2
- package/dist/lib/fetchers/confluence.d.ts.map +1 -1
- package/dist/lib/fetchers/confluence.js +68 -12
- package/dist/lib/fetchers/confluence.js.map +1 -1
- package/dist/lib/fetchers/git.d.ts.map +1 -1
- package/dist/lib/fetchers/git.js +2 -0
- package/dist/lib/fetchers/git.js.map +1 -1
- package/dist/lib/fetchers/github.d.ts.map +1 -1
- package/dist/lib/fetchers/github.js +2 -0
- package/dist/lib/fetchers/github.js.map +1 -1
- package/dist/lib/fetchers/jira.d.ts +4 -2
- package/dist/lib/fetchers/jira.d.ts.map +1 -1
- package/dist/lib/fetchers/jira.js +30 -15
- package/dist/lib/fetchers/jira.js.map +1 -1
- package/dist/lib/fetchers/linear.d.ts.map +1 -1
- package/dist/lib/fetchers/linear.js +6 -1
- package/dist/lib/fetchers/linear.js.map +1 -1
- package/dist/lib/fetchers/notion.d.ts.map +1 -1
- package/dist/lib/fetchers/notion.js +29 -0
- package/dist/lib/fetchers/notion.js.map +1 -1
- package/dist/lib/fetchers/slack.d.ts.map +1 -1
- package/dist/lib/fetchers/slack.js +26 -0
- package/dist/lib/fetchers/slack.js.map +1 -1
- package/dist/lib/fetchers/teams.d.ts.map +1 -1
- package/dist/lib/fetchers/teams.js +3 -0
- package/dist/lib/fetchers/teams.js.map +1 -1
- package/dist/lib/fetchers/zoom.d.ts.map +1 -1
- package/dist/lib/fetchers/zoom.js +5 -0
- package/dist/lib/fetchers/zoom.js.map +1 -1
- package/dist/lib/format-date.d.ts +7 -0
- package/dist/lib/format-date.d.ts.map +1 -0
- package/dist/lib/format-date.js +26 -0
- package/dist/lib/format-date.js.map +1 -0
- package/dist/lib/gateway-client.d.ts +27 -2
- package/dist/lib/gateway-client.d.ts.map +1 -1
- package/dist/lib/gateway-client.js +39 -3
- package/dist/lib/gateway-client.js.map +1 -1
- package/dist/lib/git.d.ts.map +1 -1
- package/dist/lib/git.js +33 -16
- package/dist/lib/git.js.map +1 -1
- package/dist/lib/hook-payload.d.ts +20 -0
- package/dist/lib/hook-payload.d.ts.map +1 -0
- package/dist/lib/hook-payload.js +30 -0
- package/dist/lib/hook-payload.js.map +1 -0
- package/dist/lib/local-db.d.ts +51 -0
- package/dist/lib/local-db.d.ts.map +1 -0
- package/dist/lib/local-db.js +89 -0
- package/dist/lib/local-db.js.map +1 -0
- package/dist/lib/local-embeddings.d.ts +3 -0
- package/dist/lib/local-embeddings.d.ts.map +1 -0
- package/dist/lib/local-embeddings.js +20 -0
- package/dist/lib/local-embeddings.js.map +1 -0
- package/dist/lib/local-gateway-client.d.ts +98 -0
- package/dist/lib/local-gateway-client.d.ts.map +1 -0
- package/dist/lib/local-gateway-client.js +151 -0
- package/dist/lib/local-gateway-client.js.map +1 -0
- package/dist/lib/local-mode.d.ts +7 -0
- package/dist/lib/local-mode.d.ts.map +1 -0
- package/dist/lib/local-mode.js +39 -0
- package/dist/lib/local-mode.js.map +1 -0
- package/dist/lib/local-relationship-classifier.d.ts +14 -0
- package/dist/lib/local-relationship-classifier.d.ts.map +1 -0
- package/dist/lib/local-relationship-classifier.js +100 -0
- package/dist/lib/local-relationship-classifier.js.map +1 -0
- package/dist/lib/login-flow.d.ts +5 -0
- package/dist/lib/login-flow.d.ts.map +1 -0
- package/dist/lib/login-flow.js +64 -0
- package/dist/lib/login-flow.js.map +1 -0
- package/dist/lib/personal-import.d.ts +4 -0
- package/dist/lib/personal-import.d.ts.map +1 -1
- package/dist/lib/personal-import.js +133 -27
- package/dist/lib/personal-import.js.map +1 -1
- package/package.json +31 -12
- package/dist/lib/why-normalise.d.ts +0 -2
- package/dist/lib/why-normalise.d.ts.map +0 -1
- package/dist/lib/why-normalise.js +0 -39
- package/dist/lib/why-normalise.js.map +0 -1
|
@@ -2,26 +2,95 @@ import chalk from 'chalk';
|
|
|
2
2
|
import ora from 'ora';
|
|
3
3
|
import * as p from '@clack/prompts';
|
|
4
4
|
import { renderTable } from './table.js';
|
|
5
|
+
import { GatewayError } from './gateway-client.js';
|
|
5
6
|
const BATCH_SIZE = 20;
|
|
7
|
+
const BATCH_CONCURRENCY = 3;
|
|
8
|
+
// Cap TOTAL concurrent /ingest/batch calls across all imports running in
|
|
9
|
+
// parallel (align setup imports several connectors at once). Without this,
|
|
10
|
+
// IMPORT_CONCURRENCY x BATCH_CONCURRENCY swamps the gateway's DB pool and
|
|
11
|
+
// surfaces as 500 "timeout exceeded when trying to connect" (ALI-110).
|
|
12
|
+
const GLOBAL_INGEST_CONCURRENCY = Number(process.env['ALIGN_INGEST_CONCURRENCY']) || 6;
|
|
13
|
+
const INGEST_MAX_ATTEMPTS = 3;
|
|
14
|
+
const INGEST_BACKOFF_MS = 250;
|
|
15
|
+
let activeIngests = 0;
|
|
16
|
+
const ingestWaiters = [];
|
|
17
|
+
// Acquire one of the global ingest slots, run fn, release (waking the next
|
|
18
|
+
// waiter). Shared across every concurrent runPersonalImport.
|
|
19
|
+
async function withIngestSlot(fn) {
|
|
20
|
+
if (activeIngests >= GLOBAL_INGEST_CONCURRENCY) {
|
|
21
|
+
await new Promise((resolve) => ingestWaiters.push(resolve));
|
|
22
|
+
}
|
|
23
|
+
activeIngests++;
|
|
24
|
+
try {
|
|
25
|
+
return await fn();
|
|
26
|
+
}
|
|
27
|
+
finally {
|
|
28
|
+
activeIngests--;
|
|
29
|
+
ingestWaiters.shift()?.();
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
// A pool-connection timeout shows up as a 5xx; network failures as status 0.
|
|
33
|
+
// Both are transient - retrying after a short backoff usually succeeds. 4xx
|
|
34
|
+
// (bad request / auth) is not retried.
|
|
35
|
+
function isTransientGatewayError(err) {
|
|
36
|
+
return err instanceof GatewayError && (err.statusCode >= 500 || err.statusCode === 0);
|
|
37
|
+
}
|
|
38
|
+
async function ingestBatchResilient(fn) {
|
|
39
|
+
let lastErr;
|
|
40
|
+
for (let attempt = 1; attempt <= INGEST_MAX_ATTEMPTS; attempt++) {
|
|
41
|
+
try {
|
|
42
|
+
return await withIngestSlot(fn);
|
|
43
|
+
}
|
|
44
|
+
catch (err) {
|
|
45
|
+
lastErr = err;
|
|
46
|
+
if (!isTransientGatewayError(err) || attempt === INGEST_MAX_ATTEMPTS)
|
|
47
|
+
throw err;
|
|
48
|
+
await new Promise((r) => setTimeout(r, INGEST_BACKOFF_MS * 2 ** (attempt - 1)));
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
throw lastErr;
|
|
52
|
+
}
|
|
53
|
+
export async function runWithConcurrency(tasks, concurrency) {
|
|
54
|
+
const results = new Array(tasks.length);
|
|
55
|
+
let next = 0;
|
|
56
|
+
async function worker() {
|
|
57
|
+
while (next < tasks.length) {
|
|
58
|
+
const i = next++;
|
|
59
|
+
try {
|
|
60
|
+
results[i] = { status: 'fulfilled', value: await tasks[i]() };
|
|
61
|
+
}
|
|
62
|
+
catch (reason) {
|
|
63
|
+
results[i] = { status: 'rejected', reason };
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
await Promise.all(Array.from({ length: Math.min(concurrency, tasks.length) }, worker));
|
|
68
|
+
return results;
|
|
69
|
+
}
|
|
6
70
|
export async function runPersonalImport(items, client, opts) {
|
|
7
71
|
if (!items.length) {
|
|
8
72
|
p.log.warn(`No items found from ${opts.label}.`);
|
|
9
73
|
return 0;
|
|
10
74
|
}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
75
|
+
// Quiet mode (concurrent setup imports): skip the preview table, the animated
|
|
76
|
+
// spinner, and the multi-line footer - they clash when several imports run at
|
|
77
|
+
// once. A single compact completion line is printed at the end instead.
|
|
78
|
+
if (!opts.quiet) {
|
|
79
|
+
const preview = items.slice(0, 10);
|
|
80
|
+
const more = items.length - preview.length;
|
|
81
|
+
console.log(chalk.bold(`\nFound ${items.length} items from ${opts.label}\n`));
|
|
82
|
+
renderTable([
|
|
83
|
+
{ header: 'SOURCE', width: 48 },
|
|
84
|
+
{ header: 'TITLE', width: 50 },
|
|
85
|
+
], preview.map(i => [
|
|
86
|
+
i.source_url.replace(/https?:\/\//, '').slice(0, 46),
|
|
87
|
+
(i.title ?? i.raw_text.split('\n')[0]).slice(0, 48),
|
|
88
|
+
]));
|
|
89
|
+
if (more > 0)
|
|
90
|
+
console.log(chalk.dim(` ...and ${more} more\n`));
|
|
91
|
+
else
|
|
92
|
+
console.log('');
|
|
93
|
+
}
|
|
25
94
|
if (!opts.approve) {
|
|
26
95
|
const confirmed = await p.confirm({
|
|
27
96
|
message: `Import ${items.length} items to your decision graph?`,
|
|
@@ -37,27 +106,64 @@ export async function runPersonalImport(items, client, opts) {
|
|
|
37
106
|
}
|
|
38
107
|
let total = 0;
|
|
39
108
|
let relatedCount = 0;
|
|
40
|
-
|
|
41
|
-
|
|
109
|
+
let done = 0;
|
|
110
|
+
const failures = [];
|
|
111
|
+
const spinner = opts.quiet ? null : ora(`Importing 0/${batches.length} batches...`).start();
|
|
112
|
+
const results = await runWithConcurrency(batches.map((batch) => async () => {
|
|
42
113
|
try {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
114
|
+
return await ingestBatchResilient(() => client.ingestBatch(batch, { deferEnrichment: opts.deferEnrichment }));
|
|
115
|
+
}
|
|
116
|
+
finally {
|
|
117
|
+
done++;
|
|
118
|
+
if (spinner)
|
|
119
|
+
spinner.text = `Importing ${done}/${batches.length} batches...`;
|
|
120
|
+
}
|
|
121
|
+
}), BATCH_CONCURRENCY);
|
|
122
|
+
for (let i = 0; i < results.length; i++) {
|
|
123
|
+
const r = results[i];
|
|
124
|
+
if (r.status === 'fulfilled') {
|
|
125
|
+
total += r.value.snapshots.length;
|
|
126
|
+
for (const s of r.value.snapshots)
|
|
46
127
|
relatedCount += s.analysis?.relatedDecisions?.length ?? 0;
|
|
47
|
-
}
|
|
48
|
-
spinner.succeed(`Batch ${i + 1}/${batches.length} done (${result.snapshots.length} decisions)`);
|
|
49
128
|
}
|
|
50
|
-
|
|
51
|
-
|
|
129
|
+
else {
|
|
130
|
+
failures.push(`Batch ${i + 1}: ${r.reason.message}`);
|
|
52
131
|
}
|
|
53
132
|
}
|
|
54
|
-
|
|
55
|
-
|
|
133
|
+
// Quiet mode: one compact completion line; the shared footer is printed once
|
|
134
|
+
// by the caller after all concurrent imports finish.
|
|
135
|
+
if (opts.quiet) {
|
|
136
|
+
const conn = relatedCount > 0 ? `, ${relatedCount} connection${relatedCount === 1 ? '' : 's'}` : '';
|
|
137
|
+
const failNote = failures.length
|
|
138
|
+
? chalk.yellow(` (${failures.length} batch${failures.length > 1 ? 'es' : ''} failed)`)
|
|
139
|
+
: '';
|
|
140
|
+
console.log(` ${chalk.green('✓')} ${opts.label}: ${total} decision${total === 1 ? '' : 's'}${conn}${failNote}`);
|
|
141
|
+
for (const f of failures)
|
|
142
|
+
p.log.warn(f);
|
|
143
|
+
return total;
|
|
144
|
+
}
|
|
145
|
+
if (failures.length === 0) {
|
|
146
|
+
spinner.succeed(`Imported ${total} decisions from ${opts.label}`);
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
spinner.warn(`Imported ${total} decisions (${failures.length} batch${failures.length > 1 ? 'es' : ''} failed)`);
|
|
150
|
+
for (const f of failures)
|
|
151
|
+
p.log.warn(f);
|
|
152
|
+
}
|
|
56
153
|
if (relatedCount > 0) {
|
|
57
154
|
console.log(chalk.cyan(`${relatedCount} connections found with existing decisions in your graph.`));
|
|
58
155
|
}
|
|
59
|
-
|
|
60
|
-
|
|
156
|
+
if (opts.local) {
|
|
157
|
+
// Local mode: on-device SQLite, no web UI and relationships are computed
|
|
158
|
+
// synchronously - don't claim a background job or a browser link.
|
|
159
|
+
console.log(chalk.dim('Stored locally - run `align local status` to inspect your graph.'));
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
// Cloud personal: CLI/MCP-native. Don't push the web UI (a team surface);
|
|
163
|
+
// point to the CLI instead.
|
|
164
|
+
console.log(chalk.dim('Relationships across all your imported tools are detected automatically in the background.'));
|
|
165
|
+
console.log(chalk.dim('Query your graph: align ask "..." or align decisions list'));
|
|
166
|
+
}
|
|
61
167
|
console.log(chalk.dim('Tip: import more tools to build a richer cross-tool decision graph.'));
|
|
62
168
|
console.log('');
|
|
63
169
|
return total;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"personal-import.js","sourceRoot":"","sources":["../../src/lib/personal-import.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"personal-import.js","sourceRoot":"","sources":["../../src/lib/personal-import.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aligndottech/cli",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.4",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Align CLI - capture decisions, check alignment, and manage connectors",
|
|
6
|
+
"license": "MIT",
|
|
6
7
|
"bin": {
|
|
7
8
|
"align": "./dist/index.js"
|
|
8
9
|
},
|
|
@@ -12,27 +13,36 @@
|
|
|
12
13
|
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
13
14
|
"lint": "eslint .",
|
|
14
15
|
"test": "vitest run",
|
|
15
|
-
"test:watch": "vitest"
|
|
16
|
+
"test:watch": "vitest",
|
|
17
|
+
"test:coverage": "vitest run --coverage"
|
|
16
18
|
},
|
|
17
19
|
"dependencies": {
|
|
18
|
-
"commander": "^12.1.0",
|
|
19
20
|
"@clack/prompts": "^0.9.1",
|
|
21
|
+
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
22
|
+
"@xenova/transformers": "^2.17.2",
|
|
23
|
+
"better-sqlite3": "^12.10.0",
|
|
20
24
|
"chalk": "^5.3.0",
|
|
21
|
-
"
|
|
25
|
+
"commander": "^12.1.0",
|
|
22
26
|
"conf": "^13.0.1",
|
|
23
|
-
"open": "^10.1.0",
|
|
24
|
-
"execa": "^9.5.2",
|
|
25
27
|
"dotenv": "^16.4.7",
|
|
26
|
-
"
|
|
27
|
-
"
|
|
28
|
+
"eventsource": "^3.0.2",
|
|
29
|
+
"execa": "^9.5.2",
|
|
30
|
+
"open": "^10.1.0",
|
|
31
|
+
"ora": "^8.1.1"
|
|
28
32
|
},
|
|
29
33
|
"devDependencies": {
|
|
30
|
-
"@
|
|
34
|
+
"@eslint/js": "^9.0.0",
|
|
35
|
+
"@types/better-sqlite3": "^7.6.13",
|
|
31
36
|
"@types/eventsource": "^1.1.15",
|
|
37
|
+
"@types/node": "^22.0.0",
|
|
38
|
+
"@typescript-eslint/eslint-plugin": "^8.0.0",
|
|
39
|
+
"@typescript-eslint/parser": "^8.0.0",
|
|
40
|
+
"@vitest/coverage-v8": "^3.2.6",
|
|
32
41
|
"eslint": "^9.0.0",
|
|
33
|
-
"
|
|
42
|
+
"globals": "^15.0.0",
|
|
34
43
|
"tsx": "^4.19.0",
|
|
35
|
-
"
|
|
44
|
+
"typescript": "^5.6.0",
|
|
45
|
+
"vitest": "^3.2.4"
|
|
36
46
|
},
|
|
37
47
|
"engines": {
|
|
38
48
|
"node": ">=20"
|
|
@@ -43,5 +53,14 @@
|
|
|
43
53
|
"files": [
|
|
44
54
|
"dist",
|
|
45
55
|
"README.md"
|
|
46
|
-
]
|
|
56
|
+
],
|
|
57
|
+
"repository": {
|
|
58
|
+
"type": "git",
|
|
59
|
+
"url": "https://github.com/aligndottech/align-cli"
|
|
60
|
+
},
|
|
61
|
+
"pnpm": {
|
|
62
|
+
"onlyBuiltDependencies": [
|
|
63
|
+
"better-sqlite3"
|
|
64
|
+
]
|
|
65
|
+
}
|
|
47
66
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"why-normalise.d.ts","sourceRoot":"","sources":["../../src/lib/why-normalise.ts"],"names":[],"mappings":"AA2BA,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAWnD"}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
const STRIP_PREFIXES = [
|
|
2
|
-
// "why do/does/did we/it/they ..."
|
|
3
|
-
/^why\s+(do|does|did)\s+(we|it|they)\s+/i,
|
|
4
|
-
// "why is/are/was/were we/it/they ..."
|
|
5
|
-
/^why\s+(is|are|was|were)\s+(we|it|they)\s+/i,
|
|
6
|
-
// "why should/would/can/could/have/has we/it/they ..."
|
|
7
|
-
/^why\s+(should|would|can|could|have|has)\s+(we|it|they)\s+/i,
|
|
8
|
-
// "why verb ..." (strip verb too, keep the rest)
|
|
9
|
-
/^why\s+(do|does|did|is|are|was|were|should|would|can|could|have|has)\s+/i,
|
|
10
|
-
// bare "why ..."
|
|
11
|
-
/^why\s+/i,
|
|
12
|
-
// "do/does/did we/it/they ..."
|
|
13
|
-
/^(do|does|did)\s+(we|it|they)\s+/i,
|
|
14
|
-
// "what do/does/did we/it/they ..."
|
|
15
|
-
/^what\s+(do|does|did)\s+(we|it|they)\s+/i,
|
|
16
|
-
// "what is/are/was/were ..."
|
|
17
|
-
/^what\s+(is|are|was|were)\s+/i,
|
|
18
|
-
// bare "what ..."
|
|
19
|
-
/^what\s+/i,
|
|
20
|
-
// "how do/does/did we/it/they ..."
|
|
21
|
-
/^how\s+(do|does|did)\s+(we|it|they)\s+/i,
|
|
22
|
-
// "how verb ..."
|
|
23
|
-
/^how\s+(does|do|did|is|are|was|were)\s+/i,
|
|
24
|
-
// bare "how ..."
|
|
25
|
-
/^how\s+/i,
|
|
26
|
-
];
|
|
27
|
-
export function normaliseWhyQuery(q) {
|
|
28
|
-
const trimmed = q.trim();
|
|
29
|
-
for (const re of STRIP_PREFIXES) {
|
|
30
|
-
if (re.test(trimmed)) {
|
|
31
|
-
const stripped = trimmed.replace(re, '').trim();
|
|
32
|
-
if (stripped.length > 0) {
|
|
33
|
-
return stripped;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
return trimmed;
|
|
38
|
-
}
|
|
39
|
-
//# sourceMappingURL=why-normalise.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"why-normalise.js","sourceRoot":"","sources":["../../src/lib/why-normalise.ts"],"names":[],"mappings":"AAAA,MAAM,cAAc,GAAa;IAC/B,mCAAmC;IACnC,yCAAyC;IACzC,uCAAuC;IACvC,6CAA6C;IAC7C,uDAAuD;IACvD,6DAA6D;IAC7D,iDAAiD;IACjD,0EAA0E;IAC1E,iBAAiB;IACjB,UAAU;IACV,+BAA+B;IAC/B,mCAAmC;IACnC,oCAAoC;IACpC,0CAA0C;IAC1C,6BAA6B;IAC7B,+BAA+B;IAC/B,kBAAkB;IAClB,WAAW;IACX,mCAAmC;IACnC,yCAAyC;IACzC,iBAAiB;IACjB,0CAA0C;IAC1C,iBAAiB;IACjB,UAAU;CACX,CAAC;AAEF,MAAM,UAAU,iBAAiB,CAAC,CAAS;IACzC,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACzB,KAAK,MAAM,EAAE,IAAI,cAAc,EAAE,CAAC;QAChC,IAAI,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACrB,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YAChD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxB,OAAO,QAAQ,CAAC;YAClB,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
|