@cdklabs/cdk-construct-connect-datalake 0.0.13 → 0.0.14

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.
Files changed (124) hide show
  1. package/.jsii +9 -9
  2. package/lib/index.js +1 -1
  3. package/node_modules/@aws-sdk/client-cloudformation/package.json +5 -5
  4. package/node_modules/@aws-sdk/client-connect/package.json +5 -5
  5. package/node_modules/@aws-sdk/client-glue/dist-cjs/index.js +6 -4
  6. package/node_modules/@aws-sdk/client-glue/dist-cjs/schemas/schemas_0.js +57 -30
  7. package/node_modules/@aws-sdk/client-glue/dist-es/models/enums.js +6 -4
  8. package/node_modules/@aws-sdk/client-glue/dist-es/schemas/schemas_0.js +42 -15
  9. package/node_modules/@aws-sdk/client-glue/dist-types/commands/GetTableCommand.d.ts +121 -0
  10. package/node_modules/@aws-sdk/client-glue/dist-types/commands/GetTableVersionCommand.d.ts +118 -0
  11. package/node_modules/@aws-sdk/client-glue/dist-types/commands/GetTableVersionsCommand.d.ts +118 -0
  12. package/node_modules/@aws-sdk/client-glue/dist-types/commands/GetTablesCommand.d.ts +119 -1
  13. package/node_modules/@aws-sdk/client-glue/dist-types/commands/GetUnfilteredTableMetadataCommand.d.ts +118 -0
  14. package/node_modules/@aws-sdk/client-glue/dist-types/commands/SearchTablesCommand.d.ts +118 -0
  15. package/node_modules/@aws-sdk/client-glue/dist-types/commands/UpdateCrawlerScheduleCommand.d.ts +2 -1
  16. package/node_modules/@aws-sdk/client-glue/dist-types/models/enums.d.ts +14 -12
  17. package/node_modules/@aws-sdk/client-glue/dist-types/models/models_2.d.ts +87 -6
  18. package/node_modules/@aws-sdk/client-glue/dist-types/models/models_3.d.ts +11 -1
  19. package/node_modules/@aws-sdk/client-glue/dist-types/schemas/schemas_0.d.ts +1 -0
  20. package/node_modules/@aws-sdk/client-glue/dist-types/ts3.4/commands/UpdateCrawlerScheduleCommand.d.ts +2 -4
  21. package/node_modules/@aws-sdk/client-glue/dist-types/ts3.4/models/enums.d.ts +8 -6
  22. package/node_modules/@aws-sdk/client-glue/dist-types/ts3.4/models/models_2.d.ts +18 -1
  23. package/node_modules/@aws-sdk/client-glue/dist-types/ts3.4/models/models_3.d.ts +3 -0
  24. package/node_modules/@aws-sdk/client-glue/dist-types/ts3.4/schemas/schemas_0.d.ts +1 -0
  25. package/node_modules/@aws-sdk/client-glue/package.json +5 -5
  26. package/node_modules/@aws-sdk/client-lakeformation/package.json +5 -5
  27. package/node_modules/@aws-sdk/client-ram/package.json +5 -5
  28. package/node_modules/@aws-sdk/client-sts/package.json +6 -6
  29. package/node_modules/@aws-sdk/core/dist-cjs/index.js +47 -2297
  30. package/node_modules/@aws-sdk/core/dist-es/index.js +3 -3
  31. package/node_modules/@aws-sdk/core/dist-types/index.d.ts +5 -5
  32. package/node_modules/@aws-sdk/core/dist-types/ts3.4/index.d.ts +5 -5
  33. package/node_modules/@aws-sdk/core/package.json +8 -8
  34. package/node_modules/@aws-sdk/credential-provider-env/package.json +4 -4
  35. package/node_modules/@aws-sdk/credential-provider-http/package.json +6 -5
  36. package/node_modules/@aws-sdk/credential-provider-ini/package.json +11 -11
  37. package/node_modules/@aws-sdk/credential-provider-login/package.json +5 -5
  38. package/node_modules/@aws-sdk/credential-provider-node/package.json +9 -9
  39. package/node_modules/@aws-sdk/credential-provider-process/package.json +4 -4
  40. package/node_modules/@aws-sdk/credential-provider-sso/dist-cjs/index.js +4 -1
  41. package/node_modules/@aws-sdk/credential-provider-sso/dist-es/resolveSSOCredentials.js +4 -1
  42. package/node_modules/@aws-sdk/credential-provider-sso/package.json +9 -7
  43. package/node_modules/@aws-sdk/credential-provider-web-identity/package.json +5 -5
  44. package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/cognito-identity/index.js +1 -1
  45. package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/signin/index.js +1 -1
  46. package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sso/index.js +1 -1
  47. package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sso-oidc/index.js +1 -1
  48. package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sts/index.js +1 -1
  49. package/node_modules/@aws-sdk/nested-clients/package.json +6 -6
  50. package/node_modules/@aws-sdk/signature-v4-multi-region/package.json +7 -6
  51. package/node_modules/@aws-sdk/token-providers/package.json +5 -5
  52. package/node_modules/@aws-sdk/types/package.json +2 -2
  53. package/node_modules/@aws-sdk/util-locate-window/package.json +2 -2
  54. package/node_modules/{strnum → @aws-sdk/xml-builder/node_modules/strnum}/CHANGELOG.md +8 -0
  55. package/node_modules/{strnum → @aws-sdk/xml-builder/node_modules/strnum}/README.md +9 -0
  56. package/node_modules/{strnum → @aws-sdk/xml-builder/node_modules/strnum}/package.json +4 -1
  57. package/node_modules/{strnum → @aws-sdk/xml-builder/node_modules/strnum}/strnum.js +9 -1
  58. package/node_modules/@aws-sdk/xml-builder/package.json +2 -2
  59. package/node_modules/@nodable/entities/package.json +4 -1
  60. package/node_modules/@nodable/entities/src/EntityDecoder.js +104 -3
  61. package/node_modules/@nodable/entities/src/index.d.ts +77 -0
  62. package/node_modules/@nodable/entities/src/index.js +1 -1
  63. package/node_modules/@smithy/core/dist-cjs/index.js +13 -15
  64. package/node_modules/@smithy/core/dist-cjs/submodules/cbor/index.js +29 -31
  65. package/node_modules/@smithy/core/dist-cjs/submodules/checksum/index.browser.js +2 -4
  66. package/node_modules/@smithy/core/dist-cjs/submodules/checksum/index.js +7 -9
  67. package/node_modules/@smithy/core/dist-cjs/submodules/checksum/index.native.js +3 -5
  68. package/node_modules/@smithy/core/dist-cjs/submodules/client/index.js +22 -23
  69. package/node_modules/@smithy/core/dist-cjs/submodules/config/index.browser.js +10 -11
  70. package/node_modules/@smithy/core/dist-cjs/submodules/config/index.js +38 -39
  71. package/node_modules/@smithy/core/dist-cjs/submodules/config/index.native.js +10 -11
  72. package/node_modules/@smithy/core/dist-cjs/submodules/endpoints/index.browser.js +14 -17
  73. package/node_modules/@smithy/core/dist-cjs/submodules/endpoints/index.js +20 -23
  74. package/node_modules/@smithy/core/dist-cjs/submodules/event-streams/index.browser.js +9 -11
  75. package/node_modules/@smithy/core/dist-cjs/submodules/event-streams/index.js +11 -13
  76. package/node_modules/@smithy/core/dist-cjs/submodules/protocols/index.js +59 -60
  77. package/node_modules/@smithy/core/dist-cjs/submodules/retry/index.browser.js +26 -27
  78. package/node_modules/@smithy/core/dist-cjs/submodules/retry/index.js +28 -29
  79. package/node_modules/@smithy/core/dist-cjs/submodules/schema/index.js +5 -7
  80. package/node_modules/@smithy/core/dist-cjs/submodules/serde/index.browser.js +4 -6
  81. package/node_modules/@smithy/core/dist-cjs/submodules/serde/index.js +23 -25
  82. package/node_modules/@smithy/core/dist-cjs/submodules/serde/index.native.js +4 -6
  83. package/node_modules/@smithy/core/dist-cjs/submodules/transport/index.js +2 -4
  84. package/node_modules/@smithy/core/dist-es/legacy-root-exports/middleware-http-auth-scheme/httpAuthSchemeMiddleware.js +1 -1
  85. package/node_modules/@smithy/core/dist-es/legacy-root-exports/middleware-http-signing/httpSigningMiddleware.js +1 -1
  86. package/node_modules/@smithy/core/dist-es/submodules/cbor/SmithyRpcV2CborProtocol.js +1 -1
  87. package/node_modules/@smithy/core/dist-es/submodules/endpoints/middleware-endpoint/endpointMiddleware.js +1 -1
  88. package/node_modules/@smithy/core/dist-es/submodules/retry/middleware-retry/retry-pre-sra-deprecated/StandardRetryStrategy.js +2 -2
  89. package/node_modules/@smithy/core/dist-es/submodules/retry/util-retry/DefaultRateLimiter.js +1 -1
  90. package/node_modules/@smithy/core/dist-types/submodules/schema/TypeRegistry.d.ts +1 -1
  91. package/node_modules/@smithy/core/package.json +18 -17
  92. package/node_modules/@smithy/credential-provider-imds/dist-cjs/index.js +23 -24
  93. package/node_modules/@smithy/credential-provider-imds/package.json +7 -7
  94. package/node_modules/@smithy/fetch-http-handler/dist-cjs/index.js +6 -8
  95. package/node_modules/@smithy/fetch-http-handler/package.json +10 -10
  96. package/node_modules/@smithy/node-http-handler/dist-cjs/index.js +11 -13
  97. package/node_modules/@smithy/node-http-handler/package.json +8 -8
  98. package/node_modules/@smithy/signature-v4/dist-cjs/index.js +27 -29
  99. package/node_modules/@smithy/signature-v4/package.json +7 -7
  100. package/node_modules/@smithy/types/dist-cjs/index.js +23 -18
  101. package/node_modules/@smithy/types/package.json +10 -10
  102. package/node_modules/anynum/LICENSE +21 -0
  103. package/node_modules/anynum/README.md +142 -0
  104. package/node_modules/anynum/anynum.js +135 -0
  105. package/node_modules/anynum/digitTable.js +116 -0
  106. package/node_modules/anynum/package.json +42 -0
  107. package/node_modules/watchpack/README.md +9 -0
  108. package/node_modules/watchpack/lib/DirectoryWatcher.js +182 -25
  109. package/node_modules/watchpack/lib/index.js +55 -15
  110. package/node_modules/watchpack/lib/reducePlan.js +56 -35
  111. package/node_modules/watchpack/lib/util/globToRegExp.js +142 -0
  112. package/node_modules/watchpack/lib/watchEventSource.js +18 -10
  113. package/node_modules/watchpack/package.json +17 -23
  114. package/node_modules/watchpack/types/DirectoryWatcher.d.ts +2 -0
  115. package/node_modules/watchpack/types/index.d.ts +121 -113
  116. package/node_modules/watchpack/types/util/globToRegExp.d.ts +2 -0
  117. package/node_modules/watchpack/types/watchpack.d.ts +1 -1
  118. package/package.json +10 -10
  119. package/node_modules/glob-to-regexp/.travis.yml +0 -4
  120. package/node_modules/glob-to-regexp/README.md +0 -75
  121. package/node_modules/glob-to-regexp/index.js +0 -130
  122. package/node_modules/glob-to-regexp/package.json +0 -23
  123. package/node_modules/glob-to-regexp/test.js +0 -235
  124. /package/node_modules/{strnum → @aws-sdk/xml-builder/node_modules/strnum}/LICENSE +0 -0
