From 9f784561a5cb3d4574727dbbc6d8f3db2ee45d90 Mon Sep 17 00:00:00 2001 From: Steve Gill Date: Wed, 6 May 2015 11:21:07 -0700 Subject: [PATCH 1/6] CB-8441 added platforms as dev dependencies --- package.json | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index be7184af5..edebea757 100644 --- a/package.json +++ b/package.json @@ -74,6 +74,15 @@ "dependencies": { "browserify": "10.1.3", "through": "2.3.4", - "uglify-js": "^2.4.15" + "uglify-js": "^2.4.15", + "cordova-android": "4.x", + "cordova-ios": "3.8.x", + "cordova-blackberry10": "3.7.x" , + "cordova-firefoxos": "3.6.x", + "cordova-ubuntu": "4.0.x", + "cordova-amazon-fireos": "3.6.x", + "cordova-wp8": "3.8.x", + "cordova-windows": "3.8.x", + "cordova-browser": "3.6.0" } } From fcef6f27470518421deeab9f8e82d4313d2d199a Mon Sep 17 00:00:00 2001 From: Steve Gill Date: Mon, 11 May 2015 17:10:38 -0700 Subject: [PATCH 2/6] if no --platformVersion, set it to N/A instead of failing --- tasks/compile.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tasks/compile.js b/tasks/compile.js index 849e909ce..f9a1b5144 100644 --- a/tasks/compile.js +++ b/tasks/compile.js @@ -35,9 +35,9 @@ module.exports = function(grunt) { } }); if(!platformVersion){ - console.log('please add a platform version flag and value'); - console.log('ex: grunt compile --platformVersion=3.6.0'); - throw new Error("platformVersion is required!"); + //console.log('please add a platform version flag and value'); + //console.log('ex: grunt compile --platformVersion=3.6.0'); + platformVersion="N/A"; } generate(platformName, useWindowsLineEndings, platformVersion, done); From 994d6bba75771f2df54f50e7459102d34c8d55b3 Mon Sep 17 00:00:00 2001 From: Steve Gill Date: Mon, 11 May 2015 18:23:08 -0700 Subject: [PATCH 3/6] CB-8441 grunt compile now uses platform dependencies cordova-js-src for platform specific exec files --- .../android/nativeapiprovider.js | 0 .../android/promptbasednativeapi.js | 0 src/{ => legacy-exec}/amazon-fireos/exec.js | 0 .../amazon-fireos/platform.js | 0 .../amazon-fireos/plugin/android/app.js | 0 .../android/android/nativeapiprovider.js | 0 .../android/android/promptbasednativeapi.js | 0 src/{ => legacy-exec}/android/exec.js | 0 src/{ => legacy-exec}/android/platform.js | 0 .../android/plugin/android/app.js | 0 src/{ => legacy-exec}/blackberry10/exec.js | 0 .../blackberry10/platform.js | 0 src/{ => legacy-exec}/browser/confighelper.js | 0 src/{ => legacy-exec}/browser/exec.js | 0 src/{ => legacy-exec}/browser/platform.js | 0 src/{ => legacy-exec}/firefoxos/exec.js | 0 src/{ => legacy-exec}/firefoxos/init.js | 0 src/{ => legacy-exec}/firefoxos/platform.js | 0 src/{ => legacy-exec}/ios/exec.js | 0 src/{ => legacy-exec}/ios/platform.js | 0 src/{ => legacy-exec}/osx/exec.js | 0 src/{ => legacy-exec}/osx/platform.js | 0 .../osx/plugin/osx/.gitignore | 0 src/{ => legacy-exec}/ubuntu/exec.js | 0 src/{ => legacy-exec}/ubuntu/platform.js | 0 src/{ => legacy-exec}/webos/exec.js | 0 src/{ => legacy-exec}/webos/platform.js | 0 src/{ => legacy-exec}/webos/webos/service.js | 0 src/{ => legacy-exec}/windows/exec.js | 0 src/{ => legacy-exec}/windows/platform.js | 0 src/{ => legacy-exec}/wp8/exec.js | 0 src/{ => legacy-exec}/wp8/platform.js | 0 tasks/lib/bundle.js | 24 +++++++++++++++---- 33 files changed, 20 insertions(+), 4 deletions(-) rename src/{ => legacy-exec}/amazon-fireos/android/nativeapiprovider.js (100%) rename src/{ => legacy-exec}/amazon-fireos/android/promptbasednativeapi.js (100%) rename src/{ => legacy-exec}/amazon-fireos/exec.js (100%) rename src/{ => legacy-exec}/amazon-fireos/platform.js (100%) rename src/{ => legacy-exec}/amazon-fireos/plugin/android/app.js (100%) rename src/{ => legacy-exec}/android/android/nativeapiprovider.js (100%) rename src/{ => legacy-exec}/android/android/promptbasednativeapi.js (100%) rename src/{ => legacy-exec}/android/exec.js (100%) rename src/{ => legacy-exec}/android/platform.js (100%) rename src/{ => legacy-exec}/android/plugin/android/app.js (100%) rename src/{ => legacy-exec}/blackberry10/exec.js (100%) rename src/{ => legacy-exec}/blackberry10/platform.js (100%) rename src/{ => legacy-exec}/browser/confighelper.js (100%) rename src/{ => legacy-exec}/browser/exec.js (100%) rename src/{ => legacy-exec}/browser/platform.js (100%) rename src/{ => legacy-exec}/firefoxos/exec.js (100%) rename src/{ => legacy-exec}/firefoxos/init.js (100%) rename src/{ => legacy-exec}/firefoxos/platform.js (100%) rename src/{ => legacy-exec}/ios/exec.js (100%) rename src/{ => legacy-exec}/ios/platform.js (100%) rename src/{ => legacy-exec}/osx/exec.js (100%) rename src/{ => legacy-exec}/osx/platform.js (100%) rename src/{ => legacy-exec}/osx/plugin/osx/.gitignore (100%) rename src/{ => legacy-exec}/ubuntu/exec.js (100%) rename src/{ => legacy-exec}/ubuntu/platform.js (100%) rename src/{ => legacy-exec}/webos/exec.js (100%) rename src/{ => legacy-exec}/webos/platform.js (100%) rename src/{ => legacy-exec}/webos/webos/service.js (100%) rename src/{ => legacy-exec}/windows/exec.js (100%) rename src/{ => legacy-exec}/windows/platform.js (100%) rename src/{ => legacy-exec}/wp8/exec.js (100%) rename src/{ => legacy-exec}/wp8/platform.js (100%) diff --git a/src/amazon-fireos/android/nativeapiprovider.js b/src/legacy-exec/amazon-fireos/android/nativeapiprovider.js similarity index 100% rename from src/amazon-fireos/android/nativeapiprovider.js rename to src/legacy-exec/amazon-fireos/android/nativeapiprovider.js diff --git a/src/amazon-fireos/android/promptbasednativeapi.js b/src/legacy-exec/amazon-fireos/android/promptbasednativeapi.js similarity index 100% rename from src/amazon-fireos/android/promptbasednativeapi.js rename to src/legacy-exec/amazon-fireos/android/promptbasednativeapi.js diff --git a/src/amazon-fireos/exec.js b/src/legacy-exec/amazon-fireos/exec.js similarity index 100% rename from src/amazon-fireos/exec.js rename to src/legacy-exec/amazon-fireos/exec.js diff --git a/src/amazon-fireos/platform.js b/src/legacy-exec/amazon-fireos/platform.js similarity index 100% rename from src/amazon-fireos/platform.js rename to src/legacy-exec/amazon-fireos/platform.js diff --git a/src/amazon-fireos/plugin/android/app.js b/src/legacy-exec/amazon-fireos/plugin/android/app.js similarity index 100% rename from src/amazon-fireos/plugin/android/app.js rename to src/legacy-exec/amazon-fireos/plugin/android/app.js diff --git a/src/android/android/nativeapiprovider.js b/src/legacy-exec/android/android/nativeapiprovider.js similarity index 100% rename from src/android/android/nativeapiprovider.js rename to src/legacy-exec/android/android/nativeapiprovider.js diff --git a/src/android/android/promptbasednativeapi.js b/src/legacy-exec/android/android/promptbasednativeapi.js similarity index 100% rename from src/android/android/promptbasednativeapi.js rename to src/legacy-exec/android/android/promptbasednativeapi.js diff --git a/src/android/exec.js b/src/legacy-exec/android/exec.js similarity index 100% rename from src/android/exec.js rename to src/legacy-exec/android/exec.js diff --git a/src/android/platform.js b/src/legacy-exec/android/platform.js similarity index 100% rename from src/android/platform.js rename to src/legacy-exec/android/platform.js diff --git a/src/android/plugin/android/app.js b/src/legacy-exec/android/plugin/android/app.js similarity index 100% rename from src/android/plugin/android/app.js rename to src/legacy-exec/android/plugin/android/app.js diff --git a/src/blackberry10/exec.js b/src/legacy-exec/blackberry10/exec.js similarity index 100% rename from src/blackberry10/exec.js rename to src/legacy-exec/blackberry10/exec.js diff --git a/src/blackberry10/platform.js b/src/legacy-exec/blackberry10/platform.js similarity index 100% rename from src/blackberry10/platform.js rename to src/legacy-exec/blackberry10/platform.js diff --git a/src/browser/confighelper.js b/src/legacy-exec/browser/confighelper.js similarity index 100% rename from src/browser/confighelper.js rename to src/legacy-exec/browser/confighelper.js diff --git a/src/browser/exec.js b/src/legacy-exec/browser/exec.js similarity index 100% rename from src/browser/exec.js rename to src/legacy-exec/browser/exec.js diff --git a/src/browser/platform.js b/src/legacy-exec/browser/platform.js similarity index 100% rename from src/browser/platform.js rename to src/legacy-exec/browser/platform.js diff --git a/src/firefoxos/exec.js b/src/legacy-exec/firefoxos/exec.js similarity index 100% rename from src/firefoxos/exec.js rename to src/legacy-exec/firefoxos/exec.js diff --git a/src/firefoxos/init.js b/src/legacy-exec/firefoxos/init.js similarity index 100% rename from src/firefoxos/init.js rename to src/legacy-exec/firefoxos/init.js diff --git a/src/firefoxos/platform.js b/src/legacy-exec/firefoxos/platform.js similarity index 100% rename from src/firefoxos/platform.js rename to src/legacy-exec/firefoxos/platform.js diff --git a/src/ios/exec.js b/src/legacy-exec/ios/exec.js similarity index 100% rename from src/ios/exec.js rename to src/legacy-exec/ios/exec.js diff --git a/src/ios/platform.js b/src/legacy-exec/ios/platform.js similarity index 100% rename from src/ios/platform.js rename to src/legacy-exec/ios/platform.js diff --git a/src/osx/exec.js b/src/legacy-exec/osx/exec.js similarity index 100% rename from src/osx/exec.js rename to src/legacy-exec/osx/exec.js diff --git a/src/osx/platform.js b/src/legacy-exec/osx/platform.js similarity index 100% rename from src/osx/platform.js rename to src/legacy-exec/osx/platform.js diff --git a/src/osx/plugin/osx/.gitignore b/src/legacy-exec/osx/plugin/osx/.gitignore similarity index 100% rename from src/osx/plugin/osx/.gitignore rename to src/legacy-exec/osx/plugin/osx/.gitignore diff --git a/src/ubuntu/exec.js b/src/legacy-exec/ubuntu/exec.js similarity index 100% rename from src/ubuntu/exec.js rename to src/legacy-exec/ubuntu/exec.js diff --git a/src/ubuntu/platform.js b/src/legacy-exec/ubuntu/platform.js similarity index 100% rename from src/ubuntu/platform.js rename to src/legacy-exec/ubuntu/platform.js diff --git a/src/webos/exec.js b/src/legacy-exec/webos/exec.js similarity index 100% rename from src/webos/exec.js rename to src/legacy-exec/webos/exec.js diff --git a/src/webos/platform.js b/src/legacy-exec/webos/platform.js similarity index 100% rename from src/webos/platform.js rename to src/legacy-exec/webos/platform.js diff --git a/src/webos/webos/service.js b/src/legacy-exec/webos/webos/service.js similarity index 100% rename from src/webos/webos/service.js rename to src/legacy-exec/webos/webos/service.js diff --git a/src/windows/exec.js b/src/legacy-exec/windows/exec.js similarity index 100% rename from src/windows/exec.js rename to src/legacy-exec/windows/exec.js diff --git a/src/windows/platform.js b/src/legacy-exec/windows/platform.js similarity index 100% rename from src/windows/platform.js rename to src/legacy-exec/windows/platform.js diff --git a/src/wp8/exec.js b/src/legacy-exec/wp8/exec.js similarity index 100% rename from src/wp8/exec.js rename to src/legacy-exec/wp8/exec.js diff --git a/src/wp8/platform.js b/src/legacy-exec/wp8/platform.js similarity index 100% rename from src/wp8/platform.js rename to src/legacy-exec/wp8/platform.js diff --git a/tasks/lib/bundle.js b/tasks/lib/bundle.js index 686fa778c..66190a797 100644 --- a/tasks/lib/bundle.js +++ b/tasks/lib/bundle.js @@ -28,14 +28,30 @@ module.exports = function bundle(platform, debug, commitId, platformVersion) { var modules = collectFiles(path.join('src', 'common')); var scripts = collectFiles(path.join('src', 'scripts')); modules[''] = path.join('src', 'cordova.js'); - copyProps(modules, collectFiles(path.join('src', platform))); + + var platformDep = path.join('node_modules', 'cordova-'+platform); + //check to see if platform dependency has cordova-js-src directory + if(fs.existsSync(platformDep) && fs.existsSync(path.join(platformDep, 'cordova-js-src'))) { + console.log('using node module platform dependency'); + copyProps(modules, collectFiles(path.join('node_modules', 'cordova-'+platform, 'cordova-js-src'))); + } else { + if(platform !== 'test') { + //for platforms that don't have a release with cordova-js-src yet + copyProps(modules, collectFiles(path.join('src', 'legacy-exec', platform))); + } else { + //platform === test + copyProps(modules, collectFiles(path.join('src', platform))); + } + + } + console.log(modules) if (platform === 'test') { // Add any platform-specific modules that have tests to the test bundle. - var testFilesPath = path.join('src', 'android', 'android'); + var testFilesPath = path.join('node_modules', 'cordova-android', 'cordova-js-src', 'android'); copyProps(modules, collectFiles(testFilesPath, 'android')); - modules['android/exec'] = path.join('src', 'android' , 'exec.js'); - modules['ios/exec'] = path.join('src', 'ios' , 'exec.js'); + modules['android/exec'] = path.join('node_modules', 'cordova-android', 'cordova-js-src', 'exec.js'); + modules['ios/exec'] = path.join('node_modules', 'cordova-ios', 'cordova-js-src', 'exec.js'); } var output = []; From 100e4359a1b77b421d024323cbaaa68d74dd70cd Mon Sep 17 00:00:00 2001 From: Steve Gill Date: Fri, 15 May 2015 17:12:55 -0700 Subject: [PATCH 4/6] CB-8441 updated workflow to use cordova-js-src when available --- tasks/lib/bundle-browserify.js | 15 +++++-- tasks/lib/require-tr.js | 69 +++++++++++++++++++------------ tasks/lib/write-license-header.js | 2 +- 3 files changed, 55 insertions(+), 31 deletions(-) diff --git a/tasks/lib/bundle-browserify.js b/tasks/lib/bundle-browserify.js index 668d1e947..a6b868727 100644 --- a/tasks/lib/bundle-browserify.js +++ b/tasks/lib/bundle-browserify.js @@ -30,11 +30,18 @@ module.exports = function bundle(platform, debug, commitId, platformVersion) { // XXX plugin_list is not present at this stage b.ignore(path.join(root, 'src', 'common', 'plugin_list')); - b.transform(require_tr.transform); + b.transform(require_tr.transform, {'platform': platform}); - b.add(path.join(root, 'src', platform, 'exec.js')); - - b.add(path.join(root, 'src', platform, 'platform.js')); + var cordovajssrc = path.join(process.cwd(), 'platforms', platform, 'platform_www', 'cordova-js-src'); + //checks to see if browserify is run in a cli project and + //if the platform has a cordova-js-src to build cordova.js with + if(fs.existsSync(cordovajssrc)){ + b.add(path.join(cordovajssrc, 'exec.js')); + b.add(path.join(cordovajssrc, 'platform.js')); + } else { + b.add(path.join(root, 'src', 'legacy-exec', platform, 'exec.js')); + b.add(path.join(root, 'src', 'legacy-exec', platform, 'platform.js')); + } b.add(path.join(root, 'src', 'scripts', 'bootstrap.js')); diff --git a/tasks/lib/require-tr.js b/tasks/lib/require-tr.js index a433b309f..d8e1ff1ec 100644 --- a/tasks/lib/require-tr.js +++ b/tasks/lib/require-tr.js @@ -37,10 +37,11 @@ var requireTr = { init: function(platform) { this.platform = platform; - this.modules = []; + this.modules[platform] = []; }, - transform: function(file) { + transform: function(file, platObj) { + this.platform = platObj.platform; var data = ''; function write(buf) { @@ -48,17 +49,18 @@ var requireTr = { } function end() { - // SOME BS pre-transforms + var platform = platObj.platform; + // SOME BS pre-transforms if(data.match(/clobbers\('cordova\/plugin\/android\/app/)) { // Checking for '\' from the windows path root = root.replace(/\\/g, '/'); if(file.match(/android\/platform.js$/) || file.match(/android\\platform.js$/)) { data = data.replace(/modulemapper\.clobbers.*\n/, - util.format('navigator.app = require("%s/src/android/plugin/android/app")', root)); + util.format('navigator.app = require("%s/src/legacy-exec/android/plugin/android/app")', root)); } else if (file.match(/amazon-fireos\/platform.js$/) || file.match(/amazon-fireos\\platform.js$/)) { data = data.replace(/modulemapper\.clobbers.*\n/, - util.format('navigator.app = require("%s/src/amazon-fireos/plugin/android/app")', root)); + util.format('navigator.app = require("%s/src/legacy-exec/amazon-fireos/plugin/android/app")', root)); } } @@ -75,40 +77,42 @@ var requireTr = { 'getOriginalSymbol(window'); } - this.queue(_updateRequires(data)); + this.queue(_updateRequires(data, platform)); this.queue(null); } return through(write, end); }, - hasModule: function(module) { - for(var i = 0, j = this.modules.length ; i < j ; i++) { - if(this.modules[i].symbol === module) { + hasModule: function(module, platform) { + if(this.modules[platform] === undefined) { + this.modules[platform] = []; + } + var platformModules = this.modules[platform]; + + for(var i = 0, j = platformModules.length ; i < j ; i++) { + if(platformModules[i].symbol === module) { return true; } } return false; }, - getModules: function() { - return this.modules; + getModules: function(platform) { + return this.modules[platform]; }, - getPlatform: function() { - return this.platform; - }, - addModule: function(module) { + addModule: function(module, platform) { if(!module || !module.symbol || !module.path) { throw new Error("Can't add module without a symbol and a path"); } - this.modules.push(module); + this.modules[platform].push(module); }, - modules:[], + modules:{}, platform: null } /* * visits AST and modifies all the require('cordova/*') and require('org.apache.cordova.*') */ -function _updateRequires(code) { +function _updateRequires(code, platform) { var ast = UglifyJS.parse(code); var before = new UglifyJS.TreeTransformer(function(node, descend) { @@ -131,6 +135,8 @@ function _updateRequires(code) { module.indexOf("cordova") === 0) { var scriptpath; + var cordovajssrc = path.join(process.cwd(), "platforms", platform, "platform_www", "cordova-js-src") + // require('cordova') -> cordova.js if(module === "cordova") { @@ -141,24 +147,35 @@ function _updateRequires(code) { path.join(root, "src", "common", "init_b")); // android and amazon-fireos have some special require's } else if(module.match(/cordova\/(android|amazon-fireos)\/(.+)/)) { - scriptPath = node.args[0].value = module.replace(/cordova\/(android|amazon-fireos)\/(.+)/, - path.join(root, "src", "$1", "android", "$2")); + if(fs.existsSync(cordovajssrc)) { + //cordova cli project with cordova-js-src in platform + scriptPath = node.args[0].value = module.replace(/cordova\/(android|amazon-fireos)\/(.+)/, path.join(cordovajssrc, "android", "$2")); + } else { + //non cli or no cordova-js-src directory + scriptPath = node.args[0].value = module.replace(/cordova\/(android|amazon-fireos)\/(.+)/, path.join(root, "src", "legacy-exec", "$1", "android", "$2")); + } // require('cordova/exec') and require('cordova/platform') -> platform's exec/platform - } else if(module.match(/cordova\/(platform|exec)$/)) { - scriptPath = node.args[0].value = module.replace(/cordova\/(platform|exec)/, - path.join(root, "src", requireTr.getPlatform(), "$1")); + } else if(module.match(/cordova\/(platform|exec)$/)) { + if(fs.existsSync(cordovajssrc)) { + //cordova cli project with cordova-js-src in platform + scriptPath = node.args[0].value = module.replace(/cordova\/(platform|exec)/, path.join(cordovajssrc, "$1")); + } else { + //non cli or no cordova-js-src directory + scriptPath = node.args[0].value = module.replace(/cordova\/(platform|exec)/, path.join(root, "src", "legacy-exec", platform, "$1")); + } + // require('cordova/anything') should be under common/ } else if(module.match(/cordova\/(.+)/)) { scriptPath = node.args[0].value = module.replace(/cordova\/(.+)/, path.join(root, "src", "common", "$1")); } - if(requireTr.hasModule(module) === false) { - requireTr.addModule({symbol: module, path: scriptPath}); + if(requireTr.hasModule(module, platform) === false) { + requireTr.addModule({symbol: module, path: scriptPath}, platform); } } else if(module !== undefined && ( module.indexOf("org.apache.cordova") !== -1 || module.indexOf("./") === 0 || module.indexOf("../") === 0 ) ) { - var modules = requireTr.getModules(); + var modules = requireTr.getModules(platform); if(module.indexOf("../") === 0){ module = module.replace('../', ''); diff --git a/tasks/lib/write-license-header.js b/tasks/lib/write-license-header.js index e7360117f..f9a394ba0 100644 --- a/tasks/lib/write-license-header.js +++ b/tasks/lib/write-license-header.js @@ -34,6 +34,6 @@ module.exports = function(outStream, platform, commitId, platformVersion, symbol outStream.write(licenseText, 'utf8'); outStream.write("var PLATFORM_VERSION_BUILD_LABEL = '" + platformVersion + "';\n", 'utf8'); outStream.write("var define = {moduleMap: []};\n", 'utf8'); - // outStream.write(util.format("var symbolList = %s", JSON.stringify(symbolList)), 'utf8'); + //outStream.write(util.format("var symbolList = %s", JSON.stringify(symbolList)), 'utf8'); } From 358ca61b5187e20746f5019e215254cfd02345c2 Mon Sep 17 00:00:00 2001 From: Steve Gill Date: Mon, 18 May 2015 00:59:43 -0700 Subject: [PATCH 5/6] CB-8441 platformVersion flag not required anymore. Grab version from dependecy platform versions --- README.md | 17 +++++++++-------- package.json | 21 ++++++++++++--------- tasks/compile-browserify.js | 14 +++++++++++--- tasks/compile.js | 11 +++++++---- tasks/lib/bundle.js | 3 --- tasks/lib/require-tr.js | 3 +-- 6 files changed, 40 insertions(+), 29 deletions(-) diff --git a/README.md b/README.md index 72cb379d1..3a51a3e62 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,8 @@ A unified JavaScript layer for [Apache Cordova](http://cordova.apache.org/) proj | | |-bootstrap.js ... bootstrap the Cordova platform, inject APIs and fire events | | '-require.js ..... module definition and require() impl | | - | '-/ ....... contains the platform-specific base modules + | |-legacy-exec/ ...... contains old platform specific modules + | | |-/ .... contains the platform-specific base modules | |-tasks/ ............... custom grunt tasks |-tests/ ............... unit tests @@ -62,19 +63,19 @@ All of the build tasks can be run via the `grunt` node module. Install it global Then from the repository root run: - grunt --platformVersion=3.6.0 + grunt --platformVersion=4.0.0 To compile the js for just one platform, run: - grunt compile:android --platformVersion=3.6.0 + grunt compile:android --platformVersion=4.0.0 To create the browserify version of the js, run: - grunt compile-browserify --platformVersion=3.6.0 + grunt compile-browserify --platformVersion=4.0.0 To compile the browserify version of the js for just one platform, run: - grunt compile-browserify:android --platformVersion=3.6.0 + grunt compile-browserify:android --platformVersion=4.0.0 For integration, see the 'Integration' section below. @@ -126,14 +127,14 @@ Once the new js file has been added, any new projects created will use the updat # Adding a New Platform -1. Add your platform as a directory under the `src` folder. +1. Add your platform as a directory under the `legacy-exec` folder. 2. Write a module that encapsulates your platform's `exec` method and call it `exec.js`. The `exec` method is a JavaScript function that enables communication from the platform's JavaScript environment into the platform's native environment. Each platform uses a different mechanism to enable this bridge. We recommend you check out the other platform `exec` definitions for inspiration. Drop this into the - `src/` folder you created in step 1. The `exec` method has the following method + `src/legacy-exec/` folder you created in step 1. The `exec` method has the following method signature: `function(success, fail, service, action, args)`, with the following parameters: - `success`: a success function callback @@ -146,7 +147,7 @@ Once the new js file has been added, any new projects created will use the updat by the `exec` call It is required that new platform additions be as consistent as possible with the existing `service` and `action` labels. -2. Define your platform definition object and name it `platform.js`. Drop this into the `src/` folder. This file should contain a **JSON** object with the following properties: +2. Define your platform definition object and name it `platform.js`. Drop this into the `src/legacy-exec/` folder. This file should contain a **JSON** object with the following properties: - `id`: a string representing the platform. This should be the same name the .js file has - `objects`: the property names defined as children of this property diff --git a/package.json b/package.json index edebea757..76c7e9660 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,9 @@ "node": "~0.10.x" }, "scripts": { - "test": "grunt test --platformVersion=3.6.0" + "test": "grunt test --platformVersion=4.0.0", + "build": "grunt --platfromVersion=4.0.0", + "build-browserify": "grunt compile:browserify --platformVersion=4.0.0" }, "contributors": [ { @@ -69,13 +71,8 @@ "jasmine-node": "1.14.5", "jsdom-nogyp": "0.8.3", "mkdirp": "^0.5.0", - "grunt-cli": "0.1.13" - }, - "dependencies": { - "browserify": "10.1.3", - "through": "2.3.4", - "uglify-js": "^2.4.15", - "cordova-android": "4.x", + "grunt-cli": "0.1.13", + "cordova-android": "4.0.x", "cordova-ios": "3.8.x", "cordova-blackberry10": "3.7.x" , "cordova-firefoxos": "3.6.x", @@ -83,6 +80,12 @@ "cordova-amazon-fireos": "3.6.x", "cordova-wp8": "3.8.x", "cordova-windows": "3.8.x", - "cordova-browser": "3.6.0" + "cordova-browser": "3.6.x" + + }, + "dependencies": { + "browserify": "10.1.3", + "through": "2.3.4", + "uglify-js": "^2.4.15" } } diff --git a/tasks/compile-browserify.js b/tasks/compile-browserify.js index 3971d4a5a..f9fbfdf31 100644 --- a/tasks/compile-browserify.js +++ b/tasks/compile-browserify.js @@ -16,6 +16,9 @@ * specific language governing permissions and limitations * under the License. */ +var fs = require('fs'); +var path = require('path'); + try { require('browserify'); } catch (e) { @@ -41,9 +44,14 @@ module.exports = function(grunt) { } }); if(!platformVersion){ - console.log('please add a platform version flag and value'); - console.log('ex: grunt compile-browserify --platformVersion=3.6.0'); - throw new Error("platformVersion is required!"); + if(fs.existsSync(path.join('node_modules','cordova-'+platformName))) { + var platformPkgJson = require('../node_modules/cordova-'+platformName+'/package.json'); + platformVersion = platformPkgJson.version; + } else { + console.log('please add a platform version flag and value'); + console.log('ex: grunt compile-browserify --platformVersion=3.6.0'); + throw new Error("platformVersion is required!"); + } } generate(platformName, useWindowsLineEndings, platformVersion, done); }); diff --git a/tasks/compile.js b/tasks/compile.js index f9a1b5144..858461d66 100644 --- a/tasks/compile.js +++ b/tasks/compile.js @@ -34,10 +34,13 @@ module.exports = function(grunt) { platformVersion = flag.slice(equalIndex + 1); } }); - if(!platformVersion){ - //console.log('please add a platform version flag and value'); - //console.log('ex: grunt compile --platformVersion=3.6.0'); - platformVersion="N/A"; + if(!platformVersion) { + if(fs.existsSync(path.join('node_modules','cordova-'+platformName))) { + var platformPkgJson = require('../node_modules/cordova-'+platformName+'/package.json'); + platformVersion = platformPkgJson.version; + } else { + platformVersion="N/A"; + } } generate(platformName, useWindowsLineEndings, platformVersion, done); diff --git a/tasks/lib/bundle.js b/tasks/lib/bundle.js index 66190a797..0977b694c 100644 --- a/tasks/lib/bundle.js +++ b/tasks/lib/bundle.js @@ -32,7 +32,6 @@ module.exports = function bundle(platform, debug, commitId, platformVersion) { var platformDep = path.join('node_modules', 'cordova-'+platform); //check to see if platform dependency has cordova-js-src directory if(fs.existsSync(platformDep) && fs.existsSync(path.join(platformDep, 'cordova-js-src'))) { - console.log('using node module platform dependency'); copyProps(modules, collectFiles(path.join('node_modules', 'cordova-'+platform, 'cordova-js-src'))); } else { if(platform !== 'test') { @@ -44,8 +43,6 @@ module.exports = function bundle(platform, debug, commitId, platformVersion) { } } - console.log(modules) - if (platform === 'test') { // Add any platform-specific modules that have tests to the test bundle. var testFilesPath = path.join('node_modules', 'cordova-android', 'cordova-js-src', 'android'); diff --git a/tasks/lib/require-tr.js b/tasks/lib/require-tr.js index d8e1ff1ec..a5be01191 100644 --- a/tasks/lib/require-tr.js +++ b/tasks/lib/require-tr.js @@ -129,7 +129,6 @@ function _updateRequires(code, platform) { } var module = node.args[0].value; - // make sure require only has one argument and that it starts with cordova (old style require.js) if(module !== undefined && module.indexOf("cordova") === 0) { @@ -137,7 +136,7 @@ function _updateRequires(code, platform) { var scriptpath; var cordovajssrc = path.join(process.cwd(), "platforms", platform, "platform_www", "cordova-js-src") - + // require('cordova') -> cordova.js if(module === "cordova") { scriptPath = node.args[0].value = path.join(root, "src", "cordova_b"); From 4a250651c3a05d4ca3be67076223d2dd36429063 Mon Sep 17 00:00:00 2001 From: Steve Gill Date: Mon, 18 May 2015 12:23:54 -0700 Subject: [PATCH 6/6] CB-8441 added missing requires and updated npm run scripts --- package.json | 6 +++--- tasks/compile-browserify.js | 4 ++-- tasks/compile.js | 2 ++ 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 76c7e9660..11c847677 100644 --- a/package.json +++ b/package.json @@ -12,9 +12,9 @@ "node": "~0.10.x" }, "scripts": { - "test": "grunt test --platformVersion=4.0.0", - "build": "grunt --platfromVersion=4.0.0", - "build-browserify": "grunt compile:browserify --platformVersion=4.0.0" + "test": "grunt test", + "build": "grunt compile", + "build-browserify": "grunt compile-browserify" }, "contributors": [ { diff --git a/tasks/compile-browserify.js b/tasks/compile-browserify.js index f9fbfdf31..d09a829ce 100644 --- a/tasks/compile-browserify.js +++ b/tasks/compile-browserify.js @@ -48,9 +48,9 @@ module.exports = function(grunt) { var platformPkgJson = require('../node_modules/cordova-'+platformName+'/package.json'); platformVersion = platformPkgJson.version; } else { - console.log('please add a platform version flag and value'); + console.log('platformVersion not supplied. Setting platformVersion to N/A'); console.log('ex: grunt compile-browserify --platformVersion=3.6.0'); - throw new Error("platformVersion is required!"); + platformVersion = 'N/A'; } } generate(platformName, useWindowsLineEndings, platformVersion, done); diff --git a/tasks/compile.js b/tasks/compile.js index 858461d66..487e5488c 100644 --- a/tasks/compile.js +++ b/tasks/compile.js @@ -17,6 +17,8 @@ * under the License. */ var generate = require('./lib/packager'); +var fs = require('fs'); +var path = require('path'); module.exports = function(grunt) { grunt.registerMultiTask('compile', 'Packages cordova.js', function() {