1 | var path = require('path');
|
2 |
|
3 | var 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 |
|
29 | module.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 |
|
44 | var cdnData = require(cdn + '-cdn-data');
|
45 | if(cdnData[pkg]) {
|
46 |
|
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 |
|
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 |
|
68 | module.exports.configure = function configure(opts) {
|
69 | if(opts.cdnDataLibraries) {
|
70 | knownCDNs.push.apply(knownCDNs, opts.cdnDataLibraries);
|
71 | }
|
72 | };
|