@jujulego/jill 3.0.7 → 3.0.9

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.
@@ -1,4 +1,4 @@
1
- ;{try{(function(){var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="e2e300d8-69dc-41b3-a347-427d17372f89",e._sentryDebugIdIdentifier="sentry-dbid-e2e300d8-69dc-41b3-a347-427d17372f89");})();}catch(e){}};!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{};e.SENTRY_RELEASE={id:"jill@3.0.7"};}catch(e){}}();import { init } from '@sentry/node';
1
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{};e.SENTRY_RELEASE={id:"jill@3.0.9"};var n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="69d627b0-a502-4990-affa-044c26cd58fb",e._sentryDebugIdIdentifier="sentry-dbid-69d627b0-a502-4990-affa-044c26cd58fb");}catch(e){}}();import { init } from '@sentry/node';
2
2
 
3
3
  init({
4
4
  dsn: 'https://53e6d10c16975ebd025175d9836d039b@o4508229080055808.ingest.de.sentry.io/4509876546895952',
@@ -1 +1 @@
1
- {"version":3,"file":"instrument.js","sources":["../src/instrument.ts"],"sourcesContent":["import { init } from '@sentry/node';\n\ninit({\n dsn: 'https://53e6d10c16975ebd025175d9836d039b@o4508229080055808.ingest.de.sentry.io/4509876546895952',\n sendDefaultPii: false,\n tracesSampleRate: 1.0,\n enabled: process.env.DISABLE_TRACING !== 'true',\n});\n"],"names":["init","dsn","sendDefaultPii","tracesSampleRate","enabled","process","env","DISABLE_TRACING"],"mappings":";;AAEAA,IAAAA,CAAK,CAAA;IACHC,GAAAA,EAAK,CAAA,KAAA,CAAA,CAAA,CAAA,gCAAA,CAAA,iBAAA,CAAA,MAAA,CAAA,EAAA,CAAA,MAAA,CAAA,EAAA,CAAA,gBAAA,CAAA,CAAA;IACLC,cAAAA,EAAgB,KAAA,CAAA;IAChBC,gBAAAA,EAAkB,CAAA,CAAA,CAAA,CAAA;AAClBC,CAAAA,CAAAA,CAAAA,CAAAA,OAAAA,CAAAA,CAASC,OAAAA,CAAQC,GAAG,CAACC,eAAe,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,IAAA,CAAA;AAC3C,CAAA,CAAA"}
1
+ {"version":3,"file":"instrument.js","sources":["../src/instrument.ts"],"sourcesContent":["import { init } from '@sentry/node';\n\ninit({\n dsn: 'https://53e6d10c16975ebd025175d9836d039b@o4508229080055808.ingest.de.sentry.io/4509876546895952',\n sendDefaultPii: false,\n tracesSampleRate: 1.0,\n enabled: process.env.DISABLE_TRACING !== 'true',\n});\n"],"names":["init","dsn","sendDefaultPii","tracesSampleRate","enabled","process","env","DISABLE_TRACING"],"mappings":";;AAEAA,IAAAA,CAAK;IACHC,GAAAA,EAAK,CAAA,KAAA,CAAA,CAAA,CAAA,gCAAA,CAAA,iBAAA,CAAA,MAAA,CAAA,EAAA,CAAA,MAAA,CAAA,EAAA,CAAA,gBAAA,CAAA;IACLC,cAAAA,EAAgB,KAAA;IAChBC,gBAAAA,EAAkB,CAAA,CAAA,CAAA;AAClBC,CAAAA,CAAAA,CAAAA,CAAAA,OAAAA,CAAAA,CAASC,OAAAA,CAAQC,GAAG,CAACC,eAAe,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,IAAA;AAC3C,CAAA,CAAA"}
@@ -1,7 +1,6 @@
1
- ;{try{(function(){var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="9d1d9924-e1ff-4a8a-83f9-dd00180d8aaa",e._sentryDebugIdIdentifier="sentry-dbid-9d1d9924-e1ff-4a8a-83f9-dd00180d8aaa");})();}catch(e){}};!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{};e.SENTRY_RELEASE={id:"jill@3.0.7"};}catch(e){}}();import { r as reactExports, S as StdinContext, p as parseKeypress, a as reconciler, n as nonAlphanumericKeys, b as StdoutContext, j as jsxRuntimeExports, T as Text, B as Box, i as inked } from './inked.js';
1
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{};e.SENTRY_RELEASE={id:"jill@3.0.9"};var n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="9d8fa87a-70e8-4b1f-a4f7-a813d8fa7042",e._sentryDebugIdIdentifier="sentry-dbid-9d8fa87a-70e8-4b1f-a4f7-a813d8fa7042");}catch(e){}}();import { r as reactExports, S as StdinContext, p as parseKeypress, n as nonAlphanumericKeys, a as reconciler, b as StdoutContext, j as jsxRuntimeExports, T as Text, B as Box, i as inked } from './inked.js';
2
2
  import process from 'node:process';
