@mathripper/ideal-cli 1.0.0 → 1.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.
package/dist/index.js CHANGED
@@ -88,11 +88,11 @@ async function isEmpty(dirPath) {
88
88
  try {
89
89
  const files = await fs.readdir(dirPath);
90
90
  return files.length === 0;
91
- } catch (error) {
92
- if (error.code === "ENOENT") {
91
+ } catch (error2) {
92
+ if (error2.code === "ENOENT") {
93
93
  return true;
94
94
  }
95
- throw error;
95
+ throw error2;
96
96
  }
97
97
  }
98
98
  async function copyDir(src, dest, options2 = {}) {
@@ -2721,7 +2721,7 @@ var require_loader = __commonJS({
2721
2721
  iterator(documents[index]);
2722
2722
  }
2723
2723
  }
2724
- function load(input, options2) {
2724
+ function load2(input, options2) {
2725
2725
  var documents = loadDocuments(input, options2);
2726
2726
  if (documents.length === 0) {
2727
2727
  return void 0;
@@ -2738,10 +2738,10 @@ var require_loader = __commonJS({
2738
2738
  return loadAll(input, iterator, common.extend({ schema: DEFAULT_SAFE_SCHEMA }, options2));
2739
2739
  }
2740
2740
  function safeLoad(input, options2) {
2741
- return load(input, common.extend({ schema: DEFAULT_SAFE_SCHEMA }, options2));
2741
+ return load2(input, common.extend({ schema: DEFAULT_SAFE_SCHEMA }, options2));
2742
2742
  }
2743
2743
  module2.exports.loadAll = loadAll;
2744
- module2.exports.load = load;
2744
+ module2.exports.load = load2;
2745
2745
  module2.exports.safeLoadAll = safeLoadAll;
2746
2746
  module2.exports.safeLoad = safeLoad;
2747
2747
  }
@@ -3753,12 +3753,13 @@ init_esm_shims();
3753
3753
  // src/constants/messages.ts
3754
3754
  init_esm_shims();
3755
3755
  var MSG_UPDATE_SUCCESS = "\u66F4\u65B0\u5B8C\u6210\uFF01";
3756
+ var ERR_DIR_EXISTS = "\u76EE\u5F55\u5DF2\u5B58\u5728\uFF0C\u8BF7\u4F7F\u7528 --force \u5F3A\u5236\u8986\u76D6";
3756
3757
  var ERR_CONFIG_NOT_FOUND = "\u914D\u7F6E\u6587\u4EF6\u4E0D\u5B58\u5728\uFF0C\u8BF7\u5148\u8FD0\u884C ideal init";
3757
3758
  var WARN_FILE_MODIFIED = "\u6587\u4EF6\u5DF2\u88AB\u4FEE\u6539\uFF0C\u66F4\u65B0\u65F6\u53EF\u80FD\u88AB\u8986\u76D6";
3758
3759
  var WARN_CONFLICT_DETECTED = "\u68C0\u6D4B\u5230\u51B2\u7A81\uFF0C\u8BF7\u624B\u52A8\u89E3\u51B3";
3760
+ var INFO_CREATING_DIR = "\u6B63\u5728\u521B\u5EFA\u76EE\u5F55...";
3759
3761
  var INFO_CHECKING = "\u6B63\u5728\u68C0\u67E5...";
3760
3762
  var INFO_UPDATING = "\u6B63\u5728\u66F4\u65B0...";
3761
- var HELP_INIT = "\u521D\u59CB\u5316\u9879\u76EE\u5DE5\u4F5C\u6D41\u914D\u7F6E";
3762
3763
  var HELP_DOCTOR = "\u68C0\u67E5\u5DE5\u4F5C\u6D41\u914D\u7F6E\u5B8C\u6574\u6027\u548C\u6709\u6548\u6027";
3763
3764
 
3764
3765
  // src/commands/doctor.ts
@@ -3787,7 +3788,7 @@ init_esm_shims();
3787
3788
  var ANSI_BACKGROUND_OFFSET = 10;
3788
3789
  var wrapAnsi16 = (offset = 0) => (code) => `\x1B[${code + offset}m`;
3789
3790
  var wrapAnsi256 = (offset = 0) => (code) => `\x1B[${38 + offset};5;${code}m`;
3790
- var wrapAnsi16m = (offset = 0) => (red, green, blue) => `\x1B[${38 + offset};2;${red};${green};${blue}m`;
3791
+ var wrapAnsi16m = (offset = 0) => (red2, green2, blue2) => `\x1B[${38 + offset};2;${red2};${green2};${blue2}m`;
3791
3792
  var styles = {
3792
3793
  modifier: {
3793
3794
  reset: [0, 0],
@@ -3882,17 +3883,17 @@ function assembleStyles() {
3882
3883
  styles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);
3883
3884
  Object.defineProperties(styles, {
3884
3885
  rgbToAnsi256: {
3885
- value(red, green, blue) {
3886
- if (red === green && green === blue) {
3887
- if (red < 8) {
3886
+ value(red2, green2, blue2) {
3887
+ if (red2 === green2 && green2 === blue2) {
3888
+ if (red2 < 8) {
3888
3889
  return 16;
3889
3890
  }
3890
- if (red > 248) {
3891
+ if (red2 > 248) {
3891
3892
  return 231;
3892
3893
  }
3893
- return Math.round((red - 8) / 247 * 24) + 232;
3894
+ return Math.round((red2 - 8) / 247 * 24) + 232;
3894
3895
  }
3895
- return 16 + 36 * Math.round(red / 255 * 5) + 6 * Math.round(green / 255 * 5) + Math.round(blue / 255 * 5);
3896
+ return 16 + 36 * Math.round(red2 / 255 * 5) + 6 * Math.round(green2 / 255 * 5) + Math.round(blue2 / 255 * 5);
3896
3897
  },
3897
3898
  enumerable: false
3898
3899
  },
@@ -3929,25 +3930,25 @@ function assembleStyles() {
3929
3930
  if (code < 16) {
3930
3931
  return 90 + (code - 8);
3931
3932
  }
3932
- let red;
3933
- let green;
3934
- let blue;
3933
+ let red2;
3934
+ let green2;
3935
+ let blue2;
3935
3936
  if (code >= 232) {
3936
- red = ((code - 232) * 10 + 8) / 255;
3937
- green = red;
3938
- blue = red;
3937
+ red2 = ((code - 232) * 10 + 8) / 255;
3938
+ green2 = red2;
3939
+ blue2 = red2;
3939
3940
  } else {
3940
3941
  code -= 16;
3941
3942
  const remainder = code % 36;
3942
- red = Math.floor(code / 36) / 5;
3943
- green = Math.floor(remainder / 6) / 5;
3944
- blue = remainder % 6 / 5;
3943
+ red2 = Math.floor(code / 36) / 5;
3944
+ green2 = Math.floor(remainder / 6) / 5;
3945
+ blue2 = remainder % 6 / 5;
3945
3946
  }
3946
- const value = Math.max(red, green, blue) * 2;
3947
+ const value = Math.max(red2, green2, blue2) * 2;
3947
3948
  if (value === 0) {
3948
3949
  return 30;
3949
3950
  }
3950
- let result = 30 + (Math.round(blue) << 2 | Math.round(green) << 1 | Math.round(red));
3951
+ let result = 30 + (Math.round(blue2) << 2 | Math.round(green2) << 1 | Math.round(red2));
3951
3952
  if (value === 2) {
3952
3953
  result += 60;
3953
3954
  }
@@ -3956,7 +3957,7 @@ function assembleStyles() {
3956
3957
  enumerable: false
3957
3958
  },
3958
3959
  rgbToAnsi: {
3959
- value: (red, green, blue) => styles.ansi256ToAnsi(styles.rgbToAnsi256(red, green, blue)),
3960
+ value: (red2, green2, blue2) => styles.ansi256ToAnsi(styles.rgbToAnsi256(red2, green2, blue2)),
3960
3961
  enumerable: false
3961
3962
  },
3962
3963
  hexToAnsi: {
@@ -4663,12 +4664,12 @@ var ProjectValidator = class {
4663
4664
  details: `\u9879\u76EE\u540D\u79F0: ${config.projectName}
4664
4665
  \u6280\u672F\u6808: ${config.techStack}`
4665
4666
  };
4666
- } catch (error) {
4667
+ } catch (error2) {
4667
4668
  return {
4668
4669
  name: "\u914D\u7F6E\u6587\u4EF6",
4669
4670
  status: "error",
4670
4671
  message: "\u914D\u7F6E\u6587\u4EF6\u683C\u5F0F\u9519\u8BEF",
4671
- details: `\u89E3\u6790\u9519\u8BEF: ${error instanceof Error ? error.message : "Unknown error"}`
4672
+ details: `\u89E3\u6790\u9519\u8BEF: ${error2 instanceof Error ? error2.message : "Unknown error"}`
4672
4673
  };
4673
4674
  }
4674
4675
  }
@@ -4951,9 +4952,9 @@ var DoctorCommand = class {
4951
4952
  return 1;
4952
4953
  }
4953
4954
  return 0;
4954
- } catch (error) {
4955
+ } catch (error2) {
4955
4956
  this.logger.error(
4956
- `\u8BCA\u65AD\u68C0\u67E5\u5931\u8D25: ${error instanceof Error ? error.message : "Unknown error"}`
4957
+ `\u8BCA\u65AD\u68C0\u67E5\u5931\u8D25: ${error2 instanceof Error ? error2.message : "Unknown error"}`
4957
4958
  );
4958
4959
  return 1;
4959
4960
  }
@@ -5017,9 +5018,9 @@ var ConfigManager = class {
5017
5018
  const { data } = (0, import_gray_matter.default)(content);
5018
5019
  const config = this.parseConfig(data);
5019
5020
  return config;
5020
- } catch (error) {
5021
+ } catch (error2) {
5021
5022
  throw new Error(
5022
- `\u914D\u7F6E\u6587\u4EF6\u89E3\u6790\u5931\u8D25: ${error instanceof Error ? error.message : String(error)}`
5023
+ `\u914D\u7F6E\u6587\u4EF6\u89E3\u6790\u5931\u8D25: ${error2 instanceof Error ? error2.message : String(error2)}`
5023
5024
  );
5024
5025
  }
5025
5026
  }
@@ -5294,12 +5295,12 @@ var ConfigCommand = class {
5294
5295
  console.log(item.key.padEnd(30) + item.value);
5295
5296
  }
5296
5297
  console.log("");
5297
- } catch (error) {
5298
- if (error instanceof Error && error.message.includes("\u914D\u7F6E\u6587\u4EF6\u4E0D\u5B58\u5728")) {
5298
+ } catch (error2) {
5299
+ if (error2 instanceof Error && error2.message.includes("\u914D\u7F6E\u6587\u4EF6\u4E0D\u5B58\u5728")) {
5299
5300
  console.error(ERR_CONFIG_NOT_FOUND);
5300
5301
  process.exit(1);
5301
5302
  }
5302
- throw error;
5303
+ throw error2;
5303
5304
  }
5304
5305
  }
5305
5306
  /**
@@ -5325,12 +5326,12 @@ var ConfigCommand = class {
5325
5326
  } else {
5326
5327
  console.log(String(value));
5327
5328
  }
5328
- } catch (error) {
5329
- if (error instanceof Error && error.message.includes("\u914D\u7F6E\u6587\u4EF6\u4E0D\u5B58\u5728")) {
5329
+ } catch (error2) {
5330
+ if (error2 instanceof Error && error2.message.includes("\u914D\u7F6E\u6587\u4EF6\u4E0D\u5B58\u5728")) {
5330
5331
  console.error(ERR_CONFIG_NOT_FOUND);
5331
5332
  process.exit(1);
5332
5333
  }
5333
- throw error;
5334
+ throw error2;
5334
5335
  }
5335
5336
  }
5336
5337
  /**
@@ -5352,12 +5353,12 @@ var ConfigCommand = class {
5352
5353
  const updatedConfig = configObj;
5353
5354
  await this.configManager.write(projectRoot, updatedConfig);
5354
5355
  console.log(`\u5DF2\u66F4\u65B0: ${key} = ${value}`);
5355
- } catch (error) {
5356
- if (error instanceof Error && error.message.includes("\u914D\u7F6E\u6587\u4EF6\u4E0D\u5B58\u5728")) {
5356
+ } catch (error2) {
5357
+ if (error2 instanceof Error && error2.message.includes("\u914D\u7F6E\u6587\u4EF6\u4E0D\u5B58\u5728")) {
5357
5358
  console.error(ERR_CONFIG_NOT_FOUND);
5358
5359
  process.exit(1);
5359
5360
  }
5360
- throw error;
5361
+ throw error2;
5361
5362
  }
5362
5363
  }
5363
5364
  };
@@ -5418,8 +5419,8 @@ function createHttpClient(config = {}) {
5418
5419
  }
5419
5420
  return config2;
5420
5421
  },
5421
- (error) => {
5422
- return Promise.reject(error);
5422
+ (error2) => {
5423
+ return Promise.reject(error2);
5423
5424
  }
5424
5425
  );
5425
5426
  instance.interceptors.response.use(
@@ -5431,8 +5432,8 @@ function createHttpClient(config = {}) {
5431
5432
  }
5432
5433
  return response;
5433
5434
  },
5434
- (error) => {
5435
- return Promise.reject(handleAxiosError(error));
5435
+ (error2) => {
5436
+ return Promise.reject(handleAxiosError(error2));
5436
5437
  }
5437
5438
  );
5438
5439
  return instance;
@@ -5468,9 +5469,9 @@ function configureProxy(instance) {
5468
5469
  }
5469
5470
  }
5470
5471
  }
5471
- function handleAxiosError(error) {
5472
- if (error.response) {
5473
- const { status, data } = error.response;
5472
+ function handleAxiosError(error2) {
5473
+ if (error2.response) {
5474
+ const { status, data } = error2.response;
5474
5475
  let message = `\u8BF7\u6C42\u5931\u8D25\uFF0C\u72B6\u6001\u7801: ${status}`;
5475
5476
  if (data && typeof data === "object" && "message" in data) {
5476
5477
  message = data.message;
@@ -5479,21 +5480,21 @@ function handleAxiosError(error) {
5479
5480
  }
5480
5481
  return new NetworkError(message, "RESPONSE_ERROR", status, data);
5481
5482
  }
5482
- if (error.request) {
5483
+ if (error2.request) {
5483
5484
  return new NetworkError(
5484
5485
  "\u65E0\u6CD5\u8FDE\u63A5\u5230\u670D\u52A1\u5668\uFF0C\u8BF7\u68C0\u67E5\u7F51\u7EDC\u8FDE\u63A5",
5485
5486
  "NO_RESPONSE"
5486
5487
  );
5487
5488
  }
5488
- if (error.code === "ECONNABORTED") {
5489
+ if (error2.code === "ECONNABORTED") {
5489
5490
  return new NetworkError(
5490
- `\u8BF7\u6C42\u8D85\u65F6\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5\uFF08\u8D85\u65F6\u65F6\u95F4: ${error.config?.timeout || DEFAULT_TIMEOUT}ms\uFF09`,
5491
+ `\u8BF7\u6C42\u8D85\u65F6\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5\uFF08\u8D85\u65F6\u65F6\u95F4: ${error2.config?.timeout || DEFAULT_TIMEOUT}ms\uFF09`,
5491
5492
  "TIMEOUT"
5492
5493
  );
5493
5494
  }
5494
5495
  return new NetworkError(
5495
- error.message || "\u672A\u77E5\u7F51\u7EDC\u9519\u8BEF",
5496
- error.code || "UNKNOWN"
5496
+ error2.message || "\u672A\u77E5\u7F51\u7EDC\u9519\u8BEF",
5497
+ error2.code || "UNKNOWN"
5497
5498
  );
5498
5499
  }
5499
5500
  async function get(client, url, config) {
@@ -5505,11 +5506,11 @@ async function withRetry(requestFn, maxRetries = 3, retryDelay = 1e3) {
5505
5506
  for (let attempt = 1; attempt <= maxRetries; attempt++) {
5506
5507
  try {
5507
5508
  return await requestFn();
5508
- } catch (error) {
5509
- lastError = error;
5510
- if (error instanceof NetworkError && error.statusCode) {
5511
- if (error.statusCode >= 400 && error.statusCode < 500) {
5512
- throw error;
5509
+ } catch (error2) {
5510
+ lastError = error2;
5511
+ if (error2 instanceof NetworkError && error2.statusCode) {
5512
+ if (error2.statusCode >= 400 && error2.statusCode < 500) {
5513
+ throw error2;
5513
5514
  }
5514
5515
  }
5515
5516
  if (attempt < maxRetries) {
@@ -5555,8 +5556,8 @@ var GitHubClient = class {
5555
5556
  * @param ref Git 引用(分支、标签或提交 SHA)
5556
5557
  * @returns 目录内容数组
5557
5558
  */
5558
- async getContents(owner, repo, path10 = "", ref) {
5559
- let url = `/repos/${owner}/${repo}/contents/${path10}`;
5559
+ async getContents(owner, repo, path11 = "", ref) {
5560
+ let url = `/repos/${owner}/${repo}/contents/${path11}`;
5560
5561
  if (ref) {
5561
5562
  url += `?ref=${encodeURIComponent(ref)}`;
5562
5563
  }
@@ -5569,11 +5570,11 @@ var GitHubClient = class {
5569
5570
  3,
5570
5571
  1e3
5571
5572
  );
5572
- } catch (error) {
5573
- if (error instanceof NetworkError) {
5574
- logger.error(`Failed to fetch contents from ${url}: ${error.message}`);
5573
+ } catch (error2) {
5574
+ if (error2 instanceof NetworkError) {
5575
+ logger.error(`Failed to fetch contents from ${url}: ${error2.message}`);
5575
5576
  }
5576
- throw error;
5577
+ throw error2;
5577
5578
  }
5578
5579
  }
5579
5580
  /**
@@ -5584,8 +5585,8 @@ var GitHubClient = class {
5584
5585
  * @param ref Git 引用
5585
5586
  * @returns 文件内容(已解码)
5586
5587
  */
5587
- async getFileContent(owner, repo, path10, ref) {
5588
- let url = `/repos/${owner}/${repo}/contents/${path10}`;
5588
+ async getFileContent(owner, repo, path11, ref) {
5589
+ let url = `/repos/${owner}/${repo}/contents/${path11}`;
5589
5590
  if (ref) {
5590
5591
  url += `?ref=${encodeURIComponent(ref)}`;
5591
5592
  }
@@ -5605,13 +5606,13 @@ var GitHubClient = class {
5605
5606
  return content;
5606
5607
  }
5607
5608
  throw new Error(
5608
- `Unexpected response: content or encoding missing for ${path10}`
5609
+ `Unexpected response: content or encoding missing for ${path11}`
5609
5610
  );
5610
- } catch (error) {
5611
- if (error instanceof NetworkError) {
5612
- logger.error(`Failed to fetch file ${path10}: ${error.message}`);
5611
+ } catch (error2) {
5612
+ if (error2 instanceof NetworkError) {
5613
+ logger.error(`Failed to fetch file ${path11}: ${error2.message}`);
5613
5614
  }
5614
- throw error;
5615
+ throw error2;
5615
5616
  }
5616
5617
  }
5617
5618
  /**
@@ -5628,13 +5629,13 @@ var GitHubClient = class {
5628
5629
  responseType: "text"
5629
5630
  });
5630
5631
  return response.data;
5631
- } catch (error) {
5632
- if (error instanceof NetworkError) {
5632
+ } catch (error2) {
5633
+ if (error2 instanceof NetworkError) {
5633
5634
  logger.error(
5634
- `Failed to fetch file from ${downloadUrl}: ${error.message}`
5635
+ `Failed to fetch file from ${downloadUrl}: ${error2.message}`
5635
5636
  );
5636
5637
  }
5637
- throw error;
5638
+ throw error2;
5638
5639
  }
5639
5640
  }
5640
5641
  /**
@@ -5645,13 +5646,13 @@ var GitHubClient = class {
5645
5646
  * @param ref Git 引用
5646
5647
  * @returns 版本信息
5647
5648
  */
5648
- async getVersion(owner, repo, path10 = "version.json", ref) {
5649
- const content = await this.getFileContent(owner, repo, path10, ref);
5649
+ async getVersion(owner, repo, path11 = "version.json", ref) {
5650
+ const content = await this.getFileContent(owner, repo, path11, ref);
5650
5651
  try {
5651
5652
  return JSON.parse(content);
5652
- } catch (error) {
5653
+ } catch (error2) {
5653
5654
  throw new Error(
5654
- `Failed to parse version.json: ${error instanceof Error ? error.message : "Unknown error"}`
5655
+ `Failed to parse version.json: ${error2 instanceof Error ? error2.message : "Unknown error"}`
5655
5656
  );
5656
5657
  }
5657
5658
  }
@@ -5663,7 +5664,7 @@ var GitHubClient = class {
5663
5664
  * @param ref Git 引用
5664
5665
  * @returns 所有文件的数组
5665
5666
  */
5666
- async fetchDirectory(owner, repo, path10 = "", ref) {
5667
+ async fetchDirectory(owner, repo, path11 = "", ref) {
5667
5668
  const results = [];
5668
5669
  const fetchRecursive = async (currentPath) => {
5669
5670
  const contents = await this.getContents(owner, repo, currentPath, ref);
@@ -5675,7 +5676,7 @@ var GitHubClient = class {
5675
5676
  }
5676
5677
  }
5677
5678
  };
5678
- await fetchRecursive(path10);
5679
+ await fetchRecursive(path11);
5679
5680
  return results;
5680
5681
  }
5681
5682
  /**
@@ -5688,11 +5689,11 @@ var GitHubClient = class {
5688
5689
  try {
5689
5690
  await this.getContents(owner, repo, "");
5690
5691
  return true;
5691
- } catch (error) {
5692
- if (error instanceof NetworkError && error.statusCode === 404) {
5692
+ } catch (error2) {
5693
+ if (error2 instanceof NetworkError && error2.statusCode === 404) {
5693
5694
  return false;
5694
5695
  }
5695
- throw error;
5696
+ throw error2;
5696
5697
  }
5697
5698
  }
5698
5699
  /**
@@ -5703,15 +5704,15 @@ var GitHubClient = class {
5703
5704
  * @param ref Git 引用
5704
5705
  * @returns 如果路径存在返回 true
5705
5706
  */
5706
- async pathExists(owner, repo, path10, ref) {
5707
+ async pathExists(owner, repo, path11, ref) {
5707
5708
  try {
5708
- await this.getContents(owner, repo, path10, ref);
5709
+ await this.getContents(owner, repo, path11, ref);
5709
5710
  return true;
5710
- } catch (error) {
5711
- if (error instanceof NetworkError && error.statusCode === 404) {
5711
+ } catch (error2) {
5712
+ if (error2 instanceof NetworkError && error2.statusCode === 404) {
5712
5713
  return false;
5713
5714
  }
5714
- throw error;
5715
+ throw error2;
5715
5716
  }
5716
5717
  }
5717
5718
  };
@@ -5744,13 +5745,17 @@ var DEFAULT_PROJECT_CONFIG = {
5744
5745
  var TemplateManager = class {
5745
5746
  githubClient;
5746
5747
  repoOwner;
5748
+ repoName;
5747
5749
  templatePath;
5748
5750
  branch;
5749
5751
  cacheDir;
5750
5752
  verbose;
5751
5753
  constructor(config = {}) {
5752
5754
  this.githubClient = config.githubClient ?? new GitHubClient();
5753
- this.repoOwner = config.repoOwner ?? `${DEFAULT_REPO_OWNER}/${DEFAULT_REPO_NAME}`;
5755
+ const repoConfig = config.repoOwner ?? `${DEFAULT_REPO_OWNER}/${DEFAULT_REPO_NAME}`;
5756
+ const parts = repoConfig.split("/");
5757
+ this.repoOwner = parts[0] ?? DEFAULT_REPO_OWNER;
5758
+ this.repoName = parts[1] ?? DEFAULT_REPO_NAME;
5754
5759
  this.templatePath = config.templatePath ?? DEFAULT_TEMPLATE_PATH;
5755
5760
  this.branch = config.branch ?? DEFAULT_BRANCH;
5756
5761
  this.verbose = config.verbose ?? false;
@@ -5768,7 +5773,7 @@ var TemplateManager = class {
5768
5773
  * @returns 模板缓存目录路径
5769
5774
  */
5770
5775
  getTemplateCachePath() {
5771
- return path7.join(this.cacheDir, this.repoOwner, this.templatePath);
5776
+ return path7.join(this.cacheDir, this.repoOwner, this.repoName, this.templatePath);
5772
5777
  }
5773
5778
  /**
5774
5779
  * 获取版本缓存文件路径
@@ -5784,7 +5789,7 @@ var TemplateManager = class {
5784
5789
  */
5785
5790
  async fetchTemplate(force = false) {
5786
5791
  if (this.verbose) {
5787
- logger.debug(`Fetching template from ${this.repoOwner}/${this.templatePath}`);
5792
+ logger.debug(`Fetching template from ${this.repoOwner}/${this.repoName}/${this.templatePath}`);
5788
5793
  }
5789
5794
  const cachePath = this.getTemplateCachePath();
5790
5795
  const cacheExists = await pathExists(cachePath);
@@ -5801,12 +5806,12 @@ var TemplateManager = class {
5801
5806
  await ensureDir(cachePath);
5802
5807
  const files = await this.githubClient.fetchDirectory(
5803
5808
  this.repoOwner,
5809
+ this.repoName,
5804
5810
  this.templatePath,
5805
- "",
5806
5811
  this.branch
5807
5812
  );
5808
5813
  if (files.length === 0) {
5809
- logger.warn(`No files found in ${this.repoOwner}/${this.templatePath}`);
5814
+ logger.warn(`No files found in ${this.repoOwner}/${this.repoName}/${this.templatePath}`);
5810
5815
  return 0;
5811
5816
  }
5812
5817
  let downloaded = 0;
@@ -5815,7 +5820,7 @@ var TemplateManager = class {
5815
5820
  try {
5816
5821
  const content = await this.githubClient.getFileContent(
5817
5822
  this.repoOwner,
5818
- this.templatePath,
5823
+ this.repoName,
5819
5824
  file.path,
5820
5825
  this.branch
5821
5826
  );
@@ -5827,9 +5832,9 @@ var TemplateManager = class {
5827
5832
  if (this.verbose) {
5828
5833
  logger.debug(`Downloaded: ${relativePath}`);
5829
5834
  }
5830
- } catch (error) {
5835
+ } catch (error2) {
5831
5836
  logger.warn(
5832
- `Failed to download ${file.path}: ${error instanceof Error ? error.message : "Unknown error"}`
5837
+ `Failed to download ${file.path}: ${error2 instanceof Error ? error2.message : "Unknown error"}`
5833
5838
  );
5834
5839
  }
5835
5840
  }
@@ -5847,10 +5852,10 @@ var TemplateManager = class {
5847
5852
  const versionPath = this.getVersionCachePath();
5848
5853
  await ensureFileDir(versionPath);
5849
5854
  await writeFile(versionPath, JSON.stringify(versionInfo, null, 2));
5850
- } catch (error) {
5855
+ } catch (error2) {
5851
5856
  if (this.verbose) {
5852
5857
  logger.debug(
5853
- `Failed to cache version info: ${error instanceof Error ? error.message : "Unknown error"}`
5858
+ `Failed to cache version info: ${error2 instanceof Error ? error2.message : "Unknown error"}`
5854
5859
  );
5855
5860
  }
5856
5861
  }
@@ -5862,7 +5867,7 @@ var TemplateManager = class {
5862
5867
  async getTemplateVersion() {
5863
5868
  return this.githubClient.getVersion(
5864
5869
  this.repoOwner,
5865
- this.templatePath,
5870
+ this.repoName,
5866
5871
  "version.json",
5867
5872
  this.branch
5868
5873
  );
@@ -6045,9 +6050,9 @@ var DiffManager = class {
6045
6050
  const content = await readFile(metadataPath);
6046
6051
  const metadata = JSON.parse(content);
6047
6052
  return metadata;
6048
- } catch (error) {
6053
+ } catch (error2) {
6049
6054
  throw new Error(
6050
- `\u5143\u6570\u636E\u6587\u4EF6\u89E3\u6790\u5931\u8D25: ${error instanceof Error ? error.message : String(error)}`
6055
+ `\u5143\u6570\u636E\u6587\u4EF6\u89E3\u6790\u5931\u8D25: ${error2 instanceof Error ? error2.message : String(error2)}`
6051
6056
  );
6052
6057
  }
6053
6058
  }
@@ -6462,9 +6467,9 @@ var UpdateCommand = class _UpdateCommand {
6462
6467
  console.error(`\u66F4\u65B0\u5931\u8D25: ${result.error}`);
6463
6468
  return 1;
6464
6469
  }
6465
- } catch (error) {
6470
+ } catch (error2) {
6466
6471
  console.error(
6467
- `\u66F4\u65B0\u8FC7\u7A0B\u4E2D\u53D1\u751F\u9519\u8BEF: ${error instanceof Error ? error.message : String(error)}`
6472
+ `\u66F4\u65B0\u8FC7\u7A0B\u4E2D\u53D1\u751F\u9519\u8BEF: ${error2 instanceof Error ? error2.message : String(error2)}`
6468
6473
  );
6469
6474
  return 1;
6470
6475
  }
@@ -6492,9 +6497,9 @@ var UpdateCommand = class _UpdateCommand {
6492
6497
  remoteVersion: remoteMeta.version,
6493
6498
  changelog: remoteMeta.changelog
6494
6499
  };
6495
- } catch (error) {
6500
+ } catch (error2) {
6496
6501
  if (this.verbose) {
6497
- logger.debug(`\u68C0\u67E5\u66F4\u65B0\u5931\u8D25: ${error instanceof Error ? error.message : String(error)}`);
6502
+ logger.debug(`\u68C0\u67E5\u66F4\u65B0\u5931\u8D25: ${error2 instanceof Error ? error2.message : String(error2)}`);
6498
6503
  }
6499
6504
  return {
6500
6505
  hasUpdate: false,
@@ -6753,8 +6758,8 @@ ${WARN_CONFLICT_DETECTED}`);
6753
6758
  lastUpdated: (/* @__PURE__ */ new Date()).toISOString()
6754
6759
  });
6755
6760
  result.success = true;
6756
- } catch (error) {
6757
- result.error = error instanceof Error ? error.message : String(error);
6761
+ } catch (error2) {
6762
+ result.error = error2 instanceof Error ? error2.message : String(error2);
6758
6763
  }
6759
6764
  return result;
6760
6765
  }
@@ -6804,11 +6809,3113 @@ ${WARN_CONFLICT_DETECTED}`);
6804
6809
  }
6805
6810
  };
6806
6811
 
6807
- // src/commands/index.ts
6808
- async function handleInit() {
6809
- console.log("init \u547D\u4EE4\u5C1A\u672A\u5B9E\u73B0");
6810
- process.exit(0);
6812
+ // src/commands/init.ts
6813
+ init_esm_shims();
6814
+ import path10 from "path";
6815
+ import { exec } from "child_process";
6816
+ import { promisify } from "util";
6817
+
6818
+ // src/utils/spinner.ts
6819
+ init_esm_shims();
6820
+
6821
+ // node_modules/ora/index.js
6822
+ init_esm_shims();
6823
+ import process8 from "process";
6824
+ import { stripVTControlCharacters } from "util";
6825
+
6826
+ // node_modules/cli-cursor/index.js
6827
+ init_esm_shims();
6828
+ import process5 from "process";
6829
+
6830
+ // node_modules/restore-cursor/index.js
6831
+ init_esm_shims();
6832
+ import process4 from "process";
6833
+
6834
+ // node_modules/onetime/index.js
6835
+ init_esm_shims();
6836
+
6837
+ // node_modules/mimic-function/index.js
6838
+ init_esm_shims();
6839
+ var copyProperty = (to, from, property, ignoreNonConfigurable) => {
6840
+ if (property === "length" || property === "prototype") {
6841
+ return;
6842
+ }
6843
+ if (property === "arguments" || property === "caller") {
6844
+ return;
6845
+ }
6846
+ const toDescriptor = Object.getOwnPropertyDescriptor(to, property);
6847
+ const fromDescriptor = Object.getOwnPropertyDescriptor(from, property);
6848
+ if (!canCopyProperty(toDescriptor, fromDescriptor) && ignoreNonConfigurable) {
6849
+ return;
6850
+ }
6851
+ Object.defineProperty(to, property, fromDescriptor);
6852
+ };
6853
+ var canCopyProperty = function(toDescriptor, fromDescriptor) {
6854
+ return toDescriptor === void 0 || toDescriptor.configurable || toDescriptor.writable === fromDescriptor.writable && toDescriptor.enumerable === fromDescriptor.enumerable && toDescriptor.configurable === fromDescriptor.configurable && (toDescriptor.writable || toDescriptor.value === fromDescriptor.value);
6855
+ };
6856
+ var changePrototype = (to, from) => {
6857
+ const fromPrototype = Object.getPrototypeOf(from);
6858
+ if (fromPrototype === Object.getPrototypeOf(to)) {
6859
+ return;
6860
+ }
6861
+ Object.setPrototypeOf(to, fromPrototype);
6862
+ };
6863
+ var wrappedToString = (withName, fromBody) => `/* Wrapped ${withName}*/
6864
+ ${fromBody}`;
6865
+ var toStringDescriptor = Object.getOwnPropertyDescriptor(Function.prototype, "toString");
6866
+ var toStringName = Object.getOwnPropertyDescriptor(Function.prototype.toString, "name");
6867
+ var changeToString = (to, from, name) => {
6868
+ const withName = name === "" ? "" : `with ${name.trim()}() `;
6869
+ const newToString = wrappedToString.bind(null, withName, from.toString());
6870
+ Object.defineProperty(newToString, "name", toStringName);
6871
+ const { writable, enumerable, configurable } = toStringDescriptor;
6872
+ Object.defineProperty(to, "toString", { value: newToString, writable, enumerable, configurable });
6873
+ };
6874
+ function mimicFunction(to, from, { ignoreNonConfigurable = false } = {}) {
6875
+ const { name } = to;
6876
+ for (const property of Reflect.ownKeys(from)) {
6877
+ copyProperty(to, from, property, ignoreNonConfigurable);
6878
+ }
6879
+ changePrototype(to, from);
6880
+ changeToString(to, from, name);
6881
+ return to;
6882
+ }
6883
+
6884
+ // node_modules/onetime/index.js
6885
+ var calledFunctions = /* @__PURE__ */ new WeakMap();
6886
+ var onetime = (function_, options2 = {}) => {
6887
+ if (typeof function_ !== "function") {
6888
+ throw new TypeError("Expected a function");
6889
+ }
6890
+ let returnValue;
6891
+ let callCount = 0;
6892
+ const functionName = function_.displayName || function_.name || "<anonymous>";
6893
+ const onetime2 = function(...arguments_) {
6894
+ calledFunctions.set(onetime2, ++callCount);
6895
+ if (callCount === 1) {
6896
+ returnValue = function_.apply(this, arguments_);
6897
+ function_ = void 0;
6898
+ } else if (options2.throw === true) {
6899
+ throw new Error(`Function \`${functionName}\` can only be called once`);
6900
+ }
6901
+ return returnValue;
6902
+ };
6903
+ mimicFunction(onetime2, function_);
6904
+ calledFunctions.set(onetime2, callCount);
6905
+ return onetime2;
6906
+ };
6907
+ onetime.callCount = (function_) => {
6908
+ if (!calledFunctions.has(function_)) {
6909
+ throw new Error(`The given function \`${function_.name}\` is not wrapped by the \`onetime\` package`);
6910
+ }
6911
+ return calledFunctions.get(function_);
6912
+ };
6913
+ var onetime_default = onetime;
6914
+
6915
+ // node_modules/signal-exit/dist/mjs/index.js
6916
+ init_esm_shims();
6917
+
6918
+ // node_modules/signal-exit/dist/mjs/signals.js
6919
+ init_esm_shims();
6920
+ var signals = [];
6921
+ signals.push("SIGHUP", "SIGINT", "SIGTERM");
6922
+ if (process.platform !== "win32") {
6923
+ signals.push(
6924
+ "SIGALRM",
6925
+ "SIGABRT",
6926
+ "SIGVTALRM",
6927
+ "SIGXCPU",
6928
+ "SIGXFSZ",
6929
+ "SIGUSR2",
6930
+ "SIGTRAP",
6931
+ "SIGSYS",
6932
+ "SIGQUIT",
6933
+ "SIGIOT"
6934
+ // should detect profiler and enable/disable accordingly.
6935
+ // see #21
6936
+ // 'SIGPROF'
6937
+ );
6938
+ }
6939
+ if (process.platform === "linux") {
6940
+ signals.push("SIGIO", "SIGPOLL", "SIGPWR", "SIGSTKFLT");
6941
+ }
6942
+
6943
+ // node_modules/signal-exit/dist/mjs/index.js
6944
+ var processOk = (process9) => !!process9 && typeof process9 === "object" && typeof process9.removeListener === "function" && typeof process9.emit === "function" && typeof process9.reallyExit === "function" && typeof process9.listeners === "function" && typeof process9.kill === "function" && typeof process9.pid === "number" && typeof process9.on === "function";
6945
+ var kExitEmitter = /* @__PURE__ */ Symbol.for("signal-exit emitter");
6946
+ var global = globalThis;
6947
+ var ObjectDefineProperty = Object.defineProperty.bind(Object);
6948
+ var Emitter = class {
6949
+ emitted = {
6950
+ afterExit: false,
6951
+ exit: false
6952
+ };
6953
+ listeners = {
6954
+ afterExit: [],
6955
+ exit: []
6956
+ };
6957
+ count = 0;
6958
+ id = Math.random();
6959
+ constructor() {
6960
+ if (global[kExitEmitter]) {
6961
+ return global[kExitEmitter];
6962
+ }
6963
+ ObjectDefineProperty(global, kExitEmitter, {
6964
+ value: this,
6965
+ writable: false,
6966
+ enumerable: false,
6967
+ configurable: false
6968
+ });
6969
+ }
6970
+ on(ev, fn) {
6971
+ this.listeners[ev].push(fn);
6972
+ }
6973
+ removeListener(ev, fn) {
6974
+ const list = this.listeners[ev];
6975
+ const i = list.indexOf(fn);
6976
+ if (i === -1) {
6977
+ return;
6978
+ }
6979
+ if (i === 0 && list.length === 1) {
6980
+ list.length = 0;
6981
+ } else {
6982
+ list.splice(i, 1);
6983
+ }
6984
+ }
6985
+ emit(ev, code, signal) {
6986
+ if (this.emitted[ev]) {
6987
+ return false;
6988
+ }
6989
+ this.emitted[ev] = true;
6990
+ let ret = false;
6991
+ for (const fn of this.listeners[ev]) {
6992
+ ret = fn(code, signal) === true || ret;
6993
+ }
6994
+ if (ev === "exit") {
6995
+ ret = this.emit("afterExit", code, signal) || ret;
6996
+ }
6997
+ return ret;
6998
+ }
6999
+ };
7000
+ var SignalExitBase = class {
7001
+ };
7002
+ var signalExitWrap = (handler) => {
7003
+ return {
7004
+ onExit(cb, opts) {
7005
+ return handler.onExit(cb, opts);
7006
+ },
7007
+ load() {
7008
+ return handler.load();
7009
+ },
7010
+ unload() {
7011
+ return handler.unload();
7012
+ }
7013
+ };
7014
+ };
7015
+ var SignalExitFallback = class extends SignalExitBase {
7016
+ onExit() {
7017
+ return () => {
7018
+ };
7019
+ }
7020
+ load() {
7021
+ }
7022
+ unload() {
7023
+ }
7024
+ };
7025
+ var SignalExit = class extends SignalExitBase {
7026
+ // "SIGHUP" throws an `ENOSYS` error on Windows,
7027
+ // so use a supported signal instead
7028
+ /* c8 ignore start */
7029
+ #hupSig = process3.platform === "win32" ? "SIGINT" : "SIGHUP";
7030
+ /* c8 ignore stop */
7031
+ #emitter = new Emitter();
7032
+ #process;
7033
+ #originalProcessEmit;
7034
+ #originalProcessReallyExit;
7035
+ #sigListeners = {};
7036
+ #loaded = false;
7037
+ constructor(process9) {
7038
+ super();
7039
+ this.#process = process9;
7040
+ this.#sigListeners = {};
7041
+ for (const sig of signals) {
7042
+ this.#sigListeners[sig] = () => {
7043
+ const listeners = this.#process.listeners(sig);
7044
+ let { count } = this.#emitter;
7045
+ const p = process9;
7046
+ if (typeof p.__signal_exit_emitter__ === "object" && typeof p.__signal_exit_emitter__.count === "number") {
7047
+ count += p.__signal_exit_emitter__.count;
7048
+ }
7049
+ if (listeners.length === count) {
7050
+ this.unload();
7051
+ const ret = this.#emitter.emit("exit", null, sig);
7052
+ const s = sig === "SIGHUP" ? this.#hupSig : sig;
7053
+ if (!ret)
7054
+ process9.kill(process9.pid, s);
7055
+ }
7056
+ };
7057
+ }
7058
+ this.#originalProcessReallyExit = process9.reallyExit;
7059
+ this.#originalProcessEmit = process9.emit;
7060
+ }
7061
+ onExit(cb, opts) {
7062
+ if (!processOk(this.#process)) {
7063
+ return () => {
7064
+ };
7065
+ }
7066
+ if (this.#loaded === false) {
7067
+ this.load();
7068
+ }
7069
+ const ev = opts?.alwaysLast ? "afterExit" : "exit";
7070
+ this.#emitter.on(ev, cb);
7071
+ return () => {
7072
+ this.#emitter.removeListener(ev, cb);
7073
+ if (this.#emitter.listeners["exit"].length === 0 && this.#emitter.listeners["afterExit"].length === 0) {
7074
+ this.unload();
7075
+ }
7076
+ };
7077
+ }
7078
+ load() {
7079
+ if (this.#loaded) {
7080
+ return;
7081
+ }
7082
+ this.#loaded = true;
7083
+ this.#emitter.count += 1;
7084
+ for (const sig of signals) {
7085
+ try {
7086
+ const fn = this.#sigListeners[sig];
7087
+ if (fn)
7088
+ this.#process.on(sig, fn);
7089
+ } catch (_) {
7090
+ }
7091
+ }
7092
+ this.#process.emit = (ev, ...a) => {
7093
+ return this.#processEmit(ev, ...a);
7094
+ };
7095
+ this.#process.reallyExit = (code) => {
7096
+ return this.#processReallyExit(code);
7097
+ };
7098
+ }
7099
+ unload() {
7100
+ if (!this.#loaded) {
7101
+ return;
7102
+ }
7103
+ this.#loaded = false;
7104
+ signals.forEach((sig) => {
7105
+ const listener = this.#sigListeners[sig];
7106
+ if (!listener) {
7107
+ throw new Error("Listener not defined for signal: " + sig);
7108
+ }
7109
+ try {
7110
+ this.#process.removeListener(sig, listener);
7111
+ } catch (_) {
7112
+ }
7113
+ });
7114
+ this.#process.emit = this.#originalProcessEmit;
7115
+ this.#process.reallyExit = this.#originalProcessReallyExit;
7116
+ this.#emitter.count -= 1;
7117
+ }
7118
+ #processReallyExit(code) {
7119
+ if (!processOk(this.#process)) {
7120
+ return 0;
7121
+ }
7122
+ this.#process.exitCode = code || 0;
7123
+ this.#emitter.emit("exit", this.#process.exitCode, null);
7124
+ return this.#originalProcessReallyExit.call(this.#process, this.#process.exitCode);
7125
+ }
7126
+ #processEmit(ev, ...args) {
7127
+ const og = this.#originalProcessEmit;
7128
+ if (ev === "exit" && processOk(this.#process)) {
7129
+ if (typeof args[0] === "number") {
7130
+ this.#process.exitCode = args[0];
7131
+ }
7132
+ const ret = og.call(this.#process, ev, ...args);
7133
+ this.#emitter.emit("exit", this.#process.exitCode, null);
7134
+ return ret;
7135
+ } else {
7136
+ return og.call(this.#process, ev, ...args);
7137
+ }
7138
+ }
7139
+ };
7140
+ var process3 = globalThis.process;
7141
+ var {
7142
+ /**
7143
+ * Called when the process is exiting, whether via signal, explicit
7144
+ * exit, or running out of stuff to do.
7145
+ *
7146
+ * If the global process object is not suitable for instrumentation,
7147
+ * then this will be a no-op.
7148
+ *
7149
+ * Returns a function that may be used to unload signal-exit.
7150
+ */
7151
+ onExit,
7152
+ /**
7153
+ * Load the listeners. Likely you never need to call this, unless
7154
+ * doing a rather deep integration with signal-exit functionality.
7155
+ * Mostly exposed for the benefit of testing.
7156
+ *
7157
+ * @internal
7158
+ */
7159
+ load,
7160
+ /**
7161
+ * Unload the listeners. Likely you never need to call this, unless
7162
+ * doing a rather deep integration with signal-exit functionality.
7163
+ * Mostly exposed for the benefit of testing.
7164
+ *
7165
+ * @internal
7166
+ */
7167
+ unload
7168
+ } = signalExitWrap(processOk(process3) ? new SignalExit(process3) : new SignalExitFallback());
7169
+
7170
+ // node_modules/restore-cursor/index.js
7171
+ var terminal = process4.stderr.isTTY ? process4.stderr : process4.stdout.isTTY ? process4.stdout : void 0;
7172
+ var restoreCursor = terminal ? onetime_default(() => {
7173
+ onExit(() => {
7174
+ terminal.write("\x1B[?25h");
7175
+ }, { alwaysLast: true });
7176
+ }) : () => {
7177
+ };
7178
+ var restore_cursor_default = restoreCursor;
7179
+
7180
+ // node_modules/cli-cursor/index.js
7181
+ var isHidden = false;
7182
+ var cliCursor = {};
7183
+ cliCursor.show = (writableStream = process5.stderr) => {
7184
+ if (!writableStream.isTTY) {
7185
+ return;
7186
+ }
7187
+ isHidden = false;
7188
+ writableStream.write("\x1B[?25h");
7189
+ };
7190
+ cliCursor.hide = (writableStream = process5.stderr) => {
7191
+ if (!writableStream.isTTY) {
7192
+ return;
7193
+ }
7194
+ restore_cursor_default();
7195
+ isHidden = true;
7196
+ writableStream.write("\x1B[?25l");
7197
+ };
7198
+ cliCursor.toggle = (force, writableStream) => {
7199
+ if (force !== void 0) {
7200
+ isHidden = force;
7201
+ }
7202
+ if (isHidden) {
7203
+ cliCursor.show(writableStream);
7204
+ } else {
7205
+ cliCursor.hide(writableStream);
7206
+ }
7207
+ };
7208
+ var cli_cursor_default = cliCursor;
7209
+
7210
+ // node_modules/cli-spinners/index.js
7211
+ init_esm_shims();
7212
+
7213
+ // node_modules/cli-spinners/spinners.json
7214
+ var spinners_default = {
7215
+ dots: {
7216
+ interval: 80,
7217
+ frames: [
7218
+ "\u280B",
7219
+ "\u2819",
7220
+ "\u2839",
7221
+ "\u2838",
7222
+ "\u283C",
7223
+ "\u2834",
7224
+ "\u2826",
7225
+ "\u2827",
7226
+ "\u2807",
7227
+ "\u280F"
7228
+ ]
7229
+ },
7230
+ dots2: {
7231
+ interval: 80,
7232
+ frames: [
7233
+ "\u28FE",
7234
+ "\u28FD",
7235
+ "\u28FB",
7236
+ "\u28BF",
7237
+ "\u287F",
7238
+ "\u28DF",
7239
+ "\u28EF",
7240
+ "\u28F7"
7241
+ ]
7242
+ },
7243
+ dots3: {
7244
+ interval: 80,
7245
+ frames: [
7246
+ "\u280B",
7247
+ "\u2819",
7248
+ "\u281A",
7249
+ "\u281E",
7250
+ "\u2816",
7251
+ "\u2826",
7252
+ "\u2834",
7253
+ "\u2832",
7254
+ "\u2833",
7255
+ "\u2813"
7256
+ ]
7257
+ },
7258
+ dots4: {
7259
+ interval: 80,
7260
+ frames: [
7261
+ "\u2804",
7262
+ "\u2806",
7263
+ "\u2807",
7264
+ "\u280B",
7265
+ "\u2819",
7266
+ "\u2838",
7267
+ "\u2830",
7268
+ "\u2820",
7269
+ "\u2830",
7270
+ "\u2838",
7271
+ "\u2819",
7272
+ "\u280B",
7273
+ "\u2807",
7274
+ "\u2806"
7275
+ ]
7276
+ },
7277
+ dots5: {
7278
+ interval: 80,
7279
+ frames: [
7280
+ "\u280B",
7281
+ "\u2819",
7282
+ "\u281A",
7283
+ "\u2812",
7284
+ "\u2802",
7285
+ "\u2802",
7286
+ "\u2812",
7287
+ "\u2832",
7288
+ "\u2834",
7289
+ "\u2826",
7290
+ "\u2816",
7291
+ "\u2812",
7292
+ "\u2810",
7293
+ "\u2810",
7294
+ "\u2812",
7295
+ "\u2813",
7296
+ "\u280B"
7297
+ ]
7298
+ },
7299
+ dots6: {
7300
+ interval: 80,
7301
+ frames: [
7302
+ "\u2801",
7303
+ "\u2809",
7304
+ "\u2819",
7305
+ "\u281A",
7306
+ "\u2812",
7307
+ "\u2802",
7308
+ "\u2802",
7309
+ "\u2812",
7310
+ "\u2832",
7311
+ "\u2834",
7312
+ "\u2824",
7313
+ "\u2804",
7314
+ "\u2804",
7315
+ "\u2824",
7316
+ "\u2834",
7317
+ "\u2832",
7318
+ "\u2812",
7319
+ "\u2802",
7320
+ "\u2802",
7321
+ "\u2812",
7322
+ "\u281A",
7323
+ "\u2819",
7324
+ "\u2809",
7325
+ "\u2801"
7326
+ ]
7327
+ },
7328
+ dots7: {
7329
+ interval: 80,
7330
+ frames: [
7331
+ "\u2808",
7332
+ "\u2809",
7333
+ "\u280B",
7334
+ "\u2813",
7335
+ "\u2812",
7336
+ "\u2810",
7337
+ "\u2810",
7338
+ "\u2812",
7339
+ "\u2816",
7340
+ "\u2826",
7341
+ "\u2824",
7342
+ "\u2820",
7343
+ "\u2820",
7344
+ "\u2824",
7345
+ "\u2826",
7346
+ "\u2816",
7347
+ "\u2812",
7348
+ "\u2810",
7349
+ "\u2810",
7350
+ "\u2812",
7351
+ "\u2813",
7352
+ "\u280B",
7353
+ "\u2809",
7354
+ "\u2808"
7355
+ ]
7356
+ },
7357
+ dots8: {
7358
+ interval: 80,
7359
+ frames: [
7360
+ "\u2801",
7361
+ "\u2801",
7362
+ "\u2809",
7363
+ "\u2819",
7364
+ "\u281A",
7365
+ "\u2812",
7366
+ "\u2802",
7367
+ "\u2802",
7368
+ "\u2812",
7369
+ "\u2832",
7370
+ "\u2834",
7371
+ "\u2824",
7372
+ "\u2804",
7373
+ "\u2804",
7374
+ "\u2824",
7375
+ "\u2820",
7376
+ "\u2820",
7377
+ "\u2824",
7378
+ "\u2826",
7379
+ "\u2816",
7380
+ "\u2812",
7381
+ "\u2810",
7382
+ "\u2810",
7383
+ "\u2812",
7384
+ "\u2813",
7385
+ "\u280B",
7386
+ "\u2809",
7387
+ "\u2808",
7388
+ "\u2808"
7389
+ ]
7390
+ },
7391
+ dots9: {
7392
+ interval: 80,
7393
+ frames: [
7394
+ "\u28B9",
7395
+ "\u28BA",
7396
+ "\u28BC",
7397
+ "\u28F8",
7398
+ "\u28C7",
7399
+ "\u2867",
7400
+ "\u2857",
7401
+ "\u284F"
7402
+ ]
7403
+ },
7404
+ dots10: {
7405
+ interval: 80,
7406
+ frames: [
7407
+ "\u2884",
7408
+ "\u2882",
7409
+ "\u2881",
7410
+ "\u2841",
7411
+ "\u2848",
7412
+ "\u2850",
7413
+ "\u2860"
7414
+ ]
7415
+ },
7416
+ dots11: {
7417
+ interval: 100,
7418
+ frames: [
7419
+ "\u2801",
7420
+ "\u2802",
7421
+ "\u2804",
7422
+ "\u2840",
7423
+ "\u2880",
7424
+ "\u2820",
7425
+ "\u2810",
7426
+ "\u2808"
7427
+ ]
7428
+ },
7429
+ dots12: {
7430
+ interval: 80,
7431
+ frames: [
7432
+ "\u2880\u2800",
7433
+ "\u2840\u2800",
7434
+ "\u2804\u2800",
7435
+ "\u2882\u2800",
7436
+ "\u2842\u2800",
7437
+ "\u2805\u2800",
7438
+ "\u2883\u2800",
7439
+ "\u2843\u2800",
7440
+ "\u280D\u2800",
7441
+ "\u288B\u2800",
7442
+ "\u284B\u2800",
7443
+ "\u280D\u2801",
7444
+ "\u288B\u2801",
7445
+ "\u284B\u2801",
7446
+ "\u280D\u2809",
7447
+ "\u280B\u2809",
7448
+ "\u280B\u2809",
7449
+ "\u2809\u2819",
7450
+ "\u2809\u2819",
7451
+ "\u2809\u2829",
7452
+ "\u2808\u2899",
7453
+ "\u2808\u2859",
7454
+ "\u2888\u2829",
7455
+ "\u2840\u2899",
7456
+ "\u2804\u2859",
7457
+ "\u2882\u2829",
7458
+ "\u2842\u2898",
7459
+ "\u2805\u2858",
7460
+ "\u2883\u2828",
7461
+ "\u2843\u2890",
7462
+ "\u280D\u2850",
7463
+ "\u288B\u2820",
7464
+ "\u284B\u2880",
7465
+ "\u280D\u2841",
7466
+ "\u288B\u2801",
7467
+ "\u284B\u2801",
7468
+ "\u280D\u2809",
7469
+ "\u280B\u2809",
7470
+ "\u280B\u2809",
7471
+ "\u2809\u2819",
7472
+ "\u2809\u2819",
7473
+ "\u2809\u2829",
7474
+ "\u2808\u2899",
7475
+ "\u2808\u2859",
7476
+ "\u2808\u2829",
7477
+ "\u2800\u2899",
7478
+ "\u2800\u2859",
7479
+ "\u2800\u2829",
7480
+ "\u2800\u2898",
7481
+ "\u2800\u2858",
7482
+ "\u2800\u2828",
7483
+ "\u2800\u2890",
7484
+ "\u2800\u2850",
7485
+ "\u2800\u2820",
7486
+ "\u2800\u2880",
7487
+ "\u2800\u2840"
7488
+ ]
7489
+ },
7490
+ dots13: {
7491
+ interval: 80,
7492
+ frames: [
7493
+ "\u28FC",
7494
+ "\u28F9",
7495
+ "\u28BB",
7496
+ "\u283F",
7497
+ "\u285F",
7498
+ "\u28CF",
7499
+ "\u28E7",
7500
+ "\u28F6"
7501
+ ]
7502
+ },
7503
+ dots14: {
7504
+ interval: 80,
7505
+ frames: [
7506
+ "\u2809\u2809",
7507
+ "\u2808\u2819",
7508
+ "\u2800\u2839",
7509
+ "\u2800\u28B8",
7510
+ "\u2800\u28F0",
7511
+ "\u2880\u28E0",
7512
+ "\u28C0\u28C0",
7513
+ "\u28C4\u2840",
7514
+ "\u28C6\u2800",
7515
+ "\u2847\u2800",
7516
+ "\u280F\u2800",
7517
+ "\u280B\u2801"
7518
+ ]
7519
+ },
7520
+ dots8Bit: {
7521
+ interval: 80,
7522
+ frames: [
7523
+ "\u2800",
7524
+ "\u2801",
7525
+ "\u2802",
7526
+ "\u2803",
7527
+ "\u2804",
7528
+ "\u2805",
7529
+ "\u2806",
7530
+ "\u2807",
7531
+ "\u2840",
7532
+ "\u2841",
7533
+ "\u2842",
7534
+ "\u2843",
7535
+ "\u2844",
7536
+ "\u2845",
7537
+ "\u2846",
7538
+ "\u2847",
7539
+ "\u2808",
7540
+ "\u2809",
7541
+ "\u280A",
7542
+ "\u280B",
7543
+ "\u280C",
7544
+ "\u280D",
7545
+ "\u280E",
7546
+ "\u280F",
7547
+ "\u2848",
7548
+ "\u2849",
7549
+ "\u284A",
7550
+ "\u284B",
7551
+ "\u284C",
7552
+ "\u284D",
7553
+ "\u284E",
7554
+ "\u284F",
7555
+ "\u2810",
7556
+ "\u2811",
7557
+ "\u2812",
7558
+ "\u2813",
7559
+ "\u2814",
7560
+ "\u2815",
7561
+ "\u2816",
7562
+ "\u2817",
7563
+ "\u2850",
7564
+ "\u2851",
7565
+ "\u2852",
7566
+ "\u2853",
7567
+ "\u2854",
7568
+ "\u2855",
7569
+ "\u2856",
7570
+ "\u2857",
7571
+ "\u2818",
7572
+ "\u2819",
7573
+ "\u281A",
7574
+ "\u281B",
7575
+ "\u281C",
7576
+ "\u281D",
7577
+ "\u281E",
7578
+ "\u281F",
7579
+ "\u2858",
7580
+ "\u2859",
7581
+ "\u285A",
7582
+ "\u285B",
7583
+ "\u285C",
7584
+ "\u285D",
7585
+ "\u285E",
7586
+ "\u285F",
7587
+ "\u2820",
7588
+ "\u2821",
7589
+ "\u2822",
7590
+ "\u2823",
7591
+ "\u2824",
7592
+ "\u2825",
7593
+ "\u2826",
7594
+ "\u2827",
7595
+ "\u2860",
7596
+ "\u2861",
7597
+ "\u2862",
7598
+ "\u2863",
7599
+ "\u2864",
7600
+ "\u2865",
7601
+ "\u2866",
7602
+ "\u2867",
7603
+ "\u2828",
7604
+ "\u2829",
7605
+ "\u282A",
7606
+ "\u282B",
7607
+ "\u282C",
7608
+ "\u282D",
7609
+ "\u282E",
7610
+ "\u282F",
7611
+ "\u2868",
7612
+ "\u2869",
7613
+ "\u286A",
7614
+ "\u286B",
7615
+ "\u286C",
7616
+ "\u286D",
7617
+ "\u286E",
7618
+ "\u286F",
7619
+ "\u2830",
7620
+ "\u2831",
7621
+ "\u2832",
7622
+ "\u2833",
7623
+ "\u2834",
7624
+ "\u2835",
7625
+ "\u2836",
7626
+ "\u2837",
7627
+ "\u2870",
7628
+ "\u2871",
7629
+ "\u2872",
7630
+ "\u2873",
7631
+ "\u2874",
7632
+ "\u2875",
7633
+ "\u2876",
7634
+ "\u2877",
7635
+ "\u2838",
7636
+ "\u2839",
7637
+ "\u283A",
7638
+ "\u283B",
7639
+ "\u283C",
7640
+ "\u283D",
7641
+ "\u283E",
7642
+ "\u283F",
7643
+ "\u2878",
7644
+ "\u2879",
7645
+ "\u287A",
7646
+ "\u287B",
7647
+ "\u287C",
7648
+ "\u287D",
7649
+ "\u287E",
7650
+ "\u287F",
7651
+ "\u2880",
7652
+ "\u2881",
7653
+ "\u2882",
7654
+ "\u2883",
7655
+ "\u2884",
7656
+ "\u2885",
7657
+ "\u2886",
7658
+ "\u2887",
7659
+ "\u28C0",
7660
+ "\u28C1",
7661
+ "\u28C2",
7662
+ "\u28C3",
7663
+ "\u28C4",
7664
+ "\u28C5",
7665
+ "\u28C6",
7666
+ "\u28C7",
7667
+ "\u2888",
7668
+ "\u2889",
7669
+ "\u288A",
7670
+ "\u288B",
7671
+ "\u288C",
7672
+ "\u288D",
7673
+ "\u288E",
7674
+ "\u288F",
7675
+ "\u28C8",
7676
+ "\u28C9",
7677
+ "\u28CA",
7678
+ "\u28CB",
7679
+ "\u28CC",
7680
+ "\u28CD",
7681
+ "\u28CE",
7682
+ "\u28CF",
7683
+ "\u2890",
7684
+ "\u2891",
7685
+ "\u2892",
7686
+ "\u2893",
7687
+ "\u2894",
7688
+ "\u2895",
7689
+ "\u2896",
7690
+ "\u2897",
7691
+ "\u28D0",
7692
+ "\u28D1",
7693
+ "\u28D2",
7694
+ "\u28D3",
7695
+ "\u28D4",
7696
+ "\u28D5",
7697
+ "\u28D6",
7698
+ "\u28D7",
7699
+ "\u2898",
7700
+ "\u2899",
7701
+ "\u289A",
7702
+ "\u289B",
7703
+ "\u289C",
7704
+ "\u289D",
7705
+ "\u289E",
7706
+ "\u289F",
7707
+ "\u28D8",
7708
+ "\u28D9",
7709
+ "\u28DA",
7710
+ "\u28DB",
7711
+ "\u28DC",
7712
+ "\u28DD",
7713
+ "\u28DE",
7714
+ "\u28DF",
7715
+ "\u28A0",
7716
+ "\u28A1",
7717
+ "\u28A2",
7718
+ "\u28A3",
7719
+ "\u28A4",
7720
+ "\u28A5",
7721
+ "\u28A6",
7722
+ "\u28A7",
7723
+ "\u28E0",
7724
+ "\u28E1",
7725
+ "\u28E2",
7726
+ "\u28E3",
7727
+ "\u28E4",
7728
+ "\u28E5",
7729
+ "\u28E6",
7730
+ "\u28E7",
7731
+ "\u28A8",
7732
+ "\u28A9",
7733
+ "\u28AA",
7734
+ "\u28AB",
7735
+ "\u28AC",
7736
+ "\u28AD",
7737
+ "\u28AE",
7738
+ "\u28AF",
7739
+ "\u28E8",
7740
+ "\u28E9",
7741
+ "\u28EA",
7742
+ "\u28EB",
7743
+ "\u28EC",
7744
+ "\u28ED",
7745
+ "\u28EE",
7746
+ "\u28EF",
7747
+ "\u28B0",
7748
+ "\u28B1",
7749
+ "\u28B2",
7750
+ "\u28B3",
7751
+ "\u28B4",
7752
+ "\u28B5",
7753
+ "\u28B6",
7754
+ "\u28B7",
7755
+ "\u28F0",
7756
+ "\u28F1",
7757
+ "\u28F2",
7758
+ "\u28F3",
7759
+ "\u28F4",
7760
+ "\u28F5",
7761
+ "\u28F6",
7762
+ "\u28F7",
7763
+ "\u28B8",
7764
+ "\u28B9",
7765
+ "\u28BA",
7766
+ "\u28BB",
7767
+ "\u28BC",
7768
+ "\u28BD",
7769
+ "\u28BE",
7770
+ "\u28BF",
7771
+ "\u28F8",
7772
+ "\u28F9",
7773
+ "\u28FA",
7774
+ "\u28FB",
7775
+ "\u28FC",
7776
+ "\u28FD",
7777
+ "\u28FE",
7778
+ "\u28FF"
7779
+ ]
7780
+ },
7781
+ dotsCircle: {
7782
+ interval: 80,
7783
+ frames: [
7784
+ "\u288E ",
7785
+ "\u280E\u2801",
7786
+ "\u280A\u2811",
7787
+ "\u2808\u2831",
7788
+ " \u2871",
7789
+ "\u2880\u2870",
7790
+ "\u2884\u2860",
7791
+ "\u2886\u2840"
7792
+ ]
7793
+ },
7794
+ sand: {
7795
+ interval: 80,
7796
+ frames: [
7797
+ "\u2801",
7798
+ "\u2802",
7799
+ "\u2804",
7800
+ "\u2840",
7801
+ "\u2848",
7802
+ "\u2850",
7803
+ "\u2860",
7804
+ "\u28C0",
7805
+ "\u28C1",
7806
+ "\u28C2",
7807
+ "\u28C4",
7808
+ "\u28CC",
7809
+ "\u28D4",
7810
+ "\u28E4",
7811
+ "\u28E5",
7812
+ "\u28E6",
7813
+ "\u28EE",
7814
+ "\u28F6",
7815
+ "\u28F7",
7816
+ "\u28FF",
7817
+ "\u287F",
7818
+ "\u283F",
7819
+ "\u289F",
7820
+ "\u281F",
7821
+ "\u285B",
7822
+ "\u281B",
7823
+ "\u282B",
7824
+ "\u288B",
7825
+ "\u280B",
7826
+ "\u280D",
7827
+ "\u2849",
7828
+ "\u2809",
7829
+ "\u2811",
7830
+ "\u2821",
7831
+ "\u2881"
7832
+ ]
7833
+ },
7834
+ line: {
7835
+ interval: 130,
7836
+ frames: [
7837
+ "-",
7838
+ "\\",
7839
+ "|",
7840
+ "/"
7841
+ ]
7842
+ },
7843
+ line2: {
7844
+ interval: 100,
7845
+ frames: [
7846
+ "\u2802",
7847
+ "-",
7848
+ "\u2013",
7849
+ "\u2014",
7850
+ "\u2013",
7851
+ "-"
7852
+ ]
7853
+ },
7854
+ rollingLine: {
7855
+ interval: 80,
7856
+ frames: [
7857
+ "/ ",
7858
+ " - ",
7859
+ " \\ ",
7860
+ " |",
7861
+ " |",
7862
+ " \\ ",
7863
+ " - ",
7864
+ "/ "
7865
+ ]
7866
+ },
7867
+ pipe: {
7868
+ interval: 100,
7869
+ frames: [
7870
+ "\u2524",
7871
+ "\u2518",
7872
+ "\u2534",
7873
+ "\u2514",
7874
+ "\u251C",
7875
+ "\u250C",
7876
+ "\u252C",
7877
+ "\u2510"
7878
+ ]
7879
+ },
7880
+ simpleDots: {
7881
+ interval: 400,
7882
+ frames: [
7883
+ ". ",
7884
+ ".. ",
7885
+ "...",
7886
+ " "
7887
+ ]
7888
+ },
7889
+ simpleDotsScrolling: {
7890
+ interval: 200,
7891
+ frames: [
7892
+ ". ",
7893
+ ".. ",
7894
+ "...",
7895
+ " ..",
7896
+ " .",
7897
+ " "
7898
+ ]
7899
+ },
7900
+ star: {
7901
+ interval: 70,
7902
+ frames: [
7903
+ "\u2736",
7904
+ "\u2738",
7905
+ "\u2739",
7906
+ "\u273A",
7907
+ "\u2739",
7908
+ "\u2737"
7909
+ ]
7910
+ },
7911
+ star2: {
7912
+ interval: 80,
7913
+ frames: [
7914
+ "+",
7915
+ "x",
7916
+ "*"
7917
+ ]
7918
+ },
7919
+ flip: {
7920
+ interval: 70,
7921
+ frames: [
7922
+ "_",
7923
+ "_",
7924
+ "_",
7925
+ "-",
7926
+ "`",
7927
+ "`",
7928
+ "'",
7929
+ "\xB4",
7930
+ "-",
7931
+ "_",
7932
+ "_",
7933
+ "_"
7934
+ ]
7935
+ },
7936
+ hamburger: {
7937
+ interval: 100,
7938
+ frames: [
7939
+ "\u2631",
7940
+ "\u2632",
7941
+ "\u2634"
7942
+ ]
7943
+ },
7944
+ growVertical: {
7945
+ interval: 120,
7946
+ frames: [
7947
+ "\u2581",
7948
+ "\u2583",
7949
+ "\u2584",
7950
+ "\u2585",
7951
+ "\u2586",
7952
+ "\u2587",
7953
+ "\u2586",
7954
+ "\u2585",
7955
+ "\u2584",
7956
+ "\u2583"
7957
+ ]
7958
+ },
7959
+ growHorizontal: {
7960
+ interval: 120,
7961
+ frames: [
7962
+ "\u258F",
7963
+ "\u258E",
7964
+ "\u258D",
7965
+ "\u258C",
7966
+ "\u258B",
7967
+ "\u258A",
7968
+ "\u2589",
7969
+ "\u258A",
7970
+ "\u258B",
7971
+ "\u258C",
7972
+ "\u258D",
7973
+ "\u258E"
7974
+ ]
7975
+ },
7976
+ balloon: {
7977
+ interval: 140,
7978
+ frames: [
7979
+ " ",
7980
+ ".",
7981
+ "o",
7982
+ "O",
7983
+ "@",
7984
+ "*",
7985
+ " "
7986
+ ]
7987
+ },
7988
+ balloon2: {
7989
+ interval: 120,
7990
+ frames: [
7991
+ ".",
7992
+ "o",
7993
+ "O",
7994
+ "\xB0",
7995
+ "O",
7996
+ "o",
7997
+ "."
7998
+ ]
7999
+ },
8000
+ noise: {
8001
+ interval: 100,
8002
+ frames: [
8003
+ "\u2593",
8004
+ "\u2592",
8005
+ "\u2591"
8006
+ ]
8007
+ },
8008
+ bounce: {
8009
+ interval: 120,
8010
+ frames: [
8011
+ "\u2801",
8012
+ "\u2802",
8013
+ "\u2804",
8014
+ "\u2802"
8015
+ ]
8016
+ },
8017
+ boxBounce: {
8018
+ interval: 120,
8019
+ frames: [
8020
+ "\u2596",
8021
+ "\u2598",
8022
+ "\u259D",
8023
+ "\u2597"
8024
+ ]
8025
+ },
8026
+ boxBounce2: {
8027
+ interval: 100,
8028
+ frames: [
8029
+ "\u258C",
8030
+ "\u2580",
8031
+ "\u2590",
8032
+ "\u2584"
8033
+ ]
8034
+ },
8035
+ triangle: {
8036
+ interval: 50,
8037
+ frames: [
8038
+ "\u25E2",
8039
+ "\u25E3",
8040
+ "\u25E4",
8041
+ "\u25E5"
8042
+ ]
8043
+ },
8044
+ binary: {
8045
+ interval: 80,
8046
+ frames: [
8047
+ "010010",
8048
+ "001100",
8049
+ "100101",
8050
+ "111010",
8051
+ "111101",
8052
+ "010111",
8053
+ "101011",
8054
+ "111000",
8055
+ "110011",
8056
+ "110101"
8057
+ ]
8058
+ },
8059
+ arc: {
8060
+ interval: 100,
8061
+ frames: [
8062
+ "\u25DC",
8063
+ "\u25E0",
8064
+ "\u25DD",
8065
+ "\u25DE",
8066
+ "\u25E1",
8067
+ "\u25DF"
8068
+ ]
8069
+ },
8070
+ circle: {
8071
+ interval: 120,
8072
+ frames: [
8073
+ "\u25E1",
8074
+ "\u2299",
8075
+ "\u25E0"
8076
+ ]
8077
+ },
8078
+ squareCorners: {
8079
+ interval: 180,
8080
+ frames: [
8081
+ "\u25F0",
8082
+ "\u25F3",
8083
+ "\u25F2",
8084
+ "\u25F1"
8085
+ ]
8086
+ },
8087
+ circleQuarters: {
8088
+ interval: 120,
8089
+ frames: [
8090
+ "\u25F4",
8091
+ "\u25F7",
8092
+ "\u25F6",
8093
+ "\u25F5"
8094
+ ]
8095
+ },
8096
+ circleHalves: {
8097
+ interval: 50,
8098
+ frames: [
8099
+ "\u25D0",
8100
+ "\u25D3",
8101
+ "\u25D1",
8102
+ "\u25D2"
8103
+ ]
8104
+ },
8105
+ squish: {
8106
+ interval: 100,
8107
+ frames: [
8108
+ "\u256B",
8109
+ "\u256A"
8110
+ ]
8111
+ },
8112
+ toggle: {
8113
+ interval: 250,
8114
+ frames: [
8115
+ "\u22B6",
8116
+ "\u22B7"
8117
+ ]
8118
+ },
8119
+ toggle2: {
8120
+ interval: 80,
8121
+ frames: [
8122
+ "\u25AB",
8123
+ "\u25AA"
8124
+ ]
8125
+ },
8126
+ toggle3: {
8127
+ interval: 120,
8128
+ frames: [
8129
+ "\u25A1",
8130
+ "\u25A0"
8131
+ ]
8132
+ },
8133
+ toggle4: {
8134
+ interval: 100,
8135
+ frames: [
8136
+ "\u25A0",
8137
+ "\u25A1",
8138
+ "\u25AA",
8139
+ "\u25AB"
8140
+ ]
8141
+ },
8142
+ toggle5: {
8143
+ interval: 100,
8144
+ frames: [
8145
+ "\u25AE",
8146
+ "\u25AF"
8147
+ ]
8148
+ },
8149
+ toggle6: {
8150
+ interval: 300,
8151
+ frames: [
8152
+ "\u101D",
8153
+ "\u1040"
8154
+ ]
8155
+ },
8156
+ toggle7: {
8157
+ interval: 80,
8158
+ frames: [
8159
+ "\u29BE",
8160
+ "\u29BF"
8161
+ ]
8162
+ },
8163
+ toggle8: {
8164
+ interval: 100,
8165
+ frames: [
8166
+ "\u25CD",
8167
+ "\u25CC"
8168
+ ]
8169
+ },
8170
+ toggle9: {
8171
+ interval: 100,
8172
+ frames: [
8173
+ "\u25C9",
8174
+ "\u25CE"
8175
+ ]
8176
+ },
8177
+ toggle10: {
8178
+ interval: 100,
8179
+ frames: [
8180
+ "\u3282",
8181
+ "\u3280",
8182
+ "\u3281"
8183
+ ]
8184
+ },
8185
+ toggle11: {
8186
+ interval: 50,
8187
+ frames: [
8188
+ "\u29C7",
8189
+ "\u29C6"
8190
+ ]
8191
+ },
8192
+ toggle12: {
8193
+ interval: 120,
8194
+ frames: [
8195
+ "\u2617",
8196
+ "\u2616"
8197
+ ]
8198
+ },
8199
+ toggle13: {
8200
+ interval: 80,
8201
+ frames: [
8202
+ "=",
8203
+ "*",
8204
+ "-"
8205
+ ]
8206
+ },
8207
+ arrow: {
8208
+ interval: 100,
8209
+ frames: [
8210
+ "\u2190",
8211
+ "\u2196",
8212
+ "\u2191",
8213
+ "\u2197",
8214
+ "\u2192",
8215
+ "\u2198",
8216
+ "\u2193",
8217
+ "\u2199"
8218
+ ]
8219
+ },
8220
+ arrow2: {
8221
+ interval: 80,
8222
+ frames: [
8223
+ "\u2B06\uFE0F ",
8224
+ "\u2197\uFE0F ",
8225
+ "\u27A1\uFE0F ",
8226
+ "\u2198\uFE0F ",
8227
+ "\u2B07\uFE0F ",
8228
+ "\u2199\uFE0F ",
8229
+ "\u2B05\uFE0F ",
8230
+ "\u2196\uFE0F "
8231
+ ]
8232
+ },
8233
+ arrow3: {
8234
+ interval: 120,
8235
+ frames: [
8236
+ "\u25B9\u25B9\u25B9\u25B9\u25B9",
8237
+ "\u25B8\u25B9\u25B9\u25B9\u25B9",
8238
+ "\u25B9\u25B8\u25B9\u25B9\u25B9",
8239
+ "\u25B9\u25B9\u25B8\u25B9\u25B9",
8240
+ "\u25B9\u25B9\u25B9\u25B8\u25B9",
8241
+ "\u25B9\u25B9\u25B9\u25B9\u25B8"
8242
+ ]
8243
+ },
8244
+ bouncingBar: {
8245
+ interval: 80,
8246
+ frames: [
8247
+ "[ ]",
8248
+ "[= ]",
8249
+ "[== ]",
8250
+ "[=== ]",
8251
+ "[====]",
8252
+ "[ ===]",
8253
+ "[ ==]",
8254
+ "[ =]",
8255
+ "[ ]",
8256
+ "[ =]",
8257
+ "[ ==]",
8258
+ "[ ===]",
8259
+ "[====]",
8260
+ "[=== ]",
8261
+ "[== ]",
8262
+ "[= ]"
8263
+ ]
8264
+ },
8265
+ bouncingBall: {
8266
+ interval: 80,
8267
+ frames: [
8268
+ "( \u25CF )",
8269
+ "( \u25CF )",
8270
+ "( \u25CF )",
8271
+ "( \u25CF )",
8272
+ "( \u25CF)",
8273
+ "( \u25CF )",
8274
+ "( \u25CF )",
8275
+ "( \u25CF )",
8276
+ "( \u25CF )",
8277
+ "(\u25CF )"
8278
+ ]
8279
+ },
8280
+ smiley: {
8281
+ interval: 200,
8282
+ frames: [
8283
+ "\u{1F604} ",
8284
+ "\u{1F61D} "
8285
+ ]
8286
+ },
8287
+ monkey: {
8288
+ interval: 300,
8289
+ frames: [
8290
+ "\u{1F648} ",
8291
+ "\u{1F648} ",
8292
+ "\u{1F649} ",
8293
+ "\u{1F64A} "
8294
+ ]
8295
+ },
8296
+ hearts: {
8297
+ interval: 100,
8298
+ frames: [
8299
+ "\u{1F49B} ",
8300
+ "\u{1F499} ",
8301
+ "\u{1F49C} ",
8302
+ "\u{1F49A} ",
8303
+ "\u{1F497} "
8304
+ ]
8305
+ },
8306
+ clock: {
8307
+ interval: 100,
8308
+ frames: [
8309
+ "\u{1F55B} ",
8310
+ "\u{1F550} ",
8311
+ "\u{1F551} ",
8312
+ "\u{1F552} ",
8313
+ "\u{1F553} ",
8314
+ "\u{1F554} ",
8315
+ "\u{1F555} ",
8316
+ "\u{1F556} ",
8317
+ "\u{1F557} ",
8318
+ "\u{1F558} ",
8319
+ "\u{1F559} ",
8320
+ "\u{1F55A} "
8321
+ ]
8322
+ },
8323
+ earth: {
8324
+ interval: 180,
8325
+ frames: [
8326
+ "\u{1F30D} ",
8327
+ "\u{1F30E} ",
8328
+ "\u{1F30F} "
8329
+ ]
8330
+ },
8331
+ material: {
8332
+ interval: 17,
8333
+ frames: [
8334
+ "\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
8335
+ "\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
8336
+ "\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
8337
+ "\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
8338
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
8339
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
8340
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
8341
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
8342
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
8343
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
8344
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
8345
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
8346
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
8347
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581",
8348
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581",
8349
+ "\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581",
8350
+ "\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581",
8351
+ "\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581",
8352
+ "\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581",
8353
+ "\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581",
8354
+ "\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581",
8355
+ "\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581",
8356
+ "\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581",
8357
+ "\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581",
8358
+ "\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581",
8359
+ "\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581",
8360
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588",
8361
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588",
8362
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588",
8363
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588",
8364
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588",
8365
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588",
8366
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588",
8367
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588",
8368
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588",
8369
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588",
8370
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588",
8371
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588",
8372
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588",
8373
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588",
8374
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588",
8375
+ "\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588",
8376
+ "\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588",
8377
+ "\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588",
8378
+ "\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588",
8379
+ "\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588",
8380
+ "\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588",
8381
+ "\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588",
8382
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588",
8383
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
8384
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
8385
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
8386
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
8387
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
8388
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
8389
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
8390
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
8391
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581",
8392
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581",
8393
+ "\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581",
8394
+ "\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581",
8395
+ "\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581",
8396
+ "\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581",
8397
+ "\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581",
8398
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581",
8399
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581",
8400
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581",
8401
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581",
8402
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581",
8403
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581",
8404
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581",
8405
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581",
8406
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581",
8407
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581",
8408
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588",
8409
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588",
8410
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588",
8411
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588",
8412
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588",
8413
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588",
8414
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588",
8415
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588",
8416
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588",
8417
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588",
8418
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588",
8419
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588",
8420
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588",
8421
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588",
8422
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
8423
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
8424
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581",
8425
+ "\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581"
8426
+ ]
8427
+ },
8428
+ moon: {
8429
+ interval: 80,
8430
+ frames: [
8431
+ "\u{1F311} ",
8432
+ "\u{1F312} ",
8433
+ "\u{1F313} ",
8434
+ "\u{1F314} ",
8435
+ "\u{1F315} ",
8436
+ "\u{1F316} ",
8437
+ "\u{1F317} ",
8438
+ "\u{1F318} "
8439
+ ]
8440
+ },
8441
+ runner: {
8442
+ interval: 140,
8443
+ frames: [
8444
+ "\u{1F6B6} ",
8445
+ "\u{1F3C3} "
8446
+ ]
8447
+ },
8448
+ pong: {
8449
+ interval: 80,
8450
+ frames: [
8451
+ "\u2590\u2802 \u258C",
8452
+ "\u2590\u2808 \u258C",
8453
+ "\u2590 \u2802 \u258C",
8454
+ "\u2590 \u2820 \u258C",
8455
+ "\u2590 \u2840 \u258C",
8456
+ "\u2590 \u2820 \u258C",
8457
+ "\u2590 \u2802 \u258C",
8458
+ "\u2590 \u2808 \u258C",
8459
+ "\u2590 \u2802 \u258C",
8460
+ "\u2590 \u2820 \u258C",
8461
+ "\u2590 \u2840 \u258C",
8462
+ "\u2590 \u2820 \u258C",
8463
+ "\u2590 \u2802 \u258C",
8464
+ "\u2590 \u2808 \u258C",
8465
+ "\u2590 \u2802\u258C",
8466
+ "\u2590 \u2820\u258C",
8467
+ "\u2590 \u2840\u258C",
8468
+ "\u2590 \u2820 \u258C",
8469
+ "\u2590 \u2802 \u258C",
8470
+ "\u2590 \u2808 \u258C",
8471
+ "\u2590 \u2802 \u258C",
8472
+ "\u2590 \u2820 \u258C",
8473
+ "\u2590 \u2840 \u258C",
8474
+ "\u2590 \u2820 \u258C",
8475
+ "\u2590 \u2802 \u258C",
8476
+ "\u2590 \u2808 \u258C",
8477
+ "\u2590 \u2802 \u258C",
8478
+ "\u2590 \u2820 \u258C",
8479
+ "\u2590 \u2840 \u258C",
8480
+ "\u2590\u2820 \u258C"
8481
+ ]
8482
+ },
8483
+ shark: {
8484
+ interval: 120,
8485
+ frames: [
8486
+ "\u2590|\\____________\u258C",
8487
+ "\u2590_|\\___________\u258C",
8488
+ "\u2590__|\\__________\u258C",
8489
+ "\u2590___|\\_________\u258C",
8490
+ "\u2590____|\\________\u258C",
8491
+ "\u2590_____|\\_______\u258C",
8492
+ "\u2590______|\\______\u258C",
8493
+ "\u2590_______|\\_____\u258C",
8494
+ "\u2590________|\\____\u258C",
8495
+ "\u2590_________|\\___\u258C",
8496
+ "\u2590__________|\\__\u258C",
8497
+ "\u2590___________|\\_\u258C",
8498
+ "\u2590____________|\\\u258C",
8499
+ "\u2590____________/|\u258C",
8500
+ "\u2590___________/|_\u258C",
8501
+ "\u2590__________/|__\u258C",
8502
+ "\u2590_________/|___\u258C",
8503
+ "\u2590________/|____\u258C",
8504
+ "\u2590_______/|_____\u258C",
8505
+ "\u2590______/|______\u258C",
8506
+ "\u2590_____/|_______\u258C",
8507
+ "\u2590____/|________\u258C",
8508
+ "\u2590___/|_________\u258C",
8509
+ "\u2590__/|__________\u258C",
8510
+ "\u2590_/|___________\u258C",
8511
+ "\u2590/|____________\u258C"
8512
+ ]
8513
+ },
8514
+ dqpb: {
8515
+ interval: 100,
8516
+ frames: [
8517
+ "d",
8518
+ "q",
8519
+ "p",
8520
+ "b"
8521
+ ]
8522
+ },
8523
+ weather: {
8524
+ interval: 100,
8525
+ frames: [
8526
+ "\u2600\uFE0F ",
8527
+ "\u2600\uFE0F ",
8528
+ "\u2600\uFE0F ",
8529
+ "\u{1F324} ",
8530
+ "\u26C5\uFE0F ",
8531
+ "\u{1F325} ",
8532
+ "\u2601\uFE0F ",
8533
+ "\u{1F327} ",
8534
+ "\u{1F328} ",
8535
+ "\u{1F327} ",
8536
+ "\u{1F328} ",
8537
+ "\u{1F327} ",
8538
+ "\u{1F328} ",
8539
+ "\u26C8 ",
8540
+ "\u{1F328} ",
8541
+ "\u{1F327} ",
8542
+ "\u{1F328} ",
8543
+ "\u2601\uFE0F ",
8544
+ "\u{1F325} ",
8545
+ "\u26C5\uFE0F ",
8546
+ "\u{1F324} ",
8547
+ "\u2600\uFE0F ",
8548
+ "\u2600\uFE0F "
8549
+ ]
8550
+ },
8551
+ christmas: {
8552
+ interval: 400,
8553
+ frames: [
8554
+ "\u{1F332}",
8555
+ "\u{1F384}"
8556
+ ]
8557
+ },
8558
+ grenade: {
8559
+ interval: 80,
8560
+ frames: [
8561
+ "\u060C ",
8562
+ "\u2032 ",
8563
+ " \xB4 ",
8564
+ " \u203E ",
8565
+ " \u2E0C",
8566
+ " \u2E0A",
8567
+ " |",
8568
+ " \u204E",
8569
+ " \u2055",
8570
+ " \u0DF4 ",
8571
+ " \u2053",
8572
+ " ",
8573
+ " ",
8574
+ " "
8575
+ ]
8576
+ },
8577
+ point: {
8578
+ interval: 125,
8579
+ frames: [
8580
+ "\u2219\u2219\u2219",
8581
+ "\u25CF\u2219\u2219",
8582
+ "\u2219\u25CF\u2219",
8583
+ "\u2219\u2219\u25CF",
8584
+ "\u2219\u2219\u2219"
8585
+ ]
8586
+ },
8587
+ layer: {
8588
+ interval: 150,
8589
+ frames: [
8590
+ "-",
8591
+ "=",
8592
+ "\u2261"
8593
+ ]
8594
+ },
8595
+ betaWave: {
8596
+ interval: 80,
8597
+ frames: [
8598
+ "\u03C1\u03B2\u03B2\u03B2\u03B2\u03B2\u03B2",
8599
+ "\u03B2\u03C1\u03B2\u03B2\u03B2\u03B2\u03B2",
8600
+ "\u03B2\u03B2\u03C1\u03B2\u03B2\u03B2\u03B2",
8601
+ "\u03B2\u03B2\u03B2\u03C1\u03B2\u03B2\u03B2",
8602
+ "\u03B2\u03B2\u03B2\u03B2\u03C1\u03B2\u03B2",
8603
+ "\u03B2\u03B2\u03B2\u03B2\u03B2\u03C1\u03B2",
8604
+ "\u03B2\u03B2\u03B2\u03B2\u03B2\u03B2\u03C1"
8605
+ ]
8606
+ },
8607
+ fingerDance: {
8608
+ interval: 160,
8609
+ frames: [
8610
+ "\u{1F918} ",
8611
+ "\u{1F91F} ",
8612
+ "\u{1F596} ",
8613
+ "\u270B ",
8614
+ "\u{1F91A} ",
8615
+ "\u{1F446} "
8616
+ ]
8617
+ },
8618
+ fistBump: {
8619
+ interval: 80,
8620
+ frames: [
8621
+ "\u{1F91C}\u3000\u3000\u3000\u3000\u{1F91B} ",
8622
+ "\u{1F91C}\u3000\u3000\u3000\u3000\u{1F91B} ",
8623
+ "\u{1F91C}\u3000\u3000\u3000\u3000\u{1F91B} ",
8624
+ "\u3000\u{1F91C}\u3000\u3000\u{1F91B}\u3000 ",
8625
+ "\u3000\u3000\u{1F91C}\u{1F91B}\u3000\u3000 ",
8626
+ "\u3000\u{1F91C}\u2728\u{1F91B}\u3000\u3000 ",
8627
+ "\u{1F91C}\u3000\u2728\u3000\u{1F91B}\u3000 "
8628
+ ]
8629
+ },
8630
+ soccerHeader: {
8631
+ interval: 80,
8632
+ frames: [
8633
+ " \u{1F9D1}\u26BD\uFE0F \u{1F9D1} ",
8634
+ "\u{1F9D1} \u26BD\uFE0F \u{1F9D1} ",
8635
+ "\u{1F9D1} \u26BD\uFE0F \u{1F9D1} ",
8636
+ "\u{1F9D1} \u26BD\uFE0F \u{1F9D1} ",
8637
+ "\u{1F9D1} \u26BD\uFE0F \u{1F9D1} ",
8638
+ "\u{1F9D1} \u26BD\uFE0F \u{1F9D1} ",
8639
+ "\u{1F9D1} \u26BD\uFE0F\u{1F9D1} ",
8640
+ "\u{1F9D1} \u26BD\uFE0F \u{1F9D1} ",
8641
+ "\u{1F9D1} \u26BD\uFE0F \u{1F9D1} ",
8642
+ "\u{1F9D1} \u26BD\uFE0F \u{1F9D1} ",
8643
+ "\u{1F9D1} \u26BD\uFE0F \u{1F9D1} ",
8644
+ "\u{1F9D1} \u26BD\uFE0F \u{1F9D1} "
8645
+ ]
8646
+ },
8647
+ mindblown: {
8648
+ interval: 160,
8649
+ frames: [
8650
+ "\u{1F610} ",
8651
+ "\u{1F610} ",
8652
+ "\u{1F62E} ",
8653
+ "\u{1F62E} ",
8654
+ "\u{1F626} ",
8655
+ "\u{1F626} ",
8656
+ "\u{1F627} ",
8657
+ "\u{1F627} ",
8658
+ "\u{1F92F} ",
8659
+ "\u{1F4A5} ",
8660
+ "\u2728 ",
8661
+ "\u3000 ",
8662
+ "\u3000 ",
8663
+ "\u3000 "
8664
+ ]
8665
+ },
8666
+ speaker: {
8667
+ interval: 160,
8668
+ frames: [
8669
+ "\u{1F508} ",
8670
+ "\u{1F509} ",
8671
+ "\u{1F50A} ",
8672
+ "\u{1F509} "
8673
+ ]
8674
+ },
8675
+ orangePulse: {
8676
+ interval: 100,
8677
+ frames: [
8678
+ "\u{1F538} ",
8679
+ "\u{1F536} ",
8680
+ "\u{1F7E0} ",
8681
+ "\u{1F7E0} ",
8682
+ "\u{1F536} "
8683
+ ]
8684
+ },
8685
+ bluePulse: {
8686
+ interval: 100,
8687
+ frames: [
8688
+ "\u{1F539} ",
8689
+ "\u{1F537} ",
8690
+ "\u{1F535} ",
8691
+ "\u{1F535} ",
8692
+ "\u{1F537} "
8693
+ ]
8694
+ },
8695
+ orangeBluePulse: {
8696
+ interval: 100,
8697
+ frames: [
8698
+ "\u{1F538} ",
8699
+ "\u{1F536} ",
8700
+ "\u{1F7E0} ",
8701
+ "\u{1F7E0} ",
8702
+ "\u{1F536} ",
8703
+ "\u{1F539} ",
8704
+ "\u{1F537} ",
8705
+ "\u{1F535} ",
8706
+ "\u{1F535} ",
8707
+ "\u{1F537} "
8708
+ ]
8709
+ },
8710
+ timeTravel: {
8711
+ interval: 100,
8712
+ frames: [
8713
+ "\u{1F55B} ",
8714
+ "\u{1F55A} ",
8715
+ "\u{1F559} ",
8716
+ "\u{1F558} ",
8717
+ "\u{1F557} ",
8718
+ "\u{1F556} ",
8719
+ "\u{1F555} ",
8720
+ "\u{1F554} ",
8721
+ "\u{1F553} ",
8722
+ "\u{1F552} ",
8723
+ "\u{1F551} ",
8724
+ "\u{1F550} "
8725
+ ]
8726
+ },
8727
+ aesthetic: {
8728
+ interval: 80,
8729
+ frames: [
8730
+ "\u25B0\u25B1\u25B1\u25B1\u25B1\u25B1\u25B1",
8731
+ "\u25B0\u25B0\u25B1\u25B1\u25B1\u25B1\u25B1",
8732
+ "\u25B0\u25B0\u25B0\u25B1\u25B1\u25B1\u25B1",
8733
+ "\u25B0\u25B0\u25B0\u25B0\u25B1\u25B1\u25B1",
8734
+ "\u25B0\u25B0\u25B0\u25B0\u25B0\u25B1\u25B1",
8735
+ "\u25B0\u25B0\u25B0\u25B0\u25B0\u25B0\u25B1",
8736
+ "\u25B0\u25B0\u25B0\u25B0\u25B0\u25B0\u25B0",
8737
+ "\u25B0\u25B1\u25B1\u25B1\u25B1\u25B1\u25B1"
8738
+ ]
8739
+ },
8740
+ dwarfFortress: {
8741
+ interval: 80,
8742
+ frames: [
8743
+ " \u2588\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
8744
+ "\u263A\u2588\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
8745
+ "\u263A\u2588\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
8746
+ "\u263A\u2593\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
8747
+ "\u263A\u2593\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
8748
+ "\u263A\u2592\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
8749
+ "\u263A\u2592\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
8750
+ "\u263A\u2591\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
8751
+ "\u263A\u2591\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
8752
+ "\u263A \u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
8753
+ " \u263A\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
8754
+ " \u263A\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
8755
+ " \u263A\u2593\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
8756
+ " \u263A\u2593\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
8757
+ " \u263A\u2592\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
8758
+ " \u263A\u2592\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
8759
+ " \u263A\u2591\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
8760
+ " \u263A\u2591\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
8761
+ " \u263A \u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
8762
+ " \u263A\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
8763
+ " \u263A\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
8764
+ " \u263A\u2593\u2588\u2588\u2588\xA3\xA3\xA3 ",
8765
+ " \u263A\u2593\u2588\u2588\u2588\xA3\xA3\xA3 ",
8766
+ " \u263A\u2592\u2588\u2588\u2588\xA3\xA3\xA3 ",
8767
+ " \u263A\u2592\u2588\u2588\u2588\xA3\xA3\xA3 ",
8768
+ " \u263A\u2591\u2588\u2588\u2588\xA3\xA3\xA3 ",
8769
+ " \u263A\u2591\u2588\u2588\u2588\xA3\xA3\xA3 ",
8770
+ " \u263A \u2588\u2588\u2588\xA3\xA3\xA3 ",
8771
+ " \u263A\u2588\u2588\u2588\xA3\xA3\xA3 ",
8772
+ " \u263A\u2588\u2588\u2588\xA3\xA3\xA3 ",
8773
+ " \u263A\u2593\u2588\u2588\xA3\xA3\xA3 ",
8774
+ " \u263A\u2593\u2588\u2588\xA3\xA3\xA3 ",
8775
+ " \u263A\u2592\u2588\u2588\xA3\xA3\xA3 ",
8776
+ " \u263A\u2592\u2588\u2588\xA3\xA3\xA3 ",
8777
+ " \u263A\u2591\u2588\u2588\xA3\xA3\xA3 ",
8778
+ " \u263A\u2591\u2588\u2588\xA3\xA3\xA3 ",
8779
+ " \u263A \u2588\u2588\xA3\xA3\xA3 ",
8780
+ " \u263A\u2588\u2588\xA3\xA3\xA3 ",
8781
+ " \u263A\u2588\u2588\xA3\xA3\xA3 ",
8782
+ " \u263A\u2593\u2588\xA3\xA3\xA3 ",
8783
+ " \u263A\u2593\u2588\xA3\xA3\xA3 ",
8784
+ " \u263A\u2592\u2588\xA3\xA3\xA3 ",
8785
+ " \u263A\u2592\u2588\xA3\xA3\xA3 ",
8786
+ " \u263A\u2591\u2588\xA3\xA3\xA3 ",
8787
+ " \u263A\u2591\u2588\xA3\xA3\xA3 ",
8788
+ " \u263A \u2588\xA3\xA3\xA3 ",
8789
+ " \u263A\u2588\xA3\xA3\xA3 ",
8790
+ " \u263A\u2588\xA3\xA3\xA3 ",
8791
+ " \u263A\u2593\xA3\xA3\xA3 ",
8792
+ " \u263A\u2593\xA3\xA3\xA3 ",
8793
+ " \u263A\u2592\xA3\xA3\xA3 ",
8794
+ " \u263A\u2592\xA3\xA3\xA3 ",
8795
+ " \u263A\u2591\xA3\xA3\xA3 ",
8796
+ " \u263A\u2591\xA3\xA3\xA3 ",
8797
+ " \u263A \xA3\xA3\xA3 ",
8798
+ " \u263A\xA3\xA3\xA3 ",
8799
+ " \u263A\xA3\xA3\xA3 ",
8800
+ " \u263A\u2593\xA3\xA3 ",
8801
+ " \u263A\u2593\xA3\xA3 ",
8802
+ " \u263A\u2592\xA3\xA3 ",
8803
+ " \u263A\u2592\xA3\xA3 ",
8804
+ " \u263A\u2591\xA3\xA3 ",
8805
+ " \u263A\u2591\xA3\xA3 ",
8806
+ " \u263A \xA3\xA3 ",
8807
+ " \u263A\xA3\xA3 ",
8808
+ " \u263A\xA3\xA3 ",
8809
+ " \u263A\u2593\xA3 ",
8810
+ " \u263A\u2593\xA3 ",
8811
+ " \u263A\u2592\xA3 ",
8812
+ " \u263A\u2592\xA3 ",
8813
+ " \u263A\u2591\xA3 ",
8814
+ " \u263A\u2591\xA3 ",
8815
+ " \u263A \xA3 ",
8816
+ " \u263A\xA3 ",
8817
+ " \u263A\xA3 ",
8818
+ " \u263A\u2593 ",
8819
+ " \u263A\u2593 ",
8820
+ " \u263A\u2592 ",
8821
+ " \u263A\u2592 ",
8822
+ " \u263A\u2591 ",
8823
+ " \u263A\u2591 ",
8824
+ " \u263A ",
8825
+ " \u263A &",
8826
+ " \u263A \u263C&",
8827
+ " \u263A \u263C &",
8828
+ " \u263A\u263C &",
8829
+ " \u263A\u263C & ",
8830
+ " \u203C & ",
8831
+ " \u263A & ",
8832
+ " \u203C & ",
8833
+ " \u263A & ",
8834
+ " \u203C & ",
8835
+ " \u263A & ",
8836
+ "\u203C & ",
8837
+ " & ",
8838
+ " & ",
8839
+ " & \u2591 ",
8840
+ " & \u2592 ",
8841
+ " & \u2593 ",
8842
+ " & \xA3 ",
8843
+ " & \u2591\xA3 ",
8844
+ " & \u2592\xA3 ",
8845
+ " & \u2593\xA3 ",
8846
+ " & \xA3\xA3 ",
8847
+ " & \u2591\xA3\xA3 ",
8848
+ " & \u2592\xA3\xA3 ",
8849
+ "& \u2593\xA3\xA3 ",
8850
+ "& \xA3\xA3\xA3 ",
8851
+ " \u2591\xA3\xA3\xA3 ",
8852
+ " \u2592\xA3\xA3\xA3 ",
8853
+ " \u2593\xA3\xA3\xA3 ",
8854
+ " \u2588\xA3\xA3\xA3 ",
8855
+ " \u2591\u2588\xA3\xA3\xA3 ",
8856
+ " \u2592\u2588\xA3\xA3\xA3 ",
8857
+ " \u2593\u2588\xA3\xA3\xA3 ",
8858
+ " \u2588\u2588\xA3\xA3\xA3 ",
8859
+ " \u2591\u2588\u2588\xA3\xA3\xA3 ",
8860
+ " \u2592\u2588\u2588\xA3\xA3\xA3 ",
8861
+ " \u2593\u2588\u2588\xA3\xA3\xA3 ",
8862
+ " \u2588\u2588\u2588\xA3\xA3\xA3 ",
8863
+ " \u2591\u2588\u2588\u2588\xA3\xA3\xA3 ",
8864
+ " \u2592\u2588\u2588\u2588\xA3\xA3\xA3 ",
8865
+ " \u2593\u2588\u2588\u2588\xA3\xA3\xA3 ",
8866
+ " \u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
8867
+ " \u2591\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
8868
+ " \u2592\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
8869
+ " \u2593\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
8870
+ " \u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
8871
+ " \u2591\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
8872
+ " \u2592\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
8873
+ " \u2593\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
8874
+ " \u2588\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 ",
8875
+ " \u2588\u2588\u2588\u2588\u2588\u2588\xA3\xA3\xA3 "
8876
+ ]
8877
+ },
8878
+ fish: {
8879
+ interval: 80,
8880
+ frames: [
8881
+ "~~~~~~~~~~~~~~~~~~~~",
8882
+ "> ~~~~~~~~~~~~~~~~~~",
8883
+ "\xBA> ~~~~~~~~~~~~~~~~~",
8884
+ "(\xBA> ~~~~~~~~~~~~~~~~",
8885
+ "((\xBA> ~~~~~~~~~~~~~~~",
8886
+ "<((\xBA> ~~~~~~~~~~~~~~",
8887
+ "><((\xBA> ~~~~~~~~~~~~~",
8888
+ " ><((\xBA> ~~~~~~~~~~~~",
8889
+ "~ ><((\xBA> ~~~~~~~~~~~",
8890
+ "~~ <>((\xBA> ~~~~~~~~~~",
8891
+ "~~~ ><((\xBA> ~~~~~~~~~",
8892
+ "~~~~ <>((\xBA> ~~~~~~~~",
8893
+ "~~~~~ ><((\xBA> ~~~~~~~",
8894
+ "~~~~~~ <>((\xBA> ~~~~~~",
8895
+ "~~~~~~~ ><((\xBA> ~~~~~",
8896
+ "~~~~~~~~ <>((\xBA> ~~~~",
8897
+ "~~~~~~~~~ ><((\xBA> ~~~",
8898
+ "~~~~~~~~~~ <>((\xBA> ~~",
8899
+ "~~~~~~~~~~~ ><((\xBA> ~",
8900
+ "~~~~~~~~~~~~ <>((\xBA> ",
8901
+ "~~~~~~~~~~~~~ ><((\xBA>",
8902
+ "~~~~~~~~~~~~~~ <>((\xBA",
8903
+ "~~~~~~~~~~~~~~~ ><((",
8904
+ "~~~~~~~~~~~~~~~~ <>(",
8905
+ "~~~~~~~~~~~~~~~~~ ><",
8906
+ "~~~~~~~~~~~~~~~~~~ <",
8907
+ "~~~~~~~~~~~~~~~~~~~~"
8908
+ ]
8909
+ }
8910
+ };
8911
+
8912
+ // node_modules/cli-spinners/index.js
8913
+ var cli_spinners_default = spinners_default;
8914
+ var spinnersList = Object.keys(spinners_default);
8915
+
8916
+ // node_modules/log-symbols/index.js
8917
+ init_esm_shims();
8918
+
8919
+ // node_modules/log-symbols/symbols.js
8920
+ var symbols_exports = {};
8921
+ __export(symbols_exports, {
8922
+ error: () => error,
8923
+ info: () => info,
8924
+ success: () => success,
8925
+ warning: () => warning
8926
+ });
8927
+ init_esm_shims();
8928
+
8929
+ // node_modules/yoctocolors/base.js
8930
+ init_esm_shims();
8931
+ import tty2 from "tty";
8932
+ var hasColors = tty2?.WriteStream?.prototype?.hasColors?.() ?? false;
8933
+ var format = (open, close) => {
8934
+ if (!hasColors) {
8935
+ return (input) => input;
8936
+ }
8937
+ const openCode = `\x1B[${open}m`;
8938
+ const closeCode = `\x1B[${close}m`;
8939
+ return (input) => {
8940
+ const string = input + "";
8941
+ let index = string.indexOf(closeCode);
8942
+ if (index === -1) {
8943
+ return openCode + string + closeCode;
8944
+ }
8945
+ let result = openCode;
8946
+ let lastIndex = 0;
8947
+ const reopenOnNestedClose = close === 22;
8948
+ const replaceCode = (reopenOnNestedClose ? closeCode : "") + openCode;
8949
+ while (index !== -1) {
8950
+ result += string.slice(lastIndex, index) + replaceCode;
8951
+ lastIndex = index + closeCode.length;
8952
+ index = string.indexOf(closeCode, lastIndex);
8953
+ }
8954
+ result += string.slice(lastIndex) + closeCode;
8955
+ return result;
8956
+ };
8957
+ };
8958
+ var reset = format(0, 0);
8959
+ var bold = format(1, 22);
8960
+ var dim = format(2, 22);
8961
+ var italic = format(3, 23);
8962
+ var underline = format(4, 24);
8963
+ var overline = format(53, 55);
8964
+ var inverse = format(7, 27);
8965
+ var hidden = format(8, 28);
8966
+ var strikethrough = format(9, 29);
8967
+ var black = format(30, 39);
8968
+ var red = format(31, 39);
8969
+ var green = format(32, 39);
8970
+ var yellow = format(33, 39);
8971
+ var blue = format(34, 39);
8972
+ var magenta = format(35, 39);
8973
+ var cyan = format(36, 39);
8974
+ var white = format(37, 39);
8975
+ var gray = format(90, 39);
8976
+ var bgBlack = format(40, 49);
8977
+ var bgRed = format(41, 49);
8978
+ var bgGreen = format(42, 49);
8979
+ var bgYellow = format(43, 49);
8980
+ var bgBlue = format(44, 49);
8981
+ var bgMagenta = format(45, 49);
8982
+ var bgCyan = format(46, 49);
8983
+ var bgWhite = format(47, 49);
8984
+ var bgGray = format(100, 49);
8985
+ var redBright = format(91, 39);
8986
+ var greenBright = format(92, 39);
8987
+ var yellowBright = format(93, 39);
8988
+ var blueBright = format(94, 39);
8989
+ var magentaBright = format(95, 39);
8990
+ var cyanBright = format(96, 39);
8991
+ var whiteBright = format(97, 39);
8992
+ var bgRedBright = format(101, 49);
8993
+ var bgGreenBright = format(102, 49);
8994
+ var bgYellowBright = format(103, 49);
8995
+ var bgBlueBright = format(104, 49);
8996
+ var bgMagentaBright = format(105, 49);
8997
+ var bgCyanBright = format(106, 49);
8998
+ var bgWhiteBright = format(107, 49);
8999
+
9000
+ // node_modules/is-unicode-supported/index.js
9001
+ init_esm_shims();
9002
+ import process6 from "process";
9003
+ function isUnicodeSupported() {
9004
+ const { env: env2 } = process6;
9005
+ const { TERM, TERM_PROGRAM } = env2;
9006
+ if (process6.platform !== "win32") {
9007
+ return TERM !== "linux";
9008
+ }
9009
+ return Boolean(env2.WT_SESSION) || Boolean(env2.TERMINUS_SUBLIME) || env2.ConEmuTask === "{cmd::Cmder}" || TERM_PROGRAM === "Terminus-Sublime" || TERM_PROGRAM === "vscode" || TERM === "xterm-256color" || TERM === "alacritty" || TERM === "rxvt-unicode" || TERM === "rxvt-unicode-256color" || env2.TERMINAL_EMULATOR === "JetBrains-JediTerm";
9010
+ }
9011
+
9012
+ // node_modules/log-symbols/symbols.js
9013
+ var _isUnicodeSupported = isUnicodeSupported();
9014
+ var info = blue(_isUnicodeSupported ? "\u2139" : "i");
9015
+ var success = green(_isUnicodeSupported ? "\u2714" : "\u221A");
9016
+ var warning = yellow(_isUnicodeSupported ? "\u26A0" : "\u203C");
9017
+ var error = red(_isUnicodeSupported ? "\u2716" : "\xD7");
9018
+
9019
+ // node_modules/string-width/index.js
9020
+ init_esm_shims();
9021
+
9022
+ // node_modules/strip-ansi/index.js
9023
+ init_esm_shims();
9024
+
9025
+ // node_modules/ansi-regex/index.js
9026
+ init_esm_shims();
9027
+ function ansiRegex({ onlyFirst = false } = {}) {
9028
+ const ST = "(?:\\u0007|\\u001B\\u005C|\\u009C)";
9029
+ const osc = `(?:\\u001B\\][\\s\\S]*?${ST})`;
9030
+ const csi = "[\\u001B\\u009B][[\\]()#;?]*(?:\\d{1,4}(?:[;:]\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]";
9031
+ const pattern = `${osc}|${csi}`;
9032
+ return new RegExp(pattern, onlyFirst ? void 0 : "g");
9033
+ }
9034
+
9035
+ // node_modules/strip-ansi/index.js
9036
+ var regex = ansiRegex();
9037
+ function stripAnsi(string) {
9038
+ if (typeof string !== "string") {
9039
+ throw new TypeError(`Expected a \`string\`, got \`${typeof string}\``);
9040
+ }
9041
+ return string.replace(regex, "");
9042
+ }
9043
+
9044
+ // node_modules/get-east-asian-width/index.js
9045
+ init_esm_shims();
9046
+
9047
+ // node_modules/get-east-asian-width/lookup.js
9048
+ init_esm_shims();
9049
+
9050
+ // node_modules/get-east-asian-width/lookup-data.js
9051
+ init_esm_shims();
9052
+ var ambiguousRanges = [161, 161, 164, 164, 167, 168, 170, 170, 173, 174, 176, 180, 182, 186, 188, 191, 198, 198, 208, 208, 215, 216, 222, 225, 230, 230, 232, 234, 236, 237, 240, 240, 242, 243, 247, 250, 252, 252, 254, 254, 257, 257, 273, 273, 275, 275, 283, 283, 294, 295, 299, 299, 305, 307, 312, 312, 319, 322, 324, 324, 328, 331, 333, 333, 338, 339, 358, 359, 363, 363, 462, 462, 464, 464, 466, 466, 468, 468, 470, 470, 472, 472, 474, 474, 476, 476, 593, 593, 609, 609, 708, 708, 711, 711, 713, 715, 717, 717, 720, 720, 728, 731, 733, 733, 735, 735, 768, 879, 913, 929, 931, 937, 945, 961, 963, 969, 1025, 1025, 1040, 1103, 1105, 1105, 8208, 8208, 8211, 8214, 8216, 8217, 8220, 8221, 8224, 8226, 8228, 8231, 8240, 8240, 8242, 8243, 8245, 8245, 8251, 8251, 8254, 8254, 8308, 8308, 8319, 8319, 8321, 8324, 8364, 8364, 8451, 8451, 8453, 8453, 8457, 8457, 8467, 8467, 8470, 8470, 8481, 8482, 8486, 8486, 8491, 8491, 8531, 8532, 8539, 8542, 8544, 8555, 8560, 8569, 8585, 8585, 8592, 8601, 8632, 8633, 8658, 8658, 8660, 8660, 8679, 8679, 8704, 8704, 8706, 8707, 8711, 8712, 8715, 8715, 8719, 8719, 8721, 8721, 8725, 8725, 8730, 8730, 8733, 8736, 8739, 8739, 8741, 8741, 8743, 8748, 8750, 8750, 8756, 8759, 8764, 8765, 8776, 8776, 8780, 8780, 8786, 8786, 8800, 8801, 8804, 8807, 8810, 8811, 8814, 8815, 8834, 8835, 8838, 8839, 8853, 8853, 8857, 8857, 8869, 8869, 8895, 8895, 8978, 8978, 9312, 9449, 9451, 9547, 9552, 9587, 9600, 9615, 9618, 9621, 9632, 9633, 9635, 9641, 9650, 9651, 9654, 9655, 9660, 9661, 9664, 9665, 9670, 9672, 9675, 9675, 9678, 9681, 9698, 9701, 9711, 9711, 9733, 9734, 9737, 9737, 9742, 9743, 9756, 9756, 9758, 9758, 9792, 9792, 9794, 9794, 9824, 9825, 9827, 9829, 9831, 9834, 9836, 9837, 9839, 9839, 9886, 9887, 9919, 9919, 9926, 9933, 9935, 9939, 9941, 9953, 9955, 9955, 9960, 9961, 9963, 9969, 9972, 9972, 9974, 9977, 9979, 9980, 9982, 9983, 10045, 10045, 10102, 10111, 11094, 11097, 12872, 12879, 57344, 63743, 65024, 65039, 65533, 65533, 127232, 127242, 127248, 127277, 127280, 127337, 127344, 127373, 127375, 127376, 127387, 127404, 917760, 917999, 983040, 1048573, 1048576, 1114109];
9053
+ var fullwidthRanges = [12288, 12288, 65281, 65376, 65504, 65510];
9054
+ var halfwidthRanges = [8361, 8361, 65377, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, 65512, 65518];
9055
+ var narrowRanges = [32, 126, 162, 163, 165, 166, 172, 172, 175, 175, 10214, 10221, 10629, 10630];
9056
+ var wideRanges = [4352, 4447, 8986, 8987, 9001, 9002, 9193, 9196, 9200, 9200, 9203, 9203, 9725, 9726, 9748, 9749, 9776, 9783, 9800, 9811, 9855, 9855, 9866, 9871, 9875, 9875, 9889, 9889, 9898, 9899, 9917, 9918, 9924, 9925, 9934, 9934, 9940, 9940, 9962, 9962, 9970, 9971, 9973, 9973, 9978, 9978, 9981, 9981, 9989, 9989, 9994, 9995, 10024, 10024, 10060, 10060, 10062, 10062, 10067, 10069, 10071, 10071, 10133, 10135, 10160, 10160, 10175, 10175, 11035, 11036, 11088, 11088, 11093, 11093, 11904, 11929, 11931, 12019, 12032, 12245, 12272, 12287, 12289, 12350, 12353, 12438, 12441, 12543, 12549, 12591, 12593, 12686, 12688, 12773, 12783, 12830, 12832, 12871, 12880, 42124, 42128, 42182, 43360, 43388, 44032, 55203, 63744, 64255, 65040, 65049, 65072, 65106, 65108, 65126, 65128, 65131, 94176, 94180, 94192, 94198, 94208, 101589, 101631, 101662, 101760, 101874, 110576, 110579, 110581, 110587, 110589, 110590, 110592, 110882, 110898, 110898, 110928, 110930, 110933, 110933, 110948, 110951, 110960, 111355, 119552, 119638, 119648, 119670, 126980, 126980, 127183, 127183, 127374, 127374, 127377, 127386, 127488, 127490, 127504, 127547, 127552, 127560, 127568, 127569, 127584, 127589, 127744, 127776, 127789, 127797, 127799, 127868, 127870, 127891, 127904, 127946, 127951, 127955, 127968, 127984, 127988, 127988, 127992, 128062, 128064, 128064, 128066, 128252, 128255, 128317, 128331, 128334, 128336, 128359, 128378, 128378, 128405, 128406, 128420, 128420, 128507, 128591, 128640, 128709, 128716, 128716, 128720, 128722, 128725, 128728, 128732, 128735, 128747, 128748, 128756, 128764, 128992, 129003, 129008, 129008, 129292, 129338, 129340, 129349, 129351, 129535, 129648, 129660, 129664, 129674, 129678, 129734, 129736, 129736, 129741, 129756, 129759, 129770, 129775, 129784, 131072, 196605, 196608, 262141];
9057
+
9058
+ // node_modules/get-east-asian-width/utilities.js
9059
+ init_esm_shims();
9060
+ var isInRange = (ranges, codePoint) => {
9061
+ let low = 0;
9062
+ let high = Math.floor(ranges.length / 2) - 1;
9063
+ while (low <= high) {
9064
+ const mid = Math.floor((low + high) / 2);
9065
+ const i = mid * 2;
9066
+ if (codePoint < ranges[i]) {
9067
+ high = mid - 1;
9068
+ } else if (codePoint > ranges[i + 1]) {
9069
+ low = mid + 1;
9070
+ } else {
9071
+ return true;
9072
+ }
9073
+ }
9074
+ return false;
9075
+ };
9076
+
9077
+ // node_modules/get-east-asian-width/lookup.js
9078
+ var minimumAmbiguousCodePoint = ambiguousRanges[0];
9079
+ var maximumAmbiguousCodePoint = ambiguousRanges.at(-1);
9080
+ var minimumFullWidthCodePoint = fullwidthRanges[0];
9081
+ var maximumFullWidthCodePoint = fullwidthRanges.at(-1);
9082
+ var minimumHalfWidthCodePoint = halfwidthRanges[0];
9083
+ var maximumHalfWidthCodePoint = halfwidthRanges.at(-1);
9084
+ var minimumNarrowCodePoint = narrowRanges[0];
9085
+ var maximumNarrowCodePoint = narrowRanges.at(-1);
9086
+ var minimumWideCodePoint = wideRanges[0];
9087
+ var maximumWideCodePoint = wideRanges.at(-1);
9088
+ var commonCjkCodePoint = 19968;
9089
+ var [wideFastPathStart, wideFastPathEnd] = findWideFastPathRange(wideRanges);
9090
+ function findWideFastPathRange(ranges) {
9091
+ let fastPathStart = ranges[0];
9092
+ let fastPathEnd = ranges[1];
9093
+ for (let index = 0; index < ranges.length; index += 2) {
9094
+ const start = ranges[index];
9095
+ const end = ranges[index + 1];
9096
+ if (commonCjkCodePoint >= start && commonCjkCodePoint <= end) {
9097
+ return [start, end];
9098
+ }
9099
+ if (end - start > fastPathEnd - fastPathStart) {
9100
+ fastPathStart = start;
9101
+ fastPathEnd = end;
9102
+ }
9103
+ }
9104
+ return [fastPathStart, fastPathEnd];
6811
9105
  }
9106
+ var isAmbiguous = (codePoint) => {
9107
+ if (codePoint < minimumAmbiguousCodePoint || codePoint > maximumAmbiguousCodePoint) {
9108
+ return false;
9109
+ }
9110
+ return isInRange(ambiguousRanges, codePoint);
9111
+ };
9112
+ var isFullWidth = (codePoint) => {
9113
+ if (codePoint < minimumFullWidthCodePoint || codePoint > maximumFullWidthCodePoint) {
9114
+ return false;
9115
+ }
9116
+ return isInRange(fullwidthRanges, codePoint);
9117
+ };
9118
+ var isWide = (codePoint) => {
9119
+ if (codePoint >= wideFastPathStart && codePoint <= wideFastPathEnd) {
9120
+ return true;
9121
+ }
9122
+ if (codePoint < minimumWideCodePoint || codePoint > maximumWideCodePoint) {
9123
+ return false;
9124
+ }
9125
+ return isInRange(wideRanges, codePoint);
9126
+ };
9127
+
9128
+ // node_modules/get-east-asian-width/index.js
9129
+ function validate(codePoint) {
9130
+ if (!Number.isSafeInteger(codePoint)) {
9131
+ throw new TypeError(`Expected a code point, got \`${typeof codePoint}\`.`);
9132
+ }
9133
+ }
9134
+ function eastAsianWidth(codePoint, { ambiguousAsWide = false } = {}) {
9135
+ validate(codePoint);
9136
+ if (isFullWidth(codePoint) || isWide(codePoint) || ambiguousAsWide && isAmbiguous(codePoint)) {
9137
+ return 2;
9138
+ }
9139
+ return 1;
9140
+ }
9141
+
9142
+ // node_modules/string-width/index.js
9143
+ var segmenter = new Intl.Segmenter();
9144
+ var zeroWidthClusterRegex = new RegExp("^(?:\\p{Default_Ignorable_Code_Point}|\\p{Control}|\\p{Format}|\\p{Mark}|\\p{Surrogate})+$", "v");
9145
+ var leadingNonPrintingRegex = new RegExp("^[\\p{Default_Ignorable_Code_Point}\\p{Control}\\p{Format}\\p{Mark}\\p{Surrogate}]+", "v");
9146
+ var rgiEmojiRegex = new RegExp("^\\p{RGI_Emoji}$", "v");
9147
+ var unqualifiedKeycapRegex = /^[\d#*]\u20E3$/;
9148
+ var extendedPictographicRegex = /\p{Extended_Pictographic}/gu;
9149
+ function isDoubleWidthNonRgiEmojiSequence(segment) {
9150
+ if (segment.length > 50) {
9151
+ return false;
9152
+ }
9153
+ if (unqualifiedKeycapRegex.test(segment)) {
9154
+ return true;
9155
+ }
9156
+ if (segment.includes("\u200D")) {
9157
+ const pictographics = segment.match(extendedPictographicRegex);
9158
+ return pictographics !== null && pictographics.length >= 2;
9159
+ }
9160
+ return false;
9161
+ }
9162
+ function baseVisible(segment) {
9163
+ return segment.replace(leadingNonPrintingRegex, "");
9164
+ }
9165
+ function isZeroWidthCluster(segment) {
9166
+ return zeroWidthClusterRegex.test(segment);
9167
+ }
9168
+ function trailingHalfwidthWidth(segment, eastAsianWidthOptions) {
9169
+ let extra = 0;
9170
+ if (segment.length > 1) {
9171
+ for (const char of segment.slice(1)) {
9172
+ if (char >= "\uFF00" && char <= "\uFFEF") {
9173
+ extra += eastAsianWidth(char.codePointAt(0), eastAsianWidthOptions);
9174
+ }
9175
+ }
9176
+ }
9177
+ return extra;
9178
+ }
9179
+ function stringWidth(input, options2 = {}) {
9180
+ if (typeof input !== "string" || input.length === 0) {
9181
+ return 0;
9182
+ }
9183
+ const {
9184
+ ambiguousIsNarrow = true,
9185
+ countAnsiEscapeCodes = false
9186
+ } = options2;
9187
+ let string = input;
9188
+ if (!countAnsiEscapeCodes && (string.includes("\x1B") || string.includes("\x9B"))) {
9189
+ string = stripAnsi(string);
9190
+ }
9191
+ if (string.length === 0) {
9192
+ return 0;
9193
+ }
9194
+ if (/^[\u0020-\u007E]*$/.test(string)) {
9195
+ return string.length;
9196
+ }
9197
+ let width = 0;
9198
+ const eastAsianWidthOptions = { ambiguousAsWide: !ambiguousIsNarrow };
9199
+ for (const { segment } of segmenter.segment(string)) {
9200
+ if (isZeroWidthCluster(segment)) {
9201
+ continue;
9202
+ }
9203
+ if (rgiEmojiRegex.test(segment) || isDoubleWidthNonRgiEmojiSequence(segment)) {
9204
+ width += 2;
9205
+ continue;
9206
+ }
9207
+ const codePoint = baseVisible(segment).codePointAt(0);
9208
+ width += eastAsianWidth(codePoint, eastAsianWidthOptions);
9209
+ width += trailingHalfwidthWidth(segment, eastAsianWidthOptions);
9210
+ }
9211
+ return width;
9212
+ }
9213
+
9214
+ // node_modules/is-interactive/index.js
9215
+ init_esm_shims();
9216
+ function isInteractive({ stream = process.stdout } = {}) {
9217
+ return Boolean(
9218
+ stream && stream.isTTY && process.env.TERM !== "dumb" && !("CI" in process.env)
9219
+ );
9220
+ }
9221
+
9222
+ // node_modules/stdin-discarder/index.js
9223
+ init_esm_shims();
9224
+ import process7 from "process";
9225
+ var ASCII_ETX_CODE = 3;
9226
+ var StdinDiscarder = class {
9227
+ #activeCount = 0;
9228
+ #stdin;
9229
+ #stdinWasPaused = false;
9230
+ #stdinWasRaw = false;
9231
+ #handleInputBound = (chunk) => {
9232
+ if (!chunk?.length) {
9233
+ return;
9234
+ }
9235
+ const code = typeof chunk === "string" ? chunk.codePointAt(0) : chunk[0];
9236
+ if (code === ASCII_ETX_CODE) {
9237
+ if (process7.listenerCount("SIGINT") > 0) {
9238
+ process7.emit("SIGINT");
9239
+ } else {
9240
+ process7.kill(process7.pid, "SIGINT");
9241
+ }
9242
+ }
9243
+ };
9244
+ start() {
9245
+ this.#activeCount++;
9246
+ if (this.#activeCount === 1) {
9247
+ this.#realStart();
9248
+ }
9249
+ }
9250
+ stop() {
9251
+ if (this.#activeCount === 0) {
9252
+ return;
9253
+ }
9254
+ if (--this.#activeCount === 0) {
9255
+ this.#realStop();
9256
+ }
9257
+ }
9258
+ #realStart() {
9259
+ const { stdin } = process7;
9260
+ if (process7.platform === "win32" || !stdin?.isTTY || typeof stdin.setRawMode !== "function") {
9261
+ this.#stdin = void 0;
9262
+ return;
9263
+ }
9264
+ this.#stdin = stdin;
9265
+ this.#stdinWasPaused = stdin.isPaused();
9266
+ this.#stdinWasRaw = Boolean(stdin.isRaw);
9267
+ stdin.setRawMode(true);
9268
+ stdin.prependListener("data", this.#handleInputBound);
9269
+ if (this.#stdinWasPaused) {
9270
+ stdin.resume();
9271
+ }
9272
+ }
9273
+ #realStop() {
9274
+ if (!this.#stdin) {
9275
+ return;
9276
+ }
9277
+ const stdin = this.#stdin;
9278
+ stdin.off("data", this.#handleInputBound);
9279
+ if (stdin.isTTY) {
9280
+ stdin.setRawMode?.(this.#stdinWasRaw);
9281
+ }
9282
+ if (this.#stdinWasPaused) {
9283
+ stdin.pause();
9284
+ }
9285
+ this.#stdin = void 0;
9286
+ this.#stdinWasPaused = false;
9287
+ this.#stdinWasRaw = false;
9288
+ }
9289
+ };
9290
+ var stdinDiscarder = new StdinDiscarder();
9291
+ var stdin_discarder_default = Object.freeze(stdinDiscarder);
9292
+
9293
+ // node_modules/ora/index.js
9294
+ var RENDER_DEFERRAL_TIMEOUT = 200;
9295
+ var SYNCHRONIZED_OUTPUT_ENABLE = "\x1B[?2026h";
9296
+ var SYNCHRONIZED_OUTPUT_DISABLE = "\x1B[?2026l";
9297
+ var activeHooksPerStream = /* @__PURE__ */ new Map();
9298
+ var Ora = class {
9299
+ #linesToClear = 0;
9300
+ #frameIndex = -1;
9301
+ #lastFrameTime = 0;
9302
+ #options;
9303
+ #spinner;
9304
+ #stream;
9305
+ #id;
9306
+ #hookedStreams = /* @__PURE__ */ new Map();
9307
+ #isInternalWrite = false;
9308
+ #drainHandler;
9309
+ #deferRenderTimer;
9310
+ #isDiscardingStdin = false;
9311
+ color;
9312
+ // Helper to execute writes while preventing hook recursion
9313
+ #internalWrite(fn) {
9314
+ this.#isInternalWrite = true;
9315
+ try {
9316
+ return fn();
9317
+ } finally {
9318
+ this.#isInternalWrite = false;
9319
+ }
9320
+ }
9321
+ // Helper to render if still spinning
9322
+ #tryRender() {
9323
+ if (this.isSpinning) {
9324
+ this.render();
9325
+ }
9326
+ }
9327
+ #stringifyChunk(chunk, encoding) {
9328
+ if (chunk === void 0 || chunk === null) {
9329
+ return "";
9330
+ }
9331
+ if (typeof chunk === "string") {
9332
+ return chunk;
9333
+ }
9334
+ if (Buffer.isBuffer(chunk) || ArrayBuffer.isView(chunk)) {
9335
+ const normalizedEncoding = typeof encoding === "string" && encoding && encoding !== "buffer" ? encoding : "utf8";
9336
+ return Buffer.from(chunk).toString(normalizedEncoding);
9337
+ }
9338
+ return String(chunk);
9339
+ }
9340
+ #chunkTerminatesLine(chunkString) {
9341
+ if (!chunkString) {
9342
+ return false;
9343
+ }
9344
+ const lastCharacter = chunkString.at(-1);
9345
+ return lastCharacter === "\n" || lastCharacter === "\r";
9346
+ }
9347
+ #scheduleRenderDeferral() {
9348
+ if (this.#deferRenderTimer) {
9349
+ return;
9350
+ }
9351
+ this.#deferRenderTimer = setTimeout(() => {
9352
+ this.#deferRenderTimer = void 0;
9353
+ if (this.isSpinning) {
9354
+ this.#tryRender();
9355
+ }
9356
+ }, RENDER_DEFERRAL_TIMEOUT);
9357
+ if (typeof this.#deferRenderTimer?.unref === "function") {
9358
+ this.#deferRenderTimer.unref();
9359
+ }
9360
+ }
9361
+ #clearRenderDeferral() {
9362
+ if (this.#deferRenderTimer) {
9363
+ clearTimeout(this.#deferRenderTimer);
9364
+ this.#deferRenderTimer = void 0;
9365
+ }
9366
+ }
9367
+ // Helper to build complete line with symbol, text, prefix, and suffix
9368
+ #buildOutputLine(symbol, text, prefixText, suffixText) {
9369
+ const fullPrefixText = this.#getFullPrefixText(prefixText, " ");
9370
+ const separatorText = symbol ? " " : "";
9371
+ const fullText = typeof text === "string" ? separatorText + text : "";
9372
+ const fullSuffixText = this.#getFullSuffixText(suffixText, " ");
9373
+ return fullPrefixText + symbol + fullText + fullSuffixText;
9374
+ }
9375
+ constructor(options2) {
9376
+ if (typeof options2 === "string") {
9377
+ options2 = {
9378
+ text: options2
9379
+ };
9380
+ }
9381
+ this.#options = {
9382
+ color: "cyan",
9383
+ stream: process8.stderr,
9384
+ discardStdin: true,
9385
+ hideCursor: true,
9386
+ ...options2
9387
+ };
9388
+ this.color = this.#options.color;
9389
+ this.#stream = this.#options.stream;
9390
+ if (typeof this.#options.isEnabled !== "boolean") {
9391
+ this.#options.isEnabled = isInteractive({ stream: this.#stream });
9392
+ }
9393
+ if (typeof this.#options.isSilent !== "boolean") {
9394
+ this.#options.isSilent = false;
9395
+ }
9396
+ const userInterval = this.#options.interval;
9397
+ this.spinner = this.#options.spinner;
9398
+ this.#options.interval = userInterval;
9399
+ this.text = this.#options.text;
9400
+ this.prefixText = this.#options.prefixText;
9401
+ this.suffixText = this.#options.suffixText;
9402
+ this.indent = this.#options.indent;
9403
+ if (process8.env.NODE_ENV === "test") {
9404
+ this._stream = this.#stream;
9405
+ this._isEnabled = this.#options.isEnabled;
9406
+ Object.defineProperty(this, "_linesToClear", {
9407
+ get() {
9408
+ return this.#linesToClear;
9409
+ },
9410
+ set(newValue) {
9411
+ this.#linesToClear = newValue;
9412
+ }
9413
+ });
9414
+ Object.defineProperty(this, "_frameIndex", {
9415
+ get() {
9416
+ return this.#frameIndex;
9417
+ }
9418
+ });
9419
+ Object.defineProperty(this, "_lineCount", {
9420
+ get() {
9421
+ const columns = this.#stream.columns ?? 80;
9422
+ const prefixText = typeof this.#options.prefixText === "function" ? "" : this.#options.prefixText;
9423
+ const suffixText = typeof this.#options.suffixText === "function" ? "" : this.#options.suffixText;
9424
+ const fullPrefixText = typeof prefixText === "string" && prefixText !== "" ? prefixText + " " : "";
9425
+ const fullSuffixText = typeof suffixText === "string" && suffixText !== "" ? " " + suffixText : "";
9426
+ const spinnerChar = "-";
9427
+ const fullText = " ".repeat(this.#options.indent) + fullPrefixText + spinnerChar + (typeof this.#options.text === "string" ? " " + this.#options.text : "") + fullSuffixText;
9428
+ return this.#computeLineCountFrom(fullText, columns);
9429
+ }
9430
+ });
9431
+ }
9432
+ }
9433
+ get indent() {
9434
+ return this.#options.indent;
9435
+ }
9436
+ set indent(indent = 0) {
9437
+ if (!(indent >= 0 && Number.isInteger(indent))) {
9438
+ throw new Error("The `indent` option must be an integer from 0 and up");
9439
+ }
9440
+ this.#options.indent = indent;
9441
+ }
9442
+ get interval() {
9443
+ return this.#options.interval ?? this.#spinner.interval ?? 100;
9444
+ }
9445
+ get spinner() {
9446
+ return this.#spinner;
9447
+ }
9448
+ set spinner(spinner) {
9449
+ this.#frameIndex = -1;
9450
+ this.#options.interval = void 0;
9451
+ if (typeof spinner === "object") {
9452
+ if (!Array.isArray(spinner.frames) || spinner.frames.length === 0 || spinner.frames.some((frame) => typeof frame !== "string")) {
9453
+ throw new Error("The given spinner must have a non-empty `frames` array of strings");
9454
+ }
9455
+ if (spinner.interval !== void 0 && !(Number.isInteger(spinner.interval) && spinner.interval > 0)) {
9456
+ throw new Error("`spinner.interval` must be a positive integer if provided");
9457
+ }
9458
+ this.#spinner = spinner;
9459
+ } else if (!isUnicodeSupported()) {
9460
+ this.#spinner = cli_spinners_default.line;
9461
+ } else if (spinner === void 0) {
9462
+ this.#spinner = cli_spinners_default.dots;
9463
+ } else if (spinner !== "default" && cli_spinners_default[spinner]) {
9464
+ this.#spinner = cli_spinners_default[spinner];
9465
+ } else {
9466
+ throw new Error(`There is no built-in spinner named '${spinner}'. See https://github.com/sindresorhus/cli-spinners/blob/main/spinners.json for a full list.`);
9467
+ }
9468
+ }
9469
+ get text() {
9470
+ return this.#options.text;
9471
+ }
9472
+ set text(value = "") {
9473
+ this.#options.text = value;
9474
+ }
9475
+ get prefixText() {
9476
+ return this.#options.prefixText;
9477
+ }
9478
+ set prefixText(value = "") {
9479
+ this.#options.prefixText = value;
9480
+ }
9481
+ get suffixText() {
9482
+ return this.#options.suffixText;
9483
+ }
9484
+ set suffixText(value = "") {
9485
+ this.#options.suffixText = value;
9486
+ }
9487
+ get isSpinning() {
9488
+ return this.#id !== void 0;
9489
+ }
9490
+ #formatAffix(value, separator, placeBefore = false) {
9491
+ const resolved = typeof value === "function" ? value() : value;
9492
+ if (typeof resolved === "string" && resolved !== "") {
9493
+ return placeBefore ? separator + resolved : resolved + separator;
9494
+ }
9495
+ return "";
9496
+ }
9497
+ #getFullPrefixText(prefixText = this.#options.prefixText, postfix = " ") {
9498
+ return this.#formatAffix(prefixText, postfix, false);
9499
+ }
9500
+ #getFullSuffixText(suffixText = this.#options.suffixText, prefix = " ") {
9501
+ return this.#formatAffix(suffixText, prefix, true);
9502
+ }
9503
+ #computeLineCountFrom(text, columns) {
9504
+ let count = 0;
9505
+ for (const line of stripVTControlCharacters(text).split("\n")) {
9506
+ count += Math.max(1, Math.ceil(stringWidth(line) / columns));
9507
+ }
9508
+ return count;
9509
+ }
9510
+ get isEnabled() {
9511
+ return this.#options.isEnabled && !this.#options.isSilent;
9512
+ }
9513
+ set isEnabled(value) {
9514
+ if (typeof value !== "boolean") {
9515
+ throw new TypeError("The `isEnabled` option must be a boolean");
9516
+ }
9517
+ this.#options.isEnabled = value;
9518
+ }
9519
+ get isSilent() {
9520
+ return this.#options.isSilent;
9521
+ }
9522
+ set isSilent(value) {
9523
+ if (typeof value !== "boolean") {
9524
+ throw new TypeError("The `isSilent` option must be a boolean");
9525
+ }
9526
+ this.#options.isSilent = value;
9527
+ }
9528
+ frame() {
9529
+ const now = Date.now();
9530
+ if (this.#frameIndex === -1 || now - this.#lastFrameTime >= this.interval) {
9531
+ this.#frameIndex = (this.#frameIndex + 1) % this.#spinner.frames.length;
9532
+ this.#lastFrameTime = now;
9533
+ }
9534
+ const { frames } = this.#spinner;
9535
+ let frame = frames[this.#frameIndex];
9536
+ if (this.color) {
9537
+ frame = source_default[this.color](frame);
9538
+ }
9539
+ const fullPrefixText = this.#getFullPrefixText(this.#options.prefixText, " ");
9540
+ const fullText = typeof this.text === "string" ? " " + this.text : "";
9541
+ const fullSuffixText = this.#getFullSuffixText(this.#options.suffixText, " ");
9542
+ return fullPrefixText + frame + fullText + fullSuffixText;
9543
+ }
9544
+ clear() {
9545
+ if (!this.isEnabled || !this.#stream.isTTY) {
9546
+ return this;
9547
+ }
9548
+ this.#internalWrite(() => {
9549
+ this.#stream.cursorTo(0);
9550
+ for (let index = 0; index < this.#linesToClear; index++) {
9551
+ if (index > 0) {
9552
+ this.#stream.moveCursor(0, -1);
9553
+ }
9554
+ this.#stream.clearLine(1);
9555
+ }
9556
+ if (this.#options.indent) {
9557
+ this.#stream.cursorTo(this.#options.indent);
9558
+ }
9559
+ });
9560
+ this.#linesToClear = 0;
9561
+ return this;
9562
+ }
9563
+ // Helper to hook a single stream
9564
+ #hookStream(stream) {
9565
+ if (!stream || this.#hookedStreams.has(stream) || !stream.isTTY || typeof stream.write !== "function") {
9566
+ return;
9567
+ }
9568
+ if (activeHooksPerStream.has(stream)) {
9569
+ console.warn("[ora] Multiple concurrent spinners detected. This may cause visual corruption. Use one spinner at a time.");
9570
+ }
9571
+ const originalWrite = stream.write;
9572
+ this.#hookedStreams.set(stream, originalWrite);
9573
+ activeHooksPerStream.set(stream, this);
9574
+ stream.write = (chunk, encoding, callback) => this.#hookedWrite(stream, originalWrite, chunk, encoding, callback);
9575
+ }
9576
+ /**
9577
+ Intercept stream writes while spinner is active to handle external writes cleanly without visual corruption.
9578
+ Hooks process stdio streams and the active spinner stream so console.log(), console.error(), and direct writes stay tidy.
9579
+ */
9580
+ #installHook() {
9581
+ if (!this.isEnabled || this.#hookedStreams.size > 0) {
9582
+ return;
9583
+ }
9584
+ const streamsToHook = /* @__PURE__ */ new Set([this.#stream, process8.stdout, process8.stderr]);
9585
+ for (const stream of streamsToHook) {
9586
+ this.#hookStream(stream);
9587
+ }
9588
+ }
9589
+ #uninstallHook() {
9590
+ for (const [stream, originalWrite] of this.#hookedStreams) {
9591
+ stream.write = originalWrite;
9592
+ if (activeHooksPerStream.get(stream) === this) {
9593
+ activeHooksPerStream.delete(stream);
9594
+ }
9595
+ }
9596
+ this.#hookedStreams.clear();
9597
+ }
9598
+ // eslint-disable-next-line max-params -- Need stream and originalWrite for multi-stream support
9599
+ #hookedWrite(stream, originalWrite, chunk, encoding, callback) {
9600
+ if (typeof encoding === "function") {
9601
+ callback = encoding;
9602
+ encoding = void 0;
9603
+ }
9604
+ if (this.#isInternalWrite) {
9605
+ return originalWrite.call(stream, chunk, encoding, callback);
9606
+ }
9607
+ this.clear();
9608
+ const chunkString = this.#stringifyChunk(chunk, encoding);
9609
+ const chunkTerminatesLine = this.#chunkTerminatesLine(chunkString);
9610
+ const writeResult = originalWrite.call(stream, chunk, encoding, callback);
9611
+ if (chunkTerminatesLine) {
9612
+ this.#clearRenderDeferral();
9613
+ } else if (chunkString.length > 0) {
9614
+ this.#scheduleRenderDeferral();
9615
+ }
9616
+ if (this.isSpinning && !this.#deferRenderTimer) {
9617
+ this.render();
9618
+ }
9619
+ return writeResult;
9620
+ }
9621
+ render() {
9622
+ if (!this.isEnabled || this.#drainHandler || this.#deferRenderTimer) {
9623
+ return this;
9624
+ }
9625
+ const useSynchronizedOutput = this.#stream.isTTY;
9626
+ let shouldDisableSynchronizedOutput = false;
9627
+ try {
9628
+ if (useSynchronizedOutput) {
9629
+ this.#internalWrite(() => this.#stream.write(SYNCHRONIZED_OUTPUT_ENABLE));
9630
+ shouldDisableSynchronizedOutput = true;
9631
+ }
9632
+ this.clear();
9633
+ let frameContent = this.frame();
9634
+ const columns = this.#stream.columns ?? 80;
9635
+ const actualLineCount = this.#computeLineCountFrom(frameContent, columns);
9636
+ const consoleHeight = this.#stream.rows;
9637
+ if (consoleHeight && consoleHeight > 1 && actualLineCount > consoleHeight) {
9638
+ const lines = frameContent.split("\n");
9639
+ const maxLines = consoleHeight - 1;
9640
+ frameContent = [...lines.slice(0, maxLines), "... (content truncated to fit terminal)"].join("\n");
9641
+ }
9642
+ const canContinue = this.#internalWrite(() => this.#stream.write(frameContent));
9643
+ if (canContinue === false && this.#stream.isTTY) {
9644
+ this.#drainHandler = () => {
9645
+ this.#drainHandler = void 0;
9646
+ this.#tryRender();
9647
+ };
9648
+ this.#stream.once("drain", this.#drainHandler);
9649
+ }
9650
+ this.#linesToClear = this.#computeLineCountFrom(frameContent, columns);
9651
+ } finally {
9652
+ if (shouldDisableSynchronizedOutput) {
9653
+ this.#internalWrite(() => this.#stream.write(SYNCHRONIZED_OUTPUT_DISABLE));
9654
+ }
9655
+ }
9656
+ return this;
9657
+ }
9658
+ start(text) {
9659
+ if (text) {
9660
+ this.text = text;
9661
+ }
9662
+ if (this.isSilent) {
9663
+ return this;
9664
+ }
9665
+ if (!this.isEnabled) {
9666
+ const symbol = this.text ? "-" : "";
9667
+ const line = " ".repeat(this.#options.indent) + this.#buildOutputLine(symbol, this.text, this.#options.prefixText, this.#options.suffixText);
9668
+ if (line.trim() !== "") {
9669
+ this.#internalWrite(() => this.#stream.write(line + "\n"));
9670
+ }
9671
+ return this;
9672
+ }
9673
+ if (this.isSpinning) {
9674
+ return this;
9675
+ }
9676
+ if (this.#options.hideCursor) {
9677
+ cli_cursor_default.hide(this.#stream);
9678
+ }
9679
+ if (this.#options.discardStdin && process8.stdin.isTTY) {
9680
+ stdin_discarder_default.start();
9681
+ this.#isDiscardingStdin = true;
9682
+ }
9683
+ this.#installHook();
9684
+ this.render();
9685
+ this.#id = setInterval(this.render.bind(this), this.interval);
9686
+ return this;
9687
+ }
9688
+ stop() {
9689
+ clearInterval(this.#id);
9690
+ this.#id = void 0;
9691
+ this.#frameIndex = -1;
9692
+ this.#lastFrameTime = 0;
9693
+ this.#clearRenderDeferral();
9694
+ this.#uninstallHook();
9695
+ if (this.#drainHandler) {
9696
+ this.#stream.removeListener("drain", this.#drainHandler);
9697
+ this.#drainHandler = void 0;
9698
+ }
9699
+ if (this.isEnabled) {
9700
+ this.clear();
9701
+ if (this.#options.hideCursor) {
9702
+ cli_cursor_default.show(this.#stream);
9703
+ }
9704
+ }
9705
+ if (this.#isDiscardingStdin) {
9706
+ this.#isDiscardingStdin = false;
9707
+ stdin_discarder_default.stop();
9708
+ }
9709
+ return this;
9710
+ }
9711
+ succeed(text) {
9712
+ return this.stopAndPersist({ symbol: symbols_exports.success, text });
9713
+ }
9714
+ fail(text) {
9715
+ return this.stopAndPersist({ symbol: symbols_exports.error, text });
9716
+ }
9717
+ warn(text) {
9718
+ return this.stopAndPersist({ symbol: symbols_exports.warning, text });
9719
+ }
9720
+ info(text) {
9721
+ return this.stopAndPersist({ symbol: symbols_exports.info, text });
9722
+ }
9723
+ stopAndPersist(options2 = {}) {
9724
+ if (this.isSilent) {
9725
+ return this;
9726
+ }
9727
+ const symbol = options2.symbol ?? " ";
9728
+ const text = options2.text ?? this.text;
9729
+ const prefixText = options2.prefixText ?? this.#options.prefixText;
9730
+ const suffixText = options2.suffixText ?? this.#options.suffixText;
9731
+ const textToWrite = this.#buildOutputLine(symbol, text, prefixText, suffixText) + "\n";
9732
+ this.stop();
9733
+ this.#internalWrite(() => this.#stream.write(textToWrite));
9734
+ return this;
9735
+ }
9736
+ };
9737
+ function ora(options2) {
9738
+ return new Ora(options2);
9739
+ }
9740
+
9741
+ // src/utils/spinner.ts
9742
+ function createSpinner(text) {
9743
+ return ora({
9744
+ text,
9745
+ spinner: "dots"
9746
+ });
9747
+ }
9748
+ function startSpinner(text) {
9749
+ const spinner = createSpinner(text);
9750
+ spinner.start();
9751
+ return spinner;
9752
+ }
9753
+ function spinnerSuccess(spinner, text) {
9754
+ spinner.succeed(text);
9755
+ }
9756
+ function spinnerFail(spinner, text) {
9757
+ spinner.fail(text);
9758
+ }
9759
+
9760
+ // src/commands/init.ts
9761
+ init_file_system();
9762
+ var execAsync = promisify(exec);
9763
+ var DIRECTORY_STRUCTURE = [
9764
+ ".claude/agents",
9765
+ ".claude/skills",
9766
+ "docs/\u8FED\u4EE3",
9767
+ "docs/Wiki/\u7528\u6237\u6587\u6863",
9768
+ "docs/Wiki/\u5F00\u53D1\u6587\u6863",
9769
+ "docs/Wiki/\u63A5\u53E3\u6587\u6863"
9770
+ ];
9771
+ var TEMPLATE_CONFIG = {
9772
+ owner: DEFAULT_REPO_OWNER,
9773
+ repo: DEFAULT_REPO_NAME,
9774
+ branch: DEFAULT_BRANCH,
9775
+ templatePath: DEFAULT_TEMPLATE_PATH,
9776
+ // GitHub 仓库 zip 下载地址
9777
+ get zipUrl() {
9778
+ return `https://github.com/${this.owner}/${this.repo}/archive/refs/heads/${this.branch}.zip`;
9779
+ }
9780
+ };
9781
+ var InitCommand = class {
9782
+ projectPath;
9783
+ verbose;
9784
+ constructor(config = {}) {
9785
+ this.projectPath = config.projectPath ?? process.cwd();
9786
+ this.verbose = config.verbose ?? false;
9787
+ if (this.verbose) {
9788
+ logger.setVerbose(true);
9789
+ }
9790
+ }
9791
+ /**
9792
+ * 检测是否已存在配置
9793
+ * @returns 如果配置已存在返回 true
9794
+ */
9795
+ async detectExistingConfig() {
9796
+ const claudeDir = path10.join(this.projectPath, ".claude");
9797
+ const configFile = path10.join(this.projectPath, ".claude", "project-config.md");
9798
+ const claudeDirExists = await pathExists(claudeDir);
9799
+ const configFileExists = await fileExists(configFile);
9800
+ return claudeDirExists && configFileExists;
9801
+ }
9802
+ /**
9803
+ * 创建目录结构
9804
+ * @returns 创建的目录数量
9805
+ */
9806
+ async createDirectoryStructure() {
9807
+ const spinner = startSpinner(INFO_CREATING_DIR);
9808
+ let createdCount = 0;
9809
+ try {
9810
+ for (const dir of DIRECTORY_STRUCTURE) {
9811
+ const fullPath = path10.join(this.projectPath, dir);
9812
+ const exists = await pathExists(fullPath);
9813
+ if (!exists) {
9814
+ await ensureDir(fullPath);
9815
+ createdCount++;
9816
+ logger.debug(`Created directory: ${dir}`);
9817
+ }
9818
+ }
9819
+ spinnerSuccess(spinner, `\u521B\u5EFA\u4E86 ${createdCount} \u4E2A\u76EE\u5F55`);
9820
+ return createdCount;
9821
+ } catch (error2) {
9822
+ spinnerFail(spinner, "\u76EE\u5F55\u521B\u5EFA\u5931\u8D25");
9823
+ throw error2;
9824
+ }
9825
+ }
9826
+ /**
9827
+ * 下载并应用模板
9828
+ * 使用 curl 下载 zip 文件,解压后复制到目标目录
9829
+ * @returns 处理的文件数量
9830
+ */
9831
+ async downloadAndApplyTemplate() {
9832
+ const spinner = startSpinner("\u6B63\u5728\u4E0B\u8F7D\u6A21\u677F...");
9833
+ try {
9834
+ const tempDir = path10.join(this.projectPath, ".ideal-cli-temp");
9835
+ await ensureDir(tempDir);
9836
+ const zipFile = path10.join(tempDir, "template.zip");
9837
+ const extractDir = path10.join(tempDir, "extracted");
9838
+ try {
9839
+ logger.debug(`Downloading from: ${TEMPLATE_CONFIG.zipUrl}`);
9840
+ await execAsync(`curl -sL "${TEMPLATE_CONFIG.zipUrl}" -o "${zipFile}"`);
9841
+ if (!await fileExists(zipFile)) {
9842
+ throw new Error("\u6A21\u677F\u4E0B\u8F7D\u5931\u8D25");
9843
+ }
9844
+ await ensureDir(extractDir);
9845
+ await execAsync(`unzip -q "${zipFile}" -d "${extractDir}"`);
9846
+ const extractedFolder = path10.join(extractDir, `${TEMPLATE_CONFIG.repo}-${TEMPLATE_CONFIG.branch}`);
9847
+ const templateSourceDir = path10.join(extractedFolder, TEMPLATE_CONFIG.templatePath);
9848
+ if (!await pathExists(templateSourceDir)) {
9849
+ throw new Error(`\u6A21\u677F\u76EE\u5F55\u4E0D\u5B58\u5728: ${TEMPLATE_CONFIG.templatePath}`);
9850
+ }
9851
+ const claudeDir = path10.join(this.projectPath, ".claude");
9852
+ await copyDir(templateSourceDir, claudeDir, {
9853
+ overwrite: true,
9854
+ filter: (src) => {
9855
+ const relativePath = path10.relative(templateSourceDir, src);
9856
+ return !relativePath.startsWith("configs") && relativePath !== "version.json";
9857
+ }
9858
+ });
9859
+ spinnerSuccess(spinner, "\u6A21\u677F\u6587\u4EF6\u5E94\u7528\u6210\u529F");
9860
+ return 0;
9861
+ } finally {
9862
+ await remove(tempDir);
9863
+ }
9864
+ } catch (error2) {
9865
+ spinnerFail(spinner, "\u6A21\u677F\u4E0B\u8F7D\u5931\u8D25");
9866
+ throw error2;
9867
+ }
9868
+ }
9869
+ /**
9870
+ * 输出成功消息和下一步指引
9871
+ */
9872
+ outputSuccessMessage() {
9873
+ logger.newline();
9874
+ logger.success("\u9879\u76EE\u521D\u59CB\u5316\u5B8C\u6210\uFF01");
9875
+ logger.newline();
9876
+ logger.divider();
9877
+ logger.newline();
9878
+ logger.info("\u4E0B\u4E00\u6B65\u64CD\u4F5C:");
9879
+ logger.newline();
9880
+ console.log(" 1. \u67E5\u770B .claude/project-config.md \u786E\u8BA4\u914D\u7F6E");
9881
+ console.log(" 2. \u67E5\u770B .claude/agents/ \u4E86\u89E3\u53EF\u7528\u7684\u89D2\u8272");
9882
+ console.log(" 3. \u67E5\u770B .claude/skills/ \u4E86\u89E3\u5DE5\u4F5C\u6D41\u9636\u6BB5");
9883
+ console.log(" 4. \u8FD0\u884C ideal doctor \u68C0\u67E5\u914D\u7F6E\u5B8C\u6574\u6027");
9884
+ logger.newline();
9885
+ logger.divider();
9886
+ }
9887
+ /**
9888
+ * 执行初始化命令
9889
+ * @param options 命令选项
9890
+ * @returns 退出码 (0 表示成功)
9891
+ */
9892
+ async execute(options2 = {}) {
9893
+ try {
9894
+ const configExists = await this.detectExistingConfig();
9895
+ if (configExists && !options2.force) {
9896
+ logger.error(ERR_DIR_EXISTS);
9897
+ logger.info("\u4F7F\u7528 --force \u9009\u9879\u53EF\u4EE5\u5F3A\u5236\u8986\u76D6\u73B0\u6709\u914D\u7F6E");
9898
+ return 1;
9899
+ }
9900
+ logger.title("\u521D\u59CB\u5316 ideal-cli \u5DE5\u4F5C\u6D41\u914D\u7F6E");
9901
+ logger.newline();
9902
+ await this.createDirectoryStructure();
9903
+ await this.downloadAndApplyTemplate();
9904
+ this.outputSuccessMessage();
9905
+ return 0;
9906
+ } catch (error2) {
9907
+ logger.error(
9908
+ `\u521D\u59CB\u5316\u5931\u8D25: ${error2 instanceof Error ? error2.message : "Unknown error"}`
9909
+ );
9910
+ if (this.verbose && error2 instanceof Error && error2.stack) {
9911
+ logger.debug(error2.stack);
9912
+ }
9913
+ return 1;
9914
+ }
9915
+ }
9916
+ };
9917
+
9918
+ // src/commands/index.ts
6812
9919
  async function handleDoctor(options2) {
6813
9920
  const doctor = new DoctorCommand({
6814
9921
  verbose: options2.verbose
@@ -6817,7 +9924,13 @@ async function handleDoctor(options2) {
6817
9924
  process.exit(exitCode);
6818
9925
  }
6819
9926
  function registerCommands(program) {
6820
- program.command("init").description(HELP_INIT).action(handleInit);
9927
+ program.command("init").description("\u521D\u59CB\u5316\u9879\u76EE\u5DE5\u4F5C\u6D41\u914D\u7F6E").option("-f, --force", "\u5F3A\u5236\u8986\u76D6\u5DF2\u5B58\u5728\u7684\u914D\u7F6E").option("-v, --verbose", "\u663E\u793A\u8BE6\u7EC6\u65E5\u5FD7").action(async (options2) => {
9928
+ const initCommand = new InitCommand({
9929
+ verbose: options2.verbose
9930
+ });
9931
+ const exitCode = await initCommand.execute({ force: options2.force });
9932
+ process.exit(exitCode);
9933
+ });
6821
9934
  const configCommand = createConfigCommand();
6822
9935
  configCommand.register(program);
6823
9936
  const updateCommand = new UpdateCommand();
@@ -6862,8 +9975,8 @@ async function main() {
6862
9975
  const program = createProgram();
6863
9976
  await program.parseAsync(process.argv);
6864
9977
  }
6865
- main().catch((error) => {
6866
- console.error("Error:", error.message);
9978
+ main().catch((error2) => {
9979
+ console.error("Error:", error2.message);
6867
9980
  process.exit(1);
6868
9981
  });
6869
9982
  /*! Bundled license information: