/* -*- 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();