@wener/common 2.0.1 → 2.0.2

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 (107) hide show
  1. package/lib/cn/ChineseResidentIdNo.js +41 -0
  2. package/lib/cn/ChineseResidentIdNo.mod.js +1 -0
  3. package/lib/cn/{ResidentIdentityCardNumber.test.js → ChineseResidentIdNo.test.js} +7 -6
  4. package/lib/cn/DivisionCode.js +211 -300
  5. package/lib/cn/DivisionCode.mod.js +1 -0
  6. package/lib/cn/DivisionCode.test.js +9 -15
  7. package/lib/cn/{Mod11Checksum.js → Mod11.js} +1 -0
  8. package/lib/cn/{Mod31Checksum.js → Mod31.js} +1 -0
  9. package/lib/cn/UnifiedSocialCreditCode.js +130 -115
  10. package/lib/cn/UnifiedSocialCreditCode.mod.js +1 -0
  11. package/lib/cn/UnifiedSocialCreditCode.test.js +1 -1
  12. package/lib/cn/index.js +1 -3
  13. package/lib/cn/mod.js +6 -0
  14. package/lib/consola/formatLogObject.js +18 -6
  15. package/lib/dayjs/dayjs.js +38 -0
  16. package/lib/dayjs/formatDuration.js +58 -0
  17. package/lib/dayjs/formatDuration.test.js +90 -0
  18. package/lib/dayjs/index.js +3 -0
  19. package/lib/dayjs/parseDuration.js +32 -0
  20. package/lib/decimal/index.js +1 -0
  21. package/lib/decimal/parseDecimal.js +13 -0
  22. package/lib/{resource → foundation}/schema/SexType.js +5 -1
  23. package/lib/foundation/schema/index.js +1 -0
  24. package/lib/foundation/schema/parseSexType.js +18 -0
  25. package/lib/foundation/schema/types.js +5 -0
  26. package/lib/password/Password.js +10 -7
  27. package/lib/resource/ListQuery.js +119 -0
  28. package/lib/resource/index.js +1 -0
  29. package/lib/resource/schema/AnyResourceSchema.js +1 -1
  30. package/lib/resource/schema/index.js +5 -0
  31. package/lib/{resource/schema → schema}/SchemaRegistry.js +12 -5
  32. package/lib/schema/SchemaRegistry.mod.js +2 -0
  33. package/lib/schema/createSchemaData.js +1 -1
  34. package/lib/schema/getSchemaOptions.js +2 -2
  35. package/lib/schema/index.js +1 -0
  36. package/lib/utils/getEstimateProcessTime.js +20 -0
  37. package/lib/utils/index.js +1 -0
  38. package/package.json +23 -14
  39. package/src/cn/ChineseResidentIdNo.mod.ts +7 -0
  40. package/src/cn/ChineseResidentIdNo.test.ts +18 -0
  41. package/src/cn/ChineseResidentIdNo.ts +66 -0
  42. package/src/cn/DivisionCode.mod.ts +7 -0
  43. package/src/cn/DivisionCode.test.ts +3 -13
  44. package/src/cn/DivisionCode.ts +132 -195
  45. package/src/cn/{Mod11Checksum.ts → Mod11.ts} +3 -1
  46. package/src/cn/{Mod31Checksum.ts → Mod31.ts} +2 -0
  47. package/src/cn/UnifiedSocialCreditCode.mod.ts +7 -0
  48. package/src/cn/UnifiedSocialCreditCode.test.ts +2 -2
  49. package/src/cn/UnifiedSocialCreditCode.ts +105 -125
  50. package/src/cn/__snapshots__/ChineseResidentIdNo.test.ts.snap +14 -0
  51. package/src/cn/__snapshots__/UnifiedSocialCreditCode.test.ts.snap +18 -12
  52. package/src/cn/index.ts +1 -3
  53. package/src/cn/mod.ts +3 -0
  54. package/src/consola/formatLogObject.ts +12 -4
  55. package/src/dayjs/dayjs.ts +40 -0
  56. package/src/dayjs/formatDuration.test.ts +14 -0
  57. package/src/dayjs/formatDuration.ts +86 -0
  58. package/src/dayjs/index.ts +3 -0
  59. package/src/dayjs/parseDuration.ts +40 -0
  60. package/src/decimal/index.ts +1 -0
  61. package/src/decimal/parseDecimal.ts +16 -0
  62. package/src/foundation/schema/SexType.ts +21 -0
  63. package/src/foundation/schema/index.ts +1 -0
  64. package/src/foundation/schema/parseSexType.ts +19 -0
  65. package/src/foundation/schema/types.ts +8 -0
  66. package/src/password/Password.ts +2 -2
  67. package/src/resource/ListQuery.ts +53 -0
  68. package/src/resource/index.ts +1 -0
  69. package/src/resource/schema/AnyResourceSchema.ts +1 -1
  70. package/src/resource/schema/index.ts +5 -0
  71. package/src/schema/SchemaRegistry.mod.ts +1 -0
  72. package/src/{resource/schema → schema}/SchemaRegistry.ts +12 -8
  73. package/src/schema/createSchemaData.ts +1 -1
  74. package/src/schema/getSchemaOptions.ts +2 -2
  75. package/src/schema/index.ts +1 -0
  76. package/src/utils/getEstimateProcessTime.ts +36 -0
  77. package/src/utils/index.ts +1 -0
  78. package/lib/cn/ResidentIdentityCardNumber.js +0 -50
  79. package/lib/cn/formatDate.js +0 -13
  80. package/lib/cn/parseSex.js +0 -20
  81. package/lib/search/AdvanceSearch.js +0 -9
  82. package/lib/search/AdvanceSearch.test.js +0 -435
  83. package/lib/search/formatAdvanceSearch.js +0 -78
  84. package/lib/search/index.js +0 -1
  85. package/lib/search/optimizeAdvanceSearch.js +0 -143
  86. package/lib/search/parseAdvanceSearch.js +0 -20
  87. package/lib/search/parser.d.js +0 -1
  88. package/lib/search/parser.js +0 -3088
  89. package/lib/search/types.d.js +0 -1
  90. package/src/cn/ResidentIdentityCardNumber.test.ts +0 -17
  91. package/src/cn/ResidentIdentityCardNumber.ts +0 -96
  92. package/src/cn/__snapshots__/ResidentIdentityCardNumber.test.ts.snap +0 -15
  93. package/src/cn/formatDate.ts +0 -12
  94. package/src/cn/parseSex.ts +0 -13
  95. package/src/resource/schema/SexType.ts +0 -13
  96. package/src/search/AdvanceSearch.test.ts +0 -149
  97. package/src/search/AdvanceSearch.ts +0 -14
  98. package/src/search/Makefile +0 -2
  99. package/src/search/__snapshots__/AdvanceSearch.test.ts.snap +0 -675
  100. package/src/search/formatAdvanceSearch.ts +0 -52
  101. package/src/search/index.ts +0 -1
  102. package/src/search/optimizeAdvanceSearch.ts +0 -77
  103. package/src/search/parseAdvanceSearch.ts +0 -23
  104. package/src/search/parser.d.ts +0 -8
  105. package/src/search/parser.js +0 -2794
  106. package/src/search/parser.peggy +0 -237
  107. package/src/search/types.d.ts +0 -45
