utiller 1.0.375 → 1.0.377

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.
@@ -4206,8 +4206,82 @@ var Utiller = /*#__PURE__*/function () {
4206
4206
  }
4207
4207
  }
4208
4208
  }, {
4209
- key: "getFilteredHeraPeriods",
4210
- value: /** ============== 排課系統公式 開始 ============== */
4209
+ key: "generateUniqueCodeMap",
4210
+ value:
4211
+ /**
4212
+ * 🧩 產生合法變數命名的唯一亂碼代碼對照表(支援自訂長度)
4213
+ *
4214
+ * 將輸入的字串陣列轉換成:
4215
+ * 1️⃣ 合法變數命名 key(以 _.camelCase() 處理)
4216
+ * 2️⃣ 對應唯一亂碼代碼(預設長度 3,第一字母必須為英文字母)
4217
+ * 3️⃣ 若 key 重複,拋出錯誤並指出是哪個 key 重複
4218
+ *
4219
+ * @param {string[]} array - 要轉換的字串陣列
4220
+ * @param {number} [length=3] - 代碼長度(預設為 3,最小為 2)
4221
+ * @returns {Object} 回傳一個 JSON 物件,例如:
4222
+ * { mainDiv: 'f2x', mainBanner: 'k9A' }
4223
+ *
4224
+ * 📘 範例:
4225
+ * ```js
4226
+ * const arr = ["MainDiv", "MainPromotedBannerSwiperSlide", "MainPromotedBannerSwiperList"];
4227
+ *
4228
+ * console.log(generateUniqueCodeMap(arr)); // 預設長度3
4229
+ * // => { mainDiv: 'a9F', mainPromotedBannerSwiperSlide: 'm2q', mainPromotedBannerSwiperList: 'z5K' }
4230
+ *
4231
+ * console.log(generateUniqueCodeMap(arr, 4)); // 改為4字元
4232
+ * // => { mainDiv: 'a9Fz', mainPromotedBannerSwiperSlide: 'm2qR', mainPromotedBannerSwiperList: 'z5K2' }
4233
+ * ```
4234
+ *
4235
+ * // === 🧪 測試範例 ===
4236
+ * const arr = [
4237
+ * "MainDiv",
4238
+ * "MainPromotedBannerSwiperSlide",
4239
+ * "MainPromotedBannerSwiperList",
4240
+ * ];
4241
+ *
4242
+ * console.log("3字元預設:", generateUniqueCodeMap(arr));
4243
+ * console.log("4字元代碼:", generateUniqueCodeMap(arr, 4));
4244
+ *
4245
+ */
4246
+ function generateUniqueCodeMap(array) {
4247
+ var length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 3;
4248
+ if (length < 2) {
4249
+ throw new Error("代碼長度最少必須為 2。");
4250
+ }
4251
+ var usedCodes = new Set();
4252
+ var usedKeys = new Set();
4253
+
4254
+ /**
4255
+ * 產生合法變數代碼(指定長度亂碼)
4256
+ * 第1字母:a-zA-Z
4257
+ * 其餘字元:a-zA-Z0-9
4258
+ */
4259
+ var generateRandomCode = function generateRandomCode() {
4260
+ var letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
4261
+ var chars = letters + "0123456789";
4262
+ var code;
4263
+ do {
4264
+ // 第一個字母必須是英文
4265
+ code = letters[Math.floor(Math.random() * letters.length)];
4266
+ // 其餘字元隨機取
4267
+ for (var i = 1; i < length; i++) {
4268
+ code += chars[Math.floor(Math.random() * chars.length)];
4269
+ }
4270
+ } while (usedCodes.has(code));
4271
+ usedCodes.add(code);
4272
+ return code;
4273
+ };
4274
+ return _lodash["default"].transform(array, function (result, rawKey) {
4275
+ var key = rawKey;
4276
+ if (usedKeys.has(key)) {
4277
+ throw new Error("Duplicate key detected: \"".concat(key, "\" (\u539F\u59CB\u503C: \"").concat(rawKey, "\")"));
4278
+ }
4279
+ usedKeys.add(key);
4280
+ result[key] = generateRandomCode();
4281
+ }, {});
4282
+ }
4283
+
4284
+ /** ============== 排課系統公式 開始 ============== */
4211
4285
 
4212
4286
  /**
4213
4287
  * /const arrayWithDup = [
@@ -4224,7 +4298,9 @@ var Utiller = /*#__PURE__*/function () {
4224
4298
  * 2. idOfBooze和idOfVariant為PK, 重複的只保留一組
4225
4299
  * 3. 回傳filter array,(反查出哪些課程重複會用到其他資訊)
4226
4300
  * */
4227
- function getFilteredHeraPeriods(arr, idOfCurrentBooze) {
4301
+ }, {
4302
+ key: "getFilteredHeraPeriods",
4303
+ value: function getFilteredHeraPeriods(arr, idOfCurrentBooze) {
4228
4304
  return _lodash["default"].chain(arr)
4229
4305
  // 1️⃣ 刪掉 idOfBooze 等於目標值的項目
4230
4306
  .filter(function (item) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "utiller",
3
- "version": "1.0.375",
3
+ "version": "1.0.377",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -11,7 +11,7 @@
11
11
  "license": "ISC",
12
12
  "dependencies": {
13
13
  "configerer": "^1.0.23",
14
- "utiller": "^1.0.374",
14
+ "utiller": "^1.0.376",
15
15
  "linepayer": "^1.0.15",
16
16
  "databazer": "^1.0.17",
17
17
  "lodash": "^4.17.20",