screw-up 1.32.0 → 1.33.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/dist/index.cjs +108 -54
  2. package/dist/index.cjs.map +1 -1
  3. package/dist/index.mjs +4 -4
  4. package/dist/main.cjs +108 -54
  5. package/dist/main.cjs.map +1 -1
  6. package/dist/main.mjs +5 -5
  7. package/dist/{metadata-file-D79yMa_A.js → metadata-file-Case8fsm.js} +105 -51
  8. package/dist/metadata-file-Case8fsm.js.map +1 -0
  9. package/dist/{packageMetadata-Sm2NpI2b.js → packageMetadata-4rUlIBjt.js} +6 -6
  10. package/dist/{packageMetadata-Sm2NpI2b.js.map → packageMetadata-4rUlIBjt.js.map} +1 -1
  11. package/dist/{packageMetadata-Cwh4Fqmw.cjs → packageMetadata-CaaD3Ehh.cjs} +3 -3
  12. package/dist/{packageMetadata-6po5LHyH.cjs → packageMetadata-k_QXJ2PH.cjs} +5 -5
  13. package/dist/{packageMetadata-6po5LHyH.cjs.map → packageMetadata-k_QXJ2PH.cjs.map} +1 -1
  14. package/dist/src/analyzer.d.ts +2 -2
  15. package/dist/src/analyzer.d.ts.map +1 -1
  16. package/dist/src/cli-internal.d.ts +2 -2
  17. package/dist/src/cli.d.ts +2 -2
  18. package/dist/src/declaration-import-fix.d.ts +2 -2
  19. package/dist/src/default-import-fix.d.ts +2 -2
  20. package/dist/src/fast-tags.d.ts +2 -2
  21. package/dist/src/generated/packageMetadata.d.ts +4 -4
  22. package/dist/src/git-operations.d.ts +2 -2
  23. package/dist/src/git-operations.d.ts.map +1 -1
  24. package/dist/src/git-ref-utils.d.ts +32 -4
  25. package/dist/src/git-ref-utils.d.ts.map +1 -1
  26. package/dist/src/index.d.ts +2 -2
  27. package/dist/src/internal.d.ts +2 -2
  28. package/dist/src/main.d.ts +2 -2
  29. package/dist/src/metadata-file.d.ts +2 -2
  30. package/dist/src/text-edits.d.ts +2 -2
  31. package/dist/src/types.d.ts +2 -2
  32. package/dist/src/vite-plugin.d.ts +2 -2
  33. package/package.json +8 -8
  34. package/dist/metadata-file-D79yMa_A.js.map +0 -1
package/dist/main.mjs CHANGED
@@ -1,15 +1,15 @@
1
1
  #!/usr/bin/env node
2
2
  /*!
3
3
  * name: screw-up
4
- * version: 1.32.0
4
+ * version: 1.33.0
5
5
  * description: Simply package metadata inserter on Vite plugin
6
6
  * author: Kouji Matsui (@kekyo@mi.kekyo.net)
7
7
  * license: MIT
8
8
  * repository.url: https://github.com/kekyo/screw-up.git
9
- * git.commit.hash: 8a0078c34fa41bdb0cbf2d23837ac5e3217cbf53
9
+ * git.commit.hash: be56ff1901b5073e1b0238a28b80d0c4f3c1e894
10
10
  */
11
- import { a as collectWorkspaceSiblings, c as replacePeerDependenciesWildcards, d as require_dist, i as getFetchGitMetadata, l as resolvePackageMetadata, n as generateMetadataFileContent, o as createConsoleLogger, p as __toESM, r as writeFileIfChanged, s as findWorkspaceRoot, t as ensureMetadataGitignore, u as resolveRawPackageJsonObject } from "./metadata-file-D79yMa_A.js";
12
- import { n as name } from "./packageMetadata-Sm2NpI2b.js";
11
+ import { a as collectWorkspaceSiblings, c as replacePeerDependenciesWildcards, d as require_dist, i as getFetchGitMetadata, l as resolvePackageMetadata, n as generateMetadataFileContent, o as createConsoleLogger, p as __toESM, r as writeFileIfChanged, s as findWorkspaceRoot, t as ensureMetadataGitignore, u as resolveRawPackageJsonObject } from "./metadata-file-Case8fsm.js";
12
+ import { n as name } from "./packageMetadata-4rUlIBjt.js";
13
13
  import { copyFile, mkdir, mkdtemp, readFile, readdir, rm, stat, writeFile } from "fs/promises";
