Skip to content

Commit

Permalink
Merge pull request #9 from fuzhenn/rollup
Browse files Browse the repository at this point in the history
Migrate modules from amd to ES6 import/export
  • Loading branch information
pissang authored Oct 10, 2017
2 parents f4ca4b8 + f231ca5 commit 525c191
Show file tree
Hide file tree
Showing 168 changed files with 26,935 additions and 27,446 deletions.
166 changes: 0 additions & 166 deletions build/amd2common.js

This file was deleted.

15 changes: 10 additions & 5 deletions build/essl2js.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,21 @@ glob(ROOT + '**/*.essl', function (err, files) {
files.forEach(function (filePath) {
var esslCode = fs.readFileSync(filePath, 'utf-8');
// TODO Remove comment
esslCode = esslCode.replace(/\/\/.*\n/g, '');
esslCode = esslCode.replace(/ +/g, ' ');
// esslCode = esslCode.replace(/\/\/.*\n/g, '');
// esslCode = esslCode.replace(/ +/g, ' ');

//From THREE.js's rollup.config.js
esslCode = esslCode
.replace( /[ \t]*\/\/.*\n/g, '' ) // remove //
.replace( /[ \t]*\/\*[\s\S]*?\*\//g, '' ) // remove /* */
.replace( /\n{2,}/g, '\n' ) // # \n+ to \n

// var dir = path.dirname(filePath);
// var baseName = path.basename(filePath, '.essl');
fs.writeFileSync(
filePath + '.js',
'define(function () {\n' +
'return ' + JSON.stringify(esslCode) + ';\n'
+ '});',
'export default ' +
JSON.stringify(esslCode) + ';\n',
'utf-8'
);
});
Expand Down
69 changes: 61 additions & 8 deletions build/genentry.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
var glob = require('glob');
var fs = require('fs');
var path = require('path');

var ROOT = __dirname + '/../src/';
var OUTPUT_PORTAL = 'qtek.js';
Expand All @@ -11,6 +12,8 @@ var template = fs.readFileSync(__dirname + '/qtek_template.js', 'utf-8');

var tsReferenceList = [];

var idx = 0;
var blacklist = ['shader/builtin'];
glob('**/*.js', {
cwd : ROOT
}, function(err, files){
Expand All @@ -20,14 +23,17 @@ glob('**/*.js', {
files.forEach(function(file){
if (
file.match(/qtek.*?\.js/)
|| file.match(/\.essl\.js/)
|| file.indexOf('_') >= 0
|| file.endsWith('.essl.js')
) {
return;
}
var filePathWithOutExt = file.slice(0, -3);
if (blacklist.indexOf(filePathWithOutExt) >= 0) {
return;
}
var pathArray = filePathWithOutExt.split('/');
var baseName = pathArray.pop();
var baseName = pathArray.pop() + '$' + idx++;

var object = pathArray.reduce(function(memo, propName){
if( ! memo[propName] ){
Expand All @@ -36,7 +42,7 @@ glob('**/*.js', {
return memo[propName];
}, namespace);

object[baseName] = '__require(\'./' + filePathWithOutExt + '\')__';
object[baseName] = `import ${baseName} from './${filePathWithOutExt}';`;

// Get typescript reference list
var tsPath = TS_ROOT + filePathWithOutExt + '.d.ts';
Expand All @@ -46,10 +52,8 @@ glob('**/*.js', {
}
});

var jsString = JSON.stringify( namespace, null, '\t' );
jsString = jsString.replace(/\"\__require\((\S*?)\)__\"/g, 'require($1)');

var output = template.replace(/\{\{\$exportsObject\}\}/, jsString);
var exportCode = exportPkg(namespace);
var output = template.replace(/\{\{\$exportsObject\}\}/, exportCode);

fs.writeFileSync(ROOT + OUTPUT_PORTAL, output, 'utf-8');

Expand All @@ -58,4 +62,53 @@ glob('**/*.js', {
return '///<reference path="' + path + '" />';
}).join('\n');
fs.writeFileSync(TS_ROOT + TS_PORTAL, referenceCode, 'utf-8');
});
});

/**
* Export pkg to import/export codes
* @param {Object} pkg package to export
* @param {Boolean} isChild if it is a child package
* @param {String} pkgName name of the package, if it's a child
* @param {String[]} externImports imports
*/
function exportPkg(pkg, isChild, pkgName, externImports) {
var keys = Object.keys(pkg);
var imports = externImports || [];
var children = keys.map(function (name) {
if (isString(pkg[name])) {
var className = name.substring(0, name.indexOf('$'));
// a class, not a packagge
imports.push(pkg[name]);
if (pkgName) {
// export as a child class in package
// indentation + (key : value)
return (isChild ? ' ' : ' ') + className + ' : ' + name;
} else {
// export as a class at root level
return `export { ${name} as ${className} };`;
}
} else {
// export as a child package
return exportPkg(pkg[name], pkgName && true, name, imports);
}
});
var importCode = (externImports ? '' : imports.join('\n') + '\n\n');
var exportCode;
if (pkgName) {
if (isChild) {
// export as a grand-child package
exportCode = ` ${pkgName} : {\n${children.join(',\n')}\n }`;
} else {
// export as a package at root level
exportCode = `\nvar ${pkgName} = {\n${children.join(',\n')}\n};\nexport { ${pkgName} };\n`;
}
} else {
// export child classes
exportCode = children.join('\n');
}
return importCode + exportCode;
}

function isString(s) {
return typeof s === 'string';
}
6 changes: 1 addition & 5 deletions build/qtek_template.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,5 @@
/** @namespace qtek.shader */
/** @namespace qtek.texture */
/** @namespace qtek.util */
define(function(require) {

var exportsObject = {{$exportsObject}};

return exportsObject;
});
{{$exportsObject}};
27 changes: 12 additions & 15 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name" : "qtek",
"version" : "0.4.3",
"name": "qtek",
"version": "0.4.3",
"description": "WebGL graphic library",
"keywords": [
"graphic",
Expand All @@ -14,27 +14,24 @@
"essl2js": {
"patterns": ["src"],
"extensions": "essl"
},
"amd2common": {
"patterns": ["src"],
"extensions": "js"
}
},
"jsnext:main" : "dist/qtek.es.js",
"module" : "dist/qtek.es.js",
"main" : "dist/qtek.js",
"scripts": {
"build": "npm run essl2js && npm run genentry && rollup -c",
"genentry": "node build/genentry.js",
"essl2js": "node build/essl2js.js",
"amd2common": "node build/amd2common.js",
"prepublish": "npm run essl2js && npm run genentry && npm run amd2common"
"prepublish": "npm run essl2js && npm run genentry"
},
"repository": {
"type": "git",
"url": "https://github.com/pissang/qtek.git"
},
"devDependencies" : {
"webpack": "^1.12.13",
"esprima": "^2.7.2",
"estraverse": "^4.1.1",
"fs-extra": "^0.26.5",
"glob": "^7.0.0"
"devDependencies": {
"glob": "^7.0.0",
"rollup": "^0.49.3",
"rollup-plugin-commonjs": "^8.2.1"
}
}
}
23 changes: 23 additions & 0 deletions rollup.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import commonjs from 'rollup-plugin-commonjs';


export default {
input: 'src/qtek.js',
plugins: [
commonjs({
include: 'src/dep/*',
})
],
// sourceMap: true,
output: [
{
format: 'umd',
name: 'qtek',
file: 'dist/qtek.js'
},
{
format: 'es',
file: 'dist/qtek.es.js'
}
]
};
Loading

0 comments on commit 525c191

Please sign in to comment.