@@ -0,0 +1,41 @@
1
+ import { z } from "zod/v4";
2
+ import { SexType, SexTypeSchema } from "../foundation/schema/index.js";
3
+ import { Mod11 } from "./Mod11.js";
4
+ export var ChineseResidentIdNoRegex = RegExp("^(?<division>[1-9]\\d{5})(?<year>(18|19|20)\\d{2})(?<month>0[1-9]|1[0-2])(?<day>0[1-9]|[12]\\d|3[01])(?<sequence>\\d{3})(?<checkDigit>[0-9Xx])$");
5
+ export var ParsedChineseResidentIdNoSchema = z.object({
6
+ raw: z.string().regex(ChineseResidentIdNoRegex, "\u65E0\u6548\u768418\u4F4D\u8EAB\u4EFD\u8BC1\u53F7\u7801\u683C\u5F0F").describe("\u8EAB\u4EFD\u8BC1\u53F7\u7801"),
7
+ addressCode: z.string().length(6).describe("\u5730\u5740\u7801 "),
8
+ birthDate: z.iso.date().describe("\u51FA\u751F\u65E5\u671F"),
9
+ sequence: z.int().max(999).min(0).describe("\u987A\u5E8F\u7801"),
10
+ checkDigit: z.int().min(0).max(10).describe("\u6821\u9A8C\u7801"),
11
+ sex: SexTypeSchema.describe("\u6027\u522B"),
12
+ age: z.number().optional(),
13
+ valid: z.boolean().optional().describe("\u662F\u5426\u6709\u6548")
14
+ }).describe("\u5C45\u6C11\u8EAB\u4EFD\u8BC1\u53F7\u7801\u89E3\u6790\u5185\u5BB9");
15
+ export function parseChineseResidentIdNo(idNo) {
16
+ var reg = ChineseResidentIdNoRegex;
17
+ var match = idNo.match(reg);
18
+ if (!match || !match.groups) {
19
+ return undefined;
20
+ }
21
+ var _match_groups = match.groups, division = _match_groups.division, year = _match_groups.year, month = _match_groups.month, day = _match_groups.day, sequence = _match_groups.sequence, checkDigit = _match_groups.checkDigit;
22
+ var seq = parseInt(sequence, 10);
23
+ return {
24
+ raw: idNo,
25
+ addressCode: division,
26
+ birthDate: "".concat(year, "-").concat(month, "-").concat(day),
27
+ sequence: seq,
28
+ checkDigit: checkDigit.toUpperCase() === "X" ? 10 : parseInt(checkDigit),
29
+ sex: seq % 2 === 0 ? SexType.Male : SexType.Female,
30
+ age: new Date().getFullYear() - parseInt(year, 10),
31
+ valid: Mod11.validate(idNo)
32
+ };
33
+ }
34
+ export function formatChineseResidentIdNo(param) {
35
+ var addressCode = param.addressCode, birthDate = param.birthDate, sequence = param.sequence, checkDigit = param.checkDigit;
36
+ var date = typeof birthDate === "string" ? birthDate.replace(/-/g, "") : "".concat(birthDate.getFullYear()).concat(String(birthDate.getMonth() + 1).padStart(2, "0")).concat(String(birthDate.getDate()).padStart(2, "0"));
37
+ var seq = String(sequence).padStart(3, "0");
38
+ var major = "".concat(addressCode).concat(date).concat(seq);
39
+ var check = typeof checkDigit === "number" ? checkDigit === 10 ? "X" : String(checkDigit) : (checkDigit === null || checkDigit === void 0 ? void 0 : checkDigit.toUpperCase()) || Mod11.compute(major);
40
+ return "".concat(major).concat(check);
41
+ }
@@ -0,0 +1 @@
1
+ export { ChineseResidentIdNoRegex as regex, parseChineseResidentIdNo as parse, formatChineseResidentIdNo as format, ParsedChineseResidentIdNoSchema as ResultSchema } from "./ChineseResidentIdNo.js";
@@ -1,19 +1,20 @@
1
1
  import { describe, expect, it } from "vitest";
