@doist/todoist-cli 1.50.0 → 1.52.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 +12 -0
- package/dist/commands/folder/create.d.ts +11 -0
- package/dist/commands/folder/create.d.ts.map +1 -0
- package/dist/commands/folder/create.js +35 -0
- package/dist/commands/folder/create.js.map +1 -0
- package/dist/commands/folder/delete.d.ts +6 -0
- package/dist/commands/folder/delete.d.ts.map +1 -0
- package/dist/commands/folder/delete.js +21 -0
- package/dist/commands/folder/delete.js.map +1 -0
- package/dist/commands/folder/helpers.d.ts +9 -0
- package/dist/commands/folder/helpers.d.ts.map +1 -0
- package/dist/commands/folder/helpers.js +34 -0
- package/dist/commands/folder/helpers.js.map +1 -0
- package/dist/commands/folder/index.d.ts +3 -0
- package/dist/commands/folder/index.d.ts.map +1 -0
- package/dist/commands/folder/index.js +109 -0
- package/dist/commands/folder/index.js.map +1 -0
- package/dist/commands/folder/list.d.ts +3 -0
- package/dist/commands/folder/list.d.ts.map +1 -0
- package/dist/commands/folder/list.js +42 -0
- package/dist/commands/folder/list.js.map +1 -0
- package/dist/commands/folder/update.d.ts +10 -0
- package/dist/commands/folder/update.d.ts.map +1 -0
- package/dist/commands/folder/update.js +33 -0
- package/dist/commands/folder/update.js.map +1 -0
- package/dist/commands/folder/view.d.ts +8 -0
- package/dist/commands/folder/view.d.ts.map +1 -0
- package/dist/commands/folder/view.js +52 -0
- package/dist/commands/folder/view.js.map +1 -0
- package/dist/commands/hc/index.d.ts.map +1 -1
- package/dist/commands/hc/index.js +14 -1
- package/dist/commands/hc/index.js.map +1 -1
- package/dist/commands/hc/locale.d.ts +3 -0
- package/dist/commands/hc/locale.d.ts.map +1 -0
- package/dist/commands/hc/locale.js +39 -0
- package/dist/commands/hc/locale.js.map +1 -0
- package/dist/commands/hc/search.d.ts.map +1 -1
- package/dist/commands/hc/search.js +3 -2
- package/dist/commands/hc/search.js.map +1 -1
- package/dist/commands/hc/view.d.ts.map +1 -1
- package/dist/commands/hc/view.js +6 -1
- package/dist/commands/hc/view.js.map +1 -1
- package/dist/commands/project/index.d.ts.map +1 -1
- package/dist/commands/project/index.js +2 -0
- package/dist/commands/project/index.js.map +1 -1
- package/dist/commands/project/update.d.ts +2 -1
- package/dist/commands/project/update.d.ts.map +1 -1
- package/dist/commands/project/update.js +21 -0
- package/dist/commands/project/update.js.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/api/core.d.ts.map +1 -1
- package/dist/lib/api/core.js +6 -0
- package/dist/lib/api/core.js.map +1 -1
- package/dist/lib/config.d.ts +4 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +29 -0
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/help-center.d.ts +1 -0
- package/dist/lib/help-center.d.ts.map +1 -1
- package/dist/lib/help-center.js +13 -3
- package/dist/lib/help-center.js.map +1 -1
- package/dist/lib/output.d.ts +1 -1
- package/dist/lib/output.d.ts.map +1 -1
- package/dist/lib/output.js +6 -0
- package/dist/lib/output.js.map +1 -1
- package/dist/lib/permissions.d.ts.map +1 -1
- package/dist/lib/permissions.js +3 -0
- package/dist/lib/permissions.js.map +1 -1
- package/dist/lib/skills/content.d.ts +1 -1
- package/dist/lib/skills/content.d.ts.map +1 -1
- package/dist/lib/skills/content.js +10 -2
- package/dist/lib/skills/content.js.map +1 -1
- package/package.json +4 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,15 @@
|
|
|
1
|
+
## [1.52.0](https://github.com/Doist/todoist-cli/compare/v1.51.0...v1.52.0) (2026-04-21)
|
|
2
|
+
|
|
3
|
+
### Features
|
|
4
|
+
|
|
5
|
+
* **hc:** persist a default Help Center locale via `hc locale --set-default` ([#284](https://github.com/Doist/todoist-cli/issues/284)) ([a4e9d6d](https://github.com/Doist/todoist-cli/commit/a4e9d6d45bc8e9ba19965751242d8f5932bf1726))
|
|
6
|
+
|
|
7
|
+
## [1.51.0](https://github.com/Doist/todoist-cli/compare/v1.50.0...v1.51.0) (2026-04-20)
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
* add folder command group ([#248](https://github.com/Doist/todoist-cli/issues/248)) ([4a17765](https://github.com/Doist/todoist-cli/commit/4a17765e15a45c370fac00810b1a6a7ebabfceb0))
|
|
12
|
+
|
|
1
13
|
## [1.50.0](https://github.com/Doist/todoist-cli/compare/v1.49.0...v1.50.0) (2026-04-20)
|
|
2
14
|
|
|
3
15
|
### Features
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
interface CreateFolderOptions {
|
|
2
|
+
name: string;
|
|
3
|
+
workspace?: string;
|
|
4
|
+
defaultOrder?: number;
|
|
5
|
+
childOrder?: number;
|
|
6
|
+
json?: boolean;
|
|
7
|
+
dryRun?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare function createFolder(workspaceRef: string, options: CreateFolderOptions): Promise<void>;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=create.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/commands/folder/create.ts"],"names":[],"mappings":"AAMA,UAAU,mBAAmB;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,MAAM,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,wBAAsB,YAAY,CAC9B,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,mBAAmB,GAC7B,OAAO,CAAC,IAAI,CAAC,CAmCf"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { getApi } from '../../lib/api/core.js';
|
|
3
|
+
import { isQuiet } from '../../lib/global-args.js';
|
|
4
|
+
import { formatJson, printDryRun } from '../../lib/output.js';
|
|
5
|
+
import { resolveWorkspaceRef } from '../../lib/refs.js';
|
|
6
|
+
export async function createFolder(workspaceRef, options) {
|
|
7
|
+
if (options.dryRun) {
|
|
8
|
+
printDryRun('create folder', {
|
|
9
|
+
Name: options.name,
|
|
10
|
+
Workspace: workspaceRef,
|
|
11
|
+
'Default order': options.defaultOrder !== undefined ? String(options.defaultOrder) : undefined,
|
|
12
|
+
'Child order': options.childOrder !== undefined ? String(options.childOrder) : undefined,
|
|
13
|
+
});
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
const workspace = await resolveWorkspaceRef(workspaceRef);
|
|
17
|
+
const api = await getApi();
|
|
18
|
+
const folder = await api.addFolder({
|
|
19
|
+
name: options.name,
|
|
20
|
+
workspaceId: workspace.id,
|
|
21
|
+
defaultOrder: options.defaultOrder,
|
|
22
|
+
childOrder: options.childOrder,
|
|
23
|
+
});
|
|
24
|
+
if (options.json) {
|
|
25
|
+
console.log(formatJson(folder, 'folder'));
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
if (isQuiet()) {
|
|
29
|
+
console.log(folder.id);
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
console.log(`Created: ${folder.name}`);
|
|
33
|
+
console.log(chalk.dim(`ID: ${folder.id}`));
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=create.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/commands/folder/create.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAA;AAClD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAWvD,MAAM,CAAC,KAAK,UAAU,YAAY,CAC9B,YAAoB,EACpB,OAA4B;IAE5B,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACjB,WAAW,CAAC,eAAe,EAAE;YACzB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,SAAS,EAAE,YAAY;YACvB,eAAe,EACX,OAAO,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS;YACjF,aAAa,EACT,OAAO,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS;SAChF,CAAC,CAAA;QACF,OAAM;IACV,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,mBAAmB,CAAC,YAAY,CAAC,CAAA;IACzD,MAAM,GAAG,GAAG,MAAM,MAAM,EAAE,CAAA;IAE1B,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,SAAS,CAAC;QAC/B,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,WAAW,EAAE,SAAS,CAAC,EAAE;QACzB,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,UAAU,EAAE,OAAO,CAAC,UAAU;KACjC,CAAC,CAAA;IAEF,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAA;QACzC,OAAM;IACV,CAAC;IAED,IAAI,OAAO,EAAE,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QACtB,OAAM;IACV,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,YAAY,MAAM,CAAC,IAAI,EAAE,CAAC,CAAA;IACtC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;AAC9C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../src/commands/folder/delete.ts"],"names":[],"mappings":"AAKA,wBAAsB,YAAY,CAC9B,GAAG,EAAE,MAAM,EACX,OAAO,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GACjE,OAAO,CAAC,IAAI,CAAC,CAiBf"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { getApi } from '../../lib/api/core.js';
|
|
2
|
+
import { isQuiet } from '../../lib/global-args.js';
|
|
3
|
+
import { printDryRun } from '../../lib/output.js';
|
|
4
|
+
import { resolveFolderByRef } from './helpers.js';
|
|
5
|
+
export async function deleteFolder(ref, options) {
|
|
6
|
+
const folder = await resolveFolderByRef(ref, options);
|
|
7
|
+
if (options.dryRun) {
|
|
8
|
+
printDryRun('delete folder', { Folder: folder.name });
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
if (!options.yes) {
|
|
12
|
+
console.log(`Would delete folder: ${folder.name}`);
|
|
13
|
+
console.log('Use --yes to confirm.');
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
const api = await getApi();
|
|
17
|
+
await api.deleteFolder(folder.id);
|
|
18
|
+
if (!isQuiet())
|
|
19
|
+
console.log(`Deleted: ${folder.name} (id:${folder.id})`);
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=delete.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../src/commands/folder/delete.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAA;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAEjD,MAAM,CAAC,KAAK,UAAU,YAAY,CAC9B,GAAW,EACX,OAAgE;IAEhE,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;IAErD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACjB,WAAW,CAAC,eAAe,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAA;QACrD,OAAM;IACV,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,wBAAwB,MAAM,CAAC,IAAI,EAAE,CAAC,CAAA;QAClD,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAA;QACpC,OAAM;IACV,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,MAAM,EAAE,CAAA;IAC1B,MAAM,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;IACjC,IAAI,CAAC,OAAO,EAAE;QAAE,OAAO,CAAC,GAAG,CAAC,YAAY,MAAM,CAAC,IAAI,QAAQ,MAAM,CAAC,EAAE,GAAG,CAAC,CAAA;AAC5E,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Folder } from '@doist/todoist-sdk';
|
|
2
|
+
import { type Workspace } from '../../lib/api/workspaces.js';
|
|
3
|
+
export declare function resolveWorkspaceForFolder(options: {
|
|
4
|
+
workspace?: string;
|
|
5
|
+
}): Promise<Workspace>;
|
|
6
|
+
export declare function resolveFolderByRef(ref: string, options: {
|
|
7
|
+
workspace?: string;
|
|
8
|
+
}): Promise<Folder>;
|
|
9
|
+
//# sourceMappingURL=helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/commands/folder/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAEhD,OAAO,EAAmB,KAAK,SAAS,EAAE,MAAM,6BAA6B,CAAA;AAI7E,wBAAsB,yBAAyB,CAAC,OAAO,EAAE;IACrD,SAAS,CAAC,EAAE,MAAM,CAAA;CACrB,GAAG,OAAO,CAAC,SAAS,CAAC,CAkBrB;AAED,wBAAsB,kBAAkB,CACpC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAChC,OAAO,CAAC,MAAM,CAAC,CAejB"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { getApi } from '../../lib/api/core.js';
|
|
2
|
+
import { fetchWorkspaces } from '../../lib/api/workspaces.js';
|
|
3
|
+
import { CliError } from '../../lib/errors.js';
|
|
4
|
+
import { resolveFolderRef, resolveWorkspaceRef } from '../../lib/refs.js';
|
|
5
|
+
export async function resolveWorkspaceForFolder(options) {
|
|
6
|
+
if (options.workspace) {
|
|
7
|
+
return resolveWorkspaceRef(options.workspace);
|
|
8
|
+
}
|
|
9
|
+
const workspaces = await fetchWorkspaces();
|
|
10
|
+
if (workspaces.length === 0) {
|
|
11
|
+
throw new CliError('WORKSPACE_NOT_FOUND', 'No workspaces found. Folders require a workspace.');
|
|
12
|
+
}
|
|
13
|
+
if (workspaces.length === 1) {
|
|
14
|
+
return workspaces[0];
|
|
15
|
+
}
|
|
16
|
+
throw new CliError('WORKSPACE_NOT_FOUND', 'Multiple workspaces found. Specify --workspace.', [
|
|
17
|
+
'Available workspaces:',
|
|
18
|
+
...workspaces.map((w) => ` "${w.name}" (id:${w.id})`),
|
|
19
|
+
]);
|
|
20
|
+
}
|
|
21
|
+
export async function resolveFolderByRef(ref, options) {
|
|
22
|
+
const api = await getApi();
|
|
23
|
+
// id:xxx reference — fetch directly, no workspace needed
|
|
24
|
+
if (ref.startsWith('id:')) {
|
|
25
|
+
const id = ref.slice(3);
|
|
26
|
+
return api.getFolder(id);
|
|
27
|
+
}
|
|
28
|
+
// Otherwise resolve via workspace-scoped folder list
|
|
29
|
+
const workspace = await resolveWorkspaceForFolder(options);
|
|
30
|
+
const folder = await resolveFolderRef(ref, workspace.id);
|
|
31
|
+
// Fetch the full Folder object from the REST API
|
|
32
|
+
return api.getFolder(folder.id);
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/commands/folder/helpers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAC9C,OAAO,EAAE,eAAe,EAAkB,MAAM,6BAA6B,CAAA;AAC7E,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAC9C,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAEzE,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,OAE/C;IACG,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACpB,OAAO,mBAAmB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;IACjD,CAAC;IACD,MAAM,UAAU,GAAG,MAAM,eAAe,EAAE,CAAA;IAC1C,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,QAAQ,CACd,qBAAqB,EACrB,mDAAmD,CACtD,CAAA;IACL,CAAC;IACD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,UAAU,CAAC,CAAC,CAAC,CAAA;IACxB,CAAC;IACD,MAAM,IAAI,QAAQ,CAAC,qBAAqB,EAAE,iDAAiD,EAAE;QACzF,uBAAuB;QACvB,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC;KACzD,CAAC,CAAA;AACN,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACpC,GAAW,EACX,OAA+B;IAE/B,MAAM,GAAG,GAAG,MAAM,MAAM,EAAE,CAAA;IAE1B,yDAAyD;IACzD,IAAI,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QACvB,OAAO,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;IAC5B,CAAC;IAED,qDAAqD;IACrD,MAAM,SAAS,GAAG,MAAM,yBAAyB,CAAC,OAAO,CAAC,CAAA;IAC1D,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE,SAAS,CAAC,EAAE,CAAC,CAAA;IAExD,iDAAiD;IACjD,OAAO,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;AACnC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/folder/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAoBnC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0H5D"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { CURSOR_DESCRIPTION } from '../../lib/constants.js';
|
|
2
|
+
import { CliError } from '../../lib/errors.js';
|
|
3
|
+
import { createFolder } from './create.js';
|
|
4
|
+
import { deleteFolder } from './delete.js';
|
|
5
|
+
import { listFolders } from './list.js';
|
|
6
|
+
import { updateFolder } from './update.js';
|
|
7
|
+
import { viewFolder } from './view.js';
|
|
8
|
+
function parseOrderArg(val) {
|
|
9
|
+
const n = Number(val);
|
|
10
|
+
if (!Number.isInteger(n) || n < 0) {
|
|
11
|
+
throw new CliError('INVALID_ORDER', `Invalid order value: "${val}"`, [
|
|
12
|
+
'Order must be a non-negative integer (e.g., 0 for top of list)',
|
|
13
|
+
]);
|
|
14
|
+
}
|
|
15
|
+
return n;
|
|
16
|
+
}
|
|
17
|
+
export function registerFolderCommand(program) {
|
|
18
|
+
const folder = program
|
|
19
|
+
.command('folder')
|
|
20
|
+
.description('Manage workspace folders')
|
|
21
|
+
.addHelpText('after', `
|
|
22
|
+
Examples:
|
|
23
|
+
td folder list "Acme"
|
|
24
|
+
td folder view "Engineering"
|
|
25
|
+
td folder create "Acme" --name "Engineering"
|
|
26
|
+
td folder delete "Engineering" --workspace "Acme" --yes`);
|
|
27
|
+
const listCmd = folder
|
|
28
|
+
.command('list [workspace]')
|
|
29
|
+
.description('List folders in a workspace')
|
|
30
|
+
.option('--workspace <ref>', 'Workspace name or id:xxx')
|
|
31
|
+
.option('--limit <n>', 'Limit number of results')
|
|
32
|
+
.option('--cursor <cursor>', CURSOR_DESCRIPTION)
|
|
33
|
+
.option('--all', 'Fetch all results (no limit)')
|
|
34
|
+
.option('--json', 'Output as JSON')
|
|
35
|
+
.option('--ndjson', 'Output as newline-delimited JSON')
|
|
36
|
+
.action((refArg, options) => {
|
|
37
|
+
if (refArg && options.workspace) {
|
|
38
|
+
throw new CliError('CONFLICTING_OPTIONS', 'Cannot specify workspace both as argument and --workspace flag');
|
|
39
|
+
}
|
|
40
|
+
const ref = refArg || options.workspace;
|
|
41
|
+
if (!ref) {
|
|
42
|
+
listCmd.help();
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
return listFolders(ref, options);
|
|
46
|
+
});
|
|
47
|
+
folder
|
|
48
|
+
.command('view [ref]', { isDefault: true })
|
|
49
|
+
.description('View folder details and contained projects')
|
|
50
|
+
.option('--workspace <ref>', 'Workspace name or id:xxx (for name-based lookup)')
|
|
51
|
+
.option('--json', 'Output as JSON')
|
|
52
|
+
.option('--full', 'Include all fields in JSON output')
|
|
53
|
+
.action((ref, options) => {
|
|
54
|
+
if (!ref) {
|
|
55
|
+
folder.help();
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
return viewFolder(ref, options);
|
|
59
|
+
});
|
|
60
|
+
const createCmd = folder
|
|
61
|
+
.command('create [workspace]')
|
|
62
|
+
.description('Create a folder')
|
|
63
|
+
.option('--workspace <ref>', 'Workspace name or id:xxx')
|
|
64
|
+
.option('--name <name>', 'Folder name (required)')
|
|
65
|
+
.option('--default-order <n>', 'Default order for projects in the folder', parseOrderArg)
|
|
66
|
+
.option('--child-order <n>', 'Order position of the folder', parseOrderArg)
|
|
67
|
+
.option('--json', 'Output the created folder as JSON')
|
|
68
|
+
.option('--dry-run', 'Preview what would happen without executing')
|
|
69
|
+
.action((refArg, options) => {
|
|
70
|
+
if (refArg && options.workspace) {
|
|
71
|
+
throw new CliError('CONFLICTING_OPTIONS', 'Cannot specify workspace both as argument and --workspace flag');
|
|
72
|
+
}
|
|
73
|
+
const ref = refArg || options.workspace;
|
|
74
|
+
if (!ref || !options.name) {
|
|
75
|
+
createCmd.help();
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
return createFolder(ref, options);
|
|
79
|
+
});
|
|
80
|
+
const updateCmd = folder
|
|
81
|
+
.command('update [ref]')
|
|
82
|
+
.description('Update a folder')
|
|
83
|
+
.option('--workspace <ref>', 'Workspace name or id:xxx (for name-based lookup)')
|
|
84
|
+
.option('--name <name>', 'New folder name')
|
|
85
|
+
.option('--default-order <n>', 'New default order for projects', parseOrderArg)
|
|
86
|
+
.option('--json', 'Output the updated folder as JSON')
|
|
87
|
+
.option('--dry-run', 'Preview what would happen without executing')
|
|
88
|
+
.action((ref, options) => {
|
|
89
|
+
if (!ref) {
|
|
90
|
+
updateCmd.help();
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
return updateFolder(ref, options);
|
|
94
|
+
});
|
|
95
|
+
const deleteCmd = folder
|
|
96
|
+
.command('delete [ref]')
|
|
97
|
+
.description('Delete a folder')
|
|
98
|
+
.option('--workspace <ref>', 'Workspace name or id:xxx (for name-based lookup)')
|
|
99
|
+
.option('--yes', 'Confirm deletion')
|
|
100
|
+
.option('--dry-run', 'Preview what would happen without executing')
|
|
101
|
+
.action((ref, options) => {
|
|
102
|
+
if (!ref) {
|
|
103
|
+
deleteCmd.help();
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
return deleteFolder(ref, options);
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/folder/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/folder/list.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAKhE,wBAAsB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CA6C3F"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { getApi } from '../../lib/api/core.js';
|
|
3
|
+
import { formatNextCursorFooter } from '../../lib/output.js';
|
|
4
|
+
import { paginate } from '../../lib/pagination.js';
|
|
5
|
+
import { resolveWorkspaceRef } from '../../lib/refs.js';
|
|
6
|
+
export async function listFolders(ref, options) {
|
|
7
|
+
const workspace = await resolveWorkspaceRef(ref);
|
|
8
|
+
const api = await getApi();
|
|
9
|
+
const targetLimit = options.all
|
|
10
|
+
? Number.MAX_SAFE_INTEGER
|
|
11
|
+
: options.limit
|
|
12
|
+
? parseInt(options.limit, 10)
|
|
13
|
+
: 300;
|
|
14
|
+
const { results: folders, nextCursor } = await paginate((cursor, limit) => api.getFolders({
|
|
15
|
+
workspaceId: workspace.id,
|
|
16
|
+
cursor: cursor ?? undefined,
|
|
17
|
+
limit,
|
|
18
|
+
}), { limit: targetLimit, startCursor: options.cursor });
|
|
19
|
+
if (options.json) {
|
|
20
|
+
console.log(JSON.stringify({ results: folders, nextCursor }, null, 2));
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
if (options.ndjson) {
|
|
24
|
+
for (const folder of folders) {
|
|
25
|
+
console.log(JSON.stringify(folder));
|
|
26
|
+
}
|
|
27
|
+
if (nextCursor) {
|
|
28
|
+
console.log(JSON.stringify({ _meta: true, nextCursor }));
|
|
29
|
+
}
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
if (folders.length === 0) {
|
|
33
|
+
console.log('No folders found.');
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
for (const folder of folders) {
|
|
37
|
+
const id = chalk.dim(folder.id);
|
|
38
|
+
console.log(`${id} ${folder.name}`);
|
|
39
|
+
}
|
|
40
|
+
console.log(formatNextCursorFooter(nextCursor));
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/folder/list.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAE9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAA;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAEvD,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,GAAW,EAAE,OAA6B;IACxE,MAAM,SAAS,GAAG,MAAM,mBAAmB,CAAC,GAAG,CAAC,CAAA;IAChD,MAAM,GAAG,GAAG,MAAM,MAAM,EAAE,CAAA;IAE1B,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG;QAC3B,CAAC,CAAC,MAAM,CAAC,gBAAgB;QACzB,CAAC,CAAC,OAAO,CAAC,KAAK;YACb,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;YAC7B,CAAC,CAAC,GAAG,CAAA;IAEX,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,MAAM,QAAQ,CACnD,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CACd,GAAG,CAAC,UAAU,CAAC;QACX,WAAW,EAAE,SAAS,CAAC,EAAE;QACzB,MAAM,EAAE,MAAM,IAAI,SAAS;QAC3B,KAAK;KACR,CAAC,EACN,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,CAAC,MAAM,EAAE,CACtD,CAAA;IAED,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;QACtE,OAAM;IACV,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACjB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAA;QACvC,CAAC;QACD,IAAI,UAAU,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC,CAAA;QAC5D,CAAC;QACD,OAAM;IACV,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAA;QAChC,OAAM;IACV,CAAC;IAED,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC3B,MAAM,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QAC/B,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,CAAA;IACxC,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAC,CAAA;AACnD,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
interface UpdateFolderOptions {
|
|
2
|
+
name?: string;
|
|
3
|
+
defaultOrder?: number;
|
|
4
|
+
workspace?: string;
|
|
5
|
+
json?: boolean;
|
|
6
|
+
dryRun?: boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare function updateFolder(ref: string, options: UpdateFolderOptions): Promise<void>;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=update.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/commands/folder/update.ts"],"names":[],"mappings":"AAMA,UAAU,mBAAmB;IACzB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,MAAM,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoC3F"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { getApi } from '../../lib/api/core.js';
|
|
2
|
+
import { CliError } from '../../lib/errors.js';
|
|
3
|
+
import { isQuiet } from '../../lib/global-args.js';
|
|
4
|
+
import { formatJson, printDryRun } from '../../lib/output.js';
|
|
5
|
+
import { resolveFolderByRef } from './helpers.js';
|
|
6
|
+
export async function updateFolder(ref, options) {
|
|
7
|
+
const folder = await resolveFolderByRef(ref, options);
|
|
8
|
+
const args = {};
|
|
9
|
+
if (options.name)
|
|
10
|
+
args.name = options.name;
|
|
11
|
+
if (options.defaultOrder !== undefined)
|
|
12
|
+
args.defaultOrder = options.defaultOrder;
|
|
13
|
+
if (Object.keys(args).length === 0) {
|
|
14
|
+
throw new CliError('NO_CHANGES', 'No changes specified.');
|
|
15
|
+
}
|
|
16
|
+
if (options.dryRun) {
|
|
17
|
+
printDryRun('update folder', {
|
|
18
|
+
Folder: folder.name,
|
|
19
|
+
Name: args.name,
|
|
20
|
+
'Default order': args.defaultOrder !== undefined ? String(args.defaultOrder) : undefined,
|
|
21
|
+
});
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
const api = await getApi();
|
|
25
|
+
const updated = await api.updateFolder(folder.id, args);
|
|
26
|
+
if (options.json) {
|
|
27
|
+
console.log(formatJson(updated, 'folder'));
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
if (!isQuiet())
|
|
31
|
+
console.log(`Updated: ${folder.name}${options.name ? ` → ${updated.name}` : ''} (id:${folder.id})`);
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/commands/folder/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAA;AAClD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAUjD,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAW,EAAE,OAA4B;IACxE,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;IAErD,MAAM,IAAI,GAGN,EAAE,CAAA;IACN,IAAI,OAAO,CAAC,IAAI;QAAE,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAA;IAC1C,IAAI,OAAO,CAAC,YAAY,KAAK,SAAS;QAAE,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAA;IAEhF,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,QAAQ,CAAC,YAAY,EAAE,uBAAuB,CAAC,CAAA;IAC7D,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACjB,WAAW,CAAC,eAAe,EAAE;YACzB,MAAM,EAAE,MAAM,CAAC,IAAI;YACnB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,eAAe,EACX,IAAI,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS;SAC9E,CAAC,CAAA;QACF,OAAM;IACV,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,MAAM,EAAE,CAAA;IAC1B,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;IAEvD,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAA;QAC1C,OAAM;IACV,CAAC;IAED,IAAI,CAAC,OAAO,EAAE;QACV,OAAO,CAAC,GAAG,CACP,YAAY,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,MAAM,CAAC,EAAE,GAAG,CACzF,CAAA;AACT,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view.d.ts","sourceRoot":"","sources":["../../../src/commands/folder/view.ts"],"names":[],"mappings":"AAMA,UAAU,iBAAiB;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,IAAI,CAAC,EAAE,OAAO,CAAA;CACjB;AAED,wBAAsB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAsDvF"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { getApi } from '../../lib/api/core.js';
|
|
3
|
+
import { paginate } from '../../lib/pagination.js';
|
|
4
|
+
import { resolveWorkspaceRef } from '../../lib/refs.js';
|
|
5
|
+
import { resolveFolderByRef } from './helpers.js';
|
|
6
|
+
export async function viewFolder(ref, options) {
|
|
7
|
+
const folder = await resolveFolderByRef(ref, options);
|
|
8
|
+
const api = await getApi();
|
|
9
|
+
const { results: projects } = await paginate((cursor, limit) => api.getProjects({ folderId: folder.id, cursor: cursor ?? undefined, limit }), { limit: Number.MAX_SAFE_INTEGER });
|
|
10
|
+
if (options.json) {
|
|
11
|
+
const output = options.full
|
|
12
|
+
? { folder, projects }
|
|
13
|
+
: {
|
|
14
|
+
folder: {
|
|
15
|
+
id: folder.id,
|
|
16
|
+
name: folder.name,
|
|
17
|
+
workspaceId: folder.workspaceId,
|
|
18
|
+
},
|
|
19
|
+
projects: projects.map((p) => ({
|
|
20
|
+
id: p.id,
|
|
21
|
+
name: p.name,
|
|
22
|
+
})),
|
|
23
|
+
};
|
|
24
|
+
console.log(JSON.stringify(output, null, 2));
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
// Resolve workspace name for display
|
|
28
|
+
let workspaceName;
|
|
29
|
+
try {
|
|
30
|
+
const workspace = await resolveWorkspaceRef(`id:${folder.workspaceId}`);
|
|
31
|
+
workspaceName = workspace.name;
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
// workspace lookup is best-effort for display
|
|
35
|
+
}
|
|
36
|
+
console.log(chalk.bold(folder.name));
|
|
37
|
+
console.log(chalk.dim(`ID: ${folder.id}`));
|
|
38
|
+
if (workspaceName) {
|
|
39
|
+
console.log(chalk.dim(`Workspace: ${workspaceName}`));
|
|
40
|
+
}
|
|
41
|
+
console.log('');
|
|
42
|
+
if (projects.length === 0) {
|
|
43
|
+
console.log('No projects in this folder.');
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
console.log(chalk.dim(`Projects (${projects.length}):`));
|
|
47
|
+
for (const project of projects) {
|
|
48
|
+
const id = chalk.dim(project.id);
|
|
49
|
+
console.log(` ${id} ${project.name}`);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=view.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view.js","sourceRoot":"","sources":["../../../src/commands/folder/view.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/hc/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/hc/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAQnC,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAmEhE"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
import { setDefaultHelpCenterLocale } from './locale.js';
|
|
1
2
|
import { listHelpCenterLocales } from './locales.js';
|
|
2
3
|
import { searchHelpCenterArticles } from './search.js';
|
|
3
4
|
import { viewHelpCenterArticle } from './view.js';
|
|
4
|
-
const LOCALE_OPTION_DESCRIPTION = 'Help Center locale (default
|
|
5
|
+
const LOCALE_OPTION_DESCRIPTION = 'Help Center locale (overrides configured default)';
|
|
5
6
|
export function registerHelpCenterCommand(program) {
|
|
6
7
|
const hc = program
|
|
7
8
|
.command('hc')
|
|
@@ -10,6 +11,7 @@ export function registerHelpCenterCommand(program) {
|
|
|
10
11
|
Examples:
|
|
11
12
|
td hc locales
|
|
12
13
|
td hc locales --json
|
|
14
|
+
td hc locale --set-default pt-br
|
|
13
15
|
td hc search "notifications"
|
|
14
16
|
td hc search "reminders" --locale pt-br --json
|
|
15
17
|
td hc view id:360000269065
|
|
@@ -23,6 +25,17 @@ Notes:
|
|
|
23
25
|
.description('List supported Help Center locales')
|
|
24
26
|
.option('--json', 'Output as JSON')
|
|
25
27
|
.action(listHelpCenterLocales);
|
|
28
|
+
const localeCmd = hc
|
|
29
|
+
.command('locale')
|
|
30
|
+
.description('Manage the default Help Center locale')
|
|
31
|
+
.option('--set-default <locale>', 'Set the default Help Center locale')
|
|
32
|
+
.action((options) => {
|
|
33
|
+
if (!options.setDefault) {
|
|
34
|
+
localeCmd.help();
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
return setDefaultHelpCenterLocale(options.setDefault);
|
|
38
|
+
});
|
|
26
39
|
const searchCmd = hc
|
|
27
40
|
.command('search [query]')
|
|
28
41
|
.description('Search Todoist Help Center articles')
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/hc/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AACpD,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAA;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAA;AAEjD,MAAM,yBAAyB,GAAG,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/hc/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAA;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AACpD,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAA;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAA;AAEjD,MAAM,yBAAyB,GAAG,mDAAmD,CAAA;AAErF,MAAM,UAAU,yBAAyB,CAAC,OAAgB;IACtD,MAAM,EAAE,GAAG,OAAO;SACb,OAAO,CAAC,IAAI,CAAC;SACb,WAAW,CAAC,qCAAqC,CAAC;SAClD,WAAW,CACR,OAAO,EACP;;;;;;;;;;;;;2DAa+C,CAClD,CAAA;IAEL,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC;SAChB,WAAW,CAAC,oCAAoC,CAAC;SACjD,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,qBAAqB,CAAC,CAAA;IAElC,MAAM,SAAS,GAAG,EAAE;SACf,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,uCAAuC,CAAC;SACpD,MAAM,CAAC,wBAAwB,EAAE,oCAAoC,CAAC;SACtE,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE;QAChB,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;YACtB,SAAS,CAAC,IAAI,EAAE,CAAA;YAChB,OAAM;QACV,CAAC;QACD,OAAO,0BAA0B,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;IACzD,CAAC,CAAC,CAAA;IAEN,MAAM,SAAS,GAAG,EAAE;SACf,OAAO,CAAC,gBAAgB,CAAC;SACzB,WAAW,CAAC,qCAAqC,CAAC;SAClD,MAAM,CAAC,mBAAmB,EAAE,yBAAyB,CAAC;SACtD,MAAM,CAAC,aAAa,EAAE,oDAAoD,CAAC;SAC3E,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACvB,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,SAAS,CAAC,IAAI,EAAE,CAAA;YAChB,OAAM;QACV,CAAC;QACD,OAAO,wBAAwB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;IACnD,CAAC,CAAC,CAAA;IAEN,MAAM,OAAO,GAAG,EAAE;SACb,OAAO,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;SAC1C,WAAW,CAAC,4DAA4D,CAAC;SACzE,MAAM,CAAC,mBAAmB,EAAE,yBAAyB,CAAC;SACtD,MAAM,CAAC,WAAW,EAAE,kCAAkC,CAAC;SACvD,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,QAAQ,EAAE,kCAAkC,CAAC;SACpD,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE;QACrB,IAAI,CAAC,GAAG,EAAE,CAAC;YACP,OAAO,CAAC,IAAI,EAAE,CAAA;YACd,OAAM;QACV,CAAC;QACD,OAAO,qBAAqB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;IAC9C,CAAC,CAAC,CAAA;AACV,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"locale.d.ts","sourceRoot":"","sources":["../../../src/commands/hc/locale.ts"],"names":[],"mappings":"AAUA,wBAAsB,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAyB9E;AAED,wBAAsB,8BAA8B,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAWvF"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { readConfig, writeConfig } from '../../lib/config.js';
|
|
3
|
+
import { CliError } from '../../lib/errors.js';
|
|
4
|
+
import { DEFAULT_HELP_CENTER_LOCALE, getHelpCenterLocales, normalizeHelpCenterLocale, } from '../../lib/help-center.js';
|
|
5
|
+
import { withSpinner } from '../../lib/spinner.js';
|
|
6
|
+
export async function setDefaultHelpCenterLocale(locale) {
|
|
7
|
+
const normalized = normalizeHelpCenterLocale(locale);
|
|
8
|
+
const { locales } = await withSpinner({ text: 'Checking locale...', color: 'blue' }, () => getHelpCenterLocales());
|
|
9
|
+
const supported = locales.map((entry) => entry.locale);
|
|
10
|
+
if (!supported.includes(normalized)) {
|
|
11
|
+
throw new CliError('INVALID_OPTIONS', `"${normalized}" is not a supported Help Center locale.`, [
|
|
12
|
+
`Supported locales: ${supported.join(', ')}.`,
|
|
13
|
+
'Run `td hc locales` for details on each locale.',
|
|
14
|
+
]);
|
|
15
|
+
}
|
|
16
|
+
const config = await readConfig();
|
|
17
|
+
const existingHc = isPlainObject(config.hc) ? config.hc : {};
|
|
18
|
+
config.hc = { ...existingHc, defaultLocale: normalized };
|
|
19
|
+
await writeConfig(config);
|
|
20
|
+
console.log(chalk.green('✓'), `Default Help Center locale set to ${chalk.cyan(normalized)}`);
|
|
21
|
+
}
|
|
22
|
+
export async function resolveDefaultHelpCenterLocale(explicit) {
|
|
23
|
+
if (explicit !== undefined) {
|
|
24
|
+
return normalizeHelpCenterLocale(explicit);
|
|
25
|
+
}
|
|
26
|
+
const saved = (await readConfig()).hc?.defaultLocale;
|
|
27
|
+
if (saved === undefined)
|
|
28
|
+
return DEFAULT_HELP_CENTER_LOCALE;
|
|
29
|
+
try {
|
|
30
|
+
return normalizeHelpCenterLocale(saved);
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return DEFAULT_HELP_CENTER_LOCALE;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
function isPlainObject(value) {
|
|
37
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=locale.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"locale.js","sourceRoot":"","sources":["../../../src/commands/hc/locale.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAC9C,OAAO,EACH,0BAA0B,EAC1B,oBAAoB,EACpB,yBAAyB,GAC5B,MAAM,0BAA0B,CAAA;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAElD,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAC,MAAc;IAC3D,MAAM,UAAU,GAAG,yBAAyB,CAAC,MAAM,CAAC,CAAA;IAEpD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,WAAW,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,CACtF,oBAAoB,EAAE,CACzB,CAAA;IAED,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;IACtD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,QAAQ,CACd,iBAAiB,EACjB,IAAI,UAAU,0CAA0C,EACxD;YACI,sBAAsB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;YAC7C,iDAAiD;SACpD,CACJ,CAAA;IACL,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAA;IACjC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IAC5D,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,UAAU,EAAE,aAAa,EAAE,UAAU,EAAE,CAAA;IACxD,MAAM,WAAW,CAAC,MAAM,CAAC,CAAA;IAEzB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,qCAAqC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA;AAChG,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAAC,QAAiB;IAClE,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,yBAAyB,CAAC,QAAQ,CAAC,CAAA;IAC9C,CAAC;IACD,MAAM,KAAK,GAAG,CAAC,MAAM,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,aAAa,CAAA;IACpD,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,0BAA0B,CAAA;IAC1D,IAAI,CAAC;QACD,OAAO,yBAAyB,CAAC,KAAK,CAAC,CAAA;IAC3C,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,0BAA0B,CAAA;IACrC,CAAC;AACL,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACjC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AAC/E,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../src/commands/hc/search.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../src/commands/hc/search.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,uBAAuB;IACpC,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,wBAAsB,wBAAwB,CAC1C,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,uBAA4B,GACtC,OAAO,CAAC,IAAI,CAAC,CA4Bf"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import chalk from 'chalk';
|
|
2
|
-
import {
|
|
2
|
+
import { searchHelpCenter } from '../../lib/help-center.js';
|
|
3
3
|
import { withSpinner } from '../../lib/spinner.js';
|
|
4
|
+
import { resolveDefaultHelpCenterLocale } from './locale.js';
|
|
4
5
|
export async function searchHelpCenterArticles(query, options = {}) {
|
|
5
6
|
const trimmedQuery = query.trim();
|
|
6
|
-
const locale =
|
|
7
|
+
const locale = await resolveDefaultHelpCenterLocale(options.locale);
|
|
7
8
|
const results = await withSpinner({ text: 'Searching Help Center...', color: 'blue' }, () => searchHelpCenter(trimmedQuery, { locale, limit: options.limit }));
|
|
8
9
|
if (options.json) {
|
|
9
10
|
console.log(JSON.stringify(results, null, 2));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../../src/commands/hc/search.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../../src/commands/hc/search.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAClD,OAAO,EAAE,8BAA8B,EAAE,MAAM,aAAa,CAAA;AAQ5D,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC1C,KAAa,EACb,UAAmC,EAAE;IAErC,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,EAAE,CAAA;IACjC,MAAM,MAAM,GAAG,MAAM,8BAA8B,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;IACnE,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,EAAE,IAAI,EAAE,0BAA0B,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,CACxF,gBAAgB,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CACnE,CAAA;IAED,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;QAC7C,OAAM;IACV,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,sCAAsC,YAAY,IAAI,CAAC,CAAA;QACnE,OAAM;IACV,CAAC;IAED,KAAK,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QACzB,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAA;QACjD,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QAC9C,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC,CAAA;QACvC,CAAC;QACD,IAAI,KAAK,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACnB,CAAC;IACL,CAAC;AACL,CAAC"}
|