create-kofi-stack 1.2.8 → 1.2.10
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/dist/index.js +48 -18
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
import { Command } from "commander";
|
|
5
5
|
import pc4 from "picocolors";
|
|
6
6
|
import gradient from "gradient-string";
|
|
7
|
+
import { createRequire } from "module";
|
|
7
8
|
|
|
8
9
|
// src/prompts/index.ts
|
|
9
10
|
import * as p5 from "@clack/prompts";
|
|
@@ -866,7 +867,7 @@ async function generatePackageJson(config, appDir) {
|
|
|
866
867
|
if (config.integrations.monitoring === "sentry") {
|
|
867
868
|
dependencies["@sentry/nextjs"] = "^10.0.0";
|
|
868
869
|
}
|
|
869
|
-
const
|
|
870
|
+
const packageJson2 = {
|
|
870
871
|
name: isMonorepo ? "@repo/web" : config.name,
|
|
871
872
|
version: "0.1.0",
|
|
872
873
|
private: true,
|
|
@@ -887,7 +888,7 @@ async function generatePackageJson(config, appDir) {
|
|
|
887
888
|
dependencies,
|
|
888
889
|
devDependencies
|
|
889
890
|
};
|
|
890
|
-
await writeJSON(path3.join(appDir, "package.json"),
|
|
891
|
+
await writeJSON(path3.join(appDir, "package.json"), packageJson2);
|
|
891
892
|
}
|
|
892
893
|
async function generateNextConfig(config, appDir) {
|
|
893
894
|
const isMonorepo = config.structure === "monorepo";
|
|
@@ -1983,7 +1984,7 @@ export const updateUserProfile = mutation({
|
|
|
1983
1984
|
await writeFile(path6.join(convexDir, "users.ts"), content);
|
|
1984
1985
|
}
|
|
1985
1986
|
async function generateConvexPackageJson(convexDir) {
|
|
1986
|
-
const
|
|
1987
|
+
const packageJson2 = {
|
|
1987
1988
|
name: "@repo/backend",
|
|
1988
1989
|
version: "0.1.0",
|
|
1989
1990
|
private: true,
|
|
@@ -1998,7 +1999,7 @@ async function generateConvexPackageJson(convexDir) {
|
|
|
1998
1999
|
}
|
|
1999
2000
|
};
|
|
2000
2001
|
const backendDir = path6.dirname(convexDir);
|
|
2001
|
-
await writeJSON(path6.join(backendDir, "package.json"),
|
|
2002
|
+
await writeJSON(path6.join(backendDir, "package.json"), packageJson2);
|
|
2002
2003
|
}
|
|
2003
2004
|
async function generateConvexTsConfig(convexDir) {
|
|
2004
2005
|
const tsConfig = {
|
|
@@ -2946,7 +2947,7 @@ async function generateTurborepo(config, targetDir) {
|
|
|
2946
2947
|
await generateSharedConfigs(targetDir);
|
|
2947
2948
|
}
|
|
2948
2949
|
async function generateRootPackageJson(config, targetDir) {
|
|
2949
|
-
const
|
|
2950
|
+
const packageJson2 = {
|
|
2950
2951
|
name: config.name,
|
|
2951
2952
|
version: "0.1.0",
|
|
2952
2953
|
private: true,
|
|
@@ -2973,7 +2974,7 @@ async function generateRootPackageJson(config, targetDir) {
|
|
|
2973
2974
|
"*.{json,md}": ["biome format --write"]
|
|
2974
2975
|
}
|
|
2975
2976
|
};
|
|
2976
|
-
await writeJSON(path14.join(targetDir, "package.json"),
|
|
2977
|
+
await writeJSON(path14.join(targetDir, "package.json"), packageJson2);
|
|
2977
2978
|
}
|
|
2978
2979
|
async function generateTurboJson(targetDir) {
|
|
2979
2980
|
const turboJson = {
|
|
@@ -3094,6 +3095,10 @@ async function generateSharedConfigs(targetDir) {
|
|
|
3094
3095
|
name: "@repo/config-typescript",
|
|
3095
3096
|
version: "0.1.0",
|
|
3096
3097
|
private: true,
|
|
3098
|
+
exports: {
|
|
3099
|
+
"./base.json": "./base.json",
|
|
3100
|
+
"./nextjs.json": "./nextjs.json"
|
|
3101
|
+
},
|
|
3097
3102
|
files: ["base.json", "nextjs.json"]
|
|
3098
3103
|
};
|
|
3099
3104
|
await writeJSON(
|
|
@@ -3132,7 +3137,7 @@ async function generateUIPackage(config, targetDir) {
|
|
|
3132
3137
|
const uiDir = path14.join(targetDir, "packages/ui");
|
|
3133
3138
|
await ensureDir(path14.join(uiDir, "src/components/ui"));
|
|
3134
3139
|
await ensureDir(path14.join(uiDir, "src/lib"));
|
|
3135
|
-
const
|
|
3140
|
+
const packageJson2 = {
|
|
3136
3141
|
name: "@repo/ui",
|
|
3137
3142
|
version: "0.1.0",
|
|
3138
3143
|
private: true,
|
|
@@ -3167,7 +3172,7 @@ async function generateUIPackage(config, targetDir) {
|
|
|
3167
3172
|
react: "^19.0.0"
|
|
3168
3173
|
}
|
|
3169
3174
|
};
|
|
3170
|
-
await writeJSON(path14.join(uiDir, "package.json"),
|
|
3175
|
+
await writeJSON(path14.join(uiDir, "package.json"), packageJson2);
|
|
3171
3176
|
const tsConfig = {
|
|
3172
3177
|
extends: "@repo/config-typescript/base.json",
|
|
3173
3178
|
compilerOptions: {
|
|
@@ -3237,7 +3242,7 @@ async function generatePayload(config, marketingDir) {
|
|
|
3237
3242
|
await generatePayloadEnv(marketingDir);
|
|
3238
3243
|
}
|
|
3239
3244
|
async function generatePayloadPackageJson(marketingDir) {
|
|
3240
|
-
const
|
|
3245
|
+
const packageJson2 = {
|
|
3241
3246
|
name: "@repo/marketing",
|
|
3242
3247
|
version: "0.1.0",
|
|
3243
3248
|
private: true,
|
|
@@ -3275,7 +3280,7 @@ async function generatePayloadPackageJson(marketingDir) {
|
|
|
3275
3280
|
tsx: "^4.0.0"
|
|
3276
3281
|
}
|
|
3277
3282
|
};
|
|
3278
|
-
await writeJSON(path15.join(marketingDir, "package.json"),
|
|
3283
|
+
await writeJSON(path15.join(marketingDir, "package.json"), packageJson2);
|
|
3279
3284
|
}
|
|
3280
3285
|
async function generatePayloadConfig(config, marketingDir) {
|
|
3281
3286
|
const content = `import path from 'path'
|
|
@@ -4217,7 +4222,7 @@ async function generateFumadocs(config, docsDir) {
|
|
|
4217
4222
|
await generateFumadocsContent(config, docsDir);
|
|
4218
4223
|
}
|
|
4219
4224
|
async function generateFumadocsPackageJson(docsDir) {
|
|
4220
|
-
const
|
|
4225
|
+
const packageJson2 = {
|
|
4221
4226
|
name: "@repo/docs",
|
|
4222
4227
|
version: "0.1.0",
|
|
4223
4228
|
private: true,
|
|
@@ -4250,7 +4255,7 @@ async function generateFumadocsPackageJson(docsDir) {
|
|
|
4250
4255
|
typescript: "^5.0.0"
|
|
4251
4256
|
}
|
|
4252
4257
|
};
|
|
4253
|
-
await writeJSON(path16.join(docsDir, "package.json"),
|
|
4258
|
+
await writeJSON(path16.join(docsDir, "package.json"), packageJson2);
|
|
4254
4259
|
}
|
|
4255
4260
|
async function generateFumadocsNextConfig(docsDir) {
|
|
4256
4261
|
const content = `import { createMDX } from 'fumadocs-mdx/next'
|
|
@@ -4299,7 +4304,7 @@ export const source = loader({
|
|
|
4299
4304
|
await writeFile(path16.join(docsDir, "src/lib/source.ts"), content);
|
|
4300
4305
|
}
|
|
4301
4306
|
async function generateFumadocsAppFiles(config, docsDir) {
|
|
4302
|
-
const layoutContent = `import { RootProvider } from 'fumadocs-ui/
|
|
4307
|
+
const layoutContent = `import { RootProvider } from 'fumadocs-ui/providers'
|
|
4303
4308
|
import { Inter } from 'next/font/google'
|
|
4304
4309
|
import type { Metadata } from 'next'
|
|
4305
4310
|
import type { ReactNode } from 'react'
|
|
@@ -4795,7 +4800,7 @@ async function generateDesignSystemApp(config, targetDir) {
|
|
|
4795
4800
|
await generateUtils(appDir);
|
|
4796
4801
|
}
|
|
4797
4802
|
async function generatePackageJson2(config, appDir) {
|
|
4798
|
-
const
|
|
4803
|
+
const packageJson2 = {
|
|
4799
4804
|
name: "@repo/design-system",
|
|
4800
4805
|
version: "0.1.0",
|
|
4801
4806
|
private: true,
|
|
@@ -4830,7 +4835,7 @@ async function generatePackageJson2(config, appDir) {
|
|
|
4830
4835
|
typescript: "^5.0.0"
|
|
4831
4836
|
}
|
|
4832
4837
|
};
|
|
4833
|
-
await writeJSON(path17.join(appDir, "package.json"),
|
|
4838
|
+
await writeJSON(path17.join(appDir, "package.json"), packageJson2);
|
|
4834
4839
|
}
|
|
4835
4840
|
async function generateTsConfig2(appDir) {
|
|
4836
4841
|
const tsConfig = {
|
|
@@ -7038,7 +7043,7 @@ async function generateNextjsMarketing(config, marketingDir) {
|
|
|
7038
7043
|
await ensureDir(path19.join(marketingDir, "src/app"));
|
|
7039
7044
|
await ensureDir(path19.join(marketingDir, "src/components"));
|
|
7040
7045
|
await ensureDir(path19.join(marketingDir, "public"));
|
|
7041
|
-
const
|
|
7046
|
+
const packageJson2 = {
|
|
7042
7047
|
name: "@repo/marketing",
|
|
7043
7048
|
version: "0.1.0",
|
|
7044
7049
|
private: true,
|
|
@@ -7069,7 +7074,7 @@ async function generateNextjsMarketing(config, marketingDir) {
|
|
|
7069
7074
|
};
|
|
7070
7075
|
await writeFile(
|
|
7071
7076
|
path19.join(marketingDir, "package.json"),
|
|
7072
|
-
JSON.stringify(
|
|
7077
|
+
JSON.stringify(packageJson2, null, 2)
|
|
7073
7078
|
);
|
|
7074
7079
|
const homePageContent = `export default function HomePage() {
|
|
7075
7080
|
return (
|
|
@@ -7209,6 +7214,8 @@ function displaySuccessMessage(config) {
|
|
|
7209
7214
|
}
|
|
7210
7215
|
|
|
7211
7216
|
// src/index.ts
|
|
7217
|
+
var require2 = createRequire(import.meta.url);
|
|
7218
|
+
var packageJson = require2("../package.json");
|
|
7212
7219
|
var BANNER = `
|
|
7213
7220
|
\u2588\u2588\u2557 \u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2557 \u2588\u2588\u2557
|
|
7214
7221
|
\u2588\u2588\u2551 \u2588\u2588\u2554\u255D\u2588\u2588\u2554\u2550\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u2588\u2588\u2551 \u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u255A\u2550\u2550\u2588\u2588\u2554\u2550\u2550\u255D\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u2588\u2588\u2551 \u2588\u2588\u2554\u255D
|
|
@@ -7227,7 +7234,7 @@ function printBanner() {
|
|
|
7227
7234
|
var program = new Command();
|
|
7228
7235
|
program.name("create-kofi-stack").description(
|
|
7229
7236
|
"Scaffold opinionated full-stack projects with Next.js, Convex, Better-Auth, and more"
|
|
7230
|
-
).version(
|
|
7237
|
+
).version(packageJson.version).argument("[project-name]", "Name of the project").option("--monorepo", "Use monorepo structure with Turborepo").option("--single", "Use single app structure").option(
|
|
7231
7238
|
"--marketing <type>",
|
|
7232
7239
|
"Marketing site type: payload, nextjs, none"
|
|
7233
7240
|
).option("--docs", "Include documentation site (Fumadocs)").option("--no-docs", "Exclude documentation site").option(
|
|
@@ -7262,4 +7269,27 @@ program.name("create-kofi-stack").description(
|
|
|
7262
7269
|
process.exit(1);
|
|
7263
7270
|
}
|
|
7264
7271
|
});
|
|
7272
|
+
program.command("update").description("Update create-kofi-stack to the latest version").action(async () => {
|
|
7273
|
+
const { execa: execa3 } = await import("execa");
|
|
7274
|
+
console.log(pc4.cyan("Checking for updates...\n"));
|
|
7275
|
+
try {
|
|
7276
|
+
const { stdout: latestVersion } = await execa3("npm", ["view", "create-kofi-stack", "version"]);
|
|
7277
|
+
const currentVersion = packageJson.version;
|
|
7278
|
+
if (latestVersion.trim() === currentVersion) {
|
|
7279
|
+
console.log(pc4.green(`\u2713 You're already on the latest version (${currentVersion})`));
|
|
7280
|
+
return;
|
|
7281
|
+
}
|
|
7282
|
+
console.log(pc4.dim(`Current version: ${currentVersion}`));
|
|
7283
|
+
console.log(pc4.dim(`Latest version: ${latestVersion.trim()}
|
|
7284
|
+
`));
|
|
7285
|
+
console.log(pc4.cyan("Updating...\n"));
|
|
7286
|
+
await execa3("npm", ["install", "-g", "create-kofi-stack@latest"], { stdio: "inherit" });
|
|
7287
|
+
console.log(pc4.green(`
|
|
7288
|
+
\u2713 Successfully updated to v${latestVersion.trim()}`));
|
|
7289
|
+
} catch (error) {
|
|
7290
|
+
console.error(pc4.red("Failed to update. Try running manually:"));
|
|
7291
|
+
console.log(pc4.dim(" npm install -g create-kofi-stack@latest"));
|
|
7292
|
+
process.exit(1);
|
|
7293
|
+
}
|
|
7294
|
+
});
|
|
7265
7295
|
program.parse();
|