72 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			72 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  /**
 | |
|  * Copyright (c) 2015-present, Facebook, Inc.
 | |
|  *
 | |
|  * This source code is licensed under the MIT license found in the
 | |
|  * LICENSE file in the root directory of this source tree.
 | |
|  */
 | |
| 'use strict';
 | |
| 
 | |
| const copyAndReplace = require('../util/copyAndReplace');
 | |
| const fs = require('fs');
 | |
| const isValidPackageName = require('../util/isValidPackageName');
 | |
| const path = require('path');
 | |
| const walk = require('../util/walk');
 | |
| 
 | |
| /**
 | |
|  * Creates a new native library with the given name
 | |
|  */
 | |
| function library(argv, config, args) {
 | |
|   if (!isValidPackageName(args.name)) {
 | |
|     return Promise.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.mkdirSync(libraries);
 | |
|   }
 | |
| 
 | |
|   if (fs.existsSync(libraryDest)) {
 | |
|     return Promise.reject(new Error(`Library already exists in ${libraryDest}`));
 | |
|   }
 | |
| 
 | |
|   walk(source).forEach(f => {
 | |
|     if (f.indexOf('project.xcworkspace') !== -1 ||
 | |
|         f.indexOf('.xcodeproj/xcuserdata') !== -1) {
 | |
|       return;
 | |
|     }
 | |
| 
 | |
|     const dest = path.relative(source, 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'
 | |
|   );
 | |
| }
 | |
| 
 | |
| module.exports = {
 | |
|   name: 'new-library',
 | |
|   func: library,
 | |
|   description: 'generates a native library bridge',
 | |
|   options: [{
 | |
|     command: '--name <string>',
 | |
|     description: 'name of the library to generate',
 | |
|     default: null,
 | |
|   }],
 | |
| };
 | 
