screw-up 1.5.0 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,18 +1,20 @@
1
1
  /*!
2
2
  * name: screw-up
3
- * version: 1.5.0
3
+ * version: 1.6.0
4
4
  * description: Simply package metadata inserter on Vite plugin
5
5
  * author: Kouji Matsui (@kekyo@mi.kekyo.net)
6
6
  * license: MIT
7
7
  * repository.url: https://github.com/kekyo/screw-up.git
8
- * git.commit.hash: 72fd5b88656bc400ba3fed500895826208e23217
8
+ * git.commit.hash: 10c04af9c9b127002592d48cbb6ec18cfe5048bb
9
9
  */
10
10
  import { existsSync } from "fs";
11
11
  import * as fs from "fs/promises";
12
- import { readFile } from "fs/promises";
13
- import { dirname, join } from "path";
12
+ import fs__default, { readFile } from "fs/promises";
13
+ import path, { dirname, join } from "path";
14
14
  import { glob } from "glob";
15
15
  import * as git from "isomorphic-git";
16
+ import crypto from "crypto";
17
+ import os from "os";
16
18
  var Space_Separator = /[\u1680\u2000-\u200A\u202F\u205F\u3000]/;
17
19
  var ID_Start = /[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312E\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FEA\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF19]|\uD806[\uDCA0-\uDCDF\uDCFF\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE83\uDE86-\uDE89\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F\uDFE0\uDFE1]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00-\uDD1E\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]/;
18
20
  var ID_Continue = /[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u08D4-\u08E1\u08E3-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u09FC\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0AF9-\u0AFF\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C80-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D00-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D54-\u0D57\u0D5F-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19D9\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C88\u1CD0-\u1CD2\u1CD4-\u1CF9\u1D00-\u1DF9\u1DFB-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099\u309A\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312E\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FEA\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C5\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0\uDF00-\uDF1F\uDF2D-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE38-\uDE3A\uDE3F\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE6\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC00-\uDC46\uDC66-\uDC6F\uDC7F-\uDCBA\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDCA-\uDDCC\uDDD0-\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE37\uDE3E\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC00-\uDC4A\uDC50-\uDC59\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDDD8-\uDDDD\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB7\uDEC0-\uDEC9\uDF00-\uDF19\uDF1D-\uDF2B\uDF30-\uDF39]|\uD806[\uDCA0-\uDCE9\uDCFF\uDE00-\uDE3E\uDE47\uDE50-\uDE83\uDE86-\uDE99\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC36\uDC38-\uDC40\uDC50-\uDC59\uDC72-\uDC8F\uDC92-\uDCA7\uDCA9-\uDCB6\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD36\uDD3A\uDD3C\uDD3D\uDD3F-\uDD47\uDD50-\uDD59]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF8F-\uDF9F\uDFE0\uDFE1]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00-\uDD1E\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A]|\uD83A[\uDC00-\uDCC4\uDCD0-\uDCD6\uDD00-\uDD4A\uDD50-\uDD59]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uDB40[\uDD00-\uDDEF]/;
@@ -1651,6 +1653,397 @@ function requireDayjs_min() {
1651
1653
  }
1652
1654
  var dayjs_minExports = requireDayjs_min();
1653
1655
  const dayjs = /* @__PURE__ */ getDefaultExportFromCjs(dayjs_minExports);
