diff --git a/.babelrc b/.babelrc new file mode 100644 index 0000000000..242e95ee03 --- /dev/null +++ b/.babelrc @@ -0,0 +1,9 @@ +{ + "plugins": ["jsdoc-closure"], + "parserOpts": { + "parser": "recast" + }, + "generatorOpts": { + "generator": "recast" + } +} diff --git a/package.json b/package.json index 6c5cc011bc..bae113bf4e 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,10 @@ "karma": "karma start test/karma.config.js", "serve-examples": "mkdir -p build/examples && webpack --config examples/webpack/config.js --watch & serve build/examples", "build-examples": "webpack --config examples/webpack/config.js --env=prod", - "build": "webpack --config config/webpack.js" + "build-index": "node tasks/generate-index.js", + "build": "npm run build-index && webpack --config config/webpack.js", + "src-closure": "babel --out-dir build/src-closure src/", + "typecheck": "npm run build-index && npm run src-closure && node tasks/typecheck" }, "main": "src/ol/index.js", "repository": { @@ -37,7 +40,9 @@ }, "devDependencies": { "async": "2.6.0", + "babel-cli": "^6.26.0", "babel-minify-webpack-plugin": "^0.3.0", + "babel-plugin-jsdoc-closure": "^1.0.2", "clean-css-cli": "4.1.10", "copy-webpack-plugin": "^4.0.1", "coveralls": "3.0.0", @@ -67,6 +72,7 @@ "nomnom": "1.8.1", "pixelmatch": "^4.0.2", "proj4": "2.4.4", + "recast": "^0.13.0", "serve": "^6.0.6", "sinon": "4.2.2", "url-polyfill": "^1.0.7", diff --git a/tasks/generate-index.js b/tasks/generate-index.js index eb3713b26a..dc02268697 100644 --- a/tasks/generate-index.js +++ b/tasks/generate-index.js @@ -20,6 +20,10 @@ function getSymbols(callback) { }); } +function getPath(name) { + const fullPath = require.resolve(path.resolve('src', name)); + return './' + path.posix.relative('src/', fullPath); +} /** * Generate a list of symbol names. @@ -36,12 +40,12 @@ function addImports(symbols, callback) { if (defaultExport.length > 1) { const from = defaultExport[0].replace(/^module\:/, './'); const importName = from.replace(/[.\/]+/g, '$'); - const defaultImport = `import ${importName} from '${from}.js';`; + const defaultImport = `import ${importName} from '${getPath(from)}';`; imports[defaultImport] = true; } else if (namedExport.length > 1) { const from = namedExport[0].replace(/^module\:/, './'); const importName = from.replace(/[.\/]+/g, '_'); - const namedImport = `import * as ${importName} from '${from}.js';`; + const namedImport = `import * as ${importName} from '${getPath(from)}';`; imports[namedImport] = true; } }); @@ -135,7 +139,7 @@ function main(callback) { if (require.main === module) { async.waterfall([ main, - fs.outputFile.bind(fs, path.join('src', 'index.js')) + fs.outputFile.bind(fs, path.resolve('src', 'index.js')) ], function(err) { if (err) { process.stderr.write(err.message + '\n'); diff --git a/tasks/build-typecheck.js b/tasks/typecheck.js similarity index 63% rename from tasks/build-typecheck.js rename to tasks/typecheck.js index eee96739e2..9c4632ec41 100644 --- a/tasks/build-typecheck.js +++ b/tasks/typecheck.js @@ -2,28 +2,19 @@ const Compiler = require('google-closure-compiler').compiler; const compiler = new Compiler({ js: [ - './src/**.js', + './build/src-closure/**.js', './node_modules/pbf/package.json', './node_modules/pbf/**.js', './node_modules/ieee754/**.js', './node_modules/pixelworks/package.json', './node_modules/pixelworks/**.js', './node_modules/rbush/package.json', './node_modules/rbush/**.js', 'node_modules/quickselect/**.js' ], - entry_point: './src/index.js', + entry_point: './build/src-closure/index.js', module_resolution: 'NODE', - //FIXME Use compilation_level: 'ADVANCED' after we have switched to path types - compilation_level: 'SIMPLE', - new_type_inf: true, - generate_exports: true, - export_local_property_definitions: true, - output_wrapper: '(function(){%output%})() //# sourceMappingURL=ol.js.map', - js_output_file: 'build/ol.js', - create_source_map: '%outname%.map', - source_map_include_content: true, - //FIXME Turn jscomp_error on for * when we have path types everywhere + dependency_mode: 'STRICT', + process_common_js_modules: true, + checks_only: true, //FIXME Change newCheckTypes to jscomp_error when we have path types everywhere jscomp_warning: ['newCheckTypes'], // Options to make dependencies work - process_common_js_modules: true, - dependency_mode: 'STRICT', hide_warnings_for: 'node_modules' });