@simplysm/capacitor-plugin-usb-storage 13.0.0-beta.45 → 13.0.0-beta.47
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/UsbStorage.js.map
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/UsbStorage.ts"],
|
|
4
|
-
"sourcesContent": ["import { registerPlugin } from \"@capacitor/core\";\nimport type { IUsbDeviceFilter, IUsbDeviceInfo, IUsbFileInfo, IUsbStoragePlugin } from \"./IUsbStoragePlugin\";\nimport type { Bytes } from \"@simplysm/core-common\";\nimport { bytesFromBase64 } from \"@simplysm/core-common\";\n\nconst UsbStoragePlugin = registerPlugin<IUsbStoragePlugin>(\"UsbStorage\", {\n web: async () => {\n const { UsbStorageWeb } = await import(\"./web/UsbStorageWeb\");\n return new UsbStorageWeb();\n },\n});\n\n/**\n * USB \uC800\uC7A5\uC7A5\uCE58\uC640 \uC0C1\uD638\uC791\uC6A9\uD558\uAE30 \uC704\uD55C \uD50C\uB7EC\uADF8\uC778\n * - Android: libaums \uB77C\uC774\uBE0C\uB7EC\uB9AC\uB97C \uD1B5\uD55C USB Mass Storage \uC811\uADFC\n * - Browser: IndexedDB \uAE30\uBC18 \uAC00\uC0C1 USB \uC800\uC7A5\uC18C \uC5D0\uBBAC\uB808\uC774\uC158\n */\nexport abstract class UsbStorage {\n /**\n * \uC5F0\uACB0\uB41C USB \uC7A5\uCE58 \uBAA9\uB85D\uC744 \uAC00\uC838\uC634\n * @returns \uC5F0\uACB0\uB41C USB \uC7A5\uCE58 \uC815\uBCF4 \uBC30\uC5F4\n */\n static async getDevices(): Promise<IUsbDeviceInfo[]> {\n const result = await UsbStoragePlugin.getDevices();\n return result.devices;\n }\n\n /**\n * USB \uC7A5\uCE58 \uC811\uADFC \uAD8C\uD55C\uC744 \uC694\uCCAD\n * @param filter \uAD8C\uD55C\uC744 \uC694\uCCAD\uD560 USB \uC7A5\uCE58\uC758 vendorId\uC640 productId\n * @returns \uAD8C\uD55C \uC2B9\uC778 \uC5EC\uBD80\n */\n static async requestPermission(filter: IUsbDeviceFilter): Promise<boolean> {\n const result = await UsbStoragePlugin.requestPermission(filter);\n return result.granted;\n }\n\n /**\n * USB \uC7A5\uCE58 \uC811\uADFC \uAD8C\uD55C\uC774 \uC788\uB294\uC9C0 \uD655\uC778\n * @param filter \uAD8C\uD55C\uC744 \uD655\uC778\uD560 USB \uC7A5\uCE58\uC758 vendorId\uC640 productId\n * @returns \uAD8C\uD55C \uBCF4\uC720 \uC5EC\uBD80\n */\n static async hasPermission(filter: IUsbDeviceFilter): Promise<boolean> {\n const result = await UsbStoragePlugin.hasPermission(filter);\n return result.granted;\n }\n\n /**\n * USB \uC800\uC7A5\uC7A5\uCE58\uC758 \uB514\uB809\uD1A0\uB9AC \uB0B4\uC6A9\uC744 \uC77D\uC5B4\uC634\n * @param filter \uB300\uC0C1 USB \uC7A5\uCE58\uC758 vendorId\uC640 productId\n * @param dirPath \uC77D\uC5B4\uC62C \uB514\uB809\uD1A0\uB9AC \uACBD\uB85C\n * @returns \uB514\uB809\uD1A0\uB9AC \uB0B4 \uD30C\uC77C/\uD3F4\uB354 \uC815\uBCF4 \uBC30\uC5F4\n */\n static async readdir(filter: IUsbDeviceFilter, dirPath: string): Promise<IUsbFileInfo[]> {\n const result = await UsbStoragePlugin.readdir({ ...filter, path: dirPath });\n return result.files;\n }\n\n /**\n * USB \uC800\uC7A5\uC7A5\uCE58\uC758 \uD30C\uC77C\uC744 \uC77D\uC5B4\uC634\n * @param filter \uB300\uC0C1 USB \uC7A5\uCE58\uC758 vendorId\uC640 productId\n * @param filePath \uC77D\uC5B4\uC62C \uD30C\uC77C \uACBD\uB85C\n * @returns \uD30C\uC77C \uB370\uC774\uD130\uB97C \uB2F4\uC740 Bytes \uB610\uB294 undefined\n */\n static async read(filter: IUsbDeviceFilter, filePath: string): Promise<Bytes | undefined> {\n const result = await UsbStoragePlugin.read({ ...filter, path: filePath });\n if (result.data == null) {\n return undefined;\n }\n return bytesFromBase64(result.data);\n }\n}\n"],
|
|
5
4
|
"mappings": "AAAA,SAAS,sBAAsB;AAG/B,SAAS,uBAAuB;AAEhC,MAAM,mBAAmB,eAAkC,cAAc;AAAA,EACvE,KAAK,YAAY;AACf,UAAM,EAAE,cAAc,IAAI,MAAM,OAAO,qBAAqB;AAC5D,WAAO,IAAI,cAAc;AAAA,EAC3B;AACF,CAAC;AAOM,MAAe,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA,EAK/B,aAAa,aAAwC;AACnD,UAAM,SAAS,MAAM,iBAAiB,WAAW;AACjD,WAAO,OAAO;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,aAAa,kBAAkB,QAA4C;AACzE,UAAM,SAAS,MAAM,iBAAiB,kBAAkB,MAAM;AAC9D,WAAO,OAAO;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,aAAa,cAAc,QAA4C;AACrE,UAAM,SAAS,MAAM,iBAAiB,cAAc,MAAM;AAC1D,WAAO,OAAO;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,aAAa,QAAQ,QAA0B,SAA0C;AACvF,UAAM,SAAS,MAAM,iBAAiB,QAAQ,EAAE,GAAG,QAAQ,MAAM,QAAQ,CAAC;AAC1E,WAAO,OAAO;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,aAAa,KAAK,QAA0B,UAA8C;AACxF,UAAM,SAAS,MAAM,iBAAiB,KAAK,EAAE,GAAG,QAAQ,MAAM,SAAS,CAAC;AACxE,QAAI,OAAO,QAAQ,MAAM;AACvB,aAAO;AAAA,IACT;AACA,WAAO,gBAAgB,OAAO,IAAI;AAAA,EACpC;AACF;",
|
|
6
5
|
"names": []
|
|
7
6
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/web/IndexedDbStore.ts"],
|
|
4
|
-
"sourcesContent": ["export interface IStoreConfig {\n name: string;\n keyPath: string;\n}\n\nexport class IndexedDbStore {\n constructor(\n private readonly _dbName: string,\n private readonly _dbVersion: number,\n private readonly _storeConfigs: IStoreConfig[],\n ) {}\n\n async open(): Promise<IDBDatabase> {\n return new Promise((resolve, reject) => {\n const req = indexedDB.open(this._dbName, this._dbVersion);\n req.onupgradeneeded = () => {\n const db = req.result;\n for (const config of this._storeConfigs) {\n if (!db.objectStoreNames.contains(config.name)) {\n db.createObjectStore(config.name, { keyPath: config.keyPath });\n }\n }\n };\n req.onsuccess = () => resolve(req.result);\n req.onerror = () => reject(req.error);\n req.onblocked = () => reject(new Error(\"Database blocked by another connection\"));\n });\n }\n\n async withStore<T>(\n storeName: string,\n mode: IDBTransactionMode,\n fn: (store: IDBObjectStore) => Promise<T>,\n ): Promise<T> {\n const db = await this.open();\n return new Promise((resolve, reject) => {\n const tx = db.transaction(storeName, mode);\n const store = tx.objectStore(storeName);\n let result: T;\n Promise.resolve(fn(store))\n .then((r) => {\n result = r;\n })\n .catch((err) => {\n db.close();\n reject(err);\n });\n tx.oncomplete = () => {\n db.close();\n resolve(result);\n };\n tx.onerror = () => {\n db.close();\n reject(tx.error);\n };\n });\n }\n\n async get<T>(storeName: string, key: IDBValidKey): Promise<T | undefined> {\n return this.withStore(storeName, \"readonly\", async (store) => {\n return new Promise((resolve, reject) => {\n const req = store.get(key);\n req.onsuccess = () => resolve(req.result as T | undefined);\n req.onerror = () => reject(req.error);\n });\n });\n }\n\n async put(storeName: string, value: unknown): Promise<void> {\n return this.withStore(storeName, \"readwrite\", async (store) => {\n return new Promise((resolve, reject) => {\n const req = store.put(value);\n req.onsuccess = () => resolve();\n req.onerror = () => reject(req.error);\n });\n });\n }\n\n async getAll<T>(storeName: string): Promise<T[]> {\n return this.withStore(storeName, \"readonly\", async (store) => {\n return new Promise((resolve, reject) => {\n const req = store.getAll();\n req.onsuccess = () => resolve(req.result as T[]);\n req.onerror = () => reject(req.error);\n });\n });\n }\n}\n"],
|
|
5
4
|
"mappings": "AAKO,MAAM,eAAe;AAAA,EAC1B,YACmB,SACA,YACA,eACjB;AAHiB;AACA;AACA;AAAA,EAChB;AAAA,EAEH,MAAM,OAA6B;AACjC,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,YAAM,MAAM,UAAU,KAAK,KAAK,SAAS,KAAK,UAAU;AACxD,UAAI,kBAAkB,MAAM;AAC1B,cAAM,KAAK,IAAI;AACf,mBAAW,UAAU,KAAK,eAAe;AACvC,cAAI,CAAC,GAAG,iBAAiB,SAAS,OAAO,IAAI,GAAG;AAC9C,eAAG,kBAAkB,OAAO,MAAM,EAAE,SAAS,OAAO,QAAQ,CAAC;AAAA,UAC/D;AAAA,QACF;AAAA,MACF;AACA,UAAI,YAAY,MAAM,QAAQ,IAAI,MAAM;AACxC,UAAI,UAAU,MAAM,OAAO,IAAI,KAAK;AACpC,UAAI,YAAY,MAAM,OAAO,IAAI,MAAM,wCAAwC,CAAC;AAAA,IAClF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,UACJ,WACA,MACA,IACY;AACZ,UAAM,KAAK,MAAM,KAAK,KAAK;AAC3B,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,YAAM,KAAK,GAAG,YAAY,WAAW,IAAI;AACzC,YAAM,QAAQ,GAAG,YAAY,SAAS;AACtC,UAAI;AACJ,cAAQ,QAAQ,GAAG,KAAK,CAAC,EACtB,KAAK,CAAC,MAAM;AACX,iBAAS;AAAA,MACX,CAAC,EACA,MAAM,CAAC,QAAQ;AACd,WAAG,MAAM;AACT,eAAO,GAAG;AAAA,MACZ,CAAC;AACH,SAAG,aAAa,MAAM;AACpB,WAAG,MAAM;AACT,gBAAQ,MAAM;AAAA,MAChB;AACA,SAAG,UAAU,MAAM;AACjB,WAAG,MAAM;AACT,eAAO,GAAG,KAAK;AAAA,MACjB;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,IAAO,WAAmB,KAA0C;AACxE,WAAO,KAAK,UAAU,WAAW,YAAY,OAAO,UAAU;AAC5D,aAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,cAAM,MAAM,MAAM,IAAI,GAAG;AACzB,YAAI,YAAY,MAAM,QAAQ,IAAI,MAAuB;AACzD,YAAI,UAAU,MAAM,OAAO,IAAI,KAAK;AAAA,MACtC,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,IAAI,WAAmB,OAA+B;AAC1D,WAAO,KAAK,UAAU,WAAW,aAAa,OAAO,UAAU;AAC7D,aAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,cAAM,MAAM,MAAM,IAAI,KAAK;AAC3B,YAAI,YAAY,MAAM,QAAQ;AAC9B,YAAI,UAAU,MAAM,OAAO,IAAI,KAAK;AAAA,MACtC,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,OAAU,WAAiC;AAC/C,WAAO,KAAK,UAAU,WAAW,YAAY,OAAO,UAAU;AAC5D,aAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,cAAM,MAAM,MAAM,OAAO;AACzB,YAAI,YAAY,MAAM,QAAQ,IAAI,MAAa;AAC/C,YAAI,UAAU,MAAM,OAAO,IAAI,KAAK;AAAA,MACtC,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AACF;",
|
|
6
5
|
"names": []
|
|
7
6
|
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/web/UsbStorageWeb.ts"],
|
|
4
|
-
"sourcesContent": ["import { WebPlugin } from \"@capacitor/core\";\nimport type { IUsbDeviceFilter, IUsbDeviceInfo, IUsbFileInfo, IUsbStoragePlugin } from \"../IUsbStoragePlugin\";\nimport { VirtualUsbStorage } from \"./VirtualUsbStorage\";\nimport { bytesToBase64 } from \"@simplysm/core-common\";\n\nexport class UsbStorageWeb extends WebPlugin implements IUsbStoragePlugin {\n private readonly _storage = new VirtualUsbStorage();\n\n async getDevices(): Promise<{ devices: IUsbDeviceInfo[] }> {\n const devices = await this._storage.getDevices();\n return {\n devices: devices.map((d) => ({\n deviceName: d.deviceName,\n manufacturerName: d.manufacturerName,\n productName: d.productName,\n vendorId: d.vendorId,\n productId: d.productId,\n })),\n };\n }\n\n async requestPermission(_options: IUsbDeviceFilter): Promise<{ granted: boolean }> {\n return Promise.resolve({ granted: true });\n }\n\n async hasPermission(_options: IUsbDeviceFilter): Promise<{ granted: boolean }> {\n return Promise.resolve({ granted: true });\n }\n\n async readdir(options: IUsbDeviceFilter & { path: string }): Promise<{ files: IUsbFileInfo[] }> {\n const deviceKey = `${options.vendorId}:${options.productId}`;\n const devices = await this._storage.getDevices();\n const deviceExists = devices.some((d) => d.key === deviceKey);\n if (!deviceExists) {\n return { files: [] };\n }\n const entry = await this._storage.getEntry(deviceKey, options.path);\n if (!entry || entry.kind !== \"dir\") {\n return { files: [] };\n }\n const children = await this._storage.listChildren(deviceKey, options.path);\n return { files: children };\n }\n\n async read(options: IUsbDeviceFilter & { path: string }): Promise<{ data: string | null }> {\n const deviceKey = `${options.vendorId}:${options.productId}`;\n const devices = await this._storage.getDevices();\n const deviceExists = devices.some((d) => d.key === deviceKey);\n if (!deviceExists) {\n return { data: null };\n }\n const entry = await this._storage.getEntry(deviceKey, options.path);\n if (!entry || entry.kind !== \"file\" || entry.dataBase64 == null) {\n return { data: null };\n }\n return { data: entry.dataBase64 };\n }\n\n /**\n * \uAC00\uC0C1 USB \uC7A5\uCE58\uB97C \uCD94\uAC00\uD569\uB2C8\uB2E4. (\uD14C\uC2A4\uD2B8/\uAC1C\uBC1C\uC6A9)\n */\n async addVirtualDevice(device: {\n vendorId: number;\n productId: number;\n deviceName: string;\n manufacturerName: string;\n productName: string;\n }): Promise<void> {\n await this._storage.addDevice(device);\n }\n\n /**\n * \uAC00\uC0C1 USB \uC7A5\uCE58\uC5D0 \uD30C\uC77C\uC744 \uCD94\uAC00\uD569\uB2C8\uB2E4. (\uD14C\uC2A4\uD2B8/\uAC1C\uBC1C\uC6A9)\n */\n async addVirtualFile(filter: IUsbDeviceFilter, filePath: string, data: Uint8Array): Promise<void> {\n const deviceKey = `${filter.vendorId}:${filter.productId}`;\n const idx = filePath.lastIndexOf(\"/\");\n const dir = idx === -1 ? \"/\" : filePath.substring(0, idx) || \"/\";\n await this._storage.ensureDir(deviceKey, dir);\n await this._storage.putEntry({\n deviceKey,\n path: filePath,\n kind: \"file\",\n dataBase64: bytesToBase64(data),\n });\n }\n\n /**\n * \uAC00\uC0C1 USB \uC7A5\uCE58\uC5D0 \uB514\uB809\uD1A0\uB9AC\uB97C \uCD94\uAC00\uD569\uB2C8\uB2E4. (\uD14C\uC2A4\uD2B8/\uAC1C\uBC1C\uC6A9)\n */\n async addVirtualDirectory(filter: IUsbDeviceFilter, dirPath: string): Promise<void> {\n const deviceKey = `${filter.vendorId}:${filter.productId}`;\n await this._storage.ensureDir(deviceKey, dirPath);\n }\n}\n"],
|
|
5
4
|
"mappings": "AAAA,SAAS,iBAAiB;AAE1B,SAAS,yBAAyB;AAClC,SAAS,qBAAqB;AAEvB,MAAM,sBAAsB,UAAuC;AAAA,EACvD,WAAW,IAAI,kBAAkB;AAAA,EAElD,MAAM,aAAqD;AACzD,UAAM,UAAU,MAAM,KAAK,SAAS,WAAW;AAC/C,WAAO;AAAA,MACL,SAAS,QAAQ,IAAI,CAAC,OAAO;AAAA,QAC3B,YAAY,EAAE;AAAA,QACd,kBAAkB,EAAE;AAAA,QACpB,aAAa,EAAE;AAAA,QACf,UAAU,EAAE;AAAA,QACZ,WAAW,EAAE;AAAA,MACf,EAAE;AAAA,IACJ;AAAA,EACF;AAAA,EAEA,MAAM,kBAAkB,UAA2D;AACjF,WAAO,QAAQ,QAAQ,EAAE,SAAS,KAAK,CAAC;AAAA,EAC1C;AAAA,EAEA,MAAM,cAAc,UAA2D;AAC7E,WAAO,QAAQ,QAAQ,EAAE,SAAS,KAAK,CAAC;AAAA,EAC1C;AAAA,EAEA,MAAM,QAAQ,SAAkF;AAC9F,UAAM,YAAY,GAAG,QAAQ,QAAQ,IAAI,QAAQ,SAAS;AAC1D,UAAM,UAAU,MAAM,KAAK,SAAS,WAAW;AAC/C,UAAM,eAAe,QAAQ,KAAK,CAAC,MAAM,EAAE,QAAQ,SAAS;AAC5D,QAAI,CAAC,cAAc;AACjB,aAAO,EAAE,OAAO,CAAC,EAAE;AAAA,IACrB;AACA,UAAM,QAAQ,MAAM,KAAK,SAAS,SAAS,WAAW,QAAQ,IAAI;AAClE,QAAI,CAAC,SAAS,MAAM,SAAS,OAAO;AAClC,aAAO,EAAE,OAAO,CAAC,EAAE;AAAA,IACrB;AACA,UAAM,WAAW,MAAM,KAAK,SAAS,aAAa,WAAW,QAAQ,IAAI;AACzE,WAAO,EAAE,OAAO,SAAS;AAAA,EAC3B;AAAA,EAEA,MAAM,KAAK,SAAgF;AACzF,UAAM,YAAY,GAAG,QAAQ,QAAQ,IAAI,QAAQ,SAAS;AAC1D,UAAM,UAAU,MAAM,KAAK,SAAS,WAAW;AAC/C,UAAM,eAAe,QAAQ,KAAK,CAAC,MAAM,EAAE,QAAQ,SAAS;AAC5D,QAAI,CAAC,cAAc;AACjB,aAAO,EAAE,MAAM,KAAK;AAAA,IACtB;AACA,UAAM,QAAQ,MAAM,KAAK,SAAS,SAAS,WAAW,QAAQ,IAAI;AAClE,QAAI,CAAC,SAAS,MAAM,SAAS,UAAU,MAAM,cAAc,MAAM;AAC/D,aAAO,EAAE,MAAM,KAAK;AAAA,IACtB;AACA,WAAO,EAAE,MAAM,MAAM,WAAW;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,iBAAiB,QAML;AAChB,UAAM,KAAK,SAAS,UAAU,MAAM;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,eAAe,QAA0B,UAAkB,MAAiC;AAChG,UAAM,YAAY,GAAG,OAAO,QAAQ,IAAI,OAAO,SAAS;AACxD,UAAM,MAAM,SAAS,YAAY,GAAG;AACpC,UAAM,MAAM,QAAQ,KAAK,MAAM,SAAS,UAAU,GAAG,GAAG,KAAK;AAC7D,UAAM,KAAK,SAAS,UAAU,WAAW,GAAG;AAC5C,UAAM,KAAK,SAAS,SAAS;AAAA,MAC3B;AAAA,MACA,MAAM;AAAA,MACN,MAAM;AAAA,MACN,YAAY,cAAc,IAAI;AAAA,IAChC,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,oBAAoB,QAA0B,SAAgC;AAClF,UAAM,YAAY,GAAG,OAAO,QAAQ,IAAI,OAAO,SAAS;AACxD,UAAM,KAAK,SAAS,UAAU,WAAW,OAAO;AAAA,EAClD;AACF;",
|
|
6
5
|
"names": []
|
|
7
6
|
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/web/VirtualUsbStorage.ts"],
|
|
4
|
-
"sourcesContent": ["import { IndexedDbStore } from \"./IndexedDbStore\";\n\ninterface VirtualDevice {\n key: string;\n vendorId: number;\n productId: number;\n deviceName: string;\n manufacturerName: string;\n productName: string;\n}\n\ninterface VirtualEntry {\n fullKey: string;\n deviceKey: string;\n path: string;\n kind: \"file\" | \"dir\";\n dataBase64?: string;\n}\n\nexport class VirtualUsbStorage {\n private readonly _DEVICES_STORE = \"devices\";\n private readonly _FILES_STORE = \"files\";\n private readonly _db: IndexedDbStore;\n\n constructor() {\n this._db = new IndexedDbStore(\"capacitor_usb_virtual_storage\", 1, [\n { name: this._DEVICES_STORE, keyPath: \"key\" },\n { name: this._FILES_STORE, keyPath: \"fullKey\" },\n ]);\n }\n\n async addDevice(device: Omit<VirtualDevice, \"key\">): Promise<void> {\n const key = `${device.vendorId}:${device.productId}`;\n const entry: VirtualDevice = { ...device, key };\n return this._db.put(this._DEVICES_STORE, entry);\n }\n\n async getDevices(): Promise<VirtualDevice[]> {\n return this._db.getAll<VirtualDevice>(this._DEVICES_STORE);\n }\n\n async getEntry(deviceKey: string, path: string): Promise<VirtualEntry | undefined> {\n const fullKey = `${deviceKey}:${path}`;\n return this._db.get<VirtualEntry>(this._FILES_STORE, fullKey);\n }\n\n async putEntry(entry: Omit<VirtualEntry, \"fullKey\">): Promise<void> {\n const fullKey = `${entry.deviceKey}:${entry.path}`;\n const fullEntry: VirtualEntry = { ...entry, fullKey };\n return this._db.put(this._FILES_STORE, fullEntry);\n }\n\n async listChildren(deviceKey: string, dirPath: string): Promise<{ name: string; isDirectory: boolean }[]> {\n const prefix = `${deviceKey}:${dirPath === \"/\" ? \"/\" : dirPath + \"/\"}`;\n return this._db.withStore(this._FILES_STORE, \"readonly\", async (store) => {\n return new Promise((resolve, reject) => {\n const req = store.openCursor();\n const map = new Map<string, boolean>();\n req.onsuccess = () => {\n const cursor = req.result;\n if (!cursor) {\n resolve(Array.from(map.entries()).map(([name, isDirectory]) => ({ name, isDirectory })));\n return;\n }\n const key = String(cursor.key);\n if (key.startsWith(prefix)) {\n const rest = key.slice(prefix.length);\n if (rest) {\n const segments = rest.split(\"/\").filter(Boolean);\n if (segments.length > 0) {\n const firstName = segments[0];\n if (!map.has(firstName)) {\n const isDir = segments.length > 1 || (cursor.value as VirtualEntry).kind === \"dir\";\n map.set(firstName, isDir);\n }\n }\n }\n }\n cursor.continue();\n };\n req.onerror = () => reject(req.error);\n });\n });\n }\n\n async ensureDir(deviceKey: string, dirPath: string): Promise<void> {\n if (dirPath === \"/\") {\n await this.putEntry({ deviceKey, path: \"/\", kind: \"dir\" });\n return;\n }\n const segments = dirPath.split(\"/\").filter(Boolean);\n let acc = \"\";\n for (const seg of segments) {\n acc += \"/\" + seg;\n const existing = await this.getEntry(deviceKey, acc);\n if (!existing) {\n await this.putEntry({ deviceKey, path: acc, kind: \"dir\" });\n }\n }\n }\n}\n"],
|
|
5
4
|
"mappings": "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",
|
|
6
5
|
"names": []
|
|
7
6
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@simplysm/capacitor-plugin-usb-storage",
|
|
3
|
-
"version": "13.0.0-beta.
|
|
3
|
+
"version": "13.0.0-beta.47",
|
|
4
4
|
"description": "심플리즘 패키지 - Capacitor USB Storage Plugin",
|
|
5
5
|
"author": "김석래",
|
|
6
6
|
"repository": {
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
}
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@simplysm/core-common": "13.0.0-beta.
|
|
25
|
+
"@simplysm/core-common": "13.0.0-beta.47"
|
|
26
26
|
},
|
|
27
27
|
"peerDependencies": {
|
|
28
28
|
"@capacitor/core": "^7.4.4"
|