166 lines
4 KiB
JavaScript
166 lines
4 KiB
JavaScript
/* -*- Mode: js; js-indent-level: 2; -*- */
|
|
/*
|
|
* Copyright 2011 Mozilla Foundation and contributors
|
|
* Licensed under the New BSD license. See LICENSE or:
|
|
* http://opensource.org/licenses/BSD-3-Clause
|
|
*/
|
|
var path = require('path');
|
|
var fs = require('fs');
|
|
var copy = require('dryice').copy;
|
|
|
|
function removeAmdefine(src) {
|
|
src = String(src).replace(
|
|
/if\s*\(typeof\s*define\s*!==\s*'function'\)\s*{\s*var\s*define\s*=\s*require\('amdefine'\)\(module,\s*require\);\s*}\s*/g,
|
|
'');
|
|
src = src.replace(
|
|
/\b(define\(.*)('amdefine',?)/gm,
|
|
'$1');
|
|
return src;
|
|
}
|
|
removeAmdefine.onRead = true;
|
|
|
|
function makeNonRelative(src) {
|
|
return src
|
|
.replace(/require\('.\//g, 'require(\'source-map/')
|
|
.replace(/\.\.\/\.\.\/lib\//g, '');
|
|
}
|
|
makeNonRelative.onRead = true;
|
|
|
|
function buildBrowser() {
|
|
console.log('\nCreating dist/source-map.js');
|
|
|
|
var project = copy.createCommonJsProject({
|
|
roots: [ path.join(__dirname, 'lib') ]
|
|
});
|
|
|
|
copy({
|
|
source: [
|
|
'build/mini-require.js',
|
|
{
|
|
project: project,
|
|
require: [ 'source-map/source-map-generator',
|
|
'source-map/source-map-consumer',
|
|
'source-map/source-node']
|
|
},
|
|
'build/suffix-browser.js'
|
|
],
|
|
filter: [
|
|
copy.filter.moduleDefines,
|
|
removeAmdefine
|
|
],
|
|
dest: 'dist/source-map.js'
|
|
});
|
|
}
|
|
|
|
function buildBrowserMin() {
|
|
console.log('\nCreating dist/source-map.min.js');
|
|
|
|
copy({
|
|
source: 'dist/source-map.js',
|
|
filter: copy.filter.uglifyjs,
|
|
dest: 'dist/source-map.min.js'
|
|
});
|
|
}
|
|
|
|
function buildFirefox() {
|
|
console.log('\nCreating dist/SourceMap.jsm');
|
|
|
|
var project = copy.createCommonJsProject({
|
|
roots: [ path.join(__dirname, 'lib') ]
|
|
});
|
|
|
|
copy({
|
|
source: [
|
|
'build/prefix-source-map.jsm',
|
|
{
|
|
project: project,
|
|
require: [ 'source-map/source-map-consumer',
|
|
'source-map/source-map-generator',
|
|
'source-map/source-node' ]
|
|
},
|
|
'build/suffix-source-map.jsm'
|
|
],
|
|
filter: [
|
|
copy.filter.moduleDefines,
|
|
removeAmdefine,
|
|
makeNonRelative
|
|
],
|
|
dest: 'dist/SourceMap.jsm'
|
|
});
|
|
|
|
// Create dist/test/Utils.jsm
|
|
console.log('\nCreating dist/test/Utils.jsm');
|
|
|
|
project = copy.createCommonJsProject({
|
|
roots: [ __dirname, path.join(__dirname, 'lib') ]
|
|
});
|
|
|
|
copy({
|
|
source: [
|
|
'build/prefix-utils.jsm',
|
|
'build/assert-shim.js',
|
|
{
|
|
project: project,
|
|
require: [ 'test/source-map/util' ]
|
|
},
|
|
'build/suffix-utils.jsm'
|
|
],
|
|
filter: [
|
|
copy.filter.moduleDefines,
|
|
removeAmdefine,
|
|
makeNonRelative
|
|
],
|
|
dest: 'dist/test/Utils.jsm'
|
|
});
|
|
|
|
function isTestFile(f) {
|
|
return /^test\-.*?\.js/.test(f);
|
|
}
|
|
|
|
var testFiles = fs.readdirSync(path.join(__dirname, 'test', 'source-map')).filter(isTestFile);
|
|
|
|
testFiles.forEach(function (testFile) {
|
|
console.log('\nCreating', path.join('dist', 'test', testFile.replace(/\-/g, '_')));
|
|
|
|
copy({
|
|
source: [
|
|
'build/test-prefix.js',
|
|
path.join('test', 'source-map', testFile),
|
|
'build/test-suffix.js'
|
|
],
|
|
filter: [
|
|
removeAmdefine,
|
|
makeNonRelative,
|
|
function (input, source) {
|
|
return input.replace('define(',
|
|
'define("'
|
|
+ path.join('test', 'source-map', testFile.replace(/\.js$/, ''))
|
|
+ '", ["require", "exports", "module"], ');
|
|
},
|
|
function (input, source) {
|
|
return input.replace('{THIS_MODULE}', function () {
|
|
return "test/source-map/" + testFile.replace(/\.js$/, '');
|
|
});
|
|
}
|
|
],
|
|
dest: path.join('dist', 'test', testFile.replace(/\-/g, '_'))
|
|
});
|
|
});
|
|
}
|
|
|
|
function ensureDir(name) {
|
|
var dirExists = false;
|
|
try {
|
|
dirExists = fs.statSync(name).isDirectory();
|
|
} catch (err) {}
|
|
|
|
if (!dirExists) {
|
|
fs.mkdirSync(name, 0777);
|
|
}
|
|
}
|
|
|
|
ensureDir("dist");
|
|
ensureDir("dist/test");
|
|
buildFirefox();
|
|
buildBrowser();
|
|
buildBrowserMin();
|