ractive
Version:
Next-generation DOM manipulation
119 lines (101 loc) • 2.54 kB
JavaScript
module.exports = function ( grunt) {
return {
full: {
options: {
out: '<%= tmpDir %>/ractive.js',
paths: {
'legacy': 'empty/legacy'
},
onBuildWrite: getOnBuildWrite()
}
},
legacy: {
options: {
out: '<%= tmpDir %>/ractive-legacy.js',
onBuildWrite: getOnBuildWrite()
}
},
runtime: {
options: {
out: '<%= tmpDir %>/ractive.runtime.js',
paths: {
'parse/_parse': 'empty/parse',
'legacy': 'empty/legacy'
},
onBuildWrite: getOnBuildWrite()
}
},
runtime_legacy: {
options: {
out: '<%= tmpDir %>/ractive-legacy.runtime.js',
paths: {
'parse/_parse': 'empty/parse'
},
onBuildWrite: getOnBuildWrite()
}
},
options: {
baseUrl: '<%= tmpDir %>/<%= tmpSrcDir %>/',
name: 'Ractive',
optimize: 'none',
logLevel: 2
}
};
function getOnBuildWrite () {
var prefixes, used, banned;
prefixes = {
'extend__extend': 'Ractive_extend',
'typeof': '_typeof'
}; // this is why we need a closure for each build target
used = {};
return function ( name, path, contents ) {
var relativePath, prefix, moduleNames = {},
srcPath = grunt.template.process( '<%= tmpDir %>/<%= tmpSrcDir %>/' );
relativePath = path.substring( path.indexOf( srcPath ) + srcPath.length );
prefix = '/* ' + relativePath + ' */\n';
return prefix + require( 'amdclean' ).clean({
prefixTransform: function ( prefix ) {
var match, result, lastPart;
// special case
if ( prefix === 'utils_hasOwnProperty' ) {
return 'hasOwn';
}
if ( prefixes[ prefix ] ) {
return prefixes[ prefix ];
}
prefix = prefix.replace( /(\w+)__(\w+)/, function ( match, $1, $2 ) {
if ( $1 === $2 ) {
return $1;
}
return match;
});
if ( match = /(\w+)_prototype_(\w+)$/.exec( prefix ) ) {
result = match[1] + '$' + match[2];
} else {
if ( prefixes[ prefix ] ) {
result = prefixes[ prefix ];
}
else {
lastPart = prefix.substring( prefix.lastIndexOf( '_' ) + 1 );
if ( prefixes[ lastPart ] ) {
result = prefixes[ lastPart ];
}
else if ( !used[ lastPart ] ) {
process.stdout.write('-');
result = lastPart;
prefixes[ prefix ] = lastPart;
used[ lastPart ] = true;
}
else {
console.error( 'Existing prefix', prefix );
result = prefix;
}
}
}
return result;
},
code: contents
}) + '\n';
};
};
};