@@ -1,16 +1,16 @@
1
1
  {
2
2
  "name": "@smithy/signature-v4",
3
- "version": "5.4.6",
3
+ "version": "5.5.0",
4
4
  "description": "A standalone implementation of the AWS Signature V4 request signing algorithm",
5
5
  "main": "./dist-cjs/index.js",
6
6
  "module": "./dist-es/index.js",
7
7
  "types": "./dist-types/index.d.ts",
8
8
  "scripts": {
9
9
  "build": "concurrently 'yarn:build:types' 'yarn:build:es:cjs'",
10
- "build:es:cjs": "yarn g:tsc -p tsconfig.es.json && node ../../scripts/inline signature-v4",
11
- "build:types": "yarn g:tsc -p tsconfig.types.json",
10
+ "build:es:cjs": "premove dist-es && yarn g:tsc -p tsconfig.es.json && node ../../scripts/inline",
11
+ "build:types": "premove dist-types && yarn g:tsc -p tsconfig.types.json",
12
12
  "build:types:downlevel": "premove dist-types/ts3.4 && downlevel-dts dist-types dist-types/ts3.4",
13
- "clean": "premove dist-cjs dist-es dist-types tsconfig.cjs.tsbuildinfo tsconfig.es.tsbuildinfo tsconfig.types.tsbuildinfo",
13
+ "clean": "premove dist-cjs dist-es dist-types",
14
14
  "extract:docs": "api-extractor run --local",
15
15
  "format": "prettier --config ../../prettier.config.js --ignore-path ../../.prettierignore --write \"**/*.{ts,md,json}\"",
16
16
  "lint": "eslint -c ../../.eslintrc.js \"src/**/*.ts\"",
@@ -20,13 +20,13 @@
20
20
  },
21
21
  "author": {
22
22
  "name": "AWS SDK for JavaScript Team",
23
- "url": "https://aws.amazon.com/javascript/"
23
+ "url": "https://aws.amazon.com/sdk-for-javascript/"
24
24
  },
25
25
  "license": "Apache-2.0",
26
26
  "sideEffects": false,
27
27
  "dependencies": {
28
- "@smithy/core": "^3.24.6",
29
- "@smithy/types": "^4.14.3",
28
+ "@smithy/core": "^3.25.0",
29
+ "@smithy/types": "^4.15.0",
30
30
  "tslib": "^2.6.2"
31
31
  },
32
32
  "devDependencies": {
@@ -1,42 +1,40 @@
1
- 'use strict';
2
-
3
- exports.HttpAuthLocation = void 0;
1
+ var HttpAuthLocation;
4
2
  (function (HttpAuthLocation) {
5
3
  HttpAuthLocation["HEADER"] = "header";
6
4
  HttpAuthLocation["QUERY"] = "query";
7
- })(exports.HttpAuthLocation || (exports.HttpAuthLocation = {}));
5
+ })(HttpAuthLocation || (HttpAuthLocation = {}));
8
6
 
