blob: 864e42925a1679969b1c6ddbe48cff02a671bd12 [file] [log] [blame]
#!/usr/bin/env node
/*
* 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.
*/
fs = require('fs')
path = require('path')
//------------------------------------------------------------------------------
process.chdir(path.join(__dirname, ".."))
var platforms = getPlatforms()
console.log("//-------------------------------------------------------")
console.log("// graphviz .dot file for cordova requires by platform")
console.log("// http://www.graphviz.org/")
console.log("// ")
console.log("// - ./build/gv-requires.js > ~/tmp/requires.dot")
console.log("// - [edit dot file to leave just one digraph]")
console.log("// - dot -Tsvg ~/tmp/requires.dot > ~/tmp/requires.svg")
console.log("// - [open svg file in a browser]")
console.log("//-------------------------------------------------------")
console.log("")
for (var i=0; i<platforms.length; i++) {
var platform = platforms[i]
generateGraph(platform)
}
//------------------------------------------------------------------------------
function getPlatforms() {
var entries = fs.readdirSync("pkg")
var platforms = []
for (var i=0; i<entries.length; i++) {
var entry = entries[i]
var match = entry.match(/^cordova\.(.*)\.js$/)
if (match)
platforms.push(match[1])
}
return platforms
}
//------------------------------------------------------------------------------
function generateGraph(platform) {
var modules = {}
var jsFile = path.join("pkg", "cordova." + platform + ".js")
contents = fs.readFileSync(jsFile, 'utf-8')
contents = contents.replace(/\n/g, ' ')
modulesSource = contents.split(/define\(/)
console.log("//--------------------------------------------------")
console.log("// graphviz .dot file for " + platform)
console.log("//--------------------------------------------------")
console.log("digraph G {")
for (var i=0; i< modulesSource.length; i++) {
var moduleSource = modulesSource[i];
var match = moduleSource.match(/'(.*?)'(.*)/)
if (!match) continue
var moduleName = match[1]
moduleSource = match[2]
if (moduleName.match(/\s/)) continue
if (moduleName == "") continue
if (moduleSource == "") continue
modules[moduleName] = modules[moduleName] || []
// console.log(" found module " + moduleName)
var requires = getRequires(moduleSource, modules[moduleName])
for (var j=0; j < requires.length; j++) {
var gvModule = moduleName.replace(/\//g, '\\n')
var gvRequire = requires[j].replace(/\//g, '\\n')
console.log(' "' + gvModule + '" -> "' + gvRequire + '";')
}
}
console.log("}")
console.log("")
}
//------------------------------------------------------------------------------
function getRequires(moduleSource, requires) {
var pattern = /.*?require\((.*?)\)(.*)/
var result = []
// console.log(moduleSource)
var match = moduleSource.match(pattern)
while (match) {
var require = match[1]
moduleSource = match[2]
require = require.replace(/'|"/g, '')
result.push(require)
match = moduleSource.match(pattern)
}
return result
}