@wener/common 2.0.1 → 2.0.3
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/lib/ai/qwen3vl/index.js +2 -0
- package/lib/ai/qwen3vl/index.js.map +1 -0
- package/lib/ai/qwen3vl/utils.js +31 -0
- package/lib/ai/qwen3vl/utils.js.map +1 -0
- package/lib/ai/vision/DocLayoutElementTypeSchema.js +28 -0
- package/lib/ai/vision/DocLayoutElementTypeSchema.js.map +1 -0
- package/lib/ai/vision/ImageAnnotationSchema.js +50 -0
- package/lib/ai/vision/ImageAnnotationSchema.js.map +1 -0
- package/lib/ai/vision/index.js +3 -0
- package/lib/ai/vision/index.js.map +1 -0
- package/lib/ai/vision/resolveImageAnnotation.js +105 -0
- package/lib/ai/vision/resolveImageAnnotation.js.map +1 -0
- package/lib/cn/ChineseResidentIdNo.js +48 -0
- package/lib/cn/ChineseResidentIdNo.js.map +1 -0
- package/lib/cn/ChineseResidentIdNo.mod.js +1 -0
- package/lib/cn/{ResidentIdentityCardNumber.test.js → ChineseResidentIdNo.test.js} +7 -6
- package/lib/cn/DivisionCode.js +217 -301
- package/lib/cn/DivisionCode.js.map +1 -0
- package/lib/cn/DivisionCode.mod.js +1 -0
- package/lib/cn/DivisionCode.test.js +9 -15
- package/lib/cn/Mod11.js +43 -0
- package/lib/cn/Mod11.js.map +1 -0
- package/lib/cn/Mod31.js +49 -0
- package/lib/cn/Mod31.js.map +1 -0
- package/lib/cn/UnifiedSocialCreditCode.js +137 -113
- package/lib/cn/UnifiedSocialCreditCode.js.map +1 -0
- package/lib/cn/UnifiedSocialCreditCode.mod.js +1 -0
- package/lib/cn/UnifiedSocialCreditCode.test.js +1 -1
- package/lib/cn/formatChineseAmount.js +77 -0
- package/lib/cn/formatChineseAmount.js.map +1 -0
- package/lib/cn/index.js +6 -2
- package/lib/cn/index.js.map +1 -0
- package/lib/cn/mod.js +6 -0
- package/lib/cn/parseChineseNumber.js +94 -0
- package/lib/cn/parseChineseNumber.js.map +1 -0
- package/lib/cn/parseChineseNumber.test.js +278 -0
- package/lib/cn/pinyin/cartesianProduct.js +22 -0
- package/lib/cn/pinyin/cartesianProduct.js.map +1 -0
- package/lib/cn/pinyin/cartesianProduct.test.js +179 -0
- package/lib/cn/pinyin/data.json +23573 -0
- package/lib/cn/pinyin/loader.js +14 -0
- package/lib/cn/pinyin/loader.js.map +1 -0
- package/lib/cn/pinyin/preload.js +3 -0
- package/lib/cn/pinyin/preload.js.map +1 -0
- package/lib/cn/pinyin/toPinyin.test.js +167 -0
- package/lib/cn/pinyin/toPinyinPure.js +33 -0
- package/lib/cn/pinyin/toPinyinPure.js.map +1 -0
- package/lib/cn/pinyin/transform.js +14 -0
- package/lib/cn/pinyin/transform.js.map +1 -0
- package/lib/cn/types.d.js +2 -0
- package/lib/cn/types.d.js.map +1 -0
- package/lib/consola/createStandardConsolaReporter.js +6 -6
- package/lib/consola/createStandardConsolaReporter.js.map +1 -0
- package/lib/consola/formatLogObject.js +67 -135
- package/lib/consola/formatLogObject.js.map +1 -0
- package/lib/consola/formatLogObject.test.js +184 -0
- package/lib/consola/index.js +1 -0
- package/lib/consola/index.js.map +1 -0
- package/lib/data/formatSort.js +6 -5
- package/lib/data/formatSort.js.map +1 -0
- package/lib/data/index.js +1 -0
- package/lib/data/index.js.map +1 -0
- package/lib/data/maybeNumber.js +5 -7
- package/lib/data/maybeNumber.js.map +1 -0
- package/lib/data/parseSort.js +22 -28
- package/lib/data/parseSort.js.map +1 -0
- package/lib/data/resolvePagination.js +13 -17
- package/lib/data/resolvePagination.js.map +1 -0
- package/lib/data/types.d.js +2 -0
- package/lib/data/types.d.js.map +1 -0
- package/lib/dayjs/dayjs.js +40 -0
- package/lib/dayjs/dayjs.js.map +1 -0
- package/lib/dayjs/formatDuration.js +59 -0
- package/lib/dayjs/formatDuration.js.map +1 -0
- package/lib/dayjs/formatDuration.test.js +90 -0
- package/lib/dayjs/index.js +5 -0
- package/lib/dayjs/index.js.map +1 -0
- package/lib/dayjs/parseDuration.js +29 -0
- package/lib/dayjs/parseDuration.js.map +1 -0
- package/lib/dayjs/parseRelativeTime.js +90 -0
- package/lib/dayjs/parseRelativeTime.js.map +1 -0
- package/lib/dayjs/parseRelativeTime.test.js +247 -0
- package/lib/dayjs/resolveRelativeTime.js +158 -0
- package/lib/dayjs/resolveRelativeTime.js.map +1 -0
- package/lib/dayjs/resolveRelativeTime.test.js +310 -0
- package/lib/decimal/index.js +2 -0
- package/lib/decimal/index.js.map +1 -0
- package/lib/decimal/parseDecimal.js +15 -0
- package/lib/decimal/parseDecimal.js.map +1 -0
- package/lib/emittery/emitter.js +10 -0
- package/lib/emittery/emitter.js.map +1 -0
- package/lib/emittery/index.js +2 -0
- package/lib/emittery/index.js.map +1 -0
- package/lib/foundation/schema/SexType.js +16 -0
- package/lib/foundation/schema/SexType.js.map +1 -0
- package/lib/foundation/schema/index.js +2 -0
- package/lib/foundation/schema/index.js.map +1 -0
- package/lib/foundation/schema/parseSexType.js +19 -0
- package/lib/foundation/schema/parseSexType.js.map +1 -0
- package/lib/foundation/schema/types.js +7 -0
- package/lib/foundation/schema/types.js.map +1 -0
- package/lib/fs/FileSystemError.js +23 -0
- package/lib/fs/FileSystemError.js.map +1 -0
- package/lib/fs/IFileSystem.d.js +3 -0
- package/lib/fs/IFileSystem.d.js.map +1 -0
- package/lib/fs/MemoryFileSystem.test.js +188 -0
- package/lib/fs/createBrowserFileSystem.js +248 -0
- package/lib/fs/createBrowserFileSystem.js.map +1 -0
- package/lib/fs/createMemoryFileSystem.js +516 -0
- package/lib/fs/createMemoryFileSystem.js.map +1 -0
- package/lib/fs/createSandboxFileSystem.js +108 -0
- package/lib/fs/createSandboxFileSystem.js.map +1 -0
- package/lib/fs/createWebDavFileSystem.js +137 -0
- package/lib/fs/createWebDavFileSystem.js.map +1 -0
- package/lib/fs/findMimeType.js +17 -0
- package/lib/fs/findMimeType.js.map +1 -0
- package/lib/fs/index.js +8 -0
- package/lib/fs/index.js.map +1 -0
- package/lib/fs/orpc/FileSystemContract.js +93 -0
- package/lib/fs/orpc/FileSystemContract.js.map +1 -0
- package/lib/fs/orpc/createContractClientFileSystem.js +93 -0
- package/lib/fs/orpc/createContractClientFileSystem.js.map +1 -0
- package/lib/fs/orpc/index.js +3 -0
- package/lib/fs/orpc/index.js.map +1 -0
- package/lib/fs/orpc/server/createFileSystemContractImpl.js +63 -0
- package/lib/fs/orpc/server/createFileSystemContractImpl.js.map +1 -0
- package/lib/fs/orpc/server/index.js +2 -0
- package/lib/fs/orpc/server/index.js.map +1 -0
- package/lib/fs/s3/createS3MiniFileSystem.js +705 -0
- package/lib/fs/s3/createS3MiniFileSystem.js.map +1 -0
- package/lib/fs/s3/index.js +2 -0
- package/lib/fs/s3/index.js.map +1 -0
- package/lib/fs/s3/s3mini.test.js +584 -0
- package/lib/fs/scandir.js +59 -0
- package/lib/fs/scandir.js.map +1 -0
- package/lib/fs/server/createDatabaseFileSystem.js +750 -0
- package/lib/fs/server/createDatabaseFileSystem.js.map +1 -0
- package/lib/fs/server/createNodeFileSystem.js +401 -0
- package/lib/fs/server/createNodeFileSystem.js.map +1 -0
- package/lib/fs/server/dbfs.test.js +221 -0
- package/lib/fs/server/index.js +2 -0
- package/lib/fs/server/index.js.map +1 -0
- package/lib/fs/server/loadTestDatabase.js +127 -0
- package/lib/fs/server/loadTestDatabase.js.map +1 -0
- package/lib/fs/tests/runFileSystemTest.js +318 -0
- package/lib/fs/tests/runFileSystemTest.js.map +1 -0
- package/lib/fs/types.js +27 -0
- package/lib/fs/types.js.map +1 -0
- package/lib/fs/utils/getFileUrl.js +35 -0
- package/lib/fs/utils/getFileUrl.js.map +1 -0
- package/lib/fs/utils.js +22 -0
- package/lib/fs/utils.js.map +1 -0
- package/lib/index.js +1 -0
- package/lib/index.js.map +1 -0
- package/lib/jsonschema/JsonSchema.js +146 -172
- package/lib/jsonschema/JsonSchema.js.map +1 -0
- package/lib/jsonschema/forEachJsonSchema.js +44 -0
- package/lib/jsonschema/forEachJsonSchema.js.map +1 -0
- package/lib/jsonschema/index.js +2 -0
- package/lib/jsonschema/index.js.map +1 -0
- package/lib/jsonschema/types.d.js +2 -0
- package/lib/jsonschema/types.d.js.map +1 -0
- package/lib/meta/defineFileType.js +20 -103
- package/lib/meta/defineFileType.js.map +1 -0
- package/lib/meta/defineInit.js +31 -250
- package/lib/meta/defineInit.js.map +1 -0
- package/lib/meta/defineMetadata.js +24 -140
- package/lib/meta/defineMetadata.js.map +1 -0
- package/lib/meta/index.js +1 -0
- package/lib/meta/index.js.map +1 -0
- package/lib/orpc/createOpenApiContractClient.js +27 -0
- package/lib/orpc/createOpenApiContractClient.js.map +1 -0
- package/lib/orpc/createRpcContractClient.js +34 -0
- package/lib/orpc/createRpcContractClient.js.map +1 -0
- package/lib/orpc/index.js +3 -0
- package/lib/orpc/index.js.map +1 -0
- package/lib/orpc/resolveLinkPlugins.js +28 -0
- package/lib/orpc/resolveLinkPlugins.js.map +1 -0
- package/lib/password/PHC.js +63 -87
- package/lib/password/PHC.js.map +1 -0
- package/lib/password/PHC.test.js +11 -3
- package/lib/password/Password.js +30 -292
- package/lib/password/Password.js.map +1 -0
- package/lib/password/Password.test.js +35 -22
- package/lib/password/createArgon2PasswordAlgorithm.js +35 -191
- package/lib/password/createArgon2PasswordAlgorithm.js.map +1 -0
- package/lib/password/createBase64PasswordAlgorithm.js +8 -141
- package/lib/password/createBase64PasswordAlgorithm.js.map +1 -0
- package/lib/password/createBcryptPasswordAlgorithm.js +13 -168
- package/lib/password/createBcryptPasswordAlgorithm.js.map +1 -0
- package/lib/password/createPBKDF2PasswordAlgorithm.js +46 -228
- package/lib/password/createPBKDF2PasswordAlgorithm.js.map +1 -0
- package/lib/password/createScryptPasswordAlgorithm.js +55 -211
- package/lib/password/createScryptPasswordAlgorithm.js.map +1 -0
- package/lib/password/index.js +1 -0
- package/lib/password/index.js.map +1 -0
- package/lib/password/server/index.js +1 -0
- package/lib/password/server/index.js.map +1 -0
- package/lib/resource/Identifiable.js +2 -0
- package/lib/resource/Identifiable.js.map +1 -0
- package/lib/resource/ListQuery.js +47 -0
- package/lib/resource/ListQuery.js.map +1 -0
- package/lib/resource/getTitleOfResource.js +3 -5
- package/lib/resource/getTitleOfResource.js.map +1 -0
- package/lib/resource/index.js +2 -0
- package/lib/resource/index.js.map +1 -0
- package/lib/resource/schema/AnyResourceSchema.js +3 -2
- package/lib/resource/schema/AnyResourceSchema.js.map +1 -0
- package/lib/resource/schema/BaseResourceSchema.js +2 -1
- package/lib/resource/schema/BaseResourceSchema.js.map +1 -0
- package/lib/resource/schema/ResourceActionType.js +6 -4
- package/lib/resource/schema/ResourceActionType.js.map +1 -0
- package/lib/resource/schema/ResourceStatus.js +5 -3
- package/lib/resource/schema/ResourceStatus.js.map +1 -0
- package/lib/resource/schema/ResourceType.js +5 -3
- package/lib/resource/schema/ResourceType.js.map +1 -0
- package/lib/resource/schema/index.js +6 -0
- package/lib/resource/schema/index.js.map +1 -0
- package/lib/resource/schema/types.js +16 -20
- package/lib/resource/schema/types.js.map +1 -0
- package/lib/s3/formatS3Url.js +65 -0
- package/lib/s3/formatS3Url.js.map +1 -0
- package/lib/s3/formatS3Url.test.js +262 -0
- package/lib/s3/index.js +3 -0
- package/lib/s3/index.js.map +1 -0
- package/lib/s3/parseS3Url.js +65 -0
- package/lib/s3/parseS3Url.js.map +1 -0
- package/lib/s3/parseS3Url.test.js +270 -0
- package/lib/schema/SchemaRegistry.js +45 -0
- package/lib/schema/SchemaRegistry.js.map +1 -0
- package/lib/schema/SchemaRegistry.mod.js +2 -0
- package/lib/schema/TypeSchema.d.js +2 -0
- package/lib/schema/TypeSchema.d.js.map +1 -0
- package/lib/schema/createSchemaData.js +26 -125
- package/lib/schema/createSchemaData.js.map +1 -0
- package/lib/schema/findJsonSchemaByPath.js +13 -36
- package/lib/schema/findJsonSchemaByPath.js.map +1 -0
- package/lib/schema/formatZodError.js +140 -0
- package/lib/schema/formatZodError.js.map +1 -0
- package/lib/schema/formatZodError.test.js +196 -0
- package/lib/schema/getSchemaCache.js +5 -5
- package/lib/schema/getSchemaCache.js.map +1 -0
- package/lib/schema/getSchemaOptions.js +8 -11
- package/lib/schema/getSchemaOptions.js.map +1 -0
- package/lib/schema/index.js +2 -0
- package/lib/schema/index.js.map +1 -0
- package/lib/schema/toJsonSchema.js +47 -290
- package/lib/schema/toJsonSchema.js.map +1 -0
- package/lib/schema/validate.js +33 -45
- package/lib/schema/validate.js.map +1 -0
- package/lib/tools/generateSchema.js +39 -197
- package/lib/tools/generateSchema.js.map +1 -0
- package/lib/tools/renderJsonSchemaToMarkdownDoc.js +55 -143
- package/lib/tools/renderJsonSchemaToMarkdownDoc.js.map +1 -0
- package/lib/utils/buildBaseUrl.js +13 -0
- package/lib/utils/buildBaseUrl.js.map +1 -0
- package/lib/utils/buildRedactorFormSchema.js +59 -0
- package/lib/utils/buildRedactorFormSchema.js.map +1 -0
- package/lib/utils/getEstimateProcessTime.js +21 -0
- package/lib/utils/getEstimateProcessTime.js.map +1 -0
- package/lib/utils/index.js +4 -0
- package/lib/utils/index.js.map +1 -0
- package/lib/utils/resolveFeatureOptions.js +12 -0
- package/lib/utils/resolveFeatureOptions.js.map +1 -0
- package/package.json +77 -20
- package/src/ai/qwen3vl/index.ts +1 -0
- package/src/ai/qwen3vl/utils.ts +36 -0
- package/src/ai/vision/DocLayoutElementTypeSchema.ts +30 -0
- package/src/ai/vision/ImageAnnotationSchema.ts +60 -0
- package/src/ai/vision/index.ts +2 -0
- package/src/ai/vision/resolveImageAnnotation.ts +135 -0
- package/src/cn/ChineseResidentIdNo.test.ts +18 -0
- package/src/cn/ChineseResidentIdNo.ts +74 -0
- package/src/cn/DivisionCode.test.ts +3 -13
- package/src/cn/DivisionCode.ts +138 -193
- package/src/cn/{Mod11Checksum.ts → Mod11.ts} +3 -1
- package/src/cn/{Mod31Checksum.ts → Mod31.ts} +2 -0
- package/src/cn/UnifiedSocialCreditCode.test.ts +2 -2
- package/src/cn/UnifiedSocialCreditCode.ts +119 -124
- package/src/cn/__snapshots__/ChineseResidentIdNo.test.ts.snap +14 -0
- package/src/cn/__snapshots__/UnifiedSocialCreditCode.test.ts.snap +41 -12
- package/src/cn/formatChineseAmount.ts +61 -0
- package/src/cn/index.ts +6 -2
- package/src/cn/parseChineseNumber.test.ts +159 -0
- package/src/cn/parseChineseNumber.ts +97 -0
- package/src/cn/pinyin/cartesianProduct.test.ts +64 -0
- package/src/cn/pinyin/cartesianProduct.ts +24 -0
- package/src/cn/pinyin/data.json +23573 -0
- package/src/cn/pinyin/loader.ts +12 -0
- package/src/cn/pinyin/preload.ts +3 -0
- package/src/cn/pinyin/toPinyin.test.ts +12 -0
- package/src/cn/pinyin/toPinyinPure.ts +43 -0
- package/src/cn/pinyin/transform.ts +12 -0
- package/src/consola/formatLogObject.test.ts +27 -0
- package/src/consola/formatLogObject.ts +46 -10
- package/src/dayjs/dayjs.ts +40 -0
- package/src/dayjs/formatDuration.test.ts +14 -0
- package/src/dayjs/formatDuration.ts +86 -0
- package/src/dayjs/index.ts +5 -0
- package/src/dayjs/parseDuration.ts +40 -0
- package/src/dayjs/parseRelativeTime.test.ts +185 -0
- package/src/dayjs/parseRelativeTime.ts +115 -0
- package/src/dayjs/resolveRelativeTime.test.ts +357 -0
- package/src/dayjs/resolveRelativeTime.ts +167 -0
- package/src/decimal/index.ts +1 -0
- package/src/decimal/parseDecimal.ts +16 -0
- package/src/emittery/emitter.ts +9 -0
- package/src/emittery/index.ts +1 -0
- package/src/foundation/schema/SexType.ts +21 -0
- package/src/foundation/schema/index.ts +1 -0
- package/src/foundation/schema/parseSexType.ts +19 -0
- package/src/foundation/schema/types.ts +8 -0
- package/src/fs/FileSystemError.ts +26 -0
- package/src/fs/IFileSystem.d.ts +102 -0
- package/src/fs/MemoryFileSystem.test.ts +37 -0
- package/src/fs/createBrowserFileSystem.ts +291 -0
- package/src/fs/createMemoryFileSystem.ts +604 -0
- package/src/fs/createSandboxFileSystem.ts +136 -0
- package/src/fs/createWebDavFileSystem.ts +172 -0
- package/src/fs/findMimeType.ts +23 -0
- package/src/fs/index.ts +8 -0
- package/src/fs/orpc/FileSystemContract.ts +92 -0
- package/src/fs/orpc/createContractClientFileSystem.ts +115 -0
- package/src/fs/orpc/index.ts +2 -0
- package/src/fs/orpc/server/createFileSystemContractImpl.ts +64 -0
- package/src/fs/orpc/server/index.ts +1 -0
- package/src/fs/s3/createS3MiniFileSystem.ts +830 -0
- package/src/fs/s3/index.ts +1 -0
- package/src/fs/s3/s3mini.test.ts +264 -0
- package/src/fs/scandir.ts +75 -0
- package/src/fs/server/createDatabaseFileSystem.ts +668 -0
- package/src/fs/server/createNodeFileSystem.ts +499 -0
- package/src/fs/server/dbfs.test.ts +47 -0
- package/src/fs/server/index.ts +1 -0
- package/src/fs/server/loadTestDatabase.ts +131 -0
- package/src/fs/tests/runFileSystemTest.ts +288 -0
- package/src/fs/types.ts +29 -0
- package/src/fs/utils/getFileUrl.ts +44 -0
- package/src/fs/utils.ts +23 -0
- package/src/jsonschema/JsonSchema.ts +118 -110
- package/src/jsonschema/forEachJsonSchema.ts +50 -0
- package/src/jsonschema/index.ts +1 -0
- package/src/orpc/createOpenApiContractClient.ts +52 -0
- package/src/orpc/createRpcContractClient.ts +50 -0
- package/src/orpc/index.ts +2 -0
- package/src/orpc/resolveLinkPlugins.ts +29 -0
- package/src/password/PHC.ts +3 -3
- package/src/password/Password.test.ts +1 -1
- package/src/password/Password.ts +2 -2
- package/src/password/createPBKDF2PasswordAlgorithm.ts +2 -2
- package/src/resource/ListQuery.ts +53 -0
- package/src/resource/index.ts +1 -0
- package/src/resource/schema/AnyResourceSchema.ts +17 -3
- package/src/resource/schema/index.ts +5 -0
- package/src/s3/formatS3Url.test.ts +254 -0
- package/src/s3/formatS3Url.ts +84 -0
- package/src/s3/index.ts +2 -0
- package/src/s3/parseS3Url.test.ts +258 -0
- package/src/s3/parseS3Url.ts +88 -0
- package/src/schema/SchemaRegistry.ts +48 -0
- package/src/schema/createSchemaData.ts +1 -1
- package/src/schema/formatZodError.test.ts +196 -0
- package/src/schema/formatZodError.ts +151 -0
- package/src/schema/getSchemaOptions.ts +3 -3
- package/src/schema/index.ts +1 -0
- package/src/utils/buildBaseUrl.ts +12 -0
- package/src/utils/buildRedactorFormSchema.ts +85 -0
- package/src/utils/getEstimateProcessTime.ts +36 -0
- package/src/utils/index.ts +5 -0
- package/src/utils/resolveFeatureOptions.ts +14 -0
- package/lib/cn/Mod11Checksum.js +0 -85
- package/lib/cn/Mod31Checksum.js +0 -97
- package/lib/cn/ResidentIdentityCardNumber.js +0 -50
- package/lib/cn/formatDate.js +0 -13
- package/lib/cn/parseSex.js +0 -20
- package/lib/resource/schema/SchemaRegistry.js +0 -38
- package/lib/resource/schema/SexType.js +0 -10
- package/lib/search/AdvanceSearch.js +0 -9
- package/lib/search/AdvanceSearch.test.js +0 -435
- package/lib/search/formatAdvanceSearch.js +0 -78
- package/lib/search/index.js +0 -1
- package/lib/search/optimizeAdvanceSearch.js +0 -143
- package/lib/search/parseAdvanceSearch.js +0 -20
- package/lib/search/parser.d.js +0 -1
- package/lib/search/parser.js +0 -3088
- package/lib/search/types.d.js +0 -1
- package/src/cn/ResidentIdentityCardNumber.test.ts +0 -17
- package/src/cn/ResidentIdentityCardNumber.ts +0 -96
- package/src/cn/__snapshots__/ResidentIdentityCardNumber.test.ts.snap +0 -15
- package/src/cn/formatDate.ts +0 -12
- package/src/cn/parseSex.ts +0 -13
- package/src/resource/schema/SchemaRegistry.ts +0 -42
- package/src/resource/schema/SexType.ts +0 -13
- package/src/search/AdvanceSearch.test.ts +0 -149
- package/src/search/AdvanceSearch.ts +0 -14
- package/src/search/Makefile +0 -2
- package/src/search/__snapshots__/AdvanceSearch.test.ts.snap +0 -675
- package/src/search/formatAdvanceSearch.ts +0 -52
- package/src/search/index.ts +0 -1
- package/src/search/optimizeAdvanceSearch.ts +0 -77
- package/src/search/parseAdvanceSearch.ts +0 -23
- package/src/search/parser.d.ts +0 -8
- package/src/search/parser.js +0 -2794
- package/src/search/parser.peggy +0 -237
- package/src/search/types.d.ts +0 -45
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { SexType, SexTypeSchema } from './SexType';
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { SexType } from './SexType';
|
|
2
|
+
|
|
3
|
+
export function parseSexType(s: string | null | undefined): undefined | SexType {
|
|
4
|
+
if (!s) return undefined;
|
|
5
|
+
|
|
6
|
+
switch (s.toLowerCase()) {
|
|
7
|
+
case '♂':
|
|
8
|
+
case '男':
|
|
9
|
+
case 'male':
|
|
10
|
+
case 'man':
|
|
11
|
+
return SexType.Male;
|
|
12
|
+
case '♀':
|
|
13
|
+
case '女':
|
|
14
|
+
case 'female':
|
|
15
|
+
case 'woman':
|
|
16
|
+
return SexType.Female;
|
|
17
|
+
}
|
|
18
|
+
return undefined;
|
|
19
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export const FileSystemErrorCode = {
|
|
2
|
+
ENOENT: 'ENOENT',
|
|
3
|
+
ENOTDIR: 'ENOTDIR',
|
|
4
|
+
EEXIST: 'EEXIST',
|
|
5
|
+
EISDIR: 'EISDIR',
|
|
6
|
+
ENOTEMPTY: 'ENOTEMPTY',
|
|
7
|
+
EACCES: 'EACCES',
|
|
8
|
+
EPERM: 'EPERM',
|
|
9
|
+
EINVAL: 'EINVAL',
|
|
10
|
+
} as const;
|
|
11
|
+
|
|
12
|
+
export type FileSystemErrorCode = (typeof FileSystemErrorCode)[keyof typeof FileSystemErrorCode];
|
|
13
|
+
|
|
14
|
+
export class FileSystemError extends Error {
|
|
15
|
+
constructor(
|
|
16
|
+
message: string,
|
|
17
|
+
public readonly code: FileSystemErrorCode | string,
|
|
18
|
+
) {
|
|
19
|
+
super(message);
|
|
20
|
+
this.name = 'FileSystemError';
|
|
21
|
+
// Maintains proper stack trace for where our error was thrown (only available on V8)
|
|
22
|
+
if (Error.captureStackTrace) {
|
|
23
|
+
Error.captureStackTrace(this, FileSystemError);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import type { FileKind, FileUrlOptions } from './types';
|
|
2
|
+
|
|
3
|
+
// Base operation options
|
|
4
|
+
type OperationOptions = {
|
|
5
|
+
signal?: AbortSignal;
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
// Directory operations
|
|
9
|
+
export type ReaddirOptions = OperationOptions & {
|
|
10
|
+
glob?: string;
|
|
11
|
+
recursive?: boolean;
|
|
12
|
+
depth?: number;
|
|
13
|
+
kind?: FileKind;
|
|
14
|
+
hidden?: boolean;
|
|
15
|
+
};
|
|
16
|
+
export type MkdirOptions = OperationOptions & {
|
|
17
|
+
recursive?: boolean;
|
|
18
|
+
};
|
|
19
|
+
// File operations
|
|
20
|
+
export type ReadFileOptions = OperationOptions & {
|
|
21
|
+
encoding?: 'text' | 'binary';
|
|
22
|
+
onDownloadProgress?: (e: { loaded: number; total: number }) => void;
|
|
23
|
+
};
|
|
24
|
+
export type WriteFileOptions = OperationOptions & {
|
|
25
|
+
overwrite?: boolean;
|
|
26
|
+
onUploadProgress?: (e: { loaded: number; total: number }) => void;
|
|
27
|
+
};
|
|
28
|
+
export type RenameOptions = OperationOptions & {
|
|
29
|
+
overwrite?: boolean;
|
|
30
|
+
};
|
|
31
|
+
export type RmOptions = OperationOptions & {
|
|
32
|
+
recursive?: boolean;
|
|
33
|
+
force?: boolean;
|
|
34
|
+
};
|
|
35
|
+
export type CopyOptions = OperationOptions & {
|
|
36
|
+
overwrite?: boolean;
|
|
37
|
+
shallow?: boolean;
|
|
38
|
+
};
|
|
39
|
+
export type CreateReadStreamOptions = OperationOptions & {
|
|
40
|
+
range?: { start: number; end?: number };
|
|
41
|
+
signal?: AbortSignal;
|
|
42
|
+
};
|
|
43
|
+
export type CreateWriteStreamOptions = OperationOptions & {
|
|
44
|
+
overwrite?: boolean;
|
|
45
|
+
};
|
|
46
|
+
export type StatOptions = OperationOptions & {};
|
|
47
|
+
|
|
48
|
+
type WritableData = string | ArrayBuffer | ArrayBufferView | ReadableStream;
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Universal file system interface (browser & server compatible)
|
|
52
|
+
*/
|
|
53
|
+
export type IFileSystem = {
|
|
54
|
+
readdir(dir: string, options?: ReaddirOptions): Promise<IFileStat[]>;
|
|
55
|
+
stat(entry: string, options?: StatOptions): Promise<IFileStat>;
|
|
56
|
+
mkdir(path: string, options?: MkdirOptions): Promise<void>;
|
|
57
|
+
readFile(path: string, options?: ReadFileOptions & { encoding: 'text' }): Promise<string>;
|
|
58
|
+
readFile(path: string, options?: ReadFileOptions): Promise<Uint8Array>;
|
|
59
|
+
writeFile(path: string, data: WritableData, options?: WriteFileOptions): Promise<void>;
|
|
60
|
+
rm(path: string, options?: RmOptions): Promise<void>;
|
|
61
|
+
rename(oldPath: string, newPath: string, options?: RenameOptions): Promise<void>;
|
|
62
|
+
exists(path: string): Promise<boolean>;
|
|
63
|
+
copy(src: string, dest: string, options?: CopyOptions): Promise<void>;
|
|
64
|
+
|
|
65
|
+
getUrl?(path: IFileStat | string, options?: FileUrlOptions): string | undefined;
|
|
66
|
+
|
|
67
|
+
createReadableStream?(path: string, options?: CreateReadStreamOptions): ReadableStream;
|
|
68
|
+
createWritableStream?(path: string, options?: CreateWriteStreamOptions): WritableStream;
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Server/Node.js specific file system interface with stream support
|
|
73
|
+
*/
|
|
74
|
+
export type IServerFileSystem = IFileSystem & {
|
|
75
|
+
createReadStream(path: string, options?: CreateReadStreamOptions): import('node:stream').Readable;
|
|
76
|
+
createWriteStream(path: string, options?: CreateWriteStreamOptions): import('node:stream').Writable;
|
|
77
|
+
writeFile(
|
|
78
|
+
path: string,
|
|
79
|
+
data: WritableData | Buffer | import('node:stream').Readable,
|
|
80
|
+
options?: WriteFileOptions,
|
|
81
|
+
): Promise<void>;
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
export type IFileStat = {
|
|
85
|
+
/**
|
|
86
|
+
* parent path
|
|
87
|
+
*/
|
|
88
|
+
directory: string;
|
|
89
|
+
/**
|
|
90
|
+
* full path
|
|
91
|
+
*/
|
|
92
|
+
path: string;
|
|
93
|
+
/**
|
|
94
|
+
* basename
|
|
95
|
+
*/
|
|
96
|
+
name: string;
|
|
97
|
+
kind: 'directory' | 'file';
|
|
98
|
+
mtime: number;
|
|
99
|
+
meta: Record<string, any>;
|
|
100
|
+
size: number;
|
|
101
|
+
};
|
|
102
|
+
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { beforeEach, describe, test } from 'vitest';
|
|
2
|
+
import { createMemoryFileSystem } from './createMemoryFileSystem';
|
|
3
|
+
import { runFileSystemTest } from './tests/runFileSystemTest';
|
|
4
|
+
|
|
5
|
+
describe('MemoryFileSystem', () => {
|
|
6
|
+
let fs: ReturnType<typeof createMemoryFileSystem>;
|
|
7
|
+
|
|
8
|
+
beforeEach(() => {
|
|
9
|
+
fs = createMemoryFileSystem({
|
|
10
|
+
root: {
|
|
11
|
+
path: '/',
|
|
12
|
+
directory: '',
|
|
13
|
+
name: '',
|
|
14
|
+
kind: 'directory',
|
|
15
|
+
meta: {},
|
|
16
|
+
mtime: Date.now(),
|
|
17
|
+
size: 0,
|
|
18
|
+
children: [
|
|
19
|
+
{
|
|
20
|
+
path: '/README.txt',
|
|
21
|
+
directory: '/',
|
|
22
|
+
name: 'README.txt',
|
|
23
|
+
kind: 'file',
|
|
24
|
+
content: 'Hello',
|
|
25
|
+
size: 5,
|
|
26
|
+
meta: {},
|
|
27
|
+
mtime: Date.now(),
|
|
28
|
+
},
|
|
29
|
+
],
|
|
30
|
+
},
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
test('common tests', async () => {
|
|
35
|
+
await runFileSystemTest(fs);
|
|
36
|
+
});
|
|
37
|
+
});
|
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
import { dirname, join, normalize } from 'pathe';
|
|
2
|
+
import type {
|
|
3
|
+
CopyOptions,
|
|
4
|
+
IFileStat,
|
|
5
|
+
IFileSystem,
|
|
6
|
+
MkdirOptions,
|
|
7
|
+
ReaddirOptions,
|
|
8
|
+
ReadFileOptions,
|
|
9
|
+
RenameOptions,
|
|
10
|
+
RmOptions,
|
|
11
|
+
WriteFileOptions,
|
|
12
|
+
} from './IFileSystem';
|
|
13
|
+
import type { FileUrlOptions } from './types';
|
|
14
|
+
|
|
15
|
+
class BrowserFSError extends Error {
|
|
16
|
+
constructor(
|
|
17
|
+
message: string,
|
|
18
|
+
public code?: string,
|
|
19
|
+
) {
|
|
20
|
+
super(message);
|
|
21
|
+
this.name = 'BrowserFSError';
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
type BrowserFile = IFileStat & {
|
|
26
|
+
kind: 'file';
|
|
27
|
+
meta: {
|
|
28
|
+
handle: FileSystemFileHandle;
|
|
29
|
+
file: File;
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
type BrowserDirectory = IFileStat & {
|
|
34
|
+
kind: 'directory';
|
|
35
|
+
meta: {
|
|
36
|
+
handle: FileSystemDirectoryHandle;
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
type BrowserNode = BrowserFile | BrowserDirectory;
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Creates an IFileSystem instance backed by the browser's File System Access API.
|
|
44
|
+
* @param root A FileSystemDirectoryHandle, usually obtained from `window.showDirectoryPicker()`.
|
|
45
|
+
*/
|
|
46
|
+
export function createBrowserFileSystem(root: FileSystemDirectoryHandle): IFileSystem {
|
|
47
|
+
return new BrowserFS(root);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
class BrowserFS implements IFileSystem {
|
|
51
|
+
root: FileSystemDirectoryHandle;
|
|
52
|
+
node: BrowserDirectory;
|
|
53
|
+
|
|
54
|
+
constructor(root: FileSystemDirectoryHandle) {
|
|
55
|
+
this.root = root;
|
|
56
|
+
this.node = {
|
|
57
|
+
path: '/',
|
|
58
|
+
name: '',
|
|
59
|
+
directory: '',
|
|
60
|
+
kind: 'directory',
|
|
61
|
+
mtime: 0,
|
|
62
|
+
size: 0,
|
|
63
|
+
meta: {
|
|
64
|
+
handle: root,
|
|
65
|
+
},
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Resolves a path string to a file or directory handle. This is the core navigation logic.
|
|
71
|
+
* @returns A tuple of [handle, parentHandle, name] or [null, parentHandle, name] if not found.
|
|
72
|
+
*/
|
|
73
|
+
private async _getHandle(path: string): Promise<[FileSystemHandle | null, FileSystemDirectoryHandle | null, string]> {
|
|
74
|
+
const normalized = normalize(path);
|
|
75
|
+
if (normalized === '/' || normalized === '.') {
|
|
76
|
+
return [this.root, null, this.root.name];
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
const parts = normalized.split('/').filter((p) => p);
|
|
80
|
+
const name = parts.pop()!;
|
|
81
|
+
|
|
82
|
+
let parent: FileSystemDirectoryHandle = this.root;
|
|
83
|
+
for (const part of parts) {
|
|
84
|
+
try {
|
|
85
|
+
parent = await parent.getDirectoryHandle(part);
|
|
86
|
+
} catch (e: any) {
|
|
87
|
+
if (e.name === 'NotFoundError' || e.name === 'TypeMismatchError') {
|
|
88
|
+
return [null, null, name]; // Parent path does not exist or is a file
|
|
89
|
+
}
|
|
90
|
+
throw e;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
try {
|
|
95
|
+
// Check for file first, then directory
|
|
96
|
+
const handle = await parent.getFileHandle(name).catch(() => parent.getDirectoryHandle(name));
|
|
97
|
+
return [handle, parent, name];
|
|
98
|
+
} catch (e: any) {
|
|
99
|
+
if (e.name === 'NotFoundError') {
|
|
100
|
+
return [null, parent, name]; // Entry not found
|
|
101
|
+
}
|
|
102
|
+
throw e;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Converts a FileSystemHandle into our standard IFileStat object.
|
|
108
|
+
*/
|
|
109
|
+
private async _toFileStat(handle: FileSystemHandle, path: string): Promise<IFileStat> {
|
|
110
|
+
const isFile = handle.kind === 'file';
|
|
111
|
+
const file = isFile ? await (handle as FileSystemFileHandle).getFile() : undefined;
|
|
112
|
+
|
|
113
|
+
return {
|
|
114
|
+
name: handle.name,
|
|
115
|
+
kind: handle.kind,
|
|
116
|
+
path: path,
|
|
117
|
+
directory: dirname(path),
|
|
118
|
+
size: file?.size ?? 0,
|
|
119
|
+
mtime: file?.lastModified ?? Date.now(),
|
|
120
|
+
meta: { handle, file },
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
// --- IFileSystem Implementation ---
|
|
125
|
+
|
|
126
|
+
async stat(path: string): Promise<IFileStat> {
|
|
127
|
+
const [handle] = await this._getHandle(path);
|
|
128
|
+
if (!handle) {
|
|
129
|
+
throw new BrowserFSError(`Path not found: ${path}`, 'ENOENT');
|
|
130
|
+
}
|
|
131
|
+
return this._toFileStat(handle, path);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
async exists(path: string): Promise<boolean> {
|
|
135
|
+
const [handle] = await this._getHandle(path);
|
|
136
|
+
return !!handle;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
async readdir(dir: string, options?: ReaddirOptions): Promise<IFileStat[]> {
|
|
140
|
+
const [handle] = await this._getHandle(dir);
|
|
141
|
+
if (!handle) {
|
|
142
|
+
throw new BrowserFSError(`Directory not found: ${dir}`, 'ENOENT');
|
|
143
|
+
}
|
|
144
|
+
if (handle.kind !== 'directory') {
|
|
145
|
+
throw new BrowserFSError(`Not a directory: ${dir}`, 'ENOTDIR');
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
const entries: IFileStat[] = [];
|
|
149
|
+
for await (const entry of (handle as FileSystemDirectoryHandle).values()) {
|
|
150
|
+
entries.push(await this._toFileStat(entry, join(dir, entry.name)));
|
|
151
|
+
}
|
|
152
|
+
return entries;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
async mkdir(path: string, options: MkdirOptions = {}): Promise<void> {
|
|
156
|
+
const parts = normalize(path)
|
|
157
|
+
.split('/')
|
|
158
|
+
.filter((p) => p);
|
|
159
|
+
let currentDir = this.root;
|
|
160
|
+
|
|
161
|
+
for (const part of parts) {
|
|
162
|
+
try {
|
|
163
|
+
currentDir = await currentDir.getDirectoryHandle(part, { create: options.recursive });
|
|
164
|
+
} catch (e: any) {
|
|
165
|
+
// If recursive is false, getDirectoryHandle throws if a segment is missing.
|
|
166
|
+
// We re-throw a more standard error.
|
|
167
|
+
if (e.name === 'NotFoundError' && !options.recursive) {
|
|
168
|
+
throw new BrowserFSError(`Cannot create directory: Parent does not exist for path ${path}`, 'ENOENT');
|
|
169
|
+
}
|
|
170
|
+
// If it's another error (like a file with the same name), re-throw it.
|
|
171
|
+
throw e;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
readFile(path: string, options?: ReadFileOptions & { encoding: 'text' }): Promise<string>;
|
|
177
|
+
readFile(path: string, options?: ReadFileOptions): Promise<Uint8Array>;
|
|
178
|
+
async readFile(path: string, options?: ReadFileOptions): Promise<string | Uint8Array> {
|
|
179
|
+
const [handle] = await this._getHandle(path);
|
|
180
|
+
if (!handle || handle.kind !== 'file') {
|
|
181
|
+
throw new BrowserFSError(`File not found: ${path}`, 'ENOENT');
|
|
182
|
+
}
|
|
183
|
+
const file = await (handle as FileSystemFileHandle).getFile();
|
|
184
|
+
return options?.encoding === 'text' ? file.text() : file.bytes();
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
async writeFile(path: string, data: any, options: WriteFileOptions = {}): Promise<void> {
|
|
188
|
+
const { overwrite = true } = options;
|
|
189
|
+
const [handle, parent, name] = await this._getHandle(path);
|
|
190
|
+
|
|
191
|
+
if (!parent) {
|
|
192
|
+
throw new BrowserFSError(`Parent directory does not exist for path: ${path}`, 'ENOENT');
|
|
193
|
+
}
|
|
194
|
+
if (handle && !overwrite) {
|
|
195
|
+
throw new BrowserFSError(`File already exists: ${path}`, 'EEXIST');
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
const fileHandle = await parent.getFileHandle(name, { create: true });
|
|
199
|
+
const writable = await fileHandle.createWritable();
|
|
200
|
+
await writable.write(data);
|
|
201
|
+
await writable.close();
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
async rm(path: string, options: RmOptions = {}): Promise<void> {
|
|
205
|
+
const { recursive = false, force = false } = options;
|
|
206
|
+
const [handle, parent, name] = await this._getHandle(path);
|
|
207
|
+
|
|
208
|
+
if (!handle) {
|
|
209
|
+
if (force) return; // If force is true, do not error on not found.
|
|
210
|
+
throw new BrowserFSError(`Path not found: ${path}`, 'ENOENT');
|
|
211
|
+
}
|
|
212
|
+
if (!parent) {
|
|
213
|
+
throw new BrowserFSError(`Cannot remove root directory`);
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
await parent.removeEntry(name, { recursive });
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
async rename(oldPath: string, newPath: string, options?: RenameOptions): Promise<void> {
|
|
220
|
+
// The File System Access API does NOT have a native move/rename.
|
|
221
|
+
// The standard workaround is to copy, then delete the original.
|
|
222
|
+
await this.copy(oldPath, newPath, options);
|
|
223
|
+
await this.rm(oldPath, { recursive: true });
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
async copy(srcPath: string, destPath: string, options?: CopyOptions): Promise<void> {
|
|
227
|
+
const [srcHandle] = await this._getHandle(srcPath);
|
|
228
|
+
if (!srcHandle) {
|
|
229
|
+
throw new BrowserFSError(`Source not found: ${srcPath}`, 'ENOENT');
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
const [destHandle, destParent, destName] = await this._getHandle(destPath);
|
|
233
|
+
if (!destParent) {
|
|
234
|
+
throw new BrowserFSError(`Destination directory does not exist: ${dirname(destPath)}`, 'ENOENT');
|
|
235
|
+
}
|
|
236
|
+
if (destHandle && !options?.overwrite) {
|
|
237
|
+
throw new BrowserFSError(`Destination already exists: ${destPath}`, 'EEXIST');
|
|
238
|
+
}
|
|
239
|
+
if (destHandle?.kind === 'directory' && srcHandle.kind === 'file') {
|
|
240
|
+
throw new BrowserFSError(`Cannot overwrite a directory with a file: ${destPath}`, 'EISDIR');
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
await this._copyEntry(srcHandle, destParent, destName);
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
private async _copyEntry(
|
|
247
|
+
srcHandle: FileSystemHandle,
|
|
248
|
+
destDirHandle: FileSystemDirectoryHandle,
|
|
249
|
+
newName: string,
|
|
250
|
+
): Promise<void> {
|
|
251
|
+
if (srcHandle.kind === 'file') {
|
|
252
|
+
const file = await (srcHandle as FileSystemFileHandle).getFile();
|
|
253
|
+
const destFileHandle = await destDirHandle.getFileHandle(newName, { create: true });
|
|
254
|
+
const writable = await destFileHandle.createWritable();
|
|
255
|
+
await writable.write(file);
|
|
256
|
+
await writable.close();
|
|
257
|
+
} else if (srcHandle.kind === 'directory') {
|
|
258
|
+
const newDirHandle = await destDirHandle.getDirectoryHandle(newName, { create: true });
|
|
259
|
+
for await (const entry of (srcHandle as FileSystemDirectoryHandle).values()) {
|
|
260
|
+
await this._copyEntry(entry, newDirHandle, entry.name);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
async createUrl(stat: IFileStat, options?: FileUrlOptions): Promise<string> {
|
|
266
|
+
// The handle is stored in the meta property in our _toFileStat method
|
|
267
|
+
const handle = stat.meta.handle as FileSystemHandle | undefined;
|
|
268
|
+
if (handle?.kind !== 'file') {
|
|
269
|
+
// Return a placeholder or throw an error for directories
|
|
270
|
+
return '';
|
|
271
|
+
}
|
|
272
|
+
const file = await (handle as FileSystemFileHandle).getFile();
|
|
273
|
+
return URL.createObjectURL(file);
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
createReadStream(): never {
|
|
277
|
+
throw new Error('Streaming is not implemented for BrowserFS. Use readFile instead.');
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
createWriteStream(): never {
|
|
281
|
+
throw new Error('Streaming is not implemented for BrowserFS. Use writeFile instead.');
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
createWritableStream(): never {
|
|
285
|
+
throw new Error('Streaming is not implemented for BrowserFS. Use writeFile instead.');
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
createReadableStream(): never {
|
|
289
|
+
throw new Error('Streaming is not implemented for BrowserFS. Use readFile instead.');
|
|
290
|
+
}
|
|
291
|
+
}
|