node index.js /path/to/app/folder index.html
An flat list of HTML Imports, Scripts, and Styles for putting into a Push manifest
/** | |
* @license | |
* Copyright (c) 2015 The Polymer Project Authors. All rights reserved. | |
* This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt | |
* The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt | |
* The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt | |
* Code distributed by Google as part of the polymer project is also | |
* subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt | |
*/ | |
// jshint node: true | |
'use strict'; | |
var fs = require('fs'); | |
var hyd = require('hydrolysis'); | |
var dom5 = require('dom5'); | |
var url = require('url'); | |
var path = require('path'); | |
var basePath = process.argv[2]; | |
var inputPath = process.argv[3]; | |
if (!inputPath || !basePath) { | |
console.error('Need input path!'); | |
process.exit(1); | |
} | |
basePath = path.resolve(basePath); | |
inputPath = path.resolve(path.resolve(basePath, inputPath)); | |
if (fs.statSync(inputPath).isDirectory()) { | |
inputPath = path.join(inputPath, 'index.html'); | |
} | |
var loader = new hyd.Loader(); | |
loader.addResolver(new hyd.FSResolver({ | |
root: basePath, | |
basePath: '/' | |
})); | |
var EXTERNAL = /^(?:https?:)?\/\//; | |
loader.addResolver(new hyd.NoopResolver(EXTERNAL)); | |
var analyzer = new hyd.Analyzer(false, loader); | |
function treeToList(tree, accum) { | |
if (!accum) { | |
accum = []; | |
} | |
accum.push(tree.href); | |
for(var i = 0; i < tree.imports.length; i++) { | |
} | |
} | |
function styleToUrl(href, style) { | |
var src = dom5.getAttribute(style, 'href'); | |
if (EXTERNAL.test(src)) { | |
return; | |
} | |
if (src) { | |
return url.resolve(href, src); | |
} | |
} | |
function scriptToUrl(href, script) { | |
var src = dom5.getAttribute(script, 'src'); | |
if (EXTERNAL.test(src)) { | |
return; | |
} | |
if (src) { | |
return url.resolve(href, src); | |
} | |
} | |
function treeToUrls(tree, accum) { | |
if (!accum) { | |
accum = []; | |
} | |
if (!tree) { | |
return accum; | |
} | |
if (!tree.href) { | |
return accum; | |
} | |
accum.push(tree.href); | |
tree.imports.forEach(function(im) { | |
if (im.href) { | |
treeToUrls(im, accum); | |
} | |
}); | |
tree.html.script.forEach(function(script) { | |
var u = scriptToUrl(tree.href, script); | |
if (u) { | |
accum.push(u); | |
} | |
}); | |
tree.html.style.forEach(function(style) { | |
var u = styleToUrl(tree.href, style); | |
if (u) { | |
accum.push(u); | |
} | |
}); | |
return accum; | |
} | |
inputPath = path.join('/', path.relative(basePath, inputPath)); | |
//console.log(inputPath); | |
analyzer.metadataTree(inputPath).then(function(tree) { | |
var list = treeToUrls(tree).slice(1).reverse(); | |
console.log(list); | |
}).catch(function(error) { | |
console.log(error); | |
}); |