asyar-sdk 1.16.2 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (281) hide show
  1. package/README.md +95 -42
  2. package/dist/ExtensionBridge.d.ts +1 -1
  3. package/dist/ExtensionBridge.d.ts.map +1 -1
  4. package/dist/ExtensionBridge.js +17 -13
  5. package/dist/ExtensionBridge.js.map +1 -1
  6. package/dist/ExtensionBridge.test.js +76 -101
  7. package/dist/ExtensionBridge.test.js.map +1 -1
  8. package/dist/ExtensionContext.d.ts +22 -57
  9. package/dist/ExtensionContext.d.ts.map +1 -1
  10. package/dist/ExtensionContext.js +84 -207
  11. package/dist/ExtensionContext.js.map +1 -1
  12. package/dist/ExtensionContext.test.js +91 -66
  13. package/dist/ExtensionContext.test.js.map +1 -1
  14. package/dist/ExtensionContextCore.d.ts +46 -0
  15. package/dist/ExtensionContextCore.d.ts.map +1 -0
  16. package/dist/ExtensionContextCore.js +149 -0
  17. package/dist/ExtensionContextCore.js.map +1 -0
  18. package/dist/PreferencesFacade.js +4 -9
  19. package/dist/PreferencesFacade.js.map +1 -1
  20. package/dist/PreferencesFacade.test.js +53 -55
  21. package/dist/PreferencesFacade.test.js.map +1 -1
  22. package/dist/cli/commands/attach.js +1 -1
  23. package/dist/cli/commands/attach.js.map +1 -1
  24. package/dist/cli/commands/build.d.ts +5 -1
  25. package/dist/cli/commands/build.d.ts.map +1 -1
  26. package/dist/cli/commands/build.js +43 -5
  27. package/dist/cli/commands/build.js.map +1 -1
  28. package/dist/cli/lib/manifest.d.ts +17 -5
  29. package/dist/cli/lib/manifest.d.ts.map +1 -1
  30. package/dist/cli/lib/manifest.js +125 -66
  31. package/dist/cli/lib/manifest.js.map +1 -1
  32. package/dist/{index.d.ts → contracts.d.ts} +23 -1
  33. package/dist/contracts.d.ts.map +1 -0
  34. package/dist/contracts.js +36 -0
  35. package/dist/contracts.js.map +1 -0
  36. package/dist/contracts.purity.test.d.ts +2 -0
  37. package/dist/contracts.purity.test.d.ts.map +1 -0
  38. package/dist/contracts.purity.test.js +42 -0
  39. package/dist/contracts.purity.test.js.map +1 -0
  40. package/dist/icons/AsyarIconElement.js +4 -9
  41. package/dist/icons/AsyarIconElement.js.map +1 -1
  42. package/dist/icons/AsyarIconElement.test.js +14 -16
  43. package/dist/icons/AsyarIconElement.test.js.map +1 -1
  44. package/dist/icons/IconRenderer.js +9 -15
  45. package/dist/icons/IconRenderer.js.map +1 -1
  46. package/dist/icons/IconRenderer.test.js +63 -65
  47. package/dist/icons/IconRenderer.test.js.map +1 -1
  48. package/dist/icons/iconData.js +2 -5
  49. package/dist/icons/iconData.js.map +1 -1
  50. package/dist/icons/index.js +3 -14
  51. package/dist/icons/index.js.map +1 -1
  52. package/dist/ipc/MessageBroker.d.ts.map +1 -1
  53. package/dist/ipc/MessageBroker.js +33 -6
  54. package/dist/ipc/MessageBroker.js.map +1 -1
  55. package/dist/ipc/MessageBroker.test.js +26 -28
  56. package/dist/ipc/MessageBroker.test.js.map +1 -1
  57. package/dist/ipc/devInspectorBridge.d.ts +57 -0
  58. package/dist/ipc/devInspectorBridge.d.ts.map +1 -0
  59. package/dist/ipc/devInspectorBridge.js +70 -0
  60. package/dist/ipc/devInspectorBridge.js.map +1 -0
  61. package/dist/ipc/devInspectorBridge.test.d.ts +2 -0
  62. package/dist/ipc/devInspectorBridge.test.d.ts.map +1 -0
  63. package/dist/ipc/devInspectorBridge.test.js +128 -0
  64. package/dist/ipc/devInspectorBridge.test.js.map +1 -0
  65. package/dist/ipc/namespaces.d.ts +1 -1
  66. package/dist/ipc/namespaces.d.ts.map +1 -1
  67. package/dist/ipc/namespaces.js +4 -7
  68. package/dist/ipc/namespaces.js.map +1 -1
  69. package/dist/ipc/namespaces.test.js +11 -13
  70. package/dist/ipc/namespaces.test.js.map +1 -1
  71. package/dist/lib/focusTracker.js +1 -4
  72. package/dist/lib/focusTracker.js.map +1 -1
  73. package/dist/lib/focusTracker.test.js +32 -57
  74. package/dist/lib/focusTracker.test.js.map +1 -1
  75. package/dist/lib/syncProviderBridge.js +1 -4
  76. package/dist/lib/syncProviderBridge.js.map +1 -1
  77. package/dist/lib/syncProviderBridge.test.js +60 -85
  78. package/dist/lib/syncProviderBridge.test.js.map +1 -1
  79. package/dist/lib/themeInjector.js +3 -8
  80. package/dist/lib/themeInjector.js.map +1 -1
  81. package/dist/lib/themeInjector.test.js +42 -44
  82. package/dist/lib/themeInjector.test.js.map +1 -1
  83. package/dist/search/SearchEngine.js +3 -10
  84. package/dist/search/SearchEngine.js.map +1 -1
  85. package/dist/search/SearchEngine.test.js +53 -55
  86. package/dist/search/SearchEngine.test.js.map +1 -1
  87. package/dist/search/index.js +2 -8
  88. package/dist/search/index.js.map +1 -1
  89. package/dist/search/textUtils.js +2 -6
  90. package/dist/search/textUtils.js.map +1 -1
  91. package/dist/search/textUtils.test.js +73 -75
  92. package/dist/search/textUtils.test.js.map +1 -1
  93. package/dist/search/types.js +1 -2
  94. package/dist/services/AIServiceProxy.js +2 -6
  95. package/dist/services/AIServiceProxy.js.map +1 -1
  96. package/dist/services/AIServiceProxy.test.js +69 -71
  97. package/dist/services/AIServiceProxy.test.js.map +1 -1
  98. package/dist/services/ActionServiceProxy.d.ts.map +1 -1
  99. package/dist/services/ActionServiceProxy.js +14 -13
  100. package/dist/services/ActionServiceProxy.js.map +1 -1
  101. package/dist/services/ActionServiceProxy.test.js +28 -23
  102. package/dist/services/ActionServiceProxy.test.js.map +1 -1
  103. package/dist/services/ApplicationService.js +2 -6
  104. package/dist/services/ApplicationService.js.map +1 -1
  105. package/dist/services/ApplicationService.test.js +108 -110
  106. package/dist/services/ApplicationService.test.js.map +1 -1
  107. package/dist/services/BaseServiceProxy.js +3 -7
  108. package/dist/services/BaseServiceProxy.js.map +1 -1
  109. package/dist/services/CacheServiceProxy.js +2 -6
  110. package/dist/services/CacheServiceProxy.js.map +1 -1
  111. package/dist/services/CacheServiceProxy.test.js +21 -23
  112. package/dist/services/CacheServiceProxy.test.js.map +1 -1
  113. package/dist/services/ClipboardHistoryServiceProxy.js +6 -10
  114. package/dist/services/ClipboardHistoryServiceProxy.js.map +1 -1
  115. package/dist/services/ClipboardHistoryServiceProxy.test.js +106 -108
  116. package/dist/services/ClipboardHistoryServiceProxy.test.js.map +1 -1
  117. package/dist/services/CommandServiceProxy.js +7 -11
  118. package/dist/services/CommandServiceProxy.js.map +1 -1
  119. package/dist/services/CommandServiceProxy.test.js +37 -39
  120. package/dist/services/CommandServiceProxy.test.js.map +1 -1
  121. package/dist/services/EntitlementServiceProxy.js +2 -6
  122. package/dist/services/EntitlementServiceProxy.js.map +1 -1
  123. package/dist/services/EntitlementServiceProxy.test.js +16 -18
  124. package/dist/services/EntitlementServiceProxy.test.js.map +1 -1
  125. package/dist/services/ExtensionManagerProxy.js +2 -6
  126. package/dist/services/ExtensionManagerProxy.js.map +1 -1
  127. package/dist/services/ExtensionManagerProxy.test.js +42 -44
  128. package/dist/services/ExtensionManagerProxy.test.js.map +1 -1
  129. package/dist/services/ExtensionRpc.d.ts +90 -0
  130. package/dist/services/ExtensionRpc.d.ts.map +1 -0
  131. package/dist/services/ExtensionRpc.js +277 -0
  132. package/dist/services/ExtensionRpc.js.map +1 -0
  133. package/dist/services/ExtensionRpc.test.d.ts +2 -0
  134. package/dist/services/ExtensionRpc.test.d.ts.map +1 -0
  135. package/dist/services/ExtensionRpc.test.js +259 -0
  136. package/dist/services/ExtensionRpc.test.js.map +1 -0
  137. package/dist/services/ExtensionStateProxy.d.ts +44 -0
  138. package/dist/services/ExtensionStateProxy.d.ts.map +1 -0
  139. package/dist/services/ExtensionStateProxy.js +115 -0
  140. package/dist/services/ExtensionStateProxy.js.map +1 -0
  141. package/dist/services/ExtensionStateProxy.test.d.ts +2 -0
  142. package/dist/services/ExtensionStateProxy.test.d.ts.map +1 -0
  143. package/dist/services/ExtensionStateProxy.test.js +158 -0
  144. package/dist/services/ExtensionStateProxy.test.js.map +1 -0
  145. package/dist/services/FeedbackServiceProxy.js +2 -6
  146. package/dist/services/FeedbackServiceProxy.js.map +1 -1
  147. package/dist/services/FeedbackServiceProxy.test.js +31 -33
  148. package/dist/services/FeedbackServiceProxy.test.js.map +1 -1
  149. package/dist/services/FileManagerServiceProxy.js +2 -6
  150. package/dist/services/FileManagerServiceProxy.js.map +1 -1
  151. package/dist/services/FileManagerServiceProxy.test.js +21 -23
  152. package/dist/services/FileManagerServiceProxy.test.js.map +1 -1
  153. package/dist/services/FileSystemWatcherService.js +2 -6
  154. package/dist/services/FileSystemWatcherService.js.map +1 -1
  155. package/dist/services/FileSystemWatcherService.test.js +45 -47
  156. package/dist/services/FileSystemWatcherService.test.js.map +1 -1
  157. package/dist/services/IAIService.js +1 -2
  158. package/dist/services/ICacheService.js +1 -2
  159. package/dist/services/IClipboardHistoryService.js +1 -2
  160. package/dist/services/ICommandService.js +1 -2
  161. package/dist/services/IEntitlementService.js +1 -2
  162. package/dist/services/IExtensionManager.js +1 -2
  163. package/dist/services/IFeedbackService.js +1 -2
  164. package/dist/services/IFileManagerService.js +1 -2
  165. package/dist/services/IInteropService.js +1 -5
  166. package/dist/services/IInteropService.js.map +1 -1
  167. package/dist/services/INotificationService.js +1 -2
  168. package/dist/services/IOAuthService.js +1 -2
  169. package/dist/services/IPowerService.js +1 -2
  170. package/dist/services/IPreferencesService.js +1 -2
  171. package/dist/services/ISelectionService.js +1 -2
  172. package/dist/services/ISettingsService.js +1 -2
  173. package/dist/services/IShellService.js +1 -2
  174. package/dist/services/IStatusBarService.js +1 -2
  175. package/dist/services/IStorageService.js +1 -2
  176. package/dist/services/ISystemEventsService.js +1 -2
  177. package/dist/services/ISystemEventsService.js.map +1 -1
  178. package/dist/services/ITimerService.js +1 -2
  179. package/dist/services/InteropServiceProxy.js +2 -6
  180. package/dist/services/InteropServiceProxy.js.map +1 -1
  181. package/dist/services/InteropServiceProxy.test.js +19 -21
  182. package/dist/services/InteropServiceProxy.test.js.map +1 -1
  183. package/dist/services/LogService.js +1 -2
  184. package/dist/services/LogServiceProxy.js +2 -6
  185. package/dist/services/LogServiceProxy.js.map +1 -1
  186. package/dist/services/LogServiceProxy.test.js +43 -45
  187. package/dist/services/LogServiceProxy.test.js.map +1 -1
  188. package/dist/services/NetworkServiceProxy.js +2 -6
  189. package/dist/services/NetworkServiceProxy.js.map +1 -1
  190. package/dist/services/NetworkServiceProxy.test.js +20 -22
  191. package/dist/services/NetworkServiceProxy.test.js.map +1 -1
  192. package/dist/services/NotificationServiceProxy.js +2 -6
  193. package/dist/services/NotificationServiceProxy.js.map +1 -1
  194. package/dist/services/NotificationServiceProxy.test.js +39 -41
  195. package/dist/services/NotificationServiceProxy.test.js.map +1 -1
  196. package/dist/services/OAuthServiceProxy.js +2 -6
  197. package/dist/services/OAuthServiceProxy.js.map +1 -1
  198. package/dist/services/OAuthServiceProxy.test.js +42 -44
  199. package/dist/services/OAuthServiceProxy.test.js.map +1 -1
  200. package/dist/services/PowerServiceProxy.js +2 -6
  201. package/dist/services/PowerServiceProxy.js.map +1 -1
  202. package/dist/services/PowerServiceProxy.test.js +24 -26
  203. package/dist/services/PowerServiceProxy.test.js.map +1 -1
  204. package/dist/services/PreferencesServiceProxy.js +2 -6
  205. package/dist/services/PreferencesServiceProxy.js.map +1 -1
  206. package/dist/services/PreferencesServiceProxy.test.js +22 -24
  207. package/dist/services/PreferencesServiceProxy.test.js.map +1 -1
  208. package/dist/services/SelectionServiceProxy.js +2 -6
  209. package/dist/services/SelectionServiceProxy.js.map +1 -1
  210. package/dist/services/SelectionServiceProxy.test.js +20 -22
  211. package/dist/services/SelectionServiceProxy.test.js.map +1 -1
  212. package/dist/services/SettingsServiceProxy.js +2 -6
  213. package/dist/services/SettingsServiceProxy.js.map +1 -1
  214. package/dist/services/SettingsServiceProxy.test.js +18 -20
  215. package/dist/services/SettingsServiceProxy.test.js.map +1 -1
  216. package/dist/services/ShellServiceProxy.js +2 -6
  217. package/dist/services/ShellServiceProxy.js.map +1 -1
  218. package/dist/services/ShellServiceProxy.test.js +92 -94
  219. package/dist/services/ShellServiceProxy.test.js.map +1 -1
  220. package/dist/services/StatusBarServiceProxy.js +9 -13
  221. package/dist/services/StatusBarServiceProxy.js.map +1 -1
  222. package/dist/services/StatusBarServiceProxy.test.js +68 -70
  223. package/dist/services/StatusBarServiceProxy.test.js.map +1 -1
  224. package/dist/services/StorageServiceProxy.js +2 -6
  225. package/dist/services/StorageServiceProxy.js.map +1 -1
  226. package/dist/services/StorageServiceProxy.test.js +31 -33
  227. package/dist/services/StorageServiceProxy.test.js.map +1 -1
  228. package/dist/services/SystemEventsServiceProxy.js +2 -6
  229. package/dist/services/SystemEventsServiceProxy.js.map +1 -1
  230. package/dist/services/SystemEventsServiceProxy.test.js +50 -52
  231. package/dist/services/SystemEventsServiceProxy.test.js.map +1 -1
  232. package/dist/services/TimerServiceProxy.js +2 -6
  233. package/dist/services/TimerServiceProxy.js.map +1 -1
  234. package/dist/services/TimerServiceProxy.test.js +33 -35
  235. package/dist/services/TimerServiceProxy.test.js.map +1 -1
  236. package/dist/services/WindowManagementService.js +2 -6
  237. package/dist/services/WindowManagementService.js.map +1 -1
  238. package/dist/services/WindowManagementService.test.js +23 -25
  239. package/dist/services/WindowManagementService.test.js.map +1 -1
  240. package/dist/services/index.js +36 -76
  241. package/dist/services/index.js.map +1 -1
  242. package/dist/services/statusBarValidation.js +7 -14
  243. package/dist/services/statusBarValidation.js.map +1 -1
  244. package/dist/types/ActionType.js +3 -6
  245. package/dist/types/ActionType.js.map +1 -1
  246. package/dist/types/ApplicationType.js +1 -2
  247. package/dist/types/ClipboardType.js +2 -5
  248. package/dist/types/ClipboardType.js.map +1 -1
  249. package/dist/types/CommandType.js +1 -2
  250. package/dist/types/ExtensionType.d.ts +40 -5
  251. package/dist/types/ExtensionType.d.ts.map +1 -1
  252. package/dist/types/ExtensionType.js +1 -2
  253. package/dist/types/NetworkType.js +1 -2
  254. package/dist/types/NotificationType.js +1 -2
  255. package/dist/types/SyncType.js +1 -2
  256. package/dist/types/index.js +2 -18
  257. package/dist/types/index.js.map +1 -1
  258. package/dist/view.d.ts +12 -0
  259. package/dist/view.d.ts.map +1 -0
  260. package/dist/view.js +19 -0
  261. package/dist/view.js.map +1 -0
  262. package/dist/view.test.d.ts +2 -0
  263. package/dist/view.test.d.ts.map +1 -0
  264. package/dist/view.test.js +114 -0
  265. package/dist/view.test.js.map +1 -0
  266. package/dist/worker.bundle-size.test.d.ts +2 -0
  267. package/dist/worker.bundle-size.test.d.ts.map +1 -0
  268. package/dist/worker.bundle-size.test.js +96 -0
  269. package/dist/worker.bundle-size.test.js.map +1 -0
  270. package/dist/worker.d.ts +37 -0
  271. package/dist/worker.d.ts.map +1 -0
  272. package/dist/worker.js +122 -0
  273. package/dist/worker.js.map +1 -0
  274. package/dist/worker.test.d.ts +2 -0
  275. package/dist/worker.test.d.ts.map +1 -0
  276. package/dist/worker.test.js +136 -0
  277. package/dist/worker.test.js.map +1 -0
  278. package/package.json +12 -4
  279. package/dist/index.d.ts.map +0 -1
  280. package/dist/index.js +0 -47
  281. package/dist/index.js.map +0 -1
@@ -0,0 +1,96 @@
1
+ /**
2
+ * @vitest-environment node
3
+ *
4
+ * Worker entry-point bundle-size cap.
5
+ *
6
+ * The worker iframe must stay headless. Accidentally pulling a DOM helper
7
+ * into the worker transitive import graph is a correctness regression
8
+ * as much as a size regression — the worker must not touch the document.
9
+ *
10
+ * Approximation: walk the TS import graph starting from src/worker.ts,
11
+ * concatenate transitive source files, gzip the result. The cap is a
12
+ * ceiling; the real signal is whether DOM-shaped modules slip into the
13
+ * graph.
14
+ */
15
+ import { describe, it, expect } from 'vitest';
16
+ import { readFileSync, existsSync } from 'node:fs';
17
+ import { dirname, resolve, join } from 'node:path';
18
+ import { gzipSync } from 'node:zlib';
19
+ const MAX_GZIPPED_BYTES = 50 * 1024;
20
+ const ENTRY = resolve(__dirname, 'worker.ts');
21
+ function resolveImport(fromFile, spec) {
22
+ if (!spec.startsWith('./') && !spec.startsWith('../'))
23
+ return null;
24
+ const baseDir = dirname(fromFile);
25
+ const noExt = resolve(baseDir, spec);
26
+ const candidates = [
27
+ noExt + '.ts',
28
+ join(noExt, 'index.ts'),
29
+ noExt,
30
+ ];
31
+ for (const c of candidates) {
32
+ if (existsSync(c) && !c.endsWith('.test.ts'))
33
+ return c;
34
+ }
35
+ return null;
36
+ }
37
+ function extractImports(source) {
38
+ // Strip type-only import/export lines — they are erased at compile time
39
+ // and must not count against the runtime bundle's import graph.
40
+ const cleaned = source
41
+ .split('\n')
42
+ .filter((line) => !/^\s*(?:import|export)\s+type\s/.test(line))
43
+ .join('\n');
44
+ const specs = [];
45
+ const re = /(?:^|\s)(?:import|export)\s+(?:[^'"]+\s+from\s+)?['"]([^'"]+)['"]/g;
46
+ let m;
47
+ while ((m = re.exec(cleaned)) !== null) {
48
+ specs.push(m[1]);
49
+ }
50
+ return specs;
51
+ }
52
+ function walkGraph(entry) {
53
+ const visited = new Map();
54
+ const stack = [entry];
55
+ while (stack.length) {
56
+ const file = stack.pop();
57
+ if (visited.has(file))
58
+ continue;
59
+ const src = readFileSync(file, 'utf8');
60
+ visited.set(file, src);
61
+ for (const spec of extractImports(src)) {
62
+ const resolved = resolveImport(file, spec);
63
+ if (resolved)
64
+ stack.push(resolved);
65
+ }
66
+ }
67
+ return visited;
68
+ }
69
+ describe('asyar-sdk/worker — bundle size cap', () => {
70
+ it(`worker entry transitive source gzips to <= ${MAX_GZIPPED_BYTES} bytes`, () => {
71
+ const graph = walkGraph(ENTRY);
72
+ const concatenated = Array.from(graph.values()).join('\n');
73
+ const gzipped = gzipSync(Buffer.from(concatenated, 'utf8'));
74
+ const size = gzipped.byteLength;
75
+ console.log(`[worker.bundle-size] files=${graph.size} uncompressed=${concatenated.length} gzipped=${size}`);
76
+ expect(size).toBeLessThanOrEqual(MAX_GZIPPED_BYTES);
77
+ });
78
+ it('worker graph does not include view-only DOM helpers', () => {
79
+ const graph = walkGraph(ENTRY);
80
+ const files = Array.from(graph.keys()).map((p) => p.replace(/\\/g, '/'));
81
+ const forbidden = [
82
+ '/services/FeedbackServiceProxy.ts',
83
+ '/services/SelectionServiceProxy.ts',
84
+ '/services/ClipboardHistoryServiceProxy.ts',
85
+ '/services/InteropServiceProxy.ts',
86
+ '/icons/AsyarIconElement.ts',
87
+ '/lib/focusTracker.ts',
88
+ '/lib/themeInjector.ts',
89
+ ];
90
+ for (const f of forbidden) {
91
+ const hit = files.find((p) => p.endsWith(f));
92
+ expect(hit, `worker bundle transitively imports ${f}`).toBeUndefined();
93
+ }
94
+ });
95
+ });
96
+ //# sourceMappingURL=worker.bundle-size.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker.bundle-size.test.js","sourceRoot":"","sources":["../src/worker.bundle-size.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * asyar-sdk/worker — headless entry for worker-context extension code.
3
+ *
4
+ * Asserts `window.__ASYAR_ROLE__ === "worker"` at module load, before any
5
+ * proxy is instantiated. Mis-imports fail fast with a clear message.
6
+ *
7
+ * Does NOT re-export the full SDK surface. Feedback, selection, interop,
8
+ * clipboard-history, icons, and other DOM-dependent helpers are kept out
9
+ * of the worker's import graph so the worker bundle stays small and is
10
+ * mechanically incapable of touching the document.
11
+ */
12
+ import { ExtensionContextCore } from './ExtensionContextCore';
13
+ export declare class ExtensionContext extends ExtensionContextCore {
14
+ constructor();
15
+ protected notifyRpcIfAvailable(id: string): void;
16
+ /**
17
+ * Worker-side RPC entry. Registers `handler` for the given `id`. Returns
18
+ * a disposer that unregisters the handler.
19
+ *
20
+ * The `handler` receives the request payload as its first argument and an
21
+ * `AbortSignal` as its second argument. The signal fires when the
22
+ * view-side timeout elapses, so long-running handlers can bail at yield
23
+ * points (`signal.aborted`) or pass the signal into AbortController-aware
24
+ * APIs such as `fetch`. Handlers that ignore the signal still produce a
25
+ * leak — but a detectable one: the late reply is silently dropped by the
26
+ * view-side SDK.
27
+ */
28
+ onRequest<TPayload = unknown, TResult = unknown>(id: string, handler: (payload: TPayload, signal: AbortSignal) => Promise<TResult>): () => void;
29
+ }
30
+ export { messageBroker, MessageBroker } from './ipc/MessageBroker';
31
+ export type { IPCMessage, IPCResponse, HostDispatcher } from './ipc/MessageBroker';
32
+ export { NAMESPACES, isNamespace } from './ipc/namespaces';
33
+ export type { Namespace, WireCommand } from './ipc/namespaces';
34
+ export { extensionBridge, ExtensionBridge } from './ExtensionBridge';
35
+ export { PreferencesFacade } from './PreferencesFacade';
36
+ export type { PreferencesSnapshot } from './PreferencesFacade';
37
+ //# sourceMappingURL=worker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAoCH,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAqD9D,qBAAa,gBAAiB,SAAQ,oBAAoB;;cAKrC,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAQzD;;;;;;;;;;;OAWG;IACH,SAAS,CAAC,QAAQ,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO,EAC7C,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,OAAO,CAAC,GACpE,MAAM,IAAI;CAMd;AAED,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACnE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACnF,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC3D,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,YAAY,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC"}
package/dist/worker.js ADDED
@@ -0,0 +1,122 @@
1
+ /**
2
+ * asyar-sdk/worker — headless entry for worker-context extension code.
3
+ *
4
+ * Asserts `window.__ASYAR_ROLE__ === "worker"` at module load, before any
5
+ * proxy is instantiated. Mis-imports fail fast with a clear message.
6
+ *
7
+ * Does NOT re-export the full SDK surface. Feedback, selection, interop,
8
+ * clipboard-history, icons, and other DOM-dependent helpers are kept out
9
+ * of the worker's import graph so the worker bundle stays small and is
10
+ * mechanically incapable of touching the document.
11
+ */
12
+ if (typeof window === 'undefined' ||
13
+ window.__ASYAR_ROLE__ !== 'worker') {
14
+ throw new Error('[asyar-sdk/worker] Imported outside a worker context. ' +
15
+ 'This entry point is intended for code running in worker.html ' +
16
+ '(a Tier 2 extension\'s headless iframe). ' +
17
+ 'Did you mean to import from "asyar-sdk/view"?');
18
+ }
19
+ import { LogServiceProxy } from './services/LogServiceProxy';
20
+ import { NotificationServiceProxy } from './services/NotificationServiceProxy';
21
+ import { StorageServiceProxy } from './services/StorageServiceProxy';
22
+ import { CacheServiceProxy } from './services/CacheServiceProxy';
23
+ import { NetworkServiceProxy } from './services/NetworkServiceProxy';
24
+ import { ShellServiceProxy } from './services/ShellServiceProxy';
25
+ import { AIServiceProxy } from './services/AIServiceProxy';
26
+ import { OAuthServiceProxy } from './services/OAuthServiceProxy';
27
+ import { FileManagerServiceProxy } from './services/FileManagerServiceProxy';
28
+ import { ApplicationServiceProxy } from './services/ApplicationService';
29
+ import { PowerServiceProxy } from './services/PowerServiceProxy';
30
+ import { SystemEventsServiceProxy } from './services/SystemEventsServiceProxy';
31
+ import { TimerServiceProxy } from './services/TimerServiceProxy';
32
+ import { StatusBarServiceProxy } from './services/StatusBarServiceProxy';
33
+ import { CommandServiceProxy } from './services/CommandServiceProxy';
34
+ import { ExtensionStateProxy } from './services/ExtensionStateProxy';
35
+ import { ActionServiceProxy } from './services/ActionServiceProxy';
36
+ import { extensionRpc } from './services/ExtensionRpc';
37
+ import { ExtensionContextCore } from './ExtensionContextCore';
38
+ function buildWorkerProxyBag() {
39
+ return {
40
+ log: new LogServiceProxy(),
41
+ notifications: new NotificationServiceProxy(),
42
+ storage: new StorageServiceProxy(),
43
+ cache: new CacheServiceProxy(),
44
+ network: new NetworkServiceProxy(),
45
+ shell: new ShellServiceProxy(),
46
+ ai: new AIServiceProxy(),
47
+ oauth: new OAuthServiceProxy(),
48
+ fs: new FileManagerServiceProxy(),
49
+ application: new ApplicationServiceProxy(),
50
+ power: new PowerServiceProxy(),
51
+ systemEvents: new SystemEventsServiceProxy(),
52
+ timers: new TimerServiceProxy(),
53
+ statusBar: new StatusBarServiceProxy(),
54
+ commands: new CommandServiceProxy(),
55
+ state: new ExtensionStateProxy(),
56
+ // Role-neutral: pure postMessage forwarder. Exposes registerAction,
57
+ // unregisterAction, and registerActionHandler so manifest root actions
58
+ // (send-notification, show-hud, notification callbacks) can register
59
+ // from the worker and survive view Dormant.
60
+ actions: new ActionServiceProxy(),
61
+ };
62
+ }
63
+ /**
64
+ * Worker-side: intercept every `asyar:action:execute` postMessage and feed
65
+ * RPC envelopes ({ __rpc__: "request" | "abort", ... }) into the RPC
66
+ * dispatcher. Non-RPC actions fall through to the user's action handlers.
67
+ *
68
+ * Idempotent — one listener per worker iframe. Installed eagerly at module
69
+ * load so even the very first `onRequest` registration is covered without
70
+ * a bootstrap ordering hazard.
71
+ */
72
+ function installWorkerRpcInterceptor() {
73
+ if (typeof window === 'undefined')
74
+ return;
75
+ window.addEventListener('message', (event) => {
76
+ const data = event.data;
77
+ if (!data || typeof data !== 'object')
78
+ return;
79
+ const d = data;
80
+ if (d.type !== 'asyar:action:execute')
81
+ return;
82
+ const payload = d.payload;
83
+ if (!payload || typeof payload !== 'object')
84
+ return;
85
+ if (payload.__rpc__ === undefined)
86
+ return;
87
+ extensionRpc.deliverActionPayload(payload);
88
+ });
89
+ }
90
+ installWorkerRpcInterceptor();
91
+ export class ExtensionContext extends ExtensionContextCore {
92
+ constructor() {
93
+ super({ role: 'worker', proxies: buildWorkerProxyBag() });
94
+ }
95
+ notifyRpcIfAvailable(id) {
96
+ // Patch the extensionRpc singleton's broker so worker-side
97
+ // state:rpcReply messages carry the extensionId. Without this,
98
+ // the launcher's IPC router rejects every rpc reply and the view's
99
+ // context.request(...) times out even though the worker handler ran.
100
+ extensionRpc.setExtensionId(id);
101
+ }
102
+ /**
103
+ * Worker-side RPC entry. Registers `handler` for the given `id`. Returns
104
+ * a disposer that unregisters the handler.
105
+ *
106
+ * The `handler` receives the request payload as its first argument and an
107
+ * `AbortSignal` as its second argument. The signal fires when the
108
+ * view-side timeout elapses, so long-running handlers can bail at yield
109
+ * points (`signal.aborted`) or pass the signal into AbortController-aware
110
+ * APIs such as `fetch`. Handlers that ignore the signal still produce a
111
+ * leak — but a detectable one: the late reply is silently dropped by the
112
+ * view-side SDK.
113
+ */
114
+ onRequest(id, handler) {
115
+ return extensionRpc.onRequest(id, handler);
116
+ }
117
+ }
118
+ export { messageBroker, MessageBroker } from './ipc/MessageBroker';
119
+ export { NAMESPACES, isNamespace } from './ipc/namespaces';
120
+ export { extensionBridge, ExtensionBridge } from './ExtensionBridge';
121
+ export { PreferencesFacade } from './PreferencesFacade';
122
+ //# sourceMappingURL=worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker.js","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=worker.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker.test.d.ts","sourceRoot":"","sources":["../src/worker.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,136 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ /** @vitest-environment jsdom */
11
+ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
12
+ const WORKER_PROXY_NAMESPACES = [
13
+ 'log',
14
+ 'notifications',
15
+ 'storage',
16
+ 'cache',
17
+ 'network',
18
+ 'shell',
19
+ 'ai',
20
+ 'oauth',
21
+ 'fs',
22
+ 'application',
23
+ 'power',
24
+ 'systemEvents',
25
+ 'timers',
26
+ 'statusBar',
27
+ 'commands',
28
+ 'state',
29
+ 'actions',
30
+ ];
31
+ const VIEW_ONLY_NAMESPACES = [
32
+ 'feedback',
33
+ 'selection',
34
+ 'interop',
35
+ 'clipboard',
36
+ ];
37
+ function setRole(role) {
38
+ if (role === undefined) {
39
+ delete window.__ASYAR_ROLE__;
40
+ }
41
+ else {
42
+ window.__ASYAR_ROLE__ = role;
43
+ }
44
+ }
45
+ describe('asyar-sdk/worker — import-time role assertion', () => {
46
+ beforeEach(() => {
47
+ vi.resetModules();
48
+ });
49
+ afterEach(() => {
50
+ setRole(undefined);
51
+ });
52
+ it('throws when __ASYAR_ROLE__ is "view"', () => __awaiter(void 0, void 0, void 0, function* () {
53
+ setRole('view');
54
+ yield expect(import('./worker')).rejects.toThrow(/worker/i);
55
+ vi.resetModules();
56
+ setRole('view');
57
+ yield expect(import('./worker')).rejects.toThrow(/view/i);
58
+ }));
59
+ it('throws when __ASYAR_ROLE__ is undefined', () => __awaiter(void 0, void 0, void 0, function* () {
60
+ setRole(undefined);
61
+ yield expect(import('./worker')).rejects.toThrow(/worker/i);
62
+ }));
63
+ it('throws when __ASYAR_ROLE__ is a random string', () => __awaiter(void 0, void 0, void 0, function* () {
64
+ setRole('garbage');
65
+ yield expect(import('./worker')).rejects.toThrow(/worker/i);
66
+ }));
67
+ it('resolves when __ASYAR_ROLE__ is "worker"', () => __awaiter(void 0, void 0, void 0, function* () {
68
+ setRole('worker');
69
+ const mod = yield import('./worker');
70
+ expect(mod).toBeTruthy();
71
+ expect(mod.ExtensionContext).toBeTypeOf('function');
72
+ }));
73
+ });
74
+ describe('asyar-sdk/worker — entry surface', () => {
75
+ beforeEach(() => {
76
+ vi.resetModules();
77
+ setRole('worker');
78
+ });
79
+ afterEach(() => {
80
+ setRole(undefined);
81
+ });
82
+ it('ExtensionContext.proxies contains exactly the worker subset', () => __awaiter(void 0, void 0, void 0, function* () {
83
+ const { ExtensionContext } = yield import('./worker');
84
+ const ctx = new ExtensionContext();
85
+ const keys = Object.keys(ctx.proxies).sort();
86
+ expect(keys).toEqual([...WORKER_PROXY_NAMESPACES].sort());
87
+ }));
88
+ it('ExtensionContext.proxies has no view-only namespaces', () => __awaiter(void 0, void 0, void 0, function* () {
89
+ const { ExtensionContext } = yield import('./worker');
90
+ const ctx = new ExtensionContext();
91
+ for (const ns of VIEW_ONLY_NAMESPACES) {
92
+ expect(ctx.proxies[ns]).toBeUndefined();
93
+ }
94
+ }));
95
+ it('exposes preferences facade', () => __awaiter(void 0, void 0, void 0, function* () {
96
+ const { ExtensionContext } = yield import('./worker');
97
+ const ctx = new ExtensionContext();
98
+ expect(ctx.preferences).toBeTruthy();
99
+ expect(ctx.preferences.values).toBeDefined();
100
+ }));
101
+ it('exposes onRequest but not request (worker-only RPC direction)', () => __awaiter(void 0, void 0, void 0, function* () {
102
+ const { ExtensionContext } = yield import('./worker');
103
+ const ctx = new ExtensionContext();
104
+ expect(ctx.onRequest).toBeTypeOf('function');
105
+ expect(ctx.request).toBeUndefined();
106
+ }));
107
+ it('tags asyar:extension:loaded event with role=worker', () => __awaiter(void 0, void 0, void 0, function* () {
108
+ const parentPostMessage = vi.fn();
109
+ Object.defineProperty(window, 'parent', {
110
+ value: { postMessage: parentPostMessage },
111
+ configurable: true,
112
+ });
113
+ const { ExtensionContext } = yield import('./worker');
114
+ const ctx = new ExtensionContext();
115
+ ctx.setExtensionId('ext.test');
116
+ expect(parentPostMessage).toHaveBeenCalledWith(expect.objectContaining({
117
+ type: 'asyar:extension:loaded',
118
+ extensionId: 'ext.test',
119
+ role: 'worker',
120
+ }), '*');
121
+ }));
122
+ it('patches extensionRpc singleton via notifyRpcIfAvailable hook (regression: worker-side state:rpcReply rejections due to missing extensionId)', () => __awaiter(void 0, void 0, void 0, function* () {
123
+ // Symmetric to the view-side regression — worker-side
124
+ // state:rpcReply messages must also carry extensionId so the
125
+ // launcher's IPC router accepts them. Without this override, the
126
+ // RPC round-trip times out even if the view-side request reached
127
+ // the worker handler successfully.
128
+ const { extensionRpc } = yield import('./services/ExtensionRpc');
129
+ const { ExtensionContext } = yield import('./worker');
130
+ const rpcSetIdSpy = vi.spyOn(extensionRpc, 'setExtensionId');
131
+ const ctx = new ExtensionContext();
132
+ ctx.setExtensionId('ext.worker-rpc');
133
+ expect(rpcSetIdSpy).toHaveBeenCalledWith('ext.worker-rpc');
134
+ }));
135
+ });
136
+ //# sourceMappingURL=worker.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker.test.js","sourceRoot":"","sources":["../src/worker.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,15 +1,23 @@
1
1
  {
2
2
  "name": "asyar-sdk",
3
- "version": "1.16.2",
3
+ "version": "2.0.0",
4
4
  "main": "dist/index.js",
5
5
  "bin": {
6
6
  "asyar": "./dist/cli/index.js"
7
7
  },
8
8
  "types": "dist/index.d.ts",
9
9
  "exports": {
10
- ".": {
11
- "types": "./dist/index.d.ts",
12
- "default": "./dist/index.js"
10
+ "./contracts": {
11
+ "types": "./dist/contracts.d.ts",
12
+ "default": "./dist/contracts.js"
13
+ },
14
+ "./worker": {
15
+ "types": "./dist/worker.d.ts",
16
+ "default": "./dist/worker.js"
17
+ },
18
+ "./view": {
19
+ "types": "./dist/view.d.ts",
20
+ "default": "./dist/view.js"
13
21
  },
14
22
  "./tokens.css": "./src/styles/tokens.css"
15
23
  },
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGtD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC1D,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAE9D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAClE,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAIlF,YAAY,EACV,iBAAiB,EACjB,WAAW,EACX,oBAAoB,EACpB,wBAAwB,EACxB,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,EACnB,UAAU,EACV,iBAAiB,EACjB,cAAc,EACd,kBAAkB,EAClB,eAAe,EACf,mBAAmB,EACnB,eAAe,EACf,UAAU,EACV,cAAc,EACd,gBAAgB,EAChB,SAAS,EACT,aAAa,EACb,WAAW,EACX,UAAU,EACV,UAAU,EACV,aAAa,EACb,mBAAmB,EACnB,eAAe,EACf,mBAAmB,EACnB,oBAAoB,EACpB,gBAAgB,EAChB,oBAAoB,EACpB,aAAa,EACb,eAAe,EACf,wBAAwB,EACxB,YAAY,EACZ,WAAW,EACX,UAAU,EACV,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,wBAAwB,EACxB,eAAe,EACf,oBAAoB,EACpB,WAAW,EACX,eAAe,EACf,QAAQ,EACR,aAAa,EACb,eAAe,EACf,oBAAoB,EACpB,yBAAyB,EACzB,wBAAwB,EACxB,qBAAqB,EACrB,aAAa,GACd,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,6BAA6B,EAAE,MAAM,YAAY,CAAC;AAE3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEhD,OAAO,EAGL,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACnE,YAAY,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAG9D,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC"}
package/dist/index.js DELETED
@@ -1,47 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.ActionCategory = exports.ActionContext = exports.StatusBarServiceProxy = exports.ExtensionManagerProxy = exports.LaunchCommandError = exports.FileSystemWatcherServiceProxy = exports.messageBroker = exports.MessageBroker = exports.isNamespace = exports.NAMESPACES = exports.ExtensionContext = exports.extensionBridge = exports.ExtensionBridge = void 0;
18
- var ExtensionBridge_1 = require("./ExtensionBridge");
19
- Object.defineProperty(exports, "ExtensionBridge", { enumerable: true, get: function () { return ExtensionBridge_1.ExtensionBridge; } });
20
- Object.defineProperty(exports, "extensionBridge", { enumerable: true, get: function () { return ExtensionBridge_1.extensionBridge; } });
21
- var ExtensionContext_1 = require("./ExtensionContext");
22
- Object.defineProperty(exports, "ExtensionContext", { enumerable: true, get: function () { return ExtensionContext_1.ExtensionContext; } });
23
- // IPC namespace single source of truth
24
- var namespaces_1 = require("./ipc/namespaces");
25
- Object.defineProperty(exports, "NAMESPACES", { enumerable: true, get: function () { return namespaces_1.NAMESPACES; } });
26
- Object.defineProperty(exports, "isNamespace", { enumerable: true, get: function () { return namespaces_1.isNamespace; } });
27
- var MessageBroker_1 = require("./ipc/MessageBroker");
28
- Object.defineProperty(exports, "MessageBroker", { enumerable: true, get: function () { return MessageBroker_1.MessageBroker; } });
29
- Object.defineProperty(exports, "messageBroker", { enumerable: true, get: function () { return MessageBroker_1.messageBroker; } });
30
- var services_1 = require("./services");
31
- Object.defineProperty(exports, "FileSystemWatcherServiceProxy", { enumerable: true, get: function () { return services_1.FileSystemWatcherServiceProxy; } });
32
- var services_2 = require("./services");
33
- Object.defineProperty(exports, "LaunchCommandError", { enumerable: true, get: function () { return services_2.LaunchCommandError; } });
34
- var services_3 = require("./services");
35
- // TODO: Tech Debt - Remove this public export once create-extension built-in is refactored
36
- // to call host services directly instead of using this Tier 2 postMessage proxy.
37
- Object.defineProperty(exports, "ExtensionManagerProxy", { enumerable: true, get: function () { return services_3.ExtensionManagerProxy; } });
38
- Object.defineProperty(exports, "StatusBarServiceProxy", { enumerable: true, get: function () { return services_3.StatusBarServiceProxy; } });
39
- // Export specific enums/types if needed individually
40
- var ActionType_1 = require("./types/ActionType");
41
- Object.defineProperty(exports, "ActionContext", { enumerable: true, get: function () { return ActionType_1.ActionContext; } });
42
- Object.defineProperty(exports, "ActionCategory", { enumerable: true, get: function () { return ActionType_1.ActionCategory; } });
43
- // Re-export all types for easier consumption
44
- __exportStar(require("./types"), exports);
45
- __exportStar(require("./icons"), exports);
46
- __exportStar(require("./search"), exports);
47
- //# sourceMappingURL=index.js.map
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,qDAAqE;AAA5D,kHAAA,eAAe,OAAA;AAAE,kHAAA,eAAe,OAAA;AACzC,uDAAsD;AAA7C,oHAAA,gBAAgB,OAAA;AAEzB,uCAAuC;AACvC,+CAA0D;AAAjD,wGAAA,UAAU,OAAA;AAAE,yGAAA,WAAW,OAAA;AAGhC,qDAAkE;AAAzD,8GAAA,aAAa,OAAA;AAAE,8GAAA,aAAa,OAAA;AAgErC,uCAA2D;AAAlD,yHAAA,6BAA6B,OAAA;AAEtC,uCAAgD;AAAvC,8GAAA,kBAAkB,OAAA;AAE3B,uCAKoB;AAJlB,4FAA4F;AAC5F,iFAAiF;AACjF,iHAAA,qBAAqB,OAAA;AACrB,iHAAA,qBAAqB,OAAA;AAGvB,qDAAqD;AACrD,iDAAmE;AAA1D,2GAAA,aAAa,OAAA;AAAE,4GAAA,cAAc,OAAA;AAGtC,6CAA6C;AAC7C,0CAAwB;AACxB,0CAAwB;AACxB,2CAAyB"}