@monimesl/dot-dash 0.1.0-alpha.10

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/README.md ADDED
@@ -0,0 +1 @@
1
+ # @monimesl/dot-dash
@@ -0,0 +1,422 @@
1
+ import { HostCallOptions, HostError, HostErrorCode, HostRequest } from "@monimesl/dot-core";
2
+ declare namespace cache_d_exports {
3
+ export { CacheMethods, CacheSetOptions, CacheValue, clear$1 as clear, exists, get$1 as get, keys, remove$2 as remove, set$1 as set };
4
+ }
5
+ type CacheValue = string | number | boolean | CacheValue[] | {
6
+ [key: string]: CacheValue;
7
+ };
8
+ interface CacheMethods {
9
+ 'dash.storage.cache.get': {
10
+ params: {
11
+ key: string;
12
+ };
13
+ result: CacheValue | null;
14
+ };
15
+ 'dash.storage.cache.set': {
16
+ params: {
17
+ key: string;
18
+ value: CacheValue;
19
+ ttl?: number | undefined;
20
+ };
21
+ result: void;
22
+ };
23
+ 'dash.storage.cache.remove': {
24
+ params: {
25
+ key: string;
26
+ };
27
+ result: void;
28
+ };
29
+ 'dash.storage.cache.exists': {
30
+ params: {
31
+ key: string;
32
+ };
33
+ result: boolean;
34
+ };
35
+ 'dash.storage.cache.keys': {
36
+ params: Record<string, never>;
37
+ result: string[];
38
+ };
39
+ 'dash.storage.cache.clear': {
40
+ params: Record<string, never>;
41
+ result: void;
42
+ };
43
+ }
44
+ interface CacheSetOptions {
45
+ ttl?: number | undefined;
46
+ }
47
+ declare function get$1<Value extends CacheValue = CacheValue>(key: string, callOptions?: CallOptions): DashRequest<Value | null>;
48
+ declare function set$1(key: string, value: CacheValue, options?: CacheSetOptions, callOptions?: CallOptions): DashRequest<void>;
49
+ declare function remove$2(key: string, callOptions?: CallOptions): DashRequest<void>;
50
+ declare function exists(key: string, callOptions?: CallOptions): DashRequest<boolean>;
51
+ declare function keys(callOptions?: CallOptions): DashRequest<string[]>;
52
+ declare function clear$1(callOptions?: CallOptions): DashRequest<void>;
53
+ //#endregion
54
+ //#region src/files.d.ts
55
+ interface DotFile {
56
+ id: string;
57
+ name: string;
58
+ size: number;
59
+ contentType: string;
60
+ url: string;
61
+ }
62
+ declare namespace file_d_exports {
63
+ export { FileEncoding, FileEntry, FileMethods, ReadOptions, ReplaceOptions, StorageUsage, WriteOptions, copy, createFolder, list, move, open, read, remove$1 as remove, save, stat, usage, write };
64
+ }
65
+ interface FileEntry {
66
+ name: string;
67
+ path: string;
68
+ size: number;
69
+ kind: 'file' | 'folder';
70
+ modifiedAt: number;
71
+ contentType?: string;
72
+ }
73
+ type FileEncoding = 'text' | 'base64';
74
+ interface StorageUsage {
75
+ used: number;
76
+ quota: number;
77
+ }
78
+ interface FileMethods {
79
+ 'dash.storage.file.read': {
80
+ params: {
81
+ path: string;
82
+ as?: FileEncoding;
83
+ };
84
+ result: string;
85
+ };
86
+ 'dash.storage.file.write': {
87
+ params: {
88
+ path: string;
89
+ data: string;
90
+ as?: FileEncoding;
91
+ append?: boolean;
92
+ };
93
+ result: FileEntry;
94
+ };
95
+ 'dash.storage.file.stat': {
96
+ params: {
97
+ path: string;
98
+ };
99
+ result: FileEntry | null;
100
+ };
101
+ 'dash.storage.file.list': {
102
+ params: {
103
+ path: string;
104
+ recursive?: boolean;
105
+ };
106
+ result: FileEntry[];
107
+ };
108
+ 'dash.storage.file.createFolder': {
109
+ params: {
110
+ path: string;
111
+ };
112
+ result: FileEntry;
113
+ };
114
+ 'dash.storage.file.move': {
115
+ params: {
116
+ from: string;
117
+ to: string;
118
+ overwrite?: boolean;
119
+ };
120
+ result: FileEntry;
121
+ };
122
+ 'dash.storage.file.copy': {
123
+ params: {
124
+ from: string;
125
+ to: string;
126
+ overwrite?: boolean;
127
+ };
128
+ result: FileEntry;
129
+ };
130
+ 'dash.storage.file.remove': {
131
+ params: {
132
+ path: string;
133
+ recursive?: boolean;
134
+ };
135
+ result: void;
136
+ };
137
+ 'dash.storage.file.save': {
138
+ params: {
139
+ file: string;
140
+ path: string;
141
+ overwrite?: boolean;
142
+ };
143
+ result: FileEntry;
144
+ };
145
+ 'dash.storage.file.open': {
146
+ params: {
147
+ path: string;
148
+ };
149
+ result: DotFile;
150
+ };
151
+ 'dash.storage.file.usage': {
152
+ params: Record<string, never>;
153
+ result: StorageUsage;
154
+ };
155
+ }
156
+ interface ReadOptions {
157
+ as?: FileEncoding;
158
+ }
159
+ interface WriteOptions {
160
+ as?: FileEncoding;
161
+ append?: boolean;
162
+ }
163
+ interface ReplaceOptions {
164
+ overwrite?: boolean;
165
+ }
166
+ declare function read(path: string, options?: ReadOptions, callOptions?: CallOptions): DashRequest<string>;
167
+ declare function write(path: string, data: string, options?: WriteOptions, callOptions?: CallOptions): DashRequest<FileEntry>;
168
+ declare function stat(path: string, callOptions?: CallOptions): DashRequest<FileEntry | null>;
169
+ declare function list(path?: string, options?: {
170
+ recursive?: boolean;
171
+ }, callOptions?: CallOptions): DashRequest<FileEntry[]>;
172
+ declare function createFolder(path: string, callOptions?: CallOptions): DashRequest<FileEntry>;
173
+ declare function move(from: string, to: string, options?: ReplaceOptions, callOptions?: CallOptions): DashRequest<FileEntry>;
174
+ declare function copy(from: string, to: string, options?: ReplaceOptions, callOptions?: CallOptions): DashRequest<FileEntry>;
175
+ declare function remove$1(path: string, options?: {
176
+ recursive?: boolean;
177
+ }, callOptions?: CallOptions): DashRequest<void>;
178
+ declare function save(file: DotFile | string, path: string, options?: ReplaceOptions, callOptions?: CallOptions): DashRequest<FileEntry>;
179
+ declare function open(path: string, callOptions?: CallOptions): DashRequest<DotFile>;
180
+ declare function usage(callOptions?: CallOptions): DashRequest<StorageUsage>;
181
+ declare namespace secret_d_exports {
182
+ export { SecretMethods, clear, get, remove, set };
183
+ }
184
+ interface SecretMethods {
185
+ 'dash.storage.secret.get': {
186
+ params: {
187
+ key: string;
188
+ };
189
+ result: string | null;
190
+ };
191
+ 'dash.storage.secret.set': {
192
+ params: {
193
+ key: string;
194
+ value: string;
195
+ };
196
+ result: void;
197
+ };
198
+ 'dash.storage.secret.remove': {
199
+ params: {
200
+ key: string;
201
+ };
202
+ result: void;
203
+ };
204
+ 'dash.storage.secret.clear': {
205
+ params: Record<string, never>;
206
+ result: void;
207
+ };
208
+ }
209
+ declare function get(key: string, callOptions?: CallOptions): DashRequest<string | null>;
210
+ declare function set(key: string, value: string, callOptions?: CallOptions): DashRequest<void>;
211
+ declare function remove(key: string, callOptions?: CallOptions): DashRequest<void>;
212
+ declare function clear(callOptions?: CallOptions): DashRequest<void>;
213
+ declare namespace index_d_exports$3 {
214
+ export { CacheSetOptions, CacheValue, FileEncoding, FileEntry, ReadOptions, ReplaceOptions, StorageMethods, StorageUsage, WriteOptions, cache_d_exports as cache, file_d_exports as file, secret_d_exports as secret };
215
+ }
216
+ type StorageMethods = FileMethods & CacheMethods & SecretMethods;
217
+ //#endregion
218
+ //#region src/system/clipboard.d.ts
219
+ interface ClipboardMethods {
220
+ 'dash.system.copyText': {
221
+ params: {
222
+ text: string;
223
+ };
224
+ result: void;
225
+ };
226
+ }
227
+ declare function copyText(text: string, callOptions?: CallOptions): DashRequest<void>;
228
+ //#endregion
229
+ //#region src/system/delay.d.ts
230
+ interface DelayMethods {
231
+ 'dash.system.delay': {
232
+ params: {
233
+ milliseconds: number;
234
+ };
235
+ result: void;
236
+ };
237
+ }
238
+ declare function delay(milliseconds: number, callOptions?: CallOptions): DashRequest<void>;
239
+ //#endregion
240
+ //#region src/system/haptics.d.ts
241
+ type VibrationStyle = 'light' | 'medium' | 'heavy' | 'success' | 'warning' | 'error';
242
+ interface VibrateOptions {
243
+ style?: VibrationStyle | undefined;
244
+ }
245
+ interface HapticsMethods {
246
+ 'dash.system.vibrate': {
247
+ params: VibrateOptions;
248
+ result: void;
249
+ };
250
+ }
251
+ declare function vibrate(options?: VibrateOptions, callOptions?: CallOptions): DashRequest<void>;
252
+ //#endregion
253
+ //#region src/system/open-url.d.ts
254
+ interface OpenUrlMethods {
255
+ 'dash.system.openUrl': {
256
+ params: {
257
+ url: string;
258
+ };
259
+ result: void;
260
+ };
261
+ }
262
+ declare function openUrl(url: string, callOptions?: CallOptions): DashRequest<void>;
263
+ //#endregion
264
+ //#region src/system/share.d.ts
265
+ interface ShareOptions {
266
+ title?: string;
267
+ text?: string;
268
+ url?: string;
269
+ file?: DotFile | string;
270
+ }
271
+ interface ShareMethods {
272
+ 'dash.system.share': {
273
+ params: {
274
+ title?: string;
275
+ text?: string;
276
+ url?: string;
277
+ file?: string;
278
+ };
279
+ result: void;
280
+ };
281
+ }
282
+ declare function share(options: ShareOptions, callOptions?: CallOptions): DashRequest<void>;
283
+ //#endregion
284
+ //#region src/system/torch.d.ts
285
+ type TorchState = 'on' | 'off';
286
+ interface TorchMethods {
287
+ 'dash.system.torch': {
288
+ params: {
289
+ state: TorchState;
290
+ };
291
+ result: void;
292
+ };
293
+ }
294
+ declare function torch(state: TorchState, callOptions?: CallOptions): DashRequest<void>;
295
+ declare namespace index_d_exports$2 {
296
+ export { ShareOptions, SystemMethods, TorchState, VibrateOptions, VibrationStyle, copyText, delay, openUrl, share, torch, vibrate };
297
+ }
298
+ type SystemMethods = ClipboardMethods & DelayMethods & HapticsMethods & OpenUrlMethods & ShareMethods & TorchMethods;
299
+ //#endregion
300
+ //#region src/ui/dialogs.d.ts
301
+ interface AlertAction {
302
+ id: string;
303
+ label: string;
304
+ role?: 'default' | 'cancel' | 'destructive' | undefined;
305
+ }
306
+ interface AlertOptions {
307
+ title: string;
308
+ message?: string | undefined;
309
+ actions?: AlertAction[] | undefined;
310
+ }
311
+ interface AlertResult {
312
+ action: string;
313
+ }
314
+ interface DialogMethods {
315
+ 'dash.ui.alert': {
316
+ params: AlertOptions;
317
+ result: AlertResult;
318
+ };
319
+ }
320
+ declare function alert(options: AlertOptions, callOptions?: CallOptions): DashRequest<AlertResult>;
321
+ declare namespace index_d_exports$1 {
322
+ export { AlertAction, AlertOptions, AlertResult, UIMethods, alert };
323
+ }
324
+ type UIMethods = DialogMethods;
325
+ //#endregion
326
+ //#region src/methods.d.ts
327
+ type DashMethods = UIMethods & SystemMethods & NetworkMethods & StorageMethods;
328
+ type DashMethod = keyof DashMethods;
329
+ //#endregion
330
+ //#region src/call.d.ts
331
+ type CallOptions = HostCallOptions;
332
+ type DashRequest<Result> = HostRequest<Result>;
333
+ declare namespace http_d_exports {
334
+ export { HttpDownloadRequest, HttpDownloadResponse, HttpMethod, HttpMethods, HttpReadOptions, HttpRequest, HttpRequestBody, HttpResponse, HttpUploadFile, HttpUploadRequest, download, request, upload };
335
+ }
336
+ type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'HEAD' | 'OPTIONS';
337
+ type HttpRequestBody = string | object;
338
+ interface HttpRequest<Body extends HttpRequestBody = HttpRequestBody> {
339
+ url: string;
340
+ method?: HttpMethod;
341
+ headers?: Record<string, string>;
342
+ body?: Body;
343
+ }
344
+ interface HttpResponse<Body = string> {
345
+ ok: boolean;
346
+ status: number;
347
+ statusText: string;
348
+ headers: Record<string, string>;
349
+ body: Body;
350
+ }
351
+ type HttpReadOptions<Body> = [Body] extends [string] ? {
352
+ as?: 'text';
353
+ } : {
354
+ as: 'json';
355
+ };
356
+ interface HttpDownloadRequest extends HttpRequest {
357
+ name?: string;
358
+ }
359
+ type HttpDownloadResponse = (Omit<HttpResponse, 'ok' | 'body'> & {
360
+ ok: true;
361
+ file: DotFile;
362
+ }) | (Omit<HttpResponse, 'ok'> & {
363
+ ok: false;
364
+ });
365
+ interface HttpUploadFile {
366
+ field: string;
367
+ file: DotFile | string;
368
+ name?: string;
369
+ }
370
+ interface HttpUploadRequest {
371
+ url: string;
372
+ method?: 'POST' | 'PUT' | 'PATCH';
373
+ headers?: Record<string, string>;
374
+ fields?: Record<string, string>;
375
+ files: HttpUploadFile[];
376
+ }
377
+ type WireRequest<Request extends HttpRequest> = Omit<Request, 'headers' | 'body'> & {
378
+ headers?: Record<string, string> | undefined;
379
+ body?: string | undefined;
380
+ };
381
+ interface HttpMethods {
382
+ 'dash.network.http.request': {
383
+ params: WireRequest<HttpRequest>;
384
+ result: HttpResponse;
385
+ };
386
+ 'dash.network.http.download': {
387
+ params: WireRequest<HttpDownloadRequest>;
388
+ result: HttpDownloadResponse;
389
+ };
390
+ 'dash.network.http.upload': {
391
+ params: Omit<HttpUploadRequest, 'files'> & {
392
+ files: {
393
+ field: string;
394
+ file: string;
395
+ name?: string;
396
+ }[];
397
+ };
398
+ result: HttpResponse;
399
+ };
400
+ }
401
+ declare function request<ResponseBody = string, RequestBody extends HttpRequestBody = HttpRequestBody>(options: HttpRequest<RequestBody> & HttpReadOptions<ResponseBody>, callOptions?: CallOptions): DashRequest<HttpResponse<ResponseBody>>;
402
+ declare function download(options: HttpDownloadRequest, callOptions?: CallOptions): DashRequest<HttpDownloadResponse>;
403
+ declare function upload<ResponseBody = string>(options: HttpUploadRequest & HttpReadOptions<ResponseBody>, callOptions?: CallOptions): DashRequest<HttpResponse<ResponseBody>>;
404
+ declare namespace index_d_exports {
405
+ export { HttpDownloadRequest, HttpDownloadResponse, HttpMethod, HttpReadOptions, HttpRequest, HttpRequestBody, HttpResponse, HttpUploadFile, HttpUploadRequest, NetworkMethods, http_d_exports as http };
406
+ }
407
+ type NetworkMethods = HttpMethods;
408
+ //#endregion
409
+ //#region src/tracked.d.ts
410
+ export declare function tracked<Group extends object>(group: Group, track: (request: DashRequest<unknown>) => void): Group;
411
+ //#endregion
412
+ //#region src/index.d.ts
413
+ export declare const dash: {
414
+ ui: typeof index_d_exports$1;
415
+ system: typeof index_d_exports$2;
416
+ network: typeof index_d_exports;
417
+ storage: typeof index_d_exports$3;
418
+ };
419
+ export type Dash = typeof dash;
420
+ //#endregion
421
+ export { type AlertAction, type AlertOptions, type AlertResult, type CacheSetOptions, type CacheValue, type CallOptions, type DashMethod, type DashMethods, type DashRequest, type DotFile, type FileEncoding, type FileEntry, HostError, type HostErrorCode, type HttpDownloadRequest, type HttpDownloadResponse, type HttpMethod, type HttpReadOptions, type HttpRequest, type HttpRequestBody, type HttpResponse, type HttpUploadFile, type HttpUploadRequest, type NetworkMethods, type ReadOptions, type ReplaceOptions, type ShareOptions, type StorageMethods, type StorageUsage, type SystemMethods, type TorchState, type UIMethods, type VibrateOptions, type VibrationStyle, type WriteOptions };
422
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../src/storage/cache.ts","../src/files.ts","../src/storage/file.ts","../src/storage/secret.ts","../src/storage/index.ts","../src/system/clipboard.ts","../src/system/delay.ts","../src/system/haptics.ts","../src/system/open-url.ts","../src/system/share.ts","../src/system/torch.ts","../src/system/index.ts","../src/ui/dialogs.ts","../src/ui/index.ts","../src/methods.ts","../src/call.ts","../src/network/http.ts","../src/network/index.ts","../src/tracked.ts","../src/index.ts"],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,301 @@
1
+ import { t as __exportAll } from "./rolldown-runtime-D7D4PA-g.js";
2
+ import { HostError, HostError as HostError$1, callHost, createHostRequest } from "@monimesl/dot-core";
3
+ //#region src/call.ts
4
+ function call(method, params, options = {}) {
5
+ return callHost(method, params, options);
6
+ }
7
+ //#endregion
8
+ //#region src/files.ts
9
+ function fileId(file) {
10
+ return typeof file === "string" ? file : file.id;
11
+ }
12
+ //#endregion
13
+ //#region src/network/http.ts
14
+ var http_exports = /* @__PURE__ */ __exportAll({
15
+ download: () => download,
16
+ request: () => request,
17
+ upload: () => upload
18
+ });
19
+ function request(options, callOptions) {
20
+ const { as, ...request } = options;
21
+ return readBody(call("dash.network.http.request", wireRequest(request, as), callOptions), as);
22
+ }
23
+ function download(options, callOptions) {
24
+ return call("dash.network.http.download", wireRequest(options), callOptions);
25
+ }
26
+ function upload(options, callOptions) {
27
+ const { as, ...request } = options;
28
+ const files = request.files.map(({ file, ...rest }) => ({
29
+ ...rest,
30
+ file: fileId(file)
31
+ }));
32
+ const params = {
33
+ ...request,
34
+ files
35
+ };
36
+ if (as === "json") params.headers = withDefaultHeader(request.headers, "Accept", "application/json");
37
+ return readBody(call("dash.network.http.upload", params, callOptions), as);
38
+ }
39
+ function wireRequest(request, as) {
40
+ let headers = request.headers;
41
+ let body;
42
+ if (as === "json") headers = withDefaultHeader(headers, "Accept", "application/json");
43
+ if (typeof request.body === "string") body = request.body;
44
+ else if (request.body !== void 0) {
45
+ headers = withDefaultHeader(headers, "Content-Type", "application/json");
46
+ body = JSON.stringify(request.body);
47
+ }
48
+ return {
49
+ ...request,
50
+ headers,
51
+ body
52
+ };
53
+ }
54
+ function withDefaultHeader(headers, name, value) {
55
+ const lowerName = name.toLowerCase();
56
+ if (headers && Object.keys(headers).some((existing) => existing.toLowerCase() === lowerName)) return headers;
57
+ return {
58
+ ...headers,
59
+ [name]: value
60
+ };
61
+ }
62
+ function readBody(response, as) {
63
+ if (as !== "json") return response;
64
+ const parsed = response.then((result) => ({
65
+ ...result,
66
+ body: parseJson(result)
67
+ }));
68
+ return createHostRequest(parsed, () => response.cancel());
69
+ }
70
+ function parseJson({ status, statusText, body }) {
71
+ try {
72
+ return JSON.parse(body);
73
+ } catch (error) {
74
+ const message = error instanceof Error ? error.message : String(error);
75
+ throw new HostError$1("failed", `The response (${status} ${statusText}) isn't JSON: ${message}`);
76
+ }
77
+ }
78
+ //#endregion
79
+ //#region src/network/index.ts
80
+ var network_exports = /* @__PURE__ */ __exportAll({ http: () => http_exports });
81
+ //#endregion
82
+ //#region src/storage/cache.ts
83
+ var cache_exports = /* @__PURE__ */ __exportAll({
84
+ clear: () => clear$1,
85
+ exists: () => exists,
86
+ get: () => get$1,
87
+ keys: () => keys,
88
+ remove: () => remove$2,
89
+ set: () => set$1
90
+ });
91
+ function get$1(key, callOptions) {
92
+ return call("dash.storage.cache.get", { key }, callOptions);
93
+ }
94
+ function set$1(key, value, options = {}, callOptions) {
95
+ return call("dash.storage.cache.set", {
96
+ key,
97
+ value,
98
+ ...options
99
+ }, callOptions);
100
+ }
101
+ function remove$2(key, callOptions) {
102
+ return call("dash.storage.cache.remove", { key }, callOptions);
103
+ }
104
+ function exists(key, callOptions) {
105
+ return call("dash.storage.cache.exists", { key }, callOptions);
106
+ }
107
+ function keys(callOptions) {
108
+ return call("dash.storage.cache.keys", {}, callOptions);
109
+ }
110
+ function clear$1(callOptions) {
111
+ return call("dash.storage.cache.clear", {}, callOptions);
112
+ }
113
+ //#endregion
114
+ //#region src/storage/file.ts
115
+ var file_exports = /* @__PURE__ */ __exportAll({
116
+ copy: () => copy,
117
+ createFolder: () => createFolder,
118
+ list: () => list,
119
+ move: () => move,
120
+ open: () => open,
121
+ read: () => read,
122
+ remove: () => remove$1,
123
+ save: () => save,
124
+ stat: () => stat,
125
+ usage: () => usage,
126
+ write: () => write
127
+ });
128
+ function read(path, options = {}, callOptions) {
129
+ return call("dash.storage.file.read", {
130
+ path,
131
+ ...options
132
+ }, callOptions);
133
+ }
134
+ function write(path, data, options = {}, callOptions) {
135
+ return call("dash.storage.file.write", {
136
+ path,
137
+ data,
138
+ ...options
139
+ }, callOptions);
140
+ }
141
+ function stat(path, callOptions) {
142
+ return call("dash.storage.file.stat", { path }, callOptions);
143
+ }
144
+ function list(path = "", options = {}, callOptions) {
145
+ return call("dash.storage.file.list", {
146
+ path,
147
+ ...options
148
+ }, callOptions);
149
+ }
150
+ function createFolder(path, callOptions) {
151
+ return call("dash.storage.file.createFolder", { path }, callOptions);
152
+ }
153
+ function move(from, to, options = {}, callOptions) {
154
+ return call("dash.storage.file.move", {
155
+ from,
156
+ to,
157
+ ...options
158
+ }, callOptions);
159
+ }
160
+ function copy(from, to, options = {}, callOptions) {
161
+ return call("dash.storage.file.copy", {
162
+ from,
163
+ to,
164
+ ...options
165
+ }, callOptions);
166
+ }
167
+ function remove$1(path, options = {}, callOptions) {
168
+ return call("dash.storage.file.remove", {
169
+ path,
170
+ ...options
171
+ }, callOptions);
172
+ }
173
+ function save(file, path, options = {}, callOptions) {
174
+ return call("dash.storage.file.save", {
175
+ file: fileId(file),
176
+ path,
177
+ ...options
178
+ }, callOptions);
179
+ }
180
+ function open(path, callOptions) {
181
+ return call("dash.storage.file.open", { path }, callOptions);
182
+ }
183
+ function usage(callOptions) {
184
+ return call("dash.storage.file.usage", {}, callOptions);
185
+ }
186
+ //#endregion
187
+ //#region src/storage/secret.ts
188
+ var secret_exports = /* @__PURE__ */ __exportAll({
189
+ clear: () => clear,
190
+ get: () => get,
191
+ remove: () => remove,
192
+ set: () => set
193
+ });
194
+ function get(key, callOptions) {
195
+ return call("dash.storage.secret.get", { key }, callOptions);
196
+ }
197
+ function set(key, value, callOptions) {
198
+ return call("dash.storage.secret.set", {
199
+ key,
200
+ value
201
+ }, callOptions);
202
+ }
203
+ function remove(key, callOptions) {
204
+ return call("dash.storage.secret.remove", { key }, callOptions);
205
+ }
206
+ function clear(callOptions) {
207
+ return call("dash.storage.secret.clear", {}, callOptions);
208
+ }
209
+ //#endregion
210
+ //#region src/storage/index.ts
211
+ var storage_exports = /* @__PURE__ */ __exportAll({
212
+ cache: () => cache_exports,
213
+ file: () => file_exports,
214
+ secret: () => secret_exports
215
+ });
216
+ //#endregion
217
+ //#region src/system/clipboard.ts
218
+ function copyText(text, callOptions) {
219
+ return call("dash.system.copyText", { text }, callOptions);
220
+ }
221
+ //#endregion
222
+ //#region src/system/delay.ts
223
+ function delay(milliseconds, callOptions) {
224
+ return call("dash.system.delay", { milliseconds }, callOptions);
225
+ }
226
+ //#endregion
227
+ //#region src/system/haptics.ts
228
+ function vibrate(options = {}, callOptions) {
229
+ return call("dash.system.vibrate", { style: options.style ?? "medium" }, callOptions);
230
+ }
231
+ //#endregion
232
+ //#region src/system/open-url.ts
233
+ function openUrl(url, callOptions) {
234
+ return call("dash.system.openUrl", { url }, callOptions);
235
+ }
236
+ //#endregion
237
+ //#region src/system/share.ts
238
+ function share(options, callOptions) {
239
+ const { file, ...rest } = options;
240
+ if (file === void 0) return call("dash.system.share", rest, callOptions);
241
+ return call("dash.system.share", {
242
+ ...rest,
243
+ file: fileId(file)
244
+ }, callOptions);
245
+ }
246
+ //#endregion
247
+ //#region src/system/torch.ts
248
+ function torch(state, callOptions) {
249
+ return call("dash.system.torch", { state }, callOptions);
250
+ }
251
+ //#endregion
252
+ //#region src/system/index.ts
253
+ var system_exports = /* @__PURE__ */ __exportAll({
254
+ copyText: () => copyText,
255
+ delay: () => delay,
256
+ openUrl: () => openUrl,
257
+ share: () => share,
258
+ torch: () => torch,
259
+ vibrate: () => vibrate
260
+ });
261
+ //#endregion
262
+ //#region src/ui/dialogs.ts
263
+ function alert(options, callOptions) {
264
+ const actions = options.actions ?? [{
265
+ id: "ok",
266
+ label: "OK"
267
+ }];
268
+ return call("dash.ui.alert", {
269
+ ...options,
270
+ actions
271
+ }, callOptions);
272
+ }
273
+ //#endregion
274
+ //#region src/ui/index.ts
275
+ var ui_exports = /* @__PURE__ */ __exportAll({ alert: () => alert });
276
+ //#endregion
277
+ //#region src/tracked.ts
278
+ function tracked(group, track) {
279
+ const copy = {};
280
+ for (const [name, member] of Object.entries(group)) if (typeof member === "function") {
281
+ const start = member;
282
+ copy[name] = (...args) => {
283
+ const request = start(...args);
284
+ track(request);
285
+ return request;
286
+ };
287
+ } else copy[name] = tracked(member, track);
288
+ return copy;
289
+ }
290
+ //#endregion
291
+ //#region src/index.ts
292
+ const dash = {
293
+ ui: ui_exports,
294
+ system: system_exports,
295
+ network: network_exports,
296
+ storage: storage_exports
297
+ };
298
+ //#endregion
299
+ export { HostError, dash, tracked };
300
+
301
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["HostError","get","set","remove","clear","remove"],"sources":["../src/call.ts","../src/files.ts","../src/network/http.ts","../src/network/index.ts","../src/storage/cache.ts","../src/storage/file.ts","../src/storage/secret.ts","../src/storage/index.ts","../src/system/clipboard.ts","../src/system/delay.ts","../src/system/haptics.ts","../src/system/open-url.ts","../src/system/share.ts","../src/system/torch.ts","../src/system/index.ts","../src/ui/dialogs.ts","../src/ui/index.ts","../src/tracked.ts","../src/index.ts"],"sourcesContent":["import type { HostCallOptions, HostRequest } from '@monimesl/dot-core';\nimport { callHost } from '@monimesl/dot-core';\n\nimport type { DashMethod, DashMethods } from './methods';\n\nexport type CallOptions = HostCallOptions;\n\n// A running Dash call. Await it for the result, or cancel it.\nexport type DashRequest<Result> = HostRequest<Result>;\n\nexport function call<Method extends DashMethod>(\n method: Method,\n params: DashMethods[Method]['params'],\n options: CallOptions = {},\n): DashRequest<DashMethods[Method]['result']> {\n return callHost(method, params, options);\n}\n","// A file the host keeps for the dot until it closes, such as a download. Show it with its `url`.\nexport interface DotFile {\n id: string;\n name: string;\n size: number;\n contentType: string;\n url: string;\n}\n\nexport function fileId(file: DotFile | string): string {\n return typeof file === 'string' ? file : file.id;\n}\n","import { HostError, createHostRequest } from '@monimesl/dot-core';\n\nimport type { CallOptions, DashRequest } from '../call';\nimport type { DotFile } from '../files';\nimport { call } from '../call';\nimport { fileId } from '../files';\n\nexport type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'HEAD' | 'OPTIONS';\n\nexport type HttpRequestBody = string | object;\n\nexport interface HttpRequest<Body extends HttpRequestBody = HttpRequestBody> {\n url: string;\n method?: HttpMethod;\n headers?: Record<string, string>;\n body?: Body;\n}\n\nexport interface HttpResponse<Body = string> {\n ok: boolean;\n status: number;\n statusText: string;\n headers: Record<string, string>;\n body: Body;\n}\n\n// Any body type other than string needs `as: 'json'`.\nexport type HttpReadOptions<Body> = [Body] extends [string] ? { as?: 'text' } : { as: 'json' };\n\nexport interface HttpDownloadRequest extends HttpRequest {\n name?: string;\n}\n\nexport type HttpDownloadResponse =\n | (Omit<HttpResponse, 'ok' | 'body'> & { ok: true; file: DotFile })\n | (Omit<HttpResponse, 'ok'> & { ok: false });\n\nexport interface HttpUploadFile {\n field: string;\n file: DotFile | string;\n name?: string;\n}\n\nexport interface HttpUploadRequest {\n url: string;\n // Defaults to POST.\n method?: 'POST' | 'PUT' | 'PATCH';\n headers?: Record<string, string>;\n fields?: Record<string, string>;\n files: HttpUploadFile[];\n}\n\ntype WireRequest<Request extends HttpRequest> = Omit<Request, 'headers' | 'body'> & {\n headers?: Record<string, string> | undefined;\n body?: string | undefined;\n};\n\ntype ReadAs = 'text' | 'json';\n\nexport interface HttpMethods {\n 'dash.network.http.request': { params: WireRequest<HttpRequest>; result: HttpResponse };\n 'dash.network.http.download': {\n params: WireRequest<HttpDownloadRequest>;\n result: HttpDownloadResponse;\n };\n 'dash.network.http.upload': {\n params: Omit<HttpUploadRequest, 'files'> & {\n files: { field: string; file: string; name?: string }[];\n };\n result: HttpResponse;\n };\n}\n\n// Like fetch, resolves with any response, even a 404. An object body is sent as JSON.\nexport function request<\n ResponseBody = string,\n RequestBody extends HttpRequestBody = HttpRequestBody,\n>(\n options: HttpRequest<RequestBody> & HttpReadOptions<ResponseBody>,\n callOptions?: CallOptions,\n): DashRequest<HttpResponse<ResponseBody>> {\n const { as, ...request } = options as HttpRequest & { as?: ReadAs };\n const response = call('dash.network.http.request', wireRequest(request, as), callOptions);\n return readBody(response, as);\n}\n\n// Saves a 2xx response's body, up to 100 MB, to a temporary file.\nexport function download(\n options: HttpDownloadRequest,\n callOptions?: CallOptions,\n): DashRequest<HttpDownloadResponse> {\n return call('dash.network.http.download', wireRequest(options), callOptions);\n}\n\n// Sends the dot's files as a multipart form.\nexport function upload<ResponseBody = string>(\n options: HttpUploadRequest & HttpReadOptions<ResponseBody>,\n callOptions?: CallOptions,\n): DashRequest<HttpResponse<ResponseBody>> {\n const { as, ...request } = options as HttpUploadRequest & { as?: ReadAs };\n const files = request.files.map(({ file, ...rest }) => ({ ...rest, file: fileId(file) }));\n const params = { ...request, files };\n if (as === 'json') {\n params.headers = withDefaultHeader(request.headers, 'Accept', 'application/json');\n }\n const response = call('dash.network.http.upload', params, callOptions);\n return readBody(response, as);\n}\n\nfunction wireRequest<Request extends HttpRequest>(\n request: Request,\n as?: ReadAs,\n): WireRequest<Request> {\n let headers = request.headers;\n let body: string | undefined;\n if (as === 'json') {\n headers = withDefaultHeader(headers, 'Accept', 'application/json');\n }\n if (typeof request.body === 'string') {\n body = request.body;\n } else if (request.body !== undefined) {\n headers = withDefaultHeader(headers, 'Content-Type', 'application/json');\n body = JSON.stringify(request.body);\n }\n return { ...request, headers, body };\n}\n\nfunction withDefaultHeader(\n headers: Record<string, string> | undefined,\n name: string,\n value: string,\n): Record<string, string> {\n const lowerName = name.toLowerCase();\n if (headers && Object.keys(headers).some((existing) => existing.toLowerCase() === lowerName)) {\n return headers;\n }\n return { ...headers, [name]: value };\n}\n\nfunction readBody<Body>(\n response: DashRequest<HttpResponse>,\n as: ReadAs | undefined,\n): DashRequest<HttpResponse<Body>> {\n if (as !== 'json') {\n return response as DashRequest<HttpResponse<Body>>;\n }\n const parsed = response.then((result) => ({ ...result, body: parseJson<Body>(result) }));\n return createHostRequest(parsed, () => response.cancel());\n}\n\nfunction parseJson<Body>({ status, statusText, body }: HttpResponse): Body {\n try {\n return JSON.parse(body) as Body;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n throw new HostError('failed', `The response (${status} ${statusText}) isn't JSON: ${message}`);\n }\n}\n","import type { HttpMethods } from './http';\nimport * as http from './http';\n\nexport { http };\nexport type {\n HttpDownloadRequest,\n HttpDownloadResponse,\n HttpMethod,\n HttpReadOptions,\n HttpRequest,\n HttpRequestBody,\n HttpResponse,\n HttpUploadFile,\n HttpUploadRequest,\n} from './http';\n\nexport type NetworkMethods = HttpMethods;\n","import type { CallOptions, DashRequest } from '../call';\nimport { call } from '../call';\n\n// A dot's own key-value cache, apart from its files. It holds up to 64 MB of JSON values, each kept\n// until removed or until its `ttl` runs out.\n\nexport type CacheValue = string | number | boolean | CacheValue[] | { [key: string]: CacheValue };\n\nexport interface CacheMethods {\n 'dash.storage.cache.get': { params: { key: string }; result: CacheValue | null };\n 'dash.storage.cache.set': {\n params: { key: string; value: CacheValue; ttl?: number | undefined };\n result: void;\n };\n 'dash.storage.cache.remove': { params: { key: string }; result: void };\n 'dash.storage.cache.exists': { params: { key: string }; result: boolean };\n 'dash.storage.cache.keys': { params: Record<string, never>; result: string[] };\n 'dash.storage.cache.clear': { params: Record<string, never>; result: void };\n}\n\nexport interface CacheSetOptions {\n // How many seconds the entry lasts. Without it, or with 0 or less, it lasts until removed.\n ttl?: number | undefined;\n}\n\n// Resolves with null for a missing or expired key.\nexport function get<Value extends CacheValue = CacheValue>(\n key: string,\n callOptions?: CallOptions,\n): DashRequest<Value | null> {\n return call('dash.storage.cache.get', { key }, callOptions) as DashRequest<Value | null>;\n}\n\nexport function set(\n key: string,\n value: CacheValue,\n options: CacheSetOptions = {},\n callOptions?: CallOptions,\n): DashRequest<void> {\n return call('dash.storage.cache.set', { key, value, ...options }, callOptions);\n}\n\nexport function remove(key: string, callOptions?: CallOptions): DashRequest<void> {\n return call('dash.storage.cache.remove', { key }, callOptions);\n}\n\nexport function exists(key: string, callOptions?: CallOptions): DashRequest<boolean> {\n return call('dash.storage.cache.exists', { key }, callOptions);\n}\n\n// The keys, sorted.\nexport function keys(callOptions?: CallOptions): DashRequest<string[]> {\n return call('dash.storage.cache.keys', {}, callOptions);\n}\n\nexport function clear(callOptions?: CallOptions): DashRequest<void> {\n return call('dash.storage.cache.clear', {}, callOptions);\n}\n","import type { CallOptions, DashRequest } from '../call';\nimport { call } from '../call';\nimport type { DotFile } from '../files';\nimport { fileId } from '../files';\n\n// A dot's own files, in a folder no other dot sees. Paths are relative to it, such as\n// \"receipts/42.pdf\", and '' is the folder itself.\n\nexport interface FileEntry {\n name: string;\n path: string;\n size: number;\n kind: 'file' | 'folder';\n modifiedAt: number;\n contentType?: string;\n}\n\nexport type FileEncoding = 'text' | 'base64';\n\nexport interface StorageUsage {\n used: number;\n quota: number;\n}\n\nexport interface FileMethods {\n 'dash.storage.file.read': { params: { path: string; as?: FileEncoding }; result: string };\n 'dash.storage.file.write': {\n params: { path: string; data: string; as?: FileEncoding; append?: boolean };\n result: FileEntry;\n };\n 'dash.storage.file.stat': { params: { path: string }; result: FileEntry | null };\n 'dash.storage.file.list': { params: { path: string; recursive?: boolean }; result: FileEntry[] };\n 'dash.storage.file.createFolder': { params: { path: string }; result: FileEntry };\n 'dash.storage.file.move': {\n params: { from: string; to: string; overwrite?: boolean };\n result: FileEntry;\n };\n 'dash.storage.file.copy': {\n params: { from: string; to: string; overwrite?: boolean };\n result: FileEntry;\n };\n 'dash.storage.file.remove': { params: { path: string; recursive?: boolean }; result: void };\n 'dash.storage.file.save': {\n params: { file: string; path: string; overwrite?: boolean };\n result: FileEntry;\n };\n 'dash.storage.file.open': { params: { path: string }; result: DotFile };\n 'dash.storage.file.usage': { params: Record<string, never>; result: StorageUsage };\n}\n\nexport interface ReadOptions {\n as?: FileEncoding;\n}\n\nexport interface WriteOptions {\n as?: FileEncoding;\n append?: boolean;\n}\n\nexport interface ReplaceOptions {\n overwrite?: boolean;\n}\n\n// Reads a file of up to 5 MB.\nexport function read(\n path: string,\n options: ReadOptions = {},\n callOptions?: CallOptions,\n): DashRequest<string> {\n return call('dash.storage.file.read', { path, ...options }, callOptions);\n}\n\n// Creates any missing folders above the file.\nexport function write(\n path: string,\n data: string,\n options: WriteOptions = {},\n callOptions?: CallOptions,\n): DashRequest<FileEntry> {\n return call('dash.storage.file.write', { path, data, ...options }, callOptions);\n}\n\nexport function stat(path: string, callOptions?: CallOptions): DashRequest<FileEntry | null> {\n return call('dash.storage.file.stat', { path }, callOptions);\n}\n\n// Sorted by path.\nexport function list(\n path = '',\n options: { recursive?: boolean } = {},\n callOptions?: CallOptions,\n): DashRequest<FileEntry[]> {\n return call('dash.storage.file.list', { path, ...options }, callOptions);\n}\n\nexport function createFolder(path: string, callOptions?: CallOptions): DashRequest<FileEntry> {\n return call('dash.storage.file.createFolder', { path }, callOptions);\n}\n\nexport function move(\n from: string,\n to: string,\n options: ReplaceOptions = {},\n callOptions?: CallOptions,\n): DashRequest<FileEntry> {\n return call('dash.storage.file.move', { from, to, ...options }, callOptions);\n}\n\nexport function copy(\n from: string,\n to: string,\n options: ReplaceOptions = {},\n callOptions?: CallOptions,\n): DashRequest<FileEntry> {\n return call('dash.storage.file.copy', { from, to, ...options }, callOptions);\n}\n\n// Removing a folder that isn't empty needs `recursive`.\nexport function remove(\n path: string,\n options: { recursive?: boolean } = {},\n callOptions?: CallOptions,\n): DashRequest<void> {\n return call('dash.storage.file.remove', { path, ...options }, callOptions);\n}\n\n// Keeps a temporary file, such as a download, at `path`.\nexport function save(\n file: DotFile | string,\n path: string,\n options: ReplaceOptions = {},\n callOptions?: CallOptions,\n): DashRequest<FileEntry> {\n return call('dash.storage.file.save', { file: fileId(file), path, ...options }, callOptions);\n}\n\n// A stored file as a DotFile, to show with its `url` or send with `http.upload`.\nexport function open(path: string, callOptions?: CallOptions): DashRequest<DotFile> {\n return call('dash.storage.file.open', { path }, callOptions);\n}\n\nexport function usage(callOptions?: CallOptions): DashRequest<StorageUsage> {\n return call('dash.storage.file.usage', {}, callOptions);\n}\n","import type { CallOptions, DashRequest } from '../call';\nimport { call } from '../call';\n\n// A dot's secrets, such as tokens its own API gives the person. Holds up to 8 strings of up to 4 KB\n// each, encrypted with a key that never leaves the device. Don't keep the dot's own API keys here:\n// they would ship in its bundle, which anyone can read.\n\nexport interface SecretMethods {\n 'dash.storage.secret.get': { params: { key: string }; result: string | null };\n 'dash.storage.secret.set': { params: { key: string; value: string }; result: void };\n 'dash.storage.secret.remove': { params: { key: string }; result: void };\n 'dash.storage.secret.clear': { params: Record<string, never>; result: void };\n}\n\nexport function get(key: string, callOptions?: CallOptions): DashRequest<string | null> {\n return call('dash.storage.secret.get', { key }, callOptions);\n}\n\nexport function set(key: string, value: string, callOptions?: CallOptions): DashRequest<void> {\n return call('dash.storage.secret.set', { key, value }, callOptions);\n}\n\nexport function remove(key: string, callOptions?: CallOptions): DashRequest<void> {\n return call('dash.storage.secret.remove', { key }, callOptions);\n}\n\nexport function clear(callOptions?: CallOptions): DashRequest<void> {\n return call('dash.storage.secret.clear', {}, callOptions);\n}\n","// A dot's own data, kept on this device for the signed-in Dash user only. It's never backed up or\n// moved to a new phone, and another user who signs in sees none of it. Keep what matters on the\n// dot's server, and treat this as a copy you can fetch again.\n\nimport type { CacheMethods } from './cache';\nimport * as cache from './cache';\nimport type { FileMethods } from './file';\nimport * as file from './file';\nimport type { SecretMethods } from './secret';\nimport * as secret from './secret';\n\nexport { cache, file, secret };\nexport type { CacheSetOptions, CacheValue } from './cache';\nexport type {\n FileEncoding,\n FileEntry,\n ReadOptions,\n ReplaceOptions,\n StorageUsage,\n WriteOptions,\n} from './file';\n\nexport type StorageMethods = FileMethods & CacheMethods & SecretMethods;\n","import type { CallOptions, DashRequest } from '../call';\nimport { call } from '../call';\n\nexport interface ClipboardMethods {\n 'dash.system.copyText': { params: { text: string }; result: void };\n}\n\nexport function copyText(text: string, callOptions?: CallOptions): DashRequest<void> {\n return call('dash.system.copyText', { text }, callOptions);\n}\n","import type { CallOptions, DashRequest } from '../call';\nimport { call } from '../call';\n\nexport interface DelayMethods {\n 'dash.system.delay': { params: { milliseconds: number }; result: void };\n}\n\n// Resolves after `milliseconds`. The host keeps the time, since a dot's logic has no timers.\nexport function delay(milliseconds: number, callOptions?: CallOptions): DashRequest<void> {\n return call('dash.system.delay', { milliseconds }, callOptions);\n}\n","import type { CallOptions, DashRequest } from '../call';\nimport { call } from '../call';\n\nexport type VibrationStyle = 'light' | 'medium' | 'heavy' | 'success' | 'warning' | 'error';\n\nexport interface VibrateOptions {\n // Defaults to `medium`.\n style?: VibrationStyle | undefined;\n}\n\nexport interface HapticsMethods {\n 'dash.system.vibrate': { params: VibrateOptions; result: void };\n}\n\n// Plays a short vibration. Resolves once it's done.\nexport function vibrate(\n options: VibrateOptions = {},\n callOptions?: CallOptions,\n): DashRequest<void> {\n return call('dash.system.vibrate', { style: options.style ?? 'medium' }, callOptions);\n}\n","import type { CallOptions, DashRequest } from '../call';\nimport { call } from '../call';\n\nexport interface OpenUrlMethods {\n 'dash.system.openUrl': { params: { url: string }; result: void };\n}\n\n// Opens an https address in the device's browser. Any other address rejects with `invalid`.\nexport function openUrl(url: string, callOptions?: CallOptions): DashRequest<void> {\n return call('dash.system.openUrl', { url }, callOptions);\n}\n","import type { CallOptions, DashRequest } from '../call';\nimport { call } from '../call';\nimport type { DotFile } from '../files';\nimport { fileId } from '../files';\n\n// Give at least one of `text`, `url` and `file`.\nexport interface ShareOptions {\n // A subject, for apps that use one, such as email.\n title?: string;\n text?: string;\n url?: string;\n file?: DotFile | string;\n}\n\nexport interface ShareMethods {\n 'dash.system.share': {\n params: { title?: string; text?: string; url?: string; file?: string };\n result: void;\n };\n}\n\n// Opens the device's share sheet. Resolves once it shows.\nexport function share(options: ShareOptions, callOptions?: CallOptions): DashRequest<void> {\n const { file, ...rest } = options;\n if (file === undefined) {\n return call('dash.system.share', rest, callOptions);\n }\n return call('dash.system.share', { ...rest, file: fileId(file) }, callOptions);\n}\n","import type { CallOptions, DashRequest } from '../call';\nimport { call } from '../call';\n\nexport type TorchState = 'on' | 'off';\n\nexport interface TorchMethods {\n 'dash.system.torch': { params: { state: TorchState }; result: void };\n}\n\n// Turns the torch on or off. Rejects with `unsupported` on a device without one.\nexport function torch(state: TorchState, callOptions?: CallOptions): DashRequest<void> {\n return call('dash.system.torch', { state }, callOptions);\n}\n","import type { ClipboardMethods } from './clipboard';\nimport type { DelayMethods } from './delay';\nimport type { HapticsMethods } from './haptics';\nimport type { OpenUrlMethods } from './open-url';\nimport type { ShareMethods } from './share';\nimport type { TorchMethods } from './torch';\n\nexport { copyText } from './clipboard';\nexport { delay } from './delay';\nexport { vibrate } from './haptics';\nexport { openUrl } from './open-url';\nexport { share } from './share';\nexport { torch } from './torch';\nexport type { VibrateOptions, VibrationStyle } from './haptics';\nexport type { ShareOptions } from './share';\nexport type { TorchState } from './torch';\n\nexport type SystemMethods = ClipboardMethods &\n DelayMethods &\n HapticsMethods &\n OpenUrlMethods &\n ShareMethods &\n TorchMethods;\n","import type { CallOptions, DashRequest } from '../call';\nimport { call } from '../call';\n\nexport interface AlertAction {\n id: string;\n label: string;\n // `cancel` dismisses the alert. `destructive` marks something that can't be undone.\n role?: 'default' | 'cancel' | 'destructive' | undefined;\n}\n\nexport interface AlertOptions {\n title: string;\n message?: string | undefined;\n // Defaults to one OK button.\n actions?: AlertAction[] | undefined;\n}\n\nexport interface AlertResult {\n // The `id` of the action the person chose.\n action: string;\n}\n\nexport interface DialogMethods {\n 'dash.ui.alert': { params: AlertOptions; result: AlertResult };\n}\n\n// Shows a native alert. Resolves with the action the person chose.\nexport function alert(options: AlertOptions, callOptions?: CallOptions): DashRequest<AlertResult> {\n const actions = options.actions ?? [{ id: 'ok', label: 'OK' }];\n return call('dash.ui.alert', { ...options, actions }, callOptions);\n}\n","import type { DialogMethods } from './dialogs';\n\nexport { alert } from './dialogs';\nexport type { AlertAction, AlertOptions, AlertResult } from './dialogs';\n\nexport type UIMethods = DialogMethods;\n","import type { DashRequest } from './call';\n\n// A copy of `group`, such as `dash`, that passes each request it starts to `track`.\nexport function tracked<Group extends object>(\n group: Group,\n track: (request: DashRequest<unknown>) => void,\n): Group {\n const copy: Record<string, unknown> = {};\n for (const [name, member] of Object.entries(group)) {\n if (typeof member === 'function') {\n const start = member as (...args: unknown[]) => DashRequest<unknown>;\n copy[name] = (...args: unknown[]) => {\n const request = start(...args);\n track(request);\n return request;\n };\n } else {\n copy[name] = tracked(member as object, track);\n }\n }\n return copy as Group;\n}\n","import * as network from './network';\nimport * as storage from './storage';\nimport * as system from './system';\nimport * as ui from './ui';\n\n// Dash's features for a dot's logic, in groups: `dash.ui.alert(...)`, `dash.system.torch(...)`,\n// `dash.network.http.request(...)`.\nexport const dash = { ui, system, network, storage };\n\nexport type Dash = typeof dash;\n\nexport { tracked } from './tracked';\n\nexport { HostError } from '@monimesl/dot-core';\nexport type { HostErrorCode } from '@monimesl/dot-core';\nexport type { CallOptions, DashRequest } from './call';\nexport type { DashMethod, DashMethods } from './methods';\nexport type {\n CacheSetOptions,\n CacheValue,\n FileEncoding,\n FileEntry,\n ReadOptions,\n ReplaceOptions,\n StorageMethods,\n StorageUsage,\n WriteOptions,\n} from './storage';\nexport type { DotFile } from './files';\nexport type {\n HttpDownloadRequest,\n HttpDownloadResponse,\n HttpMethod,\n HttpReadOptions,\n HttpRequest,\n HttpRequestBody,\n HttpResponse,\n HttpUploadFile,\n HttpUploadRequest,\n NetworkMethods,\n} from './network';\nexport type {\n ShareOptions,\n SystemMethods,\n TorchState,\n VibrateOptions,\n VibrationStyle,\n} from './system';\nexport type { AlertAction, AlertOptions, AlertResult, UIMethods } from './ui';\n"],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ //#region \0rolldown/runtime.js
2
+ var __defProp = Object.defineProperty;
3
+ var __exportAll = (all, no_symbols) => {
4
+ let target = {};
5
+ for (var name in all) __defProp(target, name, {
6
+ get: all[name],
7
+ enumerable: true
8
+ });
9
+ if (!no_symbols) __defProp(target, Symbol.toStringTag, { value: "Module" });
10
+ return target;
11
+ };
12
+ //#endregion
13
+ export { __exportAll as t };
package/package.json ADDED
@@ -0,0 +1,46 @@
1
+ {
2
+ "name": "@monimesl/dot-dash",
3
+ "version": "0.1.0-alpha.10",
4
+ "description": "Dash features for dots: native UI, system and more, called from the service",
5
+ "type": "module",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/monime-lab/dot.git",
9
+ "directory": "packages/dash"
10
+ },
11
+ "sideEffects": false,
12
+ "files": [
13
+ "dist"
14
+ ],
15
+ "exports": {
16
+ ".": {
17
+ "@monimesl/dot-source": "./src/index.ts",
18
+ "types": "./dist/index.d.ts",
19
+ "import": "./dist/index.js",
20
+ "default": "./dist/index.js"
21
+ },
22
+ "./package.json": "./package.json"
23
+ },
24
+ "main": "./dist/index.js",
25
+ "types": "./dist/index.d.ts",
26
+ "dependencies": {
27
+ "@monimesl/dot-core": "0.1.0-alpha.10"
28
+ },
29
+ "devDependencies": {
30
+ "publint": "^0.3.24",
31
+ "rimraf": "^6.1.3",
32
+ "tsdown": "^0.23.0",
33
+ "typescript": "^5.9.3",
34
+ "vitest": "^5.0.1"
35
+ },
36
+ "publishConfig": {
37
+ "access": "public"
38
+ },
39
+ "scripts": {
40
+ "build": "tsdown",
41
+ "dev": "tsdown --watch",
42
+ "typecheck": "tsc --noEmit -p tsconfig.json",
43
+ "test": "vitest run",
44
+ "clean": "rimraf dist *.tsbuildinfo"
45
+ }
46
+ }