1656
+ const CLEANUP_DELETE_AGE_MS = 10 * 24 * 60 * 60 * 1e3;
1657
+ const getCachePath = (repoPath) => {
1658
+ const absoluteRepoPath = path.resolve(repoPath);
1659
+ const pathHash = crypto.createHash("sha1").update(absoluteRepoPath).digest("hex");
1660
+ return path.join(
1661
+ os.homedir(),
1662
+ ".cache",
1663
+ "screw-up",
1664
+ "tag-cache",
1665
+ `${pathHash}.json`
1666
+ );
1667
+ };
1668
+ const buildCacheValidation = async (repoPath) => {
1669
+ const tags = await git.listTags({ fs: fs__default, dir: repoPath });
1670
+ const tagListHash = crypto.createHash("sha256").update(tags.sort().join("\n")).digest("hex");
1671
+ const validation = {
1672
+ tagListHash,
1673
+ tagCount: tags.length
1674
+ };
1675
+ try {
1676
+ const packedRefsPath = path.join(repoPath, ".git", "packed-refs");
1677
+ const stats = await fs__default.stat(packedRefsPath);
1678
+ validation.packedRefsMtime = stats.mtimeMs;
1679
+ } catch (e) {
1680
+ }
1681
+ try {
1682
+ const refsTagsPath = path.join(repoPath, ".git", "refs", "tags");
1683
+ const stats = await fs__default.stat(refsTagsPath);
1684
+ validation.refsTagsMtime = stats.mtimeMs;
1685
+ } catch (e) {
1686
+ }
1687
+ return validation;
1688
+ };
1689
+ const isCacheValid = async (cachedData, repoPath) => {
1690
+ try {
1691
+ const currentTags = await git.listTags({ fs: fs__default, dir: repoPath });
1692
+ if (currentTags.length !== cachedData.validation.tagCount) {
1693
+ return false;
1694
+ }
1695
+ const tagListHash = crypto.createHash("sha256").update(currentTags.sort().join("\n")).digest("hex");
1696
+ if (cachedData.validation.tagListHash !== tagListHash) {
1697
+ return false;
1698
+ }
1699
+ if (cachedData.validation.packedRefsMtime !== void 0) {
1700
+ try {
1701
+ const packedRefsPath = path.join(repoPath, ".git", "packed-refs");
1702
+ const stats = await fs__default.stat(packedRefsPath);
1703
+ if (stats.mtimeMs > cachedData.timestamp) {
1704
+ return false;
1705
+ }
1706
+ } catch (e) {
1707
+ }
1708
+ }
1709
+ if (cachedData.validation.refsTagsMtime !== void 0) {
1710
+ try {
1711
+ const refsTagsPath = path.join(repoPath, ".git", "refs", "tags");
1712
+ const stats = await fs__default.stat(refsTagsPath);
1713
+ if (stats.mtimeMs > cachedData.timestamp) {
1714
+ return false;
1715
+ }
1716
+ } catch (e) {
1717
+ }
1718
+ }
1719
+ return true;
1720
+ } catch (e) {
1721
+ return false;
1722
+ }
1723
+ };
1724
+ const loadCachedTags = async (repoPath) => {
1725
+ try {
1726
+ const cachePath = getCachePath(repoPath);
1727
+ const data = await fs__default.readFile(cachePath, "utf-8");
1728
+ const cachedData = JSON.parse(data);
1729
+ if (cachedData.version !== "1.0.0") {
1730
+ return null;
1731
+ }
1732
+ return cachedData;
1733
+ } catch (e) {
1734
+ return null;
1735
+ }
1736
+ };
1737
+ const saveCachedTags = async (repoPath, tagCache, validation) => {
1738
+ const cachePath = getCachePath(repoPath);
1739
+ const cacheDir = path.dirname(cachePath);
1740
+ await fs__default.mkdir(cacheDir, { recursive: true });
1741
+ const randomSuffix = crypto.randomBytes(8).toString("hex");
1742
+ const tempPath = cachePath.replace(".json", `_${randomSuffix}.json`);
1743
+ const data = {
1744
+ version: "1.0.0",
1745
+ timestamp: Date.now(),
1746
+ repository: {
1747
+ path: repoPath
1748
+ },
1749
+ validation,
1750
+ tagCache: {
1751
+ commitToTags: Object.fromEntries(tagCache.commitToTags)
1752
+ }
1753
+ };
1754
+ try {
1755
+ await fs__default.writeFile(tempPath, JSON.stringify(data, null, 2), "utf-8");
1756
+ await fs__default.rename(tempPath, cachePath);
1757
+ } catch (error) {
1758
+ try {
1759
+ await fs__default.unlink(tempPath);
1760
+ } catch (e) {
1761
+ }
1762
+ throw error;
1763
+ }
1764
+ };
1765
+ const reconstructTagCache = (cachedData) => {
1766
+ return {
1767
+ commitToTags: new Map(Object.entries(cachedData.tagCache.commitToTags)),
1768
+ initialized: true
1769
+ };
1770
+ };
1771
+ const cleanupOldCacheFiles = async (currentCachePath, currentTimestamp) => {
1772
+ let deletedCount = 0;
1773
+ try {
1774
+ const cacheDir = path.dirname(currentCachePath);
1775
+ const currentFileName = path.basename(currentCachePath);
1776
+ const files = await fs__default.readdir(cacheDir);
1777
+ await Promise.all(
1778
+ files.map(async (fileName) => {
1779
+ if (!fileName.endsWith(".json") || fileName === currentFileName) {
1780
+ return;
1781
+ }
1782
+ const filePath = path.join(cacheDir, fileName);
1783
+ try {
1784
+ const stats = await fs__default.stat(filePath);
1785
+ const fileAge = currentTimestamp - stats.mtimeMs;
1786
+ if (fileAge > CLEANUP_DELETE_AGE_MS) {
1787
+ await fs__default.unlink(filePath);
1788
+ deletedCount++;
1789
+ }
1790
+ } catch (e) {
1791
+ }
1792
+ })
1793
+ );
1794
+ } catch (e) {
1795
+ }
1796
+ return deletedCount;
1797
+ };
1798
+ const calculateTagDiff = (cachedTags, currentTagList) => {
1799
+ const cachedTagNames = /* @__PURE__ */ new Set();
1800
+ for (const tags of cachedTags.values()) {
1801
+ for (const tag of tags) {
1802
+ cachedTagNames.add(tag.name);
1803
+ }
1804
+ }
1805
+ const currentSet = new Set(currentTagList);
1806
+ const added = [];
1807
+ const unchanged = [];
1808
+ for (const tagName of currentTagList) {
1809
+ if (cachedTagNames.has(tagName)) {
1810
+ unchanged.push(tagName);
1811
+ } else {
1812
+ added.push(tagName);
1813
+ }
1814
+ }
1815
+ const deleted = [];
1816
+ for (const tagName of cachedTagNames) {
1817
+ if (!currentSet.has(tagName)) {
1818
+ deleted.push(tagName);
1819
+ }
1820
+ }
1821
+ return { added, deleted, unchanged };
1822
+ };
1823
+ const removeTagsFromCache = (cache, tagNames) => {
1824
+ const tagNamesToRemove = new Set(tagNames);
1825
+ const newCache = /* @__PURE__ */ new Map();
1826
+ for (const [commitHash, tags] of cache.entries()) {
1827
+ const filteredTags = tags.filter((tag) => !tagNamesToRemove.has(tag.name));
1828
+ if (filteredTags.length > 0) {
1829
+ newCache.set(commitHash, filteredTags);
1830
+ }
1831
+ }
1832
+ return newCache;
1833
+ };
1834
+ const addTagsToCache = (cache, newTags) => {
1835
+ const newCache = new Map(cache);
1836
+ for (const tag of newTags) {
1837
+ const existing = newCache.get(tag.hash) || [];
1838
+ const updated = [...existing, tag];
1839
+ updated.sort((a, b) => a.name.localeCompare(b.name));
1840
+ newCache.set(tag.hash, updated);
1841
+ }
1842
+ return newCache;
1843
+ };
1844
+ const updateTagsInCache = (cache, tagNames, updatedTags) => {
1845
+ let newCache = removeTagsFromCache(cache, tagNames);
1846
+ newCache = addTagsToCache(newCache, updatedTags);
1847
+ return newCache;
1848
+ };
1849
+ const resolveTagToCommit = async (repoPath, tagOid) => {
1850
+ var _a;
1851
+ try {
1852
+ const tagObject = await git.readTag({
1853
+ fs: fs__default,
1854
+ dir: repoPath,
1855
+ oid: tagOid
1856
+ });
1857
+ if ((_a = tagObject == null ? void 0 : tagObject.tag) == null ? void 0 : _a.object) {
1858
+ return tagObject.tag.object;
1859
+ }
1860
+ } catch (e) {
1861
+ }
1862
+ return tagOid;
1863
+ };
1864
+ const getTagsInfo = async (repoPath, tagNames, parseVersion2) => {
1865
+ const result = [];
1866
+ await Promise.all(
1867
+ tagNames.map(async (tagName) => {
1868
+ try {
1869
+ const oid = await git.resolveRef({
1870
+ fs: fs__default,
1871
+ dir: repoPath,
1872
+ ref: `refs/tags/${tagName}`
1873
+ });
1874
+ const commitHash = await resolveTagToCommit(repoPath, oid);
1875
+ const version2 = parseVersion2(tagName);
1876
+ result.push({
1877
+ name: tagName,
1878
+ hash: commitHash,
1879
+ version: version2
1880
+ });
1881
+ } catch (error) {
1882
+ console.warn(`Failed to get info for tag ${tagName}:`, error);
1883
+ }
1884
+ })
1885
+ );
1886
+ return result;
1887
+ };
1888
+ const buildCompleteTagCache = async (repoPath, parseVersion2) => {
1889
+ const cache = /* @__PURE__ */ new Map();
1890
+ const tags = await git.listTags({ fs: fs__default, dir: repoPath });
1891
+ await Promise.all(
1892
+ tags.map(async (tagName) => {
1893
+ const oid = await git.resolveRef({
1894
+ fs: fs__default,
1895
+ dir: repoPath,
1896
+ ref: `refs/tags/${tagName}`
1897
+ });
1898
+ const commitHash = await resolveTagToCommit(repoPath, oid);
1899
+ const version2 = parseVersion2(tagName);
1900
+ const tagInfo = {
1901
+ name: tagName,
1902
+ hash: commitHash,
1903
+ version: version2
1904
+ };
1905
+ if (!cache.has(commitHash)) {
1906
+ cache.set(commitHash, []);
1907
+ }
1908
+ cache.get(commitHash).push(tagInfo);
1909
+ })
1910
+ );
1911
+ for (const tags2 of cache.values()) {
1912
+ tags2.sort((a, b) => a.name.localeCompare(b.name));
1913
+ }
1914
+ return cache;
1915
+ };
1916
+ const hasTagMoved = async (repoPath, tagName, cachedCommit) => {
1917
+ try {
1918
+ const oid = await git.resolveRef({
1919
+ fs: fs__default,
1920
+ dir: repoPath,
1921
+ ref: `refs/tags/${tagName}`
1922
+ });
1923
+ const currentCommit = await resolveTagToCommit(repoPath, oid);
1924
+ return currentCommit !== cachedCommit;
1925
+ } catch (e) {
1926
+ return true;
1927
+ }
1928
+ };
1929
+ const findModifiedTags = async (repoPath, tagNames, cache) => {
1930
+ const modified = [];
1931
+ await Promise.all(
1932
+ tagNames.map(async (tagName) => {
1933
+ let cachedCommit;
1934
+ for (const [commit, tags] of cache.entries()) {
1935
+ const tag = tags.find((t) => t.name === tagName);
1936
+ if (tag) {
1937
+ cachedCommit = commit;
1938
+ break;
1939
+ }
1940
+ }
1941
+ if (cachedCommit) {
1942
+ const moved = await hasTagMoved(repoPath, tagName, cachedCommit);
1943
+ if (moved) {
1944
+ modified.push(tagName);
1945
+ }
1946
+ }
1947
+ })
1948
+ );
1949
+ return modified;
1950
+ };
1951
+ const loadOrBuildTagCache = async (repoPath, parseVersion2, logger) => {
1952
+ const startTime = Date.now();
1953
+ const cachedData = await loadCachedTags(repoPath);
1954
+ const currentTags = await git.listTags({ fs: fs__default, dir: repoPath });
1955
+ if (cachedData && await isCacheValid(cachedData, repoPath)) {
1956
+ logger.debug(`Cache valid, performing differential update...`);
1957
+ const cache = reconstructTagCache(cachedData);
1958
+ const stats = await performDifferentialUpdate(
1959
+ repoPath,
1960
+ cache.commitToTags,
1961
+ currentTags,
1962
+ parseVersion2,
1963
+ logger
1964
+ );
1965
+ const validation = await buildCacheValidation(repoPath);
1966
+ await saveCachedTags(repoPath, cache, validation);
1967
+ if (cachedData && Date.now() - cachedData.timestamp > 24 * 60 * 60 * 1e3) {
1968
+ try {
1969
+ const cachePath = getCachePath(repoPath);
1970
+ const deletedCount = await cleanupOldCacheFiles(cachePath, Date.now());
1971
+ if (deletedCount > 0) {
1972
+ logger.debug(`Cleaned up ${deletedCount} old cache files`);
1973
+ }
1974
+ } catch (e) {
1975
+ }
1976
+ }
1977
+ return {
1978
+ cache,
1979
+ stats: {
1980
+ ...stats,
1981
+ updateTime: Date.now() - startTime,
1982
+ fullRebuild: false
1983
+ }
1984
+ };
1985
+ } else {
1986
+ logger.debug(`Cache invalid or missing, building from scratch...`);
1987
+ const commitToTags = await buildCompleteTagCache(repoPath, parseVersion2);
1988
+ const cache = {
1989
+ commitToTags,
1990
+ initialized: true
1991
+ };
1992
+ const validation = await buildCacheValidation(repoPath);
1993
+ await saveCachedTags(repoPath, cache, validation);
1994
+ return {
1995
+ cache,
1996
+ stats: {
1997
+ added: currentTags.length,
1998
+ deleted: 0,
1999
+ modified: 0,
2000
+ unchanged: 0,
2001
+ totalTags: currentTags.length,
2002
+ updateTime: Date.now() - startTime,
2003
+ fullRebuild: true
2004
+ }
2005
+ };
2006
+ }
2007
+ };
2008
+ async function performDifferentialUpdate(repoPath, cache, currentTags, parseVersion2, logger) {
2009
+ const diff = calculateTagDiff(cache, currentTags);
2010
+ logger.debug(
2011
+ `Tag diff: +${diff.added.length} -${diff.deleted.length} =${diff.unchanged.length}`
2012
+ );
2013
+ const modified = await findModifiedTags(repoPath, diff.unchanged, cache);
2014
+ logger.debug(`Found ${modified.length} modified tags`);
2015
+ if (diff.deleted.length > 0) {
2016
+ const newCache = removeTagsFromCache(cache, diff.deleted);
2017
+ cache.clear();
2018
+ for (const [k, v] of newCache) {
2019
+ cache.set(k, v);
2020
+ }
2021
+ }
2022
+ if (diff.added.length > 0) {
2023
+ const newTags = await getTagsInfo(repoPath, diff.added, parseVersion2);
2024
+ const newCache = addTagsToCache(cache, newTags);
2025
+ cache.clear();
2026
+ for (const [k, v] of newCache) {
2027
+ cache.set(k, v);
2028
+ }
2029
+ }
2030
+ if (modified.length > 0) {
2031
+ const updatedTags = await getTagsInfo(repoPath, modified, parseVersion2);
2032
+ const newCache = updateTagsInCache(cache, modified, updatedTags);
2033
+ cache.clear();
2034
+ for (const [k, v] of newCache) {
2035
+ cache.set(k, v);
2036
+ }
2037
+ }
2038
+ const unchangedCount = diff.unchanged.length - modified.length;
2039
+ return {
2040
+ added: diff.added.length,
2041
+ deleted: diff.deleted.length,
2042
+ modified: modified.length,
2043
+ unchanged: unchangedCount,
2044
+ totalTags: currentTags.length
2045
+ };
2046
+ }
1654
2047
  const parseVersionComponent = (value) => {
1655
2048
  const num = parseInt(value, 10);
1656
2049
  return num < 0 || num > 65535 ? void 0 : num;
@@ -1776,67 +2169,6 @@ const getCurrentCommit = async (repositoryPath) => {
1776
2169
  return void 0;
1777
2170
  }
1778
2171
  };
