[dev] add create firebase module from template script

This commit is contained in:
Salakar
2019-02-04 17:33:27 +00:00
parent 72bed1b04f
commit c67f816701
7 changed files with 188 additions and 30 deletions

View File

@@ -13,9 +13,6 @@
"ignoreChanges": [
"*.md"
]
},
"bootstrap": {
"ignore": "*-template-*"
}
},
"version": "6.0.0-alpha.2"

View File

@@ -28,9 +28,9 @@
"tests:ios:test-cover": "cd tests && nyc ./node_modules/.bin/detox test --configuration ios.sim.debug",
"tests:ios:test-cover-reuse": "cd tests && nyc detox test --configuration ios.sim.debug --reuse --loglevel warn",
"tests:ios:pod:install": "cd tests && cd ios && rm -rf ReactNativeFirebaseDemo.xcworkspace && pod install && cd ..",
"npm:version:release:patch": "echo '!!\uD83D\uDD34!! RELEASE !!\uD83D\uDD34!!' && lerna version patch --exact --force-publish=*",
"npm:version:release:minor": "echo '!!\uD83D\uDD34!! RELEASE !!\uD83D\uDD34!!' && lerna version minor --exact --force-publish=*",
"npm:version:release:major": "echo '!!\uD83D\uDD34!! RELEASE !!\uD83D\uDD34!!' && lerna version major --exact --force-publish=*",
"npm:version:release:patch": "echo '!!🔴!! RELEASE !!🔴!!' && lerna version patch --exact --force-publish=*",
"npm:version:release:minor": "echo '!!🔴!! RELEASE !!🔴!!' && lerna version minor --exact --force-publish=*",
"npm:version:release:major": "echo '!!🔴!! RELEASE !!🔴!!' && lerna version major --exact --force-publish=*",
"npm:version:6:alpha": "lerna version prerelease --preid alpha --no-git-tag-version --no-push --exact --force-publish=*",
"npm:version:6:beta": "lerna version prerelease --exact --preid beta --no-git-tag-version --no-push --exact --force-publish=*",
"npm:version:6:rc": "lerna version prerelease --exact --preid rc --no-git-tag-version --no-push --exact --force-publish=*",
@@ -38,16 +38,16 @@
"npm:publish:6:beta": "lerna publish from-package --dist-tag beta --no-git-reset",
"npm:publish:6:rc": "lerna publish from-package --dist-tag rc --no-git-reset",
"npm:publish:alpha:nightly": "lerna publish from-package --canary --preid alpha --dist-tag alpha --no-git-reset",
"npm:publish:release": "echo '!!\uD83D\uDD34!! RELEASE !!\uD83D\uDD34!!' && echo '!!!!! RELEASE !!!!!!' && lerna publish from-package"
"npm:publish:release": "echo '!!🔴!! RELEASE !!🔴!!' && echo '!!!!! RELEASE !!!!!!' && lerna publish from-package"
},
"devDependencies": {
"@babel/cli": "^7.2.3",
"@babel/core": "^7.2.2",
"codecov": "^3.1.0",
"@babel/plugin-transform-runtime": "^7.2.0",
"@babel/runtime": "^7.2.0",
"@invertase/babel-preset-react-native-syntax": "^0.1.3",
"babel-eslint": "^10.0.1",
"codecov": "^3.1.0",
"eslint": "^5.12.1",
"eslint-config-airbnb": "^17.1.0",
"eslint-config-prettier": "^3.6.0",
@@ -108,6 +108,8 @@
]
},
"dependencies": {
"axios": "^0.18.0"
"axios": "^0.18.0",
"inquirer": "^6.2.2",
"shelljs": "^0.8.3"
}
}

View File

