@tanstack/create-start 1.92.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.
Files changed (60) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +0 -0
  3. package/dist/cli-entry.d.ts +1 -0
  4. package/dist/cli-entry.mjs +5 -0
  5. package/dist/cli.d.ts +1 -0
  6. package/dist/cli.mjs +92 -0
  7. package/dist/constants.d.ts +3 -0
  8. package/dist/constants.mjs +7 -0
  9. package/dist/directory.d.ts +3 -0
  10. package/dist/directory.mjs +62 -0
  11. package/dist/index.d.ts +2446 -0
  12. package/dist/index.mjs +15 -0
  13. package/dist/logo.d.ts +1 -0
  14. package/dist/logo.mjs +28 -0
  15. package/dist/module.d.ts +67 -0
  16. package/dist/module.mjs +168 -0
  17. package/dist/modules/core/index.d.ts +1446 -0
  18. package/dist/modules/core/index.mjs +218 -0
  19. package/dist/modules/core/template/app/client.tsx +10 -0
  20. package/dist/modules/core/template/app/router.tsx +18 -0
  21. package/dist/modules/core/template/app/routes/__root.tsx +50 -0
  22. package/dist/modules/core/template/app/ssr.tsx +15 -0
  23. package/dist/modules/core/template/app.config.ts +5 -0
  24. package/dist/modules/core/template/tsconfig.json +10 -0
  25. package/dist/modules/git.d.ts +231 -0
  26. package/dist/modules/git.mjs +114 -0
  27. package/dist/modules/ide.d.ts +92 -0
  28. package/dist/modules/ide.mjs +70 -0
  29. package/dist/modules/packageJson.d.ts +541 -0
  30. package/dist/modules/packageJson.mjs +153 -0
  31. package/dist/modules/packageManager.d.ts +139 -0
  32. package/dist/modules/packageManager.mjs +89 -0
  33. package/dist/modules/vscode/index.d.ts +33 -0
  34. package/dist/modules/vscode/index.mjs +35 -0
  35. package/dist/modules/vscode/template/_dot_vscode/settings.json +11 -0
  36. package/dist/templates/barebones/index.d.ts +1507 -0
  37. package/dist/templates/barebones/index.mjs +60 -0
  38. package/dist/templates/barebones/template/app/routes/index.tsx +11 -0
  39. package/dist/templates/index.d.ts +13 -0
  40. package/dist/templates/index.mjs +60 -0
  41. package/dist/types.d.ts +2 -0
  42. package/dist/types.mjs +0 -0
  43. package/dist/utils/debug.d.ts +11 -0
  44. package/dist/utils/debug.mjs +71 -0
  45. package/dist/utils/getPackageManager.d.ts +2 -0
  46. package/dist/utils/getPackageManager.mjs +11 -0
  47. package/dist/utils/helpers/helperFactory.d.ts +15 -0
  48. package/dist/utils/helpers/helperFactory.mjs +3 -0
  49. package/dist/utils/helpers/index.d.ts +51 -0
  50. package/dist/utils/helpers/index.mjs +227 -0
  51. package/dist/utils/runCmd.d.ts +1 -0
  52. package/dist/utils/runCmd.mjs +4 -0
  53. package/dist/utils/runPackageManagerCommand.d.ts +4 -0
  54. package/dist/utils/runPackageManagerCommand.mjs +17 -0
  55. package/dist/utils/spawnCmd.d.ts +1 -0
  56. package/dist/utils/spawnCmd.mjs +30 -0
  57. package/dist/utils/validateProjectName.d.ts +8 -0
  58. package/dist/utils/validateProjectName.mjs +14 -0
  59. package/index.js +3 -0
  60. package/package.json +66 -0
