@shivaedev/create-app 0.35.0 → 0.37.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/CHANGELOG.md +30 -0
- package/README.md +5 -1
- package/dist/cli.js +48 -45
- package/dist/packTemplate.js +1 -1
- package/dist/packTemplate.js.map +1 -1
- package/dist/runProcess.d.ts +3 -3
- package/dist/runProcess.d.ts.map +1 -1
- package/dist/runProcess.js +6 -5
- package/dist/runProcess.js.map +1 -1
- package/dist/starterPatch.d.ts +4 -0
- package/dist/starterPatch.d.ts.map +1 -1
- package/dist/starterPatch.js +17 -5
- package/dist/starterPatch.js.map +1 -1
- package/dist/template.d.ts +2 -0
- package/dist/template.d.ts.map +1 -1
- package/dist/template.js +3 -0
- package/dist/template.js.map +1 -1
- package/dist/updateApp.d.ts +1 -1
- package/dist/updateApp.d.ts.map +1 -1
- package/dist/updateApp.js +33 -18
- package/dist/updateApp.js.map +1 -1
- package/dist/updateChecks.d.ts +1 -1
- package/dist/updateChecks.d.ts.map +1 -1
- package/dist/updateChecks.js +7 -4
- package/dist/updateChecks.js.map +1 -1
- package/package.json +4 -4
- package/src/packTemplate.ts +1 -1
- package/src/runProcess.ts +11 -5
- package/src/starterPatch.ts +18 -6
- package/src/template.ts +3 -0
- package/src/updateApp.ts +40 -18
- package/src/updateChecks.ts +7 -4
- package/template.json +1 -1
package/dist/packTemplate.js
CHANGED
|
@@ -10,7 +10,7 @@ const appPaths = new Map([
|
|
|
10
10
|
["pnpm-workspace.copy.yaml", "pnpm-workspace.yaml"],
|
|
11
11
|
]);
|
|
12
12
|
const excluded = new Set(["node_modules", "dist", "coverage", ".browser-check", "pnpm-lock.yaml", ".git"]);
|
|
13
|
-
const rootExcluded = new Set(["published-versions.json", "AGENTS.md", "CLAUDE.md", "README.md"]);
|
|
13
|
+
const rootExcluded = new Set(["published-versions.json", "AGENTS.md", "CLAUDE.md", "README.md", ".agents", ".claude"]);
|
|
14
14
|
function included(path) {
|
|
15
15
|
return !(rootExcluded.has(path) || excluded.has(basename(path))) && (!basename(path).startsWith(".env") || basename(path) === ".env.example");
|
|
16
16
|
}
|
package/dist/packTemplate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"packTemplate.js","sourceRoot":"","sources":["../src/packTemplate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,UAAU,EAAsB,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,uCAAuC,CAAC;AAC/E,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,eAAe,EAAiB,QAAQ,EAAE,MAAM,cAAc,CAAC;AAErF,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC;IACxB,CAAC,eAAe,EAAE,WAAW,CAAC;IAC9B,CAAC,eAAe,EAAE,WAAW,CAAC;IAC9B,CAAC,0BAA0B,EAAE,qBAAqB,CAAC;CACnD,CAAC,CAAC;AACH,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,cAAc,EAAE,MAAM,EAAE,UAAU,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAC;AAC3G,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,yBAAyB,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"packTemplate.js","sourceRoot":"","sources":["../src/packTemplate.ts"],"names":[],"mappings":"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"}
|
package/dist/runProcess.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { Effect } from "effect";
|
|
2
2
|
import { ChildProcessSpawner } from "effect/process";
|
|
3
|
-
import { CreateAppError } from "
|
|
4
|
-
export declare const runProcess: (cwd: string, command: string, args: readonly string[]) => Effect.Effect<{
|
|
3
|
+
import { CreateAppError } from "#CreateAppError.ts";
|
|
4
|
+
export declare const runProcess: (cwd: string, command: string, args: readonly string[], input?: string | undefined) => Effect.Effect<{
|
|
5
5
|
code: number;
|
|
6
6
|
stderr: string;
|
|
7
7
|
stdout: string;
|
|
8
8
|
}, import("effect/PlatformError").PlatformError, ChildProcessSpawner.ChildProcessSpawner>;
|
|
9
|
-
export declare const checkedProcess: (cwd: string, command: string, args: readonly string[]) => Effect.Effect<string, CreateAppError | import("effect/PlatformError").PlatformError, ChildProcessSpawner.ChildProcessSpawner>;
|
|
9
|
+
export declare const checkedProcess: (cwd: string, command: string, args: readonly string[], input?: string | undefined) => Effect.Effect<string, CreateAppError | import("effect/PlatformError").PlatformError, ChildProcessSpawner.ChildProcessSpawner>;
|
|
10
10
|
//# sourceMappingURL=runProcess.d.ts.map
|
package/dist/runProcess.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runProcess.d.ts","sourceRoot":"","sources":["../src/runProcess.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAU,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAgB,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"runProcess.d.ts","sourceRoot":"","sources":["../src/runProcess.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAU,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAgB,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,eAAO,MAAM,UAAU;;;;yFAarB,CAAC;AAEH,eAAO,MAAM,cAAc,sNAWzB,CAAC"}
|
package/dist/runProcess.js
CHANGED
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
import { Effect, Stream } from "effect";
|
|
2
2
|
import { ChildProcess, ChildProcessSpawner } from "effect/process";
|
|
3
|
-
import { CreateAppError } from "
|
|
4
|
-
export const runProcess = Effect.fn("CreateApp.runProcess")(function* (cwd, command, args) {
|
|
3
|
+
import { CreateAppError } from "#CreateAppError.ts";
|
|
4
|
+
export const runProcess = Effect.fn("CreateApp.runProcess")(function* (cwd, command, args, input) {
|
|
5
5
|
return yield* Effect.scoped(Effect.gen(function* () {
|
|
6
6
|
const spawner = yield* ChildProcessSpawner.ChildProcessSpawner;
|
|
7
|
-
const
|
|
7
|
+
const stdin = input === undefined ? "ignore" : Stream.make(new TextEncoder().encode(input));
|
|
8
|
+
const child = yield* spawner.spawn(ChildProcess.make(command, args, { cwd, stdin }));
|
|
8
9
|
const [stdout, stderr, code] = yield* Effect.all([Stream.mkString(Stream.decodeText(child.stdout)), Stream.mkString(Stream.decodeText(child.stderr)), child.exitCode], { concurrency: "unbounded" });
|
|
9
10
|
return { code: Number(code), stderr, stdout };
|
|
10
11
|
}));
|
|
11
12
|
});
|
|
12
|
-
export const checkedProcess = Effect.fn("CreateApp.checkedProcess")(function* (cwd, command, args) {
|
|
13
|
-
const result = yield* runProcess(cwd, command, args);
|
|
13
|
+
export const checkedProcess = Effect.fn("CreateApp.checkedProcess")(function* (cwd, command, args, input) {
|
|
14
|
+
const result = yield* runProcess(cwd, command, args, input);
|
|
14
15
|
if (result.code !== 0) {
|
|
15
16
|
return yield* new CreateAppError({ message: `${command} ${args[0]} failed: ${result.stderr.trim()}` });
|
|
16
17
|
}
|
package/dist/runProcess.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runProcess.js","sourceRoot":"","sources":["../src/runProcess.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"runProcess.js","sourceRoot":"","sources":["../src/runProcess.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC,EAAE,CAAC,sBAAsB,CAAC,CAAC,QAAQ,CAAC,EAAE,GAAW,EAAE,OAAe,EAAE,IAAuB,EAAE,KAAc;IAC3I,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAC1B,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QACnB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,mBAAmB,CAAC,mBAAmB,CAAC;QAC/D,MAAM,KAAK,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5F,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QACrF,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAC/C,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,EACpH,EAAE,WAAW,EAAE,WAAW,EAAE,CAC5B,CAAC;QACF,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAC/C,CAAC,CAAC,CACF,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,EAAE,CAAC,0BAA0B,CAAC,CAAC,QAAQ,CAAC,EAC5E,GAAW,EACX,OAAe,EACf,IAAuB,EACvB,KAAc;IAEd,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAC5D,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,KAAK,CAAC,CAAC,IAAI,cAAc,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,YAAY,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IACxG,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC;AACtB,CAAC,CAAC,CAAC"}
|
package/dist/starterPatch.d.ts
CHANGED
|
@@ -6,6 +6,10 @@ export declare const starterPatch: (target: string, directory: string, name: str
|
|
|
6
6
|
readonly content: string;
|
|
7
7
|
readonly path: string;
|
|
8
8
|
}[]) => Effect.Effect<{
|
|
9
|
+
conflicts: {
|
|
10
|
+
path: string;
|
|
11
|
+
indexInfo: string;
|
|
12
|
+
}[];
|
|
9
13
|
empty: boolean;
|
|
10
14
|
path: string;
|
|
11
15
|
}, import("./CreateAppError.ts").CreateAppError | import("effect/PlatformError").PlatformError, import("effect/process/ChildProcessSpawner").ChildProcessSpawner | FileSystem.FileSystem>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"starterPatch.d.ts","sourceRoot":"","sources":["../src/starterPatch.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAK5C,eAAO,MAAM,YAAY
|
|
1
|
+
{"version":3,"file":"starterPatch.d.ts","sourceRoot":"","sources":["../src/starterPatch.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAK5C,eAAO,MAAM,YAAY;;;;;;;;cAsBC,MAAM;mBAAa,MAAM;;;;yLA0BjD,CAAC"}
|
package/dist/starterPatch.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { join } from "node:path";
|
|
2
2
|
import { Effect, FileSystem } from "effect";
|
|
3
|
-
import { renderTemplate } from "
|
|
4
|
-
import { checkedProcess } from "
|
|
3
|
+
import { renderTemplate } from "#generation.ts";
|
|
4
|
+
import { checkedProcess } from "#runProcess.ts";
|
|
5
5
|
export const starterPatch = Effect.fn("CreateApp.starterPatch")(function* (target, directory, name, before, after) {
|
|
6
6
|
const fs = yield* FileSystem.FileSystem;
|
|
7
7
|
const deleted = new Set();
|
|
@@ -18,19 +18,31 @@ export const starterPatch = Effect.fn("CreateApp.starterPatch")(function* (targe
|
|
|
18
18
|
yield* renderTemplate(repository, base, name);
|
|
19
19
|
yield* checkedProcess(repository, "git", ["add", "--all"]);
|
|
20
20
|
const tree = (yield* checkedProcess(repository, "git", ["write-tree"])).trim();
|
|
21
|
+
const conflicts = [];
|
|
22
|
+
const retained = [];
|
|
21
23
|
for (const entry of base) {
|
|
22
|
-
yield* checkedProcess(target, "git", ["hash-object", "-w", "--", join(repository, entry.path)]);
|
|
24
|
+
const hash = (yield* checkedProcess(target, "git", ["hash-object", "-w", "--", join(repository, entry.path)])).trim();
|
|
25
|
+
if (!incoming.some((file) => file.path === entry.path)) {
|
|
26
|
+
const ours = yield* checkedProcess(target, "git", ["--literal-pathspecs", "ls-files", "--stage", "--full-name", "-z", "--", entry.path]);
|
|
27
|
+
if (!ours.startsWith(`100644 ${hash} 0\t`)) {
|
|
28
|
+
const indexedPath = ours.slice(ours.indexOf("\t") + 1, -1);
|
|
29
|
+
const indexInfo = [`0 ${hash}\t${indexedPath}\0`, `100644 ${hash} 1\t${indexedPath}\0`, ours.replace(" 0\t", " 2\t")].join("");
|
|
30
|
+
conflicts.push({ indexInfo, path: entry.path });
|
|
31
|
+
// Git apply rejects these deletions before applying any of the delta.
|
|
32
|
+
retained.push(entry);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
23
35
|
}
|
|
24
36
|
for (const path of yield* fs.readDirectory(repository)) {
|
|
25
37
|
if (path !== ".git") {
|
|
26
38
|
yield* fs.remove(join(repository, path), { recursive: true });
|
|
27
39
|
}
|
|
28
40
|
}
|
|
29
|
-
yield* renderTemplate(repository, incoming, name);
|
|
41
|
+
yield* renderTemplate(repository, [...incoming, ...retained], name);
|
|
30
42
|
yield* checkedProcess(repository, "git", ["add", "--all"]);
|
|
31
43
|
const patch = yield* checkedProcess(repository, "git", ["diff", "--cached", "--binary", "--full-index", "--no-renames", tree]);
|
|
32
44
|
const path = join(directory, "starter.patch");
|
|
33
45
|
yield* fs.writeFileString(path, patch);
|
|
34
|
-
return { empty: patch.length === 0, path };
|
|
46
|
+
return { conflicts, empty: patch.length === 0, path };
|
|
35
47
|
});
|
|
36
48
|
//# sourceMappingURL=starterPatch.js.map
|
package/dist/starterPatch.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"starterPatch.js","sourceRoot":"","sources":["../src/starterPatch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"starterPatch.js","sourceRoot":"","sources":["../src/starterPatch.ts"],"names":[],"mappings":"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"}
|
package/dist/template.d.ts
CHANGED
|
@@ -20,6 +20,7 @@ declare const Manifest: Schema.Struct<{
|
|
|
20
20
|
readonly packageManager: Schema.String;
|
|
21
21
|
readonly private: Schema.Boolean;
|
|
22
22
|
readonly scripts: Schema.$Record<Schema.String, Schema.String>;
|
|
23
|
+
readonly shivaedevSkills: Schema.optional<Schema.$Array<Schema.String>>;
|
|
23
24
|
readonly type: Schema.String;
|
|
24
25
|
readonly version: Schema.String;
|
|
25
26
|
}>;
|
|
@@ -42,6 +43,7 @@ export declare const decodeManifest: (input: unknown, options?: import("effect/S
|
|
|
42
43
|
readonly scripts: {
|
|
43
44
|
readonly [x: string]: string;
|
|
44
45
|
};
|
|
46
|
+
readonly shivaedevSkills?: readonly string[] | undefined;
|
|
45
47
|
readonly type: string;
|
|
46
48
|
readonly version: string;
|
|
47
49
|
};
|
package/dist/template.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../src/template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGhC,eAAO,MAAM,QAAQ,8CAA8C,CAAC;AACpE,eAAO,MAAM,QAAQ;;;GAA+E,CAAC;AACrG,MAAM,MAAM,QAAQ,GAAG,OAAO,QAAQ,CAAC,IAAI,CAAC;AAC5C,eAAO,MAAM,cAAc;;;GAA4D,CAAC;AAExF,wBAAgB,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,UAAQ,GAAG,QAAQ,
|
|
1
|
+
{"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../src/template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGhC,eAAO,MAAM,QAAQ,8CAA8C,CAAC;AACpE,eAAO,MAAM,QAAQ;;;GAA+E,CAAC;AACrG,MAAM,MAAM,QAAQ,GAAG,OAAO,QAAQ,CAAC,IAAI,CAAC;AAC5C,eAAO,MAAM,cAAc;;;GAA4D,CAAC;AAExF,wBAAgB,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,UAAQ,GAAG,QAAQ,CAsBzE;AAED,QAAA,MAAM,QAAQ;;;;;;;;;;;;EAYZ,CAAC;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;CAA4D,CAAC;AAgBxF,wBAAgB,YAAY,CAAC,QAAQ,EAAE,OAAO,QAAQ,CAAC,IAAI,UAE1D;AAED,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;;EAa9H;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,OAAO,UAAQ,UAa1G;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,2BAWpG"}
|
package/dist/template.js
CHANGED
|
@@ -16,6 +16,7 @@ export function appTemplate(template, minimal = false) {
|
|
|
16
16
|
if (entry.path === "package.json" && minimalManifest !== undefined) {
|
|
17
17
|
return { ...entry, content: minimalManifest.content };
|
|
18
18
|
}
|
|
19
|
+
// Updates must reconstruct historical minimal files exactly to recognize unmodified deletions.
|
|
19
20
|
if (!["src/admin/modules.ts", "src/server/modules.ts", "src/server/workerModules.ts", "src/client/modules.ts"].includes(entry.path)) {
|
|
20
21
|
return entry;
|
|
21
22
|
}
|
|
@@ -35,6 +36,7 @@ const Manifest = Schema.Struct({
|
|
|
35
36
|
packageManager: Schema.String,
|
|
36
37
|
private: Schema.Boolean,
|
|
37
38
|
scripts: Versions,
|
|
39
|
+
shivaedevSkills: Schema.optional(Schema.Array(Schema.String)),
|
|
38
40
|
type: Schema.String,
|
|
39
41
|
version: Schema.String,
|
|
40
42
|
});
|
|
@@ -51,6 +53,7 @@ const manifestOrder = [
|
|
|
51
53
|
"devDependencies",
|
|
52
54
|
"packageManager",
|
|
53
55
|
"engines",
|
|
56
|
+
"shivaedevSkills",
|
|
54
57
|
];
|
|
55
58
|
export function manifestJson(manifest) {
|
|
56
59
|
return `${JSON.stringify(Object.fromEntries(manifestOrder.map((key) => [key, manifest[key]])), null, "\t")}\n`;
|
package/dist/template.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template.js","sourceRoot":"","sources":["../src/template.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"template.js","sourceRoot":"","sources":["../src/template.ts"],"names":[],"mappings":"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"}
|
package/dist/updateApp.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { Effect, FileSystem, Schema } from "effect";
|
|
2
|
-
import { CreateAppError } from "
|
|
2
|
+
import { CreateAppError } from "#CreateAppError.ts";
|
|
3
3
|
export declare const updateApp: (folder: string, templatePath: string, version: string) => Effect.Effect<undefined, CreateAppError | import("effect/PlatformError").PlatformError | Schema.SchemaError, import("effect/process/ChildProcessSpawner").ChildProcessSpawner | FileSystem.FileSystem>;
|
|
4
4
|
//# sourceMappingURL=updateApp.d.ts.map
|
package/dist/updateApp.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"updateApp.d.ts","sourceRoot":"","sources":["../src/updateApp.ts"],"names":[],"mappings":"AACA,OAAO,EAAW,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"updateApp.d.ts","sourceRoot":"","sources":["../src/updateApp.ts"],"names":[],"mappings":"AACA,OAAO,EAAW,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AA+BpD,eAAO,MAAM,SAAS,mQAwCpB,CAAC"}
|
package/dist/updateApp.js
CHANGED
|
@@ -1,18 +1,36 @@
|
|
|
1
|
-
import { join, resolve } from "node:path";
|
|
1
|
+
import { join, relative, resolve } from "node:path";
|
|
2
2
|
import { Console, Effect, FileSystem, Schema } from "effect";
|
|
3
|
-
import { CreateAppError } from "
|
|
4
|
-
import { GENERATION_FILE, Generation, readTemplate, writeGeneration } from "
|
|
5
|
-
import { historicalTemplate } from "
|
|
6
|
-
import { checkedProcess, runProcess } from "
|
|
7
|
-
import { starterPatch } from "
|
|
8
|
-
import { appTemplate } from "
|
|
9
|
-
import { updateChecks } from "
|
|
3
|
+
import { CreateAppError } from "#CreateAppError.ts";
|
|
4
|
+
import { GENERATION_FILE, Generation, readTemplate, writeGeneration } from "#generation.ts";
|
|
5
|
+
import { historicalTemplate } from "#historicalTemplate.ts";
|
|
6
|
+
import { checkedProcess, runProcess } from "#runProcess.ts";
|
|
7
|
+
import { starterPatch } from "#starterPatch.ts";
|
|
8
|
+
import { appTemplate } from "#template.ts";
|
|
9
|
+
import { updateChecks } from "#updateChecks.ts";
|
|
10
|
+
const applyPatch = Effect.fn("CreateApp.applyPatch")(function* (target, repository, patch) {
|
|
11
|
+
const prefix = relative(repository, target);
|
|
12
|
+
if (!patch.empty) {
|
|
13
|
+
const result = yield* runProcess(repository, "git", ["apply", "--3way", ...(prefix ? [`--directory=${prefix}`] : []), patch.path]);
|
|
14
|
+
if (result.code !== 0) {
|
|
15
|
+
const conflicts = (yield* checkedProcess(target, "git", ["diff", "--name-only", "--diff-filter=U", "--", "."])).trim();
|
|
16
|
+
if (!conflicts) {
|
|
17
|
+
return yield* new CreateAppError({ message: result.stderr.trim() });
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
if (patch.conflicts.length > 0) {
|
|
22
|
+
yield* checkedProcess(repository, "git", ["update-index", "-z", "--index-info"], patch.conflicts.map((conflict) => conflict.indexInfo).join(""));
|
|
23
|
+
}
|
|
24
|
+
if ((yield* checkedProcess(target, "git", ["diff", "--cached", "--name-only", "--", "."])).trim() === "") {
|
|
25
|
+
return yield* new CreateAppError({ message: "The starter delta applied no changes. The generation record is unchanged." });
|
|
26
|
+
}
|
|
27
|
+
});
|
|
10
28
|
export const updateApp = Effect.fn("CreateApp.updateApp")(function* (folder, templatePath, version) {
|
|
11
29
|
return yield* Effect.scoped(Effect.gen(function* () {
|
|
12
30
|
const fs = yield* FileSystem.FileSystem;
|
|
13
31
|
const target = resolve(folder);
|
|
14
|
-
yield* checkedProcess(target, "git", ["rev-parse", "--show-toplevel"]);
|
|
15
|
-
if ((yield* checkedProcess(target, "git", ["status", "--porcelain"])).trim() !== "") {
|
|
32
|
+
const repository = (yield* checkedProcess(target, "git", ["rev-parse", "--show-toplevel"])).trim();
|
|
33
|
+
if ((yield* checkedProcess(target, "git", ["status", "--porcelain", "--", "."])).trim() !== "") {
|
|
16
34
|
return yield* new CreateAppError({ message: "Refusing to update a dirty working tree. Commit or stash your changes first." });
|
|
17
35
|
}
|
|
18
36
|
const generation = yield* Schema.decodeUnknownEffect(Schema.fromJsonString(Generation))(yield* fs.readFileString(join(target, GENERATION_FILE)));
|
|
@@ -20,17 +38,14 @@ export const updateApp = Effect.fn("CreateApp.updateApp")(function* (folder, tem
|
|
|
20
38
|
const current = yield* readTemplate(templatePath);
|
|
21
39
|
const previous = generation.version === version ? current : yield* historicalTemplate(directory, generation.version);
|
|
22
40
|
const patch = yield* starterPatch(target, directory, generation.name, appTemplate(previous, generation.minimal), appTemplate(current, generation.minimal));
|
|
23
|
-
if (!patch.empty) {
|
|
24
|
-
|
|
25
|
-
if (result.code !== 0) {
|
|
26
|
-
const conflicts = (yield* checkedProcess(target, "git", ["diff", "--name-only", "--diff-filter=U"])).trim();
|
|
27
|
-
if (!conflicts) {
|
|
28
|
-
return yield* new CreateAppError({ message: result.stderr.trim() });
|
|
29
|
-
}
|
|
30
|
-
}
|
|
41
|
+
if (!patch.empty || patch.conflicts.length > 0) {
|
|
42
|
+
yield* applyPatch(target, repository, patch);
|
|
31
43
|
}
|
|
32
44
|
yield* writeGeneration(target, { ...generation, version });
|
|
33
45
|
const failures = yield* updateChecks(target);
|
|
46
|
+
if (patch.conflicts.length > 0) {
|
|
47
|
+
failures.push(`Starter deletions conflict with app changes:\n${patch.conflicts.map((conflict) => conflict.path).join("\n")}\nKeep a file with git add -- <path>, or accept its deletion with git rm -- <path>.`);
|
|
48
|
+
}
|
|
34
49
|
if (failures.length > 0) {
|
|
35
50
|
return yield* new CreateAppError({
|
|
36
51
|
message: `Recorded create-app ${version}. Finish the update before committing:\n${failures.join("\n\n")}`,
|
package/dist/updateApp.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"updateApp.js","sourceRoot":"","sources":["../src/updateApp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"updateApp.js","sourceRoot":"","sources":["../src/updateApp.ts"],"names":[],"mappings":"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"}
|
package/dist/updateChecks.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { Effect } from "effect";
|
|
2
|
-
import { CreateAppError } from "
|
|
2
|
+
import { CreateAppError } from "#CreateAppError.ts";
|
|
3
3
|
export declare const updateChecks: (target: string) => Effect.Effect<string[], CreateAppError | import("effect/PlatformError").PlatformError, import("effect/process/ChildProcessSpawner").ChildProcessSpawner>;
|
|
4
4
|
//# sourceMappingURL=updateChecks.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"updateChecks.d.ts","sourceRoot":"","sources":["../src/updateChecks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,MAAM,EAAE,MAAM,QAAQ,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"updateChecks.d.ts","sourceRoot":"","sources":["../src/updateChecks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,MAAM,EAAE,MAAM,QAAQ,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAsBpD,eAAO,MAAM,YAAY,8KA0BvB,CAAC"}
|
package/dist/updateChecks.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Console, Effect } from "effect";
|
|
2
|
-
import { CreateAppError } from "
|
|
3
|
-
import { checkedProcess, runProcess } from "
|
|
2
|
+
import { CreateAppError } from "#CreateAppError.ts";
|
|
3
|
+
import { checkedProcess, runProcess } from "#runProcess.ts";
|
|
4
4
|
const conflictMarkers = Effect.fn("CreateApp.conflictMarkers")(function* (target) {
|
|
5
5
|
const result = yield* runProcess(target, "git", [
|
|
6
6
|
"grep",
|
|
@@ -21,7 +21,10 @@ const conflictMarkers = Effect.fn("CreateApp.conflictMarkers")(function* (target
|
|
|
21
21
|
});
|
|
22
22
|
export const updateChecks = Effect.fn("CreateApp.updateChecks")(function* (target) {
|
|
23
23
|
const failures = [];
|
|
24
|
-
for (const args of [
|
|
24
|
+
for (const args of [
|
|
25
|
+
["install", "--no-frozen-lockfile"],
|
|
26
|
+
["run", "typecheck"],
|
|
27
|
+
]) {
|
|
25
28
|
yield* Console.log(`Running pnpm ${args.join(" ")}...`);
|
|
26
29
|
const result = yield* runProcess(target, "pnpm", args);
|
|
27
30
|
if (result.code !== 0) {
|
|
@@ -35,7 +38,7 @@ export const updateChecks = Effect.fn("CreateApp.updateChecks")(function* (targe
|
|
|
35
38
|
if (markers.length > 0) {
|
|
36
39
|
failures.unshift(`Files with conflict markers:\n${markers.join("\n")}`);
|
|
37
40
|
}
|
|
38
|
-
const unresolved = (yield* checkedProcess(target, "git", ["diff", "--name-only", "--diff-filter=U"])).trim();
|
|
41
|
+
const unresolved = (yield* checkedProcess(target, "git", ["diff", "--name-only", "--diff-filter=U", "--", "."])).trim();
|
|
39
42
|
if (unresolved !== "") {
|
|
40
43
|
failures.push(`Unresolved Git conflicts:\n${unresolved}`);
|
|
41
44
|
}
|
package/dist/updateChecks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"updateChecks.js","sourceRoot":"","sources":["../src/updateChecks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"updateChecks.js","sourceRoot":"","sources":["../src/updateChecks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5D,MAAM,eAAe,GAAG,MAAM,CAAC,EAAE,CAAC,2BAA2B,CAAC,CAAC,QAAQ,CAAC,EAAE,MAAc;IACvF,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE;QAC/C,MAAM;QACN,aAAa;QACb,oBAAoB;QACpB,IAAI;QACJ,IAAI;QACJ,IAAI;QACJ,IAAI;QACJ,kCAAkC;QAClC,IAAI;QACJ,GAAG;KACH,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QACrB,OAAO,KAAK,CAAC,CAAC,IAAI,cAAc,CAAC,EAAE,OAAO,EAAE,qCAAqC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IAC5G,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAClD,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC,EAAE,CAAC,wBAAwB,CAAC,CAAC,QAAQ,CAAC,EAAE,MAAc;IACxF,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,KAAK,MAAM,IAAI,IAAI;QAClB,CAAC,SAAS,EAAE,sBAAsB,CAAC;QACnC,CAAC,KAAK,EAAE,WAAW,CAAC;KACpB,EAAE,CAAC;QACH,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACxD,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QACvD,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACvB,QAAQ,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,iBAAiB,MAAM,CAAC,IAAI,OAAO,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;YAC/G,IAAI,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC,EAAE,CAAC;gBAC7E,QAAQ,CAAC,IAAI,CACZ,2QAA2Q,CAC3Q,CAAC;YACH,CAAC;QACF,CAAC;IACF,CAAC;IACD,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;IAC/C,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,QAAQ,CAAC,OAAO,CAAC,iCAAiC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACzE,CAAC;IACD,MAAM,UAAU,GAAG,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,iBAAiB,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACxH,IAAI,UAAU,KAAK,EAAE,EAAE,CAAC;QACvB,QAAQ,CAAC,IAAI,CAAC,8BAA8B,UAAU,EAAE,CAAC,CAAC;IAC3D,CAAC;IACD,OAAO,QAAQ,CAAC;AACjB,CAAC,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@shivaedev/create-app",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.37.0",
|
|
4
4
|
"description": "Create and install a Platform application from the maintained starter",
|
|
5
5
|
"homepage": "https://github.com/ShivaeDev/platform/tree/main/packages/create-app#readme",
|
|
6
6
|
"bugs": {
|
|
@@ -44,13 +44,13 @@
|
|
|
44
44
|
"README.md"
|
|
45
45
|
],
|
|
46
46
|
"dependencies": {
|
|
47
|
-
"@shivaedev/sql": "0.
|
|
47
|
+
"@shivaedev/sql": "0.33.0"
|
|
48
48
|
},
|
|
49
49
|
"devDependencies": {
|
|
50
50
|
"@effect/platform-node": "4.0.6",
|
|
51
51
|
"@effect/platform-node-shared": "4.0.6",
|
|
52
|
-
"@shivaedev/quality": "0.
|
|
53
|
-
"@shivaedev/test-story": "0.
|
|
52
|
+
"@shivaedev/quality": "0.56.0",
|
|
53
|
+
"@shivaedev/test-story": "0.34.0",
|
|
54
54
|
"@types/node": "24.19.2",
|
|
55
55
|
"effect": "4.0.6",
|
|
56
56
|
"esbuild": "0.28.2",
|
package/src/packTemplate.ts
CHANGED
|
@@ -11,7 +11,7 @@ const appPaths = new Map([
|
|
|
11
11
|
["pnpm-workspace.copy.yaml", "pnpm-workspace.yaml"],
|
|
12
12
|
]);
|
|
13
13
|
const excluded = new Set(["node_modules", "dist", "coverage", ".browser-check", "pnpm-lock.yaml", ".git"]);
|
|
14
|
-
const rootExcluded = new Set(["published-versions.json", "AGENTS.md", "CLAUDE.md", "README.md"]);
|
|
14
|
+
const rootExcluded = new Set(["published-versions.json", "AGENTS.md", "CLAUDE.md", "README.md", ".agents", ".claude"]);
|
|
15
15
|
function included(path: string) {
|
|
16
16
|
return !(rootExcluded.has(path) || excluded.has(basename(path))) && (!basename(path).startsWith(".env") || basename(path) === ".env.example");
|
|
17
17
|
}
|
package/src/runProcess.ts
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { Effect, Stream } from "effect";
|
|
2
2
|
import { ChildProcess, ChildProcessSpawner } from "effect/process";
|
|
3
|
-
import { CreateAppError } from "
|
|
3
|
+
import { CreateAppError } from "#CreateAppError.ts";
|
|
4
4
|
|
|
5
|
-
export const runProcess = Effect.fn("CreateApp.runProcess")(function* (cwd: string, command: string, args: readonly string[]) {
|
|
5
|
+
export const runProcess = Effect.fn("CreateApp.runProcess")(function* (cwd: string, command: string, args: readonly string[], input?: string) {
|
|
6
6
|
return yield* Effect.scoped(
|
|
7
7
|
Effect.gen(function* () {
|
|
8
8
|
const spawner = yield* ChildProcessSpawner.ChildProcessSpawner;
|
|
9
|
-
const
|
|
9
|
+
const stdin = input === undefined ? "ignore" : Stream.make(new TextEncoder().encode(input));
|
|
10
|
+
const child = yield* spawner.spawn(ChildProcess.make(command, args, { cwd, stdin }));
|
|
10
11
|
const [stdout, stderr, code] = yield* Effect.all(
|
|
11
12
|
[Stream.mkString(Stream.decodeText(child.stdout)), Stream.mkString(Stream.decodeText(child.stderr)), child.exitCode],
|
|
12
13
|
{ concurrency: "unbounded" },
|
|
@@ -16,8 +17,13 @@ export const runProcess = Effect.fn("CreateApp.runProcess")(function* (cwd: stri
|
|
|
16
17
|
);
|
|
17
18
|
});
|
|
18
19
|
|
|
19
|
-
export const checkedProcess = Effect.fn("CreateApp.checkedProcess")(function* (
|
|
20
|
-
|
|
20
|
+
export const checkedProcess = Effect.fn("CreateApp.checkedProcess")(function* (
|
|
21
|
+
cwd: string,
|
|
22
|
+
command: string,
|
|
23
|
+
args: readonly string[],
|
|
24
|
+
input?: string,
|
|
25
|
+
) {
|
|
26
|
+
const result = yield* runProcess(cwd, command, args, input);
|
|
21
27
|
if (result.code !== 0) {
|
|
22
28
|
return yield* new CreateAppError({ message: `${command} ${args[0]} failed: ${result.stderr.trim()}` });
|
|
23
29
|
}
|
package/src/starterPatch.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { join } from "node:path";
|
|
2
2
|
import { Effect, FileSystem } from "effect";
|
|
3
|
-
import { renderTemplate } from "
|
|
4
|
-
import { checkedProcess } from "
|
|
5
|
-
import type { Template } from "
|
|
3
|
+
import { renderTemplate } from "#generation.ts";
|
|
4
|
+
import { checkedProcess } from "#runProcess.ts";
|
|
5
|
+
import type { Template } from "#template.ts";
|
|
6
6
|
|
|
7
7
|
export const starterPatch = Effect.fn("CreateApp.starterPatch")(function* (
|
|
8
8
|
target: string,
|
|
@@ -26,18 +26,30 @@ export const starterPatch = Effect.fn("CreateApp.starterPatch")(function* (
|
|
|
26
26
|
yield* renderTemplate(repository, base, name);
|
|
27
27
|
yield* checkedProcess(repository, "git", ["add", "--all"]);
|
|
28
28
|
const tree = (yield* checkedProcess(repository, "git", ["write-tree"])).trim();
|
|
29
|
+
const conflicts: { path: string; indexInfo: string }[] = [];
|
|
30
|
+
const retained: Template[number][] = [];
|
|
29
31
|
for (const entry of base) {
|
|
30
|
-
yield* checkedProcess(target, "git", ["hash-object", "-w", "--", join(repository, entry.path)]);
|
|
32
|
+
const hash = (yield* checkedProcess(target, "git", ["hash-object", "-w", "--", join(repository, entry.path)])).trim();
|
|
33
|
+
if (!incoming.some((file) => file.path === entry.path)) {
|
|
34
|
+
const ours = yield* checkedProcess(target, "git", ["--literal-pathspecs", "ls-files", "--stage", "--full-name", "-z", "--", entry.path]);
|
|
35
|
+
if (!ours.startsWith(`100644 ${hash} 0\t`)) {
|
|
36
|
+
const indexedPath = ours.slice(ours.indexOf("\t") + 1, -1);
|
|
37
|
+
const indexInfo = [`0 ${hash}\t${indexedPath}\0`, `100644 ${hash} 1\t${indexedPath}\0`, ours.replace(" 0\t", " 2\t")].join("");
|
|
38
|
+
conflicts.push({ indexInfo, path: entry.path });
|
|
39
|
+
// Git apply rejects these deletions before applying any of the delta.
|
|
40
|
+
retained.push(entry);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
31
43
|
}
|
|
32
44
|
for (const path of yield* fs.readDirectory(repository)) {
|
|
33
45
|
if (path !== ".git") {
|
|
34
46
|
yield* fs.remove(join(repository, path), { recursive: true });
|
|
35
47
|
}
|
|
36
48
|
}
|
|
37
|
-
yield* renderTemplate(repository, incoming, name);
|
|
49
|
+
yield* renderTemplate(repository, [...incoming, ...retained], name);
|
|
38
50
|
yield* checkedProcess(repository, "git", ["add", "--all"]);
|
|
39
51
|
const patch = yield* checkedProcess(repository, "git", ["diff", "--cached", "--binary", "--full-index", "--no-renames", tree]);
|
|
40
52
|
const path = join(directory, "starter.patch");
|
|
41
53
|
yield* fs.writeFileString(path, patch);
|
|
42
|
-
return { empty: patch.length === 0, path };
|
|
54
|
+
return { conflicts, empty: patch.length === 0, path };
|
|
43
55
|
});
|
package/src/template.ts
CHANGED
|
@@ -19,6 +19,7 @@ export function appTemplate(template: Template, minimal = false): Template {
|
|
|
19
19
|
if (entry.path === "package.json" && minimalManifest !== undefined) {
|
|
20
20
|
return { ...entry, content: minimalManifest.content };
|
|
21
21
|
}
|
|
22
|
+
// Updates must reconstruct historical minimal files exactly to recognize unmodified deletions.
|
|
22
23
|
if (!["src/admin/modules.ts", "src/server/modules.ts", "src/server/workerModules.ts", "src/client/modules.ts"].includes(entry.path)) {
|
|
23
24
|
return entry;
|
|
24
25
|
}
|
|
@@ -39,6 +40,7 @@ const Manifest = Schema.Struct({
|
|
|
39
40
|
packageManager: Schema.String,
|
|
40
41
|
private: Schema.Boolean,
|
|
41
42
|
scripts: Versions,
|
|
43
|
+
shivaedevSkills: Schema.optional(Schema.Array(Schema.String)),
|
|
42
44
|
type: Schema.String,
|
|
43
45
|
version: Schema.String,
|
|
44
46
|
});
|
|
@@ -55,6 +57,7 @@ const manifestOrder = [
|
|
|
55
57
|
"devDependencies",
|
|
56
58
|
"packageManager",
|
|
57
59
|
"engines",
|
|
60
|
+
"shivaedevSkills",
|
|
58
61
|
] as const satisfies ReadonlyArray<keyof typeof Manifest.Type>;
|
|
59
62
|
|
|
60
63
|
export function manifestJson(manifest: typeof Manifest.Type) {
|