diff --git a/packages/capacitor-plugin/.eslintignore b/.eslintignore
similarity index 100%
rename from packages/capacitor-plugin/.eslintignore
rename to .eslintignore
diff --git a/.github/actions/prepare-example-app/action.yml b/.github/actions/prepare-example-app/action.yml
index 1617848..40a39c7 100644
--- a/.github/actions/prepare-example-app/action.yml
+++ b/.github/actions/prepare-example-app/action.yml
@@ -5,18 +5,17 @@ runs:
using: 'composite'
steps:
- name: 'Build plugin'
- working-directory: ./packages/capacitor-plugin
shell: bash
run: npm run build
- name: 'Install example app dependencies'
- working-directory: ./packages/example-app-capacitor
+ working-directory: ./example-app
shell: bash
run: npm i
- name: 'Build Web example app'
- working-directory: ./packages/example-app-capacitor
+ working-directory: ./example-app
shell: bash
run: npm run build
- name: 'Sync example app native platforms'
- working-directory: ./packages/example-app-capacitor
+ working-directory: ./example-app
shell: bash
- run: npx cap sync
\ No newline at end of file
+ run: npx cap sync
diff --git a/.github/actions/setup-tools/action.yml b/.github/actions/setup-tools/action.yml
index 56b8c19..73883f0 100644
--- a/.github/actions/setup-tools/action.yml
+++ b/.github/actions/setup-tools/action.yml
@@ -13,6 +13,5 @@ runs:
shell: bash
run: npm install -g npm@latest
- name: Install dependencies
- working-directory: ./packages/capacitor-plugin
shell: bash
- run: npm i
\ No newline at end of file
+ run: npm i
diff --git a/.github/workflows/continuous_integration.yml b/.github/workflows/continuous_integration.yml
index 561f0bb..8c4f1f3 100644
--- a/.github/workflows/continuous_integration.yml
+++ b/.github/workflows/continuous_integration.yml
@@ -25,7 +25,6 @@ jobs:
- name: 'Setup Tools'
uses: ./.github/actions/setup-tools
- name: 'Verify Android'
- working-directory: ./packages/capacitor-plugin
run: npm run verify:android
verify-plugin-ios:
@@ -37,7 +36,6 @@ jobs:
- name: 'Setup Tools'
uses: ./.github/actions/setup-tools
- name: 'Verify iOS'
- working-directory: ./packages/capacitor-plugin
run: npm run verify:ios
build-example-app-android:
@@ -51,7 +49,7 @@ jobs:
- name: 'Prepare example app'
uses: ./.github/actions/prepare-example-app
- name: 'Build Android example app'
- working-directory: ./packages/example-app-capacitor/android
+ working-directory: ./example-app/android
run: ./gradlew clean assembleDebug
build-example-app-ios:
@@ -65,5 +63,5 @@ jobs:
- name: 'Prepare example app'
uses: ./.github/actions/prepare-example-app
- name: 'Build iOS example app'
- working-directory: ./packages/example-app-capacitor/ios/App
- run: xcodebuild clean build -workspace App.xcworkspace -scheme App CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO
\ No newline at end of file
+ working-directory: ./example-app/ios/App
+ run: xcodebuild clean build -workspace App.xcworkspace -scheme App CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO
diff --git a/.github/workflows/publish_pod.yml b/.github/workflows/publish_pod.yml
index 2e2e949..03b9e92 100644
--- a/.github/workflows/publish_pod.yml
+++ b/.github/workflows/publish_pod.yml
@@ -35,4 +35,3 @@ jobs:
npm run publish:cocoapod
env:
COCOAPODS_TRUNK_TOKEN: ${{ secrets.COCOAPODS_TRUNK_TOKEN }}
- working-directory: ./packages/capacitor-plugin
diff --git a/.github/workflows/release_plugin.yml b/.github/workflows/release_plugin.yml
index ea7705d..504b578 100644
--- a/.github/workflows/release_plugin.yml
+++ b/.github/workflows/release_plugin.yml
@@ -43,7 +43,6 @@ jobs:
- name: 'Setup Tools'
uses: ./.github/actions/setup-tools
- name: Release
- working-directory: ./packages/capacitor-plugin
env:
GITHUB_TOKEN: ${{ secrets.CAP_GH_RELEASE_TOKEN }}
GH_TOKEN: ${{ secrets.CAP_GH_RELEASE_TOKEN }}
diff --git a/.github/workflows/reusable_build.yml b/.github/workflows/reusable_build.yml
index 702f732..6950b57 100644
--- a/.github/workflows/reusable_build.yml
+++ b/.github/workflows/reusable_build.yml
@@ -20,15 +20,12 @@ jobs:
uses: ./.github/actions/setup-tools
- name: "Copy README.md in root"
- working-directory: ./packages/capacitor-plugin
run: cp README.md README.md.original
- name: "Build Packages"
- working-directory: ./packages/capacitor-plugin
run: npm run build
- name: "Check README.md changes"
- working-directory: ./packages/capacitor-plugin
run: |
if ! cmp --silent README.md README.md.original; then
echo "Detected README.md changes; Do 'npm run build' to update the docs."
diff --git a/.github/workflows/reusable_lint.yml b/.github/workflows/reusable_lint.yml
index a693b8d..7adb58f 100644
--- a/.github/workflows/reusable_lint.yml
+++ b/.github/workflows/reusable_lint.yml
@@ -19,5 +19,4 @@ jobs:
uses: ./.github/actions/setup-tools
- name: 'Lint Packages'
- working-directory: ./packages/capacitor-plugin
- run: npm run lint
\ No newline at end of file
+ run: npm run lint
diff --git a/.gitignore b/.gitignore
index 6c66bb1..df9f0c2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,70 @@
# node files
+dist
node_modules
# iOS files
+Pods
+Podfile.lock
Package.resolved
-.build
+Build
+xcuserdata
+/.build
+/Packages
+xcuserdata/
+DerivedData/
+.swiftpm/configuration/registries.json
+.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata
+.netrc
+
+
+# macOS files
+.DS_Store
+
+
+
+# Based on Android gitignore template: https://github.com/github/gitignore/blob/HEAD/Android.gitignore
+
+# Built application files
+*.apk
+*.ap_
+
+# Files for the ART/Dalvik VM
+*.dex
+
+# Java class files
+*.class
+
+# Generated files
+bin
+gen
+out
+
+# Gradle files
+.gradle
+build
+
+# Local configuration file (sdk path, etc)
+local.properties
+
+# Proguard folder generated by Eclipse
+proguard
+
+# Log Files
+*.log
+
+# Android Studio Navigation editor temp files
+.navigation
+
+# Android Studio captures folder
+captures
+
+# IntelliJ
+*.iml
+.idea
+
+# Keystore files
+# Uncomment the following line if you do not want to check your keystore files in.
+#*.jks
+
+# External native build folder generated in Android Studio 2.2 and later
+.externalNativeBuild
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 59b1aee..35e2989 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -14,17 +14,13 @@ This repository contains minimal code for native Android and iOS. The implementa
### Local Setup
1. Fork and clone the repo.
-2. Go inside the plugin folder
- ```shell
- cd packages/capacitor-plugin
- ```
-3. Install the dependencies to use the plugin.
+2. Install the dependencies to use the plugin.
```shell
npm install
```
-4. Install SwiftLint if you're on macOS.
+3. Install SwiftLint if you're on macOS.
```shell
brew install swiftlint
@@ -68,4 +64,4 @@ Publishing is automated based on the branch committed to. When a commit or merge
- In general new developments will go straight to `main`. If we want to have non-stable versions (e.g. for new Capacitor versions or when there are many changes), we may use `next` or `development` branch, and then once they are ready for stable version, open a PR to main (should be rebased to keep history).
-> **Note**: The [`files`](https://docs.npmjs.com/cli/v7/configuring-npm/package-json#files) array in `package.json` specifies which files get published. If you rename files/directories or add files elsewhere, you may need to update it.
\ No newline at end of file
+> **Note**: The [`files`](https://docs.npmjs.com/cli/v7/configuring-npm/package-json#files) array in `package.json` specifies which files get published. If you rename files/directories or add files elsewhere, you may need to update it.
diff --git a/packages/capacitor-plugin/CapacitorFilesystem.podspec b/CapacitorFilesystem.podspec
similarity index 78%
rename from packages/capacitor-plugin/CapacitorFilesystem.podspec
rename to CapacitorFilesystem.podspec
index 9b1d7b6..adf0055 100644
--- a/packages/capacitor-plugin/CapacitorFilesystem.podspec
+++ b/CapacitorFilesystem.podspec
@@ -10,10 +10,7 @@ Pod::Spec.new do |s|
s.homepage = package['repository']['url']
s.author = package['author']
s.source = { :git => package['repository']['url'], :tag => "v#{s.version}" }
- s.source_files = [
- 'ios/Sources/**/*.{swift,h,m,c,cc,mm,cpp}',
- 'packages/capacitor-plugin/ios/Sources/**/*.{swift,h,m,c,cc,mm,cpp}'
- ]
+ s.source_files = 'ios/Sources/**/*.{swift,h,m,c,cc,mm,cpp}'
s.ios.deployment_target = '15.0'
s.dependency 'Capacitor'
s.dependency 'IONFilesystemLib', spec='~> 1.1.0'
diff --git a/Package.swift b/Package.swift
index a978598..99d362e 100644
--- a/Package.swift
+++ b/Package.swift
@@ -21,10 +21,10 @@ let package = Package(
.product(name: "Cordova", package: "capacitor-swift-pm"),
.product(name: "IONFilesystemLib", package: "ion-ios-filesystem")
],
- path: "packages/capacitor-plugin/ios/Sources/FilesystemPlugin"),
+ path: "ios/Sources/FilesystemPlugin"),
.testTarget(
name: "FilesystemPluginTests",
dependencies: ["FilesystemPlugin"],
- path: "packages/capacitor-plugin/ios/Tests/FilesystemPluginTests")
+ path: "ios/Tests/FilesystemPluginTests")
]
)
diff --git a/README.md b/README.md
index 8457a53..90c91df 100644
--- a/README.md
+++ b/README.md
@@ -1,25 +1,6 @@
-
+# @capacitor/filesystem
+
+The Filesystem API provides a NodeJS-like API for working with files on the device.
## Install
@@ -193,7 +174,7 @@ const readFilePath = async () => {
const appendBinaryData = async () => {
// Here's an example of appending binary data, which should be sent to the plugin
- // as base64 encoded, and without providing any `Encoding`
+ // as base64 encoded, and without providing any `Encoding`.
await Filesystem.appendFile({
path: "file.bin",
directory: Directory.Cache,
@@ -204,4 +185,624 @@ const appendBinaryData = async () => {
## API
-Check the plugin's api [here](packages/capacitor-plugin/README.md)
+
+
+* [`checkPermissions()`](#checkpermissions)
+* [`requestPermissions()`](#requestpermissions)
+* [`readFile(...)`](#readfile)
+* [`readFileInChunks(...)`](#readfileinchunks)
+* [`writeFile(...)`](#writefile)
+* [`appendFile(...)`](#appendfile)
+* [`deleteFile(...)`](#deletefile)
+* [`mkdir(...)`](#mkdir)
+* [`rmdir(...)`](#rmdir)
+* [`readdir(...)`](#readdir)
+* [`getUri(...)`](#geturi)
+* [`stat(...)`](#stat)
+* [`rename(...)`](#rename)
+* [`copy(...)`](#copy)
+* [`downloadFile(...)`](#downloadfile)
+* [`addListener('progress', ...)`](#addlistenerprogress-)
+* [`removeAllListeners()`](#removealllisteners)
+* [Interfaces](#interfaces)
+* [Type Aliases](#type-aliases)
+* [Enums](#enums)
+
+
+
+For list of existing error codes, see [Errors](#errors).
+
+
+
+
+### checkPermissions()
+
+```typescript
+checkPermissions() => Promise
+```
+
+Check read/write permissions.
+Required on Android, only when using `Directory.Documents` or
+`Directory.ExternalStorage`.
+
+**Returns:** Promise<PermissionStatus>
+
+**Since:** 1.0.0
+
+--------------------
+
+
+### requestPermissions()
+
+```typescript
+requestPermissions() => Promise
+```
+
+Request read/write permissions.
+Required on Android, only when using `Directory.Documents` or
+`Directory.ExternalStorage`.
+
+**Returns:** Promise<PermissionStatus>
+
+**Since:** 1.0.0
+
+--------------------
+
+
+### readFile(...)
+
+```typescript
+readFile(options: ReadFileOptions) => Promise
+```
+
+Read a file from disk
+
+| Param | Type |
+| ------------- | ----------------------------------------------------------- |
+| **`options`** | ReadFileOptions |
+
+**Returns:** Promise<ReadFileResult>
+
+**Since:** 1.0.0
+
+--------------------
+
+
+### readFileInChunks(...)
+
+```typescript
+readFileInChunks(options: ReadFileInChunksOptions, callback: ReadFileInChunksCallback) => Promise
+```
+
+Read a file from disk, in chunks.
+Native only (not available in web).
+Use the callback to receive each read chunk.
+If empty chunk is returned, it means file has been completely read.
+
+| Param | Type |
+| -------------- | ----------------------------------------------------------------------------- |
+| **`options`** | ReadFileInChunksOptions |
+| **`callback`** | ReadFileInChunksCallback |
+
+**Returns:** Promise<string>
+
+**Since:** 7.1.0
+
+--------------------
+
+
+### writeFile(...)
+
+```typescript
+writeFile(options: WriteFileOptions) => Promise
+```
+
+Write a file to disk in the specified location on device
+
+| Param | Type |
+| ------------- | ------------------------------------------------------------- |
+| **`options`** | WriteFileOptions |
+
+**Returns:** Promise<WriteFileResult>
+
+**Since:** 1.0.0
+
+--------------------
+
+
+### appendFile(...)
+
+```typescript
+appendFile(options: AppendFileOptions) => Promise
+```
+
+Append to a file on disk in the specified location on device
+
+| Param | Type |
+| ------------- | --------------------------------------------------------------- |
+| **`options`** | AppendFileOptions |
+
+**Since:** 1.0.0
+
+--------------------
+
+
+### deleteFile(...)
+
+```typescript
+deleteFile(options: DeleteFileOptions) => Promise
+```
+
+Delete a file from disk
+
+| Param | Type |
+| ------------- | --------------------------------------------------------------- |
+| **`options`** | DeleteFileOptions |
+
+**Since:** 1.0.0
+
+--------------------
+
+
+### mkdir(...)
+
+```typescript
+mkdir(options: MkdirOptions) => Promise
+```
+
+Create a directory.
+
+| Param | Type |
+| ------------- | ----------------------------------------------------- |
+| **`options`** | MkdirOptions |
+
+**Since:** 1.0.0
+
+--------------------
+
+
+### rmdir(...)
+
+```typescript
+rmdir(options: RmdirOptions) => Promise
+```
+
+Remove a directory
+
+| Param | Type |
+| ------------- | ----------------------------------------------------- |
+| **`options`** | RmdirOptions |
+
+**Since:** 1.0.0
+
+--------------------
+
+
+### readdir(...)
+
+```typescript
+readdir(options: ReaddirOptions) => Promise
+```
+
+Return a list of files from the directory (not recursive)
+
+| Param | Type |
+| ------------- | --------------------------------------------------------- |
+| **`options`** | ReaddirOptions |
+
+**Returns:** Promise<ReaddirResult>
+
+**Since:** 1.0.0
+
+--------------------
+
+
+### getUri(...)
+
+```typescript
+getUri(options: GetUriOptions) => Promise
+```
+
+Return full File URI for a path and directory
+
+| Param | Type |
+| ------------- | ------------------------------------------------------- |
+| **`options`** | GetUriOptions |
+
+**Returns:** Promise<GetUriResult>
+
+**Since:** 1.0.0
+
+--------------------
+
+
+### stat(...)
+
+```typescript
+stat(options: StatOptions) => Promise
+```
+
+Return data about a file
+
+| Param | Type |
+| ------------- | --------------------------------------------------- |
+| **`options`** | StatOptions |
+
+**Returns:** Promise<FileInfo>
+
+**Since:** 1.0.0
+
+--------------------
+
+
+### rename(...)
+
+```typescript
+rename(options: RenameOptions) => Promise
+```
+
+Rename a file or directory
+
+| Param | Type |
+| ------------- | --------------------------------------------------- |
+| **`options`** | CopyOptions |
+
+**Since:** 1.0.0
+
+--------------------
+
+
+### copy(...)
+
+```typescript
+copy(options: CopyOptions) => Promise
+```
+
+Copy a file or directory
+
+| Param | Type |
+| ------------- | --------------------------------------------------- |
+| **`options`** | CopyOptions |
+
+**Returns:** Promise<CopyResult>
+
+**Since:** 1.0.0
+
+--------------------
+
+
+### downloadFile(...)
+
+```typescript
+downloadFile(options: DownloadFileOptions) => Promise
+```
+
+Perform a http request to a server and download the file to the specified destination.
+
+This method has been deprecated since version 7.1.0.
+We recommend using the @capacitor/file-transfer plugin instead, in conjunction with this plugin.
+
+| Param | Type |
+| ------------- | ------------------------------------------------------------------- |
+| **`options`** | DownloadFileOptions |
+
+**Returns:** Promise<DownloadFileResult>
+
+**Since:** 5.1.0
+
+--------------------
+
+
+### addListener('progress', ...)
+
+```typescript
+addListener(eventName: 'progress', listenerFunc: ProgressListener) => Promise
+```
+
+Add a listener to file download progress events.
+
+This method has been deprecated since version 7.1.0.
+We recommend using the @capacitor/file-transfer plugin instead, in conjunction with this plugin.
+
+| Param | Type |
+| ------------------ | ------------------------------------------------------------- |
+| **`eventName`** | 'progress' |
+| **`listenerFunc`** | ProgressListener |
+
+**Returns:** Promise<PluginListenerHandle>
+
+**Since:** 5.1.0
+
+--------------------
+
+
+### removeAllListeners()
+
+```typescript
+removeAllListeners() => Promise
+```
+
+Remove all listeners for this plugin.
+
+This method has been deprecated since version 7.1.0.
+We recommend using the @capacitor/file-transfer plugin instead, in conjunction with this plugin.
+
+**Since:** 5.2.0
+
+--------------------
+
+
+### Interfaces
+
+
+#### PermissionStatus
+
+| Prop | Type |
+| ------------------- | ----------------------------------------------------------- |
+| **`publicStorage`** | PermissionState |
+
+
+#### ReadFileResult
+
+| Prop | Type | Description | Since |
+| ---------- | --------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | ----- |
+| **`data`** | string \| Blob | 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 |
+
+
+#### ReadFileOptions
+
+| Prop | Type | Description | Default | Since |
+| --------------- | ----------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------- | ----- |
+| **`path`** | string | The path of the file to read | | 1.0.0 |
+| **`directory`** | Directory | The `Directory` to read the file from | | 1.0.0 |
+| **`encoding`** | Encoding | The encoding to read the file in, if not provided, data is read as binary and returned as base64 encoded. Pass Encoding.UTF8 to read data as string | | 1.0.0 |
+| **`offset`** | number | The offset to start reading the file from, in bytes. Native only (not available in web). Can be used in conjunction with length to partially read files. | 0 | 8.1.0 |
+| **`length`** | number | The length of data to read, in bytes. Any non-positive value means to read to the end of the file. Native only (not available in web). Can be used in conjunction with offset to partially read files. | -1 | 8.1.0 |
+
+
+#### ReadFileInChunksOptions
+
+| Prop | Type | Description | Since |
+| --------------- | ------------------- | ---------------------------- | ----- |
+| **`chunkSize`** | number | Size of the chunks in bytes. | 7.1.0 |
+
+
+#### WriteFileResult
+
+| Prop | Type | Description | Since |
+| --------- | ------------------- | --------------------------------------- | ----- |
+| **`uri`** | string | The uri where the file was written into | 1.0.0 |
+
+
+#### WriteFileOptions
+
+| Prop | Type | Description | Default | Since |
+| --------------- | ----------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------ | ----- |
+| **`path`** | string | The path of the file to write | | 1.0.0 |
+| **`data`** | string \| Blob | The data to write Note: Blob data is only supported on Web. | | 1.0.0 |
+| **`directory`** | Directory | The `Directory` to store the file in | | 1.0.0 |
+| **`encoding`** | Encoding | The encoding to write the file in. If not provided, binary data will be written. For this, you must provide data as base64 encoded, so that the plugin can decode it before writing to disk. If you do not provide encoding and use non-base64 data, an error will be thrown. Pass Encoding.UTF8 to write data as string | | 1.0.0 |
+| **`recursive`** | boolean | Whether to create any missing parent directories. | false | 1.0.0 |
+
+
+#### AppendFileOptions
+
+| Prop | Type | Description | Since |
+| --------------- | ----------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----- |
+| **`path`** | string | The path of the file to append | 1.0.0 |
+| **`data`** | string | The data to append | 1.0.0 |
+| **`directory`** | Directory | The `Directory` to store the file in | 1.0.0 |
+| **`encoding`** | Encoding | The encoding to append to the file. If not provided, binary data will be appended. For this, you must provide data as base64 encoded, so that the plugin can decode it before writing to disk. If you do not provide encoding and use non-base64 data, an error will be thrown. Pass Encoding.UTF8 to write data as string | 1.0.0 |
+
+
+#### DeleteFileOptions
+
+| Prop | Type | Description | Since |
+| --------------- | ----------------------------------------------- | ---------------------------------------------------------------- | ----- |
+| **`path`** | string | The path of the file to delete | 1.0.0 |
+| **`directory`** | Directory | The `Directory` to delete the file from | 1.0.0 |
+
+
+#### MkdirOptions
+
+| Prop | Type | Description | Default | Since |
+| --------------- | ----------------------------------------------- | --------------------------------------------------------------------- | ------------------ | ----- |
+| **`path`** | string | The path of the new directory | | 1.0.0 |
+| **`directory`** | Directory | The `Directory` to make the new directory in | | 1.0.0 |
+| **`recursive`** | boolean | Whether to create any missing parent directories as well. | false | 1.0.0 |
+
+
+#### RmdirOptions
+
+| Prop | Type | Description | Default | Since |
+| --------------- | ----------------------------------------------- | --------------------------------------------------------------------- | ------------------ | ----- |
+| **`path`** | string | The path of the directory to remove | | 1.0.0 |
+| **`directory`** | Directory | The `Directory` to remove the directory from | | 1.0.0 |
+| **`recursive`** | boolean | Whether to recursively remove the contents of the directory | false | 1.0.0 |
+
+
+#### ReaddirResult
+
+| Prop | Type | Description | Since |
+| ----------- | ----------------------- | -------------------------------------------------- | ----- |
+| **`files`** | FileInfo[] | List of files and directories inside the directory | 1.0.0 |
+
+
+#### FileInfo
+
+| Prop | Type | Description | Since |
+| ----------- | ---------------------------------- | ------------------------------------------------------------------------------------ | ----- |
+| **`name`** | string | Name of the file or directory. | 7.1.0 |
+| **`type`** | 'file' \| 'directory' | Type of the file. | 4.0.0 |
+| **`size`** | number | Size of the file in bytes. | 4.0.0 |
+| **`ctime`** | number | Time of creation in milliseconds. It's not available on Android 7 and older devices. | 7.1.0 |
+| **`mtime`** | number | Time of last modification in milliseconds. | 7.1.0 |
+| **`uri`** | string | The uri of the file. | 4.0.0 |
+
+
+#### ReaddirOptions
+
+| Prop | Type | Description | Since |
+| --------------- | ----------------------------------------------- | ----------------------------------------------------------- | ----- |
+| **`path`** | string | The path of the directory to read | 1.0.0 |
+| **`directory`** | Directory | The `Directory` to list files from | 1.0.0 |
+
+
+#### GetUriResult
+
+| Prop | Type | Description | Since |
+| --------- | ------------------- | ------------------- | ----- |
+| **`uri`** | string | The uri of the file | 1.0.0 |
+
+
+#### GetUriOptions
+
+| Prop | Type | Description | Since |
+| --------------- | ----------------------------------------------- | -------------------------------------------------------------- | ----- |
+| **`path`** | string | The path of the file to get the URI for | 1.0.0 |
+| **`directory`** | Directory | The `Directory` to get the file under | 1.0.0 |
+
+
+#### StatOptions
+
+| Prop | Type | Description | Since |
+| --------------- | ----------------------------------------------- | -------------------------------------------------------------- | ----- |
+| **`path`** | string | The path of the file to get data about | 1.0.0 |
+| **`directory`** | Directory | The `Directory` to get the file under | 1.0.0 |
+
+
+#### CopyOptions
+
+| Prop | Type | Description | Since |
+| ----------------- | ----------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----- |
+| **`from`** | string | The existing file or directory | 1.0.0 |
+| **`to`** | string | The destination file or directory | 1.0.0 |
+| **`directory`** | Directory | The `Directory` containing the existing file or directory | 1.0.0 |
+| **`toDirectory`** | Directory | The `Directory` containing the destination file or directory. If not supplied will use the 'directory' parameter as the destination | 1.0.0 |
+
+
+#### CopyResult
+
+| Prop | Type | Description | Since |
+| --------- | ------------------- | -------------------------------------- | ----- |
+| **`uri`** | string | The uri where the file was copied into | 4.0.0 |
+
+
+#### DownloadFileResult
+
+| Prop | Type | Description | Since |
+| ---------- | ------------------- | -------------------------------------------------------------------- | ----- |
+| **`path`** | string | The path the file was downloaded to. | 5.1.0 |
+| **`blob`** | Blob | The blob data of the downloaded file. This is only available on web. | 5.1.0 |
+
+
+#### DownloadFileOptions
+
+| Prop | Type | Description | Default | Since |
+| --------------- | ----------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------ | ----- |
+| **`path`** | string | The path the downloaded file should be moved to. | | 5.1.0 |
+| **`directory`** | Directory | 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 |
+| **`progress`** | boolean | 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 |
+| **`recursive`** | boolean | Whether to create any missing parent directories. | false | 5.1.2 |
+
+
+#### PluginListenerHandle
+
+| Prop | Type |
+| ------------ | ----------------------------------------- |
+| **`remove`** | () => Promise<void> |
+
+
+#### ProgressStatus
+
+| Prop | Type | Description | Since |
+| ------------------- | ------------------- | ---------------------------------------------------- | ----- |
+| **`url`** | string | The url of the file being downloaded. | 5.1.0 |
+| **`bytes`** | number | The number of bytes downloaded so far. | 5.1.0 |
+| **`contentLength`** | number | The total number of bytes to download for this file. | 5.1.0 |
+
+
+### Type Aliases
+
+
+#### PermissionState
+
+'prompt' | 'prompt-with-rationale' | 'granted' | 'denied'
+
+
+#### ReadFileInChunksCallback
+
+Callback for receiving chunks read from a file, or error if something went wrong.
+
+(chunkRead: ReadFileResult | null, err?: any): void
+
+
+#### CallbackID
+
+string
+
+
+#### StatResult
+
+FileInfo
+
+
+#### RenameOptions
+
+CopyOptions
+
+
+#### ProgressListener
+
+A listener function that receives progress events.
+
+(progress: ProgressStatus): void
+
+
+### Enums
+
+
+#### Directory
+
+| Members | Value | Description | Since |
+| --------------------- | ------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----- |
+| **`Documents`** | 'DOCUMENTS' | The Documents directory. On iOS it's the app's documents directory. Use this directory to store user-generated content. On Android it's the Public Documents folder, so it's accessible from other apps. It's not accessible on Android 10 unless the app enables legacy External Storage by adding `android:requestLegacyExternalStorage="true"` in the `application` tag in the `AndroidManifest.xml`. On Android 11 or newer the app can only access the files/folders the app created. | 1.0.0 |
+| **`Data`** | 'DATA' | The Data directory. On iOS it will use the Documents directory. On Android it's the directory holding application files. Files will be deleted when the application is uninstalled. | 1.0.0 |
+| **`Library`** | 'LIBRARY' | The Library directory. On iOS it will use the Library directory. On Android it's the directory holding application files. Files will be deleted when the application is uninstalled. | 1.1.0 |
+| **`Cache`** | 'CACHE' | The Cache directory. Can be deleted in cases of low memory, so use this directory to write app-specific files. that your app can re-create easily. | 1.0.0 |
+| **`External`** | 'EXTERNAL' | The external directory. On iOS it will use the Documents directory. On Android it's the directory on the primary shared/external storage device where the application can place persistent files it owns. These files are internal to the applications, and not typically visible to the user as media. Files will be deleted when the application is uninstalled. | 1.0.0 |
+| **`ExternalStorage`** | 'EXTERNAL_STORAGE' | The external storage directory. On iOS it will use the Documents directory. On Android it's the primary shared/external storage directory. It's not accessible on Android 10 unless the app enables legacy External Storage by adding `android:requestLegacyExternalStorage="true"` in the `application` tag in the `AndroidManifest.xml`. It's not accessible on Android 11 or newer. | 1.0.0 |
+| **`ExternalCache`** | 'EXTERNAL_CACHE' | The external cache directory. On iOS it will use the Documents directory. On Android it's the primary shared/external cache. | 7.1.0 |
+| **`LibraryNoCloud`** | 'LIBRARY_NO_CLOUD' | The Library directory without cloud backup. Used in iOS. On Android it's the directory holding application files. | 7.1.0 |
+| **`Temporary`** | 'TEMPORARY' | A temporary directory for iOS. On Android it's the directory holding the application cache. | 7.1.0 |
+
+
+#### Encoding
+
+| Members | Value | Description | Since |
+| ----------- | -------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ----- |
+| **`UTF8`** | 'utf8' | Eight-bit UCS Transformation Format | 1.0.0 |
+| **`ASCII`** | 'ascii' | Seven-bit ASCII, a.k.a. ISO646-US, a.k.a. the Basic Latin block of the Unicode character set This encoding is only supported on Android. | 1.0.0 |
+| **`UTF16`** | 'utf16' | Sixteen-bit UCS Transformation Format, byte order identified by an optional byte-order mark This encoding is only supported on Android. | 1.0.0 |
+
+
+
+### Errors
+
+Since version 7.1.0, the plugin returns specific errors with specific codes on native Android and iOS. Web does not follow this standard for errors.
+
+The following table list all the plugin errors:
+
+| Error code | Platform(s) | Message |
+|-------------------|------------------|------------------------------|
+| OS-PLUG-FILE-0004 | iOS | Cordova / Capacitor bridge isn’t initialized. |
+| OS-PLUG-FILE-0005 | Android, iOS | The method input parameters aren’t valid. |
+| OS-PLUG-FILE-0006 | Android, iOS | Invalid path was provided. |
+| OS-PLUG-FILE-0007 | Android | Unable to perform file operation, user denied permission request. |
+| OS-PLUG-FILE-0008 | Android, iOS | Operation failed because file does not exist. |
+| OS-PLUG-FILE-0009 | Android | Operation not supported for provided input. |
+| OS-PLUG-FILE-0010 | Android, iOS | Directory already exists, cannot be overwritten. |
+| OS-PLUG-FILE-0011 | Android, iOS | Missing parent directory – possibly recursive=false was passed or parent directory creation failed. |
+| OS-PLUG-FILE-0012 | Android, iOS | Cannot delete directory with children; received recursive=false but directory has contents. |
+| OS-PLUG-FILE-0013 | Android, iOS | The operation failed with an error. |
+
diff --git a/packages/capacitor-plugin/android/.gitignore b/android/.gitignore
similarity index 100%
rename from packages/capacitor-plugin/android/.gitignore
rename to android/.gitignore
diff --git a/packages/capacitor-plugin/android/build.gradle b/android/build.gradle
similarity index 95%
rename from packages/capacitor-plugin/android/build.gradle
rename to android/build.gradle
index d9b03b3..c6a6035 100644
--- a/packages/capacitor-plugin/android/build.gradle
+++ b/android/build.gradle
@@ -29,8 +29,8 @@ apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
if (System.getenv("CAP_PLUGIN_PUBLISH") == "true") {
apply plugin: 'io.github.gradle-nexus.publish-plugin'
- apply from: file('../../../scripts/android/publish-root.gradle')
- apply from: file('../../../scripts/android/publish-module.gradle')
+ apply from: file('../scripts/android/publish-root.gradle')
+ apply from: file('../scripts/android/publish-module.gradle')
}
android {
diff --git a/packages/capacitor-plugin/android/gradle.properties b/android/gradle.properties
similarity index 100%
rename from packages/capacitor-plugin/android/gradle.properties
rename to android/gradle.properties
diff --git a/packages/capacitor-plugin/android/gradle/wrapper/gradle-wrapper.jar b/android/gradle/wrapper/gradle-wrapper.jar
similarity index 100%
rename from packages/capacitor-plugin/android/gradle/wrapper/gradle-wrapper.jar
rename to android/gradle/wrapper/gradle-wrapper.jar
diff --git a/packages/capacitor-plugin/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties
similarity index 100%
rename from packages/capacitor-plugin/android/gradle/wrapper/gradle-wrapper.properties
rename to android/gradle/wrapper/gradle-wrapper.properties
diff --git a/packages/capacitor-plugin/android/gradlew b/android/gradlew
similarity index 100%
rename from packages/capacitor-plugin/android/gradlew
rename to android/gradlew
diff --git a/packages/capacitor-plugin/android/gradlew.bat b/android/gradlew.bat
similarity index 100%
rename from packages/capacitor-plugin/android/gradlew.bat
rename to android/gradlew.bat
diff --git a/packages/capacitor-plugin/android/proguard-rules.pro b/android/proguard-rules.pro
similarity index 100%
rename from packages/capacitor-plugin/android/proguard-rules.pro
rename to android/proguard-rules.pro
diff --git a/packages/capacitor-plugin/android/settings.gradle b/android/settings.gradle
similarity index 100%
rename from packages/capacitor-plugin/android/settings.gradle
rename to android/settings.gradle
diff --git a/packages/capacitor-plugin/android/src/androidTest/java/com/getcapacitor/android/ExampleInstrumentedTest.java b/android/src/androidTest/java/com/getcapacitor/android/ExampleInstrumentedTest.java
similarity index 100%
rename from packages/capacitor-plugin/android/src/androidTest/java/com/getcapacitor/android/ExampleInstrumentedTest.java
rename to android/src/androidTest/java/com/getcapacitor/android/ExampleInstrumentedTest.java
diff --git a/packages/capacitor-plugin/android/src/main/AndroidManifest.xml b/android/src/main/AndroidManifest.xml
similarity index 100%
rename from packages/capacitor-plugin/android/src/main/AndroidManifest.xml
rename to android/src/main/AndroidManifest.xml
diff --git a/packages/capacitor-plugin/android/src/main/kotlin/com/capacitorjs/plugins/filesystem/FilesystemErrors.kt b/android/src/main/kotlin/com/capacitorjs/plugins/filesystem/FilesystemErrors.kt
similarity index 100%
rename from packages/capacitor-plugin/android/src/main/kotlin/com/capacitorjs/plugins/filesystem/FilesystemErrors.kt
rename to android/src/main/kotlin/com/capacitorjs/plugins/filesystem/FilesystemErrors.kt
diff --git a/packages/capacitor-plugin/android/src/main/kotlin/com/capacitorjs/plugins/filesystem/FilesystemMethodOptions.kt b/android/src/main/kotlin/com/capacitorjs/plugins/filesystem/FilesystemMethodOptions.kt
similarity index 100%
rename from packages/capacitor-plugin/android/src/main/kotlin/com/capacitorjs/plugins/filesystem/FilesystemMethodOptions.kt
rename to android/src/main/kotlin/com/capacitorjs/plugins/filesystem/FilesystemMethodOptions.kt
diff --git a/packages/capacitor-plugin/android/src/main/kotlin/com/capacitorjs/plugins/filesystem/FilesystemMethodResults.kt b/android/src/main/kotlin/com/capacitorjs/plugins/filesystem/FilesystemMethodResults.kt
similarity index 100%
rename from packages/capacitor-plugin/android/src/main/kotlin/com/capacitorjs/plugins/filesystem/FilesystemMethodResults.kt
rename to android/src/main/kotlin/com/capacitorjs/plugins/filesystem/FilesystemMethodResults.kt
diff --git a/packages/capacitor-plugin/android/src/main/kotlin/com/capacitorjs/plugins/filesystem/FilesystemPlugin.kt b/android/src/main/kotlin/com/capacitorjs/plugins/filesystem/FilesystemPlugin.kt
similarity index 100%
rename from packages/capacitor-plugin/android/src/main/kotlin/com/capacitorjs/plugins/filesystem/FilesystemPlugin.kt
rename to android/src/main/kotlin/com/capacitorjs/plugins/filesystem/FilesystemPlugin.kt
diff --git a/packages/capacitor-plugin/android/src/main/kotlin/com/capacitorjs/plugins/filesystem/LegacyFilesystemImplementation.kt b/android/src/main/kotlin/com/capacitorjs/plugins/filesystem/LegacyFilesystemImplementation.kt
similarity index 100%
rename from packages/capacitor-plugin/android/src/main/kotlin/com/capacitorjs/plugins/filesystem/LegacyFilesystemImplementation.kt
rename to android/src/main/kotlin/com/capacitorjs/plugins/filesystem/LegacyFilesystemImplementation.kt
diff --git a/packages/capacitor-plugin/android/src/main/kotlin/com/capacitorjs/plugins/filesystem/PluginResultExtensions.kt b/android/src/main/kotlin/com/capacitorjs/plugins/filesystem/PluginResultExtensions.kt
similarity index 100%
rename from packages/capacitor-plugin/android/src/main/kotlin/com/capacitorjs/plugins/filesystem/PluginResultExtensions.kt
rename to android/src/main/kotlin/com/capacitorjs/plugins/filesystem/PluginResultExtensions.kt
diff --git a/packages/capacitor-plugin/android/src/test/java/com/getcapacitor/ExampleUnitTest.java b/android/src/test/java/com/getcapacitor/ExampleUnitTest.java
similarity index 100%
rename from packages/capacitor-plugin/android/src/test/java/com/getcapacitor/ExampleUnitTest.java
rename to android/src/test/java/com/getcapacitor/ExampleUnitTest.java
diff --git a/packages/example-app-capacitor/.gitignore b/example-app/.gitignore
similarity index 100%
rename from packages/example-app-capacitor/.gitignore
rename to example-app/.gitignore
diff --git a/packages/example-app-capacitor/README.md b/example-app/README.md
similarity index 77%
rename from packages/example-app-capacitor/README.md
rename to example-app/README.md
index 064b557..63c1fd8 100644
--- a/packages/example-app-capacitor/README.md
+++ b/example-app/README.md
@@ -5,17 +5,16 @@ and comes with a very minimal shell for building an app.
### Running this example
-To run the provided example, first build the plugin: go to `../capacitor-plugin` and run
+To run the provided example, first build the plugin: go to root and run
```bash
-cd ../capacitor-plugin
npm install & npm run build
```
Then go back to this directory and build and run the app:
```bash
-cd ../example-app-capacitor
+cd example-app
npm install & npm run build
npm start
```
diff --git a/packages/example-app-capacitor/android/.gitignore b/example-app/android/.gitignore
similarity index 100%
rename from packages/example-app-capacitor/android/.gitignore
rename to example-app/android/.gitignore
diff --git a/packages/example-app-capacitor/android/app/.gitignore b/example-app/android/app/.gitignore
similarity index 100%
rename from packages/example-app-capacitor/android/app/.gitignore
rename to example-app/android/app/.gitignore
diff --git a/packages/example-app-capacitor/android/app/build.gradle b/example-app/android/app/build.gradle
similarity index 100%
rename from packages/example-app-capacitor/android/app/build.gradle
rename to example-app/android/app/build.gradle
diff --git a/packages/example-app-capacitor/android/app/capacitor.build.gradle b/example-app/android/app/capacitor.build.gradle
similarity index 100%
rename from packages/example-app-capacitor/android/app/capacitor.build.gradle
rename to example-app/android/app/capacitor.build.gradle
diff --git a/packages/example-app-capacitor/android/app/proguard-rules.pro b/example-app/android/app/proguard-rules.pro
similarity index 100%
rename from packages/example-app-capacitor/android/app/proguard-rules.pro
rename to example-app/android/app/proguard-rules.pro
diff --git a/packages/example-app-capacitor/android/app/src/androidTest/java/com/capacitorjs/exampleucapp/plugins/geolocation/ExampleInstrumentedTest.java b/example-app/android/app/src/androidTest/java/com/capacitorjs/exampleucapp/plugins/geolocation/ExampleInstrumentedTest.java
similarity index 100%
rename from packages/example-app-capacitor/android/app/src/androidTest/java/com/capacitorjs/exampleucapp/plugins/geolocation/ExampleInstrumentedTest.java
rename to example-app/android/app/src/androidTest/java/com/capacitorjs/exampleucapp/plugins/geolocation/ExampleInstrumentedTest.java
diff --git a/packages/example-app-capacitor/android/app/src/main/AndroidManifest.xml b/example-app/android/app/src/main/AndroidManifest.xml
similarity index 100%
rename from packages/example-app-capacitor/android/app/src/main/AndroidManifest.xml
rename to example-app/android/app/src/main/AndroidManifest.xml
diff --git a/packages/example-app-capacitor/android/app/src/main/java/com/capacitorjs/exampleucapp/plugins/geolocation/MainActivity.java b/example-app/android/app/src/main/java/com/capacitorjs/exampleucapp/plugins/geolocation/MainActivity.java
similarity index 100%
rename from packages/example-app-capacitor/android/app/src/main/java/com/capacitorjs/exampleucapp/plugins/geolocation/MainActivity.java
rename to example-app/android/app/src/main/java/com/capacitorjs/exampleucapp/plugins/geolocation/MainActivity.java
diff --git a/packages/example-app-capacitor/android/app/src/main/res/drawable-land-hdpi/splash.png b/example-app/android/app/src/main/res/drawable-land-hdpi/splash.png
similarity index 100%
rename from packages/example-app-capacitor/android/app/src/main/res/drawable-land-hdpi/splash.png
rename to example-app/android/app/src/main/res/drawable-land-hdpi/splash.png
diff --git a/packages/example-app-capacitor/android/app/src/main/res/drawable-land-mdpi/splash.png b/example-app/android/app/src/main/res/drawable-land-mdpi/splash.png
similarity index 100%
rename from packages/example-app-capacitor/android/app/src/main/res/drawable-land-mdpi/splash.png
rename to example-app/android/app/src/main/res/drawable-land-mdpi/splash.png
diff --git a/packages/example-app-capacitor/android/app/src/main/res/drawable-land-xhdpi/splash.png b/example-app/android/app/src/main/res/drawable-land-xhdpi/splash.png
similarity index 100%
rename from packages/example-app-capacitor/android/app/src/main/res/drawable-land-xhdpi/splash.png
rename to example-app/android/app/src/main/res/drawable-land-xhdpi/splash.png
diff --git a/packages/example-app-capacitor/android/app/src/main/res/drawable-land-xxhdpi/splash.png b/example-app/android/app/src/main/res/drawable-land-xxhdpi/splash.png
similarity index 100%
rename from packages/example-app-capacitor/android/app/src/main/res/drawable-land-xxhdpi/splash.png
rename to example-app/android/app/src/main/res/drawable-land-xxhdpi/splash.png
diff --git a/packages/example-app-capacitor/android/app/src/main/res/drawable-land-xxxhdpi/splash.png b/example-app/android/app/src/main/res/drawable-land-xxxhdpi/splash.png
similarity index 100%
rename from packages/example-app-capacitor/android/app/src/main/res/drawable-land-xxxhdpi/splash.png
rename to example-app/android/app/src/main/res/drawable-land-xxxhdpi/splash.png
diff --git a/packages/example-app-capacitor/android/app/src/main/res/drawable-port-hdpi/splash.png b/example-app/android/app/src/main/res/drawable-port-hdpi/splash.png
similarity index 100%
rename from packages/example-app-capacitor/android/app/src/main/res/drawable-port-hdpi/splash.png
rename to example-app/android/app/src/main/res/drawable-port-hdpi/splash.png
diff --git a/packages/example-app-capacitor/android/app/src/main/res/drawable-port-mdpi/splash.png b/example-app/android/app/src/main/res/drawable-port-mdpi/splash.png
similarity index 100%
rename from packages/example-app-capacitor/android/app/src/main/res/drawable-port-mdpi/splash.png
rename to example-app/android/app/src/main/res/drawable-port-mdpi/splash.png
diff --git a/packages/example-app-capacitor/android/app/src/main/res/drawable-port-xhdpi/splash.png b/example-app/android/app/src/main/res/drawable-port-xhdpi/splash.png
similarity index 100%
rename from packages/example-app-capacitor/android/app/src/main/res/drawable-port-xhdpi/splash.png
rename to example-app/android/app/src/main/res/drawable-port-xhdpi/splash.png
diff --git a/packages/example-app-capacitor/android/app/src/main/res/drawable-port-xxhdpi/splash.png b/example-app/android/app/src/main/res/drawable-port-xxhdpi/splash.png
similarity index 100%
rename from packages/example-app-capacitor/android/app/src/main/res/drawable-port-xxhdpi/splash.png
rename to example-app/android/app/src/main/res/drawable-port-xxhdpi/splash.png
diff --git a/packages/example-app-capacitor/android/app/src/main/res/drawable-port-xxxhdpi/splash.png b/example-app/android/app/src/main/res/drawable-port-xxxhdpi/splash.png
similarity index 100%
rename from packages/example-app-capacitor/android/app/src/main/res/drawable-port-xxxhdpi/splash.png
rename to example-app/android/app/src/main/res/drawable-port-xxxhdpi/splash.png
diff --git a/packages/example-app-capacitor/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/example-app/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
similarity index 100%
rename from packages/example-app-capacitor/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
rename to example-app/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
diff --git a/packages/example-app-capacitor/android/app/src/main/res/drawable/ic_launcher_background.xml b/example-app/android/app/src/main/res/drawable/ic_launcher_background.xml
similarity index 100%
rename from packages/example-app-capacitor/android/app/src/main/res/drawable/ic_launcher_background.xml
rename to example-app/android/app/src/main/res/drawable/ic_launcher_background.xml
diff --git a/packages/example-app-capacitor/android/app/src/main/res/drawable/splash.png b/example-app/android/app/src/main/res/drawable/splash.png
similarity index 100%
rename from packages/example-app-capacitor/android/app/src/main/res/drawable/splash.png
rename to example-app/android/app/src/main/res/drawable/splash.png
diff --git a/packages/example-app-capacitor/android/app/src/main/res/layout/activity_main.xml b/example-app/android/app/src/main/res/layout/activity_main.xml
similarity index 100%
rename from packages/example-app-capacitor/android/app/src/main/res/layout/activity_main.xml
rename to example-app/android/app/src/main/res/layout/activity_main.xml
diff --git a/packages/example-app-capacitor/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/example-app/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
similarity index 100%
rename from packages/example-app-capacitor/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
rename to example-app/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
diff --git a/packages/example-app-capacitor/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/example-app/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
similarity index 100%
rename from packages/example-app-capacitor/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
rename to example-app/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
diff --git a/packages/example-app-capacitor/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/example-app/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
similarity index 100%
rename from packages/example-app-capacitor/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
rename to example-app/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
diff --git a/packages/example-app-capacitor/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png b/example-app/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png
similarity index 100%
rename from packages/example-app-capacitor/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png
rename to example-app/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png
diff --git a/packages/example-app-capacitor/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/example-app/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
similarity index 100%
rename from packages/example-app-capacitor/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
rename to example-app/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
diff --git a/packages/example-app-capacitor/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/example-app/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
similarity index 100%
rename from packages/example-app-capacitor/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
rename to example-app/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
diff --git a/packages/example-app-capacitor/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png b/example-app/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png
similarity index 100%
rename from packages/example-app-capacitor/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png
rename to example-app/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png
diff --git a/packages/example-app-capacitor/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/example-app/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
similarity index 100%
rename from packages/example-app-capacitor/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
rename to example-app/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
diff --git a/packages/example-app-capacitor/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/example-app/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
similarity index 100%
rename from packages/example-app-capacitor/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
rename to example-app/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
diff --git a/packages/example-app-capacitor/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png b/example-app/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png
similarity index 100%
rename from packages/example-app-capacitor/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png
rename to example-app/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png
diff --git a/packages/example-app-capacitor/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/example-app/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
similarity index 100%
rename from packages/example-app-capacitor/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
rename to example-app/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
diff --git a/packages/example-app-capacitor/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/example-app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
similarity index 100%
rename from packages/example-app-capacitor/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
rename to example-app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
diff --git a/packages/example-app-capacitor/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png b/example-app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png
similarity index 100%
rename from packages/example-app-capacitor/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png
rename to example-app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png
diff --git a/packages/example-app-capacitor/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/example-app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
similarity index 100%
rename from packages/example-app-capacitor/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
rename to example-app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
diff --git a/packages/example-app-capacitor/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/example-app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
similarity index 100%
rename from packages/example-app-capacitor/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
rename to example-app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
diff --git a/packages/example-app-capacitor/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/example-app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png
similarity index 100%
rename from packages/example-app-capacitor/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png
rename to example-app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png
diff --git a/packages/example-app-capacitor/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/example-app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
similarity index 100%
rename from packages/example-app-capacitor/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
rename to example-app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
diff --git a/packages/example-app-capacitor/android/app/src/main/res/values/ic_launcher_background.xml b/example-app/android/app/src/main/res/values/ic_launcher_background.xml
similarity index 100%
rename from packages/example-app-capacitor/android/app/src/main/res/values/ic_launcher_background.xml
rename to example-app/android/app/src/main/res/values/ic_launcher_background.xml
diff --git a/packages/example-app-capacitor/android/app/src/main/res/values/strings.xml b/example-app/android/app/src/main/res/values/strings.xml
similarity index 100%
rename from packages/example-app-capacitor/android/app/src/main/res/values/strings.xml
rename to example-app/android/app/src/main/res/values/strings.xml
diff --git a/packages/example-app-capacitor/android/app/src/main/res/values/styles.xml b/example-app/android/app/src/main/res/values/styles.xml
similarity index 100%
rename from packages/example-app-capacitor/android/app/src/main/res/values/styles.xml
rename to example-app/android/app/src/main/res/values/styles.xml
diff --git a/packages/example-app-capacitor/android/app/src/main/res/xml/file_paths.xml b/example-app/android/app/src/main/res/xml/file_paths.xml
similarity index 100%
rename from packages/example-app-capacitor/android/app/src/main/res/xml/file_paths.xml
rename to example-app/android/app/src/main/res/xml/file_paths.xml
diff --git a/packages/example-app-capacitor/android/app/src/test/java/com/capacitorjs/exampleucapp/plugins/geolocation/ExampleUnitTest.java b/example-app/android/app/src/test/java/com/capacitorjs/exampleucapp/plugins/geolocation/ExampleUnitTest.java
similarity index 100%
rename from packages/example-app-capacitor/android/app/src/test/java/com/capacitorjs/exampleucapp/plugins/geolocation/ExampleUnitTest.java
rename to example-app/android/app/src/test/java/com/capacitorjs/exampleucapp/plugins/geolocation/ExampleUnitTest.java
diff --git a/packages/example-app-capacitor/android/build.gradle b/example-app/android/build.gradle
similarity index 100%
rename from packages/example-app-capacitor/android/build.gradle
rename to example-app/android/build.gradle
diff --git a/packages/example-app-capacitor/android/capacitor.settings.gradle b/example-app/android/capacitor.settings.gradle
similarity index 85%
rename from packages/example-app-capacitor/android/capacitor.settings.gradle
rename to example-app/android/capacitor.settings.gradle
index e0cb898..1d48ebc 100644
--- a/packages/example-app-capacitor/android/capacitor.settings.gradle
+++ b/example-app/android/capacitor.settings.gradle
@@ -9,4 +9,4 @@ include ':capacitor-splash-screen'
project(':capacitor-splash-screen').projectDir = new File('../node_modules/@capacitor/splash-screen/android')
include ':capacitor-filesystem'
-project(':capacitor-filesystem').projectDir = new File('../../capacitor-plugin/android')
+project(':capacitor-filesystem').projectDir = new File('../../android')
diff --git a/packages/example-app-capacitor/android/gradle.properties b/example-app/android/gradle.properties
similarity index 100%
rename from packages/example-app-capacitor/android/gradle.properties
rename to example-app/android/gradle.properties
diff --git a/packages/example-app-capacitor/android/gradle/wrapper/gradle-wrapper.jar b/example-app/android/gradle/wrapper/gradle-wrapper.jar
similarity index 100%
rename from packages/example-app-capacitor/android/gradle/wrapper/gradle-wrapper.jar
rename to example-app/android/gradle/wrapper/gradle-wrapper.jar
diff --git a/packages/example-app-capacitor/android/gradle/wrapper/gradle-wrapper.properties b/example-app/android/gradle/wrapper/gradle-wrapper.properties
similarity index 100%
rename from packages/example-app-capacitor/android/gradle/wrapper/gradle-wrapper.properties
rename to example-app/android/gradle/wrapper/gradle-wrapper.properties
diff --git a/packages/example-app-capacitor/android/gradlew b/example-app/android/gradlew
similarity index 100%
rename from packages/example-app-capacitor/android/gradlew
rename to example-app/android/gradlew
diff --git a/packages/example-app-capacitor/android/gradlew.bat b/example-app/android/gradlew.bat
similarity index 100%
rename from packages/example-app-capacitor/android/gradlew.bat
rename to example-app/android/gradlew.bat
diff --git a/packages/example-app-capacitor/android/settings.gradle b/example-app/android/settings.gradle
similarity index 100%
rename from packages/example-app-capacitor/android/settings.gradle
rename to example-app/android/settings.gradle
diff --git a/packages/example-app-capacitor/android/variables.gradle b/example-app/android/variables.gradle
similarity index 100%
rename from packages/example-app-capacitor/android/variables.gradle
rename to example-app/android/variables.gradle
diff --git a/packages/example-app-capacitor/capacitor.config.json b/example-app/capacitor.config.json
similarity index 100%
rename from packages/example-app-capacitor/capacitor.config.json
rename to example-app/capacitor.config.json
diff --git a/packages/example-app-capacitor/ios/.gitignore b/example-app/ios/.gitignore
similarity index 100%
rename from packages/example-app-capacitor/ios/.gitignore
rename to example-app/ios/.gitignore
diff --git a/packages/example-app-capacitor/ios/App/App.xcodeproj/project.pbxproj b/example-app/ios/App/App.xcodeproj/project.pbxproj
similarity index 100%
rename from packages/example-app-capacitor/ios/App/App.xcodeproj/project.pbxproj
rename to example-app/ios/App/App.xcodeproj/project.pbxproj
diff --git a/packages/example-app-capacitor/ios/App/App.xcworkspace/contents.xcworkspacedata b/example-app/ios/App/App.xcworkspace/contents.xcworkspacedata
similarity index 100%
rename from packages/example-app-capacitor/ios/App/App.xcworkspace/contents.xcworkspacedata
rename to example-app/ios/App/App.xcworkspace/contents.xcworkspacedata
diff --git a/packages/example-app-capacitor/ios/App/App.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/example-app/ios/App/App.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
similarity index 100%
rename from packages/example-app-capacitor/ios/App/App.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
rename to example-app/ios/App/App.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
diff --git a/packages/example-app-capacitor/ios/App/App/AppDelegate.swift b/example-app/ios/App/App/AppDelegate.swift
similarity index 100%
rename from packages/example-app-capacitor/ios/App/App/AppDelegate.swift
rename to example-app/ios/App/App/AppDelegate.swift
diff --git a/packages/example-app-capacitor/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png b/example-app/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png
similarity index 100%
rename from packages/example-app-capacitor/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png
rename to example-app/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png
diff --git a/packages/example-app-capacitor/ios/App/App/Assets.xcassets/AppIcon.appiconset/Contents.json b/example-app/ios/App/App/Assets.xcassets/AppIcon.appiconset/Contents.json
similarity index 100%
rename from packages/example-app-capacitor/ios/App/App/Assets.xcassets/AppIcon.appiconset/Contents.json
rename to example-app/ios/App/App/Assets.xcassets/AppIcon.appiconset/Contents.json
diff --git a/packages/example-app-capacitor/ios/App/App/Assets.xcassets/Contents.json b/example-app/ios/App/App/Assets.xcassets/Contents.json
similarity index 100%
rename from packages/example-app-capacitor/ios/App/App/Assets.xcassets/Contents.json
rename to example-app/ios/App/App/Assets.xcassets/Contents.json
diff --git a/packages/example-app-capacitor/ios/App/App/Assets.xcassets/Splash.imageset/Contents.json b/example-app/ios/App/App/Assets.xcassets/Splash.imageset/Contents.json
similarity index 100%
rename from packages/example-app-capacitor/ios/App/App/Assets.xcassets/Splash.imageset/Contents.json
rename to example-app/ios/App/App/Assets.xcassets/Splash.imageset/Contents.json
diff --git a/packages/example-app-capacitor/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-1.png b/example-app/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-1.png
similarity index 100%
rename from packages/example-app-capacitor/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-1.png
rename to example-app/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-1.png
diff --git a/packages/example-app-capacitor/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-2.png b/example-app/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-2.png
similarity index 100%
rename from packages/example-app-capacitor/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-2.png
rename to example-app/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-2.png
diff --git a/packages/example-app-capacitor/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732.png b/example-app/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732.png
similarity index 100%
rename from packages/example-app-capacitor/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732.png
rename to example-app/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732.png
diff --git a/packages/example-app-capacitor/ios/App/App/Base.lproj/LaunchScreen.storyboard b/example-app/ios/App/App/Base.lproj/LaunchScreen.storyboard
similarity index 100%
rename from packages/example-app-capacitor/ios/App/App/Base.lproj/LaunchScreen.storyboard
rename to example-app/ios/App/App/Base.lproj/LaunchScreen.storyboard
diff --git a/packages/example-app-capacitor/ios/App/App/Base.lproj/Main.storyboard b/example-app/ios/App/App/Base.lproj/Main.storyboard
similarity index 100%
rename from packages/example-app-capacitor/ios/App/App/Base.lproj/Main.storyboard
rename to example-app/ios/App/App/Base.lproj/Main.storyboard
diff --git a/packages/example-app-capacitor/ios/App/App/Info.plist b/example-app/ios/App/App/Info.plist
similarity index 100%
rename from packages/example-app-capacitor/ios/App/App/Info.plist
rename to example-app/ios/App/App/Info.plist
diff --git a/packages/example-app-capacitor/ios/App/Podfile b/example-app/ios/App/Podfile
similarity index 92%
rename from packages/example-app-capacitor/ios/App/Podfile
rename to example-app/ios/App/Podfile
index fb2a939..8c819a4 100644
--- a/packages/example-app-capacitor/ios/App/Podfile
+++ b/example-app/ios/App/Podfile
@@ -13,7 +13,7 @@ def capacitor_pods
pod 'CapacitorCordova', :path => '../../node_modules/@capacitor/ios'
pod 'CapacitorCamera', :path => '../../node_modules/@capacitor/camera'
pod 'CapacitorSplashScreen', :path => '../../node_modules/@capacitor/splash-screen'
- pod 'CapacitorFilesystem', :path => '../../../capacitor-plugin'
+ pod 'CapacitorFilesystem', :path => '../../..'
end
target 'App' do
diff --git a/example-app/package-lock.json b/example-app/package-lock.json
new file mode 100644
index 0000000..b38eb11
--- /dev/null
+++ b/example-app/package-lock.json
@@ -0,0 +1,2325 @@
+{
+ "name": "capacitor-filesystem-example-app",
+ "version": "1.0.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "capacitor-filesystem-example-app",
+ "version": "1.0.0",
+ "license": "ISC",
+ "dependencies": {
+ "@capacitor/android": "^8.0.0",
+ "@capacitor/camera": "^8.0.0",
+ "@capacitor/core": "^8.0.0",
+ "@capacitor/filesystem": "file:../",
+ "@capacitor/ios": "^8.0.0",
+ "@capacitor/splash-screen": "^8.0.0"
+ },
+ "devDependencies": {
+ "@capacitor/cli": "^8.0.0",
+ "vite": "^7.2.4"
+ }
+ },
+ "..": {
+ "name": "@capacitor/filesystem",
+ "version": "8.1.0",
+ "license": "MIT",
+ "dependencies": {
+ "@capacitor/synapse": "^1.0.4"
+ },
+ "devDependencies": {
+ "@capacitor/android": "^8.0.0",
+ "@capacitor/core": "^8.0.0",
+ "@capacitor/docgen": "^0.3.0",
+ "@capacitor/ios": "^8.0.0",
+ "@ionic/eslint-config": "^0.4.0",
+ "@ionic/prettier-config": "^4.0.0",
+ "@ionic/swiftlint-config": "^2.0.0",
+ "@semantic-release/changelog": "^6.0.3",
+ "@semantic-release/exec": "^7.1.0",
+ "@semantic-release/git": "^10.0.1",
+ "@semantic-release/github": "^12.0.2",
+ "@semantic-release/npm": "^13.1.2",
+ "@types/node": "^24.10.1",
+ "eslint": "^8.56.0",
+ "prettier": "^3.6.2",
+ "prettier-plugin-java": "^2.7.7",
+ "rimraf": "^6.1.2",
+ "rollup": "^4.53.3",
+ "semantic-release": "^25.0.2",
+ "swiftlint": "^2.0.0",
+ "typescript": "~5.9.3"
+ },
+ "peerDependencies": {
+ "@capacitor/core": ">=8.0.0"
+ }
+ },
+ "node_modules/@capacitor/android": {
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/@capacitor/android/-/android-8.0.2.tgz",
+ "integrity": "sha512-0D7j0YvzjnfCMKLvFkAbx8b3Vwx+QfHFG5NzoXpI9sAl3zWiLsfa+NX4x92Fy+k4MGjLSMAfLThCqILYGDDsgw==",
+ "license": "MIT",
+ "peerDependencies": {
+ "@capacitor/core": "^8.0.0"
+ }
+ },
+ "node_modules/@capacitor/camera": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/@capacitor/camera/-/camera-8.0.0.tgz",
+ "integrity": "sha512-Iu8j2oxoIhY2mLuoEckbL7PFgw1XFm1nqmeWdIkILpcT3H9A+BrSDUDlzWqM/EeaDKo6JnhR59tYHwUhOdXaUg==",
+ "license": "MIT",
+ "peerDependencies": {
+ "@capacitor/core": ">=8.0.0"
+ }
+ },
+ "node_modules/@capacitor/cli": {
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/@capacitor/cli/-/cli-8.0.2.tgz",
+ "integrity": "sha512-/8qLYxhytMyUKTHK8i6YU+DMD3AuFiQgSuJCyMltcg9MN3W9En7zqQZSo/WN4eC7qif/oyZACzm7OkAZKani7g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@ionic/cli-framework-output": "^2.2.8",
+ "@ionic/utils-subprocess": "^3.0.1",
+ "@ionic/utils-terminal": "^2.3.5",
+ "commander": "^12.1.0",
+ "debug": "^4.4.0",
+ "env-paths": "^2.2.0",
+ "fs-extra": "^11.2.0",
+ "kleur": "^4.1.5",
+ "native-run": "^2.0.3",
+ "open": "^8.4.0",
+ "plist": "^3.1.0",
+ "prompts": "^2.4.2",
+ "rimraf": "^6.0.1",
+ "semver": "^7.6.3",
+ "tar": "^7.5.3",
+ "tslib": "^2.8.1",
+ "xml2js": "^0.6.2"
+ },
+ "bin": {
+ "cap": "bin/capacitor",
+ "capacitor": "bin/capacitor"
+ },
+ "engines": {
+ "node": ">=22.0.0"
+ }
+ },
+ "node_modules/@capacitor/core": {
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/@capacitor/core/-/core-8.0.2.tgz",
+ "integrity": "sha512-EXZfxkL6GFJS2cb7TIBR7RiHA5iz6ufDcl1VmUpI2pga3lJ5Ck2+iqbx7N+osL3XYem9ad4XCidJEMm64DX6UQ==",
+ "license": "MIT",
+ "dependencies": {
+ "tslib": "^2.1.0"
+ }
+ },
+ "node_modules/@capacitor/filesystem": {
+ "resolved": "..",
+ "link": true
+ },
+ "node_modules/@capacitor/ios": {
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/@capacitor/ios/-/ios-8.0.2.tgz",
+ "integrity": "sha512-7EM7vBxXI3Ku49aYCJcS9su5Y3i6UmXpx7e0y+oQV9PzCnZ6l5B0ACJ+gXAU0bM3q7/f+kGBsOtXMid84rU6MQ==",
+ "license": "MIT",
+ "peerDependencies": {
+ "@capacitor/core": "^8.0.0"
+ }
+ },
+ "node_modules/@capacitor/splash-screen": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/@capacitor/splash-screen/-/splash-screen-8.0.0.tgz",
+ "integrity": "sha512-zkFdUSd6C6gd3s3bIEgtO3DVjfwpaX5mmWU9er8xYTg47zr2toEkGtfyE6CPhhErG09fl4rCqrK5DfnGrXLh9w==",
+ "license": "MIT",
+ "peerDependencies": {
+ "@capacitor/core": ">=8.0.0"
+ }
+ },
+ "node_modules/@esbuild/aix-ppc64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz",
+ "integrity": "sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "aix"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-arm": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.2.tgz",
+ "integrity": "sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-arm64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz",
+ "integrity": "sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-x64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.2.tgz",
+ "integrity": "sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/darwin-arm64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.2.tgz",
+ "integrity": "sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/darwin-x64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz",
+ "integrity": "sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz",
+ "integrity": "sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/freebsd-x64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz",
+ "integrity": "sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-arm": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz",
+ "integrity": "sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-arm64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz",
+ "integrity": "sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-ia32": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz",
+ "integrity": "sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-loong64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz",
+ "integrity": "sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-mips64el": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz",
+ "integrity": "sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==",
+ "cpu": [
+ "mips64el"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-ppc64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz",
+ "integrity": "sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-riscv64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz",
+ "integrity": "sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-s390x": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz",
+ "integrity": "sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-x64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz",
+ "integrity": "sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/netbsd-arm64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz",
+ "integrity": "sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/netbsd-x64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz",
+ "integrity": "sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openbsd-arm64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz",
+ "integrity": "sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openbsd-x64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz",
+ "integrity": "sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openharmony-arm64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz",
+ "integrity": "sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openharmony"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/sunos-x64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz",
+ "integrity": "sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-arm64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz",
+ "integrity": "sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-ia32": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz",
+ "integrity": "sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-x64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz",
+ "integrity": "sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@ionic/cli-framework-output": {
+ "version": "2.2.8",
+ "resolved": "https://registry.npmjs.org/@ionic/cli-framework-output/-/cli-framework-output-2.2.8.tgz",
+ "integrity": "sha512-TshtaFQsovB4NWRBydbNFawql6yul7d5bMiW1WYYf17hd99V6xdDdk3vtF51bw6sLkxON3bDQpWsnUc9/hVo3g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@ionic/utils-terminal": "2.3.5",
+ "debug": "^4.0.0",
+ "tslib": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
+ "node_modules/@ionic/utils-array": {
+ "version": "2.1.6",
+ "resolved": "https://registry.npmjs.org/@ionic/utils-array/-/utils-array-2.1.6.tgz",
+ "integrity": "sha512-0JZ1Zkp3wURnv8oq6Qt7fMPo5MpjbLoUoa9Bu2Q4PJuSDWM8H8gwF3dQO7VTeUj3/0o1IB1wGkFWZZYgUXZMUg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "debug": "^4.0.0",
+ "tslib": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
+ "node_modules/@ionic/utils-fs": {
+ "version": "3.1.7",
+ "resolved": "https://registry.npmjs.org/@ionic/utils-fs/-/utils-fs-3.1.7.tgz",
+ "integrity": "sha512-2EknRvMVfhnyhL1VhFkSLa5gOcycK91VnjfrTB0kbqkTFCOXyXgVLI5whzq7SLrgD9t1aqos3lMMQyVzaQ5gVA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/fs-extra": "^8.0.0",
+ "debug": "^4.0.0",
+ "fs-extra": "^9.0.0",
+ "tslib": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
+ "node_modules/@ionic/utils-fs/node_modules/fs-extra": {
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
+ "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "at-least-node": "^1.0.0",
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^6.0.1",
+ "universalify": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@ionic/utils-object": {
+ "version": "2.1.6",
+ "resolved": "https://registry.npmjs.org/@ionic/utils-object/-/utils-object-2.1.6.tgz",
+ "integrity": "sha512-vCl7sl6JjBHFw99CuAqHljYJpcE88YaH2ZW4ELiC/Zwxl5tiwn4kbdP/gxi2OT3MQb1vOtgAmSNRtusvgxI8ww==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "debug": "^4.0.0",
+ "tslib": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
+ "node_modules/@ionic/utils-process": {
+ "version": "2.1.12",
+ "resolved": "https://registry.npmjs.org/@ionic/utils-process/-/utils-process-2.1.12.tgz",
+ "integrity": "sha512-Jqkgyq7zBs/v/J3YvKtQQiIcxfJyplPgECMWgdO0E1fKrrH8EF0QGHNJ9mJCn6PYe2UtHNS8JJf5G21e09DfYg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@ionic/utils-object": "2.1.6",
+ "@ionic/utils-terminal": "2.3.5",
+ "debug": "^4.0.0",
+ "signal-exit": "^3.0.3",
+ "tree-kill": "^1.2.2",
+ "tslib": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
+ "node_modules/@ionic/utils-stream": {
+ "version": "3.1.7",
+ "resolved": "https://registry.npmjs.org/@ionic/utils-stream/-/utils-stream-3.1.7.tgz",
+ "integrity": "sha512-eSELBE7NWNFIHTbTC2jiMvh1ABKGIpGdUIvARsNPMNQhxJB3wpwdiVnoBoTYp+5a6UUIww4Kpg7v6S7iTctH1w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "debug": "^4.0.0",
+ "tslib": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
+ "node_modules/@ionic/utils-subprocess": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/@ionic/utils-subprocess/-/utils-subprocess-3.0.1.tgz",
+ "integrity": "sha512-cT4te3AQQPeIM9WCwIg8ohroJ8TjsYaMb2G4ZEgv9YzeDqHZ4JpeIKqG2SoaA3GmVQ3sOfhPM6Ox9sxphV/d1A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@ionic/utils-array": "2.1.6",
+ "@ionic/utils-fs": "3.1.7",
+ "@ionic/utils-process": "2.1.12",
+ "@ionic/utils-stream": "3.1.7",
+ "@ionic/utils-terminal": "2.3.5",
+ "cross-spawn": "^7.0.3",
+ "debug": "^4.0.0",
+ "tslib": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
+ "node_modules/@ionic/utils-terminal": {
+ "version": "2.3.5",
+ "resolved": "https://registry.npmjs.org/@ionic/utils-terminal/-/utils-terminal-2.3.5.tgz",
+ "integrity": "sha512-3cKScz9Jx2/Pr9ijj1OzGlBDfcmx7OMVBt4+P1uRR0SSW4cm1/y3Mo4OY3lfkuaYifMNBW8Wz6lQHbs1bihr7A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/slice-ansi": "^4.0.0",
+ "debug": "^4.0.0",
+ "signal-exit": "^3.0.3",
+ "slice-ansi": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0",
+ "tslib": "^2.0.1",
+ "untildify": "^4.0.0",
+ "wrap-ansi": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
+ "node_modules/@isaacs/balanced-match": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz",
+ "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "20 || >=22"
+ }
+ },
+ "node_modules/@isaacs/brace-expansion": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz",
+ "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@isaacs/balanced-match": "^4.0.1"
+ },
+ "engines": {
+ "node": "20 || >=22"
+ }
+ },
+ "node_modules/@isaacs/fs-minipass": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz",
+ "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "minipass": "^7.0.4"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@rollup/rollup-android-arm-eabi": {
+ "version": "4.57.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.57.0.tgz",
+ "integrity": "sha512-tPgXB6cDTndIe1ah7u6amCI1T0SsnlOuKgg10Xh3uizJk4e5M1JGaUMk7J4ciuAUcFpbOiNhm2XIjP9ON0dUqA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-android-arm64": {
+ "version": "4.57.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.57.0.tgz",
+ "integrity": "sha512-sa4LyseLLXr1onr97StkU1Nb7fWcg6niokTwEVNOO7awaKaoRObQ54+V/hrF/BP1noMEaaAW6Fg2d/CfLiq3Mg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-arm64": {
+ "version": "4.57.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.57.0.tgz",
+ "integrity": "sha512-/NNIj9A7yLjKdmkx5dC2XQ9DmjIECpGpwHoGmA5E1AhU0fuICSqSWScPhN1yLCkEdkCwJIDu2xIeLPs60MNIVg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-x64": {
+ "version": "4.57.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.57.0.tgz",
+ "integrity": "sha512-xoh8abqgPrPYPr7pTYipqnUi1V3em56JzE/HgDgitTqZBZ3yKCWI+7KUkceM6tNweyUKYru1UMi7FC060RyKwA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-freebsd-arm64": {
+ "version": "4.57.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.57.0.tgz",
+ "integrity": "sha512-PCkMh7fNahWSbA0OTUQ2OpYHpjZZr0hPr8lId8twD7a7SeWrvT3xJVyza+dQwXSSq4yEQTMoXgNOfMCsn8584g==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-freebsd-x64": {
+ "version": "4.57.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.57.0.tgz",
+ "integrity": "sha512-1j3stGx+qbhXql4OCDZhnK7b01s6rBKNybfsX+TNrEe9JNq4DLi1yGiR1xW+nL+FNVvI4D02PUnl6gJ/2y6WJA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
+ "version": "4.57.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.57.0.tgz",
+ "integrity": "sha512-eyrr5W08Ms9uM0mLcKfM/Uzx7hjhz2bcjv8P2uynfj0yU8GGPdz8iYrBPhiLOZqahoAMB8ZiolRZPbbU2MAi6Q==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-musleabihf": {
+ "version": "4.57.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.57.0.tgz",
+ "integrity": "sha512-Xds90ITXJCNyX9pDhqf85MKWUI4lqjiPAipJ8OLp8xqI2Ehk+TCVhF9rvOoN8xTbcafow3QOThkNnrM33uCFQA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-gnu": {
+ "version": "4.57.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.57.0.tgz",
+ "integrity": "sha512-Xws2KA4CLvZmXjy46SQaXSejuKPhwVdaNinldoYfqruZBaJHqVo6hnRa8SDo9z7PBW5x84SH64+izmldCgbezw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-musl": {
+ "version": "4.57.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.57.0.tgz",
+ "integrity": "sha512-hrKXKbX5FdaRJj7lTMusmvKbhMJSGWJ+w++4KmjiDhpTgNlhYobMvKfDoIWecy4O60K6yA4SnztGuNTQF+Lplw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-loong64-gnu": {
+ "version": "4.57.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.57.0.tgz",
+ "integrity": "sha512-6A+nccfSDGKsPm00d3xKcrsBcbqzCTAukjwWK6rbuAnB2bHaL3r9720HBVZ/no7+FhZLz/U3GwwZZEh6tOSI8Q==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-loong64-musl": {
+ "version": "4.57.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.57.0.tgz",
+ "integrity": "sha512-4P1VyYUe6XAJtQH1Hh99THxr0GKMMwIXsRNOceLrJnaHTDgk1FTcTimDgneRJPvB3LqDQxUmroBclQ1S0cIJwQ==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-ppc64-gnu": {
+ "version": "4.57.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.57.0.tgz",
+ "integrity": "sha512-8Vv6pLuIZCMcgXre6c3nOPhE0gjz1+nZP6T+hwWjr7sVH8k0jRkH+XnfjjOTglyMBdSKBPPz54/y1gToSKwrSQ==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-ppc64-musl": {
+ "version": "4.57.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.57.0.tgz",
+ "integrity": "sha512-r1te1M0Sm2TBVD/RxBPC6RZVwNqUTwJTA7w+C/IW5v9Ssu6xmxWEi+iJQlpBhtUiT1raJ5b48pI8tBvEjEFnFA==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-gnu": {
+ "version": "4.57.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.57.0.tgz",
+ "integrity": "sha512-say0uMU/RaPm3CDQLxUUTF2oNWL8ysvHkAjcCzV2znxBr23kFfaxocS9qJm+NdkRhF8wtdEEAJuYcLPhSPbjuQ==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-musl": {
+ "version": "4.57.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.57.0.tgz",
+ "integrity": "sha512-/MU7/HizQGsnBREtRpcSbSV1zfkoxSTR7wLsRmBPQ8FwUj5sykrP1MyJTvsxP5KBq9SyE6kH8UQQQwa0ASeoQQ==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-s390x-gnu": {
+ "version": "4.57.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.57.0.tgz",
+ "integrity": "sha512-Q9eh+gUGILIHEaJf66aF6a414jQbDnn29zeu0eX3dHMuysnhTvsUvZTCAyZ6tJhUjnvzBKE4FtuaYxutxRZpOg==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-gnu": {
+ "version": "4.57.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.57.0.tgz",
+ "integrity": "sha512-OR5p5yG5OKSxHReWmwvM0P+VTPMwoBS45PXTMYaskKQqybkS3Kmugq1W+YbNWArF8/s7jQScgzXUhArzEQ7x0A==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-musl": {
+ "version": "4.57.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.57.0.tgz",
+ "integrity": "sha512-XeatKzo4lHDsVEbm1XDHZlhYZZSQYym6dg2X/Ko0kSFgio+KXLsxwJQprnR48GvdIKDOpqWqssC3iBCjoMcMpw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-openbsd-x64": {
+ "version": "4.57.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.57.0.tgz",
+ "integrity": "sha512-Lu71y78F5qOfYmubYLHPcJm74GZLU6UJ4THkf/a1K7Tz2ycwC2VUbsqbJAXaR6Bx70SRdlVrt2+n5l7F0agTUw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-openharmony-arm64": {
+ "version": "4.57.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.57.0.tgz",
+ "integrity": "sha512-v5xwKDWcu7qhAEcsUubiav7r+48Uk/ENWdr82MBZZRIm7zThSxCIVDfb3ZeRRq9yqk+oIzMdDo6fCcA5DHfMyA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openharmony"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-arm64-msvc": {
+ "version": "4.57.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.57.0.tgz",
+ "integrity": "sha512-XnaaaSMGSI6Wk8F4KK3QP7GfuuhjGchElsVerCplUuxRIzdvZ7hRBpLR0omCmw+kI2RFJB80nenhOoGXlJ5TfQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-ia32-msvc": {
+ "version": "4.57.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.57.0.tgz",
+ "integrity": "sha512-3K1lP+3BXY4t4VihLw5MEg6IZD3ojSYzqzBG571W3kNQe4G4CcFpSUQVgurYgib5d+YaCjeFow8QivWp8vuSvA==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-x64-gnu": {
+ "version": "4.57.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.57.0.tgz",
+ "integrity": "sha512-MDk610P/vJGc5L5ImE4k5s+GZT3en0KoK1MKPXCRgzmksAMk79j4h3k1IerxTNqwDLxsGxStEZVBqG0gIqZqoA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-x64-msvc": {
+ "version": "4.57.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.57.0.tgz",
+ "integrity": "sha512-Zv7v6q6aV+VslnpwzqKAmrk5JdVkLUzok2208ZXGipjb+msxBr/fJPZyeEXiFgH7k62Ak0SLIfxQRZQvTuf7rQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@types/estree": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
+ "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/fs-extra": {
+ "version": "8.1.5",
+ "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-8.1.5.tgz",
+ "integrity": "sha512-0dzKcwO+S8s2kuF5Z9oUWatQJj5Uq/iqphEtE3GQJVRRYm/tD1LglU2UnXi2A8jLq5umkGouOXOR9y0n613ZwQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/node": {
+ "version": "25.1.0",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-25.1.0.tgz",
+ "integrity": "sha512-t7frlewr6+cbx+9Ohpl0NOTKXZNV9xHRmNOvql47BFJKcEG1CxtxlPEEe+gR9uhVWM4DwhnvTF110mIL4yP9RA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "undici-types": "~7.16.0"
+ }
+ },
+ "node_modules/@types/slice-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/@types/slice-ansi/-/slice-ansi-4.0.0.tgz",
+ "integrity": "sha512-+OpjSaq85gvlZAYINyzKpLeiFkSC4EsC6IIiT6v6TLSU5k5U83fHGj9Lel8oKEXM0HqgrMVCjXPDPVICtxF7EQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@xmldom/xmldom": {
+ "version": "0.8.11",
+ "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.11.tgz",
+ "integrity": "sha512-cQzWCtO6C8TQiYl1ruKNn2U6Ao4o4WBBcbL61yJl84x+j5sOWWFU9X7DpND8XZG3daDppSsigMdfAIl2upQBRw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/astral-regex": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
+ "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/at-least-node": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
+ "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">= 4.0.0"
+ }
+ },
+ "node_modules/base64-js": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
+ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/big-integer": {
+ "version": "1.6.52",
+ "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz",
+ "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==",
+ "dev": true,
+ "license": "Unlicense",
+ "engines": {
+ "node": ">=0.6"
+ }
+ },
+ "node_modules/bplist-parser": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.3.2.tgz",
+ "integrity": "sha512-apC2+fspHGI3mMKj+dGevkGo/tCqVB8jMb6i+OX+E29p0Iposz07fABkRIfVUPNd5A5VbuOz1bZbnmkKLYF+wQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "big-integer": "1.6.x"
+ },
+ "engines": {
+ "node": ">= 5.10.0"
+ }
+ },
+ "node_modules/buffer-crc32": {
+ "version": "0.2.13",
+ "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
+ "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/chownr": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz",
+ "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/commander": {
+ "version": "12.1.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz",
+ "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/cross-spawn": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/debug": {
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/define-lazy-prop": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz",
+ "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/elementtree": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/elementtree/-/elementtree-0.1.7.tgz",
+ "integrity": "sha512-wkgGT6kugeQk/P6VZ/f4T+4HB41BVgNBq5CDIZVbQ02nvTVqAiVTbskxxu3eA/X96lMlfYOwnLQpN2v5E1zDEg==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "sax": "1.1.4"
+ },
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/env-paths": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz",
+ "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/esbuild": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.2.tgz",
+ "integrity": "sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "optionalDependencies": {
+ "@esbuild/aix-ppc64": "0.27.2",
+ "@esbuild/android-arm": "0.27.2",
+ "@esbuild/android-arm64": "0.27.2",
+ "@esbuild/android-x64": "0.27.2",
+ "@esbuild/darwin-arm64": "0.27.2",
+ "@esbuild/darwin-x64": "0.27.2",
+ "@esbuild/freebsd-arm64": "0.27.2",
+ "@esbuild/freebsd-x64": "0.27.2",
+ "@esbuild/linux-arm": "0.27.2",
+ "@esbuild/linux-arm64": "0.27.2",
+ "@esbuild/linux-ia32": "0.27.2",
+ "@esbuild/linux-loong64": "0.27.2",
+ "@esbuild/linux-mips64el": "0.27.2",
+ "@esbuild/linux-ppc64": "0.27.2",
+ "@esbuild/linux-riscv64": "0.27.2",
+ "@esbuild/linux-s390x": "0.27.2",
+ "@esbuild/linux-x64": "0.27.2",
+ "@esbuild/netbsd-arm64": "0.27.2",
+ "@esbuild/netbsd-x64": "0.27.2",
+ "@esbuild/openbsd-arm64": "0.27.2",
+ "@esbuild/openbsd-x64": "0.27.2",
+ "@esbuild/openharmony-arm64": "0.27.2",
+ "@esbuild/sunos-x64": "0.27.2",
+ "@esbuild/win32-arm64": "0.27.2",
+ "@esbuild/win32-ia32": "0.27.2",
+ "@esbuild/win32-x64": "0.27.2"
+ }
+ },
+ "node_modules/fd-slicer": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
+ "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "pend": "~1.2.0"
+ }
+ },
+ "node_modules/fdir": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
+ "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "peerDependencies": {
+ "picomatch": "^3 || ^4"
+ },
+ "peerDependenciesMeta": {
+ "picomatch": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/fs-extra": {
+ "version": "11.3.3",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.3.tgz",
+ "integrity": "sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^6.0.1",
+ "universalify": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=14.14"
+ }
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/glob": {
+ "version": "13.0.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.0.tgz",
+ "integrity": "sha512-tvZgpqk6fz4BaNZ66ZsRaZnbHvP/jG3uKJvAZOwEVUL4RTA5nJeeLYfyN9/VA8NX/V3IBG+hkeuGpKjvELkVhA==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
+ "dependencies": {
+ "minimatch": "^10.1.1",
+ "minipass": "^7.1.2",
+ "path-scurry": "^2.0.0"
+ },
+ "engines": {
+ "node": "20 || >=22"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/graceful-fs": {
+ "version": "4.2.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/ini": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz",
+ "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ }
+ },
+ "node_modules/is-docker": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
+ "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "is-docker": "cli.js"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-wsl": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
+ "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-docker": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/jsonfile": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz",
+ "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "universalify": "^2.0.0"
+ },
+ "optionalDependencies": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
+ "node_modules/kleur": {
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz",
+ "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/lru-cache": {
+ "version": "11.2.5",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.5.tgz",
+ "integrity": "sha512-vFrFJkWtJvJnD5hg+hJvVE8Lh/TcMzKnTgCWmtBipwI5yLX/iX+5UB2tfuyODF5E7k9xEzMdYgGqaSb1c0c5Yw==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
+ "engines": {
+ "node": "20 || >=22"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "10.1.1",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz",
+ "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
+ "dependencies": {
+ "@isaacs/brace-expansion": "^5.0.0"
+ },
+ "engines": {
+ "node": "20 || >=22"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/minipass": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
+ "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ }
+ },
+ "node_modules/minizlib": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz",
+ "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "minipass": "^7.1.2"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/nanoid": {
+ "version": "3.3.11",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
+ "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/native-run": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/native-run/-/native-run-2.0.3.tgz",
+ "integrity": "sha512-U1PllBuzW5d1gfan+88L+Hky2eZx+9gv3Pf6rNBxKbORxi7boHzqiA6QFGSnqMem4j0A9tZ08NMIs5+0m/VS1Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@ionic/utils-fs": "^3.1.7",
+ "@ionic/utils-terminal": "^2.3.4",
+ "bplist-parser": "^0.3.2",
+ "debug": "^4.3.4",
+ "elementtree": "^0.1.7",
+ "ini": "^4.1.1",
+ "plist": "^3.1.0",
+ "split2": "^4.2.0",
+ "through2": "^4.0.2",
+ "tslib": "^2.6.2",
+ "yauzl": "^2.10.0"
+ },
+ "bin": {
+ "native-run": "bin/native-run"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
+ "node_modules/open": {
+ "version": "8.4.2",
+ "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz",
+ "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "define-lazy-prop": "^2.0.0",
+ "is-docker": "^2.1.1",
+ "is-wsl": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/package-json-from-dist": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
+ "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
+ "dev": true,
+ "license": "BlueOak-1.0.0"
+ },
+ "node_modules/path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-scurry": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.1.tgz",
+ "integrity": "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
+ "dependencies": {
+ "lru-cache": "^11.0.0",
+ "minipass": "^7.1.2"
+ },
+ "engines": {
+ "node": "20 || >=22"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/pend": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
+ "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/picocolors": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/picomatch": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
+ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/plist": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/plist/-/plist-3.1.0.tgz",
+ "integrity": "sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@xmldom/xmldom": "^0.8.8",
+ "base64-js": "^1.5.1",
+ "xmlbuilder": "^15.1.1"
+ },
+ "engines": {
+ "node": ">=10.4.0"
+ }
+ },
+ "node_modules/postcss": {
+ "version": "8.5.6",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
+ "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "nanoid": "^3.3.11",
+ "picocolors": "^1.1.1",
+ "source-map-js": "^1.2.1"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/prompts": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz",
+ "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "kleur": "^3.0.3",
+ "sisteransi": "^1.0.5"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/prompts/node_modules/kleur": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
+ "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/readable-stream": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+ "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/rimraf": {
+ "version": "6.1.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-6.1.2.tgz",
+ "integrity": "sha512-cFCkPslJv7BAXJsYlK1dZsbP8/ZNLkCAQ0bi1hf5EKX2QHegmDFEFA6QhuYJlk7UDdc+02JjO80YSOrWPpw06g==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
+ "dependencies": {
+ "glob": "^13.0.0",
+ "package-json-from-dist": "^1.0.1"
+ },
+ "bin": {
+ "rimraf": "dist/esm/bin.mjs"
+ },
+ "engines": {
+ "node": "20 || >=22"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/rollup": {
+ "version": "4.57.0",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.57.0.tgz",
+ "integrity": "sha512-e5lPJi/aui4TO1LpAXIRLySmwXSE8k3b9zoGfd42p67wzxog4WHjiZF3M2uheQih4DGyc25QEV4yRBbpueNiUA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "1.0.8"
+ },
+ "bin": {
+ "rollup": "dist/bin/rollup"
+ },
+ "engines": {
+ "node": ">=18.0.0",
+ "npm": ">=8.0.0"
+ },
+ "optionalDependencies": {
+ "@rollup/rollup-android-arm-eabi": "4.57.0",
+ "@rollup/rollup-android-arm64": "4.57.0",
+ "@rollup/rollup-darwin-arm64": "4.57.0",
+ "@rollup/rollup-darwin-x64": "4.57.0",
+ "@rollup/rollup-freebsd-arm64": "4.57.0",
+ "@rollup/rollup-freebsd-x64": "4.57.0",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.57.0",
+ "@rollup/rollup-linux-arm-musleabihf": "4.57.0",
+ "@rollup/rollup-linux-arm64-gnu": "4.57.0",
+ "@rollup/rollup-linux-arm64-musl": "4.57.0",
+ "@rollup/rollup-linux-loong64-gnu": "4.57.0",
+ "@rollup/rollup-linux-loong64-musl": "4.57.0",
+ "@rollup/rollup-linux-ppc64-gnu": "4.57.0",
+ "@rollup/rollup-linux-ppc64-musl": "4.57.0",
+ "@rollup/rollup-linux-riscv64-gnu": "4.57.0",
+ "@rollup/rollup-linux-riscv64-musl": "4.57.0",
+ "@rollup/rollup-linux-s390x-gnu": "4.57.0",
+ "@rollup/rollup-linux-x64-gnu": "4.57.0",
+ "@rollup/rollup-linux-x64-musl": "4.57.0",
+ "@rollup/rollup-openbsd-x64": "4.57.0",
+ "@rollup/rollup-openharmony-arm64": "4.57.0",
+ "@rollup/rollup-win32-arm64-msvc": "4.57.0",
+ "@rollup/rollup-win32-ia32-msvc": "4.57.0",
+ "@rollup/rollup-win32-x64-gnu": "4.57.0",
+ "@rollup/rollup-win32-x64-msvc": "4.57.0",
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/sax": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.1.4.tgz",
+ "integrity": "sha512-5f3k2PbGGp+YtKJjOItpg3P99IMD84E4HOvcfleTb5joCHNXYLsR9yWFPOYGgaeMPDubQILTCMdsFb2OMeOjtg==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/semver": {
+ "version": "7.7.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
+ "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/signal-exit": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/sisteransi": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
+ "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/slice-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
+ "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "astral-regex": "^2.0.0",
+ "is-fullwidth-code-point": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/slice-ansi?sponsor=1"
+ }
+ },
+ "node_modules/source-map-js": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
+ "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/split2": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz",
+ "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">= 10.x"
+ }
+ },
+ "node_modules/string_decoder": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "~5.2.0"
+ }
+ },
+ "node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/tar": {
+ "version": "7.5.7",
+ "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.7.tgz",
+ "integrity": "sha512-fov56fJiRuThVFXD6o6/Q354S7pnWMJIVlDBYijsTNx6jKSE4pvrDTs6lUnmGvNyfJwFQQwWy3owKz1ucIhveQ==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
+ "dependencies": {
+ "@isaacs/fs-minipass": "^4.0.0",
+ "chownr": "^3.0.0",
+ "minipass": "^7.1.2",
+ "minizlib": "^3.1.0",
+ "yallist": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/through2": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz",
+ "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "readable-stream": "3"
+ }
+ },
+ "node_modules/tinyglobby": {
+ "version": "0.2.15",
+ "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz",
+ "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fdir": "^6.5.0",
+ "picomatch": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/SuperchupuDev"
+ }
+ },
+ "node_modules/tree-kill": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz",
+ "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "tree-kill": "cli.js"
+ }
+ },
+ "node_modules/tslib": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
+ "license": "0BSD"
+ },
+ "node_modules/undici-types": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz",
+ "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/universalify": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
+ "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 10.0.0"
+ }
+ },
+ "node_modules/untildify": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz",
+ "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/vite": {
+ "version": "7.3.1",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz",
+ "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "esbuild": "^0.27.0",
+ "fdir": "^6.5.0",
+ "picomatch": "^4.0.3",
+ "postcss": "^8.5.6",
+ "rollup": "^4.43.0",
+ "tinyglobby": "^0.2.15"
+ },
+ "bin": {
+ "vite": "bin/vite.js"
+ },
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ },
+ "funding": {
+ "url": "https://github.com/vitejs/vite?sponsor=1"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.3"
+ },
+ "peerDependencies": {
+ "@types/node": "^20.19.0 || >=22.12.0",
+ "jiti": ">=1.21.0",
+ "less": "^4.0.0",
+ "lightningcss": "^1.21.0",
+ "sass": "^1.70.0",
+ "sass-embedded": "^1.70.0",
+ "stylus": ">=0.54.8",
+ "sugarss": "^5.0.0",
+ "terser": "^5.16.0",
+ "tsx": "^4.8.1",
+ "yaml": "^2.4.2"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ },
+ "jiti": {
+ "optional": true
+ },
+ "less": {
+ "optional": true
+ },
+ "lightningcss": {
+ "optional": true
+ },
+ "sass": {
+ "optional": true
+ },
+ "sass-embedded": {
+ "optional": true
+ },
+ "stylus": {
+ "optional": true
+ },
+ "sugarss": {
+ "optional": true
+ },
+ "terser": {
+ "optional": true
+ },
+ "tsx": {
+ "optional": true
+ },
+ "yaml": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/xml2js": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz",
+ "integrity": "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "sax": ">=0.6.0",
+ "xmlbuilder": "~11.0.0"
+ },
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
+ "node_modules/xml2js/node_modules/xmlbuilder": {
+ "version": "11.0.1",
+ "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz",
+ "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/xmlbuilder": {
+ "version": "15.1.1",
+ "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz",
+ "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/yallist": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz",
+ "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/yauzl": {
+ "version": "2.10.0",
+ "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
+ "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "buffer-crc32": "~0.2.3",
+ "fd-slicer": "~1.1.0"
+ }
+ }
+ }
+}
diff --git a/packages/example-app-capacitor/package.json b/example-app/package.json
similarity index 91%
rename from packages/example-app-capacitor/package.json
rename to example-app/package.json
index a4a5914..99bae93 100644
--- a/packages/example-app-capacitor/package.json
+++ b/example-app/package.json
@@ -18,7 +18,7 @@
"@capacitor/core": "^8.0.0",
"@capacitor/ios": "^8.0.0",
"@capacitor/splash-screen": "^8.0.0",
- "@capacitor/filesystem": "file:../capacitor-plugin"
+ "@capacitor/filesystem": "file:../"
},
"devDependencies": {
"@capacitor/cli": "^8.0.0",
diff --git a/packages/example-app-capacitor/src/assets/icon/favicon.ico b/example-app/src/assets/icon/favicon.ico
similarity index 100%
rename from packages/example-app-capacitor/src/assets/icon/favicon.ico
rename to example-app/src/assets/icon/favicon.ico
diff --git a/packages/example-app-capacitor/src/assets/imgs/logo.png b/example-app/src/assets/imgs/logo.png
similarity index 100%
rename from packages/example-app-capacitor/src/assets/imgs/logo.png
rename to example-app/src/assets/imgs/logo.png
diff --git a/packages/example-app-capacitor/src/css/style.css b/example-app/src/css/style.css
similarity index 100%
rename from packages/example-app-capacitor/src/css/style.css
rename to example-app/src/css/style.css
diff --git a/packages/example-app-capacitor/src/index.html b/example-app/src/index.html
similarity index 98%
rename from packages/example-app-capacitor/src/index.html
rename to example-app/src/index.html
index b60b6ab..4795839 100644
--- a/packages/example-app-capacitor/src/index.html
+++ b/example-app/src/index.html
@@ -1,4 +1,4 @@
-
+
diff --git a/packages/example-app-capacitor/src/js/capacitor-welcome.js b/example-app/src/js/capacitor-welcome.js
similarity index 96%
rename from packages/example-app-capacitor/src/js/capacitor-welcome.js
rename to example-app/src/js/capacitor-welcome.js
index f2fee99..53fce93 100644
--- a/packages/example-app-capacitor/src/js/capacitor-welcome.js
+++ b/example-app/src/js/capacitor-welcome.js
@@ -125,9 +125,9 @@ window.customElements.define(
connectedCallback() {
const self = this;
- self.shadowRoot.querySelector('#check-permission').addEventListener('click', async function (e) {
+ self.shadowRoot.querySelector('#check-permission').addEventListener('click', async function (e) {
let permissionStatus = await Filesystem.checkPermissions();
- console.log(permissionStatus)
+ console.log(permissionStatus);
});
self.shadowRoot.querySelector('#request-permission').addEventListener('click', async function (e) {
let permissionStatus = await Filesystem.requestPermissions();
@@ -199,11 +199,11 @@ window.customElements.define(
},
(chunkResult, err) => {
if (err) {
- console.log(err)
- return
+ console.log(err);
+ return;
}
- console.log('chunk read', JSON.stringify(chunkResult))
- }
+ console.log('chunk read', JSON.stringify(chunkResult));
+ },
);
});
self.shadowRoot.querySelector('#fileReadPartial').addEventListener('click', async function (e) {
@@ -212,7 +212,7 @@ window.customElements.define(
directory: Directory.Documents,
encoding: Encoding.UTF8,
offset: 4,
- length: 5
+ length: 5,
});
console.log('file contents', contents.data);
});
@@ -223,15 +223,15 @@ window.customElements.define(
directory: Directory.Documents,
encoding: Encoding.UTF8,
chunkSize: 3, // on Android the chunk size to be used will be much larger
- offset: 14
+ offset: 14,
},
(chunkResult, err) => {
if (err) {
- console.log(err)
- return
+ console.log(err);
+ return;
}
- console.log('chunk read', JSON.stringify(chunkResult))
- }
+ console.log('chunk read', JSON.stringify(chunkResult));
+ },
);
});
self.shadowRoot.querySelector('#fileAppend').addEventListener('click', async function (e) {
@@ -464,11 +464,13 @@ window.customElements.define(
await rmdirAll('da');
console.log('copy finished');
});
- self.shadowRoot.querySelector("#downloadSmallFile").addEventListener('click', async function (e) {
+ self.shadowRoot.querySelector('#downloadSmallFile').addEventListener('click', async function (e) {
download('https://raw.githubusercontent.com/mozilla/pdf.js/ba2edeae/examples/learning/helloworld.pdf');
});
- self.shadowRoot.querySelector("#downloadLargeFile").addEventListener('click', async function (e) {
- download('https://raw.githubusercontent.com/kyokidG/large-pdf-viewer-poc/58a3df6adc4fe9bd5f02d2f583d6747e187d93ae/public/test2.pdf');
+ self.shadowRoot.querySelector('#downloadLargeFile').addEventListener('click', async function (e) {
+ download(
+ 'https://raw.githubusercontent.com/kyokidG/large-pdf-viewer-poc/58a3df6adc4fe9bd5f02d2f583d6747e187d93ae/public/test2.pdf',
+ );
});
// download a file from the provided url
@@ -476,25 +478,25 @@ window.customElements.define(
try {
const fileUrlSplit = file.split('/');
const path = fileUrlSplit[fileUrlSplit.length - 1];
-
+
Filesystem.addListener('progress', (status) => {
const progress = status.bytes / status.contentLength;
- console.log("Download progress -> " + progress);
+ console.log('Download progress -> ' + progress);
});
-
+
const downloadFileResult = await Filesystem.downloadFile({
url: file,
directory: Directory.Cache,
path,
progress: true,
});
-
+
console.log('Downloaded file!', downloadFileResult);
alert('Downloaded file successfully!');
} catch (err) {
console.error('Unable to download file', err);
}
- };
+ }
// Helper function to run the provided promise-returning function on a single item or array of items
async function doAll(item, callback) {
@@ -511,7 +513,7 @@ window.customElements.define(
path: path,
data: path,
encoding: Encoding.UTF8,
- })
+ }),
);
}
// Delete many files
@@ -520,7 +522,7 @@ window.customElements.define(
Filesystem.deleteFile({
directory: Directory.Data,
path: path,
- })
+ }),
);
}
// Create many directories
@@ -530,7 +532,7 @@ window.customElements.define(
directory: Directory.Data,
path: path,
recursive: true,
- })
+ }),
);
}
// Remove many directories
@@ -539,11 +541,11 @@ window.customElements.define(
Filesystem.rmdir({
directory: Directory.Data,
path: path,
- })
+ }),
);
}
}
- }
+ },
);
window.customElements.define(
@@ -572,5 +574,5 @@ window.customElements.define(
`;
}
- }
+ },
);
diff --git a/packages/example-app-capacitor/src/manifest.json b/example-app/src/manifest.json
similarity index 100%
rename from packages/example-app-capacitor/src/manifest.json
rename to example-app/src/manifest.json
diff --git a/packages/example-app-capacitor/vite.config.ts b/example-app/vite.config.ts
similarity index 100%
rename from packages/example-app-capacitor/vite.config.ts
rename to example-app/vite.config.ts
diff --git a/packages/capacitor-plugin/ios/.gitignore b/ios/.gitignore
similarity index 100%
rename from packages/capacitor-plugin/ios/.gitignore
rename to ios/.gitignore
diff --git a/packages/capacitor-plugin/ios/Sources/FilesystemPlugin/CAPPluginCall+Accelerators.swift b/ios/Sources/FilesystemPlugin/CAPPluginCall+Accelerators.swift
similarity index 100%
rename from packages/capacitor-plugin/ios/Sources/FilesystemPlugin/CAPPluginCall+Accelerators.swift
rename to ios/Sources/FilesystemPlugin/CAPPluginCall+Accelerators.swift
diff --git a/packages/capacitor-plugin/ios/Sources/FilesystemPlugin/FilesystemConstants.swift b/ios/Sources/FilesystemPlugin/FilesystemConstants.swift
similarity index 100%
rename from packages/capacitor-plugin/ios/Sources/FilesystemPlugin/FilesystemConstants.swift
rename to ios/Sources/FilesystemPlugin/FilesystemConstants.swift
diff --git a/packages/capacitor-plugin/ios/Sources/FilesystemPlugin/FilesystemError.swift b/ios/Sources/FilesystemPlugin/FilesystemError.swift
similarity index 100%
rename from packages/capacitor-plugin/ios/Sources/FilesystemPlugin/FilesystemError.swift
rename to ios/Sources/FilesystemPlugin/FilesystemError.swift
diff --git a/packages/capacitor-plugin/ios/Sources/FilesystemPlugin/FilesystemLocationResolver.swift b/ios/Sources/FilesystemPlugin/FilesystemLocationResolver.swift
similarity index 100%
rename from packages/capacitor-plugin/ios/Sources/FilesystemPlugin/FilesystemLocationResolver.swift
rename to ios/Sources/FilesystemPlugin/FilesystemLocationResolver.swift
diff --git a/packages/capacitor-plugin/ios/Sources/FilesystemPlugin/FilesystemOperation.swift b/ios/Sources/FilesystemPlugin/FilesystemOperation.swift
similarity index 100%
rename from packages/capacitor-plugin/ios/Sources/FilesystemPlugin/FilesystemOperation.swift
rename to ios/Sources/FilesystemPlugin/FilesystemOperation.swift
diff --git a/packages/capacitor-plugin/ios/Sources/FilesystemPlugin/FilesystemOperationExecutor.swift b/ios/Sources/FilesystemPlugin/FilesystemOperationExecutor.swift
similarity index 100%
rename from packages/capacitor-plugin/ios/Sources/FilesystemPlugin/FilesystemOperationExecutor.swift
rename to ios/Sources/FilesystemPlugin/FilesystemOperationExecutor.swift
diff --git a/packages/capacitor-plugin/ios/Sources/FilesystemPlugin/FilesystemPlugin.swift b/ios/Sources/FilesystemPlugin/FilesystemPlugin.swift
similarity index 100%
rename from packages/capacitor-plugin/ios/Sources/FilesystemPlugin/FilesystemPlugin.swift
rename to ios/Sources/FilesystemPlugin/FilesystemPlugin.swift
diff --git a/packages/capacitor-plugin/ios/Sources/FilesystemPlugin/IONFileStructures+Converters.swift b/ios/Sources/FilesystemPlugin/IONFileStructures+Converters.swift
similarity index 100%
rename from packages/capacitor-plugin/ios/Sources/FilesystemPlugin/IONFileStructures+Converters.swift
rename to ios/Sources/FilesystemPlugin/IONFileStructures+Converters.swift
diff --git a/packages/capacitor-plugin/ios/Sources/FilesystemPlugin/LegacyFilesystemImplementation.swift b/ios/Sources/FilesystemPlugin/LegacyFilesystemImplementation.swift
similarity index 100%
rename from packages/capacitor-plugin/ios/Sources/FilesystemPlugin/LegacyFilesystemImplementation.swift
rename to ios/Sources/FilesystemPlugin/LegacyFilesystemImplementation.swift
diff --git a/packages/capacitor-plugin/ios/Tests/FilesystemPluginTests/FilesystemPluginTests.swift b/ios/Tests/FilesystemPluginTests/FilesystemPluginTests.swift
similarity index 100%
rename from packages/capacitor-plugin/ios/Tests/FilesystemPluginTests/FilesystemPluginTests.swift
rename to ios/Tests/FilesystemPluginTests/FilesystemPluginTests.swift
diff --git a/package.json b/package.json
index 153b853..9c65ab2 100644
--- a/package.json
+++ b/package.json
@@ -1,9 +1,91 @@
{
- "name": "root",
- "private": true,
- "dependencies": {},
+ "name": "@capacitor/filesystem",
+ "version": "8.1.0",
+ "description": "The Filesystem API provides a NodeJS-like API for working with files on the device.",
+ "main": "dist/plugin.cjs.js",
+ "module": "dist/esm/index.js",
+ "types": "dist/esm/index.d.ts",
+ "unpkg": "dist/plugin.js",
+ "files": [
+ "android/src/main/",
+ "android/build.gradle",
+ "dist/",
+ "ios/Sources",
+ "ios/Tests",
+ "Package.swift",
+ "CapacitorFilesystem.podspec"
+ ],
+ "author": "Outsystems",
+ "license": "MIT",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/ionic-team/capacitor-filesystem.git"
+ },
+ "bugs": {
+ "url": "https://github.com/ionic-team/capacitor-filesystem/issues"
+ },
+ "keywords": [
+ "capacitor",
+ "plugin",
+ "native"
+ ],
+ "scripts": {
+ "verify": "npm run verify:ios && npm run verify:android && npm run verify:web",
+ "verify:ios": "xcodebuild -scheme CapacitorFilesystem -destination generic/platform=iOS",
+ "verify:android": "cd android && ./gradlew clean build test && cd ..",
+ "verify:web": "npm run build",
+ "lint": "npm run eslint && npm run prettier -- --check && npm run swiftlint -- lint",
+ "fmt": "npm run eslint -- --fix && npm run prettier -- --write && npm run swiftlint -- --fix --format",
+ "eslint": "eslint . --ext ts",
+ "prettier": "prettier \"**/*.{css,html,ts,js,java}\" --plugin=prettier-plugin-java",
+ "swiftlint": "node-swiftlint",
+ "docgen": "docgen --api FilesystemPlugin --output-readme README.md --output-json dist/docs.json",
+ "build": "npm run clean && npm run docgen && tsc && rollup -c rollup.config.mjs",
+ "clean": "rimraf ./dist",
+ "watch": "tsc --watch",
+ "prepublishOnly": "npm run build",
+ "publish:cocoapod": "pod trunk push ./CapacitorFilesystem.podspec --allow-warnings"
+ },
+ "dependencies": {
+ "@capacitor/synapse": "^1.0.4"
+ },
"devDependencies": {
+ "@capacitor/android": "^8.0.0",
+ "@capacitor/core": "^8.0.0",
+ "@capacitor/docgen": "^0.3.0",
+ "@capacitor/ios": "^8.0.0",
+ "@ionic/eslint-config": "^0.4.0",
+ "@ionic/prettier-config": "^4.0.0",
+ "@ionic/swiftlint-config": "^2.0.0",
+ "@semantic-release/changelog": "^6.0.3",
+ "@semantic-release/exec": "^7.1.0",
+ "@semantic-release/git": "^10.0.1",
+ "@semantic-release/github": "^12.0.2",
+ "@semantic-release/npm": "^13.1.2",
"@types/node": "^24.10.1",
- "typescript": "^5.9.3"
+ "eslint": "^8.56.0",
+ "prettier": "^3.6.2",
+ "prettier-plugin-java": "^2.7.7",
+ "rimraf": "^6.1.2",
+ "rollup": "^4.53.3",
+ "semantic-release": "^25.0.2",
+ "swiftlint": "^2.0.0",
+ "typescript": "~5.9.3"
+ },
+ "peerDependencies": {
+ "@capacitor/core": ">=8.0.0"
+ },
+ "prettier": "@ionic/prettier-config",
+ "swiftlint": "@ionic/swiftlint-config",
+ "eslintConfig": {
+ "extends": "@ionic/eslint-config/recommended"
+ },
+ "capacitor": {
+ "ios": {
+ "src": "ios"
+ },
+ "android": {
+ "src": "android"
+ }
}
-}
\ No newline at end of file
+}
diff --git a/packages/capacitor-plugin/.gitignore b/packages/capacitor-plugin/.gitignore
deleted file mode 100644
index df9f0c2..0000000
--- a/packages/capacitor-plugin/.gitignore
+++ /dev/null
@@ -1,70 +0,0 @@
-# node files
-dist
-node_modules
-
-# iOS files
-Pods
-Podfile.lock
-Package.resolved
-Build
-xcuserdata
-/.build
-/Packages
-xcuserdata/
-DerivedData/
-.swiftpm/configuration/registries.json
-.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata
-.netrc
-
-
-# macOS files
-.DS_Store
-
-
-
-# Based on Android gitignore template: https://github.com/github/gitignore/blob/HEAD/Android.gitignore
-
-# Built application files
-*.apk
-*.ap_
-
-# Files for the ART/Dalvik VM
-*.dex
-
-# Java class files
-*.class
-
-# Generated files
-bin
-gen
-out
-
-# Gradle files
-.gradle
-build
-
-# Local configuration file (sdk path, etc)
-local.properties
-
-# Proguard folder generated by Eclipse
-proguard
-
-# Log Files
-*.log
-
-# Android Studio Navigation editor temp files
-.navigation
-
-# Android Studio captures folder
-captures
-
-# IntelliJ
-*.iml
-.idea
-
-# Keystore files
-# Uncomment the following line if you do not want to check your keystore files in.
-#*.jks
-
-# External native build folder generated in Android Studio 2.2 and later
-.externalNativeBuild
diff --git a/packages/capacitor-plugin/LICENSE b/packages/capacitor-plugin/LICENSE
deleted file mode 100644
index 774efa0..0000000
--- a/packages/capacitor-plugin/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-MIT License
-
-Copyright (c) 2025 Ionic
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/packages/capacitor-plugin/README.md b/packages/capacitor-plugin/README.md
deleted file mode 100644
index 90c91df..0000000
--- a/packages/capacitor-plugin/README.md
+++ /dev/null
@@ -1,808 +0,0 @@
-# @capacitor/filesystem
-
-The Filesystem API provides a NodeJS-like API for working with files on the device.
-
-## Install
-
-```bash
-npm install @capacitor/filesystem
-npx cap sync
-```
-
-## Apple Privacy Manifest Requirements
-
-Apple mandates that app developers now specify approved reasons for API usage to enhance user privacy. By May 1st, 2024, it's required to include these reasons when submitting apps to the App Store Connect.
-
-When using this specific plugin in your app, you must create a `PrivacyInfo.xcprivacy` file in `/ios/App` or use the VS Code Extension to generate it, specifying the usage reasons.
-
-For detailed steps on how to do this, please see the [Capacitor Docs](https://capacitorjs.com/docs/ios/privacy-manifest).
-
-**For this plugin, the required dictionary key is [NSPrivacyAccessedAPICategoryFileTimestamp](https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_use_of_required_reason_api#4278393) and the recommended reason is [C617.1](https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_use_of_required_reason_api#4278393).**
-
-### Example PrivacyInfo.xcprivacy
-
-```xml
-
-
-
-
- NSPrivacyAccessedAPITypes
-
-
-
- NSPrivacyAccessedAPIType
- NSPrivacyAccessedAPICategoryFileTimestamp
- NSPrivacyAccessedAPITypeReasons
-
- C617.1
-
-
-
-
-
-```
-
-## Migrating from downloadFile to File Transfer plugin
-
-As of version 7.1.0, the `downloadFile` functionality in the Filesystem plugin has been deprecated in favor of the new [@capacitor/file-transfer](https://capacitorjs.com/docs/apis/file-transfer) plugin.
-
-### Installing the File Transfer plugin
-
-```bash
-npm install @capacitor/file-transfer
-npx cap sync
-```
-
-### Migration example
-
-Before (using Filesystem plugin):
-
-```typescript
-import { Filesystem, Directory } from '@capacitor/filesystem';
-
-await Filesystem.downloadFile({
- url: 'https://example.com/file.pdf',
- path: 'downloaded-file.pdf',
- directory: Directory.Documents,
- progress: true
-});
-
-// Progress events
-Filesystem.addListener('progress', (progress) => {
- console.log(`Downloaded ${progress.bytes} of ${progress.contentLength}`);
-});
-```
-
-After (using File Transfer plugin):
-
-```typescript
-import { FileTransfer } from '@capacitor/file-transfer';
-import { Filesystem, Directory } from '@capacitor/filesystem';
-
-// First get the full file path using Filesystem
-const fileInfo = await Filesystem.getUri({
- directory: Directory.Documents,
- path: 'downloaded-file.pdf'
-});
-
-// Then use the FileTransfer plugin to download
-await FileTransfer.downloadFile({
- url: 'https://example.com/file.pdf',
- path: fileInfo.uri,
- progress: true
-});
-
-// Progress events
-FileTransfer.addListener('progress', (progress) => {
- console.log(`Downloaded ${progress.bytes} of ${progress.contentLength}`);
-});
-```
-
-The File Transfer plugin offers improved reliability, better error handling with specific error codes, and also adds upload functionality.
-
-## iOS
-
-To have files appear in the Files app, you must also set the following keys to `YES` in `Info.plist`:
-
-- `UIFileSharingEnabled` (`Application supports iTunes file sharing`)
-- `LSSupportsOpeningDocumentsInPlace` (`Supports opening documents in place`)
-
-Read about [Configuring iOS](https://capacitorjs.com/docs/ios/configuration) for help.
-
-## Android
-
-If using `Directory.Documents` or `Directory.ExternalStorage`, in Android 10 and older, this API requires the following permissions be added to your `AndroidManifest.xml`:
-
-```xml
-
-
-```
-
-Read about [Setting Permissions](https://capacitorjs.com/docs/android/configuration#setting-permissions) in the [Android Guide](https://capacitorjs.com/docs/android) for more information on setting Android permissions.
-
-Note that `Directory.ExternalStorage` is only available on Android 9 or older and `Directory.Documents` only allows to access the files/folders created by your app on Android on Android 11 and newer.
-
-Working with large files may require you to add `android:largeHeap="true"` to the `` tag in `AndroidManifest.xml`.
-
-## Understanding Directories and Files
-
-iOS and Android have additional layers of separation between files, such as special directories that are backed up to the Cloud, or ones for storing Documents. The Filesystem API offers a simple way to scope each operation to a specific special directory on the device.
-
-Additionally, the Filesystem API supports using full `file://` paths, or reading `content://` files on Android. Simply leave out the `directory` param to use a full file path.
-
-## Example
-
-```typescript
-import { Filesystem, Directory, Encoding } from "@capacitor/filesystem";
-
-const writeSecretFile = async () => {
- await Filesystem.writeFile({
- path: "secrets/text.txt",
- data: "This is a test",
- directory: Directory.Documents,
- encoding: Encoding.UTF8,
- });
-};
-
-const readSecretFile = async () => {
- const contents = await Filesystem.readFile({
- path: "secrets/text.txt",
- directory: Directory.Documents,
- encoding: Encoding.UTF8,
- });
-
- console.log("secrets:", contents);
-};
-
-const deleteSecretFile = async () => {
- await Filesystem.deleteFile({
- path: "secrets/text.txt",
- directory: Directory.Documents,
- });
-};
-
-const readFilePath = async () => {
- // Here's an example of reading a file with a full file path. Use this to
- // read binary data (base64 encoded) from plugins that return File URIs, such as
- // the Camera.
- const contents = await Filesystem.readFile({
- path: "file:///var/mobile/Containers/Data/Application/22A433FD-D82D-4989-8BE6-9FC49DEA20BB/Documents/text.txt",
- });
-
- console.log("data:", contents);
-};
-
-const appendBinaryData = async () => {
- // Here's an example of appending binary data, which should be sent to the plugin
- // as base64 encoded, and without providing any `Encoding`.
- await Filesystem.appendFile({
- path: "file.bin",
- directory: Directory.Cache,
- data: "VGhpcyBpcyBtZWFudCB0byByZXByZXNlbnQgYSBCaW5hcnkgRGF0YSBleGFtcGxlIGVuY29kZWQgaW4gQmFzZTY0Lg=="
- });
-};
-```
-
-## API
-
-
-
-* [`checkPermissions()`](#checkpermissions)
-* [`requestPermissions()`](#requestpermissions)
-* [`readFile(...)`](#readfile)
-* [`readFileInChunks(...)`](#readfileinchunks)
-* [`writeFile(...)`](#writefile)
-* [`appendFile(...)`](#appendfile)
-* [`deleteFile(...)`](#deletefile)
-* [`mkdir(...)`](#mkdir)
-* [`rmdir(...)`](#rmdir)
-* [`readdir(...)`](#readdir)
-* [`getUri(...)`](#geturi)
-* [`stat(...)`](#stat)
-* [`rename(...)`](#rename)
-* [`copy(...)`](#copy)
-* [`downloadFile(...)`](#downloadfile)
-* [`addListener('progress', ...)`](#addlistenerprogress-)
-* [`removeAllListeners()`](#removealllisteners)
-* [Interfaces](#interfaces)
-* [Type Aliases](#type-aliases)
-* [Enums](#enums)
-
-
-
-For list of existing error codes, see [Errors](#errors).
-
-
-
-
-### checkPermissions()
-
-```typescript
-checkPermissions() => Promise
-```
-
-Check read/write permissions.
-Required on Android, only when using `Directory.Documents` or
-`Directory.ExternalStorage`.
-
-**Returns:** Promise<PermissionStatus>
-
-**Since:** 1.0.0
-
---------------------
-
-
-### requestPermissions()
-
-```typescript
-requestPermissions() => Promise
-```
-
-Request read/write permissions.
-Required on Android, only when using `Directory.Documents` or
-`Directory.ExternalStorage`.
-
-**Returns:** Promise<PermissionStatus>
-
-**Since:** 1.0.0
-
---------------------
-
-
-### readFile(...)
-
-```typescript
-readFile(options: ReadFileOptions) => Promise
-```
-
-Read a file from disk
-
-| Param | Type |
-| ------------- | ----------------------------------------------------------- |
-| **`options`** | ReadFileOptions |
-
-**Returns:** Promise<ReadFileResult>
-
-**Since:** 1.0.0
-
---------------------
-
-
-### readFileInChunks(...)
-
-```typescript
-readFileInChunks(options: ReadFileInChunksOptions, callback: ReadFileInChunksCallback) => Promise
-```
-
-Read a file from disk, in chunks.
-Native only (not available in web).
-Use the callback to receive each read chunk.
-If empty chunk is returned, it means file has been completely read.
-
-| Param | Type |
-| -------------- | ----------------------------------------------------------------------------- |
-| **`options`** | ReadFileInChunksOptions |
-| **`callback`** | ReadFileInChunksCallback |
-
-**Returns:** Promise<string>
-
-**Since:** 7.1.0
-
---------------------
-
-
-### writeFile(...)
-
-```typescript
-writeFile(options: WriteFileOptions) => Promise
-```
-
-Write a file to disk in the specified location on device
-
-| Param | Type |
-| ------------- | ------------------------------------------------------------- |
-| **`options`** | WriteFileOptions |
-
-**Returns:** Promise<WriteFileResult>
-
-**Since:** 1.0.0
-
---------------------
-
-
-### appendFile(...)
-
-```typescript
-appendFile(options: AppendFileOptions) => Promise
-```
-
-Append to a file on disk in the specified location on device
-
-| Param | Type |
-| ------------- | --------------------------------------------------------------- |
-| **`options`** | AppendFileOptions |
-
-**Since:** 1.0.0
-
---------------------
-
-
-### deleteFile(...)
-
-```typescript
-deleteFile(options: DeleteFileOptions) => Promise
-```
-
-Delete a file from disk
-
-| Param | Type |
-| ------------- | --------------------------------------------------------------- |
-| **`options`** | DeleteFileOptions |
-
-**Since:** 1.0.0
-
---------------------
-
-
-### mkdir(...)
-
-```typescript
-mkdir(options: MkdirOptions) => Promise
-```
-
-Create a directory.
-
-| Param | Type |
-| ------------- | ----------------------------------------------------- |
-| **`options`** | MkdirOptions |
-
-**Since:** 1.0.0
-
---------------------
-
-
-### rmdir(...)
-
-```typescript
-rmdir(options: RmdirOptions) => Promise
-```
-
-Remove a directory
-
-| Param | Type |
-| ------------- | ----------------------------------------------------- |
-| **`options`** | RmdirOptions |
-
-**Since:** 1.0.0
-
---------------------
-
-
-### readdir(...)
-
-```typescript
-readdir(options: ReaddirOptions) => Promise
-```
-
-Return a list of files from the directory (not recursive)
-
-| Param | Type |
-| ------------- | --------------------------------------------------------- |
-| **`options`** | ReaddirOptions |
-
-**Returns:** Promise<ReaddirResult>
-
-**Since:** 1.0.0
-
---------------------
-
-
-### getUri(...)
-
-```typescript
-getUri(options: GetUriOptions) => Promise
-```
-
-Return full File URI for a path and directory
-
-| Param | Type |
-| ------------- | ------------------------------------------------------- |
-| **`options`** | GetUriOptions |
-
-**Returns:** Promise<GetUriResult>
-
-**Since:** 1.0.0
-
---------------------
-
-
-### stat(...)
-
-```typescript
-stat(options: StatOptions) => Promise
-```
-
-Return data about a file
-
-| Param | Type |
-| ------------- | --------------------------------------------------- |
-| **`options`** | StatOptions |
-
-**Returns:** Promise<FileInfo>
-
-**Since:** 1.0.0
-
---------------------
-
-
-### rename(...)
-
-```typescript
-rename(options: RenameOptions) => Promise
-```
-
-Rename a file or directory
-
-| Param | Type |
-| ------------- | --------------------------------------------------- |
-| **`options`** | CopyOptions |
-
-**Since:** 1.0.0
-
---------------------
-
-
-### copy(...)
-
-```typescript
-copy(options: CopyOptions) => Promise
-```
-
-Copy a file or directory
-
-| Param | Type |
-| ------------- | --------------------------------------------------- |
-| **`options`** | CopyOptions |
-
-**Returns:** Promise<CopyResult>
-
-**Since:** 1.0.0
-
---------------------
-
-
-### downloadFile(...)
-
-```typescript
-downloadFile(options: DownloadFileOptions) => Promise
-```
-
-Perform a http request to a server and download the file to the specified destination.
-
-This method has been deprecated since version 7.1.0.
-We recommend using the @capacitor/file-transfer plugin instead, in conjunction with this plugin.
-
-| Param | Type |
-| ------------- | ------------------------------------------------------------------- |
-| **`options`** | DownloadFileOptions |
-
-**Returns:** Promise<DownloadFileResult>
-
-**Since:** 5.1.0
-
---------------------
-
-
-### addListener('progress', ...)
-
-```typescript
-addListener(eventName: 'progress', listenerFunc: ProgressListener) => Promise
-```
-
-Add a listener to file download progress events.
-
-This method has been deprecated since version 7.1.0.
-We recommend using the @capacitor/file-transfer plugin instead, in conjunction with this plugin.
-
-| Param | Type |
-| ------------------ | ------------------------------------------------------------- |
-| **`eventName`** | 'progress' |
-| **`listenerFunc`** | ProgressListener |
-
-**Returns:** Promise<PluginListenerHandle>
-
-**Since:** 5.1.0
-
---------------------
-
-
-### removeAllListeners()
-
-```typescript
-removeAllListeners() => Promise
-```
-
-Remove all listeners for this plugin.
-
-This method has been deprecated since version 7.1.0.
-We recommend using the @capacitor/file-transfer plugin instead, in conjunction with this plugin.
-
-**Since:** 5.2.0
-
---------------------
-
-
-### Interfaces
-
-
-#### PermissionStatus
-
-| Prop | Type |
-| ------------------- | ----------------------------------------------------------- |
-| **`publicStorage`** | PermissionState |
-
-
-#### ReadFileResult
-
-| Prop | Type | Description | Since |
-| ---------- | --------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | ----- |
-| **`data`** | string \| Blob | 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 |
-
-
-#### ReadFileOptions
-
-| Prop | Type | Description | Default | Since |
-| --------------- | ----------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------- | ----- |
-| **`path`** | string | The path of the file to read | | 1.0.0 |
-| **`directory`** | Directory | The `Directory` to read the file from | | 1.0.0 |
-| **`encoding`** | Encoding | The encoding to read the file in, if not provided, data is read as binary and returned as base64 encoded. Pass Encoding.UTF8 to read data as string | | 1.0.0 |
-| **`offset`** | number | The offset to start reading the file from, in bytes. Native only (not available in web). Can be used in conjunction with length to partially read files. | 0 | 8.1.0 |
-| **`length`** | number | The length of data to read, in bytes. Any non-positive value means to read to the end of the file. Native only (not available in web). Can be used in conjunction with offset to partially read files. | -1 | 8.1.0 |
-
-
-#### ReadFileInChunksOptions
-
-| Prop | Type | Description | Since |
-| --------------- | ------------------- | ---------------------------- | ----- |
-| **`chunkSize`** | number | Size of the chunks in bytes. | 7.1.0 |
-
-
-#### WriteFileResult
-
-| Prop | Type | Description | Since |
-| --------- | ------------------- | --------------------------------------- | ----- |
-| **`uri`** | string | The uri where the file was written into | 1.0.0 |
-
-
-#### WriteFileOptions
-
-| Prop | Type | Description | Default | Since |
-| --------------- | ----------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------ | ----- |
-| **`path`** | string | The path of the file to write | | 1.0.0 |
-| **`data`** | string \| Blob | The data to write Note: Blob data is only supported on Web. | | 1.0.0 |
-| **`directory`** | Directory | The `Directory` to store the file in | | 1.0.0 |
-| **`encoding`** | Encoding | The encoding to write the file in. If not provided, binary data will be written. For this, you must provide data as base64 encoded, so that the plugin can decode it before writing to disk. If you do not provide encoding and use non-base64 data, an error will be thrown. Pass Encoding.UTF8 to write data as string | | 1.0.0 |
-| **`recursive`** | boolean | Whether to create any missing parent directories. | false | 1.0.0 |
-
-
-#### AppendFileOptions
-
-| Prop | Type | Description | Since |
-| --------------- | ----------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----- |
-| **`path`** | string | The path of the file to append | 1.0.0 |
-| **`data`** | string | The data to append | 1.0.0 |
-| **`directory`** | Directory | The `Directory` to store the file in | 1.0.0 |
-| **`encoding`** | Encoding | The encoding to append to the file. If not provided, binary data will be appended. For this, you must provide data as base64 encoded, so that the plugin can decode it before writing to disk. If you do not provide encoding and use non-base64 data, an error will be thrown. Pass Encoding.UTF8 to write data as string | 1.0.0 |
-
-
-#### DeleteFileOptions
-
-| Prop | Type | Description | Since |
-| --------------- | ----------------------------------------------- | ---------------------------------------------------------------- | ----- |
-| **`path`** | string | The path of the file to delete | 1.0.0 |
-| **`directory`** | Directory | The `Directory` to delete the file from | 1.0.0 |
-
-
-#### MkdirOptions
-
-| Prop | Type | Description | Default | Since |
-| --------------- | ----------------------------------------------- | --------------------------------------------------------------------- | ------------------ | ----- |
-| **`path`** | string | The path of the new directory | | 1.0.0 |
-| **`directory`** | Directory | The `Directory` to make the new directory in | | 1.0.0 |
-| **`recursive`** | boolean | Whether to create any missing parent directories as well. | false | 1.0.0 |
-
-
-#### RmdirOptions
-
-| Prop | Type | Description | Default | Since |
-| --------------- | ----------------------------------------------- | --------------------------------------------------------------------- | ------------------ | ----- |
-| **`path`** | string | The path of the directory to remove | | 1.0.0 |
-| **`directory`** | Directory | The `Directory` to remove the directory from | | 1.0.0 |
-| **`recursive`** | boolean | Whether to recursively remove the contents of the directory | false | 1.0.0 |
-
-
-#### ReaddirResult
-
-| Prop | Type | Description | Since |
-| ----------- | ----------------------- | -------------------------------------------------- | ----- |
-| **`files`** | FileInfo[] | List of files and directories inside the directory | 1.0.0 |
-
-
-#### FileInfo
-
-| Prop | Type | Description | Since |
-| ----------- | ---------------------------------- | ------------------------------------------------------------------------------------ | ----- |
-| **`name`** | string | Name of the file or directory. | 7.1.0 |
-| **`type`** | 'file' \| 'directory' | Type of the file. | 4.0.0 |
-| **`size`** | number | Size of the file in bytes. | 4.0.0 |
-| **`ctime`** | number | Time of creation in milliseconds. It's not available on Android 7 and older devices. | 7.1.0 |
-| **`mtime`** | number | Time of last modification in milliseconds. | 7.1.0 |
-| **`uri`** | string | The uri of the file. | 4.0.0 |
-
-
-#### ReaddirOptions
-
-| Prop | Type | Description | Since |
-| --------------- | ----------------------------------------------- | ----------------------------------------------------------- | ----- |
-| **`path`** | string | The path of the directory to read | 1.0.0 |
-| **`directory`** | Directory | The `Directory` to list files from | 1.0.0 |
-
-
-#### GetUriResult
-
-| Prop | Type | Description | Since |
-| --------- | ------------------- | ------------------- | ----- |
-| **`uri`** | string | The uri of the file | 1.0.0 |
-
-
-#### GetUriOptions
-
-| Prop | Type | Description | Since |
-| --------------- | ----------------------------------------------- | -------------------------------------------------------------- | ----- |
-| **`path`** | string | The path of the file to get the URI for | 1.0.0 |
-| **`directory`** | Directory | The `Directory` to get the file under | 1.0.0 |
-
-
-#### StatOptions
-
-| Prop | Type | Description | Since |
-| --------------- | ----------------------------------------------- | -------------------------------------------------------------- | ----- |
-| **`path`** | string | The path of the file to get data about | 1.0.0 |
-| **`directory`** | Directory | The `Directory` to get the file under | 1.0.0 |
-
-
-#### CopyOptions
-
-| Prop | Type | Description | Since |
-| ----------------- | ----------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----- |
-| **`from`** | string | The existing file or directory | 1.0.0 |
-| **`to`** | string | The destination file or directory | 1.0.0 |
-| **`directory`** | Directory | The `Directory` containing the existing file or directory | 1.0.0 |
-| **`toDirectory`** | Directory | The `Directory` containing the destination file or directory. If not supplied will use the 'directory' parameter as the destination | 1.0.0 |
-
-
-#### CopyResult
-
-| Prop | Type | Description | Since |
-| --------- | ------------------- | -------------------------------------- | ----- |
-| **`uri`** | string | The uri where the file was copied into | 4.0.0 |
-
-
-#### DownloadFileResult
-
-| Prop | Type | Description | Since |
-| ---------- | ------------------- | -------------------------------------------------------------------- | ----- |
-| **`path`** | string | The path the file was downloaded to. | 5.1.0 |
-| **`blob`** | Blob | The blob data of the downloaded file. This is only available on web. | 5.1.0 |
-
-
-#### DownloadFileOptions
-
-| Prop | Type | Description | Default | Since |
-| --------------- | ----------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------ | ----- |
-| **`path`** | string | The path the downloaded file should be moved to. | | 5.1.0 |
-| **`directory`** | Directory | 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 |
-| **`progress`** | boolean | 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 |
-| **`recursive`** | boolean | Whether to create any missing parent directories. | false | 5.1.2 |
-
-
-#### PluginListenerHandle
-
-| Prop | Type |
-| ------------ | ----------------------------------------- |
-| **`remove`** | () => Promise<void> |
-
-
-#### ProgressStatus
-
-| Prop | Type | Description | Since |
-| ------------------- | ------------------- | ---------------------------------------------------- | ----- |
-| **`url`** | string | The url of the file being downloaded. | 5.1.0 |
-| **`bytes`** | number | The number of bytes downloaded so far. | 5.1.0 |
-| **`contentLength`** | number | The total number of bytes to download for this file. | 5.1.0 |
-
-
-### Type Aliases
-
-
-#### PermissionState
-
-'prompt' | 'prompt-with-rationale' | 'granted' | 'denied'
-
-
-#### ReadFileInChunksCallback
-
-Callback for receiving chunks read from a file, or error if something went wrong.
-
-(chunkRead: ReadFileResult | null, err?: any): void
-
-
-#### CallbackID
-
-string
-
-
-#### StatResult
-
-FileInfo
-
-
-#### RenameOptions
-
-CopyOptions
-
-
-#### ProgressListener
-
-A listener function that receives progress events.
-
-(progress: ProgressStatus): void
-
-
-### Enums
-
-
-#### Directory
-
-| Members | Value | Description | Since |
-| --------------------- | ------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----- |
-| **`Documents`** | 'DOCUMENTS' | The Documents directory. On iOS it's the app's documents directory. Use this directory to store user-generated content. On Android it's the Public Documents folder, so it's accessible from other apps. It's not accessible on Android 10 unless the app enables legacy External Storage by adding `android:requestLegacyExternalStorage="true"` in the `application` tag in the `AndroidManifest.xml`. On Android 11 or newer the app can only access the files/folders the app created. | 1.0.0 |
-| **`Data`** | 'DATA' | The Data directory. On iOS it will use the Documents directory. On Android it's the directory holding application files. Files will be deleted when the application is uninstalled. | 1.0.0 |
-| **`Library`** | 'LIBRARY' | The Library directory. On iOS it will use the Library directory. On Android it's the directory holding application files. Files will be deleted when the application is uninstalled. | 1.1.0 |
-| **`Cache`** | 'CACHE' | The Cache directory. Can be deleted in cases of low memory, so use this directory to write app-specific files. that your app can re-create easily. | 1.0.0 |
-| **`External`** | 'EXTERNAL' | The external directory. On iOS it will use the Documents directory. On Android it's the directory on the primary shared/external storage device where the application can place persistent files it owns. These files are internal to the applications, and not typically visible to the user as media. Files will be deleted when the application is uninstalled. | 1.0.0 |
-| **`ExternalStorage`** | 'EXTERNAL_STORAGE' | The external storage directory. On iOS it will use the Documents directory. On Android it's the primary shared/external storage directory. It's not accessible on Android 10 unless the app enables legacy External Storage by adding `android:requestLegacyExternalStorage="true"` in the `application` tag in the `AndroidManifest.xml`. It's not accessible on Android 11 or newer. | 1.0.0 |
-| **`ExternalCache`** | 'EXTERNAL_CACHE' | The external cache directory. On iOS it will use the Documents directory. On Android it's the primary shared/external cache. | 7.1.0 |
-| **`LibraryNoCloud`** | 'LIBRARY_NO_CLOUD' | The Library directory without cloud backup. Used in iOS. On Android it's the directory holding application files. | 7.1.0 |
-| **`Temporary`** | 'TEMPORARY' | A temporary directory for iOS. On Android it's the directory holding the application cache. | 7.1.0 |
-
-
-#### Encoding
-
-| Members | Value | Description | Since |
-| ----------- | -------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ----- |
-| **`UTF8`** | 'utf8' | Eight-bit UCS Transformation Format | 1.0.0 |
-| **`ASCII`** | 'ascii' | Seven-bit ASCII, a.k.a. ISO646-US, a.k.a. the Basic Latin block of the Unicode character set This encoding is only supported on Android. | 1.0.0 |
-| **`UTF16`** | 'utf16' | Sixteen-bit UCS Transformation Format, byte order identified by an optional byte-order mark This encoding is only supported on Android. | 1.0.0 |
-
-
-
-### Errors
-
-Since version 7.1.0, the plugin returns specific errors with specific codes on native Android and iOS. Web does not follow this standard for errors.
-
-The following table list all the plugin errors:
-
-| Error code | Platform(s) | Message |
-|-------------------|------------------|------------------------------|
-| OS-PLUG-FILE-0004 | iOS | Cordova / Capacitor bridge isn’t initialized. |
-| OS-PLUG-FILE-0005 | Android, iOS | The method input parameters aren’t valid. |
-| OS-PLUG-FILE-0006 | Android, iOS | Invalid path was provided. |
-| OS-PLUG-FILE-0007 | Android | Unable to perform file operation, user denied permission request. |
-| OS-PLUG-FILE-0008 | Android, iOS | Operation failed because file does not exist. |
-| OS-PLUG-FILE-0009 | Android | Operation not supported for provided input. |
-| OS-PLUG-FILE-0010 | Android, iOS | Directory already exists, cannot be overwritten. |
-| OS-PLUG-FILE-0011 | Android, iOS | Missing parent directory – possibly recursive=false was passed or parent directory creation failed. |
-| OS-PLUG-FILE-0012 | Android, iOS | Cannot delete directory with children; received recursive=false but directory has contents. |
-| OS-PLUG-FILE-0013 | Android, iOS | The operation failed with an error. |
-
diff --git a/packages/capacitor-plugin/package.json b/packages/capacitor-plugin/package.json
deleted file mode 100644
index a1ed1e3..0000000
--- a/packages/capacitor-plugin/package.json
+++ /dev/null
@@ -1,93 +0,0 @@
-{
- "name": "@capacitor/filesystem",
- "version": "8.1.0",
- "description": "The Filesystem API provides a NodeJS-like API for working with files on the device.",
- "main": "dist/plugin.cjs.js",
- "module": "dist/esm/index.js",
- "types": "dist/esm/index.d.ts",
- "unpkg": "dist/plugin.js",
- "files": [
- "android/src/main/",
- "android/build.gradle",
- "dist/",
- "ios/Sources",
- "ios/Tests",
- "Package.swift",
- "CapacitorFilesystem.podspec"
- ],
- "author": "Outsystems",
- "license": "MIT",
- "repository": {
- "type": "git",
- "url": "https://github.com/ionic-team/capacitor-filesystem.git"
- },
- "bugs": {
- "url": "https://github.com/ionic-team/capacitor-filesystem/issues"
- },
- "keywords": [
- "capacitor",
- "plugin",
- "native"
- ],
- "scripts": {
- "verify": "npm run verify:ios && npm run verify:android && npm run verify:web",
- "verify:ios": "cd ../.. && xcodebuild -scheme CapacitorFilesystem -destination generic/platform=iOS",
- "verify:android": "cd android && ./gradlew clean build test && cd ..",
- "verify:web": "npm run build",
- "lint": "npm run eslint && npm run prettier -- --check && npm run swiftlint -- lint",
- "fmt": "npm run eslint -- --fix && npm run prettier -- --write && npm run swiftlint -- --fix --format",
- "eslint": "eslint . --ext ts",
- "prettier": "prettier \"**/*.{css,html,ts,js,java}\" --plugin=prettier-plugin-java",
- "swiftlint": "node-swiftlint",
- "docgen": "docgen --api FilesystemPlugin --output-readme README.md --output-json dist/docs.json",
- "build": "npm run clean && npm run docgen && tsc && rollup -c rollup.config.mjs",
- "clean": "rimraf ./dist",
- "watch": "tsc --watch",
- "prepublishOnly": "npm run build",
- "publish:cocoapod": "pod trunk push ./CapacitorFilesystem.podspec --allow-warnings",
- "prepack": "cp ../../Package.swift Package.swift && node -e 'const fs=require(\"fs\");let s=fs.readFileSync(\"Package.swift\",\"utf8\").split(\"packages/capacitor-plugin/\").join(\"\");fs.writeFileSync(\"Package.swift\",s);'",
- "postpack": "rm -f Package.swift"
- },
- "dependencies": {
- "@capacitor/synapse": "^1.0.4"
- },
- "devDependencies": {
- "@capacitor/android": "^8.0.0",
- "@capacitor/core": "^8.0.0",
- "@capacitor/docgen": "^0.3.0",
- "@capacitor/ios": "^8.0.0",
- "@ionic/eslint-config": "^0.4.0",
- "@ionic/prettier-config": "^4.0.0",
- "@ionic/swiftlint-config": "^2.0.0",
- "@semantic-release/changelog": "^6.0.3",
- "@semantic-release/exec": "^7.1.0",
- "@semantic-release/git": "^10.0.1",
- "@semantic-release/github": "^12.0.2",
- "@semantic-release/npm": "^13.1.2",
- "@types/node": "^24.10.1",
- "eslint": "^8.56.0",
- "prettier": "^3.6.2",
- "prettier-plugin-java": "^2.7.7",
- "rimraf": "^6.1.2",
- "rollup": "^4.53.3",
- "semantic-release": "^25.0.2",
- "swiftlint": "^2.0.0",
- "typescript": "~5.9.3"
- },
- "peerDependencies": {
- "@capacitor/core": ">=8.0.0"
- },
- "prettier": "@ionic/prettier-config",
- "swiftlint": "@ionic/swiftlint-config",
- "eslintConfig": {
- "extends": "@ionic/eslint-config/recommended"
- },
- "capacitor": {
- "ios": {
- "src": "ios"
- },
- "android": {
- "src": "android"
- }
- }
-}
diff --git a/packages/example-app-capacitor/ios/App/Podfile.lock b/packages/example-app-capacitor/ios/App/Podfile.lock
deleted file mode 100644
index 8973ac1..0000000
--- a/packages/example-app-capacitor/ios/App/Podfile.lock
+++ /dev/null
@@ -1,47 +0,0 @@
-PODS:
- - Capacitor (8.0.1):
- - CapacitorCordova
- - CapacitorCamera (8.0.0):
- - Capacitor
- - CapacitorCordova (8.0.1)
- - CapacitorFilesystem (8.0.0):
- - Capacitor
- - IONFilesystemLib (~> 1.1.0)
- - CapacitorSplashScreen (8.0.0):
- - Capacitor
- - IONFilesystemLib (1.1.0)
-
-DEPENDENCIES:
- - "Capacitor (from `../../node_modules/@capacitor/ios`)"
- - "CapacitorCamera (from `../../node_modules/@capacitor/camera`)"
- - "CapacitorCordova (from `../../node_modules/@capacitor/ios`)"
- - CapacitorFilesystem (from `../../../capacitor-plugin`)
- - "CapacitorSplashScreen (from `../../node_modules/@capacitor/splash-screen`)"
-
-SPEC REPOS:
- trunk:
- - IONFilesystemLib
-
-EXTERNAL SOURCES:
- Capacitor:
- :path: "../../node_modules/@capacitor/ios"
- CapacitorCamera:
- :path: "../../node_modules/@capacitor/camera"
- CapacitorCordova:
- :path: "../../node_modules/@capacitor/ios"
- CapacitorFilesystem:
- :path: "../../../capacitor-plugin"
- CapacitorSplashScreen:
- :path: "../../node_modules/@capacitor/splash-screen"
-
-SPEC CHECKSUMS:
- Capacitor: ff35b0f66370b84aa238251b35b91886a3207c16
- CapacitorCamera: 592acb7ab9fb748e2d8571eb03af30ec4e1ace12
- CapacitorCordova: 0d65b9bb74e995dcecb9463f34f1af2aba6f955c
- CapacitorFilesystem: c650a2b46e2bbeb4709aef2bcf0a44597e20158c
- CapacitorSplashScreen: 422880d7117605c30699eb4b21644b62db42e86c
- IONFilesystemLib: 50b9a0f3052a9b40b9bedb43f328a8fe222f9f87
-
-PODFILE CHECKSUM: f9801285586b6499bc9e372b1475a3f09f847217
-
-COCOAPODS: 1.16.2
diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml
deleted file mode 100644
index 4340350..0000000
--- a/pnpm-workspace.yaml
+++ /dev/null
@@ -1,2 +0,0 @@
-packages:
- - 'packages/*'
\ No newline at end of file
diff --git a/packages/capacitor-plugin/release.config.cjs b/release.config.cjs
similarity index 61%
rename from packages/capacitor-plugin/release.config.cjs
rename to release.config.cjs
index cae7733..91b0edd 100644
--- a/packages/capacitor-plugin/release.config.cjs
+++ b/release.config.cjs
@@ -8,12 +8,7 @@ module.exports = {
plugins: [
'@semantic-release/commit-analyzer',
'@semantic-release/release-notes-generator',
- [
- "@semantic-release/changelog",
- {
- "changelogFile": "../../CHANGELOG.md"
- }
- ],
+ '@semantic-release/changelog',
'@semantic-release/npm',
[
'@semantic-release/github',
@@ -23,23 +18,14 @@ module.exports = {
releasedLabels: false,
addReleases: 'bottom',
releaseNotes: {
- changelogFile: '../../CHANGELOG.md'
+ changelogFile: 'CHANGELOG.md'
}
}
],
- [
- "@semantic-release/exec",
- {
- // This is necessary because @semantic-release/git won't commit files in parent directory
- // see https://github.com/semantic-release/git/issues/485
- prepareCmd:
- "git add ../../CHANGELOG.md",
- },
- ],
[
'@semantic-release/git',
{
- assets: ['package.json'],
+ assets: ['package.json', 'CHANGELOG.md'],
message: 'chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}'
}
]
diff --git a/packages/capacitor-plugin/rollup.config.mjs b/rollup.config.mjs
similarity index 100%
rename from packages/capacitor-plugin/rollup.config.mjs
rename to rollup.config.mjs
diff --git a/scripts/android/publish-root.gradle b/scripts/android/publish-root.gradle
index 611111c..95550de 100644
--- a/scripts/android/publish-root.gradle
+++ b/scripts/android/publish-root.gradle
@@ -6,7 +6,7 @@ ext["centralTokenUsername"] = ''
ext["centralTokenPassword"] = ''
ext["sonatypeStagingProfileId"] = ''
-File globalSecretPropsFile = file('../../../scripts/android/local.properties')
+File globalSecretPropsFile = file('../../scripts/android/local.properties')
File secretPropsFile = project.rootProject.file('local.properties')
if (globalSecretPropsFile.exists()) {
// Read global local.properties file first if it exists (scripts/android/local.properties)
@@ -40,4 +40,4 @@ nexusPublishing {
}
}
repositoryDescription = 'Capacitor Android ' + System.getenv('PLUGIN_NAME') + ' plugin v' + System.getenv('PLUGIN_VERSION')
-}
\ No newline at end of file
+}
diff --git a/scripts/publish-android.sh b/scripts/publish-android.sh
index 1b19c3f..207185f 100755
--- a/scripts/publish-android.sh
+++ b/scripts/publish-android.sh
@@ -74,4 +74,4 @@ else
fi
printf %"s\n" "Publishing plugin with dependency on Capacitor version $CAPACITOR_VERSION"
-publish_plugin_android './packages/capacitor-plugin'
+publish_plugin_android '.'
diff --git a/packages/capacitor-plugin/src/definitions.ts b/src/definitions.ts
similarity index 100%
rename from packages/capacitor-plugin/src/definitions.ts
rename to src/definitions.ts
diff --git a/packages/capacitor-plugin/src/index.ts b/src/index.ts
similarity index 100%
rename from packages/capacitor-plugin/src/index.ts
rename to src/index.ts
diff --git a/packages/capacitor-plugin/src/web.ts b/src/web.ts
similarity index 100%
rename from packages/capacitor-plugin/src/web.ts
rename to src/web.ts
diff --git a/packages/capacitor-plugin/tsconfig.json b/tsconfig.json
similarity index 100%
rename from packages/capacitor-plugin/tsconfig.json
rename to tsconfig.json