mirror of
https://github.com/zhigang1992/react-native-firebase.git
synced 2026-04-23 20:10:05 +08:00
[dev] add create firebase module from template script
This commit is contained in:
@@ -13,9 +13,6 @@
|
||||
"ignoreChanges": [
|
||||
"*.md"
|
||||
]
|
||||
},
|
||||
"bootstrap": {
|
||||
"ignore": "*-template-*"
|
||||
}
|
||||
},
|
||||
"version": "6.0.0-alpha.2"
|
||||
|
||||
14
package.json
14
package.json
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
Binary file not shown.
@@ -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": {
|
||||
|
||||
124
scripts/create-firebase-module.js
Normal file
124
scripts/create-firebase-module.js
Normal 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);
|
||||
@@ -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);
|
||||
|
||||
37
yarn.lock
37
yarn.lock
@@ -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==
|
||||
|
||||
Reference in New Issue
Block a user