create-rock 0.0.1 → 0.9.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 (74) hide show
  1. package/README.md +67 -0
  2. package/dist/e2e/e2e.test.d.ts +1 -0
  3. package/dist/e2e/e2e.test.d.ts.map +1 -0
  4. package/dist/e2e/e2e.test.js +98 -0
  5. package/dist/e2e/e2e.test.js.map +1 -0
  6. package/dist/src/bin.d.ts +2 -0
  7. package/dist/src/bin.d.ts.map +1 -0
  8. package/dist/src/bin.js +10 -0
  9. package/dist/src/bin.js.map +1 -0
  10. package/dist/src/index.d.ts +1 -0
  11. package/dist/src/index.d.ts.map +1 -0
  12. package/dist/src/index.js +2 -0
  13. package/dist/src/index.js.map +1 -0
  14. package/dist/src/lib/bin.d.ts +4 -0
  15. package/dist/src/lib/bin.d.ts.map +1 -0
  16. package/dist/src/lib/bin.js +210 -0
  17. package/dist/src/lib/bin.js.map +1 -0
  18. package/dist/src/lib/steps/git-init.d.ts +3 -0
  19. package/dist/src/lib/steps/git-init.d.ts.map +1 -0
  20. package/dist/src/lib/steps/git-init.js +51 -0
  21. package/dist/src/lib/steps/git-init.js.map +1 -0
  22. package/dist/src/lib/templates.d.ts +23 -0
  23. package/dist/src/lib/templates.d.ts.map +1 -0
  24. package/dist/src/lib/templates.js +122 -0
  25. package/dist/src/lib/templates.js.map +1 -0
  26. package/dist/src/lib/utils/edit-template.d.ts +10 -0
  27. package/dist/src/lib/utils/edit-template.d.ts.map +1 -0
  28. package/dist/src/lib/utils/edit-template.js +48 -0
  29. package/dist/src/lib/utils/edit-template.js.map +1 -0
  30. package/dist/src/lib/utils/fs.d.ts +10 -0
  31. package/dist/src/lib/utils/fs.d.ts.map +1 -0
  32. package/dist/src/lib/utils/fs.js +49 -0
  33. package/dist/src/lib/utils/fs.js.map +1 -0
  34. package/dist/src/lib/utils/getPkgManager.d.ts +1 -0
  35. package/dist/src/lib/utils/getPkgManager.js +21 -0
  36. package/dist/src/lib/utils/getPkgManager.js.map +1 -0
  37. package/dist/src/lib/utils/initInExistingProject.d.ts +1 -0
  38. package/dist/src/lib/utils/initInExistingProject.js +243 -0
  39. package/dist/src/lib/utils/initInExistingProject.js.map +1 -0
  40. package/dist/src/lib/utils/isRnefProject.d.ts +1 -0
  41. package/dist/src/lib/utils/isRnefProject.js +2 -0
  42. package/dist/src/lib/utils/isRnefProject.js.map +1 -0
  43. package/dist/src/lib/utils/migrateRnefProject.d.ts +2 -0
  44. package/dist/src/lib/utils/migrateRnefProject.js +206 -0
  45. package/dist/src/lib/utils/migrateRnefProject.js.map +1 -0
  46. package/dist/src/lib/utils/package-json.d.ts +2 -0
  47. package/dist/src/lib/utils/package-json.d.ts.map +1 -0
  48. package/dist/src/lib/utils/package-json.js +65 -0
  49. package/dist/src/lib/utils/package-json.js.map +1 -0
  50. package/dist/src/lib/utils/parse-cli-options.d.ts +14 -0
  51. package/dist/src/lib/utils/parse-cli-options.d.ts.map +1 -0
  52. package/dist/src/lib/utils/parse-cli-options.js +35 -0
  53. package/dist/src/lib/utils/parse-cli-options.js.map +1 -0
  54. package/dist/src/lib/utils/parsers.d.ts +10 -0
  55. package/dist/src/lib/utils/parsers.d.ts.map +1 -0
  56. package/dist/src/lib/utils/parsers.js +22 -0
  57. package/dist/src/lib/utils/parsers.js.map +1 -0
  58. package/dist/src/lib/utils/project-name.d.ts +8 -0
  59. package/dist/src/lib/utils/project-name.d.ts.map +1 -0
  60. package/dist/src/lib/utils/project-name.js +88 -0
  61. package/dist/src/lib/utils/project-name.js.map +1 -0
  62. package/dist/src/lib/utils/prompts.d.ts +14 -0
  63. package/dist/src/lib/utils/prompts.d.ts.map +1 -0
  64. package/dist/src/lib/utils/prompts.js +141 -0
  65. package/dist/src/lib/utils/prompts.js.map +1 -0
  66. package/dist/src/lib/utils/tarball.d.ts +8 -0
  67. package/dist/src/lib/utils/tarball.d.ts.map +1 -0
  68. package/dist/src/lib/utils/tarball.js +47 -0
  69. package/dist/src/lib/utils/tarball.js.map +1 -0
  70. package/dist/src/lib/utils/version.d.ts +1 -0
  71. package/dist/src/lib/utils/version.d.ts.map +1 -0
  72. package/dist/src/lib/utils/version.js +18 -0
  73. package/dist/src/lib/utils/version.js.map +1 -0
  74. package/package.json +34 -6
