|
@@ -8,58 +8,10 @@
|
|
|
* compiler.main(options);
|
|
|
*/
|
|
|
|
|
|
-
|
|
|
- * Helper for concatenating Amber generated AMD modules.
|
|
|
- * The produced output can be exported and run as an independent program.
|
|
|
- *
|
|
|
- * var concatenator = createConcatenator();
|
|
|
- * concatenator.start();
|
|
|
- * concatenator.add(module1);
|
|
|
- * concatenator.addId(module1_ID);
|
|
|
- *
|
|
|
- * concatenator.finish("//some last code");
|
|
|
- * var concatenation = concatenator.toString();
|
|
|
- *
|
|
|
- *
|
|
|
- */
|
|
|
-function createConcatenator() {
|
|
|
- return {
|
|
|
- elements: [],
|
|
|
- ids: [],
|
|
|
- add: function () {
|
|
|
- this.elements.push.apply(this.elements, arguments);
|
|
|
- },
|
|
|
- addId: function () {
|
|
|
- this.ids.push.apply(this.ids, arguments);
|
|
|
- },
|
|
|
- forEach: function () {
|
|
|
- this.elements.forEach.apply(this.elements, arguments);
|
|
|
- },
|
|
|
- start: function () {
|
|
|
- this.add(
|
|
|
- 'var define = (' + require('amdefine') + ')(null, function (id) { throw new Error("Dependency not found: " + id); }), requirejs = define.require;',
|
|
|
- 'define("amber/browser-compatibility", [], {});'
|
|
|
- );
|
|
|
- },
|
|
|
- finish: function (realWork) {
|
|
|
- this.add(
|
|
|
- 'define("app", ["' + this.ids.join('","') + '"], function (boot) {',
|
|
|
- 'boot.api.initialize();',
|
|
|
- realWork,
|
|
|
- '});',
|
|
|
- 'requirejs(["app"]);'
|
|
|
- );
|
|
|
- },
|
|
|
- toString: function () {
|
|
|
- return this.elements.join('\n');
|
|
|
- }
|
|
|
- };
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
var path = require('path'),
|
|
|
fs = require('fs'),
|
|
|
- Promise = require('es6-promise').Promise;
|
|
|
+ Promise = require('es6-promise').Promise,
|
|
|
+ requirejs = require('../node_modules/requirejs/bin/r');
|
|
|
|
|
|
|
|
|
* AmberCompiler constructor function.
|
|
@@ -71,12 +23,24 @@ function AmberCompiler(amber_dir) {
|
|
|
}
|
|
|
|
|
|
this.amber_dir = amber_dir;
|
|
|
+ requirejs = requirejs.config({
|
|
|
+ context: "amberc",
|
|
|
+ nodeRequire: require,
|
|
|
+ paths: {
|
|
|
+ 'amber': path.join(amber_dir, 'support'),
|
|
|
+ 'amber_core': path.join(amber_dir, 'src')
|
|
|
+ }
|
|
|
+ });
|
|
|
|
|
|
- this.kernel_libraries = ['boot', 'Kernel-Objects', 'Kernel-Classes', 'Kernel-Methods',
|
|
|
- 'Kernel-Collections', 'Kernel-Infrastructure', 'Kernel-Exceptions', 'Kernel-Announcements',
|
|
|
- 'Platform-Services', 'Platform-Node'];
|
|
|
- this.compiler_libraries = this.kernel_libraries.concat(['parser', 'Platform-ImportExport', 'Compiler-Exceptions',
|
|
|
- 'Compiler-Core', 'Compiler-AST', 'Compiler-Exceptions', 'Compiler-IR', 'Compiler-Inlining', 'Compiler-Semantic']);
|
|
|
+ this.kernel_libraries = ['amber/boot',
|
|
|
+ 'amber_core/Kernel-Objects', 'amber_core/Kernel-Classes', 'amber_core/Kernel-Methods',
|
|
|
+ 'amber_core/Kernel-Collections', 'amber_core/Kernel-Infrastructure',
|
|
|
+ 'amber_core/Kernel-Exceptions', 'amber_core/Kernel-Announcements',
|
|
|
+ 'amber_core/Platform-Services', 'amber_core/Platform-Node'];
|
|
|
+ this.compiler_libraries = this.kernel_libraries.concat(['amber/parser',
|
|
|
+ 'amber_core/Platform-ImportExport', 'amber_core/Compiler-Exceptions',
|
|
|
+ 'amber_core/Compiler-Core', 'amber_core/Compiler-AST', 'amber_core/Compiler-Exceptions',
|
|
|
+ 'amber_core/Compiler-IR', 'amber_core/Compiler-Inlining', 'amber_core/Compiler-Semantic']);
|
|
|
}
|
|
|
|
|
|
|
|
@@ -285,86 +249,24 @@ function withImportsExcluded(data) {
|
|
|
function create_compiler(configuration) {
|
|
|
var compiler_files = configuration.compiler_libraries;
|
|
|
var include_files = configuration.load;
|
|
|
- var builder;
|
|
|
- return Promise.all(
|
|
|
- compiler_files.map(function (file) {
|
|
|
- return resolve_js(file, configuration);
|
|
|
- })
|
|
|
- )
|
|
|
- .then(function (compilerFilesArray) {
|
|
|
- return Promise.all(
|
|
|
- compilerFilesArray.map(function (file) {
|
|
|
- return new Promise(function (resolve, reject) {
|
|
|
- console.log('Loading file: ' + file);
|
|
|
- fs.readFile(file, function (err, data) {
|
|
|
- if (err)
|
|
|
- reject(err);
|
|
|
- else
|
|
|
- resolve(data);
|
|
|
- });
|
|
|
- });
|
|
|
- })
|
|
|
- )
|
|
|
- })
|
|
|
- .then(function (files) {
|
|
|
- builder = createConcatenator();
|
|
|
- builder.add('(function() {');
|
|
|
- builder.start();
|
|
|
-
|
|
|
- files.forEach(function (data) {
|
|
|
-
|
|
|
- builder.add(data);
|
|
|
-
|
|
|
- var match = ('' + data).match(/(^|\n)define\("([^"]*)"/);
|
|
|
- if (match) {
|
|
|
- builder.addId(match[2]);
|
|
|
- }
|
|
|
- });
|
|
|
- })
|
|
|
- .then(function () {
|
|
|
- return Promise.all(
|
|
|
- include_files.map(function (file) {
|
|
|
- return resolve_js(file, configuration);
|
|
|
- })
|
|
|
- );
|
|
|
- })
|
|
|
- .then(function (includeFilesArray) {
|
|
|
- return Promise.all(
|
|
|
- includeFilesArray.map(function (file) {
|
|
|
- return new Promise(function (resolve, reject) {
|
|
|
- console.log('Loading library file: ' + file);
|
|
|
- fs.readFile(file, function (err, data) {
|
|
|
- if (err)
|
|
|
- reject(err);
|
|
|
- else
|
|
|
- resolve(data);
|
|
|
- });
|
|
|
- });
|
|
|
- })
|
|
|
- )
|
|
|
- })
|
|
|
- .then(function (files) {
|
|
|
- var loadIds = [];
|
|
|
+ return new Promise(function (resolve, reject) {
|
|
|
+ requirejs(compiler_files, function (boot) {
|
|
|
+ configuration.core = boot.api;
|
|
|
+ configuration.globals = boot.globals;
|
|
|
+ resolve(configuration);
|
|
|
+ }, function (err) {
|
|
|
+ reject(err);
|
|
|
+ });
|
|
|
+ })
|
|
|
+ .then(function (configuration) {
|
|
|
+ var files = [];
|
|
|
files.forEach(function (data) {
|
|
|
data = data + '';
|
|
|
-
|
|
|
- var match = data.match(/^define\("([^"]*)"/);
|
|
|
- if (match) {
|
|
|
- loadIds.push(match[1]);
|
|
|
- data = withImportsExcluded(data);
|
|
|
- }
|
|
|
- builder.add(data);
|
|
|
+ data = withImportsExcluded(data);
|
|
|
+
|
|
|
});
|
|
|
|
|
|
-
|
|
|
- builder.finish('configuration.core = boot.api; configuration.globals = boot.globals;');
|
|
|
- loadIds.forEach(function (id) {
|
|
|
- builder.add('requirejs("' + id + '");');
|
|
|
- });
|
|
|
- builder.add('})();');
|
|
|
-
|
|
|
- eval(builder.toString());
|
|
|
-
|
|
|
+ configuration.core.initialize();
|
|
|
console.log('Compiler loaded');
|
|
|
|
|
|
configuration.globals.ErrorHandler._register_(configuration.globals.RethrowErrorHandler._new());
|