* Copies extensions from * extensions/$name/$version/$name.js * to * dist/v0/$name-$version.js * * Optionally copies the CSS at extensions/$name/$version/$name.css into * a generated JS file that can be required from the extensions as * `import {CSS} from '../../../build/$name-0.1.css';` *
(name, version, hasCss, options)
| 416 | * @return {!Promise<void>} |
| 417 | */ |
| 418 | async function buildExtension(name, version, hasCss, options) { |
| 419 | options = options || {}; |
| 420 | if (options.compileOnlyCss && !hasCss) { |
| 421 | return; |
| 422 | } |
| 423 | const extDir = 'extensions/' + name + '/' + version; |
| 424 | |
| 425 | // Use a separate watcher for css and jison compilation. |
| 426 | // The watcher within compileJs recompiles the JS. |
| 427 | if (options.watch) { |
| 428 | await watchExtension(extDir, name, version, hasCss, options); |
| 429 | } |
| 430 | |
| 431 | if (hasCss) { |
| 432 | await buildExtensionCss(extDir, name, version); |
| 433 | if (options.compileOnlyCss) { |
| 434 | return; |
| 435 | } |
| 436 | } |
| 437 | |
| 438 | await compileJison(`${extDir}/**/*.jison`); |
| 439 | if (name === 'amp-bind') { |
| 440 | await doBuildJs(jsBundles, 'ww.max.js', options); |
| 441 | } |
| 442 | if (options.binaries) { |
| 443 | await buildBinaries(extDir, options.binaries, options); |
| 444 | } |
| 445 | if (name === 'amp-analytics') { |
| 446 | await analyticsVendorConfigs(options); |
| 447 | } |
| 448 | |
| 449 | if (options.isRebuild) { |
| 450 | return; |
| 451 | } |
| 452 | |
| 453 | await buildExtensionJs(extDir, name, {...options, bento: false}); |
| 454 | } |
| 455 | |
| 456 | /** |
| 457 | * @param {string} extDir |
no test coverage detected