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 @@ -
- - Logo - - -

@capacitor/filesystem

- -

- The Filesystem API provides a NodeJS-like API for working with files on the device. -
- 🔌 Cordova Plugin - · - 🤖 Android Library - · - 🍏 iOS Library -

-

- 🐛 Report Bug - · - 💡 Request Feature -

-
+# @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