UNPKG

1.96 kBJavaScriptView Raw
1var path = require('path');
2
3var knownCDNs = [ 'google', 'cdnjs', 'jsdelivr' ],
4 packageMaps = {
5 'angular.js': 'angular',
6 'angularjs': 'angular',
7 'backbone.js': 'backbone',
8 'backbonejs': 'backbone',
9 'ember.js': 'ember',
10 'emberjs': 'ember',
11 'prototypejs': 'prototype'
12 },
13 packageTests = {
14 'angular': 'window.angular',
15 'backbone': 'window.Backbone',
16 'dojo': 'window.dojo',
17 'ember': 'window.Ember',
18 'jquery': 'window.jQuery',
19 'jquery-ui': 'window.jQuery && window.jQuery.ui',
20 'lodash': 'window._',
21 'mootools': 'window.MooTools',
22 'prototype': 'window.Prototype',
23 'react': 'window.React',
24 'swfobject': 'window.swfobject',
25 'underscore': 'window._'
26 },
27 versionString = '${ version }';
28
29module.exports.get = function getCDNData(pattern) {
30 var ret = { file: pattern };
31 if(pattern.indexOf(':') === -1) {
32 return ret;
33 }
34 var patternParts = pattern.match(/([^:]+)\:([^:@]+)(?::([^@]+))?(?:@(.+))?/);
35 if(patternParts) {
36 var cdn = patternParts[1],
37 pkg = patternParts[2],
38 filename = patternParts[3] || false,
39 version = patternParts[4] || false,
40 url;
41
42 if(knownCDNs.indexOf(cdn) !== -1) {
43 // load cdn-data package
44 var cdnData = require(cdn + '-cdn-data');
45 if(cdnData[pkg]) {
46 // Great! Let's build some default data
47 url = cdnData[pkg].url(versionString);
48 if(filename) {
49 url = url.split(versionString)[0] + versionString + '/' + filename;
50 }
51 ret._foundCdn = true;
52 ret.cdn = url;
53 // fix Windows backward paths
54 ret.file = path.join('**', ret.cdn.split(versionString)[1]).replace(/\.min\./, '.').split(path.sep).join('/');
55 ret.package = packageMaps[pkg] || pkg;
56 if(packageTests[ret.package]) {
57 ret.test = packageTests[ret.package];
58 }
59 if(version) {
60 ret.version = version;
61 }
62 }
63 }
64 }
65 return ret;
66};
67
68module.exports.configure = function configure(opts) {
69 if(opts.cdnDataLibraries) {
70 knownCDNs.push.apply(knownCDNs, opts.cdnDataLibraries);
71 }
72};