1+ 'use strict' ;
2+ const rollup = require ( 'rollup' ) . rollup ;
3+ const p_prefix = 'rollup-plugin-' ;
4+ const r_plugin = {
5+ npm : require ( p_prefix + 'node-resolve' ) ,
6+ cjs : require ( p_prefix + 'commonjs' ) ,
7+ multiEntry : require ( p_prefix + 'multi-entry' )
8+ } ;
9+
10+ const path = require ( 'path' ) ;
11+
12+ class hexoRollupRenderer {
13+ constructor ( hexo ) {
14+ this . _hexo = hexo ;
15+ }
16+
17+ static isString ( str ) {
18+ return typeof str === 'string' ;
19+ }
20+
21+ static get rollupPlugins ( ) {
22+ return [
23+ r_plugin . multiEntry ( ) ,
24+ r_plugin . npm ( {
25+ browser : true
26+ } ) ,
27+ r_plugin . cjs ( )
28+ ]
29+ }
30+
31+ //
32+ // Convert config of the entry to object.
33+ //
34+ get entry ( ) {
35+ const cwd = process . cwd ( ) ;
36+ let entry = this . userConfig . entry ;
37+ if ( hexoRollupRenderer . isString ( entry ) ) entry = Array . of ( entry ) ;
38+ if ( ! entry ) return [ ] ;
39+ return entry . filter ( n => n . indexOf ( 'source' ) !== - 1 ) . map ( n => path . join ( cwd , n ) ) ;
40+ }
41+
42+ get userConfig ( ) {
43+ return Object . assign ( { } ,
44+ this . _hexo . theme . config . rollup || { } ,
45+ this . _hexo . config . rollup || { }
46+ ) ;
47+ }
48+
49+ get renderer ( ) {
50+ const self = this ;
51+ return function ( data ) {
52+ if ( self . entry . length === 0 ) {
53+ return Promise . resolve ( data . text ) ;
54+ }
55+ const config = Object . assign ( { } , self . userConfig , {
56+ entry : data . path ,
57+ plugins : hexoRollupRenderer . rollupPlugins
58+ } ) ;
59+ return rollup ( config ) . then ( bundle => bundle . generate ( {
60+ format : 'iife' ,
61+ moduleName : 'hexo_rollup'
62+ } ) . code ) ;
63+ } ;
64+ }
65+ }
66+
67+ /* globals hexo */
68+ const classes = new hexoRollupRenderer ( hexo ) ;
69+ hexo . extend . renderer . register ( 'js' , 'js' , classes . renderer ) ;
0 commit comments