Skip to content
This repository was archived by the owner on Dec 1, 2022. It is now read-only.

Commit 2694cc6

Browse files
Try to solve issues on Windows
1 parent 2740218 commit 2694cc6

File tree

1 file changed

+143
-182
lines changed

1 file changed

+143
-182
lines changed

dist/index.js

Lines changed: 143 additions & 182 deletions
Original file line numberDiff line numberDiff line change
@@ -1,120 +1,100 @@
11
#!/usr/bin/env node
22
'use strict';
3-
var __importDefault =
4-
(this && this.__importDefault) ||
5-
function (mod) {
6-
return mod && mod.__esModule ? mod : { default: mod };
7-
};
8-
Object.defineProperty(exports, '__esModule', { value: true });
3+
var __importDefault = (this && this.__importDefault) || function (mod) {
4+
return (mod && mod.__esModule) ? mod : { "default": mod };
5+
};
6+
Object.defineProperty(exports, "__esModule", { value: true });
97
const LogColor = '\x1b[32m';
10-
const child_process_1 = require('child_process');
11-
const fs_extra_1 = __importDefault(require('fs-extra'));
12-
const path_1 = __importDefault(require('path'));
13-
const yargs_1 = __importDefault(require('yargs'));
8+
const child_process_1 = require("child_process");
9+
const fs_extra_1 = __importDefault(require("fs-extra"));
10+
const path_1 = __importDefault(require("path"));
11+
const yargs_1 = __importDefault(require("yargs"));
1412
const argv = yargs_1.default
15-
.help()
16-
.option('name', {
13+
.help()
14+
.option('name', {
1715
alias: 'n',
1816
description: 'Name of the app',
1917
type: 'string',
20-
})
21-
.alias('help', 'h').argv;
18+
})
19+
.alias('help', 'h').argv;
2220
if (!argv.name) {
23-
console.log('You should specify the name of the app with --name');
24-
process.exit();
21+
console.log('You should specify the name of the app with --name');
22+
process.exit();
2523
}
2624
// run the app ;)
2725
app();
2826
async function app() {
29-
const appName = argv.name;
30-
const appNameWeb = appName + '-web-will-be-deleted-afterwards';
31-
logSpaced(`
27+
const appName = argv.name;
28+
const appNameWeb = appName + '-web-will-be-deleted-afterwards';
29+
logSpaced(`
3230
Creating ${appName}, brought to you by webRidge.
3331
3432
Please wait till everything is finished :)
3533
3634
`);
37-
try {
38-
await Promise.all([
39-
createReactNativeApp(appName),
40-
createReactScriptsApp(appNameWeb),
41-
]);
42-
} catch (error) {
43-
console.log('Could not create React Native project', { error });
44-
}
45-
logSpaced(
46-
"Created two projects in two directories. Let's merge them to one project ;)"
47-
);
48-
const webPackagePath = appNameWeb + '/package.json';
49-
const webPackageFile = fs_extra_1.default.readFileSync(
50-
webPackagePath,
51-
'utf8'
52-
);
53-
const webPackageJSON = JSON.parse(webPackageFile);
54-
const removePackages = ['web-vitals'];
55-
const webDependencies = Object.keys(webPackageJSON.dependencies)
56-
.filter((packageName) => !removePackages.includes(packageName))
57-
.map((packageName) => ({
58-
name: packageName,
59-
version: webPackageJSON.dependencies[packageName],
60-
isDev: packageName.includes('@testing-library'),
35+
try {
36+
await Promise.all([
37+
createReactNativeApp(appName),
38+
createReactScriptsApp(appNameWeb),
39+
]);
40+
}
41+
catch (error) {
42+
console.log('Could not create React Native project', { error });
43+
}
44+
logSpaced("Created two projects in two directories. Let's merge them to one project ;)");
45+
const webPackagePath = appNameWeb + '/package.json';
46+
const webPackageFile = fs_extra_1.default.readFileSync(webPackagePath, 'utf8');
47+
const webPackageJSON = JSON.parse(webPackageFile);
48+
const removePackages = ['web-vitals'];
49+
const webDependencies = Object.keys(webPackageJSON.dependencies)
50+
.filter((packageName) => !removePackages.includes(packageName))
51+
.map((packageName) => ({
52+
name: packageName,
53+
version: webPackageJSON.dependencies[packageName],
54+
isDev: packageName.includes('@testing-library'),
6155
}));
62-
const reactNativePackagePath = appName + '/package.json';
63-
const reactNativePackageFile = fs_extra_1.default.readFileSync(
64-
reactNativePackagePath,
65-
'utf8'
66-
);
67-
const reactNativePackageJSON = JSON.parse(reactNativePackageFile);
68-
let webScripts = replaceValuesOfObject(
69-
prefixObject(webPackageJSON.scripts, 'web:'),
70-
'react-scripts',
71-
'react-app-rewired'
72-
);
73-
// more like yarn android, yarn ios, yarn web
74-
//@ts-ignore
75-
let webStartCommand = webScripts['web:start'];
76-
delete webScripts['web:start'];
77-
//@ts-ignore
78-
webScripts.web = webStartCommand;
79-
// console.log({ webScripts });
80-
const mergedPackageJSON = {
81-
...reactNativePackageJSON,
82-
// we're gonna merge scripts and dependencies ourself :)
83-
...excludeObjectKeys(webPackageJSON, ['dependencies', 'scripts', 'name']),
84-
scripts: {
85-
...reactNativePackageJSON.scripts,
86-
...webScripts,
87-
},
88-
};
89-
// write merged package.json down
90-
fs_extra_1.default.writeFileSync(
91-
reactNativePackagePath,
92-
JSON.stringify(mergedPackageJSON)
93-
);
94-
// install web packages to native project
95-
await installPackages(
96-
[
97-
...webDependencies,
98-
{ name: 'react-native-web' },
99-
{ name: 'react-app-rewired', isDev: true },
100-
{ name: 'customize-cra', isDev: true },
101-
{ name: 'typescript', isDev: true },
102-
{ name: '@types/react-native', isDev: true },
103-
{ name: '@types/react', isDev: true },
104-
{ name: 'babel-plugin-import', isDev: true },
105-
],
106-
appName
107-
);
108-
// copy template files
109-
const templateDir =
110-
path_1.default.dirname(require.main.filename) + '/template';
111-
logSpaced({ templateDir });
112-
fs_extra_1.default.copySync(templateDir, appName);
113-
fs_extra_1.default.copySync(appNameWeb + '/public', appName + '/public');
114-
fs_extra_1.default.unlinkSync(appName + '/App.js');
115-
fs_extra_1.default.removeSync(appNameWeb);
116-
logSpaced("Yeah!! We're done!");
117-
logSpaced(`
56+
const reactNativePackagePath = appName + '/package.json';
57+
const reactNativePackageFile = fs_extra_1.default.readFileSync(reactNativePackagePath, 'utf8');
58+
const reactNativePackageJSON = JSON.parse(reactNativePackageFile);
59+
let webScripts = replaceValuesOfObject(prefixObject(webPackageJSON.scripts, 'web:'), 'react-scripts', 'react-app-rewired');
60+
// more like yarn android, yarn ios, yarn web
61+
//@ts-ignore
62+
let webStartCommand = webScripts['web:start'];
63+
delete webScripts['web:start'];
64+
//@ts-ignore
65+
webScripts.web = webStartCommand;
66+
// console.log({ webScripts });
67+
const mergedPackageJSON = {
68+
...reactNativePackageJSON,
69+
// we're gonna merge scripts and dependencies ourself :)
70+
...excludeObjectKeys(webPackageJSON, ['dependencies', 'scripts', 'name']),
71+
scripts: {
72+
...reactNativePackageJSON.scripts,
73+
...webScripts,
74+
},
75+
};
76+
// write merged package.json down
77+
fs_extra_1.default.writeFileSync(reactNativePackagePath, JSON.stringify(mergedPackageJSON));
78+
// install web packages to native project
79+
await installPackages([
80+
...webDependencies,
81+
{ name: 'react-native-web' },
82+
{ name: 'react-app-rewired', isDev: true },
83+
{ name: 'customize-cra', isDev: true },
84+
{ name: 'typescript', isDev: true },
85+
{ name: '@types/react-native', isDev: true },
86+
{ name: '@types/react', isDev: true },
87+
{ name: 'babel-plugin-import', isDev: true },
88+
], appName);
89+
// copy template files
90+
const templateDir = path_1.default.dirname(require.main.filename) + '/template';
91+
logSpaced({ templateDir });
92+
fs_extra_1.default.copySync(templateDir, appName);
93+
fs_extra_1.default.copySync(appNameWeb + '/public', appName + '/public');
94+
fs_extra_1.default.unlinkSync(appName + '/App.js');
95+
fs_extra_1.default.removeSync(appNameWeb);
96+
logSpaced("Yeah!! We're done!");
97+
logSpaced(`
11898
Start your app with by going to the created directory: 'cd ${appName}'
11999
120100
yarn android
@@ -126,104 +106,85 @@ async function app() {
126106
`);
127107
}
128108
async function installPackages(packages, directory) {
129-
await installPackagesAdvanced(
130-
packages.filter((p) => p.isDev === true),
131-
directory,
132-
true
133-
);
134-
await installPackagesAdvanced(
135-
packages.filter((p) => !p.isDev),
136-
directory,
137-
false
138-
);
109+
await installPackagesAdvanced(packages.filter((p) => p.isDev === true), directory, true);
110+
await installPackagesAdvanced(packages.filter((p) => !p.isDev), directory, false);
139111
}
140112
async function installPackagesAdvanced(packages, directory, dev) {
141-
return new Promise((resolve, reject) => {
142-
const joinedPackages = packages.map(
143-
(p) => p.name + (p.version ? `@${p.version}` : ``)
144-
);
145-
// console.log({ joinedPackages });
146-
const createReactNativeProcess = child_process_1.spawn(
147-
'yarn',
148-
[
149-
'--cwd',
150-
directory,
151-
'add',
152-
...joinedPackages,
153-
dev ? '--dev' : undefined,
154-
].filter((n) => !!n),
155-
{ stdio: 'inherit', shell: true }
156-
);
157-
createReactNativeProcess.on('error', function (error) {
158-
reject(error);
113+
return new Promise((resolve, reject) => {
114+
const joinedPackages = packages.map((p) => p.name + (p.version ? `@${p.version}` : ``));
115+
// console.log({ joinedPackages });
116+
const createReactNativeProcess = child_process_1.spawn(spawnPlatform('yarn'), [
117+
'--cwd',
118+
directory,
119+
'add',
120+
...joinedPackages,
121+
dev ? '--dev' : undefined,
122+
].filter((n) => !!n), { stdio: 'inherit', shell: true });
123+
createReactNativeProcess.on('error', function (error) {
124+
reject(error);
125+
});
126+
createReactNativeProcess.on('exit', function (response) {
127+
resolve(response);
128+
});
159129
});
160-
createReactNativeProcess.on('exit', function (response) {
161-
resolve(response);
162-
});
163-
});
164130
}
165131
async function createReactNativeApp(appName) {
166-
return new Promise((resolve, reject) => {
167-
const createReactNativeProcess = child_process_1.spawn(
168-
'npx',
169-
['react-native', 'init', appName],
170-
{ stdio: 'inherit', shell: true }
171-
);
172-
createReactNativeProcess.on('error', function (error) {
173-
reject(error);
174-
});
175-
createReactNativeProcess.on('exit', function (response) {
176-
resolve(response);
132+
return new Promise((resolve, reject) => {
133+
const createReactNativeProcess = child_process_1.spawn(spawnPlatform('npx'), ['react-native', 'init', appName], { stdio: 'inherit', shell: true });
134+
createReactNativeProcess.on('error', function (error) {
135+
reject(error);
136+
});
137+
createReactNativeProcess.on('exit', function (response) {
138+
resolve(response);
139+
});
177140
});
178-
});
179141
}
180142
async function createReactScriptsApp(appName) {
181-
return new Promise(function (resolve, reject) {
182-
const createReactNativeProcess = child_process_1.spawn(
183-
'npx',
184-
['create-react-app', appName],
185-
{ stdio: 'inherit', shell: true }
186-
);
187-
createReactNativeProcess.on('error', function (error) {
188-
reject(error);
143+
return new Promise(function (resolve, reject) {
144+
const createReactNativeProcess = child_process_1.spawn(spawnPlatform('npx'), ['create-react-app', appName], { stdio: 'inherit', shell: true });
145+
createReactNativeProcess.on('error', function (error) {
146+
reject(error);
147+
});
148+
createReactNativeProcess.on('exit', function (response) {
149+
resolve(response);
150+
});
189151
});
190-
createReactNativeProcess.on('exit', function (response) {
191-
resolve(response);
192-
});
193-
});
194152
}
195-
153+
function spawnPlatform(s) {
154+
const isWin = process.platform === 'win32';
155+
if (isWin) {
156+
return s + '.cmd';
157+
}
158+
return s;
159+
}
196160
function logSpaced(args) {
197-
console.log('');
198-
console.log(LogColor, args);
199-
console.log('');
161+
console.log('');
162+
console.log(LogColor, args);
163+
console.log('');
200164
}
201-
202165
function excludeObjectKeys(object, ignoredKeys) {
203-
let newObject = { ...object };
204-
ignoredKeys.forEach(function (key) {
205-
delete newObject[key];
206-
});
207-
return newObject;
166+
let newObject = { ...object };
167+
ignoredKeys.forEach(function (key) {
168+
delete newObject[key];
169+
});
170+
return newObject;
208171
}
209-
210172
function replaceValuesOfObject(object, search, replace) {
211-
let newObject = {};
212-
Object.keys(object).forEach((key) => {
213-
// console.log({ key });
214-
const value = object[key];
215-
// console.log({ value });
216-
if (value) {
217-
newObject[key] = value.replace ? value.replace(search, replace) : value;
218-
}
219-
});
220-
return newObject;
173+
let newObject = {};
174+
Object.keys(object).forEach((key) => {
175+
// console.log({ key });
176+
const value = object[key];
177+
// console.log({ value });
178+
if (value) {
179+
newObject[key] = value.replace ? value.replace(search, replace) : value;
180+
}
181+
});
182+
return newObject;
221183
}
222-
223184
function prefixObject(object, prefix) {
224-
let newObject = {};
225-
Object.keys(object).forEach((key) => {
226-
newObject[prefix + key] = object[key];
227-
});
228-
return newObject;
185+
let newObject = {};
186+
Object.keys(object).forEach((key) => {
187+
newObject[prefix + key] = object[key];
188+
});
189+
return newObject;
229190
}

0 commit comments

Comments
 (0)