create-krispya 0.8.0 → 0.10.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/dist/index.d.ts CHANGED
@@ -1,91 +1,36 @@
1
- type Template = 'vanilla' | 'vanilla-js' | 'react' | 'react-js' | 'r3f' | 'r3f-js';
2
- type BaseTemplate = 'vanilla' | 'react' | 'r3f';
3
- type ProjectType = 'app' | 'library' | 'monorepo';
4
- type LibraryBundler = 'unbuild' | 'tsdown';
5
- type PackageManagerName = 'pnpm' | 'npm' | 'yarn';
6
- type PackageManagerSpec = {
7
- name: PackageManagerName;
8
- version?: string;
9
- };
10
- type EngineName = string;
11
- type EngineSpec = {
12
- name: EngineName;
13
- version?: string;
14
- };
15
- type PackageVersions = Record<string, string>;
16
- type VersionRangePrefix = '^' | '~' | '';
17
- type DependencyVersionOptions = {
18
- prefix?: VersionRangePrefix;
19
- version?: string;
20
- };
21
- type File = {
22
- type: 'text';
23
- content: string;
24
- } | {
25
- type: 'remote';
26
- url: string;
1
+ import { F as FormatterMetaConfig, L as LinterMetaConfig, V as VirtualFileMap, C as CodeInjectionLocation, P as ProjectType, a as ConfigStrategy, E as EngineSpec, b as PackageVersions, c as Linter, d as Formatter, T as Testing, e as LibraryBundler, I as Ide, f as PackageManagerSpec, g as ProjectPlanInput, h as ProjectOptions, A as AiPlatform, W as WorkspacePlanInput } from './shared/create-krispya.to8NBxeJ.js';
2
+ export { i as AiAgentsMetaConfig, B as BaseTemplate, D as DependencyVersionOptions, j as EditorMetaConfig, k as EngineName, l as FeatureSelections, m as FileRenderer, n as LibraryBundlerMetaConfig, o as PackageManagerMetaConfig, p as PackageManagerName, q as PlanBuilder, r as PlanDreiOptions, s as PlanFiberOptions, t as PlanGithubPagesOptions, u as PlanHandleOptions, v as PlanKootaOptions, w as PlanLevaOptions, x as PlanOffscreenOptions, y as PlanPostprocessingOptions, z as PlanRapierOptions, G as PlanTriplexOptions, H as PlanUikitOptions, J as PlanViverseOptions, K as PlanXrOptions, M as PlanZustandOptions, N as ProjectMetaConfig, O as ProjectPlanContext, Q as Template, R as TestingMetaConfig, S as ToolConfig, U as TypeScriptMetaConfig, X as VersionRangePrefix, Y as VirtualFile, Z as WorkspacePlanContext, _ as getBaseTemplate, $ as getLanguageFromTemplate } from './shared/create-krispya.to8NBxeJ.js';
3
+
4
+ type MetaConfig = {
5
+ formatter: FormatterMetaConfig;
6
+ linter: LinterMetaConfig;
27
7
  };
28
- type Linter = 'eslint' | 'oxlint' | 'biome';
29
- type Formatter = 'prettier' | 'oxfmt' | 'biome';
30
- type Testing = 'vitest' | 'none';
31
- type ConfigStrategy = 'stealth' | 'root';
32
- type CodeInjectionLocation = 'vite-config-import' | 'import' | 'global-start' | 'global-end' | 'dom-start' | 'dom' | 'dom-end' | 'scene-start' | 'scene' | 'scene-end' | 'readme-start' | 'readme-end' | 'readme-libraries' | 'readme-tools' | 'readme-commands' | 'vscode-extension-suggestion' | 'vscode-setting';
33
- type GenerateFiberOptions = {
34
- /** @default true */
35
- addExample?: boolean;
36
- } | boolean;
37
- type GenerateDreiOptions = {} | boolean;
38
- type GenerateHandleOptions = {} | boolean;
39
- type GenerateKootaOptions = {
40
- /** @default true */
41
- addExample?: boolean;
42
- } | boolean;
43
- type GenerateLevaOptions = {} | boolean;
44
- type GenerateOffscreenOptions = {} | boolean;
45
- type GeneratePostprocessingOptions = {} | boolean;
46
- type GenerateRapierOptions = {} | boolean;
47
- type GenerateTriplexOptions = {} | boolean;
48
- type GenerateUikitOptions = {} | boolean;
49
- type GenerateViverseOptions = {} | boolean;
50
- type GenerateXrOptions = {
51
- storeOptions?: unknown;
52
- } | boolean;
53
- type GenerateZustandOptions = {
54
- /** @default true */
55
- addExample?: boolean;
56
- } | boolean;
57
- type GenerateGithubPagesOptions = {} | boolean;
58
- type AiPlatform = 'agents' | 'claude';
59
- type GenerateOptions = {
60
- githubUserName?: string;
61
- githubRepoName?: string;
62
- name: string;
63
- projectType?: ProjectType;
64
- libraryBundler?: LibraryBundler;
65
- template?: Template;
8
+ type ToolSelections = {
66
9
  linter?: Linter;
67
10
  formatter?: Formatter;
68
11
  testing?: Testing;
12
+ libraryBundler?: LibraryBundler;
13
+ ide?: Ide;
14
+ packageManager?: PackageManagerSpec;
15
+ };
16
+ type ProjectContext = {
17
+ name: string;
18
+ projectType?: ProjectType;
69
19
  configStrategy?: ConfigStrategy;
70
- /** AI platforms to generate pointer files for */
71
- aiPlatforms?: AiPlatform[];
20
+ engine?: EngineSpec;
72
21
  versions?: PackageVersions;
73
- fiber?: GenerateFiberOptions;
74
- handle?: GenerateHandleOptions;
75
- drei?: GenerateDreiOptions;
76
- koota?: GenerateKootaOptions;
77
- leva?: GenerateLevaOptions;
78
- offscreen?: GenerateOffscreenOptions;
79
- postprocessing?: GeneratePostprocessingOptions;
80
- rapier?: GenerateRapierOptions;
81
- triplex?: GenerateTriplexOptions;
82
- viverse?: GenerateViverseOptions;
83
- uikit?: GenerateUikitOptions;
84
- xr?: GenerateXrOptions;
85
- zustand?: GenerateZustandOptions;
86
- githubPages?: GenerateGithubPagesOptions;
22
+ workspaceRoot?: string;
23
+ workspaceDependencies?: string[];
24
+ pnpmManageVersions?: boolean;
25
+ };
26
+ type PartialPlan = {
27
+ files?: VirtualFileMap;
87
28
  dependencies?: Record<string, string>;
88
- files?: Record<string, File>;
29
+ devDependencies?: Record<string, string>;
30
+ peerDependencies?: Record<string, string>;
31
+ scripts?: Record<string, string>;
32
+ vscodeSettings?: Record<string, unknown>;
33
+ vscodeExtensions?: string[];
89
34
  injections?: Array<{
90
35
  location: CodeInjectionLocation;
91
36
  code: string;
@@ -94,91 +39,33 @@ type GenerateOptions = {
94
39
  search: string;
95
40
  replace: string;
96
41
  }>;
97
- packageManager?: PackageManagerSpec;
98
- pnpmManageVersions?: boolean;
99
- engine?: EngineSpec;
100
- workspaceRoot?: string;
101
- workspaceDependencies?: string[];
42
+ warnings?: string[];
102
43
  };
103
- type Generator = {
104
- get options(): GenerateOptions;
105
- get versions(): PackageVersions;
106
- getVersion(name: string): string;
107
- /** Returns true if using stealth config strategy (configs in .config/) */
108
- isStealthConfig(): boolean;
109
- addDependency(name: string, options?: DependencyVersionOptions): void;
110
- addDevDependency(name: string, options?: DependencyVersionOptions): void;
111
- addPeerDependency(name: string, semver: string): void;
112
- addFile(path: string, file: File): void;
113
- addScript(name: string, command: string): void;
114
- inject(location: CodeInjectionLocation, code: string): void;
115
- replace(search: string, replace: string): void;
116
- configureVite(object: unknown): void;
117
- addVscodeSetting(key: string, value: unknown): void;
44
+ type ProjectPlan = {
45
+ files: VirtualFileMap;
46
+ dependencies: Record<string, string>;
47
+ devDependencies: Record<string, string>;
48
+ peerDependencies: Record<string, string>;
49
+ scripts: Record<string, string>;
50
+ vscodeSettings: Record<string, unknown>;
51
+ vscodeExtensions: string[];
52
+ injections: Array<{
53
+ location: CodeInjectionLocation;
54
+ code: string;
55
+ }>;
56
+ replacements: Array<{
57
+ search: string;
58
+ replace: string;
59
+ }>;
60
+ warnings: string[];
118
61
  };
119
- declare function getLanguageFromTemplate(template: Template): 'javascript' | 'typescript';
120
- declare function getBaseTemplate(template: Template): BaseTemplate;
121
62
 
122
- /**
123
- * Fetches the latest version of an npm package from the registry
124
- * @param packageName The name of the npm package
125
- * @param fallback Fallback version if fetch fails
126
- * @returns The latest version string (e.g., "1.0.0")
127
- */
128
- declare function getLatestNpmVersion(packageName: string, fallback: string): Promise<string>;
129
- /**
130
- * Fetches the latest version of pnpm from the npm registry
131
- * @returns The latest pnpm version string (e.g., "10.24.0")
132
- */
133
- declare function getLatestPnpmVersion(): Promise<string>;
134
- /**
135
- * Fetches the latest version of yarn from the npm registry
136
- * @returns The latest yarn version string (e.g., "4.6.0")
137
- */
138
- declare function getLatestYarnVersion(): Promise<string>;
139
- /**
140
- * Fetches the latest version of npm from the npm registry
141
- * @returns The latest npm version string (e.g., "11.0.0")
142
- */
143
- declare function getLatestNpmCliVersion(): Promise<string>;
144
- /**
145
- * Fetches the latest stable version of Node.js
146
- * @returns The latest Node.js version string (e.g., "25.1.0")
147
- */
148
- declare function getLatestNodeVersion(): Promise<string>;
149
- /**
150
- * Validates a package name for use in a monorepo workspace.
151
- * Returns an error message if invalid, undefined if valid.
152
- *
153
- * Rules:
154
- * - Supports scoped names (@scope/name) or unscoped names
155
- * - Must be lowercase
156
- * - Only alphanumeric characters and hyphens allowed in each segment
157
- * - Cannot start or end with a hyphen
158
- * - Cannot contain path traversal sequences
159
- * - Cannot be empty
160
- */
161
- declare function validatePackageName(name: string): string | undefined;
162
- /**
163
- * Parses pnpm-workspace.yaml content to extract workspace directory names.
164
- * Filters out hidden directories (starting with .).
165
- */
166
- declare function parseWorkspaceYamlContent(content: string): string[];
63
+ declare function mergePartialPlans(...plans: Array<PartialPlan | undefined>): ProjectPlan;
167
64
 
168
- type DetectedTooling = {
169
- linter: Linter | undefined;
170
- formatter: Formatter | undefined;
171
- };
172
65
  /**
173
- * Detects linter and formatter from a monorepo root.
174
- * Priority: scripts → .config/ directories → devDependencies
175
- */
176
- declare function detectTooling(root: string): Promise<DetectedTooling>;
177
- /**
178
- * Generates a random name in the format "adjective-noun"
179
- * @returns A randomly generated name string
66
+ * Main generation function that creates all project files.
180
67
  */
181
- declare function generateRandomName(): string;
68
+ declare function planProject(input: ProjectPlanInput | ProjectOptions): Promise<ProjectPlan>;
182
69
 
183
70
  /**
184
71
  * Parameters for generating a monorepo workspace.
@@ -197,24 +84,46 @@ type MonorepoParams = {
197
84
  pnpmManageVersions?: boolean;
198
85
  engine?: EngineSpec;
199
86
  versions?: PackageVersions;
87
+ ide?: Ide;
200
88
  /** AI platforms to generate files for */
201
89
  aiPlatforms?: AiPlatform[];
202
90
  };
203
- type MonorepoResult = {
204
- files: Record<string, File>;
91
+
92
+ declare function planWorkspace(input: MonorepoParams | WorkspacePlanInput): Promise<ProjectPlan>;
93
+
94
+ declare function resolveProjectPlanInput(options: ProjectOptions): ProjectPlanInput;
95
+ declare function projectPlanInputToOptions(input: ProjectPlanInput): ProjectOptions;
96
+ declare function resolveWorkspacePlanInput(params: MonorepoParams): WorkspacePlanInput;
97
+ declare function workspacePlanInputToMonorepoParams(input: WorkspacePlanInput): MonorepoParams;
98
+
99
+ declare function unique<T>(...array: T[][]): T[];
100
+
101
+ declare function merge(target: any, modification: any): any;
102
+
103
+ declare function validatePackageName(name: string): string | undefined;
104
+
105
+ declare function generateRandomName(): string;
106
+
107
+ type DetectedTooling = {
108
+ linter: Linter | undefined;
109
+ formatter: Formatter | undefined;
205
110
  };
111
+ declare function detectTooling(root: string): Promise<DetectedTooling>;
112
+
206
113
  /**
207
- * Generates a monorepo workspace root structure with shared config packages.
208
- *
209
- * Note: Monorepos are currently pnpm-only. Detection relies on pnpm-workspace.yaml.
210
- * TODO: Support yarn and npm workspaces in the future.
114
+ * Fetches the latest version of an npm package from the registry.
211
115
  */
212
- declare function generateMonorepo(params: MonorepoParams): MonorepoResult;
213
-
116
+ declare function getLatestNpmVersion(packageName: string, fallback: string): Promise<string>;
214
117
  /**
215
- * Main generation function that creates all project files.
118
+ * Fetches the latest npm version within a specific major version.
216
119
  */
217
- declare function generate(options: GenerateOptions): Record<string, File>;
120
+ declare function getLatestNpmMajorVersion(packageName: string, majorVersion: string, fallback: string): Promise<string>;
121
+ declare function getLatestPnpmVersion(): Promise<string>;
122
+ declare function getLatestYarnVersion(): Promise<string>;
123
+ declare function getLatestNpmCliVersion(): Promise<string>;
124
+ declare function getLatestNodeVersion(): Promise<string>;
125
+
126
+ declare function parseWorkspaceYamlContent(content: string): string[];
218
127
 
219
- export { detectTooling, generate, generateMonorepo, generateRandomName, getBaseTemplate, getLanguageFromTemplate, getLatestNodeVersion, getLatestNpmCliVersion, getLatestNpmVersion, getLatestPnpmVersion, getLatestYarnVersion, parseWorkspaceYamlContent, validatePackageName };
220
- export type { AiPlatform, BaseTemplate, CodeInjectionLocation, ConfigStrategy, DependencyVersionOptions, DetectedTooling, EngineName, EngineSpec, File, Formatter, GenerateDreiOptions, GenerateFiberOptions, GenerateGithubPagesOptions, GenerateHandleOptions, GenerateKootaOptions, GenerateLevaOptions, GenerateOffscreenOptions, GenerateOptions, GeneratePostprocessingOptions, GenerateRapierOptions, GenerateTriplexOptions, GenerateUikitOptions, GenerateViverseOptions, GenerateXrOptions, GenerateZustandOptions, Generator, LibraryBundler, Linter, PackageManagerName, PackageManagerSpec, PackageVersions, ProjectType, Template, Testing, VersionRangePrefix };
128
+ export { AiPlatform, CodeInjectionLocation, ConfigStrategy, EngineSpec, Formatter, FormatterMetaConfig, Ide, LibraryBundler, Linter, LinterMetaConfig, PackageManagerSpec, PackageVersions, ProjectOptions, ProjectPlanInput, ProjectType, Testing, VirtualFileMap, WorkspacePlanInput, detectTooling, generateRandomName, getLatestNodeVersion, getLatestNpmCliVersion, getLatestNpmMajorVersion, getLatestNpmVersion, getLatestPnpmVersion, getLatestYarnVersion, merge, mergePartialPlans, parseWorkspaceYamlContent, planProject, planWorkspace, projectPlanInputToOptions, resolveProjectPlanInput, resolveWorkspacePlanInput, unique, validatePackageName, workspacePlanInputToMonorepoParams };
129
+ export type { DetectedTooling, MetaConfig, PartialPlan, ProjectContext, ProjectPlan, ToolSelections };
package/dist/index.mjs CHANGED
@@ -1,5 +1,38 @@
1
- export { e as detectTooling, v as generate, C as generateMonorepo, d as generateRandomName, a as getBaseTemplate, b as getLanguageFromTemplate, D as getLatestNodeVersion, E as getLatestNpmCliVersion, F as getLatestNpmVersion, G as getLatestPnpmVersion, H as getLatestYarnVersion, p as parseWorkspaceYamlContent, B as validatePackageName } from './chunks/index.mjs';
1
+ export { d as detectTooling, g as generateRandomName, a as getBaseTemplate, b as getLanguageFromTemplate, c as getLatestNodeVersion, e as getLatestNpmCliVersion, f as getLatestNpmMajorVersion, h as getLatestNpmVersion, i as getLatestPnpmVersion, j as getLatestYarnVersion, m as merge, p as parseWorkspaceYamlContent, k as planProject, l as planWorkspace, n as projectPlanInputToOptions, r as resolveProjectPlanInput, o as resolveWorkspacePlanInput, u as unique, v as validatePackageName, w as workspacePlanInputToMonorepoParams } from './shared/create-krispya.DKKVmsqH.mjs';
2
2
  import 'fs/promises';
3
3
  import 'fs';
4
4
  import 'path';
5
5
  import 'chalk';
6
+
7
+ const emptyPlan = () => ({
8
+ files: {},
9
+ dependencies: {},
10
+ devDependencies: {},
11
+ peerDependencies: {},
12
+ scripts: {},
13
+ vscodeSettings: {},
14
+ vscodeExtensions: [],
15
+ injections: [],
16
+ replacements: [],
17
+ warnings: []
18
+ });
19
+ function mergePartialPlans(...plans) {
20
+ const merged = emptyPlan();
21
+ for (const plan of plans) {
22
+ if (plan == null) continue;
23
+ Object.assign(merged.files, plan.files);
24
+ Object.assign(merged.dependencies, plan.dependencies);
25
+ Object.assign(merged.devDependencies, plan.devDependencies);
26
+ Object.assign(merged.peerDependencies, plan.peerDependencies);
27
+ Object.assign(merged.scripts, plan.scripts);
28
+ Object.assign(merged.vscodeSettings, plan.vscodeSettings);
29
+ merged.vscodeExtensions.push(...plan.vscodeExtensions ?? []);
30
+ merged.injections.push(...plan.injections ?? []);
31
+ merged.replacements.push(...plan.replacements ?? []);
32
+ merged.warnings.push(...plan.warnings ?? []);
33
+ }
34
+ merged.vscodeExtensions = [...new Set(merged.vscodeExtensions)];
35
+ return merged;
36
+ }
37
+
38
+ export { mergePartialPlans };