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.
- package/README.md +67 -0
- package/dist/e2e/e2e.test.d.ts +1 -0
- package/dist/e2e/e2e.test.d.ts.map +1 -0
- package/dist/e2e/e2e.test.js +98 -0
- package/dist/e2e/e2e.test.js.map +1 -0
- package/dist/src/bin.d.ts +2 -0
- package/dist/src/bin.d.ts.map +1 -0
- package/dist/src/bin.js +10 -0
- package/dist/src/bin.js.map +1 -0
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +2 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/lib/bin.d.ts +4 -0
- package/dist/src/lib/bin.d.ts.map +1 -0
- package/dist/src/lib/bin.js +210 -0
- package/dist/src/lib/bin.js.map +1 -0
- package/dist/src/lib/steps/git-init.d.ts +3 -0
- package/dist/src/lib/steps/git-init.d.ts.map +1 -0
- package/dist/src/lib/steps/git-init.js +51 -0
- package/dist/src/lib/steps/git-init.js.map +1 -0
- package/dist/src/lib/templates.d.ts +23 -0
- package/dist/src/lib/templates.d.ts.map +1 -0
- package/dist/src/lib/templates.js +122 -0
- package/dist/src/lib/templates.js.map +1 -0
- package/dist/src/lib/utils/edit-template.d.ts +10 -0
- package/dist/src/lib/utils/edit-template.d.ts.map +1 -0
- package/dist/src/lib/utils/edit-template.js +48 -0
- package/dist/src/lib/utils/edit-template.js.map +1 -0
- package/dist/src/lib/utils/fs.d.ts +10 -0
- package/dist/src/lib/utils/fs.d.ts.map +1 -0
- package/dist/src/lib/utils/fs.js +49 -0
- package/dist/src/lib/utils/fs.js.map +1 -0
- package/dist/src/lib/utils/getPkgManager.d.ts +1 -0
- package/dist/src/lib/utils/getPkgManager.js +21 -0
- package/dist/src/lib/utils/getPkgManager.js.map +1 -0
- package/dist/src/lib/utils/initInExistingProject.d.ts +1 -0
- package/dist/src/lib/utils/initInExistingProject.js +243 -0
- package/dist/src/lib/utils/initInExistingProject.js.map +1 -0
- package/dist/src/lib/utils/isRnefProject.d.ts +1 -0
- package/dist/src/lib/utils/isRnefProject.js +2 -0
- package/dist/src/lib/utils/isRnefProject.js.map +1 -0
- package/dist/src/lib/utils/migrateRnefProject.d.ts +2 -0
- package/dist/src/lib/utils/migrateRnefProject.js +206 -0
- package/dist/src/lib/utils/migrateRnefProject.js.map +1 -0
- package/dist/src/lib/utils/package-json.d.ts +2 -0
- package/dist/src/lib/utils/package-json.d.ts.map +1 -0
- package/dist/src/lib/utils/package-json.js +65 -0
- package/dist/src/lib/utils/package-json.js.map +1 -0
- package/dist/src/lib/utils/parse-cli-options.d.ts +14 -0
- package/dist/src/lib/utils/parse-cli-options.d.ts.map +1 -0
- package/dist/src/lib/utils/parse-cli-options.js +35 -0
- package/dist/src/lib/utils/parse-cli-options.js.map +1 -0
- package/dist/src/lib/utils/parsers.d.ts +10 -0
- package/dist/src/lib/utils/parsers.d.ts.map +1 -0
- package/dist/src/lib/utils/parsers.js +22 -0
- package/dist/src/lib/utils/parsers.js.map +1 -0
- package/dist/src/lib/utils/project-name.d.ts +8 -0
- package/dist/src/lib/utils/project-name.d.ts.map +1 -0
- package/dist/src/lib/utils/project-name.js +88 -0
- package/dist/src/lib/utils/project-name.js.map +1 -0
- package/dist/src/lib/utils/prompts.d.ts +14 -0
- package/dist/src/lib/utils/prompts.d.ts.map +1 -0
- package/dist/src/lib/utils/prompts.js +141 -0
- package/dist/src/lib/utils/prompts.js.map +1 -0
- package/dist/src/lib/utils/tarball.d.ts +8 -0
- package/dist/src/lib/utils/tarball.d.ts.map +1 -0
- package/dist/src/lib/utils/tarball.js +47 -0
- package/dist/src/lib/utils/tarball.js.map +1 -0
- package/dist/src/lib/utils/version.d.ts +1 -0
- package/dist/src/lib/utils/version.d.ts.map +1 -0
- package/dist/src/lib/utils/version.js +18 -0
- package/dist/src/lib/utils/version.js.map +1 -0
- 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 @@
|
|
|
1
|
+
{"version":3,"file":"bin.d.ts","sourceRoot":"","sources":["../../src/bin.ts"],"names":[],"mappings":""}
|
package/dist/src/bin.js
ADDED
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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"}
|