oak-domain 3.0.4 → 4.0.0

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 (202) hide show
  1. package/lib/actions/action.d.ts +16 -16
  2. package/lib/actions/action.js +17 -17
  3. package/lib/actions/relation.d.ts +5 -5
  4. package/lib/actions/relation.js +25 -25
  5. package/lib/base-app-domain/ActionAuth/Schema.d.ts +186 -186
  6. package/lib/base-app-domain/ActionAuth/Storage.js +39 -39
  7. package/lib/base-app-domain/ActionDefDict.d.ts +8 -8
  8. package/lib/base-app-domain/ActionDefDict.js +9 -9
  9. package/lib/base-app-domain/EntityDict.d.ts +28 -28
  10. package/lib/base-app-domain/I18n/Schema.d.ts +129 -129
  11. package/lib/base-app-domain/I18n/Schema.js +2 -2
  12. package/lib/base-app-domain/I18n/Storage.d.ts +3 -3
  13. package/lib/base-app-domain/I18n/Storage.js +59 -59
  14. package/lib/base-app-domain/Modi/Action.d.ts +10 -10
  15. package/lib/base-app-domain/Modi/Action.js +14 -14
  16. package/lib/base-app-domain/Modi/Schema.d.ts +136 -136
  17. package/lib/base-app-domain/Modi/Storage.js +63 -63
  18. package/lib/base-app-domain/ModiEntity/Schema.d.ts +384 -384
  19. package/lib/base-app-domain/ModiEntity/Storage.js +30 -30
  20. package/lib/base-app-domain/Oper/Schema.d.ts +153 -153
  21. package/lib/base-app-domain/Oper/Storage.js +38 -38
  22. package/lib/base-app-domain/OperEntity/Schema.d.ts +373 -373
  23. package/lib/base-app-domain/OperEntity/Storage.js +30 -30
  24. package/lib/base-app-domain/Path/Schema.d.ts +149 -149
  25. package/lib/base-app-domain/Path/Schema.js +2 -2
  26. package/lib/base-app-domain/Path/Storage.d.ts +3 -3
  27. package/lib/base-app-domain/Path/Storage.js +54 -54
  28. package/lib/base-app-domain/Relation/Schema.d.ts +188 -188
  29. package/lib/base-app-domain/Relation/Storage.js +54 -54
  30. package/lib/base-app-domain/Relation.d.ts +2 -2
  31. package/lib/base-app-domain/Relation.js +4 -4
  32. package/lib/base-app-domain/RelationAuth/Schema.d.ts +214 -214
  33. package/lib/base-app-domain/RelationAuth/Storage.js +44 -44
  34. package/lib/base-app-domain/Storage.js +31 -31
  35. package/lib/base-app-domain/User/Action.d.ts +10 -10
  36. package/lib/base-app-domain/User/Action.js +12 -12
  37. package/lib/base-app-domain/User/Schema.d.ts +210 -210
  38. package/lib/base-app-domain/User/Storage.js +33 -33
  39. package/lib/base-app-domain/UserEntityClaim/Schema.d.ts +264 -264
  40. package/lib/base-app-domain/UserEntityClaim/Schema.js +2 -2
  41. package/lib/base-app-domain/UserEntityClaim/Storage.d.ts +3 -3
  42. package/lib/base-app-domain/UserEntityClaim/Storage.js +37 -37
  43. package/lib/base-app-domain/UserEntityGrant/Action.d.ts +5 -5
  44. package/lib/base-app-domain/UserEntityGrant/Action.js +5 -5
  45. package/lib/base-app-domain/UserEntityGrant/Schema.d.ts +131 -131
  46. package/lib/base-app-domain/UserEntityGrant/Storage.js +25 -25
  47. package/lib/base-app-domain/UserRelation/Schema.d.ts +208 -208
  48. package/lib/base-app-domain/UserRelation/Storage.js +56 -56
  49. package/lib/base-app-domain/_SubQuery.d.ts +142 -142
  50. package/lib/base-app-domain/index.d.ts +4 -4
  51. package/lib/base-app-domain/index.js +7 -7
  52. package/lib/checkers/index.d.ts +5 -5
  53. package/lib/checkers/index.js +13 -13
  54. package/lib/compiler/entities.d.ts +2 -0
  55. package/lib/compiler/entities.js +7 -0
  56. package/lib/compiler/env.d.ts +13 -14
  57. package/lib/compiler/env.js +45 -48
  58. package/lib/compiler/localeBuilder.d.ts +27 -22
  59. package/lib/compiler/localeBuilder.js +184 -173
  60. package/lib/compiler/schemalBuilder.d.ts +27 -27
  61. package/lib/compiler/schemalBuilder.js +3569 -3569
  62. package/lib/entities/ActionAuth.d.ts +10 -10
  63. package/lib/entities/ActionAuth.js +31 -31
  64. package/lib/entities/I18n.d.ts +9 -9
  65. package/lib/entities/I18n.js +36 -37
  66. package/lib/entities/Modi.js +49 -49
  67. package/lib/entities/ModiEntity.js +18 -18
  68. package/lib/entities/Oper.js +21 -21
  69. package/lib/entities/OperEntity.js +18 -18
  70. package/lib/entities/Path.d.ts +8 -8
  71. package/lib/entities/Path.js +35 -35
  72. package/lib/entities/Relation.d.ts +8 -8
  73. package/lib/entities/Relation.js +35 -35
  74. package/lib/entities/RelationAuth.d.ts +8 -8
  75. package/lib/entities/RelationAuth.js +34 -34
  76. package/lib/entities/User.js +31 -31
  77. package/lib/entities/UserEntityClaim.d.ts +13 -13
  78. package/lib/entities/UserEntityClaim.js +17 -17
  79. package/lib/entities/UserEntityGrant.d.ts +9 -9
  80. package/lib/entities/UserEntityGrant.js +15 -15
  81. package/lib/entities/UserRelation.d.ts +10 -10
  82. package/lib/entities/UserRelation.js +38 -38
  83. package/lib/index.d.ts +23 -23
  84. package/lib/index.js +37 -37
  85. package/lib/store/AsyncRowStore.d.ts +60 -59
  86. package/lib/store/AsyncRowStore.js +118 -116
  87. package/lib/store/CascadeStore.d.ts +104 -103
  88. package/lib/store/CascadeStore.js +1688 -1662
  89. package/lib/store/RelationAuth.d.ts +96 -96
  90. package/lib/store/RelationAuth.js +1336 -1334
  91. package/lib/store/SyncRowStore.d.ts +29 -29
  92. package/lib/store/SyncRowStore.js +50 -50
  93. package/lib/store/TriggerExecutor.d.ts +38 -38
  94. package/lib/store/TriggerExecutor.js +459 -459
  95. package/lib/store/actionAuth.d.ts +4 -4
  96. package/lib/store/actionAuth.js +25 -25
  97. package/lib/store/actionDef.d.ts +10 -10
  98. package/lib/store/actionDef.js +278 -278
  99. package/lib/store/checker.d.ts +26 -26
  100. package/lib/store/checker.js +487 -487
  101. package/lib/store/filter.d.ts +85 -122
  102. package/lib/store/filter.js +1651 -1623
  103. package/lib/store/modi.d.ts +13 -13
  104. package/lib/store/modi.js +254 -254
  105. package/lib/store/relation.d.ts +12 -12
  106. package/lib/store/relation.js +67 -67
  107. package/lib/timers/oper.d.ts +18 -18
  108. package/lib/timers/oper.js +57 -57
  109. package/lib/timers/vaccum.d.ts +20 -20
  110. package/lib/timers/vaccum.js +111 -111
  111. package/lib/triggers/index.d.ts +5 -5
  112. package/lib/triggers/index.js +8 -8
  113. package/lib/types/Action.d.ts +20 -20
  114. package/lib/types/AppLoader.d.ts +17 -17
  115. package/lib/types/AppLoader.js +10 -10
  116. package/lib/types/Auth.d.ts +70 -70
  117. package/lib/types/Cluster.d.ts +5 -0
  118. package/lib/types/Cluster.js +2 -0
  119. package/lib/types/Connector.d.ts +38 -38
  120. package/lib/types/Connector.js +2 -2
  121. package/lib/types/DataType.d.ts +25 -25
  122. package/lib/types/DataType.js +6 -6
  123. package/lib/types/Demand.d.ts +88 -88
  124. package/lib/types/Demand.js +10 -10
  125. package/lib/types/Endpoint.d.ts +11 -11
  126. package/lib/types/Entity.d.ts +203 -202
  127. package/lib/types/Entity.js +15 -15
  128. package/lib/types/EntityDesc.d.ts +9 -9
  129. package/lib/types/EntityDesc.js +2 -2
  130. package/lib/types/Environment.d.ts +88 -57
  131. package/lib/types/Environment.js +2 -2
  132. package/lib/types/Exception.d.ts +147 -147
  133. package/lib/types/Exception.js +406 -406
  134. package/lib/types/Expression.d.ts +163 -163
  135. package/lib/types/Expression.js +397 -394
  136. package/lib/types/Geo.d.ts +18 -18
  137. package/lib/types/Locale.d.ts +25 -25
  138. package/lib/types/Logger.d.ts +6 -6
  139. package/lib/types/Polyfill.d.ts +24 -24
  140. package/lib/types/Port.d.ts +18 -18
  141. package/lib/types/RowStore.d.ts +18 -18
  142. package/lib/types/RowStore.js +33 -33
  143. package/lib/types/Storage.d.ts +58 -58
  144. package/lib/types/Style.d.ts +11 -11
  145. package/lib/types/Timer.d.ts +14 -14
  146. package/lib/types/Trigger.d.ts +124 -124
  147. package/lib/types/Trigger.js +58 -58
  148. package/lib/types/Watcher.d.ts +19 -19
  149. package/lib/types/index.d.ts +26 -25
  150. package/lib/types/index.js +29 -28
  151. package/lib/types/schema/DataTypes.d.ts +34 -34
  152. package/lib/utils/SimpleConnector.d.ts +64 -64
  153. package/lib/utils/SimpleConnector.js +206 -206
  154. package/lib/utils/assert.d.ts +5 -5
  155. package/lib/utils/assert.js +9 -9
  156. package/lib/utils/concurrent.d.ts +15 -15
  157. package/lib/utils/concurrent.js +63 -63
  158. package/lib/utils/date.js +18 -18
  159. package/lib/utils/{url.d.ts → domain.d.ts} +1 -1
  160. package/lib/utils/{url.js → domain.js} +11 -13
  161. package/lib/utils/geo.js +24 -24
  162. package/lib/utils/lodash.d.ts +24 -22
  163. package/lib/utils/lodash.js +46 -42
  164. package/lib/utils/mask.js +34 -34
  165. package/lib/utils/money.d.ts +6 -6
  166. package/lib/utils/money.js +51 -51
  167. package/lib/utils/projection.d.ts +4 -4
  168. package/lib/utils/projection.js +15 -15
  169. package/lib/utils/random/random.js +19 -19
  170. package/lib/utils/random/random.mp.js +14 -14
  171. package/lib/utils/random/random.native.d.ts +1 -0
  172. package/lib/utils/random/random.native.js +14 -0
  173. package/lib/utils/random/random.web.js +11 -11
  174. package/lib/utils/string.d.ts +28 -28
  175. package/lib/utils/string.js +69 -69
  176. package/lib/utils/url/index.d.ts +7 -0
  177. package/lib/utils/url/index.js +8 -0
  178. package/lib/utils/url/index.mp.d.ts +4 -0
  179. package/lib/utils/url/index.mp.js +8 -0
  180. package/lib/utils/url/index.native.d.ts +12 -0
  181. package/lib/utils/url/index.native.js +7 -0
  182. package/lib/utils/url/index.web.d.ts +12 -0
  183. package/lib/utils/url/index.web.js +7 -0
  184. package/lib/utils/uuid.d.ts +17 -17
  185. package/lib/utils/uuid.js +218 -218
  186. package/lib/utils/validator.d.ts +26 -26
  187. package/lib/utils/validator.js +131 -131
  188. package/lib/utils/version.js +21 -21
  189. package/package.json +51 -49
  190. package/src/entities/ActionAuth.ts +41 -41
  191. package/src/entities/I18n.ts +45 -46
  192. package/src/entities/Modi.ts +69 -69
  193. package/src/entities/ModiEntity.ts +26 -26
  194. package/src/entities/Oper.ts +32 -32
  195. package/src/entities/OperEntity.ts +27 -27
  196. package/src/entities/Path.ts +43 -43
  197. package/src/entities/Relation.ts +43 -43
  198. package/src/entities/RelationAuth.ts +44 -44
  199. package/src/entities/User.ts +48 -48
  200. package/src/entities/UserEntityClaim.ts +29 -29
  201. package/src/entities/UserEntityGrant.ts +24 -24
  202. package/src/entities/UserRelation.ts +50 -50
