@shivaedev/create-app 0.13.1 → 0.15.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 +58 -0
- package/README.md +2 -0
- package/dist/cli.js +70 -70
- package/dist/createApp.d.ts +1 -0
- package/dist/createApp.d.ts.map +1 -1
- package/dist/createApp.js +3 -2
- package/dist/createApp.js.map +1 -1
- package/dist/generation.d.ts +2 -0
- package/dist/generation.d.ts.map +1 -1
- package/dist/generation.js +1 -1
- package/dist/generation.js.map +1 -1
- package/dist/template.d.ts +1 -0
- package/dist/template.d.ts.map +1 -1
- package/dist/template.js +17 -0
- package/dist/template.js.map +1 -1
- package/dist/updateApp.d.ts.map +1 -1
- package/dist/updateApp.js +2 -1
- package/dist/updateApp.js.map +1 -1
- package/package.json +4 -4
- package/src/cli.ts +7 -3
- package/src/createApp.ts +4 -3
- package/src/generation.ts +1 -1
- package/src/template.ts +19 -0
- package/src/updateApp.ts +8 -1
- package/template.json +1 -1
package/dist/createApp.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ import { ChildProcessSpawner } from "effect/process";
|
|
|
3
3
|
import { CreateAppError } from "./CreateAppError.ts";
|
|
4
4
|
export declare const createApp: (folder: string, templatePath: string, options: {
|
|
5
5
|
readonly git: boolean;
|
|
6
|
+
readonly minimal: boolean;
|
|
6
7
|
readonly version: string;
|
|
7
8
|
}) => Effect.Effect<undefined, CreateAppError | import("effect/PlatformError").PlatformError | import("effect/Schema").SchemaError, ChildProcessSpawner.ChildProcessSpawner | FileSystem.FileSystem>;
|
|
8
9
|
//# sourceMappingURL=createApp.d.ts.map
|
package/dist/createApp.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createApp.d.ts","sourceRoot":"","sources":["../src/createApp.ts"],"names":[],"mappings":"AAEA,OAAO,EAAW,MAAM,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACrD,OAAO,EAAgB,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAEnE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"createApp.d.ts","sourceRoot":"","sources":["../src/createApp.ts"],"names":[],"mappings":"AAEA,OAAO,EAAW,MAAM,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACrD,OAAO,EAAgB,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAEnE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAKrD,eAAO,MAAM,SAAS;kBAGI,OAAO;sBAAoB,OAAO;sBAAoB,MAAM;oMAuCpF,CAAC"}
|
package/dist/createApp.js
CHANGED
|
@@ -6,6 +6,7 @@ import { databaseName } from "./appFiles.js";
|
|
|
6
6
|
import { CreateAppError } from "./CreateAppError.js";
|
|
7
7
|
import { readTemplate, renderTemplate, writeGeneration } from "./generation.js";
|
|
8
8
|
import { commitGit, initializeGit } from "./initializeGit.js";
|
|
9
|
+
import { appTemplate } from "./template.js";
|
|
9
10
|
export const createApp = Effect.fn("CreateApp.createApp")(function* (folder, templatePath, options) {
|
|
10
11
|
const fs = yield* FileSystem.FileSystem;
|
|
11
12
|
const target = resolve(folder);
|
|
@@ -16,10 +17,10 @@ export const createApp = Effect.fn("CreateApp.createApp")(function* (folder, tem
|
|
|
16
17
|
if ((yield* fs.exists(target)) && ((yield* fs.stat(target)).type !== "Directory" || (yield* fs.readDirectory(target)).length > 0)) {
|
|
17
18
|
return yield* new CreateAppError({ message: `Refusing to write into ${folder}: the destination must be an empty folder.` });
|
|
18
19
|
}
|
|
19
|
-
const template = yield* readTemplate(templatePath);
|
|
20
|
+
const template = appTemplate(yield* readTemplate(templatePath), options.minimal);
|
|
20
21
|
yield* fs.makeDirectory(target, { recursive: true });
|
|
21
22
|
yield* renderTemplate(target, template, name);
|
|
22
|
-
yield* writeGeneration(target, { name, version: options.version });
|
|
23
|
+
yield* writeGeneration(target, { ...(options.minimal ? { minimal: true } : {}), name, version: options.version });
|
|
23
24
|
yield* fs.symlink("AGENTS.md", join(target, "CLAUDE.md"));
|
|
24
25
|
const database = databaseName(name);
|
|
25
26
|
yield* fs.writeFileString(join(target, ".env.local"), `DATABASE_URL=postgresql://postgres:postgres@127.0.0.1:55432/${database}_dev\nTEST_DATABASE_URL=postgresql://postgres:postgres@127.0.0.1:55432/${database}_test\nBETTER_AUTH_SECRET=${randomBytes(32).toString("base64url")}\n`, { flag: "wx", mode: 0o600 });
|
package/dist/createApp.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createApp.js","sourceRoot":"","sources":["../src/createApp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAChF,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"createApp.js","sourceRoot":"","sources":["../src/createApp.ts"],"names":[],"mappings":"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"}
|
package/dist/generation.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Effect, FileSystem, Schema } from "effect";
|
|
2
2
|
import { CreateAppError } from "./CreateAppError.ts";
|
|
3
3
|
export declare const Generation: Schema.Struct<{
|
|
4
|
+
readonly minimal: Schema.optional<Schema.Boolean>;
|
|
4
5
|
readonly name: Schema.String;
|
|
5
6
|
readonly version: Schema.String;
|
|
6
7
|
}>;
|
|
@@ -11,6 +12,7 @@ export declare const readTemplate: (path: string) => Effect.Effect<readonly {
|
|
|
11
12
|
readonly path: string;
|
|
12
13
|
}[], import("effect/PlatformError").PlatformError | Schema.SchemaError, FileSystem.FileSystem>;
|
|
13
14
|
export declare const writeGeneration: (target: string, generation: {
|
|
15
|
+
readonly minimal?: boolean | undefined;
|
|
14
16
|
readonly name: string;
|
|
15
17
|
readonly version: string;
|
|
16
18
|
}) => Effect.Effect<void, import("effect/PlatformError").PlatformError, FileSystem.FileSystem>;
|
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,qBAAqB,CAAC;AAGrD,eAAO,MAAM,UAAU
|
|
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,qBAAqB,CAAC;AAGrD,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;;;+HAYzB,CAAC"}
|
package/dist/generation.js
CHANGED
|
@@ -4,7 +4,7 @@ import { Effect, FileSystem, Schema } from "effect";
|
|
|
4
4
|
import { appFile } from "./appFiles.js";
|
|
5
5
|
import { CreateAppError } from "./CreateAppError.js";
|
|
6
6
|
import { Template } from "./template.js";
|
|
7
|
-
export const Generation = Schema.Struct({ name: Schema.String, version: Schema.String });
|
|
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) {
|
|
10
10
|
const fs = yield* FileSystem.FileSystem;
|
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,eAAe,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"generation.js","sourceRoot":"","sources":["../src/generation.ts"],"names":[],"mappings":"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"}
|
package/dist/template.d.ts
CHANGED
|
@@ -10,6 +10,7 @@ export declare const decodeTemplate: (input: unknown, options?: import("effect/S
|
|
|
10
10
|
readonly content: string;
|
|
11
11
|
readonly path: string;
|
|
12
12
|
}[];
|
|
13
|
+
export declare function appTemplate(template: Template, minimal?: boolean): Template;
|
|
13
14
|
export declare function registryDependencies(dependencies: Readonly<Record<string, string>>, versions: Readonly<Record<string, string>>): {
|
|
14
15
|
[k: string]: string;
|
|
15
16
|
};
|
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;
|
|
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,CAgBzE;AA6BD,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,UAUzF;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
|
@@ -4,6 +4,23 @@ import { CreateAppError } from "#CreateAppError.ts";
|
|
|
4
4
|
export const Versions = Schema.Record(Schema.String, Schema.String);
|
|
5
5
|
export const Template = Schema.Array(Schema.Struct({ content: Schema.String, path: Schema.String }));
|
|
6
6
|
export const decodeTemplate = Schema.decodeUnknownSync(Schema.fromJsonString(Template));
|
|
7
|
+
export function appTemplate(template, minimal = false) {
|
|
8
|
+
if (!minimal) {
|
|
9
|
+
return template;
|
|
10
|
+
}
|
|
11
|
+
return template
|
|
12
|
+
.filter((entry) => !entry.path.startsWith("src/modules/notes/"))
|
|
13
|
+
.map((entry) => {
|
|
14
|
+
if (!["src/server/modules.ts", "src/server/workerModules.ts", "src/server/migrations.ts", "src/client/modules.ts"].includes(entry.path)) {
|
|
15
|
+
return entry;
|
|
16
|
+
}
|
|
17
|
+
const source = Buffer.from(entry.content, "base64")
|
|
18
|
+
.toString()
|
|
19
|
+
.replace(/^import .* from "#modules\/notes\/.*";\n/gmu, "")
|
|
20
|
+
.replace(/,?\s*\b(?:notesRegistration|notesWorker|notesMigrations)\b/gu, "");
|
|
21
|
+
return { ...entry, content: Buffer.from(source).toString("base64") };
|
|
22
|
+
});
|
|
23
|
+
}
|
|
7
24
|
const Manifest = Schema.Struct({
|
|
8
25
|
dependencies: Versions,
|
|
9
26
|
devDependencies: Versions,
|
package/dist/template.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template.js","sourceRoot":"","sources":["../src/template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;AACpE,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AAErG,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"template.js","sourceRoot":"","sources":["../src/template.ts"],"names":[],"mappings":"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"}
|
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,qBAAqB,CAAC;
|
|
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,qBAAqB,CAAC;AAOrD,eAAO,MAAM,SAAS,mQAqCpB,CAAC"}
|
package/dist/updateApp.js
CHANGED
|
@@ -5,6 +5,7 @@ import { GENERATION_FILE, Generation, readTemplate, writeGeneration } from "./ge
|
|
|
5
5
|
import { historicalTemplate } from "./historicalTemplate.js";
|
|
6
6
|
import { checkedProcess, runProcess } from "./runProcess.js";
|
|
7
7
|
import { starterPatch } from "./starterPatch.js";
|
|
8
|
+
import { appTemplate } from "./template.js";
|
|
8
9
|
export const updateApp = Effect.fn("CreateApp.updateApp")(function* (folder, templatePath, version) {
|
|
9
10
|
return yield* Effect.scoped(Effect.gen(function* () {
|
|
10
11
|
const fs = yield* FileSystem.FileSystem;
|
|
@@ -17,7 +18,7 @@ export const updateApp = Effect.fn("CreateApp.updateApp")(function* (folder, tem
|
|
|
17
18
|
const directory = yield* fs.makeTempDirectoryScoped({ prefix: "create-app-update-" });
|
|
18
19
|
const current = yield* readTemplate(templatePath);
|
|
19
20
|
const previous = generation.version === version ? current : yield* historicalTemplate(directory, generation.version);
|
|
20
|
-
const patch = yield* starterPatch(target, directory, generation.name, previous, current);
|
|
21
|
+
const patch = yield* starterPatch(target, directory, generation.name, appTemplate(previous, generation.minimal), appTemplate(current, generation.minimal));
|
|
21
22
|
if (!patch.empty) {
|
|
22
23
|
const result = yield* runProcess(target, "git", ["apply", "--3way", patch.path]);
|
|
23
24
|
if (result.code !== 0) {
|
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;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC7F,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"updateApp.js","sourceRoot":"","sources":["../src/updateApp.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.15.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": {
|
|
@@ -58,13 +58,13 @@
|
|
|
58
58
|
"README.md"
|
|
59
59
|
],
|
|
60
60
|
"dependencies": {
|
|
61
|
-
"@shivaedev/effect-sql": "0.
|
|
61
|
+
"@shivaedev/effect-sql": "0.19.0"
|
|
62
62
|
},
|
|
63
63
|
"devDependencies": {
|
|
64
64
|
"@effect/platform-node": "4.0.5",
|
|
65
65
|
"@effect/platform-node-shared": "4.0.5",
|
|
66
|
-
"@shivaedev/quality": "0.
|
|
67
|
-
"@shivaedev/test-story": "0.
|
|
66
|
+
"@shivaedev/quality": "0.38.0",
|
|
67
|
+
"@shivaedev/test-story": "0.19.0",
|
|
68
68
|
"@types/node": "24.19.2",
|
|
69
69
|
"effect": "4.0.5",
|
|
70
70
|
"esbuild": "0.28.2",
|
package/src/cli.ts
CHANGED
|
@@ -16,11 +16,15 @@ const program = Effect.gen(function* () {
|
|
|
16
16
|
const update = Command.make("update", {}, () => updateApp(".", templatePath, version));
|
|
17
17
|
const cli = Command.make(
|
|
18
18
|
"create-app",
|
|
19
|
-
{
|
|
20
|
-
|
|
19
|
+
{
|
|
20
|
+
folder: Argument.String("folder").pipe(Argument.optional),
|
|
21
|
+
git: Flag.Boolean("git").pipe(Flag.withDefault(true)),
|
|
22
|
+
minimal: Flag.Boolean("minimal").pipe(Flag.withDefault(false), Flag.withDescription("Create the starter without the notes example module.")),
|
|
23
|
+
},
|
|
24
|
+
({ folder, git, minimal }) =>
|
|
21
25
|
Option.match(folder, {
|
|
22
26
|
onNone: () => Effect.fail(new CreateAppError({ message: "Provide an app folder or use create-app update." })),
|
|
23
|
-
onSome: (destination) => createApp(destination, templatePath, { git, version }),
|
|
27
|
+
onSome: (destination) => createApp(destination, templatePath, { git, minimal, version }),
|
|
24
28
|
}),
|
|
25
29
|
).pipe(Command.withSubcommands([update]), Command.withDescription("Create and install a Platform application from the maintained starter."));
|
|
26
30
|
yield* Command.run(cli, { version });
|
package/src/createApp.ts
CHANGED
|
@@ -6,11 +6,12 @@ import { databaseName } from "./appFiles.ts";
|
|
|
6
6
|
import { CreateAppError } from "./CreateAppError.ts";
|
|
7
7
|
import { readTemplate, renderTemplate, writeGeneration } from "./generation.ts";
|
|
8
8
|
import { commitGit, initializeGit } from "./initializeGit.ts";
|
|
9
|
+
import { appTemplate } from "./template.ts";
|
|
9
10
|
|
|
10
11
|
export const createApp = Effect.fn("CreateApp.createApp")(function* (
|
|
11
12
|
folder: string,
|
|
12
13
|
templatePath: string,
|
|
13
|
-
options: { readonly git: boolean; readonly version: string },
|
|
14
|
+
options: { readonly git: boolean; readonly minimal: boolean; readonly version: string },
|
|
14
15
|
) {
|
|
15
16
|
const fs = yield* FileSystem.FileSystem;
|
|
16
17
|
const target = resolve(folder);
|
|
@@ -21,10 +22,10 @@ export const createApp = Effect.fn("CreateApp.createApp")(function* (
|
|
|
21
22
|
if ((yield* fs.exists(target)) && ((yield* fs.stat(target)).type !== "Directory" || (yield* fs.readDirectory(target)).length > 0)) {
|
|
22
23
|
return yield* new CreateAppError({ message: `Refusing to write into ${folder}: the destination must be an empty folder.` });
|
|
23
24
|
}
|
|
24
|
-
const template = yield* readTemplate(templatePath);
|
|
25
|
+
const template = appTemplate(yield* readTemplate(templatePath), options.minimal);
|
|
25
26
|
yield* fs.makeDirectory(target, { recursive: true });
|
|
26
27
|
yield* renderTemplate(target, template, name);
|
|
27
|
-
yield* writeGeneration(target, { name, version: options.version });
|
|
28
|
+
yield* writeGeneration(target, { ...(options.minimal ? { minimal: true } : {}), name, version: options.version });
|
|
28
29
|
yield* fs.symlink("AGENTS.md", join(target, "CLAUDE.md"));
|
|
29
30
|
const database = databaseName(name);
|
|
30
31
|
yield* fs.writeFileString(
|
package/src/generation.ts
CHANGED
|
@@ -5,7 +5,7 @@ import { appFile } from "./appFiles.ts";
|
|
|
5
5
|
import { CreateAppError } from "./CreateAppError.ts";
|
|
6
6
|
import { Template } from "./template.ts";
|
|
7
7
|
|
|
8
|
-
export const Generation = Schema.Struct({ name: Schema.String, version: Schema.String });
|
|
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;
|
|
10
10
|
export const GENERATION_FILE = ".create-app.json";
|
|
11
11
|
|
package/src/template.ts
CHANGED
|
@@ -6,6 +6,25 @@ export const Versions = Schema.Record(Schema.String, Schema.String);
|
|
|
6
6
|
export const Template = Schema.Array(Schema.Struct({ content: Schema.String, path: Schema.String }));
|
|
7
7
|
export type Template = typeof Template.Type;
|
|
8
8
|
export const decodeTemplate = Schema.decodeUnknownSync(Schema.fromJsonString(Template));
|
|
9
|
+
|
|
10
|
+
export function appTemplate(template: Template, minimal = false): Template {
|
|
11
|
+
if (!minimal) {
|
|
12
|
+
return template;
|
|
13
|
+
}
|
|
14
|
+
return template
|
|
15
|
+
.filter((entry) => !entry.path.startsWith("src/modules/notes/"))
|
|
16
|
+
.map((entry) => {
|
|
17
|
+
if (!["src/server/modules.ts", "src/server/workerModules.ts", "src/server/migrations.ts", "src/client/modules.ts"].includes(entry.path)) {
|
|
18
|
+
return entry;
|
|
19
|
+
}
|
|
20
|
+
const source = Buffer.from(entry.content, "base64")
|
|
21
|
+
.toString()
|
|
22
|
+
.replace(/^import .* from "#modules\/notes\/.*";\n/gmu, "")
|
|
23
|
+
.replace(/,?\s*\b(?:notesRegistration|notesWorker|notesMigrations)\b/gu, "");
|
|
24
|
+
return { ...entry, content: Buffer.from(source).toString("base64") };
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
|
|
9
28
|
const Manifest = Schema.Struct({
|
|
10
29
|
dependencies: Versions,
|
|
11
30
|
devDependencies: Versions,
|
package/src/updateApp.ts
CHANGED
|
@@ -5,6 +5,7 @@ import { GENERATION_FILE, Generation, readTemplate, writeGeneration } from "./ge
|
|
|
5
5
|
import { historicalTemplate } from "./historicalTemplate.ts";
|
|
6
6
|
import { checkedProcess, runProcess } from "./runProcess.ts";
|
|
7
7
|
import { starterPatch } from "./starterPatch.ts";
|
|
8
|
+
import { appTemplate } from "./template.ts";
|
|
8
9
|
|
|
9
10
|
export const updateApp = Effect.fn("CreateApp.updateApp")(function* (folder: string, templatePath: string, version: string) {
|
|
10
11
|
return yield* Effect.scoped(
|
|
@@ -21,7 +22,13 @@ export const updateApp = Effect.fn("CreateApp.updateApp")(function* (folder: str
|
|
|
21
22
|
const directory = yield* fs.makeTempDirectoryScoped({ prefix: "create-app-update-" });
|
|
22
23
|
const current = yield* readTemplate(templatePath);
|
|
23
24
|
const previous = generation.version === version ? current : yield* historicalTemplate(directory, generation.version);
|
|
24
|
-
const patch = yield* starterPatch(
|
|
25
|
+
const patch = yield* starterPatch(
|
|
26
|
+
target,
|
|
27
|
+
directory,
|
|
28
|
+
generation.name,
|
|
29
|
+
appTemplate(previous, generation.minimal),
|
|
30
|
+
appTemplate(current, generation.minimal),
|
|
31
|
+
);
|
|
25
32
|
if (!patch.empty) {
|
|
26
33
|
const result = yield* runProcess(target, "git", ["apply", "--3way", patch.path]);
|
|
27
34
|
if (result.code !== 0) {
|