@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
package/lib/cn/Mod31.js
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GB/T 17710(采ISO 7064)的模31校验码
|
|
3
|
+
*
|
|
4
|
+
* Mod31-3
|
|
5
|
+
*/ export class Mod31Checksum {
|
|
6
|
+
weights = [
|
|
7
|
+
1,
|
|
8
|
+
3,
|
|
9
|
+
9,
|
|
10
|
+
27,
|
|
11
|
+
19,
|
|
12
|
+
26,
|
|
13
|
+
16,
|
|
14
|
+
17,
|
|
15
|
+
20,
|
|
16
|
+
29,
|
|
17
|
+
25,
|
|
18
|
+
13,
|
|
19
|
+
8,
|
|
20
|
+
24,
|
|
21
|
+
10,
|
|
22
|
+
30,
|
|
23
|
+
28
|
|
24
|
+
];
|
|
25
|
+
chars = '0123456789ABCDEFGHJKLMNPQRTUWXY';
|
|
26
|
+
numbers = this.chars.split('').reduce((acc, cur, i)=>{
|
|
27
|
+
acc[cur] = i;
|
|
28
|
+
return acc;
|
|
29
|
+
}, {});
|
|
30
|
+
toChar(n) {
|
|
31
|
+
return this.chars[n];
|
|
32
|
+
}
|
|
33
|
+
toNumber(c) {
|
|
34
|
+
return this.numbers[c];
|
|
35
|
+
}
|
|
36
|
+
validate(s) {
|
|
37
|
+
return s.at(-1) === this.compute(s.slice(0, s.length - 1));
|
|
38
|
+
}
|
|
39
|
+
compute(s) {
|
|
40
|
+
let sum = 0;
|
|
41
|
+
for(let i = 0; i < s.length; i++){
|
|
42
|
+
sum += this.numbers[s[i]] * this.weights[i];
|
|
43
|
+
}
|
|
44
|
+
return this.toChar(31 - sum % 31);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
export const Mod31 = new Mod31Checksum();
|
|
48
|
+
|
|
49
|
+
//# sourceMappingURL=Mod31.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/cn/Mod31.ts"],"sourcesContent":["/**\n * GB/T 17710(采ISO 7064)的模31校验码\n *\n * Mod31-3\n */\nexport class Mod31Checksum {\n\tweights = [1, 3, 9, 27, 19, 26, 16, 17, 20, 29, 25, 13, 8, 24, 10, 30, 28];\n\tchars = '0123456789ABCDEFGHJKLMNPQRTUWXY';\n\tnumbers: Record<string, number> = this.chars.split('').reduce(\n\t\t(acc, cur, i) => {\n\t\t\tacc[cur] = i;\n\t\t\treturn acc;\n\t\t},\n\t\t{} as Record<string, number>,\n\t);\n\n\ttoChar(n: number) {\n\t\treturn this.chars[n];\n\t}\n\n\ttoNumber(c: string) {\n\t\treturn this.numbers[c];\n\t}\n\n\tvalidate(s: string) {\n\t\treturn s.at(-1) === this.compute(s.slice(0, s.length - 1));\n\t}\n\n\tcompute(s: string) {\n\t\tlet sum = 0;\n\t\tfor (let i = 0; i < s.length; i++) {\n\t\t\tsum += this.numbers[s[i]] * this.weights[i];\n\t\t}\n\t\treturn this.toChar(31 - (sum % 31));\n\t}\n}\n\nexport const Mod31 = new Mod31Checksum();\n"],"names":["Mod31Checksum","weights","chars","numbers","split","reduce","acc","cur","i","toChar","n","toNumber","c","validate","s","at","compute","slice","length","sum","Mod31"],"mappings":"AAAA;;;;CAIC,GACD,OAAO,MAAMA;IACZC,UAAU;QAAC;QAAG;QAAG;QAAG;QAAI;QAAI;QAAI;QAAI;QAAI;QAAI;QAAI;QAAI;QAAI;QAAG;QAAI;QAAI;QAAI;KAAG,CAAC;IAC3EC,QAAQ,kCAAkC;IAC1CC,UAAkC,IAAI,CAACD,KAAK,CAACE,KAAK,CAAC,IAAIC,MAAM,CAC5D,CAACC,KAAKC,KAAKC;QACVF,GAAG,CAACC,IAAI,GAAGC;QACX,OAAOF;IACR,GACA,CAAC,GACA;IAEFG,OAAOC,CAAS,EAAE;QACjB,OAAO,IAAI,CAACR,KAAK,CAACQ,EAAE;IACrB;IAEAC,SAASC,CAAS,EAAE;QACnB,OAAO,IAAI,CAACT,OAAO,CAACS,EAAE;IACvB;IAEAC,SAASC,CAAS,EAAE;QACnB,OAAOA,EAAEC,EAAE,CAAC,CAAC,OAAO,IAAI,CAACC,OAAO,CAACF,EAAEG,KAAK,CAAC,GAAGH,EAAEI,MAAM,GAAG;IACxD;IAEAF,QAAQF,CAAS,EAAE;QAClB,IAAIK,MAAM;QACV,IAAK,IAAIX,IAAI,GAAGA,IAAIM,EAAEI,MAAM,EAAEV,IAAK;YAClCW,OAAO,IAAI,CAAChB,OAAO,CAACW,CAAC,CAACN,EAAE,CAAC,GAAG,IAAI,CAACP,OAAO,CAACO,EAAE;QAC5C;QACA,OAAO,IAAI,CAACC,MAAM,CAAC,KAAMU,MAAM;IAChC;AACD;AAEA,OAAO,MAAMC,QAAQ,IAAIpB,gBAAgB"}
|
|
@@ -1,124 +1,148 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
}
|
|
1
|
+
import { z } from "zod/v4";
|
|
2
|
+
import { Mod31 } from "./Mod31.js";
|
|
3
|
+
const CodeNames = {
|
|
4
|
+
1: {
|
|
5
|
+
name: "\u673A\u6784\u7F16\u5236",
|
|
6
|
+
children: {
|
|
7
|
+
1: {
|
|
8
|
+
name: "\u673A\u5173"
|
|
9
|
+
},
|
|
10
|
+
2: {
|
|
11
|
+
name: "\u4E8B\u4E1A\u5355\u4F4D"
|
|
12
|
+
},
|
|
13
|
+
3: {
|
|
14
|
+
name: "\u4E2D\u592E\u7F16\u529E\u76F4\u63A5\u7BA1\u7406\u673A\u6784\u7F16\u5236\u7684\u7FA4\u4F17\u56E2\u4F53"
|
|
15
|
+
},
|
|
16
|
+
9: {
|
|
17
|
+
name: "\u5176\u4ED6"
|
|
19
18
|
}
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
5: {
|
|
22
|
+
name: "\u6C11\u653F",
|
|
23
|
+
children: {
|
|
24
|
+
1: {
|
|
25
|
+
name: "\u793E\u4F1A\u56E2\u4F53"
|
|
26
|
+
},
|
|
27
|
+
2: {
|
|
28
|
+
name: "\u6C11\u529E\u975E\u4F01\u4E1A\u5355\u4F4D"
|
|
29
|
+
},
|
|
30
|
+
3: {
|
|
31
|
+
name: "\u57FA\u91D1\u4F1A"
|
|
32
|
+
},
|
|
33
|
+
9: {
|
|
34
|
+
name: "\u5176\u4ED6"
|
|
36
35
|
}
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
9: {
|
|
39
|
+
name: "\u5DE5\u5546",
|
|
40
|
+
children: {
|
|
41
|
+
1: {
|
|
42
|
+
name: "\u4F01\u4E1A"
|
|
43
|
+
},
|
|
44
|
+
2: {
|
|
45
|
+
name: "\u4E2A\u4F53\u5DE5\u5546\u6237"
|
|
46
|
+
},
|
|
47
|
+
3: {
|
|
48
|
+
name: "\u519C\u6C11\u4E13\u4E1A\u5408\u4F5C\u793E"
|
|
49
|
+
},
|
|
50
|
+
9: {
|
|
51
|
+
name: "\u5176\u4ED6"
|
|
53
52
|
}
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
Y: {
|
|
56
|
+
name: "\u5176\u4ED6",
|
|
57
|
+
children: {
|
|
58
|
+
1: {
|
|
59
|
+
name: "\u5176\u4ED6"
|
|
61
60
|
}
|
|
62
61
|
}
|
|
63
|
-
};
|
|
64
|
-
UnifiedSocialCreditCode.pattern = /^([159][1239]|Y1)[0-9]{6}[0-9A-HJ-NP-RTUWXY]{10}$/; // 无 I O Z S V
|
|
65
|
-
UnifiedSocialCreditCode.Checksum = new Mod31Checksum();
|
|
66
|
-
function parse(s) {
|
|
67
|
-
var _l1_children;
|
|
68
|
-
var bureau = s[0];
|
|
69
|
-
var subjectType = s[1];
|
|
70
|
-
var division = s.slice(2, 8); // 第3~8位,共6位,正确
|
|
71
|
-
var subject = s.slice(8, 17); // 第9~17位,共9位
|
|
72
|
-
var checksum = s.slice(17, 18); // 第18位,校验码
|
|
73
|
-
var labels = [];
|
|
74
|
-
var l1 = CodeLabels[bureau];
|
|
75
|
-
l1 && labels.push(l1 === null || l1 === void 0 ? void 0 : l1.label);
|
|
76
|
-
var l2 = l1 === null || l1 === void 0 ? void 0 : (_l1_children = l1.children) === null || _l1_children === void 0 ? void 0 : _l1_children[subjectType];
|
|
77
|
-
l2 && labels.push(l2 === null || l2 === void 0 ? void 0 : l2.label);
|
|
78
|
-
return {
|
|
79
|
-
bureau: bureau,
|
|
80
|
-
subjectType: subjectType,
|
|
81
|
-
division: division,
|
|
82
|
-
subject: subject,
|
|
83
|
-
checksum: checksum,
|
|
84
|
-
codes: [
|
|
85
|
-
bureau,
|
|
86
|
-
subjectType,
|
|
87
|
-
division,
|
|
88
|
-
subject
|
|
89
|
-
],
|
|
90
|
-
labels: labels
|
|
91
|
-
};
|
|
92
62
|
}
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
63
|
+
};
|
|
64
|
+
export const ParsedUnifiedSocialCreditCodeSchema = z.object({
|
|
65
|
+
raw: z.string().length(18).describe("\u7EDF\u4E00\u793E\u4F1A\u4FE1\u7528\u4EE3\u7801"),
|
|
66
|
+
registrationAuthorityCode: z.string().length(1).describe("\u767B\u8BB0\u7BA1\u7406\u90E8\u95E8\u4EE3\u7801"),
|
|
67
|
+
entityCategoryCode: z.string().length(1).describe("\u673A\u6784\u7C7B\u522B\u4EE3\u7801"),
|
|
68
|
+
adminDivisionCode: z.string().length(6).describe("\u767B\u8BB0\u7BA1\u7406\u673A\u5173\u884C\u653F\u533A\u5212\u7801 "),
|
|
69
|
+
organizationCode: z.string().length(9).describe("\u4E3B\u4F53\u6807\u8BC6\u7801/\u7EC4\u7EC7\u673A\u6784\u4EE3\u7801"),
|
|
70
|
+
checkDigit: z.string().length(1).describe("\u6821\u9A8C\u7801"),
|
|
71
|
+
codes: z.string().array().describe("\u4EE3\u7801\u6570\u7EC4"),
|
|
72
|
+
names: z.string().array().describe("\u4EE3\u7801\u540D\u79F0"),
|
|
73
|
+
valid: z.boolean().optional().describe("\u662F\u5426\u6709\u6548")
|
|
74
|
+
}).describe("\u7EDF\u4E00\u793E\u4F1A\u4FE1\u7528\u4EE3\u7801");
|
|
75
|
+
export const UnifiedSocialCreditCodeRegex = /^([159][1239]|Y1)[0-9]{6}[0-9A-HJ-NP-RTUWXY]{10}$/;
|
|
76
|
+
export function parseUnifiedSocialCreditCode(s) {
|
|
77
|
+
if (!s || s.length !== 18)
|
|
78
|
+
return undefined;
|
|
79
|
+
const registrationAuthorityCode = s[0];
|
|
80
|
+
const entityCategoryCode = s[1];
|
|
81
|
+
const adminDivisionCode = s.slice(2, 8);
|
|
82
|
+
const organizationCode = s.slice(8, 17);
|
|
83
|
+
const checkDigit = s[17];
|
|
84
|
+
const codes = [
|
|
85
|
+
registrationAuthorityCode,
|
|
86
|
+
entityCategoryCode,
|
|
87
|
+
adminDivisionCode,
|
|
88
|
+
organizationCode,
|
|
89
|
+
checkDigit
|
|
90
|
+
];
|
|
91
|
+
const names = [];
|
|
92
|
+
const bureau = CodeNames[registrationAuthorityCode];
|
|
93
|
+
if (bureau) {
|
|
94
|
+
names.push(bureau.name);
|
|
95
|
+
const subject = bureau.children?.[entityCategoryCode];
|
|
96
|
+
if (subject) {
|
|
97
|
+
names.push(subject.name);
|
|
98
|
+
}
|
|
99
99
|
}
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
100
|
+
return {
|
|
101
|
+
raw: s,
|
|
102
|
+
registrationAuthorityCode,
|
|
103
|
+
entityCategoryCode,
|
|
104
|
+
adminDivisionCode,
|
|
105
|
+
organizationCode,
|
|
106
|
+
checkDigit,
|
|
107
|
+
codes,
|
|
108
|
+
names,
|
|
109
|
+
valid: UnifiedSocialCreditCodeRegex.test(s) && Mod31.validate(s)
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
export function formatUnifiedSocialCreditCode({ registrationAuthorityCode, entityCategoryCode, adminDivisionCode, organizationCode, checkDigit }) {
|
|
113
|
+
const base = `${registrationAuthorityCode}${entityCategoryCode}${adminDivisionCode}${organizationCode}`;
|
|
114
|
+
checkDigit ||= Mod31.compute(base);
|
|
115
|
+
return `${base}${checkDigit}`;
|
|
116
|
+
}
|
|
117
|
+
export function next(s, delta = 1) {
|
|
118
|
+
const sp = s.split("").map((v) => Mod31.numbers[v]);
|
|
119
|
+
for (let i = sp.length - 1; i >= 0; i--) {
|
|
120
|
+
if (delta > 0 && sp[i] < 30 || delta < 0 && sp[i] > 0) {
|
|
121
|
+
sp[i] += delta;
|
|
122
|
+
break;
|
|
123
|
+
}
|
|
124
|
+
else if (delta > 0 && sp[i] === 30) {
|
|
125
|
+
sp[i] = 0;
|
|
126
|
+
}
|
|
127
|
+
else if (delta < 0 && sp[i] === 0) {
|
|
128
|
+
sp[i] = 30;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
return sp.map((v) => Mod31.chars[v]).join("");
|
|
132
|
+
}
|
|
133
|
+
(function (UnifiedSocialCreditCode) {
|
|
134
|
+
UnifiedSocialCreditCode.regex = UnifiedSocialCreditCodeRegex;
|
|
135
|
+
UnifiedSocialCreditCode.parse = parseUnifiedSocialCreditCode;
|
|
136
|
+
UnifiedSocialCreditCode.format = formatUnifiedSocialCreditCode;
|
|
137
|
+
UnifiedSocialCreditCode.ResultSchema = ParsedUnifiedSocialCreditCodeSchema;
|
|
138
|
+
function test(s) {
|
|
139
|
+
if (!s) {
|
|
140
|
+
return false;
|
|
117
141
|
}
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
}).join("");
|
|
142
|
+
// fast check
|
|
143
|
+
return UnifiedSocialCreditCode.regex.test(s) && Mod31.validate(s);
|
|
121
144
|
}
|
|
122
|
-
UnifiedSocialCreditCode.
|
|
145
|
+
UnifiedSocialCreditCode.test = test;
|
|
123
146
|
})(UnifiedSocialCreditCode || (UnifiedSocialCreditCode = {}));
|
|
124
147
|
export var UnifiedSocialCreditCode;
|
|
148
|
+
//# sourceMappingURL=UnifiedSocialCreditCode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/cn/UnifiedSocialCreditCode.ts"],"sourcesContent":["import { z } from 'zod/v4';\nimport { Mod31 } from './Mod31';\n\ninterface CodeValue {\n\tname: string;\n\tchildren?: Record<string, CodeValue>;\n}\n\nconst CodeNames: Record<string, CodeValue> = {\n\t1: {\n\t\tname: '机构编制',\n\t\tchildren: {\n\t\t\t1: { name: '机关' },\n\t\t\t2: { name: '事业单位' },\n\t\t\t3: { name: '中央编办直接管理机构编制的群众团体' },\n\t\t\t9: { name: '其他' },\n\t\t},\n\t},\n\t5: {\n\t\tname: '民政',\n\t\tchildren: {\n\t\t\t1: { name: '社会团体' },\n\t\t\t2: { name: '民办非企业单位' },\n\t\t\t3: { name: '基金会' },\n\t\t\t9: { name: '其他' },\n\t\t},\n\t},\n\t9: {\n\t\tname: '工商',\n\t\tchildren: {\n\t\t\t1: { name: '企业' },\n\t\t\t2: { name: '个体工商户' },\n\t\t\t3: { name: '农民专业合作社' },\n\t\t\t9: { name: '其他' },\n\t\t},\n\t},\n\tY: { name: '其他', children: { 1: { name: '其他' } } },\n};\n\nexport type ParsedUnifiedSocialCreditCode = z.infer<typeof ParsedUnifiedSocialCreditCodeSchema>;\nexport const ParsedUnifiedSocialCreditCodeSchema = z\n\t.object({\n\t\traw: z.string().length(18).describe('统一社会信用代码'),\n\t\tregistrationAuthorityCode: z.string().length(1).describe('登记管理部门代码'),\n\t\tentityCategoryCode: z.string().length(1).describe('机构类别代码'),\n\t\tadminDivisionCode: z.string().length(6).describe('登记管理机关行政区划码 '),\n\t\torganizationCode: z.string().length(9).describe('主体标识码/组织机构代码'),\n\t\tcheckDigit: z.string().length(1).describe('校验码'),\n\n\t\tcodes: z.string().array().describe('代码数组'),\n\t\tnames: z.string().array().describe('代码名称'),\n\t\tvalid: z.boolean().optional().describe('是否有效'),\n\t})\n\t.describe('统一社会信用代码');\n\nexport const UnifiedSocialCreditCodeRegex = /^([159][1239]|Y1)[0-9]{6}[0-9A-HJ-NP-RTUWXY]{10}$/;\n\nexport function parseUnifiedSocialCreditCode(s: string): ParsedUnifiedSocialCreditCode | undefined {\n\tif (!s || s.length !== 18) return undefined;\n\n\tconst registrationAuthorityCode = s[0];\n\tconst entityCategoryCode = s[1];\n\tconst adminDivisionCode = s.slice(2, 8);\n\tconst organizationCode = s.slice(8, 17);\n\tconst checkDigit = s[17];\n\n\tconst codes = [registrationAuthorityCode, entityCategoryCode, adminDivisionCode, organizationCode, checkDigit];\n\tconst names: string[] = [];\n\n\tconst bureau = CodeNames[registrationAuthorityCode];\n\tif (bureau) {\n\t\tnames.push(bureau.name);\n\t\tconst subject = bureau.children?.[entityCategoryCode];\n\t\tif (subject) {\n\t\t\tnames.push(subject.name);\n\t\t}\n\t}\n\n\treturn {\n\t\traw: s,\n\t\tregistrationAuthorityCode,\n\t\tentityCategoryCode,\n\t\tadminDivisionCode,\n\t\torganizationCode,\n\t\tcheckDigit,\n\t\tcodes,\n\t\tnames,\n\t\tvalid: UnifiedSocialCreditCodeRegex.test(s) && Mod31.validate(s),\n\t};\n}\n\nexport function formatUnifiedSocialCreditCode({\n\tregistrationAuthorityCode,\n\tentityCategoryCode,\n\tadminDivisionCode,\n\torganizationCode,\n\tcheckDigit,\n}: {\n\tregistrationAuthorityCode: string;\n\tentityCategoryCode: string;\n\tadminDivisionCode: string;\n\torganizationCode: string;\n\tcheckDigit?: string;\n}): string {\n\tconst base = `${registrationAuthorityCode}${entityCategoryCode}${adminDivisionCode}${organizationCode}`;\n\tcheckDigit ||= Mod31.compute(base);\n\treturn `${base}${checkDigit}`;\n}\n\nexport function next(s: string, delta: number = 1) {\n\tconst sp = s.split('').map((v) => Mod31.numbers[v]);\n\tfor (let i = sp.length - 1; i >= 0; i--) {\n\t\tif ((delta > 0 && sp[i] < 30) || (delta < 0 && sp[i] > 0)) {\n\t\t\tsp[i] += delta;\n\t\t\tbreak;\n\t\t} else if (delta > 0 && sp[i] === 30) {\n\t\t\tsp[i] = 0;\n\t\t} else if (delta < 0 && sp[i] === 0) {\n\t\t\tsp[i] = 30;\n\t\t}\n\t}\n\treturn sp.map((v) => Mod31.chars[v]).join('');\n}\n\nexport namespace UnifiedSocialCreditCode {\n\texport const regex = UnifiedSocialCreditCodeRegex;\n\texport const parse = parseUnifiedSocialCreditCode;\n\texport const format = formatUnifiedSocialCreditCode;\n\texport type Result = ParsedUnifiedSocialCreditCode;\n\texport const ResultSchema = ParsedUnifiedSocialCreditCodeSchema;\n\texport function test(s: string | undefined | null) {\n\t\tif (!s) {\n\t\t\treturn false;\n\t\t}\n\t\t// fast check\n\t\treturn regex.test(s) && Mod31.validate(s);\n\t}\n}\n"],"names":["z","Mod31","CodeNames","name","children","Y","ParsedUnifiedSocialCreditCodeSchema","object","raw","string","length","describe","registrationAuthorityCode","entityCategoryCode","adminDivisionCode","organizationCode","checkDigit","codes","array","names","valid","boolean","optional","UnifiedSocialCreditCodeRegex","parseUnifiedSocialCreditCode","s","undefined","slice","bureau","push","subject","test","validate","formatUnifiedSocialCreditCode","base","compute","next","delta","sp","split","map","v","numbers","i","chars","join","UnifiedSocialCreditCode","regex","parse","format","ResultSchema"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { UnifiedSocialCreditCodeRegex as regex, ParsedUnifiedSocialCreditCodeSchema as ResultSchema, parseUnifiedSocialCreditCode as parse, formatUnifiedSocialCreditCode as format } from "./UnifiedSocialCreditCode.js";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { describe, expect, it } from "vitest";
|
|
2
|
-
import { UnifiedSocialCreditCode } from "./
|
|
2
|
+
import { UnifiedSocialCreditCode } from "./index.js";
|
|
3
3
|
describe("UnifiedSocialCreditCode", function () {
|
|
4
4
|
it("should parse", function () {
|
|
5
5
|
for (var _i = 0, _iter = [
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @see https://gist.github.com/tonyc726/00c829a54a40cf80409f
|
|
3
|
+
* @see https://github.com/Siykt/javascript-algorithms/blob/master/src/algorithms/string/getChinesePrice.ts 人民币金额转中文大写
|
|
4
|
+
*/ export function formatChineseAmount(price) {
|
|
5
|
+
if (price === 0) return '零元整';
|
|
6
|
+
if (price >= 1e12) return '整数位已超过最大值';
|
|
7
|
+
const CHINESE_NUMBER_MAP = [
|
|
8
|
+
'零',
|
|
9
|
+
'壹',
|
|
10
|
+
'贰',
|
|
11
|
+
'叁',
|
|
12
|
+
'肆',
|
|
13
|
+
'伍',
|
|
14
|
+
'陆',
|
|
15
|
+
'柒',
|
|
16
|
+
'捌',
|
|
17
|
+
'玖'
|
|
18
|
+
];
|
|
19
|
+
const CHINESE_UNIT_MAP = [
|
|
20
|
+
'',
|
|
21
|
+
'拾',
|
|
22
|
+
'佰',
|
|
23
|
+
'仟'
|
|
24
|
+
];
|
|
25
|
+
const CHINESE_BIG_UNIT_MAP = [
|
|
26
|
+
'',
|
|
27
|
+
'万',
|
|
28
|
+
'亿'
|
|
29
|
+
];
|
|
30
|
+
const CHINESE_SMALL_UNIT_MAP = [
|
|
31
|
+
'角',
|
|
32
|
+
'分',
|
|
33
|
+
'厘',
|
|
34
|
+
'毫'
|
|
35
|
+
];
|
|
36
|
+
const priceStr = price.toString();
|
|
37
|
+
const priceArr = priceStr.split('.');
|
|
38
|
+
const integer = priceArr[0];
|
|
39
|
+
const decimal = priceArr[1];
|
|
40
|
+
let chineseIntegerPrice = '';
|
|
41
|
+
let zeroCount = 0;
|
|
42
|
+
for(let i = 0; i < integer.length; i++){
|
|
43
|
+
const num = +integer[i];
|
|
44
|
+
const unit = integer.length - i - 1; // 当前数字的单位
|
|
45
|
+
const quotient = Math.floor(unit / 4); // 1w为进位单位, 除 4 即为 万 亿
|
|
46
|
+
const remainder = unit % 4; // 1w为进位单位, 取模 4 即为 个 十 百 千
|
|
47
|
+
if (num === 0) {
|
|
48
|
+
zeroCount++;
|
|
49
|
+
} else {
|
|
50
|
+
// 处理前置的零
|
|
51
|
+
if (zeroCount > 0) chineseIntegerPrice += CHINESE_NUMBER_MAP[0];
|
|
52
|
+
zeroCount = 0;
|
|
53
|
+
chineseIntegerPrice += CHINESE_NUMBER_MAP[num] + CHINESE_UNIT_MAP[remainder];
|
|
54
|
+
}
|
|
55
|
+
if (remainder === 0 && zeroCount < 4) {
|
|
56
|
+
chineseIntegerPrice += CHINESE_BIG_UNIT_MAP[quotient];
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
// 价格为小数时,整数部分不显示
|
|
60
|
+
if (price < 1) chineseIntegerPrice = '';
|
|
61
|
+
else chineseIntegerPrice += '元';
|
|
62
|
+
let chineseDecimalPrice = '';
|
|
63
|
+
if (!decimal) {
|
|
64
|
+
chineseDecimalPrice = '整';
|
|
65
|
+
} else {
|
|
66
|
+
let hasZero = false;
|
|
67
|
+
for(let i = 0; i < decimal.length; i++){
|
|
68
|
+
const num = +decimal[i];
|
|
69
|
+
if (num) chineseDecimalPrice += CHINESE_NUMBER_MAP[num] + CHINESE_SMALL_UNIT_MAP[i];
|
|
70
|
+
else hasZero = true;
|
|
71
|
+
}
|
|
72
|
+
if (chineseIntegerPrice && hasZero) chineseIntegerPrice += '零';
|
|
73
|
+
}
|
|
74
|
+
return chineseIntegerPrice + chineseDecimalPrice;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
//# sourceMappingURL=formatChineseAmount.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/cn/formatChineseAmount.ts"],"sourcesContent":["/**\n * @see https://gist.github.com/tonyc726/00c829a54a40cf80409f\n * @see https://github.com/Siykt/javascript-algorithms/blob/master/src/algorithms/string/getChinesePrice.ts 人民币金额转中文大写\n */\nexport function formatChineseAmount(price: number) {\n\tif (price === 0) return '零元整';\n\tif (price >= 1e12) return '整数位已超过最大值';\n\n\tconst CHINESE_NUMBER_MAP = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'];\n\tconst CHINESE_UNIT_MAP = ['', '拾', '佰', '仟'];\n\tconst CHINESE_BIG_UNIT_MAP = ['', '万', '亿'];\n\tconst CHINESE_SMALL_UNIT_MAP = ['角', '分', '厘', '毫'];\n\n\tconst priceStr = price.toString();\n\tconst priceArr = priceStr.split('.');\n\tconst integer = priceArr[0];\n\tconst decimal = priceArr[1];\n\n\tlet chineseIntegerPrice = '';\n\tlet zeroCount = 0;\n\n\tfor (let i = 0; i < integer.length; i++) {\n\t\tconst num = +integer[i];\n\t\tconst unit = integer.length - i - 1; // 当前数字的单位\n\t\tconst quotient = Math.floor(unit / 4); // 1w为进位单位, 除 4 即为 万 亿\n\t\tconst remainder = unit % 4; // 1w为进位单位, 取模 4 即为 个 十 百 千\n\n\t\tif (num === 0) {\n\t\t\tzeroCount++;\n\t\t} else {\n\t\t\t// 处理前置的零\n\t\t\tif (zeroCount > 0) chineseIntegerPrice += CHINESE_NUMBER_MAP[0];\n\t\t\tzeroCount = 0;\n\t\t\tchineseIntegerPrice += CHINESE_NUMBER_MAP[num] + CHINESE_UNIT_MAP[remainder];\n\t\t}\n\t\tif (remainder === 0 && zeroCount < 4) {\n\t\t\tchineseIntegerPrice += CHINESE_BIG_UNIT_MAP[quotient];\n\t\t}\n\t}\n\n\t// 价格为小数时,整数部分不显示\n\tif (price < 1) chineseIntegerPrice = '';\n\telse chineseIntegerPrice += '元';\n\n\tlet chineseDecimalPrice = '';\n\n\tif (!decimal) {\n\t\tchineseDecimalPrice = '整';\n\t} else {\n\t\tlet hasZero = false;\n\t\tfor (let i = 0; i < decimal.length; i++) {\n\t\t\tconst num = +decimal[i];\n\t\t\tif (num) chineseDecimalPrice += CHINESE_NUMBER_MAP[num] + CHINESE_SMALL_UNIT_MAP[i];\n\t\t\telse hasZero = true;\n\t\t}\n\n\t\tif (chineseIntegerPrice && hasZero) chineseIntegerPrice += '零';\n\t}\n\n\treturn chineseIntegerPrice + chineseDecimalPrice;\n}\n"],"names":["formatChineseAmount","price","CHINESE_NUMBER_MAP","CHINESE_UNIT_MAP","CHINESE_BIG_UNIT_MAP","CHINESE_SMALL_UNIT_MAP","priceStr","toString","priceArr","split","integer","decimal","chineseIntegerPrice","zeroCount","i","length","num","unit","quotient","Math","floor","remainder","chineseDecimalPrice","hasZero"],"mappings":"AAAA;;;CAGC,GACD,OAAO,SAASA,oBAAoBC,KAAa;IAChD,IAAIA,UAAU,GAAG,OAAO;IACxB,IAAIA,SAAS,MAAM,OAAO;IAE1B,MAAMC,qBAAqB;QAAC;QAAK;QAAK;QAAK;QAAK;QAAK;QAAK;QAAK;QAAK;QAAK;KAAI;IAC7E,MAAMC,mBAAmB;QAAC;QAAI;QAAK;QAAK;KAAI;IAC5C,MAAMC,uBAAuB;QAAC;QAAI;QAAK;KAAI;IAC3C,MAAMC,yBAAyB;QAAC;QAAK;QAAK;QAAK;KAAI;IAEnD,MAAMC,WAAWL,MAAMM,QAAQ;IAC/B,MAAMC,WAAWF,SAASG,KAAK,CAAC;IAChC,MAAMC,UAAUF,QAAQ,CAAC,EAAE;IAC3B,MAAMG,UAAUH,QAAQ,CAAC,EAAE;IAE3B,IAAII,sBAAsB;IAC1B,IAAIC,YAAY;IAEhB,IAAK,IAAIC,IAAI,GAAGA,IAAIJ,QAAQK,MAAM,EAAED,IAAK;QACxC,MAAME,MAAM,CAACN,OAAO,CAACI,EAAE;QACvB,MAAMG,OAAOP,QAAQK,MAAM,GAAGD,IAAI,GAAG,UAAU;QAC/C,MAAMI,WAAWC,KAAKC,KAAK,CAACH,OAAO,IAAI,sBAAsB;QAC7D,MAAMI,YAAYJ,OAAO,GAAG,2BAA2B;QAEvD,IAAID,QAAQ,GAAG;YACdH;QACD,OAAO;YACN,SAAS;YACT,IAAIA,YAAY,GAAGD,uBAAuBV,kBAAkB,CAAC,EAAE;YAC/DW,YAAY;YACZD,uBAAuBV,kBAAkB,CAACc,IAAI,GAAGb,gBAAgB,CAACkB,UAAU;QAC7E;QACA,IAAIA,cAAc,KAAKR,YAAY,GAAG;YACrCD,uBAAuBR,oBAAoB,CAACc,SAAS;QACtD;IACD;IAEA,iBAAiB;IACjB,IAAIjB,QAAQ,GAAGW,sBAAsB;SAChCA,uBAAuB;IAE5B,IAAIU,sBAAsB;IAE1B,IAAI,CAACX,SAAS;QACbW,sBAAsB;IACvB,OAAO;QACN,IAAIC,UAAU;QACd,IAAK,IAAIT,IAAI,GAAGA,IAAIH,QAAQI,MAAM,EAAED,IAAK;YACxC,MAAME,MAAM,CAACL,OAAO,CAACG,EAAE;YACvB,IAAIE,KAAKM,uBAAuBpB,kBAAkB,CAACc,IAAI,GAAGX,sBAAsB,CAACS,EAAE;iBAC9ES,UAAU;QAChB;QAEA,IAAIX,uBAAuBW,SAASX,uBAAuB;IAC5D;IAEA,OAAOA,sBAAsBU;AAC9B"}
|
package/lib/cn/index.js
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
|
-
export {
|
|
2
|
-
export { DivisionCode } from "./DivisionCode.js";
|
|
1
|
+
export { ChineseResidentIdNo } from "./ChineseResidentIdNo.js";
|
|
3
2
|
export { UnifiedSocialCreditCode } from "./UnifiedSocialCreditCode.js";
|
|
3
|
+
export { DivisionCode } from "./DivisionCode.js";
|
|
4
|
+
export * from "./formatChineseAmount.js";
|
|
5
|
+
export * from "./parseChineseNumber.js";
|
|
6
|
+
export * from "./pinyin/toPinyinPure.js";
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/cn/index.ts"],"sourcesContent":["export { ChineseResidentIdNo } from './ChineseResidentIdNo';\nexport { UnifiedSocialCreditCode } from './UnifiedSocialCreditCode';\nexport { DivisionCode } from './DivisionCode';\n\nexport * from './formatChineseAmount';\nexport * from './parseChineseNumber';\nexport * from './pinyin/toPinyinPure';\n"],"names":["ChineseResidentIdNo","UnifiedSocialCreditCode","DivisionCode"],"mappings":"AAAA,SAASA,mBAAmB,QAAQ,wBAAwB;AAC5D,SAASC,uBAAuB,QAAQ,4BAA4B;AACpE,SAASC,YAAY,QAAQ,iBAAiB;AAE9C,cAAc,wBAAwB;AACtC,cAAc,uBAAuB;AACrC,cAAc,wBAAwB"}
|
package/lib/cn/mod.js
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import * as _ChineseResidentIdNo from "./ChineseResidentIdNo.mod.js";
|
|
2
|
+
export { _ChineseResidentIdNo as ChineseResidentIdNo };
|
|
3
|
+
import * as _UnifiedSocialCreditCode from "./UnifiedSocialCreditCode.mod.js";
|
|
4
|
+
export { _UnifiedSocialCreditCode as UnifiedSocialCreditCode };
|
|
5
|
+
import * as _DivisionCode from "./DivisionCode.mod.js";
|
|
6
|
+
export { _DivisionCode as DivisionCode };
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
const ToNumber = {
|
|
2
|
+
〇: 0,
|
|
3
|
+
一: 1,
|
|
4
|
+
二: 2,
|
|
5
|
+
三: 3,
|
|
6
|
+
四: 4,
|
|
7
|
+
五: 5,
|
|
8
|
+
六: 6,
|
|
9
|
+
七: 7,
|
|
10
|
+
八: 8,
|
|
11
|
+
九: 9,
|
|
12
|
+
十: 10,
|
|
13
|
+
百: 100,
|
|
14
|
+
千: 1000,
|
|
15
|
+
万: 10000,
|
|
16
|
+
零: 0,
|
|
17
|
+
壹: 1,
|
|
18
|
+
贰: 2,
|
|
19
|
+
叁: 3,
|
|
20
|
+
肆: 4,
|
|
21
|
+
伍: 5,
|
|
22
|
+
陆: 6,
|
|
23
|
+
柒: 7,
|
|
24
|
+
捌: 8,
|
|
25
|
+
玖: 9,
|
|
26
|
+
拾: 10,
|
|
27
|
+
佰: 100,
|
|
28
|
+
仟: 1000,
|
|
29
|
+
0: 0,
|
|
30
|
+
1: 1,
|
|
31
|
+
2: 2,
|
|
32
|
+
3: 3,
|
|
33
|
+
4: 4,
|
|
34
|
+
5: 5,
|
|
35
|
+
6: 6,
|
|
36
|
+
7: 7,
|
|
37
|
+
8: 8,
|
|
38
|
+
9: 9
|
|
39
|
+
};
|
|
40
|
+
// 一万一 -> 10001
|
|
41
|
+
// 一万一百一 -> 10101
|
|
42
|
+
// 一万 -> 10000
|
|
43
|
+
// 10000 -> 10000
|
|
44
|
+
export function parseChineseNumber(s) {
|
|
45
|
+
if (typeof s === 'number') {
|
|
46
|
+
return s;
|
|
47
|
+
}
|
|
48
|
+
let n = 0;
|
|
49
|
+
let c = 0;
|
|
50
|
+
let base = 0;
|
|
51
|
+
let shouldAddLast = false;
|
|
52
|
+
for (const char of s.split('').reverse()){
|
|
53
|
+
c = ToNumber[char];
|
|
54
|
+
if (c === undefined) {
|
|
55
|
+
throw new Error(`无法解析的数字: ${char}`);
|
|
56
|
+
}
|
|
57
|
+
switch(c){
|
|
58
|
+
case 10:
|
|
59
|
+
{
|
|
60
|
+
base = 1;
|
|
61
|
+
break;
|
|
62
|
+
}
|
|
63
|
+
case 100:
|
|
64
|
+
{
|
|
65
|
+
base = 2;
|
|
66
|
+
break;
|
|
67
|
+
}
|
|
68
|
+
case 1000:
|
|
69
|
+
{
|
|
70
|
+
base = 3;
|
|
71
|
+
break;
|
|
72
|
+
}
|
|
73
|
+
case 10000:
|
|
74
|
+
{
|
|
75
|
+
base = 4;
|
|
76
|
+
break;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
//
|
|
80
|
+
if (c < 10) {
|
|
81
|
+
n += c * 10 ** base;
|
|
82
|
+
base++;
|
|
83
|
+
shouldAddLast = false;
|
|
84
|
+
} else {
|
|
85
|
+
shouldAddLast = true;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
if (shouldAddLast) {
|
|
89
|
+
n += c;
|
|
90
|
+
}
|
|
91
|
+
return n;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
//# sourceMappingURL=parseChineseNumber.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/cn/parseChineseNumber.ts"],"sourcesContent":["const ToNumber: Record<string, number> = {\n\t〇: 0,\n\t一: 1,\n\t二: 2,\n\t三: 3,\n\t四: 4,\n\t五: 5,\n\t六: 6,\n\t七: 7,\n\t八: 8,\n\t九: 9,\n\t十: 10,\n\t百: 100,\n\t千: 1000,\n\t万: 10_000,\n\t零: 0,\n\t壹: 1,\n\t贰: 2,\n\t叁: 3,\n\t肆: 4,\n\t伍: 5,\n\t陆: 6,\n\t柒: 7,\n\t捌: 8,\n\t玖: 9,\n\t拾: 10,\n\t佰: 100,\n\t仟: 1000,\n\t0: 0,\n\t1: 1,\n\t2: 2,\n\t3: 3,\n\t4: 4,\n\t5: 5,\n\t6: 6,\n\t7: 7,\n\t8: 8,\n\t9: 9,\n};\n\n// 一万一 -> 10001\n// 一万一百一 -> 10101\n// 一万 -> 10000\n// 10000 -> 10000\nexport function parseChineseNumber(s: string | number) {\n\tif (typeof s === 'number') {\n\t\treturn s;\n\t}\n\n\tlet n = 0;\n\tlet c = 0;\n\tlet base = 0;\n\tlet shouldAddLast = false;\n\tfor (const char of s.split('').reverse()) {\n\t\tc = ToNumber[char];\n\t\tif (c === undefined) {\n\t\t\tthrow new Error(`无法解析的数字: ${char}`);\n\t\t}\n\n\t\tswitch (c) {\n\t\t\tcase 10: {\n\t\t\t\tbase = 1;\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase 100: {\n\t\t\t\tbase = 2;\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase 1000: {\n\t\t\t\tbase = 3;\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase 10_000: {\n\t\t\t\tbase = 4;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t//\n\t\tif (c < 10) {\n\t\t\tn += c * 10 ** base;\n\t\t\tbase++;\n\t\t\tshouldAddLast = false;\n\t\t} else {\n\t\t\tshouldAddLast = true;\n\t\t}\n\t}\n\n\tif (shouldAddLast) {\n\t\tn += c;\n\t}\n\n\treturn n;\n}\n"],"names":["ToNumber","〇","一","二","三","四","五","六","七","八","九","十","百","千","万","零","壹","贰","叁","肆","伍","陆","柒","捌","玖","拾","佰","仟","parseChineseNumber","s","n","c","base","shouldAddLast","char","split","reverse","undefined","Error"],"mappings":"AAAA,MAAMA,WAAmC;IACxCC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACHC,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;AACJ;AAEA,eAAe;AACf,iBAAiB;AACjB,cAAc;AACd,iBAAiB;AACjB,OAAO,SAASC,mBAAmBC,CAAkB;IACpD,IAAI,OAAOA,MAAM,UAAU;QAC1B,OAAOA;IACR;IAEA,IAAIC,IAAI;IACR,IAAIC,IAAI;IACR,IAAIC,OAAO;IACX,IAAIC,gBAAgB;IACpB,KAAK,MAAMC,QAAQL,EAAEM,KAAK,CAAC,IAAIC,OAAO,GAAI;QACzCL,IAAI/B,QAAQ,CAACkC,KAAK;QAClB,IAAIH,MAAMM,WAAW;YACpB,MAAM,IAAIC,MAAM,CAAC,SAAS,EAAEJ,MAAM;QACnC;QAEA,OAAQH;YACP,KAAK;gBAAI;oBACRC,OAAO;oBACP;gBACD;YAEA,KAAK;gBAAK;oBACTA,OAAO;oBACP;gBACD;YAEA,KAAK;gBAAM;oBACVA,OAAO;oBACP;gBACD;YAEA,KAAK;gBAAQ;oBACZA,OAAO;oBACP;gBACD;QACD;QAEA,EAAE;QACF,IAAID,IAAI,IAAI;YACXD,KAAKC,IAAI,MAAMC;YACfA;YACAC,gBAAgB;QACjB,OAAO;YACNA,gBAAgB;QACjB;IACD;IAEA,IAAIA,eAAe;QAClBH,KAAKC;IACN;IAEA,OAAOD;AACR"}
|