utiller 1.0.374 → 1.0.376

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.
@@ -595,6 +595,16 @@ var Utiller = /*#__PURE__*/function () {
595
595
  return match ? _lodash["default"].merge({}, item, match) : item;
596
596
  });
597
597
  });
598
+ /**
599
+ * console.log(toPercentageDecimal(100)); // 1
600
+ * console.log(toPercentageDecimal(97)); // 0.97
601
+ * console.log(toPercentageDecimal('97')); // 0(非數字)
602
+ */
603
+ (0, _defineProperty2["default"])(this, "toPercentageDecimal", function (num) {
604
+ var parsed = _lodash["default"].toNumber(num);
605
+ if (!_lodash["default"].isFinite(parsed)) return 1;
606
+ return _lodash["default"].round(parsed / 100, 10);
607
+ });
598
608
  /**
599
609
  * @param {Array<Object>} current - 要更新的目標陣列
600
610
  * @param {Array<Object>} reference - 用來替換屬性的參照陣列
@@ -4195,6 +4205,81 @@ var Utiller = /*#__PURE__*/function () {
4195
4205
  return false;
4196
4206
  }
4197
4207
  }
4208
+ }, {
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 = _lodash["default"].camelCase(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
+ }
4198
4283
 
4199
4284
  /** ============== 排課系統公式 開始 ============== */
4200
4285
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "utiller",
3
- "version": "1.0.374",
3
+ "version": "1.0.376",
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.373",
14
+ "utiller": "^1.0.375",
15
15
  "linepayer": "^1.0.15",
16
16
  "databazer": "^1.0.17",
17
17
  "lodash": "^4.17.20",