worktree-add 1.3.12 → 2.0.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.
- package/README.md +11 -5
- package/dist/app/resolve-open-target.d.ts +16 -0
- package/dist/app/resolve-open-target.d.ts.map +1 -0
- package/dist/app/{resolve-apps.js → resolve-open-target.js} +18 -9
- package/dist/app/resolve-open-target.js.map +1 -0
- package/dist/cli/open-worktree-apps.d.ts +2 -1
- package/dist/cli/open-worktree-apps.d.ts.map +1 -1
- package/dist/cli/open-worktree-apps.js +20 -2
- package/dist/cli/open-worktree-apps.js.map +1 -1
- package/dist/cli/run-worktree-add.d.ts +1 -0
- package/dist/cli/run-worktree-add.d.ts.map +1 -1
- package/dist/cli/run-worktree-add.js +4 -3
- package/dist/cli/run-worktree-add.js.map +1 -1
- package/dist/cli.js +5 -3
- package/dist/cli.js.map +1 -1
- package/package.json +3 -2
- package/dist/app/resolve-apps.d.ts +0 -7
- package/dist/app/resolve-apps.d.ts.map +0 -1
- package/dist/app/resolve-apps.js.map +0 -1
package/README.md
CHANGED
|
@@ -24,7 +24,7 @@ Running `worktree-add <branch>` from inside a repo:
|
|
|
24
24
|
8. Detects your package manager and installs dependencies with lockfile‑safe flags
|
|
25
25
|
(`npm ci`, `pnpm install --frozen-lockfile`, `yarn install --immutable`, etc.).
|
|
26
26
|
9. If the project uses Next.js and supports it, runs `next typegen`.
|
|
27
|
-
10. Opens the new worktree
|
|
27
|
+
10. Opens the new worktree if you passed `--app` or `--open`.
|
|
28
28
|
|
|
29
29
|
Your original checkout is left untouched.
|
|
30
30
|
|
|
@@ -72,6 +72,7 @@ Common options:
|
|
|
72
72
|
|
|
73
73
|
```text
|
|
74
74
|
-a, --app <name> Open the worktree in an app (repeatable)
|
|
75
|
+
-o, --open Open the worktree after creating it
|
|
75
76
|
--offline Create from HEAD when origin can't be reached
|
|
76
77
|
-y, --yes Skip confirmation and replace existing destination
|
|
77
78
|
--interactive Allow confirmation prompts (requires a TTY)
|
|
@@ -111,10 +112,13 @@ App names are executed on your machine, so only use values you trust. Validation
|
|
|
111
112
|
Arguments are not parsed: values like `code -w` are treated as part of the app name and will likely fail.
|
|
112
113
|
|
|
113
114
|
1. `--app <name>` flag (repeatable): `worktree-add feature/foo --app ghostty --app code`
|
|
114
|
-
2.
|
|
115
|
+
2. `-o, --open`: `worktree-add feature/foo --open`
|
|
116
|
+
3. `WORKTREE_ADD_APP` env var (comma-separated): the app list used by `--open`
|
|
115
117
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
+
`--app` takes priority over `--open` / `WORKTREE_ADD_APP`.
|
|
119
|
+
`WORKTREE_ADD_APP` does not open anything on its own; pass `--open` to use it.
|
|
120
|
+
If `--open` is set and no apps are configured, the destination is opened with the OS default handler.
|
|
121
|
+
To explicitly open nothing even when `--open` is set, pass `--app ""`.
|
|
118
122
|
Whitespace-only values like `--app " "` are treated as absent and do not override `WORKTREE_ADD_APP`.
|
|
119
123
|
|
|
120
124
|
If launching an app fails to start, the worktree still stays created and ready.
|
|
@@ -123,10 +127,12 @@ Platform note: on macOS the app value is passed to `open -a`, so use an applicat
|
|
|
123
127
|
|
|
124
128
|
Terminal-based editors (vim/nvim/nano) are not supported via `--app` — apps are launched detached from the current terminal.
|
|
125
129
|
|
|
126
|
-
Tip:
|
|
130
|
+
Tip: set default apps for `--open` in your shell profile, then pass `-o` when you want them:
|
|
127
131
|
|
|
128
132
|
```bash
|
|
129
133
|
worktree-add() { WORKTREE_ADD_APP=ghostty,code command worktree-add "$@" }
|
|
134
|
+
# worktree-add feature/foo # create only
|
|
135
|
+
# worktree-add feature/foo -o # create and open in Ghostty + VS Code
|
|
130
136
|
```
|
|
131
137
|
|
|
132
138
|
Add it to your shell profile:
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
interface ResolveOpenTargetInput {
|
|
2
|
+
optionApps: string[] | undefined;
|
|
3
|
+
environmentApps: string | undefined;
|
|
4
|
+
open: boolean;
|
|
5
|
+
}
|
|
6
|
+
export type OpenTarget = {
|
|
7
|
+
type: "none";
|
|
8
|
+
} | {
|
|
9
|
+
type: "default";
|
|
10
|
+
} | {
|
|
11
|
+
type: "apps";
|
|
12
|
+
apps: string[];
|
|
13
|
+
};
|
|
14
|
+
export declare function resolveOpenTarget({ optionApps, environmentApps, open, }: ResolveOpenTargetInput): OpenTarget;
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=resolve-open-target.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-open-target.d.ts","sourceRoot":"","sources":["../../src/app/resolve-open-target.ts"],"names":[],"mappings":"AAAA,UAAU,sBAAsB;IAC9B,UAAU,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACjC,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,IAAI,EAAE,OAAO,CAAC;CACf;AAED,MAAM,MAAM,UAAU,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAwBnG,wBAAgB,iBAAiB,CAAC,EAChC,UAAU,EACV,eAAe,EACf,IAAI,GACL,EAAE,sBAAsB,GAAG,UAAU,CA2BrC"}
|
|
@@ -10,24 +10,33 @@ function dedupePreserveOrder(apps) {
|
|
|
10
10
|
}
|
|
11
11
|
return deduped;
|
|
12
12
|
}
|
|
13
|
-
|
|
13
|
+
function parseAppList(value) {
|
|
14
|
+
return dedupePreserveOrder(value
|
|
15
|
+
.split(",")
|
|
16
|
+
.map((app) => app.trim())
|
|
17
|
+
.filter(Boolean));
|
|
18
|
+
}
|
|
19
|
+
export function resolveOpenTarget({ optionApps, environmentApps, open, }) {
|
|
14
20
|
const hasExplicitEmptyOption = optionApps?.includes("") ?? false;
|
|
15
21
|
const normalizedOptionApps = optionApps?.map((app) => app.trim()).filter(Boolean) ?? [];
|
|
16
22
|
if (optionApps !== undefined) {
|
|
17
23
|
if (normalizedOptionApps.length > 0) {
|
|
18
|
-
return dedupePreserveOrder(normalizedOptionApps);
|
|
24
|
+
return { type: "apps", apps: dedupePreserveOrder(normalizedOptionApps) };
|
|
19
25
|
}
|
|
20
26
|
if (hasExplicitEmptyOption) {
|
|
21
|
-
return
|
|
27
|
+
return { type: "none" };
|
|
22
28
|
}
|
|
23
29
|
}
|
|
30
|
+
if (!open) {
|
|
31
|
+
return { type: "none" };
|
|
32
|
+
}
|
|
24
33
|
const normalized = environmentApps?.trim();
|
|
25
34
|
if (normalized) {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
35
|
+
const apps = parseAppList(normalized);
|
|
36
|
+
if (apps.length > 0) {
|
|
37
|
+
return { type: "apps", apps };
|
|
38
|
+
}
|
|
30
39
|
}
|
|
31
|
-
return
|
|
40
|
+
return { type: "default" };
|
|
32
41
|
}
|
|
33
|
-
//# sourceMappingURL=resolve-
|
|
42
|
+
//# sourceMappingURL=resolve-open-target.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-open-target.js","sourceRoot":"","sources":["../../src/app/resolve-open-target.ts"],"names":[],"mappings":"AAQA,SAAS,mBAAmB,CAAC,IAAc;IACzC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAClB,SAAS;QACX,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACd,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACpB,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,YAAY,CAAC,KAAa;IACjC,OAAO,mBAAmB,CACxB,KAAK;SACF,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;SACxB,MAAM,CAAC,OAAO,CAAC,CACnB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,EAChC,UAAU,EACV,eAAe,EACf,IAAI,GACmB;IACvB,MAAM,sBAAsB,GAAG,UAAU,EAAE,QAAQ,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC;IACjE,MAAM,oBAAoB,GAAG,UAAU,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IAExF,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,IAAI,oBAAoB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,CAAC,oBAAoB,CAAC,EAAE,CAAC;QAC3E,CAAC;QAED,IAAI,sBAAsB,EAAE,CAAC;YAC3B,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAC1B,CAAC;IAED,MAAM,UAAU,GAAG,eAAe,EAAE,IAAI,EAAE,CAAC;IAC3C,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,IAAI,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;QACtC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpB,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QAChC,CAAC;IACH,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;AAC7B,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { StatusLogger } from "../output/create-status-logger.js";
|
|
2
|
-
|
|
2
|
+
import type { OpenTarget } from "../app/resolve-open-target.js";
|
|
3
|
+
export declare function openWorktreeApps(destinationDirectory: string, target: OpenTarget, options?: {
|
|
3
4
|
dryRun?: boolean;
|
|
4
5
|
logger?: StatusLogger;
|
|
5
6
|
}): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"open-worktree-apps.d.ts","sourceRoot":"","sources":["../../src/cli/open-worktree-apps.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"open-worktree-apps.d.ts","sourceRoot":"","sources":["../../src/cli/open-worktree-apps.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAGtE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAEhE,wBAAsB,gBAAgB,CACpC,oBAAoB,EAAE,MAAM,EAC5B,MAAM,EAAE,UAAU,EAClB,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,YAAY,CAAA;CAAO,GACxD,OAAO,CAAC,IAAI,CAAC,CAqDf"}
|
|
@@ -1,10 +1,28 @@
|
|
|
1
1
|
import open from "open";
|
|
2
2
|
import { fallbackStatusLogger } from "../output/create-status-logger.js";
|
|
3
3
|
import { getUnsafeAppNameReason } from "../app/get-unsafe-app-name-reason.js";
|
|
4
|
-
export async function openWorktreeApps(destinationDirectory,
|
|
4
|
+
export async function openWorktreeApps(destinationDirectory, target, options = {}) {
|
|
5
5
|
const logger = options.logger ?? fallbackStatusLogger;
|
|
6
6
|
const dryRun = options.dryRun ?? false;
|
|
7
|
-
|
|
7
|
+
if (target.type === "none") {
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
if (target.type === "default") {
|
|
11
|
+
if (dryRun) {
|
|
12
|
+
logger.step(`Would open ${JSON.stringify(destinationDirectory)}`);
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
logger.step(`Opening ${JSON.stringify(destinationDirectory)} …`);
|
|
16
|
+
try {
|
|
17
|
+
await open(destinationDirectory, { wait: false });
|
|
18
|
+
}
|
|
19
|
+
catch (error) {
|
|
20
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
21
|
+
logger.warn(`Failed to open ${JSON.stringify(destinationDirectory)}: ${message}.`);
|
|
22
|
+
}
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
await Promise.all(target.apps.map(async (app) => {
|
|
8
26
|
const unsafeReason = getUnsafeAppNameReason(app);
|
|
9
27
|
if (unsafeReason) {
|
|
10
28
|
logger.warn(`Skipping app ${JSON.stringify(app)}: ${unsafeReason}.`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"open-worktree-apps.js","sourceRoot":"","sources":["../../src/cli/open-worktree-apps.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;
|
|
1
|
+
{"version":3,"file":"open-worktree-apps.js","sourceRoot":"","sources":["../../src/cli/open-worktree-apps.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-worktree-add.d.ts","sourceRoot":"","sources":["../../src/cli/run-worktree-add.ts"],"names":[],"mappings":"AAcA,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,wBAAsB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"run-worktree-add.d.ts","sourceRoot":"","sources":["../../src/cli/run-worktree-add.ts"],"names":[],"mappings":"AAcA,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,wBAAsB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAwG1F"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createStatusLogger } from "../output/create-status-logger.js";
|
|
2
|
-
import {
|
|
2
|
+
import { resolveOpenTarget } from "../app/resolve-open-target.js";
|
|
3
3
|
import { handleExistingDirectory } from "../worktree/destination-directory.js";
|
|
4
4
|
import { copyUntrackedFiles } from "../worktree/untracked-file-copy.js";
|
|
5
5
|
import { setupProject } from "../project/setup.js";
|
|
@@ -87,11 +87,12 @@ export async function runWorktreeAdd(branchRaw, options) {
|
|
|
87
87
|
logger,
|
|
88
88
|
});
|
|
89
89
|
await setupProject(context.destinationDirectory, { dryRun, logger });
|
|
90
|
-
const
|
|
90
|
+
const target = resolveOpenTarget({
|
|
91
91
|
optionApps: options.app,
|
|
92
92
|
environmentApps: process.env.WORKTREE_ADD_APP,
|
|
93
|
+
open: options.open ?? false,
|
|
93
94
|
});
|
|
94
|
-
await openWorktreeApps(context.destinationDirectory,
|
|
95
|
+
await openWorktreeApps(context.destinationDirectory, target, {
|
|
95
96
|
dryRun,
|
|
96
97
|
logger,
|
|
97
98
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-worktree-add.js","sourceRoot":"","sources":["../../src/cli/run-worktree-add.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"run-worktree-add.js","sourceRoot":"","sources":["../../src/cli/run-worktree-add.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.js
CHANGED
|
@@ -11,6 +11,7 @@ const program = new Command()
|
|
|
11
11
|
.version(packageJson.version)
|
|
12
12
|
.argument("<branch>", "branch name for the worktree")
|
|
13
13
|
.option("-a, --app <name>", "Open the worktree in an app (repeatable)", collectApp)
|
|
14
|
+
.option("-o, --open", "Open the worktree after creating it (uses WORKTREE_ADD_APP, or the OS default handler)")
|
|
14
15
|
.option("--offline", "Allow creating a new local branch from HEAD when origin cannot be reached and the branch does not exist locally")
|
|
15
16
|
.option("-y, --yes", "Skip confirmation and replace existing destination")
|
|
16
17
|
.option("--dry-run", "Show what would happen without making changes")
|
|
@@ -22,14 +23,15 @@ const program = new Command()
|
|
|
22
23
|
Examples:
|
|
23
24
|
$ worktree-add feature/login-form
|
|
24
25
|
$ worktree-add feature/api --app code
|
|
25
|
-
$
|
|
26
|
+
$ worktree-add feature/new-branch --open
|
|
27
|
+
$ WORKTREE_ADD_APP=ghostty,code worktree-add feature/new-branch --open
|
|
26
28
|
$ git branch --format="%(refname:short)" | head -n1 | xargs worktree-add
|
|
27
29
|
|
|
28
30
|
App notes:
|
|
29
31
|
- App names are executed on your machine; only use values you trust.
|
|
30
32
|
- Arguments are not parsed; pass only the app name (e.g., "code", not "code --wait").
|
|
31
|
-
- WORKTREE_ADD_APP is a comma-separated list of apps (
|
|
32
|
-
- To explicitly open nothing when
|
|
33
|
+
- WORKTREE_ADD_APP is a comma-separated list of apps used by --open (it does not open on its own).
|
|
34
|
+
- To explicitly open nothing when --open is set, pass --app "".
|
|
33
35
|
|
|
34
36
|
Dependencies:
|
|
35
37
|
- git (with worktree support)
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AACtD,OAAO,WAAW,MAAM,iBAAiB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAG3D,SAAS,UAAU,CAAC,GAAW,EAAE,QAA8B;IAC7D,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE;KAC1B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;KACtB,WAAW,CAAC,WAAW,CAAC,WAAW,CAAC;KACpC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC;KAC5B,QAAQ,CAAC,UAAU,EAAE,8BAA8B,CAAC;KACpD,MAAM,CAAC,kBAAkB,EAAE,0CAA0C,EAAE,UAAU,CAAC;KAClF,MAAM,CACL,WAAW,EACX,iHAAiH,CAClH;KACA,MAAM,CAAC,WAAW,EAAE,oDAAoD,CAAC;KACzE,MAAM,CAAC,WAAW,EAAE,+CAA+C,CAAC;KACpE,MAAM,CAAC,eAAe,EAAE,6CAA6C,CAAC;KACtE,MAAM,CAAC,WAAW,EAAE,kCAAkC,CAAC;KACvD,kBAAkB,CAAC,yCAAyC,CAAC;KAC7D,wBAAwB,EAAE;KAC1B,WAAW,CACV,OAAO,EACP
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AACtD,OAAO,WAAW,MAAM,iBAAiB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAG3D,SAAS,UAAU,CAAC,GAAW,EAAE,QAA8B;IAC7D,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE;KAC1B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;KACtB,WAAW,CAAC,WAAW,CAAC,WAAW,CAAC;KACpC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC;KAC5B,QAAQ,CAAC,UAAU,EAAE,8BAA8B,CAAC;KACpD,MAAM,CAAC,kBAAkB,EAAE,0CAA0C,EAAE,UAAU,CAAC;KAClF,MAAM,CACL,YAAY,EACZ,wFAAwF,CACzF;KACA,MAAM,CACL,WAAW,EACX,iHAAiH,CAClH;KACA,MAAM,CAAC,WAAW,EAAE,oDAAoD,CAAC;KACzE,MAAM,CAAC,WAAW,EAAE,+CAA+C,CAAC;KACpE,MAAM,CAAC,eAAe,EAAE,6CAA6C,CAAC;KACtE,MAAM,CAAC,WAAW,EAAE,kCAAkC,CAAC;KACvD,kBAAkB,CAAC,yCAAyC,CAAC;KAC7D,wBAAwB,EAAE;KAC1B,WAAW,CACV,OAAO,EACP;;;;;;;;;;;;;;;;;CAiBH,CACE;KACA,MAAM,CAAC,KAAK,EAAE,MAAc,EAAE,OAAmB,EAAE,EAAE;IACpD,IAAI,CAAC;QACH,MAAM,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;aAAM,CAAC;YACN,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACzB,CAAC;QACD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;IACxB,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC;AAC7B,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "worktree-add",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"description": "Create a Git worktree next to your current repo for a branch, copy useful local files, install deps, and open it in your apps.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"cli",
|
|
@@ -62,6 +62,7 @@
|
|
|
62
62
|
"@total-typescript/ts-reset": "^0.6.1",
|
|
63
63
|
"@types/node": "^25.9.3",
|
|
64
64
|
"@vitest/coverage-v8": "^4.1.8",
|
|
65
|
+
"conventional-changelog-conventionalcommits": "^9.3.1",
|
|
65
66
|
"fta-check": "^1.5.4",
|
|
66
67
|
"fta-cli": "^3.0.0",
|
|
67
68
|
"knip": "^6.16.1",
|
|
@@ -75,5 +76,5 @@
|
|
|
75
76
|
"engines": {
|
|
76
77
|
"node": ">=24.2.0"
|
|
77
78
|
},
|
|
78
|
-
"packageManager": "pnpm@11.
|
|
79
|
+
"packageManager": "pnpm@11.22.0"
|
|
79
80
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-apps.d.ts","sourceRoot":"","sources":["../../src/app/resolve-apps.ts"],"names":[],"mappings":"AAAA,UAAU,gBAAgB;IACxB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAeD,wBAAgB,WAAW,CAAC,EAAE,UAAU,EAAE,eAAe,EAAE,EAAE,gBAAgB,GAAG,MAAM,EAAE,CAyBvF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-apps.js","sourceRoot":"","sources":["../../src/app/resolve-apps.ts"],"names":[],"mappings":"AAKA,SAAS,mBAAmB,CAAC,IAAc;IACzC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAClB,SAAS;QACX,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACd,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACpB,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,EAAE,UAAU,EAAE,eAAe,EAAoB;IAC3E,MAAM,sBAAsB,GAAG,UAAU,EAAE,QAAQ,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC;IACjE,MAAM,oBAAoB,GAAG,UAAU,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IAExF,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,IAAI,oBAAoB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpC,OAAO,mBAAmB,CAAC,oBAAoB,CAAC,CAAC;QACnD,CAAC;QAED,IAAI,sBAAsB,EAAE,CAAC;YAC3B,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAAG,eAAe,EAAE,IAAI,EAAE,CAAC;IAC3C,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,mBAAmB,CACxB,UAAU;aACP,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;aACxB,MAAM,CAAC,OAAO,CAAC,CACnB,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC"}
|