@doist/outline-cli 1.5.1 → 1.5.3

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.
Files changed (54) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/commands/auth.js +8 -8
  3. package/dist/commands/auth.js.map +1 -1
  4. package/dist/commands/document.js +3 -3
  5. package/dist/commands/document.js.map +1 -1
  6. package/dist/commands/search.js +16 -11
  7. package/dist/commands/search.js.map +1 -1
  8. package/dist/commands/update/index.d.ts +1 -1
  9. package/dist/commands/update/index.js +11 -15
  10. package/dist/commands/update/index.js.map +1 -1
  11. package/dist/index.js +3 -1
  12. package/dist/index.js.map +1 -1
  13. package/dist/lib/api.js +1 -2
  14. package/dist/lib/api.js.map +1 -1
  15. package/dist/lib/auth.d.ts +11 -6
  16. package/dist/lib/auth.js +28 -41
  17. package/dist/lib/auth.js.map +1 -1
  18. package/dist/lib/config.d.ts +15 -0
  19. package/dist/lib/config.js +20 -0
  20. package/dist/lib/config.js.map +1 -0
  21. package/dist/lib/errors.d.ts +6 -0
  22. package/dist/lib/errors.js +8 -0
  23. package/dist/lib/errors.js.map +1 -0
  24. package/dist/lib/global-args.d.ts +4 -0
  25. package/dist/lib/global-args.js +13 -0
  26. package/dist/lib/global-args.js.map +1 -0
  27. package/dist/lib/markdown.d.ts +2 -1
  28. package/dist/lib/markdown.js +10 -5
  29. package/dist/lib/markdown.js.map +1 -1
  30. package/dist/lib/output.d.ts +4 -6
  31. package/dist/lib/output.js +13 -7
  32. package/dist/lib/output.js.map +1 -1
  33. package/dist/lib/skills/content.d.ts +1 -1
  34. package/dist/lib/skills/content.js +3 -1
  35. package/dist/lib/skills/content.js.map +1 -1
  36. package/dist/lib/spinner.d.ts +2 -13
  37. package/dist/lib/spinner.js +4 -55
  38. package/dist/lib/spinner.js.map +1 -1
  39. package/dist/transport/http-dispatcher.d.ts +3 -0
  40. package/dist/transport/http-dispatcher.js +45 -5
  41. package/dist/transport/http-dispatcher.js.map +1 -1
  42. package/package.json +6 -6
  43. package/dist/commands/update/action.d.ts +0 -3
  44. package/dist/commands/update/action.js +0 -142
  45. package/dist/commands/update/action.js.map +0 -1
  46. package/dist/commands/update/channel.d.ts +0 -1
  47. package/dist/commands/update/channel.js +0 -12
  48. package/dist/commands/update/channel.js.map +0 -1
  49. package/dist/commands/update/switch.d.ts +0 -4
  50. package/dist/commands/update/switch.js +0 -29
  51. package/dist/commands/update/switch.js.map +0 -1
  52. package/dist/lib/update-config.d.ts +0 -3
  53. package/dist/lib/update-config.js +0 -35
  54. package/dist/lib/update-config.js.map +0 -1
@@ -1,3 +1,4 @@
1
+ import { formatJson, formatNdjson, printEmpty } from '@doist/cli-core';
1
2
  import chalk from 'chalk';