9
- exports.HttpApiKeyAuthLocation = void 0;
7
+ var HttpApiKeyAuthLocation;
10
8
  (function (HttpApiKeyAuthLocation) {
11
9
  HttpApiKeyAuthLocation["HEADER"] = "header";
12
10
  HttpApiKeyAuthLocation["QUERY"] = "query";
13
- })(exports.HttpApiKeyAuthLocation || (exports.HttpApiKeyAuthLocation = {}));
11
+ })(HttpApiKeyAuthLocation || (HttpApiKeyAuthLocation = {}));
14
12
 
15
- exports.EndpointURLScheme = void 0;
13
+ var EndpointURLScheme;
16
14
  (function (EndpointURLScheme) {
17
15
  EndpointURLScheme["HTTP"] = "http";
18
16
  EndpointURLScheme["HTTPS"] = "https";
19
- })(exports.EndpointURLScheme || (exports.EndpointURLScheme = {}));
17
+ })(EndpointURLScheme || (EndpointURLScheme = {}));
20
18
 
21
- exports.AlgorithmId = void 0;
19
+ var AlgorithmId;
22
20
  (function (AlgorithmId) {
23
21
  AlgorithmId["MD5"] = "md5";
24
22
  AlgorithmId["CRC32"] = "crc32";
25
23
  AlgorithmId["CRC32C"] = "crc32c";
26
24
  AlgorithmId["SHA1"] = "sha1";
27
25
  AlgorithmId["SHA256"] = "sha256";
28
- })(exports.AlgorithmId || (exports.AlgorithmId = {}));
26
+ })(AlgorithmId || (AlgorithmId = {}));
29
27
  const getChecksumConfiguration = (runtimeConfig) => {
30
28
  const checksumAlgorithms = [];
31
29
  if (runtimeConfig.sha256 !== undefined) {
32
30
  checksumAlgorithms.push({
33
- algorithmId: () => exports.AlgorithmId.SHA256,
31
+ algorithmId: () => AlgorithmId.SHA256,
34
32
  checksumConstructor: () => runtimeConfig.sha256,
35
33
  });
36
34
  }
37
35
  if (runtimeConfig.md5 != undefined) {
38
36
  checksumAlgorithms.push({
39
- algorithmId: () => exports.AlgorithmId.MD5,
37
+ algorithmId: () => AlgorithmId.MD5,
40
38
  checksumConstructor: () => runtimeConfig.md5,
41
39
  });
42
40
  }
@@ -64,28 +62,35 @@ const resolveDefaultRuntimeConfig = (config) => {
64
62
  return resolveChecksumRuntimeConfig(config);
65
63
  };
66
64
 
67
- exports.FieldPosition = void 0;
65
+ var FieldPosition;
68
66
  (function (FieldPosition) {
69
67
  FieldPosition[FieldPosition["HEADER"] = 0] = "HEADER";
70
68
  FieldPosition[FieldPosition["TRAILER"] = 1] = "TRAILER";
71
- })(exports.FieldPosition || (exports.FieldPosition = {}));
69
+ })(FieldPosition || (FieldPosition = {}));
72
70
 