@@ -0,0 +1,153 @@
1
+ import { dirname } from "node:path";
2
+ import { fileURLToPath } from "node:url";
3
+ import { z } from "zod";
4
+ import { input } from "@inquirer/prompts";
5
+ import { InvalidArgumentError, createOption } from "@commander-js/extra-typings";
6
+ import { initHelpers } from "../utils/helpers/index.mjs";
7
+ import { createModule } from "../module.mjs";
8
+ import { validateProjectName } from "../utils/validateProjectName.mjs";
9
+ import { createDebugger } from "../utils/debug.mjs";
10
+ const debug = createDebugger("package-json");
11
+ const __filename = fileURLToPath(import.meta.url);
12
+ const __dirname = dirname(__filename);
13
+ export const packageNameCliOption = createOption(
14
+ "--package-name <string>",
15
+ "The name to use in the package.json"
16
+ ).argParser((name) => {
17
+ const validation = validateProjectName(name);
18
+ if (!validation.valid) {
19
+ debug.error("Invalid package name", { name, validation });
20
+ throw new InvalidArgumentError(`The project name ${name} is invalid`);
21
+ }
22
+ debug.verbose("Validated package name", { name });
23
+ return name;
24
+ });
25
+ const dependencies = z.array(
26
+ z.object({
27
+ name: z.string(),
28
+ version: z.string()
29
+ })
30
+ );
31
+ const script = z.object({
32
+ name: z.string(),
33
+ script: z.string()
34
+ });
35
+ const schema = z.object({
36
+ type: z.enum(["new", "update"]),
37
+ name: z.string().optional(),
38
+ dependencies: dependencies.optional(),
39
+ devDependencies: dependencies.optional(),
40
+ scripts: z.array(script).optional()
41
+ });
42
+ export const packageJsonModule = createModule(schema).init((schema2) => schema2).prompt((schema2) => {
43
+ return schema2.transform(async (vals) => {
44
+ debug.verbose("Transforming prompt schema", vals);
45
+ if (vals.type === "new") {
46
+ const name = vals.name ? vals.name : await input({
47
+ message: "Enter the project name",
48
+ default: "tanstack-start",
49
+ validate: (name2) => {
50
+ const validation = validateProjectName(name2);
51
+ if (validation.valid) {
52
+ debug.verbose("Valid project name entered", { name: name2 });
53
+ return true;
54
+ }
55
+ debug.warn("Invalid project name entered", {
56
+ name: name2,
57
+ problems: validation.problems
58
+ });
59
+ return "Invalid project name: " + validation.problems[0];
60
+ }
61
+ });
62
+ return {
63
+ ...vals,
64
+ name
65
+ };
66
+ } else {
67
+ return vals;
68
+ }
69
+ });
70
+ }).validateAndApply({
71
+ validate: async ({ cfg, targetPath }) => {
72
+ debug.verbose("Validating package.json", { cfg, targetPath });
73
+ const issues = [];
74
+ const _ = initHelpers(__dirname, targetPath);
75
+ const packageJsonExists = await _.targetFileExists("./package.json");
76
+ debug.verbose("Package.json exists check", { exists: packageJsonExists });
77
+ if (cfg.type === "new") {
78
+ if (packageJsonExists) {
79
+ debug.warn("Package.json already exists for new project");
80
+ issues.push("Package.json already exists");
81
+ }
82
+ } else {
83
+ if (!packageJsonExists) {
84
+ debug.warn("Package.json missing for update");
85
+ issues.push("Package.json doesn't exist to update");
86
+ }
87
+ }
88
+ return issues;
89
+ },
90
+ apply: async ({ cfg, targetPath }) => {
91
+ debug.verbose("Applying package.json changes", { cfg, targetPath });
92
+ const _ = initHelpers(__dirname, targetPath);
93
+ if (cfg.type === "new") {
94
+ const packageJson2 = {
95
+ name: cfg.name,
96
+ version: "0.0.0",
97
+ private: true,
98
+ type: "module"
99
+ };
100
+ debug.verbose("Creating new package.json", packageJson2);
101
+ await _.writeTargetfile(
102
+ "./package.json",
103
+ JSON.stringify(packageJson2, null, 2),
104
+ false
105
+ );
106
+ }
107
+ let packageJson = JSON.parse(await _.readTargetFile("./package.json"));
108
+ debug.verbose("Current package.json contents", packageJson);
109
+ const dependenciesRecord = createDepsRecord(cfg.dependencies ?? []);
110
+ const devDependenciesRecord = createDepsRecord(cfg.devDependencies ?? []);
111
+ const scriptsRecord = createScriptsRecord(cfg.scripts ?? []);
112
+ packageJson = {
113
+ ...packageJson,
114
+ scripts: {
115
+ ...packageJson.scripts,
116
+ ...scriptsRecord
117
+ },
118
+ dependencies: {
119
+ ...packageJson.dependencies,
120
+ ...dependenciesRecord
121
+ },
122
+ devDependencies: {
123
+ ...packageJson.devDependencies,
124
+ ...devDependenciesRecord
125
+ }
126
+ };
127
+ debug.verbose("Updated package.json contents", packageJson);
128
+ await _.writeTargetfile(
129
+ "./package.json",
130
+ JSON.stringify(packageJson, null, 2),
131
+ true
132
+ );
133
+ },
134
+ spinnerConfigFn: (cfg) => ({
135
+ success: `${cfg.type === "new" ? "Created" : "Updated"} package.json`,
136
+ error: `Failed to ${cfg.type === "new" ? "create" : "update"} package.json`,
137
+ inProgress: `${cfg.type === "new" ? "Creating" : "Updating"} package.json`
138
+ })
139
+ });
140
+ const createDepsRecord = (deps) => deps.reduce(
141
+ (acc, dep) => ({
142
+ ...acc,
143
+ [dep.name]: dep.version
144
+ }),
145
+ {}
146
+ );
147
+ const createScriptsRecord = (scripts) => scripts.reduce(
148
+ (acc, script2) => ({
149
+ ...acc,
150
+ [script2.name]: script2.script
151
+ }),
152
+ {}
153
+ );
@@ -0,0 +1,139 @@
1
+ import { z } from 'zod';
2
+ export declare const packageManagerOption: import("@commander-js/extra-typings").Option<`--package-manager <${string}>`, undefined, undefined, "bun" | "pnpm" | "npm" | "yarn", false, undefined>;
3
+ export declare const packageManagerModule: {
4
+ _baseSchema: z.ZodObject<{
5
+ packageManager: z.ZodOptional<z.ZodEnum<["bun", "pnpm", "npm", "yarn"]>>;
6
+ installDeps: z.ZodOptional<z.ZodBoolean>;
7
+ }, "strip", z.ZodTypeAny, {
8
+ packageManager?: "bun" | "pnpm" | "npm" | "yarn" | undefined;
9
+ installDeps?: boolean | undefined;
10
+ }, {
11
+ packageManager?: "bun" | "pnpm" | "npm" | "yarn" | undefined;
12
+ installDeps?: boolean | undefined;
13
+ }>;
14
+ _initSchema: z.ZodEffects<z.ZodObject<{
15
+ packageManager: z.ZodOptional<z.ZodEnum<["bun", "pnpm", "npm", "yarn"]>>;
16
+ installDeps: z.ZodOptional<z.ZodBoolean>;
17
+ }, "strip", z.ZodTypeAny, {
18
+ packageManager?: "bun" | "pnpm" | "npm" | "yarn" | undefined;
19
+ installDeps?: boolean | undefined;
20
+ }, {
21
+ packageManager?: "bun" | "pnpm" | "npm" | "yarn" | undefined;
22
+ installDeps?: boolean | undefined;
23
+ }>, {
24
+ packageManager: "bun" | "pnpm" | "npm" | "yarn" | undefined;
25
+ installDeps: boolean | undefined;
26
+ }, {
27
+ packageManager?: "bun" | "pnpm" | "npm" | "yarn" | undefined;
28
+ installDeps?: boolean | undefined;
29
+ }>;
30
+ _promptSchema: z.ZodEffects<z.ZodEffects<z.ZodObject<{
31
+ packageManager: z.ZodOptional<z.ZodEnum<["bun", "pnpm", "npm", "yarn"]>>;
32
+ installDeps: z.ZodOptional<z.ZodBoolean>;
33
+ }, "strip", z.ZodTypeAny, {
34
+ packageManager?: "bun" | "pnpm" | "npm" | "yarn" | undefined;
35
+ installDeps?: boolean | undefined;
36
+ }, {
37
+ packageManager?: "bun" | "pnpm" | "npm" | "yarn" | undefined;
38
+ installDeps?: boolean | undefined;
39
+ }>, {
40
+ packageManager: "bun" | "pnpm" | "npm" | "yarn" | undefined;
41
+ installDeps: boolean | undefined;
42
+ }, {
43
+ packageManager?: "bun" | "pnpm" | "npm" | "yarn" | undefined;
44
+ installDeps?: boolean | undefined;
45
+ }>, {
46
+ installDeps: boolean;
47
+ packageManager: "bun" | "pnpm" | "npm" | "yarn";
48
+ }, {
49
+ packageManager?: "bun" | "pnpm" | "npm" | "yarn" | undefined;
50
+ installDeps?: boolean | undefined;
51
+ }>;
52
+ _applyFn: ({ cfg, targetPath }: {
53
+ targetPath: string;
54
+ cfg: {
55
+ installDeps: boolean;
56
+ packageManager: "bun" | "pnpm" | "npm" | "yarn";
57
+ };
58
+ }) => Promise<void>;
59
+ _validateFn: ((opts: {
60
+ targetPath: string;
61
+ cfg: {
62
+ installDeps: boolean;
63
+ packageManager: "bun" | "pnpm" | "npm" | "yarn";
64
+ };
65
+ }) => Promise<Array<string>> | Array<string>) | undefined;
66
+ _spinnerConfigFn: ((cfg: {
67
+ installDeps: boolean;
68
+ packageManager: "bun" | "pnpm" | "npm" | "yarn";
69
+ }) => {
70
+ success: string;
71
+ error: string;
72
+ inProgress: string;
73
+ } | undefined) | undefined;
74
+ init(cfg: {
75
+ packageManager?: "bun" | "pnpm" | "npm" | "yarn" | undefined;
76
+ installDeps?: boolean | undefined;
77
+ }): Promise<z.ParseReturnType<z.ZodEffects<z.ZodObject<{
78
+ packageManager: z.ZodOptional<z.ZodEnum<["bun", "pnpm", "npm", "yarn"]>>;
79
+ installDeps: z.ZodOptional<z.ZodBoolean>;
80
+ }, "strip", z.ZodTypeAny, {
81
+ packageManager?: "bun" | "pnpm" | "npm" | "yarn" | undefined;
82
+ installDeps?: boolean | undefined;
83
+ }, {
84
+ packageManager?: "bun" | "pnpm" | "npm" | "yarn" | undefined;
85
+ installDeps?: boolean | undefined;
86
+ }>, {
87
+ packageManager: "bun" | "pnpm" | "npm" | "yarn" | undefined;
88
+ installDeps: boolean | undefined;
89
+ }, {
90
+ packageManager?: "bun" | "pnpm" | "npm" | "yarn" | undefined;
91
+ installDeps?: boolean | undefined;
92
+ }>>>;
93
+ initSafe(cfg: {
94
+ packageManager?: "bun" | "pnpm" | "npm" | "yarn" | undefined;
95
+ installDeps?: boolean | undefined;
96
+ }): Promise<z.SafeParseReturnType<{
97
+ packageManager?: "bun" | "pnpm" | "npm" | "yarn" | undefined;
98
+ installDeps?: boolean | undefined;
99
+ }, {
100
+ packageManager: "bun" | "pnpm" | "npm" | "yarn" | undefined;
101
+ installDeps: boolean | undefined;
102
+ }>>;
103
+ prompt(cfg: {
104
+ packageManager?: "bun" | "pnpm" | "npm" | "yarn" | undefined;
105
+ installDeps?: boolean | undefined;
106
+ }): Promise<z.SafeParseReturnType<{
107
+ packageManager?: "bun" | "pnpm" | "npm" | "yarn" | undefined;
108
+ installDeps?: boolean | undefined;
109
+ }, {
110
+ installDeps: boolean;
111
+ packageManager: "bun" | "pnpm" | "npm" | "yarn";
112
+ }>>;
113
+ validate(cfg: {
114
+ packageManager?: "bun" | "pnpm" | "npm" | "yarn" | undefined;
115
+ installDeps?: boolean | undefined;
116
+ }): Promise<z.SafeParseReturnType<{
117
+ packageManager?: "bun" | "pnpm" | "npm" | "yarn" | undefined;
118
+ installDeps?: boolean | undefined;
119
+ }, {
120
+ installDeps: boolean;
121
+ packageManager: "bun" | "pnpm" | "npm" | "yarn";
122
+ }>>;
123
+ apply({ cfg, targetPath, }: {
124
+ cfg: {
125
+ installDeps: boolean;
126
+ packageManager: "bun" | "pnpm" | "npm" | "yarn";
127
+ };
128
+ targetPath: string;
129
+ }): Promise<void>;
130
+ execute({ cfg, targetPath, type, applyingMessage, }: {
131
+ cfg: {
132
+ packageManager?: "bun" | "pnpm" | "npm" | "yarn" | undefined;
133
+ installDeps?: boolean | undefined;
134
+ };
135
+ targetPath: string;
136
+ type: "new-project" | "update";
137
+ applyingMessage?: string;
138
+ }): Promise<void>;
139
+ };
@@ -0,0 +1,89 @@
1
+ import { z } from "zod";
2
+ import { InvalidArgumentError, createOption } from "@commander-js/extra-typings";
3
+ import { select } from "@inquirer/prompts";
4
+ import { createModule } from "../module.mjs";
5
+ import { SUPPORTED_PACKAGE_MANAGERS } from "../constants.mjs";
6
+ import { getPackageManager } from "../utils/getPackageManager.mjs";
7
+ import { install } from "../utils/runPackageManagerCommand.mjs";
8
+ import { createDebugger } from "../utils/debug.mjs";
9
+ const debug = createDebugger("packageManager");
10
+ const schema = z.object({
11
+ packageManager: z.enum(SUPPORTED_PACKAGE_MANAGERS),
12
+ installDeps: z.boolean()
13
+ });
14
+ const DEFAULT_PACKAGE_MANAGER = "npm";
15
+ const options = schema.shape.packageManager.options;
16
+ export const packageManagerOption = createOption(
17
+ `--package-manager <${options.join("|")}>`,
18
+ `use this Package Manager (${options.join(", ")})`
19
+ ).argParser((value) => {
20
+ if (!options.includes(value)) {
21
+ debug.error("Invalid package manager provided", { value, allowed: options });
22
+ throw new InvalidArgumentError(
23
+ `Invalid Package Manager: ${value}. Only the following are allowed: ${options.join(", ")}`
24
+ );
25
+ }
26
+ return value;
27
+ });
28
+ export const packageManagerModule = createModule(
29
+ z.object({
30
+ packageManager: z.enum(SUPPORTED_PACKAGE_MANAGERS).optional(),
31
+ installDeps: z.boolean().optional()
32
+ })
33
+ ).init(
34
+ (schema2) => schema2.transform((vals) => {
35
+ debug.verbose("Initializing package manager", vals);
36
+ const detectedPM = getPackageManager();
37
+ debug.verbose("Detected package manager", { detectedPM });
38
+ return {
39
+ packageManager: vals.packageManager ?? detectedPM,
40
+ installDeps: vals.installDeps
41
+ };
42
+ })
43
+ ).prompt(
44
+ (schema2) => schema2.transform(async (vals) => {
45
+ debug.verbose("Prompting for package manager options", vals);
46
+ const packageManager = vals.packageManager != void 0 ? vals.packageManager : await select({
47
+ message: "Select a package manager",
48
+ choices: options.map((pm) => ({ value: pm })),
49
+ default: getPackageManager() ?? DEFAULT_PACKAGE_MANAGER
50
+ });
51
+ const installDeps = vals.installDeps != void 0 ? vals.installDeps : await select({
52
+ message: "Install dependencies",
53
+ choices: [
54
+ { name: "yes", value: true },
55
+ { name: "no", value: false }
56
+ ],
57
+ default: "yes"
58
+ });
59
+ debug.verbose("Package manager options selected", {
60
+ packageManager,
61
+ installDeps
62
+ });
63
+ return {
64
+ installDeps,
65
+ packageManager
66
+ };
67
+ })
68
+ ).validateAndApply({
69
+ spinnerConfigFn: (cfg) => {
70
+ debug.verbose("Configuring spinner", cfg);
71
+ return cfg.installDeps ? {
72
+ error: `Failed to install dependencies with ${cfg.packageManager}`,
73
+ inProgress: `Installing dependencies with ${cfg.packageManager}`,
74
+ success: `Installed dependencies with ${cfg.packageManager}`
75
+ } : void 0;
76
+ },
77
+ apply: async ({ cfg, targetPath }) => {
78
+ if (cfg.installDeps) {
79
+ debug.info("Installing dependencies", {
80
+ packageManager: cfg.packageManager,
81
+ targetPath
82
+ });
83
+ await install(cfg.packageManager, targetPath);
84
+ debug.info("Dependencies installed successfully");
85
+ } else {
86
+ debug.info("Skipping dependency installation");
87
+ }
88
+ }
89
+ });
@@ -0,0 +1,33 @@
1
+ import { z } from 'zod';
2
+ export declare const vsCodeModule: {
3
+ _baseSchema: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
4
+ _initSchema: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
5
+ _promptSchema: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
6
+ _applyFn: ({ targetPath }: {
7
+ targetPath: string;
8
+ cfg: {};
9
+ }) => Promise<void>;
10
+ _validateFn: (({ targetPath }: {
11
+ targetPath: string;
12
+ cfg: {};
13
+ }) => Promise<string[]>) | undefined;
14
+ _spinnerConfigFn: ((cfg: {}) => {
15
+ success: string;
16
+ error: string;
17
+ inProgress: string;
18
+ } | undefined) | undefined;
19
+ init(cfg: {}): Promise<z.ParseReturnType<z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>>>;
20
+ initSafe(cfg: {}): Promise<z.SafeParseReturnType<{}, {}>>;
21
+ prompt(cfg: {}): Promise<z.SafeParseReturnType<{}, {}>>;
22
+ validate(cfg: {}): Promise<z.SafeParseReturnType<{}, {}>>;
23
+ apply({ cfg, targetPath, }: {
24
+ cfg: {};
25
+ targetPath: string;
26
+ }): Promise<void>;
27
+ execute({ cfg, targetPath, type, applyingMessage, }: {
28
+ cfg: {};
29
+ targetPath: string;
30
+ type: "new-project" | "update";
31
+ applyingMessage?: string;
32
+ }): Promise<void>;
33
+ };
@@ -0,0 +1,35 @@
1
+ import { dirname } from "node:path";
2
+ import { fileURLToPath } from "node:url";
3
+ import { z } from "zod";
4
+ import { initHelpers } from "../../utils/helpers/index.mjs";
5
+ import { createModule } from "../../module.mjs";
6
+ import { createDebugger } from "../../utils/debug.mjs";
7
+ const __filename = fileURLToPath(import.meta.url);
8
+ const __dirname = dirname(__filename);
9
+ const debug = createDebugger("vscode");
10
+ export const vsCodeModule = createModule(z.object({})).init((schema) => schema).prompt((schema) => schema).validateAndApply({
11
+ validate: async ({ targetPath }) => {
12
+ debug.verbose("Validating vscode module", { targetPath });
13
+ const _ = initHelpers(__dirname, targetPath);
14
+ const issues = await _.getTemplateFilesThatWouldBeOverwritten({
15
+ file: "**/*",
16
+ templateFolder: "./template",
17
+ targetFolder: targetPath,
18
+ overwrite: false
19
+ });
20
+ debug.verbose("Validation complete", { issueCount: issues.length });
21
+ return issues;
22
+ },
23
+ apply: async ({ targetPath }) => {
24
+ debug.info("Applying vscode module", { targetPath });
25
+ const _ = initHelpers(__dirname, targetPath);
26
+ debug.verbose("Copying template files");
27
+ await _.copyTemplateFiles({
28
+ file: "**/*",
29
+ templateFolder: "./template",
30
+ targetFolder: ".",
31
+ overwrite: false
32
+ });
33
+ debug.info("VSCode module applied successfully");
34
+ }
35
+ });
@@ -0,0 +1,11 @@
1
+ {
2
+ "files.watcherExclude": {
3
+ "**/routeTree.gen.ts": true
4
+ },
5
+ "search.exclude": {
6
+ "**/routeTree.gen.ts": true
7
+ },
8
+ "files.readonlyInclude": {
9
+ "**/routeTree.gen.ts": true
10
+ }
11
+ }