@opentabs-dev/plugin-sdk 0.0.34 → 0.0.36

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/dist/log.js CHANGED
@@ -6,54 +6,101 @@
6
6
  // ---------------------------------------------------------------------------
7
7
  const MAX_DATA_LENGTH = 10;
8
8
  const MAX_STRING_LENGTH = 4096;
9
+ const MAX_SERIALIZED_SIZE = 64 * 1024; // 64 KB per serialized argument
9
10
  /**
10
11
  * Produces a JSON-safe representation of a single argument.
11
12
  * Handles circular references, DOM nodes, functions, and other
12
13
  * non-serializable values without throwing.
13
14
  */
14
15
  const safeSerializeArg = (value) => {
15
- if (value === null || value === undefined)
16
- return value;
17
- const type = typeof value;
18
- if (type === 'boolean' || type === 'number')
19
- return value;
20
- if (type === 'string') {
21
- return value.length > MAX_STRING_LENGTH ? value.slice(0, MAX_STRING_LENGTH) + '…' : value;
22
- }
23
- if (type === 'function')
24
- return `[Function: ${value.name || 'anonymous'}]`;
25
- if (type === 'symbol')
26
- return `[Symbol: ${value.description ?? ''}]`;
27
- if (type === 'bigint')
28
- return `[BigInt: ${value.toString()}]`;
29
- // DOM nodes
30
- if (typeof value.nodeType === 'number') {
31
- const node = value;
32
- const className = node.className ? `.${node.className.split(' ')[0] ?? ''}` : '';
33
- return `[${node.nodeName ?? 'Node'}${node.id ? `#${node.id}` : ''}${className}]`;
34
- }
35
- // Errors
36
- if (value instanceof Error) {
37
- return { name: value.name, message: value.message, stack: value.stack };
38
- }
39
- // Fallback: attempt JSON round-trip to strip non-serializable properties
40
16
  try {
41
- const seen = new WeakSet();
42
- const json = JSON.stringify(value, (_key, v) => {
43
- if (typeof v === 'object' && v !== null) {
44
- if (seen.has(v))
45
- return '[Circular]';
46
- seen.add(v);
17
+ if (value === null || value === undefined)
18
+ return value;
19
+ const type = typeof value;
20
+ if (type === 'boolean' || type === 'number')
21
+ return value;
22
+ if (type === 'string') {
23
+ return value.length > MAX_STRING_LENGTH ? value.slice(0, MAX_STRING_LENGTH) + '…' : value;
24
+ }
25
+ if (type === 'function')
26
+ return `[Function: ${value.name || 'anonymous'}]`;
27
+ if (type === 'symbol')
28
+ return `[Symbol: ${value.description ?? ''}]`;
29
+ if (type === 'bigint')
30
+ return `[BigInt: ${value.toString()}]`;
31
+ // DOM nodes — require both nodeType (number) and nodeName (string) to avoid
32
+ // treating arbitrary objects like { nodeType: 1, className: 42 } as DOM nodes.
33
+ if (typeof value.nodeType === 'number' &&
34
+ typeof value.nodeName === 'string') {
35
+ try {
36
+ const node = value;
37
+ let classStr = '';
38
+ if (typeof node.className === 'string') {
39
+ classStr = node.className ? `.${node.className.split(' ')[0] ?? ''}` : '';
40
+ }
41
+ else if (node.className !== null && typeof node.className === 'object') {
42
+ // SVGAnimatedString has a .baseVal string property
43
+ const baseVal = node.className.baseVal;
44
+ if (typeof baseVal === 'string') {
45
+ classStr = baseVal ? `.${baseVal.split(' ')[0] ?? ''}` : '';
46
+ }
47
+ }
48
+ return `[${node.nodeName}${node.id ? `#${node.id}` : ''}${classStr}]`;
49
+ }
50
+ catch {
51
+ // Fall through to JSON fallback
52
+ }
53
+ }
54
+ // Errors
55
+ if (value instanceof Error) {
56
+ return { name: value.name, message: value.message, stack: value.stack };
57
+ }
58
+ // Exotic JS types — serialize as descriptive placeholder strings
59
+ if (value instanceof WeakRef)
60
+ return '[WeakRef]';
61
+ if (value instanceof WeakMap)
62
+ return '[WeakMap]';
63
+ if (value instanceof WeakSet)
64
+ return '[WeakSet]';
65
+ if (value instanceof ArrayBuffer)
66
+ return '[ArrayBuffer]';
67
+ if (typeof SharedArrayBuffer !== 'undefined' && value instanceof SharedArrayBuffer)
68
+ return '[SharedArrayBuffer]';
69
+ // Fallback: attempt JSON round-trip to strip non-serializable properties
70
+ try {
71
+ const seen = new WeakSet();
72
+ const json = JSON.stringify(value, (_key, v) => {
73
+ if (typeof v === 'object' && v !== null) {
74
+ if (seen.has(v))
75
+ return '[Circular]';
76
+ seen.add(v);
77
+ }
78
+ if (typeof v === 'function')
79
+ return `[Function: ${v.name || 'anonymous'}]`;
80
+ if (typeof v === 'bigint')
81
+ return `[BigInt: ${v.toString()}]`;
82
+ if (typeof v === 'symbol')
83
+ return `[Symbol: ${v.description ?? ''}]`;
84
+ if (v instanceof WeakRef)
85
+ return '[WeakRef]';
86
+ if (v instanceof WeakMap)
87
+ return '[WeakMap]';
88
+ if (v instanceof WeakSet)
89
+ return '[WeakSet]';
90
+ if (v instanceof ArrayBuffer)
91
+ return '[ArrayBuffer]';
92
+ if (typeof SharedArrayBuffer !== 'undefined' && v instanceof SharedArrayBuffer)
93
+ return '[SharedArrayBuffer]';
94
+ return v;
95
+ });
96
+ if (json.length > MAX_SERIALIZED_SIZE) {
97
+ return `[Object truncated: ${json.length} chars]`;
47
98
  }
48
- if (typeof v === 'function')
49
- return `[Function: ${v.name || 'anonymous'}]`;
50
- if (typeof v === 'bigint')
51
- return `[BigInt: ${v.toString()}]`;
52
- if (typeof v === 'symbol')
53
- return `[Symbol: ${v.description ?? ''}]`;
54
- return v;
55
- });
56
- return JSON.parse(json);
99
+ return JSON.parse(json);
100
+ }
101
+ catch {
102
+ return `[Unserializable: ${typeof value}]`;
103
+ }
57
104
  }
58
105
  catch {
59
106
  return `[Unserializable: ${typeof value}]`;
package/dist/log.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"log.js","sourceRoot":"","sources":["../src/log.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"log.js","sourceRoot":"","sources":["../src/log.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@
2
2
  * Union type of all Lucide icon names (kebab-case).
3
3
  *
4
4
  * Auto-generated from lucide-react v0.574.0 (1929 icons).
5
- * Regenerate with: bun run generate:icons
5
+ * Regenerate with: npm run generate:icons
6
6
  */
7
7
  export type LucideIconName = 'a-arrow-down' | 'a-arrow-up' | 'a-large-small' | 'accessibility' | 'activity' | 'activity-square' | 'air-vent' | 'airplay' | 'alarm-check' | 'alarm-clock' | 'alarm-clock-check' | 'alarm-clock-minus' | 'alarm-clock-off' | 'alarm-clock-plus' | 'alarm-minus' | 'alarm-plus' | 'alarm-smoke' | 'album' | 'alert-circle' | 'alert-octagon' | 'alert-triangle' | 'align-center' | 'align-center-horizontal' | 'align-center-vertical' | 'align-end-horizontal' | 'align-end-vertical' | 'align-horizontal-distribute-center' | 'align-horizontal-distribute-end' | 'align-horizontal-distribute-start' | 'align-horizontal-justify-center' | 'align-horizontal-justify-end' | 'align-horizontal-justify-start' | 'align-horizontal-space-around' | 'align-horizontal-space-between' | 'align-justify' | 'align-left' | 'align-right' | 'align-start-horizontal' | 'align-start-vertical' | 'align-vertical-distribute-center' | 'align-vertical-distribute-end' | 'align-vertical-distribute-start' | 'align-vertical-justify-center' | 'align-vertical-justify-end' | 'align-vertical-justify-start' | 'align-vertical-space-around' | 'align-vertical-space-between' | 'ambulance' | 'ampersand' | 'ampersands' | 'amphora' | 'anchor' | 'angry' | 'annoyed' | 'antenna' | 'anvil' | 'aperture' | 'app-window' | 'app-window-mac' | 'apple' | 'archive' | 'archive-restore' | 'archive-x' | 'area-chart' | 'armchair' | 'arrow-big-down' | 'arrow-big-down-dash' | 'arrow-big-left' | 'arrow-big-left-dash' | 'arrow-big-right' | 'arrow-big-right-dash' | 'arrow-big-up' | 'arrow-big-up-dash' | 'arrow-down' | 'arrow-down-0-1' | 'arrow-down-01' | 'arrow-down-1-0' | 'arrow-down-10' | 'arrow-down-a-z' | 'arrow-down-az' | 'arrow-down-circle' | 'arrow-down-from-line' | 'arrow-down-left' | 'arrow-down-left-from-circle' | 'arrow-down-left-from-square' | 'arrow-down-left-square' | 'arrow-down-narrow-wide' | 'arrow-down-right' | 'arrow-down-right-from-circle' | 'arrow-down-right-from-square' | 'arrow-down-right-square' | 'arrow-down-square' | 'arrow-down-to-dot' | 'arrow-down-to-line' | 'arrow-down-up' | 'arrow-down-wide-narrow' | 'arrow-down-z-a' | 'arrow-down-za' | 'arrow-left' | 'arrow-left-circle' | 'arrow-left-from-line' | 'arrow-left-right' | 'arrow-left-square' | 'arrow-left-to-line' | 'arrow-right' | 'arrow-right-circle' | 'arrow-right-from-line' | 'arrow-right-left' | 'arrow-right-square' | 'arrow-right-to-line' | 'arrow-up' | 'arrow-up-0-1' | 'arrow-up-01' | 'arrow-up-1-0' | 'arrow-up-10' | 'arrow-up-a-z' | 'arrow-up-az' | 'arrow-up-circle' | 'arrow-up-down' | 'arrow-up-from-dot' | 'arrow-up-from-line' | 'arrow-up-left' | 'arrow-up-left-from-circle' | 'arrow-up-left-from-square' | 'arrow-up-left-square' | 'arrow-up-narrow-wide' | 'arrow-up-right' | 'arrow-up-right-from-circle' | 'arrow-up-right-from-square' | 'arrow-up-right-square' | 'arrow-up-square' | 'arrow-up-to-line' | 'arrow-up-wide-narrow' | 'arrow-up-z-a' | 'arrow-up-za' | 'arrows-up-from-line' | 'asterisk' | 'asterisk-square' | 'at-sign' | 'atom' | 'audio-lines' | 'audio-waveform' | 'award' | 'axe' | 'axis-3-d' | 'axis-3d' | 'baby' | 'backpack' | 'badge' | 'badge-alert' | 'badge-cent' | 'badge-check' | 'badge-dollar-sign' | 'badge-euro' | 'badge-help' | 'badge-indian-rupee' | 'badge-info' | 'badge-japanese-yen' | 'badge-minus' | 'badge-percent' | 'badge-plus' | 'badge-pound-sterling' | 'badge-question-mark' | 'badge-russian-ruble' | 'badge-swiss-franc' | 'badge-turkish-lira' | 'badge-x' | 'baggage-claim' | 'balloon' | 'ban' | 'banana' | 'bandage' | 'banknote' | 'banknote-arrow-down' | 'banknote-arrow-up' | 'banknote-x' | 'bar-chart' | 'bar-chart-2' | 'bar-chart-3' | 'bar-chart-4' | 'bar-chart-big' | 'bar-chart-horizontal' | 'bar-chart-horizontal-big' | 'barcode' | 'barrel' | 'baseline' | 'bath' | 'battery' | 'battery-charging' | 'battery-full' | 'battery-low' | 'battery-medium' | 'battery-plus' | 'battery-warning' | 'beaker' | 'bean' | 'bean-off' | 'bed' | 'bed-double' | 'bed-single' | 'beef' | 'beer' | 'beer-off' | 'bell' | 'bell-dot' | 'bell-electric' | 'bell-minus' | 'bell-off' | 'bell-plus' | 'bell-ring' | 'between-horizonal-end' | 'between-horizonal-start' | 'between-horizontal-end' | 'between-horizontal-start' | 'between-vertical-end' | 'between-vertical-start' | 'biceps-flexed' | 'bike' | 'binary' | 'binoculars' | 'biohazard' | 'bird' | 'birdhouse' | 'bitcoin' | 'blend' | 'blinds' | 'blocks' | 'bluetooth' | 'bluetooth-connected' | 'bluetooth-off' | 'bluetooth-searching' | 'bold' | 'bolt' | 'bomb' | 'bone' | 'book' | 'book-a' | 'book-alert' | 'book-audio' | 'book-check' | 'book-copy' | 'book-dashed' | 'book-down' | 'book-headphones' | 'book-heart' | 'book-image' | 'book-key' | 'book-lock' | 'book-marked' | 'book-minus' | 'book-open' | 'book-open-check' | 'book-open-text' | 'book-plus' | 'book-search' | 'book-template' | 'book-text' | 'book-type' | 'book-up' | 'book-up-2' | 'book-user' | 'book-x' | 'bookmark' | 'bookmark-check' | 'bookmark-minus' | 'bookmark-plus' | 'bookmark-x' | 'boom-box' | 'bot' | 'bot-message-square' | 'bot-off' | 'bottle-wine' | 'bow-arrow' | 'box' | 'box-select' | 'boxes' | 'braces' | 'brackets' | 'brain' | 'brain-circuit' | 'brain-cog' | 'brick-wall' | 'brick-wall-fire' | 'brick-wall-shield' | 'briefcase' | 'briefcase-business' | 'briefcase-conveyor-belt' | 'briefcase-medical' | 'bring-to-front' | 'brush' | 'brush-cleaning' | 'bubbles' | 'bug' | 'bug-off' | 'bug-play' | 'building' | 'building-2' | 'bus' | 'bus-front' | 'cable' | 'cable-car' | 'cake' | 'cake-slice' | 'calculator' | 'calendar' | 'calendar-1' | 'calendar-arrow-down' | 'calendar-arrow-up' | 'calendar-check' | 'calendar-check-2' | 'calendar-clock' | 'calendar-cog' | 'calendar-days' | 'calendar-fold' | 'calendar-heart' | 'calendar-minus' | 'calendar-minus-2' | 'calendar-off' | 'calendar-plus' | 'calendar-plus-2' | 'calendar-range' | 'calendar-search' | 'calendar-sync' | 'calendar-x' | 'calendar-x-2' | 'calendars' | 'camera' | 'camera-off' | 'candlestick-chart' | 'candy' | 'candy-cane' | 'candy-off' | 'cannabis' | 'cannabis-off' | 'captions' | 'captions-off' | 'car' | 'car-front' | 'car-taxi-front' | 'caravan' | 'card-sim' | 'carrot' | 'case-lower' | 'case-sensitive' | 'case-upper' | 'cassette-tape' | 'cast' | 'castle' | 'cat' | 'cctv' | 'chart-area' | 'chart-bar' | 'chart-bar-big' | 'chart-bar-decreasing' | 'chart-bar-increasing' | 'chart-bar-stacked' | 'chart-candlestick' | 'chart-column' | 'chart-column-big' | 'chart-column-decreasing' | 'chart-column-increasing' | 'chart-column-stacked' | 'chart-gantt' | 'chart-line' | 'chart-network' | 'chart-no-axes-column' | 'chart-no-axes-column-decreasing' | 'chart-no-axes-column-increasing' | 'chart-no-axes-combined' | 'chart-no-axes-gantt' | 'chart-pie' | 'chart-scatter' | 'chart-spline' | 'check' | 'check-check' | 'check-circle' | 'check-circle-2' | 'check-line' | 'check-square' | 'check-square-2' | 'chef-hat' | 'cherry' | 'chess-bishop' | 'chess-king' | 'chess-knight' | 'chess-pawn' | 'chess-queen' | 'chess-rook' | 'chevron-down' | 'chevron-down-circle' | 'chevron-down-square' | 'chevron-first' | 'chevron-last' | 'chevron-left' | 'chevron-left-circle' | 'chevron-left-square' | 'chevron-right' | 'chevron-right-circle' | 'chevron-right-square' | 'chevron-up' | 'chevron-up-circle' | 'chevron-up-square' | 'chevrons-down' | 'chevrons-down-up' | 'chevrons-left' | 'chevrons-left-right' | 'chevrons-left-right-ellipsis' | 'chevrons-right' | 'chevrons-right-left' | 'chevrons-up' | 'chevrons-up-down' | 'chrome' | 'chromium' | 'church' | 'cigarette' | 'cigarette-off' | 'circle' | 'circle-alert' | 'circle-arrow-down' | 'circle-arrow-left' | 'circle-arrow-out-down-left' | 'circle-arrow-out-down-right' | 'circle-arrow-out-up-left' | 'circle-arrow-out-up-right' | 'circle-arrow-right' | 'circle-arrow-up' | 'circle-check' | 'circle-check-big' | 'circle-chevron-down' | 'circle-chevron-left' | 'circle-chevron-right' | 'circle-chevron-up' | 'circle-dashed' | 'circle-divide' | 'circle-dollar-sign' | 'circle-dot' | 'circle-dot-dashed' | 'circle-ellipsis' | 'circle-equal' | 'circle-fading-arrow-up' | 'circle-fading-plus' | 'circle-gauge' | 'circle-help' | 'circle-minus' | 'circle-off' | 'circle-parking' | 'circle-parking-off' | 'circle-pause' | 'circle-percent' | 'circle-pile' | 'circle-play' | 'circle-plus' | 'circle-pound-sterling' | 'circle-power' | 'circle-question-mark' | 'circle-slash' | 'circle-slash-2' | 'circle-slashed' | 'circle-small' | 'circle-star' | 'circle-stop' | 'circle-user' | 'circle-user-round' | 'circle-x' | 'circuit-board' | 'citrus' | 'clapperboard' | 'clipboard' | 'clipboard-check' | 'clipboard-clock' | 'clipboard-copy' | 'clipboard-edit' | 'clipboard-list' | 'clipboard-minus' | 'clipboard-paste' | 'clipboard-pen' | 'clipboard-pen-line' | 'clipboard-plus' | 'clipboard-signature' | 'clipboard-type' | 'clipboard-x' | 'clock' | 'clock-1' | 'clock-10' | 'clock-11' | 'clock-12' | 'clock-2' | 'clock-3' | 'clock-4' | 'clock-5' | 'clock-6' | 'clock-7' | 'clock-8' | 'clock-9' | 'clock-alert' | 'clock-arrow-down' | 'clock-arrow-up' | 'clock-check' | 'clock-fading' | 'clock-plus' | 'closed-caption' | 'cloud' | 'cloud-alert' | 'cloud-backup' | 'cloud-check' | 'cloud-cog' | 'cloud-download' | 'cloud-drizzle' | 'cloud-fog' | 'cloud-hail' | 'cloud-lightning' | 'cloud-moon' | 'cloud-moon-rain' | 'cloud-off' | 'cloud-rain' | 'cloud-rain-wind' | 'cloud-snow' | 'cloud-sun' | 'cloud-sun-rain' | 'cloud-sync' | 'cloud-upload' | 'cloudy' | 'clover' | 'club' | 'code' | 'code-2' | 'code-square' | 'code-xml' | 'codepen' | 'codesandbox' | 'coffee' | 'cog' | 'coins' | 'columns' | 'columns-2' | 'columns-3' | 'columns-3-cog' | 'columns-4' | 'columns-settings' | 'combine' | 'command' | 'compass' | 'component' | 'computer' | 'concierge-bell' | 'cone' | 'construction' | 'contact' | 'contact-2' | 'contact-round' | 'container' | 'contrast' | 'cookie' | 'cooking-pot' | 'copy' | 'copy-check' | 'copy-minus' | 'copy-plus' | 'copy-slash' | 'copy-x' | 'copyleft' | 'copyright' | 'corner-down-left' | 'corner-down-right' | 'corner-left-down' | 'corner-left-up' | 'corner-right-down' | 'corner-right-up' | 'corner-up-left' | 'corner-up-right' | 'cpu' | 'creative-commons' | 'credit-card' | 'croissant' | 'crop' | 'cross' | 'crosshair' | 'crown' | 'cuboid' | 'cup-soda' | 'curly-braces' | 'currency' | 'cylinder' | 'dam' | 'database' | 'database-backup' | 'database-search' | 'database-zap' | 'decimals-arrow-left' | 'decimals-arrow-right' | 'delete' | 'dessert' | 'diameter' | 'diamond' | 'diamond-minus' | 'diamond-percent' | 'diamond-plus' | 'dice-1' | 'dice-2' | 'dice-3' | 'dice-4' | 'dice-5' | 'dice-6' | 'dices' | 'diff' | 'disc' | 'disc-2' | 'disc-3' | 'disc-album' | 'divide' | 'divide-circle' | 'divide-square' | 'dna' | 'dna-off' | 'dock' | 'dog' | 'dollar-sign' | 'donut' | 'door-closed' | 'door-closed-locked' | 'door-open' | 'dot' | 'dot-square' | 'download' | 'download-cloud' | 'drafting-compass' | 'drama' | 'dribbble' | 'drill' | 'drone' | 'droplet' | 'droplet-off' | 'droplets' | 'drum' | 'drumstick' | 'dumbbell' | 'ear' | 'ear-off' | 'earth' | 'earth-lock' | 'eclipse' | 'edit' | 'edit-2' | 'edit-3' | 'egg' | 'egg-fried' | 'egg-off' | 'ellipsis' | 'ellipsis-vertical' | 'equal' | 'equal-approximately' | 'equal-not' | 'equal-square' | 'eraser' | 'ethernet-port' | 'euro' | 'ev-charger' | 'expand' | 'external-link' | 'eye' | 'eye-closed' | 'eye-off' | 'facebook' | 'factory' | 'fan' | 'fast-forward' | 'feather' | 'fence' | 'ferris-wheel' | 'figma' | 'file' | 'file-archive' | 'file-audio' | 'file-audio-2' | 'file-axis-3-d' | 'file-axis-3d' | 'file-badge' | 'file-badge-2' | 'file-bar-chart' | 'file-bar-chart-2' | 'file-box' | 'file-braces' | 'file-braces-corner' | 'file-chart-column' | 'file-chart-column-increasing' | 'file-chart-line' | 'file-chart-pie' | 'file-check' | 'file-check-2' | 'file-check-corner' | 'file-clock' | 'file-code' | 'file-code-2' | 'file-code-corner' | 'file-cog' | 'file-cog-2' | 'file-diff' | 'file-digit' | 'file-down' | 'file-edit' | 'file-exclamation-point' | 'file-headphone' | 'file-heart' | 'file-image' | 'file-input' | 'file-json' | 'file-json-2' | 'file-key' | 'file-key-2' | 'file-line-chart' | 'file-lock' | 'file-lock-2' | 'file-minus' | 'file-minus-2' | 'file-minus-corner' | 'file-music' | 'file-output' | 'file-pen' | 'file-pen-line' | 'file-pie-chart' | 'file-play' | 'file-plus' | 'file-plus-2' | 'file-plus-corner' | 'file-question' | 'file-question-mark' | 'file-scan' | 'file-search' | 'file-search-2' | 'file-search-corner' | 'file-signal' | 'file-signature' | 'file-sliders' | 'file-spreadsheet' | 'file-stack' | 'file-symlink' | 'file-terminal' | 'file-text' | 'file-type' | 'file-type-2' | 'file-type-corner' | 'file-up' | 'file-user' | 'file-video' | 'file-video-2' | 'file-video-camera' | 'file-volume' | 'file-volume-2' | 'file-warning' | 'file-x' | 'file-x-2' | 'file-x-corner' | 'files' | 'film' | 'filter' | 'filter-x' | 'fingerprint' | 'fingerprint-pattern' | 'fire-extinguisher' | 'fish' | 'fish-off' | 'fish-symbol' | 'fishing-hook' | 'flag' | 'flag-off' | 'flag-triangle-left' | 'flag-triangle-right' | 'flame' | 'flame-kindling' | 'flashlight' | 'flashlight-off' | 'flask-conical' | 'flask-conical-off' | 'flask-round' | 'flip-horizontal' | 'flip-horizontal-2' | 'flip-vertical' | 'flip-vertical-2' | 'flower' | 'flower-2' | 'focus' | 'fold-horizontal' | 'fold-vertical' | 'folder' | 'folder-archive' | 'folder-check' | 'folder-clock' | 'folder-closed' | 'folder-code' | 'folder-cog' | 'folder-cog-2' | 'folder-dot' | 'folder-down' | 'folder-edit' | 'folder-git' | 'folder-git-2' | 'folder-heart' | 'folder-input' | 'folder-kanban' | 'folder-key' | 'folder-lock' | 'folder-minus' | 'folder-open' | 'folder-open-dot' | 'folder-output' | 'folder-pen' | 'folder-plus' | 'folder-root' | 'folder-search' | 'folder-search-2' | 'folder-symlink' | 'folder-sync' | 'folder-tree' | 'folder-up' | 'folder-x' | 'folders' | 'footprints' | 'fork-knife' | 'fork-knife-crossed' | 'forklift' | 'form' | 'form-input' | 'forward' | 'frame' | 'framer' | 'frown' | 'fuel' | 'fullscreen' | 'function-square' | 'funnel' | 'funnel-plus' | 'funnel-x' | 'gallery-horizontal' | 'gallery-horizontal-end' | 'gallery-thumbnails' | 'gallery-vertical' | 'gallery-vertical-end' | 'gamepad' | 'gamepad-2' | 'gamepad-directional' | 'gantt-chart' | 'gantt-chart-square' | 'gauge' | 'gauge-circle' | 'gavel' | 'gem' | 'georgian-lari' | 'ghost' | 'gift' | 'git-branch' | 'git-branch-minus' | 'git-branch-plus' | 'git-commit' | 'git-commit-horizontal' | 'git-commit-vertical' | 'git-compare' | 'git-compare-arrows' | 'git-fork' | 'git-graph' | 'git-merge' | 'git-merge-conflict' | 'git-pull-request' | 'git-pull-request-arrow' | 'git-pull-request-closed' | 'git-pull-request-create' | 'git-pull-request-create-arrow' | 'git-pull-request-draft' | 'github' | 'gitlab' | 'glass-water' | 'glasses' | 'globe' | 'globe-2' | 'globe-lock' | 'globe-off' | 'globe-x' | 'goal' | 'gpu' | 'grab' | 'graduation-cap' | 'grape' | 'grid' | 'grid-2-x-2' | 'grid-2-x-2-check' | 'grid-2-x-2-plus' | 'grid-2-x-2-x' | 'grid-2x2' | 'grid-2x2-check' | 'grid-2x2-plus' | 'grid-2x2-x' | 'grid-3-x-3' | 'grid-3x2' | 'grid-3x3' | 'grip' | 'grip-horizontal' | 'grip-vertical' | 'group' | 'guitar' | 'ham' | 'hamburger' | 'hammer' | 'hand' | 'hand-coins' | 'hand-fist' | 'hand-grab' | 'hand-heart' | 'hand-helping' | 'hand-metal' | 'hand-platter' | 'handbag' | 'handshake' | 'hard-drive' | 'hard-drive-download' | 'hard-drive-upload' | 'hard-hat' | 'hash' | 'hat-glasses' | 'haze' | 'hd' | 'hdmi-port' | 'heading' | 'heading-1' | 'heading-2' | 'heading-3' | 'heading-4' | 'heading-5' | 'heading-6' | 'headphone-off' | 'headphones' | 'headset' | 'heart' | 'heart-crack' | 'heart-handshake' | 'heart-minus' | 'heart-off' | 'heart-plus' | 'heart-pulse' | 'heater' | 'helicopter' | 'help-circle' | 'helping-hand' | 'hexagon' | 'highlighter' | 'history' | 'home' | 'hop' | 'hop-off' | 'hospital' | 'hotel' | 'hourglass' | 'house' | 'house-heart' | 'house-plug' | 'house-plus' | 'house-wifi' | 'ice-cream' | 'ice-cream-2' | 'ice-cream-bowl' | 'ice-cream-cone' | 'id-card' | 'id-card-lanyard' | 'image' | 'image-down' | 'image-minus' | 'image-off' | 'image-play' | 'image-plus' | 'image-up' | 'image-upscale' | 'images' | 'import' | 'inbox' | 'indent' | 'indent-decrease' | 'indent-increase' | 'indian-rupee' | 'infinity' | 'info' | 'inspect' | 'inspection-panel' | 'instagram' | 'italic' | 'iteration-ccw' | 'iteration-cw' | 'japanese-yen' | 'joystick' | 'kanban' | 'kanban-square' | 'kanban-square-dashed' | 'kayak' | 'key' | 'key-round' | 'key-square' | 'keyboard' | 'keyboard-music' | 'keyboard-off' | 'lamp' | 'lamp-ceiling' | 'lamp-desk' | 'lamp-floor' | 'lamp-wall-down' | 'lamp-wall-up' | 'land-plot' | 'landmark' | 'languages' | 'laptop' | 'laptop-2' | 'laptop-minimal' | 'laptop-minimal-check' | 'lasso' | 'lasso-select' | 'laugh' | 'layers' | 'layers-2' | 'layers-3' | 'layers-plus' | 'layout' | 'layout-dashboard' | 'layout-grid' | 'layout-list' | 'layout-panel-left' | 'layout-panel-top' | 'layout-template' | 'leaf' | 'leafy-green' | 'lectern' | 'lens-concave' | 'lens-convex' | 'letter-text' | 'library' | 'library-big' | 'library-square' | 'life-buoy' | 'ligature' | 'lightbulb' | 'lightbulb-off' | 'line-chart' | 'line-dot-right-horizontal' | 'line-squiggle' | 'link' | 'link-2' | 'link-2-off' | 'linkedin' | 'list' | 'list-check' | 'list-checks' | 'list-chevrons-down-up' | 'list-chevrons-up-down' | 'list-collapse' | 'list-end' | 'list-filter' | 'list-filter-plus' | 'list-indent-decrease' | 'list-indent-increase' | 'list-minus' | 'list-music' | 'list-ordered' | 'list-plus' | 'list-restart' | 'list-start' | 'list-todo' | 'list-tree' | 'list-video' | 'list-x' | 'loader' | 'loader-2' | 'loader-circle' | 'loader-pinwheel' | 'locate' | 'locate-fixed' | 'locate-off' | 'location-edit' | 'lock' | 'lock-keyhole' | 'lock-keyhole-open' | 'lock-open' | 'log-in' | 'log-out' | 'logs' | 'lollipop' | 'luggage' | 'm-square' | 'magnet' | 'mail' | 'mail-check' | 'mail-minus' | 'mail-open' | 'mail-plus' | 'mail-question' | 'mail-question-mark' | 'mail-search' | 'mail-warning' | 'mail-x' | 'mailbox' | 'mails' | 'map' | 'map-minus' | 'map-pin' | 'map-pin-check' | 'map-pin-check-inside' | 'map-pin-house' | 'map-pin-minus' | 'map-pin-minus-inside' | 'map-pin-off' | 'map-pin-pen' | 'map-pin-plus' | 'map-pin-plus-inside' | 'map-pin-x' | 'map-pin-x-inside' | 'map-pinned' | 'map-plus' | 'mars' | 'mars-stroke' | 'martini' | 'maximize' | 'maximize-2' | 'medal' | 'megaphone' | 'megaphone-off' | 'meh' | 'memory-stick' | 'menu' | 'menu-square' | 'merge' | 'message-circle' | 'message-circle-check' | 'message-circle-code' | 'message-circle-dashed' | 'message-circle-heart' | 'message-circle-more' | 'message-circle-off' | 'message-circle-plus' | 'message-circle-question' | 'message-circle-question-mark' | 'message-circle-reply' | 'message-circle-warning' | 'message-circle-x' | 'message-square' | 'message-square-code' | 'message-square-dashed' | 'message-square-diff' | 'message-square-dot' | 'message-square-heart' | 'message-square-lock' | 'message-square-more' | 'message-square-off' | 'message-square-plus' | 'message-square-quote' | 'message-square-reply' | 'message-square-share' | 'message-square-text' | 'message-square-warning' | 'message-square-x' | 'messages-square' | 'mic' | 'mic-2' | 'mic-off' | 'mic-vocal' | 'microchip' | 'microscope' | 'microwave' | 'milestone' | 'milk' | 'milk-off' | 'minimize' | 'minimize-2' | 'minus' | 'minus-circle' | 'minus-square' | 'mirror-rectangular' | 'mirror-round' | 'monitor' | 'monitor-check' | 'monitor-cloud' | 'monitor-cog' | 'monitor-dot' | 'monitor-down' | 'monitor-off' | 'monitor-pause' | 'monitor-play' | 'monitor-smartphone' | 'monitor-speaker' | 'monitor-stop' | 'monitor-up' | 'monitor-x' | 'moon' | 'moon-star' | 'more-horizontal' | 'more-vertical' | 'motorbike' | 'mountain' | 'mountain-snow' | 'mouse' | 'mouse-left' | 'mouse-off' | 'mouse-pointer' | 'mouse-pointer-2' | 'mouse-pointer-2-off' | 'mouse-pointer-ban' | 'mouse-pointer-click' | 'mouse-pointer-square-dashed' | 'move' | 'move-3-d' | 'move-3d' | 'move-diagonal' | 'move-diagonal-2' | 'move-down' | 'move-down-left' | 'move-down-right' | 'move-horizontal' | 'move-left' | 'move-right' | 'move-up' | 'move-up-left' | 'move-up-right' | 'move-vertical' | 'music' | 'music-2' | 'music-3' | 'music-4' | 'navigation' | 'navigation-2' | 'navigation-2-off' | 'navigation-off' | 'network' | 'newspaper' | 'nfc' | 'non-binary' | 'notebook' | 'notebook-pen' | 'notebook-tabs' | 'notebook-text' | 'notepad-text' | 'notepad-text-dashed' | 'nut' | 'nut-off' | 'octagon' | 'octagon-alert' | 'octagon-minus' | 'octagon-pause' | 'octagon-x' | 'omega' | 'option' | 'orbit' | 'origami' | 'outdent' | 'package' | 'package-2' | 'package-check' | 'package-minus' | 'package-open' | 'package-plus' | 'package-search' | 'package-x' | 'paint-bucket' | 'paint-roller' | 'paintbrush' | 'paintbrush-2' | 'paintbrush-vertical' | 'palette' | 'palmtree' | 'panda' | 'panel-bottom' | 'panel-bottom-close' | 'panel-bottom-dashed' | 'panel-bottom-inactive' | 'panel-bottom-open' | 'panel-left' | 'panel-left-close' | 'panel-left-dashed' | 'panel-left-inactive' | 'panel-left-open' | 'panel-left-right-dashed' | 'panel-right' | 'panel-right-close' | 'panel-right-dashed' | 'panel-right-inactive' | 'panel-right-open' | 'panel-top' | 'panel-top-bottom-dashed' | 'panel-top-close' | 'panel-top-dashed' | 'panel-top-inactive' | 'panel-top-open' | 'panels-left-bottom' | 'panels-left-right' | 'panels-right-bottom' | 'panels-top-bottom' | 'panels-top-left' | 'paperclip' | 'parentheses' | 'parking-circle' | 'parking-circle-off' | 'parking-meter' | 'parking-square' | 'parking-square-off' | 'party-popper' | 'pause' | 'pause-circle' | 'pause-octagon' | 'paw-print' | 'pc-case' | 'pen' | 'pen-box' | 'pen-line' | 'pen-off' | 'pen-square' | 'pen-tool' | 'pencil' | 'pencil-line' | 'pencil-off' | 'pencil-ruler' | 'pentagon' | 'percent' | 'percent-circle' | 'percent-diamond' | 'percent-square' | 'person-standing' | 'philippine-peso' | 'phone' | 'phone-call' | 'phone-forwarded' | 'phone-incoming' | 'phone-missed' | 'phone-off' | 'phone-outgoing' | 'pi' | 'pi-square' | 'piano' | 'pickaxe' | 'picture-in-picture' | 'picture-in-picture-2' | 'pie-chart' | 'piggy-bank' | 'pilcrow' | 'pilcrow-left' | 'pilcrow-right' | 'pilcrow-square' | 'pill' | 'pill-bottle' | 'pin' | 'pin-off' | 'pipette' | 'pizza' | 'plane' | 'plane-landing' | 'plane-takeoff' | 'play' | 'play-circle' | 'play-square' | 'plug' | 'plug-2' | 'plug-zap' | 'plug-zap-2' | 'plus' | 'plus-circle' | 'plus-square' | 'pocket' | 'pocket-knife' | 'podcast' | 'pointer' | 'pointer-off' | 'popcorn' | 'popsicle' | 'pound-sterling' | 'power' | 'power-circle' | 'power-off' | 'power-square' | 'presentation' | 'printer' | 'printer-check' | 'printer-x' | 'projector' | 'proportions' | 'puzzle' | 'pyramid' | 'qr-code' | 'quote' | 'rabbit' | 'radar' | 'radiation' | 'radical' | 'radio' | 'radio-receiver' | 'radio-tower' | 'radius' | 'rail-symbol' | 'rainbow' | 'rat' | 'ratio' | 'receipt' | 'receipt-cent' | 'receipt-euro' | 'receipt-indian-rupee' | 'receipt-japanese-yen' | 'receipt-pound-sterling' | 'receipt-russian-ruble' | 'receipt-swiss-franc' | 'receipt-text' | 'receipt-turkish-lira' | 'rectangle-circle' | 'rectangle-ellipsis' | 'rectangle-goggles' | 'rectangle-horizontal' | 'rectangle-vertical' | 'recycle' | 'redo' | 'redo-2' | 'redo-dot' | 'refresh-ccw' | 'refresh-ccw-dot' | 'refresh-cw' | 'refresh-cw-off' | 'refrigerator' | 'regex' | 'remove-formatting' | 'repeat' | 'repeat-1' | 'repeat-2' | 'replace' | 'replace-all' | 'reply' | 'reply-all' | 'rewind' | 'ribbon' | 'rocket' | 'rocking-chair' | 'roller-coaster' | 'rose' | 'rotate-3-d' | 'rotate-3d' | 'rotate-ccw' | 'rotate-ccw-key' | 'rotate-ccw-square' | 'rotate-cw' | 'rotate-cw-square' | 'route' | 'route-off' | 'router' | 'rows' | 'rows-2' | 'rows-3' | 'rows-4' | 'rss' | 'ruler' | 'ruler-dimension-line' | 'russian-ruble' | 'sailboat' | 'salad' | 'sandwich' | 'satellite' | 'satellite-dish' | 'saudi-riyal' | 'save' | 'save-all' | 'save-off' | 'scale' | 'scale-3-d' | 'scale-3d' | 'scaling' | 'scan' | 'scan-barcode' | 'scan-eye' | 'scan-face' | 'scan-heart' | 'scan-line' | 'scan-qr-code' | 'scan-search' | 'scan-text' | 'scatter-chart' | 'school' | 'school-2' | 'scissors' | 'scissors-line-dashed' | 'scissors-square' | 'scissors-square-dashed-bottom' | 'scooter' | 'screen-share' | 'screen-share-off' | 'scroll' | 'scroll-text' | 'search' | 'search-alert' | 'search-check' | 'search-code' | 'search-slash' | 'search-x' | 'section' | 'send' | 'send-horizonal' | 'send-horizontal' | 'send-to-back' | 'separator-horizontal' | 'separator-vertical' | 'server' | 'server-cog' | 'server-crash' | 'server-off' | 'settings' | 'settings-2' | 'shapes' | 'share' | 'share-2' | 'sheet' | 'shell' | 'shelving-unit' | 'shield' | 'shield-alert' | 'shield-ban' | 'shield-check' | 'shield-close' | 'shield-ellipsis' | 'shield-half' | 'shield-minus' | 'shield-off' | 'shield-plus' | 'shield-question' | 'shield-question-mark' | 'shield-user' | 'shield-x' | 'ship' | 'ship-wheel' | 'shirt' | 'shopping-bag' | 'shopping-basket' | 'shopping-cart' | 'shovel' | 'shower-head' | 'shredder' | 'shrimp' | 'shrink' | 'shrub' | 'shuffle' | 'sidebar' | 'sidebar-close' | 'sidebar-open' | 'sigma' | 'sigma-square' | 'signal' | 'signal-high' | 'signal-low' | 'signal-medium' | 'signal-zero' | 'signature' | 'signpost' | 'signpost-big' | 'siren' | 'skip-back' | 'skip-forward' | 'skull' | 'slack' | 'slash' | 'slash-square' | 'slice' | 'sliders' | 'sliders-horizontal' | 'sliders-vertical' | 'smartphone' | 'smartphone-charging' | 'smartphone-nfc' | 'smile' | 'smile-plus' | 'snail' | 'snowflake' | 'soap-dispenser-droplet' | 'sofa' | 'solar-panel' | 'sort-asc' | 'sort-desc' | 'soup' | 'space' | 'spade' | 'sparkle' | 'sparkles' | 'speaker' | 'speech' | 'spell-check' | 'spell-check-2' | 'spline' | 'spline-pointer' | 'split' | 'split-square-horizontal' | 'split-square-vertical' | 'spool' | 'spotlight' | 'spray-can' | 'sprout' | 'square' | 'square-activity' | 'square-arrow-down' | 'square-arrow-down-left' | 'square-arrow-down-right' | 'square-arrow-left' | 'square-arrow-out-down-left' | 'square-arrow-out-down-right' | 'square-arrow-out-up-left' | 'square-arrow-out-up-right' | 'square-arrow-right' | 'square-arrow-up' | 'square-arrow-up-left' | 'square-arrow-up-right' | 'square-asterisk' | 'square-bottom-dashed-scissors' | 'square-chart-gantt' | 'square-check' | 'square-check-big' | 'square-chevron-down' | 'square-chevron-left' | 'square-chevron-right' | 'square-chevron-up' | 'square-code' | 'square-dashed' | 'square-dashed-bottom' | 'square-dashed-bottom-code' | 'square-dashed-kanban' | 'square-dashed-mouse-pointer' | 'square-dashed-top-solid' | 'square-divide' | 'square-dot' | 'square-equal' | 'square-function' | 'square-gantt-chart' | 'square-kanban' | 'square-library' | 'square-m' | 'square-menu' | 'square-minus' | 'square-mouse-pointer' | 'square-parking' | 'square-parking-off' | 'square-pause' | 'square-pen' | 'square-percent' | 'square-pi' | 'square-pilcrow' | 'square-play' | 'square-plus' | 'square-power' | 'square-radical' | 'square-round-corner' | 'square-scissors' | 'square-sigma' | 'square-slash' | 'square-split-horizontal' | 'square-split-vertical' | 'square-square' | 'square-stack' | 'square-star' | 'square-stop' | 'square-terminal' | 'square-user' | 'square-user-round' | 'square-x' | 'squares-exclude' | 'squares-intersect' | 'squares-subtract' | 'squares-unite' | 'squircle' | 'squircle-dashed' | 'squirrel' | 'stamp' | 'star' | 'star-half' | 'star-off' | 'stars' | 'step-back' | 'step-forward' | 'stethoscope' | 'sticker' | 'sticky-note' | 'stone' | 'stop-circle' | 'store' | 'stretch-horizontal' | 'stretch-vertical' | 'strikethrough' | 'subscript' | 'subtitles' | 'sun' | 'sun-dim' | 'sun-medium' | 'sun-moon' | 'sun-snow' | 'sunrise' | 'sunset' | 'superscript' | 'swatch-book' | 'swiss-franc' | 'switch-camera' | 'sword' | 'swords' | 'syringe' | 'table' | 'table-2' | 'table-cells-merge' | 'table-cells-split' | 'table-columns-split' | 'table-config' | 'table-of-contents' | 'table-properties' | 'table-rows-split' | 'tablet' | 'tablet-smartphone' | 'tablets' | 'tag' | 'tags' | 'tally-1' | 'tally-2' | 'tally-3' | 'tally-4' | 'tally-5' | 'tangent' | 'target' | 'telescope' | 'tent' | 'tent-tree' | 'terminal' | 'terminal-square' | 'test-tube' | 'test-tube-2' | 'test-tube-diagonal' | 'test-tubes' | 'text' | 'text-align-center' | 'text-align-end' | 'text-align-justify' | 'text-align-start' | 'text-cursor' | 'text-cursor-input' | 'text-initial' | 'text-quote' | 'text-search' | 'text-select' | 'text-selection' | 'text-wrap' | 'theater' | 'thermometer' | 'thermometer-snowflake' | 'thermometer-sun' | 'thumbs-down' | 'thumbs-up' | 'ticket' | 'ticket-check' | 'ticket-minus' | 'ticket-percent' | 'ticket-plus' | 'ticket-slash' | 'ticket-x' | 'tickets' | 'tickets-plane' | 'timer' | 'timer-off' | 'timer-reset' | 'toggle-left' | 'toggle-right' | 'toilet' | 'tool-case' | 'toolbox' | 'tornado' | 'torus' | 'touchpad' | 'touchpad-off' | 'towel-rack' | 'tower-control' | 'toy-brick' | 'tractor' | 'traffic-cone' | 'train' | 'train-front' | 'train-front-tunnel' | 'train-track' | 'tram-front' | 'transgender' | 'trash' | 'trash-2' | 'tree-deciduous' | 'tree-palm' | 'tree-pine' | 'trees' | 'trello' | 'trending-down' | 'trending-up' | 'trending-up-down' | 'triangle' | 'triangle-alert' | 'triangle-dashed' | 'triangle-right' | 'trophy' | 'truck' | 'truck-electric' | 'turkish-lira' | 'turntable' | 'turtle' | 'tv' | 'tv-2' | 'tv-minimal' | 'tv-minimal-play' | 'twitch' | 'twitter' | 'type' | 'type-outline' | 'umbrella' | 'umbrella-off' | 'underline' | 'undo' | 'undo-2' | 'undo-dot' | 'unfold-horizontal' | 'unfold-vertical' | 'ungroup' | 'university' | 'unlink' | 'unlink-2' | 'unlock' | 'unlock-keyhole' | 'unplug' | 'upload' | 'upload-cloud' | 'usb' | 'user' | 'user-2' | 'user-check' | 'user-check-2' | 'user-circle' | 'user-circle-2' | 'user-cog' | 'user-cog-2' | 'user-key' | 'user-lock' | 'user-minus' | 'user-minus-2' | 'user-pen' | 'user-plus' | 'user-plus-2' | 'user-round' | 'user-round-check' | 'user-round-cog' | 'user-round-key' | 'user-round-minus' | 'user-round-pen' | 'user-round-plus' | 'user-round-search' | 'user-round-x' | 'user-search' | 'user-square' | 'user-square-2' | 'user-star' | 'user-x' | 'user-x-2' | 'users' | 'users-2' | 'users-round' | 'utensils' | 'utensils-crossed' | 'utility-pole' | 'van' | 'variable' | 'vault' | 'vector-square' | 'vegan' | 'venetian-mask' | 'venus' | 'venus-and-mars' | 'verified' | 'vibrate' | 'vibrate-off' | 'video' | 'video-off' | 'videotape' | 'view' | 'voicemail' | 'volleyball' | 'volume' | 'volume-1' | 'volume-2' | 'volume-off' | 'volume-x' | 'vote' | 'wallet' | 'wallet-2' | 'wallet-cards' | 'wallet-minimal' | 'wallpaper' | 'wand' | 'wand-2' | 'wand-sparkles' | 'warehouse' | 'washing-machine' | 'watch' | 'waves' | 'waves-arrow-down' | 'waves-arrow-up' | 'waves-ladder' | 'waypoints' | 'webcam' | 'webhook' | 'webhook-off' | 'weight' | 'weight-tilde' | 'wheat' | 'wheat-off' | 'whole-word' | 'wifi' | 'wifi-cog' | 'wifi-high' | 'wifi-low' | 'wifi-off' | 'wifi-pen' | 'wifi-sync' | 'wifi-zero' | 'wind' | 'wind-arrow-down' | 'wine' | 'wine-off' | 'workflow' | 'worm' | 'wrap-text' | 'wrench' | 'x' | 'x-circle' | 'x-line-top' | 'x-octagon' | 'x-square' | 'youtube' | 'zap' | 'zap-off' | 'zoom-in' | 'zoom-out';
8
8
  /** Runtime set of all valid Lucide icon names for build-time validation */
@@ -1,10 +1,3 @@
1
- /**
2
- * Safe deep property access on `globalThis` using dot-notation path.
3
- * Returns `undefined` if any segment in the path is missing or if a getter throws.
4
- *
5
- * @example
6
- * const token = getPageGlobal('TS.boot_data.api_token') as string | undefined;
7
- */
8
1
  export declare const getPageGlobal: (path: string) => unknown;
9
2
  /**
10
3
  * Returns the current page URL (`window.location.href`).
@@ -1 +1 @@
1
- {"version":3,"file":"page-state.d.ts","sourceRoot":"","sources":["../src/page-state.ts"],"names":[],"mappings":"AAIA;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,GAAI,MAAM,MAAM,KAAG,OAY5C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa,QAAO,MAA8B,CAAC;AAEhE;;GAEG;AACH,eAAO,MAAM,YAAY,QAAO,MAAwB,CAAC"}
1
+ {"version":3,"file":"page-state.d.ts","sourceRoot":"","sources":["../src/page-state.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,aAAa,GAAI,MAAM,MAAM,KAAG,OAc5C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa,QAAO,MAA8B,CAAC;AAEhE;;GAEG;AACH,eAAO,MAAM,YAAY,QAAO,MAAwB,CAAC"}
@@ -8,12 +8,17 @@
8
8
  * @example
9
9
  * const token = getPageGlobal('TS.boot_data.api_token') as string | undefined;
10
10
  */
11
+ const BLOCKED_SEGMENTS = new Set(['__proto__', 'constructor', 'prototype']);
11
12
  export const getPageGlobal = (path) => {
12
13
  try {
13
14
  const segments = path.split('.');
14
15
  let current = globalThis;
15
16
  for (const segment of segments) {
16
- if (current === null || current === undefined || typeof current !== 'object')
17
+ if (current === null || current === undefined)
18
+ return undefined;
19
+ if (typeof current !== 'object' && typeof current !== 'function')
20
+ return undefined;
21
+ if (BLOCKED_SEGMENTS.has(segment))
17
22
  return undefined;
18
23
  current = current[segment];
19
24
  }
@@ -1 +1 @@
1
- {"version":3,"file":"page-state.js","sourceRoot":"","sources":["../src/page-state.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,0CAA0C;AAC1C,8EAA8E;AAE9E;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,IAAY,EAAW,EAAE;IACrD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,OAAO,GAAY,UAAU,CAAC;QAClC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,OAAO,KAAK,QAAQ;gBAAE,OAAO,SAAS,CAAC;YAC/F,OAAO,GAAI,OAAmC,CAAC,OAAO,CAAC,CAAC;QAC1D,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,GAAW,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;AAEhE;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,GAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC"}
1
+ {"version":3,"file":"page-state.js","sourceRoot":"","sources":["../src/page-state.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,0CAA0C;AAC1C,8EAA8E;AAE9E;;;;;;GAMG;AACH,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC,CAAC;AAE5E,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,IAAY,EAAW,EAAE;IACrD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,OAAO,GAAY,UAAU,CAAC;QAClC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS;gBAAE,OAAO,SAAS,CAAC;YAChE,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,OAAO,KAAK,UAAU;gBAAE,OAAO,SAAS,CAAC;YACnF,IAAI,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC;gBAAE,OAAO,SAAS,CAAC;YACpD,OAAO,GAAI,OAAmC,CAAC,OAAO,CAAC,CAAC;QAC1D,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,GAAW,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;AAEhE;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,GAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC"}
package/dist/storage.d.ts CHANGED
@@ -4,8 +4,8 @@
4
4
  */
5
5
  export declare const getLocalStorage: (key: string) => string | null;
6
6
  /**
7
- * Writes a value to localStorage. Silently fails if storage access throws
8
- * (e.g., SecurityError in sandboxed iframes or when storage is full).
7
+ * Writes a value to localStorage. Logs a warning if storage access throws
8
+ * (e.g., SecurityError in sandboxed iframes or QuotaExceededError when storage is full).
9
9
  */
10
10
  export declare const setLocalStorage: (key: string, value: string) => void;
11
11
  /**
@@ -14,23 +14,24 @@ export declare const setLocalStorage: (key: string, value: string) => void;
14
14
  */
15
15
  export declare const getSessionStorage: (key: string) => string | null;
16
16
  /**
17
- * Writes a value to sessionStorage. Silently fails if storage access throws
18
- * (e.g., SecurityError in sandboxed iframes or when storage is full).
17
+ * Writes a value to sessionStorage. Logs a warning if storage access throws
18
+ * (e.g., SecurityError in sandboxed iframes or QuotaExceededError when storage is full).
19
19
  */
20
20
  export declare const setSessionStorage: (key: string, value: string) => void;
21
21
  /**
22
- * Removes a key from localStorage. Silently fails if storage access throws
22
+ * Removes a key from localStorage. Logs a warning if storage access throws
23
23
  * (e.g., SecurityError in sandboxed iframes).
24
24
  */
25
25
  export declare const removeLocalStorage: (key: string) => void;
26
26
  /**
27
- * Removes a key from sessionStorage. Silently fails if storage access throws
27
+ * Removes a key from sessionStorage. Logs a warning if storage access throws
28
28
  * (e.g., SecurityError in sandboxed iframes).
29
29
  */
30
30
  export declare const removeSessionStorage: (key: string) => void;
31
31
  /**
32
32
  * Reads a cookie by name from `document.cookie`. Handles URI-encoded values.
33
- * Returns null if the cookie is not found.
33
+ * Returns null if the cookie is not found or if cookie access throws
34
+ * (e.g., SecurityError in sandboxed iframes).
34
35
  */
35
36
  export declare const getCookie: (name: string) => string | null;
36
37
  //# sourceMappingURL=storage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,eAAO,MAAM,eAAe,GAAI,KAAK,MAAM,KAAG,MAAM,GAAG,IAMtD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,eAAe,GAAI,KAAK,MAAM,EAAE,OAAO,MAAM,KAAG,IAM5D,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAAI,KAAK,MAAM,KAAG,MAAM,GAAG,IAMxD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAAI,KAAK,MAAM,EAAE,OAAO,MAAM,KAAG,IAM9D,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAAI,KAAK,MAAM,KAAG,IAMhD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,oBAAoB,GAAI,KAAK,MAAM,KAAG,IAMlD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,SAAS,GAAI,MAAM,MAAM,KAAG,MAAM,GAAG,IAajD,CAAC"}
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAMA;;;GAGG;AACH,eAAO,MAAM,eAAe,GAAI,KAAK,MAAM,KAAG,MAAM,GAAG,IAMtD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,eAAe,GAAI,KAAK,MAAM,EAAE,OAAO,MAAM,KAAG,IAM5D,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAAI,KAAK,MAAM,KAAG,MAAM,GAAG,IAMxD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAAI,KAAK,MAAM,EAAE,OAAO,MAAM,KAAG,IAM9D,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAAI,KAAK,MAAM,KAAG,IAMhD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,oBAAoB,GAAI,KAAK,MAAM,KAAG,IAMlD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,SAAS,GAAI,MAAM,MAAM,KAAG,MAAM,GAAG,IAiBjD,CAAC"}
package/dist/storage.js CHANGED
@@ -1,6 +1,7 @@
1
1
  // ---------------------------------------------------------------------------
2
2
  // Storage utilities for plugin authors
3
3
  // ---------------------------------------------------------------------------
4
+ import { log } from './log.js';
4
5
  /**
5
6
  * Reads a value from localStorage. Returns null if the key is not found or
6
7
  * if storage access throws (e.g., SecurityError in sandboxed iframes).
@@ -14,15 +15,15 @@ export const getLocalStorage = (key) => {
14
15
  }
15
16
  };
16
17
  /**
17
- * Writes a value to localStorage. Silently fails if storage access throws
18
- * (e.g., SecurityError in sandboxed iframes or when storage is full).
18
+ * Writes a value to localStorage. Logs a warning if storage access throws
19
+ * (e.g., SecurityError in sandboxed iframes or QuotaExceededError when storage is full).
19
20
  */
20
21
  export const setLocalStorage = (key, value) => {
21
22
  try {
22
23
  localStorage.setItem(key, value);
23
24
  }
24
- catch {
25
- // Silently fail on SecurityError or QuotaExceededError
25
+ catch (error) {
26
+ log.warn(`setLocalStorage failed for key "${key}"`, error);
26
27
  }
27
28
  };
28
29
  /**
@@ -38,58 +39,64 @@ export const getSessionStorage = (key) => {
38
39
  }
39
40
  };
40
41
  /**
41
- * Writes a value to sessionStorage. Silently fails if storage access throws
42
- * (e.g., SecurityError in sandboxed iframes or when storage is full).
42
+ * Writes a value to sessionStorage. Logs a warning if storage access throws
43
+ * (e.g., SecurityError in sandboxed iframes or QuotaExceededError when storage is full).
43
44
  */
44
45
  export const setSessionStorage = (key, value) => {
45
46
  try {
46
47
  sessionStorage.setItem(key, value);
47
48
  }
48
- catch {
49
- // Silently fail on SecurityError or QuotaExceededError
49
+ catch (error) {
50
+ log.warn(`setSessionStorage failed for key "${key}"`, error);
50
51
  }
51
52
  };
52
53
  /**
53
- * Removes a key from localStorage. Silently fails if storage access throws
54
+ * Removes a key from localStorage. Logs a warning if storage access throws
54
55
  * (e.g., SecurityError in sandboxed iframes).
55
56
  */
56
57
  export const removeLocalStorage = (key) => {
57
58
  try {
58
59
  localStorage.removeItem(key);
59
60
  }
60
- catch {
61
- // Silently fail on SecurityError
61
+ catch (error) {
62
+ log.warn(`removeLocalStorage failed for key "${key}"`, error);
62
63
  }
63
64
  };
64
65
  /**
65
- * Removes a key from sessionStorage. Silently fails if storage access throws
66
+ * Removes a key from sessionStorage. Logs a warning if storage access throws
66
67
  * (e.g., SecurityError in sandboxed iframes).
67
68
  */
68
69
  export const removeSessionStorage = (key) => {
69
70
  try {
70
71
  sessionStorage.removeItem(key);
71
72
  }
72
- catch {
73
- // Silently fail on SecurityError
73
+ catch (error) {
74
+ log.warn(`removeSessionStorage failed for key "${key}"`, error);
74
75
  }
75
76
  };
76
77
  /**
77
78
  * Reads a cookie by name from `document.cookie`. Handles URI-encoded values.
78
- * Returns null if the cookie is not found.
79
+ * Returns null if the cookie is not found or if cookie access throws
80
+ * (e.g., SecurityError in sandboxed iframes).
79
81
  */
80
82
  export const getCookie = (name) => {
81
- const prefix = `${name}=`;
82
- const entries = document.cookie.split('; ');
83
- for (const entry of entries) {
84
- if (entry.startsWith(prefix)) {
85
- try {
86
- return decodeURIComponent(entry.slice(prefix.length));
87
- }
88
- catch {
89
- return entry.slice(prefix.length);
83
+ try {
84
+ const prefix = `${name}=`;
85
+ const entries = document.cookie.split('; ');
86
+ for (const entry of entries) {
87
+ if (entry.startsWith(prefix)) {
88
+ try {
89
+ return decodeURIComponent(entry.slice(prefix.length));
90
+ }
91
+ catch {
92
+ return entry.slice(prefix.length);
93
+ }
90
94
  }
91
95
  }
96
+ return null;
97
+ }
98
+ catch {
99
+ return null;
92
100
  }
93
- return null;
94
101
  };
95
102
  //# sourceMappingURL=storage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,uCAAuC;AACvC,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,GAAW,EAAiB,EAAE;IAC5D,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,GAAW,EAAE,KAAa,EAAQ,EAAE;IAClE,IAAI,CAAC;QACH,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,uDAAuD;IACzD,CAAC;AACH,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,GAAW,EAAiB,EAAE;IAC9D,IAAI,CAAC;QACH,OAAO,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,GAAW,EAAE,KAAa,EAAQ,EAAE;IACpE,IAAI,CAAC;QACH,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,uDAAuD;IACzD,CAAC;AACH,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,GAAW,EAAQ,EAAE;IACtD,IAAI,CAAC;QACH,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,iCAAiC;IACnC,CAAC;AACH,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,GAAW,EAAQ,EAAE;IACxD,IAAI,CAAC;QACH,cAAc,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,iCAAiC;IACnC,CAAC;AACH,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,IAAY,EAAiB,EAAE;IACvD,MAAM,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC;IAC1B,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC5C,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC;gBACH,OAAO,kBAAkB,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;YACxD,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC"}
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"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"}
package/dist/timing.d.ts CHANGED
@@ -15,11 +15,18 @@ export interface WaitUntilOptions {
15
15
  interval?: number;
16
16
  /** Timeout in milliseconds (default: 10000) */
17
17
  timeout?: number;
18
+ /** AbortSignal to cancel polling early */
19
+ signal?: AbortSignal;
20
+ }
21
+ export interface SleepOptions {
22
+ /** AbortSignal to cancel the sleep early */
23
+ signal?: AbortSignal;
18
24
  }
19
25
  /**
20
- * Returns a promise that resolves after `ms` milliseconds.
26
+ * Returns a promise that resolves after `ms` milliseconds. Optionally accepts
27
+ * an AbortSignal to cancel the sleep early.
21
28
  */
22
- export declare const sleep: (ms: number) => Promise<void>;
29
+ export declare const sleep: (ms: number, opts?: SleepOptions) => Promise<void>;
23
30
  /**
24
31
  * Retries `fn` on failure up to `maxAttempts` times. Waits `delay` ms between
25
32
  * attempts (doubled each time when `backoff` is true). Re-throws the last
@@ -1 +1 @@
1
- {"version":3,"file":"timing.d.ts","sourceRoot":"","sources":["../src/timing.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY;IAC3B,8CAA8C;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6DAA6D;IAC7D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sFAAsF;IACtF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,4GAA4G;IAC5G,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0CAA0C;IAC1C,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,sDAAsD;IACtD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+CAA+C;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,eAAO,MAAM,KAAK,GAAI,IAAI,MAAM,KAAG,OAAO,CAAC,IAAI,CAAoD,CAAC;AAEpG;;;;GAIG;AACH,eAAO,MAAM,KAAK,GAAU,CAAC,EAAE,IAAI,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,YAAY,KAAG,OAAO,CAAC,CAAC,CA+CnF,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,SAAS,GAAI,WAAW,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,gBAAgB,KAAG,OAAO,CAAC,IAAI,CA0C5G,CAAC"}
1
+ {"version":3,"file":"timing.d.ts","sourceRoot":"","sources":["../src/timing.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY;IAC3B,8CAA8C;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6DAA6D;IAC7D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sFAAsF;IACtF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,4GAA4G;IAC5G,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0CAA0C;IAC1C,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,sDAAsD;IACtD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+CAA+C;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0CAA0C;IAC1C,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,4CAA4C;IAC5C,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED;;;GAGG;AACH,eAAO,MAAM,KAAK,GAAI,IAAI,MAAM,EAAE,OAAO,YAAY,KAAG,OAAO,CAAC,IAAI,CAsBnE,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,KAAK,GAAU,CAAC,EAAE,IAAI,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,YAAY,KAAG,OAAO,CAAC,CAAC,CAoDnF,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,SAAS,GAAI,WAAW,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,gBAAgB,KAAG,OAAO,CAAC,IAAI,CAwD5G,CAAC"}
package/dist/timing.js CHANGED
@@ -2,9 +2,27 @@
2
2
  // Retry / timing utilities for plugin authors
3
3
  // ---------------------------------------------------------------------------
4
4
  /**
5
- * Returns a promise that resolves after `ms` milliseconds.
5
+ * Returns a promise that resolves after `ms` milliseconds. Optionally accepts
6
+ * an AbortSignal to cancel the sleep early.
6
7
  */
7
- export const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms));
8
+ export const sleep = (ms, opts) => {
9
+ const signal = opts?.signal;
10
+ if (!signal)
11
+ return new Promise(resolve => setTimeout(resolve, ms));
12
+ if (signal.aborted)
13
+ return Promise.reject(signal.reason instanceof Error ? signal.reason : new DOMException('sleep aborted', 'AbortError'));
14
+ return new Promise((resolve, reject) => {
15
+ const timer = setTimeout(() => {
16
+ signal.removeEventListener('abort', onAbort);
17
+ resolve();
18
+ }, ms);
19
+ const onAbort = () => {
20
+ clearTimeout(timer);
21
+ reject(signal.reason instanceof Error ? signal.reason : new DOMException('sleep aborted', 'AbortError'));
22
+ };
23
+ signal.addEventListener('abort', onAbort, { once: true });
24
+ });
25
+ };
8
26
  /**
9
27
  * Retries `fn` on failure up to `maxAttempts` times. Waits `delay` ms between
10
28
  * attempts (doubled each time when `backoff` is true). Re-throws the last
@@ -12,6 +30,9 @@ export const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms));
12
30
  */
13
31
  export const retry = async (fn, opts) => {
14
32
  const maxAttempts = opts?.maxAttempts ?? 3;
33
+ if (!Number.isFinite(maxAttempts) || maxAttempts < 1) {
34
+ throw new Error(`retry: maxAttempts must be a finite number >= 1, got ${maxAttempts}`);
35
+ }
15
36
  const baseDelay = opts?.delay ?? 1_000;
16
37
  const backoff = opts?.backoff ?? false;
17
38
  const maxDelay = opts?.maxDelay ?? 30_000;
@@ -61,6 +82,10 @@ export const retry = async (fn, opts) => {
61
82
  export const waitUntil = (predicate, opts) => {
62
83
  const interval = opts?.interval ?? 200;
63
84
  const timeout = opts?.timeout ?? 10_000;
85
+ const signal = opts?.signal;
86
+ const abortReason = () => (signal?.reason instanceof Error ? signal.reason : new Error('waitUntil: aborted'));
87
+ if (signal?.aborted)
88
+ return Promise.reject(abortReason());
64
89
  return new Promise((resolve, reject) => {
65
90
  let settled = false;
66
91
  let poller;
@@ -69,7 +94,15 @@ export const waitUntil = (predicate, opts) => {
69
94
  settled = true;
70
95
  clearTimeout(timer);
71
96
  clearTimeout(poller);
97
+ signal?.removeEventListener('abort', onAbort);
98
+ };
99
+ const onAbort = () => {
100
+ if (isSettled())
101
+ return;
102
+ cleanup();
103
+ reject(abortReason());
72
104
  };
105
+ signal?.addEventListener('abort', onAbort, { once: true });
73
106
  const timer = setTimeout(() => {
74
107
  if (isSettled())
75
108
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"timing.js","sourceRoot":"","sources":["../src/timing.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"timing.js","sourceRoot":"","sources":["../src/timing.ts"],"names":[],"mappings":"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"}