73
71
  const SMITHY_CONTEXT_KEY = "__smithy_context";
74
72
 
75
- exports.IniSectionType = void 0;
73
+ var IniSectionType;
76
74
  (function (IniSectionType) {
77
75
  IniSectionType["PROFILE"] = "profile";
78
76
  IniSectionType["SSO_SESSION"] = "sso-session";
79
77
  IniSectionType["SERVICES"] = "services";
80
- })(exports.IniSectionType || (exports.IniSectionType = {}));
78
+ })(IniSectionType || (IniSectionType = {}));
81
79
 
82
- exports.RequestHandlerProtocol = void 0;
80
+ var RequestHandlerProtocol;
83
81
  (function (RequestHandlerProtocol) {
84
82
  RequestHandlerProtocol["HTTP_0_9"] = "http/0.9";
85
83
  RequestHandlerProtocol["HTTP_1_0"] = "http/1.0";
86
84
  RequestHandlerProtocol["TDS_8_0"] = "tds/8.0";
87
- })(exports.RequestHandlerProtocol || (exports.RequestHandlerProtocol = {}));
85
+ })(RequestHandlerProtocol || (RequestHandlerProtocol = {}));
88
86
 
87
+ exports.AlgorithmId = AlgorithmId;
88
+ exports.EndpointURLScheme = EndpointURLScheme;
89
+ exports.FieldPosition = FieldPosition;
90
+ exports.HttpApiKeyAuthLocation = HttpApiKeyAuthLocation;
91
+ exports.HttpAuthLocation = HttpAuthLocation;
92
+ exports.IniSectionType = IniSectionType;
93
+ exports.RequestHandlerProtocol = RequestHandlerProtocol;
89
94
  exports.SMITHY_CONTEXT_KEY = SMITHY_CONTEXT_KEY;
90
95
  exports.getDefaultClientConfiguration = getDefaultClientConfiguration;
91
96
  exports.resolveDefaultRuntimeConfig = resolveDefaultRuntimeConfig;
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@smithy/types",
3
- "version": "4.14.3",
3
+ "version": "4.15.0",
4
4
  "scripts": {
5
5
  "build": "concurrently 'yarn:build:types' 'yarn:build:es:cjs'",
6
- "build:es:cjs": "yarn g:tsc -p tsconfig.es.json && node ../../scripts/inline types",
7
- "build:types": "yarn g:tsc -p tsconfig.types.json",
6
+ "build:es:cjs": "premove dist-es && yarn g:tsc -p tsconfig.es.json && node ../../scripts/inline",
7
+ "build:types": "premove dist-types && yarn g:tsc -p tsconfig.types.json",
8
8
  "build:types:downlevel": "premove dist-types/ts3.4 && downlevel-dts dist-types dist-types/ts3.4 && node scripts/downlevel",
9
- "clean": "premove dist-cjs dist-es dist-types tsconfig.cjs.tsbuildinfo tsconfig.es.tsbuildinfo tsconfig.types.tsbuildinfo",
9
+ "clean": "premove dist-cjs dist-es dist-types",
10
10
  "extract:docs": "api-extractor run --local",
11
11
  "format": "prettier --config ../../prettier.config.js --ignore-path ../../.prettierignore --write \"**/*.{ts,md,json}\"",
12
12
  "lint": "eslint -c ../../.eslintrc.js \"src/**/*.ts\"",
@@ -26,6 +26,12 @@
26
26
  "dependencies": {
27
27
  "tslib": "^2.6.2"
28
28
  },
29
+ "devDependencies": {
30
+ "concurrently": "7.0.0",
31
+ "downlevel-dts": "0.10.1",
32
+ "premove": "4.0.0",
33
+ "typedoc": "0.23.23"
34
+ },
29
35
  "engines": {
30
36
  "node": ">=18.0.0"
31
37
  },
@@ -45,12 +51,6 @@
45
51
  "url": "https://github.com/smithy-lang/smithy-typescript.git",
46
52
  "directory": "packages/types"
47
53
  },
