@dartix-software-solutions/create-fullstack-app 2.0.8 → 2.0.12
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/api-client/axios/meta.js +1 -1
- package/dist/api-client/fetch-wrapper/meta.js +1 -1
- package/dist/api-client/trpc-client/meta.js +1 -1
- package/dist/api-style/graphql-server/meta.js +1 -1
- package/dist/api-style/trpc-server/meta.js +1 -1
- package/dist/auth/clerk/meta.js +1 -1
- package/dist/auth/jwt-custom/meta.js +1 -1
- package/dist/auth/lucia/meta.js +1 -1
- package/dist/auth/next-auth/meta.js +3 -3
- package/dist/backend-extras/bullmq/meta.js +1 -1
- package/dist/backend-extras/compression/meta.js +1 -1
- package/dist/backend-extras/cors-config/meta.js +1 -1
- package/dist/backend-extras/cron/meta.js +1 -1
- package/dist/backend-extras/email/meta.js +1 -1
- package/dist/backend-extras/firebase-push/meta.js +1 -1
- package/dist/backend-extras/helmet/meta.js +1 -1
- package/dist/backend-extras/multer/meta.js +1 -1
- package/dist/backend-extras/rate-limit/meta.js +1 -1
- package/dist/backend-extras/s3-upload/meta.js +1 -1
- package/dist/backend-extras/swagger/meta.js +1 -1
- package/dist/backend-extras/websocket/meta.js +1 -1
- package/dist/bin/create-fullstack-app.js +1 -1
- package/dist/{chunk-UQMP4MDN.js → chunk-36CSXSDC.js} +91 -16
- package/dist/{chunk-FV43KAG3.js → chunk-ZTXPWYML.js} +4 -0
- package/dist/deployment/aws/meta.js +1 -1
- package/dist/deployment/eas-submit/meta.js +1 -1
- package/dist/deployment/flyio/meta.js +1 -1
- package/dist/deployment/railway/meta.js +1 -1
- package/dist/deployment/vercel/meta.js +1 -1
- package/dist/devops/docker/meta.js +1 -1
- package/dist/devops/eas-build/meta.js +1 -1
- package/dist/devops/fastlane/meta.js +1 -1
- package/dist/devops/github-actions/meta.js +1 -1
- package/dist/devops/gitlab-ci/meta.js +1 -1
- package/dist/devtools/commitlint/meta.js +1 -1
- package/dist/devtools/eslint/meta.js +1 -1
- package/dist/devtools/husky/meta.js +1 -1
- package/dist/devtools/lint-staged/meta.js +1 -1
- package/dist/devtools/prettier/meta.js +1 -1
- package/dist/forms/formik/meta.js +1 -1
- package/dist/forms/react-hook-form/meta.js +1 -1
- package/dist/frontend-extras/async-storage/meta.js +1 -1
- package/dist/frontend-extras/date-fns/meta.js +1 -1
- package/dist/frontend-extras/expo-camera/meta.js +1 -1
- package/dist/frontend-extras/expo-haptics/meta.js +1 -1
- package/dist/frontend-extras/expo-image/meta.js +1 -1
- package/dist/frontend-extras/expo-location/meta.js +1 -1
- package/dist/frontend-extras/expo-secure-store/meta.js +1 -1
- package/dist/frontend-extras/i18next/meta.js +1 -1
- package/dist/frontend-extras/lottie-rn/meta.js +1 -1
- package/dist/frontend-extras/react-native-bottom-sheet/meta.js +1 -1
- package/dist/frontend-extras/react-native-gesture-handler/meta.js +1 -1
- package/dist/frontend-extras/react-native-maps/meta.js +1 -1
- package/dist/frontend-extras/react-native-mmkv/meta.js +1 -1
- package/dist/frontend-extras/react-native-push-notifications/meta.js +1 -1
- package/dist/frontend-extras/react-native-reanimated/meta.js +1 -1
- package/dist/frontend-extras/react-native-svg/meta.js +1 -1
- package/dist/frontend-extras/react-table/meta.js +1 -1
- package/dist/frontend-extras/recharts/meta.js +1 -1
- package/dist/frontends/web/next/file-map.js +6 -1
- package/dist/index.js +1 -1
- package/dist/logging/pino/meta.js +1 -1
- package/dist/logging/winston/meta.js +1 -1
- package/dist/mobile-navigation/expo-router/meta.js +1 -1
- package/dist/mobile-navigation/react-navigation/meta.js +1 -1
- package/dist/monitoring/datadog/meta.js +1 -1
- package/dist/monitoring/sentry/meta.js +1 -1
- package/dist/monitoring/sentry-react-native/meta.js +1 -1
- package/dist/orms/prisma/file-map.js +1 -1
- package/dist/state/mobx/meta.js +1 -1
- package/dist/state/redux-toolkit/meta.js +1 -1
- package/dist/state/tanstack-query/meta.js +1 -1
- package/dist/state/zustand/meta.js +1 -1
- package/dist/styling/mobile/nativewind/meta.js +1 -1
- package/dist/styling/mobile/rn-stylesheet/meta.js +1 -1
- package/dist/styling/mobile/styled-components-rn/meta.js +1 -1
- package/dist/styling/web/css-modules/meta.js +1 -1
- package/dist/styling/web/styled-components/meta.js +1 -1
- package/dist/styling/web/tailwind/meta.js +1 -1
- package/dist/testing/cypress/meta.js +1 -1
- package/dist/testing/detox/meta.js +1 -1
- package/dist/testing/jest/meta.js +1 -1
- package/dist/testing/maestro/meta.js +1 -1
- package/dist/testing/playwright/meta.js +1 -1
- package/dist/testing/supertest/meta.js +1 -1
- package/dist/testing/testing-library-react/meta.js +1 -1
- package/dist/testing/testing-library-react-native/meta.js +1 -1
- package/dist/testing/vitest/meta.js +1 -1
- package/dist/ui-library/ant-design/meta.js +1 -1
- package/dist/ui-library/mui/meta.js +1 -1
- package/dist/ui-library/shadcn/meta.js +1 -1
- package/package.json +1 -1
package/dist/auth/clerk/meta.js
CHANGED
package/dist/auth/lucia/meta.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
showWhenWebFrontend
|
|
3
|
-
} from "../../chunk-
|
|
3
|
+
} from "../../chunk-ZTXPWYML.js";
|
|
4
4
|
|
|
5
5
|
// src/plugins/auth/next-auth/meta.ts
|
|
6
6
|
var meta = {
|
|
@@ -12,8 +12,8 @@ var meta = {
|
|
|
12
12
|
deps: [{ name: "next-auth", version: "^5.0.0-beta.25" }],
|
|
13
13
|
devDeps: [],
|
|
14
14
|
envVars: [
|
|
15
|
-
{ key: "
|
|
16
|
-
{ key: "
|
|
15
|
+
{ key: "AUTH_SECRET", defaultValue: "change-me", comment: "Auth.js secret", target: "root" },
|
|
16
|
+
{ key: "AUTH_URL", defaultValue: "http://localhost:3000", comment: "Auth.js base URL", target: "root" }
|
|
17
17
|
],
|
|
18
18
|
scripts: [],
|
|
19
19
|
conflicts: ["jwt-custom", "clerk", "lucia"],
|
|
@@ -6,7 +6,10 @@ import path7 from "path";
|
|
|
6
6
|
import fs4 from "fs-extra";
|
|
7
7
|
|
|
8
8
|
// src/shared/constants.ts
|
|
9
|
-
|
|
9
|
+
import { createRequire } from "module";
|
|
10
|
+
var require2 = createRequire(import.meta.url);
|
|
11
|
+
var packageJson = require2("../package.json");
|
|
12
|
+
var VERSION = packageJson.version;
|
|
10
13
|
var CLI_NAME = "create-fullstack-app";
|
|
11
14
|
var TARGETS = {
|
|
12
15
|
FRONTEND: "frontend",
|
|
@@ -1931,7 +1934,7 @@ var SingleAppLayout = class {
|
|
|
1931
1934
|
}
|
|
1932
1935
|
case TARGETS.SHARED: {
|
|
1933
1936
|
if (isFullstack) {
|
|
1934
|
-
return joinPaths("shared", relativePath);
|
|
1937
|
+
return joinPaths("server", "src", "shared", relativePath);
|
|
1935
1938
|
}
|
|
1936
1939
|
return joinPaths("src", "shared", relativePath);
|
|
1937
1940
|
}
|
|
@@ -1951,7 +1954,6 @@ var SingleAppLayout = class {
|
|
|
1951
1954
|
dirs.push(`${feDir}/src`);
|
|
1952
1955
|
dirs.push("server");
|
|
1953
1956
|
dirs.push("server/src");
|
|
1954
|
-
dirs.push("shared");
|
|
1955
1957
|
} else if (hasFE) {
|
|
1956
1958
|
dirs.push("src");
|
|
1957
1959
|
dirs.push("public");
|
|
@@ -2035,7 +2037,6 @@ var SingleAppLayout = class {
|
|
|
2035
2037
|
lines.push("\u251C\u2500\u2500 server/");
|
|
2036
2038
|
lines.push("\u2502 \u251C\u2500\u2500 src/");
|
|
2037
2039
|
lines.push("\u2502 \u2514\u2500\u2500 package.json");
|
|
2038
|
-
lines.push("\u251C\u2500\u2500 shared/");
|
|
2039
2040
|
} else if (hasFE) {
|
|
2040
2041
|
lines.push("\u251C\u2500\u2500 src/");
|
|
2041
2042
|
lines.push("\u251C\u2500\u2500 public/");
|
|
@@ -2968,7 +2969,12 @@ function resolveDependencies(plugins, packageJsonTargets, context) {
|
|
|
2968
2969
|
}
|
|
2969
2970
|
return result;
|
|
2970
2971
|
}
|
|
2971
|
-
function resolveTargetForPlugin(plugin, packageJsonTargets,
|
|
2972
|
+
function resolveTargetForPlugin(plugin, packageJsonTargets, context) {
|
|
2973
|
+
const inferredTarget = inferTargetFromPluginOutputs(plugin, context);
|
|
2974
|
+
if (inferredTarget) {
|
|
2975
|
+
const inferredPackage = packageJsonTargets.find((t) => t.target === inferredTarget);
|
|
2976
|
+
if (inferredPackage) return inferredPackage.path;
|
|
2977
|
+
}
|
|
2972
2978
|
const categoryTarget = CATEGORY_TARGET_MAP[plugin.meta.category];
|
|
2973
2979
|
if (!categoryTarget) {
|
|
2974
2980
|
const rootTarget2 = packageJsonTargets.find((t) => t.target === TARGETS.ROOT);
|
|
@@ -2989,6 +2995,23 @@ function resolveTargetForPlugin(plugin, packageJsonTargets, _context) {
|
|
|
2989
2995
|
const rootTarget = packageJsonTargets.find((t) => t.target === TARGETS.ROOT);
|
|
2990
2996
|
return rootTarget?.path || packageJsonTargets[0]?.path || null;
|
|
2991
2997
|
}
|
|
2998
|
+
function inferTargetFromPluginOutputs(plugin, context) {
|
|
2999
|
+
const targets = /* @__PURE__ */ new Set();
|
|
3000
|
+
for (const entry of plugin.fileMap.files) {
|
|
3001
|
+
if (!entry.when || entry.when(context)) {
|
|
3002
|
+
targets.add(entry.target);
|
|
3003
|
+
}
|
|
3004
|
+
}
|
|
3005
|
+
for (const injection of plugin.fileMap.injections) {
|
|
3006
|
+
if (!injection.when || injection.when(context)) {
|
|
3007
|
+
targets.add(injection.target);
|
|
3008
|
+
}
|
|
3009
|
+
}
|
|
3010
|
+
if (targets.size === 1) {
|
|
3011
|
+
return [...targets][0];
|
|
3012
|
+
}
|
|
3013
|
+
return null;
|
|
3014
|
+
}
|
|
2992
3015
|
|
|
2993
3016
|
// src/generator/script-builder.ts
|
|
2994
3017
|
function buildScripts2(plugins, packageJsonTargets, _context) {
|
|
@@ -3589,6 +3612,8 @@ function detectFileCollisions(activePlugins, context, pathResolver) {
|
|
|
3589
3612
|
|
|
3590
3613
|
// src/generator/post-generate.ts
|
|
3591
3614
|
import { execa } from "execa";
|
|
3615
|
+
import { readFile } from "fs/promises";
|
|
3616
|
+
import { join } from "path";
|
|
3592
3617
|
|
|
3593
3618
|
// src/cli/ui/spinner.ts
|
|
3594
3619
|
import ora from "ora";
|
|
@@ -3686,23 +3711,29 @@ async function runPostGenerate(outputDir, context, options) {
|
|
|
3686
3711
|
if (!options.skipInstall) {
|
|
3687
3712
|
const installCmd = getInstallCommand(context.packageManager);
|
|
3688
3713
|
const [cmd, ...args] = installCmd.split(" ");
|
|
3714
|
+
const installTargets = getInstallTargets(outputDir, context);
|
|
3689
3715
|
try {
|
|
3690
|
-
|
|
3691
|
-
|
|
3692
|
-
|
|
3693
|
-
|
|
3694
|
-
|
|
3695
|
-
|
|
3696
|
-
|
|
3697
|
-
|
|
3698
|
-
|
|
3699
|
-
|
|
3716
|
+
for (const target of installTargets) {
|
|
3717
|
+
await withSpinner(
|
|
3718
|
+
`Installing ${target.label} dependencies with ${context.packageManager}...`,
|
|
3719
|
+
async () => {
|
|
3720
|
+
await execa(cmd, args, {
|
|
3721
|
+
cwd: target.cwd,
|
|
3722
|
+
stdio: "pipe"
|
|
3723
|
+
});
|
|
3724
|
+
},
|
|
3725
|
+
`${target.label} dependencies installed`
|
|
3726
|
+
);
|
|
3727
|
+
}
|
|
3700
3728
|
installed = true;
|
|
3701
3729
|
} catch (error) {
|
|
3702
3730
|
logger.warn(`Failed to install dependencies: ${error.message}`);
|
|
3703
3731
|
logger.info(`You can run "${installCmd}" manually`);
|
|
3704
3732
|
}
|
|
3705
3733
|
}
|
|
3734
|
+
if (installed) {
|
|
3735
|
+
await runBootstrapScripts(outputDir, context);
|
|
3736
|
+
}
|
|
3706
3737
|
const steps = buildNextSteps(context, installed);
|
|
3707
3738
|
printPostGeneration(context.projectName, outputDir, context.packageManager, steps);
|
|
3708
3739
|
return { installed, gitInitialized };
|
|
@@ -3721,7 +3752,11 @@ function buildNextSteps(context, installed) {
|
|
|
3721
3752
|
}
|
|
3722
3753
|
steps.push("Fill in your environment variable values");
|
|
3723
3754
|
if (context.hasDatabase && context.hasPrisma) {
|
|
3724
|
-
|
|
3755
|
+
if (context.isFullstack) {
|
|
3756
|
+
steps.push(`Set up database: cd server && ${pm} run db:migrate && ${pm} run db:seed`);
|
|
3757
|
+
} else {
|
|
3758
|
+
steps.push(`Set up database: ${pm} run db:migrate && ${pm} run db:seed`);
|
|
3759
|
+
}
|
|
3725
3760
|
}
|
|
3726
3761
|
steps.push(`Start development: ${pm} run dev`);
|
|
3727
3762
|
if (context.hasMobile) {
|
|
@@ -3729,6 +3764,46 @@ function buildNextSteps(context, installed) {
|
|
|
3729
3764
|
}
|
|
3730
3765
|
return steps;
|
|
3731
3766
|
}
|
|
3767
|
+
function getInstallTargets(outputDir, context) {
|
|
3768
|
+
if (context.isSingleApp && context.isFullstack) {
|
|
3769
|
+
const feDir = context.hasMobile ? "mobile" : "client";
|
|
3770
|
+
return [
|
|
3771
|
+
{ label: "root", cwd: outputDir },
|
|
3772
|
+
{ label: feDir, cwd: join(outputDir, feDir) },
|
|
3773
|
+
{ label: "server", cwd: join(outputDir, "server") }
|
|
3774
|
+
];
|
|
3775
|
+
}
|
|
3776
|
+
return [{ label: "project", cwd: outputDir }];
|
|
3777
|
+
}
|
|
3778
|
+
async function runBootstrapScripts(outputDir, context) {
|
|
3779
|
+
const pm = context.packageManager;
|
|
3780
|
+
const installTargets = getInstallTargets(outputDir, context);
|
|
3781
|
+
const safeBootstrapScripts = ["db:generate", "generate", "codegen", "graphql:codegen", "types:generate"];
|
|
3782
|
+
for (const target of installTargets) {
|
|
3783
|
+
try {
|
|
3784
|
+
const packageJsonPath = join(target.cwd, "package.json");
|
|
3785
|
+
const raw = await readFile(packageJsonPath, "utf8");
|
|
3786
|
+
const pkg = JSON.parse(raw);
|
|
3787
|
+
const scripts = pkg.scripts ?? {};
|
|
3788
|
+
for (const scriptName of safeBootstrapScripts) {
|
|
3789
|
+
if (!scripts[scriptName]) continue;
|
|
3790
|
+
const [cmd, ...args] = `${pm} run ${scriptName}`.split(" ");
|
|
3791
|
+
await withSpinner(
|
|
3792
|
+
`Running ${target.label}:${scriptName}...`,
|
|
3793
|
+
async () => {
|
|
3794
|
+
await execa(cmd, args, {
|
|
3795
|
+
cwd: target.cwd,
|
|
3796
|
+
stdio: "pipe"
|
|
3797
|
+
});
|
|
3798
|
+
},
|
|
3799
|
+
`${target.label}:${scriptName} completed`
|
|
3800
|
+
);
|
|
3801
|
+
}
|
|
3802
|
+
} catch (error) {
|
|
3803
|
+
logger.debug(`Bootstrap scripts skipped for ${target.label}: ${error.message}`);
|
|
3804
|
+
}
|
|
3805
|
+
}
|
|
3806
|
+
}
|
|
3732
3807
|
|
|
3733
3808
|
// src/generator/pipeline.ts
|
|
3734
3809
|
var TOTAL_STEPS = 16;
|
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
// src/shared/constants.ts
|
|
2
|
+
import { createRequire } from "module";
|
|
3
|
+
var require2 = createRequire(import.meta.url);
|
|
4
|
+
var packageJson = require2("../package.json");
|
|
5
|
+
var VERSION = packageJson.version;
|
|
2
6
|
var STRUCTURES = {
|
|
3
7
|
SINGLE_APP: "single-app",
|
|
4
8
|
MONOREPO: "monorepo",
|
|
@@ -3,7 +3,12 @@ var fileMap = {
|
|
|
3
3
|
files: [
|
|
4
4
|
{ template: "next.config.ts.hbs", outputPath: "next.config.ts", target: "frontend" },
|
|
5
5
|
{ template: "tsconfig.json.hbs", outputPath: "tsconfig.json", target: "frontend" },
|
|
6
|
-
{
|
|
6
|
+
{
|
|
7
|
+
template: "middleware.ts.hbs",
|
|
8
|
+
outputPath: "middleware.ts",
|
|
9
|
+
target: "frontend",
|
|
10
|
+
when: (ctx) => ctx.hasAuth && ctx.hasJwtCustom
|
|
11
|
+
},
|
|
7
12
|
{ template: "app/layout.tsx.hbs", outputPath: "app/layout.tsx", target: "frontend" },
|
|
8
13
|
{ template: "app/page.tsx.hbs", outputPath: "app/page.tsx", target: "frontend" },
|
|
9
14
|
{ template: "app/loading.tsx.hbs", outputPath: "app/loading.tsx", target: "frontend" },
|
package/dist/index.js
CHANGED
|
@@ -7,7 +7,7 @@ var fileMap = {
|
|
|
7
7
|
{ template: "models/user.ts.hbs", outputPath: "src/models/user.ts", target: "backend" },
|
|
8
8
|
{
|
|
9
9
|
template: "services/user.service.ts.hbs",
|
|
10
|
-
outputPath: "src/services/user.service.ts",
|
|
10
|
+
outputPath: "src/services/user.prisma.service.ts",
|
|
11
11
|
target: "backend",
|
|
12
12
|
when: (ctx) => ctx.answers.backend !== "nestjs"
|
|
13
13
|
},
|
package/dist/state/mobx/meta.js
CHANGED