diff --git a/.agignore b/.agignore new file mode 100644 index 0000000..849ddff --- /dev/null +++ b/.agignore @@ -0,0 +1 @@ +dist/ diff --git a/.gitignore b/.gitignore index 8215547..98754ac 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ bower_components tmp coverage .DS_Store +*.sw? diff --git a/.travis.yml b/.travis.yml index e814e7f..c12ed0c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,22 +7,24 @@ node_js: - '0.11' - '0.12' - 'iojs' + - 'stable' env: global: - SAUCE_LABS=false PARSER=false OPTIONS="" matrix: - PARSER="traceur" - PARSER="babel" + - PARSER="typescript" matrix: include: - node_js: "0.10" env: SAUCE_LABS=true PARSER="traceur" - node_js: "0.10" env: SAUCE_LABS=true PARSER="babel" -# - node_js: "0.10" -# env: SAUCE_LABS=true PARSER="traceur" OPTIONS="--ie8" -# - node_js: "0.10" -# env: SAUCE_LABS=true PARSER="babel" OPTIONS="--ie8" + - node_js: "0.10" + env: SAUCE_LABS=true PARSER="typescript" + #- node_js: "0.10" + # env: SAUCE_LABS=true PARSER="traceur" OPTIONS="--ie8" before_install: - export CHROME_BIN=chromium-browser - export DISPLAY=:99.0 diff --git a/Gruntfile.js b/Gruntfile.js index 3259e20..0a75687 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -21,47 +21,30 @@ module.exports = function (grunt) { dist: { files: { 'dist/<%= pkg.name %>.src.js': [ - 'node_modules/when/es6-shim/Promise.js', - 'src/polyfill-wrapper-start.js', - 'dist/<%= pkg.name %>.js', - 'src/polyfill-wrapper-end.js' + 'src/url-polyfill.js', + 'src/wrapper-start.js', + 'src/loader.js', + 'src/dynamic-only.js', + 'src/system.js', + 'src/system-resolve.js', + 'src/system-fetch.js', + 'src/wrapper-end.js' ], - 'dist/<%= pkg.name %>-sans-promises.src.js': [ - 'src/polyfill-wrapper-start.js', - 'dist/<%= pkg.name %>.js', - 'src/polyfill-wrapper-end.js' + 'dist/<%= pkg.name %>-dev.src.js': [ + 'src/url-polyfill.js', + 'src/wrapper-start.js', + 'src/loader.js', + 'src/declarative.js', + 'src/transpiler.js', + 'src/system.js', + 'src/system-resolve.js', + 'src/system-fetch.js', + 'src/module-tag.js', + 'src/wrapper-end.js' ] } } }, - esnext: { - dist: { - src: [ - 'src/loader.js', - 'src/transpiler.js', - 'src/system.js' - ], - dest: 'dist/<%= pkg.name %>.js' - } - }, - 'string-replace': { - dist: { - files: { - 'dist/<%= pkg.name %>.js': 'dist/<%= pkg.name %>.js' - }, - options: { - replacements:[{ - pattern: 'var $__Object$getPrototypeOf = Object.getPrototypeOf;\n' + - 'var $__Object$defineProperty = Object.defineProperty;\n' + - 'var $__Object$create = Object.create;', - replacement: '' - }, { - pattern: '$__Object$getPrototypeOf(SystemLoader.prototype).constructor', - replacement: '$__super' - }] - } - } - }, uglify: { options: { banner: '<%= meta.banner %>\n', @@ -77,21 +60,21 @@ module.exports = function (grunt) { src: 'dist/<%= pkg.name %>.src.js', dest: 'dist/<%= pkg.name %>.js' }, - distSansPromises: { - src: 'dist/<%= pkg.name %>-sans-promises.src.js', - dest: 'dist/<%= pkg.name %>-sans-promises.js' + devDist: { + options: { + banner: '<%= meta.banner %>\n' + }, + src: 'dist/<%= pkg.name %>-dev.src.js', + dest: 'dist/<%= pkg.name %>-dev.js' } } }); grunt.loadNpmTasks('grunt-contrib-jshint'); grunt.loadNpmTasks('grunt-contrib-uglify'); - grunt.loadNpmTasks('grunt-esnext'); grunt.loadNpmTasks('grunt-contrib-concat'); - grunt.loadNpmTasks('grunt-string-replace'); grunt.registerTask('lint', ['jshint']); - grunt.registerTask('compile', ['esnext', 'string-replace', 'concat']); - grunt.registerTask('default', [/*'jshint', */'esnext', 'string-replace', - 'concat', 'uglify']); + grunt.registerTask('compile', ['concat']); + grunt.registerTask('default', [/*'jshint', */'concat', 'uglify']); }; diff --git a/LICENSE-MIT b/LICENSE-MIT index 5dbb45c..be26339 100644 --- a/LICENSE-MIT +++ b/LICENSE-MIT @@ -1,4 +1,4 @@ -Copyright (c) 2013-2015 Guy Bedford, Luke Hoban, Addy Osmani +Copyright (c) 2013-2016 Guy Bedford, Luke Hoban, Addy Osmani Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation diff --git a/README.md b/README.md index ae9d2ce..f1adc7b 100644 --- a/README.md +++ b/README.md @@ -1,40 +1,39 @@ # ES6 Module Loader Polyfill [![Build Status][travis-image]][travis-url] -_For upgrading to ES6 Module Loader 0.16, [read the release notes here](https://github.com/ModuleLoader/es6-module-loader/releases/tag/v0.16.0)._ +_For upgrading to ES6 Module Loader 0.17, [read the release notes here](https://github.com/ModuleLoader/es6-module-loader/releases/tag/v0.17.0)._ Dynamically loads ES6 modules in browsers and [NodeJS](#nodejs-use) with support for loading existing and custom module formats through loader hooks. -This project implements dynamic module loading through `System` exactly to the previous ES6-specified loader API at [2014-08-24 ES6 Specification Draft Rev 27, Section 15](http://wiki.ecmascript.org/doku.php?id=harmony:specification_drafts#august_24_2014_draft_rev_27) and is being converted to track the newly redrafted specification at https://github.com/whatwg/loader (work in progress at https://github.com/ModuleLoader/es6-module-loader/pull/317). +This project implements dynamic module loading through `System` exactly to the previous ES6-specified loader API at [2014-08-24 ES6 Specification Draft Rev 27, Section 15](http://wiki.ecmascript.org/doku.php?id=harmony:specification_drafts#august_24_2014_draft_rev_27). The specification for the module loader was removed from the ES6/ES2015 specification in 2014, and a new loader implementing the new draft [WhatWG loader spec](https://github.com/whatwg/loader) is pending alpha release on the [1.0 branch](https://github.com/ModuleLoader/es6-module-loader/tree/1.0) (as of July 2016, this is on hold pending discussions on a [proposed simplified loader](https://github.com/whatwg/loader/issues/147)). * Provides an asynchronous loader (`System.import`) to [dynamically load ES6 modules](#getting-started). -* Supports both [Traceur](https://github.com/google/traceur-compiler) and [Babel](http://babeljs.io/) for compiling ES6 modules and syntax into ES5 in the browser with source map support. -* Fully supports [ES6 circular references and live bindings](https://github.com/ModuleLoader/es6-module-loader/wiki/Circular-References-&-Bindings). -* Includes [`baseURL` and `paths` implementations](https://github.com/ModuleLoader/es6-module-loader/wiki/Configuring-the-Loader). -* Can be used as a [tracing tool](https://github.com/ModuleLoader/es6-module-loader/wiki/Tracing-API) for static analysis of modules. -* Polyfills ES6 Promises in the browser with an optionally bundled ES6 promise implementation. +* Supports [Traceur](https://github.com/google/traceur-compiler), [Babel](http://babeljs.io/) and [TypeScript](https://github.com/Microsoft/TypeScript/) for compiling ES6 modules and syntax into ES5 in the browser with source map support. +* Fully supports [ES6 circular references and live bindings](docs/circular-references-bindings.md). +* Includes [`paths` implementation](docs/loader-config.md). +* Can be used as a [tracing tool](docs/tracing-api.md) for static analysis of modules. * Supports IE8+, with IE9+ support for ES6 development without pre-compilation. -* The complete combined polyfill, including ES6 promises, comes to 9KB minified and gzipped, making it suitable for production use, provided that modules are [built into ES5 making them independent of Traceur](https://github.com/ModuleLoader/es6-module-loader/wiki/Production-Workflows). +* The minified production loader is under 5KB minified and gzipped, making it suitable for production use, provided that modules are [built into ES5 making them independent of Traceur](docs/production-workflows.md). +* Supports declaring modules with `<script type="module">`, the precursor of the proposed [`<module>` tag](https://github.com/dherman/module-tag/). -For an overview of build workflows, [see the production guide](https://github.com/ModuleLoader/es6-module-loader/wiki/Production-Workflows). +For an overview of build workflows, [see the production guide](docs/production-workflows.md). For an example of a universal module loader based on this polyfill for loading AMD, CommonJS and globals, see [SystemJS](https://github.com/systemjs/systemjs). ### Documentation -* [A brief overview of ES6 module syntax](https://github.com/ModuleLoader/es6-module-loader/wiki/Brief-Overview-of-ES6-Module-syntax) -* [Configuring the loader](https://github.com/ModuleLoader/es6-module-loader/wiki/Configuring-the-Loader) -* [Production workflows](https://github.com/ModuleLoader/es6-module-loader/wiki/Production-Workflows) -* [Circular References & Bindings](https://github.com/ModuleLoader/es6-module-loader/wiki/Circular-References-&-Bindings) -* [Extending the loader through loader hooks](https://github.com/ModuleLoader/es6-module-loader/wiki/Extending-the-ES6-Loader) -* [Tracing API](https://github.com/ModuleLoader/es6-module-loader/wiki/Tracing-API) +* [Configuring the loader](docs/loader-config.md) +* [Production workflows](docs/production-workflows.md) +* [Circular References & Bindings](docs/circular-references-bindings.md) +* [Extending the loader through loader hooks](docs/loader-extensions.md) +* [Tracing API](docs/tracing-api.md) ### Getting Started -If using ES6 syntax (optional), include `traceur.js` or `babel.js` in the page first then include `es6-module-loader.js`: +If using ES6 syntax (optional), include `traceur.js`, `babel.js` or `typescript.js` in the page first then include `es6-module-loader-dev.js`: ```html <script src="traceur.js"></script> - <script src="es6-module-loader.js"></script> + <script src="es6-module-loader-dev.js"></script> ``` To use Babel, load Babel's `browser.js` instead and set the transpiler to `babel` with the loader configuration: @@ -45,6 +44,14 @@ To use Babel, load Babel's `browser.js` instead and set the transpiler to `babel </script> ``` +To use TypeScript, set the transpiler to `typescript` in the loader configuration: + +```html +<script> + System.transpiler = 'typescript'; +</script> +``` + Then we can write any ES6 module: mymodule.js: @@ -68,6 +75,10 @@ and load the module dynamically in the browser The dynamic loader returns a `Module` object, which contains getters for the named exports (in this case, `q`). +See the [demo folder](https://github.com/ModuleLoader/es6-module-loader/blob/master/demo/index.html) in this repo for a working example demonstrating module loading in the browser both with `System.import` and with the module-type script tag. + +Although `System.import()` does not support the import of multiple modules defined in an array, because `System.import()` returns a Promise, this can be achieved by creating an array of `System.import`s and using `Promise.all()`. + #### Setting transpilation options If using Traceur, these can be set with: @@ -76,15 +87,23 @@ If using Traceur, these can be set with: System.traceurOptions = {...}; ``` -Or with Babel: +With Babel: ```javascript System.babelOptions = {...}; ``` +With TypeScript: + +```javascript +System.typescriptOptions = {...}; +``` + #### Module Tag -As well as defining `window.System`, this polyfill provides support for the `<script type="module">` tag: +The module tag is specified to provide a new entry point for using module syntax in browsers. This is because normal `<script>` tags must remain backwards-compatible so won't support this new mechanism. + +This polyfill provides simple support for the `<script type="module">` tag via: ```html <script type="module"> @@ -97,15 +116,13 @@ As well as defining `window.System`, this polyfill provides support for the `<sc Because it is only possible to load ES6 modules with this tag, it is not suitable for production use in this way. -See the [demo folder](https://github.com/ModuleLoader/es6-module-loader/blob/master/demo/index.html) in this repo for a working example demonstrating module loading in the browser both with `System.import` and with the module-type script tag. - #### NodeJS Use ``` - npm install es6-module-loader babel traceur + npm install es6-module-loader babel traceur typescript ``` -It is important that Babel or Traceur is installed into the path in order to be found, since these are no longer project dependencies. +It is important that Babel, Traceur or TypeScript is installed into the path in order to be found, since these are no longer project dependencies. For use in NodeJS, the `Loader` and `System` globals are provided as exports: @@ -115,7 +132,9 @@ index.js: /* * Include: * System.transpiler = 'babel'; - * to use Babel instead of Traceur + * to use Babel instead of Traceur or + * System.transpiler = 'typescript'; + * to use TypeScript */ System.import('some-module').then(function(m) { @@ -142,8 +161,8 @@ _Also, please don't edit files in the "dist" subdirectory as they are generated ## Testing - `npm run test:node` will use node to to run the tests -- `npm run test:browser` will run `npm run test:browser-babel` and `npm run test:browser-traceur` -- `npm run test:browser-[transpiler]` use karma to run the tests with Traceur or Babel. +- `npm run test:browser` will run `npm run test:browser-babel`, `npm run test:browser-traceur` and `npm run test:browser-typescript` +- `npm run test:browser-[transpiler]` use karma to run the tests with Traceur, Babel or TypeScript. - `npm run test:browser:perf` will use karma to run benchmarks `npm run test:browser-[transpiler]` supports options after a double dash (`--`) : @@ -170,3 +189,5 @@ Licensed under the MIT license. [travis-url]: https://travis-ci.org/ModuleLoader/es6-module-loader [travis-image]: https://travis-ci.org/ModuleLoader/es6-module-loader.svg?branch=master +[saucelabs-url]: https://saucelabs.com/u/guybedford +[saucelabs-image]: https://saucelabs.com/buildstatus/guybedford diff --git a/demo/index.html b/demo/index.html index cdedc47..611ad20 100644 --- a/demo/index.html +++ b/demo/index.html @@ -17,9 +17,9 @@ <h1>Module Loader Polyfill</h1> <p>Check the console in your browser developer tools! This code is currently loaded in the page:</p> <pre> <script src="../node_modules/traceur/bin/traceur.js"></script> - <script src="../dist/es6-module-loader.js"></script> + <script src="../dist/es6-module-loader-dev.js"></script> <script type="module"> - import { hello } from 'test1'; + import { hello } from 'test1.js'; console.log(hello); // -> world // es6 syntax @@ -33,7 +33,7 @@ <h1>Module Loader Polyfill</h1> <script> function buttonClick() { // dynamic loading API - System.import('test2').then(function(module) { + System.import('test2.js').then(function(module) { new module.Foo(); }); } @@ -46,9 +46,9 @@ <h1>Module Loader Polyfill</h1> </footer> <script src="../node_modules/traceur/bin/traceur.js"></script> - <script src="../dist/es6-module-loader.js"></script> + <script src="../dist/es6-module-loader-dev.js"></script> <script type="module"> - import { hello } from 'test1'; + import { hello } from 'test1.js'; console.log(hello); // -> world // es6 syntax @@ -59,7 +59,7 @@ <h1>Module Loader Polyfill</h1> <script> function buttonClick() { // dynamic loading API - System.import('test2').then(function(module) { + System.import('test2.js').then(function(module) { new module.Foo(); }); } diff --git a/dist/es6-module-loader-dev.js b/dist/es6-module-loader-dev.js new file mode 100644 index 0000000..a73cd01 --- /dev/null +++ b/dist/es6-module-loader-dev.js @@ -0,0 +1,8 @@ +/* + * es6-module-loader v0.17.11 + * https://github.com/ModuleLoader/es6-module-loader + * Copyright (c) 2016 Guy Bedford, Luke Hoban, Addy Osmani; Licensed MIT + */ + +!function(a){function b(a,c){if("string"!=typeof a)throw new TypeError("URL must be a string");var d=String(a).replace(/^\s+|\s+$/g,"").match(/^([^:\/?#]+:)?(?:\/\/(?:([^:@\/?#]*)(?::([^:@\/?#]*))?@)?(([^:\/?#]*)(?::(\d*))?))?([^?#]*)(\?[^#]*)?(#[\s\S]*)?/);if(!d)throw new RangeError("Invalid URL format");var e=d[1]||"",f=d[2]||"",g=d[3]||"",h=d[4]||"",i=d[5]||"",j=d[6]||"",k=d[7]||"",l=d[8]||"",m=d[9]||"";if(void 0!==c){var n=c instanceof b?c:new b(c),o=!e&&!h&&!f;!o||k||l||(l=n.search),o&&"/"!==k[0]&&(k=k?(!n.host&&!n.username||n.pathname?"":"/")+n.pathname.slice(0,n.pathname.lastIndexOf("/")+1)+k:n.pathname);var p=[];k.replace(/^(\.\.?(\/|$))+/,"").replace(/\/(\.(\/|$))+/g,"/").replace(/\/\.\.$/,"/../").replace(/\/?[^\/]*/g,function(a){"/.."===a?p.pop():p.push(a)}),k=p.join("").replace(/^\//,"/"===k[0]?"/":""),o&&(j=n.port,i=n.hostname,h=n.host,g=n.password,f=n.username),e||(e=n.protocol)}"file:"==e&&(k=k.replace(/\\/g,"/")),this.origin=h?e+(""!==e||""!==h?"//":"")+h:"",this.href=e+(e&&h||"file:"==e?"//":"")+(""!==f?f+(""!==g?":"+g:"")+"@":"")+h+k+l+m,this.protocol=e,this.username=f,this.password=g,this.host=h,this.hostname=i,this.port=j,this.pathname=k,this.search=l,this.hash=m}a.URLPolyfill=b}("undefined"!=typeof self?self:global),function(a){function b(a,b){return a instanceof Error?(a.message=b+"\n "+a.message,Error.call(a,a.message)):a=b+"\n "+a,a}function c(a,c,d){try{new Function(a).call(d)}catch(e){throw b(e,"Evaluating "+c)}}function d(){}function e(b){this._loader={loaderObj:this,loads:[],modules:{},importPromises:{},moduleRecords:{}},k(this,"global",{get:function(){return a}})}function f(){e.call(this),this.paths={}}function g(a,b){var c,d="",e=0;for(var f in a){var g=f.split("*");if(g.length>2)throw new TypeError("Only one wildcard in a path is permitted");if(1==g.length){if(b==f)return a[f];if(b.substr(0,f.length-1)==f.substr(0,f.length-1)&&(b.length<f.length||b[f.length-1]==f[f.length-1])&&"/"==a[f][a[f].length-1])return a[f].substr(0,a[f].length-1)+(b.length>f.length?"/"+b.substr(f.length):"")}else{var h=g[0].length;h>=e&&b.substr(0,g[0].length)==g[0]&&b.substr(b.length-g[1].length)==g[1]&&(e=h,d=f,c=b.substr(g[0].length,b.length-g[1].length-g[0].length))}}var i=a[d];return"string"==typeof c&&(i=i.replace("*",c)),i}function h(){}var i=("undefined"==typeof window&&"undefined"!=typeof self&&"undefined"!=typeof importScripts,"undefined"!=typeof window&&"undefined"!=typeof document),j="undefined"!=typeof process&&"undefined"!=typeof process.platform&&!!process.platform.match(/^win/);a.console||(a.console={assert:function(){}});var k,l=Array.prototype.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1};!function(){try{Object.defineProperty({},"a",{})&&(k=Object.defineProperty)}catch(a){k=function(a,b,c){try{a[b]=c.value||c.get.call(a)}catch(d){}}}}();var m;if("undefined"!=typeof document&&document.getElementsByTagName){if(m=document.baseURI,!m){var n=document.getElementsByTagName("base");m=n[0]&&n[0].href||window.location.href}m=m.split("#")[0].split("?")[0],m=m.substr(0,m.lastIndexOf("/")+1)}else if("undefined"!=typeof process&&process.cwd)m="file://"+(j?"/":"")+process.cwd()+"/",j&&(m=m.replace(/\\/g,"/"));else{if("undefined"==typeof location)throw new TypeError("No environment baseURI");m=a.location.href}var o=a.URLPolyfill||a.URL;k(d.prototype,"toString",{value:function(){return"Module"}}),function(){function f(a){return{status:"loading",name:a,linkSets:[],dependencies:[],metadata:{}}}function g(a,b,c){return new Promise(n({step:c.address?"fetch":"locate",loader:a,moduleName:b,moduleMetadata:c&&c.metadata||{},moduleSource:c.source,moduleAddress:c.address}))}function h(a,b,c,d){return new Promise(function(e,f){e(a.loaderObj.normalize(b,c,d))}).then(function(b){var c;if(a.modules[b])return c=f(b),c.status="linked",c.module=a.modules[b],c;for(var d=0,e=a.loads.length;e>d;d++)if(c=a.loads[d],c.name==b)return c;return c=f(b),a.loads.push(c),i(a,c),c})}function i(a,b){j(a,b,Promise.resolve().then(function(){return a.loaderObj.locate({name:b.name,metadata:b.metadata})}))}function j(a,b,c){m(a,b,c.then(function(c){return"loading"==b.status?(b.address=c,a.loaderObj.fetch({name:b.name,metadata:b.metadata,address:c})):void 0}))}function m(b,d,e){e.then(function(e){return"loading"==d.status?Promise.resolve(b.loaderObj.translate({name:d.name,metadata:d.metadata,address:d.address,source:e})).then(function(a){return d.source=a,b.loaderObj.instantiate({name:d.name,metadata:d.metadata,address:d.address,source:a})}).then(function(e){if(void 0===e)return d.address=d.address||"<Anonymous Module "+ ++F+">",d.isDeclarative=!0,q.call(b.loaderObj,d).then(function(b){var e=a.System,f=e.register;e.register=function(a,b,c){"string"!=typeof a&&(c=b,b=a),d.declare=c,d.depsList=b},c(b,d.address,{}),e.register=f});if("object"!=typeof e)throw TypeError("Invalid instantiate return value");d.depsList=e.deps||[],d.execute=e.execute,d.isDeclarative=!1}).then(function(){d.dependencies=[];for(var a=d.depsList,c=[],e=0,f=a.length;f>e;e++)(function(a,e){c.push(h(b,a,d.name,d.address).then(function(b){if(d.dependencies[e]={key:a,value:b.name},"linked"!=b.status)for(var c=d.linkSets.concat([]),f=0,g=c.length;g>f;f++)p(c[f],b)}))})(a[e],e);return Promise.all(c)}).then(function(){d.status="loaded";for(var a=d.linkSets.concat([]),b=0,c=a.length;c>b;b++)s(a[b],d)}):void 0})["catch"](function(a){d.status="failed",d.exception=a;for(var b=d.linkSets.concat([]),c=0,e=b.length;e>c;c++)t(b[c],d,a)})}function n(a){return function(b,c){var d=a.loader,e=a.moduleName,g=a.step;if(d.modules[e])throw new TypeError('"'+e+'" already exists in the module table');for(var h,k=0,l=d.loads.length;l>k;k++)if(d.loads[k].name==e&&(h=d.loads[k],"translate"!=g||h.source||(h.address=a.moduleAddress,m(d,h,Promise.resolve(a.moduleSource))),h.linkSets.length&&h.linkSets[0].loads[0].name==h.name))return h.linkSets[0].done.then(function(){b(h)});var n=h||f(e);n.metadata=a.moduleMetadata;var p=o(d,n);d.loads.push(n),b(p.done),"locate"==g?i(d,n):"fetch"==g?j(d,n,Promise.resolve(a.moduleAddress)):(n.address=a.moduleAddress,m(d,n,Promise.resolve(a.moduleSource)))}}function o(a,b){var c={loader:a,loads:[],startingLoad:b,loadingCount:0};return c.done=new Promise(function(a,b){c.resolve=a,c.reject=b}),p(c,b),c}function p(a,b){if("failed"!=b.status){for(var c=0,d=a.loads.length;d>c;c++)if(a.loads[c]==b)return;a.loads.push(b),b.linkSets.push(a),"loaded"!=b.status&&a.loadingCount++;for(var e=a.loader,c=0,d=b.dependencies.length;d>c;c++)if(b.dependencies[c]){var f=b.dependencies[c].value;if(!e.modules[f])for(var g=0,h=e.loads.length;h>g;g++)if(e.loads[g].name==f){p(a,e.loads[g]);break}}}}function r(a){var b=!1;try{y(a,function(c,d){t(a,c,d),b=!0})}catch(c){t(a,null,c),b=!0}return b}function s(a,b){if(a.loadingCount--,!(a.loadingCount>0)){var c=a.startingLoad;if(a.loader.loaderObj.execute===!1){for(var d=[].concat(a.loads),e=0,f=d.length;f>e;e++){var b=d[e];b.module=b.isDeclarative?{name:b.name,module:G({}),evaluated:!0}:{module:G({})},b.status="linked",u(a.loader,b)}return a.resolve(c)}var g=r(a);g||a.resolve(c)}}function t(a,c,d){var e=a.loader;a:if(c)if(a.loads[0].name==c.name)d=b(d,"Error loading "+c.name);else{for(var f=0;f<a.loads.length;f++)for(var g=a.loads[f],h=0;h<g.dependencies.length;h++){var i=g.dependencies[h];if(i.value==c.name){d=b(d,"Error loading "+c.name+' as "'+i.key+'" from '+g.name);break a}}d=b(d,"Error loading "+c.name+" from "+a.loads[0].name)}else d=b(d,"Error linking "+a.loads[0].name);for(var j=a.loads.concat([]),f=0,k=j.length;k>f;f++){var c=j[f];e.loaderObj.failed=e.loaderObj.failed||[],-1==l.call(e.loaderObj.failed,c)&&e.loaderObj.failed.push(c);var m=l.call(c.linkSets,a);if(c.linkSets.splice(m,1),0==c.linkSets.length){var n=l.call(a.loader.loads,c);-1!=n&&a.loader.loads.splice(n,1)}}a.reject(d)}function u(a,b){if(a.loaderObj.trace){a.loaderObj.loads||(a.loaderObj.loads={});var c={};b.dependencies.forEach(function(a){c[a.key]=a.value}),a.loaderObj.loads[b.name]={name:b.name,deps:b.dependencies.map(function(a){return a.key}),depMap:c,address:b.address,metadata:b.metadata,source:b.source,kind:b.isDeclarative?"declarative":"dynamic"}}b.name&&(a.modules[b.name]=b.module);var d=l.call(a.loads,b);-1!=d&&a.loads.splice(d,1);for(var e=0,f=b.linkSets.length;f>e;e++)d=l.call(b.linkSets[e].loads,b),-1!=d&&b.linkSets[e].loads.splice(d,1);b.linkSets.splice(0,b.linkSets.length)}function v(a,b,c){try{var e=b.execute()}catch(f){return void c(b,f)}return e&&e instanceof d?e:void c(b,new TypeError("Execution must define a Module instance"))}function w(a,b,c){var d=a._loader.importPromises;return d[b]=c.then(function(a){return d[b]=void 0,a},function(a){throw d[b]=void 0,a})}function x(a,b,c){if(c[a.groupIndex]=c[a.groupIndex]||[],-1==l.call(c[a.groupIndex],a)){c[a.groupIndex].push(a);for(var d=0,e=b.length;e>d;d++)for(var f=b[d],g=0;g<a.dependencies.length;g++)if(f.name==a.dependencies[g].value){var h=a.groupIndex+(f.isDeclarative!=a.isDeclarative);if(void 0===f.groupIndex||f.groupIndex<h){if(void 0!==f.groupIndex&&(c[f.groupIndex].splice(l.call(c[f.groupIndex],f),1),0==c[f.groupIndex].length))throw new TypeError("Mixed dependency cycle detected");f.groupIndex=h}x(f,b,c)}}}function y(a,b){var c=a.loader;if(a.loads.length){var d=[],e=a.loads[0];e.groupIndex=0,x(e,a.loads,d);for(var f=e.isDeclarative==d.length%2,g=d.length-1;g>=0;g--){for(var h=d[g],i=0;i<h.length;i++){var j=h[i];if(f)A(j,a.loads,c);else{var k=v(a,j,b);if(!k)return;j.module={name:j.name,module:k},j.status="linked"}u(c,j)}f=!f}}}function z(a,b){var c=b.moduleRecords;return c[a]||(c[a]={name:a,dependencies:[],module:new d,importers:[]})}function A(b,c,d){if(!b.module){var e=b.module=z(b.name,d),f=b.module.module,g=b.declare.call(a,function(a,b){if(e.locked=!0,"object"==typeof a)for(var c in a)f[c]=a[c];else f[a]=b;for(var d=0,g=e.importers.length;g>d;d++){var h=e.importers[d];if(!h.locked)for(var i=0;i<h.dependencies.length;++i)h.dependencies[i]===e&&h.setters[i](f)}return e.locked=!1,b},{id:b.name});e.setters=g.setters,e.execute=g.execute;for(var h=0,i=b.dependencies.length;i>h;h++){var j=b.dependencies[h].value,k=d.modules[j];if(!k)for(var l=0;l<c.length;l++)c[l].name==j&&(c[l].module?k=z(j,d):(A(c[l],c,d),k=c[l].module));k.importers?(e.dependencies.push(k),k.importers.push(e)):e.dependencies.push(null),e.setters[h]&&e.setters[h](k.module)}b.status="linked"}}function B(b){try{b.execute.call(a)}catch(c){return c}}function C(a,b){return D(b.module,[],a),b.module.module}function D(a,b,c){var d=E(a,b,c);if(d)throw d}function E(a,c,d){if(!a.evaluated&&a.dependencies){c.push(a);for(var e,f=a.dependencies,g=0,h=f.length;h>g;g++){var i=f[g];if(i&&-1==l.call(c,i)&&(e=E(i,c,d)))return e=b(e,"Error evaluating "+i.name)}if(a.failed)return new Error("Module failed execution.");if(!a.evaluated)return a.evaluated=!0,e=B(a),e?a.failed=!0:Object.preventExtensions&&Object.preventExtensions(a.module),a.execute=void 0,e}}var F=0;e.prototype={constructor:e,define:function(a,b,c){if(this._loader.importPromises[a])throw new TypeError("Module is already loading.");return w(this,a,new Promise(n({step:"translate",loader:this._loader,moduleName:a,moduleMetadata:c&&c.metadata||{},moduleSource:b,moduleAddress:c&&c.address})))},"delete":function(a){var b=this._loader;return delete b.importPromises[a],delete b.moduleRecords[a],b.modules[a]?delete b.modules[a]:!1},get:function(a){return this._loader.modules[a]?(D(this._loader.modules[a],[],this),this._loader.modules[a].module):void 0},has:function(a){return!!this._loader.modules[a]},"import":function(a,b,c){"object"==typeof b&&(b=b.name);var d=this;return Promise.resolve(d.normalize(a,b)).then(function(a){var b=d._loader;return b.modules[a]?(D(b.modules[a],[],b._loader),b.modules[a].module):b.importPromises[a]||w(d,a,g(b,a,{}).then(function(c){return delete b.importPromises[a],C(b,c)}))})},load:function(a){var b=this._loader;return b.modules[a]?Promise.resolve():b.importPromises[a]||w(this,a,new Promise(n({step:"locate",loader:b,moduleName:a,moduleMetadata:{},moduleSource:void 0,moduleAddress:void 0})).then(function(){delete b.importPromises[a]}))},module:function(a,b){var c=f();c.address=b&&b.address;var d=o(this._loader,c),e=Promise.resolve(a),g=this._loader,h=d.done.then(function(){return C(g,c)});return m(g,c,e),h},newModule:function(a){if("object"!=typeof a)throw new TypeError("Expected object");var b=new d,c=[];if(Object.getOwnPropertyNames&&null!=a)c=Object.getOwnPropertyNames(a);else for(var e in a)c.push(e);for(var f=0;f<c.length;f++)(function(c){k(b,c,{configurable:!1,enumerable:!0,get:function(){return a[c]},set:function(){throw new Error("Module exports cannot be changed externally.")}})})(c[f]);return Object.freeze&&Object.freeze(b),b},set:function(a,b){if(!(b instanceof d))throw new TypeError("Loader.set("+a+", module) must be a module");this._loader.modules[a]={module:b}},normalize:function(a,b,c){return a},locate:function(a){return a.name},fetch:function(a){},translate:function(a){return a.source},instantiate:function(a){}};var G=e.prototype.newModule}();var p,q=function(){function b(b){var d=this;return Promise.resolve(a["typescript"==d.transpiler?"ts":d.transpiler]||(d.pluginLoader||d)["import"](d.transpiler)).then(function(a){a.__useDefault&&(a=a["default"]);var e;return e=a.Compiler?c:a.createLanguageService?g:f,"(function(__moduleName){"+e.call(d,b,a)+'\n})("'+b.name+'");\n//# sourceURL='+b.address+"!transpiled"})}function c(a,b){var c=this.traceurOptions||{};c.modules="instantiate",c.script=!1,void 0===c.sourceMaps&&(c.sourceMaps="inline"),c.filename=a.address,c.inputSourceMap=a.metadata.sourceMap,c.moduleName=!1;var e=new b.Compiler(c);return d(a.source,e,c.filename)}function d(a,b,c){try{return b.compile(a,c)}catch(d){if(d.length)throw d[0];throw d}}function f(a,b){var c=this.babelOptions||{};return c.modules="system",void 0===c.sourceMap&&(c.sourceMap="inline"),c.inputSourceMap=a.metadata.sourceMap,c.filename=a.address,c.code=!0,c.ast=!1,b.transform(a.source,c).code}function g(a,b){var c=this.typescriptOptions||{};return c.target=c.target||b.ScriptTarget.ES5,void 0===c.sourceMap&&(c.sourceMap=!0),c.sourceMap&&c.inlineSourceMap!==!1&&(c.inlineSourceMap=!0),c.module=b.ModuleKind.System,b.transpile(a.source,c,a.address)}return e.prototype.transpiler="traceur",b}();h.prototype=e.prototype,f.prototype=new h;var r=/^([^\/]+:\/\/|\/)/;f.prototype.normalize=function(a,b,c){return a=a.match(r)||"."==a[0]?new o(a,b||m).href:new o(g(this.paths,a)||a,m).href},f.prototype.locate=function(a){return a.name},f.prototype.instantiate=function(b){var d=this;return Promise.resolve(d.normalize(d.transpiler)).then(function(e){return b.address===e?{deps:[],execute:function(){var e=a.System,f=a.Reflect.Loader;return c("(function(require,exports,module){"+b.source+"})();",b.address,a),a.System=e,a.Reflect.Loader=f,d.newModule({"default":a[d.transpiler],__useDefault:!0})}}:void 0})};var s;if("undefined"!=typeof XMLHttpRequest)s=function(a,b,c,d){function e(){c(g.responseText)}function f(){d(new Error("XHR error"+(g.status?" ("+g.status+(g.statusText?" "+g.statusText:"")+")":"")+" loading "+a))}var g=new XMLHttpRequest,h=!0,i=!1;if(!("withCredentials"in g)){var j=/^(\w+:)?\/\/([^\/]+)/.exec(a);j&&(h=j[2]===window.location.host,j[1]&&(h&=j[1]===window.location.protocol))}h||"undefined"==typeof XDomainRequest||(g=new XDomainRequest,g.onload=e,g.onerror=f,g.ontimeout=f,g.onprogress=function(){},g.timeout=0,i=!0),g.onreadystatechange=function(){4===g.readyState&&(0==g.status?g.responseText?e():(g.addEventListener("error",f),g.addEventListener("load",e)):200===g.status?e():f())},g.open("GET",a,!0),g.setRequestHeader&&(g.setRequestHeader("Accept","application/x-es-module, */*"),b&&("string"==typeof b&&g.setRequestHeader("Authorization",b),g.withCredentials=!0)),i?setTimeout(function(){g.send()},0):g.send(null)};else if("undefined"!=typeof require&&"undefined"!=typeof process){var t;s=function(a,b,c,d){if("file:///"!=a.substr(0,8))throw new Error('Unable to fetch "'+a+'". Only file URLs of the form file:/// allowed running in Node.');return t=t||require("fs"),a=j?a.replace(/\//g,"\\").substr(8):a.substr(7),t.readFile(a,function(a,b){if(a)return d(a);var e=b+"";"\ufeff"===e[0]&&(e=e.substr(1)),c(e)})}}else{if("undefined"==typeof self||"undefined"==typeof self.fetch)throw new TypeError("No environment fetch API available.");s=function(a,b,c,d){var e={headers:{Accept:"application/x-es-module, */*"}};b&&("string"==typeof b&&(e.headers.Authorization=b),e.credentials="include"),fetch(a,e).then(function(a){if(a.ok)return a.text();throw new Error("Fetch error: "+a.status+" "+a.statusText)}).then(c,d)}}f.prototype.fetch=function(a){return new Promise(function(b,c){s(a.address,void 0,b,c)})},function(){function a(){document.removeEventListener("DOMContentLoaded",a,!1),window.removeEventListener("load",a,!1),b()}function b(){for(var a=document.getElementsByTagName("script"),b=0;b<a.length;b++){var c=a[b];if("module"==c.type){var d=c.innerHTML.substr(1);p.module(d)["catch"](function(a){setTimeout(function(){throw a})})}}}if(i&&"undefined"!=typeof document.getElementsByTagName){var c=document.getElementsByTagName("script");c=c[c.length-1],"complete"===document.readyState?setTimeout(b):document.addEventListener&&(document.addEventListener("DOMContentLoaded",a,!1),window.addEventListener("load",a,!1))}}(),"object"==typeof exports&&(module.exports=e),a.Reflect=a.Reflect||{},a.Reflect.Loader=a.Reflect.Loader||e,a.Reflect.global=a.Reflect.global||a,a.LoaderPolyfill=e,p||(p=new f,p.constructor=f),"object"==typeof exports&&(module.exports=p),a.System=p}("undefined"!=typeof self?self:global); +//# sourceMappingURL=es6-module-loader-dev.js.map \ No newline at end of file diff --git a/dist/es6-module-loader-dev.js.map b/dist/es6-module-loader-dev.js.map new file mode 100644 index 0000000..e85c3d2 --- /dev/null +++ b/dist/es6-module-loader-dev.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["es6-module-loader-dev.src.js"],"names":["global","URLPolyfill","url","baseURL","TypeError","m","String","replace","match","RangeError","protocol","username","password","host","hostname","port","pathname","search","hash","undefined","base","flag","slice","lastIndexOf","output","p","pop","push","join","this","origin","href","self","__global","addToError","err","msg","Error","message","call","__eval","source","debugName","context","Function","e","Module","Loader","options","_loader","loaderObj","loads","modules","importPromises","moduleRecords","defineProperty","get","SystemLoader","paths","applyPaths","name","wildcard","pathMatch","maxWildcardPrefixLen","pathParts","split","length","substr","wildcardPrefixLen","outPath","LoaderProto","isBrowser","window","importScripts","document","isWindows","process","platform","console","assert","indexOf","Array","prototype","item","i","thisLen","Object","obj","prop","opt","value","baseURI","getElementsByTagName","bases","location","cwd","URL","createLoad","status","linkSets","dependencies","metadata","loadModule","loader","Promise","asyncStartLoadPartwayThrough","step","address","moduleName","moduleMetadata","moduleSource","moduleAddress","requestLoad","request","refererName","refererAddress","resolve","reject","normalize","then","load","module","l","proceedToLocate","proceedToFetch","locate","proceedToTranslate","fetch","translate","instantiate","instantiateResult","anonCnt","isDeclarative","transpile","transpiled","curSystem","System","curRegister","register","deps","declare","depsList","execute","loadPromises","index","depLoad","key","concat","addLoadToLinkSet","all","updateLinkSetOnLoad","exc","exception","linkSetFailed","stepState","existingLoad","done","linkSet","createLinkSet","startingLoad","loadingCount","j","d","doLink","error","link","_newModule","evaluated","finishLoad","abrupt","checkError","pLoad","dep","failed","linkIndex","splice","globalLoadsIndex","trace","depMap","forEach","map","kind","loadIndex","doDynamicExecute","linkError","createImportPromise","promise","buildLinkageGroups","groups","groupIndex","loadDep","loadDepGroupIndex","curGroupDeclarative","group","linkDeclarativeModule","getOrCreateModuleRecord","importers","moduleObj","registryEntry","locked","importerModule","setters","id","depName","depModule","doExecute","evaluateLoadedModule","doEnsureEvaluated","seen","ensureEvaluated","preventExtensions","constructor","define","delete","has","import","parentName","parentAddress","sourcePromise","newModule","pNames","getOwnPropertyNames","configurable","enumerable","set","freeze","referrerName","referrerAddress","transpiler","pluginLoader","__useDefault","transpileFunction","Compiler","traceurTranspile","createLanguageService","typescriptTranspile","babelTranspile","traceur","traceurOptions","script","sourceMaps","filename","inputSourceMap","sourceMap","compiler","doTraceurCompile","compile","babel","babelOptions","code","ast","transform","ts","typescriptOptions","target","ScriptTarget","ES5","inlineSourceMap","ModuleKind","absURLRegEx","transpilerNormalized","curLoader","Reflect","default","fetchTextFromURL","XMLHttpRequest","authorization","fulfill","xhr","responseText","statusText","sameDomain","doTimeout","domainCheck","exec","XDomainRequest","onload","onerror","ontimeout","onprogress","timeout","onreadystatechange","readyState","addEventListener","open","setRequestHeader","withCredentials","setTimeout","send","require","fs","readFile","data","dataString","opts","headers","Accept","credentials","r","ok","text","completed","removeEventListener","ready","scripts","type","innerHTML","curScript","exports","LoaderPolyfill"],"mappings":"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","file":"es6-module-loader-dev.js"} \ No newline at end of file diff --git a/dist/es6-module-loader-sans-promises.src.js b/dist/es6-module-loader-dev.src.js similarity index 68% rename from dist/es6-module-loader-sans-promises.src.js rename to dist/es6-module-loader-dev.src.js index ba7a5f5..214b5dd 100644 --- a/dist/es6-module-loader-sans-promises.src.js +++ b/dist/es6-module-loader-dev.src.js @@ -1,38 +1,150 @@ +// from https://gist.github.com/Yaffle/1088850 +(function(global) { +function URLPolyfill(url, baseURL) { + if (typeof url != 'string') + throw new TypeError('URL must be a string'); + var m = String(url).replace(/^\s+|\s+$/g, "").match(/^([^:\/?#]+:)?(?:\/\/(?:([^:@\/?#]*)(?::([^:@\/?#]*))?@)?(([^:\/?#]*)(?::(\d*))?))?([^?#]*)(\?[^#]*)?(#[\s\S]*)?/); + if (!m) + throw new RangeError('Invalid URL format'); + var protocol = m[1] || ""; + var username = m[2] || ""; + var password = m[3] || ""; + var host = m[4] || ""; + var hostname = m[5] || ""; + var port = m[6] || ""; + var pathname = m[7] || ""; + var search = m[8] || ""; + var hash = m[9] || ""; + if (baseURL !== undefined) { + var base = baseURL instanceof URLPolyfill ? baseURL : new URLPolyfill(baseURL); + var flag = !protocol && !host && !username; + if (flag && !pathname && !search) + search = base.search; + if (flag && pathname[0] !== "/") + pathname = (pathname ? (((base.host || base.username) && !base.pathname ? "/" : "") + base.pathname.slice(0, base.pathname.lastIndexOf("/") + 1) + pathname) : base.pathname); + // dot segments removal + var output = []; + pathname.replace(/^(\.\.?(\/|$))+/, "") + .replace(/\/(\.(\/|$))+/g, "/") + .replace(/\/\.\.$/, "/../") + .replace(/\/?[^\/]*/g, function (p) { + if (p === "/..") + output.pop(); + else + output.push(p); + }); + pathname = output.join("").replace(/^\//, pathname[0] === "/" ? "/" : ""); + if (flag) { + port = base.port; + hostname = base.hostname; + host = base.host; + password = base.password; + username = base.username; + } + if (!protocol) + protocol = base.protocol; + } + + // convert windows file URLs to use / + if (protocol == 'file:') + pathname = pathname.replace(/\\/g, '/'); + + this.origin = host ? protocol + (protocol !== "" || host !== "" ? "//" : "") + host : ""; + this.href = protocol + (protocol && host || protocol == "file:" ? "//" : "") + (username !== "" ? username + (password !== "" ? ":" + password : "") + "@" : "") + host + pathname + search + hash; + this.protocol = protocol; + this.username = username; + this.password = password; + this.host = host; + this.hostname = hostname; + this.port = port; + this.pathname = pathname; + this.search = search; + this.hash = hash; +} +global.URLPolyfill = URLPolyfill; +})(typeof self != 'undefined' ? self : global); (function(__global) { - -$__Object$getPrototypeOf = Object.getPrototypeOf || function(obj) { - return obj.__proto__; -}; -var $__Object$defineProperty; -(function () { - try { - if (!!Object.defineProperty({}, 'a', {})) { - $__Object$defineProperty = Object.defineProperty; + var isWorker = typeof window == 'undefined' && typeof self != 'undefined' && typeof importScripts != 'undefined'; + var isBrowser = typeof window != 'undefined' && typeof document != 'undefined'; + var isWindows = typeof process != 'undefined' && typeof process.platform != 'undefined' && !!process.platform.match(/^win/); + + if (!__global.console) + __global.console = { assert: function() {} }; + + // IE8 support + var indexOf = Array.prototype.indexOf || function(item) { + for (var i = 0, thisLen = this.length; i < thisLen; i++) { + if (this[i] === item) { + return i; + } + } + return -1; + }; + + var defineProperty; + (function () { + try { + if (!!Object.defineProperty({}, 'a', {})) + defineProperty = Object.defineProperty; } - } catch (e) { - $__Object$defineProperty = function (obj, prop, opt) { - try { - obj[prop] = opt.value || opt.get.call(obj); + catch (e) { + defineProperty = function(obj, prop, opt) { + try { + obj[prop] = opt.value || opt.get.call(obj); + } + catch(e) {} } - catch(e) {} + } + })(); + + function addToError(err, msg) { + if (err instanceof Error) { + err.message = msg + '\n\t' + err.message; + Error.call(err, err.message); + } + else { + err = msg + '\n\t' + err; + } + return err; + } + + function __eval(source, debugName, context) { + try { + new Function(source).call(context); + } + catch(e) { + throw addToError(e, 'Evaluating ' + debugName); } } -}()); -$__Object$create = Object.create || function(o, props) { - function F() {} - F.prototype = o; + var baseURI; + // environent baseURI detection + if (typeof document != 'undefined' && document.getElementsByTagName) { + baseURI = document.baseURI; - if (typeof(props) === "object") { - for (prop in props) { - if (props.hasOwnProperty((prop))) { - F[prop] = props[prop]; - } + if (!baseURI) { + var bases = document.getElementsByTagName('base'); + baseURI = bases[0] && bases[0].href || window.location.href; } + + // sanitize out the hash and querystring + baseURI = baseURI.split('#')[0].split('?')[0]; + baseURI = baseURI.substr(0, baseURI.lastIndexOf('/') + 1); } - return new F(); -}; + else if (typeof process != 'undefined' && process.cwd) { + baseURI = 'file://' + (isWindows ? '/' : '') + process.cwd() + '/'; + if (isWindows) + baseURI = baseURI.replace(/\\/g, '/'); + } + else if (typeof location != 'undefined') { + baseURI = __global.location.href; + } + else { + throw new TypeError('No environment baseURI'); + } + + var URL = __global.URLPolyfill || __global.URL; /* ********************************************************************************************* @@ -54,6 +166,34 @@ $__Object$create = Object.create || function(o, props) { ********************************************************************************************* */ +function Module() {} +// http://www.ecma-international.org/ecma-262/6.0/#sec-@@tostringtag +defineProperty(Module.prototype, 'toString', { + value: function() { + return 'Module'; + } +}); +function Loader(options) { + this._loader = { + loaderObj: this, + loads: [], + modules: {}, + importPromises: {}, + moduleRecords: {} + }; + + // 26.3.3.6 + defineProperty(this, 'global', { + get: function() { + return __global; + } + }); + + // 26.3.3.13 realm not implemented +} + +(function() { + // Some Helpers // logs a linkset snapshot for debugging @@ -137,23 +277,6 @@ function logloads(loads) { } } */ - -(function() { - var Promise = __global.Promise || require('when/es6-shim/Promise'); - if (__global.console) - console.assert = console.assert || function() {}; - - // IE8 support - var indexOf = Array.prototype.indexOf || function(item) { - for (var i = 0, thisLen = this.length; i < thisLen; i++) { - if (this[i] === item) { - return i; - } - } - return -1; - }; - var defineProperty = $__Object$defineProperty; - // 15.2.3 - Runtime Semantics: Loader State // 15.2.3.11 @@ -282,7 +405,7 @@ function logloads(loads) { // instead of load.kind, use load.isDeclarative load.isDeclarative = true; - return loader.loaderObj.transpile(load) + return transpile.call(loader.loaderObj, load) .then(function(transpiled) { // Hijack System.register to set declare function var curSystem = __global.System; @@ -296,8 +419,9 @@ function logloads(loads) { // store the deps as load.deps load.declare = declare; load.depsList = deps; - } - __eval(transpiled, __global, load); + } + // empty {} context is closest to undefined 'this' we can get + __eval(transpiled, load.address, {}); curSystem.register = curRegister; }); } @@ -390,18 +514,21 @@ function logloads(loads) { if (loader.loads[i].name == name) { existingLoad = loader.loads[i]; - if(step == 'translate' && !existingLoad.source) { + if (step == 'translate' && !existingLoad.source) { existingLoad.address = stepState.moduleAddress; proceedToTranslate(loader, existingLoad, Promise.resolve(stepState.moduleSource)); } - return existingLoad.linkSets[0].done.then(function() { - resolve(existingLoad); - }); + // a primary load -> use that existing linkset if it is for the direct load here + // otherwise create a new linkset unit + if (existingLoad.linkSets.length && existingLoad.linkSets[0].loads[0].name == existingLoad.name) + return existingLoad.linkSets[0].done.then(function() { + resolve(existingLoad); + }); } } - var load = createLoad(name); + var load = existingLoad || createLoad(name); load.metadata = stepState.moduleMetadata; @@ -447,6 +574,9 @@ function logloads(loads) { } // 15.2.5.2.2 function addLoadToLinkSet(linkSet, load) { + if (load.status == 'failed') + return; + console.assert(load.status == 'loading' || load.status == 'loaded', 'loading or loaded on link set'); for (var i = 0, l = linkSet.loads.length; i < l; i++) @@ -464,6 +594,9 @@ function logloads(loads) { var loader = linkSet.loader; for (var i = 0, l = load.dependencies.length; i < l; i++) { + if (!load.dependencies[i]) + continue; + var name = load.dependencies[i].value; if (loader.modules[name]) @@ -547,11 +680,31 @@ function logloads(loads) { // 15.2.5.2.4 function linkSetFailed(linkSet, load, exc) { var loader = linkSet.loader; + var requests; - if (linkSet.loads[0].name != load.name) - exc = addToError(exc, 'Error loading "' + load.name + '" from "' + linkSet.loads[0].name + '" at ' + (linkSet.loads[0].address || '<unknown>') + '\n'); + checkError: + if (load) { + if (linkSet.loads[0].name == load.name) { + exc = addToError(exc, 'Error loading ' + load.name); + } + else { + for (var i = 0; i < linkSet.loads.length; i++) { + var pLoad = linkSet.loads[i]; + for (var j = 0; j < pLoad.dependencies.length; j++) { + var dep = pLoad.dependencies[j]; + if (dep.value == load.name) { + exc = addToError(exc, 'Error loading ' + load.name + ' as "' + dep.key + '" from ' + pLoad.name); + break checkError; + } + } + } + exc = addToError(exc, 'Error loading ' + load.name + ' from ' + linkSet.loads[0].name); + } + } + else { + exc = addToError(exc, 'Error linking ' + linkSet.loads[0].name); + } - exc = addToError(exc, 'Error loading "' + load.name + '" at ' + (load.address || '<unknown>') + '\n'); var loads = linkSet.loads.concat([]); for (var i = 0, l = loads.length; i < l; i++) { @@ -610,6 +763,200 @@ function logloads(loads) { load.linkSets.splice(0, load.linkSets.length); } + function doDynamicExecute(linkSet, load, linkError) { + try { + var module = load.execute(); + } + catch(e) { + linkError(load, e); + return; + } + if (!module || !(module instanceof Module)) + linkError(load, new TypeError('Execution must define a Module instance')); + else + return module; + } + + // 26.3 Loader + + // 26.3.1.1 + // defined at top + + // importPromises adds ability to import a module twice without error - https://bugs.ecmascript.org/show_bug.cgi?id=2601 + function createImportPromise(loader, name, promise) { + var importPromises = loader._loader.importPromises; + return importPromises[name] = promise.then(function(m) { + importPromises[name] = undefined; + return m; + }, function(e) { + importPromises[name] = undefined; + throw e; + }); + } + + Loader.prototype = { + // 26.3.3.1 + constructor: Loader, + // 26.3.3.2 + define: function(name, source, options) { + // check if already defined + if (this._loader.importPromises[name]) + throw new TypeError('Module is already loading.'); + return createImportPromise(this, name, new Promise(asyncStartLoadPartwayThrough({ + step: 'translate', + loader: this._loader, + moduleName: name, + moduleMetadata: options && options.metadata || {}, + moduleSource: source, + moduleAddress: options && options.address + }))); + }, + // 26.3.3.3 + 'delete': function(name) { + var loader = this._loader; + delete loader.importPromises[name]; + delete loader.moduleRecords[name]; + return loader.modules[name] ? delete loader.modules[name] : false; + }, + // 26.3.3.4 entries not implemented + // 26.3.3.5 + get: function(key) { + if (!this._loader.modules[key]) + return; + doEnsureEvaluated(this._loader.modules[key], [], this); + return this._loader.modules[key].module; + }, + // 26.3.3.7 + has: function(name) { + return !!this._loader.modules[name]; + }, + // 26.3.3.8 + 'import': function(name, parentName, parentAddress) { + if (typeof parentName == 'object') + parentName = parentName.name; + + // run normalize first + var loaderObj = this; + + // added, see https://bugs.ecmascript.org/show_bug.cgi?id=2659 + return Promise.resolve(loaderObj.normalize(name, parentName)) + .then(function(name) { + var loader = loaderObj._loader; + + if (loader.modules[name]) { + doEnsureEvaluated(loader.modules[name], [], loader._loader); + return loader.modules[name].module; + } + + return loader.importPromises[name] || createImportPromise(loaderObj, name, + loadModule(loader, name, {}) + .then(function(load) { + delete loader.importPromises[name]; + return evaluateLoadedModule(loader, load); + })); + }); + }, + // 26.3.3.9 keys not implemented + // 26.3.3.10 + load: function(name) { + var loader = this._loader; + if (loader.modules[name]) + return Promise.resolve(); + return loader.importPromises[name] || createImportPromise(this, name, new Promise(asyncStartLoadPartwayThrough({ + step: 'locate', + loader: loader, + moduleName: name, + moduleMetadata: {}, + moduleSource: undefined, + moduleAddress: undefined + })) + .then(function() { + delete loader.importPromises[name]; + })); + }, + // 26.3.3.11 + module: function(source, options) { + var load = createLoad(); + load.address = options && options.address; + var linkSet = createLinkSet(this._loader, load); + var sourcePromise = Promise.resolve(source); + var loader = this._loader; + var p = linkSet.done.then(function() { + return evaluateLoadedModule(loader, load); + }); + proceedToTranslate(loader, load, sourcePromise); + return p; + }, + // 26.3.3.12 + newModule: function (obj) { + if (typeof obj != 'object') + throw new TypeError('Expected object'); + + var m = new Module(); + + var pNames = []; + if (Object.getOwnPropertyNames && obj != null) + pNames = Object.getOwnPropertyNames(obj); + else + for (var key in obj) + pNames.push(key); + + for (var i = 0; i < pNames.length; i++) (function(key) { + defineProperty(m, key, { + configurable: false, + enumerable: true, + get: function () { + return obj[key]; + }, + set: function() { + throw new Error('Module exports cannot be changed externally.'); + } + }); + })(pNames[i]); + + if (Object.freeze) + Object.freeze(m); + + return m; + }, + // 26.3.3.14 + set: function(name, module) { + if (!(module instanceof Module)) + throw new TypeError('Loader.set(' + name + ', module) must be a module'); + this._loader.modules[name] = { + module: module + }; + }, + // 26.3.3.15 values not implemented + // 26.3.3.16 @@iterator not implemented + // 26.3.3.17 @@toStringTag not implemented + + // 26.3.3.18.1 + normalize: function(name, referrerName, referrerAddress) { + return name; + }, + // 26.3.3.18.2 + locate: function(load) { + return load.name; + }, + // 26.3.3.18.3 + fetch: function(load) { + }, + // 26.3.3.18.4 + translate: function(load) { + return load.source; + }, + // 26.3.3.18.5 + instantiate: function(load) { + } + }; + + var _newModule = Loader.prototype.newModule; + +/* + * ES6 Module Declarative Linking Code - Dev Build Only + */ + // 15.2.5.3 Module Linking Groups // 15.2.5.3.2 BuildLinkageGroups alternative implementation @@ -662,21 +1009,8 @@ function logloads(loads) { } } - function doDynamicExecute(linkSet, load, linkError) { - try { - var module = load.execute(); - } - catch(e) { - linkError(load, e); - return; - } - if (!module || !(module instanceof Module)) - linkError(load, new TypeError('Execution must define a Module instance')); - else - return module; - } - // 15.2.5.4 + // declarative linking implementation function link(linkSet, linkError) { var loader = linkSet.loader; @@ -755,19 +1089,31 @@ function logloads(loads) { // By disaling this module write-protection we gain performance. // It could be useful to allow an option to enable or disable this. module.locked = true; - moduleObj[name] = value; - for (var i = 0, l = module.importers.length; i < l; i++) { - var importerModule = module.importers[i]; - if (!importerModule.locked) { - var importerIndex = indexOf.call(importerModule.dependencies, module); - importerModule.setters[importerIndex](moduleObj); + // export({name: value}) + if (typeof name == 'object') { + for (var p in name) + moduleObj[p] = name[p]; + } + // export(name, value) + else { + moduleObj[name] = value; + } + + for (var i = 0, l = module.importers.length; i < l; i++) { + var importerModule = module.importers[i]; + if (!importerModule.locked) { + for (var j = 0; j < importerModule.dependencies.length; ++j) { + if (importerModule.dependencies[j] === module) { + importerModule.setters[j](moduleObj); + } + } } } module.locked = false; return value; - }); + }, { id: load.name }); // setup our setters and execution function module.setters = registryEntry.setters; @@ -817,22 +1163,6 @@ function logloads(loads) { load.status = 'linked'; } - - - // 15.2.5.5.1 LinkImports not implemented - // 15.2.5.7 ResolveExportEntries not implemented - // 15.2.5.8 ResolveExports not implemented - // 15.2.5.9 ResolveExport not implemented - // 15.2.5.10 ResolveImportEntries not implemented - - // 15.2.6.1 - function evaluateLoadedModule(loader, load) { - console.assert(load.status == 'linked', 'is linked ' + load.name); - - doEnsureEvaluated(load.module, [], loader); - return load.module.module; - } - /* * Module Object non-exotic for ES5: * @@ -851,6 +1181,20 @@ function logloads(loads) { } } + // 15.2.5.5.1 LinkImports not implemented + // 15.2.5.7 ResolveExportEntries not implemented + // 15.2.5.8 ResolveExports not implemented + // 15.2.5.9 ResolveExport not implemented + // 15.2.5.10 ResolveImportEntries not implemented + + // 15.2.6.1 + function evaluateLoadedModule(loader, load) { + console.assert(load.status == 'linked', 'is linked ' + load.name); + + doEnsureEvaluated(load.module, [], loader); + return load.module.module; + } + // propogate execution errors // see https://bugs.ecmascript.org/show_bug.cgi?id=2993 function doEnsureEvaluated(module, seen, loader) { @@ -878,7 +1222,7 @@ function logloads(loads) { err = ensureEvaluated(dep, seen, loader); // stop on error, see https://bugs.ecmascript.org/show_bug.cgi?id=2996 if (err) { - err = addToError(err, 'Error evaluating ' + dep.name + '\n'); + err = addToError(err, 'Error evaluating ' + dep.name); return err; } } @@ -905,269 +1249,35 @@ function logloads(loads) { module.execute = undefined; return err; } - - function addToError(err, msg) { - if (err instanceof Error) - err.message = msg + err.message; - else - err = msg + err; - return err; - } - - // 26.3 Loader - - // 26.3.1.1 - function Loader(options) { - if (typeof options != 'object') - throw new TypeError('Options must be an object'); - - if (options.normalize) - this.normalize = options.normalize; - if (options.locate) - this.locate = options.locate; - if (options.fetch) - this.fetch = options.fetch; - if (options.translate) - this.translate = options.translate; - if (options.instantiate) - this.instantiate = options.instantiate; - - this._loader = { - loaderObj: this, - loads: [], - modules: {}, - importPromises: {}, - moduleRecords: {} - }; - - // 26.3.3.6 - defineProperty(this, 'global', { - get: function() { - return __global; - } - }); - - // 26.3.3.13 realm not implemented - } - - function Module() {} - - // importPromises adds ability to import a module twice without error - https://bugs.ecmascript.org/show_bug.cgi?id=2601 - function createImportPromise(loader, name, promise) { - var importPromises = loader._loader.importPromises; - return importPromises[name] = promise.then(function(m) { - importPromises[name] = undefined; - return m; - }, function(e) { - importPromises[name] = undefined; - throw e; - }); - } - - Loader.prototype = { - // 26.3.3.1 - constructor: Loader, - // 26.3.3.2 - define: function(name, source, options) { - // check if already defined - if (this._loader.importPromises[name]) - throw new TypeError('Module is already loading.'); - return createImportPromise(this, name, new Promise(asyncStartLoadPartwayThrough({ - step: 'translate', - loader: this._loader, - moduleName: name, - moduleMetadata: options && options.metadata || {}, - moduleSource: source, - moduleAddress: options && options.address - }))); - }, - // 26.3.3.3 - 'delete': function(name) { - var loader = this._loader; - delete loader.importPromises[name]; - delete loader.moduleRecords[name]; - return loader.modules[name] ? delete loader.modules[name] : false; - }, - // 26.3.3.4 entries not implemented - // 26.3.3.5 - get: function(key) { - if (!this._loader.modules[key]) - return; - doEnsureEvaluated(this._loader.modules[key], [], this); - return this._loader.modules[key].module; - }, - // 26.3.3.7 - has: function(name) { - return !!this._loader.modules[name]; - }, - // 26.3.3.8 - 'import': function(name, options) { - // run normalize first - var loaderObj = this; - - // added, see https://bugs.ecmascript.org/show_bug.cgi?id=2659 - return Promise.resolve(loaderObj.normalize(name, options && options.name, options && options.address)) - .then(function(name) { - var loader = loaderObj._loader; - - if (loader.modules[name]) { - doEnsureEvaluated(loader.modules[name], [], loader._loader); - return loader.modules[name].module; - } - - return loader.importPromises[name] || createImportPromise(loaderObj, name, - loadModule(loader, name, options || {}) - .then(function(load) { - delete loader.importPromises[name]; - return evaluateLoadedModule(loader, load); - })); - }); - }, - // 26.3.3.9 keys not implemented - // 26.3.3.10 - load: function(name, options) { - if (this._loader.modules[name]) { - doEnsureEvaluated(this._loader.modules[name], [], this._loader); - return Promise.resolve(this._loader.modules[name].module); - } - return this._loader.importPromises[name] || createImportPromise(this, name, loadModule(this._loader, name, {})); - }, - // 26.3.3.11 - module: function(source, options) { - var load = createLoad(); - load.address = options && options.address; - var linkSet = createLinkSet(this._loader, load); - var sourcePromise = Promise.resolve(source); - var loader = this._loader; - var p = linkSet.done.then(function() { - return evaluateLoadedModule(loader, load); - }); - proceedToTranslate(loader, load, sourcePromise); - return p; - }, - // 26.3.3.12 - newModule: function (obj) { - if (typeof obj != 'object') - throw new TypeError('Expected object'); - - // we do this to be able to tell if a module is a module privately in ES5 - // by doing m instanceof Module - var m = new Module(); - - for (var key in obj) { - (function (key) { - defineProperty(m, key, { - configurable: false, - enumerable: true, - get: function () { - return obj[key]; - } - }); - })(key); - } - - if (Object.preventExtensions) - Object.preventExtensions(m); - - return m; - }, - // 26.3.3.14 - set: function(name, module) { - if (!(module instanceof Module)) - throw new TypeError('Loader.set(' + name + ', module) must be a module'); - this._loader.modules[name] = { - module: module - }; - }, - // 26.3.3.15 values not implemented - // 26.3.3.16 @@iterator not implemented - // 26.3.3.17 @@toStringTag not implemented - - // 26.3.3.18.1 - normalize: function(name, referrerName, referrerAddress) { - return name; - }, - // 26.3.3.18.2 - locate: function(load) { - return load.name; - }, - // 26.3.3.18.3 - fetch: function(load) { - throw new TypeError('Fetch not implemented'); - }, - // 26.3.3.18.4 - translate: function(load) { - return load.source; - }, - // 26.3.3.18.5 - instantiate: function(load) { - } - }; - - var _newModule = Loader.prototype.newModule; - - if (typeof exports === 'object') - module.exports = Loader; - - __global.Reflect = __global.Reflect || {}; - __global.Reflect.Loader = __global.Reflect.Loader || Loader; - __global.Reflect.global = __global.Reflect.global || __global; - __global.LoaderPolyfill = Loader; - })(); /* - * Traceur and Babel transpile hook for Loader + * Traceur, Babel and TypeScript transpile hook for Loader */ -(function(Loader) { - var g = __global; - - function getTranspilerModule(loader, globalName) { - return loader.newModule({ 'default': g[globalName], __useDefault: true }); - } - var firstRun = true; +var transpile = (function() { // use Traceur by default Loader.prototype.transpiler = 'traceur'; - Loader.prototype.transpile = function(load) { + function transpile(load) { var self = this; - // pick up Transpiler modules from existing globals on first run if set - if (firstRun) { - if (g.traceur && !self.has('traceur')) - self.set('traceur', getTranspilerModule(self, 'traceur')); - if (g.babel && !self.has('babel')) - self.set('babel', getTranspilerModule(self, 'babel')); - firstRun = false; - } - - return self['import'](self.transpiler).then(function(transpiler) { + return Promise.resolve(__global[self.transpiler == 'typescript' ? 'ts' : self.transpiler] + || (self.pluginLoader || self)['import'](self.transpiler)) + .then(function(transpiler) { if (transpiler.__useDefault) transpiler = transpiler['default']; - return 'var __moduleAddress = "' + load.address + '";' + (transpiler.Compiler ? traceurTranspile : babelTranspile).call(self, load, transpiler); - }); - }; - Loader.prototype.instantiate = function(load) { - var self = this; - return Promise.resolve(self.normalize(self.transpiler)) - .then(function(transpilerNormalized) { - // load transpiler as a global (avoiding System clobbering) - if (load.name === transpilerNormalized) { - return { - deps: [], - execute: function() { - var curSystem = g.System; - var curLoader = g.Reflect.Loader; - // ensure not detected as CommonJS - __eval('(function(require,exports,module){' + load.source + '})();', g, load); - g.System = curSystem; - g.Reflect.Loader = curLoader; - return getTranspilerModule(self, load.name); - } - }; - } + var transpileFunction; + if (transpiler.Compiler) + transpileFunction = traceurTranspile; + else if (transpiler.createLanguageService) + transpileFunction = typescriptTranspile; + else + transpileFunction = babelTranspile; + + // note __moduleName will be part of the transformer meta in future when we have the spec for this + return '(function(__moduleName){' + transpileFunction.call(self, load, transpiler) + '\n})("' + load.name + '");\n//# sourceURL=' + load.address + '!transpiled'; }); }; @@ -1175,50 +1285,60 @@ function logloads(loads) { var options = this.traceurOptions || {}; options.modules = 'instantiate'; options.script = false; - options.sourceMaps = 'inline'; + if (options.sourceMaps === undefined) + options.sourceMaps = 'inline'; options.filename = load.address; options.inputSourceMap = load.metadata.sourceMap; options.moduleName = false; var compiler = new traceur.Compiler(options); - var source = doTraceurCompile(load.source, compiler, options.filename); - - // add "!eval" to end of Traceur sourceURL - // I believe this does something? - source += '!eval'; - return source; + return doTraceurCompile(load.source, compiler, options.filename); } function doTraceurCompile(source, compiler, filename) { try { return compiler.compile(source, filename); } catch(e) { - // traceur throws an error array - throw e[0]; + // on older versions of traceur (<0.9.3), an array of errors is thrown + // rather than a single error. + if (e.length) { + throw e[0]; + } + throw e; } } function babelTranspile(load, babel) { var options = this.babelOptions || {}; options.modules = 'system'; - options.sourceMap = 'inline'; + if (options.sourceMap === undefined) + options.sourceMap = 'inline'; + options.inputSourceMap = load.metadata.sourceMap; options.filename = load.address; options.code = true; options.ast = false; - - if (!options.blacklist) - options.blacklist = ['react']; - var source = babel.transform(load.source, options).code; + return babel.transform(load.source, options).code; + } + + function typescriptTranspile(load, ts) { + var options = this.typescriptOptions || {}; + options.target = options.target || ts.ScriptTarget.ES5; + if (options.sourceMap === undefined) + options.sourceMap = true; + if (options.sourceMap && options.inlineSourceMap !== false) + options.inlineSourceMap = true; + + options.module = ts.ModuleKind.System; - // add "!eval" to end of Babel sourceURL - // I believe this does something? - return source + '\n//# sourceURL=' + load.address + '!eval'; + return ts.transpile(load.source, options, load.address); } + return transpile; +})(); -})(__global.LoaderPolyfill);/* +/* ********************************************************************************************* System Loader Implementation @@ -1230,65 +1350,106 @@ function logloads(loads) { ********************************************************************************************* */ +var System; +function SystemLoader() { + Loader.call(this); + this.paths = {}; +} -(function() { - var isWorker = typeof self !== 'undefined' && typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope; - var isBrowser = typeof window != 'undefined' && !isWorker; - var isWindows = typeof process != 'undefined' && !!process.platform.match(/^win/); - var Promise = __global.Promise || require('when/es6-shim/Promise'); - - // Helpers - // Absolute URL parsing, from https://gist.github.com/Yaffle/1088850 - function parseURI(url) { - var m = String(url).replace(/^\s+|\s+$/g, '').match(/^([^:\/?#]+:)?(\/\/(?:[^:@\/?#]*(?::[^:@\/?#]*)?@)?(([^:\/?#]*)(?::(\d*))?))?([^?#]*)(\?[^#]*)?(#[\s\S]*)?/); - // authority = '//' + user + ':' + pass '@' + hostname + ':' port - return (m ? { - href : m[0] || '', - protocol : m[1] || '', - authority: m[2] || '', - host : m[3] || '', - hostname : m[4] || '', - port : m[5] || '', - pathname : m[6] || '', - search : m[7] || '', - hash : m[8] || '' - } : null); +// NB no specification provided for System.paths, used ideas discussed in https://github.com/jorendorff/js-loaders/issues/25 +function applyPaths(paths, name) { + // most specific (most number of slashes in path) match wins + var pathMatch = '', wildcard, maxWildcardPrefixLen = 0; + + // check to see if we have a paths entry + for (var p in paths) { + var pathParts = p.split('*'); + if (pathParts.length > 2) + throw new TypeError('Only one wildcard in a path is permitted'); + + // exact path match + if (pathParts.length == 1) { + if (name == p) + return paths[p]; + + // support trailing / in paths rules + else if (name.substr(0, p.length - 1) == p.substr(0, p.length - 1) && (name.length < p.length || name[p.length - 1] == p[p.length - 1]) && paths[p][paths[p].length - 1] == '/') + return paths[p].substr(0, paths[p].length - 1) + (name.length > p.length ? '/' + name.substr(p.length) : ''); + } + // wildcard path match + else { + var wildcardPrefixLen = pathParts[0].length; + if (wildcardPrefixLen >= maxWildcardPrefixLen && + name.substr(0, pathParts[0].length) == pathParts[0] && + name.substr(name.length - pathParts[1].length) == pathParts[1]) { + maxWildcardPrefixLen = wildcardPrefixLen; + pathMatch = p; + wildcard = name.substr(pathParts[0].length, name.length - pathParts[1].length - pathParts[0].length); + } + } } - function removeDotSegments(input) { - var output = []; - input.replace(/^(\.\.?(\/|$))+/, '') - .replace(/\/(\.(\/|$))+/g, '/') - .replace(/\/\.\.$/, '/../') - .replace(/\/?[^\/]*/g, function (p) { - if (p === '/..') - output.pop(); - else - output.push(p); - }); - return output.join('').replace(/^\//, input.charAt(0) === '/' ? '/' : ''); - } + var outPath = paths[pathMatch]; + if (typeof wildcard == 'string') + outPath = outPath.replace('*', wildcard); - function toAbsoluteURL(base, href) { + return outPath; +} - if (isWindows) - href = href.replace(/\\/g, '/'); +// inline Object.create-style class extension +function LoaderProto() {} +LoaderProto.prototype = Loader.prototype; +SystemLoader.prototype = new LoaderProto(); - href = parseURI(href || ''); - base = parseURI(base || ''); +var absURLRegEx = /^([^\/]+:\/\/|\/)/; - return !href || !base ? null : (href.protocol || base.protocol) + - (href.protocol || href.authority ? href.authority : base.authority) + - removeDotSegments(href.protocol || href.authority || href.pathname.charAt(0) === '/' ? href.pathname : (href.pathname ? ((base.authority && !base.pathname ? '/' : '') + base.pathname.slice(0, base.pathname.lastIndexOf('/') + 1) + href.pathname) : base.pathname)) + - (href.protocol || href.authority || href.pathname ? href.search : (href.search || base.search)) + - href.hash; - } +// Normalization with module names as absolute URLs +SystemLoader.prototype.normalize = function(name, parentName, parentAddress) { + // NB does `import 'file.js'` import relative to the parent name or baseURL? + // have assumed that it is baseURL-relative here, but spec may well align with URLs to be the latter + // safe option for users is to always use "./file.js" for relative - var fetchTextFromURL; + // not absolute or relative -> apply paths (what will be sites) + if (!name.match(absURLRegEx) && name[0] != '.') + name = new URL(applyPaths(this.paths, name) || name, baseURI).href; + // apply parent-relative normalization, parentAddress is already normalized + else + name = new URL(name, parentName || baseURI).href; + return name; +}; + +SystemLoader.prototype.locate = function(load) { + return load.name; +}; + + +// ensure the transpiler is loaded correctly +SystemLoader.prototype.instantiate = function(load) { + var self = this; + return Promise.resolve(self.normalize(self.transpiler)) + .then(function(transpilerNormalized) { + // load transpiler as a global (avoiding System clobbering) + if (load.address === transpilerNormalized) { + return { + deps: [], + execute: function() { + var curSystem = __global.System; + var curLoader = __global.Reflect.Loader; + // ensure not detected as CommonJS + __eval('(function(require,exports,module){' + load.source + '})();', load.address, __global); + __global.System = curSystem; + __global.Reflect.Loader = curLoader; + return self.newModule({ 'default': __global[self.transpiler], __useDefault: true }); + } + }; + } + }); +}; + var fetchTextFromURL; if (typeof XMLHttpRequest != 'undefined') { - fetchTextFromURL = function(url, fulfill, reject) { + fetchTextFromURL = function(url, authorization, fulfill, reject) { var xhr = new XMLHttpRequest(); var sameDomain = true; var doTimeout = false; @@ -1314,221 +1475,111 @@ function logloads(loads) { fulfill(xhr.responseText); } function error() { - reject(xhr.statusText + ': ' + url || 'XHR error'); + reject(new Error('XHR error' + (xhr.status ? ' (' + xhr.status + (xhr.statusText ? ' ' + xhr.statusText : '') + ')' : '') + ' loading ' + url)); } xhr.onreadystatechange = function () { if (xhr.readyState === 4) { - if (xhr.status === 200 || (xhr.status == 0 && xhr.responseText)) { + // in Chrome on file:/// URLs, status is 0 + if (xhr.status == 0) { + if (xhr.responseText) { + load(); + } + else { + // when responseText is empty, wait for load or error event + // to inform if it is a 404 or empty file + xhr.addEventListener('error', error); + xhr.addEventListener('load', load); + } + } + else if (xhr.status === 200) { load(); - } else { + } + else { error(); } } }; xhr.open("GET", url, true); - if (doTimeout) + if (xhr.setRequestHeader) { + xhr.setRequestHeader('Accept', 'application/x-es-module, */*'); + // can set "authorization: true" to enable withCredentials only + if (authorization) { + if (typeof authorization == 'string') + xhr.setRequestHeader('Authorization', authorization); + xhr.withCredentials = true; + } + } + + if (doTimeout) { setTimeout(function() { xhr.send(); }, 0); - - xhr.send(null); - } + } else { + xhr.send(null); + } + }; } - else if (typeof require != 'undefined') { + else if (typeof require != 'undefined' && typeof process != 'undefined') { var fs; - fetchTextFromURL = function(url, fulfill, reject) { - if (url.substr(0, 5) != 'file:') - throw 'Only file URLs of the form file: allowed running in Node.'; + fetchTextFromURL = function(url, authorization, fulfill, reject) { + if (url.substr(0, 8) != 'file:///') + throw new Error('Unable to fetch "' + url + '". Only file URLs of the form file:/// allowed running in Node.'); fs = fs || require('fs'); - url = url.substr(5); if (isWindows) - url = url.replace(/\//g, '\\'); + url = url.replace(/\//g, '\\').substr(8); + else + url = url.substr(7); return fs.readFile(url, function(err, data) { - if (err) + if (err) { return reject(err); - else - fulfill(data + ''); - }); - } - } - else { - throw new TypeError('No environment fetch API available.'); - } - - var SystemLoader = function($__super) { - function SystemLoader(options) { - $__super.call(this, options || {}); - - // Set default baseURL and paths - if (typeof location != 'undefined' && location.href) { - var href = __global.location.href.split('#')[0].split('?')[0]; - this.baseURL = href.substring(0, href.lastIndexOf('/') + 1); - } - else if (typeof process != 'undefined' && process.cwd) { - this.baseURL = 'file:' + process.cwd() + '/'; - if (isWindows) - this.baseURL = this.baseURL.replace(/\\/g, '/'); - } - else { - throw new TypeError('No environment baseURL'); - } - this.paths = { '*': '*.js' }; - } - - SystemLoader.__proto__ = ($__super !== null ? $__super : Function.prototype); - SystemLoader.prototype = $__Object$create(($__super !== null ? $__super.prototype : null)); - - $__Object$defineProperty(SystemLoader.prototype, "constructor", { - value: SystemLoader - }); - - $__Object$defineProperty(SystemLoader.prototype, "global", { - get: function() { - return isBrowser ? window : (isWorker ? self : __global); - }, - - enumerable: false - }); - - $__Object$defineProperty(SystemLoader.prototype, "strict", { - get: function() { return true; }, - enumerable: false - }); - - $__Object$defineProperty(SystemLoader.prototype, "normalize", { - value: function(name, parentName, parentAddress) { - if (typeof name != 'string') - throw new TypeError('Module name must be a string'); - - var segments = name.split('/'); - - if (segments.length == 0) - throw new TypeError('No module name provided'); - - // current segment - var i = 0; - // is the module name relative - var rel = false; - // number of backtracking segments - var dotdots = 0; - if (segments[0] == '.') { - i++; - if (i == segments.length) - throw new TypeError('Illegal module name "' + name + '"'); - rel = true; } else { - while (segments[i] == '..') { - i++; - if (i == segments.length) - throw new TypeError('Illegal module name "' + name + '"'); - } - if (i) - rel = true; - dotdots = i; - } + // Strip Byte Order Mark out if it's the leading char + var dataString = data + ''; + if (dataString[0] === '\ufeff') + dataString = dataString.substr(1); - for (var j = i; j < segments.length; j++) { - var segment = segments[j]; - if (segment == '' || segment == '.' || segment == '..') - throw new TypeError('Illegal module name "' + name + '"'); + fulfill(dataString); } + }); + }; + } + else if (typeof self != 'undefined' && typeof self.fetch != 'undefined') { + fetchTextFromURL = function(url, authorization, fulfill, reject) { + var opts = { + headers: {'Accept': 'application/x-es-module, */*'} + }; - if (!rel) - return name; - - // build the full module name - var normalizedParts = []; - var parentParts = (parentName || '').split('/'); - var normalizedLen = parentParts.length - 1 - dotdots; - - normalizedParts = normalizedParts.concat(parentParts.splice(0, parentParts.length - 1 - dotdots)); - normalizedParts = normalizedParts.concat(segments.splice(i, segments.length - i)); - - return normalizedParts.join('/'); - }, - - enumerable: false, - writable: true - }); - - $__Object$defineProperty(SystemLoader.prototype, "locate", { - value: function(load) { - var name = load.name; - - // NB no specification provided for System.paths, used ideas discussed in https://github.com/jorendorff/js-loaders/issues/25 - - // most specific (longest) match wins - var pathMatch = '', wildcard; - - // check to see if we have a paths entry - for (var p in this.paths) { - var pathParts = p.split('*'); - if (pathParts.length > 2) - throw new TypeError('Only one wildcard in a path is permitted'); - - // exact path match - if (pathParts.length == 1) { - if (name == p && p.length > pathMatch.length) { - pathMatch = p; - break; - } - } + if (authorization) { + if (typeof authorization == 'string') + opts.headers['Authorization'] = authorization; + opts.credentials = 'include'; + } - // wildcard path match - else { - if (name.substr(0, pathParts[0].length) == pathParts[0] && name.substr(name.length - pathParts[1].length) == pathParts[1]) { - pathMatch = p; - wildcard = name.substr(pathParts[0].length, name.length - pathParts[1].length - pathParts[0].length); - } + fetch(url, opts) + .then(function (r) { + if (r.ok) { + return r.text(); + } else { + throw new Error('Fetch error: ' + r.status + ' ' + r.statusText); } - } - - var outPath = this.paths[pathMatch]; - if (wildcard) - outPath = outPath.replace('*', wildcard); - - // percent encode just '#' in module names - // according to https://github.com/jorendorff/js-loaders/blob/master/browser-loader.js#L238 - // we should encode everything, but it breaks for servers that don't expect it - // like in (https://github.com/systemjs/systemjs/issues/168) - if (isBrowser) - outPath = outPath.replace(/#/g, '%23'); - - return toAbsoluteURL(this.baseURL, outPath); - }, - - enumerable: false, - writable: true - }); - - $__Object$defineProperty(SystemLoader.prototype, "fetch", { - value: function(load) { - var self = this; - return new Promise(function(resolve, reject) { - fetchTextFromURL(toAbsoluteURL(self.baseURL, load.address), function(source) { - resolve(source); - }, reject); - }); - }, + }) + .then(fulfill, reject); + } + } + else { + throw new TypeError('No environment fetch API available.'); + } - enumerable: false, - writable: true + SystemLoader.prototype.fetch = function(load) { + return new Promise(function(resolve, reject) { + fetchTextFromURL(load.address, undefined, resolve, reject); }); + }; - return SystemLoader; - }(__global.LoaderPolyfill); - - var System = new SystemLoader(); - - // note we have to export before runing "init" below - if (typeof exports === 'object') - module.exports = System; - - __global.System = System; - +(function() { // <script type="module"> support // allow a data-init function callback once loaded if (isBrowser && typeof document.getElementsByTagName != 'undefined') { @@ -1550,7 +1601,7 @@ function logloads(loads) { // It is important to reference the global System, rather than the one // in our closure. We want to ensure that downstream users/libraries // can override System w/ custom behavior. - __global.System.module(source)['catch'](function(err) { setTimeout(function() { throw err; }); }); + System.module(source)['catch'](function(err) { setTimeout(function() { throw err; }); }); } } } @@ -1563,26 +1614,26 @@ function logloads(loads) { document.addEventListener('DOMContentLoaded', completed, false); window.addEventListener('load', completed, false); } - - // run the data-init function on the script tag - if (curScript.getAttribute('data-init')) - window[curScript.getAttribute('data-init')](); } })(); + // -- exporting -- + if (typeof exports === 'object') + module.exports = Loader; -// Define our eval outside of the scope of any other reference defined in this -// file to avoid adding those references to the evaluation scope. -function __eval(__source, __global, __load) { - try { - eval('(function() { var __moduleName = "' + (__load.name || '').replace('"', '\"') + '"; ' + __source + ' \n }).call(__global);'); - } - catch(e) { - if (e.name == 'SyntaxError' || e.name == 'TypeError') - e.message = 'Evaluating ' + (__load.name || load.address) + '\n\t' + e.message; - throw e; + __global.Reflect = __global.Reflect || {}; + __global.Reflect.Loader = __global.Reflect.Loader || Loader; + __global.Reflect.global = __global.Reflect.global || __global; + __global.LoaderPolyfill = Loader; + + if (!System) { + System = new SystemLoader(); + System.constructor = SystemLoader; } -} -})(typeof window != 'undefined' ? window : (typeof WorkerGlobalScope != 'undefined' ? - self : global)); + if (typeof exports === 'object') + module.exports = System; + + __global.System = System; + +})(typeof self != 'undefined' ? self : global); \ No newline at end of file diff --git a/dist/es6-module-loader-sans-promises.js b/dist/es6-module-loader-sans-promises.js deleted file mode 100644 index 022b2f5..0000000 --- a/dist/es6-module-loader-sans-promises.js +++ /dev/null @@ -1,8 +0,0 @@ -/* - * es6-module-loader v0.16.1 - * https://github.com/ModuleLoader/es6-module-loader - * Copyright (c) 2015 Guy Bedford, Luke Hoban, Addy Osmani; Licensed MIT - */ - -!function(__global){function __eval(__source,__global,__load){try{eval('(function() { var __moduleName = "'+(__load.name||"").replace('"','"')+'"; '+__source+" \n }).call(__global);")}catch(e){throw("SyntaxError"==e.name||"TypeError"==e.name)&&(e.message="Evaluating "+(__load.name||load.address)+"\n "+e.message),e}}$__Object$getPrototypeOf=Object.getPrototypeOf||function(a){return a.__proto__};var $__Object$defineProperty;!function(){try{Object.defineProperty({},"a",{})&&($__Object$defineProperty=Object.defineProperty)}catch(a){$__Object$defineProperty=function(a,b,c){try{a[b]=c.value||c.get.call(a)}catch(d){}}}}(),$__Object$create=Object.create||function(a,b){function c(){}if(c.prototype=a,"object"==typeof b)for(prop in b)b.hasOwnProperty(prop)&&(c[prop]=b[prop]);return new c},function(){function a(a){return{status:"loading",name:a,linkSets:[],dependencies:[],metadata:{}}}function b(a,b,c){return new A(g({step:c.address?"fetch":"locate",loader:a,moduleName:b,moduleMetadata:c&&c.metadata||{},moduleSource:c.source,moduleAddress:c.address}))}function c(b,c,e,f){return new A(function(a){a(b.loaderObj.normalize(c,e,f))}).then(function(c){var e;if(b.modules[c])return e=a(c),e.status="linked",e.module=b.modules[c],e;for(var f=0,g=b.loads.length;g>f;f++)if(e=b.loads[f],e.name==c)return e;return e=a(c),b.loads.push(e),d(b,e),e})}function d(a,b){e(a,b,A.resolve().then(function(){return a.loaderObj.locate({name:b.name,metadata:b.metadata})}))}function e(a,b,c){f(a,b,c.then(function(c){return"loading"==b.status?(b.address=c,a.loaderObj.fetch({name:b.name,metadata:b.metadata,address:c})):void 0}))}function f(a,b,d){d.then(function(d){return"loading"==b.status?A.resolve(a.loaderObj.translate({name:b.name,metadata:b.metadata,address:b.address,source:d})).then(function(c){return b.source=c,a.loaderObj.instantiate({name:b.name,metadata:b.metadata,address:b.address,source:c})}).then(function(c){if(void 0===c)return b.address=b.address||"<Anonymous Module "+ ++D+">",b.isDeclarative=!0,a.loaderObj.transpile(b).then(function(a){var c=__global.System,d=c.register;c.register=function(a,c,d){"string"!=typeof a&&(d=c,c=a),b.declare=d,b.depsList=c},__eval(a,__global,b),c.register=d});if("object"!=typeof c)throw TypeError("Invalid instantiate return value");b.depsList=c.deps||[],b.execute=c.execute,b.isDeclarative=!1}).then(function(){b.dependencies=[];for(var d=b.depsList,e=[],f=0,g=d.length;g>f;f++)(function(d,f){e.push(c(a,d,b.name,b.address).then(function(a){if(b.dependencies[f]={key:d,value:a.name},"linked"!=a.status)for(var c=b.linkSets.concat([]),e=0,g=c.length;g>e;e++)i(c[e],a)}))})(d[f],f);return A.all(e)}).then(function(){b.status="loaded";for(var a=b.linkSets.concat([]),c=0,d=a.length;d>c;c++)k(a[c],b)}):void 0})["catch"](function(a){b.status="failed",b.exception=a;for(var c=b.linkSets.concat([]),d=0,e=c.length;e>d;d++)l(c[d],b,a)})}function g(b){return function(c){var g=b.loader,i=b.moduleName,j=b.step;if(g.modules[i])throw new TypeError('"'+i+'" already exists in the module table');for(var k,l=0,m=g.loads.length;m>l;l++)if(g.loads[l].name==i)return k=g.loads[l],"translate"!=j||k.source||(k.address=b.moduleAddress,f(g,k,A.resolve(b.moduleSource))),k.linkSets[0].done.then(function(){c(k)});var n=a(i);n.metadata=b.moduleMetadata;var o=h(g,n);g.loads.push(n),c(o.done),"locate"==j?d(g,n):"fetch"==j?e(g,n,A.resolve(b.moduleAddress)):(n.address=b.moduleAddress,f(g,n,A.resolve(b.moduleSource)))}}function h(a,b){var c={loader:a,loads:[],startingLoad:b,loadingCount:0};return c.done=new A(function(a,b){c.resolve=a,c.reject=b}),i(c,b),c}function i(a,b){for(var c=0,d=a.loads.length;d>c;c++)if(a.loads[c]==b)return;a.loads.push(b),b.linkSets.push(a),"loaded"!=b.status&&a.loadingCount++;for(var e=a.loader,c=0,d=b.dependencies.length;d>c;c++){var f=b.dependencies[c].value;if(!e.modules[f])for(var g=0,h=e.loads.length;h>g;g++)if(e.loads[g].name==f){i(a,e.loads[g]);break}}}function j(a){var b=!1;try{p(a,function(c,d){l(a,c,d),b=!0})}catch(c){l(a,null,c),b=!0}return b}function k(a,b){if(a.loadingCount--,!(a.loadingCount>0)){var c=a.startingLoad;if(a.loader.loaderObj.execute===!1){for(var d=[].concat(a.loads),e=0,f=d.length;f>e;e++){var b=d[e];b.module=b.isDeclarative?{name:b.name,module:E({}),evaluated:!0}:{module:E({})},b.status="linked",m(a.loader,b)}return a.resolve(c)}var g=j(a);g||a.resolve(c)}}function l(a,b,c){var d=a.loader;a.loads[0].name!=b.name&&(c=w(c,'Error loading "'+b.name+'" from "'+a.loads[0].name+'" at '+(a.loads[0].address||"<unknown>")+"\n")),c=w(c,'Error loading "'+b.name+'" at '+(b.address||"<unknown>")+"\n");for(var e=a.loads.concat([]),f=0,g=e.length;g>f;f++){var b=e[f];d.loaderObj.failed=d.loaderObj.failed||[],-1==B.call(d.loaderObj.failed,b)&&d.loaderObj.failed.push(b);var h=B.call(b.linkSets,a);if(b.linkSets.splice(h,1),0==b.linkSets.length){var i=B.call(a.loader.loads,b);-1!=i&&a.loader.loads.splice(i,1)}}a.reject(c)}function m(a,b){if(a.loaderObj.trace){a.loaderObj.loads||(a.loaderObj.loads={});var c={};b.dependencies.forEach(function(a){c[a.key]=a.value}),a.loaderObj.loads[b.name]={name:b.name,deps:b.dependencies.map(function(a){return a.key}),depMap:c,address:b.address,metadata:b.metadata,source:b.source,kind:b.isDeclarative?"declarative":"dynamic"}}b.name&&(a.modules[b.name]=b.module);var d=B.call(a.loads,b);-1!=d&&a.loads.splice(d,1);for(var e=0,f=b.linkSets.length;f>e;e++)d=B.call(b.linkSets[e].loads,b),-1!=d&&b.linkSets[e].loads.splice(d,1);b.linkSets.splice(0,b.linkSets.length)}function n(a,b,c){if(c[a.groupIndex]=c[a.groupIndex]||[],-1==B.call(c[a.groupIndex],a)){c[a.groupIndex].push(a);for(var d=0,e=b.length;e>d;d++)for(var f=b[d],g=0;g<a.dependencies.length;g++)if(f.name==a.dependencies[g].value){var h=a.groupIndex+(f.isDeclarative!=a.isDeclarative);if(void 0===f.groupIndex||f.groupIndex<h){if(void 0!==f.groupIndex&&(c[f.groupIndex].splice(B.call(c[f.groupIndex],f),1),0==c[f.groupIndex].length))throw new TypeError("Mixed dependency cycle detected");f.groupIndex=h}n(f,b,c)}}}function o(a,b,c){try{var d=b.execute()}catch(e){return void c(b,e)}return d&&d instanceof y?d:void c(b,new TypeError("Execution must define a Module instance"))}function p(a,b){var c=a.loader;if(a.loads.length){var d=[],e=a.loads[0];e.groupIndex=0,n(e,a.loads,d);for(var f=e.isDeclarative==d.length%2,g=d.length-1;g>=0;g--){for(var h=d[g],i=0;i<h.length;i++){var j=h[i];if(f)r(j,a.loads,c);else{var k=o(a,j,b);if(!k)return;j.module={name:j.name,module:k},j.status="linked"}m(c,j)}f=!f}}}function q(a,b){var c=b.moduleRecords;return c[a]||(c[a]={name:a,dependencies:[],module:new y,importers:[]})}function r(a,b,c){if(!a.module){var d=a.module=q(a.name,c),e=a.module.module,f=a.declare.call(__global,function(a,b){d.locked=!0,e[a]=b;for(var c=0,f=d.importers.length;f>c;c++){var g=d.importers[c];if(!g.locked){var h=B.call(g.dependencies,d);g.setters[h](e)}}return d.locked=!1,b});d.setters=f.setters,d.execute=f.execute;for(var g=0,h=a.dependencies.length;h>g;g++){var i=a.dependencies[g].value,j=c.modules[i];if(!j)for(var k=0;k<b.length;k++)b[k].name==i&&(b[k].module?j=q(i,c):(r(b[k],b,c),j=b[k].module));j.importers?(d.dependencies.push(j),j.importers.push(d)):d.dependencies.push(null),d.setters[g]&&d.setters[g](j.module)}a.status="linked"}}function s(a,b){return u(b.module,[],a),b.module.module}function t(a){try{a.execute.call(__global)}catch(b){return b}}function u(a,b,c){var d=v(a,b,c);if(d)throw d}function v(a,b,c){if(!a.evaluated&&a.dependencies){b.push(a);for(var d,e=a.dependencies,f=0,g=e.length;g>f;f++){var h=e[f];if(h&&-1==B.call(b,h)&&(d=v(h,b,c)))return d=w(d,"Error evaluating "+h.name+"\n")}if(a.failed)return new Error("Module failed execution.");if(!a.evaluated)return a.evaluated=!0,d=t(a),d?a.failed=!0:Object.preventExtensions&&Object.preventExtensions(a.module),a.execute=void 0,d}}function w(a,b){return a instanceof Error?a.message=b+a.message:a=b+a,a}function x(a){if("object"!=typeof a)throw new TypeError("Options must be an object");a.normalize&&(this.normalize=a.normalize),a.locate&&(this.locate=a.locate),a.fetch&&(this.fetch=a.fetch),a.translate&&(this.translate=a.translate),a.instantiate&&(this.instantiate=a.instantiate),this._loader={loaderObj:this,loads:[],modules:{},importPromises:{},moduleRecords:{}},C(this,"global",{get:function(){return __global}})}function y(){}function z(a,b,c){var d=a._loader.importPromises;return d[b]=c.then(function(a){return d[b]=void 0,a},function(a){throw d[b]=void 0,a})}var A=__global.Promise||require("when/es6-shim/Promise");__global.console&&(console.assert=console.assert||function(){});var B=Array.prototype.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},C=$__Object$defineProperty,D=0;x.prototype={constructor:x,define:function(a,b,c){if(this._loader.importPromises[a])throw new TypeError("Module is already loading.");return z(this,a,new A(g({step:"translate",loader:this._loader,moduleName:a,moduleMetadata:c&&c.metadata||{},moduleSource:b,moduleAddress:c&&c.address})))},"delete":function(a){var b=this._loader;return delete b.importPromises[a],delete b.moduleRecords[a],b.modules[a]?delete b.modules[a]:!1},get:function(a){return this._loader.modules[a]?(u(this._loader.modules[a],[],this),this._loader.modules[a].module):void 0},has:function(a){return!!this._loader.modules[a]},"import":function(a,c){var d=this;return A.resolve(d.normalize(a,c&&c.name,c&&c.address)).then(function(a){var e=d._loader;return e.modules[a]?(u(e.modules[a],[],e._loader),e.modules[a].module):e.importPromises[a]||z(d,a,b(e,a,c||{}).then(function(b){return delete e.importPromises[a],s(e,b)}))})},load:function(a){return this._loader.modules[a]?(u(this._loader.modules[a],[],this._loader),A.resolve(this._loader.modules[a].module)):this._loader.importPromises[a]||z(this,a,b(this._loader,a,{}))},module:function(b,c){var d=a();d.address=c&&c.address;var e=h(this._loader,d),g=A.resolve(b),i=this._loader,j=e.done.then(function(){return s(i,d)});return f(i,d,g),j},newModule:function(a){if("object"!=typeof a)throw new TypeError("Expected object");var b=new y;for(var c in a)!function(c){C(b,c,{configurable:!1,enumerable:!0,get:function(){return a[c]}})}(c);return Object.preventExtensions&&Object.preventExtensions(b),b},set:function(a,b){if(!(b instanceof y))throw new TypeError("Loader.set("+a+", module) must be a module");this._loader.modules[a]={module:b}},normalize:function(a){return a},locate:function(a){return a.name},fetch:function(){throw new TypeError("Fetch not implemented")},translate:function(a){return a.source},instantiate:function(){}};var E=x.prototype.newModule;"object"==typeof exports&&(module.exports=x),__global.Reflect=__global.Reflect||{},__global.Reflect.Loader=__global.Reflect.Loader||x,__global.Reflect.global=__global.Reflect.global||__global,__global.LoaderPolyfill=x}(),function(a){function b(a,b){return a.newModule({"default":f[b],__useDefault:!0})}function c(a,b){var c=this.traceurOptions||{};c.modules="instantiate",c.script=!1,c.sourceMaps="inline",c.filename=a.address,c.inputSourceMap=a.metadata.sourceMap,c.moduleName=!1;var e=new b.Compiler(c),f=d(a.source,e,c.filename);return f+="!eval"}function d(a,b,c){try{return b.compile(a,c)}catch(d){throw d[0]}}function e(a,b){var c=this.babelOptions||{};c.modules="system",c.sourceMap="inline",c.filename=a.address,c.code=!0,c.ast=!1,c.blacklist||(c.blacklist=["react"]);var d=b.transform(a.source,c).code;return d+"\n//# sourceURL="+a.address+"!eval"}var f=__global,g=!0;a.prototype.transpiler="traceur",a.prototype.transpile=function(a){var d=this;return g&&(f.traceur&&!d.has("traceur")&&d.set("traceur",b(d,"traceur")),f.babel&&!d.has("babel")&&d.set("babel",b(d,"babel")),g=!1),d["import"](d.transpiler).then(function(b){return b.__useDefault&&(b=b["default"]),'var __moduleAddress = "'+a.address+'";'+(b.Compiler?c:e).call(d,a,b)})},a.prototype.instantiate=function(a){var c=this;return Promise.resolve(c.normalize(c.transpiler)).then(function(d){return a.name===d?{deps:[],execute:function(){var d=f.System,e=f.Reflect.Loader;return __eval("(function(require,exports,module){"+a.source+"})();",f,a),f.System=d,f.Reflect.Loader=e,b(c,a.name)}}:void 0})}}(__global.LoaderPolyfill),function(){function a(a){var b=String(a).replace(/^\s+|\s+$/g,"").match(/^([^:\/?#]+:)?(\/\/(?:[^:@\/?#]*(?::[^:@\/?#]*)?@)?(([^:\/?#]*)(?::(\d*))?))?([^?#]*)(\?[^#]*)?(#[\s\S]*)?/);return b?{href:b[0]||"",protocol:b[1]||"",authority:b[2]||"",host:b[3]||"",hostname:b[4]||"",port:b[5]||"",pathname:b[6]||"",search:b[7]||"",hash:b[8]||""}:null}function b(a){var b=[];return a.replace(/^(\.\.?(\/|$))+/,"").replace(/\/(\.(\/|$))+/g,"/").replace(/\/\.\.$/,"/../").replace(/\/?[^\/]*/g,function(a){"/.."===a?b.pop():b.push(a)}),b.join("").replace(/^\//,"/"===a.charAt(0)?"/":"")}function c(c,d){return i&&(d=d.replace(/\\/g,"/")),d=a(d||""),c=a(c||""),d&&c?(d.protocol||c.protocol)+(d.protocol||d.authority?d.authority:c.authority)+b(d.protocol||d.authority||"/"===d.pathname.charAt(0)?d.pathname:d.pathname?(c.authority&&!c.pathname?"/":"")+c.pathname.slice(0,c.pathname.lastIndexOf("/")+1)+d.pathname:c.pathname)+(d.protocol||d.authority||d.pathname?d.search:d.search||c.search)+d.hash:null}function d(){document.removeEventListener("DOMContentLoaded",d,!1),window.removeEventListener("load",d,!1),e()}function e(){for(var a=document.getElementsByTagName("script"),b=0;b<a.length;b++){var c=a[b];if("module"==c.type){var d=c.innerHTML.substr(1);__global.System.module(d)["catch"](function(a){setTimeout(function(){throw a})})}}}var f,g="undefined"!=typeof self&&"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope,h="undefined"!=typeof window&&!g,i="undefined"!=typeof process&&!!process.platform.match(/^win/),j=__global.Promise||require("when/es6-shim/Promise");if("undefined"!=typeof XMLHttpRequest)f=function(a,b,c){function d(){b(f.responseText)}function e(){c(f.statusText+": "+a||"XHR error")}var f=new XMLHttpRequest,g=!0,h=!1;if(!("withCredentials"in f)){var i=/^(\w+:)?\/\/([^\/]+)/.exec(a);i&&(g=i[2]===window.location.host,i[1]&&(g&=i[1]===window.location.protocol))}g||"undefined"==typeof XDomainRequest||(f=new XDomainRequest,f.onload=d,f.onerror=e,f.ontimeout=e,f.onprogress=function(){},f.timeout=0,h=!0),f.onreadystatechange=function(){4===f.readyState&&(200===f.status||0==f.status&&f.responseText?d():e())},f.open("GET",a,!0),h&&setTimeout(function(){f.send()},0),f.send(null)};else{if("undefined"==typeof require)throw new TypeError("No environment fetch API available.");var k;f=function(a,b,c){if("file:"!=a.substr(0,5))throw"Only file URLs of the form file: allowed running in Node.";return k=k||require("fs"),a=a.substr(5),i&&(a=a.replace(/\//g,"\\")),k.readFile(a,function(a,d){return a?c(a):void b(d+"")})}}var l=function(a){function b(b){if(a.call(this,b||{}),"undefined"!=typeof location&&location.href){var c=__global.location.href.split("#")[0].split("?")[0];this.baseURL=c.substring(0,c.lastIndexOf("/")+1)}else{if("undefined"==typeof process||!process.cwd)throw new TypeError("No environment baseURL");this.baseURL="file:"+process.cwd()+"/",i&&(this.baseURL=this.baseURL.replace(/\\/g,"/"))}this.paths={"*":"*.js"}}return b.__proto__=null!==a?a:Function.prototype,b.prototype=$__Object$create(null!==a?a.prototype:null),$__Object$defineProperty(b.prototype,"constructor",{value:b}),$__Object$defineProperty(b.prototype,"global",{get:function(){return h?window:g?self:__global},enumerable:!1}),$__Object$defineProperty(b.prototype,"strict",{get:function(){return!0},enumerable:!1}),$__Object$defineProperty(b.prototype,"normalize",{value:function(a,b){if("string"!=typeof a)throw new TypeError("Module name must be a string");var c=a.split("/");if(0==c.length)throw new TypeError("No module name provided");var d=0,e=!1,f=0;if("."==c[0]){if(d++,d==c.length)throw new TypeError('Illegal module name "'+a+'"');e=!0}else{for(;".."==c[d];)if(d++,d==c.length)throw new TypeError('Illegal module name "'+a+'"');d&&(e=!0),f=d}for(var g=d;g<c.length;g++){var h=c[g];if(""==h||"."==h||".."==h)throw new TypeError('Illegal module name "'+a+'"')}if(!e)return a;{var i=[],j=(b||"").split("/");j.length-1-f}return i=i.concat(j.splice(0,j.length-1-f)),i=i.concat(c.splice(d,c.length-d)),i.join("/")},enumerable:!1,writable:!0}),$__Object$defineProperty(b.prototype,"locate",{value:function(a){var b,d=a.name,e="";for(var f in this.paths){var g=f.split("*");if(g.length>2)throw new TypeError("Only one wildcard in a path is permitted");if(1==g.length){if(d==f&&f.length>e.length){e=f;break}}else d.substr(0,g[0].length)==g[0]&&d.substr(d.length-g[1].length)==g[1]&&(e=f,b=d.substr(g[0].length,d.length-g[1].length-g[0].length))}var i=this.paths[e];return b&&(i=i.replace("*",b)),h&&(i=i.replace(/#/g,"%23")),c(this.baseURL,i)},enumerable:!1,writable:!0}),$__Object$defineProperty(b.prototype,"fetch",{value:function(a){var b=this;return new j(function(d,e){f(c(b.baseURL,a.address),function(a){d(a)},e)})},enumerable:!1,writable:!0}),b}(__global.LoaderPolyfill),m=new l;if("object"==typeof exports&&(module.exports=m),__global.System=m,h&&"undefined"!=typeof document.getElementsByTagName){var n=document.getElementsByTagName("script");n=n[n.length-1],"complete"===document.readyState?setTimeout(e):document.addEventListener&&(document.addEventListener("DOMContentLoaded",d,!1),window.addEventListener("load",d,!1)),n.getAttribute("data-init")&&window[n.getAttribute("data-init")]()}}()}("undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope?self:global); -//# sourceMappingURL=es6-module-loader-sans-promises.js.map \ No newline at end of file diff --git a/dist/es6-module-loader-sans-promises.js.map b/dist/es6-module-loader-sans-promises.js.map deleted file mode 100644 index 2510024..0000000 --- a/dist/es6-module-loader-sans-promises.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"es6-module-loader-sans-promises.js","sources":["es6-module-loader-sans-promises.src.js"],"names":["__global","__eval","__source","__load","eval","name","replace","e","message","load","address","$__Object$getPrototypeOf","Object","getPrototypeOf","obj","__proto__","$__Object$defineProperty","defineProperty","prop","opt","value","get","call","$__Object$create","create","o","props","F","prototype","hasOwnProperty","createLoad","status","linkSets","dependencies","metadata","loadModule","loader","options","Promise","asyncStartLoadPartwayThrough","step","moduleName","moduleMetadata","moduleSource","source","moduleAddress","requestLoad","request","refererName","refererAddress","resolve","loaderObj","normalize","then","modules","module","i","l","loads","length","push","proceedToLocate","proceedToFetch","locate","p","proceedToTranslate","fetch","translate","instantiate","instantiateResult","undefined","anonCnt","isDeclarative","transpile","transpiled","curSystem","System","curRegister","register","deps","declare","depsList","TypeError","execute","loadPromises","index","depLoad","key","concat","addLoadToLinkSet","all","updateLinkSetOnLoad","exc","exception","linkSetFailed","stepState","existingLoad","done","linkSet","createLinkSet","startingLoad","loadingCount","reject","j","d","doLink","error","link","_newModule","evaluated","finishLoad","abrupt","addToError","failed","indexOf","linkIndex","splice","globalLoadsIndex","trace","depMap","forEach","dep","map","kind","loadIndex","buildLinkageGroups","groups","groupIndex","loadDep","loadDepGroupIndex","doDynamicExecute","linkError","Module","curGroupDeclarative","group","linkDeclarativeModule","getOrCreateModuleRecord","moduleRecords","importers","moduleObj","registryEntry","locked","importerModule","importerIndex","setters","depName","depModule","evaluateLoadedModule","doEnsureEvaluated","doExecute","seen","err","ensureEvaluated","Error","preventExtensions","msg","Loader","this","_loader","importPromises","createImportPromise","promise","m","require","console","assert","Array","item","thisLen","constructor","define","delete","has","import","sourcePromise","newModule","configurable","enumerable","set","exports","Reflect","global","LoaderPolyfill","getTranspilerModule","globalName","default","g","__useDefault","traceurTranspile","traceur","traceurOptions","script","sourceMaps","filename","inputSourceMap","sourceMap","compiler","Compiler","doTraceurCompile","compile","babelTranspile","babel","babelOptions","code","ast","blacklist","transform","firstRun","transpiler","self","transpilerNormalized","curLoader","parseURI","url","String","match","href","protocol","authority","host","hostname","port","pathname","search","hash","removeDotSegments","input","output","pop","join","charAt","toAbsoluteURL","base","isWindows","slice","lastIndexOf","completed","document","removeEventListener","window","ready","scripts","getElementsByTagName","type","innerHTML","substr","setTimeout","fetchTextFromURL","isWorker","WorkerGlobalScope","isBrowser","process","platform","XMLHttpRequest","fulfill","xhr","responseText","statusText","sameDomain","doTimeout","domainCheck","exec","location","XDomainRequest","onload","onerror","ontimeout","onprogress","timeout","onreadystatechange","readyState","open","send","fs","readFile","data","SystemLoader","$__super","split","baseURL","substring","cwd","paths","*","Function","parentName","segments","rel","dotdots","segment","normalizedParts","parentParts","writable","wildcard","pathMatch","pathParts","outPath","curScript","addEventListener","getAttribute"],"mappings":"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"} \ No newline at end of file diff --git a/dist/es6-module-loader.js b/dist/es6-module-loader.js index 29ae7d8..b7a74e6 100644 --- a/dist/es6-module-loader.js +++ b/dist/es6-module-loader.js @@ -1,8 +1,8 @@ /* - * es6-module-loader v0.16.1 + * es6-module-loader v0.17.11 * https://github.com/ModuleLoader/es6-module-loader - * Copyright (c) 2015 Guy Bedford, Luke Hoban, Addy Osmani; Licensed MIT + * Copyright (c) 2016 Guy Bedford, Luke Hoban, Addy Osmani; Licensed MIT */ -!function(a){"object"==typeof exports?module.exports=a():"function"==typeof define&&define.amd?define(a):"undefined"!=typeof window?window.Promise=a():"undefined"!=typeof global?global.Promise=a():"undefined"!=typeof self&&(self.Promise=a())}(function(){var a;return function b(a,c,d){function e(g,h){if(!c[g]){if(!a[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);throw new Error("Cannot find module '"+g+"'")}var j=c[g]={exports:{}};a[g][0].call(j.exports,function(b){var c=a[g][1][b];return e(c?c:b)},j,j.exports,b,a,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g<d.length;g++)e(d[g]);return e}({1:[function(a,b){var c=a("../lib/decorators/unhandledRejection"),d=c(a("../lib/Promise"));b.exports="undefined"!=typeof global?global.Promise=d:"undefined"!=typeof self?self.Promise=d:d},{"../lib/Promise":2,"../lib/decorators/unhandledRejection":4}],2:[function(b,c){!function(a){"use strict";a(function(a){var b=a("./makePromise"),c=a("./Scheduler"),d=a("./env").asap;return b({scheduler:new c(d)})})}("function"==typeof a&&a.amd?a:function(a){c.exports=a(b)})},{"./Scheduler":3,"./env":5,"./makePromise":7}],3:[function(b,c){!function(a){"use strict";a(function(){function a(a){this._async=a,this._running=!1,this._queue=this,this._queueLen=0,this._afterQueue={},this._afterQueueLen=0;var b=this;this.drain=function(){b._drain()}}return a.prototype.enqueue=function(a){this._queue[this._queueLen++]=a,this.run()},a.prototype.afterQueue=function(a){this._afterQueue[this._afterQueueLen++]=a,this.run()},a.prototype.run=function(){this._running||(this._running=!0,this._async(this.drain))},a.prototype._drain=function(){for(var a=0;a<this._queueLen;++a)this._queue[a].run(),this._queue[a]=void 0;for(this._queueLen=0,this._running=!1,a=0;a<this._afterQueueLen;++a)this._afterQueue[a].run(),this._afterQueue[a]=void 0;this._afterQueueLen=0},a})}("function"==typeof a&&a.amd?a:function(a){c.exports=a()})},{}],4:[function(b,c){!function(a){"use strict";a(function(a){function b(a){throw a}function c(){}var d=a("../env").setTimer,e=a("../format");return function(a){function f(a){a.handled||(n.push(a),k("Potentially unhandled rejection ["+a.id+"] "+e.formatError(a.value)))}function g(a){var b=n.indexOf(a);b>=0&&(n.splice(b,1),l("Handled previous rejection ["+a.id+"] "+e.formatObject(a.value)))}function h(a,b){m.push(a,b),null===o&&(o=d(i,0))}function i(){for(o=null;m.length>0;)m.shift()(m.shift())}var j,k=c,l=c;"undefined"!=typeof console&&(j=console,k="undefined"!=typeof j.error?function(a){j.error(a)}:function(a){j.log(a)},l="undefined"!=typeof j.info?function(a){j.info(a)}:function(a){j.log(a)}),a.onPotentiallyUnhandledRejection=function(a){h(f,a)},a.onPotentiallyUnhandledRejectionHandled=function(a){h(g,a)},a.onFatalRejection=function(a){h(b,a.value)};var m=[],n=[],o=null;return a}})}("function"==typeof a&&a.amd?a:function(a){c.exports=a(b)})},{"../env":5,"../format":6}],5:[function(b,c){!function(a){"use strict";a(function(a){function b(){return"undefined"!=typeof process&&null!==process&&"function"==typeof process.nextTick}function c(){return"function"==typeof MutationObserver&&MutationObserver||"function"==typeof WebKitMutationObserver&&WebKitMutationObserver}function d(a){function b(){var a=c;c=void 0,a()}var c,d=document.createTextNode(""),e=new a(b);e.observe(d,{characterData:!0});var f=0;return function(a){c=a,d.data=f^=1}}var e,f="undefined"!=typeof setTimeout&&setTimeout,g=function(a,b){return setTimeout(a,b)},h=function(a){return clearTimeout(a)},i=function(a){return f(a,0)};if(b())i=function(a){return process.nextTick(a)};else if(e=c())i=d(e);else if(!f){var j=a,k=j("vertx");g=function(a,b){return k.setTimer(b,a)},h=k.cancelTimer,i=k.runOnLoop||k.runOnContext}return{setTimer:g,clearTimer:h,asap:i}})}("function"==typeof a&&a.amd?a:function(a){c.exports=a(b)})},{}],6:[function(b,c){!function(a){"use strict";a(function(){function a(a){var c="object"==typeof a&&null!==a&&a.stack?a.stack:b(a);return a instanceof Error?c:c+" (WARNING: non-Error used)"}function b(a){var b=String(a);return"[object Object]"===b&&"undefined"!=typeof JSON&&(b=c(a,b)),b}function c(a,b){try{return JSON.stringify(a)}catch(c){return b}}return{formatError:a,formatObject:b,tryStringify:c}})}("function"==typeof a&&a.amd?a:function(a){c.exports=a()})},{}],7:[function(b,c){!function(a){"use strict";a(function(){return function(a){function b(a,b){this._handler=a===t?b:c(a)}function c(a){function b(a){e.resolve(a)}function c(a){e.reject(a)}function d(a){e.notify(a)}var e=new v;try{a(b,c,d)}catch(f){c(f)}return e}function d(a){return I(a)?a:new b(t,new w(q(a)))}function e(a){return new b(t,new w(new z(a)))}function f(){return _}function g(){return new b(t,new v)}function h(a,b){var c=new v(a.receiver,a.join().context);return new b(t,c)}function i(a){return k(S,null,a)}function j(a,b){return k(N,a,b)}function k(a,c,d){function e(b,e,g){g.resolved||l(d,f,b,a(c,e,b),g)}function f(a,b,c){k[a]=b,0===--j&&c.become(new y(k))}for(var g,h="function"==typeof c?e:f,i=new v,j=d.length>>>0,k=new Array(j),m=0;m<d.length&&!i.resolved;++m)g=d[m],void 0!==g||m in d?l(d,h,m,g,i):--j;return 0===j&&i.become(new y(k)),new b(t,i)}function l(a,b,c,d,e){if(J(d)){var f=r(d),g=f.state();0===g?f.fold(b,c,void 0,e):g>0?b(c,f.value,e):(e.become(f),m(a,c+1,f))}else b(c,d,e)}function m(a,b,c){for(var d=b;d<a.length;++d)n(q(a[d]),c)}function n(a,b){if(a!==b){var c=a.state();0===c?a.visit(a,void 0,a._unreport):0>c&&a._unreport()}}function o(a){return"object"!=typeof a||null===a?e(new TypeError("non-iterable passed to race()")):0===a.length?f():1===a.length?d(a[0]):p(a)}function p(a){var c,d,e,f=new v;for(c=0;c<a.length;++c)if(d=a[c],void 0!==d||c in a){if(e=q(d),0!==e.state()){f.become(e),m(a,c+1,e);break}e.visit(f,f.resolve,f.reject)}return new b(t,f)}function q(a){return I(a)?a._handler.join():J(a)?s(a):new y(a)}function r(a){return I(a)?a._handler.join():s(a)}function s(a){try{var b=a.then;return"function"==typeof b?new x(b,a):new y(a)}catch(c){return new z(c)}}function t(){}function u(){}function v(a,c){b.createContext(this,c),this.consumers=void 0,this.receiver=a,this.handler=void 0,this.resolved=!1}function w(a){this.handler=a}function x(a,b){v.call(this),V.enqueue(new F(a,b,this))}function y(a){b.createContext(this),this.value=a}function z(a){b.createContext(this),this.id=++Z,this.value=a,this.handled=!1,this.reported=!1,this._report()}function A(a,b){this.rejection=a,this.context=b}function B(a){this.rejection=a}function C(){return new z(new TypeError("Promise cycle"))}function D(a,b){this.continuation=a,this.handler=b}function E(a,b){this.handler=b,this.value=a}function F(a,b,c){this._then=a,this.thenable=b,this.resolver=c}function G(a,b,c,d,e){try{a.call(b,c,d,e)}catch(f){d(f)}}function H(a,b,c,d){this.f=a,this.z=b,this.c=c,this.to=d,this.resolver=Y,this.receiver=this}function I(a){return a instanceof b}function J(a){return("object"==typeof a||"function"==typeof a)&&null!==a}function K(a,c,d,e){return"function"!=typeof a?e.become(c):(b.enterContext(c),O(a,c.value,d,e),void b.exitContext())}function L(a,c,d,e,f){return"function"!=typeof a?f.become(d):(b.enterContext(d),P(a,c,d.value,e,f),void b.exitContext())}function M(a,c,d,e,f){return"function"!=typeof a?f.notify(c):(b.enterContext(d),Q(a,c,e,f),void b.exitContext())}function N(a,b,c){try{return a(b,c)}catch(d){return e(d)}}function O(a,b,c,d){try{d.become(q(a.call(c,b)))}catch(e){d.become(new z(e))}}function P(a,b,c,d,e){try{a.call(d,b,c,e)}catch(f){e.become(new z(f))}}function Q(a,b,c,d){try{d.notify(a.call(c,b))}catch(e){d.notify(e)}}function R(a,b){b.prototype=X(a.prototype),b.prototype.constructor=b}function S(a,b){return b}function T(){}function U(){return"undefined"!=typeof process&&null!==process&&"function"==typeof process.emit?function(a,b){return"unhandledRejection"===a?process.emit(a,b.value,b):process.emit(a,b)}:"undefined"!=typeof self&&"function"==typeof CustomEvent?function(a,b,c){var d=!1;try{var e=new c("unhandledRejection");d=e instanceof c}catch(f){}return d?function(a,d){var e=new c(a,{detail:{reason:d.value,key:d},bubbles:!1,cancelable:!0});return!b.dispatchEvent(e)}:a}(T,self,CustomEvent):T}var V=a.scheduler,W=U(),X=Object.create||function(a){function b(){}return b.prototype=a,new b};b.resolve=d,b.reject=e,b.never=f,b._defer=g,b._handler=q,b.prototype.then=function(a,b,c){var d=this._handler,e=d.join().state();if("function"!=typeof a&&e>0||"function"!=typeof b&&0>e)return new this.constructor(t,d);var f=this._beget(),g=f._handler;return d.chain(g,d.receiver,a,b,c),f},b.prototype["catch"]=function(a){return this.then(void 0,a)},b.prototype._beget=function(){return h(this._handler,this.constructor)},b.all=i,b.race=o,b._traverse=j,b._visitRemaining=m,t.prototype.when=t.prototype.become=t.prototype.notify=t.prototype.fail=t.prototype._unreport=t.prototype._report=T,t.prototype._state=0,t.prototype.state=function(){return this._state},t.prototype.join=function(){for(var a=this;void 0!==a.handler;)a=a.handler;return a},t.prototype.chain=function(a,b,c,d,e){this.when({resolver:a,receiver:b,fulfilled:c,rejected:d,progress:e})},t.prototype.visit=function(a,b,c,d){this.chain(Y,a,b,c,d)},t.prototype.fold=function(a,b,c,d){this.when(new H(a,b,c,d))},R(t,u),u.prototype.become=function(a){a.fail()};var Y=new u;R(t,v),v.prototype._state=0,v.prototype.resolve=function(a){this.become(q(a))},v.prototype.reject=function(a){this.resolved||this.become(new z(a))},v.prototype.join=function(){if(!this.resolved)return this;for(var a=this;void 0!==a.handler;)if(a=a.handler,a===this)return this.handler=C();return a},v.prototype.run=function(){var a=this.consumers,b=this.handler;this.handler=this.handler.join(),this.consumers=void 0;for(var c=0;c<a.length;++c)b.when(a[c])},v.prototype.become=function(a){this.resolved||(this.resolved=!0,this.handler=a,void 0!==this.consumers&&V.enqueue(this),void 0!==this.context&&a._report(this.context))},v.prototype.when=function(a){this.resolved?V.enqueue(new D(a,this.handler)):void 0===this.consumers?this.consumers=[a]:this.consumers.push(a)},v.prototype.notify=function(a){this.resolved||V.enqueue(new E(a,this))},v.prototype.fail=function(a){var b="undefined"==typeof a?this.context:a;this.resolved&&this.handler.join().fail(b)},v.prototype._report=function(a){this.resolved&&this.handler.join()._report(a)},v.prototype._unreport=function(){this.resolved&&this.handler.join()._unreport()},R(t,w),w.prototype.when=function(a){V.enqueue(new D(a,this))},w.prototype._report=function(a){this.join()._report(a)},w.prototype._unreport=function(){this.join()._unreport()},R(v,x),R(t,y),y.prototype._state=1,y.prototype.fold=function(a,b,c,d){L(a,b,this,c,d)},y.prototype.when=function(a){K(a.fulfilled,this,a.receiver,a.resolver)};var Z=0;R(t,z),z.prototype._state=-1,z.prototype.fold=function(a,b,c,d){d.become(this)},z.prototype.when=function(a){"function"==typeof a.rejected&&this._unreport(),K(a.rejected,this,a.receiver,a.resolver)},z.prototype._report=function(a){V.afterQueue(new A(this,a))},z.prototype._unreport=function(){this.handled||(this.handled=!0,V.afterQueue(new B(this)))},z.prototype.fail=function(a){this.reported=!0,W("unhandledRejection",this),b.onFatalRejection(this,void 0===a?this.context:a)},A.prototype.run=function(){this.rejection.handled||this.rejection.reported||(this.rejection.reported=!0,W("unhandledRejection",this.rejection)||b.onPotentiallyUnhandledRejection(this.rejection,this.context))},B.prototype.run=function(){this.rejection.reported&&(W("rejectionHandled",this.rejection)||b.onPotentiallyUnhandledRejectionHandled(this.rejection))},b.createContext=b.enterContext=b.exitContext=b.onPotentiallyUnhandledRejection=b.onPotentiallyUnhandledRejectionHandled=b.onFatalRejection=T;var $=new t,_=new b(t,$);return D.prototype.run=function(){this.handler.join().when(this.continuation)},E.prototype.run=function(){var a=this.handler.consumers;if(void 0!==a)for(var b,c=0;c<a.length;++c)b=a[c],M(b.progress,this.value,this.handler,b.receiver,b.resolver)},F.prototype.run=function(){function a(a){d.resolve(a)}function b(a){d.reject(a)}function c(a){d.notify(a)}var d=this.resolver;G(this._then,this.thenable,a,b,c)},H.prototype.fulfilled=function(a){this.f.call(this.c,this.z,a,this.to)},H.prototype.rejected=function(a){this.to.reject(a)},H.prototype.progress=function(a){this.to.notify(a)},b}})}("function"==typeof a&&a.amd?a:function(a){c.exports=a()})},{}]},{},[1])(1)}),function(__global){function __eval(__source,__global,__load){try{eval('(function() { var __moduleName = "'+(__load.name||"").replace('"','"')+'"; '+__source+" \n }).call(__global);")}catch(e){throw("SyntaxError"==e.name||"TypeError"==e.name)&&(e.message="Evaluating "+(__load.name||load.address)+"\n "+e.message),e}}$__Object$getPrototypeOf=Object.getPrototypeOf||function(a){return a.__proto__};var $__Object$defineProperty;!function(){try{Object.defineProperty({},"a",{})&&($__Object$defineProperty=Object.defineProperty)}catch(a){$__Object$defineProperty=function(a,b,c){try{a[b]=c.value||c.get.call(a)}catch(d){}}}}(),$__Object$create=Object.create||function(a,b){function c(){}if(c.prototype=a,"object"==typeof b)for(prop in b)b.hasOwnProperty(prop)&&(c[prop]=b[prop]);return new c},function(){function a(a){return{status:"loading",name:a,linkSets:[],dependencies:[],metadata:{}}}function b(a,b,c){return new A(g({step:c.address?"fetch":"locate",loader:a,moduleName:b,moduleMetadata:c&&c.metadata||{},moduleSource:c.source,moduleAddress:c.address}))}function c(b,c,e,f){return new A(function(a){a(b.loaderObj.normalize(c,e,f))}).then(function(c){var e;if(b.modules[c])return e=a(c),e.status="linked",e.module=b.modules[c],e;for(var f=0,g=b.loads.length;g>f;f++)if(e=b.loads[f],e.name==c)return e;return e=a(c),b.loads.push(e),d(b,e),e})}function d(a,b){e(a,b,A.resolve().then(function(){return a.loaderObj.locate({name:b.name,metadata:b.metadata})}))}function e(a,b,c){f(a,b,c.then(function(c){return"loading"==b.status?(b.address=c,a.loaderObj.fetch({name:b.name,metadata:b.metadata,address:c})):void 0}))}function f(a,b,d){d.then(function(d){return"loading"==b.status?A.resolve(a.loaderObj.translate({name:b.name,metadata:b.metadata,address:b.address,source:d})).then(function(c){return b.source=c,a.loaderObj.instantiate({name:b.name,metadata:b.metadata,address:b.address,source:c})}).then(function(c){if(void 0===c)return b.address=b.address||"<Anonymous Module "+ ++D+">",b.isDeclarative=!0,a.loaderObj.transpile(b).then(function(a){var c=__global.System,d=c.register;c.register=function(a,c,d){"string"!=typeof a&&(d=c,c=a),b.declare=d,b.depsList=c},__eval(a,__global,b),c.register=d});if("object"!=typeof c)throw TypeError("Invalid instantiate return value");b.depsList=c.deps||[],b.execute=c.execute,b.isDeclarative=!1}).then(function(){b.dependencies=[];for(var d=b.depsList,e=[],f=0,g=d.length;g>f;f++)(function(d,f){e.push(c(a,d,b.name,b.address).then(function(a){if(b.dependencies[f]={key:d,value:a.name},"linked"!=a.status)for(var c=b.linkSets.concat([]),e=0,g=c.length;g>e;e++)i(c[e],a)}))})(d[f],f);return A.all(e)}).then(function(){b.status="loaded";for(var a=b.linkSets.concat([]),c=0,d=a.length;d>c;c++)k(a[c],b)}):void 0})["catch"](function(a){b.status="failed",b.exception=a;for(var c=b.linkSets.concat([]),d=0,e=c.length;e>d;d++)l(c[d],b,a)})}function g(b){return function(c){var g=b.loader,i=b.moduleName,j=b.step;if(g.modules[i])throw new TypeError('"'+i+'" already exists in the module table');for(var k,l=0,m=g.loads.length;m>l;l++)if(g.loads[l].name==i)return k=g.loads[l],"translate"!=j||k.source||(k.address=b.moduleAddress,f(g,k,A.resolve(b.moduleSource))),k.linkSets[0].done.then(function(){c(k)});var n=a(i);n.metadata=b.moduleMetadata;var o=h(g,n);g.loads.push(n),c(o.done),"locate"==j?d(g,n):"fetch"==j?e(g,n,A.resolve(b.moduleAddress)):(n.address=b.moduleAddress,f(g,n,A.resolve(b.moduleSource)))}}function h(a,b){var c={loader:a,loads:[],startingLoad:b,loadingCount:0};return c.done=new A(function(a,b){c.resolve=a,c.reject=b}),i(c,b),c}function i(a,b){for(var c=0,d=a.loads.length;d>c;c++)if(a.loads[c]==b)return;a.loads.push(b),b.linkSets.push(a),"loaded"!=b.status&&a.loadingCount++;for(var e=a.loader,c=0,d=b.dependencies.length;d>c;c++){var f=b.dependencies[c].value;if(!e.modules[f])for(var g=0,h=e.loads.length;h>g;g++)if(e.loads[g].name==f){i(a,e.loads[g]);break}}}function j(a){var b=!1;try{p(a,function(c,d){l(a,c,d),b=!0})}catch(c){l(a,null,c),b=!0}return b}function k(a,b){if(a.loadingCount--,!(a.loadingCount>0)){var c=a.startingLoad;if(a.loader.loaderObj.execute===!1){for(var d=[].concat(a.loads),e=0,f=d.length;f>e;e++){var b=d[e];b.module=b.isDeclarative?{name:b.name,module:E({}),evaluated:!0}:{module:E({})},b.status="linked",m(a.loader,b)}return a.resolve(c)}var g=j(a);g||a.resolve(c)}}function l(a,b,c){var d=a.loader;a.loads[0].name!=b.name&&(c=w(c,'Error loading "'+b.name+'" from "'+a.loads[0].name+'" at '+(a.loads[0].address||"<unknown>")+"\n")),c=w(c,'Error loading "'+b.name+'" at '+(b.address||"<unknown>")+"\n");for(var e=a.loads.concat([]),f=0,g=e.length;g>f;f++){var b=e[f];d.loaderObj.failed=d.loaderObj.failed||[],-1==B.call(d.loaderObj.failed,b)&&d.loaderObj.failed.push(b);var h=B.call(b.linkSets,a);if(b.linkSets.splice(h,1),0==b.linkSets.length){var i=B.call(a.loader.loads,b);-1!=i&&a.loader.loads.splice(i,1)}}a.reject(c)}function m(a,b){if(a.loaderObj.trace){a.loaderObj.loads||(a.loaderObj.loads={});var c={};b.dependencies.forEach(function(a){c[a.key]=a.value}),a.loaderObj.loads[b.name]={name:b.name,deps:b.dependencies.map(function(a){return a.key}),depMap:c,address:b.address,metadata:b.metadata,source:b.source,kind:b.isDeclarative?"declarative":"dynamic"}}b.name&&(a.modules[b.name]=b.module);var d=B.call(a.loads,b);-1!=d&&a.loads.splice(d,1);for(var e=0,f=b.linkSets.length;f>e;e++)d=B.call(b.linkSets[e].loads,b),-1!=d&&b.linkSets[e].loads.splice(d,1);b.linkSets.splice(0,b.linkSets.length)}function n(a,b,c){if(c[a.groupIndex]=c[a.groupIndex]||[],-1==B.call(c[a.groupIndex],a)){c[a.groupIndex].push(a);for(var d=0,e=b.length;e>d;d++)for(var f=b[d],g=0;g<a.dependencies.length;g++)if(f.name==a.dependencies[g].value){var h=a.groupIndex+(f.isDeclarative!=a.isDeclarative);if(void 0===f.groupIndex||f.groupIndex<h){if(void 0!==f.groupIndex&&(c[f.groupIndex].splice(B.call(c[f.groupIndex],f),1),0==c[f.groupIndex].length))throw new TypeError("Mixed dependency cycle detected");f.groupIndex=h}n(f,b,c)}}}function o(a,b,c){try{var d=b.execute()}catch(e){return void c(b,e)}return d&&d instanceof y?d:void c(b,new TypeError("Execution must define a Module instance"))}function p(a,b){var c=a.loader;if(a.loads.length){var d=[],e=a.loads[0];e.groupIndex=0,n(e,a.loads,d);for(var f=e.isDeclarative==d.length%2,g=d.length-1;g>=0;g--){for(var h=d[g],i=0;i<h.length;i++){var j=h[i];if(f)r(j,a.loads,c);else{var k=o(a,j,b);if(!k)return;j.module={name:j.name,module:k},j.status="linked"}m(c,j)}f=!f}}}function q(a,b){var c=b.moduleRecords;return c[a]||(c[a]={name:a,dependencies:[],module:new y,importers:[]})}function r(a,b,c){if(!a.module){var d=a.module=q(a.name,c),e=a.module.module,f=a.declare.call(__global,function(a,b){d.locked=!0,e[a]=b;for(var c=0,f=d.importers.length;f>c;c++){var g=d.importers[c];if(!g.locked){var h=B.call(g.dependencies,d);g.setters[h](e)}}return d.locked=!1,b});d.setters=f.setters,d.execute=f.execute;for(var g=0,h=a.dependencies.length;h>g;g++){var i=a.dependencies[g].value,j=c.modules[i];if(!j)for(var k=0;k<b.length;k++)b[k].name==i&&(b[k].module?j=q(i,c):(r(b[k],b,c),j=b[k].module));j.importers?(d.dependencies.push(j),j.importers.push(d)):d.dependencies.push(null),d.setters[g]&&d.setters[g](j.module)}a.status="linked"}}function s(a,b){return u(b.module,[],a),b.module.module}function t(a){try{a.execute.call(__global)}catch(b){return b}}function u(a,b,c){var d=v(a,b,c);if(d)throw d}function v(a,b,c){if(!a.evaluated&&a.dependencies){b.push(a);for(var d,e=a.dependencies,f=0,g=e.length;g>f;f++){var h=e[f];if(h&&-1==B.call(b,h)&&(d=v(h,b,c)))return d=w(d,"Error evaluating "+h.name+"\n")}if(a.failed)return new Error("Module failed execution.");if(!a.evaluated)return a.evaluated=!0,d=t(a),d?a.failed=!0:Object.preventExtensions&&Object.preventExtensions(a.module),a.execute=void 0,d}}function w(a,b){return a instanceof Error?a.message=b+a.message:a=b+a,a}function x(a){if("object"!=typeof a)throw new TypeError("Options must be an object");a.normalize&&(this.normalize=a.normalize),a.locate&&(this.locate=a.locate),a.fetch&&(this.fetch=a.fetch),a.translate&&(this.translate=a.translate),a.instantiate&&(this.instantiate=a.instantiate),this._loader={loaderObj:this,loads:[],modules:{},importPromises:{},moduleRecords:{}},C(this,"global",{get:function(){return __global}})}function y(){}function z(a,b,c){var d=a._loader.importPromises;return d[b]=c.then(function(a){return d[b]=void 0,a},function(a){throw d[b]=void 0,a})}var A=__global.Promise||require("when/es6-shim/Promise");__global.console&&(console.assert=console.assert||function(){});var B=Array.prototype.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},C=$__Object$defineProperty,D=0;x.prototype={constructor:x,define:function(a,b,c){if(this._loader.importPromises[a])throw new TypeError("Module is already loading.");return z(this,a,new A(g({step:"translate",loader:this._loader,moduleName:a,moduleMetadata:c&&c.metadata||{},moduleSource:b,moduleAddress:c&&c.address})))},"delete":function(a){var b=this._loader;return delete b.importPromises[a],delete b.moduleRecords[a],b.modules[a]?delete b.modules[a]:!1},get:function(a){return this._loader.modules[a]?(u(this._loader.modules[a],[],this),this._loader.modules[a].module):void 0},has:function(a){return!!this._loader.modules[a]},"import":function(a,c){var d=this;return A.resolve(d.normalize(a,c&&c.name,c&&c.address)).then(function(a){var e=d._loader;return e.modules[a]?(u(e.modules[a],[],e._loader),e.modules[a].module):e.importPromises[a]||z(d,a,b(e,a,c||{}).then(function(b){return delete e.importPromises[a],s(e,b)}))})},load:function(a){return this._loader.modules[a]?(u(this._loader.modules[a],[],this._loader),A.resolve(this._loader.modules[a].module)):this._loader.importPromises[a]||z(this,a,b(this._loader,a,{}))},module:function(b,c){var d=a();d.address=c&&c.address;var e=h(this._loader,d),g=A.resolve(b),i=this._loader,j=e.done.then(function(){return s(i,d)});return f(i,d,g),j},newModule:function(a){if("object"!=typeof a)throw new TypeError("Expected object");var b=new y;for(var c in a)!function(c){C(b,c,{configurable:!1,enumerable:!0,get:function(){return a[c]}})}(c);return Object.preventExtensions&&Object.preventExtensions(b),b},set:function(a,b){if(!(b instanceof y))throw new TypeError("Loader.set("+a+", module) must be a module");this._loader.modules[a]={module:b}},normalize:function(a){return a},locate:function(a){return a.name},fetch:function(){throw new TypeError("Fetch not implemented")},translate:function(a){return a.source},instantiate:function(){}};var E=x.prototype.newModule;"object"==typeof exports&&(module.exports=x),__global.Reflect=__global.Reflect||{},__global.Reflect.Loader=__global.Reflect.Loader||x,__global.Reflect.global=__global.Reflect.global||__global,__global.LoaderPolyfill=x}(),function(a){function b(a,b){return a.newModule({"default":f[b],__useDefault:!0})}function c(a,b){var c=this.traceurOptions||{};c.modules="instantiate",c.script=!1,c.sourceMaps="inline",c.filename=a.address,c.inputSourceMap=a.metadata.sourceMap,c.moduleName=!1;var e=new b.Compiler(c),f=d(a.source,e,c.filename);return f+="!eval"}function d(a,b,c){try{return b.compile(a,c)}catch(d){throw d[0]}}function e(a,b){var c=this.babelOptions||{};c.modules="system",c.sourceMap="inline",c.filename=a.address,c.code=!0,c.ast=!1,c.blacklist||(c.blacklist=["react"]);var d=b.transform(a.source,c).code;return d+"\n//# sourceURL="+a.address+"!eval"}var f=__global,g=!0;a.prototype.transpiler="traceur",a.prototype.transpile=function(a){var d=this;return g&&(f.traceur&&!d.has("traceur")&&d.set("traceur",b(d,"traceur")),f.babel&&!d.has("babel")&&d.set("babel",b(d,"babel")),g=!1),d["import"](d.transpiler).then(function(b){return b.__useDefault&&(b=b["default"]),'var __moduleAddress = "'+a.address+'";'+(b.Compiler?c:e).call(d,a,b)})},a.prototype.instantiate=function(a){var c=this;return Promise.resolve(c.normalize(c.transpiler)).then(function(d){return a.name===d?{deps:[],execute:function(){var d=f.System,e=f.Reflect.Loader;return __eval("(function(require,exports,module){"+a.source+"})();",f,a),f.System=d,f.Reflect.Loader=e,b(c,a.name)}}:void 0})}}(__global.LoaderPolyfill),function(){function a(a){var b=String(a).replace(/^\s+|\s+$/g,"").match(/^([^:\/?#]+:)?(\/\/(?:[^:@\/?#]*(?::[^:@\/?#]*)?@)?(([^:\/?#]*)(?::(\d*))?))?([^?#]*)(\?[^#]*)?(#[\s\S]*)?/);return b?{href:b[0]||"",protocol:b[1]||"",authority:b[2]||"",host:b[3]||"",hostname:b[4]||"",port:b[5]||"",pathname:b[6]||"",search:b[7]||"",hash:b[8]||""}:null}function b(a){var b=[];return a.replace(/^(\.\.?(\/|$))+/,"").replace(/\/(\.(\/|$))+/g,"/").replace(/\/\.\.$/,"/../").replace(/\/?[^\/]*/g,function(a){"/.."===a?b.pop():b.push(a)}),b.join("").replace(/^\//,"/"===a.charAt(0)?"/":"")}function c(c,d){return i&&(d=d.replace(/\\/g,"/")),d=a(d||""),c=a(c||""),d&&c?(d.protocol||c.protocol)+(d.protocol||d.authority?d.authority:c.authority)+b(d.protocol||d.authority||"/"===d.pathname.charAt(0)?d.pathname:d.pathname?(c.authority&&!c.pathname?"/":"")+c.pathname.slice(0,c.pathname.lastIndexOf("/")+1)+d.pathname:c.pathname)+(d.protocol||d.authority||d.pathname?d.search:d.search||c.search)+d.hash:null}function d(){document.removeEventListener("DOMContentLoaded",d,!1),window.removeEventListener("load",d,!1),e()}function e(){for(var a=document.getElementsByTagName("script"),b=0;b<a.length;b++){var c=a[b];if("module"==c.type){var d=c.innerHTML.substr(1);__global.System.module(d)["catch"](function(a){setTimeout(function(){throw a})})}}}var f,g="undefined"!=typeof self&&"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope,h="undefined"!=typeof window&&!g,i="undefined"!=typeof process&&!!process.platform.match(/^win/),j=__global.Promise||require("when/es6-shim/Promise");if("undefined"!=typeof XMLHttpRequest)f=function(a,b,c){function d(){b(f.responseText)}function e(){c(f.statusText+": "+a||"XHR error")}var f=new XMLHttpRequest,g=!0,h=!1;if(!("withCredentials"in f)){var i=/^(\w+:)?\/\/([^\/]+)/.exec(a);i&&(g=i[2]===window.location.host,i[1]&&(g&=i[1]===window.location.protocol))}g||"undefined"==typeof XDomainRequest||(f=new XDomainRequest,f.onload=d,f.onerror=e,f.ontimeout=e,f.onprogress=function(){},f.timeout=0,h=!0),f.onreadystatechange=function(){4===f.readyState&&(200===f.status||0==f.status&&f.responseText?d():e())},f.open("GET",a,!0),h&&setTimeout(function(){f.send()},0),f.send(null)};else{if("undefined"==typeof require)throw new TypeError("No environment fetch API available.");var k;f=function(a,b,c){if("file:"!=a.substr(0,5))throw"Only file URLs of the form file: allowed running in Node.";return k=k||require("fs"),a=a.substr(5),i&&(a=a.replace(/\//g,"\\")),k.readFile(a,function(a,d){return a?c(a):void b(d+"")})}}var l=function(a){function b(b){if(a.call(this,b||{}),"undefined"!=typeof location&&location.href){var c=__global.location.href.split("#")[0].split("?")[0];this.baseURL=c.substring(0,c.lastIndexOf("/")+1)}else{if("undefined"==typeof process||!process.cwd)throw new TypeError("No environment baseURL");this.baseURL="file:"+process.cwd()+"/",i&&(this.baseURL=this.baseURL.replace(/\\/g,"/"))}this.paths={"*":"*.js"}}return b.__proto__=null!==a?a:Function.prototype,b.prototype=$__Object$create(null!==a?a.prototype:null),$__Object$defineProperty(b.prototype,"constructor",{value:b}),$__Object$defineProperty(b.prototype,"global",{get:function(){return h?window:g?self:__global},enumerable:!1}),$__Object$defineProperty(b.prototype,"strict",{get:function(){return!0},enumerable:!1}),$__Object$defineProperty(b.prototype,"normalize",{value:function(a,b){if("string"!=typeof a)throw new TypeError("Module name must be a string");var c=a.split("/");if(0==c.length)throw new TypeError("No module name provided");var d=0,e=!1,f=0;if("."==c[0]){if(d++,d==c.length)throw new TypeError('Illegal module name "'+a+'"');e=!0}else{for(;".."==c[d];)if(d++,d==c.length)throw new TypeError('Illegal module name "'+a+'"');d&&(e=!0),f=d}for(var g=d;g<c.length;g++){var h=c[g];if(""==h||"."==h||".."==h)throw new TypeError('Illegal module name "'+a+'"')}if(!e)return a;{var i=[],j=(b||"").split("/");j.length-1-f}return i=i.concat(j.splice(0,j.length-1-f)),i=i.concat(c.splice(d,c.length-d)),i.join("/")},enumerable:!1,writable:!0}),$__Object$defineProperty(b.prototype,"locate",{value:function(a){var b,d=a.name,e="";for(var f in this.paths){var g=f.split("*");if(g.length>2)throw new TypeError("Only one wildcard in a path is permitted");if(1==g.length){if(d==f&&f.length>e.length){e=f;break}}else d.substr(0,g[0].length)==g[0]&&d.substr(d.length-g[1].length)==g[1]&&(e=f,b=d.substr(g[0].length,d.length-g[1].length-g[0].length))}var i=this.paths[e];return b&&(i=i.replace("*",b)),h&&(i=i.replace(/#/g,"%23")),c(this.baseURL,i)},enumerable:!1,writable:!0}),$__Object$defineProperty(b.prototype,"fetch",{value:function(a){var b=this;return new j(function(d,e){f(c(b.baseURL,a.address),function(a){d(a)},e)})},enumerable:!1,writable:!0}),b}(__global.LoaderPolyfill),m=new l;if("object"==typeof exports&&(module.exports=m),__global.System=m,h&&"undefined"!=typeof document.getElementsByTagName){var n=document.getElementsByTagName("script");n=n[n.length-1],"complete"===document.readyState?setTimeout(e):document.addEventListener&&(document.addEventListener("DOMContentLoaded",d,!1),window.addEventListener("load",d,!1)),n.getAttribute("data-init")&&window[n.getAttribute("data-init")]()}}()}("undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope?self:global); +!function(a){function b(a,c){if("string"!=typeof a)throw new TypeError("URL must be a string");var d=String(a).replace(/^\s+|\s+$/g,"").match(/^([^:\/?#]+:)?(?:\/\/(?:([^:@\/?#]*)(?::([^:@\/?#]*))?@)?(([^:\/?#]*)(?::(\d*))?))?([^?#]*)(\?[^#]*)?(#[\s\S]*)?/);if(!d)throw new RangeError("Invalid URL format");var e=d[1]||"",f=d[2]||"",g=d[3]||"",h=d[4]||"",i=d[5]||"",j=d[6]||"",k=d[7]||"",l=d[8]||"",m=d[9]||"";if(void 0!==c){var n=c instanceof b?c:new b(c),o=!e&&!h&&!f;!o||k||l||(l=n.search),o&&"/"!==k[0]&&(k=k?(!n.host&&!n.username||n.pathname?"":"/")+n.pathname.slice(0,n.pathname.lastIndexOf("/")+1)+k:n.pathname);var p=[];k.replace(/^(\.\.?(\/|$))+/,"").replace(/\/(\.(\/|$))+/g,"/").replace(/\/\.\.$/,"/../").replace(/\/?[^\/]*/g,function(a){"/.."===a?p.pop():p.push(a)}),k=p.join("").replace(/^\//,"/"===k[0]?"/":""),o&&(j=n.port,i=n.hostname,h=n.host,g=n.password,f=n.username),e||(e=n.protocol)}"file:"==e&&(k=k.replace(/\\/g,"/")),this.origin=h?e+(""!==e||""!==h?"//":"")+h:"",this.href=e+(e&&h||"file:"==e?"//":"")+(""!==f?f+(""!==g?":"+g:"")+"@":"")+h+k+l+m,this.protocol=e,this.username=f,this.password=g,this.host=h,this.hostname=i,this.port=j,this.pathname=k,this.search=l,this.hash=m}a.URLPolyfill=b}("undefined"!=typeof self?self:global),function(a){function b(a,b){return a instanceof Error?(a.message=b+"\n "+a.message,Error.call(a,a.message)):a=b+"\n "+a,a}function c(a,c,d){try{new Function(a).call(d)}catch(e){throw b(e,"Evaluating "+c)}}function d(){}function e(b){this._loader={loaderObj:this,loads:[],modules:{},importPromises:{},moduleRecords:{}},j(this,"global",{get:function(){return a}})}function f(){e.call(this),this.paths={}}function g(a,b){var c,d="",e=0;for(var f in a){var g=f.split("*");if(g.length>2)throw new TypeError("Only one wildcard in a path is permitted");if(1==g.length){if(b==f)return a[f];if(b.substr(0,f.length-1)==f.substr(0,f.length-1)&&(b.length<f.length||b[f.length-1]==f[f.length-1])&&"/"==a[f][a[f].length-1])return a[f].substr(0,a[f].length-1)+(b.length>f.length?"/"+b.substr(f.length):"")}else{var h=g[0].length;h>=e&&b.substr(0,g[0].length)==g[0]&&b.substr(b.length-g[1].length)==g[1]&&(e=h,d=f,c=b.substr(g[0].length,b.length-g[1].length-g[0].length))}}var i=a[d];return"string"==typeof c&&(i=i.replace("*",c)),i}function h(){}var i=("undefined"==typeof window&&"undefined"!=typeof self&&"undefined"!=typeof importScripts,"undefined"!=typeof window&&"undefined"!=typeof document,"undefined"!=typeof process&&"undefined"!=typeof process.platform&&!!process.platform.match(/^win/));a.console||(a.console={assert:function(){}});var j,k=Array.prototype.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1};!function(){try{Object.defineProperty({},"a",{})&&(j=Object.defineProperty)}catch(a){j=function(a,b,c){try{a[b]=c.value||c.get.call(a)}catch(d){}}}}();var l;if("undefined"!=typeof document&&document.getElementsByTagName){if(l=document.baseURI,!l){var m=document.getElementsByTagName("base");l=m[0]&&m[0].href||window.location.href}l=l.split("#")[0].split("?")[0],l=l.substr(0,l.lastIndexOf("/")+1)}else if("undefined"!=typeof process&&process.cwd)l="file://"+(i?"/":"")+process.cwd()+"/",i&&(l=l.replace(/\\/g,"/"));else{if("undefined"==typeof location)throw new TypeError("No environment baseURI");l=a.location.href}var n=a.URLPolyfill||a.URL;j(d.prototype,"toString",{value:function(){return"Module"}}),function(){function f(a){return{status:"loading",name:a,linkSets:[],dependencies:[],metadata:{}}}function g(a,b,c){return new Promise(n({step:c.address?"fetch":"locate",loader:a,moduleName:b,moduleMetadata:c&&c.metadata||{},moduleSource:c.source,moduleAddress:c.address}))}function h(a,b,c,d){return new Promise(function(e,f){e(a.loaderObj.normalize(b,c,d))}).then(function(b){var c;if(a.modules[b])return c=f(b),c.status="linked",c.module=a.modules[b],c;for(var d=0,e=a.loads.length;e>d;d++)if(c=a.loads[d],c.name==b)return c;return c=f(b),a.loads.push(c),i(a,c),c})}function i(a,b){l(a,b,Promise.resolve().then(function(){return a.loaderObj.locate({name:b.name,metadata:b.metadata})}))}function l(a,b,c){m(a,b,c.then(function(c){return"loading"==b.status?(b.address=c,a.loaderObj.fetch({name:b.name,metadata:b.metadata,address:c})):void 0}))}function m(b,d,e){e.then(function(e){return"loading"==d.status?Promise.resolve(b.loaderObj.translate({name:d.name,metadata:d.metadata,address:d.address,source:e})).then(function(a){return d.source=a,b.loaderObj.instantiate({name:d.name,metadata:d.metadata,address:d.address,source:a})}).then(function(e){if(void 0===e)return d.address=d.address||"<Anonymous Module "+ ++A+">",d.isDeclarative=!0,z.call(b.loaderObj,d).then(function(b){var e=a.System,f=e.register;e.register=function(a,b,c){"string"!=typeof a&&(c=b,b=a),d.declare=c,d.depsList=b},c(b,d.address,{}),e.register=f});if("object"!=typeof e)throw TypeError("Invalid instantiate return value");d.depsList=e.deps||[],d.execute=e.execute,d.isDeclarative=!1}).then(function(){d.dependencies=[];for(var a=d.depsList,c=[],e=0,f=a.length;f>e;e++)(function(a,e){c.push(h(b,a,d.name,d.address).then(function(b){if(d.dependencies[e]={key:a,value:b.name},"linked"!=b.status)for(var c=d.linkSets.concat([]),f=0,g=c.length;g>f;f++)p(c[f],b)}))})(a[e],e);return Promise.all(c)}).then(function(){d.status="loaded";for(var a=d.linkSets.concat([]),b=0,c=a.length;c>b;b++)r(a[b],d)}):void 0})["catch"](function(a){d.status="failed",d.exception=a;for(var b=d.linkSets.concat([]),c=0,e=b.length;e>c;c++)s(b[c],d,a)})}function n(a){return function(b,c){var d=a.loader,e=a.moduleName,g=a.step;if(d.modules[e])throw new TypeError('"'+e+'" already exists in the module table');for(var h,j=0,k=d.loads.length;k>j;j++)if(d.loads[j].name==e&&(h=d.loads[j],"translate"!=g||h.source||(h.address=a.moduleAddress,m(d,h,Promise.resolve(a.moduleSource))),h.linkSets.length&&h.linkSets[0].loads[0].name==h.name))return h.linkSets[0].done.then(function(){b(h)});var n=h||f(e);n.metadata=a.moduleMetadata;var p=o(d,n);d.loads.push(n),b(p.done),"locate"==g?i(d,n):"fetch"==g?l(d,n,Promise.resolve(a.moduleAddress)):(n.address=a.moduleAddress,m(d,n,Promise.resolve(a.moduleSource)))}}function o(a,b){var c={loader:a,loads:[],startingLoad:b,loadingCount:0};return c.done=new Promise(function(a,b){c.resolve=a,c.reject=b}),p(c,b),c}function p(a,b){if("failed"!=b.status){for(var c=0,d=a.loads.length;d>c;c++)if(a.loads[c]==b)return;a.loads.push(b),b.linkSets.push(a),"loaded"!=b.status&&a.loadingCount++;for(var e=a.loader,c=0,d=b.dependencies.length;d>c;c++)if(b.dependencies[c]){var f=b.dependencies[c].value;if(!e.modules[f])for(var g=0,h=e.loads.length;h>g;g++)if(e.loads[g].name==f){p(a,e.loads[g]);break}}}}function q(a){var b=!1;try{w(a,function(c,d){s(a,c,d),b=!0})}catch(c){s(a,null,c),b=!0}return b}function r(a,b){if(a.loadingCount--,!(a.loadingCount>0)){var c=a.startingLoad;if(a.loader.loaderObj.execute===!1){for(var d=[].concat(a.loads),e=0,f=d.length;f>e;e++){var b=d[e];b.module=b.isDeclarative?{name:b.name,module:B({}),evaluated:!0}:{module:B({})},b.status="linked",t(a.loader,b)}return a.resolve(c)}var g=q(a);g||a.resolve(c)}}function s(a,c,d){var e=a.loader;a:if(c)if(a.loads[0].name==c.name)d=b(d,"Error loading "+c.name);else{for(var f=0;f<a.loads.length;f++)for(var g=a.loads[f],h=0;h<g.dependencies.length;h++){var i=g.dependencies[h];if(i.value==c.name){d=b(d,"Error loading "+c.name+' as "'+i.key+'" from '+g.name);break a}}d=b(d,"Error loading "+c.name+" from "+a.loads[0].name)}else d=b(d,"Error linking "+a.loads[0].name);for(var j=a.loads.concat([]),f=0,l=j.length;l>f;f++){var c=j[f];e.loaderObj.failed=e.loaderObj.failed||[],-1==k.call(e.loaderObj.failed,c)&&e.loaderObj.failed.push(c);var m=k.call(c.linkSets,a);if(c.linkSets.splice(m,1),0==c.linkSets.length){var n=k.call(a.loader.loads,c);-1!=n&&a.loader.loads.splice(n,1)}}a.reject(d)}function t(a,b){if(a.loaderObj.trace){a.loaderObj.loads||(a.loaderObj.loads={});var c={};b.dependencies.forEach(function(a){c[a.key]=a.value}),a.loaderObj.loads[b.name]={name:b.name,deps:b.dependencies.map(function(a){return a.key}),depMap:c,address:b.address,metadata:b.metadata,source:b.source,kind:b.isDeclarative?"declarative":"dynamic"}}b.name&&(a.modules[b.name]=b.module);var d=k.call(a.loads,b);-1!=d&&a.loads.splice(d,1);for(var e=0,f=b.linkSets.length;f>e;e++)d=k.call(b.linkSets[e].loads,b),-1!=d&&b.linkSets[e].loads.splice(d,1);b.linkSets.splice(0,b.linkSets.length)}function u(a,b,c){try{var e=b.execute()}catch(f){return void c(b,f)}return e&&e instanceof d?e:void c(b,new TypeError("Execution must define a Module instance"))}function v(a,b,c){var d=a._loader.importPromises;return d[b]=c.then(function(a){return d[b]=void 0,a},function(a){throw d[b]=void 0,a})}function w(a,b){var c=a.loader;if(a.loads.length)for(var d=a.loads.concat([]),e=0;e<d.length;e++){var f=d[e],g=u(a,f,b);if(!g)return;f.module={name:f.name,module:g},f.status="linked",t(c,f)}}function x(a,b){return b.module.module}function y(){}function z(){throw new TypeError("ES6 transpilation is only provided in the dev module loader build.")}var A=0;e.prototype={constructor:e,define:function(a,b,c){if(this._loader.importPromises[a])throw new TypeError("Module is already loading.");return v(this,a,new Promise(n({step:"translate",loader:this._loader,moduleName:a,moduleMetadata:c&&c.metadata||{},moduleSource:b,moduleAddress:c&&c.address})))},"delete":function(a){var b=this._loader;return delete b.importPromises[a],delete b.moduleRecords[a],b.modules[a]?delete b.modules[a]:!1},get:function(a){return this._loader.modules[a]?(y(this._loader.modules[a],[],this),this._loader.modules[a].module):void 0},has:function(a){return!!this._loader.modules[a]},"import":function(a,b,c){"object"==typeof b&&(b=b.name);var d=this;return Promise.resolve(d.normalize(a,b)).then(function(a){var b=d._loader;return b.modules[a]?(y(b.modules[a],[],b._loader),b.modules[a].module):b.importPromises[a]||v(d,a,g(b,a,{}).then(function(c){return delete b.importPromises[a],x(b,c)}))})},load:function(a){var b=this._loader;return b.modules[a]?Promise.resolve():b.importPromises[a]||v(this,a,new Promise(n({step:"locate",loader:b,moduleName:a,moduleMetadata:{},moduleSource:void 0,moduleAddress:void 0})).then(function(){delete b.importPromises[a]}))},module:function(a,b){var c=f();c.address=b&&b.address;var d=o(this._loader,c),e=Promise.resolve(a),g=this._loader,h=d.done.then(function(){return x(g,c)});return m(g,c,e),h},newModule:function(a){if("object"!=typeof a)throw new TypeError("Expected object");var b=new d,c=[];if(Object.getOwnPropertyNames&&null!=a)c=Object.getOwnPropertyNames(a);else for(var e in a)c.push(e);for(var f=0;f<c.length;f++)(function(c){j(b,c,{configurable:!1,enumerable:!0,get:function(){return a[c]},set:function(){throw new Error("Module exports cannot be changed externally.")}})})(c[f]);return Object.freeze&&Object.freeze(b),b},set:function(a,b){if(!(b instanceof d))throw new TypeError("Loader.set("+a+", module) must be a module");this._loader.modules[a]={module:b}},normalize:function(a,b,c){return a},locate:function(a){return a.name},fetch:function(a){},translate:function(a){return a.source},instantiate:function(a){}};var B=e.prototype.newModule}();var o;h.prototype=e.prototype,f.prototype=new h;var p=/^([^\/]+:\/\/|\/)/;f.prototype.normalize=function(a,b,c){return a=a.match(p)||"."==a[0]?new n(a,b||l).href:new n(g(this.paths,a)||a,l).href},f.prototype.locate=function(a){return a.name},f.prototype.instantiate=function(b){var d=this;return Promise.resolve(d.normalize(d.transpiler)).then(function(e){return b.address===e?{deps:[],execute:function(){var e=a.System,f=a.Reflect.Loader;return c("(function(require,exports,module){"+b.source+"})();",b.address,a),a.System=e,a.Reflect.Loader=f,d.newModule({"default":a[d.transpiler],__useDefault:!0})}}:void 0})};var q;if("undefined"!=typeof XMLHttpRequest)q=function(a,b,c,d){function e(){c(g.responseText)}function f(){d(new Error("XHR error"+(g.status?" ("+g.status+(g.statusText?" "+g.statusText:"")+")":"")+" loading "+a))}var g=new XMLHttpRequest,h=!0,i=!1;if(!("withCredentials"in g)){var j=/^(\w+:)?\/\/([^\/]+)/.exec(a);j&&(h=j[2]===window.location.host,j[1]&&(h&=j[1]===window.location.protocol))}h||"undefined"==typeof XDomainRequest||(g=new XDomainRequest,g.onload=e,g.onerror=f,g.ontimeout=f,g.onprogress=function(){},g.timeout=0,i=!0),g.onreadystatechange=function(){4===g.readyState&&(0==g.status?g.responseText?e():(g.addEventListener("error",f),g.addEventListener("load",e)):200===g.status?e():f())},g.open("GET",a,!0),g.setRequestHeader&&(g.setRequestHeader("Accept","application/x-es-module, */*"),b&&("string"==typeof b&&g.setRequestHeader("Authorization",b),g.withCredentials=!0)),i?setTimeout(function(){g.send()},0):g.send(null)};else if("undefined"!=typeof require&&"undefined"!=typeof process){var r;q=function(a,b,c,d){if("file:///"!=a.substr(0,8))throw new Error('Unable to fetch "'+a+'". Only file URLs of the form file:/// allowed running in Node.');return r=r||require("fs"),a=i?a.replace(/\//g,"\\").substr(8):a.substr(7),r.readFile(a,function(a,b){if(a)return d(a);var e=b+"";"\ufeff"===e[0]&&(e=e.substr(1)),c(e)})}}else{if("undefined"==typeof self||"undefined"==typeof self.fetch)throw new TypeError("No environment fetch API available.");q=function(a,b,c,d){var e={headers:{Accept:"application/x-es-module, */*"}};b&&("string"==typeof b&&(e.headers.Authorization=b),e.credentials="include"),fetch(a,e).then(function(a){if(a.ok)return a.text();throw new Error("Fetch error: "+a.status+" "+a.statusText)}).then(c,d)}}f.prototype.fetch=function(a){return new Promise(function(b,c){q(a.address,void 0,b,c)})},"object"==typeof exports&&(module.exports=e),a.Reflect=a.Reflect||{},a.Reflect.Loader=a.Reflect.Loader||e,a.Reflect.global=a.Reflect.global||a,a.LoaderPolyfill=e,o||(o=new f,o.constructor=f),"object"==typeof exports&&(module.exports=o),a.System=o}("undefined"!=typeof self?self:global); //# sourceMappingURL=es6-module-loader.js.map \ No newline at end of file diff --git a/dist/es6-module-loader.js.map b/dist/es6-module-loader.js.map index 71451c8..7e41205 100644 --- a/dist/es6-module-loader.js.map +++ b/dist/es6-module-loader.js.map @@ -1 +1 @@ -{"version":3,"file":"es6-module-loader.js","sources":["es6-module-loader.src.js"],"names":["e","exports","module","define","amd","window","Promise","global","self","t","n","r","s","o","u","a","require","i","Error","f","call","length",1,"unhandledRejections","PromiseConstructor","../lib/Promise","../lib/decorators/unhandledRejection",2,"makePromise","Scheduler","async","asap","scheduler","factory","./Scheduler","./env","./makePromise",3,"this","_async","_running","_queue","_queueLen","_afterQueue","_afterQueueLen","drain","_drain","prototype","enqueue","task","run","afterQueue",4,"throwit","noop","setTimer","format","report","handled","reported","push","logError","id","formatError","value","unreport","indexOf","splice","logInfo","formatObject","x","tasks","running","flush","shift","localConsole","console","error","log","info","onPotentiallyUnhandledRejection","rejection","onPotentiallyUnhandledRejectionHandled","onFatalRejection","../env","../format",5,"isNode","process","nextTick","hasMutationObserver","MutationObserver","WebKitMutationObserver","initMutationObserver","scheduled","node","document","createTextNode","observe","characterData","data","MutationObs","capturedSetTimeout","setTimeout","ms","clearTimer","clearTimeout","vertxRequire","vertx","cancelTimer","runOnLoop","runOnContext",6,"stack","String","JSON","tryStringify","defaultValue","stringify",7,"environment","resolver","handler","_handler","Handler","init","promiseResolve","resolve","promiseReject","reason","reject","promiseNotify","notify","Pending","isPromise","Async","getHandler","Rejected","never","foreverPendingPromise","defer","begetFrom","parent","child","receiver","join","context","all","promises","traverseWith","snd","traverse","tryCatch2","tryMap","mapAt","resolved","traverseAt","settleAt","results","pending","become","Fulfilled","Array","maybeThenable","h","getHandlerMaybeThenable","state","fold","visitRemaining","start","markAsHandled","visit","_unreport","race","TypeError","runRace","getHandlerUntrusted","untrustedThen","then","Thenable","FailIfRejected","inheritedContext","createContext","consumers","thenable","AssimilateTask","errorId","_report","ReportTask","UnreportTask","cycle","ContinuationTask","continuation","ProgressTask","_then","tryAssimilate","Fold","z","c","to","failIfRejected","runContinuation1","next","enterContext","tryCatchReject","exitContext","runContinuation3","tryCatchReject3","runNotify","tryCatchReturn","b","thisArg","y","inherit","Parent","Child","objectCreate","constructor","initEmitRejection","emit","type","CustomEvent","hasCustomEvent","ev","detail","key","bubbles","cancelable","dispatchEvent","emitRejection","Object","create","proto","_defer","onFulfilled","onRejected","onProgress","p","_beget","chain","_traverse","_visitRemaining","when","fail","_state","fulfilled","rejected","progress","q","cont","foreverPendingHandler","_resolve","_reject","_notify","__global","__eval","__source","__load","eval","name","replace","message","load","address","$__Object$getPrototypeOf","getPrototypeOf","obj","__proto__","$__Object$defineProperty","defineProperty","prop","opt","get","$__Object$create","props","F","hasOwnProperty","createLoad","status","linkSets","dependencies","metadata","loadModule","loader","options","asyncStartLoadPartwayThrough","step","moduleName","moduleMetadata","moduleSource","source","moduleAddress","requestLoad","request","refererName","refererAddress","loaderObj","normalize","modules","l","loads","proceedToLocate","proceedToFetch","locate","proceedToTranslate","fetch","translate","instantiate","instantiateResult","undefined","anonCnt","isDeclarative","transpile","transpiled","curSystem","System","curRegister","register","deps","declare","depsList","execute","loadPromises","index","depLoad","concat","addLoadToLinkSet","updateLinkSetOnLoad","exc","exception","linkSetFailed","stepState","existingLoad","done","linkSet","createLinkSet","startingLoad","loadingCount","j","d","doLink","link","_newModule","evaluated","finishLoad","abrupt","addToError","failed","linkIndex","globalLoadsIndex","trace","depMap","forEach","dep","map","kind","loadIndex","buildLinkageGroups","groups","groupIndex","loadDep","loadDepGroupIndex","doDynamicExecute","linkError","Module","curGroupDeclarative","group","linkDeclarativeModule","getOrCreateModuleRecord","moduleRecords","importers","moduleObj","registryEntry","locked","importerModule","importerIndex","setters","depName","depModule","evaluateLoadedModule","doEnsureEvaluated","doExecute","seen","err","ensureEvaluated","preventExtensions","msg","Loader","_loader","importPromises","createImportPromise","promise","m","assert","item","thisLen","delete","has","import","sourcePromise","newModule","configurable","enumerable","set","Reflect","LoaderPolyfill","getTranspilerModule","globalName","default","g","__useDefault","traceurTranspile","traceur","traceurOptions","script","sourceMaps","filename","inputSourceMap","sourceMap","compiler","Compiler","doTraceurCompile","compile","babelTranspile","babel","babelOptions","code","ast","blacklist","transform","firstRun","transpiler","transpilerNormalized","curLoader","parseURI","url","match","href","protocol","authority","host","hostname","port","pathname","search","hash","removeDotSegments","input","output","pop","charAt","toAbsoluteURL","base","isWindows","slice","lastIndexOf","completed","removeEventListener","ready","scripts","getElementsByTagName","innerHTML","substr","fetchTextFromURL","isWorker","WorkerGlobalScope","isBrowser","platform","XMLHttpRequest","fulfill","xhr","responseText","statusText","sameDomain","doTimeout","domainCheck","exec","location","XDomainRequest","onload","onerror","ontimeout","onprogress","timeout","onreadystatechange","readyState","open","send","fs","readFile","SystemLoader","$__super","split","baseURL","substring","cwd","paths","*","Function","parentName","segments","rel","dotdots","segment","normalizedParts","parentParts","writable","wildcard","pathMatch","pathParts","outPath","curScript","addEventListener","getAttribute"],"mappings":";;;;;;CAAC,SAASA,GAAG,gBAAiBC,SAAQC,OAAOD,QAAQD,IAAI,kBAAmBG,SAAQA,OAAOC,IAAID,OAAOH,GAAG,mBAAoBK,QAAOA,OAAOC,QAAQN,IAAI,mBAAoBO,QAAOA,OAAOD,QAAQN,IAAI,mBAAoBQ,QAAOA,KAAKF,QAAQN,MAAM,WAAW,GAAIG,EAAsB,OAAO,SAAUH,GAAES,EAAEC,EAAEC,GAAG,QAASC,GAAEC,EAAEC,GAAG,IAAIJ,EAAEG,GAAG,CAAC,IAAIJ,EAAEI,GAAG,CAAC,GAAIE,GAAkB,kBAATC,UAAqBA,OAAQ,KAAIF,GAAGC,EAAE,MAAOA,GAAEF,GAAE,EAAI,IAAGI,EAAE,MAAOA,GAAEJ,GAAE,EAAI,MAAM,IAAIK,OAAM,uBAAuBL,EAAE,KAAK,GAAIM,GAAET,EAAEG,IAAIZ,WAAYQ,GAAEI,GAAG,GAAGO,KAAKD,EAAElB,QAAQ,SAASD,GAAG,GAAIU,GAAED,EAAEI,GAAG,GAAGb,EAAG,OAAOY,GAAEF,EAAEA,EAAEV,IAAImB,EAAEA,EAAElB,QAAQD,EAAES,EAAEC,EAAEC,GAAG,MAAOD,GAAEG,GAAGZ,QAAkD,IAAI,GAA1CgB,GAAkB,kBAATD,UAAqBA,QAAgBH,EAAE,EAAEA,EAAEF,EAAEU,OAAOR,IAAID,EAAED,EAAEE,GAAI,OAAOD,KAAKU,GAAG,SAASN,EAAQd,GAQ7sB,GAAIqB,GAAsBP,EAAQ,wCAC9BQ,EAAqBD,EAAoBP,EAAQ,kBAErDd,GAAOD,QAA2B,mBAAVM,QAAyBA,OAAOD,QAAUkB,EACnC,mBAAVhB,MAAyBA,KAAKF,QAAYkB,EACjDA,IAEXC,iBAAiB,EAAEC,uCAAuC,IAAIC,GAAG,SAASX,EAAQd,IAKrF,SAAUC,GAAU,YACpBA,GAAO,SAAUa,GAEhB,GAAIY,GAAcZ,EAAQ,iBACtBa,EAAYb,EAAQ,eACpBc,EAAQd,EAAQ,SAASe,IAE7B,OAAOH,IACNI,UAAW,GAAIH,GAAUC,QAIN,kBAAX3B,IAAyBA,EAAOC,IAAMD,EAAS,SAAU8B,GAAW/B,EAAOD,QAAUgC,EAAQjB,OAEpGkB,cAAc,EAAEC,QAAQ,EAAEC,gBAAgB,IAAIC,GAAG,SAASrB,EAAQd,IAKpE,SAASC,GAAU,YACpBA,GAAO,WAUN,QAAS0B,GAAUC,GAClBQ,KAAKC,OAAST,EACdQ,KAAKE,UAAW,EAEhBF,KAAKG,OAASH,KACdA,KAAKI,UAAY,EACjBJ,KAAKK,eACLL,KAAKM,eAAiB,CAEtB,IAAIpC,GAAO8B,IACXA,MAAKO,MAAQ,WACZrC,EAAKsC,UAkDP,MA1CAjB,GAAUkB,UAAUC,QAAU,SAASC,GACtCX,KAAKG,OAAOH,KAAKI,aAAeO,EAChCX,KAAKY,OAONrB,EAAUkB,UAAUI,WAAa,SAASF,GACzCX,KAAKK,YAAYL,KAAKM,kBAAoBK,EAC1CX,KAAKY,OAGNrB,EAAUkB,UAAUG,IAAM,WACpBZ,KAAKE,WACTF,KAAKE,UAAW,EAChBF,KAAKC,OAAOD,KAAKO,SAOnBhB,EAAUkB,UAAUD,OAAS,WAE5B,IADA,GAAI7B,GAAI,EACDA,EAAIqB,KAAKI,YAAazB,EAC5BqB,KAAKG,OAAOxB,GAAGiC,MACfZ,KAAKG,OAAOxB,GAAK,MAMlB,KAHAqB,KAAKI,UAAY,EACjBJ,KAAKE,UAAW,EAEXvB,EAAI,EAAGA,EAAIqB,KAAKM,iBAAkB3B,EACtCqB,KAAKK,YAAY1B,GAAGiC,MACpBZ,KAAKK,YAAY1B,GAAK,MAGvBqB,MAAKM,eAAiB,GAGhBf,KAGY,kBAAX1B,IAAyBA,EAAOC,IAAMD,EAAS,SAAS8B,GAAW/B,EAAOD,QAAUgC,WAEvFmB,GAAG,SAASpC,EAAQd,IAKzB,SAASC,GAAU,YACpBA,GAAO,SAASa,GAyEf,QAASqC,GAAQrD,GAChB,KAAMA,GAGP,QAASsD,MA3ET,GAAIC,GAAWvC,EAAQ,UAAUuC,SAC7BC,EAASxC,EAAQ,YAErB,OAAO,UAA4BV,GAoClC,QAASmD,GAAO9C,GACXA,EAAE+C,UACLC,EAASC,KAAKjD,GACdkD,EAAS,oCAAsClD,EAAEmD,GAAK,KAAON,EAAOO,YAAYpD,EAAEqD,SAIpF,QAASC,GAAStD,GACjB,GAAIM,GAAI0C,EAASO,QAAQvD,EACtBM,IAAK,IACP0C,EAASQ,OAAOlD,EAAG,GACnBmD,EAAQ,+BAAiCzD,EAAEmD,GAAK,KAAON,EAAOa,aAAa1D,EAAEqD,SAI/E,QAAShB,GAAQ7B,EAAGmD,GACnBC,EAAMX,KAAKzC,EAAGmD,GACC,OAAZE,IACFA,EAAUjB,EAASkB,EAAO,IAI5B,QAASA,KAER,IADAD,EAAU,KACJD,EAAMlD,OAAS,GACpBkD,EAAMG,QAAQH,EAAMG,SA3DtB,GAEIC,GAFAd,EAAWP,EACXc,EAAUd,CAGQ,oBAAZsB,WAITD,EAAeC,QACff,EAAyC,mBAAvBc,GAAaE,MAC5B,SAAU7E,GAAK2E,EAAaE,MAAM7E,IAClC,SAAUA,GAAK2E,EAAaG,IAAI9E,IAEnCoE,EAAuC,mBAAtBO,GAAaI,KAC3B,SAAU/E,GAAK2E,EAAaI,KAAK/E,IACjC,SAAUA,GAAK2E,EAAaG,IAAI9E,KAGpCM,EAAQ0E,gCAAkC,SAASC,GAClDjC,EAAQS,EAAQwB,IAGjB3E,EAAQ4E,uCAAyC,SAASD,GACzDjC,EAAQiB,EAAUgB,IAGnB3E,EAAQ6E,iBAAmB,SAASF,GACnCjC,EAAQK,EAAS4B,EAAUjB,OAG5B,IAAIO,MACAZ,KACAa,EAAU,IA+Bd,OAAOlE,OAUW,kBAAXH,IAAyBA,EAAOC,IAAMD,EAAS,SAAS8B,GAAW/B,EAAOD,QAAUgC,EAAQjB,OAElGoE,SAAS,EAAEC,YAAY,IAAIC,GAAG,SAAStE,EAAQd,IAMjD,SAASC,GAAU,YACpBA,GAAO,SAASa,GAqCf,QAASuE,KACR,MAA0B,mBAAZC,UAAuC,OAAZA,SACZ,kBAArBA,SAAQC,SAGjB,QAASC,KACR,MAAoC,kBAArBC,mBAAmCA,kBACd,kBAA3BC,yBAAyCA,uBAGnD,QAASC,GAAqBF,GAM7B,QAASzC,KACR,GAAI/B,GAAI2E,CACRA,GAAY,OACZ3E,IARD,GAAI2E,GACAC,EAAOC,SAASC,eAAe,IAC/BpF,EAAI,GAAI8E,GAAiBzC,EAC7BrC,GAAEqF,QAAQH,GAAQI,eAAe,GAQjC,IAAIlF,GAAI,CACR,OAAO,UAAUE,GAChB2E,EAAY3E,EACZ4E,EAAKK,KAAQnF,GAAK,GAtDpB,GAAIoF,GACAC,EAA2C,mBAAfC,aAA8BA,WAG1DhD,EAAW,SAASpC,EAAGqF,GAAM,MAAOD,YAAWpF,EAAGqF,IAClDC,EAAa,SAAShG,GAAK,MAAOiG,cAAajG,IAC/CsB,EAAO,SAAUZ,GAAK,MAAOmF,GAAmBnF,EAAG,GAGvD,IAAIoE,IACHxD,EAAO,SAAUZ,GAAK,MAAOqE,SAAQC,SAAStE,QAExC,IAAIkF,EAAcX,IACxB3D,EAAO8D,EAAqBQ,OAEtB,KAAKC,EAAoB,CAC/B,GAAIK,GAAe3F,EACf4F,EAAQD,EAAa,QACzBpD,GAAW,SAAUpC,EAAGqF,GAAM,MAAOI,GAAMrD,SAASiD,EAAIrF,IACxDsF,EAAaG,EAAMC,YACnB9E,EAAO6E,EAAME,WAAaF,EAAMG,aAGjC,OACCxD,SAAUA,EACVkD,WAAYA,EACZ1E,KAAMA,MAgCY,kBAAX5B,IAAyBA,EAAOC,IAAMD,EAAS,SAAS8B,GAAW/B,EAAOD,QAAUgC,EAAQjB,UAE/FgG,GAAG,SAAShG,EAAQd,IAKzB,SAASC,GAAU,YACpBA,GAAO,WAeN,QAAS4D,GAAY/D,GACpB,GAAIY,GAAiB,gBAANZ,IAAwB,OAANA,GAAcA,EAAEiH,MAAQjH,EAAEiH,MAAQ5C,EAAarE,EAChF,OAAOA,aAAakB,OAAQN,EAAIA,EAAI,6BASrC,QAASyD,GAAaxD,GACrB,GAAID,GAAIsG,OAAOrG,EAIf,OAHS,oBAAND,GAA2C,mBAATuG,QACpCvG,EAAIwG,EAAavG,EAAGD,IAEdA,EAUR,QAASwG,GAAa9C,EAAG+C,GACxB,IACC,MAAOF,MAAKG,UAAUhD,GACrB,MAAMtE,GACP,MAAOqH,IA3CT,OACCtD,YAAaA,EACbM,aAAcA,EACd+C,aAAcA,MA6CI,kBAAXjH,IAAyBA,EAAOC,IAAMD,EAAS,SAAS8B,GAAW/B,EAAOD,QAAUgC,WAEvFsF,GAAG,SAASvG,EAAQd,IAKzB,SAASC,GAAU,YACpBA,GAAO,WAEN,MAAO,UAAqBqH,GAkB3B,QAASlH,GAAQmH,EAAUC,GAC1BpF,KAAKqF,SAAWF,IAAaG,EAAUF,EAAUG,EAAKJ,GAQvD,QAASI,GAAKJ,GAgBb,QAASK,GAAgBxD,GACxBoD,EAAQK,QAAQzD,GAOjB,QAAS0D,GAAeC,GACvBP,EAAQQ,OAAOD,GAQhB,QAASE,GAAe7D,GACvBoD,EAAQU,OAAO9D,GAjChB,GAAIoD,GAAU,GAAIW,EAElB,KACCZ,EAASK,EAAgBE,EAAeG,GACvC,MAAOnI,GACRgI,EAAchI,GAGf,MAAO0H,GA4CR,QAASK,GAAQzD,GAChB,MAAOgE,GAAUhE,GAAKA,EACnB,GAAIhE,GAAQsH,EAAS,GAAIW,GAAMC,EAAWlE,KAQ9C,QAAS4D,GAAO5D,GACf,MAAO,IAAIhE,GAAQsH,EAAS,GAAIW,GAAM,GAAIE,GAASnE,KAOpD,QAASoE,KACR,MAAOC,GAQR,QAASC,KACR,MAAO,IAAItI,GAAQsH,EAAS,GAAIS,IAoDjC,QAASQ,GAAUC,EAAQxI,GAC1B,GAAIyI,GAAQ,GAAIV,GAAQS,EAAOE,SAAUF,EAAOG,OAAOC,QACvD,OAAO,IAAI5I,GAAQsH,EAASmB,GAgB7B,QAASI,GAAIC,GACZ,MAAOC,GAAaC,EAAK,KAAMF,GAUhC,QAASG,GAASpI,EAAGiI,GACpB,MAAOC,GAAaG,EAAWrI,EAAGiI,GAGnC,QAASC,GAAaI,EAAQtI,EAAGiI,GAwBhC,QAASM,GAAMzI,EAAGqD,EAAGmD,GAChBA,EAASkC,UACZC,EAAWR,EAAUS,EAAU5I,EAAGwI,EAAOtI,EAAGmD,EAAGrD,GAAIwG,GAIrD,QAASoC,GAAS5I,EAAGqD,EAAGmD,GACvBqC,EAAQ7I,GAAKqD,EACI,MAAZyF,GACJtC,EAASuC,OAAO,GAAIC,GAAUH,IA1BhC,IAAK,GAAWxF,GANZoD,EAAuB,kBAANvG,GAAmBuI,EAAQG,EAE5CpC,EAAW,GAAIY,GACf0B,EAAUX,EAAS/H,SAAW,EAC9ByI,EAAU,GAAII,OAAMH,GAEf9I,EAAI,EAAMA,EAAImI,EAAS/H,SAAWoG,EAASkC,WAAY1I,EAC/DqD,EAAI8E,EAASnI,GAEH,SAANqD,GAAkBrD,IAAKmI,GAK3BQ,EAAWR,EAAU1B,EAASzG,EAAGqD,EAAGmD,KAJjCsC,CAWJ,OAJe,KAAZA,GACFtC,EAASuC,OAAO,GAAIC,GAAUH,IAGxB,GAAIxJ,GAAQsH,EAASH,GAgB7B,QAASmC,GAAWR,EAAU1B,EAASzG,EAAGqD,EAAGmD,GAC5C,GAAI0C,EAAc7F,GAAI,CACrB,GAAI8F,GAAIC,EAAwB/F,GAC5B1D,EAAIwJ,EAAEE,OAEA,KAAN1J,EACHwJ,EAAEG,KAAK7C,EAASzG,EAAG,OAAQwG,GACjB7G,EAAI,EACd8G,EAAQzG,EAAGmJ,EAAEpG,MAAOyD,IAEpBA,EAASuC,OAAOI,GAChBI,EAAepB,EAAUnI,EAAE,EAAGmJ,QAG/B1C,GAAQzG,EAAGqD,EAAGmD,GAKhB,QAAS+C,GAAepB,EAAUqB,EAAO/C,GACxC,IAAI,GAAIzG,GAAEwJ,EAAOxJ,EAAEmI,EAAS/H,SAAUJ,EACrCyJ,EAAclC,EAAWY,EAASnI,IAAKyG,GAIzC,QAASgD,GAAcN,EAAG1C,GACzB,GAAG0C,IAAM1C,EAAT,CAIA,GAAI9G,GAAIwJ,EAAEE,OACD,KAAN1J,EACFwJ,EAAEO,MAAMP,EAAG,OAAQA,EAAEQ,WACR,EAAJhK,GACTwJ,EAAEQ,aAkBJ,QAASC,GAAKzB,GACb,MAAuB,gBAAbA,IAAsC,OAAbA,EAC3BlB,EAAO,GAAI4C,WAAU,kCAKF,IAApB1B,EAAS/H,OAAeqH,IACP,IAApBU,EAAS/H,OAAe0G,EAAQqB,EAAS,IACzC2B,EAAQ3B,GAGb,QAAS2B,GAAQ3B,GAChB,GACInI,GAAGqD,EAAG8F,EADN3C,EAAW,GAAIY,EAEnB,KAAIpH,EAAE,EAAGA,EAAEmI,EAAS/H,SAAUJ,EAE7B,GADAqD,EAAI8E,EAASnI,GACH,SAANqD,GAAkBrD,IAAKmI,GAA3B,CAKA,GADAgB,EAAI5B,EAAWlE,GACE,IAAd8F,EAAEE,QAAe,CACnB7C,EAASuC,OAAOI,GAChBI,EAAepB,EAAUnI,EAAE,EAAGmJ,EAC9B,OAEAA,EAAEO,MAAMlD,EAAUA,EAASM,QAASN,EAASS,QAG/C,MAAO,IAAI5H,GAAQsH,EAASH,GAW7B,QAASe,GAAWlE,GACnB,MAAGgE,GAAUhE,GACLA,EAAEqD,SAASsB,OAEZkB,EAAc7F,GAAK0G,EAAoB1G,GAAK,GAAI2F,GAAU3F,GASlE,QAAS+F,GAAwB/F,GAChC,MAAOgE,GAAUhE,GAAKA,EAAEqD,SAASsB,OAAS+B,EAAoB1G,GAQ/D,QAAS0G,GAAoB1G,GAC5B,IACC,GAAI2G,GAAgB3G,EAAE4G,IACtB,OAAgC,kBAAlBD,GACX,GAAIE,GAASF,EAAe3G,GAC5B,GAAI2F,GAAU3F,GAChB,MAAMtE,GACP,MAAO,IAAIyI,GAASzI,IAQtB,QAAS4H,MAmDT,QAASwD,MAcT,QAAS/C,GAAQW,EAAUqC,GAC1B/K,EAAQgL,cAAchJ,KAAM+I,GAE5B/I,KAAKiJ,UAAY,OACjBjJ,KAAK0G,SAAWA,EAChB1G,KAAKoF,QAAU,OACfpF,KAAKqH,UAAW,EAsGjB,QAASpB,GAAMb,GACdpF,KAAKoF,QAAUA,EAuBhB,QAASyD,GAASD,EAAMM,GACvBnD,EAAQjH,KAAKkB,MACbiC,EAAMvB,QAAQ,GAAIyI,GAAeP,EAAMM,EAAUlJ,OAUlD,QAAS2H,GAAU3F,GAClBhE,EAAQgL,cAAchJ,MACtBA,KAAK0B,MAAQM,EAsBd,QAASmE,GAASnE,GACjBhE,EAAQgL,cAAchJ,MAEtBA,KAAKwB,KAAO4H,EACZpJ,KAAK0B,MAAQM,EACbhC,KAAKoB,SAAU,EACfpB,KAAKqB,UAAW,EAEhBrB,KAAKqJ,UAoCN,QAASC,GAAW3G,EAAWiE,GAC9B5G,KAAK2C,UAAYA,EACjB3C,KAAK4G,QAAUA,EAWhB,QAAS2C,GAAa5G,GACrB3C,KAAK2C,UAAYA,EA0BlB,QAAS6G,KACR,MAAO,IAAIrD,GAAS,GAAIqC,WAAU,kBASnC,QAASiB,GAAiBC,EAActE,GACvCpF,KAAK0J,aAAeA,EACpB1J,KAAKoF,QAAUA,EAWhB,QAASuE,GAAajI,EAAO0D,GAC5BpF,KAAKoF,QAAUA,EACfpF,KAAK0B,MAAQA,EAsBd,QAASyH,GAAeP,EAAMM,EAAU/D,GACvCnF,KAAK4J,MAAQhB,EACb5I,KAAKkJ,SAAWA,EAChBlJ,KAAKmF,SAAWA,EAYjB,QAAS0E,GAAcjB,EAAMM,EAAUzD,EAASG,EAAQE,GACvD,IACC8C,EAAK9J,KAAKoK,EAAUzD,EAASG,EAAQE,GACpC,MAAOpI,GACRkI,EAAOlI,IAQT,QAASoM,GAAKjL,EAAGkL,EAAGC,EAAGC,GACtBjK,KAAKnB,EAAIA,EAAGmB,KAAK+J,EAAIA,EAAG/J,KAAKgK,EAAIA,EAAGhK,KAAKiK,GAAKA,EAC9CjK,KAAKmF,SAAW+E,EAChBlK,KAAK0G,SAAW1G,KAqBjB,QAASgG,GAAUhE,GAClB,MAAOA,aAAahE,GASrB,QAAS6J,GAAc7F,GACtB,OAAqB,gBAANA,IAA+B,kBAANA,KAA2B,OAANA,EAG9D,QAASmI,GAAiBtL,EAAGiJ,EAAGpB,EAAU0D,GACzC,MAAgB,kBAANvL,GACFuL,EAAK1C,OAAOI,IAGpB9J,EAAQqM,aAAavC,GACrBwC,EAAezL,EAAGiJ,EAAEpG,MAAOgF,EAAU0D,OACrCpM,GAAQuM,eAGT,QAASC,GAAiB3L,EAAGmD,EAAG8F,EAAGpB,EAAU0D,GAC5C,MAAgB,kBAANvL,GACFuL,EAAK1C,OAAOI,IAGpB9J,EAAQqM,aAAavC,GACrB2C,EAAgB5L,EAAGmD,EAAG8F,EAAEpG,MAAOgF,EAAU0D,OACzCpM,GAAQuM,eAMT,QAASG,GAAU7L,EAAGmD,EAAG8F,EAAGpB,EAAU0D,GACrC,MAAgB,kBAANvL,GACFuL,EAAKtE,OAAO9D,IAGpBhE,EAAQqM,aAAavC,GACrB6C,EAAe9L,EAAGmD,EAAG0E,EAAU0D,OAC/BpM,GAAQuM,eAGT,QAASrD,GAAUrI,EAAGJ,EAAGmM,GACxB,IACC,MAAO/L,GAAEJ,EAAGmM,GACX,MAAMlN,GACP,MAAOkI,GAAOlI,IAQhB,QAAS4M,GAAezL,EAAGmD,EAAG6I,EAAST,GACtC,IACCA,EAAK1C,OAAOxB,EAAWrH,EAAEC,KAAK+L,EAAS7I,KACtC,MAAMtE,GACP0M,EAAK1C,OAAO,GAAIvB,GAASzI,KAO3B,QAAS+M,GAAgB5L,EAAGmD,EAAG8I,EAAGD,EAAST,GAC1C,IACCvL,EAAEC,KAAK+L,EAAS7I,EAAG8I,EAAGV,GACrB,MAAM1M,GACP0M,EAAK1C,OAAO,GAAIvB,GAASzI,KAQ3B,QAASiN,GAAe9L,EAAGmD,EAAG6I,EAAST,GACtC,IACCA,EAAKtE,OAAOjH,EAAEC,KAAK+L,EAAS7I,IAC3B,MAAMtE,GACP0M,EAAKtE,OAAOpI,IAId,QAASqN,GAAQC,EAAQC,GACxBA,EAAMxK,UAAYyK,EAAaF,EAAOvK,WACtCwK,EAAMxK,UAAU0K,YAAcF,EAG/B,QAASjE,GAAIhF,EAAG8I,GACf,MAAOA,GAGR,QAAS9J,MAET,QAASoK,KAER,MAAsB,mBAAZlI,UAAuC,OAAZA,SACT,kBAAjBA,SAAQmI,KAKX,SAASC,EAAM3I,GACrB,MAAgB,uBAAT2I,EACJpI,QAAQmI,KAAKC,EAAM3I,EAAUjB,MAAOiB,GACpCO,QAAQmI,KAAKC,EAAM3I,IAEE,mBAATzE,OAA+C,kBAAhBqN,aACvC,SAASvK,EAAM9C,EAAMqN,GAC5B,GAAIC,IAAiB,CACrB,KACC,GAAIC,GAAK,GAAIF,GAAY,qBACzBC,GAAiBC,YAAcF,GAC9B,MAAO7N,IAET,MAAQ8N,GAAwB,SAASF,EAAM3I,GAC9C,GAAI8I,GAAK,GAAIF,GAAYD,GACxBI,QACC/F,OAAQhD,EAAUjB,MAClBiK,IAAKhJ,GAENiJ,SAAS,EACTC,YAAY,GAGb,QAAQ3N,EAAK4N,cAAcL,IAVHzK,GAYxBA,EAAM9C,KAAMqN,aAGRvK,EA/4BR,GAAIiB,GAAQiD,EAAYxF,UACpBqM,EAAgBX,IAEhBF,EAAec,OAAOC,QACzB,SAASC,GACR,QAASjB,MAET,MADAA,GAAMxK,UAAYyL,EACX,GAAIjB,GA0DbjN,GAAQyH,QAAUA,EAClBzH,EAAQ4H,OAASA,EACjB5H,EAAQoI,MAAQA,EAEhBpI,EAAQmO,OAAS7F,EACjBtI,EAAQqH,SAAWa,EAmDnBlI,EAAQyC,UAAUmI,KAAO,SAASwD,EAAaC,EAAYC,GAC1D,GAAI9F,GAASxG,KAAKqF,SACd2C,EAAQxB,EAAOG,OAAOqB,OAE1B,IAA4B,kBAAhBoE,IAA8BpE,EAAQ,GAC1B,kBAAfqE,IAAqC,EAARrE,EAErC,MAAO,IAAIhI,MAAKmL,YAAY7F,EAASkB,EAGtC,IAAI+F,GAAIvM,KAAKwM,SACT/F,EAAQ8F,EAAElH,QAId,OAFAmB,GAAOiG,MAAMhG,EAAOD,EAAOE,SAAU0F,EAAaC,EAAYC,GAEvDC,GASRvO,EAAQyC,UAAU,SAAW,SAAS4L,GACrC,MAAOrM,MAAK4I,KAAK,OAAQyD,IAQ1BrO,EAAQyC,UAAU+L,OAAS,WAC1B,MAAOjG,GAAUvG,KAAKqF,SAAUrF,KAAKmL,cAUtCnN,EAAQ6I,IAAMA,EACd7I,EAAQuK,KAAOA,EACfvK,EAAQ0O,UAAYzF,EAgFpBjJ,EAAQ2O,gBAAkBzE,EAkH1B5C,EAAQ7E,UAAUmM,KACftH,EAAQ7E,UAAUiH,OAClBpC,EAAQ7E,UAAUqF,OAClBR,EAAQ7E,UAAUoM,KAClBvH,EAAQ7E,UAAU6H,UAClBhD,EAAQ7E,UAAU4I,QAClBrI,EAEHsE,EAAQ7E,UAAUqM,OAAS,EAE3BxH,EAAQ7E,UAAUuH,MAAQ,WACzB,MAAOhI,MAAK8M,QAQbxH,EAAQ7E,UAAUkG,KAAO,WAExB,IADA,GAAImB,GAAI9H,KACY,SAAd8H,EAAE1C,SACP0C,EAAIA,EAAE1C,OAEP,OAAO0C,IAGRxC,EAAQ7E,UAAUgM,MAAQ,SAASxC,EAAIvD,EAAUqG,EAAWC,EAAUC,GACrEjN,KAAK4M,MACJzH,SAAU8E,EACVvD,SAAUA,EACVqG,UAAWA,EACXC,SAAUA,EACVC,SAAUA,KAIZ3H,EAAQ7E,UAAU4H,MAAQ,SAAS3B,EAAUqG,EAAWC,EAAUC,GACjEjN,KAAKyM,MAAMvC,EAAgBxD,EAAUqG,EAAWC,EAAUC,IAG3D3H,EAAQ7E,UAAUwH,KAAO,SAASpJ,EAAGkL,EAAGC,EAAGC,GAC1CjK,KAAK4M,KAAK,GAAI9C,GAAKjL,EAAGkL,EAAGC,EAAGC,KAS7Bc,EAAQzF,EAASwD,GAEjBA,EAAerI,UAAUiH,OAAS,SAASI,GAC1CA,EAAE+E,OAGH,IAAI3C,GAAiB,GAAIpB,EAezBiC,GAAQzF,EAASS,GAEjBA,EAAQtF,UAAUqM,OAAS,EAE3B/G,EAAQtF,UAAUgF,QAAU,SAASzD,GACpChC,KAAK0H,OAAOxB,EAAWlE,KAGxB+D,EAAQtF,UAAUmF,OAAS,SAAS5D,GAChChC,KAAKqH,UAIRrH,KAAK0H,OAAO,GAAIvB,GAASnE,KAG1B+D,EAAQtF,UAAUkG,KAAO,WACxB,IAAK3G,KAAKqH,SACT,MAAOrH,KAKR,KAFA,GAAI8H,GAAI9H,KAEa,SAAd8H,EAAE1C,SAER,GADA0C,EAAIA,EAAE1C,QACF0C,IAAM9H,KACT,MAAOA,MAAKoF,QAAUoE,GAIxB,OAAO1B,IAGR/B,EAAQtF,UAAUG,IAAM,WACvB,GAAIsM,GAAIlN,KAAKiJ,UACT7D,EAAUpF,KAAKoF,OACnBpF,MAAKoF,QAAUpF,KAAKoF,QAAQuB,OAC5B3G,KAAKiJ,UAAY,MAEjB,KAAK,GAAItK,GAAI,EAAGA,EAAIuO,EAAEnO,SAAUJ,EAC/ByG,EAAQwH,KAAKM,EAAEvO,KAIjBoH,EAAQtF,UAAUiH,OAAS,SAAStC,GAChCpF,KAAKqH,WAIRrH,KAAKqH,UAAW,EAChBrH,KAAKoF,QAAUA,EACO,SAAnBpF,KAAKiJ,WACPhH,EAAMvB,QAAQV,MAGK,SAAjBA,KAAK4G,SACPxB,EAAQiE,QAAQrJ,KAAK4G,WAIvBb,EAAQtF,UAAUmM,KAAO,SAASlD,GAC9B1J,KAAKqH,SACPpF,EAAMvB,QAAQ,GAAI+I,GAAiBC,EAAc1J,KAAKoF,UAEhC,SAAnBpF,KAAKiJ,UACPjJ,KAAKiJ,WAAaS,GAElB1J,KAAKiJ,UAAU3H,KAAKoI,IAQvB3D,EAAQtF,UAAUqF,OAAS,SAAS9D,GAC/BhC,KAAKqH,UACRpF,EAAMvB,QAAQ,GAAIiJ,GAAa3H,EAAGhC,QAIpC+F,EAAQtF,UAAUoM,KAAO,SAASjG,GACjC,GAAIoD,GAAuB,mBAAZpD,GAA0B5G,KAAK4G,QAAUA,CACxD5G,MAAKqH,UAAYrH,KAAKoF,QAAQuB,OAAOkG,KAAK7C,IAG3CjE,EAAQtF,UAAU4I,QAAU,SAASzC,GACpC5G,KAAKqH,UAAYrH,KAAKoF,QAAQuB,OAAO0C,QAAQzC,IAG9Cb,EAAQtF,UAAU6H,UAAY,WAC7BtI,KAAKqH,UAAYrH,KAAKoF,QAAQuB,OAAO2B,aAYtCyC,EAAQzF,EAASW,GAEjBA,EAAMxF,UAAUmM,KAAO,SAASlD,GAC/BzH,EAAMvB,QAAQ,GAAI+I,GAAiBC,EAAc1J,QAGlDiG,EAAMxF,UAAU4I,QAAU,SAASzC,GAClC5G,KAAK2G,OAAO0C,QAAQzC,IAGrBX,EAAMxF,UAAU6H,UAAY,WAC3BtI,KAAK2G,OAAO2B,aAcbyC,EAAQhF,EAAS8C,GAYjBkC,EAAQzF,EAASqC,GAEjBA,EAAUlH,UAAUqM,OAAS,EAE7BnF,EAAUlH,UAAUwH,KAAO,SAASpJ,EAAGkL,EAAGC,EAAGC,GAC5CO,EAAiB3L,EAAGkL,EAAG/J,KAAMgK,EAAGC,IAGjCtC,EAAUlH,UAAUmM,KAAO,SAASO,GACnChD,EAAiBgD,EAAKJ,UAAW/M,KAAMmN,EAAKzG,SAAUyG,EAAKhI,UAG5D,IAAIiE,GAAU,CAkBd2B,GAAQzF,EAASa,GAEjBA,EAAS1F,UAAUqM,OAAS,GAE5B3G,EAAS1F,UAAUwH,KAAO,SAASpJ,EAAGkL,EAAGC,EAAGC,GAC3CA,EAAGvC,OAAO1H,OAGXmG,EAAS1F,UAAUmM,KAAO,SAASO,GACN,kBAAlBA,GAAKH,UACdhN,KAAKsI,YAEN6B,EAAiBgD,EAAKH,SAAUhN,KAAMmN,EAAKzG,SAAUyG,EAAKhI,WAG3DgB,EAAS1F,UAAU4I,QAAU,SAASzC,GACrC3E,EAAMpB,WAAW,GAAIyI,GAAWtJ,KAAM4G,KAGvCT,EAAS1F,UAAU6H,UAAY,WAC3BtI,KAAKoB,UAGRpB,KAAKoB,SAAU,EACfa,EAAMpB,WAAW,GAAI0I,GAAavJ,SAGnCmG,EAAS1F,UAAUoM,KAAO,SAASjG,GAClC5G,KAAKqB,UAAW,EAChB0K,EAAc,qBAAsB/L,MACpChC,EAAQ6E,iBAAiB7C,KAAkB,SAAZ4G,EAAqB5G,KAAK4G,QAAUA,IAQpE0C,EAAW7I,UAAUG,IAAM,WACtBZ,KAAK2C,UAAUvB,SAAYpB,KAAK2C,UAAUtB,WAC7CrB,KAAK2C,UAAUtB,UAAW,EAC1B0K,EAAc,qBAAsB/L,KAAK2C,YACxC3E,EAAQ0E,gCAAgC1C,KAAK2C,UAAW3C,KAAK4G,WAQhE2C,EAAa9I,UAAUG,IAAM,WACzBZ,KAAK2C,UAAUtB,WACjB0K,EAAc,mBAAoB/L,KAAK2C,YACtC3E,EAAQ4E,uCAAuC5C,KAAK2C,aAOvD3E,EAAQgL,cACLhL,EAAQqM,aACRrM,EAAQuM,YACRvM,EAAQ0E,gCACR1E,EAAQ4E,uCACR5E,EAAQ6E,iBACR7B,CAIH,IAAIoM,GAAwB,GAAI9H,GAC5Be,EAAwB,GAAIrI,GAAQsH,EAAS8H,EAgPjD,OA/NA3D,GAAiBhJ,UAAUG,IAAM,WAChCZ,KAAKoF,QAAQuB,OAAOiG,KAAK5M,KAAK0J,eAY/BC,EAAalJ,UAAUG,IAAM,WAC5B,GAAIsM,GAAIlN,KAAKoF,QAAQ6D,SACrB,IAAS,SAANiE,EAIH,IAAK,GAAIlD,GAAGrL,EAAI,EAAGA,EAAIuO,EAAEnO,SAAUJ,EAClCqL,EAAIkD,EAAEvO,GACN+L,EAAUV,EAAEiD,SAAUjN,KAAK0B,MAAO1B,KAAKoF,QAAS4E,EAAEtD,SAAUsD,EAAE7E,WAiBhEgE,EAAe1I,UAAUG,IAAM,WAI9B,QAASyM,GAASrL,GAAK8F,EAAErC,QAAQzD,GACjC,QAASsL,GAAQtL,GAAM8F,EAAElC,OAAO5D,GAChC,QAASuL,GAAQvL,GAAM8F,EAAEhC,OAAO9D,GALhC,GAAI8F,GAAI9H,KAAKmF,QACb0E,GAAc7J,KAAK4J,MAAO5J,KAAKkJ,SAAUmE,EAAUC,EAASC,IAyB7DzD,EAAKrJ,UAAUsM,UAAY,SAAS/K,GACnChC,KAAKnB,EAAEC,KAAKkB,KAAKgK,EAAGhK,KAAK+J,EAAG/H,EAAGhC,KAAKiK,KAGrCH,EAAKrJ,UAAUuM,SAAW,SAAShL,GAClChC,KAAKiK,GAAGrE,OAAO5D,IAGhB8H,EAAKrJ,UAAUwM,SAAW,SAASjL,GAClChC,KAAKiK,GAAGnE,OAAO9D,IAqJThE,MAGW,kBAAXH,IAAyBA,EAAOC,IAAMD,EAAS,SAAS8B,GAAW/B,EAAOD,QAAUgC,gBAElF,IACV,KAGD,SAAU6N,UAuiDV,QAASC,QAAOC,SAAUF,SAAUG,QAClC,IACEC,KAAK,sCAAwCD,OAAOE,MAAQ,IAAIC,QAAQ,IAAK,KAAQ,MAAQJ,SAAW,0BAE1G,MAAMhQ,GAGJ,MAFc,eAAVA,EAAEmQ,MAAmC,aAAVnQ,EAAEmQ,QAC/BnQ,EAAEqQ,QAAU,eAAiBJ,OAAOE,MAAQG,KAAKC,SAAW,MAASvQ,EAAEqQ,SACnErQ,GA5iDVwQ,yBAA2BlC,OAAOmC,gBAAkB,SAASC,GAC3D,MAAOA,GAAIC,UAGb,IAAIC,2BACH,WACC,IACQtC,OAAOuC,kBAAmB,UAC9BD,yBAA2BtC,OAAOuC,gBAEpC,MAAO7Q,GACP4Q,yBAA2B,SAAUF,EAAKI,EAAMC,GAC9C,IACEL,EAAII,GAAQC,EAAI/M,OAAS+M,EAAIC,IAAI5P,KAAKsP,GAExC,MAAM1Q,UAKZiR,iBAAmB3C,OAAOC,QAAU,SAAS1N,EAAGqQ,GAC9C,QAASC,MAGT,GAFAA,EAAEpO,UAAYlC,EAEQ,gBAAZ,GACR,IAAKiQ,OAAQI,GACPA,EAAME,eAAe,QACvBD,EAAEL,MAAQI,EAAMJ,MAItB,OAAO,IAAIK,IA2Gb,WA+BE,QAASE,GAAWlB,GAClB,OACEmB,OAAQ,UACRnB,KAAMA,EACNoB,YACAC,gBACAC,aASJ,QAASC,GAAWC,EAAQxB,EAAMyB,GAChC,MAAO,IAAItR,GAAQuR,GACjBC,KAAMF,EAAQrB,QAAU,QAAU,SAClCoB,OAAQA,EACRI,WAAY5B,EAEZ6B,eAAgBJ,GAAWA,EAAQH,aACnCQ,aAAcL,EAAQM,OACtBC,cAAeP,EAAQrB,WAK3B,QAAS6B,GAAYT,EAAQU,EAASC,EAAaC,GAEjD,MAAO,IAAIjS,GAAQ,SAASyH,GAC1BA,EAAQ4J,EAAOa,UAAUC,UAAUJ,EAASC,EAAaC,MAG1DrH,KAAK,SAASiF,GACb,GAAIG,EACJ,IAAIqB,EAAOe,QAAQvC,GAKjB,MAJAG,GAAOe,EAAWlB,GAClBG,EAAKgB,OAAS,SAEdhB,EAAKpQ,OAASyR,EAAOe,QAAQvC,GACtBG,CAGT,KAAK,GAAIrP,GAAI,EAAG0R,EAAIhB,EAAOiB,MAAMvR,OAAYsR,EAAJ1R,EAAOA,IAE9C,GADAqP,EAAOqB,EAAOiB,MAAM3R,GAChBqP,EAAKH,MAAQA,EAGjB,MAAOG,EAQT,OALAA,GAAOe,EAAWlB,GAClBwB,EAAOiB,MAAMhP,KAAK0M,GAElBuC,EAAgBlB,EAAQrB,GAEjBA,IAKX,QAASuC,GAAgBlB,EAAQrB,GAC/BwC,EAAenB,EAAQrB,EACrBhQ,EAAQyH,UAEPmD,KAAK,WACJ,MAAOyG,GAAOa,UAAUO,QAAS5C,KAAMG,EAAKH,KAAMsB,SAAUnB,EAAKmB,cAMvE,QAASqB,GAAenB,EAAQrB,EAAMzB,GACpCmE,EAAmBrB,EAAQrB,EACzBzB,EAEC3D,KAAK,SAASqF,GAEb,MAAmB,WAAfD,EAAKgB,QAEThB,EAAKC,QAAUA,EAERoB,EAAOa,UAAUS,OAAQ9C,KAAMG,EAAKH,KAAMsB,SAAUnB,EAAKmB,SAAUlB,QAASA,KAJnF,UAYN,QAASyC,GAAmBrB,EAAQrB,EAAMzB,GACxCA,EAEC3D,KAAK,SAASgH,GACb,MAAmB,WAAf5B,EAAKgB,OAGFhR,EAAQyH,QAAQ4J,EAAOa,UAAUU,WAAY/C,KAAMG,EAAKH,KAAMsB,SAAUnB,EAAKmB,SAAUlB,QAASD,EAAKC,QAAS2B,OAAQA,KAG5HhH,KAAK,SAASgH,GAEb,MADA5B,GAAK4B,OAASA,EACPP,EAAOa,UAAUW,aAAchD,KAAMG,EAAKH,KAAMsB,SAAUnB,EAAKmB,SAAUlB,QAASD,EAAKC,QAAS2B,OAAQA,MAIhHhH,KAAK,SAASkI,GACb,GAA0BC,SAAtBD,EAKF,MAJA9C,GAAKC,QAAUD,EAAKC,SAAW,wBAAyB+C,EAAU,IAGlEhD,EAAKiD,eAAgB,EACd5B,EAAOa,UAAUgB,UAAUlD,GACjCpF,KAAK,SAASuI,GAEb,GAAIC,GAAY5D,SAAS6D,OACrBC,EAAcF,EAAUG,QAC5BH,GAAUG,SAAW,SAAS1D,EAAM2D,EAAMC,GACrB,gBAAR5D,KACT4D,EAAUD,EACVA,EAAO3D,GAITG,EAAKyD,QAAUA,EACfzD,EAAK0D,SAAWF,GAElB/D,OAAO0D,EAAY3D,SAAUQ,GAC7BoD,EAAUG,SAAWD,GAGpB,IAAgC,gBAArBR,GAMd,KAAMtI,WAAU,mCALhBwF,GAAK0D,SAAWZ,EAAkBU,SAClCxD,EAAK2D,QAAUb,EAAkBa,QACjC3D,EAAKiD,eAAgB,IAMxBrI,KAAK,WACJoF,EAAKkB,eAIL,KAAK,GAHDwC,GAAW1D,EAAK0D,SAEhBE,KACKjT,EAAI,EAAG0R,EAAIqB,EAAS3S,OAAYsR,EAAJ1R,EAAOA,KAAK,SAAUoR,EAAS8B,GAClED,EAAatQ,KACXwO,EAAYT,EAAQU,EAAS/B,EAAKH,KAAMG,EAAKC,SAG5CrF,KAAK,SAASkJ,GASb,GALA9D,EAAKkB,aAAa2C,IAChBlG,IAAKoE,EACLrO,MAAOoQ,EAAQjE,MAGK,UAAlBiE,EAAQ9C,OAEV,IAAK,GADDC,GAAWjB,EAAKiB,SAAS8C,WACpBpT,EAAI,EAAG0R,EAAIpB,EAASlQ,OAAYsR,EAAJ1R,EAAOA,IAC1CqT,EAAiB/C,EAAStQ,GAAImT,QAOrCJ,EAAS/S,GAAIA,EAEhB,OAAOX,GAAQ6I,IAAI+K,KAIpBhJ,KAAK,WAMJoF,EAAKgB,OAAS,QAGd,KAAK,GADDC,GAAWjB,EAAKiB,SAAS8C,WACpBpT,EAAI,EAAG0R,EAAIpB,EAASlQ,OAAYsR,EAAJ1R,EAAOA,IAC1CsT,EAAoBhD,EAAStQ,GAAIqP,KA3FrC,SA+FD,SAAS,SAASkE,GACjBlE,EAAKgB,OAAS,SACdhB,EAAKmE,UAAYD,CAGjB,KAAK,GADDjD,GAAWjB,EAAKiB,SAAS8C,WACpBpT,EAAI,EAAG0R,EAAIpB,EAASlQ,OAAYsR,EAAJ1R,EAAOA,IAC1CyT,EAAcnD,EAAStQ,GAAIqP,EAAMkE,KAUvC,QAAS3C,GAA6B8C,GACpC,MAAO,UAAS5M,GACd,GAAI4J,GAASgD,EAAUhD,OACnBxB,EAAOwE,EAAU5C,WACjBD,EAAO6C,EAAU7C,IAErB,IAAIH,EAAOe,QAAQvC,GACjB,KAAM,IAAIrF,WAAU,IAAMqF,EAAO,uCAInC,KAAK,GADDyE,GACK3T,EAAI,EAAG0R,EAAIhB,EAAOiB,MAAMvR,OAAYsR,EAAJ1R,EAAOA,IAC9C,GAAI0Q,EAAOiB,MAAM3R,GAAGkP,MAAQA,EAQ1B,MAPAyE,GAAejD,EAAOiB,MAAM3R,GAEjB,aAAR6Q,GAAwB8C,EAAa1C,SACtC0C,EAAarE,QAAUoE,EAAUxC,cACjCa,EAAmBrB,EAAQiD,EAActU,EAAQyH,QAAQ4M,EAAU1C,gBAG9D2C,EAAarD,SAAS,GAAGsD,KAAK3J,KAAK,WACxCnD,EAAQ6M,IAKd,IAAItE,GAAOe,EAAWlB,EAEtBG,GAAKmB,SAAWkD,EAAU3C,cAE1B,IAAI8C,GAAUC,EAAcpD,EAAQrB,EAEpCqB,GAAOiB,MAAMhP,KAAK0M,GAElBvI,EAAQ+M,EAAQD,MAEJ,UAAR/C,EACFe,EAAgBlB,EAAQrB,GAET,SAARwB,EACPgB,EAAenB,EAAQrB,EAAMhQ,EAAQyH,QAAQ4M,EAAUxC,iBAIvD7B,EAAKC,QAAUoE,EAAUxC,cACzBa,EAAmBrB,EAAQrB,EAAMhQ,EAAQyH,QAAQ4M,EAAU1C,iBAWjE,QAAS8C,GAAcpD,EAAQqD,GAC7B,GAAIF,IACFnD,OAAQA,EACRiB,SACAoC,aAAcA,EACdC,aAAc,EAOhB,OALAH,GAAQD,KAAO,GAAIvU,GAAQ,SAASyH,EAASG,GAC3C4M,EAAQ/M,QAAUA,EAClB+M,EAAQ5M,OAASA,IAEnBoM,EAAiBQ,EAASE,GACnBF,EAGT,QAASR,GAAiBQ,EAASxE,GAGjC,IAAK,GAAIrP,GAAI,EAAG0R,EAAImC,EAAQlC,MAAMvR,OAAYsR,EAAJ1R,EAAOA,IAC/C,GAAI6T,EAAQlC,MAAM3R,IAAMqP,EACtB,MAEJwE,GAAQlC,MAAMhP,KAAK0M,GACnBA,EAAKiB,SAAS3N,KAAKkR,GAGA,UAAfxE,EAAKgB,QACPwD,EAAQG,cAKV,KAAK,GAFDtD,GAASmD,EAAQnD,OAEZ1Q,EAAI,EAAG0R,EAAIrC,EAAKkB,aAAanQ,OAAYsR,EAAJ1R,EAAOA,IAAK,CACxD,GAAIkP,GAAOG,EAAKkB,aAAavQ,GAAG+C,KAEhC,KAAI2N,EAAOe,QAAQvC,GAGnB,IAAK,GAAI+E,GAAI,EAAGC,EAAIxD,EAAOiB,MAAMvR,OAAY8T,EAAJD,EAAOA,IAC9C,GAAIvD,EAAOiB,MAAMsC,GAAG/E,MAAQA,EAA5B,CAGAmE,EAAiBQ,EAASnD,EAAOiB,MAAMsC,GACvC,SASN,QAASE,GAAON,GACd,GAAIjQ,IAAQ,CACZ,KACEwQ,EAAKP,EAAS,SAASxE,EAAMkE,GAC3BE,EAAcI,EAASxE,EAAMkE,GAC7B3P,GAAQ,IAGZ,MAAM7E,GACJ0U,EAAcI,EAAS,KAAM9U,GAC7B6E,GAAQ,EAEV,MAAOA,GAIT,QAAS0P,GAAoBO,EAASxE,GAQpC,GAFAwE,EAAQG,iBAEJH,EAAQG,aAAe,GAA3B,CAIA,GAAID,GAAeF,EAAQE,YAK3B,IAAIF,EAAQnD,OAAOa,UAAUyB,WAAY,EAAO,CAE9C,IAAK,GADDrB,MAAWyB,OAAOS,EAAQlC,OACrB3R,EAAI,EAAG0R,EAAIC,EAAMvR,OAAYsR,EAAJ1R,EAAOA,IAAK,CAC5C,GAAIqP,GAAOsC,EAAM3R,EACjBqP,GAAKpQ,OAAUoQ,EAAKiD,eAGlBpD,KAAMG,EAAKH,KACXjQ,OAAQoV,MACRC,WAAW,IAJXrV,OAAQoV,OAMVhF,EAAKgB,OAAS,SACdkE,EAAWV,EAAQnD,OAAQrB,GAE7B,MAAOwE,GAAQ/M,QAAQiN,GAIzB,GAAIS,GAASL,EAAON,EAEhBW,IAKJX,EAAQ/M,QAAQiN,IAIlB,QAASN,GAAcI,EAASxE,EAAMkE,GACpC,GAAI7C,GAASmD,EAAQnD,MAEjBmD,GAAQlC,MAAM,GAAGzC,MAAQG,EAAKH,OAChCqE,EAAMkB,EAAWlB,EAAK,kBAAoBlE,EAAKH,KAAO,WAAa2E,EAAQlC,MAAM,GAAGzC,KAAO,SAAW2E,EAAQlC,MAAM,GAAGrC,SAAW,aAAe,OAEnJiE,EAAMkB,EAAWlB,EAAK,kBAAoBlE,EAAKH,KAAO,SAAWG,EAAKC,SAAW,aAAe,KAGhG,KAAK,GADDqC,GAAQkC,EAAQlC,MAAMyB,WACjBpT,EAAI,EAAG0R,EAAIC,EAAMvR,OAAYsR,EAAJ1R,EAAOA,IAAK,CAC5C,GAAIqP,GAAOsC,EAAM3R,EAGjB0Q,GAAOa,UAAUmD,OAAShE,EAAOa,UAAUmD,WACQ,IAA/CzR,EAAQ9C,KAAKuQ,EAAOa,UAAUmD,OAAQrF,IACxCqB,EAAOa,UAAUmD,OAAO/R,KAAK0M,EAE/B,IAAIsF,GAAY1R,EAAQ9C,KAAKkP,EAAKiB,SAAUuD,EAG5C,IADAxE,EAAKiB,SAASpN,OAAOyR,EAAW,GACJ,GAAxBtF,EAAKiB,SAASlQ,OAAa,CAC7B,GAAIwU,GAAmB3R,EAAQ9C,KAAK0T,EAAQnD,OAAOiB,MAAOtC,EAClC,KAApBuF,GACFf,EAAQnD,OAAOiB,MAAMzO,OAAO0R,EAAkB,IAGpDf,EAAQ5M,OAAOsM,GAIjB,QAASgB,GAAW7D,EAAQrB,GAE1B,GAAIqB,EAAOa,UAAUsD,MAAO,CACrBnE,EAAOa,UAAUI,QACpBjB,EAAOa,UAAUI,SACnB,IAAImD,KACJzF,GAAKkB,aAAawE,QAAQ,SAASC,GACjCF,EAAOE,EAAIhI,KAAOgI,EAAIjS,QAExB2N,EAAOa,UAAUI,MAAMtC,EAAKH,OAC1BA,KAAMG,EAAKH,KACX2D,KAAMxD,EAAKkB,aAAa0E,IAAI,SAASD,GAAM,MAAOA,GAAIhI,MACtD8H,OAAQA,EACRxF,QAASD,EAAKC,QACdkB,SAAUnB,EAAKmB,SACfS,OAAQ5B,EAAK4B,OACbiE,KAAM7F,EAAKiD,cAAgB,cAAgB,WAI3CjD,EAAKH,OAEPwB,EAAOe,QAAQpC,EAAKH,MAAQG,EAAKpQ,OAEnC,IAAIkW,GAAYlS,EAAQ9C,KAAKuQ,EAAOiB,MAAOtC,EAC1B,KAAb8F,GACFzE,EAAOiB,MAAMzO,OAAOiS,EAAW,EACjC,KAAK,GAAInV,GAAI,EAAG0R,EAAIrC,EAAKiB,SAASlQ,OAAYsR,EAAJ1R,EAAOA,IAC/CmV,EAAYlS,EAAQ9C,KAAKkP,EAAKiB,SAAStQ,GAAG2R,MAAOtC,GAChC,IAAb8F,GACF9F,EAAKiB,SAAStQ,GAAG2R,MAAMzO,OAAOiS,EAAW,EAE7C9F,GAAKiB,SAASpN,OAAO,EAAGmM,EAAKiB,SAASlQ,QAUxC,QAASgV,GAAmB/F,EAAMsC,EAAO0D,GAKvC,GAJAA,EAAOhG,EAAKiG,YAAcD,EAAOhG,EAAKiG,gBAIa,IAA/CrS,EAAQ9C,KAAKkV,EAAOhG,EAAKiG,YAAajG,GAA1C,CAIAgG,EAAOhG,EAAKiG,YAAY3S,KAAK0M,EAE7B,KAAK,GAAIrP,GAAI,EAAG0R,EAAIC,EAAMvR,OAAYsR,EAAJ1R,EAAOA,IAIvC,IAAK,GAHDuV,GAAU5D,EAAM3R,GAGXiU,EAAI,EAAGA,EAAI5E,EAAKkB,aAAanQ,OAAQ6T,IAC5C,GAAIsB,EAAQrG,MAAQG,EAAKkB,aAAa0D,GAAGlR,MAAO,CAM9C,GAAIyS,GAAoBnG,EAAKiG,YAAcC,EAAQjD,eAAiBjD,EAAKiD,cAGzE,IAA2BF,SAAvBmD,EAAQD,YAA4BC,EAAQD,WAAaE,EAAmB,CAG9E,GAA2BpD,SAAvBmD,EAAQD,aACVD,EAAOE,EAAQD,YAAYpS,OAAOD,EAAQ9C,KAAKkV,EAAOE,EAAQD,YAAaC,GAAU,GAG5C,GAArCF,EAAOE,EAAQD,YAAYlV,QAC7B,KAAM,IAAIyJ,WAAU,kCAGxB0L,GAAQD,WAAaE,EAGvBJ,EAAmBG,EAAS5D,EAAO0D,KAM3C,QAASI,GAAiB5B,EAASxE,EAAMqG,GACvC,IACE,GAAIzW,GAASoQ,EAAK2D,UAEpB,MAAMjU,GAEJ,WADA2W,GAAUrG,EAAMtQ,GAGlB,MAAKE,IAAYA,YAAkB0W,GAG1B1W,MAFPyW,GAAUrG,EAAM,GAAIxF,WAAU,4CAMlC,QAASuK,GAAKP,EAAS6B,GAErB,GAAIhF,GAASmD,EAAQnD,MAErB,IAAKmD,EAAQlC,MAAMvR,OAAnB,CAWA,GAAIiV,MACAtB,EAAeF,EAAQlC,MAAM,EACjCoC,GAAauB,WAAa,EAC1BF,EAAmBrB,EAAcF,EAAQlC,MAAO0D,EAMhD,KAAK,GAHDO,GAAsB7B,EAAazB,eAAiB+C,EAAOjV,OAAS,EAG/DJ,EAAIqV,EAAOjV,OAAS,EAAGJ,GAAK,EAAGA,IAAK,CAE3C,IAAK,GADD6V,GAAQR,EAAOrV,GACViU,EAAI,EAAGA,EAAI4B,EAAMzV,OAAQ6T,IAAK,CACrC,GAAI5E,GAAOwG,EAAM5B,EAGjB,IAAI2B,EACFE,EAAsBzG,EAAMwE,EAAQlC,MAAOjB,OAGxC,CACH,GAAIzR,GAASwW,EAAiB5B,EAASxE,EAAMqG,EAC7C,KAAKzW,EACH,MACFoQ,GAAKpQ,QACHiQ,KAAMG,EAAKH,KACXjQ,OAAQA,GAEVoQ,EAAKgB,OAAS,SAEhBkE,EAAW7D,EAAQrB,GAIrBuG,GAAuBA,IAO3B,QAASG,GAAwB7G,EAAMwB,GACrC,GAAIsF,GAAgBtF,EAAOsF,aAC3B,OAAOA,GAAc9G,KAAU8G,EAAc9G,IAC3CA,KAAMA,EACNqB,gBACAtR,OAAQ,GAAI0W,GACZM,eAKJ,QAASH,GAAsBzG,EAAMsC,EAAOjB,GAC1C,IAAIrB,EAAKpQ,OAAT,CAGA,GAAIA,GAASoQ,EAAKpQ,OAAS8W,EAAwB1G,EAAKH,KAAMwB,GAC1DwF,EAAY7G,EAAKpQ,OAAOA,OAExBkX,EAAgB9G,EAAKyD,QAAQ3S,KAAK0O,SAAU,SAASK,EAAMnM,GAI7D9D,EAAOmX,QAAS,EAChBF,EAAUhH,GAAQnM,CAElB,KAAK,GAAI/C,GAAI,EAAG0R,EAAIzS,EAAOgX,UAAU7V,OAAYsR,EAAJ1R,EAAOA,IAAK,CACvD,GAAIqW,GAAiBpX,EAAOgX,UAAUjW,EACtC,KAAKqW,EAAeD,OAAQ,CAC1B,GAAIE,GAAgBrT,EAAQ9C,KAAKkW,EAAe9F,aAActR,EAC9DoX,GAAeE,QAAQD,GAAeJ,IAK1C,MADAjX,GAAOmX,QAAS,EACTrT,GAIT9D,GAAOsX,QAAUJ,EAAcI,QAC/BtX,EAAO+T,QAAUmD,EAAcnD,OAI/B,KAAK,GAAIhT,GAAI,EAAG0R,EAAIrC,EAAKkB,aAAanQ,OAAYsR,EAAJ1R,EAAOA,IAAK,CACxD,GAAIwW,GAAUnH,EAAKkB,aAAavQ,GAAG+C,MAC/B0T,EAAY/F,EAAOe,QAAQ+E,EAI/B,KAAKC,EAEH,IAAK,GAAIxC,GAAI,EAAGA,EAAItC,EAAMvR,OAAQ6T,IAC5BtC,EAAMsC,GAAG/E,MAAQsH,IAIhB7E,EAAMsC,GAAGhV,OAMZwX,EAAYV,EAAwBS,EAAS9F,IAL7CoF,EAAsBnE,EAAMsC,GAAItC,EAAOjB,GACvC+F,EAAY9E,EAAMsC,GAAGhV,QAUvBwX,GAAUR,WACZhX,EAAOsR,aAAa5N,KAAK8T,GACzBA,EAAUR,UAAUtT,KAAK1D,IAIzBA,EAAOsR,aAAa5N,KAAK,MAIvB1D,EAAOsX,QAAQvW,IACjBf,EAAOsX,QAAQvW,GAAGyW,EAAUxX,QAGhCoQ,EAAKgB,OAAS,UAYhB,QAASqG,GAAqBhG,EAAQrB,GAIpC,MADAsH,GAAkBtH,EAAKpQ,UAAYyR,GAC5BrB,EAAKpQ,OAAOA,OAYrB,QAAS2X,GAAU3X,GACjB,IACEA,EAAO+T,QAAQ7S,KAAK0O,UAEtB,MAAM9P,GACJ,MAAOA,IAMX,QAAS4X,GAAkB1X,EAAQ4X,EAAMnG,GACvC,GAAIoG,GAAMC,EAAgB9X,EAAQ4X,EAAMnG,EACxC,IAAIoG,EACF,KAAMA,GAGV,QAASC,GAAgB9X,EAAQ4X,EAAMnG,GACrC,IAAIzR,EAAOqV,WAAcrV,EAAOsR,aAAhC,CAGAsG,EAAKlU,KAAK1D,EAKV,KAAK,GAFD6X,GADAjE,EAAO5T,EAAOsR,aAGTvQ,EAAI,EAAG0R,EAAImB,EAAKzS,OAAYsR,EAAJ1R,EAAOA,IAAK,CAC3C,GAAIgV,GAAMnC,EAAK7S,EAGf,IAAKgV,GAE0B,IAA3B/R,EAAQ9C,KAAK0W,EAAM7B,KACrB8B,EAAMC,EAAgB/B,EAAK6B,EAAMnG,IAI/B,MADAoG,GAAMrC,EAAWqC,EAAK,oBAAsB9B,EAAI9F,KAAO,MAM7D,GAAIjQ,EAAOyV,OACT,MAAO,IAAIzU,OAAM,2BAEnB,KAAIhB,EAAOqV,UAgBX,MAbArV,GAAOqV,WAAY,EACnBwC,EAAMF,EAAU3X,GACZ6X,EACF7X,EAAOyV,QAAS,EAETrH,OAAO2J,mBAId3J,OAAO2J,kBAAkB/X,EAAOA,QAGlCA,EAAO+T,QAAUZ,OACV0E,GAGT,QAASrC,GAAWqC,EAAKG,GAKvB,MAJIH,aAAe7W,OACjB6W,EAAI1H,QAAU6H,EAAMH,EAAI1H,QAExB0H,EAAMG,EAAMH,EACPA,EAMT,QAASI,GAAOvG,GACd,GAAsB,gBAAXA,GACT,KAAM,IAAI9G,WAAU,4BAElB8G,GAAQa,YACVnQ,KAAKmQ,UAAYb,EAAQa,WACvBb,EAAQmB,SACVzQ,KAAKyQ,OAASnB,EAAQmB,QACpBnB,EAAQqB,QACV3Q,KAAK2Q,MAAQrB,EAAQqB,OACnBrB,EAAQsB,YACV5Q,KAAK4Q,UAAYtB,EAAQsB,WACvBtB,EAAQuB,cACV7Q,KAAK6Q,YAAcvB,EAAQuB,aAE7B7Q,KAAK8V,SACH5F,UAAWlQ,KACXsQ,SACAF,WACA2F,kBACApB,kBAIFpG,EAAevO,KAAM,UACnB0O,IAAK,WACH,MAAOlB,aAOb,QAAS8G,MAGT,QAAS0B,GAAoB3G,EAAQxB,EAAMoI,GACzC,GAAIF,GAAiB1G,EAAOyG,QAAQC,cACpC,OAAOA,GAAelI,GAAQoI,EAAQrN,KAAK,SAASsN,GAElD,MADAH,GAAelI,GAAQkD,OAChBmF,GACN,SAASxY,GAEV,KADAqY,GAAelI,GAAQkD,OACjBrT,IArzBV,GAAIM,GAAUwP,SAASxP,SAAWU,QAAQ,wBACtC8O,UAASlL,UACXA,QAAQ6T,OAAS7T,QAAQ6T,QAAU,aAGrC,IAAIvU,GAAUgG,MAAMnH,UAAUmB,SAAW,SAASwU,GAChD,IAAK,GAAIzX,GAAI,EAAG0X,EAAUrW,KAAKjB,OAAYsX,EAAJ1X,EAAaA,IAClD,GAAIqB,KAAKrB,KAAOyX,EACd,MAAOzX,EAGX,OAAO,IAEL4P,EAAiBD,yBAyGjB0C,EAAU,CAmsBd6E,GAAOpV,WAEL0K,YAAa0K,EAEbhY,OAAQ,SAASgQ,EAAM+B,EAAQN,GAE7B,GAAItP,KAAK8V,QAAQC,eAAelI,GAC9B,KAAM,IAAIrF,WAAU,6BACtB,OAAOwN,GAAoBhW,KAAM6N,EAAM,GAAI7P,GAAQuR,GACjDC,KAAM,YACNH,OAAQrP,KAAK8V,QACbrG,WAAY5B,EACZ6B,eAAgBJ,GAAWA,EAAQH,aACnCQ,aAAcC,EACdC,cAAeP,GAAWA,EAAQrB,aAItCqI,SAAU,SAASzI,GACjB,GAAIwB,GAASrP,KAAK8V,OAGlB,cAFOzG,GAAO0G,eAAelI,SACtBwB,GAAOsF,cAAc9G,GACrBwB,EAAOe,QAAQvC,SAAewB,GAAOe,QAAQvC,IAAQ,GAI9Da,IAAK,SAAS/C,GACZ,MAAK3L,MAAK8V,QAAQ1F,QAAQzE,IAE1B2J,EAAkBtV,KAAK8V,QAAQ1F,QAAQzE,MAAU3L,MAC1CA,KAAK8V,QAAQ1F,QAAQzE,GAAK/N,QAHjC,QAMF2Y,IAAK,SAAS1I,GACZ,QAAS7N,KAAK8V,QAAQ1F,QAAQvC,IAGhC2I,SAAU,SAAS3I,EAAMyB,GAEvB,GAAIY,GAAYlQ,IAGhB,OAAOhC,GAAQyH,QAAQyK,EAAUC,UAAUtC,EAAMyB,GAAWA,EAAQzB,KAAMyB,GAAWA,EAAQrB,UAC5FrF,KAAK,SAASiF,GACb,GAAIwB,GAASa,EAAU4F,OAEvB,OAAIzG,GAAOe,QAAQvC,IACjByH,EAAkBjG,EAAOe,QAAQvC,MAAWwB,EAAOyG,SAC5CzG,EAAOe,QAAQvC,GAAMjQ,QAGvByR,EAAO0G,eAAelI,IAASmI,EAAoB9F,EAAWrC,EACnEuB,EAAWC,EAAQxB,EAAMyB,OACxB1G,KAAK,SAASoF,GAEb,aADOqB,GAAO0G,eAAelI,GACtBwH,EAAqBhG,EAAQrB,SAM5CA,KAAM,SAASH,GACb,MAAI7N,MAAK8V,QAAQ1F,QAAQvC,IACvByH,EAAkBtV,KAAK8V,QAAQ1F,QAAQvC,MAAW7N,KAAK8V,SAChD9X,EAAQyH,QAAQzF,KAAK8V,QAAQ1F,QAAQvC,GAAMjQ,SAE7CoC,KAAK8V,QAAQC,eAAelI,IAASmI,EAAoBhW,KAAM6N,EAAMuB,EAAWpP,KAAK8V,QAASjI,QAGvGjQ,OAAQ,SAASgS,EAAQN,GACvB,GAAItB,GAAOe,GACXf,GAAKC,QAAUqB,GAAWA,EAAQrB,OAClC,IAAIuE,GAAUC,EAAczS,KAAK8V,QAAS9H,GACtCyI,EAAgBzY,EAAQyH,QAAQmK,GAChCP,EAASrP,KAAK8V,QACdvJ,EAAIiG,EAAQD,KAAK3J,KAAK,WACxB,MAAOyM,GAAqBhG,EAAQrB,IAGtC,OADA0C,GAAmBrB,EAAQrB,EAAMyI,GAC1BlK,GAGTmK,UAAW,SAAUtI,GACnB,GAAkB,gBAAPA,GACT,KAAM,IAAI5F,WAAU,kBAItB,IAAI0N,GAAI,GAAI5B,EAEZ,KAAK,GAAI3I,KAAOyC,IACd,SAAWzC,GACT4C,EAAe2H,EAAGvK,GAChBgL,cAAc,EACdC,YAAY,EACZlI,IAAK,WACH,MAAON,GAAIzC,OAGdA,EAML,OAHIK,QAAO2J,mBACT3J,OAAO2J,kBAAkBO,GAEpBA,GAGTW,IAAK,SAAShJ,EAAMjQ,GAClB,KAAMA,YAAkB0W,IACtB,KAAM,IAAI9L,WAAU,cAAgBqF,EAAO,6BAC7C7N,MAAK8V,QAAQ1F,QAAQvC,IACnBjQ,OAAQA,IAQZuS,UAAW,SAAStC,GAClB,MAAOA,IAGT4C,OAAQ,SAASzC,GACf,MAAOA,GAAKH,MAGd8C,MAAO,WACL,KAAM,IAAInI,WAAU,0BAGtBoI,UAAW,SAAS5C,GAClB,MAAOA,GAAK4B,QAGdiB,YAAa,aAIf,IAAImC,GAAa6C,EAAOpV,UAAUiW,SAEX,iBAAZ/Y,WACTC,OAAOD,QAAUkY,GAEnBrI,SAASsJ,QAAUtJ,SAASsJ,YAC5BtJ,SAASsJ,QAAQjB,OAASrI,SAASsJ,QAAQjB,QAAUA,EACrDrI,SAASsJ,QAAQ7Y,OAASuP,SAASsJ,QAAQ7Y,QAAUuP,SACrDA,SAASuJ,eAAiBlB,KAO5B,SAAUA,GAGR,QAASmB,GAAoB3H,EAAQ4H,GACnC,MAAO5H,GAAOqH,WAAYQ,UAAWC,EAAEF,GAAaG,cAAc,IAgDpE,QAASC,GAAiBrJ,EAAMsJ,GAC9B,GAAIhI,GAAUtP,KAAKuX,kBACnBjI,GAAQc,QAAU,cAClBd,EAAQkI,QAAS,EACjBlI,EAAQmI,WAAa,SACrBnI,EAAQoI,SAAW1J,EAAKC,QACxBqB,EAAQqI,eAAiB3J,EAAKmB,SAASyI,UACvCtI,EAAQG,YAAa,CAErB,IAAIoI,GAAW,GAAIP,GAAQQ,SAASxI,GAChCM,EAASmI,EAAiB/J,EAAK4B,OAAQiI,EAAUvI,EAAQoI,SAM7D,OAFA9H,IAAU,QAIZ,QAASmI,GAAiBnI,EAAQiI,EAAUH,GAC1C,IACE,MAAOG,GAASG,QAAQpI,EAAQ8H,GAElC,MAAMha,GAEJ,KAAMA,GAAE,IAIZ,QAASua,GAAejK,EAAMkK,GAC5B,GAAI5I,GAAUtP,KAAKmY,gBACnB7I,GAAQc,QAAU,SAClBd,EAAQsI,UAAY,SACpBtI,EAAQoI,SAAW1J,EAAKC,QACxBqB,EAAQ8I,MAAO,EACf9I,EAAQ+I,KAAM,EAET/I,EAAQgJ,YACXhJ,EAAQgJ,WAAa,SAEvB,IAAI1I,GAASsI,EAAMK,UAAUvK,EAAK4B,OAAQN,GAAS8I,IAInD,OAAOxI,GAAS,mBAAqB5B,EAAKC,QAAU,QA9FtD,GAAIkJ,GAAI3J,SAKJgL,GAAW,CAGf3C,GAAOpV,UAAUgY,WAAa,UAE9B5C,EAAOpV,UAAUyQ,UAAY,SAASlD,GACpC,GAAI9P,GAAO8B,IAWX,OARIwY,KACErB,EAAEG,UAAYpZ,EAAKqY,IAAI,YACzBrY,EAAK2Y,IAAI,UAAWG,EAAoB9Y,EAAM,YAC5CiZ,EAAEe,QAAUha,EAAKqY,IAAI,UACvBrY,EAAK2Y,IAAI,QAASG,EAAoB9Y,EAAM,UAC9Csa,GAAW,GAGNta,EAAK,UAAUA,EAAKua,YAAY7P,KAAK,SAAS6P,GAGnD,MAFIA,GAAWrB,eACbqB,EAAaA,EAAW,YACnB,0BAA4BzK,EAAKC,QAAU,MAAQwK,EAAWX,SAAWT,EAAmBY,GAAgBnZ,KAAKZ,EAAM8P,EAAMyK,MAIxI5C,EAAOpV,UAAUoQ,YAAc,SAAS7C,GACtC,GAAI9P,GAAO8B,IACX,OAAOhC,SAAQyH,QAAQvH,EAAKiS,UAAUjS,EAAKua,aAC1C7P,KAAK,SAAS8P,GAEb,MAAI1K,GAAKH,OAAS6K,GAEdlH,QACAG,QAAS,WACP,GAAIP,GAAY+F,EAAE9F,OACdsH,EAAYxB,EAAEL,QAAQjB,MAK1B,OAHApI,QAAO,qCAAuCO,EAAK4B,OAAS,QAASuH,EAAGnJ,GACxEmJ,EAAE9F,OAASD,EACX+F,EAAEL,QAAQjB,OAAS8C,EACZ3B,EAAoB9Y,EAAM8P,EAAKH,QAV5C,WAgEHL,SAASuJ,gBAcZ,WAQE,QAAS6B,GAASC,GAChB,GAAI3C,GAAItR,OAAOiU,GAAK/K,QAAQ,aAAc,IAAIgL,MAAM,6GAEpD,OAAQ5C,IACN6C,KAAW7C,EAAE,IAAM,GACnB8C,SAAW9C,EAAE,IAAM,GACnB+C,UAAW/C,EAAE,IAAM,GACnBgD,KAAWhD,EAAE,IAAM,GACnBiD,SAAWjD,EAAE,IAAM,GACnBkD,KAAWlD,EAAE,IAAM,GACnBmD,SAAWnD,EAAE,IAAM,GACnBoD,OAAWpD,EAAE,IAAM,GACnBqD,KAAWrD,EAAE,IAAM,IACjB,KAGN,QAASsD,GAAkBC,GACzB,GAAIC,KAUJ,OATAD,GAAM3L,QAAQ,kBAAmB,IAC9BA,QAAQ,iBAAkB,KAC1BA,QAAQ,UAAW,QACnBA,QAAQ,aAAc,SAAUvB,GACrB,QAANA,EACFmN,EAAOC,MAEPD,EAAOpY,KAAKiL,KAEXmN,EAAO/S,KAAK,IAAImH,QAAQ,MAA2B,MAApB2L,EAAMG,OAAO,GAAa,IAAM,IAGxE,QAASC,GAAcC,EAAMf,GAQ3B,MANIgB,KACFhB,EAAOA,EAAKjL,QAAQ,MAAO,MAE7BiL,EAAOH,EAASG,GAAQ,IACxBe,EAAOlB,EAASkB,GAAQ,IAEhBf,GAASe,GAAef,EAAKC,UAAYc,EAAKd,WACnDD,EAAKC,UAAYD,EAAKE,UAAYF,EAAKE,UAAYa,EAAKb,WACzDO,EAAkBT,EAAKC,UAAYD,EAAKE,WAAyC,MAA5BF,EAAKM,SAASO,OAAO,GAAab,EAAKM,SAAYN,EAAKM,UAAaS,EAAKb,YAAca,EAAKT,SAAW,IAAM,IAAMS,EAAKT,SAASW,MAAM,EAAGF,EAAKT,SAASY,YAAY,KAAO,GAAKlB,EAAKM,SAAYS,EAAKT,WAC3PN,EAAKC,UAAYD,EAAKE,WAAaF,EAAKM,SAAWN,EAAKO,OAAUP,EAAKO,QAAUQ,EAAKR,QACvFP,EAAKQ,KAJiB,KAiQxB,QAASW,KACPxW,SAASyW,oBAAqB,mBAAoBD,GAAW,GAC7Dnc,OAAOoc,oBAAqB,OAAQD,GAAW,GAC/CE,IAGF,QAASA,KAEP,IAAK,GADDC,GAAU3W,SAAS4W,qBAAqB,UACnC3b,EAAI,EAAGA,EAAI0b,EAAQtb,OAAQJ,IAAK,CACvC,GAAI6Y,GAAS6C,EAAQ1b,EACrB,IAAmB,UAAf6Y,EAAOlM,KAAkB,CAC3B,GAAIsE,GAAS4H,EAAO+C,UAAUC,OAAO,EAIrChN,UAAS6D,OAAOzT,OAAOgS,GAAQ,SAAS,SAAS6F,GAAOxR,WAAW,WAAa,KAAMwR,SA7T9F,GAoDIgF,GApDAC,EAA2B,mBAATxc,OAAqD,mBAAtByc,oBAAqCzc,eAAgByc,mBACtGC,EAA6B,mBAAV7c,UAA0B2c,EAC7CX,EAA8B,mBAAX7W,YAA4BA,QAAQ2X,SAAS/B,MAAM,QACtE9a,EAAUwP,SAASxP,SAAWU,QAAQ,wBAmD1C,IAA6B,mBAAlBoc,gBACTL,EAAmB,SAAS5B,EAAKkC,EAASnV,GAsBxC,QAASoI,KACP+M,EAAQC,EAAIC,cAEd,QAAS1Y,KACPqD,EAAOoV,EAAIE,WAAa,KAAOrC,GAAO,aAzBxC,GAAImC,GAAM,GAAIF,gBACVK,GAAa,EACbC,GAAY,CAChB,MAAM,mBAAqBJ,IAAM,CAE/B,GAAIK,GAAc,uBAAuBC,KAAKzC,EAC1CwC,KACFF,EAAaE,EAAY,KAAOtd,OAAOwd,SAASrC,KAC5CmC,EAAY,KACdF,GAAcE,EAAY,KAAOtd,OAAOwd,SAASvC,WAGlDmC,GAAuC,mBAAlBK,kBACxBR,EAAM,GAAIQ,gBACVR,EAAIS,OAASzN,EACbgN,EAAIU,QAAUnZ,EACdyY,EAAIW,UAAYpZ,EAChByY,EAAIY,WAAa,aACjBZ,EAAIa,QAAU,EACdT,GAAY,GASdJ,EAAIc,mBAAqB,WACA,IAAnBd,EAAIe,aACa,MAAff,EAAIhM,QAAiC,GAAdgM,EAAIhM,QAAegM,EAAIC,aAChDjN,IAEAzL,MAINyY,EAAIgB,KAAK,MAAOnD,GAAK,GAEjBuC,GACFnX,WAAW,WACT+W,EAAIiB,QACH,GAELjB,EAAIiB,KAAK,WAGR,CAAA,GAAsB,mBAAXvd,SAkBd,KAAM,IAAI8J,WAAU,sCAjBpB,IAAI0T,EACJzB,GAAmB,SAAS5B,EAAKkC,EAASnV,GACxC,GAAwB,SAApBiT,EAAI2B,OAAO,EAAG,GAChB,KAAM,2DAKR,OAJA0B,GAAKA,GAAMxd,QAAQ,MACnBma,EAAMA,EAAI2B,OAAO,GACbT,IACFlB,EAAMA,EAAI/K,QAAQ,MAAO,OACpBoO,EAAGC,SAAStD,EAAK,SAASpD,EAAK3R,GACpC,MAAI2R,GACK7P,EAAO6P,OAEdsF,GAAQjX,EAAO,OAQvB,GAAIsY,GAAe,SAASC,GAC1B,QAASD,GAAa9M,GAIpB,GAHA+M,EAASvd,KAAKkB,KAAMsP,OAGG,mBAAZiM,WAA2BA,SAASxC,KAAM,CACnD,GAAIA,GAAOvL,SAAS+N,SAASxC,KAAKuD,MAAM,KAAK,GAAGA,MAAM,KAAK,EAC3Dtc,MAAKuc,QAAUxD,EAAKyD,UAAU,EAAGzD,EAAKkB,YAAY,KAAO,OAEtD,CAAA,GAAsB,mBAAX/W,WAA0BA,QAAQuZ,IAMhD,KAAM,IAAIjU,WAAU,yBALpBxI,MAAKuc,QAAU,QAAUrZ,QAAQuZ,MAAQ,IACrC1C,IACF/Z,KAAKuc,QAAUvc,KAAKuc,QAAQzO,QAAQ,MAAO,MAK/C9N,KAAK0c,OAAUC,IAAK,QAgJtB,MA7IAP,GAAa/N,UAA0B,OAAbgO,EAAoBA,EAAWO,SAASnc,UAClE2b,EAAa3b,UAAYkO,iBAA+B,OAAb0N,EAAoBA,EAAS5b,UAAY,MAEpF6N,yBAAyB8N,EAAa3b,UAAW,eAC/CiB,MAAO0a,IAGT9N,yBAAyB8N,EAAa3b,UAAW,UAC/CiO,IAAK,WACH,MAAOkM,GAAY7c,OAAU2c,EAAWxc,KAAOsP,UAGjDoJ,YAAY,IAGdtI,yBAAyB8N,EAAa3b,UAAW,UAC/CiO,IAAK,WAAa,OAAO,GACzBkI,YAAY,IAGdtI,yBAAyB8N,EAAa3b,UAAW,aAC/CiB,MAAO,SAASmM,EAAMgP,GACpB,GAAmB,gBAARhP,GACT,KAAM,IAAIrF,WAAU,+BAEtB,IAAIsU,GAAWjP,EAAKyO,MAAM,IAE1B,IAAuB,GAAnBQ,EAAS/d,OACX,KAAM,IAAIyJ,WAAU,0BAGtB,IAAI7J,GAAI,EAEJoe,GAAM,EAENC,EAAU,CACd,IAAmB,KAAfF,EAAS,GAAW,CAEtB,GADAne,IACIA,GAAKme,EAAS/d,OAChB,KAAM,IAAIyJ,WAAU,wBAA0BqF,EAAO,IACvDkP,IAAM,MAEH,CACH,KAAsB,MAAfD,EAASne,IAEd,GADAA,IACIA,GAAKme,EAAS/d,OAChB,KAAM,IAAIyJ,WAAU,wBAA0BqF,EAAO,IAErDlP,KACFoe,GAAM,GACRC,EAAUre,EAGZ,IAAK,GAAIiU,GAAIjU,EAAGiU,EAAIkK,EAAS/d,OAAQ6T,IAAK,CACxC,GAAIqK,GAAUH,EAASlK,EACvB,IAAe,IAAXqK,GAA4B,KAAXA,GAA6B,MAAXA,EACrC,KAAM,IAAIzU,WAAU,wBAA0BqF,EAAO,KAGzD,IAAKkP,EACH,MAAOlP,EAGT,EAAA,GAAIqP,MACAC,GAAeN,GAAc,IAAIP,MAAM,IACvBa,GAAYpe,OAAS,EAAIie,EAK7C,MAHAE,GAAkBA,EAAgBnL,OAAOoL,EAAYtb,OAAO,EAAGsb,EAAYpe,OAAS,EAAIie,IACxFE,EAAkBA,EAAgBnL,OAAO+K,EAASjb,OAAOlD,EAAGme,EAAS/d,OAASJ,IAEvEue,EAAgBvW,KAAK,MAG9BiQ,YAAY,EACZwG,UAAU,IAGZ9O,yBAAyB8N,EAAa3b,UAAW,UAC/CiB,MAAO,SAASsM,GACd,GAKoBqP,GALhBxP,EAAOG,EAAKH,KAKZyP,EAAY,EAGhB,KAAK,GAAI/Q,KAAKvM,MAAK0c,MAAO,CACxB,GAAIa,GAAYhR,EAAE+P,MAAM,IACxB,IAAIiB,EAAUxe,OAAS,EACrB,KAAM,IAAIyJ,WAAU,2CAGtB,IAAwB,GAApB+U,EAAUxe,QACZ,GAAI8O,GAAQtB,GAAKA,EAAExN,OAASue,EAAUve,OAAQ,CAC5Cue,EAAY/Q,CACZ,YAMEsB,GAAK2M,OAAO,EAAG+C,EAAU,GAAGxe,SAAWwe,EAAU,IAAM1P,EAAK2M,OAAO3M,EAAK9O,OAASwe,EAAU,GAAGxe,SAAWwe,EAAU,KACrHD,EAAY/Q,EACZ8Q,EAAWxP,EAAK2M,OAAO+C,EAAU,GAAGxe,OAAQ8O,EAAK9O,OAASwe,EAAU,GAAGxe,OAASwe,EAAU,GAAGxe,SAKnG,GAAIye,GAAUxd,KAAK0c,MAAMY,EAWzB,OAVID,KACFG,EAAUA,EAAQ1P,QAAQ,IAAKuP,IAM7BzC,IACF4C,EAAUA,EAAQ1P,QAAQ,KAAM,QAE3B+L,EAAc7Z,KAAKuc,QAASiB,IAGrC5G,YAAY,EACZwG,UAAU,IAGZ9O,yBAAyB8N,EAAa3b,UAAW,SAC/CiB,MAAO,SAASsM,GACd,GAAI9P,GAAO8B,IACX,OAAO,IAAIhC,GAAQ,SAASyH,EAASG,GACnC6U,EAAiBZ,EAAc3b,EAAKqe,QAASvO,EAAKC,SAAU,SAAS2B,GACnEnK,EAAQmK,IACPhK,MAIPgR,YAAY,EACZwG,UAAU,IAGLhB,GACP5O,SAASuJ,gBAEP1F,EAAS,GAAI+K,EAUjB,IAPuB,gBAAZze,WACTC,OAAOD,QAAU0T,GAEnB7D,SAAS6D,OAASA,EAIduJ,GAAqD,mBAAjClX,UAAS4W,qBAAqC,CACpE,GAAImD,GAAY/Z,SAAS4W,qBAAqB,SAC9CmD,GAAYA,EAAUA,EAAU1e,OAAS,GAuBb,aAAxB2E,SAASqY,WACX9X,WAAWmW,GAEJ1W,SAASga,mBAChBha,SAASga,iBAAiB,mBAAoBxD,GAAW,GACzDnc,OAAO2f,iBAAiB,OAAQxD,GAAW,IAIzCuD,EAAUE,aAAa,cACzB5f,OAAO0f,EAAUE,aAAa,qBAkBhB,mBAAV5f,QAAwBA,OAAsC,mBAArB4c,mBACRzc,KAAOD"} \ No newline at end of file +{"version":3,"sources":["es6-module-loader.src.js"],"names":["global","URLPolyfill","url","baseURL","TypeError","m","String","replace","match","RangeError","protocol","username","password","host","hostname","port","pathname","search","hash","undefined","base","flag","slice","lastIndexOf","output","p","pop","push","join","this","origin","href","self","__global","addToError","err","msg","Error","message","call","__eval","source","debugName","context","Function","e","Module","Loader","options","_loader","loaderObj","loads","modules","importPromises","moduleRecords","defineProperty","get","SystemLoader","paths","applyPaths","name","wildcard","pathMatch","maxWildcardPrefixLen","pathParts","split","length","substr","wildcardPrefixLen","outPath","LoaderProto","isWindows","window","importScripts","document","process","platform","console","assert","indexOf","Array","prototype","item","i","thisLen","Object","obj","prop","opt","value","baseURI","getElementsByTagName","bases","location","cwd","URL","createLoad","status","linkSets","dependencies","metadata","loadModule","loader","Promise","asyncStartLoadPartwayThrough","step","address","moduleName","moduleMetadata","moduleSource","moduleAddress","requestLoad","request","refererName","refererAddress","resolve","reject","normalize","then","load","module","l","proceedToLocate","proceedToFetch","locate","proceedToTranslate","fetch","translate","instantiate","instantiateResult","anonCnt","isDeclarative","transpile","transpiled","curSystem","System","curRegister","register","deps","declare","depsList","execute","loadPromises","index","depLoad","key","concat","addLoadToLinkSet","all","updateLinkSetOnLoad","exc","exception","linkSetFailed","stepState","existingLoad","done","linkSet","createLinkSet","startingLoad","loadingCount","j","d","doLink","error","link","_newModule","evaluated","finishLoad","abrupt","checkError","pLoad","dep","failed","linkIndex","splice","globalLoadsIndex","trace","depMap","forEach","map","kind","loadIndex","doDynamicExecute","linkError","createImportPromise","promise","evaluateLoadedModule","doEnsureEvaluated","constructor","define","delete","has","import","parentName","parentAddress","sourcePromise","newModule","pNames","getOwnPropertyNames","configurable","enumerable","set","freeze","referrerName","referrerAddress","absURLRegEx","transpiler","transpilerNormalized","curLoader","Reflect","default","__useDefault","fetchTextFromURL","XMLHttpRequest","authorization","fulfill","xhr","responseText","statusText","sameDomain","doTimeout","domainCheck","exec","XDomainRequest","onload","onerror","ontimeout","onprogress","timeout","onreadystatechange","readyState","addEventListener","open","setRequestHeader","withCredentials","setTimeout","send","require","fs","readFile","data","dataString","opts","headers","Accept","credentials","r","ok","text","exports","LoaderPolyfill"],"mappings":"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","file":"es6-module-loader.js"} \ No newline at end of file diff --git a/dist/es6-module-loader.src.js b/dist/es6-module-loader.src.js index 1107211..d32c7e7 100644 --- a/dist/es6-module-loader.src.js +++ b/dist/es6-module-loader.src.js @@ -1,1308 +1,150 @@ -!function(e){"object"==typeof exports?module.exports=e():"function"==typeof define&&define.amd?define(e):"undefined"!=typeof window?window.Promise=e():"undefined"!=typeof global?global.Promise=e():"undefined"!=typeof self&&(self.Promise=e())}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){ -/** @license MIT License (c) copyright 2010-2014 original author or authors */ -/** @author Brian Cavalier */ -/** @author John Hann */ - -/** - * ES6 global Promise shim - */ -var unhandledRejections = require('../lib/decorators/unhandledRejection'); -var PromiseConstructor = unhandledRejections(require('../lib/Promise')); - -module.exports = typeof global != 'undefined' ? (global.Promise = PromiseConstructor) - : typeof self != 'undefined' ? (self.Promise = PromiseConstructor) - : PromiseConstructor; - -},{"../lib/Promise":2,"../lib/decorators/unhandledRejection":4}],2:[function(require,module,exports){ -/** @license MIT License (c) copyright 2010-2014 original author or authors */ -/** @author Brian Cavalier */ -/** @author John Hann */ - -(function(define) { 'use strict'; -define(function (require) { - - var makePromise = require('./makePromise'); - var Scheduler = require('./Scheduler'); - var async = require('./env').asap; - - return makePromise({ - scheduler: new Scheduler(async) - }); - -}); -})(typeof define === 'function' && define.amd ? define : function (factory) { module.exports = factory(require); }); - -},{"./Scheduler":3,"./env":5,"./makePromise":7}],3:[function(require,module,exports){ -/** @license MIT License (c) copyright 2010-2014 original author or authors */ -/** @author Brian Cavalier */ -/** @author John Hann */ - -(function(define) { 'use strict'; -define(function() { - - // Credit to Twisol (https://github.com/Twisol) for suggesting - // this type of extensible queue + trampoline approach for next-tick conflation. - - /** - * Async task scheduler - * @param {function} async function to schedule a single async function - * @constructor - */ - function Scheduler(async) { - this._async = async; - this._running = false; - - this._queue = this; - this._queueLen = 0; - this._afterQueue = {}; - this._afterQueueLen = 0; - - var self = this; - this.drain = function() { - self._drain(); - }; - } - - /** - * Enqueue a task - * @param {{ run:function }} task - */ - Scheduler.prototype.enqueue = function(task) { - this._queue[this._queueLen++] = task; - this.run(); - }; - - /** - * Enqueue a task to run after the main task queue - * @param {{ run:function }} task - */ - Scheduler.prototype.afterQueue = function(task) { - this._afterQueue[this._afterQueueLen++] = task; - this.run(); - }; - - Scheduler.prototype.run = function() { - if (!this._running) { - this._running = true; - this._async(this.drain); - } - }; - - /** - * Drain the handler queue entirely, and then the after queue - */ - Scheduler.prototype._drain = function() { - var i = 0; - for (; i < this._queueLen; ++i) { - this._queue[i].run(); - this._queue[i] = void 0; - } - - this._queueLen = 0; - this._running = false; - - for (i = 0; i < this._afterQueueLen; ++i) { - this._afterQueue[i].run(); - this._afterQueue[i] = void 0; - } - - this._afterQueueLen = 0; - }; - - return Scheduler; +// from https://gist.github.com/Yaffle/1088850 +(function(global) { +function URLPolyfill(url, baseURL) { + if (typeof url != 'string') + throw new TypeError('URL must be a string'); + var m = String(url).replace(/^\s+|\s+$/g, "").match(/^([^:\/?#]+:)?(?:\/\/(?:([^:@\/?#]*)(?::([^:@\/?#]*))?@)?(([^:\/?#]*)(?::(\d*))?))?([^?#]*)(\?[^#]*)?(#[\s\S]*)?/); + if (!m) + throw new RangeError('Invalid URL format'); + var protocol = m[1] || ""; + var username = m[2] || ""; + var password = m[3] || ""; + var host = m[4] || ""; + var hostname = m[5] || ""; + var port = m[6] || ""; + var pathname = m[7] || ""; + var search = m[8] || ""; + var hash = m[9] || ""; + if (baseURL !== undefined) { + var base = baseURL instanceof URLPolyfill ? baseURL : new URLPolyfill(baseURL); + var flag = !protocol && !host && !username; + if (flag && !pathname && !search) + search = base.search; + if (flag && pathname[0] !== "/") + pathname = (pathname ? (((base.host || base.username) && !base.pathname ? "/" : "") + base.pathname.slice(0, base.pathname.lastIndexOf("/") + 1) + pathname) : base.pathname); + // dot segments removal + var output = []; + pathname.replace(/^(\.\.?(\/|$))+/, "") + .replace(/\/(\.(\/|$))+/g, "/") + .replace(/\/\.\.$/, "/../") + .replace(/\/?[^\/]*/g, function (p) { + if (p === "/..") + output.pop(); + else + output.push(p); + }); + pathname = output.join("").replace(/^\//, pathname[0] === "/" ? "/" : ""); + if (flag) { + port = base.port; + hostname = base.hostname; + host = base.host; + password = base.password; + username = base.username; + } + if (!protocol) + protocol = base.protocol; + } -}); -}(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(); })); - -},{}],4:[function(require,module,exports){ -/** @license MIT License (c) copyright 2010-2014 original author or authors */ -/** @author Brian Cavalier */ -/** @author John Hann */ - -(function(define) { 'use strict'; -define(function(require) { - - var setTimer = require('../env').setTimer; - var format = require('../format'); - - return function unhandledRejection(Promise) { - - var logError = noop; - var logInfo = noop; - var localConsole; - - if(typeof console !== 'undefined') { - // Alias console to prevent things like uglify's drop_console option from - // removing console.log/error. Unhandled rejections fall into the same - // category as uncaught exceptions, and build tools shouldn't silence them. - localConsole = console; - logError = typeof localConsole.error !== 'undefined' - ? function (e) { localConsole.error(e); } - : function (e) { localConsole.log(e); }; - - logInfo = typeof localConsole.info !== 'undefined' - ? function (e) { localConsole.info(e); } - : function (e) { localConsole.log(e); }; - } - - Promise.onPotentiallyUnhandledRejection = function(rejection) { - enqueue(report, rejection); - }; - - Promise.onPotentiallyUnhandledRejectionHandled = function(rejection) { - enqueue(unreport, rejection); - }; - - Promise.onFatalRejection = function(rejection) { - enqueue(throwit, rejection.value); - }; - - var tasks = []; - var reported = []; - var running = null; - - function report(r) { - if(!r.handled) { - reported.push(r); - logError('Potentially unhandled rejection [' + r.id + '] ' + format.formatError(r.value)); - } - } - - function unreport(r) { - var i = reported.indexOf(r); - if(i >= 0) { - reported.splice(i, 1); - logInfo('Handled previous rejection [' + r.id + '] ' + format.formatObject(r.value)); - } - } - - function enqueue(f, x) { - tasks.push(f, x); - if(running === null) { - running = setTimer(flush, 0); - } - } - - function flush() { - running = null; - while(tasks.length > 0) { - tasks.shift()(tasks.shift()); - } - } - - return Promise; - }; - - function throwit(e) { - throw e; - } - - function noop() {} + // convert windows file URLs to use / + if (protocol == 'file:') + pathname = pathname.replace(/\\/g, '/'); + + this.origin = host ? protocol + (protocol !== "" || host !== "" ? "//" : "") + host : ""; + this.href = protocol + (protocol && host || protocol == "file:" ? "//" : "") + (username !== "" ? username + (password !== "" ? ":" + password : "") + "@" : "") + host + pathname + search + hash; + this.protocol = protocol; + this.username = username; + this.password = password; + this.host = host; + this.hostname = hostname; + this.port = port; + this.pathname = pathname; + this.search = search; + this.hash = hash; +} +global.URLPolyfill = URLPolyfill; +})(typeof self != 'undefined' ? self : global); +(function(__global) { -}); -}(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(require); })); - -},{"../env":5,"../format":6}],5:[function(require,module,exports){ -/** @license MIT License (c) copyright 2010-2014 original author or authors */ -/** @author Brian Cavalier */ -/** @author John Hann */ - -/*global process,document,setTimeout,clearTimeout,MutationObserver,WebKitMutationObserver*/ -(function(define) { 'use strict'; -define(function(require) { - /*jshint maxcomplexity:6*/ - - // Sniff "best" async scheduling option - // Prefer process.nextTick or MutationObserver, then check for - // setTimeout, and finally vertx, since its the only env that doesn't - // have setTimeout - - var MutationObs; - var capturedSetTimeout = typeof setTimeout !== 'undefined' && setTimeout; - - // Default env - var setTimer = function(f, ms) { return setTimeout(f, ms); }; - var clearTimer = function(t) { return clearTimeout(t); }; - var asap = function (f) { return capturedSetTimeout(f, 0); }; - - // Detect specific env - if (isNode()) { // Node - asap = function (f) { return process.nextTick(f); }; - - } else if (MutationObs = hasMutationObserver()) { // Modern browser - asap = initMutationObserver(MutationObs); - - } else if (!capturedSetTimeout) { // vert.x - var vertxRequire = require; - var vertx = vertxRequire('vertx'); - setTimer = function (f, ms) { return vertx.setTimer(ms, f); }; - clearTimer = vertx.cancelTimer; - asap = vertx.runOnLoop || vertx.runOnContext; - } - - return { - setTimer: setTimer, - clearTimer: clearTimer, - asap: asap - }; - - function isNode () { - return typeof process !== 'undefined' && process !== null && - typeof process.nextTick === 'function'; - } - - function hasMutationObserver () { - return (typeof MutationObserver === 'function' && MutationObserver) || - (typeof WebKitMutationObserver === 'function' && WebKitMutationObserver); - } - - function initMutationObserver(MutationObserver) { - var scheduled; - var node = document.createTextNode(''); - var o = new MutationObserver(run); - o.observe(node, { characterData: true }); - - function run() { - var f = scheduled; - scheduled = void 0; - f(); - } - - var i = 0; - return function (f) { - scheduled = f; - node.data = (i ^= 1); - }; - } -}); -}(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(require); })); - -},{}],6:[function(require,module,exports){ -/** @license MIT License (c) copyright 2010-2014 original author or authors */ -/** @author Brian Cavalier */ -/** @author John Hann */ - -(function(define) { 'use strict'; -define(function() { - - return { - formatError: formatError, - formatObject: formatObject, - tryStringify: tryStringify - }; - - /** - * Format an error into a string. If e is an Error and has a stack property, - * it's returned. Otherwise, e is formatted using formatObject, with a - * warning added about e not being a proper Error. - * @param {*} e - * @returns {String} formatted string, suitable for output to developers - */ - function formatError(e) { - var s = typeof e === 'object' && e !== null && e.stack ? e.stack : formatObject(e); - return e instanceof Error ? s : s + ' (WARNING: non-Error used)'; - } - - /** - * Format an object, detecting "plain" objects and running them through - * JSON.stringify if possible. - * @param {Object} o - * @returns {string} - */ - function formatObject(o) { - var s = String(o); - if(s === '[object Object]' && typeof JSON !== 'undefined') { - s = tryStringify(o, s); - } - return s; - } - - /** - * Try to return the result of JSON.stringify(x). If that fails, return - * defaultValue - * @param {*} x - * @param {*} defaultValue - * @returns {String|*} JSON.stringify(x) or defaultValue - */ - function tryStringify(x, defaultValue) { - try { - return JSON.stringify(x); - } catch(e) { - return defaultValue; - } - } + var isWorker = typeof window == 'undefined' && typeof self != 'undefined' && typeof importScripts != 'undefined'; + var isBrowser = typeof window != 'undefined' && typeof document != 'undefined'; + var isWindows = typeof process != 'undefined' && typeof process.platform != 'undefined' && !!process.platform.match(/^win/); -}); -}(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(); })); - -},{}],7:[function(require,module,exports){ -/** @license MIT License (c) copyright 2010-2014 original author or authors */ -/** @author Brian Cavalier */ -/** @author John Hann */ - -(function(define) { 'use strict'; -define(function() { - - return function makePromise(environment) { - - var tasks = environment.scheduler; - var emitRejection = initEmitRejection(); - - var objectCreate = Object.create || - function(proto) { - function Child() {} - Child.prototype = proto; - return new Child(); - }; - - /** - * Create a promise whose fate is determined by resolver - * @constructor - * @returns {Promise} promise - * @name Promise - */ - function Promise(resolver, handler) { - this._handler = resolver === Handler ? handler : init(resolver); - } - - /** - * Run the supplied resolver - * @param resolver - * @returns {Pending} - */ - function init(resolver) { - var handler = new Pending(); - - try { - resolver(promiseResolve, promiseReject, promiseNotify); - } catch (e) { - promiseReject(e); - } - - return handler; - - /** - * Transition from pre-resolution state to post-resolution state, notifying - * all listeners of the ultimate fulfillment or rejection - * @param {*} x resolution value - */ - function promiseResolve (x) { - handler.resolve(x); - } - /** - * Reject this promise with reason, which will be used verbatim - * @param {Error|*} reason rejection reason, strongly suggested - * to be an Error type - */ - function promiseReject (reason) { - handler.reject(reason); - } - - /** - * @deprecated - * Issue a progress event, notifying all progress listeners - * @param {*} x progress event payload to pass to all listeners - */ - function promiseNotify (x) { - handler.notify(x); - } - } - - // Creation - - Promise.resolve = resolve; - Promise.reject = reject; - Promise.never = never; - - Promise._defer = defer; - Promise._handler = getHandler; - - /** - * Returns a trusted promise. If x is already a trusted promise, it is - * returned, otherwise returns a new trusted Promise which follows x. - * @param {*} x - * @return {Promise} promise - */ - function resolve(x) { - return isPromise(x) ? x - : new Promise(Handler, new Async(getHandler(x))); - } - - /** - * Return a reject promise with x as its reason (x is used verbatim) - * @param {*} x - * @returns {Promise} rejected promise - */ - function reject(x) { - return new Promise(Handler, new Async(new Rejected(x))); - } - - /** - * Return a promise that remains pending forever - * @returns {Promise} forever-pending promise. - */ - function never() { - return foreverPendingPromise; // Should be frozen - } - - /** - * Creates an internal {promise, resolver} pair - * @private - * @returns {Promise} - */ - function defer() { - return new Promise(Handler, new Pending()); - } - - // Transformation and flow control - - /** - * Transform this promise's fulfillment value, returning a new Promise - * for the transformed result. If the promise cannot be fulfilled, onRejected - * is called with the reason. onProgress *may* be called with updates toward - * this promise's fulfillment. - * @param {function=} onFulfilled fulfillment handler - * @param {function=} onRejected rejection handler - * @param {function=} onProgress @deprecated progress handler - * @return {Promise} new promise - */ - Promise.prototype.then = function(onFulfilled, onRejected, onProgress) { - var parent = this._handler; - var state = parent.join().state(); - - if ((typeof onFulfilled !== 'function' && state > 0) || - (typeof onRejected !== 'function' && state < 0)) { - // Short circuit: value will not change, simply share handler - return new this.constructor(Handler, parent); - } - - var p = this._beget(); - var child = p._handler; - - parent.chain(child, parent.receiver, onFulfilled, onRejected, onProgress); - - return p; - }; - - /** - * If this promise cannot be fulfilled due to an error, call onRejected to - * handle the error. Shortcut for .then(undefined, onRejected) - * @param {function?} onRejected - * @return {Promise} - */ - Promise.prototype['catch'] = function(onRejected) { - return this.then(void 0, onRejected); - }; - - /** - * Creates a new, pending promise of the same type as this promise - * @private - * @returns {Promise} - */ - Promise.prototype._beget = function() { - return begetFrom(this._handler, this.constructor); - }; - - function begetFrom(parent, Promise) { - var child = new Pending(parent.receiver, parent.join().context); - return new Promise(Handler, child); - } - - // Array combinators - - Promise.all = all; - Promise.race = race; - Promise._traverse = traverse; - - /** - * Return a promise that will fulfill when all promises in the - * input array have fulfilled, or will reject when one of the - * promises rejects. - * @param {array} promises array of promises - * @returns {Promise} promise for array of fulfillment values - */ - function all(promises) { - return traverseWith(snd, null, promises); - } - - /** - * Array<Promise<X>> -> Promise<Array<f(X)>> - * @private - * @param {function} f function to apply to each promise's value - * @param {Array} promises array of promises - * @returns {Promise} promise for transformed values - */ - function traverse(f, promises) { - return traverseWith(tryCatch2, f, promises); - } - - function traverseWith(tryMap, f, promises) { - var handler = typeof f === 'function' ? mapAt : settleAt; - - var resolver = new Pending(); - var pending = promises.length >>> 0; - var results = new Array(pending); - - for (var i = 0, x; i < promises.length && !resolver.resolved; ++i) { - x = promises[i]; - - if (x === void 0 && !(i in promises)) { - --pending; - continue; - } - - traverseAt(promises, handler, i, x, resolver); - } - - if(pending === 0) { - resolver.become(new Fulfilled(results)); - } - - return new Promise(Handler, resolver); - - function mapAt(i, x, resolver) { - if(!resolver.resolved) { - traverseAt(promises, settleAt, i, tryMap(f, x, i), resolver); - } - } - - function settleAt(i, x, resolver) { - results[i] = x; - if(--pending === 0) { - resolver.become(new Fulfilled(results)); - } - } - } - - function traverseAt(promises, handler, i, x, resolver) { - if (maybeThenable(x)) { - var h = getHandlerMaybeThenable(x); - var s = h.state(); - - if (s === 0) { - h.fold(handler, i, void 0, resolver); - } else if (s > 0) { - handler(i, h.value, resolver); - } else { - resolver.become(h); - visitRemaining(promises, i+1, h); - } - } else { - handler(i, x, resolver); - } - } - - Promise._visitRemaining = visitRemaining; - function visitRemaining(promises, start, handler) { - for(var i=start; i<promises.length; ++i) { - markAsHandled(getHandler(promises[i]), handler); - } - } - - function markAsHandled(h, handler) { - if(h === handler) { - return; - } - - var s = h.state(); - if(s === 0) { - h.visit(h, void 0, h._unreport); - } else if(s < 0) { - h._unreport(); - } - } - - /** - * Fulfill-reject competitive race. Return a promise that will settle - * to the same state as the earliest input promise to settle. - * - * WARNING: The ES6 Promise spec requires that race()ing an empty array - * must return a promise that is pending forever. This implementation - * returns a singleton forever-pending promise, the same singleton that is - * returned by Promise.never(), thus can be checked with === - * - * @param {array} promises array of promises to race - * @returns {Promise} if input is non-empty, a promise that will settle - * to the same outcome as the earliest input promise to settle. if empty - * is empty, returns a promise that will never settle. - */ - function race(promises) { - if(typeof promises !== 'object' || promises === null) { - return reject(new TypeError('non-iterable passed to race()')); - } - - // Sigh, race([]) is untestable unless we return *something* - // that is recognizable without calling .then() on it. - return promises.length === 0 ? never() - : promises.length === 1 ? resolve(promises[0]) - : runRace(promises); - } - - function runRace(promises) { - var resolver = new Pending(); - var i, x, h; - for(i=0; i<promises.length; ++i) { - x = promises[i]; - if (x === void 0 && !(i in promises)) { - continue; - } - - h = getHandler(x); - if(h.state() !== 0) { - resolver.become(h); - visitRemaining(promises, i+1, h); - break; - } else { - h.visit(resolver, resolver.resolve, resolver.reject); - } - } - return new Promise(Handler, resolver); - } - - // Promise internals - // Below this, everything is @private - - /** - * Get an appropriate handler for x, without checking for cycles - * @param {*} x - * @returns {object} handler - */ - function getHandler(x) { - if(isPromise(x)) { - return x._handler.join(); - } - return maybeThenable(x) ? getHandlerUntrusted(x) : new Fulfilled(x); - } - - /** - * Get a handler for thenable x. - * NOTE: You must only call this if maybeThenable(x) == true - * @param {object|function|Promise} x - * @returns {object} handler - */ - function getHandlerMaybeThenable(x) { - return isPromise(x) ? x._handler.join() : getHandlerUntrusted(x); - } - - /** - * Get a handler for potentially untrusted thenable x - * @param {*} x - * @returns {object} handler - */ - function getHandlerUntrusted(x) { - try { - var untrustedThen = x.then; - return typeof untrustedThen === 'function' - ? new Thenable(untrustedThen, x) - : new Fulfilled(x); - } catch(e) { - return new Rejected(e); - } - } - - /** - * Handler for a promise that is pending forever - * @constructor - */ - function Handler() {} - - Handler.prototype.when - = Handler.prototype.become - = Handler.prototype.notify // deprecated - = Handler.prototype.fail - = Handler.prototype._unreport - = Handler.prototype._report - = noop; - - Handler.prototype._state = 0; - - Handler.prototype.state = function() { - return this._state; - }; - - /** - * Recursively collapse handler chain to find the handler - * nearest to the fully resolved value. - * @returns {object} handler nearest the fully resolved value - */ - Handler.prototype.join = function() { - var h = this; - while(h.handler !== void 0) { - h = h.handler; - } - return h; - }; - - Handler.prototype.chain = function(to, receiver, fulfilled, rejected, progress) { - this.when({ - resolver: to, - receiver: receiver, - fulfilled: fulfilled, - rejected: rejected, - progress: progress - }); - }; - - Handler.prototype.visit = function(receiver, fulfilled, rejected, progress) { - this.chain(failIfRejected, receiver, fulfilled, rejected, progress); - }; - - Handler.prototype.fold = function(f, z, c, to) { - this.when(new Fold(f, z, c, to)); - }; - - /** - * Handler that invokes fail() on any handler it becomes - * @constructor - */ - function FailIfRejected() {} - - inherit(Handler, FailIfRejected); - - FailIfRejected.prototype.become = function(h) { - h.fail(); - }; - - var failIfRejected = new FailIfRejected(); - - /** - * Handler that manages a queue of consumers waiting on a pending promise - * @constructor - */ - function Pending(receiver, inheritedContext) { - Promise.createContext(this, inheritedContext); - - this.consumers = void 0; - this.receiver = receiver; - this.handler = void 0; - this.resolved = false; - } - - inherit(Handler, Pending); - - Pending.prototype._state = 0; - - Pending.prototype.resolve = function(x) { - this.become(getHandler(x)); - }; - - Pending.prototype.reject = function(x) { - if(this.resolved) { - return; - } - - this.become(new Rejected(x)); - }; - - Pending.prototype.join = function() { - if (!this.resolved) { - return this; - } - - var h = this; - - while (h.handler !== void 0) { - h = h.handler; - if (h === this) { - return this.handler = cycle(); - } - } - - return h; - }; - - Pending.prototype.run = function() { - var q = this.consumers; - var handler = this.handler; - this.handler = this.handler.join(); - this.consumers = void 0; - - for (var i = 0; i < q.length; ++i) { - handler.when(q[i]); - } - }; - - Pending.prototype.become = function(handler) { - if(this.resolved) { - return; - } - - this.resolved = true; - this.handler = handler; - if(this.consumers !== void 0) { - tasks.enqueue(this); - } - - if(this.context !== void 0) { - handler._report(this.context); - } - }; - - Pending.prototype.when = function(continuation) { - if(this.resolved) { - tasks.enqueue(new ContinuationTask(continuation, this.handler)); - } else { - if(this.consumers === void 0) { - this.consumers = [continuation]; - } else { - this.consumers.push(continuation); - } - } - }; - - /** - * @deprecated - */ - Pending.prototype.notify = function(x) { - if(!this.resolved) { - tasks.enqueue(new ProgressTask(x, this)); - } - }; - - Pending.prototype.fail = function(context) { - var c = typeof context === 'undefined' ? this.context : context; - this.resolved && this.handler.join().fail(c); - }; - - Pending.prototype._report = function(context) { - this.resolved && this.handler.join()._report(context); - }; - - Pending.prototype._unreport = function() { - this.resolved && this.handler.join()._unreport(); - }; - - /** - * Wrap another handler and force it into a future stack - * @param {object} handler - * @constructor - */ - function Async(handler) { - this.handler = handler; - } - - inherit(Handler, Async); - - Async.prototype.when = function(continuation) { - tasks.enqueue(new ContinuationTask(continuation, this)); - }; - - Async.prototype._report = function(context) { - this.join()._report(context); - }; - - Async.prototype._unreport = function() { - this.join()._unreport(); - }; - - /** - * Handler that wraps an untrusted thenable and assimilates it in a future stack - * @param {function} then - * @param {{then: function}} thenable - * @constructor - */ - function Thenable(then, thenable) { - Pending.call(this); - tasks.enqueue(new AssimilateTask(then, thenable, this)); - } - - inherit(Pending, Thenable); - - /** - * Handler for a fulfilled promise - * @param {*} x fulfillment value - * @constructor - */ - function Fulfilled(x) { - Promise.createContext(this); - this.value = x; - } - - inherit(Handler, Fulfilled); - - Fulfilled.prototype._state = 1; - - Fulfilled.prototype.fold = function(f, z, c, to) { - runContinuation3(f, z, this, c, to); - }; - - Fulfilled.prototype.when = function(cont) { - runContinuation1(cont.fulfilled, this, cont.receiver, cont.resolver); - }; - - var errorId = 0; - - /** - * Handler for a rejected promise - * @param {*} x rejection reason - * @constructor - */ - function Rejected(x) { - Promise.createContext(this); - - this.id = ++errorId; - this.value = x; - this.handled = false; - this.reported = false; - - this._report(); - } - - inherit(Handler, Rejected); - - Rejected.prototype._state = -1; - - Rejected.prototype.fold = function(f, z, c, to) { - to.become(this); - }; - - Rejected.prototype.when = function(cont) { - if(typeof cont.rejected === 'function') { - this._unreport(); - } - runContinuation1(cont.rejected, this, cont.receiver, cont.resolver); - }; - - Rejected.prototype._report = function(context) { - tasks.afterQueue(new ReportTask(this, context)); - }; - - Rejected.prototype._unreport = function() { - if(this.handled) { - return; - } - this.handled = true; - tasks.afterQueue(new UnreportTask(this)); - }; - - Rejected.prototype.fail = function(context) { - this.reported = true; - emitRejection('unhandledRejection', this); - Promise.onFatalRejection(this, context === void 0 ? this.context : context); - }; - - function ReportTask(rejection, context) { - this.rejection = rejection; - this.context = context; - } - - ReportTask.prototype.run = function() { - if(!this.rejection.handled && !this.rejection.reported) { - this.rejection.reported = true; - emitRejection('unhandledRejection', this.rejection) || - Promise.onPotentiallyUnhandledRejection(this.rejection, this.context); - } - }; - - function UnreportTask(rejection) { - this.rejection = rejection; - } - - UnreportTask.prototype.run = function() { - if(this.rejection.reported) { - emitRejection('rejectionHandled', this.rejection) || - Promise.onPotentiallyUnhandledRejectionHandled(this.rejection); - } - }; - - // Unhandled rejection hooks - // By default, everything is a noop - - Promise.createContext - = Promise.enterContext - = Promise.exitContext - = Promise.onPotentiallyUnhandledRejection - = Promise.onPotentiallyUnhandledRejectionHandled - = Promise.onFatalRejection - = noop; - - // Errors and singletons - - var foreverPendingHandler = new Handler(); - var foreverPendingPromise = new Promise(Handler, foreverPendingHandler); - - function cycle() { - return new Rejected(new TypeError('Promise cycle')); - } - - // Task runners - - /** - * Run a single consumer - * @constructor - */ - function ContinuationTask(continuation, handler) { - this.continuation = continuation; - this.handler = handler; - } - - ContinuationTask.prototype.run = function() { - this.handler.join().when(this.continuation); - }; - - /** - * Run a queue of progress handlers - * @constructor - */ - function ProgressTask(value, handler) { - this.handler = handler; - this.value = value; - } - - ProgressTask.prototype.run = function() { - var q = this.handler.consumers; - if(q === void 0) { - return; - } - - for (var c, i = 0; i < q.length; ++i) { - c = q[i]; - runNotify(c.progress, this.value, this.handler, c.receiver, c.resolver); - } - }; - - /** - * Assimilate a thenable, sending it's value to resolver - * @param {function} then - * @param {object|function} thenable - * @param {object} resolver - * @constructor - */ - function AssimilateTask(then, thenable, resolver) { - this._then = then; - this.thenable = thenable; - this.resolver = resolver; - } - - AssimilateTask.prototype.run = function() { - var h = this.resolver; - tryAssimilate(this._then, this.thenable, _resolve, _reject, _notify); - - function _resolve(x) { h.resolve(x); } - function _reject(x) { h.reject(x); } - function _notify(x) { h.notify(x); } - }; - - function tryAssimilate(then, thenable, resolve, reject, notify) { - try { - then.call(thenable, resolve, reject, notify); - } catch (e) { - reject(e); - } - } - - /** - * Fold a handler value with z - * @constructor - */ - function Fold(f, z, c, to) { - this.f = f; this.z = z; this.c = c; this.to = to; - this.resolver = failIfRejected; - this.receiver = this; - } - - Fold.prototype.fulfilled = function(x) { - this.f.call(this.c, this.z, x, this.to); - }; - - Fold.prototype.rejected = function(x) { - this.to.reject(x); - }; - - Fold.prototype.progress = function(x) { - this.to.notify(x); - }; - - // Other helpers - - /** - * @param {*} x - * @returns {boolean} true iff x is a trusted Promise - */ - function isPromise(x) { - return x instanceof Promise; - } - - /** - * Test just enough to rule out primitives, in order to take faster - * paths in some code - * @param {*} x - * @returns {boolean} false iff x is guaranteed *not* to be a thenable - */ - function maybeThenable(x) { - return (typeof x === 'object' || typeof x === 'function') && x !== null; - } - - function runContinuation1(f, h, receiver, next) { - if(typeof f !== 'function') { - return next.become(h); - } - - Promise.enterContext(h); - tryCatchReject(f, h.value, receiver, next); - Promise.exitContext(); - } - - function runContinuation3(f, x, h, receiver, next) { - if(typeof f !== 'function') { - return next.become(h); - } - - Promise.enterContext(h); - tryCatchReject3(f, x, h.value, receiver, next); - Promise.exitContext(); - } - - /** - * @deprecated - */ - function runNotify(f, x, h, receiver, next) { - if(typeof f !== 'function') { - return next.notify(x); - } - - Promise.enterContext(h); - tryCatchReturn(f, x, receiver, next); - Promise.exitContext(); - } - - function tryCatch2(f, a, b) { - try { - return f(a, b); - } catch(e) { - return reject(e); - } - } - - /** - * Return f.call(thisArg, x), or if it throws return a rejected promise for - * the thrown exception - */ - function tryCatchReject(f, x, thisArg, next) { - try { - next.become(getHandler(f.call(thisArg, x))); - } catch(e) { - next.become(new Rejected(e)); - } - } - - /** - * Same as above, but includes the extra argument parameter. - */ - function tryCatchReject3(f, x, y, thisArg, next) { - try { - f.call(thisArg, x, y, next); - } catch(e) { - next.become(new Rejected(e)); - } - } - - /** - * @deprecated - * Return f.call(thisArg, x), or if it throws, *return* the exception - */ - function tryCatchReturn(f, x, thisArg, next) { - try { - next.notify(f.call(thisArg, x)); - } catch(e) { - next.notify(e); - } - } - - function inherit(Parent, Child) { - Child.prototype = objectCreate(Parent.prototype); - Child.prototype.constructor = Child; - } - - function snd(x, y) { - return y; - } - - function noop() {} - - function initEmitRejection() { - /*global process, self, CustomEvent*/ - if(typeof process !== 'undefined' && process !== null - && typeof process.emit === 'function') { - // Returning falsy here means to call the default - // onPotentiallyUnhandledRejection API. This is safe even in - // browserify since process.emit always returns falsy in browserify: - // https://github.com/defunctzombie/node-process/blob/master/browser.js#L40-L46 - return function(type, rejection) { - return type === 'unhandledRejection' - ? process.emit(type, rejection.value, rejection) - : process.emit(type, rejection); - }; - } else if(typeof self !== 'undefined' && typeof CustomEvent === 'function') { - return (function(noop, self, CustomEvent) { - var hasCustomEvent = false; - try { - var ev = new CustomEvent('unhandledRejection'); - hasCustomEvent = ev instanceof CustomEvent; - } catch (e) {} - - return !hasCustomEvent ? noop : function(type, rejection) { - var ev = new CustomEvent(type, { - detail: { - reason: rejection.value, - key: rejection - }, - bubbles: false, - cancelable: true - }); - - return !self.dispatchEvent(ev); - }; - }(noop, self, CustomEvent)); - } - - return noop; - } - - return Promise; - }; -}); -}(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(); })); + if (!__global.console) + __global.console = { assert: function() {} }; -},{}]},{},[1]) -(1) -}); -; -(function(__global) { + // IE8 support + var indexOf = Array.prototype.indexOf || function(item) { + for (var i = 0, thisLen = this.length; i < thisLen; i++) { + if (this[i] === item) { + return i; + } + } + return -1; + }; -$__Object$getPrototypeOf = Object.getPrototypeOf || function(obj) { - return obj.__proto__; -}; - -var $__Object$defineProperty; -(function () { - try { - if (!!Object.defineProperty({}, 'a', {})) { - $__Object$defineProperty = Object.defineProperty; + var defineProperty; + (function () { + try { + if (!!Object.defineProperty({}, 'a', {})) + defineProperty = Object.defineProperty; } - } catch (e) { - $__Object$defineProperty = function (obj, prop, opt) { - try { - obj[prop] = opt.value || opt.get.call(obj); + catch (e) { + defineProperty = function(obj, prop, opt) { + try { + obj[prop] = opt.value || opt.get.call(obj); + } + catch(e) {} } - catch(e) {} + } + })(); + + function addToError(err, msg) { + if (err instanceof Error) { + err.message = msg + '\n\t' + err.message; + Error.call(err, err.message); + } + else { + err = msg + '\n\t' + err; + } + return err; + } + + function __eval(source, debugName, context) { + try { + new Function(source).call(context); + } + catch(e) { + throw addToError(e, 'Evaluating ' + debugName); } } -}()); -$__Object$create = Object.create || function(o, props) { - function F() {} - F.prototype = o; + var baseURI; + // environent baseURI detection + if (typeof document != 'undefined' && document.getElementsByTagName) { + baseURI = document.baseURI; - if (typeof(props) === "object") { - for (prop in props) { - if (props.hasOwnProperty((prop))) { - F[prop] = props[prop]; - } + if (!baseURI) { + var bases = document.getElementsByTagName('base'); + baseURI = bases[0] && bases[0].href || window.location.href; } + + // sanitize out the hash and querystring + baseURI = baseURI.split('#')[0].split('?')[0]; + baseURI = baseURI.substr(0, baseURI.lastIndexOf('/') + 1); } - return new F(); -}; + else if (typeof process != 'undefined' && process.cwd) { + baseURI = 'file://' + (isWindows ? '/' : '') + process.cwd() + '/'; + if (isWindows) + baseURI = baseURI.replace(/\\/g, '/'); + } + else if (typeof location != 'undefined') { + baseURI = __global.location.href; + } + else { + throw new TypeError('No environment baseURI'); + } + + var URL = __global.URLPolyfill || __global.URL; /* ********************************************************************************************* @@ -1324,6 +166,34 @@ $__Object$create = Object.create || function(o, props) { ********************************************************************************************* */ +function Module() {} +// http://www.ecma-international.org/ecma-262/6.0/#sec-@@tostringtag +defineProperty(Module.prototype, 'toString', { + value: function() { + return 'Module'; + } +}); +function Loader(options) { + this._loader = { + loaderObj: this, + loads: [], + modules: {}, + importPromises: {}, + moduleRecords: {} + }; + + // 26.3.3.6 + defineProperty(this, 'global', { + get: function() { + return __global; + } + }); + + // 26.3.3.13 realm not implemented +} + +(function() { + // Some Helpers // logs a linkset snapshot for debugging @@ -1407,23 +277,6 @@ function logloads(loads) { } } */ - -(function() { - var Promise = __global.Promise || require('when/es6-shim/Promise'); - if (__global.console) - console.assert = console.assert || function() {}; - - // IE8 support - var indexOf = Array.prototype.indexOf || function(item) { - for (var i = 0, thisLen = this.length; i < thisLen; i++) { - if (this[i] === item) { - return i; - } - } - return -1; - }; - var defineProperty = $__Object$defineProperty; - // 15.2.3 - Runtime Semantics: Loader State // 15.2.3.11 @@ -1552,7 +405,7 @@ function logloads(loads) { // instead of load.kind, use load.isDeclarative load.isDeclarative = true; - return loader.loaderObj.transpile(load) + return transpile.call(loader.loaderObj, load) .then(function(transpiled) { // Hijack System.register to set declare function var curSystem = __global.System; @@ -1566,8 +419,9 @@ function logloads(loads) { // store the deps as load.deps load.declare = declare; load.depsList = deps; - } - __eval(transpiled, __global, load); + } + // empty {} context is closest to undefined 'this' we can get + __eval(transpiled, load.address, {}); curSystem.register = curRegister; }); } @@ -1660,18 +514,21 @@ function logloads(loads) { if (loader.loads[i].name == name) { existingLoad = loader.loads[i]; - if(step == 'translate' && !existingLoad.source) { + if (step == 'translate' && !existingLoad.source) { existingLoad.address = stepState.moduleAddress; proceedToTranslate(loader, existingLoad, Promise.resolve(stepState.moduleSource)); } - return existingLoad.linkSets[0].done.then(function() { - resolve(existingLoad); - }); + // a primary load -> use that existing linkset if it is for the direct load here + // otherwise create a new linkset unit + if (existingLoad.linkSets.length && existingLoad.linkSets[0].loads[0].name == existingLoad.name) + return existingLoad.linkSets[0].done.then(function() { + resolve(existingLoad); + }); } } - var load = createLoad(name); + var load = existingLoad || createLoad(name); load.metadata = stepState.moduleMetadata; @@ -1717,6 +574,9 @@ function logloads(loads) { } // 15.2.5.2.2 function addLoadToLinkSet(linkSet, load) { + if (load.status == 'failed') + return; + console.assert(load.status == 'loading' || load.status == 'loaded', 'loading or loaded on link set'); for (var i = 0, l = linkSet.loads.length; i < l; i++) @@ -1734,6 +594,9 @@ function logloads(loads) { var loader = linkSet.loader; for (var i = 0, l = load.dependencies.length; i < l; i++) { + if (!load.dependencies[i]) + continue; + var name = load.dependencies[i].value; if (loader.modules[name]) @@ -1817,11 +680,31 @@ function logloads(loads) { // 15.2.5.2.4 function linkSetFailed(linkSet, load, exc) { var loader = linkSet.loader; + var requests; - if (linkSet.loads[0].name != load.name) - exc = addToError(exc, 'Error loading "' + load.name + '" from "' + linkSet.loads[0].name + '" at ' + (linkSet.loads[0].address || '<unknown>') + '\n'); + checkError: + if (load) { + if (linkSet.loads[0].name == load.name) { + exc = addToError(exc, 'Error loading ' + load.name); + } + else { + for (var i = 0; i < linkSet.loads.length; i++) { + var pLoad = linkSet.loads[i]; + for (var j = 0; j < pLoad.dependencies.length; j++) { + var dep = pLoad.dependencies[j]; + if (dep.value == load.name) { + exc = addToError(exc, 'Error loading ' + load.name + ' as "' + dep.key + '" from ' + pLoad.name); + break checkError; + } + } + } + exc = addToError(exc, 'Error loading ' + load.name + ' from ' + linkSet.loads[0].name); + } + } + else { + exc = addToError(exc, 'Error linking ' + linkSet.loads[0].name); + } - exc = addToError(exc, 'Error loading "' + load.name + '" at ' + (load.address || '<unknown>') + '\n'); var loads = linkSet.loads.concat([]); for (var i = 0, l = loads.length; i < l; i++) { @@ -1880,58 +763,6 @@ function logloads(loads) { load.linkSets.splice(0, load.linkSets.length); } - // 15.2.5.3 Module Linking Groups - - // 15.2.5.3.2 BuildLinkageGroups alternative implementation - // Adjustments (also see https://bugs.ecmascript.org/show_bug.cgi?id=2755) - // 1. groups is an already-interleaved array of group kinds - // 2. load.groupIndex is set when this function runs - // 3. load.groupIndex is the interleaved index ie 0 declarative, 1 dynamic, 2 declarative, ... (or starting with dynamic) - function buildLinkageGroups(load, loads, groups) { - groups[load.groupIndex] = groups[load.groupIndex] || []; - - // if the load already has a group index and its in its group, its already been done - // this logic naturally handles cycles - if (indexOf.call(groups[load.groupIndex], load) != -1) - return; - - // now add it to the group to indicate its been seen - groups[load.groupIndex].push(load); - - for (var i = 0, l = loads.length; i < l; i++) { - var loadDep = loads[i]; - - // dependencies not found are already linked - for (var j = 0; j < load.dependencies.length; j++) { - if (loadDep.name == load.dependencies[j].value) { - // by definition all loads in linkset are loaded, not linked - console.assert(loadDep.status == 'loaded', 'Load in linkSet not loaded!'); - - // if it is a group transition, the index of the dependency has gone up - // otherwise it is the same as the parent - var loadDepGroupIndex = load.groupIndex + (loadDep.isDeclarative != load.isDeclarative); - - // the group index of an entry is always the maximum - if (loadDep.groupIndex === undefined || loadDep.groupIndex < loadDepGroupIndex) { - - // if already in a group, remove from the old group - if (loadDep.groupIndex !== undefined) { - groups[loadDep.groupIndex].splice(indexOf.call(groups[loadDep.groupIndex], loadDep), 1); - - // if the old group is empty, then we have a mixed depndency cycle - if (groups[loadDep.groupIndex].length == 0) - throw new TypeError("Mixed dependency cycle detected"); - } - - loadDep.groupIndex = loadDepGroupIndex; - } - - buildLinkageGroups(loadDep, loads, groups); - } - } - } - } - function doDynamicExecute(linkSet, load, linkError) { try { var module = load.execute(); @@ -1946,281 +777,10 @@ function logloads(loads) { return module; } - // 15.2.5.4 - function link(linkSet, linkError) { - - var loader = linkSet.loader; - - if (!linkSet.loads.length) - return; - - // console.log('linking {' + logloads(linkSet.loads) + '}'); - // snapshot(loader); - - // 15.2.5.3.1 LinkageGroups alternative implementation - - // build all the groups - // because the first load represents the top of the tree - // for a given linkset, we can work down from there - var groups = []; - var startingLoad = linkSet.loads[0]; - startingLoad.groupIndex = 0; - buildLinkageGroups(startingLoad, linkSet.loads, groups); - - // determine the kind of the bottom group - var curGroupDeclarative = startingLoad.isDeclarative == groups.length % 2; - - // run through the groups from bottom to top - for (var i = groups.length - 1; i >= 0; i--) { - var group = groups[i]; - for (var j = 0; j < group.length; j++) { - var load = group[j]; - - // 15.2.5.5 LinkDeclarativeModules adjusted - if (curGroupDeclarative) { - linkDeclarativeModule(load, linkSet.loads, loader); - } - // 15.2.5.6 LinkDynamicModules adjusted - else { - var module = doDynamicExecute(linkSet, load, linkError); - if (!module) - return; - load.module = { - name: load.name, - module: module - }; - load.status = 'linked'; - } - finishLoad(loader, load); - } - - // alternative current kind for next loop - curGroupDeclarative = !curGroupDeclarative; - } - } - - - // custom module records for binding graph - // store linking module records in a separate table - function getOrCreateModuleRecord(name, loader) { - var moduleRecords = loader.moduleRecords; - return moduleRecords[name] || (moduleRecords[name] = { - name: name, - dependencies: [], - module: new Module(), // start from an empty module and extend - importers: [] - }); - } - - // custom declarative linking function - function linkDeclarativeModule(load, loads, loader) { - if (load.module) - return; - - var module = load.module = getOrCreateModuleRecord(load.name, loader); - var moduleObj = load.module.module; - - var registryEntry = load.declare.call(__global, function(name, value) { - // NB This should be an Object.defineProperty, but that is very slow. - // By disaling this module write-protection we gain performance. - // It could be useful to allow an option to enable or disable this. - module.locked = true; - moduleObj[name] = value; - - for (var i = 0, l = module.importers.length; i < l; i++) { - var importerModule = module.importers[i]; - if (!importerModule.locked) { - var importerIndex = indexOf.call(importerModule.dependencies, module); - importerModule.setters[importerIndex](moduleObj); - } - } - - module.locked = false; - return value; - }); - - // setup our setters and execution function - module.setters = registryEntry.setters; - module.execute = registryEntry.execute; - - // now link all the module dependencies - // amending the depMap as we go - for (var i = 0, l = load.dependencies.length; i < l; i++) { - var depName = load.dependencies[i].value; - var depModule = loader.modules[depName]; - - // if dependency not already in the module registry - // then try and link it now - if (!depModule) { - // get the dependency load record - for (var j = 0; j < loads.length; j++) { - if (loads[j].name != depName) - continue; - - // only link if already not already started linking (stops at circular / dynamic) - if (!loads[j].module) { - linkDeclarativeModule(loads[j], loads, loader); - depModule = loads[j].module; - } - // if circular, create the module record - else { - depModule = getOrCreateModuleRecord(depName, loader); - } - } - } - - // only declarative modules have dynamic bindings - if (depModule.importers) { - module.dependencies.push(depModule); - depModule.importers.push(module); - } - else { - // track dynamic records as null module records as already linked - module.dependencies.push(null); - } - - // run the setter for this dependency - if (module.setters[i]) - module.setters[i](depModule.module); - } - - load.status = 'linked'; - } - - - - // 15.2.5.5.1 LinkImports not implemented - // 15.2.5.7 ResolveExportEntries not implemented - // 15.2.5.8 ResolveExports not implemented - // 15.2.5.9 ResolveExport not implemented - // 15.2.5.10 ResolveImportEntries not implemented - - // 15.2.6.1 - function evaluateLoadedModule(loader, load) { - console.assert(load.status == 'linked', 'is linked ' + load.name); - - doEnsureEvaluated(load.module, [], loader); - return load.module.module; - } - - /* - * Module Object non-exotic for ES5: - * - * module.module bound module object - * module.execute execution function for module - * module.dependencies list of module objects for dependencies - * See getOrCreateModuleRecord for all properties - * - */ - function doExecute(module) { - try { - module.execute.call(__global); - } - catch(e) { - return e; - } - } - - // propogate execution errors - // see https://bugs.ecmascript.org/show_bug.cgi?id=2993 - function doEnsureEvaluated(module, seen, loader) { - var err = ensureEvaluated(module, seen, loader); - if (err) - throw err; - } - // 15.2.6.2 EnsureEvaluated adjusted - function ensureEvaluated(module, seen, loader) { - if (module.evaluated || !module.dependencies) - return; - - seen.push(module); - - var deps = module.dependencies; - var err; - - for (var i = 0, l = deps.length; i < l; i++) { - var dep = deps[i]; - // dynamic dependencies are empty in module.dependencies - // as they are already linked - if (!dep) - continue; - if (indexOf.call(seen, dep) == -1) { - err = ensureEvaluated(dep, seen, loader); - // stop on error, see https://bugs.ecmascript.org/show_bug.cgi?id=2996 - if (err) { - err = addToError(err, 'Error evaluating ' + dep.name + '\n'); - return err; - } - } - } - - if (module.failed) - return new Error('Module failed execution.'); - - if (module.evaluated) - return; - - module.evaluated = true; - err = doExecute(module); - if (err) { - module.failed = true; - } - else if (Object.preventExtensions) { - // spec variation - // we don't create a new module here because it was created and ammended - // we just disable further extensions instead - Object.preventExtensions(module.module); - } - - module.execute = undefined; - return err; - } - - function addToError(err, msg) { - if (err instanceof Error) - err.message = msg + err.message; - else - err = msg + err; - return err; - } - // 26.3 Loader // 26.3.1.1 - function Loader(options) { - if (typeof options != 'object') - throw new TypeError('Options must be an object'); - - if (options.normalize) - this.normalize = options.normalize; - if (options.locate) - this.locate = options.locate; - if (options.fetch) - this.fetch = options.fetch; - if (options.translate) - this.translate = options.translate; - if (options.instantiate) - this.instantiate = options.instantiate; - - this._loader = { - loaderObj: this, - loads: [], - modules: {}, - importPromises: {}, - moduleRecords: {} - }; - - // 26.3.3.6 - defineProperty(this, 'global', { - get: function() { - return __global; - } - }); - - // 26.3.3.13 realm not implemented - } - - function Module() {} + // defined at top // importPromises adds ability to import a module twice without error - https://bugs.ecmascript.org/show_bug.cgi?id=2601 function createImportPromise(loader, name, promise) { @@ -2271,12 +831,15 @@ function logloads(loads) { return !!this._loader.modules[name]; }, // 26.3.3.8 - 'import': function(name, options) { + 'import': function(name, parentName, parentAddress) { + if (typeof parentName == 'object') + parentName = parentName.name; + // run normalize first var loaderObj = this; // added, see https://bugs.ecmascript.org/show_bug.cgi?id=2659 - return Promise.resolve(loaderObj.normalize(name, options && options.name, options && options.address)) + return Promise.resolve(loaderObj.normalize(name, parentName)) .then(function(name) { var loader = loaderObj._loader; @@ -2286,7 +849,7 @@ function logloads(loads) { } return loader.importPromises[name] || createImportPromise(loaderObj, name, - loadModule(loader, name, options || {}) + loadModule(loader, name, {}) .then(function(load) { delete loader.importPromises[name]; return evaluateLoadedModule(loader, load); @@ -2295,12 +858,21 @@ function logloads(loads) { }, // 26.3.3.9 keys not implemented // 26.3.3.10 - load: function(name, options) { - if (this._loader.modules[name]) { - doEnsureEvaluated(this._loader.modules[name], [], this._loader); - return Promise.resolve(this._loader.modules[name].module); - } - return this._loader.importPromises[name] || createImportPromise(this, name, loadModule(this._loader, name, {})); + load: function(name) { + var loader = this._loader; + if (loader.modules[name]) + return Promise.resolve(); + return loader.importPromises[name] || createImportPromise(this, name, new Promise(asyncStartLoadPartwayThrough({ + step: 'locate', + loader: loader, + moduleName: name, + moduleMetadata: {}, + moduleSource: undefined, + moduleAddress: undefined + })) + .then(function() { + delete loader.importPromises[name]; + })); }, // 26.3.3.11 module: function(source, options) { @@ -2320,24 +892,30 @@ function logloads(loads) { if (typeof obj != 'object') throw new TypeError('Expected object'); - // we do this to be able to tell if a module is a module privately in ES5 - // by doing m instanceof Module var m = new Module(); - for (var key in obj) { - (function (key) { - defineProperty(m, key, { - configurable: false, - enumerable: true, - get: function () { - return obj[key]; - } - }); - })(key); - } + var pNames = []; + if (Object.getOwnPropertyNames && obj != null) + pNames = Object.getOwnPropertyNames(obj); + else + for (var key in obj) + pNames.push(key); + + for (var i = 0; i < pNames.length; i++) (function(key) { + defineProperty(m, key, { + configurable: false, + enumerable: true, + get: function () { + return obj[key]; + }, + set: function() { + throw new Error('Module exports cannot be changed externally.'); + } + }); + })(pNames[i]); - if (Object.preventExtensions) - Object.preventExtensions(m); + if (Object.freeze) + Object.freeze(m); return m; }, @@ -2363,7 +941,6 @@ function logloads(loads) { }, // 26.3.3.18.3 fetch: function(load) { - throw new TypeError('Fetch not implemented'); }, // 26.3.3.18.4 translate: function(load) { @@ -2376,119 +953,46 @@ function logloads(loads) { var _newModule = Loader.prototype.newModule; - if (typeof exports === 'object') - module.exports = Loader; - - __global.Reflect = __global.Reflect || {}; - __global.Reflect.Loader = __global.Reflect.Loader || Loader; - __global.Reflect.global = __global.Reflect.global || __global; - __global.LoaderPolyfill = Loader; - -})(); - /* - * Traceur and Babel transpile hook for Loader + * ES6 Module Declarative Linking Code - Dev Build Only */ -(function(Loader) { - var g = __global; - - function getTranspilerModule(loader, globalName) { - return loader.newModule({ 'default': g[globalName], __useDefault: true }); - } - var firstRun = true; - - // use Traceur by default - Loader.prototype.transpiler = 'traceur'; - - Loader.prototype.transpile = function(load) { - var self = this; + function link(linkSet, linkError) { - // pick up Transpiler modules from existing globals on first run if set - if (firstRun) { - if (g.traceur && !self.has('traceur')) - self.set('traceur', getTranspilerModule(self, 'traceur')); - if (g.babel && !self.has('babel')) - self.set('babel', getTranspilerModule(self, 'babel')); - firstRun = false; - } - - return self['import'](self.transpiler).then(function(transpiler) { - if (transpiler.__useDefault) - transpiler = transpiler['default']; - return 'var __moduleAddress = "' + load.address + '";' + (transpiler.Compiler ? traceurTranspile : babelTranspile).call(self, load, transpiler); - }); - }; + var loader = linkSet.loader; - Loader.prototype.instantiate = function(load) { - var self = this; - return Promise.resolve(self.normalize(self.transpiler)) - .then(function(transpilerNormalized) { - // load transpiler as a global (avoiding System clobbering) - if (load.name === transpilerNormalized) { - return { - deps: [], - execute: function() { - var curSystem = g.System; - var curLoader = g.Reflect.Loader; - // ensure not detected as CommonJS - __eval('(function(require,exports,module){' + load.source + '})();', g, load); - g.System = curSystem; - g.Reflect.Loader = curLoader; - return getTranspilerModule(self, load.name); - } - }; - } - }); - }; + if (!linkSet.loads.length) + return; - function traceurTranspile(load, traceur) { - var options = this.traceurOptions || {}; - options.modules = 'instantiate'; - options.script = false; - options.sourceMaps = 'inline'; - options.filename = load.address; - options.inputSourceMap = load.metadata.sourceMap; - options.moduleName = false; + var loads = linkSet.loads.concat([]); - var compiler = new traceur.Compiler(options); - var source = doTraceurCompile(load.source, compiler, options.filename); + for (var i = 0; i < loads.length; i++) { + var load = loads[i]; - // add "!eval" to end of Traceur sourceURL - // I believe this does something? - source += '!eval'; + var module = doDynamicExecute(linkSet, load, linkError); + if (!module) + return; + load.module = { + name: load.name, + module: module + }; + load.status = 'linked'; - return source; - } - function doTraceurCompile(source, compiler, filename) { - try { - return compiler.compile(source, filename); - } - catch(e) { - // traceur throws an error array - throw e[0]; + finishLoad(loader, load); } } - function babelTranspile(load, babel) { - var options = this.babelOptions || {}; - options.modules = 'system'; - options.sourceMap = 'inline'; - options.filename = load.address; - options.code = true; - options.ast = false; - - if (!options.blacklist) - options.blacklist = ['react']; - - var source = babel.transform(load.source, options).code; - - // add "!eval" to end of Babel sourceURL - // I believe this does something? - return source + '\n//# sourceURL=' + load.address + '!eval'; + function evaluateLoadedModule(loader, load) { + console.assert(load.status == 'linked', 'is linked ' + load.name); + return load.module.module; } + function doEnsureEvaluated() {} -})(__global.LoaderPolyfill);/* + function transpile() { + throw new TypeError('ES6 transpilation is only provided in the dev module loader build.'); + } +})(); +/* ********************************************************************************************* System Loader Implementation @@ -2500,65 +1004,106 @@ function logloads(loads) { ********************************************************************************************* */ +var System; +function SystemLoader() { + Loader.call(this); + this.paths = {}; +} -(function() { - var isWorker = typeof self !== 'undefined' && typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope; - var isBrowser = typeof window != 'undefined' && !isWorker; - var isWindows = typeof process != 'undefined' && !!process.platform.match(/^win/); - var Promise = __global.Promise || require('when/es6-shim/Promise'); - - // Helpers - // Absolute URL parsing, from https://gist.github.com/Yaffle/1088850 - function parseURI(url) { - var m = String(url).replace(/^\s+|\s+$/g, '').match(/^([^:\/?#]+:)?(\/\/(?:[^:@\/?#]*(?::[^:@\/?#]*)?@)?(([^:\/?#]*)(?::(\d*))?))?([^?#]*)(\?[^#]*)?(#[\s\S]*)?/); - // authority = '//' + user + ':' + pass '@' + hostname + ':' port - return (m ? { - href : m[0] || '', - protocol : m[1] || '', - authority: m[2] || '', - host : m[3] || '', - hostname : m[4] || '', - port : m[5] || '', - pathname : m[6] || '', - search : m[7] || '', - hash : m[8] || '' - } : null); +// NB no specification provided for System.paths, used ideas discussed in https://github.com/jorendorff/js-loaders/issues/25 +function applyPaths(paths, name) { + // most specific (most number of slashes in path) match wins + var pathMatch = '', wildcard, maxWildcardPrefixLen = 0; + + // check to see if we have a paths entry + for (var p in paths) { + var pathParts = p.split('*'); + if (pathParts.length > 2) + throw new TypeError('Only one wildcard in a path is permitted'); + + // exact path match + if (pathParts.length == 1) { + if (name == p) + return paths[p]; + + // support trailing / in paths rules + else if (name.substr(0, p.length - 1) == p.substr(0, p.length - 1) && (name.length < p.length || name[p.length - 1] == p[p.length - 1]) && paths[p][paths[p].length - 1] == '/') + return paths[p].substr(0, paths[p].length - 1) + (name.length > p.length ? '/' + name.substr(p.length) : ''); + } + // wildcard path match + else { + var wildcardPrefixLen = pathParts[0].length; + if (wildcardPrefixLen >= maxWildcardPrefixLen && + name.substr(0, pathParts[0].length) == pathParts[0] && + name.substr(name.length - pathParts[1].length) == pathParts[1]) { + maxWildcardPrefixLen = wildcardPrefixLen; + pathMatch = p; + wildcard = name.substr(pathParts[0].length, name.length - pathParts[1].length - pathParts[0].length); + } + } } - function removeDotSegments(input) { - var output = []; - input.replace(/^(\.\.?(\/|$))+/, '') - .replace(/\/(\.(\/|$))+/g, '/') - .replace(/\/\.\.$/, '/../') - .replace(/\/?[^\/]*/g, function (p) { - if (p === '/..') - output.pop(); - else - output.push(p); - }); - return output.join('').replace(/^\//, input.charAt(0) === '/' ? '/' : ''); - } + var outPath = paths[pathMatch]; + if (typeof wildcard == 'string') + outPath = outPath.replace('*', wildcard); + + return outPath; +} - function toAbsoluteURL(base, href) { +// inline Object.create-style class extension +function LoaderProto() {} +LoaderProto.prototype = Loader.prototype; +SystemLoader.prototype = new LoaderProto(); - if (isWindows) - href = href.replace(/\\/g, '/'); +var absURLRegEx = /^([^\/]+:\/\/|\/)/; - href = parseURI(href || ''); - base = parseURI(base || ''); +// Normalization with module names as absolute URLs +SystemLoader.prototype.normalize = function(name, parentName, parentAddress) { + // NB does `import 'file.js'` import relative to the parent name or baseURL? + // have assumed that it is baseURL-relative here, but spec may well align with URLs to be the latter + // safe option for users is to always use "./file.js" for relative - return !href || !base ? null : (href.protocol || base.protocol) + - (href.protocol || href.authority ? href.authority : base.authority) + - removeDotSegments(href.protocol || href.authority || href.pathname.charAt(0) === '/' ? href.pathname : (href.pathname ? ((base.authority && !base.pathname ? '/' : '') + base.pathname.slice(0, base.pathname.lastIndexOf('/') + 1) + href.pathname) : base.pathname)) + - (href.protocol || href.authority || href.pathname ? href.search : (href.search || base.search)) + - href.hash; - } + // not absolute or relative -> apply paths (what will be sites) + if (!name.match(absURLRegEx) && name[0] != '.') + name = new URL(applyPaths(this.paths, name) || name, baseURI).href; + // apply parent-relative normalization, parentAddress is already normalized + else + name = new URL(name, parentName || baseURI).href; + + return name; +}; + +SystemLoader.prototype.locate = function(load) { + return load.name; +}; - var fetchTextFromURL; +// ensure the transpiler is loaded correctly +SystemLoader.prototype.instantiate = function(load) { + var self = this; + return Promise.resolve(self.normalize(self.transpiler)) + .then(function(transpilerNormalized) { + // load transpiler as a global (avoiding System clobbering) + if (load.address === transpilerNormalized) { + return { + deps: [], + execute: function() { + var curSystem = __global.System; + var curLoader = __global.Reflect.Loader; + // ensure not detected as CommonJS + __eval('(function(require,exports,module){' + load.source + '})();', load.address, __global); + __global.System = curSystem; + __global.Reflect.Loader = curLoader; + return self.newModule({ 'default': __global[self.transpiler], __useDefault: true }); + } + }; + } + }); +}; + var fetchTextFromURL; if (typeof XMLHttpRequest != 'undefined') { - fetchTextFromURL = function(url, fulfill, reject) { + fetchTextFromURL = function(url, authorization, fulfill, reject) { var xhr = new XMLHttpRequest(); var sameDomain = true; var doTimeout = false; @@ -2584,275 +1129,128 @@ function logloads(loads) { fulfill(xhr.responseText); } function error() { - reject(xhr.statusText + ': ' + url || 'XHR error'); + reject(new Error('XHR error' + (xhr.status ? ' (' + xhr.status + (xhr.statusText ? ' ' + xhr.statusText : '') + ')' : '') + ' loading ' + url)); } xhr.onreadystatechange = function () { if (xhr.readyState === 4) { - if (xhr.status === 200 || (xhr.status == 0 && xhr.responseText)) { + // in Chrome on file:/// URLs, status is 0 + if (xhr.status == 0) { + if (xhr.responseText) { + load(); + } + else { + // when responseText is empty, wait for load or error event + // to inform if it is a 404 or empty file + xhr.addEventListener('error', error); + xhr.addEventListener('load', load); + } + } + else if (xhr.status === 200) { load(); - } else { + } + else { error(); } } }; xhr.open("GET", url, true); - if (doTimeout) + if (xhr.setRequestHeader) { + xhr.setRequestHeader('Accept', 'application/x-es-module, */*'); + // can set "authorization: true" to enable withCredentials only + if (authorization) { + if (typeof authorization == 'string') + xhr.setRequestHeader('Authorization', authorization); + xhr.withCredentials = true; + } + } + + if (doTimeout) { setTimeout(function() { xhr.send(); }, 0); - - xhr.send(null); - } + } else { + xhr.send(null); + } + }; } - else if (typeof require != 'undefined') { + else if (typeof require != 'undefined' && typeof process != 'undefined') { var fs; - fetchTextFromURL = function(url, fulfill, reject) { - if (url.substr(0, 5) != 'file:') - throw 'Only file URLs of the form file: allowed running in Node.'; + fetchTextFromURL = function(url, authorization, fulfill, reject) { + if (url.substr(0, 8) != 'file:///') + throw new Error('Unable to fetch "' + url + '". Only file URLs of the form file:/// allowed running in Node.'); fs = fs || require('fs'); - url = url.substr(5); if (isWindows) - url = url.replace(/\//g, '\\'); + url = url.replace(/\//g, '\\').substr(8); + else + url = url.substr(7); return fs.readFile(url, function(err, data) { - if (err) + if (err) { return reject(err); - else - fulfill(data + ''); - }); - } - } - else { - throw new TypeError('No environment fetch API available.'); - } - - var SystemLoader = function($__super) { - function SystemLoader(options) { - $__super.call(this, options || {}); - - // Set default baseURL and paths - if (typeof location != 'undefined' && location.href) { - var href = __global.location.href.split('#')[0].split('?')[0]; - this.baseURL = href.substring(0, href.lastIndexOf('/') + 1); - } - else if (typeof process != 'undefined' && process.cwd) { - this.baseURL = 'file:' + process.cwd() + '/'; - if (isWindows) - this.baseURL = this.baseURL.replace(/\\/g, '/'); - } - else { - throw new TypeError('No environment baseURL'); - } - this.paths = { '*': '*.js' }; - } - - SystemLoader.__proto__ = ($__super !== null ? $__super : Function.prototype); - SystemLoader.prototype = $__Object$create(($__super !== null ? $__super.prototype : null)); - - $__Object$defineProperty(SystemLoader.prototype, "constructor", { - value: SystemLoader - }); - - $__Object$defineProperty(SystemLoader.prototype, "global", { - get: function() { - return isBrowser ? window : (isWorker ? self : __global); - }, - - enumerable: false - }); - - $__Object$defineProperty(SystemLoader.prototype, "strict", { - get: function() { return true; }, - enumerable: false - }); - - $__Object$defineProperty(SystemLoader.prototype, "normalize", { - value: function(name, parentName, parentAddress) { - if (typeof name != 'string') - throw new TypeError('Module name must be a string'); - - var segments = name.split('/'); - - if (segments.length == 0) - throw new TypeError('No module name provided'); - - // current segment - var i = 0; - // is the module name relative - var rel = false; - // number of backtracking segments - var dotdots = 0; - if (segments[0] == '.') { - i++; - if (i == segments.length) - throw new TypeError('Illegal module name "' + name + '"'); - rel = true; } else { - while (segments[i] == '..') { - i++; - if (i == segments.length) - throw new TypeError('Illegal module name "' + name + '"'); - } - if (i) - rel = true; - dotdots = i; - } + // Strip Byte Order Mark out if it's the leading char + var dataString = data + ''; + if (dataString[0] === '\ufeff') + dataString = dataString.substr(1); - for (var j = i; j < segments.length; j++) { - var segment = segments[j]; - if (segment == '' || segment == '.' || segment == '..') - throw new TypeError('Illegal module name "' + name + '"'); + fulfill(dataString); } + }); + }; + } + else if (typeof self != 'undefined' && typeof self.fetch != 'undefined') { + fetchTextFromURL = function(url, authorization, fulfill, reject) { + var opts = { + headers: {'Accept': 'application/x-es-module, */*'} + }; - if (!rel) - return name; - - // build the full module name - var normalizedParts = []; - var parentParts = (parentName || '').split('/'); - var normalizedLen = parentParts.length - 1 - dotdots; - - normalizedParts = normalizedParts.concat(parentParts.splice(0, parentParts.length - 1 - dotdots)); - normalizedParts = normalizedParts.concat(segments.splice(i, segments.length - i)); - - return normalizedParts.join('/'); - }, - - enumerable: false, - writable: true - }); - - $__Object$defineProperty(SystemLoader.prototype, "locate", { - value: function(load) { - var name = load.name; - - // NB no specification provided for System.paths, used ideas discussed in https://github.com/jorendorff/js-loaders/issues/25 - - // most specific (longest) match wins - var pathMatch = '', wildcard; - - // check to see if we have a paths entry - for (var p in this.paths) { - var pathParts = p.split('*'); - if (pathParts.length > 2) - throw new TypeError('Only one wildcard in a path is permitted'); - - // exact path match - if (pathParts.length == 1) { - if (name == p && p.length > pathMatch.length) { - pathMatch = p; - break; - } - } + if (authorization) { + if (typeof authorization == 'string') + opts.headers['Authorization'] = authorization; + opts.credentials = 'include'; + } - // wildcard path match - else { - if (name.substr(0, pathParts[0].length) == pathParts[0] && name.substr(name.length - pathParts[1].length) == pathParts[1]) { - pathMatch = p; - wildcard = name.substr(pathParts[0].length, name.length - pathParts[1].length - pathParts[0].length); - } + fetch(url, opts) + .then(function (r) { + if (r.ok) { + return r.text(); + } else { + throw new Error('Fetch error: ' + r.status + ' ' + r.statusText); } - } - - var outPath = this.paths[pathMatch]; - if (wildcard) - outPath = outPath.replace('*', wildcard); - - // percent encode just '#' in module names - // according to https://github.com/jorendorff/js-loaders/blob/master/browser-loader.js#L238 - // we should encode everything, but it breaks for servers that don't expect it - // like in (https://github.com/systemjs/systemjs/issues/168) - if (isBrowser) - outPath = outPath.replace(/#/g, '%23'); - - return toAbsoluteURL(this.baseURL, outPath); - }, + }) + .then(fulfill, reject); + } + } + else { + throw new TypeError('No environment fetch API available.'); + } - enumerable: false, - writable: true + SystemLoader.prototype.fetch = function(load) { + return new Promise(function(resolve, reject) { + fetchTextFromURL(load.address, undefined, resolve, reject); }); + }; - $__Object$defineProperty(SystemLoader.prototype, "fetch", { - value: function(load) { - var self = this; - return new Promise(function(resolve, reject) { - fetchTextFromURL(toAbsoluteURL(self.baseURL, load.address), function(source) { - resolve(source); - }, reject); - }); - }, + // -- exporting -- - enumerable: false, - writable: true - }); + if (typeof exports === 'object') + module.exports = Loader; - return SystemLoader; - }(__global.LoaderPolyfill); + __global.Reflect = __global.Reflect || {}; + __global.Reflect.Loader = __global.Reflect.Loader || Loader; + __global.Reflect.global = __global.Reflect.global || __global; + __global.LoaderPolyfill = Loader; - var System = new SystemLoader(); + if (!System) { + System = new SystemLoader(); + System.constructor = SystemLoader; + } - // note we have to export before runing "init" below if (typeof exports === 'object') module.exports = System; __global.System = System; - // <script type="module"> support - // allow a data-init function callback once loaded - if (isBrowser && typeof document.getElementsByTagName != 'undefined') { - var curScript = document.getElementsByTagName('script'); - curScript = curScript[curScript.length - 1]; - - function completed() { - document.removeEventListener( "DOMContentLoaded", completed, false ); - window.removeEventListener( "load", completed, false ); - ready(); - } - - function ready() { - var scripts = document.getElementsByTagName('script'); - for (var i = 0; i < scripts.length; i++) { - var script = scripts[i]; - if (script.type == 'module') { - var source = script.innerHTML.substr(1); - // It is important to reference the global System, rather than the one - // in our closure. We want to ensure that downstream users/libraries - // can override System w/ custom behavior. - __global.System.module(source)['catch'](function(err) { setTimeout(function() { throw err; }); }); - } - } - } - - // DOM ready, taken from https://github.com/jquery/jquery/blob/master/src/core/ready.js#L63 - if (document.readyState === 'complete') { - setTimeout(ready); - } - else if (document.addEventListener) { - document.addEventListener('DOMContentLoaded', completed, false); - window.addEventListener('load', completed, false); - } - - // run the data-init function on the script tag - if (curScript.getAttribute('data-init')) - window[curScript.getAttribute('data-init')](); - } -})(); - - -// Define our eval outside of the scope of any other reference defined in this -// file to avoid adding those references to the evaluation scope. -function __eval(__source, __global, __load) { - try { - eval('(function() { var __moduleName = "' + (__load.name || '').replace('"', '\"') + '"; ' + __source + ' \n }).call(__global);'); - } - catch(e) { - if (e.name == 'SyntaxError' || e.name == 'TypeError') - e.message = 'Evaluating ' + (__load.name || load.address) + '\n\t' + e.message; - throw e; - } -} - -})(typeof window != 'undefined' ? window : (typeof WorkerGlobalScope != 'undefined' ? - self : global)); +})(typeof self != 'undefined' ? self : global); \ No newline at end of file diff --git a/docs/circular-references-bindings.md b/docs/circular-references-bindings.md new file mode 100644 index 0000000..a8f57d7 --- /dev/null +++ b/docs/circular-references-bindings.md @@ -0,0 +1,53 @@ +### Circular References & Bindings + +#### Zebra-Striping + +All [AMD](http://requirejs.org/docs/api.html#circular), [CommonJS](http://nodejs.org/api/modules.html#modules_cycles), +and [ES6](https://github.com/ModuleLoader/es6-module-loader#circular-references--bindings) treat circular dependencies differently. +Handling this problem is one of the innovations of the loader spec, using a technique called **zebra-striping**. +This involves analyzing the dependency tree and forming alternate layers of ES6 / non-ES6 modules with circular +references in each layer for linking. The layers are then individually linked, with the appropriate circular reference +handling being done within each layer. This allows CommonJS circular references to interact with ES6 circular references. +Inter-format circular references are not supported as they would be across layers. + +This loader implementation handles zebra-striping automatically, allowing a loader like [SystemJS](https://github.com/systemjs/systemjs) +to support all module formats with exact circular reference support. + +#### ES6 Circular References & Bindings + +ES6 circular references and bindings behave in the following way: + +* Bindings are set up before module execution. +* Execution is run from depth-first left to right on the module tree stopping at circular references. +* Bindings are live - an adjustment to an export of one module affects all modules importing it, but it can +only be modified in the defining module. + +even.js +```javascript + import { odd } from './odd' + + export var counter = 0; + + export function even(n) { + counter++; + return n == 0 || odd(n - 1); + } +``` + +odd.js +```javascript + import { even } from './even'; + + export function odd(n) { + return n != 0 && even(n - 1); + } +``` + +```javascript + System.import('even').then(function(m) { + m.even(10); + m.counter; + m.even(20); + m.counter; + }); +``` \ No newline at end of file diff --git a/docs/loader-config.md b/docs/loader-config.md new file mode 100644 index 0000000..a2039b9 --- /dev/null +++ b/docs/loader-config.md @@ -0,0 +1,66 @@ +### Paths Implementation + +The System loader provides paths rules used by the standard `locate` function. + +For example, we might want to load `jquery` from a CDN location. For this we can provide a paths rule: + +```javascript + System.paths['jquery'] = '//ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js'; + System.import('jquery').then(function($) { + // ... + }); +``` + +Any reference to `jquery` in other modules will also use this same version. + +It is also possible to define wildcard paths rules. The most specific rule will be used: + +```javascript + System.paths['lodash/*'] = '/js/lodash/*.js' + System.import('lodash/map').then(function(map) { + // ... + }); +``` + +Rule specificity is determined by an exact paths match first, followed by the last deepest wildcard match. + +### Custom Compilation Options + +Custom [Traceur compilation options](https://github.com/google/traceur-compiler/wiki/Options-for-Compiling) can be set through `System.traceurOptions`, eg: + +```javascript +System.traceurOptions = { annotations = true }; +``` + +or if using Babel: + +```javascript +System.babelOptions = { experimental: true }; +``` + +or TypeScript: + +```javascript +System.typescriptOptions = {}; +``` + +### Finding the Transpiler + +For Babel use the `browser.js` file contained in the `babel-core` npm module. For Traceur use the `traceur.js` file contained in the `traceur` npm module bin folder. + +The transpiler is loaded as a module itself, so will follow normal paths rules. +> +To set custom paths to Babel or Traceur use paths configuration: + +```javascript +System.paths['traceur'] = 'path/to/traceur.js'; +``` + +Alternatively if you know that the transpiler will be needed, it will be detected from the global (`window[System.transpiler]`) when the first module is loaded, so can be loaded before ES6 Module Loader: + +```html +<script src="traceur.js"></script> +<script src="es6-module-loader.js"></script> +``` + +> TypeScript can be loaded in the browser, but in Node, must already be defined as a global before loading an ES6 file. \ No newline at end of file diff --git a/docs/loader-extensions.md b/docs/loader-extensions.md new file mode 100644 index 0000000..ed19800 --- /dev/null +++ b/docs/loader-extensions.md @@ -0,0 +1,127 @@ +### Extending the ES6 Loader + +The loader pipeline is based on the following hooks: + +* Normalize: Given the import name, provide the normalized name for the resource. +* Locate: Given a normalized module name, provide the URL for the resource. +* Fetch: Given a URL for a resource, fetch its content. +* Translate: Given module source, make any source modifications. +* Instantiate: Given module source, determine its dependencies, and how to execute it. + +Variations of these hooks can allow creating many different styles of loader. + +Each hook can either return a result directly, or a promise for the result. + +To use custom loader hooks, one would typically override the System loader hooks on the `System` global directly: + +```javascript + // store the old normalization function + var systemNormalize = System.normalize; + // override the normalization function + System.normalize = function(name, parentName, parentAddress) { + if (name == 'my/custom/rule') + return 'custom/name'; + else + return systemNormalize.call(this, name, parentName, parentAddress); + } +``` + +### Custom Extension Example - Cache Busting Extension + +```javascript +var systemLocate = System.locate; +System.locate = function(load) { + var System = this; // its good to ensure exact instance-binding + return Promise.resolve(systemLocate.call(this, load)).then(function(address) { + return address + System.cacheBust; + }); +} +System.cacheBust = '?bust=' + Date.now(); +``` + +The above will add a customizable cache-busting query parameter to all requests. Custom filtering could even be added as well to only do this for certain requests. + +### Creating a Custom Loader + +A custom loader can be created with: + +```javascript + var myLoader = new LoaderPolyfill({ + normalize: ..., + locate: ..., + fetch: ..., + translate: ..., + instantiate: ... + }); +``` + +### Loader Hooks + +The signatures for all the loader hooks is provided below: + +```javascript + +/* + * name: the unnormalized module name + * parentName: the canonical module name for the requesting module + * parentAddress: the address of the requesting module + */ +function normalize(name, parentName, parentAddress) { + return resolvedName; +} + +/* + * load.name the canonical module name + * load.metadata a metadata object that can be used to store + * derived metadata for reference in other hooks + */ +function locate(load) { + return this.baseURL + '/' + load.name + '.js'; +} + +/* + * load.name: the canonical module name + * load.address: the URL returned from locate + * load.metadata: the same metadata object by reference, which + * can be modified + */ +function fetch(load) { + return new Promise(function(resolve, reject) { + myFetchMethod.get(load.address, resolve, reject); + }); +} + +/* + * load.name + * load.address + * load.metadata + * load.source: the fetched source + */ +function translate(load) { + return load.source; +} + +/* + * load identical to previous hooks, but load.source + * is now the translated source + */ +function instantiate(load) { + // an empty return indicates standard ES6 linking and execution + return; + + // a return value creates a "dynamic" module linking + return { + deps: ['some', 'dependencies'], + execute: function() { + return loader.newModule({ + some: 'export' + }); + } + }; +} +``` + +For a more in-depth overview of creating with custom loaders, some resources are provided below: + +* [ES6 Loader API guide](https://gist.github.com/dherman/7568080) +* [Yehuda Katz's essay](https://gist.github.com/wycats/51c96e3adcdb3a68cbc3) (outdated) \ No newline at end of file diff --git a/docs/production-workflows.md b/docs/production-workflows.md new file mode 100644 index 0000000..c4ffe95 --- /dev/null +++ b/docs/production-workflows.md @@ -0,0 +1,54 @@ +### Moving to Production + +When in production, it is not suitable to load ES6 modules and syntax in the browser. + +#### System.register Output + +There is a `modules=instantiate` build output in Traceur and `modules=system` output in Babel and TypeScript that can be used with the ES6 Module Loader, +provided it has been extended with support for the System.register format. + +This is available from the [system-register-only](https://github.com/systemjs/systemjs/tree/0.17.0/dist) SystemJS build of the loader. + +The benefit of the [System.register output format](system-register.md) is that it provides [full support for circular references and live module bindings](circular-references-bindings.md). + +A basic example of using this extension with a Traceur build would be the following (although the related similar workflow would apply for Babel): + +1. Build all ES6 modules into ES5 System.register form: + + ``` + traceur --out app-build.js app/app.js --modules=instantiate + ``` + +2. If using additional ES6 features apart from modules syntax, load [`traceur-runtime.js`](https://raw.githubusercontent.com/jmcriffey/bower-traceur-runtime/0.0.79/traceur-runtime.js) (also included in the `bin` folder when installing Traceur through Bower or npm). Then include `es6-module-loader.js` and then apply the register extension before doing the import or loading the bundle as a script: + + ```html + <script src="traceur-runtime.js"></script> + <script src="system-register-only.js"></script> + + <!-- now include the bundle --> + <script src="app-build.js"></script> + + <!-- now we can import and get modules from the bundle --> + <script> + System.import('app/app'); + </script> + ``` + +* Note that `app-build.js` must be at the base-level for this to work. +* Also, the name we import, `app/app` must be the same name given to Traceur's compiler. + +#### Building into separate files + +We can also build separate files with: + +``` + traceur --dir app app-build --modules=instantiate +``` + +With the above, we can load from the separate files identical to loading ES6, but with full CSP compatibility. + +#### Building across module formats + +If using a loader like [SystemJS](https://github.com/systemjs/systemjs) to load different module formats, then a build can also be performed across module formats as well. + +See [SystemJS builder](https://github.com/systemjs/builder) for a combined approach. diff --git a/docs/system-register.md b/docs/system-register.md new file mode 100644 index 0000000..7f03f83 --- /dev/null +++ b/docs/system-register.md @@ -0,0 +1,152 @@ +### What it is + +System.register can be considered as a new module format designed to support the exact semantics of ES6 modules within ES5. +It is a format that was developed out of collaboration and is supported as a module output in Traceur (as _instantiate_), +Babel and TypeScript (as _system_). All dynamic binding and circular reference behaviors supported by ES6 modules are supported +by this format. In this way it acts as a safe and comprehensive target format for the polyfill path into ES6 modules. + +To run the format, a suitable loader implementation needs to be used that understands how to execute it. Currently these include +[SystemJS](https://github.com/systemjs/systemjs), [SystemJS Self-Executing Bundles](https://github.com/systemjs/builder#sfx-bundles) +and [ES6 Micro Loader](https://github.com/caridy/es6-micro-loader). The ES6 Module Loader polyfill also uses this format +internally when transpiling and executing ES6. + +#### Bundled vs On-Demand + +Just like AMD define, System.register can be both named and anonymous. + +When a module name string is provided as the first argument in the `System.register` call, the format is suitable for +naming multiple modules in the same JS file creating a bundle format. + +When files are separately compiled, with only one `System.register` call per module, the name should not be set. +This allows the importing environment to name the module into whatever namespace it likes without imposing a specific +schema for maximum portability. + +### How it works + +When compiling ES6 modules to ES5, the Traceur `instantiate` output and Babel `system` output generates something like the following: + +```javascript + import { p as q } from './dep'; + + var s = 'local'; + + export function func() { + return q; + } + + export class C { + } +``` + +-> + +```javascript + System.register(['./dep'], function($__export, $__moduleContext) { + var s, C, q; + function func() { + return q; + } + $__export('func', func); + return { + setters: [ + // every time a dependency updates an export, + // this function is called to update the local binding + // the setter array matches up with the dependency array above + function(m) { + q = m.p; + } + ], + execute: function() { + // use the export function to update the exports of this module + s = 'local'; + $__export('C', C = $traceurRuntime.createClass(...)); + var moduleName = $__moduleContext.id; + } + }; + }); +``` + +Initial exports and changes to exports are pushed through the setter function, `$__export`. Values of dependencies and +changes to dependency bindings are set through the dependency setters, `setters`, corresponding to the `$__export` calls of dependencies. + +Functions and variables get hoisted into the declaration scope. This outer function sets up all the bindings, +and the execution is entirely separated from this process. Hoisted functions are immediately exported. +All of the modules in the tree first run this first function setting up all the bindings. +Then we separately run all the execution functions left to right from the bottom of the tree ending at circular references. + +In this way we get the live binding and circular reference support exactly as expected by the spec, +while supporting ES3 environments for the module syntax conversion. + +#### Why the System.register name + +Since `System` is the loader name, `System.register` is a function that allows us to _define_ a module directly into the loader instance. + +Note that the loader name is not fixed and can be changed here. For example to `SystemJS.register` in the case of bundling for SystemJS. + +When code is executed, we only need to assume that `System` is in the scope of execution. + +This then has the same advantages of the AMD `define` function in that it is a CSP-compatible output mechanism, allowing support +in environments where _eval_ is not supported, which would be necessary for other types of plain script outputs. + +#### Why deferred execution + +The use of `return { setters: ..., execute: ... }` is done instead of direct execution to allow bindings to be fully propogated +through the module tree before running execution functions. This separation of setting up bindings, and then running execution +allows us to match the exact ES module execution semantics. + +This enables supporting the edge cases of for example: + +a.js +```javascript +import {b} from './b.js'; +export function a() { + b(); +} +``` + +b.js +```javascript +import {a} from './a.js'; +export function b() { + console.log('b'); +} +a(); +``` + +If a.js is imported first, then b.js will execute first. In ES module execution, b.js will successfully call the function export +from a.js before a.js has even executed since function bindings are setup before execution. This is supported fully by +the deferred loading step in this System.register approach. + +It can be argued that this full support of ES module circular references is unnecessary. There is minimal additional performance +cost to this extra return statement though and it ensures that during the transition period where ES modules and traditional +environments are running side-by-side, that the best parity is provided between the systems. + +#### Bulk exports + +The `$__export` function above can also be used to export multiple exports at the same time: + +```javascript +$__export({ key: 'value', another: 'value' }); +``` + +This is useful for performance of deep re-exports where unnecessary setter operations can be avoided, otherwise setter performance +grows quadratically with the `export *` tree depth, and can cause noticable slowdowns on large trees. + +#### Metadata + +The next iteration of this format will include support for ES6 module meta information through a new +System.register argument as soon as the specification for this is proposed. + +### Limitations + +The main limitation with authoring in this format and transitioning to ES6 is if unresolved exports exist such as: + +```javascript +import {p} from 'q'; +``` + +Where module `q` does not export a `p` at all. + +This code will run in the System.register output but not in ES6 environments. + +While this format can be adjusted to handle the SyntaxErrors that get thrown when an imported name does not exist, for performance and code-size constraints this is not provided. Ideally static checking via tooling should catch these issues rather. diff --git a/docs/tracing-api.md b/docs/tracing-api.md new file mode 100644 index 0000000..ba2677d --- /dev/null +++ b/docs/tracing-api.md @@ -0,0 +1,36 @@ +This is not in the specification, but is provided since it is such a natural extension of loading +and not much code at all. + +Enable tracing and start importing modules: + +```javascript + loader.trace = true; + loader.execute = false; // optional, disables execution of module contents + + loader.import('some/module').then(function() { + /* + Now we have: + + loader.loads['some/module'] == { + name: 'some/module', + deps: ['./unnormalized', 'deps'], + depMap: { + './unnormalized': 'normalized', + 'deps': 'deps' + }, + address: '/resolvedURL', + metadata: { metadata object from load }, + source: 'translated source code string', + kind: 'dynamic' (instantiated) or 'declarative' (ES6 module pipeline) + } + + With the dependency load records + loader.loads['normalized'] + loader.loads['deps'] + also set. + */ + }); +``` + +So tracing can be done by importing a module, then reading its normalized name off of `loader.loads` +(it is probably advisable to separately call `loader.normalize` to determine this). \ No newline at end of file diff --git a/index.js b/index.js new file mode 100644 index 0000000..821cf8f --- /dev/null +++ b/index.js @@ -0,0 +1,28 @@ +if (typeof Promise === 'undefined') + require('when/es6-shim/Promise'); + +var System = require('./dist/es6-module-loader-dev.src'); + +var filePrefix = 'file:' + (process.platform.match(/^win/) ? '/' : '') + '//'; + +try { + System.paths.traceur = filePrefix + require.resolve('traceur/bin/traceur.js'); +} +catch(e) {} +try { + System.paths.babel = filePrefix + require.resolve('babel-core/browser.js'); +} +catch(e) {} +try { + System.paths.babel = System.paths.babel || filePrefix + require.resolve('babel/browser.js'); +} +catch(e) {} +try { + System.paths.typescript = filePrefix + require.resolve('typescript/bin/typescript.js'); +} +catch(e) { } + +module.exports = { + Loader: global.LoaderPolyfill, + System: System +}; diff --git a/karma.conf.js b/karma.conf.js index 95d46ee..a07dde2 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -30,30 +30,36 @@ if (options.saucelabs) { } //// - module.exports = function(config) { var files = [ 'test/_helper.js', [options['babel'] ? 'node_modules/regenerator/runtime.js' : ''], - [!options.ie8 ? (!options['babel'] ? 'node_modules/traceur/bin/traceur.js' : 'node_modules/babel-core/browser.js') : ''], + [!options.ie8 + ? (options['babel'] + ? 'node_modules/babel-core/browser.js' + : options['typescript'] + ? 'node_modules/typescript/lib/typescript.js' + : 'node_modules/traceur/bin/traceur.js') + : ''], - 'dist/es6-module-loader' + (options.polyfill ? '' : '-sans-promises') + '.src.js', + [options.polyfill ? 'node_modules/when/es6-shim/Promise.js' : ''], + [options.polyfill ? 'dist/es6-module-loader-dev.js' : 'dist/es6-module-loader-dev.src.js'], 'test/_browser.js', 'test/browser-script-type-module.js', 'test/custom-loader.js', - [!options.ie8 ? 'test/*.spec.js' : 'test/*.normalize.spec.js'], + [!options.ie8 ? 'test/*.spec.js' : ['test/system.normalize.spec.js', 'test/custom-loader.spec.js']], {pattern: 'test/{loader,loads,syntax,worker}/**/*', included: false}, {pattern: 'node_modules/traceur/bin/traceur.js', included: false}, {pattern: 'node_modules/babel-core/browser.js', included: false}, + {pattern: 'node_modules/typescript/lib/typescript.js', included: false}, {pattern: 'node_modules/when/es6-shim/Promise.js', included: false}, {pattern: 'dist/es6-module-loader*.js', included: false} ]; - // Default Config config.set({ basePath: '', @@ -67,7 +73,12 @@ module.exports = function(config) { timeout: 8000 }, system: { - transpiler: options.babel ? 'babel' : 'traceur' + ie8: options.ie8, + transpiler: options.babel + ? 'babel' + : options.typescript + ? 'typescript' + : 'traceur' } } }); @@ -108,10 +119,6 @@ module.exports = function(config) { 'internet explorer': '9..11' } }); - - - // IE tests disabled for now (https://github.com/ModuleLoader/es6-module-loader/issues/295) - customLaunchers = undefined; if (options.ie8) { customLaunchers = geSaLaKaCuLa({ @@ -121,6 +128,9 @@ module.exports = function(config) { }); } + // saucelabs still fail sporadically + customLaunchers = undefined; + var now = new Date(); var buildData = options.travis ? { diff --git a/lib/index-babel.js b/lib/index-babel.js deleted file mode 100644 index b0c1a70..0000000 --- a/lib/index-babel.js +++ /dev/null @@ -1,13 +0,0 @@ -var System = require('../dist/es6-module-loader.src'); - -System.transpiler = 'babel'; - -try { - System.paths['babel'] = require.resolve('babel-core/browser.js'); -} -catch(e) {} - -module.exports = { - Loader: global.LoaderPolyfill, - System: System -}; diff --git a/lib/index-traceur.js b/lib/index-traceur.js deleted file mode 100644 index 85757e4..0000000 --- a/lib/index-traceur.js +++ /dev/null @@ -1,12 +0,0 @@ -var System = require('../dist/es6-module-loader.src'); - -System.transpiler = 'traceur'; -try { - System.paths['traceur'] = require.resolve('traceur/bin/traceur.js'); -} -catch(e) {} - -module.exports = { - Loader: global.LoaderPolyfill, - System: System -}; diff --git a/package.json b/package.json index 65f433f..576173a 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "es6-module-loader", "description": "An ES6 Module Loader shim", - "version": "0.16.1", + "version": "0.17.11", "homepage": "https://github.com/ModuleLoader/es6-module-loader", "author": { "name": "Guy Bedford, Luke Hoban, Addy Osmani", @@ -22,16 +22,14 @@ } ], "devDependencies": { - "babel-core": "^4.7.16", + "babel-core": "^5.8.20", "expect.js": "^0.3.1", "gesalakacula": "^1.0.0", "grunt": "~0.4.1", "grunt-contrib-concat": "^0.5.0", "grunt-contrib-jshint": "~0.6.0", "grunt-contrib-uglify": "~0.6.0", - "grunt-esnext": "0.0.3", - "grunt-string-replace": "^0.2.7", - "karma": "^0.12.28", + "karma": "^0.12.35", "karma-benchmark": "^0.4.0", "karma-benchmark-reporter": "^0.1.1", "karma-chrome-launcher": "^0.1.7", @@ -43,8 +41,9 @@ "karma-sauce-launcher": "^0.2.10", "minimist": "^1.1.0", "mocha": "^2.0.1", - "regenerator": "^0.8.9", - "traceur": "0.0.87" + "regenerator-runtime": "^0.9.5", + "traceur": "0.0.93", + "typescript": "^1.6.2" }, "keywords": [ "script", @@ -55,13 +54,13 @@ "engines": { "node": ">=0.8.0" }, - "main": "lib/index-traceur", "scripts": { "test": "npm run test:node && npm run test:browser", - "test:node": "mocha test/_node-traceur.js && mocha test/_node-babel.js", - "test:browser": "npm run test:browser-traceur && npm run test:browser-babel", + "test:node": "mocha test/_node-traceur.js && mocha test/_node-babel.js && mocha test/_node-typescript.js", + "test:browser": "npm run test:browser-traceur && npm run test:browser-babel && npm run test:browser-typescript", "test:browser-traceur": "karma start --single-run", "test:browser-babel": "karma start --single-run --babel", + "test:browser-typescript": "karma start --single-run --typescript", "test:browser:perf": "karma start karma-benchmark.conf.js --single-run" }, "dependencies": { diff --git a/src/declarative.js b/src/declarative.js new file mode 100644 index 0000000..73f2306 --- /dev/null +++ b/src/declarative.js @@ -0,0 +1,297 @@ +/* + * ES6 Module Declarative Linking Code - Dev Build Only + */ + + // 15.2.5.3 Module Linking Groups + + // 15.2.5.3.2 BuildLinkageGroups alternative implementation + // Adjustments (also see https://bugs.ecmascript.org/show_bug.cgi?id=2755) + // 1. groups is an already-interleaved array of group kinds + // 2. load.groupIndex is set when this function runs + // 3. load.groupIndex is the interleaved index ie 0 declarative, 1 dynamic, 2 declarative, ... (or starting with dynamic) + function buildLinkageGroups(load, loads, groups) { + groups[load.groupIndex] = groups[load.groupIndex] || []; + + // if the load already has a group index and its in its group, its already been done + // this logic naturally handles cycles + if (indexOf.call(groups[load.groupIndex], load) != -1) + return; + + // now add it to the group to indicate its been seen + groups[load.groupIndex].push(load); + + for (var i = 0, l = loads.length; i < l; i++) { + var loadDep = loads[i]; + + // dependencies not found are already linked + for (var j = 0; j < load.dependencies.length; j++) { + if (loadDep.name == load.dependencies[j].value) { + // by definition all loads in linkset are loaded, not linked + console.assert(loadDep.status == 'loaded', 'Load in linkSet not loaded!'); + + // if it is a group transition, the index of the dependency has gone up + // otherwise it is the same as the parent + var loadDepGroupIndex = load.groupIndex + (loadDep.isDeclarative != load.isDeclarative); + + // the group index of an entry is always the maximum + if (loadDep.groupIndex === undefined || loadDep.groupIndex < loadDepGroupIndex) { + + // if already in a group, remove from the old group + if (loadDep.groupIndex !== undefined) { + groups[loadDep.groupIndex].splice(indexOf.call(groups[loadDep.groupIndex], loadDep), 1); + + // if the old group is empty, then we have a mixed depndency cycle + if (groups[loadDep.groupIndex].length == 0) + throw new TypeError("Mixed dependency cycle detected"); + } + + loadDep.groupIndex = loadDepGroupIndex; + } + + buildLinkageGroups(loadDep, loads, groups); + } + } + } + } + + // 15.2.5.4 + // declarative linking implementation + function link(linkSet, linkError) { + + var loader = linkSet.loader; + + if (!linkSet.loads.length) + return; + + // console.log('linking {' + logloads(linkSet.loads) + '}'); + // snapshot(loader); + + // 15.2.5.3.1 LinkageGroups alternative implementation + + // build all the groups + // because the first load represents the top of the tree + // for a given linkset, we can work down from there + var groups = []; + var startingLoad = linkSet.loads[0]; + startingLoad.groupIndex = 0; + buildLinkageGroups(startingLoad, linkSet.loads, groups); + + // determine the kind of the bottom group + var curGroupDeclarative = startingLoad.isDeclarative == groups.length % 2; + + // run through the groups from bottom to top + for (var i = groups.length - 1; i >= 0; i--) { + var group = groups[i]; + for (var j = 0; j < group.length; j++) { + var load = group[j]; + + // 15.2.5.5 LinkDeclarativeModules adjusted + if (curGroupDeclarative) { + linkDeclarativeModule(load, linkSet.loads, loader); + } + // 15.2.5.6 LinkDynamicModules adjusted + else { + var module = doDynamicExecute(linkSet, load, linkError); + if (!module) + return; + load.module = { + name: load.name, + module: module + }; + load.status = 'linked'; + } + finishLoad(loader, load); + } + + // alternative current kind for next loop + curGroupDeclarative = !curGroupDeclarative; + } + } + + + // custom module records for binding graph + // store linking module records in a separate table + function getOrCreateModuleRecord(name, loader) { + var moduleRecords = loader.moduleRecords; + return moduleRecords[name] || (moduleRecords[name] = { + name: name, + dependencies: [], + module: new Module(), // start from an empty module and extend + importers: [] + }); + } + + // custom declarative linking function + function linkDeclarativeModule(load, loads, loader) { + if (load.module) + return; + + var module = load.module = getOrCreateModuleRecord(load.name, loader); + var moduleObj = load.module.module; + + var registryEntry = load.declare.call(__global, function(name, value) { + // NB This should be an Object.defineProperty, but that is very slow. + // By disaling this module write-protection we gain performance. + // It could be useful to allow an option to enable or disable this. + module.locked = true; + + // export({name: value}) + if (typeof name == 'object') { + for (var p in name) + moduleObj[p] = name[p]; + } + // export(name, value) + else { + moduleObj[name] = value; + } + + for (var i = 0, l = module.importers.length; i < l; i++) { + var importerModule = module.importers[i]; + if (!importerModule.locked) { + for (var j = 0; j < importerModule.dependencies.length; ++j) { + if (importerModule.dependencies[j] === module) { + importerModule.setters[j](moduleObj); + } + } + } + } + + module.locked = false; + return value; + }, { id: load.name }); + + // setup our setters and execution function + module.setters = registryEntry.setters; + module.execute = registryEntry.execute; + + // now link all the module dependencies + // amending the depMap as we go + for (var i = 0, l = load.dependencies.length; i < l; i++) { + var depName = load.dependencies[i].value; + var depModule = loader.modules[depName]; + + // if dependency not already in the module registry + // then try and link it now + if (!depModule) { + // get the dependency load record + for (var j = 0; j < loads.length; j++) { + if (loads[j].name != depName) + continue; + + // only link if already not already started linking (stops at circular / dynamic) + if (!loads[j].module) { + linkDeclarativeModule(loads[j], loads, loader); + depModule = loads[j].module; + } + // if circular, create the module record + else { + depModule = getOrCreateModuleRecord(depName, loader); + } + } + } + + // only declarative modules have dynamic bindings + if (depModule.importers) { + module.dependencies.push(depModule); + depModule.importers.push(module); + } + else { + // track dynamic records as null module records as already linked + module.dependencies.push(null); + } + + // run the setter for this dependency + if (module.setters[i]) + module.setters[i](depModule.module); + } + + load.status = 'linked'; + } + + /* + * Module Object non-exotic for ES5: + * + * module.module bound module object + * module.execute execution function for module + * module.dependencies list of module objects for dependencies + * See getOrCreateModuleRecord for all properties + * + */ + function doExecute(module) { + try { + module.execute.call(__global); + } + catch(e) { + return e; + } + } + + // 15.2.5.5.1 LinkImports not implemented + // 15.2.5.7 ResolveExportEntries not implemented + // 15.2.5.8 ResolveExports not implemented + // 15.2.5.9 ResolveExport not implemented + // 15.2.5.10 ResolveImportEntries not implemented + + // 15.2.6.1 + function evaluateLoadedModule(loader, load) { + console.assert(load.status == 'linked', 'is linked ' + load.name); + + doEnsureEvaluated(load.module, [], loader); + return load.module.module; + } + + // propogate execution errors + // see https://bugs.ecmascript.org/show_bug.cgi?id=2993 + function doEnsureEvaluated(module, seen, loader) { + var err = ensureEvaluated(module, seen, loader); + if (err) + throw err; + } + // 15.2.6.2 EnsureEvaluated adjusted + function ensureEvaluated(module, seen, loader) { + if (module.evaluated || !module.dependencies) + return; + + seen.push(module); + + var deps = module.dependencies; + var err; + + for (var i = 0, l = deps.length; i < l; i++) { + var dep = deps[i]; + // dynamic dependencies are empty in module.dependencies + // as they are already linked + if (!dep) + continue; + if (indexOf.call(seen, dep) == -1) { + err = ensureEvaluated(dep, seen, loader); + // stop on error, see https://bugs.ecmascript.org/show_bug.cgi?id=2996 + if (err) { + err = addToError(err, 'Error evaluating ' + dep.name); + return err; + } + } + } + + if (module.failed) + return new Error('Module failed execution.'); + + if (module.evaluated) + return; + + module.evaluated = true; + err = doExecute(module); + if (err) { + module.failed = true; + } + else if (Object.preventExtensions) { + // spec variation + // we don't create a new module here because it was created and ammended + // we just disable further extensions instead + Object.preventExtensions(module.module); + } + + module.execute = undefined; + return err; + } +})(); diff --git a/src/dynamic-only.js b/src/dynamic-only.js new file mode 100644 index 0000000..3f57248 --- /dev/null +++ b/src/dynamic-only.js @@ -0,0 +1,39 @@ +/* + * ES6 Module Declarative Linking Code - Dev Build Only + */ + function link(linkSet, linkError) { + + var loader = linkSet.loader; + + if (!linkSet.loads.length) + return; + + var loads = linkSet.loads.concat([]); + + for (var i = 0; i < loads.length; i++) { + var load = loads[i]; + + var module = doDynamicExecute(linkSet, load, linkError); + if (!module) + return; + load.module = { + name: load.name, + module: module + }; + load.status = 'linked'; + + finishLoad(loader, load); + } + } + + function evaluateLoadedModule(loader, load) { + console.assert(load.status == 'linked', 'is linked ' + load.name); + return load.module.module; + } + + function doEnsureEvaluated() {} + + function transpile() { + throw new TypeError('ES6 transpilation is only provided in the dev module loader build.'); + } +})(); \ No newline at end of file diff --git a/src/loader.js b/src/loader.js index 889ed89..1f45121 100644 --- a/src/loader.js +++ b/src/loader.js @@ -18,6 +18,34 @@ ********************************************************************************************* */ +function Module() {} +// http://www.ecma-international.org/ecma-262/6.0/#sec-@@tostringtag +defineProperty(Module.prototype, 'toString', { + value: function() { + return 'Module'; + } +}); +function Loader(options) { + this._loader = { + loaderObj: this, + loads: [], + modules: {}, + importPromises: {}, + moduleRecords: {} + }; + + // 26.3.3.6 + defineProperty(this, 'global', { + get: function() { + return __global; + } + }); + + // 26.3.3.13 realm not implemented +} + +(function() { + // Some Helpers // logs a linkset snapshot for debugging @@ -101,23 +129,6 @@ function logloads(loads) { } } */ - -(function() { - var Promise = __global.Promise || require('when/es6-shim/Promise'); - if (__global.console) - console.assert = console.assert || function() {}; - - // IE8 support - var indexOf = Array.prototype.indexOf || function(item) { - for (var i = 0, thisLen = this.length; i < thisLen; i++) { - if (this[i] === item) { - return i; - } - } - return -1; - }; - var defineProperty = $__Object$defineProperty; - // 15.2.3 - Runtime Semantics: Loader State // 15.2.3.11 @@ -132,11 +143,13 @@ function logloads(loads) { // 15.2.3.2 Load Records and LoadRequest Objects + var anonCnt = 0; + // 15.2.3.2.1 function createLoad(name) { return { status: 'loading', - name: name, + name: name || '<Anonymous' + ++anonCnt + '>', linkSets: [], dependencies: [], metadata: {} @@ -181,7 +194,6 @@ function logloads(loads) { load = loader.loads[i]; if (load.name != name) continue; - console.assert(load.status == 'loading' || load.status == 'loaded', 'loading or loaded'); return load; } @@ -221,8 +233,6 @@ function logloads(loads) { ); } - var anonCnt = 0; - // 15.2.4.5 function proceedToTranslate(loader, load, p) { p @@ -231,6 +241,8 @@ function logloads(loads) { if (load.status != 'loading') return; + load.address = load.address || load.name; + return Promise.resolve(loader.loaderObj.translate({ name: load.name, metadata: load.metadata, address: load.address, source: source })) // 15.2.4.5.2 CallInstantiate @@ -242,11 +254,9 @@ function logloads(loads) { // 15.2.4.5.3 InstantiateSucceeded .then(function(instantiateResult) { if (instantiateResult === undefined) { - load.address = load.address || '<Anonymous Module ' + ++anonCnt + '>'; - // instead of load.kind, use load.isDeclarative load.isDeclarative = true; - return loader.loaderObj.transpile(load) + return transpile.call(loader.loaderObj, load) .then(function(transpiled) { // Hijack System.register to set declare function var curSystem = __global.System; @@ -260,8 +270,9 @@ function logloads(loads) { // store the deps as load.deps load.declare = declare; load.depsList = deps; - } - __eval(transpiled, __global, load); + } + // empty {} context is closest to undefined 'this' we can get + __eval(transpiled, load.address, {}); curSystem.register = curRegister; }); } @@ -354,18 +365,21 @@ function logloads(loads) { if (loader.loads[i].name == name) { existingLoad = loader.loads[i]; - if(step == 'translate' && !existingLoad.source) { + if (step == 'translate' && !existingLoad.source) { existingLoad.address = stepState.moduleAddress; proceedToTranslate(loader, existingLoad, Promise.resolve(stepState.moduleSource)); } - return existingLoad.linkSets[0].done.then(function() { - resolve(existingLoad); - }); + // a primary load -> use that existing linkset if it is for the direct load here + // otherwise create a new linkset unit + if (existingLoad.linkSets.length && existingLoad.linkSets[0].loads[0].name == existingLoad.name) + return existingLoad.linkSets[0].done.then(function() { + resolve(existingLoad); + }); } } - var load = createLoad(name); + var load = existingLoad || createLoad(name); load.metadata = stepState.moduleMetadata; @@ -411,7 +425,8 @@ function logloads(loads) { } // 15.2.5.2.2 function addLoadToLinkSet(linkSet, load) { - console.assert(load.status == 'loading' || load.status == 'loaded', 'loading or loaded on link set'); + if (load.status == 'failed') + return; for (var i = 0, l = linkSet.loads.length; i < l; i++) if (linkSet.loads[i] == load) @@ -428,6 +443,9 @@ function logloads(loads) { var loader = linkSet.loader; for (var i = 0, l = load.dependencies.length; i < l; i++) { + if (!load.dependencies[i]) + continue; + var name = load.dependencies[i].value; if (loader.modules[name]) @@ -511,11 +529,31 @@ function logloads(loads) { // 15.2.5.2.4 function linkSetFailed(linkSet, load, exc) { var loader = linkSet.loader; + var requests; - if (linkSet.loads[0].name != load.name) - exc = addToError(exc, 'Error loading "' + load.name + '" from "' + linkSet.loads[0].name + '" at ' + (linkSet.loads[0].address || '<unknown>') + '\n'); + checkError: + if (load) { + if (linkSet.loads[0].name == load.name) { + exc = addToError(exc, 'Error loading ' + load.name); + } + else { + for (var i = 0; i < linkSet.loads.length; i++) { + var pLoad = linkSet.loads[i]; + for (var j = 0; j < pLoad.dependencies.length; j++) { + var dep = pLoad.dependencies[j]; + if (dep.value == load.name) { + exc = addToError(exc, 'Error loading ' + load.name + ' as "' + dep.key + '" from ' + pLoad.name); + break checkError; + } + } + } + exc = addToError(exc, 'Error loading ' + load.name + ' from ' + linkSet.loads[0].name); + } + } + else { + exc = addToError(exc, 'Error linking ' + linkSet.loads[0].name); + } - exc = addToError(exc, 'Error loading "' + load.name + '" at ' + (load.address || '<unknown>') + '\n'); var loads = linkSet.loads.concat([]); for (var i = 0, l = loads.length; i < l; i++) { @@ -574,58 +612,6 @@ function logloads(loads) { load.linkSets.splice(0, load.linkSets.length); } - // 15.2.5.3 Module Linking Groups - - // 15.2.5.3.2 BuildLinkageGroups alternative implementation - // Adjustments (also see https://bugs.ecmascript.org/show_bug.cgi?id=2755) - // 1. groups is an already-interleaved array of group kinds - // 2. load.groupIndex is set when this function runs - // 3. load.groupIndex is the interleaved index ie 0 declarative, 1 dynamic, 2 declarative, ... (or starting with dynamic) - function buildLinkageGroups(load, loads, groups) { - groups[load.groupIndex] = groups[load.groupIndex] || []; - - // if the load already has a group index and its in its group, its already been done - // this logic naturally handles cycles - if (indexOf.call(groups[load.groupIndex], load) != -1) - return; - - // now add it to the group to indicate its been seen - groups[load.groupIndex].push(load); - - for (var i = 0, l = loads.length; i < l; i++) { - var loadDep = loads[i]; - - // dependencies not found are already linked - for (var j = 0; j < load.dependencies.length; j++) { - if (loadDep.name == load.dependencies[j].value) { - // by definition all loads in linkset are loaded, not linked - console.assert(loadDep.status == 'loaded', 'Load in linkSet not loaded!'); - - // if it is a group transition, the index of the dependency has gone up - // otherwise it is the same as the parent - var loadDepGroupIndex = load.groupIndex + (loadDep.isDeclarative != load.isDeclarative); - - // the group index of an entry is always the maximum - if (loadDep.groupIndex === undefined || loadDep.groupIndex < loadDepGroupIndex) { - - // if already in a group, remove from the old group - if (loadDep.groupIndex !== undefined) { - groups[loadDep.groupIndex].splice(indexOf.call(groups[loadDep.groupIndex], loadDep), 1); - - // if the old group is empty, then we have a mixed depndency cycle - if (groups[loadDep.groupIndex].length == 0) - throw new TypeError("Mixed dependency cycle detected"); - } - - loadDep.groupIndex = loadDepGroupIndex; - } - - buildLinkageGroups(loadDep, loads, groups); - } - } - } - } - function doDynamicExecute(linkSet, load, linkError) { try { var module = load.execute(); @@ -640,281 +626,10 @@ function logloads(loads) { return module; } - // 15.2.5.4 - function link(linkSet, linkError) { - - var loader = linkSet.loader; - - if (!linkSet.loads.length) - return; - - // console.log('linking {' + logloads(linkSet.loads) + '}'); - // snapshot(loader); - - // 15.2.5.3.1 LinkageGroups alternative implementation - - // build all the groups - // because the first load represents the top of the tree - // for a given linkset, we can work down from there - var groups = []; - var startingLoad = linkSet.loads[0]; - startingLoad.groupIndex = 0; - buildLinkageGroups(startingLoad, linkSet.loads, groups); - - // determine the kind of the bottom group - var curGroupDeclarative = startingLoad.isDeclarative == groups.length % 2; - - // run through the groups from bottom to top - for (var i = groups.length - 1; i >= 0; i--) { - var group = groups[i]; - for (var j = 0; j < group.length; j++) { - var load = group[j]; - - // 15.2.5.5 LinkDeclarativeModules adjusted - if (curGroupDeclarative) { - linkDeclarativeModule(load, linkSet.loads, loader); - } - // 15.2.5.6 LinkDynamicModules adjusted - else { - var module = doDynamicExecute(linkSet, load, linkError); - if (!module) - return; - load.module = { - name: load.name, - module: module - }; - load.status = 'linked'; - } - finishLoad(loader, load); - } - - // alternative current kind for next loop - curGroupDeclarative = !curGroupDeclarative; - } - } - - - // custom module records for binding graph - // store linking module records in a separate table - function getOrCreateModuleRecord(name, loader) { - var moduleRecords = loader.moduleRecords; - return moduleRecords[name] || (moduleRecords[name] = { - name: name, - dependencies: [], - module: new Module(), // start from an empty module and extend - importers: [] - }); - } - - // custom declarative linking function - function linkDeclarativeModule(load, loads, loader) { - if (load.module) - return; - - var module = load.module = getOrCreateModuleRecord(load.name, loader); - var moduleObj = load.module.module; - - var registryEntry = load.declare.call(__global, function(name, value) { - // NB This should be an Object.defineProperty, but that is very slow. - // By disaling this module write-protection we gain performance. - // It could be useful to allow an option to enable or disable this. - module.locked = true; - moduleObj[name] = value; - - for (var i = 0, l = module.importers.length; i < l; i++) { - var importerModule = module.importers[i]; - if (!importerModule.locked) { - var importerIndex = indexOf.call(importerModule.dependencies, module); - importerModule.setters[importerIndex](moduleObj); - } - } - - module.locked = false; - return value; - }); - - // setup our setters and execution function - module.setters = registryEntry.setters; - module.execute = registryEntry.execute; - - // now link all the module dependencies - // amending the depMap as we go - for (var i = 0, l = load.dependencies.length; i < l; i++) { - var depName = load.dependencies[i].value; - var depModule = loader.modules[depName]; - - // if dependency not already in the module registry - // then try and link it now - if (!depModule) { - // get the dependency load record - for (var j = 0; j < loads.length; j++) { - if (loads[j].name != depName) - continue; - - // only link if already not already started linking (stops at circular / dynamic) - if (!loads[j].module) { - linkDeclarativeModule(loads[j], loads, loader); - depModule = loads[j].module; - } - // if circular, create the module record - else { - depModule = getOrCreateModuleRecord(depName, loader); - } - } - } - - // only declarative modules have dynamic bindings - if (depModule.importers) { - module.dependencies.push(depModule); - depModule.importers.push(module); - } - else { - // track dynamic records as null module records as already linked - module.dependencies.push(null); - } - - // run the setter for this dependency - if (module.setters[i]) - module.setters[i](depModule.module); - } - - load.status = 'linked'; - } - - - - // 15.2.5.5.1 LinkImports not implemented - // 15.2.5.7 ResolveExportEntries not implemented - // 15.2.5.8 ResolveExports not implemented - // 15.2.5.9 ResolveExport not implemented - // 15.2.5.10 ResolveImportEntries not implemented - - // 15.2.6.1 - function evaluateLoadedModule(loader, load) { - console.assert(load.status == 'linked', 'is linked ' + load.name); - - doEnsureEvaluated(load.module, [], loader); - return load.module.module; - } - - /* - * Module Object non-exotic for ES5: - * - * module.module bound module object - * module.execute execution function for module - * module.dependencies list of module objects for dependencies - * See getOrCreateModuleRecord for all properties - * - */ - function doExecute(module) { - try { - module.execute.call(__global); - } - catch(e) { - return e; - } - } - - // propogate execution errors - // see https://bugs.ecmascript.org/show_bug.cgi?id=2993 - function doEnsureEvaluated(module, seen, loader) { - var err = ensureEvaluated(module, seen, loader); - if (err) - throw err; - } - // 15.2.6.2 EnsureEvaluated adjusted - function ensureEvaluated(module, seen, loader) { - if (module.evaluated || !module.dependencies) - return; - - seen.push(module); - - var deps = module.dependencies; - var err; - - for (var i = 0, l = deps.length; i < l; i++) { - var dep = deps[i]; - // dynamic dependencies are empty in module.dependencies - // as they are already linked - if (!dep) - continue; - if (indexOf.call(seen, dep) == -1) { - err = ensureEvaluated(dep, seen, loader); - // stop on error, see https://bugs.ecmascript.org/show_bug.cgi?id=2996 - if (err) { - err = addToError(err, 'Error evaluating ' + dep.name + '\n'); - return err; - } - } - } - - if (module.failed) - return new Error('Module failed execution.'); - - if (module.evaluated) - return; - - module.evaluated = true; - err = doExecute(module); - if (err) { - module.failed = true; - } - else if (Object.preventExtensions) { - // spec variation - // we don't create a new module here because it was created and ammended - // we just disable further extensions instead - Object.preventExtensions(module.module); - } - - module.execute = undefined; - return err; - } - - function addToError(err, msg) { - if (err instanceof Error) - err.message = msg + err.message; - else - err = msg + err; - return err; - } - // 26.3 Loader // 26.3.1.1 - function Loader(options) { - if (typeof options != 'object') - throw new TypeError('Options must be an object'); - - if (options.normalize) - this.normalize = options.normalize; - if (options.locate) - this.locate = options.locate; - if (options.fetch) - this.fetch = options.fetch; - if (options.translate) - this.translate = options.translate; - if (options.instantiate) - this.instantiate = options.instantiate; - - this._loader = { - loaderObj: this, - loads: [], - modules: {}, - importPromises: {}, - moduleRecords: {} - }; - - // 26.3.3.6 - defineProperty(this, 'global', { - get: function() { - return __global; - } - }); - - // 26.3.3.13 realm not implemented - } - - function Module() {} + // defined at top // importPromises adds ability to import a module twice without error - https://bugs.ecmascript.org/show_bug.cgi?id=2601 function createImportPromise(loader, name, promise) { @@ -965,12 +680,15 @@ function logloads(loads) { return !!this._loader.modules[name]; }, // 26.3.3.8 - 'import': function(name, options) { + 'import': function(name, parentName, parentAddress) { + if (typeof parentName == 'object') + parentName = parentName.name; + // run normalize first var loaderObj = this; // added, see https://bugs.ecmascript.org/show_bug.cgi?id=2659 - return Promise.resolve(loaderObj.normalize(name, options && options.name, options && options.address)) + return Promise.resolve(loaderObj.normalize(name, parentName)) .then(function(name) { var loader = loaderObj._loader; @@ -980,7 +698,7 @@ function logloads(loads) { } return loader.importPromises[name] || createImportPromise(loaderObj, name, - loadModule(loader, name, options || {}) + loadModule(loader, name, {}) .then(function(load) { delete loader.importPromises[name]; return evaluateLoadedModule(loader, load); @@ -989,12 +707,21 @@ function logloads(loads) { }, // 26.3.3.9 keys not implemented // 26.3.3.10 - load: function(name, options) { - if (this._loader.modules[name]) { - doEnsureEvaluated(this._loader.modules[name], [], this._loader); - return Promise.resolve(this._loader.modules[name].module); - } - return this._loader.importPromises[name] || createImportPromise(this, name, loadModule(this._loader, name, {})); + load: function(name) { + var loader = this._loader; + if (loader.modules[name]) + return Promise.resolve(); + return loader.importPromises[name] || createImportPromise(this, name, new Promise(asyncStartLoadPartwayThrough({ + step: 'locate', + loader: loader, + moduleName: name, + moduleMetadata: {}, + moduleSource: undefined, + moduleAddress: undefined + })) + .then(function() { + delete loader.importPromises[name]; + })); }, // 26.3.3.11 module: function(source, options) { @@ -1014,24 +741,30 @@ function logloads(loads) { if (typeof obj != 'object') throw new TypeError('Expected object'); - // we do this to be able to tell if a module is a module privately in ES5 - // by doing m instanceof Module var m = new Module(); - for (var key in obj) { - (function (key) { - defineProperty(m, key, { - configurable: false, - enumerable: true, - get: function () { - return obj[key]; - } - }); - })(key); - } + var pNames = []; + if (Object.getOwnPropertyNames && obj != null) + pNames = Object.getOwnPropertyNames(obj); + else + for (var key in obj) + pNames.push(key); + + for (var i = 0; i < pNames.length; i++) (function(key) { + defineProperty(m, key, { + configurable: false, + enumerable: true, + get: function () { + return obj[key]; + }, + set: function() { + throw new Error('Module exports cannot be changed externally.'); + } + }); + })(pNames[i]); - if (Object.preventExtensions) - Object.preventExtensions(m); + if (Object.freeze) + Object.freeze(m); return m; }, @@ -1057,7 +790,6 @@ function logloads(loads) { }, // 26.3.3.18.3 fetch: function(load) { - throw new TypeError('Fetch not implemented'); }, // 26.3.3.18.4 translate: function(load) { @@ -1069,14 +801,3 @@ function logloads(loads) { }; var _newModule = Loader.prototype.newModule; - - if (typeof exports === 'object') - module.exports = Loader; - - __global.Reflect = __global.Reflect || {}; - __global.Reflect.Loader = __global.Reflect.Loader || Loader; - __global.Reflect.global = __global.Reflect.global || __global; - __global.LoaderPolyfill = Loader; - -})(); - diff --git a/src/module-tag.js b/src/module-tag.js new file mode 100644 index 0000000..ff79fc0 --- /dev/null +++ b/src/module-tag.js @@ -0,0 +1,37 @@ +(function() { + // <script type="module"> support + // allow a data-init function callback once loaded + if (isBrowser && typeof document.getElementsByTagName != 'undefined') { + var curScript = document.getElementsByTagName('script'); + curScript = curScript[curScript.length - 1]; + + function completed() { + document.removeEventListener( "DOMContentLoaded", completed, false ); + window.removeEventListener( "load", completed, false ); + ready(); + } + + function ready() { + var scripts = document.getElementsByTagName('script'); + for (var i = 0; i < scripts.length; i++) { + var script = scripts[i]; + if (script.type == 'module') { + var source = script.innerHTML.substr(1); + // It is important to reference the global System, rather than the one + // in our closure. We want to ensure that downstream users/libraries + // can override System w/ custom behavior. + System.module(source)['catch'](function(err) { setTimeout(function() { throw err; }); }); + } + } + } + + // DOM ready, taken from https://github.com/jquery/jquery/blob/master/src/core/ready.js#L63 + if (document.readyState === 'complete') { + setTimeout(ready); + } + else if (document.addEventListener) { + document.addEventListener('DOMContentLoaded', completed, false); + window.addEventListener('load', completed, false); + } + } +})(); \ No newline at end of file diff --git a/src/polyfill-wrapper-end.js b/src/polyfill-wrapper-end.js deleted file mode 100644 index 82ccbf1..0000000 --- a/src/polyfill-wrapper-end.js +++ /dev/null @@ -1,16 +0,0 @@ - -// Define our eval outside of the scope of any other reference defined in this -// file to avoid adding those references to the evaluation scope. -function __eval(__source, __global, __load) { - try { - eval('(function() { var __moduleName = "' + (__load.name || '').replace('"', '\"') + '"; ' + __source + ' \n }).call(__global);'); - } - catch(e) { - if (e.name == 'SyntaxError' || e.name == 'TypeError') - e.message = 'Evaluating ' + (__load.name || load.address) + '\n\t' + e.message; - throw e; - } -} - -})(typeof window != 'undefined' ? window : (typeof WorkerGlobalScope != 'undefined' ? - self : global)); diff --git a/src/polyfill-wrapper-start.js b/src/polyfill-wrapper-start.js deleted file mode 100644 index ed084bf..0000000 --- a/src/polyfill-wrapper-start.js +++ /dev/null @@ -1,35 +0,0 @@ -(function(__global) { - -$__Object$getPrototypeOf = Object.getPrototypeOf || function(obj) { - return obj.__proto__; -}; - -var $__Object$defineProperty; -(function () { - try { - if (!!Object.defineProperty({}, 'a', {})) { - $__Object$defineProperty = Object.defineProperty; - } - } catch (e) { - $__Object$defineProperty = function (obj, prop, opt) { - try { - obj[prop] = opt.value || opt.get.call(obj); - } - catch(e) {} - } - } -}()); - -$__Object$create = Object.create || function(o, props) { - function F() {} - F.prototype = o; - - if (typeof(props) === "object") { - for (prop in props) { - if (props.hasOwnProperty((prop))) { - F[prop] = props[prop]; - } - } - } - return new F(); -}; diff --git a/src/system-fetch.js b/src/system-fetch.js new file mode 100644 index 0000000..a688f0b --- /dev/null +++ b/src/system-fetch.js @@ -0,0 +1,131 @@ + var fetchTextFromURL; + if (typeof XMLHttpRequest != 'undefined') { + fetchTextFromURL = function(url, authorization, fulfill, reject) { + var xhr = new XMLHttpRequest(); + var sameDomain = true; + var doTimeout = false; + if (!('withCredentials' in xhr)) { + // check if same domain + var domainCheck = /^(\w+:)?\/\/([^\/]+)/.exec(url); + if (domainCheck) { + sameDomain = domainCheck[2] === window.location.host; + if (domainCheck[1]) + sameDomain &= domainCheck[1] === window.location.protocol; + } + } + if (!sameDomain && typeof XDomainRequest != 'undefined') { + xhr = new XDomainRequest(); + xhr.onload = load; + xhr.onerror = error; + xhr.ontimeout = error; + xhr.onprogress = function() {}; + xhr.timeout = 0; + doTimeout = true; + } + function load() { + fulfill(xhr.responseText); + } + function error() { + reject(new Error('XHR error' + (xhr.status ? ' (' + xhr.status + (xhr.statusText ? ' ' + xhr.statusText : '') + ')' : '') + ' loading ' + url)); + } + + xhr.onreadystatechange = function () { + if (xhr.readyState === 4) { + // in Chrome on file:/// URLs, status is 0 + if (xhr.status == 0) { + if (xhr.responseText) { + load(); + } + else { + // when responseText is empty, wait for load or error event + // to inform if it is a 404 or empty file + xhr.addEventListener('error', error); + xhr.addEventListener('load', load); + } + } + else if (xhr.status === 200) { + load(); + } + else { + error(); + } + } + }; + xhr.open("GET", url, true); + + if (xhr.setRequestHeader) { + xhr.setRequestHeader('Accept', 'application/x-es-module, */*'); + // can set "authorization: true" to enable withCredentials only + if (authorization) { + if (typeof authorization == 'string') + xhr.setRequestHeader('Authorization', authorization); + xhr.withCredentials = true; + } + } + + if (doTimeout) { + setTimeout(function() { + xhr.send(); + }, 0); + } else { + xhr.send(null); + } + }; + } + else if (typeof require != 'undefined' && typeof process != 'undefined') { + var fs; + fetchTextFromURL = function(url, authorization, fulfill, reject) { + if (url.substr(0, 8) != 'file:///') + throw new Error('Unable to fetch "' + url + '". Only file URLs of the form file:/// allowed running in Node.'); + fs = fs || require('fs'); + if (isWindows) + url = url.replace(/\//g, '\\').substr(8); + else + url = url.substr(7); + return fs.readFile(url, function(err, data) { + if (err) { + return reject(err); + } + else { + // Strip Byte Order Mark out if it's the leading char + var dataString = data + ''; + if (dataString[0] === '\ufeff') + dataString = dataString.substr(1); + + fulfill(dataString); + } + }); + }; + } + else if (typeof self != 'undefined' && typeof self.fetch != 'undefined') { + fetchTextFromURL = function(url, authorization, fulfill, reject) { + var opts = { + headers: {'Accept': 'application/x-es-module, */*'} + }; + + if (authorization) { + if (typeof authorization == 'string') + opts.headers['Authorization'] = authorization; + opts.credentials = 'include'; + } + + fetch(url, opts) + .then(function (r) { + if (r.ok) { + return r.text(); + } else { + throw new Error('Fetch error: ' + r.status + ' ' + r.statusText); + } + }) + .then(fulfill, reject); + } + } + else { + throw new TypeError('No environment fetch API available.'); + } + + SystemLoader.prototype.fetch = function(load) { + return new Promise(function(resolve, reject) { + fetchTextFromURL(load.address, undefined, resolve, reject); + }); + }; diff --git a/src/system-resolve.js b/src/system-resolve.js new file mode 100644 index 0000000..691fe03 --- /dev/null +++ b/src/system-resolve.js @@ -0,0 +1,45 @@ +var absURLRegEx = /^([^\/]+:\/\/|\/)/; + +// Normalization with module names as absolute URLs +SystemLoader.prototype.normalize = function(name, parentName, parentAddress) { + // NB does `import 'file.js'` import relative to the parent name or baseURL? + // have assumed that it is baseURL-relative here, but spec may well align with URLs to be the latter + // safe option for users is to always use "./file.js" for relative + + // not absolute or relative -> apply paths (what will be sites) + if (!name.match(absURLRegEx) && name[0] != '.') + name = new URL(applyPaths(this.paths, name) || name, baseURI).href; + // apply parent-relative normalization, parentAddress is already normalized + else + name = new URL(name, parentName || baseURI).href; + + return name; +}; + +SystemLoader.prototype.locate = function(load) { + return load.name; +}; + + +// ensure the transpiler is loaded correctly +SystemLoader.prototype.instantiate = function(load) { + var self = this; + return Promise.resolve(self.normalize(self.transpiler)) + .then(function(transpilerNormalized) { + // load transpiler as a global (avoiding System clobbering) + if (load.address === transpilerNormalized) { + return { + deps: [], + execute: function() { + var curSystem = __global.System; + var curLoader = __global.Reflect.Loader; + // ensure not detected as CommonJS + __eval('(function(require,exports,module){' + load.source + '})();', load.address, __global); + __global.System = curSystem; + __global.Reflect.Loader = curLoader; + return self.newModule({ 'default': __global[self.transpiler], __useDefault: true }); + } + }; + } + }); +}; \ No newline at end of file diff --git a/src/system.js b/src/system.js index f5576c1..ed4c14e 100644 --- a/src/system.js +++ b/src/system.js @@ -10,309 +10,58 @@ ********************************************************************************************* */ -(function() { - - var isWorker = typeof self !== 'undefined' && typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope; - var isBrowser = typeof window != 'undefined' && !isWorker; - var isWindows = typeof process != 'undefined' && !!process.platform.match(/^win/); - var Promise = __global.Promise || require('when/es6-shim/Promise'); - - // Helpers - // Absolute URL parsing, from https://gist.github.com/Yaffle/1088850 - function parseURI(url) { - var m = String(url).replace(/^\s+|\s+$/g, '').match(/^([^:\/?#]+:)?(\/\/(?:[^:@\/?#]*(?::[^:@\/?#]*)?@)?(([^:\/?#]*)(?::(\d*))?))?([^?#]*)(\?[^#]*)?(#[\s\S]*)?/); - // authority = '//' + user + ':' + pass '@' + hostname + ':' port - return (m ? { - href : m[0] || '', - protocol : m[1] || '', - authority: m[2] || '', - host : m[3] || '', - hostname : m[4] || '', - port : m[5] || '', - pathname : m[6] || '', - search : m[7] || '', - hash : m[8] || '' - } : null); - } - function removeDotSegments(input) { - var output = []; - input.replace(/^(\.\.?(\/|$))+/, '') - .replace(/\/(\.(\/|$))+/g, '/') - .replace(/\/\.\.$/, '/../') - .replace(/\/?[^\/]*/g, function (p) { - if (p === '/..') - output.pop(); - else - output.push(p); - }); - return output.join('').replace(/^\//, input.charAt(0) === '/' ? '/' : ''); - } - function toAbsoluteURL(base, href) { - - if (isWindows) - href = href.replace(/\\/g, '/'); - - href = parseURI(href || ''); - base = parseURI(base || ''); - - return !href || !base ? null : (href.protocol || base.protocol) + - (href.protocol || href.authority ? href.authority : base.authority) + - removeDotSegments(href.protocol || href.authority || href.pathname.charAt(0) === '/' ? href.pathname : (href.pathname ? ((base.authority && !base.pathname ? '/' : '') + base.pathname.slice(0, base.pathname.lastIndexOf('/') + 1) + href.pathname) : base.pathname)) + - (href.protocol || href.authority || href.pathname ? href.search : (href.search || base.search)) + - href.hash; - } - - var fetchTextFromURL; - if (typeof XMLHttpRequest != 'undefined') { - fetchTextFromURL = function(url, fulfill, reject) { - var xhr = new XMLHttpRequest(); - var sameDomain = true; - var doTimeout = false; - if (!('withCredentials' in xhr)) { - // check if same domain - var domainCheck = /^(\w+:)?\/\/([^\/]+)/.exec(url); - if (domainCheck) { - sameDomain = domainCheck[2] === window.location.host; - if (domainCheck[1]) - sameDomain &= domainCheck[1] === window.location.protocol; - } - } - if (!sameDomain && typeof XDomainRequest != 'undefined') { - xhr = new XDomainRequest(); - xhr.onload = load; - xhr.onerror = error; - xhr.ontimeout = error; - xhr.onprogress = function() {}; - xhr.timeout = 0; - doTimeout = true; - } - function load() { - fulfill(xhr.responseText); - } - function error() { - reject(xhr.statusText + ': ' + url || 'XHR error'); - } - - xhr.onreadystatechange = function () { - if (xhr.readyState === 4) { - if (xhr.status === 200 || (xhr.status == 0 && xhr.responseText)) { - load(); - } else { - error(); - } - } - }; - xhr.open("GET", url, true); - - if (doTimeout) - setTimeout(function() { - xhr.send(); - }, 0); - - xhr.send(null); - } - } - else if (typeof require != 'undefined') { - var fs; - fetchTextFromURL = function(url, fulfill, reject) { - if (url.substr(0, 5) != 'file:') - throw 'Only file URLs of the form file: allowed running in Node.'; - fs = fs || require('fs'); - url = url.substr(5); - if (isWindows) - url = url.replace(/\//g, '\\'); - return fs.readFile(url, function(err, data) { - if (err) - return reject(err); - else - fulfill(data + ''); - }); - } - } - else { - throw new TypeError('No environment fetch API available.'); - } - - class SystemLoader extends __global.LoaderPolyfill { - - constructor(options) { - super(options || {}); - - // Set default baseURL and paths - if (typeof location != 'undefined' && location.href) { - var href = __global.location.href.split('#')[0].split('?')[0]; - this.baseURL = href.substring(0, href.lastIndexOf('/') + 1); - } - else if (typeof process != 'undefined' && process.cwd) { - this.baseURL = 'file:' + process.cwd() + '/'; - if (isWindows) - this.baseURL = this.baseURL.replace(/\\/g, '/'); - } - else { - throw new TypeError('No environment baseURL'); - } - this.paths = { '*': '*.js' }; - } - - get global() { - return isBrowser ? window : (isWorker ? self : __global); - } - - get strict() { return true; } - - normalize(name, parentName, parentAddress) { - if (typeof name != 'string') - throw new TypeError('Module name must be a string'); - - var segments = name.split('/'); - - if (segments.length == 0) - throw new TypeError('No module name provided'); - - // current segment - var i = 0; - // is the module name relative - var rel = false; - // number of backtracking segments - var dotdots = 0; - if (segments[0] == '.') { - i++; - if (i == segments.length) - throw new TypeError('Illegal module name "' + name + '"'); - rel = true; - } - else { - while (segments[i] == '..') { - i++; - if (i == segments.length) - throw new TypeError('Illegal module name "' + name + '"'); - } - if (i) - rel = true; - dotdots = i; +var System; + +function SystemLoader() { + Loader.call(this); + this.paths = {}; +} + +// NB no specification provided for System.paths, used ideas discussed in https://github.com/jorendorff/js-loaders/issues/25 +function applyPaths(paths, name) { + // most specific (most number of slashes in path) match wins + var pathMatch = '', wildcard, maxWildcardPrefixLen = 0; + + // check to see if we have a paths entry + for (var p in paths) { + if (paths.hasOwnProperty && !paths.hasOwnProperty(p)) + continue; + + // exact path match + if (p.indexOf('*') === -1) { + if (name == p) + return paths[p]; + + // support trailing / in paths rules + else if (name.substr(0, p.length - 1) == p.substr(0, p.length - 1) && (name.length < p.length || name[p.length - 1] == p[p.length - 1]) && (paths[p][paths[p].length - 1] == '/' || paths[p] == '')) { + return paths[p].substr(0, paths[p].length - 1) + (name.length > p.length ? (paths[p] && '/' || '') + name.substr(p.length) : ''); } - - for (var j = i; j < segments.length; j++) { - var segment = segments[j]; - if (segment == '' || segment == '.' || segment == '..') - throw new TypeError('Illegal module name "' + name + '"'); - } - - if (!rel) - return name; - - // build the full module name - var normalizedParts = []; - var parentParts = (parentName || '').split('/'); - var normalizedLen = parentParts.length - 1 - dotdots; - - normalizedParts = normalizedParts.concat(parentParts.splice(0, parentParts.length - 1 - dotdots)); - normalizedParts = normalizedParts.concat(segments.splice(i, segments.length - i)); - - return normalizedParts.join('/'); } - - locate(load) { - var name = load.name; - - // NB no specification provided for System.paths, used ideas discussed in https://github.com/jorendorff/js-loaders/issues/25 - - // most specific (longest) match wins - var pathMatch = '', wildcard; - - // check to see if we have a paths entry - for (var p in this.paths) { - var pathParts = p.split('*'); - if (pathParts.length > 2) - throw new TypeError('Only one wildcard in a path is permitted'); - - // exact path match - if (pathParts.length == 1) { - if (name == p && p.length > pathMatch.length) { - pathMatch = p; - break; - } - } - - // wildcard path match - else { - if (name.substr(0, pathParts[0].length) == pathParts[0] && name.substr(name.length - pathParts[1].length) == pathParts[1]) { + // wildcard path match + else { + var pathParts = p.split('*'); + if (pathParts.length > 2) + throw new TypeError('Only one wildcard in a path is permitted'); + + var wildcardPrefixLen = pathParts[0].length; + if (wildcardPrefixLen >= maxWildcardPrefixLen && + name.substr(0, pathParts[0].length) == pathParts[0] && + name.substr(name.length - pathParts[1].length) == pathParts[1]) { + maxWildcardPrefixLen = wildcardPrefixLen; pathMatch = p; wildcard = name.substr(pathParts[0].length, name.length - pathParts[1].length - pathParts[0].length); } - } - } - - var outPath = this.paths[pathMatch]; - if (wildcard) - outPath = outPath.replace('*', wildcard); - - // percent encode just '#' in module names - // according to https://github.com/jorendorff/js-loaders/blob/master/browser-loader.js#L238 - // we should encode everything, but it breaks for servers that don't expect it - // like in (https://github.com/systemjs/systemjs/issues/168) - if (isBrowser) - outPath = outPath.replace(/#/g, '%23'); - - return toAbsoluteURL(this.baseURL, outPath); - } - - fetch(load) { - var self = this; - return new Promise(function(resolve, reject) { - fetchTextFromURL(toAbsoluteURL(self.baseURL, load.address), function(source) { - resolve(source); - }, reject); - }); } - } - var System = new SystemLoader(); - - // note we have to export before runing "init" below - if (typeof exports === 'object') - module.exports = System; + var outPath = paths[pathMatch]; + if (typeof wildcard == 'string') + outPath = outPath.replace('*', wildcard); - __global.System = System; + return outPath; +} - // <script type="module"> support - // allow a data-init function callback once loaded - if (isBrowser && typeof document.getElementsByTagName != 'undefined') { - var curScript = document.getElementsByTagName('script'); - curScript = curScript[curScript.length - 1]; - - function completed() { - document.removeEventListener( "DOMContentLoaded", completed, false ); - window.removeEventListener( "load", completed, false ); - ready(); - } - - function ready() { - var scripts = document.getElementsByTagName('script'); - for (var i = 0; i < scripts.length; i++) { - var script = scripts[i]; - if (script.type == 'module') { - var source = script.innerHTML.substr(1); - // It is important to reference the global System, rather than the one - // in our closure. We want to ensure that downstream users/libraries - // can override System w/ custom behavior. - __global.System.module(source)['catch'](function(err) { setTimeout(function() { throw err; }); }); - } - } - } - - // DOM ready, taken from https://github.com/jquery/jquery/blob/master/src/core/ready.js#L63 - if (document.readyState === 'complete') { - setTimeout(ready); - } - else if (document.addEventListener) { - document.addEventListener('DOMContentLoaded', completed, false); - window.addEventListener('load', completed, false); - } - - // run the data-init function on the script tag - if (curScript.getAttribute('data-init')) - window[curScript.getAttribute('data-init')](); - } -})(); +// inline Object.create-style class extension +function LoaderProto() {} +LoaderProto.prototype = Loader.prototype; +SystemLoader.prototype = new LoaderProto(); diff --git a/src/transpiler.js b/src/transpiler.js index 1acd0ba..79c3d96 100644 --- a/src/transpiler.js +++ b/src/transpiler.js @@ -1,56 +1,30 @@ /* - * Traceur and Babel transpile hook for Loader + * Traceur, Babel and TypeScript transpile hook for Loader */ -(function(Loader) { - var g = __global; - - function getTranspilerModule(loader, globalName) { - return loader.newModule({ 'default': g[globalName], __useDefault: true }); - } - // NB this does not support sub-classing well - var firstRun = true; +var transpile = (function() { // use Traceur by default Loader.prototype.transpiler = 'traceur'; - Loader.prototype.transpile = function(load) { + function transpile(load) { var self = this; - // pick up Transpiler modules from existing globals on first run if set - if (firstRun) { - if (g.traceur && !self.has('traceur')) - self.set('traceur', getTranspilerModule(self, 'traceur')); - if (g.babel && !self.has('babel')) - self.set('babel', getTranspilerModule(self, 'babel')); - firstRun = false; - } - - return self['import'](self.transpiler).then(function(transpiler) { + return Promise.resolve(__global[self.transpiler == 'typescript' ? 'ts' : self.transpiler] + || (self.pluginLoader || self)['import'](self.transpiler)) + .then(function(transpiler) { if (transpiler.__useDefault) transpiler = transpiler['default']; - return 'var __moduleAddress = "' + load.address + '";' + (transpiler.Compiler ? traceurTranspile : babelTranspile).call(self, load, transpiler); - }); - }; - Loader.prototype.instantiate = function(load) { - var self = this; - return Promise.resolve(self.normalize(self.transpiler)) - .then(function(transpilerNormalized) { - // load transpiler as a global (avoiding System clobbering) - if (load.name === transpilerNormalized) { - return { - deps: [], - execute: function() { - var curSystem = g.System; - var curLoader = g.Reflect.Loader; - // ensure not detected as CommonJS - __eval('(function(require,exports,module){' + load.source + '})();', g, load); - g.System = curSystem; - g.Reflect.Loader = curLoader; - return getTranspilerModule(self, load.name); - } - }; - } + var transpileFunction; + if (transpiler.Compiler) + transpileFunction = traceurTranspile; + else if (transpiler.createLanguageService) + transpileFunction = typescriptTranspile; + else + transpileFunction = babelTranspile; + + // note __moduleName will be part of the transformer meta in future when we have the spec for this + return '(function(__moduleName){' + transpileFunction.call(self, load, transpiler) + '\n})("' + load.name + '");\n//# sourceURL=' + load.address + '!transpiled'; }); }; @@ -58,47 +32,55 @@ var options = this.traceurOptions || {}; options.modules = 'instantiate'; options.script = false; - options.sourceMaps = 'inline'; + if (options.sourceMaps === undefined) + options.sourceMaps = 'inline'; options.filename = load.address; options.inputSourceMap = load.metadata.sourceMap; options.moduleName = false; var compiler = new traceur.Compiler(options); - var source = doTraceurCompile(load.source, compiler, options.filename); - // add "!eval" to end of Traceur sourceURL - // I believe this does something? - source += '!eval'; - - return source; + return doTraceurCompile(load.source, compiler, options.filename); } function doTraceurCompile(source, compiler, filename) { try { return compiler.compile(source, filename); } catch(e) { - // traceur throws an error array - throw e[0]; + // on older versions of traceur (<0.9.3), an array of errors is thrown + // rather than a single error. + if (e.length) { + throw e[0]; + } + throw e; } } function babelTranspile(load, babel) { var options = this.babelOptions || {}; options.modules = 'system'; - options.sourceMap = 'inline'; + if (options.sourceMap === undefined) + options.sourceMap = 'inline'; + options.inputSourceMap = load.metadata.sourceMap; options.filename = load.address; options.code = true; options.ast = false; - - if (!options.blacklist) - options.blacklist = ['react']; - - var source = babel.transform(load.source, options).code; - // add "!eval" to end of Babel sourceURL - // I believe this does something? - return source + '\n//# sourceURL=' + load.address + '!eval'; + return babel.transform(load.source, options).code; } + function typescriptTranspile(load, ts) { + var options = this.typescriptOptions || {}; + options.target = options.target || ts.ScriptTarget.ES5; + if (options.sourceMap === undefined) + options.sourceMap = true; + if (options.sourceMap && options.inlineSourceMap !== false) + options.inlineSourceMap = true; + + options.module = ts.ModuleKind.System; + + return ts.transpile(load.source, options, load.address); + } -})(__global.LoaderPolyfill); \ No newline at end of file + return transpile; +})(); diff --git a/src/url-polyfill.js b/src/url-polyfill.js new file mode 100644 index 0000000..0f3766c --- /dev/null +++ b/src/url-polyfill.js @@ -0,0 +1,65 @@ +// from https://gist.github.com/Yaffle/1088850 +(function(global) { +function URLPolyfill(url, baseURL) { + if (typeof url != 'string') + throw new TypeError('URL must be a string'); + var m = String(url).replace(/^\s+|\s+$/g, "").match(/^([^:\/?#]+:)?(?:\/\/(?:([^:@\/?#]*)(?::([^:@\/?#]*))?@)?(([^:\/?#]*)(?::(\d*))?))?([^?#]*)(\?[^#]*)?(#[\s\S]*)?/); + if (!m) + throw new RangeError('Invalid URL format'); + var protocol = m[1] || ""; + var username = m[2] || ""; + var password = m[3] || ""; + var host = m[4] || ""; + var hostname = m[5] || ""; + var port = m[6] || ""; + var pathname = m[7] || ""; + var search = m[8] || ""; + var hash = m[9] || ""; + if (baseURL !== undefined) { + var base = baseURL instanceof URLPolyfill ? baseURL : new URLPolyfill(baseURL); + var flag = !protocol && !host && !username; + if (flag && !pathname && !search) + search = base.search; + if (flag && pathname[0] !== "/") + pathname = (pathname ? (((base.host || base.username) && !base.pathname ? "/" : "") + base.pathname.slice(0, base.pathname.lastIndexOf("/") + 1) + pathname) : base.pathname); + // dot segments removal + var output = []; + pathname.replace(/^(\.\.?(\/|$))+/, "") + .replace(/\/(\.(\/|$))+/g, "/") + .replace(/\/\.\.$/, "/../") + .replace(/\/?[^\/]*/g, function (p) { + if (p === "/..") + output.pop(); + else + output.push(p); + }); + pathname = output.join("").replace(/^\//, pathname[0] === "/" ? "/" : ""); + if (flag) { + port = base.port; + hostname = base.hostname; + host = base.host; + password = base.password; + username = base.username; + } + if (!protocol) + protocol = base.protocol; + } + + // convert windows file URLs to use / + if (protocol == 'file:') + pathname = pathname.replace(/\\/g, '/'); + + this.origin = host ? protocol + (protocol !== "" || host !== "" ? "//" : "") + host : ""; + this.href = protocol + (protocol && host || protocol == "file:" ? "//" : "") + (username !== "" ? username + (password !== "" ? ":" + password : "") + "@" : "") + host + pathname + search + hash; + this.protocol = protocol; + this.username = username; + this.password = password; + this.host = host; + this.hostname = hostname; + this.port = port; + this.pathname = pathname; + this.search = search; + this.hash = hash; +} +global.URLPolyfill = URLPolyfill; +})(typeof self != 'undefined' ? self : global); \ No newline at end of file diff --git a/src/wrapper-end.js b/src/wrapper-end.js new file mode 100644 index 0000000..b4d01a6 --- /dev/null +++ b/src/wrapper-end.js @@ -0,0 +1,21 @@ + // -- exporting -- + + if (typeof exports === 'object') + module.exports = Loader; + + __global.Reflect = __global.Reflect || {}; + __global.Reflect.Loader = __global.Reflect.Loader || Loader; + __global.Reflect.global = __global.Reflect.global || __global; + __global.LoaderPolyfill = Loader; + + if (!System) { + System = new SystemLoader(); + System.constructor = SystemLoader; + } + + if (typeof exports === 'object') + module.exports = System; + + __global.System = System; + +})(typeof self != 'undefined' ? self : global); \ No newline at end of file diff --git a/src/wrapper-start.js b/src/wrapper-start.js new file mode 100644 index 0000000..ca9f574 --- /dev/null +++ b/src/wrapper-start.js @@ -0,0 +1,113 @@ +(function(__global) { + + var isWorker = typeof window == 'undefined' && typeof self != 'undefined' && typeof importScripts != 'undefined'; + var isBrowser = typeof window != 'undefined' && typeof document != 'undefined'; + var isWindows = typeof process != 'undefined' && typeof process.platform != 'undefined' && !!process.platform.match(/^win/); + + if (!__global.console) + __global.console = { assert: function() {} }; + + // IE8 support + var indexOf = Array.prototype.indexOf || function(item) { + for (var i = 0, thisLen = this.length; i < thisLen; i++) { + if (this[i] === item) { + return i; + } + } + return -1; + }; + + var defineProperty; + (function () { + try { + if (!!Object.defineProperty({}, 'a', {})) + defineProperty = Object.defineProperty; + } + catch (e) { + defineProperty = function(obj, prop, opt) { + try { + obj[prop] = opt.value || opt.get.call(obj); + } + catch(e) {} + } + } + })(); + + var errArgs = new Error(0, '_').fileName == '_'; + + function addToError(err, msg) { + // parse the stack removing loader code lines for simplification + if (!err.originalErr) { + var stack = ((err.message || err) + (err.stack ? '\n' + err.stack : '')).toString().split('\n'); + var newStack = []; + for (var i = 0; i < stack.length; i++) { + if (typeof $__curScript == 'undefined' || stack[i].indexOf($__curScript.src) == -1) + newStack.push(stack[i]); + } + } + + var newMsg = (newStack ? newStack.join('\n\t') : err.message) + '\n\t' + msg; + + // Convert file:/// URLs to paths in Node + if (!isBrowser) + newMsg = newMsg.replace(isWindows ? /file:\/\/\//g : /file:\/\//g, ''); + + var newErr = errArgs ? new Error(newMsg, err.fileName, err.lineNumber) : new Error(newMsg); + + // Node needs stack adjustment for throw to show message + if (!isBrowser) + newErr.stack = newMsg; + // Clearing the stack stops unnecessary loader lines showing + else + newErr.stack = null; + + // track the original error + newErr.originalErr = err.originalErr || err; + + return newErr; + } + + function __eval(source, debugName, context) { + try { + new Function(source).call(context); + } + catch(e) { + throw addToError(e, 'Evaluating ' + debugName); + } + } + + var baseURI; + + // environent baseURI detection + if (typeof document != 'undefined' && document.getElementsByTagName) { + baseURI = document.baseURI; + + if (!baseURI) { + var bases = document.getElementsByTagName('base'); + baseURI = bases[0] && bases[0].href || window.location.href; + } + } + else if (typeof location != 'undefined') { + baseURI = __global.location.href; + } + + // sanitize out the hash and querystring + if (baseURI) { + baseURI = baseURI.split('#')[0].split('?')[0]; + baseURI = baseURI.substr(0, baseURI.lastIndexOf('/') + 1); + } + else if (typeof process != 'undefined' && process.cwd) { + baseURI = 'file://' + (isWindows ? '/' : '') + process.cwd() + '/'; + if (isWindows) + baseURI = baseURI.replace(/\\/g, '/'); + } + else { + throw new TypeError('No environment baseURI'); + } + + try { + var nativeURL = new __global.URL('test:///').protocol == 'test:'; + } + catch(e) {} + + var URL = nativeURL ? __global.URL : __global.URLPolyfill; diff --git a/test/_browser.js b/test/_browser.js index ef5b957..83600b7 100644 --- a/test/_browser.js +++ b/test/_browser.js @@ -1,8 +1,9 @@ -// Change base url to the karma "base" -System.baseURL += 'base/'; +System.paths['*'] = 'base/*'; +baseURL += 'base/'; System.paths.traceur = 'node_modules/traceur/bin/traceur.js'; System.paths.babel = 'node_modules/babel-core/browser.js'; +System.paths.typescript = 'node_modules/typescript/bin/typescript.js'; System.transpiler = __karma__.config.system.transpiler; diff --git a/test/_helper.js b/test/_helper.js index 8097ed5..eac26ee 100644 --- a/test/_helper.js +++ b/test/_helper.js @@ -7,6 +7,39 @@ __global.console = { log : __global.dump || function (){} }; } + var isWindows = typeof process != 'undefined' && process.platform.match(/^win/); + + var baseURI; + // environent baseURI detection + if (typeof document != 'undefined' && document.getElementsByTagName) { + baseURI = document.baseURI; + + if (!baseURI) { + var bases = document.getElementsByTagName('base'); + baseURI = bases[0] && bases[0].href || window.location.href; + } + + // sanitize out the hash and querystring + baseURI = baseURI.split('#')[0].split('?')[0]; + baseURI = baseURI.substr(0, baseURI.lastIndexOf('/') + 1); + } + else if (typeof process != 'undefined' && process.cwd) { + baseURI = 'file://' + (isWindows ? '/' : '') + process.cwd() + '/'; + if (isWindows) + baseURI = baseURI.replace(/\\/g, '/'); + } + else if (typeof location != 'undefined') { + baseURI = __global.location.href; + } + else { + throw new TypeError('No environment baseURI'); + } + + // baseURI - the current path, for standard relative normalization (./x) + __global.baseURI = baseURI; + + // baseURL - the base path, for plain relative normalization (x) + __global.baseURL = baseURI; /** * Describe a block if the bool is true. diff --git a/test/_node-babel.js b/test/_node-babel.js index 1a1203c..3048744 100644 --- a/test/_node-babel.js +++ b/test/_node-babel.js @@ -6,8 +6,10 @@ require('./_helper'); require('regenerator/runtime'); -global.System = require('../lib/index-babel').System; +global.System = require('../index').System; +global.System.transpiler = 'babel'; +require('./system.normalize.spec'); require('./system.spec'); require('./custom-loader'); diff --git a/test/_node-traceur.js b/test/_node-traceur.js index 1bf386f..09a2a69 100644 --- a/test/_node-traceur.js +++ b/test/_node-traceur.js @@ -4,10 +4,9 @@ global.expect = require('expect.js'); require('./_helper'); -global.System = require('../lib/index-traceur').System; - -System.parser = 'traceur'; +global.System = require('../index').System; +require('./system.normalize.spec'); require('./system.spec'); require('./custom-loader'); diff --git a/test/_node-typescript.js b/test/_node-typescript.js new file mode 100644 index 0000000..e0d535c --- /dev/null +++ b/test/_node-typescript.js @@ -0,0 +1,14 @@ +'use strict'; + +global.expect = require('expect.js'); + +require('./_helper'); + +global.System = require('../index').System; +global.ts = require('typescript'); +global.System.transpiler = 'typescript'; + +require('./system.spec'); + +require('./custom-loader'); +require('./custom-loader.spec'); diff --git a/test/custom-loader.js b/test/custom-loader.js index 6e0ed92..04734d4 100644 --- a/test/custom-loader.js +++ b/test/custom-loader.js @@ -15,114 +15,129 @@ return module; }; - var customLoader = new Reflect.Loader({ - normalize: function (name, parentName, parentAddress) { - return new Promise(function (resolve, reject) { - if (name == 'asdfasdf') { - return setTimeout(function () { - resolve('test/loader/async-norm'); - }, 500); - } - - if (name == 'error1') { - return setTimeout(function () { reject('error1'); }, 100); - } - - var normalized = System.normalize(name, parentName, parentAddress); - resolve(normalized); - }); - }, - locate: function (load) { - if (load.name == 'error2') { - return new Promise(function (resolve, reject) { - setTimeout(function () { reject('error2'); }, 100); - }); + function CustomLoader(baseURL) { + System.constructor.call(this, baseURL); + } + + // inline Object.create-style class extension + function CustomLoaderProto() {} + CustomLoaderProto.prototype = System.constructor.prototype; + CustomLoader.prototype = new CustomLoaderProto(); + + + + CustomLoader.prototype.normalize = function (name, parentName, parentAddress) { + return new Promise(function(resolve, reject) { + if (name == 'asdfasdf') { + return setTimeout(function () { + resolve('test/loader/async-norm.js'); + }, 500); } - if (load.name.substr(0, 5) == 'path/') { - load.name = 'test/loader/' + load.name.substr(5); - } - return System.locate(load); - }, - fetch: function (load) { - if (load.name == 'error3') { - throw 'error3'; - } - if (load.name == 'error4' || load.name == 'error5') { - return 'asdf'; - } - return System.fetch.apply(this, arguments); - }, - translate: function (load) { - if (load.name == 'error4') { - return new Promise(function (resolve, reject) { - setTimeout(function () { reject('error4'); }, 100); - }); - } - return System.translate.apply(this, arguments); - }, - instantiate: function (load) { - if (load.name == this.transpiler) { - var transpiler = this.transpiler; - return System.import(transpiler).then(function() { - return { - deps: [], - execute: function() { - return System.get(transpiler); - } - }; - }); - } - - if (load.name == 'error5') { - return new Promise(function (resolve, reject) { - setTimeout(function () { reject('error5'); }, 100); - }); - } - // very bad AMD support - if (load.source.indexOf('define') == -1) { - return System.instantiate(load); + if (name == 'error1') { + return setTimeout(function () { reject('error1'); }, 100); } - var factory, deps; - var define = function (_deps, _factory) { - deps = _deps; - factory = _factory; - }; - eval(load.source); - - customFactories[load.name] = factory; + var normalized = System.normalize(name, parentName, parentAddress); + resolve(normalized); + }); + }; - // normalize all dependencies now - var normalizePromises = []; - for (var i = 0; i < deps.length; i++) { - normalizePromises.push(Promise.resolve(System.normalize(deps[i], load.name))); - } + CustomLoader.prototype.locate = function (load) { + if (load.name == 'error2') { + return new Promise(function (resolve, reject) { + setTimeout(function () { reject('error2'); }, 100); + }); + } - return Promise.all(normalizePromises).then(function (resolvedDeps) { + if (load.name.match(/path\//)) + load.name = load.name.replace(/path\//, 'test/loader/'); - return { - deps: deps, - execute: function () { - if (customModules[load.name]) { - return System.newModule(customModules[load.name]); - } + return System.locate(load); + }; - // first ensure all dependencies have been executed - for (var i = 0; i < resolvedDeps.length; i++) { - resolvedDeps[i] = executeModule(resolvedDeps[i]); - } + + CustomLoader.prototype.fetch = function (load) { + if (load.name == 'error3') { + throw 'error3'; + } + if (load.name == 'error4' || load.name == 'error5') { + return 'asdf'; + } + return System.fetch.apply(this, arguments); + }; - var module = factory.apply(null, resolvedDeps); + CustomLoader.prototype.translate = function (load) { + if (load.name == 'error4') { + return new Promise(function (resolve, reject) { + setTimeout(function () { reject('error4'); }, 100); + }); + } + return System.translate.apply(this, arguments); + }; - customModules[load.name] = module; - return System.newModule(module); + CustomLoader.prototype.instantiate = function (load) { + if (load.name.match(/(traceur|babel.+\/browser).js$/)) { + var transpiler = this.transpiler; + return System['import'](transpiler).then(function() { + return { + deps: [], + execute: function() { + return System.get(System.normalize(transpiler)); } }; }); } - }); + if (load.name == 'error5') { + return new Promise(function (resolve, reject) { + setTimeout(function () { reject('error5'); }, 100); + }); + } + // very bad AMD support + if (load.source.indexOf('define') == -1) { + return System.instantiate(load); + } + + var factory, deps; + var define = function (_deps, _factory) { + deps = _deps; + factory = _factory; + }; + eval(load.source); + + customFactories[load.name] = factory; + + // normalize all dependencies now + var normalizePromises = []; + for (var i = 0; i < deps.length; i++) { + normalizePromises.push(Promise.resolve(System.normalize(deps[i], load.name, load.address))); + } + + return Promise.all(normalizePromises).then(function (resolvedDeps) { + + return { + deps: deps, + execute: function () { + if (customModules[load.name]) { + return System.newModule(customModules[load.name]); + } + + // first ensure all dependencies have been executed + for (var i = 0; i < resolvedDeps.length; i++) { + resolvedDeps[i] = executeModule(resolvedDeps[i]); + } + + var module = factory.apply(null, resolvedDeps); + + customModules[load.name] = module; + return System.newModule(module); + } + }; + }); + }; + + var customLoader = new CustomLoader(System.baseURL); customLoader.transpiler = System.transpiler; diff --git a/test/custom-loader.spec.js b/test/custom-loader.spec.js index 38aa040..0b5c8de 100644 --- a/test/custom-loader.spec.js +++ b/test/custom-loader.spec.js @@ -5,32 +5,34 @@ describe('Custom Loader', function () { describe('#import', function () { describe('scripts', function () { - it('should support ES6 scripts', function (done) { - customLoader.import('test/loader/test') + if (typeof __karma__ == 'undefined' || !__karma__.config.system.ie8) + it('should support ES6 scripts', function(done) { + customLoader['import']('test/loader/test.js') .then(function (m) { expect(m.loader).to.be.equal('custom'); }) .then(done, done) - }); + }); - it('should support AMD scripts', function (done) { - customLoader.import('test/loader/amd') - .then(function (m) { - expect(m.format).to.be.equal('amd'); - }) - .then(done, done); + it('should support AMD scripts', function(done) { + customLoader['import']('test/loader/amd.js') + .then(function (m) { + expect(m.format).to.be.equal('amd'); + }) + .then(done, done); }); }); describe('special #locate path rule', function a() { - it('should support special loading rules', function (done) { - customLoader.import('path/custom') + if (typeof __karma__ == 'undefined' || !__karma__.config.system.ie8) + it('should support special loading rules', function(done) { + customLoader['import']('path/custom.js') .then(function (m) { expect(m.path).to.be.ok(); }) .then(done, done); - }) + }); }); @@ -39,45 +41,50 @@ describe('Custom Loader', function () { function supposeToFail() { expect(false, 'should not be successful').to.be.ok(); } + var base = baseURL + 'test/loader/'; + if (typeof process != 'undefined') { + var isWindows = !!process.platform.match(/^win/); + base = base.substr(7 + isWindows); + } - it('should make the normalize throw', function (done) { - customLoader.import('test/loader/error1-parent') - .then(supposeToFail, function (e) { - expect(e).to.be.match(/Error loading "test\/loader\/error1-parent" at \S+error1-parent\.js/); - }) - .then(done, done); + it('should make the normalize throw', function(done) { + customLoader['import']('test/loader/error1-parent.js') + .then(supposeToFail, function(e) { + expect(e.toString()).to.contain('Error loading ' + base + 'error1-parent.js'); + }) + .then(done, done); }); - it('should make the locate throw', function (done) { - customLoader.import('test/loader/error2') - .then(supposeToFail, function (e) { - expect(e).to.be.match(/Error loading "test\/loader\/error2" at \S+test\/loader\/error2\.js/); - }) - .then(done, done); + it('should make the locate throw', function(done) { + customLoader['import']('test/loader/error2') + .then(supposeToFail, function(e) { + expect(typeof window != 'undefined' ? e.toString() : e.stack).to.be.contain('Error loading ' + base + 'error2'); + }) + .then(done, done); }); - it('should make the fetch throw', function (done) { - customLoader.import('test/loader/error3') - .then(supposeToFail, function (e) { - expect(e).to.be.match(/Error loading "test\/loader\/error3" at \S+test\/loader\/error3\.js/); - }) - .then(done, done); + it('should make the fetch throw', function(done) { + customLoader['import']('test/loader/error3') + .then(supposeToFail, function(e) { + expect(typeof window != 'undefined' ? e.toString() : e.stack).to.be.contain('Error loading ' + base + 'error3'); + }) + .then(done, done); }); - it('should make the translate throw', function (done) { - customLoader.import('test/loader/error4') - .then(supposeToFail, function (e) { - expect(e).to.be.match(/Error loading "test\/loader\/error4" at \S+test\/loader\/error4\.js/); - }) - .then(done, done); + it('should make the translate throw', function(done) { + customLoader['import']('test/loader/error4') + .then(supposeToFail, function(e) { + expect(typeof window != 'undefined' ? e.toString() : e.stack).to.be.contain('Error loading ' + base + 'error4'); + }) + .then(done, done); }); - it('should make the instantiate throw', function (done) { - customLoader.import('test/loader/error5') - .then(supposeToFail, function (e) { - expect(e).to.be.match(/Error loading "test\/loader\/error5" at \S+test\/loader\/error5\.js/); - }) - .then(done, done); + it('should make the instantiate throw', function(done) { + customLoader['import']('test/loader/error5') + .then(supposeToFail, function(e) { + expect(typeof window != 'undefined' ? e.toString() : e.stack).to.be.contain('Error loading ' + base + 'error5'); + }) + .then(done, done); }); }); @@ -85,15 +92,15 @@ describe('Custom Loader', function () { }); describe('#normalize', function () { - it('should support async normalization', function (done) { + it('should support async normalization', function(done) { customLoader.normalize('asdfasdf') - .then(function (normalized) { - return customLoader.import(normalized); - }) - .then(function (m) { - expect(m.n).to.be.equal('n'); - }) - .then(done, done); + .then(function (normalized) { + return customLoader['import'](normalized); + }) + .then(function (m) { + expect(m.n).to.be.equal('n'); + }) + .then(done, done); }); }); }); diff --git a/test/loader/amd.js b/test/loader/amd.js index 6970924..3b5a6ae 100644 --- a/test/loader/amd.js +++ b/test/loader/amd.js @@ -1,4 +1,4 @@ -define(['./amd-dep'], function(dep) { +define(['./amd-dep.js'], function(dep) { return { format: dep.name }; diff --git a/test/loader/custom.js b/test/loader/custom.js index d1a69ef..6369843 100644 --- a/test/loader/custom.js +++ b/test/loader/custom.js @@ -1 +1 @@ -export var path = true; +export var path = true; \ No newline at end of file diff --git a/test/loader/moduleName.js b/test/loader/moduleName.js index 7a73d78..f022135 100644 --- a/test/loader/moduleName.js +++ b/test/loader/moduleName.js @@ -1,2 +1 @@ -export var name = __moduleName; -export var address = __moduleAddress; \ No newline at end of file +export var name = __moduleName; \ No newline at end of file diff --git a/test/loads/_a.js b/test/loads/_a.js index eede87c..eeaa5a6 100644 --- a/test/loads/_a.js +++ b/test/loads/_a.js @@ -1,4 +1,4 @@ -export { b } from './_b'; -export { d } from './_d'; -export { g } from './_g'; +export { b } from './_b.js'; +export { d } from './_d.js'; +export { g } from './_g.js'; export var a = 'a'; diff --git a/test/loads/_b.js b/test/loads/_b.js index 7689965..c405088 100644 --- a/test/loads/_b.js +++ b/test/loads/_b.js @@ -1,2 +1,2 @@ -export { c } from './_c'; +export { c } from './_c.js'; export var b = 'b'; diff --git a/test/loads/_c.js b/test/loads/_c.js index 52b3a3a..16770af 100644 --- a/test/loads/_c.js +++ b/test/loads/_c.js @@ -1,2 +1,2 @@ -export { d } from './_d'; +export { d } from './_d.js'; export var c = 'c'; diff --git a/test/loads/_e.js b/test/loads/_e.js index f04da5e..92c711c 100644 --- a/test/loads/_e.js +++ b/test/loads/_e.js @@ -1,2 +1,2 @@ -export { c } from './_c'; +export { c } from './_c.js'; export var e = 'e'; diff --git a/test/loads/_f.js b/test/loads/_f.js index 84de4ac..5da67dd 100644 --- a/test/loads/_f.js +++ b/test/loads/_f.js @@ -1,2 +1,2 @@ -export { g } from './_g'; +export { g } from './_g.js'; export var f = 'f'; diff --git a/test/loads/_h.js b/test/loads/_h.js index 103a894..a0c6228 100644 --- a/test/loads/_h.js +++ b/test/loads/_h.js @@ -1,3 +1,3 @@ -export { a } from './_a'; -export { i } from './_i'; +export { a } from './_a.js'; +export { i } from './_i.js'; export var h = 'h'; diff --git a/test/loads/_i.js b/test/loads/_i.js index 4fffdc4..de29b56 100644 --- a/test/loads/_i.js +++ b/test/loads/_i.js @@ -1,2 +1,2 @@ -export { b } from './_b'; +export { b } from './_b.js'; export var i = 'i'; diff --git a/test/loads/a.js b/test/loads/a.js index b716deb..c9615a4 100644 --- a/test/loads/a.js +++ b/test/loads/a.js @@ -1,2 +1,2 @@ -export { b } from './b'; +export { b } from './b.js'; export var a = 'a'; diff --git a/test/loads/c.js b/test/loads/c.js index 5794ecf..3dc16b3 100644 --- a/test/loads/c.js +++ b/test/loads/c.js @@ -1,3 +1,3 @@ -export { a } from './a'; -export { b } from './a'; +export { a } from './a.js'; +export { b } from './a.js'; export var c = 'c'; diff --git a/test/loads/main.js b/test/loads/main.js index 9608723..6ba10d8 100644 --- a/test/loads/main.js +++ b/test/loads/main.js @@ -1 +1 @@ -import "./deperror"; +import "./deperror.js"; diff --git a/test/loads/s.js b/test/loads/s.js index 4915a12..a20f19e 100644 --- a/test/loads/s.js +++ b/test/loads/s.js @@ -1,3 +1,3 @@ -export { b, c } from './c'; -export { a } from './a'; +export { b, c } from './c.js'; +export { a } from './a.js'; export var s = 's'; diff --git a/test/syntax/circular1.js b/test/syntax/circular1.js index ee8a350..0401544 100644 --- a/test/syntax/circular1.js +++ b/test/syntax/circular1.js @@ -1,8 +1,8 @@ -import {fn2, variable2} from './circular2'; +import {fn2, variable2} from './circular2.js'; export var variable1 = 'test circular 1'; -export { output as output2 } from './circular2'; +export { output as output2 } from './circular2.js'; fn2(); diff --git a/test/syntax/circular2.js b/test/syntax/circular2.js index 1f04447..695b1dc 100644 --- a/test/syntax/circular2.js +++ b/test/syntax/circular2.js @@ -1,8 +1,8 @@ -import {fn1, variable1} from './circular1'; +import {fn1, variable1} from './circular1.js'; export var variable2 = 'test circular 2'; -export { output as output1 } from './circular1'; +export { output as output1 } from './circular1.js'; fn1(); diff --git a/test/syntax/direct.js b/test/syntax/direct.js index e1aeb2a..b826544 100644 --- a/test/syntax/direct.js +++ b/test/syntax/direct.js @@ -1 +1 @@ -import { p } from './es6-dep'; +import { p } from './es6-dep.js'; diff --git a/test/syntax/es6-file.js b/test/syntax/es6-file.js index b8d91b1..ccd3fca 100644 --- a/test/syntax/es6-file.js +++ b/test/syntax/es6-file.js @@ -11,4 +11,4 @@ export default 4; var p = 5; -import * as Q from './test-file'; +import * as Q from './test-file.js'; diff --git a/test/syntax/es6-withdep.js b/test/syntax/es6-withdep.js index fde0b78..15774ca 100644 --- a/test/syntax/es6-withdep.js +++ b/test/syntax/es6-withdep.js @@ -1,2 +1,2 @@ -export { p } from './es6-dep'; +export { p } from './es6-dep.js'; console.log('withdep'); \ No newline at end of file diff --git a/test/syntax/even.js b/test/syntax/even.js index ae99b74..91cf85b 100644 --- a/test/syntax/even.js +++ b/test/syntax/even.js @@ -1,4 +1,4 @@ -import { odd } from './odd' +import { odd } from './odd.js' export var counter = 0; diff --git a/test/syntax/export-star.js b/test/syntax/export-star.js index e770244..31cd2eb 100644 --- a/test/syntax/export-star.js +++ b/test/syntax/export-star.js @@ -1,2 +1,2 @@ -export * from './star-dep'; +export * from './star-dep.js'; export var bar = 'bar'; \ No newline at end of file diff --git a/test/syntax/export-star2.js b/test/syntax/export-star2.js index 15f013e..b1c56fa 100644 --- a/test/syntax/export-star2.js +++ b/test/syntax/export-star2.js @@ -1,4 +1,4 @@ -export * from './export-star'; +export * from './export-star.js'; export function foo() { } \ No newline at end of file diff --git a/test/syntax/import.js b/test/syntax/import.js index 09d660b..38b0be8 100644 --- a/test/syntax/import.js +++ b/test/syntax/import.js @@ -1,11 +1,11 @@ -import './export'; +import './export.js'; -import d from './export'; +import d from './export.js'; -import { s as p } from './reexport1'; +import { s as p } from './reexport1.js'; -import { z, q as r } from './reexport2'; +import { z, q as r } from './reexport2.js'; -import * as q from './reexport1'; +import * as q from './reexport1.js'; export { d as a, p as b, z as c, r as d, q } \ No newline at end of file diff --git a/test/syntax/odd.js b/test/syntax/odd.js index 0d5fa72..c9222d2 100644 --- a/test/syntax/odd.js +++ b/test/syntax/odd.js @@ -1,4 +1,4 @@ -import { even } from './even'; +import { even } from './even.js'; export function odd(n) { return n != 0 && even(n - 1); diff --git a/test/syntax/reexport-binding.js b/test/syntax/reexport-binding.js index 01b566a..3fcf5f8 100644 --- a/test/syntax/reexport-binding.js +++ b/test/syntax/reexport-binding.js @@ -1 +1 @@ -import { p } from './rebinding'; \ No newline at end of file +import { p } from './rebinding.js'; \ No newline at end of file diff --git a/test/syntax/reexport1.js b/test/syntax/reexport1.js index 4dc820a..f16ebf7 100644 --- a/test/syntax/reexport1.js +++ b/test/syntax/reexport1.js @@ -1 +1 @@ -export * from './export'; \ No newline at end of file +export * from './export.js'; \ No newline at end of file diff --git a/test/syntax/reexport2.js b/test/syntax/reexport2.js index 541593a..42b4715 100644 --- a/test/syntax/reexport2.js +++ b/test/syntax/reexport2.js @@ -1,2 +1,2 @@ -export { t as q, p as z } from './export'; +export { t as q, p as z } from './export.js'; export default 4; diff --git a/test/system.normalize.spec.js b/test/system.normalize.spec.js index a13d0dd..3775ccc 100644 --- a/test/system.normalize.spec.js +++ b/test/system.normalize.spec.js @@ -1,115 +1,68 @@ // describe('System', function () { - describe('#normalize', function () { - - // Normalize tests - identical to https://github.com/google/traceur-compiler/blob/master/test/unit/runtime/System.js - - var originBaseUrl = System.baseURL; - beforeEach(function () { - System.baseURL = 'http://example.org/a/b.html'; + describe('#toString', function() { + it('Module toString is "Module"', function() { + expect(System.newModule({}).toString()).to.equal('Module'); }); + }); - afterEach(function () { - System.baseURL = originBaseUrl; - }); + describe('#normalize', function () { describe('when having no argument', function () { it('should throw with no specified name', function () { - expect(function () { System.normalize(); }) - .to.throwException(function (e) { - expect(e).to.be.a(TypeError); - expect(e.message).to.match(/Module name must be a string/); - }); + expect(function () { System.normalize(); }).to.throwException(); }); }); describe('when having one argument', function () { - it('should not referer', function () { - expect(System.normalize('d/e/f')).to.equal('d/e/f'); - }); - - it.skip('should "below baseURL"', function () { - expect(System.normalize('../e/f')).to.equal('../e/f'); + it('should allow no referer', function () { + expect(System.normalize('d/e/f')).to.equal(baseURL + 'd/e/f'); }); - it('should be backwards compat', function () { - expect(System.normalize('./a.js')).to.equal('a.js'); + var backTrack + // in the browser, double backtracking goes below the hostname -> just keep at hostname + if (typeof window != 'undefined') + backTrack = baseURI.substr(0, baseURI.length - 1); + else + backTrack = baseURI.split('/').splice(0, baseURI.split('/').length - 2).join('/') + + if (typeof window != 'undefined') + + it('should backtracking below baseURL', function () { + expect(System.normalize('../e/f')).to.equal(backTrack + '/e/f'); }); - it('should throw with an url as name', function () { - expect(function () { System.normalize('http://example.org/a/b.html'); }) - .to.throwException(function (e) { - expect(e).to.be.a(TypeError); - expect(e.message).to.match(/Illegal module name "\S+"/); - }); + it('should double dotted backtracking', function () { + expect(System.normalize('./../a.js')).to.equal(backTrack + '/a.js'); }); - it('should throw with embedded path', function () { - expect(function () { System.normalize('a/b/../c'); }) - .to.throwException(function (e) { - expect(e).to.be.a(TypeError); - expect(e.message).to.match(/Illegal module name "\S+"/); - }); + it('should normalize ./ and plain names to the same base', function () { + expect(System.normalize('./a.js')).to.equal(baseURI + 'a.js'); }); }); describe('when having two arguments', function () { - var refererName = 'dir/file'; - - it('should support relative path', function () { - expect(System.normalize('./d/e/f', refererName)).to.equal('dir/d/e/f'); - expect(System.normalize('../e/f', refererName)).to.equal('e/f'); - }); + var refererAddress = 'http://parent.com/dir/file'; - it('should resolve the path with relative parent', function () { - expect(System.normalize('./a/b', 'c')).to.equal('a/b'); - expect(System.normalize('./a/b', 'c/d')).to.equal('c/a/b'); - expect(System.normalize('./a/b', '../c/d')).to.equal('../c/a/b'); - expect(System.normalize('./a/b', '../../c/d')).to.equal('../../c/a/b'); + it('should normalize relative paths against the parent name', function () { + expect(System.normalize('./d/e/f', refererAddress)).to.equal('http://parent.com/dir/d/e/f'); + expect(System.normalize('../e/f', refererAddress)).to.equal('http://parent.com/e/f'); }); - it('should throw with embedded path', function () { - - expect(function () { System.normalize('a/b/../c'); }) - .to.throwException(function (e) { - expect(e).to.be.a(TypeError); - expect(e.message).to.match(/Illegal module name "\S+"/); - }); - - expect(function () { System.normalize('a/../b'); }) - .to.throwException(function (e) { - expect(e).to.be.a(TypeError); - expect(e.message).to.match(/Illegal module name "\S+"/); - }); - - }); }); }); describe('#locate', function () { - beforeEach(function () { - System.baseURL = 'http://example.org/a/'; - }); - - it('should resolve paths', function () { - expect(System.locate({name: '@abc/def'})) - .to.equal('http://example.org/a/@abc/def.js'); - expect(System.locate({name: ' abc/def'})) - .to.equal('http://example.org/a/abc/def.js'); - }); - - it('should resolve paths with the existing config', function () { - System.paths['path/*'] = '/test/*.js'; - expect(System.locate({name: 'path/test'})) - .to.equal('http://example.org/test/test.js'); + it('should be the identity function', function () { + expect(System.locate({name: '@some/name'})).to.equal('@some/name'); }); }); diff --git a/test/system.spec.js b/test/system.spec.js index e4af4cc..4589a70 100644 --- a/test/system.spec.js +++ b/test/system.spec.js @@ -7,12 +7,6 @@ var ie = typeof window != 'undefined' && window.navigator.userAgent.match(/Tride describe('System', function () { - var originBaseUrl = System.baseURL; - - afterEach(function () { - System.baseURL = originBaseUrl; - }); - describe('prerequisite', function () { it('should be a instance of Loader', function () { @@ -26,7 +20,7 @@ describe('System', function () { describe('an ES5 script', function () { it('should import a ES5 script', function (done) { - System.import('test/syntax/script') + System.import('test/syntax/script.js') .then(function (m) { expect(!!m).to.be.ok(); }) @@ -34,9 +28,9 @@ describe('System', function () { }); it('should import a ES5 script once loaded', function (done) { - System.import('test/syntax/script') + System.import('test/syntax/script.js') .then(function () { - return System.import('test/syntax/script'). + return System.import('test/syntax/script.js'). then(function (m) { expect(!!m).to.be.ok(); }); @@ -50,8 +44,8 @@ describe('System', function () { it('should support set, get and delete', function(done) { - var testPath = 'test/loader/module'; - + var testPath = baseURL + 'test/loader/module.js'; + System.import(testPath).then(function(m) { expect(m.run).to.equal('first'); System.delete(testPath); @@ -73,7 +67,7 @@ describe('System', function () { describe('an ES6 script', function () { it('should import an ES6 script', function (done) { - System.import('test/syntax/es6') + System.import('test/syntax/es6.js') .then(function (m) { expect(m.p).to.equal('p'); }) @@ -81,15 +75,16 @@ describe('System', function () { }); it('should import an ES6 script with its dependencies', function (done) { - System.import('test/syntax/es6-withdep') + System.import('test/syntax/es6-withdep.js') .then(function (m) { expect(m.p).to.equal('p'); }) .then(done, done); }); - (ie ? it.skip : it)('should import an ES6 script with a generator', function (done) { - System.import('test/syntax/es6-generator') + // typescript does not support generators yet + (ie || System.transpiler === 'typescript' ? it.skip : it)('should import an ES6 script with a generator', function (done) { + System.import('test/syntax/es6-generator.js') .then(function (m) { expect(!!m.generator).to.be.ok(); }) @@ -97,7 +92,7 @@ describe('System', function () { }); it('should import without bindings', function (done) { - System.import('test/syntax/direct') + System.import('test/syntax/direct.js') .then(function (m) { expect(!!m).to.be.ok(); }) @@ -105,7 +100,7 @@ describe('System', function () { }); it('should support es6 various syntax', function (done) { - System.import('test/syntax/es6-file') + System.import('test/syntax/es6-file.js') .then(function (m) { expect(m.q).to.be.a('function'); @@ -124,9 +119,9 @@ describe('System', function () { describe('with circular dependencies', function () { (System.transpiler == 'traceur' ? it : it.skip)('should resolve circular dependencies', function (done) { - System.import('test/syntax/circular1') + System.import('test/syntax/circular1.js') .then(function (m1) { - return System.import('test/syntax/circular2').then(function (m2) { + return System.import('test/syntax/circular2.js').then(function (m2) { expect(m1.variable1).to.equal('test circular 1'); expect(m2.variable2).to.equal('test circular 2'); @@ -145,7 +140,7 @@ describe('System', function () { it('should update circular dependencies', function (done) { - System.import('test/syntax/even') + System.import('test/syntax/even.js') .then(function (m) { expect(m.counter, 'Counter initially at 1').to.be.equal(1); expect(m.even(10), 'Must be an even number').to.be.ok(); @@ -174,31 +169,31 @@ describe('System', function () { } it('should load in order (a)', function (done) { - expectedOrder('a', ['a', 'b'], done) + expectedOrder('a.js', ['a', 'b'], done) }); it('should load in order (c)', function (done) { - expectedOrder('c', ['c', 'a', 'b'], done) + expectedOrder('c.js', ['c', 'a', 'b'], done) }); it('should load in order (s)', function (done) { - expectedOrder('s', ['s', 'c', 'a', 'b'], done) + expectedOrder('s.js', ['s', 'c', 'a', 'b'], done) }); it('should load in order (_a)', function (done) { - expectedOrder('_a', ['b', 'd', 'g', 'a'], done) + expectedOrder('_a.js', ['b', 'd', 'g', 'a'], done) }); it('should load in order (_e)', function (done) { - expectedOrder('_e', ['c', 'e'], done) + expectedOrder('_e.js', ['c', 'e'], done) }); it('should load in order (_f)', function (done) { - expectedOrder('_f', ['g', 'f'], done) + expectedOrder('_f.js', ['g', 'f'], done) }); it('should load in order (_h)', function (done) { - expectedOrder('_h', ['i', 'a', 'h'], done) + expectedOrder('_h.js', ['i', 'a', 'h'], done) }); }); @@ -207,35 +202,41 @@ describe('System', function () { describe('errors', function () { - function supposeToFail() { + function supposedToFail() { expect(false, 'should not be successful').to.be.ok(); } it('should throw if on syntax error', function (done) { - System.import('test/loads/main') - .then(supposeToFail) + var base = baseURL; + if (typeof process != 'undefined') { + var isWindows = !!process.platform.match(/^win/); + base = base.substr(7 + isWindows); + } + + System.import('test/loads/main.js') + .then(supposedToFail) .catch(function (e) { - expect(e) - .to.be.equal('Error evaluating test/loads/deperror\ndep error'); + expect(e.toString()) + .to.be.equal('Error: dep error\n\tError evaluating ' + base + 'test/loads/deperror.js'); }) .then(done, done); }); - it.skip('should throw what the script throws', function (done) { - System.import('test/loads/deperror') - .then(supposeToFail) - .catch(function () { - expect(false, 'should be successful ??').to.be.ok(); + it('should throw what the script throws', function (done) { + System.import('test/loads/deperror.js') + .then(supposedToFail) + .catch(function(e) { + expect(e == 'dep error'); }) .then(done, done); }); it('Unhandled rejection test', function (done) { - System.import('test/loads/load-non-existent') - .then(supposeToFail) + System.import('test/loads/load-non-existent.js') + .then(supposedToFail) .catch(function (e) { - expect(e).to.be.match(/Error loading "\S+" at \S+/); + expect(typeof window != 'undefined' ? e.toString() : e.stack).to.be.match(/Error loading \S+/); }) .then(done, done); }); @@ -246,7 +247,7 @@ describe('System', function () { describe('es6 export syntax overview', function () { it('should resolve different export syntax', function (done) { - System.import('test/syntax/export') + System.import('test/syntax/export.js') .then(function (m) { expect(m.p, 'should export a number').to.be.equal(5); expect(m.foo, 'should export a function').to.be.a('function'); @@ -263,7 +264,7 @@ describe('System', function () { describe('es6 export default syntax', function () { it('should resolve "export default"', function (done) { - System.import('test/syntax/export-default') + System.import('test/syntax/export-default.js') .then(function (m) { expect(m.default()).to.be.equal('test'); }) @@ -273,7 +274,7 @@ describe('System', function () { describe('es6 export re-exporting', function () { it('should support simple re-exporting', function (done) { - System.import('test/syntax/reexport1') + System.import('test/syntax/reexport1.js') .then(function (m) { expect(m.p, 'should export 5 from the "./export"').to.be.equal(5); }) @@ -281,9 +282,9 @@ describe('System', function () { }); it('should support re-exporting binding', function (done) { - System.import('test/syntax/reexport-binding') + System.import('test/syntax/reexport-binding.js') .then(function () { - return System.import('test/syntax/rebinding').then(function (m) { + return System.import('test/syntax/rebinding.js').then(function (m) { expect(m.p, 'should export "p" from the "./rebinding"') .to.be.equal(4); }); @@ -292,7 +293,7 @@ describe('System', function () { }); it('should support re-exporting with a new name', function (done) { - System.import('test/syntax/reexport2') + System.import('test/syntax/reexport2.js') .then(function (m) { expect(m.q, 'should export "t" as "q" from the "./export"') .to.be.equal(4); @@ -303,7 +304,7 @@ describe('System', function () { }); it('should support re-exporting', function (done) { - System.import('test/syntax/export-star') + System.import('test/syntax/export-star.js') .then(function (m) { expect(m.foo, 'should export a function').to.be.equal('foo'); expect(m.bar, 'should re-export export-star bar variable') @@ -313,7 +314,7 @@ describe('System', function () { }); (System.transpiler != 'traceur' ? it.skip : it)('should support re-exporting overwriting', function (done) { - System.import('test/syntax/export-star2') + System.import('test/syntax/export-star2.js') .then(function (m) { expect(m.bar, 'should re-export "./export-star" bar variable') .to.be.equal('bar'); @@ -328,7 +329,7 @@ describe('System', function () { describe('es6 import syntax overview', function () { it('should resolve different import syntax', function (done) { - System.import('test/syntax/import') + System.import('test/syntax/import.js') .then(function (m) { expect(m.a, 'should export "d" as "a" from the "./export"') .to.be.a('function'); @@ -351,11 +352,9 @@ describe('System', function () { describe('a script with metas', function () { it('should support module name meta', function (done) { - System.import('test/loader/moduleName') + System.import('test/loader/moduleName.js') .then(function (m) { - expect(m.name).to.be.equal('test/loader/moduleName'); - expect(m.address) - .to.be.equal(System.baseURL + 'test/loader/moduleName.js'); + expect(m.name).to.be.equal(m.name); }) .then(done, done); }); @@ -366,7 +365,7 @@ describe('System', function () { describe('#paths', function () { it('should support custom paths', function (done) { - System.paths['bar'] = 'test/loader/custom-path.js'; + System.paths['bar'] = baseURL + 'test/loader/custom-path.js'; System.import('bar') .then(function (m) { expect(m.bar).to.be.equal('bar'); @@ -377,7 +376,7 @@ describe('System', function () { it('should support path wildcard', function (done) { - System.paths['bar/*'] = 'test/loader/custom-folder/*.js'; + System.paths['bar/*'] = baseURL + 'test/loader/custom-folder/*.js'; System.import('bar/path') .then(function (m) { expect(m.bar).to.be.equal('baa'); @@ -387,8 +386,8 @@ describe('System', function () { }); it('should support most specific paths', function (done) { - System.paths['bar/bar'] = 'test/loader/specific-path.js'; - System.paths['bar/*'] = 'test/loader/custom-folder/*.js'; + System.paths['bar/bar'] = baseURL + 'test/loader/specific-path.js'; + System.paths['bar/*'] = baseURL + 'test/loader/custom-folder/*.js'; System.import('bar/bar') .then(function (m) { expect(m.path).to.be.ok(); @@ -399,7 +398,7 @@ describe('System', function () { }); }); - + describe('#System.define', function () { it.skip('should load System.define', function(done) { @@ -419,7 +418,7 @@ describe('System', function () { }); - System.import('test/loader/master').then(function(m) { + System.import('test/loader/master.js').then(function(m) { done() }, done).then(reset, reset); @@ -434,7 +433,7 @@ describe('System', function () { typeof window != 'undefined' && window.Worker, 'with Web Worker', function () { (ie ? it.skip : it)('should loading inside of a Web Worker', function (done) { - var worker = new Worker(System.baseURL + 'test/worker/worker-' + System.transpiler + '.js'); + var worker = new Worker(baseURL + 'test/worker/worker-' + System.transpiler + '.js'); worker.onmessage = function (e) { expect(e.data).to.be.equal('p'); diff --git a/test/test-babel.html b/test/test-babel.html deleted file mode 100644 index 4ead6d8..0000000 --- a/test/test-babel.html +++ /dev/null @@ -1,48 +0,0 @@ -<!doctype html> - <html> - - <body></body> - - <script src="test.js"></script> - - <!-- set this to the path to babel.js --> - <script src="../node_modules/regenerator/runtime.js"></script> - - <script> - // test promise polyfill - // delete window.Promise; - </script> - - <script src="../node_modules/when/es6-shim/Promise.js"></script> - - <script src="../dist/es6-module-loader.src.js"></script> - <script> - System.transpiler = 'babel'; - System.paths['babel'] = '../node_modules/babel-core/browser.js'; - </script> - - <script> - // test tracing - System.trace = true; - </script> - - <script> - runTests(); - </script> - - <script type="module"> - window.anon = class { - constructor() { - - } - } - </script> - - - <script> - setTimeout(function() { - test('Anonymous <script type="module"> tag', function(assert) { - assert(typeof window.anon, 'function'); - }); - }, 500); - </script> \ No newline at end of file diff --git a/test/test-traceur.html b/test/test-traceur.html deleted file mode 100644 index ba51137..0000000 --- a/test/test-traceur.html +++ /dev/null @@ -1,45 +0,0 @@ -<!doctype html> - <html> - - <body></body> - - <script src="test.js"></script> - - <script> - // test promise polyfill - // delete window.Promise; - </script> - - <script src="../node_modules/when/es6-shim/Promise.js"></script> - - <script src="../dist/es6-module-loader.src.js"></script> - <script> - System.paths['traceur'] = '../node_modules/traceur/bin/traceur.js'; - // System.traceurOptions = { classes: false }; - </script> - - <script> - // test tracing - System.trace = true; - </script> - - <script> - runTests(); - </script> - - <script type="module"> - window.anon = class { - constructor() { - - } - } - </script> - - - <script> - setTimeout(function() { - test('Anonymous <script type="module"> tag', function(assert) { - assert(typeof window.anon, 'function'); - }); - }, 500); - </script> diff --git a/test/test.js b/test/test.js deleted file mode 100644 index 0618206..0000000 --- a/test/test.js +++ /dev/null @@ -1,677 +0,0 @@ - -var System, Loader, Module, tests, test; - -var testCnt = 0, passed = 0, failed = 0; -var test = function(name, initialize) { - if (typeof initialize != 'function') { - var val = initialize; - var exp = arguments[2]; - initialize = function(assert) { - assert(val, exp); - } - } - var testId = testCnt++; - tests.addTest(testId, name); - function assert(value, expected) { - if (value != expected) - return 'Got "' + value + '" instead of "' + expected + '"'; - } - initialize(function(value, expected) { - var failure; - if (value instanceof Array) { - for (var i = 0; i < arguments.length; i++) - failure = failure || assert(arguments[i][0], arguments[i][1]); - } - else - failure = assert(value, expected); - if (failure) - failed++; - else - passed++; - tests.completeTest(testId, name, failure, { passed: passed, failed: failed, total: testCnt }); - }, function(err) { - setTimeout(function() { - throw err; - }); - }); -} - -if (typeof window != 'undefined') { - // browser - document.body.innerHTML = "<table class='test'><tbody></tbody><td>Summary</td><td class='summary'></td></table>"; - tests = { - addTest: function(id, name) { - var p = document.createElement('tr'); - var td = document.createElement('td'); - td.innerHTML = name; - p.appendChild(td); - td = document.createElement('td'); - td.className = 'result-' + id; - p.appendChild(td); - document.querySelector('.test tbody').appendChild(p); - }, - completeTest: function(id, name, failure, summary) { - document.querySelector('.test .result-' + id).innerHTML = !failure ? 'Passed' : 'Failed: ' + failure; - document.querySelector('.summary').innerHTML = summary.passed + '/' + summary.total + ' tests passed'; - } - } - window.test = test; - window.runTests = runTests; -} -else { - // nodejs - var ml = require('../lib/index-' + process.env.es6compiler); - - if (process.env.es6compiler == '6to5') - require('regenerator/runtime'); - - process.on('uncaughtException', function(err) { - console.log('Caught: ' + err); - }); - - System = ml.System; - Loader = ml.Loader; - Module = ml.Module; - - tests = { - addTest: function(id, name) {}, - completeTest: function(id, name, failure, summary) { - console.log(name + ': ' + (!failure ? 'Passed' : 'Failed: ' + failure)); - console.log(summary.passed + '/' + summary.total + ' passed. '); - if (failure) - process.exit(1); - }, - }; - - runTests(); -} - -function runTests() { - - // Normalize tests - identical to https://github.com/google/traceur-compiler/blob/master/test/unit/runtime/System.js - - var oldBaseURL = System.baseURL; - System.baseURL = 'http://example.org/a/b.html'; - - test('Normalize - No Referer', System.normalize('d/e/f'), 'd/e/f'); - // test('Normalize - Below baseURL', System.normalize('../e/f'), '../e/f'); - - var refererName = 'dir/file'; - test('Normalize - Relative paths', System.normalize('./d/e/f', refererName), 'dir/d/e/f'); - test('Normalize - Relative paths', System.normalize('../e/f', refererName), 'e/f'); - - test('Normalize - name undefined', function(assert) { - try { - System.normalize(undefined, refererName); - } - catch(e) { - assert(e.message, 'Module name must be a string'); - } - }); - - test('Normalize - embedded ..', function(assert) { - try { - System.normalize('a/b/../c'); - } - catch(e) { - assert(e.message, 'Illegal module name "a/b/../c"'); - } - }); - test('Normalize - embedded ..', function(assert) { - try { - System.normalize('a/../b', refererName); - } - catch(e) { - assert(e.message, 'Illegal module name "a/../b"'); - } - }); - test('Normalize - embedded ..', function(assert) { - try { - System.normalize('a/b/../c', refererName); - } - catch(e) { - assert(e.message, 'Illegal module name "a/b/../c"'); - } - }); - - // test('Normalize - below referer', System.normalize('../../e/f', refererName), '../e/f'); - - test('Normalize - backwards compat', System.normalize('./a.js'), 'a.js'); - - test('Normalize - URL', function(assert) { - try { - System.normalize('http://example.org/a/b.html'); - } - catch(e) { - assert(); - } - }); - - System.baseURL = 'http://example.org/a/'; - - test('Locate', System.locate({ name: '@abc/def' }), 'http://example.org/a/@abc/def.js'); - test('Locate', System.locate({ name: 'abc/def' }), 'http://example.org/a/abc/def.js'); - - // paths - System.paths['path/*'] = '/test/*.js'; - test('Locate paths', System.locate({ name: 'path/test' }), 'http://example.org/test/test.js'); - - - System.baseURL = oldBaseURL; - - - - // More Normalize tests - - test('Normalize test 1', function(assert) { - assert(System.normalize('./a/b', 'c'), 'a/b'); - }); - test('Normalize test 2', function(assert) { - assert(System.normalize('./a/b', 'c/d'), 'c/a/b'); - }); - test('Normalize test 3', function(assert) { - assert(System.normalize('./a/b', '../c/d'), '../c/a/b'); - }); - test('Normalize test 4', function(assert) { - assert(System.normalize('./a/b', '../c/d'), '../c/a/b'); - }); - test('Normalize test 5', function(assert) { - assert(System.normalize('../a/b', '../../c/d'), '../../a/b'); - }); - - test('Setting & deleting modules', function(assert, err) { - System['import']('loader/module').then(function(m1) { - System['delete']('loader/module'); - System['import']('loader/module').then(function(m2) { - System['delete']('loader/module'); - System.set('loader/module', System.newModule({custom: 'module'})); - System['import']('loader/module').then(function(m3) { - assert( - [m1.run, 'first'], - [m2.run, 'second'], - [m3.custom, 'module'] - ); - }, err); - }, err); - }, err); - }); - - test('Import a script', function(assert, err) { - System['import']('syntax/script').then(function(m) { - assert(!!m, true); - }, err); - }); - - test('Import a script once loaded', function(assert, err) { - System['import']('syntax/script').then(function(m) { - System['import']('syntax/script').then(function(m) { - assert(!!m, true); - }, err); - }); - }); - - test('Import ES6', function(assert, err) { - System['import']('syntax/es6').then(function(m) { - assert(m.p, 'p'); - }, err); - }); - - test('Import ES6 with dep', function(assert, err) { - System['import']('syntax/es6-withdep').then(function(m) { - assert(m.p, 'p'); - }, err); - }); - - test('Import ES6 Generator', function(assert, err) { - System['import']('syntax/es6-generator').then(function(m) { - assert(!!m.generator, true); - }, err); - }); - - test('Direct import without bindings', function(assert, err) { - System['import']('syntax/direct').then(function(m) { - assert(!!m, true); - }, err); - }); - - test('Circular Dependencies', function(assert, err) { - System['import']('syntax/circular1').then(function(m1) { - System['import']('syntax/circular2').then(function(m2) { - assert( - [m2.output, 'test circular 1'], - [m1.output, 'test circular 2'], - [m2.output1, 'test circular 2'], - [m1.output2, 'test circular 1'] - ); - }, err); - }, err); - }); - - test('Circular Test', function(assert, err) { - System['import']('syntax/even').then(function(m) { - assert( - [m.even(10), true], - [m.counter, 7], - [m.even(15), false], - [m.counter, 15] - ); - }, err); - }); - - test('Load order test: A', function(assert, err) { - System['import']('loads/a').then(function(m) { - assert( - [m.a, 'a'], - [m.b, 'b'] - ); - }, err); - }); - - test('Load order test: C', function(assert, err) { - System['import']('loads/c').then(function(m) { - assert( - [m.c, 'c'], - [m.a, 'a'], - [m.b, 'b'] - ); - }, err); - }); - - test('Load order test: S', function(assert, err) { - System['import']('loads/s').then(function(m) { - assert( - [m.s, 's'], - [m.c, 'c'], - [m.a, 'a'], - [m.b, 'b'] - ); - }, err); - }); - - test('Load order test: _a', function(assert) { - System['import']('loads/_a').then(function(m) { - assert( - [m.b, 'b'], - [m.d, 'd'], - [m.g, 'g'], - [m.a, 'a'] - ); - }) - }); - - test('Load order test: _e', function(assert) { - System['import']('loads/_e').then(function(m) { - assert( - [m.c, 'c'], - [m.e, 'e'] - ); - }) - }); - - test('Load order test: _f', function(assert) { - System['import']('loads/_f').then(function(m) { - assert( - [m.g, 'g'], - [m.f, 'f'] - ); - }) - }); - test('Load order test: _h', function(assert) { - System['import']('loads/_h').then(function(m) { - assert( - [m.i, 'i'], - [m.a, 'a'], - [m.h, 'h'] - ); - }) - }); - - test('Error check 1', function(assert) { - System['import']('loads/main').then(function(m) { - assert(false, true); - }, function(e) { - assert(e, 'Error evaluating loads/deperror\ndep error'); - }); - // System['import']('loads/deperror'); - }); - - test('Unhandled rejection test', function(assert) { - System['import']('loads/load-non-existent') - assert(); - }); - - - test('Export Syntax', function(assert) { - System['import']('syntax/export').then(function(m) { - assert( - [m.p, 5], - [typeof m.foo, 'function'], - [typeof m.q, 'object'], - [typeof m['default'], 'function'], - [m.s, 4], - [m.t, 4], - [typeof m.m, 'object'] - ); - }); - }); - - // test not enabled for Babel - if (System.transpiler != 'babel') - test('Export Star 2', function(assert) { - System['import']('syntax/export-star2').then(function(m) { - assert( - [typeof m.foo, 'function'], - [m.bar, 'bar'] - ); - }); - }); - - test('Export Star', function(assert) { - System['import']('syntax/export-star').then(function(m) { - assert( - [m.foo, 'foo'], - [m.bar, 'bar'] - ); - }); - }); - - test('Export default 1', function(assert, err) { - System['import']('syntax/export-default').then(function(m) { - assert(m['default'](), 'test'); - }, err); - }); - - test('Re-export', function(assert, err) { - System['import']('syntax/reexport1').then(function(m) { - assert(m.p, 5); - }, err); - }); - - test('Re-export with new name', function(assert, err) { - System['import']('syntax/reexport2').then(function(m) { - assert( - [m.q, 4], - [m.z, 5] - ); - }, err); - }); - - test('Re-export binding', function(assert, err) { - System['import']('syntax/reexport-binding').then(function(m) { - System['import']('syntax/rebinding').then(function(m) { - assert(m.p, 4); - }); - }, err); - }); - - test('Import Syntax', function(assert, err) { - System['import']('syntax/import').then(function(m) { - assert( - [typeof m.a, 'function'], - [m.b, 4], - [m.c, 5], - [m.d, 4], - [typeof m.q.foo, 'function'] - ); - }, err); - }); - - test('ES6 Syntax', function(assert, err) { - System['import']('syntax/es6-file').then(function(m) { - setTimeout(function() { - (new m.q()).foo(); - }); - assert( - [typeof m.q, 'function'] - ); - }, err); - }); - - test('Module Name meta', function(assert) { - System['import']('loader/moduleName').then(function(m) { - assert( - [m.name, 'loader/moduleName'], - [m.address, System.baseURL + 'loader/moduleName.js'] - ); - }); - }); - - test('Custom path', function(assert) { - System.paths['bar'] = 'loader/custom-path.js'; - System['import']('bar').then(function(m) { - assert(m.bar, 'bar'); - }) - }); - - test('Custom path wildcard', function(assert) { - System.paths['bar/*'] = 'loader/custom-folder/*.js'; - System['import']('bar/path').then(function(m) { - assert(m.bar, 'baa'); - }); - }); - - test('Custom path most specific', function(assert) { - delete System.paths['bar/*']; - System.paths['bar/bar'] = 'loader/specific-path.js'; - System.paths['bar/*'] = 'loader/custom-folder/*.js'; - System['import']('bar/bar').then(function(m) { - assert(m.path, true); - }); - }); - - test('should load System.define', function(assert) { - var oldLocate = System.locate; - var slaveLocatePromise = new Promise(function(resolve, reject) { - - System.locate = function(load) { - if(load.name === 'slave') { - setTimeout(function() { - System.define('slave', 'var double = [1,2,3].map(i => i * 2);'); - resolve('slave.js'); - }, 1); - return slaveLocatePromise; - } - return oldLocate.apply(this, arguments); - }; - - }); - - System.import('loader/master').then(function() { - assert(true, true, 'Able to load'); - }, function(err) { - assert('Did not resolve'); - }).then(reset, reset); - - function reset() { - System.locate = oldLocate; - } - }); - - var customModules = {}; - var customFactories = {}; - - var executeModule = function(name) { - if (!customFactories[name]) - return; - var module = customFactories[name].apply(null, []); - customModules[name] = module; - return module; - } - - var customLoader = new Reflect.Loader({ - normalize: function(name, parentName, parentAddress) { - return new Promise(function(resolve, reject) { - if (name == 'asdfasdf') { - return setTimeout(function() { - resolve('loader/async-norm'); - }, 500); - } - - if (name == 'error1') - return setTimeout(function(){ reject('error1'); }, 100); - - var normalized = System.normalize(name, parentName, parentAddress); - resolve(normalized); - }); - }, - locate: function(load) { - if (load.name == 'error2') - return new Promise(function(resolve, reject) { - setTimeout(function(){ reject('error2'); }, 100); - }); - - if (load.name.substr(0, 5) == 'path/') - load.name = 'loader/' + load.name.substr(5); - return System.locate(load); - }, - fetch: function(load) { - if (load.name == 'error3') - throw 'error3'; - if (load.name == 'error4' || load.name == 'error5') - return 'asdf'; - return System.fetch.apply(this, arguments); - }, - translate: function(load) { - if (load.name == 'error4') - return new Promise(function(resolve, reject) { - setTimeout(function(){ reject('error4'); }, 100); - }); - return System.translate.apply(this, arguments); - }, - instantiate: function(load) { - if (load.name == this.transpiler) { - var transpiler = this.transpiler; - return System.import(transpiler).then(function() { - return { - deps: [], - execute: function() { - return System.get(transpiler); - } - }; - }); - } - - if (load.name == 'error5') - return new Promise(function(resolve, reject) { - setTimeout(function(){ reject('error5'); }, 100); - }); - // very bad AMD support - if (load.source.indexOf('define') == -1) - return System.instantiate(load); - - var factory, deps; - var define = function(_deps, _factory) { - deps = _deps; - factory = _factory; - } - //console.log(load.source); - eval(load.source); - - customFactories[load.name] = factory; - - // normalize all dependencies now - var normalizePromises = []; - for (var i = 0; i < deps.length; i++) - normalizePromises.push(Promise.resolve(System.normalize(deps[i], load.name))); - - return Promise.all(normalizePromises).then(function(resolvedDeps) { - - return { - deps: deps, - execute: function() { - if (customModules[load.name]) - return System.newModule(customModules[load.name]); - - // first ensure all dependencies have been executed - for (var i = 0; i < resolvedDeps.length; i++) - resolvedDeps[i] = executeModule(resolvedDeps[i]); - - var module = factory.apply(null, resolvedDeps); - - customModules[load.name] = module; - return System.newModule(module); - } - }; - }); - } - }); - customLoader.transpiler = System.transpiler; - - test('Custom loader standard load', function(assert) { - var p = customLoader['import']('loader/test').then(function(m) { - assert(m.loader, 'custom'); - }); - if (p['catch']) - p['catch'](function(e) { - assert(!e, 'standard load failed: ' + e); - }); - }); - - test('Custom loader special rules', function(assert) { - var p = customLoader['import']('path/custom').then(function(m) { - assert(m.path, true); - }); - if (p['catch']) - p['catch'](function(e) { - assert(!e, 'special rules failed: ' + e); - }); - }); - - test('Custom loader AMD support', function(assert) { - customLoader['import']('loader/amd').then(function(m) { - assert(m.format, 'amd'); - })['catch'](function(e) { - setTimeout(function() { - throw e; - }, 1); - }); - }); - - test('Custom loader hook - normalize error', function(assert) { - customLoader['import']('loader/error1-parent').then(function(m) { - })['catch'](function(e) { - assert(e.toString(), 'Error loading "loader/error1-parent" at ' + System.baseURL + 'loader/error1-parent.js\nerror1'); - }); - }); - test('Custom loader hook - locate error', function(assert) { - customLoader['import']('error2').then(function(m) {}, function(e) { - assert(e.toString(), 'Error loading "error2" at <unknown>\nerror2'); - }); - }); - test('Custom loader hook - fetch error', function(assert) { - customLoader['import']('error3').then(function(m) {}, function(e) { - assert(e.toString(), 'Error loading "error3" at ' + System.baseURL + 'error3.js\nerror3'); - }); - }); - test('Custom loader hook - translate error', function(assert) { - customLoader['import']('error4').then(function(m) {}, function(e) { - assert(e.toString(), 'Error loading "error4" at ' + System.baseURL + 'error4.js\nerror4'); - }); - }); - test('Custom loader hook - instantiate error', function(assert) { - customLoader['import']('error5').then(function(m) {}, function(e) { - assert(e.toString(), 'Error loading "error5" at ' + System.baseURL + 'error5.js\nerror5'); - }); - }); - - test('Async Normalize', function(assert) { - customLoader.normalize('asdfasdf').then(function(normalized) { - return customLoader['import'](normalized); - }).then(function(m) { - assert(m.n, 'n'); - }); - }); - - test('System instanceof Loader', function(assert) { - assert(System instanceof Reflect.Loader, true); - }); - - if (typeof Worker != 'undefined') - test('Loading inside of a Web Worker', function(assert) { - var worker = new Worker('worker/worker-' + System.transpiler + '.js'); - - worker.onmessage = function(e) { - assert(e.data, 'p'); - }; - }); -} diff --git a/test/worker/worker-babel.js b/test/worker/worker-babel.js index 9a7fbea..ae6c930 100644 --- a/test/worker/worker-babel.js +++ b/test/worker/worker-babel.js @@ -1,11 +1,11 @@ importScripts("../../node_modules/when/es6-shim/Promise.js", - "../../dist/es6-module-loader.src.js" + "../../dist/es6-module-loader-dev.src.js" ); System.transpiler = 'babel'; System.paths['babel'] = '../../node_modules/babel-core/browser.js'; -System['import']('es6').then(function(m) { +System['import']('es6.js').then(function(m) { postMessage(m.p); }, function(err) { console.error(err, err.stack); diff --git a/test/worker/worker-traceur.js b/test/worker/worker-traceur.js index c275a77..d8ff14b 100644 --- a/test/worker/worker-traceur.js +++ b/test/worker/worker-traceur.js @@ -1,7 +1,7 @@ importScripts("../../node_modules/when/es6-shim/Promise.js", - "../../dist/es6-module-loader.src.js"); + "../../dist/es6-module-loader-dev.src.js"); System.paths['traceur'] = '../../node_modules/traceur/bin/traceur.js'; -System['import']('es6').then(function(m) { +System['import']('es6.js').then(function(m) { postMessage(m.p); }, function(err) { console.error(err, err.stack); diff --git a/test/worker/worker-typescript.js b/test/worker/worker-typescript.js new file mode 100644 index 0000000..8a087b9 --- /dev/null +++ b/test/worker/worker-typescript.js @@ -0,0 +1,9 @@ +importScripts("../../node_modules/when/es6-shim/Promise.js", + "../../dist/es6-module-loader-dev.src.js", + "../../node_modules/typescript/lib/typescript.js"); +System.transpiler = 'typescript'; +System['import']('es6.js').then(function(m) { + postMessage(m.p); +}, function(err) { + console.error(err, err.stack); +}); \ No newline at end of file