2
- import { ResidentIdentityCardNumber } from "./ResidentIdentityCardNumber.js";
3
- describe("ResidentIdentityCardNumber", function () {
2
+ import { ChineseResidentIdNo } from "./mod.js";
3
+ describe("ChineseResidentIdNo", function () {
4
4
  it("should parse", function () {
5
5
  for (var _i = 0, _iter = [
6
6
  "11010519491231002X"
7
7
  ]; _i < _iter.length; _i++) {
8
8
  var a = _iter[_i];
9
- var out = ResidentIdentityCardNumber.parse(a);
10
- expect(ResidentIdentityCardNumber.format(out)).toBe(a);
9
+ var out = ChineseResidentIdNo.parse(a);
10
+ expect(out).toBeTruthy();
11
+ expect(ChineseResidentIdNo.format(out)).toBe(a);
11
12
  expect(out).toMatchSnapshot();
12
13
  }
13
14
  });
14
15
  it("should format with partial", function () {
15
- expect(ResidentIdentityCardNumber.format({
16
- division: "110105",
16
+ expect(ChineseResidentIdNo.format({
17
+ addressCode: "110105",
17
18
  birthDate: new Date("1949-12-31"),
18
19
  sequence: 2
19
20
  })).toBe("11010519491231002X");
@@ -1,218 +1,222 @@
1
- var DivisionCodeLevels = [
1
+ import z from 'zod/v4';
2
+ export var DivisionLevel = Object.freeze({
3
+ __proto__: null,
4
+ Province: 'Province',
5
+ City: 'City',
6
+ County: 'County',
7
+ Town: 'Town',
8
+ Village: 'Village'
9
+ });
10
+ var DivisionLevels = [
11
+ DivisionLevel.Province,
12
+ DivisionLevel.City,
13
+ DivisionLevel.County,
14
+ DivisionLevel.Town,
15
+ DivisionLevel.Village
16
+ ];
17
+ export var DivisionLevelSchema = z.union([
18
+ z.literal(DivisionLevel.Province).describe('省级').meta({
19
+ ordinal: 1
20
+ }),
21
+ z.literal(DivisionLevel.City).describe('地级').meta({
22
+ ordinal: 2
23
+ }),
24
+ z.literal(DivisionLevel.County).describe('县级').meta({
25
+ ordinal: 3
26
+ }),
27
+ z.literal(DivisionLevel.Town).describe('乡镇级').meta({
28
+ ordinal: 4
29
+ }),
30
+ z.literal(DivisionLevel.Village).describe('村级').meta({
31
+ ordinal: 5
32
+ })
33
+ ]).describe('行政区划级别');
34
+ export var ParsedDivisionCodeSchema = z.object({
35
+ code: z.string().describe('行政区划代码'),
36
+ name: z.string().describe('行政区划名称'),
37
+ level: DivisionLevelSchema,
38
+ codes: z.string().array(),
39
+ names: z.string().array(),
40
+ latitude: z.number().optional().describe('纬度'),
41
+ longitude: z.number().optional().describe('经度')
42
+ });
43
+ export var DivisionCodeRegex = RegExp("^(?<province>\\d{2})(?<city>\\d{2})?(?<county>\\d{2})?(?<town>\\d{3})?(?<village>\\d{3})?$");
44
+ var CodeNames = [
45
+ {
46
+ value: '11',
47
+ name: '北京市'
48
+ },
49
+ {
50
+ value: '12',
51
+ name: '天津市'
52
+ },
53
+ {
54
+ value: '13',
55
+ name: '河北省'
56
+ },
57
+ {
58
+ value: '14',
59
+ name: '山西省'
60
+ },
61
+ {
62
+ value: '15',
63
+ name: '内蒙古自治区'
64
+ },
65
+ {
66
+ value: '21',
67
+ name: '辽宁省'
68
+ },
69
+ {
70
+ value: '22',
71
+ name: '吉林省'
72
+ },
73
+ {
74
+ value: '23',
75
+ name: '黑龙江省'
76
+ },
77
+ {
78
+ value: '31',
79
+ name: '上海市'
80
+ },
81
+ {
82
+ value: '32',
83
+ name: '江苏省'
84
+ },
85
+ {
86
+ value: '33',
87
+ name: '浙江省'
88
+ },
89
+ {
90
+ value: '34',
91
+ name: '安徽省'
92
+ },
93
+ {
94
+ value: '35',
95
+ name: '福建省'
96
+ },
97
+ {
98
+ value: '36',
99
+ name: '江西省'
100
+ },
101
+ {
102
+ value: '37',
103
+ name: '山东省'
104
+ },
105
+ {
106
+ value: '41',
107
+ name: '河南省'
108
+ },
109
+ {
110
+ value: '42',
111
+ name: '湖北省'
112
+ },
2
113
  {
3
- level: 1,
4
- code: 'Province',
5
- length: 2,
6
- size: 2,
7
- label: '省'
114
+ value: '43',
115
+ name: '湖南省'
8
116
  },
9
117
  {
10
- level: 2,
11
- code: 'City',
12
- length: 4,
13
- size: 2,
14
- label: '市'
118
+ value: '44',
119
+ name: '广东省'
15
120
  },
16
121
  {
17
- level: 3,
18
- code: 'County',
19
- length: 6,
20
- size: 2,
21
- label: '区县'
122
+ value: '45',
123
+ name: '广西壮族自治区'
22
124
  },
23
125
  {
24
- level: 4,
25
- code: 'Town',
26
- length: 9,
27
- size: 3,
28
- label: '乡镇'
126
+ value: '46',
127
+ name: '海南省'
29
128
  },
30
129
  {
31
- level: 5,
32
- code: 'Village',
33
- length: 12,
34
- size: 3,
35
- label: ''
130
+ value: '50',
131
+ name: '重庆市'
132
+ },
133
+ {
134
+ value: '51',
135
+ name: '四川省'
136
+ },
137
+ {
138
+ value: '52',
139
+ name: '贵州省'
140
+ },
141
+ {
142
+ value: '53',
143
+ name: '云南省'
144
+ },
145
+ {
146
+ value: '54',
147
+ name: '西藏自治区'
148
+ },
149
+ {
150
+ value: '61',
151
+ name: '陕西省'
152
+ },
153
+ {
154
+ value: '62',
155
+ name: '甘肃省'
156
+ },
157
+ {
158
+ value: '63',
159
+ name: '青海省'
160
+ },
161
+ {
162
+ value: '64',
163
+ name: '宁夏回族自治区'
164
+ },
165
+ {
166
+ value: '65',
167
+ name: '新疆维吾尔自治区'
168
+ },
169
+ {
170
+ value: '71',
171
+ name: '台湾省'
172
+ },
173
+ {
174
+ value: '81',
175
+ name: '香港特别行政区'
176
+ },
177
+ {
178
+ value: '82',
179
+ name: '澳门特别行政区'
36
180
  }
37
181
  ];
38
- (function(DivisionCode) {
39
- var DivisionCodeLevel = /*#__PURE__*/ function(DivisionCodeLevel) {
40
- DivisionCodeLevel[DivisionCodeLevel["Province"] = 1] = "Province";
41
- DivisionCodeLevel[DivisionCodeLevel["City"] = 2] = "City";
42
- DivisionCodeLevel[DivisionCodeLevel["County"] = 3] = "County";
43
- DivisionCodeLevel[DivisionCodeLevel["Town"] = 4] = "Town";
44
- DivisionCodeLevel[DivisionCodeLevel["Village"] = 5] = "Village";
45
- return DivisionCodeLevel;
46
- }({});
47
- DivisionCode.levels = DivisionCodeLevels;
48
- DivisionCode.regex = RegExp("^(?<province>\\d{2})(?<city>\\d{2})?(?<county>\\d{2})?(?<town>\\d{3})?(?<village>\\d{3})?$");
49
- var root = [
50
- {
51
- value: '11',
52
- label: '北京市'
53
- },
54
- {
55
- value: '12',
56
- label: '天津市'
57
- },
58
- {
59
- value: '13',
60
- label: '河北省'
61
- },
62
- {
63
- value: '14',
64
- label: '山西省'
65
- },
66
- {
67
- value: '15',
68
- label: '内蒙古自治区'
69
- },
70
- {
71
- value: '21',
72
- label: '辽宁省'
73
- },
74
- {
75
- value: '22',
76
- label: '吉林省'
77
- },
78
- {
79
- value: '23',
80
- label: '黑龙江省'
81
- },
82
- {
83
- value: '31',
84
- label: '上海市'
85
- },
86
- {
87
- value: '32',
88
- label: '江苏省'
89
- },
90
- {
91
- value: '33',
92
- label: '浙江省'
93
- },
94
- {
95
- value: '34',
96
- label: '安徽省'
97
- },
98
- {
99
- value: '35',
100
- label: '福建省'
101
- },
102
- {
103
- value: '36',
104
- label: '江西省'
105
- },
106
- {
107
- value: '37',
108
- label: '山东省'
109
- },
110
- {
111
- value: '41',
112
- label: '河南省'
113
- },
114
- {
115
- value: '42',
116
- label: '湖北省'
117
- },
118
- {
119
- value: '43',
120
- label: '湖南省'
121
- },
122
- {
123
- value: '44',
124
- label: '广东省'
125
- },
126
- {
127
- value: '45',
128
- label: '广西壮族自治区'
129
- },
130
- {
131
- value: '46',
132
- label: '海南省'
133
- },
134
- {
135
- value: '50',
136
- label: '重庆市'
137
- },
138
- {
139
- value: '51',
140
- label: '四川省'
141
- },
142
- {
143
- value: '52',
144
- label: '贵州省'
145
- },
146
- {
147
- value: '53',
148
- label: '云南省'
149
- },
150
- {
151
- value: '54',
152
- label: '西藏自治区'
153
- },
154
- {
155
- value: '61',
156
- label: '陕西省'
157
- },
158
- {
159
- value: '62',
160
- label: '甘肃省'
161
- },
162
- {
163
- value: '63',
164
- label: '青海省'
165
- },
166
- {
167
- value: '64',
168
- label: '宁夏回族自治区'
169
- },
170
- {
171
- value: '65',
172
- label: '新疆维吾尔自治区'
173
- },
174
- {
175
- value: '71',
176
- label: '台湾省'
177
- },
178
- {
179
- value: '81',
180
- label: '香港特别行政区'
181
- },
182
- {
183
- value: '82',
184
- label: '澳门特别行政区'
182
+ export function parseDivisionCode(code) {
183
+ var match = DivisionCodeRegex.exec(code);
184
+ if (!match) {
185
+ return undefined;
186
+ }
187
+ var _match_groups;
188
+ var _ref = (_match_groups = match.groups) !== null && _match_groups !== void 0 ? _match_groups : {}, province = _ref.province, city = _ref.city, county = _ref.county, town = _ref.town, village = _ref.village;
189
+ if (!province) {
190
+ return undefined;
191
+ }
192
+ var codes = [
193
+ province,
194
+ city,
195
+ county,
196
+ town,
197
+ village
198
+ ].filter(Boolean);
199
+ var names = [];
200
+ {
201
+ var name = CodeNames.find(function(cn) {
202
+ return cn.value === province;
203
+ });
204
+ if (name) {
205
+ names.push(name.name);
185
206
  }
186
- ];
187
- function parse(code) {
188
- if (!code) return;
189
- code = String(code);
190
- var match = DivisionCode.regex.exec(code);
191
- if (!match) return;
192
- var _match_groups;
193
- var _ref = (_match_groups = match.groups) !== null && _match_groups !== void 0 ? _match_groups : {}, province = _ref.province, city = _ref.city, county = _ref.county, town = _ref.town, village = _ref.village;
194
- if (!province) return;
195
- var codes = [
196
- province,
197
- city,
198
- county,
199
- town,
200
- village
201
- ].filter(Boolean);
202
- return {
203
- province: province,
204
- city: city,
205
- county: county,
206
- town: town,
207
- village: village,
208
- codes: codes,
209
- level: codes.length
210
- };
211
207
  }
212
- DivisionCode.parse = parse;
213
- function format(param) {
214
- var province = param.province, city = param.city, county = param.county, town = param.town, village = param.village;
215
- var codes = [];
208
+ var level = DivisionLevels[codes.length - 1];
209
+ return {
210
+ code: code,
211
+ name: names.join(''),
212
+ level: level,
213
+ codes: codes,
214
+ names: names
215
+ };
216
+ }
217
+ export function formatDivisionCode(param) {
218
+ var province = param.province, city = param.city, county = param.county, town = param.town, village = param.village, _param_codes = param.codes, codes = _param_codes === void 0 ? [] : _param_codes;
219
+ if (!codes.length) {
216
220
  for(var i = 0; i < [
217
221
  province,
218
222
  city,
@@ -230,105 +234,12 @@ var DivisionCodeLevels = [
230
234
  if (x === undefined || x === null || x === '') {
231
235
  break;
232
236
  }
233
- var len = DivisionCode.levels[i].size;
234
- codes.push(String(x).padStart(len, '0').slice(0, len));
235
- }
236
- return codes.join('');
237
- }
238
- DivisionCode.format = format;
239
- // export function random(level: DivisionCodeLevel = 'County'): string {
240
- // const l = DivisionCodeLevels.find((v) => v.code === level) || DivisionCodeLevels[2];
241
- // const l1 = randomPick(provinces);
242
- // if (l.level === 1) {
243
- // return String(l1[0]);
244
- // }
245
- // return l1 + String(Math.floor(Math.random() * parseFloat(`1e${l.length - 2}`) - 1));
246
- // }
247
- })(DivisionCode || (DivisionCode = {}));
248
- // export type DivisionCodeLevel = 'Village' | 'Town' | 'County' | 'City' | 'Province';
249
- // export interface ParsedDivisionCode {
250
- // level: DivisionCodeLevel;
251
- // code: string;
252
- // name?: string;
253
- // fullName?: string;
254
- // names: string[];
255
- // // 村级(村委会、居委会)
256
- // // 12 位
257
- // village?: CodeName;
258
- // // 乡级(乡镇、街道)
259
- // // 9 位
260
- // town?: CodeName;
261
- // // 县级(区县)
262
- // // 6 位 - 常用 - 2985 个
263
- // county?: CodeName;
264
- // // 地级(城市)
265
- // // 4 位 - 343 个
266
- // city?: CodeName;
267
- // // 省级(省份、直辖市、自治区)
268
- // // 2 位 - 32 个
269
- // province: CodeName;
270
- //
271
- // children?: Array<{ code: string; name?: string }>;
272
- // }
273
- // export interface CodeName {
274
- // code: string;
275
- // name: string;
276
- // }
277
- // export function getSimpleProvinceLabel(value: string) {
278
- // if (!value) {
279
- // return;
280
- // }
281
- // let label = value;
282
- // if (/[0-9]/.test(label)) {
283
- // label = label.slice(0, 2);
284
- // label = options.find((v) => v.value === label)?.label || label;
285
- // }
286
- // return label.replace(/省|市|(回族|维吾尔|壮族)?自治区|特别行政区$/, '');
287
- // }
288
- export function randomPick(s) {
289
- return s[Math.floor(Math.random() * s.length)];
290
- }
291
- function lookup(opts) {
292
- var values = opts.values, root = opts.root;
293
- var found = [];
294
- var currentLevel = root;
295
- var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
296
- try {
297
- var _loop = function() {
298
- var v = _step.value;
299
- var node = currentLevel.find(function(n) {
300
- return n.value === v;
301
- });
302
- if (!node) {
303
- return "break";
304
- }
305
- found.push(node);
306
- if (node.children) {
307
- currentLevel = node.children;
308
- } else {
309
- return "break";
310
- }
311
- };
312
- for(var _iterator = values[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
313
- var _ret = _loop();
314
- if (_ret === "break") break;
315
- }
316
- } catch (err) {
317
- _didIteratorError = true;
318
- _iteratorError = err;
319
- } finally{
320
- try {
321
- if (!_iteratorNormalCompletion && _iterator.return != null) {
322
- _iterator.return();
323
- }
324
- } finally{
325
- if (_didIteratorError) {
326
- throw _iteratorError;
237
+ var size = 2;
238
+ if (i > 2) {
239
+ size = 3;
327
240
  }
241
+ codes.push(String(x).padStart(size, '0').slice(0, size));
328
242
  }
329
243
  }
330
- return {
331
- found: found
332
- };
244
+ return codes.join('');
333
245
  }
334
- export var DivisionCode;
@@ -0,0 +1 @@
1
+ export { DivisionCodeRegex as regex, ParsedDivisionCodeSchema as ResultSchema, parseDivisionCode as parse, formatDivisionCode as format } from "./DivisionCode.js";
@@ -60,18 +60,13 @@ function _unsupported_iterable_to_array(o, minLen) {
60
60
  return _array_like_to_array(o, minLen);
61
61
  }
62
62
  import { describe, expect, it } from "vitest";
63
- import { DivisionCode } from "./DivisionCode.js";
63
+ import { DivisionCode } from "./mod.js";
64
64
  describe("DivisionCode", function () {
65
65
  it("should parse", function () {
66
66
  for (var _i = 0, _iter = [
67
67
  [
68
68
  "441900003001",
69
69
  {
70
- province: "44",
71
- city: "19",
72
- county: "00",
73
- town: "003",
74
- village: "001",
75
70
  codes: [
76
71
  "44",
77
72
  "19",
@@ -84,11 +79,6 @@ describe("DivisionCode", function () {
84
79
  [
85
80
  441900003001,
86
81
  {
87
- province: "44",
88
- city: "19",
89
- county: "00",
90
- town: "003",
91
- village: "001",
92
82
  codes: [
93
83
  "44",
94
84
  "19",
@@ -101,15 +91,19 @@ describe("DivisionCode", function () {
101
91
  [
102
92
  441900,
103
93
  {
104
- province: "44",
105
- city: "19",
106
- county: "00"
94
+ codes: [
95
+ "44",
96
+ "19",
97
+ "00"
98
+ ]
107
99
  }
108
100
  ],
109
101
  [
110
102
  "31",
111
103
  {
112
- province: "31"
104
+ codes: [
105
+ "31"
106
+ ]
113
107
  }
114
108
  ],
115
109
  [
@@ -83,3 +83,4 @@ export var Mod11Checksum = /*#__PURE__*/ function() {
83
83
  ]);
84
84
  return Mod11Checksum;
85
85
  }();
86
+ export var Mod11 = new Mod11Checksum();
@@ -95,3 +95,4 @@ export var Mod31Checksum = /*#__PURE__*/ function() {
95
95
  ]);
96
96
  return Mod31Checksum;
97
97
  }();
98
+ export var Mod31 = new Mod31Checksum();