14
14
  import { createReadStream, createWriteStream, existsSync, statSync } from "fs";
15
15
  import { dirname, isAbsolute, join, resolve } from "path";
@@ -1357,7 +1357,7 @@ var publishCommand = async (args, logger) => {
1357
1357
  }
1358
1358
  };
1359
1359
  var showHelp = async () => {
1360
- const { author, license, repository_url, version, git_commit_hash } = await import("./packageMetadata-Sm2NpI2b.js").then((n) => n.r);
1360
+ const { author, license, repository_url, version, git_commit_hash } = await import("./packageMetadata-4rUlIBjt.js").then((n) => n.r);
1361
1361
  console.info(`screw-up [${version}-${git_commit_hash}]
1362
1362
  Easy package metadata inserter CLI
1363
1363
  Copyright (c) ${author}
@@ -1,11 +1,11 @@
1
1
  /*!
2
2
  * name: screw-up
3
- * version: 1.32.0
3
+ * version: 1.33.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: 8a0078c34fa41bdb0cbf2d23837ac5e3217cbf53
8
+ * git.commit.hash: be56ff1901b5073e1b0238a28b80d0c4f3c1e894
9
9
  */
10
10
  import fs, { mkdir, open, readFile, readdir, stat, writeFile } from "fs/promises";
11
11
  import { existsSync } from "fs";
@@ -1892,17 +1892,45 @@ var PACKED_OBJECT_TYPE_BY_CODE = new Map([
1892
1892
  [7, "ref-delta"]
1893
1893
  ]);
1894
1894
  /**
1895
- * Resolve the actual Git directory for repositories, worktrees, and submodules.
1895
+ * Resolve Git directory paths for repositories, worktrees, and submodules.
1896
1896
  * @param repoPath - Repository path
1897
- * @returns The resolved Git directory path
1897
+ * @returns The resolved Git directory paths
1898
1898
  */
1899
- var getActualGitDir = async (repoPath) => {
1899
+ var resolveGitDirectoryPaths = async (repoPath) => {
1900
1900
  const gitDir = join(repoPath, ".git");
1901
1901
  const gitStat = await stat(gitDir).catch(() => null);
1902
- if (!(gitStat === null || gitStat === void 0 ? void 0 : gitStat.isFile())) return gitDir;
1903
- const match = (await readFile(gitDir, "utf-8")).match(/^gitdir:\s*(.+)$/m);
1904
- if (!match) return gitDir;
1905
- return isAbsolute(match[1]) ? match[1] : join(repoPath, match[1]);
1902
+ const resolvedGitDir = !(gitStat === null || gitStat === void 0 ? void 0 : gitStat.isFile()) ? gitDir : await (async () => {
1903
+ const match = (await readFile(gitDir, "utf-8")).match(/^gitdir:\s*(.+)$/m);
1904
+ if (!match) return gitDir;
1905
+ return isAbsolute(match[1]) ? match[1] : join(repoPath, match[1]);
1906
+ })();
1907
+ return {
1908
+ gitDir: resolvedGitDir,
1909
+ commonGitDir: await readFile(join(resolvedGitDir, "commondir"), "utf-8").then((content) => {
1910
+ const commondir = content.trim();
1911
+ if (!commondir) return resolvedGitDir;
1912
+ return isAbsolute(commondir) ? commondir : join(resolvedGitDir, commondir);
1913
+ }).catch((error) => {
1914
+ if ((error === null || error === void 0 ? void 0 : error.code) !== "ENOENT") throw error;
1915
+ return resolvedGitDir;
1916
+ })
1917
+ };
1918
+ };
1919
+ /**
1920
+ * Resolve the worktree-specific Git directory.
1921
+ * @param repoPath - Repository path
1922
+ * @returns The resolved worktree-specific Git directory path
1923
+ */
1924
+ var getActualGitDir = async (repoPath) => {
1925
+ return (await resolveGitDirectoryPaths(repoPath)).gitDir;
1926
+ };
1927
+ /**
1928
+ * Resolve the common Git directory used for refs and objects.
1929
+ * @param repoPath - Repository path
1930
+ * @returns The resolved common Git directory path
1931
+ */
1932
+ var getCommonGitDir = async (repoPath) => {
1933
+ return (await resolveGitDirectoryPaths(repoPath)).commonGitDir;
1906
1934
  };
1907
1935
  var readFixedRange = async (fileHandle, offset, length) => {
1908
1936
  const buffer = Buffer.alloc(length);
@@ -2119,11 +2147,11 @@ var parseTreeEntries = (treeContent) => {
2119
2147
  return entries;
2120
2148
  };
2121
2149
  var createGitObjectResolver = async (repoPath) => {
2122
- const actualGitDir = await getActualGitDir(repoPath);
2150
+ const commonGitDir = await getCommonGitDir(repoPath);
2123
2151
  const resolvedObjects = /* @__PURE__ */ new Map();
2124
2152
  let packStorePromise;
2125
2153
  const getPackStore = async () => {
2126
- if (!packStorePromise) packStorePromise = loadPackStore(actualGitDir);
2154
+ if (!packStorePromise) packStorePromise = loadPackStore(commonGitDir);
2127
2155
  return packStorePromise;
2128
2156
  };
2129
2157
  const readPackedObject = async (location) => {
@@ -2159,7 +2187,7 @@ var createGitObjectResolver = async (repoPath) => {
2159
2187
  const cachedObject = resolvedObjects.get(oid);
2160
2188
  if (cachedObject) return cachedObject;
2161
2189
  const objectPromise = (async () => {
2162
- const looseObject = await readLooseObject(actualGitDir, oid);
2190
+ const looseObject = await readLooseObject(commonGitDir, oid);
2163
2191
  if (looseObject) return looseObject;
2164
2192
  const location = (await getPackStore()).objectByOid.get(oid);
2165
2193
  if (!location) throw new Error(`Git object not found: ${oid}`);
@@ -2304,8 +2332,8 @@ var readLooseTags = async (refsTagsPath) => {
2304
2332
  * @returns Array of all tag names
2305
2333
  */
2306
2334
  var listTagsFast = async (repoPath) => {
2307
- const actualGitDir = await getActualGitDir(repoPath);
2308
- const [packedTags, looseTags] = await Promise.all([parsePackedRefs(join(actualGitDir, "packed-refs")), readLooseTags(join(actualGitDir, "refs", "tags"))]);
2335
+ const commonGitDir = await getCommonGitDir(repoPath);
2336
+ const [packedTags, looseTags] = await Promise.all([parsePackedRefs(join(commonGitDir, "packed-refs")), readLooseTags(join(commonGitDir, "refs", "tags"))]);
2309
2337
  const allTags = new Set([...packedTags, ...looseTags]);
2310
2338
  return Array.from(allTags).sort();
2311
2339
  };
@@ -2318,11 +2346,11 @@ var listTagsFast = async (repoPath) => {
2318
2346
  var resolveTagsBatchWithCommit = async (repoPath, tagNames, logger) => {
2319
2347
  const startTime = Date.now();
2320
2348
  const result = /* @__PURE__ */ new Map();
2321
- const actualGitDir = await getActualGitDir(repoPath);
2349
+ const commonGitDir = await getCommonGitDir(repoPath);
2322
2350
  const tagSet = new Set(tagNames);
2323
2351
  const packedRefsStart = Date.now();
2324
2352
  try {
2325
- const lines = (await readFile(join(actualGitDir, "packed-refs"), "utf-8")).split("\n");
2353
+ const lines = (await readFile(join(commonGitDir, "packed-refs"), "utf-8")).split("\n");
2326
2354
  for (let i = 0; i < lines.length; i++) {
2327
2355
  const line = lines[i];
2328
2356
  if (line.startsWith("#") || !line.trim()) continue;
@@ -2346,7 +2374,7 @@ var resolveTagsBatchWithCommit = async (repoPath, tagNames, logger) => {
2346
2374
  if (remainingTags.length > 0) {
2347
2375
  const looseRefsStart = Date.now();
2348
2376
  const looseTagEntries = (await Promise.all(remainingTags.map(async (tagName) => {
2349
- const looseRefPath = join(actualGitDir, "refs", "tags", tagName);
2377
+ const looseRefPath = join(commonGitDir, "refs", "tags", tagName);
2350
2378
  try {
2351
2379
  return {
2352
2380
  tagName,
@@ -2562,16 +2590,26 @@ var formatVersion = (version) => {
2562
2590
  return result;
2563
2591
  };
2564
2592
  /**
2565
- * Get a commit by hash
2593
+ * Build a Git read context that can operate correctly inside worktrees.
2566
2594
  * @param repositoryPath - Local Git repository directory
2595
+ * @returns The resolved Git read context
2596
+ */
2597
+ var createGitReadContext = async (repositoryPath) => ({
2598
+ dir: repositoryPath,
2599
+ gitdir: await getCommonGitDir(repositoryPath)
2600
+ });
2601
+ /**
2602
+ * Get a commit by hash
2603
+ * @param context - Git read context
2567
2604
  * @param hash - The hash of the commit
2568
2605
  * @returns The commit or undefined if the commit is not found
2569
2606
  */
2570
- var getCommit = async (repositoryPath, hash) => {
2607
+ var getCommit = async (context, hash) => {
2571
2608
  try {
2572
2609
  const commit = await git.readCommit({
2573
2610
  fs,
2574
- dir: repositoryPath,
2611
+ dir: context.dir,
2612
+ gitdir: context.gitdir,
2575
2613
  oid: hash
2576
2614
  });
2577
2615
  return {
@@ -2588,19 +2626,20 @@ var getCommit = async (repositoryPath, hash) => {
2588
2626
  };
2589
2627
  /**
2590
2628
  * Get the current commit
2591
- * @param repositoryPath - Local Git repository directory
2629
+ * @param context - Git read context
2592
2630
  * @returns The current commit or undefined if the current commit is not found
2593
2631
  */
2594
- var getCurrentCommit = async (repositoryPath) => {
2632
+ var getCurrentCommit = async (context) => {
2595
2633
  try {
2596
2634
  const currentOid = await git.resolveRef({
2597
2635
  fs,
2598
- dir: repositoryPath,
2636
+ dir: context.dir,
2599
2637
  ref: "HEAD"
2600
2638
  });
2601
2639
  const commit = await git.readCommit({
2602
2640
  fs,
2603
- dir: repositoryPath,
2641
+ dir: context.dir,
2642
+ gitdir: context.gitdir,
2604
2643
  oid: currentOid
2605
2644
  });
2606
2645
  return {
@@ -2626,21 +2665,23 @@ var getRelatedTagsFromMap = (commitToTags, commitHash) => {
2626
2665
  };
2627
2666
  /**
2628
2667
  * Get the commit related branch name.
2629
- * @param repositoryPath - Local Git repository directory
2668
+ * @param context - Git read context
2630
2669
  * @param commitHash - The hash of the commit
2631
2670
  * @returns The commit related branch name or undefined if not found
2632
2671
  */
2633
- var getRelatedBranches = async (repositoryPath, commitHash) => {
2672
+ var getRelatedBranches = async (context, commitHash) => {
2634
2673
  try {
2635
2674
  const branches = await git.listBranches({
2636
2675
  fs,
2637
- dir: repositoryPath
2676
+ dir: context.dir,
2677
+ gitdir: context.gitdir
2638
2678
  });
2639
2679
  const relatedBranches = [];
2640
2680
  for (const branch of branches) try {
2641
2681
  if (await git.resolveRef({
2642
2682
  fs,
2643
- dir: repositoryPath,
2683
+ dir: context.dir,
2684
+ gitdir: context.gitdir,
2644
2685
  ref: branch
2645
2686
  }) === commitHash) relatedBranches.push(branch);
2646
2687
  } catch (_unused3) {}
@@ -2784,7 +2825,7 @@ var formatModifiedFile = (modifiedFile) => `'${modifiedFile.path}':${modifiedFil
2784
2825
  * @param commitToTags - Map of commit hash to tags for performance
2785
2826
  * @returns The version or undefined if no version is found
2786
2827
  */
2787
- var lookupVersionLabelRecursive = async (cwd, commit, reachedCommits, commitToTags) => {
2828
+ var lookupVersionLabelRecursive = async (context, commit, reachedCommits, commitToTags) => {
2788
2829
  const scheduledStack = [];
2789
2830
  let version = {
2790
2831
  major: 0,
@@ -2808,10 +2849,11 @@ var lookupVersionLabelRecursive = async (cwd, commit, reachedCommits, commitToTa
2808
2849
  try {
2809
2850
  const parentHashes = (await git.readCommit({
2810
2851
  fs,
2811
- dir: cwd,
2852
+ dir: context.dir,
2853
+ gitdir: context.gitdir,
2812
2854
  oid: currentCommit.hash
2813
2855
  })).commit.parent || [];
2814
- parentCommits = (await Promise.all(parentHashes.map((parentHash) => getCommit(cwd, parentHash)))).filter((ci) => ci !== void 0);
2856
+ parentCommits = (await Promise.all(parentHashes.map((parentHash) => getCommit(context, parentHash)))).filter((ci) => ci !== void 0);
2815
2857
  } catch (_unused6) {}
2816
2858
  if (parentCommits.length === 0) {
2817
2859
  reachedCommits.set(currentCommit.hash, version);
@@ -2826,7 +2868,7 @@ var lookupVersionLabelRecursive = async (cwd, commit, reachedCommits, commitToTa
2826
2868
  while (scheduledStack.length >= 1) {
2827
2869
  const { commit: scheduledCommit, parents } = scheduledStack.pop();
2828
2870
  if (parents.length >= 2) for (let index = 1; index < parents.length; index++) {
2829
- const alternateParentVersion = await lookupVersionLabelRecursive(cwd, parents[index], reachedCommits, commitToTags);
2871
+ const alternateParentVersion = await lookupVersionLabelRecursive(context, parents[index], reachedCommits, commitToTags);
2830
2872
  if (alternateParentVersion && compareVersions(alternateParentVersion, version) < 0) version = alternateParentVersion;
2831
2873
  }
2832
2874
  version = incrementLastVersionComponent(version);
@@ -2854,12 +2896,31 @@ var getGitMetadata = async (repositoryPath, checkWorkingDirectoryStatus, logger)
2854
2896
  logger.debug(`[screw-up] Total getGitMetadata: ${Date.now() - startTime}ms`);
2855
2897
  return metadata;
2856
2898
  }
2899
+ let gitContext;
2857
2900
  try {
2858
- const currentCommit = await getCurrentCommit(gitRootPath);
2859
- if (!currentCommit) {
2860
- logger.debug(`[screw-up] Total getGitMetadata: ${Date.now() - startTime}ms`);
2861
- return metadata;
2901
+ gitContext = await createGitReadContext(gitRootPath);
2902
+ } catch (error) {
2903
+ logger.warn(`Failed to resolve git metadata context: ${error}`);
2904
+ logger.debug(`[screw-up] Total getGitMetadata: ${Date.now() - startTime}ms`);
2905
+ return metadata;
2906
+ }
2907
+ const currentCommit = await getCurrentCommit(gitContext);
2908
+ if (!currentCommit) {
2909
+ logger.debug(`[screw-up] Total getGitMetadata: ${Date.now() - startTime}ms`);
2910
+ return metadata;
2911
+ }
2912
+ const gitMetadata = {
2913
+ tags: [],
2914
+ branches: [],
2915
+ commit: {
2916
+ hash: currentCommit.hash,
2917
+ shortHash: currentCommit.shortHash,
2918
+ date: dayjs(currentCommit.date).format("YYYY-MM-DDTHH:mm:ssZ"),
2919
+ message: currentCommit.message
2862
2920
  }
2921
+ };
2922
+ metadata.git = gitMetadata;
2923
+ try {
2863
2924
  const buildStart = Date.now();
2864
2925
  const commitToTags = await buildCompleteTagCache(gitRootPath, (tagName) => {
2865
2926
  const version = parseVersion(tagName);
@@ -2867,12 +2928,7 @@ var getGitMetadata = async (repositoryPath, checkWorkingDirectoryStatus, logger)
2867
2928
  }, logger);
2868
2929
  logger.debug(`[screw-up] buildCompleteTagCache: ${Date.now() - buildStart}ms`);
2869
2930
  logger.debug(`Built tag map with ${commitToTags.size} commits`);
2870
- let version = await lookupVersionLabelRecursive(gitRootPath, currentCommit, /* @__PURE__ */ new Map(), commitToTags);
2871
- const gitMetadata = {
2872
- tags: [],
2873
- branches: []
2874
- };
2875
- metadata.git = gitMetadata;
2931
+ let version = await lookupVersionLabelRecursive(gitContext, currentCommit, /* @__PURE__ */ new Map(), commitToTags);
2876
2932
  if (version) {
2877
2933
  if (checkWorkingDirectoryStatus) {
2878
2934
  const modifiedFiles = await getModifiedFiles(gitRootPath, currentCommit.tree);
@@ -2886,16 +2942,14 @@ var getGitMetadata = async (repositoryPath, checkWorkingDirectoryStatus, logger)
2886
2942
  gitMetadata.version = gitVersion;
2887
2943
  metadata.version = gitVersion;
2888
2944
  }
2889
- gitMetadata.commit = {
2890
- hash: currentCommit.hash,
2891
- shortHash: currentCommit.shortHash,
2892
- date: dayjs(currentCommit.date).format("YYYY-MM-DDTHH:mm:ssZ"),
2893
- message: currentCommit.message
2894
- };
2895
2945
  gitMetadata.tags = getRelatedTagsFromMap(commitToTags, currentCommit.hash).map((tag) => tag.name);
2896
- gitMetadata.branches = await getRelatedBranches(gitRootPath, currentCommit.hash);
2897
2946
  } catch (error) {
2898
- logger.warn(`Failed to extract git metadata: ${error}`);
2947
+ logger.warn(`Failed to resolve git versioning metadata: ${error}`);
2948
+ }
2949
+ try {
2950
+ gitMetadata.branches = await getRelatedBranches(gitContext, currentCommit.hash);
2951
+ } catch (error) {
2952
+ logger.warn(`Failed to resolve git branch metadata: ${error}`);
2899
2953
  }
2900
2954
  logger.debug(`[screw-up] Total getGitMetadata: ${Date.now() - startTime}ms`);
2901
2955
  return metadata;
@@ -2981,4 +3035,4 @@ var ensureMetadataGitignore = async (metadataSourcePath, logger) => {
2981
3035
  //#endregion
2982
3036
  export { collectWorkspaceSiblings as a, replacePeerDependenciesWildcards as c, require_dist as d, __exportAll as f, getFetchGitMetadata as i, resolvePackageMetadata as l, generateMetadataFileContent as n, createConsoleLogger as o, __toESM as p, writeFileIfChanged as r, findWorkspaceRoot as s, ensureMetadataGitignore as t, resolveRawPackageJsonObject as u };
2983
3037
 
2984
- //# sourceMappingURL=metadata-file-D79yMa_A.js.map
3038
+ //# sourceMappingURL=metadata-file-Case8fsm.js.map