48
- "devDependencies": {
49
- "concurrently": "7.0.0",
50
- "downlevel-dts": "0.10.1",
51
- "premove": "4.0.0",
52
- "typedoc": "0.23.23"
53
- },
54
54
  "typedoc": {
55
55
  "entryPoint": "src/index.ts"
56
56
  },
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Natural Intelligence
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,142 @@
1
+ # anynum
2
+
3
+ Normalize Unicode decimal digits and minus signs to ASCII.
4
+
5
+ Converts digits from any script — Devanagari, Arabic-Indic, Thai, Bengali, Fullwidth, and [50+ others](#supported-scripts) — to their ASCII equivalents (`0`–`9`). Also normalizes Unicode minus variants (`−`, `-`, `﹣`) to ASCII `-`.
6
+
7
+ Pairs naturally with [`strnum`](https://github.com/nicolo-ribaudo/strnum) — use `anynum` to normalize first, then `strnum` to detect the numeric type.
8
+
9
+ ```js
10
+ import anynum from 'anynum';
11
+
12
+ anynum('१२.३४') // → '12.34' (Devanagari)
13
+ anynum('٣٫١٤') // → '3.14' (Arabic-Indic)
14
+ anynum('−४२') // → '-42' (Unicode minus + Devanagari)
15
+ anynum('-99.5') // → '-99.5' (Fullwidth minus + Fullwidth digits)
16
+ anynum('hello') // → 'hello' (no digits — zero allocation)
17
+ anynum('100') // → '100' (already ASCII — zero allocation)
18
+ ```
19
+
20
+ ---
21
+
22
+ ## Install
23
+
24
+ ```bash
25
+ npm install anynum
26
+ ```
27
+
28
+ ---
29
+
30
+ ## Usage
31
+
32
+ ```js
33
+ // ESM
34
+ import anynum from 'anynum';
35
+ import { anynum } from 'anynum';
36
+
37
+ ```
38
+
39
+ ### API
40
+
41
+ ```ts
42
+ anynum(str: string): string
43
+ ```
44
+
45
+ - Accepts a `string`, returns a `string`.
46
+ - Non-string values are returned as-is (no throw).
47
+ - Non-digit characters pass through unchanged.
48
+ - If no conversion is needed, the **original string is returned** (zero allocation).
49
+
50
+ ---
51
+
52
+ ## What gets converted
53
+
54
+ ### Decimal digits
55
+
56
+ Any Unicode character in category `Nd` (decimal digit) is mapped to its ASCII equivalent. This covers all positional decimal digit scripts — every script whose digits represent `0`–`9` by position.
57
+
58
+ ```js
59
+ anynum('๑๒๓') // Thai → '123'
60
+ anynum('੧੨੩') // Gurmukhi → '123'
61
+ anynum('᠑᠒᠓') // Mongolian → '123'
62
+ anynum('𝟏𝟐𝟑') // Math Bold → '123'
63
+ ```
64
+
65
+ ### Unicode minus variants
66
+
67
+ Three Unicode characters are normalized to ASCII `-` (`U+002D`):
68
+
69
+ | Code point | Character | Name |
70
+ |---|---|---|
71
+ | `U+2212` | `−` | MINUS SIGN (mathematical) |
72
+ | `U+FF0D` | `-` | FULLWIDTH HYPHEN-MINUS |
73
+ | `U+FE63` | `﹣` | SMALL HYPHEN-MINUS |
74
+
75
+ Dashes used for punctuation — EN DASH (`–`), EM DASH (`—`), HYPHEN (`‐`) — are intentionally **not** converted.
76
+
77
+ ```js
78
+ anynum('−42') // U+2212 MINUS SIGN → '-42'
79
+ anynum('-42') // U+FF0D FULLWIDTH → '-42'
80
+ anynum('–42') // U+2013 EN DASH → '–42' (unchanged)
81
+ ```
82
+
83
+ ---
84
+
85
+ ## Use with strnum
86
+
87
+ `anynum` and `strnum` compose cleanly:
88
+
89
+ ```js
90
+ import anynum from 'anynum';
91
+ import strnum from 'strnum';
92
+
93
+ strnum(anynum('१२.३४')) // → 12.34 (number, float)
94
+ strnum(anynum('−४२')) // → '-42' (string; strnum handles sign detection)
95
+ strnum(anynum('hello')) // → 'hello'
96
+ ```
97
+
98
+ ---
99
+
100
+
101
+ ## Supported scripts
102
+
103
+ 50+ decimal digit scripts from Unicode `Nd` category, including:
104
+
105
+ | Script | Zero | Sample |
106
+ |---|---|---|
107
+ | Devanagari (Hindi/Marathi/Nepali) | `U+0966` | `०१२३४५६७८९` |
108
+ | Arabic-Indic | `U+0660` | `٠١٢٣٤٥٦٧٨٩` |
109
+ | Extended Arabic-Indic (Urdu/Persian) | `U+06F0` | `۰۱۲۳۴۵۶۷۸۹` |
110
+ | Bengali | `U+09E6` | `০১২৩৪৫৬৭৮৯` |
111
+ | Gurmukhi | `U+0A66` | `੦੧੨੩੪੫੬੭੮੯` |
112
+ | Gujarati | `U+0AE6` | `૦૧૨૩૪૫૬૭૮૯` |
113
+ | Odia | `U+0B66` | `୦୧୨୩୪୫୬୭୮୯` |
114
+ | Tamil | `U+0BE6` | `௦௧௨௩௪௫௬௭௮௯` |
115
+ | Telugu | `U+0C66` | `౦౧౨౩౪౫౬౭౮౯` |
116
+ | Kannada | `U+0CE6` | `೦೧೨೩೪೫೬೭೮೯` |
117
+ | Malayalam | `U+0D66` | `൦൧൨൩൪൫൬൭൮൯` |
118
+ | Thai | `U+0E50` | `๐๑๒๓๔๕๖๗๘๙` |
119
+ | Lao | `U+0ED0` | `໐໑໒໓໔໕໖໗໘໙` |
120
+ | Tibetan | `U+0F20` | `༠༡༢༣༤༥༦༧༨༩` |
121
+ | Myanmar | `U+1040` | `၀၁၂၃၄၅၆၇၈၉` |
122
+ | Khmer | `U+17E0` | `០១២៣៤៥៦៧៨៩` |
123
+ | Mongolian | `U+1810` | `᠐᠑᠒᠓᠔᠕᠖᠗᠘᠙` |
124
+ | Fullwidth (CJK context) | `U+FF10` | `0123456789` |
125
+ | Mathematical Bold | `U+1D7CE` | `𝟎𝟏𝟐𝟑𝟒𝟓𝟔𝟕𝟖𝟗` |
126
+ | Adlam | `U+1E950` | `𞥐𞥑𞥒𞥓𞥔𞥕𞥖𞥗𞥘𞥙` |
127
+ | … and 30+ more | | |
128
+
129
+ ---
130
+
131
+ ## What it does NOT convert
132
+
133
+ - **Kanji/Chinese numeral words** (`三`, `百`, `万`) — these are ideographic numerals, not decimal digits. Each language has its own positional system requiring separate parsing logic.
134
+ - **Roman numerals** (`Ⅳ`, `Ⅻ`) — not decimal digits.
135
+ - **Punctuation dashes** (`–` EN, `—` EM, `‐` HYPHEN) — not numeric signs.
136
+ - **Decimal separators** — commas, periods, Arabic decimal comma (`٫`) are passed through as-is. Separator normalization is the caller's responsibility.
137
+
138
+ ---
139
+
140
+ ## License
141
+
142
+ MIT
@@ -0,0 +1,135 @@
1
+ 'use strict';
2
+
3
+ import { TABLE, TABLE_OFFSET, HIGH_MAP, NOT_DIGIT } from './digitTable.js';
4
+
5
+ const CHAR_0 = 48; // '0'.charCodeAt(0)
6
+ const CHAR_9 = 57; // '9'.charCodeAt(0)
7
+ const CHAR_MINUS = 45; // '-'.charCodeAt(0)
8
+
9
+ // Unicode minus/hyphen variants worth normalizing to ASCII '-' in numeric context:
10
+ // U+2212 MINUS SIGN − (mathematically correct minus)
11
+ // U+FF0D FULLWIDTH HYPHEN-MINUS - (Japanese fullwidth context)
12
+ // U+FE63 SMALL HYPHEN-MINUS ﹣ (small form variant)
13
+ //
14
+ // NOT normalized (deliberate):
15
+ // U+2013 EN DASH – (punctuation, not a numeric sign)
16
+ // U+2014 EM DASH — (punctuation)
17
+ // U+2010 HYPHEN ‐ (typographic hyphen)
18
+ //
19
+ // Rationale: only characters a human or locale formatter would plausibly use
20
+ // as a numeric minus sign are normalized. Dashes used for punctuation are left
21
+ // alone to avoid mangling non-numeric strings.
22
+ const MINUS_SET = new Set([0x2212, 0xFF0D, 0xFE63]);
23
+
24
+ /**
25
+ * Normalize all Unicode decimal digit characters in a string to ASCII (0-9),
26
+ * and normalize Unicode minus variants to ASCII '-' (U+002D).
27
+ *
28
+ * Non-digit, non-minus characters are passed through unchanged.
29
+ *
30
+ * Performance design:
31
+ * - Fast path: if the string has no convertible characters, return it unchanged
32
+ * (zero allocation).
33
+ * - BMP digits (0x0660..0xFFFF excl. surrogates): flat Uint8Array lookup (O(1)).
34
+ * - Supplementary plane digits (> 0xFFFF, encoded as surrogate pairs): Map lookup.
35
+ * - Minus variants: checked inline with a small fixed Set.
36
+ *
37
+ * @param {string} str
38
+ * @returns {string}
39
+ */
40
+ function anynum(str) {
41
+ if (typeof str !== 'string') return str;
42
+
43
+ const len = str.length;
44
+ if (len === 0) return str;
45
+
46
+ // Scan for first character needing conversion.
47
+ // If none found, return original string (zero allocation).
48
+ let firstHit = -1;
49
+
50
+ for (let i = 0; i < len; i++) {
51
+ const cc = str.charCodeAt(i);
52
+
53
+ // ASCII digit or ASCII minus — already normalized, skip fast
54
+ if ((cc >= CHAR_0 && cc <= CHAR_9) || cc === CHAR_MINUS) continue;
55
+
56
+ // Below first unicode digit script — check minus variants only
57
+ if (cc < TABLE_OFFSET) {
58
+ if (MINUS_SET.has(cc)) { firstHit = i; break; }
59
+ continue;
60
+ }
61
+
62
+ // Surrogate pairs live in BMP range 0xD800-0xDFFF — check before TABLE
63
+ if (cc >= 0xD800 && cc <= 0xDBFF) {
64
+ if (i + 1 < len) {
65
+ const low = str.charCodeAt(i + 1);
66
+ if (low >= 0xDC00 && low <= 0xDFFF) {
67
+ const cp = 0x10000 + ((cc - 0xD800) << 10) + (low - 0xDC00);
68
+ if (HIGH_MAP.has(cp)) { firstHit = i; break; }
69
+ }
70
+ }
71
+ continue;
72
+ }
73
+
74
+ // BMP non-surrogate: flat table lookup; also check minus variants in this range
75
+ if (TABLE[cc - TABLE_OFFSET] !== NOT_DIGIT || MINUS_SET.has(cc)) {
76
+ firstHit = i;
77
+ break;
78
+ }
79
+ }
80
+
81
+ // Nothing to replace — return original, zero allocation
82
+ if (firstHit === -1) return str;
83
+
84
+ // Build result: copy unchanged prefix, then convert from firstHit onward
85
+ const chars = [];
86
+
87
+ if (firstHit > 0) chars.push(str.slice(0, firstHit));
88
+
89
+ for (let i = firstHit; i < len; i++) {
90
+ const cc = str.charCodeAt(i);
91
+
92
+ // ASCII digit or ASCII minus — pass through
93
+ if ((cc >= CHAR_0 && cc <= CHAR_9) || cc === CHAR_MINUS) {
94
+ chars.push(str[i]);
95
+ continue;
96
+ }
97
+
98
+ // Below TABLE_OFFSET — check minus variants, else pass through
99
+ if (cc < TABLE_OFFSET) {
100
+ chars.push(MINUS_SET.has(cc) ? '-' : str[i]);
101
+ continue;
102
+ }
103
+
104
+ // Surrogate pairs
105
+ if (cc >= 0xD800 && cc <= 0xDBFF) {
106
+ if (i + 1 < len) {
107
+ const low = str.charCodeAt(i + 1);
108
+ if (low >= 0xDC00 && low <= 0xDFFF) {
109
+ const cp = 0x10000 + ((cc - 0xD800) << 10) + (low - 0xDC00);
110
+ const d = HIGH_MAP.get(cp);
111
+ if (d !== undefined) {
112
+ chars.push(String.fromCharCode(d + 48));
113
+ i++; // consume low surrogate
114
+ continue;
115
+ }
116
+ }
117
+ }
118
+ chars.push(str[i]);
119
+ continue;
120
+ }
121
+
122
+ // BMP non-surrogate: flat table lookup + minus variants
123
+ if (MINUS_SET.has(cc)) {
124
+ chars.push('-');
125
+ continue;
126
+ }
127
+ const d = TABLE[cc - TABLE_OFFSET];
128
+ chars.push(d !== NOT_DIGIT ? String.fromCharCode(d + 48) : str[i]);
129
+ }
130
+
131
+ return chars.join('');
132
+ }
133
+
134
+ export { anynum };
135
+ export default anynum;
@@ -0,0 +1,116 @@
1
+ /**
2
+ * Flat lookup table: maps Unicode code point → ASCII digit (0-9).
3
+ * Only decimal digit characters (Unicode category Nd) are included.
4
+ *
5
+ * Strategy: Int32Array of size (maxCodePoint - minCodePoint + 1).
6
+ * Value 0xFF means "not a digit". Value 0-9 is the ASCII digit value.
7
+ * This gives O(1) lookup with no branching, no bisect, no loop.
8
+ *
9
+ * Memory: range is 0x0660 to 0x1FBF0 → ~129,936 entries × 1 byte = ~127 KB.
10
+ * Acceptable for a one-time init; lookup is a single array index.
11
+ */
12
+
13
+ // All known Unicode Nd (decimal digit) script zero code points.
14
+ // Each script has exactly 10 consecutive digits: zero+0 .. zero+9.
15
+ const SCRIPT_ZEROS = [
16
+ // Basic Latin (ASCII) — included for completeness / pass-through
17
+ 0x0030, // 0-9
18
+
19
+ // Arabic scripts
20
+ 0x0660, // Arabic-Indic ٠١٢٣٤٥٦٧٨٩
21
+ 0x06F0, // Extended Arabic-Indic (Urdu/Persian/Sindhi) ۰۱۲۳
22
+
23
+ // Indic scripts
24
+ 0x0966, // Devanagari ०१२३४५६७८९
25
+ 0x09E6, // Bengali ০১২৩৪৫৬৭৮৯
26
+ 0x0A66, // Gurmukhi ੦੧੨੩੪੫੬੭੮੯
27
+ 0x0AE6, // Gujarati ૦૧૨૩૪૫૬૭૮૯
28
+ 0x0B66, // Odia ୦୧୨୩୪୫୬୭୮୯
29
+ 0x0BE6, // Tamil ௦௧௨௩௪௫௬௭௮௯
30
+ 0x0C66, // Telugu ౦౧౨౩౪౫౬౭౮౯
31
+ 0x0CE6, // Kannada ೦೧೨೩೪೫೬೭೮೯
32
+ 0x0D66, // Malayalam ൦൧൨൩൪൫൬൭൮൯
33
+ 0x0DE6, // Sinhala Archaic ෦෧෨෩෪෫෬෭෮෯
34
+
35
+ // Southeast Asian scripts
36
+ 0x0E50, // Thai ๐๑๒๓๔๕๖๗๘๙
37
+ 0x0ED0, // Lao ໐໑໒໓໔໕໖໗໘໙
38
+ 0x0F20, // Tibetan ༠༡༢༣༤༥༦༧༨༩
39
+ 0x1040, // Myanmar ၀၁၂၃၄၅၆၇၈၉
40
+ 0x1090, // Myanmar Shan ႐႑႒႓႔႕႖႗႘႙
41
+ 0x17E0, // Khmer ០១២៣៤៥៦៧៨៩
42
+ 0x1810, // Mongolian ᠐᠑᠒᠓᠔᠕᠖᠗᠘᠙
43
+ 0x1946, // Limbu ᥆᥇᥈᥉᥊᥋᥌᥍᥎᥏
44
+ 0x19D0, // New Tai Lue ᧐᧑᧒᧓᧔᧕᧖᧗᧘᧙
45
+ 0x1A80, // Tai Tham Hora ᪀᪁᪂᪃᪄᪅᪆᪇᪈᪉
46
+ 0x1A90, // Tai Tham Tham ᪐᪑᪒᪓᪔᪕᪖᪗᪘᪙
47
+ 0x1B50, // Balinese ᭐᭑᭒᭓᭔᭕᭖᭗᭘᭙
48
+ 0x1BB0, // Sundanese ᮰᮱᮲᮳᮴᮵᮶᮷᮸᮹
49
+ 0x1C40, // Lepcha ᱀᱁᱂᱃᱄᱅᱆᱇᱈᱉
50
+ 0x1C50, // Ol Chiki ᱐᱑᱒᱓᱔᱕᱖᱗᱘᱙
51
+
52
+ // Fullwidth (CJK context)
53
+ 0xFF10, // Fullwidth 0123456789
54
+
55
+ // Mathematical digit variants (Unicode math block)
56
+ 0x1D7CE, // Mathematical Bold
57
+ 0x1D7D8, // Mathematical Double-Struck
58
+ 0x1D7E2, // Mathematical Sans-Serif
59
+ 0x1D7EC, // Mathematical Sans-Serif Bold
60
+ 0x1D7F6, // Mathematical Monospace
61
+
62
+ // Other scripts
63
+ 0x104A0, // Osmanya 𐒠𐒡𐒢𐒣𐒤𐒥𐒦𐒧𐒨𐒩
64
+ 0x10D30, // Hanifi Rohingya 𐴰𐴱𐴲𐴳𐴴𐴵𐴶𐴷𐴸𐴹
65
+ 0x11066, // Brahmi 𑁦𑁧𑁨𑁩𑁪𑁫𑁬𑁭𑁮𑁯
66
+ 0x110F0, // Sora Sompeng 𑃰𑃱𑃲𑃳𑃴𑃵𑃶𑃷𑃸𑃹
67
+ 0x11136, // Chakma 𑄶𑄷𑄸𑄹𑄺𑄻𑄼𑄽𑄾𑄿
68
+ 0x111D0, // Sharada 𑇐𑇑𑇒𑇓𑇔𑇕𑇖𑇗𑇘𑇙
69
+ 0x112F0, // Khudawadi 𑋰𑋱𑋲𑋳𑋴𑋵𑋶𑋷𑋸𑋹
70
+ 0x11450, // Newa 𑑐𑑑𑑒𑑓𑑔𑑕𑑖𑑗𑑘𑑙
71
+ 0x114D0, // Tirhuta 𑓐𑓑𑓒𑓓𑓔𑓕𑓖𑓗𑓘𑓙
72
+ 0x11650, // Modi 𑙐𑙑𑙒𑙓𑙔𑙕𑙖𑙗𑙘𑙙
73
+ 0x116C0, // Takri 𑛀𑛁𑛂𑛃𑛄𑛅𑛆𑛇𑛈𑛉
74
+ 0x11730, // Ahom 𑜰𑜱𑜲𑜳𑜴𑜵𑜶𑜷𑜸𑜹
75
+ 0x118E0, // Warang Citi 𑣠𑣡𑣢𑣣𑣤𑣥𑣦𑣧𑣨𑣩
76
+ 0x11950, // Dives Akuru 𑥐𑥑𑥒𑥓𑥔𑥕𑥖𑥗𑥘𑥙
77
+ 0x11BF0, // Khitan Small Script 𑯰𑯱𑯲𑯳𑯴𑯵𑯶𑯷𑯸𑯹
78
+ 0x11C50, // Bhaiksuki 𑱐𑱑𑱒𑱓𑱔𑱕𑱖𑱗𑱘𑱙
79
+ 0x11D50, // Masaram Gondi 𑵐𑵑𑵒𑵓𑵔𑵕𑵖𑵗𑵘𑵙
80
+ 0x11DA0, // Gunjala Gondi 𑶠𑶡𑶢𑶣𑶤𑶥𑶦𑶧𑶨𑶩
81
+ 0x11F50, // Kawi 𑽐𑽑𑽒𑽓𑽔𑽕𑽖𑽗𑽘𑽙
82
+ 0x16A60, // Mro 𖩠𖩡𖩢𖩣𖩤𖩥𖩦𖩧𖩨𖩩
83
+ 0x16AC0, // Tangsa 𖫀𖫁𖫂𖫃𖫄𖫅𖫆𖫇𖫈𖫉
84
+ 0x16B50, // Pahawh Hmong 𖭐𖭑𖭒𖭓𖭔𖭕𖭖𖭗𖭘𖭙
85
+ 0x1E140, // Nyiakeng Puachue Hmong 𞅀𞅁𞅂𞅃𞅄𞅅𞅆𞅇𞅈𞅉
86
+ 0x1E2F0, // Wancho 𞋰𞋱𞋲𞋳𞋴𞋵𞋶𞋷𞋸𞋹
87
+ 0x1E4F0, // Nag Mundari 𞓰𞓱𞓲𞓳𞓴𞓵𞓶𞓷𞓸𞓹
88
+ 0x1E950, // Adlam 𞥐𞥑𞥒𞥓𞥔𞥕𞥖𞥗𞥘𞥙
89
+ 0x1FBF0, // Segmented digit symbols 🯰🯱🯲🯳🯴🯵🯶🯷🯸🯹
90
+ ];
91
+
92
+ // Build a sparse Map for scripts above 0xFFFF (surrogate-pair range).
93
+ // These can't go into a flat Uint8Array indexed by code point efficiently.
94
+ const NOT_DIGIT = 0xFF;
95
+ const HIGH_MAP = new Map(); // codePoint → digit value (0-9)
96
+
97
+ const LOW_MAX = 0xFFFF;
98
+ const LOW_MIN = 0x0660; // first non-ASCII digit script
99
+
100
+ // Flat Uint8Array covering 0x0660 .. 0xFFFF
101
+ const TABLE_OFFSET = LOW_MIN;
102
+ const TABLE_SIZE = LOW_MAX - LOW_MIN + 1;
103
+ const TABLE = new Uint8Array(TABLE_SIZE).fill(NOT_DIGIT);
104
+
105
+ for (const zero of SCRIPT_ZEROS) {
106
+ for (let d = 0; d < 10; d++) {
107
+ const cp = zero + d;
108
+ if (cp <= LOW_MAX) {
109
+ TABLE[cp - TABLE_OFFSET] = d;
110
+ } else {
111
+ HIGH_MAP.set(cp, d);
112
+ }
113
+ }
114
+ }
115
+
116
+ export { TABLE, TABLE_OFFSET, HIGH_MAP, NOT_DIGIT };
@@ -0,0 +1,42 @@
1
+ {
2
+ "name": "anynum",
3
+ "version": "1.0.0",
4
+ "description": "Normalize all Unicode decimal digits (Devanagari, Arabic, Thai, etc.) to ASCII numerals. Zero dependencies, performance-first.",
5
+ "type": "module",
6
+ "main": "./anynum.js",
7
+ "files": [
8
+ "anynum.js",
9
+ "digitTable.js",
10
+ "README.md"
11
+ ],
12
+ "scripts": {
13
+ "test": "jasmine tests/anynum.test.js",
14
+ "bench": "node test/bench.js"
15
+ },
16
+ "keywords": [
17
+ "unicode",
18
+ "digits",
19
+ "normalize",
20
+ "devanagari",
21
+ "arabic",
22
+ "hindi",
23
+ "japanese",
24
+ "indic",
25
+ "asian",
26
+ "math",
27
+ "numerals",
28
+ "strnum"
29
+ ],
30
+ "repository": {
31
+ "type": "git",
32
+ "url": "https://github.com/NaturalIntelligence/anynum"
33
+ },
34
+ "author": "Amit Gupta (https://solothought.work/)",
35
+ "license": "MIT",
36
+ "funding": [
37
+ {
38
+ "type": "github",
39
+ "url": "https://github.com/sponsors/NaturalIntelligence"
40
+ }
41
+ ]
42
+ }
@@ -131,3 +131,12 @@ const fileTimesOld = wp.getTimes();
131
131
  // this include timestamps from files not directly watched
132
132
  // key: absolute path, value: timestamp as number
133
133
  ```
134
+
135
+ ## Environment variables
136
+
137
+ - `WATCHPACK_POLLING`: when set, overrides the `poll` option (see above).
138
+ - `WATCHPACK_RETRIES`: number of times to retry `fs.lstat` when it returns
139
+ `EBUSY` (default: `3`). Useful on Windows where anti-virus scanners,
140
+ indexers or editors briefly lock files — without retries watchpack would
141
+ see a spurious `remove` and stop tracking the file. Set to `0` or
142
+ `"false"` to disable retrying.