| /* |
| Licensed to the Apache Software Foundation (ASF) under one |
| or more contributor license agreements. See the NOTICE file |
| distributed with this work for additional information |
| regarding copyright ownership. The ASF licenses this file |
| to you under the Apache License, Version 2.0 (the |
| "License"); you may not use this file 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. |
| */ |
| |
| var Q = require('Q'), |
| fs = require('fs'), |
| path = require('path'), |
| shell = require('shelljs'), |
| uuid = require('node-uuid'); |
| |
| var defaultAppName = "CordovaWP8AppProj"; |
| var defaultSlnName = "CordovaWP8Solution"; |
| |
| // Creates cordova-windows project at specified path with specified namespace, app name and GUID |
| module.exports.run = function (argv) { |
| |
| // Get script args |
| var args = argv.slice(2); |
| |
| // Set and validate parameters/defaults for create |
| |
| var projectPath = args[0]; |
| if (fs.existsSync(projectPath)){ |
| return Q.reject("Project directory already exists:\n\t" + projectPath); |
| } |
| |
| // Package name can't contain dashes, so replace it with underscores |
| // if replacing the - with a _ does not work, give up |
| var packageName = args[1] ? args[1].replace("-", "_") : "Cordova.Example"; |
| if(!/^[a-zA-Z0-9._$]+$/g.test(packageName)) { |
| return Q.reject("Invalid identifier. PackageName may only include letters, numbers, _ and $"); |
| } |
| |
| var appName = args[2] || defaultAppName, |
| safeAppName = appName.replace(/(\.\s|\s\.|\s+|\.+)/g, '_'), |
| platformRoot = path.join(__dirname, '..', '..'), |
| templatePath = path.join(platformRoot, "template"), |
| customTemplate = args[3]; |
| |
| console.log("Creating Cordova Windows Project:"); |
| console.log("\tApp Name : " + appName); |
| console.log("\tNamespace : " + packageName); |
| console.log("\tPath : " + projectPath); |
| if (customTemplate) { |
| console.log("Custom template path: " + customTemplate); |
| } |
| |
| console.log('Copying necessary files to ' + projectPath); |
| // Copy the template source files to the new destination |
| shell.cp("-rf", path.join(templatePath, '*'), projectPath); |
| // Copy our unique VERSION file, so peeps can tell what version this project was created from. |
| shell.cp("-rf", path.join(platformRoot, "..", 'VERSION'), projectPath); |
| // copy the defaults.xml into config.xml so this project can be built when create is called minus the cordova-cli |
| shell.cp(path.join(projectPath, "cordova", "defaults.xml"), path.join(projectPath, "config.xml")); |
| |
| // if any custom template is provided, just copy it over created project |
| if (customTemplate && fs.existsSync(customTemplate)) { |
| console.log('Copying template overrides from ' + customTemplate + ' to ' + projectPath); |
| shell.cp("-rf", customTemplate, projectPath); |
| } |
| |
| console.log("Updating project files"); |
| // replace values in the AppManifest |
| var wmAppManifest = path.join(projectPath, "Properties", "WMAppManifest.xml"), |
| guid = uuid.v1(); |
| |
| shell.sed("-i", /\$guid1\$/g, guid, wmAppManifest); |
| shell.sed("-i", /\$safeprojectname\$/g, appName, wmAppManifest); |
| |
| //replace projectname in project files |
| ["App.xaml", "App.xaml.cs", "MainPage.xaml", "MainPage.xaml.cs", defaultAppName + ".csproj"].forEach(function (file) { |
| shell.sed("-i", /\$safeprojectname\$/g, packageName, path.join(projectPath, file)); |
| }); |
| |
| if (appName != defaultAppName) { |
| var slnFile = path.join(projectPath, defaultSlnName + ".sln"), |
| csprojFile = path.join(projectPath, defaultAppName + ".csproj"); |
| |
| shell.sed("-i", new RegExp(defaultAppName, "g"), safeAppName, slnFile); |
| // rename project and solution |
| shell.mv("-f", slnFile, path.join(projectPath, safeAppName + ".sln")); |
| shell.mv("-f", csprojFile, path.join(projectPath, safeAppName + ".csproj")); |
| } |
| |
| // remove template cruft |
| ["__PreviewImage.jpg", "__TemplateIcon.png", "MyTemplate.vstemplate"].forEach(function (file) { |
| shell.rm(path.join(projectPath, file)); |
| }); |
| |
| // Delete bld forder and bin folder |
| ["bld", "bin", "*.user", "*.suo"].forEach(function (file) { |
| shell.rm('-rf', path.join(projectPath, file)); |
| }); |
| |
| return Q.resolve(); |
| }; |
| |
| module.exports.help = function () { |
| console.log("Usage: create PathToNewProject [ PackageName [ AppName [ CustomTemplate ] ] ]"); |
| console.log(" PathToNewProject : The path to where you wish to create the project"); |
| console.log(" PackageName : The namespace for the project (default is Cordova.Example)"); |
| console.log(" AppName : The name of the application (default is CordovaAppProj)"); |
| console.log(" CustomTemplate : The path to project template overrides"); |
| console.log(" (will be copied over default platform template files)"); |
| console.log("examples:"); |
| console.log(" create C:\\Users\\anonymous\\Desktop\\MyProject"); |
| console.log(" create C:\\Users\\anonymous\\Desktop\\MyProject io.Cordova.Example AnApp"); |
| }; |