silosdk 0.0.8 → 0.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -0
- package/dist/media.cjs +33 -1
- package/dist/media.d.cts +4 -1
- package/dist/media.d.mts +4 -1
- package/dist/media.mjs +33 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -223,6 +223,18 @@ const { data: uri } = useQuery(media.queryOptions(post.coverImage))
|
|
|
223
223
|
`media.queryOptions()` returns `string | null`. It returns `null` when the ref is
|
|
224
224
|
empty, invalid, unknown, or missing on disk.
|
|
225
225
|
|
|
226
|
+
Delete a media ref when your app no longer stores it:
|
|
227
|
+
|
|
228
|
+
```tsx
|
|
229
|
+
const deleteMedia = useMutation(media.deleteMutationOptions({ queryClient }))
|
|
230
|
+
|
|
231
|
+
await deleteMedia.mutateAsync(coverImage)
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
Deletion removes Silo's copied file and media mapping only. Remove the ref from
|
|
235
|
+
your own source rows or settings separately. Invalid or unknown refs are safe and
|
|
236
|
+
return `false`.
|
|
237
|
+
|
|
226
238
|
## API Shape
|
|
227
239
|
|
|
228
240
|
Silo exposes definition objects and option factories:
|
|
@@ -234,6 +246,7 @@ useQuery(theme.queryOptions())
|
|
|
234
246
|
useMutation(theme.mutationOptions({ queryClient }))
|
|
235
247
|
useQuery(media.queryOptions(ref))
|
|
236
248
|
useMutation(media.mutationOptions({ queryClient }))
|
|
249
|
+
useMutation(media.deleteMutationOptions({ queryClient }))
|
|
237
250
|
```
|
|
238
251
|
|
|
239
252
|
There is no Silo provider and no Silo hook wrapper API.
|
package/dist/media.cjs
CHANGED
|
@@ -25,6 +25,23 @@ const media = {
|
|
|
25
25
|
return imported.ref;
|
|
26
26
|
}
|
|
27
27
|
});
|
|
28
|
+
},
|
|
29
|
+
delete(ref) {
|
|
30
|
+
return deleteMedia(ref);
|
|
31
|
+
},
|
|
32
|
+
deleteMutationOptions(options = {}) {
|
|
33
|
+
return (0, __tanstack_react_query.mutationOptions)({
|
|
34
|
+
mutationKey: [
|
|
35
|
+
"silo",
|
|
36
|
+
"media",
|
|
37
|
+
"delete"
|
|
38
|
+
],
|
|
39
|
+
mutationFn: async (ref) => {
|
|
40
|
+
const deleted = await deleteMedia(ref);
|
|
41
|
+
if (isMediaRef(ref)) options.queryClient?.setQueryData(mediaQueryKey(ref), null);
|
|
42
|
+
return deleted;
|
|
43
|
+
}
|
|
44
|
+
});
|
|
28
45
|
}
|
|
29
46
|
};
|
|
30
47
|
function isMediaRef(value) {
|
|
@@ -71,10 +88,22 @@ async function importMedia(input) {
|
|
|
71
88
|
}
|
|
72
89
|
function resolveMediaUri(ref) {
|
|
73
90
|
if (!isMediaRef(ref)) return null;
|
|
74
|
-
const row =
|
|
91
|
+
const row = getMediaFile(ref);
|
|
75
92
|
if (!row) return null;
|
|
76
93
|
return new expo_file_system.File(row.uri).exists ? row.uri : null;
|
|
77
94
|
}
|
|
95
|
+
async function deleteMedia(ref) {
|
|
96
|
+
if (!isMediaRef(ref)) return false;
|
|
97
|
+
const row = getMediaFile(ref);
|
|
98
|
+
if (!row) return false;
|
|
99
|
+
const file = new expo_file_system.File(row.uri);
|
|
100
|
+
if (file.exists) await file.delete();
|
|
101
|
+
deleteMediaFileRow(ref);
|
|
102
|
+
return true;
|
|
103
|
+
}
|
|
104
|
+
function getMediaFile(ref) {
|
|
105
|
+
return getDatabase().getFirstSync(`SELECT ref, uri FROM media_files WHERE ref = ?`, [ref]);
|
|
106
|
+
}
|
|
78
107
|
function createMediaRef(kind, id) {
|
|
79
108
|
return `media://silo/${kindDirectoryName(kind)}/${id}`;
|
|
80
109
|
}
|
|
@@ -129,6 +158,9 @@ function insertMediaFile(file) {
|
|
|
129
158
|
JSON.stringify(file.data)
|
|
130
159
|
]);
|
|
131
160
|
}
|
|
161
|
+
function deleteMediaFileRow(ref) {
|
|
162
|
+
getDatabase().runSync(`DELETE FROM media_files WHERE ref = ?`, [ref]);
|
|
163
|
+
}
|
|
132
164
|
|
|
133
165
|
//#endregion
|
|
134
166
|
exports.isMediaRef = isMediaRef;
|
package/dist/media.d.cts
CHANGED
|
@@ -16,6 +16,7 @@ type MediaImportInput = {
|
|
|
16
16
|
mimeType?: string | null;
|
|
17
17
|
data?: MediaData;
|
|
18
18
|
};
|
|
19
|
+
type MediaDeleteInput = MediaRef | string | null | undefined;
|
|
19
20
|
type MediaQueryKey = readonly ['silo', 'media', MediaRef | string | null];
|
|
20
21
|
type MediaMutationOptions = {
|
|
21
22
|
queryClient?: QueryClient;
|
|
@@ -23,7 +24,9 @@ type MediaMutationOptions = {
|
|
|
23
24
|
declare const media: {
|
|
24
25
|
queryOptions(ref: MediaRef | string | null | undefined): UseQueryOptions<string | null, Error, string | null, MediaQueryKey>;
|
|
25
26
|
mutationOptions(options?: MediaMutationOptions): UseMutationOptions<MediaRef, Error, MediaImportInput>;
|
|
27
|
+
delete(ref: MediaDeleteInput): Promise<boolean>;
|
|
28
|
+
deleteMutationOptions(options?: MediaMutationOptions): UseMutationOptions<boolean, Error, MediaDeleteInput>;
|
|
26
29
|
};
|
|
27
30
|
declare function isMediaRef(value: unknown): value is MediaRef;
|
|
28
31
|
//#endregion
|
|
29
|
-
export { MediaData, MediaImportInput, MediaJson, MediaKind, MediaMutationOptions, MediaQueryKey, MediaRef, isMediaRef, media };
|
|
32
|
+
export { MediaData, MediaDeleteInput, MediaImportInput, MediaJson, MediaKind, MediaMutationOptions, MediaQueryKey, MediaRef, isMediaRef, media };
|
package/dist/media.d.mts
CHANGED
|
@@ -16,6 +16,7 @@ type MediaImportInput = {
|
|
|
16
16
|
mimeType?: string | null;
|
|
17
17
|
data?: MediaData;
|
|
18
18
|
};
|
|
19
|
+
type MediaDeleteInput = MediaRef | string | null | undefined;
|
|
19
20
|
type MediaQueryKey = readonly ['silo', 'media', MediaRef | string | null];
|
|
20
21
|
type MediaMutationOptions = {
|
|
21
22
|
queryClient?: QueryClient;
|
|
@@ -23,7 +24,9 @@ type MediaMutationOptions = {
|
|
|
23
24
|
declare const media: {
|
|
24
25
|
queryOptions(ref: MediaRef | string | null | undefined): UseQueryOptions<string | null, Error, string | null, MediaQueryKey>;
|
|
25
26
|
mutationOptions(options?: MediaMutationOptions): UseMutationOptions<MediaRef, Error, MediaImportInput>;
|
|
27
|
+
delete(ref: MediaDeleteInput): Promise<boolean>;
|
|
28
|
+
deleteMutationOptions(options?: MediaMutationOptions): UseMutationOptions<boolean, Error, MediaDeleteInput>;
|
|
26
29
|
};
|
|
27
30
|
declare function isMediaRef(value: unknown): value is MediaRef;
|
|
28
31
|
//#endregion
|
|
29
|
-
export { MediaData, MediaImportInput, MediaJson, MediaKind, MediaMutationOptions, MediaQueryKey, MediaRef, isMediaRef, media };
|
|
32
|
+
export { MediaData, MediaDeleteInput, MediaImportInput, MediaJson, MediaKind, MediaMutationOptions, MediaQueryKey, MediaRef, isMediaRef, media };
|
package/dist/media.mjs
CHANGED
|
@@ -24,6 +24,23 @@ const media = {
|
|
|
24
24
|
return imported.ref;
|
|
25
25
|
}
|
|
26
26
|
});
|
|
27
|
+
},
|
|
28
|
+
delete(ref) {
|
|
29
|
+
return deleteMedia(ref);
|
|
30
|
+
},
|
|
31
|
+
deleteMutationOptions(options = {}) {
|
|
32
|
+
return mutationOptions({
|
|
33
|
+
mutationKey: [
|
|
34
|
+
"silo",
|
|
35
|
+
"media",
|
|
36
|
+
"delete"
|
|
37
|
+
],
|
|
38
|
+
mutationFn: async (ref) => {
|
|
39
|
+
const deleted = await deleteMedia(ref);
|
|
40
|
+
if (isMediaRef(ref)) options.queryClient?.setQueryData(mediaQueryKey(ref), null);
|
|
41
|
+
return deleted;
|
|
42
|
+
}
|
|
43
|
+
});
|
|
27
44
|
}
|
|
28
45
|
};
|
|
29
46
|
function isMediaRef(value) {
|
|
@@ -70,10 +87,22 @@ async function importMedia(input) {
|
|
|
70
87
|
}
|
|
71
88
|
function resolveMediaUri(ref) {
|
|
72
89
|
if (!isMediaRef(ref)) return null;
|
|
73
|
-
const row =
|
|
90
|
+
const row = getMediaFile(ref);
|
|
74
91
|
if (!row) return null;
|
|
75
92
|
return new File(row.uri).exists ? row.uri : null;
|
|
76
93
|
}
|
|
94
|
+
async function deleteMedia(ref) {
|
|
95
|
+
if (!isMediaRef(ref)) return false;
|
|
96
|
+
const row = getMediaFile(ref);
|
|
97
|
+
if (!row) return false;
|
|
98
|
+
const file = new File(row.uri);
|
|
99
|
+
if (file.exists) await file.delete();
|
|
100
|
+
deleteMediaFileRow(ref);
|
|
101
|
+
return true;
|
|
102
|
+
}
|
|
103
|
+
function getMediaFile(ref) {
|
|
104
|
+
return getDatabase().getFirstSync(`SELECT ref, uri FROM media_files WHERE ref = ?`, [ref]);
|
|
105
|
+
}
|
|
77
106
|
function createMediaRef(kind, id) {
|
|
78
107
|
return `media://silo/${kindDirectoryName(kind)}/${id}`;
|
|
79
108
|
}
|
|
@@ -128,6 +157,9 @@ function insertMediaFile(file) {
|
|
|
128
157
|
JSON.stringify(file.data)
|
|
129
158
|
]);
|
|
130
159
|
}
|
|
160
|
+
function deleteMediaFileRow(ref) {
|
|
161
|
+
getDatabase().runSync(`DELETE FROM media_files WHERE ref = ?`, [ref]);
|
|
162
|
+
}
|
|
131
163
|
|
|
132
164
|
//#endregion
|
|
133
165
|
export { isMediaRef, media };
|