3
3
  import 'node:stream';
4
- import 'node:events';
5
4
  import { createHash } from 'node:crypto';
6
5
  import { f as flatJobTree, i as isScriptWorkflow } from './flat-job-tree.js';
7
6
  import { p as pipe$, c as collect$, m as map$, a as capitalize, W as WorkloadState, i as inject$, S as SCHEDULER, w as waitFor$, f as filter$, b as isWorkloadEnded } from './main.js';
@@ -9,10 +8,12 @@ import { S as Spinner } from './index.js';
9
8
  import '@sentry/node';
10
9
  import 'assert';
11
10
  import 'events';
12
- import 'node:os';
11
+ import 'node:child_process';
13
12
  import 'node:fs';
13
+ import 'node:tty';
14
+ import 'node:os';
15
+ import 'node:events';
14
16
  import 'module';
15
- import 'node:buffer';
16
17
  import 'yargs/helpers';
17
18
  import 'node:path';
18
19
  import '@swc/helpers/_/_apply_decs_2203_r';
@@ -24,12 +25,11 @@ import 'node:async_hooks';
24
25
  import 'url';
25
26
  import 'node:module';
26
27
  import 'util';
27
- import 'node:child_process';
28
28
  import 'node:stream/consumers';
29
- import 'node:tty';
30
29
  import 'yargs';
31
30
  import 'fs/promises';
32
31
  import 'path';
32
+ import 'crypto';
33
33
  import 'typescript';
34
34
  import 'os';
35
35
 
@@ -192,11 +192,13 @@ function prettyMilliseconds(milliseconds, options) {
192
192
  }
193
193
 
194
194
  /**
195
- `useStdin` is a React hook that exposes the stdin stream.
195
+ A React hook that returns the stdin stream and stdin-related utilities.
196
196
  */ const useStdin = ()=>reactExports.useContext(StdinContext);
197
+ const useStdinContext = ()=>reactExports.useContext(StdinContext);
197
198
 