package/lib/utils/uuid.js CHANGED
@@ -1,218 +1,218 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.formUuid = exports.generateNewId = exports.setGenerateIdOption = exports.produceIds = exports.generateNewIdAsync = exports.expandUuidTo36Bytes = exports.shrinkUuidTo32Bytes = exports.sequentialUuid = void 0;
4
- const uuid_1 = require("uuid");
5
- const random_1 = require("./random/random");
6
- let _nodeId;
7
- let _clockseq;
8
- // Previous uuid creation time
9
- let _lastMSecs = 0;
10
- let _lastNSecs = 0;
11
- // 根据uuid v1改的,产生按时间顺序uuid的函数(更优于底层数据库的插入行为)
12
- // **`v1()` - Generate time-based UUID**
13
- //
14
- // Inspired by https://github.com/LiosK/UUID.js
15
- // and http://docs.python.org/library/uuid.html
16
- const byteToHex = [];
17
- for (let i = 0; i < 256; ++i) {
18
- byteToHex.push((i + 0x100).toString(16).slice(1));
19
- }
20
- function unsafeStringify(arr, offset = 0) {
21
- // Note: Be careful editing this code! It's been tuned for performance
22
- // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434
23
- return (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase();
24
- }
25
- // See https://github.com/uuidjs/uuid for API details
26
- function sequentialUuid({ random }) {
27
- let i = 0;
28
- const b = new Array(16);
29
- let node = _nodeId;
30
- let clockseq = _clockseq;
31
- // node and clockseq need to be initialized to random values if they're not
32
- // specified. We do this lazily to minimize issues related to insufficient
33
- // system entropy. See #189
34
- if (node == null || clockseq == null) {
35
- const seedBytes = random;
36
- if (node == null) {
37
- // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)
38
- node = _nodeId = [
39
- seedBytes[0] | 0x01,
40
- seedBytes[1],
41
- seedBytes[2],
42
- seedBytes[3],
43
- seedBytes[4],
44
- seedBytes[5],
45
- ];
46
- }
47
- if (clockseq == null) {
48
- // Per 4.2.2, randomize (14 bit) clockseq
49
- clockseq = _clockseq = ((seedBytes[6] << 8) | seedBytes[7]) & 0x3fff;
50
- }
51
- }
52
- // UUID timestamps are 100 nano-second units since the Gregorian epoch,
53
- // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so
54
- // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'
55
- // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.
56
- let msecs = Date.now();
57
- // Per 4.2.1.2, use count of uuid's generated during the current clock
58
- // cycle to simulate higher resolution clock
59
- let nsecs = _lastNSecs + 1;
60
- // Time since last uuid creation (in msecs)
61
- const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000;
62
- // Per 4.2.1.2, Bump clockseq on clock regression
63
- if (dt < 0) {
64
- clockseq = (clockseq + 1) & 0x3fff;
65
- }
66
- // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new
67
- // time interval
68
- if ((dt < 0 || msecs > _lastMSecs)) {
69
- nsecs = 0;
70
- }
71
- // Per 4.2.1.2 Throw error if too many uuids are requested
72
- if (nsecs >= 10000) {
73
- throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");
74
- }
75
- _lastMSecs = msecs;
76
- _lastNSecs = nsecs;
77
- _clockseq = clockseq;
78
- // Per 4.1.4 - Convert from unix epoch to Gregorian epoch
79
- msecs += 12219292800000;
80
- // `time_high_and_version`
81
- const tmh = ((msecs / 0x100000000) * 10000) & 0xfffffff;
82
- b[i++] = ((tmh >>> 24) & 0xf) | 0x10; // include version
83
- b[i++] = (tmh >>> 16) & 0xff;
84
- // `time_mid`
85
- b[i++] = (tmh >>> 8) & 0xff;
86
- b[i++] = tmh & 0xff;
87
- // `time_low`
88
- const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;
89
- b[i++] = (tl >>> 24) & 0xff;
90
- b[i++] = (tl >>> 16) & 0xff;
91
- b[i++] = (tl >>> 8) & 0xff;
92
- b[i++] = tl & 0xff;
93
- // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)
94
- b[i++] = (clockseq >>> 8) | 0x80;
95
- // `clock_seq_low`
96
- b[i++] = clockseq & 0xff;
97
- // `node`
98
- for (let n = 0; n < 6; ++n) {
99
- b[i + n] = node[n];
100
- }
101
- return unsafeStringify(b);
102
- }
103
- exports.sequentialUuid = sequentialUuid;
104
- function shrinkUuidTo32Bytes(uuid) {
105
- return uuid.replace(/\-/g, '');
106
- }
107
- exports.shrinkUuidTo32Bytes = shrinkUuidTo32Bytes;
108
- function expandUuidTo36Bytes(uuidShrinked) {
109
- return `${uuidShrinked.slice(0, 8)}-${uuidShrinked.slice(8, 12)}-${uuidShrinked.slice(12, 16)}-${uuidShrinked.slice(16, 20)}-${uuidShrinked.slice(20)}`;
110
- }
111
- exports.expandUuidTo36Bytes = expandUuidTo36Bytes;
112
- // 直接生成uuid的接口,为了适配各种环境,写成异步
113
- async function generateNewIdAsync(option) {
114
- const option2 = option || ID_OPTION;
115
- if (option2?.shuffle || process.env.NODE_ENV === 'development') {
116
- return (0, uuid_1.v4)({ random: await (0, random_1.getRandomValues)(16) });
117
- }
118
- return sequentialUuid({ random: await (0, random_1.getRandomValues)(16) });
119
- }
120
- exports.generateNewIdAsync = generateNewIdAsync;
121
- // 实现同步的id缓存接口,以便于前台使用
122
- const ID_BUFFER = [];
123
- let ID_OPTION = {};
124
- async function produceIds() {
125
- let iter = 0;
126
- for (; iter < 1024; iter++) {
127
- ID_BUFFER.push(await generateNewIdAsync());
128
- }
129
- }
130
- exports.produceIds = produceIds;
131
- produceIds();
132
- function setGenerateIdOption(option) {
133
- ID_OPTION = option;
134
- ID_BUFFER.splice(0, ID_BUFFER.length);
135
- return produceIds();
136
- }
137
- exports.setGenerateIdOption = setGenerateIdOption;
138
- function generateNewId() {
139
- if (ID_BUFFER.length > 0) {
140
- const id = ID_BUFFER.pop();
141
- if (ID_BUFFER.length < 128) {
142
- produceIds();
143
- }
144
- return id;
145
- }
146
- else {
147
- // 如果没来的及填满缓冲池,这里用一个简单的算法产生同步id(在小程序环境下跑出来过)
148
- const random = new Uint8Array(16);
149
- let iter = 0;
150
- do {
151
- random[iter] = Math.ceil(Math.random() * 1000) % 128;
152
- } while (++iter < 16);
153
- if (ID_OPTION?.shuffle || process.env.NODE_ENV === 'development') {
154
- return (0, uuid_1.v4)({ random });
155
- }
156
- return sequentialUuid({ random });
157
- }
158
- }
159
- exports.generateNewId = generateNewId;
160
- function stringToArrayBuffer(str) {
161
- var bytes = new Array();
162
- var len, c;
163
- len = str.length;
164
- for (var i = 0; i < len; i++) {
165
- c = str.charCodeAt(i);
166
- if (c >= 0x010000 && c <= 0x10FFFF) {
167
- bytes.push(((c >> 18) & 0x07) | 0xF0);
168
- bytes.push(((c >> 12) & 0x3F) | 0x80);
169
- bytes.push(((c >> 6) & 0x3F) | 0x80);
170
- bytes.push((c & 0x3F) | 0x80);
171
- }
172
- else if (c >= 0x000800 && c <= 0x00FFFF) {
173
- bytes.push(((c >> 12) & 0x0F) | 0xE0);
174
- bytes.push(((c >> 6) & 0x3F) | 0x80);
175
- bytes.push((c & 0x3F) | 0x80);
176
- }
177
- else if (c >= 0x000080 && c <= 0x0007FF) {
178
- bytes.push(((c >> 6) & 0x1F) | 0xC0);
179
- bytes.push((c & 0x3F) | 0x80);
180
- }
181
- else {
182
- bytes.push(c & 0xFF);
183
- }
184
- }
185
- var array = new Int8Array(bytes.length);
186
- for (var i = 0; i <= bytes.length; i++) {
187
- array[i] = bytes[i];
188
- }
189
- return array;
190
- }
191
- /**
192
- * 在一些特殊场景下根据数据生成指定的uuid,长度不能超过36byte
193
- * @param: input: 输入的数据数组,应保证唯一性
194
- */
195
- function formUuid(...input) {
196
- let uuid = input.join('-');
197
- if (uuid.length <= 36) {
198
- return uuid;
199
- }
200
- const buffer = stringToArrayBuffer(uuid);
201
- const b = new Array(16);
202
- let i = 0;
203
- do {
204
- b[i++] = 0;
205
- } while (i < 16);
206
- i = 0;
207
- while (i < buffer.length) {
208
- b[i % 16] += buffer[i];
209
- i++;
210
- }
211
- i = 0;
212
- do {
213
- b[i] = b[i] % 256;
214
- i++;
215
- } while (i < 16);
216
- return unsafeStringify(b);
217
- }
218
- exports.formUuid = formUuid;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.formUuid = exports.generateNewId = exports.setGenerateIdOption = exports.produceIds = exports.generateNewIdAsync = exports.expandUuidTo36Bytes = exports.shrinkUuidTo32Bytes = exports.sequentialUuid = void 0;
4
+ const uuid_1 = require("uuid");
5
+ const random_1 = require("./random/random");
6
+ let _nodeId;
7
+ let _clockseq;
8
+ // Previous uuid creation time
9
+ let _lastMSecs = 0;
10
+ let _lastNSecs = 0;
11
+ // 根据uuid v1改的,产生按时间顺序uuid的函数(更优于底层数据库的插入行为)
12
+ // **`v1()` - Generate time-based UUID**
13
+ //
14
+ // Inspired by https://github.com/LiosK/UUID.js
15
+ // and http://docs.python.org/library/uuid.html
16
+ const byteToHex = [];
17
+ for (let i = 0; i < 256; ++i) {
18
+ byteToHex.push((i + 0x100).toString(16).slice(1));
19
+ }
20
+ function unsafeStringify(arr, offset = 0) {
21
+ // Note: Be careful editing this code! It's been tuned for performance
22
+ // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434
23
+ return (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase();
24
+ }
25
+ // See https://github.com/uuidjs/uuid for API details
26
+ function sequentialUuid({ random }) {
27
+ let i = 0;
28
+ const b = new Array(16);
29
+ let node = _nodeId;
30
+ let clockseq = _clockseq;
31
+ // node and clockseq need to be initialized to random values if they're not
32
+ // specified. We do this lazily to minimize issues related to insufficient
33
+ // system entropy. See #189
34
+ if (node == null || clockseq == null) {
35
+ const seedBytes = random;
36
+ if (node == null) {
37
+ // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)
38
+ node = _nodeId = [
39
+ seedBytes[0] | 0x01,
40
+ seedBytes[1],
41
+ seedBytes[2],
42
+ seedBytes[3],
43
+ seedBytes[4],
44
+ seedBytes[5],
45
+ ];
46
+ }
47
+ if (clockseq == null) {
48
+ // Per 4.2.2, randomize (14 bit) clockseq
49
+ clockseq = _clockseq = ((seedBytes[6] << 8) | seedBytes[7]) & 0x3fff;
50
+ }
51
+ }
52
+ // UUID timestamps are 100 nano-second units since the Gregorian epoch,
53
+ // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so
54
+ // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'
55
+ // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.
56
+ let msecs = Date.now();
57
+ // Per 4.2.1.2, use count of uuid's generated during the current clock
58
+ // cycle to simulate higher resolution clock
59
+ let nsecs = _lastNSecs + 1;
60
+ // Time since last uuid creation (in msecs)
61
+ const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000;
62
+ // Per 4.2.1.2, Bump clockseq on clock regression
63
+ if (dt < 0) {
64
+ clockseq = (clockseq + 1) & 0x3fff;
65
+ }
66
+ // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new
67
+ // time interval
68
+ if ((dt < 0 || msecs > _lastMSecs)) {
69
+ nsecs = 0;
70
+ }
71
+ // Per 4.2.1.2 Throw error if too many uuids are requested
72
+ if (nsecs >= 10000) {
73
+ throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");
74
+ }
75
+ _lastMSecs = msecs;
76
+ _lastNSecs = nsecs;
77
+ _clockseq = clockseq;
78
+ // Per 4.1.4 - Convert from unix epoch to Gregorian epoch
79
+ msecs += 12219292800000;
80
+ // `time_high_and_version`
81
+ const tmh = ((msecs / 0x100000000) * 10000) & 0xfffffff;
82
+ b[i++] = ((tmh >>> 24) & 0xf) | 0x10; // include version
83
+ b[i++] = (tmh >>> 16) & 0xff;
84
+ // `time_mid`
85
+ b[i++] = (tmh >>> 8) & 0xff;
86
+ b[i++] = tmh & 0xff;
87
+ // `time_low`
88
+ const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;
89
+ b[i++] = (tl >>> 24) & 0xff;
90
+ b[i++] = (tl >>> 16) & 0xff;
91
+ b[i++] = (tl >>> 8) & 0xff;
92
+ b[i++] = tl & 0xff;
93
+ // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)
94
+ b[i++] = (clockseq >>> 8) | 0x80;
95
+ // `clock_seq_low`
96
+ b[i++] = clockseq & 0xff;
97
+ // `node`
98
+ for (let n = 0; n < 6; ++n) {
99
+ b[i + n] = node[n];
100
+ }
101
+ return unsafeStringify(b);
102
+ }
103
+ exports.sequentialUuid = sequentialUuid;
104
+ function shrinkUuidTo32Bytes(uuid) {
105
+ return uuid.replace(/\-/g, '');
106
+ }
107
+ exports.shrinkUuidTo32Bytes = shrinkUuidTo32Bytes;
108
+ function expandUuidTo36Bytes(uuidShrinked) {
109
+ return `${uuidShrinked.slice(0, 8)}-${uuidShrinked.slice(8, 12)}-${uuidShrinked.slice(12, 16)}-${uuidShrinked.slice(16, 20)}-${uuidShrinked.slice(20)}`;
110
+ }
111
+ exports.expandUuidTo36Bytes = expandUuidTo36Bytes;
112
+ // 直接生成uuid的接口,为了适配各种环境,写成异步
113
+ async function generateNewIdAsync(option) {
114
+ const option2 = option || ID_OPTION;
115
+ if (option2?.shuffle || process.env.NODE_ENV === 'development') {
116
+ return (0, uuid_1.v4)({ random: await (0, random_1.getRandomValues)(16) });
117
+ }
118
+ return sequentialUuid({ random: await (0, random_1.getRandomValues)(16) });
119
+ }
120
+ exports.generateNewIdAsync = generateNewIdAsync;
121
+ // 实现同步的id缓存接口,以便于前台使用
122
+ const ID_BUFFER = [];
123
+ let ID_OPTION = {};
124
+ async function produceIds() {
125
+ let iter = 0;
126
+ for (; iter < 1024; iter++) {
127
+ ID_BUFFER.push(await generateNewIdAsync());
128
+ }
129
+ }
130
+ exports.produceIds = produceIds;
131
+ produceIds();
132
+ function setGenerateIdOption(option) {
133
+ ID_OPTION = option;
134
+ ID_BUFFER.splice(0, ID_BUFFER.length);
135
+ return produceIds();
136
+ }
137
+ exports.setGenerateIdOption = setGenerateIdOption;
138
+ function generateNewId() {
139
+ if (ID_BUFFER.length > 0) {
140
+ const id = ID_BUFFER.pop();
141
+ if (ID_BUFFER.length < 128) {
142
+ produceIds();
143
+ }
144
+ return id;
145
+ }
146
+ else {
147
+ // 如果没来的及填满缓冲池,这里用一个简单的算法产生同步id(在小程序环境下跑出来过)
148
+ const random = new Uint8Array(16);
149
+ let iter = 0;
150
+ do {
151
+ random[iter] = Math.ceil(Math.random() * 1000) % 128;
152
+ } while (++iter < 16);
153
+ if (ID_OPTION?.shuffle || process.env.NODE_ENV === 'development') {
154
+ return (0, uuid_1.v4)({ random });
155
+ }
156
+ return sequentialUuid({ random });
157
+ }
158
+ }
159
+ exports.generateNewId = generateNewId;
160
+ function stringToArrayBuffer(str) {
161
+ var bytes = new Array();
162
+ var len, c;
163
+ len = str.length;
164
+ for (var i = 0; i < len; i++) {
165
+ c = str.charCodeAt(i);
166
+ if (c >= 0x010000 && c <= 0x10FFFF) {
167
+ bytes.push(((c >> 18) & 0x07) | 0xF0);
168
+ bytes.push(((c >> 12) & 0x3F) | 0x80);
169
+ bytes.push(((c >> 6) & 0x3F) | 0x80);
170
+ bytes.push((c & 0x3F) | 0x80);
171
+ }
172
+ else if (c >= 0x000800 && c <= 0x00FFFF) {
173
+ bytes.push(((c >> 12) & 0x0F) | 0xE0);
174
+ bytes.push(((c >> 6) & 0x3F) | 0x80);
175
+ bytes.push((c & 0x3F) | 0x80);
176
+ }
177
+ else if (c >= 0x000080 && c <= 0x0007FF) {
178
+ bytes.push(((c >> 6) & 0x1F) | 0xC0);
179
+ bytes.push((c & 0x3F) | 0x80);
180
+ }
181
+ else {
182
+ bytes.push(c & 0xFF);
183
+ }
184
+ }
185
+ var array = new Int8Array(bytes.length);
186
+ for (var i = 0; i <= bytes.length; i++) {
187
+ array[i] = bytes[i];
188
+ }
189
+ return array;
190
+ }
191
+ /**
192
+ * 在一些特殊场景下根据数据生成指定的uuid,长度不能超过36byte
193
+ * @param: input: 输入的数据数组,应保证唯一性
194
+ */
195
+ function formUuid(...input) {
196
+ let uuid = input.join('-');
197
+ if (uuid.length <= 36) {
198
+ return uuid;
199
+ }
200
+ const buffer = stringToArrayBuffer(uuid);
201
+ const b = new Array(16);
202
+ let i = 0;
203
+ do {
204
+ b[i++] = 0;
205
+ } while (i < 16);
206
+ i = 0;
207
+ while (i < buffer.length) {
208
+ b[i % 16] += buffer[i];
209
+ i++;
210
+ }
211
+ i = 0;
212
+ do {
213
+ b[i] = b[i] % 256;
214
+ i++;
215
+ } while (i < 16);
216
+ return unsafeStringify(b);
217
+ }
218
+ exports.formUuid = formUuid;
@@ -1,26 +1,26 @@
1
- import { EntityDict } from '../types';
2
- type ValidatorFunction = (text: string, size?: number) => string | boolean;
3
- type ValidatorMoneyFunction = (text: string, disableZero?: boolean) => string | boolean;
4
- export declare const isMobile: ValidatorFunction;
5
- export declare const isPassword: ValidatorFunction;
6
- export declare const isCaptcha: ValidatorFunction;
7
- export declare const isIdCardNumber: ValidatorFunction;
8
- export declare const isPassportNumber: ValidatorFunction;
9
- export declare const isHkCardNumber: ValidatorFunction;
10
- export declare const isAmCardNumber: ValidatorFunction;
11
- export declare const isTwCardNumber: ValidatorFunction;
12
- export declare const isBirthNumber: ValidatorFunction;
13
- export declare const isSoldierNumber: ValidatorFunction;
14
- export declare const isUrl: ValidatorFunction;
15
- export declare const isNickname: ValidatorFunction;
16
- export declare const isSizedCaptcha: ValidatorFunction;
17
- export declare const isDigital: ValidatorFunction;
18
- export declare const isPhone: ValidatorFunction;
19
- export declare const isTel: ValidatorFunction;
20
- export declare const isNumber: ValidatorFunction;
21
- export declare const isMoney: ValidatorMoneyFunction;
22
- export declare const isVehicleNumber: ValidatorFunction;
23
- export declare const isEmail: ValidatorFunction;
24
- export declare function checkAttributesNotNull<ED extends EntityDict, T extends keyof EntityDict>(entity: T, data: Partial<ED[T]['CreateSingle']['data']>, attributes: Array<keyof ED[T]['CreateSingle']['data']>, allowEmpty?: true): void;
25
- export declare function checkAttributesScope<ED extends EntityDict, T extends keyof EntityDict>(entity: T, data: Partial<ED[T]['CreateSingle']['data']>, attributes: Array<keyof ED[T]['CreateSingle']['data']>): void;
26
- export {};
1
+ import { EntityDict } from '../types';
2
+ type ValidatorFunction = (text: string, size?: number) => string | boolean;
3
+ type ValidatorMoneyFunction = (text: string, disableZero?: boolean) => string | boolean;
4
+ export declare const isMobile: ValidatorFunction;
5
+ export declare const isPassword: ValidatorFunction;
6
+ export declare const isCaptcha: ValidatorFunction;
7
+ export declare const isIdCardNumber: ValidatorFunction;
8
+ export declare const isPassportNumber: ValidatorFunction;
9
+ export declare const isHkCardNumber: ValidatorFunction;
10
+ export declare const isAmCardNumber: ValidatorFunction;
11
+ export declare const isTwCardNumber: ValidatorFunction;
12
+ export declare const isBirthNumber: ValidatorFunction;
13
+ export declare const isSoldierNumber: ValidatorFunction;
14
+ export declare const isUrl: ValidatorFunction;
15
+ export declare const isNickname: ValidatorFunction;
16
+ export declare const isSizedCaptcha: ValidatorFunction;
17
+ export declare const isDigital: ValidatorFunction;
18
+ export declare const isPhone: ValidatorFunction;
19
+ export declare const isTel: ValidatorFunction;
20
+ export declare const isNumber: ValidatorFunction;
21
+ export declare const isMoney: ValidatorMoneyFunction;
22
+ export declare const isVehicleNumber: ValidatorFunction;
23
+ export declare const isEmail: ValidatorFunction;
24
+ export declare function checkAttributesNotNull<ED extends EntityDict, T extends keyof EntityDict>(entity: T, data: Partial<ED[T]['CreateSingle']['data']>, attributes: Array<keyof ED[T]['CreateSingle']['data']>, allowEmpty?: true): void;
25
+ export declare function checkAttributesScope<ED extends EntityDict, T extends keyof EntityDict>(entity: T, data: Partial<ED[T]['CreateSingle']['data']>, attributes: Array<keyof ED[T]['CreateSingle']['data']>): void;
26
+ export {};