package/README.md ADDED
@@ -0,0 +1,67 @@
1
+ # create-rock
2
+
3
+ A CLI tool for creating new Rock projects with customizable templates, platforms, and plugins.
4
+
5
+ ## Usage
6
+
7
+ ```bash
8
+ npm create rock-app my-app
9
+ ```
10
+
11
+ ## Features
12
+
13
+ - **Interactive setup** - Guided prompts for project configuration
14
+ - **Template system** - Start with pre-configured project templates
15
+ - **Platform support** - Add iOS and Android platforms
16
+ - **Plugin system** - Extend functionality with plugins
17
+ - **Bundler choice** - Choose between Metro and Re.Pack
18
+ - **Remote cache** - Configure build caching for faster builds
19
+
20
+ ## Options
21
+
22
+ - `--template <name>` - Specify template (default: "default")
23
+ - `--platforms <platforms>` - Specify platforms (ios, android)
24
+ - `--plugins <plugins>` - Specify plugins (brownfield-ios, brownfield-android)
25
+ - `--bundler <bundler>` - Specify bundler (metro, repack)
26
+ - `--install` - Install dependencies after creation
27
+ - `--override` - Override existing directory
28
+ - `--help` - Show help information
29
+ - `--version` - Show version information
30
+
31
+ ## Examples
32
+
33
+ ```bash
34
+ # Create a basic project
35
+ npm create rock-app my-app
36
+
37
+ # Create with specific platforms
38
+ npm create rock-app my-app --platforms ios android
39
+
40
+ # Create with brownfield plugins
41
+ npm create rock-app my-app --plugins brownfield-ios brownfield-android
42
+
43
+ # Create with Re.Pack bundler
44
+ npm create rock-app my-app --bundler repack
45
+
46
+ # Create and install dependencies
47
+ npm create rock-app my-app --install
48
+ ```
49
+
50
+ ## Available Templates
51
+
52
+ - **default** - Basic React Native project template
53
+
54
+ ## Available Platforms
55
+
56
+ - **ios** - iOS platform support
57
+ - **android** - Android platform support
58
+
59
+ ## Available Plugins
60
+
61
+ - **brownfield-ios** - iOS brownfield integration
62
+ - **brownfield-android** - Android brownfield integration
63
+
64
+ ## Available Bundlers
65
+
66
+ - **metro** - Metro bundler (default)
67
+ - **repack** - Re.Pack bundler for micro-frontends
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ {"version":3,"file":"e2e.test.d.ts","sourceRoot":"","sources":["../../e2e/e2e.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,98 @@
1
+ import { existsSync, mkdirSync, readFileSync, rmSync } from 'node:fs';
2
+ import path from 'node:path';
3
+ import { execAsync, getRandomString, getTempDirectory, } from '@rock-js/test-helpers';
4
+ import { beforeEach, describe, expect, it } from 'vitest';
5
+ /**
6
+ * Perform following commands to test e2e locally (on macOS):
7
+ * pnpm build
8
+ * pnpm verdaccio:init (keep it running)
9
+ * rm -rf ~/Library/Caches/pnpm/dlx/
10
+ * pnpm e2e
11
+ */
12
+ const VERDACCIO_REGISTRY_URL = 'http://localhost:4873';
13
+ const CREATE_APP_COMMAND = `pnpm create @rock-js/app`;
14
+ const ROOT_DIR = path.resolve(__dirname, '../../..');
15
+ const TEMP_DIR = getTempDirectory('e2e-deploys');
16
+ const execArgs = {
17
+ cwd: TEMP_DIR,
18
+ env: { ...process.env, NPM_CONFIG_REGISTRY: VERDACCIO_REGISTRY_URL },
19
+ };
20
+ beforeEach(() => {
21
+ mkdirSync(TEMP_DIR, { recursive: true });
22
+ });
23
+ describe('create-app command', { timeout: 30_000 }, () => {
24
+ it('should create a new project from default template', { timeout: 30_000 }, async () => {
25
+ const projectName = `test-default-template-${getRandomString(6)}`;
26
+ const projectPath = path.resolve(TEMP_DIR, projectName);
27
+ if (existsSync(projectPath)) {
28
+ rmSync(projectPath, { recursive: true, force: true });
29
+ }
30
+ await execAsync(`${CREATE_APP_COMMAND} ${projectName} --template=default --platform=ios --platform=android --bundler=metro --remote-cache-provider=github-actions`, execArgs);
31
+ const packageJsonPath = path.join(projectPath, 'package.json');
32
+ expect(existsSync(packageJsonPath)).toBe(true);
33
+ const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
34
+ // TODO: fix template application
35
+ expect(packageJson.name).toBe(projectName);
36
+ expect(packageJson.version).toBe('1.0.0');
37
+ expect(packageJson.private).toBe(true);
38
+ expect(packageJson.description).not.toBeDefined();
39
+ expect(packageJson.author).not.toBeDefined();
40
+ expect(packageJson.license).not.toBeDefined();
41
+ expect(packageJson.repository).not.toBeDefined();
42
+ expect(packageJson.bugs).not.toBeDefined();
43
+ expect(packageJson.homepage).not.toBeDefined();
44
+ expect(packageJson.keywords).not.toBeDefined();
45
+ expect(packageJson.packageManager).not.toBeDefined();
46
+ expect(packageJson.publishConfig).not.toBeDefined();
47
+ });
48
+ it('should create a new project from npm template', async () => {
49
+ const projectName = `test-npm-template-${getRandomString(6)}`;
50
+ const projectPath = path.resolve(TEMP_DIR, projectName);
51
+ if (existsSync(projectPath)) {
52
+ rmSync(projectPath, { recursive: true, force: true });
53
+ }
54
+ await execAsync(`${CREATE_APP_COMMAND} ${projectName} --template=@rock-js/template-default --platform=ios --platform=android --bundler=metro --remote-cache-provider=github-actions`, execArgs);
55
+ const packageJsonPath = path.join(projectPath, 'package.json');
56
+ expect(existsSync(packageJsonPath)).toBe(true);
57
+ const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
58
+ // TODO: fix template application
59
+ expect(packageJson.name).toBe(projectName);
60
+ expect(packageJson.version).toBe('1.0.0');
61
+ expect(packageJson.private).toBe(true);
62
+ expect(packageJson.description).not.toBeDefined();
63
+ expect(packageJson.author).not.toBeDefined();
64
+ expect(packageJson.license).not.toBeDefined();
65
+ expect(packageJson.repository).not.toBeDefined();
66
+ expect(packageJson.bugs).not.toBeDefined();
67
+ expect(packageJson.homepage).not.toBeDefined();
68
+ expect(packageJson.keywords).not.toBeDefined();
69
+ expect(packageJson.packageManager).not.toBeDefined();
70
+ expect(packageJson.publishConfig).not.toBeDefined();
71
+ });
72
+ it('should create a new project from local directory template', { timeout: 30_000 }, async () => {
73
+ const projectName = `test-local-dir-template-${getRandomString(6)}`;
74
+ const projectPath = path.resolve(TEMP_DIR, projectName);
75
+ if (existsSync(projectPath)) {
76
+ rmSync(projectPath, { recursive: true, force: true });
77
+ }
78
+ const templatePath = `${ROOT_DIR}/templates/rock-template-default`;
79
+ await execAsync(`${CREATE_APP_COMMAND} ${projectName} --template="${templatePath}" --platform=ios --platform=android --bundler=metro --remote-cache-provider=github-actions`, execArgs);
80
+ const packageJsonPath = path.join(projectPath, 'package.json');
81
+ expect(existsSync(packageJsonPath)).toBe(true);
82
+ const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
83
+ // TODO: fix template application
84
+ expect(packageJson.name).toBe(projectName);
85
+ expect(packageJson.version).toBe('1.0.0');
86
+ expect(packageJson.private).toBe(true);
87
+ expect(packageJson.description).not.toBeDefined();
88
+ expect(packageJson.author).not.toBeDefined();
89
+ expect(packageJson.license).not.toBeDefined();
90
+ expect(packageJson.repository).not.toBeDefined();
91
+ expect(packageJson.bugs).not.toBeDefined();
92
+ expect(packageJson.homepage).not.toBeDefined();
93
+ expect(packageJson.keywords).not.toBeDefined();
94
+ expect(packageJson.packageManager).not.toBeDefined();
95
+ expect(packageJson.publishConfig).not.toBeDefined();
96
+ });
97
+ });
98
+ //# sourceMappingURL=e2e.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"e2e.test.js","sourceRoot":"","sources":["../../e2e/e2e.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.d.ts","sourceRoot":"","sources":["../../src/bin.ts"],"names":[],"mappings":""}
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env node
2
+ import { run } from './lib/bin.js';
3
+ try {
4
+ await run();
5
+ }
6
+ catch (error) {
7
+ console.error('Error', error);
8
+ process.exit(1);
9
+ }
10
+ //# sourceMappingURL=bin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.js","sourceRoot":"","sources":["../../src/bin.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAEnC,IAAI,CAAC;IACH,MAAM,GAAG,EAAE,CAAC;AACd,CAAC;AAAC,OAAO,KAAK,EAAE,CAAC;IACf,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC9B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
@@ -0,0 +1 @@
1
+ export * from './lib/bin.js';
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './lib/bin.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { type SupportedRemoteCacheProviders } from '@rock-js/tools';
2
+ import type { TemplateInfo } from './templates.js';
3
+ export declare function run(): Promise<void>;
4
+ export declare function formatConfig(platforms: TemplateInfo[], plugins: TemplateInfo[] | null, bundler: TemplateInfo, remoteCacheProvider: SupportedRemoteCacheProviders | null): string;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.d.ts","sourceRoot":"","sources":["../../../src/lib/bin.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,aAAa,CAAC;AAUjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AA2CnD,wBAAsB,GAAG,kBAoGxB;AAoFD,wBAAgB,YAAY,CAC1B,SAAS,EAAE,YAAY,EAAE,EACzB,OAAO,EAAE,YAAY,EAAE,GAAG,IAAI,EAC9B,OAAO,EAAE,YAAY,EACrB,mBAAmB,EAAE,6BAA6B,GAAG,IAAI,UAoC1D"}
@@ -0,0 +1,210 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import { cancelPromptAndExit, isInteractive, logger, promptConfirm, resolveAbsolutePath, RockError, spawn, spinner, } from '@rock-js/tools';
4
+ import { gitInitStep, hasGitClient, isGitRepo } from './steps/git-init.js';
5
+ import { BUNDLERS, PLATFORMS, PLUGINS, resolveTemplate, TEMPLATES, } from './templates.js';
6
+ import { renameCommonFiles, replacePlaceholder, } from './utils/edit-template.js';
7
+ import { copyDirSync, isEmptyDirSync, removeDirSync } from './utils/fs.js';
8
+ import { getPkgManager } from './utils/getPkgManager.js';
9
+ import { initInExistingProject } from './utils/initInExistingProject.js';
10
+ import { migrateRnefProject } from './utils/migrateRnefProject.js';
11
+ import { rewritePackageJson } from './utils/package-json.js';
12
+ import { parseCliOptions } from './utils/parse-cli-options.js';
13
+ import { parsePackageInfo } from './utils/parsers.js';
14
+ import { normalizeProjectName, validateProjectName, } from './utils/project-name.js';
15
+ import { confirmOverrideFiles, printByeMessage, printHelpMessage, printVersionMessage, printWelcomeMessage, promptBundlers, promptInstallDependencies, promptPlatforms, promptPlugins, promptProjectName, promptRemoteCacheProvider, promptTemplate, } from './utils/prompts.js';
16
+ import { downloadTarballFromNpm, extractTarballToTempDirectory, } from './utils/tarball.js';
17
+ import { getRockVersion } from './utils/version.js';
18
+ export async function run() {
19
+ const options = parseCliOptions(process.argv.slice(2));
20
+ const version = getRockVersion();
21
+ if (options.help) {
22
+ printHelpMessage(TEMPLATES, PLATFORMS);
23
+ return;
24
+ }
25
+ if (options.version) {
26
+ printVersionMessage();
27
+ return;
28
+ }
29
+ printWelcomeMessage();
30
+ const projectRoot = resolveAbsolutePath(options.dir || process.cwd());
31
+ if (isRnefProject(projectRoot)) {
32
+ await validateGitStatus(projectRoot);
33
+ const shouldMigrate = await promptConfirm({
34
+ message: `Detected existing RNEF project. Would you like to migrate it to Rock?`,
35
+ confirmLabel: 'Yes',
36
+ cancelLabel: 'No',
37
+ });
38
+ if (!shouldMigrate) {
39
+ cancelPromptAndExit();
40
+ }
41
+ await migrateRnefProject(projectRoot);
42
+ return;
43
+ }
44
+ if (isReactNativeProject(projectRoot)) {
45
+ await validateGitStatus(projectRoot);
46
+ const shouldInit = await promptConfirm({
47
+ message: `Detected existing React Native project. Would you like to initialize Rock in this project?`,
48
+ confirmLabel: 'Yes',
49
+ cancelLabel: 'No',
50
+ });
51
+ if (!shouldInit) {
52
+ cancelPromptAndExit();
53
+ }
54
+ await initInExistingProject(projectRoot);
55
+ return;
56
+ }
57
+ let projectName = (options.dir || options.name) ?? (await promptProjectName());
58
+ if (validateProjectName(projectName)) {
59
+ projectName = await promptProjectName(projectName);
60
+ }
61
+ const { targetDir } = parsePackageInfo(projectName);
62
+ const absoluteTargetDir = resolveAbsolutePath(targetDir);
63
+ if (!options.override &&
64
+ fs.existsSync(absoluteTargetDir) &&
65
+ !isEmptyDirSync(absoluteTargetDir)) {
66
+ const confirmOverride = await confirmOverrideFiles(absoluteTargetDir);
67
+ if (!confirmOverride) {
68
+ cancelPromptAndExit();
69
+ }
70
+ }
71
+ removeDirSync(absoluteTargetDir);
72
+ fs.mkdirSync(absoluteTargetDir, { recursive: true });
73
+ const template = options.template
74
+ ? resolveTemplate(TEMPLATES, options.template)
75
+ : await promptTemplate(TEMPLATES);
76
+ const platforms = options.platforms
77
+ ? options.platforms.map((p) => resolveTemplate(PLATFORMS, p))
78
+ : await promptPlatforms(PLATFORMS);
79
+ const bundler = options.bundler
80
+ ? resolveTemplate(BUNDLERS, options.bundler)
81
+ : await promptBundlers(BUNDLERS);
82
+ const plugins = options.plugins
83
+ ? options.plugins.map((p) => resolveTemplate(PLUGINS, p))
84
+ : await promptPlugins(PLUGINS);
85
+ const remoteCacheProvider = options.remoteCacheProvider !== undefined ||
86
+ options.remoteCacheProvider === false
87
+ ? null
88
+ : await promptRemoteCacheProvider();
89
+ const shouldInstallDependencies = options.install || isInteractive()
90
+ ? await promptInstallDependencies()
91
+ : false;
92
+ const loader = spinner();
93
+ loader.start('Applying template, platforms and plugins');
94
+ await extractPackage(absoluteTargetDir, template);
95
+ for (const platform of platforms) {
96
+ await extractPackage(absoluteTargetDir, platform);
97
+ }
98
+ await extractPackage(absoluteTargetDir, bundler);
99
+ for (const plugin of plugins ?? []) {
100
+ await extractPackage(absoluteTargetDir, plugin);
101
+ }
102
+ renameCommonFiles(absoluteTargetDir);
103
+ replacePlaceholder(absoluteTargetDir, normalizeProjectName(projectName));
104
+ // For package.json name we can use any valid name (kebab-case, PascalCase, etc).
105
+ rewritePackageJson(absoluteTargetDir, projectName);
106
+ createConfig(absoluteTargetDir, platforms, plugins, bundler, remoteCacheProvider);
107
+ loader.stop('Applied template, platforms and plugins.');
108
+ const pkgManager = getPkgManager();
109
+ if (shouldInstallDependencies) {
110
+ await installDependencies(absoluteTargetDir, pkgManager);
111
+ }
112
+ await gitInitStep(absoluteTargetDir, version);
113
+ printByeMessage(absoluteTargetDir, pkgManager, shouldInstallDependencies);
114
+ }
115
+ function isReactNativeProject(dir) {
116
+ const packageJson = path.join(dir, 'package.json');
117
+ if (!fs.existsSync(packageJson)) {
118
+ return false;
119
+ }
120
+ const packageJsonContent = JSON.parse(fs.readFileSync(packageJson, 'utf8'));
121
+ return (packageJsonContent.dependencies?.['react-native'] !== undefined ||
122
+ packageJsonContent.devDependencies?.['react-native'] !== undefined);
123
+ }
124
+ function isRnefProject(dir) {
125
+ const packageJson = path.join(dir, 'package.json');
126
+ if (!fs.existsSync(packageJson)) {
127
+ return false;
128
+ }
129
+ const packageJsonContent = JSON.parse(fs.readFileSync(packageJson, 'utf8'));
130
+ return (packageJsonContent.dependencies?.['@rnef/cli'] !== undefined ||
131
+ packageJsonContent.devDependencies?.['@rnef/cli'] !== undefined);
132
+ }
133
+ async function validateGitStatus(dir) {
134
+ if ((await isGitRepo(dir)) && (await hasGitClient())) {
135
+ const { output } = await spawn('git', ['status', '--porcelain'], {
136
+ cwd: dir,
137
+ });
138
+ if (output.trim() !== '') {
139
+ logger.error('Git has uncommitted changes. Please commit or stash your changes before continuing with initializing Rock in existing project.');
140
+ process.exit(1);
141
+ }
142
+ }
143
+ }
144
+ async function installDependencies(absoluteTargetDir, pkgManager) {
145
+ const loader = spinner();
146
+ loader.start(`Installing dependencies with ${pkgManager}`);
147
+ await spawn(pkgManager, ['install'], { cwd: absoluteTargetDir });
148
+ loader.stop(`Installed dependencies with ${pkgManager}`);
149
+ }
150
+ async function extractPackage(absoluteTargetDir, pkg) {
151
+ let tarballPath = null;
152
+ // NPM package: download tarball file
153
+ if (pkg.type === 'npm') {
154
+ tarballPath = await downloadTarballFromNpm(pkg.packageName, pkg.version, absoluteTargetDir);
155
+ }
156
+ // Local tarball file
157
+ else if (pkg.localPath?.endsWith('.tgz') ||
158
+ pkg.localPath?.endsWith('.tar.gz') ||
159
+ pkg.localPath?.endsWith('.tar')) {
160
+ tarballPath = pkg.localPath;
161
+ }
162
+ // Extract tarball file: either from NPM or local one
163
+ if (tarballPath) {
164
+ const localPath = await extractTarballToTempDirectory(absoluteTargetDir, tarballPath);
165
+ if (pkg.packageName) {
166
+ fs.unlinkSync(tarballPath);
167
+ }
168
+ copyDirSync(path.join(localPath, pkg.directory ?? ''), absoluteTargetDir);
169
+ removeDirSync(localPath);
170
+ return;
171
+ }
172
+ if (pkg.type === 'local') {
173
+ copyDirSync(path.join(pkg.localPath, pkg.directory ?? ''), absoluteTargetDir);
174
+ return;
175
+ }
176
+ // This should never happen as we have either NPM package or local path (tarball or directory).
177
+ throw new RockError(`Invalid state: template not found: ${JSON.stringify(pkg, null, 2)}`);
178
+ }
179
+ function createConfig(absoluteTargetDir, platforms, plugins, bundler, remoteCacheProvider) {
180
+ const rockConfig = path.join(absoluteTargetDir, 'rock.config.mjs');
181
+ fs.writeFileSync(rockConfig, formatConfig(platforms, plugins, bundler, remoteCacheProvider));
182
+ }
183
+ export function formatConfig(platforms, plugins, bundler, remoteCacheProvider) {
184
+ const platformsWithImports = platforms.filter((template) => template.importName);
185
+ const pluginsWithImports = plugins
186
+ ? plugins.filter((template) => template.importName)
187
+ : null;
188
+ return `${[...platformsWithImports, ...(pluginsWithImports ?? []), bundler]
189
+ .map((template) => `import { ${template.importName} } from '${template.packageName}';`)
190
+ .join('\n')}
191
+
192
+ export default {${pluginsWithImports
193
+ ? `
194
+ plugins: [
195
+ ${pluginsWithImports
196
+ .map((template) => `${template.importName}(),`)
197
+ .join('\n ')}
198
+ ],`
199
+ : ''}
200
+ bundler: ${bundler.importName}(),
201
+ platforms: {
202
+ ${platformsWithImports
203
+ .map((template) => `${template.name}: ${template.importName}(),`)
204
+ .join('\n ')}
205
+ },
206
+ remoteCacheProvider: ${remoteCacheProvider === null ? null : `'${remoteCacheProvider}'`},
207
+ };
208
+ `;
209
+ }
210
+ //# sourceMappingURL=bin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.js","sourceRoot":"","sources":["../../../src/lib/bin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function gitInitStep(path: string, version: string | null): Promise<void>;
2
+ export declare function hasGitClient(): Promise<boolean>;
3
+ export declare function isGitRepo(path: string): Promise<boolean>;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-init.d.ts","sourceRoot":"","sources":["../../../../src/lib/steps/git-init.ts"],"names":[],"mappings":"AAEA,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,iBAoBrE"}
@@ -0,0 +1,51 @@
1
+ import { logger, spawn, spinner } from '@rock-js/tools';
2
+ export async function gitInitStep(path, version) {
3
+ if (!(await hasGitClient())) {
4
+ logger.info('Git client not found, skipping git initialization');
5
+ return;
6
+ }
7
+ if (await isGitRepo(path)) {
8
+ logger.debug('Git repo already initialized, skipping git initialization');
9
+ return;
10
+ }
11
+ const loader = spinner();
12
+ loader.start('Initializing git repo');
13
+ const message = `Initial commit\n\nGenerated by rock${version ? `@${version}` : ''}.`;
14
+ await initGitRepo(path, message);
15
+ loader.stop('Git repo initialized.');
16
+ }
17
+ async function initGitRepo(path, message) {
18
+ try {
19
+ await spawn('git', ['init'], { cwd: path });
20
+ await spawn('git', ['branch', '-M', 'main'], { cwd: path });
21
+ await spawn('git', ['add', '.'], { cwd: path });
22
+ await spawn('git', ['commit', '-m', message], {
23
+ cwd: path,
24
+ });
25
+ }
26
+ catch (error) {
27
+ logger.warn('Failed to initialize git repository', error);
28
+ }
29
+ }
30
+ export async function hasGitClient() {
31
+ try {
32
+ await spawn('git', ['--version'], { stdio: 'ignore' });
33
+ return true;
34
+ }
35
+ catch {
36
+ return false;
37
+ }
38
+ }
39
+ export async function isGitRepo(path) {
40
+ try {
41
+ await spawn('git', ['rev-parse', '--is-inside-work-tree'], {
42
+ stdio: 'ignore',
43
+ cwd: path,
44
+ });
45
+ return true;
46
+ }
47
+ catch {
48
+ return false;
49
+ }
50
+ }
51
+ //# sourceMappingURL=git-init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-init.js","sourceRoot":"","sources":["../../../../src/lib/steps/git-init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAExD,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAY,EAAE,OAAsB;IACpE,IAAI,CAAC,CAAC,MAAM,YAAY,EAAE,CAAC,EAAE,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;QACjE,OAAO;IACT,CAAC;IAED,IAAI,MAAM,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1B,MAAM,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAC;QAC1E,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,EAAE,CAAC;IACzB,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAEtC,MAAM,OAAO,GAAG,sCACd,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC,CAAC,EAC5B,GAAG,CAAC;IACJ,MAAM,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAEjC,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;AACvC,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,IAAY,EAAE,OAAe;IACtD,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5C,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5D,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE;YAC5C,GAAG,EAAE,IAAI;SACV,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,qCAAqC,EAAE,KAAK,CAAC,CAAC;IAC5D,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QACvD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAY;IAC1C,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,uBAAuB,CAAC,EAAE;YACzD,KAAK,EAAE,QAAQ;YACf,GAAG,EAAE,IAAI;SACV,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -0,0 +1,23 @@
1
+ export type TemplateInfo = NpmTemplateInfo | LocalTemplateInfo;
2
+ export type NpmTemplateInfo = {
3
+ type: 'npm';
4
+ name: string;
5
+ version: string;
6
+ packageName: string;
7
+ /** Directory inside package that contains the template */
8
+ directory: string | undefined;
9
+ importName?: string;
10
+ };
11
+ export type LocalTemplateInfo = {
12
+ type: 'local';
13
+ name: string;
14
+ localPath: string;
15
+ packageName: string;
16
+ directory: string | undefined;
17
+ importName?: string;
18
+ };
19
+ export declare const TEMPLATES: TemplateInfo[];
20
+ export declare const PLUGINS: TemplateInfo[];
21
+ export declare const BUNDLERS: TemplateInfo[];
22
+ export declare const PLATFORMS: TemplateInfo[];
23
+ export declare function resolveTemplate(templates: TemplateInfo[], name: string): TemplateInfo;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../../src/lib/templates.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,YAAY,GAAG,eAAe,GAAG,iBAAiB,CAAC;AAE/D,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,KAAK,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,0DAA0D;IAC1D,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,YAAY,EAQnC,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,YAAY,EAiBjC,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,YAAY,EAiBlC,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,YAAY,EAiBnC,CAAC;AAEF,wBAAgB,eAAe,CAC7B,SAAS,EAAE,YAAY,EAAE,EACzB,IAAI,EAAE,MAAM,GACX,YAAY,CAwCd"}