@boneskull/bargs 0.1.1

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 (91) hide show
  1. package/LICENSE +55 -0
  2. package/README.md +483 -0
  3. package/dist/bargs.cjs +167 -0
  4. package/dist/bargs.cjs.map +1 -0
  5. package/dist/bargs.d.cts +31 -0
  6. package/dist/bargs.d.cts.map +1 -0
  7. package/dist/bargs.d.ts +31 -0
  8. package/dist/bargs.d.ts.map +1 -0
  9. package/dist/bargs.js +163 -0
  10. package/dist/bargs.js.map +1 -0
  11. package/dist/errors.cjs +57 -0
  12. package/dist/errors.cjs.map +1 -0
  13. package/dist/errors.d.cts +40 -0
  14. package/dist/errors.d.cts.map +1 -0
  15. package/dist/errors.d.ts +40 -0
  16. package/dist/errors.d.ts.map +1 -0
  17. package/dist/errors.js +51 -0
  18. package/dist/errors.js.map +1 -0
  19. package/dist/help.cjs +309 -0
  20. package/dist/help.cjs.map +1 -0
  21. package/dist/help.d.cts +21 -0
  22. package/dist/help.d.cts.map +1 -0
  23. package/dist/help.d.ts +21 -0
  24. package/dist/help.d.ts.map +1 -0
  25. package/dist/help.js +304 -0
  26. package/dist/help.js.map +1 -0
  27. package/dist/index.cjs +63 -0
  28. package/dist/index.cjs.map +1 -0
  29. package/dist/index.d.cts +96 -0
  30. package/dist/index.d.cts.map +1 -0
  31. package/dist/index.d.ts +96 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +47 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/opt.cjs +205 -0
  36. package/dist/opt.cjs.map +1 -0
  37. package/dist/opt.d.cts +145 -0
  38. package/dist/opt.d.cts.map +1 -0
  39. package/dist/opt.d.ts +145 -0
  40. package/dist/opt.d.ts.map +1 -0
  41. package/dist/opt.js +202 -0
  42. package/dist/opt.js.map +1 -0
  43. package/dist/osc.cjs +190 -0
  44. package/dist/osc.cjs.map +1 -0
  45. package/dist/osc.d.cts +30 -0
  46. package/dist/osc.d.cts.map +1 -0
  47. package/dist/osc.d.ts +30 -0
  48. package/dist/osc.d.ts.map +1 -0
  49. package/dist/osc.js +181 -0
  50. package/dist/osc.js.map +1 -0
  51. package/dist/parser.cjs +293 -0
  52. package/dist/parser.cjs.map +1 -0
  53. package/dist/parser.d.cts +47 -0
  54. package/dist/parser.d.cts.map +1 -0
  55. package/dist/parser.d.ts +47 -0
  56. package/dist/parser.d.ts.map +1 -0
  57. package/dist/parser.js +285 -0
  58. package/dist/parser.js.map +1 -0
  59. package/dist/theme.cjs +203 -0
  60. package/dist/theme.cjs.map +1 -0
  61. package/dist/theme.d.cts +227 -0
  62. package/dist/theme.d.cts.map +1 -0
  63. package/dist/theme.d.ts +227 -0
  64. package/dist/theme.d.ts.map +1 -0
  65. package/dist/theme.js +198 -0
  66. package/dist/theme.js.map +1 -0
  67. package/dist/types.cjs +18 -0
  68. package/dist/types.cjs.map +1 -0
  69. package/dist/types.d.cts +244 -0
  70. package/dist/types.d.cts.map +1 -0
  71. package/dist/types.d.ts +244 -0
  72. package/dist/types.d.ts.map +1 -0
  73. package/dist/types.js +17 -0
  74. package/dist/types.js.map +1 -0
  75. package/dist/validate.cjs +452 -0
  76. package/dist/validate.cjs.map +1 -0
  77. package/dist/validate.d.cts +28 -0
  78. package/dist/validate.d.cts.map +1 -0
  79. package/dist/validate.d.ts +28 -0
  80. package/dist/validate.d.ts.map +1 -0
  81. package/dist/validate.js +448 -0
  82. package/dist/validate.js.map +1 -0
  83. package/dist/version.cjs +134 -0
  84. package/dist/version.cjs.map +1 -0
  85. package/dist/version.d.cts +27 -0
  86. package/dist/version.d.cts.map +1 -0
  87. package/dist/version.d.ts +27 -0
  88. package/dist/version.d.ts.map +1 -0
  89. package/dist/version.js +129 -0
  90. package/dist/version.js.map +1 -0
  91. package/package.json +149 -0