@@ -1,6 +1,6 @@
{
"name": "@react-native-firebase/_template_",
"version": "6.0.0-alpha.2",
"version": "_VERSION_",
"author": "Invertase <oss@invertase.io> (http://invertase.io)",
"description": "React Native Firebase - _Template_",
"main": "lib/index.js",
@@ -22,11 +22,11 @@
"_template_"
],
"peerDependencies": {
"@react-native-firebase/app": "6.0.0-alpha.2"
"@react-native-firebase/app": "_VERSION_"
},
"dependencies": {
"@react-native-firebase/app-types": "6.0.0-alpha.2",
"@react-native-firebase/common": "6.0.0-alpha.2"
"@react-native-firebase/app-types": "_VERSION_",
"@react-native-firebase/common": "_VERSION_"
},
"rnpm": {
"android": {

View File

@@ -0,0 +1,124 @@
/*
* Copyright (c) 2016-present Invertase Limited & Contributors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this library except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
const { join, resolve } = require('path');
const { readdirSync, renameSync, statSync } = require('fs');
const shelljs = require('shelljs');
const inquirer = require('inquirer');
const { version } = require('./../lerna');
function walkDir(dir) {
let results = [];
const list = readdirSync(dir);
list.forEach(function(file) {
file = dir + '/' + file;
const stat = statSync(file);
if (stat && stat.isDirectory()) {
results = results.concat(walkDir(file));
} else {
results.push(file);
}
});
return results;
}
inquirer
.prompt([
{
type: 'input',
name: 'name',
message: 'What is the name of this module, e.g. analytics:',
default: 'iid',
},
])
.then(answers => {
const { name } = answers;
const packageDir = `packages/${name}`;
const nameUpper = name.charAt(0).toUpperCase() + name.slice(1);
shelljs.cp('-R', 'scripts/_TEMPLATE_', packageDir);
shelljs.exec(
`find ./${packageDir}/ -type f -exec sed -i '' -e "s/_template_/${name}/g" {} \\;`,
);
shelljs.exec(
`find ./${packageDir}/ -type f -exec sed -i '' -e "s/_Template_/${nameUpper}/g" {} \\;`,
);
shelljs.exec(
`find ./${packageDir}/package.json -type f -exec sed -i '' -e "s/_VERSION_/${version}/g" {} \\;`,
);
return Promise.resolve({ name, nameUpper });
})
.then(({ name, nameUpper }) => {
const dir = resolve(`./packages/${name}/`);
const templateFiles = walkDir(dir).filter(file => {
return file.includes('_template_') || file.includes('_Template_');
});
shelljs.mv(`${dir}/ios/RNFB_Template_`, `${dir}/ios/RNFB${nameUpper}`);
shelljs.mv(`${dir}/ios/RNFB_Template_.xcodeproj`, `${dir}/ios/RNFB${nameUpper}.xcodeproj`);
shelljs.mv(
`${dir}/android/src/main/java/io/invertase/firebase/_template_`,
`${dir}/android/src/main/java/io/invertase/firebase/${name}`,
);
for (let i = 0; i < templateFiles.length; i++) {
const templateFile = templateFiles[i]
.replace(
`${dir}/android/src/main/java/io/invertase/firebase/_template_`,
`${dir}/android/src/main/java/io/invertase/firebase/${name}`,
)
.replace(`${dir}/ios/RNFB_Template_/`, `${dir}/ios/RNFB${nameUpper}/`)
.replace(`${dir}/ios/RNFB_Template_.x`, `${dir}/ios/RNFB${nameUpper}.x`);
const newTemplateFilePath = templateFile
.replace(/_template_/g, name)
.replace(/_Template_/g, nameUpper);
renameSync(templateFile, newTemplateFilePath);
}
return Promise.resolve({ name, nameUpper });
})
.then(({ name, nameUpper }) => {
shelljs.exec(
`lerna add @react-native-firebase/${name} tests && yarn`,
);
console.log('');
console.log(`The module '${name}' (${nameUpper}) has been created!`);
console.log('');
console.log('');
console.log('TO USE IT ADD TO THE TESTING PROJECT:');
console.log('');
console.log(' iOS:');
console.log(' Add the following to tests/ios/Podfile :');
console.log(
` pod 'RNFB${nameUpper}', :path => '../../packages/${name}/ios/RNFB${nameUpper}.podspec', :version => "~> #{rnfb_version}"`,
);
console.log('');
console.log('');
console.log(' Android:');
console.log(' Add the following to tests/android/settings.gradle :');
console.log(` include ':@react-native-firebase/${name}'`);
console.log(
` project(':@react-native-firebase/${name}').projectDir = new File(rootProject.projectDir, './../../packages/${name}/android')`,
);
console.log('');
console.log(' Add the following dependency to tests/android/app/build.gradle :');
console.log(` implementation project(path: ':@react-native-firebase/${name}')`);
console.log('');
console.log('');
})
.catch(console.error);

View File

@@ -1,19 +1,30 @@
/* eslint-disable import/no-extraneous-dependencies */
const { resolve, join } = require('path');
const { readdirSync, statSync } = require('fs');
const { createBlacklist } = require('metro');
const { mergeConfig } = require('metro-config');
const { DEFAULT } = require('react-native/local-cli/util/Config');
const rootDir = resolve(__dirname, '..');
const packagesDir = resolve(rootDir, 'packages');
const isDirectory = source => statSync(source).isDirectory();
const firebaseModules = readdirSync(packagesDir)
.map(name => join(packagesDir, name))
.filter(isDirectory);
// .map(path => path.slice(path.lastIndexOf('/') + 1));
const config = {
projectRoot: __dirname,
resolver: {
resolverMainFields: ['testsMain', 'browser', 'main'],
resolverMainFields: ['browser', 'main'],
blackListRE: createBlacklist([
new RegExp(`^${escape(resolve(__dirname, '..', 'docs'))}\\/.*$`),
new RegExp(`^${escape(resolve(__dirname, '..', 'tests/android'))}\\/.*$`),
new RegExp(`^${escape(resolve(__dirname, '..', 'tests/ios'))}\\/.*$`),
new RegExp(`^${escape(resolve(__dirname, '..', 'tests/e2e'))}\\/.*$`),
new RegExp(`^${escape(resolve(__dirname, '..', 'tests/functions'))}\\/.*$`),
new RegExp(`^${escape(resolve(rootDir, 'docs'))}\\/.*$`),
new RegExp(`^${escape(resolve(rootDir, 'tests/ios'))}\\/.*$`),
new RegExp(`^${escape(resolve(rootDir, 'tests/e2e'))}\\/.*$`),
new RegExp(`^${escape(resolve(rootDir, 'tests/android'))}\\/.*$`),
new RegExp(`^${escape(resolve(rootDir, 'tests/functions'))}\\/.*$`),
]),
extraNodeModules: new Proxy(
{},
@@ -29,14 +40,7 @@ const config = {
),
platforms: ['android', 'ios'],
},
watchFolders: [
resolve(__dirname, '.'),
resolve(__dirname, '../packages/app'),
resolve(__dirname, '../packages/common'),
resolve(__dirname, '../packages/app-types'),
resolve(__dirname, '../packages/analytics'),
resolve(__dirname, '../packages/functions'),
],
watchFolders: [resolve(__dirname, '.'), ...firebaseModules],
};
module.exports = mergeConfig(DEFAULT, config);

View File

@@ -1519,6 +1519,11 @@ ansi-escapes@^3.0.0:
resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.1.0.tgz#f73207bb81207d75fd6c83f125af26eea378ca30"
integrity sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==
ansi-escapes@^3.2.0:
version "3.2.0"
resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b"
integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==
ansi-gray@^0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/ansi-gray/-/ansi-gray-0.1.1.tgz#2962cf54ec9792c48510a3deb524436861ef7251"
@@ -2234,7 +2239,7 @@ chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3:
strip-ansi "^3.0.0"
supports-color "^2.0.0"
chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.3.1, chalk@^2.4.1:
chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.3.1, chalk@^2.4.1, chalk@^2.4.2:
version "2.4.2"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
@@ -3509,7 +3514,7 @@ external-editor@^2.0.4:
iconv-lite "^0.4.17"
tmp "^0.0.33"
external-editor@^3.0.0:
external-editor@^3.0.0, external-editor@^3.0.3:
version "3.0.3"
resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.0.3.tgz#5866db29a97826dbe4bf3afd24070ead9ea43a27"
integrity sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==
@@ -4576,6 +4581,25 @@ inquirer@^6.1.0, inquirer@^6.2.0:
strip-ansi "^5.0.0"
through "^2.3.6"
inquirer@^6.2.2:
version "6.2.2"
resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.2.2.tgz#46941176f65c9eb20804627149b743a218f25406"
integrity sha512-Z2rREiXA6cHRR9KBOarR3WuLlFzlIfAEIiB45ll5SSadMg7WqOh1MKEjjndfuH5ewXdixWCxqnVfGOQzPeiztA==
dependencies:
ansi-escapes "^3.2.0"
chalk "^2.4.2"
cli-cursor "^2.1.0"
cli-width "^2.0.0"
external-editor "^3.0.3"
figures "^2.0.0"
lodash "^4.17.11"
mute-stream "0.0.7"
run-async "^2.2.0"
rxjs "^6.4.0"
string-width "^2.1.0"
strip-ansi "^5.0.0"
through "^2.3.6"
interpret@^1.0.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296"
@@ -7938,6 +7962,13 @@ rxjs@^6.1.0, rxjs@^6.3.3:
dependencies:
tslib "^1.9.0"
rxjs@^6.4.0:
version "6.4.0"
resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.4.0.tgz#f3bb0fe7bda7fb69deac0c16f17b50b0b8790504"
integrity sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==
dependencies:
tslib "^1.9.0"
safe-buffer@5.1.2, safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
version "5.1.2"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
@@ -8122,7 +8153,7 @@ shell-utils@^1.0.9:
dependencies:
lodash "4.x.x"
shelljs@^0.8.2:
shelljs@^0.8.2, shelljs@^0.8.3:
version "0.8.3"
resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.3.tgz#a7f3319520ebf09ee81275b2368adb286659b097"
integrity sha512-fc0BKlAWiLpwZljmOvAOTE/gXawtCoNrP5oaY7KIaQbbyHeQVg01pSEuEGvGh3HEdBU4baCD7wQBwADmM/7f7A==