78 lines
2.2 KiB
JavaScript
78 lines
2.2 KiB
JavaScript
/**
|
|
* Copyright (c) 2015-present, Facebook, Inc.
|
|
* All rights reserved.
|
|
*
|
|
* This source code is licensed under the BSD-style license found in the
|
|
* LICENSE file in the root directory of this source tree. An additional grant
|
|
* of patent rights can be found in the PATENTS file in the same directory.
|
|
*/
|
|
'use strict';
|
|
|
|
const copyAndReplace = require('../util/copyAndReplace');
|
|
const fs = require('fs');
|
|
const isValidPackageName = require('../util/isValidPackageName');
|
|
const parseCommandLine = require('../util/parseCommandLine');
|
|
const path = require('path');
|
|
const Promise = require('promise');
|
|
const walk = require('../util/walk');
|
|
|
|
/**
|
|
* Creates a new native library with the given name
|
|
*/
|
|
function library(argv, config) {
|
|
return new Promise((resolve, reject) => {
|
|
_library(argv, config, resolve, reject);
|
|
});
|
|
}
|
|
|
|
function _library(argv, config, resolve, reject) {
|
|
const args = parseCommandLine([{
|
|
command: 'name',
|
|
description: 'Library name',
|
|
type: 'string',
|
|
required: true,
|
|
}], argv);
|
|
|
|
if (!isValidPackageName(args.name)) {
|
|
reject(
|
|
args.name + ' is not a valid name for a project. Please use a valid ' +
|
|
'identifier name (alphanumeric).'
|
|
);
|
|
}
|
|
|
|
const root = process.cwd();
|
|
const libraries = path.resolve(root, 'Libraries');
|
|
const libraryDest = path.resolve(libraries, args.name);
|
|
const source = path.resolve('node_modules', 'react-native', 'Libraries', 'Sample');
|
|
|
|
if (!fs.existsSync(libraries)) {
|
|
fs.mkdir(libraries);
|
|
}
|
|
|
|
if (fs.existsSync(libraryDest)) {
|
|
reject('Library already exists in', libraryDest);
|
|
}
|
|
|
|
walk(source).forEach(f => {
|
|
if (f.indexOf('project.xcworkspace') !== -1 ||
|
|
f.indexOf('.xcodeproj/xcuserdata') !== -1) {
|
|
return;
|
|
}
|
|
|
|
const dest = f.replace(/Sample/g, args.name).replace(/^_/, '.');
|
|
copyAndReplace(
|
|
path.resolve(source, f),
|
|
path.resolve(libraryDest, dest),
|
|
{'Sample': args.name}
|
|
);
|
|
});
|
|
|
|
console.log('Created library in', libraryDest);
|
|
console.log('Next Steps:');
|
|
console.log(' Link your library in Xcode:');
|
|
console.log(' https://facebook.github.io/react-native/docs/linking-libraries-ios.html#content\n');
|
|
resolve();
|
|
}
|
|
|
|
module.exports = library;
|