@capacitor/filesystem 5.1.2-nightly-20230808T150539.0 → 5.1.2
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 +10 -9
- package/android/src/main/java/com/capacitorjs/plugins/filesystem/FilesystemPlugin.java +4 -0
- package/dist/docs.json +26 -6
- package/dist/esm/definitions.d.ts +14 -3
- package/dist/esm/definitions.js.map +1 -1
- package/dist/esm/web.js +15 -13
- package/dist/esm/web.js.map +1 -1
- package/dist/plugin.cjs.js +15 -13
- package/dist/plugin.cjs.js.map +1 -1
- package/dist/plugin.js +15 -13
- package/dist/plugin.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -387,9 +387,9 @@ Add a listener to file download progress events.
|
|
|
387
387
|
|
|
388
388
|
#### ReadFileResult
|
|
389
389
|
|
|
390
|
-
| Prop | Type
|
|
391
|
-
| ---------- |
|
|
392
|
-
| **`data`** | <code>string</code> | The
|
|
390
|
+
| Prop | Type | Description | Since |
|
|
391
|
+
| ---------- | --------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | ----- |
|
|
392
|
+
| **`data`** | <code>string \| Blob</code> | The representation of the data contained in the file Note: Blob is only available on Web. On native, the data is returned as a string. | 1.0.0 |
|
|
393
393
|
|
|
394
394
|
|
|
395
395
|
#### ReadFileOptions
|
|
@@ -413,7 +413,7 @@ Add a listener to file download progress events.
|
|
|
413
413
|
| Prop | Type | Description | Default | Since |
|
|
414
414
|
| --------------- | ----------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------ | ----- |
|
|
415
415
|
| **`path`** | <code>string</code> | The path of the file to write | | 1.0.0 |
|
|
416
|
-
| **`data`** | <code>string</code>
|
|
416
|
+
| **`data`** | <code>string \| Blob</code> | The data to write Note: Blob data is only supported on Web. | | 1.0.0 |
|
|
417
417
|
| **`directory`** | <code><a href="#directory">Directory</a></code> | The <a href="#directory">`Directory`</a> to store the file in | | 1.0.0 |
|
|
418
418
|
| **`encoding`** | <code><a href="#encoding">Encoding</a></code> | The encoding to write the file in. If not provided, data is written as base64 encoded. Pass <a href="#encoding">Encoding.UTF8</a> to write data as string | | 1.0.0 |
|
|
419
419
|
| **`recursive`** | <code>boolean</code> | Whether to create any missing parent directories. | <code>false</code> | 1.0.0 |
|
|
@@ -550,11 +550,12 @@ Add a listener to file download progress events.
|
|
|
550
550
|
|
|
551
551
|
#### DownloadFileOptions
|
|
552
552
|
|
|
553
|
-
| Prop | Type | Description | Since |
|
|
554
|
-
| --------------- | ----------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----- |
|
|
555
|
-
| **`path`** | <code>string</code> | The path the downloaded file should be moved to. | 5.1.0 |
|
|
556
|
-
| **`directory`** | <code><a href="#directory">Directory</a></code> | The directory to write the file to. If this option is used, filePath can be a relative path rather than absolute. The default is the `DATA` directory. | 5.1.0 |
|
|
557
|
-
| **`progress`** | <code>boolean</code> | An optional listener function to receive downloaded progress events. If this option is used, progress event should be dispatched on every chunk received. Chunks are throttled to every 100ms on Android/iOS to avoid slowdowns. | 5.1.0 |
|
|
553
|
+
| Prop | Type | Description | Default | Since |
|
|
554
|
+
| --------------- | ----------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------ | ----- |
|
|
555
|
+
| **`path`** | <code>string</code> | The path the downloaded file should be moved to. | | 5.1.0 |
|
|
556
|
+
| **`directory`** | <code><a href="#directory">Directory</a></code> | The directory to write the file to. If this option is used, filePath can be a relative path rather than absolute. The default is the `DATA` directory. | | 5.1.0 |
|
|
557
|
+
| **`progress`** | <code>boolean</code> | An optional listener function to receive downloaded progress events. If this option is used, progress event should be dispatched on every chunk received. Chunks are throttled to every 100ms on Android/iOS to avoid slowdowns. | | 5.1.0 |
|
|
558
|
+
| **`recursive`** | <code>boolean</code> | Whether to create any missing parent directories. | <code>false</code> | 5.1.2 |
|
|
558
559
|
|
|
559
560
|
|
|
560
561
|
#### PluginListenerHandle
|
|
@@ -399,6 +399,10 @@ public class FilesystemPlugin extends Plugin {
|
|
|
399
399
|
};
|
|
400
400
|
|
|
401
401
|
JSObject response = implementation.downloadFile(call, bridge, emitter);
|
|
402
|
+
// update mediaStore index only if file was written to external storage
|
|
403
|
+
if (isPublicDirectory(directory)) {
|
|
404
|
+
MediaScannerConnection.scanFile(getContext(), new String[] { response.getString("path") }, null, null);
|
|
405
|
+
}
|
|
402
406
|
call.resolve(response);
|
|
403
407
|
}
|
|
404
408
|
} catch (Exception ex) {
|
package/dist/docs.json
CHANGED
|
@@ -370,9 +370,11 @@
|
|
|
370
370
|
"name": "since"
|
|
371
371
|
}
|
|
372
372
|
],
|
|
373
|
-
"docs": "The
|
|
374
|
-
"complexTypes": [
|
|
375
|
-
|
|
373
|
+
"docs": "The representation of the data contained in the file\n\nNote: Blob is only available on Web. On native, the data is returned as a string.",
|
|
374
|
+
"complexTypes": [
|
|
375
|
+
"Blob"
|
|
376
|
+
],
|
|
377
|
+
"type": "string | Blob"
|
|
376
378
|
}
|
|
377
379
|
]
|
|
378
380
|
},
|
|
@@ -473,9 +475,11 @@
|
|
|
473
475
|
"name": "since"
|
|
474
476
|
}
|
|
475
477
|
],
|
|
476
|
-
"docs": "The data to write",
|
|
477
|
-
"complexTypes": [
|
|
478
|
-
|
|
478
|
+
"docs": "The data to write\n\nNote: Blob data is only supported on Web.",
|
|
479
|
+
"complexTypes": [
|
|
480
|
+
"Blob"
|
|
481
|
+
],
|
|
482
|
+
"type": "string | Blob"
|
|
479
483
|
},
|
|
480
484
|
{
|
|
481
485
|
"name": "directory",
|
|
@@ -1194,6 +1198,22 @@
|
|
|
1194
1198
|
"docs": "An optional listener function to receive downloaded progress events.\nIf this option is used, progress event should be dispatched on every chunk received.\nChunks are throttled to every 100ms on Android/iOS to avoid slowdowns.",
|
|
1195
1199
|
"complexTypes": [],
|
|
1196
1200
|
"type": "boolean | undefined"
|
|
1201
|
+
},
|
|
1202
|
+
{
|
|
1203
|
+
"name": "recursive",
|
|
1204
|
+
"tags": [
|
|
1205
|
+
{
|
|
1206
|
+
"text": "false",
|
|
1207
|
+
"name": "default"
|
|
1208
|
+
},
|
|
1209
|
+
{
|
|
1210
|
+
"text": "5.1.2",
|
|
1211
|
+
"name": "since"
|
|
1212
|
+
}
|
|
1213
|
+
],
|
|
1214
|
+
"docs": "Whether to create any missing parent directories.",
|
|
1215
|
+
"complexTypes": [],
|
|
1216
|
+
"type": "boolean | undefined"
|
|
1197
1217
|
}
|
|
1198
1218
|
]
|
|
1199
1219
|
},
|
|
@@ -101,9 +101,11 @@ export interface WriteFileOptions {
|
|
|
101
101
|
/**
|
|
102
102
|
* The data to write
|
|
103
103
|
*
|
|
104
|
+
* Note: Blob data is only supported on Web.
|
|
105
|
+
*
|
|
104
106
|
* @since 1.0.0
|
|
105
107
|
*/
|
|
106
|
-
data: string;
|
|
108
|
+
data: string | Blob;
|
|
107
109
|
/**
|
|
108
110
|
* The `Directory` to store the file in
|
|
109
111
|
*
|
|
@@ -307,11 +309,13 @@ export interface CopyOptions {
|
|
|
307
309
|
export declare type RenameOptions = CopyOptions;
|
|
308
310
|
export interface ReadFileResult {
|
|
309
311
|
/**
|
|
310
|
-
* The
|
|
312
|
+
* The representation of the data contained in the file
|
|
313
|
+
*
|
|
314
|
+
* Note: Blob is only available on Web. On native, the data is returned as a string.
|
|
311
315
|
*
|
|
312
316
|
* @since 1.0.0
|
|
313
317
|
*/
|
|
314
|
-
data: string;
|
|
318
|
+
data: string | Blob;
|
|
315
319
|
}
|
|
316
320
|
export interface WriteFileResult {
|
|
317
321
|
/**
|
|
@@ -440,6 +444,13 @@ export interface DownloadFileOptions extends HttpOptions {
|
|
|
440
444
|
* @since 5.1.0
|
|
441
445
|
*/
|
|
442
446
|
progress?: boolean;
|
|
447
|
+
/**
|
|
448
|
+
* Whether to create any missing parent directories.
|
|
449
|
+
*
|
|
450
|
+
* @default false
|
|
451
|
+
* @since 5.1.2
|
|
452
|
+
*/
|
|
453
|
+
recursive?: boolean;
|
|
443
454
|
}
|
|
444
455
|
export interface DownloadFileResult {
|
|
445
456
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/definitions.ts"],"names":[],"mappings":"AAUA,MAAM,CAAN,IAAY,SAqEX;AArED,WAAY,SAAS;IACnB;;;;;;;;;;;OAWG;IACH,oCAAuB,CAAA;IAEvB;;;;;;;OAOG;IACH,0BAAa,CAAA;IAEb;;;;;;;OAOG;IACH,gCAAmB,CAAA;IAEnB;;;;;;OAMG;IACH,4BAAe,CAAA;IAEf;;;;;;;;;;OAUG;IACH,kCAAqB,CAAA;IAErB;;;;;;;;;;OAUG;IACH,iDAAoC,CAAA;AACtC,CAAC,EArEW,SAAS,KAAT,SAAS,QAqEpB;AAED,MAAM,CAAN,IAAY,QAyBX;AAzBD,WAAY,QAAQ;IAClB;;;;OAIG;IACH,yBAAa,CAAA;IAEb;;;;;;OAMG;IACH,2BAAe,CAAA;IAEf;;;;;;OAMG;IACH,2BAAe,CAAA;AACjB,CAAC,EAzBW,QAAQ,KAAR,QAAQ,QAyBnB;AAglBD;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,SAAS,CAAC;AAE7C;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,QAAQ,CAAC","sourcesContent":["import type {\n HttpOptions,\n PermissionState,\n PluginListenerHandle,\n} from '@capacitor/core';\n\nexport interface PermissionStatus {\n publicStorage: PermissionState;\n}\n\nexport enum Directory {\n /**\n * The Documents directory.\n * On iOS it's the app's documents directory.\n * Use this directory to store user-generated content.\n * On Android it's the Public Documents folder, so it's accessible from other apps.\n * It's not accesible on Android 10 unless the app enables legacy External Storage\n * by adding `android:requestLegacyExternalStorage=\"true\"` in the `application` tag\n * in the `AndroidManifest.xml`.\n * On Android 11 or newer the app can only access the files/folders the app created.\n *\n * @since 1.0.0\n */\n Documents = 'DOCUMENTS',\n\n /**\n * The Data directory.\n * On iOS it will use the Documents directory.\n * On Android it's the directory holding application files.\n * Files will be deleted when the application is uninstalled.\n *\n * @since 1.0.0\n */\n Data = 'DATA',\n\n /**\n * The Library directory.\n * On iOS it will use the Library directory.\n * On Android it's the directory holding application files.\n * Files will be deleted when the application is uninstalled.\n *\n * @since 1.1.0\n */\n Library = 'LIBRARY',\n\n /**\n * The Cache directory.\n * Can be deleted in cases of low memory, so use this directory to write app-specific files.\n * that your app can re-create easily.\n *\n * @since 1.0.0\n */\n Cache = 'CACHE',\n\n /**\n * The external directory.\n * On iOS it will use the Documents directory.\n * On Android it's the directory on the primary shared/external\n * storage device where the application can place persistent files it owns.\n * These files are internal to the applications, and not typically visible\n * to the user as media.\n * Files will be deleted when the application is uninstalled.\n *\n * @since 1.0.0\n */\n External = 'EXTERNAL',\n\n /**\n * The external storage directory.\n * On iOS it will use the Documents directory.\n * On Android it's the primary shared/external storage directory.\n * It's not accesible on Android 10 unless the app enables legacy External Storage\n * by adding `android:requestLegacyExternalStorage=\"true\"` in the `application` tag\n * in the `AndroidManifest.xml`.\n * It's not accesible on Android 11 or newer.\n *\n * @since 1.0.0\n */\n ExternalStorage = 'EXTERNAL_STORAGE',\n}\n\nexport enum Encoding {\n /**\n * Eight-bit UCS Transformation Format\n *\n * @since 1.0.0\n */\n UTF8 = 'utf8',\n\n /**\n * Seven-bit ASCII, a.k.a. ISO646-US, a.k.a. the Basic Latin block of the\n * Unicode character set\n * This encoding is only supported on Android.\n *\n * @since 1.0.0\n */\n ASCII = 'ascii',\n\n /**\n * Sixteen-bit UCS Transformation Format, byte order identified by an\n * optional byte-order mark\n * This encoding is only supported on Android.\n *\n * @since 1.0.0\n */\n UTF16 = 'utf16',\n}\n\nexport interface WriteFileOptions {\n /**\n * The path of the file to write\n *\n * @since 1.0.0\n */\n path: string;\n\n /**\n * The data to write\n *\n * @since 1.0.0\n */\n data: string;\n\n /**\n * The `Directory` to store the file in\n *\n * @since 1.0.0\n */\n directory?: Directory;\n\n /**\n * The encoding to write the file in. If not provided, data\n * is written as base64 encoded.\n *\n * Pass Encoding.UTF8 to write data as string\n *\n * @since 1.0.0\n */\n encoding?: Encoding;\n\n /**\n * Whether to create any missing parent directories.\n *\n * @default false\n * @since 1.0.0\n */\n recursive?: boolean;\n}\n\nexport interface AppendFileOptions {\n /**\n * The path of the file to append\n *\n * @since 1.0.0\n */\n path: string;\n\n /**\n * The data to write\n *\n * @since 1.0.0\n */\n data: string;\n\n /**\n * The `Directory` to store the file in\n *\n * @since 1.0.0\n */\n directory?: Directory;\n\n /**\n * The encoding to write the file in. If not provided, data\n * is written as base64 encoded.\n *\n * Pass Encoding.UTF8 to write data as string\n *\n * @since 1.0.0\n */\n encoding?: Encoding;\n}\n\nexport interface ReadFileOptions {\n /**\n * The path of the file to read\n *\n * @since 1.0.0\n */\n path: string;\n\n /**\n * The `Directory` to read the file from\n *\n * @since 1.0.0\n */\n directory?: Directory;\n\n /**\n * The encoding to read the file in, if not provided, data\n * is read as binary and returned as base64 encoded.\n *\n * Pass Encoding.UTF8 to read data as string\n *\n * @since 1.0.0\n */\n encoding?: Encoding;\n}\n\nexport interface DeleteFileOptions {\n /**\n * The path of the file to delete\n *\n * @since 1.0.0\n */\n path: string;\n\n /**\n * The `Directory` to delete the file from\n *\n * @since 1.0.0\n */\n directory?: Directory;\n}\n\nexport interface MkdirOptions {\n /**\n * The path of the new directory\n *\n * @since 1.0.0\n */\n path: string;\n\n /**\n * The `Directory` to make the new directory in\n *\n * @since 1.0.0\n */\n directory?: Directory;\n\n /**\n * Whether to create any missing parent directories as well.\n *\n * @default false\n * @since 1.0.0\n */\n recursive?: boolean;\n}\n\nexport interface RmdirOptions {\n /**\n * The path of the directory to remove\n *\n * @since 1.0.0\n */\n path: string;\n\n /**\n * The `Directory` to remove the directory from\n *\n * @since 1.0.0\n */\n directory?: Directory;\n\n /**\n * Whether to recursively remove the contents of the directory\n *\n * @default false\n * @since 1.0.0\n */\n recursive?: boolean;\n}\n\nexport interface ReaddirOptions {\n /**\n * The path of the directory to read\n *\n * @since 1.0.0\n */\n path: string;\n\n /**\n * The `Directory` to list files from\n *\n * @since 1.0.0\n */\n directory?: Directory;\n}\n\nexport interface GetUriOptions {\n /**\n * The path of the file to get the URI for\n *\n * @since 1.0.0\n */\n path: string;\n\n /**\n * The `Directory` to get the file under\n *\n * @since 1.0.0\n */\n directory: Directory;\n}\n\nexport interface StatOptions {\n /**\n * The path of the file to get data about\n *\n * @since 1.0.0\n */\n path: string;\n\n /**\n * The `Directory` to get the file under\n *\n * @since 1.0.0\n */\n directory?: Directory;\n}\n\nexport interface CopyOptions {\n /**\n * The existing file or directory\n *\n * @since 1.0.0\n */\n from: string;\n\n /**\n * The destination file or directory\n *\n * @since 1.0.0\n */\n to: string;\n\n /**\n * The `Directory` containing the existing file or directory\n *\n * @since 1.0.0\n */\n directory?: Directory;\n\n /**\n * The `Directory` containing the destination file or directory. If not supplied will use the 'directory'\n * parameter as the destination\n *\n * @since 1.0.0\n */\n toDirectory?: Directory;\n}\n\nexport type RenameOptions = CopyOptions;\n\nexport interface ReadFileResult {\n /**\n * The string representation of the data contained in the file\n *\n * @since 1.0.0\n */\n data: string;\n}\n\nexport interface WriteFileResult {\n /**\n * The uri where the file was written into\n *\n * @since 1.0.0\n */\n uri: string;\n}\n\nexport interface ReaddirResult {\n /**\n * List of files and directories inside the directory\n *\n * @since 1.0.0\n */\n files: FileInfo[];\n}\n\nexport interface FileInfo {\n /**\n * Name of the file or directory.\n */\n name: string;\n /**\n * Type of the file.\n *\n * @since 4.0.0\n */\n type: 'directory' | 'file';\n\n /**\n * Size of the file in bytes.\n *\n * @since 4.0.0\n */\n size: number;\n\n /**\n * Time of creation in milliseconds.\n *\n * It's not available on Android 7 and older devices.\n *\n * @since 4.0.0\n */\n ctime?: number;\n\n /**\n * Time of last modification in milliseconds.\n *\n * @since 4.0.0\n */\n mtime: number;\n\n /**\n * The uri of the file.\n *\n * @since 4.0.0\n */\n uri: string;\n}\n\nexport interface GetUriResult {\n /**\n * The uri of the file\n *\n * @since 1.0.0\n */\n uri: string;\n}\n\nexport interface StatResult {\n /**\n * Type of the file.\n *\n * @since 1.0.0\n */\n type: 'directory' | 'file';\n\n /**\n * Size of the file in bytes.\n *\n * @since 1.0.0\n */\n size: number;\n\n /**\n * Time of creation in milliseconds.\n *\n * It's not available on Android 7 and older devices.\n *\n * @since 1.0.0\n */\n ctime?: number;\n\n /**\n * Time of last modification in milliseconds.\n *\n * @since 1.0.0\n */\n mtime: number;\n\n /**\n * The uri of the file\n *\n * @since 1.0.0\n */\n uri: string;\n}\n\nexport interface CopyResult {\n /**\n * The uri where the file was copied into\n *\n * @since 4.0.0\n */\n uri: string;\n}\n\nexport interface DownloadFileOptions extends HttpOptions {\n /**\n * The path the downloaded file should be moved to.\n *\n * @since 5.1.0\n */\n path: string;\n /**\n * The directory to write the file to.\n * If this option is used, filePath can be a relative path rather than absolute.\n * The default is the `DATA` directory.\n *\n * @since 5.1.0\n */\n directory?: Directory;\n /**\n * An optional listener function to receive downloaded progress events.\n * If this option is used, progress event should be dispatched on every chunk received.\n * Chunks are throttled to every 100ms on Android/iOS to avoid slowdowns.\n *\n * @since 5.1.0\n */\n progress?: boolean;\n}\n\nexport interface DownloadFileResult {\n /**\n * The path the file was downloaded to.\n *\n * @since 5.1.0\n */\n path?: string;\n /**\n * The blob data of the downloaded file.\n * This is only available on web.\n *\n * @since 5.1.0\n */\n blob?: Blob;\n}\nexport interface ProgressStatus {\n /**\n * The url of the file being downloaded.\n *\n * @since 5.1.0\n */\n url: string;\n /**\n * The number of bytes downloaded so far.\n *\n * @since 5.1.0\n */\n bytes: number;\n /**\n * The total number of bytes to download for this file.\n *\n * @since 5.1.0\n */\n contentLength: number;\n}\n\n/**\n * A listener function that receives progress events.\n *\n * @since 5.1.0\n */\nexport type ProgressListener = (progress: ProgressStatus) => void;\n\nexport interface FilesystemPlugin {\n /**\n * Read a file from disk\n *\n * @since 1.0.0\n */\n readFile(options: ReadFileOptions): Promise<ReadFileResult>;\n\n /**\n * Write a file to disk in the specified location on device\n *\n * @since 1.0.0\n */\n writeFile(options: WriteFileOptions): Promise<WriteFileResult>;\n\n /**\n * Append to a file on disk in the specified location on device\n *\n * @since 1.0.0\n */\n appendFile(options: AppendFileOptions): Promise<void>;\n\n /**\n * Delete a file from disk\n *\n * @since 1.0.0\n */\n deleteFile(options: DeleteFileOptions): Promise<void>;\n\n /**\n * Create a directory.\n *\n * @since 1.0.0\n */\n mkdir(options: MkdirOptions): Promise<void>;\n\n /**\n * Remove a directory\n *\n * @since 1.0.0\n */\n rmdir(options: RmdirOptions): Promise<void>;\n\n /**\n * Return a list of files from the directory (not recursive)\n *\n * @since 1.0.0\n */\n readdir(options: ReaddirOptions): Promise<ReaddirResult>;\n\n /**\n * Return full File URI for a path and directory\n *\n * @since 1.0.0\n */\n getUri(options: GetUriOptions): Promise<GetUriResult>;\n\n /**\n * Return data about a file\n *\n * @since 1.0.0\n */\n stat(options: StatOptions): Promise<StatResult>;\n\n /**\n * Rename a file or directory\n *\n * @since 1.0.0\n */\n rename(options: RenameOptions): Promise<void>;\n\n /**\n * Copy a file or directory\n *\n * @since 1.0.0\n */\n copy(options: CopyOptions): Promise<CopyResult>;\n\n /**\n * Check read/write permissions.\n * Required on Android, only when using `Directory.Documents` or\n * `Directory.ExternalStorage`.\n *\n * @since 1.0.0\n */\n checkPermissions(): Promise<PermissionStatus>;\n\n /**\n * Request read/write permissions.\n * Required on Android, only when using `Directory.Documents` or\n * `Directory.ExternalStorage`.\n *\n * @since 1.0.0\n */\n requestPermissions(): Promise<PermissionStatus>;\n\n /**\n * Perform a http request to a server and download the file to the specified destination.\n *\n * @since 5.1.0\n */\n downloadFile(options: DownloadFileOptions): Promise<DownloadFileResult>;\n\n /**\n * Add a listener to file download progress events.\n *\n * @since 5.1.0\n */\n addListener(\n eventName: 'progress',\n listenerFunc: ProgressListener,\n ): Promise<PluginListenerHandle> & PluginListenerHandle;\n}\n\n/**\n * @deprecated Use `ReadFileOptions`.\n * @since 1.0.0\n */\nexport type FileReadOptions = ReadFileOptions;\n\n/**\n * @deprecated Use `ReadFileResult`.\n * @since 1.0.0\n */\nexport type FileReadResult = ReadFileResult;\n\n/**\n * @deprecated Use `WriteFileOptions`.\n * @since 1.0.0\n */\nexport type FileWriteOptions = WriteFileOptions;\n\n/**\n * @deprecated Use `WriteFileResult`.\n * @since 1.0.0\n */\nexport type FileWriteResult = WriteFileResult;\n\n/**\n * @deprecated Use `AppendFileOptions`.\n * @since 1.0.0\n */\nexport type FileAppendOptions = AppendFileOptions;\n\n/**\n * @deprecated Use `DeleteFileOptions`.\n * @since 1.0.0\n */\nexport type FileDeleteOptions = DeleteFileOptions;\n\n/**\n * @deprecated Use `Directory`.\n * @since 1.0.0\n */\nexport const FilesystemDirectory = Directory;\n\n/**\n * @deprecated Use `Encoding`.\n * @since 1.0.0\n */\nexport const FilesystemEncoding = Encoding;\n"]}
|
|
1
|
+
{"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/definitions.ts"],"names":[],"mappings":"AAUA,MAAM,CAAN,IAAY,SAqEX;AArED,WAAY,SAAS;IACnB;;;;;;;;;;;OAWG;IACH,oCAAuB,CAAA;IAEvB;;;;;;;OAOG;IACH,0BAAa,CAAA;IAEb;;;;;;;OAOG;IACH,gCAAmB,CAAA;IAEnB;;;;;;OAMG;IACH,4BAAe,CAAA;IAEf;;;;;;;;;;OAUG;IACH,kCAAqB,CAAA;IAErB;;;;;;;;;;OAUG;IACH,iDAAoC,CAAA;AACtC,CAAC,EArEW,SAAS,KAAT,SAAS,QAqEpB;AAED,MAAM,CAAN,IAAY,QAyBX;AAzBD,WAAY,QAAQ;IAClB;;;;OAIG;IACH,yBAAa,CAAA;IAEb;;;;;;OAMG;IACH,2BAAe,CAAA;IAEf;;;;;;OAMG;IACH,2BAAe,CAAA;AACjB,CAAC,EAzBW,QAAQ,KAAR,QAAQ,QAyBnB;AA2lBD;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,SAAS,CAAC;AAE7C;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,QAAQ,CAAC","sourcesContent":["import type {\n HttpOptions,\n PermissionState,\n PluginListenerHandle,\n} from '@capacitor/core';\n\nexport interface PermissionStatus {\n publicStorage: PermissionState;\n}\n\nexport enum Directory {\n /**\n * The Documents directory.\n * On iOS it's the app's documents directory.\n * Use this directory to store user-generated content.\n * On Android it's the Public Documents folder, so it's accessible from other apps.\n * It's not accesible on Android 10 unless the app enables legacy External Storage\n * by adding `android:requestLegacyExternalStorage=\"true\"` in the `application` tag\n * in the `AndroidManifest.xml`.\n * On Android 11 or newer the app can only access the files/folders the app created.\n *\n * @since 1.0.0\n */\n Documents = 'DOCUMENTS',\n\n /**\n * The Data directory.\n * On iOS it will use the Documents directory.\n * On Android it's the directory holding application files.\n * Files will be deleted when the application is uninstalled.\n *\n * @since 1.0.0\n */\n Data = 'DATA',\n\n /**\n * The Library directory.\n * On iOS it will use the Library directory.\n * On Android it's the directory holding application files.\n * Files will be deleted when the application is uninstalled.\n *\n * @since 1.1.0\n */\n Library = 'LIBRARY',\n\n /**\n * The Cache directory.\n * Can be deleted in cases of low memory, so use this directory to write app-specific files.\n * that your app can re-create easily.\n *\n * @since 1.0.0\n */\n Cache = 'CACHE',\n\n /**\n * The external directory.\n * On iOS it will use the Documents directory.\n * On Android it's the directory on the primary shared/external\n * storage device where the application can place persistent files it owns.\n * These files are internal to the applications, and not typically visible\n * to the user as media.\n * Files will be deleted when the application is uninstalled.\n *\n * @since 1.0.0\n */\n External = 'EXTERNAL',\n\n /**\n * The external storage directory.\n * On iOS it will use the Documents directory.\n * On Android it's the primary shared/external storage directory.\n * It's not accesible on Android 10 unless the app enables legacy External Storage\n * by adding `android:requestLegacyExternalStorage=\"true\"` in the `application` tag\n * in the `AndroidManifest.xml`.\n * It's not accesible on Android 11 or newer.\n *\n * @since 1.0.0\n */\n ExternalStorage = 'EXTERNAL_STORAGE',\n}\n\nexport enum Encoding {\n /**\n * Eight-bit UCS Transformation Format\n *\n * @since 1.0.0\n */\n UTF8 = 'utf8',\n\n /**\n * Seven-bit ASCII, a.k.a. ISO646-US, a.k.a. the Basic Latin block of the\n * Unicode character set\n * This encoding is only supported on Android.\n *\n * @since 1.0.0\n */\n ASCII = 'ascii',\n\n /**\n * Sixteen-bit UCS Transformation Format, byte order identified by an\n * optional byte-order mark\n * This encoding is only supported on Android.\n *\n * @since 1.0.0\n */\n UTF16 = 'utf16',\n}\n\nexport interface WriteFileOptions {\n /**\n * The path of the file to write\n *\n * @since 1.0.0\n */\n path: string;\n\n /**\n * The data to write\n *\n * Note: Blob data is only supported on Web.\n *\n * @since 1.0.0\n */\n data: string | Blob;\n\n /**\n * The `Directory` to store the file in\n *\n * @since 1.0.0\n */\n directory?: Directory;\n\n /**\n * The encoding to write the file in. If not provided, data\n * is written as base64 encoded.\n *\n * Pass Encoding.UTF8 to write data as string\n *\n * @since 1.0.0\n */\n encoding?: Encoding;\n\n /**\n * Whether to create any missing parent directories.\n *\n * @default false\n * @since 1.0.0\n */\n recursive?: boolean;\n}\n\nexport interface AppendFileOptions {\n /**\n * The path of the file to append\n *\n * @since 1.0.0\n */\n path: string;\n\n /**\n * The data to write\n *\n * @since 1.0.0\n */\n data: string;\n\n /**\n * The `Directory` to store the file in\n *\n * @since 1.0.0\n */\n directory?: Directory;\n\n /**\n * The encoding to write the file in. If not provided, data\n * is written as base64 encoded.\n *\n * Pass Encoding.UTF8 to write data as string\n *\n * @since 1.0.0\n */\n encoding?: Encoding;\n}\n\nexport interface ReadFileOptions {\n /**\n * The path of the file to read\n *\n * @since 1.0.0\n */\n path: string;\n\n /**\n * The `Directory` to read the file from\n *\n * @since 1.0.0\n */\n directory?: Directory;\n\n /**\n * The encoding to read the file in, if not provided, data\n * is read as binary and returned as base64 encoded.\n *\n * Pass Encoding.UTF8 to read data as string\n *\n * @since 1.0.0\n */\n encoding?: Encoding;\n}\n\nexport interface DeleteFileOptions {\n /**\n * The path of the file to delete\n *\n * @since 1.0.0\n */\n path: string;\n\n /**\n * The `Directory` to delete the file from\n *\n * @since 1.0.0\n */\n directory?: Directory;\n}\n\nexport interface MkdirOptions {\n /**\n * The path of the new directory\n *\n * @since 1.0.0\n */\n path: string;\n\n /**\n * The `Directory` to make the new directory in\n *\n * @since 1.0.0\n */\n directory?: Directory;\n\n /**\n * Whether to create any missing parent directories as well.\n *\n * @default false\n * @since 1.0.0\n */\n recursive?: boolean;\n}\n\nexport interface RmdirOptions {\n /**\n * The path of the directory to remove\n *\n * @since 1.0.0\n */\n path: string;\n\n /**\n * The `Directory` to remove the directory from\n *\n * @since 1.0.0\n */\n directory?: Directory;\n\n /**\n * Whether to recursively remove the contents of the directory\n *\n * @default false\n * @since 1.0.0\n */\n recursive?: boolean;\n}\n\nexport interface ReaddirOptions {\n /**\n * The path of the directory to read\n *\n * @since 1.0.0\n */\n path: string;\n\n /**\n * The `Directory` to list files from\n *\n * @since 1.0.0\n */\n directory?: Directory;\n}\n\nexport interface GetUriOptions {\n /**\n * The path of the file to get the URI for\n *\n * @since 1.0.0\n */\n path: string;\n\n /**\n * The `Directory` to get the file under\n *\n * @since 1.0.0\n */\n directory: Directory;\n}\n\nexport interface StatOptions {\n /**\n * The path of the file to get data about\n *\n * @since 1.0.0\n */\n path: string;\n\n /**\n * The `Directory` to get the file under\n *\n * @since 1.0.0\n */\n directory?: Directory;\n}\n\nexport interface CopyOptions {\n /**\n * The existing file or directory\n *\n * @since 1.0.0\n */\n from: string;\n\n /**\n * The destination file or directory\n *\n * @since 1.0.0\n */\n to: string;\n\n /**\n * The `Directory` containing the existing file or directory\n *\n * @since 1.0.0\n */\n directory?: Directory;\n\n /**\n * The `Directory` containing the destination file or directory. If not supplied will use the 'directory'\n * parameter as the destination\n *\n * @since 1.0.0\n */\n toDirectory?: Directory;\n}\n\nexport type RenameOptions = CopyOptions;\n\nexport interface ReadFileResult {\n /**\n * The representation of the data contained in the file\n *\n * Note: Blob is only available on Web. On native, the data is returned as a string.\n *\n * @since 1.0.0\n */\n data: string | Blob;\n}\n\nexport interface WriteFileResult {\n /**\n * The uri where the file was written into\n *\n * @since 1.0.0\n */\n uri: string;\n}\n\nexport interface ReaddirResult {\n /**\n * List of files and directories inside the directory\n *\n * @since 1.0.0\n */\n files: FileInfo[];\n}\n\nexport interface FileInfo {\n /**\n * Name of the file or directory.\n */\n name: string;\n /**\n * Type of the file.\n *\n * @since 4.0.0\n */\n type: 'directory' | 'file';\n\n /**\n * Size of the file in bytes.\n *\n * @since 4.0.0\n */\n size: number;\n\n /**\n * Time of creation in milliseconds.\n *\n * It's not available on Android 7 and older devices.\n *\n * @since 4.0.0\n */\n ctime?: number;\n\n /**\n * Time of last modification in milliseconds.\n *\n * @since 4.0.0\n */\n mtime: number;\n\n /**\n * The uri of the file.\n *\n * @since 4.0.0\n */\n uri: string;\n}\n\nexport interface GetUriResult {\n /**\n * The uri of the file\n *\n * @since 1.0.0\n */\n uri: string;\n}\n\nexport interface StatResult {\n /**\n * Type of the file.\n *\n * @since 1.0.0\n */\n type: 'directory' | 'file';\n\n /**\n * Size of the file in bytes.\n *\n * @since 1.0.0\n */\n size: number;\n\n /**\n * Time of creation in milliseconds.\n *\n * It's not available on Android 7 and older devices.\n *\n * @since 1.0.0\n */\n ctime?: number;\n\n /**\n * Time of last modification in milliseconds.\n *\n * @since 1.0.0\n */\n mtime: number;\n\n /**\n * The uri of the file\n *\n * @since 1.0.0\n */\n uri: string;\n}\n\nexport interface CopyResult {\n /**\n * The uri where the file was copied into\n *\n * @since 4.0.0\n */\n uri: string;\n}\n\nexport interface DownloadFileOptions extends HttpOptions {\n /**\n * The path the downloaded file should be moved to.\n *\n * @since 5.1.0\n */\n path: string;\n /**\n * The directory to write the file to.\n * If this option is used, filePath can be a relative path rather than absolute.\n * The default is the `DATA` directory.\n *\n * @since 5.1.0\n */\n directory?: Directory;\n /**\n * An optional listener function to receive downloaded progress events.\n * If this option is used, progress event should be dispatched on every chunk received.\n * Chunks are throttled to every 100ms on Android/iOS to avoid slowdowns.\n *\n * @since 5.1.0\n */\n progress?: boolean;\n /**\n * Whether to create any missing parent directories.\n *\n * @default false\n * @since 5.1.2\n */\n recursive?: boolean;\n}\n\nexport interface DownloadFileResult {\n /**\n * The path the file was downloaded to.\n *\n * @since 5.1.0\n */\n path?: string;\n /**\n * The blob data of the downloaded file.\n * This is only available on web.\n *\n * @since 5.1.0\n */\n blob?: Blob;\n}\nexport interface ProgressStatus {\n /**\n * The url of the file being downloaded.\n *\n * @since 5.1.0\n */\n url: string;\n /**\n * The number of bytes downloaded so far.\n *\n * @since 5.1.0\n */\n bytes: number;\n /**\n * The total number of bytes to download for this file.\n *\n * @since 5.1.0\n */\n contentLength: number;\n}\n\n/**\n * A listener function that receives progress events.\n *\n * @since 5.1.0\n */\nexport type ProgressListener = (progress: ProgressStatus) => void;\n\nexport interface FilesystemPlugin {\n /**\n * Read a file from disk\n *\n * @since 1.0.0\n */\n readFile(options: ReadFileOptions): Promise<ReadFileResult>;\n\n /**\n * Write a file to disk in the specified location on device\n *\n * @since 1.0.0\n */\n writeFile(options: WriteFileOptions): Promise<WriteFileResult>;\n\n /**\n * Append to a file on disk in the specified location on device\n *\n * @since 1.0.0\n */\n appendFile(options: AppendFileOptions): Promise<void>;\n\n /**\n * Delete a file from disk\n *\n * @since 1.0.0\n */\n deleteFile(options: DeleteFileOptions): Promise<void>;\n\n /**\n * Create a directory.\n *\n * @since 1.0.0\n */\n mkdir(options: MkdirOptions): Promise<void>;\n\n /**\n * Remove a directory\n *\n * @since 1.0.0\n */\n rmdir(options: RmdirOptions): Promise<void>;\n\n /**\n * Return a list of files from the directory (not recursive)\n *\n * @since 1.0.0\n */\n readdir(options: ReaddirOptions): Promise<ReaddirResult>;\n\n /**\n * Return full File URI for a path and directory\n *\n * @since 1.0.0\n */\n getUri(options: GetUriOptions): Promise<GetUriResult>;\n\n /**\n * Return data about a file\n *\n * @since 1.0.0\n */\n stat(options: StatOptions): Promise<StatResult>;\n\n /**\n * Rename a file or directory\n *\n * @since 1.0.0\n */\n rename(options: RenameOptions): Promise<void>;\n\n /**\n * Copy a file or directory\n *\n * @since 1.0.0\n */\n copy(options: CopyOptions): Promise<CopyResult>;\n\n /**\n * Check read/write permissions.\n * Required on Android, only when using `Directory.Documents` or\n * `Directory.ExternalStorage`.\n *\n * @since 1.0.0\n */\n checkPermissions(): Promise<PermissionStatus>;\n\n /**\n * Request read/write permissions.\n * Required on Android, only when using `Directory.Documents` or\n * `Directory.ExternalStorage`.\n *\n * @since 1.0.0\n */\n requestPermissions(): Promise<PermissionStatus>;\n\n /**\n * Perform a http request to a server and download the file to the specified destination.\n *\n * @since 5.1.0\n */\n downloadFile(options: DownloadFileOptions): Promise<DownloadFileResult>;\n\n /**\n * Add a listener to file download progress events.\n *\n * @since 5.1.0\n */\n addListener(\n eventName: 'progress',\n listenerFunc: ProgressListener,\n ): Promise<PluginListenerHandle> & PluginListenerHandle;\n}\n\n/**\n * @deprecated Use `ReadFileOptions`.\n * @since 1.0.0\n */\nexport type FileReadOptions = ReadFileOptions;\n\n/**\n * @deprecated Use `ReadFileResult`.\n * @since 1.0.0\n */\nexport type FileReadResult = ReadFileResult;\n\n/**\n * @deprecated Use `WriteFileOptions`.\n * @since 1.0.0\n */\nexport type FileWriteOptions = WriteFileOptions;\n\n/**\n * @deprecated Use `WriteFileResult`.\n * @since 1.0.0\n */\nexport type FileWriteResult = WriteFileResult;\n\n/**\n * @deprecated Use `AppendFileOptions`.\n * @since 1.0.0\n */\nexport type FileAppendOptions = AppendFileOptions;\n\n/**\n * @deprecated Use `DeleteFileOptions`.\n * @since 1.0.0\n */\nexport type FileDeleteOptions = DeleteFileOptions;\n\n/**\n * @deprecated Use `Directory`.\n * @since 1.0.0\n */\nexport const FilesystemDirectory = Directory;\n\n/**\n * @deprecated Use `Encoding`.\n * @since 1.0.0\n */\nexport const FilesystemEncoding = Encoding;\n"]}
|
package/dist/esm/web.js
CHANGED
|
@@ -36,10 +36,11 @@ export class FilesystemWeb extends WebPlugin {
|
|
|
36
36
|
* @returns a promise that resolves with the download file result
|
|
37
37
|
*/
|
|
38
38
|
this.downloadFile = async (options) => {
|
|
39
|
+
var _a, _b;
|
|
39
40
|
const requestInit = buildRequestInit(options, options.webFetchExtra);
|
|
40
41
|
const response = await fetch(options.url, requestInit);
|
|
41
42
|
let blob;
|
|
42
|
-
if (!
|
|
43
|
+
if (!options.progress)
|
|
43
44
|
blob = await response.blob();
|
|
44
45
|
else if (!(response === null || response === void 0 ? void 0 : response.body))
|
|
45
46
|
blob = new Blob();
|
|
@@ -72,15 +73,13 @@ export class FilesystemWeb extends WebPlugin {
|
|
|
72
73
|
}
|
|
73
74
|
blob = new Blob([allChunks.buffer], { type: contentType || undefined });
|
|
74
75
|
}
|
|
75
|
-
const
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
document.body.removeChild(tempAnchor);
|
|
83
|
-
return { path: options.path, blob };
|
|
76
|
+
const result = await this.writeFile({
|
|
77
|
+
path: options.path,
|
|
78
|
+
directory: (_a = options.directory) !== null && _a !== void 0 ? _a : undefined,
|
|
79
|
+
recursive: (_b = options.recursive) !== null && _b !== void 0 ? _b : false,
|
|
80
|
+
data: blob,
|
|
81
|
+
});
|
|
82
|
+
return { path: result.uri, blob };
|
|
84
83
|
};
|
|
85
84
|
}
|
|
86
85
|
async initDb() {
|
|
@@ -197,7 +196,7 @@ export class FilesystemWeb extends WebPlugin {
|
|
|
197
196
|
});
|
|
198
197
|
}
|
|
199
198
|
}
|
|
200
|
-
if (!encoding) {
|
|
199
|
+
if (!encoding && !(data instanceof Blob)) {
|
|
201
200
|
data = data.indexOf(',') >= 0 ? data.split(',')[1] : data;
|
|
202
201
|
if (!this.isBase64String(data))
|
|
203
202
|
throw Error('The supplied data is not valid base64 content.');
|
|
@@ -207,7 +206,7 @@ export class FilesystemWeb extends WebPlugin {
|
|
|
207
206
|
path: path,
|
|
208
207
|
folder: parentPath,
|
|
209
208
|
type: 'file',
|
|
210
|
-
size: data.length,
|
|
209
|
+
size: data instanceof Blob ? data.size : data.length,
|
|
211
210
|
ctime: now,
|
|
212
211
|
mtime: now,
|
|
213
212
|
content: data,
|
|
@@ -247,6 +246,9 @@ export class FilesystemWeb extends WebPlugin {
|
|
|
247
246
|
if (!encoding && !this.isBase64String(data))
|
|
248
247
|
throw Error('The supplied data is not valid base64 content.');
|
|
249
248
|
if (occupiedEntry !== undefined) {
|
|
249
|
+
if (occupiedEntry.content instanceof Blob) {
|
|
250
|
+
throw Error('The occupied entry contains a Blob object which cannot be appended to.');
|
|
251
|
+
}
|
|
250
252
|
if (occupiedEntry.content !== undefined && !encoding) {
|
|
251
253
|
data = btoa(atob(occupiedEntry.content) + atob(data));
|
|
252
254
|
}
|
|
@@ -518,7 +520,7 @@ export class FilesystemWeb extends WebPlugin {
|
|
|
518
520
|
});
|
|
519
521
|
}
|
|
520
522
|
let encoding;
|
|
521
|
-
if (!this.isBase64String(file.data)) {
|
|
523
|
+
if (!(file.data instanceof Blob) && !this.isBase64String(file.data)) {
|
|
522
524
|
encoding = Encoding.UTF8;
|
|
523
525
|
}
|
|
524
526
|
// Write the file to the new location
|
package/dist/esm/web.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web.js","sourceRoot":"","sources":["../../src/web.ts"],"names":[],"mappings":"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","sourcesContent":["import { WebPlugin, buildRequestInit } from '@capacitor/core';\n\nimport type {\n AppendFileOptions,\n CopyOptions,\n CopyResult,\n DeleteFileOptions,\n FilesystemPlugin,\n GetUriOptions,\n GetUriResult,\n MkdirOptions,\n PermissionStatus,\n ReadFileOptions,\n ReadFileResult,\n ReaddirOptions,\n ReaddirResult,\n RenameOptions,\n RmdirOptions,\n StatOptions,\n StatResult,\n WriteFileOptions,\n WriteFileResult,\n Directory,\n DownloadFileOptions,\n DownloadFileResult,\n ProgressStatus,\n} from './definitions';\nimport { Encoding } from './definitions';\n\nfunction resolve(path: string): string {\n const posix = path.split('/').filter(item => item !== '.');\n const newPosix: string[] = [];\n\n posix.forEach(item => {\n if (\n item === '..' &&\n newPosix.length > 0 &&\n newPosix[newPosix.length - 1] !== '..'\n ) {\n newPosix.pop();\n } else {\n newPosix.push(item);\n }\n });\n\n return newPosix.join('/');\n}\nfunction isPathParent(parent: string, children: string): boolean {\n parent = resolve(parent);\n children = resolve(children);\n const pathsA = parent.split('/');\n const pathsB = children.split('/');\n\n return (\n parent !== children &&\n pathsA.every((value, index) => value === pathsB[index])\n );\n}\n\nexport class FilesystemWeb extends WebPlugin implements FilesystemPlugin {\n DB_VERSION = 1;\n DB_NAME = 'Disc';\n\n private _writeCmds: string[] = ['add', 'put', 'delete'];\n private _db?: IDBDatabase;\n static _debug = true;\n async initDb(): Promise<IDBDatabase> {\n if (this._db !== undefined) {\n return this._db;\n }\n if (!('indexedDB' in window)) {\n throw this.unavailable(\"This browser doesn't support IndexedDB\");\n }\n\n return new Promise<IDBDatabase>((resolve, reject) => {\n const request = indexedDB.open(this.DB_NAME, this.DB_VERSION);\n request.onupgradeneeded = FilesystemWeb.doUpgrade;\n request.onsuccess = () => {\n this._db = request.result;\n resolve(request.result);\n };\n request.onerror = () => reject(request.error);\n request.onblocked = () => {\n console.warn('db blocked');\n };\n });\n }\n\n static doUpgrade(event: IDBVersionChangeEvent): void {\n const eventTarget = event.target as IDBOpenDBRequest;\n const db = eventTarget.result;\n switch (event.oldVersion) {\n case 0:\n case 1:\n default: {\n if (db.objectStoreNames.contains('FileStorage')) {\n db.deleteObjectStore('FileStorage');\n }\n const store = db.createObjectStore('FileStorage', { keyPath: 'path' });\n store.createIndex('by_folder', 'folder');\n }\n }\n }\n\n async dbRequest(cmd: string, args: any[]): Promise<any> {\n const readFlag =\n this._writeCmds.indexOf(cmd) !== -1 ? 'readwrite' : 'readonly';\n return this.initDb().then((conn: IDBDatabase) => {\n return new Promise<IDBObjectStore>((resolve, reject) => {\n const tx: IDBTransaction = conn.transaction(['FileStorage'], readFlag);\n const store: any = tx.objectStore('FileStorage');\n const req = store[cmd](...args);\n req.onsuccess = () => resolve(req.result);\n req.onerror = () => reject(req.error);\n });\n });\n }\n\n async dbIndexRequest(\n indexName: string,\n cmd: string,\n args: [any],\n ): Promise<any> {\n const readFlag =\n this._writeCmds.indexOf(cmd) !== -1 ? 'readwrite' : 'readonly';\n return this.initDb().then((conn: IDBDatabase) => {\n return new Promise<IDBObjectStore>((resolve, reject) => {\n const tx: IDBTransaction = conn.transaction(['FileStorage'], readFlag);\n const store: IDBObjectStore = tx.objectStore('FileStorage');\n const index: any = store.index(indexName);\n const req = index[cmd](...args) as any;\n req.onsuccess = () => resolve(req.result);\n req.onerror = () => reject(req.error);\n });\n });\n }\n\n private getPath(\n directory: Directory | undefined,\n uriPath: string | undefined,\n ): string {\n const cleanedUriPath =\n uriPath !== undefined ? uriPath.replace(/^[/]+|[/]+$/g, '') : '';\n let fsPath = '';\n if (directory !== undefined) fsPath += '/' + directory;\n if (uriPath !== '') fsPath += '/' + cleanedUriPath;\n return fsPath;\n }\n\n async clear(): Promise<void> {\n const conn: IDBDatabase = await this.initDb();\n const tx: IDBTransaction = conn.transaction(['FileStorage'], 'readwrite');\n const store: IDBObjectStore = tx.objectStore('FileStorage');\n store.clear();\n }\n\n /**\n * Read a file from disk\n * @param options options for the file read\n * @return a promise that resolves with the read file data result\n */\n async readFile(options: ReadFileOptions): Promise<ReadFileResult> {\n const path: string = this.getPath(options.directory, options.path);\n // const encoding = options.encoding;\n\n const entry = (await this.dbRequest('get', [path])) as EntryObj;\n if (entry === undefined) throw Error('File does not exist.');\n return { data: entry.content ? entry.content : '' };\n }\n\n /**\n * Write a file to disk in the specified location on device\n * @param options options for the file write\n * @return a promise that resolves with the file write result\n */\n async writeFile(options: WriteFileOptions): Promise<WriteFileResult> {\n const path: string = this.getPath(options.directory, options.path);\n let data = options.data;\n const encoding = options.encoding;\n const doRecursive = options.recursive;\n\n const occupiedEntry = (await this.dbRequest('get', [path])) as EntryObj;\n if (occupiedEntry && occupiedEntry.type === 'directory')\n throw Error('The supplied path is a directory.');\n\n const parentPath = path.substr(0, path.lastIndexOf('/'));\n\n const parentEntry = (await this.dbRequest('get', [parentPath])) as EntryObj;\n if (parentEntry === undefined) {\n const subDirIndex = parentPath.indexOf('/', 1);\n if (subDirIndex !== -1) {\n const parentArgPath = parentPath.substr(subDirIndex);\n await this.mkdir({\n path: parentArgPath,\n directory: options.directory,\n recursive: doRecursive,\n });\n }\n }\n\n if (!encoding) {\n data = data.indexOf(',') >= 0 ? data.split(',')[1] : data;\n if (!this.isBase64String(data))\n throw Error('The supplied data is not valid base64 content.');\n }\n\n const now = Date.now();\n const pathObj: EntryObj = {\n path: path,\n folder: parentPath,\n type: 'file',\n size: data.length,\n ctime: now,\n mtime: now,\n content: data,\n };\n await this.dbRequest('put', [pathObj]);\n return {\n uri: pathObj.path,\n };\n }\n\n /**\n * Append to a file on disk in the specified location on device\n * @param options options for the file append\n * @return a promise that resolves with the file write result\n */\n async appendFile(options: AppendFileOptions): Promise<void> {\n const path: string = this.getPath(options.directory, options.path);\n let data = options.data;\n const encoding = options.encoding;\n const parentPath = path.substr(0, path.lastIndexOf('/'));\n\n const now = Date.now();\n let ctime = now;\n\n const occupiedEntry = (await this.dbRequest('get', [path])) as EntryObj;\n if (occupiedEntry && occupiedEntry.type === 'directory')\n throw Error('The supplied path is a directory.');\n\n const parentEntry = (await this.dbRequest('get', [parentPath])) as EntryObj;\n if (parentEntry === undefined) {\n const subDirIndex = parentPath.indexOf('/', 1);\n if (subDirIndex !== -1) {\n const parentArgPath = parentPath.substr(subDirIndex);\n await this.mkdir({\n path: parentArgPath,\n directory: options.directory,\n recursive: true,\n });\n }\n }\n\n if (!encoding && !this.isBase64String(data))\n throw Error('The supplied data is not valid base64 content.');\n\n if (occupiedEntry !== undefined) {\n if (occupiedEntry.content !== undefined && !encoding) {\n data = btoa(atob(occupiedEntry.content) + atob(data));\n } else {\n data = occupiedEntry.content + data;\n }\n ctime = occupiedEntry.ctime;\n }\n const pathObj: EntryObj = {\n path: path,\n folder: parentPath,\n type: 'file',\n size: data.length,\n ctime: ctime,\n mtime: now,\n content: data,\n };\n await this.dbRequest('put', [pathObj]);\n }\n\n /**\n * Delete a file from disk\n * @param options options for the file delete\n * @return a promise that resolves with the deleted file data result\n */\n async deleteFile(options: DeleteFileOptions): Promise<void> {\n const path: string = this.getPath(options.directory, options.path);\n\n const entry = (await this.dbRequest('get', [path])) as EntryObj;\n if (entry === undefined) throw Error('File does not exist.');\n const entries = await this.dbIndexRequest('by_folder', 'getAllKeys', [\n IDBKeyRange.only(path),\n ]);\n if (entries.length !== 0) throw Error('Folder is not empty.');\n\n await this.dbRequest('delete', [path]);\n }\n\n /**\n * Create a directory.\n * @param options options for the mkdir\n * @return a promise that resolves with the mkdir result\n */\n async mkdir(options: MkdirOptions): Promise<void> {\n const path: string = this.getPath(options.directory, options.path);\n const doRecursive = options.recursive;\n const parentPath = path.substr(0, path.lastIndexOf('/'));\n\n const depth = (path.match(/\\//g) || []).length;\n const parentEntry = (await this.dbRequest('get', [parentPath])) as EntryObj;\n const occupiedEntry = (await this.dbRequest('get', [path])) as EntryObj;\n if (depth === 1) throw Error('Cannot create Root directory');\n if (occupiedEntry !== undefined)\n throw Error('Current directory does already exist.');\n if (!doRecursive && depth !== 2 && parentEntry === undefined)\n throw Error('Parent directory must exist');\n\n if (doRecursive && depth !== 2 && parentEntry === undefined) {\n const parentArgPath = parentPath.substr(parentPath.indexOf('/', 1));\n await this.mkdir({\n path: parentArgPath,\n directory: options.directory,\n recursive: doRecursive,\n });\n }\n const now = Date.now();\n const pathObj: EntryObj = {\n path: path,\n folder: parentPath,\n type: 'directory',\n size: 0,\n ctime: now,\n mtime: now,\n };\n await this.dbRequest('put', [pathObj]);\n }\n\n /**\n * Remove a directory\n * @param options the options for the directory remove\n */\n async rmdir(options: RmdirOptions): Promise<void> {\n const { path, directory, recursive } = options;\n const fullPath: string = this.getPath(directory, path);\n\n const entry = (await this.dbRequest('get', [fullPath])) as EntryObj;\n\n if (entry === undefined) throw Error('Folder does not exist.');\n\n if (entry.type !== 'directory')\n throw Error('Requested path is not a directory');\n\n const readDirResult = await this.readdir({ path, directory });\n\n if (readDirResult.files.length !== 0 && !recursive)\n throw Error('Folder is not empty');\n\n for (const entry of readDirResult.files) {\n const entryPath = `${path}/${entry.name}`;\n const entryObj = await this.stat({ path: entryPath, directory });\n if (entryObj.type === 'file') {\n await this.deleteFile({ path: entryPath, directory });\n } else {\n await this.rmdir({ path: entryPath, directory, recursive });\n }\n }\n\n await this.dbRequest('delete', [fullPath]);\n }\n\n /**\n * Return a list of files from the directory (not recursive)\n * @param options the options for the readdir operation\n * @return a promise that resolves with the readdir directory listing result\n */\n async readdir(options: ReaddirOptions): Promise<ReaddirResult> {\n const path: string = this.getPath(options.directory, options.path);\n\n const entry = (await this.dbRequest('get', [path])) as EntryObj;\n if (options.path !== '' && entry === undefined)\n throw Error('Folder does not exist.');\n\n const entries: string[] = await this.dbIndexRequest(\n 'by_folder',\n 'getAllKeys',\n [IDBKeyRange.only(path)],\n );\n const files = await Promise.all(\n entries.map(async e => {\n let subEntry = (await this.dbRequest('get', [e])) as EntryObj;\n if (subEntry === undefined) {\n subEntry = (await this.dbRequest('get', [e + '/'])) as EntryObj;\n }\n return {\n name: e.substring(path.length + 1),\n type: subEntry.type,\n size: subEntry.size,\n ctime: subEntry.ctime,\n mtime: subEntry.mtime,\n uri: subEntry.path,\n };\n }),\n );\n return { files: files };\n }\n\n /**\n * Return full File URI for a path and directory\n * @param options the options for the stat operation\n * @return a promise that resolves with the file stat result\n */\n async getUri(options: GetUriOptions): Promise<GetUriResult> {\n const path: string = this.getPath(options.directory, options.path);\n\n let entry = (await this.dbRequest('get', [path])) as EntryObj;\n if (entry === undefined) {\n entry = (await this.dbRequest('get', [path + '/'])) as EntryObj;\n }\n return {\n uri: entry?.path || path,\n };\n }\n\n /**\n * Return data about a file\n * @param options the options for the stat operation\n * @return a promise that resolves with the file stat result\n */\n async stat(options: StatOptions): Promise<StatResult> {\n const path: string = this.getPath(options.directory, options.path);\n\n let entry = (await this.dbRequest('get', [path])) as EntryObj;\n if (entry === undefined) {\n entry = (await this.dbRequest('get', [path + '/'])) as EntryObj;\n }\n if (entry === undefined) throw Error('Entry does not exist.');\n\n return {\n type: entry.type,\n size: entry.size,\n ctime: entry.ctime,\n mtime: entry.mtime,\n uri: entry.path,\n };\n }\n\n /**\n * Rename a file or directory\n * @param options the options for the rename operation\n * @return a promise that resolves with the rename result\n */\n async rename(options: RenameOptions): Promise<void> {\n await this._copy(options, true);\n return;\n }\n\n /**\n * Copy a file or directory\n * @param options the options for the copy operation\n * @return a promise that resolves with the copy result\n */\n async copy(options: CopyOptions): Promise<CopyResult> {\n return this._copy(options, false);\n }\n\n async requestPermissions(): Promise<PermissionStatus> {\n return { publicStorage: 'granted' };\n }\n\n async checkPermissions(): Promise<PermissionStatus> {\n return { publicStorage: 'granted' };\n }\n\n /**\n * Function that can perform a copy or a rename\n * @param options the options for the rename operation\n * @param doRename whether to perform a rename or copy operation\n * @return a promise that resolves with the result\n */\n private async _copy(\n options: CopyOptions,\n doRename = false,\n ): Promise<CopyResult> {\n let { toDirectory } = options;\n const { to, from, directory: fromDirectory } = options;\n\n if (!to || !from) {\n throw Error('Both to and from must be provided');\n }\n\n // If no \"to\" directory is provided, use the \"from\" directory\n if (!toDirectory) {\n toDirectory = fromDirectory;\n }\n\n const fromPath = this.getPath(fromDirectory, from);\n const toPath = this.getPath(toDirectory, to);\n\n // Test that the \"to\" and \"from\" locations are different\n if (fromPath === toPath) {\n return {\n uri: toPath,\n };\n }\n\n if (isPathParent(fromPath, toPath)) {\n throw Error('To path cannot contain the from path');\n }\n\n // Check the state of the \"to\" location\n let toObj;\n try {\n toObj = await this.stat({\n path: to,\n directory: toDirectory,\n });\n } catch (e) {\n // To location does not exist, ensure the directory containing \"to\" location exists and is a directory\n const toPathComponents = to.split('/');\n toPathComponents.pop();\n const toPath = toPathComponents.join('/');\n\n // Check the containing directory of the \"to\" location exists\n if (toPathComponents.length > 0) {\n const toParentDirectory = await this.stat({\n path: toPath,\n directory: toDirectory,\n });\n\n if (toParentDirectory.type !== 'directory') {\n throw new Error('Parent directory of the to path is a file');\n }\n }\n }\n\n // Cannot overwrite a directory\n if (toObj && toObj.type === 'directory') {\n throw new Error('Cannot overwrite a directory with a file');\n }\n\n // Ensure the \"from\" object exists\n const fromObj = await this.stat({\n path: from,\n directory: fromDirectory,\n });\n\n // Set the mtime/ctime of the supplied path\n const updateTime = async (path: string, ctime: number, mtime: number) => {\n const fullPath: string = this.getPath(toDirectory, path);\n const entry = (await this.dbRequest('get', [fullPath])) as EntryObj;\n entry.ctime = ctime;\n entry.mtime = mtime;\n await this.dbRequest('put', [entry]);\n };\n\n const ctime = fromObj.ctime ? fromObj.ctime : Date.now();\n\n switch (fromObj.type) {\n // The \"from\" object is a file\n case 'file': {\n // Read the file\n const file = await this.readFile({\n path: from,\n directory: fromDirectory,\n });\n\n // Optionally remove the file\n if (doRename) {\n await this.deleteFile({\n path: from,\n directory: fromDirectory,\n });\n }\n\n let encoding;\n if (!this.isBase64String(file.data)) {\n encoding = Encoding.UTF8;\n }\n\n // Write the file to the new location\n const writeResult = await this.writeFile({\n path: to,\n directory: toDirectory,\n data: file.data,\n encoding: encoding,\n });\n\n // Copy the mtime/ctime of a renamed file\n if (doRename) {\n await updateTime(to, ctime, fromObj.mtime);\n }\n\n // Resolve promise\n return writeResult;\n }\n case 'directory': {\n if (toObj) {\n throw Error('Cannot move a directory over an existing object');\n }\n\n try {\n // Create the to directory\n await this.mkdir({\n path: to,\n directory: toDirectory,\n recursive: false,\n });\n\n // Copy the mtime/ctime of a renamed directory\n if (doRename) {\n await updateTime(to, ctime, fromObj.mtime);\n }\n } catch (e) {\n // ignore\n }\n\n // Iterate over the contents of the from location\n const contents = (\n await this.readdir({\n path: from,\n directory: fromDirectory,\n })\n ).files;\n\n for (const filename of contents) {\n // Move item from the from directory to the to directory\n await this._copy(\n {\n from: `${from}/${filename.name}`,\n to: `${to}/${filename.name}`,\n directory: fromDirectory,\n toDirectory,\n },\n doRename,\n );\n }\n\n // Optionally remove the original from directory\n if (doRename) {\n await this.rmdir({\n path: from,\n directory: fromDirectory,\n });\n }\n }\n }\n return {\n uri: toPath,\n };\n }\n\n /**\n * Function that performs a http request to a server and downloads the file to the specified destination\n *\n * @param options the options for the download operation\n * @returns a promise that resolves with the download file result\n */\n public downloadFile = async (\n options: DownloadFileOptions,\n ): Promise<DownloadFileResult> => {\n const requestInit = buildRequestInit(options, options.webFetchExtra);\n const response = await fetch(options.url, requestInit);\n let blob: Blob;\n\n if (!options?.progress) blob = await response.blob();\n else if (!response?.body) blob = new Blob();\n else {\n const reader = response.body.getReader();\n\n let bytes = 0;\n const chunks: (Uint8Array | undefined)[] = [];\n\n const contentType: string | null = response.headers.get('content-type');\n const contentLength: number = parseInt(\n response.headers.get('content-length') || '0',\n 10,\n );\n\n while (true) {\n const { done, value } = await reader.read();\n\n if (done) break;\n\n chunks.push(value);\n bytes += value?.length || 0;\n\n const status: ProgressStatus = {\n url: options.url,\n bytes,\n contentLength,\n };\n\n this.notifyListeners('progress', status);\n }\n\n const allChunks = new Uint8Array(bytes);\n let position = 0;\n for (const chunk of chunks) {\n if (typeof chunk === 'undefined') continue;\n\n allChunks.set(chunk, position);\n position += chunk.length;\n }\n\n blob = new Blob([allChunks.buffer], { type: contentType || undefined });\n }\n\n const blobUrl = URL.createObjectURL(blob);\n const tempAnchor = document.createElement('a');\n document.body.appendChild(tempAnchor);\n\n tempAnchor.href = blobUrl;\n tempAnchor.download = options.path; // This should be a filename, not a path\n tempAnchor.click();\n\n URL.revokeObjectURL(blobUrl);\n document.body.removeChild(tempAnchor);\n\n return { path: options.path, blob };\n };\n\n private isBase64String(str: string): boolean {\n try {\n return btoa(atob(str)) == str;\n } catch (err) {\n return false;\n }\n }\n}\n\ninterface EntryObj {\n path: string;\n folder: string;\n type: 'directory' | 'file';\n size: number;\n ctime: number;\n mtime: number;\n uri?: string;\n content?: string;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"web.js","sourceRoot":"","sources":["../../src/web.ts"],"names":[],"mappings":"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","sourcesContent":["import { WebPlugin, buildRequestInit } from '@capacitor/core';\n\nimport type {\n AppendFileOptions,\n CopyOptions,\n CopyResult,\n DeleteFileOptions,\n FilesystemPlugin,\n GetUriOptions,\n GetUriResult,\n MkdirOptions,\n PermissionStatus,\n ReadFileOptions,\n ReadFileResult,\n ReaddirOptions,\n ReaddirResult,\n RenameOptions,\n RmdirOptions,\n StatOptions,\n StatResult,\n WriteFileOptions,\n WriteFileResult,\n Directory,\n DownloadFileOptions,\n DownloadFileResult,\n ProgressStatus,\n} from './definitions';\nimport { Encoding } from './definitions';\n\nfunction resolve(path: string): string {\n const posix = path.split('/').filter(item => item !== '.');\n const newPosix: string[] = [];\n\n posix.forEach(item => {\n if (\n item === '..' &&\n newPosix.length > 0 &&\n newPosix[newPosix.length - 1] !== '..'\n ) {\n newPosix.pop();\n } else {\n newPosix.push(item);\n }\n });\n\n return newPosix.join('/');\n}\nfunction isPathParent(parent: string, children: string): boolean {\n parent = resolve(parent);\n children = resolve(children);\n const pathsA = parent.split('/');\n const pathsB = children.split('/');\n\n return (\n parent !== children &&\n pathsA.every((value, index) => value === pathsB[index])\n );\n}\n\nexport class FilesystemWeb extends WebPlugin implements FilesystemPlugin {\n DB_VERSION = 1;\n DB_NAME = 'Disc';\n\n private _writeCmds: string[] = ['add', 'put', 'delete'];\n private _db?: IDBDatabase;\n static _debug = true;\n async initDb(): Promise<IDBDatabase> {\n if (this._db !== undefined) {\n return this._db;\n }\n if (!('indexedDB' in window)) {\n throw this.unavailable(\"This browser doesn't support IndexedDB\");\n }\n\n return new Promise<IDBDatabase>((resolve, reject) => {\n const request = indexedDB.open(this.DB_NAME, this.DB_VERSION);\n request.onupgradeneeded = FilesystemWeb.doUpgrade;\n request.onsuccess = () => {\n this._db = request.result;\n resolve(request.result);\n };\n request.onerror = () => reject(request.error);\n request.onblocked = () => {\n console.warn('db blocked');\n };\n });\n }\n\n static doUpgrade(event: IDBVersionChangeEvent): void {\n const eventTarget = event.target as IDBOpenDBRequest;\n const db = eventTarget.result;\n switch (event.oldVersion) {\n case 0:\n case 1:\n default: {\n if (db.objectStoreNames.contains('FileStorage')) {\n db.deleteObjectStore('FileStorage');\n }\n const store = db.createObjectStore('FileStorage', { keyPath: 'path' });\n store.createIndex('by_folder', 'folder');\n }\n }\n }\n\n async dbRequest(cmd: string, args: any[]): Promise<any> {\n const readFlag =\n this._writeCmds.indexOf(cmd) !== -1 ? 'readwrite' : 'readonly';\n return this.initDb().then((conn: IDBDatabase) => {\n return new Promise<IDBObjectStore>((resolve, reject) => {\n const tx: IDBTransaction = conn.transaction(['FileStorage'], readFlag);\n const store: any = tx.objectStore('FileStorage');\n const req = store[cmd](...args);\n req.onsuccess = () => resolve(req.result);\n req.onerror = () => reject(req.error);\n });\n });\n }\n\n async dbIndexRequest(\n indexName: string,\n cmd: string,\n args: [any],\n ): Promise<any> {\n const readFlag =\n this._writeCmds.indexOf(cmd) !== -1 ? 'readwrite' : 'readonly';\n return this.initDb().then((conn: IDBDatabase) => {\n return new Promise<IDBObjectStore>((resolve, reject) => {\n const tx: IDBTransaction = conn.transaction(['FileStorage'], readFlag);\n const store: IDBObjectStore = tx.objectStore('FileStorage');\n const index: any = store.index(indexName);\n const req = index[cmd](...args) as any;\n req.onsuccess = () => resolve(req.result);\n req.onerror = () => reject(req.error);\n });\n });\n }\n\n private getPath(\n directory: Directory | undefined,\n uriPath: string | undefined,\n ): string {\n const cleanedUriPath =\n uriPath !== undefined ? uriPath.replace(/^[/]+|[/]+$/g, '') : '';\n let fsPath = '';\n if (directory !== undefined) fsPath += '/' + directory;\n if (uriPath !== '') fsPath += '/' + cleanedUriPath;\n return fsPath;\n }\n\n async clear(): Promise<void> {\n const conn: IDBDatabase = await this.initDb();\n const tx: IDBTransaction = conn.transaction(['FileStorage'], 'readwrite');\n const store: IDBObjectStore = tx.objectStore('FileStorage');\n store.clear();\n }\n\n /**\n * Read a file from disk\n * @param options options for the file read\n * @return a promise that resolves with the read file data result\n */\n async readFile(options: ReadFileOptions): Promise<ReadFileResult> {\n const path: string = this.getPath(options.directory, options.path);\n // const encoding = options.encoding;\n\n const entry = (await this.dbRequest('get', [path])) as EntryObj;\n if (entry === undefined) throw Error('File does not exist.');\n return { data: entry.content ? entry.content : '' };\n }\n\n /**\n * Write a file to disk in the specified location on device\n * @param options options for the file write\n * @return a promise that resolves with the file write result\n */\n async writeFile(options: WriteFileOptions): Promise<WriteFileResult> {\n const path: string = this.getPath(options.directory, options.path);\n let data = options.data;\n const encoding = options.encoding;\n const doRecursive = options.recursive;\n\n const occupiedEntry = (await this.dbRequest('get', [path])) as EntryObj;\n if (occupiedEntry && occupiedEntry.type === 'directory')\n throw Error('The supplied path is a directory.');\n\n const parentPath = path.substr(0, path.lastIndexOf('/'));\n\n const parentEntry = (await this.dbRequest('get', [parentPath])) as EntryObj;\n if (parentEntry === undefined) {\n const subDirIndex = parentPath.indexOf('/', 1);\n if (subDirIndex !== -1) {\n const parentArgPath = parentPath.substr(subDirIndex);\n await this.mkdir({\n path: parentArgPath,\n directory: options.directory,\n recursive: doRecursive,\n });\n }\n }\n\n if (!encoding && !(data instanceof Blob)) {\n data = data.indexOf(',') >= 0 ? data.split(',')[1] : data;\n if (!this.isBase64String(data))\n throw Error('The supplied data is not valid base64 content.');\n }\n\n const now = Date.now();\n const pathObj: EntryObj = {\n path: path,\n folder: parentPath,\n type: 'file',\n size: data instanceof Blob ? data.size : data.length,\n ctime: now,\n mtime: now,\n content: data,\n };\n await this.dbRequest('put', [pathObj]);\n return {\n uri: pathObj.path,\n };\n }\n\n /**\n * Append to a file on disk in the specified location on device\n * @param options options for the file append\n * @return a promise that resolves with the file write result\n */\n async appendFile(options: AppendFileOptions): Promise<void> {\n const path: string = this.getPath(options.directory, options.path);\n let data = options.data;\n const encoding = options.encoding;\n const parentPath = path.substr(0, path.lastIndexOf('/'));\n\n const now = Date.now();\n let ctime = now;\n\n const occupiedEntry = (await this.dbRequest('get', [path])) as EntryObj;\n if (occupiedEntry && occupiedEntry.type === 'directory')\n throw Error('The supplied path is a directory.');\n\n const parentEntry = (await this.dbRequest('get', [parentPath])) as EntryObj;\n if (parentEntry === undefined) {\n const subDirIndex = parentPath.indexOf('/', 1);\n if (subDirIndex !== -1) {\n const parentArgPath = parentPath.substr(subDirIndex);\n await this.mkdir({\n path: parentArgPath,\n directory: options.directory,\n recursive: true,\n });\n }\n }\n\n if (!encoding && !this.isBase64String(data))\n throw Error('The supplied data is not valid base64 content.');\n\n if (occupiedEntry !== undefined) {\n if (occupiedEntry.content instanceof Blob) {\n throw Error(\n 'The occupied entry contains a Blob object which cannot be appended to.',\n );\n }\n\n if (occupiedEntry.content !== undefined && !encoding) {\n data = btoa(atob(occupiedEntry.content) + atob(data));\n } else {\n data = occupiedEntry.content + data;\n }\n ctime = occupiedEntry.ctime;\n }\n const pathObj: EntryObj = {\n path: path,\n folder: parentPath,\n type: 'file',\n size: data.length,\n ctime: ctime,\n mtime: now,\n content: data,\n };\n await this.dbRequest('put', [pathObj]);\n }\n\n /**\n * Delete a file from disk\n * @param options options for the file delete\n * @return a promise that resolves with the deleted file data result\n */\n async deleteFile(options: DeleteFileOptions): Promise<void> {\n const path: string = this.getPath(options.directory, options.path);\n\n const entry = (await this.dbRequest('get', [path])) as EntryObj;\n if (entry === undefined) throw Error('File does not exist.');\n const entries = await this.dbIndexRequest('by_folder', 'getAllKeys', [\n IDBKeyRange.only(path),\n ]);\n if (entries.length !== 0) throw Error('Folder is not empty.');\n\n await this.dbRequest('delete', [path]);\n }\n\n /**\n * Create a directory.\n * @param options options for the mkdir\n * @return a promise that resolves with the mkdir result\n */\n async mkdir(options: MkdirOptions): Promise<void> {\n const path: string = this.getPath(options.directory, options.path);\n const doRecursive = options.recursive;\n const parentPath = path.substr(0, path.lastIndexOf('/'));\n\n const depth = (path.match(/\\//g) || []).length;\n const parentEntry = (await this.dbRequest('get', [parentPath])) as EntryObj;\n const occupiedEntry = (await this.dbRequest('get', [path])) as EntryObj;\n if (depth === 1) throw Error('Cannot create Root directory');\n if (occupiedEntry !== undefined)\n throw Error('Current directory does already exist.');\n if (!doRecursive && depth !== 2 && parentEntry === undefined)\n throw Error('Parent directory must exist');\n\n if (doRecursive && depth !== 2 && parentEntry === undefined) {\n const parentArgPath = parentPath.substr(parentPath.indexOf('/', 1));\n await this.mkdir({\n path: parentArgPath,\n directory: options.directory,\n recursive: doRecursive,\n });\n }\n const now = Date.now();\n const pathObj: EntryObj = {\n path: path,\n folder: parentPath,\n type: 'directory',\n size: 0,\n ctime: now,\n mtime: now,\n };\n await this.dbRequest('put', [pathObj]);\n }\n\n /**\n * Remove a directory\n * @param options the options for the directory remove\n */\n async rmdir(options: RmdirOptions): Promise<void> {\n const { path, directory, recursive } = options;\n const fullPath: string = this.getPath(directory, path);\n\n const entry = (await this.dbRequest('get', [fullPath])) as EntryObj;\n\n if (entry === undefined) throw Error('Folder does not exist.');\n\n if (entry.type !== 'directory')\n throw Error('Requested path is not a directory');\n\n const readDirResult = await this.readdir({ path, directory });\n\n if (readDirResult.files.length !== 0 && !recursive)\n throw Error('Folder is not empty');\n\n for (const entry of readDirResult.files) {\n const entryPath = `${path}/${entry.name}`;\n const entryObj = await this.stat({ path: entryPath, directory });\n if (entryObj.type === 'file') {\n await this.deleteFile({ path: entryPath, directory });\n } else {\n await this.rmdir({ path: entryPath, directory, recursive });\n }\n }\n\n await this.dbRequest('delete', [fullPath]);\n }\n\n /**\n * Return a list of files from the directory (not recursive)\n * @param options the options for the readdir operation\n * @return a promise that resolves with the readdir directory listing result\n */\n async readdir(options: ReaddirOptions): Promise<ReaddirResult> {\n const path: string = this.getPath(options.directory, options.path);\n\n const entry = (await this.dbRequest('get', [path])) as EntryObj;\n if (options.path !== '' && entry === undefined)\n throw Error('Folder does not exist.');\n\n const entries: string[] = await this.dbIndexRequest(\n 'by_folder',\n 'getAllKeys',\n [IDBKeyRange.only(path)],\n );\n const files = await Promise.all(\n entries.map(async e => {\n let subEntry = (await this.dbRequest('get', [e])) as EntryObj;\n if (subEntry === undefined) {\n subEntry = (await this.dbRequest('get', [e + '/'])) as EntryObj;\n }\n return {\n name: e.substring(path.length + 1),\n type: subEntry.type,\n size: subEntry.size,\n ctime: subEntry.ctime,\n mtime: subEntry.mtime,\n uri: subEntry.path,\n };\n }),\n );\n return { files: files };\n }\n\n /**\n * Return full File URI for a path and directory\n * @param options the options for the stat operation\n * @return a promise that resolves with the file stat result\n */\n async getUri(options: GetUriOptions): Promise<GetUriResult> {\n const path: string = this.getPath(options.directory, options.path);\n\n let entry = (await this.dbRequest('get', [path])) as EntryObj;\n if (entry === undefined) {\n entry = (await this.dbRequest('get', [path + '/'])) as EntryObj;\n }\n return {\n uri: entry?.path || path,\n };\n }\n\n /**\n * Return data about a file\n * @param options the options for the stat operation\n * @return a promise that resolves with the file stat result\n */\n async stat(options: StatOptions): Promise<StatResult> {\n const path: string = this.getPath(options.directory, options.path);\n\n let entry = (await this.dbRequest('get', [path])) as EntryObj;\n if (entry === undefined) {\n entry = (await this.dbRequest('get', [path + '/'])) as EntryObj;\n }\n if (entry === undefined) throw Error('Entry does not exist.');\n\n return {\n type: entry.type,\n size: entry.size,\n ctime: entry.ctime,\n mtime: entry.mtime,\n uri: entry.path,\n };\n }\n\n /**\n * Rename a file or directory\n * @param options the options for the rename operation\n * @return a promise that resolves with the rename result\n */\n async rename(options: RenameOptions): Promise<void> {\n await this._copy(options, true);\n return;\n }\n\n /**\n * Copy a file or directory\n * @param options the options for the copy operation\n * @return a promise that resolves with the copy result\n */\n async copy(options: CopyOptions): Promise<CopyResult> {\n return this._copy(options, false);\n }\n\n async requestPermissions(): Promise<PermissionStatus> {\n return { publicStorage: 'granted' };\n }\n\n async checkPermissions(): Promise<PermissionStatus> {\n return { publicStorage: 'granted' };\n }\n\n /**\n * Function that can perform a copy or a rename\n * @param options the options for the rename operation\n * @param doRename whether to perform a rename or copy operation\n * @return a promise that resolves with the result\n */\n private async _copy(\n options: CopyOptions,\n doRename = false,\n ): Promise<CopyResult> {\n let { toDirectory } = options;\n const { to, from, directory: fromDirectory } = options;\n\n if (!to || !from) {\n throw Error('Both to and from must be provided');\n }\n\n // If no \"to\" directory is provided, use the \"from\" directory\n if (!toDirectory) {\n toDirectory = fromDirectory;\n }\n\n const fromPath = this.getPath(fromDirectory, from);\n const toPath = this.getPath(toDirectory, to);\n\n // Test that the \"to\" and \"from\" locations are different\n if (fromPath === toPath) {\n return {\n uri: toPath,\n };\n }\n\n if (isPathParent(fromPath, toPath)) {\n throw Error('To path cannot contain the from path');\n }\n\n // Check the state of the \"to\" location\n let toObj;\n try {\n toObj = await this.stat({\n path: to,\n directory: toDirectory,\n });\n } catch (e) {\n // To location does not exist, ensure the directory containing \"to\" location exists and is a directory\n const toPathComponents = to.split('/');\n toPathComponents.pop();\n const toPath = toPathComponents.join('/');\n\n // Check the containing directory of the \"to\" location exists\n if (toPathComponents.length > 0) {\n const toParentDirectory = await this.stat({\n path: toPath,\n directory: toDirectory,\n });\n\n if (toParentDirectory.type !== 'directory') {\n throw new Error('Parent directory of the to path is a file');\n }\n }\n }\n\n // Cannot overwrite a directory\n if (toObj && toObj.type === 'directory') {\n throw new Error('Cannot overwrite a directory with a file');\n }\n\n // Ensure the \"from\" object exists\n const fromObj = await this.stat({\n path: from,\n directory: fromDirectory,\n });\n\n // Set the mtime/ctime of the supplied path\n const updateTime = async (path: string, ctime: number, mtime: number) => {\n const fullPath: string = this.getPath(toDirectory, path);\n const entry = (await this.dbRequest('get', [fullPath])) as EntryObj;\n entry.ctime = ctime;\n entry.mtime = mtime;\n await this.dbRequest('put', [entry]);\n };\n\n const ctime = fromObj.ctime ? fromObj.ctime : Date.now();\n\n switch (fromObj.type) {\n // The \"from\" object is a file\n case 'file': {\n // Read the file\n const file = await this.readFile({\n path: from,\n directory: fromDirectory,\n });\n\n // Optionally remove the file\n if (doRename) {\n await this.deleteFile({\n path: from,\n directory: fromDirectory,\n });\n }\n\n let encoding;\n if (!(file.data instanceof Blob) && !this.isBase64String(file.data)) {\n encoding = Encoding.UTF8;\n }\n\n // Write the file to the new location\n const writeResult = await this.writeFile({\n path: to,\n directory: toDirectory,\n data: file.data,\n encoding: encoding,\n });\n\n // Copy the mtime/ctime of a renamed file\n if (doRename) {\n await updateTime(to, ctime, fromObj.mtime);\n }\n\n // Resolve promise\n return writeResult;\n }\n case 'directory': {\n if (toObj) {\n throw Error('Cannot move a directory over an existing object');\n }\n\n try {\n // Create the to directory\n await this.mkdir({\n path: to,\n directory: toDirectory,\n recursive: false,\n });\n\n // Copy the mtime/ctime of a renamed directory\n if (doRename) {\n await updateTime(to, ctime, fromObj.mtime);\n }\n } catch (e) {\n // ignore\n }\n\n // Iterate over the contents of the from location\n const contents = (\n await this.readdir({\n path: from,\n directory: fromDirectory,\n })\n ).files;\n\n for (const filename of contents) {\n // Move item from the from directory to the to directory\n await this._copy(\n {\n from: `${from}/${filename.name}`,\n to: `${to}/${filename.name}`,\n directory: fromDirectory,\n toDirectory,\n },\n doRename,\n );\n }\n\n // Optionally remove the original from directory\n if (doRename) {\n await this.rmdir({\n path: from,\n directory: fromDirectory,\n });\n }\n }\n }\n return {\n uri: toPath,\n };\n }\n\n /**\n * Function that performs a http request to a server and downloads the file to the specified destination\n *\n * @param options the options for the download operation\n * @returns a promise that resolves with the download file result\n */\n public downloadFile = async (\n options: DownloadFileOptions,\n ): Promise<DownloadFileResult> => {\n const requestInit = buildRequestInit(options, options.webFetchExtra);\n const response = await fetch(options.url, requestInit);\n let blob: Blob;\n\n if (!options.progress) blob = await response.blob();\n else if (!response?.body) blob = new Blob();\n else {\n const reader = response.body.getReader();\n\n let bytes = 0;\n const chunks: (Uint8Array | undefined)[] = [];\n\n const contentType: string | null = response.headers.get('content-type');\n const contentLength: number = parseInt(\n response.headers.get('content-length') || '0',\n 10,\n );\n\n while (true) {\n const { done, value } = await reader.read();\n\n if (done) break;\n\n chunks.push(value);\n bytes += value?.length || 0;\n\n const status: ProgressStatus = {\n url: options.url,\n bytes,\n contentLength,\n };\n\n this.notifyListeners('progress', status);\n }\n\n const allChunks = new Uint8Array(bytes);\n let position = 0;\n for (const chunk of chunks) {\n if (typeof chunk === 'undefined') continue;\n\n allChunks.set(chunk, position);\n position += chunk.length;\n }\n\n blob = new Blob([allChunks.buffer], { type: contentType || undefined });\n }\n\n const result = await this.writeFile({\n path: options.path,\n directory: options.directory ?? undefined,\n recursive: options.recursive ?? false,\n data: blob,\n });\n\n return { path: result.uri, blob };\n };\n\n private isBase64String(str: string): boolean {\n try {\n return btoa(atob(str)) == str;\n } catch (err) {\n return false;\n }\n }\n}\n\ninterface EntryObj {\n path: string;\n folder: string;\n type: 'directory' | 'file';\n size: number;\n ctime: number;\n mtime: number;\n uri?: string;\n content?: string | Blob;\n}\n"]}
|
package/dist/plugin.cjs.js
CHANGED
|
@@ -146,10 +146,11 @@ class FilesystemWeb extends core.WebPlugin {
|
|
|
146
146
|
* @returns a promise that resolves with the download file result
|
|
147
147
|
*/
|
|
148
148
|
this.downloadFile = async (options) => {
|
|
149
|
+
var _a, _b;
|
|
149
150
|
const requestInit = core.buildRequestInit(options, options.webFetchExtra);
|
|
150
151
|
const response = await fetch(options.url, requestInit);
|
|
151
152
|
let blob;
|
|
152
|
-
if (!
|
|
153
|
+
if (!options.progress)
|
|
153
154
|
blob = await response.blob();
|
|
154
155
|
else if (!(response === null || response === void 0 ? void 0 : response.body))
|
|
155
156
|
blob = new Blob();
|
|
@@ -182,15 +183,13 @@ class FilesystemWeb extends core.WebPlugin {
|
|
|
182
183
|
}
|
|
183
184
|
blob = new Blob([allChunks.buffer], { type: contentType || undefined });
|
|
184
185
|
}
|
|
185
|
-
const
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
document.body.removeChild(tempAnchor);
|
|
193
|
-
return { path: options.path, blob };
|
|
186
|
+
const result = await this.writeFile({
|
|
187
|
+
path: options.path,
|
|
188
|
+
directory: (_a = options.directory) !== null && _a !== void 0 ? _a : undefined,
|
|
189
|
+
recursive: (_b = options.recursive) !== null && _b !== void 0 ? _b : false,
|
|
190
|
+
data: blob,
|
|
191
|
+
});
|
|
192
|
+
return { path: result.uri, blob };
|
|
194
193
|
};
|
|
195
194
|
}
|
|
196
195
|
async initDb() {
|
|
@@ -307,7 +306,7 @@ class FilesystemWeb extends core.WebPlugin {
|
|
|
307
306
|
});
|
|
308
307
|
}
|
|
309
308
|
}
|
|
310
|
-
if (!encoding) {
|
|
309
|
+
if (!encoding && !(data instanceof Blob)) {
|
|
311
310
|
data = data.indexOf(',') >= 0 ? data.split(',')[1] : data;
|
|
312
311
|
if (!this.isBase64String(data))
|
|
313
312
|
throw Error('The supplied data is not valid base64 content.');
|
|
@@ -317,7 +316,7 @@ class FilesystemWeb extends core.WebPlugin {
|
|
|
317
316
|
path: path,
|
|
318
317
|
folder: parentPath,
|
|
319
318
|
type: 'file',
|
|
320
|
-
size: data.length,
|
|
319
|
+
size: data instanceof Blob ? data.size : data.length,
|
|
321
320
|
ctime: now,
|
|
322
321
|
mtime: now,
|
|
323
322
|
content: data,
|
|
@@ -357,6 +356,9 @@ class FilesystemWeb extends core.WebPlugin {
|
|
|
357
356
|
if (!encoding && !this.isBase64String(data))
|
|
358
357
|
throw Error('The supplied data is not valid base64 content.');
|
|
359
358
|
if (occupiedEntry !== undefined) {
|
|
359
|
+
if (occupiedEntry.content instanceof Blob) {
|
|
360
|
+
throw Error('The occupied entry contains a Blob object which cannot be appended to.');
|
|
361
|
+
}
|
|
360
362
|
if (occupiedEntry.content !== undefined && !encoding) {
|
|
361
363
|
data = btoa(atob(occupiedEntry.content) + atob(data));
|
|
362
364
|
}
|
|
@@ -628,7 +630,7 @@ class FilesystemWeb extends core.WebPlugin {
|
|
|
628
630
|
});
|
|
629
631
|
}
|
|
630
632
|
let encoding;
|
|
631
|
-
if (!this.isBase64String(file.data)) {
|
|
633
|
+
if (!(file.data instanceof Blob) && !this.isBase64String(file.data)) {
|
|
632
634
|
encoding = exports.Encoding.UTF8;
|
|
633
635
|
}
|
|
634
636
|
// Write the file to the new location
|
package/dist/plugin.cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.cjs.js","sources":["esm/definitions.js","esm/index.js","esm/web.js"],"sourcesContent":["export var Directory;\n(function (Directory) {\n /**\n * The Documents directory.\n * On iOS it's the app's documents directory.\n * Use this directory to store user-generated content.\n * On Android it's the Public Documents folder, so it's accessible from other apps.\n * It's not accesible on Android 10 unless the app enables legacy External Storage\n * by adding `android:requestLegacyExternalStorage=\"true\"` in the `application` tag\n * in the `AndroidManifest.xml`.\n * On Android 11 or newer the app can only access the files/folders the app created.\n *\n * @since 1.0.0\n */\n Directory[\"Documents\"] = \"DOCUMENTS\";\n /**\n * The Data directory.\n * On iOS it will use the Documents directory.\n * On Android it's the directory holding application files.\n * Files will be deleted when the application is uninstalled.\n *\n * @since 1.0.0\n */\n Directory[\"Data\"] = \"DATA\";\n /**\n * The Library directory.\n * On iOS it will use the Library directory.\n * On Android it's the directory holding application files.\n * Files will be deleted when the application is uninstalled.\n *\n * @since 1.1.0\n */\n Directory[\"Library\"] = \"LIBRARY\";\n /**\n * The Cache directory.\n * Can be deleted in cases of low memory, so use this directory to write app-specific files.\n * that your app can re-create easily.\n *\n * @since 1.0.0\n */\n Directory[\"Cache\"] = \"CACHE\";\n /**\n * The external directory.\n * On iOS it will use the Documents directory.\n * On Android it's the directory on the primary shared/external\n * storage device where the application can place persistent files it owns.\n * These files are internal to the applications, and not typically visible\n * to the user as media.\n * Files will be deleted when the application is uninstalled.\n *\n * @since 1.0.0\n */\n Directory[\"External\"] = \"EXTERNAL\";\n /**\n * The external storage directory.\n * On iOS it will use the Documents directory.\n * On Android it's the primary shared/external storage directory.\n * It's not accesible on Android 10 unless the app enables legacy External Storage\n * by adding `android:requestLegacyExternalStorage=\"true\"` in the `application` tag\n * in the `AndroidManifest.xml`.\n * It's not accesible on Android 11 or newer.\n *\n * @since 1.0.0\n */\n Directory[\"ExternalStorage\"] = \"EXTERNAL_STORAGE\";\n})(Directory || (Directory = {}));\nexport var Encoding;\n(function (Encoding) {\n /**\n * Eight-bit UCS Transformation Format\n *\n * @since 1.0.0\n */\n Encoding[\"UTF8\"] = \"utf8\";\n /**\n * Seven-bit ASCII, a.k.a. ISO646-US, a.k.a. the Basic Latin block of the\n * Unicode character set\n * This encoding is only supported on Android.\n *\n * @since 1.0.0\n */\n Encoding[\"ASCII\"] = \"ascii\";\n /**\n * Sixteen-bit UCS Transformation Format, byte order identified by an\n * optional byte-order mark\n * This encoding is only supported on Android.\n *\n * @since 1.0.0\n */\n Encoding[\"UTF16\"] = \"utf16\";\n})(Encoding || (Encoding = {}));\n/**\n * @deprecated Use `Directory`.\n * @since 1.0.0\n */\nexport const FilesystemDirectory = Directory;\n/**\n * @deprecated Use `Encoding`.\n * @since 1.0.0\n */\nexport const FilesystemEncoding = Encoding;\n//# sourceMappingURL=definitions.js.map","import { registerPlugin } from '@capacitor/core';\nconst Filesystem = registerPlugin('Filesystem', {\n web: () => import('./web').then(m => new m.FilesystemWeb()),\n});\nexport * from './definitions';\nexport { Filesystem };\n//# sourceMappingURL=index.js.map","import { WebPlugin, buildRequestInit } from '@capacitor/core';\nimport { Encoding } from './definitions';\nfunction resolve(path) {\n const posix = path.split('/').filter(item => item !== '.');\n const newPosix = [];\n posix.forEach(item => {\n if (item === '..' &&\n newPosix.length > 0 &&\n newPosix[newPosix.length - 1] !== '..') {\n newPosix.pop();\n }\n else {\n newPosix.push(item);\n }\n });\n return newPosix.join('/');\n}\nfunction isPathParent(parent, children) {\n parent = resolve(parent);\n children = resolve(children);\n const pathsA = parent.split('/');\n const pathsB = children.split('/');\n return (parent !== children &&\n pathsA.every((value, index) => value === pathsB[index]));\n}\nexport class FilesystemWeb extends WebPlugin {\n constructor() {\n super(...arguments);\n this.DB_VERSION = 1;\n this.DB_NAME = 'Disc';\n this._writeCmds = ['add', 'put', 'delete'];\n /**\n * Function that performs a http request to a server and downloads the file to the specified destination\n *\n * @param options the options for the download operation\n * @returns a promise that resolves with the download file result\n */\n this.downloadFile = async (options) => {\n const requestInit = buildRequestInit(options, options.webFetchExtra);\n const response = await fetch(options.url, requestInit);\n let blob;\n if (!(options === null || options === void 0 ? void 0 : options.progress))\n blob = await response.blob();\n else if (!(response === null || response === void 0 ? void 0 : response.body))\n blob = new Blob();\n else {\n const reader = response.body.getReader();\n let bytes = 0;\n const chunks = [];\n const contentType = response.headers.get('content-type');\n const contentLength = parseInt(response.headers.get('content-length') || '0', 10);\n while (true) {\n const { done, value } = await reader.read();\n if (done)\n break;\n chunks.push(value);\n bytes += (value === null || value === void 0 ? void 0 : value.length) || 0;\n const status = {\n url: options.url,\n bytes,\n contentLength,\n };\n this.notifyListeners('progress', status);\n }\n const allChunks = new Uint8Array(bytes);\n let position = 0;\n for (const chunk of chunks) {\n if (typeof chunk === 'undefined')\n continue;\n allChunks.set(chunk, position);\n position += chunk.length;\n }\n blob = new Blob([allChunks.buffer], { type: contentType || undefined });\n }\n const blobUrl = URL.createObjectURL(blob);\n const tempAnchor = document.createElement('a');\n document.body.appendChild(tempAnchor);\n tempAnchor.href = blobUrl;\n tempAnchor.download = options.path; // This should be a filename, not a path\n tempAnchor.click();\n URL.revokeObjectURL(blobUrl);\n document.body.removeChild(tempAnchor);\n return { path: options.path, blob };\n };\n }\n async initDb() {\n if (this._db !== undefined) {\n return this._db;\n }\n if (!('indexedDB' in window)) {\n throw this.unavailable(\"This browser doesn't support IndexedDB\");\n }\n return new Promise((resolve, reject) => {\n const request = indexedDB.open(this.DB_NAME, this.DB_VERSION);\n request.onupgradeneeded = FilesystemWeb.doUpgrade;\n request.onsuccess = () => {\n this._db = request.result;\n resolve(request.result);\n };\n request.onerror = () => reject(request.error);\n request.onblocked = () => {\n console.warn('db blocked');\n };\n });\n }\n static doUpgrade(event) {\n const eventTarget = event.target;\n const db = eventTarget.result;\n switch (event.oldVersion) {\n case 0:\n case 1:\n default: {\n if (db.objectStoreNames.contains('FileStorage')) {\n db.deleteObjectStore('FileStorage');\n }\n const store = db.createObjectStore('FileStorage', { keyPath: 'path' });\n store.createIndex('by_folder', 'folder');\n }\n }\n }\n async dbRequest(cmd, args) {\n const readFlag = this._writeCmds.indexOf(cmd) !== -1 ? 'readwrite' : 'readonly';\n return this.initDb().then((conn) => {\n return new Promise((resolve, reject) => {\n const tx = conn.transaction(['FileStorage'], readFlag);\n const store = tx.objectStore('FileStorage');\n const req = store[cmd](...args);\n req.onsuccess = () => resolve(req.result);\n req.onerror = () => reject(req.error);\n });\n });\n }\n async dbIndexRequest(indexName, cmd, args) {\n const readFlag = this._writeCmds.indexOf(cmd) !== -1 ? 'readwrite' : 'readonly';\n return this.initDb().then((conn) => {\n return new Promise((resolve, reject) => {\n const tx = conn.transaction(['FileStorage'], readFlag);\n const store = tx.objectStore('FileStorage');\n const index = store.index(indexName);\n const req = index[cmd](...args);\n req.onsuccess = () => resolve(req.result);\n req.onerror = () => reject(req.error);\n });\n });\n }\n getPath(directory, uriPath) {\n const cleanedUriPath = uriPath !== undefined ? uriPath.replace(/^[/]+|[/]+$/g, '') : '';\n let fsPath = '';\n if (directory !== undefined)\n fsPath += '/' + directory;\n if (uriPath !== '')\n fsPath += '/' + cleanedUriPath;\n return fsPath;\n }\n async clear() {\n const conn = await this.initDb();\n const tx = conn.transaction(['FileStorage'], 'readwrite');\n const store = tx.objectStore('FileStorage');\n store.clear();\n }\n /**\n * Read a file from disk\n * @param options options for the file read\n * @return a promise that resolves with the read file data result\n */\n async readFile(options) {\n const path = this.getPath(options.directory, options.path);\n // const encoding = options.encoding;\n const entry = (await this.dbRequest('get', [path]));\n if (entry === undefined)\n throw Error('File does not exist.');\n return { data: entry.content ? entry.content : '' };\n }\n /**\n * Write a file to disk in the specified location on device\n * @param options options for the file write\n * @return a promise that resolves with the file write result\n */\n async writeFile(options) {\n const path = this.getPath(options.directory, options.path);\n let data = options.data;\n const encoding = options.encoding;\n const doRecursive = options.recursive;\n const occupiedEntry = (await this.dbRequest('get', [path]));\n if (occupiedEntry && occupiedEntry.type === 'directory')\n throw Error('The supplied path is a directory.');\n const parentPath = path.substr(0, path.lastIndexOf('/'));\n const parentEntry = (await this.dbRequest('get', [parentPath]));\n if (parentEntry === undefined) {\n const subDirIndex = parentPath.indexOf('/', 1);\n if (subDirIndex !== -1) {\n const parentArgPath = parentPath.substr(subDirIndex);\n await this.mkdir({\n path: parentArgPath,\n directory: options.directory,\n recursive: doRecursive,\n });\n }\n }\n if (!encoding) {\n data = data.indexOf(',') >= 0 ? data.split(',')[1] : data;\n if (!this.isBase64String(data))\n throw Error('The supplied data is not valid base64 content.');\n }\n const now = Date.now();\n const pathObj = {\n path: path,\n folder: parentPath,\n type: 'file',\n size: data.length,\n ctime: now,\n mtime: now,\n content: data,\n };\n await this.dbRequest('put', [pathObj]);\n return {\n uri: pathObj.path,\n };\n }\n /**\n * Append to a file on disk in the specified location on device\n * @param options options for the file append\n * @return a promise that resolves with the file write result\n */\n async appendFile(options) {\n const path = this.getPath(options.directory, options.path);\n let data = options.data;\n const encoding = options.encoding;\n const parentPath = path.substr(0, path.lastIndexOf('/'));\n const now = Date.now();\n let ctime = now;\n const occupiedEntry = (await this.dbRequest('get', [path]));\n if (occupiedEntry && occupiedEntry.type === 'directory')\n throw Error('The supplied path is a directory.');\n const parentEntry = (await this.dbRequest('get', [parentPath]));\n if (parentEntry === undefined) {\n const subDirIndex = parentPath.indexOf('/', 1);\n if (subDirIndex !== -1) {\n const parentArgPath = parentPath.substr(subDirIndex);\n await this.mkdir({\n path: parentArgPath,\n directory: options.directory,\n recursive: true,\n });\n }\n }\n if (!encoding && !this.isBase64String(data))\n throw Error('The supplied data is not valid base64 content.');\n if (occupiedEntry !== undefined) {\n if (occupiedEntry.content !== undefined && !encoding) {\n data = btoa(atob(occupiedEntry.content) + atob(data));\n }\n else {\n data = occupiedEntry.content + data;\n }\n ctime = occupiedEntry.ctime;\n }\n const pathObj = {\n path: path,\n folder: parentPath,\n type: 'file',\n size: data.length,\n ctime: ctime,\n mtime: now,\n content: data,\n };\n await this.dbRequest('put', [pathObj]);\n }\n /**\n * Delete a file from disk\n * @param options options for the file delete\n * @return a promise that resolves with the deleted file data result\n */\n async deleteFile(options) {\n const path = this.getPath(options.directory, options.path);\n const entry = (await this.dbRequest('get', [path]));\n if (entry === undefined)\n throw Error('File does not exist.');\n const entries = await this.dbIndexRequest('by_folder', 'getAllKeys', [\n IDBKeyRange.only(path),\n ]);\n if (entries.length !== 0)\n throw Error('Folder is not empty.');\n await this.dbRequest('delete', [path]);\n }\n /**\n * Create a directory.\n * @param options options for the mkdir\n * @return a promise that resolves with the mkdir result\n */\n async mkdir(options) {\n const path = this.getPath(options.directory, options.path);\n const doRecursive = options.recursive;\n const parentPath = path.substr(0, path.lastIndexOf('/'));\n const depth = (path.match(/\\//g) || []).length;\n const parentEntry = (await this.dbRequest('get', [parentPath]));\n const occupiedEntry = (await this.dbRequest('get', [path]));\n if (depth === 1)\n throw Error('Cannot create Root directory');\n if (occupiedEntry !== undefined)\n throw Error('Current directory does already exist.');\n if (!doRecursive && depth !== 2 && parentEntry === undefined)\n throw Error('Parent directory must exist');\n if (doRecursive && depth !== 2 && parentEntry === undefined) {\n const parentArgPath = parentPath.substr(parentPath.indexOf('/', 1));\n await this.mkdir({\n path: parentArgPath,\n directory: options.directory,\n recursive: doRecursive,\n });\n }\n const now = Date.now();\n const pathObj = {\n path: path,\n folder: parentPath,\n type: 'directory',\n size: 0,\n ctime: now,\n mtime: now,\n };\n await this.dbRequest('put', [pathObj]);\n }\n /**\n * Remove a directory\n * @param options the options for the directory remove\n */\n async rmdir(options) {\n const { path, directory, recursive } = options;\n const fullPath = this.getPath(directory, path);\n const entry = (await this.dbRequest('get', [fullPath]));\n if (entry === undefined)\n throw Error('Folder does not exist.');\n if (entry.type !== 'directory')\n throw Error('Requested path is not a directory');\n const readDirResult = await this.readdir({ path, directory });\n if (readDirResult.files.length !== 0 && !recursive)\n throw Error('Folder is not empty');\n for (const entry of readDirResult.files) {\n const entryPath = `${path}/${entry.name}`;\n const entryObj = await this.stat({ path: entryPath, directory });\n if (entryObj.type === 'file') {\n await this.deleteFile({ path: entryPath, directory });\n }\n else {\n await this.rmdir({ path: entryPath, directory, recursive });\n }\n }\n await this.dbRequest('delete', [fullPath]);\n }\n /**\n * Return a list of files from the directory (not recursive)\n * @param options the options for the readdir operation\n * @return a promise that resolves with the readdir directory listing result\n */\n async readdir(options) {\n const path = this.getPath(options.directory, options.path);\n const entry = (await this.dbRequest('get', [path]));\n if (options.path !== '' && entry === undefined)\n throw Error('Folder does not exist.');\n const entries = await this.dbIndexRequest('by_folder', 'getAllKeys', [IDBKeyRange.only(path)]);\n const files = await Promise.all(entries.map(async (e) => {\n let subEntry = (await this.dbRequest('get', [e]));\n if (subEntry === undefined) {\n subEntry = (await this.dbRequest('get', [e + '/']));\n }\n return {\n name: e.substring(path.length + 1),\n type: subEntry.type,\n size: subEntry.size,\n ctime: subEntry.ctime,\n mtime: subEntry.mtime,\n uri: subEntry.path,\n };\n }));\n return { files: files };\n }\n /**\n * Return full File URI for a path and directory\n * @param options the options for the stat operation\n * @return a promise that resolves with the file stat result\n */\n async getUri(options) {\n const path = this.getPath(options.directory, options.path);\n let entry = (await this.dbRequest('get', [path]));\n if (entry === undefined) {\n entry = (await this.dbRequest('get', [path + '/']));\n }\n return {\n uri: (entry === null || entry === void 0 ? void 0 : entry.path) || path,\n };\n }\n /**\n * Return data about a file\n * @param options the options for the stat operation\n * @return a promise that resolves with the file stat result\n */\n async stat(options) {\n const path = this.getPath(options.directory, options.path);\n let entry = (await this.dbRequest('get', [path]));\n if (entry === undefined) {\n entry = (await this.dbRequest('get', [path + '/']));\n }\n if (entry === undefined)\n throw Error('Entry does not exist.');\n return {\n type: entry.type,\n size: entry.size,\n ctime: entry.ctime,\n mtime: entry.mtime,\n uri: entry.path,\n };\n }\n /**\n * Rename a file or directory\n * @param options the options for the rename operation\n * @return a promise that resolves with the rename result\n */\n async rename(options) {\n await this._copy(options, true);\n return;\n }\n /**\n * Copy a file or directory\n * @param options the options for the copy operation\n * @return a promise that resolves with the copy result\n */\n async copy(options) {\n return this._copy(options, false);\n }\n async requestPermissions() {\n return { publicStorage: 'granted' };\n }\n async checkPermissions() {\n return { publicStorage: 'granted' };\n }\n /**\n * Function that can perform a copy or a rename\n * @param options the options for the rename operation\n * @param doRename whether to perform a rename or copy operation\n * @return a promise that resolves with the result\n */\n async _copy(options, doRename = false) {\n let { toDirectory } = options;\n const { to, from, directory: fromDirectory } = options;\n if (!to || !from) {\n throw Error('Both to and from must be provided');\n }\n // If no \"to\" directory is provided, use the \"from\" directory\n if (!toDirectory) {\n toDirectory = fromDirectory;\n }\n const fromPath = this.getPath(fromDirectory, from);\n const toPath = this.getPath(toDirectory, to);\n // Test that the \"to\" and \"from\" locations are different\n if (fromPath === toPath) {\n return {\n uri: toPath,\n };\n }\n if (isPathParent(fromPath, toPath)) {\n throw Error('To path cannot contain the from path');\n }\n // Check the state of the \"to\" location\n let toObj;\n try {\n toObj = await this.stat({\n path: to,\n directory: toDirectory,\n });\n }\n catch (e) {\n // To location does not exist, ensure the directory containing \"to\" location exists and is a directory\n const toPathComponents = to.split('/');\n toPathComponents.pop();\n const toPath = toPathComponents.join('/');\n // Check the containing directory of the \"to\" location exists\n if (toPathComponents.length > 0) {\n const toParentDirectory = await this.stat({\n path: toPath,\n directory: toDirectory,\n });\n if (toParentDirectory.type !== 'directory') {\n throw new Error('Parent directory of the to path is a file');\n }\n }\n }\n // Cannot overwrite a directory\n if (toObj && toObj.type === 'directory') {\n throw new Error('Cannot overwrite a directory with a file');\n }\n // Ensure the \"from\" object exists\n const fromObj = await this.stat({\n path: from,\n directory: fromDirectory,\n });\n // Set the mtime/ctime of the supplied path\n const updateTime = async (path, ctime, mtime) => {\n const fullPath = this.getPath(toDirectory, path);\n const entry = (await this.dbRequest('get', [fullPath]));\n entry.ctime = ctime;\n entry.mtime = mtime;\n await this.dbRequest('put', [entry]);\n };\n const ctime = fromObj.ctime ? fromObj.ctime : Date.now();\n switch (fromObj.type) {\n // The \"from\" object is a file\n case 'file': {\n // Read the file\n const file = await this.readFile({\n path: from,\n directory: fromDirectory,\n });\n // Optionally remove the file\n if (doRename) {\n await this.deleteFile({\n path: from,\n directory: fromDirectory,\n });\n }\n let encoding;\n if (!this.isBase64String(file.data)) {\n encoding = Encoding.UTF8;\n }\n // Write the file to the new location\n const writeResult = await this.writeFile({\n path: to,\n directory: toDirectory,\n data: file.data,\n encoding: encoding,\n });\n // Copy the mtime/ctime of a renamed file\n if (doRename) {\n await updateTime(to, ctime, fromObj.mtime);\n }\n // Resolve promise\n return writeResult;\n }\n case 'directory': {\n if (toObj) {\n throw Error('Cannot move a directory over an existing object');\n }\n try {\n // Create the to directory\n await this.mkdir({\n path: to,\n directory: toDirectory,\n recursive: false,\n });\n // Copy the mtime/ctime of a renamed directory\n if (doRename) {\n await updateTime(to, ctime, fromObj.mtime);\n }\n }\n catch (e) {\n // ignore\n }\n // Iterate over the contents of the from location\n const contents = (await this.readdir({\n path: from,\n directory: fromDirectory,\n })).files;\n for (const filename of contents) {\n // Move item from the from directory to the to directory\n await this._copy({\n from: `${from}/${filename.name}`,\n to: `${to}/${filename.name}`,\n directory: fromDirectory,\n toDirectory,\n }, doRename);\n }\n // Optionally remove the original from directory\n if (doRename) {\n await this.rmdir({\n path: from,\n directory: fromDirectory,\n });\n }\n }\n }\n return {\n uri: toPath,\n };\n }\n isBase64String(str) {\n try {\n return btoa(atob(str)) == str;\n }\n catch (err) {\n return false;\n }\n }\n}\nFilesystemWeb._debug = true;\n//# sourceMappingURL=web.js.map"],"names":["Directory","Encoding","registerPlugin","WebPlugin","buildRequestInit"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"plugin.cjs.js","sources":["esm/definitions.js","esm/index.js","esm/web.js"],"sourcesContent":["export var Directory;\n(function (Directory) {\n /**\n * The Documents directory.\n * On iOS it's the app's documents directory.\n * Use this directory to store user-generated content.\n * On Android it's the Public Documents folder, so it's accessible from other apps.\n * It's not accesible on Android 10 unless the app enables legacy External Storage\n * by adding `android:requestLegacyExternalStorage=\"true\"` in the `application` tag\n * in the `AndroidManifest.xml`.\n * On Android 11 or newer the app can only access the files/folders the app created.\n *\n * @since 1.0.0\n */\n Directory[\"Documents\"] = \"DOCUMENTS\";\n /**\n * The Data directory.\n * On iOS it will use the Documents directory.\n * On Android it's the directory holding application files.\n * Files will be deleted when the application is uninstalled.\n *\n * @since 1.0.0\n */\n Directory[\"Data\"] = \"DATA\";\n /**\n * The Library directory.\n * On iOS it will use the Library directory.\n * On Android it's the directory holding application files.\n * Files will be deleted when the application is uninstalled.\n *\n * @since 1.1.0\n */\n Directory[\"Library\"] = \"LIBRARY\";\n /**\n * The Cache directory.\n * Can be deleted in cases of low memory, so use this directory to write app-specific files.\n * that your app can re-create easily.\n *\n * @since 1.0.0\n */\n Directory[\"Cache\"] = \"CACHE\";\n /**\n * The external directory.\n * On iOS it will use the Documents directory.\n * On Android it's the directory on the primary shared/external\n * storage device where the application can place persistent files it owns.\n * These files are internal to the applications, and not typically visible\n * to the user as media.\n * Files will be deleted when the application is uninstalled.\n *\n * @since 1.0.0\n */\n Directory[\"External\"] = \"EXTERNAL\";\n /**\n * The external storage directory.\n * On iOS it will use the Documents directory.\n * On Android it's the primary shared/external storage directory.\n * It's not accesible on Android 10 unless the app enables legacy External Storage\n * by adding `android:requestLegacyExternalStorage=\"true\"` in the `application` tag\n * in the `AndroidManifest.xml`.\n * It's not accesible on Android 11 or newer.\n *\n * @since 1.0.0\n */\n Directory[\"ExternalStorage\"] = \"EXTERNAL_STORAGE\";\n})(Directory || (Directory = {}));\nexport var Encoding;\n(function (Encoding) {\n /**\n * Eight-bit UCS Transformation Format\n *\n * @since 1.0.0\n */\n Encoding[\"UTF8\"] = \"utf8\";\n /**\n * Seven-bit ASCII, a.k.a. ISO646-US, a.k.a. the Basic Latin block of the\n * Unicode character set\n * This encoding is only supported on Android.\n *\n * @since 1.0.0\n */\n Encoding[\"ASCII\"] = \"ascii\";\n /**\n * Sixteen-bit UCS Transformation Format, byte order identified by an\n * optional byte-order mark\n * This encoding is only supported on Android.\n *\n * @since 1.0.0\n */\n Encoding[\"UTF16\"] = \"utf16\";\n})(Encoding || (Encoding = {}));\n/**\n * @deprecated Use `Directory`.\n * @since 1.0.0\n */\nexport const FilesystemDirectory = Directory;\n/**\n * @deprecated Use `Encoding`.\n * @since 1.0.0\n */\nexport const FilesystemEncoding = Encoding;\n//# sourceMappingURL=definitions.js.map","import { registerPlugin } from '@capacitor/core';\nconst Filesystem = registerPlugin('Filesystem', {\n web: () => import('./web').then(m => new m.FilesystemWeb()),\n});\nexport * from './definitions';\nexport { Filesystem };\n//# sourceMappingURL=index.js.map","import { WebPlugin, buildRequestInit } from '@capacitor/core';\nimport { Encoding } from './definitions';\nfunction resolve(path) {\n const posix = path.split('/').filter(item => item !== '.');\n const newPosix = [];\n posix.forEach(item => {\n if (item === '..' &&\n newPosix.length > 0 &&\n newPosix[newPosix.length - 1] !== '..') {\n newPosix.pop();\n }\n else {\n newPosix.push(item);\n }\n });\n return newPosix.join('/');\n}\nfunction isPathParent(parent, children) {\n parent = resolve(parent);\n children = resolve(children);\n const pathsA = parent.split('/');\n const pathsB = children.split('/');\n return (parent !== children &&\n pathsA.every((value, index) => value === pathsB[index]));\n}\nexport class FilesystemWeb extends WebPlugin {\n constructor() {\n super(...arguments);\n this.DB_VERSION = 1;\n this.DB_NAME = 'Disc';\n this._writeCmds = ['add', 'put', 'delete'];\n /**\n * Function that performs a http request to a server and downloads the file to the specified destination\n *\n * @param options the options for the download operation\n * @returns a promise that resolves with the download file result\n */\n this.downloadFile = async (options) => {\n var _a, _b;\n const requestInit = buildRequestInit(options, options.webFetchExtra);\n const response = await fetch(options.url, requestInit);\n let blob;\n if (!options.progress)\n blob = await response.blob();\n else if (!(response === null || response === void 0 ? void 0 : response.body))\n blob = new Blob();\n else {\n const reader = response.body.getReader();\n let bytes = 0;\n const chunks = [];\n const contentType = response.headers.get('content-type');\n const contentLength = parseInt(response.headers.get('content-length') || '0', 10);\n while (true) {\n const { done, value } = await reader.read();\n if (done)\n break;\n chunks.push(value);\n bytes += (value === null || value === void 0 ? void 0 : value.length) || 0;\n const status = {\n url: options.url,\n bytes,\n contentLength,\n };\n this.notifyListeners('progress', status);\n }\n const allChunks = new Uint8Array(bytes);\n let position = 0;\n for (const chunk of chunks) {\n if (typeof chunk === 'undefined')\n continue;\n allChunks.set(chunk, position);\n position += chunk.length;\n }\n blob = new Blob([allChunks.buffer], { type: contentType || undefined });\n }\n const result = await this.writeFile({\n path: options.path,\n directory: (_a = options.directory) !== null && _a !== void 0 ? _a : undefined,\n recursive: (_b = options.recursive) !== null && _b !== void 0 ? _b : false,\n data: blob,\n });\n return { path: result.uri, blob };\n };\n }\n async initDb() {\n if (this._db !== undefined) {\n return this._db;\n }\n if (!('indexedDB' in window)) {\n throw this.unavailable(\"This browser doesn't support IndexedDB\");\n }\n return new Promise((resolve, reject) => {\n const request = indexedDB.open(this.DB_NAME, this.DB_VERSION);\n request.onupgradeneeded = FilesystemWeb.doUpgrade;\n request.onsuccess = () => {\n this._db = request.result;\n resolve(request.result);\n };\n request.onerror = () => reject(request.error);\n request.onblocked = () => {\n console.warn('db blocked');\n };\n });\n }\n static doUpgrade(event) {\n const eventTarget = event.target;\n const db = eventTarget.result;\n switch (event.oldVersion) {\n case 0:\n case 1:\n default: {\n if (db.objectStoreNames.contains('FileStorage')) {\n db.deleteObjectStore('FileStorage');\n }\n const store = db.createObjectStore('FileStorage', { keyPath: 'path' });\n store.createIndex('by_folder', 'folder');\n }\n }\n }\n async dbRequest(cmd, args) {\n const readFlag = this._writeCmds.indexOf(cmd) !== -1 ? 'readwrite' : 'readonly';\n return this.initDb().then((conn) => {\n return new Promise((resolve, reject) => {\n const tx = conn.transaction(['FileStorage'], readFlag);\n const store = tx.objectStore('FileStorage');\n const req = store[cmd](...args);\n req.onsuccess = () => resolve(req.result);\n req.onerror = () => reject(req.error);\n });\n });\n }\n async dbIndexRequest(indexName, cmd, args) {\n const readFlag = this._writeCmds.indexOf(cmd) !== -1 ? 'readwrite' : 'readonly';\n return this.initDb().then((conn) => {\n return new Promise((resolve, reject) => {\n const tx = conn.transaction(['FileStorage'], readFlag);\n const store = tx.objectStore('FileStorage');\n const index = store.index(indexName);\n const req = index[cmd](...args);\n req.onsuccess = () => resolve(req.result);\n req.onerror = () => reject(req.error);\n });\n });\n }\n getPath(directory, uriPath) {\n const cleanedUriPath = uriPath !== undefined ? uriPath.replace(/^[/]+|[/]+$/g, '') : '';\n let fsPath = '';\n if (directory !== undefined)\n fsPath += '/' + directory;\n if (uriPath !== '')\n fsPath += '/' + cleanedUriPath;\n return fsPath;\n }\n async clear() {\n const conn = await this.initDb();\n const tx = conn.transaction(['FileStorage'], 'readwrite');\n const store = tx.objectStore('FileStorage');\n store.clear();\n }\n /**\n * Read a file from disk\n * @param options options for the file read\n * @return a promise that resolves with the read file data result\n */\n async readFile(options) {\n const path = this.getPath(options.directory, options.path);\n // const encoding = options.encoding;\n const entry = (await this.dbRequest('get', [path]));\n if (entry === undefined)\n throw Error('File does not exist.');\n return { data: entry.content ? entry.content : '' };\n }\n /**\n * Write a file to disk in the specified location on device\n * @param options options for the file write\n * @return a promise that resolves with the file write result\n */\n async writeFile(options) {\n const path = this.getPath(options.directory, options.path);\n let data = options.data;\n const encoding = options.encoding;\n const doRecursive = options.recursive;\n const occupiedEntry = (await this.dbRequest('get', [path]));\n if (occupiedEntry && occupiedEntry.type === 'directory')\n throw Error('The supplied path is a directory.');\n const parentPath = path.substr(0, path.lastIndexOf('/'));\n const parentEntry = (await this.dbRequest('get', [parentPath]));\n if (parentEntry === undefined) {\n const subDirIndex = parentPath.indexOf('/', 1);\n if (subDirIndex !== -1) {\n const parentArgPath = parentPath.substr(subDirIndex);\n await this.mkdir({\n path: parentArgPath,\n directory: options.directory,\n recursive: doRecursive,\n });\n }\n }\n if (!encoding && !(data instanceof Blob)) {\n data = data.indexOf(',') >= 0 ? data.split(',')[1] : data;\n if (!this.isBase64String(data))\n throw Error('The supplied data is not valid base64 content.');\n }\n const now = Date.now();\n const pathObj = {\n path: path,\n folder: parentPath,\n type: 'file',\n size: data instanceof Blob ? data.size : data.length,\n ctime: now,\n mtime: now,\n content: data,\n };\n await this.dbRequest('put', [pathObj]);\n return {\n uri: pathObj.path,\n };\n }\n /**\n * Append to a file on disk in the specified location on device\n * @param options options for the file append\n * @return a promise that resolves with the file write result\n */\n async appendFile(options) {\n const path = this.getPath(options.directory, options.path);\n let data = options.data;\n const encoding = options.encoding;\n const parentPath = path.substr(0, path.lastIndexOf('/'));\n const now = Date.now();\n let ctime = now;\n const occupiedEntry = (await this.dbRequest('get', [path]));\n if (occupiedEntry && occupiedEntry.type === 'directory')\n throw Error('The supplied path is a directory.');\n const parentEntry = (await this.dbRequest('get', [parentPath]));\n if (parentEntry === undefined) {\n const subDirIndex = parentPath.indexOf('/', 1);\n if (subDirIndex !== -1) {\n const parentArgPath = parentPath.substr(subDirIndex);\n await this.mkdir({\n path: parentArgPath,\n directory: options.directory,\n recursive: true,\n });\n }\n }\n if (!encoding && !this.isBase64String(data))\n throw Error('The supplied data is not valid base64 content.');\n if (occupiedEntry !== undefined) {\n if (occupiedEntry.content instanceof Blob) {\n throw Error('The occupied entry contains a Blob object which cannot be appended to.');\n }\n if (occupiedEntry.content !== undefined && !encoding) {\n data = btoa(atob(occupiedEntry.content) + atob(data));\n }\n else {\n data = occupiedEntry.content + data;\n }\n ctime = occupiedEntry.ctime;\n }\n const pathObj = {\n path: path,\n folder: parentPath,\n type: 'file',\n size: data.length,\n ctime: ctime,\n mtime: now,\n content: data,\n };\n await this.dbRequest('put', [pathObj]);\n }\n /**\n * Delete a file from disk\n * @param options options for the file delete\n * @return a promise that resolves with the deleted file data result\n */\n async deleteFile(options) {\n const path = this.getPath(options.directory, options.path);\n const entry = (await this.dbRequest('get', [path]));\n if (entry === undefined)\n throw Error('File does not exist.');\n const entries = await this.dbIndexRequest('by_folder', 'getAllKeys', [\n IDBKeyRange.only(path),\n ]);\n if (entries.length !== 0)\n throw Error('Folder is not empty.');\n await this.dbRequest('delete', [path]);\n }\n /**\n * Create a directory.\n * @param options options for the mkdir\n * @return a promise that resolves with the mkdir result\n */\n async mkdir(options) {\n const path = this.getPath(options.directory, options.path);\n const doRecursive = options.recursive;\n const parentPath = path.substr(0, path.lastIndexOf('/'));\n const depth = (path.match(/\\//g) || []).length;\n const parentEntry = (await this.dbRequest('get', [parentPath]));\n const occupiedEntry = (await this.dbRequest('get', [path]));\n if (depth === 1)\n throw Error('Cannot create Root directory');\n if (occupiedEntry !== undefined)\n throw Error('Current directory does already exist.');\n if (!doRecursive && depth !== 2 && parentEntry === undefined)\n throw Error('Parent directory must exist');\n if (doRecursive && depth !== 2 && parentEntry === undefined) {\n const parentArgPath = parentPath.substr(parentPath.indexOf('/', 1));\n await this.mkdir({\n path: parentArgPath,\n directory: options.directory,\n recursive: doRecursive,\n });\n }\n const now = Date.now();\n const pathObj = {\n path: path,\n folder: parentPath,\n type: 'directory',\n size: 0,\n ctime: now,\n mtime: now,\n };\n await this.dbRequest('put', [pathObj]);\n }\n /**\n * Remove a directory\n * @param options the options for the directory remove\n */\n async rmdir(options) {\n const { path, directory, recursive } = options;\n const fullPath = this.getPath(directory, path);\n const entry = (await this.dbRequest('get', [fullPath]));\n if (entry === undefined)\n throw Error('Folder does not exist.');\n if (entry.type !== 'directory')\n throw Error('Requested path is not a directory');\n const readDirResult = await this.readdir({ path, directory });\n if (readDirResult.files.length !== 0 && !recursive)\n throw Error('Folder is not empty');\n for (const entry of readDirResult.files) {\n const entryPath = `${path}/${entry.name}`;\n const entryObj = await this.stat({ path: entryPath, directory });\n if (entryObj.type === 'file') {\n await this.deleteFile({ path: entryPath, directory });\n }\n else {\n await this.rmdir({ path: entryPath, directory, recursive });\n }\n }\n await this.dbRequest('delete', [fullPath]);\n }\n /**\n * Return a list of files from the directory (not recursive)\n * @param options the options for the readdir operation\n * @return a promise that resolves with the readdir directory listing result\n */\n async readdir(options) {\n const path = this.getPath(options.directory, options.path);\n const entry = (await this.dbRequest('get', [path]));\n if (options.path !== '' && entry === undefined)\n throw Error('Folder does not exist.');\n const entries = await this.dbIndexRequest('by_folder', 'getAllKeys', [IDBKeyRange.only(path)]);\n const files = await Promise.all(entries.map(async (e) => {\n let subEntry = (await this.dbRequest('get', [e]));\n if (subEntry === undefined) {\n subEntry = (await this.dbRequest('get', [e + '/']));\n }\n return {\n name: e.substring(path.length + 1),\n type: subEntry.type,\n size: subEntry.size,\n ctime: subEntry.ctime,\n mtime: subEntry.mtime,\n uri: subEntry.path,\n };\n }));\n return { files: files };\n }\n /**\n * Return full File URI for a path and directory\n * @param options the options for the stat operation\n * @return a promise that resolves with the file stat result\n */\n async getUri(options) {\n const path = this.getPath(options.directory, options.path);\n let entry = (await this.dbRequest('get', [path]));\n if (entry === undefined) {\n entry = (await this.dbRequest('get', [path + '/']));\n }\n return {\n uri: (entry === null || entry === void 0 ? void 0 : entry.path) || path,\n };\n }\n /**\n * Return data about a file\n * @param options the options for the stat operation\n * @return a promise that resolves with the file stat result\n */\n async stat(options) {\n const path = this.getPath(options.directory, options.path);\n let entry = (await this.dbRequest('get', [path]));\n if (entry === undefined) {\n entry = (await this.dbRequest('get', [path + '/']));\n }\n if (entry === undefined)\n throw Error('Entry does not exist.');\n return {\n type: entry.type,\n size: entry.size,\n ctime: entry.ctime,\n mtime: entry.mtime,\n uri: entry.path,\n };\n }\n /**\n * Rename a file or directory\n * @param options the options for the rename operation\n * @return a promise that resolves with the rename result\n */\n async rename(options) {\n await this._copy(options, true);\n return;\n }\n /**\n * Copy a file or directory\n * @param options the options for the copy operation\n * @return a promise that resolves with the copy result\n */\n async copy(options) {\n return this._copy(options, false);\n }\n async requestPermissions() {\n return { publicStorage: 'granted' };\n }\n async checkPermissions() {\n return { publicStorage: 'granted' };\n }\n /**\n * Function that can perform a copy or a rename\n * @param options the options for the rename operation\n * @param doRename whether to perform a rename or copy operation\n * @return a promise that resolves with the result\n */\n async _copy(options, doRename = false) {\n let { toDirectory } = options;\n const { to, from, directory: fromDirectory } = options;\n if (!to || !from) {\n throw Error('Both to and from must be provided');\n }\n // If no \"to\" directory is provided, use the \"from\" directory\n if (!toDirectory) {\n toDirectory = fromDirectory;\n }\n const fromPath = this.getPath(fromDirectory, from);\n const toPath = this.getPath(toDirectory, to);\n // Test that the \"to\" and \"from\" locations are different\n if (fromPath === toPath) {\n return {\n uri: toPath,\n };\n }\n if (isPathParent(fromPath, toPath)) {\n throw Error('To path cannot contain the from path');\n }\n // Check the state of the \"to\" location\n let toObj;\n try {\n toObj = await this.stat({\n path: to,\n directory: toDirectory,\n });\n }\n catch (e) {\n // To location does not exist, ensure the directory containing \"to\" location exists and is a directory\n const toPathComponents = to.split('/');\n toPathComponents.pop();\n const toPath = toPathComponents.join('/');\n // Check the containing directory of the \"to\" location exists\n if (toPathComponents.length > 0) {\n const toParentDirectory = await this.stat({\n path: toPath,\n directory: toDirectory,\n });\n if (toParentDirectory.type !== 'directory') {\n throw new Error('Parent directory of the to path is a file');\n }\n }\n }\n // Cannot overwrite a directory\n if (toObj && toObj.type === 'directory') {\n throw new Error('Cannot overwrite a directory with a file');\n }\n // Ensure the \"from\" object exists\n const fromObj = await this.stat({\n path: from,\n directory: fromDirectory,\n });\n // Set the mtime/ctime of the supplied path\n const updateTime = async (path, ctime, mtime) => {\n const fullPath = this.getPath(toDirectory, path);\n const entry = (await this.dbRequest('get', [fullPath]));\n entry.ctime = ctime;\n entry.mtime = mtime;\n await this.dbRequest('put', [entry]);\n };\n const ctime = fromObj.ctime ? fromObj.ctime : Date.now();\n switch (fromObj.type) {\n // The \"from\" object is a file\n case 'file': {\n // Read the file\n const file = await this.readFile({\n path: from,\n directory: fromDirectory,\n });\n // Optionally remove the file\n if (doRename) {\n await this.deleteFile({\n path: from,\n directory: fromDirectory,\n });\n }\n let encoding;\n if (!(file.data instanceof Blob) && !this.isBase64String(file.data)) {\n encoding = Encoding.UTF8;\n }\n // Write the file to the new location\n const writeResult = await this.writeFile({\n path: to,\n directory: toDirectory,\n data: file.data,\n encoding: encoding,\n });\n // Copy the mtime/ctime of a renamed file\n if (doRename) {\n await updateTime(to, ctime, fromObj.mtime);\n }\n // Resolve promise\n return writeResult;\n }\n case 'directory': {\n if (toObj) {\n throw Error('Cannot move a directory over an existing object');\n }\n try {\n // Create the to directory\n await this.mkdir({\n path: to,\n directory: toDirectory,\n recursive: false,\n });\n // Copy the mtime/ctime of a renamed directory\n if (doRename) {\n await updateTime(to, ctime, fromObj.mtime);\n }\n }\n catch (e) {\n // ignore\n }\n // Iterate over the contents of the from location\n const contents = (await this.readdir({\n path: from,\n directory: fromDirectory,\n })).files;\n for (const filename of contents) {\n // Move item from the from directory to the to directory\n await this._copy({\n from: `${from}/${filename.name}`,\n to: `${to}/${filename.name}`,\n directory: fromDirectory,\n toDirectory,\n }, doRename);\n }\n // Optionally remove the original from directory\n if (doRename) {\n await this.rmdir({\n path: from,\n directory: fromDirectory,\n });\n }\n }\n }\n return {\n uri: toPath,\n };\n }\n isBase64String(str) {\n try {\n return btoa(atob(str)) == str;\n }\n catch (err) {\n return false;\n }\n }\n}\nFilesystemWeb._debug = true;\n//# sourceMappingURL=web.js.map"],"names":["Directory","Encoding","registerPlugin","WebPlugin","buildRequestInit"],"mappings":"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"}
|
package/dist/plugin.js
CHANGED
|
@@ -143,10 +143,11 @@ var capacitorFilesystem = (function (exports, core) {
|
|
|
143
143
|
* @returns a promise that resolves with the download file result
|
|
144
144
|
*/
|
|
145
145
|
this.downloadFile = async (options) => {
|
|
146
|
+
var _a, _b;
|
|
146
147
|
const requestInit = core.buildRequestInit(options, options.webFetchExtra);
|
|
147
148
|
const response = await fetch(options.url, requestInit);
|
|
148
149
|
let blob;
|
|
149
|
-
if (!
|
|
150
|
+
if (!options.progress)
|
|
150
151
|
blob = await response.blob();
|
|
151
152
|
else if (!(response === null || response === void 0 ? void 0 : response.body))
|
|
152
153
|
blob = new Blob();
|
|
@@ -179,15 +180,13 @@ var capacitorFilesystem = (function (exports, core) {
|
|
|
179
180
|
}
|
|
180
181
|
blob = new Blob([allChunks.buffer], { type: contentType || undefined });
|
|
181
182
|
}
|
|
182
|
-
const
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
document.body.removeChild(tempAnchor);
|
|
190
|
-
return { path: options.path, blob };
|
|
183
|
+
const result = await this.writeFile({
|
|
184
|
+
path: options.path,
|
|
185
|
+
directory: (_a = options.directory) !== null && _a !== void 0 ? _a : undefined,
|
|
186
|
+
recursive: (_b = options.recursive) !== null && _b !== void 0 ? _b : false,
|
|
187
|
+
data: blob,
|
|
188
|
+
});
|
|
189
|
+
return { path: result.uri, blob };
|
|
191
190
|
};
|
|
192
191
|
}
|
|
193
192
|
async initDb() {
|
|
@@ -304,7 +303,7 @@ var capacitorFilesystem = (function (exports, core) {
|
|
|
304
303
|
});
|
|
305
304
|
}
|
|
306
305
|
}
|
|
307
|
-
if (!encoding) {
|
|
306
|
+
if (!encoding && !(data instanceof Blob)) {
|
|
308
307
|
data = data.indexOf(',') >= 0 ? data.split(',')[1] : data;
|
|
309
308
|
if (!this.isBase64String(data))
|
|
310
309
|
throw Error('The supplied data is not valid base64 content.');
|
|
@@ -314,7 +313,7 @@ var capacitorFilesystem = (function (exports, core) {
|
|
|
314
313
|
path: path,
|
|
315
314
|
folder: parentPath,
|
|
316
315
|
type: 'file',
|
|
317
|
-
size: data.length,
|
|
316
|
+
size: data instanceof Blob ? data.size : data.length,
|
|
318
317
|
ctime: now,
|
|
319
318
|
mtime: now,
|
|
320
319
|
content: data,
|
|
@@ -354,6 +353,9 @@ var capacitorFilesystem = (function (exports, core) {
|
|
|
354
353
|
if (!encoding && !this.isBase64String(data))
|
|
355
354
|
throw Error('The supplied data is not valid base64 content.');
|
|
356
355
|
if (occupiedEntry !== undefined) {
|
|
356
|
+
if (occupiedEntry.content instanceof Blob) {
|
|
357
|
+
throw Error('The occupied entry contains a Blob object which cannot be appended to.');
|
|
358
|
+
}
|
|
357
359
|
if (occupiedEntry.content !== undefined && !encoding) {
|
|
358
360
|
data = btoa(atob(occupiedEntry.content) + atob(data));
|
|
359
361
|
}
|
|
@@ -625,7 +627,7 @@ var capacitorFilesystem = (function (exports, core) {
|
|
|
625
627
|
});
|
|
626
628
|
}
|
|
627
629
|
let encoding;
|
|
628
|
-
if (!this.isBase64String(file.data)) {
|
|
630
|
+
if (!(file.data instanceof Blob) && !this.isBase64String(file.data)) {
|
|
629
631
|
encoding = exports.Encoding.UTF8;
|
|
630
632
|
}
|
|
631
633
|
// Write the file to the new location
|
package/dist/plugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","sources":["esm/definitions.js","esm/index.js","esm/web.js"],"sourcesContent":["export var Directory;\n(function (Directory) {\n /**\n * The Documents directory.\n * On iOS it's the app's documents directory.\n * Use this directory to store user-generated content.\n * On Android it's the Public Documents folder, so it's accessible from other apps.\n * It's not accesible on Android 10 unless the app enables legacy External Storage\n * by adding `android:requestLegacyExternalStorage=\"true\"` in the `application` tag\n * in the `AndroidManifest.xml`.\n * On Android 11 or newer the app can only access the files/folders the app created.\n *\n * @since 1.0.0\n */\n Directory[\"Documents\"] = \"DOCUMENTS\";\n /**\n * The Data directory.\n * On iOS it will use the Documents directory.\n * On Android it's the directory holding application files.\n * Files will be deleted when the application is uninstalled.\n *\n * @since 1.0.0\n */\n Directory[\"Data\"] = \"DATA\";\n /**\n * The Library directory.\n * On iOS it will use the Library directory.\n * On Android it's the directory holding application files.\n * Files will be deleted when the application is uninstalled.\n *\n * @since 1.1.0\n */\n Directory[\"Library\"] = \"LIBRARY\";\n /**\n * The Cache directory.\n * Can be deleted in cases of low memory, so use this directory to write app-specific files.\n * that your app can re-create easily.\n *\n * @since 1.0.0\n */\n Directory[\"Cache\"] = \"CACHE\";\n /**\n * The external directory.\n * On iOS it will use the Documents directory.\n * On Android it's the directory on the primary shared/external\n * storage device where the application can place persistent files it owns.\n * These files are internal to the applications, and not typically visible\n * to the user as media.\n * Files will be deleted when the application is uninstalled.\n *\n * @since 1.0.0\n */\n Directory[\"External\"] = \"EXTERNAL\";\n /**\n * The external storage directory.\n * On iOS it will use the Documents directory.\n * On Android it's the primary shared/external storage directory.\n * It's not accesible on Android 10 unless the app enables legacy External Storage\n * by adding `android:requestLegacyExternalStorage=\"true\"` in the `application` tag\n * in the `AndroidManifest.xml`.\n * It's not accesible on Android 11 or newer.\n *\n * @since 1.0.0\n */\n Directory[\"ExternalStorage\"] = \"EXTERNAL_STORAGE\";\n})(Directory || (Directory = {}));\nexport var Encoding;\n(function (Encoding) {\n /**\n * Eight-bit UCS Transformation Format\n *\n * @since 1.0.0\n */\n Encoding[\"UTF8\"] = \"utf8\";\n /**\n * Seven-bit ASCII, a.k.a. ISO646-US, a.k.a. the Basic Latin block of the\n * Unicode character set\n * This encoding is only supported on Android.\n *\n * @since 1.0.0\n */\n Encoding[\"ASCII\"] = \"ascii\";\n /**\n * Sixteen-bit UCS Transformation Format, byte order identified by an\n * optional byte-order mark\n * This encoding is only supported on Android.\n *\n * @since 1.0.0\n */\n Encoding[\"UTF16\"] = \"utf16\";\n})(Encoding || (Encoding = {}));\n/**\n * @deprecated Use `Directory`.\n * @since 1.0.0\n */\nexport const FilesystemDirectory = Directory;\n/**\n * @deprecated Use `Encoding`.\n * @since 1.0.0\n */\nexport const FilesystemEncoding = Encoding;\n//# sourceMappingURL=definitions.js.map","import { registerPlugin } from '@capacitor/core';\nconst Filesystem = registerPlugin('Filesystem', {\n web: () => import('./web').then(m => new m.FilesystemWeb()),\n});\nexport * from './definitions';\nexport { Filesystem };\n//# sourceMappingURL=index.js.map","import { WebPlugin, buildRequestInit } from '@capacitor/core';\nimport { Encoding } from './definitions';\nfunction resolve(path) {\n const posix = path.split('/').filter(item => item !== '.');\n const newPosix = [];\n posix.forEach(item => {\n if (item === '..' &&\n newPosix.length > 0 &&\n newPosix[newPosix.length - 1] !== '..') {\n newPosix.pop();\n }\n else {\n newPosix.push(item);\n }\n });\n return newPosix.join('/');\n}\nfunction isPathParent(parent, children) {\n parent = resolve(parent);\n children = resolve(children);\n const pathsA = parent.split('/');\n const pathsB = children.split('/');\n return (parent !== children &&\n pathsA.every((value, index) => value === pathsB[index]));\n}\nexport class FilesystemWeb extends WebPlugin {\n constructor() {\n super(...arguments);\n this.DB_VERSION = 1;\n this.DB_NAME = 'Disc';\n this._writeCmds = ['add', 'put', 'delete'];\n /**\n * Function that performs a http request to a server and downloads the file to the specified destination\n *\n * @param options the options for the download operation\n * @returns a promise that resolves with the download file result\n */\n this.downloadFile = async (options) => {\n const requestInit = buildRequestInit(options, options.webFetchExtra);\n const response = await fetch(options.url, requestInit);\n let blob;\n if (!(options === null || options === void 0 ? void 0 : options.progress))\n blob = await response.blob();\n else if (!(response === null || response === void 0 ? void 0 : response.body))\n blob = new Blob();\n else {\n const reader = response.body.getReader();\n let bytes = 0;\n const chunks = [];\n const contentType = response.headers.get('content-type');\n const contentLength = parseInt(response.headers.get('content-length') || '0', 10);\n while (true) {\n const { done, value } = await reader.read();\n if (done)\n break;\n chunks.push(value);\n bytes += (value === null || value === void 0 ? void 0 : value.length) || 0;\n const status = {\n url: options.url,\n bytes,\n contentLength,\n };\n this.notifyListeners('progress', status);\n }\n const allChunks = new Uint8Array(bytes);\n let position = 0;\n for (const chunk of chunks) {\n if (typeof chunk === 'undefined')\n continue;\n allChunks.set(chunk, position);\n position += chunk.length;\n }\n blob = new Blob([allChunks.buffer], { type: contentType || undefined });\n }\n const blobUrl = URL.createObjectURL(blob);\n const tempAnchor = document.createElement('a');\n document.body.appendChild(tempAnchor);\n tempAnchor.href = blobUrl;\n tempAnchor.download = options.path; // This should be a filename, not a path\n tempAnchor.click();\n URL.revokeObjectURL(blobUrl);\n document.body.removeChild(tempAnchor);\n return { path: options.path, blob };\n };\n }\n async initDb() {\n if (this._db !== undefined) {\n return this._db;\n }\n if (!('indexedDB' in window)) {\n throw this.unavailable(\"This browser doesn't support IndexedDB\");\n }\n return new Promise((resolve, reject) => {\n const request = indexedDB.open(this.DB_NAME, this.DB_VERSION);\n request.onupgradeneeded = FilesystemWeb.doUpgrade;\n request.onsuccess = () => {\n this._db = request.result;\n resolve(request.result);\n };\n request.onerror = () => reject(request.error);\n request.onblocked = () => {\n console.warn('db blocked');\n };\n });\n }\n static doUpgrade(event) {\n const eventTarget = event.target;\n const db = eventTarget.result;\n switch (event.oldVersion) {\n case 0:\n case 1:\n default: {\n if (db.objectStoreNames.contains('FileStorage')) {\n db.deleteObjectStore('FileStorage');\n }\n const store = db.createObjectStore('FileStorage', { keyPath: 'path' });\n store.createIndex('by_folder', 'folder');\n }\n }\n }\n async dbRequest(cmd, args) {\n const readFlag = this._writeCmds.indexOf(cmd) !== -1 ? 'readwrite' : 'readonly';\n return this.initDb().then((conn) => {\n return new Promise((resolve, reject) => {\n const tx = conn.transaction(['FileStorage'], readFlag);\n const store = tx.objectStore('FileStorage');\n const req = store[cmd](...args);\n req.onsuccess = () => resolve(req.result);\n req.onerror = () => reject(req.error);\n });\n });\n }\n async dbIndexRequest(indexName, cmd, args) {\n const readFlag = this._writeCmds.indexOf(cmd) !== -1 ? 'readwrite' : 'readonly';\n return this.initDb().then((conn) => {\n return new Promise((resolve, reject) => {\n const tx = conn.transaction(['FileStorage'], readFlag);\n const store = tx.objectStore('FileStorage');\n const index = store.index(indexName);\n const req = index[cmd](...args);\n req.onsuccess = () => resolve(req.result);\n req.onerror = () => reject(req.error);\n });\n });\n }\n getPath(directory, uriPath) {\n const cleanedUriPath = uriPath !== undefined ? uriPath.replace(/^[/]+|[/]+$/g, '') : '';\n let fsPath = '';\n if (directory !== undefined)\n fsPath += '/' + directory;\n if (uriPath !== '')\n fsPath += '/' + cleanedUriPath;\n return fsPath;\n }\n async clear() {\n const conn = await this.initDb();\n const tx = conn.transaction(['FileStorage'], 'readwrite');\n const store = tx.objectStore('FileStorage');\n store.clear();\n }\n /**\n * Read a file from disk\n * @param options options for the file read\n * @return a promise that resolves with the read file data result\n */\n async readFile(options) {\n const path = this.getPath(options.directory, options.path);\n // const encoding = options.encoding;\n const entry = (await this.dbRequest('get', [path]));\n if (entry === undefined)\n throw Error('File does not exist.');\n return { data: entry.content ? entry.content : '' };\n }\n /**\n * Write a file to disk in the specified location on device\n * @param options options for the file write\n * @return a promise that resolves with the file write result\n */\n async writeFile(options) {\n const path = this.getPath(options.directory, options.path);\n let data = options.data;\n const encoding = options.encoding;\n const doRecursive = options.recursive;\n const occupiedEntry = (await this.dbRequest('get', [path]));\n if (occupiedEntry && occupiedEntry.type === 'directory')\n throw Error('The supplied path is a directory.');\n const parentPath = path.substr(0, path.lastIndexOf('/'));\n const parentEntry = (await this.dbRequest('get', [parentPath]));\n if (parentEntry === undefined) {\n const subDirIndex = parentPath.indexOf('/', 1);\n if (subDirIndex !== -1) {\n const parentArgPath = parentPath.substr(subDirIndex);\n await this.mkdir({\n path: parentArgPath,\n directory: options.directory,\n recursive: doRecursive,\n });\n }\n }\n if (!encoding) {\n data = data.indexOf(',') >= 0 ? data.split(',')[1] : data;\n if (!this.isBase64String(data))\n throw Error('The supplied data is not valid base64 content.');\n }\n const now = Date.now();\n const pathObj = {\n path: path,\n folder: parentPath,\n type: 'file',\n size: data.length,\n ctime: now,\n mtime: now,\n content: data,\n };\n await this.dbRequest('put', [pathObj]);\n return {\n uri: pathObj.path,\n };\n }\n /**\n * Append to a file on disk in the specified location on device\n * @param options options for the file append\n * @return a promise that resolves with the file write result\n */\n async appendFile(options) {\n const path = this.getPath(options.directory, options.path);\n let data = options.data;\n const encoding = options.encoding;\n const parentPath = path.substr(0, path.lastIndexOf('/'));\n const now = Date.now();\n let ctime = now;\n const occupiedEntry = (await this.dbRequest('get', [path]));\n if (occupiedEntry && occupiedEntry.type === 'directory')\n throw Error('The supplied path is a directory.');\n const parentEntry = (await this.dbRequest('get', [parentPath]));\n if (parentEntry === undefined) {\n const subDirIndex = parentPath.indexOf('/', 1);\n if (subDirIndex !== -1) {\n const parentArgPath = parentPath.substr(subDirIndex);\n await this.mkdir({\n path: parentArgPath,\n directory: options.directory,\n recursive: true,\n });\n }\n }\n if (!encoding && !this.isBase64String(data))\n throw Error('The supplied data is not valid base64 content.');\n if (occupiedEntry !== undefined) {\n if (occupiedEntry.content !== undefined && !encoding) {\n data = btoa(atob(occupiedEntry.content) + atob(data));\n }\n else {\n data = occupiedEntry.content + data;\n }\n ctime = occupiedEntry.ctime;\n }\n const pathObj = {\n path: path,\n folder: parentPath,\n type: 'file',\n size: data.length,\n ctime: ctime,\n mtime: now,\n content: data,\n };\n await this.dbRequest('put', [pathObj]);\n }\n /**\n * Delete a file from disk\n * @param options options for the file delete\n * @return a promise that resolves with the deleted file data result\n */\n async deleteFile(options) {\n const path = this.getPath(options.directory, options.path);\n const entry = (await this.dbRequest('get', [path]));\n if (entry === undefined)\n throw Error('File does not exist.');\n const entries = await this.dbIndexRequest('by_folder', 'getAllKeys', [\n IDBKeyRange.only(path),\n ]);\n if (entries.length !== 0)\n throw Error('Folder is not empty.');\n await this.dbRequest('delete', [path]);\n }\n /**\n * Create a directory.\n * @param options options for the mkdir\n * @return a promise that resolves with the mkdir result\n */\n async mkdir(options) {\n const path = this.getPath(options.directory, options.path);\n const doRecursive = options.recursive;\n const parentPath = path.substr(0, path.lastIndexOf('/'));\n const depth = (path.match(/\\//g) || []).length;\n const parentEntry = (await this.dbRequest('get', [parentPath]));\n const occupiedEntry = (await this.dbRequest('get', [path]));\n if (depth === 1)\n throw Error('Cannot create Root directory');\n if (occupiedEntry !== undefined)\n throw Error('Current directory does already exist.');\n if (!doRecursive && depth !== 2 && parentEntry === undefined)\n throw Error('Parent directory must exist');\n if (doRecursive && depth !== 2 && parentEntry === undefined) {\n const parentArgPath = parentPath.substr(parentPath.indexOf('/', 1));\n await this.mkdir({\n path: parentArgPath,\n directory: options.directory,\n recursive: doRecursive,\n });\n }\n const now = Date.now();\n const pathObj = {\n path: path,\n folder: parentPath,\n type: 'directory',\n size: 0,\n ctime: now,\n mtime: now,\n };\n await this.dbRequest('put', [pathObj]);\n }\n /**\n * Remove a directory\n * @param options the options for the directory remove\n */\n async rmdir(options) {\n const { path, directory, recursive } = options;\n const fullPath = this.getPath(directory, path);\n const entry = (await this.dbRequest('get', [fullPath]));\n if (entry === undefined)\n throw Error('Folder does not exist.');\n if (entry.type !== 'directory')\n throw Error('Requested path is not a directory');\n const readDirResult = await this.readdir({ path, directory });\n if (readDirResult.files.length !== 0 && !recursive)\n throw Error('Folder is not empty');\n for (const entry of readDirResult.files) {\n const entryPath = `${path}/${entry.name}`;\n const entryObj = await this.stat({ path: entryPath, directory });\n if (entryObj.type === 'file') {\n await this.deleteFile({ path: entryPath, directory });\n }\n else {\n await this.rmdir({ path: entryPath, directory, recursive });\n }\n }\n await this.dbRequest('delete', [fullPath]);\n }\n /**\n * Return a list of files from the directory (not recursive)\n * @param options the options for the readdir operation\n * @return a promise that resolves with the readdir directory listing result\n */\n async readdir(options) {\n const path = this.getPath(options.directory, options.path);\n const entry = (await this.dbRequest('get', [path]));\n if (options.path !== '' && entry === undefined)\n throw Error('Folder does not exist.');\n const entries = await this.dbIndexRequest('by_folder', 'getAllKeys', [IDBKeyRange.only(path)]);\n const files = await Promise.all(entries.map(async (e) => {\n let subEntry = (await this.dbRequest('get', [e]));\n if (subEntry === undefined) {\n subEntry = (await this.dbRequest('get', [e + '/']));\n }\n return {\n name: e.substring(path.length + 1),\n type: subEntry.type,\n size: subEntry.size,\n ctime: subEntry.ctime,\n mtime: subEntry.mtime,\n uri: subEntry.path,\n };\n }));\n return { files: files };\n }\n /**\n * Return full File URI for a path and directory\n * @param options the options for the stat operation\n * @return a promise that resolves with the file stat result\n */\n async getUri(options) {\n const path = this.getPath(options.directory, options.path);\n let entry = (await this.dbRequest('get', [path]));\n if (entry === undefined) {\n entry = (await this.dbRequest('get', [path + '/']));\n }\n return {\n uri: (entry === null || entry === void 0 ? void 0 : entry.path) || path,\n };\n }\n /**\n * Return data about a file\n * @param options the options for the stat operation\n * @return a promise that resolves with the file stat result\n */\n async stat(options) {\n const path = this.getPath(options.directory, options.path);\n let entry = (await this.dbRequest('get', [path]));\n if (entry === undefined) {\n entry = (await this.dbRequest('get', [path + '/']));\n }\n if (entry === undefined)\n throw Error('Entry does not exist.');\n return {\n type: entry.type,\n size: entry.size,\n ctime: entry.ctime,\n mtime: entry.mtime,\n uri: entry.path,\n };\n }\n /**\n * Rename a file or directory\n * @param options the options for the rename operation\n * @return a promise that resolves with the rename result\n */\n async rename(options) {\n await this._copy(options, true);\n return;\n }\n /**\n * Copy a file or directory\n * @param options the options for the copy operation\n * @return a promise that resolves with the copy result\n */\n async copy(options) {\n return this._copy(options, false);\n }\n async requestPermissions() {\n return { publicStorage: 'granted' };\n }\n async checkPermissions() {\n return { publicStorage: 'granted' };\n }\n /**\n * Function that can perform a copy or a rename\n * @param options the options for the rename operation\n * @param doRename whether to perform a rename or copy operation\n * @return a promise that resolves with the result\n */\n async _copy(options, doRename = false) {\n let { toDirectory } = options;\n const { to, from, directory: fromDirectory } = options;\n if (!to || !from) {\n throw Error('Both to and from must be provided');\n }\n // If no \"to\" directory is provided, use the \"from\" directory\n if (!toDirectory) {\n toDirectory = fromDirectory;\n }\n const fromPath = this.getPath(fromDirectory, from);\n const toPath = this.getPath(toDirectory, to);\n // Test that the \"to\" and \"from\" locations are different\n if (fromPath === toPath) {\n return {\n uri: toPath,\n };\n }\n if (isPathParent(fromPath, toPath)) {\n throw Error('To path cannot contain the from path');\n }\n // Check the state of the \"to\" location\n let toObj;\n try {\n toObj = await this.stat({\n path: to,\n directory: toDirectory,\n });\n }\n catch (e) {\n // To location does not exist, ensure the directory containing \"to\" location exists and is a directory\n const toPathComponents = to.split('/');\n toPathComponents.pop();\n const toPath = toPathComponents.join('/');\n // Check the containing directory of the \"to\" location exists\n if (toPathComponents.length > 0) {\n const toParentDirectory = await this.stat({\n path: toPath,\n directory: toDirectory,\n });\n if (toParentDirectory.type !== 'directory') {\n throw new Error('Parent directory of the to path is a file');\n }\n }\n }\n // Cannot overwrite a directory\n if (toObj && toObj.type === 'directory') {\n throw new Error('Cannot overwrite a directory with a file');\n }\n // Ensure the \"from\" object exists\n const fromObj = await this.stat({\n path: from,\n directory: fromDirectory,\n });\n // Set the mtime/ctime of the supplied path\n const updateTime = async (path, ctime, mtime) => {\n const fullPath = this.getPath(toDirectory, path);\n const entry = (await this.dbRequest('get', [fullPath]));\n entry.ctime = ctime;\n entry.mtime = mtime;\n await this.dbRequest('put', [entry]);\n };\n const ctime = fromObj.ctime ? fromObj.ctime : Date.now();\n switch (fromObj.type) {\n // The \"from\" object is a file\n case 'file': {\n // Read the file\n const file = await this.readFile({\n path: from,\n directory: fromDirectory,\n });\n // Optionally remove the file\n if (doRename) {\n await this.deleteFile({\n path: from,\n directory: fromDirectory,\n });\n }\n let encoding;\n if (!this.isBase64String(file.data)) {\n encoding = Encoding.UTF8;\n }\n // Write the file to the new location\n const writeResult = await this.writeFile({\n path: to,\n directory: toDirectory,\n data: file.data,\n encoding: encoding,\n });\n // Copy the mtime/ctime of a renamed file\n if (doRename) {\n await updateTime(to, ctime, fromObj.mtime);\n }\n // Resolve promise\n return writeResult;\n }\n case 'directory': {\n if (toObj) {\n throw Error('Cannot move a directory over an existing object');\n }\n try {\n // Create the to directory\n await this.mkdir({\n path: to,\n directory: toDirectory,\n recursive: false,\n });\n // Copy the mtime/ctime of a renamed directory\n if (doRename) {\n await updateTime(to, ctime, fromObj.mtime);\n }\n }\n catch (e) {\n // ignore\n }\n // Iterate over the contents of the from location\n const contents = (await this.readdir({\n path: from,\n directory: fromDirectory,\n })).files;\n for (const filename of contents) {\n // Move item from the from directory to the to directory\n await this._copy({\n from: `${from}/${filename.name}`,\n to: `${to}/${filename.name}`,\n directory: fromDirectory,\n toDirectory,\n }, doRename);\n }\n // Optionally remove the original from directory\n if (doRename) {\n await this.rmdir({\n path: from,\n directory: fromDirectory,\n });\n }\n }\n }\n return {\n uri: toPath,\n };\n }\n isBase64String(str) {\n try {\n return btoa(atob(str)) == str;\n }\n catch (err) {\n return false;\n }\n }\n}\nFilesystemWeb._debug = true;\n//# sourceMappingURL=web.js.map"],"names":["Directory","Encoding","registerPlugin","WebPlugin","buildRequestInit"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"plugin.js","sources":["esm/definitions.js","esm/index.js","esm/web.js"],"sourcesContent":["export var Directory;\n(function (Directory) {\n /**\n * The Documents directory.\n * On iOS it's the app's documents directory.\n * Use this directory to store user-generated content.\n * On Android it's the Public Documents folder, so it's accessible from other apps.\n * It's not accesible on Android 10 unless the app enables legacy External Storage\n * by adding `android:requestLegacyExternalStorage=\"true\"` in the `application` tag\n * in the `AndroidManifest.xml`.\n * On Android 11 or newer the app can only access the files/folders the app created.\n *\n * @since 1.0.0\n */\n Directory[\"Documents\"] = \"DOCUMENTS\";\n /**\n * The Data directory.\n * On iOS it will use the Documents directory.\n * On Android it's the directory holding application files.\n * Files will be deleted when the application is uninstalled.\n *\n * @since 1.0.0\n */\n Directory[\"Data\"] = \"DATA\";\n /**\n * The Library directory.\n * On iOS it will use the Library directory.\n * On Android it's the directory holding application files.\n * Files will be deleted when the application is uninstalled.\n *\n * @since 1.1.0\n */\n Directory[\"Library\"] = \"LIBRARY\";\n /**\n * The Cache directory.\n * Can be deleted in cases of low memory, so use this directory to write app-specific files.\n * that your app can re-create easily.\n *\n * @since 1.0.0\n */\n Directory[\"Cache\"] = \"CACHE\";\n /**\n * The external directory.\n * On iOS it will use the Documents directory.\n * On Android it's the directory on the primary shared/external\n * storage device where the application can place persistent files it owns.\n * These files are internal to the applications, and not typically visible\n * to the user as media.\n * Files will be deleted when the application is uninstalled.\n *\n * @since 1.0.0\n */\n Directory[\"External\"] = \"EXTERNAL\";\n /**\n * The external storage directory.\n * On iOS it will use the Documents directory.\n * On Android it's the primary shared/external storage directory.\n * It's not accesible on Android 10 unless the app enables legacy External Storage\n * by adding `android:requestLegacyExternalStorage=\"true\"` in the `application` tag\n * in the `AndroidManifest.xml`.\n * It's not accesible on Android 11 or newer.\n *\n * @since 1.0.0\n */\n Directory[\"ExternalStorage\"] = \"EXTERNAL_STORAGE\";\n})(Directory || (Directory = {}));\nexport var Encoding;\n(function (Encoding) {\n /**\n * Eight-bit UCS Transformation Format\n *\n * @since 1.0.0\n */\n Encoding[\"UTF8\"] = \"utf8\";\n /**\n * Seven-bit ASCII, a.k.a. ISO646-US, a.k.a. the Basic Latin block of the\n * Unicode character set\n * This encoding is only supported on Android.\n *\n * @since 1.0.0\n */\n Encoding[\"ASCII\"] = \"ascii\";\n /**\n * Sixteen-bit UCS Transformation Format, byte order identified by an\n * optional byte-order mark\n * This encoding is only supported on Android.\n *\n * @since 1.0.0\n */\n Encoding[\"UTF16\"] = \"utf16\";\n})(Encoding || (Encoding = {}));\n/**\n * @deprecated Use `Directory`.\n * @since 1.0.0\n */\nexport const FilesystemDirectory = Directory;\n/**\n * @deprecated Use `Encoding`.\n * @since 1.0.0\n */\nexport const FilesystemEncoding = Encoding;\n//# sourceMappingURL=definitions.js.map","import { registerPlugin } from '@capacitor/core';\nconst Filesystem = registerPlugin('Filesystem', {\n web: () => import('./web').then(m => new m.FilesystemWeb()),\n});\nexport * from './definitions';\nexport { Filesystem };\n//# sourceMappingURL=index.js.map","import { WebPlugin, buildRequestInit } from '@capacitor/core';\nimport { Encoding } from './definitions';\nfunction resolve(path) {\n const posix = path.split('/').filter(item => item !== '.');\n const newPosix = [];\n posix.forEach(item => {\n if (item === '..' &&\n newPosix.length > 0 &&\n newPosix[newPosix.length - 1] !== '..') {\n newPosix.pop();\n }\n else {\n newPosix.push(item);\n }\n });\n return newPosix.join('/');\n}\nfunction isPathParent(parent, children) {\n parent = resolve(parent);\n children = resolve(children);\n const pathsA = parent.split('/');\n const pathsB = children.split('/');\n return (parent !== children &&\n pathsA.every((value, index) => value === pathsB[index]));\n}\nexport class FilesystemWeb extends WebPlugin {\n constructor() {\n super(...arguments);\n this.DB_VERSION = 1;\n this.DB_NAME = 'Disc';\n this._writeCmds = ['add', 'put', 'delete'];\n /**\n * Function that performs a http request to a server and downloads the file to the specified destination\n *\n * @param options the options for the download operation\n * @returns a promise that resolves with the download file result\n */\n this.downloadFile = async (options) => {\n var _a, _b;\n const requestInit = buildRequestInit(options, options.webFetchExtra);\n const response = await fetch(options.url, requestInit);\n let blob;\n if (!options.progress)\n blob = await response.blob();\n else if (!(response === null || response === void 0 ? void 0 : response.body))\n blob = new Blob();\n else {\n const reader = response.body.getReader();\n let bytes = 0;\n const chunks = [];\n const contentType = response.headers.get('content-type');\n const contentLength = parseInt(response.headers.get('content-length') || '0', 10);\n while (true) {\n const { done, value } = await reader.read();\n if (done)\n break;\n chunks.push(value);\n bytes += (value === null || value === void 0 ? void 0 : value.length) || 0;\n const status = {\n url: options.url,\n bytes,\n contentLength,\n };\n this.notifyListeners('progress', status);\n }\n const allChunks = new Uint8Array(bytes);\n let position = 0;\n for (const chunk of chunks) {\n if (typeof chunk === 'undefined')\n continue;\n allChunks.set(chunk, position);\n position += chunk.length;\n }\n blob = new Blob([allChunks.buffer], { type: contentType || undefined });\n }\n const result = await this.writeFile({\n path: options.path,\n directory: (_a = options.directory) !== null && _a !== void 0 ? _a : undefined,\n recursive: (_b = options.recursive) !== null && _b !== void 0 ? _b : false,\n data: blob,\n });\n return { path: result.uri, blob };\n };\n }\n async initDb() {\n if (this._db !== undefined) {\n return this._db;\n }\n if (!('indexedDB' in window)) {\n throw this.unavailable(\"This browser doesn't support IndexedDB\");\n }\n return new Promise((resolve, reject) => {\n const request = indexedDB.open(this.DB_NAME, this.DB_VERSION);\n request.onupgradeneeded = FilesystemWeb.doUpgrade;\n request.onsuccess = () => {\n this._db = request.result;\n resolve(request.result);\n };\n request.onerror = () => reject(request.error);\n request.onblocked = () => {\n console.warn('db blocked');\n };\n });\n }\n static doUpgrade(event) {\n const eventTarget = event.target;\n const db = eventTarget.result;\n switch (event.oldVersion) {\n case 0:\n case 1:\n default: {\n if (db.objectStoreNames.contains('FileStorage')) {\n db.deleteObjectStore('FileStorage');\n }\n const store = db.createObjectStore('FileStorage', { keyPath: 'path' });\n store.createIndex('by_folder', 'folder');\n }\n }\n }\n async dbRequest(cmd, args) {\n const readFlag = this._writeCmds.indexOf(cmd) !== -1 ? 'readwrite' : 'readonly';\n return this.initDb().then((conn) => {\n return new Promise((resolve, reject) => {\n const tx = conn.transaction(['FileStorage'], readFlag);\n const store = tx.objectStore('FileStorage');\n const req = store[cmd](...args);\n req.onsuccess = () => resolve(req.result);\n req.onerror = () => reject(req.error);\n });\n });\n }\n async dbIndexRequest(indexName, cmd, args) {\n const readFlag = this._writeCmds.indexOf(cmd) !== -1 ? 'readwrite' : 'readonly';\n return this.initDb().then((conn) => {\n return new Promise((resolve, reject) => {\n const tx = conn.transaction(['FileStorage'], readFlag);\n const store = tx.objectStore('FileStorage');\n const index = store.index(indexName);\n const req = index[cmd](...args);\n req.onsuccess = () => resolve(req.result);\n req.onerror = () => reject(req.error);\n });\n });\n }\n getPath(directory, uriPath) {\n const cleanedUriPath = uriPath !== undefined ? uriPath.replace(/^[/]+|[/]+$/g, '') : '';\n let fsPath = '';\n if (directory !== undefined)\n fsPath += '/' + directory;\n if (uriPath !== '')\n fsPath += '/' + cleanedUriPath;\n return fsPath;\n }\n async clear() {\n const conn = await this.initDb();\n const tx = conn.transaction(['FileStorage'], 'readwrite');\n const store = tx.objectStore('FileStorage');\n store.clear();\n }\n /**\n * Read a file from disk\n * @param options options for the file read\n * @return a promise that resolves with the read file data result\n */\n async readFile(options) {\n const path = this.getPath(options.directory, options.path);\n // const encoding = options.encoding;\n const entry = (await this.dbRequest('get', [path]));\n if (entry === undefined)\n throw Error('File does not exist.');\n return { data: entry.content ? entry.content : '' };\n }\n /**\n * Write a file to disk in the specified location on device\n * @param options options for the file write\n * @return a promise that resolves with the file write result\n */\n async writeFile(options) {\n const path = this.getPath(options.directory, options.path);\n let data = options.data;\n const encoding = options.encoding;\n const doRecursive = options.recursive;\n const occupiedEntry = (await this.dbRequest('get', [path]));\n if (occupiedEntry && occupiedEntry.type === 'directory')\n throw Error('The supplied path is a directory.');\n const parentPath = path.substr(0, path.lastIndexOf('/'));\n const parentEntry = (await this.dbRequest('get', [parentPath]));\n if (parentEntry === undefined) {\n const subDirIndex = parentPath.indexOf('/', 1);\n if (subDirIndex !== -1) {\n const parentArgPath = parentPath.substr(subDirIndex);\n await this.mkdir({\n path: parentArgPath,\n directory: options.directory,\n recursive: doRecursive,\n });\n }\n }\n if (!encoding && !(data instanceof Blob)) {\n data = data.indexOf(',') >= 0 ? data.split(',')[1] : data;\n if (!this.isBase64String(data))\n throw Error('The supplied data is not valid base64 content.');\n }\n const now = Date.now();\n const pathObj = {\n path: path,\n folder: parentPath,\n type: 'file',\n size: data instanceof Blob ? data.size : data.length,\n ctime: now,\n mtime: now,\n content: data,\n };\n await this.dbRequest('put', [pathObj]);\n return {\n uri: pathObj.path,\n };\n }\n /**\n * Append to a file on disk in the specified location on device\n * @param options options for the file append\n * @return a promise that resolves with the file write result\n */\n async appendFile(options) {\n const path = this.getPath(options.directory, options.path);\n let data = options.data;\n const encoding = options.encoding;\n const parentPath = path.substr(0, path.lastIndexOf('/'));\n const now = Date.now();\n let ctime = now;\n const occupiedEntry = (await this.dbRequest('get', [path]));\n if (occupiedEntry && occupiedEntry.type === 'directory')\n throw Error('The supplied path is a directory.');\n const parentEntry = (await this.dbRequest('get', [parentPath]));\n if (parentEntry === undefined) {\n const subDirIndex = parentPath.indexOf('/', 1);\n if (subDirIndex !== -1) {\n const parentArgPath = parentPath.substr(subDirIndex);\n await this.mkdir({\n path: parentArgPath,\n directory: options.directory,\n recursive: true,\n });\n }\n }\n if (!encoding && !this.isBase64String(data))\n throw Error('The supplied data is not valid base64 content.');\n if (occupiedEntry !== undefined) {\n if (occupiedEntry.content instanceof Blob) {\n throw Error('The occupied entry contains a Blob object which cannot be appended to.');\n }\n if (occupiedEntry.content !== undefined && !encoding) {\n data = btoa(atob(occupiedEntry.content) + atob(data));\n }\n else {\n data = occupiedEntry.content + data;\n }\n ctime = occupiedEntry.ctime;\n }\n const pathObj = {\n path: path,\n folder: parentPath,\n type: 'file',\n size: data.length,\n ctime: ctime,\n mtime: now,\n content: data,\n };\n await this.dbRequest('put', [pathObj]);\n }\n /**\n * Delete a file from disk\n * @param options options for the file delete\n * @return a promise that resolves with the deleted file data result\n */\n async deleteFile(options) {\n const path = this.getPath(options.directory, options.path);\n const entry = (await this.dbRequest('get', [path]));\n if (entry === undefined)\n throw Error('File does not exist.');\n const entries = await this.dbIndexRequest('by_folder', 'getAllKeys', [\n IDBKeyRange.only(path),\n ]);\n if (entries.length !== 0)\n throw Error('Folder is not empty.');\n await this.dbRequest('delete', [path]);\n }\n /**\n * Create a directory.\n * @param options options for the mkdir\n * @return a promise that resolves with the mkdir result\n */\n async mkdir(options) {\n const path = this.getPath(options.directory, options.path);\n const doRecursive = options.recursive;\n const parentPath = path.substr(0, path.lastIndexOf('/'));\n const depth = (path.match(/\\//g) || []).length;\n const parentEntry = (await this.dbRequest('get', [parentPath]));\n const occupiedEntry = (await this.dbRequest('get', [path]));\n if (depth === 1)\n throw Error('Cannot create Root directory');\n if (occupiedEntry !== undefined)\n throw Error('Current directory does already exist.');\n if (!doRecursive && depth !== 2 && parentEntry === undefined)\n throw Error('Parent directory must exist');\n if (doRecursive && depth !== 2 && parentEntry === undefined) {\n const parentArgPath = parentPath.substr(parentPath.indexOf('/', 1));\n await this.mkdir({\n path: parentArgPath,\n directory: options.directory,\n recursive: doRecursive,\n });\n }\n const now = Date.now();\n const pathObj = {\n path: path,\n folder: parentPath,\n type: 'directory',\n size: 0,\n ctime: now,\n mtime: now,\n };\n await this.dbRequest('put', [pathObj]);\n }\n /**\n * Remove a directory\n * @param options the options for the directory remove\n */\n async rmdir(options) {\n const { path, directory, recursive } = options;\n const fullPath = this.getPath(directory, path);\n const entry = (await this.dbRequest('get', [fullPath]));\n if (entry === undefined)\n throw Error('Folder does not exist.');\n if (entry.type !== 'directory')\n throw Error('Requested path is not a directory');\n const readDirResult = await this.readdir({ path, directory });\n if (readDirResult.files.length !== 0 && !recursive)\n throw Error('Folder is not empty');\n for (const entry of readDirResult.files) {\n const entryPath = `${path}/${entry.name}`;\n const entryObj = await this.stat({ path: entryPath, directory });\n if (entryObj.type === 'file') {\n await this.deleteFile({ path: entryPath, directory });\n }\n else {\n await this.rmdir({ path: entryPath, directory, recursive });\n }\n }\n await this.dbRequest('delete', [fullPath]);\n }\n /**\n * Return a list of files from the directory (not recursive)\n * @param options the options for the readdir operation\n * @return a promise that resolves with the readdir directory listing result\n */\n async readdir(options) {\n const path = this.getPath(options.directory, options.path);\n const entry = (await this.dbRequest('get', [path]));\n if (options.path !== '' && entry === undefined)\n throw Error('Folder does not exist.');\n const entries = await this.dbIndexRequest('by_folder', 'getAllKeys', [IDBKeyRange.only(path)]);\n const files = await Promise.all(entries.map(async (e) => {\n let subEntry = (await this.dbRequest('get', [e]));\n if (subEntry === undefined) {\n subEntry = (await this.dbRequest('get', [e + '/']));\n }\n return {\n name: e.substring(path.length + 1),\n type: subEntry.type,\n size: subEntry.size,\n ctime: subEntry.ctime,\n mtime: subEntry.mtime,\n uri: subEntry.path,\n };\n }));\n return { files: files };\n }\n /**\n * Return full File URI for a path and directory\n * @param options the options for the stat operation\n * @return a promise that resolves with the file stat result\n */\n async getUri(options) {\n const path = this.getPath(options.directory, options.path);\n let entry = (await this.dbRequest('get', [path]));\n if (entry === undefined) {\n entry = (await this.dbRequest('get', [path + '/']));\n }\n return {\n uri: (entry === null || entry === void 0 ? void 0 : entry.path) || path,\n };\n }\n /**\n * Return data about a file\n * @param options the options for the stat operation\n * @return a promise that resolves with the file stat result\n */\n async stat(options) {\n const path = this.getPath(options.directory, options.path);\n let entry = (await this.dbRequest('get', [path]));\n if (entry === undefined) {\n entry = (await this.dbRequest('get', [path + '/']));\n }\n if (entry === undefined)\n throw Error('Entry does not exist.');\n return {\n type: entry.type,\n size: entry.size,\n ctime: entry.ctime,\n mtime: entry.mtime,\n uri: entry.path,\n };\n }\n /**\n * Rename a file or directory\n * @param options the options for the rename operation\n * @return a promise that resolves with the rename result\n */\n async rename(options) {\n await this._copy(options, true);\n return;\n }\n /**\n * Copy a file or directory\n * @param options the options for the copy operation\n * @return a promise that resolves with the copy result\n */\n async copy(options) {\n return this._copy(options, false);\n }\n async requestPermissions() {\n return { publicStorage: 'granted' };\n }\n async checkPermissions() {\n return { publicStorage: 'granted' };\n }\n /**\n * Function that can perform a copy or a rename\n * @param options the options for the rename operation\n * @param doRename whether to perform a rename or copy operation\n * @return a promise that resolves with the result\n */\n async _copy(options, doRename = false) {\n let { toDirectory } = options;\n const { to, from, directory: fromDirectory } = options;\n if (!to || !from) {\n throw Error('Both to and from must be provided');\n }\n // If no \"to\" directory is provided, use the \"from\" directory\n if (!toDirectory) {\n toDirectory = fromDirectory;\n }\n const fromPath = this.getPath(fromDirectory, from);\n const toPath = this.getPath(toDirectory, to);\n // Test that the \"to\" and \"from\" locations are different\n if (fromPath === toPath) {\n return {\n uri: toPath,\n };\n }\n if (isPathParent(fromPath, toPath)) {\n throw Error('To path cannot contain the from path');\n }\n // Check the state of the \"to\" location\n let toObj;\n try {\n toObj = await this.stat({\n path: to,\n directory: toDirectory,\n });\n }\n catch (e) {\n // To location does not exist, ensure the directory containing \"to\" location exists and is a directory\n const toPathComponents = to.split('/');\n toPathComponents.pop();\n const toPath = toPathComponents.join('/');\n // Check the containing directory of the \"to\" location exists\n if (toPathComponents.length > 0) {\n const toParentDirectory = await this.stat({\n path: toPath,\n directory: toDirectory,\n });\n if (toParentDirectory.type !== 'directory') {\n throw new Error('Parent directory of the to path is a file');\n }\n }\n }\n // Cannot overwrite a directory\n if (toObj && toObj.type === 'directory') {\n throw new Error('Cannot overwrite a directory with a file');\n }\n // Ensure the \"from\" object exists\n const fromObj = await this.stat({\n path: from,\n directory: fromDirectory,\n });\n // Set the mtime/ctime of the supplied path\n const updateTime = async (path, ctime, mtime) => {\n const fullPath = this.getPath(toDirectory, path);\n const entry = (await this.dbRequest('get', [fullPath]));\n entry.ctime = ctime;\n entry.mtime = mtime;\n await this.dbRequest('put', [entry]);\n };\n const ctime = fromObj.ctime ? fromObj.ctime : Date.now();\n switch (fromObj.type) {\n // The \"from\" object is a file\n case 'file': {\n // Read the file\n const file = await this.readFile({\n path: from,\n directory: fromDirectory,\n });\n // Optionally remove the file\n if (doRename) {\n await this.deleteFile({\n path: from,\n directory: fromDirectory,\n });\n }\n let encoding;\n if (!(file.data instanceof Blob) && !this.isBase64String(file.data)) {\n encoding = Encoding.UTF8;\n }\n // Write the file to the new location\n const writeResult = await this.writeFile({\n path: to,\n directory: toDirectory,\n data: file.data,\n encoding: encoding,\n });\n // Copy the mtime/ctime of a renamed file\n if (doRename) {\n await updateTime(to, ctime, fromObj.mtime);\n }\n // Resolve promise\n return writeResult;\n }\n case 'directory': {\n if (toObj) {\n throw Error('Cannot move a directory over an existing object');\n }\n try {\n // Create the to directory\n await this.mkdir({\n path: to,\n directory: toDirectory,\n recursive: false,\n });\n // Copy the mtime/ctime of a renamed directory\n if (doRename) {\n await updateTime(to, ctime, fromObj.mtime);\n }\n }\n catch (e) {\n // ignore\n }\n // Iterate over the contents of the from location\n const contents = (await this.readdir({\n path: from,\n directory: fromDirectory,\n })).files;\n for (const filename of contents) {\n // Move item from the from directory to the to directory\n await this._copy({\n from: `${from}/${filename.name}`,\n to: `${to}/${filename.name}`,\n directory: fromDirectory,\n toDirectory,\n }, doRename);\n }\n // Optionally remove the original from directory\n if (doRename) {\n await this.rmdir({\n path: from,\n directory: fromDirectory,\n });\n }\n }\n }\n return {\n uri: toPath,\n };\n }\n isBase64String(str) {\n try {\n return btoa(atob(str)) == str;\n }\n catch (err) {\n return false;\n }\n }\n}\nFilesystemWeb._debug = true;\n//# sourceMappingURL=web.js.map"],"names":["Directory","Encoding","registerPlugin","WebPlugin","buildRequestInit"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@capacitor/filesystem",
|
|
3
|
-
"version": "5.1.2
|
|
3
|
+
"version": "5.1.2",
|
|
4
4
|
"description": "The Filesystem API provides a NodeJS-like API for working with files on the device.",
|
|
5
5
|
"main": "dist/plugin.cjs.js",
|
|
6
6
|
"module": "dist/esm/index.js",
|