1779
- const buildTagCache = async (repositoryPath) => {
1780
- const cache = {
1781
- commitToTags: /* @__PURE__ */ new Map(),
1782
- initialized: true
1783
- };
1784
- try {
1785
- const tags = await git.listTags({ fs, dir: repositoryPath });
1786
- await Promise.all(
1787
- tags.map(async (tagName) => {
1788
- try {
1789
- const tagOid = await git.resolveRef({
1790
- fs,
1791
- dir: repositoryPath,
1792
- ref: `refs/tags/${tagName}`
1793
- });
1794
- const version2 = parseVersion(tagName);
1795
- const tagInfo = {
1796
- name: tagName,
1797
- hash: tagOid,
1798
- // This will be updated for annotated tags
1799
- version: version2 && isValidVersion(version2) ? version2 : void 0
1800
- };
1801
- if (!cache.commitToTags.has(tagOid)) {
1802
- cache.commitToTags.set(tagOid, []);
1803
- }
1804
- cache.commitToTags.get(tagOid).push({ ...tagInfo, hash: tagOid });
1805
- try {
1806
- const tagObject = await git.readTag({
1807
- fs,
1808
- dir: repositoryPath,
1809
- oid: tagOid
1810
- });
1811
- if (tagObject && tagObject.tag.object) {
1812
- const commitOid = tagObject.tag.object;
1813
- const lightweightTags = cache.commitToTags.get(tagOid);
1814
- if (lightweightTags) {
1815
- const index = lightweightTags.findIndex(
1816
- (t) => t.name === tagName
1817
- );
1818
- if (index >= 0) {
1819
- lightweightTags.splice(index, 1);
1820
- if (lightweightTags.length === 0) {
1821
- cache.commitToTags.delete(tagOid);
1822
- }
1823
- }
1824
- }
1825
- if (!cache.commitToTags.has(commitOid)) {
1826
- cache.commitToTags.set(commitOid, []);
1827
- }
1828
- cache.commitToTags.get(commitOid).push({ ...tagInfo, hash: commitOid });
1829
- }
1830
- } catch (e) {
1831
- }
1832
- } catch (e) {
1833
- }
1834
- })
1835
- );
1836
- } catch (e) {
1837
- }
1838
- return cache;
1839
- };
1840
2172
  const getRelatedTagsFromCache = (cache, commitHash) => {
1841
2173
  if (!cache.initialized) {
1842
2174
  return [];
@@ -2001,10 +2333,23 @@ const getGitMetadata = async (repositoryPath, checkWorkingDirectoryStatus, logge
2001
2333
  if (!currentCommit) {
2002
2334
  return metadata;
2003
2335
  }
2004
- const tagCache = await buildTagCache(gitRootPath);
2005
- logger.debug(
2006
- `Built tag cache with ${tagCache.commitToTags.size} commit entries`
2336
+ const { cache: tagCache, stats } = await loadOrBuildTagCache(
2337
+ gitRootPath,
2338
+ (tagName) => {
2339
+ const version22 = parseVersion(tagName);
2340
+ return version22 && isValidVersion(version22) ? version22 : void 0;
2341
+ },
2342
+ logger
2007
2343
  );
2344
+ if (stats.fullRebuild) {
2345
+ logger.debug(
2346
+ `Built new tag cache: ${stats.totalTags} tags in ${stats.updateTime}ms`
2347
+ );
2348
+ } else {
2349
+ logger.debug(
2350
+ `Updated cache differentially: +${stats.added} -${stats.deleted} ~${stats.modified} =${stats.unchanged} (${stats.updateTime}ms)`
2351
+ );
2352
+ }
2008
2353
  const reachedCommits = /* @__PURE__ */ new Map();
2009
2354
  let version2 = await lookupVersionLabelRecursive(
2010
2355
  gitRootPath,
@@ -2061,11 +2406,11 @@ const getFetchGitMetadata = (targetDir, checkWorkingDirectoryStatus, logger) =>
2061
2406
  };
2062
2407
  };
2063
2408
  const name = "screw-up";
2064
- const version = "1.5.0";
2409
+ const version = "1.6.0";
2065
2410
  const author = "Kouji Matsui (@kekyo@mi.kekyo.net)";
2066
2411
  const license = "MIT";
2067
2412
  const repository_url = "https://github.com/kekyo/screw-up.git";
2068
- const git_commit_hash = "72fd5b88656bc400ba3fed500895826208e23217";
2413
+ const git_commit_hash = "10c04af9c9b127002592d48cbb6ec18cfe5048bb";
2069
2414
  const packageMetadata = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
2070
2415
  __proto__: null,
2071
2416
  author,
@@ -2088,4 +2433,4 @@ export {
2088
2433
  resolvePackageMetadata as r,
2089
2434
  version as v
2090
2435
  };
2091
- //# sourceMappingURL=packageMetadata-C2Yob7-F.js.map
2436
+ //# sourceMappingURL=packageMetadata-LkGK6Bjw.js.map