198
199
  /**
199
- This hook is used for handling user input. It's a more convenient alternative to using `StdinContext` and listening for `data` events. The callback you pass to `useInput` is called for each character when the user enters any input. However, if the user pastes text and it's more than one character, the callback will be called only once, and the whole string will be passed as `input`.
200
+ A React hook that returns `void` and handles user input.
201
+ It's a more convenient alternative to using `StdinContext` and listening for `data` events. The callback you pass to `useInput` is called for each character when the user enters any input. However, if the user pastes text and it's more than one character, the callback will be called only once, and the whole string will be passed as `input`.
200
202
 
201
203
  ```
202
204
  import {useInput} from 'ink';
@@ -217,7 +219,7 @@ const UserInput = () => {
217
219
  ```
218
220
  */ const useInput = (inputHandler, options = {})=>{
219
221
  // eslint-disable-next-line @typescript-eslint/naming-convention
220
- const { stdin, setRawMode, internal_exitOnCtrlC, internal_eventEmitter } = useStdin();
222
+ const { setRawMode, internal_exitOnCtrlC, internal_eventEmitter } = useStdinContext();
221
223
  reactExports.useEffect(()=>{
222
224
  if (options.isActive === false) {
223
225
  return;
@@ -230,68 +232,93 @@ const UserInput = () => {
230
232
  options.isActive,
231
233
  setRawMode
232
234
  ]);
235
+ const handleData = reactExports.useEffectEvent((data)=>{
236
+ const keypress = parseKeypress(data);
237
+ const key = {
238
+ upArrow: keypress.name === 'up',
239
+ downArrow: keypress.name === 'down',
240
+ leftArrow: keypress.name === 'left',
241
+ rightArrow: keypress.name === 'right',
242
+ pageDown: keypress.name === 'pagedown',
243
+ pageUp: keypress.name === 'pageup',
244
+ home: keypress.name === 'home',
245
+ end: keypress.name === 'end',
246
+ return: keypress.name === 'return',
247
+ escape: keypress.name === 'escape',
248
+ ctrl: keypress.ctrl,
249
+ shift: keypress.shift,
250
+ tab: keypress.name === 'tab',
251
+ backspace: keypress.name === 'backspace',
252
+ delete: keypress.name === 'delete',
253
+ meta: keypress.meta,
254
+ // Kitty keyboard protocol modifiers
255
+ super: keypress.super ?? false,
256
+ hyper: keypress.hyper ?? false,
257
+ capsLock: keypress.capsLock ?? false,
258
+ numLock: keypress.numLock ?? false,
259
+ eventType: keypress.eventType
260
+ };
261
+ let input;
262
+ if (keypress.isKittyProtocol) {
263
+ // Use text-as-codepoints field for printable keys (needed when
264
+ // reportAllKeysAsEscapeCodes flag is enabled), suppress non-printable
265
+ if (keypress.isPrintable) {
266
+ input = keypress.text ?? keypress.name;
267
+ } else if (keypress.ctrl && keypress.name.length === 1) {
268
+ // Ctrl+letter via codepoint 1-26 form: not printable text, but
269
+ // the letter name must flow through so handlers (e.g. exitOnCtrlC
270
+ // checking `input === 'c' && key.ctrl`) still work.
271
+ input = keypress.name;
272
+ } else {
273
+ input = '';
274
+ }
275
+ } else if (keypress.ctrl) {
276
+ // Keypress.name is guaranteed non-undefined by parseKeypress,
277
+ // but guard defensively since a TypeError here would crash the
278
+ // entire Ink app (see https://github.com/vadimdemedes/ink/issues/901).
279
+ input = keypress.name ?? '';
280
+ } else {
281
+ input = keypress.sequence;
282
+ }
283
+ if (!keypress.isKittyProtocol && nonAlphanumericKeys.includes(keypress.name)) {
284
+ input = '';
285
+ }
286
+ // Strip escape prefix from broken/incomplete sequences that
287
+ // parseKeypress did not fully resolve (e.g. a flushed "\u001B[").
288
+ if (input.startsWith('\u001B')) {
289
+ input = input.slice(1);
290
+ }
291
+ if (input.length === 1 && /[A-Z]/.test(input)) {
292
+ key.shift = true;
293
+ }
294
+ // If app is supposed to exit on Ctrl+C, skip input listeners.
295
+ if (input === 'c' && key.ctrl && internal_exitOnCtrlC) {
296
+ return;
297
+ }
298
+ // Use discreteUpdates to assign DiscreteEventPriority to state
299
+ // updates from keyboard input, ensuring they are processed at the
300
+ // highest priority in concurrent mode.
301
+ // @ts-expect-error Types require 5 arguments (fn, a, b, c, d) but only fn is needed at runtime.
302
+ reconciler.discreteUpdates(()=>{
303
+ inputHandler(input, key);
304
+ });
305
+ });
233
306
  reactExports.useEffect(()=>{
234
307
  if (options.isActive === false) {
235
308
  return;
236
309
  }
237
- const handleData = (data)=>{
238
- const keypress = parseKeypress(data);
239
- const key = {
240
- upArrow: keypress.name === 'up',
241
- downArrow: keypress.name === 'down',
242
- leftArrow: keypress.name === 'left',
243
- rightArrow: keypress.name === 'right',
244
- pageDown: keypress.name === 'pagedown',
245
- pageUp: keypress.name === 'pageup',
246
- home: keypress.name === 'home',
247
- end: keypress.name === 'end',
248
- return: keypress.name === 'return',
249
- escape: keypress.name === 'escape',
250
- ctrl: keypress.ctrl,
251
- shift: keypress.shift,
252
- tab: keypress.name === 'tab',
253
- backspace: keypress.name === 'backspace',
254
- delete: keypress.name === 'delete',
255
- // `parseKeypress` parses \u001B\u001B[A (meta + up arrow) as meta = false
256
- // but with option = true, so we need to take this into account here
257
- // to avoid breaking changes in Ink.
258
- // TODO(vadimdemedes): consider removing this in the next major version.
259
- meta: keypress.meta || keypress.name === 'escape' || keypress.option
260
- };
261
- let input = keypress.ctrl ? keypress.name : keypress.sequence;
262
- if (nonAlphanumericKeys.includes(keypress.name)) {
263
- input = '';
264
- }
265
- // Strip meta if it's still remaining after `parseKeypress`
266
- // TODO(vadimdemedes): remove this in the next major version.
267
- if (input.startsWith('\u001B')) {
268
- input = input.slice(1);
269
- }
270
- if (input.length === 1 && typeof input[0] === 'string' && /[A-Z]/.test(input[0])) {
271
- key.shift = true;
272
- }
273
- // If app is not supposed to exit on Ctrl+C, then let input listener handle it
274
- if (!(input === 'c' && key.ctrl) || !internal_exitOnCtrlC) {
275
- // @ts-expect-error TypeScript types for `batchedUpdates` require an argument, but React's codebase doesn't provide it and it works without it as expected.
276
- reconciler.batchedUpdates(()=>{
277
- inputHandler(input, key);
278
- });
279
- }
280
- };
281
- internal_eventEmitter?.on('input', handleData);
310
+ internal_eventEmitter.on('input', handleData);
282
311
  return ()=>{
283
- internal_eventEmitter?.removeListener('input', handleData);
312
+ internal_eventEmitter.removeListener('input', handleData);
284
313
  };
285
314
  }, [
286
315
  options.isActive,
287
- stdin,
288
- internal_exitOnCtrlC,
289
- inputHandler
316
+ internal_eventEmitter
290
317
  ]);
291
318
  };
292
319
 
293
320
  /**
294
- `useStdout` is a React hook that exposes the stdout stream where Ink renders your app.
321
+ A React hook that returns the stdout stream where Ink renders your app.
295
322
  */ const useStdout = ()=>reactExports.useContext(StdoutContext);
296
323
 
297
324
  // Hook