2
3
  export function getOutputOptions(opts) {
3
4
  return {
@@ -9,26 +10,31 @@ export function getOutputOptions(opts) {
9
10
  export function outputItem(item, humanFormatter, essentialKeys, opts = {}) {
10
11
  if (opts.ndjson) {
11
12
  const data = opts.full || !essentialKeys ? item : pick(item, essentialKeys);
12
- console.log(JSON.stringify(data));
13
+ console.log(formatNdjson([data]));
13
14
  return;
14
15
  }
15
16
  if (opts.json) {
16
17
  const data = opts.full || !essentialKeys ? item : pick(item, essentialKeys);
17
- console.log(JSON.stringify(data, null, 2));
18
+ console.log(formatJson(data));
18
19
  return;
19
20
  }
20
21
  console.log(humanFormatter(item));
21
22
  }
22
- export function outputList(items, humanFormatter, essentialKeys, opts = {}, pagination) {
23
+ export function outputList(items, humanFormatter, essentialKeys, opts = {}, pagination, emptyMessage) {
24
+ if (items.length === 0 && emptyMessage !== undefined) {
25
+ printEmpty({ options: opts, message: emptyMessage });
26
+ return;
27
+ }
28
+ const project = (item) => (opts.full || !essentialKeys ? item : pick(item, essentialKeys));
23
29
  if (opts.ndjson) {
30
+ // Stream item-by-item: avoids buffering the whole list and matches
31
+ // the canonical NDJSON contract (one record per write).
24
32
  for (const item of items) {
25
- const data = opts.full || !essentialKeys ? item : pick(item, essentialKeys);
26
- console.log(JSON.stringify(data));
33
+ console.log(formatNdjson([project(item)]));
27
34
  }
28
35
  }
29
36
  else if (opts.json) {
30
- const data = items.map((item) => opts.full || !essentialKeys ? item : pick(item, essentialKeys));
31
- console.log(JSON.stringify(data, null, 2));
37
+ console.log(formatJson(items.map(project)));
32
38
  }
33
39
  else {
34
40
  for (const item of items) {
@@ -1 +1 @@
1
- {"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/lib/output.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/lib/output.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
1
  export declare const SKILL_NAME = "outline-cli";
2
2
  export declare const SKILL_DESCRIPTION = "Search and manage Outline wiki documents and collections via the ol CLI";
3
- export declare const SKILL_CONTENT = "# Outline CLI (ol)\n\nUse this skill when the user wants to interact with their Outline wiki/knowledge base.\n\n## Quick Reference\n\n- `ol search \"query\"` - Search documents\n- `ol doc list` - List documents\n- `ol doc get <id>` - Read a document\n- `ol doc open <id>` - Open document in browser\n- `ol doc create --title \"Title\" --collection <id>` - Create document\n- `ol col list` - List collections\n\n## Output Formats\n\nAll list commands support:\n- `--json` - JSON output (essential fields)\n- `--ndjson` - Newline-delimited JSON (streaming)\n- `--full` - Include all fields in JSON\n\n## Document References\n\nDocuments can be referenced by:\n- URL ID (the slug suffix after the last hyphen)\n- Full Outline URL (auto-extracted)\n- Document ID\n\n## Commands\n\n### Search\n```bash\nol search \"query\"\nol search \"query\" --limit 10\nol search \"query\" --collection <id>\nol search \"query\" --status published\nol search \"query\" --json\n```\n\n### Documents\n```bash\nol doc list --collection <id> --limit 25\nol doc list --sort title --direction ASC\nol doc get <id> # Rendered markdown\nol doc get <id> --raw # Raw markdown\nol doc get <id> --json\nol doc open <id> # Open in browser\nol doc create --title \"Title\" --collection <id> --text \"# Content\"\nol doc create --title \"Title\" --parent <ref> --text \"# Content\" # Nest under parent (collection inferred)\nol doc create --title \"Title\" --collection <id> --file ./doc.md\nol doc update <id> --title \"New Title\"\nol doc update <id> --file ./updated.md\nol doc move <id> --collection <target-id> # Move to collection root\nol doc move <id> --parent <ref> # Nest under parent (collection inferred)\nol doc archive <id>\nol doc unarchive <id>\nol doc delete <id> --confirm\n```\n\n### Collections\n```bash\nol col list\nol col get <id>\nol col create --name \"Name\" --description \"Desc\" --color \"#hex\"\nol col create --name \"Private\" --private\nol col update <id> --name \"New Name\"\nol col delete <id> --confirm\n```\n\n### Authentication\n```bash\nol auth login # Configure API token and base URL\nol auth status # Show current auth state\nol auth logout # Clear saved credentials\n```\n\n### Update & Changelog\n```bash\nol update # Update CLI to latest version\nol update --check # Check for updates without installing, show channel\nol update channel # Show current update channel\nol update switch --stable # Switch to stable release channel\nol update switch --pre-release # Switch to pre-release (next) channel\nol changelog # Show recent changelog entries\nol changelog -n 3 # Show last 3 versions\n```\n\n## Examples\n\n### Find and read a document\n```bash\nol search \"onboarding\" --json | jq '.[0].document.urlId'\nol doc get <urlId>\n```\n\n### Create a document from a file\n```bash\nol doc create --title \"Meeting Notes\" --collection <id> --file ./notes.md --publish\n```\n\n### List all collections and their documents\n```bash\nol col list --json\nol doc list --collection <id> --sort title --direction ASC\n```\n\n### Bulk export with ndjson\n```bash\nol doc list --ndjson --full | jq -r '.title'\n```\n";
3
+ export declare const SKILL_CONTENT = "# Outline CLI (ol)\n\nUse this skill when the user wants to interact with their Outline wiki/knowledge base.\n\n## Quick Reference\n\n- `ol search \"query\"` - Search documents\n- `ol doc list` - List documents\n- `ol doc get <id>` - Read a document\n- `ol doc open <id>` - Open document in browser\n- `ol doc create --title \"Title\" --collection <id>` - Create document\n- `ol col list` - List collections\n\n## Output Formats\n\nAll list commands support:\n- `--json` - JSON output (essential fields)\n- `--ndjson` - Newline-delimited JSON (streaming)\n- `--full` - Include all fields in JSON\n\n## Document References\n\nDocuments can be referenced by:\n- URL ID (the slug suffix after the last hyphen)\n- Full Outline URL (auto-extracted)\n- Document ID\n\n## Commands\n\n### Search\n```bash\nol search \"query\"\nol search \"query\" --limit 10\nol search \"query\" --collection <id>\nol search \"query\" --status published\nol search \"query\" --json\n```\n\n### Documents\n```bash\nol doc list --collection <id> --limit 25\nol doc list --sort title --direction ASC\nol doc get <id> # Rendered markdown\nol doc get <id> --raw # Raw markdown\nol doc get <id> --json\nol doc open <id> # Open in browser\nol doc create --title \"Title\" --collection <id> --text \"# Content\"\nol doc create --title \"Title\" --parent <ref> --text \"# Content\" # Nest under parent (collection inferred)\nol doc create --title \"Title\" --collection <id> --file ./doc.md\nol doc update <id> --title \"New Title\"\nol doc update <id> --file ./updated.md\nol doc move <id> --collection <target-id> # Move to collection root\nol doc move <id> --parent <ref> # Nest under parent (collection inferred)\nol doc archive <id>\nol doc unarchive <id>\nol doc delete <id> --confirm\n```\n\n### Collections\n```bash\nol col list\nol col get <id>\nol col create --name \"Name\" --description \"Desc\" --color \"#hex\"\nol col create --name \"Private\" --private\nol col update <id> --name \"New Name\"\nol col delete <id> --confirm\n```\n\n### Authentication\n```bash\nol auth login # Configure API token and base URL\nol auth status # Show current auth state\nol auth logout # Clear saved credentials\n```\n\n### Update & Changelog\n```bash\nol update # Update CLI to latest version\nol update --check # Check for updates without installing, show channel\nol update --check --json # Check for updates as a JSON envelope\nol update --check --ndjson # Check for updates as NDJSON output\nol update --channel # Show current update channel\nol update switch --stable # Switch to stable release channel\nol update switch --pre-release # Switch to pre-release (next) channel\nol changelog # Show recent changelog entries\nol changelog -n 3 # Show last 3 versions\n```\n\n## Examples\n\n### Find and read a document\n```bash\nol search \"onboarding\" --json | jq '.[0].document.urlId'\nol doc get <urlId>\n```\n\n### Create a document from a file\n```bash\nol doc create --title \"Meeting Notes\" --collection <id> --file ./notes.md --publish\n```\n\n### List all collections and their documents\n```bash\nol col list --json\nol doc list --collection <id> --sort title --direction ASC\n```\n\n### Bulk export with ndjson\n```bash\nol doc list --ndjson --full | jq -r '.title'\n```\n";
@@ -79,7 +79,9 @@ ol auth logout # Clear saved credentials
79
79
  \`\`\`bash
80
80
  ol update # Update CLI to latest version
81
81
  ol update --check # Check for updates without installing, show channel
82
- ol update channel # Show current update channel
82
+ ol update --check --json # Check for updates as a JSON envelope
83
+ ol update --check --ndjson # Check for updates as NDJSON output
84
+ ol update --channel # Show current update channel
83
85
  ol update switch --stable # Switch to stable release channel
84
86
  ol update switch --pre-release # Switch to pre-release (next) channel
85
87
  ol changelog # Show recent changelog entries
@@ -1 +1 @@
1
- {"version":3,"file":"content.js","sourceRoot":"","sources":["../../../src/lib/skills/content.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAG,aAAa,CAAA;AACvC,MAAM,CAAC,MAAM,iBAAiB,GAC1B,yEAAyE,CAAA;AAE7E,MAAM,CAAC,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6G5B,CAAA"}
1
+ {"version":3,"file":"content.js","sourceRoot":"","sources":["../../../src/lib/skills/content.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAG,aAAa,CAAA;AACvC,MAAM,CAAC,MAAM,iBAAiB,GAC1B,yEAAyE,CAAA;AAE7E,MAAM,CAAC,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+G5B,CAAA"}
@@ -1,13 +1,2 @@
1
- export interface SpinnerOptions {
2
- text: string;
3
- color?: 'green' | 'yellow' | 'blue' | 'red';
4
- noSpinner?: boolean;
5
- }
6
- export declare class LoadingSpinner {
7
- private spinnerInstance;
8
- start(options: SpinnerOptions): this;
9
- succeed(text?: string): void;
10
- fail(text?: string): void;
11
- stop(): void;
12
- }
13
- export declare function withSpinner<T>(options: SpinnerOptions, asyncOperation: () => Promise<T>): Promise<T>;
1
+ export type { SpinnerColor, SpinnerOptions } from '@doist/cli-core';
2
+ export declare const LoadingSpinner: new () => import("@doist/cli-core").LoadingSpinner, withSpinner: <T>(options: import("@doist/cli-core").SpinnerOptions, op: () => Promise<T>) => Promise<T>, startEarlySpinner: (text?: string) => void, stopEarlySpinner: () => void;
@@ -1,56 +1,5 @@
1
- import chalk from 'chalk';
2
- import yoctoSpinner from 'yocto-spinner';
3
- function shouldDisableSpinner() {
4
- if (process.env.OL_SPINNER === 'false')
5
- return true;
6
- if (process.env.CI)
7
- return true;
8
- const args = process.argv;
9
- if (args.includes('--json') || args.includes('--ndjson') || args.includes('--no-spinner')) {
10
- return true;
11
- }
12
- return false;
13
- }
14
- export class LoadingSpinner {
15
- spinnerInstance = null;
16
- start(options) {
17
- if (!process.stdout.isTTY || options.noSpinner || shouldDisableSpinner()) {
18
- return this;
19
- }
20
- const colorFn = chalk[options.color || 'blue'];
21
- this.spinnerInstance = yoctoSpinner({ text: colorFn(options.text) });
22
- this.spinnerInstance.start();
23
- return this;
24
- }
25
- succeed(text) {
26
- if (this.spinnerInstance) {
27
- this.spinnerInstance.success(text ? chalk.green(`✓ ${text}`) : undefined);
28
- this.spinnerInstance = null;
29
- }
30
- }
31
- fail(text) {
32
- if (this.spinnerInstance) {
33
- this.spinnerInstance.error(text ? chalk.red(`✗ ${text}`) : undefined);
34
- this.spinnerInstance = null;
35
- }
36
- }
37
- stop() {
38
- if (this.spinnerInstance) {
39
- this.spinnerInstance.stop();
40
- this.spinnerInstance = null;
41
- }
42
- }
43
- }
44
- export async function withSpinner(options, asyncOperation) {
45
- const spinner = new LoadingSpinner().start(options);
46
- try {
47
- const result = await asyncOperation();
48
- spinner.stop();
49
- return result;
50
- }
51
- catch (error) {
52
- spinner.fail();
53
- throw error;
54
- }
55
- }
1
+ import { createSpinner } from '@doist/cli-core';
2
+ import { shouldDisableSpinner } from './global-args.js';
3
+ const spinner = createSpinner({ isDisabled: shouldDisableSpinner });
4
+ export const { LoadingSpinner, withSpinner, startEarlySpinner, stopEarlySpinner } = spinner;
56
5
  //# sourceMappingURL=spinner.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"spinner.js","sourceRoot":"","sources":["../../src/lib/spinner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,YAAY,MAAM,eAAe,CAAA;AAQxC,SAAS,oBAAoB;IACzB,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,OAAO;QAAE,OAAO,IAAI,CAAA;IACnD,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE;QAAE,OAAO,IAAI,CAAA;IAE/B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAA;IACzB,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;QACxF,OAAO,IAAI,CAAA;IACf,CAAC;IAED,OAAO,KAAK,CAAA;AAChB,CAAC;AAED,MAAM,OAAO,cAAc;IACf,eAAe,GAA2C,IAAI,CAAA;IAEtE,KAAK,CAAC,OAAuB;QACzB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,OAAO,CAAC,SAAS,IAAI,oBAAoB,EAAE,EAAE,CAAC;YACvE,OAAO,IAAI,CAAA;QACf,CAAC;QAED,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,IAAI,MAAM,CAAC,CAAA;QAC9C,IAAI,CAAC,eAAe,GAAG,YAAY,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACpE,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAA;QAC5B,OAAO,IAAI,CAAA;IACf,CAAC;IAED,OAAO,CAAC,IAAa;QACjB,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACvB,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;YACzE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAA;QAC/B,CAAC;IACL,CAAC;IAED,IAAI,CAAC,IAAa;QACd,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACvB,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;YACrE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAA;QAC/B,CAAC;IACL,CAAC;IAED,IAAI;QACA,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACvB,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAA;YAC3B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAA;QAC/B,CAAC;IACL,CAAC;CACJ;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAC7B,OAAuB,EACvB,cAAgC;IAEhC,MAAM,OAAO,GAAG,IAAI,cAAc,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IAEnD,IAAI,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,cAAc,EAAE,CAAA;QACrC,OAAO,CAAC,IAAI,EAAE,CAAA;QACd,OAAO,MAAM,CAAA;IACjB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,EAAE,CAAA;QACd,MAAM,KAAK,CAAA;IACf,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"spinner.js","sourceRoot":"","sources":["../../src/lib/spinner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AAIvD,MAAM,OAAO,GAAG,aAAa,CAAC,EAAE,UAAU,EAAE,oBAAoB,EAAE,CAAC,CAAA;AAEnE,MAAM,CAAC,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAA"}
@@ -1,3 +1,6 @@
1
1
  import { type Dispatcher } from 'undici';
2
2
  export declare function getDefaultDispatcher(): Dispatcher;
3
3
  export declare function resetDefaultDispatcherForTests(): Promise<void>;
4
+ type SyncOnly<T> = T extends PromiseLike<unknown> ? never : T;
5
+ export declare function suppressExperimentalWarningsSync<T>(fn: () => SyncOnly<T>): SyncOnly<T>;
6
+ export {};
@@ -1,4 +1,4 @@
1
- import { Agent, EnvHttpProxyAgent } from 'undici';
1
+ import { Agent, EnvHttpProxyAgent, interceptors } from 'undici';
2
2
  const KEEP_ALIVE_OPTIONS = {
3
3
  keepAliveTimeout: 1,
4
4
  keepAliveMaxTimeout: 1,
@@ -14,10 +14,17 @@ function hasProxyEnv() {
14
14
  return false;
15
15
  }
16
16
  function createDefaultDispatcher() {
17
- if (hasProxyEnv()) {
18
- return new EnvHttpProxyAgent(KEEP_ALIVE_OPTIONS);
19
- }
20
- return new Agent(KEEP_ALIVE_OPTIONS);
17
+ const base = hasProxyEnv()
18
+ ? new EnvHttpProxyAgent(KEEP_ALIVE_OPTIONS)
19
+ : new Agent(KEEP_ALIVE_OPTIONS);
20
+ // Compose the response-decompression interceptor so gzip/deflate/br/zstd
21
+ // bodies are decoded before consumers parse them. Required on Node 24+:
22
+ // attaching any custom dispatcher to the global `fetch` strips the
23
+ // `content-encoding` header but does not actually decompress the body,
24
+ // so callers receive raw gzipped bytes and `JSON.parse` fails.
25
+ // See https://github.com/Doist/todoist-cli/issues/318.
26
+ const decompress = suppressExperimentalWarningsSync(() => interceptors.decompress());
27
+ return base.compose(decompress);
21
28
  }
22
29
  export function getDefaultDispatcher() {
23
30
  defaultDispatcher ??= createDefaultDispatcher();
@@ -31,4 +38,37 @@ export async function resetDefaultDispatcherForTests() {
31
38
  defaultDispatcher = undefined;
32
39
  await dispatcher.close();
33
40
  }
41
+ export function suppressExperimentalWarningsSync(fn) {
42
+ const originalEmit = process.emitWarning;
43
+ const filteredEmit = ((...args) => {
44
+ const typeOrOptions = args[1];
45
+ const type = typeof typeOrOptions === 'string'
46
+ ? typeOrOptions
47
+ : typeof typeOrOptions === 'object' &&
48
+ typeOrOptions !== null &&
49
+ 'type' in typeOrOptions
50
+ ? typeOrOptions.type
51
+ : undefined;
52
+ if (type === 'ExperimentalWarning')
53
+ return;
54
+ Reflect.apply(originalEmit, process, args);
55
+ });
56
+ process.emitWarning = filteredEmit;
57
+ try {
58
+ const result = fn();
59
+ if (isThenable(result)) {
60
+ throw new Error('suppressExperimentalWarningsSync: callback returned a thenable; this helper only supports synchronous work.');
61
+ }
62
+ return result;
63
+ }
64
+ finally {
65
+ process.emitWarning = originalEmit;
66
+ }
67
+ }
68
+ function isThenable(value) {
69
+ return (typeof value === 'object' &&
70
+ value !== null &&
71
+ 'then' in value &&
72
+ typeof value.then === 'function');
73
+ }
34
74
  //# sourceMappingURL=http-dispatcher.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"http-dispatcher.js","sourceRoot":"","sources":["../../src/transport/http-dispatcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAmB,iBAAiB,EAAE,MAAM,QAAQ,CAAA;AAElE,MAAM,kBAAkB,GAAG;IACvB,gBAAgB,EAAE,CAAC;IACnB,mBAAmB,EAAE,CAAC;CACzB,CAAA;AAED,MAAM,cAAc,GAAG,CAAC,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,CAAU,CAAA;AAE1F,IAAI,iBAAyC,CAAA;AAE7C,SAAS,WAAW;IAChB,KAAK,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;QAC/B,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACnB,OAAO,IAAI,CAAA;QACf,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAA;AAChB,CAAC;AAED,SAAS,uBAAuB;IAC5B,IAAI,WAAW,EAAE,EAAE,CAAC;QAChB,OAAO,IAAI,iBAAiB,CAAC,kBAAkB,CAAC,CAAA;IACpD,CAAC;IAED,OAAO,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAA;AACxC,CAAC;AAED,MAAM,UAAU,oBAAoB;IAChC,iBAAiB,KAAK,uBAAuB,EAAE,CAAA;IAC/C,OAAO,iBAAiB,CAAA;AAC5B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,8BAA8B;IAChD,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACrB,OAAM;IACV,CAAC;IAED,MAAM,UAAU,GAAG,iBAAiB,CAAA;IACpC,iBAAiB,GAAG,SAAS,CAAA;IAC7B,MAAM,UAAU,CAAC,KAAK,EAAE,CAAA;AAC5B,CAAC"}
1
+ {"version":3,"file":"http-dispatcher.js","sourceRoot":"","sources":["../../src/transport/http-dispatcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAmB,iBAAiB,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AAEhF,MAAM,kBAAkB,GAAG;IACvB,gBAAgB,EAAE,CAAC;IACnB,mBAAmB,EAAE,CAAC;CACzB,CAAA;AAED,MAAM,cAAc,GAAG,CAAC,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,CAAU,CAAA;AAE1F,IAAI,iBAAyC,CAAA;AAE7C,SAAS,WAAW;IAChB,KAAK,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;QAC/B,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACnB,OAAO,IAAI,CAAA;QACf,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAA;AAChB,CAAC;AAED,SAAS,uBAAuB;IAC5B,MAAM,IAAI,GAAG,WAAW,EAAE;QACtB,CAAC,CAAC,IAAI,iBAAiB,CAAC,kBAAkB,CAAC;QAC3C,CAAC,CAAC,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAA;IAEnC,yEAAyE;IACzE,wEAAwE;IACxE,mEAAmE;IACnE,uEAAuE;IACvE,+DAA+D;IAC/D,uDAAuD;IACvD,MAAM,UAAU,GAAG,gCAAgC,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC,CAAA;IAEpF,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;AACnC,CAAC;AAED,MAAM,UAAU,oBAAoB;IAChC,iBAAiB,KAAK,uBAAuB,EAAE,CAAA;IAC/C,OAAO,iBAAiB,CAAA;AAC5B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,8BAA8B;IAChD,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACrB,OAAM;IACV,CAAC;IAED,MAAM,UAAU,GAAG,iBAAiB,CAAA;IACpC,iBAAiB,GAAG,SAAS,CAAA;IAC7B,MAAM,UAAU,CAAC,KAAK,EAAE,CAAA;AAC5B,CAAC;AA0BD,MAAM,UAAU,gCAAgC,CAAI,EAAqB;IACrE,MAAM,YAAY,GAAG,OAAO,CAAC,WAAW,CAAA;IAGxC,MAAM,YAAY,GAAG,CAAC,CAAC,GAAG,IAAc,EAAQ,EAAE;QAC9C,MAAM,aAAa,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;QAC7B,MAAM,IAAI,GACN,OAAO,aAAa,KAAK,QAAQ;YAC7B,CAAC,CAAC,aAAa;YACf,CAAC,CAAC,OAAO,aAAa,KAAK,QAAQ;gBAC/B,aAAa,KAAK,IAAI;gBACtB,MAAM,IAAI,aAAa;gBACzB,CAAC,CAAE,aAAmC,CAAC,IAAI;gBAC3C,CAAC,CAAC,SAAS,CAAA;QACrB,IAAI,IAAI,KAAK,qBAAqB;YAAE,OAAM;QAC1C,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;IAC9C,CAAC,CAA+B,CAAA;IAEhC,OAAO,CAAC,WAAW,GAAG,YAAY,CAAA;IAClC,IAAI,CAAC;QACD,MAAM,MAAM,GAAG,EAAE,EAAE,CAAA;QACnB,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CACX,6GAA6G,CAChH,CAAA;QACL,CAAC;QACD,OAAO,MAAM,CAAA;IACjB,CAAC;YAAS,CAAC;QACP,OAAO,CAAC,WAAW,GAAG,YAAY,CAAA;IACtC,CAAC;AACL,CAAC;AAED,SAAS,UAAU,CAAC,KAAc;IAC9B,OAAO,CACH,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,MAAM,IAAI,KAAK;QACf,OAAQ,KAA2B,CAAC,IAAI,KAAK,UAAU,CAC1D,CAAA;AACL,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@doist/outline-cli",
3
- "version": "1.5.1",
3
+ "version": "1.5.3",
4
4
  "description": "CLI for the Outline wiki/knowledge base API",
5
5
  "type": "module",
6
6
  "bin": {
@@ -48,13 +48,13 @@
48
48
  "node": ">=20.18.1"
49
49
  },
50
50
  "dependencies": {
51
+ "@doist/cli-core": "0.9.0",
51
52
  "chalk": "5.6.2",
52
53
  "commander": "14.0.2",
53
- "marked": "15.0.12",
54
- "marked-terminal": "7.3.0",
54
+ "marked": "18.0.3",
55
+ "marked-terminal-renderer": "2.2.0",
55
56
  "open": "10.2.0",
56
- "undici": "7.22.0",
57
- "yocto-spinner": "1.0.0"
57
+ "undici": "7.22.0"
58
58
  },
59
59
  "devDependencies": {
60
60
  "@semantic-release/changelog": "6.0.3",
@@ -66,6 +66,6 @@
66
66
  "oxlint": "1.57.0",
67
67
  "semantic-release": "25.0.3",
68
68
  "typescript": "5.9.3",
69
- "vitest": "4.0.18"
69
+ "vitest": "4.1.5"
70
70
  }
71
71
  }
@@ -1,3 +0,0 @@
1
- export declare function updateAction(options: {
2
- check?: boolean;
3
- }): Promise<void>;
@@ -1,142 +0,0 @@
1
- import { spawn } from 'node:child_process';
2
- import chalk from 'chalk';
3
- import packageJson from '../../../package.json' with { type: 'json' };
4
- import { withSpinner } from '../../lib/spinner.js';
5
- import { getUpdateChannel } from '../../lib/update-config.js';
6
- import { fetchWithRetry } from '../../transport/fetch-with-retry.js';
7
- const PACKAGE_NAME = '@doist/outline-cli';
8
- function getInstallTag(channel) {
9
- return channel === 'pre-release' ? 'next' : 'latest';
10
- }
11
- function parseVersion(version) {
12
- const [core, ...rest] = version.split('-');
13
- const [major, minor, patch] = core.split('.').map(Number);
14
- return { major, minor, patch, prerelease: rest.length > 0 ? rest.join('-') : undefined };
15
- }
16
- /** Returns true when `candidate` is strictly newer than `current` per semver. */
17
- function isNewer(current, candidate) {
18
- const a = parseVersion(current);
19
- const b = parseVersion(candidate);
20
- // Compare major.minor.patch
21
- for (const key of ['major', 'minor', 'patch']) {
22
- if (b[key] !== a[key])
23
- return b[key] > a[key];
24
- }
25
- // Equal core: release > pre-release
26
- if (!a.prerelease && b.prerelease)
27
- return false;
28
- if (a.prerelease && !b.prerelease)
29
- return true;
30
- // Both pre-release: numeric-aware comparison (handles "next.10" > "next.2" etc.)
31
- if (a.prerelease && b.prerelease)
32
- return b.prerelease.localeCompare(a.prerelease, undefined, { numeric: true }) > 0;
33
- return false;
34
- }
35
- async function fetchVersion(channel) {
36
- const tag = getInstallTag(channel);
37
- const url = `https://registry.npmjs.org/${PACKAGE_NAME}/${tag}`;
38
- const response = await fetchWithRetry({ url });
39
- if (!response.ok) {
40
- throw new Error(`Registry request failed (HTTP ${response.status})`);
41
- }
42
- const data = (await response.json());
43
- return data.version;
44
- }
45
- function detectPackageManager() {
46
- const execPath = process.env.npm_execpath || process.argv[1] || '';
47
- if (execPath.includes('pnpm'))
48
- return 'pnpm';
49
- return 'npm';
50
- }
51
- function runInstall(pm, tag) {
52
- const command = pm === 'pnpm' ? 'add' : 'install';
53
- return new Promise((resolve, reject) => {
54
- const child = spawn(pm, [command, '-g', `${PACKAGE_NAME}@${tag}`], {
55
- stdio: ['ignore', 'ignore', 'pipe'],
56
- shell: process.platform === 'win32',
57
- });
58
- let stderr = '';
59
- child.stderr?.on('data', (data) => {
60
- stderr += data.toString();
61
- });
62
- child.on('error', reject);
63
- child.on('close', (code) => resolve({ exitCode: code ?? 1, stderr }));
64
- });
65
- }
66
- function channelLabel(channel) {
67
- return channel === 'pre-release' ? ` ${chalk.magenta('(pre-release)')}` : '';
68
- }
69
- export async function updateAction(options) {
70
- const channel = getUpdateChannel();
71
- const tag = getInstallTag(channel);
72
- const label = channelLabel(channel);
73
- const currentVersion = packageJson.version;
74
- let latestVersion;
75
- try {
76
- latestVersion = await withSpinner({ text: `Checking for updates${label}...`, color: 'blue' }, () => fetchVersion(channel));
77
- }
78
- catch (error) {
79
- const message = error instanceof Error ? error.message : String(error);
80
- console.error(chalk.red('Error:'), `Failed to check for updates: ${message}`);
81
- process.exitCode = 1;
82
- return;
83
- }
84
- const updateAvailable = isNewer(currentVersion, latestVersion);
85
- if (options.check) {
86
- const channelLine = channel === 'pre-release'
87
- ? ` Channel: ${chalk.magenta('pre-release')}`
88
- : ` Channel: ${chalk.green('stable')}`;
89
- if (currentVersion === latestVersion) {
90
- console.log(chalk.green('✓'), `Already up to date (v${currentVersion})`);
91
- }
92
- else if (updateAvailable) {
93
- console.log(`Update available: ${chalk.dim(`v${currentVersion}`)} → ${chalk.green(`v${latestVersion}`)}`);
94
- }
95
- else {
96
- console.log(`Downgrade available: ${chalk.dim(`v${currentVersion}`)} → ${chalk.yellow(`v${latestVersion}`)}`);
97
- }
98
- console.log(channelLine);
99
- return;
100
- }
101
- if (currentVersion === latestVersion) {
102
- console.log(chalk.green('✓'), `Already up to date${label} (v${currentVersion})`);
103
- return;
104
- }
105
- if (updateAvailable) {
106
- console.log(`Update available${label}: ${chalk.dim(`v${currentVersion}`)} → ${chalk.green(`v${latestVersion}`)}`);
107
- }
108
- else {
109
- console.log(`Downgrade available${label}: ${chalk.dim(`v${currentVersion}`)} → ${chalk.yellow(`v${latestVersion}`)}`);
110
- }
111
- const pm = detectPackageManager();
112
- let result;
113
- try {
114
- result = await withSpinner({ text: `Updating to v${latestVersion}${label}...`, color: 'blue' }, () => runInstall(pm, tag));
115
- }
116
- catch (error) {
117
- const message = error instanceof Error ? error.message : String(error);
118
- console.error(chalk.red('Error:'), `Install failed: ${message}`);
119
- process.exitCode = 1;
120
- return;
121
- }
122
- if (result.exitCode !== 0) {
123
- if (result.stderr &&
124
- (result.stderr.includes('EACCES') || result.stderr.includes('EPERM'))) {
125
- console.error(chalk.red('Error:'), 'Permission denied. Try running with sudo:');
126
- console.error(chalk.dim(` sudo ${pm} ${pm === 'pnpm' ? 'add' : 'install'} -g ${PACKAGE_NAME}@${tag}`));
127
- }
128
- else {
129
- console.error(chalk.red('Error:'), `${pm} exited with code ${result.exitCode}`);
130
- if (result.stderr) {
131
- console.error(chalk.dim(result.stderr.trim()));
132
- }
133
- }
134
- process.exitCode = 1;
135
- return;
136
- }
137
- console.log(chalk.green('✓'), `Updated to v${latestVersion}${label}`);
138
- if (channel === 'stable') {
139
- console.log(chalk.dim(' Run'), chalk.cyan('ol changelog'), chalk.dim('to see what changed'));
140
- }
141
- }
142
- //# sourceMappingURL=action.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"action.js","sourceRoot":"","sources":["../../../src/commands/update/action.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export declare function showChannel(): void;
@@ -1,12 +0,0 @@
1
- import chalk from 'chalk';
2
- import { getUpdateChannel } from '../../lib/update-config.js';
3
- export function showChannel() {
4
- const channel = getUpdateChannel();
5
- if (channel === 'pre-release') {
6
- console.log(`Update channel: ${chalk.magenta('pre-release')}`);
7
- }
8
- else {
9
- console.log(`Update channel: ${chalk.green('stable')}`);
10
- }
11
- }
12
- //# sourceMappingURL=channel.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"channel.js","sourceRoot":"","sources":["../../../src/commands/update/channel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;AAE7D,MAAM,UAAU,WAAW;IACvB,MAAM,OAAO,GAAG,gBAAgB,EAAE,CAAA;IAElC,IAAI,OAAO,KAAK,aAAa,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,mBAAmB,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC,CAAA;IAClE,CAAC;SAAM,CAAC;QACJ,OAAO,CAAC,GAAG,CAAC,mBAAmB,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;IAC3D,CAAC;AACL,CAAC"}
@@ -1,4 +0,0 @@
1
- export declare function switchChannel(options: {
2
- stable?: boolean;
3
- preRelease?: boolean;
4
- }): void;
@@ -1,29 +0,0 @@
1
- import chalk from 'chalk';
2
- import { setUpdateChannel } from '../../lib/update-config.js';
3
- export function switchChannel(options) {
4
- if (options.stable && options.preRelease) {
5
- console.error(chalk.red('Error:'), 'Specify either --stable or --pre-release, not both.');
6
- process.exitCode = 1;
7
- return;
8
- }
9
- if (!options.stable && !options.preRelease) {
10
- console.error(chalk.red('Error:'), 'Specify --stable or --pre-release.');
11
- process.exitCode = 1;
12
- return;
13
- }
14
- const channel = options.preRelease ? 'pre-release' : 'stable';
15
- setUpdateChannel(channel);
16
- if (channel === 'pre-release') {
17
- console.log(chalk.green('✓'), `Update channel set to ${chalk.magenta('pre-release')}`);
18
- console.log();
19
- console.log(chalk.yellow('Note:'), 'Pre-release updates follow the', chalk.cyan('next'), 'branch.');
20
- console.log('When pre-release changes are merged into a stable release, no further');
21
- console.log('pre-release updates will be published until a new pre-release cycle begins.');
22
- console.log('Remember to switch back to stable when done:');
23
- console.log(chalk.dim(' ol update switch --stable'));
24
- }
25
- else {
26
- console.log(chalk.green('✓'), 'Update channel set to stable');
27
- }
28
- }
29
- //# sourceMappingURL=switch.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"switch.js","sourceRoot":"","sources":["../../../src/commands/update/switch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,gBAAgB,EAAsB,MAAM,4BAA4B,CAAA;AAEjF,MAAM,UAAU,aAAa,CAAC,OAAmD;IAC7E,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QACvC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,qDAAqD,CAAC,CAAA;QACzF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAA;QACpB,OAAM;IACV,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;QACzC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,oCAAoC,CAAC,CAAA;QACxE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAA;QACpB,OAAM;IACV,CAAC;IAED,MAAM,OAAO,GAAkB,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAA;IAE5E,gBAAgB,CAAC,OAAO,CAAC,CAAA;IAEzB,IAAI,OAAO,KAAK,aAAa,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,yBAAyB,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC,CAAA;QACtF,OAAO,CAAC,GAAG,EAAE,CAAA;QACb,OAAO,CAAC,GAAG,CACP,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,EACrB,gCAAgC,EAChC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAClB,SAAS,CACZ,CAAA;QACD,OAAO,CAAC,GAAG,CAAC,uEAAuE,CAAC,CAAA;QACpF,OAAO,CAAC,GAAG,CAAC,6EAA6E,CAAC,CAAA;QAC1F,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAA;QAC3D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC,CAAA;IACzD,CAAC;SAAM,CAAC;QACJ,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,8BAA8B,CAAC,CAAA;IACjE,CAAC;AACL,CAAC"}
@@ -1,3 +0,0 @@
1
- export type UpdateChannel = 'stable' | 'pre-release';
2
- export declare function getUpdateChannel(): UpdateChannel;
3
- export declare function setUpdateChannel(channel: UpdateChannel): void;
@@ -1,35 +0,0 @@
1
- import { chmodSync, existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
2
- import { homedir } from 'node:os';
3
- import { join } from 'node:path';
4
- const CONFIG_DIR = join(homedir(), '.config', 'outline-cli');
5
- const CONFIG_PATH = join(CONFIG_DIR, 'config.json');
6
- export function getUpdateChannel() {
7
- if (!existsSync(CONFIG_PATH))
8
- return 'stable';
9
- try {
10
- const config = JSON.parse(readFileSync(CONFIG_PATH, 'utf-8'));
11
- return config.update_channel ?? 'stable';
12
- }
13
- catch {
14
- return 'stable';
15
- }
16
- }
17
- export function setUpdateChannel(channel) {
18
- let existing = {};
19
- if (existsSync(CONFIG_PATH)) {
20
- try {
21
- existing = JSON.parse(readFileSync(CONFIG_PATH, 'utf-8'));
22
- }
23
- catch {
24
- // ignore
25
- }
26
- }
27
- existing.update_channel = channel;
28
- mkdirSync(CONFIG_DIR, { recursive: true, mode: 0o700 });
29
- writeFileSync(CONFIG_PATH, `${JSON.stringify(existing, null, 2)}\n`, {
30
- encoding: 'utf-8',
31
- mode: 0o600,
32
- });
33
- chmodSync(CONFIG_PATH, 0o600);
34
- }
35
- //# sourceMappingURL=update-config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"update-config.js","sourceRoot":"","sources":["../../src/lib/update-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AACvF,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAShC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,aAAa,CAAC,CAAA;AAC5D,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAA;AAEnD,MAAM,UAAU,gBAAgB;IAC5B,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO,QAAQ,CAAA;IAC7C,IAAI,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAiB,CAAA;QAC7E,OAAO,MAAM,CAAC,cAAc,IAAI,QAAQ,CAAA;IAC5C,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,QAAQ,CAAA;IACnB,CAAC;AACL,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,OAAsB;IACnD,IAAI,QAAQ,GAA4B,EAAE,CAAA;IAC1C,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC1B,IAAI,CAAC;YACD,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAA4B,CAAA;QACxF,CAAC;QAAC,MAAM,CAAC;YACL,SAAS;QACb,CAAC;IACL,CAAC;IACD,QAAQ,CAAC,cAAc,GAAG,OAAO,CAAA;IACjC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;IACvD,aAAa,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;QACjE,QAAQ,EAAE,OAAO;QACjB,IAAI,EAAE,KAAK;KACd,CAAC,CAAA;IACF,SAAS,CAAC,WAAW,EAAE,KAAK,CAAC,CAAA;AACjC,CAAC"}