@shivaedev/create-app 0.24.0 → 0.25.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 +31 -0
- package/README.md +12 -0
- package/dist/CreateAppError.d.ts +3 -2
- package/dist/CreateAppError.d.ts.map +1 -1
- package/dist/CreateAppError.js +5 -2
- package/dist/CreateAppError.js.map +1 -1
- package/dist/appFiles.d.ts.map +1 -1
- package/dist/appFiles.js +2 -3
- package/dist/appFiles.js.map +1 -1
- package/dist/cli.js +73 -73
- package/dist/generation.d.ts +1 -1
- package/dist/generation.d.ts.map +1 -1
- package/dist/generation.js +4 -5
- package/dist/generation.js.map +1 -1
- package/dist/initializeGit.d.ts +1 -1
- package/dist/initializeGit.d.ts.map +1 -1
- package/dist/initializeGit.js +10 -5
- package/dist/initializeGit.js.map +1 -1
- package/dist/pack.js +3 -1
- package/dist/pack.js.map +1 -1
- package/dist/packTemplate.js +2 -2
- package/dist/packTemplate.js.map +1 -1
- package/dist/template.d.ts +36 -0
- package/dist/template.d.ts.map +1 -1
- package/dist/template.js +6 -3
- package/dist/template.js.map +1 -1
- package/package.json +18 -19
- package/src/CreateAppError.ts +5 -2
- package/src/appFiles.ts +2 -4
- package/src/cli.ts +6 -3
- package/src/generation.ts +4 -5
- package/src/initializeGit.ts +11 -5
- package/src/pack.ts +8 -6
- package/src/packTemplate.ts +2 -2
- package/src/template.ts +7 -3
- package/template.json +1 -1
package/dist/generation.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Effect, FileSystem, Schema } from "effect";
|
|
2
|
-
import { CreateAppError } from "
|
|
2
|
+
import { CreateAppError } from "#CreateAppError.ts";
|
|
3
3
|
export declare const Generation: Schema.Struct<{
|
|
4
4
|
readonly minimal: Schema.optional<Schema.Boolean>;
|
|
5
5
|
readonly name: Schema.String;
|
package/dist/generation.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generation.d.ts","sourceRoot":"","sources":["../src/generation.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEpD,OAAO,EAAE,cAAc,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"generation.d.ts","sourceRoot":"","sources":["../src/generation.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEpD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAGpD,eAAO,MAAM,UAAU;;;;EAA2G,CAAC;AACnI,MAAM,MAAM,UAAU,GAAG,OAAO,UAAU,CAAC,IAAI,CAAC;AAChD,eAAO,MAAM,eAAe,qBAAqB,CAAC;AAElD,eAAO,MAAM,YAAY;;;8FAGvB,CAAC;AAEH,eAAO,MAAM,eAAe;;;;8FAI1B,CAAC;AAEH,eAAO,MAAM,cAAc;;;+HAWzB,CAAC"}
|
package/dist/generation.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { Buffer } from "node:buffer";
|
|
2
2
|
import { dirname, join } from "node:path";
|
|
3
3
|
import { Effect, FileSystem, Schema } from "effect";
|
|
4
|
-
import { appFile } from "
|
|
5
|
-
import { CreateAppError } from "
|
|
6
|
-
import { Template } from "
|
|
4
|
+
import { appFile } from "#appFiles.ts";
|
|
5
|
+
import { CreateAppError } from "#CreateAppError.ts";
|
|
6
|
+
import { Template } from "#template.ts";
|
|
7
7
|
export const Generation = Schema.Struct({ minimal: Schema.optional(Schema.Boolean), name: Schema.String, version: Schema.String });
|
|
8
8
|
export const GENERATION_FILE = ".create-app.json";
|
|
9
9
|
export const readTemplate = Effect.fn("CreateApp.readTemplate")(function* (path) {
|
|
@@ -20,12 +20,11 @@ export const renderTemplate = Effect.fn("CreateApp.renderTemplate")(function* (t
|
|
|
20
20
|
for (const entry of template) {
|
|
21
21
|
const path = join(target, entry.path);
|
|
22
22
|
const content = yield* Effect.try({
|
|
23
|
-
catch: (cause) => new CreateAppError({ message:
|
|
23
|
+
catch: (cause) => new CreateAppError({ message: `Failed to render template file ${entry.path}` }, { cause }),
|
|
24
24
|
try: () => appFile(entry.path, Buffer.from(entry.content, "base64"), name),
|
|
25
25
|
});
|
|
26
26
|
yield* fs.makeDirectory(dirname(path), { recursive: true });
|
|
27
27
|
yield* fs.writeFile(path, content, { mode: 0o644 });
|
|
28
|
-
yield* fs.chmod(path, 0o644);
|
|
29
28
|
}
|
|
30
29
|
});
|
|
31
30
|
//# sourceMappingURL=generation.js.map
|
package/dist/generation.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generation.js","sourceRoot":"","sources":["../src/generation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"generation.js","sourceRoot":"","sources":["../src/generation.ts"],"names":[],"mappings":"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"}
|
package/dist/initializeGit.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Effect } from "effect";
|
|
2
2
|
import { ChildProcessSpawner } from "effect/process";
|
|
3
|
-
import { CreateAppError } from "
|
|
3
|
+
import { CreateAppError } from "#CreateAppError.ts";
|
|
4
4
|
export declare const initializeGit: (cwd: string) => Effect.Effect<boolean, CreateAppError | import("effect/PlatformError").PlatformError, ChildProcessSpawner.ChildProcessSpawner>;
|
|
5
5
|
export declare const commitGit: (cwd: string) => Effect.Effect<void, CreateAppError | import("effect/PlatformError").PlatformError, ChildProcessSpawner.ChildProcessSpawner>;
|
|
6
6
|
//# sourceMappingURL=initializeGit.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"initializeGit.d.ts","sourceRoot":"","sources":["../src/initializeGit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAgB,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"initializeGit.d.ts","sourceRoot":"","sources":["../src/initializeGit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAgB,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAqBpD,eAAO,MAAM,aAAa,iJASxB,CAAC;AAEH,eAAO,MAAM,SAAS,8IAMpB,CAAC"}
|
package/dist/initializeGit.js
CHANGED
|
@@ -1,13 +1,18 @@
|
|
|
1
1
|
import { Effect } from "effect";
|
|
2
2
|
import { ChildProcess, ChildProcessSpawner } from "effect/process";
|
|
3
|
-
import { CreateAppError } from "
|
|
3
|
+
import { CreateAppError } from "#CreateAppError.ts";
|
|
4
4
|
function git(cwd, args, inherit = false) {
|
|
5
5
|
return Effect.flatMap(ChildProcessSpawner.ChildProcessSpawner, (spawner) => spawner.exitCode(ChildProcess.make("git", args, { cwd, stderr: inherit ? "inherit" : "pipe", stdout: inherit ? "inherit" : "pipe" })));
|
|
6
6
|
}
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
function shellWord(word) {
|
|
8
|
+
return /^[\w./=@:-]+$/u.test(word) ? word : `'${word.replaceAll("'", "'\"'\"'")}'`;
|
|
9
|
+
}
|
|
10
|
+
const checkedGit = Effect.fn("CreateApp.checkedGit")(function* (cwd, args, config = []) {
|
|
11
|
+
const code = yield* git(cwd, [...config, ...args], true);
|
|
9
12
|
if (code !== 0) {
|
|
10
|
-
return yield* new CreateAppError({
|
|
13
|
+
return yield* new CreateAppError({
|
|
14
|
+
message: `git ${args.map(shellWord).join(" ")} failed (exit ${code}). The generated files remain in ${cwd}.`,
|
|
15
|
+
});
|
|
11
16
|
}
|
|
12
17
|
});
|
|
13
18
|
export const initializeGit = Effect.fn("CreateApp.initializeGit")(function* (cwd) {
|
|
@@ -23,6 +28,6 @@ export const commitGit = Effect.fn("CreateApp.commitGit")(function* (cwd) {
|
|
|
23
28
|
const identity = yield* git(cwd, ["-c", "user.useConfigOnly=true", "var", "GIT_AUTHOR_IDENT"]);
|
|
24
29
|
const fallback = identity === 0 ? [] : ["-c", "user.name=Create App", "-c", "user.email=create-app@localhost"];
|
|
25
30
|
yield* checkedGit(cwd, ["add", "--all"]);
|
|
26
|
-
yield* checkedGit(cwd, [
|
|
31
|
+
yield* checkedGit(cwd, ["commit", "-m", "Initialize a generated app"], fallback);
|
|
27
32
|
});
|
|
28
33
|
//# sourceMappingURL=initializeGit.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"initializeGit.js","sourceRoot":"","sources":["../src/initializeGit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"initializeGit.js","sourceRoot":"","sources":["../src/initializeGit.ts"],"names":[],"mappings":"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"}
|
package/dist/pack.js
CHANGED
|
@@ -2,5 +2,7 @@ import { fileURLToPath } from "node:url";
|
|
|
2
2
|
import { NodeRuntime, NodeServices } from "@effect/platform-node";
|
|
3
3
|
import { Effect } from "effect";
|
|
4
4
|
import { packTemplate } from "./packTemplate.js";
|
|
5
|
-
|
|
5
|
+
if (import.meta.main) {
|
|
6
|
+
NodeRuntime.runMain(packTemplate(fileURLToPath(new URL("../../../examples/starter", import.meta.url)), fileURLToPath(new URL("../template.json", import.meta.url))).pipe(Effect.provide(NodeServices.layer)));
|
|
7
|
+
}
|
|
6
8
|
//# sourceMappingURL=pack.js.map
|
package/dist/pack.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pack.js","sourceRoot":"","sources":["../src/pack.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,WAAW,CAAC,OAAO,CAClB,YAAY,CACX,aAAa,CAAC,IAAI,GAAG,CAAC,2BAA2B,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EACpE,aAAa,CAAC,IAAI,GAAG,CAAC,kBAAkB,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAC3D,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAC1C,CAAC"}
|
|
1
|
+
{"version":3,"file":"pack.js","sourceRoot":"","sources":["../src/pack.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,IAAI,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;IACtB,WAAW,CAAC,OAAO,CAClB,YAAY,CACX,aAAa,CAAC,IAAI,GAAG,CAAC,2BAA2B,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EACpE,aAAa,CAAC,IAAI,GAAG,CAAC,kBAAkB,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAC3D,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAC1C,CAAC;AACH,CAAC"}
|
package/dist/packTemplate.js
CHANGED
|
@@ -34,7 +34,7 @@ export const packTemplate = Effect.fn("CreateApp.packTemplate")(function* (start
|
|
|
34
34
|
const target = appPaths.get(path) ?? path;
|
|
35
35
|
const source = Buffer.from(yield* fs.readFile(join(starter, path)));
|
|
36
36
|
const content = yield* Effect.try({
|
|
37
|
-
catch: (cause) => new CreateAppError({ message:
|
|
37
|
+
catch: (cause) => new CreateAppError({ message: `Failed to prepare template file ${path}` }, { cause }),
|
|
38
38
|
try: () => prepareFile(path, source, versions),
|
|
39
39
|
});
|
|
40
40
|
entries.push({ content: content.toString("base64"), path: target });
|
|
@@ -45,7 +45,7 @@ export const packTemplate = Effect.fn("CreateApp.packTemplate")(function* (start
|
|
|
45
45
|
const manifest = entries.find((entry) => entry.path === "package.json");
|
|
46
46
|
if (manifest !== undefined) {
|
|
47
47
|
const minimal = yield* Effect.try({
|
|
48
|
-
catch: (cause) => new CreateAppError({ message:
|
|
48
|
+
catch: (cause) => new CreateAppError({ message: "Failed to prepare minimal template file package.minimal.json" }, { cause }),
|
|
49
49
|
try: () => prepareManifest(Buffer.from(manifest.content, "base64").toString(), versions, true),
|
|
50
50
|
});
|
|
51
51
|
entries.push({ content: Buffer.from(minimal).toString("base64"), path: "package.minimal.json" });
|
package/dist/packTemplate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"packTemplate.js","sourceRoot":"","sources":["../src/packTemplate.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"packTemplate.js","sourceRoot":"","sources":["../src/packTemplate.ts"],"names":[],"mappings":"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"}
|
package/dist/template.d.ts
CHANGED
|
@@ -11,9 +11,45 @@ export declare const decodeTemplate: (input: unknown, options?: import("effect/S
|
|
|
11
11
|
readonly path: string;
|
|
12
12
|
}[];
|
|
13
13
|
export declare function appTemplate(template: Template, minimal?: boolean): Template;
|
|
14
|
+
declare const Manifest: Schema.Struct<{
|
|
15
|
+
readonly dependencies: Schema.$Record<Schema.String, Schema.String>;
|
|
16
|
+
readonly devDependencies: Schema.$Record<Schema.String, Schema.String>;
|
|
17
|
+
readonly engines: Schema.$Record<Schema.String, Schema.String>;
|
|
18
|
+
readonly imports: Schema.$Record<Schema.String, Schema.String>;
|
|
19
|
+
readonly name: Schema.String;
|
|
20
|
+
readonly packageManager: Schema.String;
|
|
21
|
+
readonly private: Schema.Boolean;
|
|
22
|
+
readonly scripts: Schema.$Record<Schema.String, Schema.String>;
|
|
23
|
+
readonly type: Schema.String;
|
|
24
|
+
readonly version: Schema.String;
|
|
25
|
+
}>;
|
|
26
|
+
export declare const decodeManifest: (input: unknown, options?: import("effect/SchemaAST").ParseOptions) => {
|
|
27
|
+
readonly dependencies: {
|
|
28
|
+
readonly [x: string]: string;
|
|
29
|
+
};
|
|
30
|
+
readonly devDependencies: {
|
|
31
|
+
readonly [x: string]: string;
|
|
32
|
+
};
|
|
33
|
+
readonly engines: {
|
|
34
|
+
readonly [x: string]: string;
|
|
35
|
+
};
|
|
36
|
+
readonly imports: {
|
|
37
|
+
readonly [x: string]: string;
|
|
38
|
+
};
|
|
39
|
+
readonly name: string;
|
|
40
|
+
readonly packageManager: string;
|
|
41
|
+
readonly private: boolean;
|
|
42
|
+
readonly scripts: {
|
|
43
|
+
readonly [x: string]: string;
|
|
44
|
+
};
|
|
45
|
+
readonly type: string;
|
|
46
|
+
readonly version: string;
|
|
47
|
+
};
|
|
48
|
+
export declare function manifestJson(manifest: typeof Manifest.Type): string;
|
|
14
49
|
export declare function registryDependencies(dependencies: Readonly<Record<string, string>>, versions: Readonly<Record<string, string>>): {
|
|
15
50
|
[k: string]: string;
|
|
16
51
|
};
|
|
17
52
|
export declare function prepareManifest(source: string, versions: Readonly<Record<string, string>>, minimal?: boolean): string;
|
|
18
53
|
export declare function prepareFile(path: string, content: Buffer, versions: Readonly<Record<string, string>>): Buffer<ArrayBufferLike>;
|
|
54
|
+
export {};
|
|
19
55
|
//# sourceMappingURL=template.d.ts.map
|
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,CAyBzE;
|
|
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,CAyBzE;AAED,QAAA,MAAM,QAAQ;;;;;;;;;;;EAWZ,CAAC;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;CAA4D,CAAC;AAexF,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
|
@@ -42,7 +42,7 @@ const Manifest = Schema.Struct({
|
|
|
42
42
|
type: Schema.String,
|
|
43
43
|
version: Schema.String,
|
|
44
44
|
});
|
|
45
|
-
const decodeManifest = Schema.decodeUnknownSync(Schema.fromJsonString(Manifest));
|
|
45
|
+
export const decodeManifest = Schema.decodeUnknownSync(Schema.fromJsonString(Manifest));
|
|
46
46
|
// Decoding does not keep input key order, so the generated manifest lists its fields in package.json order.
|
|
47
47
|
const manifestOrder = [
|
|
48
48
|
"name",
|
|
@@ -56,6 +56,9 @@ const manifestOrder = [
|
|
|
56
56
|
"packageManager",
|
|
57
57
|
"engines",
|
|
58
58
|
];
|
|
59
|
+
export function manifestJson(manifest) {
|
|
60
|
+
return `${JSON.stringify(Object.fromEntries(manifestOrder.map((key) => [key, manifest[key]])), null, "\t")}\n`;
|
|
61
|
+
}
|
|
59
62
|
export function registryDependencies(dependencies, versions) {
|
|
60
63
|
return Object.fromEntries(Object.entries(dependencies).map(([name, version]) => {
|
|
61
64
|
if (!version.startsWith("workspace:")) {
|
|
@@ -77,7 +80,7 @@ export function prepareManifest(source, versions, minimal = false) {
|
|
|
77
80
|
devDependencies: registryDependencies(manifest.devDependencies, versions),
|
|
78
81
|
scripts: Object.fromEntries(Object.entries(scripts).map(([name, script]) => [name, script.replaceAll("--conditions=source ", "")])),
|
|
79
82
|
};
|
|
80
|
-
return
|
|
83
|
+
return manifestJson(prepared);
|
|
81
84
|
}
|
|
82
85
|
export function prepareFile(path, content, versions) {
|
|
83
86
|
if (["src/test-support/adminCommand.ts", "src/test-support/deployChild.ts", "src/test-support/developmentServer.ts"].includes(path)) {
|
|
@@ -87,7 +90,7 @@ export function prepareFile(path, content, versions) {
|
|
|
87
90
|
return Buffer.from(prepareManifest(content.toString(), versions));
|
|
88
91
|
}
|
|
89
92
|
if (["tsconfig.json", "vite.config.ts", "vitest.config.ts", "src/server/dev.ts"].includes(path)) {
|
|
90
|
-
return Buffer.from(content.toString().replaceAll('
|
|
93
|
+
return Buffer.from(content.toString().replaceAll('["source"]', "[]"));
|
|
91
94
|
}
|
|
92
95
|
return content;
|
|
93
96
|
}
|
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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@shivaedev/create-app",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.25.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": {
|
|
@@ -28,21 +28,7 @@
|
|
|
28
28
|
"types": "./dist/*.d.ts",
|
|
29
29
|
"default": "./dist/*.js"
|
|
30
30
|
},
|
|
31
|
-
"./package.json": "./package.json"
|
|
32
|
-
"./CreateAppError.ts": null,
|
|
33
|
-
"./appFiles.ts": null,
|
|
34
|
-
"./cli.ts": null,
|
|
35
|
-
"./createApp.ts": null,
|
|
36
|
-
"./initializeGit.ts": null,
|
|
37
|
-
"./pack.ts": null,
|
|
38
|
-
"./packTemplate.ts": null,
|
|
39
|
-
"./template.ts": null,
|
|
40
|
-
"./test-support/*": null,
|
|
41
|
-
"./generation.ts": null,
|
|
42
|
-
"./historicalTemplate.ts": null,
|
|
43
|
-
"./runProcess.ts": null,
|
|
44
|
-
"./starterPatch.ts": null,
|
|
45
|
-
"./updateApp.ts": null
|
|
31
|
+
"./package.json": "./package.json"
|
|
46
32
|
},
|
|
47
33
|
"bin": {
|
|
48
34
|
"create-app": "./dist/cli.js"
|
|
@@ -58,19 +44,32 @@
|
|
|
58
44
|
"README.md"
|
|
59
45
|
],
|
|
60
46
|
"dependencies": {
|
|
61
|
-
"@shivaedev/sql": "0.
|
|
47
|
+
"@shivaedev/sql": "0.26.0"
|
|
62
48
|
},
|
|
63
49
|
"devDependencies": {
|
|
64
50
|
"@effect/platform-node": "4.0.6",
|
|
65
51
|
"@effect/platform-node-shared": "4.0.6",
|
|
66
|
-
"@shivaedev/quality": "0.
|
|
67
|
-
"@shivaedev/test-story": "0.
|
|
52
|
+
"@shivaedev/quality": "0.46.0",
|
|
53
|
+
"@shivaedev/test-story": "0.25.0",
|
|
68
54
|
"@types/node": "24.19.2",
|
|
69
55
|
"effect": "4.0.6",
|
|
70
56
|
"esbuild": "0.28.2",
|
|
71
57
|
"typescript": "7.0.2",
|
|
72
58
|
"vitest": "5.0.5"
|
|
73
59
|
},
|
|
60
|
+
"peerDependencies": {
|
|
61
|
+
"@effect/platform-node": "4.0.6",
|
|
62
|
+
"@effect/platform-node-shared": "4.0.6",
|
|
63
|
+
"effect": "4.0.6"
|
|
64
|
+
},
|
|
65
|
+
"peerDependenciesMeta": {
|
|
66
|
+
"@effect/platform-node": {
|
|
67
|
+
"optional": true
|
|
68
|
+
},
|
|
69
|
+
"@effect/platform-node-shared": {
|
|
70
|
+
"optional": true
|
|
71
|
+
}
|
|
72
|
+
},
|
|
74
73
|
"engines": {
|
|
75
74
|
"node": ">=24"
|
|
76
75
|
},
|
package/src/CreateAppError.ts
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
|
-
import { Data
|
|
1
|
+
import { Data } from "effect";
|
|
2
2
|
|
|
3
3
|
export class CreateAppError extends Data.TaggedError("CreateAppError")<{ readonly message: string }> {
|
|
4
|
-
|
|
4
|
+
constructor(fields: { readonly message: string }, options?: ErrorOptions) {
|
|
5
|
+
super(fields);
|
|
6
|
+
Object.defineProperty(this, "cause", { value: options?.cause });
|
|
7
|
+
}
|
|
5
8
|
}
|
package/src/appFiles.ts
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
import { Buffer } from "node:buffer";
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
const decodeManifest = Schema.decodeUnknownSync(Schema.fromJsonString(Schema.Record(Schema.String, Schema.Unknown)));
|
|
2
|
+
import { decodeManifest, manifestJson } from "#template.ts";
|
|
5
3
|
|
|
6
4
|
export function databaseName(name: string) {
|
|
7
5
|
return name
|
|
@@ -12,7 +10,7 @@ export function databaseName(name: string) {
|
|
|
12
10
|
|
|
13
11
|
export function appFile(path: string, content: Buffer, name: string) {
|
|
14
12
|
if (path === "package.json") {
|
|
15
|
-
return Buffer.from(
|
|
13
|
+
return Buffer.from(manifestJson({ ...decodeManifest(content.toString()), name }));
|
|
16
14
|
}
|
|
17
15
|
if (path === ".env.example") {
|
|
18
16
|
return Buffer.from(
|
package/src/cli.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { fileURLToPath } from "node:url";
|
|
3
3
|
import * as NodeRuntime from "@effect/platform-node/NodeRuntime";
|
|
4
4
|
import * as NodeServices from "@effect/platform-node/NodeServices";
|
|
5
|
-
import { Console, Effect, FileSystem, Option, Schema } from "effect";
|
|
5
|
+
import { Cause, Console, Effect, FileSystem, Option, Schema } from "effect";
|
|
6
6
|
import { Argument, Command, Flag } from "effect/cli";
|
|
7
7
|
import { CreateAppError } from "./CreateAppError.ts";
|
|
8
8
|
import { createApp } from "./createApp.ts";
|
|
@@ -31,7 +31,10 @@ const program = Effect.gen(function* () {
|
|
|
31
31
|
});
|
|
32
32
|
|
|
33
33
|
program.pipe(
|
|
34
|
-
Effect.
|
|
34
|
+
Effect.tapCause((cause) => {
|
|
35
|
+
const error = Cause.squash(cause);
|
|
36
|
+
return Console.error(error instanceof CreateAppError && error.cause === undefined ? `create-app: ${error.message}` : Cause.pretty(cause));
|
|
37
|
+
}),
|
|
35
38
|
Effect.provide(NodeServices.layer),
|
|
36
|
-
NodeRuntime.runMain,
|
|
39
|
+
NodeRuntime.runMain({ disableErrorReporting: true }),
|
|
37
40
|
);
|
package/src/generation.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { Buffer } from "node:buffer";
|
|
2
2
|
import { dirname, join } from "node:path";
|
|
3
3
|
import { Effect, FileSystem, Schema } from "effect";
|
|
4
|
-
import { appFile } from "
|
|
5
|
-
import { CreateAppError } from "
|
|
6
|
-
import { Template } from "
|
|
4
|
+
import { appFile } from "#appFiles.ts";
|
|
5
|
+
import { CreateAppError } from "#CreateAppError.ts";
|
|
6
|
+
import { Template } from "#template.ts";
|
|
7
7
|
|
|
8
8
|
export const Generation = Schema.Struct({ minimal: Schema.optional(Schema.Boolean), name: Schema.String, version: Schema.String });
|
|
9
9
|
export type Generation = typeof Generation.Type;
|
|
@@ -25,11 +25,10 @@ export const renderTemplate = Effect.fn("CreateApp.renderTemplate")(function* (t
|
|
|
25
25
|
for (const entry of template) {
|
|
26
26
|
const path = join(target, entry.path);
|
|
27
27
|
const content = yield* Effect.try({
|
|
28
|
-
catch: (cause) => new CreateAppError({ message:
|
|
28
|
+
catch: (cause) => new CreateAppError({ message: `Failed to render template file ${entry.path}` }, { cause }),
|
|
29
29
|
try: () => appFile(entry.path, Buffer.from(entry.content, "base64"), name),
|
|
30
30
|
});
|
|
31
31
|
yield* fs.makeDirectory(dirname(path), { recursive: true });
|
|
32
32
|
yield* fs.writeFile(path, content, { mode: 0o644 });
|
|
33
|
-
yield* fs.chmod(path, 0o644);
|
|
34
33
|
}
|
|
35
34
|
});
|
package/src/initializeGit.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Effect } from "effect";
|
|
2
2
|
import { ChildProcess, ChildProcessSpawner } from "effect/process";
|
|
3
|
-
import { CreateAppError } from "
|
|
3
|
+
import { CreateAppError } from "#CreateAppError.ts";
|
|
4
4
|
|
|
5
5
|
function git(cwd: string, args: readonly string[], inherit = false) {
|
|
6
6
|
return Effect.flatMap(ChildProcessSpawner.ChildProcessSpawner, (spawner) =>
|
|
@@ -8,10 +8,16 @@ function git(cwd: string, args: readonly string[], inherit = false) {
|
|
|
8
8
|
);
|
|
9
9
|
}
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
function shellWord(word: string) {
|
|
12
|
+
return /^[\w./=@:-]+$/u.test(word) ? word : `'${word.replaceAll("'", "'\"'\"'")}'`;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const checkedGit = Effect.fn("CreateApp.checkedGit")(function* (cwd: string, args: readonly string[], config: readonly string[] = []) {
|
|
16
|
+
const code = yield* git(cwd, [...config, ...args], true);
|
|
13
17
|
if (code !== 0) {
|
|
14
|
-
return yield* new CreateAppError({
|
|
18
|
+
return yield* new CreateAppError({
|
|
19
|
+
message: `git ${args.map(shellWord).join(" ")} failed (exit ${code}). The generated files remain in ${cwd}.`,
|
|
20
|
+
});
|
|
15
21
|
}
|
|
16
22
|
});
|
|
17
23
|
|
|
@@ -31,5 +37,5 @@ export const commitGit = Effect.fn("CreateApp.commitGit")(function* (cwd: string
|
|
|
31
37
|
const identity = yield* git(cwd, ["-c", "user.useConfigOnly=true", "var", "GIT_AUTHOR_IDENT"]);
|
|
32
38
|
const fallback = identity === 0 ? [] : ["-c", "user.name=Create App", "-c", "user.email=create-app@localhost"];
|
|
33
39
|
yield* checkedGit(cwd, ["add", "--all"]);
|
|
34
|
-
yield* checkedGit(cwd, [
|
|
40
|
+
yield* checkedGit(cwd, ["commit", "-m", "Initialize a generated app"], fallback);
|
|
35
41
|
});
|
package/src/pack.ts
CHANGED
|
@@ -3,9 +3,11 @@ import { NodeRuntime, NodeServices } from "@effect/platform-node";
|
|
|
3
3
|
import { Effect } from "effect";
|
|
4
4
|
import { packTemplate } from "./packTemplate.ts";
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
)
|
|
6
|
+
if (import.meta.main) {
|
|
7
|
+
NodeRuntime.runMain(
|
|
8
|
+
packTemplate(
|
|
9
|
+
fileURLToPath(new URL("../../../examples/starter", import.meta.url)),
|
|
10
|
+
fileURLToPath(new URL("../template.json", import.meta.url)),
|
|
11
|
+
).pipe(Effect.provide(NodeServices.layer)),
|
|
12
|
+
);
|
|
13
|
+
}
|
package/src/packTemplate.ts
CHANGED
|
@@ -37,7 +37,7 @@ export const packTemplate = Effect.fn("CreateApp.packTemplate")(function* (start
|
|
|
37
37
|
const target = appPaths.get(path) ?? path;
|
|
38
38
|
const source = Buffer.from(yield* fs.readFile(join(starter, path)));
|
|
39
39
|
const content = yield* Effect.try({
|
|
40
|
-
catch: (cause) => new CreateAppError({ message:
|
|
40
|
+
catch: (cause) => new CreateAppError({ message: `Failed to prepare template file ${path}` }, { cause }),
|
|
41
41
|
try: () => prepareFile(path, source, versions),
|
|
42
42
|
});
|
|
43
43
|
entries.push({ content: content.toString("base64"), path: target });
|
|
@@ -48,7 +48,7 @@ export const packTemplate = Effect.fn("CreateApp.packTemplate")(function* (start
|
|
|
48
48
|
const manifest = entries.find((entry) => entry.path === "package.json");
|
|
49
49
|
if (manifest !== undefined) {
|
|
50
50
|
const minimal = yield* Effect.try({
|
|
51
|
-
catch: (cause) => new CreateAppError({ message:
|
|
51
|
+
catch: (cause) => new CreateAppError({ message: "Failed to prepare minimal template file package.minimal.json" }, { cause }),
|
|
52
52
|
try: () => prepareManifest(Buffer.from(manifest.content, "base64").toString(), versions, true),
|
|
53
53
|
});
|
|
54
54
|
entries.push({ content: Buffer.from(minimal).toString("base64"), path: "package.minimal.json" });
|
package/src/template.ts
CHANGED
|
@@ -46,7 +46,7 @@ const Manifest = Schema.Struct({
|
|
|
46
46
|
type: Schema.String,
|
|
47
47
|
version: Schema.String,
|
|
48
48
|
});
|
|
49
|
-
const decodeManifest = Schema.decodeUnknownSync(Schema.fromJsonString(Manifest));
|
|
49
|
+
export const decodeManifest = Schema.decodeUnknownSync(Schema.fromJsonString(Manifest));
|
|
50
50
|
// Decoding does not keep input key order, so the generated manifest lists its fields in package.json order.
|
|
51
51
|
const manifestOrder = [
|
|
52
52
|
"name",
|
|
@@ -61,6 +61,10 @@ const manifestOrder = [
|
|
|
61
61
|
"engines",
|
|
62
62
|
] as const satisfies ReadonlyArray<keyof typeof Manifest.Type>;
|
|
63
63
|
|
|
64
|
+
export function manifestJson(manifest: typeof Manifest.Type) {
|
|
65
|
+
return `${JSON.stringify(Object.fromEntries(manifestOrder.map((key) => [key, manifest[key]])), null, "\t")}\n`;
|
|
66
|
+
}
|
|
67
|
+
|
|
64
68
|
export function registryDependencies(dependencies: Readonly<Record<string, string>>, versions: Readonly<Record<string, string>>) {
|
|
65
69
|
return Object.fromEntries(
|
|
66
70
|
Object.entries(dependencies).map(([name, version]) => {
|
|
@@ -88,7 +92,7 @@ export function prepareManifest(source: string, versions: Readonly<Record<string
|
|
|
88
92
|
devDependencies: registryDependencies(manifest.devDependencies, versions),
|
|
89
93
|
scripts: Object.fromEntries(Object.entries(scripts).map(([name, script]) => [name, script.replaceAll("--conditions=source ", "")])),
|
|
90
94
|
};
|
|
91
|
-
return
|
|
95
|
+
return manifestJson(prepared);
|
|
92
96
|
}
|
|
93
97
|
|
|
94
98
|
export function prepareFile(path: string, content: Buffer, versions: Readonly<Record<string, string>>) {
|
|
@@ -99,7 +103,7 @@ export function prepareFile(path: string, content: Buffer, versions: Readonly<Re
|
|
|
99
103
|
return Buffer.from(prepareManifest(content.toString(), versions));
|
|
100
104
|
}
|
|
101
105
|
if (["tsconfig.json", "vite.config.ts", "vitest.config.ts", "src/server/dev.ts"].includes(path)) {
|
|
102
|
-
return Buffer.from(content.toString().replaceAll('
|
|
106
|
+
return Buffer.from(content.toString().replaceAll('["source"]', "[]"));
|
|
103
107
|
}
|
|
104
108
|
return content;
|
|
105
109
|
}
|