package/dist/opt.js ADDED
@@ -0,0 +1,202 @@
1
+ /**
2
+ * Builder functions for defining CLI options, positionals, and commands.
3
+ *
4
+ * Provides ergonomic helpers with full TypeScript type inference for
5
+ * constructing option schemas (`opt.string()`, `opt.boolean()`, `opt.enum()`,
6
+ * etc.), positional schemas (`opt.stringPos()`, `opt.numberPos()`,
7
+ * `opt.variadic()`), and command definitions (`opt.command()`). Includes
8
+ * composition utilities for merging schemas (`opt.options()`,
9
+ * `opt.positionals()`).
10
+ *
11
+ * @packageDocumentation
12
+ */
13
+ import { BargsError } from "./errors.js";
14
+ /**
15
+ * Validate that no alias conflicts exist in a merged options schema. Throws
16
+ * BargsError if the same alias is used by multiple options.
17
+ */
18
+ const validateAliasConflicts = (schema) => {
19
+ const aliasToOption = new Map();
20
+ for (const [optionName, def] of Object.entries(schema)) {
21
+ if (!def.aliases) {
22
+ continue;
23
+ }
24
+ for (const alias of def.aliases) {
25
+ const existing = aliasToOption.get(alias);
26
+ if (existing && existing !== optionName) {
27
+ throw new BargsError(`Alias conflict: "-${alias}" is used by both "--${existing}" and "--${optionName}"`);
28
+ }
29
+ aliasToOption.set(alias, optionName);
30
+ }
31
+ }
32
+ };
33
+ /**
34
+ * Compose multiple option schemas into one.
35
+ */
36
+ const optionsImpl = (...schemas) => {
37
+ const merged = Object.assign({}, ...schemas);
38
+ validateAliasConflicts(merged);
39
+ return merged;
40
+ };
41
+ /**
42
+ * Create a positionals schema from positional definitions.
43
+ */
44
+ const positionalsImpl = (...positionals) => positionals;
45
+ /**
46
+ * Namespaced option builders.
47
+ *
48
+ * Provides ergonomic helpers for defining CLI options, positionals, and
49
+ * commands with full TypeScript type inference.
50
+ *
51
+ * @example
52
+ *
53
+ * ```typescript
54
+ * import { opt } from 'bargs';
55
+ *
56
+ * const options = opt.options({
57
+ * verbose: opt.boolean({ aliases: ['v'] }),
58
+ * name: opt.string({ default: 'world' }),
59
+ * level: opt.enum(['low', 'medium', 'high'] as const),
60
+ * });
61
+ * ```
62
+ */
63
+ export const opt = {
64
+ // ─── Option Builders ───────────────────────────────────────────────
65
+ /**
66
+ * Define an array option (--flag value --flag value2).
67
+ */
68
+ array: (items, props = {}) => ({
69
+ items,
70
+ type: 'array',
71
+ ...props,
72
+ }),
73
+ /**
74
+ * Define a boolean option. Props type is preserved to enable default
75
+ * inference.
76
+ */
77
+ boolean: (props = {}) => ({
78
+ type: 'boolean',
79
+ ...props,
80
+ }),
81
+ /**
82
+ * Define a command with proper type inference.
83
+ *
84
+ * @example
85
+ *
86
+ * ```typescript
87
+ * const greetCmd = opt.command({
88
+ * description: 'Greet someone',
89
+ * options: opt.options({
90
+ * name: opt.string({ default: 'world' }),
91
+ * }),
92
+ * handler: ({ values }) => {
93
+ * console.log(`Hello, ${values.name}!`);
94
+ * },
95
+ * });
96
+ * ```
97
+ */
98
+ command: (config) => config,
99
+ /**
100
+ * Define a count option (--verbose --verbose = 2).
101
+ */
102
+ count: (props = {}) => ({
103
+ type: 'count',
104
+ ...props,
105
+ }),
106
+ /**
107
+ * Define an enum option with string choices. The choices array is inferred as
108
+ * a tuple of literal types automatically. Props type is preserved to enable
109
+ * default inference.
110
+ */
111
+ enum: (choices, props = {}) => ({
112
+ choices,
113
+ type: 'enum',
114
+ ...props,
115
+ }),
116
+ /**
117
+ * Define an enum positional argument with string choices. The choices array
118
+ * is inferred as a tuple of literal types automatically.
119
+ */
120
+ enumPos: (choices, props = {}) => ({
121
+ choices,
122
+ type: 'enum',
123
+ ...props,
124
+ }),
125
+ /**
126
+ * Define a number option. Props type is preserved to enable default
127
+ * inference.
128
+ */
129
+ number: (props = {}) => ({
130
+ type: 'number',
131
+ ...props,
132
+ }),
133
+ // ─── Positional Builders ───────────────────────────────────────────
134
+ /**
135
+ * Define a number positional argument.
136
+ */
137
+ numberPos: (props = {}) => ({
138
+ type: 'number',
139
+ ...props,
140
+ }),
141
+ /**
142
+ * Compose multiple option schemas into one. Later schemas override earlier
143
+ * ones for duplicate option names. Validates that no alias conflicts exist.
144
+ *
145
+ * @example
146
+ *
147
+ * ```typescript
148
+ * // Single schema (identity, enables reuse)
149
+ * const loggingOpts = opt.options({
150
+ * verbose: opt.boolean({ aliases: ['v'] }),
151
+ * quiet: opt.boolean({ aliases: ['q'] }),
152
+ * });
153
+ *
154
+ * // Merge multiple schemas
155
+ * const allOpts = opt.options(loggingOpts, ioOpts, {
156
+ * format: opt.enum(['json', 'yaml'] as const),
157
+ * });
158
+ * ```
159
+ *
160
+ * @throws BargsError if multiple options use the same alias
161
+ */
162
+ options: optionsImpl,
163
+ /**
164
+ * Create a positionals schema with proper tuple type inference.
165
+ *
166
+ * @example
167
+ *
168
+ * ```typescript
169
+ * const positionals = opt.positionals(
170
+ * opt.stringPos({ description: 'Input file', required: true }),
171
+ * opt.stringPos({ description: 'Output file' }),
172
+ * );
173
+ * ```
174
+ */
175
+ positionals: positionalsImpl,
176
+ /**
177
+ * Define a string option. Props type is preserved to enable default
178
+ * inference.
179
+ */
180
+ string: (props = {}) => ({
181
+ type: 'string',
182
+ ...props,
183
+ }),
184
+ // ─── Composition ───────────────────────────────────────────────────
185
+ /**
186
+ * Define a string positional argument.
187
+ */
188
+ stringPos: (props = {}) => ({
189
+ type: 'string',
190
+ ...props,
191
+ }),
192
+ // ─── Command Builder ───────────────────────────────────────────────
193
+ /**
194
+ * Define a variadic positional (rest args).
195
+ */
196
+ variadic: (items, props = {}) => ({
197
+ items,
198
+ type: 'variadic',
199
+ ...props,
200
+ }),
201
+ };
202
+ //# sourceMappingURL=opt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opt.js","sourceRoot":"","sources":["../src/opt.ts"],"names":[],"mappings":"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"}
package/dist/osc.cjs ADDED
@@ -0,0 +1,190 @@
1
+ "use strict";
2
+ /**
3
+ * OSC (Operating System Command) escape sequences for terminal features.
4
+ *
5
+ * Provides utilities for creating clickable hyperlinks in terminal output using
6
+ * OSC 8 sequences, detecting terminal hyperlink support across various terminal
7
+ * emulators, and auto-linkifying URLs in text.
8
+ *
9
+ * The hyperlink detection logic is adapted from supports-hyperlinks by Sindre
10
+ * Sorhus, used under the MIT License.
11
+ *
12
+ * @license MIT (supports-hyperlinks portions)
13
+ * @packageDocumentation
14
+ * @see {@link https://github.com/chalk/supports-hyperlinks}
15
+ */
16
+ var __importDefault = (this && this.__importDefault) || function (mod) {
17
+ return (mod && mod.__esModule) ? mod : { "default": mod };
18
+ };
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ exports.linkifyUrls = exports.link = exports.supportsHyperlinks = void 0;
21
+ const node_process_1 = __importDefault(require("node:process"));
22
+ /**
23
+ * OSC escape sequence start.
24
+ */
25
+ const OSC = '\x1b]';
26
+ /**
27
+ * Bell character - terminates OSC sequence.
28
+ */
29
+ const BEL = '\x07';
30
+ /**
31
+ * Separator for OSC parameters.
32
+ */
33
+ const SEP = ';';
34
+ /**
35
+ * Check if running inside tmux.
36
+ */
37
+ const isTmux = () => 'TMUX' in node_process_1.default.env;
38
+ /**
39
+ * Wrap an OSC sequence for tmux compatibility. Tmux requires OSC sequences to
40
+ * be wrapped with DCS tmux; <sequence> ST and all ESCs in <sequence> to be
41
+ * replaced with ESC ESC.
42
+ */
43
+ const wrapOsc = (sequence) => {
44
+ if (isTmux()) {
45
+ return '\x1BPtmux;' + sequence.replaceAll('\x1B', '\x1B\x1B') + '\x1B\\';
46
+ }
47
+ return sequence;
48
+ };
49
+ /**
50
+ * Parse a version string into major/minor/patch components. Handles both dotted
51
+ * versions (1.72.0) and compact versions (4601 -> 46.1.0).
52
+ */
53
+ const parseVersion = (versionString = '') => {
54
+ // Handle compact version format (e.g., 4601 => 46.1.0)
55
+ if (/^\d{3,4}$/.test(versionString)) {
56
+ const match = /(\d{1,2})(\d{2})/.exec(versionString) ?? [];
57
+ return {
58
+ major: 0,
59
+ minor: Number.parseInt(match[1] ?? '0', 10),
60
+ patch: Number.parseInt(match[2] ?? '0', 10),
61
+ };
62
+ }
63
+ const versions = (versionString ?? '')
64
+ .split('.')
65
+ .map((n) => Number.parseInt(n, 10));
66
+ return {
67
+ major: versions[0] ?? 0,
68
+ minor: versions[1] ?? 0,
69
+ patch: versions[2] ?? 0,
70
+ };
71
+ };
72
+ /**
73
+ * Detect if the terminal supports hyperlinks (OSC 8). Based on the logic from
74
+ * supports-hyperlinks package but implemented inline without dependencies.
75
+ */
76
+ const supportsHyperlinks = (stream = node_process_1.default.stdout) => {
77
+ const { CI, CURSOR_TRACE_ID, FORCE_HYPERLINK, NETLIFY, TEAMCITY_VERSION, TERM, TERM_PROGRAM, TERM_PROGRAM_VERSION, VTE_VERSION, } = node_process_1.default.env;
78
+ // Explicit force flag
79
+ if (FORCE_HYPERLINK) {
80
+ return !(FORCE_HYPERLINK.length > 0 && Number.parseInt(FORCE_HYPERLINK, 10) === 0);
81
+ }
82
+ // Netlify always supports hyperlinks (no TTY needed)
83
+ if (NETLIFY) {
84
+ return true;
85
+ }
86
+ // No TTY, no hyperlinks
87
+ if (!stream.isTTY) {
88
+ return false;
89
+ }
90
+ // Windows Terminal supports hyperlinks
91
+ if ('WT_SESSION' in node_process_1.default.env) {
92
+ return true;
93
+ }
94
+ // Windows (non-Windows Terminal) doesn't support hyperlinks
95
+ if (node_process_1.default.platform === 'win32') {
96
+ return false;
97
+ }
98
+ // CI environments generally don't support hyperlinks
99
+ if (CI) {
100
+ return false;
101
+ }
102
+ // TeamCity doesn't support hyperlinks
103
+ if (TEAMCITY_VERSION) {
104
+ return false;
105
+ }
106
+ // Check terminal program
107
+ if (TERM_PROGRAM) {
108
+ const version = parseVersion(TERM_PROGRAM_VERSION);
109
+ switch (TERM_PROGRAM) {
110
+ case 'ghostty':
111
+ case 'zed': {
112
+ return true;
113
+ }
114
+ case 'iTerm.app': {
115
+ // iTerm 3.1+ supports hyperlinks
116
+ if (version.major === 3) {
117
+ return version.minor >= 1;
118
+ }
119
+ return version.major > 3;
120
+ }
121
+ case 'vscode': {
122
+ // Cursor (VS Code fork) supports hyperlinks
123
+ if (CURSOR_TRACE_ID) {
124
+ return true;
125
+ }
126
+ // VS Code 1.72+ supports hyperlinks
127
+ return (version.major > 1 || (version.major === 1 && version.minor >= 72));
128
+ }
129
+ case 'WezTerm': {
130
+ // WezTerm packaged by Nix uses their own version scheme
131
+ if (/^0-unstable-\d{4}-\d{2}-\d{2}$/.test(TERM_PROGRAM_VERSION ?? '')) {
132
+ const date = (TERM_PROGRAM_VERSION ?? '').slice('0-unstable-'.length);
133
+ return date >= '2020-06-20';
134
+ }
135
+ // WezTerm version is a date (YYYYMMDD)
136
+ return version.major >= 20200620;
137
+ }
138
+ }
139
+ }
140
+ // VTE-based terminals (GNOME Terminal, etc.)
141
+ if (VTE_VERSION) {
142
+ // VTE 0.50.0 was supposed to support hyperlinks but segfaults.
143
+ // Check both string format ("0.50.0") and parsed version to catch
144
+ // compact format ("5000") which parseVersion converts to { 0, 50, 0 }.
145
+ if (VTE_VERSION === '0.50.0') {
146
+ return false;
147
+ }
148
+ const version = parseVersion(VTE_VERSION);
149
+ if (version.major === 0 && version.minor === 50 && version.patch === 0) {
150
+ return false;
151
+ }
152
+ return version.major > 0 || version.minor >= 50;
153
+ }
154
+ // Check TERM variable
155
+ switch (TERM) {
156
+ case 'alacritty':
157
+ case 'xterm-kitty': {
158
+ return true;
159
+ }
160
+ }
161
+ return false;
162
+ };
163
+ exports.supportsHyperlinks = supportsHyperlinks;
164
+ /**
165
+ * Create an OSC 8 hyperlink. The link text is displayed, and clicking it opens
166
+ * the URL in supported terminals.
167
+ */
168
+ const link = (text, url) => {
169
+ const openLink = wrapOsc(`${OSC}8${SEP}${SEP}${url}${BEL}`);
170
+ const closeLink = wrapOsc(`${OSC}8${SEP}${SEP}${BEL}`);
171
+ return openLink + text + closeLink;
172
+ };
173
+ exports.link = link;
174
+ /**
175
+ * URL regex pattern for matching URLs in text. Matches http:// and https://
176
+ * URLs.
177
+ */
178
+ const URL_PATTERN = /https?:\/\/[^\s<>"\])}]+/g;
179
+ /**
180
+ * Auto-linkify URLs in text. If terminal supports hyperlinks, URLs become
181
+ * clickable. Otherwise, text is returned unchanged.
182
+ */
183
+ const linkifyUrls = (text, stream = node_process_1.default.stdout) => {
184
+ if (!(0, exports.supportsHyperlinks)(stream)) {
185
+ return text;
186
+ }
187
+ return text.replace(URL_PATTERN, (url) => (0, exports.link)(url, url));
188
+ };
189
+ exports.linkifyUrls = linkifyUrls;
190
+ //# sourceMappingURL=osc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"osc.js","sourceRoot":"","sources":["../src/osc.ts"],"names":[],"mappings":"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"}
package/dist/osc.d.cts ADDED
@@ -0,0 +1,30 @@
1
+ /**
2
+ * OSC (Operating System Command) escape sequences for terminal features.
3
+ *
4
+ * Provides utilities for creating clickable hyperlinks in terminal output using
5
+ * OSC 8 sequences, detecting terminal hyperlink support across various terminal
6
+ * emulators, and auto-linkifying URLs in text.
7
+ *
8
+ * The hyperlink detection logic is adapted from supports-hyperlinks by Sindre
9
+ * Sorhus, used under the MIT License.
10
+ *
11
+ * @license MIT (supports-hyperlinks portions)
12
+ * @packageDocumentation
13
+ * @see {@link https://github.com/chalk/supports-hyperlinks}
14
+ */
15
+ /**
16
+ * Detect if the terminal supports hyperlinks (OSC 8). Based on the logic from
17
+ * supports-hyperlinks package but implemented inline without dependencies.
18
+ */
19
+ export declare const supportsHyperlinks: (stream?: NodeJS.WriteStream) => boolean;
20
+ /**
21
+ * Create an OSC 8 hyperlink. The link text is displayed, and clicking it opens
22
+ * the URL in supported terminals.
23
+ */
24
+ export declare const link: (text: string, url: string) => string;
25
+ /**
26
+ * Auto-linkify URLs in text. If terminal supports hyperlinks, URLs become
27
+ * clickable. Otherwise, text is returned unchanged.
28
+ */
29
+ export declare const linkifyUrls: (text: string, stream?: NodeJS.WriteStream) => string;
30
+ //# sourceMappingURL=osc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"osc.d.ts","sourceRoot":"","sources":["../src/osc.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AA+DH;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAC7B,SAAQ,MAAM,CAAC,WAA4B,KAC1C,OAkHF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,IAAI,GAAI,MAAM,MAAM,EAAE,KAAK,MAAM,KAAG,MAIhD,CAAC;AAQF;;;GAGG;AACH,eAAO,MAAM,WAAW,GACtB,MAAM,MAAM,EACZ,SAAQ,MAAM,CAAC,WAA4B,KAC1C,MAMF,CAAC"}
package/dist/osc.d.ts ADDED
@@ -0,0 +1,30 @@
1
+ /**
2
+ * OSC (Operating System Command) escape sequences for terminal features.
3
+ *
4
+ * Provides utilities for creating clickable hyperlinks in terminal output using
5
+ * OSC 8 sequences, detecting terminal hyperlink support across various terminal
6
+ * emulators, and auto-linkifying URLs in text.
7
+ *
8
+ * The hyperlink detection logic is adapted from supports-hyperlinks by Sindre
9
+ * Sorhus, used under the MIT License.
10
+ *
11
+ * @license MIT (supports-hyperlinks portions)
12
+ * @packageDocumentation
13
+ * @see {@link https://github.com/chalk/supports-hyperlinks}
14
+ */
15
+ /**
16
+ * Detect if the terminal supports hyperlinks (OSC 8). Based on the logic from
17
+ * supports-hyperlinks package but implemented inline without dependencies.
18
+ */
19
+ export declare const supportsHyperlinks: (stream?: NodeJS.WriteStream) => boolean;
20
+ /**
21
+ * Create an OSC 8 hyperlink. The link text is displayed, and clicking it opens
22
+ * the URL in supported terminals.
23
+ */
24
+ export declare const link: (text: string, url: string) => string;
25
+ /**
26
+ * Auto-linkify URLs in text. If terminal supports hyperlinks, URLs become
27
+ * clickable. Otherwise, text is returned unchanged.
28
+ */
29
+ export declare const linkifyUrls: (text: string, stream?: NodeJS.WriteStream) => string;
30
+ //# sourceMappingURL=osc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"osc.d.ts","sourceRoot":"","sources":["../src/osc.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AA+DH;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAC7B,SAAQ,MAAM,CAAC,WAA4B,KAC1C,OAkHF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,IAAI,GAAI,MAAM,MAAM,EAAE,KAAK,MAAM,KAAG,MAIhD,CAAC;AAQF;;;GAGG;AACH,eAAO,MAAM,WAAW,GACtB,MAAM,MAAM,EACZ,SAAQ,MAAM,CAAC,WAA4B,KAC1C,MAMF,CAAC"}
package/dist/osc.js ADDED
@@ -0,0 +1,181 @@
1
+ /**
2
+ * OSC (Operating System Command) escape sequences for terminal features.
3
+ *
4
+ * Provides utilities for creating clickable hyperlinks in terminal output using
5
+ * OSC 8 sequences, detecting terminal hyperlink support across various terminal
6
+ * emulators, and auto-linkifying URLs in text.
7
+ *
8
+ * The hyperlink detection logic is adapted from supports-hyperlinks by Sindre
9
+ * Sorhus, used under the MIT License.
10
+ *
11
+ * @license MIT (supports-hyperlinks portions)
12
+ * @packageDocumentation
13
+ * @see {@link https://github.com/chalk/supports-hyperlinks}
14
+ */
15
+ import process from 'node:process';
16
+ /**
17
+ * OSC escape sequence start.
18
+ */
19
+ const OSC = '\x1b]';
20
+ /**
21
+ * Bell character - terminates OSC sequence.
22
+ */
23
+ const BEL = '\x07';
24
+ /**
25
+ * Separator for OSC parameters.
26
+ */
27
+ const SEP = ';';
28
+ /**
29
+ * Check if running inside tmux.
30
+ */
31
+ const isTmux = () => 'TMUX' in process.env;
32
+ /**
33
+ * Wrap an OSC sequence for tmux compatibility. Tmux requires OSC sequences to
34
+ * be wrapped with DCS tmux; <sequence> ST and all ESCs in <sequence> to be
35
+ * replaced with ESC ESC.
36
+ */
37
+ const wrapOsc = (sequence) => {
38
+ if (isTmux()) {
39
+ return '\x1BPtmux;' + sequence.replaceAll('\x1B', '\x1B\x1B') + '\x1B\\';
40
+ }
41
+ return sequence;
42
+ };
43
+ /**
44
+ * Parse a version string into major/minor/patch components. Handles both dotted
45
+ * versions (1.72.0) and compact versions (4601 -> 46.1.0).
46
+ */
47
+ const parseVersion = (versionString = '') => {
48
+ // Handle compact version format (e.g., 4601 => 46.1.0)
49
+ if (/^\d{3,4}$/.test(versionString)) {
50
+ const match = /(\d{1,2})(\d{2})/.exec(versionString) ?? [];
51
+ return {
52
+ major: 0,
53
+ minor: Number.parseInt(match[1] ?? '0', 10),
54
+ patch: Number.parseInt(match[2] ?? '0', 10),
55
+ };
56
+ }
57
+ const versions = (versionString ?? '')
58
+ .split('.')
59
+ .map((n) => Number.parseInt(n, 10));
60
+ return {
61
+ major: versions[0] ?? 0,
62
+ minor: versions[1] ?? 0,
63
+ patch: versions[2] ?? 0,
64
+ };
65
+ };
66
+ /**
67
+ * Detect if the terminal supports hyperlinks (OSC 8). Based on the logic from
68
+ * supports-hyperlinks package but implemented inline without dependencies.
69
+ */
70
+ export const supportsHyperlinks = (stream = process.stdout) => {
71
+ const { CI, CURSOR_TRACE_ID, FORCE_HYPERLINK, NETLIFY, TEAMCITY_VERSION, TERM, TERM_PROGRAM, TERM_PROGRAM_VERSION, VTE_VERSION, } = process.env;
72
+ // Explicit force flag
73
+ if (FORCE_HYPERLINK) {
74
+ return !(FORCE_HYPERLINK.length > 0 && Number.parseInt(FORCE_HYPERLINK, 10) === 0);
75
+ }
76
+ // Netlify always supports hyperlinks (no TTY needed)
77
+ if (NETLIFY) {
78
+ return true;
79
+ }
80
+ // No TTY, no hyperlinks
81
+ if (!stream.isTTY) {
82
+ return false;
83
+ }
84
+ // Windows Terminal supports hyperlinks
85
+ if ('WT_SESSION' in process.env) {
86
+ return true;
87
+ }
88
+ // Windows (non-Windows Terminal) doesn't support hyperlinks
89
+ if (process.platform === 'win32') {
90
+ return false;
91
+ }
92
+ // CI environments generally don't support hyperlinks
93
+ if (CI) {
94
+ return false;
95
+ }
96
+ // TeamCity doesn't support hyperlinks
97
+ if (TEAMCITY_VERSION) {
98
+ return false;
99
+ }
100
+ // Check terminal program
101
+ if (TERM_PROGRAM) {
102
+ const version = parseVersion(TERM_PROGRAM_VERSION);
103
+ switch (TERM_PROGRAM) {
104
+ case 'ghostty':
105
+ case 'zed': {
106
+ return true;
107
+ }
108
+ case 'iTerm.app': {
109
+ // iTerm 3.1+ supports hyperlinks
110
+ if (version.major === 3) {
111
+ return version.minor >= 1;
112
+ }
113
+ return version.major > 3;
114
+ }
115
+ case 'vscode': {
116
+ // Cursor (VS Code fork) supports hyperlinks
117
+ if (CURSOR_TRACE_ID) {
118
+ return true;
119
+ }
120
+ // VS Code 1.72+ supports hyperlinks
121
+ return (version.major > 1 || (version.major === 1 && version.minor >= 72));
122
+ }
123
+ case 'WezTerm': {
124
+ // WezTerm packaged by Nix uses their own version scheme
125
+ if (/^0-unstable-\d{4}-\d{2}-\d{2}$/.test(TERM_PROGRAM_VERSION ?? '')) {
126
+ const date = (TERM_PROGRAM_VERSION ?? '').slice('0-unstable-'.length);
127
+ return date >= '2020-06-20';
128
+ }
129
+ // WezTerm version is a date (YYYYMMDD)
130
+ return version.major >= 20200620;
131
+ }
132
+ }
133
+ }
134
+ // VTE-based terminals (GNOME Terminal, etc.)
135
+ if (VTE_VERSION) {
136
+ // VTE 0.50.0 was supposed to support hyperlinks but segfaults.
137
+ // Check both string format ("0.50.0") and parsed version to catch
138
+ // compact format ("5000") which parseVersion converts to { 0, 50, 0 }.
139
+ if (VTE_VERSION === '0.50.0') {
140
+ return false;
141
+ }
142
+ const version = parseVersion(VTE_VERSION);
143
+ if (version.major === 0 && version.minor === 50 && version.patch === 0) {
144
+ return false;
145
+ }
146
+ return version.major > 0 || version.minor >= 50;
147
+ }
148
+ // Check TERM variable
149
+ switch (TERM) {
150
+ case 'alacritty':
151
+ case 'xterm-kitty': {
152
+ return true;
153
+ }
154
+ }
155
+ return false;
156
+ };
157
+ /**
158
+ * Create an OSC 8 hyperlink. The link text is displayed, and clicking it opens
159
+ * the URL in supported terminals.
160
+ */
161
+ export const link = (text, url) => {
162
+ const openLink = wrapOsc(`${OSC}8${SEP}${SEP}${url}${BEL}`);
163
+ const closeLink = wrapOsc(`${OSC}8${SEP}${SEP}${BEL}`);
164
+ return openLink + text + closeLink;
165
+ };
166
+ /**
167
+ * URL regex pattern for matching URLs in text. Matches http:// and https://
168
+ * URLs.
169
+ */
170
+ const URL_PATTERN = /https?:\/\/[^\s<>"\])}]+/g;
171
+ /**
172
+ * Auto-linkify URLs in text. If terminal supports hyperlinks, URLs become
173
+ * clickable. Otherwise, text is returned unchanged.
174
+ */
175
+ export const linkifyUrls = (text, stream = process.stdout) => {
176
+ if (!supportsHyperlinks(stream)) {
177
+ return text;
178
+ }
179
+ return text.replace(URL_PATTERN, (url) => link(url, url));
180
+ };
181
+ //# sourceMappingURL=osc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"osc.js","sourceRoot":"","sources":["../src/osc.ts"],"names":[],"mappings":"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"}