pax_global_header00006660000000000000000000000064133407122040014506gustar00rootroot0000000000000052 comment=13c11deea71755743c98c14ca66cd3b54df9b849 r.js-2.3.6/000077500000000000000000000000001334071220400123725ustar00rootroot00000000000000r.js-2.3.6/.github/000077500000000000000000000000001334071220400137325ustar00rootroot00000000000000r.js-2.3.6/.github/CONTRIBUTING.md000066400000000000000000000006611334071220400161660ustar00rootroot00000000000000# Contributing to r.js [See the requirejs.org contributing page](http://requirejs.org/docs/contributing.html). If you have a question about a specific setup or using particular libraries or file layouts with requirejs/r.js, then it is best to ask that on [Stack Overflow using the requirejs tag](https://stackoverflow.com/questions/tagged/requirejs). New issues here are best used for bug reports that have test cases or examples. r.js-2.3.6/.gitignore000066400000000000000000000120351334071220400143630ustar00rootroot00000000000000.DS_Store .idea/ /r.js build/jslib/uglifyjs/temp build/tests/builds build/tests/lib/amdefine/built.js build/tests/lib/anonUmdInteriorModules/main-built.js build/tests/lib/appDirSrcOverwrite/www-built build/tests/lib/arrow/main-built.js build/tests/lib/bundlesConfig/built build/tests/lib/cjsTranslate/www-built build/tests/lib/closureExterns/built build/tests/lib/comments/built.js build/tests/lib/comments/noPartialDupe/built build/tests/lib/comments/unique/built.js build/tests/lib/configPackageShim/built build/tests/lib/cssComment138/main-built.css build/tests/lib/cssDuplicates/main-built.css build/tests/lib/cssKeepComments/main-built.css build/tests/lib/cssKeepWhitespace/main-built.css build/tests/lib/cssKeepLicense/main-license-built.css build/tests/lib/cssKeepLicense/main-built.css build/tests/lib/cssMediaQuery/main-built.css build/tests/lib/cssPrefix/356/www-built build/tests/lib/cssRemoveCombined/www-built build/tests/lib/depsConfig/main-built.js build/tests/lib/dormant213/main-built.js build/tests/lib/dotpackage/built build/tests/lib/dotTrim/built.js build/tests/lib/dualLayerOverride/built build/tests/lib/dynamicDefine/main-built.js build/tests/lib/empty/built build/tests/lib/hasOwnProperty/built.js build/tests/lib/iife/main-built.js build/tests/lib/insertRequire/main-built.js build/tests/lib/intDefine/main-built.js build/tests/lib/inlineDefineNoRequire/testmodule-built.js build/tests/lib/jqueryConfig/main-built.js build/tests/lib/keepAmdefine/built.js build/tests/lib/mainConfigFile/basic/main-built.js build/tests/lib/mainConfigFile/first/main-built.js build/tests/lib/mainConfigFile/mergeConfig/main-built.js build/tests/lib/mainConfigBaseUrl/www-built build/tests/lib/mapConfigMix/a-built.js build/tests/lib/moduleThenPlugin/built.js build/tests/lib/modulesExclude/built build/tests/lib/nameInsertion/built.js build/tests/lib/nameInsertion/nested/built.js build/tests/lib/namespace/foo.js build/tests/lib/namespaceConfig/foo.js build/tests/lib/namespaceMinified/foo.js build/tests/lib/nested/main-built.js build/tests/lib/nested/main-builtWithCE.js build/tests/lib/nestedHas/main-built.js build/tests/lib/nestedHas/main-builtNeedAll.js build/tests/lib/nestedHas/main-builtNeedB.js build/tests/lib/nestedHas/main-builtNeedC.js build/tests/lib/nestedHas/main-builtNeedD.js build/tests/lib/nestedHas/main-builtNested.js build/tests/lib/noexports/main-built.js build/tests/lib/nojQDupeDefine/main-built.js build/tests/lib/nonStrict/main-built.js build/tests/lib/nonUmdIdentifiers/main-built.js build/tests/lib/onBuildAllDir/js-built build/tests/lib/onBuildRead/main-built.js build/tests/lib/onBuildWrite/main-built.js build/tests/lib/override/wrap/built build/tests/lib/packages/main-built.js build/tests/lib/packagesNode/main-built.js build/tests/lib/pathsNoCopy/js-built build/tests/lib/pluginBuilder/main-built.js build/tests/lib/pluginBuildUndef/out.js build/tests/lib/pluginDepExec/main-built.js build/tests/lib/pluginShimDep/main-built.js build/tests/lib/plugins/main-built.js build/tests/lib/plugins/main-builtPluginFirst.js build/tests/lib/plugins/onLayerEnd/built build/tests/lib/plugins/onLayerEnd/main-built.js build/tests/lib/plugins/optimizeAllPluginResources/www-built build/tests/lib/pragmas/override/built build/tests/lib/pristineSrc/built build/tests/lib/rawText/built.js build/tests/lib/rawTextLongId/built.js build/tests/lib/rawTextNameTarget/a-built.js build/tests/lib/rawTextNameWholeProject/www-built build/tests/lib/removeCombined/app-built build/tests/lib/removeCombined/baseUrl-built build/tests/lib/removeCombinedPaths/testcase/project/build/build_output build/tests/lib/requireHoist/perLayer/built build/tests/lib/rhino-186/built build/tests/lib/semicolonInsert/a-built.js build/tests/lib/shimBasicWrap/basic-tests-built.js build/tests/lib/shimFakeDefine/main-built.js build/tests/lib/shimWrapShort/main-built.js build/tests/lib/sourcemap/www-built build/tests/lib/sourcemap/onejs/www/js/built.js build/tests/lib/sourcemap/onejs/www/js/built.js.map build/tests/lib/sourcemap/twojs/www-built build/tests/lib/sourcemapWrap/built build/tests/lib/sourcemapComments/main-built.js build/tests/lib/sourcemapComments/main-built.js.map build/tests/lib/stubModules/create/foobar-built.js build/tests/lib/stubModules/main-built.js build/tests/lib/stubModules/perModule/built build/tests/lib/transportBeforeMinify/www-built build/tests/lib/typescriptConfig/main-built.js build/tests/lib/uglifyMangleProperties/main-built.js build/tests/lib/umd/main-built.js build/tests/lib/umd2/built.js build/tests/lib/umd4/app-built.js build/tests/lib/umdNested/main-built.js build/tests/lib/unicode/main-built.js build/tests/lib/urlToEmpty/main-built.js build/tests/lib/wrap/outBothArray.js build/tests/lib/wrap/outOnlyEnd.js build/tests/lib/wrap/outOnlyEndArray.js build/tests/lib/wrap/outOnlyStart.js build/tests/lib/wrap/outOnlyStartArray.js build/tests/tools/doubleOptimize/built build/tests/tools/override/node_modules build/tests/tools/override/one-built.js build/tests/transform/results env/xpcshell tests/node/node_modules tests/node/embedded/node_modules tests/rhino/main-built.js tests/xpcshell/main-built.js r.js-2.3.6/LICENSE000066400000000000000000000035721334071220400134060ustar00rootroot00000000000000Copyright jQuery Foundation and other contributors, https://jquery.org/ This software consists of voluntary contributions made by many individuals. For exact contribution history, see the revision history available at https://github.com/requirejs/r.js The following license applies to all parts of this software except as documented below: ==== Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ==== Copyright and related rights for sample code are waived via CC0. Sample code is defined as all source code displayed within the prose of the documentation. CC0: http://creativecommons.org/publicdomain/zero/1.0/ ==== Files located in the node_modules directory, and certain utilities used to build or test the software in the tests, build/tests, env, lib directories, are externally maintained libraries used by this software which have their own licenses; we recommend you read them, as their terms may differ from the terms above. r.js-2.3.6/README.md000066400000000000000000000230661334071220400136600ustar00rootroot00000000000000# r.js A command line tool for running JavaScript scripts that use the [Asynchronous Module Definition API (AMD)](https://github.com/amdjs/amdjs-api/blob/master/AMD.md) for declaring and using JavaScript modules and regular JavaScript script files. It is part of the [RequireJS project](http://requirejs.org), and works with the RequireJS implementation of AMD. r.js is a single script that has two major functions: * Run AMD-based projects [in Node](http://requirejs.org/docs/node.html) and Nashorn, Rhino and xpcshell. * Includes the [RequireJS Optimizer](http://requirejs.org/docs/optimization.html) that combines scripts for optimal browser delivery. # Installation ## Node npm install -g requirejs From then on, you can use `r.js` on the command line to run the optimizer. ## Nashorn/Rhino/Browser Download the latest release from the [RequireJS download page](http://requirejs.org/docs/download.html#rjs). ## xpcshell [xpcshell](https://developer.mozilla.org/en-US/docs/XPConnect/xpcshell) support was added in r.js version 2.1.5, so use that r.js version or later. Download the latest release of r.js from the [RequireJS download page](http://requirejs.org/docs/download.html#rjs). ## From this repo r.js is made up of a series of modules that are built into one file for distribution. The **dist** directory contains the built version of the code. In the master branch, it should match the current state of the master code. If you are doing local modifications from a clone of this repo, you can run the following command to generate an r.js at the root of this repo: node dist.js To generate an r.js that also gets copied to **dist** with a time stamp, run: ./copydist.js # Running AMD-based projects If your JS project's main application file is called main.js, then do the following: ## Node r.js main.js Requires Node 0.4 or later. r.js allows using Node modules installed via npm. For more info see the [Use with Node](http://requirejs.org/docs/node.html) docs. ## Java ### Nashorn As of r.js 2.1.16, r.js can run in [Nashorn](http://www.oracle.com/technetwork/articles/java/jf14-nashorn-2126515.html), Java 8+'s JavaScript engine, via the `jjs` command line tool that is installed with Java. Then general format of the command: ``` jjs -scripting path/to/r.js -- [r.js command line arguments here] ``` Examples: ``` # Calling r.js to optimize a project using the build config in build.js jjs -scripting path/to/r.js -- -o build.js # Calling r.js to run AMD modules, where the main app program is main.js jjs -scripting path/to/r.js -- main.js ``` All further examples will use the Node notation, but substitute the **r.js** references below with the command line structure mentioned above (`jjs -scripting path/to/r.js -- `). ### Rhino Using Rhino requires some JAR files in the CLASSPATH for it to work: * [rhino.jar](https://github.com/requirejs/r.js/blob/master/lib/rhino/js.jar?raw=true) from the [Rhino project](http://www.mozilla.org/rhino/). * [compiler.jar](https://github.com/requirejs/r.js/blob/master/lib/closure/compiler.jar?raw=true) if you are using the optimizer and want to use [Closure Compiler](http://code.google.com/closure/compiler/). Download those files to your machine. To run r.js, you can use this type of command: ### OS X/Linux/Unix: java -classpath path/to/rhino/js.jar:path/to/closure/compiler.jar org.mozilla.javascript.tools.shell.Main -opt -1 r.js main.js ### Windows java -classpath path/to/rhino/js.jar;path/to/closure/compiler.jar org.mozilla.javascript.tools.shell.Main -opt -1 r.js main.js s If you want to run it in the debugger, replace org.mozilla.javascript.tools.shell.Main with **org.mozilla.javascript.tools.debugger.Main**. All further examples will use the Node notation, but substitute the **r.js** references below with the appropriate java command. ## xpcshell To run the optimizer using a build config file or command line build options: path/to/xpcshell path/to/r.js -o buildconfig.js r.js can also be used as a library in another .js file run via xpcshell. * [tests/xpcshell/run.js](https://github.com/requirejs/r.js/blob/master/tests/xpcshell/run.js): shows how to load AMD modules by using r.js as a library. * [tests/xpcshell/build.js](https://github.com/requirejs/r.js/blob/master/tests/xpcshell/build.js): shows how to trigger the optimizer from within another .js file. # Optimizer The optimizer can be run by passing the **-o** command to r.js: r.js -o path/to/buildconfig.js See the [Optimization doc](http://requirejs.org/docs/optimization.html) for more information on the optimizer. If running in **Java**, be sure to grab the Rhino and Closure Compiler jar files in the lib/ directory, then run this command: ### OS X/Linux/Unix: java -classpath path/to/rhino/js.jar:path/to/closure/compiler.jar org.mozilla.javascript.tools.shell.Main r.js -o path/to/buildconfig.js ### Windows java -classpath path/to/rhino/js.jar;path/to/closure/compiler.jar org.mozilla.javascript.tools.shell.Main r.js -o path/to/buildconfig.js ## What makes it special The optimizer is better than using a plain concatenation script because it runs require.js as part of the optimization, so it knows how to: * Use [Loader Plugins](http://requirejs.org/docs/plugins.html) to load non-script dependencies and inline them in built files. * [Name anonymous modules](http://requirejs.org/docs/api.html#modulename). If your optimization step does not do this, and you use anonymous modules, you will get errors running the built code. # Other r.js commands ## Get Version To get the version of r.js and the version of require.js used by r.js: r.js -v ## Convert CommonJS modules To convert a directory of CommonJS modules to ones that have define() wrappers: r.js -convert path/to/commonjs/dir output/dir Most, but not all, CommonJS modules can be converted to define()-wrapped modules and still work. However, there are some modules that may fail if: * They use code branches like if/else or try/catch to call require(). There are problems supporting this kind of dynamic module calls in an async environment. * Some kinds of circular dependencies will not work right. The kinds that fail are normally very brittle and depend on the execution order of the dependent modules. # License MIT # Code of Conduct [jQuery Foundation Code of Conduct](https://jquery.org/conduct/). # Directory layout ## Directory prerequisites r.js assumes that there are some other projects checked out as sibling directories to it, and named certain names, in order for the tests to pass. So it is best to create the following directory structure with the following git clone commands: mkdir requirejs cd requirejs git clone git://github.com/requirejs/r.js.git git clone git://github.com/requirejs/requirejs.git git clone git://github.com/requirejs/text.git So there should be a sibling `requirejs` and `text` directories to the r.js directory containing your clone of the r.js project. ## Directory details The r.js project has the following directory layout: * **dist.js**: the script that builds r.js * **require.js**: the version of require.js to include in r.js * **dist** the directory containing releases of r.js * **build**: The files that make up the optimizer. dist.js includes a list of the files from this directory to build into r.js. * **lib**: The Java libraries for Rhino and Closure Compiler. Only needed if using Java/Rhino to run r.js * **tests**: command line tests. Run it under Node and Rhino by doing ../r.js all.js dist.js takes the build/jslib/x.js file and injects the require.js files and other files from the build/jslib directory into it. If you make changes to any of those files, you will need to run **node dist.js** to generate a new r.js. Be sure to run it through the tests , using both Node and Java/Rhino: * node dist.js * cd tests * node ../r.js all.js * java -classpath ../lib/rhino/js.jar:../lib/closure/compiler.jar org.mozilla.javascript.tools.shell.Main ../r.js all.js * cd ../build/tests * node ../../r.js all.js * java -classpath ../../lib/rhino/js.jar:../../lib/closure/compiler.jar org.mozilla.javascript.tools.shell.Main ../../r.js all.js For running tests, put xpcshell in env/xpcshell/ as a directory, that contains all the files needed for it to run, including the xpcshell binary. Downloading [a xulrunner nightly](http://ftp.mozilla.org/pub/mozilla.org/xulrunner/nightly/latest-mozilla-central/) might work. # Contributing code changes See the [RequireJS Contributing](http://requirejs.org/docs/contributing.html) page for info on how to contribute code/bug fixes to this project. Use GitHub pull requests to point to code changes, although for larger changes, contact the [requirejs mailing list](http://groups.google.com/group/requirejs) to discuss them first. # Included libraries r.js includes modules from these projects: * [Esprima](http://esprima.org/) * [UglifyJS](https://github.com/mishoo/UglifyJS) # Doing a release To do a release of version 0.0.0: * Make sure the right version of require.js is in the project. * Modify build/jslib/x.js to update the r.js version number in two places. * node dist.js * Run the tests (see above). They should pass. :) * mv r.js dist/r.js * git commit -am "Release 0.0.0" * git tag -am "Release 0.0.0" 0.0.0 * git push origin master * git push --tags Update the RequireJS download site to point to the latest release, then update the [requirejs/requirejs-npm](https://github.com/requirejs/requirejs-npm) repo to have the latest changes and publish the result to npm. Make sure to keep `#!/usr/bin/env node` as the first line in bin/r.js in the requirejs-npm repo. r.js-2.3.6/build/000077500000000000000000000000001334071220400134715ustar00rootroot00000000000000r.js-2.3.6/build/build.js000066400000000000000000000012541334071220400151300ustar00rootroot00000000000000/* * Create a build.js file that has the build options you want and pass that * build file to this file to do the build. See example.build.js for more information. */ /*jslint strict: false, nomen: false */ /*global require: false */ require({ baseUrl: require.s.contexts._.config.baseUrl, //Use a separate context than the default context so that the //build can use the default context. context: 'build', catchError: { define: true } }, ['env!env/args', 'env!env/quit', 'logger', 'build'], function (args, quit, logger, build) { build(args).then(function () {}, function (err) { logger.error(err); quit(1); }); }); r.js-2.3.6/build/buildebug.sh000077500000000000000000000001261334071220400157710ustar00rootroot00000000000000#!/bin/sh MYDIR=`cd \`dirname "$0"\`; pwd` $MYDIR/../bin/xdebug $MYDIR/build.js "$@" r.js-2.3.6/build/example.build.js000066400000000000000000001003041334071220400165560ustar00rootroot00000000000000/* * This is an example build file that demonstrates how to use the build system for * require.js. * * THIS BUILD FILE WILL NOT WORK. It is referencing paths that probably * do not exist on your machine. Just use it as a guide. * * */ ({ //The top level directory that contains your app. If this option is used //then it assumed your scripts are in a subdirectory under this path. //This option is not required. If it is not specified, then baseUrl //below is the anchor point for finding things. If this option is specified, //then all the files from the app directory will be copied to the dir: //output area, and baseUrl will assume to be a relative path under //this directory. appDir: "some/path/", //By default, all modules are located relative to this path. If baseUrl //is not explicitly set, then all modules are loaded relative to //the directory that holds the build file. If appDir is set, then //baseUrl should be specified as relative to the appDir. baseUrl: "./", //By default all the configuration for optimization happens from the command //line or by properties in the config file, and configuration that was //passed to requirejs as part of the app's runtime "main" JS file is *not* //considered. However, if you prefer the "main" JS file configuration //to be read for the build so that you do not have to duplicate the values //in a separate configuration, set this property to the location of that //main JS file. The first requirejs({}), require({}), requirejs.config({}), //or require.config({}) call found in that file will be used. //As of 2.1.10, mainConfigFile can be an array of values, with the last //value's config take precedence over previous values in the array. mainConfigFile: '../some/path/to/main.js', //Set paths for modules. If relative paths, set relative to baseUrl above. //If a special value of "empty:" is used for the path value, then that //acts like mapping the path to an empty file. It allows the optimizer to //resolve the dependency to path, but then does not include it in the output. //Useful to map module names that are to resources on a CDN or other //http: URL when running in the browser and during an optimization that //file should be skipped because it has no dependencies. //e.g. if you wish to include `jquery` and `angularjs` from public CDNs, //paths: { "jquery": "empty:", "angular": "empty:" } paths: { "foo.bar": "../scripts/foo/bar", "baz": "../another/path/baz" }, //Sets up a map of module IDs to other module IDs. For more details, see //the http://requirejs.org/docs/api.html#config-map docs. map: {}, //Configure CommonJS packages. See http://requirejs.org/docs/api.html#packages //for more information. packages: [], //The directory path to save the output. If not specified, then //the path will default to be a directory called "build" as a sibling //to the build file. All relative paths are relative to the build file. dir: "../some/path", //As of RequireJS 2.0.2, the dir above will be deleted before the //build starts again. If you have a big build and are not doing //source transforms with onBuildRead/onBuildWrite, then you can //set keepBuildDir to true to keep the previous dir. This allows for //faster rebuilds, but it could lead to unexpected errors if the //built code is transformed in some way. keepBuildDir: false, //If shim config is used in the app during runtime, duplicate the config //here. Necessary if shim config is used, so that the shim's dependencies //are included in the build. Using "mainConfigFile" is a better way to //pass this information though, so that it is only listed in one place. //However, if mainConfigFile is not an option, the shim config can be //inlined in the build config. shim: {}, //As of 2.1.11, shimmed dependencies can be wrapped in a define() wrapper //to help when intermediate dependencies are AMD have dependencies of their //own. The canonical example is a project using Backbone, which depends on //jQuery and Underscore. Shimmed dependencies that want Backbone available //immediately will not see it in a build, since AMD compatible versions of //Backbone will not execute the define() function until dependencies are //ready. By wrapping those shimmed dependencies, this can be avoided, but //it could introduce other errors if those shimmed dependencies use the //global scope in weird ways, so it is not the default behavior to wrap. //To use shim wrapping skipModuleInsertion needs to be false. //More notes in http://requirejs.org/docs/api.html#config-shim wrapShim: false, //Used to inline i18n resources into the built file. If no locale //is specified, i18n resources will not be inlined. Only one locale //can be inlined for a build. Root bundles referenced by a build layer //will be included in a build layer regardless of locale being set. locale: "en-us", //How to optimize (minify) all the JS files in the build output directory. //Right now only the following values //are supported: //- "uglify": (default) uses UglifyJS to minify the code. Before version //2.2, the uglify version was a 1.3.x release. With r.js 2.2, it is now //a 2.x uglify release. Only supports ES5 syntax. For ES 2015 or later, use //the "none" option instead. //- "uglify2": in version 2.1.2+. Uses UglifyJS2. As of r.js 2.2, this //is just an alias for "uglify" now that 2.2 just uses uglify 2.x. //- "closure": uses Google's Closure Compiler in simple optimization //mode to minify the code. Only available if running the optimizer using //Java. //- "closure.keepLines": Same as closure option, but keeps line returns //in the minified files. //- "none": no minification will be done. Use this setting if you are using //ES 2015 or later syntax in your files, since the bundled UglifyJS only //understands ES5 and earlier syntax. For ES2015 code, run a compliant // minifier as a separate step after running r.js. optimize: "uglify", //Introduced in 2.1.2: If using "dir" for an output directory, normally the //optimize setting is used to optimize the build bundles (the "modules" //section of the config) and any other JS file in the directory. However, if //the non-build bundle JS files will not be loaded after a build, you can //skip the optimization of those files, to speed up builds. Set this value //to true if you want to skip optimizing those other non-build bundle JS //files. skipDirOptimize: false, //Introduced in 2.1.2 and considered experimental. //If the minifier specified in the "optimize" option supports generating //source maps for the minified code, then generate them. The source maps //generated only translate minified JS to non-minified JS, it does not do //anything magical for translating minified JS to transpiled source code. //Currently only optimize: "uglify2" is supported when running in node or //rhino, and if running in rhino, "closure" with a closure compiler jar //build after r1592 (20111114 release). //The source files will show up in a browser developer tool that supports //source maps as ".js.src" files. generateSourceMaps: false, //Introduced in 2.1.1: If a full directory optimization ("dir" is used), and //optimize is not "none", and skipDirOptimize is false, then normally all JS //files in the directory will be minified, and this value is automatically //set to "all". For JS files to properly work after a minification, the //optimizer will parse for define() calls and insert any dependency arrays //that are missing. However, this can be a bit slow if there are many/larger //JS files. So this transport normalization is not done (automatically set //to "skip") if optimize is set to "none". Cases where you may want to //manually set this value: //1) Optimizing later: if you plan on minifying the non-build bundle JS files //after the optimizer runs (so not as part of running the optimizer), then //you should explicitly this value to "all". //2) Optimizing, but not dynamically loading later: you want to do a full //project optimization, but do not plan on dynamically loading non-build //bundle JS files later. In this case, the normalization just slows down //builds, so you can explicitly set this value to "skip". //Finally, all build bundles (specified in the "modules" or "out" setting) //automatically get normalization, so this setting does not apply to those //files. normalizeDirDefines: "skip", //If using UglifyJS for script optimization, these config options can be //used to pass configuration values to UglifyJS. //In r.js 2.2, this is now just uglify2, so see the 'uglify2' section below //for example options. For r.js pre-2.2, this was for setting uglify 1.3.x //options. uglify: { }, //If using UglifyJS2 for script optimization, these config options can be //used to pass configuration values to UglifyJS2. As of r.js 2.2, UglifyJS2 //is the only uglify option, so the config key can just be 'uglify' for //r.js 2.2+. //For possible `output` values see: //https://github.com/mishoo/UglifyJS2#beautifier-options //For possible `compress` values see: //https://github.com/mishoo/UglifyJS2#compressor-options uglify2: { //Example of a specialized config. If you are fine //with the default options, no need to specify //any of these properties. output: { beautify: true }, compress: { sequences: false, global_defs: { DEBUG: false } }, warnings: true, mangle: false }, //If using Closure Compiler for script optimization, these config options //can be used to configure Closure Compiler. See the documentation for //Closure compiler for more information. closure: { CompilerOptions: {}, CompilationLevel: 'SIMPLE_OPTIMIZATIONS', loggingLevel: 'WARNING', externExportsPath: './extern.js' }, //Allow CSS optimizations. Allowed values: //- "standard": @import inlining and removal of comments, unnecessary //whitespace and line returns. //Removing line returns may have problems in IE, depending on the type //of CSS. //- "standard.keepLines": like "standard" but keeps line returns. //- "none": skip CSS optimizations. //- "standard.keepComments": keeps the file comments, but removes line //returns. (r.js 1.0.8+) //- "standard.keepComments.keepLines": keeps the file comments and line //returns. (r.js 1.0.8+) //- "standard.keepWhitespace": like "standard" but keeps unnecessary whitespace. optimizeCss: "standard.keepLines.keepWhitespace", //If optimizeCss is in use, a list of files to ignore for the @import //inlining. The value of this option should be a string of comma separated //CSS file names to ignore (like 'a.css,b.css'. The file names should match //whatever strings are used in the @import calls. cssImportIgnore: null, //cssIn is typically used as a command line option. It can be used //along with out to optimize a single CSS file. cssIn: "path/to/main.css", out: "path/to/css-optimized.css", //If "out" is not in the same directory as "cssIn", and there is a relative //url() in the cssIn file, use this to set a prefix URL to use. Only set it //if you find a problem with incorrect relative URLs after optimization. cssPrefix: "", //Inlines the text for any text! dependencies, to avoid the separate //async XMLHttpRequest calls to load those dependencies. inlineText: true, //Allow "use strict"; be included in the RequireJS files. //Default is false because there are not many browsers that can properly //process and give errors on code for ES5 strict mode, //and there is a lot of legacy code that will not work in strict mode. useStrict: false, //Specify build pragmas. If the source files contain comments like so: //>>excludeStart("fooExclude", pragmas.fooExclude); //>>excludeEnd("fooExclude"); //Then the comments that start with //>> are the build pragmas. //excludeStart/excludeEnd and includeStart/includeEnd work, and the //the pragmas value to the includeStart or excludeStart lines //is evaluated to see if the code between the Start and End pragma //lines should be included or excluded. If you have a choice to use //"has" code or pragmas, use "has" code instead. Pragmas are harder //to read, but they can be a bit more flexible on code removal vs. //has-based code, which must follow JavaScript language rules. //Pragmas also remove code in non-minified source, where has branch //trimming is only done if the code is minified via UglifyJS or //Closure Compiler. pragmas: { fooExclude: true }, //Same as "pragmas", but only applied once during the file save phase //of an optimization. "pragmas" are applied both during the dependency //mapping and file saving phases on an optimization. Some pragmas //should not be processed during the dependency mapping phase of an //operation, such as the pragma in the CoffeeScript loader plugin, //which wants the CoffeeScript compiler during the dependency mapping //phase, but once files are saved as plain JavaScript, the CoffeeScript //compiler is no longer needed. In that case, pragmasOnSave would be used //to exclude the compiler code during the save phase. pragmasOnSave: { //Just an example excludeCoffeeScript: true }, //Allows trimming of code branches that use has.js-based feature detection: //https://github.com/phiggins42/has.js //The code branch trimming only happens if minification with UglifyJS or //Closure Compiler is done. For more information, see: //http://requirejs.org/docs/optimization.html#hasjs has: { 'function-bind': true, 'string-trim': false }, //Similar to pragmasOnSave, but for has tests -- only applied during the //file save phase of optimization, where "has" is applied to both //dependency mapping and file save phases. hasOnSave: { 'function-bind': true, 'string-trim': false }, //Allows namespacing requirejs, require and define calls to a new name. //This allows stronger assurances of getting a module space that will //not interfere with others using a define/require AMD-based module //system. The example below will rename define() calls to foo.define(). //See http://requirejs.org/docs/faq-advanced.html#rename for a more //complete example. namespace: 'foo', //Skip processing for pragmas. skipPragmas: false, //If skipModuleInsertion is false, then files that do not use define() //to define modules will get a define() placeholder inserted for them. //Also, require.pause/resume calls will be inserted. //Set it to true to avoid this. This is useful if you are building code that //does not use require() in the built project or in the JS files, but you //still want to use the optimization tool from RequireJS to concatenate modules //together. skipModuleInsertion: false, //Specify modules to stub out in the optimized file. The optimizer will //use the source version of these modules for dependency tracing and for //plugin use, but when writing the text into an optimized bundle, these //modules will get the following text instead: //If the module is used as a plugin: // define({load: function(id){throw new Error("Dynamic load not allowed: " + id);}}); //If just a plain module: // define({}); //This is useful particularly for plugins that inline all their resources //and use the default module resolution behavior (do *not* implement the //normalize() method). In those cases, an AMD loader just needs to know //that the module has a definition. These small stubs can be used instead of //including the full source for a plugin. stubModules: ['text', 'bar'], //If it is not a one file optimization, scan through all .js files in the //output directory for any plugin resource dependencies, and if the plugin //supports optimizing them as separate files, optimize them. Can be a //slower optimization. Only use if there are some plugins that use things //like XMLHttpRequest that do not work across domains, but the built code //will be placed on another domain. optimizeAllPluginResources: false, //Finds require() dependencies inside a require() or define call. By default //this value is false, because those resources should be considered dynamic/runtime //calls. However, for some optimization scenarios, it is desirable to //include them in the build. //Introduced in 1.0.3. Previous versions incorrectly found the nested calls //by default. findNestedDependencies: false, //If set to true, any files that were combined into a build bundle will be //removed from the output folder. removeCombined: false, //List the modules that will be optimized. All their immediate and deep //dependencies will be included in the module's file when the build is //done. If that module or any of its dependencies includes i18n bundles, //only the root bundles will be included unless the locale: section is set above. modules: [ //Just specifying a module name means that module will be converted into //a built file that contains all of its dependencies. If that module or any //of its dependencies includes i18n bundles, they may not be included in the //built file unless the locale: section is set above. { name: "foo/bar/bop", //create: true can be used to create the module layer at the given //name, if it does not already exist in the source location. If //there is a module at the source location with this name, then //create: true is superfluous. create: true, //For build profiles that contain more than one modules entry, //allow overrides for the properties that set for the whole build, //for example a different set of pragmas for this module. //The override's value is an object that can //contain any of the other build options in this file. override: { pragmas: { fooExclude: true } } }, //This module entry combines all the dependencies of foo/bar/bop and foo/bar/bee //and any of their dependencies into one file. { name: "foo/bar/bop", include: ["foo/bar/bee"] }, //This module entry combines all the dependencies of foo/bar/bip into one file, //but excludes foo/bar/bop and its dependencies from the built file. If you want //to exclude a module that is also another module being optimized, it is more //efficient if you define that module optimization entry before using it //in an exclude array. { name: "foo/bar/bip", exclude: [ "foo/bar/bop" ] }, //This module entry shows how to specify a specific module be excluded //from the built module file. excludeShallow means just exclude that //specific module, but if that module has nested dependencies that are //part of the built file, keep them in there. This is useful during //development when you want to have a fast bundled set of modules, but //just develop/debug one or two modules at a time. { name: "foo/bar/bin", excludeShallow: [ "foo/bar/bot" ] }, //This module entry shows the use insertRequire (first available in 2.0): { name: "foo/baz", insertRequire: ["foo/baz"] } ], //If the target module only calls define and does not call require() at the //top level, and this build output is used with an AMD shim loader like //almond, where the data-main script in the HTML page is replaced with just //a script to the built file, if there is no top-level require, no modules //will execute. specify insertRequire to have a require([]) call placed at //the end of the file to trigger the execution of modules. More detail at //https://github.com/requirejs/almond //Note that insertRequire does not affect or add to the modules that are //built into the build bundle. It just adds a require([]) call to the end //of the built file for use during the runtime execution of the built code. insertRequire: ['foo/bar/bop'], //If you only intend to optimize a module (and its dependencies), with //a single file as the output, you can specify the module options inline, //instead of using the 'modules' section above. 'exclude', //'excludeShallow', 'include' and 'insertRequire' are all allowed as siblings //to name. The name of the optimized file is specified by 'out'. name: "foo/bar/bop", include: ["foo/bar/bee"], insertRequire: ['foo/bar/bop'], out: "path/to/optimized-file.js", //An alternative to "include". Normally only used in a requirejs.config() //call for a module used for mainConfigFile, since requirejs will read //"deps" during runtime to do the equivalent of require(deps) to kick //off some module loading. deps: ["foo/bar/bee"], //In RequireJS 2.0, "out" can be a function. For single JS file //optimizations that are generated by calling requirejs.optimize(), //using an out function means the optimized contents are not written to //a file on disk, but instead pass to the out function: out: function (text, sourceMapText) { //Do what you want with the optimized text here. //Starting in 2.1.10, if generateSourceMaps was set to true //and optimize: 'uglify2' was used ('uglify' in r.js 2.2+), then the //second argument to this function, sourceMapText, will be the text of //the source map. }, //In 2.0.12+: by setting "out" to "stdout", the optimized output is written //to STDOUT. This can be useful for integrating r.js with other commandline //tools. In order to avoid additional output "logLevel: 4" should also be used. out: "stdout", //Wrap any build bundle in a start and end text specified by wrap. //Use this to encapsulate the module code so that define/require are //not globals. The end text can expose some globals from your file, //making it easy to create stand-alone libraries that do not mandate //the end user use requirejs. wrap: { start: "(function() {", end: "}());" }, //Another way to use wrap, but uses default wrapping of: //(function() { + content + }()); wrap: true, //Another way to use wrap, but uses file paths. This makes it easier //to have the start text contain license information and the end text //to contain the global variable exports, like //window.myGlobal = requirejs('myModule'); //File paths are relative to the build file, or if running a commmand //line build, the current directory. wrap: { startFile: "parts/start.frag", endFile: "parts/end.frag" }, //As of r.js 2.1.0, startFile and endFile can be arrays of files, and //they will all be loaded and inserted at the start or end, respectively, //of the build bundle. wrap: { startFile: ["parts/startOne.frag", "parts/startTwo.frag"], endFile: ["parts/endOne.frag", "parts/endTwo.frag"] }, //When the optimizer copies files from the source location to the //destination directory, it will skip directories and files that start //with a ".". If you want to copy .directories or certain .files, for //instance if you keep some packages in a .packages directory, or copy //over .htaccess files, you can set this to null. If you want to change //the exclusion rules, change it to a different regexp. If the regexp //matches, it means the directory will be excluded. This used to be //called dirExclusionRegExp before the 1.0.2 release. //As of 1.0.3, this value can also be a string that is converted to a //RegExp via new RegExp(). fileExclusionRegExp: /^\./, //By default, comments that have a license in them are preserved in the //output when a minifier is used in the "optimize" option. //However, for a larger built files there could be a lot of //comment files that may be better served by having a smaller comment //at the top of the file that points to the list of all the licenses. //This option will turn off the auto-preservation, but you will need //work out how best to surface the license information. //NOTE: As of 2.1.7, if using xpcshell to run the optimizer, it cannot //parse out comments since its native Reflect parser is used, and does //not have the same comments option support as esprima. preserveLicenseComments: true, //Sets the logging level. It is a number. If you want "silent" running, //set logLevel to 4. From the logger.js file: //TRACE: 0, //INFO: 1, //WARN: 2, //ERROR: 3, //SILENT: 4 //Default is 0. logLevel: 0, //Introduced in 2.1.3: Some situations do not throw and stop the optimizer //when an error occurs. However, you may want to have the optimizer stop //on certain kinds of errors and you can configure those situations via //this option throwWhen: { //If there is an error calling the minifier for some JavaScript, //instead of just skipping that file throw an error. optimize: true }, //A function that if defined will be called for every file read in the //build that is done to trace JS dependencies. This allows transforms of //the content. onBuildRead: function (moduleName, path, contents) { //Always return a value. //This is just a contrived example. return contents.replace(/foo/g, 'bar'); }, //A function that will be called for every write to an optimized bundle //of modules. This allows transforms of the content before serialization. onBuildWrite: function (moduleName, path, contents) { //Always return a value. //This is just a contrived example. return contents.replace(/bar/g, 'foo'); }, //A function that is called for each JS module bundle that has been //completed. This function is called after all module bundles have //completed, but it is called for each bundle. A module bundle is a //"modules" entry or if just a single file JS optimization, the //optimized JS file. //Introduced in r.js version 2.1.6 onModuleBundleComplete: function (data) { /* data.name: the bundle name. data.path: the bundle path relative to the output directory. data.included: an array of items included in the build bundle. If a file path, it is relative to the output directory. Loader plugin IDs are also included in this array, but depending on the plugin, may or may not have something inlined in the module bundle. */ }, //Introduced in 2.1.3: Seed raw text contents for the listed module IDs. //These text contents will be used instead of doing a file IO call for //those modules. Useful if some module ID contents are dynamically //based on user input, which is common in web build tools. rawText: { 'some/id': 'define(["another/id"], function () {});' }, //Introduced in 2.0.2: if set to true, then the optimizer will add a //define(require, exports, module) {}); wrapper around any file that seems //to use commonjs/node module syntax (require, exports) without already //calling define(). This is useful to reuse modules that came from //or are loadable in an AMD loader that can load commonjs style modules //in development as well as AMD modules, but need to have a built form //that is only AMD. Note that this does *not* enable different module //ID-to-file path logic, all the modules still have to be found using the //requirejs-style configuration, it does not use node's node_modules nested //path lookups. cjsTranslate: true, //Introduced in 2.0.2: a bit experimental. //Each script in the build bundle will be turned into //a JavaScript string with a //# sourceURL comment, and then wrapped in an //eval call. This allows some browsers to see each evaled script as a //separate script in the script debugger even though they are all combined //in the same file. Some important limitations: //1) Do not use in IE if conditional comments are turned on, it will cause //errors: //http://en.wikipedia.org/wiki/Conditional_comment#Conditional_comments_in_JScript //2) It is only useful in optimize: 'none' scenarios. The goal is to allow //easier built bundle debugging, which goes against minification desires. useSourceUrl: true, //Defines the loading time for modules. Depending on the complexity of the //dependencies and the size of the involved libraries, increasing the wait //interval may be required. Default is 7 seconds. Setting the value to 0 //disables the waiting interval. waitSeconds: 7, //Introduced in 2.1.9: normally r.js inserts a semicolon at the end of a //file if there is not already one present, to avoid issues with //concatenated files and automatic semicolon insertion (ASI) rules for //JavaScript. It is a very blunt fix that is safe to do, but if you want to //lint the build output, depending on the linter rules, it may not like it. //Setting this option to true skips this insertion. However, by doing this, //you take responsibility for making sure your concatenated code works with //JavaScript's ASI rules, and that you use a minifier that understands when //to insert semicolons to avoid ASI pitfalls. skipSemiColonInsertion: false, //Introduced in 2.1.10: if set to true, will not strip amdefine use: //https://github.com/requirejs/amdefine //Normally you should not need to set this. It is only a concern if using //a built .js file from some other source, that may have included amdefine //in the built input. If you get a build error like //"undefined is not a function" and the file that generated the error //references amdefine, then set this to true. keepAmdefine: false, //Introduced in 2.1.11. As part of fixing a bug to prevent possible //overwrites of source code, https://github.com/jrburke/r.js/issues/444, //it prevented some cases where generated source is used for a build, and //it was OK to overwrite content in this source area as it was generated //from another source area, and not allowing source overwrites meant taking //another file copy hit. By setting this to true, it allows this sort of //source code overwriting. However, use at your own risk, and be sure you //have your configuration set correctly. For example, you may want to //set "keepBuildDir" to true. allowSourceOverwrites: false, //Introduced in 2.2.0. Path to file to write out bundles config //(http://requirejs.org/docs/api.html#config-bundles) found in the module //layers built by the optimizer. The path is relative to the "dir" config's //path. Only applies to full project optimization: //http://requirejs.org/docs/optimization.html#wholeproject //Only use if the optimized layers are grouped more intricately then just //a simple optimization of main app entry points. The file path specified //should be to one that has the top level requirejs.config() call that sets //up the loader. If using "mainConfigFile", then this path likely should be //the path to that file where it is placed in the "dir" output directory. bundlesConfigOutFile: 'some/path/to/main.js', //Introduced in 2.2.0. Default is true for compatibility with older //releases. If set to false, r.js will not write a build.txt file in the //"dir" directory when doing a full project optimization. writeBuildTxt: true }) r.js-2.3.6/build/jslib/000077500000000000000000000000001334071220400145745ustar00rootroot00000000000000r.js-2.3.6/build/jslib/blank.js000066400000000000000000000002501334071220400162160ustar00rootroot00000000000000//Just a blank file to use when building the optimizer with the optimizer, //so that the build does not attempt to inline some env modules, //like Node's fs and path. r.js-2.3.6/build/jslib/browser.js000066400000000000000000000013471334071220400166220ustar00rootroot00000000000000//sloppy since eval enclosed with use strict causes problems if the source //text is not strict-compliant. /*jslint sloppy: true, evil: true */ /*global require, XMLHttpRequest */ (function () { // Separate function to avoid eval pollution, same with arguments use. function exec() { eval(arguments[0]); } require.load = function (context, moduleName, url) { var xhr = new XMLHttpRequest(); xhr.open('GET', url, true); xhr.send(); xhr.onreadystatechange = function () { if (xhr.readyState === 4) { exec(xhr.responseText); //Support anonymous modules. context.completeLoad(moduleName); } }; }; }());r.js-2.3.6/build/jslib/browser/000077500000000000000000000000001334071220400162575ustar00rootroot00000000000000r.js-2.3.6/build/jslib/browser/args.js000066400000000000000000000002301334071220400175440ustar00rootroot00000000000000/*jslint strict: false */ /*global define: false, process: false */ define(function () { //Always expect config via an API call return []; }); r.js-2.3.6/build/jslib/browser/assert.js000066400000000000000000000002361334071220400201170ustar00rootroot00000000000000/*jslint strict: false */ /*global define: false, load: false */ //Just a stub for use with uglify's consolidator.js define(function () { return {}; }); r.js-2.3.6/build/jslib/browser/file.js000066400000000000000000000111571334071220400175410ustar00rootroot00000000000000/*jslint sloppy: true, nomen: true */ /*global require, define, console, XMLHttpRequest, requirejs, location */ define(['prim'], function (prim) { var file, currDirRegExp = /^\.(\/|$)/; function frontSlash(path) { return path.replace(/\\/g, '/'); } function exists(path) { var status, xhr = new XMLHttpRequest(); //Oh yeah, that is right SYNC IO. Behold its glory //and horrible blocking behavior. xhr.open('HEAD', path, false); xhr.send(); status = xhr.status; return status === 200 || status === 304; } function mkDir(dir) { console.log('mkDir is no-op in browser'); } function mkFullDir(dir) { console.log('mkFullDir is no-op in browser'); } file = { backSlashRegExp: /\\/g, exclusionRegExp: /^\./, getLineSeparator: function () { return '/'; }, exists: function (fileName) { return exists(fileName); }, parent: function (fileName) { var parts = fileName.split('/'); parts.pop(); return parts.join('/'); }, /** * Gets the absolute file path as a string, normalized * to using front slashes for path separators. * @param {String} fileName */ absPath: function (fileName) { var dir; if (currDirRegExp.test(fileName)) { dir = frontSlash(location.href); if (dir.indexOf('/') !== -1) { dir = dir.split('/'); //Pull off protocol and host, just want //to allow paths (other build parts, like //require._isSupportedBuildUrl do not support //full URLs), but a full path from //the root. dir.splice(0, 3); dir.pop(); dir = '/' + dir.join('/'); } fileName = dir + fileName.substring(1); } return fileName; }, normalize: function (fileName) { return fileName; }, isFile: function (path) { return true; }, isDirectory: function (path) { return false; }, getFilteredFileList: function (startDir, regExpFilters, makeUnixPaths) { console.log('file.getFilteredFileList is no-op in browser'); }, copyDir: function (srcDir, destDir, regExpFilter, onlyCopyNew) { console.log('file.copyDir is no-op in browser'); }, copyFile: function (srcFileName, destFileName, onlyCopyNew) { console.log('file.copyFile is no-op in browser'); }, /** * Renames a file. May fail if "to" already exists or is on another drive. */ renameFile: function (from, to) { console.log('file.renameFile is no-op in browser'); }, /** * Reads a *text* file. */ readFile: function (path, encoding) { var xhr = new XMLHttpRequest(); //Oh yeah, that is right SYNC IO. Behold its glory //and horrible blocking behavior. xhr.open('GET', path, false); xhr.send(); return xhr.responseText; }, readFileAsync: function (path, encoding) { var xhr = new XMLHttpRequest(), d = prim(); xhr.open('GET', path, true); xhr.send(); xhr.onreadystatechange = function () { if (xhr.readyState === 4) { if (xhr.status > 400) { d.reject(new Error('Status: ' + xhr.status + ': ' + xhr.statusText)); } else { d.resolve(xhr.responseText); } } }; return d.promise; }, saveUtf8File: function (fileName, fileContents) { //summary: saves a *text* file using UTF-8 encoding. file.saveFile(fileName, fileContents, "utf8"); }, saveFile: function (fileName, fileContents, encoding) { requirejs.browser.saveFile(fileName, fileContents, encoding); }, deleteFile: function (fileName) { console.log('file.deleteFile is no-op in browser'); }, /** * Deletes any empty directories under the given directory. */ deleteEmptyDirs: function (startDir) { console.log('file.deleteEmptyDirs is no-op in browser'); } }; return file; }); r.js-2.3.6/build/jslib/browser/load.js000066400000000000000000000003131334071220400175310ustar00rootroot00000000000000/*jslint strict: false */ /*global define: false, console: false */ define(['./file'], function (file) { function load(fileName) { eval(file.readFile(fileName)); } return load; }); r.js-2.3.6/build/jslib/browser/optimize.js000066400000000000000000000001011334071220400204450ustar00rootroot00000000000000/*jslint strict: false */ /*global define: false */ define({}); r.js-2.3.6/build/jslib/browser/print.js000066400000000000000000000002531334071220400177510ustar00rootroot00000000000000/*jslint strict: false */ /*global define: false, console: false */ define(function () { function print(msg) { console.log(msg); } return print; }); r.js-2.3.6/build/jslib/browser/quit.js000066400000000000000000000001421334071220400175740ustar00rootroot00000000000000/*global process */ define(function () { 'use strict'; return function (code) { }; });r.js-2.3.6/build/jslib/build.js000066400000000000000000002764371334071220400162540ustar00rootroot00000000000000/*jslint plusplus: true, nomen: true, regexp: true */ /*global define, requirejs, java, process, console */ define(function (require) { 'use strict'; var build, lang = require('lang'), prim = require('prim'), logger = require('logger'), file = require('env!env/file'), parse = require('parse'), optimize = require('optimize'), pragma = require('pragma'), transform = require('transform'), requirePatch = require('requirePatch'), env = require('env'), commonJs = require('commonJs'), SourceMapGenerator = require('source-map').SourceMapGenerator, hasProp = lang.hasProp, getOwn = lang.getOwn, falseProp = lang.falseProp, endsWithSemiColonRegExp = /;\s*$/, endsWithSlashRegExp = /[\/\\]$/, resourceIsModuleIdRegExp = /^[\w\/\\\.]+$/, deepCopyProps = { layer: true }; //Deep copy a config object, but do not copy over the "layer" property, //as it can be a deeply nested structure with a full requirejs context. function copyConfig(obj) { return lang.deeplikeCopy(obj, deepCopyProps); } prim.nextTick = function (fn) { fn(); }; //Now map require to the outermost requirejs, now that we have //local dependencies for this module. The rest of the require use is //manipulating the requirejs loader. require = requirejs; //Caching function for performance. Attached to //require so it can be reused in requirePatch.js. _cachedRawText //set up by requirePatch.js require._cacheReadAsync = function (path, encoding) { var d; if (lang.hasProp(require._cachedRawText, path)) { d = prim(); d.resolve(require._cachedRawText[path]); return d.promise; } else { return file.readFileAsync(path, encoding).then(function (text) { require._cachedRawText[path] = text; return text; }); } }; function makeBuildBaseConfig() { return { appDir: "", pragmas: {}, paths: {}, optimize: "uglify", optimizeCss: "standard.keepLines.keepWhitespace", inlineText: true, isBuild: true, optimizeAllPluginResources: false, findNestedDependencies: false, preserveLicenseComments: true, writeBuildTxt: true, //Some builds can take a while, up the default limit. waitSeconds: 30, //By default, all files/directories are copied, unless //they match this regexp, by default just excludes .folders dirExclusionRegExp: file.dirExclusionRegExp, _buildPathToModuleIndex: {} }; } /** * Some JS may not be valid if concatenated with other JS, in particular * the style of omitting semicolons and rely on ASI. Add a semicolon in * those cases. */ function addSemiColon(text, config) { if (config.skipSemiColonInsertion || endsWithSemiColonRegExp.test(text)) { return text; } else { return text + ";"; } } function endsWithSlash(dirName) { if (dirName.charAt(dirName.length - 1) !== "/") { dirName += "/"; } return dirName; } function endsWithNewLine(text) { if (text.charAt(text.length - 1) !== "\n") { text += "\n"; } return text; } //Method used by plugin writeFile calls, defined up here to avoid //jslint warning about "making a function in a loop". function makeWriteFile(namespace, layer) { function writeFile(name, contents) { logger.trace('Saving plugin-optimized file: ' + name); file.saveUtf8File(name, contents); } writeFile.asModule = function (moduleName, fileName, contents) { writeFile(fileName, build.toTransport(namespace, moduleName, fileName, contents, layer)); }; return writeFile; } /** * Appends singleContents to fileContents and returns the result. If a sourceMapGenerator * is provided, adds singleContents to the source map. * * @param {string} fileContents - The file contents to which to append singleContents * @param {string} singleContents - The additional contents to append to fileContents * @param {string} path - An absolute path of a file whose name to use in the source map. * The file need not actually exist if the code in singleContents is generated. * @param {{out: ?string, baseUrl: ?string}} config - The build configuration object. * @param {?{_buildPath: ?string}} module - An object with module information. * @param {?SourceMapGenerator} sourceMapGenerator - An instance of Mozilla's SourceMapGenerator, * or null if no source map is being generated. * @returns {string} fileContents with singleContents appended */ function appendToFileContents(fileContents, singleContents, path, config, module, sourceMapGenerator) { var refPath, sourceMapPath, resourcePath, pluginId, sourceMapLineNumber, lineCount, parts, i; if (sourceMapGenerator) { if (config.out) { refPath = config.baseUrl; } else if (module && module._buildPath) { refPath = module._buildPath; } else { refPath = ""; } parts = path.split('!'); if (parts.length === 1) { //Not a plugin resource, fix the path sourceMapPath = build.makeRelativeFilePath(refPath, path); } else { //Plugin resource. If it looks like just a plugin //followed by a module ID, pull off the plugin //and put it at the end of the name, otherwise //just leave it alone. pluginId = parts.shift(); resourcePath = parts.join('!'); if (resourceIsModuleIdRegExp.test(resourcePath)) { sourceMapPath = build.makeRelativeFilePath(refPath, require.toUrl(resourcePath)) + '!' + pluginId; } else { sourceMapPath = path; } } sourceMapLineNumber = fileContents.split('\n').length - 1; lineCount = singleContents.split('\n').length; for (i = 1; i <= lineCount; i += 1) { sourceMapGenerator.addMapping({ generated: { line: sourceMapLineNumber + i, column: 0 }, original: { line: i, column: 0 }, source: sourceMapPath }); } //Store the content of the original in the source //map since other transforms later like minification //can mess up translating back to the original //source. sourceMapGenerator.setSourceContent(sourceMapPath, singleContents); } fileContents += singleContents; return fileContents; } /** * Main API entry point into the build. The args argument can either be * an array of arguments (like the onese passed on a command-line), * or it can be a JavaScript object that has the format of a build profile * file. * * If it is an object, then in addition to the normal properties allowed in * a build profile file, the object should contain one other property: * * The object could also contain a "buildFile" property, which is a string * that is the file path to a build profile that contains the rest * of the build profile directives. * * This function does not return a status, it should throw an error if * there is a problem completing the build. */ build = function (args) { var buildFile, cmdConfig, errorMsg, errorStack, stackMatch, errorTree, i, j, errorMod, stackRegExp = /( {4}at[^\n]+)\n/, standardIndent = ' '; return prim().start(function () { if (!args || lang.isArray(args)) { if (!args || args.length < 1) { logger.error("build.js buildProfile.js\n" + "where buildProfile.js is the name of the build file (see example.build.js for hints on how to make a build file)."); return undefined; } //Next args can include a build file path as well as other build args. //build file path comes first. If it does not contain an = then it is //a build file path. Otherwise, just all build args. if (args[0].indexOf("=") === -1) { buildFile = args[0]; args.splice(0, 1); } //Remaining args are options to the build cmdConfig = build.convertArrayToObject(args); cmdConfig.buildFile = buildFile; } else { cmdConfig = args; } return build._run(cmdConfig); }).then(null, function (e) { var err; errorMsg = e.toString(); errorTree = e.moduleTree; stackMatch = stackRegExp.exec(errorMsg); if (stackMatch) { errorMsg += errorMsg.substring(0, stackMatch.index + stackMatch[0].length + 1); } //If a module tree that shows what module triggered the error, //print it out. if (errorTree && errorTree.length > 0) { errorMsg += '\nIn module tree:\n'; for (i = errorTree.length - 1; i > -1; i--) { errorMod = errorTree[i]; if (errorMod) { for (j = errorTree.length - i; j > -1; j--) { errorMsg += standardIndent; } errorMsg += errorMod + '\n'; } } logger.error(errorMsg); } errorStack = e.stack; if (typeof args === 'string' && args.indexOf('stacktrace=true') !== -1) { errorMsg += '\n' + errorStack; } else { if (!stackMatch && errorStack) { //Just trim out the first "at" in the stack. stackMatch = stackRegExp.exec(errorStack); if (stackMatch) { errorMsg += '\n' + stackMatch[0] || ''; } } } err = new Error(errorMsg); err.originalError = e; throw err; }); }; build._run = function (cmdConfig) { var buildPaths, fileName, fileNames, paths, i, baseConfig, config, modules, srcPath, buildContext, destPath, moduleMap, parentModuleMap, context, resources, resource, plugin, fileContents, pluginProcessed = {}, buildFileContents = "", pluginCollector = {}; return prim().start(function () { var prop; //Can now run the patches to require.js to allow it to be used for //build generation. Do it here instead of at the top of the module //because we want normal require behavior to load the build tool //then want to switch to build mode. requirePatch(); config = build.createConfig(cmdConfig); paths = config.paths; //Remove the previous build dir, in case it contains source transforms, //like the ones done with onBuildRead and onBuildWrite. if (config.dir && !config.keepBuildDir && file.exists(config.dir)) { file.deleteFile(config.dir); } if (!config.out && !config.cssIn) { //This is not just a one-off file build but a full build profile, with //lots of files to process. //First copy all the baseUrl content file.copyDir((config.appDir || config.baseUrl), config.dir, /\w/, true); //Adjust baseUrl if config.appDir is in play, and set up build output paths. buildPaths = {}; if (config.appDir) { //All the paths should be inside the appDir, so just adjust //the paths to use the dirBaseUrl for (prop in paths) { if (hasProp(paths, prop)) { buildPaths[prop] = paths[prop].replace(config.appDir, config.dir); } } } else { //If no appDir, then make sure to copy the other paths to this directory. for (prop in paths) { if (hasProp(paths, prop)) { //Set up build path for each path prefix, but only do so //if the path falls out of the current baseUrl if (paths[prop].indexOf(config.baseUrl) === 0) { buildPaths[prop] = paths[prop].replace(config.baseUrl, config.dirBaseUrl); } else { buildPaths[prop] = paths[prop] === 'empty:' ? 'empty:' : prop; //Make sure source path is fully formed with baseUrl, //if it is a relative URL. srcPath = paths[prop]; if (srcPath.indexOf('/') !== 0 && srcPath.indexOf(':') === -1) { srcPath = config.baseUrl + srcPath; } destPath = config.dirBaseUrl + buildPaths[prop]; //Skip empty: paths if (srcPath !== 'empty:') { //If the srcPath is a directory, copy the whole directory. if (file.exists(srcPath) && file.isDirectory(srcPath)) { //Copy files to build area. Copy all files (the /\w/ regexp) file.copyDir(srcPath, destPath, /\w/, true); } else { //Try a .js extension srcPath += '.js'; destPath += '.js'; file.copyFile(srcPath, destPath); } } } } } } } //Figure out source file location for each module layer. Do this by seeding require //with source area configuration. This is needed so that later the module layers //can be manually copied over to the source area, since the build may be //require multiple times and the above copyDir call only copies newer files. require({ baseUrl: config.baseUrl, paths: paths, packagePaths: config.packagePaths, packages: config.packages }); buildContext = require.s.contexts._; modules = config.modules; if (modules) { modules.forEach(function (module) { if (module.name) { module._sourcePath = buildContext.nameToUrl(module.name); //If the module does not exist, and this is not a "new" module layer, //as indicated by a true "create" property on the module, and //it is not a plugin-loaded resource, and there is no //'rawText' containing the module's source then throw an error. if (!file.exists(module._sourcePath) && !module.create && module.name.indexOf('!') === -1 && (!config.rawText || !lang.hasProp(config.rawText, module.name))) { throw new Error("ERROR: module path does not exist: " + module._sourcePath + " for module named: " + module.name + ". Path is relative to: " + file.absPath('.')); } } }); } if (config.out) { //Just set up the _buildPath for the module layer. require(config); if (!config.cssIn) { config.modules[0]._buildPath = typeof config.out === 'function' ? 'FUNCTION' : config.out; } } else if (!config.cssIn) { //Now set up the config for require to use the build area, and calculate the //build file locations. Pass along any config info too. baseConfig = { baseUrl: config.dirBaseUrl, paths: buildPaths }; lang.mixin(baseConfig, config); require(baseConfig); if (modules) { modules.forEach(function (module) { if (module.name) { module._buildPath = buildContext.nameToUrl(module.name, null); //If buildPath and sourcePath are the same, throw since this //would result in modifying source. This condition can happen //with some more tricky paths: config and appDir/baseUrl //setting, which is a sign of incorrect config. if (module._buildPath === module._sourcePath && !config.allowSourceOverwrites) { throw new Error('Module ID \'' + module.name + '\' has a source path that is same as output path: ' + module._sourcePath + '. Stopping, config is malformed.'); } // Copy the file, but only if it is not provided in rawText. if (!module.create && (!config.rawText || !lang.hasProp(config.rawText, module.name))) { file.copyFile(module._sourcePath, module._buildPath); } } }); } } //Run CSS optimizations before doing JS module tracing, to allow //things like text loader plugins loading CSS to get the optimized //CSS. if (config.optimizeCss && config.optimizeCss !== "none" && config.dir) { buildFileContents += optimize.css(config.dir, config); } }).then(function() { baseConfig = copyConfig(require.s.contexts._.config); }).then(function () { var actions = []; if (modules) { actions = modules.map(function (module, i) { return function () { //Save off buildPath to module index in a hash for quicker //lookup later. config._buildPathToModuleIndex[file.normalize(module._buildPath)] = i; //Call require to calculate dependencies. return build.traceDependencies(module, config, baseConfig) .then(function (layer) { module.layer = layer; }); }; }); return prim.serial(actions); } }).then(function () { var actions; if (modules) { //Now build up shadow layers for anything that should be excluded. //Do this after tracing dependencies for each module, in case one //of those modules end up being one of the excluded values. actions = modules.map(function (module) { return function () { if (module.exclude) { module.excludeLayers = []; return prim.serial(module.exclude.map(function (exclude, i) { return function () { //See if it is already in the list of modules. //If not trace dependencies for it. var found = build.findBuildModule(exclude, modules); if (found) { module.excludeLayers[i] = found; } else { return build.traceDependencies({name: exclude}, config, baseConfig) .then(function (layer) { module.excludeLayers[i] = { layer: layer }; }); } }; })); } }; }); return prim.serial(actions); } }).then(function () { if (modules) { return prim.serial(modules.map(function (module) { return function () { if (module.exclude) { //module.exclude is an array of module names. For each one, //get the nested dependencies for it via a matching entry //in the module.excludeLayers array. module.exclude.forEach(function (excludeModule, i) { var excludeLayer = module.excludeLayers[i].layer, map = excludeLayer.buildFileToModule; excludeLayer.buildFilePaths.forEach(function(filePath){ build.removeModulePath(map[filePath], filePath, module.layer); }); }); } if (module.excludeShallow) { //module.excludeShallow is an array of module names. //shallow exclusions are just that module itself, and not //its nested dependencies. module.excludeShallow.forEach(function (excludeShallowModule) { var path = getOwn(module.layer.buildPathMap, excludeShallowModule); if (path) { build.removeModulePath(excludeShallowModule, path, module.layer); } }); } //Flatten them and collect the build output for each module. return build.flattenModule(module, module.layer, config).then(function (builtModule) { var finalText, baseName; //Save it to a temp file for now, in case there are other layers that //contain optimized content that should not be included in later //layer optimizations. See issue #56. if (module._buildPath === 'FUNCTION') { module._buildText = builtModule.text; module._buildSourceMap = builtModule.sourceMap; } else { finalText = builtModule.text; if (builtModule.sourceMap) { baseName = module._buildPath.split('/'); baseName = baseName.pop(); finalText += '\n//# sourceMappingURL=' + baseName + '.map'; file.saveUtf8File(module._buildPath + '.map', builtModule.sourceMap); } file.saveUtf8File(module._buildPath + '-temp', finalText); } buildFileContents += builtModule.buildText; }); }; })); } }).then(function () { var moduleName, outOrigSourceMap, bundlesConfig = {}, bundlesConfigOutFile = config.bundlesConfigOutFile; if (modules) { //Now move the build layers to their final position. modules.forEach(function (module) { var entryConfig, finalPath = module._buildPath; if (finalPath !== 'FUNCTION') { if (file.exists(finalPath)) { file.deleteFile(finalPath); } file.renameFile(finalPath + '-temp', finalPath); //If bundles config should be written out, scan the //built file for module IDs. Favor doing this reparse //since tracking the IDs as the file is built has some //edge cases around files that had more than one ID in //them already, and likely loader plugin-written contents. if (bundlesConfigOutFile) { entryConfig = bundlesConfig[module.name] = []; var bundleContents = file.readFile(finalPath); var excludeMap = {}; excludeMap[module.name] = true; var parsedIds = parse.getAllNamedDefines(bundleContents, excludeMap); entryConfig.push.apply(entryConfig, parsedIds); } //And finally, if removeCombined is specified, remove //any of the files that were used in this layer. //Be sure not to remove other build layers. if (config.removeCombined && !config.out) { module.layer.buildFilePaths.forEach(function (path) { var isLayer = modules.some(function (mod) { return mod._buildPath === path; }), relPath = build.makeRelativeFilePath(config.dir, path); if (file.exists(path) && // not a build layer target !isLayer && // not outside the build directory relPath.indexOf('..') !== 0) { file.deleteFile(path); } }); } } //Signal layer is done if (config.onModuleBundleComplete) { config.onModuleBundleComplete(module.onCompleteData); } }); //Write out bundles config, if it is wanted. if (bundlesConfigOutFile) { var text = file.readFile(bundlesConfigOutFile); text = transform.modifyConfig(text, function (config) { if (!config.bundles) { config.bundles = {}; } lang.eachProp(bundlesConfig, function (value, prop) { config.bundles[prop] = value; }); return config; }); file.saveUtf8File(bundlesConfigOutFile, text); } } //If removeCombined in play, remove any empty directories that //may now exist because of its use if (config.removeCombined && !config.out && config.dir) { file.deleteEmptyDirs(config.dir); } //Do other optimizations. if (config.out && !config.cssIn) { //Just need to worry about one JS file. fileName = config.modules[0]._buildPath; if (fileName === 'FUNCTION') { outOrigSourceMap = config.modules[0]._buildSourceMap; config._buildSourceMap = outOrigSourceMap; config.modules[0]._buildText = optimize.js((config.modules[0].name || config.modules[0].include[0] || fileName) + '.build.js', config.modules[0]._buildText, null, config); if (config._buildSourceMap && config._buildSourceMap !== outOrigSourceMap) { config.modules[0]._buildSourceMap = config._buildSourceMap; config._buildSourceMap = null; } } else { optimize.jsFile(fileName, null, fileName, config); } } else if (!config.cssIn) { //Normal optimizations across modules. //JS optimizations. fileNames = file.getFilteredFileList(config.dir, /\.js$/, true); fileNames.forEach(function (fileName) { var cfg, override, moduleIndex; //Generate the module name from the config.dir root. moduleName = fileName.replace(config.dir, ''); //Get rid of the extension moduleName = moduleName.substring(0, moduleName.length - 3); //If there is an override for a specific layer build module, //and this file is that module, mix in the override for use //by optimize.jsFile. moduleIndex = getOwn(config._buildPathToModuleIndex, fileName); //Normalize, since getOwn could have returned undefined moduleIndex = moduleIndex === 0 || moduleIndex > 0 ? moduleIndex : -1; //Try to avoid extra work if the other files do not need to //be read. Build layers should be processed at the very //least for optimization. if (moduleIndex > -1 || !config.skipDirOptimize || config.normalizeDirDefines === "all" || config.cjsTranslate) { //Convert the file to transport format, but without a name //inserted (by passing null for moduleName) since the files are //standalone, one module per file. fileContents = file.readFile(fileName); //For builds, if wanting cjs translation, do it now, so that //the individual modules can be loaded cross domain via //plain script tags. if (config.cjsTranslate && (!config.shim || !lang.hasProp(config.shim, moduleName))) { fileContents = commonJs.convert(fileName, fileContents); } if (moduleIndex === -1) { if (config.onBuildRead) { fileContents = config.onBuildRead(moduleName, fileName, fileContents); } //Only do transport normalization if this is not a build //layer (since it was already normalized) and if //normalizeDirDefines indicated all should be done. if (config.normalizeDirDefines === "all") { fileContents = build.toTransport(config.namespace, null, fileName, fileContents); } if (config.onBuildWrite) { fileContents = config.onBuildWrite(moduleName, fileName, fileContents); } } override = moduleIndex > -1 ? config.modules[moduleIndex].override : null; if (override) { cfg = build.createOverrideConfig(config, override); } else { cfg = config; } if (moduleIndex > -1 || !config.skipDirOptimize) { optimize.jsFile(fileName, fileContents, fileName, cfg, pluginCollector); } } }); //Normalize all the plugin resources. context = require.s.contexts._; for (moduleName in pluginCollector) { if (hasProp(pluginCollector, moduleName)) { parentModuleMap = context.makeModuleMap(moduleName); resources = pluginCollector[moduleName]; for (i = 0; i < resources.length; i++) { resource = resources[i]; moduleMap = context.makeModuleMap(resource, parentModuleMap); if (falseProp(context.plugins, moduleMap.prefix)) { //Set the value in context.plugins so it //will be evaluated as a full plugin. context.plugins[moduleMap.prefix] = true; //Do not bother if the plugin is not available. if (!file.exists(require.toUrl(moduleMap.prefix + '.js'))) { continue; } //Rely on the require in the build environment //to be synchronous context.require([moduleMap.prefix]); //Now that the plugin is loaded, redo the moduleMap //since the plugin will need to normalize part of the path. moduleMap = context.makeModuleMap(resource, parentModuleMap); } //Only bother with plugin resources that can be handled //processed by the plugin, via support of the writeFile //method. if (falseProp(pluginProcessed, moduleMap.id)) { //Only do the work if the plugin was really loaded. //Using an internal access because the file may //not really be loaded. plugin = getOwn(context.defined, moduleMap.prefix); if (plugin && plugin.writeFile) { plugin.writeFile( moduleMap.prefix, moduleMap.name, require, makeWriteFile( config.namespace ), context.config ); } pluginProcessed[moduleMap.id] = true; } } } } //console.log('PLUGIN COLLECTOR: ' + JSON.stringify(pluginCollector, null, " ")); //All module layers are done, write out the build.txt file. if (config.writeBuildTxt) { file.saveUtf8File(config.dir + "build.txt", buildFileContents); } } //If just have one CSS file to optimize, do that here. if (config.cssIn) { buildFileContents += optimize.cssFile(config.cssIn, config.out, config).buildText; } if (typeof config.out === 'function') { config.out(config.modules[0]._buildText, config.modules[0]._buildSourceMap); } //Print out what was built into which layers. if (buildFileContents) { logger.info(buildFileContents); return buildFileContents; } return ''; }); }; /** * Converts command line args like "paths.foo=../some/path" * result.paths = { foo: '../some/path' } where prop = paths, * name = paths.foo and value = ../some/path, so it assumes the * name=value splitting has already happened. */ function stringDotToObj(result, name, value) { var parts = name.split('.'); parts.forEach(function (prop, i) { if (i === parts.length - 1) { result[prop] = value; } else { if (falseProp(result, prop)) { result[prop] = {}; } result = result[prop]; } }); } build.objProps = { paths: true, wrap: true, pragmas: true, pragmasOnSave: true, has: true, hasOnSave: true, uglify: true, uglify2: true, closure: true, map: true, throwWhen: true, rawText: true }; build.hasDotPropMatch = function (prop) { var dotProp, index = prop.indexOf('.'); if (index !== -1) { dotProp = prop.substring(0, index); return hasProp(build.objProps, dotProp); } return false; }; /** * Converts an array that has String members of "name=value" * into an object, where the properties on the object are the names in the array. * Also converts the strings "true" and "false" to booleans for the values. * member name/value pairs, and converts some comma-separated lists into * arrays. * @param {Array} ary */ build.convertArrayToObject = function (ary) { var result = {}, i, separatorIndex, prop, value, needArray = { "include": true, "exclude": true, "excludeShallow": true, "insertRequire": true, "stubModules": true, "deps": true, "mainConfigFile": true, "wrap.startFile": true, "wrap.endFile": true }; for (i = 0; i < ary.length; i++) { separatorIndex = ary[i].indexOf("="); if (separatorIndex === -1) { throw "Malformed name/value pair: [" + ary[i] + "]. Format should be name=value"; } value = ary[i].substring(separatorIndex + 1, ary[i].length); if (value === "true") { value = true; } else if (value === "false") { value = false; } prop = ary[i].substring(0, separatorIndex); //Convert to array if necessary if (getOwn(needArray, prop)) { value = value.split(","); } if (build.hasDotPropMatch(prop)) { stringDotToObj(result, prop, value); } else { result[prop] = value; } } return result; //Object }; build.makeAbsPath = function (path, absFilePath) { if (!absFilePath) { return path; } //Add abspath if necessary. If path starts with a slash or has a colon, //then already is an abolute path. if (path.indexOf('/') !== 0 && path.indexOf(':') === -1) { path = absFilePath + (absFilePath.charAt(absFilePath.length - 1) === '/' ? '' : '/') + path; path = file.normalize(path); } return path.replace(lang.backSlashRegExp, '/'); }; build.makeAbsObject = function (props, obj, absFilePath) { var i, prop; if (obj) { for (i = 0; i < props.length; i++) { prop = props[i]; if (hasProp(obj, prop) && typeof obj[prop] === 'string') { obj[prop] = build.makeAbsPath(obj[prop], absFilePath); } } } }; /** * For any path in a possible config, make it absolute relative * to the absFilePath passed in. */ build.makeAbsConfig = function (config, absFilePath) { var props, prop, i; props = ["appDir", "dir", "baseUrl"]; for (i = 0; i < props.length; i++) { prop = props[i]; if (getOwn(config, prop)) { //Add abspath if necessary, make sure these paths end in //slashes if (prop === "baseUrl") { config.originalBaseUrl = config.baseUrl; if (config.appDir) { //If baseUrl with an appDir, the baseUrl is relative to //the appDir, *not* the absFilePath. appDir and dir are //made absolute before baseUrl, so this will work. config.baseUrl = build.makeAbsPath(config.originalBaseUrl, config.appDir); } else { //The dir output baseUrl is same as regular baseUrl, both //relative to the absFilePath. config.baseUrl = build.makeAbsPath(config[prop], absFilePath); } } else { config[prop] = build.makeAbsPath(config[prop], absFilePath); } config[prop] = endsWithSlash(config[prop]); } } build.makeAbsObject((config.out === "stdout" ? ["cssIn"] : ["out", "cssIn"]), config, absFilePath); build.makeAbsObject(["startFile", "endFile"], config.wrap, absFilePath); build.makeAbsObject(["externExportsPath"], config.closure, absFilePath); }; /** * Creates a relative path to targetPath from refPath. * Only deals with file paths, not folders. If folders, * make sure paths end in a trailing '/'. */ build.makeRelativeFilePath = function (refPath, targetPath) { var i, dotLength, finalParts, length, targetParts, targetName, refParts = refPath.split('/'), hasEndSlash = endsWithSlashRegExp.test(targetPath), dotParts = []; targetPath = file.normalize(targetPath); if (hasEndSlash && !endsWithSlashRegExp.test(targetPath)) { targetPath += '/'; } targetParts = targetPath.split('/'); //Pull off file name targetName = targetParts.pop(); //Also pop off the ref file name to make the matches against //targetParts equivalent. refParts.pop(); length = refParts.length; for (i = 0; i < length; i += 1) { if (refParts[i] !== targetParts[i]) { break; } } //Now i is the index in which they diverge. finalParts = targetParts.slice(i); dotLength = length - i; for (i = 0; i > -1 && i < dotLength; i += 1) { dotParts.push('..'); } return dotParts.join('/') + (dotParts.length ? '/' : '') + finalParts.join('/') + (finalParts.length ? '/' : '') + targetName; }; build.nestedMix = { paths: true, has: true, hasOnSave: true, pragmas: true, pragmasOnSave: true }; /** * Mixes additional source config into target config, and merges some * nested config, like paths, correctly. */ function mixConfig(target, source, skipArrays) { var prop, value, isArray, targetValue; for (prop in source) { if (hasProp(source, prop)) { //If the value of the property is a plain object, then //allow a one-level-deep mixing of it. value = source[prop]; isArray = lang.isArray(value); if (typeof value === 'object' && value && !isArray && !lang.isFunction(value) && !lang.isRegExp(value)) { // TODO: need to generalize this work, maybe also reuse // the work done in requirejs configure, perhaps move to // just a deep copy/merge overall. However, given the // amount of observable change, wait for a dot release. // This change is in relation to #645 if (prop === 'map') { if (!target.map) { target.map = {}; } lang.deepMix(target.map, source.map); } else { target[prop] = lang.mixin({}, target[prop], value, true); } } else if (isArray) { if (!skipArrays) { // Some config, like packages, are arrays. For those, // just merge the results. targetValue = target[prop]; if (lang.isArray(targetValue)) { target[prop] = targetValue.concat(value); } else { target[prop] = value; } } } else { target[prop] = value; } } } //Set up log level since it can affect if errors are thrown //or caught and passed to errbacks while doing config setup. if (lang.hasProp(target, 'logLevel')) { logger.logLevel(target.logLevel); } } /** * Converts a wrap.startFile or endFile to be start/end as a string. * the startFile/endFile values can be arrays. */ function flattenWrapFile(config, keyName, absFilePath) { var wrap = config.wrap, keyFileName = keyName + 'File', keyMapName = '__' + keyName + 'Map'; if (typeof wrap[keyName] !== 'string' && wrap[keyFileName]) { wrap[keyName] = ''; if (typeof wrap[keyFileName] === 'string') { wrap[keyFileName] = [wrap[keyFileName]]; } wrap[keyMapName] = []; wrap[keyFileName].forEach(function (fileName) { var absPath = build.makeAbsPath(fileName, absFilePath), fileText = endsWithNewLine(file.readFile(absPath)); wrap[keyMapName].push(function (fileContents, cfg, sourceMapGenerator) { return appendToFileContents(fileContents, fileText, absPath, cfg, null, sourceMapGenerator); }); wrap[keyName] += fileText; }); } else if (wrap[keyName] === null || wrap[keyName] === undefined) { //Allow missing one, just set to empty string. wrap[keyName] = ''; } else if (typeof wrap[keyName] === 'string') { wrap[keyName] = endsWithNewLine(wrap[keyName]); wrap[keyMapName] = [ function (fileContents, cfg, sourceMapGenerator) { var absPath = build.makeAbsPath("config-wrap-" + keyName + "-default.js", absFilePath); return appendToFileContents(fileContents, wrap[keyName], absPath, cfg, null, sourceMapGenerator); } ]; } else { throw new Error('wrap.' + keyName + ' or wrap.' + keyFileName + ' malformed'); } } function normalizeWrapConfig(config, absFilePath) { //Get any wrap text. try { if (config.wrap) { if (config.wrap === true) { //Use default values. config.wrap = { start: '(function () {\n', end: '}());', __startMap: [ function (fileContents, cfg, sourceMapGenerator) { return appendToFileContents(fileContents, "(function () {\n", build.makeAbsPath("config-wrap-start-default.js", absFilePath), cfg, null, sourceMapGenerator); } ], __endMap: [ function (fileContents, cfg, sourceMapGenerator) { return appendToFileContents(fileContents, "}());", build.makeAbsPath("config-wrap-end-default.js", absFilePath), cfg, null, sourceMapGenerator); } ] }; } else { flattenWrapFile(config, 'start', absFilePath); flattenWrapFile(config, 'end', absFilePath); } } } catch (wrapError) { throw new Error('Malformed wrap config: ' + wrapError.toString()); } } /** * Creates a config object for an optimization build. * It will also read the build profile if it is available, to create * the configuration. * * @param {Object} cfg config options that take priority * over defaults and ones in the build file. These options could * be from a command line, for instance. * * @param {Object} the created config object. */ build.createConfig = function (cfg) { /*jslint evil: true */ var buildFileContents, buildFileConfig, mainConfig, mainConfigFile, mainConfigPath, buildFile, absFilePath, config = {}, buildBaseConfig = makeBuildBaseConfig(); //Make sure all paths are relative to current directory. absFilePath = file.absPath('.'); build.makeAbsConfig(cfg, absFilePath); build.makeAbsConfig(buildBaseConfig, absFilePath); lang.mixin(config, buildBaseConfig); lang.mixin(config, cfg, true); //Set up log level early since it can affect if errors are thrown //or caught and passed to errbacks, even while constructing config. if (lang.hasProp(config, 'logLevel')) { logger.logLevel(config.logLevel); } if (config.buildFile) { //A build file exists, load it to get more config. buildFile = file.absPath(config.buildFile); //Find the build file, and make sure it exists, if this is a build //that has a build profile, and not just command line args with an in=path if (!file.exists(buildFile)) { throw new Error("ERROR: build file does not exist: " + buildFile); } absFilePath = config.baseUrl = file.absPath(file.parent(buildFile)); //Load build file options. buildFileContents = file.readFile(buildFile); try { //Be a bit lenient in the file ending in a ; or ending with //a //# sourceMappingUrl comment, mostly for compiled languages //that create a config, like typescript. buildFileContents = buildFileContents .replace(/\/\/\#[^\n\r]+[\n\r]*$/, '') .trim() .replace(/;$/, ''); buildFileConfig = eval("(" + buildFileContents + ")"); build.makeAbsConfig(buildFileConfig, absFilePath); //Mix in the config now so that items in mainConfigFile can //be resolved relative to them if necessary, like if appDir //is set here, but the baseUrl is in mainConfigFile. Will //re-mix in the same build config later after mainConfigFile //is processed, since build config should take priority. mixConfig(config, buildFileConfig); } catch (e) { throw new Error("Build file " + buildFile + " is malformed: " + e); } } mainConfigFile = config.mainConfigFile || (buildFileConfig && buildFileConfig.mainConfigFile); if (mainConfigFile) { if (typeof mainConfigFile === 'string') { mainConfigFile = [mainConfigFile]; } mainConfigFile.forEach(function (configFile) { configFile = build.makeAbsPath(configFile, absFilePath); if (!file.exists(configFile)) { throw new Error(configFile + ' does not exist.'); } try { mainConfig = parse.findConfig(file.readFile(configFile)).config; } catch (configError) { throw new Error('The config in mainConfigFile ' + configFile + ' cannot be used because it cannot be evaluated' + ' correctly while running in the optimizer. Try only' + ' using a config that is also valid JSON, or do not use' + ' mainConfigFile and instead copy the config values needed' + ' into a build file or command line arguments given to the optimizer.\n' + 'Source error from parsing: ' + configFile + ': ' + configError); } if (mainConfig) { mainConfigPath = configFile.substring(0, configFile.lastIndexOf('/')); //Add in some existing config, like appDir, since they can be //used inside the configFile -- paths and baseUrl are //relative to them. if (config.appDir && !mainConfig.appDir) { mainConfig.appDir = config.appDir; } //If no baseUrl, then use the directory holding the main config. if (!mainConfig.baseUrl) { mainConfig.baseUrl = mainConfigPath; } build.makeAbsConfig(mainConfig, mainConfigPath); mixConfig(config, mainConfig); } }); } //Mix in build file config, but only after mainConfig has been mixed in. //Since this is a re-application, skip array merging. if (buildFileConfig) { mixConfig(config, buildFileConfig, true); } //Re-apply the override config values. Command line //args should take precedence over build file values. //Since this is a re-application, skip array merging. mixConfig(config, cfg, true); //Fix paths to full paths so that they can be adjusted consistently //lately to be in the output area. lang.eachProp(config.paths, function (value, prop) { if (lang.isArray(value)) { throw new Error('paths fallback not supported in optimizer. ' + 'Please provide a build config path override ' + 'for ' + prop); } config.paths[prop] = build.makeAbsPath(value, config.baseUrl); }); //Set final output dir if (hasProp(config, "baseUrl")) { if (config.appDir) { if (!config.originalBaseUrl) { throw new Error('Please set a baseUrl in the build config'); } config.dirBaseUrl = build.makeAbsPath(config.originalBaseUrl, config.dir); } else { config.dirBaseUrl = config.dir || config.baseUrl; } //Make sure dirBaseUrl ends in a slash, since it is //concatenated with other strings. config.dirBaseUrl = endsWithSlash(config.dirBaseUrl); } if (config.bundlesConfigOutFile) { if (!config.dir) { throw new Error('bundlesConfigOutFile can only be used with optimizations ' + 'that use "dir".'); } config.bundlesConfigOutFile = build.makeAbsPath(config.bundlesConfigOutFile, config.dir); } //If out=stdout, write output to STDOUT instead of a file. if (config.out && config.out === 'stdout') { config.out = function (content) { var e = env.get(); if (e === 'rhino') { var out = new java.io.PrintStream(java.lang.System.out, true, 'UTF-8'); out.println(content); } else if (e === 'node') { process.stdout.write(content, 'utf8'); } else { console.log(content); } }; } //Check for errors in config if (config.main) { throw new Error('"main" passed as an option, but the ' + 'supported option is called "name".'); } if (config.out && !config.name && !config.modules && !config.include && !config.cssIn) { throw new Error('Missing either a "name", "include" or "modules" ' + 'option'); } if (config.cssIn) { if (config.dir || config.appDir) { throw new Error('cssIn is only for the output of single file ' + 'CSS optimizations and is not compatible with "dir" or "appDir" configuration.'); } if (!config.out) { throw new Error('"out" option missing.'); } } if (!config.cssIn && !config.baseUrl) { //Just use the current directory as the baseUrl config.baseUrl = './'; } if (!config.out && !config.dir) { throw new Error('Missing either an "out" or "dir" config value. ' + 'If using "appDir" for a full project optimization, ' + 'use "dir". If you want to optimize to one file, ' + 'use "out".'); } if (config.appDir && config.out) { throw new Error('"appDir" is not compatible with "out". Use "dir" ' + 'instead. appDir is used to copy whole projects, ' + 'where "out" with "baseUrl" is used to just ' + 'optimize to one file.'); } if (config.out && config.dir) { throw new Error('The "out" and "dir" options are incompatible.' + ' Use "out" if you are targeting a single file' + ' for optimization, and "dir" if you want the appDir' + ' or baseUrl directories optimized.'); } if (config.dir) { // Make sure the output dir is not set to a parent of the // source dir or the same dir, as it will result in source // code deletion. if (!config.allowSourceOverwrites && (config.dir === config.baseUrl || config.dir === config.appDir || (config.baseUrl && build.makeRelativeFilePath(config.dir, config.baseUrl).indexOf('..') !== 0) || (config.appDir && build.makeRelativeFilePath(config.dir, config.appDir).indexOf('..') !== 0))) { throw new Error('"dir" is set to a parent or same directory as' + ' "appDir" or "baseUrl". This can result in' + ' the deletion of source code. Stopping. If' + ' you want to allow possible overwriting of' + ' source code, set "allowSourceOverwrites"' + ' to true in the build config, but do so at' + ' your own risk. In that case, you may want' + ' to also set "keepBuildDir" to true.'); } } if (config.insertRequire && !lang.isArray(config.insertRequire)) { throw new Error('insertRequire should be a list of module IDs' + ' to insert in to a require([]) call.'); } //Support older configs with uglify2 settings, but now that uglify1 has //been removed, just translate it to 'uglify' settings. if (config.optimize === 'uglify2') { config.optimize = 'uglify'; } if (config.uglify2) { config.uglify = config.uglify2; delete config.uglify2; } if (config.generateSourceMaps) { if (config.preserveLicenseComments && !(config.optimize === 'none' || config.optimize === 'uglify')) { throw new Error('Cannot use preserveLicenseComments and ' + 'generateSourceMaps together, unless optimize is set ' + 'to \'uglify\'. Either explicitly set preserveLicenseComments ' + 'to false (default is true) or turn off generateSourceMaps. ' + 'If you want source maps with license comments, see: ' + 'http://requirejs.org/docs/errors.html#sourcemapcomments'); } else if (config.optimize !== 'none' && config.optimize !== 'closure' && config.optimize !== 'uglify') { //Allow optimize: none to pass, since it is useful when toggling //minification on and off to debug something, and it implicitly //works, since it does not need a source map. throw new Error('optimize: "' + config.optimize + '" does not support generateSourceMaps.'); } } if ((config.name || config.include) && !config.modules) { //Just need to build one file, but may be part of a whole appDir/ //baseUrl copy, but specified on the command line, so cannot do //the modules array setup. So create a modules section in that //case. config.modules = [ { name: config.name, out: config.out, create: config.create, include: config.include, exclude: config.exclude, excludeShallow: config.excludeShallow, insertRequire: config.insertRequire, stubModules: config.stubModules } ]; delete config.stubModules; } else if (config.modules && config.out) { throw new Error('If the "modules" option is used, then there ' + 'should be a "dir" option set and "out" should ' + 'not be used since "out" is only for single file ' + 'optimization output.'); } else if (config.modules && config.name) { throw new Error('"name" and "modules" options are incompatible. ' + 'Either use "name" if doing a single file ' + 'optimization, or "modules" if you want to target ' + 'more than one file for optimization.'); } if (config.out && !config.cssIn) { //Just one file to optimize. //Does not have a build file, so set up some defaults. //Optimizing CSS should not be allowed, unless explicitly //asked for on command line. In that case the only task is //to optimize a CSS file. if (!cfg.optimizeCss) { config.optimizeCss = "none"; } } //Normalize cssPrefix if (config.cssPrefix) { //Make sure cssPrefix ends in a slash config.cssPrefix = endsWithSlash(config.cssPrefix); } else { config.cssPrefix = ''; } //Cycle through modules and normalize if (config.modules && config.modules.length) { config.modules.forEach(function (mod) { if (lang.isArray(mod) || typeof mod === 'string' || !mod) { throw new Error('modules config item is malformed: it should' + ' be an object with a \'name\' property.'); } //Combine any local stubModules with global values. if (config.stubModules) { mod.stubModules = config.stubModules.concat(mod.stubModules || []); } //Create a hash lookup for the stubModules config to make lookup //cheaper later. if (mod.stubModules) { mod.stubModules._byName = {}; mod.stubModules.forEach(function (id) { mod.stubModules._byName[id] = true; }); } // Legacy command support, which allowed a single string ID // for include. if (typeof mod.include === 'string') { mod.include = [mod.include]; } //Allow wrap config in overrides, but normalize it. if (mod.override) { normalizeWrapConfig(mod.override, absFilePath); } }); } normalizeWrapConfig(config, absFilePath); //Do final input verification if (config.context) { throw new Error('The build argument "context" is not supported' + ' in a build. It should only be used in web' + ' pages.'); } //Set up normalizeDirDefines. If not explicitly set, if optimize "none", //set to "skip" otherwise set to "all". if (!hasProp(config, 'normalizeDirDefines')) { if (config.optimize === 'none' || config.skipDirOptimize) { config.normalizeDirDefines = 'skip'; } else { config.normalizeDirDefines = 'all'; } } //Set file.fileExclusionRegExp if desired if (hasProp(config, 'fileExclusionRegExp')) { if (typeof config.fileExclusionRegExp === "string") { file.exclusionRegExp = new RegExp(config.fileExclusionRegExp); } else { file.exclusionRegExp = config.fileExclusionRegExp; } } else if (hasProp(config, 'dirExclusionRegExp')) { //Set file.dirExclusionRegExp if desired, this is the old //name for fileExclusionRegExp before 1.0.2. Support for backwards //compatibility file.exclusionRegExp = config.dirExclusionRegExp; } //Track the deps, but in a different key, so that they are not loaded //as part of config seeding before all config is in play (#648). Was //going to merge this in with "include", but include is added after //the "name" target. To preserve what r.js has done previously, make //sure "deps" comes before the "name". if (config.deps) { config._depsInclude = config.deps; } //Remove things that may cause problems in the build. //deps already merged above delete config.deps; delete config.jQuery; delete config.enforceDefine; delete config.urlArgs; return config; }; /** * finds the module being built/optimized with the given moduleName, * or returns null. * @param {String} moduleName * @param {Array} modules * @returns {Object} the module object from the build profile, or null. */ build.findBuildModule = function (moduleName, modules) { var i, module; for (i = 0; i < modules.length; i++) { module = modules[i]; if (module.name === moduleName) { return module; } } return null; }; /** * Removes a module name and path from a layer, if it is supposed to be * excluded from the layer. * @param {String} moduleName the name of the module * @param {String} path the file path for the module * @param {Object} layer the layer to remove the module/path from */ build.removeModulePath = function (module, path, layer) { var index = layer.buildFilePaths.indexOf(path); if (index !== -1) { layer.buildFilePaths.splice(index, 1); } }; /** * Uses the module build config object to trace the dependencies for the * given module. * * @param {Object} module the module object from the build config info. * @param {Object} config the build config object. * @param {Object} [baseLoaderConfig] the base loader config to use for env resets. * * @returns {Object} layer information about what paths and modules should * be in the flattened module. */ build.traceDependencies = function (module, config, baseLoaderConfig) { var include, override, layer, context, oldContext, rawTextByIds, syncChecks = { rhino: true, node: true, xpconnect: true }, deferred = prim(); //Reset some state set up in requirePatch.js, and clean up require's //current context. oldContext = require._buildReset(); //Grab the reset layer and context after the reset, but keep the //old config to reuse in the new context. layer = require._layer; context = layer.context; //Put back basic config, use a fresh object for it. if (baseLoaderConfig) { require(copyConfig(baseLoaderConfig)); } logger.trace("\nTracing dependencies for: " + (module.name || (typeof module.out === 'function' ? 'FUNCTION' : module.out))); include = config._depsInclude || []; include = include.concat(module.name && !module.create ? [module.name] : []); if (module.include) { include = include.concat(module.include); } //If there are overrides to basic config, set that up now.; if (module.override) { if (baseLoaderConfig) { override = build.createOverrideConfig(baseLoaderConfig, module.override); } else { override = copyConfig(module.override); } require(override); } //Now, populate the rawText cache with any values explicitly passed in //via config. rawTextByIds = require.s.contexts._.config.rawText; if (rawTextByIds) { lang.eachProp(rawTextByIds, function (contents, id) { var url = require.toUrl(id) + '.js'; require._cachedRawText[url] = contents; }); } //Configure the callbacks to be called. deferred.reject.__requireJsBuild = true; //Use a wrapping function so can check for errors. function includeFinished(value) { //If a sync build environment, check for errors here, instead of //in the then callback below, since some errors, like two IDs pointed //to same URL but only one anon ID will leave the loader in an //unresolved state since a setTimeout cannot be used to check for //timeout. var hasError = false; if (syncChecks[env.get()]) { try { build.checkForErrors(context, layer); } catch (e) { hasError = true; deferred.reject(e); } } if (!hasError) { deferred.resolve(value); } } includeFinished.__requireJsBuild = true; //Figure out module layer dependencies by calling require to do the work. require(include, includeFinished, deferred.reject); // If a sync env, then with the "two IDs to same anon module path" // issue, the require never completes, need to check for errors // here. if (syncChecks[env.get()]) { build.checkForErrors(context, layer); } return deferred.promise.then(function () { //Reset config if (module.override && baseLoaderConfig) { require(copyConfig(baseLoaderConfig)); } build.checkForErrors(context, layer); return layer; }); }; build.checkForErrors = function (context, layer) { //Check to see if it all loaded. If not, then throw, and give //a message on what is left. var id, prop, mod, idParts, pluginId, pluginResources, errMessage = '', failedPluginMap = {}, failedPluginIds = [], errIds = [], errUrlMap = {}, errUrlConflicts = {}, hasErrUrl = false, hasUndefined = false, defined = context.defined, registry = context.registry; function populateErrUrlMap(id, errUrl, skipNew) { // Loader plugins do not have an errUrl, so skip them. if (!errUrl) { return; } if (!skipNew) { errIds.push(id); } if (errUrlMap[errUrl]) { hasErrUrl = true; //This error module has the same URL as another //error module, could be misconfiguration. if (!errUrlConflicts[errUrl]) { errUrlConflicts[errUrl] = []; //Store the original module that had the same URL. errUrlConflicts[errUrl].push(errUrlMap[errUrl]); } errUrlConflicts[errUrl].push(id); } else if (!skipNew) { errUrlMap[errUrl] = id; } } for (id in registry) { if (hasProp(registry, id) && id.indexOf('_@r') !== 0) { hasUndefined = true; mod = getOwn(registry, id); idParts = id.split('!'); pluginId = idParts[0]; if (id.indexOf('_unnormalized') === -1 && mod && mod.enabled) { populateErrUrlMap(id, mod.map.url); } //Look for plugins that did not call load() //But skip plugin IDs that were already inlined and called //define() with a name. if (!hasProp(layer.modulesWithNames, id) && idParts.length > 1) { if (falseProp(failedPluginMap, pluginId)) { failedPluginIds.push(pluginId); } pluginResources = failedPluginMap[pluginId]; if (!pluginResources) { pluginResources = failedPluginMap[pluginId] = []; } pluginResources.push(id + (mod.error ? ': ' + mod.error : '')); } } } // If have some modules that are not defined/stuck in the registry, // then check defined modules for URL overlap. if (hasUndefined) { for (id in defined) { if (hasProp(defined, id) && id.indexOf('!') === -1) { populateErrUrlMap(id, require.toUrl(id) + '.js', true); } } } if (errIds.length || failedPluginIds.length) { if (failedPluginIds.length) { errMessage += 'Loader plugin' + (failedPluginIds.length === 1 ? '' : 's') + ' did not call ' + 'the load callback in the build:\n' + failedPluginIds.map(function (pluginId) { var pluginResources = failedPluginMap[pluginId]; return pluginId + ':\n ' + pluginResources.join('\n '); }).join('\n') + '\n'; } errMessage += 'Module loading did not complete for: ' + errIds.join(', '); if (hasErrUrl) { errMessage += '\nThe following modules share the same URL. This ' + 'could be a misconfiguration if that URL only has ' + 'one anonymous module in it:'; for (prop in errUrlConflicts) { if (hasProp(errUrlConflicts, prop)) { errMessage += '\n' + prop + ': ' + errUrlConflicts[prop].join(', '); } } } throw new Error(errMessage); } }; build.createOverrideConfig = function (config, override) { var cfg = copyConfig(config), oride = copyConfig(override); lang.eachProp(oride, function (value, prop) { if (hasProp(build.objProps, prop)) { //An object property, merge keys. Start a new object //so that source object in config does not get modified. cfg[prop] = {}; lang.mixin(cfg[prop], config[prop], true); lang.mixin(cfg[prop], override[prop], true); } else { cfg[prop] = override[prop]; } }); return cfg; }; /** * Uses the module build config object to create an flattened version * of the module, with deep dependencies included. * * @param {Object} module the module object from the build config info. * * @param {Object} layer the layer object returned from build.traceDependencies. * * @param {Object} the build config object. * * @returns {Object} with two properties: "text", the text of the flattened * module, and "buildText", a string of text representing which files were * included in the flattened module text. */ build.flattenModule = function (module, layer, config) { var fileContents, sourceMapGenerator, sourceMapBase, buildFileContents = ''; return prim().start(function () { var reqIndex, currContents, fileForSourceMap, moduleName, shim, packageName, parts, builder, writeApi, namespace, namespaceWithDot, stubModulesByName, context = layer.context, onLayerEnds = [], onLayerEndAdded = {}, pkgsMainMap = {}; //Use override settings, particularly for pragmas //Do this before the var readings since it reads config values. if (module.override) { config = build.createOverrideConfig(config, module.override); } namespace = config.namespace || ''; namespaceWithDot = namespace ? namespace + '.' : ''; stubModulesByName = (module.stubModules && module.stubModules._byName) || {}; //Start build output for the module. module.onCompleteData = { name: module.name, path: (config.dir ? module._buildPath.replace(config.dir, "") : module._buildPath), included: [] }; buildFileContents += "\n" + module.onCompleteData.path + "\n----------------\n"; //If there was an existing file with require in it, hoist to the top. if (layer.existingRequireUrl) { reqIndex = layer.buildFilePaths.indexOf(layer.existingRequireUrl); if (reqIndex !== -1) { layer.buildFilePaths.splice(reqIndex, 1); layer.buildFilePaths.unshift(layer.existingRequireUrl); } } if (config.generateSourceMaps) { sourceMapBase = config.dir || config.baseUrl; if (module._buildPath === 'FUNCTION') { fileForSourceMap = (module.name || module.include[0] || 'FUNCTION') + '.build.js'; } else if (config.out) { fileForSourceMap = module._buildPath.split('/').pop(); } else { fileForSourceMap = module._buildPath.replace(sourceMapBase, ''); } sourceMapGenerator = new SourceMapGenerator({ file: fileForSourceMap }); } //Create a reverse lookup for packages main module IDs to their package //names, useful for knowing when to write out define() package main ID //adapters. lang.eachProp(layer.context.config.pkgs, function(value, prop) { pkgsMainMap[value] = prop; }); //Write the built module to disk, and build up the build output. fileContents = ""; if (config.wrap && config.wrap.__startMap) { config.wrap.__startMap.forEach(function (wrapFunction) { fileContents = wrapFunction(fileContents, config, sourceMapGenerator); }); } return prim.serial(layer.buildFilePaths.map(function (path) { return function () { var singleContents = ''; moduleName = layer.buildFileToModule[path]; //If the moduleName is a package main, then hold on to the //packageName in case an adapter needs to be written. packageName = getOwn(pkgsMainMap, moduleName); return prim().start(function () { //Figure out if the module is a result of a build plugin, and if so, //then delegate to that plugin. parts = context.makeModuleMap(moduleName); builder = parts.prefix && getOwn(context.defined, parts.prefix); if (builder) { if (builder.onLayerEnd && falseProp(onLayerEndAdded, parts.prefix)) { onLayerEnds.push(builder); onLayerEndAdded[parts.prefix] = true; } if (builder.write) { writeApi = function (input) { singleContents += "\n" + addSemiColon(input, config); if (config.onBuildWrite) { singleContents = config.onBuildWrite(moduleName, path, singleContents); } }; writeApi.asModule = function (moduleName, input) { singleContents += "\n" + addSemiColon(build.toTransport(namespace, moduleName, path, input, layer, { useSourceUrl: layer.context.config.useSourceUrl }), config); if (config.onBuildWrite) { singleContents = config.onBuildWrite(moduleName, path, singleContents); } }; builder.write(parts.prefix, parts.name, writeApi, { name: module.onCompleteData.name, path: module.onCompleteData.path }); } return; } else { return prim().start(function () { if (hasProp(stubModulesByName, moduleName)) { //Just want to insert a simple module definition instead //of the source module. Useful for plugins that inline //all their resources. if (hasProp(layer.context.plugins, moduleName)) { //Slightly different content for plugins, to indicate //that dynamic loading will not work. return 'define({load: function(id){throw new Error("Dynamic load not allowed: " + id);}});'; } else { return 'define({});'; } } else { return require._cacheReadAsync(path); } }).then(function (text) { var hasPackageName; currContents = text; if (config.cjsTranslate && (!config.shim || !lang.hasProp(config.shim, moduleName))) { currContents = commonJs.convert(path, currContents); } if (config.onBuildRead) { currContents = config.onBuildRead(moduleName, path, currContents); } if (packageName) { hasPackageName = (packageName === parse.getNamedDefine(currContents)); } if (namespace) { currContents = pragma.namespace(currContents, namespace); } currContents = build.toTransport(namespace, moduleName, path, currContents, layer, { useSourceUrl: config.useSourceUrl }); if (packageName && !hasPackageName) { currContents = addSemiColon(currContents, config) + '\n'; currContents += namespaceWithDot + "define('" + packageName + "', ['" + moduleName + "'], function (main) { return main; });\n"; } if (config.onBuildWrite) { currContents = config.onBuildWrite(moduleName, path, currContents); } //Semicolon is for files that are not well formed when //concatenated with other content. singleContents += addSemiColon(currContents, config); }); } }).then(function () { var shimDeps, shortPath = path.replace(config.dir, ""); module.onCompleteData.included.push(shortPath); buildFileContents += shortPath + "\n"; //Some files may not have declared a require module, and if so, //put in a placeholder call so the require does not try to load them //after the module is processed. //If we have a name, but no defined module, then add in the placeholder. if (moduleName && falseProp(layer.modulesWithNames, moduleName) && !config.skipModuleInsertion) { shim = config.shim && (getOwn(config.shim, moduleName) || (packageName && getOwn(config.shim, packageName))); if (shim) { shimDeps = lang.isArray(shim) ? shim : shim.deps; if (config.wrapShim) { singleContents = '(function(root) {\n' + namespaceWithDot + 'define("' + moduleName + '", ' + (shimDeps && shimDeps.length ? build.makeJsArrayString(shimDeps) + ', ' : '[], ') + 'function() {\n' + ' return (function() {\n' + singleContents + // Start with a \n in case last line is a comment // in the singleContents, like a sourceURL comment. '\n' + (shim.exportsFn ? shim.exportsFn() : '') + '\n' + ' }).apply(root, arguments);\n' + '});\n' + '}(this));\n'; } else { singleContents += '\n' + namespaceWithDot + 'define("' + moduleName + '", ' + (shimDeps && shimDeps.length ? build.makeJsArrayString(shimDeps) + ', ' : '') + (shim.exportsFn ? shim.exportsFn() : 'function(){}') + ');\n'; } } else { singleContents += '\n' + namespaceWithDot + 'define("' + moduleName + '", function(){});\n'; } } //Add line break at end of file, instead of at beginning, //so source map line numbers stay correct, but still allow //for some space separation between files in case ASI issues //for concatenation would cause an error otherwise. singleContents += '\n'; //Add to the source map and to the final contents fileContents = appendToFileContents(fileContents, singleContents, path, config, module, sourceMapGenerator); }); }; })).then(function () { if (onLayerEnds.length) { onLayerEnds.forEach(function (builder, index) { var path; if (typeof module.out === 'string') { path = module.out; } else if (typeof module._buildPath === 'string') { path = module._buildPath; } builder.onLayerEnd(function (input) { fileContents = appendToFileContents(fileContents, "\n" + addSemiColon(input, config), 'onLayerEnd' + index + '.js', config, module, sourceMapGenerator); }, { name: module.name, path: path }); }); } if (module.create) { //The ID is for a created layer. Write out //a module definition for it in case the //built file is used with enforceDefine //(#432) fileContents = appendToFileContents(fileContents, '\n' + namespaceWithDot + 'define("' + module.name + '", function(){});\n', 'module-create.js', config, module, sourceMapGenerator); } //Add a require at the end to kick start module execution, if that //was desired. Usually this is only specified when using small shim //loaders like almond. if (module.insertRequire) { fileContents = appendToFileContents(fileContents, '\n' + namespaceWithDot + 'require(["' + module.insertRequire.join('", "') + '"]);\n', 'module-insertRequire.js', config, module, sourceMapGenerator); } }); }).then(function () { if (config.wrap && config.wrap.__endMap) { config.wrap.__endMap.forEach(function (wrapFunction) { fileContents = wrapFunction(fileContents, config, sourceMapGenerator); }); } return { text: fileContents, buildText: buildFileContents, sourceMap: sourceMapGenerator ? JSON.stringify(sourceMapGenerator.toJSON(), null, ' ') : undefined }; }); }; //Converts an JS array of strings to a string representation. //Not using JSON.stringify() for Rhino's sake. build.makeJsArrayString = function (ary) { return '["' + ary.map(function (item) { //Escape any double quotes, backslashes return lang.jsEscape(item); }).join('","') + '"]'; }; build.toTransport = function (namespace, moduleName, path, contents, layer, options) { var baseUrl = layer && layer.context.config.baseUrl; function onFound(info) { //Only mark this module as having a name if not a named module, //or if a named module and the name matches expectations. if (layer && (info.needsId || info.foundId === moduleName)) { layer.modulesWithNames[moduleName] = true; } } //Convert path to be a local one to the baseUrl, useful for //useSourceUrl. if (baseUrl) { path = path.replace(baseUrl, ''); } return transform.toTransport(namespace, moduleName, path, contents, onFound, options); }; return build; }); r.js-2.3.6/build/jslib/commandLine.js000066400000000000000000000010151334071220400173550ustar00rootroot00000000000000/*jslint strict: false */ /*global Packages: false */ var commandLine = {}; (function () { var runtime = Packages.java.lang.Runtime.getRuntime(); /** * Executes a command on the command line. May not work right in * Windows environments, except maybe via something like cygwin. * @param {String} command the command to run on the command line. */ commandLine.exec = function (command) { var process = runtime.exec(["/bin/sh", "-c", command]); process.waitFor(); }; }()); r.js-2.3.6/build/jslib/commonJs.js000066400000000000000000000075121334071220400167240ustar00rootroot00000000000000/*jslint */ /*global define: false, console: false */ define(['env!env/file', 'parse'], function (file, parse) { 'use strict'; var commonJs = { //Set to false if you do not want this file to log. Useful in environments //like node where you want the work to happen without noise. useLog: true, convertDir: function (commonJsPath, savePath) { var fileList, i, jsFileRegExp = /\.js$/, fileName, convertedFileName, fileContents; //Get list of files to convert. fileList = file.getFilteredFileList(commonJsPath, /\w/, true); //Normalize on front slashes and make sure the paths do not end in a slash. commonJsPath = commonJsPath.replace(/\\/g, "/"); savePath = savePath.replace(/\\/g, "/"); if (commonJsPath.charAt(commonJsPath.length - 1) === "/") { commonJsPath = commonJsPath.substring(0, commonJsPath.length - 1); } if (savePath.charAt(savePath.length - 1) === "/") { savePath = savePath.substring(0, savePath.length - 1); } //Cycle through all the JS files and convert them. if (!fileList || !fileList.length) { if (commonJs.useLog) { if (commonJsPath === "convert") { //A request just to convert one file. console.log('\n\n' + commonJs.convert(savePath, file.readFile(savePath))); } else { console.log("No files to convert in directory: " + commonJsPath); } } } else { for (i = 0; i < fileList.length; i++) { fileName = fileList[i]; convertedFileName = fileName.replace(commonJsPath, savePath); //Handle JS files. if (jsFileRegExp.test(fileName)) { fileContents = file.readFile(fileName); fileContents = commonJs.convert(fileName, fileContents); file.saveUtf8File(convertedFileName, fileContents); } else { //Just copy the file over. file.copyFile(fileName, convertedFileName, true); } } } }, /** * Does the actual file conversion. * * @param {String} fileName the name of the file. * * @param {String} fileContents the contents of a file :) * * @returns {String} the converted contents */ convert: function (fileName, fileContents) { //Strip out comments. try { var preamble = '', commonJsProps = parse.usesCommonJs(fileName, fileContents); //First see if the module is not already RequireJS-formatted. if (parse.usesAmdOrRequireJs(fileName, fileContents) || !commonJsProps) { return fileContents; } if (commonJsProps.dirname || commonJsProps.filename) { preamble = 'var __filename = module.uri || "", ' + '__dirname = __filename.substring(0, __filename.lastIndexOf("/") + 1); '; } //Construct the wrapper boilerplate. fileContents = 'define(function (require, exports, module) {' + preamble + fileContents + '\n});\n'; } catch (e) { console.log("commonJs.convert: COULD NOT CONVERT: " + fileName + ", so skipping it. Error was: " + e); return fileContents; } return fileContents; } }; return commonJs; }); r.js-2.3.6/build/jslib/env.js000066400000000000000000000027451334071220400157320ustar00rootroot00000000000000/*jslint strict: false */ /*global Packages: false, process: false, window: false, navigator: false, document: false, define: false */ /** * A plugin that modifies any /env/ path to be the right path based on * the host environment. Right now only works for Node, Rhino and browser. */ (function () { var pathRegExp = /(\/|^)env\/|\{env\}/, env = 'unknown'; if (typeof process !== 'undefined' && process.versions && !!process.versions.node) { env = 'node'; } else if (typeof Packages !== 'undefined') { env = 'rhino'; } else if ((typeof navigator !== 'undefined' && typeof document !== 'undefined') || (typeof importScripts !== 'undefined' && typeof self !== 'undefined')) { env = 'browser'; } else if (typeof Components !== 'undefined' && Components.classes && Components.interfaces) { env = 'xpconnect'; } define({ get: function () { return env; }, load: function (name, req, load, config) { //Allow override in the config. if (config.env) { env = config.env; } name = name.replace(pathRegExp, function (match, prefix) { if (match.indexOf('{') === -1) { return prefix + env + '/'; } else { return env; } }); req([name], function (mod) { load(mod); }); } }); }()); r.js-2.3.6/build/jslib/esprima.js000066400000000000000000010516611334071220400166040ustar00rootroot00000000000000(function webpackUniversalModuleDefinition(root, factory) { /* istanbul ignore next */ if(typeof define === 'function' && define.amd) define([], factory); else if(typeof exports === 'object' && typeof module === 'object') module.exports = factory(); /* istanbul ignore next */ else if(typeof exports === 'object') exports["esprima"] = factory(); else root["esprima"] = factory(); })(this, function() { return /******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ // Check if module is in cache /* istanbul ignore if */ /******/ if(installedModules[moduleId]) /******/ return installedModules[moduleId].exports; /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { /******/ exports: {}, /******/ id: moduleId, /******/ loaded: false /******/ }; /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ // Flag the module as loaded /******/ module.loaded = true; /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = modules; /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; /******/ // __webpack_public_path__ /******/ __webpack_require__.p = ""; /******/ // Load entry module and return exports /******/ return __webpack_require__(0); /******/ }) /************************************************************************/ /******/ ([ /* 0 */ /***/ function(module, exports, __webpack_require__) { "use strict"; /* Copyright JS Foundation and other contributors, https://js.foundation/ Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ Object.defineProperty(exports, "__esModule", { value: true }); var comment_handler_1 = __webpack_require__(1); var jsx_parser_1 = __webpack_require__(3); var parser_1 = __webpack_require__(8); var tokenizer_1 = __webpack_require__(15); function parse(code, options, delegate) { var commentHandler = null; var proxyDelegate = function (node, metadata) { if (delegate) { delegate(node, metadata); } if (commentHandler) { commentHandler.visit(node, metadata); } }; var parserDelegate = (typeof delegate === 'function') ? proxyDelegate : null; var collectComment = false; if (options) { collectComment = (typeof options.comment === 'boolean' && options.comment); var attachComment = (typeof options.attachComment === 'boolean' && options.attachComment); if (collectComment || attachComment) { commentHandler = new comment_handler_1.CommentHandler(); commentHandler.attach = attachComment; options.comment = true; parserDelegate = proxyDelegate; } } var isModule = false; if (options && typeof options.sourceType === 'string') { isModule = (options.sourceType === 'module'); } var parser; if (options && typeof options.jsx === 'boolean' && options.jsx) { parser = new jsx_parser_1.JSXParser(code, options, parserDelegate); } else { parser = new parser_1.Parser(code, options, parserDelegate); } var program = isModule ? parser.parseModule() : parser.parseScript(); var ast = program; if (collectComment && commentHandler) { ast.comments = commentHandler.comments; } if (parser.config.tokens) { ast.tokens = parser.tokens; } if (parser.config.tolerant) { ast.errors = parser.errorHandler.errors; } return ast; } exports.parse = parse; function parseModule(code, options, delegate) { var parsingOptions = options || {}; parsingOptions.sourceType = 'module'; return parse(code, parsingOptions, delegate); } exports.parseModule = parseModule; function parseScript(code, options, delegate) { var parsingOptions = options || {}; parsingOptions.sourceType = 'script'; return parse(code, parsingOptions, delegate); } exports.parseScript = parseScript; function tokenize(code, options, delegate) { var tokenizer = new tokenizer_1.Tokenizer(code, options); var tokens; tokens = []; try { while (true) { var token = tokenizer.getNextToken(); if (!token) { break; } if (delegate) { token = delegate(token); } tokens.push(token); } } catch (e) { tokenizer.errorHandler.tolerate(e); } if (tokenizer.errorHandler.tolerant) { tokens.errors = tokenizer.errors(); } return tokens; } exports.tokenize = tokenize; var syntax_1 = __webpack_require__(2); exports.Syntax = syntax_1.Syntax; // Sync with *.json manifests. exports.version = '4.0.1'; /***/ }, /* 1 */ /***/ function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var syntax_1 = __webpack_require__(2); var CommentHandler = (function () { function CommentHandler() { this.attach = false; this.comments = []; this.stack = []; this.leading = []; this.trailing = []; } CommentHandler.prototype.insertInnerComments = function (node, metadata) { // innnerComments for properties empty block // `function a() {/** comments **\/}` if (node.type === syntax_1.Syntax.BlockStatement && node.body.length === 0) { var innerComments = []; for (var i = this.leading.length - 1; i >= 0; --i) { var entry = this.leading[i]; if (metadata.end.offset >= entry.start) { innerComments.unshift(entry.comment); this.leading.splice(i, 1); this.trailing.splice(i, 1); } } if (innerComments.length) { node.innerComments = innerComments; } } }; CommentHandler.prototype.findTrailingComments = function (metadata) { var trailingComments = []; if (this.trailing.length > 0) { for (var i = this.trailing.length - 1; i >= 0; --i) { var entry_1 = this.trailing[i]; if (entry_1.start >= metadata.end.offset) { trailingComments.unshift(entry_1.comment); } } this.trailing.length = 0; return trailingComments; } var entry = this.stack[this.stack.length - 1]; if (entry && entry.node.trailingComments) { var firstComment = entry.node.trailingComments[0]; if (firstComment && firstComment.range[0] >= metadata.end.offset) { trailingComments = entry.node.trailingComments; delete entry.node.trailingComments; } } return trailingComments; }; CommentHandler.prototype.findLeadingComments = function (metadata) { var leadingComments = []; var target; while (this.stack.length > 0) { var entry = this.stack[this.stack.length - 1]; if (entry && entry.start >= metadata.start.offset) { target = entry.node; this.stack.pop(); } else { break; } } if (target) { var count = target.leadingComments ? target.leadingComments.length : 0; for (var i = count - 1; i >= 0; --i) { var comment = target.leadingComments[i]; if (comment.range[1] <= metadata.start.offset) { leadingComments.unshift(comment); target.leadingComments.splice(i, 1); } } if (target.leadingComments && target.leadingComments.length === 0) { delete target.leadingComments; } return leadingComments; } for (var i = this.leading.length - 1; i >= 0; --i) { var entry = this.leading[i]; if (entry.start <= metadata.start.offset) { leadingComments.unshift(entry.comment); this.leading.splice(i, 1); } } return leadingComments; }; CommentHandler.prototype.visitNode = function (node, metadata) { if (node.type === syntax_1.Syntax.Program && node.body.length > 0) { return; } this.insertInnerComments(node, metadata); var trailingComments = this.findTrailingComments(metadata); var leadingComments = this.findLeadingComments(metadata); if (leadingComments.length > 0) { node.leadingComments = leadingComments; } if (trailingComments.length > 0) { node.trailingComments = trailingComments; } this.stack.push({ node: node, start: metadata.start.offset }); }; CommentHandler.prototype.visitComment = function (node, metadata) { var type = (node.type[0] === 'L') ? 'Line' : 'Block'; var comment = { type: type, value: node.value }; if (node.range) { comment.range = node.range; } if (node.loc) { comment.loc = node.loc; } this.comments.push(comment); if (this.attach) { var entry = { comment: { type: type, value: node.value, range: [metadata.start.offset, metadata.end.offset] }, start: metadata.start.offset }; if (node.loc) { entry.comment.loc = node.loc; } node.type = type; this.leading.push(entry); this.trailing.push(entry); } }; CommentHandler.prototype.visit = function (node, metadata) { if (node.type === 'LineComment') { this.visitComment(node, metadata); } else if (node.type === 'BlockComment') { this.visitComment(node, metadata); } else if (this.attach) { this.visitNode(node, metadata); } }; return CommentHandler; }()); exports.CommentHandler = CommentHandler; /***/ }, /* 2 */ /***/ function(module, exports) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Syntax = { AssignmentExpression: 'AssignmentExpression', AssignmentPattern: 'AssignmentPattern', ArrayExpression: 'ArrayExpression', ArrayPattern: 'ArrayPattern', ArrowFunctionExpression: 'ArrowFunctionExpression', AwaitExpression: 'AwaitExpression', BlockStatement: 'BlockStatement', BinaryExpression: 'BinaryExpression', BreakStatement: 'BreakStatement', CallExpression: 'CallExpression', CatchClause: 'CatchClause', ClassBody: 'ClassBody', ClassDeclaration: 'ClassDeclaration', ClassExpression: 'ClassExpression', ConditionalExpression: 'ConditionalExpression', ContinueStatement: 'ContinueStatement', DoWhileStatement: 'DoWhileStatement', DebuggerStatement: 'DebuggerStatement', EmptyStatement: 'EmptyStatement', ExportAllDeclaration: 'ExportAllDeclaration', ExportDefaultDeclaration: 'ExportDefaultDeclaration', ExportNamedDeclaration: 'ExportNamedDeclaration', ExportSpecifier: 'ExportSpecifier', ExpressionStatement: 'ExpressionStatement', ForStatement: 'ForStatement', ForOfStatement: 'ForOfStatement', ForInStatement: 'ForInStatement', FunctionDeclaration: 'FunctionDeclaration', FunctionExpression: 'FunctionExpression', Identifier: 'Identifier', IfStatement: 'IfStatement', ImportDeclaration: 'ImportDeclaration', ImportDefaultSpecifier: 'ImportDefaultSpecifier', ImportNamespaceSpecifier: 'ImportNamespaceSpecifier', ImportSpecifier: 'ImportSpecifier', Literal: 'Literal', LabeledStatement: 'LabeledStatement', LogicalExpression: 'LogicalExpression', MemberExpression: 'MemberExpression', MetaProperty: 'MetaProperty', MethodDefinition: 'MethodDefinition', NewExpression: 'NewExpression', ObjectExpression: 'ObjectExpression', ObjectPattern: 'ObjectPattern', Program: 'Program', Property: 'Property', RestElement: 'RestElement', ReturnStatement: 'ReturnStatement', SequenceExpression: 'SequenceExpression', SpreadElement: 'SpreadElement', Super: 'Super', SwitchCase: 'SwitchCase', SwitchStatement: 'SwitchStatement', TaggedTemplateExpression: 'TaggedTemplateExpression', TemplateElement: 'TemplateElement', TemplateLiteral: 'TemplateLiteral', ThisExpression: 'ThisExpression', ThrowStatement: 'ThrowStatement', TryStatement: 'TryStatement', UnaryExpression: 'UnaryExpression', UpdateExpression: 'UpdateExpression', VariableDeclaration: 'VariableDeclaration', VariableDeclarator: 'VariableDeclarator', WhileStatement: 'WhileStatement', WithStatement: 'WithStatement', YieldExpression: 'YieldExpression' }; /***/ }, /* 3 */ /***/ function(module, exports, __webpack_require__) { "use strict"; /* istanbul ignore next */ var __extends = (this && this.__extends) || (function () { var extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); Object.defineProperty(exports, "__esModule", { value: true }); var character_1 = __webpack_require__(4); var JSXNode = __webpack_require__(5); var jsx_syntax_1 = __webpack_require__(6); var Node = __webpack_require__(7); var parser_1 = __webpack_require__(8); var token_1 = __webpack_require__(13); var xhtml_entities_1 = __webpack_require__(14); token_1.TokenName[100 /* Identifier */] = 'JSXIdentifier'; token_1.TokenName[101 /* Text */] = 'JSXText'; // Fully qualified element name, e.g. returns "svg:path" function getQualifiedElementName(elementName) { var qualifiedName; switch (elementName.type) { case jsx_syntax_1.JSXSyntax.JSXIdentifier: var id = elementName; qualifiedName = id.name; break; case jsx_syntax_1.JSXSyntax.JSXNamespacedName: var ns = elementName; qualifiedName = getQualifiedElementName(ns.namespace) + ':' + getQualifiedElementName(ns.name); break; case jsx_syntax_1.JSXSyntax.JSXMemberExpression: var expr = elementName; qualifiedName = getQualifiedElementName(expr.object) + '.' + getQualifiedElementName(expr.property); break; /* istanbul ignore next */ default: break; } return qualifiedName; } var JSXParser = (function (_super) { __extends(JSXParser, _super); function JSXParser(code, options, delegate) { return _super.call(this, code, options, delegate) || this; } JSXParser.prototype.parsePrimaryExpression = function () { return this.match('<') ? this.parseJSXRoot() : _super.prototype.parsePrimaryExpression.call(this); }; JSXParser.prototype.startJSX = function () { // Unwind the scanner before the lookahead token. this.scanner.index = this.startMarker.index; this.scanner.lineNumber = this.startMarker.line; this.scanner.lineStart = this.startMarker.index - this.startMarker.column; }; JSXParser.prototype.finishJSX = function () { // Prime the next lookahead. this.nextToken(); }; JSXParser.prototype.reenterJSX = function () { this.startJSX(); this.expectJSX('}'); // Pop the closing '}' added from the lookahead. if (this.config.tokens) { this.tokens.pop(); } }; JSXParser.prototype.createJSXNode = function () { this.collectComments(); return { index: this.scanner.index, line: this.scanner.lineNumber, column: this.scanner.index - this.scanner.lineStart }; }; JSXParser.prototype.createJSXChildNode = function () { return { index: this.scanner.index, line: this.scanner.lineNumber, column: this.scanner.index - this.scanner.lineStart }; }; JSXParser.prototype.scanXHTMLEntity = function (quote) { var result = '&'; var valid = true; var terminated = false; var numeric = false; var hex = false; while (!this.scanner.eof() && valid && !terminated) { var ch = this.scanner.source[this.scanner.index]; if (ch === quote) { break; } terminated = (ch === ';'); result += ch; ++this.scanner.index; if (!terminated) { switch (result.length) { case 2: // e.g. '{' numeric = (ch === '#'); break; case 3: if (numeric) { // e.g. 'A' hex = (ch === 'x'); valid = hex || character_1.Character.isDecimalDigit(ch.charCodeAt(0)); numeric = numeric && !hex; } break; default: valid = valid && !(numeric && !character_1.Character.isDecimalDigit(ch.charCodeAt(0))); valid = valid && !(hex && !character_1.Character.isHexDigit(ch.charCodeAt(0))); break; } } } if (valid && terminated && result.length > 2) { // e.g. 'A' becomes just '#x41' var str = result.substr(1, result.length - 2); if (numeric && str.length > 1) { result = String.fromCharCode(parseInt(str.substr(1), 10)); } else if (hex && str.length > 2) { result = String.fromCharCode(parseInt('0' + str.substr(1), 16)); } else if (!numeric && !hex && xhtml_entities_1.XHTMLEntities[str]) { result = xhtml_entities_1.XHTMLEntities[str]; } } return result; }; // Scan the next JSX token. This replaces Scanner#lex when in JSX mode. JSXParser.prototype.lexJSX = function () { var cp = this.scanner.source.charCodeAt(this.scanner.index); // < > / : = { } if (cp === 60 || cp === 62 || cp === 47 || cp === 58 || cp === 61 || cp === 123 || cp === 125) { var value = this.scanner.source[this.scanner.index++]; return { type: 7 /* Punctuator */, value: value, lineNumber: this.scanner.lineNumber, lineStart: this.scanner.lineStart, start: this.scanner.index - 1, end: this.scanner.index }; } // " ' if (cp === 34 || cp === 39) { var start = this.scanner.index; var quote = this.scanner.source[this.scanner.index++]; var str = ''; while (!this.scanner.eof()) { var ch = this.scanner.source[this.scanner.index++]; if (ch === quote) { break; } else if (ch === '&') { str += this.scanXHTMLEntity(quote); } else { str += ch; } } return { type: 8 /* StringLiteral */, value: str, lineNumber: this.scanner.lineNumber, lineStart: this.scanner.lineStart, start: start, end: this.scanner.index }; } // ... or . if (cp === 46) { var n1 = this.scanner.source.charCodeAt(this.scanner.index + 1); var n2 = this.scanner.source.charCodeAt(this.scanner.index + 2); var value = (n1 === 46 && n2 === 46) ? '...' : '.'; var start = this.scanner.index; this.scanner.index += value.length; return { type: 7 /* Punctuator */, value: value, lineNumber: this.scanner.lineNumber, lineStart: this.scanner.lineStart, start: start, end: this.scanner.index }; } // ` if (cp === 96) { // Only placeholder, since it will be rescanned as a real assignment expression. return { type: 10 /* Template */, value: '', lineNumber: this.scanner.lineNumber, lineStart: this.scanner.lineStart, start: this.scanner.index, end: this.scanner.index }; } // Identifer can not contain backslash (char code 92). if (character_1.Character.isIdentifierStart(cp) && (cp !== 92)) { var start = this.scanner.index; ++this.scanner.index; while (!this.scanner.eof()) { var ch = this.scanner.source.charCodeAt(this.scanner.index); if (character_1.Character.isIdentifierPart(ch) && (ch !== 92)) { ++this.scanner.index; } else if (ch === 45) { // Hyphen (char code 45) can be part of an identifier. ++this.scanner.index; } else { break; } } var id = this.scanner.source.slice(start, this.scanner.index); return { type: 100 /* Identifier */, value: id, lineNumber: this.scanner.lineNumber, lineStart: this.scanner.lineStart, start: start, end: this.scanner.index }; } return this.scanner.lex(); }; JSXParser.prototype.nextJSXToken = function () { this.collectComments(); this.startMarker.index = this.scanner.index; this.startMarker.line = this.scanner.lineNumber; this.startMarker.column = this.scanner.index - this.scanner.lineStart; var token = this.lexJSX(); this.lastMarker.index = this.scanner.index; this.lastMarker.line = this.scanner.lineNumber; this.lastMarker.column = this.scanner.index - this.scanner.lineStart; if (this.config.tokens) { this.tokens.push(this.convertToken(token)); } return token; }; JSXParser.prototype.nextJSXText = function () { this.startMarker.index = this.scanner.index; this.startMarker.line = this.scanner.lineNumber; this.startMarker.column = this.scanner.index - this.scanner.lineStart; var start = this.scanner.index; var text = ''; while (!this.scanner.eof()) { var ch = this.scanner.source[this.scanner.index]; if (ch === '{' || ch === '<') { break; } ++this.scanner.index; text += ch; if (character_1.Character.isLineTerminator(ch.charCodeAt(0))) { ++this.scanner.lineNumber; if (ch === '\r' && this.scanner.source[this.scanner.index] === '\n') { ++this.scanner.index; } this.scanner.lineStart = this.scanner.index; } } this.lastMarker.index = this.scanner.index; this.lastMarker.line = this.scanner.lineNumber; this.lastMarker.column = this.scanner.index - this.scanner.lineStart; var token = { type: 101 /* Text */, value: text, lineNumber: this.scanner.lineNumber, lineStart: this.scanner.lineStart, start: start, end: this.scanner.index }; if ((text.length > 0) && this.config.tokens) { this.tokens.push(this.convertToken(token)); } return token; }; JSXParser.prototype.peekJSXToken = function () { var state = this.scanner.saveState(); this.scanner.scanComments(); var next = this.lexJSX(); this.scanner.restoreState(state); return next; }; // Expect the next JSX token to match the specified punctuator. // If not, an exception will be thrown. JSXParser.prototype.expectJSX = function (value) { var token = this.nextJSXToken(); if (token.type !== 7 /* Punctuator */ || token.value !== value) { this.throwUnexpectedToken(token); } }; // Return true if the next JSX token matches the specified punctuator. JSXParser.prototype.matchJSX = function (value) { var next = this.peekJSXToken(); return next.type === 7 /* Punctuator */ && next.value === value; }; JSXParser.prototype.parseJSXIdentifier = function () { var node = this.createJSXNode(); var token = this.nextJSXToken(); if (token.type !== 100 /* Identifier */) { this.throwUnexpectedToken(token); } return this.finalize(node, new JSXNode.JSXIdentifier(token.value)); }; JSXParser.prototype.parseJSXElementName = function () { var node = this.createJSXNode(); var elementName = this.parseJSXIdentifier(); if (this.matchJSX(':')) { var namespace = elementName; this.expectJSX(':'); var name_1 = this.parseJSXIdentifier(); elementName = this.finalize(node, new JSXNode.JSXNamespacedName(namespace, name_1)); } else if (this.matchJSX('.')) { while (this.matchJSX('.')) { var object = elementName; this.expectJSX('.'); var property = this.parseJSXIdentifier(); elementName = this.finalize(node, new JSXNode.JSXMemberExpression(object, property)); } } return elementName; }; JSXParser.prototype.parseJSXAttributeName = function () { var node = this.createJSXNode(); var attributeName; var identifier = this.parseJSXIdentifier(); if (this.matchJSX(':')) { var namespace = identifier; this.expectJSX(':'); var name_2 = this.parseJSXIdentifier(); attributeName = this.finalize(node, new JSXNode.JSXNamespacedName(namespace, name_2)); } else { attributeName = identifier; } return attributeName; }; JSXParser.prototype.parseJSXStringLiteralAttribute = function () { var node = this.createJSXNode(); var token = this.nextJSXToken(); if (token.type !== 8 /* StringLiteral */) { this.throwUnexpectedToken(token); } var raw = this.getTokenRaw(token); return this.finalize(node, new Node.Literal(token.value, raw)); }; JSXParser.prototype.parseJSXExpressionAttribute = function () { var node = this.createJSXNode(); this.expectJSX('{'); this.finishJSX(); if (this.match('}')) { this.tolerateError('JSX attributes must only be assigned a non-empty expression'); } var expression = this.parseAssignmentExpression(); this.reenterJSX(); return this.finalize(node, new JSXNode.JSXExpressionContainer(expression)); }; JSXParser.prototype.parseJSXAttributeValue = function () { return this.matchJSX('{') ? this.parseJSXExpressionAttribute() : this.matchJSX('<') ? this.parseJSXElement() : this.parseJSXStringLiteralAttribute(); }; JSXParser.prototype.parseJSXNameValueAttribute = function () { var node = this.createJSXNode(); var name = this.parseJSXAttributeName(); var value = null; if (this.matchJSX('=')) { this.expectJSX('='); value = this.parseJSXAttributeValue(); } return this.finalize(node, new JSXNode.JSXAttribute(name, value)); }; JSXParser.prototype.parseJSXSpreadAttribute = function () { var node = this.createJSXNode(); this.expectJSX('{'); this.expectJSX('...'); this.finishJSX(); var argument = this.parseAssignmentExpression(); this.reenterJSX(); return this.finalize(node, new JSXNode.JSXSpreadAttribute(argument)); }; JSXParser.prototype.parseJSXAttributes = function () { var attributes = []; while (!this.matchJSX('/') && !this.matchJSX('>')) { var attribute = this.matchJSX('{') ? this.parseJSXSpreadAttribute() : this.parseJSXNameValueAttribute(); attributes.push(attribute); } return attributes; }; JSXParser.prototype.parseJSXOpeningElement = function () { var node = this.createJSXNode(); this.expectJSX('<'); var name = this.parseJSXElementName(); var attributes = this.parseJSXAttributes(); var selfClosing = this.matchJSX('/'); if (selfClosing) { this.expectJSX('/'); } this.expectJSX('>'); return this.finalize(node, new JSXNode.JSXOpeningElement(name, selfClosing, attributes)); }; JSXParser.prototype.parseJSXBoundaryElement = function () { var node = this.createJSXNode(); this.expectJSX('<'); if (this.matchJSX('/')) { this.expectJSX('/'); var name_3 = this.parseJSXElementName(); this.expectJSX('>'); return this.finalize(node, new JSXNode.JSXClosingElement(name_3)); } var name = this.parseJSXElementName(); var attributes = this.parseJSXAttributes(); var selfClosing = this.matchJSX('/'); if (selfClosing) { this.expectJSX('/'); } this.expectJSX('>'); return this.finalize(node, new JSXNode.JSXOpeningElement(name, selfClosing, attributes)); }; JSXParser.prototype.parseJSXEmptyExpression = function () { var node = this.createJSXChildNode(); this.collectComments(); this.lastMarker.index = this.scanner.index; this.lastMarker.line = this.scanner.lineNumber; this.lastMarker.column = this.scanner.index - this.scanner.lineStart; return this.finalize(node, new JSXNode.JSXEmptyExpression()); }; JSXParser.prototype.parseJSXExpressionContainer = function () { var node = this.createJSXNode(); this.expectJSX('{'); var expression; if (this.matchJSX('}')) { expression = this.parseJSXEmptyExpression(); this.expectJSX('}'); } else { this.finishJSX(); expression = this.parseAssignmentExpression(); this.reenterJSX(); } return this.finalize(node, new JSXNode.JSXExpressionContainer(expression)); }; JSXParser.prototype.parseJSXChildren = function () { var children = []; while (!this.scanner.eof()) { var node = this.createJSXChildNode(); var token = this.nextJSXText(); if (token.start < token.end) { var raw = this.getTokenRaw(token); var child = this.finalize(node, new JSXNode.JSXText(token.value, raw)); children.push(child); } if (this.scanner.source[this.scanner.index] === '{') { var container = this.parseJSXExpressionContainer(); children.push(container); } else { break; } } return children; }; JSXParser.prototype.parseComplexJSXElement = function (el) { var stack = []; while (!this.scanner.eof()) { el.children = el.children.concat(this.parseJSXChildren()); var node = this.createJSXChildNode(); var element = this.parseJSXBoundaryElement(); if (element.type === jsx_syntax_1.JSXSyntax.JSXOpeningElement) { var opening = element; if (opening.selfClosing) { var child = this.finalize(node, new JSXNode.JSXElement(opening, [], null)); el.children.push(child); } else { stack.push(el); el = { node: node, opening: opening, closing: null, children: [] }; } } if (element.type === jsx_syntax_1.JSXSyntax.JSXClosingElement) { el.closing = element; var open_1 = getQualifiedElementName(el.opening.name); var close_1 = getQualifiedElementName(el.closing.name); if (open_1 !== close_1) { this.tolerateError('Expected corresponding JSX closing tag for %0', open_1); } if (stack.length > 0) { var child = this.finalize(el.node, new JSXNode.JSXElement(el.opening, el.children, el.closing)); el = stack[stack.length - 1]; el.children.push(child); stack.pop(); } else { break; } } } return el; }; JSXParser.prototype.parseJSXElement = function () { var node = this.createJSXNode(); var opening = this.parseJSXOpeningElement(); var children = []; var closing = null; if (!opening.selfClosing) { var el = this.parseComplexJSXElement({ node: node, opening: opening, closing: closing, children: children }); children = el.children; closing = el.closing; } return this.finalize(node, new JSXNode.JSXElement(opening, children, closing)); }; JSXParser.prototype.parseJSXRoot = function () { // Pop the opening '<' added from the lookahead. if (this.config.tokens) { this.tokens.pop(); } this.startJSX(); var element = this.parseJSXElement(); this.finishJSX(); return element; }; JSXParser.prototype.isStartOfExpression = function () { return _super.prototype.isStartOfExpression.call(this) || this.match('<'); }; return JSXParser; }(parser_1.Parser)); exports.JSXParser = JSXParser; /***/ }, /* 4 */ /***/ function(module, exports) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); // See also tools/generate-unicode-regex.js. var Regex = { // Unicode v8.0.0 NonAsciiIdentifierStart: NonAsciiIdentifierStart: /[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B4\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309B-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF19]|\uD806[\uDCA0-\uDCDF\uDCFF\uDEC0-\uDEF8]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]/, // Unicode v8.0.0 NonAsciiIdentifierPart: NonAsciiIdentifierPart: /[\xAA\xB5\xB7\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0-\u08B4\u08E3-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0AF9\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C81-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D01-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D57\u0D5F-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1369-\u1371\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1CD0-\u1CD2\u1CD4-\u1CF6\u1CF8\u1CF9\u1D00-\u1DF5\u1DFC-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C4\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE38-\uDE3A\uDE3F\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE6\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC00-\uDC46\uDC66-\uDC6F\uDC7F-\uDCBA\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDCA-\uDDCC\uDDD0-\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE37\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDDD8-\uDDDD\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB7\uDEC0-\uDEC9\uDF00-\uDF19\uDF1D-\uDF2B\uDF30-\uDF39]|\uD806[\uDCA0-\uDCE9\uDCFF\uDEC0-\uDEF8]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF8F-\uDF9F]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD83A[\uDC00-\uDCC4\uDCD0-\uDCD6]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]|\uDB40[\uDD00-\uDDEF]/ }; exports.Character = { /* tslint:disable:no-bitwise */ fromCodePoint: function (cp) { return (cp < 0x10000) ? String.fromCharCode(cp) : String.fromCharCode(0xD800 + ((cp - 0x10000) >> 10)) + String.fromCharCode(0xDC00 + ((cp - 0x10000) & 1023)); }, // https://tc39.github.io/ecma262/#sec-white-space isWhiteSpace: function (cp) { return (cp === 0x20) || (cp === 0x09) || (cp === 0x0B) || (cp === 0x0C) || (cp === 0xA0) || (cp >= 0x1680 && [0x1680, 0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, 0x200A, 0x202F, 0x205F, 0x3000, 0xFEFF].indexOf(cp) >= 0); }, // https://tc39.github.io/ecma262/#sec-line-terminators isLineTerminator: function (cp) { return (cp === 0x0A) || (cp === 0x0D) || (cp === 0x2028) || (cp === 0x2029); }, // https://tc39.github.io/ecma262/#sec-names-and-keywords isIdentifierStart: function (cp) { return (cp === 0x24) || (cp === 0x5F) || (cp >= 0x41 && cp <= 0x5A) || (cp >= 0x61 && cp <= 0x7A) || (cp === 0x5C) || ((cp >= 0x80) && Regex.NonAsciiIdentifierStart.test(exports.Character.fromCodePoint(cp))); }, isIdentifierPart: function (cp) { return (cp === 0x24) || (cp === 0x5F) || (cp >= 0x41 && cp <= 0x5A) || (cp >= 0x61 && cp <= 0x7A) || (cp >= 0x30 && cp <= 0x39) || (cp === 0x5C) || ((cp >= 0x80) && Regex.NonAsciiIdentifierPart.test(exports.Character.fromCodePoint(cp))); }, // https://tc39.github.io/ecma262/#sec-literals-numeric-literals isDecimalDigit: function (cp) { return (cp >= 0x30 && cp <= 0x39); // 0..9 }, isHexDigit: function (cp) { return (cp >= 0x30 && cp <= 0x39) || (cp >= 0x41 && cp <= 0x46) || (cp >= 0x61 && cp <= 0x66); // a..f }, isOctalDigit: function (cp) { return (cp >= 0x30 && cp <= 0x37); // 0..7 } }; /***/ }, /* 5 */ /***/ function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var jsx_syntax_1 = __webpack_require__(6); /* tslint:disable:max-classes-per-file */ var JSXClosingElement = (function () { function JSXClosingElement(name) { this.type = jsx_syntax_1.JSXSyntax.JSXClosingElement; this.name = name; } return JSXClosingElement; }()); exports.JSXClosingElement = JSXClosingElement; var JSXElement = (function () { function JSXElement(openingElement, children, closingElement) { this.type = jsx_syntax_1.JSXSyntax.JSXElement; this.openingElement = openingElement; this.children = children; this.closingElement = closingElement; } return JSXElement; }()); exports.JSXElement = JSXElement; var JSXEmptyExpression = (function () { function JSXEmptyExpression() { this.type = jsx_syntax_1.JSXSyntax.JSXEmptyExpression; } return JSXEmptyExpression; }()); exports.JSXEmptyExpression = JSXEmptyExpression; var JSXExpressionContainer = (function () { function JSXExpressionContainer(expression) { this.type = jsx_syntax_1.JSXSyntax.JSXExpressionContainer; this.expression = expression; } return JSXExpressionContainer; }()); exports.JSXExpressionContainer = JSXExpressionContainer; var JSXIdentifier = (function () { function JSXIdentifier(name) { this.type = jsx_syntax_1.JSXSyntax.JSXIdentifier; this.name = name; } return JSXIdentifier; }()); exports.JSXIdentifier = JSXIdentifier; var JSXMemberExpression = (function () { function JSXMemberExpression(object, property) { this.type = jsx_syntax_1.JSXSyntax.JSXMemberExpression; this.object = object; this.property = property; } return JSXMemberExpression; }()); exports.JSXMemberExpression = JSXMemberExpression; var JSXAttribute = (function () { function JSXAttribute(name, value) { this.type = jsx_syntax_1.JSXSyntax.JSXAttribute; this.name = name; this.value = value; } return JSXAttribute; }()); exports.JSXAttribute = JSXAttribute; var JSXNamespacedName = (function () { function JSXNamespacedName(namespace, name) { this.type = jsx_syntax_1.JSXSyntax.JSXNamespacedName; this.namespace = namespace; this.name = name; } return JSXNamespacedName; }()); exports.JSXNamespacedName = JSXNamespacedName; var JSXOpeningElement = (function () { function JSXOpeningElement(name, selfClosing, attributes) { this.type = jsx_syntax_1.JSXSyntax.JSXOpeningElement; this.name = name; this.selfClosing = selfClosing; this.attributes = attributes; } return JSXOpeningElement; }()); exports.JSXOpeningElement = JSXOpeningElement; var JSXSpreadAttribute = (function () { function JSXSpreadAttribute(argument) { this.type = jsx_syntax_1.JSXSyntax.JSXSpreadAttribute; this.argument = argument; } return JSXSpreadAttribute; }()); exports.JSXSpreadAttribute = JSXSpreadAttribute; var JSXText = (function () { function JSXText(value, raw) { this.type = jsx_syntax_1.JSXSyntax.JSXText; this.value = value; this.raw = raw; } return JSXText; }()); exports.JSXText = JSXText; /***/ }, /* 6 */ /***/ function(module, exports) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.JSXSyntax = { JSXAttribute: 'JSXAttribute', JSXClosingElement: 'JSXClosingElement', JSXElement: 'JSXElement', JSXEmptyExpression: 'JSXEmptyExpression', JSXExpressionContainer: 'JSXExpressionContainer', JSXIdentifier: 'JSXIdentifier', JSXMemberExpression: 'JSXMemberExpression', JSXNamespacedName: 'JSXNamespacedName', JSXOpeningElement: 'JSXOpeningElement', JSXSpreadAttribute: 'JSXSpreadAttribute', JSXText: 'JSXText' }; /***/ }, /* 7 */ /***/ function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var syntax_1 = __webpack_require__(2); /* tslint:disable:max-classes-per-file */ var ArrayExpression = (function () { function ArrayExpression(elements) { this.type = syntax_1.Syntax.ArrayExpression; this.elements = elements; } return ArrayExpression; }()); exports.ArrayExpression = ArrayExpression; var ArrayPattern = (function () { function ArrayPattern(elements) { this.type = syntax_1.Syntax.ArrayPattern; this.elements = elements; } return ArrayPattern; }()); exports.ArrayPattern = ArrayPattern; var ArrowFunctionExpression = (function () { function ArrowFunctionExpression(params, body, expression) { this.type = syntax_1.Syntax.ArrowFunctionExpression; this.id = null; this.params = params; this.body = body; this.generator = false; this.expression = expression; this.async = false; } return ArrowFunctionExpression; }()); exports.ArrowFunctionExpression = ArrowFunctionExpression; var AssignmentExpression = (function () { function AssignmentExpression(operator, left, right) { this.type = syntax_1.Syntax.AssignmentExpression; this.operator = operator; this.left = left; this.right = right; } return AssignmentExpression; }()); exports.AssignmentExpression = AssignmentExpression; var AssignmentPattern = (function () { function AssignmentPattern(left, right) { this.type = syntax_1.Syntax.AssignmentPattern; this.left = left; this.right = right; } return AssignmentPattern; }()); exports.AssignmentPattern = AssignmentPattern; var AsyncArrowFunctionExpression = (function () { function AsyncArrowFunctionExpression(params, body, expression) { this.type = syntax_1.Syntax.ArrowFunctionExpression; this.id = null; this.params = params; this.body = body; this.generator = false; this.expression = expression; this.async = true; } return AsyncArrowFunctionExpression; }()); exports.AsyncArrowFunctionExpression = AsyncArrowFunctionExpression; var AsyncFunctionDeclaration = (function () { function AsyncFunctionDeclaration(id, params, body) { this.type = syntax_1.Syntax.FunctionDeclaration; this.id = id; this.params = params; this.body = body; this.generator = false; this.expression = false; this.async = true; } return AsyncFunctionDeclaration; }()); exports.AsyncFunctionDeclaration = AsyncFunctionDeclaration; var AsyncFunctionExpression = (function () { function AsyncFunctionExpression(id, params, body) { this.type = syntax_1.Syntax.FunctionExpression; this.id = id; this.params = params; this.body = body; this.generator = false; this.expression = false; this.async = true; } return AsyncFunctionExpression; }()); exports.AsyncFunctionExpression = AsyncFunctionExpression; var AwaitExpression = (function () { function AwaitExpression(argument) { this.type = syntax_1.Syntax.AwaitExpression; this.argument = argument; } return AwaitExpression; }()); exports.AwaitExpression = AwaitExpression; var BinaryExpression = (function () { function BinaryExpression(operator, left, right) { var logical = (operator === '||' || operator === '&&'); this.type = logical ? syntax_1.Syntax.LogicalExpression : syntax_1.Syntax.BinaryExpression; this.operator = operator; this.left = left; this.right = right; } return BinaryExpression; }()); exports.BinaryExpression = BinaryExpression; var BlockStatement = (function () { function BlockStatement(body) { this.type = syntax_1.Syntax.BlockStatement; this.body = body; } return BlockStatement; }()); exports.BlockStatement = BlockStatement; var BreakStatement = (function () { function BreakStatement(label) { this.type = syntax_1.Syntax.BreakStatement; this.label = label; } return BreakStatement; }()); exports.BreakStatement = BreakStatement; var CallExpression = (function () { function CallExpression(callee, args) { this.type = syntax_1.Syntax.CallExpression; this.callee = callee; this.arguments = args; } return CallExpression; }()); exports.CallExpression = CallExpression; var CatchClause = (function () { function CatchClause(param, body) { this.type = syntax_1.Syntax.CatchClause; this.param = param; this.body = body; } return CatchClause; }()); exports.CatchClause = CatchClause; var ClassBody = (function () { function ClassBody(body) { this.type = syntax_1.Syntax.ClassBody; this.body = body; } return ClassBody; }()); exports.ClassBody = ClassBody; var ClassDeclaration = (function () { function ClassDeclaration(id, superClass, body) { this.type = syntax_1.Syntax.ClassDeclaration; this.id = id; this.superClass = superClass; this.body = body; } return ClassDeclaration; }()); exports.ClassDeclaration = ClassDeclaration; var ClassExpression = (function () { function ClassExpression(id, superClass, body) { this.type = syntax_1.Syntax.ClassExpression; this.id = id; this.superClass = superClass; this.body = body; } return ClassExpression; }()); exports.ClassExpression = ClassExpression; var ComputedMemberExpression = (function () { function ComputedMemberExpression(object, property) { this.type = syntax_1.Syntax.MemberExpression; this.computed = true; this.object = object; this.property = property; } return ComputedMemberExpression; }()); exports.ComputedMemberExpression = ComputedMemberExpression; var ConditionalExpression = (function () { function ConditionalExpression(test, consequent, alternate) { this.type = syntax_1.Syntax.ConditionalExpression; this.test = test; this.consequent = consequent; this.alternate = alternate; } return ConditionalExpression; }()); exports.ConditionalExpression = ConditionalExpression; var ContinueStatement = (function () { function ContinueStatement(label) { this.type = syntax_1.Syntax.ContinueStatement; this.label = label; } return ContinueStatement; }()); exports.ContinueStatement = ContinueStatement; var DebuggerStatement = (function () { function DebuggerStatement() { this.type = syntax_1.Syntax.DebuggerStatement; } return DebuggerStatement; }()); exports.DebuggerStatement = DebuggerStatement; var Directive = (function () { function Directive(expression, directive) { this.type = syntax_1.Syntax.ExpressionStatement; this.expression = expression; this.directive = directive; } return Directive; }()); exports.Directive = Directive; var DoWhileStatement = (function () { function DoWhileStatement(body, test) { this.type = syntax_1.Syntax.DoWhileStatement; this.body = body; this.test = test; } return DoWhileStatement; }()); exports.DoWhileStatement = DoWhileStatement; var EmptyStatement = (function () { function EmptyStatement() { this.type = syntax_1.Syntax.EmptyStatement; } return EmptyStatement; }()); exports.EmptyStatement = EmptyStatement; var ExportAllDeclaration = (function () { function ExportAllDeclaration(source) { this.type = syntax_1.Syntax.ExportAllDeclaration; this.source = source; } return ExportAllDeclaration; }()); exports.ExportAllDeclaration = ExportAllDeclaration; var ExportDefaultDeclaration = (function () { function ExportDefaultDeclaration(declaration) { this.type = syntax_1.Syntax.ExportDefaultDeclaration; this.declaration = declaration; } return ExportDefaultDeclaration; }()); exports.ExportDefaultDeclaration = ExportDefaultDeclaration; var ExportNamedDeclaration = (function () { function ExportNamedDeclaration(declaration, specifiers, source) { this.type = syntax_1.Syntax.ExportNamedDeclaration; this.declaration = declaration; this.specifiers = specifiers; this.source = source; } return ExportNamedDeclaration; }()); exports.ExportNamedDeclaration = ExportNamedDeclaration; var ExportSpecifier = (function () { function ExportSpecifier(local, exported) { this.type = syntax_1.Syntax.ExportSpecifier; this.exported = exported; this.local = local; } return ExportSpecifier; }()); exports.ExportSpecifier = ExportSpecifier; var ExpressionStatement = (function () { function ExpressionStatement(expression) { this.type = syntax_1.Syntax.ExpressionStatement; this.expression = expression; } return ExpressionStatement; }()); exports.ExpressionStatement = ExpressionStatement; var ForInStatement = (function () { function ForInStatement(left, right, body) { this.type = syntax_1.Syntax.ForInStatement; this.left = left; this.right = right; this.body = body; this.each = false; } return ForInStatement; }()); exports.ForInStatement = ForInStatement; var ForOfStatement = (function () { function ForOfStatement(left, right, body) { this.type = syntax_1.Syntax.ForOfStatement; this.left = left; this.right = right; this.body = body; } return ForOfStatement; }()); exports.ForOfStatement = ForOfStatement; var ForStatement = (function () { function ForStatement(init, test, update, body) { this.type = syntax_1.Syntax.ForStatement; this.init = init; this.test = test; this.update = update; this.body = body; } return ForStatement; }()); exports.ForStatement = ForStatement; var FunctionDeclaration = (function () { function FunctionDeclaration(id, params, body, generator) { this.type = syntax_1.Syntax.FunctionDeclaration; this.id = id; this.params = params; this.body = body; this.generator = generator; this.expression = false; this.async = false; } return FunctionDeclaration; }()); exports.FunctionDeclaration = FunctionDeclaration; var FunctionExpression = (function () { function FunctionExpression(id, params, body, generator) { this.type = syntax_1.Syntax.FunctionExpression; this.id = id; this.params = params; this.body = body; this.generator = generator; this.expression = false; this.async = false; } return FunctionExpression; }()); exports.FunctionExpression = FunctionExpression; var Identifier = (function () { function Identifier(name) { this.type = syntax_1.Syntax.Identifier; this.name = name; } return Identifier; }()); exports.Identifier = Identifier; var IfStatement = (function () { function IfStatement(test, consequent, alternate) { this.type = syntax_1.Syntax.IfStatement; this.test = test; this.consequent = consequent; this.alternate = alternate; } return IfStatement; }()); exports.IfStatement = IfStatement; var ImportDeclaration = (function () { function ImportDeclaration(specifiers, source) { this.type = syntax_1.Syntax.ImportDeclaration; this.specifiers = specifiers; this.source = source; } return ImportDeclaration; }()); exports.ImportDeclaration = ImportDeclaration; var ImportDefaultSpecifier = (function () { function ImportDefaultSpecifier(local) { this.type = syntax_1.Syntax.ImportDefaultSpecifier; this.local = local; } return ImportDefaultSpecifier; }()); exports.ImportDefaultSpecifier = ImportDefaultSpecifier; var ImportNamespaceSpecifier = (function () { function ImportNamespaceSpecifier(local) { this.type = syntax_1.Syntax.ImportNamespaceSpecifier; this.local = local; } return ImportNamespaceSpecifier; }()); exports.ImportNamespaceSpecifier = ImportNamespaceSpecifier; var ImportSpecifier = (function () { function ImportSpecifier(local, imported) { this.type = syntax_1.Syntax.ImportSpecifier; this.local = local; this.imported = imported; } return ImportSpecifier; }()); exports.ImportSpecifier = ImportSpecifier; var LabeledStatement = (function () { function LabeledStatement(label, body) { this.type = syntax_1.Syntax.LabeledStatement; this.label = label; this.body = body; } return LabeledStatement; }()); exports.LabeledStatement = LabeledStatement; var Literal = (function () { function Literal(value, raw) { this.type = syntax_1.Syntax.Literal; this.value = value; this.raw = raw; } return Literal; }()); exports.Literal = Literal; var MetaProperty = (function () { function MetaProperty(meta, property) { this.type = syntax_1.Syntax.MetaProperty; this.meta = meta; this.property = property; } return MetaProperty; }()); exports.MetaProperty = MetaProperty; var MethodDefinition = (function () { function MethodDefinition(key, computed, value, kind, isStatic) { this.type = syntax_1.Syntax.MethodDefinition; this.key = key; this.computed = computed; this.value = value; this.kind = kind; this.static = isStatic; } return MethodDefinition; }()); exports.MethodDefinition = MethodDefinition; var Module = (function () { function Module(body) { this.type = syntax_1.Syntax.Program; this.body = body; this.sourceType = 'module'; } return Module; }()); exports.Module = Module; var NewExpression = (function () { function NewExpression(callee, args) { this.type = syntax_1.Syntax.NewExpression; this.callee = callee; this.arguments = args; } return NewExpression; }()); exports.NewExpression = NewExpression; var ObjectExpression = (function () { function ObjectExpression(properties) { this.type = syntax_1.Syntax.ObjectExpression; this.properties = properties; } return ObjectExpression; }()); exports.ObjectExpression = ObjectExpression; var ObjectPattern = (function () { function ObjectPattern(properties) { this.type = syntax_1.Syntax.ObjectPattern; this.properties = properties; } return ObjectPattern; }()); exports.ObjectPattern = ObjectPattern; var Property = (function () { function Property(kind, key, computed, value, method, shorthand) { this.type = syntax_1.Syntax.Property; this.key = key; this.computed = computed; this.value = value; this.kind = kind; this.method = method; this.shorthand = shorthand; } return Property; }()); exports.Property = Property; var RegexLiteral = (function () { function RegexLiteral(value, raw, pattern, flags) { this.type = syntax_1.Syntax.Literal; this.value = value; this.raw = raw; this.regex = { pattern: pattern, flags: flags }; } return RegexLiteral; }()); exports.RegexLiteral = RegexLiteral; var RestElement = (function () { function RestElement(argument) { this.type = syntax_1.Syntax.RestElement; this.argument = argument; } return RestElement; }()); exports.RestElement = RestElement; var ReturnStatement = (function () { function ReturnStatement(argument) { this.type = syntax_1.Syntax.ReturnStatement; this.argument = argument; } return ReturnStatement; }()); exports.ReturnStatement = ReturnStatement; var Script = (function () { function Script(body) { this.type = syntax_1.Syntax.Program; this.body = body; this.sourceType = 'script'; } return Script; }()); exports.Script = Script; var SequenceExpression = (function () { function SequenceExpression(expressions) { this.type = syntax_1.Syntax.SequenceExpression; this.expressions = expressions; } return SequenceExpression; }()); exports.SequenceExpression = SequenceExpression; var SpreadElement = (function () { function SpreadElement(argument) { this.type = syntax_1.Syntax.SpreadElement; this.argument = argument; } return SpreadElement; }()); exports.SpreadElement = SpreadElement; var StaticMemberExpression = (function () { function StaticMemberExpression(object, property) { this.type = syntax_1.Syntax.MemberExpression; this.computed = false; this.object = object; this.property = property; } return StaticMemberExpression; }()); exports.StaticMemberExpression = StaticMemberExpression; var Super = (function () { function Super() { this.type = syntax_1.Syntax.Super; } return Super; }()); exports.Super = Super; var SwitchCase = (function () { function SwitchCase(test, consequent) { this.type = syntax_1.Syntax.SwitchCase; this.test = test; this.consequent = consequent; } return SwitchCase; }()); exports.SwitchCase = SwitchCase; var SwitchStatement = (function () { function SwitchStatement(discriminant, cases) { this.type = syntax_1.Syntax.SwitchStatement; this.discriminant = discriminant; this.cases = cases; } return SwitchStatement; }()); exports.SwitchStatement = SwitchStatement; var TaggedTemplateExpression = (function () { function TaggedTemplateExpression(tag, quasi) { this.type = syntax_1.Syntax.TaggedTemplateExpression; this.tag = tag; this.quasi = quasi; } return TaggedTemplateExpression; }()); exports.TaggedTemplateExpression = TaggedTemplateExpression; var TemplateElement = (function () { function TemplateElement(value, tail) { this.type = syntax_1.Syntax.TemplateElement; this.value = value; this.tail = tail; } return TemplateElement; }()); exports.TemplateElement = TemplateElement; var TemplateLiteral = (function () { function TemplateLiteral(quasis, expressions) { this.type = syntax_1.Syntax.TemplateLiteral; this.quasis = quasis; this.expressions = expressions; } return TemplateLiteral; }()); exports.TemplateLiteral = TemplateLiteral; var ThisExpression = (function () { function ThisExpression() { this.type = syntax_1.Syntax.ThisExpression; } return ThisExpression; }()); exports.ThisExpression = ThisExpression; var ThrowStatement = (function () { function ThrowStatement(argument) { this.type = syntax_1.Syntax.ThrowStatement; this.argument = argument; } return ThrowStatement; }()); exports.ThrowStatement = ThrowStatement; var TryStatement = (function () { function TryStatement(block, handler, finalizer) { this.type = syntax_1.Syntax.TryStatement; this.block = block; this.handler = handler; this.finalizer = finalizer; } return TryStatement; }()); exports.TryStatement = TryStatement; var UnaryExpression = (function () { function UnaryExpression(operator, argument) { this.type = syntax_1.Syntax.UnaryExpression; this.operator = operator; this.argument = argument; this.prefix = true; } return UnaryExpression; }()); exports.UnaryExpression = UnaryExpression; var UpdateExpression = (function () { function UpdateExpression(operator, argument, prefix) { this.type = syntax_1.Syntax.UpdateExpression; this.operator = operator; this.argument = argument; this.prefix = prefix; } return UpdateExpression; }()); exports.UpdateExpression = UpdateExpression; var VariableDeclaration = (function () { function VariableDeclaration(declarations, kind) { this.type = syntax_1.Syntax.VariableDeclaration; this.declarations = declarations; this.kind = kind; } return VariableDeclaration; }()); exports.VariableDeclaration = VariableDeclaration; var VariableDeclarator = (function () { function VariableDeclarator(id, init) { this.type = syntax_1.Syntax.VariableDeclarator; this.id = id; this.init = init; } return VariableDeclarator; }()); exports.VariableDeclarator = VariableDeclarator; var WhileStatement = (function () { function WhileStatement(test, body) { this.type = syntax_1.Syntax.WhileStatement; this.test = test; this.body = body; } return WhileStatement; }()); exports.WhileStatement = WhileStatement; var WithStatement = (function () { function WithStatement(object, body) { this.type = syntax_1.Syntax.WithStatement; this.object = object; this.body = body; } return WithStatement; }()); exports.WithStatement = WithStatement; var YieldExpression = (function () { function YieldExpression(argument, delegate) { this.type = syntax_1.Syntax.YieldExpression; this.argument = argument; this.delegate = delegate; } return YieldExpression; }()); exports.YieldExpression = YieldExpression; /***/ }, /* 8 */ /***/ function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var assert_1 = __webpack_require__(9); var error_handler_1 = __webpack_require__(10); var messages_1 = __webpack_require__(11); var Node = __webpack_require__(7); var scanner_1 = __webpack_require__(12); var syntax_1 = __webpack_require__(2); var token_1 = __webpack_require__(13); var ArrowParameterPlaceHolder = 'ArrowParameterPlaceHolder'; var Parser = (function () { function Parser(code, options, delegate) { if (options === void 0) { options = {}; } this.config = { range: (typeof options.range === 'boolean') && options.range, loc: (typeof options.loc === 'boolean') && options.loc, source: null, tokens: (typeof options.tokens === 'boolean') && options.tokens, comment: (typeof options.comment === 'boolean') && options.comment, tolerant: (typeof options.tolerant === 'boolean') && options.tolerant }; if (this.config.loc && options.source && options.source !== null) { this.config.source = String(options.source); } this.delegate = delegate; this.errorHandler = new error_handler_1.ErrorHandler(); this.errorHandler.tolerant = this.config.tolerant; this.scanner = new scanner_1.Scanner(code, this.errorHandler); this.scanner.trackComment = this.config.comment; this.operatorPrecedence = { ')': 0, ';': 0, ',': 0, '=': 0, ']': 0, '||': 1, '&&': 2, '|': 3, '^': 4, '&': 5, '==': 6, '!=': 6, '===': 6, '!==': 6, '<': 7, '>': 7, '<=': 7, '>=': 7, '<<': 8, '>>': 8, '>>>': 8, '+': 9, '-': 9, '*': 11, '/': 11, '%': 11 }; this.lookahead = { type: 2 /* EOF */, value: '', lineNumber: this.scanner.lineNumber, lineStart: 0, start: 0, end: 0 }; this.hasLineTerminator = false; this.context = { isModule: false, await: false, allowIn: true, allowStrictDirective: true, allowYield: true, firstCoverInitializedNameError: null, isAssignmentTarget: false, isBindingElement: false, inFunctionBody: false, inIteration: false, inSwitch: false, labelSet: {}, strict: false }; this.tokens = []; this.startMarker = { index: 0, line: this.scanner.lineNumber, column: 0 }; this.lastMarker = { index: 0, line: this.scanner.lineNumber, column: 0 }; this.nextToken(); this.lastMarker = { index: this.scanner.index, line: this.scanner.lineNumber, column: this.scanner.index - this.scanner.lineStart }; } Parser.prototype.throwError = function (messageFormat) { var values = []; for (var _i = 1; _i < arguments.length; _i++) { values[_i - 1] = arguments[_i]; } var args = Array.prototype.slice.call(arguments, 1); var msg = messageFormat.replace(/%(\d)/g, function (whole, idx) { assert_1.assert(idx < args.length, 'Message reference must be in range'); return args[idx]; }); var index = this.lastMarker.index; var line = this.lastMarker.line; var column = this.lastMarker.column + 1; throw this.errorHandler.createError(index, line, column, msg); }; Parser.prototype.tolerateError = function (messageFormat) { var values = []; for (var _i = 1; _i < arguments.length; _i++) { values[_i - 1] = arguments[_i]; } var args = Array.prototype.slice.call(arguments, 1); var msg = messageFormat.replace(/%(\d)/g, function (whole, idx) { assert_1.assert(idx < args.length, 'Message reference must be in range'); return args[idx]; }); var index = this.lastMarker.index; var line = this.scanner.lineNumber; var column = this.lastMarker.column + 1; this.errorHandler.tolerateError(index, line, column, msg); }; // Throw an exception because of the token. Parser.prototype.unexpectedTokenError = function (token, message) { var msg = message || messages_1.Messages.UnexpectedToken; var value; if (token) { if (!message) { msg = (token.type === 2 /* EOF */) ? messages_1.Messages.UnexpectedEOS : (token.type === 3 /* Identifier */) ? messages_1.Messages.UnexpectedIdentifier : (token.type === 6 /* NumericLiteral */) ? messages_1.Messages.UnexpectedNumber : (token.type === 8 /* StringLiteral */) ? messages_1.Messages.UnexpectedString : (token.type === 10 /* Template */) ? messages_1.Messages.UnexpectedTemplate : messages_1.Messages.UnexpectedToken; if (token.type === 4 /* Keyword */) { if (this.scanner.isFutureReservedWord(token.value)) { msg = messages_1.Messages.UnexpectedReserved; } else if (this.context.strict && this.scanner.isStrictModeReservedWord(token.value)) { msg = messages_1.Messages.StrictReservedWord; } } } value = token.value; } else { value = 'ILLEGAL'; } msg = msg.replace('%0', value); if (token && typeof token.lineNumber === 'number') { var index = token.start; var line = token.lineNumber; var lastMarkerLineStart = this.lastMarker.index - this.lastMarker.column; var column = token.start - lastMarkerLineStart + 1; return this.errorHandler.createError(index, line, column, msg); } else { var index = this.lastMarker.index; var line = this.lastMarker.line; var column = this.lastMarker.column + 1; return this.errorHandler.createError(index, line, column, msg); } }; Parser.prototype.throwUnexpectedToken = function (token, message) { throw this.unexpectedTokenError(token, message); }; Parser.prototype.tolerateUnexpectedToken = function (token, message) { this.errorHandler.tolerate(this.unexpectedTokenError(token, message)); }; Parser.prototype.collectComments = function () { if (!this.config.comment) { this.scanner.scanComments(); } else { var comments = this.scanner.scanComments(); if (comments.length > 0 && this.delegate) { for (var i = 0; i < comments.length; ++i) { var e = comments[i]; var node = void 0; node = { type: e.multiLine ? 'BlockComment' : 'LineComment', value: this.scanner.source.slice(e.slice[0], e.slice[1]) }; if (this.config.range) { node.range = e.range; } if (this.config.loc) { node.loc = e.loc; } var metadata = { start: { line: e.loc.start.line, column: e.loc.start.column, offset: e.range[0] }, end: { line: e.loc.end.line, column: e.loc.end.column, offset: e.range[1] } }; this.delegate(node, metadata); } } } }; // From internal representation to an external structure Parser.prototype.getTokenRaw = function (token) { return this.scanner.source.slice(token.start, token.end); }; Parser.prototype.convertToken = function (token) { var t = { type: token_1.TokenName[token.type], value: this.getTokenRaw(token) }; if (this.config.range) { t.range = [token.start, token.end]; } if (this.config.loc) { t.loc = { start: { line: this.startMarker.line, column: this.startMarker.column }, end: { line: this.scanner.lineNumber, column: this.scanner.index - this.scanner.lineStart } }; } if (token.type === 9 /* RegularExpression */) { var pattern = token.pattern; var flags = token.flags; t.regex = { pattern: pattern, flags: flags }; } return t; }; Parser.prototype.nextToken = function () { var token = this.lookahead; this.lastMarker.index = this.scanner.index; this.lastMarker.line = this.scanner.lineNumber; this.lastMarker.column = this.scanner.index - this.scanner.lineStart; this.collectComments(); if (this.scanner.index !== this.startMarker.index) { this.startMarker.index = this.scanner.index; this.startMarker.line = this.scanner.lineNumber; this.startMarker.column = this.scanner.index - this.scanner.lineStart; } var next = this.scanner.lex(); this.hasLineTerminator = (token.lineNumber !== next.lineNumber); if (next && this.context.strict && next.type === 3 /* Identifier */) { if (this.scanner.isStrictModeReservedWord(next.value)) { next.type = 4 /* Keyword */; } } this.lookahead = next; if (this.config.tokens && next.type !== 2 /* EOF */) { this.tokens.push(this.convertToken(next)); } return token; }; Parser.prototype.nextRegexToken = function () { this.collectComments(); var token = this.scanner.scanRegExp(); if (this.config.tokens) { // Pop the previous token, '/' or '/=' // This is added from the lookahead token. this.tokens.pop(); this.tokens.push(this.convertToken(token)); } // Prime the next lookahead. this.lookahead = token; this.nextToken(); return token; }; Parser.prototype.createNode = function () { return { index: this.startMarker.index, line: this.startMarker.line, column: this.startMarker.column }; }; Parser.prototype.startNode = function (token, lastLineStart) { if (lastLineStart === void 0) { lastLineStart = 0; } var column = token.start - token.lineStart; var line = token.lineNumber; if (column < 0) { column += lastLineStart; line--; } return { index: token.start, line: line, column: column }; }; Parser.prototype.finalize = function (marker, node) { if (this.config.range) { node.range = [marker.index, this.lastMarker.index]; } if (this.config.loc) { node.loc = { start: { line: marker.line, column: marker.column, }, end: { line: this.lastMarker.line, column: this.lastMarker.column } }; if (this.config.source) { node.loc.source = this.config.source; } } if (this.delegate) { var metadata = { start: { line: marker.line, column: marker.column, offset: marker.index }, end: { line: this.lastMarker.line, column: this.lastMarker.column, offset: this.lastMarker.index } }; this.delegate(node, metadata); } return node; }; // Expect the next token to match the specified punctuator. // If not, an exception will be thrown. Parser.prototype.expect = function (value) { var token = this.nextToken(); if (token.type !== 7 /* Punctuator */ || token.value !== value) { this.throwUnexpectedToken(token); } }; // Quietly expect a comma when in tolerant mode, otherwise delegates to expect(). Parser.prototype.expectCommaSeparator = function () { if (this.config.tolerant) { var token = this.lookahead; if (token.type === 7 /* Punctuator */ && token.value === ',') { this.nextToken(); } else if (token.type === 7 /* Punctuator */ && token.value === ';') { this.nextToken(); this.tolerateUnexpectedToken(token); } else { this.tolerateUnexpectedToken(token, messages_1.Messages.UnexpectedToken); } } else { this.expect(','); } }; // Expect the next token to match the specified keyword. // If not, an exception will be thrown. Parser.prototype.expectKeyword = function (keyword) { var token = this.nextToken(); if (token.type !== 4 /* Keyword */ || token.value !== keyword) { this.throwUnexpectedToken(token); } }; // Return true if the next token matches the specified punctuator. Parser.prototype.match = function (value) { return this.lookahead.type === 7 /* Punctuator */ && this.lookahead.value === value; }; // Return true if the next token matches the specified keyword Parser.prototype.matchKeyword = function (keyword) { return this.lookahead.type === 4 /* Keyword */ && this.lookahead.value === keyword; }; // Return true if the next token matches the specified contextual keyword // (where an identifier is sometimes a keyword depending on the context) Parser.prototype.matchContextualKeyword = function (keyword) { return this.lookahead.type === 3 /* Identifier */ && this.lookahead.value === keyword; }; // Return true if the next token is an assignment operator Parser.prototype.matchAssign = function () { if (this.lookahead.type !== 7 /* Punctuator */) { return false; } var op = this.lookahead.value; return op === '=' || op === '*=' || op === '**=' || op === '/=' || op === '%=' || op === '+=' || op === '-=' || op === '<<=' || op === '>>=' || op === '>>>=' || op === '&=' || op === '^=' || op === '|='; }; // Cover grammar support. // // When an assignment expression position starts with an left parenthesis, the determination of the type // of the syntax is to be deferred arbitrarily long until the end of the parentheses pair (plus a lookahead) // or the first comma. This situation also defers the determination of all the expressions nested in the pair. // // There are three productions that can be parsed in a parentheses pair that needs to be determined // after the outermost pair is closed. They are: // // 1. AssignmentExpression // 2. BindingElements // 3. AssignmentTargets // // In order to avoid exponential backtracking, we use two flags to denote if the production can be // binding element or assignment target. // // The three productions have the relationship: // // BindingElements ⊆ AssignmentTargets ⊆ AssignmentExpression // // with a single exception that CoverInitializedName when used directly in an Expression, generates // an early error. Therefore, we need the third state, firstCoverInitializedNameError, to track the // first usage of CoverInitializedName and report it when we reached the end of the parentheses pair. // // isolateCoverGrammar function runs the given parser function with a new cover grammar context, and it does not // effect the current flags. This means the production the parser parses is only used as an expression. Therefore // the CoverInitializedName check is conducted. // // inheritCoverGrammar function runs the given parse function with a new cover grammar context, and it propagates // the flags outside of the parser. This means the production the parser parses is used as a part of a potential // pattern. The CoverInitializedName check is deferred. Parser.prototype.isolateCoverGrammar = function (parseFunction) { var previousIsBindingElement = this.context.isBindingElement; var previousIsAssignmentTarget = this.context.isAssignmentTarget; var previousFirstCoverInitializedNameError = this.context.firstCoverInitializedNameError; this.context.isBindingElement = true; this.context.isAssignmentTarget = true; this.context.firstCoverInitializedNameError = null; var result = parseFunction.call(this); if (this.context.firstCoverInitializedNameError !== null) { this.throwUnexpectedToken(this.context.firstCoverInitializedNameError); } this.context.isBindingElement = previousIsBindingElement; this.context.isAssignmentTarget = previousIsAssignmentTarget; this.context.firstCoverInitializedNameError = previousFirstCoverInitializedNameError; return result; }; Parser.prototype.inheritCoverGrammar = function (parseFunction) { var previousIsBindingElement = this.context.isBindingElement; var previousIsAssignmentTarget = this.context.isAssignmentTarget; var previousFirstCoverInitializedNameError = this.context.firstCoverInitializedNameError; this.context.isBindingElement = true; this.context.isAssignmentTarget = true; this.context.firstCoverInitializedNameError = null; var result = parseFunction.call(this); this.context.isBindingElement = this.context.isBindingElement && previousIsBindingElement; this.context.isAssignmentTarget = this.context.isAssignmentTarget && previousIsAssignmentTarget; this.context.firstCoverInitializedNameError = previousFirstCoverInitializedNameError || this.context.firstCoverInitializedNameError; return result; }; Parser.prototype.consumeSemicolon = function () { if (this.match(';')) { this.nextToken(); } else if (!this.hasLineTerminator) { if (this.lookahead.type !== 2 /* EOF */ && !this.match('}')) { this.throwUnexpectedToken(this.lookahead); } this.lastMarker.index = this.startMarker.index; this.lastMarker.line = this.startMarker.line; this.lastMarker.column = this.startMarker.column; } }; // https://tc39.github.io/ecma262/#sec-primary-expression Parser.prototype.parsePrimaryExpression = function () { var node = this.createNode(); var expr; var token, raw; switch (this.lookahead.type) { case 3 /* Identifier */: if ((this.context.isModule || this.context.await) && this.lookahead.value === 'await') { this.tolerateUnexpectedToken(this.lookahead); } expr = this.matchAsyncFunction() ? this.parseFunctionExpression() : this.finalize(node, new Node.Identifier(this.nextToken().value)); break; case 6 /* NumericLiteral */: case 8 /* StringLiteral */: if (this.context.strict && this.lookahead.octal) { this.tolerateUnexpectedToken(this.lookahead, messages_1.Messages.StrictOctalLiteral); } this.context.isAssignmentTarget = false; this.context.isBindingElement = false; token = this.nextToken(); raw = this.getTokenRaw(token); expr = this.finalize(node, new Node.Literal(token.value, raw)); break; case 1 /* BooleanLiteral */: this.context.isAssignmentTarget = false; this.context.isBindingElement = false; token = this.nextToken(); raw = this.getTokenRaw(token); expr = this.finalize(node, new Node.Literal(token.value === 'true', raw)); break; case 5 /* NullLiteral */: this.context.isAssignmentTarget = false; this.context.isBindingElement = false; token = this.nextToken(); raw = this.getTokenRaw(token); expr = this.finalize(node, new Node.Literal(null, raw)); break; case 10 /* Template */: expr = this.parseTemplateLiteral(); break; case 7 /* Punctuator */: switch (this.lookahead.value) { case '(': this.context.isBindingElement = false; expr = this.inheritCoverGrammar(this.parseGroupExpression); break; case '[': expr = this.inheritCoverGrammar(this.parseArrayInitializer); break; case '{': expr = this.inheritCoverGrammar(this.parseObjectInitializer); break; case '/': case '/=': this.context.isAssignmentTarget = false; this.context.isBindingElement = false; this.scanner.index = this.startMarker.index; token = this.nextRegexToken(); raw = this.getTokenRaw(token); expr = this.finalize(node, new Node.RegexLiteral(token.regex, raw, token.pattern, token.flags)); break; default: expr = this.throwUnexpectedToken(this.nextToken()); } break; case 4 /* Keyword */: if (!this.context.strict && this.context.allowYield && this.matchKeyword('yield')) { expr = this.parseIdentifierName(); } else if (!this.context.strict && this.matchKeyword('let')) { expr = this.finalize(node, new Node.Identifier(this.nextToken().value)); } else { this.context.isAssignmentTarget = false; this.context.isBindingElement = false; if (this.matchKeyword('function')) { expr = this.parseFunctionExpression(); } else if (this.matchKeyword('this')) { this.nextToken(); expr = this.finalize(node, new Node.ThisExpression()); } else if (this.matchKeyword('class')) { expr = this.parseClassExpression(); } else { expr = this.throwUnexpectedToken(this.nextToken()); } } break; default: expr = this.throwUnexpectedToken(this.nextToken()); } return expr; }; // https://tc39.github.io/ecma262/#sec-array-initializer Parser.prototype.parseSpreadElement = function () { var node = this.createNode(); this.expect('...'); var arg = this.inheritCoverGrammar(this.parseAssignmentExpression); return this.finalize(node, new Node.SpreadElement(arg)); }; Parser.prototype.parseArrayInitializer = function () { var node = this.createNode(); var elements = []; this.expect('['); while (!this.match(']')) { if (this.match(',')) { this.nextToken(); elements.push(null); } else if (this.match('...')) { var element = this.parseSpreadElement(); if (!this.match(']')) { this.context.isAssignmentTarget = false; this.context.isBindingElement = false; this.expect(','); } elements.push(element); } else { elements.push(this.inheritCoverGrammar(this.parseAssignmentExpression)); if (!this.match(']')) { this.expect(','); } } } this.expect(']'); return this.finalize(node, new Node.ArrayExpression(elements)); }; // https://tc39.github.io/ecma262/#sec-object-initializer Parser.prototype.parsePropertyMethod = function (params) { this.context.isAssignmentTarget = false; this.context.isBindingElement = false; var previousStrict = this.context.strict; var previousAllowStrictDirective = this.context.allowStrictDirective; this.context.allowStrictDirective = params.simple; var body = this.isolateCoverGrammar(this.parseFunctionSourceElements); if (this.context.strict && params.firstRestricted) { this.tolerateUnexpectedToken(params.firstRestricted, params.message); } if (this.context.strict && params.stricted) { this.tolerateUnexpectedToken(params.stricted, params.message); } this.context.strict = previousStrict; this.context.allowStrictDirective = previousAllowStrictDirective; return body; }; Parser.prototype.parsePropertyMethodFunction = function () { var isGenerator = false; var node = this.createNode(); var previousAllowYield = this.context.allowYield; this.context.allowYield = true; var params = this.parseFormalParameters(); var method = this.parsePropertyMethod(params); this.context.allowYield = previousAllowYield; return this.finalize(node, new Node.FunctionExpression(null, params.params, method, isGenerator)); }; Parser.prototype.parsePropertyMethodAsyncFunction = function () { var node = this.createNode(); var previousAllowYield = this.context.allowYield; var previousAwait = this.context.await; this.context.allowYield = false; this.context.await = true; var params = this.parseFormalParameters(); var method = this.parsePropertyMethod(params); this.context.allowYield = previousAllowYield; this.context.await = previousAwait; return this.finalize(node, new Node.AsyncFunctionExpression(null, params.params, method)); }; Parser.prototype.parseObjectPropertyKey = function () { var node = this.createNode(); var token = this.nextToken(); var key; switch (token.type) { case 8 /* StringLiteral */: case 6 /* NumericLiteral */: if (this.context.strict && token.octal) { this.tolerateUnexpectedToken(token, messages_1.Messages.StrictOctalLiteral); } var raw = this.getTokenRaw(token); key = this.finalize(node, new Node.Literal(token.value, raw)); break; case 3 /* Identifier */: case 1 /* BooleanLiteral */: case 5 /* NullLiteral */: case 4 /* Keyword */: key = this.finalize(node, new Node.Identifier(token.value)); break; case 7 /* Punctuator */: if (token.value === '[') { key = this.isolateCoverGrammar(this.parseAssignmentExpression); this.expect(']'); } else { key = this.throwUnexpectedToken(token); } break; default: key = this.throwUnexpectedToken(token); } return key; }; Parser.prototype.isPropertyKey = function (key, value) { return (key.type === syntax_1.Syntax.Identifier && key.name === value) || (key.type === syntax_1.Syntax.Literal && key.value === value); }; Parser.prototype.parseObjectProperty = function (hasProto) { var node = this.createNode(); var token = this.lookahead; var kind; var key = null; var value = null; var computed = false; var method = false; var shorthand = false; var isAsync = false; if (token.type === 3 /* Identifier */) { var id = token.value; this.nextToken(); computed = this.match('['); isAsync = !this.hasLineTerminator && (id === 'async') && !this.match(':') && !this.match('(') && !this.match('*') && !this.match(','); key = isAsync ? this.parseObjectPropertyKey() : this.finalize(node, new Node.Identifier(id)); } else if (this.match('*')) { this.nextToken(); } else { computed = this.match('['); key = this.parseObjectPropertyKey(); } var lookaheadPropertyKey = this.qualifiedPropertyName(this.lookahead); if (token.type === 3 /* Identifier */ && !isAsync && token.value === 'get' && lookaheadPropertyKey) { kind = 'get'; computed = this.match('['); key = this.parseObjectPropertyKey(); this.context.allowYield = false; value = this.parseGetterMethod(); } else if (token.type === 3 /* Identifier */ && !isAsync && token.value === 'set' && lookaheadPropertyKey) { kind = 'set'; computed = this.match('['); key = this.parseObjectPropertyKey(); value = this.parseSetterMethod(); } else if (token.type === 7 /* Punctuator */ && token.value === '*' && lookaheadPropertyKey) { kind = 'init'; computed = this.match('['); key = this.parseObjectPropertyKey(); value = this.parseGeneratorMethod(); method = true; } else { if (!key) { this.throwUnexpectedToken(this.lookahead); } kind = 'init'; if (this.match(':') && !isAsync) { if (!computed && this.isPropertyKey(key, '__proto__')) { if (hasProto.value) { this.tolerateError(messages_1.Messages.DuplicateProtoProperty); } hasProto.value = true; } this.nextToken(); value = this.inheritCoverGrammar(this.parseAssignmentExpression); } else if (this.match('(')) { value = isAsync ? this.parsePropertyMethodAsyncFunction() : this.parsePropertyMethodFunction(); method = true; } else if (token.type === 3 /* Identifier */) { var id = this.finalize(node, new Node.Identifier(token.value)); if (this.match('=')) { this.context.firstCoverInitializedNameError = this.lookahead; this.nextToken(); shorthand = true; var init = this.isolateCoverGrammar(this.parseAssignmentExpression); value = this.finalize(node, new Node.AssignmentPattern(id, init)); } else { shorthand = true; value = id; } } else { this.throwUnexpectedToken(this.nextToken()); } } return this.finalize(node, new Node.Property(kind, key, computed, value, method, shorthand)); }; Parser.prototype.parseObjectInitializer = function () { var node = this.createNode(); this.expect('{'); var properties = []; var hasProto = { value: false }; while (!this.match('}')) { properties.push(this.parseObjectProperty(hasProto)); if (!this.match('}')) { this.expectCommaSeparator(); } } this.expect('}'); return this.finalize(node, new Node.ObjectExpression(properties)); }; // https://tc39.github.io/ecma262/#sec-template-literals Parser.prototype.parseTemplateHead = function () { assert_1.assert(this.lookahead.head, 'Template literal must start with a template head'); var node = this.createNode(); var token = this.nextToken(); var raw = token.value; var cooked = token.cooked; return this.finalize(node, new Node.TemplateElement({ raw: raw, cooked: cooked }, token.tail)); }; Parser.prototype.parseTemplateElement = function () { if (this.lookahead.type !== 10 /* Template */) { this.throwUnexpectedToken(); } var node = this.createNode(); var token = this.nextToken(); var raw = token.value; var cooked = token.cooked; return this.finalize(node, new Node.TemplateElement({ raw: raw, cooked: cooked }, token.tail)); }; Parser.prototype.parseTemplateLiteral = function () { var node = this.createNode(); var expressions = []; var quasis = []; var quasi = this.parseTemplateHead(); quasis.push(quasi); while (!quasi.tail) { expressions.push(this.parseExpression()); quasi = this.parseTemplateElement(); quasis.push(quasi); } return this.finalize(node, new Node.TemplateLiteral(quasis, expressions)); }; // https://tc39.github.io/ecma262/#sec-grouping-operator Parser.prototype.reinterpretExpressionAsPattern = function (expr) { switch (expr.type) { case syntax_1.Syntax.Identifier: case syntax_1.Syntax.MemberExpression: case syntax_1.Syntax.RestElement: case syntax_1.Syntax.AssignmentPattern: break; case syntax_1.Syntax.SpreadElement: expr.type = syntax_1.Syntax.RestElement; this.reinterpretExpressionAsPattern(expr.argument); break; case syntax_1.Syntax.ArrayExpression: expr.type = syntax_1.Syntax.ArrayPattern; for (var i = 0; i < expr.elements.length; i++) { if (expr.elements[i] !== null) { this.reinterpretExpressionAsPattern(expr.elements[i]); } } break; case syntax_1.Syntax.ObjectExpression: expr.type = syntax_1.Syntax.ObjectPattern; for (var i = 0; i < expr.properties.length; i++) { this.reinterpretExpressionAsPattern(expr.properties[i].value); } break; case syntax_1.Syntax.AssignmentExpression: expr.type = syntax_1.Syntax.AssignmentPattern; delete expr.operator; this.reinterpretExpressionAsPattern(expr.left); break; default: // Allow other node type for tolerant parsing. break; } }; Parser.prototype.parseGroupExpression = function () { var expr; this.expect('('); if (this.match(')')) { this.nextToken(); if (!this.match('=>')) { this.expect('=>'); } expr = { type: ArrowParameterPlaceHolder, params: [], async: false }; } else { var startToken = this.lookahead; var params = []; if (this.match('...')) { expr = this.parseRestElement(params); this.expect(')'); if (!this.match('=>')) { this.expect('=>'); } expr = { type: ArrowParameterPlaceHolder, params: [expr], async: false }; } else { var arrow = false; this.context.isBindingElement = true; expr = this.inheritCoverGrammar(this.parseAssignmentExpression); if (this.match(',')) { var expressions = []; this.context.isAssignmentTarget = false; expressions.push(expr); while (this.lookahead.type !== 2 /* EOF */) { if (!this.match(',')) { break; } this.nextToken(); if (this.match(')')) { this.nextToken(); for (var i = 0; i < expressions.length; i++) { this.reinterpretExpressionAsPattern(expressions[i]); } arrow = true; expr = { type: ArrowParameterPlaceHolder, params: expressions, async: false }; } else if (this.match('...')) { if (!this.context.isBindingElement) { this.throwUnexpectedToken(this.lookahead); } expressions.push(this.parseRestElement(params)); this.expect(')'); if (!this.match('=>')) { this.expect('=>'); } this.context.isBindingElement = false; for (var i = 0; i < expressions.length; i++) { this.reinterpretExpressionAsPattern(expressions[i]); } arrow = true; expr = { type: ArrowParameterPlaceHolder, params: expressions, async: false }; } else { expressions.push(this.inheritCoverGrammar(this.parseAssignmentExpression)); } if (arrow) { break; } } if (!arrow) { expr = this.finalize(this.startNode(startToken), new Node.SequenceExpression(expressions)); } } if (!arrow) { this.expect(')'); if (this.match('=>')) { if (expr.type === syntax_1.Syntax.Identifier && expr.name === 'yield') { arrow = true; expr = { type: ArrowParameterPlaceHolder, params: [expr], async: false }; } if (!arrow) { if (!this.context.isBindingElement) { this.throwUnexpectedToken(this.lookahead); } if (expr.type === syntax_1.Syntax.SequenceExpression) { for (var i = 0; i < expr.expressions.length; i++) { this.reinterpretExpressionAsPattern(expr.expressions[i]); } } else { this.reinterpretExpressionAsPattern(expr); } var parameters = (expr.type === syntax_1.Syntax.SequenceExpression ? expr.expressions : [expr]); expr = { type: ArrowParameterPlaceHolder, params: parameters, async: false }; } } this.context.isBindingElement = false; } } } return expr; }; // https://tc39.github.io/ecma262/#sec-left-hand-side-expressions Parser.prototype.parseArguments = function () { this.expect('('); var args = []; if (!this.match(')')) { while (true) { var expr = this.match('...') ? this.parseSpreadElement() : this.isolateCoverGrammar(this.parseAssignmentExpression); args.push(expr); if (this.match(')')) { break; } this.expectCommaSeparator(); if (this.match(')')) { break; } } } this.expect(')'); return args; }; Parser.prototype.isIdentifierName = function (token) { return token.type === 3 /* Identifier */ || token.type === 4 /* Keyword */ || token.type === 1 /* BooleanLiteral */ || token.type === 5 /* NullLiteral */; }; Parser.prototype.parseIdentifierName = function () { var node = this.createNode(); var token = this.nextToken(); if (!this.isIdentifierName(token)) { this.throwUnexpectedToken(token); } return this.finalize(node, new Node.Identifier(token.value)); }; Parser.prototype.parseNewExpression = function () { var node = this.createNode(); var id = this.parseIdentifierName(); assert_1.assert(id.name === 'new', 'New expression must start with `new`'); var expr; if (this.match('.')) { this.nextToken(); if (this.lookahead.type === 3 /* Identifier */ && this.context.inFunctionBody && this.lookahead.value === 'target') { var property = this.parseIdentifierName(); expr = new Node.MetaProperty(id, property); } else { this.throwUnexpectedToken(this.lookahead); } } else { var callee = this.isolateCoverGrammar(this.parseLeftHandSideExpression); var args = this.match('(') ? this.parseArguments() : []; expr = new Node.NewExpression(callee, args); this.context.isAssignmentTarget = false; this.context.isBindingElement = false; } return this.finalize(node, expr); }; Parser.prototype.parseAsyncArgument = function () { var arg = this.parseAssignmentExpression(); this.context.firstCoverInitializedNameError = null; return arg; }; Parser.prototype.parseAsyncArguments = function () { this.expect('('); var args = []; if (!this.match(')')) { while (true) { var expr = this.match('...') ? this.parseSpreadElement() : this.isolateCoverGrammar(this.parseAsyncArgument); args.push(expr); if (this.match(')')) { break; } this.expectCommaSeparator(); if (this.match(')')) { break; } } } this.expect(')'); return args; }; Parser.prototype.parseLeftHandSideExpressionAllowCall = function () { var startToken = this.lookahead; var maybeAsync = this.matchContextualKeyword('async'); var previousAllowIn = this.context.allowIn; this.context.allowIn = true; var expr; if (this.matchKeyword('super') && this.context.inFunctionBody) { expr = this.createNode(); this.nextToken(); expr = this.finalize(expr, new Node.Super()); if (!this.match('(') && !this.match('.') && !this.match('[')) { this.throwUnexpectedToken(this.lookahead); } } else { expr = this.inheritCoverGrammar(this.matchKeyword('new') ? this.parseNewExpression : this.parsePrimaryExpression); } while (true) { if (this.match('.')) { this.context.isBindingElement = false; this.context.isAssignmentTarget = true; this.expect('.'); var property = this.parseIdentifierName(); expr = this.finalize(this.startNode(startToken), new Node.StaticMemberExpression(expr, property)); } else if (this.match('(')) { var asyncArrow = maybeAsync && (startToken.lineNumber === this.lookahead.lineNumber); this.context.isBindingElement = false; this.context.isAssignmentTarget = false; var args = asyncArrow ? this.parseAsyncArguments() : this.parseArguments(); expr = this.finalize(this.startNode(startToken), new Node.CallExpression(expr, args)); if (asyncArrow && this.match('=>')) { for (var i = 0; i < args.length; ++i) { this.reinterpretExpressionAsPattern(args[i]); } expr = { type: ArrowParameterPlaceHolder, params: args, async: true }; } } else if (this.match('[')) { this.context.isBindingElement = false; this.context.isAssignmentTarget = true; this.expect('['); var property = this.isolateCoverGrammar(this.parseExpression); this.expect(']'); expr = this.finalize(this.startNode(startToken), new Node.ComputedMemberExpression(expr, property)); } else if (this.lookahead.type === 10 /* Template */ && this.lookahead.head) { var quasi = this.parseTemplateLiteral(); expr = this.finalize(this.startNode(startToken), new Node.TaggedTemplateExpression(expr, quasi)); } else { break; } } this.context.allowIn = previousAllowIn; return expr; }; Parser.prototype.parseSuper = function () { var node = this.createNode(); this.expectKeyword('super'); if (!this.match('[') && !this.match('.')) { this.throwUnexpectedToken(this.lookahead); } return this.finalize(node, new Node.Super()); }; Parser.prototype.parseLeftHandSideExpression = function () { assert_1.assert(this.context.allowIn, 'callee of new expression always allow in keyword.'); var node = this.startNode(this.lookahead); var expr = (this.matchKeyword('super') && this.context.inFunctionBody) ? this.parseSuper() : this.inheritCoverGrammar(this.matchKeyword('new') ? this.parseNewExpression : this.parsePrimaryExpression); while (true) { if (this.match('[')) { this.context.isBindingElement = false; this.context.isAssignmentTarget = true; this.expect('['); var property = this.isolateCoverGrammar(this.parseExpression); this.expect(']'); expr = this.finalize(node, new Node.ComputedMemberExpression(expr, property)); } else if (this.match('.')) { this.context.isBindingElement = false; this.context.isAssignmentTarget = true; this.expect('.'); var property = this.parseIdentifierName(); expr = this.finalize(node, new Node.StaticMemberExpression(expr, property)); } else if (this.lookahead.type === 10 /* Template */ && this.lookahead.head) { var quasi = this.parseTemplateLiteral(); expr = this.finalize(node, new Node.TaggedTemplateExpression(expr, quasi)); } else { break; } } return expr; }; // https://tc39.github.io/ecma262/#sec-update-expressions Parser.prototype.parseUpdateExpression = function () { var expr; var startToken = this.lookahead; if (this.match('++') || this.match('--')) { var node = this.startNode(startToken); var token = this.nextToken(); expr = this.inheritCoverGrammar(this.parseUnaryExpression); if (this.context.strict && expr.type === syntax_1.Syntax.Identifier && this.scanner.isRestrictedWord(expr.name)) { this.tolerateError(messages_1.Messages.StrictLHSPrefix); } if (!this.context.isAssignmentTarget) { this.tolerateError(messages_1.Messages.InvalidLHSInAssignment); } var prefix = true; expr = this.finalize(node, new Node.UpdateExpression(token.value, expr, prefix)); this.context.isAssignmentTarget = false; this.context.isBindingElement = false; } else { expr = this.inheritCoverGrammar(this.parseLeftHandSideExpressionAllowCall); if (!this.hasLineTerminator && this.lookahead.type === 7 /* Punctuator */) { if (this.match('++') || this.match('--')) { if (this.context.strict && expr.type === syntax_1.Syntax.Identifier && this.scanner.isRestrictedWord(expr.name)) { this.tolerateError(messages_1.Messages.StrictLHSPostfix); } if (!this.context.isAssignmentTarget) { this.tolerateError(messages_1.Messages.InvalidLHSInAssignment); } this.context.isAssignmentTarget = false; this.context.isBindingElement = false; var operator = this.nextToken().value; var prefix = false; expr = this.finalize(this.startNode(startToken), new Node.UpdateExpression(operator, expr, prefix)); } } } return expr; }; // https://tc39.github.io/ecma262/#sec-unary-operators Parser.prototype.parseAwaitExpression = function () { var node = this.createNode(); this.nextToken(); var argument = this.parseUnaryExpression(); return this.finalize(node, new Node.AwaitExpression(argument)); }; Parser.prototype.parseUnaryExpression = function () { var expr; if (this.match('+') || this.match('-') || this.match('~') || this.match('!') || this.matchKeyword('delete') || this.matchKeyword('void') || this.matchKeyword('typeof')) { var node = this.startNode(this.lookahead); var token = this.nextToken(); expr = this.inheritCoverGrammar(this.parseUnaryExpression); expr = this.finalize(node, new Node.UnaryExpression(token.value, expr)); if (this.context.strict && expr.operator === 'delete' && expr.argument.type === syntax_1.Syntax.Identifier) { this.tolerateError(messages_1.Messages.StrictDelete); } this.context.isAssignmentTarget = false; this.context.isBindingElement = false; } else if (this.context.await && this.matchContextualKeyword('await')) { expr = this.parseAwaitExpression(); } else { expr = this.parseUpdateExpression(); } return expr; }; Parser.prototype.parseExponentiationExpression = function () { var startToken = this.lookahead; var expr = this.inheritCoverGrammar(this.parseUnaryExpression); if (expr.type !== syntax_1.Syntax.UnaryExpression && this.match('**')) { this.nextToken(); this.context.isAssignmentTarget = false; this.context.isBindingElement = false; var left = expr; var right = this.isolateCoverGrammar(this.parseExponentiationExpression); expr = this.finalize(this.startNode(startToken), new Node.BinaryExpression('**', left, right)); } return expr; }; // https://tc39.github.io/ecma262/#sec-exp-operator // https://tc39.github.io/ecma262/#sec-multiplicative-operators // https://tc39.github.io/ecma262/#sec-additive-operators // https://tc39.github.io/ecma262/#sec-bitwise-shift-operators // https://tc39.github.io/ecma262/#sec-relational-operators // https://tc39.github.io/ecma262/#sec-equality-operators // https://tc39.github.io/ecma262/#sec-binary-bitwise-operators // https://tc39.github.io/ecma262/#sec-binary-logical-operators Parser.prototype.binaryPrecedence = function (token) { var op = token.value; var precedence; if (token.type === 7 /* Punctuator */) { precedence = this.operatorPrecedence[op] || 0; } else if (token.type === 4 /* Keyword */) { precedence = (op === 'instanceof' || (this.context.allowIn && op === 'in')) ? 7 : 0; } else { precedence = 0; } return precedence; }; Parser.prototype.parseBinaryExpression = function () { var startToken = this.lookahead; var expr = this.inheritCoverGrammar(this.parseExponentiationExpression); var token = this.lookahead; var prec = this.binaryPrecedence(token); if (prec > 0) { this.nextToken(); this.context.isAssignmentTarget = false; this.context.isBindingElement = false; var markers = [startToken, this.lookahead]; var left = expr; var right = this.isolateCoverGrammar(this.parseExponentiationExpression); var stack = [left, token.value, right]; var precedences = [prec]; while (true) { prec = this.binaryPrecedence(this.lookahead); if (prec <= 0) { break; } // Reduce: make a binary expression from the three topmost entries. while ((stack.length > 2) && (prec <= precedences[precedences.length - 1])) { right = stack.pop(); var operator = stack.pop(); precedences.pop(); left = stack.pop(); markers.pop(); var node = this.startNode(markers[markers.length - 1]); stack.push(this.finalize(node, new Node.BinaryExpression(operator, left, right))); } // Shift. stack.push(this.nextToken().value); precedences.push(prec); markers.push(this.lookahead); stack.push(this.isolateCoverGrammar(this.parseExponentiationExpression)); } // Final reduce to clean-up the stack. var i = stack.length - 1; expr = stack[i]; var lastMarker = markers.pop(); while (i > 1) { var marker = markers.pop(); var lastLineStart = lastMarker && lastMarker.lineStart; var node = this.startNode(marker, lastLineStart); var operator = stack[i - 1]; expr = this.finalize(node, new Node.BinaryExpression(operator, stack[i - 2], expr)); i -= 2; lastMarker = marker; } } return expr; }; // https://tc39.github.io/ecma262/#sec-conditional-operator Parser.prototype.parseConditionalExpression = function () { var startToken = this.lookahead; var expr = this.inheritCoverGrammar(this.parseBinaryExpression); if (this.match('?')) { this.nextToken(); var previousAllowIn = this.context.allowIn; this.context.allowIn = true; var consequent = this.isolateCoverGrammar(this.parseAssignmentExpression); this.context.allowIn = previousAllowIn; this.expect(':'); var alternate = this.isolateCoverGrammar(this.parseAssignmentExpression); expr = this.finalize(this.startNode(startToken), new Node.ConditionalExpression(expr, consequent, alternate)); this.context.isAssignmentTarget = false; this.context.isBindingElement = false; } return expr; }; // https://tc39.github.io/ecma262/#sec-assignment-operators Parser.prototype.checkPatternParam = function (options, param) { switch (param.type) { case syntax_1.Syntax.Identifier: this.validateParam(options, param, param.name); break; case syntax_1.Syntax.RestElement: this.checkPatternParam(options, param.argument); break; case syntax_1.Syntax.AssignmentPattern: this.checkPatternParam(options, param.left); break; case syntax_1.Syntax.ArrayPattern: for (var i = 0; i < param.elements.length; i++) { if (param.elements[i] !== null) { this.checkPatternParam(options, param.elements[i]); } } break; case syntax_1.Syntax.ObjectPattern: for (var i = 0; i < param.properties.length; i++) { this.checkPatternParam(options, param.properties[i].value); } break; default: break; } options.simple = options.simple && (param instanceof Node.Identifier); }; Parser.prototype.reinterpretAsCoverFormalsList = function (expr) { var params = [expr]; var options; var asyncArrow = false; switch (expr.type) { case syntax_1.Syntax.Identifier: break; case ArrowParameterPlaceHolder: params = expr.params; asyncArrow = expr.async; break; default: return null; } options = { simple: true, paramSet: {} }; for (var i = 0; i < params.length; ++i) { var param = params[i]; if (param.type === syntax_1.Syntax.AssignmentPattern) { if (param.right.type === syntax_1.Syntax.YieldExpression) { if (param.right.argument) { this.throwUnexpectedToken(this.lookahead); } param.right.type = syntax_1.Syntax.Identifier; param.right.name = 'yield'; delete param.right.argument; delete param.right.delegate; } } else if (asyncArrow && param.type === syntax_1.Syntax.Identifier && param.name === 'await') { this.throwUnexpectedToken(this.lookahead); } this.checkPatternParam(options, param); params[i] = param; } if (this.context.strict || !this.context.allowYield) { for (var i = 0; i < params.length; ++i) { var param = params[i]; if (param.type === syntax_1.Syntax.YieldExpression) { this.throwUnexpectedToken(this.lookahead); } } } if (options.message === messages_1.Messages.StrictParamDupe) { var token = this.context.strict ? options.stricted : options.firstRestricted; this.throwUnexpectedToken(token, options.message); } return { simple: options.simple, params: params, stricted: options.stricted, firstRestricted: options.firstRestricted, message: options.message }; }; Parser.prototype.parseAssignmentExpression = function () { var expr; if (!this.context.allowYield && this.matchKeyword('yield')) { expr = this.parseYieldExpression(); } else { var startToken = this.lookahead; var token = startToken; expr = this.parseConditionalExpression(); if (token.type === 3 /* Identifier */ && (token.lineNumber === this.lookahead.lineNumber) && token.value === 'async') { if (this.lookahead.type === 3 /* Identifier */ || this.matchKeyword('yield')) { var arg = this.parsePrimaryExpression(); this.reinterpretExpressionAsPattern(arg); expr = { type: ArrowParameterPlaceHolder, params: [arg], async: true }; } } if (expr.type === ArrowParameterPlaceHolder || this.match('=>')) { // https://tc39.github.io/ecma262/#sec-arrow-function-definitions this.context.isAssignmentTarget = false; this.context.isBindingElement = false; var isAsync = expr.async; var list = this.reinterpretAsCoverFormalsList(expr); if (list) { if (this.hasLineTerminator) { this.tolerateUnexpectedToken(this.lookahead); } this.context.firstCoverInitializedNameError = null; var previousStrict = this.context.strict; var previousAllowStrictDirective = this.context.allowStrictDirective; this.context.allowStrictDirective = list.simple; var previousAllowYield = this.context.allowYield; var previousAwait = this.context.await; this.context.allowYield = true; this.context.await = isAsync; var node = this.startNode(startToken); this.expect('=>'); var body = void 0; if (this.match('{')) { var previousAllowIn = this.context.allowIn; this.context.allowIn = true; body = this.parseFunctionSourceElements(); this.context.allowIn = previousAllowIn; } else { body = this.isolateCoverGrammar(this.parseAssignmentExpression); } var expression = body.type !== syntax_1.Syntax.BlockStatement; if (this.context.strict && list.firstRestricted) { this.throwUnexpectedToken(list.firstRestricted, list.message); } if (this.context.strict && list.stricted) { this.tolerateUnexpectedToken(list.stricted, list.message); } expr = isAsync ? this.finalize(node, new Node.AsyncArrowFunctionExpression(list.params, body, expression)) : this.finalize(node, new Node.ArrowFunctionExpression(list.params, body, expression)); this.context.strict = previousStrict; this.context.allowStrictDirective = previousAllowStrictDirective; this.context.allowYield = previousAllowYield; this.context.await = previousAwait; } } else { if (this.matchAssign()) { if (!this.context.isAssignmentTarget) { this.tolerateError(messages_1.Messages.InvalidLHSInAssignment); } if (this.context.strict && expr.type === syntax_1.Syntax.Identifier) { var id = expr; if (this.scanner.isRestrictedWord(id.name)) { this.tolerateUnexpectedToken(token, messages_1.Messages.StrictLHSAssignment); } if (this.scanner.isStrictModeReservedWord(id.name)) { this.tolerateUnexpectedToken(token, messages_1.Messages.StrictReservedWord); } } if (!this.match('=')) { this.context.isAssignmentTarget = false; this.context.isBindingElement = false; } else { this.reinterpretExpressionAsPattern(expr); } token = this.nextToken(); var operator = token.value; var right = this.isolateCoverGrammar(this.parseAssignmentExpression); expr = this.finalize(this.startNode(startToken), new Node.AssignmentExpression(operator, expr, right)); this.context.firstCoverInitializedNameError = null; } } } return expr; }; // https://tc39.github.io/ecma262/#sec-comma-operator Parser.prototype.parseExpression = function () { var startToken = this.lookahead; var expr = this.isolateCoverGrammar(this.parseAssignmentExpression); if (this.match(',')) { var expressions = []; expressions.push(expr); while (this.lookahead.type !== 2 /* EOF */) { if (!this.match(',')) { break; } this.nextToken(); expressions.push(this.isolateCoverGrammar(this.parseAssignmentExpression)); } expr = this.finalize(this.startNode(startToken), new Node.SequenceExpression(expressions)); } return expr; }; // https://tc39.github.io/ecma262/#sec-block Parser.prototype.parseStatementListItem = function () { var statement; this.context.isAssignmentTarget = true; this.context.isBindingElement = true; if (this.lookahead.type === 4 /* Keyword */) { switch (this.lookahead.value) { case 'export': if (!this.context.isModule) { this.tolerateUnexpectedToken(this.lookahead, messages_1.Messages.IllegalExportDeclaration); } statement = this.parseExportDeclaration(); break; case 'import': if (!this.context.isModule) { this.tolerateUnexpectedToken(this.lookahead, messages_1.Messages.IllegalImportDeclaration); } statement = this.parseImportDeclaration(); break; case 'const': statement = this.parseLexicalDeclaration({ inFor: false }); break; case 'function': statement = this.parseFunctionDeclaration(); break; case 'class': statement = this.parseClassDeclaration(); break; case 'let': statement = this.isLexicalDeclaration() ? this.parseLexicalDeclaration({ inFor: false }) : this.parseStatement(); break; default: statement = this.parseStatement(); break; } } else { statement = this.parseStatement(); } return statement; }; Parser.prototype.parseBlock = function () { var node = this.createNode(); this.expect('{'); var block = []; while (true) { if (this.match('}')) { break; } block.push(this.parseStatementListItem()); } this.expect('}'); return this.finalize(node, new Node.BlockStatement(block)); }; // https://tc39.github.io/ecma262/#sec-let-and-const-declarations Parser.prototype.parseLexicalBinding = function (kind, options) { var node = this.createNode(); var params = []; var id = this.parsePattern(params, kind); if (this.context.strict && id.type === syntax_1.Syntax.Identifier) { if (this.scanner.isRestrictedWord(id.name)) { this.tolerateError(messages_1.Messages.StrictVarName); } } var init = null; if (kind === 'const') { if (!this.matchKeyword('in') && !this.matchContextualKeyword('of')) { if (this.match('=')) { this.nextToken(); init = this.isolateCoverGrammar(this.parseAssignmentExpression); } else { this.throwError(messages_1.Messages.DeclarationMissingInitializer, 'const'); } } } else if ((!options.inFor && id.type !== syntax_1.Syntax.Identifier) || this.match('=')) { this.expect('='); init = this.isolateCoverGrammar(this.parseAssignmentExpression); } return this.finalize(node, new Node.VariableDeclarator(id, init)); }; Parser.prototype.parseBindingList = function (kind, options) { var list = [this.parseLexicalBinding(kind, options)]; while (this.match(',')) { this.nextToken(); list.push(this.parseLexicalBinding(kind, options)); } return list; }; Parser.prototype.isLexicalDeclaration = function () { var state = this.scanner.saveState(); this.scanner.scanComments(); var next = this.scanner.lex(); this.scanner.restoreState(state); return (next.type === 3 /* Identifier */) || (next.type === 7 /* Punctuator */ && next.value === '[') || (next.type === 7 /* Punctuator */ && next.value === '{') || (next.type === 4 /* Keyword */ && next.value === 'let') || (next.type === 4 /* Keyword */ && next.value === 'yield'); }; Parser.prototype.parseLexicalDeclaration = function (options) { var node = this.createNode(); var kind = this.nextToken().value; assert_1.assert(kind === 'let' || kind === 'const', 'Lexical declaration must be either let or const'); var declarations = this.parseBindingList(kind, options); this.consumeSemicolon(); return this.finalize(node, new Node.VariableDeclaration(declarations, kind)); }; // https://tc39.github.io/ecma262/#sec-destructuring-binding-patterns Parser.prototype.parseBindingRestElement = function (params, kind) { var node = this.createNode(); this.expect('...'); var arg = this.parsePattern(params, kind); return this.finalize(node, new Node.RestElement(arg)); }; Parser.prototype.parseArrayPattern = function (params, kind) { var node = this.createNode(); this.expect('['); var elements = []; while (!this.match(']')) { if (this.match(',')) { this.nextToken(); elements.push(null); } else { if (this.match('...')) { elements.push(this.parseBindingRestElement(params, kind)); break; } else { elements.push(this.parsePatternWithDefault(params, kind)); } if (!this.match(']')) { this.expect(','); } } } this.expect(']'); return this.finalize(node, new Node.ArrayPattern(elements)); }; Parser.prototype.parsePropertyPattern = function (params, kind) { var node = this.createNode(); var computed = false; var shorthand = false; var method = false; var key; var value; if (this.lookahead.type === 3 /* Identifier */) { var keyToken = this.lookahead; key = this.parseVariableIdentifier(); var init = this.finalize(node, new Node.Identifier(keyToken.value)); if (this.match('=')) { params.push(keyToken); shorthand = true; this.nextToken(); var expr = this.parseAssignmentExpression(); value = this.finalize(this.startNode(keyToken), new Node.AssignmentPattern(init, expr)); } else if (!this.match(':')) { params.push(keyToken); shorthand = true; value = init; } else { this.expect(':'); value = this.parsePatternWithDefault(params, kind); } } else { computed = this.match('['); key = this.parseObjectPropertyKey(); this.expect(':'); value = this.parsePatternWithDefault(params, kind); } return this.finalize(node, new Node.Property('init', key, computed, value, method, shorthand)); }; Parser.prototype.parseObjectPattern = function (params, kind) { var node = this.createNode(); var properties = []; this.expect('{'); while (!this.match('}')) { properties.push(this.parsePropertyPattern(params, kind)); if (!this.match('}')) { this.expect(','); } } this.expect('}'); return this.finalize(node, new Node.ObjectPattern(properties)); }; Parser.prototype.parsePattern = function (params, kind) { var pattern; if (this.match('[')) { pattern = this.parseArrayPattern(params, kind); } else if (this.match('{')) { pattern = this.parseObjectPattern(params, kind); } else { if (this.matchKeyword('let') && (kind === 'const' || kind === 'let')) { this.tolerateUnexpectedToken(this.lookahead, messages_1.Messages.LetInLexicalBinding); } params.push(this.lookahead); pattern = this.parseVariableIdentifier(kind); } return pattern; }; Parser.prototype.parsePatternWithDefault = function (params, kind) { var startToken = this.lookahead; var pattern = this.parsePattern(params, kind); if (this.match('=')) { this.nextToken(); var previousAllowYield = this.context.allowYield; this.context.allowYield = true; var right = this.isolateCoverGrammar(this.parseAssignmentExpression); this.context.allowYield = previousAllowYield; pattern = this.finalize(this.startNode(startToken), new Node.AssignmentPattern(pattern, right)); } return pattern; }; // https://tc39.github.io/ecma262/#sec-variable-statement Parser.prototype.parseVariableIdentifier = function (kind) { var node = this.createNode(); var token = this.nextToken(); if (token.type === 4 /* Keyword */ && token.value === 'yield') { if (this.context.strict) { this.tolerateUnexpectedToken(token, messages_1.Messages.StrictReservedWord); } else if (!this.context.allowYield) { this.throwUnexpectedToken(token); } } else if (token.type !== 3 /* Identifier */) { if (this.context.strict && token.type === 4 /* Keyword */ && this.scanner.isStrictModeReservedWord(token.value)) { this.tolerateUnexpectedToken(token, messages_1.Messages.StrictReservedWord); } else { if (this.context.strict || token.value !== 'let' || kind !== 'var') { this.throwUnexpectedToken(token); } } } else if ((this.context.isModule || this.context.await) && token.type === 3 /* Identifier */ && token.value === 'await') { this.tolerateUnexpectedToken(token); } return this.finalize(node, new Node.Identifier(token.value)); }; Parser.prototype.parseVariableDeclaration = function (options) { var node = this.createNode(); var params = []; var id = this.parsePattern(params, 'var'); if (this.context.strict && id.type === syntax_1.Syntax.Identifier) { if (this.scanner.isRestrictedWord(id.name)) { this.tolerateError(messages_1.Messages.StrictVarName); } } var init = null; if (this.match('=')) { this.nextToken(); init = this.isolateCoverGrammar(this.parseAssignmentExpression); } else if (id.type !== syntax_1.Syntax.Identifier && !options.inFor) { this.expect('='); } return this.finalize(node, new Node.VariableDeclarator(id, init)); }; Parser.prototype.parseVariableDeclarationList = function (options) { var opt = { inFor: options.inFor }; var list = []; list.push(this.parseVariableDeclaration(opt)); while (this.match(',')) { this.nextToken(); list.push(this.parseVariableDeclaration(opt)); } return list; }; Parser.prototype.parseVariableStatement = function () { var node = this.createNode(); this.expectKeyword('var'); var declarations = this.parseVariableDeclarationList({ inFor: false }); this.consumeSemicolon(); return this.finalize(node, new Node.VariableDeclaration(declarations, 'var')); }; // https://tc39.github.io/ecma262/#sec-empty-statement Parser.prototype.parseEmptyStatement = function () { var node = this.createNode(); this.expect(';'); return this.finalize(node, new Node.EmptyStatement()); }; // https://tc39.github.io/ecma262/#sec-expression-statement Parser.prototype.parseExpressionStatement = function () { var node = this.createNode(); var expr = this.parseExpression(); this.consumeSemicolon(); return this.finalize(node, new Node.ExpressionStatement(expr)); }; // https://tc39.github.io/ecma262/#sec-if-statement Parser.prototype.parseIfClause = function () { if (this.context.strict && this.matchKeyword('function')) { this.tolerateError(messages_1.Messages.StrictFunction); } return this.parseStatement(); }; Parser.prototype.parseIfStatement = function () { var node = this.createNode(); var consequent; var alternate = null; this.expectKeyword('if'); this.expect('('); var test = this.parseExpression(); if (!this.match(')') && this.config.tolerant) { this.tolerateUnexpectedToken(this.nextToken()); consequent = this.finalize(this.createNode(), new Node.EmptyStatement()); } else { this.expect(')'); consequent = this.parseIfClause(); if (this.matchKeyword('else')) { this.nextToken(); alternate = this.parseIfClause(); } } return this.finalize(node, new Node.IfStatement(test, consequent, alternate)); }; // https://tc39.github.io/ecma262/#sec-do-while-statement Parser.prototype.parseDoWhileStatement = function () { var node = this.createNode(); this.expectKeyword('do'); var previousInIteration = this.context.inIteration; this.context.inIteration = true; var body = this.parseStatement(); this.context.inIteration = previousInIteration; this.expectKeyword('while'); this.expect('('); var test = this.parseExpression(); if (!this.match(')') && this.config.tolerant) { this.tolerateUnexpectedToken(this.nextToken()); } else { this.expect(')'); if (this.match(';')) { this.nextToken(); } } return this.finalize(node, new Node.DoWhileStatement(body, test)); }; // https://tc39.github.io/ecma262/#sec-while-statement Parser.prototype.parseWhileStatement = function () { var node = this.createNode(); var body; this.expectKeyword('while'); this.expect('('); var test = this.parseExpression(); if (!this.match(')') && this.config.tolerant) { this.tolerateUnexpectedToken(this.nextToken()); body = this.finalize(this.createNode(), new Node.EmptyStatement()); } else { this.expect(')'); var previousInIteration = this.context.inIteration; this.context.inIteration = true; body = this.parseStatement(); this.context.inIteration = previousInIteration; } return this.finalize(node, new Node.WhileStatement(test, body)); }; // https://tc39.github.io/ecma262/#sec-for-statement // https://tc39.github.io/ecma262/#sec-for-in-and-for-of-statements Parser.prototype.parseForStatement = function () { var init = null; var test = null; var update = null; var forIn = true; var left, right; var node = this.createNode(); this.expectKeyword('for'); this.expect('('); if (this.match(';')) { this.nextToken(); } else { if (this.matchKeyword('var')) { init = this.createNode(); this.nextToken(); var previousAllowIn = this.context.allowIn; this.context.allowIn = false; var declarations = this.parseVariableDeclarationList({ inFor: true }); this.context.allowIn = previousAllowIn; if (declarations.length === 1 && this.matchKeyword('in')) { var decl = declarations[0]; if (decl.init && (decl.id.type === syntax_1.Syntax.ArrayPattern || decl.id.type === syntax_1.Syntax.ObjectPattern || this.context.strict)) { this.tolerateError(messages_1.Messages.ForInOfLoopInitializer, 'for-in'); } init = this.finalize(init, new Node.VariableDeclaration(declarations, 'var')); this.nextToken(); left = init; right = this.parseExpression(); init = null; } else if (declarations.length === 1 && declarations[0].init === null && this.matchContextualKeyword('of')) { init = this.finalize(init, new Node.VariableDeclaration(declarations, 'var')); this.nextToken(); left = init; right = this.parseAssignmentExpression(); init = null; forIn = false; } else { init = this.finalize(init, new Node.VariableDeclaration(declarations, 'var')); this.expect(';'); } } else if (this.matchKeyword('const') || this.matchKeyword('let')) { init = this.createNode(); var kind = this.nextToken().value; if (!this.context.strict && this.lookahead.value === 'in') { init = this.finalize(init, new Node.Identifier(kind)); this.nextToken(); left = init; right = this.parseExpression(); init = null; } else { var previousAllowIn = this.context.allowIn; this.context.allowIn = false; var declarations = this.parseBindingList(kind, { inFor: true }); this.context.allowIn = previousAllowIn; if (declarations.length === 1 && declarations[0].init === null && this.matchKeyword('in')) { init = this.finalize(init, new Node.VariableDeclaration(declarations, kind)); this.nextToken(); left = init; right = this.parseExpression(); init = null; } else if (declarations.length === 1 && declarations[0].init === null && this.matchContextualKeyword('of')) { init = this.finalize(init, new Node.VariableDeclaration(declarations, kind)); this.nextToken(); left = init; right = this.parseAssignmentExpression(); init = null; forIn = false; } else { this.consumeSemicolon(); init = this.finalize(init, new Node.VariableDeclaration(declarations, kind)); } } } else { var initStartToken = this.lookahead; var previousAllowIn = this.context.allowIn; this.context.allowIn = false; init = this.inheritCoverGrammar(this.parseAssignmentExpression); this.context.allowIn = previousAllowIn; if (this.matchKeyword('in')) { if (!this.context.isAssignmentTarget || init.type === syntax_1.Syntax.AssignmentExpression) { this.tolerateError(messages_1.Messages.InvalidLHSInForIn); } this.nextToken(); this.reinterpretExpressionAsPattern(init); left = init; right = this.parseExpression(); init = null; } else if (this.matchContextualKeyword('of')) { if (!this.context.isAssignmentTarget || init.type === syntax_1.Syntax.AssignmentExpression) { this.tolerateError(messages_1.Messages.InvalidLHSInForLoop); } this.nextToken(); this.reinterpretExpressionAsPattern(init); left = init; right = this.parseAssignmentExpression(); init = null; forIn = false; } else { if (this.match(',')) { var initSeq = [init]; while (this.match(',')) { this.nextToken(); initSeq.push(this.isolateCoverGrammar(this.parseAssignmentExpression)); } init = this.finalize(this.startNode(initStartToken), new Node.SequenceExpression(initSeq)); } this.expect(';'); } } } if (typeof left === 'undefined') { if (!this.match(';')) { test = this.parseExpression(); } this.expect(';'); if (!this.match(')')) { update = this.parseExpression(); } } var body; if (!this.match(')') && this.config.tolerant) { this.tolerateUnexpectedToken(this.nextToken()); body = this.finalize(this.createNode(), new Node.EmptyStatement()); } else { this.expect(')'); var previousInIteration = this.context.inIteration; this.context.inIteration = true; body = this.isolateCoverGrammar(this.parseStatement); this.context.inIteration = previousInIteration; } return (typeof left === 'undefined') ? this.finalize(node, new Node.ForStatement(init, test, update, body)) : forIn ? this.finalize(node, new Node.ForInStatement(left, right, body)) : this.finalize(node, new Node.ForOfStatement(left, right, body)); }; // https://tc39.github.io/ecma262/#sec-continue-statement Parser.prototype.parseContinueStatement = function () { var node = this.createNode(); this.expectKeyword('continue'); var label = null; if (this.lookahead.type === 3 /* Identifier */ && !this.hasLineTerminator) { var id = this.parseVariableIdentifier(); label = id; var key = '$' + id.name; if (!Object.prototype.hasOwnProperty.call(this.context.labelSet, key)) { this.throwError(messages_1.Messages.UnknownLabel, id.name); } } this.consumeSemicolon(); if (label === null && !this.context.inIteration) { this.throwError(messages_1.Messages.IllegalContinue); } return this.finalize(node, new Node.ContinueStatement(label)); }; // https://tc39.github.io/ecma262/#sec-break-statement Parser.prototype.parseBreakStatement = function () { var node = this.createNode(); this.expectKeyword('break'); var label = null; if (this.lookahead.type === 3 /* Identifier */ && !this.hasLineTerminator) { var id = this.parseVariableIdentifier(); var key = '$' + id.name; if (!Object.prototype.hasOwnProperty.call(this.context.labelSet, key)) { this.throwError(messages_1.Messages.UnknownLabel, id.name); } label = id; } this.consumeSemicolon(); if (label === null && !this.context.inIteration && !this.context.inSwitch) { this.throwError(messages_1.Messages.IllegalBreak); } return this.finalize(node, new Node.BreakStatement(label)); }; // https://tc39.github.io/ecma262/#sec-return-statement Parser.prototype.parseReturnStatement = function () { if (!this.context.inFunctionBody) { this.tolerateError(messages_1.Messages.IllegalReturn); } var node = this.createNode(); this.expectKeyword('return'); var hasArgument = (!this.match(';') && !this.match('}') && !this.hasLineTerminator && this.lookahead.type !== 2 /* EOF */) || this.lookahead.type === 8 /* StringLiteral */ || this.lookahead.type === 10 /* Template */; var argument = hasArgument ? this.parseExpression() : null; this.consumeSemicolon(); return this.finalize(node, new Node.ReturnStatement(argument)); }; // https://tc39.github.io/ecma262/#sec-with-statement Parser.prototype.parseWithStatement = function () { if (this.context.strict) { this.tolerateError(messages_1.Messages.StrictModeWith); } var node = this.createNode(); var body; this.expectKeyword('with'); this.expect('('); var object = this.parseExpression(); if (!this.match(')') && this.config.tolerant) { this.tolerateUnexpectedToken(this.nextToken()); body = this.finalize(this.createNode(), new Node.EmptyStatement()); } else { this.expect(')'); body = this.parseStatement(); } return this.finalize(node, new Node.WithStatement(object, body)); }; // https://tc39.github.io/ecma262/#sec-switch-statement Parser.prototype.parseSwitchCase = function () { var node = this.createNode(); var test; if (this.matchKeyword('default')) { this.nextToken(); test = null; } else { this.expectKeyword('case'); test = this.parseExpression(); } this.expect(':'); var consequent = []; while (true) { if (this.match('}') || this.matchKeyword('default') || this.matchKeyword('case')) { break; } consequent.push(this.parseStatementListItem()); } return this.finalize(node, new Node.SwitchCase(test, consequent)); }; Parser.prototype.parseSwitchStatement = function () { var node = this.createNode(); this.expectKeyword('switch'); this.expect('('); var discriminant = this.parseExpression(); this.expect(')'); var previousInSwitch = this.context.inSwitch; this.context.inSwitch = true; var cases = []; var defaultFound = false; this.expect('{'); while (true) { if (this.match('}')) { break; } var clause = this.parseSwitchCase(); if (clause.test === null) { if (defaultFound) { this.throwError(messages_1.Messages.MultipleDefaultsInSwitch); } defaultFound = true; } cases.push(clause); } this.expect('}'); this.context.inSwitch = previousInSwitch; return this.finalize(node, new Node.SwitchStatement(discriminant, cases)); }; // https://tc39.github.io/ecma262/#sec-labelled-statements Parser.prototype.parseLabelledStatement = function () { var node = this.createNode(); var expr = this.parseExpression(); var statement; if ((expr.type === syntax_1.Syntax.Identifier) && this.match(':')) { this.nextToken(); var id = expr; var key = '$' + id.name; if (Object.prototype.hasOwnProperty.call(this.context.labelSet, key)) { this.throwError(messages_1.Messages.Redeclaration, 'Label', id.name); } this.context.labelSet[key] = true; var body = void 0; if (this.matchKeyword('class')) { this.tolerateUnexpectedToken(this.lookahead); body = this.parseClassDeclaration(); } else if (this.matchKeyword('function')) { var token = this.lookahead; var declaration = this.parseFunctionDeclaration(); if (this.context.strict) { this.tolerateUnexpectedToken(token, messages_1.Messages.StrictFunction); } else if (declaration.generator) { this.tolerateUnexpectedToken(token, messages_1.Messages.GeneratorInLegacyContext); } body = declaration; } else { body = this.parseStatement(); } delete this.context.labelSet[key]; statement = new Node.LabeledStatement(id, body); } else { this.consumeSemicolon(); statement = new Node.ExpressionStatement(expr); } return this.finalize(node, statement); }; // https://tc39.github.io/ecma262/#sec-throw-statement Parser.prototype.parseThrowStatement = function () { var node = this.createNode(); this.expectKeyword('throw'); if (this.hasLineTerminator) { this.throwError(messages_1.Messages.NewlineAfterThrow); } var argument = this.parseExpression(); this.consumeSemicolon(); return this.finalize(node, new Node.ThrowStatement(argument)); }; // https://tc39.github.io/ecma262/#sec-try-statement Parser.prototype.parseCatchClause = function () { var node = this.createNode(); this.expectKeyword('catch'); this.expect('('); if (this.match(')')) { this.throwUnexpectedToken(this.lookahead); } var params = []; var param = this.parsePattern(params); var paramMap = {}; for (var i = 0; i < params.length; i++) { var key = '$' + params[i].value; if (Object.prototype.hasOwnProperty.call(paramMap, key)) { this.tolerateError(messages_1.Messages.DuplicateBinding, params[i].value); } paramMap[key] = true; } if (this.context.strict && param.type === syntax_1.Syntax.Identifier) { if (this.scanner.isRestrictedWord(param.name)) { this.tolerateError(messages_1.Messages.StrictCatchVariable); } } this.expect(')'); var body = this.parseBlock(); return this.finalize(node, new Node.CatchClause(param, body)); }; Parser.prototype.parseFinallyClause = function () { this.expectKeyword('finally'); return this.parseBlock(); }; Parser.prototype.parseTryStatement = function () { var node = this.createNode(); this.expectKeyword('try'); var block = this.parseBlock(); var handler = this.matchKeyword('catch') ? this.parseCatchClause() : null; var finalizer = this.matchKeyword('finally') ? this.parseFinallyClause() : null; if (!handler && !finalizer) { this.throwError(messages_1.Messages.NoCatchOrFinally); } return this.finalize(node, new Node.TryStatement(block, handler, finalizer)); }; // https://tc39.github.io/ecma262/#sec-debugger-statement Parser.prototype.parseDebuggerStatement = function () { var node = this.createNode(); this.expectKeyword('debugger'); this.consumeSemicolon(); return this.finalize(node, new Node.DebuggerStatement()); }; // https://tc39.github.io/ecma262/#sec-ecmascript-language-statements-and-declarations Parser.prototype.parseStatement = function () { var statement; switch (this.lookahead.type) { case 1 /* BooleanLiteral */: case 5 /* NullLiteral */: case 6 /* NumericLiteral */: case 8 /* StringLiteral */: case 10 /* Template */: case 9 /* RegularExpression */: statement = this.parseExpressionStatement(); break; case 7 /* Punctuator */: var value = this.lookahead.value; if (value === '{') { statement = this.parseBlock(); } else if (value === '(') { statement = this.parseExpressionStatement(); } else if (value === ';') { statement = this.parseEmptyStatement(); } else { statement = this.parseExpressionStatement(); } break; case 3 /* Identifier */: statement = this.matchAsyncFunction() ? this.parseFunctionDeclaration() : this.parseLabelledStatement(); break; case 4 /* Keyword */: switch (this.lookahead.value) { case 'break': statement = this.parseBreakStatement(); break; case 'continue': statement = this.parseContinueStatement(); break; case 'debugger': statement = this.parseDebuggerStatement(); break; case 'do': statement = this.parseDoWhileStatement(); break; case 'for': statement = this.parseForStatement(); break; case 'function': statement = this.parseFunctionDeclaration(); break; case 'if': statement = this.parseIfStatement(); break; case 'return': statement = this.parseReturnStatement(); break; case 'switch': statement = this.parseSwitchStatement(); break; case 'throw': statement = this.parseThrowStatement(); break; case 'try': statement = this.parseTryStatement(); break; case 'var': statement = this.parseVariableStatement(); break; case 'while': statement = this.parseWhileStatement(); break; case 'with': statement = this.parseWithStatement(); break; default: statement = this.parseExpressionStatement(); break; } break; default: statement = this.throwUnexpectedToken(this.lookahead); } return statement; }; // https://tc39.github.io/ecma262/#sec-function-definitions Parser.prototype.parseFunctionSourceElements = function () { var node = this.createNode(); this.expect('{'); var body = this.parseDirectivePrologues(); var previousLabelSet = this.context.labelSet; var previousInIteration = this.context.inIteration; var previousInSwitch = this.context.inSwitch; var previousInFunctionBody = this.context.inFunctionBody; this.context.labelSet = {}; this.context.inIteration = false; this.context.inSwitch = false; this.context.inFunctionBody = true; while (this.lookahead.type !== 2 /* EOF */) { if (this.match('}')) { break; } body.push(this.parseStatementListItem()); } this.expect('}'); this.context.labelSet = previousLabelSet; this.context.inIteration = previousInIteration; this.context.inSwitch = previousInSwitch; this.context.inFunctionBody = previousInFunctionBody; return this.finalize(node, new Node.BlockStatement(body)); }; Parser.prototype.validateParam = function (options, param, name) { var key = '$' + name; if (this.context.strict) { if (this.scanner.isRestrictedWord(name)) { options.stricted = param; options.message = messages_1.Messages.StrictParamName; } if (Object.prototype.hasOwnProperty.call(options.paramSet, key)) { options.stricted = param; options.message = messages_1.Messages.StrictParamDupe; } } else if (!options.firstRestricted) { if (this.scanner.isRestrictedWord(name)) { options.firstRestricted = param; options.message = messages_1.Messages.StrictParamName; } else if (this.scanner.isStrictModeReservedWord(name)) { options.firstRestricted = param; options.message = messages_1.Messages.StrictReservedWord; } else if (Object.prototype.hasOwnProperty.call(options.paramSet, key)) { options.stricted = param; options.message = messages_1.Messages.StrictParamDupe; } } /* istanbul ignore next */ if (typeof Object.defineProperty === 'function') { Object.defineProperty(options.paramSet, key, { value: true, enumerable: true, writable: true, configurable: true }); } else { options.paramSet[key] = true; } }; Parser.prototype.parseRestElement = function (params) { var node = this.createNode(); this.expect('...'); var arg = this.parsePattern(params); if (this.match('=')) { this.throwError(messages_1.Messages.DefaultRestParameter); } if (!this.match(')')) { this.throwError(messages_1.Messages.ParameterAfterRestParameter); } return this.finalize(node, new Node.RestElement(arg)); }; Parser.prototype.parseFormalParameter = function (options) { var params = []; var param = this.match('...') ? this.parseRestElement(params) : this.parsePatternWithDefault(params); for (var i = 0; i < params.length; i++) { this.validateParam(options, params[i], params[i].value); } options.simple = options.simple && (param instanceof Node.Identifier); options.params.push(param); }; Parser.prototype.parseFormalParameters = function (firstRestricted) { var options; options = { simple: true, params: [], firstRestricted: firstRestricted }; this.expect('('); if (!this.match(')')) { options.paramSet = {}; while (this.lookahead.type !== 2 /* EOF */) { this.parseFormalParameter(options); if (this.match(')')) { break; } this.expect(','); if (this.match(')')) { break; } } } this.expect(')'); return { simple: options.simple, params: options.params, stricted: options.stricted, firstRestricted: options.firstRestricted, message: options.message }; }; Parser.prototype.matchAsyncFunction = function () { var match = this.matchContextualKeyword('async'); if (match) { var state = this.scanner.saveState(); this.scanner.scanComments(); var next = this.scanner.lex(); this.scanner.restoreState(state); match = (state.lineNumber === next.lineNumber) && (next.type === 4 /* Keyword */) && (next.value === 'function'); } return match; }; Parser.prototype.parseFunctionDeclaration = function (identifierIsOptional) { var node = this.createNode(); var isAsync = this.matchContextualKeyword('async'); if (isAsync) { this.nextToken(); } this.expectKeyword('function'); var isGenerator = isAsync ? false : this.match('*'); if (isGenerator) { this.nextToken(); } var message; var id = null; var firstRestricted = null; if (!identifierIsOptional || !this.match('(')) { var token = this.lookahead; id = this.parseVariableIdentifier(); if (this.context.strict) { if (this.scanner.isRestrictedWord(token.value)) { this.tolerateUnexpectedToken(token, messages_1.Messages.StrictFunctionName); } } else { if (this.scanner.isRestrictedWord(token.value)) { firstRestricted = token; message = messages_1.Messages.StrictFunctionName; } else if (this.scanner.isStrictModeReservedWord(token.value)) { firstRestricted = token; message = messages_1.Messages.StrictReservedWord; } } } var previousAllowAwait = this.context.await; var previousAllowYield = this.context.allowYield; this.context.await = isAsync; this.context.allowYield = !isGenerator; var formalParameters = this.parseFormalParameters(firstRestricted); var params = formalParameters.params; var stricted = formalParameters.stricted; firstRestricted = formalParameters.firstRestricted; if (formalParameters.message) { message = formalParameters.message; } var previousStrict = this.context.strict; var previousAllowStrictDirective = this.context.allowStrictDirective; this.context.allowStrictDirective = formalParameters.simple; var body = this.parseFunctionSourceElements(); if (this.context.strict && firstRestricted) { this.throwUnexpectedToken(firstRestricted, message); } if (this.context.strict && stricted) { this.tolerateUnexpectedToken(stricted, message); } this.context.strict = previousStrict; this.context.allowStrictDirective = previousAllowStrictDirective; this.context.await = previousAllowAwait; this.context.allowYield = previousAllowYield; return isAsync ? this.finalize(node, new Node.AsyncFunctionDeclaration(id, params, body)) : this.finalize(node, new Node.FunctionDeclaration(id, params, body, isGenerator)); }; Parser.prototype.parseFunctionExpression = function () { var node = this.createNode(); var isAsync = this.matchContextualKeyword('async'); if (isAsync) { this.nextToken(); } this.expectKeyword('function'); var isGenerator = isAsync ? false : this.match('*'); if (isGenerator) { this.nextToken(); } var message; var id = null; var firstRestricted; var previousAllowAwait = this.context.await; var previousAllowYield = this.context.allowYield; this.context.await = isAsync; this.context.allowYield = !isGenerator; if (!this.match('(')) { var token = this.lookahead; id = (!this.context.strict && !isGenerator && this.matchKeyword('yield')) ? this.parseIdentifierName() : this.parseVariableIdentifier(); if (this.context.strict) { if (this.scanner.isRestrictedWord(token.value)) { this.tolerateUnexpectedToken(token, messages_1.Messages.StrictFunctionName); } } else { if (this.scanner.isRestrictedWord(token.value)) { firstRestricted = token; message = messages_1.Messages.StrictFunctionName; } else if (this.scanner.isStrictModeReservedWord(token.value)) { firstRestricted = token; message = messages_1.Messages.StrictReservedWord; } } } var formalParameters = this.parseFormalParameters(firstRestricted); var params = formalParameters.params; var stricted = formalParameters.stricted; firstRestricted = formalParameters.firstRestricted; if (formalParameters.message) { message = formalParameters.message; } var previousStrict = this.context.strict; var previousAllowStrictDirective = this.context.allowStrictDirective; this.context.allowStrictDirective = formalParameters.simple; var body = this.parseFunctionSourceElements(); if (this.context.strict && firstRestricted) { this.throwUnexpectedToken(firstRestricted, message); } if (this.context.strict && stricted) { this.tolerateUnexpectedToken(stricted, message); } this.context.strict = previousStrict; this.context.allowStrictDirective = previousAllowStrictDirective; this.context.await = previousAllowAwait; this.context.allowYield = previousAllowYield; return isAsync ? this.finalize(node, new Node.AsyncFunctionExpression(id, params, body)) : this.finalize(node, new Node.FunctionExpression(id, params, body, isGenerator)); }; // https://tc39.github.io/ecma262/#sec-directive-prologues-and-the-use-strict-directive Parser.prototype.parseDirective = function () { var token = this.lookahead; var node = this.createNode(); var expr = this.parseExpression(); var directive = (expr.type === syntax_1.Syntax.Literal) ? this.getTokenRaw(token).slice(1, -1) : null; this.consumeSemicolon(); return this.finalize(node, directive ? new Node.Directive(expr, directive) : new Node.ExpressionStatement(expr)); }; Parser.prototype.parseDirectivePrologues = function () { var firstRestricted = null; var body = []; while (true) { var token = this.lookahead; if (token.type !== 8 /* StringLiteral */) { break; } var statement = this.parseDirective(); body.push(statement); var directive = statement.directive; if (typeof directive !== 'string') { break; } if (directive === 'use strict') { this.context.strict = true; if (firstRestricted) { this.tolerateUnexpectedToken(firstRestricted, messages_1.Messages.StrictOctalLiteral); } if (!this.context.allowStrictDirective) { this.tolerateUnexpectedToken(token, messages_1.Messages.IllegalLanguageModeDirective); } } else { if (!firstRestricted && token.octal) { firstRestricted = token; } } } return body; }; // https://tc39.github.io/ecma262/#sec-method-definitions Parser.prototype.qualifiedPropertyName = function (token) { switch (token.type) { case 3 /* Identifier */: case 8 /* StringLiteral */: case 1 /* BooleanLiteral */: case 5 /* NullLiteral */: case 6 /* NumericLiteral */: case 4 /* Keyword */: return true; case 7 /* Punctuator */: return token.value === '['; default: break; } return false; }; Parser.prototype.parseGetterMethod = function () { var node = this.createNode(); var isGenerator = false; var previousAllowYield = this.context.allowYield; this.context.allowYield = !isGenerator; var formalParameters = this.parseFormalParameters(); if (formalParameters.params.length > 0) { this.tolerateError(messages_1.Messages.BadGetterArity); } var method = this.parsePropertyMethod(formalParameters); this.context.allowYield = previousAllowYield; return this.finalize(node, new Node.FunctionExpression(null, formalParameters.params, method, isGenerator)); }; Parser.prototype.parseSetterMethod = function () { var node = this.createNode(); var isGenerator = false; var previousAllowYield = this.context.allowYield; this.context.allowYield = !isGenerator; var formalParameters = this.parseFormalParameters(); if (formalParameters.params.length !== 1) { this.tolerateError(messages_1.Messages.BadSetterArity); } else if (formalParameters.params[0] instanceof Node.RestElement) { this.tolerateError(messages_1.Messages.BadSetterRestParameter); } var method = this.parsePropertyMethod(formalParameters); this.context.allowYield = previousAllowYield; return this.finalize(node, new Node.FunctionExpression(null, formalParameters.params, method, isGenerator)); }; Parser.prototype.parseGeneratorMethod = function () { var node = this.createNode(); var isGenerator = true; var previousAllowYield = this.context.allowYield; this.context.allowYield = true; var params = this.parseFormalParameters(); this.context.allowYield = false; var method = this.parsePropertyMethod(params); this.context.allowYield = previousAllowYield; return this.finalize(node, new Node.FunctionExpression(null, params.params, method, isGenerator)); }; // https://tc39.github.io/ecma262/#sec-generator-function-definitions Parser.prototype.isStartOfExpression = function () { var start = true; var value = this.lookahead.value; switch (this.lookahead.type) { case 7 /* Punctuator */: start = (value === '[') || (value === '(') || (value === '{') || (value === '+') || (value === '-') || (value === '!') || (value === '~') || (value === '++') || (value === '--') || (value === '/') || (value === '/='); // regular expression literal break; case 4 /* Keyword */: start = (value === 'class') || (value === 'delete') || (value === 'function') || (value === 'let') || (value === 'new') || (value === 'super') || (value === 'this') || (value === 'typeof') || (value === 'void') || (value === 'yield'); break; default: break; } return start; }; Parser.prototype.parseYieldExpression = function () { var node = this.createNode(); this.expectKeyword('yield'); var argument = null; var delegate = false; if (!this.hasLineTerminator) { var previousAllowYield = this.context.allowYield; this.context.allowYield = false; delegate = this.match('*'); if (delegate) { this.nextToken(); argument = this.parseAssignmentExpression(); } else if (this.isStartOfExpression()) { argument = this.parseAssignmentExpression(); } this.context.allowYield = previousAllowYield; } return this.finalize(node, new Node.YieldExpression(argument, delegate)); }; // https://tc39.github.io/ecma262/#sec-class-definitions Parser.prototype.parseClassElement = function (hasConstructor) { var token = this.lookahead; var node = this.createNode(); var kind = ''; var key = null; var value = null; var computed = false; var method = false; var isStatic = false; var isAsync = false; if (this.match('*')) { this.nextToken(); } else { computed = this.match('['); key = this.parseObjectPropertyKey(); var id = key; if (id.name === 'static' && (this.qualifiedPropertyName(this.lookahead) || this.match('*'))) { token = this.lookahead; isStatic = true; computed = this.match('['); if (this.match('*')) { this.nextToken(); } else { key = this.parseObjectPropertyKey(); } } if ((token.type === 3 /* Identifier */) && !this.hasLineTerminator && (token.value === 'async')) { var punctuator = this.lookahead.value; if (punctuator !== ':' && punctuator !== '(' && punctuator !== '*') { isAsync = true; token = this.lookahead; key = this.parseObjectPropertyKey(); if (token.type === 3 /* Identifier */ && token.value === 'constructor') { this.tolerateUnexpectedToken(token, messages_1.Messages.ConstructorIsAsync); } } } } var lookaheadPropertyKey = this.qualifiedPropertyName(this.lookahead); if (token.type === 3 /* Identifier */) { if (token.value === 'get' && lookaheadPropertyKey) { kind = 'get'; computed = this.match('['); key = this.parseObjectPropertyKey(); this.context.allowYield = false; value = this.parseGetterMethod(); } else if (token.value === 'set' && lookaheadPropertyKey) { kind = 'set'; computed = this.match('['); key = this.parseObjectPropertyKey(); value = this.parseSetterMethod(); } } else if (token.type === 7 /* Punctuator */ && token.value === '*' && lookaheadPropertyKey) { kind = 'init'; computed = this.match('['); key = this.parseObjectPropertyKey(); value = this.parseGeneratorMethod(); method = true; } if (!kind && key && this.match('(')) { kind = 'init'; value = isAsync ? this.parsePropertyMethodAsyncFunction() : this.parsePropertyMethodFunction(); method = true; } if (!kind) { this.throwUnexpectedToken(this.lookahead); } if (kind === 'init') { kind = 'method'; } if (!computed) { if (isStatic && this.isPropertyKey(key, 'prototype')) { this.throwUnexpectedToken(token, messages_1.Messages.StaticPrototype); } if (!isStatic && this.isPropertyKey(key, 'constructor')) { if (kind !== 'method' || !method || (value && value.generator)) { this.throwUnexpectedToken(token, messages_1.Messages.ConstructorSpecialMethod); } if (hasConstructor.value) { this.throwUnexpectedToken(token, messages_1.Messages.DuplicateConstructor); } else { hasConstructor.value = true; } kind = 'constructor'; } } return this.finalize(node, new Node.MethodDefinition(key, computed, value, kind, isStatic)); }; Parser.prototype.parseClassElementList = function () { var body = []; var hasConstructor = { value: false }; this.expect('{'); while (!this.match('}')) { if (this.match(';')) { this.nextToken(); } else { body.push(this.parseClassElement(hasConstructor)); } } this.expect('}'); return body; }; Parser.prototype.parseClassBody = function () { var node = this.createNode(); var elementList = this.parseClassElementList(); return this.finalize(node, new Node.ClassBody(elementList)); }; Parser.prototype.parseClassDeclaration = function (identifierIsOptional) { var node = this.createNode(); var previousStrict = this.context.strict; this.context.strict = true; this.expectKeyword('class'); var id = (identifierIsOptional && (this.lookahead.type !== 3 /* Identifier */)) ? null : this.parseVariableIdentifier(); var superClass = null; if (this.matchKeyword('extends')) { this.nextToken(); superClass = this.isolateCoverGrammar(this.parseLeftHandSideExpressionAllowCall); } var classBody = this.parseClassBody(); this.context.strict = previousStrict; return this.finalize(node, new Node.ClassDeclaration(id, superClass, classBody)); }; Parser.prototype.parseClassExpression = function () { var node = this.createNode(); var previousStrict = this.context.strict; this.context.strict = true; this.expectKeyword('class'); var id = (this.lookahead.type === 3 /* Identifier */) ? this.parseVariableIdentifier() : null; var superClass = null; if (this.matchKeyword('extends')) { this.nextToken(); superClass = this.isolateCoverGrammar(this.parseLeftHandSideExpressionAllowCall); } var classBody = this.parseClassBody(); this.context.strict = previousStrict; return this.finalize(node, new Node.ClassExpression(id, superClass, classBody)); }; // https://tc39.github.io/ecma262/#sec-scripts // https://tc39.github.io/ecma262/#sec-modules Parser.prototype.parseModule = function () { this.context.strict = true; this.context.isModule = true; this.scanner.isModule = true; var node = this.createNode(); var body = this.parseDirectivePrologues(); while (this.lookahead.type !== 2 /* EOF */) { body.push(this.parseStatementListItem()); } return this.finalize(node, new Node.Module(body)); }; Parser.prototype.parseScript = function () { var node = this.createNode(); var body = this.parseDirectivePrologues(); while (this.lookahead.type !== 2 /* EOF */) { body.push(this.parseStatementListItem()); } return this.finalize(node, new Node.Script(body)); }; // https://tc39.github.io/ecma262/#sec-imports Parser.prototype.parseModuleSpecifier = function () { var node = this.createNode(); if (this.lookahead.type !== 8 /* StringLiteral */) { this.throwError(messages_1.Messages.InvalidModuleSpecifier); } var token = this.nextToken(); var raw = this.getTokenRaw(token); return this.finalize(node, new Node.Literal(token.value, raw)); }; // import {} ...; Parser.prototype.parseImportSpecifier = function () { var node = this.createNode(); var imported; var local; if (this.lookahead.type === 3 /* Identifier */) { imported = this.parseVariableIdentifier(); local = imported; if (this.matchContextualKeyword('as')) { this.nextToken(); local = this.parseVariableIdentifier(); } } else { imported = this.parseIdentifierName(); local = imported; if (this.matchContextualKeyword('as')) { this.nextToken(); local = this.parseVariableIdentifier(); } else { this.throwUnexpectedToken(this.nextToken()); } } return this.finalize(node, new Node.ImportSpecifier(local, imported)); }; // {foo, bar as bas} Parser.prototype.parseNamedImports = function () { this.expect('{'); var specifiers = []; while (!this.match('}')) { specifiers.push(this.parseImportSpecifier()); if (!this.match('}')) { this.expect(','); } } this.expect('}'); return specifiers; }; // import ...; Parser.prototype.parseImportDefaultSpecifier = function () { var node = this.createNode(); var local = this.parseIdentifierName(); return this.finalize(node, new Node.ImportDefaultSpecifier(local)); }; // import <* as foo> ...; Parser.prototype.parseImportNamespaceSpecifier = function () { var node = this.createNode(); this.expect('*'); if (!this.matchContextualKeyword('as')) { this.throwError(messages_1.Messages.NoAsAfterImportNamespace); } this.nextToken(); var local = this.parseIdentifierName(); return this.finalize(node, new Node.ImportNamespaceSpecifier(local)); }; Parser.prototype.parseImportDeclaration = function () { if (this.context.inFunctionBody) { this.throwError(messages_1.Messages.IllegalImportDeclaration); } var node = this.createNode(); this.expectKeyword('import'); var src; var specifiers = []; if (this.lookahead.type === 8 /* StringLiteral */) { // import 'foo'; src = this.parseModuleSpecifier(); } else { if (this.match('{')) { // import {bar} specifiers = specifiers.concat(this.parseNamedImports()); } else if (this.match('*')) { // import * as foo specifiers.push(this.parseImportNamespaceSpecifier()); } else if (this.isIdentifierName(this.lookahead) && !this.matchKeyword('default')) { // import foo specifiers.push(this.parseImportDefaultSpecifier()); if (this.match(',')) { this.nextToken(); if (this.match('*')) { // import foo, * as foo specifiers.push(this.parseImportNamespaceSpecifier()); } else if (this.match('{')) { // import foo, {bar} specifiers = specifiers.concat(this.parseNamedImports()); } else { this.throwUnexpectedToken(this.lookahead); } } } else { this.throwUnexpectedToken(this.nextToken()); } if (!this.matchContextualKeyword('from')) { var message = this.lookahead.value ? messages_1.Messages.UnexpectedToken : messages_1.Messages.MissingFromClause; this.throwError(message, this.lookahead.value); } this.nextToken(); src = this.parseModuleSpecifier(); } this.consumeSemicolon(); return this.finalize(node, new Node.ImportDeclaration(specifiers, src)); }; // https://tc39.github.io/ecma262/#sec-exports Parser.prototype.parseExportSpecifier = function () { var node = this.createNode(); var local = this.parseIdentifierName(); var exported = local; if (this.matchContextualKeyword('as')) { this.nextToken(); exported = this.parseIdentifierName(); } return this.finalize(node, new Node.ExportSpecifier(local, exported)); }; Parser.prototype.parseExportDeclaration = function () { if (this.context.inFunctionBody) { this.throwError(messages_1.Messages.IllegalExportDeclaration); } var node = this.createNode(); this.expectKeyword('export'); var exportDeclaration; if (this.matchKeyword('default')) { // export default ... this.nextToken(); if (this.matchKeyword('function')) { // export default function foo () {} // export default function () {} var declaration = this.parseFunctionDeclaration(true); exportDeclaration = this.finalize(node, new Node.ExportDefaultDeclaration(declaration)); } else if (this.matchKeyword('class')) { // export default class foo {} var declaration = this.parseClassDeclaration(true); exportDeclaration = this.finalize(node, new Node.ExportDefaultDeclaration(declaration)); } else if (this.matchContextualKeyword('async')) { // export default async function f () {} // export default async function () {} // export default async x => x var declaration = this.matchAsyncFunction() ? this.parseFunctionDeclaration(true) : this.parseAssignmentExpression(); exportDeclaration = this.finalize(node, new Node.ExportDefaultDeclaration(declaration)); } else { if (this.matchContextualKeyword('from')) { this.throwError(messages_1.Messages.UnexpectedToken, this.lookahead.value); } // export default {}; // export default []; // export default (1 + 2); var declaration = this.match('{') ? this.parseObjectInitializer() : this.match('[') ? this.parseArrayInitializer() : this.parseAssignmentExpression(); this.consumeSemicolon(); exportDeclaration = this.finalize(node, new Node.ExportDefaultDeclaration(declaration)); } } else if (this.match('*')) { // export * from 'foo'; this.nextToken(); if (!this.matchContextualKeyword('from')) { var message = this.lookahead.value ? messages_1.Messages.UnexpectedToken : messages_1.Messages.MissingFromClause; this.throwError(message, this.lookahead.value); } this.nextToken(); var src = this.parseModuleSpecifier(); this.consumeSemicolon(); exportDeclaration = this.finalize(node, new Node.ExportAllDeclaration(src)); } else if (this.lookahead.type === 4 /* Keyword */) { // export var f = 1; var declaration = void 0; switch (this.lookahead.value) { case 'let': case 'const': declaration = this.parseLexicalDeclaration({ inFor: false }); break; case 'var': case 'class': case 'function': declaration = this.parseStatementListItem(); break; default: this.throwUnexpectedToken(this.lookahead); } exportDeclaration = this.finalize(node, new Node.ExportNamedDeclaration(declaration, [], null)); } else if (this.matchAsyncFunction()) { var declaration = this.parseFunctionDeclaration(); exportDeclaration = this.finalize(node, new Node.ExportNamedDeclaration(declaration, [], null)); } else { var specifiers = []; var source = null; var isExportFromIdentifier = false; this.expect('{'); while (!this.match('}')) { isExportFromIdentifier = isExportFromIdentifier || this.matchKeyword('default'); specifiers.push(this.parseExportSpecifier()); if (!this.match('}')) { this.expect(','); } } this.expect('}'); if (this.matchContextualKeyword('from')) { // export {default} from 'foo'; // export {foo} from 'foo'; this.nextToken(); source = this.parseModuleSpecifier(); this.consumeSemicolon(); } else if (isExportFromIdentifier) { // export {default}; // missing fromClause var message = this.lookahead.value ? messages_1.Messages.UnexpectedToken : messages_1.Messages.MissingFromClause; this.throwError(message, this.lookahead.value); } else { // export {foo}; this.consumeSemicolon(); } exportDeclaration = this.finalize(node, new Node.ExportNamedDeclaration(null, specifiers, source)); } return exportDeclaration; }; return Parser; }()); exports.Parser = Parser; /***/ }, /* 9 */ /***/ function(module, exports) { "use strict"; // Ensure the condition is true, otherwise throw an error. // This is only to have a better contract semantic, i.e. another safety net // to catch a logic error. The condition shall be fulfilled in normal case. // Do NOT use this to enforce a certain condition on any user input. Object.defineProperty(exports, "__esModule", { value: true }); function assert(condition, message) { /* istanbul ignore if */ if (!condition) { throw new Error('ASSERT: ' + message); } } exports.assert = assert; /***/ }, /* 10 */ /***/ function(module, exports) { "use strict"; /* tslint:disable:max-classes-per-file */ Object.defineProperty(exports, "__esModule", { value: true }); var ErrorHandler = (function () { function ErrorHandler() { this.errors = []; this.tolerant = false; } ErrorHandler.prototype.recordError = function (error) { this.errors.push(error); }; ErrorHandler.prototype.tolerate = function (error) { if (this.tolerant) { this.recordError(error); } else { throw error; } }; ErrorHandler.prototype.constructError = function (msg, column) { var error = new Error(msg); try { throw error; } catch (base) { /* istanbul ignore else */ if (Object.create && Object.defineProperty) { error = Object.create(base); Object.defineProperty(error, 'column', { value: column }); } } /* istanbul ignore next */ return error; }; ErrorHandler.prototype.createError = function (index, line, col, description) { var msg = 'Line ' + line + ': ' + description; var error = this.constructError(msg, col); error.index = index; error.lineNumber = line; error.description = description; return error; }; ErrorHandler.prototype.throwError = function (index, line, col, description) { throw this.createError(index, line, col, description); }; ErrorHandler.prototype.tolerateError = function (index, line, col, description) { var error = this.createError(index, line, col, description); if (this.tolerant) { this.recordError(error); } else { throw error; } }; return ErrorHandler; }()); exports.ErrorHandler = ErrorHandler; /***/ }, /* 11 */ /***/ function(module, exports) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); // Error messages should be identical to V8. exports.Messages = { BadGetterArity: 'Getter must not have any formal parameters', BadSetterArity: 'Setter must have exactly one formal parameter', BadSetterRestParameter: 'Setter function argument must not be a rest parameter', ConstructorIsAsync: 'Class constructor may not be an async method', ConstructorSpecialMethod: 'Class constructor may not be an accessor', DeclarationMissingInitializer: 'Missing initializer in %0 declaration', DefaultRestParameter: 'Unexpected token =', DuplicateBinding: 'Duplicate binding %0', DuplicateConstructor: 'A class may only have one constructor', DuplicateProtoProperty: 'Duplicate __proto__ fields are not allowed in object literals', ForInOfLoopInitializer: '%0 loop variable declaration may not have an initializer', GeneratorInLegacyContext: 'Generator declarations are not allowed in legacy contexts', IllegalBreak: 'Illegal break statement', IllegalContinue: 'Illegal continue statement', IllegalExportDeclaration: 'Unexpected token', IllegalImportDeclaration: 'Unexpected token', IllegalLanguageModeDirective: 'Illegal \'use strict\' directive in function with non-simple parameter list', IllegalReturn: 'Illegal return statement', InvalidEscapedReservedWord: 'Keyword must not contain escaped characters', InvalidHexEscapeSequence: 'Invalid hexadecimal escape sequence', InvalidLHSInAssignment: 'Invalid left-hand side in assignment', InvalidLHSInForIn: 'Invalid left-hand side in for-in', InvalidLHSInForLoop: 'Invalid left-hand side in for-loop', InvalidModuleSpecifier: 'Unexpected token', InvalidRegExp: 'Invalid regular expression', LetInLexicalBinding: 'let is disallowed as a lexically bound name', MissingFromClause: 'Unexpected token', MultipleDefaultsInSwitch: 'More than one default clause in switch statement', NewlineAfterThrow: 'Illegal newline after throw', NoAsAfterImportNamespace: 'Unexpected token', NoCatchOrFinally: 'Missing catch or finally after try', ParameterAfterRestParameter: 'Rest parameter must be last formal parameter', Redeclaration: '%0 \'%1\' has already been declared', StaticPrototype: 'Classes may not have static property named prototype', StrictCatchVariable: 'Catch variable may not be eval or arguments in strict mode', StrictDelete: 'Delete of an unqualified identifier in strict mode.', StrictFunction: 'In strict mode code, functions can only be declared at top level or inside a block', StrictFunctionName: 'Function name may not be eval or arguments in strict mode', StrictLHSAssignment: 'Assignment to eval or arguments is not allowed in strict mode', StrictLHSPostfix: 'Postfix increment/decrement may not have eval or arguments operand in strict mode', StrictLHSPrefix: 'Prefix increment/decrement may not have eval or arguments operand in strict mode', StrictModeWith: 'Strict mode code may not include a with statement', StrictOctalLiteral: 'Octal literals are not allowed in strict mode.', StrictParamDupe: 'Strict mode function may not have duplicate parameter names', StrictParamName: 'Parameter name eval or arguments is not allowed in strict mode', StrictReservedWord: 'Use of future reserved word in strict mode', StrictVarName: 'Variable name may not be eval or arguments in strict mode', TemplateOctalLiteral: 'Octal literals are not allowed in template strings.', UnexpectedEOS: 'Unexpected end of input', UnexpectedIdentifier: 'Unexpected identifier', UnexpectedNumber: 'Unexpected number', UnexpectedReserved: 'Unexpected reserved word', UnexpectedString: 'Unexpected string', UnexpectedTemplate: 'Unexpected quasi %0', UnexpectedToken: 'Unexpected token %0', UnexpectedTokenIllegal: 'Unexpected token ILLEGAL', UnknownLabel: 'Undefined label \'%0\'', UnterminatedRegExp: 'Invalid regular expression: missing /' }; /***/ }, /* 12 */ /***/ function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var assert_1 = __webpack_require__(9); var character_1 = __webpack_require__(4); var messages_1 = __webpack_require__(11); function hexValue(ch) { return '0123456789abcdef'.indexOf(ch.toLowerCase()); } function octalValue(ch) { return '01234567'.indexOf(ch); } var Scanner = (function () { function Scanner(code, handler) { this.source = code; this.errorHandler = handler; this.trackComment = false; this.isModule = false; this.length = code.length; this.index = 0; this.lineNumber = (code.length > 0) ? 1 : 0; this.lineStart = 0; this.curlyStack = []; } Scanner.prototype.saveState = function () { return { index: this.index, lineNumber: this.lineNumber, lineStart: this.lineStart }; }; Scanner.prototype.restoreState = function (state) { this.index = state.index; this.lineNumber = state.lineNumber; this.lineStart = state.lineStart; }; Scanner.prototype.eof = function () { return this.index >= this.length; }; Scanner.prototype.throwUnexpectedToken = function (message) { if (message === void 0) { message = messages_1.Messages.UnexpectedTokenIllegal; } return this.errorHandler.throwError(this.index, this.lineNumber, this.index - this.lineStart + 1, message); }; Scanner.prototype.tolerateUnexpectedToken = function (message) { if (message === void 0) { message = messages_1.Messages.UnexpectedTokenIllegal; } this.errorHandler.tolerateError(this.index, this.lineNumber, this.index - this.lineStart + 1, message); }; // https://tc39.github.io/ecma262/#sec-comments Scanner.prototype.skipSingleLineComment = function (offset) { var comments = []; var start, loc; if (this.trackComment) { comments = []; start = this.index - offset; loc = { start: { line: this.lineNumber, column: this.index - this.lineStart - offset }, end: {} }; } while (!this.eof()) { var ch = this.source.charCodeAt(this.index); ++this.index; if (character_1.Character.isLineTerminator(ch)) { if (this.trackComment) { loc.end = { line: this.lineNumber, column: this.index - this.lineStart - 1 }; var entry = { multiLine: false, slice: [start + offset, this.index - 1], range: [start, this.index - 1], loc: loc }; comments.push(entry); } if (ch === 13 && this.source.charCodeAt(this.index) === 10) { ++this.index; } ++this.lineNumber; this.lineStart = this.index; return comments; } } if (this.trackComment) { loc.end = { line: this.lineNumber, column: this.index - this.lineStart }; var entry = { multiLine: false, slice: [start + offset, this.index], range: [start, this.index], loc: loc }; comments.push(entry); } return comments; }; Scanner.prototype.skipMultiLineComment = function () { var comments = []; var start, loc; if (this.trackComment) { comments = []; start = this.index - 2; loc = { start: { line: this.lineNumber, column: this.index - this.lineStart - 2 }, end: {} }; } while (!this.eof()) { var ch = this.source.charCodeAt(this.index); if (character_1.Character.isLineTerminator(ch)) { if (ch === 0x0D && this.source.charCodeAt(this.index + 1) === 0x0A) { ++this.index; } ++this.lineNumber; ++this.index; this.lineStart = this.index; } else if (ch === 0x2A) { // Block comment ends with '*/'. if (this.source.charCodeAt(this.index + 1) === 0x2F) { this.index += 2; if (this.trackComment) { loc.end = { line: this.lineNumber, column: this.index - this.lineStart }; var entry = { multiLine: true, slice: [start + 2, this.index - 2], range: [start, this.index], loc: loc }; comments.push(entry); } return comments; } ++this.index; } else { ++this.index; } } // Ran off the end of the file - the whole thing is a comment if (this.trackComment) { loc.end = { line: this.lineNumber, column: this.index - this.lineStart }; var entry = { multiLine: true, slice: [start + 2, this.index], range: [start, this.index], loc: loc }; comments.push(entry); } this.tolerateUnexpectedToken(); return comments; }; Scanner.prototype.scanComments = function () { var comments; if (this.trackComment) { comments = []; } var start = (this.index === 0); while (!this.eof()) { var ch = this.source.charCodeAt(this.index); if (character_1.Character.isWhiteSpace(ch)) { ++this.index; } else if (character_1.Character.isLineTerminator(ch)) { ++this.index; if (ch === 0x0D && this.source.charCodeAt(this.index) === 0x0A) { ++this.index; } ++this.lineNumber; this.lineStart = this.index; start = true; } else if (ch === 0x2F) { ch = this.source.charCodeAt(this.index + 1); if (ch === 0x2F) { this.index += 2; var comment = this.skipSingleLineComment(2); if (this.trackComment) { comments = comments.concat(comment); } start = true; } else if (ch === 0x2A) { this.index += 2; var comment = this.skipMultiLineComment(); if (this.trackComment) { comments = comments.concat(comment); } } else { break; } } else if (start && ch === 0x2D) { // U+003E is '>' if ((this.source.charCodeAt(this.index + 1) === 0x2D) && (this.source.charCodeAt(this.index + 2) === 0x3E)) { // '-->' is a single-line comment this.index += 3; var comment = this.skipSingleLineComment(3); if (this.trackComment) { comments = comments.concat(comment); } } else { break; } } else if (ch === 0x3C && !this.isModule) { if (this.source.slice(this.index + 1, this.index + 4) === '!--') { this.index += 4; // `") && S.newline_before) { forward(3); skip_line_comment("comment4"); continue; } } var ch = peek(); if (!ch) return token("eof"); var code = ch.charCodeAt(0); switch (code) { case 34: case 39: return read_string(ch); case 46: return handle_dot(); case 47: { var tok = handle_slash(); if (tok === next_token) continue; return tok; } } if (is_digit(code)) return read_num(); if (PUNC_CHARS(ch)) return token("punc", next()); if (OPERATOR_CHARS(ch)) return read_operator(); if (code == 92 || is_identifier_start(code)) return read_word(); break; } parse_error("Unexpected character '" + ch + "'"); }; next_token.context = function(nc) { if (nc) S = nc; return S; }; next_token.add_directive = function(directive) { S.directive_stack[S.directive_stack.length - 1].push(directive); if (S.directives[directive] === undefined) { S.directives[directive] = 1; } else { S.directives[directive]++; } } next_token.push_directives_stack = function() { S.directive_stack.push([]); } next_token.pop_directives_stack = function() { var directives = S.directive_stack[S.directive_stack.length - 1]; for (var i = 0; i < directives.length; i++) { S.directives[directives[i]]--; } S.directive_stack.pop(); } next_token.has_directive = function(directive) { return S.directives[directive] !== undefined && S.directives[directive] > 0; } return next_token; }; /* -----[ Parser (constants) ]----- */ var UNARY_PREFIX = makePredicate([ "typeof", "void", "delete", "--", "++", "!", "~", "-", "+" ]); var UNARY_POSTFIX = makePredicate([ "--", "++" ]); var ASSIGNMENT = makePredicate([ "=", "+=", "-=", "/=", "*=", "%=", ">>=", "<<=", ">>>=", "|=", "^=", "&=" ]); var PRECEDENCE = (function(a, ret){ for (var i = 0; i < a.length; ++i) { var b = a[i]; for (var j = 0; j < b.length; ++j) { ret[b[j]] = i + 1; } } return ret; })( [ ["||"], ["&&"], ["|"], ["^"], ["&"], ["==", "===", "!=", "!=="], ["<", ">", "<=", ">=", "in", "instanceof"], [">>", "<<", ">>>"], ["+", "-"], ["*", "/", "%"] ], {} ); var STATEMENTS_WITH_LABELS = array_to_hash([ "for", "do", "while", "switch" ]); var ATOMIC_START_TOKEN = array_to_hash([ "atom", "num", "string", "regexp", "name" ]); /* -----[ Parser ]----- */ function parse($TEXT, options) { options = defaults(options, { bare_returns : false, cli : false, expression : false, filename : null, html5_comments : true, shebang : true, strict : false, toplevel : null, }); var S = { input : (typeof $TEXT == "string" ? tokenizer($TEXT, options.filename, options.html5_comments, options.shebang) : $TEXT), token : null, prev : null, peeked : null, in_function : 0, in_directives : true, in_loop : 0, labels : [] }; S.token = next(); function is(type, value) { return is_token(S.token, type, value); }; function peek() { return S.peeked || (S.peeked = S.input()); }; function next() { S.prev = S.token; if (S.peeked) { S.token = S.peeked; S.peeked = null; } else { S.token = S.input(); } S.in_directives = S.in_directives && ( S.token.type == "string" || is("punc", ";") ); return S.token; }; function prev() { return S.prev; }; function croak(msg, line, col, pos) { var ctx = S.input.context(); js_error(msg, ctx.filename, line != null ? line : ctx.tokline, col != null ? col : ctx.tokcol, pos != null ? pos : ctx.tokpos); }; function token_error(token, msg) { croak(msg, token.line, token.col); }; function unexpected(token) { if (token == null) token = S.token; token_error(token, "Unexpected token: " + token.type + " (" + token.value + ")"); }; function expect_token(type, val) { if (is(type, val)) { return next(); } token_error(S.token, "Unexpected token " + S.token.type + " «" + S.token.value + "»" + ", expected " + type + " «" + val + "»"); }; function expect(punc) { return expect_token("punc", punc); }; function can_insert_semicolon() { return !options.strict && ( S.token.nlb || is("eof") || is("punc", "}") ); }; function semicolon(optional) { if (is("punc", ";")) next(); else if (!optional && !can_insert_semicolon()) unexpected(); }; function parenthesised() { expect("("); var exp = expression(true); expect(")"); return exp; }; function embed_tokens(parser) { return function() { var start = S.token; var expr = parser(); var end = prev(); expr.start = start; expr.end = end; return expr; }; }; function handle_regexp() { if (is("operator", "/") || is("operator", "/=")) { S.peeked = null; S.token = S.input(S.token.value.substr(1)); // force regexp } }; var statement = embed_tokens(function() { handle_regexp(); switch (S.token.type) { case "string": if (S.in_directives) { var token = peek(); if (S.token.raw.indexOf("\\") == -1 && (token.nlb || is_token(token, "eof") || is_token(token, "punc", ";") || is_token(token, "punc", "}"))) { S.input.add_directive(S.token.value); } else { S.in_directives = false; } } var dir = S.in_directives, stat = simple_statement(); return dir ? new AST_Directive(stat.body) : stat; case "num": case "regexp": case "operator": case "atom": return simple_statement(); case "name": return is_token(peek(), "punc", ":") ? labeled_statement() : simple_statement(); case "punc": switch (S.token.value) { case "{": return new AST_BlockStatement({ start : S.token, body : block_(), end : prev() }); case "[": case "(": return simple_statement(); case ";": S.in_directives = false; next(); return new AST_EmptyStatement(); default: unexpected(); } case "keyword": switch (S.token.value) { case "break": next(); return break_cont(AST_Break); case "continue": next(); return break_cont(AST_Continue); case "debugger": next(); semicolon(); return new AST_Debugger(); case "do": next(); var body = in_loop(statement); expect_token("keyword", "while"); var condition = parenthesised(); semicolon(true); return new AST_Do({ body : body, condition : condition }); case "while": next(); return new AST_While({ condition : parenthesised(), body : in_loop(statement) }); case "for": next(); return for_(); case "function": next(); return function_(AST_Defun); case "if": next(); return if_(); case "return": if (S.in_function == 0 && !options.bare_returns) croak("'return' outside of function"); next(); var value = null; if (is("punc", ";")) { next(); } else if (!can_insert_semicolon()) { value = expression(true); semicolon(); } return new AST_Return({ value: value }); case "switch": next(); return new AST_Switch({ expression : parenthesised(), body : in_loop(switch_body_) }); case "throw": next(); if (S.token.nlb) croak("Illegal newline after 'throw'"); var value = expression(true); semicolon(); return new AST_Throw({ value: value }); case "try": next(); return try_(); case "var": next(); var node = var_(); semicolon(); return node; case "const": next(); var node = const_(); semicolon(); return node; case "with": if (S.input.has_directive("use strict")) { croak("Strict mode may not include a with statement"); } next(); return new AST_With({ expression : parenthesised(), body : statement() }); } } unexpected(); }); function labeled_statement() { var label = as_symbol(AST_Label); if (find_if(function(l){ return l.name == label.name }, S.labels)) { // ECMA-262, 12.12: An ECMAScript program is considered // syntactically incorrect if it contains a // LabelledStatement that is enclosed by a // LabelledStatement with the same Identifier as label. croak("Label " + label.name + " defined twice"); } expect(":"); S.labels.push(label); var stat = statement(); S.labels.pop(); if (!(stat instanceof AST_IterationStatement)) { // check for `continue` that refers to this label. // those should be reported as syntax errors. // https://github.com/mishoo/UglifyJS2/issues/287 label.references.forEach(function(ref){ if (ref instanceof AST_Continue) { ref = ref.label.start; croak("Continue label `" + label.name + "` refers to non-IterationStatement.", ref.line, ref.col, ref.pos); } }); } return new AST_LabeledStatement({ body: stat, label: label }); }; function simple_statement(tmp) { return new AST_SimpleStatement({ body: (tmp = expression(true), semicolon(), tmp) }); }; function break_cont(type) { var label = null, ldef; if (!can_insert_semicolon()) { label = as_symbol(AST_LabelRef, true); } if (label != null) { ldef = find_if(function(l){ return l.name == label.name }, S.labels); if (!ldef) croak("Undefined label " + label.name); label.thedef = ldef; } else if (S.in_loop == 0) croak(type.TYPE + " not inside a loop or switch"); semicolon(); var stat = new type({ label: label }); if (ldef) ldef.references.push(stat); return stat; }; function for_() { expect("("); var init = null; if (!is("punc", ";")) { init = is("keyword", "var") ? (next(), var_(true)) : expression(true, true); if (is("operator", "in")) { if (init instanceof AST_Var && init.definitions.length > 1) croak("Only one variable declaration allowed in for..in loop"); next(); return for_in(init); } } return regular_for(init); }; function regular_for(init) { expect(";"); var test = is("punc", ";") ? null : expression(true); expect(";"); var step = is("punc", ")") ? null : expression(true); expect(")"); return new AST_For({ init : init, condition : test, step : step, body : in_loop(statement) }); }; function for_in(init) { var lhs = init instanceof AST_Var ? init.definitions[0].name : null; var obj = expression(true); expect(")"); return new AST_ForIn({ init : init, name : lhs, object : obj, body : in_loop(statement) }); }; var function_ = function(ctor) { var in_statement = ctor === AST_Defun; var name = is("name") ? as_symbol(in_statement ? AST_SymbolDefun : AST_SymbolLambda) : null; if (in_statement && !name) unexpected(); expect("("); return new ctor({ name: name, argnames: (function(first, a){ while (!is("punc", ")")) { if (first) first = false; else expect(","); a.push(as_symbol(AST_SymbolFunarg)); } next(); return a; })(true, []), body: (function(loop, labels){ ++S.in_function; S.in_directives = true; S.input.push_directives_stack(); S.in_loop = 0; S.labels = []; var a = block_(); S.input.pop_directives_stack(); --S.in_function; S.in_loop = loop; S.labels = labels; return a; })(S.in_loop, S.labels) }); }; function if_() { var cond = parenthesised(), body = statement(), belse = null; if (is("keyword", "else")) { next(); belse = statement(); } return new AST_If({ condition : cond, body : body, alternative : belse }); }; function block_() { expect("{"); var a = []; while (!is("punc", "}")) { if (is("eof")) unexpected(); a.push(statement()); } next(); return a; }; function switch_body_() { expect("{"); var a = [], cur = null, branch = null, tmp; while (!is("punc", "}")) { if (is("eof")) unexpected(); if (is("keyword", "case")) { if (branch) branch.end = prev(); cur = []; branch = new AST_Case({ start : (tmp = S.token, next(), tmp), expression : expression(true), body : cur }); a.push(branch); expect(":"); } else if (is("keyword", "default")) { if (branch) branch.end = prev(); cur = []; branch = new AST_Default({ start : (tmp = S.token, next(), expect(":"), tmp), body : cur }); a.push(branch); } else { if (!cur) unexpected(); cur.push(statement()); } } if (branch) branch.end = prev(); next(); return a; }; function try_() { var body = block_(), bcatch = null, bfinally = null; if (is("keyword", "catch")) { var start = S.token; next(); expect("("); var name = as_symbol(AST_SymbolCatch); expect(")"); bcatch = new AST_Catch({ start : start, argname : name, body : block_(), end : prev() }); } if (is("keyword", "finally")) { var start = S.token; next(); bfinally = new AST_Finally({ start : start, body : block_(), end : prev() }); } if (!bcatch && !bfinally) croak("Missing catch/finally blocks"); return new AST_Try({ body : body, bcatch : bcatch, bfinally : bfinally }); }; function vardefs(no_in, in_const) { var a = []; for (;;) { a.push(new AST_VarDef({ start : S.token, name : as_symbol(in_const ? AST_SymbolConst : AST_SymbolVar), value : is("operator", "=") ? (next(), expression(false, no_in)) : null, end : prev() })); if (!is("punc", ",")) break; next(); } return a; }; var var_ = function(no_in) { return new AST_Var({ start : prev(), definitions : vardefs(no_in, false), end : prev() }); }; var const_ = function() { return new AST_Const({ start : prev(), definitions : vardefs(false, true), end : prev() }); }; var new_ = function(allow_calls) { var start = S.token; expect_token("operator", "new"); var newexp = expr_atom(false), args; if (is("punc", "(")) { next(); args = expr_list(")"); } else { args = []; } return subscripts(new AST_New({ start : start, expression : newexp, args : args, end : prev() }), allow_calls); }; function as_atom_node() { var tok = S.token, ret; switch (tok.type) { case "name": case "keyword": ret = _make_symbol(AST_SymbolRef); break; case "num": ret = new AST_Number({ start: tok, end: tok, value: tok.value }); break; case "string": ret = new AST_String({ start : tok, end : tok, value : tok.value, quote : tok.quote }); break; case "regexp": ret = new AST_RegExp({ start: tok, end: tok, value: tok.value }); break; case "atom": switch (tok.value) { case "false": ret = new AST_False({ start: tok, end: tok }); break; case "true": ret = new AST_True({ start: tok, end: tok }); break; case "null": ret = new AST_Null({ start: tok, end: tok }); break; } break; case "operator": if (!is_identifier_string(tok.value)) { croak("Invalid getter/setter name: " + tok.value, tok.line, tok.col, tok.pos); } ret = _make_symbol(AST_SymbolRef); break; } next(); return ret; }; var expr_atom = function(allow_calls) { if (is("operator", "new")) { return new_(allow_calls); } var start = S.token; if (is("punc")) { switch (start.value) { case "(": next(); var ex = expression(true); ex.start = start; ex.end = S.token; expect(")"); return subscripts(ex, allow_calls); case "[": return subscripts(array_(), allow_calls); case "{": return subscripts(object_(), allow_calls); } unexpected(); } if (is("keyword", "function")) { next(); var func = function_(AST_Function); func.start = start; func.end = prev(); return subscripts(func, allow_calls); } if (ATOMIC_START_TOKEN[S.token.type]) { return subscripts(as_atom_node(), allow_calls); } unexpected(); }; function expr_list(closing, allow_trailing_comma, allow_empty) { var first = true, a = []; while (!is("punc", closing)) { if (first) first = false; else expect(","); if (allow_trailing_comma && is("punc", closing)) break; if (is("punc", ",") && allow_empty) { a.push(new AST_Hole({ start: S.token, end: S.token })); } else { a.push(expression(false)); } } next(); return a; }; var array_ = embed_tokens(function() { expect("["); return new AST_Array({ elements: expr_list("]", !options.strict, true) }); }); var create_accessor = embed_tokens(function() { return function_(AST_Accessor); }); var object_ = embed_tokens(function() { expect("{"); var first = true, a = []; while (!is("punc", "}")) { if (first) first = false; else expect(","); if (!options.strict && is("punc", "}")) // allow trailing comma break; var start = S.token; var type = start.type; var name = as_property_name(); if (type == "name" && !is("punc", ":")) { var key = new AST_SymbolAccessor({ start: S.token, name: as_property_name(), end: prev() }); if (name == "get") { a.push(new AST_ObjectGetter({ start : start, key : key, value : create_accessor(), end : prev() })); continue; } if (name == "set") { a.push(new AST_ObjectSetter({ start : start, key : key, value : create_accessor(), end : prev() })); continue; } } expect(":"); a.push(new AST_ObjectKeyVal({ start : start, quote : start.quote, key : name, value : expression(false), end : prev() })); } next(); return new AST_Object({ properties: a }); }); function as_property_name() { var tmp = S.token; switch (tmp.type) { case "operator": if (!KEYWORDS(tmp.value)) unexpected(); case "num": case "string": case "name": case "keyword": case "atom": next(); return tmp.value; default: unexpected(); } }; function as_name() { var tmp = S.token; if (tmp.type != "name") unexpected(); next(); return tmp.value; }; function _make_symbol(type) { var name = S.token.value; return new (name == "this" ? AST_This : type)({ name : String(name), start : S.token, end : S.token }); }; function as_symbol(type, noerror) { if (!is("name")) { if (!noerror) croak("Name expected"); return null; } var sym = _make_symbol(type); next(); return sym; }; var subscripts = function(expr, allow_calls) { var start = expr.start; if (is("punc", ".")) { next(); return subscripts(new AST_Dot({ start : start, expression : expr, property : as_name(), end : prev() }), allow_calls); } if (is("punc", "[")) { next(); var prop = expression(true); expect("]"); return subscripts(new AST_Sub({ start : start, expression : expr, property : prop, end : prev() }), allow_calls); } if (allow_calls && is("punc", "(")) { next(); return subscripts(new AST_Call({ start : start, expression : expr, args : expr_list(")"), end : prev() }), true); } return expr; }; var maybe_unary = function(allow_calls) { var start = S.token; if (is("operator") && UNARY_PREFIX(start.value)) { next(); handle_regexp(); var ex = make_unary(AST_UnaryPrefix, start, maybe_unary(allow_calls)); ex.start = start; ex.end = prev(); return ex; } var val = expr_atom(allow_calls); while (is("operator") && UNARY_POSTFIX(S.token.value) && !S.token.nlb) { val = make_unary(AST_UnaryPostfix, S.token, val); val.start = start; val.end = S.token; next(); } return val; }; function make_unary(ctor, token, expr) { var op = token.value; if ((op == "++" || op == "--") && !is_assignable(expr)) croak("Invalid use of " + op + " operator", token.line, token.col, token.pos); return new ctor({ operator: op, expression: expr }); }; var expr_op = function(left, min_prec, no_in) { var op = is("operator") ? S.token.value : null; if (op == "in" && no_in) op = null; var prec = op != null ? PRECEDENCE[op] : null; if (prec != null && prec > min_prec) { next(); var right = expr_op(maybe_unary(true), prec, no_in); return expr_op(new AST_Binary({ start : left.start, left : left, operator : op, right : right, end : right.end }), min_prec, no_in); } return left; }; function expr_ops(no_in) { return expr_op(maybe_unary(true), 0, no_in); }; var maybe_conditional = function(no_in) { var start = S.token; var expr = expr_ops(no_in); if (is("operator", "?")) { next(); var yes = expression(false); expect(":"); return new AST_Conditional({ start : start, condition : expr, consequent : yes, alternative : expression(false, no_in), end : prev() }); } return expr; }; function is_assignable(expr) { if (options.cli) return true; return expr instanceof AST_PropAccess || expr instanceof AST_SymbolRef; }; var maybe_assign = function(no_in) { var start = S.token; var left = maybe_conditional(no_in), val = S.token.value; if (is("operator") && ASSIGNMENT(val)) { if (is_assignable(left)) { next(); return new AST_Assign({ start : start, left : left, operator : val, right : maybe_assign(no_in), end : prev() }); } croak("Invalid assignment"); } return left; }; var expression = function(commas, no_in) { var start = S.token; var expr = maybe_assign(no_in); if (commas && is("punc", ",")) { next(); return new AST_Seq({ start : start, car : expr, cdr : expression(true, no_in), end : peek() }); } return expr; }; function in_loop(cont) { ++S.in_loop; var ret = cont(); --S.in_loop; return ret; }; if (options.expression) { return expression(true); } return (function(){ var start = S.token; var body = []; S.input.push_directives_stack(); while (!is("eof")) body.push(statement()); S.input.pop_directives_stack(); var end = prev(); var toplevel = options.toplevel; if (toplevel) { toplevel.body = toplevel.body.concat(body); toplevel.end = end; } else { toplevel = new AST_Toplevel({ start: start, body: body, end: end }); } return toplevel; })(); }; /*********************************************************************** A JavaScript tokenizer / parser / beautifier / compressor. https://github.com/mishoo/UglifyJS2 -------------------------------- (C) --------------------------------- Author: Mihai Bazon http://mihai.bazon.net/blog Distributed under the BSD license: Copyright 2012 (c) Mihai Bazon Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS†AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ "use strict"; // Tree transformer helpers. function TreeTransformer(before, after) { TreeWalker.call(this); this.before = before; this.after = after; } TreeTransformer.prototype = new TreeWalker; (function(undefined){ function _(node, descend) { node.DEFMETHOD("transform", function(tw, in_list){ var x, y; tw.push(this); if (tw.before) x = tw.before(this, descend, in_list); if (x === undefined) { if (!tw.after) { x = this; descend(x, tw); } else { tw.stack[tw.stack.length - 1] = x = this; descend(x, tw); y = tw.after(x, in_list); if (y !== undefined) x = y; } } tw.pop(this); return x; }); }; function do_list(list, tw) { return MAP(list, function(node){ return node.transform(tw, true); }); }; _(AST_Node, noop); _(AST_LabeledStatement, function(self, tw){ self.label = self.label.transform(tw); self.body = self.body.transform(tw); }); _(AST_SimpleStatement, function(self, tw){ self.body = self.body.transform(tw); }); _(AST_Block, function(self, tw){ self.body = do_list(self.body, tw); }); _(AST_DWLoop, function(self, tw){ self.condition = self.condition.transform(tw); self.body = self.body.transform(tw); }); _(AST_For, function(self, tw){ if (self.init) self.init = self.init.transform(tw); if (self.condition) self.condition = self.condition.transform(tw); if (self.step) self.step = self.step.transform(tw); self.body = self.body.transform(tw); }); _(AST_ForIn, function(self, tw){ self.init = self.init.transform(tw); self.object = self.object.transform(tw); self.body = self.body.transform(tw); }); _(AST_With, function(self, tw){ self.expression = self.expression.transform(tw); self.body = self.body.transform(tw); }); _(AST_Exit, function(self, tw){ if (self.value) self.value = self.value.transform(tw); }); _(AST_LoopControl, function(self, tw){ if (self.label) self.label = self.label.transform(tw); }); _(AST_If, function(self, tw){ self.condition = self.condition.transform(tw); self.body = self.body.transform(tw); if (self.alternative) self.alternative = self.alternative.transform(tw); }); _(AST_Switch, function(self, tw){ self.expression = self.expression.transform(tw); self.body = do_list(self.body, tw); }); _(AST_Case, function(self, tw){ self.expression = self.expression.transform(tw); self.body = do_list(self.body, tw); }); _(AST_Try, function(self, tw){ self.body = do_list(self.body, tw); if (self.bcatch) self.bcatch = self.bcatch.transform(tw); if (self.bfinally) self.bfinally = self.bfinally.transform(tw); }); _(AST_Catch, function(self, tw){ self.argname = self.argname.transform(tw); self.body = do_list(self.body, tw); }); _(AST_Definitions, function(self, tw){ self.definitions = do_list(self.definitions, tw); }); _(AST_VarDef, function(self, tw){ self.name = self.name.transform(tw); if (self.value) self.value = self.value.transform(tw); }); _(AST_Lambda, function(self, tw){ if (self.name) self.name = self.name.transform(tw); self.argnames = do_list(self.argnames, tw); self.body = do_list(self.body, tw); }); _(AST_Call, function(self, tw){ self.expression = self.expression.transform(tw); self.args = do_list(self.args, tw); }); _(AST_Seq, function(self, tw){ self.car = self.car.transform(tw); self.cdr = self.cdr.transform(tw); }); _(AST_Dot, function(self, tw){ self.expression = self.expression.transform(tw); }); _(AST_Sub, function(self, tw){ self.expression = self.expression.transform(tw); self.property = self.property.transform(tw); }); _(AST_Unary, function(self, tw){ self.expression = self.expression.transform(tw); }); _(AST_Binary, function(self, tw){ self.left = self.left.transform(tw); self.right = self.right.transform(tw); }); _(AST_Conditional, function(self, tw){ self.condition = self.condition.transform(tw); self.consequent = self.consequent.transform(tw); self.alternative = self.alternative.transform(tw); }); _(AST_Array, function(self, tw){ self.elements = do_list(self.elements, tw); }); _(AST_Object, function(self, tw){ self.properties = do_list(self.properties, tw); }); _(AST_ObjectProperty, function(self, tw){ self.value = self.value.transform(tw); }); })(); /*********************************************************************** A JavaScript tokenizer / parser / beautifier / compressor. https://github.com/mishoo/UglifyJS2 -------------------------------- (C) --------------------------------- Author: Mihai Bazon http://mihai.bazon.net/blog Distributed under the BSD license: Copyright 2012 (c) Mihai Bazon Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS†AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ "use strict"; function SymbolDef(scope, index, orig) { this.name = orig.name; this.orig = [ orig ]; this.scope = scope; this.references = []; this.global = false; this.mangled_name = null; this.undeclared = false; this.index = index; this.id = SymbolDef.next_id++; }; SymbolDef.next_id = 1; SymbolDef.prototype = { unmangleable: function(options) { if (!options) options = {}; return (this.global && !options.toplevel) || this.undeclared || (!options.eval && (this.scope.uses_eval || this.scope.uses_with)) || (options.keep_fnames && (this.orig[0] instanceof AST_SymbolLambda || this.orig[0] instanceof AST_SymbolDefun)); }, mangle: function(options) { var cache = options.cache && options.cache.props; if (this.global && cache && cache.has(this.name)) { this.mangled_name = cache.get(this.name); } else if (!this.mangled_name && !this.unmangleable(options)) { var s = this.scope; var sym = this.orig[0]; if (!options.screw_ie8 && sym instanceof AST_SymbolLambda) s = s.parent_scope; var def; if (this.defun && (def = this.defun.variables.get(this.name))) { this.mangled_name = def.mangled_name || def.name; } else this.mangled_name = s.next_mangled(options, this); if (this.global && cache) { cache.set(this.name, this.mangled_name); } } } }; AST_Toplevel.DEFMETHOD("figure_out_scope", function(options){ options = defaults(options, { cache: null, screw_ie8: true, }); // pass 1: setup scope chaining and handle definitions var self = this; var scope = self.parent_scope = null; var labels = new Dictionary(); var defun = null; var tw = new TreeWalker(function(node, descend){ if (node instanceof AST_Catch) { var save_scope = scope; scope = new AST_Scope(node); scope.init_scope_vars(save_scope); descend(); scope = save_scope; return true; } if (node instanceof AST_Scope) { node.init_scope_vars(scope); var save_scope = scope; var save_defun = defun; var save_labels = labels; defun = scope = node; labels = new Dictionary(); descend(); scope = save_scope; defun = save_defun; labels = save_labels; return true; // don't descend again in TreeWalker } if (node instanceof AST_LabeledStatement) { var l = node.label; if (labels.has(l.name)) { throw new Error(string_template("Label {name} defined twice", l)); } labels.set(l.name, l); descend(); labels.del(l.name); return true; // no descend again } if (node instanceof AST_With) { for (var s = scope; s; s = s.parent_scope) s.uses_with = true; return; } if (node instanceof AST_Symbol) { node.scope = scope; } if (node instanceof AST_Label) { node.thedef = node; node.references = []; } if (node instanceof AST_SymbolLambda) { defun.def_function(node); } else if (node instanceof AST_SymbolDefun) { // Careful here, the scope where this should be defined is // the parent scope. The reason is that we enter a new // scope when we encounter the AST_Defun node (which is // instanceof AST_Scope) but we get to the symbol a bit // later. (node.scope = defun.parent_scope).def_function(node); } else if (node instanceof AST_SymbolVar || node instanceof AST_SymbolConst) { defun.def_variable(node); if (defun !== scope) { node.mark_enclosed(options); var def = scope.find_variable(node); if (node.thedef !== def) { node.thedef = def; node.reference(options); } } } else if (node instanceof AST_SymbolCatch) { scope.def_variable(node).defun = defun; } else if (node instanceof AST_LabelRef) { var sym = labels.get(node.name); if (!sym) throw new Error(string_template("Undefined label {name} [{line},{col}]", { name: node.name, line: node.start.line, col: node.start.col })); node.thedef = sym; } }); self.walk(tw); // pass 2: find back references and eval var func = null; var globals = self.globals = new Dictionary(); var tw = new TreeWalker(function(node, descend){ if (node instanceof AST_Lambda) { var prev_func = func; func = node; descend(); func = prev_func; return true; } if (node instanceof AST_LoopControl && node.label) { node.label.thedef.references.push(node); return true; } if (node instanceof AST_SymbolRef) { var name = node.name; if (name == "eval" && tw.parent() instanceof AST_Call) { for (var s = node.scope; s && !s.uses_eval; s = s.parent_scope) { s.uses_eval = true; } } var sym = node.scope.find_variable(name); if (node.scope instanceof AST_Lambda && name == "arguments") { node.scope.uses_arguments = true; } if (!sym) { sym = self.def_global(node); } node.thedef = sym; node.reference(options); return true; } }); self.walk(tw); // pass 3: fix up any scoping issue with IE8 if (!options.screw_ie8) { self.walk(new TreeWalker(function(node, descend) { if (node instanceof AST_SymbolCatch) { var name = node.name; var refs = node.thedef.references; var scope = node.thedef.defun; var def = scope.find_variable(name) || self.globals.get(name) || scope.def_variable(node); refs.forEach(function(ref) { ref.thedef = def; ref.reference(options); }); node.thedef = def; return true; } })); } if (options.cache) { this.cname = options.cache.cname; } }); AST_Toplevel.DEFMETHOD("def_global", function(node){ var globals = this.globals, name = node.name; if (globals.has(name)) { return globals.get(name); } else { var g = new SymbolDef(this, globals.size(), node); g.undeclared = true; g.global = true; globals.set(name, g); return g; } }); AST_Scope.DEFMETHOD("init_scope_vars", function(parent_scope){ this.variables = new Dictionary(); // map name to AST_SymbolVar (variables defined in this scope; includes functions) this.functions = new Dictionary(); // map name to AST_SymbolDefun (functions defined in this scope) this.uses_with = false; // will be set to true if this or some nested scope uses the `with` statement this.uses_eval = false; // will be set to true if this or nested scope uses the global `eval` this.parent_scope = parent_scope; // the parent scope this.enclosed = []; // a list of variables from this or outer scope(s) that are referenced from this or inner scopes this.cname = -1; // the current index for mangling functions/variables }); AST_Lambda.DEFMETHOD("init_scope_vars", function(){ AST_Scope.prototype.init_scope_vars.apply(this, arguments); this.uses_arguments = false; this.def_variable(new AST_SymbolVar({ name: "arguments", start: this.start, end: this.end })); }); AST_Symbol.DEFMETHOD("mark_enclosed", function(options) { var def = this.definition(); var s = this.scope; while (s) { push_uniq(s.enclosed, def); if (options.keep_fnames) { s.functions.each(function(d) { push_uniq(def.scope.enclosed, d); }); } if (s === def.scope) break; s = s.parent_scope; } }); AST_Symbol.DEFMETHOD("reference", function(options) { this.definition().references.push(this); this.mark_enclosed(options); }); AST_Scope.DEFMETHOD("find_variable", function(name){ if (name instanceof AST_Symbol) name = name.name; return this.variables.get(name) || (this.parent_scope && this.parent_scope.find_variable(name)); }); AST_Scope.DEFMETHOD("def_function", function(symbol){ this.functions.set(symbol.name, this.def_variable(symbol)); }); AST_Scope.DEFMETHOD("def_variable", function(symbol){ var def; if (!this.variables.has(symbol.name)) { def = new SymbolDef(this, this.variables.size(), symbol); this.variables.set(symbol.name, def); def.global = !this.parent_scope; } else { def = this.variables.get(symbol.name); def.orig.push(symbol); } return symbol.thedef = def; }); AST_Scope.DEFMETHOD("next_mangled", function(options){ var ext = this.enclosed; out: while (true) { var m = base54(++this.cname); if (!is_identifier(m)) continue; // skip over "do" // https://github.com/mishoo/UglifyJS2/issues/242 -- do not // shadow a name excepted from mangling. if (options.except.indexOf(m) >= 0) continue; // we must ensure that the mangled name does not shadow a name // from some parent scope that is referenced in this or in // inner scopes. for (var i = ext.length; --i >= 0;) { var sym = ext[i]; var name = sym.mangled_name || (sym.unmangleable(options) && sym.name); if (m == name) continue out; } return m; } }); AST_Function.DEFMETHOD("next_mangled", function(options, def){ // #179, #326 // in Safari strict mode, something like (function x(x){...}) is a syntax error; // a function expression's argument cannot shadow the function expression's name var tricky_def = def.orig[0] instanceof AST_SymbolFunarg && this.name && this.name.definition(); // the function's mangled_name is null when keep_fnames is true var tricky_name = tricky_def ? tricky_def.mangled_name || tricky_def.name : null; while (true) { var name = AST_Lambda.prototype.next_mangled.call(this, options, def); if (!tricky_name || tricky_name != name) return name; } }); AST_Symbol.DEFMETHOD("unmangleable", function(options){ return this.definition().unmangleable(options); }); // labels are always mangleable AST_Label.DEFMETHOD("unmangleable", function(){ return false; }); AST_Symbol.DEFMETHOD("unreferenced", function(){ return this.definition().references.length == 0 && !(this.scope.uses_eval || this.scope.uses_with); }); AST_Symbol.DEFMETHOD("undeclared", function(){ return this.definition().undeclared; }); AST_LabelRef.DEFMETHOD("undeclared", function(){ return false; }); AST_Label.DEFMETHOD("undeclared", function(){ return false; }); AST_Symbol.DEFMETHOD("definition", function(){ return this.thedef; }); AST_Symbol.DEFMETHOD("global", function(){ return this.definition().global; }); AST_Toplevel.DEFMETHOD("_default_mangler_options", function(options){ return defaults(options, { eval : false, except : [], keep_fnames : false, screw_ie8 : true, sort : false, // Ignored. Flag retained for backwards compatibility. toplevel : false, }); }); AST_Toplevel.DEFMETHOD("mangle_names", function(options){ options = this._default_mangler_options(options); // Never mangle arguments options.except.push('arguments'); // We only need to mangle declaration nodes. Special logic wired // into the code generator will display the mangled name if it's // present (and for AST_SymbolRef-s it'll use the mangled name of // the AST_SymbolDeclaration that it points to). var lname = -1; var to_mangle = []; if (options.cache) { this.globals.each(function(symbol){ if (options.except.indexOf(symbol.name) < 0) { to_mangle.push(symbol); } }); } var tw = new TreeWalker(function(node, descend){ if (node instanceof AST_LabeledStatement) { // lname is incremented when we get to the AST_Label var save_nesting = lname; descend(); lname = save_nesting; return true; // don't descend again in TreeWalker } if (node instanceof AST_Scope) { var p = tw.parent(), a = []; node.variables.each(function(symbol){ if (options.except.indexOf(symbol.name) < 0) { a.push(symbol); } }); to_mangle.push.apply(to_mangle, a); return; } if (node instanceof AST_Label) { var name; do name = base54(++lname); while (!is_identifier(name)); node.mangled_name = name; return true; } if (options.screw_ie8 && node instanceof AST_SymbolCatch) { to_mangle.push(node.definition()); return; } }); this.walk(tw); to_mangle.forEach(function(def){ def.mangle(options) }); if (options.cache) { options.cache.cname = this.cname; } }); AST_Toplevel.DEFMETHOD("compute_char_frequency", function(options){ options = this._default_mangler_options(options); var tw = new TreeWalker(function(node){ if (node instanceof AST_Constant) base54.consider(node.print_to_string()); else if (node instanceof AST_Return) base54.consider("return"); else if (node instanceof AST_Throw) base54.consider("throw"); else if (node instanceof AST_Continue) base54.consider("continue"); else if (node instanceof AST_Break) base54.consider("break"); else if (node instanceof AST_Debugger) base54.consider("debugger"); else if (node instanceof AST_Directive) base54.consider(node.value); else if (node instanceof AST_While) base54.consider("while"); else if (node instanceof AST_Do) base54.consider("do while"); else if (node instanceof AST_If) { base54.consider("if"); if (node.alternative) base54.consider("else"); } else if (node instanceof AST_Var) base54.consider("var"); else if (node instanceof AST_Const) base54.consider("const"); else if (node instanceof AST_Lambda) base54.consider("function"); else if (node instanceof AST_For) base54.consider("for"); else if (node instanceof AST_ForIn) base54.consider("for in"); else if (node instanceof AST_Switch) base54.consider("switch"); else if (node instanceof AST_Case) base54.consider("case"); else if (node instanceof AST_Default) base54.consider("default"); else if (node instanceof AST_With) base54.consider("with"); else if (node instanceof AST_ObjectSetter) base54.consider("set" + node.key); else if (node instanceof AST_ObjectGetter) base54.consider("get" + node.key); else if (node instanceof AST_ObjectKeyVal) base54.consider(node.key); else if (node instanceof AST_New) base54.consider("new"); else if (node instanceof AST_This) base54.consider("this"); else if (node instanceof AST_Try) base54.consider("try"); else if (node instanceof AST_Catch) base54.consider("catch"); else if (node instanceof AST_Finally) base54.consider("finally"); else if (node instanceof AST_Symbol && node.unmangleable(options)) base54.consider(node.name); else if (node instanceof AST_Unary || node instanceof AST_Binary) base54.consider(node.operator); else if (node instanceof AST_Dot) base54.consider(node.property); }); this.walk(tw); base54.sort(); }); var base54 = (function() { var string = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_0123456789"; var chars, frequency; function reset() { frequency = Object.create(null); chars = string.split("").map(function(ch){ return ch.charCodeAt(0) }); chars.forEach(function(ch){ frequency[ch] = 0 }); } base54.consider = function(str){ for (var i = str.length; --i >= 0;) { var code = str.charCodeAt(i); if (code in frequency) ++frequency[code]; } }; base54.sort = function() { chars = mergeSort(chars, function(a, b){ if (is_digit(a) && !is_digit(b)) return 1; if (is_digit(b) && !is_digit(a)) return -1; return frequency[b] - frequency[a]; }); }; base54.reset = reset; reset(); base54.get = function(){ return chars }; base54.freq = function(){ return frequency }; function base54(num) { var ret = "", base = 54; num++; do { num--; ret += String.fromCharCode(chars[num % base]); num = Math.floor(num / base); base = 64; } while (num > 0); return ret; }; return base54; })(); AST_Toplevel.DEFMETHOD("scope_warnings", function(options){ options = defaults(options, { assign_to_global : true, eval : true, func_arguments : true, nested_defuns : true, undeclared : false, // this makes a lot of noise unreferenced : true, }); var tw = new TreeWalker(function(node){ if (options.undeclared && node instanceof AST_SymbolRef && node.undeclared()) { // XXX: this also warns about JS standard names, // i.e. Object, Array, parseInt etc. Should add a list of // exceptions. AST_Node.warn("Undeclared symbol: {name} [{file}:{line},{col}]", { name: node.name, file: node.start.file, line: node.start.line, col: node.start.col }); } if (options.assign_to_global) { var sym = null; if (node instanceof AST_Assign && node.left instanceof AST_SymbolRef) sym = node.left; else if (node instanceof AST_ForIn && node.init instanceof AST_SymbolRef) sym = node.init; if (sym && (sym.undeclared() || (sym.global() && sym.scope !== sym.definition().scope))) { AST_Node.warn("{msg}: {name} [{file}:{line},{col}]", { msg: sym.undeclared() ? "Accidental global?" : "Assignment to global", name: sym.name, file: sym.start.file, line: sym.start.line, col: sym.start.col }); } } if (options.eval && node instanceof AST_SymbolRef && node.undeclared() && node.name == "eval") { AST_Node.warn("Eval is used [{file}:{line},{col}]", node.start); } if (options.unreferenced && (node instanceof AST_SymbolDeclaration || node instanceof AST_Label) && !(node instanceof AST_SymbolCatch) && node.unreferenced()) { AST_Node.warn("{type} {name} is declared but not referenced [{file}:{line},{col}]", { type: node instanceof AST_Label ? "Label" : "Symbol", name: node.name, file: node.start.file, line: node.start.line, col: node.start.col }); } if (options.func_arguments && node instanceof AST_Lambda && node.uses_arguments) { AST_Node.warn("arguments used in function {name} [{file}:{line},{col}]", { name: node.name ? node.name.name : "anonymous", file: node.start.file, line: node.start.line, col: node.start.col }); } if (options.nested_defuns && node instanceof AST_Defun && !(tw.parent() instanceof AST_Scope)) { AST_Node.warn("Function {name} declared in nested statement \"{type}\" [{file}:{line},{col}]", { name: node.name.name, type: tw.parent().TYPE, file: node.start.file, line: node.start.line, col: node.start.col }); } }); this.walk(tw); }); /*********************************************************************** A JavaScript tokenizer / parser / beautifier / compressor. https://github.com/mishoo/UglifyJS2 -------------------------------- (C) --------------------------------- Author: Mihai Bazon http://mihai.bazon.net/blog Distributed under the BSD license: Copyright 2012 (c) Mihai Bazon Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS†AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ "use strict"; var EXPECT_DIRECTIVE = /^$|[;{][\s\n]*$/; function is_some_comments(comment) { // multiline comment return comment.type == "comment2" && /@preserve|@license|@cc_on/i.test(comment.value); } function OutputStream(options) { options = defaults(options, { ascii_only : false, beautify : false, bracketize : false, comments : false, indent_level : 4, indent_start : 0, inline_script : true, keep_quoted_props: false, max_line_len : false, preamble : null, preserve_line : false, quote_keys : false, quote_style : 0, screw_ie8 : true, semicolons : true, shebang : true, source_map : null, space_colon : true, unescape_regexps : false, width : 80, wrap_iife : false, }, true); // Convert comment option to RegExp if neccessary and set up comments filter var comment_filter = return_false; // Default case, throw all comments away if (options.comments) { var comments = options.comments; if (typeof options.comments === "string" && /^\/.*\/[a-zA-Z]*$/.test(options.comments)) { var regex_pos = options.comments.lastIndexOf("/"); comments = new RegExp( options.comments.substr(1, regex_pos - 1), options.comments.substr(regex_pos + 1) ); } if (comments instanceof RegExp) { comment_filter = function(comment) { return comment.type != "comment5" && comments.test(comment.value); }; } else if (typeof comments === "function") { comment_filter = function(comment) { return comment.type != "comment5" && comments(this, comment); }; } else if (comments === "some") { comment_filter = is_some_comments; } else { // NOTE includes "all" option comment_filter = return_true; } } var indentation = 0; var current_col = 0; var current_line = 1; var current_pos = 0; var OUTPUT = ""; function to_ascii(str, identifier) { return str.replace(/[\u0000-\u001f\u007f-\uffff]/g, function(ch) { var code = ch.charCodeAt(0).toString(16); if (code.length <= 2 && !identifier) { while (code.length < 2) code = "0" + code; return "\\x" + code; } else { while (code.length < 4) code = "0" + code; return "\\u" + code; } }); }; function make_string(str, quote) { var dq = 0, sq = 0; str = str.replace(/[\\\b\f\n\r\v\t\x22\x27\u2028\u2029\0\ufeff]/g, function(s, i){ switch (s) { case '"': ++dq; return '"'; case "'": ++sq; return "'"; case "\\": return "\\\\"; case "\n": return "\\n"; case "\r": return "\\r"; case "\t": return "\\t"; case "\b": return "\\b"; case "\f": return "\\f"; case "\x0B": return options.screw_ie8 ? "\\v" : "\\x0B"; case "\u2028": return "\\u2028"; case "\u2029": return "\\u2029"; case "\ufeff": return "\\ufeff"; case "\0": return /[0-7]/.test(str.charAt(i+1)) ? "\\x00" : "\\0"; } return s; }); function quote_single() { return "'" + str.replace(/\x27/g, "\\'") + "'"; } function quote_double() { return '"' + str.replace(/\x22/g, '\\"') + '"'; } if (options.ascii_only) str = to_ascii(str); switch (options.quote_style) { case 1: return quote_single(); case 2: return quote_double(); case 3: return quote == "'" ? quote_single() : quote_double(); default: return dq > sq ? quote_single() : quote_double(); } }; function encode_string(str, quote) { var ret = make_string(str, quote); if (options.inline_script) { ret = ret.replace(/<\x2fscript([>\/\t\n\f\r ])/gi, "<\\/script$1"); ret = ret.replace(/\x3c!--/g, "\\x3c!--"); ret = ret.replace(/--\x3e/g, "--\\x3e"); } return ret; }; function make_name(name) { name = name.toString(); if (options.ascii_only) name = to_ascii(name, true); return name; }; function make_indent(back) { return repeat_string(" ", options.indent_start + indentation - back * options.indent_level); }; /* -----[ beautification/minification ]----- */ var might_need_space = false; var might_need_semicolon = false; var might_add_newline = 0; var last = ""; var ensure_line_len = options.max_line_len ? function() { if (current_col > options.max_line_len) { if (might_add_newline) { var left = OUTPUT.slice(0, might_add_newline); var right = OUTPUT.slice(might_add_newline); OUTPUT = left + "\n" + right; current_line++; current_pos++; current_col = right.length; } if (current_col > options.max_line_len) { AST_Node.warn("Output exceeds {max_line_len} characters", options); } } might_add_newline = 0; } : noop; var requireSemicolonChars = makePredicate("( [ + * / - , ."); function print(str) { str = String(str); var ch = str.charAt(0); var prev = last.charAt(last.length - 1); if (might_need_semicolon) { might_need_semicolon = false; if (prev == ":" && ch == "}" || (!ch || ";}".indexOf(ch) < 0) && prev != ";") { if (options.semicolons || requireSemicolonChars(ch)) { OUTPUT += ";"; current_col++; current_pos++; } else { ensure_line_len(); OUTPUT += "\n"; current_pos++; current_line++; current_col = 0; if (/^\s+$/.test(str)) { // reset the semicolon flag, since we didn't print one // now and might still have to later might_need_semicolon = true; } } if (!options.beautify) might_need_space = false; } } if (!options.beautify && options.preserve_line && stack[stack.length - 1]) { var target_line = stack[stack.length - 1].start.line; while (current_line < target_line) { ensure_line_len(); OUTPUT += "\n"; current_pos++; current_line++; current_col = 0; might_need_space = false; } } if (might_need_space) { if ((is_identifier_char(prev) && (is_identifier_char(ch) || ch == "\\")) || (ch == "/" && ch == prev) || ((ch == "+" || ch == "-") && ch == last)) { OUTPUT += " "; current_col++; current_pos++; } might_need_space = false; } OUTPUT += str; current_pos += str.length; var a = str.split(/\r?\n/), n = a.length - 1; current_line += n; current_col += a[0].length; if (n > 0) { ensure_line_len(); current_col = a[n].length; } last = str; }; var space = options.beautify ? function() { print(" "); } : function() { might_need_space = true; }; var indent = options.beautify ? function(half) { if (options.beautify) { print(make_indent(half ? 0.5 : 0)); } } : noop; var with_indent = options.beautify ? function(col, cont) { if (col === true) col = next_indent(); var save_indentation = indentation; indentation = col; var ret = cont(); indentation = save_indentation; return ret; } : function(col, cont) { return cont() }; var newline = options.beautify ? function() { print("\n"); } : options.max_line_len ? function() { ensure_line_len(); might_add_newline = OUTPUT.length; } : noop; var semicolon = options.beautify ? function() { print(";"); } : function() { might_need_semicolon = true; }; function force_semicolon() { might_need_semicolon = false; print(";"); }; function next_indent() { return indentation + options.indent_level; }; function with_block(cont) { var ret; print("{"); newline(); with_indent(next_indent(), function(){ ret = cont(); }); indent(); print("}"); return ret; }; function with_parens(cont) { print("("); //XXX: still nice to have that for argument lists //var ret = with_indent(current_col, cont); var ret = cont(); print(")"); return ret; }; function with_square(cont) { print("["); //var ret = with_indent(current_col, cont); var ret = cont(); print("]"); return ret; }; function comma() { print(","); space(); }; function colon() { print(":"); if (options.space_colon) space(); }; var add_mapping = options.source_map ? function(token, name) { try { if (token) options.source_map.add( token.file || "?", current_line, current_col, token.line, token.col, (!name && token.type == "name") ? token.value : name ); } catch(ex) { AST_Node.warn("Couldn't figure out mapping for {file}:{line},{col} → {cline},{ccol} [{name}]", { file: token.file, line: token.line, col: token.col, cline: current_line, ccol: current_col, name: name || "" }) } } : noop; function get() { if (might_add_newline) { ensure_line_len(); } return OUTPUT; }; var stack = []; return { get : get, toString : get, indent : indent, indentation : function() { return indentation }, current_width : function() { return current_col - indentation }, should_break : function() { return options.width && this.current_width() >= options.width }, newline : newline, print : print, space : space, comma : comma, colon : colon, last : function() { return last }, semicolon : semicolon, force_semicolon : force_semicolon, to_ascii : to_ascii, print_name : function(name) { print(make_name(name)) }, print_string : function(str, quote, escape_directive) { var encoded = encode_string(str, quote); if (escape_directive === true && encoded.indexOf("\\") === -1) { // Insert semicolons to break directive prologue if (!EXPECT_DIRECTIVE.test(OUTPUT)) { force_semicolon(); } force_semicolon(); } print(encoded); }, encode_string : encode_string, next_indent : next_indent, with_indent : with_indent, with_block : with_block, with_parens : with_parens, with_square : with_square, add_mapping : add_mapping, option : function(opt) { return options[opt] }, comment_filter : comment_filter, line : function() { return current_line }, col : function() { return current_col }, pos : function() { return current_pos }, push_node : function(node) { stack.push(node) }, pop_node : function() { return stack.pop() }, parent : function(n) { return stack[stack.length - 2 - (n || 0)]; } }; }; /* -----[ code generators ]----- */ (function(){ /* -----[ utils ]----- */ function DEFPRINT(nodetype, generator) { nodetype.DEFMETHOD("_codegen", generator); }; var use_asm = false; var in_directive = false; AST_Node.DEFMETHOD("print", function(stream, force_parens){ var self = this, generator = self._codegen, prev_use_asm = use_asm; if (self instanceof AST_Directive && self.value == "use asm" && stream.parent() instanceof AST_Scope) { use_asm = true; } function doit() { self.add_comments(stream); self.add_source_map(stream); generator(self, stream); } stream.push_node(self); if (force_parens || self.needs_parens(stream)) { stream.with_parens(doit); } else { doit(); } stream.pop_node(); if (self instanceof AST_Scope) { use_asm = prev_use_asm; } }); AST_Node.DEFMETHOD("print_to_string", function(options){ var s = OutputStream(options); if (!options) s._readonly = true; this.print(s); return s.get(); }); /* -----[ comments ]----- */ AST_Node.DEFMETHOD("add_comments", function(output){ if (output._readonly) return; var self = this; var start = self.start; if (start && !start._comments_dumped) { start._comments_dumped = true; var comments = start.comments_before || []; // XXX: ugly fix for https://github.com/mishoo/UglifyJS2/issues/112 // and https://github.com/mishoo/UglifyJS2/issues/372 if (self instanceof AST_Exit && self.value) { self.value.walk(new TreeWalker(function(node){ if (node.start && node.start.comments_before) { comments = comments.concat(node.start.comments_before); node.start.comments_before = []; } if (node instanceof AST_Function || node instanceof AST_Array || node instanceof AST_Object) { return true; // don't go inside. } })); } if (output.pos() == 0) { if (comments.length > 0 && output.option("shebang") && comments[0].type == "comment5") { output.print("#!" + comments.shift().value + "\n"); output.indent(); } var preamble = output.option("preamble"); if (preamble) { output.print(preamble.replace(/\r\n?|[\n\u2028\u2029]|\s*$/g, "\n")); } } comments = comments.filter(output.comment_filter, self); // Keep single line comments after nlb, after nlb if (!output.option("beautify") && comments.length > 0 && /comment[134]/.test(comments[0].type) && output.col() !== 0 && comments[0].nlb) { output.print("\n"); } comments.forEach(function(c){ if (/comment[134]/.test(c.type)) { output.print("//" + c.value + "\n"); output.indent(); } else if (c.type == "comment2") { output.print("/*" + c.value + "*/"); if (start.nlb) { output.print("\n"); output.indent(); } else { output.space(); } } }); } }); /* -----[ PARENTHESES ]----- */ function PARENS(nodetype, func) { if (Array.isArray(nodetype)) { nodetype.forEach(function(nodetype){ PARENS(nodetype, func); }); } else { nodetype.DEFMETHOD("needs_parens", func); } }; PARENS(AST_Node, function(){ return false; }); // a function expression needs parens around it when it's provably // the first token to appear in a statement. PARENS(AST_Function, function(output){ if (first_in_statement(output)) { return true; } if (output.option('wrap_iife')) { var p = output.parent(); return p instanceof AST_Call && p.expression === this; } return false; }); // same goes for an object literal, because otherwise it would be // interpreted as a block of code. PARENS(AST_Object, function(output){ return first_in_statement(output); }); PARENS(AST_Unary, function(output){ var p = output.parent(); return p instanceof AST_PropAccess && p.expression === this || p instanceof AST_Call && p.expression === this; }); PARENS(AST_Seq, function(output){ var p = output.parent(); return p instanceof AST_Call // (foo, bar)() or foo(1, (2, 3), 4) || p instanceof AST_Unary // !(foo, bar, baz) || p instanceof AST_Binary // 1 + (2, 3) + 4 ==> 8 || p instanceof AST_VarDef // var a = (1, 2), b = a + a; ==> b == 4 || p instanceof AST_PropAccess // (1, {foo:2}).foo or (1, {foo:2})["foo"] ==> 2 || p instanceof AST_Array // [ 1, (2, 3), 4 ] ==> [ 1, 3, 4 ] || p instanceof AST_ObjectProperty // { foo: (1, 2) }.foo ==> 2 || p instanceof AST_Conditional /* (false, true) ? (a = 10, b = 20) : (c = 30) * ==> 20 (side effect, set a := 10 and b := 20) */ ; }); PARENS(AST_Binary, function(output){ var p = output.parent(); // (foo && bar)() if (p instanceof AST_Call && p.expression === this) return true; // typeof (foo && bar) if (p instanceof AST_Unary) return true; // (foo && bar)["prop"], (foo && bar).prop if (p instanceof AST_PropAccess && p.expression === this) return true; // this deals with precedence: 3 * (2 + 1) if (p instanceof AST_Binary) { var po = p.operator, pp = PRECEDENCE[po]; var so = this.operator, sp = PRECEDENCE[so]; if (pp > sp || (pp == sp && this === p.right)) { return true; } } }); PARENS(AST_PropAccess, function(output){ var p = output.parent(); if (p instanceof AST_New && p.expression === this) { // i.e. new (foo.bar().baz) // // if there's one call into this subtree, then we need // parens around it too, otherwise the call will be // interpreted as passing the arguments to the upper New // expression. try { this.walk(new TreeWalker(function(node){ if (node instanceof AST_Call) throw p; })); } catch(ex) { if (ex !== p) throw ex; return true; } } }); PARENS(AST_Call, function(output){ var p = output.parent(), p1; if (p instanceof AST_New && p.expression === this) return true; // workaround for Safari bug. // https://bugs.webkit.org/show_bug.cgi?id=123506 return this.expression instanceof AST_Function && p instanceof AST_PropAccess && p.expression === this && (p1 = output.parent(1)) instanceof AST_Assign && p1.left === p; }); PARENS(AST_New, function(output){ var p = output.parent(); if (!need_constructor_parens(this, output) && (p instanceof AST_PropAccess // (new Date).getTime(), (new Date)["getTime"]() || p instanceof AST_Call && p.expression === this)) // (new foo)(bar) return true; }); PARENS(AST_Number, function(output){ var p = output.parent(); if (p instanceof AST_PropAccess && p.expression === this) { var value = this.getValue(); if (value < 0 || /^0/.test(make_num(value))) { return true; } } }); PARENS([ AST_Assign, AST_Conditional ], function (output){ var p = output.parent(); // !(a = false) → true if (p instanceof AST_Unary) return true; // 1 + (a = 2) + 3 → 6, side effect setting a = 2 if (p instanceof AST_Binary && !(p instanceof AST_Assign)) return true; // (a = func)() —or— new (a = Object)() if (p instanceof AST_Call && p.expression === this) return true; // (a = foo) ? bar : baz if (p instanceof AST_Conditional && p.condition === this) return true; // (a = foo)["prop"] —or— (a = foo).prop if (p instanceof AST_PropAccess && p.expression === this) return true; }); /* -----[ PRINTERS ]----- */ DEFPRINT(AST_Directive, function(self, output){ output.print_string(self.value, self.quote); output.semicolon(); }); DEFPRINT(AST_Debugger, function(self, output){ output.print("debugger"); output.semicolon(); }); /* -----[ statements ]----- */ function display_body(body, is_toplevel, output, allow_directives) { var last = body.length - 1; in_directive = allow_directives; body.forEach(function(stmt, i){ if (in_directive === true && !(stmt instanceof AST_Directive || stmt instanceof AST_EmptyStatement || (stmt instanceof AST_SimpleStatement && stmt.body instanceof AST_String) )) { in_directive = false; } if (!(stmt instanceof AST_EmptyStatement)) { output.indent(); stmt.print(output); if (!(i == last && is_toplevel)) { output.newline(); if (is_toplevel) output.newline(); } } if (in_directive === true && stmt instanceof AST_SimpleStatement && stmt.body instanceof AST_String ) { in_directive = false; } }); in_directive = false; }; AST_StatementWithBody.DEFMETHOD("_do_print_body", function(output){ force_statement(this.body, output); }); DEFPRINT(AST_Statement, function(self, output){ self.body.print(output); output.semicolon(); }); DEFPRINT(AST_Toplevel, function(self, output){ display_body(self.body, true, output, true); output.print(""); }); DEFPRINT(AST_LabeledStatement, function(self, output){ self.label.print(output); output.colon(); self.body.print(output); }); DEFPRINT(AST_SimpleStatement, function(self, output){ self.body.print(output); output.semicolon(); }); function print_bracketed(body, output, allow_directives) { if (body.length > 0) output.with_block(function(){ display_body(body, false, output, allow_directives); }); else output.print("{}"); }; DEFPRINT(AST_BlockStatement, function(self, output){ print_bracketed(self.body, output); }); DEFPRINT(AST_EmptyStatement, function(self, output){ output.semicolon(); }); DEFPRINT(AST_Do, function(self, output){ output.print("do"); output.space(); make_block(self.body, output); output.space(); output.print("while"); output.space(); output.with_parens(function(){ self.condition.print(output); }); output.semicolon(); }); DEFPRINT(AST_While, function(self, output){ output.print("while"); output.space(); output.with_parens(function(){ self.condition.print(output); }); output.space(); self._do_print_body(output); }); DEFPRINT(AST_For, function(self, output){ output.print("for"); output.space(); output.with_parens(function(){ if (self.init) { if (self.init instanceof AST_Definitions) { self.init.print(output); } else { parenthesize_for_noin(self.init, output, true); } output.print(";"); output.space(); } else { output.print(";"); } if (self.condition) { self.condition.print(output); output.print(";"); output.space(); } else { output.print(";"); } if (self.step) { self.step.print(output); } }); output.space(); self._do_print_body(output); }); DEFPRINT(AST_ForIn, function(self, output){ output.print("for"); output.space(); output.with_parens(function(){ self.init.print(output); output.space(); output.print("in"); output.space(); self.object.print(output); }); output.space(); self._do_print_body(output); }); DEFPRINT(AST_With, function(self, output){ output.print("with"); output.space(); output.with_parens(function(){ self.expression.print(output); }); output.space(); self._do_print_body(output); }); /* -----[ functions ]----- */ AST_Lambda.DEFMETHOD("_do_print", function(output, nokeyword){ var self = this; if (!nokeyword) { output.print("function"); } if (self.name) { output.space(); self.name.print(output); } output.with_parens(function(){ self.argnames.forEach(function(arg, i){ if (i) output.comma(); arg.print(output); }); }); output.space(); print_bracketed(self.body, output, true); }); DEFPRINT(AST_Lambda, function(self, output){ self._do_print(output); }); /* -----[ exits ]----- */ AST_Exit.DEFMETHOD("_do_print", function(output, kind){ output.print(kind); if (this.value) { output.space(); this.value.print(output); } output.semicolon(); }); DEFPRINT(AST_Return, function(self, output){ self._do_print(output, "return"); }); DEFPRINT(AST_Throw, function(self, output){ self._do_print(output, "throw"); }); /* -----[ loop control ]----- */ AST_LoopControl.DEFMETHOD("_do_print", function(output, kind){ output.print(kind); if (this.label) { output.space(); this.label.print(output); } output.semicolon(); }); DEFPRINT(AST_Break, function(self, output){ self._do_print(output, "break"); }); DEFPRINT(AST_Continue, function(self, output){ self._do_print(output, "continue"); }); /* -----[ if ]----- */ function make_then(self, output) { var b = self.body; if (output.option("bracketize") || !output.option("screw_ie8") && b instanceof AST_Do) return make_block(b, output); // The squeezer replaces "block"-s that contain only a single // statement with the statement itself; technically, the AST // is correct, but this can create problems when we output an // IF having an ELSE clause where the THEN clause ends in an // IF *without* an ELSE block (then the outer ELSE would refer // to the inner IF). This function checks for this case and // adds the block brackets if needed. if (!b) return output.force_semicolon(); while (true) { if (b instanceof AST_If) { if (!b.alternative) { make_block(self.body, output); return; } b = b.alternative; } else if (b instanceof AST_StatementWithBody) { b = b.body; } else break; } force_statement(self.body, output); }; DEFPRINT(AST_If, function(self, output){ output.print("if"); output.space(); output.with_parens(function(){ self.condition.print(output); }); output.space(); if (self.alternative) { make_then(self, output); output.space(); output.print("else"); output.space(); if (self.alternative instanceof AST_If) self.alternative.print(output); else force_statement(self.alternative, output); } else { self._do_print_body(output); } }); /* -----[ switch ]----- */ DEFPRINT(AST_Switch, function(self, output){ output.print("switch"); output.space(); output.with_parens(function(){ self.expression.print(output); }); output.space(); var last = self.body.length - 1; if (last < 0) output.print("{}"); else output.with_block(function(){ self.body.forEach(function(branch, i){ output.indent(true); branch.print(output); if (i < last && branch.body.length > 0) output.newline(); }); }); }); AST_SwitchBranch.DEFMETHOD("_do_print_body", function(output){ output.newline(); this.body.forEach(function(stmt){ output.indent(); stmt.print(output); output.newline(); }); }); DEFPRINT(AST_Default, function(self, output){ output.print("default:"); self._do_print_body(output); }); DEFPRINT(AST_Case, function(self, output){ output.print("case"); output.space(); self.expression.print(output); output.print(":"); self._do_print_body(output); }); /* -----[ exceptions ]----- */ DEFPRINT(AST_Try, function(self, output){ output.print("try"); output.space(); print_bracketed(self.body, output); if (self.bcatch) { output.space(); self.bcatch.print(output); } if (self.bfinally) { output.space(); self.bfinally.print(output); } }); DEFPRINT(AST_Catch, function(self, output){ output.print("catch"); output.space(); output.with_parens(function(){ self.argname.print(output); }); output.space(); print_bracketed(self.body, output); }); DEFPRINT(AST_Finally, function(self, output){ output.print("finally"); output.space(); print_bracketed(self.body, output); }); /* -----[ var/const ]----- */ AST_Definitions.DEFMETHOD("_do_print", function(output, kind){ output.print(kind); output.space(); this.definitions.forEach(function(def, i){ if (i) output.comma(); def.print(output); }); var p = output.parent(); var in_for = p instanceof AST_For || p instanceof AST_ForIn; var avoid_semicolon = in_for && p.init === this; if (!avoid_semicolon) output.semicolon(); }); DEFPRINT(AST_Var, function(self, output){ self._do_print(output, "var"); }); DEFPRINT(AST_Const, function(self, output){ self._do_print(output, "const"); }); function parenthesize_for_noin(node, output, noin) { if (!noin) node.print(output); else try { // need to take some precautions here: // https://github.com/mishoo/UglifyJS2/issues/60 node.walk(new TreeWalker(function(node){ if (node instanceof AST_Binary && node.operator == "in") throw output; })); node.print(output); } catch(ex) { if (ex !== output) throw ex; node.print(output, true); } }; DEFPRINT(AST_VarDef, function(self, output){ self.name.print(output); if (self.value) { output.space(); output.print("="); output.space(); var p = output.parent(1); var noin = p instanceof AST_For || p instanceof AST_ForIn; parenthesize_for_noin(self.value, output, noin); } }); /* -----[ other expressions ]----- */ DEFPRINT(AST_Call, function(self, output){ self.expression.print(output); if (self instanceof AST_New && !need_constructor_parens(self, output)) return; output.with_parens(function(){ self.args.forEach(function(expr, i){ if (i) output.comma(); expr.print(output); }); }); }); DEFPRINT(AST_New, function(self, output){ output.print("new"); output.space(); AST_Call.prototype._codegen(self, output); }); AST_Seq.DEFMETHOD("_do_print", function(output){ this.car.print(output); if (this.cdr) { output.comma(); if (output.should_break()) { output.newline(); output.indent(); } this.cdr.print(output); } }); DEFPRINT(AST_Seq, function(self, output){ self._do_print(output); // var p = output.parent(); // if (p instanceof AST_Statement) { // output.with_indent(output.next_indent(), function(){ // self._do_print(output); // }); // } else { // self._do_print(output); // } }); DEFPRINT(AST_Dot, function(self, output){ var expr = self.expression; expr.print(output); if (expr instanceof AST_Number && expr.getValue() >= 0) { if (!/[xa-f.)]/i.test(output.last())) { output.print("."); } } output.print("."); // the name after dot would be mapped about here. output.add_mapping(self.end); output.print_name(self.property); }); DEFPRINT(AST_Sub, function(self, output){ self.expression.print(output); output.print("["); self.property.print(output); output.print("]"); }); DEFPRINT(AST_UnaryPrefix, function(self, output){ var op = self.operator; output.print(op); if (/^[a-z]/i.test(op) || (/[+-]$/.test(op) && self.expression instanceof AST_UnaryPrefix && /^[+-]/.test(self.expression.operator))) { output.space(); } self.expression.print(output); }); DEFPRINT(AST_UnaryPostfix, function(self, output){ self.expression.print(output); output.print(self.operator); }); DEFPRINT(AST_Binary, function(self, output){ var op = self.operator; self.left.print(output); if (op[0] == ">" /* ">>" ">>>" ">" ">=" */ && self.left instanceof AST_UnaryPostfix && self.left.operator == "--") { // space is mandatory to avoid outputting --> output.print(" "); } else { // the space is optional depending on "beautify" output.space(); } output.print(op); if ((op == "<" || op == "<<") && self.right instanceof AST_UnaryPrefix && self.right.operator == "!" && self.right.expression instanceof AST_UnaryPrefix && self.right.expression.operator == "--") { // space is mandatory to avoid outputting x -= 2 self.operator = self.right.operator + "="; self.right = self.right.right; } else if (self.right.right instanceof AST_SymbolRef && self.right.right.name == self.left.name && member(self.right.operator, ASSIGN_OPS_COMMUTATIVE) && !self.right.left.has_side_effects(compressor)) { // x = 2 & x ---> x &= 2 self.operator = self.right.operator + "="; self.right = self.right.left; } } return self; }); OPT(AST_Conditional, function(self, compressor){ if (!compressor.option("conditionals")) return self; if (self.condition instanceof AST_Seq) { var car = self.condition.car; self.condition = self.condition.cdr; return AST_Seq.cons(car, self); } var cond = self.condition.evaluate(compressor); if (cond !== self.condition) { if (cond) { compressor.warn("Condition always true [{file}:{line},{col}]", self.start); return maintain_this_binding(compressor.parent(), self, self.consequent); } else { compressor.warn("Condition always false [{file}:{line},{col}]", self.start); return maintain_this_binding(compressor.parent(), self, self.alternative); } } var negated = cond.negate(compressor, first_in_statement(compressor)); if (best_of(compressor, cond, negated) === negated) { self = make_node(AST_Conditional, self, { condition: negated, consequent: self.alternative, alternative: self.consequent }); } var condition = self.condition; var consequent = self.consequent; var alternative = self.alternative; // x?x:y --> x||y if (condition instanceof AST_SymbolRef && consequent instanceof AST_SymbolRef && condition.definition() === consequent.definition()) { return make_node(AST_Binary, self, { operator: "||", left: condition, right: alternative }); } // if (foo) exp = something; else exp = something_else; // | // v // exp = foo ? something : something_else; if (consequent instanceof AST_Assign && alternative instanceof AST_Assign && consequent.operator == alternative.operator && consequent.left.equivalent_to(alternative.left) && (!self.condition.has_side_effects(compressor) || consequent.operator == "=" && !consequent.left.has_side_effects(compressor))) { return make_node(AST_Assign, self, { operator: consequent.operator, left: consequent.left, right: make_node(AST_Conditional, self, { condition: self.condition, consequent: consequent.right, alternative: alternative.right }) }); } // x ? y(a) : y(b) --> y(x ? a : b) if (consequent instanceof AST_Call && alternative.TYPE === consequent.TYPE && consequent.args.length == 1 && alternative.args.length == 1 && consequent.expression.equivalent_to(alternative.expression) && !consequent.expression.has_side_effects(compressor)) { consequent.args[0] = make_node(AST_Conditional, self, { condition: self.condition, consequent: consequent.args[0], alternative: alternative.args[0] }); return consequent; } // x?y?z:a:a --> x&&y?z:a if (consequent instanceof AST_Conditional && consequent.alternative.equivalent_to(alternative)) { return make_node(AST_Conditional, self, { condition: make_node(AST_Binary, self, { left: self.condition, operator: "&&", right: consequent.condition }), consequent: consequent.consequent, alternative: alternative }); } // x ? y : y --> x, y if (consequent.equivalent_to(alternative)) { return make_node(AST_Seq, self, { car: self.condition, cdr: consequent }).optimize(compressor); } if (is_true(self.consequent)) { if (is_false(self.alternative)) { // c ? true : false ---> !!c return booleanize(self.condition); } // c ? true : x ---> !!c || x return make_node(AST_Binary, self, { operator: "||", left: booleanize(self.condition), right: self.alternative }); } if (is_false(self.consequent)) { if (is_true(self.alternative)) { // c ? false : true ---> !c return booleanize(self.condition.negate(compressor)); } // c ? false : x ---> !c && x return make_node(AST_Binary, self, { operator: "&&", left: booleanize(self.condition.negate(compressor)), right: self.alternative }); } if (is_true(self.alternative)) { // c ? x : true ---> !c || x return make_node(AST_Binary, self, { operator: "||", left: booleanize(self.condition.negate(compressor)), right: self.consequent }); } if (is_false(self.alternative)) { // c ? x : false ---> !!c && x return make_node(AST_Binary, self, { operator: "&&", left: booleanize(self.condition), right: self.consequent }); } return self; function booleanize(node) { if (node.is_boolean()) return node; // !!expression return make_node(AST_UnaryPrefix, node, { operator: "!", expression: node.negate(compressor) }); } // AST_True or !0 function is_true(node) { return node instanceof AST_True || (node instanceof AST_UnaryPrefix && node.operator == "!" && node.expression instanceof AST_Constant && !node.expression.value); } // AST_False or !1 function is_false(node) { return node instanceof AST_False || (node instanceof AST_UnaryPrefix && node.operator == "!" && node.expression instanceof AST_Constant && !!node.expression.value); } }); OPT(AST_Boolean, function(self, compressor){ if (compressor.option("booleans")) { var p = compressor.parent(); if (p instanceof AST_Binary && (p.operator == "==" || p.operator == "!=")) { compressor.warn("Non-strict equality against boolean: {operator} {value} [{file}:{line},{col}]", { operator : p.operator, value : self.value, file : p.start.file, line : p.start.line, col : p.start.col, }); return make_node(AST_Number, self, { value: +self.value }); } return make_node(AST_UnaryPrefix, self, { operator: "!", expression: make_node(AST_Number, self, { value: 1 - self.value }) }); } return self; }); OPT(AST_Sub, function(self, compressor){ var prop = self.property; if (prop instanceof AST_String && compressor.option("properties")) { prop = prop.getValue(); if (RESERVED_WORDS(prop) ? compressor.option("screw_ie8") : is_identifier_string(prop)) { return make_node(AST_Dot, self, { expression : self.expression, property : prop }).optimize(compressor); } var v = parseFloat(prop); if (!isNaN(v) && v.toString() == prop) { self.property = make_node(AST_Number, self.property, { value: v }); } } var ev = self.evaluate(compressor); if (ev !== self) { ev = make_node_from_constant(ev, self).optimize(compressor); return best_of(compressor, ev, self); } return self; }); OPT(AST_Dot, function(self, compressor){ var def = self.resolve_defines(compressor); if (def) { return def.optimize(compressor); } var prop = self.property; if (RESERVED_WORDS(prop) && !compressor.option("screw_ie8")) { return make_node(AST_Sub, self, { expression : self.expression, property : make_node(AST_String, self, { value: prop }) }).optimize(compressor); } if (compressor.option("unsafe_proto") && self.expression instanceof AST_Dot && self.expression.property == "prototype") { var exp = self.expression.expression; if (exp instanceof AST_SymbolRef && exp.undeclared()) switch (exp.name) { case "Array": self.expression = make_node(AST_Array, self.expression, { elements: [] }); break; case "Object": self.expression = make_node(AST_Object, self.expression, { properties: [] }); break; case "String": self.expression = make_node(AST_String, self.expression, { value: "" }); break; } } var ev = self.evaluate(compressor); if (ev !== self) { ev = make_node_from_constant(ev, self).optimize(compressor); return best_of(compressor, ev, self); } return self; }); function literals_in_boolean_context(self, compressor) { if (compressor.option("booleans") && compressor.in_boolean_context()) { return best_of(compressor, self, make_node(AST_Seq, self, { car: self, cdr: make_node(AST_True, self) }).optimize(compressor)); } return self; }; OPT(AST_Array, literals_in_boolean_context); OPT(AST_Object, literals_in_boolean_context); OPT(AST_RegExp, literals_in_boolean_context); OPT(AST_Return, function(self, compressor){ if (self.value && is_undefined(self.value, compressor)) { self.value = null; } return self; }); OPT(AST_VarDef, function(self, compressor){ var defines = compressor.option("global_defs"); if (defines && HOP(defines, self.name.name)) { compressor.warn('global_defs ' + self.name.name + ' redefined [{file}:{line},{col}]', self.start); } return self; }); })(); /*********************************************************************** A JavaScript tokenizer / parser / beautifier / compressor. https://github.com/mishoo/UglifyJS2 -------------------------------- (C) --------------------------------- Author: Mihai Bazon http://mihai.bazon.net/blog Distributed under the BSD license: Copyright 2012 (c) Mihai Bazon Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS†AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ "use strict"; // a small wrapper around fitzgen's source-map library function SourceMap(options) { options = defaults(options, { file : null, root : null, orig : null, orig_line_diff : 0, dest_line_diff : 0, }); var generator = new MOZ_SourceMap.SourceMapGenerator({ file : options.file, sourceRoot : options.root }); var orig_map = options.orig && new MOZ_SourceMap.SourceMapConsumer(options.orig); if (orig_map && Array.isArray(options.orig.sources)) { orig_map._sources.toArray().forEach(function(source) { var sourceContent = orig_map.sourceContentFor(source, true); if (sourceContent) { generator.setSourceContent(source, sourceContent); } }); } function add(source, gen_line, gen_col, orig_line, orig_col, name) { if (orig_map) { var info = orig_map.originalPositionFor({ line: orig_line, column: orig_col }); if (info.source === null) { return; } source = info.source; orig_line = info.line; orig_col = info.column; name = info.name || name; } generator.addMapping({ generated : { line: gen_line + options.dest_line_diff, column: gen_col }, original : { line: orig_line + options.orig_line_diff, column: orig_col }, source : source, name : name }); }; return { add : add, get : function() { return generator }, toString : function() { return JSON.stringify(generator.toJSON()); } }; }; /*********************************************************************** A JavaScript tokenizer / parser / beautifier / compressor. https://github.com/mishoo/UglifyJS2 -------------------------------- (C) --------------------------------- Author: Mihai Bazon http://mihai.bazon.net/blog Distributed under the BSD license: Copyright 2012 (c) Mihai Bazon Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS†AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ "use strict"; (function(){ var normalize_directives = function(body) { var in_directive = true; for (var i = 0; i < body.length; i++) { if (in_directive && body[i] instanceof AST_Statement && body[i].body instanceof AST_String) { body[i] = new AST_Directive({ start: body[i].start, end: body[i].end, value: body[i].body.value }); } else if (in_directive && !(body[i] instanceof AST_Statement && body[i].body instanceof AST_String)) { in_directive = false; } } return body; }; var MOZ_TO_ME = { Program: function(M) { return new AST_Toplevel({ start: my_start_token(M), end: my_end_token(M), body: normalize_directives(M.body.map(from_moz)) }); }, FunctionDeclaration: function(M) { return new AST_Defun({ start: my_start_token(M), end: my_end_token(M), name: from_moz(M.id), argnames: M.params.map(from_moz), body: normalize_directives(from_moz(M.body).body) }); }, FunctionExpression: function(M) { return new AST_Function({ start: my_start_token(M), end: my_end_token(M), name: from_moz(M.id), argnames: M.params.map(from_moz), body: normalize_directives(from_moz(M.body).body) }); }, ExpressionStatement: function(M) { return new AST_SimpleStatement({ start: my_start_token(M), end: my_end_token(M), body: from_moz(M.expression) }); }, TryStatement: function(M) { var handlers = M.handlers || [M.handler]; if (handlers.length > 1 || M.guardedHandlers && M.guardedHandlers.length) { throw new Error("Multiple catch clauses are not supported."); } return new AST_Try({ start : my_start_token(M), end : my_end_token(M), body : from_moz(M.block).body, bcatch : from_moz(handlers[0]), bfinally : M.finalizer ? new AST_Finally(from_moz(M.finalizer)) : null }); }, Property: function(M) { var key = M.key; var args = { start : my_start_token(key), end : my_end_token(M.value), key : key.type == "Identifier" ? key.name : key.value, value : from_moz(M.value) }; if (M.kind == "init") return new AST_ObjectKeyVal(args); args.key = new AST_SymbolAccessor({ name: args.key }); args.value = new AST_Accessor(args.value); if (M.kind == "get") return new AST_ObjectGetter(args); if (M.kind == "set") return new AST_ObjectSetter(args); }, ArrayExpression: function(M) { return new AST_Array({ start : my_start_token(M), end : my_end_token(M), elements : M.elements.map(function(elem){ return elem === null ? new AST_Hole() : from_moz(elem); }) }); }, ObjectExpression: function(M) { return new AST_Object({ start : my_start_token(M), end : my_end_token(M), properties : M.properties.map(function(prop){ prop.type = "Property"; return from_moz(prop) }) }); }, SequenceExpression: function(M) { return AST_Seq.from_array(M.expressions.map(from_moz)); }, MemberExpression: function(M) { return new (M.computed ? AST_Sub : AST_Dot)({ start : my_start_token(M), end : my_end_token(M), property : M.computed ? from_moz(M.property) : M.property.name, expression : from_moz(M.object) }); }, SwitchCase: function(M) { return new (M.test ? AST_Case : AST_Default)({ start : my_start_token(M), end : my_end_token(M), expression : from_moz(M.test), body : M.consequent.map(from_moz) }); }, VariableDeclaration: function(M) { return new (M.kind === "const" ? AST_Const : AST_Var)({ start : my_start_token(M), end : my_end_token(M), definitions : M.declarations.map(from_moz) }); }, Literal: function(M) { var val = M.value, args = { start : my_start_token(M), end : my_end_token(M) }; if (val === null) return new AST_Null(args); switch (typeof val) { case "string": args.value = val; return new AST_String(args); case "number": args.value = val; return new AST_Number(args); case "boolean": return new (val ? AST_True : AST_False)(args); default: var rx = M.regex; if (rx && rx.pattern) { // RegExpLiteral as per ESTree AST spec args.value = new RegExp(rx.pattern, rx.flags).toString(); } else { // support legacy RegExp args.value = M.regex && M.raw ? M.raw : val; } return new AST_RegExp(args); } }, Identifier: function(M) { var p = FROM_MOZ_STACK[FROM_MOZ_STACK.length - 2]; return new ( p.type == "LabeledStatement" ? AST_Label : p.type == "VariableDeclarator" && p.id === M ? (p.kind == "const" ? AST_SymbolConst : AST_SymbolVar) : p.type == "FunctionExpression" ? (p.id === M ? AST_SymbolLambda : AST_SymbolFunarg) : p.type == "FunctionDeclaration" ? (p.id === M ? AST_SymbolDefun : AST_SymbolFunarg) : p.type == "CatchClause" ? AST_SymbolCatch : p.type == "BreakStatement" || p.type == "ContinueStatement" ? AST_LabelRef : AST_SymbolRef)({ start : my_start_token(M), end : my_end_token(M), name : M.name }); } }; MOZ_TO_ME.UpdateExpression = MOZ_TO_ME.UnaryExpression = function To_Moz_Unary(M) { var prefix = "prefix" in M ? M.prefix : M.type == "UnaryExpression" ? true : false; return new (prefix ? AST_UnaryPrefix : AST_UnaryPostfix)({ start : my_start_token(M), end : my_end_token(M), operator : M.operator, expression : from_moz(M.argument) }); }; map("EmptyStatement", AST_EmptyStatement); map("BlockStatement", AST_BlockStatement, "body@body"); map("IfStatement", AST_If, "test>condition, consequent>body, alternate>alternative"); map("LabeledStatement", AST_LabeledStatement, "label>label, body>body"); map("BreakStatement", AST_Break, "label>label"); map("ContinueStatement", AST_Continue, "label>label"); map("WithStatement", AST_With, "object>expression, body>body"); map("SwitchStatement", AST_Switch, "discriminant>expression, cases@body"); map("ReturnStatement", AST_Return, "argument>value"); map("ThrowStatement", AST_Throw, "argument>value"); map("WhileStatement", AST_While, "test>condition, body>body"); map("DoWhileStatement", AST_Do, "test>condition, body>body"); map("ForStatement", AST_For, "init>init, test>condition, update>step, body>body"); map("ForInStatement", AST_ForIn, "left>init, right>object, body>body"); map("DebuggerStatement", AST_Debugger); map("VariableDeclarator", AST_VarDef, "id>name, init>value"); map("CatchClause", AST_Catch, "param>argname, body%body"); map("ThisExpression", AST_This); map("BinaryExpression", AST_Binary, "operator=operator, left>left, right>right"); map("LogicalExpression", AST_Binary, "operator=operator, left>left, right>right"); map("AssignmentExpression", AST_Assign, "operator=operator, left>left, right>right"); map("ConditionalExpression", AST_Conditional, "test>condition, consequent>consequent, alternate>alternative"); map("NewExpression", AST_New, "callee>expression, arguments@args"); map("CallExpression", AST_Call, "callee>expression, arguments@args"); def_to_moz(AST_Toplevel, function To_Moz_Program(M) { return to_moz_scope("Program", M); }); def_to_moz(AST_Defun, function To_Moz_FunctionDeclaration(M) { return { type: "FunctionDeclaration", id: to_moz(M.name), params: M.argnames.map(to_moz), body: to_moz_scope("BlockStatement", M) } }); def_to_moz(AST_Function, function To_Moz_FunctionExpression(M) { return { type: "FunctionExpression", id: to_moz(M.name), params: M.argnames.map(to_moz), body: to_moz_scope("BlockStatement", M) } }); def_to_moz(AST_Directive, function To_Moz_Directive(M) { return { type: "ExpressionStatement", expression: { type: "Literal", value: M.value } }; }); def_to_moz(AST_SimpleStatement, function To_Moz_ExpressionStatement(M) { return { type: "ExpressionStatement", expression: to_moz(M.body) }; }); def_to_moz(AST_SwitchBranch, function To_Moz_SwitchCase(M) { return { type: "SwitchCase", test: to_moz(M.expression), consequent: M.body.map(to_moz) }; }); def_to_moz(AST_Try, function To_Moz_TryStatement(M) { return { type: "TryStatement", block: to_moz_block(M), handler: to_moz(M.bcatch), guardedHandlers: [], finalizer: to_moz(M.bfinally) }; }); def_to_moz(AST_Catch, function To_Moz_CatchClause(M) { return { type: "CatchClause", param: to_moz(M.argname), guard: null, body: to_moz_block(M) }; }); def_to_moz(AST_Definitions, function To_Moz_VariableDeclaration(M) { return { type: "VariableDeclaration", kind: M instanceof AST_Const ? "const" : "var", declarations: M.definitions.map(to_moz) }; }); def_to_moz(AST_Seq, function To_Moz_SequenceExpression(M) { return { type: "SequenceExpression", expressions: M.to_array().map(to_moz) }; }); def_to_moz(AST_PropAccess, function To_Moz_MemberExpression(M) { var isComputed = M instanceof AST_Sub; return { type: "MemberExpression", object: to_moz(M.expression), computed: isComputed, property: isComputed ? to_moz(M.property) : {type: "Identifier", name: M.property} }; }); def_to_moz(AST_Unary, function To_Moz_Unary(M) { return { type: M.operator == "++" || M.operator == "--" ? "UpdateExpression" : "UnaryExpression", operator: M.operator, prefix: M instanceof AST_UnaryPrefix, argument: to_moz(M.expression) }; }); def_to_moz(AST_Binary, function To_Moz_BinaryExpression(M) { return { type: M.operator == "&&" || M.operator == "||" ? "LogicalExpression" : "BinaryExpression", left: to_moz(M.left), operator: M.operator, right: to_moz(M.right) }; }); def_to_moz(AST_Array, function To_Moz_ArrayExpression(M) { return { type: "ArrayExpression", elements: M.elements.map(to_moz) }; }); def_to_moz(AST_Object, function To_Moz_ObjectExpression(M) { return { type: "ObjectExpression", properties: M.properties.map(to_moz) }; }); def_to_moz(AST_ObjectProperty, function To_Moz_Property(M) { var key = { type: "Literal", value: M.key instanceof AST_SymbolAccessor ? M.key.name : M.key }; var kind; if (M instanceof AST_ObjectKeyVal) { kind = "init"; } else if (M instanceof AST_ObjectGetter) { kind = "get"; } else if (M instanceof AST_ObjectSetter) { kind = "set"; } return { type: "Property", kind: kind, key: key, value: to_moz(M.value) }; }); def_to_moz(AST_Symbol, function To_Moz_Identifier(M) { var def = M.definition(); return { type: "Identifier", name: def ? def.mangled_name || def.name : M.name }; }); def_to_moz(AST_RegExp, function To_Moz_RegExpLiteral(M) { var value = M.value; return { type: "Literal", value: value, raw: value.toString(), regex: { pattern: value.source, flags: value.toString().match(/[gimuy]*$/)[0] } }; }); def_to_moz(AST_Constant, function To_Moz_Literal(M) { var value = M.value; if (typeof value === 'number' && (value < 0 || (value === 0 && 1 / value < 0))) { return { type: "UnaryExpression", operator: "-", prefix: true, argument: { type: "Literal", value: -value, raw: M.start.raw } }; } return { type: "Literal", value: value, raw: M.start.raw }; }); def_to_moz(AST_Atom, function To_Moz_Atom(M) { return { type: "Identifier", name: String(M.value) }; }); AST_Boolean.DEFMETHOD("to_mozilla_ast", AST_Constant.prototype.to_mozilla_ast); AST_Null.DEFMETHOD("to_mozilla_ast", AST_Constant.prototype.to_mozilla_ast); AST_Hole.DEFMETHOD("to_mozilla_ast", function To_Moz_ArrayHole() { return null }); AST_Block.DEFMETHOD("to_mozilla_ast", AST_BlockStatement.prototype.to_mozilla_ast); AST_Lambda.DEFMETHOD("to_mozilla_ast", AST_Function.prototype.to_mozilla_ast); /* -----[ tools ]----- */ function raw_token(moznode) { if (moznode.type == "Literal") { return moznode.raw != null ? moznode.raw : moznode.value + ""; } } function my_start_token(moznode) { var loc = moznode.loc, start = loc && loc.start; var range = moznode.range; return new AST_Token({ file : loc && loc.source, line : start && start.line, col : start && start.column, pos : range ? range[0] : moznode.start, endline : start && start.line, endcol : start && start.column, endpos : range ? range[0] : moznode.start, raw : raw_token(moznode), }); }; function my_end_token(moznode) { var loc = moznode.loc, end = loc && loc.end; var range = moznode.range; return new AST_Token({ file : loc && loc.source, line : end && end.line, col : end && end.column, pos : range ? range[1] : moznode.end, endline : end && end.line, endcol : end && end.column, endpos : range ? range[1] : moznode.end, raw : raw_token(moznode), }); }; function map(moztype, mytype, propmap) { var moz_to_me = "function From_Moz_" + moztype + "(M){\n"; moz_to_me += "return new U2." + mytype.name + "({\n" + "start: my_start_token(M),\n" + "end: my_end_token(M)"; var me_to_moz = "function To_Moz_" + moztype + "(M){\n"; me_to_moz += "return {\n" + "type: " + JSON.stringify(moztype); if (propmap) propmap.split(/\s*,\s*/).forEach(function(prop){ var m = /([a-z0-9$_]+)(=|@|>|%)([a-z0-9$_]+)/i.exec(prop); if (!m) throw new Error("Can't understand property map: " + prop); var moz = m[1], how = m[2], my = m[3]; moz_to_me += ",\n" + my + ": "; me_to_moz += ",\n" + moz + ": "; switch (how) { case "@": moz_to_me += "M." + moz + ".map(from_moz)"; me_to_moz += "M." + my + ".map(to_moz)"; break; case ">": moz_to_me += "from_moz(M." + moz + ")"; me_to_moz += "to_moz(M." + my + ")"; break; case "=": moz_to_me += "M." + moz; me_to_moz += "M." + my; break; case "%": moz_to_me += "from_moz(M." + moz + ").body"; me_to_moz += "to_moz_block(M)"; break; default: throw new Error("Can't understand operator in propmap: " + prop); } }); moz_to_me += "\n})\n}"; me_to_moz += "\n}\n}"; //moz_to_me = parse(moz_to_me).print_to_string({ beautify: true }); //me_to_moz = parse(me_to_moz).print_to_string({ beautify: true }); //console.log(moz_to_me); moz_to_me = new Function("U2", "my_start_token", "my_end_token", "from_moz", "return(" + moz_to_me + ")")( exports, my_start_token, my_end_token, from_moz ); me_to_moz = new Function("to_moz", "to_moz_block", "to_moz_scope", "return(" + me_to_moz + ")")( to_moz, to_moz_block, to_moz_scope ); MOZ_TO_ME[moztype] = moz_to_me; def_to_moz(mytype, me_to_moz); }; var FROM_MOZ_STACK = null; function from_moz(node) { FROM_MOZ_STACK.push(node); var ret = node != null ? MOZ_TO_ME[node.type](node) : null; FROM_MOZ_STACK.pop(); return ret; }; AST_Node.from_mozilla_ast = function(node){ var save_stack = FROM_MOZ_STACK; FROM_MOZ_STACK = []; var ast = from_moz(node); FROM_MOZ_STACK = save_stack; return ast; }; function set_moz_loc(mynode, moznode, myparent) { var start = mynode.start; var end = mynode.end; if (start.pos != null && end.endpos != null) { moznode.range = [start.pos, end.endpos]; } if (start.line) { moznode.loc = { start: {line: start.line, column: start.col}, end: end.endline ? {line: end.endline, column: end.endcol} : null }; if (start.file) { moznode.loc.source = start.file; } } return moznode; }; function def_to_moz(mytype, handler) { mytype.DEFMETHOD("to_mozilla_ast", function() { return set_moz_loc(this, handler(this)); }); }; function to_moz(node) { return node != null ? node.to_mozilla_ast() : null; }; function to_moz_block(node) { return { type: "BlockStatement", body: node.body.map(to_moz) }; }; function to_moz_scope(type, node) { var body = node.body.map(to_moz); if (node.body[0] instanceof AST_SimpleStatement && node.body[0].body instanceof AST_String) { body.unshift(to_moz(new AST_EmptyStatement(node.body[0]))); } return { type: type, body: body }; }; })(); /*********************************************************************** A JavaScript tokenizer / parser / beautifier / compressor. https://github.com/mishoo/UglifyJS2 -------------------------------- (C) --------------------------------- Author: Mihai Bazon http://mihai.bazon.net/blog Distributed under the BSD license: Copyright 2012 (c) Mihai Bazon Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS†AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ "use strict"; function find_builtins() { // NaN will be included due to Number.NaN var a = [ "null", "true", "false", "Infinity", "-Infinity", "undefined", ]; [ Object, Array, Function, Number, String, Boolean, Error, Math, Date, RegExp ].forEach(function(ctor){ Object.getOwnPropertyNames(ctor).map(add); if (ctor.prototype) { Object.getOwnPropertyNames(ctor.prototype).map(add); } }); function add(name) { push_uniq(a, name); } return a; } function mangle_properties(ast, options) { options = defaults(options, { cache: null, debug: false, ignore_quoted: false, only_cache: false, regex: null, reserved: null, }); var reserved = options.reserved; if (reserved == null) reserved = find_builtins(); var cache = options.cache; if (cache == null) { cache = { cname: -1, props: new Dictionary() }; } var regex = options.regex; var ignore_quoted = options.ignore_quoted; // note debug is either false (disabled), or a string of the debug suffix to use (enabled). // note debug may be enabled as an empty string, which is falsey. Also treat passing 'true' // the same as passing an empty string. var debug = (options.debug !== false); var debug_name_suffix; if (debug) { debug_name_suffix = (options.debug === true ? "" : options.debug); } var names_to_mangle = []; var unmangleable = []; var ignored = {}; // step 1: find candidates to mangle ast.walk(new TreeWalker(function(node){ if (node instanceof AST_ObjectKeyVal) { add(node.key, ignore_quoted && node.quote); } else if (node instanceof AST_ObjectProperty) { // setter or getter, since KeyVal is handled above add(node.key.name); } else if (node instanceof AST_Dot) { add(node.property); } else if (node instanceof AST_Sub) { addStrings(node.property, ignore_quoted); } })); // step 2: transform the tree, renaming properties return ast.transform(new TreeTransformer(function(node){ if (node instanceof AST_ObjectKeyVal) { if (!(ignore_quoted && node.quote)) node.key = mangle(node.key); } else if (node instanceof AST_ObjectProperty) { // setter or getter node.key.name = mangle(node.key.name); } else if (node instanceof AST_Dot) { node.property = mangle(node.property); } else if (node instanceof AST_Sub) { if (!ignore_quoted) node.property = mangleStrings(node.property); } // else if (node instanceof AST_String) { // if (should_mangle(node.value)) { // AST_Node.warn( // "Found \"{prop}\" property candidate for mangling in an arbitrary string [{file}:{line},{col}]", { // file : node.start.file, // line : node.start.line, // col : node.start.col, // prop : node.value // } // ); // } // } })); // only function declarations after this line function can_mangle(name) { if (unmangleable.indexOf(name) >= 0) return false; if (reserved.indexOf(name) >= 0) return false; if (options.only_cache) { return cache.props.has(name); } if (/^-?[0-9]+(\.[0-9]+)?(e[+-][0-9]+)?$/.test(name)) return false; return true; } function should_mangle(name) { if (ignore_quoted && name in ignored) return false; if (regex && !regex.test(name)) return false; if (reserved.indexOf(name) >= 0) return false; return cache.props.has(name) || names_to_mangle.indexOf(name) >= 0; } function add(name, ignore) { if (ignore) { ignored[name] = true; return; } if (can_mangle(name)) push_uniq(names_to_mangle, name); if (!should_mangle(name)) { push_uniq(unmangleable, name); } } function mangle(name) { if (!should_mangle(name)) { return name; } var mangled = cache.props.get(name); if (!mangled) { if (debug) { // debug mode: use a prefix and suffix to preserve readability, e.g. o.foo -> o._$foo$NNN_. var debug_mangled = "_$" + name + "$" + debug_name_suffix + "_"; if (can_mangle(debug_mangled) && !(ignore_quoted && debug_mangled in ignored)) { mangled = debug_mangled; } } // either debug mode is off, or it is on and we could not use the mangled name if (!mangled) { // note can_mangle() does not check if the name collides with the 'ignored' set // (filled with quoted properties when ignore_quoted set). Make sure we add this // check so we don't collide with a quoted name. do { mangled = base54(++cache.cname); } while (!can_mangle(mangled) || (ignore_quoted && mangled in ignored)); } cache.props.set(name, mangled); } return mangled; } function addStrings(node, ignore) { var out = {}; try { (function walk(node){ node.walk(new TreeWalker(function(node){ if (node instanceof AST_Seq) { walk(node.cdr); return true; } if (node instanceof AST_String) { add(node.value, ignore); return true; } if (node instanceof AST_Conditional) { walk(node.consequent); walk(node.alternative); return true; } throw out; })); })(node); } catch(ex) { if (ex !== out) throw ex; } } function mangleStrings(node) { return node.transform(new TreeTransformer(function(node){ if (node instanceof AST_Seq) { node.cdr = mangleStrings(node.cdr); } else if (node instanceof AST_String) { node.value = mangle(node.value); } else if (node instanceof AST_Conditional) { node.consequent = mangleStrings(node.consequent); node.alternative = mangleStrings(node.alternative); } return node; })); } } exports["Compressor"] = Compressor; exports["DefaultsError"] = DefaultsError; exports["Dictionary"] = Dictionary; exports["JS_Parse_Error"] = JS_Parse_Error; exports["MAP"] = MAP; exports["OutputStream"] = OutputStream; exports["SourceMap"] = SourceMap; exports["TreeTransformer"] = TreeTransformer; exports["TreeWalker"] = TreeWalker; exports["base54"] = base54; exports["defaults"] = defaults; exports["mangle_properties"] = mangle_properties; exports["merge"] = merge; exports["parse"] = parse; exports["push_uniq"] = push_uniq; exports["string_template"] = string_template; exports["tokenizer"] = tokenizer; exports["is_identifier"] = is_identifier; exports["SymbolDef"] = SymbolDef; AST_Node.warn_function = function(txt) { logger.error("uglifyjs WARN: " + txt); }; exports.AST_Node.warn_function = function(txt) { console.error("WARN: %s", txt); }; function read_source_map(code) { var match = /\n\/\/# sourceMappingURL=data:application\/json(;.*?)?;base64,(.*)/.exec(code); if (!match) { exports.AST_Node.warn("inline source map not found"); return null; } return JSON.parse(new Buffer(match[2], "base64")); } exports.minify = function(files, options, name) { options = exports.defaults(options, { compress : {}, fromString : false, inSourceMap : null, mangle : {}, mangleProperties : false, nameCache : null, outFileName : null, output : null, outSourceMap : null, parse : {}, sourceMapInline : false, sourceMapUrl : null, sourceRoot : null, spidermonkey : false, warnings : false, }); exports.base54.reset(); var inMap = options.inSourceMap; if (typeof inMap == "string" && inMap != "inline") { inMap = JSON.parse(rjsFile.readFile(inMap, "utf8")); } // 1. parse var toplevel = null, sourcesContent = {}; if (options.spidermonkey) { if (inMap == "inline") { throw new Error("inline source map only works with built-in parser"); } toplevel = exports.AST_Node.from_mozilla_ast(files); } else { var addFile = function(file, fileUrl) { var code = options.fromString ? file : rjsFile.readFile(file, "utf8"); if (inMap == "inline") { inMap = read_source_map(code); } sourcesContent[fileUrl] = code; toplevel = exports.parse(code, { filename: fileUrl, toplevel: toplevel, bare_returns: options.parse ? options.parse.bare_returns : undefined }); } if (!options.fromString) { files = exports.simple_glob(files); if (inMap == "inline" && files.length > 1) { throw new Error("inline source map only works with singular input"); } } [].concat(files).forEach(function (files, i) { if (typeof files === 'string') { addFile(files, options.fromString ? i : files); } else { for (var fileUrl in files) { addFile(files[fileUrl], fileUrl); } } }); } if (options.wrap) { toplevel = toplevel.wrap_commonjs(options.wrap, options.exportAll); } // 2. compress if (options.compress) { var compress = { warnings: options.warnings }; exports.merge(compress, options.compress); toplevel.figure_out_scope(options.mangle); var sq = exports.Compressor(compress); toplevel = sq.compress(toplevel); } // 3. mangle properties if (options.mangleProperties || options.nameCache) { options.mangleProperties.cache = exports.readNameCache(options.nameCache, "props"); toplevel = exports.mangle_properties(toplevel, options.mangleProperties); exports.writeNameCache(options.nameCache, "props", options.mangleProperties.cache); } // 4. mangle if (options.mangle) { toplevel.figure_out_scope(options.mangle); toplevel.compute_char_frequency(options.mangle); toplevel.mangle_names(options.mangle); } // 5. output var output = { max_line_len: 32000 }; if (options.outSourceMap || options.sourceMapInline) { output.source_map = exports.SourceMap({ // prefer outFileName, otherwise use outSourceMap without .map suffix file: options.outFileName || (typeof options.outSourceMap === 'string' ? options.outSourceMap.replace(/\.map$/i, '') : null), orig: inMap, root: options.sourceRoot }); if (options.sourceMapIncludeSources) { for (var file in sourcesContent) { if (sourcesContent.hasOwnProperty(file)) { output.source_map.get().setSourceContent(file, sourcesContent[file]); } } } } if (options.output) { exports.merge(output, options.output); } var stream = exports.OutputStream(output); toplevel.print(stream); var source_map = output.source_map; if (source_map) { source_map = source_map + ""; } var mappingUrlPrefix = "\n//# sourceMappingURL="; if (options.sourceMapInline) { stream += mappingUrlPrefix + "data:application/json;charset=utf-8;base64," + new Buffer(source_map).toString("base64"); } else if (options.outSourceMap && typeof options.outSourceMap === "string" && options.sourceMapUrl !== false) { stream += mappingUrlPrefix + (typeof options.sourceMapUrl === "string" ? options.sourceMapUrl : options.outSourceMap); } return { code : stream + "", map : source_map }; }; // exports.describe_ast = function() { // function doitem(ctor) { // var sub = {}; // ctor.SUBCLASSES.forEach(function(ctor){ // sub[ctor.TYPE] = doitem(ctor); // }); // var ret = {}; // if (ctor.SELF_PROPS.length > 0) ret.props = ctor.SELF_PROPS; // if (ctor.SUBCLASSES.length > 0) ret.sub = sub; // return ret; // } // return doitem(exports.AST_Node).sub; // } exports.describe_ast = function() { var out = exports.OutputStream({ beautify: true }); function doitem(ctor) { out.print("AST_" + ctor.TYPE); var props = ctor.SELF_PROPS.filter(function(prop){ return !/^\$/.test(prop); }); if (props.length > 0) { out.space(); out.with_parens(function(){ props.forEach(function(prop, i){ if (i) out.space(); out.print(prop); }); }); } if (ctor.documentation) { out.space(); out.print_string(ctor.documentation); } if (ctor.SUBCLASSES.length > 0) { out.space(); out.with_block(function(){ ctor.SUBCLASSES.forEach(function(ctor, i){ out.indent(); doitem(ctor); out.newline(); }); }); } }; doitem(exports.AST_Node); return out + ""; }; function readReservedFile(filename, reserved) { if (!reserved) { reserved = { vars: [], props: [] }; } var data = rjsFile.readFile(filename, "utf8"); data = JSON.parse(data); if (data.vars) { data.vars.forEach(function(name){ exports.push_uniq(reserved.vars, name); }); } if (data.props) { data.props.forEach(function(name){ exports.push_uniq(reserved.props, name); }); } return reserved; } exports.readReservedFile = readReservedFile; exports.readDefaultReservedFile = function(reserved) { return readReservedFile(require.resolve("./domprops.json"), reserved); }; exports.readNameCache = function(filename, key) { var cache = null; if (filename) { try { var cache = rjsFile.readFile(filename, "utf8"); cache = JSON.parse(cache)[key]; if (!cache) throw "init"; cache.props = exports.Dictionary.fromObject(cache.props); } catch(ex) { cache = { cname: -1, props: new exports.Dictionary() }; } } return cache; }; exports.writeNameCache = function(filename, key, cache) { if (filename) { var data; try { data = rjsFile.readFile(filename, "utf8"); data = JSON.parse(data); } catch(ex) { data = {}; } data[key] = { cname: cache.cname, props: cache.props.toObject() }; rjsFile.writeFile(filename, JSON.stringify(data, null, 2), "utf8"); } }; // A file glob function that only supports "*" and "?" wildcards in the basename. // Example: "foo/bar/*baz??.*.js" // Argument `glob` may be a string or an array of strings. // Returns an array of strings. Garbage in, garbage out. exports.simple_glob = function simple_glob(glob) { if (Array.isArray(glob)) { return [].concat.apply([], glob.map(simple_glob)); } if (glob.match(/\*|\?/)) { var dir = path.dirname(glob); try { var entries = fs.readdirSync(dir); } catch (ex) {} if (entries) { var pattern = "^" + path.basename(glob) .replace(/[.+^$[\]\\(){}]/g, "\\$&") .replace(/\*/g, "[^/\\\\]*") .replace(/\?/g, "[^/\\\\]") + "$"; var mod = process.platform === "win32" ? "i" : ""; var rx = new RegExp(pattern, mod); var results = entries.filter(function(name) { return rx.test(name); }).map(function(name) { return path.join(dir, name); }); if (results.length) return results; } } return [ glob ]; }; }); r.js-2.3.6/build/jslib/uglifyjs/000077500000000000000000000000001334071220400164305ustar00rootroot00000000000000r.js-2.3.6/build/jslib/uglifyjs/README.md000066400000000000000000000030241334071220400177060ustar00rootroot00000000000000Sets up uglifyjs for use in the optimizer. Current embedded version: 2.8.29, source-map 0.5.6 Steps: ./generate.sh Then update this file with the uglifyjs version fetched. * UPDATE VERSION NUMBERS IN X.JS * Confirm the `raw` array in combine.js is correct. THINGS TO CHECK: * Compare node_modules/uglify-js/tools/node.js and what is put in last part of the combined file. * REMOVE these functions from the end: * readReservedFile * exports.readReservedFile, * exports.readDefaultReservedFile, * exports.simple_glob REMOVE this section: ```javascript // workaround for tty output truncation upon process.exit() [process.stdout, process.stderr].forEach(function(stream){ if (stream._handle && stream._handle.setBlocking) stream._handle.setBlocking(true); }); ``` ALSO REMOVE this section: ```javascript var path = require("path"); var fs = require("fs"); var UglifyJS = exports; var FILES = exports.FILES = [ "../lib/utils.js", "../lib/ast.js", "../lib/parse.js", "../lib/transform.js", "../lib/scope.js", "../lib/output.js", "../lib/compress.js", "../lib/sourcemap.js", "../lib/mozilla-ast.js", "../lib/propmangle.js", "./exports.js", ].map(function(file){ return require.resolve(file); }); new Function("MOZ_SourceMap", "exports", FILES.map(function(file){ return rjsFile.readFile(file, "utf8"); }).join("\n\n"))( require("source-map"), UglifyJS ); ``` r.js-2.3.6/build/jslib/uglifyjs/combine.js000066400000000000000000000034621334071220400204070ustar00rootroot00000000000000/*jslint node: true, nomen: true */ var exportContents, exportIndex, fs = require('fs'), path = require('path'), pkgDir = path.join(__dirname, 'temp', 'node_modules', 'uglify-js'), pre = fs.readFileSync(__dirname + '/pre.txt', 'utf8'), raw = [ "utils.js", "ast.js", "parse.js", "transform.js", "scope.js", "output.js", "compress.js", "sourcemap.js", "mozilla-ast.js", "propmangle.js", "../tools/exports.js" ].map(function (filePath) { return fs.readFileSync(path.join(pkgDir, 'lib', filePath), 'utf8'); }).join('\n'), post = fs.readFileSync(__dirname + '/post.txt', 'utf8'), toolContents = fs.readFileSync(path.join(pkgDir, 'tools', 'node.js'), 'utf8'); exportContents = toolContents.replace(/UglifyJS\./g, 'exports.'); // Modify some things for the embedding: exportContents = exportContents.replace(/fs\.readFileSync/g, 'rjsFile.readFile'); exportContents = exportContents.replace(/fs\.writeFileSync/g, 'rjsFile.writeFile'); exportContents = exportContents.replace('exports.minify = function(files, options) {', 'exports.minify = function(files, options, name) {'); exportContents = exportContents.replace('filename: options.fromString ? i : file,', 'filename: options.fromString ? name : file,'); // Node 0.10/0.12 do not like the addFile function declaration with the "use strict" // that is used near that declaration, but not at the top of the file. // https://github.com/requirejs/r.js/pull/929 exportContents = exportContents.replace(/function addFile\(/, 'var addFile = function('); fs.writeFileSync(__dirname + '/../uglifyjs.js', [ pre, raw, 'AST_Node.warn_function = function(txt) { logger.error("uglifyjs WARN: " + txt); };', exportContents, post ].join('\n'), 'utf8'); r.js-2.3.6/build/jslib/uglifyjs/fix-sourcemap.js000066400000000000000000000006151334071220400215520ustar00rootroot00000000000000/*jslint node: true, regexp: true */ var fs = require('fs'), path = require('path'), fileName = process.argv[2], umdStartRegExp = /\(function webpackUniversalModuleDefinition\(root, factory\) \{/; var fileContents = fs.readFileSync(fileName, 'utf8'); fileContents = fileContents.replace(umdStartRegExp, '$&\nvar exports, module;'); fs.writeFileSync(fileName, fileContents, 'utf8'); r.js-2.3.6/build/jslib/uglifyjs/generate.sh000077500000000000000000000004241334071220400205610ustar00rootroot00000000000000#!/bin/bash rm -rf ./temp mkdir temp cd temp mkdir node_modules npm install uglify-js@2.8.29 node_modules/.bin/uglifyjs --self -b -o raw.js node ../combine.js cp -r node_modules/source-map/dist/source-map.js ../../source-map.js node ../fix-sourcemap.js ../../source-map.js r.js-2.3.6/build/jslib/uglifyjs/post.txt000066400000000000000000000000051334071220400201510ustar00rootroot00000000000000 }); r.js-2.3.6/build/jslib/uglifyjs/pre.txt000066400000000000000000000003171334071220400177600ustar00rootroot00000000000000//Distributed under the BSD license: //Copyright 2012 (c) Mihai Bazon define(['exports', 'source-map', 'logger', 'env!env/file'], function (exports, MOZ_SourceMap, logger, rjsFile) { r.js-2.3.6/build/jslib/x.js000066400000000000000000000363331334071220400154110ustar00rootroot00000000000000/** * @license r.js 2.3.6 Copyright jQuery Foundation and other contributors. * Released under MIT license, http://github.com/requirejs/r.js/LICENSE */ /* * This is a bootstrap script to allow running RequireJS in the command line * in either a Java/Rhino or Node environment. It is modified by the top-level * dist.js file to inject other files to completely enable this file. It is * the shell of the r.js file. */ /*jslint evil: true, nomen: true, sloppy: true */ /*global readFile: true, process: false, Packages: false, print: false, console: false, java: false, module: false, requirejsVars, navigator, document, importScripts, self, location, Components, FileUtils */ var requirejs, require, define, xpcUtil; (function (console, args, readFileFunc) { var fileName, env, fs, vm, path, exec, rhinoContext, dir, nodeRequire, nodeDefine, exists, reqMain, loadedOptimizedLib, existsForNode, Cc, Ci, version = '2.3.6', jsSuffixRegExp = /\.js$/, commandOption = '', useLibLoaded = {}, //Used by jslib/rhino/args.js rhinoArgs = args, //Used by jslib/xpconnect/args.js xpconnectArgs = args, readFile = typeof readFileFunc !== 'undefined' ? readFileFunc : null; function showHelp() { console.log('See https://github.com/requirejs/r.js for usage.'); } if (typeof process !== 'undefined' && process.versions && !!process.versions.node) { env = 'node'; //Get the fs module via Node's require before it //gets replaced. Used in require/node.js fs = require('fs'); vm = require('vm'); path = require('path'); //In Node 0.7+ existsSync is on fs. existsForNode = fs.existsSync || path.existsSync; nodeRequire = require; nodeDefine = define; reqMain = require.main; //Temporarily hide require and define to allow require.js to define //them. require = undefined; define = undefined; readFile = function (path) { return fs.readFileSync(path, 'utf8'); }; exec = function (string, name) { return vm.runInThisContext(this.requirejsVars.require.makeNodeWrapper(string), name ? fs.realpathSync(name) : ''); }; exists = function (fileName) { return existsForNode(fileName); }; fileName = process.argv[2]; if (fileName && fileName.indexOf('-') === 0) { commandOption = fileName.substring(1); fileName = process.argv[3]; } } else if (typeof Packages !== 'undefined') { env = 'rhino'; fileName = args[0]; if (fileName && fileName.indexOf('-') === 0) { commandOption = fileName.substring(1); fileName = args[1]; } //Exec/readFile differs between Rhino and Nashorn. Rhino has an //importPackage where Nashorn does not, so branch on that. This is a //coarser check -- detecting readFile existence might also be enough for //this spot. However, sticking with importPackage to keep it the same //as other Rhino/Nashorn detection branches. if (typeof importPackage !== 'undefined') { rhinoContext = Packages.org.mozilla.javascript.ContextFactory.getGlobal().enterContext(); exec = function (string, name) { return rhinoContext.evaluateString(this, string, name, 0, null); }; } else { exec = function (string, name) { load({ script: string, name: name}); }; readFile = readFully; } exists = function (fileName) { return (new java.io.File(fileName)).exists(); }; //Define a console.log for easier logging. Don't //get fancy though. if (typeof console === 'undefined') { console = { log: function () { print.apply(undefined, arguments); } }; } } else if ((typeof navigator !== 'undefined' && typeof document !== 'undefined') || (typeof importScripts !== 'undefined' && typeof self !== 'undefined')) { env = 'browser'; readFile = function (path) { return fs.readFileSync(path, 'utf8'); }; exec = function (string) { return eval(string); }; exists = function () { console.log('x.js exists not applicable in browser env'); return false; }; } else if (typeof Components !== 'undefined' && Components.classes && Components.interfaces) { env = 'xpconnect'; Components.utils['import']('resource://gre/modules/FileUtils.jsm'); Cc = Components.classes; Ci = Components.interfaces; fileName = args[0]; if (fileName && fileName.indexOf('-') === 0) { commandOption = fileName.substring(1); fileName = args[1]; } xpcUtil = { isWindows: ('@mozilla.org/windows-registry-key;1' in Cc), cwd: function () { return FileUtils.getFile("CurWorkD", []).path; }, //Remove . and .. from paths, normalize on front slashes normalize: function (path) { //There has to be an easier way to do this. var i, part, ary, firstChar = path.charAt(0); if (firstChar !== '/' && firstChar !== '\\' && path.indexOf(':') === -1) { //A relative path. Use the current working directory. path = xpcUtil.cwd() + '/' + path; } ary = path.replace(/\\/g, '/').split('/'); for (i = 0; i < ary.length; i += 1) { part = ary[i]; if (part === '.') { ary.splice(i, 1); i -= 1; } else if (part === '..') { ary.splice(i - 1, 2); i -= 2; } } return ary.join('/'); }, xpfile: function (path) { var fullPath; try { fullPath = xpcUtil.normalize(path); if (xpcUtil.isWindows) { fullPath = fullPath.replace(/\//g, '\\'); } return new FileUtils.File(fullPath); } catch (e) { throw new Error((fullPath || path) + ' failed: ' + e); } }, readFile: function (/*String*/path, /*String?*/encoding) { //A file read function that can deal with BOMs encoding = encoding || "utf-8"; var inStream, convertStream, readData = {}, fileObj = xpcUtil.xpfile(path); //XPCOM, you so crazy try { inStream = Cc['@mozilla.org/network/file-input-stream;1'] .createInstance(Ci.nsIFileInputStream); inStream.init(fileObj, 1, 0, false); convertStream = Cc['@mozilla.org/intl/converter-input-stream;1'] .createInstance(Ci.nsIConverterInputStream); convertStream.init(inStream, encoding, inStream.available(), Ci.nsIConverterInputStream.DEFAULT_REPLACEMENT_CHARACTER); convertStream.readString(inStream.available(), readData); return readData.value; } catch (e) { throw new Error((fileObj && fileObj.path || '') + ': ' + e); } finally { if (convertStream) { convertStream.close(); } if (inStream) { inStream.close(); } } } }; readFile = xpcUtil.readFile; exec = function (string) { return eval(string); }; exists = function (fileName) { return xpcUtil.xpfile(fileName).exists(); }; //Define a console.log for easier logging. Don't //get fancy though. if (typeof console === 'undefined') { console = { log: function () { print.apply(undefined, arguments); } }; } } //INSERT require.js this.requirejsVars = { require: require, requirejs: require, define: define }; if (env === 'browser') { //INSERT build/jslib/browser.js } else if (env === 'rhino') { //INSERT build/jslib/rhino.js } else if (env === 'node') { this.requirejsVars.nodeRequire = nodeRequire; require.nodeRequire = nodeRequire; //INSERT build/jslib/node.js } else if (env === 'xpconnect') { //INSERT build/jslib/xpconnect.js } //Support a default file name to execute. Useful for hosted envs //like Joyent where it defaults to a server.js as the only executed //script. But only do it if this is not an optimization run. if (commandOption !== 'o' && (!fileName || !jsSuffixRegExp.test(fileName))) { fileName = 'main.js'; } /** * Loads the library files that can be used for the optimizer, or for other * tasks. */ function loadLib() { //INSERT LIB } /** * Sets the default baseUrl for requirejs to be directory of top level * script. */ function setBaseUrl(fileName) { //Use the file name's directory as the baseUrl if available. dir = fileName.replace(/\\/g, '/'); if (dir.indexOf('/') !== -1) { dir = dir.split('/'); dir.pop(); dir = dir.join('/'); //Make sure dir is JS-escaped, since it will be part of a JS string. exec("require({baseUrl: '" + dir.replace(/[\\"']/g, '\\$&') + "'});"); } } function createRjsApi() { //Create a method that will run the optimzer given an object //config. requirejs.optimize = function (config, callback, errback) { if (!loadedOptimizedLib) { loadLib(); loadedOptimizedLib = true; } //Create the function that will be called once build modules //have been loaded. var runBuild = function (build, logger, quit) { //Make sure config has a log level, and if not, //make it "silent" by default. config.logLevel = config.hasOwnProperty('logLevel') ? config.logLevel : logger.SILENT; //Reset build internals first in case this is part //of a long-running server process that could have //exceptioned out in a bad state. It is only defined //after the first call though. if (requirejs._buildReset) { requirejs._buildReset(); requirejs._cacheReset(); } function done(result) { //And clean up, in case something else triggers //a build in another pathway. if (requirejs._buildReset) { requirejs._buildReset(); requirejs._cacheReset(); } // Ensure errors get propagated to the errback if (result instanceof Error) { throw result; } return result; } errback = errback || function (err) { // Using console here since logger may have // turned off error logging. Since quit is // called want to be sure a message is printed. console.log(err); quit(1); }; build(config).then(done, done).then(callback, errback); }; requirejs({ context: 'build' }, ['build', 'logger', 'env!env/quit'], runBuild); }; requirejs.tools = { useLib: function (contextName, callback) { if (!callback) { callback = contextName; contextName = 'uselib'; } if (!useLibLoaded[contextName]) { loadLib(); useLibLoaded[contextName] = true; } var req = requirejs({ context: contextName }); req(['build'], function () { callback(req); }); } }; requirejs.define = define; } //If in Node, and included via a require('requirejs'), just export and //THROW IT ON THE GROUND! if (env === 'node' && reqMain !== module) { setBaseUrl(path.resolve(reqMain ? reqMain.filename : '.')); createRjsApi(); module.exports = requirejs; return; } else if (env === 'browser') { //Only option is to use the API. setBaseUrl(location.href); createRjsApi(); return; } else if ((env === 'rhino' || env === 'xpconnect') && //User sets up requirejsAsLib variable to indicate it is loaded //via load() to be used as a library. typeof requirejsAsLib !== 'undefined' && requirejsAsLib) { //This script is loaded via rhino's load() method, expose the //API and get out. setBaseUrl(fileName); createRjsApi(); return; } if (commandOption === 'o') { //Do the optimizer work. loadLib(); //INSERT build/build.js } else if (commandOption === 'v') { console.log('r.js: ' + version + ', RequireJS: ' + this.requirejsVars.require.version + ', UglifyJS: 2.8.29'); } else if (commandOption === 'convert') { loadLib(); this.requirejsVars.require(['env!env/args', 'commonJs', 'env!env/print'], function (args, commonJs, print) { var srcDir, outDir; srcDir = args[0]; outDir = args[1]; if (!srcDir || !outDir) { print('Usage: path/to/commonjs/modules output/dir'); return; } commonJs.convertDir(args[0], args[1]); }); } else { //Just run an app //Load the bundled libraries for use in the app. if (commandOption === 'lib') { loadLib(); } setBaseUrl(fileName); if (exists(fileName)) { exec(readFile(fileName), fileName); } else { showHelp(); } } }((typeof console !== 'undefined' ? console : undefined), (typeof Packages !== 'undefined' || (typeof window === 'undefined' && typeof Components !== 'undefined' && Components.interfaces) ? Array.prototype.slice.call(arguments, 0) : []), (typeof readFile !== 'undefined' ? readFile : undefined))); r.js-2.3.6/build/jslib/xpconnect.js000066400000000000000000000003631334071220400171350ustar00rootroot00000000000000/*jslint */ /*global require, load */ (function () { 'use strict'; require.load = function (context, moduleName, url) { load(url); //Support anonymous modules. context.completeLoad(moduleName); }; }()); r.js-2.3.6/build/jslib/xpconnect/000077500000000000000000000000001334071220400165755ustar00rootroot00000000000000r.js-2.3.6/build/jslib/xpconnect/args.js000066400000000000000000000006501334071220400200700ustar00rootroot00000000000000/*jslint strict: false */ /*global define, xpconnectArgs */ var jsLibXpConnectArgs = (typeof xpconnectArgs !== 'undefined' && xpconnectArgs) || [].concat(Array.prototype.slice.call(arguments, 0)); define(function () { var args = jsLibXpConnectArgs; //Ignore any command option used for main x.js branching if (args[0] && args[0].indexOf('-') === 0) { args = args.slice(1); } return args; }); r.js-2.3.6/build/jslib/xpconnect/assert.js000066400000000000000000000002361334071220400204350ustar00rootroot00000000000000/*jslint strict: false */ /*global define: false, load: false */ //Just a stub for use with uglify's consolidator.js define(function () { return {}; }); r.js-2.3.6/build/jslib/xpconnect/file.js000066400000000000000000000224111334071220400200520ustar00rootroot00000000000000//Helper functions to deal with file I/O. /*jslint plusplus: false */ /*global define, Components, xpcUtil */ define(['prim'], function (prim) { var file, Cc = Components.classes, Ci = Components.interfaces, //Depends on xpcUtil which is set up in x.js xpfile = xpcUtil.xpfile; function mkFullDir(dirObj) { //1 is DIRECTORY_TYPE, 511 is 0777 permissions if (!dirObj.exists()) { dirObj.create(1, 511); } } file = { backSlashRegExp: /\\/g, exclusionRegExp: /^\./, getLineSeparator: function () { return file.lineSeparator; }, lineSeparator: ('@mozilla.org/windows-registry-key;1' in Cc) ? '\r\n' : '\n', exists: function (fileName) { return xpfile(fileName).exists(); }, parent: function (fileName) { return xpfile(fileName).parent; }, normalize: function (fileName) { return file.absPath(fileName); }, isFile: function (path) { return xpfile(path).isFile(); }, isDirectory: function (path) { return xpfile(path).isDirectory(); }, /** * Gets the absolute file path as a string, normalized * to using front slashes for path separators. * @param {java.io.File||String} file */ absPath: function (fileObj) { if (typeof fileObj === "string") { fileObj = xpfile(fileObj); } return fileObj.path; }, getFilteredFileList: function (/*String*/startDir, /*RegExp*/regExpFilters, /*boolean?*/makeUnixPaths, /*boolean?*/startDirIsObject) { //summary: Recurses startDir and finds matches to the files that match regExpFilters.include //and do not match regExpFilters.exclude. Or just one regexp can be passed in for regExpFilters, //and it will be treated as the "include" case. //Ignores files/directories that start with a period (.) unless exclusionRegExp //is set to another value. var files = [], topDir, regExpInclude, regExpExclude, dirFileArray, fileObj, filePath, ok, dirFiles; topDir = startDir; if (!startDirIsObject) { topDir = xpfile(startDir); } regExpInclude = regExpFilters.include || regExpFilters; regExpExclude = regExpFilters.exclude || null; if (topDir.exists()) { dirFileArray = topDir.directoryEntries; while (dirFileArray.hasMoreElements()) { fileObj = dirFileArray.getNext().QueryInterface(Ci.nsILocalFile); if (fileObj.isFile()) { filePath = fileObj.path; if (makeUnixPaths) { if (filePath.indexOf("/") === -1) { filePath = filePath.replace(/\\/g, "/"); } } ok = true; if (regExpInclude) { ok = filePath.match(regExpInclude); } if (ok && regExpExclude) { ok = !filePath.match(regExpExclude); } if (ok && (!file.exclusionRegExp || !file.exclusionRegExp.test(fileObj.leafName))) { files.push(filePath); } } else if (fileObj.isDirectory() && (!file.exclusionRegExp || !file.exclusionRegExp.test(fileObj.leafName))) { dirFiles = this.getFilteredFileList(fileObj, regExpFilters, makeUnixPaths, true); //Do not use push.apply for dir listings, can hit limit of max number //of arguments to a function call, #921. dirFiles.forEach(function (dirFile) { files.push(dirFile); }); } } } return files; //Array }, copyDir: function (/*String*/srcDir, /*String*/destDir, /*RegExp?*/regExpFilter, /*boolean?*/onlyCopyNew) { //summary: copies files from srcDir to destDir using the regExpFilter to determine if the //file should be copied. Returns a list file name strings of the destinations that were copied. regExpFilter = regExpFilter || /\w/; var fileNames = file.getFilteredFileList(srcDir, regExpFilter, true), copiedFiles = [], i, srcFileName, destFileName; for (i = 0; i < fileNames.length; i += 1) { srcFileName = fileNames[i]; destFileName = srcFileName.replace(srcDir, destDir); if (file.copyFile(srcFileName, destFileName, onlyCopyNew)) { copiedFiles.push(destFileName); } } return copiedFiles.length ? copiedFiles : null; //Array or null }, copyFile: function (/*String*/srcFileName, /*String*/destFileName, /*boolean?*/onlyCopyNew) { //summary: copies srcFileName to destFileName. If onlyCopyNew is set, it only copies the file if //srcFileName is newer than destFileName. Returns a boolean indicating if the copy occurred. var destFile = xpfile(destFileName), srcFile = xpfile(srcFileName); //logger.trace("Src filename: " + srcFileName); //logger.trace("Dest filename: " + destFileName); //If onlyCopyNew is true, then compare dates and only copy if the src is newer //than dest. if (onlyCopyNew) { if (destFile.exists() && destFile.lastModifiedTime >= srcFile.lastModifiedTime) { return false; //Boolean } } srcFile.copyTo(destFile.parent, destFile.leafName); return true; //Boolean }, /** * Renames a file. May fail if "to" already exists or is on another drive. */ renameFile: function (from, to) { var toFile = xpfile(to); return xpfile(from).moveTo(toFile.parent, toFile.leafName); }, readFile: xpcUtil.readFile, readFileAsync: function (path, encoding) { var d = prim(); try { d.resolve(file.readFile(path, encoding)); } catch (e) { d.reject(e); } return d.promise; }, saveUtf8File: function (/*String*/fileName, /*String*/fileContents) { //summary: saves a file using UTF-8 encoding. file.saveFile(fileName, fileContents, "utf-8"); }, saveFile: function (/*String*/fileName, /*String*/fileContents, /*String?*/encoding) { var outStream, convertStream, fileObj = xpfile(fileName); mkFullDir(fileObj.parent); try { outStream = Cc['@mozilla.org/network/file-output-stream;1'] .createInstance(Ci.nsIFileOutputStream); //438 is decimal for 0777 outStream.init(fileObj, 0x02 | 0x08 | 0x20, 511, 0); convertStream = Cc['@mozilla.org/intl/converter-output-stream;1'] .createInstance(Ci.nsIConverterOutputStream); convertStream.init(outStream, encoding, 0, 0); convertStream.writeString(fileContents); } catch (e) { throw new Error((fileObj && fileObj.path || '') + ': ' + e); } finally { if (convertStream) { convertStream.close(); } if (outStream) { outStream.close(); } } }, deleteFile: function (/*String*/fileName) { //summary: deletes a file or directory if it exists. var fileObj = xpfile(fileName); if (fileObj.exists()) { fileObj.remove(true); } }, /** * Deletes any empty directories under the given directory. * The startDirIsJavaObject is private to this implementation's * recursion needs. */ deleteEmptyDirs: function (startDir, startDirIsObject) { var topDir = startDir, dirFileArray, fileObj; if (!startDirIsObject) { topDir = xpfile(startDir); } if (topDir.exists()) { dirFileArray = topDir.directoryEntries; while (dirFileArray.hasMoreElements()) { fileObj = dirFileArray.getNext().QueryInterface(Ci.nsILocalFile); if (fileObj.isDirectory()) { file.deleteEmptyDirs(fileObj, true); } } //If the directory is empty now, delete it. dirFileArray = topDir.directoryEntries; if (!dirFileArray.hasMoreElements()) { file.deleteFile(topDir.path); } } } }; return file; }); r.js-2.3.6/build/jslib/xpconnect/load.js000066400000000000000000000001541334071220400200520ustar00rootroot00000000000000/*jslint strict: false */ /*global define: false, load: false */ define(function () { return load; }); r.js-2.3.6/build/jslib/xpconnect/optimize.js000066400000000000000000000000131334071220400207650ustar00rootroot00000000000000define({});r.js-2.3.6/build/jslib/xpconnect/print.js000066400000000000000000000001561334071220400202710ustar00rootroot00000000000000/*jslint strict: false */ /*global define: false, print: false */ define(function () { return print; }); r.js-2.3.6/build/jslib/xpconnect/quit.js000066400000000000000000000001731334071220400201160ustar00rootroot00000000000000/*global quit */ define(function () { 'use strict'; return function (code) { return quit(code); }; }); r.js-2.3.6/build/tests/000077500000000000000000000000001334071220400146335ustar00rootroot00000000000000r.js-2.3.6/build/tests/all.js000066400000000000000000000017071334071220400157460ustar00rootroot00000000000000/** * Run the tests in Node with this command: * node ../../r.js all.js */ /*jslint plusplus: false, strict: false */ /*global require: false, doh: false, skipDohSetup: true */ //A hack to doh to avoid dojo setup stuff in doh/runner.js skipDohSetup = true; //Set baseUrl for default context, but use a different context //to run the tests, since at least one test run clears out the //default context between each run. require({ baseUrl: '../jslib/' }); //Run the tests in a different context. require({ baseUrl: '../jslib/', paths: { tests: '../tests' }, context: 'test' }, [ '../../tests/doh/runner.js', 'env!../../tests/doh/_{env}Runner.js', 'tests/convert', 'tests/parse', 'tests/pragma', 'tests/transform', 'tests/buildUtils', //Build tests should be last in case they alter the environment //in a weird way. 'tests/builds' ], function () { //Show final report. doh.run(); }); r.js-2.3.6/build/tests/allj.sh000077500000000000000000000002201334071220400161060ustar00rootroot00000000000000set -e java -classpath ../../lib/rhino/js.jar:../../lib/closure/compiler.jar org.mozilla.javascript.tools.shell.Main -opt -1 ../../r.js all.js r.js-2.3.6/build/tests/alljnashorn.sh000077500000000000000000000001171334071220400175040ustar00rootroot00000000000000set -e jjs -cp ../../lib/closure/compiler.jar -scripting ../../r.js -- all.js r.js-2.3.6/build/tests/alln.sh000077500000000000000000000007631334071220400161260ustar00rootroot00000000000000#Stop after any error set -e rm -rf ./builds/ echo "Running tests embedded in Node" echo "==============================" node nodeOptimize.js rm -rf ./builds/ node nodeOptimizeNoCallback.js rm -rf ./builds/ node nodeAll.js rm -rf ./builds/ echo "Running tests via bootstrap" echo "==============================" node ../../r.js all.js echo "Testing stdout, result should be: define("main",{name:"main"});" echo "==============================" node ../../r.js -o lib/stdout/build.js echo "" r.js-2.3.6/build/tests/allxpc.sh000077500000000000000000000000661334071220400164570ustar00rootroot00000000000000set -e ../../env/xpcshell/xpcshell ../../r.js all.js r.js-2.3.6/build/tests/anonSimple.build.js000066400000000000000000000003421334071220400203730ustar00rootroot00000000000000//A simple build file using the tests directory for requirejs { baseUrl: "../../../requirejs/tests/anon", optimize: "none", out: "builds/anonSimple.js", include: ["magenta", "red", "blue", "green", "yellow"] } r.js-2.3.6/build/tests/buildUtils.js000066400000000000000000000204141334071220400173120ustar00rootroot00000000000000/*global define, doh */ define(['build'], function (build) { 'use strict'; doh.register("toTransport", [ function toTransport(t) { var bad1 = 'this.define(field, value, {_resolve: false});', bad2 = 'xdefine(fields, callback);', bad3 = 'this.define(function () {});', bad4 = 'define(fields, callback);', bad5 = 'define(a[0]);', bad6 = '(function () {\n' + ' (function () {\n' + ' var module = { exports: {} }, exports = module.exports;\n' + ' (function (name, context, definition) {\n' + ' if (typeof module != \'undefined\' && module.exports) module.exports = definition()\n' + ' else if (typeof define == \'function\' && define.amd) define(definition)\n' + ' else context[name] = definition()\n' + ' })(\'qwery\', this, function () {\n' + ' });\n' + ' }());\n' + ' (function () {\n' + ' var module = { exports: {} }, exports = module.exports;\n' + ' (function (name, context, definition) {\n' + ' if (typeof module != \'undefined\' && module.exports) module.exports = definition()\n' + ' else if (typeof define == \'function\' && define.amd) define(definition)\n' + ' else context[name] = definition()\n' + ' })(\'bonzo\', this, function () {\n' + ' });\n' + ' }());\n' + '}());', good1 = 'if (typeof define === "function" && define.amd) {\n' + ' define(definition);\n' + '}', goodExpected1 = 'if (typeof define === "function" && define.amd) {\n' + ' define(\'good/1\',definition);\n' + '}', good2 = '// define([\'bad\'], function () {});\n' + 'define([\'foo\'], function () {});', goodExpected2 = '// define([\'bad\'], function () {});\n' + 'define(\'good/2\',[\'foo\'], function () {});', multi = 'define("foo", function (require) { var bar = require("bar"); });\n' + 'define("bar", function (require) { var foo = require("foo"); });\n', multiAnonWrapped = '(function (root, factory) {\n' + ' if (typeof define === \'function\' && define.amd) {\n' + ' define([\'b\'], factory);\n' + ' } else {\n' + ' // Browser globals\n' + ' root.amdWeb = factory(root.b);\n' + ' }\n' + '}(this, function (b) {\n' + ' var stored = {};\n' + ' function define(id, func) { stored[id] = func();}\n' + ' define("foo", function (require) { var bar = require("bar"); });\n' + ' define("bar", function (require) { var foo = require("foo"); });\n' + ' return stored.bar;\n' + '}));', multiAnonWrappedExpected = '(function (root, factory) {\n' + ' if (typeof define === \'function\' && define.amd) {\n' + ' define(\'multiAnonWrapped\',[\'b\'], factory);\n' + ' } else {\n' + ' // Browser globals\n' + ' root.amdWeb = factory(root.b);\n' + ' }\n' + '}(this, function (b) {\n' + ' var stored = {};\n' + ' function define(id, func) { stored[id] = func();}\n' + ' define("foo", function (require) { var bar = require("bar"); });\n' + ' define("bar", function (require) { var foo = require("foo"); });\n' + ' return stored.bar;\n' + '}));', good3 = 'define(\n' + ' // a comment\n' + ' [\n' + ' "some/dep"\n' + ' ],\nfunction (dep) {});', goodExpected3 = 'define(\n' + ' // a comment\n' + ' \'good/3\',[\n' + ' "some/dep"\n' + ' ],\nfunction (dep) {});', good4 = 'define(this.key)', goodExpected4 = 'define(\'good/4\',this.key)', good5 = 'if ("function" === typeof define && define.amd) {\n' + ' define(function (require) {\n' + ' return {\n' + ' name: "five",\n' + ' six: require("./six")\n' + ' };\n' + ' });\n' + '}', goodExpected5 = 'if ("function" === typeof define && define.amd) {\n' + ' foo.define(\'good/5\',[\'require\',\'./six\'],function (require) {\n' + ' return {\n' + ' name: "five",\n' + ' six: require("./six")\n' + ' };\n' + ' });\n' + '}'; t.is(bad1, build.toTransport('', 'bad/1', 'bad1', bad1)); t.is(bad2, build.toTransport('', 'bad/2', 'bad2', bad2)); t.is(bad3, build.toTransport('', 'bad/3', 'bad3', bad3)); t.is(bad4, build.toTransport('', 'bad/4', 'bad4', bad4)); t.is(bad5, build.toTransport('', 'bad/5', 'bad5', bad5)); t.is(bad6, build.toTransport('', 'bad/6', 'bad6', bad6)); t.is(goodExpected1, build.toTransport('', 'good/1', 'good1', good1)); t.is(goodExpected2, build.toTransport('', 'good/2', 'good2', good2)); t.is(multi, build.toTransport('', 'multi', 'multi', multi)); t.is(multiAnonWrappedExpected, build.toTransport('', 'multiAnonWrapped', 'multiAnonWrapped', multiAnonWrapped)); t.is(goodExpected3, build.toTransport('', 'good/3', 'good3', good3)); t.is(goodExpected4, build.toTransport('', 'good/4', 'good4', good4)); t.is(goodExpected5, build.toTransport('foo', 'good/5', 'good5', good5)); } ]); doh.run(); doh.register("makeRelativeFilePath", [ function makeRelativeFilePath(t) { t.is('sibling.js', build.makeRelativeFilePath('/some/other/www-built/js/main.js', '/some/other/www-built/js/sibling.js')); t.is('sub/thing/other.js', build.makeRelativeFilePath('/some/other/www-built/js/main.js', '/some/other/www-built/js/sub/thing/other.js')); t.is('../parent/thing/other.js', build.makeRelativeFilePath('/some/other/www-built/js/main.js', '/some/other/www-built/parent/thing/other.js')); t.is('../../../Applications/foo/', build.makeRelativeFilePath('/Users/some/thing/', '/Applications/foo/')); t.is('modules/player.js', build.makeRelativeFilePath('/some/other/www-built/js/app/main.js', '/some/other/www-built/js/main/lib/../../app/modules/player.js')); } ]); doh.run(); }); r.js-2.3.6/build/tests/builds.js000066400000000000000000002545551334071220400164730ustar00rootroot00000000000000/*jslint plusplus: true, nomen: true */ /*global define: false, require: false, doh: false */ define(['build', 'env!env/file', 'env', 'lang'], function (build, file, env, lang) { 'use strict'; //Remove any old builds file.deleteFile("builds"); function c(fileName) { return file.readFile(fileName); } //Remove line returns to make comparisons easier. function nol(contents) { return contents.replace(/[\r\n]/g, ""); } //Remove \n and \r string literals, since rhino and node //do not always agree on what was read from disk, if a //trailing \n should be in there. After an optimization, //the text file can write out modules with these \r or \n //strings. function noSlashRn(contents) { return contents.replace(/\\n|\\r/g, ''); } function sourcemapEquals(t, expected, actual) { var expectedJson = JSON.parse(expected), actualJson = JSON.parse(actual), index, segmentIndex, expectedMappings, actualMappings, expectedLine, actualLine; t.is(expectedJson.version, actualJson.version, "version properties differ"); t.is(expectedJson.file, actualJson.file, "file properties differ"); t.is(expectedJson.sourceRoot, actualJson.sourceRoot, "sourceRoot properties differ"); t.is(expectedJson.sources, actualJson.sources, "sources properties differ"); t.is((expectedJson.sourcesContent || []).length, (actualJson.sourcesContent || []).length, "sourcesContent array lengths differ"); if (expectedJson.sourcesContent && actualJson.sourcesContent && expectedJson.sourcesContent.length === actualJson.sourcesContent.length) { for (index = 0; index < expectedJson.sourcesContent.length; index++) { t.is(noSlashRn(nol(expectedJson.sourcesContent[index])), noSlashRn(nol(actualJson.sourcesContent[index])), "sourcesContent[" + index + "] properties differ"); } } t.is(expectedJson.names, actualJson.names, "names properties differ"); if (typeof expectedJson.mappings === 'string' && typeof actualJson.mappings === 'string') { expectedMappings = expectedJson.mappings.split(";"); actualMappings = actualJson.mappings.split(";"); t.is(expectedMappings.length, actualMappings.length, "mappings group counts differ"); if (expectedMappings.length === actualMappings.length) { for (index = 0; index < expectedMappings.length; index++) { expectedLine = expectedMappings[index].split(","); actualLine = actualMappings[index].split(","); t.is(expectedLine.length, actualLine.length, "mapping arrays differ in segment count at group index " + index); if (expectedLine.length === actualLine.length) { for (segmentIndex = 0; segmentIndex < expectedLine.length; segmentIndex++) { t.is(expectedLine[segmentIndex], actualLine[segmentIndex], "mapping arrays differ at group index " + index + ", segment index " + segmentIndex); } } } } } else { t.is(expectedJson.mappings, actualJson.mappings, "mappings properties differ"); } } //Do a build of the text plugin to get any pragmas processed. build(["name=text", "baseUrl=../../../text", "out=builds/text.js", "optimize=none"]); //Reset build state for next run. require._buildReset(); var requireTextContents = c("builds/text.js"), oneResult = [ c("../../../requirejs/tests/two.js"), c("../../../requirejs/tests/one.js"), ";", c("../../../requirejs/tests/dimple.js") ].join(""); doh.register("buildOneCssFile", [ function buildOneCssFile(t) { build(["cssIn=css/sub/sub1.css", "out=builds/sub1.css"]); t.is(nol(c("cssTestCompare.css")), nol(c("builds/sub1.css"))); //Reset require internal state for the contexts so future //builds in these tests will work correctly. require._buildReset(); } ] ); doh.run(); doh.register("buildOneJsFile", [ function buildOneJsFile(t) { build(["name=one", "include=dimple", "out=builds/outSingle.js", "baseUrl=../../../requirejs/tests", "optimize=none"]); t.is(nol(oneResult), nol(c("builds/outSingle.js"))); //Reset require internal state for the contexts so future //builds in these tests will work correctly. require._buildReset(); } ] ); doh.run(); doh.register("buildOneJsFileOnlyInclude", [ function buildOneJsFileOnlyInclude(t) { build(["include=one,dimple", "out=builds/outSingleOnlyInclude.js", "baseUrl=../../../requirejs/tests", "optimize=none"]); t.is(nol(oneResult), nol(c("builds/outSingleOnlyInclude.js"))); //Reset require internal state for the contexts so future //builds in these tests will work correctly. require._buildReset(); } ] ); doh.run(); doh.register("buildOneJsFileWrapped", [ function buildOneJsFile(t) { build(["name=one", "include=dimple", "out=builds/outSingleWrap.js", "baseUrl=../../../requirejs/tests", "optimize=none", "wrap.start=START", "wrap.end=END"]); t.is(nol("START" + oneResult + "END"), nol(c("builds/outSingleWrap.js"))); //Reset require internal state for the contexts so future //builds in these tests will work correctly. require._buildReset(); } ] ); doh.run(); doh.register("buildOneJsFileWrappedArray", [ function buildOneJsFileWrappedArray(t) { build(["name=one", "include=dimple", "out=builds/outSingleWrapArray.js", "baseUrl=../../../requirejs/tests", "optimize=none", "wrap.startFile=support/wrap/pre1.js,support/wrap/pre2.js", "wrap.endFile=support/wrap/post1.js,support/wrap/post2.js"]); t.is(nol("//pre1.js//pre2.js" + oneResult + "//post1.js//post2.js"), nol(c("builds/outSingleWrapArray.js"))); //Reset require internal state for the contexts so future //builds in these tests will work correctly. require._buildReset(); } ] ); doh.run(); doh.register("buildOneJsFileWrappedTrue", [ function buildOneJsFile(t) { build(["name=one", "include=dimple", "out=builds/outSingleWrapTrue.js", "baseUrl=../../../requirejs/tests", "optimize=none", "wrap=true"]); t.is(nol("(function () {" + oneResult + "}());"), nol(c("builds/outSingleWrapTrue.js"))); //Reset require internal state for the contexts so future //builds in these tests will work correctly. require._buildReset(); } ] ); doh.run(); doh.register("buildOneJsFileWrappedFile", [ function buildOneJsFile(t) { build(["name=one", "include=dimple", "out=builds/outSingleWrap.js", "baseUrl=../../../requirejs/tests", "optimize=none", "wrap.startFile=start.frag", "wrap.endFile=end.frag"]); t.is(nol(c("start.frag") + oneResult + c("end.frag")), nol(c("builds/outSingleWrap.js"))); //Reset require internal state for the contexts so future //builds in these tests will work correctly. require._buildReset(); } ] ); doh.run(); doh.register("buildWrapBothArray", [ function buildWrapBothArray(t) { file.deleteFile("lib/wrap/outBothArray.js"); build(["lib/wrap/buildBothArray.js"]); t.is(nol(c("lib/wrap/expectedBothArray.js")), nol(c("lib/wrap/outBothArray.js"))); require._buildReset(); } ] ); doh.run(); doh.register("buildWrapOnlyEnd", [ function buildWrapOnlyEnd(t) { file.deleteFile("lib/wrap/outOnlyEnd.js"); build(["lib/wrap/buildOnlyEnd.js"]); t.is(nol(c("lib/wrap/expectedOnlyEnd.js")), nol(c("lib/wrap/outOnlyEnd.js"))); require._buildReset(); } ] ); doh.run(); doh.register("buildWrapOnlyEndArray", [ function buildWrapOnlyEndArray(t) { file.deleteFile("lib/wrap/outOnlyEndArray.js"); build(["lib/wrap/buildOnlyEndArray.js"]); t.is(nol(c("lib/wrap/expectedOnlyEndArray.js")), nol(c("lib/wrap/outOnlyEndArray.js"))); require._buildReset(); } ] ); doh.run(); doh.register("buildWrapOnlyStart", [ function buildWrapOnlyStart(t) { file.deleteFile("lib/wrap/outOnlyStart.js"); build(["lib/wrap/buildOnlyStart.js"]); t.is(nol(c("lib/wrap/expectedOnlyStart.js")), nol(c("lib/wrap/outOnlyStart.js"))); require._buildReset(); } ] ); doh.run(); doh.register("buildWrapOnlyStartArray", [ function buildWrapOnlyStartArray(t) { file.deleteFile("lib/wrap/outOnlyStartArray.js"); build(["lib/wrap/buildOnlyStartArray.js"]); t.is(nol(c("lib/wrap/expectedOnlyStartArray.js")), nol(c("lib/wrap/outOnlyStartArray.js"))); require._buildReset(); } ] ); doh.run(); doh.register("buildSimple", [ function buildSimple(t) { //Do the build build(["simple.build.js"]); t.is(nol(oneResult), nol(c("builds/simple/one.js"))); //Reset require internal state for the contexts so future //builds in these tests will work correctly. require._buildReset(); } ] ); doh.run(); doh.register("buildSimpleOverride", [ function buildSimple(t) { //Do the build build(["simple.build.js", "dir=builds/simpleOverride"]); t.is(nol(oneResult), nol(c("builds/simpleOverride/one.js"))); //Reset require internal state for the contexts so future //builds in these tests will work correctly. require._buildReset(); } ] ); doh.run(); doh.register("buildSimpleCommandLineName", [ function buildSimpleCommandLineName(t) { //Do the build build([ "baseUrl=../../../requirejs/tests", "optimize=none", "dir=builds/simpleCommandLineName", "name=one", "include=dimple" ]); t.is(nol(oneResult), nol(c("builds/simpleCommandLineName/one.js"))); //Reset require internal state for the contexts so future //builds in these tests will work correctly. require._buildReset(); } ] ); doh.run(); doh.register("buildExcludeShallow", [ function buildExcludeShallow(t) { build(["name=uno", "excludeShallow=dos", "out=builds/unoExcludeShallow.js", "baseUrl=../../../requirejs/tests", "optimize=none"]); t.is(nol(c("expected/unoExcludeShallow.js")), nol(c("builds/unoExcludeShallow.js"))); require._buildReset(); } ] ); doh.run(); doh.register("buildExclude", [ function buildExclude(t) { build(["name=uno", "exclude=dos", "out=builds/unoExclude.js", "baseUrl=../../../requirejs/tests", "optimize=none"]); t.is(nol(c("../../../requirejs/tests/uno.js")), nol(c("builds/unoExclude.js"))); require._buildReset(); } ] ); doh.run(); doh.register("buildTextPluginIncluded", [ function buildTextPluginIncluded(t) { build(["name=one", "include=text", "out=builds/oneText.js", "baseUrl=../../../requirejs/tests", "paths.text=../../text/text", "optimize=none"]); t.is(nol(nol(c("../../../requirejs/tests/two.js") + c("../../../requirejs/tests/one.js") + ";") + requireTextContents), nol(c("builds/oneText.js"))); require._buildReset(); } ] ); doh.run(); doh.register("buildPluginAsModule", [ function buildPluginAsModule(t) { build(["name=refine!a", "out=builds/refineATest.js", "baseUrl=../../../requirejs/tests/plugins/fromText", "exclude=text,refine", "paths.text=../../../../text/text", "optimize=none"]); t.is(nol(nol((c("../../../requirejs/tests/plugins/fromText/a.refine")) .replace(/refine\(/g, 'define('))) .replace(/define\(\{/, "define('refine!a',{"), nol(c("builds/refineATest.js"))); require._buildReset(); } ] ); doh.run(); doh.register("buildUniversal", [ function buildUniversal(t) { build(["baseUrl=../../../requirejs/tests/universal", "name=universal-tests", "out=../../../requirejs/tests/universal/universal-tests-built.js", "optimize=none"]); t.is(nol(c("../../../requirejs/tests/universal/universal-tests-built-expected.js")), nol(c("../../../requirejs/tests/universal/universal-tests-built.js"))); require._buildReset(); } ] ); doh.run(); doh.register("buildNamespace", [ function buildNamespace(t) { build(["baseUrl=lib/namespace", "optimize=none", "namespace=foo", "name=main", "out=lib/namespace/foo.js"]); t.is(nol(c("lib/namespace/expected.js")), nol(c("lib/namespace/foo.js"))); require._buildReset(); } ] ); doh.run(); doh.register("buildNamespaceConfig", [ function buildNamespaceConfig(t) { build(["lib/namespaceConfig/build.js"]); t.is(nol(c("lib/namespaceConfig/expected.js")), nol(c("lib/namespaceConfig/foo.js"))); require._buildReset(); } ] ); doh.run(); doh.register("buildNamespaceMinified", [ function buildNamespaceMinified(t) { build(["lib/namespaceMinified/build.js"]); t.is(nol(c("lib/namespaceMinified/expected.js")), nol(c("lib/namespaceMinified/foo.js"))); require._buildReset(); } ] ); doh.run(); doh.register("useDotPackage", [ function useDotPackage(t) { build(["lib/dotpackage/scripts/app.build.js"]); t.is(nol(c("lib/dotpackage/scripts/main-expected.js")), nol(c("lib/dotpackage/built/scripts/main.js"))); require._buildReset(); } ] ); doh.run(); doh.register("multipleEmpty", [ function multipleEmpty(t) { build(["lib/empty/build.js"]); t.is(nol(c("lib/empty/expected.js")), nol(c("lib/empty/built/main.js"))); require._buildReset(); } ] ); doh.run(); doh.register("paths.valid", [ function (t) { try { build(["lib/paths/valid/build.js"]); t.is(nol(c("lib/paths/valid/expected.js")), nol(c("lib/paths/valid/built/main.js"))); } finally { file.deleteFile("lib/paths/valid/built"); require._buildReset(); } } ] ); doh.run(); //Skip in xpconnect's since Reflect's parser cannot maintain comments. if (env.get() !== 'xpconnect') { doh.register("preserveLicense", [ function preserveLicense(t) { file.deleteFile("lib/comments/built.js"); build(["lib/comments/build.js"]); t.is(nol(c("lib/comments/expected.js")), nol(c("lib/comments/built.js"))); require._buildReset(); } ] ); doh.run(); //Only keep unique comments //https://github.com/requirejs/r.js/issues/251 doh.register("preserveLicenseUnique", [ function preserveLicenseUnique(t) { file.deleteFile("lib/comments/unique/built.js"); build(["lib/comments/unique/build.js"]); t.is(nol(c("lib/comments/unique/expected.js")), nol(c("lib/comments/unique/built.js"))); require._buildReset(); } ] ); doh.run(); //Do not dupe parts of comments when at the end of the file. //https://github.com/requirejs/r.js/issues/264 doh.register("preserveLicenseNoPartialDupe", [ function preserveLicenseNoPartialDupe(t) { file.deleteFile("lib/comments/noPartialDupe/built"); //Run two builds, this profile has keepBuildDir set to true. build(["lib/comments/noPartialDupe/build.js"]); build(["lib/comments/noPartialDupe/build.js"]); t.is(nol(c("lib/comments/noPartialDupe/expected.js")), nol(c("lib/comments/noPartialDupe/built/underscore.js"))); require._buildReset(); } ] ); doh.run(); } doh.register("nestedFind", [ function nestedFind(t) { file.deleteFile("lib/nested/main-builtWithCE.js"); //Clear the cached file contents since the //findNestedDependencies config actually modifies //what the contents could be. require._cachedFileContents = {}; build(["lib/nested/buildWithCE.js"]); t.is(nol(c("lib/nested/expected-builtWithCE.js")), nol(c("lib/nested/main-builtWithCE.js"))); require._buildReset(); } ] ); doh.run(); doh.register("nestedSkip", [ function nestedSkip(t) { file.deleteFile("lib/nested/main-built.js"); //Clear the cached file contents since the //findNestedDependencies config actually modifies //what the contents could be. require._cachedFileContents = {}; build(["lib/nested/build.js"]); t.is(nol(c("lib/nested/expected-built.js")), nol(c("lib/nested/main-built.js"))); require._buildReset(); } ] ); doh.run(); doh.register("nestedHas", [ function nestedHas(t) { file.deleteFile("lib/nestedHas/main-built.js"); //Clear the cached file contents since the //findNestedDependencies config actually modifies //what the contents could be. require._cachedFileContents = {}; build(["lib/nestedHas/build.js"]); t.is(nol(c("lib/nestedHas/expected-built.js")), nol(c("lib/nestedHas/main-built.js"))); require._buildReset(); } ] ); doh.run(); doh.register("nestedHasNeedAll", [ function nestedHasNeedAll(t) { file.deleteFile("lib/nestedHas/main-builtNeedAll.js"); //Clear the cached file contents since the //findNestedDependencies config actually modifies //what the contents could be. require._cachedFileContents = {}; build(["lib/nestedHas/buildNeedAll.js"]); t.is(nol(c("lib/nestedHas/expected-builtNeedAll.js")), nol(c("lib/nestedHas/main-builtNeedAll.js"))); require._buildReset(); } ] ); doh.run(); doh.register("nestedHasNeedB", [ function nestedHasNeed(t) { file.deleteFile("lib/nestedHas/main-builtNeedB.js"); //Clear the cached file contents since the //findNestedDependencies config actually modifies //what the contents could be. require._cachedFileContents = {}; build(["lib/nestedHas/buildNeedB.js"]); t.is(nol(c("lib/nestedHas/expected-builtNeedB.js")), nol(c("lib/nestedHas/main-builtNeedB.js"))); require._buildReset(); } ] ); doh.run(); doh.register("nestedHasNeedC", [ function nestedHasNeed(t) { file.deleteFile("lib/nestedHas/main-builtNeedC.js"); //Clear the cached file contents since the //findNestedDependencies config actually modifies //what the contents could be. require._cachedFileContents = {}; build(["lib/nestedHas/buildNeedC.js"]); t.is(nol(c("lib/nestedHas/expected-builtNeedC.js")), nol(c("lib/nestedHas/main-builtNeedC.js"))); require._buildReset(); } ] ); doh.run(); doh.register("nestedHasNeedD", [ function nestedHasNeedD(t) { file.deleteFile("lib/nestedHas/main-builtNeedD.js"); //Clear the cached file contents since the //findNestedDependencies config actually modifies //what the contents could be. require._cachedFileContents = {}; build(["lib/nestedHas/buildNeedD.js"]); t.is(nol(c("lib/nestedHas/expected-builtNeedD.js")), nol(c("lib/nestedHas/main-builtNeedD.js"))); require._buildReset(); } ] ); doh.run(); doh.register("nestedHasNested", [ function nestedHasNested(t) { file.deleteFile("lib/nestedHas/main-builtNested.js"); //Clear the cached file contents since the //findNestedDependencies config actually modifies //what the contents could be. require._cachedFileContents = {}; build(["lib/nestedHas/buildNested.js"]); t.is(nol(c("lib/nestedHas/expected-builtNested.js")), nol(c("lib/nestedHas/main-builtNested.js"))); require._buildReset(); } ] ); doh.run(); doh.register("amdefineStrip", [ function amdefineStrip(t) { file.deleteFile("lib/amdefine/built.js"); build(["lib/amdefine/build.js"]); t.is(nol(c("lib/amdefine/expected.js")), nol(c("lib/amdefine/built.js"))); require._buildReset(); } ] ); doh.run(); //https://github.com/requirejs/r.js/issues/574 doh.register("keepAmdefine", [ function amdefineStrip(t) { file.deleteFile("lib/keepAmdefine/built.js"); build(["lib/keepAmdefine/build.js"]); t.is(nol(c("lib/keepAmdefine/expected.js")), nol(c("lib/keepAmdefine/built.js"))); require._buildReset(); } ] ); doh.run(); doh.register("nameInsertion", [ function nameInsertion(t) { file.deleteFile("lib/nameInsertion/built.js"); build(["lib/nameInsertion/build.js"]); t.is(nol(c("lib/nameInsertion/expected.js")), nol(c("lib/nameInsertion/built.js"))); require._buildReset(); } ] ); doh.run(); //Make sure a nested function declaration for a define function is not //renamed: https://github.com/requirejs/r.js/issues/388 doh.register("nameInsertionNested", [ function nameInsertionNested(t) { file.deleteFile("lib/nameInsertion/nested/built.js"); build(["lib/nameInsertion/nested/build.js"]); t.is(nol(c("lib/nameInsertion/nested/expected.js")), nol(c("lib/nameInsertion/nested/built.js"))); require._buildReset(); } ] ); doh.run(); doh.register("moduleThenPlugin", [ function moduleThenPlugin(t) { file.deleteFile("lib/moduleThenPlugin/built.js"); build(["lib/moduleThenPlugin/build.js"]); t.is(nol(c("lib/moduleThenPlugin/expected.js")), nol(c("lib/moduleThenPlugin/built.js"))); require._buildReset(); } ] ); doh.run(); doh.register("pluginsWithDeps", [ function pluginsWithDeps(t) { file.deleteFile("lib/plugins/main-built.js"); build(["lib/plugins/build.js"]); t.is(nol(c("lib/plugins/expected.js")), nol(c("lib/plugins/main-built.js"))); require._buildReset(); } ] ); doh.run(); doh.register("pluginFirstWithDeps", [ function pluginFirstWithDeps(t) { file.deleteFile("lib/plugins/main-builtPluginFirst.js"); build(["lib/plugins/buildPluginFirst.js"]); t.is(nol(c("lib/plugins/expected-buildPluginFirst.js")), nol(c("lib/plugins/main-builtPluginFirst.js"))); require._buildReset(); } ] ); doh.run(); doh.register("mainConfigFileBasic", [ function mainConfigFileBasic(t) { file.deleteFile("lib/mainConfigFile/basic/main-built.js"); build(["lib/mainConfigFile/basic/tools/build.js"]); t.is(nol(c("lib/mainConfigFile/basic/expected.js")), nol(c("lib/mainConfigFile/basic/main-built.js"))); require._buildReset(); } ] ); doh.run(); //Confirms that only the first requirejs.config() is found //https://github.com/requirejs/r.js/issues/257 //https://github.com/requirejs/r.js/issues/258 doh.register("mainConfigFileFirst", [ function mainConfigFileFirst(t) { file.deleteFile("lib/mainConfigFile/first/main-built.js"); build(["lib/mainConfigFile/first/tools/build.js"]); t.is(nol(c("lib/mainConfigFile/first/expected.js")), nol(c("lib/mainConfigFile/first/main-built.js"))); require._buildReset(); } ] ); doh.run(); doh.register("mainConfigFileBasicCommand", [ function mainConfigFileBasic(t) { file.deleteFile("lib/mainConfigFile/basic/main-built.js"); build([ "mainConfigFile=lib/mainConfigFile/basic/www/js/main.js", "name=main", "out=lib/mainConfigFile/basic/main-built.js", "optimize=none" ]); t.is(nol(c("lib/mainConfigFile/basic/expected.js")), nol(c("lib/mainConfigFile/basic/main-built.js"))); require._buildReset(); } ] ); doh.run(); doh.register("mainConfigFileMerged", [ function mainConfigFileMerged(t) { file.deleteFile("lib/mainConfigFile/mergeConfig/main-built.js"); build(["lib/mainConfigFile/mergeConfig/tools/build.js"]); t.is(nol(c("lib/mainConfigFile/mergeConfig/expected.js")), nol(c("lib/mainConfigFile/mergeConfig/main-built.js"))); require._buildReset(); } ] ); doh.run(); //Multiple mainConfigFile entries //https://github.com/requirejs/r.js/pull/572 doh.register("mainConfigFileMulti", [ function mainConfigFileMulti(t) { file.deleteFile("lib/mainConfigFile/multi/main-built.js"); build(["lib/mainConfigFile/multi/tools/build.js"]); t.is(nol(c("lib/mainConfigFile/multi/expected.js")), nol(c("lib/mainConfigFile/multi/main-built.js"))); require._buildReset(); } ] ); doh.run(); doh.register("onBuildAllDir", [ function onBuildAllDir(t) { file.deleteFile("lib/onBuildAllDir/js-built"); build(["lib/onBuildAllDir/build.js"]); t.is(nol(c("lib/onBuildAllDir/expected-main.js")), nol(c("lib/onBuildAllDir/js-built/main.js"))); t.is(nol(c("lib/onBuildAllDir/expected-a.js")), nol(c("lib/onBuildAllDir/js-built/a.js"))); t.is(nol(c("lib/onBuildAllDir/expected-b.js")), nol(c("lib/onBuildAllDir/js-built/b.js"))); require._buildReset(); } ] ); doh.run(); doh.register("onBuildRead", [ function onBuildRead(t) { file.deleteFile("lib/onBuildRead/main-built.js"); build(["lib/onBuildRead/build.js"]); t.is(nol(c("lib/onBuildRead/expected.js")), nol(c("lib/onBuildRead/main-built.js"))); require._buildReset(); } ] ); doh.run(); doh.register("onBuildWrite", [ function onBuildWrite(t) { file.deleteFile("lib/onBuildWrite/main-built.js"); build(["lib/onBuildWrite/build.js"]); t.is(nol(c("lib/onBuildWrite/expected.js")), nol(c("lib/onBuildWrite/main-built.js"))); require._buildReset(); } ] ); doh.run(); doh.register("pristineSrc", [ //Makes sure source locations are not overwritten by the //normalization of paths to be absolute, when an appDir is //in play. function pristineSrc(t) { build(["lib/pristineSrc/build.js"]); t.is(nol(c("lib/pristineSrc/expected-main.js")), nol(c("lib/pristineSrc/built/main.js"))); t.is(nol(c("lib/pristineSrc/expected-lib.js")), nol(c("lib/pristineSrc/built/vendor/lib.js"))); require._buildReset(); } ] ); doh.run(); doh.register("intDefine", [ function intDefine(t) { file.deleteFile("lib/intDefine/main-built.js"); build(["lib/intDefine/build.js"]); t.is(nol(c("lib/intDefine/expected.js")), nol(c("lib/intDefine/main-built.js"))); require._buildReset(); } ] ); doh.run(); doh.register("cssRelativeUrl", [ function cssRelativeUrl(t) { file.deleteFile("lib/cssRelativeUrl/main-built.css"); build(["lib/cssRelativeUrl/build.js"]); t.is(nol(c("lib/cssRelativeUrl/output/expected.css")), nol(c("lib/cssRelativeUrl/output/main-built.css"))); require._buildReset(); } ] ); doh.run(); doh.register("cssDuplicates", [ function cssDuplicates(t) { file.deleteFile("lib/cssDuplicates/main-built.css"); build(["lib/cssDuplicates/build.js"]); t.is(nol(c("lib/cssDuplicates/expected.css")), nol(c("lib/cssDuplicates/main-built.css"))); require._buildReset(); } ] ); doh.run(); doh.register("cssKeepComments", [ function cssKeepComments(t) { file.deleteFile("lib/cssKeepComments/main-built.css"); build(["lib/cssKeepComments/build.js"]); t.is(nol(c("lib/cssKeepComments/expected.css")), nol(c("lib/cssKeepComments/main-built.css"))); require._buildReset(); } ] ); doh.run(); doh.register("cssKeepWhitespace", [ function cssKeepComments(t) { file.deleteFile("lib/cssKeepWhitespace/main-built.css"); build(["lib/cssKeepWhitespace/build.js"]); t.is(nol(c("lib/cssKeepWhitespace/expected.css")), nol(c("lib/cssKeepWhitespace/main-built.css"))); require._buildReset(); } ] ); doh.run(); doh.register("cssKeepLicense", [ function cssKeepLicense(t) { file.deleteFile("lib/cssKeepLicense/main-built.css"); build(["lib/cssKeepLicense/build.js"]); t.is(nol(c("lib/cssKeepLicense/expected.css")), nol(c("lib/cssKeepLicense/main-built.css"))); require._buildReset(); } ] ); doh.run(); doh.register("cssKeepLicenseNoLicense", [ function cssKeepLicenseNoLicense(t) { file.deleteFile("lib/cssKeepLicense/main-nolicense-built.css"); build(["lib/cssKeepLicense/build-nolicense.js"]); t.is(nol(c("lib/cssKeepLicense/expected-nolicense.css")), nol(c("lib/cssKeepLicense/main-nolicense-built.css"))); require._buildReset(); } ] ); doh.run(); //Tests https://github.com/requirejs/r.js/issues/167 @import in media query doh.register("cssMediaQuery", [ function cssMediaQuery(t) { file.deleteFile("lib/cssMediaQuery/main-built.css"); build(["lib/cssMediaQuery/build.js"]); t.is(nol(c("lib/cssMediaQuery/expected.css")), nol(c("lib/cssMediaQuery/main-built.css"))); require._buildReset(); } ] ); doh.run(); //Tests https://github.com/requirejs/r.js/issues/350 CSS optimizer makes //url() relative to cssIn option doh.register("cssPrefix", [ function cssPrefix(t) { file.deleteFile("lib/cssPrefix/output/main-built.css"); build(["lib/cssPrefix/build.js"]); t.is(nol(c("lib/cssPrefix/output/expected.css")), nol(c("lib/cssPrefix/output/main-built.css"))); require._buildReset(); } ] ); doh.run(); //Tests https://github.com/requirejs/r.js/issues/356 cssPrefix normalization //done even in directory builds doh.register("cssPrefixDirNormalization", [ function cssPrefixDirNormalization(t) { file.deleteFile("lib/cssPrefix/356/www-built"); build(["lib/cssPrefix/356/build.js"]); t.is(nol(c("lib/cssPrefix/356/expected/main.css")), nol(c("lib/cssPrefix/356/www-built/main.css"))); t.is(nol(c("lib/cssPrefix/356/expected/sub.css")), nol(c("lib/cssPrefix/356/www-built/sub.css"))); require._buildReset(); } ] ); doh.run(); //Tests https://github.com/requirejs/r.js/issues/296 removeCombined should //remove files that have been inlined. doh.register("cssRemoveCombined", [ function cssRemoveCombined(t) { file.deleteFile("lib/cssRemoveCombined/main-built.css"); build(["lib/cssRemoveCombined/build.js"]); t.is(false, file.exists("lib/cssRemoveCombined/www-built/css/two.css")); t.is(false, file.exists("lib/cssRemoveCombined/www-built/css/sub/one.css")); t.is(false, file.exists("lib/cssRemoveCombined/www-built/css/sub/misc.css")); t.is(nol(c("lib/cssRemoveCombined/expected.css")), nol(c("lib/cssRemoveCombined/www-built/css/main.css"))); require._buildReset(); } ] ); doh.run(); //Tests https://github.com/requirejs/r.js/issues/150 doh.register("appDirSrcOverwrite", [ function appDirSrcOverwrite(t) { build(["lib/appDirSrcOverwrite/build.js"]); //Make sure source file was not accidentally overwritten t.is(nol(c("lib/appDirSrcOverwrite/src-app.js")), nol(c("lib/appDirSrcOverwrite/www/js/app.js"))); //Make sure built file contains the expected contents. t.is(nol(c("lib/appDirSrcOverwrite/expected-app.js")), nol(c("lib/appDirSrcOverwrite/www-built/js/app.js"))); require._buildReset(); } ] ); doh.run(); //Tests https://github.com/requirejs/r.js/issues/151 doh.register("jqueryConfig", [ function jqueryConfig(t) { file.deleteFile("lib/jqueryConfig/main-built.js"); build(["lib/jqueryConfig/build.js"]); t.is(nol(c("lib/jqueryConfig/expected.js")), nol(c("lib/jqueryConfig/main-built.js"))); require._buildReset(); } ] ); doh.run(); //Tests https://github.com/requirejs/r.js/issues/125 doh.register("transportBeforeMinify", [ function transportBeforeMinify(t) { build(["lib/transportBeforeMinify/build.js"]); //Make sure the dependencies are listed as an array in the //file that is not part of a build layer, but still uglified var contents = nol(c("lib/transportBeforeMinify/www-built/js/b.js")); t.is(true, /define\(\["require"\,"a"\]\,function/.test(contents)); require._buildReset(); } ] ); doh.run(); //Tests https://github.com/requirejs/r.js/issues/138 doh.register("cssComment138", [ function cssComment138(t) { file.deleteFile("lib/cssComment138/main-built.css"); build(["lib/cssComment138/build.js"]); t.is(nol(c("lib/cssComment138/expected.css")), nol(c("lib/cssComment138/main-built.css"))); require._buildReset(); } ] ); doh.run(); doh.register("shimBasic", [ function shimBasic(t) { var outFile = "../../../requirejs/tests/shim/built/basic-tests.js"; file.deleteFile(outFile); build(["lib/shimBasic/build.js"]); //Also remove spaces, since rhino and node differ on their //Function.prototype.toString() output by whitespace, and //the semicolon on end of A.name, and string quotes. t.is(nol(c("lib/shimBasic/expected.js")).replace(/\s+/g, '').replace(/A\.name\;/g, 'A.name'), nol(c(outFile)).replace(/\s+/g, '').replace(/A\.name\;/g, 'A.name') .replace(/['"]Modified["']/, "'Modified'")); require._buildReset(); } ] ); doh.run(); // test wrapShim: true config // doh.register("shimBasicWrap", [ function shimBasicWrap(t) { var outFile = "lib/shimBasicWrap/basic-tests-built.js"; file.deleteFile(outFile); build(["lib/shimBasicWrap/build.js"]); //Also remove spaces, since rhino and node differ on their //Function.prototype.toString() output by whitespace, and //the semicolon on end of A.name, and string quotes. t.is(nol(c("lib/shimBasicWrap/expected.js")).replace(/\s+/g, '').replace(/A\.name\;/g, 'A.name'), nol(c(outFile)).replace(/\s+/g, '').replace(/A\.name\;/g, 'A.name') .replace(/['"]Modified["']/, "'Modified'")); require._buildReset(); } ] ); doh.run(); doh.register("shimFakeDefine", [ function shimFakeDefine(t) { file.deleteFile("lib/shimFakeDefine/main-built.js"); build(["lib/shimFakeDefine/build.js"]); t.is(nol(c("lib/shimFakeDefine/expected.js")), nol(c("lib/shimFakeDefine/main-built.js"))); require._buildReset(); } ] ); doh.run(); doh.register("shimWrapShort", [ function shimWrapShort(t) { file.deleteFile("lib/shimWrapShort/main-built.js"); build(["lib/shimWrapShort/build.js"]); t.is(nol(c("lib/shimWrapShort/expected.js")), nol(c("lib/shimWrapShort/main-built.js"))); require._buildReset(); } ] ); doh.run(); doh.register("mapConfig", [ function mapConfig(t) { var outFile = "../../../requirejs/tests/mapConfig/built/mapConfig-tests.js"; file.deleteFile(outFile); build(["lib/mapConfig/build.js"]); t.is(nol(c("lib/mapConfig/expected.js")), nol(c(outFile))); require._buildReset(); } ] ); doh.run(); doh.register("mapConfigStar", [ function mapConfigStar(t) { var outFile = "../../../requirejs/tests/mapConfig/built/mapConfigStar-tests.js"; file.deleteFile(outFile); build(["lib/mapConfig/buildStar.js"]); t.is(nol(c("lib/mapConfig/expectedStar.js")), nol(c(outFile))); require._buildReset(); } ] ); doh.run(); //Tests https://github.com/requirejs/requirejs/issues/277 doh.register("mapConfigStarAdapter", [ function mapConfigStar(t) { var outFile = "../../../requirejs/tests/mapConfig/built/mapConfigStarAdapter-tests.js"; file.deleteFile(outFile); build(["lib/mapConfig/buildStarAdapter.js"]); t.is(nol(c("lib/mapConfig/expectedStarAdapter.js")), nol(c(outFile))); require._buildReset(); } ] ); doh.run(); //https://github.com/requirejs/requirejs/issues/466 doh.register("mapConfigPlugin", [ function mapConfigPlugin(t) { var outFile = "../../../requirejs/tests/mapConfig/built/mapConfigPlugin-tests.js"; file.deleteFile(outFile); build(["lib/mapConfig/buildPlugin.js"]); t.is(nol(c("lib/mapConfig/expectedPlugin.js")), nol(c(outFile))); require._buildReset(); } ] ); doh.run(); doh.register("mapConfigMix", [ function mapConfigMix(t) { file.deleteFile("lib/mapConfigMix/a-built.js"); build(["lib/mapConfigMix/build.js"]); t.is(nol(c("lib/mapConfigMix/expected.js")), nol(c("lib/mapConfigMix/a-built.js"))); require._buildReset(); } ] ); doh.run(); //Tests https://github.com/requirejs/r.js/issues/165 insertRequire doh.register("insertRequire", [ function insertRequire(t) { file.deleteFile("lib/insertRequire/main-built.js"); build(["lib/insertRequire/build.js"]); t.is(nol(c("lib/insertRequire/expected.js")), nol(c("lib/insertRequire/main-built.js"))); require._buildReset(); } ] ); doh.run(); //Tests https://github.com/requirejs/r.js/issues/30 removeCombined doh.register("removeCombinedApp", [ function removeCombinedApp(t) { build(["lib/removeCombined/build.js"]); t.is(nol(c("lib/removeCombined/expected-main.js")), nol(c("lib/removeCombined/app-built/js/main.js"))); t.is(nol(c("lib/removeCombined/expected-secondary.js")), nol(c("lib/removeCombined/app-built/js/secondary.js"))); t.is(false, file.exists("lib/removeCombined/app-built/js/a.js")); t.is(false, file.exists("lib/removeCombined/app-built/js/b.js")); t.is(false, file.exists("lib/removeCombined/app-built/js/c.js")); t.is(true, file.exists("lib/removeCombined/app-built/js/d.js")); //Make sure empty directories are pruned t.is(false, file.exists('lib/removeCombined/app-built/js/sub'), 'empty directories removed'); require._buildReset(); } ] ); doh.run(); //Tests https://github.com/requirejs/r.js/issues/30 removeCombined doh.register("removeCombinedBaseUrl", [ function removeCombinedBaseUrl(t) { build(["lib/removeCombined/build-baseUrl.js"]); t.is(nol(c("lib/removeCombined/expected-main.js")), nol(c("lib/removeCombined/baseUrl-built/main.js"))); t.is(nol(c("lib/removeCombined/expected-secondary.js")), nol(c("lib/removeCombined/baseUrl-built/secondary.js"))); t.is(false, file.exists("lib/removeCombined/baseUrl-built/a.js")); t.is(false, file.exists("lib/removeCombined/baseUrl-built/b.js")); t.is(false, file.exists("lib/removeCombined/baseUrl-built/c.js")); t.is(true, file.exists("lib/removeCombined/baseUrl-built/d.js")); //Make sure empty directories are pruned t.is(false, file.exists('lib/removeCombined/baseUrl-built/sub'), 'empty directories removed'); require._buildReset(); } ] ); doh.run(); //Tests https://github.com/requirejs/r.js/issues/163 URLs as empty: doh.register("urlToEmpty", [ function urlToEmpty(t) { file.deleteFile("lib/urlToEmpty/main-built.js"); build(["lib/urlToEmpty/build.js"]); t.is(nol(c("lib/urlToEmpty/expected.js")), nol(c("lib/urlToEmpty/main-built.js"))); require._buildReset(); } ] ); doh.run(); // Tests https://github.com/requirejs/r.js/pull/322 multiple modules with shared excludes doh.register("modulesExclude", [ function modulesExclude(t) { file.deleteFile("lib/modulesExclude/built"); build(["lib/modulesExclude/build.js"]); t.is(nol(c("lib/modulesExclude/expected/a.js")), nol(c("lib/modulesExclude/built/a.js"))); t.is(nol(c("lib/modulesExclude/expected/b.js")), nol(c("lib/modulesExclude/built/b.js"))); t.is(nol(c("lib/modulesExclude/expected/z.js")), nol(c("lib/modulesExclude/built/z.js"))); require._buildReset(); } ] ); doh.run(); //Tests https://github.com/requirejs/r.js/issues/116 stub modules doh.register("stubModules", [ function stubModules(t) { file.deleteFile("lib/stubModules/main-built.js"); build(["lib/stubModules/build.js"]); t.is(noSlashRn(nol(c("lib/stubModules/expected.js"))), noSlashRn(nol(c("lib/stubModules/main-built.js")))); require._buildReset(); } ] ); doh.run(); //Tests https://github.com/requirejs/r.js/issues/291 per layer stub modules doh.register("stubModulesPerModule", [ function stubModulesPerModule(t) { file.deleteFile("lib/stubModules/perModule/built"); build(["lib/stubModules/perModule/build.js"]); t.is(noSlashRn(nol(c("lib/stubModules/perModule/expected-first.js"))), noSlashRn(nol(c("lib/stubModules/perModule/built/first.js")))); t.is(noSlashRn(nol(c("lib/stubModules/perModule/expected-second.js"))), noSlashRn(nol(c("lib/stubModules/perModule/built/second.js")))); require._buildReset(); } ] ); doh.run(); //Tests https://github.com/requirejs/r.js/issues/432 insert stub module //for module.create layers. doh.register("stubModulesCreate", [ function stubModulesCreate(t) { file.deleteFile("lib/stubModules/create/foobar-built.js"); build(["lib/stubModules/create/build.js"]); t.is(noSlashRn(nol(c("lib/stubModules/create/expected.js"))), noSlashRn(nol(c("lib/stubModules/create/foobar-built.js")))); require._buildReset(); } ] ); doh.run(); //Tests https://github.com/requirejs/r.js/issues/155 no copy of paths doh.register("pathsNoCopy", [ function pathsNoCopy(t) { file.deleteFile("lib/pathsNoCopy/js-built"); build(["lib/pathsNoCopy/build.js"]); t.is(true, file.exists("lib/pathsNoCopy/js-built/vendor/sub.js")); t.is(false, file.exists("lib/pathsNoCopy/js-built/sub.js")); t.is(true, file.exists("lib/pathsNoCopy/js-built/outside.js")); require._buildReset(); } ] ); doh.run(); //Confirm that deps: [] works in a build config file. doh.register("depsConfig", [ function depsConfig(t) { file.deleteFile("lib/depsConfig/main-built.js"); build(["lib/depsConfig/build.js"]); t.is(nol(c("lib/depsConfig/expected.js")), nol(c("lib/depsConfig/main-built.js"))); require._buildReset(); } ] ); doh.run(); //Tests https://github.com/requirejs/requirejs/issues/278, make sure that //baseUrl inside a mainConfigFile is resolved relative to the appDir in //a build file. doh.register("mainConfigBaseUrl", [ function mainConfigBaseUrl(t) { build(["lib/mainConfigBaseUrl/build.js"]); t.is(nol(c("lib/mainConfigBaseUrl/expected.js")), nol(c("lib/mainConfigBaseUrl/www-built/js/main.js"))); require._buildReset(); } ] ); doh.run(); //Confirm package config builds correctly so that it works in both //require.js and almond, which does not know about package config. //https://github.com/requirejs/r.js/issues/136 doh.register("packages", [ function packages(t) { file.deleteFile("lib/packages/main-built.js"); build(["lib/packages/build.js"]); t.is(nol(c("lib/packages/expected.js")), nol(c("lib/packages/main-built.js"))); require._buildReset(); } ] ); doh.run(); //Confirm node-style package module IDs, which may end in '.js', work in //optimizer. //https://github.com/requirejs/r.js/pull/591 doh.register("packagesNode", [ function packagesNode(t) { file.deleteFile("lib/packagesNode/main-built.js"); build(["lib/packagesNode/build.js"]); t.is(nol(c("lib/packagesNode/expected.js")), nol(c("lib/packagesNode/main-built.js"))); require._buildReset(); } ] ); doh.run(); //Confirm package adapter module is skipped if the main package //module names itself. //https://github.com/requirejs/r.js/issues/328 doh.register("packagesNamed", [ function packagesNamed(t) { file.deleteFile("lib/packages/named/main-built.js"); build(["lib/packages/named/build.js"]); t.is(nol(c("lib/packages/named/expected.js")), nol(c("lib/packages/named/main-built.js"))); require._buildReset(); } ] ); doh.run(); //Peaceful coexistence of package config with shim in a built context. //https://github.com/requirejs/r.js/issues/331 doh.register("configPackageShim", [ function configPackageShim(t) { file.deleteFile("lib/configPackageShim/built"); build(["lib/configPackageShim/build.js"]); t.is(nol(c("lib/configPackageShim/expected.js")), nol(c("lib/configPackageShim/built/main.js"))); require._buildReset(); } ] ); doh.run(); doh.register("packagesMultiLevel", [ function packagesMultiLevel(t) { var startPath = "../../../requirejs/tests/packagesMultiLevel/", builtPath = startPath + "packagesMultiLevel-tests-built.js"; file.deleteFile(builtPath); build([startPath + "build.js"]); t.is(nol(c(startPath + "expected-built.js")), nol(c(builtPath))); //Reset require internal state for the contexts so future //builds in these tests will work correctly. require._buildReset(); } ] ); doh.run(); //Make sure pluginBuilder works. //https://github.com/requirejs/r.js/issues/175 doh.register("pluginBuilder", [ function pluginBuilder(t) { file.deleteFile("lib/pluginBuilder/main-built.js"); build(["lib/pluginBuilder/build.js"]); t.is(nol(c("lib/pluginBuilder/expected.js")), nol(c("lib/pluginBuilder/main-built.js"))); require._buildReset(); } ] ); doh.run(); // When undefining a plugin to re-execute for full build execution, make // sure its dependency undefs consider map config. // https://github.com/requirejs/r.js/issues/944 doh.register("pluginBuildUndef", [ function pluginFirstWithDeps(t) { file.deleteFile("lib/pluginBuildUndef/out.js"); build(["lib/pluginBuildUndef/build.js"]); t.is(nol(c("lib/pluginBuildUndef/expected.js")), nol(c("lib/pluginBuildUndef/out.js"))); require._buildReset(); } ] ); doh.run(); //Make sure plugin dependencies that need normalization run in a build. //https://github.com/requirejs/r.js/issues/648 doh.register("pluginDepExec", [ function pluginDepExec(t) { file.deleteFile("lib/pluginDepExec/main-built.js"); build(["lib/pluginDepExec/build.js"]); t.is(nol(c("lib/pluginDepExec/expected.js")), nol(c("lib/pluginDepExec/main-built.js"))); require._buildReset(); } ] ); doh.run(); //Make sure a non-strict plugin does not blow up in the build //https://github.com/requirejs/r.js/issues/181 doh.register("nonStrict", [ function nonStrict(t) { file.deleteFile("lib/nonStrict/main-built.js"); build(["lib/nonStrict/build.js"]); t.is(nol(c("lib/nonStrict/expected.js")), nol(c("lib/nonStrict/main-built.js"))); require._buildReset(); } ] ); doh.run(); //Tests https://github.com/requirejs/r.js/issues/190, //optimizeAllPluginResources doh.register("optimizeAllPluginResources", [ function optimizeAllPluginResources(t) { build(["lib/plugins/optimizeAllPluginResources/build.js"]); t.is(true, file.exists("lib/plugins/optimizeAllPluginResources/www-built/js/one.txt.js")); t.is(true, file.exists("lib/plugins/optimizeAllPluginResources/www-built/js/two.txt.js")); t.is(true, file.exists("lib/plugins/optimizeAllPluginResources/www-built/js/secondary.txt.js")); t.is(noSlashRn(nol(c("lib/plugins/optimizeAllPluginResources/expected-secondary.txt.js"))), noSlashRn(nol(c("lib/plugins/optimizeAllPluginResources/www-built/js/secondary.txt.js")))); require._buildReset(); } ] ); doh.run(); //Tests that under rhino paths are normalized to not have . or .. in them. //https://github.com/requirejs/r.js/issues/186 doh.register("rhino186", [ function rhino186(t) { build(["lib/rhino-186/app.build.js"]); t.is(noSlashRn(nol(c("lib/rhino-186/expected.js"))), noSlashRn(nol(c("lib/rhino-186/built/main.js")))); require._buildReset(); } ] ); doh.run(); //Tests cjsTranslate https://github.com/requirejs/r.js/issues/189 doh.register("cjsTranslate", [ function cjsTranslate(t) { build(["lib/cjsTranslate/www/app.build.js"]); var expected = nol(c("lib/cjsTranslate/expected.js")), contents = nol(c("lib/cjsTranslate/www-built/js/lib.js")); t.is(expected, contents); require._buildReset(); } ] ); doh.run(); //Make sure dormant, un-required modules in a build do not trigger //'module did not load error' https://github.com/requirejs/r.js/issues/213 doh.register("dormant213", [ function dormant213(t) { file.deleteFile("lib/dormant213/main-built.js"); build(["lib/dormant213/build.js"]); t.is(nol(c("lib/dormant213/expected.js")), nol(c("lib/dormant213/main-built.js"))); require._buildReset(); } ] ); doh.run(); //Make sure evaled plugin dependencies in a build do not see the module //and exports value for r.js https://github.com/requirejs/r.js/issues/217 doh.register("noexports", [ function noexports(t) { file.deleteFile("lib/noexports/main-built.js"); build(["lib/noexports/build.js"]); t.is(nol(c("lib/noexports/expected.js")), nol(c("lib/noexports/main-built.js"))); require._buildReset(); } ] ); doh.run(); //Allow JS 1.8 that works in spidermonkey to be built. //https://github.com/requirejs/r.js/issues/72 doh.register("js18", [ function js18(t) { file.deleteFile("lib/js18/main-built.js"); build(["lib/js18/build.js"]); t.is(nol(c("lib/js18/expected.js")), nol(c("lib/js18/main-built.js"))); require._buildReset(); } ] ); doh.run(); //Allow some basic shimmed deps to work for plugins //https://github.com/requirejs/r.js/issues/203 doh.register("pluginShimDep", [ function pluginShimDep(t) { file.deleteFile("lib/pluginShimDep/main-built.js"); build(["lib/pluginShimDep/build.js"]); t.is(nol(c("lib/pluginShimDep/expected.js")), nol(c("lib/pluginShimDep/main-built.js"))); require._buildReset(); } ] ); doh.run(); //Hoist require definition for multiple layer builds //https://github.com/requirejs/r.js/issues/263 doh.register("requireHoistPerLayer", [ function requireHoistPerLayer(t) { file.deleteFile("lib/requireHoist/perLayer/built"); build(["lib/requireHoist/perLayer/build.js"]); t.is(nol(c("lib/requireHoist/perLayer/expectedMain1.js")), nol(c("lib/requireHoist/perLayer/built/main1.js"))); t.is(nol(c("lib/requireHoist/perLayer/expectedMain2.js")), nol(c("lib/requireHoist/perLayer/built/main2.js"))); require._buildReset(); } ] ); doh.run(); //Apply module overrides for final optimization/pragma work. //https://github.com/requirejs/r.js/issues/275 doh.register("pragmasOverride", [ function pragmasOverride(t) { file.deleteFile("lib/pragmas/override/built"); build(["lib/pragmas/override/build.js"]); t.is(nol(c("lib/pragmas/override/expectedMain1.js")), nol(c("lib/pragmas/override/built/main1.js"))); t.is(nol(c("lib/pragmas/override/expectedMain2.js")), nol(c("lib/pragmas/override/built/main2.js"))); t.is(nol(c("lib/pragmas/override/expectedHelper.js")), nol(c("lib/pragmas/override/built/helper.js"))); require._buildReset(); } ] ); doh.run(); //Test onLayerEnd for loader plugins //https://github.com/requirejs/r.js/pull/241 doh.register("pluginsOnLayerEnd", [ function pluginsOnLayerEnd(t) { file.deleteFile("lib/plugins/onLayerEnd/main-built.js"); build(["lib/plugins/onLayerEnd/build.js"]); t.is(nol(c("lib/plugins/onLayerEnd/expected.js")), nol(c("lib/plugins/onLayerEnd/main-built.js"))); require._buildReset(); } ] ); doh.run(); doh.register("pluginsOnLayerEndMulti", [ function pluginsOnLayerEndMulti(t) { file.deleteFile("lib/plugins/onLayerEnd/built"); build(["lib/plugins/onLayerEnd/buildMulti.js"]); t.is(nol(c("lib/plugins/onLayerEnd/expectedMultiMain.js")), nol(c("lib/plugins/onLayerEnd/built/main.js"))); t.is(nol(c("lib/plugins/onLayerEnd/expectedMultiSecondary.js")), nol(c("lib/plugins/onLayerEnd/built/secondary.js"))); require._buildReset(); } ] ); doh.run(); doh.register("hasOwnPropertyTest", [ function hasOwnPropertyTest(t) { file.deleteFile("lib/hasOwnProperty/built.js"); build(["lib/hasOwnProperty/build.js"]); t.is(nol(c("lib/hasOwnProperty/expected.js")), nol(c("lib/hasOwnProperty/built.js"))); require._buildReset(); } ] ); doh.run(); doh.register("rawText", [ function rawText(t) { file.deleteFile("lib/rawText/built.js"); build(["lib/rawText/build.js"]); t.is(nol(c("lib/rawText/expected.js")), nol(c("lib/rawText/built.js"))); require._buildReset(); } ] ); doh.run(); doh.register("rawTextLongId", [ function rawTextLongId(t) { file.deleteFile("lib/rawTextLongId/built.js"); build(["lib/rawTextLongId/build.js"]); t.is(nol(c("lib/rawTextLongId/expected.js")), nol(c("lib/rawTextLongId/built.js"))); require._buildReset(); } ] ); doh.run(); // deps should be integrated into the build and not trigger // loads before traceDependencies, where rawText comes into play. // https://github.com/requirejs/r.js/issues/658 doh.register("rawTextDeps", [ function rawTextDeps(t) { file.deleteFile("lib/rawTextDeps/built.js"); build(["lib/rawTextDeps/build.js"]); t.is(nol(c("lib/rawTextDeps/expected.js")), nol(c("lib/rawTextDeps/built.js"))); require._buildReset(); } ] ); doh.run(); //Make sure multiple named modules do not mess up toTransport //https://github.com/requirejs/r.js/issues/366 doh.register("iife", [ function iife(t) { file.deleteFile("lib/iife/main-built.js"); build(["lib/iife/build.js"]); t.is(nol(c("lib/iife/expected.js")), nol(c("lib/iife/main-built.js"))); require._buildReset(); } ] ); doh.run(); //For UMD-wrapped code that is made up of interior modules, treat //the UMD define as the entry point for the module, and do not //parse the interior modules. //https://github.com/requirejs/r.js/issues/460 doh.register("anonUmdInteriorModules", [ function anonUmdInteriorModules(t) { file.deleteFile("lib/anonUmdInteriorModules/main-built.js"); build(["lib/anonUmdInteriorModules/build.js"]); t.is(nol(c("lib/anonUmdInteriorModules/expected.js")), nol(c("lib/anonUmdInteriorModules/main-built.js"))); require._buildReset(); } ] ); doh.run(); //Test source map generation for a bundled file, //see https://github.com/requirejs/r.js/issues/397 doh.register("sourcemap", [ function sourcemap(t) { file.deleteFile("lib/sourcemap/www-built"); build(["lib/sourcemap/build.js"]); sourcemapEquals(t, c("lib/sourcemap/expected-main.js.map"), c("lib/sourcemap/www-built/js/main.js.map")); require._buildReset(); } ] ); doh.run(); //Test single file JS optimization with source map generation doh.register("sourcemapSingle", [ function sourcemapSingle(t) { file.deleteFile("lib/sourcemapSingle/main-built.js"); file.deleteFile("lib/sourcemapSingle/main-built.js.map"); build(["lib/sourcemapSingle/build.js"]); sourcemapEquals(t, c("lib/sourcemapSingle/expected-main-built.js.map"), c("lib/sourcemapSingle/main-built.js.map")); require._buildReset(); } ] ); doh.run(); //Test a single file with optimize, preserve license comments, and source maps doh.register("sourcemapComments", [ function sourcemapComments(t) { file.deleteFile("lib/sourcemapComments/main-built.js"); file.deleteFile("lib/sourcemapComments/main-built.js.map"); build(["lib/sourcemapComments/build.js"]); t.is(nol(c("lib/sourcemapComments/expected-main-built.js")), nol(c("lib/sourcemapComments/main-built.js"))); sourcemapEquals(t, c("lib/sourcemapComments/expected-main-built.js.map"), c("lib/sourcemapComments/main-built.js.map")); require._buildReset(); } ] ); doh.run(); // The output in rhino is slightly different, but enough to cause the // text compare to fail. So just disabling it for now. Long term, // a fancier sourcemap diff checking would be nice. if (env.get() !== 'rhino') { //Make sure "onejs" builds generate source map files relative to baseUrl, //and not the output file: //https://github.com/requirejs/r.js/issues/477 doh.register("sourcemapOneJs", [ function sourcemapOneJs(t) { file.deleteFile("lib/sourcemap/onejs/www/js/built.js"); file.deleteFile("lib/sourcemap/onejs/www/js/built.js.map"); build(["lib/sourcemap/onejs/build.js"]); sourcemapEquals(t, c("lib/sourcemap/onejs/expected.map"), c("lib/sourcemap/onejs/www/js/built.js.map")); require._buildReset(); } ] ); doh.run(); //Confirm target file is also in the source map. //https://github.com/requirejs/r.js/issues/829 doh.register("sourcemapTwoJs", [ function sourcemapTwoJs(t) { file.deleteFile("lib/sourcemap/twojs/www-built"); build(["lib/sourcemap/twojs/build.js"]); sourcemapEquals(t, c("lib/sourcemap/twojs/expected.map"), c("lib/sourcemap/twojs/www-built/core.js.map")); require._buildReset(); } ] ); doh.run(); } //Allow the target of an optimization to be a module that is only //provided in the rawText config. //Test single file JS optimization with source map generation doh.register("rawTextNameTarget", [ function rawTextNameTarget(t) { file.deleteFile("lib/rawTextNameTarget/a-built.js"); build(["lib/rawTextNameTarget/build.js"]); t.is(nol(c("lib/rawTextNameTarget/expected.js")), nol(c("lib/rawTextNameTarget/a-built.js"))); require._buildReset(); } ] ); doh.run(); //Allow whole project config where a module entry's name is provided // via rawText instead of being on disk. // https://github.com/requirejs/r.js/issues/919 doh.register("rawTextNameWholeProject", [ function rawTextNameWholeProject(t) { file.deleteFile("lib/rawTextNameWholeProject/built"); build(["lib/rawTextNameWholeProject/www/app.build.js"]); t.is(nol(c("lib/rawTextNameWholeProject/expected-main.js")), nol(c("lib/rawTextNameWholeProject/www-built/js/main.js"))); t.is(nol(c("lib/rawTextNameWholeProject/expected-b.js")), nol(c("lib/rawTextNameWholeProject/www-built/js/b.js"))); require._buildReset(); } ] ); doh.run(); //Allow skipping semicolon insertion //https://github.com/requirejs/r.js/issues/506 doh.register("semicolonInsert", [ function semicolonInsert(t) { file.deleteFile("lib/semicolonInsert/a-built.js"); build(["lib/semicolonInsert/build.js"]); t.is(nol(c("lib/semicolonInsert/expected.js")), nol(c("lib/semicolonInsert/a-built.js"))); require._buildReset(); } ] ); doh.run(); //Make sure overrides for each build layer are pristine //https://github.com/requirejs/r.js/issues/500 doh.register("dualLayerOverride", [ function dualLayerOverride(t) { file.deleteFile("lib/dualLayerOverride/built"); build(["lib/dualLayerOverride/build.js"]); t.is(nol(c("lib/dualLayerOverride/expectedMessage.js")), nol(c("lib/dualLayerOverride/built/message.js"))); t.is(nol(c("lib/dualLayerOverride/expectedWho.js")), nol(c("lib/dualLayerOverride/built/who.js"))); require._buildReset(); } ] ); doh.run(); //Allow wrap config in overrides //https://github.com/requirejs/r.js/issues/503 doh.register("overrideWrap", [ function overrideWrap(t) { file.deleteFile("lib/override/wrap/built"); build(["lib/override/wrap/build.js"]); t.is(nol(c("lib/override/wrap/expected/a.js")), nol(c("lib/override/wrap/built/a.js"))); t.is(nol(c("lib/override/wrap/expected/b.js")), nol(c("lib/override/wrap/built/b.js"))); t.is(nol(c("lib/override/wrap/expected/c.js")), nol(c("lib/override/wrap/built/c.js"))); require._buildReset(); } ] ); doh.run(); //Do not removeCombined files that are outside the build dir. //https://github.com/requirejs/requirejs/issues/755 doh.register("removeCombinedPaths", [ function removeCombinedPaths(t) { file.deleteFile("lib/removeCombinedPaths/testcase/project/build/build_output"); build(["lib/removeCombinedPaths/testcase/project/build/build.js"]); t.is(true, file.exists("lib/removeCombinedPaths/testcase/lib/main.js")); t.is(true, file.exists("lib/removeCombinedPaths/testcase/project/build/build_output/main.js")); require._buildReset(); } ] ); doh.run(); //Test single file JS optimization with source map generation doh.register("unicode", [ function unicode(t) { file.deleteFile("lib/unicode/main-built.js"); build(["lib/unicode/build.js"]); t.is(nol(c("lib/unicode/expected.js")), nol(c("lib/unicode/main-built.js"))); require._buildReset(); } ] ); doh.run(); //Do not go into already concatenated files with an internal define //https://github.com/requirejs/requirejs/issues/883 doh.register("umd", [ function umd(t) { file.deleteFile("lib/umd/main-built.js"); build(["lib/umd/build.js"]); t.is(nol(c("lib/umd/expected.js")), nol(c("lib/umd/main-built.js"))); require._buildReset(); } ] ); doh.run(); //Detect !function(e) {... define([], e) UMD wrappers //https://github.com/requirejs/requirejs/issues/733 doh.register("umd2", [ function umd2(t) { file.deleteFile("lib/umd2/built.js"); build(["lib/umd2/build.js"]); t.is(nol(c("lib/umd2/expected.js")), nol(c("lib/umd2/built.js"))); require._buildReset(); } ] ); doh.run(); //Detect !function(e) {... define(e) UMD wrappers //https://github.com/requirejs/requirejs/issues/833 doh.register("umd3", [ function umd2(t) { file.deleteFile("lib/umd3/app-built.js"); build(["lib/umd3/build.js"]); t.is(nol(c("lib/umd3/expected.js")), nol(c("lib/umd3/app-built.js"))); require._buildReset(); } ] ); doh.run(); //Possible style of UMD wrapper used in TypeScript //https://github.com/requirejs/requirejs/issues/857 doh.register("umd4", [ function umd4(t) { file.deleteFile("lib/umd4/app-built.js"); build(["lib/umd4/build.js"]); t.is(nol(c("lib/umd4/expected.js")), nol(c("lib/umd4/app-built.js"))); require._buildReset(); } ] ); doh.run(); //Do not not find nested deps in a UMD wrapper //https://github.com/requirejs/requirejs/issues/651 doh.register("umdNested", [ function umdNested(t) { file.deleteFile("lib/umdNested/main-built.js"); build(["lib/umdNested/build.js"]); t.is(nol(c("lib/umdNested/expected.js")), nol(c("lib/umdNested/main-built.js"))); require._buildReset(); } ] ); doh.run(); //Keep parsing if a define uses an identifier, but is not part of //a function wrapper for UMD //https://github.com/requirejs/requirejs/issues/1133 doh.register("nonUmdIdentifiers", [ function nonUmdIdentifiers(t) { file.deleteFile("lib/nonUmdIdentifiers/main-built.js"); build(["lib/nonUmdIdentifiers/build.js"]); t.is(nol(c("lib/nonUmdIdentifiers/expected.js")), nol(c("lib/nonUmdIdentifiers/main-built.js"))); require._buildReset(); } ] ); doh.run(); //out function should get source map if available. //https://github.com/requirejs/r.js/issues/590 doh.register("sourcemapOutFunction", [ function sourcemapOutFunction(t) { var ugly, plain, config = { baseUrl: 'lib/sourcemapOutFunction/js', generateSourceMaps: true, preserveLicenseComments: false, name: 'main' }; build(lang.mixin({ optimize: 'uglify2', out: function (text, sourceMap) { ugly = { text: text, sourceMap: sourceMap }; } }, config)); require._buildReset(); build(lang.mixin({ optimize: 'none', out: function (text, sourceMap) { plain = { text: text, sourceMap: sourceMap }; } }, config)); /* console.log(ugly.text); console.log('======='); console.log(ugly.sourceMap); console.log('== NONE =='); console.log(plain.text); console.log('======='); console.log(plain.sourceMap); */ t.is(true, !!plain.text, 'has plain text'); t.is(true, !!ugly.text, 'has uglified text'); t.is(true, plain.text !== ugly.text, 'texts are not equal'); t.is(true, plain.sourceMap !== ugly.sourceMap, 'source maps are not equal'); ugly.sourceMap = JSON.parse(ugly.sourceMap); plain.sourceMap = JSON.parse(plain.sourceMap); t.is(true, !!ugly.sourceMap.sourcesContent, 'has uglified sourcesContent'); t.is(true, !!plain.sourceMap.sourcesContent, 'has plain sourcesContent'); t.is(true, plain.sourceMap.mappings !== ugly.sourceMap.mappings, 'mappings are not equal'); require._buildReset(); } ] ); doh.run(); //https://github.com/requirejs/r.js/issues/479 doh.register("allowSourceOverwrites", [ function allowSourceOverwrites(t) { file.deleteFile("lib/allowSourceOverwrites/output/main.js"); build(["lib/allowSourceOverwrites/build.js"]); t.is(nol(c("lib/allowSourceOverwrites/expected.js")), nol(c("lib/allowSourceOverwrites/output/main.js"))); require._buildReset(); } ] ); doh.run(); //Confirm dot trimming still works as usual. //https://github.com/requirejs/requirejs/issues/1129 doh.register("dotTrim", [ function dotTrim(t) { file.deleteFile("lib/dotTrim/built.js"); build(["lib/dotTrim/build.js"]); t.is(nol(c("lib/dotTrim/expected.js")), nol(c("lib/dotTrim/built.js"))); require._buildReset(); } ] ); doh.run(); //Confirm that the UMD skipping still finds jQuery-type inner //defines inside a partial, non-AMD UMD wrapper. //https://github.com/requirejs/r.js/issues/704 doh.register("nojQDupeDefine", [ function nojQDupeDefine(t) { file.deleteFile("lib/nojQDupeDefine/built.js"); build(["lib/nojQDupeDefine/build.js"]); t.is(nol(c("lib/nojQDupeDefine/expected.js")), nol(c("lib/nojQDupeDefine/main-built.js"))); require._buildReset(); } ] ); doh.run(); //Deal with some build config files that could be compile outputs from //other languages, like typescript. //https://github.com/requirejs/r.js/issues/767 doh.register("typescriptConfig", [ function typescriptConfig(t) { file.deleteFile("lib/typescriptConfig/main-built.js"); build(["lib/typescriptConfig/build.js"]); t.is(nol(c("lib/typescriptConfig/expected.js")), nol(c("lib/typescriptConfig/main-built.js"))); require._buildReset(); } ] ); doh.run(); //Allow arrow functions in require/define APIs //https://github.com/requirejs/r.js/issues/800 doh.register("arrowFunctions", [ function arrowFunctions(t) { file.deleteFile("lib/arrow/main-built.js"); build(["lib/arrow/build.js"]); t.is(nol(c("lib/arrow/expected.js")), nol(c("lib/arrow/main-built.js"))); require._buildReset(); } ] ); doh.run(); //See https://github.com/requirejs/r.js/pull/796 doh.register("periodInNameConfig", [ function periodInNameConfig(t) { file.deleteFile("lib/periodInNameConfig/out"); build(["lib/periodInNameConfig/build.js"]); t.is(nol(c("lib/periodInNameConfig/scripts/main.js")), nol(c("lib/periodInNameConfig/out/main.js"))); t.is(nol(c("lib/periodInNameConfig/components/foo.bar.js")), nol(c("lib/periodInNameConfig/out/foo.bar.js"))); require._buildReset(); } ] ); doh.run(); //Do not warn about unloaded loader plugin resources if they enter the build //via named define calls. //https://github.com/requirejs/r.js/issues/815 doh.register("inlineDefineNoRequire", [ function inlineDefineNoRequire(t) { file.deleteFile("lib/inlineDefineNoRequire/testmodule-built.js"); build(["lib/inlineDefineNoRequire/build.js"]); t.is(nol(c("lib/inlineDefineNoRequire/expected.js")), nol(c("lib/inlineDefineNoRequire/testmodule-built.js"))); require._buildReset(); } ] ); doh.run(); //Allow define('id', depsAsIdentifier, function(){}) in files //https://github.com/requirejs/r.js/issues/825 doh.register("dynamicDefine", [ function dynamicDefine(t) { file.deleteFile("lib/dynamicDefine/main-built.js"); build(["lib/dynamicDefine/build.js"]); t.is(nol(c("lib/dynamicDefine/expected.js")), nol(c("lib/dynamicDefine/main-built.js"))); require._buildReset(); } ] ); doh.run(); //When running in Rhino and using Closure for optimization, //it should be possible to declare externs for Closure's //ADVANCED_OPTIMIZATION mode. //https://github.com/requirejs/r.js/issues/860 if (env.get() === 'rhino') { doh.register("closureExterns", [ function closureExterns(t) { file.deleteFile("lib/closureExterns/built"); build(["lib/closureExterns/build.js"]); var contents = c("lib/closureExterns/built/built.js"); //Without a working externs definition, these property //names are typically replaced with one-character aliases. t.is(true, /define\.amd/.test(contents)); t.is(true, /module\.exports/.test(contents)); require._buildReset(); } ] ); doh.run(); } doh.register("sourcemapWrap", [ function sourcemapWrap(t) { file.deleteFile("lib/sourcemapWrap/built"); build(["lib/sourcemapWrap/build-with-wrap.js"]); build(["lib/sourcemapWrap/build-without-wrap.js"]); var withWrapMap = c("lib/sourcemapWrap/built/built-with-wrap.js.map"); var withoutWrapMap = c("lib/sourcemapWrap/built/built-without-wrap.js.map"); var withWrapObject = JSON.parse(withWrapMap); var withoutWrapObject = JSON.parse(withoutWrapMap); t.isNot(withoutWrapObject.mappings, withWrapObject.mappings, "Mappings with and without the wrapping code should differ"); require._buildReset(); } ]); doh.run(); //Test writing bundles config. //See https://github.com/requirejs/r.js/issues/613 doh.register("writeBundlesConfig", [ function writeBundlesConfig(t) { file.deleteFile("lib/bundlesConfig/built"); build(["lib/bundlesConfig/build.js"]); t.is(nol(c("lib/bundlesConfig/expected.js")), nol(c("lib/bundlesConfig/built/main.js"))); require._buildReset(); } ] ); doh.run(); //Support mangleProperties in uglify config. //See https://github.com/requirejs/r.js/issues/943 doh.register("uglifyMangleProperties", [ function writeBundlesConfig(t) { file.deleteFile("lib/uglifyMangleProperties/main-built.js"); build(["lib/uglifyMangleProperties/build.js"]); t.is(nol(c("lib/uglifyMangleProperties/expected.js")), nol(c("lib/uglifyMangleProperties/main-built.js"))); require._buildReset(); } ] ); doh.run(); }); r.js-2.3.6/build/tests/circular.build.js000066400000000000000000000005041334071220400200720ustar00rootroot00000000000000//A simple build file using the circular tests for requirejs ({ baseUrl: "../../../requirejs/tests", optimize: "none", dir: "builds/circular", modules: [ { name: "two" }, { name: "funcTwo" }, { name: "funcThree" } ] }) r.js-2.3.6/build/tests/convert.js000066400000000000000000000045651334071220400166630ustar00rootroot00000000000000/*jslint */ /*global doh: false, define: false */ define(['commonJs'], function (commonJs) { 'use strict'; doh.register( "convert", [ function commonJsConvert(t) { var source1 = 'define("fake", {lol: "you guise"});', source2 = 'define("fake", [],\nfunction(){\nreturn{lol : \'you guise\'};\n});', source3 = 'exports.name = "foo";', expected3 = 'define(function (require, exports, module) {exports.name = "foo";\n});\n', source4 = 'module.exports = "foo";', expected4 = 'define(function (require, exports, module) {module.exports = "foo";\n});\n', source5 = 'var a = require("a");\nexports.name = a;', expected5 = 'define(function (require, exports, module) {var a = require("a");\nexports.name = a;\n});\n', source6 = 'exports.name = __dirname;', expected6 = 'define(function (require, exports, module) {' + 'var __filename = module.uri || "", __dirname = __filename.substring(0, __filename.lastIndexOf("/") + 1); ' + 'exports.name = __dirname;\n});\n', source7 = 'exports.name = __filename;', expected7 = 'define(function (require, exports, module) {' + 'var __filename = module.uri || "", __dirname = __filename.substring(0, __filename.lastIndexOf("/") + 1); ' + 'exports.name = __filename;\n});\n', source8 = 'var MyModule = module.exports = "foo";', expected8 = 'define(function (require, exports, module) {var MyModule = module.exports = "foo";\n});\n'; t.is(source1, commonJs.convert('fake.js', source1)); t.is(source2, commonJs.convert('fake.js', source2)); t.is(expected3, commonJs.convert('source3', source3)); t.is(expected4, commonJs.convert('source4', source4)); t.is(expected5, commonJs.convert('source5', source5)); t.is(expected6, commonJs.convert('source6', source6)); t.is(expected7, commonJs.convert('source7', source7)); t.is(expected8, commonJs.convert('source8', source8)); } ] ); doh.run(); }); r.js-2.3.6/build/tests/css.build.js000066400000000000000000000001741334071220400170610ustar00rootroot00000000000000//A simple build file for testing css optimizations. ({ appDir: "./css", dir: "builds/css", optimize: "none" }) r.js-2.3.6/build/tests/css/000077500000000000000000000000001334071220400154235ustar00rootroot00000000000000r.js-2.3.6/build/tests/css/common/000077500000000000000000000000001334071220400167135ustar00rootroot00000000000000r.js-2.3.6/build/tests/css/common/common.css000066400000000000000000000001351334071220400207140ustar00rootroot00000000000000/* These are common styles */ body { background: blue url(img/body.png) bottom center; } r.js-2.3.6/build/tests/css/master.css000066400000000000000000000003661334071220400174350ustar00rootroot00000000000000@import url('common/common.css'); @import url('relative/rel1.css'); /** * * This is the master css file. * */ nav { color: red; background-image: url("nav.png"); } #footer { background-image: url("../img/footer.png") repeat-x; } r.js-2.3.6/build/tests/css/relative/000077500000000000000000000000001334071220400172365ustar00rootroot00000000000000r.js-2.3.6/build/tests/css/relative/nested/000077500000000000000000000000001334071220400205205ustar00rootroot00000000000000r.js-2.3.6/build/tests/css/relative/nested/nest1.css000066400000000000000000000000751334071220400222660ustar00rootroot00000000000000#nest { background-image: url('../../../img/bar.png'); } r.js-2.3.6/build/tests/css/relative/rel1.css000066400000000000000000000001241334071220400206100ustar00rootroot00000000000000/* tests issue #5 */ @import url(./rel_sub.css); @import url("./nested/nest1.css"); r.js-2.3.6/build/tests/css/relative/rel_sub.css000066400000000000000000000000721334071220400214020ustar00rootroot00000000000000.relsub { background-image: url(../../img/foo.png); } r.js-2.3.6/build/tests/css/sub/000077500000000000000000000000001334071220400162145ustar00rootroot00000000000000r.js-2.3.6/build/tests/css/sub/sub1.css000066400000000000000000000002211334071220400175730ustar00rootroot00000000000000@import url("../master.css"); .sub { background: transparent url(../../img/sub.png); /*Some comment in here*/ position: relative; } r.js-2.3.6/build/tests/cssTestCompare.css000066400000000000000000000006421334071220400203060ustar00rootroot00000000000000 body { background: blue url(../common/img/body.png) bottom center; } .relsub { background-image: url(../../img/foo.png); } #nest { background-image: url(../../img/bar.png); } nav { color: red; background-image: url(../nav.png); } #footer { background-image: url(../../img/footer.png) repeat-x; } .sub { background: transparent url(../../img/sub.png); position: relative; } r.js-2.3.6/build/tests/end.frag000066400000000000000000000000461334071220400162420ustar00rootroot00000000000000 window.one = requirejs("one"); }()); r.js-2.3.6/build/tests/expected/000077500000000000000000000000001334071220400164345ustar00rootroot00000000000000r.js-2.3.6/build/tests/expected/unoExcludeShallow.js000066400000000000000000000004671334071220400224460ustar00rootroot00000000000000 define("tres", [],function() { return { name: "tres" }; } ); define("uno", ["dos", "tres"], function(dos, tres) { return { name: "uno", doSomething: function() { return { dosName: dos.name, tresName: tres.name }; } }; } ); r.js-2.3.6/build/tests/exports.build.js000066400000000000000000000004051334071220400177720ustar00rootroot00000000000000//A simple build file using the tests directory for requirejs { baseUrl: "../../../requirejs/tests/exports", inlineText: false, dir: "builds/exports", optimize: "none", modules: [ { name: "simpleReturn" } ] } r.js-2.3.6/build/tests/hasTestModule.build.js000066400000000000000000000002641334071220400210520ustar00rootroot00000000000000({ baseUrl: "./", optimize: "none", name: "hasTestModule", out: "builds/hasTestModule.js", has: { aTrueValue: true, aFalseValue: false } }) r.js-2.3.6/build/tests/hasTestModule.js000066400000000000000000000012221334071220400177470ustar00rootroot00000000000000/** * Just a test module that tests has replacements. Not usable on its own. */ define(function (require) { var foo, bar, baz, blurp, bat, blip; if (has("aTrueValue")) { foo = "is true"; } else { foo = "is false"; } if (has("aFalseValue")) { bar = "is true"; } else { bar = "is false"; } if (has("some skipped value")) { baz = "what"; } else { baz = "ever"; } blurp = has("aTrueValue") ? "OK" : "FAIL"; bat = has ('aFalseValue') ? "FAIL" : "OK"; blip = has("some skipped value") ? "what" : "ever"; return foo + bar + baz + blurp + bat + blip; }); r.js-2.3.6/build/tests/http/000077500000000000000000000000001334071220400156125ustar00rootroot00000000000000r.js-2.3.6/build/tests/http/httpBuild.js000066400000000000000000000044221334071220400201110ustar00rootroot00000000000000/*jslint strict: false*/ /*global require: false, console: false */ //If you install requirejs via npm, replace this line with require('requirejs') var requirejs = require('../../../r.js'), http = require('http'), fs = require('fs'), host = '127.0.0.1', port = 4304, config; //Set up the config passed to the optimizer config = { baseUrl: 'scripts', paths: { //Put path to require.js in here, leaving off .js //since it is a module ID path mapping. For final deployment, //if a smaller AMD loader is desired, no dynamic //loading needs to be done, and loader plugins are not //in use, change this path to that file. One possibility //could be the one at: //https://github.com/ajaxorg/ace/blob/master/build_support/mini_require.js requireLib: '../../../../require' }, //Uncomment this line if uglify minification is not wanted. //optimize: 'none', //Specify the optimization target. Choose the requireLib, //so that it is first in the output, then include the main.js //for this project. name: 'requireLib', include: ['main'], //Uncomment this if you want to debug three.js by itself //excludeShallow: ['three'], out: 'scripts/main-built.js' }; function respond(res, code, contents) { res.writeHead(code, { 'Content-Type': (code === 200 ? 'application/javascript;charset=UTF-8' : 'text/plain'), 'Content-Length': contents.length }); res.write(contents, 'utf8'); res.end(); } http.createServer(function (req, res) { req.on('close', function (err) { res.end(); }); req.on('end', function () { //Does not matter what the request is, //the answer is always OPTIMIZED JS! requirejs.optimize(config, function (buildResponse) { //buildResponse is just a text output of the modules //included. Load the built file for the contents. var contents = fs.readFileSync(config.out, 'utf8'); respond(res, 200, contents); }, function (e) { //As of r.js 2.1.2, errors are returned via an errback respond(res, 500, e.toString()); }); }); }).listen(port, host); console.log('Server running at http://' + host + ':' + port + '/'); r.js-2.3.6/build/tests/http/main.html000066400000000000000000000017321334071220400174270ustar00rootroot00000000000000

One script via RequireJS optimizer

Be sure to start up the server: node httpBuild.js

Demonstrates how to use the RequireJS optimizer to only load one script in the page using Node as the server to serve the optimized script. Using the "excludeShallow" build config option inside httpBuild.js allows debugging one script separate from the rest of the optimized file.

See httpBuild.js in the same directory as this file for more information.


r.js-2.3.6/build/tests/http/scripts/000077500000000000000000000000001334071220400173015ustar00rootroot00000000000000r.js-2.3.6/build/tests/http/scripts/main.js000066400000000000000000000007561334071220400205730ustar00rootroot00000000000000 //Set the baseUrl for scripts, for use //if individually debuggin files via //excludeShallow in httpBuild.js require.config({ baseUrl: 'scripts' }); require(['one', 'two'], function (one, two) { var html = "Success! One's name is: " + one.name + ", two's name is: " + two.name + ", three's name is: " + two.threeName, node = document.createElement('div'); node.innerHTML = html; document.getElementsByTagName('body')[0].appendChild(node); }); r.js-2.3.6/build/tests/http/scripts/one.js000066400000000000000000000000351334071220400204160ustar00rootroot00000000000000define({ name: 'one' }); r.js-2.3.6/build/tests/http/scripts/three.js000066400000000000000000000001031334071220400207400ustar00rootroot00000000000000define(function () { return { name: 'three' }; }); r.js-2.3.6/build/tests/http/scripts/two.js000066400000000000000000000002111334071220400204420ustar00rootroot00000000000000define(function (require) { var three = require('three'); return { name: 'two', threeName: three.name }; }); r.js-2.3.6/build/tests/i18n.build.js000066400000000000000000000005411334071220400170460ustar00rootroot00000000000000//A simple build file using the tests directory for requirejs { appDir: "../../../requirejs", baseUrl: "tests/i18n", inlineText: false, dir: "builds/i18n", locale: "en-us-surfer", optimize: "none", paths: { "i18n": "../../../i18n/i18n" }, modules: [ { name: "testModule" } ] } r.js-2.3.6/build/tests/indexBuilder.build.js000066400000000000000000000003361334071220400207070ustar00rootroot00000000000000//A simple build file using the tests directory for requirejs ({ baseUrl: "../../../requirejs/tests/plugins/", optimize: "none", name: "earth", include: ["prime/earth"], out: "builds/indexPlugin.js" }) r.js-2.3.6/build/tests/lib/000077500000000000000000000000001334071220400154015ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/allowSourceOverwrites/000077500000000000000000000000001334071220400217725ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/allowSourceOverwrites/build.js000066400000000000000000000003021334071220400234220ustar00rootroot00000000000000{ appDir: 'output/generated', baseUrl: '.', optimize: 'none', dir: 'output', keepBuildDir: true, allowSourceOverwrites: true, modules: [{ name: 'main' }] } r.js-2.3.6/build/tests/lib/allowSourceOverwrites/expected.js000066400000000000000000000002051334071220400241260ustar00rootroot00000000000000define('c',{ name: 'c' }); define('b',['c'], function (c) { }); require(['b'], function(){}); define("main", function(){}); r.js-2.3.6/build/tests/lib/allowSourceOverwrites/output-bak/000077500000000000000000000000001334071220400240655ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/allowSourceOverwrites/output-bak/generated/000077500000000000000000000000001334071220400260235ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/allowSourceOverwrites/output-bak/generated/b.js000066400000000000000000000000421334071220400265760ustar00rootroot00000000000000define(['c'], function (c) { }); r.js-2.3.6/build/tests/lib/allowSourceOverwrites/output-bak/generated/c.js000066400000000000000000000000321334071220400265760ustar00rootroot00000000000000define({ name: 'c' }); r.js-2.3.6/build/tests/lib/allowSourceOverwrites/output-bak/generated/main.js000066400000000000000000000000371334071220400273050ustar00rootroot00000000000000require(['b'], function(){}); r.js-2.3.6/build/tests/lib/allowSourceOverwrites/output/000077500000000000000000000000001334071220400233325ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/allowSourceOverwrites/output/b.js000066400000000000000000000000421334071220400241050ustar00rootroot00000000000000define(['c'], function (c) { }); r.js-2.3.6/build/tests/lib/allowSourceOverwrites/output/build.txt000066400000000000000000000000541334071220400251710ustar00rootroot00000000000000 main.js ---------------- c.js b.js main.js r.js-2.3.6/build/tests/lib/allowSourceOverwrites/output/c.js000066400000000000000000000000321334071220400241050ustar00rootroot00000000000000define({ name: 'c' }); r.js-2.3.6/build/tests/lib/allowSourceOverwrites/output/generated/000077500000000000000000000000001334071220400252705ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/allowSourceOverwrites/output/generated/b.js000066400000000000000000000000421334071220400260430ustar00rootroot00000000000000define(['c'], function (c) { }); r.js-2.3.6/build/tests/lib/allowSourceOverwrites/output/generated/c.js000066400000000000000000000000321334071220400260430ustar00rootroot00000000000000define({ name: 'c' }); r.js-2.3.6/build/tests/lib/allowSourceOverwrites/output/generated/main.js000066400000000000000000000000371334071220400265520ustar00rootroot00000000000000require(['b'], function(){}); r.js-2.3.6/build/tests/lib/allowSourceOverwrites/output/main.js000066400000000000000000000002051334071220400246110ustar00rootroot00000000000000define('c',{ name: 'c' }); define('b',['c'], function (c) { }); require(['b'], function(){}); define("main", function(){}); r.js-2.3.6/build/tests/lib/amdefine/000077500000000000000000000000001334071220400171515ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/amdefine/a.js000066400000000000000000000005111334071220400177240ustar00rootroot00000000000000if(typeof define !== 'function'){ var define = (require('amdefine'))(module); } define(function (require) { var b = require('./b'), c = require('./c'); console.log('got b name: ' + b.name); console.log('got c name: ' + c.name); console.log('and I am a'); return { name: 'a' }; }); r.js-2.3.6/build/tests/lib/amdefine/b.js000066400000000000000000000003061334071220400177270ustar00rootroot00000000000000if (typeof define !== 'function') { var define = (require('amdefine'))(module); } define(['./d'], function (d) { console.log('got d name: ' + d.name); return { name: 'b' }; }); r.js-2.3.6/build/tests/lib/amdefine/build.js000066400000000000000000000001201334071220400205770ustar00rootroot00000000000000({ baseUrl: '.', optimize: 'none', name: 'a', out: 'built.js' })r.js-2.3.6/build/tests/lib/amdefine/c.js000066400000000000000000000002221334071220400177250ustar00rootroot00000000000000if ( typeof define !== 'function' ) { var define = ( require( './node_modules/amdefine/amdefine' ) )( module ); } define({ name: 'c' }); r.js-2.3.6/build/tests/lib/amdefine/d.js000066400000000000000000000002161334071220400177310ustar00rootroot00000000000000if (typeof define !== 'function') { var define = (require('../amdefine/node_modules/amdefine/amdefine'))(module); } define({ name: 'd' })r.js-2.3.6/build/tests/lib/amdefine/expected.js000066400000000000000000000007201334071220400213070ustar00rootroot00000000000000 define('d',{ name: 'd' }); define('b',['./d'], function (d) { console.log('got d name: ' + d.name); return { name: 'b' }; }); define('c',{ name: 'c' }); define('a',['require','./b','./c'],function (require) { var b = require('./b'), c = require('./c'); console.log('got b name: ' + b.name); console.log('got c name: ' + c.name); console.log('and I am a'); return { name: 'a' }; }); r.js-2.3.6/build/tests/lib/amdefine/node_modules/000077500000000000000000000000001334071220400216265ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/amdefine/node_modules/amdefine/000077500000000000000000000000001334071220400233765ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/amdefine/node_modules/amdefine/.npmignore000066400000000000000000000000211334071220400253660ustar00rootroot00000000000000README.md tests/ r.js-2.3.6/build/tests/lib/amdefine/node_modules/amdefine/LICENSE000066400000000000000000000054051334071220400244070ustar00rootroot00000000000000amdefine is released under two licenses: new BSD, and MIT. You may pick the license that best suits your development needs. The text of both licenses are provided below. The "New" BSD License: ---------------------- Copyright (c) 2011, The Dojo Foundation All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the Dojo Foundation nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. MIT License ----------- Copyright (c) 2011, The Dojo Foundation Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. r.js-2.3.6/build/tests/lib/amdefine/node_modules/amdefine/amdefine.js000066400000000000000000000126741334071220400255160ustar00rootroot00000000000000/** vim: et:ts=4:sw=4:sts=4 * @license amdefine 0.0.1 Copyright (c) 2011, The Dojo Foundation All Rights Reserved. * Available via the MIT or new BSD license. * see: http://github.com/jrburke/amdefine for details */ /*jslint strict: false, nomen: false, plusplus: false */ /*global module, process, require: true */ var path = require('path'), loaderCache = {}, makeRequire; // Null out require for this file so that it is not accidentally used // below, where module.require should be used instead. require = null; /** * Given a relative module name, like ./something, normalize it to * a real name that can be mapped to a path. * @param {String} name the relative name * @param {String} baseName a real name that the name arg is relative * to. * @returns {String} normalized name */ function normalize(name, baseName) { return path.normalize(path.join(baseName, name)); } /** * Create the normalize() function passed to a loader plugin's * normalize method. */ function makeNormalize(relName) { return function (name) { return normalize(name, relName); }; } function makeLoad(id) { function load(value) { loaderCache[id] = value; } load.fromText = function (id, text) { //This one is difficult because the text can/probably uses //define, and any relative paths and requires should be relative //to that id was it would be found on disk. But this would require //bootstrapping a module/require fairly deeply from node core. //Not sure how best to go about that yet. throw new Error('amdefine does not implement load.fromText'); }; return load; } function stringRequire(module, id) { //Split the ID by a ! so that var index = id.indexOf('!'), relId = path.dirname(module.filename), prefix, plugin; if (index === -1) { //Straight module lookup. If it is one of the special dependencies, //deal with it, otherwise, delegate to node. if (id === 'require') { return makeRequire(module); } else if (id === 'exports') { return module.exports; } else if (id === 'module') { return module; } else { return module.require(id); } } else { //There is a plugin in play. prefix = id.substring(0, index); id = id.substring(index + 1, id.length); plugin = module.require(prefix); if (plugin.normalize) { id = plugin.normalize(id, makeNormalize(relId)); } else { //Normalize the ID normally. id = normalize(id, relId); } if (loaderCache[id]) { return loaderCache[id]; } else { plugin.load(id, makeRequire(module), makeLoad(id), {}); return loaderCache[id]; } } } makeRequire = function (module) { function amdRequire(deps, callback) { if (typeof deps === 'string') { //Synchronous, single module require('') return stringRequire(module, deps); } else { //Array of dependencies with a callback. //Convert the dependencies to modules. deps = deps.map(function (depName) { return stringRequire(module, depName); }); //Wait for next tick to call back the require call. process.nextTick(function () { callback.apply(null, deps); }); //Keeps strict checking in komodo happy. return undefined; } } amdRequire.toUrl = function (filePath) { if (filePath.indexOf('.') === 0) { return normalize(filePath, path.dirname(module.filename)); } else { return filePath; } }; return amdRequire; }; function amdefine(module) { var alreadyCalled = false; //Create a define function specific to the module asking for amdefine. function define() { var args = arguments, factory = args[args.length - 1], isFactoryFunction = (typeof factory === 'function'), deps, result; //Only support one define call per file if (alreadyCalled) { throw new Error('amdefine cannot be called more than once per file.'); } alreadyCalled = true; //Grab array of dependencies if it is there. if (args.length > 1) { deps = args[args.length - 2]; if (!Array.isArray(deps)) { //deps is not an array, may be an ID. Discard it. deps = null; } } //If there are dependencies, they are strings, so need //to convert them to dependency values. if (deps) { deps = deps.map(function (depName) { return stringRequire(module, depName); }); } else if (isFactoryFunction) { //Pass in the standard require, exports, module deps = [makeRequire(module), module.exports, module]; } if (!isFactoryFunction) { //Factory is an object that should just be used for the define call. module.exports = factory; } else { //Call the factory with the right dependencies. result = factory.apply(module.exports, deps); if (result !== undefined) { module.exports = result; } } } define.amd = {}; return define; } module.exports = amdefine;r.js-2.3.6/build/tests/lib/amdefine/node_modules/amdefine/package.json000066400000000000000000000011631334071220400256650ustar00rootroot00000000000000{ "name": "amdefine", "description": "Provide AMD's define() API for declaring modules in the AMD format", "version": "0.0.1", "homepage": "http://github.com/jrburke/amdefine.js", "author": "James Burke (http://github.com/jrburke)", "licenses": [ { "type": "BSD", "url": "https://github.com/jrburke/amdefine/blob/master/LICENSE" }, { "type": "MIT", "url": "https://github.com/jrburke/amdefine/blob/master/LICENSE" } ], "main": "./amdefine.js", "engines": { "node": ">=0.6.0" } } r.js-2.3.6/build/tests/lib/anonUmdInteriorModules/000077500000000000000000000000001334071220400220475ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/anonUmdInteriorModules/bam.js000066400000000000000000000011701334071220400231430ustar00rootroot00000000000000(function (root, factory) { if (typeof define === 'function' && define.amd) { define(factory); } else { root.Bam = factory(); } }(this, function () { //Pretend almond and other stuff in here //The build parsing should not dive into here define('cs',{load: function(id){throw new Error("Dynamic load not allowed: " + id);}}); if ( typeof define === "function" && define.amd && define.amd.jQuery ) { define( "jquery", [], function () { return jQuery; } ); } define('cs!src/view',['backbone', 'jquery', 'underscore'], function(Backbone, $, _) {}); return require('cs!src/main'); })); r.js-2.3.6/build/tests/lib/anonUmdInteriorModules/build.js000066400000000000000000000001271334071220400235040ustar00rootroot00000000000000{ baseUrl: '.', name: 'main', out: 'main-built.js', optimize: 'none' } r.js-2.3.6/build/tests/lib/anonUmdInteriorModules/expected.js000066400000000000000000000012551334071220400242110ustar00rootroot00000000000000 (function (root, factory) { if (typeof define === 'function' && define.amd) { define('bam',factory); } else { root.Bam = factory(); } }(this, function () { //Pretend almond and other stuff in here //The build parsing should not dive into here define('cs',{load: function(id){throw new Error("Dynamic load not allowed: " + id);}}); if ( typeof define === "function" && define.amd && define.amd.jQuery ) { define( "jquery", [], function () { return jQuery; } ); } define('cs!src/view',['backbone', 'jquery', 'underscore'], function(Backbone, $, _) {}); return require('cs!src/main'); })); define('main',['bam'], function (bam) { }); r.js-2.3.6/build/tests/lib/anonUmdInteriorModules/main.js000066400000000000000000000000461334071220400233310ustar00rootroot00000000000000define(['bam'], function (bam) { }); r.js-2.3.6/build/tests/lib/appDirSrcOverwrite/000077500000000000000000000000001334071220400211775ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/appDirSrcOverwrite/build.js000066400000000000000000000002231334071220400226310ustar00rootroot00000000000000{ appDir: 'www', baseUrl: 'js/lib', paths: { app: '../app' }, name: 'app', dir: 'www-built', optimize: 'none' }r.js-2.3.6/build/tests/lib/appDirSrcOverwrite/expected-app.js000066400000000000000000000001731334071220400241150ustar00rootroot00000000000000 define('somelib',{ name: 'somelib' }); require(['somelib'], function (somelib) { }); define("app", function(){}); r.js-2.3.6/build/tests/lib/appDirSrcOverwrite/src-app.js000066400000000000000000000000601334071220400230760ustar00rootroot00000000000000 require(['somelib'], function (somelib) { }); r.js-2.3.6/build/tests/lib/appDirSrcOverwrite/www/000077500000000000000000000000001334071220400220235ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/appDirSrcOverwrite/www/js/000077500000000000000000000000001334071220400224375ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/appDirSrcOverwrite/www/js/app.js000066400000000000000000000000601334071220400235510ustar00rootroot00000000000000 require(['somelib'], function (somelib) { }); r.js-2.3.6/build/tests/lib/appDirSrcOverwrite/www/js/lib/000077500000000000000000000000001334071220400232055ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/appDirSrcOverwrite/www/js/lib/somelib.js000066400000000000000000000000411334071220400251700ustar00rootroot00000000000000define({ name: 'somelib' }); r.js-2.3.6/build/tests/lib/arrow/000077500000000000000000000000001334071220400165335ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/arrow/a.js000066400000000000000000000001461334071220400173120ustar00rootroot00000000000000/*jshint esnext: true */ define((require) => { return { name: 'a', b: require('b') }; }); r.js-2.3.6/build/tests/lib/arrow/b.js000066400000000000000000000002261334071220400173120ustar00rootroot00000000000000/*jshint esnext: true */ define((require, exports, module) => { module.exports = { name: 'b', uri: module.uri, c: require('c') }; }); r.js-2.3.6/build/tests/lib/arrow/build.js000066400000000000000000000001311334071220400201630ustar00rootroot00000000000000({ baseUrl: '.', optimize: 'none', name: 'main', out: 'main-built.js' }) r.js-2.3.6/build/tests/lib/arrow/c.js000066400000000000000000000001121334071220400173050ustar00rootroot00000000000000/*jshint esnext: true */ define(() => { return { name: 'c' }; }); r.js-2.3.6/build/tests/lib/arrow/expected.js000066400000000000000000000007311334071220400206730ustar00rootroot00000000000000/*jshint esnext: true */ define('c',[],() => { return { name: 'c' }; }); /*jshint esnext: true */ define('b',['require','exports','module','c'],(require, exports, module) => { module.exports = { name: 'b', uri: module.uri, c: require('c') }; }); /*jshint esnext: true */ define('a',['require','b'],(require) => { return { name: 'a', b: require('b') }; }); require(['a'], (a) => { console.log(a); }); define("main", function(){}); r.js-2.3.6/build/tests/lib/arrow/main.js000066400000000000000000000000561334071220400200160ustar00rootroot00000000000000require(['a'], (a) => { console.log(a); }); r.js-2.3.6/build/tests/lib/arrow/test-built.html000066400000000000000000000002451334071220400215160ustar00rootroot00000000000000 Check web console. r.js-2.3.6/build/tests/lib/arrow/test.html000066400000000000000000000002371334071220400204020ustar00rootroot00000000000000 Check web console. r.js-2.3.6/build/tests/lib/bundlesConfig/000077500000000000000000000000001334071220400201635ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/bundlesConfig/Promise.js000066400000000000000000000770311334071220400221470ustar00rootroot00000000000000!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= 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() {} }); }(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' && Object.prototype.toString.call(process) === '[object process]'; } 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; } } }); }(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> * @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 Check web console. r.js-2.3.6/build/tests/lib/bundlesConfig/test.html000066400000000000000000000002371334071220400220320ustar00rootroot00000000000000 Check web console. r.js-2.3.6/build/tests/lib/cjsTranslate/000077500000000000000000000000001334071220400200365ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/cjsTranslate/expected.js000066400000000000000000000027341334071220400222030ustar00rootroot00000000000000 define('template',['require','exports','module'],function (require, exports, module) { module.exports = { compile: function () { return 'template.compile() works'; } }; }); define('model',['require','exports','module'],function (require, exports, module) { module.exports = { create: function () { return 'module.create() works'; } }; }); define('controller',['require','exports','module','./model'],function (require, exports, module) { var model = require('./model'); module.exports = { control: function () { return 'controller is ready'; }, model: model } }); define('util/helper',[],function () { return function () { return 'helper is ready'; }; }); define('jquery',[],function () { return function () {}; }); define('view',['require','exports','module','./model','./util/helper','jquery'],function (require, exports, module) { var model = require('./model'), helper = require('./util/helper'), $ = require('jquery'); module.exports = { render: function () { return 'view.render() works'; }, model: model, helper: helper, $: $ }; }); define('lib',['require','exports','module','./template','./model','./controller','./view'],function (require, exports, module) { //Define the lib by aggregating its parts. module.exports = { template: require('./template'), model: require('./model'), controller: require('./controller'), view: require('./view') }; }); r.js-2.3.6/build/tests/lib/cjsTranslate/www/000077500000000000000000000000001334071220400206625ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/cjsTranslate/www/app.build.js000066400000000000000000000005511334071220400230770ustar00rootroot00000000000000({ appDir: '.', baseUrl: 'js', dir: '../www-built', name: 'lib', //Comment this line out to get //minified content. optimize: 'none', //Instruct the r.js optimizer to //convert commonjs-looking code //to AMD style, which is needed for //the optimizer to properly trace //dependencies. cjsTranslate: true }) r.js-2.3.6/build/tests/lib/cjsTranslate/www/index.html000066400000000000000000000031461334071220400226630ustar00rootroot00000000000000

Hello World

Expected output:

  • lib.controller: controller is ready
  • lib.model: module.create() works
  • lib.template: template.compile() works
  • lib.view: view.render() works
  • lib.view.$ version: 1.7.1
  • lib.view.helper(): helper is ready

Actual output:

r.js-2.3.6/build/tests/lib/cjsTranslate/www/js/000077500000000000000000000000001334071220400212765ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/cjsTranslate/www/js/controller.js000066400000000000000000000002171334071220400240170ustar00rootroot00000000000000var model = require('./model'); module.exports = { control: function () { return 'controller is ready'; }, model: model } r.js-2.3.6/build/tests/lib/cjsTranslate/www/js/jquery.js000066400000000000000000000000641334071220400231530ustar00rootroot00000000000000define(function () { return function () {}; }); r.js-2.3.6/build/tests/lib/cjsTranslate/www/js/lib.js000066400000000000000000000003131334071220400223770ustar00rootroot00000000000000//Define the lib by aggregating its parts. module.exports = { template: require('./template'), model: require('./model'), controller: require('./controller'), view: require('./view') }; r.js-2.3.6/build/tests/lib/cjsTranslate/www/js/model.js000066400000000000000000000001371334071220400227350ustar00rootroot00000000000000 module.exports = { create: function () { return 'module.create() works'; } }; r.js-2.3.6/build/tests/lib/cjsTranslate/www/js/template.js000066400000000000000000000001431334071220400234450ustar00rootroot00000000000000 module.exports = { compile: function () { return 'template.compile() works'; } }; r.js-2.3.6/build/tests/lib/cjsTranslate/www/js/util/000077500000000000000000000000001334071220400222535ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/cjsTranslate/www/js/util/helper.js000066400000000000000000000001331334071220400240650ustar00rootroot00000000000000define(function () { return function () { return 'helper is ready'; }; }); r.js-2.3.6/build/tests/lib/cjsTranslate/www/js/view.js000066400000000000000000000003571334071220400226130ustar00rootroot00000000000000var model = require('./model'), helper = require('./util/helper'), $ = require('jquery'); module.exports = { render: function () { return 'view.render() works'; }, model: model, helper: helper, $: $ }; r.js-2.3.6/build/tests/lib/closureExterns/000077500000000000000000000000001334071220400204265ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/closureExterns/bar.js000066400000000000000000000007511334071220400215330ustar00rootroot00000000000000(function (root, factory) { if (typeof define === 'function' && define.amd) { define([], factory()); } else if (typeof module === 'object' && module.exports) { module.exports = factory(); } else { root.bar = factory(); } }(this, function () { /** * The bar module. * @module bar */ var exports = { /** * The bar value. * @type {number} */ barValue: 42 }; return exports; }));r.js-2.3.6/build/tests/lib/closureExterns/build.js000066400000000000000000000005261334071220400220660ustar00rootroot00000000000000({ baseUrl: '.', optimize: 'closure', name: 'main', out: './built/built.js', closure: { CompilerOptions: { languageIn: com.google.javascript.jscomp.CompilerOptions.LanguageMode.ECMASCRIPT5 }, CompilationLevel: 'ADVANCED_OPTIMIZATIONS', externExportsPath: './externs.js' } })r.js-2.3.6/build/tests/lib/closureExterns/externs.js000066400000000000000000000001231334071220400224500ustar00rootroot00000000000000var define = function () {}; define.amd = {}; var module = {}; module.exports = {};r.js-2.3.6/build/tests/lib/closureExterns/foo.js000066400000000000000000000007641334071220400215560ustar00rootroot00000000000000(function (root, factory) { if (typeof define === 'function' && define.amd) { define([], factory()); } else if (typeof module === 'object' && module.exports) { module.exports = factory(); } else { root.foo = factory(); } }(this, function () { /** * The foo module. * @module foo */ var exports = { /** * The foo value. * @type {string} */ fooValue: "A foo value" }; return exports; }));r.js-2.3.6/build/tests/lib/closureExterns/main.js000066400000000000000000000012521334071220400217100ustar00rootroot00000000000000(function (root, factory) { if (typeof define === 'function' && define.amd) { define(['./foo', './bar'], factory); } else if (typeof module === 'object' && module.exports) { module.exports = factory(require('./foo'), require('./bar')); } else { root.main = factory(root.foo, root.bar); } }(this, function (foo, bar) { /** * The main module. * @module main */ var exports = { /** * Our foo value. * @type {string} */ mainFoo: foo.fooValue, /** * Our bar value. * @type {number} */ mainBar: bar.barValue }; return exports; }));r.js-2.3.6/build/tests/lib/comments/000077500000000000000000000000001334071220400172265ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/comments/bang.js000066400000000000000000000002261334071220400204730ustar00rootroot00000000000000/*! * this is a BANG LICENSE COMMENT */ define(function () { /* This comment should be IGNORED */ return { name: 'bang' }; }); r.js-2.3.6/build/tests/lib/comments/build.js000066400000000000000000000001271334071220400206630ustar00rootroot00000000000000({ baseUrl: '.', name: 'bang', include: ['license'], out: 'built.js' })r.js-2.3.6/build/tests/lib/comments/expected.js000066400000000000000000000005361334071220400213710ustar00rootroot00000000000000/*! * this is a BANG LICENSE COMMENT */ /** vim: et:ts=4:sw=4:sts=4 * @license This is a LICENSE COMMENT that should be preserved. * Available via the MIT or new BSD license. * see: http://example.com/license for details */ //@license comment to be found define("bang",[],function(){return{name:"bang"}}),define("license",{name:"license"});r.js-2.3.6/build/tests/lib/comments/license.js000066400000000000000000000004011334071220400212010ustar00rootroot00000000000000/** vim: et:ts=4:sw=4:sts=4 * @license This is a LICENSE COMMENT that should be preserved. * Available via the MIT or new BSD license. * see: http://example.com/license for details */ define({ //@license comment to be found name: 'license' });r.js-2.3.6/build/tests/lib/comments/noPartialDupe/000077500000000000000000000000001334071220400217755ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/comments/noPartialDupe/build.js000066400000000000000000000001401334071220400234250ustar00rootroot00000000000000({ appDir: './src', dir: './built', baseUrl: './', name: 'foo', keepBuildDir: true }) r.js-2.3.6/build/tests/lib/comments/noPartialDupe/expected.js000066400000000000000000000005771334071220400241450ustar00rootroot00000000000000// Underscore.js 1.3.3 // (c) 2009-2012 Jeremy Ashkenas, DocumentCloud Inc. // Underscore is freely distributable under the MIT license. // Portions of Underscore are inspired or borrowed from Prototype, // Oliver Steele's Functional, and John Resig's Micro-Templating. // For all details and documentation: // http://documentcloud.github.com/underscore r.js-2.3.6/build/tests/lib/comments/noPartialDupe/src/000077500000000000000000000000001334071220400225645ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/comments/noPartialDupe/src/foo.js000066400000000000000000000000001334071220400236730ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/comments/noPartialDupe/src/underscore.js000066400000000000000000000006221334071220400252730ustar00rootroot00000000000000// Underscore.js 1.3.3 // (c) 2009-2012 Jeremy Ashkenas, DocumentCloud Inc. // Underscore is freely distributable under the MIT license. // Portions of Underscore are inspired or borrowed from Prototype, // Oliver Steele's Functional, and John Resig's Micro-Templating. // For all details and documentation: // http://documentcloud.github.com/underscore (function() {}()); r.js-2.3.6/build/tests/lib/comments/unique/000077500000000000000000000000001334071220400205345ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/comments/unique/build.js000066400000000000000000000000761334071220400221740ustar00rootroot00000000000000({ baseUrl: '.', name: 'main', out: 'built.js' }) r.js-2.3.6/build/tests/lib/comments/unique/expected.js000066400000000000000000000007201334071220400226720ustar00rootroot00000000000000/** * Copyright 2012 Something something. * blah blah blahs dfsjsdfkl sdfjklsdf sdjfkl;sdf * sdf jskfdl sdfls;fsd fa;dsf * sdf jsdlkf sdjflsd fks * fd sfjksdlf sdl;fk sdf * asdfsd fsjkdl;f sdflks * sdf sdf */ /** * Copyright 2013 Something something. * blah blah blahs dfsjsdfkl sdfjklsdf sdjfkl;sdf * sdf jskfdl sdfls;fsd fa;dsf * sdf jsdlkf sdjflsd fks * fd sfjksdlf sdl;fk sdf * asdfsd fsjkdl;f sdflks * sdf sdf */ define("main",function(){});r.js-2.3.6/build/tests/lib/comments/unique/main.js000066400000000000000000000012151334071220400220150ustar00rootroot00000000000000/** * Copyright 2012 Something something. * blah blah blahs dfsjsdfkl sdfjklsdf sdjfkl;sdf * sdf jskfdl sdfls;fsd fa;dsf * sdf jsdlkf sdjflsd fks * fd sfjksdlf sdl;fk sdf * asdfsd fsjkdl;f sdflks * sdf sdf */ /** * Copyright 2013 Something something. * blah blah blahs dfsjsdfkl sdfjklsdf sdjfkl;sdf * sdf jskfdl sdfls;fsd fa;dsf * sdf jsdlkf sdjflsd fks * fd sfjksdlf sdl;fk sdf * asdfsd fsjkdl;f sdflks * sdf sdf */ /** * Copyright 2012 Something something. * blah blah blahs dfsjsdfkl sdfjklsdf sdjfkl;sdf * sdf jskfdl sdfls;fsd fa;dsf * sdf jsdlkf sdjflsd fks * fd sfjksdlf sdl;fk sdf * asdfsd fsjkdl;f sdflks * sdf sdf */ r.js-2.3.6/build/tests/lib/configPackageShim/000077500000000000000000000000001334071220400207435ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/configPackageShim/bar/000077500000000000000000000000001334071220400215075ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/configPackageShim/bar/bar.js000066400000000000000000000002361334071220400226120ustar00rootroot00000000000000define('bar', ['foo'], function (foo) { return { bar: function () { console.log('barrrr'); foo.foo(); } } }); r.js-2.3.6/build/tests/lib/configPackageShim/build.js000066400000000000000000000007731334071220400224070ustar00rootroot00000000000000({ appDir: '.', baseUrl: '.', dir: 'built', optimize: 'none', modules: [{ name: 'main' }], packages: [ { 'name': 'foo', 'location': 'foo', 'main': 'foo.js' }, { 'name': 'bar', 'location': 'bar', 'main': 'bar.js' } ], shim: { 'foo': { 'exports': 'Foo' }, 'bar': { 'deps': ['foo'] } } }) r.js-2.3.6/build/tests/lib/configPackageShim/expected.js000066400000000000000000000017371334071220400231120ustar00rootroot00000000000000 var Foo = { foo: function () { console.log('foooo'); } } ; define('foo', ['foo/foo'], function (main) { return main; }); define("foo/foo", (function (global) { return function () { var ret, fn; return ret || global.Foo; }; }(this))); define('bar', ['foo'], function (foo) { return { bar: function () { console.log('barrrr'); foo.foo(); } } }); define("bar/bar", ["foo"], function(){}); require.config({ packages: [ { 'name': 'foo', 'location': 'foo', 'main': 'foo.js' }, { 'name': 'bar', 'location': 'bar', 'main': 'bar.js' } ], shim: { 'foo': { 'exports': 'Foo' }, 'bar': { 'deps': ['foo'] } } }); require( ['bar'], function (bar) { console.log('main'); bar.bar(); }); define("main", function(){}); r.js-2.3.6/build/tests/lib/configPackageShim/foo/000077500000000000000000000000001334071220400215265ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/configPackageShim/foo/foo.js000066400000000000000000000001111334071220400226400ustar00rootroot00000000000000var Foo = { foo: function () { console.log('foooo'); } } r.js-2.3.6/build/tests/lib/configPackageShim/main.js000066400000000000000000000007411334071220400222270ustar00rootroot00000000000000require.config({ packages: [ { 'name': 'foo', 'location': 'foo', 'main': 'foo.js' }, { 'name': 'bar', 'location': 'bar', 'main': 'bar.js' } ], shim: { 'foo': { 'exports': 'Foo' }, 'bar': { 'deps': ['foo'] } } }); require( ['bar'], function (bar) { console.log('main'); bar.bar(); }); r.js-2.3.6/build/tests/lib/cssComment138/000077500000000000000000000000001334071220400177505ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/cssComment138/a.css000066400000000000000000000000741334071220400207030ustar00rootroot00000000000000/* @import url("bad.css"); @import url("bad2.css"); */ a {} r.js-2.3.6/build/tests/lib/cssComment138/b.css000066400000000000000000000001311334071220400206760ustar00rootroot00000000000000/* * the star in this comment is part of the conditions to reproduce the issue */ b {} r.js-2.3.6/build/tests/lib/cssComment138/build.js000066400000000000000000000000651334071220400214060ustar00rootroot00000000000000{ cssIn: 'main.css', out: 'main-built.css' } r.js-2.3.6/build/tests/lib/cssComment138/c.css000066400000000000000000000000051334071220400206770ustar00rootroot00000000000000c {} r.js-2.3.6/build/tests/lib/cssComment138/expected.css000066400000000000000000000000131334071220400222550ustar00rootroot00000000000000 a {} c {} r.js-2.3.6/build/tests/lib/cssComment138/main.css000066400000000000000000000001071334071220400214040ustar00rootroot00000000000000@import url("a.css"); /*@import url("b.css");*/ @import url("c.css"); r.js-2.3.6/build/tests/lib/cssDuplicates/000077500000000000000000000000001334071220400202075ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/cssDuplicates/a.css000066400000000000000000000001011334071220400211310ustar00rootroot00000000000000@import url(c.css); @import url(d.css); .acss { width: 1; } r.js-2.3.6/build/tests/lib/cssDuplicates/b.css000066400000000000000000000000551334071220400211420ustar00rootroot00000000000000@import url(c.css); .bcss { width: 1; } r.js-2.3.6/build/tests/lib/cssDuplicates/build.js000066400000000000000000000000651334071220400216450ustar00rootroot00000000000000{ cssIn: 'main.css', out: 'main-built.css' } r.js-2.3.6/build/tests/lib/cssDuplicates/c.css000066400000000000000000000000311334071220400211350ustar00rootroot00000000000000.ccss { width: 1; } r.js-2.3.6/build/tests/lib/cssDuplicates/d.css000066400000000000000000000000311334071220400211360ustar00rootroot00000000000000.dcss { width: 1; } r.js-2.3.6/build/tests/lib/cssDuplicates/expected.css000066400000000000000000000001401334071220400225150ustar00rootroot00000000000000.ccss { width: 1; } .dcss { width: 1; } .acss { width: 1; } .bcss { width: 1; } r.js-2.3.6/build/tests/lib/cssDuplicates/main.css000066400000000000000000000000511334071220400216410ustar00rootroot00000000000000@import url(a.css); @import url(b.css); r.js-2.3.6/build/tests/lib/cssKeepComments/000077500000000000000000000000001334071220400205045ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/cssKeepComments/a.css000066400000000000000000000000741334071220400214370ustar00rootroot00000000000000/* This is an a.css comment. */ .acss { width: 1px; } r.js-2.3.6/build/tests/lib/cssKeepComments/build.js000066400000000000000000000001511334071220400221360ustar00rootroot00000000000000{ cssIn: 'main.css', out: 'main-built.css', optimizeCss: 'standard.keepLines.keepComments' } r.js-2.3.6/build/tests/lib/cssKeepComments/expected.css000066400000000000000000000001431334071220400230150ustar00rootroot00000000000000/* This is an a.css comment. */.acss{width:1px;}/* This is a main.css comment */.maincss{width:1;} r.js-2.3.6/build/tests/lib/cssKeepComments/main.css000066400000000000000000000001211334071220400221340ustar00rootroot00000000000000@import url(a.css); /* This is a main.css comment */ .maincss { width: 1; } r.js-2.3.6/build/tests/lib/cssKeepLicense/000077500000000000000000000000001334071220400203015ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/cssKeepLicense/a.css000066400000000000000000000001501334071220400212270ustar00rootroot00000000000000/* This is an a.css comment. */ .acss { width: 1px; } /* Copyright 2012 More text and another */ r.js-2.3.6/build/tests/lib/cssKeepLicense/build-nolicense.js000066400000000000000000000001431334071220400237110ustar00rootroot00000000000000{ cssIn: 'main.css', out: 'main-nolicense-built.css', preserveLicenseComments: false } r.js-2.3.6/build/tests/lib/cssKeepLicense/build.js000066400000000000000000000000651334071220400217370ustar00rootroot00000000000000{ cssIn: 'main.css', out: 'main-built.css' } r.js-2.3.6/build/tests/lib/cssKeepLicense/expected-nolicense.css000066400000000000000000000000661334071220400245730ustar00rootroot00000000000000 .acss { width: 1px; } .maincss { width: 1; } r.js-2.3.6/build/tests/lib/cssKeepLicense/expected.css000066400000000000000000000001631334071220400226140ustar00rootroot00000000000000/*! MIT license */ .acss { width: 1px; } /* Copyright 2012 More text and another */ .maincss { width: 1; } r.js-2.3.6/build/tests/lib/cssKeepLicense/main-nolicense-built.css000066400000000000000000000000661334071220400250330ustar00rootroot00000000000000 .acss { width: 1px; } .maincss { width: 1; } r.js-2.3.6/build/tests/lib/cssKeepLicense/main.css000066400000000000000000000001441334071220400217360ustar00rootroot00000000000000/*! MIT license */ @import url(a.css); /* This is a main.css comment */ .maincss { width: 1; } r.js-2.3.6/build/tests/lib/cssKeepWhitespace/000077500000000000000000000000001334071220400210135ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/cssKeepWhitespace/a.css000066400000000000000000000000741334071220400217460ustar00rootroot00000000000000/* This is an a.css comment. */ .acss { width: 1px; } r.js-2.3.6/build/tests/lib/cssKeepWhitespace/build.js000066400000000000000000000001531334071220400224470ustar00rootroot00000000000000{ cssIn: 'main.css', out: 'main-built.css', optimizeCss: 'standard.keepLines.keepWhitespace' } r.js-2.3.6/build/tests/lib/cssKeepWhitespace/expected.css000066400000000000000000000000651334071220400233270ustar00rootroot00000000000000.acss { width: 1px; } .maincss { width: 1; } r.js-2.3.6/build/tests/lib/cssKeepWhitespace/main.css000066400000000000000000000001211334071220400224430ustar00rootroot00000000000000@import url(a.css); /* This is a main.css comment */ .maincss { width: 1; } r.js-2.3.6/build/tests/lib/cssMediaQuery/000077500000000000000000000000001334071220400201575ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/cssMediaQuery/a.css000066400000000000000000000000551334071220400211110ustar00rootroot00000000000000@import url(c.css); .acss { width: 1; } r.js-2.3.6/build/tests/lib/cssMediaQuery/b.css000066400000000000000000000000551334071220400211120ustar00rootroot00000000000000@import url(c.css); .bcss { width: 1; } r.js-2.3.6/build/tests/lib/cssMediaQuery/build.js000066400000000000000000000000651334071220400216150ustar00rootroot00000000000000{ cssIn: 'main.css', out: 'main-built.css' } r.js-2.3.6/build/tests/lib/cssMediaQuery/c.css000066400000000000000000000001141334071220400211070ustar00rootroot00000000000000@import url('d.css') screen and (min-width:768px); .ccss { width: 1; } r.js-2.3.6/build/tests/lib/cssMediaQuery/d.css000066400000000000000000000000311334071220400211060ustar00rootroot00000000000000.dcss { width: 1; } r.js-2.3.6/build/tests/lib/cssMediaQuery/expected.css000066400000000000000000000000511334071220400224660ustar00rootroot00000000000000 @import url(a.css); @import url(b.css); r.js-2.3.6/build/tests/lib/cssMediaQuery/main.css000066400000000000000000000000651334071220400216160ustar00rootroot00000000000000/* A test */ @import url(a.css); @import url(b.css); r.js-2.3.6/build/tests/lib/cssPrefix/000077500000000000000000000000001334071220400173475ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/cssPrefix/356/000077500000000000000000000000001334071220400176645ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/cssPrefix/356/build.js000066400000000000000000000001201334071220400213120ustar00rootroot00000000000000({ appDir: 'www', baseUrl: '.', dir: 'www-built', modules: [] })r.js-2.3.6/build/tests/lib/cssPrefix/356/expected/000077500000000000000000000000001334071220400214655ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/cssPrefix/356/expected/main.css000066400000000000000000000002711334071220400231230ustar00rootroot00000000000000.sub-path { background-image: url(some/path.png); } .sub-path .again { background-image: url(another/path.png); } .working { background-image: url('some/valid/path.jpg'); } r.js-2.3.6/build/tests/lib/cssPrefix/356/expected/sub.css000066400000000000000000000001761334071220400227740ustar00rootroot00000000000000.sub-path { background-image: url("some/path.png"); } .sub-path .again { background-image: url("another/path.png"); } r.js-2.3.6/build/tests/lib/cssPrefix/356/www/000077500000000000000000000000001334071220400205105ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/cssPrefix/356/www/main.css000066400000000000000000000001301334071220400221400ustar00rootroot00000000000000@import url('sub.css'); .working { background-image: url('some/valid/path.jpg'); } r.js-2.3.6/build/tests/lib/cssPrefix/356/www/sub.css000066400000000000000000000001771334071220400220200ustar00rootroot00000000000000.sub-path { background-image: url("some/path.png"); } .sub-path .again { background-image: url("another/path.png"); } r.js-2.3.6/build/tests/lib/cssPrefix/build.js000066400000000000000000000001321334071220400210000ustar00rootroot00000000000000{ cssIn: 'input/main.css', out: 'output/main-built.css', cssPrefix: '/test' } r.js-2.3.6/build/tests/lib/cssPrefix/input/000077500000000000000000000000001334071220400205065ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/cssPrefix/input/main.css000066400000000000000000000001131334071220400221370ustar00rootroot00000000000000@import url(subfolder/sub.css); body { background: url(img/bg.png); } r.js-2.3.6/build/tests/lib/cssPrefix/input/subfolder/000077500000000000000000000000001334071220400224735ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/cssPrefix/input/subfolder/sub.css000066400000000000000000000000511334071220400237720ustar00rootroot00000000000000.test { background: url(test.png); } r.js-2.3.6/build/tests/lib/cssPrefix/output/000077500000000000000000000000001334071220400207075ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/cssPrefix/output/expected.css000066400000000000000000000001511334071220400232170ustar00rootroot00000000000000.test { background: url(/test/subfolder/test.png); } body { background: url(/test/img/bg.png); } r.js-2.3.6/build/tests/lib/cssPrefix/output/main-built.css000066400000000000000000000001511334071220400234570ustar00rootroot00000000000000.test { background: url(/test/subfolder/test.png); } body { background: url(/test/img/bg.png); } r.js-2.3.6/build/tests/lib/cssRelativeUrl/000077500000000000000000000000001334071220400203505ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/cssRelativeUrl/build.js000066400000000000000000000001021334071220400217760ustar00rootroot00000000000000{ cssIn: 'input/main.css', out: 'output/main-built.css' } r.js-2.3.6/build/tests/lib/cssRelativeUrl/input/000077500000000000000000000000001334071220400215075ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/cssRelativeUrl/input/main.css000066400000000000000000000000401334071220400231370ustar00rootroot00000000000000@import url(subfolder/sub.css); r.js-2.3.6/build/tests/lib/cssRelativeUrl/input/subfolder/000077500000000000000000000000001334071220400234745ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/cssRelativeUrl/input/subfolder/sub.css000066400000000000000000000001271334071220400247770ustar00rootroot00000000000000.test { background: url(test.png); } .other { background: url(about:blank); } r.js-2.3.6/build/tests/lib/cssRelativeUrl/output/000077500000000000000000000000001334071220400217105ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/cssRelativeUrl/output/expected.css000066400000000000000000000001401334071220400242160ustar00rootroot00000000000000.test { background: url(subfolder/test.png); } .other { background: url(about:blank); } r.js-2.3.6/build/tests/lib/cssRelativeUrl/output/main-built.css000066400000000000000000000001401334071220400244560ustar00rootroot00000000000000.test { background: url(subfolder/test.png); } .other { background: url(about:blank); } r.js-2.3.6/build/tests/lib/cssRemoveCombined/000077500000000000000000000000001334071220400210105ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/cssRemoveCombined/build.js000066400000000000000000000002331334071220400224430ustar00rootroot00000000000000{ appDir: 'www', baseUrl: 'js', dir: 'www-built', removeCombined: true, modules: [ { name: 'main' } ] }r.js-2.3.6/build/tests/lib/cssRemoveCombined/expected.css000066400000000000000000000000431334071220400233200ustar00rootroot00000000000000.misc {} .one {} .two {} .main { } r.js-2.3.6/build/tests/lib/cssRemoveCombined/www/000077500000000000000000000000001334071220400216345ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/cssRemoveCombined/www/css/000077500000000000000000000000001334071220400224245ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/cssRemoveCombined/www/css/main.css000066400000000000000000000001001334071220400240510ustar00rootroot00000000000000@import url("sub/one.css"); @IMPORT url("two.css"); .main { } r.js-2.3.6/build/tests/lib/cssRemoveCombined/www/css/sub/000077500000000000000000000000001334071220400232155ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/cssRemoveCombined/www/css/sub/misc.css000066400000000000000000000000121334071220400246530ustar00rootroot00000000000000.misc {} r.js-2.3.6/build/tests/lib/cssRemoveCombined/www/css/sub/one.css000066400000000000000000000000421334071220400245040ustar00rootroot00000000000000@import url("misc.css"); .one {} r.js-2.3.6/build/tests/lib/cssRemoveCombined/www/css/two.css000066400000000000000000000000111334071220400237370ustar00rootroot00000000000000.two {} r.js-2.3.6/build/tests/lib/cssRemoveCombined/www/js/000077500000000000000000000000001334071220400222505ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/cssRemoveCombined/www/js/main.js000066400000000000000000000000001334071220400235200ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/depsConfig/000077500000000000000000000000001334071220400174625ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/depsConfig/a.js000066400000000000000000000000331334071220400202340ustar00rootroot00000000000000define({ name: 'a' }); r.js-2.3.6/build/tests/lib/depsConfig/b.js000066400000000000000000000000331334071220400202350ustar00rootroot00000000000000define({ name: 'b' }); r.js-2.3.6/build/tests/lib/depsConfig/build.js000066400000000000000000000001721334071220400211170ustar00rootroot00000000000000{ mainConfigFile: 'main.js', name: 'main', deps: ['a', 'b'], out: 'main-built.js', optimize: 'none' } r.js-2.3.6/build/tests/lib/depsConfig/c.js000066400000000000000000000000331334071220400202360ustar00rootroot00000000000000define({ name: 'c' }); r.js-2.3.6/build/tests/lib/depsConfig/expected.js000066400000000000000000000002431334071220400216200ustar00rootroot00000000000000define('a',{ name: 'a' }); define('b',{ name: 'b' }); define('c',{ name: 'c' }); require(['c'], function (c) { }); define("main", function(){}); r.js-2.3.6/build/tests/lib/depsConfig/main.js000066400000000000000000000000431334071220400207410ustar00rootroot00000000000000require(['c'], function (c) { }); r.js-2.3.6/build/tests/lib/dormant213/000077500000000000000000000000001334071220400172735ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/dormant213/build.js000066400000000000000000000001051334071220400207240ustar00rootroot00000000000000{ name: 'main', out: 'main-built.js', optimize: 'none' } r.js-2.3.6/build/tests/lib/dormant213/expected.js000066400000000000000000000003461334071220400214350ustar00rootroot00000000000000 define('module1', {data: 'aaaa'}); define('module2', {data: 'bbbb'}); define('module3', {data: 'cccc'}); require(['module1', 'module2'], function(m1, m2) { console.log(m1.data + m2.data); }); define("main", function(){}); r.js-2.3.6/build/tests/lib/dormant213/main.js000066400000000000000000000003061334071220400205540ustar00rootroot00000000000000define('module1', {data: 'aaaa'}); define('module2', {data: 'bbbb'}); define('module3', {data: 'cccc'}); require(['module1', 'module2'], function(m1, m2) { console.log(m1.data + m2.data); }); r.js-2.3.6/build/tests/lib/dotTrim/000077500000000000000000000000001334071220400170235ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/dotTrim/build.js000066400000000000000000000002001334071220400204500ustar00rootroot00000000000000{ baseUrl: '../../../../../requirejs/tests/dotTrim', name: 'dotTrim-tests', out: 'built.js', optimize: 'none' } r.js-2.3.6/build/tests/lib/dotTrim/expected.js000066400000000000000000000016441334071220400211670ustar00rootroot00000000000000define('util/helper',{ name: 'helper' }); define('sub/ext',['../util/helper', 'require'], function(helper, require) { var helperPath = require.toUrl('../util/helper'); return { name: 'ext', helperPath: helperPath, helper: helper }; }); define('spell',['./sub/ext'], function(ext) { return { name: 'spell', ext: ext }; }); define('b',{ name: 'b' }); require(["require", "spell", "a/../b"], function(require, spell, b) { doh.register( "dotTrim", [ function dotTrim(t){ t.is('spell', spell.name); t.is('ext', spell.ext.name); t.is('./util/helper', spell.ext.helperPath); t.is('b', b.name); t.is('./b.html', require.toUrl('a/../b.html')); t.is('helper', spell.ext.helper.name); } ] ); doh.run(); }); define("dotTrim-tests", function(){}); r.js-2.3.6/build/tests/lib/dotpackage/000077500000000000000000000000001334071220400175035ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/dotpackage/scripts/000077500000000000000000000000001334071220400211725ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/dotpackage/scripts/.packages/000077500000000000000000000000001334071220400230265ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/dotpackage/scripts/.packages/sample/000077500000000000000000000000001334071220400243075ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/dotpackage/scripts/.packages/sample/main.js000066400000000000000000000000411334071220400255640ustar00rootroot00000000000000define({ name: 'sample' }); r.js-2.3.6/build/tests/lib/dotpackage/scripts/app.build.js000066400000000000000000000004521334071220400234070ustar00rootroot00000000000000({ appDir: '..', baseUrl: 'scripts', dir: '../built', optimize: 'none', dirExclusionRegExp: null, packages: [ { name: 'sample', location: '.packages/sample' } ], modules: [ { name: 'main' } ] })r.js-2.3.6/build/tests/lib/dotpackage/scripts/main-expected.js000066400000000000000000000003641334071220400242560ustar00rootroot00000000000000 define('sample/main',{ name: 'sample' }); define('sample', ['sample/main'], function (main) { return main; }); define('main',['sample'], function (sample) { return { name: 'main', sampleName: sample.name }; }); r.js-2.3.6/build/tests/lib/dotpackage/scripts/main.js000066400000000000000000000001661334071220400224570ustar00rootroot00000000000000define(['sample'], function (sample) { return { name: 'main', sampleName: sample.name }; }); r.js-2.3.6/build/tests/lib/dualLayerOverride/000077500000000000000000000000001334071220400210235ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/dualLayerOverride/build.js000066400000000000000000000003551334071220400224630ustar00rootroot00000000000000({ "optimize": "none", "dir" : "built", "modules" : [ { "name" : "message", "override" : { "paths" : { "who" : "empty:" } } }, { "name" : "who", "override" : { "paths" : { "message" : "empty:" } } } ] }) r.js-2.3.6/build/tests/lib/dualLayerOverride/expectedMessage.js000066400000000000000000000001221334071220400244620ustar00rootroot00000000000000 define( 'message',[ 'who' ], function ( who ) { return 'hello ' + who; } ); r.js-2.3.6/build/tests/lib/dualLayerOverride/expectedWho.js000066400000000000000000000000721334071220400236370ustar00rootroot00000000000000 define( 'who',[],function ( ) { return 'world'; } ); r.js-2.3.6/build/tests/lib/dualLayerOverride/message.js000066400000000000000000000001071334071220400230030ustar00rootroot00000000000000define( [ 'who' ], function ( who ) { return 'hello ' + who; } ); r.js-2.3.6/build/tests/lib/dualLayerOverride/who.js000066400000000000000000000000601334071220400221520ustar00rootroot00000000000000define( function ( ) { return 'world'; } ); r.js-2.3.6/build/tests/lib/dynamicDefine/000077500000000000000000000000001334071220400201405ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/dynamicDefine/a.js000066400000000000000000000002761334071220400207230ustar00rootroot00000000000000/*jshint esnext: true */ var dependencies = []; define('loader', dependencies, function() {}); define(function (require) { return { name: 'a', loader: require('loader') }; }); r.js-2.3.6/build/tests/lib/dynamicDefine/build.js000066400000000000000000000001311334071220400215700ustar00rootroot00000000000000({ baseUrl: '.', optimize: 'none', name: 'main', out: 'main-built.js' }) r.js-2.3.6/build/tests/lib/dynamicDefine/expected.js000066400000000000000000000004531334071220400223010ustar00rootroot00000000000000/*jshint esnext: true */ var dependencies = []; define('loader', dependencies, function() {}); define('a',['require','loader'],function (require) { return { name: 'a', loader: require('loader') }; }); require(['a'], function(a) { console.log(a); }); define("main", function(){}); r.js-2.3.6/build/tests/lib/dynamicDefine/main.js000066400000000000000000000000631334071220400214210ustar00rootroot00000000000000require(['a'], function(a) { console.log(a); }); r.js-2.3.6/build/tests/lib/empty/000077500000000000000000000000001334071220400165375ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/empty/build.js000066400000000000000000000003221334071220400201710ustar00rootroot00000000000000({ baseUrl: '.', dir: 'built', optimize: 'none', paths: { 'empty1': 'empty:', 'empty2': 'empty:' }, modules: [{ name: 'main', include: ['sub2'] }] }) r.js-2.3.6/build/tests/lib/empty/expected.js000066400000000000000000000002331334071220400206740ustar00rootroot00000000000000 define('sub1',['empty1'], function () {}); require(['sub1'], function () {}); define("main", function(){}); define('sub2',['empty2'], function () {}); r.js-2.3.6/build/tests/lib/empty/main.js000066400000000000000000000000431334071220400200160ustar00rootroot00000000000000require(['sub1'], function () {}); r.js-2.3.6/build/tests/lib/empty/sub1.js000066400000000000000000000000441334071220400177450ustar00rootroot00000000000000define(['empty1'], function () {}); r.js-2.3.6/build/tests/lib/empty/sub2.js000066400000000000000000000000441334071220400177460ustar00rootroot00000000000000define(['empty2'], function () {}); r.js-2.3.6/build/tests/lib/hasOwnProperty/000077500000000000000000000000001334071220400204055ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/hasOwnProperty/build.js000066400000000000000000000002171334071220400220420ustar00rootroot00000000000000{ baseUrl: '../../../../../requirejs/tests/hasOwnProperty/', name: 'hasOwnProperty-tests', out: 'built.js', optimize: 'none' } r.js-2.3.6/build/tests/lib/hasOwnProperty/expected.js000066400000000000000000000011601334071220400225420ustar00rootroot00000000000000 define('toString',{ name: 'toString' }); define('hasOwnProperty',{ name: 'hasOwnProperty' }); define('prototype',{ name: 'prototype' }); require(["toString", "hasOwnProperty", "prototype"], function(toString, hop, p) { doh.register( "hasOwnPropertyTests", [ function hasOwnPropertyTests(t){ t.is("toString", toString.name); t.is("hasOwnProperty", hop.name); t.is("prototype", p.name); } ] ); doh.run(); } ); define("hasOwnProperty-tests", function(){}); r.js-2.3.6/build/tests/lib/iife/000077500000000000000000000000001334071220400163155ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/iife/build.js000066400000000000000000000001311334071220400177450ustar00rootroot00000000000000({ baseUrl: ".", name: "main", optimize: "none", out: "main-built.js" }) r.js-2.3.6/build/tests/lib/iife/expected.js000066400000000000000000000004671334071220400204630ustar00rootroot00000000000000 (function() { define("myModuleA", [],function() { return { "A" : function( a ) { return a + 1; } }; }); }()); define("myModuleB", [ "myModuleA" ], function( modA ) { return { "A" : function( a ) { return modA(a) + 1; } }; }); define("main", function(){}); r.js-2.3.6/build/tests/lib/iife/main.js000066400000000000000000000004241334071220400175770ustar00rootroot00000000000000(function() { define("myModuleA", function() { return { "A" : function( a ) { return a + 1; } }; }); }()); define("myModuleB", [ "myModuleA" ], function( modA ) { return { "A" : function( a ) { return modA(a) + 1; } }; }); r.js-2.3.6/build/tests/lib/inlineDefineNoRequire/000077500000000000000000000000001334071220400216245ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/inlineDefineNoRequire/build.js000066400000000000000000000001451334071220400232610ustar00rootroot00000000000000({ baseUrl: '.', optimize: 'none', name: 'testmodule', out: 'testmodule-built.js' }) r.js-2.3.6/build/tests/lib/inlineDefineNoRequire/expected.js000066400000000000000000000002451334071220400237640ustar00rootroot00000000000000define('text!test1.html', [], function () { return 'test';}); define('careExpPackage', ['text!test1.html'], function () { }); define("testmodule", function(){}); r.js-2.3.6/build/tests/lib/inlineDefineNoRequire/testmodule.js000066400000000000000000000001771334071220400243540ustar00rootroot00000000000000define('text!test1.html', [], function () { return 'test';}); define('careExpPackage', ['text!test1.html'], function () { }); r.js-2.3.6/build/tests/lib/insertRequire/000077500000000000000000000000001334071220400202425ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/insertRequire/a.js000066400000000000000000000000331334071220400210140ustar00rootroot00000000000000define({ name: 'a' }); r.js-2.3.6/build/tests/lib/insertRequire/build.js000066400000000000000000000001661334071220400217020ustar00rootroot00000000000000({ baseUrl: '.', optimize: 'none', name: 'main', insertRequire: ['main'], out: 'main-built.js' }) r.js-2.3.6/build/tests/lib/insertRequire/expected.js000066400000000000000000000001571334071220400224040ustar00rootroot00000000000000 define('a',{ name: 'a' }); define('main',['a'], function (a) { window.a = a; }); require(["main"]); r.js-2.3.6/build/tests/lib/insertRequire/main.js000066400000000000000000000000631334071220400215230ustar00rootroot00000000000000define(['a'], function (a) { window.a = a; }); r.js-2.3.6/build/tests/lib/intDefine/000077500000000000000000000000001334071220400173065ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/intDefine/build.js000066400000000000000000000001271334071220400207430ustar00rootroot00000000000000{ baseUrl: '.', name: 'main', out: 'main-built.js', optimize: 'none' } r.js-2.3.6/build/tests/lib/intDefine/expected.js000066400000000000000000000001451334071220400214450ustar00rootroot00000000000000 define('int',5432); define('nint',-1234); define('main',['int', 'nint'], function (i, n) { }); r.js-2.3.6/build/tests/lib/intDefine/int.js000066400000000000000000000000171334071220400204340ustar00rootroot00000000000000define(5432); r.js-2.3.6/build/tests/lib/intDefine/main.js000066400000000000000000000000571334071220400205720ustar00rootroot00000000000000define(['int', 'nint'], function (i, n) { }); r.js-2.3.6/build/tests/lib/intDefine/nint.js000066400000000000000000000000201334071220400206040ustar00rootroot00000000000000define(-1234); r.js-2.3.6/build/tests/lib/jqueryConfig/000077500000000000000000000000001334071220400200465ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/jqueryConfig/build.js000066400000000000000000000001441334071220400215020ustar00rootroot00000000000000{ mainConfigFile: 'main.js', name: 'main', out: 'main-built.js', optimize: 'none' } r.js-2.3.6/build/tests/lib/jqueryConfig/expected.js000066400000000000000000000002761334071220400222120ustar00rootroot00000000000000 //Just a dummy file for the build define('jquery',[],function () { }); requirejs.config({ "jQuery": "1.7.1" }); require(['jquery'], function () {}); define("main", function(){}); r.js-2.3.6/build/tests/lib/jqueryConfig/jquery.js000066400000000000000000000000751334071220400217250ustar00rootroot00000000000000//Just a dummy file for the build define(function () { }); r.js-2.3.6/build/tests/lib/jqueryConfig/main.js000066400000000000000000000001241334071220400213250ustar00rootroot00000000000000requirejs.config({ "jQuery": "1.7.1" }); require(['jquery'], function () {}); r.js-2.3.6/build/tests/lib/js18/000077500000000000000000000000001334071220400161665ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/js18/a.js000066400000000000000000000001661334071220400167470ustar00rootroot00000000000000define(function (require) { const name = 'a'; return { name: name, other: 'other' }; }); r.js-2.3.6/build/tests/lib/js18/build.js000066400000000000000000000034651334071220400176330ustar00rootroot00000000000000({ baseUrl: '.', optimize: 'none', name: 'main', insertRequire: ['main'], out: 'main-built.js', onBuildRead: function (id, path, contents) { // Regexps courtesy of @mozsquib on github. // Remove destructuring, minimal functions, and yields so parsing works. // Do this until esprima has a fix for this, among other things: // http://code.google.com/p/esprima/issues/detail?id=241 var destructRe = /((?:var|let|const)\s*)(\{[^\}]+\})(\s*(?:=|in\b))/g; var destructRe2 = /((?:var|let|const)\s*)(\[[^\]]+\])(\s*(?:=|in\b))/g; var destructRe3 = /\n(\s*)(\[[^\]]+\])(\s*(?:=|in\b))/g; var getterRe = /get\s+\w+\s*\(\).*,/g; var minifuncRe = /(function\s*\(.*?\))(?=\s*\w)/g; var yieldRe = /yield/g; var temp = contents.replace(destructRe, '$1/*DESTRUCT$2DESTRUCT*/_$3') .replace(destructRe2, '$1/*DESTRUCT$2DESTRUCT*/_$3') .replace(destructRe3, '$1/*DESTRUCT$2DESTRUCT*/_$3') .replace(getterRe, '/*GETTER$&GETTER*/') .replace(minifuncRe, '/*MINIFUNC$1MINIFUNC*/') .replace(yieldRe, 'return YIELD+'); //console.log(temp); return temp; }, onBuildWrite: function (id, path, contents) { // Restore destructuring, minimal functions, and yields. var restructRe = /\/\*DESTRUCT(.*?)DESTRUCT\*\/_/g; var getterRe = /\/\*GETTER(.*?)GETTER\*\//g; var minifuncRe = /\/\*MINIFUNC(.*?)MINIFUNC\*\//g; var yieldRe = /return YIELD\+/g; return contents.replace(restructRe, '$1') .replace(getterRe, '$1') .replace(minifuncRe, '$1') .replace(yieldRe, 'yield'); } }) r.js-2.3.6/build/tests/lib/js18/expected.js000066400000000000000000000010041334071220400203200ustar00rootroot00000000000000 define('a',['require'],function (require) { const name = 'a'; return { name: name, other: 'other' }; }); define('main',['require','a'],function (require) { let a = require('a'); var {name, other} = a; var c = 1; var d = 3; [c, d] = [d, c]; function generator() { var i = 0; while (i < 10) { ++i; if ((i % 2) == 0) { yield true; } } yield false; } }); require(["main"]); r.js-2.3.6/build/tests/lib/js18/main-built.js000066400000000000000000000010041334071220400205600ustar00rootroot00000000000000define('a',['require'],function (require) { const name = 'a'; return { name: name, other: 'other' }; }); define('main',['require','a'],function (require) { let a = require('a'); var {name, other} = a; var c = 1; var d = 3; [c, d] = [d, c]; function generator() { var i = 0; while (i < 10) { ++i; if ((i % 2) == 0) { yield true; } } yield false; } }); require(["main"]); r.js-2.3.6/build/tests/lib/js18/main.js000066400000000000000000000005221334071220400174470ustar00rootroot00000000000000define(function (require) { let a = require('a'); var {name, other} = a; var c = 1; var d = 3; [c, d] = [d, c]; function generator() { var i = 0; while (i < 10) { ++i; if ((i % 2) == 0) { yield true; } } yield false; } }); r.js-2.3.6/build/tests/lib/keepAmdefine/000077500000000000000000000000001334071220400177565ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/keepAmdefine/a.js000066400000000000000000000005111334071220400205310ustar00rootroot00000000000000if(typeof define !== 'function'){ var define = (require('amdefine'))(module); } define(function (require) { var b = require('./b'), c = require('./c'); console.log('got b name: ' + b.name); console.log('got c name: ' + c.name); console.log('and I am a'); return { name: 'a' }; }); r.js-2.3.6/build/tests/lib/keepAmdefine/b.js000066400000000000000000000003061334071220400205340ustar00rootroot00000000000000if (typeof define !== 'function') { var define = (require('amdefine'))(module); } define(['./d'], function (d) { console.log('got d name: ' + d.name); return { name: 'b' }; }); r.js-2.3.6/build/tests/lib/keepAmdefine/build.js000066400000000000000000000001511334071220400214100ustar00rootroot00000000000000({ baseUrl: '.', optimize: 'none', name: 'a', keepAmdefine: true, out: 'built.js' }) r.js-2.3.6/build/tests/lib/keepAmdefine/c.js000066400000000000000000000002221334071220400205320ustar00rootroot00000000000000if ( typeof define !== 'function' ) { var define = ( require( './node_modules/amdefine/amdefine' ) )( module ); } define({ name: 'c' }); r.js-2.3.6/build/tests/lib/keepAmdefine/d.js000066400000000000000000000002161334071220400205360ustar00rootroot00000000000000if (typeof define !== 'function') { var define = (require('../amdefine/node_modules/amdefine/amdefine'))(module); } define({ name: 'd' })r.js-2.3.6/build/tests/lib/keepAmdefine/expected.js000066400000000000000000000015341334071220400221200ustar00rootroot00000000000000 if (typeof define !== 'function') { var define = (require('../amdefine/node_modules/amdefine/amdefine'))(module); } define('d',{ name: 'd' }); if (typeof define !== 'function') { var define = (require('amdefine'))(module); } define('b',['./d'], function (d) { console.log('got d name: ' + d.name); return { name: 'b' }; }); if ( typeof define !== 'function' ) { var define = ( require( './node_modules/amdefine/amdefine' ) )( module ); } define('c',{ name: 'c' }); if(typeof define !== 'function'){ var define = (require('amdefine'))(module); } define('a',['require','./b','./c'],function (require) { var b = require('./b'), c = require('./c'); console.log('got b name: ' + b.name); console.log('got c name: ' + c.name); console.log('and I am a'); return { name: 'a' }; }); r.js-2.3.6/build/tests/lib/mainConfigBaseUrl/000077500000000000000000000000001334071220400207315ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/mainConfigBaseUrl/build.js000066400000000000000000000002251334071220400223650ustar00rootroot00000000000000{ mainConfigFile: 'www/js/main.js', appDir: 'www', dir: 'www-built', optimize: 'none', modules: [{ name: 'main' }] } r.js-2.3.6/build/tests/lib/mainConfigBaseUrl/expected.js000066400000000000000000000002551334071220400230720ustar00rootroot00000000000000 define('sub',{ name: 'sub' }); require.config({ baseUrl: 'js' }); require(['sub'], function (sub) { console.log(sub.name); }); define("main", function(){}); r.js-2.3.6/build/tests/lib/mainConfigBaseUrl/www/000077500000000000000000000000001334071220400215555ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/mainConfigBaseUrl/www/js/000077500000000000000000000000001334071220400221715ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/mainConfigBaseUrl/www/js/main.js000066400000000000000000000001511334071220400234500ustar00rootroot00000000000000require.config({ baseUrl: 'js' }); require(['sub'], function (sub) { console.log(sub.name); }); r.js-2.3.6/build/tests/lib/mainConfigBaseUrl/www/js/sub.js000066400000000000000000000000351334071220400233160ustar00rootroot00000000000000define({ name: 'sub' }); r.js-2.3.6/build/tests/lib/mainConfigFile/000077500000000000000000000000001334071220400202535ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/mainConfigFile/basic/000077500000000000000000000000001334071220400213345ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/mainConfigFile/basic/expected.js000066400000000000000000000003411334071220400234710ustar00rootroot00000000000000 define('dep1',{ name: 'dep1' }); define('dep2',{ name: 'dep2' }); requirejs.config({ paths: { 'dep2': 'sub/dep2' } }); requirejs(['dep1', 'dep2'], function () { }); define("main", function(){}); r.js-2.3.6/build/tests/lib/mainConfigFile/basic/tools/000077500000000000000000000000001334071220400224745ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/mainConfigFile/basic/tools/build.js000066400000000000000000000001631334071220400241310ustar00rootroot00000000000000({ mainConfigFile: '../www/js/main.js', name: 'main', out: '../main-built.js', optimize: 'none' }) r.js-2.3.6/build/tests/lib/mainConfigFile/basic/www/000077500000000000000000000000001334071220400221605ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/mainConfigFile/basic/www/js/000077500000000000000000000000001334071220400225745ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/mainConfigFile/basic/www/js/dep1.js000066400000000000000000000000361334071220400237620ustar00rootroot00000000000000define({ name: 'dep1' }); r.js-2.3.6/build/tests/lib/mainConfigFile/basic/www/js/main.js000066400000000000000000000001651334071220400240600ustar00rootroot00000000000000requirejs.config({ paths: { 'dep2': 'sub/dep2' } }); requirejs(['dep1', 'dep2'], function () { }); r.js-2.3.6/build/tests/lib/mainConfigFile/basic/www/js/sub/000077500000000000000000000000001334071220400233655ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/mainConfigFile/basic/www/js/sub/dep2.js000066400000000000000000000000361334071220400245540ustar00rootroot00000000000000define({ name: 'dep2' }); r.js-2.3.6/build/tests/lib/mainConfigFile/first/000077500000000000000000000000001334071220400214025ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/mainConfigFile/first/expected.js000066400000000000000000000005101334071220400235350ustar00rootroot00000000000000 define('dep1',{ name: 'dep1' }); define('dep2',{ name: 'dep2' }); requirejs.config({ paths: { 'dep2': 'sub/dep2' } }); //Only the first call should be used. requirejs.config({ paths: { 'dep2': 'BAD' } }); requirejs(['dep1', 'dep2'], function () { }); define("main", function(){}); r.js-2.3.6/build/tests/lib/mainConfigFile/first/tools/000077500000000000000000000000001334071220400225425ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/mainConfigFile/first/tools/build.js000066400000000000000000000001631334071220400241770ustar00rootroot00000000000000({ mainConfigFile: '../www/js/main.js', name: 'main', out: '../main-built.js', optimize: 'none' }) r.js-2.3.6/build/tests/lib/mainConfigFile/first/www/000077500000000000000000000000001334071220400222265ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/mainConfigFile/first/www/js/000077500000000000000000000000001334071220400226425ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/mainConfigFile/first/www/js/dep1.js000066400000000000000000000000361334071220400240300ustar00rootroot00000000000000define({ name: 'dep1' }); r.js-2.3.6/build/tests/lib/mainConfigFile/first/www/js/main.js000066400000000000000000000003341334071220400241240ustar00rootroot00000000000000requirejs.config({ paths: { 'dep2': 'sub/dep2' } }); //Only the first call should be used. requirejs.config({ paths: { 'dep2': 'BAD' } }); requirejs(['dep1', 'dep2'], function () { }); r.js-2.3.6/build/tests/lib/mainConfigFile/first/www/js/sub/000077500000000000000000000000001334071220400234335ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/mainConfigFile/first/www/js/sub/dep2.js000066400000000000000000000000361334071220400246220ustar00rootroot00000000000000define({ name: 'dep2' }); r.js-2.3.6/build/tests/lib/mainConfigFile/mergeConfig/000077500000000000000000000000001334071220400225005ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/mainConfigFile/mergeConfig/expected.js000066400000000000000000000012121334071220400246330ustar00rootroot00000000000000 define('enabled',{ load: function (name, require, load, config) { if (config.enabled[name]) { require([name], load); } else { load(); } } }); define('alpha',{ name: 'alpha' }); define('beta',{ name: 'beta' }); requirejs.config({ paths: { 'dep2': 'sub/dep2' }, enabled: { alpha: true }, //Made up values just to test nested merging skip logic. someRegExp: /foo/, someFunc: function () {}, someArray: ['three', 'four'] }); requirejs(['enabled!alpha', 'enabled!gamma', 'enabled!beta'], function () { }); define("main", function(){}); r.js-2.3.6/build/tests/lib/mainConfigFile/mergeConfig/tools/000077500000000000000000000000001334071220400236405ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/mainConfigFile/mergeConfig/tools/build.js000066400000000000000000000007421334071220400253000ustar00rootroot00000000000000({ mainConfigFile: '../www/js/main.js', //Duplicate baseUrl here because otherwise the paths //reference below will not work out. baseUrl: '../www/js', paths: { 'alpha': 'sub/alpha' }, enabled: { beta: true }, //Made up values just to test nested merging skip logic. someRegExp: /bar/, someFunc: function () {}, someArray: ['one', 'two'], name: 'main', out: '../main-built.js', optimize: 'none' }) r.js-2.3.6/build/tests/lib/mainConfigFile/mergeConfig/www/000077500000000000000000000000001334071220400233245ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/mainConfigFile/mergeConfig/www/js/000077500000000000000000000000001334071220400237405ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/mainConfigFile/mergeConfig/www/js/beta.js000066400000000000000000000000361334071220400252100ustar00rootroot00000000000000define({ name: 'beta' }); r.js-2.3.6/build/tests/lib/mainConfigFile/mergeConfig/www/js/dep1.js000066400000000000000000000000361334071220400251260ustar00rootroot00000000000000define({ name: 'dep1' }); r.js-2.3.6/build/tests/lib/mainConfigFile/mergeConfig/www/js/enabled.js000066400000000000000000000002741334071220400256730ustar00rootroot00000000000000define({ load: function (name, require, load, config) { if (config.enabled[name]) { require([name], load); } else { load(); } } }); r.js-2.3.6/build/tests/lib/mainConfigFile/mergeConfig/www/js/main.js000066400000000000000000000005251334071220400252240ustar00rootroot00000000000000requirejs.config({ paths: { 'dep2': 'sub/dep2' }, enabled: { alpha: true }, //Made up values just to test nested merging skip logic. someRegExp: /foo/, someFunc: function () {}, someArray: ['three', 'four'] }); requirejs(['enabled!alpha', 'enabled!gamma', 'enabled!beta'], function () { }); r.js-2.3.6/build/tests/lib/mainConfigFile/mergeConfig/www/js/sub/000077500000000000000000000000001334071220400245315ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/mainConfigFile/mergeConfig/www/js/sub/alpha.js000066400000000000000000000000371334071220400261540ustar00rootroot00000000000000define({ name: 'alpha' }); r.js-2.3.6/build/tests/lib/mainConfigFile/mergeConfig/www/js/sub/dep2.js000066400000000000000000000000361334071220400257200ustar00rootroot00000000000000define({ name: 'dep2' }); r.js-2.3.6/build/tests/lib/mainConfigFile/multi/000077500000000000000000000000001334071220400214055ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/mainConfigFile/multi/expected.js000066400000000000000000000016751334071220400235550ustar00rootroot00000000000000 define('enabled',{ load: function (name, require, load, config) { if (config.enabled[name]) { require([name], load); } else { load(); } } }); define('alpha',{ name: 'alpha' }); define('beta',{ name: 'beta' }); define('foo/main',{ name: 'foo' }); define('foo', ['foo/main'], function (main) { return main; }); define('bar/main',{ name: 'bar' }); define('bar', ['bar/main'], function (main) { return main; }); requirejs.config({ paths: { 'alpha': 'sub/wrong-did-not-multi', 'dep2': 'sub/wrong-did-not-multi' }, enabled: { alpha: true }, packages: ['foo'], //Made up values just to test nested merging skip logic. someRegExp: /foo/, someFunc: function () {}, someArray: ['three', 'four'] }); requirejs(['enabled!alpha', 'enabled!gamma', 'enabled!beta', 'foo', 'bar'], function () { }); define("main", function(){}); r.js-2.3.6/build/tests/lib/mainConfigFile/multi/main-built.js000066400000000000000000000017001334071220400240020ustar00rootroot00000000000000define('enabled',{ load: function (name, require, load, config) { if (config.enabled[name]) { require([name], load); } else { load(); } } }); define('alpha',{ name: 'alpha' }); define('beta',{ name: 'beta' }); define('foo/main',{ name: 'foo' }); define('foo', ['foo/main'], function (main) { return main; }); define('bar/main',{ name: 'bar' }); define('bar', ['bar/main'], function (main) { return main; }); requirejs.config({ paths: { 'alpha': 'sub/wrong-did-not-multi', 'dep2': 'sub/wrong-did-not-multi' }, enabled: { alpha: true }, packages: ['foo'], //Made up values just to test nested merging skip logic. someRegExp: /foo/, someFunc: function () {}, someArray: ['three', 'four'] }); requirejs(['enabled!alpha', 'enabled!gamma', 'enabled!beta', 'foo', 'bar'], function () { }); define("main", function(){}); r.js-2.3.6/build/tests/lib/mainConfigFile/multi/tools/000077500000000000000000000000001334071220400225455ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/mainConfigFile/multi/tools/build.js000066400000000000000000000007151334071220400242050ustar00rootroot00000000000000({ mainConfigFile: ['../www/js/main.js', '../www/js/secondary.js'], //Duplicate baseUrl here because otherwise the paths //reference below will not work out. baseUrl: '../www/js', enabled: { beta: true }, //Made up values just to test nested merging skip logic. someRegExp: /bar/, someFunc: function () {}, someArray: ['one', 'two'], name: 'main', out: '../main-built.js', optimize: 'none' }) r.js-2.3.6/build/tests/lib/mainConfigFile/multi/www/000077500000000000000000000000001334071220400222315ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/mainConfigFile/multi/www/js/000077500000000000000000000000001334071220400226455ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/mainConfigFile/multi/www/js/bar/000077500000000000000000000000001334071220400234115ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/mainConfigFile/multi/www/js/bar/main.js000066400000000000000000000000351334071220400246710ustar00rootroot00000000000000define({ name: 'bar' }); r.js-2.3.6/build/tests/lib/mainConfigFile/multi/www/js/beta.js000066400000000000000000000000361334071220400241150ustar00rootroot00000000000000define({ name: 'beta' }); r.js-2.3.6/build/tests/lib/mainConfigFile/multi/www/js/dep1.js000066400000000000000000000000361334071220400240330ustar00rootroot00000000000000define({ name: 'dep1' }); r.js-2.3.6/build/tests/lib/mainConfigFile/multi/www/js/enabled.js000066400000000000000000000002741334071220400246000ustar00rootroot00000000000000define({ load: function (name, require, load, config) { if (config.enabled[name]) { require([name], load); } else { load(); } } }); r.js-2.3.6/build/tests/lib/mainConfigFile/multi/www/js/foo/000077500000000000000000000000001334071220400234305ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/mainConfigFile/multi/www/js/foo/main.js000066400000000000000000000000351334071220400247100ustar00rootroot00000000000000define({ name: 'foo' }); r.js-2.3.6/build/tests/lib/mainConfigFile/multi/www/js/main.js000066400000000000000000000006661334071220400241370ustar00rootroot00000000000000requirejs.config({ paths: { 'alpha': 'sub/wrong-did-not-multi', 'dep2': 'sub/wrong-did-not-multi' }, enabled: { alpha: true }, packages: ['foo'], //Made up values just to test nested merging skip logic. someRegExp: /foo/, someFunc: function () {}, someArray: ['three', 'four'] }); requirejs(['enabled!alpha', 'enabled!gamma', 'enabled!beta', 'foo', 'bar'], function () { }); r.js-2.3.6/build/tests/lib/mainConfigFile/multi/www/js/secondary.js000066400000000000000000000001731334071220400251730ustar00rootroot00000000000000requirejs.config({ paths: { 'alpha': 'sub/alpha', 'dep2': 'sub/dep2' }, packages: ['bar'] }); r.js-2.3.6/build/tests/lib/mainConfigFile/multi/www/js/sub/000077500000000000000000000000001334071220400234365ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/mainConfigFile/multi/www/js/sub/alpha.js000066400000000000000000000000371334071220400250610ustar00rootroot00000000000000define({ name: 'alpha' }); r.js-2.3.6/build/tests/lib/mainConfigFile/multi/www/js/sub/dep2.js000066400000000000000000000000361334071220400246250ustar00rootroot00000000000000define({ name: 'dep2' }); r.js-2.3.6/build/tests/lib/mapConfig/000077500000000000000000000000001334071220400173045ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/mapConfig/build.js000066400000000000000000000003271334071220400207430ustar00rootroot00000000000000{ mainConfigFile: '../../../../../requirejs/tests/mapConfig/mapConfig-tests.js', name: 'mapConfig-tests', out: '../../../../../requirejs/tests/mapConfig/built/mapConfig-tests.js', optimize: 'none' } r.js-2.3.6/build/tests/lib/mapConfig/buildPlugin.js000066400000000000000000000003511334071220400221170ustar00rootroot00000000000000{ mainConfigFile: '../../../../../requirejs/tests/mapConfig/mapConfigPlugin-tests.js', name: 'mapConfigPlugin-tests', out: '../../../../../requirejs/tests/mapConfig/built/mapConfigPlugin-tests.js', optimize: 'none' } r.js-2.3.6/build/tests/lib/mapConfig/buildStar.js000066400000000000000000000003431334071220400215730ustar00rootroot00000000000000{ mainConfigFile: '../../../../../requirejs/tests/mapConfig/mapConfigStar-tests.js', name: 'mapConfigStar-tests', out: '../../../../../requirejs/tests/mapConfig/built/mapConfigStar-tests.js', optimize: 'none' } r.js-2.3.6/build/tests/lib/mapConfig/buildStarAdapter.js000066400000000000000000000003701334071220400230740ustar00rootroot00000000000000{ mainConfigFile: '../../../../../requirejs/tests/mapConfig/mapConfigStarAdapter-tests.js', name: 'mapConfigStarAdapter-tests', out: '../../../../../requirejs/tests/mapConfig/built/mapConfigStarAdapter-tests.js', optimize: 'none' } r.js-2.3.6/build/tests/lib/mapConfig/expected.js000066400000000000000000000025441334071220400214500ustar00rootroot00000000000000 define('c1',{ name: 'c1' }); define('c1/sub',{ name: 'c1/sub' }); define('a',['c', 'c/sub'], function (c, csub) { return { c: c, csub: csub }; }); define('c',{ name: 'c' }); define('c/sub',{ name: 'c/sub' }); define('b',['c', 'c/sub'], function (c, csub) { return { c: c, csub: csub }; }); define('c2',{ name: 'c2' }); define('c2/sub',{ name: 'c2/sub' }); define('a/sub/one',['c', 'c/sub'], function (c, csub) { return { c: c, csub: csub }; }); require({ baseUrl: './', paths: { a: 'a1' }, map: { 'a': { c: 'c1' }, 'a/sub/one': { 'c': 'c2' } } }, ['a', 'b', 'c', 'a/sub/one'], function(a, b, c, one) { doh.register( 'mapConfig', [ function mapConfig(t){ t.is('c1', a.c.name); t.is('c1/sub', a.csub.name); t.is('c2', one.c.name); t.is('c2/sub', one.csub.name); t.is('c', b.c.name); t.is('c/sub', b.csub.name); t.is('c', c.name); } ] ); doh.run(); } ); define("mapConfig-tests", function(){}); r.js-2.3.6/build/tests/lib/mapConfig/expectedPlugin.js000066400000000000000000000035141334071220400226250ustar00rootroot00000000000000 define('plug',{ load: function (name, require, load, config) { if (!name) { name = 'main'; } else if (name.charAt(0) === '/') { name = 'main' + name; } //Only grab the first segment of the name. //This is just to be different, nothing //that is required behavior. name = name.split('/').shift(); name = 'plug/' + name; require([name], load); } }); define('plug/c1',{ name: 'plug!c1' }); define('a',['c', 'c/sub'], function (c, csub) { return { c: c, csub: csub }; }); define('plug/main',{ name: 'plug!main' }); define('b',['c', 'c/sub'], function (c, csub) { return { c: c, csub: csub }; }); define('plug/c2',{ name: 'plug!c2' }); define('a/sub/one',['c', 'c/sub'], function (c, csub) { return { c: c, csub: csub }; }); require({ baseUrl: './', paths: { a: 'a1' }, map: { '*': { c: 'plug!' }, 'a': { c: 'plug!c1' }, 'a/sub/one': { 'c': 'plug!c2' } } }, ['a', 'b', 'c', 'a/sub/one'], function(a, b, c, one) { doh.register( 'mapConfigPlugin', [ function mapConfigPlugin(t){ t.is('plug!c1', a.c.name); t.is('plug!c1', a.csub.name); t.is('plug!c2', one.c.name); t.is('plug!c2', one.csub.name); t.is('plug!main', b.c.name); t.is('plug!main', b.csub.name); t.is('plug!main', c.name); } ] ); doh.run(); } ); define("mapConfigPlugin-tests", function(){}); r.js-2.3.6/build/tests/lib/mapConfig/expectedStar.js000066400000000000000000000036641334071220400223060ustar00rootroot00000000000000 define('c1',{ name: 'c1' }); define('c1/sub',{ name: 'c1/sub' }); define('a',['c', 'c/sub'], function (c, csub) { return { c: c, csub: csub }; }); define('another/minor',{ name: 'another/minor' }); define('another/c',['./minor'], function (minor) { return { name: 'another/c', minorName: minor.name }; }); define('another/c/dim',{ name: 'another/c/dim' }); define('another/c/sub',['./dim'], function (dim) { return { name: 'another/c/sub', dimName: dim.name }; }); define('b',['c', 'c/sub'], function (c, csub) { return { c: c, csub: csub }; }); define('c2',{ name: 'c2' }); define('a/sub/one',['c', 'c/sub'], function (c, csub) { return { c: c, csub: csub }; }); require({ baseUrl: './', paths: { a: 'a1' }, map: { '*': { 'c': 'another/c' }, 'a': { c: 'c1' }, 'a/sub/one': { 'c': 'c2', 'c/sub': 'another/c/sub' } } }, ['a', 'b', 'c', 'a/sub/one'], function(a, b, c, one) { doh.register( 'mapConfigStar', [ function mapConfigStar(t){ t.is('c1', a.c.name); t.is('c1/sub', a.csub.name); t.is('c2', one.c.name); t.is('another/c/sub', one.csub.name); t.is('another/c/dim', one.csub.dimName); t.is('another/c', b.c.name); t.is('another/minor', b.c.minorName); t.is('another/c/sub', b.csub.name); t.is('another/c', c.name); t.is('another/minor', c.minorName); } ] ); doh.run(); } ); define("mapConfigStar-tests", function(){}); r.js-2.3.6/build/tests/lib/mapConfig/expectedStarAdapter.js000066400000000000000000000016751334071220400236070ustar00rootroot00000000000000 define('d',{ name: 'd' }); define('adapter/d',['d'], function(d) { d.adapted = true; return d; }); define('e',['d'], function (d) { return { name: 'e', d: d }; }); /*global doh */ require({ baseUrl: './', map: { '*': { 'd': 'adapter/d' }, 'adapter/d': { d: 'd' } } }, ['e', 'adapter/d'], function(e, adapterD) { 'use strict'; doh.register( 'mapConfigStarAdapter', [ function mapConfigStarAdapter(t){ t.is('e', e.name); t.is('d', e.d.name); t.is(true, e.d.adapted); t.is(true, adapterD.adapted); t.is('d', adapterD.name); } ] ); doh.run(); } ); define("mapConfigStarAdapter-tests", function(){}); r.js-2.3.6/build/tests/lib/mapConfigMix/000077500000000000000000000000001334071220400177625ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/mapConfigMix/a.js000066400000000000000000000000511334071220400205340ustar00rootroot00000000000000define(['b', 'c'], function(b, c) { }); r.js-2.3.6/build/tests/lib/mapConfigMix/b1.js000066400000000000000000000000321334071220400206150ustar00rootroot00000000000000define({ name: 'b1' }); r.js-2.3.6/build/tests/lib/mapConfigMix/build.js000066400000000000000000000002141334071220400214140ustar00rootroot00000000000000{ mainConfigFile: ['config1.js', 'config2.js'], name: 'a', include: ['config1', 'config2'], optimize: 'none', out: 'a-built.js' } r.js-2.3.6/build/tests/lib/mapConfigMix/c2.js000066400000000000000000000000321334071220400206170ustar00rootroot00000000000000define({ name: 'c2' }); r.js-2.3.6/build/tests/lib/mapConfigMix/config1.js000066400000000000000000000001051334071220400216420ustar00rootroot00000000000000requirejs.config({ map: { '*': { 'b': 'b1' } } }); r.js-2.3.6/build/tests/lib/mapConfigMix/config2.js000066400000000000000000000001051334071220400216430ustar00rootroot00000000000000requirejs.config({ map: { '*': { 'c': 'c2' } } }); r.js-2.3.6/build/tests/lib/mapConfigMix/expected.js000066400000000000000000000004761334071220400221300ustar00rootroot00000000000000define('b1',{ name: 'b1' }); define('c2',{ name: 'c2' }); define('a',['b', 'c'], function(b, c) { }); requirejs.config({ map: { '*': { 'b': 'b1' } } }); define("config1", function(){}); requirejs.config({ map: { '*': { 'c': 'c2' } } }); define("config2", function(){}); r.js-2.3.6/build/tests/lib/missingDep/000077500000000000000000000000001334071220400175035ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/missingDep/a.js000066400000000000000000000000341334071220400202560ustar00rootroot00000000000000define({ name: 'a' }); r.js-2.3.6/build/tests/lib/missingDep/main.js000066400000000000000000000001241334071220400207620ustar00rootroot00000000000000define(function (require) { var a = require('a'), b = require('b'); }); r.js-2.3.6/build/tests/lib/moduleThenPlugin/000077500000000000000000000000001334071220400206645ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/moduleThenPlugin/build.js000066400000000000000000000003251334071220400223210ustar00rootroot00000000000000({ baseUrl: '.', paths: { 'text': '../../../../../../requirejs/text/text' }, optimize: 'none', name: 'main', include: [ 'text', 'sub2' ], out: 'built.js' }) r.js-2.3.6/build/tests/lib/moduleThenPlugin/expected.js000066400000000000000000000403041334071220400230240ustar00rootroot00000000000000define('sub1',{ name: 'sub1' }); require(['sub1'], function (sub1) {}); define("main", function(){}); /** * @license text 2.0.15 Copyright jQuery Foundation and other contributors. * Released under MIT license, http://github.com/requirejs/text/LICENSE */ /*jslint regexp: true */ /*global require, XMLHttpRequest, ActiveXObject, define, window, process, Packages, java, location, Components, FileUtils */ define('text',['module'], function (module) { 'use strict'; var text, fs, Cc, Ci, xpcIsWindows, progIds = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0'], xmlRegExp = /^\s*<\?xml(\s)+version=[\'\"](\d)*.(\d)*[\'\"](\s)*\?>/im, bodyRegExp = /]*>\s*([\s\S]+)\s*<\/body>/im, hasLocation = typeof location !== 'undefined' && location.href, defaultProtocol = hasLocation && location.protocol && location.protocol.replace(/\:/, ''), defaultHostName = hasLocation && location.hostname, defaultPort = hasLocation && (location.port || undefined), buildMap = {}, masterConfig = (module.config && module.config()) || {}; function useDefault(value, defaultValue) { return value === undefined || value === '' ? defaultValue : value; } //Allow for default ports for http and https. function isSamePort(protocol1, port1, protocol2, port2) { if (port1 === port2) { return true; } else if (protocol1 === protocol2) { if (protocol1 === 'http') { return useDefault(port1, '80') === useDefault(port2, '80'); } else if (protocol1 === 'https') { return useDefault(port1, '443') === useDefault(port2, '443'); } } return false; } text = { version: '2.0.15', strip: function (content) { //Strips declarations so that external SVG and XML //documents can be added to a document without worry. Also, if the string //is an HTML document, only the part inside the body tag is returned. if (content) { content = content.replace(xmlRegExp, ""); var matches = content.match(bodyRegExp); if (matches) { content = matches[1]; } } else { content = ""; } return content; }, jsEscape: function (content) { return content.replace(/(['\\])/g, '\\$1') .replace(/[\f]/g, "\\f") .replace(/[\b]/g, "\\b") .replace(/[\n]/g, "\\n") .replace(/[\t]/g, "\\t") .replace(/[\r]/g, "\\r") .replace(/[\u2028]/g, "\\u2028") .replace(/[\u2029]/g, "\\u2029"); }, createXhr: masterConfig.createXhr || function () { //Would love to dump the ActiveX crap in here. Need IE 6 to die first. var xhr, i, progId; if (typeof XMLHttpRequest !== "undefined") { return new XMLHttpRequest(); } else if (typeof ActiveXObject !== "undefined") { for (i = 0; i < 3; i += 1) { progId = progIds[i]; try { xhr = new ActiveXObject(progId); } catch (e) {} if (xhr) { progIds = [progId]; // so faster next time break; } } } return xhr; }, /** * Parses a resource name into its component parts. Resource names * look like: module/name.ext!strip, where the !strip part is * optional. * @param {String} name the resource name * @returns {Object} with properties "moduleName", "ext" and "strip" * where strip is a boolean. */ parseName: function (name) { var modName, ext, temp, strip = false, index = name.lastIndexOf("."), isRelative = name.indexOf('./') === 0 || name.indexOf('../') === 0; if (index !== -1 && (!isRelative || index > 1)) { modName = name.substring(0, index); ext = name.substring(index + 1); } else { modName = name; } temp = ext || modName; index = temp.indexOf("!"); if (index !== -1) { //Pull off the strip arg. strip = temp.substring(index + 1) === "strip"; temp = temp.substring(0, index); if (ext) { ext = temp; } else { modName = temp; } } return { moduleName: modName, ext: ext, strip: strip }; }, xdRegExp: /^((\w+)\:)?\/\/([^\/\\]+)/, /** * Is an URL on another domain. Only works for browser use, returns * false in non-browser environments. Only used to know if an * optimized .js version of a text resource should be loaded * instead. * @param {String} url * @returns Boolean */ useXhr: function (url, protocol, hostname, port) { var uProtocol, uHostName, uPort, match = text.xdRegExp.exec(url); if (!match) { return true; } uProtocol = match[2]; uHostName = match[3]; uHostName = uHostName.split(':'); uPort = uHostName[1]; uHostName = uHostName[0]; return (!uProtocol || uProtocol === protocol) && (!uHostName || uHostName.toLowerCase() === hostname.toLowerCase()) && ((!uPort && !uHostName) || isSamePort(uProtocol, uPort, protocol, port)); }, finishLoad: function (name, strip, content, onLoad) { content = strip ? text.strip(content) : content; if (masterConfig.isBuild) { buildMap[name] = content; } onLoad(content); }, load: function (name, req, onLoad, config) { //Name has format: some.module.filext!strip //The strip part is optional. //if strip is present, then that means only get the string contents //inside a body tag in an HTML string. For XML/SVG content it means //removing the declarations so the content can be inserted //into the current doc without problems. // Do not bother with the work if a build and text will // not be inlined. if (config && config.isBuild && !config.inlineText) { onLoad(); return; } masterConfig.isBuild = config && config.isBuild; var parsed = text.parseName(name), nonStripName = parsed.moduleName + (parsed.ext ? '.' + parsed.ext : ''), url = req.toUrl(nonStripName), useXhr = (masterConfig.useXhr) || text.useXhr; // Do not load if it is an empty: url if (url.indexOf('empty:') === 0) { onLoad(); return; } //Load the text. Use XHR if possible and in a browser. if (!hasLocation || useXhr(url, defaultProtocol, defaultHostName, defaultPort)) { text.get(url, function (content) { text.finishLoad(name, parsed.strip, content, onLoad); }, function (err) { if (onLoad.error) { onLoad.error(err); } }); } else { //Need to fetch the resource across domains. Assume //the resource has been optimized into a JS module. Fetch //by the module name + extension, but do not include the //!strip part to avoid file system issues. req([nonStripName], function (content) { text.finishLoad(parsed.moduleName + '.' + parsed.ext, parsed.strip, content, onLoad); }); } }, write: function (pluginName, moduleName, write, config) { if (buildMap.hasOwnProperty(moduleName)) { var content = text.jsEscape(buildMap[moduleName]); write.asModule(pluginName + "!" + moduleName, "define(function () { return '" + content + "';});\n"); } }, writeFile: function (pluginName, moduleName, req, write, config) { var parsed = text.parseName(moduleName), extPart = parsed.ext ? '.' + parsed.ext : '', nonStripName = parsed.moduleName + extPart, //Use a '.js' file name so that it indicates it is a //script that can be loaded across domains. fileName = req.toUrl(parsed.moduleName + extPart) + '.js'; //Leverage own load() method to load plugin value, but only //write out values that do not have the strip argument, //to avoid any potential issues with ! in file names. text.load(nonStripName, req, function (value) { //Use own write() method to construct full module value. //But need to create shell that translates writeFile's //write() to the right interface. var textWrite = function (contents) { return write(fileName, contents); }; textWrite.asModule = function (moduleName, contents) { return write.asModule(moduleName, fileName, contents); }; text.write(pluginName, nonStripName, textWrite, config); }, config); } }; if (masterConfig.env === 'node' || (!masterConfig.env && typeof process !== "undefined" && process.versions && !!process.versions.node && !process.versions['node-webkit'] && !process.versions['atom-shell'])) { //Using special require.nodeRequire, something added by r.js. fs = require.nodeRequire('fs'); text.get = function (url, callback, errback) { try { var file = fs.readFileSync(url, 'utf8'); //Remove BOM (Byte Mark Order) from utf8 files if it is there. if (file[0] === '\uFEFF') { file = file.substring(1); } callback(file); } catch (e) { if (errback) { errback(e); } } }; } else if (masterConfig.env === 'xhr' || (!masterConfig.env && text.createXhr())) { text.get = function (url, callback, errback, headers) { var xhr = text.createXhr(), header; xhr.open('GET', url, true); //Allow plugins direct access to xhr headers if (headers) { for (header in headers) { if (headers.hasOwnProperty(header)) { xhr.setRequestHeader(header.toLowerCase(), headers[header]); } } } //Allow overrides specified in config if (masterConfig.onXhr) { masterConfig.onXhr(xhr, url); } xhr.onreadystatechange = function (evt) { var status, err; //Do not explicitly handle errors, those should be //visible via console output in the browser. if (xhr.readyState === 4) { status = xhr.status || 0; if (status > 399 && status < 600) { //An http 4xx or 5xx error. Signal an error. err = new Error(url + ' HTTP status: ' + status); err.xhr = xhr; if (errback) { errback(err); } } else { callback(xhr.responseText); } if (masterConfig.onXhrComplete) { masterConfig.onXhrComplete(xhr, url); } } }; xhr.send(null); }; } else if (masterConfig.env === 'rhino' || (!masterConfig.env && typeof Packages !== 'undefined' && typeof java !== 'undefined')) { //Why Java, why is this so awkward? text.get = function (url, callback) { var stringBuffer, line, encoding = "utf-8", file = new java.io.File(url), lineSeparator = java.lang.System.getProperty("line.separator"), input = new java.io.BufferedReader(new java.io.InputStreamReader(new java.io.FileInputStream(file), encoding)), content = ''; try { stringBuffer = new java.lang.StringBuffer(); line = input.readLine(); // Byte Order Mark (BOM) - The Unicode Standard, version 3.0, page 324 // http://www.unicode.org/faq/utf_bom.html // Note that when we use utf-8, the BOM should appear as "EF BB BF", but it doesn't due to this bug in the JDK: // http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4508058 if (line && line.length() && line.charAt(0) === 0xfeff) { // Eat the BOM, since we've already found the encoding on this file, // and we plan to concatenating this buffer with others; the BOM should // only appear at the top of a file. line = line.substring(1); } if (line !== null) { stringBuffer.append(line); } while ((line = input.readLine()) !== null) { stringBuffer.append(lineSeparator); stringBuffer.append(line); } //Make sure we return a JavaScript string and not a Java string. content = String(stringBuffer.toString()); //String } finally { input.close(); } callback(content); }; } else if (masterConfig.env === 'xpconnect' || (!masterConfig.env && typeof Components !== 'undefined' && Components.classes && Components.interfaces)) { //Avert your gaze! Cc = Components.classes; Ci = Components.interfaces; Components.utils['import']('resource://gre/modules/FileUtils.jsm'); xpcIsWindows = ('@mozilla.org/windows-registry-key;1' in Cc); text.get = function (url, callback) { var inStream, convertStream, fileObj, readData = {}; if (xpcIsWindows) { url = url.replace(/\//g, '\\'); } fileObj = new FileUtils.File(url); //XPCOM, you so crazy try { inStream = Cc['@mozilla.org/network/file-input-stream;1'] .createInstance(Ci.nsIFileInputStream); inStream.init(fileObj, 1, 0, false); convertStream = Cc['@mozilla.org/intl/converter-input-stream;1'] .createInstance(Ci.nsIConverterInputStream); convertStream.init(inStream, "utf-8", inStream.available(), Ci.nsIConverterInputStream.DEFAULT_REPLACEMENT_CHARACTER); convertStream.readString(inStream.available(), readData); convertStream.close(); inStream.close(); callback(readData.value); } catch (e) { throw new Error((fileObj && fileObj.path || '') + ': ' + e); } }; } return text; }); define('text!template.txt',[],function () { return 'Hello World';}); define('sub2',['require','text!template.txt'],function (require) { var text = require('text!template.txt'); return text; }); r.js-2.3.6/build/tests/lib/moduleThenPlugin/main.js000066400000000000000000000000461334071220400221460ustar00rootroot00000000000000require(['sub1'], function (sub1) {});r.js-2.3.6/build/tests/lib/moduleThenPlugin/sub1.js000066400000000000000000000000361334071220400220730ustar00rootroot00000000000000define({ name: 'sub1' }); r.js-2.3.6/build/tests/lib/moduleThenPlugin/sub2.js000066400000000000000000000001361334071220400220750ustar00rootroot00000000000000define(function (require) { var text = require('text!template.txt'); return text; }); r.js-2.3.6/build/tests/lib/moduleThenPlugin/template.txt000066400000000000000000000000131334071220400232320ustar00rootroot00000000000000Hello Worldr.js-2.3.6/build/tests/lib/modulesExclude/000077500000000000000000000000001334071220400203635ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/modulesExclude/build.js000066400000000000000000000003641334071220400220230ustar00rootroot00000000000000({ appDir: "src/", baseUrl: "./", dir: "built/", optimize: "none", modules: [ { name: "a", exclude: ["b", "z"] }, { name: "b", exclude: ["a", "z"] }, { name: "z", exclude: ["a", "b"] } ] })r.js-2.3.6/build/tests/lib/modulesExclude/expected/000077500000000000000000000000001334071220400221645ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/modulesExclude/expected/a.js000066400000000000000000000001221334071220400227350ustar00rootroot00000000000000 define('a',['z'], function(Z){ return { name: 'aaa', dep: Z }; });r.js-2.3.6/build/tests/lib/modulesExclude/expected/b.js000066400000000000000000000001221334071220400227360ustar00rootroot00000000000000 define('b',['z'], function(Z){ return { name: 'bbb', dep: Z }; });r.js-2.3.6/build/tests/lib/modulesExclude/expected/z.js000066400000000000000000000000401334071220400227650ustar00rootroot00000000000000 define('z',{ name: 'zzz' });r.js-2.3.6/build/tests/lib/modulesExclude/src/000077500000000000000000000000001334071220400211525ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/modulesExclude/src/a.js000066400000000000000000000001151334071220400217250ustar00rootroot00000000000000define(['z'], function(Z){ return { name: 'aaa', dep: Z }; });r.js-2.3.6/build/tests/lib/modulesExclude/src/b.js000066400000000000000000000001151334071220400217260ustar00rootroot00000000000000define(['z'], function(Z){ return { name: 'bbb', dep: Z }; });r.js-2.3.6/build/tests/lib/modulesExclude/src/z.js000066400000000000000000000000331334071220400217550ustar00rootroot00000000000000define({ name: 'zzz' });r.js-2.3.6/build/tests/lib/nameInsertion/000077500000000000000000000000001334071220400202145ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/nameInsertion/build.js000066400000000000000000000001241334071220400216460ustar00rootroot00000000000000({ baseUrl: '.', name: 'main', out: 'built.js', optimize: 'none' }) r.js-2.3.6/build/tests/lib/nameInsertion/expected.js000066400000000000000000000001531334071220400223520ustar00rootroot00000000000000 define('foo', [],function () { }); require(['foo'], function () { }); define("main", function(){}); r.js-2.3.6/build/tests/lib/nameInsertion/main.js000066400000000000000000000001101334071220400214660ustar00rootroot00000000000000 define('foo', function () { }); require(['foo'], function () { }); r.js-2.3.6/build/tests/lib/nameInsertion/nested/000077500000000000000000000000001334071220400214765ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/nameInsertion/nested/build.js000066400000000000000000000001241334071220400231300ustar00rootroot00000000000000({ baseUrl: '.', name: 'main', out: 'built.js', optimize: 'none' }) r.js-2.3.6/build/tests/lib/nameInsertion/nested/expected.js000066400000000000000000000002141334071220400236320ustar00rootroot00000000000000 define("main",[], function(){ function define(clazz) { } return { define : define, extend : extend }; });r.js-2.3.6/build/tests/lib/nameInsertion/nested/main.js000066400000000000000000000002131334071220400227540ustar00rootroot00000000000000define("main",[], function(){ function define(clazz) { } return { define : define, extend : extend }; });r.js-2.3.6/build/tests/lib/namespace/000077500000000000000000000000001334071220400173355ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/namespace/build.js000066400000000000000000000001511334071220400207670ustar00rootroot00000000000000({ baseUrl: '.', optimize: 'none', namespace: 'foo', name: 'main', out: 'foo.js' }) r.js-2.3.6/build/tests/lib/namespace/expected.js000066400000000000000000000037201334071220400214760ustar00rootroot00000000000000 (function (define) { foo.define( 'modules/one',[],function ( ){ return { name: 'one' }; }); }(typeof foo.define === 'function' && foo.define.amd ? foo.define : function () { })); if (typeof foo.define === 'function' && foo.define.amd && foo.define.amd.jQuery) { foo.define('modules/two',[],function () { return { name: 'two' }; }); } ; if(false){ }else if(typeof foo.define === 'function' && typeof foo.define.amd === 'object' && foo.define.amd){ foo.define('modules/four',{ name: 'four' }); }; if (typeof foo.define === 'function' && foo.define['amd']) { foo.define('modules/six',{ name: 'six' }); } ; if ('function' === typeof foo.define && foo.define.amd) { foo.define('modules/five',['require','./six'],function (require) { return { name: 'five', six: require('./six') }; }); } ; (function (define) { foo.define('modules/three', ['require','./four','./five'],function (require) { //If have dependencies, get them here var four = require('./four'), five = require('./five'); //Return the module definition. return { name: 'three', fourName: four.name, fiveName: five.name, }; }); }(typeof foo.define === 'function' && foo.define.amd ? foo.define : function (id, factory) { })); foo.requirejs.config({ //Not a real config option, just want something here. placeholder: true }); foo.require.config({ //Not a real config option, just want something here. placeholder: true }); foo.require(['modules/one', 'modules/two', 'modules/three'], function (one, two, three) { console.log("One's name is: " + one.name); console.log("Two's name is: " + two.name); console.log("Two's name is: " + three.name); console.log("Three's fourName is: " + three.fourName); console.log("Three's fiveName is: " + three.fiveName); }); foo.define("main", function(){}); r.js-2.3.6/build/tests/lib/namespace/main.js000066400000000000000000000010551334071220400206200ustar00rootroot00000000000000requirejs.config({ //Not a real config option, just want something here. placeholder: true }); require.config({ //Not a real config option, just want something here. placeholder: true }); require(['modules/one', 'modules/two', 'modules/three'], function (one, two, three) { console.log("One's name is: " + one.name); console.log("Two's name is: " + two.name); console.log("Two's name is: " + three.name); console.log("Three's fourName is: " + three.fourName); console.log("Three's fiveName is: " + three.fiveName); }); r.js-2.3.6/build/tests/lib/namespace/modules/000077500000000000000000000000001334071220400210055ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/namespace/modules/five.js000066400000000000000000000002641334071220400222760ustar00rootroot00000000000000if ("function" === typeof define && define.amd) { define(function (require) { return { name: 'five', six: require('./six') }; }); } r.js-2.3.6/build/tests/lib/namespace/modules/four.js000066400000000000000000000002151334071220400223140ustar00rootroot00000000000000if(false){ }else if(typeof define == "function" && typeof define.amd == "object" && define.amd){ define({ name: 'four' }); }r.js-2.3.6/build/tests/lib/namespace/modules/one.js000066400000000000000000000002441334071220400221240ustar00rootroot00000000000000(function (define) { define( function ( ){ return { name: 'one' }; }); }(typeof define === 'function' && define.amd ? define : function () { })); r.js-2.3.6/build/tests/lib/namespace/modules/six.js000066400000000000000000000001401334071220400221410ustar00rootroot00000000000000if (typeof define === 'function' && define['amd']) { define({ name: 'six' }); } r.js-2.3.6/build/tests/lib/namespace/modules/three.js000066400000000000000000000007011334071220400224500ustar00rootroot00000000000000(function (define) { define('modules/three', function (require) { //If have dependencies, get them here var four = require('./four'), five = require('./five'); //Return the module definition. return { name: 'three', fourName: four.name, fiveName: five.name, }; }); }(typeof define === 'function' && define.amd ? define : function (id, factory) { })); r.js-2.3.6/build/tests/lib/namespace/modules/two.js000066400000000000000000000002111334071220400221460ustar00rootroot00000000000000if (typeof define === 'function' && define.amd && define.amd.jQuery) { define(function () { return { name: 'two' }; }); } r.js-2.3.6/build/tests/lib/namespaceConfig/000077500000000000000000000000001334071220400204635ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/namespaceConfig/build.js000066400000000000000000000002021334071220400221120ustar00rootroot00000000000000({ baseUrl: '.', optimize: 'none', namespace: 'foo', name: 'main', include: ['reqlib'], out: 'foo.js' }) r.js-2.3.6/build/tests/lib/namespaceConfig/expected.js000066400000000000000000002425101334071220400226260ustar00rootroot00000000000000 var foo;(function () { if (!foo || !foo.requirejs) { if (!foo) { foo = {}; } else { require = foo; } /** vim: et:ts=4:sw=4:sts=4 * @license RequireJS 2.1.5 Copyright (c) 2010-2012, The Dojo Foundation All Rights Reserved. * Available via the MIT or new BSD license. * see: http://github.com/jrburke/requirejs for details */ //Not using strict: uneven strict support in browsers, #392, and causes //problems with requirejs.exec()/transpiler plugins that may not be strict. /*jslint regexp: true, nomen: true, sloppy: true */ /*global window, navigator, document, importScripts, setTimeout, opera */ var requirejs, require, define; (function (global) { var req, s, head, baseElement, dataMain, src, interactiveScript, currentlyAddingScript, mainScript, subPath, version = '2.1.5', commentRegExp = /(\/\*([\s\S]*?)\*\/|([^:]|^)\/\/(.*)$)/mg, cjsRequireRegExp = /[^.]\s*require\s*\(\s*["']([^'"\s]+)["']\s*\)/g, jsSuffixRegExp = /\.js$/, currDirRegExp = /^\.\//, op = Object.prototype, ostring = op.toString, hasOwn = op.hasOwnProperty, ap = Array.prototype, apsp = ap.splice, isBrowser = !!(typeof window !== 'undefined' && navigator && document), isWebWorker = !isBrowser && typeof importScripts !== 'undefined', //PS3 indicates loaded and complete, but need to wait for complete //specifically. Sequence is 'loading', 'loaded', execution, // then 'complete'. The UA check is unfortunate, but not sure how //to feature test w/o causing perf issues. readyRegExp = isBrowser && navigator.platform === 'PLAYSTATION 3' ? /^complete$/ : /^(complete|loaded)$/, defContextName = '_', //Oh the tragedy, detecting opera. See the usage of isOpera for reason. isOpera = typeof opera !== 'undefined' && opera.toString() === '[object Opera]', contexts = {}, cfg = {}, globalDefQueue = [], useInteractive = false; function isFunction(it) { return ostring.call(it) === '[object Function]'; } function isArray(it) { return ostring.call(it) === '[object Array]'; } /** * Helper function for iterating over an array. If the func returns * a true value, it will break out of the loop. */ function each(ary, func) { if (ary) { var i; for (i = 0; i < ary.length; i += 1) { if (ary[i] && func(ary[i], i, ary)) { break; } } } } /** * Helper function for iterating over an array backwards. If the func * returns a true value, it will break out of the loop. */ function eachReverse(ary, func) { if (ary) { var i; for (i = ary.length - 1; i > -1; i -= 1) { if (ary[i] && func(ary[i], i, ary)) { break; } } } } function hasProp(obj, prop) { return hasOwn.call(obj, prop); } function getOwn(obj, prop) { return hasProp(obj, prop) && obj[prop]; } /** * Cycles over properties in an object and calls a function for each * property value. If the function returns a truthy value, then the * iteration is stopped. */ function eachProp(obj, func) { var prop; for (prop in obj) { if (hasProp(obj, prop)) { if (func(obj[prop], prop)) { break; } } } } /** * Simple function to mix in properties from source into target, * but only if target does not already have a property of the same name. */ function mixin(target, source, force, deepStringMixin) { if (source) { eachProp(source, function (value, prop) { if (force || !hasProp(target, prop)) { if (deepStringMixin && typeof value !== 'string') { if (!target[prop]) { target[prop] = {}; } mixin(target[prop], value, force, deepStringMixin); } else { target[prop] = value; } } }); } return target; } //Similar to Function.prototype.bind, but the 'this' object is specified //first, since it is easier to read/figure out what 'this' will be. function bind(obj, fn) { return function () { return fn.apply(obj, arguments); }; } function scripts() { return document.getElementsByTagName('script'); } //Allow getting a global that expressed in //dot notation, like 'a.b.c'. function getGlobal(value) { if (!value) { return value; } var g = global; each(value.split('.'), function (part) { g = g[part]; }); return g; } /** * Constructs an error with a pointer to an URL with more information. * @param {String} id the error ID that maps to an ID on a web page. * @param {String} message human readable error. * @param {Error} [err] the original error, if there is one. * * @returns {Error} */ function makeError(id, msg, err, requireModules) { var e = new Error(msg + '\nhttp://requirejs.org/docs/errors.html#' + id); e.requireType = id; e.requireModules = requireModules; if (err) { e.originalError = err; } return e; } if (typeof define !== 'undefined') { //If a define is already in play via another AMD loader, //do not overwrite. return; } if (typeof requirejs !== 'undefined') { if (isFunction(requirejs)) { //Do not overwrite and existing requirejs instance. return; } cfg = requirejs; requirejs = undefined; } //Allow for a require config object if (typeof require !== 'undefined' && !isFunction(require)) { //assume it is a config object. cfg = require; require = undefined; } function newContext(contextName) { var inCheckLoaded, Module, context, handlers, checkLoadedTimeoutId, config = { //Defaults. Do not set a default for map //config to speed up normalize(), which //will run faster if there is no default. waitSeconds: 7, baseUrl: './', paths: {}, pkgs: {}, shim: {}, config: {} }, registry = {}, //registry of just enabled modules, to speed //cycle breaking code when lots of modules //are registered, but not activated. enabledRegistry = {}, undefEvents = {}, defQueue = [], defined = {}, urlFetched = {}, requireCounter = 1, unnormalizedCounter = 1; /** * Trims the . and .. from an array of path segments. * It will keep a leading path segment if a .. will become * the first path segment, to help with module name lookups, * which act like paths, but can be remapped. But the end result, * all paths that use this function should look normalized. * NOTE: this method MODIFIES the input array. * @param {Array} ary the array of path segments. */ function trimDots(ary) { var i, part; for (i = 0; ary[i]; i += 1) { part = ary[i]; if (part === '.') { ary.splice(i, 1); i -= 1; } else if (part === '..') { if (i === 1 && (ary[2] === '..' || ary[0] === '..')) { //End of the line. Keep at least one non-dot //path segment at the front so it can be mapped //correctly to disk. Otherwise, there is likely //no path mapping for a path starting with '..'. //This can still fail, but catches the most reasonable //uses of .. break; } else if (i > 0) { ary.splice(i - 1, 2); i -= 2; } } } } /** * Given a relative module name, like ./something, normalize it to * a real name that can be mapped to a path. * @param {String} name the relative name * @param {String} baseName a real name that the name arg is relative * to. * @param {Boolean} applyMap apply the map config to the value. Should * only be done if this normalization is for a dependency ID. * @returns {String} normalized name */ function normalize(name, baseName, applyMap) { var pkgName, pkgConfig, mapValue, nameParts, i, j, nameSegment, foundMap, foundI, foundStarMap, starI, baseParts = baseName && baseName.split('/'), normalizedBaseParts = baseParts, map = config.map, starMap = map && map['*']; //Adjust any relative paths. if (name && name.charAt(0) === '.') { //If have a base name, try to normalize against it, //otherwise, assume it is a top-level require that will //be relative to baseUrl in the end. if (baseName) { if (getOwn(config.pkgs, baseName)) { //If the baseName is a package name, then just treat it as one //name to concat the name with. normalizedBaseParts = baseParts = [baseName]; } else { //Convert baseName to array, and lop off the last part, //so that . matches that 'directory' and not name of the baseName's //module. For instance, baseName of 'one/two/three', maps to //'one/two/three.js', but we want the directory, 'one/two' for //this normalization. normalizedBaseParts = baseParts.slice(0, baseParts.length - 1); } name = normalizedBaseParts.concat(name.split('/')); trimDots(name); //Some use of packages may use a . path to reference the //'main' module name, so normalize for that. pkgConfig = getOwn(config.pkgs, (pkgName = name[0])); name = name.join('/'); if (pkgConfig && name === pkgName + '/' + pkgConfig.main) { name = pkgName; } } else if (name.indexOf('./') === 0) { // No baseName, so this is ID is resolved relative // to baseUrl, pull off the leading dot. name = name.substring(2); } } //Apply map config if available. if (applyMap && map && (baseParts || starMap)) { nameParts = name.split('/'); for (i = nameParts.length; i > 0; i -= 1) { nameSegment = nameParts.slice(0, i).join('/'); if (baseParts) { //Find the longest baseName segment match in the config. //So, do joins on the biggest to smallest lengths of baseParts. for (j = baseParts.length; j > 0; j -= 1) { mapValue = getOwn(map, baseParts.slice(0, j).join('/')); //baseName segment has config, find if it has one for //this name. if (mapValue) { mapValue = getOwn(mapValue, nameSegment); if (mapValue) { //Match, update name to the new value. foundMap = mapValue; foundI = i; break; } } } } if (foundMap) { break; } //Check for a star map match, but just hold on to it, //if there is a shorter segment match later in a matching //config, then favor over this star map. if (!foundStarMap && starMap && getOwn(starMap, nameSegment)) { foundStarMap = getOwn(starMap, nameSegment); starI = i; } } if (!foundMap && foundStarMap) { foundMap = foundStarMap; foundI = starI; } if (foundMap) { nameParts.splice(0, foundI, foundMap); name = nameParts.join('/'); } } return name; } function removeScript(name) { if (isBrowser) { each(scripts(), function (scriptNode) { if (scriptNode.getAttribute('data-requiremodule') === name && scriptNode.getAttribute('data-requirecontext') === context.contextName) { scriptNode.parentNode.removeChild(scriptNode); return true; } }); } } function hasPathFallback(id) { var pathConfig = getOwn(config.paths, id); if (pathConfig && isArray(pathConfig) && pathConfig.length > 1) { removeScript(id); //Pop off the first array value, since it failed, and //retry pathConfig.shift(); context.require.undef(id); context.require([id]); return true; } } //Turns a plugin!resource to [plugin, resource] //with the plugin being undefined if the name //did not have a plugin prefix. function splitPrefix(name) { var prefix, index = name ? name.indexOf('!') : -1; if (index > -1) { prefix = name.substring(0, index); name = name.substring(index + 1, name.length); } return [prefix, name]; } /** * Creates a module mapping that includes plugin prefix, module * name, and path. If parentModuleMap is provided it will * also normalize the name via require.normalize() * * @param {String} name the module name * @param {String} [parentModuleMap] parent module map * for the module name, used to resolve relative names. * @param {Boolean} isNormalized: is the ID already normalized. * This is true if this call is done for a define() module ID. * @param {Boolean} applyMap: apply the map config to the ID. * Should only be true if this map is for a dependency. * * @returns {Object} */ function makeModuleMap(name, parentModuleMap, isNormalized, applyMap) { var url, pluginModule, suffix, nameParts, prefix = null, parentName = parentModuleMap ? parentModuleMap.name : null, originalName = name, isDefine = true, normalizedName = ''; //If no name, then it means it is a require call, generate an //internal name. if (!name) { isDefine = false; name = '_@r' + (requireCounter += 1); } nameParts = splitPrefix(name); prefix = nameParts[0]; name = nameParts[1]; if (prefix) { prefix = normalize(prefix, parentName, applyMap); pluginModule = getOwn(defined, prefix); } //Account for relative paths if there is a base name. if (name) { if (prefix) { if (pluginModule && pluginModule.normalize) { //Plugin is loaded, use its normalize method. normalizedName = pluginModule.normalize(name, function (name) { return normalize(name, parentName, applyMap); }); } else { normalizedName = normalize(name, parentName, applyMap); } } else { //A regular module. normalizedName = normalize(name, parentName, applyMap); //Normalized name may be a plugin ID due to map config //application in normalize. The map config values must //already be normalized, so do not need to redo that part. nameParts = splitPrefix(normalizedName); prefix = nameParts[0]; normalizedName = nameParts[1]; isNormalized = true; url = context.nameToUrl(normalizedName); } } //If the id is a plugin id that cannot be determined if it needs //normalization, stamp it with a unique ID so two matching relative //ids that may conflict can be separate. suffix = prefix && !pluginModule && !isNormalized ? '_unnormalized' + (unnormalizedCounter += 1) : ''; return { prefix: prefix, name: normalizedName, parentMap: parentModuleMap, unnormalized: !!suffix, url: url, originalName: originalName, isDefine: isDefine, id: (prefix ? prefix + '!' + normalizedName : normalizedName) + suffix }; } function getModule(depMap) { var id = depMap.id, mod = getOwn(registry, id); if (!mod) { mod = registry[id] = new context.Module(depMap); } return mod; } function on(depMap, name, fn) { var id = depMap.id, mod = getOwn(registry, id); if (hasProp(defined, id) && (!mod || mod.defineEmitComplete)) { if (name === 'defined') { fn(defined[id]); } } else { getModule(depMap).on(name, fn); } } function onError(err, errback) { var ids = err.requireModules, notified = false; if (errback) { errback(err); } else { each(ids, function (id) { var mod = getOwn(registry, id); if (mod) { //Set error on module, so it skips timeout checks. mod.error = err; if (mod.events.error) { notified = true; mod.emit('error', err); } } }); if (!notified) { req.onError(err); } } } /** * Internal method to transfer globalQueue items to this context's * defQueue. */ function takeGlobalQueue() { //Push all the globalDefQueue items into the context's defQueue if (globalDefQueue.length) { //Array splice in the values since the context code has a //local var ref to defQueue, so cannot just reassign the one //on context. apsp.apply(defQueue, [defQueue.length - 1, 0].concat(globalDefQueue)); globalDefQueue = []; } } handlers = { 'require': function (mod) { if (mod.require) { return mod.require; } else { return (mod.require = context.makeRequire(mod.map)); } }, 'exports': function (mod) { mod.usingExports = true; if (mod.map.isDefine) { if (mod.exports) { return mod.exports; } else { return (mod.exports = defined[mod.map.id] = {}); } } }, 'module': function (mod) { if (mod.module) { return mod.module; } else { return (mod.module = { id: mod.map.id, uri: mod.map.url, config: function () { return (config.config && getOwn(config.config, mod.map.id)) || {}; }, exports: defined[mod.map.id] }); } } }; function cleanRegistry(id) { //Clean up machinery used for waiting modules. delete registry[id]; delete enabledRegistry[id]; } function breakCycle(mod, traced, processed) { var id = mod.map.id; if (mod.error) { mod.emit('error', mod.error); } else { traced[id] = true; each(mod.depMaps, function (depMap, i) { var depId = depMap.id, dep = getOwn(registry, depId); //Only force things that have not completed //being defined, so still in the registry, //and only if it has not been matched up //in the module already. if (dep && !mod.depMatched[i] && !processed[depId]) { if (getOwn(traced, depId)) { mod.defineDep(i, defined[depId]); mod.check(); //pass false? } else { breakCycle(dep, traced, processed); } } }); processed[id] = true; } } function checkLoaded() { var map, modId, err, usingPathFallback, waitInterval = config.waitSeconds * 1000, //It is possible to disable the wait interval by using waitSeconds of 0. expired = waitInterval && (context.startTime + waitInterval) < new Date().getTime(), noLoads = [], reqCalls = [], stillLoading = false, needCycleCheck = true; //Do not bother if this call was a result of a cycle break. if (inCheckLoaded) { return; } inCheckLoaded = true; //Figure out the state of all the modules. eachProp(enabledRegistry, function (mod) { map = mod.map; modId = map.id; //Skip things that are not enabled or in error state. if (!mod.enabled) { return; } if (!map.isDefine) { reqCalls.push(mod); } if (!mod.error) { //If the module should be executed, and it has not //been inited and time is up, remember it. if (!mod.inited && expired) { if (hasPathFallback(modId)) { usingPathFallback = true; stillLoading = true; } else { noLoads.push(modId); removeScript(modId); } } else if (!mod.inited && mod.fetched && map.isDefine) { stillLoading = true; if (!map.prefix) { //No reason to keep looking for unfinished //loading. If the only stillLoading is a //plugin resource though, keep going, //because it may be that a plugin resource //is waiting on a non-plugin cycle. return (needCycleCheck = false); } } } }); if (expired && noLoads.length) { //If wait time expired, throw error of unloaded modules. err = makeError('timeout', 'Load timeout for modules: ' + noLoads, null, noLoads); err.contextName = context.contextName; return onError(err); } //Not expired, check for a cycle. if (needCycleCheck) { each(reqCalls, function (mod) { breakCycle(mod, {}, {}); }); } //If still waiting on loads, and the waiting load is something //other than a plugin resource, or there are still outstanding //scripts, then just try back later. if ((!expired || usingPathFallback) && stillLoading) { //Something is still waiting to load. Wait for it, but only //if a timeout is not already in effect. if ((isBrowser || isWebWorker) && !checkLoadedTimeoutId) { checkLoadedTimeoutId = setTimeout(function () { checkLoadedTimeoutId = 0; checkLoaded(); }, 50); } } inCheckLoaded = false; } Module = function (map) { this.events = getOwn(undefEvents, map.id) || {}; this.map = map; this.shim = getOwn(config.shim, map.id); this.depExports = []; this.depMaps = []; this.depMatched = []; this.pluginMaps = {}; this.depCount = 0; /* this.exports this.factory this.depMaps = [], this.enabled, this.fetched */ }; Module.prototype = { init: function (depMaps, factory, errback, options) { options = options || {}; //Do not do more inits if already done. Can happen if there //are multiple define calls for the same module. That is not //a normal, common case, but it is also not unexpected. if (this.inited) { return; } this.factory = factory; if (errback) { //Register for errors on this module. this.on('error', errback); } else if (this.events.error) { //If no errback already, but there are error listeners //on this module, set up an errback to pass to the deps. errback = bind(this, function (err) { this.emit('error', err); }); } //Do a copy of the dependency array, so that //source inputs are not modified. For example //"shim" deps are passed in here directly, and //doing a direct modification of the depMaps array //would affect that config. this.depMaps = depMaps && depMaps.slice(0); this.errback = errback; //Indicate this module has be initialized this.inited = true; this.ignore = options.ignore; //Could have option to init this module in enabled mode, //or could have been previously marked as enabled. However, //the dependencies are not known until init is called. So //if enabled previously, now trigger dependencies as enabled. if (options.enabled || this.enabled) { //Enable this module and dependencies. //Will call this.check() this.enable(); } else { this.check(); } }, defineDep: function (i, depExports) { //Because of cycles, defined callback for a given //export can be called more than once. if (!this.depMatched[i]) { this.depMatched[i] = true; this.depCount -= 1; this.depExports[i] = depExports; } }, fetch: function () { if (this.fetched) { return; } this.fetched = true; context.startTime = (new Date()).getTime(); var map = this.map; //If the manager is for a plugin managed resource, //ask the plugin to load it now. if (this.shim) { context.makeRequire(this.map, { enableBuildCallback: true })(this.shim.deps || [], bind(this, function () { return map.prefix ? this.callPlugin() : this.load(); })); } else { //Regular dependency. return map.prefix ? this.callPlugin() : this.load(); } }, load: function () { var url = this.map.url; //Regular dependency. if (!urlFetched[url]) { urlFetched[url] = true; context.load(this.map.id, url); } }, /** * Checks if the module is ready to define itself, and if so, * define it. */ check: function () { if (!this.enabled || this.enabling) { return; } var err, cjsModule, id = this.map.id, depExports = this.depExports, exports = this.exports, factory = this.factory; if (!this.inited) { this.fetch(); } else if (this.error) { this.emit('error', this.error); } else if (!this.defining) { //The factory could trigger another require call //that would result in checking this module to //define itself again. If already in the process //of doing that, skip this work. this.defining = true; if (this.depCount < 1 && !this.defined) { if (isFunction(factory)) { //If there is an error listener, favor passing //to that instead of throwing an error. if (this.events.error) { try { exports = context.execCb(id, factory, depExports, exports); } catch (e) { err = e; } } else { exports = context.execCb(id, factory, depExports, exports); } if (this.map.isDefine) { //If setting exports via 'module' is in play, //favor that over return value and exports. After that, //favor a non-undefined return value over exports use. cjsModule = this.module; if (cjsModule && cjsModule.exports !== undefined && //Make sure it is not already the exports value cjsModule.exports !== this.exports) { exports = cjsModule.exports; } else if (exports === undefined && this.usingExports) { //exports already set the defined value. exports = this.exports; } } if (err) { err.requireMap = this.map; err.requireModules = [this.map.id]; err.requireType = 'define'; return onError((this.error = err)); } } else { //Just a literal value exports = factory; } this.exports = exports; if (this.map.isDefine && !this.ignore) { defined[id] = exports; if (req.onResourceLoad) { req.onResourceLoad(context, this.map, this.depMaps); } } //Clean up cleanRegistry(id); this.defined = true; } //Finished the define stage. Allow calling check again //to allow define notifications below in the case of a //cycle. this.defining = false; if (this.defined && !this.defineEmitted) { this.defineEmitted = true; this.emit('defined', this.exports); this.defineEmitComplete = true; } } }, callPlugin: function () { var map = this.map, id = map.id, //Map already normalized the prefix. pluginMap = makeModuleMap(map.prefix); //Mark this as a dependency for this plugin, so it //can be traced for cycles. this.depMaps.push(pluginMap); on(pluginMap, 'defined', bind(this, function (plugin) { var load, normalizedMap, normalizedMod, name = this.map.name, parentName = this.map.parentMap ? this.map.parentMap.name : null, localRequire = context.makeRequire(map.parentMap, { enableBuildCallback: true }); //If current map is not normalized, wait for that //normalized name to load instead of continuing. if (this.map.unnormalized) { //Normalize the ID if the plugin allows it. if (plugin.normalize) { name = plugin.normalize(name, function (name) { return normalize(name, parentName, true); }) || ''; } //prefix and name should already be normalized, no need //for applying map config again either. normalizedMap = makeModuleMap(map.prefix + '!' + name, this.map.parentMap); on(normalizedMap, 'defined', bind(this, function (value) { this.init([], function () { return value; }, null, { enabled: true, ignore: true }); })); normalizedMod = getOwn(registry, normalizedMap.id); if (normalizedMod) { //Mark this as a dependency for this plugin, so it //can be traced for cycles. this.depMaps.push(normalizedMap); if (this.events.error) { normalizedMod.on('error', bind(this, function (err) { this.emit('error', err); })); } normalizedMod.enable(); } return; } load = bind(this, function (value) { this.init([], function () { return value; }, null, { enabled: true }); }); load.error = bind(this, function (err) { this.inited = true; this.error = err; err.requireModules = [id]; //Remove temp unnormalized modules for this module, //since they will never be resolved otherwise now. eachProp(registry, function (mod) { if (mod.map.id.indexOf(id + '_unnormalized') === 0) { cleanRegistry(mod.map.id); } }); onError(err); }); //Allow plugins to load other code without having to know the //context or how to 'complete' the load. load.fromText = bind(this, function (text, textAlt) { /*jslint evil: true */ var moduleName = map.name, moduleMap = makeModuleMap(moduleName), hasInteractive = useInteractive; //As of 2.1.0, support just passing the text, to reinforce //fromText only being called once per resource. Still //support old style of passing moduleName but discard //that moduleName in favor of the internal ref. if (textAlt) { text = textAlt; } //Turn off interactive script matching for IE for any define //calls in the text, then turn it back on at the end. if (hasInteractive) { useInteractive = false; } //Prime the system by creating a module instance for //it. getModule(moduleMap); //Transfer any config to this other module. if (hasProp(config.config, id)) { config.config[moduleName] = config.config[id]; } try { req.exec(text); } catch (e) { return onError(makeError('fromtexteval', 'fromText eval for ' + id + ' failed: ' + e, e, [id])); } if (hasInteractive) { useInteractive = true; } //Mark this as a dependency for the plugin //resource this.depMaps.push(moduleMap); //Support anonymous modules. context.completeLoad(moduleName); //Bind the value of that module to the value for this //resource ID. localRequire([moduleName], load); }); //Use parentName here since the plugin's name is not reliable, //could be some weird string with no path that actually wants to //reference the parentName's path. plugin.load(map.name, localRequire, load, config); })); context.enable(pluginMap, this); this.pluginMaps[pluginMap.id] = pluginMap; }, enable: function () { enabledRegistry[this.map.id] = this; this.enabled = true; //Set flag mentioning that the module is enabling, //so that immediate calls to the defined callbacks //for dependencies do not trigger inadvertent load //with the depCount still being zero. this.enabling = true; //Enable each dependency each(this.depMaps, bind(this, function (depMap, i) { var id, mod, handler; if (typeof depMap === 'string') { //Dependency needs to be converted to a depMap //and wired up to this module. depMap = makeModuleMap(depMap, (this.map.isDefine ? this.map : this.map.parentMap), false, !this.skipMap); this.depMaps[i] = depMap; handler = getOwn(handlers, depMap.id); if (handler) { this.depExports[i] = handler(this); return; } this.depCount += 1; on(depMap, 'defined', bind(this, function (depExports) { this.defineDep(i, depExports); this.check(); })); if (this.errback) { on(depMap, 'error', this.errback); } } id = depMap.id; mod = registry[id]; //Skip special modules like 'require', 'exports', 'module' //Also, don't call enable if it is already enabled, //important in circular dependency cases. if (!hasProp(handlers, id) && mod && !mod.enabled) { context.enable(depMap, this); } })); //Enable each plugin that is used in //a dependency eachProp(this.pluginMaps, bind(this, function (pluginMap) { var mod = getOwn(registry, pluginMap.id); if (mod && !mod.enabled) { context.enable(pluginMap, this); } })); this.enabling = false; this.check(); }, on: function (name, cb) { var cbs = this.events[name]; if (!cbs) { cbs = this.events[name] = []; } cbs.push(cb); }, emit: function (name, evt) { each(this.events[name], function (cb) { cb(evt); }); if (name === 'error') { //Now that the error handler was triggered, remove //the listeners, since this broken Module instance //can stay around for a while in the registry. delete this.events[name]; } } }; function callGetModule(args) { //Skip modules already defined. if (!hasProp(defined, args[0])) { getModule(makeModuleMap(args[0], null, true)).init(args[1], args[2]); } } function removeListener(node, func, name, ieName) { //Favor detachEvent because of IE9 //issue, see attachEvent/addEventListener comment elsewhere //in this file. if (node.detachEvent && !isOpera) { //Probably IE. If not it will throw an error, which will be //useful to know. if (ieName) { node.detachEvent(ieName, func); } } else { node.removeEventListener(name, func, false); } } /** * Given an event from a script node, get the requirejs info from it, * and then removes the event listeners on the node. * @param {Event} evt * @returns {Object} */ function getScriptData(evt) { //Using currentTarget instead of target for Firefox 2.0's sake. Not //all old browsers will be supported, but this one was easy enough //to support and still makes sense. var node = evt.currentTarget || evt.srcElement; //Remove the listeners once here. removeListener(node, context.onScriptLoad, 'load', 'onreadystatechange'); removeListener(node, context.onScriptError, 'error'); return { node: node, id: node && node.getAttribute('data-requiremodule') }; } function intakeDefines() { var args; //Any defined modules in the global queue, intake them now. takeGlobalQueue(); //Make sure any remaining defQueue items get properly processed. while (defQueue.length) { args = defQueue.shift(); if (args[0] === null) { return onError(makeError('mismatch', 'Mismatched anonymous define() module: ' + args[args.length - 1])); } else { //args are id, deps, factory. Should be normalized by the //define() function. callGetModule(args); } } } context = { config: config, contextName: contextName, registry: registry, defined: defined, urlFetched: urlFetched, defQueue: defQueue, Module: Module, makeModuleMap: makeModuleMap, nextTick: req.nextTick, onError: onError, /** * Set a configuration for the context. * @param {Object} cfg config object to integrate. */ configure: function (cfg) { //Make sure the baseUrl ends in a slash. if (cfg.baseUrl) { if (cfg.baseUrl.charAt(cfg.baseUrl.length - 1) !== '/') { cfg.baseUrl += '/'; } } //Save off the paths and packages since they require special processing, //they are additive. var pkgs = config.pkgs, shim = config.shim, objs = { paths: true, config: true, map: true }; eachProp(cfg, function (value, prop) { if (objs[prop]) { if (prop === 'map') { if (!config.map) { config.map = {}; } mixin(config[prop], value, true, true); } else { mixin(config[prop], value, true); } } else { config[prop] = value; } }); //Merge shim if (cfg.shim) { eachProp(cfg.shim, function (value, id) { //Normalize the structure if (isArray(value)) { value = { deps: value }; } if ((value.exports || value.init) && !value.exportsFn) { value.exportsFn = context.makeShimExports(value); } shim[id] = value; }); config.shim = shim; } //Adjust packages if necessary. if (cfg.packages) { each(cfg.packages, function (pkgObj) { var location; pkgObj = typeof pkgObj === 'string' ? { name: pkgObj } : pkgObj; location = pkgObj.location; //Create a brand new object on pkgs, since currentPackages can //be passed in again, and config.pkgs is the internal transformed //state for all package configs. pkgs[pkgObj.name] = { name: pkgObj.name, location: location || pkgObj.name, //Remove leading dot in main, so main paths are normalized, //and remove any trailing .js, since different package //envs have different conventions: some use a module name, //some use a file name. main: (pkgObj.main || 'main') .replace(currDirRegExp, '') .replace(jsSuffixRegExp, '') }; }); //Done with modifications, assing packages back to context config config.pkgs = pkgs; } //If there are any "waiting to execute" modules in the registry, //update the maps for them, since their info, like URLs to load, //may have changed. eachProp(registry, function (mod, id) { //If module already has init called, since it is too //late to modify them, and ignore unnormalized ones //since they are transient. if (!mod.inited && !mod.map.unnormalized) { mod.map = makeModuleMap(id); } }); //If a deps array or a config callback is specified, then call //require with those args. This is useful when require is defined as a //config object before require.js is loaded. if (cfg.deps || cfg.callback) { context.require(cfg.deps || [], cfg.callback); } }, makeShimExports: function (value) { function fn() { var ret; if (value.init) { ret = value.init.apply(global, arguments); } return ret || (value.exports && getGlobal(value.exports)); } return fn; }, makeRequire: function (relMap, options) { options = options || {}; function localRequire(deps, callback, errback) { var id, map, requireMod; if (options.enableBuildCallback && callback && isFunction(callback)) { callback.__requireJsBuild = true; } if (typeof deps === 'string') { if (isFunction(callback)) { //Invalid call return onError(makeError('requireargs', 'Invalid require call'), errback); } //If require|exports|module are requested, get the //value for them from the special handlers. Caveat: //this only works while module is being defined. if (relMap && hasProp(handlers, deps)) { return handlers[deps](registry[relMap.id]); } //Synchronous access to one module. If require.get is //available (as in the Node adapter), prefer that. if (req.get) { return req.get(context, deps, relMap, localRequire); } //Normalize module name, if it contains . or .. map = makeModuleMap(deps, relMap, false, true); id = map.id; if (!hasProp(defined, id)) { return onError(makeError('notloaded', 'Module name "' + id + '" has not been loaded yet for context: ' + contextName + (relMap ? '' : '. Use require([])'))); } return defined[id]; } //Grab defines waiting in the global queue. intakeDefines(); //Mark all the dependencies as needing to be loaded. context.nextTick(function () { //Some defines could have been added since the //require call, collect them. intakeDefines(); requireMod = getModule(makeModuleMap(null, relMap)); //Store if map config should be applied to this require //call for dependencies. requireMod.skipMap = options.skipMap; requireMod.init(deps, callback, errback, { enabled: true }); checkLoaded(); }); return localRequire; } mixin(localRequire, { isBrowser: isBrowser, /** * Converts a module name + .extension into an URL path. * *Requires* the use of a module name. It does not support using * plain URLs like nameToUrl. */ toUrl: function (moduleNamePlusExt) { var ext, index = moduleNamePlusExt.lastIndexOf('.'), segment = moduleNamePlusExt.split('/')[0], isRelative = segment === '.' || segment === '..'; //Have a file extension alias, and it is not the //dots from a relative path. if (index !== -1 && (!isRelative || index > 1)) { ext = moduleNamePlusExt.substring(index, moduleNamePlusExt.length); moduleNamePlusExt = moduleNamePlusExt.substring(0, index); } return context.nameToUrl(normalize(moduleNamePlusExt, relMap && relMap.id, true), ext, true); }, defined: function (id) { return hasProp(defined, makeModuleMap(id, relMap, false, true).id); }, specified: function (id) { id = makeModuleMap(id, relMap, false, true).id; return hasProp(defined, id) || hasProp(registry, id); } }); //Only allow undef on top level require calls if (!relMap) { localRequire.undef = function (id) { //Bind any waiting define() calls to this context, //fix for #408 takeGlobalQueue(); var map = makeModuleMap(id, relMap, true), mod = getOwn(registry, id); delete defined[id]; delete urlFetched[map.url]; delete undefEvents[id]; if (mod) { //Hold on to listeners in case the //module will be attempted to be reloaded //using a different config. if (mod.events.defined) { undefEvents[id] = mod.events; } cleanRegistry(id); } }; } return localRequire; }, /** * Called to enable a module if it is still in the registry * awaiting enablement. A second arg, parent, the parent module, * is passed in for context, when this method is overriden by * the optimizer. Not shown here to keep code compact. */ enable: function (depMap) { var mod = getOwn(registry, depMap.id); if (mod) { getModule(depMap).enable(); } }, /** * Internal method used by environment adapters to complete a load event. * A load event could be a script load or just a load pass from a synchronous * load call. * @param {String} moduleName the name of the module to potentially complete. */ completeLoad: function (moduleName) { var found, args, mod, shim = getOwn(config.shim, moduleName) || {}, shExports = shim.exports; takeGlobalQueue(); while (defQueue.length) { args = defQueue.shift(); if (args[0] === null) { args[0] = moduleName; //If already found an anonymous module and bound it //to this name, then this is some other anon module //waiting for its completeLoad to fire. if (found) { break; } found = true; } else if (args[0] === moduleName) { //Found matching define call for this script! found = true; } callGetModule(args); } //Do this after the cycle of callGetModule in case the result //of those calls/init calls changes the registry. mod = getOwn(registry, moduleName); if (!found && !hasProp(defined, moduleName) && mod && !mod.inited) { if (config.enforceDefine && (!shExports || !getGlobal(shExports))) { if (hasPathFallback(moduleName)) { return; } else { return onError(makeError('nodefine', 'No define call for ' + moduleName, null, [moduleName])); } } else { //A script that does not call define(), so just simulate //the call for it. callGetModule([moduleName, (shim.deps || []), shim.exportsFn]); } } checkLoaded(); }, /** * Converts a module name to a file path. Supports cases where * moduleName may actually be just an URL. * Note that it **does not** call normalize on the moduleName, * it is assumed to have already been normalized. This is an * internal API, not a public one. Use toUrl for the public API. */ nameToUrl: function (moduleName, ext, skipExt) { var paths, pkgs, pkg, pkgPath, syms, i, parentModule, url, parentPath; //If a colon is in the URL, it indicates a protocol is used and it is just //an URL to a file, or if it starts with a slash, contains a query arg (i.e. ?) //or ends with .js, then assume the user meant to use an url and not a module id. //The slash is important for protocol-less URLs as well as full paths. if (req.jsExtRegExp.test(moduleName)) { //Just a plain path, not module name lookup, so just return it. //Add extension if it is included. This is a bit wonky, only non-.js things pass //an extension, this method probably needs to be reworked. url = moduleName + (ext || ''); } else { //A module that needs to be converted to a path. paths = config.paths; pkgs = config.pkgs; syms = moduleName.split('/'); //For each module name segment, see if there is a path //registered for it. Start with most specific name //and work up from it. for (i = syms.length; i > 0; i -= 1) { parentModule = syms.slice(0, i).join('/'); pkg = getOwn(pkgs, parentModule); parentPath = getOwn(paths, parentModule); if (parentPath) { //If an array, it means there are a few choices, //Choose the one that is desired if (isArray(parentPath)) { parentPath = parentPath[0]; } syms.splice(0, i, parentPath); break; } else if (pkg) { //If module name is just the package name, then looking //for the main module. if (moduleName === pkg.name) { pkgPath = pkg.location + '/' + pkg.main; } else { pkgPath = pkg.location; } syms.splice(0, i, pkgPath); break; } } //Join the path parts together, then figure out if baseUrl is needed. url = syms.join('/'); url += (ext || (/\?/.test(url) || skipExt ? '' : '.js')); url = (url.charAt(0) === '/' || url.match(/^[\w\+\.\-]+:/) ? '' : config.baseUrl) + url; } return config.urlArgs ? url + ((url.indexOf('?') === -1 ? '?' : '&') + config.urlArgs) : url; }, //Delegates to req.load. Broken out as a separate function to //allow overriding in the optimizer. load: function (id, url) { req.load(context, id, url); }, /** * Executes a module callack function. Broken out as a separate function * solely to allow the build system to sequence the files in the built * layer in the right sequence. * * @private */ execCb: function (name, callback, args, exports) { return callback.apply(exports, args); }, /** * callback for script loads, used to check status of loading. * * @param {Event} evt the event from the browser for the script * that was loaded. */ onScriptLoad: function (evt) { //Using currentTarget instead of target for Firefox 2.0's sake. Not //all old browsers will be supported, but this one was easy enough //to support and still makes sense. if (evt.type === 'load' || (readyRegExp.test((evt.currentTarget || evt.srcElement).readyState))) { //Reset interactive script so a script node is not held onto for //to long. interactiveScript = null; //Pull out the name of the module and the context. var data = getScriptData(evt); context.completeLoad(data.id); } }, /** * Callback for script errors. */ onScriptError: function (evt) { var data = getScriptData(evt); if (!hasPathFallback(data.id)) { return onError(makeError('scripterror', 'Script error', evt, [data.id])); } } }; context.require = context.makeRequire(); return context; } /** * Main entry point. * * If the only argument to require is a string, then the module that * is represented by that string is fetched for the appropriate context. * * If the first argument is an array, then it will be treated as an array * of dependency string names to fetch. An optional function callback can * be specified to execute when all of those dependencies are available. * * Make a local req variable to help Caja compliance (it assumes things * on a require that are not standardized), and to give a short * name for minification/local scope use. */ req = requirejs = function (deps, callback, errback, optional) { //Find the right context, use default var context, config, contextName = defContextName; // Determine if have config object in the call. if (!isArray(deps) && typeof deps !== 'string') { // deps is a config object config = deps; if (isArray(callback)) { // Adjust args if there are dependencies deps = callback; callback = errback; errback = optional; } else { deps = []; } } if (config && config.context) { contextName = config.context; } context = getOwn(contexts, contextName); if (!context) { context = contexts[contextName] = req.s.newContext(contextName); } if (config) { context.configure(config); } return context.require(deps, callback, errback); }; /** * Support foo.require.config() to make it easier to cooperate with other * AMD loaders on globally agreed names. */ req.config = function (config) { return req(config); }; /** * Execute something after the current tick * of the event loop. Override for other envs * that have a better solution than setTimeout. * @param {Function} fn function to execute later. */ req.nextTick = typeof setTimeout !== 'undefined' ? function (fn) { setTimeout(fn, 4); } : function (fn) { fn(); }; /** * Export require as a global, but only if it does not already exist. */ if (!require) { require = req; } req.version = version; //Used to filter out dependencies that are already paths. req.jsExtRegExp = /^\/|:|\?|\.js$/; req.isBrowser = isBrowser; s = req.s = { contexts: contexts, newContext: newContext }; //Create default context. req({}); //Exports some context-sensitive methods on global require. each([ 'toUrl', 'undef', 'defined', 'specified' ], function (prop) { //Reference from contexts instead of early binding to default context, //so that during builds, the latest instance of the default context //with its config gets used. req[prop] = function () { var ctx = contexts[defContextName]; return ctx.require[prop].apply(ctx, arguments); }; }); if (isBrowser) { head = s.head = document.getElementsByTagName('head')[0]; //If BASE tag is in play, using appendChild is a problem for IE6. //When that browser dies, this can be removed. Details in this jQuery bug: //http://dev.jquery.com/ticket/2709 baseElement = document.getElementsByTagName('base')[0]; if (baseElement) { head = s.head = baseElement.parentNode; } } /** * Any errors that require explicitly generates will be passed to this * function. Intercept/override it if you want custom error handling. * @param {Error} err the error object. */ req.onError = function (err) { throw err; }; /** * Does the request to load a module for the browser case. * Make this a separate function to allow other environments * to override it. * * @param {Object} context the require context to find state. * @param {String} moduleName the name of the module. * @param {Object} url the URL to the module. */ req.load = function (context, moduleName, url) { var config = (context && context.config) || {}, node; if (isBrowser) { //In the browser so use a script tag node = config.xhtml ? document.createElementNS('http://www.w3.org/1999/xhtml', 'html:script') : document.createElement('script'); node.type = config.scriptType || 'text/javascript'; node.charset = 'utf-8'; node.async = true; node.setAttribute('data-requirecontext', context.contextName); node.setAttribute('data-requiremodule', moduleName); //Set up load listener. Test attachEvent first because IE9 has //a subtle issue in its addEventListener and script onload firings //that do not match the behavior of all other browsers with //addEventListener support, which fire the onload event for a //script right after the script execution. See: //https://connect.microsoft.com/IE/feedback/details/648057/script-onload-event-is-not-fired-immediately-after-script-execution //UNFORTUNATELY Opera implements attachEvent but does not follow the script //script execution mode. if (node.attachEvent && //Check if node.attachEvent is artificially added by custom script or //natively supported by browser //read https://github.com/jrburke/requirejs/issues/187 //if we can NOT find [native code] then it must NOT natively supported. //in IE8, node.attachEvent does not have toString() //Note the test for "[native code" with no closing brace, see: //https://github.com/jrburke/requirejs/issues/273 !(node.attachEvent.toString && node.attachEvent.toString().indexOf('[native code') < 0) && !isOpera) { //Probably IE. IE (at least 6-8) do not fire //script onload right after executing the script, so //we cannot tie the anonymous define call to a name. //However, IE reports the script as being in 'interactive' //readyState at the time of the define call. useInteractive = true; node.attachEvent('onreadystatechange', context.onScriptLoad); //It would be great to add an error handler here to catch //404s in IE9+. However, onreadystatechange will fire before //the error handler, so that does not help. If addEventListener //is used, then IE will fire error before load, but we cannot //use that pathway given the connect.microsoft.com issue //mentioned above about not doing the 'script execute, //then fire the script load event listener before execute //next script' that other browsers do. //Best hope: IE10 fixes the issues, //and then destroys all installs of IE 6-9. //node.attachEvent('onerror', context.onScriptError); } else { node.addEventListener('load', context.onScriptLoad, false); node.addEventListener('error', context.onScriptError, false); } node.src = url; //For some cache cases in IE 6-8, the script executes before the end //of the appendChild execution, so to tie an anonymous define //call to the module name (which is stored on the node), hold on //to a reference to this node, but clear after the DOM insertion. currentlyAddingScript = node; if (baseElement) { head.insertBefore(node, baseElement); } else { head.appendChild(node); } currentlyAddingScript = null; return node; } else if (isWebWorker) { try { //In a web worker, use importScripts. This is not a very //efficient use of importScripts, importScripts will block until //its script is downloaded and evaluated. However, if web workers //are in play, the expectation that a build has been done so that //only one script needs to be loaded anyway. This may need to be //reevaluated if other use cases become common. importScripts(url); //Account for anonymous modules context.completeLoad(moduleName); } catch (e) { context.onError(makeError('importscripts', 'importScripts failed for ' + moduleName + ' at ' + url, e, [moduleName])); } } }; function getInteractiveScript() { if (interactiveScript && interactiveScript.readyState === 'interactive') { return interactiveScript; } eachReverse(scripts(), function (script) { if (script.readyState === 'interactive') { return (interactiveScript = script); } }); return interactiveScript; } //Look for a data-main script attribute, which could also adjust the baseUrl. if (isBrowser) { //Figure out baseUrl. Get it from the script tag with require.js in it. eachReverse(scripts(), function (script) { //Set the 'head' where we can append children by //using the script's parent. if (!head) { head = script.parentNode; } //Look for a data-main attribute to set main script for the page //to load. If it is there, the path to data main becomes the //baseUrl, if it is not already set. dataMain = script.getAttribute('data-main'); if (dataMain) { //Set final baseUrl if there is not already an explicit one. if (!cfg.baseUrl) { //Pull off the directory of data-main for use as the //baseUrl. src = dataMain.split('/'); mainScript = src.pop(); subPath = src.length ? src.join('/') + '/' : './'; cfg.baseUrl = subPath; dataMain = mainScript; } //Strip off any trailing .js since dataMain is now //like a module name. dataMain = dataMain.replace(jsSuffixRegExp, ''); //Put the data-main script in the files to load. cfg.deps = cfg.deps ? cfg.deps.concat(dataMain) : [dataMain]; return true; } }); } /** * The function that handles definitions of modules. Differs from * require() in that a string for the module should be the first argument, * and the function to execute after dependencies are loaded should * return a value to define the module corresponding to the first argument's * name. */ define = function (name, deps, callback) { var node, context; //Allow for anonymous modules if (typeof name !== 'string') { //Adjust args appropriately callback = deps; deps = name; name = null; } //This module may not have dependencies if (!isArray(deps)) { callback = deps; deps = []; } //If no name, and callback is a function, then figure out if it a //CommonJS thing with dependencies. if (!deps.length && isFunction(callback)) { //Remove comments from the callback string, //look for require calls, and pull them into the dependencies, //but only if there are function args. if (callback.length) { callback .toString() .replace(commentRegExp, '') .replace(cjsRequireRegExp, function (match, dep) { deps.push(dep); }); //May be a CommonJS thing even without require calls, but still //could use exports, and module. Avoid doing exports and module //work though if it just needs require. //REQUIRES the function to expect the CommonJS variables in the //order listed below. deps = (callback.length === 1 ? ['require'] : ['require', 'exports', 'module']).concat(deps); } } //If in IE 6-8 and hit an anonymous define() call, do the interactive //work. if (useInteractive) { node = currentlyAddingScript || getInteractiveScript(); if (node) { if (!name) { name = node.getAttribute('data-requiremodule'); } context = contexts[node.getAttribute('data-requirecontext')]; } } //Always save off evaluating the def call until the script onload handler. //This allows multiple modules to be in a file without prematurely //tracing dependencies, and allows for anonymous module support, //where the module name is not known until the script onload event //occurs. If no context, use the global queue, and get it processed //in the onscript load callback. (context ? context.defQueue : globalDefQueue).push([name, deps, callback]); }; define.amd = { jQuery: true }; /** * Executes the text. Normally just uses eval, but can be modified * to use a better, environment-specific call. Only used for transpiling * loader plugins, not for plain JS modules. * @param {String} text the text to execute/evaluate. */ req.exec = function (text) { /*jslint evil: true */ return eval(text); }; //Set up with config info. req(cfg); }(this)); foo.requirejs = requirejs;foo.require = require;foo.define = define; } }()); foo.define("reqlib", function(){}); (function (define) { foo.define( 'modules/one',[],function ( ){ return { name: 'one' }; }); }(typeof foo.define === 'function' && foo.define.amd ? foo.define : function () { })); if (typeof foo.define === 'function' && foo.define.amd && foo.define.amd.jQuery) { foo.define('modules/two',['require','exports','module'],function (require, exports, module) { return { name: 'two', color: module.config().color }; }); } ; if(false){ }else if(typeof foo.define === 'function' && typeof foo.define.amd === 'object' && foo.define.amd){ foo.define('modules/four',{ name: 'four' }); }; if (typeof foo.define === 'function' && foo.define['amd']) { foo.define('modules/six',{ name: 'six' }); } ; if ('function' === typeof foo.define && foo.define.amd) { foo.define('modules/five',['require','./six'],function (require) { return { name: 'five', six: require('./six') }; }); } ; (function (define) { foo.define('modules/three', ['require','./four','./five'],function (require) { //If have dependencies, get them here var four = require('./four'), five = require('./five'); //Return the module definition. return { name: 'three', fourName: four.name, fiveName: five.name, }; }); }(typeof foo.define === 'function' && foo.define.amd ? foo.define : function (id, factory) { })); foo.require(['modules/one', 'modules/two', 'modules/three'], function (one, two, three) { console.log("One's name is: " + one.name); console.log("Two's name is: " + two.name); console.log("Two's color is: " + two.color); console.log("Two's name is: " + three.name); console.log("Three's fourName is: " + three.fourName); console.log("Three's fiveName is: " + three.fiveName); }); foo.define("main", function(){}); r.js-2.3.6/build/tests/lib/namespaceConfig/index.html000066400000000000000000000005151334071220400224610ustar00rootroot00000000000000

Hello World

r.js-2.3.6/build/tests/lib/namespaceConfig/main.js000066400000000000000000000006201334071220400217430ustar00rootroot00000000000000require(['modules/one', 'modules/two', 'modules/three'], function (one, two, three) { console.log("One's name is: " + one.name); console.log("Two's name is: " + two.name); console.log("Two's color is: " + two.color); console.log("Two's name is: " + three.name); console.log("Three's fourName is: " + three.fourName); console.log("Three's fiveName is: " + three.fiveName); }); r.js-2.3.6/build/tests/lib/namespaceConfig/modules/000077500000000000000000000000001334071220400221335ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/namespaceConfig/modules/five.js000066400000000000000000000002641334071220400234240ustar00rootroot00000000000000if ("function" === typeof define && define.amd) { define(function (require) { return { name: 'five', six: require('./six') }; }); } r.js-2.3.6/build/tests/lib/namespaceConfig/modules/four.js000066400000000000000000000002151334071220400234420ustar00rootroot00000000000000if(false){ }else if(typeof define == "function" && typeof define.amd == "object" && define.amd){ define({ name: 'four' }); }r.js-2.3.6/build/tests/lib/namespaceConfig/modules/one.js000066400000000000000000000002441334071220400232520ustar00rootroot00000000000000(function (define) { define( function ( ){ return { name: 'one' }; }); }(typeof define === 'function' && define.amd ? define : function () { })); r.js-2.3.6/build/tests/lib/namespaceConfig/modules/six.js000066400000000000000000000001401334071220400232670ustar00rootroot00000000000000if (typeof define === 'function' && define['amd']) { define({ name: 'six' }); } r.js-2.3.6/build/tests/lib/namespaceConfig/modules/three.js000066400000000000000000000007011334071220400235760ustar00rootroot00000000000000(function (define) { define('modules/three', function (require) { //If have dependencies, get them here var four = require('./four'), five = require('./five'); //Return the module definition. return { name: 'three', fourName: four.name, fiveName: five.name, }; }); }(typeof define === 'function' && define.amd ? define : function (id, factory) { })); r.js-2.3.6/build/tests/lib/namespaceConfig/modules/two.js000066400000000000000000000003401334071220400232770ustar00rootroot00000000000000if (typeof define === 'function' && define.amd && define.amd.jQuery) { define(function (require, exports, module) { return { name: 'two', color: module.config().color }; }); } r.js-2.3.6/build/tests/lib/namespaceConfig/reqlib.js000066400000000000000000002363161334071220400223120ustar00rootroot00000000000000/** vim: et:ts=4:sw=4:sts=4 * @license RequireJS 2.1.5 Copyright (c) 2010-2012, The Dojo Foundation All Rights Reserved. * Available via the MIT or new BSD license. * see: http://github.com/jrburke/requirejs for details */ //Not using strict: uneven strict support in browsers, #392, and causes //problems with requirejs.exec()/transpiler plugins that may not be strict. /*jslint regexp: true, nomen: true, sloppy: true */ /*global window, navigator, document, importScripts, setTimeout, opera */ var requirejs, require, define; (function (global) { var req, s, head, baseElement, dataMain, src, interactiveScript, currentlyAddingScript, mainScript, subPath, version = '2.1.5', commentRegExp = /(\/\*([\s\S]*?)\*\/|([^:]|^)\/\/(.*)$)/mg, cjsRequireRegExp = /[^.]\s*require\s*\(\s*["']([^'"\s]+)["']\s*\)/g, jsSuffixRegExp = /\.js$/, currDirRegExp = /^\.\//, op = Object.prototype, ostring = op.toString, hasOwn = op.hasOwnProperty, ap = Array.prototype, apsp = ap.splice, isBrowser = !!(typeof window !== 'undefined' && navigator && document), isWebWorker = !isBrowser && typeof importScripts !== 'undefined', //PS3 indicates loaded and complete, but need to wait for complete //specifically. Sequence is 'loading', 'loaded', execution, // then 'complete'. The UA check is unfortunate, but not sure how //to feature test w/o causing perf issues. readyRegExp = isBrowser && navigator.platform === 'PLAYSTATION 3' ? /^complete$/ : /^(complete|loaded)$/, defContextName = '_', //Oh the tragedy, detecting opera. See the usage of isOpera for reason. isOpera = typeof opera !== 'undefined' && opera.toString() === '[object Opera]', contexts = {}, cfg = {}, globalDefQueue = [], useInteractive = false; function isFunction(it) { return ostring.call(it) === '[object Function]'; } function isArray(it) { return ostring.call(it) === '[object Array]'; } /** * Helper function for iterating over an array. If the func returns * a true value, it will break out of the loop. */ function each(ary, func) { if (ary) { var i; for (i = 0; i < ary.length; i += 1) { if (ary[i] && func(ary[i], i, ary)) { break; } } } } /** * Helper function for iterating over an array backwards. If the func * returns a true value, it will break out of the loop. */ function eachReverse(ary, func) { if (ary) { var i; for (i = ary.length - 1; i > -1; i -= 1) { if (ary[i] && func(ary[i], i, ary)) { break; } } } } function hasProp(obj, prop) { return hasOwn.call(obj, prop); } function getOwn(obj, prop) { return hasProp(obj, prop) && obj[prop]; } /** * Cycles over properties in an object and calls a function for each * property value. If the function returns a truthy value, then the * iteration is stopped. */ function eachProp(obj, func) { var prop; for (prop in obj) { if (hasProp(obj, prop)) { if (func(obj[prop], prop)) { break; } } } } /** * Simple function to mix in properties from source into target, * but only if target does not already have a property of the same name. */ function mixin(target, source, force, deepStringMixin) { if (source) { eachProp(source, function (value, prop) { if (force || !hasProp(target, prop)) { if (deepStringMixin && typeof value !== 'string') { if (!target[prop]) { target[prop] = {}; } mixin(target[prop], value, force, deepStringMixin); } else { target[prop] = value; } } }); } return target; } //Similar to Function.prototype.bind, but the 'this' object is specified //first, since it is easier to read/figure out what 'this' will be. function bind(obj, fn) { return function () { return fn.apply(obj, arguments); }; } function scripts() { return document.getElementsByTagName('script'); } //Allow getting a global that expressed in //dot notation, like 'a.b.c'. function getGlobal(value) { if (!value) { return value; } var g = global; each(value.split('.'), function (part) { g = g[part]; }); return g; } /** * Constructs an error with a pointer to an URL with more information. * @param {String} id the error ID that maps to an ID on a web page. * @param {String} message human readable error. * @param {Error} [err] the original error, if there is one. * * @returns {Error} */ function makeError(id, msg, err, requireModules) { var e = new Error(msg + '\nhttp://requirejs.org/docs/errors.html#' + id); e.requireType = id; e.requireModules = requireModules; if (err) { e.originalError = err; } return e; } if (typeof define !== 'undefined') { //If a define is already in play via another AMD loader, //do not overwrite. return; } if (typeof requirejs !== 'undefined') { if (isFunction(requirejs)) { //Do not overwrite and existing requirejs instance. return; } cfg = requirejs; requirejs = undefined; } //Allow for a require config object if (typeof require !== 'undefined' && !isFunction(require)) { //assume it is a config object. cfg = require; require = undefined; } function newContext(contextName) { var inCheckLoaded, Module, context, handlers, checkLoadedTimeoutId, config = { //Defaults. Do not set a default for map //config to speed up normalize(), which //will run faster if there is no default. waitSeconds: 7, baseUrl: './', paths: {}, pkgs: {}, shim: {}, config: {} }, registry = {}, //registry of just enabled modules, to speed //cycle breaking code when lots of modules //are registered, but not activated. enabledRegistry = {}, undefEvents = {}, defQueue = [], defined = {}, urlFetched = {}, requireCounter = 1, unnormalizedCounter = 1; /** * Trims the . and .. from an array of path segments. * It will keep a leading path segment if a .. will become * the first path segment, to help with module name lookups, * which act like paths, but can be remapped. But the end result, * all paths that use this function should look normalized. * NOTE: this method MODIFIES the input array. * @param {Array} ary the array of path segments. */ function trimDots(ary) { var i, part; for (i = 0; ary[i]; i += 1) { part = ary[i]; if (part === '.') { ary.splice(i, 1); i -= 1; } else if (part === '..') { if (i === 1 && (ary[2] === '..' || ary[0] === '..')) { //End of the line. Keep at least one non-dot //path segment at the front so it can be mapped //correctly to disk. Otherwise, there is likely //no path mapping for a path starting with '..'. //This can still fail, but catches the most reasonable //uses of .. break; } else if (i > 0) { ary.splice(i - 1, 2); i -= 2; } } } } /** * Given a relative module name, like ./something, normalize it to * a real name that can be mapped to a path. * @param {String} name the relative name * @param {String} baseName a real name that the name arg is relative * to. * @param {Boolean} applyMap apply the map config to the value. Should * only be done if this normalization is for a dependency ID. * @returns {String} normalized name */ function normalize(name, baseName, applyMap) { var pkgName, pkgConfig, mapValue, nameParts, i, j, nameSegment, foundMap, foundI, foundStarMap, starI, baseParts = baseName && baseName.split('/'), normalizedBaseParts = baseParts, map = config.map, starMap = map && map['*']; //Adjust any relative paths. if (name && name.charAt(0) === '.') { //If have a base name, try to normalize against it, //otherwise, assume it is a top-level require that will //be relative to baseUrl in the end. if (baseName) { if (getOwn(config.pkgs, baseName)) { //If the baseName is a package name, then just treat it as one //name to concat the name with. normalizedBaseParts = baseParts = [baseName]; } else { //Convert baseName to array, and lop off the last part, //so that . matches that 'directory' and not name of the baseName's //module. For instance, baseName of 'one/two/three', maps to //'one/two/three.js', but we want the directory, 'one/two' for //this normalization. normalizedBaseParts = baseParts.slice(0, baseParts.length - 1); } name = normalizedBaseParts.concat(name.split('/')); trimDots(name); //Some use of packages may use a . path to reference the //'main' module name, so normalize for that. pkgConfig = getOwn(config.pkgs, (pkgName = name[0])); name = name.join('/'); if (pkgConfig && name === pkgName + '/' + pkgConfig.main) { name = pkgName; } } else if (name.indexOf('./') === 0) { // No baseName, so this is ID is resolved relative // to baseUrl, pull off the leading dot. name = name.substring(2); } } //Apply map config if available. if (applyMap && map && (baseParts || starMap)) { nameParts = name.split('/'); for (i = nameParts.length; i > 0; i -= 1) { nameSegment = nameParts.slice(0, i).join('/'); if (baseParts) { //Find the longest baseName segment match in the config. //So, do joins on the biggest to smallest lengths of baseParts. for (j = baseParts.length; j > 0; j -= 1) { mapValue = getOwn(map, baseParts.slice(0, j).join('/')); //baseName segment has config, find if it has one for //this name. if (mapValue) { mapValue = getOwn(mapValue, nameSegment); if (mapValue) { //Match, update name to the new value. foundMap = mapValue; foundI = i; break; } } } } if (foundMap) { break; } //Check for a star map match, but just hold on to it, //if there is a shorter segment match later in a matching //config, then favor over this star map. if (!foundStarMap && starMap && getOwn(starMap, nameSegment)) { foundStarMap = getOwn(starMap, nameSegment); starI = i; } } if (!foundMap && foundStarMap) { foundMap = foundStarMap; foundI = starI; } if (foundMap) { nameParts.splice(0, foundI, foundMap); name = nameParts.join('/'); } } return name; } function removeScript(name) { if (isBrowser) { each(scripts(), function (scriptNode) { if (scriptNode.getAttribute('data-requiremodule') === name && scriptNode.getAttribute('data-requirecontext') === context.contextName) { scriptNode.parentNode.removeChild(scriptNode); return true; } }); } } function hasPathFallback(id) { var pathConfig = getOwn(config.paths, id); if (pathConfig && isArray(pathConfig) && pathConfig.length > 1) { removeScript(id); //Pop off the first array value, since it failed, and //retry pathConfig.shift(); context.require.undef(id); context.require([id]); return true; } } //Turns a plugin!resource to [plugin, resource] //with the plugin being undefined if the name //did not have a plugin prefix. function splitPrefix(name) { var prefix, index = name ? name.indexOf('!') : -1; if (index > -1) { prefix = name.substring(0, index); name = name.substring(index + 1, name.length); } return [prefix, name]; } /** * Creates a module mapping that includes plugin prefix, module * name, and path. If parentModuleMap is provided it will * also normalize the name via require.normalize() * * @param {String} name the module name * @param {String} [parentModuleMap] parent module map * for the module name, used to resolve relative names. * @param {Boolean} isNormalized: is the ID already normalized. * This is true if this call is done for a define() module ID. * @param {Boolean} applyMap: apply the map config to the ID. * Should only be true if this map is for a dependency. * * @returns {Object} */ function makeModuleMap(name, parentModuleMap, isNormalized, applyMap) { var url, pluginModule, suffix, nameParts, prefix = null, parentName = parentModuleMap ? parentModuleMap.name : null, originalName = name, isDefine = true, normalizedName = ''; //If no name, then it means it is a require call, generate an //internal name. if (!name) { isDefine = false; name = '_@r' + (requireCounter += 1); } nameParts = splitPrefix(name); prefix = nameParts[0]; name = nameParts[1]; if (prefix) { prefix = normalize(prefix, parentName, applyMap); pluginModule = getOwn(defined, prefix); } //Account for relative paths if there is a base name. if (name) { if (prefix) { if (pluginModule && pluginModule.normalize) { //Plugin is loaded, use its normalize method. normalizedName = pluginModule.normalize(name, function (name) { return normalize(name, parentName, applyMap); }); } else { normalizedName = normalize(name, parentName, applyMap); } } else { //A regular module. normalizedName = normalize(name, parentName, applyMap); //Normalized name may be a plugin ID due to map config //application in normalize. The map config values must //already be normalized, so do not need to redo that part. nameParts = splitPrefix(normalizedName); prefix = nameParts[0]; normalizedName = nameParts[1]; isNormalized = true; url = context.nameToUrl(normalizedName); } } //If the id is a plugin id that cannot be determined if it needs //normalization, stamp it with a unique ID so two matching relative //ids that may conflict can be separate. suffix = prefix && !pluginModule && !isNormalized ? '_unnormalized' + (unnormalizedCounter += 1) : ''; return { prefix: prefix, name: normalizedName, parentMap: parentModuleMap, unnormalized: !!suffix, url: url, originalName: originalName, isDefine: isDefine, id: (prefix ? prefix + '!' + normalizedName : normalizedName) + suffix }; } function getModule(depMap) { var id = depMap.id, mod = getOwn(registry, id); if (!mod) { mod = registry[id] = new context.Module(depMap); } return mod; } function on(depMap, name, fn) { var id = depMap.id, mod = getOwn(registry, id); if (hasProp(defined, id) && (!mod || mod.defineEmitComplete)) { if (name === 'defined') { fn(defined[id]); } } else { getModule(depMap).on(name, fn); } } function onError(err, errback) { var ids = err.requireModules, notified = false; if (errback) { errback(err); } else { each(ids, function (id) { var mod = getOwn(registry, id); if (mod) { //Set error on module, so it skips timeout checks. mod.error = err; if (mod.events.error) { notified = true; mod.emit('error', err); } } }); if (!notified) { req.onError(err); } } } /** * Internal method to transfer globalQueue items to this context's * defQueue. */ function takeGlobalQueue() { //Push all the globalDefQueue items into the context's defQueue if (globalDefQueue.length) { //Array splice in the values since the context code has a //local var ref to defQueue, so cannot just reassign the one //on context. apsp.apply(defQueue, [defQueue.length - 1, 0].concat(globalDefQueue)); globalDefQueue = []; } } handlers = { 'require': function (mod) { if (mod.require) { return mod.require; } else { return (mod.require = context.makeRequire(mod.map)); } }, 'exports': function (mod) { mod.usingExports = true; if (mod.map.isDefine) { if (mod.exports) { return mod.exports; } else { return (mod.exports = defined[mod.map.id] = {}); } } }, 'module': function (mod) { if (mod.module) { return mod.module; } else { return (mod.module = { id: mod.map.id, uri: mod.map.url, config: function () { return (config.config && getOwn(config.config, mod.map.id)) || {}; }, exports: defined[mod.map.id] }); } } }; function cleanRegistry(id) { //Clean up machinery used for waiting modules. delete registry[id]; delete enabledRegistry[id]; } function breakCycle(mod, traced, processed) { var id = mod.map.id; if (mod.error) { mod.emit('error', mod.error); } else { traced[id] = true; each(mod.depMaps, function (depMap, i) { var depId = depMap.id, dep = getOwn(registry, depId); //Only force things that have not completed //being defined, so still in the registry, //and only if it has not been matched up //in the module already. if (dep && !mod.depMatched[i] && !processed[depId]) { if (getOwn(traced, depId)) { mod.defineDep(i, defined[depId]); mod.check(); //pass false? } else { breakCycle(dep, traced, processed); } } }); processed[id] = true; } } function checkLoaded() { var map, modId, err, usingPathFallback, waitInterval = config.waitSeconds * 1000, //It is possible to disable the wait interval by using waitSeconds of 0. expired = waitInterval && (context.startTime + waitInterval) < new Date().getTime(), noLoads = [], reqCalls = [], stillLoading = false, needCycleCheck = true; //Do not bother if this call was a result of a cycle break. if (inCheckLoaded) { return; } inCheckLoaded = true; //Figure out the state of all the modules. eachProp(enabledRegistry, function (mod) { map = mod.map; modId = map.id; //Skip things that are not enabled or in error state. if (!mod.enabled) { return; } if (!map.isDefine) { reqCalls.push(mod); } if (!mod.error) { //If the module should be executed, and it has not //been inited and time is up, remember it. if (!mod.inited && expired) { if (hasPathFallback(modId)) { usingPathFallback = true; stillLoading = true; } else { noLoads.push(modId); removeScript(modId); } } else if (!mod.inited && mod.fetched && map.isDefine) { stillLoading = true; if (!map.prefix) { //No reason to keep looking for unfinished //loading. If the only stillLoading is a //plugin resource though, keep going, //because it may be that a plugin resource //is waiting on a non-plugin cycle. return (needCycleCheck = false); } } } }); if (expired && noLoads.length) { //If wait time expired, throw error of unloaded modules. err = makeError('timeout', 'Load timeout for modules: ' + noLoads, null, noLoads); err.contextName = context.contextName; return onError(err); } //Not expired, check for a cycle. if (needCycleCheck) { each(reqCalls, function (mod) { breakCycle(mod, {}, {}); }); } //If still waiting on loads, and the waiting load is something //other than a plugin resource, or there are still outstanding //scripts, then just try back later. if ((!expired || usingPathFallback) && stillLoading) { //Something is still waiting to load. Wait for it, but only //if a timeout is not already in effect. if ((isBrowser || isWebWorker) && !checkLoadedTimeoutId) { checkLoadedTimeoutId = setTimeout(function () { checkLoadedTimeoutId = 0; checkLoaded(); }, 50); } } inCheckLoaded = false; } Module = function (map) { this.events = getOwn(undefEvents, map.id) || {}; this.map = map; this.shim = getOwn(config.shim, map.id); this.depExports = []; this.depMaps = []; this.depMatched = []; this.pluginMaps = {}; this.depCount = 0; /* this.exports this.factory this.depMaps = [], this.enabled, this.fetched */ }; Module.prototype = { init: function (depMaps, factory, errback, options) { options = options || {}; //Do not do more inits if already done. Can happen if there //are multiple define calls for the same module. That is not //a normal, common case, but it is also not unexpected. if (this.inited) { return; } this.factory = factory; if (errback) { //Register for errors on this module. this.on('error', errback); } else if (this.events.error) { //If no errback already, but there are error listeners //on this module, set up an errback to pass to the deps. errback = bind(this, function (err) { this.emit('error', err); }); } //Do a copy of the dependency array, so that //source inputs are not modified. For example //"shim" deps are passed in here directly, and //doing a direct modification of the depMaps array //would affect that config. this.depMaps = depMaps && depMaps.slice(0); this.errback = errback; //Indicate this module has be initialized this.inited = true; this.ignore = options.ignore; //Could have option to init this module in enabled mode, //or could have been previously marked as enabled. However, //the dependencies are not known until init is called. So //if enabled previously, now trigger dependencies as enabled. if (options.enabled || this.enabled) { //Enable this module and dependencies. //Will call this.check() this.enable(); } else { this.check(); } }, defineDep: function (i, depExports) { //Because of cycles, defined callback for a given //export can be called more than once. if (!this.depMatched[i]) { this.depMatched[i] = true; this.depCount -= 1; this.depExports[i] = depExports; } }, fetch: function () { if (this.fetched) { return; } this.fetched = true; context.startTime = (new Date()).getTime(); var map = this.map; //If the manager is for a plugin managed resource, //ask the plugin to load it now. if (this.shim) { context.makeRequire(this.map, { enableBuildCallback: true })(this.shim.deps || [], bind(this, function () { return map.prefix ? this.callPlugin() : this.load(); })); } else { //Regular dependency. return map.prefix ? this.callPlugin() : this.load(); } }, load: function () { var url = this.map.url; //Regular dependency. if (!urlFetched[url]) { urlFetched[url] = true; context.load(this.map.id, url); } }, /** * Checks if the module is ready to define itself, and if so, * define it. */ check: function () { if (!this.enabled || this.enabling) { return; } var err, cjsModule, id = this.map.id, depExports = this.depExports, exports = this.exports, factory = this.factory; if (!this.inited) { this.fetch(); } else if (this.error) { this.emit('error', this.error); } else if (!this.defining) { //The factory could trigger another require call //that would result in checking this module to //define itself again. If already in the process //of doing that, skip this work. this.defining = true; if (this.depCount < 1 && !this.defined) { if (isFunction(factory)) { //If there is an error listener, favor passing //to that instead of throwing an error. if (this.events.error) { try { exports = context.execCb(id, factory, depExports, exports); } catch (e) { err = e; } } else { exports = context.execCb(id, factory, depExports, exports); } if (this.map.isDefine) { //If setting exports via 'module' is in play, //favor that over return value and exports. After that, //favor a non-undefined return value over exports use. cjsModule = this.module; if (cjsModule && cjsModule.exports !== undefined && //Make sure it is not already the exports value cjsModule.exports !== this.exports) { exports = cjsModule.exports; } else if (exports === undefined && this.usingExports) { //exports already set the defined value. exports = this.exports; } } if (err) { err.requireMap = this.map; err.requireModules = [this.map.id]; err.requireType = 'define'; return onError((this.error = err)); } } else { //Just a literal value exports = factory; } this.exports = exports; if (this.map.isDefine && !this.ignore) { defined[id] = exports; if (req.onResourceLoad) { req.onResourceLoad(context, this.map, this.depMaps); } } //Clean up cleanRegistry(id); this.defined = true; } //Finished the define stage. Allow calling check again //to allow define notifications below in the case of a //cycle. this.defining = false; if (this.defined && !this.defineEmitted) { this.defineEmitted = true; this.emit('defined', this.exports); this.defineEmitComplete = true; } } }, callPlugin: function () { var map = this.map, id = map.id, //Map already normalized the prefix. pluginMap = makeModuleMap(map.prefix); //Mark this as a dependency for this plugin, so it //can be traced for cycles. this.depMaps.push(pluginMap); on(pluginMap, 'defined', bind(this, function (plugin) { var load, normalizedMap, normalizedMod, name = this.map.name, parentName = this.map.parentMap ? this.map.parentMap.name : null, localRequire = context.makeRequire(map.parentMap, { enableBuildCallback: true }); //If current map is not normalized, wait for that //normalized name to load instead of continuing. if (this.map.unnormalized) { //Normalize the ID if the plugin allows it. if (plugin.normalize) { name = plugin.normalize(name, function (name) { return normalize(name, parentName, true); }) || ''; } //prefix and name should already be normalized, no need //for applying map config again either. normalizedMap = makeModuleMap(map.prefix + '!' + name, this.map.parentMap); on(normalizedMap, 'defined', bind(this, function (value) { this.init([], function () { return value; }, null, { enabled: true, ignore: true }); })); normalizedMod = getOwn(registry, normalizedMap.id); if (normalizedMod) { //Mark this as a dependency for this plugin, so it //can be traced for cycles. this.depMaps.push(normalizedMap); if (this.events.error) { normalizedMod.on('error', bind(this, function (err) { this.emit('error', err); })); } normalizedMod.enable(); } return; } load = bind(this, function (value) { this.init([], function () { return value; }, null, { enabled: true }); }); load.error = bind(this, function (err) { this.inited = true; this.error = err; err.requireModules = [id]; //Remove temp unnormalized modules for this module, //since they will never be resolved otherwise now. eachProp(registry, function (mod) { if (mod.map.id.indexOf(id + '_unnormalized') === 0) { cleanRegistry(mod.map.id); } }); onError(err); }); //Allow plugins to load other code without having to know the //context or how to 'complete' the load. load.fromText = bind(this, function (text, textAlt) { /*jslint evil: true */ var moduleName = map.name, moduleMap = makeModuleMap(moduleName), hasInteractive = useInteractive; //As of 2.1.0, support just passing the text, to reinforce //fromText only being called once per resource. Still //support old style of passing moduleName but discard //that moduleName in favor of the internal ref. if (textAlt) { text = textAlt; } //Turn off interactive script matching for IE for any define //calls in the text, then turn it back on at the end. if (hasInteractive) { useInteractive = false; } //Prime the system by creating a module instance for //it. getModule(moduleMap); //Transfer any config to this other module. if (hasProp(config.config, id)) { config.config[moduleName] = config.config[id]; } try { req.exec(text); } catch (e) { return onError(makeError('fromtexteval', 'fromText eval for ' + id + ' failed: ' + e, e, [id])); } if (hasInteractive) { useInteractive = true; } //Mark this as a dependency for the plugin //resource this.depMaps.push(moduleMap); //Support anonymous modules. context.completeLoad(moduleName); //Bind the value of that module to the value for this //resource ID. localRequire([moduleName], load); }); //Use parentName here since the plugin's name is not reliable, //could be some weird string with no path that actually wants to //reference the parentName's path. plugin.load(map.name, localRequire, load, config); })); context.enable(pluginMap, this); this.pluginMaps[pluginMap.id] = pluginMap; }, enable: function () { enabledRegistry[this.map.id] = this; this.enabled = true; //Set flag mentioning that the module is enabling, //so that immediate calls to the defined callbacks //for dependencies do not trigger inadvertent load //with the depCount still being zero. this.enabling = true; //Enable each dependency each(this.depMaps, bind(this, function (depMap, i) { var id, mod, handler; if (typeof depMap === 'string') { //Dependency needs to be converted to a depMap //and wired up to this module. depMap = makeModuleMap(depMap, (this.map.isDefine ? this.map : this.map.parentMap), false, !this.skipMap); this.depMaps[i] = depMap; handler = getOwn(handlers, depMap.id); if (handler) { this.depExports[i] = handler(this); return; } this.depCount += 1; on(depMap, 'defined', bind(this, function (depExports) { this.defineDep(i, depExports); this.check(); })); if (this.errback) { on(depMap, 'error', this.errback); } } id = depMap.id; mod = registry[id]; //Skip special modules like 'require', 'exports', 'module' //Also, don't call enable if it is already enabled, //important in circular dependency cases. if (!hasProp(handlers, id) && mod && !mod.enabled) { context.enable(depMap, this); } })); //Enable each plugin that is used in //a dependency eachProp(this.pluginMaps, bind(this, function (pluginMap) { var mod = getOwn(registry, pluginMap.id); if (mod && !mod.enabled) { context.enable(pluginMap, this); } })); this.enabling = false; this.check(); }, on: function (name, cb) { var cbs = this.events[name]; if (!cbs) { cbs = this.events[name] = []; } cbs.push(cb); }, emit: function (name, evt) { each(this.events[name], function (cb) { cb(evt); }); if (name === 'error') { //Now that the error handler was triggered, remove //the listeners, since this broken Module instance //can stay around for a while in the registry. delete this.events[name]; } } }; function callGetModule(args) { //Skip modules already defined. if (!hasProp(defined, args[0])) { getModule(makeModuleMap(args[0], null, true)).init(args[1], args[2]); } } function removeListener(node, func, name, ieName) { //Favor detachEvent because of IE9 //issue, see attachEvent/addEventListener comment elsewhere //in this file. if (node.detachEvent && !isOpera) { //Probably IE. If not it will throw an error, which will be //useful to know. if (ieName) { node.detachEvent(ieName, func); } } else { node.removeEventListener(name, func, false); } } /** * Given an event from a script node, get the requirejs info from it, * and then removes the event listeners on the node. * @param {Event} evt * @returns {Object} */ function getScriptData(evt) { //Using currentTarget instead of target for Firefox 2.0's sake. Not //all old browsers will be supported, but this one was easy enough //to support and still makes sense. var node = evt.currentTarget || evt.srcElement; //Remove the listeners once here. removeListener(node, context.onScriptLoad, 'load', 'onreadystatechange'); removeListener(node, context.onScriptError, 'error'); return { node: node, id: node && node.getAttribute('data-requiremodule') }; } function intakeDefines() { var args; //Any defined modules in the global queue, intake them now. takeGlobalQueue(); //Make sure any remaining defQueue items get properly processed. while (defQueue.length) { args = defQueue.shift(); if (args[0] === null) { return onError(makeError('mismatch', 'Mismatched anonymous define() module: ' + args[args.length - 1])); } else { //args are id, deps, factory. Should be normalized by the //define() function. callGetModule(args); } } } context = { config: config, contextName: contextName, registry: registry, defined: defined, urlFetched: urlFetched, defQueue: defQueue, Module: Module, makeModuleMap: makeModuleMap, nextTick: req.nextTick, onError: onError, /** * Set a configuration for the context. * @param {Object} cfg config object to integrate. */ configure: function (cfg) { //Make sure the baseUrl ends in a slash. if (cfg.baseUrl) { if (cfg.baseUrl.charAt(cfg.baseUrl.length - 1) !== '/') { cfg.baseUrl += '/'; } } //Save off the paths and packages since they require special processing, //they are additive. var pkgs = config.pkgs, shim = config.shim, objs = { paths: true, config: true, map: true }; eachProp(cfg, function (value, prop) { if (objs[prop]) { if (prop === 'map') { if (!config.map) { config.map = {}; } mixin(config[prop], value, true, true); } else { mixin(config[prop], value, true); } } else { config[prop] = value; } }); //Merge shim if (cfg.shim) { eachProp(cfg.shim, function (value, id) { //Normalize the structure if (isArray(value)) { value = { deps: value }; } if ((value.exports || value.init) && !value.exportsFn) { value.exportsFn = context.makeShimExports(value); } shim[id] = value; }); config.shim = shim; } //Adjust packages if necessary. if (cfg.packages) { each(cfg.packages, function (pkgObj) { var location; pkgObj = typeof pkgObj === 'string' ? { name: pkgObj } : pkgObj; location = pkgObj.location; //Create a brand new object on pkgs, since currentPackages can //be passed in again, and config.pkgs is the internal transformed //state for all package configs. pkgs[pkgObj.name] = { name: pkgObj.name, location: location || pkgObj.name, //Remove leading dot in main, so main paths are normalized, //and remove any trailing .js, since different package //envs have different conventions: some use a module name, //some use a file name. main: (pkgObj.main || 'main') .replace(currDirRegExp, '') .replace(jsSuffixRegExp, '') }; }); //Done with modifications, assing packages back to context config config.pkgs = pkgs; } //If there are any "waiting to execute" modules in the registry, //update the maps for them, since their info, like URLs to load, //may have changed. eachProp(registry, function (mod, id) { //If module already has init called, since it is too //late to modify them, and ignore unnormalized ones //since they are transient. if (!mod.inited && !mod.map.unnormalized) { mod.map = makeModuleMap(id); } }); //If a deps array or a config callback is specified, then call //require with those args. This is useful when require is defined as a //config object before require.js is loaded. if (cfg.deps || cfg.callback) { context.require(cfg.deps || [], cfg.callback); } }, makeShimExports: function (value) { function fn() { var ret; if (value.init) { ret = value.init.apply(global, arguments); } return ret || (value.exports && getGlobal(value.exports)); } return fn; }, makeRequire: function (relMap, options) { options = options || {}; function localRequire(deps, callback, errback) { var id, map, requireMod; if (options.enableBuildCallback && callback && isFunction(callback)) { callback.__requireJsBuild = true; } if (typeof deps === 'string') { if (isFunction(callback)) { //Invalid call return onError(makeError('requireargs', 'Invalid require call'), errback); } //If require|exports|module are requested, get the //value for them from the special handlers. Caveat: //this only works while module is being defined. if (relMap && hasProp(handlers, deps)) { return handlers[deps](registry[relMap.id]); } //Synchronous access to one module. If require.get is //available (as in the Node adapter), prefer that. if (req.get) { return req.get(context, deps, relMap, localRequire); } //Normalize module name, if it contains . or .. map = makeModuleMap(deps, relMap, false, true); id = map.id; if (!hasProp(defined, id)) { return onError(makeError('notloaded', 'Module name "' + id + '" has not been loaded yet for context: ' + contextName + (relMap ? '' : '. Use require([])'))); } return defined[id]; } //Grab defines waiting in the global queue. intakeDefines(); //Mark all the dependencies as needing to be loaded. context.nextTick(function () { //Some defines could have been added since the //require call, collect them. intakeDefines(); requireMod = getModule(makeModuleMap(null, relMap)); //Store if map config should be applied to this require //call for dependencies. requireMod.skipMap = options.skipMap; requireMod.init(deps, callback, errback, { enabled: true }); checkLoaded(); }); return localRequire; } mixin(localRequire, { isBrowser: isBrowser, /** * Converts a module name + .extension into an URL path. * *Requires* the use of a module name. It does not support using * plain URLs like nameToUrl. */ toUrl: function (moduleNamePlusExt) { var ext, index = moduleNamePlusExt.lastIndexOf('.'), segment = moduleNamePlusExt.split('/')[0], isRelative = segment === '.' || segment === '..'; //Have a file extension alias, and it is not the //dots from a relative path. if (index !== -1 && (!isRelative || index > 1)) { ext = moduleNamePlusExt.substring(index, moduleNamePlusExt.length); moduleNamePlusExt = moduleNamePlusExt.substring(0, index); } return context.nameToUrl(normalize(moduleNamePlusExt, relMap && relMap.id, true), ext, true); }, defined: function (id) { return hasProp(defined, makeModuleMap(id, relMap, false, true).id); }, specified: function (id) { id = makeModuleMap(id, relMap, false, true).id; return hasProp(defined, id) || hasProp(registry, id); } }); //Only allow undef on top level require calls if (!relMap) { localRequire.undef = function (id) { //Bind any waiting define() calls to this context, //fix for #408 takeGlobalQueue(); var map = makeModuleMap(id, relMap, true), mod = getOwn(registry, id); delete defined[id]; delete urlFetched[map.url]; delete undefEvents[id]; if (mod) { //Hold on to listeners in case the //module will be attempted to be reloaded //using a different config. if (mod.events.defined) { undefEvents[id] = mod.events; } cleanRegistry(id); } }; } return localRequire; }, /** * Called to enable a module if it is still in the registry * awaiting enablement. A second arg, parent, the parent module, * is passed in for context, when this method is overriden by * the optimizer. Not shown here to keep code compact. */ enable: function (depMap) { var mod = getOwn(registry, depMap.id); if (mod) { getModule(depMap).enable(); } }, /** * Internal method used by environment adapters to complete a load event. * A load event could be a script load or just a load pass from a synchronous * load call. * @param {String} moduleName the name of the module to potentially complete. */ completeLoad: function (moduleName) { var found, args, mod, shim = getOwn(config.shim, moduleName) || {}, shExports = shim.exports; takeGlobalQueue(); while (defQueue.length) { args = defQueue.shift(); if (args[0] === null) { args[0] = moduleName; //If already found an anonymous module and bound it //to this name, then this is some other anon module //waiting for its completeLoad to fire. if (found) { break; } found = true; } else if (args[0] === moduleName) { //Found matching define call for this script! found = true; } callGetModule(args); } //Do this after the cycle of callGetModule in case the result //of those calls/init calls changes the registry. mod = getOwn(registry, moduleName); if (!found && !hasProp(defined, moduleName) && mod && !mod.inited) { if (config.enforceDefine && (!shExports || !getGlobal(shExports))) { if (hasPathFallback(moduleName)) { return; } else { return onError(makeError('nodefine', 'No define call for ' + moduleName, null, [moduleName])); } } else { //A script that does not call define(), so just simulate //the call for it. callGetModule([moduleName, (shim.deps || []), shim.exportsFn]); } } checkLoaded(); }, /** * Converts a module name to a file path. Supports cases where * moduleName may actually be just an URL. * Note that it **does not** call normalize on the moduleName, * it is assumed to have already been normalized. This is an * internal API, not a public one. Use toUrl for the public API. */ nameToUrl: function (moduleName, ext, skipExt) { var paths, pkgs, pkg, pkgPath, syms, i, parentModule, url, parentPath; //If a colon is in the URL, it indicates a protocol is used and it is just //an URL to a file, or if it starts with a slash, contains a query arg (i.e. ?) //or ends with .js, then assume the user meant to use an url and not a module id. //The slash is important for protocol-less URLs as well as full paths. if (req.jsExtRegExp.test(moduleName)) { //Just a plain path, not module name lookup, so just return it. //Add extension if it is included. This is a bit wonky, only non-.js things pass //an extension, this method probably needs to be reworked. url = moduleName + (ext || ''); } else { //A module that needs to be converted to a path. paths = config.paths; pkgs = config.pkgs; syms = moduleName.split('/'); //For each module name segment, see if there is a path //registered for it. Start with most specific name //and work up from it. for (i = syms.length; i > 0; i -= 1) { parentModule = syms.slice(0, i).join('/'); pkg = getOwn(pkgs, parentModule); parentPath = getOwn(paths, parentModule); if (parentPath) { //If an array, it means there are a few choices, //Choose the one that is desired if (isArray(parentPath)) { parentPath = parentPath[0]; } syms.splice(0, i, parentPath); break; } else if (pkg) { //If module name is just the package name, then looking //for the main module. if (moduleName === pkg.name) { pkgPath = pkg.location + '/' + pkg.main; } else { pkgPath = pkg.location; } syms.splice(0, i, pkgPath); break; } } //Join the path parts together, then figure out if baseUrl is needed. url = syms.join('/'); url += (ext || (/\?/.test(url) || skipExt ? '' : '.js')); url = (url.charAt(0) === '/' || url.match(/^[\w\+\.\-]+:/) ? '' : config.baseUrl) + url; } return config.urlArgs ? url + ((url.indexOf('?') === -1 ? '?' : '&') + config.urlArgs) : url; }, //Delegates to req.load. Broken out as a separate function to //allow overriding in the optimizer. load: function (id, url) { req.load(context, id, url); }, /** * Executes a module callack function. Broken out as a separate function * solely to allow the build system to sequence the files in the built * layer in the right sequence. * * @private */ execCb: function (name, callback, args, exports) { return callback.apply(exports, args); }, /** * callback for script loads, used to check status of loading. * * @param {Event} evt the event from the browser for the script * that was loaded. */ onScriptLoad: function (evt) { //Using currentTarget instead of target for Firefox 2.0's sake. Not //all old browsers will be supported, but this one was easy enough //to support and still makes sense. if (evt.type === 'load' || (readyRegExp.test((evt.currentTarget || evt.srcElement).readyState))) { //Reset interactive script so a script node is not held onto for //to long. interactiveScript = null; //Pull out the name of the module and the context. var data = getScriptData(evt); context.completeLoad(data.id); } }, /** * Callback for script errors. */ onScriptError: function (evt) { var data = getScriptData(evt); if (!hasPathFallback(data.id)) { return onError(makeError('scripterror', 'Script error', evt, [data.id])); } } }; context.require = context.makeRequire(); return context; } /** * Main entry point. * * If the only argument to require is a string, then the module that * is represented by that string is fetched for the appropriate context. * * If the first argument is an array, then it will be treated as an array * of dependency string names to fetch. An optional function callback can * be specified to execute when all of those dependencies are available. * * Make a local req variable to help Caja compliance (it assumes things * on a require that are not standardized), and to give a short * name for minification/local scope use. */ req = requirejs = function (deps, callback, errback, optional) { //Find the right context, use default var context, config, contextName = defContextName; // Determine if have config object in the call. if (!isArray(deps) && typeof deps !== 'string') { // deps is a config object config = deps; if (isArray(callback)) { // Adjust args if there are dependencies deps = callback; callback = errback; errback = optional; } else { deps = []; } } if (config && config.context) { contextName = config.context; } context = getOwn(contexts, contextName); if (!context) { context = contexts[contextName] = req.s.newContext(contextName); } if (config) { context.configure(config); } return context.require(deps, callback, errback); }; /** * Support require.config() to make it easier to cooperate with other * AMD loaders on globally agreed names. */ req.config = function (config) { return req(config); }; /** * Execute something after the current tick * of the event loop. Override for other envs * that have a better solution than setTimeout. * @param {Function} fn function to execute later. */ req.nextTick = typeof setTimeout !== 'undefined' ? function (fn) { setTimeout(fn, 4); } : function (fn) { fn(); }; /** * Export require as a global, but only if it does not already exist. */ if (!require) { require = req; } req.version = version; //Used to filter out dependencies that are already paths. req.jsExtRegExp = /^\/|:|\?|\.js$/; req.isBrowser = isBrowser; s = req.s = { contexts: contexts, newContext: newContext }; //Create default context. req({}); //Exports some context-sensitive methods on global require. each([ 'toUrl', 'undef', 'defined', 'specified' ], function (prop) { //Reference from contexts instead of early binding to default context, //so that during builds, the latest instance of the default context //with its config gets used. req[prop] = function () { var ctx = contexts[defContextName]; return ctx.require[prop].apply(ctx, arguments); }; }); if (isBrowser) { head = s.head = document.getElementsByTagName('head')[0]; //If BASE tag is in play, using appendChild is a problem for IE6. //When that browser dies, this can be removed. Details in this jQuery bug: //http://dev.jquery.com/ticket/2709 baseElement = document.getElementsByTagName('base')[0]; if (baseElement) { head = s.head = baseElement.parentNode; } } /** * Any errors that require explicitly generates will be passed to this * function. Intercept/override it if you want custom error handling. * @param {Error} err the error object. */ req.onError = function (err) { throw err; }; /** * Does the request to load a module for the browser case. * Make this a separate function to allow other environments * to override it. * * @param {Object} context the require context to find state. * @param {String} moduleName the name of the module. * @param {Object} url the URL to the module. */ req.load = function (context, moduleName, url) { var config = (context && context.config) || {}, node; if (isBrowser) { //In the browser so use a script tag node = config.xhtml ? document.createElementNS('http://www.w3.org/1999/xhtml', 'html:script') : document.createElement('script'); node.type = config.scriptType || 'text/javascript'; node.charset = 'utf-8'; node.async = true; node.setAttribute('data-requirecontext', context.contextName); node.setAttribute('data-requiremodule', moduleName); //Set up load listener. Test attachEvent first because IE9 has //a subtle issue in its addEventListener and script onload firings //that do not match the behavior of all other browsers with //addEventListener support, which fire the onload event for a //script right after the script execution. See: //https://connect.microsoft.com/IE/feedback/details/648057/script-onload-event-is-not-fired-immediately-after-script-execution //UNFORTUNATELY Opera implements attachEvent but does not follow the script //script execution mode. if (node.attachEvent && //Check if node.attachEvent is artificially added by custom script or //natively supported by browser //read https://github.com/jrburke/requirejs/issues/187 //if we can NOT find [native code] then it must NOT natively supported. //in IE8, node.attachEvent does not have toString() //Note the test for "[native code" with no closing brace, see: //https://github.com/jrburke/requirejs/issues/273 !(node.attachEvent.toString && node.attachEvent.toString().indexOf('[native code') < 0) && !isOpera) { //Probably IE. IE (at least 6-8) do not fire //script onload right after executing the script, so //we cannot tie the anonymous define call to a name. //However, IE reports the script as being in 'interactive' //readyState at the time of the define call. useInteractive = true; node.attachEvent('onreadystatechange', context.onScriptLoad); //It would be great to add an error handler here to catch //404s in IE9+. However, onreadystatechange will fire before //the error handler, so that does not help. If addEventListener //is used, then IE will fire error before load, but we cannot //use that pathway given the connect.microsoft.com issue //mentioned above about not doing the 'script execute, //then fire the script load event listener before execute //next script' that other browsers do. //Best hope: IE10 fixes the issues, //and then destroys all installs of IE 6-9. //node.attachEvent('onerror', context.onScriptError); } else { node.addEventListener('load', context.onScriptLoad, false); node.addEventListener('error', context.onScriptError, false); } node.src = url; //For some cache cases in IE 6-8, the script executes before the end //of the appendChild execution, so to tie an anonymous define //call to the module name (which is stored on the node), hold on //to a reference to this node, but clear after the DOM insertion. currentlyAddingScript = node; if (baseElement) { head.insertBefore(node, baseElement); } else { head.appendChild(node); } currentlyAddingScript = null; return node; } else if (isWebWorker) { try { //In a web worker, use importScripts. This is not a very //efficient use of importScripts, importScripts will block until //its script is downloaded and evaluated. However, if web workers //are in play, the expectation that a build has been done so that //only one script needs to be loaded anyway. This may need to be //reevaluated if other use cases become common. importScripts(url); //Account for anonymous modules context.completeLoad(moduleName); } catch (e) { context.onError(makeError('importscripts', 'importScripts failed for ' + moduleName + ' at ' + url, e, [moduleName])); } } }; function getInteractiveScript() { if (interactiveScript && interactiveScript.readyState === 'interactive') { return interactiveScript; } eachReverse(scripts(), function (script) { if (script.readyState === 'interactive') { return (interactiveScript = script); } }); return interactiveScript; } //Look for a data-main script attribute, which could also adjust the baseUrl. if (isBrowser) { //Figure out baseUrl. Get it from the script tag with require.js in it. eachReverse(scripts(), function (script) { //Set the 'head' where we can append children by //using the script's parent. if (!head) { head = script.parentNode; } //Look for a data-main attribute to set main script for the page //to load. If it is there, the path to data main becomes the //baseUrl, if it is not already set. dataMain = script.getAttribute('data-main'); if (dataMain) { //Set final baseUrl if there is not already an explicit one. if (!cfg.baseUrl) { //Pull off the directory of data-main for use as the //baseUrl. src = dataMain.split('/'); mainScript = src.pop(); subPath = src.length ? src.join('/') + '/' : './'; cfg.baseUrl = subPath; dataMain = mainScript; } //Strip off any trailing .js since dataMain is now //like a module name. dataMain = dataMain.replace(jsSuffixRegExp, ''); //Put the data-main script in the files to load. cfg.deps = cfg.deps ? cfg.deps.concat(dataMain) : [dataMain]; return true; } }); } /** * The function that handles definitions of modules. Differs from * require() in that a string for the module should be the first argument, * and the function to execute after dependencies are loaded should * return a value to define the module corresponding to the first argument's * name. */ define = function (name, deps, callback) { var node, context; //Allow for anonymous modules if (typeof name !== 'string') { //Adjust args appropriately callback = deps; deps = name; name = null; } //This module may not have dependencies if (!isArray(deps)) { callback = deps; deps = []; } //If no name, and callback is a function, then figure out if it a //CommonJS thing with dependencies. if (!deps.length && isFunction(callback)) { //Remove comments from the callback string, //look for require calls, and pull them into the dependencies, //but only if there are function args. if (callback.length) { callback .toString() .replace(commentRegExp, '') .replace(cjsRequireRegExp, function (match, dep) { deps.push(dep); }); //May be a CommonJS thing even without require calls, but still //could use exports, and module. Avoid doing exports and module //work though if it just needs require. //REQUIRES the function to expect the CommonJS variables in the //order listed below. deps = (callback.length === 1 ? ['require'] : ['require', 'exports', 'module']).concat(deps); } } //If in IE 6-8 and hit an anonymous define() call, do the interactive //work. if (useInteractive) { node = currentlyAddingScript || getInteractiveScript(); if (node) { if (!name) { name = node.getAttribute('data-requiremodule'); } context = contexts[node.getAttribute('data-requirecontext')]; } } //Always save off evaluating the def call until the script onload handler. //This allows multiple modules to be in a file without prematurely //tracing dependencies, and allows for anonymous module support, //where the module name is not known until the script onload event //occurs. If no context, use the global queue, and get it processed //in the onscript load callback. (context ? context.defQueue : globalDefQueue).push([name, deps, callback]); }; define.amd = { jQuery: true }; /** * Executes the text. Normally just uses eval, but can be modified * to use a better, environment-specific call. Only used for transpiling * loader plugins, not for plain JS modules. * @param {String} text the text to execute/evaluate. */ req.exec = function (text) { /*jslint evil: true */ return eval(text); }; //Set up with config info. req(cfg); }(this)); r.js-2.3.6/build/tests/lib/namespaceMinified/000077500000000000000000000000001334071220400210025ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/namespaceMinified/build.js000066400000000000000000000002021334071220400224310ustar00rootroot00000000000000({ baseUrl: '.', optimize: 'none', namespace: 'foo', name: 'main', include: ['reqlib'], out: 'foo.js' }) r.js-2.3.6/build/tests/lib/namespaceMinified/expected.js000066400000000000000000000415121334071220400231440ustar00rootroot00000000000000 var foo;(function () { if (!foo || !foo.requirejs) { if (!foo) { foo = {}; } else { require = foo; } /* RequireJS 2.1.8 Copyright (c) 2010-2012, The Dojo Foundation All Rights Reserved. Available via the MIT or new BSD license. see: http://github.com/jrburke/requirejs for details */ var requirejs,require,define; (function(Z){function H(b){return"[object Function]"===L.call(b)}function I(b){return"[object Array]"===L.call(b)}function y(b,c){if(b){var d;for(d=0;dthis.depCount&&!this.defined){if(H(m)){if(this.events.error&&this.map.isDefine||j.onError!==aa)try{e=i.execCb(c,m,b,e)}catch(d){a=d}else e=i.execCb(c,m,b,e);this.map.isDefine&&((b=this.module)&&void 0!==b.exports&&b.exports!== this.exports?e=b.exports:void 0===e&&this.usingExports&&(e=this.exports));if(a)return a.requireMap=this.map,a.requireModules=this.map.isDefine?[this.map.id]:null,a.requireType=this.map.isDefine?"define":"require",v(this.error=a)}else e=m;this.exports=e;if(this.map.isDefine&&!this.ignore&&(r[c]=e,j.onResourceLoad))j.onResourceLoad(i,this.map,this.depMaps);x(c);this.defined=!0}this.defining=!1;this.defined&&!this.defineEmitted&&(this.defineEmitted=!0,this.emit("defined",this.exports),this.defineEmitComplete= !0)}}else this.fetch()}},callPlugin:function(){var a=this.map,b=a.id,d=n(a.prefix);this.depMaps.push(d);t(d,"defined",u(this,function(e){var m,d;d=this.map.name;var g=this.map.parentMap?this.map.parentMap.name:null,h=i.makeRequire(a.parentMap,{enableBuildCallback:!0});if(this.map.unnormalized){if(e.normalize&&(d=e.normalize(d,function(a){return c(a,g,!0)})||""),e=n(a.prefix+"!"+d,this.map.parentMap),t(e,"defined",u(this,function(a){this.init([],function(){return a},null,{enabled:!0,ignore:!0})})), d=l(p,e.id)){this.depMaps.push(e);if(this.events.error)d.on("error",u(this,function(a){this.emit("error",a)}));d.enable()}}else m=u(this,function(a){this.init([],function(){return a},null,{enabled:!0})}),m.error=u(this,function(a){this.inited=!0;this.error=a;a.requireModules=[b];F(p,function(a){0===a.map.id.indexOf(b+"_unnormalized")&&x(a.map.id)});v(a)}),m.fromText=u(this,function(e,c){var d=a.name,g=n(d),B=O;c&&(e=c);B&&(O=!1);q(g);s(k.config,b)&&(k.config[d]=k.config[b]);try{j.exec(e)}catch(ca){return v(A("fromtexteval", "fromText eval for "+b+" failed: "+ca,ca,[b]))}B&&(O=!0);this.depMaps.push(g);i.completeLoad(d);h([d],m)}),e.load(a.name,h,m,k)}));i.enable(d,this);this.pluginMaps[d.id]=d},enable:function(){T[this.map.id]=this;this.enabling=this.enabled=!0;y(this.depMaps,u(this,function(a,b){var c,e;if("string"===typeof a){a=n(a,this.map.isDefine?this.map:this.map.parentMap,!1,!this.skipMap);this.depMaps[b]=a;if(c=l(N,a.id)){this.depExports[b]=c(this);return}this.depCount+=1;t(a,"defined",u(this,function(a){this.defineDep(b, a);this.check()}));this.errback&&t(a,"error",u(this,this.errback))}c=a.id;e=p[c];!s(N,c)&&(e&&!e.enabled)&&i.enable(a,this)}));F(this.pluginMaps,u(this,function(a){var b=l(p,a.id);b&&!b.enabled&&i.enable(a,this)}));this.enabling=!1;this.check()},on:function(a,b){var c=this.events[a];c||(c=this.events[a]=[]);c.push(b)},emit:function(a,b){y(this.events[a],function(a){a(b)});"error"===a&&delete this.events[a]}};i={config:k,contextName:b,registry:p,defined:r,urlFetched:S,defQueue:G,Module:X,makeModuleMap:n, nextTick:j.nextTick,onError:v,configure:function(a){a.baseUrl&&"/"!==a.baseUrl.charAt(a.baseUrl.length-1)&&(a.baseUrl+="/");var b=k.pkgs,c=k.shim,e={paths:!0,config:!0,map:!0};F(a,function(a,b){e[b]?"map"===b?(k.map||(k.map={}),Q(k[b],a,!0,!0)):Q(k[b],a,!0):k[b]=a});a.shim&&(F(a.shim,function(a,b){I(a)&&(a={deps:a});if((a.exports||a.init)&&!a.exportsFn)a.exportsFn=i.makeShimExports(a);c[b]=a}),k.shim=c);a.packages&&(y(a.packages,function(a){a="string"===typeof a?{name:a}:a;b[a.name]={name:a.name, location:a.location||a.name,main:(a.main||"main").replace(ja,"").replace(ea,"")}}),k.pkgs=b);F(p,function(a,b){!a.inited&&!a.map.unnormalized&&(a.map=n(b))});if(a.deps||a.callback)i.require(a.deps||[],a.callback)},makeShimExports:function(a){return function(){var b;a.init&&(b=a.init.apply(Z,arguments));return b||a.exports&&ba(a.exports)}},makeRequire:function(a,f){function d(e,c,h){var g,k;f.enableBuildCallback&&(c&&H(c))&&(c.__requireJsBuild=!0);if("string"===typeof e){if(H(c))return v(A("requireargs", "Invalid require call"),h);if(a&&s(N,e))return N[e](p[a.id]);if(j.get)return j.get(i,e,a,d);g=n(e,a,!1,!0);g=g.id;return!s(r,g)?v(A("notloaded",'Module name "'+g+'" has not been loaded yet for context: '+b+(a?"":". Use require([])"))):r[g]}K();i.nextTick(function(){K();k=q(n(null,a));k.skipMap=f.skipMap;k.init(e,c,h,{enabled:!0});C()});return d}f=f||{};Q(d,{isBrowser:z,toUrl:function(b){var d,f=b.lastIndexOf("."),g=b.split("/")[0];if(-1!==f&&(!("."===g||".."===g)||1h.attachEvent.toString().indexOf("[native code"))&&!W?(O=!0,h.attachEvent("onreadystatechange",b.onScriptLoad)):(h.addEventListener("load",b.onScriptLoad,!1),h.addEventListener("error", b.onScriptError,!1)),h.src=d,K=h,C?x.insertBefore(h,C):x.appendChild(h),K=null,h;if(da)try{importScripts(d),b.completeLoad(c)}catch(l){b.onError(A("importscripts","importScripts failed for "+c+" at "+d,l,[c]))}};z&&M(document.getElementsByTagName("script"),function(b){x||(x=b.parentNode);if(J=b.getAttribute("data-main"))return q=J,t.baseUrl||(D=q.split("/"),q=D.pop(),fa=D.length?D.join("/")+"/":"./",t.baseUrl=fa),q=q.replace(ea,""),j.jsExtRegExp.test(q)&&(q=J),t.deps=t.deps?t.deps.concat(q):[q],!0}); define=function(b,c,d){var h,j;"string"!==typeof b&&(d=c,c=b,b=null);I(c)||(d=c,c=null);!c&&H(d)&&(c=[],d.length&&(d.toString().replace(la,"").replace(ma,function(b,d){c.push(d)}),c=(1===d.length?["require"]:["require","exports","module"]).concat(c)));if(O){if(!(h=K))P&&"interactive"===P.readyState||M(document.getElementsByTagName("script"),function(b){if("interactive"===b.readyState)return P=b}),h=P;h&&(b||(b=h.getAttribute("data-requiremodule")),j=E[h.getAttribute("data-requirecontext")])}(j?j.defQueue: R).push([b,c,d])};define.amd={jQuery:!0};j.exec=function(b){return eval(b)};j(t)}})(this); foo.requirejs = requirejs;foo.require = require;foo.define = define; } }()); foo.define("reqlib", function(){}); (function (define) { foo.define( 'modules/one',[],function ( ){ return { name: 'one' }; }); }(typeof foo.define === 'function' && foo.define.amd ? foo.define : function () { })); if (typeof foo.define === 'function' && foo.define.amd && foo.define.amd.jQuery) { foo.define('modules/two',['require','exports','module'],function (require, exports, module) { return { name: 'two', color: module.config().color }; }); } ; if(false){ }else if(typeof foo.define === 'function' && typeof foo.define.amd === 'object' && foo.define.amd){ foo.define('modules/four',{ name: 'four' }); }; if (typeof foo.define === 'function' && foo.define['amd']) { foo.define('modules/six',{ name: 'six' }); } ; if ('function' === typeof foo.define && foo.define.amd) { foo.define('modules/five',['require','./six'],function (require) { return { name: 'five', six: require('./six') }; }); } ; (function (define) { foo.define('modules/three', ['require','./four','./five'],function (require) { //If have dependencies, get them here var four = require('./four'), five = require('./five'); //Return the module definition. return { name: 'three', fourName: four.name, fiveName: five.name, }; }); }(typeof foo.define === 'function' && foo.define.amd ? foo.define : function (id, factory) { })); foo.require(['modules/one', 'modules/two', 'modules/three'], function (one, two, three) { console.log("One's name is: " + one.name); console.log("Two's name is: " + two.name); console.log("Two's color is: " + two.color); console.log("Two's name is: " + three.name); console.log("Three's fourName is: " + three.fourName); console.log("Three's fiveName is: " + three.fiveName); }); foo.define("main", function(){}); r.js-2.3.6/build/tests/lib/namespaceMinified/index.html000066400000000000000000000005151334071220400230000ustar00rootroot00000000000000

Hello World

r.js-2.3.6/build/tests/lib/namespaceMinified/main.js000066400000000000000000000006201334071220400222620ustar00rootroot00000000000000require(['modules/one', 'modules/two', 'modules/three'], function (one, two, three) { console.log("One's name is: " + one.name); console.log("Two's name is: " + two.name); console.log("Two's color is: " + two.color); console.log("Two's name is: " + three.name); console.log("Three's fourName is: " + three.fourName); console.log("Three's fiveName is: " + three.fiveName); }); r.js-2.3.6/build/tests/lib/namespaceMinified/modules/000077500000000000000000000000001334071220400224525ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/namespaceMinified/modules/five.js000066400000000000000000000002641334071220400237430ustar00rootroot00000000000000if ("function" === typeof define && define.amd) { define(function (require) { return { name: 'five', six: require('./six') }; }); } r.js-2.3.6/build/tests/lib/namespaceMinified/modules/four.js000066400000000000000000000002151334071220400237610ustar00rootroot00000000000000if(false){ }else if(typeof define == "function" && typeof define.amd == "object" && define.amd){ define({ name: 'four' }); }r.js-2.3.6/build/tests/lib/namespaceMinified/modules/one.js000066400000000000000000000002441334071220400235710ustar00rootroot00000000000000(function (define) { define( function ( ){ return { name: 'one' }; }); }(typeof define === 'function' && define.amd ? define : function () { })); r.js-2.3.6/build/tests/lib/namespaceMinified/modules/six.js000066400000000000000000000001401334071220400236060ustar00rootroot00000000000000if (typeof define === 'function' && define['amd']) { define({ name: 'six' }); } r.js-2.3.6/build/tests/lib/namespaceMinified/modules/three.js000066400000000000000000000007011334071220400241150ustar00rootroot00000000000000(function (define) { define('modules/three', function (require) { //If have dependencies, get them here var four = require('./four'), five = require('./five'); //Return the module definition. return { name: 'three', fourName: four.name, fiveName: five.name, }; }); }(typeof define === 'function' && define.amd ? define : function (id, factory) { })); r.js-2.3.6/build/tests/lib/namespaceMinified/modules/two.js000066400000000000000000000003401334071220400236160ustar00rootroot00000000000000if (typeof define === 'function' && define.amd && define.amd.jQuery) { define(function (require, exports, module) { return { name: 'two', color: module.config().color }; }); } r.js-2.3.6/build/tests/lib/namespaceMinified/reqlib.js000066400000000000000000000353241334071220400226250ustar00rootroot00000000000000/* RequireJS 2.1.8 Copyright (c) 2010-2012, The Dojo Foundation All Rights Reserved. Available via the MIT or new BSD license. see: http://github.com/jrburke/requirejs for details */ var requirejs,require,define; (function(Z){function H(b){return"[object Function]"===L.call(b)}function I(b){return"[object Array]"===L.call(b)}function y(b,c){if(b){var d;for(d=0;dthis.depCount&&!this.defined){if(H(m)){if(this.events.error&&this.map.isDefine||j.onError!==aa)try{e=i.execCb(c,m,b,e)}catch(d){a=d}else e=i.execCb(c,m,b,e);this.map.isDefine&&((b=this.module)&&void 0!==b.exports&&b.exports!== this.exports?e=b.exports:void 0===e&&this.usingExports&&(e=this.exports));if(a)return a.requireMap=this.map,a.requireModules=this.map.isDefine?[this.map.id]:null,a.requireType=this.map.isDefine?"define":"require",v(this.error=a)}else e=m;this.exports=e;if(this.map.isDefine&&!this.ignore&&(r[c]=e,j.onResourceLoad))j.onResourceLoad(i,this.map,this.depMaps);x(c);this.defined=!0}this.defining=!1;this.defined&&!this.defineEmitted&&(this.defineEmitted=!0,this.emit("defined",this.exports),this.defineEmitComplete= !0)}}else this.fetch()}},callPlugin:function(){var a=this.map,b=a.id,d=n(a.prefix);this.depMaps.push(d);t(d,"defined",u(this,function(e){var m,d;d=this.map.name;var g=this.map.parentMap?this.map.parentMap.name:null,h=i.makeRequire(a.parentMap,{enableBuildCallback:!0});if(this.map.unnormalized){if(e.normalize&&(d=e.normalize(d,function(a){return c(a,g,!0)})||""),e=n(a.prefix+"!"+d,this.map.parentMap),t(e,"defined",u(this,function(a){this.init([],function(){return a},null,{enabled:!0,ignore:!0})})), d=l(p,e.id)){this.depMaps.push(e);if(this.events.error)d.on("error",u(this,function(a){this.emit("error",a)}));d.enable()}}else m=u(this,function(a){this.init([],function(){return a},null,{enabled:!0})}),m.error=u(this,function(a){this.inited=!0;this.error=a;a.requireModules=[b];F(p,function(a){0===a.map.id.indexOf(b+"_unnormalized")&&x(a.map.id)});v(a)}),m.fromText=u(this,function(e,c){var d=a.name,g=n(d),B=O;c&&(e=c);B&&(O=!1);q(g);s(k.config,b)&&(k.config[d]=k.config[b]);try{j.exec(e)}catch(ca){return v(A("fromtexteval", "fromText eval for "+b+" failed: "+ca,ca,[b]))}B&&(O=!0);this.depMaps.push(g);i.completeLoad(d);h([d],m)}),e.load(a.name,h,m,k)}));i.enable(d,this);this.pluginMaps[d.id]=d},enable:function(){T[this.map.id]=this;this.enabling=this.enabled=!0;y(this.depMaps,u(this,function(a,b){var c,e;if("string"===typeof a){a=n(a,this.map.isDefine?this.map:this.map.parentMap,!1,!this.skipMap);this.depMaps[b]=a;if(c=l(N,a.id)){this.depExports[b]=c(this);return}this.depCount+=1;t(a,"defined",u(this,function(a){this.defineDep(b, a);this.check()}));this.errback&&t(a,"error",u(this,this.errback))}c=a.id;e=p[c];!s(N,c)&&(e&&!e.enabled)&&i.enable(a,this)}));F(this.pluginMaps,u(this,function(a){var b=l(p,a.id);b&&!b.enabled&&i.enable(a,this)}));this.enabling=!1;this.check()},on:function(a,b){var c=this.events[a];c||(c=this.events[a]=[]);c.push(b)},emit:function(a,b){y(this.events[a],function(a){a(b)});"error"===a&&delete this.events[a]}};i={config:k,contextName:b,registry:p,defined:r,urlFetched:S,defQueue:G,Module:X,makeModuleMap:n, nextTick:j.nextTick,onError:v,configure:function(a){a.baseUrl&&"/"!==a.baseUrl.charAt(a.baseUrl.length-1)&&(a.baseUrl+="/");var b=k.pkgs,c=k.shim,e={paths:!0,config:!0,map:!0};F(a,function(a,b){e[b]?"map"===b?(k.map||(k.map={}),Q(k[b],a,!0,!0)):Q(k[b],a,!0):k[b]=a});a.shim&&(F(a.shim,function(a,b){I(a)&&(a={deps:a});if((a.exports||a.init)&&!a.exportsFn)a.exportsFn=i.makeShimExports(a);c[b]=a}),k.shim=c);a.packages&&(y(a.packages,function(a){a="string"===typeof a?{name:a}:a;b[a.name]={name:a.name, location:a.location||a.name,main:(a.main||"main").replace(ja,"").replace(ea,"")}}),k.pkgs=b);F(p,function(a,b){!a.inited&&!a.map.unnormalized&&(a.map=n(b))});if(a.deps||a.callback)i.require(a.deps||[],a.callback)},makeShimExports:function(a){return function(){var b;a.init&&(b=a.init.apply(Z,arguments));return b||a.exports&&ba(a.exports)}},makeRequire:function(a,f){function d(e,c,h){var g,k;f.enableBuildCallback&&(c&&H(c))&&(c.__requireJsBuild=!0);if("string"===typeof e){if(H(c))return v(A("requireargs", "Invalid require call"),h);if(a&&s(N,e))return N[e](p[a.id]);if(j.get)return j.get(i,e,a,d);g=n(e,a,!1,!0);g=g.id;return!s(r,g)?v(A("notloaded",'Module name "'+g+'" has not been loaded yet for context: '+b+(a?"":". Use require([])"))):r[g]}K();i.nextTick(function(){K();k=q(n(null,a));k.skipMap=f.skipMap;k.init(e,c,h,{enabled:!0});C()});return d}f=f||{};Q(d,{isBrowser:z,toUrl:function(b){var d,f=b.lastIndexOf("."),g=b.split("/")[0];if(-1!==f&&(!("."===g||".."===g)||1h.attachEvent.toString().indexOf("[native code"))&&!W?(O=!0,h.attachEvent("onreadystatechange",b.onScriptLoad)):(h.addEventListener("load",b.onScriptLoad,!1),h.addEventListener("error", b.onScriptError,!1)),h.src=d,K=h,C?x.insertBefore(h,C):x.appendChild(h),K=null,h;if(da)try{importScripts(d),b.completeLoad(c)}catch(l){b.onError(A("importscripts","importScripts failed for "+c+" at "+d,l,[c]))}};z&&M(document.getElementsByTagName("script"),function(b){x||(x=b.parentNode);if(J=b.getAttribute("data-main"))return q=J,t.baseUrl||(D=q.split("/"),q=D.pop(),fa=D.length?D.join("/")+"/":"./",t.baseUrl=fa),q=q.replace(ea,""),j.jsExtRegExp.test(q)&&(q=J),t.deps=t.deps?t.deps.concat(q):[q],!0}); define=function(b,c,d){var h,j;"string"!==typeof b&&(d=c,c=b,b=null);I(c)||(d=c,c=null);!c&&H(d)&&(c=[],d.length&&(d.toString().replace(la,"").replace(ma,function(b,d){c.push(d)}),c=(1===d.length?["require"]:["require","exports","module"]).concat(c)));if(O){if(!(h=K))P&&"interactive"===P.readyState||M(document.getElementsByTagName("script"),function(b){if("interactive"===b.readyState)return P=b}),h=P;h&&(b||(b=h.getAttribute("data-requiremodule")),j=E[h.getAttribute("data-requirecontext")])}(j?j.defQueue: R).push([b,c,d])};define.amd={jQuery:!0};j.exec=function(b){return eval(b)};j(t)}})(this); r.js-2.3.6/build/tests/lib/nested/000077500000000000000000000000001334071220400166635ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/nested/a.js000066400000000000000000000002421334071220400174370ustar00rootroot00000000000000define(function(require) { var b = require('b'); require(['e'], function (e) { }); return { name: 'a', b: b }; }); r.js-2.3.6/build/tests/lib/nested/b.js000066400000000000000000000000321334071220400174350ustar00rootroot00000000000000define({ name: 'b' });r.js-2.3.6/build/tests/lib/nested/build.js000066400000000000000000000001301334071220400203120ustar00rootroot00000000000000({ baseUrl: '.', optimize: 'none', name: 'main', out: 'main-built.js' })r.js-2.3.6/build/tests/lib/nested/buildWithCE.js000066400000000000000000000002001334071220400213540ustar00rootroot00000000000000({ baseUrl: '.', findNestedDependencies: true, optimize: 'none', name: 'main', out: 'main-builtWithCE.js' })r.js-2.3.6/build/tests/lib/nested/c.js000066400000000000000000000000321334071220400174360ustar00rootroot00000000000000define({ name: 'c' });r.js-2.3.6/build/tests/lib/nested/d.js000066400000000000000000000000321334071220400174370ustar00rootroot00000000000000define({ name: 'd' });r.js-2.3.6/build/tests/lib/nested/e.js000066400000000000000000000000321334071220400174400ustar00rootroot00000000000000define({ name: 'e' });r.js-2.3.6/build/tests/lib/nested/expected-built.js000066400000000000000000000010751334071220400221420ustar00rootroot00000000000000 define('b',{ name: 'b' }); define('a',['require','b'],function(require) { var b = require('b'); require(['e'], function (e) { }); return { name: 'a', b: b }; }); //Make sure named modules are scanned for nested dependencies. define('top', ['require', 'a'], function (require, a) { foo.bar.include({ renderUI: function () { require(['c'], function (c) { }); } }); }); define('d',{ name: 'd' }); require(['top', 'd'], function () { }); define("main", function(){}); r.js-2.3.6/build/tests/lib/nested/expected-builtWithCE.js000066400000000000000000000011731334071220400232050ustar00rootroot00000000000000 define('b',{ name: 'b' }); define('e',{ name: 'e' }); define('a',['require','b'],function(require) { var b = require('b'); require(['e'], function (e) { }); return { name: 'a', b: b }; }); define('c',{ name: 'c' }); //Make sure named modules are scanned for nested dependencies. define('top', ['require', 'a'], function (require, a) { foo.bar.include({ renderUI: function () { require(['c'], function (c) { }); } }); }); define('d',{ name: 'd' }); require(['top', 'd'], function () { }); define("main", function(){}); r.js-2.3.6/build/tests/lib/nested/main.js000066400000000000000000000000511334071220400201410ustar00rootroot00000000000000require(['top', 'd'], function () { }); r.js-2.3.6/build/tests/lib/nested/top.js000066400000000000000000000003761334071220400200310ustar00rootroot00000000000000//Make sure named modules are scanned for nested dependencies. define('top', ['require', 'a'], function (require, a) { foo.bar.include({ renderUI: function () { require(['c'], function (c) { }); } }); }); r.js-2.3.6/build/tests/lib/nestedHas/000077500000000000000000000000001334071220400173175ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/nestedHas/a.js000066400000000000000000000000321334071220400200700ustar00rootroot00000000000000define({ name: 'a' });r.js-2.3.6/build/tests/lib/nestedHas/b.js000066400000000000000000000000321334071220400200710ustar00rootroot00000000000000define({ name: 'b' });r.js-2.3.6/build/tests/lib/nestedHas/build.js000066400000000000000000000001311334071220400207470ustar00rootroot00000000000000({ baseUrl: '.', optimize: 'none', name: 'main', out: 'main-built.js' }) r.js-2.3.6/build/tests/lib/nestedHas/buildNeedAll.js000066400000000000000000000003101334071220400221730ustar00rootroot00000000000000({ baseUrl: '.', findNestedDependencies: true, //Pass a has, but should get all modules for main.js has: {}, optimize: 'none', name: 'main', out: 'main-builtNeedAll.js' }) r.js-2.3.6/build/tests/lib/nestedHas/buildNeedB.js000066400000000000000000000002741334071220400216550ustar00rootroot00000000000000({ baseUrl: '.', findNestedDependencies: true, has: { needC: false, needB: true }, optimize: 'none', name: 'main', out: 'main-builtNeedB.js' }) r.js-2.3.6/build/tests/lib/nestedHas/buildNeedC.js000066400000000000000000000002741334071220400216560ustar00rootroot00000000000000({ baseUrl: '.', findNestedDependencies: true, has: { needC: true, needB: false }, optimize: 'none', name: 'main', out: 'main-builtNeedC.js' }) r.js-2.3.6/build/tests/lib/nestedHas/buildNeedD.js000066400000000000000000000002751334071220400216600ustar00rootroot00000000000000({ baseUrl: '.', findNestedDependencies: true, has: { needC: false, needB: false }, optimize: 'none', name: 'main', out: 'main-builtNeedD.js' }) r.js-2.3.6/build/tests/lib/nestedHas/buildNested.js000066400000000000000000000002011334071220400221100ustar00rootroot00000000000000({ baseUrl: '.', findNestedDependencies: true, optimize: 'none', name: 'main', out: 'main-builtNested.js' }) r.js-2.3.6/build/tests/lib/nestedHas/c.js000066400000000000000000000000321334071220400200720ustar00rootroot00000000000000define({ name: 'c' });r.js-2.3.6/build/tests/lib/nestedHas/d.js000066400000000000000000000000331334071220400200740ustar00rootroot00000000000000define({ name: 'd' }); r.js-2.3.6/build/tests/lib/nestedHas/expected-built.js000066400000000000000000000004731334071220400225770ustar00rootroot00000000000000 define('a',{ name: 'a' }); define('main',['require', 'a'], function(require, a) { if (has('needC')) { require(['c'], function (c) { }); } else if (has('needB')) { require(['b'], function (b) { }); } else { require(['d'], function (d) { }); } });r.js-2.3.6/build/tests/lib/nestedHas/expected-builtNeedAll.js000066400000000000000000000006311334071220400240200ustar00rootroot00000000000000 define('a',{ name: 'a' }); define('c',{ name: 'c' }); define('b',{ name: 'b' }); define('d',{ name: 'd' }); define('main',['require', 'a'], function(require, a) { if (has('needC')) { require(['c'], function (c) { }); } else if (has('needB')) { require(['b'], function (b) { }); } else { require(['d'], function (d) { }); } });r.js-2.3.6/build/tests/lib/nestedHas/expected-builtNeedB.js000066400000000000000000000005131334071220400234700ustar00rootroot00000000000000 define('a',{ name: 'a' }); define('b',{ name: 'b' }); define('main',['require', 'a'], function(require, a) { if (false) { require(['c'], function (c) { }); } else if (true) { require(['b'], function (b) { }); } else { require(['d'], function (d) { }); } });r.js-2.3.6/build/tests/lib/nestedHas/expected-builtNeedC.js000066400000000000000000000005131334071220400234710ustar00rootroot00000000000000 define('a',{ name: 'a' }); define('c',{ name: 'c' }); define('main',['require', 'a'], function(require, a) { if (true) { require(['c'], function (c) { }); } else if (false) { require(['b'], function (b) { }); } else { require(['d'], function (d) { }); } });r.js-2.3.6/build/tests/lib/nestedHas/expected-builtNeedD.js000066400000000000000000000005151334071220400234740ustar00rootroot00000000000000 define('a',{ name: 'a' }); define('d',{ name: 'd' }); define('main',['require', 'a'], function(require, a) { if (false) { require(['c'], function (c) { }); } else if (false) { require(['b'], function (b) { }); } else { require(['d'], function (d) { }); } });r.js-2.3.6/build/tests/lib/nestedHas/expected-builtNested.js000066400000000000000000000006311334071220400237360ustar00rootroot00000000000000 define('a',{ name: 'a' }); define('c',{ name: 'c' }); define('b',{ name: 'b' }); define('d',{ name: 'd' }); define('main',['require', 'a'], function(require, a) { if (has('needC')) { require(['c'], function (c) { }); } else if (has('needB')) { require(['b'], function (b) { }); } else { require(['d'], function (d) { }); } });r.js-2.3.6/build/tests/lib/nestedHas/main.js000066400000000000000000000004241334071220400206010ustar00rootroot00000000000000 define(['require', 'a'], function(require, a) { if (has('needC')) { require(['c'], function (c) { }); } else if (has('needB')) { require(['b'], function (b) { }); } else { require(['d'], function (d) { }); } });r.js-2.3.6/build/tests/lib/noexports/000077500000000000000000000000001334071220400174425ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/noexports/build.js000066400000000000000000000001271334071220400210770ustar00rootroot00000000000000{ baseUrl: '.', name: 'main', out: 'main-built.js', optimize: 'none' } r.js-2.3.6/build/tests/lib/noexports/converter.js000066400000000000000000000005661334071220400220160ustar00rootroot00000000000000(function (factory) { if (typeof exports !== 'undefined') { // Node/CommonJS factory(exports); } else if (typeof define === 'function' && define.amd) { // AMD define(['exports'], factory); } }(function (exports) { exports.version = '2'; exports.convert = function (text) { return text.toUpperCase(); }; })); r.js-2.3.6/build/tests/lib/noexports/expected.js000066400000000000000000000031071334071220400216020ustar00rootroot00000000000000 (function (factory) { if (typeof exports !== 'undefined') { // Node/CommonJS factory(exports); } else if (typeof define === 'function' && define.amd) { // AMD define('converter',['exports'], factory); } }(function (exports) { exports.version = '2'; exports.convert = function (text) { return text.toUpperCase(); }; })); define('plug',['converter'], function (converter) { var buildMap = {}; function jsEscape(content) { return content.replace(/(['\\])/g, '\\$1') .replace(/[\f]/g, "\\f") .replace(/[\b]/g, "\\b") .replace(/[\n]/g, "\\n") .replace(/[\t]/g, "\\t") .replace(/[\r]/g, "\\r"); } return { version: '1', load: function (name, require, onLoad, config) { var converted = converter.convert(name); buildMap[name] = converted; onLoad(converted); }, write: function (pluginName, moduleName, write, config) { if (moduleName in buildMap) { var content = jsEscape(buildMap[moduleName]); write("define('" + pluginName + "!" + moduleName + "', function () { return '" + content + "';});\n"); } } }; }); define('plug!shouldbeuppercasetext', function () { return 'SHOULDBEUPPERCASETEXT';}); require(['plug', 'plug!shouldbeuppercasetext'], function (plug, text) { console.log('plugin version: ' + plug.version); console.log('converted text: ' + text); }); define("main", function(){}); r.js-2.3.6/build/tests/lib/noexports/main.js000066400000000000000000000002541334071220400207250ustar00rootroot00000000000000require(['plug', 'plug!shouldbeuppercasetext'], function (plug, text) { console.log('plugin version: ' + plug.version); console.log('converted text: ' + text); }); r.js-2.3.6/build/tests/lib/noexports/plug.js000066400000000000000000000016311334071220400207500ustar00rootroot00000000000000define(['converter'], function (converter) { var buildMap = {}; function jsEscape(content) { return content.replace(/(['\\])/g, '\\$1') .replace(/[\f]/g, "\\f") .replace(/[\b]/g, "\\b") .replace(/[\n]/g, "\\n") .replace(/[\t]/g, "\\t") .replace(/[\r]/g, "\\r"); } return { version: '1', load: function (name, require, onLoad, config) { var converted = converter.convert(name); buildMap[name] = converted; onLoad(converted); }, write: function (pluginName, moduleName, write, config) { if (moduleName in buildMap) { var content = jsEscape(buildMap[moduleName]); write("define('" + pluginName + "!" + moduleName + "', function () { return '" + content + "';});\n"); } } }; }); r.js-2.3.6/build/tests/lib/nojQDupeDefine/000077500000000000000000000000001334071220400202415ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/nojQDupeDefine/build.js000066400000000000000000000001271334071220400216760ustar00rootroot00000000000000{ baseUrl: '.', name: 'main', out: 'main-built.js', optimize: 'none' } r.js-2.3.6/build/tests/lib/nojQDupeDefine/expected.js000066400000000000000000000043171334071220400224050ustar00rootroot00000000000000/*! * jQuery JavaScript Library v2.1.1 * http://jquery.com/ * * Includes Sizzle.js * http://sizzlejs.com/ * * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors * Released under the MIT license * http://jquery.org/license * * Date: 2014-05-01T17:11Z */ (function( global, factory ) { if ( typeof module === "object" && typeof module.exports === "object" ) { // For CommonJS and CommonJS-like environments where a proper window is present, // execute the factory and get jQuery // For environments that do not inherently posses a window with a document // (such as Node.js), expose a jQuery-making factory as module.exports // This accentuates the need for the creation of a real window // e.g. var jQuery = require("jquery")(window); // See ticket #14549 for more info module.exports = global.document ? factory( global, true ) : function( w ) { if ( !w.document ) { throw new Error( "jQuery requires a window with a document" ); } return factory( w ); }; } else { factory( global ); } // Pass this if window is not defined yet }(typeof window !== "undefined" ? window : this, function( window, noGlobal ) { var jQuery = {}; // Register as a named AMD module, since jQuery can be concatenated with other // files that may use define, but not via a proper concatenation script that // understands anonymous AMD modules. A named AMD is safest and most robust // way to register. Lowercase jquery is used because AMD module names are // derived from file names, and jQuery is normally delivered in a lowercase // file name. Do this after creating the global so that if an AMD module wants // to call noConflict to hide this version of jQuery, it will work. // Note that for maximum portability, libraries that are not jQuery should // declare themselves as anonymous modules, and avoid setting a global if an // AMD loader is present. jQuery is a special case. For more information, see // https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon if ( typeof define === "function" && define.amd ) { define( "jquery", [], function() { return jQuery; }); } return jQuery; })); require(['jquery'], function() {}); define("main", function(){}); r.js-2.3.6/build/tests/lib/nojQDupeDefine/jquery.js000066400000000000000000000042111334071220400221140ustar00rootroot00000000000000/*! * jQuery JavaScript Library v2.1.1 * http://jquery.com/ * * Includes Sizzle.js * http://sizzlejs.com/ * * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors * Released under the MIT license * http://jquery.org/license * * Date: 2014-05-01T17:11Z */ (function( global, factory ) { if ( typeof module === "object" && typeof module.exports === "object" ) { // For CommonJS and CommonJS-like environments where a proper window is present, // execute the factory and get jQuery // For environments that do not inherently posses a window with a document // (such as Node.js), expose a jQuery-making factory as module.exports // This accentuates the need for the creation of a real window // e.g. var jQuery = require("jquery")(window); // See ticket #14549 for more info module.exports = global.document ? factory( global, true ) : function( w ) { if ( !w.document ) { throw new Error( "jQuery requires a window with a document" ); } return factory( w ); }; } else { factory( global ); } // Pass this if window is not defined yet }(typeof window !== "undefined" ? window : this, function( window, noGlobal ) { var jQuery = {}; // Register as a named AMD module, since jQuery can be concatenated with other // files that may use define, but not via a proper concatenation script that // understands anonymous AMD modules. A named AMD is safest and most robust // way to register. Lowercase jquery is used because AMD module names are // derived from file names, and jQuery is normally delivered in a lowercase // file name. Do this after creating the global so that if an AMD module wants // to call noConflict to hide this version of jQuery, it will work. // Note that for maximum portability, libraries that are not jQuery should // declare themselves as anonymous modules, and avoid setting a global if an // AMD loader is present. jQuery is a special case. For more information, see // https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon if ( typeof define === "function" && define.amd ) { define( "jquery", [], function() { return jQuery; }); } return jQuery; })); r.js-2.3.6/build/tests/lib/nojQDupeDefine/main.js000066400000000000000000000000451334071220400215220ustar00rootroot00000000000000require(['jquery'], function() {}); r.js-2.3.6/build/tests/lib/nonStrict/000077500000000000000000000000001334071220400173645ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/nonStrict/build.js000066400000000000000000000001051334071220400210150ustar00rootroot00000000000000{ name: 'main', out: 'main-built.js', optimize: 'none' } r.js-2.3.6/build/tests/lib/nonStrict/expected.js000066400000000000000000000004221334071220400215210ustar00rootroot00000000000000 define('plug',{ pluginBuilder: './plugBuilder', load: function () { throw 'Should be using pluginBuilder'; } }); define('plug!one',[],function () { return 'one';}); define('main',['plug!one'], function (one) { console.log('one === ' + one); }); r.js-2.3.6/build/tests/lib/nonStrict/main.js000066400000000000000000000001151334071220400206430ustar00rootroot00000000000000define(['plug!one'], function (one) { console.log('one === ' + one); }); r.js-2.3.6/build/tests/lib/nonStrict/plug.js000066400000000000000000000002001334071220400206610ustar00rootroot00000000000000define({ pluginBuilder: './plugBuilder', load: function () { throw 'Should be using pluginBuilder'; } }); r.js-2.3.6/build/tests/lib/nonStrict/plugBuilder.js000066400000000000000000000007051334071220400222020ustar00rootroot00000000000000define({ //Use octal that will throw up in a 'use strict' eval. foo: '\033', load: function (name, req, onLoad, config) { onLoad(name); }, write: function (pluginName, moduleName, write, config) { var content = moduleName; write.asModule(pluginName + "!" + moduleName, "define(function () { return '" + content + "';});\n"); } }); r.js-2.3.6/build/tests/lib/nonUmdIdentifiers/000077500000000000000000000000001334071220400210275ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/nonUmdIdentifiers/angular.js000066400000000000000000000000351334071220400230140ustar00rootroot00000000000000define({ name: 'angular' }); r.js-2.3.6/build/tests/lib/nonUmdIdentifiers/app.js000066400000000000000000000000311334071220400221370ustar00rootroot00000000000000define({ name: 'app' }); r.js-2.3.6/build/tests/lib/nonUmdIdentifiers/build.js000066400000000000000000000001571334071220400224670ustar00rootroot00000000000000{ baseUrl: '.', name: 'main', out: 'main-built.js', findNestedDependencies: true, optimize: 'none' } r.js-2.3.6/build/tests/lib/nonUmdIdentifiers/debug.js000066400000000000000000000000331334071220400224470ustar00rootroot00000000000000define({ name: 'debug' }); r.js-2.3.6/build/tests/lib/nonUmdIdentifiers/expected.js000066400000000000000000000045331334071220400231730ustar00rootroot00000000000000define('jquery',{ name: 'jquery' }); define('gsn',{ name: 'gsn' }); define('gsn-extensions',{ name: 'gsn-extensions' }); define('debug',{ name: 'debug' }); define('jqueryui',{ name: 'jqueryiui' }); define('app',{ name: 'app' }); define('angular',{ name: 'angular' }); define('states',{ name: 'states' }); (function (global) { var loadEvents = (function loadTimerObj() { }()).add('main-init'); define('loadEvents', [], loadEvents); if (global.__gsnConfig) { define('gsnConfig', [], global.__gsnConfig); } else { define('gsnConfig', [], { empty: true }); } if (global.__requireConfig) { define('requireConfig', [], global.__requireConfig); } else { define('requireConfig', [], { empty: true }); } if (global.__gaq) { define('gaq', [], global._gaq); } else { define('gaq', [], []); } if (global.__index) { define('index', [], global.__index); } else { define('index', [], {}); } define('modernizr', [], global.Modernizr); require(['requireConfig', 'gsnConfig'], function (requireConfig, gsnConfig) { 'use strict'; var paymentsShim = {}, legacyShim = {}, debugFilter; gsnConfig.dropInHeader = global.__dropInHeader; define('legacyShim', [], legacyShim); if (gsnConfig.useLegacyShim) { global.redesignShim = legacyShim; } define('paymentsShim', [], paymentsShim); if (gsnConfig.usePaymentsShim) { global.paymentsShim = {}; } var jqKeys = { jquery: 'jquery', ui: 'jqueryui' }, jQueryAlreadyDefined = global.jQuery, jQueryUIAlreadyDefined = global.jQuery && global.jQuery.ui; if (jQueryAlreadyDefined) { define(jqKeys.jquery, [], function() { return global.jQuery; }); } if (jQueryUIAlreadyDefined) { define(jqKeys.ui, [], function () { return {}; }); } require(['jquery'], function ($) { }); require([ 'jquery', 'gsn', 'gsn-extensions', 'debug', 'jqueryui' ], function ($, gsn, gsnExtensions, debugLogger) { function start() {} require([ 'app', 'angular', 'modernizr', 'states' ], start); }); }); })(this); r.js-2.3.6/build/tests/lib/nonUmdIdentifiers/gsn-extensions.js000066400000000000000000000000441334071220400243470ustar00rootroot00000000000000define({ name: 'gsn-extensions' }); r.js-2.3.6/build/tests/lib/nonUmdIdentifiers/gsn.js000066400000000000000000000000311334071220400221460ustar00rootroot00000000000000define({ name: 'gsn' }); r.js-2.3.6/build/tests/lib/nonUmdIdentifiers/jquery.js000066400000000000000000000000341334071220400227010ustar00rootroot00000000000000define({ name: 'jquery' }); r.js-2.3.6/build/tests/lib/nonUmdIdentifiers/jqueryui.js000066400000000000000000000000371334071220400232420ustar00rootroot00000000000000define({ name: 'jqueryiui' }); r.js-2.3.6/build/tests/lib/nonUmdIdentifiers/main.js000066400000000000000000000040411334071220400223100ustar00rootroot00000000000000(function (global) { var loadEvents = (function loadTimerObj() { }()).add('main-init'); define('loadEvents', [], loadEvents); if (global.__gsnConfig) { define('gsnConfig', [], global.__gsnConfig); } else { define('gsnConfig', [], { empty: true }); } if (global.__requireConfig) { define('requireConfig', [], global.__requireConfig); } else { define('requireConfig', [], { empty: true }); } if (global.__gaq) { define('gaq', [], global._gaq); } else { define('gaq', [], []); } if (global.__index) { define('index', [], global.__index); } else { define('index', [], {}); } define('modernizr', [], global.Modernizr); require(['requireConfig', 'gsnConfig'], function (requireConfig, gsnConfig) { 'use strict'; var paymentsShim = {}, legacyShim = {}, debugFilter; gsnConfig.dropInHeader = global.__dropInHeader; define('legacyShim', [], legacyShim); if (gsnConfig.useLegacyShim) { global.redesignShim = legacyShim; } define('paymentsShim', [], paymentsShim); if (gsnConfig.usePaymentsShim) { global.paymentsShim = {}; } var jqKeys = { jquery: 'jquery', ui: 'jqueryui' }, jQueryAlreadyDefined = global.jQuery, jQueryUIAlreadyDefined = global.jQuery && global.jQuery.ui; if (jQueryAlreadyDefined) { define(jqKeys.jquery, [], function() { return global.jQuery; }); } if (jQueryUIAlreadyDefined) { define(jqKeys.ui, [], function () { return {}; }); } require(['jquery'], function ($) { }); require([ 'jquery', 'gsn', 'gsn-extensions', 'debug', 'jqueryui' ], function ($, gsn, gsnExtensions, debugLogger) { function start() {} require([ 'app', 'angular', 'modernizr', 'states' ], start); }); }); })(this); r.js-2.3.6/build/tests/lib/nonUmdIdentifiers/states.js000066400000000000000000000000341334071220400226650ustar00rootroot00000000000000define({ name: 'states' }); r.js-2.3.6/build/tests/lib/onBuildAllDir/000077500000000000000000000000001334071220400200655ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/onBuildAllDir/build.js000066400000000000000000000005171334071220400215250ustar00rootroot00000000000000({ baseUrl: 'js', optimize: 'none', dir: 'js-built', modules: [{ name: 'main' }], onBuildRead: function (id, path, contents) { return '//ONBUILDREAD: ' + id + '\n' + contents; }, onBuildWrite: function (id, path, contents) { return contents + '\n//ONBUILDWRITE: ' + id; } }) r.js-2.3.6/build/tests/lib/onBuildAllDir/expected-a.js000066400000000000000000000001501334071220400224360ustar00rootroot00000000000000//ONBUILDREAD: a define(function(require) { return { name: 'a' }; }); //ONBUILDWRITE: ar.js-2.3.6/build/tests/lib/onBuildAllDir/expected-b.js000066400000000000000000000000771334071220400224470ustar00rootroot00000000000000//ONBUILDREAD: b define({ name: 'b' }); //ONBUILDWRITE: br.js-2.3.6/build/tests/lib/onBuildAllDir/expected-main.js000066400000000000000000000003461334071220400231510ustar00rootroot00000000000000 //ONBUILDREAD: a define('a',['require'],function(require) { return { name: 'a' }; }); //ONBUILDWRITE: a; //ONBUILDREAD: main require(['a'], function () { }); //ONBUILDWRITE: main; define("main", function(){}); r.js-2.3.6/build/tests/lib/onBuildAllDir/js/000077500000000000000000000000001334071220400205015ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/onBuildAllDir/js/a.js000066400000000000000000000001051334071220400212530ustar00rootroot00000000000000define(function(require) { return { name: 'a' }; }); r.js-2.3.6/build/tests/lib/onBuildAllDir/js/b.js000066400000000000000000000000341334071220400212550ustar00rootroot00000000000000define({ name: 'b' }); r.js-2.3.6/build/tests/lib/onBuildAllDir/js/main.js000066400000000000000000000000421334071220400217570ustar00rootroot00000000000000require(['a'], function () { }); r.js-2.3.6/build/tests/lib/onBuildRead/000077500000000000000000000000001334071220400175715ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/onBuildRead/a.js000066400000000000000000000001171334071220400203460ustar00rootroot00000000000000 var b = require('b'); return { name: 'a', b: b }; r.js-2.3.6/build/tests/lib/onBuildRead/b.js000066400000000000000000000000221334071220400203420ustar00rootroot00000000000000{ name: 'b' } r.js-2.3.6/build/tests/lib/onBuildRead/build.js000066400000000000000000000005751334071220400212350ustar00rootroot00000000000000({ baseUrl: '.', optimize: 'none', name: 'main', out: 'main-built.js', onBuildRead: function (id, path, contents) { if (id === 'a') { return 'define(function (require) {\n' + contents + '\n});'; } else if (id === 'b') { return 'define(' + contents + ');'; } else { return contents; } } }) r.js-2.3.6/build/tests/lib/onBuildRead/expected.js000066400000000000000000000003461334071220400217330ustar00rootroot00000000000000 define('b',{ name: 'b' } ); define('a',['require','b'],function (require) { var b = require('b'); return { name: 'a', b: b }; }); require(['a'], function () { }); define("main", function(){}); r.js-2.3.6/build/tests/lib/onBuildRead/main.js000066400000000000000000000000421334071220400210470ustar00rootroot00000000000000require(['a'], function () { }); r.js-2.3.6/build/tests/lib/onBuildWrite/000077500000000000000000000000001334071220400200105ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/onBuildWrite/a.js000066400000000000000000000001251334071220400205640ustar00rootroot00000000000000define(['b'], function (b) { return { name: 'a', b: b }; }); r.js-2.3.6/build/tests/lib/onBuildWrite/b.js000066400000000000000000000000761334071220400205720ustar00rootroot00000000000000define(function () { return { name: 'b' }; });r.js-2.3.6/build/tests/lib/onBuildWrite/build.js000066400000000000000000000003561334071220400214510ustar00rootroot00000000000000({ baseUrl: '.', optimize: 'none', name: 'main', out: 'main-built.js', onBuildWrite: function (id, path, contents) { return contents.replace(/define\s*\(\s*["'][^'"]+["']\s*,\s*\[[^]*\]\s*,/, 'def('); } }) r.js-2.3.6/build/tests/lib/onBuildWrite/expected.js000066400000000000000000000003111334071220400221420ustar00rootroot00000000000000 def(function () { return { name: 'b' }; }); def( function (b) { return { name: 'a', b: b }; }); def( function (a, b) { window.a = a; window.b = b; }); r.js-2.3.6/build/tests/lib/onBuildWrite/main.js000066400000000000000000000001151334071220400212670ustar00rootroot00000000000000define(['a', 'b'], function (a, b) { window.a = a; window.b = b; }); r.js-2.3.6/build/tests/lib/override/000077500000000000000000000000001334071220400172205ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/override/wrap/000077500000000000000000000000001334071220400201715ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/override/wrap/a.js000066400000000000000000000000341334071220400207440ustar00rootroot00000000000000define({ name: 'a' }); r.js-2.3.6/build/tests/lib/override/wrap/b.js000066400000000000000000000000341334071220400207450ustar00rootroot00000000000000define({ name: 'b' }); r.js-2.3.6/build/tests/lib/override/wrap/build.js000066400000000000000000000005331334071220400216270ustar00rootroot00000000000000({ baseUrl: './', optimize: 'none', dir: 'built', wrap: { start: '//START', end: '//END' }, modules: [ { name: 'a' }, { name: 'b', override: { wrap: true } }, { name: 'c' } ] }) r.js-2.3.6/build/tests/lib/override/wrap/c.js000066400000000000000000000000341334071220400207460ustar00rootroot00000000000000define({ name: 'c' }); r.js-2.3.6/build/tests/lib/override/wrap/expected/000077500000000000000000000000001334071220400217725ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/override/wrap/expected/a.js000066400000000000000000000000551334071220400225500ustar00rootroot00000000000000//START define('a',{ name: 'a' }); //ENDr.js-2.3.6/build/tests/lib/override/wrap/expected/b.js000066400000000000000000000000641334071220400225510ustar00rootroot00000000000000(function () { define('b',{ name: 'b' }); }());r.js-2.3.6/build/tests/lib/override/wrap/expected/c.js000066400000000000000000000000551334071220400225520ustar00rootroot00000000000000//START define('c',{ name: 'c' }); //ENDr.js-2.3.6/build/tests/lib/packages/000077500000000000000000000000001334071220400171575ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/packages/almond.html000066400000000000000000000010241334071220400213140ustar00rootroot00000000000000

Hello World

r.js-2.3.6/build/tests/lib/packages/build.js000066400000000000000000000001441334071220400206130ustar00rootroot00000000000000{ mainConfigFile: 'main.js', name: 'main', out: 'main-built.js', optimize: 'none' } r.js-2.3.6/build/tests/lib/packages/expected.js000066400000000000000000000006141334071220400213170ustar00rootroot00000000000000 define('foo/util',{ name: 'util' }); define('foo/main',['./util'], function (util) { return { name: 'foo', util: util }; }); define('foo', ['foo/main'], function (main) { return main; }); requirejs.config({ packages: [ { name: 'foo', main: 'main' } ] }); define('main',['foo'], function (foo) { return foo; }); r.js-2.3.6/build/tests/lib/packages/foo/000077500000000000000000000000001334071220400177425ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/packages/foo/main.js000066400000000000000000000001451334071220400212240ustar00rootroot00000000000000define(['./util'], function (util) { return { name: 'foo', util: util }; }); r.js-2.3.6/build/tests/lib/packages/foo/util.js000066400000000000000000000000361334071220400212540ustar00rootroot00000000000000define({ name: 'util' }); r.js-2.3.6/build/tests/lib/packages/main.js000066400000000000000000000002511334071220400204370ustar00rootroot00000000000000requirejs.config({ packages: [ { name: 'foo', main: 'main' } ] }); define(['foo'], function (foo) { return foo; }); r.js-2.3.6/build/tests/lib/packages/named/000077500000000000000000000000001334071220400202435ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/packages/named/almond.html000066400000000000000000000005001334071220400223760ustar00rootroot00000000000000

Hello World

r.js-2.3.6/build/tests/lib/packages/named/build.js000066400000000000000000000001441334071220400216770ustar00rootroot00000000000000{ mainConfigFile: 'main.js', name: 'main', out: 'main-built.js', optimize: 'none' } r.js-2.3.6/build/tests/lib/packages/named/expected.js000066400000000000000000000004531334071220400224040ustar00rootroot00000000000000 define('foo', ['require'],function (util) { return { name: 'foo' }; }); define("foo/foo", function(){}); requirejs.config({ packages: [ { name: 'foo', main: 'foo' } ] }); define('main',['foo'], function (foo) { return foo; }); r.js-2.3.6/build/tests/lib/packages/named/foo/000077500000000000000000000000001334071220400210265ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/packages/named/foo/foo.js000066400000000000000000000001141334071220400221430ustar00rootroot00000000000000define('foo', function (util) { return { name: 'foo' }; }); r.js-2.3.6/build/tests/lib/packages/named/main-built.js000066400000000000000000000004531334071220400226440ustar00rootroot00000000000000define('foo', ['require'],function (util) { return { name: 'foo' }; }); define("foo/foo", function(){}); requirejs.config({ packages: [ { name: 'foo', main: 'foo' } ] }); define('main',['foo'], function (foo) { return foo; }); r.js-2.3.6/build/tests/lib/packages/named/main.js000066400000000000000000000002501334071220400215220ustar00rootroot00000000000000requirejs.config({ packages: [ { name: 'foo', main: 'foo' } ] }); define(['foo'], function (foo) { return foo; }); r.js-2.3.6/build/tests/lib/packages/named/require.html000066400000000000000000000005401334071220400226040ustar00rootroot00000000000000

Hello World

r.js-2.3.6/build/tests/lib/packages/require.html000066400000000000000000000006271334071220400215260ustar00rootroot00000000000000

Hello World

r.js-2.3.6/build/tests/lib/packagesNode/000077500000000000000000000000001334071220400177655ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/packagesNode/build.js000066400000000000000000000002101334071220400214130ustar00rootroot00000000000000{ baseUrl: '.', mainConfigFile: 'packagesNode-tests.js', name: 'packagesNode-tests', optimize: 'none', out: 'main-built.js' } r.js-2.3.6/build/tests/lib/packagesNode/expected.js000066400000000000000000000016111334071220400221230ustar00rootroot00000000000000 define('foo/lib/bar',{ name: 'bar' }); define('foo/lib/baz',['./bar'], function (bar) { return { name: 'baz', bar: bar }; }); define('foo/lib/index',['./bar.js', './baz'], function (bar, baz) { return { name: 'foo', bar: bar, baz: baz }; }); define('foo', ['foo/lib/index'], function (main) { return main; }); require({ nodeIdCompat: true, packages: [{ name: 'foo', location: 'node_modules/foo', main: 'lib/index' }] }, ['foo'], function (foo) { doh.register( 'packagesNode', [ function packagesNode(t){ t.is('foo', foo.name); t.is('bar', foo.bar.name); t.is('baz', foo.baz.name); t.is('bar', foo.baz.bar.name); } ] ); doh.run(); }); define("packagesNode-tests", function(){}); r.js-2.3.6/build/tests/lib/packagesNode/node_modules/000077500000000000000000000000001334071220400224425ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/packagesNode/node_modules/foo/000077500000000000000000000000001334071220400232255ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/packagesNode/node_modules/foo/lib/000077500000000000000000000000001334071220400237735ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/packagesNode/node_modules/foo/lib/bar.js000066400000000000000000000000351334071220400250730ustar00rootroot00000000000000define({ name: 'bar' }); r.js-2.3.6/build/tests/lib/packagesNode/node_modules/foo/lib/baz.js000066400000000000000000000001411334071220400251010ustar00rootroot00000000000000define(['./bar'], function (bar) { return { name: 'baz', bar: bar }; }); r.js-2.3.6/build/tests/lib/packagesNode/node_modules/foo/lib/index.js000066400000000000000000000002041334071220400254340ustar00rootroot00000000000000define(['./bar.js', './baz'], function (bar, baz) { return { name: 'foo', bar: bar, baz: baz }; }); r.js-2.3.6/build/tests/lib/packagesNode/packagesNode-tests.js000066400000000000000000000007451334071220400240550ustar00rootroot00000000000000require({ nodeIdCompat: true, packages: [{ name: 'foo', location: 'node_modules/foo', main: 'lib/index' }] }, ['foo'], function (foo) { doh.register( 'packagesNode', [ function packagesNode(t){ t.is('foo', foo.name); t.is('bar', foo.bar.name); t.is('baz', foo.baz.name); t.is('bar', foo.baz.bar.name); } ] ); doh.run(); }); r.js-2.3.6/build/tests/lib/paths/000077500000000000000000000000001334071220400165205ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/paths/dupePath/000077500000000000000000000000001334071220400202725ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/paths/dupePath/a.js000066400000000000000000000000341334071220400210450ustar00rootroot00000000000000define({ name: 'a' }); r.js-2.3.6/build/tests/lib/paths/dupePath/build.js000066400000000000000000000001761334071220400217330ustar00rootroot00000000000000({ baseUrl: './', optimize: 'none', paths: { 'aprime': 'a' }, name: 'main', out: 'built.js' }) r.js-2.3.6/build/tests/lib/paths/dupePath/main.js000066400000000000000000000002161334071220400215530ustar00rootroot00000000000000require(['a', 'aprime'], function(a, aprime) { console.log("a's name: " + a.name); console.log("aprime's name: " + aprime.name); }); r.js-2.3.6/build/tests/lib/paths/valid/000077500000000000000000000000001334071220400176175ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/paths/valid/base/000077500000000000000000000000001334071220400205315ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/paths/valid/base/base.js000066400000000000000000000000401334071220400217730ustar00rootroot00000000000000define(function() { 'base'; }); r.js-2.3.6/build/tests/lib/paths/valid/base/main.js000066400000000000000000000000271334071220400220120ustar00rootroot00000000000000require(['../paths']); r.js-2.3.6/build/tests/lib/paths/valid/build.js000066400000000000000000000001611334071220400212520ustar00rootroot00000000000000({ baseUrl: './base', dir: 'built', optimize: 'none', modules: [{ name: 'main' }] }) r.js-2.3.6/build/tests/lib/paths/valid/expected.js000066400000000000000000000023401334071220400217550ustar00rootroot00000000000000 define('../here.js',[],function() { 'here'; }); define('../other/other.js',[],function() { 'other'; }); define('../base/base.js',[],function() { 'base'; }); define('base',[],function() { 'base'; }); // due to undefined behavior some modules will be defined with an extension and some without after optimization // due to a bug related to baseUrl './base/base[.js]' and 'base[.js]' will be treated as two separate modules, even though they are the same files define('../paths',[ 'empty:', // empty 'http://nonexistant', // http URL 'https://nonexistant', // https URL 'foo?dynamic=1', // dynamic URL '//nonexistant', // URL without protocol './here', // relative path './here.js', // relative path with extension './other/other', // relative path with subdirectories './other/other.js', // relative path with subdirectories with extension './base/base', // relative path './base/base.js', // relative path with extension 'base.js', // baseUrl relative path with extension 'base' // baseUrl relative path ], function () {}); require(['../paths']); define("main", function(){}); r.js-2.3.6/build/tests/lib/paths/valid/here.js000066400000000000000000000000401334071220400210720ustar00rootroot00000000000000define(function() { 'here'; }); r.js-2.3.6/build/tests/lib/paths/valid/other/000077500000000000000000000000001334071220400207405ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/paths/valid/other/other.js000066400000000000000000000000411334071220400224120ustar00rootroot00000000000000define(function() { 'other'; }); r.js-2.3.6/build/tests/lib/paths/valid/paths.js000066400000000000000000000017221334071220400212760ustar00rootroot00000000000000// due to undefined behavior some modules will be defined with an extension and some without after optimization // due to a bug related to baseUrl './base/base[.js]' and 'base[.js]' will be treated as two separate modules, even though they are the same files define([ 'empty:', // empty 'http://nonexistant', // http URL 'https://nonexistant', // https URL 'foo?dynamic=1', // dynamic URL '//nonexistant', // URL without protocol './here', // relative path './here.js', // relative path with extension './other/other', // relative path with subdirectories './other/other.js', // relative path with subdirectories with extension './base/base', // relative path './base/base.js', // relative path with extension 'base.js', // baseUrl relative path with extension 'base' // baseUrl relative path ], function () {}); r.js-2.3.6/build/tests/lib/pathsNoCopy/000077500000000000000000000000001334071220400176505ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/pathsNoCopy/build.js000066400000000000000000000001471334071220400213070ustar00rootroot00000000000000{ mainConfigFile: 'js/main.js', dir: 'js-built', modules: [{ name: 'main' }] } r.js-2.3.6/build/tests/lib/pathsNoCopy/js/000077500000000000000000000000001334071220400202645ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/pathsNoCopy/js/main.js000066400000000000000000000002431334071220400215450ustar00rootroot00000000000000require.config({ paths: { sub: 'vendor/sub', outside: '../outside' } }); require(['sub'], function (sub) { console.log(sub.name); }); r.js-2.3.6/build/tests/lib/pathsNoCopy/js/vendor/000077500000000000000000000000001334071220400215615ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/pathsNoCopy/js/vendor/sub.js000066400000000000000000000000351334071220400227060ustar00rootroot00000000000000define({ name: 'sub' }); r.js-2.3.6/build/tests/lib/pathsNoCopy/outside.js000066400000000000000000000000411334071220400216550ustar00rootroot00000000000000define({ name: 'outside' }); r.js-2.3.6/build/tests/lib/periodInNameConfig/000077500000000000000000000000001334071220400211015ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/periodInNameConfig/.gitignore000066400000000000000000000000041334071220400230630ustar00rootroot00000000000000out r.js-2.3.6/build/tests/lib/periodInNameConfig/build.js000066400000000000000000000001651334071220400225400ustar00rootroot00000000000000({ baseUrl: "scripts", dir: 'out', optimize: 'none', paths: { 'foo.bar': '../components/foo.bar' } }); r.js-2.3.6/build/tests/lib/periodInNameConfig/components/000077500000000000000000000000001334071220400232665ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/periodInNameConfig/components/foo.bar.js000066400000000000000000000000331334071220400251460ustar00rootroot00000000000000define({ name: 'a' }); r.js-2.3.6/build/tests/lib/periodInNameConfig/scripts/000077500000000000000000000000001334071220400225705ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/periodInNameConfig/scripts/main.js000066400000000000000000000000451334071220400240510ustar00rootroot00000000000000define(['foo.bar'], function(a) {}); r.js-2.3.6/build/tests/lib/pluginBuildUndef/000077500000000000000000000000001334071220400206415ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/pluginBuildUndef/build.js000066400000000000000000000002751334071220400223020ustar00rootroot00000000000000{ "include": ["lib/foo", "a"], "out": "out.js", "baseUrl": "files/", "optimize": "none", "map": { "lib/foo": { "text": "lib/text", } } } r.js-2.3.6/build/tests/lib/pluginBuildUndef/expected.js000066400000000000000000000404521334071220400230050ustar00rootroot00000000000000// requirejs-text@2.0.12 /** * @license RequireJS text 2.0.12 Copyright (c) 2010-2014, The Dojo Foundation All Rights Reserved. * Available via the MIT or new BSD license. * see: http://github.com/requirejs/text for details */ /*jslint regexp: true */ /*global require, XMLHttpRequest, ActiveXObject, define, window, process, Packages, java, location, Components, FileUtils */ define('lib/text',['module'], function (module) { 'use strict'; var text, fs, Cc, Ci, xpcIsWindows, progIds = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0'], xmlRegExp = /^\s*<\?xml(\s)+version=[\'\"](\d)*.(\d)*[\'\"](\s)*\?>/im, bodyRegExp = /]*>\s*([\s\S]+)\s*<\/body>/im, hasLocation = typeof location !== 'undefined' && location.href, defaultProtocol = hasLocation && location.protocol && location.protocol.replace(/\:/, ''), defaultHostName = hasLocation && location.hostname, defaultPort = hasLocation && (location.port || undefined), buildMap = {}, masterConfig = (module.config && module.config()) || {}; text = { version: '2.0.12', strip: function (content) { //Strips declarations so that external SVG and XML //documents can be added to a document without worry. Also, if the string //is an HTML document, only the part inside the body tag is returned. if (content) { content = content.replace(xmlRegExp, ""); var matches = content.match(bodyRegExp); if (matches) { content = matches[1]; } } else { content = ""; } return content; }, jsEscape: function (content) { return content.replace(/(['\\])/g, '\\$1') .replace(/[\f]/g, "\\f") .replace(/[\b]/g, "\\b") .replace(/[\n]/g, "\\n") .replace(/[\t]/g, "\\t") .replace(/[\r]/g, "\\r") .replace(/[\u2028]/g, "\\u2028") .replace(/[\u2029]/g, "\\u2029"); }, createXhr: masterConfig.createXhr || function () { //Would love to dump the ActiveX crap in here. Need IE 6 to die first. var xhr, i, progId; if (typeof XMLHttpRequest !== "undefined") { return new XMLHttpRequest(); } else if (typeof ActiveXObject !== "undefined") { for (i = 0; i < 3; i += 1) { progId = progIds[i]; try { xhr = new ActiveXObject(progId); } catch (e) {} if (xhr) { progIds = [progId]; // so faster next time break; } } } return xhr; }, /** * Parses a resource name into its component parts. Resource names * look like: module/name.ext!strip, where the !strip part is * optional. * @param {String} name the resource name * @returns {Object} with properties "moduleName", "ext" and "strip" * where strip is a boolean. */ parseName: function (name) { var modName, ext, temp, strip = false, index = name.indexOf("."), isRelative = name.indexOf('./') === 0 || name.indexOf('../') === 0; if (index !== -1 && (!isRelative || index > 1)) { modName = name.substring(0, index); ext = name.substring(index + 1, name.length); } else { modName = name; } temp = ext || modName; index = temp.indexOf("!"); if (index !== -1) { //Pull off the strip arg. strip = temp.substring(index + 1) === "strip"; temp = temp.substring(0, index); if (ext) { ext = temp; } else { modName = temp; } } return { moduleName: modName, ext: ext, strip: strip }; }, xdRegExp: /^((\w+)\:)?\/\/([^\/\\]+)/, /** * Is an URL on another domain. Only works for browser use, returns * false in non-browser environments. Only used to know if an * optimized .js version of a text resource should be loaded * instead. * @param {String} url * @returns Boolean */ useXhr: function (url, protocol, hostname, port) { var uProtocol, uHostName, uPort, match = text.xdRegExp.exec(url); if (!match) { return true; } uProtocol = match[2]; uHostName = match[3]; uHostName = uHostName.split(':'); uPort = uHostName[1]; uHostName = uHostName[0]; return (!uProtocol || uProtocol === protocol) && (!uHostName || uHostName.toLowerCase() === hostname.toLowerCase()) && ((!uPort && !uHostName) || uPort === port); }, finishLoad: function (name, strip, content, onLoad) { content = strip ? text.strip(content) : content; if (masterConfig.isBuild) { buildMap[name] = content; } onLoad(content); }, load: function (name, req, onLoad, config) { //Name has format: some.module.filext!strip //The strip part is optional. //if strip is present, then that means only get the string contents //inside a body tag in an HTML string. For XML/SVG content it means //removing the declarations so the content can be inserted //into the current doc without problems. // Do not bother with the work if a build and text will // not be inlined. if (config && config.isBuild && !config.inlineText) { onLoad(); return; } masterConfig.isBuild = config && config.isBuild; var parsed = text.parseName(name), nonStripName = parsed.moduleName + (parsed.ext ? '.' + parsed.ext : ''), url = req.toUrl(nonStripName), useXhr = (masterConfig.useXhr) || text.useXhr; // Do not load if it is an empty: url if (url.indexOf('empty:') === 0) { onLoad(); return; } //Load the text. Use XHR if possible and in a browser. if (!hasLocation || useXhr(url, defaultProtocol, defaultHostName, defaultPort)) { text.get(url, function (content) { text.finishLoad(name, parsed.strip, content, onLoad); }, function (err) { if (onLoad.error) { onLoad.error(err); } }); } else { //Need to fetch the resource across domains. Assume //the resource has been optimized into a JS module. Fetch //by the module name + extension, but do not include the //!strip part to avoid file system issues. req([nonStripName], function (content) { text.finishLoad(parsed.moduleName + '.' + parsed.ext, parsed.strip, content, onLoad); }); } }, write: function (pluginName, moduleName, write, config) { if (buildMap.hasOwnProperty(moduleName)) { var content = text.jsEscape(buildMap[moduleName]); write.asModule(pluginName + "!" + moduleName, "define(function () { return '" + content + "';});\n"); } }, writeFile: function (pluginName, moduleName, req, write, config) { var parsed = text.parseName(moduleName), extPart = parsed.ext ? '.' + parsed.ext : '', nonStripName = parsed.moduleName + extPart, //Use a '.js' file name so that it indicates it is a //script that can be loaded across domains. fileName = req.toUrl(parsed.moduleName + extPart) + '.js'; //Leverage own load() method to load plugin value, but only //write out values that do not have the strip argument, //to avoid any potential issues with ! in file names. text.load(nonStripName, req, function (value) { //Use own write() method to construct full module value. //But need to create shell that translates writeFile's //write() to the right interface. var textWrite = function (contents) { return write(fileName, contents); }; textWrite.asModule = function (moduleName, contents) { return write.asModule(moduleName, fileName, contents); }; text.write(pluginName, nonStripName, textWrite, config); }, config); } }; if (masterConfig.env === 'node' || (!masterConfig.env && typeof process !== "undefined" && process.versions && !!process.versions.node && !process.versions['node-webkit'])) { //Using special require.nodeRequire, something added by r.js. fs = require.nodeRequire('fs'); text.get = function (url, callback, errback) { try { var file = fs.readFileSync(url, 'utf8'); //Remove BOM (Byte Mark Order) from utf8 files if it is there. if (file.indexOf('\uFEFF') === 0) { file = file.substring(1); } callback(file); } catch (e) { if (errback) { errback(e); } } }; } else if (masterConfig.env === 'xhr' || (!masterConfig.env && text.createXhr())) { text.get = function (url, callback, errback, headers) { var xhr = text.createXhr(), header; xhr.open('GET', url, true); //Allow plugins direct access to xhr headers if (headers) { for (header in headers) { if (headers.hasOwnProperty(header)) { xhr.setRequestHeader(header.toLowerCase(), headers[header]); } } } //Allow overrides specified in config if (masterConfig.onXhr) { masterConfig.onXhr(xhr, url); } xhr.onreadystatechange = function (evt) { var status, err; //Do not explicitly handle errors, those should be //visible via console output in the browser. if (xhr.readyState === 4) { status = xhr.status || 0; if (status > 399 && status < 600) { //An http 4xx or 5xx error. Signal an error. err = new Error(url + ' HTTP status: ' + status); err.xhr = xhr; if (errback) { errback(err); } } else { callback(xhr.responseText); } if (masterConfig.onXhrComplete) { masterConfig.onXhrComplete(xhr, url); } } }; xhr.send(null); }; } else if (masterConfig.env === 'rhino' || (!masterConfig.env && typeof Packages !== 'undefined' && typeof java !== 'undefined')) { //Why Java, why is this so awkward? text.get = function (url, callback) { var stringBuffer, line, encoding = "utf-8", file = new java.io.File(url), lineSeparator = java.lang.System.getProperty("line.separator"), input = new java.io.BufferedReader(new java.io.InputStreamReader(new java.io.FileInputStream(file), encoding)), content = ''; try { stringBuffer = new java.lang.StringBuffer(); line = input.readLine(); // Byte Order Mark (BOM) - The Unicode Standard, version 3.0, page 324 // http://www.unicode.org/faq/utf_bom.html // Note that when we use utf-8, the BOM should appear as "EF BB BF", but it doesn't due to this bug in the JDK: // http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4508058 if (line && line.length() && line.charAt(0) === 0xfeff) { // Eat the BOM, since we've already found the encoding on this file, // and we plan to concatenating this buffer with others; the BOM should // only appear at the top of a file. line = line.substring(1); } if (line !== null) { stringBuffer.append(line); } while ((line = input.readLine()) !== null) { stringBuffer.append(lineSeparator); stringBuffer.append(line); } //Make sure we return a JavaScript string and not a Java string. content = String(stringBuffer.toString()); //String } finally { input.close(); } callback(content); }; } else if (masterConfig.env === 'xpconnect' || (!masterConfig.env && typeof Components !== 'undefined' && Components.classes && Components.interfaces)) { //Avert your gaze! Cc = Components.classes; Ci = Components.interfaces; Components.utils['import']('resource://gre/modules/FileUtils.jsm'); xpcIsWindows = ('@mozilla.org/windows-registry-key;1' in Cc); text.get = function (url, callback) { var inStream, convertStream, fileObj, readData = {}; if (xpcIsWindows) { url = url.replace(/\//g, '\\'); } fileObj = new FileUtils.File(url); //XPCOM, you so crazy try { inStream = Cc['@mozilla.org/network/file-input-stream;1'] .createInstance(Ci.nsIFileInputStream); inStream.init(fileObj, 1, 0, false); convertStream = Cc['@mozilla.org/intl/converter-input-stream;1'] .createInstance(Ci.nsIConverterInputStream); convertStream.init(inStream, "utf-8", inStream.available(), Ci.nsIConverterInputStream.DEFAULT_REPLACEMENT_CHARACTER); convertStream.readString(inStream.available(), readData); convertStream.close(); inStream.close(); callback(readData.value); } catch (e) { throw new Error((fileObj && fileObj.path || '') + ': ' + e); } }; } return text; }); define('lib/foo',['text', 'module'], function(text, module) { var cache = {}; return { load: function (moduleName, parentRequire, onload, config) { if (cache[moduleName]) { onload(cache[moduleName]); } else { text.load(moduleName, parentRequire, function (source) { cache[moduleName] = source; onload(cache[moduleName]); }, config); } }, write: function (pluginName, moduleName, write, config) { var name = pluginName + '!' + moduleName; write.asModule(name, 'define("' + name + '", function() {\n' + ' return "' + text.jsEscape(cache[moduleName]) + '";\n' + '})'); } }; }); define("lib/foo!a.js", [],function() { return "define([\'lib/foo!a.js\'], function(fileContent) {\n return \'a\';\n});\n"; }); define('a',['lib/foo!a.js'], function(fileContent) { return 'a'; }); r.js-2.3.6/build/tests/lib/pluginBuildUndef/files/000077500000000000000000000000001334071220400217435ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/pluginBuildUndef/files/a.js000066400000000000000000000001051334071220400225150ustar00rootroot00000000000000define(['lib/foo!a.js'], function(fileContent) { return 'a'; }); r.js-2.3.6/build/tests/lib/pluginBuildUndef/files/lib/000077500000000000000000000000001334071220400225115ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/pluginBuildUndef/files/lib/foo.js000066400000000000000000000014561334071220400236400ustar00rootroot00000000000000define(['text', 'module'], function(text, module) { var cache = {}; return { load: function (moduleName, parentRequire, onload, config) { if (cache[moduleName]) { onload(cache[moduleName]); } else { text.load(moduleName, parentRequire, function (source) { cache[moduleName] = source; onload(cache[moduleName]); }, config); } }, write: function (pluginName, moduleName, write, config) { var name = pluginName + '!' + moduleName; write.asModule(name, 'define("' + name + '", function() {\n' + ' return "' + text.jsEscape(cache[moduleName]) + '";\n' + '})'); } }; }); r.js-2.3.6/build/tests/lib/pluginBuildUndef/files/lib/text.js000066400000000000000000000364241334071220400240440ustar00rootroot00000000000000// requirejs-text@2.0.12 /** * @license RequireJS text 2.0.12 Copyright (c) 2010-2014, The Dojo Foundation All Rights Reserved. * Available via the MIT or new BSD license. * see: http://github.com/requirejs/text for details */ /*jslint regexp: true */ /*global require, XMLHttpRequest, ActiveXObject, define, window, process, Packages, java, location, Components, FileUtils */ define(['module'], function (module) { 'use strict'; var text, fs, Cc, Ci, xpcIsWindows, progIds = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0'], xmlRegExp = /^\s*<\?xml(\s)+version=[\'\"](\d)*.(\d)*[\'\"](\s)*\?>/im, bodyRegExp = /]*>\s*([\s\S]+)\s*<\/body>/im, hasLocation = typeof location !== 'undefined' && location.href, defaultProtocol = hasLocation && location.protocol && location.protocol.replace(/\:/, ''), defaultHostName = hasLocation && location.hostname, defaultPort = hasLocation && (location.port || undefined), buildMap = {}, masterConfig = (module.config && module.config()) || {}; text = { version: '2.0.12', strip: function (content) { //Strips declarations so that external SVG and XML //documents can be added to a document without worry. Also, if the string //is an HTML document, only the part inside the body tag is returned. if (content) { content = content.replace(xmlRegExp, ""); var matches = content.match(bodyRegExp); if (matches) { content = matches[1]; } } else { content = ""; } return content; }, jsEscape: function (content) { return content.replace(/(['\\])/g, '\\$1') .replace(/[\f]/g, "\\f") .replace(/[\b]/g, "\\b") .replace(/[\n]/g, "\\n") .replace(/[\t]/g, "\\t") .replace(/[\r]/g, "\\r") .replace(/[\u2028]/g, "\\u2028") .replace(/[\u2029]/g, "\\u2029"); }, createXhr: masterConfig.createXhr || function () { //Would love to dump the ActiveX crap in here. Need IE 6 to die first. var xhr, i, progId; if (typeof XMLHttpRequest !== "undefined") { return new XMLHttpRequest(); } else if (typeof ActiveXObject !== "undefined") { for (i = 0; i < 3; i += 1) { progId = progIds[i]; try { xhr = new ActiveXObject(progId); } catch (e) {} if (xhr) { progIds = [progId]; // so faster next time break; } } } return xhr; }, /** * Parses a resource name into its component parts. Resource names * look like: module/name.ext!strip, where the !strip part is * optional. * @param {String} name the resource name * @returns {Object} with properties "moduleName", "ext" and "strip" * where strip is a boolean. */ parseName: function (name) { var modName, ext, temp, strip = false, index = name.indexOf("."), isRelative = name.indexOf('./') === 0 || name.indexOf('../') === 0; if (index !== -1 && (!isRelative || index > 1)) { modName = name.substring(0, index); ext = name.substring(index + 1, name.length); } else { modName = name; } temp = ext || modName; index = temp.indexOf("!"); if (index !== -1) { //Pull off the strip arg. strip = temp.substring(index + 1) === "strip"; temp = temp.substring(0, index); if (ext) { ext = temp; } else { modName = temp; } } return { moduleName: modName, ext: ext, strip: strip }; }, xdRegExp: /^((\w+)\:)?\/\/([^\/\\]+)/, /** * Is an URL on another domain. Only works for browser use, returns * false in non-browser environments. Only used to know if an * optimized .js version of a text resource should be loaded * instead. * @param {String} url * @returns Boolean */ useXhr: function (url, protocol, hostname, port) { var uProtocol, uHostName, uPort, match = text.xdRegExp.exec(url); if (!match) { return true; } uProtocol = match[2]; uHostName = match[3]; uHostName = uHostName.split(':'); uPort = uHostName[1]; uHostName = uHostName[0]; return (!uProtocol || uProtocol === protocol) && (!uHostName || uHostName.toLowerCase() === hostname.toLowerCase()) && ((!uPort && !uHostName) || uPort === port); }, finishLoad: function (name, strip, content, onLoad) { content = strip ? text.strip(content) : content; if (masterConfig.isBuild) { buildMap[name] = content; } onLoad(content); }, load: function (name, req, onLoad, config) { //Name has format: some.module.filext!strip //The strip part is optional. //if strip is present, then that means only get the string contents //inside a body tag in an HTML string. For XML/SVG content it means //removing the declarations so the content can be inserted //into the current doc without problems. // Do not bother with the work if a build and text will // not be inlined. if (config && config.isBuild && !config.inlineText) { onLoad(); return; } masterConfig.isBuild = config && config.isBuild; var parsed = text.parseName(name), nonStripName = parsed.moduleName + (parsed.ext ? '.' + parsed.ext : ''), url = req.toUrl(nonStripName), useXhr = (masterConfig.useXhr) || text.useXhr; // Do not load if it is an empty: url if (url.indexOf('empty:') === 0) { onLoad(); return; } //Load the text. Use XHR if possible and in a browser. if (!hasLocation || useXhr(url, defaultProtocol, defaultHostName, defaultPort)) { text.get(url, function (content) { text.finishLoad(name, parsed.strip, content, onLoad); }, function (err) { if (onLoad.error) { onLoad.error(err); } }); } else { //Need to fetch the resource across domains. Assume //the resource has been optimized into a JS module. Fetch //by the module name + extension, but do not include the //!strip part to avoid file system issues. req([nonStripName], function (content) { text.finishLoad(parsed.moduleName + '.' + parsed.ext, parsed.strip, content, onLoad); }); } }, write: function (pluginName, moduleName, write, config) { if (buildMap.hasOwnProperty(moduleName)) { var content = text.jsEscape(buildMap[moduleName]); write.asModule(pluginName + "!" + moduleName, "define(function () { return '" + content + "';});\n"); } }, writeFile: function (pluginName, moduleName, req, write, config) { var parsed = text.parseName(moduleName), extPart = parsed.ext ? '.' + parsed.ext : '', nonStripName = parsed.moduleName + extPart, //Use a '.js' file name so that it indicates it is a //script that can be loaded across domains. fileName = req.toUrl(parsed.moduleName + extPart) + '.js'; //Leverage own load() method to load plugin value, but only //write out values that do not have the strip argument, //to avoid any potential issues with ! in file names. text.load(nonStripName, req, function (value) { //Use own write() method to construct full module value. //But need to create shell that translates writeFile's //write() to the right interface. var textWrite = function (contents) { return write(fileName, contents); }; textWrite.asModule = function (moduleName, contents) { return write.asModule(moduleName, fileName, contents); }; text.write(pluginName, nonStripName, textWrite, config); }, config); } }; if (masterConfig.env === 'node' || (!masterConfig.env && typeof process !== "undefined" && process.versions && !!process.versions.node && !process.versions['node-webkit'])) { //Using special require.nodeRequire, something added by r.js. fs = require.nodeRequire('fs'); text.get = function (url, callback, errback) { try { var file = fs.readFileSync(url, 'utf8'); //Remove BOM (Byte Mark Order) from utf8 files if it is there. if (file.indexOf('\uFEFF') === 0) { file = file.substring(1); } callback(file); } catch (e) { if (errback) { errback(e); } } }; } else if (masterConfig.env === 'xhr' || (!masterConfig.env && text.createXhr())) { text.get = function (url, callback, errback, headers) { var xhr = text.createXhr(), header; xhr.open('GET', url, true); //Allow plugins direct access to xhr headers if (headers) { for (header in headers) { if (headers.hasOwnProperty(header)) { xhr.setRequestHeader(header.toLowerCase(), headers[header]); } } } //Allow overrides specified in config if (masterConfig.onXhr) { masterConfig.onXhr(xhr, url); } xhr.onreadystatechange = function (evt) { var status, err; //Do not explicitly handle errors, those should be //visible via console output in the browser. if (xhr.readyState === 4) { status = xhr.status || 0; if (status > 399 && status < 600) { //An http 4xx or 5xx error. Signal an error. err = new Error(url + ' HTTP status: ' + status); err.xhr = xhr; if (errback) { errback(err); } } else { callback(xhr.responseText); } if (masterConfig.onXhrComplete) { masterConfig.onXhrComplete(xhr, url); } } }; xhr.send(null); }; } else if (masterConfig.env === 'rhino' || (!masterConfig.env && typeof Packages !== 'undefined' && typeof java !== 'undefined')) { //Why Java, why is this so awkward? text.get = function (url, callback) { var stringBuffer, line, encoding = "utf-8", file = new java.io.File(url), lineSeparator = java.lang.System.getProperty("line.separator"), input = new java.io.BufferedReader(new java.io.InputStreamReader(new java.io.FileInputStream(file), encoding)), content = ''; try { stringBuffer = new java.lang.StringBuffer(); line = input.readLine(); // Byte Order Mark (BOM) - The Unicode Standard, version 3.0, page 324 // http://www.unicode.org/faq/utf_bom.html // Note that when we use utf-8, the BOM should appear as "EF BB BF", but it doesn't due to this bug in the JDK: // http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4508058 if (line && line.length() && line.charAt(0) === 0xfeff) { // Eat the BOM, since we've already found the encoding on this file, // and we plan to concatenating this buffer with others; the BOM should // only appear at the top of a file. line = line.substring(1); } if (line !== null) { stringBuffer.append(line); } while ((line = input.readLine()) !== null) { stringBuffer.append(lineSeparator); stringBuffer.append(line); } //Make sure we return a JavaScript string and not a Java string. content = String(stringBuffer.toString()); //String } finally { input.close(); } callback(content); }; } else if (masterConfig.env === 'xpconnect' || (!masterConfig.env && typeof Components !== 'undefined' && Components.classes && Components.interfaces)) { //Avert your gaze! Cc = Components.classes; Ci = Components.interfaces; Components.utils['import']('resource://gre/modules/FileUtils.jsm'); xpcIsWindows = ('@mozilla.org/windows-registry-key;1' in Cc); text.get = function (url, callback) { var inStream, convertStream, fileObj, readData = {}; if (xpcIsWindows) { url = url.replace(/\//g, '\\'); } fileObj = new FileUtils.File(url); //XPCOM, you so crazy try { inStream = Cc['@mozilla.org/network/file-input-stream;1'] .createInstance(Ci.nsIFileInputStream); inStream.init(fileObj, 1, 0, false); convertStream = Cc['@mozilla.org/intl/converter-input-stream;1'] .createInstance(Ci.nsIConverterInputStream); convertStream.init(inStream, "utf-8", inStream.available(), Ci.nsIConverterInputStream.DEFAULT_REPLACEMENT_CHARACTER); convertStream.readString(inStream.available(), readData); convertStream.close(); inStream.close(); callback(readData.value); } catch (e) { throw new Error((fileObj && fileObj.path || '') + ': ' + e); } }; } return text; }); r.js-2.3.6/build/tests/lib/pluginBuilder/000077500000000000000000000000001334071220400202065ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/pluginBuilder/build.js000066400000000000000000000001051334071220400216370ustar00rootroot00000000000000{ name: 'main', out: 'main-built.js', optimize: 'none' } r.js-2.3.6/build/tests/lib/pluginBuilder/expected.js000066400000000000000000000004221334071220400223430ustar00rootroot00000000000000 define('plug',{ pluginBuilder: './plugBuilder', load: function () { throw 'Should be using pluginBuilder'; } }); define('plug!one',[],function () { return 'one';}); define('main',['plug!one'], function (one) { console.log('one === ' + one); }); r.js-2.3.6/build/tests/lib/pluginBuilder/main.js000066400000000000000000000001151334071220400214650ustar00rootroot00000000000000define(['plug!one'], function (one) { console.log('one === ' + one); }); r.js-2.3.6/build/tests/lib/pluginBuilder/plug.js000066400000000000000000000002001334071220400215030ustar00rootroot00000000000000define({ pluginBuilder: './plugBuilder', load: function () { throw 'Should be using pluginBuilder'; } }); r.js-2.3.6/build/tests/lib/pluginBuilder/plugBuilder.js000066400000000000000000000005701334071220400230240ustar00rootroot00000000000000define({ load: function (name, req, onLoad, config) { onLoad(name); }, write: function (pluginName, moduleName, write, config) { var content = moduleName; write.asModule(pluginName + "!" + moduleName, "define(function () { return '" + content + "';});\n"); } }); r.js-2.3.6/build/tests/lib/pluginDepExec/000077500000000000000000000000001334071220400201355ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/pluginDepExec/build.js000066400000000000000000000001671334071220400215760ustar00rootroot00000000000000({ stubModules: ['plugin1', 'plugin2', 'text'], baseUrl: ".", optimize: "none", name: "main", out: "main-built.js" }) r.js-2.3.6/build/tests/lib/pluginDepExec/dep.js000066400000000000000000000002631334071220400212440ustar00rootroot00000000000000 define(['plugin2!test2.txt'], function(pluginresult) { 'use strict'; return { wrap: function(v) { return pluginresult + v + pluginresult; } }; }); r.js-2.3.6/build/tests/lib/pluginDepExec/expected.js000066400000000000000000000012271334071220400222760ustar00rootroot00000000000000define('text',{}); define('plugin2',{load: function(id){throw new Error("Dynamic load not allowed: " + id);}}); define('plugin2!test2.txt', function () { return '!test2!';}); define('dep',['plugin2!test2.txt'], function(pluginresult) { 'use strict'; return { wrap: function(v) { return pluginresult + v + pluginresult; } }; }); define('plugin1',{load: function(id){throw new Error("Dynamic load not allowed: " + id);}}); define('plugin1!test1.txt', function () { return '!test2!test1!test2!';}); require(['plugin1!test1.txt'], function(pluginresult) { 'use strict'; alert(pluginresult); }); define("main", function(){}); r.js-2.3.6/build/tests/lib/pluginDepExec/main.js000066400000000000000000000001421334071220400214140ustar00rootroot00000000000000 require(['plugin1!test1.txt'], function(pluginresult) { 'use strict'; alert(pluginresult); }); r.js-2.3.6/build/tests/lib/pluginDepExec/plugin1.js000066400000000000000000000012321334071220400220500ustar00rootroot00000000000000define(['text', 'dep'], function(text, dep) { 'use strict'; var buildMap = {}; return { load: function(moduleName, parentRequire, onload, config) { if (buildMap[moduleName]) { onload(buildMap[moduleName]); } else { text.load(moduleName, parentRequire, function(source) { var result = dep.wrap(source); buildMap[moduleName] = result; onload(buildMap[moduleName]); }, config); } }, write: function(pluginName, moduleName, write, config) { var build = buildMap[moduleName]; if (build) { write("define('" + pluginName + "!" + moduleName + "', function () { return '" + build + "';});\n"); } } }; }); r.js-2.3.6/build/tests/lib/pluginDepExec/plugin2.js000066400000000000000000000011641334071220400220550ustar00rootroot00000000000000define(['text'], function(text) { 'use strict'; var buildMap = {}; return { load: function(moduleName, parentRequire, onload, config) { if (buildMap[moduleName]) { onload(buildMap[moduleName]); } else { text.load(moduleName, parentRequire, function(source) { buildMap[moduleName] = '!' + source + '!'; onload(buildMap[moduleName]); }, config); } }, write: function(pluginName, moduleName, write, config) { var build = buildMap[moduleName]; if (build) { write("define('" + pluginName + "!" + moduleName + "', function () { return '" + build + "';});\n"); } } }; });r.js-2.3.6/build/tests/lib/pluginDepExec/test1.txt000066400000000000000000000000051334071220400217310ustar00rootroot00000000000000test1r.js-2.3.6/build/tests/lib/pluginDepExec/test2.txt000066400000000000000000000000051334071220400217320ustar00rootroot00000000000000test2r.js-2.3.6/build/tests/lib/pluginDepExec/text.js000066400000000000000000000361501334071220400214640ustar00rootroot00000000000000/** * @license RequireJS text 2.0.10 Copyright (c) 2010-2012, The Dojo Foundation All Rights Reserved. * Available via the MIT or new BSD license. * see: http://github.com/requirejs/text for details */ /*jslint regexp: true */ /*global require, XMLHttpRequest, ActiveXObject, define, window, process, Packages, java, location, Components, FileUtils */ define(['module'], function (module) { 'use strict'; var text, fs, Cc, Ci, xpcIsWindows, progIds = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0'], xmlRegExp = /^\s*<\?xml(\s)+version=[\'\"](\d)*.(\d)*[\'\"](\s)*\?>/im, bodyRegExp = /]*>\s*([\s\S]+)\s*<\/body>/im, hasLocation = typeof location !== 'undefined' && location.href, defaultProtocol = hasLocation && location.protocol && location.protocol.replace(/\:/, ''), defaultHostName = hasLocation && location.hostname, defaultPort = hasLocation && (location.port || undefined), buildMap = {}, masterConfig = (module.config && module.config()) || {}; text = { version: '2.0.10', strip: function (content) { //Strips declarations so that external SVG and XML //documents can be added to a document without worry. Also, if the string //is an HTML document, only the part inside the body tag is returned. if (content) { content = content.replace(xmlRegExp, ""); var matches = content.match(bodyRegExp); if (matches) { content = matches[1]; } } else { content = ""; } return content; }, jsEscape: function (content) { return content.replace(/(['\\])/g, '\\$1') .replace(/[\f]/g, "\\f") .replace(/[\b]/g, "\\b") .replace(/[\n]/g, "\\n") .replace(/[\t]/g, "\\t") .replace(/[\r]/g, "\\r") .replace(/[\u2028]/g, "\\u2028") .replace(/[\u2029]/g, "\\u2029"); }, createXhr: masterConfig.createXhr || function () { //Would love to dump the ActiveX crap in here. Need IE 6 to die first. var xhr, i, progId; if (typeof XMLHttpRequest !== "undefined") { return new XMLHttpRequest(); } else if (typeof ActiveXObject !== "undefined") { for (i = 0; i < 3; i += 1) { progId = progIds[i]; try { xhr = new ActiveXObject(progId); } catch (e) {} if (xhr) { progIds = [progId]; // so faster next time break; } } } return xhr; }, /** * Parses a resource name into its component parts. Resource names * look like: module/name.ext!strip, where the !strip part is * optional. * @param {String} name the resource name * @returns {Object} with properties "moduleName", "ext" and "strip" * where strip is a boolean. */ parseName: function (name) { var modName, ext, temp, strip = false, index = name.indexOf("."), isRelative = name.indexOf('./') === 0 || name.indexOf('../') === 0; if (index !== -1 && (!isRelative || index > 1)) { modName = name.substring(0, index); ext = name.substring(index + 1, name.length); } else { modName = name; } temp = ext || modName; index = temp.indexOf("!"); if (index !== -1) { //Pull off the strip arg. strip = temp.substring(index + 1) === "strip"; temp = temp.substring(0, index); if (ext) { ext = temp; } else { modName = temp; } } return { moduleName: modName, ext: ext, strip: strip }; }, xdRegExp: /^((\w+)\:)?\/\/([^\/\\]+)/, /** * Is an URL on another domain. Only works for browser use, returns * false in non-browser environments. Only used to know if an * optimized .js version of a text resource should be loaded * instead. * @param {String} url * @returns Boolean */ useXhr: function (url, protocol, hostname, port) { var uProtocol, uHostName, uPort, match = text.xdRegExp.exec(url); if (!match) { return true; } uProtocol = match[2]; uHostName = match[3]; uHostName = uHostName.split(':'); uPort = uHostName[1]; uHostName = uHostName[0]; return (!uProtocol || uProtocol === protocol) && (!uHostName || uHostName.toLowerCase() === hostname.toLowerCase()) && ((!uPort && !uHostName) || uPort === port); }, finishLoad: function (name, strip, content, onLoad) { content = strip ? text.strip(content) : content; if (masterConfig.isBuild) { buildMap[name] = content; } onLoad(content); }, load: function (name, req, onLoad, config) { //Name has format: some.module.filext!strip //The strip part is optional. //if strip is present, then that means only get the string contents //inside a body tag in an HTML string. For XML/SVG content it means //removing the declarations so the content can be inserted //into the current doc without problems. // Do not bother with the work if a build and text will // not be inlined. if (config.isBuild && !config.inlineText) { onLoad(); return; } masterConfig.isBuild = config.isBuild; var parsed = text.parseName(name), nonStripName = parsed.moduleName + (parsed.ext ? '.' + parsed.ext : ''), url = req.toUrl(nonStripName), useXhr = (masterConfig.useXhr) || text.useXhr; // Do not load if it is an empty: url if (url.indexOf('empty:') === 0) { onLoad(); return; } //Load the text. Use XHR if possible and in a browser. if (!hasLocation || useXhr(url, defaultProtocol, defaultHostName, defaultPort)) { text.get(url, function (content) { text.finishLoad(name, parsed.strip, content, onLoad); }, function (err) { if (onLoad.error) { onLoad.error(err); } }); } else { //Need to fetch the resource across domains. Assume //the resource has been optimized into a JS module. Fetch //by the module name + extension, but do not include the //!strip part to avoid file system issues. req([nonStripName], function (content) { text.finishLoad(parsed.moduleName + '.' + parsed.ext, parsed.strip, content, onLoad); }); } }, write: function (pluginName, moduleName, write, config) { if (buildMap.hasOwnProperty(moduleName)) { var content = text.jsEscape(buildMap[moduleName]); write.asModule(pluginName + "!" + moduleName, "define(function () { return '" + content + "';});\n"); } }, writeFile: function (pluginName, moduleName, req, write, config) { var parsed = text.parseName(moduleName), extPart = parsed.ext ? '.' + parsed.ext : '', nonStripName = parsed.moduleName + extPart, //Use a '.js' file name so that it indicates it is a //script that can be loaded across domains. fileName = req.toUrl(parsed.moduleName + extPart) + '.js'; //Leverage own load() method to load plugin value, but only //write out values that do not have the strip argument, //to avoid any potential issues with ! in file names. text.load(nonStripName, req, function (value) { //Use own write() method to construct full module value. //But need to create shell that translates writeFile's //write() to the right interface. var textWrite = function (contents) { return write(fileName, contents); }; textWrite.asModule = function (moduleName, contents) { return write.asModule(moduleName, fileName, contents); }; text.write(pluginName, nonStripName, textWrite, config); }, config); } }; if (masterConfig.env === 'node' || (!masterConfig.env && typeof process !== "undefined" && process.versions && !!process.versions.node && !process.versions['node-webkit'])) { //Using special require.nodeRequire, something added by r.js. fs = require.nodeRequire('fs'); text.get = function (url, callback, errback) { try { var file = fs.readFileSync(url, 'utf8'); //Remove BOM (Byte Mark Order) from utf8 files if it is there. if (file.indexOf('\uFEFF') === 0) { file = file.substring(1); } callback(file); } catch (e) { errback(e); } }; } else if (masterConfig.env === 'xhr' || (!masterConfig.env && text.createXhr())) { text.get = function (url, callback, errback, headers) { var xhr = text.createXhr(), header; xhr.open('GET', url, true); //Allow plugins direct access to xhr headers if (headers) { for (header in headers) { if (headers.hasOwnProperty(header)) { xhr.setRequestHeader(header.toLowerCase(), headers[header]); } } } //Allow overrides specified in config if (masterConfig.onXhr) { masterConfig.onXhr(xhr, url); } xhr.onreadystatechange = function (evt) { var status, err; //Do not explicitly handle errors, those should be //visible via console output in the browser. if (xhr.readyState === 4) { status = xhr.status; if (status > 399 && status < 600) { //An http 4xx or 5xx error. Signal an error. err = new Error(url + ' HTTP status: ' + status); err.xhr = xhr; errback(err); } else { callback(xhr.responseText); } if (masterConfig.onXhrComplete) { masterConfig.onXhrComplete(xhr, url); } } }; xhr.send(null); }; } else if (masterConfig.env === 'rhino' || (!masterConfig.env && typeof Packages !== 'undefined' && typeof java !== 'undefined')) { //Why Java, why is this so awkward? text.get = function (url, callback) { var stringBuffer, line, encoding = "utf-8", file = new java.io.File(url), lineSeparator = java.lang.System.getProperty("line.separator"), input = new java.io.BufferedReader(new java.io.InputStreamReader(new java.io.FileInputStream(file), encoding)), content = ''; try { stringBuffer = new java.lang.StringBuffer(); line = input.readLine(); // Byte Order Mark (BOM) - The Unicode Standard, version 3.0, page 324 // http://www.unicode.org/faq/utf_bom.html // Note that when we use utf-8, the BOM should appear as "EF BB BF", but it doesn't due to this bug in the JDK: // http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4508058 if (line && line.length() && line.charAt(0) === 0xfeff) { // Eat the BOM, since we've already found the encoding on this file, // and we plan to concatenating this buffer with others; the BOM should // only appear at the top of a file. line = line.substring(1); } if (line !== null) { stringBuffer.append(line); } while ((line = input.readLine()) !== null) { stringBuffer.append(lineSeparator); stringBuffer.append(line); } //Make sure we return a JavaScript string and not a Java string. content = String(stringBuffer.toString()); //String } finally { input.close(); } callback(content); }; } else if (masterConfig.env === 'xpconnect' || (!masterConfig.env && typeof Components !== 'undefined' && Components.classes && Components.interfaces)) { //Avert your gaze! Cc = Components.classes, Ci = Components.interfaces; Components.utils['import']('resource://gre/modules/FileUtils.jsm'); xpcIsWindows = ('@mozilla.org/windows-registry-key;1' in Cc); text.get = function (url, callback) { var inStream, convertStream, fileObj, readData = {}; if (xpcIsWindows) { url = url.replace(/\//g, '\\'); } fileObj = new FileUtils.File(url); //XPCOM, you so crazy try { inStream = Cc['@mozilla.org/network/file-input-stream;1'] .createInstance(Ci.nsIFileInputStream); inStream.init(fileObj, 1, 0, false); convertStream = Cc['@mozilla.org/intl/converter-input-stream;1'] .createInstance(Ci.nsIConverterInputStream); convertStream.init(inStream, "utf-8", inStream.available(), Ci.nsIConverterInputStream.DEFAULT_REPLACEMENT_CHARACTER); convertStream.readString(inStream.available(), readData); convertStream.close(); inStream.close(); callback(readData.value); } catch (e) { throw new Error((fileObj && fileObj.path || '') + ': ' + e); } }; } return text; }); r.js-2.3.6/build/tests/lib/pluginShimDep/000077500000000000000000000000001334071220400201515ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/pluginShimDep/build.js000066400000000000000000000002141334071220400216030ustar00rootroot00000000000000{ name: 'main', out: 'main-built.js', optimize: 'none', shim: { pax: { exports: 'PAX' } } } r.js-2.3.6/build/tests/lib/pluginShimDep/expected.js000066400000000000000000000023121334071220400223060ustar00rootroot00000000000000 var PAX = { toUp: function (value) { return value.toUpperCase(); } }; define("pax", (function (global) { return function () { var ret, fn; return ret || global.PAX; }; }(this))); define('plug',['pax'], function (pax) { var buildMap = {}; function jsEscape(content) { return content.replace(/(['\\])/g, '\\$1') .replace(/[\f]/g, "\\f") .replace(/[\b]/g, "\\b") .replace(/[\n]/g, "\\n") .replace(/[\t]/g, "\\t") .replace(/[\r]/g, "\\r"); } return { load: function (id, require, load, config) { var converted = pax.toUp(id); buildMap[id] = converted; load(converted); }, write: function (pluginName, id, write, config) { if (buildMap.hasOwnProperty(id)) { var content = jsEscape(buildMap[id]); write("define('" + pluginName + "!" + id + "', function () { return '" + content + "';});\n"); } } }; }); define('plug!hi', function () { return 'HI';}); require(['plug!hi'], function (value) { console.log(value); }); define("main", function(){}); r.js-2.3.6/build/tests/lib/pluginShimDep/main.js000066400000000000000000000001041334071220400214260ustar00rootroot00000000000000require(['plug!hi'], function (value) { console.log(value); }); r.js-2.3.6/build/tests/lib/pluginShimDep/pax.js000066400000000000000000000001241334071220400212740ustar00rootroot00000000000000var PAX = { toUp: function (value) { return value.toUpperCase(); } }r.js-2.3.6/build/tests/lib/pluginShimDep/plug.js000066400000000000000000000015211334071220400214550ustar00rootroot00000000000000define(['pax'], function (pax) { var buildMap = {}; function jsEscape(content) { return content.replace(/(['\\])/g, '\\$1') .replace(/[\f]/g, "\\f") .replace(/[\b]/g, "\\b") .replace(/[\n]/g, "\\n") .replace(/[\t]/g, "\\t") .replace(/[\r]/g, "\\r"); } return { load: function (id, require, load, config) { var converted = pax.toUp(id); buildMap[id] = converted; load(converted); }, write: function (pluginName, id, write, config) { if (buildMap.hasOwnProperty(id)) { var content = jsEscape(buildMap[id]); write("define('" + pluginName + "!" + id + "', function () { return '" + content + "';});\n"); } } }; }); r.js-2.3.6/build/tests/lib/plugins/000077500000000000000000000000001334071220400170625ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/plugins/build.js000066400000000000000000000001271334071220400205170ustar00rootroot00000000000000{ baseUrl: '.', name: 'main', out: 'main-built.js', optimize: 'none' } r.js-2.3.6/build/tests/lib/plugins/buildPluginFirst.js000066400000000000000000000001711334071220400227050ustar00rootroot00000000000000{ baseUrl: '.', name: 'plug', include: ['main'], out: 'main-builtPluginFirst.js', optimize: 'none' } r.js-2.3.6/build/tests/lib/plugins/converter.js000066400000000000000000000003611334071220400214270ustar00rootroot00000000000000if (typeof define === 'function' && define.amd) { define(['util'], function (util) { return { version: '2', convert: function (text) { return util(text); } }; }); }r.js-2.3.6/build/tests/lib/plugins/expected-buildPluginFirst.js000066400000000000000000000034221334071220400245060ustar00rootroot00000000000000define('util',[],function () { function upper(text) { return text.toUpperCase(); }; return upper; }); if (typeof define === 'function' && define.amd) { define('converter',['util'], function (util) { return { version: '2', convert: function (text) { return util(text); } }; }); }; define('plug',['converter'], function (converter) { var buildMap = {}; function jsEscape(content) { return content.replace(/(['\\])/g, '\\$1') .replace(/[\f]/g, "\\f") .replace(/[\b]/g, "\\b") .replace(/[\n]/g, "\\n") .replace(/[\t]/g, "\\t") .replace(/[\r]/g, "\\r"); } return { version: '1', load: function (name, require, onLoad, config) { var converted = converter.convert(name); buildMap[name] = converted; onLoad(converted); }, write: function (pluginName, moduleName, write, data) { if (moduleName in buildMap) { var content = jsEscape(buildMap[moduleName]); write("define('" + pluginName + "!" + moduleName + "', function () { /* name: " + data.name + " path: " + data.path.split(/[\/\\]/).pop() + " */ return '" + content + "';});\n"); } } }; }); define('plug!shouldbeuppercasetext', function () { /* name: plug path: main-builtPluginFirst.js */ return 'SHOULDBEUPPERCASETEXT';}); require(['plug', 'converter', 'plug!shouldbeuppercasetext'], function (plug, converter, text) { console.log('plugin version: ' + plug.version); console.log('converter version: ' + converter.version); console.log('converted text: ' + text); }); define("main", function(){}); r.js-2.3.6/build/tests/lib/plugins/expected.js000066400000000000000000000034071334071220400212250ustar00rootroot00000000000000define('util',[],function () { function upper(text) { return text.toUpperCase(); }; return upper; }); if (typeof define === 'function' && define.amd) { define('converter',['util'], function (util) { return { version: '2', convert: function (text) { return util(text); } }; }); }; define('plug',['converter'], function (converter) { var buildMap = {}; function jsEscape(content) { return content.replace(/(['\\])/g, '\\$1') .replace(/[\f]/g, "\\f") .replace(/[\b]/g, "\\b") .replace(/[\n]/g, "\\n") .replace(/[\t]/g, "\\t") .replace(/[\r]/g, "\\r"); } return { version: '1', load: function (name, require, onLoad, config) { var converted = converter.convert(name); buildMap[name] = converted; onLoad(converted); }, write: function (pluginName, moduleName, write, data) { if (moduleName in buildMap) { var content = jsEscape(buildMap[moduleName]); write("define('" + pluginName + "!" + moduleName + "', function () { /* name: " + data.name + " path: " + data.path.split(/[\/\\]/).pop() + " */ return '" + content + "';});\n"); } } }; }); define('plug!shouldbeuppercasetext', function () { /* name: main path: main-built.js */ return 'SHOULDBEUPPERCASETEXT';}); require(['plug', 'converter', 'plug!shouldbeuppercasetext'], function (plug, converter, text) { console.log('plugin version: ' + plug.version); console.log('converter version: ' + converter.version); console.log('converted text: ' + text); }); define("main", function(){}); r.js-2.3.6/build/tests/lib/plugins/main.js000066400000000000000000000004041334071220400203420ustar00rootroot00000000000000require(['plug', 'converter', 'plug!shouldbeuppercasetext'], function (plug, converter, text) { console.log('plugin version: ' + plug.version); console.log('converter version: ' + converter.version); console.log('converted text: ' + text); }); r.js-2.3.6/build/tests/lib/plugins/onLayerEnd/000077500000000000000000000000001334071220400211225ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/plugins/onLayerEnd/build.js000066400000000000000000000001311334071220400225520ustar00rootroot00000000000000{ baseUrl: 'src', name: 'main', out: 'main-built.js', optimize: 'none' } r.js-2.3.6/build/tests/lib/plugins/onLayerEnd/buildMulti.js000066400000000000000000000002651334071220400235750ustar00rootroot00000000000000{ baseUrl: 'src', dir: 'built', optimize: 'none', modules: [ { name: 'main' }, { name: 'secondary' } ] } r.js-2.3.6/build/tests/lib/plugins/onLayerEnd/expected.js000066400000000000000000000023271334071220400232650ustar00rootroot00000000000000 define('plug',[],function () { var buildMap = {}, injectPreamble = true, preamble = "'USE PREAMBLE';"; return { version: '1', load: function (name, require, onLoad, config) { var converted = name.toUpperCase(); buildMap[name] = converted; onLoad(converted); }, write: function (pluginName, moduleName, write, config) { if (buildMap.hasOwnProperty(moduleName)) { if (injectPreamble) { write(preamble); injectPreamble = false; } var content = buildMap[moduleName]; write("define('" + pluginName + "!" + moduleName + "', function () { return '" + content + "';});\n"); } }, onLayerEnd: function (write, data) { injectPreamble = true; write("'USE POSTAMBLE';"); } }; }); 'USE PREAMBLE'; define('plug!foo', function () { return 'FOO';}); define('plug!bar', function () { return 'BAR';}); require(['plug!foo', 'plug!bar'], function (foo, bar) { console.log(foo); console.log(bar); }); define("main", function(){}); 'USE POSTAMBLE';r.js-2.3.6/build/tests/lib/plugins/onLayerEnd/expectedMultiMain.js000066400000000000000000000023271334071220400251050ustar00rootroot00000000000000 define('plug',[],function () { var buildMap = {}, injectPreamble = true, preamble = "'USE PREAMBLE';"; return { version: '1', load: function (name, require, onLoad, config) { var converted = name.toUpperCase(); buildMap[name] = converted; onLoad(converted); }, write: function (pluginName, moduleName, write, config) { if (buildMap.hasOwnProperty(moduleName)) { if (injectPreamble) { write(preamble); injectPreamble = false; } var content = buildMap[moduleName]; write("define('" + pluginName + "!" + moduleName + "', function () { return '" + content + "';});\n"); } }, onLayerEnd: function (write, data) { injectPreamble = true; write("'USE POSTAMBLE';"); } }; }); 'USE PREAMBLE'; define('plug!foo', function () { return 'FOO';}); define('plug!bar', function () { return 'BAR';}); require(['plug!foo', 'plug!bar'], function (foo, bar) { console.log(foo); console.log(bar); }); define("main", function(){}); 'USE POSTAMBLE';r.js-2.3.6/build/tests/lib/plugins/onLayerEnd/expectedMultiSecondary.js000066400000000000000000000023461334071220400261510ustar00rootroot00000000000000 define('plug',[],function () { var buildMap = {}, injectPreamble = true, preamble = "'USE PREAMBLE';"; return { version: '1', load: function (name, require, onLoad, config) { var converted = name.toUpperCase(); buildMap[name] = converted; onLoad(converted); }, write: function (pluginName, moduleName, write, config) { if (buildMap.hasOwnProperty(moduleName)) { if (injectPreamble) { write(preamble); injectPreamble = false; } var content = buildMap[moduleName]; write("define('" + pluginName + "!" + moduleName + "', function () { return '" + content + "';});\n"); } }, onLayerEnd: function (write, data) { injectPreamble = true; write("'USE POSTAMBLE';"); } }; }); 'USE PREAMBLE'; define('plug!meep', function () { return 'MEEP';}); define('plug!moop', function () { return 'MOOP';}); require(['plug!meep', 'plug!moop'], function (meep, moop) { console.log(meep); console.log(moop); }); define("secondary", function(){}); 'USE POSTAMBLE';r.js-2.3.6/build/tests/lib/plugins/onLayerEnd/src/000077500000000000000000000000001334071220400217115ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/plugins/onLayerEnd/src/main.js000066400000000000000000000001521334071220400231710ustar00rootroot00000000000000require(['plug!foo', 'plug!bar'], function (foo, bar) { console.log(foo); console.log(bar); }); r.js-2.3.6/build/tests/lib/plugins/onLayerEnd/src/plug.js000066400000000000000000000016731334071220400232250ustar00rootroot00000000000000define(function () { var buildMap = {}, injectPreamble = true, preamble = "'USE PREAMBLE';"; return { version: '1', load: function (name, require, onLoad, config) { var converted = name.toUpperCase(); buildMap[name] = converted; onLoad(converted); }, write: function (pluginName, moduleName, write, config) { if (buildMap.hasOwnProperty(moduleName)) { if (injectPreamble) { write(preamble); injectPreamble = false; } var content = buildMap[moduleName]; write("define('" + pluginName + "!" + moduleName + "', function () { return '" + content + "';});\n"); } }, onLayerEnd: function (write, data) { injectPreamble = true; write("'USE POSTAMBLE';"); } }; }); r.js-2.3.6/build/tests/lib/plugins/onLayerEnd/src/secondary.js000066400000000000000000000001601334071220400242330ustar00rootroot00000000000000require(['plug!meep', 'plug!moop'], function (meep, moop) { console.log(meep); console.log(moop); }); r.js-2.3.6/build/tests/lib/plugins/optimizeAllPluginResources/000077500000000000000000000000001334071220400244255ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/plugins/optimizeAllPluginResources/build.js000066400000000000000000000003261334071220400260630ustar00rootroot00000000000000{ appDir: 'www', baseUrl: 'js', dir: 'www-built', optimize: 'none', optimizeAllPluginResources: true, paths: { text: '../../../../../../../../text/text' }, modules: [ { name: 'main' } ] } r.js-2.3.6/build/tests/lib/plugins/optimizeAllPluginResources/expected-secondary.txt.js000066400000000000000000000001061334071220400313640ustar00rootroot00000000000000define('text!secondary.txt',[],function () { return 'secondary\n';}); r.js-2.3.6/build/tests/lib/plugins/optimizeAllPluginResources/www/000077500000000000000000000000001334071220400252515ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/plugins/optimizeAllPluginResources/www/js/000077500000000000000000000000001334071220400256655ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/plugins/optimizeAllPluginResources/www/js/main.js000066400000000000000000000001751334071220400271520ustar00rootroot00000000000000define(['require', 'text!one.txt'], function (require, oneText) { require(['text!two.txt'], function (twoText) {}); }); r.js-2.3.6/build/tests/lib/plugins/optimizeAllPluginResources/www/js/one.txt000066400000000000000000000000041334071220400272010ustar00rootroot00000000000000one r.js-2.3.6/build/tests/lib/plugins/optimizeAllPluginResources/www/js/secondary.js000066400000000000000000000000751334071220400302140ustar00rootroot00000000000000define(['text!secondary.txt'], function (secondText) { }); r.js-2.3.6/build/tests/lib/plugins/optimizeAllPluginResources/www/js/secondary.txt000066400000000000000000000000121334071220400304060ustar00rootroot00000000000000secondary r.js-2.3.6/build/tests/lib/plugins/optimizeAllPluginResources/www/js/two.txt000066400000000000000000000000041334071220400272310ustar00rootroot00000000000000two r.js-2.3.6/build/tests/lib/plugins/plug.js000066400000000000000000000017431334071220400203740ustar00rootroot00000000000000define(['converter'], function (converter) { var buildMap = {}; function jsEscape(content) { return content.replace(/(['\\])/g, '\\$1') .replace(/[\f]/g, "\\f") .replace(/[\b]/g, "\\b") .replace(/[\n]/g, "\\n") .replace(/[\t]/g, "\\t") .replace(/[\r]/g, "\\r"); } return { version: '1', load: function (name, require, onLoad, config) { var converted = converter.convert(name); buildMap[name] = converted; onLoad(converted); }, write: function (pluginName, moduleName, write, data) { if (moduleName in buildMap) { var content = jsEscape(buildMap[moduleName]); write("define('" + pluginName + "!" + moduleName + "', function () { /* name: " + data.name + " path: " + data.path.split(/[\/\\]/).pop() + " */ return '" + content + "';});\n"); } } }; }); r.js-2.3.6/build/tests/lib/plugins/util.js000066400000000000000000000001611334071220400203730ustar00rootroot00000000000000define(function () { function upper(text) { return text.toUpperCase(); }; return upper; }); r.js-2.3.6/build/tests/lib/pragmas/000077500000000000000000000000001334071220400170335ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/pragmas/override/000077500000000000000000000000001334071220400206525ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/pragmas/override/build.js000066400000000000000000000004671334071220400223160ustar00rootroot00000000000000{ baseUrl: 'src', dir: 'built', optimize: 'none', pragmas: { sharedInclude: true, fancyExclude: true, funnyInclude: false }, modules: [ { name: 'main1' }, { name: 'main2', override: { pragmas: { fancyExclude: false, funnyInclude: true }}} ] } r.js-2.3.6/build/tests/lib/pragmas/override/expectedHelper.js000066400000000000000000000000401334071220400241430ustar00rootroot00000000000000define({ name: 'helper' }); r.js-2.3.6/build/tests/lib/pragmas/override/expectedMain1.js000066400000000000000000000000721334071220400236760ustar00rootroot00000000000000 define('main1',{ shared: true, name: 'main1' }); r.js-2.3.6/build/tests/lib/pragmas/override/expectedMain2.js000066400000000000000000000001341334071220400236760ustar00rootroot00000000000000 define('main2',{ shared: true, funny: true, fancy: true, name: 'main2' }); r.js-2.3.6/build/tests/lib/pragmas/override/src/000077500000000000000000000000001334071220400214415ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/pragmas/override/src/helper.js000066400000000000000000000002111334071220400232500ustar00rootroot00000000000000define({ //>>excludeStart("fancyExclude", pragmas.fancyExclude); fancy: true, //>>excludeEnd("fancyExclude"); name: 'helper' }); r.js-2.3.6/build/tests/lib/pragmas/override/src/main1.js000066400000000000000000000005361334071220400230100ustar00rootroot00000000000000define({ //>>includeStart("sharedInclude", pragmas.sharedInclude); shared: true, //>>includeEnd("sharedInclude"); //>>includeStart("funnyInclude", pragmas.funnyInclude); funny: true, //>>includeEnd("funnyInclude"); //>>excludeStart("fancyExclude", pragmas.fancyExclude); fancy: true, //>>excludeEnd("fancyExclude"); name: 'main1' }); r.js-2.3.6/build/tests/lib/pragmas/override/src/main2.js000066400000000000000000000005361334071220400230110ustar00rootroot00000000000000define({ //>>includeStart("sharedInclude", pragmas.sharedInclude); shared: true, //>>includeEnd("sharedInclude"); //>>includeStart("funnyInclude", pragmas.funnyInclude); funny: true, //>>includeEnd("funnyInclude"); //>>excludeStart("fancyExclude", pragmas.fancyExclude); fancy: true, //>>excludeEnd("fancyExclude"); name: 'main2' }); r.js-2.3.6/build/tests/lib/pristineSrc/000077500000000000000000000000001334071220400177065ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/pristineSrc/build.js000066400000000000000000000006341334071220400213460ustar00rootroot00000000000000//Tests to make sure appDir with a paths gets //the paths set correctly and does not overwrite //the source file when it is a build target. ({ appDir: 'src', baseUrl: '.', paths: { 'lib': 'vendor/lib' }, dir: 'built', optimize: 'none', modules: [ { name: 'lib' }, { name: 'main', exclude: ['lib'] } ] }) r.js-2.3.6/build/tests/lib/pristineSrc/expected-lib.js000066400000000000000000000002151334071220400226070ustar00rootroot00000000000000 define('util',{ id: 'util' }); define('lib',['util'], function (util) { return { id: 'lib', util: util }; }); r.js-2.3.6/build/tests/lib/pristineSrc/expected-main.js000066400000000000000000000001241334071220400227640ustar00rootroot00000000000000 define('a',{ id: 'a' }); define('main',['lib', 'a'], function (lib, a) { }); r.js-2.3.6/build/tests/lib/pristineSrc/src/000077500000000000000000000000001334071220400204755ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/pristineSrc/src/a.js000066400000000000000000000000311334071220400212450ustar00rootroot00000000000000define({ id: 'a' }); r.js-2.3.6/build/tests/lib/pristineSrc/src/main.js000066400000000000000000000000561334071220400217600ustar00rootroot00000000000000define(['lib', 'a'], function (lib, a) { }); r.js-2.3.6/build/tests/lib/pristineSrc/src/util.js000066400000000000000000000000351334071220400220060ustar00rootroot00000000000000define({ id: 'util' }); r.js-2.3.6/build/tests/lib/pristineSrc/src/vendor/000077500000000000000000000000001334071220400217725ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/pristineSrc/src/vendor/lib.js000066400000000000000000000001411334071220400230720ustar00rootroot00000000000000define(['util'], function (util) { return { id: 'lib', util: util }; }); r.js-2.3.6/build/tests/lib/rawText/000077500000000000000000000000001334071220400170375ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/rawText/b.js000066400000000000000000000000341334071220400176130ustar00rootroot00000000000000define({ name: 'b' }); r.js-2.3.6/build/tests/lib/rawText/build.js000066400000000000000000000002321334071220400204710ustar00rootroot00000000000000{ baseUrl: '.', rawText: { 'a': 'require(["b"], function (b) {});' }, include: ['a'], optimize: 'none', out: 'built.js' } r.js-2.3.6/build/tests/lib/rawText/expected.js000066400000000000000000000001361334071220400211760ustar00rootroot00000000000000 define('b',{ name: 'b' }); require(["b"], function (b) {}); define("a", function(){}); r.js-2.3.6/build/tests/lib/rawTextDeps/000077500000000000000000000000001334071220400176535ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/rawTextDeps/b.js000066400000000000000000000000341334071220400204270ustar00rootroot00000000000000define({ name: 'b' }); r.js-2.3.6/build/tests/lib/rawTextDeps/build.js000066400000000000000000000002501334071220400213050ustar00rootroot00000000000000{ baseUrl: '.', rawText: { 'a': 'define(["b"], function (b) {});' }, deps: ['a'], name: 'main', optimize: 'none', out: 'built.js' } r.js-2.3.6/build/tests/lib/rawTextDeps/built.js000066400000000000000000000001541334071220400213300ustar00rootroot00000000000000define('b',{ name: 'b' }); define('a',["b"], function (b) {}); define('main',{ name: 'main' }); r.js-2.3.6/build/tests/lib/rawTextDeps/expected.js000066400000000000000000000001541334071220400220120ustar00rootroot00000000000000define('b',{ name: 'b' }); define('a',["b"], function (b) {}); define('main',{ name: 'main' }); r.js-2.3.6/build/tests/lib/rawTextDeps/main.js000066400000000000000000000000371334071220400211350ustar00rootroot00000000000000define({ name: 'main' }); r.js-2.3.6/build/tests/lib/rawTextLongId/000077500000000000000000000000001334071220400201345ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/rawTextLongId/build.js000066400000000000000000000003411334071220400215670ustar00rootroot00000000000000{ baseUrl: '.', rawText: { 'something-js/core': 'define(["something-js/a", "something-js/b",], function() { return window.SomethingJS; });' }, name: 'main', optimize: 'none', out: 'built.js' } r.js-2.3.6/build/tests/lib/rawTextLongId/expected.js000066400000000000000000000004441334071220400222750ustar00rootroot00000000000000define('something-js/a',{ name: 'something-js/a' }); define('something-js/b',{ name: 'something-js/b' }); define('something-js/core',["something-js/a", "something-js/b",], function() { return window.SomethingJS; }); require(['something-js/core']); define("main", function(){}); r.js-2.3.6/build/tests/lib/rawTextLongId/main.js000066400000000000000000000000411334071220400214110ustar00rootroot00000000000000require(['something-js/core']); r.js-2.3.6/build/tests/lib/rawTextLongId/something-js/000077500000000000000000000000001334071220400225435ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/rawTextLongId/something-js/a.js000066400000000000000000000000511334071220400233150ustar00rootroot00000000000000define({ name: 'something-js/a' }); r.js-2.3.6/build/tests/lib/rawTextLongId/something-js/b.js000066400000000000000000000000501334071220400233150ustar00rootroot00000000000000define({ name: 'something-js/b' }); r.js-2.3.6/build/tests/lib/rawTextNameTarget/000077500000000000000000000000001334071220400210075ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/rawTextNameTarget/b.js000066400000000000000000000000421334071220400215620ustar00rootroot00000000000000define(['c'], function (c) { }); r.js-2.3.6/build/tests/lib/rawTextNameTarget/build.js000066400000000000000000000002241334071220400224420ustar00rootroot00000000000000{ baseUrl: '.', name: 'a', rawText: { 'a': "define(['b'], function (b) {});" }, out: 'a-built.js', optimize: 'none' } r.js-2.3.6/build/tests/lib/rawTextNameTarget/c.js000066400000000000000000000000321334071220400215620ustar00rootroot00000000000000define({ name: 'c' }); r.js-2.3.6/build/tests/lib/rawTextNameTarget/expected.js000066400000000000000000000001521334071220400231440ustar00rootroot00000000000000 define('c',{ name: 'c' }); define('b',['c'], function (c) { }); define('a',['b'], function (b) {});r.js-2.3.6/build/tests/lib/rawTextNameWholeProject/000077500000000000000000000000001334071220400221665ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/rawTextNameWholeProject/expected-b.js000066400000000000000000000001421334071220400245410ustar00rootroot00000000000000define('b',['./util/helper'], function(helper) { return { name: 'b', helper: helper }; }); r.js-2.3.6/build/tests/lib/rawTextNameWholeProject/expected-main.js000066400000000000000000000005371334071220400252540ustar00rootroot00000000000000define('util/helper',[],function () { return function () { return 'helper is ready'; }; }); define('a',['./util/helper'], function(helper) { return { name: 'a', helper: helper }; }); require(['a'], function(a) { console.log(a); require(['b'], function(b) { console.log(b); });}); define("main", function(){}); r.js-2.3.6/build/tests/lib/rawTextNameWholeProject/www/000077500000000000000000000000001334071220400230125ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/rawTextNameWholeProject/www/app.build.js000066400000000000000000000007121334071220400252260ustar00rootroot00000000000000({ appDir: '.', baseUrl: 'js', dir: '../www-built', optimize: 'none', rawText: { 'main': 'require([\'a\'], function(a) {' + ' console.log(a);' + ' require([\'b\'], function(b) {' + ' console.log(b);' + ' });' + '});' }, modules: [{ name: 'main', }, { name: 'b', exclude: ['main'] }] }) r.js-2.3.6/build/tests/lib/rawTextNameWholeProject/www/index.html000066400000000000000000000002331334071220400250050ustar00rootroot00000000000000 r.js-2.3.6/build/tests/lib/rawTextNameWholeProject/www/js/000077500000000000000000000000001334071220400234265ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/rawTextNameWholeProject/www/js/a.js000066400000000000000000000001351334071220400242030ustar00rootroot00000000000000define(['./util/helper'], function(helper) { return { name: 'a', helper: helper }; }); r.js-2.3.6/build/tests/lib/rawTextNameWholeProject/www/js/b.js000066400000000000000000000001351334071220400242040ustar00rootroot00000000000000define(['./util/helper'], function(helper) { return { name: 'b', helper: helper }; }); r.js-2.3.6/build/tests/lib/rawTextNameWholeProject/www/js/util/000077500000000000000000000000001334071220400244035ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/rawTextNameWholeProject/www/js/util/helper.js000066400000000000000000000001331334071220400262150ustar00rootroot00000000000000define(function () { return function () { return 'helper is ready'; }; }); r.js-2.3.6/build/tests/lib/removeCombined/000077500000000000000000000000001334071220400203375ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/removeCombined/app/000077500000000000000000000000001334071220400211175ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/removeCombined/app/index.html000066400000000000000000000001741334071220400231160ustar00rootroot00000000000000 Hello World r.js-2.3.6/build/tests/lib/removeCombined/app/js/000077500000000000000000000000001334071220400215335ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/removeCombined/app/js/a.js000066400000000000000000000000331334071220400223050ustar00rootroot00000000000000define({ name: 'a' }); r.js-2.3.6/build/tests/lib/removeCombined/app/js/b.js000066400000000000000000000000331334071220400223060ustar00rootroot00000000000000define({ name: 'b' }); r.js-2.3.6/build/tests/lib/removeCombined/app/js/c.js000066400000000000000000000000331334071220400223070ustar00rootroot00000000000000define({ name: 'c' }); r.js-2.3.6/build/tests/lib/removeCombined/app/js/d.js000066400000000000000000000000331334071220400223100ustar00rootroot00000000000000define({ name: 'd' }); r.js-2.3.6/build/tests/lib/removeCombined/app/js/main.js000066400000000000000000000001561334071220400230170ustar00rootroot00000000000000define(['a', 'b'], function (a, b) { return { name: 'main', a: a, b: b }; }); r.js-2.3.6/build/tests/lib/removeCombined/app/js/secondary.js000066400000000000000000000002311334071220400240540ustar00rootroot00000000000000define(['main', 'c', 'sub/e'], function (main, c, e) { return { name: 'secondary', main: main, c: c, e: e }; }); r.js-2.3.6/build/tests/lib/removeCombined/app/js/sub/000077500000000000000000000000001334071220400223245ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/removeCombined/app/js/sub/e.js000066400000000000000000000000331334071220400231020ustar00rootroot00000000000000define({ name: 'e' }); r.js-2.3.6/build/tests/lib/removeCombined/build-baseUrl.js000066400000000000000000000003711334071220400233700ustar00rootroot00000000000000{ baseUrl: 'app/js', dir: 'baseUrl-built', optimize: 'none', removeCombined: true, modules: [ { name: 'main' }, { name: 'secondary', exclude: ['main'] } ] } r.js-2.3.6/build/tests/lib/removeCombined/build.js000066400000000000000000000004041334071220400217720ustar00rootroot00000000000000{ appDir: 'app', baseUrl: 'js', dir: 'app-built', optimize: 'none', removeCombined: true, modules: [ { name: 'main' }, { name: 'secondary', exclude: ['main'] } ] } r.js-2.3.6/build/tests/lib/removeCombined/expected-main.js000066400000000000000000000002661334071220400234240ustar00rootroot00000000000000 define('a',{ name: 'a' }); define('b',{ name: 'b' }); define('main',['a', 'b'], function (a, b) { return { name: 'main', a: a, b: b }; }); r.js-2.3.6/build/tests/lib/removeCombined/expected-secondary.js000066400000000000000000000003521334071220400244630ustar00rootroot00000000000000 define('c',{ name: 'c' }); define('sub/e',{ name: 'e' }); define('secondary',['main', 'c', 'sub/e'], function (main, c, e) { return { name: 'secondary', main: main, c: c, e: e }; }); r.js-2.3.6/build/tests/lib/removeCombinedPaths/000077500000000000000000000000001334071220400213375ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/removeCombinedPaths/testcase/000077500000000000000000000000001334071220400231525ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/removeCombinedPaths/testcase/lib/000077500000000000000000000000001334071220400237205ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/removeCombinedPaths/testcase/lib/main.js000066400000000000000000000001141334071220400251760ustar00rootroot00000000000000define(function(require, exports, module) { console.log("lib main"); }); r.js-2.3.6/build/tests/lib/removeCombinedPaths/testcase/project/000077500000000000000000000000001334071220400246205ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/removeCombinedPaths/testcase/project/build/000077500000000000000000000000001334071220400257175ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/removeCombinedPaths/testcase/project/build/build.js000066400000000000000000000003601334071220400273530ustar00rootroot00000000000000({ appDir: "../src", baseUrl: ".", dir: "./build_output", paths: { 'the_lib': '../../lib', }, modules: [ { name: "main" } ], optimize: "none", removeCombined: true }) r.js-2.3.6/build/tests/lib/removeCombinedPaths/testcase/project/src/000077500000000000000000000000001334071220400254075ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/removeCombinedPaths/testcase/project/src/main.js000066400000000000000000000001651334071220400266730ustar00rootroot00000000000000define(function(require, exports, module) { var lib = require('the_lib/main'); console.log("project main"); }); r.js-2.3.6/build/tests/lib/requireHoist/000077500000000000000000000000001334071220400200645ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/requireHoist/perLayer/000077500000000000000000000000001334071220400216475ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/requireHoist/perLayer/build.js000066400000000000000000000003561334071220400233100ustar00rootroot00000000000000{ baseUrl: 'src', dir: 'built', optimize: 'none', paths: { requireLib: 'require' }, modules: [ { name: 'main1', include: ['requireLib'] }, { name: 'main2', include: ['requireLib'] } ] } r.js-2.3.6/build/tests/lib/requireHoist/perLayer/expectedMain1.js000066400000000000000000002351061334071220400247030ustar00rootroot00000000000000 /** vim: et:ts=4:sw=4:sts=4 * @license RequireJS 2.0.6 Copyright (c) 2010-2012, The Dojo Foundation All Rights Reserved. * Available via the MIT or new BSD license. * see: http://github.com/jrburke/requirejs for details */ //Not using strict: uneven strict support in browsers, #392, and causes //problems with requirejs.exec()/transpiler plugins that may not be strict. /*jslint regexp: true, nomen: true, sloppy: true */ /*global window, navigator, document, importScripts, jQuery, setTimeout, opera */ var requirejs, require, define; (function (global) { var req, s, head, baseElement, dataMain, src, interactiveScript, currentlyAddingScript, mainScript, subPath, version = '2.0.6', commentRegExp = /(\/\*([\s\S]*?)\*\/|([^:]|^)\/\/(.*)$)/mg, cjsRequireRegExp = /[^.]\s*require\s*\(\s*["']([^'"\s]+)["']\s*\)/g, jsSuffixRegExp = /\.js$/, currDirRegExp = /^\.\//, op = Object.prototype, ostring = op.toString, hasOwn = op.hasOwnProperty, ap = Array.prototype, aps = ap.slice, apsp = ap.splice, isBrowser = !!(typeof window !== 'undefined' && navigator && document), isWebWorker = !isBrowser && typeof importScripts !== 'undefined', //PS3 indicates loaded and complete, but need to wait for complete //specifically. Sequence is 'loading', 'loaded', execution, // then 'complete'. The UA check is unfortunate, but not sure how //to feature test w/o causing perf issues. readyRegExp = isBrowser && navigator.platform === 'PLAYSTATION 3' ? /^complete$/ : /^(complete|loaded)$/, defContextName = '_', //Oh the tragedy, detecting opera. See the usage of isOpera for reason. isOpera = typeof opera !== 'undefined' && opera.toString() === '[object Opera]', contexts = {}, cfg = {}, globalDefQueue = [], useInteractive = false; function isFunction(it) { return ostring.call(it) === '[object Function]'; } function isArray(it) { return ostring.call(it) === '[object Array]'; } /** * Helper function for iterating over an array. If the func returns * a true value, it will break out of the loop. */ function each(ary, func) { if (ary) { var i; for (i = 0; i < ary.length; i += 1) { if (ary[i] && func(ary[i], i, ary)) { break; } } } } /** * Helper function for iterating over an array backwards. If the func * returns a true value, it will break out of the loop. */ function eachReverse(ary, func) { if (ary) { var i; for (i = ary.length - 1; i > -1; i -= 1) { if (ary[i] && func(ary[i], i, ary)) { break; } } } } function hasProp(obj, prop) { return hasOwn.call(obj, prop); } /** * Cycles over properties in an object and calls a function for each * property value. If the function returns a truthy value, then the * iteration is stopped. */ function eachProp(obj, func) { var prop; for (prop in obj) { if (obj.hasOwnProperty(prop)) { if (func(obj[prop], prop)) { break; } } } } /** * Simple function to mix in properties from source into target, * but only if target does not already have a property of the same name. * This is not robust in IE for transferring methods that match * Object.prototype names, but the uses of mixin here seem unlikely to * trigger a problem related to that. */ function mixin(target, source, force, deepStringMixin) { if (source) { eachProp(source, function (value, prop) { if (force || !hasProp(target, prop)) { if (deepStringMixin && typeof value !== 'string') { if (!target[prop]) { target[prop] = {}; } mixin(target[prop], value, force, deepStringMixin); } else { target[prop] = value; } } }); } return target; } //Similar to Function.prototype.bind, but the 'this' object is specified //first, since it is easier to read/figure out what 'this' will be. function bind(obj, fn) { return function () { return fn.apply(obj, arguments); }; } function scripts() { return document.getElementsByTagName('script'); } //Allow getting a global that expressed in //dot notation, like 'a.b.c'. function getGlobal(value) { if (!value) { return value; } var g = global; each(value.split('.'), function (part) { g = g[part]; }); return g; } function makeContextModuleFunc(func, relMap, enableBuildCallback) { return function () { //A version of a require function that passes a moduleName //value for items that may need to //look up paths relative to the moduleName var args = aps.call(arguments, 0), lastArg; if (enableBuildCallback && isFunction((lastArg = args[args.length - 1]))) { lastArg.__requireJsBuild = true; } args.push(relMap); return func.apply(null, args); }; } function addRequireMethods(req, context, relMap) { each([ ['toUrl'], ['undef'], ['defined', 'requireDefined'], ['specified', 'requireSpecified'] ], function (item) { var prop = item[1] || item[0]; req[item[0]] = context ? makeContextModuleFunc(context[prop], relMap) : //If no context, then use default context. Reference from //contexts instead of early binding to default context, so //that during builds, the latest instance of the default //context with its config gets used. function () { var ctx = contexts[defContextName]; return ctx[prop].apply(ctx, arguments); }; }); } /** * Constructs an error with a pointer to an URL with more information. * @param {String} id the error ID that maps to an ID on a web page. * @param {String} message human readable error. * @param {Error} [err] the original error, if there is one. * * @returns {Error} */ function makeError(id, msg, err, requireModules) { var e = new Error(msg + '\nhttp://requirejs.org/docs/errors.html#' + id); e.requireType = id; e.requireModules = requireModules; if (err) { e.originalError = err; } return e; } if (typeof define !== 'undefined') { //If a define is already in play via another AMD loader, //do not overwrite. return; } if (typeof requirejs !== 'undefined') { if (isFunction(requirejs)) { //Do not overwrite and existing requirejs instance. return; } cfg = requirejs; requirejs = undefined; } //Allow for a require config object if (typeof require !== 'undefined' && !isFunction(require)) { //assume it is a config object. cfg = require; require = undefined; } function newContext(contextName) { var inCheckLoaded, Module, context, handlers, checkLoadedTimeoutId, config = { waitSeconds: 7, baseUrl: './', paths: {}, pkgs: {}, shim: {} }, registry = {}, undefEvents = {}, defQueue = [], defined = {}, urlFetched = {}, requireCounter = 1, unnormalizedCounter = 1, //Used to track the order in which modules //should be executed, by the order they //load. Important for consistent cycle resolution //behavior. waitAry = []; /** * Trims the . and .. from an array of path segments. * It will keep a leading path segment if a .. will become * the first path segment, to help with module name lookups, * which act like paths, but can be remapped. But the end result, * all paths that use this function should look normalized. * NOTE: this method MODIFIES the input array. * @param {Array} ary the array of path segments. */ function trimDots(ary) { var i, part; for (i = 0; ary[i]; i += 1) { part = ary[i]; if (part === '.') { ary.splice(i, 1); i -= 1; } else if (part === '..') { if (i === 1 && (ary[2] === '..' || ary[0] === '..')) { //End of the line. Keep at least one non-dot //path segment at the front so it can be mapped //correctly to disk. Otherwise, there is likely //no path mapping for a path starting with '..'. //This can still fail, but catches the most reasonable //uses of .. break; } else if (i > 0) { ary.splice(i - 1, 2); i -= 2; } } } } /** * Given a relative module name, like ./something, normalize it to * a real name that can be mapped to a path. * @param {String} name the relative name * @param {String} baseName a real name that the name arg is relative * to. * @param {Boolean} applyMap apply the map config to the value. Should * only be done if this normalization is for a dependency ID. * @returns {String} normalized name */ function normalize(name, baseName, applyMap) { var pkgName, pkgConfig, mapValue, nameParts, i, j, nameSegment, foundMap, foundI, foundStarMap, starI, baseParts = baseName && baseName.split('/'), normalizedBaseParts = baseParts, map = config.map, starMap = map && map['*']; //Adjust any relative paths. if (name && name.charAt(0) === '.') { //If have a base name, try to normalize against it, //otherwise, assume it is a top-level require that will //be relative to baseUrl in the end. if (baseName) { if (config.pkgs[baseName]) { //If the baseName is a package name, then just treat it as one //name to concat the name with. normalizedBaseParts = baseParts = [baseName]; } else { //Convert baseName to array, and lop off the last part, //so that . matches that 'directory' and not name of the baseName's //module. For instance, baseName of 'one/two/three', maps to //'one/two/three.js', but we want the directory, 'one/two' for //this normalization. normalizedBaseParts = baseParts.slice(0, baseParts.length - 1); } name = normalizedBaseParts.concat(name.split('/')); trimDots(name); //Some use of packages may use a . path to reference the //'main' module name, so normalize for that. pkgConfig = config.pkgs[(pkgName = name[0])]; name = name.join('/'); if (pkgConfig && name === pkgName + '/' + pkgConfig.main) { name = pkgName; } } else if (name.indexOf('./') === 0) { // No baseName, so this is ID is resolved relative // to baseUrl, pull off the leading dot. name = name.substring(2); } } //Apply map config if available. if (applyMap && (baseParts || starMap) && map) { nameParts = name.split('/'); for (i = nameParts.length; i > 0; i -= 1) { nameSegment = nameParts.slice(0, i).join('/'); if (baseParts) { //Find the longest baseName segment match in the config. //So, do joins on the biggest to smallest lengths of baseParts. for (j = baseParts.length; j > 0; j -= 1) { mapValue = map[baseParts.slice(0, j).join('/')]; //baseName segment has config, find if it has one for //this name. if (mapValue) { mapValue = mapValue[nameSegment]; if (mapValue) { //Match, update name to the new value. foundMap = mapValue; foundI = i; break; } } } } if (foundMap) { break; } //Check for a star map match, but just hold on to it, //if there is a shorter segment match later in a matching //config, then favor over this star map. if (!foundStarMap && starMap && starMap[nameSegment]) { foundStarMap = starMap[nameSegment]; starI = i; } } if (!foundMap && foundStarMap) { foundMap = foundStarMap; foundI = starI; } if (foundMap) { nameParts.splice(0, foundI, foundMap); name = nameParts.join('/'); } } return name; } function removeScript(name) { if (isBrowser) { each(scripts(), function (scriptNode) { if (scriptNode.getAttribute('data-requiremodule') === name && scriptNode.getAttribute('data-requirecontext') === context.contextName) { scriptNode.parentNode.removeChild(scriptNode); return true; } }); } } function hasPathFallback(id) { var pathConfig = config.paths[id]; if (pathConfig && isArray(pathConfig) && pathConfig.length > 1) { removeScript(id); //Pop off the first array value, since it failed, and //retry pathConfig.shift(); context.undef(id); context.require([id]); return true; } } /** * Creates a module mapping that includes plugin prefix, module * name, and path. If parentModuleMap is provided it will * also normalize the name via require.normalize() * * @param {String} name the module name * @param {String} [parentModuleMap] parent module map * for the module name, used to resolve relative names. * @param {Boolean} isNormalized: is the ID already normalized. * This is true if this call is done for a define() module ID. * @param {Boolean} applyMap: apply the map config to the ID. * Should only be true if this map is for a dependency. * * @returns {Object} */ function makeModuleMap(name, parentModuleMap, isNormalized, applyMap) { var url, pluginModule, suffix, index = name ? name.indexOf('!') : -1, prefix = null, parentName = parentModuleMap ? parentModuleMap.name : null, originalName = name, isDefine = true, normalizedName = ''; //If no name, then it means it is a require call, generate an //internal name. if (!name) { isDefine = false; name = '_@r' + (requireCounter += 1); } if (index !== -1) { prefix = name.substring(0, index); name = name.substring(index + 1, name.length); } if (prefix) { prefix = normalize(prefix, parentName, applyMap); pluginModule = defined[prefix]; } //Account for relative paths if there is a base name. if (name) { if (prefix) { if (pluginModule && pluginModule.normalize) { //Plugin is loaded, use its normalize method. normalizedName = pluginModule.normalize(name, function (name) { return normalize(name, parentName, applyMap); }); } else { normalizedName = normalize(name, parentName, applyMap); } } else { //A regular module. normalizedName = normalize(name, parentName, applyMap); url = context.nameToUrl(normalizedName); } } //If the id is a plugin id that cannot be determined if it needs //normalization, stamp it with a unique ID so two matching relative //ids that may conflict can be separate. suffix = prefix && !pluginModule && !isNormalized ? '_unnormalized' + (unnormalizedCounter += 1) : ''; return { prefix: prefix, name: normalizedName, parentMap: parentModuleMap, unnormalized: !!suffix, url: url, originalName: originalName, isDefine: isDefine, id: (prefix ? prefix + '!' + normalizedName : normalizedName) + suffix }; } function getModule(depMap) { var id = depMap.id, mod = registry[id]; if (!mod) { mod = registry[id] = new context.Module(depMap); } return mod; } function on(depMap, name, fn) { var id = depMap.id, mod = registry[id]; if (hasProp(defined, id) && (!mod || mod.defineEmitComplete)) { if (name === 'defined') { fn(defined[id]); } } else { getModule(depMap).on(name, fn); } } function onError(err, errback) { var ids = err.requireModules, notified = false; if (errback) { errback(err); } else { each(ids, function (id) { var mod = registry[id]; if (mod) { //Set error on module, so it skips timeout checks. mod.error = err; if (mod.events.error) { notified = true; mod.emit('error', err); } } }); if (!notified) { req.onError(err); } } } /** * Internal method to transfer globalQueue items to this context's * defQueue. */ function takeGlobalQueue() { //Push all the globalDefQueue items into the context's defQueue if (globalDefQueue.length) { //Array splice in the values since the context code has a //local var ref to defQueue, so cannot just reassign the one //on context. apsp.apply(defQueue, [defQueue.length - 1, 0].concat(globalDefQueue)); globalDefQueue = []; } } /** * Helper function that creates a require function object to give to * modules that ask for it as a dependency. It needs to be specific * per module because of the implication of path mappings that may * need to be relative to the module name. */ function makeRequire(mod, enableBuildCallback, altRequire) { var relMap = mod && mod.map, modRequire = makeContextModuleFunc(altRequire || context.require, relMap, enableBuildCallback); addRequireMethods(modRequire, context, relMap); modRequire.isBrowser = isBrowser; return modRequire; } handlers = { 'require': function (mod) { return makeRequire(mod); }, 'exports': function (mod) { mod.usingExports = true; if (mod.map.isDefine) { return (mod.exports = defined[mod.map.id] = {}); } }, 'module': function (mod) { return (mod.module = { id: mod.map.id, uri: mod.map.url, config: function () { return (config.config && config.config[mod.map.id]) || {}; }, exports: defined[mod.map.id] }); } }; function removeWaiting(id) { //Clean up machinery used for waiting modules. delete registry[id]; each(waitAry, function (mod, i) { if (mod.map.id === id) { waitAry.splice(i, 1); if (!mod.defined) { context.waitCount -= 1; } return true; } }); } function findCycle(mod, traced, processed) { var id = mod.map.id, depArray = mod.depMaps, foundModule; //Do not bother with unitialized modules or not yet enabled //modules. if (!mod.inited) { return; } //Found the cycle. if (traced[id]) { return mod; } traced[id] = true; //Trace through the dependencies. each(depArray, function (depMap) { var depId = depMap.id, depMod = registry[depId]; if (!depMod || processed[depId] || !depMod.inited || !depMod.enabled) { return; } return (foundModule = findCycle(depMod, traced, processed)); }); processed[id] = true; return foundModule; } function forceExec(mod, traced, uninited) { var id = mod.map.id, depArray = mod.depMaps; if (!mod.inited || !mod.map.isDefine) { return; } if (traced[id]) { return defined[id]; } traced[id] = mod; each(depArray, function (depMap) { var depId = depMap.id, depMod = registry[depId], value; if (handlers[depId]) { return; } if (depMod) { if (!depMod.inited || !depMod.enabled) { //Dependency is not inited, //so this module cannot be //given a forced value yet. uninited[id] = true; return; } //Get the value for the current dependency value = forceExec(depMod, traced, uninited); //Even with forcing it may not be done, //in particular if the module is waiting //on a plugin resource. if (!uninited[depId]) { mod.defineDepById(depId, value); } } }); mod.check(true); return defined[id]; } function modCheck(mod) { mod.check(); } function checkLoaded() { var map, modId, err, usingPathFallback, waitInterval = config.waitSeconds * 1000, //It is possible to disable the wait interval by using waitSeconds of 0. expired = waitInterval && (context.startTime + waitInterval) < new Date().getTime(), noLoads = [], stillLoading = false, needCycleCheck = true; //Do not bother if this call was a result of a cycle break. if (inCheckLoaded) { return; } inCheckLoaded = true; //Figure out the state of all the modules. eachProp(registry, function (mod) { map = mod.map; modId = map.id; //Skip things that are not enabled or in error state. if (!mod.enabled) { return; } if (!mod.error) { //If the module should be executed, and it has not //been inited and time is up, remember it. if (!mod.inited && expired) { if (hasPathFallback(modId)) { usingPathFallback = true; stillLoading = true; } else { noLoads.push(modId); removeScript(modId); } } else if (!mod.inited && mod.fetched && map.isDefine) { stillLoading = true; if (!map.prefix) { //No reason to keep looking for unfinished //loading. If the only stillLoading is a //plugin resource though, keep going, //because it may be that a plugin resource //is waiting on a non-plugin cycle. return (needCycleCheck = false); } } } }); if (expired && noLoads.length) { //If wait time expired, throw error of unloaded modules. err = makeError('timeout', 'Load timeout for modules: ' + noLoads, null, noLoads); err.contextName = context.contextName; return onError(err); } //Not expired, check for a cycle. if (needCycleCheck) { each(waitAry, function (mod) { if (mod.defined) { return; } var cycleMod = findCycle(mod, {}, {}), traced = {}; if (cycleMod) { forceExec(cycleMod, traced, {}); //traced modules may have been //removed from the registry, but //their listeners still need to //be called. eachProp(traced, modCheck); } }); //Now that dependencies have //been satisfied, trigger the //completion check that then //notifies listeners. eachProp(registry, modCheck); } //If still waiting on loads, and the waiting load is something //other than a plugin resource, or there are still outstanding //scripts, then just try back later. if ((!expired || usingPathFallback) && stillLoading) { //Something is still waiting to load. Wait for it, but only //if a timeout is not already in effect. if ((isBrowser || isWebWorker) && !checkLoadedTimeoutId) { checkLoadedTimeoutId = setTimeout(function () { checkLoadedTimeoutId = 0; checkLoaded(); }, 50); } } inCheckLoaded = false; } Module = function (map) { this.events = undefEvents[map.id] || {}; this.map = map; this.shim = config.shim[map.id]; this.depExports = []; this.depMaps = []; this.depMatched = []; this.pluginMaps = {}; this.depCount = 0; /* this.exports this.factory this.depMaps = [], this.enabled, this.fetched */ }; Module.prototype = { init: function (depMaps, factory, errback, options) { options = options || {}; //Do not do more inits if already done. Can happen if there //are multiple define calls for the same module. That is not //a normal, common case, but it is also not unexpected. if (this.inited) { return; } this.factory = factory; if (errback) { //Register for errors on this module. this.on('error', errback); } else if (this.events.error) { //If no errback already, but there are error listeners //on this module, set up an errback to pass to the deps. errback = bind(this, function (err) { this.emit('error', err); }); } //Do a copy of the dependency array, so that //source inputs are not modified. For example //"shim" deps are passed in here directly, and //doing a direct modification of the depMaps array //would affect that config. this.depMaps = depMaps && depMaps.slice(0); this.depMaps.rjsSkipMap = depMaps.rjsSkipMap; this.errback = errback; //Indicate this module has be initialized this.inited = true; this.ignore = options.ignore; //Could have option to init this module in enabled mode, //or could have been previously marked as enabled. However, //the dependencies are not known until init is called. So //if enabled previously, now trigger dependencies as enabled. if (options.enabled || this.enabled) { //Enable this module and dependencies. //Will call this.check() this.enable(); } else { this.check(); } }, defineDepById: function (id, depExports) { var i; //Find the index for this dependency. each(this.depMaps, function (map, index) { if (map.id === id) { i = index; return true; } }); return this.defineDep(i, depExports); }, defineDep: function (i, depExports) { //Because of cycles, defined callback for a given //export can be called more than once. if (!this.depMatched[i]) { this.depMatched[i] = true; this.depCount -= 1; this.depExports[i] = depExports; } }, fetch: function () { if (this.fetched) { return; } this.fetched = true; context.startTime = (new Date()).getTime(); var map = this.map; //If the manager is for a plugin managed resource, //ask the plugin to load it now. if (this.shim) { makeRequire(this, true)(this.shim.deps || [], bind(this, function () { return map.prefix ? this.callPlugin() : this.load(); })); } else { //Regular dependency. return map.prefix ? this.callPlugin() : this.load(); } }, load: function () { var url = this.map.url; //Regular dependency. if (!urlFetched[url]) { urlFetched[url] = true; context.load(this.map.id, url); } }, /** * Checks is the module is ready to define itself, and if so, * define it. If the silent argument is true, then it will just * define, but not notify listeners, and not ask for a context-wide * check of all loaded modules. That is useful for cycle breaking. */ check: function (silent) { if (!this.enabled || this.enabling) { return; } var err, cjsModule, id = this.map.id, depExports = this.depExports, exports = this.exports, factory = this.factory; if (!this.inited) { this.fetch(); } else if (this.error) { this.emit('error', this.error); } else if (!this.defining) { //The factory could trigger another require call //that would result in checking this module to //define itself again. If already in the process //of doing that, skip this work. this.defining = true; if (this.depCount < 1 && !this.defined) { if (isFunction(factory)) { //If there is an error listener, favor passing //to that instead of throwing an error. if (this.events.error) { try { exports = context.execCb(id, factory, depExports, exports); } catch (e) { err = e; } } else { exports = context.execCb(id, factory, depExports, exports); } if (this.map.isDefine) { //If setting exports via 'module' is in play, //favor that over return value and exports. After that, //favor a non-undefined return value over exports use. cjsModule = this.module; if (cjsModule && cjsModule.exports !== undefined && //Make sure it is not already the exports value cjsModule.exports !== this.exports) { exports = cjsModule.exports; } else if (exports === undefined && this.usingExports) { //exports already set the defined value. exports = this.exports; } } if (err) { err.requireMap = this.map; err.requireModules = [this.map.id]; err.requireType = 'define'; return onError((this.error = err)); } } else { //Just a literal value exports = factory; } this.exports = exports; if (this.map.isDefine && !this.ignore) { defined[id] = exports; if (req.onResourceLoad) { req.onResourceLoad(context, this.map, this.depMaps); } } //Clean up delete registry[id]; this.defined = true; context.waitCount -= 1; if (context.waitCount === 0) { //Clear the wait array used for cycles. waitAry = []; } } //Finished the define stage. Allow calling check again //to allow define notifications below in the case of a //cycle. this.defining = false; if (!silent) { if (this.defined && !this.defineEmitted) { this.defineEmitted = true; this.emit('defined', this.exports); this.defineEmitComplete = true; } } } }, callPlugin: function () { var map = this.map, id = map.id, pluginMap = makeModuleMap(map.prefix, null, false, true); on(pluginMap, 'defined', bind(this, function (plugin) { var load, normalizedMap, normalizedMod, name = this.map.name, parentName = this.map.parentMap ? this.map.parentMap.name : null; //If current map is not normalized, wait for that //normalized name to load instead of continuing. if (this.map.unnormalized) { //Normalize the ID if the plugin allows it. if (plugin.normalize) { name = plugin.normalize(name, function (name) { return normalize(name, parentName, true); }) || ''; } normalizedMap = makeModuleMap(map.prefix + '!' + name, this.map.parentMap, false, true); on(normalizedMap, 'defined', bind(this, function (value) { this.init([], function () { return value; }, null, { enabled: true, ignore: true }); })); normalizedMod = registry[normalizedMap.id]; if (normalizedMod) { if (this.events.error) { normalizedMod.on('error', bind(this, function (err) { this.emit('error', err); })); } normalizedMod.enable(); } return; } load = bind(this, function (value) { this.init([], function () { return value; }, null, { enabled: true }); }); load.error = bind(this, function (err) { this.inited = true; this.error = err; err.requireModules = [id]; //Remove temp unnormalized modules for this module, //since they will never be resolved otherwise now. eachProp(registry, function (mod) { if (mod.map.id.indexOf(id + '_unnormalized') === 0) { removeWaiting(mod.map.id); } }); onError(err); }); //Allow plugins to load other code without having to know the //context or how to 'complete' the load. load.fromText = function (moduleName, text) { /*jslint evil: true */ var hasInteractive = useInteractive; //Turn off interactive script matching for IE for any define //calls in the text, then turn it back on at the end. if (hasInteractive) { useInteractive = false; } //Prime the system by creating a module instance for //it. getModule(makeModuleMap(moduleName)); req.exec(text); if (hasInteractive) { useInteractive = true; } //Support anonymous modules. context.completeLoad(moduleName); }; //Use parentName here since the plugin's name is not reliable, //could be some weird string with no path that actually wants to //reference the parentName's path. plugin.load(map.name, makeRequire(map.parentMap, true, function (deps, cb, er) { deps.rjsSkipMap = true; return context.require(deps, cb, er); }), load, config); })); context.enable(pluginMap, this); this.pluginMaps[pluginMap.id] = pluginMap; }, enable: function () { this.enabled = true; if (!this.waitPushed) { waitAry.push(this); context.waitCount += 1; this.waitPushed = true; } //Set flag mentioning that the module is enabling, //so that immediate calls to the defined callbacks //for dependencies do not trigger inadvertent load //with the depCount still being zero. this.enabling = true; //Enable each dependency each(this.depMaps, bind(this, function (depMap, i) { var id, mod, handler; if (typeof depMap === 'string') { //Dependency needs to be converted to a depMap //and wired up to this module. depMap = makeModuleMap(depMap, (this.map.isDefine ? this.map : this.map.parentMap), false, !this.depMaps.rjsSkipMap); this.depMaps[i] = depMap; handler = handlers[depMap.id]; if (handler) { this.depExports[i] = handler(this); return; } this.depCount += 1; on(depMap, 'defined', bind(this, function (depExports) { this.defineDep(i, depExports); this.check(); })); if (this.errback) { on(depMap, 'error', this.errback); } } id = depMap.id; mod = registry[id]; //Skip special modules like 'require', 'exports', 'module' //Also, don't call enable if it is already enabled, //important in circular dependency cases. if (!handlers[id] && mod && !mod.enabled) { context.enable(depMap, this); } })); //Enable each plugin that is used in //a dependency eachProp(this.pluginMaps, bind(this, function (pluginMap) { var mod = registry[pluginMap.id]; if (mod && !mod.enabled) { context.enable(pluginMap, this); } })); this.enabling = false; this.check(); }, on: function (name, cb) { var cbs = this.events[name]; if (!cbs) { cbs = this.events[name] = []; } cbs.push(cb); }, emit: function (name, evt) { each(this.events[name], function (cb) { cb(evt); }); if (name === 'error') { //Now that the error handler was triggered, remove //the listeners, since this broken Module instance //can stay around for a while in the registry/waitAry. delete this.events[name]; } } }; function callGetModule(args) { getModule(makeModuleMap(args[0], null, true)).init(args[1], args[2]); } function removeListener(node, func, name, ieName) { //Favor detachEvent because of IE9 //issue, see attachEvent/addEventListener comment elsewhere //in this file. if (node.detachEvent && !isOpera) { //Probably IE. If not it will throw an error, which will be //useful to know. if (ieName) { node.detachEvent(ieName, func); } } else { node.removeEventListener(name, func, false); } } /** * Given an event from a script node, get the requirejs info from it, * and then removes the event listeners on the node. * @param {Event} evt * @returns {Object} */ function getScriptData(evt) { //Using currentTarget instead of target for Firefox 2.0's sake. Not //all old browsers will be supported, but this one was easy enough //to support and still makes sense. var node = evt.currentTarget || evt.srcElement; //Remove the listeners once here. removeListener(node, context.onScriptLoad, 'load', 'onreadystatechange'); removeListener(node, context.onScriptError, 'error'); return { node: node, id: node && node.getAttribute('data-requiremodule') }; } return (context = { config: config, contextName: contextName, registry: registry, defined: defined, urlFetched: urlFetched, waitCount: 0, defQueue: defQueue, Module: Module, makeModuleMap: makeModuleMap, /** * Set a configuration for the context. * @param {Object} cfg config object to integrate. */ configure: function (cfg) { //Make sure the baseUrl ends in a slash. if (cfg.baseUrl) { if (cfg.baseUrl.charAt(cfg.baseUrl.length - 1) !== '/') { cfg.baseUrl += '/'; } } //Save off the paths and packages since they require special processing, //they are additive. var pkgs = config.pkgs, shim = config.shim, paths = config.paths, map = config.map; //Mix in the config values, favoring the new values over //existing ones in context.config. mixin(config, cfg, true); //Merge paths. config.paths = mixin(paths, cfg.paths, true); //Merge map if (cfg.map) { config.map = mixin(map || {}, cfg.map, true, true); } //Merge shim if (cfg.shim) { eachProp(cfg.shim, function (value, id) { //Normalize the structure if (isArray(value)) { value = { deps: value }; } if (value.exports && !value.exports.__buildReady) { value.exports = context.makeShimExports(value.exports); } shim[id] = value; }); config.shim = shim; } //Adjust packages if necessary. if (cfg.packages) { each(cfg.packages, function (pkgObj) { var location; pkgObj = typeof pkgObj === 'string' ? { name: pkgObj } : pkgObj; location = pkgObj.location; //Create a brand new object on pkgs, since currentPackages can //be passed in again, and config.pkgs is the internal transformed //state for all package configs. pkgs[pkgObj.name] = { name: pkgObj.name, location: location || pkgObj.name, //Remove leading dot in main, so main paths are normalized, //and remove any trailing .js, since different package //envs have different conventions: some use a module name, //some use a file name. main: (pkgObj.main || 'main') .replace(currDirRegExp, '') .replace(jsSuffixRegExp, '') }; }); //Done with modifications, assing packages back to context config config.pkgs = pkgs; } //If there are any "waiting to execute" modules in the registry, //update the maps for them, since their info, like URLs to load, //may have changed. eachProp(registry, function (mod, id) { //If module already has init called, since it is too //late to modify them, and ignore unnormalized ones //since they are transient. if (!mod.inited && !mod.map.unnormalized) { mod.map = makeModuleMap(id); } }); //If a deps array or a config callback is specified, then call //require with those args. This is useful when require is defined as a //config object before require.js is loaded. if (cfg.deps || cfg.callback) { context.require(cfg.deps || [], cfg.callback); } }, makeShimExports: function (exports) { var func; if (typeof exports === 'string') { func = function () { return getGlobal(exports); }; //Save the exports for use in nodefine checking. func.exports = exports; return func; } else { return function () { return exports.apply(global, arguments); }; } }, requireDefined: function (id, relMap) { return hasProp(defined, makeModuleMap(id, relMap, false, true).id); }, requireSpecified: function (id, relMap) { id = makeModuleMap(id, relMap, false, true).id; return hasProp(defined, id) || hasProp(registry, id); }, require: function (deps, callback, errback, relMap) { var moduleName, id, map, requireMod, args; if (typeof deps === 'string') { if (isFunction(callback)) { //Invalid call return onError(makeError('requireargs', 'Invalid require call'), errback); } //Synchronous access to one module. If require.get is //available (as in the Node adapter), prefer that. //In this case deps is the moduleName and callback is //the relMap if (req.get) { return req.get(context, deps, callback); } //Just return the module wanted. In this scenario, the //second arg (if passed) is just the relMap. moduleName = deps; relMap = callback; //Normalize module name, if it contains . or .. map = makeModuleMap(moduleName, relMap, false, true); id = map.id; if (!hasProp(defined, id)) { return onError(makeError('notloaded', 'Module name "' + id + '" has not been loaded yet for context: ' + contextName)); } return defined[id]; } //Callback require. Normalize args. if callback or errback is //not a function, it means it is a relMap. Test errback first. if (errback && !isFunction(errback)) { relMap = errback; errback = undefined; } if (callback && !isFunction(callback)) { relMap = callback; callback = undefined; } //Any defined modules in the global queue, intake them now. takeGlobalQueue(); //Make sure any remaining defQueue items get properly processed. while (defQueue.length) { args = defQueue.shift(); if (args[0] === null) { return onError(makeError('mismatch', 'Mismatched anonymous define() module: ' + args[args.length - 1])); } else { //args are id, deps, factory. Should be normalized by the //define() function. callGetModule(args); } } //Mark all the dependencies as needing to be loaded. requireMod = getModule(makeModuleMap(null, relMap)); requireMod.init(deps, callback, errback, { enabled: true }); checkLoaded(); return context.require; }, undef: function (id) { //Bind any waiting define() calls to this context, //fix for #408 takeGlobalQueue(); var map = makeModuleMap(id, null, true), mod = registry[id]; delete defined[id]; delete urlFetched[map.url]; delete undefEvents[id]; if (mod) { //Hold on to listeners in case the //module will be attempted to be reloaded //using a different config. if (mod.events.defined) { undefEvents[id] = mod.events; } removeWaiting(id); } }, /** * Called to enable a module if it is still in the registry * awaiting enablement. parent module is passed in for context, * used by the optimizer. */ enable: function (depMap, parent) { var mod = registry[depMap.id]; if (mod) { getModule(depMap).enable(); } }, /** * Internal method used by environment adapters to complete a load event. * A load event could be a script load or just a load pass from a synchronous * load call. * @param {String} moduleName the name of the module to potentially complete. */ completeLoad: function (moduleName) { var found, args, mod, shim = config.shim[moduleName] || {}, shExports = shim.exports && shim.exports.exports; takeGlobalQueue(); while (defQueue.length) { args = defQueue.shift(); if (args[0] === null) { args[0] = moduleName; //If already found an anonymous module and bound it //to this name, then this is some other anon module //waiting for its completeLoad to fire. if (found) { break; } found = true; } else if (args[0] === moduleName) { //Found matching define call for this script! found = true; } callGetModule(args); } //Do this after the cycle of callGetModule in case the result //of those calls/init calls changes the registry. mod = registry[moduleName]; if (!found && !defined[moduleName] && mod && !mod.inited) { if (config.enforceDefine && (!shExports || !getGlobal(shExports))) { if (hasPathFallback(moduleName)) { return; } else { return onError(makeError('nodefine', 'No define call for ' + moduleName, null, [moduleName])); } } else { //A script that does not call define(), so just simulate //the call for it. callGetModule([moduleName, (shim.deps || []), shim.exports]); } } checkLoaded(); }, /** * Converts a module name + .extension into an URL path. * *Requires* the use of a module name. It does not support using * plain URLs like nameToUrl. */ toUrl: function (moduleNamePlusExt, relModuleMap) { var index = moduleNamePlusExt.lastIndexOf('.'), ext = null; if (index !== -1) { ext = moduleNamePlusExt.substring(index, moduleNamePlusExt.length); moduleNamePlusExt = moduleNamePlusExt.substring(0, index); } return context.nameToUrl(normalize(moduleNamePlusExt, relModuleMap && relModuleMap.id, true), ext); }, /** * Converts a module name to a file path. Supports cases where * moduleName may actually be just an URL. * Note that it **does not** call normalize on the moduleName, * it is assumed to have already been normalized. This is an * internal API, not a public one. Use toUrl for the public API. */ nameToUrl: function (moduleName, ext) { var paths, pkgs, pkg, pkgPath, syms, i, parentModule, url, parentPath; //If a colon is in the URL, it indicates a protocol is used and it is just //an URL to a file, or if it starts with a slash, contains a query arg (i.e. ?) //or ends with .js, then assume the user meant to use an url and not a module id. //The slash is important for protocol-less URLs as well as full paths. if (req.jsExtRegExp.test(moduleName)) { //Just a plain path, not module name lookup, so just return it. //Add extension if it is included. This is a bit wonky, only non-.js things pass //an extension, this method probably needs to be reworked. url = moduleName + (ext || ''); } else { //A module that needs to be converted to a path. paths = config.paths; pkgs = config.pkgs; syms = moduleName.split('/'); //For each module name segment, see if there is a path //registered for it. Start with most specific name //and work up from it. for (i = syms.length; i > 0; i -= 1) { parentModule = syms.slice(0, i).join('/'); pkg = pkgs[parentModule]; parentPath = paths[parentModule]; if (parentPath) { //If an array, it means there are a few choices, //Choose the one that is desired if (isArray(parentPath)) { parentPath = parentPath[0]; } syms.splice(0, i, parentPath); break; } else if (pkg) { //If module name is just the package name, then looking //for the main module. if (moduleName === pkg.name) { pkgPath = pkg.location + '/' + pkg.main; } else { pkgPath = pkg.location; } syms.splice(0, i, pkgPath); break; } } //Join the path parts together, then figure out if baseUrl is needed. url = syms.join('/'); url += (ext || (/\?/.test(url) ? '' : '.js')); url = (url.charAt(0) === '/' || url.match(/^[\w\+\.\-]+:/) ? '' : config.baseUrl) + url; } return config.urlArgs ? url + ((url.indexOf('?') === -1 ? '?' : '&') + config.urlArgs) : url; }, //Delegates to req.load. Broken out as a separate function to //allow overriding in the optimizer. load: function (id, url) { req.load(context, id, url); }, /** * Executes a module callack function. Broken out as a separate function * solely to allow the build system to sequence the files in the built * layer in the right sequence. * * @private */ execCb: function (name, callback, args, exports) { return callback.apply(exports, args); }, /** * callback for script loads, used to check status of loading. * * @param {Event} evt the event from the browser for the script * that was loaded. */ onScriptLoad: function (evt) { //Using currentTarget instead of target for Firefox 2.0's sake. Not //all old browsers will be supported, but this one was easy enough //to support and still makes sense. if (evt.type === 'load' || (readyRegExp.test((evt.currentTarget || evt.srcElement).readyState))) { //Reset interactive script so a script node is not held onto for //to long. interactiveScript = null; //Pull out the name of the module and the context. var data = getScriptData(evt); context.completeLoad(data.id); } }, /** * Callback for script errors. */ onScriptError: function (evt) { var data = getScriptData(evt); if (!hasPathFallback(data.id)) { return onError(makeError('scripterror', 'Script error', evt, [data.id])); } } }); } /** * Main entry point. * * If the only argument to require is a string, then the module that * is represented by that string is fetched for the appropriate context. * * If the first argument is an array, then it will be treated as an array * of dependency string names to fetch. An optional function callback can * be specified to execute when all of those dependencies are available. * * Make a local req variable to help Caja compliance (it assumes things * on a require that are not standardized), and to give a short * name for minification/local scope use. */ req = requirejs = function (deps, callback, errback, optional) { //Find the right context, use default var context, config, contextName = defContextName; // Determine if have config object in the call. if (!isArray(deps) && typeof deps !== 'string') { // deps is a config object config = deps; if (isArray(callback)) { // Adjust args if there are dependencies deps = callback; callback = errback; errback = optional; } else { deps = []; } } if (config && config.context) { contextName = config.context; } context = contexts[contextName]; if (!context) { context = contexts[contextName] = req.s.newContext(contextName); } if (config) { context.configure(config); } return context.require(deps, callback, errback); }; /** * Support require.config() to make it easier to cooperate with other * AMD loaders on globally agreed names. */ req.config = function (config) { return req(config); }; /** * Export require as a global, but only if it does not already exist. */ if (!require) { require = req; } req.version = version; //Used to filter out dependencies that are already paths. req.jsExtRegExp = /^\/|:|\?|\.js$/; req.isBrowser = isBrowser; s = req.s = { contexts: contexts, newContext: newContext }; //Create default context. req({}); //Exports some context-sensitive methods on global require, using //default context if no context specified. addRequireMethods(req); if (isBrowser) { head = s.head = document.getElementsByTagName('head')[0]; //If BASE tag is in play, using appendChild is a problem for IE6. //When that browser dies, this can be removed. Details in this jQuery bug: //http://dev.jquery.com/ticket/2709 baseElement = document.getElementsByTagName('base')[0]; if (baseElement) { head = s.head = baseElement.parentNode; } } /** * Any errors that require explicitly generates will be passed to this * function. Intercept/override it if you want custom error handling. * @param {Error} err the error object. */ req.onError = function (err) { throw err; }; /** * Does the request to load a module for the browser case. * Make this a separate function to allow other environments * to override it. * * @param {Object} context the require context to find state. * @param {String} moduleName the name of the module. * @param {Object} url the URL to the module. */ req.load = function (context, moduleName, url) { var config = (context && context.config) || {}, node; if (isBrowser) { //In the browser so use a script tag node = config.xhtml ? document.createElementNS('http://www.w3.org/1999/xhtml', 'html:script') : document.createElement('script'); node.type = config.scriptType || 'text/javascript'; node.charset = 'utf-8'; node.async = true; node.setAttribute('data-requirecontext', context.contextName); node.setAttribute('data-requiremodule', moduleName); //Set up load listener. Test attachEvent first because IE9 has //a subtle issue in its addEventListener and script onload firings //that do not match the behavior of all other browsers with //addEventListener support, which fire the onload event for a //script right after the script execution. See: //https://connect.microsoft.com/IE/feedback/details/648057/script-onload-event-is-not-fired-immediately-after-script-execution //UNFORTUNATELY Opera implements attachEvent but does not follow the script //script execution mode. if (node.attachEvent && //Check if node.attachEvent is artificially added by custom script or //natively supported by browser //read https://github.com/jrburke/requirejs/issues/187 //if we can NOT find [native code] then it must NOT natively supported. //in IE8, node.attachEvent does not have toString() //Note the test for "[native code" with no closing brace, see: //https://github.com/jrburke/requirejs/issues/273 !(node.attachEvent.toString && node.attachEvent.toString().indexOf('[native code') < 0) && !isOpera) { //Probably IE. IE (at least 6-8) do not fire //script onload right after executing the script, so //we cannot tie the anonymous define call to a name. //However, IE reports the script as being in 'interactive' //readyState at the time of the define call. useInteractive = true; node.attachEvent('onreadystatechange', context.onScriptLoad); //It would be great to add an error handler here to catch //404s in IE9+. However, onreadystatechange will fire before //the error handler, so that does not help. If addEvenListener //is used, then IE will fire error before load, but we cannot //use that pathway given the connect.microsoft.com issue //mentioned above about not doing the 'script execute, //then fire the script load event listener before execute //next script' that other browsers do. //Best hope: IE10 fixes the issues, //and then destroys all installs of IE 6-9. //node.attachEvent('onerror', context.onScriptError); } else { node.addEventListener('load', context.onScriptLoad, false); node.addEventListener('error', context.onScriptError, false); } node.src = url; //For some cache cases in IE 6-8, the script executes before the end //of the appendChild execution, so to tie an anonymous define //call to the module name (which is stored on the node), hold on //to a reference to this node, but clear after the DOM insertion. currentlyAddingScript = node; if (baseElement) { head.insertBefore(node, baseElement); } else { head.appendChild(node); } currentlyAddingScript = null; return node; } else if (isWebWorker) { //In a web worker, use importScripts. This is not a very //efficient use of importScripts, importScripts will block until //its script is downloaded and evaluated. However, if web workers //are in play, the expectation that a build has been done so that //only one script needs to be loaded anyway. This may need to be //reevaluated if other use cases become common. importScripts(url); //Account for anonymous modules context.completeLoad(moduleName); } }; function getInteractiveScript() { if (interactiveScript && interactiveScript.readyState === 'interactive') { return interactiveScript; } eachReverse(scripts(), function (script) { if (script.readyState === 'interactive') { return (interactiveScript = script); } }); return interactiveScript; } //Look for a data-main script attribute, which could also adjust the baseUrl. if (isBrowser) { //Figure out baseUrl. Get it from the script tag with require.js in it. eachReverse(scripts(), function (script) { //Set the 'head' where we can append children by //using the script's parent. if (!head) { head = script.parentNode; } //Look for a data-main attribute to set main script for the page //to load. If it is there, the path to data main becomes the //baseUrl, if it is not already set. dataMain = script.getAttribute('data-main'); if (dataMain) { //Set final baseUrl if there is not already an explicit one. if (!cfg.baseUrl) { //Pull off the directory of data-main for use as the //baseUrl. src = dataMain.split('/'); mainScript = src.pop(); subPath = src.length ? src.join('/') + '/' : './'; cfg.baseUrl = subPath; dataMain = mainScript; } //Strip off any trailing .js since dataMain is now //like a module name. dataMain = dataMain.replace(jsSuffixRegExp, ''); //Put the data-main script in the files to load. cfg.deps = cfg.deps ? cfg.deps.concat(dataMain) : [dataMain]; return true; } }); } /** * The function that handles definitions of modules. Differs from * require() in that a string for the module should be the first argument, * and the function to execute after dependencies are loaded should * return a value to define the module corresponding to the first argument's * name. */ define = function (name, deps, callback) { var node, context; //Allow for anonymous functions if (typeof name !== 'string') { //Adjust args appropriately callback = deps; deps = name; name = null; } //This module may not have dependencies if (!isArray(deps)) { callback = deps; deps = []; } //If no name, and callback is a function, then figure out if it a //CommonJS thing with dependencies. if (!deps.length && isFunction(callback)) { //Remove comments from the callback string, //look for require calls, and pull them into the dependencies, //but only if there are function args. if (callback.length) { callback .toString() .replace(commentRegExp, '') .replace(cjsRequireRegExp, function (match, dep) { deps.push(dep); }); //May be a CommonJS thing even without require calls, but still //could use exports, and module. Avoid doing exports and module //work though if it just needs require. //REQUIRES the function to expect the CommonJS variables in the //order listed below. deps = (callback.length === 1 ? ['require'] : ['require', 'exports', 'module']).concat(deps); } } //If in IE 6-8 and hit an anonymous define() call, do the interactive //work. if (useInteractive) { node = currentlyAddingScript || getInteractiveScript(); if (node) { if (!name) { name = node.getAttribute('data-requiremodule'); } context = contexts[node.getAttribute('data-requirecontext')]; } } //Always save off evaluating the def call until the script onload handler. //This allows multiple modules to be in a file without prematurely //tracing dependencies, and allows for anonymous module support, //where the module name is not known until the script onload event //occurs. If no context, use the global queue, and get it processed //in the onscript load callback. (context ? context.defQueue : globalDefQueue).push([name, deps, callback]); }; define.amd = { jQuery: true }; /** * Executes the text. Normally just uses eval, but can be modified * to use a better, environment-specific call. Only used for transpiling * loader plugins, not for plain JS modules. * @param {String} text the text to execute/evaluate. */ req.exec = function (text) { /*jslint evil: true */ return eval(text); }; //Set up with config info. req(cfg); }(this)); define("requireLib", function(){}); define('main1',{ name: 'main1' }); r.js-2.3.6/build/tests/lib/requireHoist/perLayer/expectedMain2.js000066400000000000000000002351061334071220400247040ustar00rootroot00000000000000 /** vim: et:ts=4:sw=4:sts=4 * @license RequireJS 2.0.6 Copyright (c) 2010-2012, The Dojo Foundation All Rights Reserved. * Available via the MIT or new BSD license. * see: http://github.com/jrburke/requirejs for details */ //Not using strict: uneven strict support in browsers, #392, and causes //problems with requirejs.exec()/transpiler plugins that may not be strict. /*jslint regexp: true, nomen: true, sloppy: true */ /*global window, navigator, document, importScripts, jQuery, setTimeout, opera */ var requirejs, require, define; (function (global) { var req, s, head, baseElement, dataMain, src, interactiveScript, currentlyAddingScript, mainScript, subPath, version = '2.0.6', commentRegExp = /(\/\*([\s\S]*?)\*\/|([^:]|^)\/\/(.*)$)/mg, cjsRequireRegExp = /[^.]\s*require\s*\(\s*["']([^'"\s]+)["']\s*\)/g, jsSuffixRegExp = /\.js$/, currDirRegExp = /^\.\//, op = Object.prototype, ostring = op.toString, hasOwn = op.hasOwnProperty, ap = Array.prototype, aps = ap.slice, apsp = ap.splice, isBrowser = !!(typeof window !== 'undefined' && navigator && document), isWebWorker = !isBrowser && typeof importScripts !== 'undefined', //PS3 indicates loaded and complete, but need to wait for complete //specifically. Sequence is 'loading', 'loaded', execution, // then 'complete'. The UA check is unfortunate, but not sure how //to feature test w/o causing perf issues. readyRegExp = isBrowser && navigator.platform === 'PLAYSTATION 3' ? /^complete$/ : /^(complete|loaded)$/, defContextName = '_', //Oh the tragedy, detecting opera. See the usage of isOpera for reason. isOpera = typeof opera !== 'undefined' && opera.toString() === '[object Opera]', contexts = {}, cfg = {}, globalDefQueue = [], useInteractive = false; function isFunction(it) { return ostring.call(it) === '[object Function]'; } function isArray(it) { return ostring.call(it) === '[object Array]'; } /** * Helper function for iterating over an array. If the func returns * a true value, it will break out of the loop. */ function each(ary, func) { if (ary) { var i; for (i = 0; i < ary.length; i += 1) { if (ary[i] && func(ary[i], i, ary)) { break; } } } } /** * Helper function for iterating over an array backwards. If the func * returns a true value, it will break out of the loop. */ function eachReverse(ary, func) { if (ary) { var i; for (i = ary.length - 1; i > -1; i -= 1) { if (ary[i] && func(ary[i], i, ary)) { break; } } } } function hasProp(obj, prop) { return hasOwn.call(obj, prop); } /** * Cycles over properties in an object and calls a function for each * property value. If the function returns a truthy value, then the * iteration is stopped. */ function eachProp(obj, func) { var prop; for (prop in obj) { if (obj.hasOwnProperty(prop)) { if (func(obj[prop], prop)) { break; } } } } /** * Simple function to mix in properties from source into target, * but only if target does not already have a property of the same name. * This is not robust in IE for transferring methods that match * Object.prototype names, but the uses of mixin here seem unlikely to * trigger a problem related to that. */ function mixin(target, source, force, deepStringMixin) { if (source) { eachProp(source, function (value, prop) { if (force || !hasProp(target, prop)) { if (deepStringMixin && typeof value !== 'string') { if (!target[prop]) { target[prop] = {}; } mixin(target[prop], value, force, deepStringMixin); } else { target[prop] = value; } } }); } return target; } //Similar to Function.prototype.bind, but the 'this' object is specified //first, since it is easier to read/figure out what 'this' will be. function bind(obj, fn) { return function () { return fn.apply(obj, arguments); }; } function scripts() { return document.getElementsByTagName('script'); } //Allow getting a global that expressed in //dot notation, like 'a.b.c'. function getGlobal(value) { if (!value) { return value; } var g = global; each(value.split('.'), function (part) { g = g[part]; }); return g; } function makeContextModuleFunc(func, relMap, enableBuildCallback) { return function () { //A version of a require function that passes a moduleName //value for items that may need to //look up paths relative to the moduleName var args = aps.call(arguments, 0), lastArg; if (enableBuildCallback && isFunction((lastArg = args[args.length - 1]))) { lastArg.__requireJsBuild = true; } args.push(relMap); return func.apply(null, args); }; } function addRequireMethods(req, context, relMap) { each([ ['toUrl'], ['undef'], ['defined', 'requireDefined'], ['specified', 'requireSpecified'] ], function (item) { var prop = item[1] || item[0]; req[item[0]] = context ? makeContextModuleFunc(context[prop], relMap) : //If no context, then use default context. Reference from //contexts instead of early binding to default context, so //that during builds, the latest instance of the default //context with its config gets used. function () { var ctx = contexts[defContextName]; return ctx[prop].apply(ctx, arguments); }; }); } /** * Constructs an error with a pointer to an URL with more information. * @param {String} id the error ID that maps to an ID on a web page. * @param {String} message human readable error. * @param {Error} [err] the original error, if there is one. * * @returns {Error} */ function makeError(id, msg, err, requireModules) { var e = new Error(msg + '\nhttp://requirejs.org/docs/errors.html#' + id); e.requireType = id; e.requireModules = requireModules; if (err) { e.originalError = err; } return e; } if (typeof define !== 'undefined') { //If a define is already in play via another AMD loader, //do not overwrite. return; } if (typeof requirejs !== 'undefined') { if (isFunction(requirejs)) { //Do not overwrite and existing requirejs instance. return; } cfg = requirejs; requirejs = undefined; } //Allow for a require config object if (typeof require !== 'undefined' && !isFunction(require)) { //assume it is a config object. cfg = require; require = undefined; } function newContext(contextName) { var inCheckLoaded, Module, context, handlers, checkLoadedTimeoutId, config = { waitSeconds: 7, baseUrl: './', paths: {}, pkgs: {}, shim: {} }, registry = {}, undefEvents = {}, defQueue = [], defined = {}, urlFetched = {}, requireCounter = 1, unnormalizedCounter = 1, //Used to track the order in which modules //should be executed, by the order they //load. Important for consistent cycle resolution //behavior. waitAry = []; /** * Trims the . and .. from an array of path segments. * It will keep a leading path segment if a .. will become * the first path segment, to help with module name lookups, * which act like paths, but can be remapped. But the end result, * all paths that use this function should look normalized. * NOTE: this method MODIFIES the input array. * @param {Array} ary the array of path segments. */ function trimDots(ary) { var i, part; for (i = 0; ary[i]; i += 1) { part = ary[i]; if (part === '.') { ary.splice(i, 1); i -= 1; } else if (part === '..') { if (i === 1 && (ary[2] === '..' || ary[0] === '..')) { //End of the line. Keep at least one non-dot //path segment at the front so it can be mapped //correctly to disk. Otherwise, there is likely //no path mapping for a path starting with '..'. //This can still fail, but catches the most reasonable //uses of .. break; } else if (i > 0) { ary.splice(i - 1, 2); i -= 2; } } } } /** * Given a relative module name, like ./something, normalize it to * a real name that can be mapped to a path. * @param {String} name the relative name * @param {String} baseName a real name that the name arg is relative * to. * @param {Boolean} applyMap apply the map config to the value. Should * only be done if this normalization is for a dependency ID. * @returns {String} normalized name */ function normalize(name, baseName, applyMap) { var pkgName, pkgConfig, mapValue, nameParts, i, j, nameSegment, foundMap, foundI, foundStarMap, starI, baseParts = baseName && baseName.split('/'), normalizedBaseParts = baseParts, map = config.map, starMap = map && map['*']; //Adjust any relative paths. if (name && name.charAt(0) === '.') { //If have a base name, try to normalize against it, //otherwise, assume it is a top-level require that will //be relative to baseUrl in the end. if (baseName) { if (config.pkgs[baseName]) { //If the baseName is a package name, then just treat it as one //name to concat the name with. normalizedBaseParts = baseParts = [baseName]; } else { //Convert baseName to array, and lop off the last part, //so that . matches that 'directory' and not name of the baseName's //module. For instance, baseName of 'one/two/three', maps to //'one/two/three.js', but we want the directory, 'one/two' for //this normalization. normalizedBaseParts = baseParts.slice(0, baseParts.length - 1); } name = normalizedBaseParts.concat(name.split('/')); trimDots(name); //Some use of packages may use a . path to reference the //'main' module name, so normalize for that. pkgConfig = config.pkgs[(pkgName = name[0])]; name = name.join('/'); if (pkgConfig && name === pkgName + '/' + pkgConfig.main) { name = pkgName; } } else if (name.indexOf('./') === 0) { // No baseName, so this is ID is resolved relative // to baseUrl, pull off the leading dot. name = name.substring(2); } } //Apply map config if available. if (applyMap && (baseParts || starMap) && map) { nameParts = name.split('/'); for (i = nameParts.length; i > 0; i -= 1) { nameSegment = nameParts.slice(0, i).join('/'); if (baseParts) { //Find the longest baseName segment match in the config. //So, do joins on the biggest to smallest lengths of baseParts. for (j = baseParts.length; j > 0; j -= 1) { mapValue = map[baseParts.slice(0, j).join('/')]; //baseName segment has config, find if it has one for //this name. if (mapValue) { mapValue = mapValue[nameSegment]; if (mapValue) { //Match, update name to the new value. foundMap = mapValue; foundI = i; break; } } } } if (foundMap) { break; } //Check for a star map match, but just hold on to it, //if there is a shorter segment match later in a matching //config, then favor over this star map. if (!foundStarMap && starMap && starMap[nameSegment]) { foundStarMap = starMap[nameSegment]; starI = i; } } if (!foundMap && foundStarMap) { foundMap = foundStarMap; foundI = starI; } if (foundMap) { nameParts.splice(0, foundI, foundMap); name = nameParts.join('/'); } } return name; } function removeScript(name) { if (isBrowser) { each(scripts(), function (scriptNode) { if (scriptNode.getAttribute('data-requiremodule') === name && scriptNode.getAttribute('data-requirecontext') === context.contextName) { scriptNode.parentNode.removeChild(scriptNode); return true; } }); } } function hasPathFallback(id) { var pathConfig = config.paths[id]; if (pathConfig && isArray(pathConfig) && pathConfig.length > 1) { removeScript(id); //Pop off the first array value, since it failed, and //retry pathConfig.shift(); context.undef(id); context.require([id]); return true; } } /** * Creates a module mapping that includes plugin prefix, module * name, and path. If parentModuleMap is provided it will * also normalize the name via require.normalize() * * @param {String} name the module name * @param {String} [parentModuleMap] parent module map * for the module name, used to resolve relative names. * @param {Boolean} isNormalized: is the ID already normalized. * This is true if this call is done for a define() module ID. * @param {Boolean} applyMap: apply the map config to the ID. * Should only be true if this map is for a dependency. * * @returns {Object} */ function makeModuleMap(name, parentModuleMap, isNormalized, applyMap) { var url, pluginModule, suffix, index = name ? name.indexOf('!') : -1, prefix = null, parentName = parentModuleMap ? parentModuleMap.name : null, originalName = name, isDefine = true, normalizedName = ''; //If no name, then it means it is a require call, generate an //internal name. if (!name) { isDefine = false; name = '_@r' + (requireCounter += 1); } if (index !== -1) { prefix = name.substring(0, index); name = name.substring(index + 1, name.length); } if (prefix) { prefix = normalize(prefix, parentName, applyMap); pluginModule = defined[prefix]; } //Account for relative paths if there is a base name. if (name) { if (prefix) { if (pluginModule && pluginModule.normalize) { //Plugin is loaded, use its normalize method. normalizedName = pluginModule.normalize(name, function (name) { return normalize(name, parentName, applyMap); }); } else { normalizedName = normalize(name, parentName, applyMap); } } else { //A regular module. normalizedName = normalize(name, parentName, applyMap); url = context.nameToUrl(normalizedName); } } //If the id is a plugin id that cannot be determined if it needs //normalization, stamp it with a unique ID so two matching relative //ids that may conflict can be separate. suffix = prefix && !pluginModule && !isNormalized ? '_unnormalized' + (unnormalizedCounter += 1) : ''; return { prefix: prefix, name: normalizedName, parentMap: parentModuleMap, unnormalized: !!suffix, url: url, originalName: originalName, isDefine: isDefine, id: (prefix ? prefix + '!' + normalizedName : normalizedName) + suffix }; } function getModule(depMap) { var id = depMap.id, mod = registry[id]; if (!mod) { mod = registry[id] = new context.Module(depMap); } return mod; } function on(depMap, name, fn) { var id = depMap.id, mod = registry[id]; if (hasProp(defined, id) && (!mod || mod.defineEmitComplete)) { if (name === 'defined') { fn(defined[id]); } } else { getModule(depMap).on(name, fn); } } function onError(err, errback) { var ids = err.requireModules, notified = false; if (errback) { errback(err); } else { each(ids, function (id) { var mod = registry[id]; if (mod) { //Set error on module, so it skips timeout checks. mod.error = err; if (mod.events.error) { notified = true; mod.emit('error', err); } } }); if (!notified) { req.onError(err); } } } /** * Internal method to transfer globalQueue items to this context's * defQueue. */ function takeGlobalQueue() { //Push all the globalDefQueue items into the context's defQueue if (globalDefQueue.length) { //Array splice in the values since the context code has a //local var ref to defQueue, so cannot just reassign the one //on context. apsp.apply(defQueue, [defQueue.length - 1, 0].concat(globalDefQueue)); globalDefQueue = []; } } /** * Helper function that creates a require function object to give to * modules that ask for it as a dependency. It needs to be specific * per module because of the implication of path mappings that may * need to be relative to the module name. */ function makeRequire(mod, enableBuildCallback, altRequire) { var relMap = mod && mod.map, modRequire = makeContextModuleFunc(altRequire || context.require, relMap, enableBuildCallback); addRequireMethods(modRequire, context, relMap); modRequire.isBrowser = isBrowser; return modRequire; } handlers = { 'require': function (mod) { return makeRequire(mod); }, 'exports': function (mod) { mod.usingExports = true; if (mod.map.isDefine) { return (mod.exports = defined[mod.map.id] = {}); } }, 'module': function (mod) { return (mod.module = { id: mod.map.id, uri: mod.map.url, config: function () { return (config.config && config.config[mod.map.id]) || {}; }, exports: defined[mod.map.id] }); } }; function removeWaiting(id) { //Clean up machinery used for waiting modules. delete registry[id]; each(waitAry, function (mod, i) { if (mod.map.id === id) { waitAry.splice(i, 1); if (!mod.defined) { context.waitCount -= 1; } return true; } }); } function findCycle(mod, traced, processed) { var id = mod.map.id, depArray = mod.depMaps, foundModule; //Do not bother with unitialized modules or not yet enabled //modules. if (!mod.inited) { return; } //Found the cycle. if (traced[id]) { return mod; } traced[id] = true; //Trace through the dependencies. each(depArray, function (depMap) { var depId = depMap.id, depMod = registry[depId]; if (!depMod || processed[depId] || !depMod.inited || !depMod.enabled) { return; } return (foundModule = findCycle(depMod, traced, processed)); }); processed[id] = true; return foundModule; } function forceExec(mod, traced, uninited) { var id = mod.map.id, depArray = mod.depMaps; if (!mod.inited || !mod.map.isDefine) { return; } if (traced[id]) { return defined[id]; } traced[id] = mod; each(depArray, function (depMap) { var depId = depMap.id, depMod = registry[depId], value; if (handlers[depId]) { return; } if (depMod) { if (!depMod.inited || !depMod.enabled) { //Dependency is not inited, //so this module cannot be //given a forced value yet. uninited[id] = true; return; } //Get the value for the current dependency value = forceExec(depMod, traced, uninited); //Even with forcing it may not be done, //in particular if the module is waiting //on a plugin resource. if (!uninited[depId]) { mod.defineDepById(depId, value); } } }); mod.check(true); return defined[id]; } function modCheck(mod) { mod.check(); } function checkLoaded() { var map, modId, err, usingPathFallback, waitInterval = config.waitSeconds * 1000, //It is possible to disable the wait interval by using waitSeconds of 0. expired = waitInterval && (context.startTime + waitInterval) < new Date().getTime(), noLoads = [], stillLoading = false, needCycleCheck = true; //Do not bother if this call was a result of a cycle break. if (inCheckLoaded) { return; } inCheckLoaded = true; //Figure out the state of all the modules. eachProp(registry, function (mod) { map = mod.map; modId = map.id; //Skip things that are not enabled or in error state. if (!mod.enabled) { return; } if (!mod.error) { //If the module should be executed, and it has not //been inited and time is up, remember it. if (!mod.inited && expired) { if (hasPathFallback(modId)) { usingPathFallback = true; stillLoading = true; } else { noLoads.push(modId); removeScript(modId); } } else if (!mod.inited && mod.fetched && map.isDefine) { stillLoading = true; if (!map.prefix) { //No reason to keep looking for unfinished //loading. If the only stillLoading is a //plugin resource though, keep going, //because it may be that a plugin resource //is waiting on a non-plugin cycle. return (needCycleCheck = false); } } } }); if (expired && noLoads.length) { //If wait time expired, throw error of unloaded modules. err = makeError('timeout', 'Load timeout for modules: ' + noLoads, null, noLoads); err.contextName = context.contextName; return onError(err); } //Not expired, check for a cycle. if (needCycleCheck) { each(waitAry, function (mod) { if (mod.defined) { return; } var cycleMod = findCycle(mod, {}, {}), traced = {}; if (cycleMod) { forceExec(cycleMod, traced, {}); //traced modules may have been //removed from the registry, but //their listeners still need to //be called. eachProp(traced, modCheck); } }); //Now that dependencies have //been satisfied, trigger the //completion check that then //notifies listeners. eachProp(registry, modCheck); } //If still waiting on loads, and the waiting load is something //other than a plugin resource, or there are still outstanding //scripts, then just try back later. if ((!expired || usingPathFallback) && stillLoading) { //Something is still waiting to load. Wait for it, but only //if a timeout is not already in effect. if ((isBrowser || isWebWorker) && !checkLoadedTimeoutId) { checkLoadedTimeoutId = setTimeout(function () { checkLoadedTimeoutId = 0; checkLoaded(); }, 50); } } inCheckLoaded = false; } Module = function (map) { this.events = undefEvents[map.id] || {}; this.map = map; this.shim = config.shim[map.id]; this.depExports = []; this.depMaps = []; this.depMatched = []; this.pluginMaps = {}; this.depCount = 0; /* this.exports this.factory this.depMaps = [], this.enabled, this.fetched */ }; Module.prototype = { init: function (depMaps, factory, errback, options) { options = options || {}; //Do not do more inits if already done. Can happen if there //are multiple define calls for the same module. That is not //a normal, common case, but it is also not unexpected. if (this.inited) { return; } this.factory = factory; if (errback) { //Register for errors on this module. this.on('error', errback); } else if (this.events.error) { //If no errback already, but there are error listeners //on this module, set up an errback to pass to the deps. errback = bind(this, function (err) { this.emit('error', err); }); } //Do a copy of the dependency array, so that //source inputs are not modified. For example //"shim" deps are passed in here directly, and //doing a direct modification of the depMaps array //would affect that config. this.depMaps = depMaps && depMaps.slice(0); this.depMaps.rjsSkipMap = depMaps.rjsSkipMap; this.errback = errback; //Indicate this module has be initialized this.inited = true; this.ignore = options.ignore; //Could have option to init this module in enabled mode, //or could have been previously marked as enabled. However, //the dependencies are not known until init is called. So //if enabled previously, now trigger dependencies as enabled. if (options.enabled || this.enabled) { //Enable this module and dependencies. //Will call this.check() this.enable(); } else { this.check(); } }, defineDepById: function (id, depExports) { var i; //Find the index for this dependency. each(this.depMaps, function (map, index) { if (map.id === id) { i = index; return true; } }); return this.defineDep(i, depExports); }, defineDep: function (i, depExports) { //Because of cycles, defined callback for a given //export can be called more than once. if (!this.depMatched[i]) { this.depMatched[i] = true; this.depCount -= 1; this.depExports[i] = depExports; } }, fetch: function () { if (this.fetched) { return; } this.fetched = true; context.startTime = (new Date()).getTime(); var map = this.map; //If the manager is for a plugin managed resource, //ask the plugin to load it now. if (this.shim) { makeRequire(this, true)(this.shim.deps || [], bind(this, function () { return map.prefix ? this.callPlugin() : this.load(); })); } else { //Regular dependency. return map.prefix ? this.callPlugin() : this.load(); } }, load: function () { var url = this.map.url; //Regular dependency. if (!urlFetched[url]) { urlFetched[url] = true; context.load(this.map.id, url); } }, /** * Checks is the module is ready to define itself, and if so, * define it. If the silent argument is true, then it will just * define, but not notify listeners, and not ask for a context-wide * check of all loaded modules. That is useful for cycle breaking. */ check: function (silent) { if (!this.enabled || this.enabling) { return; } var err, cjsModule, id = this.map.id, depExports = this.depExports, exports = this.exports, factory = this.factory; if (!this.inited) { this.fetch(); } else if (this.error) { this.emit('error', this.error); } else if (!this.defining) { //The factory could trigger another require call //that would result in checking this module to //define itself again. If already in the process //of doing that, skip this work. this.defining = true; if (this.depCount < 1 && !this.defined) { if (isFunction(factory)) { //If there is an error listener, favor passing //to that instead of throwing an error. if (this.events.error) { try { exports = context.execCb(id, factory, depExports, exports); } catch (e) { err = e; } } else { exports = context.execCb(id, factory, depExports, exports); } if (this.map.isDefine) { //If setting exports via 'module' is in play, //favor that over return value and exports. After that, //favor a non-undefined return value over exports use. cjsModule = this.module; if (cjsModule && cjsModule.exports !== undefined && //Make sure it is not already the exports value cjsModule.exports !== this.exports) { exports = cjsModule.exports; } else if (exports === undefined && this.usingExports) { //exports already set the defined value. exports = this.exports; } } if (err) { err.requireMap = this.map; err.requireModules = [this.map.id]; err.requireType = 'define'; return onError((this.error = err)); } } else { //Just a literal value exports = factory; } this.exports = exports; if (this.map.isDefine && !this.ignore) { defined[id] = exports; if (req.onResourceLoad) { req.onResourceLoad(context, this.map, this.depMaps); } } //Clean up delete registry[id]; this.defined = true; context.waitCount -= 1; if (context.waitCount === 0) { //Clear the wait array used for cycles. waitAry = []; } } //Finished the define stage. Allow calling check again //to allow define notifications below in the case of a //cycle. this.defining = false; if (!silent) { if (this.defined && !this.defineEmitted) { this.defineEmitted = true; this.emit('defined', this.exports); this.defineEmitComplete = true; } } } }, callPlugin: function () { var map = this.map, id = map.id, pluginMap = makeModuleMap(map.prefix, null, false, true); on(pluginMap, 'defined', bind(this, function (plugin) { var load, normalizedMap, normalizedMod, name = this.map.name, parentName = this.map.parentMap ? this.map.parentMap.name : null; //If current map is not normalized, wait for that //normalized name to load instead of continuing. if (this.map.unnormalized) { //Normalize the ID if the plugin allows it. if (plugin.normalize) { name = plugin.normalize(name, function (name) { return normalize(name, parentName, true); }) || ''; } normalizedMap = makeModuleMap(map.prefix + '!' + name, this.map.parentMap, false, true); on(normalizedMap, 'defined', bind(this, function (value) { this.init([], function () { return value; }, null, { enabled: true, ignore: true }); })); normalizedMod = registry[normalizedMap.id]; if (normalizedMod) { if (this.events.error) { normalizedMod.on('error', bind(this, function (err) { this.emit('error', err); })); } normalizedMod.enable(); } return; } load = bind(this, function (value) { this.init([], function () { return value; }, null, { enabled: true }); }); load.error = bind(this, function (err) { this.inited = true; this.error = err; err.requireModules = [id]; //Remove temp unnormalized modules for this module, //since they will never be resolved otherwise now. eachProp(registry, function (mod) { if (mod.map.id.indexOf(id + '_unnormalized') === 0) { removeWaiting(mod.map.id); } }); onError(err); }); //Allow plugins to load other code without having to know the //context or how to 'complete' the load. load.fromText = function (moduleName, text) { /*jslint evil: true */ var hasInteractive = useInteractive; //Turn off interactive script matching for IE for any define //calls in the text, then turn it back on at the end. if (hasInteractive) { useInteractive = false; } //Prime the system by creating a module instance for //it. getModule(makeModuleMap(moduleName)); req.exec(text); if (hasInteractive) { useInteractive = true; } //Support anonymous modules. context.completeLoad(moduleName); }; //Use parentName here since the plugin's name is not reliable, //could be some weird string with no path that actually wants to //reference the parentName's path. plugin.load(map.name, makeRequire(map.parentMap, true, function (deps, cb, er) { deps.rjsSkipMap = true; return context.require(deps, cb, er); }), load, config); })); context.enable(pluginMap, this); this.pluginMaps[pluginMap.id] = pluginMap; }, enable: function () { this.enabled = true; if (!this.waitPushed) { waitAry.push(this); context.waitCount += 1; this.waitPushed = true; } //Set flag mentioning that the module is enabling, //so that immediate calls to the defined callbacks //for dependencies do not trigger inadvertent load //with the depCount still being zero. this.enabling = true; //Enable each dependency each(this.depMaps, bind(this, function (depMap, i) { var id, mod, handler; if (typeof depMap === 'string') { //Dependency needs to be converted to a depMap //and wired up to this module. depMap = makeModuleMap(depMap, (this.map.isDefine ? this.map : this.map.parentMap), false, !this.depMaps.rjsSkipMap); this.depMaps[i] = depMap; handler = handlers[depMap.id]; if (handler) { this.depExports[i] = handler(this); return; } this.depCount += 1; on(depMap, 'defined', bind(this, function (depExports) { this.defineDep(i, depExports); this.check(); })); if (this.errback) { on(depMap, 'error', this.errback); } } id = depMap.id; mod = registry[id]; //Skip special modules like 'require', 'exports', 'module' //Also, don't call enable if it is already enabled, //important in circular dependency cases. if (!handlers[id] && mod && !mod.enabled) { context.enable(depMap, this); } })); //Enable each plugin that is used in //a dependency eachProp(this.pluginMaps, bind(this, function (pluginMap) { var mod = registry[pluginMap.id]; if (mod && !mod.enabled) { context.enable(pluginMap, this); } })); this.enabling = false; this.check(); }, on: function (name, cb) { var cbs = this.events[name]; if (!cbs) { cbs = this.events[name] = []; } cbs.push(cb); }, emit: function (name, evt) { each(this.events[name], function (cb) { cb(evt); }); if (name === 'error') { //Now that the error handler was triggered, remove //the listeners, since this broken Module instance //can stay around for a while in the registry/waitAry. delete this.events[name]; } } }; function callGetModule(args) { getModule(makeModuleMap(args[0], null, true)).init(args[1], args[2]); } function removeListener(node, func, name, ieName) { //Favor detachEvent because of IE9 //issue, see attachEvent/addEventListener comment elsewhere //in this file. if (node.detachEvent && !isOpera) { //Probably IE. If not it will throw an error, which will be //useful to know. if (ieName) { node.detachEvent(ieName, func); } } else { node.removeEventListener(name, func, false); } } /** * Given an event from a script node, get the requirejs info from it, * and then removes the event listeners on the node. * @param {Event} evt * @returns {Object} */ function getScriptData(evt) { //Using currentTarget instead of target for Firefox 2.0's sake. Not //all old browsers will be supported, but this one was easy enough //to support and still makes sense. var node = evt.currentTarget || evt.srcElement; //Remove the listeners once here. removeListener(node, context.onScriptLoad, 'load', 'onreadystatechange'); removeListener(node, context.onScriptError, 'error'); return { node: node, id: node && node.getAttribute('data-requiremodule') }; } return (context = { config: config, contextName: contextName, registry: registry, defined: defined, urlFetched: urlFetched, waitCount: 0, defQueue: defQueue, Module: Module, makeModuleMap: makeModuleMap, /** * Set a configuration for the context. * @param {Object} cfg config object to integrate. */ configure: function (cfg) { //Make sure the baseUrl ends in a slash. if (cfg.baseUrl) { if (cfg.baseUrl.charAt(cfg.baseUrl.length - 1) !== '/') { cfg.baseUrl += '/'; } } //Save off the paths and packages since they require special processing, //they are additive. var pkgs = config.pkgs, shim = config.shim, paths = config.paths, map = config.map; //Mix in the config values, favoring the new values over //existing ones in context.config. mixin(config, cfg, true); //Merge paths. config.paths = mixin(paths, cfg.paths, true); //Merge map if (cfg.map) { config.map = mixin(map || {}, cfg.map, true, true); } //Merge shim if (cfg.shim) { eachProp(cfg.shim, function (value, id) { //Normalize the structure if (isArray(value)) { value = { deps: value }; } if (value.exports && !value.exports.__buildReady) { value.exports = context.makeShimExports(value.exports); } shim[id] = value; }); config.shim = shim; } //Adjust packages if necessary. if (cfg.packages) { each(cfg.packages, function (pkgObj) { var location; pkgObj = typeof pkgObj === 'string' ? { name: pkgObj } : pkgObj; location = pkgObj.location; //Create a brand new object on pkgs, since currentPackages can //be passed in again, and config.pkgs is the internal transformed //state for all package configs. pkgs[pkgObj.name] = { name: pkgObj.name, location: location || pkgObj.name, //Remove leading dot in main, so main paths are normalized, //and remove any trailing .js, since different package //envs have different conventions: some use a module name, //some use a file name. main: (pkgObj.main || 'main') .replace(currDirRegExp, '') .replace(jsSuffixRegExp, '') }; }); //Done with modifications, assing packages back to context config config.pkgs = pkgs; } //If there are any "waiting to execute" modules in the registry, //update the maps for them, since their info, like URLs to load, //may have changed. eachProp(registry, function (mod, id) { //If module already has init called, since it is too //late to modify them, and ignore unnormalized ones //since they are transient. if (!mod.inited && !mod.map.unnormalized) { mod.map = makeModuleMap(id); } }); //If a deps array or a config callback is specified, then call //require with those args. This is useful when require is defined as a //config object before require.js is loaded. if (cfg.deps || cfg.callback) { context.require(cfg.deps || [], cfg.callback); } }, makeShimExports: function (exports) { var func; if (typeof exports === 'string') { func = function () { return getGlobal(exports); }; //Save the exports for use in nodefine checking. func.exports = exports; return func; } else { return function () { return exports.apply(global, arguments); }; } }, requireDefined: function (id, relMap) { return hasProp(defined, makeModuleMap(id, relMap, false, true).id); }, requireSpecified: function (id, relMap) { id = makeModuleMap(id, relMap, false, true).id; return hasProp(defined, id) || hasProp(registry, id); }, require: function (deps, callback, errback, relMap) { var moduleName, id, map, requireMod, args; if (typeof deps === 'string') { if (isFunction(callback)) { //Invalid call return onError(makeError('requireargs', 'Invalid require call'), errback); } //Synchronous access to one module. If require.get is //available (as in the Node adapter), prefer that. //In this case deps is the moduleName and callback is //the relMap if (req.get) { return req.get(context, deps, callback); } //Just return the module wanted. In this scenario, the //second arg (if passed) is just the relMap. moduleName = deps; relMap = callback; //Normalize module name, if it contains . or .. map = makeModuleMap(moduleName, relMap, false, true); id = map.id; if (!hasProp(defined, id)) { return onError(makeError('notloaded', 'Module name "' + id + '" has not been loaded yet for context: ' + contextName)); } return defined[id]; } //Callback require. Normalize args. if callback or errback is //not a function, it means it is a relMap. Test errback first. if (errback && !isFunction(errback)) { relMap = errback; errback = undefined; } if (callback && !isFunction(callback)) { relMap = callback; callback = undefined; } //Any defined modules in the global queue, intake them now. takeGlobalQueue(); //Make sure any remaining defQueue items get properly processed. while (defQueue.length) { args = defQueue.shift(); if (args[0] === null) { return onError(makeError('mismatch', 'Mismatched anonymous define() module: ' + args[args.length - 1])); } else { //args are id, deps, factory. Should be normalized by the //define() function. callGetModule(args); } } //Mark all the dependencies as needing to be loaded. requireMod = getModule(makeModuleMap(null, relMap)); requireMod.init(deps, callback, errback, { enabled: true }); checkLoaded(); return context.require; }, undef: function (id) { //Bind any waiting define() calls to this context, //fix for #408 takeGlobalQueue(); var map = makeModuleMap(id, null, true), mod = registry[id]; delete defined[id]; delete urlFetched[map.url]; delete undefEvents[id]; if (mod) { //Hold on to listeners in case the //module will be attempted to be reloaded //using a different config. if (mod.events.defined) { undefEvents[id] = mod.events; } removeWaiting(id); } }, /** * Called to enable a module if it is still in the registry * awaiting enablement. parent module is passed in for context, * used by the optimizer. */ enable: function (depMap, parent) { var mod = registry[depMap.id]; if (mod) { getModule(depMap).enable(); } }, /** * Internal method used by environment adapters to complete a load event. * A load event could be a script load or just a load pass from a synchronous * load call. * @param {String} moduleName the name of the module to potentially complete. */ completeLoad: function (moduleName) { var found, args, mod, shim = config.shim[moduleName] || {}, shExports = shim.exports && shim.exports.exports; takeGlobalQueue(); while (defQueue.length) { args = defQueue.shift(); if (args[0] === null) { args[0] = moduleName; //If already found an anonymous module and bound it //to this name, then this is some other anon module //waiting for its completeLoad to fire. if (found) { break; } found = true; } else if (args[0] === moduleName) { //Found matching define call for this script! found = true; } callGetModule(args); } //Do this after the cycle of callGetModule in case the result //of those calls/init calls changes the registry. mod = registry[moduleName]; if (!found && !defined[moduleName] && mod && !mod.inited) { if (config.enforceDefine && (!shExports || !getGlobal(shExports))) { if (hasPathFallback(moduleName)) { return; } else { return onError(makeError('nodefine', 'No define call for ' + moduleName, null, [moduleName])); } } else { //A script that does not call define(), so just simulate //the call for it. callGetModule([moduleName, (shim.deps || []), shim.exports]); } } checkLoaded(); }, /** * Converts a module name + .extension into an URL path. * *Requires* the use of a module name. It does not support using * plain URLs like nameToUrl. */ toUrl: function (moduleNamePlusExt, relModuleMap) { var index = moduleNamePlusExt.lastIndexOf('.'), ext = null; if (index !== -1) { ext = moduleNamePlusExt.substring(index, moduleNamePlusExt.length); moduleNamePlusExt = moduleNamePlusExt.substring(0, index); } return context.nameToUrl(normalize(moduleNamePlusExt, relModuleMap && relModuleMap.id, true), ext); }, /** * Converts a module name to a file path. Supports cases where * moduleName may actually be just an URL. * Note that it **does not** call normalize on the moduleName, * it is assumed to have already been normalized. This is an * internal API, not a public one. Use toUrl for the public API. */ nameToUrl: function (moduleName, ext) { var paths, pkgs, pkg, pkgPath, syms, i, parentModule, url, parentPath; //If a colon is in the URL, it indicates a protocol is used and it is just //an URL to a file, or if it starts with a slash, contains a query arg (i.e. ?) //or ends with .js, then assume the user meant to use an url and not a module id. //The slash is important for protocol-less URLs as well as full paths. if (req.jsExtRegExp.test(moduleName)) { //Just a plain path, not module name lookup, so just return it. //Add extension if it is included. This is a bit wonky, only non-.js things pass //an extension, this method probably needs to be reworked. url = moduleName + (ext || ''); } else { //A module that needs to be converted to a path. paths = config.paths; pkgs = config.pkgs; syms = moduleName.split('/'); //For each module name segment, see if there is a path //registered for it. Start with most specific name //and work up from it. for (i = syms.length; i > 0; i -= 1) { parentModule = syms.slice(0, i).join('/'); pkg = pkgs[parentModule]; parentPath = paths[parentModule]; if (parentPath) { //If an array, it means there are a few choices, //Choose the one that is desired if (isArray(parentPath)) { parentPath = parentPath[0]; } syms.splice(0, i, parentPath); break; } else if (pkg) { //If module name is just the package name, then looking //for the main module. if (moduleName === pkg.name) { pkgPath = pkg.location + '/' + pkg.main; } else { pkgPath = pkg.location; } syms.splice(0, i, pkgPath); break; } } //Join the path parts together, then figure out if baseUrl is needed. url = syms.join('/'); url += (ext || (/\?/.test(url) ? '' : '.js')); url = (url.charAt(0) === '/' || url.match(/^[\w\+\.\-]+:/) ? '' : config.baseUrl) + url; } return config.urlArgs ? url + ((url.indexOf('?') === -1 ? '?' : '&') + config.urlArgs) : url; }, //Delegates to req.load. Broken out as a separate function to //allow overriding in the optimizer. load: function (id, url) { req.load(context, id, url); }, /** * Executes a module callack function. Broken out as a separate function * solely to allow the build system to sequence the files in the built * layer in the right sequence. * * @private */ execCb: function (name, callback, args, exports) { return callback.apply(exports, args); }, /** * callback for script loads, used to check status of loading. * * @param {Event} evt the event from the browser for the script * that was loaded. */ onScriptLoad: function (evt) { //Using currentTarget instead of target for Firefox 2.0's sake. Not //all old browsers will be supported, but this one was easy enough //to support and still makes sense. if (evt.type === 'load' || (readyRegExp.test((evt.currentTarget || evt.srcElement).readyState))) { //Reset interactive script so a script node is not held onto for //to long. interactiveScript = null; //Pull out the name of the module and the context. var data = getScriptData(evt); context.completeLoad(data.id); } }, /** * Callback for script errors. */ onScriptError: function (evt) { var data = getScriptData(evt); if (!hasPathFallback(data.id)) { return onError(makeError('scripterror', 'Script error', evt, [data.id])); } } }); } /** * Main entry point. * * If the only argument to require is a string, then the module that * is represented by that string is fetched for the appropriate context. * * If the first argument is an array, then it will be treated as an array * of dependency string names to fetch. An optional function callback can * be specified to execute when all of those dependencies are available. * * Make a local req variable to help Caja compliance (it assumes things * on a require that are not standardized), and to give a short * name for minification/local scope use. */ req = requirejs = function (deps, callback, errback, optional) { //Find the right context, use default var context, config, contextName = defContextName; // Determine if have config object in the call. if (!isArray(deps) && typeof deps !== 'string') { // deps is a config object config = deps; if (isArray(callback)) { // Adjust args if there are dependencies deps = callback; callback = errback; errback = optional; } else { deps = []; } } if (config && config.context) { contextName = config.context; } context = contexts[contextName]; if (!context) { context = contexts[contextName] = req.s.newContext(contextName); } if (config) { context.configure(config); } return context.require(deps, callback, errback); }; /** * Support require.config() to make it easier to cooperate with other * AMD loaders on globally agreed names. */ req.config = function (config) { return req(config); }; /** * Export require as a global, but only if it does not already exist. */ if (!require) { require = req; } req.version = version; //Used to filter out dependencies that are already paths. req.jsExtRegExp = /^\/|:|\?|\.js$/; req.isBrowser = isBrowser; s = req.s = { contexts: contexts, newContext: newContext }; //Create default context. req({}); //Exports some context-sensitive methods on global require, using //default context if no context specified. addRequireMethods(req); if (isBrowser) { head = s.head = document.getElementsByTagName('head')[0]; //If BASE tag is in play, using appendChild is a problem for IE6. //When that browser dies, this can be removed. Details in this jQuery bug: //http://dev.jquery.com/ticket/2709 baseElement = document.getElementsByTagName('base')[0]; if (baseElement) { head = s.head = baseElement.parentNode; } } /** * Any errors that require explicitly generates will be passed to this * function. Intercept/override it if you want custom error handling. * @param {Error} err the error object. */ req.onError = function (err) { throw err; }; /** * Does the request to load a module for the browser case. * Make this a separate function to allow other environments * to override it. * * @param {Object} context the require context to find state. * @param {String} moduleName the name of the module. * @param {Object} url the URL to the module. */ req.load = function (context, moduleName, url) { var config = (context && context.config) || {}, node; if (isBrowser) { //In the browser so use a script tag node = config.xhtml ? document.createElementNS('http://www.w3.org/1999/xhtml', 'html:script') : document.createElement('script'); node.type = config.scriptType || 'text/javascript'; node.charset = 'utf-8'; node.async = true; node.setAttribute('data-requirecontext', context.contextName); node.setAttribute('data-requiremodule', moduleName); //Set up load listener. Test attachEvent first because IE9 has //a subtle issue in its addEventListener and script onload firings //that do not match the behavior of all other browsers with //addEventListener support, which fire the onload event for a //script right after the script execution. See: //https://connect.microsoft.com/IE/feedback/details/648057/script-onload-event-is-not-fired-immediately-after-script-execution //UNFORTUNATELY Opera implements attachEvent but does not follow the script //script execution mode. if (node.attachEvent && //Check if node.attachEvent is artificially added by custom script or //natively supported by browser //read https://github.com/jrburke/requirejs/issues/187 //if we can NOT find [native code] then it must NOT natively supported. //in IE8, node.attachEvent does not have toString() //Note the test for "[native code" with no closing brace, see: //https://github.com/jrburke/requirejs/issues/273 !(node.attachEvent.toString && node.attachEvent.toString().indexOf('[native code') < 0) && !isOpera) { //Probably IE. IE (at least 6-8) do not fire //script onload right after executing the script, so //we cannot tie the anonymous define call to a name. //However, IE reports the script as being in 'interactive' //readyState at the time of the define call. useInteractive = true; node.attachEvent('onreadystatechange', context.onScriptLoad); //It would be great to add an error handler here to catch //404s in IE9+. However, onreadystatechange will fire before //the error handler, so that does not help. If addEvenListener //is used, then IE will fire error before load, but we cannot //use that pathway given the connect.microsoft.com issue //mentioned above about not doing the 'script execute, //then fire the script load event listener before execute //next script' that other browsers do. //Best hope: IE10 fixes the issues, //and then destroys all installs of IE 6-9. //node.attachEvent('onerror', context.onScriptError); } else { node.addEventListener('load', context.onScriptLoad, false); node.addEventListener('error', context.onScriptError, false); } node.src = url; //For some cache cases in IE 6-8, the script executes before the end //of the appendChild execution, so to tie an anonymous define //call to the module name (which is stored on the node), hold on //to a reference to this node, but clear after the DOM insertion. currentlyAddingScript = node; if (baseElement) { head.insertBefore(node, baseElement); } else { head.appendChild(node); } currentlyAddingScript = null; return node; } else if (isWebWorker) { //In a web worker, use importScripts. This is not a very //efficient use of importScripts, importScripts will block until //its script is downloaded and evaluated. However, if web workers //are in play, the expectation that a build has been done so that //only one script needs to be loaded anyway. This may need to be //reevaluated if other use cases become common. importScripts(url); //Account for anonymous modules context.completeLoad(moduleName); } }; function getInteractiveScript() { if (interactiveScript && interactiveScript.readyState === 'interactive') { return interactiveScript; } eachReverse(scripts(), function (script) { if (script.readyState === 'interactive') { return (interactiveScript = script); } }); return interactiveScript; } //Look for a data-main script attribute, which could also adjust the baseUrl. if (isBrowser) { //Figure out baseUrl. Get it from the script tag with require.js in it. eachReverse(scripts(), function (script) { //Set the 'head' where we can append children by //using the script's parent. if (!head) { head = script.parentNode; } //Look for a data-main attribute to set main script for the page //to load. If it is there, the path to data main becomes the //baseUrl, if it is not already set. dataMain = script.getAttribute('data-main'); if (dataMain) { //Set final baseUrl if there is not already an explicit one. if (!cfg.baseUrl) { //Pull off the directory of data-main for use as the //baseUrl. src = dataMain.split('/'); mainScript = src.pop(); subPath = src.length ? src.join('/') + '/' : './'; cfg.baseUrl = subPath; dataMain = mainScript; } //Strip off any trailing .js since dataMain is now //like a module name. dataMain = dataMain.replace(jsSuffixRegExp, ''); //Put the data-main script in the files to load. cfg.deps = cfg.deps ? cfg.deps.concat(dataMain) : [dataMain]; return true; } }); } /** * The function that handles definitions of modules. Differs from * require() in that a string for the module should be the first argument, * and the function to execute after dependencies are loaded should * return a value to define the module corresponding to the first argument's * name. */ define = function (name, deps, callback) { var node, context; //Allow for anonymous functions if (typeof name !== 'string') { //Adjust args appropriately callback = deps; deps = name; name = null; } //This module may not have dependencies if (!isArray(deps)) { callback = deps; deps = []; } //If no name, and callback is a function, then figure out if it a //CommonJS thing with dependencies. if (!deps.length && isFunction(callback)) { //Remove comments from the callback string, //look for require calls, and pull them into the dependencies, //but only if there are function args. if (callback.length) { callback .toString() .replace(commentRegExp, '') .replace(cjsRequireRegExp, function (match, dep) { deps.push(dep); }); //May be a CommonJS thing even without require calls, but still //could use exports, and module. Avoid doing exports and module //work though if it just needs require. //REQUIRES the function to expect the CommonJS variables in the //order listed below. deps = (callback.length === 1 ? ['require'] : ['require', 'exports', 'module']).concat(deps); } } //If in IE 6-8 and hit an anonymous define() call, do the interactive //work. if (useInteractive) { node = currentlyAddingScript || getInteractiveScript(); if (node) { if (!name) { name = node.getAttribute('data-requiremodule'); } context = contexts[node.getAttribute('data-requirecontext')]; } } //Always save off evaluating the def call until the script onload handler. //This allows multiple modules to be in a file without prematurely //tracing dependencies, and allows for anonymous module support, //where the module name is not known until the script onload event //occurs. If no context, use the global queue, and get it processed //in the onscript load callback. (context ? context.defQueue : globalDefQueue).push([name, deps, callback]); }; define.amd = { jQuery: true }; /** * Executes the text. Normally just uses eval, but can be modified * to use a better, environment-specific call. Only used for transpiling * loader plugins, not for plain JS modules. * @param {String} text the text to execute/evaluate. */ req.exec = function (text) { /*jslint evil: true */ return eval(text); }; //Set up with config info. req(cfg); }(this)); define("requireLib", function(){}); define('main2',{ name: 'main2' }); r.js-2.3.6/build/tests/lib/requireHoist/perLayer/src/000077500000000000000000000000001334071220400224365ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/requireHoist/perLayer/src/main1.js000066400000000000000000000000371334071220400240010ustar00rootroot00000000000000define({ name: 'main1' }); r.js-2.3.6/build/tests/lib/requireHoist/perLayer/src/main2.js000066400000000000000000000000371334071220400240020ustar00rootroot00000000000000define({ name: 'main2' }); r.js-2.3.6/build/tests/lib/requireHoist/perLayer/src/require.js000066400000000000000000002347701334071220400244650ustar00rootroot00000000000000/** vim: et:ts=4:sw=4:sts=4 * @license RequireJS 2.0.6 Copyright (c) 2010-2012, The Dojo Foundation All Rights Reserved. * Available via the MIT or new BSD license. * see: http://github.com/jrburke/requirejs for details */ //Not using strict: uneven strict support in browsers, #392, and causes //problems with requirejs.exec()/transpiler plugins that may not be strict. /*jslint regexp: true, nomen: true, sloppy: true */ /*global window, navigator, document, importScripts, jQuery, setTimeout, opera */ var requirejs, require, define; (function (global) { var req, s, head, baseElement, dataMain, src, interactiveScript, currentlyAddingScript, mainScript, subPath, version = '2.0.6', commentRegExp = /(\/\*([\s\S]*?)\*\/|([^:]|^)\/\/(.*)$)/mg, cjsRequireRegExp = /[^.]\s*require\s*\(\s*["']([^'"\s]+)["']\s*\)/g, jsSuffixRegExp = /\.js$/, currDirRegExp = /^\.\//, op = Object.prototype, ostring = op.toString, hasOwn = op.hasOwnProperty, ap = Array.prototype, aps = ap.slice, apsp = ap.splice, isBrowser = !!(typeof window !== 'undefined' && navigator && document), isWebWorker = !isBrowser && typeof importScripts !== 'undefined', //PS3 indicates loaded and complete, but need to wait for complete //specifically. Sequence is 'loading', 'loaded', execution, // then 'complete'. The UA check is unfortunate, but not sure how //to feature test w/o causing perf issues. readyRegExp = isBrowser && navigator.platform === 'PLAYSTATION 3' ? /^complete$/ : /^(complete|loaded)$/, defContextName = '_', //Oh the tragedy, detecting opera. See the usage of isOpera for reason. isOpera = typeof opera !== 'undefined' && opera.toString() === '[object Opera]', contexts = {}, cfg = {}, globalDefQueue = [], useInteractive = false; function isFunction(it) { return ostring.call(it) === '[object Function]'; } function isArray(it) { return ostring.call(it) === '[object Array]'; } /** * Helper function for iterating over an array. If the func returns * a true value, it will break out of the loop. */ function each(ary, func) { if (ary) { var i; for (i = 0; i < ary.length; i += 1) { if (ary[i] && func(ary[i], i, ary)) { break; } } } } /** * Helper function for iterating over an array backwards. If the func * returns a true value, it will break out of the loop. */ function eachReverse(ary, func) { if (ary) { var i; for (i = ary.length - 1; i > -1; i -= 1) { if (ary[i] && func(ary[i], i, ary)) { break; } } } } function hasProp(obj, prop) { return hasOwn.call(obj, prop); } /** * Cycles over properties in an object and calls a function for each * property value. If the function returns a truthy value, then the * iteration is stopped. */ function eachProp(obj, func) { var prop; for (prop in obj) { if (obj.hasOwnProperty(prop)) { if (func(obj[prop], prop)) { break; } } } } /** * Simple function to mix in properties from source into target, * but only if target does not already have a property of the same name. * This is not robust in IE for transferring methods that match * Object.prototype names, but the uses of mixin here seem unlikely to * trigger a problem related to that. */ function mixin(target, source, force, deepStringMixin) { if (source) { eachProp(source, function (value, prop) { if (force || !hasProp(target, prop)) { if (deepStringMixin && typeof value !== 'string') { if (!target[prop]) { target[prop] = {}; } mixin(target[prop], value, force, deepStringMixin); } else { target[prop] = value; } } }); } return target; } //Similar to Function.prototype.bind, but the 'this' object is specified //first, since it is easier to read/figure out what 'this' will be. function bind(obj, fn) { return function () { return fn.apply(obj, arguments); }; } function scripts() { return document.getElementsByTagName('script'); } //Allow getting a global that expressed in //dot notation, like 'a.b.c'. function getGlobal(value) { if (!value) { return value; } var g = global; each(value.split('.'), function (part) { g = g[part]; }); return g; } function makeContextModuleFunc(func, relMap, enableBuildCallback) { return function () { //A version of a require function that passes a moduleName //value for items that may need to //look up paths relative to the moduleName var args = aps.call(arguments, 0), lastArg; if (enableBuildCallback && isFunction((lastArg = args[args.length - 1]))) { lastArg.__requireJsBuild = true; } args.push(relMap); return func.apply(null, args); }; } function addRequireMethods(req, context, relMap) { each([ ['toUrl'], ['undef'], ['defined', 'requireDefined'], ['specified', 'requireSpecified'] ], function (item) { var prop = item[1] || item[0]; req[item[0]] = context ? makeContextModuleFunc(context[prop], relMap) : //If no context, then use default context. Reference from //contexts instead of early binding to default context, so //that during builds, the latest instance of the default //context with its config gets used. function () { var ctx = contexts[defContextName]; return ctx[prop].apply(ctx, arguments); }; }); } /** * Constructs an error with a pointer to an URL with more information. * @param {String} id the error ID that maps to an ID on a web page. * @param {String} message human readable error. * @param {Error} [err] the original error, if there is one. * * @returns {Error} */ function makeError(id, msg, err, requireModules) { var e = new Error(msg + '\nhttp://requirejs.org/docs/errors.html#' + id); e.requireType = id; e.requireModules = requireModules; if (err) { e.originalError = err; } return e; } if (typeof define !== 'undefined') { //If a define is already in play via another AMD loader, //do not overwrite. return; } if (typeof requirejs !== 'undefined') { if (isFunction(requirejs)) { //Do not overwrite and existing requirejs instance. return; } cfg = requirejs; requirejs = undefined; } //Allow for a require config object if (typeof require !== 'undefined' && !isFunction(require)) { //assume it is a config object. cfg = require; require = undefined; } function newContext(contextName) { var inCheckLoaded, Module, context, handlers, checkLoadedTimeoutId, config = { waitSeconds: 7, baseUrl: './', paths: {}, pkgs: {}, shim: {} }, registry = {}, undefEvents = {}, defQueue = [], defined = {}, urlFetched = {}, requireCounter = 1, unnormalizedCounter = 1, //Used to track the order in which modules //should be executed, by the order they //load. Important for consistent cycle resolution //behavior. waitAry = []; /** * Trims the . and .. from an array of path segments. * It will keep a leading path segment if a .. will become * the first path segment, to help with module name lookups, * which act like paths, but can be remapped. But the end result, * all paths that use this function should look normalized. * NOTE: this method MODIFIES the input array. * @param {Array} ary the array of path segments. */ function trimDots(ary) { var i, part; for (i = 0; ary[i]; i += 1) { part = ary[i]; if (part === '.') { ary.splice(i, 1); i -= 1; } else if (part === '..') { if (i === 1 && (ary[2] === '..' || ary[0] === '..')) { //End of the line. Keep at least one non-dot //path segment at the front so it can be mapped //correctly to disk. Otherwise, there is likely //no path mapping for a path starting with '..'. //This can still fail, but catches the most reasonable //uses of .. break; } else if (i > 0) { ary.splice(i - 1, 2); i -= 2; } } } } /** * Given a relative module name, like ./something, normalize it to * a real name that can be mapped to a path. * @param {String} name the relative name * @param {String} baseName a real name that the name arg is relative * to. * @param {Boolean} applyMap apply the map config to the value. Should * only be done if this normalization is for a dependency ID. * @returns {String} normalized name */ function normalize(name, baseName, applyMap) { var pkgName, pkgConfig, mapValue, nameParts, i, j, nameSegment, foundMap, foundI, foundStarMap, starI, baseParts = baseName && baseName.split('/'), normalizedBaseParts = baseParts, map = config.map, starMap = map && map['*']; //Adjust any relative paths. if (name && name.charAt(0) === '.') { //If have a base name, try to normalize against it, //otherwise, assume it is a top-level require that will //be relative to baseUrl in the end. if (baseName) { if (config.pkgs[baseName]) { //If the baseName is a package name, then just treat it as one //name to concat the name with. normalizedBaseParts = baseParts = [baseName]; } else { //Convert baseName to array, and lop off the last part, //so that . matches that 'directory' and not name of the baseName's //module. For instance, baseName of 'one/two/three', maps to //'one/two/three.js', but we want the directory, 'one/two' for //this normalization. normalizedBaseParts = baseParts.slice(0, baseParts.length - 1); } name = normalizedBaseParts.concat(name.split('/')); trimDots(name); //Some use of packages may use a . path to reference the //'main' module name, so normalize for that. pkgConfig = config.pkgs[(pkgName = name[0])]; name = name.join('/'); if (pkgConfig && name === pkgName + '/' + pkgConfig.main) { name = pkgName; } } else if (name.indexOf('./') === 0) { // No baseName, so this is ID is resolved relative // to baseUrl, pull off the leading dot. name = name.substring(2); } } //Apply map config if available. if (applyMap && (baseParts || starMap) && map) { nameParts = name.split('/'); for (i = nameParts.length; i > 0; i -= 1) { nameSegment = nameParts.slice(0, i).join('/'); if (baseParts) { //Find the longest baseName segment match in the config. //So, do joins on the biggest to smallest lengths of baseParts. for (j = baseParts.length; j > 0; j -= 1) { mapValue = map[baseParts.slice(0, j).join('/')]; //baseName segment has config, find if it has one for //this name. if (mapValue) { mapValue = mapValue[nameSegment]; if (mapValue) { //Match, update name to the new value. foundMap = mapValue; foundI = i; break; } } } } if (foundMap) { break; } //Check for a star map match, but just hold on to it, //if there is a shorter segment match later in a matching //config, then favor over this star map. if (!foundStarMap && starMap && starMap[nameSegment]) { foundStarMap = starMap[nameSegment]; starI = i; } } if (!foundMap && foundStarMap) { foundMap = foundStarMap; foundI = starI; } if (foundMap) { nameParts.splice(0, foundI, foundMap); name = nameParts.join('/'); } } return name; } function removeScript(name) { if (isBrowser) { each(scripts(), function (scriptNode) { if (scriptNode.getAttribute('data-requiremodule') === name && scriptNode.getAttribute('data-requirecontext') === context.contextName) { scriptNode.parentNode.removeChild(scriptNode); return true; } }); } } function hasPathFallback(id) { var pathConfig = config.paths[id]; if (pathConfig && isArray(pathConfig) && pathConfig.length > 1) { removeScript(id); //Pop off the first array value, since it failed, and //retry pathConfig.shift(); context.undef(id); context.require([id]); return true; } } /** * Creates a module mapping that includes plugin prefix, module * name, and path. If parentModuleMap is provided it will * also normalize the name via require.normalize() * * @param {String} name the module name * @param {String} [parentModuleMap] parent module map * for the module name, used to resolve relative names. * @param {Boolean} isNormalized: is the ID already normalized. * This is true if this call is done for a define() module ID. * @param {Boolean} applyMap: apply the map config to the ID. * Should only be true if this map is for a dependency. * * @returns {Object} */ function makeModuleMap(name, parentModuleMap, isNormalized, applyMap) { var url, pluginModule, suffix, index = name ? name.indexOf('!') : -1, prefix = null, parentName = parentModuleMap ? parentModuleMap.name : null, originalName = name, isDefine = true, normalizedName = ''; //If no name, then it means it is a require call, generate an //internal name. if (!name) { isDefine = false; name = '_@r' + (requireCounter += 1); } if (index !== -1) { prefix = name.substring(0, index); name = name.substring(index + 1, name.length); } if (prefix) { prefix = normalize(prefix, parentName, applyMap); pluginModule = defined[prefix]; } //Account for relative paths if there is a base name. if (name) { if (prefix) { if (pluginModule && pluginModule.normalize) { //Plugin is loaded, use its normalize method. normalizedName = pluginModule.normalize(name, function (name) { return normalize(name, parentName, applyMap); }); } else { normalizedName = normalize(name, parentName, applyMap); } } else { //A regular module. normalizedName = normalize(name, parentName, applyMap); url = context.nameToUrl(normalizedName); } } //If the id is a plugin id that cannot be determined if it needs //normalization, stamp it with a unique ID so two matching relative //ids that may conflict can be separate. suffix = prefix && !pluginModule && !isNormalized ? '_unnormalized' + (unnormalizedCounter += 1) : ''; return { prefix: prefix, name: normalizedName, parentMap: parentModuleMap, unnormalized: !!suffix, url: url, originalName: originalName, isDefine: isDefine, id: (prefix ? prefix + '!' + normalizedName : normalizedName) + suffix }; } function getModule(depMap) { var id = depMap.id, mod = registry[id]; if (!mod) { mod = registry[id] = new context.Module(depMap); } return mod; } function on(depMap, name, fn) { var id = depMap.id, mod = registry[id]; if (hasProp(defined, id) && (!mod || mod.defineEmitComplete)) { if (name === 'defined') { fn(defined[id]); } } else { getModule(depMap).on(name, fn); } } function onError(err, errback) { var ids = err.requireModules, notified = false; if (errback) { errback(err); } else { each(ids, function (id) { var mod = registry[id]; if (mod) { //Set error on module, so it skips timeout checks. mod.error = err; if (mod.events.error) { notified = true; mod.emit('error', err); } } }); if (!notified) { req.onError(err); } } } /** * Internal method to transfer globalQueue items to this context's * defQueue. */ function takeGlobalQueue() { //Push all the globalDefQueue items into the context's defQueue if (globalDefQueue.length) { //Array splice in the values since the context code has a //local var ref to defQueue, so cannot just reassign the one //on context. apsp.apply(defQueue, [defQueue.length - 1, 0].concat(globalDefQueue)); globalDefQueue = []; } } /** * Helper function that creates a require function object to give to * modules that ask for it as a dependency. It needs to be specific * per module because of the implication of path mappings that may * need to be relative to the module name. */ function makeRequire(mod, enableBuildCallback, altRequire) { var relMap = mod && mod.map, modRequire = makeContextModuleFunc(altRequire || context.require, relMap, enableBuildCallback); addRequireMethods(modRequire, context, relMap); modRequire.isBrowser = isBrowser; return modRequire; } handlers = { 'require': function (mod) { return makeRequire(mod); }, 'exports': function (mod) { mod.usingExports = true; if (mod.map.isDefine) { return (mod.exports = defined[mod.map.id] = {}); } }, 'module': function (mod) { return (mod.module = { id: mod.map.id, uri: mod.map.url, config: function () { return (config.config && config.config[mod.map.id]) || {}; }, exports: defined[mod.map.id] }); } }; function removeWaiting(id) { //Clean up machinery used for waiting modules. delete registry[id]; each(waitAry, function (mod, i) { if (mod.map.id === id) { waitAry.splice(i, 1); if (!mod.defined) { context.waitCount -= 1; } return true; } }); } function findCycle(mod, traced, processed) { var id = mod.map.id, depArray = mod.depMaps, foundModule; //Do not bother with unitialized modules or not yet enabled //modules. if (!mod.inited) { return; } //Found the cycle. if (traced[id]) { return mod; } traced[id] = true; //Trace through the dependencies. each(depArray, function (depMap) { var depId = depMap.id, depMod = registry[depId]; if (!depMod || processed[depId] || !depMod.inited || !depMod.enabled) { return; } return (foundModule = findCycle(depMod, traced, processed)); }); processed[id] = true; return foundModule; } function forceExec(mod, traced, uninited) { var id = mod.map.id, depArray = mod.depMaps; if (!mod.inited || !mod.map.isDefine) { return; } if (traced[id]) { return defined[id]; } traced[id] = mod; each(depArray, function (depMap) { var depId = depMap.id, depMod = registry[depId], value; if (handlers[depId]) { return; } if (depMod) { if (!depMod.inited || !depMod.enabled) { //Dependency is not inited, //so this module cannot be //given a forced value yet. uninited[id] = true; return; } //Get the value for the current dependency value = forceExec(depMod, traced, uninited); //Even with forcing it may not be done, //in particular if the module is waiting //on a plugin resource. if (!uninited[depId]) { mod.defineDepById(depId, value); } } }); mod.check(true); return defined[id]; } function modCheck(mod) { mod.check(); } function checkLoaded() { var map, modId, err, usingPathFallback, waitInterval = config.waitSeconds * 1000, //It is possible to disable the wait interval by using waitSeconds of 0. expired = waitInterval && (context.startTime + waitInterval) < new Date().getTime(), noLoads = [], stillLoading = false, needCycleCheck = true; //Do not bother if this call was a result of a cycle break. if (inCheckLoaded) { return; } inCheckLoaded = true; //Figure out the state of all the modules. eachProp(registry, function (mod) { map = mod.map; modId = map.id; //Skip things that are not enabled or in error state. if (!mod.enabled) { return; } if (!mod.error) { //If the module should be executed, and it has not //been inited and time is up, remember it. if (!mod.inited && expired) { if (hasPathFallback(modId)) { usingPathFallback = true; stillLoading = true; } else { noLoads.push(modId); removeScript(modId); } } else if (!mod.inited && mod.fetched && map.isDefine) { stillLoading = true; if (!map.prefix) { //No reason to keep looking for unfinished //loading. If the only stillLoading is a //plugin resource though, keep going, //because it may be that a plugin resource //is waiting on a non-plugin cycle. return (needCycleCheck = false); } } } }); if (expired && noLoads.length) { //If wait time expired, throw error of unloaded modules. err = makeError('timeout', 'Load timeout for modules: ' + noLoads, null, noLoads); err.contextName = context.contextName; return onError(err); } //Not expired, check for a cycle. if (needCycleCheck) { each(waitAry, function (mod) { if (mod.defined) { return; } var cycleMod = findCycle(mod, {}, {}), traced = {}; if (cycleMod) { forceExec(cycleMod, traced, {}); //traced modules may have been //removed from the registry, but //their listeners still need to //be called. eachProp(traced, modCheck); } }); //Now that dependencies have //been satisfied, trigger the //completion check that then //notifies listeners. eachProp(registry, modCheck); } //If still waiting on loads, and the waiting load is something //other than a plugin resource, or there are still outstanding //scripts, then just try back later. if ((!expired || usingPathFallback) && stillLoading) { //Something is still waiting to load. Wait for it, but only //if a timeout is not already in effect. if ((isBrowser || isWebWorker) && !checkLoadedTimeoutId) { checkLoadedTimeoutId = setTimeout(function () { checkLoadedTimeoutId = 0; checkLoaded(); }, 50); } } inCheckLoaded = false; } Module = function (map) { this.events = undefEvents[map.id] || {}; this.map = map; this.shim = config.shim[map.id]; this.depExports = []; this.depMaps = []; this.depMatched = []; this.pluginMaps = {}; this.depCount = 0; /* this.exports this.factory this.depMaps = [], this.enabled, this.fetched */ }; Module.prototype = { init: function (depMaps, factory, errback, options) { options = options || {}; //Do not do more inits if already done. Can happen if there //are multiple define calls for the same module. That is not //a normal, common case, but it is also not unexpected. if (this.inited) { return; } this.factory = factory; if (errback) { //Register for errors on this module. this.on('error', errback); } else if (this.events.error) { //If no errback already, but there are error listeners //on this module, set up an errback to pass to the deps. errback = bind(this, function (err) { this.emit('error', err); }); } //Do a copy of the dependency array, so that //source inputs are not modified. For example //"shim" deps are passed in here directly, and //doing a direct modification of the depMaps array //would affect that config. this.depMaps = depMaps && depMaps.slice(0); this.depMaps.rjsSkipMap = depMaps.rjsSkipMap; this.errback = errback; //Indicate this module has be initialized this.inited = true; this.ignore = options.ignore; //Could have option to init this module in enabled mode, //or could have been previously marked as enabled. However, //the dependencies are not known until init is called. So //if enabled previously, now trigger dependencies as enabled. if (options.enabled || this.enabled) { //Enable this module and dependencies. //Will call this.check() this.enable(); } else { this.check(); } }, defineDepById: function (id, depExports) { var i; //Find the index for this dependency. each(this.depMaps, function (map, index) { if (map.id === id) { i = index; return true; } }); return this.defineDep(i, depExports); }, defineDep: function (i, depExports) { //Because of cycles, defined callback for a given //export can be called more than once. if (!this.depMatched[i]) { this.depMatched[i] = true; this.depCount -= 1; this.depExports[i] = depExports; } }, fetch: function () { if (this.fetched) { return; } this.fetched = true; context.startTime = (new Date()).getTime(); var map = this.map; //If the manager is for a plugin managed resource, //ask the plugin to load it now. if (this.shim) { makeRequire(this, true)(this.shim.deps || [], bind(this, function () { return map.prefix ? this.callPlugin() : this.load(); })); } else { //Regular dependency. return map.prefix ? this.callPlugin() : this.load(); } }, load: function () { var url = this.map.url; //Regular dependency. if (!urlFetched[url]) { urlFetched[url] = true; context.load(this.map.id, url); } }, /** * Checks is the module is ready to define itself, and if so, * define it. If the silent argument is true, then it will just * define, but not notify listeners, and not ask for a context-wide * check of all loaded modules. That is useful for cycle breaking. */ check: function (silent) { if (!this.enabled || this.enabling) { return; } var err, cjsModule, id = this.map.id, depExports = this.depExports, exports = this.exports, factory = this.factory; if (!this.inited) { this.fetch(); } else if (this.error) { this.emit('error', this.error); } else if (!this.defining) { //The factory could trigger another require call //that would result in checking this module to //define itself again. If already in the process //of doing that, skip this work. this.defining = true; if (this.depCount < 1 && !this.defined) { if (isFunction(factory)) { //If there is an error listener, favor passing //to that instead of throwing an error. if (this.events.error) { try { exports = context.execCb(id, factory, depExports, exports); } catch (e) { err = e; } } else { exports = context.execCb(id, factory, depExports, exports); } if (this.map.isDefine) { //If setting exports via 'module' is in play, //favor that over return value and exports. After that, //favor a non-undefined return value over exports use. cjsModule = this.module; if (cjsModule && cjsModule.exports !== undefined && //Make sure it is not already the exports value cjsModule.exports !== this.exports) { exports = cjsModule.exports; } else if (exports === undefined && this.usingExports) { //exports already set the defined value. exports = this.exports; } } if (err) { err.requireMap = this.map; err.requireModules = [this.map.id]; err.requireType = 'define'; return onError((this.error = err)); } } else { //Just a literal value exports = factory; } this.exports = exports; if (this.map.isDefine && !this.ignore) { defined[id] = exports; if (req.onResourceLoad) { req.onResourceLoad(context, this.map, this.depMaps); } } //Clean up delete registry[id]; this.defined = true; context.waitCount -= 1; if (context.waitCount === 0) { //Clear the wait array used for cycles. waitAry = []; } } //Finished the define stage. Allow calling check again //to allow define notifications below in the case of a //cycle. this.defining = false; if (!silent) { if (this.defined && !this.defineEmitted) { this.defineEmitted = true; this.emit('defined', this.exports); this.defineEmitComplete = true; } } } }, callPlugin: function () { var map = this.map, id = map.id, pluginMap = makeModuleMap(map.prefix, null, false, true); on(pluginMap, 'defined', bind(this, function (plugin) { var load, normalizedMap, normalizedMod, name = this.map.name, parentName = this.map.parentMap ? this.map.parentMap.name : null; //If current map is not normalized, wait for that //normalized name to load instead of continuing. if (this.map.unnormalized) { //Normalize the ID if the plugin allows it. if (plugin.normalize) { name = plugin.normalize(name, function (name) { return normalize(name, parentName, true); }) || ''; } normalizedMap = makeModuleMap(map.prefix + '!' + name, this.map.parentMap, false, true); on(normalizedMap, 'defined', bind(this, function (value) { this.init([], function () { return value; }, null, { enabled: true, ignore: true }); })); normalizedMod = registry[normalizedMap.id]; if (normalizedMod) { if (this.events.error) { normalizedMod.on('error', bind(this, function (err) { this.emit('error', err); })); } normalizedMod.enable(); } return; } load = bind(this, function (value) { this.init([], function () { return value; }, null, { enabled: true }); }); load.error = bind(this, function (err) { this.inited = true; this.error = err; err.requireModules = [id]; //Remove temp unnormalized modules for this module, //since they will never be resolved otherwise now. eachProp(registry, function (mod) { if (mod.map.id.indexOf(id + '_unnormalized') === 0) { removeWaiting(mod.map.id); } }); onError(err); }); //Allow plugins to load other code without having to know the //context or how to 'complete' the load. load.fromText = function (moduleName, text) { /*jslint evil: true */ var hasInteractive = useInteractive; //Turn off interactive script matching for IE for any define //calls in the text, then turn it back on at the end. if (hasInteractive) { useInteractive = false; } //Prime the system by creating a module instance for //it. getModule(makeModuleMap(moduleName)); req.exec(text); if (hasInteractive) { useInteractive = true; } //Support anonymous modules. context.completeLoad(moduleName); }; //Use parentName here since the plugin's name is not reliable, //could be some weird string with no path that actually wants to //reference the parentName's path. plugin.load(map.name, makeRequire(map.parentMap, true, function (deps, cb, er) { deps.rjsSkipMap = true; return context.require(deps, cb, er); }), load, config); })); context.enable(pluginMap, this); this.pluginMaps[pluginMap.id] = pluginMap; }, enable: function () { this.enabled = true; if (!this.waitPushed) { waitAry.push(this); context.waitCount += 1; this.waitPushed = true; } //Set flag mentioning that the module is enabling, //so that immediate calls to the defined callbacks //for dependencies do not trigger inadvertent load //with the depCount still being zero. this.enabling = true; //Enable each dependency each(this.depMaps, bind(this, function (depMap, i) { var id, mod, handler; if (typeof depMap === 'string') { //Dependency needs to be converted to a depMap //and wired up to this module. depMap = makeModuleMap(depMap, (this.map.isDefine ? this.map : this.map.parentMap), false, !this.depMaps.rjsSkipMap); this.depMaps[i] = depMap; handler = handlers[depMap.id]; if (handler) { this.depExports[i] = handler(this); return; } this.depCount += 1; on(depMap, 'defined', bind(this, function (depExports) { this.defineDep(i, depExports); this.check(); })); if (this.errback) { on(depMap, 'error', this.errback); } } id = depMap.id; mod = registry[id]; //Skip special modules like 'require', 'exports', 'module' //Also, don't call enable if it is already enabled, //important in circular dependency cases. if (!handlers[id] && mod && !mod.enabled) { context.enable(depMap, this); } })); //Enable each plugin that is used in //a dependency eachProp(this.pluginMaps, bind(this, function (pluginMap) { var mod = registry[pluginMap.id]; if (mod && !mod.enabled) { context.enable(pluginMap, this); } })); this.enabling = false; this.check(); }, on: function (name, cb) { var cbs = this.events[name]; if (!cbs) { cbs = this.events[name] = []; } cbs.push(cb); }, emit: function (name, evt) { each(this.events[name], function (cb) { cb(evt); }); if (name === 'error') { //Now that the error handler was triggered, remove //the listeners, since this broken Module instance //can stay around for a while in the registry/waitAry. delete this.events[name]; } } }; function callGetModule(args) { getModule(makeModuleMap(args[0], null, true)).init(args[1], args[2]); } function removeListener(node, func, name, ieName) { //Favor detachEvent because of IE9 //issue, see attachEvent/addEventListener comment elsewhere //in this file. if (node.detachEvent && !isOpera) { //Probably IE. If not it will throw an error, which will be //useful to know. if (ieName) { node.detachEvent(ieName, func); } } else { node.removeEventListener(name, func, false); } } /** * Given an event from a script node, get the requirejs info from it, * and then removes the event listeners on the node. * @param {Event} evt * @returns {Object} */ function getScriptData(evt) { //Using currentTarget instead of target for Firefox 2.0's sake. Not //all old browsers will be supported, but this one was easy enough //to support and still makes sense. var node = evt.currentTarget || evt.srcElement; //Remove the listeners once here. removeListener(node, context.onScriptLoad, 'load', 'onreadystatechange'); removeListener(node, context.onScriptError, 'error'); return { node: node, id: node && node.getAttribute('data-requiremodule') }; } return (context = { config: config, contextName: contextName, registry: registry, defined: defined, urlFetched: urlFetched, waitCount: 0, defQueue: defQueue, Module: Module, makeModuleMap: makeModuleMap, /** * Set a configuration for the context. * @param {Object} cfg config object to integrate. */ configure: function (cfg) { //Make sure the baseUrl ends in a slash. if (cfg.baseUrl) { if (cfg.baseUrl.charAt(cfg.baseUrl.length - 1) !== '/') { cfg.baseUrl += '/'; } } //Save off the paths and packages since they require special processing, //they are additive. var pkgs = config.pkgs, shim = config.shim, paths = config.paths, map = config.map; //Mix in the config values, favoring the new values over //existing ones in context.config. mixin(config, cfg, true); //Merge paths. config.paths = mixin(paths, cfg.paths, true); //Merge map if (cfg.map) { config.map = mixin(map || {}, cfg.map, true, true); } //Merge shim if (cfg.shim) { eachProp(cfg.shim, function (value, id) { //Normalize the structure if (isArray(value)) { value = { deps: value }; } if (value.exports && !value.exports.__buildReady) { value.exports = context.makeShimExports(value.exports); } shim[id] = value; }); config.shim = shim; } //Adjust packages if necessary. if (cfg.packages) { each(cfg.packages, function (pkgObj) { var location; pkgObj = typeof pkgObj === 'string' ? { name: pkgObj } : pkgObj; location = pkgObj.location; //Create a brand new object on pkgs, since currentPackages can //be passed in again, and config.pkgs is the internal transformed //state for all package configs. pkgs[pkgObj.name] = { name: pkgObj.name, location: location || pkgObj.name, //Remove leading dot in main, so main paths are normalized, //and remove any trailing .js, since different package //envs have different conventions: some use a module name, //some use a file name. main: (pkgObj.main || 'main') .replace(currDirRegExp, '') .replace(jsSuffixRegExp, '') }; }); //Done with modifications, assing packages back to context config config.pkgs = pkgs; } //If there are any "waiting to execute" modules in the registry, //update the maps for them, since their info, like URLs to load, //may have changed. eachProp(registry, function (mod, id) { //If module already has init called, since it is too //late to modify them, and ignore unnormalized ones //since they are transient. if (!mod.inited && !mod.map.unnormalized) { mod.map = makeModuleMap(id); } }); //If a deps array or a config callback is specified, then call //require with those args. This is useful when require is defined as a //config object before require.js is loaded. if (cfg.deps || cfg.callback) { context.require(cfg.deps || [], cfg.callback); } }, makeShimExports: function (exports) { var func; if (typeof exports === 'string') { func = function () { return getGlobal(exports); }; //Save the exports for use in nodefine checking. func.exports = exports; return func; } else { return function () { return exports.apply(global, arguments); }; } }, requireDefined: function (id, relMap) { return hasProp(defined, makeModuleMap(id, relMap, false, true).id); }, requireSpecified: function (id, relMap) { id = makeModuleMap(id, relMap, false, true).id; return hasProp(defined, id) || hasProp(registry, id); }, require: function (deps, callback, errback, relMap) { var moduleName, id, map, requireMod, args; if (typeof deps === 'string') { if (isFunction(callback)) { //Invalid call return onError(makeError('requireargs', 'Invalid require call'), errback); } //Synchronous access to one module. If require.get is //available (as in the Node adapter), prefer that. //In this case deps is the moduleName and callback is //the relMap if (req.get) { return req.get(context, deps, callback); } //Just return the module wanted. In this scenario, the //second arg (if passed) is just the relMap. moduleName = deps; relMap = callback; //Normalize module name, if it contains . or .. map = makeModuleMap(moduleName, relMap, false, true); id = map.id; if (!hasProp(defined, id)) { return onError(makeError('notloaded', 'Module name "' + id + '" has not been loaded yet for context: ' + contextName)); } return defined[id]; } //Callback require. Normalize args. if callback or errback is //not a function, it means it is a relMap. Test errback first. if (errback && !isFunction(errback)) { relMap = errback; errback = undefined; } if (callback && !isFunction(callback)) { relMap = callback; callback = undefined; } //Any defined modules in the global queue, intake them now. takeGlobalQueue(); //Make sure any remaining defQueue items get properly processed. while (defQueue.length) { args = defQueue.shift(); if (args[0] === null) { return onError(makeError('mismatch', 'Mismatched anonymous define() module: ' + args[args.length - 1])); } else { //args are id, deps, factory. Should be normalized by the //define() function. callGetModule(args); } } //Mark all the dependencies as needing to be loaded. requireMod = getModule(makeModuleMap(null, relMap)); requireMod.init(deps, callback, errback, { enabled: true }); checkLoaded(); return context.require; }, undef: function (id) { //Bind any waiting define() calls to this context, //fix for #408 takeGlobalQueue(); var map = makeModuleMap(id, null, true), mod = registry[id]; delete defined[id]; delete urlFetched[map.url]; delete undefEvents[id]; if (mod) { //Hold on to listeners in case the //module will be attempted to be reloaded //using a different config. if (mod.events.defined) { undefEvents[id] = mod.events; } removeWaiting(id); } }, /** * Called to enable a module if it is still in the registry * awaiting enablement. parent module is passed in for context, * used by the optimizer. */ enable: function (depMap, parent) { var mod = registry[depMap.id]; if (mod) { getModule(depMap).enable(); } }, /** * Internal method used by environment adapters to complete a load event. * A load event could be a script load or just a load pass from a synchronous * load call. * @param {String} moduleName the name of the module to potentially complete. */ completeLoad: function (moduleName) { var found, args, mod, shim = config.shim[moduleName] || {}, shExports = shim.exports && shim.exports.exports; takeGlobalQueue(); while (defQueue.length) { args = defQueue.shift(); if (args[0] === null) { args[0] = moduleName; //If already found an anonymous module and bound it //to this name, then this is some other anon module //waiting for its completeLoad to fire. if (found) { break; } found = true; } else if (args[0] === moduleName) { //Found matching define call for this script! found = true; } callGetModule(args); } //Do this after the cycle of callGetModule in case the result //of those calls/init calls changes the registry. mod = registry[moduleName]; if (!found && !defined[moduleName] && mod && !mod.inited) { if (config.enforceDefine && (!shExports || !getGlobal(shExports))) { if (hasPathFallback(moduleName)) { return; } else { return onError(makeError('nodefine', 'No define call for ' + moduleName, null, [moduleName])); } } else { //A script that does not call define(), so just simulate //the call for it. callGetModule([moduleName, (shim.deps || []), shim.exports]); } } checkLoaded(); }, /** * Converts a module name + .extension into an URL path. * *Requires* the use of a module name. It does not support using * plain URLs like nameToUrl. */ toUrl: function (moduleNamePlusExt, relModuleMap) { var index = moduleNamePlusExt.lastIndexOf('.'), ext = null; if (index !== -1) { ext = moduleNamePlusExt.substring(index, moduleNamePlusExt.length); moduleNamePlusExt = moduleNamePlusExt.substring(0, index); } return context.nameToUrl(normalize(moduleNamePlusExt, relModuleMap && relModuleMap.id, true), ext); }, /** * Converts a module name to a file path. Supports cases where * moduleName may actually be just an URL. * Note that it **does not** call normalize on the moduleName, * it is assumed to have already been normalized. This is an * internal API, not a public one. Use toUrl for the public API. */ nameToUrl: function (moduleName, ext) { var paths, pkgs, pkg, pkgPath, syms, i, parentModule, url, parentPath; //If a colon is in the URL, it indicates a protocol is used and it is just //an URL to a file, or if it starts with a slash, contains a query arg (i.e. ?) //or ends with .js, then assume the user meant to use an url and not a module id. //The slash is important for protocol-less URLs as well as full paths. if (req.jsExtRegExp.test(moduleName)) { //Just a plain path, not module name lookup, so just return it. //Add extension if it is included. This is a bit wonky, only non-.js things pass //an extension, this method probably needs to be reworked. url = moduleName + (ext || ''); } else { //A module that needs to be converted to a path. paths = config.paths; pkgs = config.pkgs; syms = moduleName.split('/'); //For each module name segment, see if there is a path //registered for it. Start with most specific name //and work up from it. for (i = syms.length; i > 0; i -= 1) { parentModule = syms.slice(0, i).join('/'); pkg = pkgs[parentModule]; parentPath = paths[parentModule]; if (parentPath) { //If an array, it means there are a few choices, //Choose the one that is desired if (isArray(parentPath)) { parentPath = parentPath[0]; } syms.splice(0, i, parentPath); break; } else if (pkg) { //If module name is just the package name, then looking //for the main module. if (moduleName === pkg.name) { pkgPath = pkg.location + '/' + pkg.main; } else { pkgPath = pkg.location; } syms.splice(0, i, pkgPath); break; } } //Join the path parts together, then figure out if baseUrl is needed. url = syms.join('/'); url += (ext || (/\?/.test(url) ? '' : '.js')); url = (url.charAt(0) === '/' || url.match(/^[\w\+\.\-]+:/) ? '' : config.baseUrl) + url; } return config.urlArgs ? url + ((url.indexOf('?') === -1 ? '?' : '&') + config.urlArgs) : url; }, //Delegates to req.load. Broken out as a separate function to //allow overriding in the optimizer. load: function (id, url) { req.load(context, id, url); }, /** * Executes a module callack function. Broken out as a separate function * solely to allow the build system to sequence the files in the built * layer in the right sequence. * * @private */ execCb: function (name, callback, args, exports) { return callback.apply(exports, args); }, /** * callback for script loads, used to check status of loading. * * @param {Event} evt the event from the browser for the script * that was loaded. */ onScriptLoad: function (evt) { //Using currentTarget instead of target for Firefox 2.0's sake. Not //all old browsers will be supported, but this one was easy enough //to support and still makes sense. if (evt.type === 'load' || (readyRegExp.test((evt.currentTarget || evt.srcElement).readyState))) { //Reset interactive script so a script node is not held onto for //to long. interactiveScript = null; //Pull out the name of the module and the context. var data = getScriptData(evt); context.completeLoad(data.id); } }, /** * Callback for script errors. */ onScriptError: function (evt) { var data = getScriptData(evt); if (!hasPathFallback(data.id)) { return onError(makeError('scripterror', 'Script error', evt, [data.id])); } } }); } /** * Main entry point. * * If the only argument to require is a string, then the module that * is represented by that string is fetched for the appropriate context. * * If the first argument is an array, then it will be treated as an array * of dependency string names to fetch. An optional function callback can * be specified to execute when all of those dependencies are available. * * Make a local req variable to help Caja compliance (it assumes things * on a require that are not standardized), and to give a short * name for minification/local scope use. */ req = requirejs = function (deps, callback, errback, optional) { //Find the right context, use default var context, config, contextName = defContextName; // Determine if have config object in the call. if (!isArray(deps) && typeof deps !== 'string') { // deps is a config object config = deps; if (isArray(callback)) { // Adjust args if there are dependencies deps = callback; callback = errback; errback = optional; } else { deps = []; } } if (config && config.context) { contextName = config.context; } context = contexts[contextName]; if (!context) { context = contexts[contextName] = req.s.newContext(contextName); } if (config) { context.configure(config); } return context.require(deps, callback, errback); }; /** * Support require.config() to make it easier to cooperate with other * AMD loaders on globally agreed names. */ req.config = function (config) { return req(config); }; /** * Export require as a global, but only if it does not already exist. */ if (!require) { require = req; } req.version = version; //Used to filter out dependencies that are already paths. req.jsExtRegExp = /^\/|:|\?|\.js$/; req.isBrowser = isBrowser; s = req.s = { contexts: contexts, newContext: newContext }; //Create default context. req({}); //Exports some context-sensitive methods on global require, using //default context if no context specified. addRequireMethods(req); if (isBrowser) { head = s.head = document.getElementsByTagName('head')[0]; //If BASE tag is in play, using appendChild is a problem for IE6. //When that browser dies, this can be removed. Details in this jQuery bug: //http://dev.jquery.com/ticket/2709 baseElement = document.getElementsByTagName('base')[0]; if (baseElement) { head = s.head = baseElement.parentNode; } } /** * Any errors that require explicitly generates will be passed to this * function. Intercept/override it if you want custom error handling. * @param {Error} err the error object. */ req.onError = function (err) { throw err; }; /** * Does the request to load a module for the browser case. * Make this a separate function to allow other environments * to override it. * * @param {Object} context the require context to find state. * @param {String} moduleName the name of the module. * @param {Object} url the URL to the module. */ req.load = function (context, moduleName, url) { var config = (context && context.config) || {}, node; if (isBrowser) { //In the browser so use a script tag node = config.xhtml ? document.createElementNS('http://www.w3.org/1999/xhtml', 'html:script') : document.createElement('script'); node.type = config.scriptType || 'text/javascript'; node.charset = 'utf-8'; node.async = true; node.setAttribute('data-requirecontext', context.contextName); node.setAttribute('data-requiremodule', moduleName); //Set up load listener. Test attachEvent first because IE9 has //a subtle issue in its addEventListener and script onload firings //that do not match the behavior of all other browsers with //addEventListener support, which fire the onload event for a //script right after the script execution. See: //https://connect.microsoft.com/IE/feedback/details/648057/script-onload-event-is-not-fired-immediately-after-script-execution //UNFORTUNATELY Opera implements attachEvent but does not follow the script //script execution mode. if (node.attachEvent && //Check if node.attachEvent is artificially added by custom script or //natively supported by browser //read https://github.com/jrburke/requirejs/issues/187 //if we can NOT find [native code] then it must NOT natively supported. //in IE8, node.attachEvent does not have toString() //Note the test for "[native code" with no closing brace, see: //https://github.com/jrburke/requirejs/issues/273 !(node.attachEvent.toString && node.attachEvent.toString().indexOf('[native code') < 0) && !isOpera) { //Probably IE. IE (at least 6-8) do not fire //script onload right after executing the script, so //we cannot tie the anonymous define call to a name. //However, IE reports the script as being in 'interactive' //readyState at the time of the define call. useInteractive = true; node.attachEvent('onreadystatechange', context.onScriptLoad); //It would be great to add an error handler here to catch //404s in IE9+. However, onreadystatechange will fire before //the error handler, so that does not help. If addEvenListener //is used, then IE will fire error before load, but we cannot //use that pathway given the connect.microsoft.com issue //mentioned above about not doing the 'script execute, //then fire the script load event listener before execute //next script' that other browsers do. //Best hope: IE10 fixes the issues, //and then destroys all installs of IE 6-9. //node.attachEvent('onerror', context.onScriptError); } else { node.addEventListener('load', context.onScriptLoad, false); node.addEventListener('error', context.onScriptError, false); } node.src = url; //For some cache cases in IE 6-8, the script executes before the end //of the appendChild execution, so to tie an anonymous define //call to the module name (which is stored on the node), hold on //to a reference to this node, but clear after the DOM insertion. currentlyAddingScript = node; if (baseElement) { head.insertBefore(node, baseElement); } else { head.appendChild(node); } currentlyAddingScript = null; return node; } else if (isWebWorker) { //In a web worker, use importScripts. This is not a very //efficient use of importScripts, importScripts will block until //its script is downloaded and evaluated. However, if web workers //are in play, the expectation that a build has been done so that //only one script needs to be loaded anyway. This may need to be //reevaluated if other use cases become common. importScripts(url); //Account for anonymous modules context.completeLoad(moduleName); } }; function getInteractiveScript() { if (interactiveScript && interactiveScript.readyState === 'interactive') { return interactiveScript; } eachReverse(scripts(), function (script) { if (script.readyState === 'interactive') { return (interactiveScript = script); } }); return interactiveScript; } //Look for a data-main script attribute, which could also adjust the baseUrl. if (isBrowser) { //Figure out baseUrl. Get it from the script tag with require.js in it. eachReverse(scripts(), function (script) { //Set the 'head' where we can append children by //using the script's parent. if (!head) { head = script.parentNode; } //Look for a data-main attribute to set main script for the page //to load. If it is there, the path to data main becomes the //baseUrl, if it is not already set. dataMain = script.getAttribute('data-main'); if (dataMain) { //Set final baseUrl if there is not already an explicit one. if (!cfg.baseUrl) { //Pull off the directory of data-main for use as the //baseUrl. src = dataMain.split('/'); mainScript = src.pop(); subPath = src.length ? src.join('/') + '/' : './'; cfg.baseUrl = subPath; dataMain = mainScript; } //Strip off any trailing .js since dataMain is now //like a module name. dataMain = dataMain.replace(jsSuffixRegExp, ''); //Put the data-main script in the files to load. cfg.deps = cfg.deps ? cfg.deps.concat(dataMain) : [dataMain]; return true; } }); } /** * The function that handles definitions of modules. Differs from * require() in that a string for the module should be the first argument, * and the function to execute after dependencies are loaded should * return a value to define the module corresponding to the first argument's * name. */ define = function (name, deps, callback) { var node, context; //Allow for anonymous functions if (typeof name !== 'string') { //Adjust args appropriately callback = deps; deps = name; name = null; } //This module may not have dependencies if (!isArray(deps)) { callback = deps; deps = []; } //If no name, and callback is a function, then figure out if it a //CommonJS thing with dependencies. if (!deps.length && isFunction(callback)) { //Remove comments from the callback string, //look for require calls, and pull them into the dependencies, //but only if there are function args. if (callback.length) { callback .toString() .replace(commentRegExp, '') .replace(cjsRequireRegExp, function (match, dep) { deps.push(dep); }); //May be a CommonJS thing even without require calls, but still //could use exports, and module. Avoid doing exports and module //work though if it just needs require. //REQUIRES the function to expect the CommonJS variables in the //order listed below. deps = (callback.length === 1 ? ['require'] : ['require', 'exports', 'module']).concat(deps); } } //If in IE 6-8 and hit an anonymous define() call, do the interactive //work. if (useInteractive) { node = currentlyAddingScript || getInteractiveScript(); if (node) { if (!name) { name = node.getAttribute('data-requiremodule'); } context = contexts[node.getAttribute('data-requirecontext')]; } } //Always save off evaluating the def call until the script onload handler. //This allows multiple modules to be in a file without prematurely //tracing dependencies, and allows for anonymous module support, //where the module name is not known until the script onload event //occurs. If no context, use the global queue, and get it processed //in the onscript load callback. (context ? context.defQueue : globalDefQueue).push([name, deps, callback]); }; define.amd = { jQuery: true }; /** * Executes the text. Normally just uses eval, but can be modified * to use a better, environment-specific call. Only used for transpiling * loader plugins, not for plain JS modules. * @param {String} text the text to execute/evaluate. */ req.exec = function (text) { /*jslint evil: true */ return eval(text); }; //Set up with config info. req(cfg); }(this)); r.js-2.3.6/build/tests/lib/rhino-186/000077500000000000000000000000001334071220400170345ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/rhino-186/app.build.js000066400000000000000000000002551334071220400212520ustar00rootroot00000000000000({ appDir: 'path/to/dir', baseUrl: './', dir: 'built', optimize: 'none', name: 'main', paths: { 'text': '../../lib/requirejs/text' } }) r.js-2.3.6/build/tests/lib/rhino-186/expected.js000066400000000000000000000350501334071220400211760ustar00rootroot00000000000000/** * @license RequireJS text 2.0.6 Copyright (c) 2010-2012, The Dojo Foundation All Rights Reserved. * Available via the MIT or new BSD license. * see: http://github.com/requirejs/text for details */ /*jslint regexp: true */ /*global require, XMLHttpRequest, ActiveXObject, define, window, process, Packages, java, location, Components, FileUtils */ define('text',['module'], function (module) { 'use strict'; var text, fs, Cc, Ci, progIds = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0'], xmlRegExp = /^\s*<\?xml(\s)+version=[\'\"](\d)*.(\d)*[\'\"](\s)*\?>/im, bodyRegExp = /]*>\s*([\s\S]+)\s*<\/body>/im, hasLocation = typeof location !== 'undefined' && location.href, defaultProtocol = hasLocation && location.protocol && location.protocol.replace(/\:/, ''), defaultHostName = hasLocation && location.hostname, defaultPort = hasLocation && (location.port || undefined), buildMap = [], masterConfig = (module.config && module.config()) || {}; text = { version: '2.0.6', strip: function (content) { //Strips declarations so that external SVG and XML //documents can be added to a document without worry. Also, if the string //is an HTML document, only the part inside the body tag is returned. if (content) { content = content.replace(xmlRegExp, ""); var matches = content.match(bodyRegExp); if (matches) { content = matches[1]; } } else { content = ""; } return content; }, jsEscape: function (content) { return content.replace(/(['\\])/g, '\\$1') .replace(/[\f]/g, "\\f") .replace(/[\b]/g, "\\b") .replace(/[\n]/g, "\\n") .replace(/[\t]/g, "\\t") .replace(/[\r]/g, "\\r") .replace(/[\u2028]/g, "\\u2028") .replace(/[\u2029]/g, "\\u2029"); }, createXhr: masterConfig.createXhr || function () { //Would love to dump the ActiveX crap in here. Need IE 6 to die first. var xhr, i, progId; if (typeof XMLHttpRequest !== "undefined") { return new XMLHttpRequest(); } else if (typeof ActiveXObject !== "undefined") { for (i = 0; i < 3; i += 1) { progId = progIds[i]; try { xhr = new ActiveXObject(progId); } catch (e) {} if (xhr) { progIds = [progId]; // so faster next time break; } } } return xhr; }, /** * Parses a resource name into its component parts. Resource names * look like: module/name.ext!strip, where the !strip part is * optional. * @param {String} name the resource name * @returns {Object} with properties "moduleName", "ext" and "strip" * where strip is a boolean. */ parseName: function (name) { var modName, ext, temp, strip = false, index = name.indexOf("."), isRelative = name.indexOf('./') === 0 || name.indexOf('../') === 0; if (index !== -1 && (!isRelative || index > 1)) { modName = name.substring(0, index); ext = name.substring(index + 1, name.length); } else { modName = name; } temp = ext || modName; index = temp.indexOf("!"); if (index !== -1) { //Pull off the strip arg. strip = temp.substring(index + 1) === "strip"; temp = temp.substring(0, index); if (ext) { ext = temp; } else { modName = temp; } } return { moduleName: modName, ext: ext, strip: strip }; }, xdRegExp: /^((\w+)\:)?\/\/([^\/\\]+)/, /** * Is an URL on another domain. Only works for browser use, returns * false in non-browser environments. Only used to know if an * optimized .js version of a text resource should be loaded * instead. * @param {String} url * @returns Boolean */ useXhr: function (url, protocol, hostname, port) { var uProtocol, uHostName, uPort, match = text.xdRegExp.exec(url); if (!match) { return true; } uProtocol = match[2]; uHostName = match[3]; uHostName = uHostName.split(':'); uPort = uHostName[1]; uHostName = uHostName[0]; return (!uProtocol || uProtocol === protocol) && (!uHostName || uHostName.toLowerCase() === hostname.toLowerCase()) && ((!uPort && !uHostName) || uPort === port); }, finishLoad: function (name, strip, content, onLoad) { content = strip ? text.strip(content) : content; if (masterConfig.isBuild) { buildMap[name] = content; } onLoad(content); }, load: function (name, req, onLoad, config) { //Name has format: some.module.filext!strip //The strip part is optional. //if strip is present, then that means only get the string contents //inside a body tag in an HTML string. For XML/SVG content it means //removing the declarations so the content can be inserted //into the current doc without problems. // Do not bother with the work if a build and text will // not be inlined. if (config.isBuild && !config.inlineText) { onLoad(); return; } masterConfig.isBuild = config.isBuild; var parsed = text.parseName(name), nonStripName = parsed.moduleName + (parsed.ext ? '.' + parsed.ext : ''), url = req.toUrl(nonStripName), useXhr = (masterConfig.useXhr) || text.useXhr; //Load the text. Use XHR if possible and in a browser. if (!hasLocation || useXhr(url, defaultProtocol, defaultHostName, defaultPort)) { text.get(url, function (content) { text.finishLoad(name, parsed.strip, content, onLoad); }, function (err) { if (onLoad.error) { onLoad.error(err); } }); } else { //Need to fetch the resource across domains. Assume //the resource has been optimized into a JS module. Fetch //by the module name + extension, but do not include the //!strip part to avoid file system issues. req([nonStripName], function (content) { text.finishLoad(parsed.moduleName + '.' + parsed.ext, parsed.strip, content, onLoad); }); } }, write: function (pluginName, moduleName, write, config) { if (buildMap.hasOwnProperty(moduleName)) { var content = text.jsEscape(buildMap[moduleName]); write.asModule(pluginName + "!" + moduleName, "define(function () { return '" + content + "';});\n"); } }, writeFile: function (pluginName, moduleName, req, write, config) { var parsed = text.parseName(moduleName), extPart = parsed.ext ? '.' + parsed.ext : '', nonStripName = parsed.moduleName + extPart, //Use a '.js' file name so that it indicates it is a //script that can be loaded across domains. fileName = req.toUrl(parsed.moduleName + extPart) + '.js'; //Leverage own load() method to load plugin value, but only //write out values that do not have the strip argument, //to avoid any potential issues with ! in file names. text.load(nonStripName, req, function (value) { //Use own write() method to construct full module value. //But need to create shell that translates writeFile's //write() to the right interface. var textWrite = function (contents) { return write(fileName, contents); }; textWrite.asModule = function (moduleName, contents) { return write.asModule(moduleName, fileName, contents); }; text.write(pluginName, nonStripName, textWrite, config); }, config); } }; if (masterConfig.env === 'node' || (!masterConfig.env && typeof process !== "undefined" && process.versions && !!process.versions.node)) { //Using special require.nodeRequire, something added by r.js. fs = require.nodeRequire('fs'); text.get = function (url, callback) { var file = fs.readFileSync(url, 'utf8'); //Remove BOM (Byte Mark Order) from utf8 files if it is there. if (file.indexOf('\uFEFF') === 0) { file = file.substring(1); } callback(file); }; } else if (masterConfig.env === 'xhr' || (!masterConfig.env && text.createXhr())) { text.get = function (url, callback, errback, headers) { var xhr = text.createXhr(), header; xhr.open('GET', url, true); //Allow plugins direct access to xhr headers if (headers) { for (header in headers) { if (headers.hasOwnProperty(header)) { xhr.setRequestHeader(header.toLowerCase(), headers[header]); } } } //Allow overrides specified in config if (masterConfig.onXhr) { masterConfig.onXhr(xhr, url); } xhr.onreadystatechange = function (evt) { var status, err; //Do not explicitly handle errors, those should be //visible via console output in the browser. if (xhr.readyState === 4) { status = xhr.status; if (status > 399 && status < 600) { //An http 4xx or 5xx error. Signal an error. err = new Error(url + ' HTTP status: ' + status); err.xhr = xhr; errback(err); } else { callback(xhr.responseText); } } }; xhr.send(null); }; } else if (masterConfig.env === 'rhino' || (!masterConfig.env && typeof Packages !== 'undefined' && typeof java !== 'undefined')) { //Why Java, why is this so awkward? text.get = function (url, callback) { var stringBuffer, line, encoding = "utf-8", file = new java.io.File(url), lineSeparator = java.lang.System.getProperty("line.separator"), input = new java.io.BufferedReader(new java.io.InputStreamReader(new java.io.FileInputStream(file), encoding)), content = ''; try { stringBuffer = new java.lang.StringBuffer(); line = input.readLine(); // Byte Order Mark (BOM) - The Unicode Standard, version 3.0, page 324 // http://www.unicode.org/faq/utf_bom.html // Note that when we use utf-8, the BOM should appear as "EF BB BF", but it doesn't due to this bug in the JDK: // http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4508058 if (line && line.length() && line.charAt(0) === 0xfeff) { // Eat the BOM, since we've already found the encoding on this file, // and we plan to concatenating this buffer with others; the BOM should // only appear at the top of a file. line = line.substring(1); } stringBuffer.append(line); while ((line = input.readLine()) !== null) { stringBuffer.append(lineSeparator); stringBuffer.append(line); } //Make sure we return a JavaScript string and not a Java string. content = String(stringBuffer.toString()); //String } finally { input.close(); } callback(content); }; } else if (masterConfig.env === 'xpconnect' || (!masterConfig.env && typeof Components !== 'undefined' && Components.classes && Components.interfaces)) { //Avert your gaze! Cc = Components.classes, Ci = Components.interfaces; Components.utils['import']('resource://gre/modules/FileUtils.jsm'); text.get = function (url, callback) { var inStream, convertStream, readData = {}, fileObj = new FileUtils.File(url); //XPCOM, you so crazy try { inStream = Cc['@mozilla.org/network/file-input-stream;1'] .createInstance(Ci.nsIFileInputStream); inStream.init(fileObj, 1, 0, false); convertStream = Cc['@mozilla.org/intl/converter-input-stream;1'] .createInstance(Ci.nsIConverterInputStream); convertStream.init(inStream, "utf-8", inStream.available(), Ci.nsIConverterInputStream.DEFAULT_REPLACEMENT_CHARACTER); convertStream.readString(inStream.available(), readData); convertStream.close(); inStream.close(); callback(readData.value); } catch (e) { throw new Error((fileObj && fileObj.path || '') + ': ' + e); } }; } return text; }); define('text!sample.txt',[],function () { return 'sample';}); define('main',['text!sample.txt'], function (sampleText) {}); r.js-2.3.6/build/tests/lib/rhino-186/path/000077500000000000000000000000001334071220400177705ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/rhino-186/path/lib/000077500000000000000000000000001334071220400205365ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/rhino-186/path/lib/requirejs/000077500000000000000000000000001334071220400225475ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/rhino-186/path/lib/requirejs/text.js000066400000000000000000000346401334071220400241000ustar00rootroot00000000000000/** * @license RequireJS text 2.0.6 Copyright (c) 2010-2012, The Dojo Foundation All Rights Reserved. * Available via the MIT or new BSD license. * see: http://github.com/requirejs/text for details */ /*jslint regexp: true */ /*global require, XMLHttpRequest, ActiveXObject, define, window, process, Packages, java, location, Components, FileUtils */ define(['module'], function (module) { 'use strict'; var text, fs, Cc, Ci, progIds = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0'], xmlRegExp = /^\s*<\?xml(\s)+version=[\'\"](\d)*.(\d)*[\'\"](\s)*\?>/im, bodyRegExp = /]*>\s*([\s\S]+)\s*<\/body>/im, hasLocation = typeof location !== 'undefined' && location.href, defaultProtocol = hasLocation && location.protocol && location.protocol.replace(/\:/, ''), defaultHostName = hasLocation && location.hostname, defaultPort = hasLocation && (location.port || undefined), buildMap = [], masterConfig = (module.config && module.config()) || {}; text = { version: '2.0.6', strip: function (content) { //Strips declarations so that external SVG and XML //documents can be added to a document without worry. Also, if the string //is an HTML document, only the part inside the body tag is returned. if (content) { content = content.replace(xmlRegExp, ""); var matches = content.match(bodyRegExp); if (matches) { content = matches[1]; } } else { content = ""; } return content; }, jsEscape: function (content) { return content.replace(/(['\\])/g, '\\$1') .replace(/[\f]/g, "\\f") .replace(/[\b]/g, "\\b") .replace(/[\n]/g, "\\n") .replace(/[\t]/g, "\\t") .replace(/[\r]/g, "\\r") .replace(/[\u2028]/g, "\\u2028") .replace(/[\u2029]/g, "\\u2029"); }, createXhr: masterConfig.createXhr || function () { //Would love to dump the ActiveX crap in here. Need IE 6 to die first. var xhr, i, progId; if (typeof XMLHttpRequest !== "undefined") { return new XMLHttpRequest(); } else if (typeof ActiveXObject !== "undefined") { for (i = 0; i < 3; i += 1) { progId = progIds[i]; try { xhr = new ActiveXObject(progId); } catch (e) {} if (xhr) { progIds = [progId]; // so faster next time break; } } } return xhr; }, /** * Parses a resource name into its component parts. Resource names * look like: module/name.ext!strip, where the !strip part is * optional. * @param {String} name the resource name * @returns {Object} with properties "moduleName", "ext" and "strip" * where strip is a boolean. */ parseName: function (name) { var modName, ext, temp, strip = false, index = name.indexOf("."), isRelative = name.indexOf('./') === 0 || name.indexOf('../') === 0; if (index !== -1 && (!isRelative || index > 1)) { modName = name.substring(0, index); ext = name.substring(index + 1, name.length); } else { modName = name; } temp = ext || modName; index = temp.indexOf("!"); if (index !== -1) { //Pull off the strip arg. strip = temp.substring(index + 1) === "strip"; temp = temp.substring(0, index); if (ext) { ext = temp; } else { modName = temp; } } return { moduleName: modName, ext: ext, strip: strip }; }, xdRegExp: /^((\w+)\:)?\/\/([^\/\\]+)/, /** * Is an URL on another domain. Only works for browser use, returns * false in non-browser environments. Only used to know if an * optimized .js version of a text resource should be loaded * instead. * @param {String} url * @returns Boolean */ useXhr: function (url, protocol, hostname, port) { var uProtocol, uHostName, uPort, match = text.xdRegExp.exec(url); if (!match) { return true; } uProtocol = match[2]; uHostName = match[3]; uHostName = uHostName.split(':'); uPort = uHostName[1]; uHostName = uHostName[0]; return (!uProtocol || uProtocol === protocol) && (!uHostName || uHostName.toLowerCase() === hostname.toLowerCase()) && ((!uPort && !uHostName) || uPort === port); }, finishLoad: function (name, strip, content, onLoad) { content = strip ? text.strip(content) : content; if (masterConfig.isBuild) { buildMap[name] = content; } onLoad(content); }, load: function (name, req, onLoad, config) { //Name has format: some.module.filext!strip //The strip part is optional. //if strip is present, then that means only get the string contents //inside a body tag in an HTML string. For XML/SVG content it means //removing the declarations so the content can be inserted //into the current doc without problems. // Do not bother with the work if a build and text will // not be inlined. if (config.isBuild && !config.inlineText) { onLoad(); return; } masterConfig.isBuild = config.isBuild; var parsed = text.parseName(name), nonStripName = parsed.moduleName + (parsed.ext ? '.' + parsed.ext : ''), url = req.toUrl(nonStripName), useXhr = (masterConfig.useXhr) || text.useXhr; //Load the text. Use XHR if possible and in a browser. if (!hasLocation || useXhr(url, defaultProtocol, defaultHostName, defaultPort)) { text.get(url, function (content) { text.finishLoad(name, parsed.strip, content, onLoad); }, function (err) { if (onLoad.error) { onLoad.error(err); } }); } else { //Need to fetch the resource across domains. Assume //the resource has been optimized into a JS module. Fetch //by the module name + extension, but do not include the //!strip part to avoid file system issues. req([nonStripName], function (content) { text.finishLoad(parsed.moduleName + '.' + parsed.ext, parsed.strip, content, onLoad); }); } }, write: function (pluginName, moduleName, write, config) { if (buildMap.hasOwnProperty(moduleName)) { var content = text.jsEscape(buildMap[moduleName]); write.asModule(pluginName + "!" + moduleName, "define(function () { return '" + content + "';});\n"); } }, writeFile: function (pluginName, moduleName, req, write, config) { var parsed = text.parseName(moduleName), extPart = parsed.ext ? '.' + parsed.ext : '', nonStripName = parsed.moduleName + extPart, //Use a '.js' file name so that it indicates it is a //script that can be loaded across domains. fileName = req.toUrl(parsed.moduleName + extPart) + '.js'; //Leverage own load() method to load plugin value, but only //write out values that do not have the strip argument, //to avoid any potential issues with ! in file names. text.load(nonStripName, req, function (value) { //Use own write() method to construct full module value. //But need to create shell that translates writeFile's //write() to the right interface. var textWrite = function (contents) { return write(fileName, contents); }; textWrite.asModule = function (moduleName, contents) { return write.asModule(moduleName, fileName, contents); }; text.write(pluginName, nonStripName, textWrite, config); }, config); } }; if (masterConfig.env === 'node' || (!masterConfig.env && typeof process !== "undefined" && process.versions && !!process.versions.node)) { //Using special require.nodeRequire, something added by r.js. fs = require.nodeRequire('fs'); text.get = function (url, callback) { var file = fs.readFileSync(url, 'utf8'); //Remove BOM (Byte Mark Order) from utf8 files if it is there. if (file.indexOf('\uFEFF') === 0) { file = file.substring(1); } callback(file); }; } else if (masterConfig.env === 'xhr' || (!masterConfig.env && text.createXhr())) { text.get = function (url, callback, errback, headers) { var xhr = text.createXhr(), header; xhr.open('GET', url, true); //Allow plugins direct access to xhr headers if (headers) { for (header in headers) { if (headers.hasOwnProperty(header)) { xhr.setRequestHeader(header.toLowerCase(), headers[header]); } } } //Allow overrides specified in config if (masterConfig.onXhr) { masterConfig.onXhr(xhr, url); } xhr.onreadystatechange = function (evt) { var status, err; //Do not explicitly handle errors, those should be //visible via console output in the browser. if (xhr.readyState === 4) { status = xhr.status; if (status > 399 && status < 600) { //An http 4xx or 5xx error. Signal an error. err = new Error(url + ' HTTP status: ' + status); err.xhr = xhr; errback(err); } else { callback(xhr.responseText); } } }; xhr.send(null); }; } else if (masterConfig.env === 'rhino' || (!masterConfig.env && typeof Packages !== 'undefined' && typeof java !== 'undefined')) { //Why Java, why is this so awkward? text.get = function (url, callback) { var stringBuffer, line, encoding = "utf-8", file = new java.io.File(url), lineSeparator = java.lang.System.getProperty("line.separator"), input = new java.io.BufferedReader(new java.io.InputStreamReader(new java.io.FileInputStream(file), encoding)), content = ''; try { stringBuffer = new java.lang.StringBuffer(); line = input.readLine(); // Byte Order Mark (BOM) - The Unicode Standard, version 3.0, page 324 // http://www.unicode.org/faq/utf_bom.html // Note that when we use utf-8, the BOM should appear as "EF BB BF", but it doesn't due to this bug in the JDK: // http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4508058 if (line && line.length() && line.charAt(0) === 0xfeff) { // Eat the BOM, since we've already found the encoding on this file, // and we plan to concatenating this buffer with others; the BOM should // only appear at the top of a file. line = line.substring(1); } stringBuffer.append(line); while ((line = input.readLine()) !== null) { stringBuffer.append(lineSeparator); stringBuffer.append(line); } //Make sure we return a JavaScript string and not a Java string. content = String(stringBuffer.toString()); //String } finally { input.close(); } callback(content); }; } else if (masterConfig.env === 'xpconnect' || (!masterConfig.env && typeof Components !== 'undefined' && Components.classes && Components.interfaces)) { //Avert your gaze! Cc = Components.classes, Ci = Components.interfaces; Components.utils['import']('resource://gre/modules/FileUtils.jsm'); text.get = function (url, callback) { var inStream, convertStream, readData = {}, fileObj = new FileUtils.File(url); //XPCOM, you so crazy try { inStream = Cc['@mozilla.org/network/file-input-stream;1'] .createInstance(Ci.nsIFileInputStream); inStream.init(fileObj, 1, 0, false); convertStream = Cc['@mozilla.org/intl/converter-input-stream;1'] .createInstance(Ci.nsIConverterInputStream); convertStream.init(inStream, "utf-8", inStream.available(), Ci.nsIConverterInputStream.DEFAULT_REPLACEMENT_CHARACTER); convertStream.readString(inStream.available(), readData); convertStream.close(); inStream.close(); callback(readData.value); } catch (e) { throw new Error((fileObj && fileObj.path || '') + ': ' + e); } }; } return text; }); r.js-2.3.6/build/tests/lib/rhino-186/path/to/000077500000000000000000000000001334071220400204125ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/rhino-186/path/to/dir/000077500000000000000000000000001334071220400211705ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/rhino-186/path/to/dir/main.js000066400000000000000000000000701334071220400224470ustar00rootroot00000000000000define(['text!sample.txt'], function (sampleText) {}); r.js-2.3.6/build/tests/lib/rhino-186/path/to/dir/sample.txt000066400000000000000000000000071334071220400232070ustar00rootroot00000000000000sample r.js-2.3.6/build/tests/lib/semicolonInsert/000077500000000000000000000000001334071220400205565ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/semicolonInsert/a.js000066400000000000000000000000201334071220400213240ustar00rootroot00000000000000var foo = { } r.js-2.3.6/build/tests/lib/semicolonInsert/b.js000066400000000000000000000000411334071220400213300ustar00rootroot00000000000000define(['c'], function (c) { }) r.js-2.3.6/build/tests/lib/semicolonInsert/build.js000066400000000000000000000001751334071220400222160ustar00rootroot00000000000000{ baseUrl: '.', include: ['a', 'b'], out: 'a-built.js', skipSemiColonInsertion: true, optimize: 'none' } r.js-2.3.6/build/tests/lib/semicolonInsert/c.js000066400000000000000000000000311334071220400213300ustar00rootroot00000000000000define({ name: 'c' }) r.js-2.3.6/build/tests/lib/semicolonInsert/expected.js000066400000000000000000000001611334071220400227130ustar00rootroot00000000000000 var foo = { } define("a", function(){}); define('c',{ name: 'c' }) define('b',['c'], function (c) { }) r.js-2.3.6/build/tests/lib/shimBasic/000077500000000000000000000000001334071220400173035ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/shimBasic/build.js000066400000000000000000000003671334071220400207460ustar00rootroot00000000000000{ //baseUrl: '../../../../../requirejs/tests/shim', mainConfigFile: '../../../../../requirejs/tests/shim/basic-tests.js', name: 'basic-tests', out: '../../../../../requirejs/tests/shim/built/basic-tests.js', optimize: 'none' } r.js-2.3.6/build/tests/lib/shimBasic/expected.js000066400000000000000000000061151334071220400214450ustar00rootroot00000000000000(function (root) { root.A = { name: 'a' }; }(this)); define("a", (function (global) { return function () { var ret, fn; fn = function () { window.globalA = this.A.name; }; ret = fn.apply(global, arguments); return ret || global.A.name; }; }(this))); function D() { this.name = 'd'; }; define("d", function(){}); var B = { name: 'b', aValue: A.name, dValue: new D() }; //ending comment; define("b", ["a","d"], function(){}); var C = { name: 'c', a: A, b: B }; define("c", ["a","b"], (function (global) { return function () { var ret, fn; return ret || global.C; }; }(this))); var e = { nested: { e: { name: 'e' } } }; define("e", (function (global) { return function () { var ret, fn; fn = function () { return { name: e.nested.e.name + 'Modified' }; }; ret = fn.apply(global, arguments); return ret || global.e.nested.e; }; }(this))); var FCAP = { name: 'FCAP', globalA: A }; define("f", ["a"], (function (global) { return function () { var ret, fn; fn = function (a) { return { name: FCAP.name, globalA: FCAP.globalA, a: a }; }; ret = fn.apply(global, arguments); return ret; }; }(this))); require({ baseUrl: './', shim: { a: { exports: 'A.name', init: function () { window.globalA = this.A.name; } }, 'b': ['a', 'd'], 'c': { deps: ['a', 'b'], exports: 'C' }, 'e': { exports: 'e.nested.e', init: function () { return { name: e.nested.e.name + 'Modified' }; } }, 'f': { deps: ['a'], init: function (a) { return { name: FCAP.name, globalA: FCAP.globalA, a: a }; } } } }, ['a', 'c', 'e', 'f'], function(a, c, e, f) { doh.register( 'shimBasic', [ function shimBasic(t){ t.is('a', a); t.is('a', window.globalA); t.is('a', c.b.aValue); t.is('b', c.b.name); t.is('c', c.name); t.is('d', c.b.dValue.name); t.is('eModified', e.name); t.is('FCAP', f.name); t.is('a', f.globalA.name); t.is('a', f.a); } ] ); doh.run(); } ); define("basic-tests", function(){}); r.js-2.3.6/build/tests/lib/shimBasicWrap/000077500000000000000000000000001334071220400201355ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/shimBasicWrap/basicWrap.html000066400000000000000000000011361334071220400227370ustar00rootroot00000000000000 require.js: Basic Wrap Shim Test

require.js: Basic Wrap Shim Test

Basic test of the shim config support.

Check console for messages

r.js-2.3.6/build/tests/lib/shimBasicWrap/build.js000066400000000000000000000005721334071220400215760ustar00rootroot00000000000000{ //baseUrl: '../../../../../requirejs/tests/shim', mainConfigFile: '../../../../../requirejs/tests/shim/basic-tests.js', wrapShim: true, // Add a shim that was missing: need to make a global. shim: { 'b': { deps: ['a', 'd'], exports: 'B' } }, name: 'basic-tests', out: 'basic-tests-built.js', optimize: 'none' } r.js-2.3.6/build/tests/lib/shimBasicWrap/expected.js000066400000000000000000000061161334071220400223000ustar00rootroot00000000000000(function(root) { define("a", [], function() { return (function() { (function (root) { root.A = { name: 'a' }; }(this)); return (function () { window.globalA = this.A.name; }.apply(this, arguments)) || A.name; }).apply(root, arguments); }); }(this)); function D() { this.name = 'd'; }; define("d", function(){}); (function(root) { define("b", ["a","d"], function() { return (function() { var B = { name: 'b', aValue: A.name, dValue: new D() }; //ending comment; return root.B = B; }).apply(root, arguments); }); }(this)); (function(root) { define("c", ["a","b"], function() { return (function() { var C = { name: 'c', a: A, b: B }; return root.C = C; }).apply(root, arguments); }); }(this)); (function(root) { define("e", [], function() { return (function() { var e = { nested: { e: { name: 'e' } } }; return (function () { return { name: e.nested.e.name + 'Modified' }; }.apply(this, arguments)) || e.nested.e; }).apply(root, arguments); }); }(this)); (function(root) { define("f", ["a"], function() { return (function() { var FCAP = { name: 'FCAP', globalA: A }; return (function (a) { return { name: FCAP.name, globalA: FCAP.globalA, a: a }; }.apply(this, arguments)); }).apply(root, arguments); }); }(this)); require({ baseUrl: './', shim: { a: { exports: 'A.name', init: function () { window.globalA = this.A.name; } }, 'b': ['a', 'd'], 'c': { deps: ['a', 'b'], exports: 'C' }, 'e': { exports: 'e.nested.e', init: function () { return { name: e.nested.e.name + 'Modified' }; } }, 'f': { deps: ['a'], init: function (a) { return { name: FCAP.name, globalA: FCAP.globalA, a: a }; } } } }, ['a', 'c', 'e', 'f'], function(a, c, e, f) { doh.register( 'shimBasic', [ function shimBasic(t){ t.is('a', a); t.is('a', window.globalA); t.is('a', c.b.aValue); t.is('b', c.b.name); t.is('c', c.name); t.is('d', c.b.dValue.name); t.is('eModified', e.name); t.is('FCAP', f.name); t.is('a', f.globalA.name); t.is('a', f.a); } ] ); doh.run(); } ); define("basic-tests", function(){}); r.js-2.3.6/build/tests/lib/shimFakeDefine/000077500000000000000000000000001334071220400202435ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/shimFakeDefine/build.js000066400000000000000000000001671334071220400217040ustar00rootroot00000000000000({ baseUrl: '.', mainConfigFile: 'main.js', name: 'main', out: 'main-built.js', optimize: 'none' })r.js-2.3.6/build/tests/lib/shimFakeDefine/expected.js000066400000000000000000000010711334071220400224010ustar00rootroot00000000000000 var faker = new function () { function define(obj, name, desc) { } if (something) { define(this, 'base', {}); } define(a, b, c); function other () { define(this, '__proto__', {}); } }; define("faker", (function (global) { return function () { var ret, fn; return ret || global.faker; }; }(this))); requirejs.config({ shim: { faker: { exports: 'faker' } } }); require(['faker'], function (faker) { console.log(faker); }); define("main", function(){}); r.js-2.3.6/build/tests/lib/shimFakeDefine/faker.js000066400000000000000000000003521334071220400216710ustar00rootroot00000000000000var faker = new function () { function define(obj, name, desc) { } if (something) { define(this, 'base', {}); } define(a, b, c); function other () { define(this, '__proto__', {}); } }; r.js-2.3.6/build/tests/lib/shimFakeDefine/main.js000066400000000000000000000002441334071220400215250ustar00rootroot00000000000000requirejs.config({ shim: { faker: { exports: 'faker' } } }); require(['faker'], function (faker) { console.log(faker); }); r.js-2.3.6/build/tests/lib/shimWrapShort/000077500000000000000000000000001334071220400202135ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/shimWrapShort/build.js000066400000000000000000000002561334071220400216530ustar00rootroot00000000000000{ name: 'main', out: 'main-built.js', optimize: 'none', shim: { plugin: ['jquery'], plugin2: ['jquery', 'plugin'] }, wrapShim: true } r.js-2.3.6/build/tests/lib/shimWrapShort/expected.js000066400000000000000000000011221334071220400223460ustar00rootroot00000000000000define('jquery',[],function() { function jQuery() { } window.jQuery = window.$ = jQuery; return jQuery; }); (function(root) { define("plugin", ["jquery"], function() { return (function() { (function ($) { $.test = function () { console.log('from plugin 1'); } })(jQuery); }).apply(root, arguments); }); }(this)); (function(root) { define("plugin2", ["jquery","plugin"], function() { return (function() { (function ($) { $.test(); })(jQuery); }).apply(root, arguments); }); }(this)); require(['plugin2']); define("main", function(){}); r.js-2.3.6/build/tests/lib/shimWrapShort/jquery.js000066400000000000000000000001621334071220400220670ustar00rootroot00000000000000define(function() { function jQuery() { } window.jQuery = window.$ = jQuery; return jQuery; }); r.js-2.3.6/build/tests/lib/shimWrapShort/main.js000066400000000000000000000000271334071220400214740ustar00rootroot00000000000000require(['plugin2']); r.js-2.3.6/build/tests/lib/shimWrapShort/plugin.js000066400000000000000000000001451334071220400220470ustar00rootroot00000000000000(function ($) { $.test = function () { console.log('from plugin 1'); } })(jQuery); r.js-2.3.6/build/tests/lib/shimWrapShort/plugin2.js000066400000000000000000000000531334071220400221270ustar00rootroot00000000000000(function ($) { $.test(); })(jQuery); r.js-2.3.6/build/tests/lib/sourcemap/000077500000000000000000000000001334071220400173775ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/sourcemap/build.js000066400000000000000000000003361334071220400210360ustar00rootroot00000000000000({ appDir: 'www', dir: 'www-built', baseUrl: 'js', optimize: 'uglify2', generateSourceMaps: true, preserveLicenseComments: false, modules: [ { name: 'main' } ] })r.js-2.3.6/build/tests/lib/sourcemap/expected-main.js.map000066400000000000000000000017011334071220400232330ustar00rootroot00000000000000{"version":3,"sources":["a.js","b.js","main.js"],"names":["define","name","doSomething","console","log","require","a","b"],"mappings":"AAGAA,OAAA,KACAC,KAAA,IACAC,YAAA,SAAAD,GACAE,QAAAC,IAAA,SAAAH,MAGAE,QAAAC,IAAA,aCNAJ,OAAA,OAAA,WAEA,OACAC,KAFA,OCDAI,SAAA,IAAA,KAAA,SAAAC,EAAAC,GACAJ,QAAAC,IAAA,oBACAE,EAAAJ,YAAA,SACAC,QAAAC,IAAA,WAAAG,EAAAN,QAGAD,OAAA,OAAA","file":"main.js","sourcesContent":["/**\n * Module A\n */\ndefine('a',{\n name: 'a',\n doSomething: function (name) {\n console.log('Hello ' + name);\n }\n});\nconsole.log('a is done');\n\n","/**\n * Module B\n */\ndefine('b',[],function () {\n var name = 'b';\n return {\n name: name\n };\n});\n\n","/**\n * A test of source maps on a concatenated, but not minified file.\n */\nrequire(['a', 'b'], function (a, b) {\n console.log('a message below:');\n a.doSomething('world');\n console.log('b name: ' + b.name);\n});\n\ndefine(\"main\", function(){});\n\n"]}r.js-2.3.6/build/tests/lib/sourcemap/onejs/000077500000000000000000000000001334071220400205155ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/sourcemap/onejs/build.js000066400000000000000000000003151334071220400221510ustar00rootroot00000000000000({ baseUrl: 'www/js/lib', mainConfigFile: 'www/js/app.js', generateSourceMaps: true, preserveLicenseComments: false, optimize: 'uglify2', name: 'app', out: 'www/js/built.js' }) r.js-2.3.6/build/tests/lib/sourcemap/onejs/expected.map000066400000000000000000000565301334071220400230260ustar00rootroot00000000000000{"version":3,"sources":["text/text.js","../app/sample.txt!text","../app/a.js","../app/main.js","../app.js"],"names":["define","module","text","fs","Cc","Ci","xpcIsWindows","progIds","xmlRegExp","bodyRegExp","hasLocation","location","href","defaultProtocol","protocol","replace","defaultHostName","hostname","defaultPort","port","undefined","buildMap","masterConfig","config","version","strip","content","matches","match","jsEscape","createXhr","xhr","i","progId","XMLHttpRequest","ActiveXObject","e","parseName","name","modName","ext","temp","index","indexOf","isRelative","substring","length","moduleName","xdRegExp","useXhr","url","uProtocol","uHostName","uPort","exec","split","toLowerCase","finishLoad","onLoad","isBuild","load","req","inlineText","parsed","nonStripName","toUrl","get","err","error","write","pluginName","hasOwnProperty","asModule","writeFile","extPart","fileName","value","textWrite","contents","env","process","versions","node","require","nodeRequire","callback","errback","file","readFileSync","headers","header","open","setRequestHeader","onXhr","onreadystatechange","evt","status","readyState","Error","responseText","onXhrComplete","send","Packages","java","stringBuffer","line","io","File","lineSeparator","lang","System","getProperty","input","BufferedReader","InputStreamReader","FileInputStream","StringBuffer","readLine","charAt","append","String","toString","close","Components","classes","interfaces","utils","inStream","convertStream","fileObj","readData","FileUtils","createInstance","nsIFileInputStream","init","nsIConverterInputStream","available","DEFAULT_REPLACEMENT_CHARACTER","readString","path","doSomething","console","log","a","baseUrl","paths","app","main"],"mappings":"AAUAA,OAAA,QAAA,UAAA,SAAAC,GACA,YAEA,IAAAC,GAAAC,EAAAC,EAAAC,EAAAC,EACAC,GAAA,iBAAA,oBAAA,sBACAC,EAAA,2DACAC,EAAA,uCACAC,EAAA,mBAAAC,WAAAA,SAAAC,KACAC,EAAAH,GAAAC,SAAAG,UAAAH,SAAAG,SAAAC,QAAA,KAAA,IACAC,EAAAN,GAAAC,SAAAM,SACAC,EAAAR,IAAAC,SAAAQ,UAAAC,IACAC,KACAC,EAAArB,EAAAsB,QAAAtB,EAAAsB,YA0WA,OAxWArB,IACAsB,QAAA,SAEAC,MAAA,SAAAC,GAIA,GAAAA,EAAA,CACAA,EAAAA,EAAAX,QAAAP,EAAA,GACA,IAAAmB,GAAAD,EAAAE,MAAAnB,EACAkB,KACAD,EAAAC,EAAA,QAGAD,GAAA,EAEA,OAAAA,IAGAG,SAAA,SAAAH,GACA,MAAAA,GAAAX,QAAA,WAAA,QACAA,QAAA,QAAA,OACAA,QAAA,QAAA,OACAA,QAAA,QAAA,OACAA,QAAA,QAAA,OACAA,QAAA,QAAA,OACAA,QAAA,YAAA,WACAA,QAAA,YAAA,YAGAe,UAAAR,EAAAQ,WAAA,WAEA,GAAAC,GAAAC,EAAAC,CACA,IAAA,mBAAAC,gBACA,MAAA,IAAAA,eACA,IAAA,mBAAAC,eACA,IAAAH,EAAA,EAAAA,EAAA,EAAAA,GAAA,EAAA,CACAC,EAAA1B,EAAAyB,EACA,KACAD,EAAA,GAAAI,eAAAF,GACA,MAAAG,IAEA,GAAAL,EAAA,CACAxB,GAAA0B,EACA,QAKA,MAAAF,IAWAM,UAAA,SAAAC,GACA,GAAAC,GAAAC,EAAAC,EACAhB,GAAA,EACAiB,EAAAJ,EAAAK,QAAA,KACAC,EAAA,IAAAN,EAAAK,QAAA,OACA,IAAAL,EAAAK,QAAA,MAsBA,QApBA,IAAAD,KAAAE,GAAAF,EAAA,IACAH,EAAAD,EAAAO,UAAA,EAAAH,GACAF,EAAAF,EAAAO,UAAAH,EAAA,EAAAJ,EAAAQ,SAEAP,EAAAD,EAGAG,EAAAD,GAAAD,EACAG,EAAAD,EAAAE,QAAA,MACA,IAAAD,IAEAjB,EAAA,UAAAgB,EAAAI,UAAAH,EAAA,GACAD,EAAAA,EAAAI,UAAA,EAAAH,GACAF,EACAA,EAAAC,EAEAF,EAAAE,IAKAM,WAAAR,EACAC,IAAAA,EACAf,MAAAA,IAIAuB,SAAA,4BAUAC,OAAA,SAAAC,EAAApC,EAAAG,EAAAE,GACA,GAAAgC,GAAAC,EAAAC,EACAzB,EAAA1B,EAAA8C,SAAAM,KAAAJ,EACA,QAAAtB,IAGAuB,EAAAvB,EAAA,GACAwB,EAAAxB,EAAA,GAEAwB,EAAAA,EAAAG,MAAA,KACAF,EAAAD,EAAA,GACAA,EAAAA,EAAA,KAEAD,GAAAA,IAAArC,GACAsC,GAAAA,EAAAI,gBAAAvC,EAAAuC,gBACAH,GAAAD,IAAAC,IAAAlC,KAGAsC,WAAA,SAAAnB,EAAAb,EAAAC,EAAAgC,GACAhC,EAAAD,EAAAvB,EAAAuB,MAAAC,GAAAA,EACAJ,EAAAqC,UACAtC,EAAAiB,GAAAZ,GAEAgC,EAAAhC,IAGAkC,KAAA,SAAAtB,EAAAuB,EAAAH,EAAAnC,GAUA,GAAAA,EAAAoC,UAAApC,EAAAuC,WAEA,WADAJ,IAIApC,GAAAqC,QAAApC,EAAAoC,OAEA,IAAAI,GAAA7D,EAAAmC,UAAAC,GACA0B,EAAAD,EAAAhB,YACAgB,EAAAvB,IAAA,IAAAuB,EAAAvB,IAAA,IACAU,EAAAW,EAAAI,MAAAD,GACAf,EAAA3B,EAAA,QACApB,EAAA+C,MAGA,IAAA,IAAAC,EAAAP,QAAA,UAEA,WADAe,MAKAhD,GAAAuC,EAAAC,EAAArC,EAAAG,EAAAE,GACAhB,EAAAgE,IAAAhB,EAAA,SAAAxB,GACAxB,EAAAuD,WAAAnB,EAAAyB,EAAAtC,MAAAC,EAAAgC,IACA,SAAAS,GACAT,EAAAU,OACAV,EAAAU,MAAAD,KAQAN,GAAAG,GAAA,SAAAtC,GACAxB,EAAAuD,WAAAM,EAAAhB,WAAA,IAAAgB,EAAAvB,IACAuB,EAAAtC,MAAAC,EAAAgC,MAKAW,MAAA,SAAAC,EAAAvB,EAAAsB,EAAA9C,GACA,GAAAF,EAAAkD,eAAAxB,GAAA,CACA,GAAArB,GAAAxB,EAAA2B,SAAAR,EAAA0B,GACAsB,GAAAG,SAAAF,EAAA,IAAAvB,EACA,gCACArB,EACA,aAIA+C,UAAA,SAAAH,EAAAvB,EAAAc,EAAAQ,EAAA9C,GACA,GAAAwC,GAAA7D,EAAAmC,UAAAU,GACA2B,EAAAX,EAAAvB,IAAA,IAAAuB,EAAAvB,IAAA,GACAwB,EAAAD,EAAAhB,WAAA2B,EAGAC,EAAAd,EAAAI,MAAAF,EAAAhB,WAAA2B,GAAA,KAKAxE,GAAA0D,KAAAI,EAAAH,EAAA,SAAAe,GAIA,GAAAC,GAAA,SAAAC,GACA,MAAAT,GAAAM,EAAAG,GAEAD,GAAAL,SAAA,SAAAzB,EAAA+B,GACA,MAAAT,GAAAG,SAAAzB,EAAA4B,EAAAG,IAGA5E,EAAAmE,MAAAC,EAAAN,EAAAa,EAAAtD,IACAA,KAIA,SAAAD,EAAAyD,MAAAzD,EAAAyD,KACA,mBAAAC,UACAA,QAAAC,UACAD,QAAAC,SAAAC,OACAF,QAAAC,SAAA,gBAEA9E,EAAAgF,QAAAC,YAAA,MAEAlF,EAAAgE,IAAA,SAAAhB,EAAAmC,EAAAC,GACA,IACA,GAAAC,GAAApF,EAAAqF,aAAAtC,EAAA,OAEA,KAAAqC,EAAA5C,QAAA,YACA4C,EAAAA,EAAA1C,UAAA,IAEAwC,EAAAE,GACA,MAAAnD,GACAkD,EAAAlD,MAGA,QAAAd,EAAAyD,MAAAzD,EAAAyD,KACA7E,EAAA4B,YACA5B,EAAAgE,IAAA,SAAAhB,EAAAmC,EAAAC,EAAAG,GACA,GAAAC,GAAA3D,EAAA7B,EAAA4B,WAIA,IAHAC,EAAA4D,KAAA,MAAAzC,GAAA,GAGAuC,EACA,IAAAC,IAAAD,GACAA,EAAAlB,eAAAmB,IACA3D,EAAA6D,iBAAAF,EAAAlC,cAAAiC,EAAAC,GAMApE,GAAAuE,OACAvE,EAAAuE,MAAA9D,EAAAmB,GAGAnB,EAAA+D,mBAAA,SAAAC,GACA,GAAAC,GAAA7B,CAGA,KAAApC,EAAAkE,aACAD,EAAAjE,EAAAiE,OACAA,EAAA,KAAAA,EAAA,KAEA7B,EAAA,GAAA+B,OAAAhD,EAAA,iBAAA8C,GACA7B,EAAApC,IAAAA,EACAuD,EAAAnB,IAEAkB,EAAAtD,EAAAoE,cAGA7E,EAAA8E,eACA9E,EAAA8E,cAAArE,EAAAmB,KAIAnB,EAAAsE,KAAA,OAEA,UAAA/E,EAAAyD,MAAAzD,EAAAyD,KACA,mBAAAuB,WAAA,mBAAAC,MAEArG,EAAAgE,IAAA,SAAAhB,EAAAmC,GACA,GAAAmB,GAAAC,EAEAlB,EAAA,GAAAgB,MAAAG,GAAAC,KAAAzD,GACA0D,EAAAL,KAAAM,KAAAC,OAAAC,YAAA,kBACAC,EAAA,GAAAT,MAAAG,GAAAO,eAAA,GAAAV,MAAAG,GAAAQ,kBAAA,GAAAX,MAAAG,GAAAS,gBAAA5B,GAHA,UAIA7D,EAAA,EACA,KAoBA,IAnBA8E,EAAA,GAAAD,MAAAM,KAAAO,aACAX,EAAAO,EAAAK,WAOAZ,GAAAA,EAAA3D,UAAA,QAAA2D,EAAAa,OAAA,KAIAb,EAAAA,EAAA5D,UAAA,IAGA,OAAA4D,GACAD,EAAAe,OAAAd,GAGA,QAAAA,EAAAO,EAAAK,aACAb,EAAAe,OAAAX,GACAJ,EAAAe,OAAAd,EAGA/E,GAAA8F,OAAAhB,EAAAiB,YACA,QACAT,EAAAU,QAEArC,EAAA3D,KAEA,cAAAJ,EAAAyD,MAAAzD,EAAAyD,KACA,mBAAA4C,aAAAA,WAAAC,SACAD,WAAAE,cAEAzH,EAAAuH,WAAAC,QACAvH,EAAAsH,WAAAE,WACAF,WAAAG,MAAA,OAAA,wCACAxH,EAAA,uCAAAF,GAEAF,EAAAgE,IAAA,SAAAhB,EAAAmC,GACA,GAAA0C,GAAAC,EAAAC,EACAC,IAEA5H,KACA4C,EAAAA,EAAAnC,QAAA,MAAA,OAGAkH,EAAA,GAAAE,WAAAxB,KAAAzD,EAGA,KACA6E,EAAA3H,EAAA,4CACAgI,eAAA/H,EAAAgI,oBACAN,EAAAO,KAAAL,EAAA,EAAA,GAAA,GAEAD,EAAA5H,EAAA,8CACAgI,eAAA/H,EAAAkI,yBACAP,EAAAM,KAAAP,EAAA,QAAAA,EAAAS,YACAnI,EAAAkI,wBAAAE,+BAEAT,EAAAU,WAAAX,EAAAS,YAAAN,GACAF,EAAAN,QACAK,EAAAL,QACArC,EAAA6C,EAAAtD,OACA,MAAAxC,GACA,KAAA,IAAA8D,QAAA+B,GAAAA,EAAAU,MAAA,IAAA,KAAAvG,MAIAlC,IC/XAF,OAAA,yBAAA,WAAA,MAAA,eCEAA,OAAA,SACAsC,KAAA,IACAsG,YAAA,SAAAtG,GACAuG,QAAAC,IAAA,wBACAD,QAAAC,IAAA,SAAAxG,MAGAuG,QAAAC,IAAA,aAEA9I,OAAA,YAAA,UAAA,oBAAA,OAAA,SAAAmF,GCXA,GAAAjF,GAAAiF,EAAA,oBAGA,QACA7C,KAAA,OACAyG,EAJA5D,EAAA,OAKAjF,KAAAA,KAKAiF,QAAA5D,QCXAyH,QAAA,SACAC,OACAC,IAAA,SACAhJ,KAAA,eAOAiF,SAAA,YAAA,SAAAgE,GACAN,QAAAC,IAAA,yBACAD,QAAAC,IAAAK,EAAAJ,EAAAH,YAAA,UACAC,QAAAC,IAAA,iCAGA9I,OAAA,MAAA","file":"built.js","sourcesContent":["/**\n * @license RequireJS text 2.0.10 Copyright (c) 2010-2012, The Dojo Foundation All Rights Reserved.\n * Available via the MIT or new BSD license.\n * see: http://github.com/requirejs/text for details\n */\n/*jslint regexp: true */\n/*global require, XMLHttpRequest, ActiveXObject,\n define, window, process, Packages,\n java, location, Components, FileUtils */\n\ndefine('text',['module'], function (module) {\n 'use strict';\n\n var text, fs, Cc, Ci, xpcIsWindows,\n progIds = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0'],\n xmlRegExp = /^\\s*<\\?xml(\\s)+version=[\\'\\\"](\\d)*.(\\d)*[\\'\\\"](\\s)*\\?>/im,\n bodyRegExp = /]*>\\s*([\\s\\S]+)\\s*<\\/body>/im,\n hasLocation = typeof location !== 'undefined' && location.href,\n defaultProtocol = hasLocation && location.protocol && location.protocol.replace(/\\:/, ''),\n defaultHostName = hasLocation && location.hostname,\n defaultPort = hasLocation && (location.port || undefined),\n buildMap = {},\n masterConfig = (module.config && module.config()) || {};\n\n text = {\n version: '2.0.10',\n\n strip: function (content) {\n //Strips declarations so that external SVG and XML\n //documents can be added to a document without worry. Also, if the string\n //is an HTML document, only the part inside the body tag is returned.\n if (content) {\n content = content.replace(xmlRegExp, \"\");\n var matches = content.match(bodyRegExp);\n if (matches) {\n content = matches[1];\n }\n } else {\n content = \"\";\n }\n return content;\n },\n\n jsEscape: function (content) {\n return content.replace(/(['\\\\])/g, '\\\\$1')\n .replace(/[\\f]/g, \"\\\\f\")\n .replace(/[\\b]/g, \"\\\\b\")\n .replace(/[\\n]/g, \"\\\\n\")\n .replace(/[\\t]/g, \"\\\\t\")\n .replace(/[\\r]/g, \"\\\\r\")\n .replace(/[\\u2028]/g, \"\\\\u2028\")\n .replace(/[\\u2029]/g, \"\\\\u2029\");\n },\n\n createXhr: masterConfig.createXhr || function () {\n //Would love to dump the ActiveX crap in here. Need IE 6 to die first.\n var xhr, i, progId;\n if (typeof XMLHttpRequest !== \"undefined\") {\n return new XMLHttpRequest();\n } else if (typeof ActiveXObject !== \"undefined\") {\n for (i = 0; i < 3; i += 1) {\n progId = progIds[i];\n try {\n xhr = new ActiveXObject(progId);\n } catch (e) {}\n\n if (xhr) {\n progIds = [progId]; // so faster next time\n break;\n }\n }\n }\n\n return xhr;\n },\n\n /**\n * Parses a resource name into its component parts. Resource names\n * look like: module/name.ext!strip, where the !strip part is\n * optional.\n * @param {String} name the resource name\n * @returns {Object} with properties \"moduleName\", \"ext\" and \"strip\"\n * where strip is a boolean.\n */\n parseName: function (name) {\n var modName, ext, temp,\n strip = false,\n index = name.indexOf(\".\"),\n isRelative = name.indexOf('./') === 0 ||\n name.indexOf('../') === 0;\n\n if (index !== -1 && (!isRelative || index > 1)) {\n modName = name.substring(0, index);\n ext = name.substring(index + 1, name.length);\n } else {\n modName = name;\n }\n\n temp = ext || modName;\n index = temp.indexOf(\"!\");\n if (index !== -1) {\n //Pull off the strip arg.\n strip = temp.substring(index + 1) === \"strip\";\n temp = temp.substring(0, index);\n if (ext) {\n ext = temp;\n } else {\n modName = temp;\n }\n }\n\n return {\n moduleName: modName,\n ext: ext,\n strip: strip\n };\n },\n\n xdRegExp: /^((\\w+)\\:)?\\/\\/([^\\/\\\\]+)/,\n\n /**\n * Is an URL on another domain. Only works for browser use, returns\n * false in non-browser environments. Only used to know if an\n * optimized .js version of a text resource should be loaded\n * instead.\n * @param {String} url\n * @returns Boolean\n */\n useXhr: function (url, protocol, hostname, port) {\n var uProtocol, uHostName, uPort,\n match = text.xdRegExp.exec(url);\n if (!match) {\n return true;\n }\n uProtocol = match[2];\n uHostName = match[3];\n\n uHostName = uHostName.split(':');\n uPort = uHostName[1];\n uHostName = uHostName[0];\n\n return (!uProtocol || uProtocol === protocol) &&\n (!uHostName || uHostName.toLowerCase() === hostname.toLowerCase()) &&\n ((!uPort && !uHostName) || uPort === port);\n },\n\n finishLoad: function (name, strip, content, onLoad) {\n content = strip ? text.strip(content) : content;\n if (masterConfig.isBuild) {\n buildMap[name] = content;\n }\n onLoad(content);\n },\n\n load: function (name, req, onLoad, config) {\n //Name has format: some.module.filext!strip\n //The strip part is optional.\n //if strip is present, then that means only get the string contents\n //inside a body tag in an HTML string. For XML/SVG content it means\n //removing the declarations so the content can be inserted\n //into the current doc without problems.\n\n // Do not bother with the work if a build and text will\n // not be inlined.\n if (config.isBuild && !config.inlineText) {\n onLoad();\n return;\n }\n\n masterConfig.isBuild = config.isBuild;\n\n var parsed = text.parseName(name),\n nonStripName = parsed.moduleName +\n (parsed.ext ? '.' + parsed.ext : ''),\n url = req.toUrl(nonStripName),\n useXhr = (masterConfig.useXhr) ||\n text.useXhr;\n\n // Do not load if it is an empty: url\n if (url.indexOf('empty:') === 0) {\n onLoad();\n return;\n }\n\n //Load the text. Use XHR if possible and in a browser.\n if (!hasLocation || useXhr(url, defaultProtocol, defaultHostName, defaultPort)) {\n text.get(url, function (content) {\n text.finishLoad(name, parsed.strip, content, onLoad);\n }, function (err) {\n if (onLoad.error) {\n onLoad.error(err);\n }\n });\n } else {\n //Need to fetch the resource across domains. Assume\n //the resource has been optimized into a JS module. Fetch\n //by the module name + extension, but do not include the\n //!strip part to avoid file system issues.\n req([nonStripName], function (content) {\n text.finishLoad(parsed.moduleName + '.' + parsed.ext,\n parsed.strip, content, onLoad);\n });\n }\n },\n\n write: function (pluginName, moduleName, write, config) {\n if (buildMap.hasOwnProperty(moduleName)) {\n var content = text.jsEscape(buildMap[moduleName]);\n write.asModule(pluginName + \"!\" + moduleName,\n \"define(function () { return '\" +\n content +\n \"';});\\n\");\n }\n },\n\n writeFile: function (pluginName, moduleName, req, write, config) {\n var parsed = text.parseName(moduleName),\n extPart = parsed.ext ? '.' + parsed.ext : '',\n nonStripName = parsed.moduleName + extPart,\n //Use a '.js' file name so that it indicates it is a\n //script that can be loaded across domains.\n fileName = req.toUrl(parsed.moduleName + extPart) + '.js';\n\n //Leverage own load() method to load plugin value, but only\n //write out values that do not have the strip argument,\n //to avoid any potential issues with ! in file names.\n text.load(nonStripName, req, function (value) {\n //Use own write() method to construct full module value.\n //But need to create shell that translates writeFile's\n //write() to the right interface.\n var textWrite = function (contents) {\n return write(fileName, contents);\n };\n textWrite.asModule = function (moduleName, contents) {\n return write.asModule(moduleName, fileName, contents);\n };\n\n text.write(pluginName, nonStripName, textWrite, config);\n }, config);\n }\n };\n\n if (masterConfig.env === 'node' || (!masterConfig.env &&\n typeof process !== \"undefined\" &&\n process.versions &&\n !!process.versions.node &&\n !process.versions['node-webkit'])) {\n //Using special require.nodeRequire, something added by r.js.\n fs = require.nodeRequire('fs');\n\n text.get = function (url, callback, errback) {\n try {\n var file = fs.readFileSync(url, 'utf8');\n //Remove BOM (Byte Mark Order) from utf8 files if it is there.\n if (file.indexOf('\\uFEFF') === 0) {\n file = file.substring(1);\n }\n callback(file);\n } catch (e) {\n errback(e);\n }\n };\n } else if (masterConfig.env === 'xhr' || (!masterConfig.env &&\n text.createXhr())) {\n text.get = function (url, callback, errback, headers) {\n var xhr = text.createXhr(), header;\n xhr.open('GET', url, true);\n\n //Allow plugins direct access to xhr headers\n if (headers) {\n for (header in headers) {\n if (headers.hasOwnProperty(header)) {\n xhr.setRequestHeader(header.toLowerCase(), headers[header]);\n }\n }\n }\n\n //Allow overrides specified in config\n if (masterConfig.onXhr) {\n masterConfig.onXhr(xhr, url);\n }\n\n xhr.onreadystatechange = function (evt) {\n var status, err;\n //Do not explicitly handle errors, those should be\n //visible via console output in the browser.\n if (xhr.readyState === 4) {\n status = xhr.status;\n if (status > 399 && status < 600) {\n //An http 4xx or 5xx error. Signal an error.\n err = new Error(url + ' HTTP status: ' + status);\n err.xhr = xhr;\n errback(err);\n } else {\n callback(xhr.responseText);\n }\n\n if (masterConfig.onXhrComplete) {\n masterConfig.onXhrComplete(xhr, url);\n }\n }\n };\n xhr.send(null);\n };\n } else if (masterConfig.env === 'rhino' || (!masterConfig.env &&\n typeof Packages !== 'undefined' && typeof java !== 'undefined')) {\n //Why Java, why is this so awkward?\n text.get = function (url, callback) {\n var stringBuffer, line,\n encoding = \"utf-8\",\n file = new java.io.File(url),\n lineSeparator = java.lang.System.getProperty(\"line.separator\"),\n input = new java.io.BufferedReader(new java.io.InputStreamReader(new java.io.FileInputStream(file), encoding)),\n content = '';\n try {\n stringBuffer = new java.lang.StringBuffer();\n line = input.readLine();\n\n // Byte Order Mark (BOM) - The Unicode Standard, version 3.0, page 324\n // http://www.unicode.org/faq/utf_bom.html\n\n // Note that when we use utf-8, the BOM should appear as \"EF BB BF\", but it doesn't due to this bug in the JDK:\n // http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4508058\n if (line && line.length() && line.charAt(0) === 0xfeff) {\n // Eat the BOM, since we've already found the encoding on this file,\n // and we plan to concatenating this buffer with others; the BOM should\n // only appear at the top of a file.\n line = line.substring(1);\n }\n\n if (line !== null) {\n stringBuffer.append(line);\n }\n\n while ((line = input.readLine()) !== null) {\n stringBuffer.append(lineSeparator);\n stringBuffer.append(line);\n }\n //Make sure we return a JavaScript string and not a Java string.\n content = String(stringBuffer.toString()); //String\n } finally {\n input.close();\n }\n callback(content);\n };\n } else if (masterConfig.env === 'xpconnect' || (!masterConfig.env &&\n typeof Components !== 'undefined' && Components.classes &&\n Components.interfaces)) {\n //Avert your gaze!\n Cc = Components.classes,\n Ci = Components.interfaces;\n Components.utils['import']('resource://gre/modules/FileUtils.jsm');\n xpcIsWindows = ('@mozilla.org/windows-registry-key;1' in Cc);\n\n text.get = function (url, callback) {\n var inStream, convertStream, fileObj,\n readData = {};\n\n if (xpcIsWindows) {\n url = url.replace(/\\//g, '\\\\');\n }\n\n fileObj = new FileUtils.File(url);\n\n //XPCOM, you so crazy\n try {\n inStream = Cc['@mozilla.org/network/file-input-stream;1']\n .createInstance(Ci.nsIFileInputStream);\n inStream.init(fileObj, 1, 0, false);\n\n convertStream = Cc['@mozilla.org/intl/converter-input-stream;1']\n .createInstance(Ci.nsIConverterInputStream);\n convertStream.init(inStream, \"utf-8\", inStream.available(),\n Ci.nsIConverterInputStream.DEFAULT_REPLACEMENT_CHARACTER);\n\n convertStream.readString(inStream.available(), readData);\n convertStream.close();\n inStream.close();\n callback(readData.value);\n } catch (e) {\n throw new Error((fileObj && fileObj.path || '') + ': ' + e);\n }\n };\n }\n return text;\n});\n\n","\ndefine('text!app/sample.txt',[],function () { return 'sample\\n\\n';});\n\n","/**\n * Module A\n */\ndefine('app/a',{\n name: 'a',\n doSomething: function (name) {\n console.log('starting doSomething');\n console.log('Hello ' + name);\n }\n});\nconsole.log('a is done');\n\n","define('app/main',['require','text!./sample.txt','./a'],function (require) {\n var text = require('text!./sample.txt'),\n a = require('./a');\n\n return {\n name: 'main',\n a: a,\n text: text \n };\n});\n\n\n","require.config({\n baseUrl: 'js/lib',\n paths: {\n app: '../app',\n text: 'text/text'\n }\n});\n\n/**\n * A test of source maps on a concatenated, but not minified file.\n */\nrequire(['app/main'], function (main) {\n console.log('in top level callback');\n console.log(main.a.doSomething('world'));\n console.log('finished top level callback');\n});\n\ndefine(\"app\", function(){});\n\n"]}r.js-2.3.6/build/tests/lib/sourcemap/onejs/www/000077500000000000000000000000001334071220400213415ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/sourcemap/onejs/www/index.html000066400000000000000000000002551334071220400233400ustar00rootroot00000000000000

Hello World

r.js-2.3.6/build/tests/lib/sourcemap/onejs/www/js/000077500000000000000000000000001334071220400217555ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/sourcemap/onejs/www/js/app.js000066400000000000000000000005601334071220400230740ustar00rootroot00000000000000require.config({ baseUrl: 'js/lib', paths: { app: '../app', text: 'text/text' } }); /** * A test of source maps on a concatenated, but not minified file. */ require(['app/main'], function (main) { console.log('in top level callback'); console.log(main.a.doSomething('world')); console.log('finished top level callback'); }); r.js-2.3.6/build/tests/lib/sourcemap/onejs/www/js/app/000077500000000000000000000000001334071220400225355ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/sourcemap/onejs/www/js/app/a.js000066400000000000000000000003061334071220400233120ustar00rootroot00000000000000/** * Module A */ define({ name: 'a', doSomething: function (name) { console.log('starting doSomething'); console.log('Hello ' + name); } }); console.log('a is done'); r.js-2.3.6/build/tests/lib/sourcemap/onejs/www/js/app/main.js000066400000000000000000000002671334071220400240240ustar00rootroot00000000000000define(function (require) { var text = require('text!./sample.txt'), a = require('./a'); return { name: 'main', a: a, text: text }; }); r.js-2.3.6/build/tests/lib/sourcemap/onejs/www/js/app/sample.txt000066400000000000000000000000101334071220400245460ustar00rootroot00000000000000sample r.js-2.3.6/build/tests/lib/sourcemap/onejs/www/js/lib/000077500000000000000000000000001334071220400225235ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/sourcemap/onejs/www/js/lib/text/000077500000000000000000000000001334071220400235075ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/sourcemap/onejs/www/js/lib/text/text.js000066400000000000000000000361501334071220400250360ustar00rootroot00000000000000/** * @license RequireJS text 2.0.10 Copyright (c) 2010-2012, The Dojo Foundation All Rights Reserved. * Available via the MIT or new BSD license. * see: http://github.com/requirejs/text for details */ /*jslint regexp: true */ /*global require, XMLHttpRequest, ActiveXObject, define, window, process, Packages, java, location, Components, FileUtils */ define(['module'], function (module) { 'use strict'; var text, fs, Cc, Ci, xpcIsWindows, progIds = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0'], xmlRegExp = /^\s*<\?xml(\s)+version=[\'\"](\d)*.(\d)*[\'\"](\s)*\?>/im, bodyRegExp = /]*>\s*([\s\S]+)\s*<\/body>/im, hasLocation = typeof location !== 'undefined' && location.href, defaultProtocol = hasLocation && location.protocol && location.protocol.replace(/\:/, ''), defaultHostName = hasLocation && location.hostname, defaultPort = hasLocation && (location.port || undefined), buildMap = {}, masterConfig = (module.config && module.config()) || {}; text = { version: '2.0.10', strip: function (content) { //Strips declarations so that external SVG and XML //documents can be added to a document without worry. Also, if the string //is an HTML document, only the part inside the body tag is returned. if (content) { content = content.replace(xmlRegExp, ""); var matches = content.match(bodyRegExp); if (matches) { content = matches[1]; } } else { content = ""; } return content; }, jsEscape: function (content) { return content.replace(/(['\\])/g, '\\$1') .replace(/[\f]/g, "\\f") .replace(/[\b]/g, "\\b") .replace(/[\n]/g, "\\n") .replace(/[\t]/g, "\\t") .replace(/[\r]/g, "\\r") .replace(/[\u2028]/g, "\\u2028") .replace(/[\u2029]/g, "\\u2029"); }, createXhr: masterConfig.createXhr || function () { //Would love to dump the ActiveX crap in here. Need IE 6 to die first. var xhr, i, progId; if (typeof XMLHttpRequest !== "undefined") { return new XMLHttpRequest(); } else if (typeof ActiveXObject !== "undefined") { for (i = 0; i < 3; i += 1) { progId = progIds[i]; try { xhr = new ActiveXObject(progId); } catch (e) {} if (xhr) { progIds = [progId]; // so faster next time break; } } } return xhr; }, /** * Parses a resource name into its component parts. Resource names * look like: module/name.ext!strip, where the !strip part is * optional. * @param {String} name the resource name * @returns {Object} with properties "moduleName", "ext" and "strip" * where strip is a boolean. */ parseName: function (name) { var modName, ext, temp, strip = false, index = name.indexOf("."), isRelative = name.indexOf('./') === 0 || name.indexOf('../') === 0; if (index !== -1 && (!isRelative || index > 1)) { modName = name.substring(0, index); ext = name.substring(index + 1, name.length); } else { modName = name; } temp = ext || modName; index = temp.indexOf("!"); if (index !== -1) { //Pull off the strip arg. strip = temp.substring(index + 1) === "strip"; temp = temp.substring(0, index); if (ext) { ext = temp; } else { modName = temp; } } return { moduleName: modName, ext: ext, strip: strip }; }, xdRegExp: /^((\w+)\:)?\/\/([^\/\\]+)/, /** * Is an URL on another domain. Only works for browser use, returns * false in non-browser environments. Only used to know if an * optimized .js version of a text resource should be loaded * instead. * @param {String} url * @returns Boolean */ useXhr: function (url, protocol, hostname, port) { var uProtocol, uHostName, uPort, match = text.xdRegExp.exec(url); if (!match) { return true; } uProtocol = match[2]; uHostName = match[3]; uHostName = uHostName.split(':'); uPort = uHostName[1]; uHostName = uHostName[0]; return (!uProtocol || uProtocol === protocol) && (!uHostName || uHostName.toLowerCase() === hostname.toLowerCase()) && ((!uPort && !uHostName) || uPort === port); }, finishLoad: function (name, strip, content, onLoad) { content = strip ? text.strip(content) : content; if (masterConfig.isBuild) { buildMap[name] = content; } onLoad(content); }, load: function (name, req, onLoad, config) { //Name has format: some.module.filext!strip //The strip part is optional. //if strip is present, then that means only get the string contents //inside a body tag in an HTML string. For XML/SVG content it means //removing the declarations so the content can be inserted //into the current doc without problems. // Do not bother with the work if a build and text will // not be inlined. if (config.isBuild && !config.inlineText) { onLoad(); return; } masterConfig.isBuild = config.isBuild; var parsed = text.parseName(name), nonStripName = parsed.moduleName + (parsed.ext ? '.' + parsed.ext : ''), url = req.toUrl(nonStripName), useXhr = (masterConfig.useXhr) || text.useXhr; // Do not load if it is an empty: url if (url.indexOf('empty:') === 0) { onLoad(); return; } //Load the text. Use XHR if possible and in a browser. if (!hasLocation || useXhr(url, defaultProtocol, defaultHostName, defaultPort)) { text.get(url, function (content) { text.finishLoad(name, parsed.strip, content, onLoad); }, function (err) { if (onLoad.error) { onLoad.error(err); } }); } else { //Need to fetch the resource across domains. Assume //the resource has been optimized into a JS module. Fetch //by the module name + extension, but do not include the //!strip part to avoid file system issues. req([nonStripName], function (content) { text.finishLoad(parsed.moduleName + '.' + parsed.ext, parsed.strip, content, onLoad); }); } }, write: function (pluginName, moduleName, write, config) { if (buildMap.hasOwnProperty(moduleName)) { var content = text.jsEscape(buildMap[moduleName]); write.asModule(pluginName + "!" + moduleName, "define(function () { return '" + content + "';});\n"); } }, writeFile: function (pluginName, moduleName, req, write, config) { var parsed = text.parseName(moduleName), extPart = parsed.ext ? '.' + parsed.ext : '', nonStripName = parsed.moduleName + extPart, //Use a '.js' file name so that it indicates it is a //script that can be loaded across domains. fileName = req.toUrl(parsed.moduleName + extPart) + '.js'; //Leverage own load() method to load plugin value, but only //write out values that do not have the strip argument, //to avoid any potential issues with ! in file names. text.load(nonStripName, req, function (value) { //Use own write() method to construct full module value. //But need to create shell that translates writeFile's //write() to the right interface. var textWrite = function (contents) { return write(fileName, contents); }; textWrite.asModule = function (moduleName, contents) { return write.asModule(moduleName, fileName, contents); }; text.write(pluginName, nonStripName, textWrite, config); }, config); } }; if (masterConfig.env === 'node' || (!masterConfig.env && typeof process !== "undefined" && process.versions && !!process.versions.node && !process.versions['node-webkit'])) { //Using special require.nodeRequire, something added by r.js. fs = require.nodeRequire('fs'); text.get = function (url, callback, errback) { try { var file = fs.readFileSync(url, 'utf8'); //Remove BOM (Byte Mark Order) from utf8 files if it is there. if (file.indexOf('\uFEFF') === 0) { file = file.substring(1); } callback(file); } catch (e) { errback(e); } }; } else if (masterConfig.env === 'xhr' || (!masterConfig.env && text.createXhr())) { text.get = function (url, callback, errback, headers) { var xhr = text.createXhr(), header; xhr.open('GET', url, true); //Allow plugins direct access to xhr headers if (headers) { for (header in headers) { if (headers.hasOwnProperty(header)) { xhr.setRequestHeader(header.toLowerCase(), headers[header]); } } } //Allow overrides specified in config if (masterConfig.onXhr) { masterConfig.onXhr(xhr, url); } xhr.onreadystatechange = function (evt) { var status, err; //Do not explicitly handle errors, those should be //visible via console output in the browser. if (xhr.readyState === 4) { status = xhr.status; if (status > 399 && status < 600) { //An http 4xx or 5xx error. Signal an error. err = new Error(url + ' HTTP status: ' + status); err.xhr = xhr; errback(err); } else { callback(xhr.responseText); } if (masterConfig.onXhrComplete) { masterConfig.onXhrComplete(xhr, url); } } }; xhr.send(null); }; } else if (masterConfig.env === 'rhino' || (!masterConfig.env && typeof Packages !== 'undefined' && typeof java !== 'undefined')) { //Why Java, why is this so awkward? text.get = function (url, callback) { var stringBuffer, line, encoding = "utf-8", file = new java.io.File(url), lineSeparator = java.lang.System.getProperty("line.separator"), input = new java.io.BufferedReader(new java.io.InputStreamReader(new java.io.FileInputStream(file), encoding)), content = ''; try { stringBuffer = new java.lang.StringBuffer(); line = input.readLine(); // Byte Order Mark (BOM) - The Unicode Standard, version 3.0, page 324 // http://www.unicode.org/faq/utf_bom.html // Note that when we use utf-8, the BOM should appear as "EF BB BF", but it doesn't due to this bug in the JDK: // http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4508058 if (line && line.length() && line.charAt(0) === 0xfeff) { // Eat the BOM, since we've already found the encoding on this file, // and we plan to concatenating this buffer with others; the BOM should // only appear at the top of a file. line = line.substring(1); } if (line !== null) { stringBuffer.append(line); } while ((line = input.readLine()) !== null) { stringBuffer.append(lineSeparator); stringBuffer.append(line); } //Make sure we return a JavaScript string and not a Java string. content = String(stringBuffer.toString()); //String } finally { input.close(); } callback(content); }; } else if (masterConfig.env === 'xpconnect' || (!masterConfig.env && typeof Components !== 'undefined' && Components.classes && Components.interfaces)) { //Avert your gaze! Cc = Components.classes, Ci = Components.interfaces; Components.utils['import']('resource://gre/modules/FileUtils.jsm'); xpcIsWindows = ('@mozilla.org/windows-registry-key;1' in Cc); text.get = function (url, callback) { var inStream, convertStream, fileObj, readData = {}; if (xpcIsWindows) { url = url.replace(/\//g, '\\'); } fileObj = new FileUtils.File(url); //XPCOM, you so crazy try { inStream = Cc['@mozilla.org/network/file-input-stream;1'] .createInstance(Ci.nsIFileInputStream); inStream.init(fileObj, 1, 0, false); convertStream = Cc['@mozilla.org/intl/converter-input-stream;1'] .createInstance(Ci.nsIConverterInputStream); convertStream.init(inStream, "utf-8", inStream.available(), Ci.nsIConverterInputStream.DEFAULT_REPLACEMENT_CHARACTER); convertStream.readString(inStream.available(), readData); convertStream.close(); inStream.close(); callback(readData.value); } catch (e) { throw new Error((fileObj && fileObj.path || '') + ': ' + e); } }; } return text; }); r.js-2.3.6/build/tests/lib/sourcemap/onejs/www/js/require.js000066400000000000000000002363161334071220400240020ustar00rootroot00000000000000/** vim: et:ts=4:sw=4:sts=4 * @license RequireJS 2.1.5 Copyright (c) 2010-2012, The Dojo Foundation All Rights Reserved. * Available via the MIT or new BSD license. * see: http://github.com/jrburke/requirejs for details */ //Not using strict: uneven strict support in browsers, #392, and causes //problems with requirejs.exec()/transpiler plugins that may not be strict. /*jslint regexp: true, nomen: true, sloppy: true */ /*global window, navigator, document, importScripts, setTimeout, opera */ var requirejs, require, define; (function (global) { var req, s, head, baseElement, dataMain, src, interactiveScript, currentlyAddingScript, mainScript, subPath, version = '2.1.5', commentRegExp = /(\/\*([\s\S]*?)\*\/|([^:]|^)\/\/(.*)$)/mg, cjsRequireRegExp = /[^.]\s*require\s*\(\s*["']([^'"\s]+)["']\s*\)/g, jsSuffixRegExp = /\.js$/, currDirRegExp = /^\.\//, op = Object.prototype, ostring = op.toString, hasOwn = op.hasOwnProperty, ap = Array.prototype, apsp = ap.splice, isBrowser = !!(typeof window !== 'undefined' && navigator && document), isWebWorker = !isBrowser && typeof importScripts !== 'undefined', //PS3 indicates loaded and complete, but need to wait for complete //specifically. Sequence is 'loading', 'loaded', execution, // then 'complete'. The UA check is unfortunate, but not sure how //to feature test w/o causing perf issues. readyRegExp = isBrowser && navigator.platform === 'PLAYSTATION 3' ? /^complete$/ : /^(complete|loaded)$/, defContextName = '_', //Oh the tragedy, detecting opera. See the usage of isOpera for reason. isOpera = typeof opera !== 'undefined' && opera.toString() === '[object Opera]', contexts = {}, cfg = {}, globalDefQueue = [], useInteractive = false; function isFunction(it) { return ostring.call(it) === '[object Function]'; } function isArray(it) { return ostring.call(it) === '[object Array]'; } /** * Helper function for iterating over an array. If the func returns * a true value, it will break out of the loop. */ function each(ary, func) { if (ary) { var i; for (i = 0; i < ary.length; i += 1) { if (ary[i] && func(ary[i], i, ary)) { break; } } } } /** * Helper function for iterating over an array backwards. If the func * returns a true value, it will break out of the loop. */ function eachReverse(ary, func) { if (ary) { var i; for (i = ary.length - 1; i > -1; i -= 1) { if (ary[i] && func(ary[i], i, ary)) { break; } } } } function hasProp(obj, prop) { return hasOwn.call(obj, prop); } function getOwn(obj, prop) { return hasProp(obj, prop) && obj[prop]; } /** * Cycles over properties in an object and calls a function for each * property value. If the function returns a truthy value, then the * iteration is stopped. */ function eachProp(obj, func) { var prop; for (prop in obj) { if (hasProp(obj, prop)) { if (func(obj[prop], prop)) { break; } } } } /** * Simple function to mix in properties from source into target, * but only if target does not already have a property of the same name. */ function mixin(target, source, force, deepStringMixin) { if (source) { eachProp(source, function (value, prop) { if (force || !hasProp(target, prop)) { if (deepStringMixin && typeof value !== 'string') { if (!target[prop]) { target[prop] = {}; } mixin(target[prop], value, force, deepStringMixin); } else { target[prop] = value; } } }); } return target; } //Similar to Function.prototype.bind, but the 'this' object is specified //first, since it is easier to read/figure out what 'this' will be. function bind(obj, fn) { return function () { return fn.apply(obj, arguments); }; } function scripts() { return document.getElementsByTagName('script'); } //Allow getting a global that expressed in //dot notation, like 'a.b.c'. function getGlobal(value) { if (!value) { return value; } var g = global; each(value.split('.'), function (part) { g = g[part]; }); return g; } /** * Constructs an error with a pointer to an URL with more information. * @param {String} id the error ID that maps to an ID on a web page. * @param {String} message human readable error. * @param {Error} [err] the original error, if there is one. * * @returns {Error} */ function makeError(id, msg, err, requireModules) { var e = new Error(msg + '\nhttp://requirejs.org/docs/errors.html#' + id); e.requireType = id; e.requireModules = requireModules; if (err) { e.originalError = err; } return e; } if (typeof define !== 'undefined') { //If a define is already in play via another AMD loader, //do not overwrite. return; } if (typeof requirejs !== 'undefined') { if (isFunction(requirejs)) { //Do not overwrite and existing requirejs instance. return; } cfg = requirejs; requirejs = undefined; } //Allow for a require config object if (typeof require !== 'undefined' && !isFunction(require)) { //assume it is a config object. cfg = require; require = undefined; } function newContext(contextName) { var inCheckLoaded, Module, context, handlers, checkLoadedTimeoutId, config = { //Defaults. Do not set a default for map //config to speed up normalize(), which //will run faster if there is no default. waitSeconds: 7, baseUrl: './', paths: {}, pkgs: {}, shim: {}, config: {} }, registry = {}, //registry of just enabled modules, to speed //cycle breaking code when lots of modules //are registered, but not activated. enabledRegistry = {}, undefEvents = {}, defQueue = [], defined = {}, urlFetched = {}, requireCounter = 1, unnormalizedCounter = 1; /** * Trims the . and .. from an array of path segments. * It will keep a leading path segment if a .. will become * the first path segment, to help with module name lookups, * which act like paths, but can be remapped. But the end result, * all paths that use this function should look normalized. * NOTE: this method MODIFIES the input array. * @param {Array} ary the array of path segments. */ function trimDots(ary) { var i, part; for (i = 0; ary[i]; i += 1) { part = ary[i]; if (part === '.') { ary.splice(i, 1); i -= 1; } else if (part === '..') { if (i === 1 && (ary[2] === '..' || ary[0] === '..')) { //End of the line. Keep at least one non-dot //path segment at the front so it can be mapped //correctly to disk. Otherwise, there is likely //no path mapping for a path starting with '..'. //This can still fail, but catches the most reasonable //uses of .. break; } else if (i > 0) { ary.splice(i - 1, 2); i -= 2; } } } } /** * Given a relative module name, like ./something, normalize it to * a real name that can be mapped to a path. * @param {String} name the relative name * @param {String} baseName a real name that the name arg is relative * to. * @param {Boolean} applyMap apply the map config to the value. Should * only be done if this normalization is for a dependency ID. * @returns {String} normalized name */ function normalize(name, baseName, applyMap) { var pkgName, pkgConfig, mapValue, nameParts, i, j, nameSegment, foundMap, foundI, foundStarMap, starI, baseParts = baseName && baseName.split('/'), normalizedBaseParts = baseParts, map = config.map, starMap = map && map['*']; //Adjust any relative paths. if (name && name.charAt(0) === '.') { //If have a base name, try to normalize against it, //otherwise, assume it is a top-level require that will //be relative to baseUrl in the end. if (baseName) { if (getOwn(config.pkgs, baseName)) { //If the baseName is a package name, then just treat it as one //name to concat the name with. normalizedBaseParts = baseParts = [baseName]; } else { //Convert baseName to array, and lop off the last part, //so that . matches that 'directory' and not name of the baseName's //module. For instance, baseName of 'one/two/three', maps to //'one/two/three.js', but we want the directory, 'one/two' for //this normalization. normalizedBaseParts = baseParts.slice(0, baseParts.length - 1); } name = normalizedBaseParts.concat(name.split('/')); trimDots(name); //Some use of packages may use a . path to reference the //'main' module name, so normalize for that. pkgConfig = getOwn(config.pkgs, (pkgName = name[0])); name = name.join('/'); if (pkgConfig && name === pkgName + '/' + pkgConfig.main) { name = pkgName; } } else if (name.indexOf('./') === 0) { // No baseName, so this is ID is resolved relative // to baseUrl, pull off the leading dot. name = name.substring(2); } } //Apply map config if available. if (applyMap && map && (baseParts || starMap)) { nameParts = name.split('/'); for (i = nameParts.length; i > 0; i -= 1) { nameSegment = nameParts.slice(0, i).join('/'); if (baseParts) { //Find the longest baseName segment match in the config. //So, do joins on the biggest to smallest lengths of baseParts. for (j = baseParts.length; j > 0; j -= 1) { mapValue = getOwn(map, baseParts.slice(0, j).join('/')); //baseName segment has config, find if it has one for //this name. if (mapValue) { mapValue = getOwn(mapValue, nameSegment); if (mapValue) { //Match, update name to the new value. foundMap = mapValue; foundI = i; break; } } } } if (foundMap) { break; } //Check for a star map match, but just hold on to it, //if there is a shorter segment match later in a matching //config, then favor over this star map. if (!foundStarMap && starMap && getOwn(starMap, nameSegment)) { foundStarMap = getOwn(starMap, nameSegment); starI = i; } } if (!foundMap && foundStarMap) { foundMap = foundStarMap; foundI = starI; } if (foundMap) { nameParts.splice(0, foundI, foundMap); name = nameParts.join('/'); } } return name; } function removeScript(name) { if (isBrowser) { each(scripts(), function (scriptNode) { if (scriptNode.getAttribute('data-requiremodule') === name && scriptNode.getAttribute('data-requirecontext') === context.contextName) { scriptNode.parentNode.removeChild(scriptNode); return true; } }); } } function hasPathFallback(id) { var pathConfig = getOwn(config.paths, id); if (pathConfig && isArray(pathConfig) && pathConfig.length > 1) { removeScript(id); //Pop off the first array value, since it failed, and //retry pathConfig.shift(); context.require.undef(id); context.require([id]); return true; } } //Turns a plugin!resource to [plugin, resource] //with the plugin being undefined if the name //did not have a plugin prefix. function splitPrefix(name) { var prefix, index = name ? name.indexOf('!') : -1; if (index > -1) { prefix = name.substring(0, index); name = name.substring(index + 1, name.length); } return [prefix, name]; } /** * Creates a module mapping that includes plugin prefix, module * name, and path. If parentModuleMap is provided it will * also normalize the name via require.normalize() * * @param {String} name the module name * @param {String} [parentModuleMap] parent module map * for the module name, used to resolve relative names. * @param {Boolean} isNormalized: is the ID already normalized. * This is true if this call is done for a define() module ID. * @param {Boolean} applyMap: apply the map config to the ID. * Should only be true if this map is for a dependency. * * @returns {Object} */ function makeModuleMap(name, parentModuleMap, isNormalized, applyMap) { var url, pluginModule, suffix, nameParts, prefix = null, parentName = parentModuleMap ? parentModuleMap.name : null, originalName = name, isDefine = true, normalizedName = ''; //If no name, then it means it is a require call, generate an //internal name. if (!name) { isDefine = false; name = '_@r' + (requireCounter += 1); } nameParts = splitPrefix(name); prefix = nameParts[0]; name = nameParts[1]; if (prefix) { prefix = normalize(prefix, parentName, applyMap); pluginModule = getOwn(defined, prefix); } //Account for relative paths if there is a base name. if (name) { if (prefix) { if (pluginModule && pluginModule.normalize) { //Plugin is loaded, use its normalize method. normalizedName = pluginModule.normalize(name, function (name) { return normalize(name, parentName, applyMap); }); } else { normalizedName = normalize(name, parentName, applyMap); } } else { //A regular module. normalizedName = normalize(name, parentName, applyMap); //Normalized name may be a plugin ID due to map config //application in normalize. The map config values must //already be normalized, so do not need to redo that part. nameParts = splitPrefix(normalizedName); prefix = nameParts[0]; normalizedName = nameParts[1]; isNormalized = true; url = context.nameToUrl(normalizedName); } } //If the id is a plugin id that cannot be determined if it needs //normalization, stamp it with a unique ID so two matching relative //ids that may conflict can be separate. suffix = prefix && !pluginModule && !isNormalized ? '_unnormalized' + (unnormalizedCounter += 1) : ''; return { prefix: prefix, name: normalizedName, parentMap: parentModuleMap, unnormalized: !!suffix, url: url, originalName: originalName, isDefine: isDefine, id: (prefix ? prefix + '!' + normalizedName : normalizedName) + suffix }; } function getModule(depMap) { var id = depMap.id, mod = getOwn(registry, id); if (!mod) { mod = registry[id] = new context.Module(depMap); } return mod; } function on(depMap, name, fn) { var id = depMap.id, mod = getOwn(registry, id); if (hasProp(defined, id) && (!mod || mod.defineEmitComplete)) { if (name === 'defined') { fn(defined[id]); } } else { getModule(depMap).on(name, fn); } } function onError(err, errback) { var ids = err.requireModules, notified = false; if (errback) { errback(err); } else { each(ids, function (id) { var mod = getOwn(registry, id); if (mod) { //Set error on module, so it skips timeout checks. mod.error = err; if (mod.events.error) { notified = true; mod.emit('error', err); } } }); if (!notified) { req.onError(err); } } } /** * Internal method to transfer globalQueue items to this context's * defQueue. */ function takeGlobalQueue() { //Push all the globalDefQueue items into the context's defQueue if (globalDefQueue.length) { //Array splice in the values since the context code has a //local var ref to defQueue, so cannot just reassign the one //on context. apsp.apply(defQueue, [defQueue.length - 1, 0].concat(globalDefQueue)); globalDefQueue = []; } } handlers = { 'require': function (mod) { if (mod.require) { return mod.require; } else { return (mod.require = context.makeRequire(mod.map)); } }, 'exports': function (mod) { mod.usingExports = true; if (mod.map.isDefine) { if (mod.exports) { return mod.exports; } else { return (mod.exports = defined[mod.map.id] = {}); } } }, 'module': function (mod) { if (mod.module) { return mod.module; } else { return (mod.module = { id: mod.map.id, uri: mod.map.url, config: function () { return (config.config && getOwn(config.config, mod.map.id)) || {}; }, exports: defined[mod.map.id] }); } } }; function cleanRegistry(id) { //Clean up machinery used for waiting modules. delete registry[id]; delete enabledRegistry[id]; } function breakCycle(mod, traced, processed) { var id = mod.map.id; if (mod.error) { mod.emit('error', mod.error); } else { traced[id] = true; each(mod.depMaps, function (depMap, i) { var depId = depMap.id, dep = getOwn(registry, depId); //Only force things that have not completed //being defined, so still in the registry, //and only if it has not been matched up //in the module already. if (dep && !mod.depMatched[i] && !processed[depId]) { if (getOwn(traced, depId)) { mod.defineDep(i, defined[depId]); mod.check(); //pass false? } else { breakCycle(dep, traced, processed); } } }); processed[id] = true; } } function checkLoaded() { var map, modId, err, usingPathFallback, waitInterval = config.waitSeconds * 1000, //It is possible to disable the wait interval by using waitSeconds of 0. expired = waitInterval && (context.startTime + waitInterval) < new Date().getTime(), noLoads = [], reqCalls = [], stillLoading = false, needCycleCheck = true; //Do not bother if this call was a result of a cycle break. if (inCheckLoaded) { return; } inCheckLoaded = true; //Figure out the state of all the modules. eachProp(enabledRegistry, function (mod) { map = mod.map; modId = map.id; //Skip things that are not enabled or in error state. if (!mod.enabled) { return; } if (!map.isDefine) { reqCalls.push(mod); } if (!mod.error) { //If the module should be executed, and it has not //been inited and time is up, remember it. if (!mod.inited && expired) { if (hasPathFallback(modId)) { usingPathFallback = true; stillLoading = true; } else { noLoads.push(modId); removeScript(modId); } } else if (!mod.inited && mod.fetched && map.isDefine) { stillLoading = true; if (!map.prefix) { //No reason to keep looking for unfinished //loading. If the only stillLoading is a //plugin resource though, keep going, //because it may be that a plugin resource //is waiting on a non-plugin cycle. return (needCycleCheck = false); } } } }); if (expired && noLoads.length) { //If wait time expired, throw error of unloaded modules. err = makeError('timeout', 'Load timeout for modules: ' + noLoads, null, noLoads); err.contextName = context.contextName; return onError(err); } //Not expired, check for a cycle. if (needCycleCheck) { each(reqCalls, function (mod) { breakCycle(mod, {}, {}); }); } //If still waiting on loads, and the waiting load is something //other than a plugin resource, or there are still outstanding //scripts, then just try back later. if ((!expired || usingPathFallback) && stillLoading) { //Something is still waiting to load. Wait for it, but only //if a timeout is not already in effect. if ((isBrowser || isWebWorker) && !checkLoadedTimeoutId) { checkLoadedTimeoutId = setTimeout(function () { checkLoadedTimeoutId = 0; checkLoaded(); }, 50); } } inCheckLoaded = false; } Module = function (map) { this.events = getOwn(undefEvents, map.id) || {}; this.map = map; this.shim = getOwn(config.shim, map.id); this.depExports = []; this.depMaps = []; this.depMatched = []; this.pluginMaps = {}; this.depCount = 0; /* this.exports this.factory this.depMaps = [], this.enabled, this.fetched */ }; Module.prototype = { init: function (depMaps, factory, errback, options) { options = options || {}; //Do not do more inits if already done. Can happen if there //are multiple define calls for the same module. That is not //a normal, common case, but it is also not unexpected. if (this.inited) { return; } this.factory = factory; if (errback) { //Register for errors on this module. this.on('error', errback); } else if (this.events.error) { //If no errback already, but there are error listeners //on this module, set up an errback to pass to the deps. errback = bind(this, function (err) { this.emit('error', err); }); } //Do a copy of the dependency array, so that //source inputs are not modified. For example //"shim" deps are passed in here directly, and //doing a direct modification of the depMaps array //would affect that config. this.depMaps = depMaps && depMaps.slice(0); this.errback = errback; //Indicate this module has be initialized this.inited = true; this.ignore = options.ignore; //Could have option to init this module in enabled mode, //or could have been previously marked as enabled. However, //the dependencies are not known until init is called. So //if enabled previously, now trigger dependencies as enabled. if (options.enabled || this.enabled) { //Enable this module and dependencies. //Will call this.check() this.enable(); } else { this.check(); } }, defineDep: function (i, depExports) { //Because of cycles, defined callback for a given //export can be called more than once. if (!this.depMatched[i]) { this.depMatched[i] = true; this.depCount -= 1; this.depExports[i] = depExports; } }, fetch: function () { if (this.fetched) { return; } this.fetched = true; context.startTime = (new Date()).getTime(); var map = this.map; //If the manager is for a plugin managed resource, //ask the plugin to load it now. if (this.shim) { context.makeRequire(this.map, { enableBuildCallback: true })(this.shim.deps || [], bind(this, function () { return map.prefix ? this.callPlugin() : this.load(); })); } else { //Regular dependency. return map.prefix ? this.callPlugin() : this.load(); } }, load: function () { var url = this.map.url; //Regular dependency. if (!urlFetched[url]) { urlFetched[url] = true; context.load(this.map.id, url); } }, /** * Checks if the module is ready to define itself, and if so, * define it. */ check: function () { if (!this.enabled || this.enabling) { return; } var err, cjsModule, id = this.map.id, depExports = this.depExports, exports = this.exports, factory = this.factory; if (!this.inited) { this.fetch(); } else if (this.error) { this.emit('error', this.error); } else if (!this.defining) { //The factory could trigger another require call //that would result in checking this module to //define itself again. If already in the process //of doing that, skip this work. this.defining = true; if (this.depCount < 1 && !this.defined) { if (isFunction(factory)) { //If there is an error listener, favor passing //to that instead of throwing an error. if (this.events.error) { try { exports = context.execCb(id, factory, depExports, exports); } catch (e) { err = e; } } else { exports = context.execCb(id, factory, depExports, exports); } if (this.map.isDefine) { //If setting exports via 'module' is in play, //favor that over return value and exports. After that, //favor a non-undefined return value over exports use. cjsModule = this.module; if (cjsModule && cjsModule.exports !== undefined && //Make sure it is not already the exports value cjsModule.exports !== this.exports) { exports = cjsModule.exports; } else if (exports === undefined && this.usingExports) { //exports already set the defined value. exports = this.exports; } } if (err) { err.requireMap = this.map; err.requireModules = [this.map.id]; err.requireType = 'define'; return onError((this.error = err)); } } else { //Just a literal value exports = factory; } this.exports = exports; if (this.map.isDefine && !this.ignore) { defined[id] = exports; if (req.onResourceLoad) { req.onResourceLoad(context, this.map, this.depMaps); } } //Clean up cleanRegistry(id); this.defined = true; } //Finished the define stage. Allow calling check again //to allow define notifications below in the case of a //cycle. this.defining = false; if (this.defined && !this.defineEmitted) { this.defineEmitted = true; this.emit('defined', this.exports); this.defineEmitComplete = true; } } }, callPlugin: function () { var map = this.map, id = map.id, //Map already normalized the prefix. pluginMap = makeModuleMap(map.prefix); //Mark this as a dependency for this plugin, so it //can be traced for cycles. this.depMaps.push(pluginMap); on(pluginMap, 'defined', bind(this, function (plugin) { var load, normalizedMap, normalizedMod, name = this.map.name, parentName = this.map.parentMap ? this.map.parentMap.name : null, localRequire = context.makeRequire(map.parentMap, { enableBuildCallback: true }); //If current map is not normalized, wait for that //normalized name to load instead of continuing. if (this.map.unnormalized) { //Normalize the ID if the plugin allows it. if (plugin.normalize) { name = plugin.normalize(name, function (name) { return normalize(name, parentName, true); }) || ''; } //prefix and name should already be normalized, no need //for applying map config again either. normalizedMap = makeModuleMap(map.prefix + '!' + name, this.map.parentMap); on(normalizedMap, 'defined', bind(this, function (value) { this.init([], function () { return value; }, null, { enabled: true, ignore: true }); })); normalizedMod = getOwn(registry, normalizedMap.id); if (normalizedMod) { //Mark this as a dependency for this plugin, so it //can be traced for cycles. this.depMaps.push(normalizedMap); if (this.events.error) { normalizedMod.on('error', bind(this, function (err) { this.emit('error', err); })); } normalizedMod.enable(); } return; } load = bind(this, function (value) { this.init([], function () { return value; }, null, { enabled: true }); }); load.error = bind(this, function (err) { this.inited = true; this.error = err; err.requireModules = [id]; //Remove temp unnormalized modules for this module, //since they will never be resolved otherwise now. eachProp(registry, function (mod) { if (mod.map.id.indexOf(id + '_unnormalized') === 0) { cleanRegistry(mod.map.id); } }); onError(err); }); //Allow plugins to load other code without having to know the //context or how to 'complete' the load. load.fromText = bind(this, function (text, textAlt) { /*jslint evil: true */ var moduleName = map.name, moduleMap = makeModuleMap(moduleName), hasInteractive = useInteractive; //As of 2.1.0, support just passing the text, to reinforce //fromText only being called once per resource. Still //support old style of passing moduleName but discard //that moduleName in favor of the internal ref. if (textAlt) { text = textAlt; } //Turn off interactive script matching for IE for any define //calls in the text, then turn it back on at the end. if (hasInteractive) { useInteractive = false; } //Prime the system by creating a module instance for //it. getModule(moduleMap); //Transfer any config to this other module. if (hasProp(config.config, id)) { config.config[moduleName] = config.config[id]; } try { req.exec(text); } catch (e) { return onError(makeError('fromtexteval', 'fromText eval for ' + id + ' failed: ' + e, e, [id])); } if (hasInteractive) { useInteractive = true; } //Mark this as a dependency for the plugin //resource this.depMaps.push(moduleMap); //Support anonymous modules. context.completeLoad(moduleName); //Bind the value of that module to the value for this //resource ID. localRequire([moduleName], load); }); //Use parentName here since the plugin's name is not reliable, //could be some weird string with no path that actually wants to //reference the parentName's path. plugin.load(map.name, localRequire, load, config); })); context.enable(pluginMap, this); this.pluginMaps[pluginMap.id] = pluginMap; }, enable: function () { enabledRegistry[this.map.id] = this; this.enabled = true; //Set flag mentioning that the module is enabling, //so that immediate calls to the defined callbacks //for dependencies do not trigger inadvertent load //with the depCount still being zero. this.enabling = true; //Enable each dependency each(this.depMaps, bind(this, function (depMap, i) { var id, mod, handler; if (typeof depMap === 'string') { //Dependency needs to be converted to a depMap //and wired up to this module. depMap = makeModuleMap(depMap, (this.map.isDefine ? this.map : this.map.parentMap), false, !this.skipMap); this.depMaps[i] = depMap; handler = getOwn(handlers, depMap.id); if (handler) { this.depExports[i] = handler(this); return; } this.depCount += 1; on(depMap, 'defined', bind(this, function (depExports) { this.defineDep(i, depExports); this.check(); })); if (this.errback) { on(depMap, 'error', this.errback); } } id = depMap.id; mod = registry[id]; //Skip special modules like 'require', 'exports', 'module' //Also, don't call enable if it is already enabled, //important in circular dependency cases. if (!hasProp(handlers, id) && mod && !mod.enabled) { context.enable(depMap, this); } })); //Enable each plugin that is used in //a dependency eachProp(this.pluginMaps, bind(this, function (pluginMap) { var mod = getOwn(registry, pluginMap.id); if (mod && !mod.enabled) { context.enable(pluginMap, this); } })); this.enabling = false; this.check(); }, on: function (name, cb) { var cbs = this.events[name]; if (!cbs) { cbs = this.events[name] = []; } cbs.push(cb); }, emit: function (name, evt) { each(this.events[name], function (cb) { cb(evt); }); if (name === 'error') { //Now that the error handler was triggered, remove //the listeners, since this broken Module instance //can stay around for a while in the registry. delete this.events[name]; } } }; function callGetModule(args) { //Skip modules already defined. if (!hasProp(defined, args[0])) { getModule(makeModuleMap(args[0], null, true)).init(args[1], args[2]); } } function removeListener(node, func, name, ieName) { //Favor detachEvent because of IE9 //issue, see attachEvent/addEventListener comment elsewhere //in this file. if (node.detachEvent && !isOpera) { //Probably IE. If not it will throw an error, which will be //useful to know. if (ieName) { node.detachEvent(ieName, func); } } else { node.removeEventListener(name, func, false); } } /** * Given an event from a script node, get the requirejs info from it, * and then removes the event listeners on the node. * @param {Event} evt * @returns {Object} */ function getScriptData(evt) { //Using currentTarget instead of target for Firefox 2.0's sake. Not //all old browsers will be supported, but this one was easy enough //to support and still makes sense. var node = evt.currentTarget || evt.srcElement; //Remove the listeners once here. removeListener(node, context.onScriptLoad, 'load', 'onreadystatechange'); removeListener(node, context.onScriptError, 'error'); return { node: node, id: node && node.getAttribute('data-requiremodule') }; } function intakeDefines() { var args; //Any defined modules in the global queue, intake them now. takeGlobalQueue(); //Make sure any remaining defQueue items get properly processed. while (defQueue.length) { args = defQueue.shift(); if (args[0] === null) { return onError(makeError('mismatch', 'Mismatched anonymous define() module: ' + args[args.length - 1])); } else { //args are id, deps, factory. Should be normalized by the //define() function. callGetModule(args); } } } context = { config: config, contextName: contextName, registry: registry, defined: defined, urlFetched: urlFetched, defQueue: defQueue, Module: Module, makeModuleMap: makeModuleMap, nextTick: req.nextTick, onError: onError, /** * Set a configuration for the context. * @param {Object} cfg config object to integrate. */ configure: function (cfg) { //Make sure the baseUrl ends in a slash. if (cfg.baseUrl) { if (cfg.baseUrl.charAt(cfg.baseUrl.length - 1) !== '/') { cfg.baseUrl += '/'; } } //Save off the paths and packages since they require special processing, //they are additive. var pkgs = config.pkgs, shim = config.shim, objs = { paths: true, config: true, map: true }; eachProp(cfg, function (value, prop) { if (objs[prop]) { if (prop === 'map') { if (!config.map) { config.map = {}; } mixin(config[prop], value, true, true); } else { mixin(config[prop], value, true); } } else { config[prop] = value; } }); //Merge shim if (cfg.shim) { eachProp(cfg.shim, function (value, id) { //Normalize the structure if (isArray(value)) { value = { deps: value }; } if ((value.exports || value.init) && !value.exportsFn) { value.exportsFn = context.makeShimExports(value); } shim[id] = value; }); config.shim = shim; } //Adjust packages if necessary. if (cfg.packages) { each(cfg.packages, function (pkgObj) { var location; pkgObj = typeof pkgObj === 'string' ? { name: pkgObj } : pkgObj; location = pkgObj.location; //Create a brand new object on pkgs, since currentPackages can //be passed in again, and config.pkgs is the internal transformed //state for all package configs. pkgs[pkgObj.name] = { name: pkgObj.name, location: location || pkgObj.name, //Remove leading dot in main, so main paths are normalized, //and remove any trailing .js, since different package //envs have different conventions: some use a module name, //some use a file name. main: (pkgObj.main || 'main') .replace(currDirRegExp, '') .replace(jsSuffixRegExp, '') }; }); //Done with modifications, assing packages back to context config config.pkgs = pkgs; } //If there are any "waiting to execute" modules in the registry, //update the maps for them, since their info, like URLs to load, //may have changed. eachProp(registry, function (mod, id) { //If module already has init called, since it is too //late to modify them, and ignore unnormalized ones //since they are transient. if (!mod.inited && !mod.map.unnormalized) { mod.map = makeModuleMap(id); } }); //If a deps array or a config callback is specified, then call //require with those args. This is useful when require is defined as a //config object before require.js is loaded. if (cfg.deps || cfg.callback) { context.require(cfg.deps || [], cfg.callback); } }, makeShimExports: function (value) { function fn() { var ret; if (value.init) { ret = value.init.apply(global, arguments); } return ret || (value.exports && getGlobal(value.exports)); } return fn; }, makeRequire: function (relMap, options) { options = options || {}; function localRequire(deps, callback, errback) { var id, map, requireMod; if (options.enableBuildCallback && callback && isFunction(callback)) { callback.__requireJsBuild = true; } if (typeof deps === 'string') { if (isFunction(callback)) { //Invalid call return onError(makeError('requireargs', 'Invalid require call'), errback); } //If require|exports|module are requested, get the //value for them from the special handlers. Caveat: //this only works while module is being defined. if (relMap && hasProp(handlers, deps)) { return handlers[deps](registry[relMap.id]); } //Synchronous access to one module. If require.get is //available (as in the Node adapter), prefer that. if (req.get) { return req.get(context, deps, relMap, localRequire); } //Normalize module name, if it contains . or .. map = makeModuleMap(deps, relMap, false, true); id = map.id; if (!hasProp(defined, id)) { return onError(makeError('notloaded', 'Module name "' + id + '" has not been loaded yet for context: ' + contextName + (relMap ? '' : '. Use require([])'))); } return defined[id]; } //Grab defines waiting in the global queue. intakeDefines(); //Mark all the dependencies as needing to be loaded. context.nextTick(function () { //Some defines could have been added since the //require call, collect them. intakeDefines(); requireMod = getModule(makeModuleMap(null, relMap)); //Store if map config should be applied to this require //call for dependencies. requireMod.skipMap = options.skipMap; requireMod.init(deps, callback, errback, { enabled: true }); checkLoaded(); }); return localRequire; } mixin(localRequire, { isBrowser: isBrowser, /** * Converts a module name + .extension into an URL path. * *Requires* the use of a module name. It does not support using * plain URLs like nameToUrl. */ toUrl: function (moduleNamePlusExt) { var ext, index = moduleNamePlusExt.lastIndexOf('.'), segment = moduleNamePlusExt.split('/')[0], isRelative = segment === '.' || segment === '..'; //Have a file extension alias, and it is not the //dots from a relative path. if (index !== -1 && (!isRelative || index > 1)) { ext = moduleNamePlusExt.substring(index, moduleNamePlusExt.length); moduleNamePlusExt = moduleNamePlusExt.substring(0, index); } return context.nameToUrl(normalize(moduleNamePlusExt, relMap && relMap.id, true), ext, true); }, defined: function (id) { return hasProp(defined, makeModuleMap(id, relMap, false, true).id); }, specified: function (id) { id = makeModuleMap(id, relMap, false, true).id; return hasProp(defined, id) || hasProp(registry, id); } }); //Only allow undef on top level require calls if (!relMap) { localRequire.undef = function (id) { //Bind any waiting define() calls to this context, //fix for #408 takeGlobalQueue(); var map = makeModuleMap(id, relMap, true), mod = getOwn(registry, id); delete defined[id]; delete urlFetched[map.url]; delete undefEvents[id]; if (mod) { //Hold on to listeners in case the //module will be attempted to be reloaded //using a different config. if (mod.events.defined) { undefEvents[id] = mod.events; } cleanRegistry(id); } }; } return localRequire; }, /** * Called to enable a module if it is still in the registry * awaiting enablement. A second arg, parent, the parent module, * is passed in for context, when this method is overriden by * the optimizer. Not shown here to keep code compact. */ enable: function (depMap) { var mod = getOwn(registry, depMap.id); if (mod) { getModule(depMap).enable(); } }, /** * Internal method used by environment adapters to complete a load event. * A load event could be a script load or just a load pass from a synchronous * load call. * @param {String} moduleName the name of the module to potentially complete. */ completeLoad: function (moduleName) { var found, args, mod, shim = getOwn(config.shim, moduleName) || {}, shExports = shim.exports; takeGlobalQueue(); while (defQueue.length) { args = defQueue.shift(); if (args[0] === null) { args[0] = moduleName; //If already found an anonymous module and bound it //to this name, then this is some other anon module //waiting for its completeLoad to fire. if (found) { break; } found = true; } else if (args[0] === moduleName) { //Found matching define call for this script! found = true; } callGetModule(args); } //Do this after the cycle of callGetModule in case the result //of those calls/init calls changes the registry. mod = getOwn(registry, moduleName); if (!found && !hasProp(defined, moduleName) && mod && !mod.inited) { if (config.enforceDefine && (!shExports || !getGlobal(shExports))) { if (hasPathFallback(moduleName)) { return; } else { return onError(makeError('nodefine', 'No define call for ' + moduleName, null, [moduleName])); } } else { //A script that does not call define(), so just simulate //the call for it. callGetModule([moduleName, (shim.deps || []), shim.exportsFn]); } } checkLoaded(); }, /** * Converts a module name to a file path. Supports cases where * moduleName may actually be just an URL. * Note that it **does not** call normalize on the moduleName, * it is assumed to have already been normalized. This is an * internal API, not a public one. Use toUrl for the public API. */ nameToUrl: function (moduleName, ext, skipExt) { var paths, pkgs, pkg, pkgPath, syms, i, parentModule, url, parentPath; //If a colon is in the URL, it indicates a protocol is used and it is just //an URL to a file, or if it starts with a slash, contains a query arg (i.e. ?) //or ends with .js, then assume the user meant to use an url and not a module id. //The slash is important for protocol-less URLs as well as full paths. if (req.jsExtRegExp.test(moduleName)) { //Just a plain path, not module name lookup, so just return it. //Add extension if it is included. This is a bit wonky, only non-.js things pass //an extension, this method probably needs to be reworked. url = moduleName + (ext || ''); } else { //A module that needs to be converted to a path. paths = config.paths; pkgs = config.pkgs; syms = moduleName.split('/'); //For each module name segment, see if there is a path //registered for it. Start with most specific name //and work up from it. for (i = syms.length; i > 0; i -= 1) { parentModule = syms.slice(0, i).join('/'); pkg = getOwn(pkgs, parentModule); parentPath = getOwn(paths, parentModule); if (parentPath) { //If an array, it means there are a few choices, //Choose the one that is desired if (isArray(parentPath)) { parentPath = parentPath[0]; } syms.splice(0, i, parentPath); break; } else if (pkg) { //If module name is just the package name, then looking //for the main module. if (moduleName === pkg.name) { pkgPath = pkg.location + '/' + pkg.main; } else { pkgPath = pkg.location; } syms.splice(0, i, pkgPath); break; } } //Join the path parts together, then figure out if baseUrl is needed. url = syms.join('/'); url += (ext || (/\?/.test(url) || skipExt ? '' : '.js')); url = (url.charAt(0) === '/' || url.match(/^[\w\+\.\-]+:/) ? '' : config.baseUrl) + url; } return config.urlArgs ? url + ((url.indexOf('?') === -1 ? '?' : '&') + config.urlArgs) : url; }, //Delegates to req.load. Broken out as a separate function to //allow overriding in the optimizer. load: function (id, url) { req.load(context, id, url); }, /** * Executes a module callack function. Broken out as a separate function * solely to allow the build system to sequence the files in the built * layer in the right sequence. * * @private */ execCb: function (name, callback, args, exports) { return callback.apply(exports, args); }, /** * callback for script loads, used to check status of loading. * * @param {Event} evt the event from the browser for the script * that was loaded. */ onScriptLoad: function (evt) { //Using currentTarget instead of target for Firefox 2.0's sake. Not //all old browsers will be supported, but this one was easy enough //to support and still makes sense. if (evt.type === 'load' || (readyRegExp.test((evt.currentTarget || evt.srcElement).readyState))) { //Reset interactive script so a script node is not held onto for //to long. interactiveScript = null; //Pull out the name of the module and the context. var data = getScriptData(evt); context.completeLoad(data.id); } }, /** * Callback for script errors. */ onScriptError: function (evt) { var data = getScriptData(evt); if (!hasPathFallback(data.id)) { return onError(makeError('scripterror', 'Script error', evt, [data.id])); } } }; context.require = context.makeRequire(); return context; } /** * Main entry point. * * If the only argument to require is a string, then the module that * is represented by that string is fetched for the appropriate context. * * If the first argument is an array, then it will be treated as an array * of dependency string names to fetch. An optional function callback can * be specified to execute when all of those dependencies are available. * * Make a local req variable to help Caja compliance (it assumes things * on a require that are not standardized), and to give a short * name for minification/local scope use. */ req = requirejs = function (deps, callback, errback, optional) { //Find the right context, use default var context, config, contextName = defContextName; // Determine if have config object in the call. if (!isArray(deps) && typeof deps !== 'string') { // deps is a config object config = deps; if (isArray(callback)) { // Adjust args if there are dependencies deps = callback; callback = errback; errback = optional; } else { deps = []; } } if (config && config.context) { contextName = config.context; } context = getOwn(contexts, contextName); if (!context) { context = contexts[contextName] = req.s.newContext(contextName); } if (config) { context.configure(config); } return context.require(deps, callback, errback); }; /** * Support require.config() to make it easier to cooperate with other * AMD loaders on globally agreed names. */ req.config = function (config) { return req(config); }; /** * Execute something after the current tick * of the event loop. Override for other envs * that have a better solution than setTimeout. * @param {Function} fn function to execute later. */ req.nextTick = typeof setTimeout !== 'undefined' ? function (fn) { setTimeout(fn, 4); } : function (fn) { fn(); }; /** * Export require as a global, but only if it does not already exist. */ if (!require) { require = req; } req.version = version; //Used to filter out dependencies that are already paths. req.jsExtRegExp = /^\/|:|\?|\.js$/; req.isBrowser = isBrowser; s = req.s = { contexts: contexts, newContext: newContext }; //Create default context. req({}); //Exports some context-sensitive methods on global require. each([ 'toUrl', 'undef', 'defined', 'specified' ], function (prop) { //Reference from contexts instead of early binding to default context, //so that during builds, the latest instance of the default context //with its config gets used. req[prop] = function () { var ctx = contexts[defContextName]; return ctx.require[prop].apply(ctx, arguments); }; }); if (isBrowser) { head = s.head = document.getElementsByTagName('head')[0]; //If BASE tag is in play, using appendChild is a problem for IE6. //When that browser dies, this can be removed. Details in this jQuery bug: //http://dev.jquery.com/ticket/2709 baseElement = document.getElementsByTagName('base')[0]; if (baseElement) { head = s.head = baseElement.parentNode; } } /** * Any errors that require explicitly generates will be passed to this * function. Intercept/override it if you want custom error handling. * @param {Error} err the error object. */ req.onError = function (err) { throw err; }; /** * Does the request to load a module for the browser case. * Make this a separate function to allow other environments * to override it. * * @param {Object} context the require context to find state. * @param {String} moduleName the name of the module. * @param {Object} url the URL to the module. */ req.load = function (context, moduleName, url) { var config = (context && context.config) || {}, node; if (isBrowser) { //In the browser so use a script tag node = config.xhtml ? document.createElementNS('http://www.w3.org/1999/xhtml', 'html:script') : document.createElement('script'); node.type = config.scriptType || 'text/javascript'; node.charset = 'utf-8'; node.async = true; node.setAttribute('data-requirecontext', context.contextName); node.setAttribute('data-requiremodule', moduleName); //Set up load listener. Test attachEvent first because IE9 has //a subtle issue in its addEventListener and script onload firings //that do not match the behavior of all other browsers with //addEventListener support, which fire the onload event for a //script right after the script execution. See: //https://connect.microsoft.com/IE/feedback/details/648057/script-onload-event-is-not-fired-immediately-after-script-execution //UNFORTUNATELY Opera implements attachEvent but does not follow the script //script execution mode. if (node.attachEvent && //Check if node.attachEvent is artificially added by custom script or //natively supported by browser //read https://github.com/jrburke/requirejs/issues/187 //if we can NOT find [native code] then it must NOT natively supported. //in IE8, node.attachEvent does not have toString() //Note the test for "[native code" with no closing brace, see: //https://github.com/jrburke/requirejs/issues/273 !(node.attachEvent.toString && node.attachEvent.toString().indexOf('[native code') < 0) && !isOpera) { //Probably IE. IE (at least 6-8) do not fire //script onload right after executing the script, so //we cannot tie the anonymous define call to a name. //However, IE reports the script as being in 'interactive' //readyState at the time of the define call. useInteractive = true; node.attachEvent('onreadystatechange', context.onScriptLoad); //It would be great to add an error handler here to catch //404s in IE9+. However, onreadystatechange will fire before //the error handler, so that does not help. If addEventListener //is used, then IE will fire error before load, but we cannot //use that pathway given the connect.microsoft.com issue //mentioned above about not doing the 'script execute, //then fire the script load event listener before execute //next script' that other browsers do. //Best hope: IE10 fixes the issues, //and then destroys all installs of IE 6-9. //node.attachEvent('onerror', context.onScriptError); } else { node.addEventListener('load', context.onScriptLoad, false); node.addEventListener('error', context.onScriptError, false); } node.src = url; //For some cache cases in IE 6-8, the script executes before the end //of the appendChild execution, so to tie an anonymous define //call to the module name (which is stored on the node), hold on //to a reference to this node, but clear after the DOM insertion. currentlyAddingScript = node; if (baseElement) { head.insertBefore(node, baseElement); } else { head.appendChild(node); } currentlyAddingScript = null; return node; } else if (isWebWorker) { try { //In a web worker, use importScripts. This is not a very //efficient use of importScripts, importScripts will block until //its script is downloaded and evaluated. However, if web workers //are in play, the expectation that a build has been done so that //only one script needs to be loaded anyway. This may need to be //reevaluated if other use cases become common. importScripts(url); //Account for anonymous modules context.completeLoad(moduleName); } catch (e) { context.onError(makeError('importscripts', 'importScripts failed for ' + moduleName + ' at ' + url, e, [moduleName])); } } }; function getInteractiveScript() { if (interactiveScript && interactiveScript.readyState === 'interactive') { return interactiveScript; } eachReverse(scripts(), function (script) { if (script.readyState === 'interactive') { return (interactiveScript = script); } }); return interactiveScript; } //Look for a data-main script attribute, which could also adjust the baseUrl. if (isBrowser) { //Figure out baseUrl. Get it from the script tag with require.js in it. eachReverse(scripts(), function (script) { //Set the 'head' where we can append children by //using the script's parent. if (!head) { head = script.parentNode; } //Look for a data-main attribute to set main script for the page //to load. If it is there, the path to data main becomes the //baseUrl, if it is not already set. dataMain = script.getAttribute('data-main'); if (dataMain) { //Set final baseUrl if there is not already an explicit one. if (!cfg.baseUrl) { //Pull off the directory of data-main for use as the //baseUrl. src = dataMain.split('/'); mainScript = src.pop(); subPath = src.length ? src.join('/') + '/' : './'; cfg.baseUrl = subPath; dataMain = mainScript; } //Strip off any trailing .js since dataMain is now //like a module name. dataMain = dataMain.replace(jsSuffixRegExp, ''); //Put the data-main script in the files to load. cfg.deps = cfg.deps ? cfg.deps.concat(dataMain) : [dataMain]; return true; } }); } /** * The function that handles definitions of modules. Differs from * require() in that a string for the module should be the first argument, * and the function to execute after dependencies are loaded should * return a value to define the module corresponding to the first argument's * name. */ define = function (name, deps, callback) { var node, context; //Allow for anonymous modules if (typeof name !== 'string') { //Adjust args appropriately callback = deps; deps = name; name = null; } //This module may not have dependencies if (!isArray(deps)) { callback = deps; deps = []; } //If no name, and callback is a function, then figure out if it a //CommonJS thing with dependencies. if (!deps.length && isFunction(callback)) { //Remove comments from the callback string, //look for require calls, and pull them into the dependencies, //but only if there are function args. if (callback.length) { callback .toString() .replace(commentRegExp, '') .replace(cjsRequireRegExp, function (match, dep) { deps.push(dep); }); //May be a CommonJS thing even without require calls, but still //could use exports, and module. Avoid doing exports and module //work though if it just needs require. //REQUIRES the function to expect the CommonJS variables in the //order listed below. deps = (callback.length === 1 ? ['require'] : ['require', 'exports', 'module']).concat(deps); } } //If in IE 6-8 and hit an anonymous define() call, do the interactive //work. if (useInteractive) { node = currentlyAddingScript || getInteractiveScript(); if (node) { if (!name) { name = node.getAttribute('data-requiremodule'); } context = contexts[node.getAttribute('data-requirecontext')]; } } //Always save off evaluating the def call until the script onload handler. //This allows multiple modules to be in a file without prematurely //tracing dependencies, and allows for anonymous module support, //where the module name is not known until the script onload event //occurs. If no context, use the global queue, and get it processed //in the onscript load callback. (context ? context.defQueue : globalDefQueue).push([name, deps, callback]); }; define.amd = { jQuery: true }; /** * Executes the text. Normally just uses eval, but can be modified * to use a better, environment-specific call. Only used for transpiling * loader plugins, not for plain JS modules. * @param {String} text the text to execute/evaluate. */ req.exec = function (text) { /*jslint evil: true */ return eval(text); }; //Set up with config info. req(cfg); }(this)); r.js-2.3.6/build/tests/lib/sourcemap/twojs/000077500000000000000000000000001334071220400205455ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/sourcemap/twojs/build.js000066400000000000000000000003361334071220400222040ustar00rootroot00000000000000({ appDir: 'www', dir: 'www-built', baseUrl: '.', optimize: 'uglify2', generateSourceMaps: true, preserveLicenseComments: false, modules: [ { name: 'core' } ] }) r.js-2.3.6/build/tests/lib/sourcemap/twojs/expected.map000066400000000000000000000005211334071220400230430ustar00rootroot00000000000000{"version":3,"sources":["common/utils/ajax.js","core.js"],"names":["define"],"mappings":"AAAAA,OAAA,uBAAA,WACA,MAAA,OAGAA,OAAA,QAAA,qBAAA,WCHA,MAAA","file":"core.js","sourcesContent":["define('common/utils/ajax',[],function () {\n return 456;\n});\n\n","define('core',['common/utils/ajax'], function () {\n return 123;\n});\n\n"]} r.js-2.3.6/build/tests/lib/sourcemap/twojs/www/000077500000000000000000000000001334071220400213715ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/sourcemap/twojs/www/common/000077500000000000000000000000001334071220400226615ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/sourcemap/twojs/www/common/utils/000077500000000000000000000000001334071220400240215ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/sourcemap/twojs/www/common/utils/ajax.js000066400000000000000000000000511334071220400252760ustar00rootroot00000000000000define(function () { return 456; }); r.js-2.3.6/build/tests/lib/sourcemap/twojs/www/core.js000066400000000000000000000001001334071220400226460ustar00rootroot00000000000000define(['common/utils/ajax'], function () { return 123; }); r.js-2.3.6/build/tests/lib/sourcemap/www/000077500000000000000000000000001334071220400202235ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/sourcemap/www/index.html000066400000000000000000000002541334071220400222210ustar00rootroot00000000000000

Hello World

r.js-2.3.6/build/tests/lib/sourcemap/www/js/000077500000000000000000000000001334071220400206375ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/sourcemap/www/js/a.js000066400000000000000000000002311334071220400214110ustar00rootroot00000000000000/** * Module A */ define({ name: 'a', doSomething: function (name) { console.log('Hello ' + name); } }); console.log('a is done'); r.js-2.3.6/build/tests/lib/sourcemap/www/js/b.js000066400000000000000000000001501334071220400214120ustar00rootroot00000000000000/** * Module B */ define(function () { var name = 'b'; return { name: name }; }); r.js-2.3.6/build/tests/lib/sourcemap/www/js/main.js000066400000000000000000000003341334071220400221210ustar00rootroot00000000000000/** * A test of source maps on a concatenated, but not minified file. */ require(['a', 'b'], function (a, b) { console.log('a message below:'); a.doSomething('world'); console.log('b name: ' + b.name); }); r.js-2.3.6/build/tests/lib/sourcemap/www/js/require.js000066400000000000000000002363161334071220400226640ustar00rootroot00000000000000/** vim: et:ts=4:sw=4:sts=4 * @license RequireJS 2.1.5 Copyright (c) 2010-2012, The Dojo Foundation All Rights Reserved. * Available via the MIT or new BSD license. * see: http://github.com/jrburke/requirejs for details */ //Not using strict: uneven strict support in browsers, #392, and causes //problems with requirejs.exec()/transpiler plugins that may not be strict. /*jslint regexp: true, nomen: true, sloppy: true */ /*global window, navigator, document, importScripts, setTimeout, opera */ var requirejs, require, define; (function (global) { var req, s, head, baseElement, dataMain, src, interactiveScript, currentlyAddingScript, mainScript, subPath, version = '2.1.5', commentRegExp = /(\/\*([\s\S]*?)\*\/|([^:]|^)\/\/(.*)$)/mg, cjsRequireRegExp = /[^.]\s*require\s*\(\s*["']([^'"\s]+)["']\s*\)/g, jsSuffixRegExp = /\.js$/, currDirRegExp = /^\.\//, op = Object.prototype, ostring = op.toString, hasOwn = op.hasOwnProperty, ap = Array.prototype, apsp = ap.splice, isBrowser = !!(typeof window !== 'undefined' && navigator && document), isWebWorker = !isBrowser && typeof importScripts !== 'undefined', //PS3 indicates loaded and complete, but need to wait for complete //specifically. Sequence is 'loading', 'loaded', execution, // then 'complete'. The UA check is unfortunate, but not sure how //to feature test w/o causing perf issues. readyRegExp = isBrowser && navigator.platform === 'PLAYSTATION 3' ? /^complete$/ : /^(complete|loaded)$/, defContextName = '_', //Oh the tragedy, detecting opera. See the usage of isOpera for reason. isOpera = typeof opera !== 'undefined' && opera.toString() === '[object Opera]', contexts = {}, cfg = {}, globalDefQueue = [], useInteractive = false; function isFunction(it) { return ostring.call(it) === '[object Function]'; } function isArray(it) { return ostring.call(it) === '[object Array]'; } /** * Helper function for iterating over an array. If the func returns * a true value, it will break out of the loop. */ function each(ary, func) { if (ary) { var i; for (i = 0; i < ary.length; i += 1) { if (ary[i] && func(ary[i], i, ary)) { break; } } } } /** * Helper function for iterating over an array backwards. If the func * returns a true value, it will break out of the loop. */ function eachReverse(ary, func) { if (ary) { var i; for (i = ary.length - 1; i > -1; i -= 1) { if (ary[i] && func(ary[i], i, ary)) { break; } } } } function hasProp(obj, prop) { return hasOwn.call(obj, prop); } function getOwn(obj, prop) { return hasProp(obj, prop) && obj[prop]; } /** * Cycles over properties in an object and calls a function for each * property value. If the function returns a truthy value, then the * iteration is stopped. */ function eachProp(obj, func) { var prop; for (prop in obj) { if (hasProp(obj, prop)) { if (func(obj[prop], prop)) { break; } } } } /** * Simple function to mix in properties from source into target, * but only if target does not already have a property of the same name. */ function mixin(target, source, force, deepStringMixin) { if (source) { eachProp(source, function (value, prop) { if (force || !hasProp(target, prop)) { if (deepStringMixin && typeof value !== 'string') { if (!target[prop]) { target[prop] = {}; } mixin(target[prop], value, force, deepStringMixin); } else { target[prop] = value; } } }); } return target; } //Similar to Function.prototype.bind, but the 'this' object is specified //first, since it is easier to read/figure out what 'this' will be. function bind(obj, fn) { return function () { return fn.apply(obj, arguments); }; } function scripts() { return document.getElementsByTagName('script'); } //Allow getting a global that expressed in //dot notation, like 'a.b.c'. function getGlobal(value) { if (!value) { return value; } var g = global; each(value.split('.'), function (part) { g = g[part]; }); return g; } /** * Constructs an error with a pointer to an URL with more information. * @param {String} id the error ID that maps to an ID on a web page. * @param {String} message human readable error. * @param {Error} [err] the original error, if there is one. * * @returns {Error} */ function makeError(id, msg, err, requireModules) { var e = new Error(msg + '\nhttp://requirejs.org/docs/errors.html#' + id); e.requireType = id; e.requireModules = requireModules; if (err) { e.originalError = err; } return e; } if (typeof define !== 'undefined') { //If a define is already in play via another AMD loader, //do not overwrite. return; } if (typeof requirejs !== 'undefined') { if (isFunction(requirejs)) { //Do not overwrite and existing requirejs instance. return; } cfg = requirejs; requirejs = undefined; } //Allow for a require config object if (typeof require !== 'undefined' && !isFunction(require)) { //assume it is a config object. cfg = require; require = undefined; } function newContext(contextName) { var inCheckLoaded, Module, context, handlers, checkLoadedTimeoutId, config = { //Defaults. Do not set a default for map //config to speed up normalize(), which //will run faster if there is no default. waitSeconds: 7, baseUrl: './', paths: {}, pkgs: {}, shim: {}, config: {} }, registry = {}, //registry of just enabled modules, to speed //cycle breaking code when lots of modules //are registered, but not activated. enabledRegistry = {}, undefEvents = {}, defQueue = [], defined = {}, urlFetched = {}, requireCounter = 1, unnormalizedCounter = 1; /** * Trims the . and .. from an array of path segments. * It will keep a leading path segment if a .. will become * the first path segment, to help with module name lookups, * which act like paths, but can be remapped. But the end result, * all paths that use this function should look normalized. * NOTE: this method MODIFIES the input array. * @param {Array} ary the array of path segments. */ function trimDots(ary) { var i, part; for (i = 0; ary[i]; i += 1) { part = ary[i]; if (part === '.') { ary.splice(i, 1); i -= 1; } else if (part === '..') { if (i === 1 && (ary[2] === '..' || ary[0] === '..')) { //End of the line. Keep at least one non-dot //path segment at the front so it can be mapped //correctly to disk. Otherwise, there is likely //no path mapping for a path starting with '..'. //This can still fail, but catches the most reasonable //uses of .. break; } else if (i > 0) { ary.splice(i - 1, 2); i -= 2; } } } } /** * Given a relative module name, like ./something, normalize it to * a real name that can be mapped to a path. * @param {String} name the relative name * @param {String} baseName a real name that the name arg is relative * to. * @param {Boolean} applyMap apply the map config to the value. Should * only be done if this normalization is for a dependency ID. * @returns {String} normalized name */ function normalize(name, baseName, applyMap) { var pkgName, pkgConfig, mapValue, nameParts, i, j, nameSegment, foundMap, foundI, foundStarMap, starI, baseParts = baseName && baseName.split('/'), normalizedBaseParts = baseParts, map = config.map, starMap = map && map['*']; //Adjust any relative paths. if (name && name.charAt(0) === '.') { //If have a base name, try to normalize against it, //otherwise, assume it is a top-level require that will //be relative to baseUrl in the end. if (baseName) { if (getOwn(config.pkgs, baseName)) { //If the baseName is a package name, then just treat it as one //name to concat the name with. normalizedBaseParts = baseParts = [baseName]; } else { //Convert baseName to array, and lop off the last part, //so that . matches that 'directory' and not name of the baseName's //module. For instance, baseName of 'one/two/three', maps to //'one/two/three.js', but we want the directory, 'one/two' for //this normalization. normalizedBaseParts = baseParts.slice(0, baseParts.length - 1); } name = normalizedBaseParts.concat(name.split('/')); trimDots(name); //Some use of packages may use a . path to reference the //'main' module name, so normalize for that. pkgConfig = getOwn(config.pkgs, (pkgName = name[0])); name = name.join('/'); if (pkgConfig && name === pkgName + '/' + pkgConfig.main) { name = pkgName; } } else if (name.indexOf('./') === 0) { // No baseName, so this is ID is resolved relative // to baseUrl, pull off the leading dot. name = name.substring(2); } } //Apply map config if available. if (applyMap && map && (baseParts || starMap)) { nameParts = name.split('/'); for (i = nameParts.length; i > 0; i -= 1) { nameSegment = nameParts.slice(0, i).join('/'); if (baseParts) { //Find the longest baseName segment match in the config. //So, do joins on the biggest to smallest lengths of baseParts. for (j = baseParts.length; j > 0; j -= 1) { mapValue = getOwn(map, baseParts.slice(0, j).join('/')); //baseName segment has config, find if it has one for //this name. if (mapValue) { mapValue = getOwn(mapValue, nameSegment); if (mapValue) { //Match, update name to the new value. foundMap = mapValue; foundI = i; break; } } } } if (foundMap) { break; } //Check for a star map match, but just hold on to it, //if there is a shorter segment match later in a matching //config, then favor over this star map. if (!foundStarMap && starMap && getOwn(starMap, nameSegment)) { foundStarMap = getOwn(starMap, nameSegment); starI = i; } } if (!foundMap && foundStarMap) { foundMap = foundStarMap; foundI = starI; } if (foundMap) { nameParts.splice(0, foundI, foundMap); name = nameParts.join('/'); } } return name; } function removeScript(name) { if (isBrowser) { each(scripts(), function (scriptNode) { if (scriptNode.getAttribute('data-requiremodule') === name && scriptNode.getAttribute('data-requirecontext') === context.contextName) { scriptNode.parentNode.removeChild(scriptNode); return true; } }); } } function hasPathFallback(id) { var pathConfig = getOwn(config.paths, id); if (pathConfig && isArray(pathConfig) && pathConfig.length > 1) { removeScript(id); //Pop off the first array value, since it failed, and //retry pathConfig.shift(); context.require.undef(id); context.require([id]); return true; } } //Turns a plugin!resource to [plugin, resource] //with the plugin being undefined if the name //did not have a plugin prefix. function splitPrefix(name) { var prefix, index = name ? name.indexOf('!') : -1; if (index > -1) { prefix = name.substring(0, index); name = name.substring(index + 1, name.length); } return [prefix, name]; } /** * Creates a module mapping that includes plugin prefix, module * name, and path. If parentModuleMap is provided it will * also normalize the name via require.normalize() * * @param {String} name the module name * @param {String} [parentModuleMap] parent module map * for the module name, used to resolve relative names. * @param {Boolean} isNormalized: is the ID already normalized. * This is true if this call is done for a define() module ID. * @param {Boolean} applyMap: apply the map config to the ID. * Should only be true if this map is for a dependency. * * @returns {Object} */ function makeModuleMap(name, parentModuleMap, isNormalized, applyMap) { var url, pluginModule, suffix, nameParts, prefix = null, parentName = parentModuleMap ? parentModuleMap.name : null, originalName = name, isDefine = true, normalizedName = ''; //If no name, then it means it is a require call, generate an //internal name. if (!name) { isDefine = false; name = '_@r' + (requireCounter += 1); } nameParts = splitPrefix(name); prefix = nameParts[0]; name = nameParts[1]; if (prefix) { prefix = normalize(prefix, parentName, applyMap); pluginModule = getOwn(defined, prefix); } //Account for relative paths if there is a base name. if (name) { if (prefix) { if (pluginModule && pluginModule.normalize) { //Plugin is loaded, use its normalize method. normalizedName = pluginModule.normalize(name, function (name) { return normalize(name, parentName, applyMap); }); } else { normalizedName = normalize(name, parentName, applyMap); } } else { //A regular module. normalizedName = normalize(name, parentName, applyMap); //Normalized name may be a plugin ID due to map config //application in normalize. The map config values must //already be normalized, so do not need to redo that part. nameParts = splitPrefix(normalizedName); prefix = nameParts[0]; normalizedName = nameParts[1]; isNormalized = true; url = context.nameToUrl(normalizedName); } } //If the id is a plugin id that cannot be determined if it needs //normalization, stamp it with a unique ID so two matching relative //ids that may conflict can be separate. suffix = prefix && !pluginModule && !isNormalized ? '_unnormalized' + (unnormalizedCounter += 1) : ''; return { prefix: prefix, name: normalizedName, parentMap: parentModuleMap, unnormalized: !!suffix, url: url, originalName: originalName, isDefine: isDefine, id: (prefix ? prefix + '!' + normalizedName : normalizedName) + suffix }; } function getModule(depMap) { var id = depMap.id, mod = getOwn(registry, id); if (!mod) { mod = registry[id] = new context.Module(depMap); } return mod; } function on(depMap, name, fn) { var id = depMap.id, mod = getOwn(registry, id); if (hasProp(defined, id) && (!mod || mod.defineEmitComplete)) { if (name === 'defined') { fn(defined[id]); } } else { getModule(depMap).on(name, fn); } } function onError(err, errback) { var ids = err.requireModules, notified = false; if (errback) { errback(err); } else { each(ids, function (id) { var mod = getOwn(registry, id); if (mod) { //Set error on module, so it skips timeout checks. mod.error = err; if (mod.events.error) { notified = true; mod.emit('error', err); } } }); if (!notified) { req.onError(err); } } } /** * Internal method to transfer globalQueue items to this context's * defQueue. */ function takeGlobalQueue() { //Push all the globalDefQueue items into the context's defQueue if (globalDefQueue.length) { //Array splice in the values since the context code has a //local var ref to defQueue, so cannot just reassign the one //on context. apsp.apply(defQueue, [defQueue.length - 1, 0].concat(globalDefQueue)); globalDefQueue = []; } } handlers = { 'require': function (mod) { if (mod.require) { return mod.require; } else { return (mod.require = context.makeRequire(mod.map)); } }, 'exports': function (mod) { mod.usingExports = true; if (mod.map.isDefine) { if (mod.exports) { return mod.exports; } else { return (mod.exports = defined[mod.map.id] = {}); } } }, 'module': function (mod) { if (mod.module) { return mod.module; } else { return (mod.module = { id: mod.map.id, uri: mod.map.url, config: function () { return (config.config && getOwn(config.config, mod.map.id)) || {}; }, exports: defined[mod.map.id] }); } } }; function cleanRegistry(id) { //Clean up machinery used for waiting modules. delete registry[id]; delete enabledRegistry[id]; } function breakCycle(mod, traced, processed) { var id = mod.map.id; if (mod.error) { mod.emit('error', mod.error); } else { traced[id] = true; each(mod.depMaps, function (depMap, i) { var depId = depMap.id, dep = getOwn(registry, depId); //Only force things that have not completed //being defined, so still in the registry, //and only if it has not been matched up //in the module already. if (dep && !mod.depMatched[i] && !processed[depId]) { if (getOwn(traced, depId)) { mod.defineDep(i, defined[depId]); mod.check(); //pass false? } else { breakCycle(dep, traced, processed); } } }); processed[id] = true; } } function checkLoaded() { var map, modId, err, usingPathFallback, waitInterval = config.waitSeconds * 1000, //It is possible to disable the wait interval by using waitSeconds of 0. expired = waitInterval && (context.startTime + waitInterval) < new Date().getTime(), noLoads = [], reqCalls = [], stillLoading = false, needCycleCheck = true; //Do not bother if this call was a result of a cycle break. if (inCheckLoaded) { return; } inCheckLoaded = true; //Figure out the state of all the modules. eachProp(enabledRegistry, function (mod) { map = mod.map; modId = map.id; //Skip things that are not enabled or in error state. if (!mod.enabled) { return; } if (!map.isDefine) { reqCalls.push(mod); } if (!mod.error) { //If the module should be executed, and it has not //been inited and time is up, remember it. if (!mod.inited && expired) { if (hasPathFallback(modId)) { usingPathFallback = true; stillLoading = true; } else { noLoads.push(modId); removeScript(modId); } } else if (!mod.inited && mod.fetched && map.isDefine) { stillLoading = true; if (!map.prefix) { //No reason to keep looking for unfinished //loading. If the only stillLoading is a //plugin resource though, keep going, //because it may be that a plugin resource //is waiting on a non-plugin cycle. return (needCycleCheck = false); } } } }); if (expired && noLoads.length) { //If wait time expired, throw error of unloaded modules. err = makeError('timeout', 'Load timeout for modules: ' + noLoads, null, noLoads); err.contextName = context.contextName; return onError(err); } //Not expired, check for a cycle. if (needCycleCheck) { each(reqCalls, function (mod) { breakCycle(mod, {}, {}); }); } //If still waiting on loads, and the waiting load is something //other than a plugin resource, or there are still outstanding //scripts, then just try back later. if ((!expired || usingPathFallback) && stillLoading) { //Something is still waiting to load. Wait for it, but only //if a timeout is not already in effect. if ((isBrowser || isWebWorker) && !checkLoadedTimeoutId) { checkLoadedTimeoutId = setTimeout(function () { checkLoadedTimeoutId = 0; checkLoaded(); }, 50); } } inCheckLoaded = false; } Module = function (map) { this.events = getOwn(undefEvents, map.id) || {}; this.map = map; this.shim = getOwn(config.shim, map.id); this.depExports = []; this.depMaps = []; this.depMatched = []; this.pluginMaps = {}; this.depCount = 0; /* this.exports this.factory this.depMaps = [], this.enabled, this.fetched */ }; Module.prototype = { init: function (depMaps, factory, errback, options) { options = options || {}; //Do not do more inits if already done. Can happen if there //are multiple define calls for the same module. That is not //a normal, common case, but it is also not unexpected. if (this.inited) { return; } this.factory = factory; if (errback) { //Register for errors on this module. this.on('error', errback); } else if (this.events.error) { //If no errback already, but there are error listeners //on this module, set up an errback to pass to the deps. errback = bind(this, function (err) { this.emit('error', err); }); } //Do a copy of the dependency array, so that //source inputs are not modified. For example //"shim" deps are passed in here directly, and //doing a direct modification of the depMaps array //would affect that config. this.depMaps = depMaps && depMaps.slice(0); this.errback = errback; //Indicate this module has be initialized this.inited = true; this.ignore = options.ignore; //Could have option to init this module in enabled mode, //or could have been previously marked as enabled. However, //the dependencies are not known until init is called. So //if enabled previously, now trigger dependencies as enabled. if (options.enabled || this.enabled) { //Enable this module and dependencies. //Will call this.check() this.enable(); } else { this.check(); } }, defineDep: function (i, depExports) { //Because of cycles, defined callback for a given //export can be called more than once. if (!this.depMatched[i]) { this.depMatched[i] = true; this.depCount -= 1; this.depExports[i] = depExports; } }, fetch: function () { if (this.fetched) { return; } this.fetched = true; context.startTime = (new Date()).getTime(); var map = this.map; //If the manager is for a plugin managed resource, //ask the plugin to load it now. if (this.shim) { context.makeRequire(this.map, { enableBuildCallback: true })(this.shim.deps || [], bind(this, function () { return map.prefix ? this.callPlugin() : this.load(); })); } else { //Regular dependency. return map.prefix ? this.callPlugin() : this.load(); } }, load: function () { var url = this.map.url; //Regular dependency. if (!urlFetched[url]) { urlFetched[url] = true; context.load(this.map.id, url); } }, /** * Checks if the module is ready to define itself, and if so, * define it. */ check: function () { if (!this.enabled || this.enabling) { return; } var err, cjsModule, id = this.map.id, depExports = this.depExports, exports = this.exports, factory = this.factory; if (!this.inited) { this.fetch(); } else if (this.error) { this.emit('error', this.error); } else if (!this.defining) { //The factory could trigger another require call //that would result in checking this module to //define itself again. If already in the process //of doing that, skip this work. this.defining = true; if (this.depCount < 1 && !this.defined) { if (isFunction(factory)) { //If there is an error listener, favor passing //to that instead of throwing an error. if (this.events.error) { try { exports = context.execCb(id, factory, depExports, exports); } catch (e) { err = e; } } else { exports = context.execCb(id, factory, depExports, exports); } if (this.map.isDefine) { //If setting exports via 'module' is in play, //favor that over return value and exports. After that, //favor a non-undefined return value over exports use. cjsModule = this.module; if (cjsModule && cjsModule.exports !== undefined && //Make sure it is not already the exports value cjsModule.exports !== this.exports) { exports = cjsModule.exports; } else if (exports === undefined && this.usingExports) { //exports already set the defined value. exports = this.exports; } } if (err) { err.requireMap = this.map; err.requireModules = [this.map.id]; err.requireType = 'define'; return onError((this.error = err)); } } else { //Just a literal value exports = factory; } this.exports = exports; if (this.map.isDefine && !this.ignore) { defined[id] = exports; if (req.onResourceLoad) { req.onResourceLoad(context, this.map, this.depMaps); } } //Clean up cleanRegistry(id); this.defined = true; } //Finished the define stage. Allow calling check again //to allow define notifications below in the case of a //cycle. this.defining = false; if (this.defined && !this.defineEmitted) { this.defineEmitted = true; this.emit('defined', this.exports); this.defineEmitComplete = true; } } }, callPlugin: function () { var map = this.map, id = map.id, //Map already normalized the prefix. pluginMap = makeModuleMap(map.prefix); //Mark this as a dependency for this plugin, so it //can be traced for cycles. this.depMaps.push(pluginMap); on(pluginMap, 'defined', bind(this, function (plugin) { var load, normalizedMap, normalizedMod, name = this.map.name, parentName = this.map.parentMap ? this.map.parentMap.name : null, localRequire = context.makeRequire(map.parentMap, { enableBuildCallback: true }); //If current map is not normalized, wait for that //normalized name to load instead of continuing. if (this.map.unnormalized) { //Normalize the ID if the plugin allows it. if (plugin.normalize) { name = plugin.normalize(name, function (name) { return normalize(name, parentName, true); }) || ''; } //prefix and name should already be normalized, no need //for applying map config again either. normalizedMap = makeModuleMap(map.prefix + '!' + name, this.map.parentMap); on(normalizedMap, 'defined', bind(this, function (value) { this.init([], function () { return value; }, null, { enabled: true, ignore: true }); })); normalizedMod = getOwn(registry, normalizedMap.id); if (normalizedMod) { //Mark this as a dependency for this plugin, so it //can be traced for cycles. this.depMaps.push(normalizedMap); if (this.events.error) { normalizedMod.on('error', bind(this, function (err) { this.emit('error', err); })); } normalizedMod.enable(); } return; } load = bind(this, function (value) { this.init([], function () { return value; }, null, { enabled: true }); }); load.error = bind(this, function (err) { this.inited = true; this.error = err; err.requireModules = [id]; //Remove temp unnormalized modules for this module, //since they will never be resolved otherwise now. eachProp(registry, function (mod) { if (mod.map.id.indexOf(id + '_unnormalized') === 0) { cleanRegistry(mod.map.id); } }); onError(err); }); //Allow plugins to load other code without having to know the //context or how to 'complete' the load. load.fromText = bind(this, function (text, textAlt) { /*jslint evil: true */ var moduleName = map.name, moduleMap = makeModuleMap(moduleName), hasInteractive = useInteractive; //As of 2.1.0, support just passing the text, to reinforce //fromText only being called once per resource. Still //support old style of passing moduleName but discard //that moduleName in favor of the internal ref. if (textAlt) { text = textAlt; } //Turn off interactive script matching for IE for any define //calls in the text, then turn it back on at the end. if (hasInteractive) { useInteractive = false; } //Prime the system by creating a module instance for //it. getModule(moduleMap); //Transfer any config to this other module. if (hasProp(config.config, id)) { config.config[moduleName] = config.config[id]; } try { req.exec(text); } catch (e) { return onError(makeError('fromtexteval', 'fromText eval for ' + id + ' failed: ' + e, e, [id])); } if (hasInteractive) { useInteractive = true; } //Mark this as a dependency for the plugin //resource this.depMaps.push(moduleMap); //Support anonymous modules. context.completeLoad(moduleName); //Bind the value of that module to the value for this //resource ID. localRequire([moduleName], load); }); //Use parentName here since the plugin's name is not reliable, //could be some weird string with no path that actually wants to //reference the parentName's path. plugin.load(map.name, localRequire, load, config); })); context.enable(pluginMap, this); this.pluginMaps[pluginMap.id] = pluginMap; }, enable: function () { enabledRegistry[this.map.id] = this; this.enabled = true; //Set flag mentioning that the module is enabling, //so that immediate calls to the defined callbacks //for dependencies do not trigger inadvertent load //with the depCount still being zero. this.enabling = true; //Enable each dependency each(this.depMaps, bind(this, function (depMap, i) { var id, mod, handler; if (typeof depMap === 'string') { //Dependency needs to be converted to a depMap //and wired up to this module. depMap = makeModuleMap(depMap, (this.map.isDefine ? this.map : this.map.parentMap), false, !this.skipMap); this.depMaps[i] = depMap; handler = getOwn(handlers, depMap.id); if (handler) { this.depExports[i] = handler(this); return; } this.depCount += 1; on(depMap, 'defined', bind(this, function (depExports) { this.defineDep(i, depExports); this.check(); })); if (this.errback) { on(depMap, 'error', this.errback); } } id = depMap.id; mod = registry[id]; //Skip special modules like 'require', 'exports', 'module' //Also, don't call enable if it is already enabled, //important in circular dependency cases. if (!hasProp(handlers, id) && mod && !mod.enabled) { context.enable(depMap, this); } })); //Enable each plugin that is used in //a dependency eachProp(this.pluginMaps, bind(this, function (pluginMap) { var mod = getOwn(registry, pluginMap.id); if (mod && !mod.enabled) { context.enable(pluginMap, this); } })); this.enabling = false; this.check(); }, on: function (name, cb) { var cbs = this.events[name]; if (!cbs) { cbs = this.events[name] = []; } cbs.push(cb); }, emit: function (name, evt) { each(this.events[name], function (cb) { cb(evt); }); if (name === 'error') { //Now that the error handler was triggered, remove //the listeners, since this broken Module instance //can stay around for a while in the registry. delete this.events[name]; } } }; function callGetModule(args) { //Skip modules already defined. if (!hasProp(defined, args[0])) { getModule(makeModuleMap(args[0], null, true)).init(args[1], args[2]); } } function removeListener(node, func, name, ieName) { //Favor detachEvent because of IE9 //issue, see attachEvent/addEventListener comment elsewhere //in this file. if (node.detachEvent && !isOpera) { //Probably IE. If not it will throw an error, which will be //useful to know. if (ieName) { node.detachEvent(ieName, func); } } else { node.removeEventListener(name, func, false); } } /** * Given an event from a script node, get the requirejs info from it, * and then removes the event listeners on the node. * @param {Event} evt * @returns {Object} */ function getScriptData(evt) { //Using currentTarget instead of target for Firefox 2.0's sake. Not //all old browsers will be supported, but this one was easy enough //to support and still makes sense. var node = evt.currentTarget || evt.srcElement; //Remove the listeners once here. removeListener(node, context.onScriptLoad, 'load', 'onreadystatechange'); removeListener(node, context.onScriptError, 'error'); return { node: node, id: node && node.getAttribute('data-requiremodule') }; } function intakeDefines() { var args; //Any defined modules in the global queue, intake them now. takeGlobalQueue(); //Make sure any remaining defQueue items get properly processed. while (defQueue.length) { args = defQueue.shift(); if (args[0] === null) { return onError(makeError('mismatch', 'Mismatched anonymous define() module: ' + args[args.length - 1])); } else { //args are id, deps, factory. Should be normalized by the //define() function. callGetModule(args); } } } context = { config: config, contextName: contextName, registry: registry, defined: defined, urlFetched: urlFetched, defQueue: defQueue, Module: Module, makeModuleMap: makeModuleMap, nextTick: req.nextTick, onError: onError, /** * Set a configuration for the context. * @param {Object} cfg config object to integrate. */ configure: function (cfg) { //Make sure the baseUrl ends in a slash. if (cfg.baseUrl) { if (cfg.baseUrl.charAt(cfg.baseUrl.length - 1) !== '/') { cfg.baseUrl += '/'; } } //Save off the paths and packages since they require special processing, //they are additive. var pkgs = config.pkgs, shim = config.shim, objs = { paths: true, config: true, map: true }; eachProp(cfg, function (value, prop) { if (objs[prop]) { if (prop === 'map') { if (!config.map) { config.map = {}; } mixin(config[prop], value, true, true); } else { mixin(config[prop], value, true); } } else { config[prop] = value; } }); //Merge shim if (cfg.shim) { eachProp(cfg.shim, function (value, id) { //Normalize the structure if (isArray(value)) { value = { deps: value }; } if ((value.exports || value.init) && !value.exportsFn) { value.exportsFn = context.makeShimExports(value); } shim[id] = value; }); config.shim = shim; } //Adjust packages if necessary. if (cfg.packages) { each(cfg.packages, function (pkgObj) { var location; pkgObj = typeof pkgObj === 'string' ? { name: pkgObj } : pkgObj; location = pkgObj.location; //Create a brand new object on pkgs, since currentPackages can //be passed in again, and config.pkgs is the internal transformed //state for all package configs. pkgs[pkgObj.name] = { name: pkgObj.name, location: location || pkgObj.name, //Remove leading dot in main, so main paths are normalized, //and remove any trailing .js, since different package //envs have different conventions: some use a module name, //some use a file name. main: (pkgObj.main || 'main') .replace(currDirRegExp, '') .replace(jsSuffixRegExp, '') }; }); //Done with modifications, assing packages back to context config config.pkgs = pkgs; } //If there are any "waiting to execute" modules in the registry, //update the maps for them, since their info, like URLs to load, //may have changed. eachProp(registry, function (mod, id) { //If module already has init called, since it is too //late to modify them, and ignore unnormalized ones //since they are transient. if (!mod.inited && !mod.map.unnormalized) { mod.map = makeModuleMap(id); } }); //If a deps array or a config callback is specified, then call //require with those args. This is useful when require is defined as a //config object before require.js is loaded. if (cfg.deps || cfg.callback) { context.require(cfg.deps || [], cfg.callback); } }, makeShimExports: function (value) { function fn() { var ret; if (value.init) { ret = value.init.apply(global, arguments); } return ret || (value.exports && getGlobal(value.exports)); } return fn; }, makeRequire: function (relMap, options) { options = options || {}; function localRequire(deps, callback, errback) { var id, map, requireMod; if (options.enableBuildCallback && callback && isFunction(callback)) { callback.__requireJsBuild = true; } if (typeof deps === 'string') { if (isFunction(callback)) { //Invalid call return onError(makeError('requireargs', 'Invalid require call'), errback); } //If require|exports|module are requested, get the //value for them from the special handlers. Caveat: //this only works while module is being defined. if (relMap && hasProp(handlers, deps)) { return handlers[deps](registry[relMap.id]); } //Synchronous access to one module. If require.get is //available (as in the Node adapter), prefer that. if (req.get) { return req.get(context, deps, relMap, localRequire); } //Normalize module name, if it contains . or .. map = makeModuleMap(deps, relMap, false, true); id = map.id; if (!hasProp(defined, id)) { return onError(makeError('notloaded', 'Module name "' + id + '" has not been loaded yet for context: ' + contextName + (relMap ? '' : '. Use require([])'))); } return defined[id]; } //Grab defines waiting in the global queue. intakeDefines(); //Mark all the dependencies as needing to be loaded. context.nextTick(function () { //Some defines could have been added since the //require call, collect them. intakeDefines(); requireMod = getModule(makeModuleMap(null, relMap)); //Store if map config should be applied to this require //call for dependencies. requireMod.skipMap = options.skipMap; requireMod.init(deps, callback, errback, { enabled: true }); checkLoaded(); }); return localRequire; } mixin(localRequire, { isBrowser: isBrowser, /** * Converts a module name + .extension into an URL path. * *Requires* the use of a module name. It does not support using * plain URLs like nameToUrl. */ toUrl: function (moduleNamePlusExt) { var ext, index = moduleNamePlusExt.lastIndexOf('.'), segment = moduleNamePlusExt.split('/')[0], isRelative = segment === '.' || segment === '..'; //Have a file extension alias, and it is not the //dots from a relative path. if (index !== -1 && (!isRelative || index > 1)) { ext = moduleNamePlusExt.substring(index, moduleNamePlusExt.length); moduleNamePlusExt = moduleNamePlusExt.substring(0, index); } return context.nameToUrl(normalize(moduleNamePlusExt, relMap && relMap.id, true), ext, true); }, defined: function (id) { return hasProp(defined, makeModuleMap(id, relMap, false, true).id); }, specified: function (id) { id = makeModuleMap(id, relMap, false, true).id; return hasProp(defined, id) || hasProp(registry, id); } }); //Only allow undef on top level require calls if (!relMap) { localRequire.undef = function (id) { //Bind any waiting define() calls to this context, //fix for #408 takeGlobalQueue(); var map = makeModuleMap(id, relMap, true), mod = getOwn(registry, id); delete defined[id]; delete urlFetched[map.url]; delete undefEvents[id]; if (mod) { //Hold on to listeners in case the //module will be attempted to be reloaded //using a different config. if (mod.events.defined) { undefEvents[id] = mod.events; } cleanRegistry(id); } }; } return localRequire; }, /** * Called to enable a module if it is still in the registry * awaiting enablement. A second arg, parent, the parent module, * is passed in for context, when this method is overriden by * the optimizer. Not shown here to keep code compact. */ enable: function (depMap) { var mod = getOwn(registry, depMap.id); if (mod) { getModule(depMap).enable(); } }, /** * Internal method used by environment adapters to complete a load event. * A load event could be a script load or just a load pass from a synchronous * load call. * @param {String} moduleName the name of the module to potentially complete. */ completeLoad: function (moduleName) { var found, args, mod, shim = getOwn(config.shim, moduleName) || {}, shExports = shim.exports; takeGlobalQueue(); while (defQueue.length) { args = defQueue.shift(); if (args[0] === null) { args[0] = moduleName; //If already found an anonymous module and bound it //to this name, then this is some other anon module //waiting for its completeLoad to fire. if (found) { break; } found = true; } else if (args[0] === moduleName) { //Found matching define call for this script! found = true; } callGetModule(args); } //Do this after the cycle of callGetModule in case the result //of those calls/init calls changes the registry. mod = getOwn(registry, moduleName); if (!found && !hasProp(defined, moduleName) && mod && !mod.inited) { if (config.enforceDefine && (!shExports || !getGlobal(shExports))) { if (hasPathFallback(moduleName)) { return; } else { return onError(makeError('nodefine', 'No define call for ' + moduleName, null, [moduleName])); } } else { //A script that does not call define(), so just simulate //the call for it. callGetModule([moduleName, (shim.deps || []), shim.exportsFn]); } } checkLoaded(); }, /** * Converts a module name to a file path. Supports cases where * moduleName may actually be just an URL. * Note that it **does not** call normalize on the moduleName, * it is assumed to have already been normalized. This is an * internal API, not a public one. Use toUrl for the public API. */ nameToUrl: function (moduleName, ext, skipExt) { var paths, pkgs, pkg, pkgPath, syms, i, parentModule, url, parentPath; //If a colon is in the URL, it indicates a protocol is used and it is just //an URL to a file, or if it starts with a slash, contains a query arg (i.e. ?) //or ends with .js, then assume the user meant to use an url and not a module id. //The slash is important for protocol-less URLs as well as full paths. if (req.jsExtRegExp.test(moduleName)) { //Just a plain path, not module name lookup, so just return it. //Add extension if it is included. This is a bit wonky, only non-.js things pass //an extension, this method probably needs to be reworked. url = moduleName + (ext || ''); } else { //A module that needs to be converted to a path. paths = config.paths; pkgs = config.pkgs; syms = moduleName.split('/'); //For each module name segment, see if there is a path //registered for it. Start with most specific name //and work up from it. for (i = syms.length; i > 0; i -= 1) { parentModule = syms.slice(0, i).join('/'); pkg = getOwn(pkgs, parentModule); parentPath = getOwn(paths, parentModule); if (parentPath) { //If an array, it means there are a few choices, //Choose the one that is desired if (isArray(parentPath)) { parentPath = parentPath[0]; } syms.splice(0, i, parentPath); break; } else if (pkg) { //If module name is just the package name, then looking //for the main module. if (moduleName === pkg.name) { pkgPath = pkg.location + '/' + pkg.main; } else { pkgPath = pkg.location; } syms.splice(0, i, pkgPath); break; } } //Join the path parts together, then figure out if baseUrl is needed. url = syms.join('/'); url += (ext || (/\?/.test(url) || skipExt ? '' : '.js')); url = (url.charAt(0) === '/' || url.match(/^[\w\+\.\-]+:/) ? '' : config.baseUrl) + url; } return config.urlArgs ? url + ((url.indexOf('?') === -1 ? '?' : '&') + config.urlArgs) : url; }, //Delegates to req.load. Broken out as a separate function to //allow overriding in the optimizer. load: function (id, url) { req.load(context, id, url); }, /** * Executes a module callack function. Broken out as a separate function * solely to allow the build system to sequence the files in the built * layer in the right sequence. * * @private */ execCb: function (name, callback, args, exports) { return callback.apply(exports, args); }, /** * callback for script loads, used to check status of loading. * * @param {Event} evt the event from the browser for the script * that was loaded. */ onScriptLoad: function (evt) { //Using currentTarget instead of target for Firefox 2.0's sake. Not //all old browsers will be supported, but this one was easy enough //to support and still makes sense. if (evt.type === 'load' || (readyRegExp.test((evt.currentTarget || evt.srcElement).readyState))) { //Reset interactive script so a script node is not held onto for //to long. interactiveScript = null; //Pull out the name of the module and the context. var data = getScriptData(evt); context.completeLoad(data.id); } }, /** * Callback for script errors. */ onScriptError: function (evt) { var data = getScriptData(evt); if (!hasPathFallback(data.id)) { return onError(makeError('scripterror', 'Script error', evt, [data.id])); } } }; context.require = context.makeRequire(); return context; } /** * Main entry point. * * If the only argument to require is a string, then the module that * is represented by that string is fetched for the appropriate context. * * If the first argument is an array, then it will be treated as an array * of dependency string names to fetch. An optional function callback can * be specified to execute when all of those dependencies are available. * * Make a local req variable to help Caja compliance (it assumes things * on a require that are not standardized), and to give a short * name for minification/local scope use. */ req = requirejs = function (deps, callback, errback, optional) { //Find the right context, use default var context, config, contextName = defContextName; // Determine if have config object in the call. if (!isArray(deps) && typeof deps !== 'string') { // deps is a config object config = deps; if (isArray(callback)) { // Adjust args if there are dependencies deps = callback; callback = errback; errback = optional; } else { deps = []; } } if (config && config.context) { contextName = config.context; } context = getOwn(contexts, contextName); if (!context) { context = contexts[contextName] = req.s.newContext(contextName); } if (config) { context.configure(config); } return context.require(deps, callback, errback); }; /** * Support require.config() to make it easier to cooperate with other * AMD loaders on globally agreed names. */ req.config = function (config) { return req(config); }; /** * Execute something after the current tick * of the event loop. Override for other envs * that have a better solution than setTimeout. * @param {Function} fn function to execute later. */ req.nextTick = typeof setTimeout !== 'undefined' ? function (fn) { setTimeout(fn, 4); } : function (fn) { fn(); }; /** * Export require as a global, but only if it does not already exist. */ if (!require) { require = req; } req.version = version; //Used to filter out dependencies that are already paths. req.jsExtRegExp = /^\/|:|\?|\.js$/; req.isBrowser = isBrowser; s = req.s = { contexts: contexts, newContext: newContext }; //Create default context. req({}); //Exports some context-sensitive methods on global require. each([ 'toUrl', 'undef', 'defined', 'specified' ], function (prop) { //Reference from contexts instead of early binding to default context, //so that during builds, the latest instance of the default context //with its config gets used. req[prop] = function () { var ctx = contexts[defContextName]; return ctx.require[prop].apply(ctx, arguments); }; }); if (isBrowser) { head = s.head = document.getElementsByTagName('head')[0]; //If BASE tag is in play, using appendChild is a problem for IE6. //When that browser dies, this can be removed. Details in this jQuery bug: //http://dev.jquery.com/ticket/2709 baseElement = document.getElementsByTagName('base')[0]; if (baseElement) { head = s.head = baseElement.parentNode; } } /** * Any errors that require explicitly generates will be passed to this * function. Intercept/override it if you want custom error handling. * @param {Error} err the error object. */ req.onError = function (err) { throw err; }; /** * Does the request to load a module for the browser case. * Make this a separate function to allow other environments * to override it. * * @param {Object} context the require context to find state. * @param {String} moduleName the name of the module. * @param {Object} url the URL to the module. */ req.load = function (context, moduleName, url) { var config = (context && context.config) || {}, node; if (isBrowser) { //In the browser so use a script tag node = config.xhtml ? document.createElementNS('http://www.w3.org/1999/xhtml', 'html:script') : document.createElement('script'); node.type = config.scriptType || 'text/javascript'; node.charset = 'utf-8'; node.async = true; node.setAttribute('data-requirecontext', context.contextName); node.setAttribute('data-requiremodule', moduleName); //Set up load listener. Test attachEvent first because IE9 has //a subtle issue in its addEventListener and script onload firings //that do not match the behavior of all other browsers with //addEventListener support, which fire the onload event for a //script right after the script execution. See: //https://connect.microsoft.com/IE/feedback/details/648057/script-onload-event-is-not-fired-immediately-after-script-execution //UNFORTUNATELY Opera implements attachEvent but does not follow the script //script execution mode. if (node.attachEvent && //Check if node.attachEvent is artificially added by custom script or //natively supported by browser //read https://github.com/jrburke/requirejs/issues/187 //if we can NOT find [native code] then it must NOT natively supported. //in IE8, node.attachEvent does not have toString() //Note the test for "[native code" with no closing brace, see: //https://github.com/jrburke/requirejs/issues/273 !(node.attachEvent.toString && node.attachEvent.toString().indexOf('[native code') < 0) && !isOpera) { //Probably IE. IE (at least 6-8) do not fire //script onload right after executing the script, so //we cannot tie the anonymous define call to a name. //However, IE reports the script as being in 'interactive' //readyState at the time of the define call. useInteractive = true; node.attachEvent('onreadystatechange', context.onScriptLoad); //It would be great to add an error handler here to catch //404s in IE9+. However, onreadystatechange will fire before //the error handler, so that does not help. If addEventListener //is used, then IE will fire error before load, but we cannot //use that pathway given the connect.microsoft.com issue //mentioned above about not doing the 'script execute, //then fire the script load event listener before execute //next script' that other browsers do. //Best hope: IE10 fixes the issues, //and then destroys all installs of IE 6-9. //node.attachEvent('onerror', context.onScriptError); } else { node.addEventListener('load', context.onScriptLoad, false); node.addEventListener('error', context.onScriptError, false); } node.src = url; //For some cache cases in IE 6-8, the script executes before the end //of the appendChild execution, so to tie an anonymous define //call to the module name (which is stored on the node), hold on //to a reference to this node, but clear after the DOM insertion. currentlyAddingScript = node; if (baseElement) { head.insertBefore(node, baseElement); } else { head.appendChild(node); } currentlyAddingScript = null; return node; } else if (isWebWorker) { try { //In a web worker, use importScripts. This is not a very //efficient use of importScripts, importScripts will block until //its script is downloaded and evaluated. However, if web workers //are in play, the expectation that a build has been done so that //only one script needs to be loaded anyway. This may need to be //reevaluated if other use cases become common. importScripts(url); //Account for anonymous modules context.completeLoad(moduleName); } catch (e) { context.onError(makeError('importscripts', 'importScripts failed for ' + moduleName + ' at ' + url, e, [moduleName])); } } }; function getInteractiveScript() { if (interactiveScript && interactiveScript.readyState === 'interactive') { return interactiveScript; } eachReverse(scripts(), function (script) { if (script.readyState === 'interactive') { return (interactiveScript = script); } }); return interactiveScript; } //Look for a data-main script attribute, which could also adjust the baseUrl. if (isBrowser) { //Figure out baseUrl. Get it from the script tag with require.js in it. eachReverse(scripts(), function (script) { //Set the 'head' where we can append children by //using the script's parent. if (!head) { head = script.parentNode; } //Look for a data-main attribute to set main script for the page //to load. If it is there, the path to data main becomes the //baseUrl, if it is not already set. dataMain = script.getAttribute('data-main'); if (dataMain) { //Set final baseUrl if there is not already an explicit one. if (!cfg.baseUrl) { //Pull off the directory of data-main for use as the //baseUrl. src = dataMain.split('/'); mainScript = src.pop(); subPath = src.length ? src.join('/') + '/' : './'; cfg.baseUrl = subPath; dataMain = mainScript; } //Strip off any trailing .js since dataMain is now //like a module name. dataMain = dataMain.replace(jsSuffixRegExp, ''); //Put the data-main script in the files to load. cfg.deps = cfg.deps ? cfg.deps.concat(dataMain) : [dataMain]; return true; } }); } /** * The function that handles definitions of modules. Differs from * require() in that a string for the module should be the first argument, * and the function to execute after dependencies are loaded should * return a value to define the module corresponding to the first argument's * name. */ define = function (name, deps, callback) { var node, context; //Allow for anonymous modules if (typeof name !== 'string') { //Adjust args appropriately callback = deps; deps = name; name = null; } //This module may not have dependencies if (!isArray(deps)) { callback = deps; deps = []; } //If no name, and callback is a function, then figure out if it a //CommonJS thing with dependencies. if (!deps.length && isFunction(callback)) { //Remove comments from the callback string, //look for require calls, and pull them into the dependencies, //but only if there are function args. if (callback.length) { callback .toString() .replace(commentRegExp, '') .replace(cjsRequireRegExp, function (match, dep) { deps.push(dep); }); //May be a CommonJS thing even without require calls, but still //could use exports, and module. Avoid doing exports and module //work though if it just needs require. //REQUIRES the function to expect the CommonJS variables in the //order listed below. deps = (callback.length === 1 ? ['require'] : ['require', 'exports', 'module']).concat(deps); } } //If in IE 6-8 and hit an anonymous define() call, do the interactive //work. if (useInteractive) { node = currentlyAddingScript || getInteractiveScript(); if (node) { if (!name) { name = node.getAttribute('data-requiremodule'); } context = contexts[node.getAttribute('data-requirecontext')]; } } //Always save off evaluating the def call until the script onload handler. //This allows multiple modules to be in a file without prematurely //tracing dependencies, and allows for anonymous module support, //where the module name is not known until the script onload event //occurs. If no context, use the global queue, and get it processed //in the onscript load callback. (context ? context.defQueue : globalDefQueue).push([name, deps, callback]); }; define.amd = { jQuery: true }; /** * Executes the text. Normally just uses eval, but can be modified * to use a better, environment-specific call. Only used for transpiling * loader plugins, not for plain JS modules. * @param {String} text the text to execute/evaluate. */ req.exec = function (text) { /*jslint evil: true */ return eval(text); }; //Set up with config info. req(cfg); }(this)); r.js-2.3.6/build/tests/lib/sourcemapComments/000077500000000000000000000000001334071220400211055ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/sourcemapComments/a.js000066400000000000000000000002311334071220400216570ustar00rootroot00000000000000/** * Module A */ define({ name: 'a', doSomething: function (name) { console.log('Hello ' + name); } }); console.log('a is done'); r.js-2.3.6/build/tests/lib/sourcemapComments/b.js000066400000000000000000000001501334071220400216600ustar00rootroot00000000000000/** * Module B */ define(function () { var name = 'b'; return { name: name }; }); r.js-2.3.6/build/tests/lib/sourcemapComments/build.js000066400000000000000000000002341334071220400225410ustar00rootroot00000000000000({ baseUrl: '.', optimize: 'uglify', generateSourceMaps: true, preserveLicenseComments: true, name: 'main', out: 'main-built.js' }) r.js-2.3.6/build/tests/lib/sourcemapComments/expected-main-built.js000066400000000000000000000006411334071220400253040ustar00rootroot00000000000000/** * A test of source maps with preserved license comments on an uglified file. */ define("a",{name:"a",doSomething:function(e){console.log("Hello "+e)}}),console.log("a is done"),define("b",[],function(){return{name:"b"}}),require(["a","b"],function(e,n){console.log("a message below:"),e.doSomething("world"),console.log("b name: "+n.name)}),define("main",function(){}); //# sourceMappingURL=main-built.js.map r.js-2.3.6/build/tests/lib/sourcemapComments/expected-main-built.js.map000066400000000000000000000017271334071220400260660ustar00rootroot00000000000000{"version":3,"sources":["a.js","b.js","main.js"],"names":["define","name","doSomething","console","log","require","a","b"],"mappings":";;;;;AAGAA,OAAA,KACAC,KAAA,IACAC,YAAA,SAAAD,GACAE,QAAAC,IAAA,SAAAH,MAGAE,QAAAC,IAAA,aCNAJ,OAAA,OAAA,WAEA,OACAC,KAFA,OCDAI,SAAA,IAAA,KAAA,SAAAC,EAAAC,GACAJ,QAAAC,IAAA,oBACAE,EAAAJ,YAAA,SACAC,QAAAC,IAAA,WAAAG,EAAAN,QAGAD,OAAA,OAAA","file":"main-built.js","sourcesContent":["/**\n * Module A\n */\ndefine('a',{\n name: 'a',\n doSomething: function (name) {\n console.log('Hello ' + name);\n }\n});\nconsole.log('a is done');\n\n","/**\n * Module B\n */\ndefine('b',[],function () {\n var name = 'b';\n return {\n name: name\n };\n});\n\n","/**\n * A test of source maps with preserved license comments on an uglified file.\n */\nrequire(['a', 'b'], function (a, b) {\n console.log('a message below:');\n a.doSomething('world');\n console.log('b name: ' + b.name);\n});\n\ndefine(\"main\", function(){});\n\n"]}r.js-2.3.6/build/tests/lib/sourcemapComments/index.html000066400000000000000000000002701334071220400231010ustar00rootroot00000000000000

Hello World

r.js-2.3.6/build/tests/lib/sourcemapComments/main.js000066400000000000000000000003471334071220400223730ustar00rootroot00000000000000/** * A test of source maps with preserved license comments on an uglified file. */ require(['a', 'b'], function (a, b) { console.log('a message below:'); a.doSomething('world'); console.log('b name: ' + b.name); }); r.js-2.3.6/build/tests/lib/sourcemapOutFunction/000077500000000000000000000000001334071220400215755ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/sourcemapOutFunction/js/000077500000000000000000000000001334071220400222115ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/sourcemapOutFunction/js/a.js000066400000000000000000000002311334071220400227630ustar00rootroot00000000000000/** * Module A */ define({ name: 'a', doSomething: function (name) { console.log('Hello ' + name); } }); console.log('a is done'); r.js-2.3.6/build/tests/lib/sourcemapOutFunction/js/b.js000066400000000000000000000001501334071220400227640ustar00rootroot00000000000000/** * Module B */ define(function () { var name = 'b'; return { name: name }; }); r.js-2.3.6/build/tests/lib/sourcemapOutFunction/js/main.js000066400000000000000000000003341334071220400234730ustar00rootroot00000000000000/** * A test of source maps on a concatenated, but not minified file. */ require(['a', 'b'], function (a, b) { console.log('a message below:'); a.doSomething('world'); console.log('b name: ' + b.name); }); r.js-2.3.6/build/tests/lib/sourcemapSingle/000077500000000000000000000000001334071220400205415ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/sourcemapSingle/a.js000066400000000000000000000002311334071220400213130ustar00rootroot00000000000000/** * Module A */ define({ name: 'a', doSomething: function (name) { console.log('Hello ' + name); } }); console.log('a is done'); r.js-2.3.6/build/tests/lib/sourcemapSingle/b.js000066400000000000000000000001501334071220400213140ustar00rootroot00000000000000/** * Module B */ define(function () { var name = 'b'; return { name: name }; }); r.js-2.3.6/build/tests/lib/sourcemapSingle/build.js000066400000000000000000000002351334071220400221760ustar00rootroot00000000000000({ baseUrl: '.', optimize: 'uglify2', generateSourceMaps: true, preserveLicenseComments: false, name: 'main', out: 'main-built.js' })r.js-2.3.6/build/tests/lib/sourcemapSingle/expected-main-built.js.map000066400000000000000000000017071334071220400255200ustar00rootroot00000000000000{"version":3,"sources":["a.js","b.js","main.js"],"names":["define","name","doSomething","console","log","require","a","b"],"mappings":"AAGAA,OAAA,KACAC,KAAA,IACAC,YAAA,SAAAD,GACAE,QAAAC,IAAA,SAAAH,MAGAE,QAAAC,IAAA,aCNAJ,OAAA,OAAA,WAEA,OACAC,KAFA,OCDAI,SAAA,IAAA,KAAA,SAAAC,EAAAC,GACAJ,QAAAC,IAAA,oBACAE,EAAAJ,YAAA,SACAC,QAAAC,IAAA,WAAAG,EAAAN,QAGAD,OAAA,OAAA","file":"main-built.js","sourcesContent":["/**\n * Module A\n */\ndefine('a',{\n name: 'a',\n doSomething: function (name) {\n console.log('Hello ' + name);\n }\n});\nconsole.log('a is done');\n\n","/**\n * Module B\n */\ndefine('b',[],function () {\n var name = 'b';\n return {\n name: name\n };\n});\n\n","/**\n * A test of source maps on a concatenated, but not minified file.\n */\nrequire(['a', 'b'], function (a, b) {\n console.log('a message below:');\n a.doSomething('world');\n console.log('b name: ' + b.name);\n});\n\ndefine(\"main\", function(){});\n\n"]}r.js-2.3.6/build/tests/lib/sourcemapSingle/expected.js000066400000000000000000000005101334071220400226740ustar00rootroot00000000000000define("a",{name:"a",doSomething:function(e){console.log("Hello "+e)}}),console.log("a is done"),define("b",[],function(){return{name:"b"}}),require(["a","b"],function(e,n){console.log("a message below:"),e.doSomething("world"),console.log("b name: "+n.name)}),define("main",function(){}); //# sourceMappingURL=main-built.js.mapr.js-2.3.6/build/tests/lib/sourcemapSingle/index.html000066400000000000000000000002701334071220400225350ustar00rootroot00000000000000

Hello World

r.js-2.3.6/build/tests/lib/sourcemapSingle/main-built.js000066400000000000000000000005101334071220400231340ustar00rootroot00000000000000define("a",{name:"a",doSomething:function(e){console.log("Hello "+e)}}),console.log("a is done"),define("b",[],function(){return{name:"b"}}),require(["a","b"],function(e,n){console.log("a message below:"),e.doSomething("world"),console.log("b name: "+n.name)}),define("main",function(){}); //# sourceMappingURL=main-built.js.mapr.js-2.3.6/build/tests/lib/sourcemapSingle/main-built.js.map000066400000000000000000000017071334071220400237210ustar00rootroot00000000000000{"version":3,"sources":["a.js","b.js","main.js"],"names":["define","name","doSomething","console","log","require","a","b"],"mappings":"AAGAA,OAAA,KACAC,KAAA,IACAC,YAAA,SAAAD,GACAE,QAAAC,IAAA,SAAAH,MAGAE,QAAAC,IAAA,aCNAJ,OAAA,OAAA,WAEA,OACAC,KAFA,OCDAI,SAAA,IAAA,KAAA,SAAAC,EAAAC,GACAJ,QAAAC,IAAA,oBACAE,EAAAJ,YAAA,SACAC,QAAAC,IAAA,WAAAG,EAAAN,QAGAD,OAAA,OAAA","file":"main-built.js","sourcesContent":["/**\n * Module A\n */\ndefine('a',{\n name: 'a',\n doSomething: function (name) {\n console.log('Hello ' + name);\n }\n});\nconsole.log('a is done');\n\n","/**\n * Module B\n */\ndefine('b',[],function () {\n var name = 'b';\n return {\n name: name\n };\n});\n\n","/**\n * A test of source maps on a concatenated, but not minified file.\n */\nrequire(['a', 'b'], function (a, b) {\n console.log('a message below:');\n a.doSomething('world');\n console.log('b name: ' + b.name);\n});\n\ndefine(\"main\", function(){});\n\n"]}r.js-2.3.6/build/tests/lib/sourcemapSingle/main.js000066400000000000000000000003341334071220400220230ustar00rootroot00000000000000/** * A test of source maps on a concatenated, but not minified file. */ require(['a', 'b'], function (a, b) { console.log('a message below:'); a.doSomething('world'); console.log('b name: ' + b.name); }); r.js-2.3.6/build/tests/lib/sourcemapWrap/000077500000000000000000000000001334071220400202315ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/sourcemapWrap/a.js000066400000000000000000000010601334071220400210040ustar00rootroot00000000000000(function(root, factory) { if (typeof define === 'function' && define.amd) { define(factory); } else if (typeof module === 'object' && module.exports) { module.exports = factory(); } else { root.a = factory(); } }(this, function() { var a = function() { this._someString = ""; }; a.prototype._someString = ""; a.prototype.getSomeString = function() { return this._someString; }; a.prototype.setSomeString = function(str) { this._someString = str; }; return a; }));r.js-2.3.6/build/tests/lib/sourcemapWrap/b.js000066400000000000000000000013071334071220400210110ustar00rootroot00000000000000(function (root, factory) { if (typeof define === 'function' && define.amd) { define(["./a"], factory); } else if (typeof module === 'object' && module.exports) { module.exports = factory(require('./a')); } else { root.b = factory(root.a); } }(this, function (a) { var b = function() { this._someNumber = 0; this._a = new a(); }; b.prototype._a = null; b.prototype._someNumber = 0; b.prototype.getA = function() { return this._a; }; b.prototype.getSomeNumber = function() { return this._someNumber; }; b.prototype.setSomeNumber = function(num) { this._someNumber = num; }; return b; }));r.js-2.3.6/build/tests/lib/sourcemapWrap/build-with-wrap.js000066400000000000000000000003571334071220400236130ustar00rootroot00000000000000({ preserveLicenseComments: false, generateSourceMaps: true, name: "main", optimize: "none", wrap: { startFile: ["wrap-start.js"], endFile: ["wrap-end.js"] }, out: "./built/built-with-wrap.js" })r.js-2.3.6/build/tests/lib/sourcemapWrap/build-without-wrap.js000066400000000000000000000002311334071220400243320ustar00rootroot00000000000000({ preserveLicenseComments: false, generateSourceMaps: true, name: "main", optimize: "none", out: "./built/built-without-wrap.js" }) r.js-2.3.6/build/tests/lib/sourcemapWrap/main.js000066400000000000000000000012501334071220400215110ustar00rootroot00000000000000(function(root, factory) { if (typeof define === 'function' && define.amd) { define(["./a", "./b"], factory); } else if (typeof module === 'object' && module.exports) { module.exports = factory(require('./a'), require('./b')); } else { root.main = factory(root.a, root.b); } }(this, function(a, b) { var mainClass = function() { this._a = new a(); this._b = new b(); }; mainClass.prototype._a = null; mainClass.prototype._b = null; mainClass.prototype.getA = function() { return this._a; }; mainClass.prototype.getB = function() { return this._b; }; return mainClass; }));r.js-2.3.6/build/tests/lib/sourcemapWrap/wrap-end.js000066400000000000000000000000051334071220400222770ustar00rootroot00000000000000}());r.js-2.3.6/build/tests/lib/sourcemapWrap/wrap-start.js000066400000000000000000000000151334071220400226670ustar00rootroot00000000000000(function() {r.js-2.3.6/build/tests/lib/stdout/000077500000000000000000000000001334071220400167235ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/stdout/build.js000066400000000000000000000000641334071220400203600ustar00rootroot00000000000000{ name: 'main', out: 'stdout', logLevel: 4 } r.js-2.3.6/build/tests/lib/stdout/main.js000066400000000000000000000000321334071220400202000ustar00rootroot00000000000000define({ name: 'main' }); r.js-2.3.6/build/tests/lib/stdout/stdout000066400000000000000000000000351334071220400201660ustar00rootroot00000000000000define("main",{name:"main"});r.js-2.3.6/build/tests/lib/stubModules/000077500000000000000000000000001334071220400177075ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/stubModules/a.js000066400000000000000000000000331334071220400204610ustar00rootroot00000000000000define({ name: 'a' }); r.js-2.3.6/build/tests/lib/stubModules/build.js000066400000000000000000000003011334071220400213360ustar00rootroot00000000000000{ baseUrl: '.', paths: { text: '../../../../../../requirejs/text/text' }, optimize: 'none', stubModules: ['a', 'text'], name: 'main', out: 'main-built.js' } r.js-2.3.6/build/tests/lib/stubModules/create/000077500000000000000000000000001334071220400211525ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/stubModules/create/a.js000066400000000000000000000000331334071220400217240ustar00rootroot00000000000000define({ name: 'a' }); r.js-2.3.6/build/tests/lib/stubModules/create/build.js000066400000000000000000000002011334071220400226000ustar00rootroot00000000000000{ baseUrl: '.', optimize: 'none', name: 'foobar', include: ['a'], create: true, out: 'foobar-built.js' } r.js-2.3.6/build/tests/lib/stubModules/create/expected.js000066400000000000000000000001011334071220400233010ustar00rootroot00000000000000 define('a',{ name: 'a' }); define("foobar", function(){}); r.js-2.3.6/build/tests/lib/stubModules/expected.js000066400000000000000000000004361334071220400220510ustar00rootroot00000000000000 define('a',{}); define('text',{load: function(id){throw new Error("Dynamic load not allowed: " + id);}}); define('text!hello.txt',[],function () { return 'hello world\n';}); define('main',['a', 'text!hello.txt'], function (a, msg) { console.log(a.name); console.log(msg); }); r.js-2.3.6/build/tests/lib/stubModules/hello.txt000066400000000000000000000000141334071220400215460ustar00rootroot00000000000000hello world r.js-2.3.6/build/tests/lib/stubModules/main.js000066400000000000000000000001471334071220400211730ustar00rootroot00000000000000define(['a', 'text!hello.txt'], function (a, msg) { console.log(a.name); console.log(msg); }); r.js-2.3.6/build/tests/lib/stubModules/perModule/000077500000000000000000000000001334071220400216435ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/stubModules/perModule/build.js000066400000000000000000000004131334071220400232760ustar00rootroot00000000000000{ baseUrl: 'src', dir: 'built', optimize: 'none', stubModules: ['c'], modules: [ { name: 'first', stubModules: ['a'] }, { name: 'second', stubModules: ['b'] } ] } r.js-2.3.6/build/tests/lib/stubModules/perModule/expected-first.js000066400000000000000000000002041334071220400251230ustar00rootroot00000000000000 define('a',{}); define('c',{}); define('first',['a', 'c'], function (a, c) { console.log(a.name); console.log(c.name); }); r.js-2.3.6/build/tests/lib/stubModules/perModule/expected-second.js000066400000000000000000000002071334071220400252520ustar00rootroot00000000000000 define('b',{}); define('c',{}); define('second',['b', 'c'], function (b, c) { console.log(b.name); console.log(c.name); }); r.js-2.3.6/build/tests/lib/stubModules/perModule/expected.js000066400000000000000000000004361334071220400240050ustar00rootroot00000000000000 define('a',{}); define('text',{load: function(id){throw new Error("Dynamic load not allowed: " + id);}}); define('text!hello.txt',[],function () { return 'hello world\n';}); define('main',['a', 'text!hello.txt'], function (a, msg) { console.log(a.name); console.log(msg); }); r.js-2.3.6/build/tests/lib/stubModules/perModule/src/000077500000000000000000000000001334071220400224325ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/stubModules/perModule/src/a.js000066400000000000000000000000331334071220400232040ustar00rootroot00000000000000define({ name: 'a' }); r.js-2.3.6/build/tests/lib/stubModules/perModule/src/b.js000066400000000000000000000000331334071220400232050ustar00rootroot00000000000000define({ name: 'b' }); r.js-2.3.6/build/tests/lib/stubModules/perModule/src/c.js000066400000000000000000000000331334071220400232060ustar00rootroot00000000000000define({ name: 'c' }); r.js-2.3.6/build/tests/lib/stubModules/perModule/src/first.js000066400000000000000000000001331334071220400241140ustar00rootroot00000000000000define(['a', 'c'], function (a, c) { console.log(a.name); console.log(c.name); }); r.js-2.3.6/build/tests/lib/stubModules/perModule/src/second.js000066400000000000000000000001351334071220400242420ustar00rootroot00000000000000define(['b', 'c'], function (b, c) { console.log(b.name); console.log(c.name); }); r.js-2.3.6/build/tests/lib/transportBeforeMinify/000077500000000000000000000000001334071220400217345ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/transportBeforeMinify/build.js000066400000000000000000000001531334071220400233700ustar00rootroot00000000000000{ appDir: 'www', baseUrl: 'js', dir: 'www-built', modules: [{ name: 'app' }] } r.js-2.3.6/build/tests/lib/transportBeforeMinify/www/000077500000000000000000000000001334071220400225605ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/transportBeforeMinify/www/js/000077500000000000000000000000001334071220400231745ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/transportBeforeMinify/www/js/a.js000066400000000000000000000000341334071220400237470ustar00rootroot00000000000000define({ name: 'a' }); r.js-2.3.6/build/tests/lib/transportBeforeMinify/www/js/app.js000066400000000000000000000000601334071220400243060ustar00rootroot00000000000000 require(['somelib'], function (somelib) { }); r.js-2.3.6/build/tests/lib/transportBeforeMinify/www/js/b.js000066400000000000000000000000711334071220400237510ustar00rootroot00000000000000define(function (require) { return require('a'); }); r.js-2.3.6/build/tests/lib/transportBeforeMinify/www/js/somelib.js000066400000000000000000000000701334071220400251610ustar00rootroot00000000000000define(function (require) { return require('a'); }); r.js-2.3.6/build/tests/lib/typescriptConfig/000077500000000000000000000000001334071220400207355ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/typescriptConfig/a.js000066400000000000000000000000331334071220400215070ustar00rootroot00000000000000define({ name: 'a' }); r.js-2.3.6/build/tests/lib/typescriptConfig/build.js000066400000000000000000000001501334071220400223660ustar00rootroot00000000000000({ name: 'main', out: 'main-built.js', optimize: 'none' }); //# sourceMappingURL=bogus.js.map r.js-2.3.6/build/tests/lib/typescriptConfig/expected.js000066400000000000000000000001371334071220400230750ustar00rootroot00000000000000define('a',{ name: 'a' }); require(['a'], function(a) {}); define("main", function(){}); r.js-2.3.6/build/tests/lib/typescriptConfig/main.js000066400000000000000000000000371334071220400222170ustar00rootroot00000000000000require(['a'], function(a) {});r.js-2.3.6/build/tests/lib/uglifyMangleProperties/000077500000000000000000000000001334071220400221015ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/uglifyMangleProperties/a.js000066400000000000000000000000571334071220400226610ustar00rootroot00000000000000define({ name: 'a', something: 'else' }); r.js-2.3.6/build/tests/lib/uglifyMangleProperties/build.js000066400000000000000000000002121334071220400235310ustar00rootroot00000000000000{ name: 'main', out: 'main-built.js', uglify: { mangleProperties: { regex: /something/ } } } r.js-2.3.6/build/tests/lib/uglifyMangleProperties/expected.js000066400000000000000000000001211334071220400242320ustar00rootroot00000000000000define("a",{name:"a",a:"else"}),define("main",["a"],function(e){console.log(e)});r.js-2.3.6/build/tests/lib/uglifyMangleProperties/main.js000066400000000000000000000000651334071220400233640ustar00rootroot00000000000000define(['a'], function(a) { console.log(a); }); r.js-2.3.6/build/tests/lib/umd/000077500000000000000000000000001334071220400161665ustar00rootroot00000000000000r.js-2.3.6/build/tests/lib/umd/build.js000066400000000000000000000001271334071220400176230ustar00rootroot00000000000000{ baseUrl: '.', name: 'main', out: 'main-built.js', optimize: 'none' } r.js-2.3.6/build/tests/lib/umd/expected.js000066400000000000000000000077151334071220400203370ustar00rootroot00000000000000 (function (e) { if ("function" == typeof bootstrap)bootstrap("foo", e); else if ("object" == typeof exports)module.exports = e(); else if ("function" == typeof define && define.amd)define('lib',e); else if ("undefined" != typeof ses) { if (!ses.ok())return; ses.makeFoo = e } else"undefined" != typeof window ? window.foo = e() : global.foo = e() })(function () { var define, ses, bootstrap, 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) { var async = require('async'); module.exports = { foo: 'bar' }; }, {"async": 2}], 2: [function (require, module, exports) { var process = require("__browserify_process"); /*global setImmediate: false, setTimeout: false, console: false */ (function () { var async = {}; // ... Async code here ... // AMD / RequireJS if (typeof define !== 'undefined' && define.amd) { define([], function () { return async; }); } // Node.js else if (typeof module !== 'undefined' && module.exports) { module.exports = async; } // included directly via

r.js in the browser

A test of running r.js in the browser.

Build Messages

Output

r.js-2.3.6/tests/browser/r-worker.js000066400000000000000000000010311334071220400173200ustar00rootroot00000000000000importScripts('../../r.js'); self.onmessage = function (evt) { var out, buildText; if (evt.data === 'run') { requirejs.optimize({ baseUrl: '.', paths: { 'd': 'sub/d' }, include: ['a'], out: function (text) { out = text; } }, function (buildText) { self.postMessage(JSON.stringify({ out: out, buildText: buildText }, null, ' ')); }); } }; r.js-2.3.6/tests/browser/r.html000066400000000000000000000021441334071220400163470ustar00rootroot00000000000000

r.js in the browser

A test of running r.js in the browser.

Build Messages

Output

r.js-2.3.6/tests/browser/sub/000077500000000000000000000000001334071220400160105ustar00rootroot00000000000000r.js-2.3.6/tests/browser/sub/d.js000066400000000000000000000000321334071220400165640ustar00rootroot00000000000000define({ name: 'd' }); r.js-2.3.6/tests/doh/000077500000000000000000000000001334071220400143065ustar00rootroot00000000000000r.js-2.3.6/tests/doh/LICENSE000066400000000000000000000261231334071220400153170ustar00rootroot00000000000000Dojo is available under *either* the terms of the modified BSD license *or* the Academic Free License version 2.1. As a recipient of Dojo, you may choose which license to receive this code under (except as noted in per-module LICENSE files). Some modules may not be the copyright of the Dojo Foundation. These modules contain explicit declarations of copyright in both the LICENSE files in the directories in which they reside and in the code itself. No external contributions are allowed under licenses which are fundamentally incompatible with the AFL or BSD licenses that Dojo is distributed under. The text of the AFL and BSD licenses is reproduced below. ------------------------------------------------------------------------------- The "New" BSD License: ********************** Copyright (c) 2005-2009, The Dojo Foundation All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the Dojo Foundation nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ------------------------------------------------------------------------------- The Academic Free License, v. 2.1: ********************************** This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following notice immediately following the copyright notice for the Original Work: Licensed under the Academic Free License version 2.1 1) Grant of Copyright License. Licensor hereby grants You a world-wide, royalty-free, non-exclusive, perpetual, sublicenseable license to do the following: a) to reproduce the Original Work in copies; b) to prepare derivative works ("Derivative Works") based upon the Original Work; c) to distribute copies of the Original Work and Derivative Works to the public; d) to perform the Original Work publicly; and e) to display the Original Work publicly. 2) Grant of Patent License. Licensor hereby grants You a world-wide, royalty-free, non-exclusive, perpetual, sublicenseable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, to make, use, sell and offer for sale the Original Work and Derivative Works. 3) Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor hereby agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work, and by publishing the address of that information repository in a notice immediately following the copyright notice that applies to the Original Work. 4) Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior written permission of the Licensor. Nothing in this License shall be deemed to grant any rights to trademarks, copyrights, patents, trade secrets or any other intellectual property of Licensor except as expressly stated herein. No patent license is granted to make, use, sell or offer to sell embodiments of any patent claims other than the licensed claims defined in Section 2. No right is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under different terms from this License any Original Work that Licensor otherwise would have a right to license. 5) This section intentionally omitted. 6) Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. 7) Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately proceeding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of NON-INFRINGEMENT, MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to Original Work is granted hereunder except under this disclaimer. 8) Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to any person for any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to liability for death or personal injury resulting from Licensor's negligence to the extent applicable law prohibits such limitation. Some jurisdictions do not allow the exclusion or limitation of incidental or consequential damages, so this exclusion and limitation may not apply to You. 9) Acceptance and Termination. If You distribute copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. Nothing else but this License (or another written agreement between Licensor and You) grants You permission to create Derivative Works based upon the Original Work or to exercise any of the rights granted in Section 1 herein, and any attempt to do so except under the terms of this License (or another written agreement between Licensor and You) is expressly prohibited by U.S. copyright law, the equivalent laws of other countries, and by international treaty. Therefore, by exercising any of the rights granted to You in Section 1 herein, You indicate Your acceptance of this License and all of its terms and conditions. 10) Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. 11) Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of the U.S. Copyright Act, 17 U.S.C. § 101 et seq., the equivalent laws of other countries, and international treaty. This section shall survive the termination of this License. 12) Attorneys Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. 13) Miscellaneous. This License represents the complete agreement concerning the subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. 14) Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. 15) Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. This license is Copyright (C) 2003-2004 Lawrence E. Rosen. All rights reserved. Permission is hereby granted to copy and distribute this license without modification. This license may not be modified without the express written permission of its copyright owner. r.js-2.3.6/tests/doh/README000066400000000000000000000010001334071220400151550ustar00rootroot00000000000000DOH may be run standalone by issuing a command like the following: java -jar ../shrinksafe/js.jar runner.js testModule=tests.colors where the testModule argument is optional and shrinksafe/js.jar is just a convenient copy of the Rhino JavaScript engine -- the custom patch is not required. Optional arguments include: * dojoUrl - specifies the location of dojo.js * testUrl - specifies a Javascript file to load with initialization code * testModule - specifies a test module in the dojo package namespace r.js-2.3.6/tests/doh/_browserRunner.js000066400000000000000000000605771334071220400176770ustar00rootroot00000000000000if(window["dojo"]){ dojo.provide("doh._browserRunner"); } // FIXME: need to add prompting for monkey-do testing (function(){ doh.setTimeout = function (fn, time) { return setTimeout(fn, time); }; try{ var topdog = (window.parent == window) || !Boolean(window.parent.doh); }catch(e){ //can't access window.parent.doh, then consider ourselves as topdog topdog=true; } if(topdog){ // we're the top-dog window. // borrowed from Dojo, etc. var byId = function(id){ return document.getElementById(id); }; var _addOnEvt = function( type, // string refOrName, // function or string scope){ // object, defaults is window if(!scope){ scope = window; } var funcRef = refOrName; if(typeof refOrName == "string"){ funcRef = scope[refOrName]; } var enclosedFunc = function(){ return funcRef.apply(scope, arguments); }; if((window["dojo"])&&(type == "load")){ dojo.addOnLoad(enclosedFunc); }else{ if(window["attachEvent"]){ window.attachEvent("on"+type, enclosedFunc); }else if(window["addEventListener"]){ window.addEventListener(type, enclosedFunc, false); }else if(document["addEventListener"]){ document.addEventListener(type, enclosedFunc, false); } } }; // // Over-ride or implement base runner.js-provided methods // var escapeXml = function(str){ //summary: // Adds escape sequences for special characters in XML: &<>"' // Optionally skips escapes for single quotes return str.replace(/&/gm, "&").replace(//gm, ">").replace(/"/gm, """); // string }; var _logBacklog = [], _loggedMsgLen = 0; var sendToLogPane = function(args, skip){ var msg = ""; for(var x=0; x "); if(!byId("logBody")){ _logBacklog.push(msg); return; }else if(_logBacklog.length && !skip){ var tm; while((tm=_logBacklog.shift())){ sendToLogPane(tm, true); } } var logBody=byId("logBody"); var tn = document.createElement("div"); tn.innerHTML = msg; //tn.id="logmsg_"+logBody.childNodes.length; logBody.appendChild(tn); _loggedMsgLen++; } var findTarget = function(n){ while(n && !n.getAttribute('_target')){ n=n.parentNode; if(!n.getAttribute){ n=null; } } return n; } doh._jumpToLog = function(e){ //console.log(e); var node = findTarget(e?e.target:window.event.srcElement); if(!node){ return; } var _t = Number(node.getAttribute('_target')); var lb = byId("logBody"); if(_t>=lb.childNodes.length){ return; } var t = lb.childNodes[_t]; t.scrollIntoView(); if(window.dojo){ //t.parentNode.parentNode is
, only it has a explicitly set background-color, //all children of it are transparent var bgColor = dojo.style(t.parentNode.parentNode,'backgroundColor'); //node.parentNode is the tr which has background-color set explicitly var hicolor = dojo.style(node.parentNode,'backgroundColor'); var unhilight = dojo.animateProperty({ node: t, duration: 500, properties: { backgroundColor: { start:hicolor, end: bgColor } }, onEnd: function(){ t.style.backgroundColor=""; } }); var hilight = dojo.animateProperty({ node: t, duration: 500, properties: { backgroundColor: { start:bgColor, end: hicolor } }, onEnd: function(){ unhilight.play(); } }); hilight.play(); } }; doh._jumpToSuite = function(e){ var node = findTarget(e ? e.target : window.event.srcElement); if(!node){ return; } var _g = node.getAttribute('_target'); var gn = getGroupNode(_g); if(!gn){ return; } gn.scrollIntoView(); }; doh._init = (function(oi){ return function(){ var lb = byId("logBody"); if(lb){ // clear the console before each run while(lb.firstChild){ lb.removeChild(lb.firstChild); } _loggedMsgLen = 0; } this._totalTime = 0; this._suiteCount = 0; oi.apply(doh, arguments); } })(doh._init); doh._setupGroupForRun = (function(os){ //overload _setupGroupForRun to record which log line to jump to when a suite is clicked return function(groupName){ var tg = doh._groups[groupName]; doh._curTestCount = tg.length; doh._curGroupCount = 1; var gn = getGroupNode(groupName); if(gn){ //two lines will be added, scroll the second line into view gn.getElementsByTagName("td")[2].setAttribute('_target',_loggedMsgLen+1); } os.apply(doh,arguments); } })(doh._setupGroupForRun); doh._report = (function(or){ //overload _report to insert a tfoot return function(){ var tb = byId("testList"); if(tb){ var tfoots=tb.getElementsByTagName('tfoot'); if(tfoots.length){ tb.removeChild(tfoots[0]); } var foot = tb.createTFoot(); var row = foot.insertRow(-1); row.className = 'inProgress'; var cell=row.insertCell(-1); cell.colSpan=2; cell.innerHTML="Result"; cell = row.insertCell(-1); cell.innerHTML=this._testCount+" tests in "+this._groupCount+" groups /"+this._errorCount+" errors, "+this._failureCount+" failures"; cell.setAttribute('_target',_loggedMsgLen+1); row.insertCell(-1).innerHTML=doh._totalTime+"ms"; } //This location can do the final performance rendering for the results //of any performance tests. var plotResults = null; var standby; if(doh.perfTestResults){ if(window.dojo){ //If we have dojo and here are perf tests results, //well, we'll use the dojo charting functions dojo.require("dojox.charting.Chart2D"); dojo.require("dojox.charting.DataChart"); dojo.require("dojox.charting.plot2d.Scatter"); dojo.require("dojox.charting.plot2d.Lines"); dojo.require("dojo.data.ItemFileReadStore"); plotResults = doh._dojoPlotPerfResults; }else{ plotResults = doh._asciiPlotPerfResults; } try{ var g; var pBody = byId("perfTestsBody"); var chartsToRender = []; if(doh.perfTestResults){ doh.showPerfTestsPage(); } for(g in doh.perfTestResults){ var grp = doh.perfTestResults[g]; var hdr = document.createElement("h1"); hdr.appendChild(document.createTextNode("Group: " + g)); pBody.appendChild(hdr); var ind = document.createElement("blockquote"); pBody.appendChild(ind); var f; for(f in grp){ var fResults = grp[f]; if(!fResults){ continue; } var fhdr = document.createElement("h3"); fhdr.appendChild(document.createTextNode("TEST: " + f)); fhdr.style.textDecoration = "underline"; ind.appendChild(fhdr); var div = document.createElement("div"); ind.appendChild(div); //Figure out the basic info var results = "TRIAL SIZE: " + fResults.trials[0].testIterations + " iterations
" + "NUMBER OF TRIALS: " + fResults.trials.length + "
"; //Figure out the average test pass cost. var i; var iAvgArray = []; var tAvgArray = []; for(i = 0; i < fResults.trials.length; i++){ iAvgArray.push(fResults.trials[i].average); tAvgArray.push(fResults.trials[i].executionTime); } results += "AVERAGE TRIAL EXECUTION TIME: " + doh.average(tAvgArray).toFixed(10) + "ms.
"; results += "MAXIMUM TEST ITERATION TIME: " + doh.max(iAvgArray).toFixed(10) + "ms.
"; results += "MINIMUM TEST ITERATION TIME: " + doh.min(iAvgArray).toFixed(10) + "ms.
"; results += "AVERAGE TEST ITERATION TIME: " + doh.average(iAvgArray).toFixed(10) + "ms.
"; results += "MEDIAN TEST ITERATION TIME: " + doh.median(iAvgArray).toFixed(10) + "ms.
"; results += "VARIANCE TEST ITERATION TIME: " + doh.variance(iAvgArray).toFixed(10) + "ms.
"; results += "STANDARD DEVIATION ON TEST ITERATION TIME: " + doh.standardDeviation(iAvgArray).toFixed(10) + "ms.
"; //Okay, attach it all in. div.innerHTML = results; div = document.createElement("div"); div.innerHTML = "

Average Test Execution Time (in milliseconds, with median line)

"; ind.appendChild(div); div = document.createElement("div"); dojo.style(div, "width", "600px"); dojo.style(div, "height", "250px"); ind.appendChild(div); chartsToRender.push({ div: div, title: "Average Test Execution Time", data: iAvgArray }); div = document.createElement("div"); div.innerHTML = "

Average Trial Execution Time (in milliseconds, with median line)

"; ind.appendChild(div); div = document.createElement("div"); dojo.style(div, "width", "600px"); dojo.style(div, "height", "250px"); ind.appendChild(div); chartsToRender.push({ div: div, title: "Average Trial Execution Time", data: tAvgArray }); } } //Lazy-render these to give the browser time and not appear locked. var delayedRenders = function() { if(chartsToRender.length){ var chartData = chartsToRender.shift(); plotResults(chartData.div, chartData.title, chartData.data); } doh.setTimeout(delayedRenders, 50); }; doh.setTimeout(delayedRenders, 150); }catch(e){ doh.debug(e); } } or.apply(doh,arguments); } })(doh._report); if(this["opera"] && opera.postError){ doh.debug = function(){ var msg = ""; for(var x=0; x
 
"; tds[3].innerHTML = ""; tb.appendChild(tg); return tg; } var addFixtureToList = function(group, fixture){ if(!testTemplate){ return; } var cgn = groupNodes[group]; if(!cgn["__items"]){ cgn.__items = []; } var tn = testTemplate.cloneNode(true); var tds = tn.getElementsByTagName("td"); tds[2].innerHTML = fixture.name; tds[3].innerHTML = ""; var nn = (cgn.__lastFixture||cgn.__groupNode).nextSibling; if(nn){ nn.parentNode.insertBefore(tn, nn); }else{ cgn.__groupNode.parentNode.appendChild(tn); } // FIXME: need to make group display toggleable!! tn.style.display = "none"; cgn.__items.push(tn); return (cgn.__lastFixture = tn); } var getFixtureNode = function(group, fixture){ if(groupNodes[group]){ return groupNodes[group][fixture.name]; } return null; } var getGroupNode = function(group){ if(groupNodes[group]){ return groupNodes[group].__groupNode; } return null; } var updateBacklog = []; doh._updateTestList = function(group, fixture, unwindingBacklog){ if(!loaded){ if(group && fixture){ updateBacklog.push([group, fixture]); } return; }else if(updateBacklog.length && !unwindingBacklog){ var tr; while((tr=updateBacklog.shift())){ doh._updateTestList(tr[0], tr[1], true); } } if(group && fixture){ if(!groupNodes[group]){ groupNodes[group] = { "__groupNode": addGroupToList(group) }; } if(!groupNodes[group][fixture.name]){ groupNodes[group][fixture.name] = addFixtureToList(group, fixture) } } } doh._testRegistered = doh._updateTestList; doh._groupStarted = function(group){ if(this._suiteCount == 0){ this._runedSuite = 0; this._currentGlobalProgressBarWidth = 0; this._suiteCount = this._testCount; } // console.debug("_groupStarted", group); if(doh._inGroup != group){ doh._groupTotalTime = 0; doh._runed = 0; doh._inGroup = group; this._runedSuite++; } var gn = getGroupNode(group); if(gn){ gn.className = "inProgress"; } } doh._groupFinished = function(group, success){ // console.debug("_groupFinished", group); var gn = getGroupNode(group); if(gn && doh._inGroup == group){ doh._totalTime += doh._groupTotalTime; gn.getElementsByTagName("td")[3].innerHTML = doh._groupTotalTime+"ms"; gn.getElementsByTagName("td")[2].lastChild.className = ""; doh._inGroup = null; //doh._runedSuite++; var failure = doh._updateGlobalProgressBar(this._runedSuite/this._groupCount,success,group); gn.className = failure ? "failure" : "success"; //doh._runedSuite--; doh._currentGlobalProgressBarWidth = parseInt(this._runedSuite/this._groupCount*10000)/100; //byId("progressOuter").style.width = parseInt(this._runedSuite/this._suiteCount*100)+"%"; } if(doh._inGroup == group){ this.debug("Total time for GROUP \"",group,"\" is ",doh._groupTotalTime,"ms"); } } doh._testStarted = function(group, fixture){ // console.debug("_testStarted", group, fixture.name); var fn = getFixtureNode(group, fixture); if(fn){ fn.className = "inProgress"; } } var _nameTimes = {}; var _playSound = function(name){ if(byId("hiddenAudio") && byId("audio") && byId("audio").checked){ // console.debug("playing:", name); var nt = _nameTimes[name]; // only play sounds once every second or so if((!nt)||(((new Date)-nt) > 700)){ _nameTimes[name] = new Date(); var tc = document.createElement("span"); byId("hiddenAudio").appendChild(tc); tc.innerHTML = ''; } } } doh._updateGlobalProgressBar = function(p,success,group){ var outerContainer=byId("progressOuter"); var gdiv=outerContainer.childNodes[doh._runedSuite-1]; if(!gdiv){ gdiv=document.createElement('div'); outerContainer.appendChild(gdiv); gdiv.className='success'; gdiv.setAttribute('_target',group); } if(!success && !gdiv._failure){ gdiv._failure=true; gdiv.className='failure'; if(group){ gdiv.setAttribute('title','failed group '+group); } } var tp=parseInt(p*10000)/100; gdiv.style.width = (tp-doh._currentGlobalProgressBarWidth)+"%"; return gdiv._failure; } doh._testFinished = function(group, fixture, success){ var fn = getFixtureNode(group, fixture); var elapsed = fixture.endTime-fixture.startTime; if(fn){ fn.getElementsByTagName("td")[3].innerHTML = elapsed+"ms"; fn.className = (success) ? "success" : "failure"; fn.getElementsByTagName("td")[2].setAttribute('_target', _loggedMsgLen); if(!success){ _playSound("doh"); var gn = getGroupNode(group); if(gn){ gn.className = "failure"; _getGroupToggler(group)(null, true); } } } if(doh._inGroup == group){ var gn = getGroupNode(group); doh._runed++; if(gn && doh._curTestCount){ var p = doh._runed/doh._curTestCount; var groupfail = this._updateGlobalProgressBar((doh._runedSuite+p-1)/doh._groupCount,success,group); var pbar = gn.getElementsByTagName("td")[2].lastChild; pbar.className = groupfail?"failure":"success"; pbar.style.width = parseInt(p*100)+"%"; gn.getElementsByTagName("td")[3].innerHTML = parseInt(p*10000)/100+"%"; } } this._groupTotalTime += elapsed; this.debug((success ? "PASSED" : "FAILED"), "test:", fixture.name, elapsed, 'ms'); } // FIXME: move implementation to _browserRunner? doh.registerUrl = function( /*String*/ group, /*String*/ url, /*Integer*/ timeout){ var tg = new String(group); this.register(group, { name: url, setUp: function(){ doh.currentGroupName = tg; doh.currentGroup = this; doh.currentUrl = url; this.d = new doh.Deferred(); doh.currentTestDeferred = this.d; doh.showTestPage(); byId("testBody").src = url; }, timeout: timeout||10000, // 10s // timeout: timeout||1000, // 10s runTest: function(){ // FIXME: implement calling into the url's groups here!! return this.d; }, tearDown: function(){ doh.currentGroupName = null; doh.currentGroup = null; doh.currentTestDeferred = null; doh.currentUrl = null; // this.d.errback(false); // byId("testBody").src = "about:blank"; doh.showLogPage(); } }); } // // Utility code for runner.html // // var isSafari = navigator.appVersion.indexOf("Safari") >= 0; var tabzidx = 1; var _showTab = function(toShow, toHide){ // FIXME: I don't like hiding things this way. var i; for(i = 0; i < toHide.length; i++){ var node = byId(toHide[i]); if(node){ node.style.display="none"; } } toShow = byId(toShow); if(toShow){ with(toShow.style){ display = ""; zIndex = ++tabzidx; } } } doh.showTestPage = function(){ _showTab("testBody", ["logBody", "perfTestsBody"]); } doh.showLogPage = function(){ _showTab("logBody", ["testBody", "perfTestsBody"]); } doh.showPerfTestsPage = function(){ _showTab("perfTestsBody", ["testBody", "logBody"]); } var runAll = true; doh.toggleRunAll = function(){ // would be easier w/ query...sigh runAll = !runAll; if(!byId("testList")){ return; } var tb = byId("testList").tBodies[0]; var inputs = tb.getElementsByTagName("input"); var x=0; var tn; while((tn=inputs[x++])){ tn.checked = runAll; doh._groups[tn.group].skip = (!runAll); } } var listHeightTimer = null; var setListHeight = function(){ if(listHeightTimer){ clearTimeout(listHeightTimer); } var tl = byId("testList"); if(!tl){ return; } listHeightTimer = doh.setTimeout(function(){ tl.style.display = "none"; tl.style.display = ""; }, 10); } _addOnEvt("resize", setListHeight); _addOnEvt("load", setListHeight); _addOnEvt("load", function(){ if(loaded){ return; } loaded = true; groupTemplate = byId("groupTemplate"); if(!groupTemplate){ // make sure we've got an ammenable DOM structure return; } groupTemplate.parentNode.removeChild(groupTemplate); groupTemplate.style.display = ""; testTemplate = byId("testTemplate"); testTemplate.parentNode.removeChild(testTemplate); testTemplate.style.display = ""; doh._updateTestList(); }); _addOnEvt("load", function(){ // let robot code run if it gets to this first var __onEnd = doh._onEnd; doh._onEnd = function(){ __onEnd.apply(doh, arguments); if(doh._failureCount == 0){ doh.debug("WOOHOO!!"); _playSound("woohoo"); }else{ console.debug("doh._failureCount:", doh._failureCount); } if(byId("play")){ toggleRunning(); } } if(!byId("play")){ // make sure we've got an amenable DOM structure return; } var isRunning = false; var toggleRunning = function(){ // ugg, this would be so much better w/ dojo.query() if(isRunning){ byId("play").style.display = byId("pausedMsg").style.display = ""; byId("playingMsg").style.display = byId("pause").style.display = "none"; isRunning = false; }else{ byId("play").style.display = byId("pausedMsg").style.display = "none"; byId("playingMsg").style.display = byId("pause").style.display = ""; isRunning = true; } } doh.run = (function(oldRun){ return function(){ if(!doh._currentGroup){ toggleRunning(); } return oldRun.apply(doh, arguments); } })(doh.run); var btns = byId("toggleButtons").getElementsByTagName("span"); var node; var idx=0; while((node=btns[idx++])){ node.onclick = toggleRunning; } //Performance report generating functions! doh._dojoPlotPerfResults = function(div, name, dataArray) { var median = doh.median(dataArray); var medarray = []; var i; for(i = 0; i < dataArray.length; i++){ medarray.push(median); } var data = { label: "name", items: [ {name: name, trials: dataArray}, {name: "Median", trials: medarray} ] }; var ifs = new dojo.data.ItemFileReadStore({data: data}); var min = Math.floor(doh.min(dataArray)); var max = Math.ceil(doh.max(dataArray)); var step = (max - min)/10; //Lets try to pad out the bottom and top a bit //Then recalc the step. if(min > 0){ min = min - step; if(min < 0){ min = 0; } min = Math.floor(min); } if(max > 0){ max = max + step; max = Math.ceil(max); } step = (max - min)/10; var chart = new dojox.charting.DataChart(div, { type: dojox.charting.plot2d.Lines, displayRange:dataArray.length, xaxis: {min: 1, max: dataArray.length, majorTickStep: Math.ceil((dataArray.length - 1)/10), htmlLabels: false}, yaxis: {min: min, max: max, majorTickStep: step, vertical: true, htmlLabels: false} }); chart.setStore(ifs, {name:"*"}, "trials"); }; doh._asciiPlotPerfResults = function(){ //TODO: Implement! }; } ); }else{ // we're in an iframe environment. Time to mix it up a bit. _doh = window.parent.doh; var _thisGroup = _doh.currentGroupName; var _thisUrl = _doh.currentUrl; if(_thisGroup){ doh._testRegistered = function(group, tObj){ _doh._updateTestList(_thisGroup, tObj); } doh._onEnd = function(){ _doh._errorCount += doh._errorCount; _doh._failureCount += doh._failureCount; _doh._testCount += doh._testCount; // should we be really adding raw group counts? //_doh._groupCount += doh._groupCount; _doh.currentTestDeferred.callback(true); } var otr = doh._getTestObj; doh._getTestObj = function(){ var tObj = otr.apply(doh, arguments); tObj.name = _thisUrl+"::"+arguments[0]+"::"+tObj.name; return tObj; } doh.debug = doh.hitch(_doh, "debug"); doh.registerUrl = doh.hitch(_doh, "registerUrl"); doh._testStarted = function(group, fixture){ _doh._testStarted(_thisGroup, fixture); } doh._testFinished = function(g, f, s){ _doh._testFinished(_thisGroup, f, s); //Okay, there may be performance info we need to filter back //to the parent, so do that here. if(doh.perfTestResults){ try{ gName = g.toString(); var localFName = f.name; while(localFName.indexOf("::") >= 0){ localFName = localFName.substring(localFName.indexOf("::") + 2, localFName.length); } if(!_doh.perfTestResults){ _doh.perfTestResults = {}; } if(!_doh.perfTestResults[gName]){ _doh.perfTestResults[gName] = {}; } _doh.perfTestResults[gName][f.name] = doh.perfTestResults[gName][localFName]; }catch (e){ doh.debug(e); } } } doh._groupStarted = function(g){ if(!this._setParent){ _doh._curTestCount = this._testCount; _doh._curGroupCount = this._groupCount; this._setParent = true; } } doh._report = function(){ }; } } })(); r.js-2.3.6/tests/doh/_nodeRunner.js000066400000000000000000000010171334071220400171210ustar00rootroot00000000000000 /*global doh: false, process: false */ var aps = Array.prototype.slice; doh.debug = function () { //Could have multiple args, join them all together. var msg = aps.call(arguments, 0).join(' '); console.log(msg); }; // Override the doh._report method to make it quit with an // appropriate exit code in case of test failures. var oldReport = doh._report; doh._report = function () { oldReport.apply(doh, arguments); if (this._failureCount > 0 || this._errorCount > 0) { process.exit(1); } }; r.js-2.3.6/tests/doh/_rhinoRunner.js000066400000000000000000000005631334071220400173200ustar00rootroot00000000000000if(this["dojo"]){ dojo.provide("doh._rhinoRunner"); } doh.debug = print; // Override the doh._report method to make it quit with an // appropriate exit code in case of test failures. (function(){ var oldReport = doh._report; doh._report = function(){ oldReport.apply(doh, arguments); if(this._failureCount > 0 || this._errorCount > 0){ quit(1); } } })(); r.js-2.3.6/tests/doh/_sounds/000077500000000000000000000000001334071220400157605ustar00rootroot00000000000000r.js-2.3.6/tests/doh/_sounds/LICENSE000066400000000000000000000005261334071220400167700ustar00rootroot00000000000000License Disclaimer: All contents of this directory are Copyright (c) the Dojo Foundation, with the following exceptions: ------------------------------------------------------------------------------- woohoo.wav, doh.wav, dohaaa.wav: * Copyright original authors. Copied from: http://simpson-homer.com/homer-simpson-soundboard.html r.js-2.3.6/tests/doh/_sounds/doh.wav000066400000000000000000000054761334071220400172650ustar00rootroot00000000000000RIFF6 WAVEfmt U"V  hqfactU5dataø ÿó@ÄÁQѹIHÿ÷nPÁ‚0L7  b!C ŠÉä@IC ŠÃk Š\VO"DÁ`™:Á@ÄB† ŠÉÒ £6Ô 1¿Â„<-tz  P('zŸ †b Ð¬h6¤&ÿó@Ä ÂÊ[ŒHDt‚ 30Ì«2b;¯ ¿èìœyæ¿ìyáÿèÒ] ‰Gÿý†^ÁÃYoÿÿá9\•$™e#ÿÿÿÛ„Þvã&žõ?í!Ý-Xmÿ3?¿B-’hj6ÿó@ÄB:âYŒ@àDÞYVZ7¹ÂezÓg«ÖÓN4À¨º­1IÍR?N]x©M½…"Oâ®C³ÔTGÍ<¡8¢Íáïûÿmv¡ÏwN=;C.ÿÿÿý:´¿¾g~Ë„ ñ5‘×ÿó@ÄBFèŠ@zP’&¿õÀ½¯ÌO·ý_5r7ÿ7õÚÿßµsòïüò]wH´‹# J±àÞ $ZLÜrOé8‡%‚‰ uÕøŒ4!r €Ç¿ÇþP€€ À½­ÿó@Ä ‚å•Ï@ÖËpõõX£×ôôí‹2cþ`¤cQ@†Àø¥Ûÿ$|ÿÂ[Ÿb‡_?ü9×ÿvÃHc hýIx„è”]ÅZÕ·_z­:ÿ‡«„ø ‹ö>4£–±s¿ÿó@ÄA:åö3ÊT›Ö$ƒölçY‰ëÌчµl‡K:{¨ïò qFWF#ƒ0µo’¢¢±‚p#]jæ‡ £{?¼RÅ k"VŠ=Ix˜HP,Á ª4¿9±0r…æÍ ežÃnOÿó@ÄBâ>zÆÄMNº#I¤9í¤ª.þÇÜ „ßþ¨˜'Át`bóÍ*žó¥¯$p—C=Ê<¨`èN¤¢ŽB£à@Ó6y­šC ’†s¶­FJG ‡´mø³+c éÈÇYjÿó@Ä!A>ÝNcÊ¨Ž þúG9¿Dp£S S¹*80ɵŽZ‘ ”s £CÅ ™ÿPöœYj kzèxŸ˜Ì‘†J0ë‘——ØÞ±‡%4g¶‹û>’ϰ—1Œš\7T²c˜ÚjX ÿó@Ä+Šâ+ÄTE°—+83©µ6ä3–FLkX—X«ŸwÙ ÓùÓô´¯€Š:ú›³å“g7íŒ]þ &3]Bƒ ÕtýZGÏÔüüà k6Éè)B`¢6,ÿó@Ä8:æ6`ÌÔe AäŒ_:ÐÉê±ãd‚…í_{t¿þPŒ€`ÏÞÁ¬òùµæÞÈXBPGÕ† o3y‡ W3†ÅàŽs„q‡3+431Ù#™+X,L"W&‰C 66]†ÿó@ÄCfæ63ÆLÅk Í0p&õ:±øÃÔÊÿpý [dFú—Që--¨°bR¸ÀÆ.TI ª*Õk•‡3êWR¨ôþƒТ(Œª¿I¸€&ßLðÀ:9WçV#¡®cxÿó@ÄJ^Þ6KÊLĪüºåΙ P ,¢»‰Ð“yE½_AŠ9‘Fs »±œÏbîÄÍDüÚ(MRÃCÇÝÕÆCê€Ìœ»`ÐR^’2ê!õ:×zƒÍ:ç Ï\ÿó@ÄS^ݾ“Ê„Ôb ;ÄãüËhBÀSj×~±ý!!­S?QcÎï¤]Œ+d×ùtA½W׌Ynovôä&Ge×Egys3-èÊvþ¢àÏþykð•£Ê”`ûÿó@Ä\‚Zâ^+Êt•¦%ÖdÄÞ\//F¡Ñ´`BLÕEIˆ*ÿÌîôúž³×ȨéE³²˜Ó&×¼¦}ª®ì–9ôaÄ‘8(_ñ/À'ƒ‡Ž´·AQÔ‰æM»ß¬7Šûu%¤û­ÿó@ÄiÂVݼ4DLüÈ9œ¢opkô`0¥³«œ /Ôà@B‘ªs•6ÓvB¯FÞ›ôýu-nHpÀ!"*PQ²øðº2ÃH™¢&k¤G“,½Uqp—_÷oé]‡ 0JÄàŸÿó@ÄuêfÍFM¨†×úìµod@{ñ[iV²ŒªÊËßÿ[×ø ¢ƒ8* kþ˜?€[šT€€H5dPt ˜…Eê©C„Õޟļ§Àçîºa™q Š2²fI|ëìà™Jcÿó@Ä€ÂJÕ¼˜ÅPlmÏ‘®«?2ú~´»Òý¿ÿ?*¥j€‰ÅÅV Œþ¡šLÿ€²"€|5ŽYk˜]otïOÎ*‚Oî“~Æ!aÜYÍôÙƒµ;á껺?ÉÒv”ûÿó@ÄŒÂ>ѾDÆLýš¤'BòÉ ÿó>Â)¯k Qk÷ÿ/Ø´QâÀW¿¢¸‚Âà„²ë7#ËùA ¸ŒçWð[3Ýs{FZ ;nÇbáoUOf¡&ðèµKwR/‘ºkJqf6¬¦ÿó@Äê ;ÁFmº:£ær©·£þ­î[•ÈÖ×ÿ³r;%¶ÈÓƒqc-(<€ Œà Û9¸-,1kŸ„\ÙÍ$\&@¦r…7+m¥È˱ñ.%Iœ5IùDpPW0¾i–…é ÿó@Ä“2®Þ^Y„õ ½óhÿxt6`jŒþ÷hN8ÔÉ8ìiç«!Á:sØÁ7ÛR” + ‘&à PèÔ”¼FÍA)ÚtiÌJMk 8°š5#’5¬$¥’|•Q¨šj,uUNz9dÿó@Ä•A–ÉxF¥a`Á‰Q_øwÁTWâÿ…Ïù‚®n8’MÆý…]sù}°Sz‰¸^gñé‘$zF’,°n¤øå2d6G”*‡òÉHÿ–ËòËe/ûÿ·úË(4r5` –YAÿó@Ä—yJɾK !¡“#:ÅE¾€dTXÿó@Ä zܶf LR‚Ö‚€)œ£Ç—£î\¨5·¶¬<²²cºg‘û™{¹¯-Ï&Nïsbw.";=Bˆ!{=1P³›>ŒáÍeÅÿÀB€Ë1(a+“ì®t‡5²âhïÿó@ÄÁܶKÌ<–q±l|g¸Î럸͆ „,¤š¿8]›¼éᩜ¢³Ð„V¬ò΢"UG¶ýqp _ÀÜ!œÏÑ[ZhZìéÓuû FŠ]‹»û‚»ÁÑõ·¢x¿ÿó@Ä&*á^cÆèõß¶7ö=DŒæF¾Ì[‚WXd‘’ ý!"=; ¤‹@ß)Ñä˜S¢’khÛUkÕ5kăŠÕž³ŽXW“Ì $ÙMË’À4®+âÕþ›Ûÿó@Ä5Á2Ðf¨Ôpî7—}7bFîOëjE•Ò¤vù1T½Àk"ÙYößvâ’ÏÜ«[Û0øF?~ö°*»(× ìÔiX(LÛ½a¹8‘†â?ÚÂ×sH°Å¿6öâßvµëÿó@ÄE©2ØzG2Ò“n0I8sx½€¬O“šRQ܆_Qe¶ö«!v Ä)b;–#žÌа¹‰iƒLÁ3S¼ß¦Õ–ò‡§Á —¡À‰u +¾Áè)®¤/ÿ±©z²½ˆãåïZ9ÿó@ÄQÁ.ÜzG€f3éóF/v¡'!ÅÝàîh’½A/f#„¾Oì® PEvi@54´ÈW¶âSG7Ì?²±ÞÓBy6D” à U¿ÝÊÙw쓆-­Íæ»LB“î’¦}Å7¦ö¯þüŒc *„c¢*­¤Ú0¿*Ô­ª”‘@²NÌÇU¸ ³ee;¢ìŽ{©©jwx.ODîÞ÷òèg]¨ÿó@Ä1"¬4ÃÌQÀ¢˜ŒÚÿUàsŸ ?µj©€ ,>s"°&‚ìb"¹ìWhD.)6X¸*ÙdTÒ¾u \•GNæyF6¶5¦~¼ic ‹’J ¨Ï+ÿó@Ä™)*œ ËÌU©|I©ò[D&‰$—S:"á|€v0‰®€ˆA€•”6CbAY’Q©6±Y£ë9˜@qo(á k¶‹H•ÔR® Ø„9´ Z­ëzKœKžònNÈy4cBÿó@ÄŸ*” ÂLp!âª%ÝSŬ.;°­íqêrÉU ,€+NL≲—m¶­Ešµ Z@Ž“Ütt¬M+ L÷Ä9’µ*o:Ö˜DRïÔ8 ØI¹^_ú|"eÁ ¥›ÿó@ιþŒÂFY4¢ëåñ$Ãd1 T²€.-¥­ÐÍ9JeüQ A#T´3§£qSP4¡†Be¸“HŒ]µ…ˆ9Jp‹w@U¬ññ| º™¹T$cmÛ’©@æÿó@IJ±¾ŒÊFuQ«4(µ$a~ŽÀœHp‚U»A« !æ†ëI؈-7h`£LZŠ|)‰C;%äó]Hý˜¬Üß3dúHI ¿)£%Ôr‚ömÚ͑TdAáFZ &}À¥ÿó@ľñÖˆÊFYõGöøë±Xºù*‡ïéõ(µaíÐn(yá¨Ã£kQÝÊä]ûLo³q]%ø™Ý½Ä[ÓâÝâ Ì+=C²¤9kŸ%üa@UXÒ‰Á'Є9pÔXSŠOD–ÿó@ÄÅÁÆÂFM4*û«JUb ›<;Œ+»8„a×r\°ä R6žÄ/5ÝÂ9!G%D´BJHfi’¡ª<¬ÄiFö0)¹ÆB“òøh‰Óȯ8ñ¬:§TïòC¬íäiÿó@Äѱö€Ã yj"×{ŽÌ‚&’!Ô¥NtN·©! ƽÝ ]ØpÚü 7 ‰é0¸&Úíà  ŠÅ@ $‹p2‰ÇŠºh„:±ñØj×+ Ð!& z ˜ÿó@ÄͱþˆËU»*„ý:Kh²ƒ˜?Ã`~hZ †#OÒÚÐBR±3Kâ¢8¬VPXK€)#d‡O‚6€£ •*¤ØƒB&ßöe €e ÐÁéäŒ}‡Ý1–  ¡ÿó@Äѽ˜f\ŽT¥—×t¼Z(ï  Hej…t°åO4PŽÓã.Õ51"AZn"‘¬zÌÊx’." [Ô䈜Á­EnDz"Q_€ÿ€ã¢q·€QÌ!U„1KÓ„Bÿó@ÄÌ&Ì8KÒxJöÛ¦ÿ²Œ‘ÚÍ5 ȳ·[³Ô-݆©kŸ{?ߨ Y™«A–€L¶ñ®Ç¥`þ¨†®J3ï«^ÚëÿL›¿à^›•5Ç.GE!É~7n¬ì®½‰Æ´9ÿó@ÄÏAȶN x¶)atLL¤AcFYƒˆŸ JR\’{±µI>ñe»=ØéÝ¿îÆù {¿€eòð®˜ôOྠ¦Aˆ'"P§ªÿó@ÄÎÁÌN¬¥Œ:ïVea`åøMTò”<0Ú˜8o#y£²3P¢ A,‰dezb–òç±URŸµˆ* ¾]õò_%½·ë»@-N™z‰•< ŠrÞÜQ“95Xz€«ÿó@ÄÒAȾf­TÀ*iØŠP—Tx·ô7>¶ÕÂs8 ªLC00m2UÄ­<ó{±Ç&´µ;$ `ÍHó›Ä`G‰‡ 2µ¼0 „Œÿ9@ŠII¯bÃsm“p]:©œ-Œ ÿó@ÄÐÀîȾfYI5&”7Ê‹0霔5„|’’pŽoBf¨k© ¶¤[ñÝŒª,'I*íþí©6ŽCÕaž’~ßþÉ碠 ô9€H˜ÒÁAÂ2žZj3:Å@p!¯áÐÿó@ÄÐAľ~!½Cš£4Yf;\ÙU.'¢±iÑ9f/àýR¨YkEJA’#Q§ª†eý¿ÉnŒÀàæ2ïVÄ]øm7»ÅWniÞ¸G€AÐ4­l/€¨0"ÔVáÑ€S¦/ùÿó@ÄιÌËÒ­l ‘‹†ÇÕx1ž¯µÇf8žG„ia¼]b->‡&›6È+¤²B5É* (Úç§´3l¡úõý˜–0bQdO1VVVPF“nÇeq« J¨ ÄA —™Ïí§Ò°Å3Þ§ðÉ&Ň{÷+"ºB­1Sb(¤Edû—E¨UAëLQä¡£ÿó@ÄÐñr¨ÃÍc1ajNÏu)´u8„’œ÷¬AøáK߈‹æžÛÙS-2Ž××’Ç1—×`JÀ%¶ÃœÃ?yÙ|³H"$­åÖ`X–ž2eÂü2W„Ga+9 1”®Yÿó@ÄÏÁV¤Ëå™§­+Íõ8‘HÖ  ä*+2fñÃÙûͱ$Rú^ Ôt59¨ì·i?qã¿¥Â/¿3[zº/sú\÷ê)Y‰¬¯$ŠË 8ŸƒÇREùaÑ脟ïl6îK_*ÿó@ÄÏy”ÃÒ‘§/G£å´‡‰ÂI §F ‘xŒe"©#)kÇÛ®V+ã\ (NªDKœ<±^_J©B7Q³uy<+惃aƒ:«Œ@9ÂãÔÌ::N7‚ "Tÿó@ÄÐ~”ÃÌ‘BID¸5LšXÐÖÙf”Q—c"œ?WKÔZjÃâ@‰ë;˜àˆx@ã Ȇ’ËkÎ)­†tÜõȉËoLÄJ£PQ‚5– µ*\a4Ë%p‚’±tÄœR³ÿó@Äϱ¦ Á†¹}>\ÍÝ%Ú‚°âÑ£Î& 'Œ¸Efɦ³d™VÛ6Ei]J%á8y݉½Ébñ ƒ«Z!çüÖ[%©xŸã ‹zø¶(FÖ„H1y(å¨qÀèì0ž°tÉìÿó@ÄÓòˆÒF™1Dw îÄÑådåXÙQm¡b  à8 Å  %1!nð̃“PHÄÅI56¢¡*2[ %Ò ¹å ´í° ‚âG»@@†‚öˆ½*&;ަiÿó@ÄÔÂ„Ë Œ¦ïݺ”•ãkMl)"Œ¡ˆ(:ïuûOkab̸îÓ½(ŒF#÷êTX` Éçí¶Úûß²”Ö׿ìåÏ‚ ”f´Bø+3V‰.eΓ/üb“ÿó@ÄÐB„ÂFz­k]ÇUe1(‰¡Èu)áö_3ˆz5rU€–EÄQõG?ý®íb"f“& @¹=(£iÎâÎ5±F‚~9å4V>N€ƒötOyI¯'Gx¨LJŒ2ÿó@ÄÒFÁN|'FÔvyÒ¿N•áôAG ÀKåàMÕæZ¾Jg8×Íûm’€Ɖ¶ñëw#Õ…Ï©T1(X ‡G¬R¹?€d8S­¬§[ó¿eÑRóm³VêW(jäã„%ÿó@ÄÍ9RÙ}:¸Ÿ`e•D.;C %lD‘ Ð-wª—7-R‘áY†µž&Ÿ03¢…óAâ G±·ßÛ¨Óo M˜Ç /­þ´ó?€€Ÿ— ‹èKFØLX¥.úœCXÑ$ÍÃÿó@ÄËVÕVKÍ1Û FÓuXZ²¡\äŒgles„ù ',C¬¶²ªÊBqP­¯«HÕµˆDbQVïÿ•³¬ù¿Âqy'¥…¿Ç§àDgP£Q¨Ç&9œ^šl¸‡m?ò[«÷pÿó@ÄÔÁzÄzM€‘Pa±ULÁBÜKS”Ö'°‘ÒzzË b8þÛ0_Ÿ‡M9Fo-ÛdàµÇ‹:oûmØï>ö5"\Ë:ýßä›l{_ð` Äë*I#¨íj˜kÄþU ÂVÿó@ÄÐÁzÌ´cÒÌ3Mc;xâ¸4¡Ulê]ù}›—ØõT‹"0æy<½èe´˜¦_ö ±ÖˆI Á9¿ŽïÄs¿ó÷×ß5#xP8àUrÚK ‚µO_Þ\»ާ2ôq$Õí\–ÿó@ÄÐñRÌ~¿¹SME™ÓçŸìÄorÙs¾³Èˆˆ²É¹ê:¿¥•4k¦;Û[ñX‡é¡šh›ÿ_æ×Õ·jêÞ3$”¿·UÂÿ ñ©<^Rêw«û-¸·^“Z$ª’;Lÿó@ÄÏ©:ÐKÒÑà´Ã‘ZÌ2ÕPñ¸w]8iÇc|Èc][:Ü5#œhŽMO=œ1•¸FÐé»ním'hÀY­Ç¼=µNjÿ ‚m~ªÝAÁW˪Ɠ1m ÔE€.a’6·*ÿó@ÄÓŽÄfÐËÈŽHóBV ÙÂ(uI­R4õJ:×2´f‡së¹o²±LH-ÅlÎlÌÞ¶ì¿æ6½YðhñäJV(mr_2b@ 8¾ U¦i—Çv”VKÀi/L¶ÌØŽñWÿó@ÄÐŠÈ {M€åkƒm–Šy`°=€(*(GêëyŠý®•²_ n5ÛRH– Ô†î6s÷þ}><ø‡¸lì½µï<ÏËLjˆ(ó‹”Bv–:ö1Û°6`.GÏ©ÿó@ÄÑŠÄ~@Þ U:¼‘Ÿñ• `,ˆJ‘å¤bm}›j¤ƒìN$à¤éä †_¯â—Åxe] ©[ÊÚ°«­¤…D#@Ñ%Їÿó@ÄαVÌ{ñš0î˜J&…K!¥PE± ãAqÑVޱleLKIÍ´/¨&ÖhÙY‹æGˆŒDáA“š²™ÿg[´³°Äý·1‚hä"Á%}˜‘“ ¼„ 2ªL†Ëê$ˆ%•ÿó@ÄÎé.ÐcØÁÀYP€óÖE'‰ŸƒÂuÚR€j¸²z¤ÂAe/•¦Ÿ%$‰TÎ[6iô¬¬ƒ(£A,p‡ÿ=¾(­˜Þ”è ÀgÙk©?2Óbj ,S݉ ^BCÿó@ÄÍÁêÀzFd7‚2(Á bG4 r'‘‡…¤¡fîe“ ø:—ÀðÒI 3<ÙlŠé£8/_ìöóP{š [àSð<  [xíƒ^tQ¿CFŽ ©• H9ä¢ÿó@ÄÑ)r¸{ ]HTHX„²T\Aa8‚#  e!h$š>y~­²×ë}q µs§z„Áv17ý¼­ñçŸÕ<Þ‹mO  ²%‘jd·6´å"NdÂG@ኞ_6^eôäcÄ6ÿó@ÄÏ12ÍLÂLyŠÆÊ쩳³a‚¢Ú¡aðü•V|.³Öå>í;WzØýBeÆé÷nÄ Ú¾'ò92Î…yŸó:üÜÀý€%ù4#®ØÐu ’æ„ÑÚ* ¶ÀPTMÅP:L°ÿó@ÄÑ"Ð N%JbVXtc¾a|©tM‹©ÂX-mDH"FCàD‹fÊϪÜô‰êT‘B6Ã)2‰;Û·€4¨Nº£­²~¦¼ÌS.!Ÿ}Yƒ„®e®¤QŒ4t¤JgâK%[Tÿó@ÄÖ6È~˜Mƒš‘¢!j|¨b&/;óÕ¤RðÁ#bJeIãÀÑÆ¥áÌ«-÷¹Içêøåmá4†e, …ïþö"GÜŸƒÿ¼Å±Ú"^€Ø!¹­¾ü¹25€1Ô’B²ZªÔã³6Hÿó@ÄÓ:¼ÓÒĉ‹•Ÿ’í.#1:)?ÃqH œ›R#±ê0¨VhH½ºÄ”=\åNÊ>Š“’džÚâ§o•¡ð‘bçº_íL[°’’NÈösÈ® qµš6-yñ]¬ÿó@ÄÒ9"¼ Ó ÉeåAGQ—®Ej]vrÆÄßzá4æ©=Ð…Põj©¬”LªeH aóœ¨)ÊËšþ_ô•Y¡Œñsª¦Ñ…ê ÂJp#Òÿ ’ ¿I‘™ß¦ü)›™ì šl«ÿó@ÄÐ~°Þp †ïQhW’e 'Rì{aéê´¨XÒéÈ•Ó}0’oê<"nÆ?õî›+_-*7 bÒìéÈ¯Šœ¨ú¶Ç¾ÂüHíø$%}(ׄR4ÇM%ÈÅCL¤0é@ÒÒÿó@ÄÍÁ†°ÒRÜ” —LdÖia¤òin÷3«ð A{*„9ys´ó–kÔ'EͬĀ´§)•®Í›?Åsîõøuš=ƒžBiö|¾(Ah)¨‰õiX`¨¦4åð*øhd$ ñ/ÿó@ÄÑi*˜ÖÌUlÓœ´Â–®+Ëž¡=qm5çy,{ 4U€Š1ÓutÙ3¥3TÓFp”ö~Ð k3fЕF8±”­úÛnh»¶+rtB·/÷°³_¿/·ÿó@ÄÎùf”ØÍ mûÊ÷CÔkÂæÌ†Dlž™C:E‡!!@¶ÀHІÐb8lÍòB†×®'•E”„ìÍzð}á÷·{Äç¯_¶¦5|D4qŸì0†qÑYÚÜÕ'—ÿó@ÄÍqÂŒËÉ30\+;:HµÁ2ãêI”u3$ú0ÿ/“ѲÕY“(ò:UÇ‘ÈiÁg bH¹³¨alî%*jµ)Ì7•ã-©Gµ¡EÕÕ aœ¤Z†Àªð•LbBb5¹ËABÿó@ÄÎÁJÌ|cÙüË;/‰GÚ94.|”fDøùl”Øsgˆ‚@ÀZ#04pµº9NyûØَMuŠû~»,’šnÏÖqÿáÎñKx° &LÊB1`MPI&å®qÿó@ÄÎARÜø{p„Æ“l&ýÖPõlõpfGN!Ä®jËCtÁË$Mt²Fkik«U$_ÔË#³=,+Øî.+èt̺‘-~Ïžwï)¼×S $1AŽxt°ºÐÊr§ì]l­ÿó@ÄÌ)&Ì ÃÉc+ã%Ò€HGVŋމê–h˜LGçªjR%´ ÓqD-¬8kþ ³FV…HÅÇLds¥›”‚ƒŒ»ÅÌg_a:BÜ ÿY‰ Áf~õ‡êÚôÝÜSd¦€< E:#NVœÏ2 CM"…‘ÿó@ÄÏN¬Ó‘ l,¹U°j&cÎHÓsaÖ†/hx™‘tH„¤Ñ_8›l™9ÃZ7T Q¤’æÁ±œ­oPæ¯{¼Ï8‘W½Ò{0‘/oçoðªX  2†‹ YœÐ4 <Ƈ›.ÿó@ÄÌqR¨ÒF‘r êØÔG¦,-*–ÃÆˆ8±Hhu<„ŠY˜}Óî\<´¾ZùÎkŸPÊh‡‰|u3šSæ÷ÓF~ÏZóÖ×Îxˆ Yrƒ©‡±*€<ÃCÅÿó@ÄÍñj¤ ÒL‘Lz˹04Ĉ¹f #ˆ&¡J’Õ vW@½‚uê‚66ØåS¡‡Ã+3+C0Õ)X pbÞ½Ýñ|wД,Î` nâh˜ÙB¤5t#&78:ãC¨4ÀÀ1ÿÿó@ÄÌ©R¨ ÛÌi} ¸fºø{5s½µ.Ï0@£S4òÁèFÔj"F‚‚5*#^Q $xÓBÚBVÃ’Ó•ƒ(_Ä]Et«H ŠL5¿[úM@ Œ‚ ä:О,šµäï¼nÿó@Ä̱j¨TÞI/£Æº'csw÷¥í áŽZB¸D䛽pÜH%JŠ'4b ¦÷³41÷FSQt6í::ŠÕâ*0˜K³×1b@‘–ˆcÈ#xÔãs8äºS5^Ñfrÿó@ÄÐÁÞÆÆèËa¬Ô v-67Ô"yNFŒ'ÖTg +àñDó„—CV0„‚ؘ;¶…Uï«#ÉúEg‰MÕŒ\äWlS™†®((¤¡´7²nQ:V V`T-9÷‹ƒxÓy¬Èd™@𵽡}Ž2®î+n!ÓŒÄÌ5’¯¬_–¶eá4ïnc25&P¤ƒˆb¨Ë|ìº,é&´6(ÿó@ÄÏiþˆц­Â%@Yá6¥œ/-$P”8‰9C2fw“™ÑSÑ“Ê1C {<ŸUeFý¼üÈòìïy{yiæÃU˜„ª1Í·p¢@%(”¨ nŒ „"7wH·T‹Ú»ãKÎÿó@ÄÏB „Ë T:U7NX+D˜ôåüª2!߀ýD,ê‚ ] GPœ]V9Òmqc¢"ÇqäÍ+™;2Y³C3´¾*`×Ï×0¨@a˜Gr|(ÊP 4$ŸV¸L)DaRKHÿó@ÄÍö„ɆÙÅIÑÂEÎÀl¤‰ It¶d ÄàŽ¦O¦jZ²¥ƒ8ˆ²”ÒjˆE®ŸüÌç˜×’\ž¢_j>kNaÒëv—F ´Ù™Ë(yøÒÁˆ‰¨:ªXuLåQÿó@ÄÎi–„ËU[7,E‡‚%B±ÈãÝ‹T4»)Ê#CêÙ „p×P§ÍᔌÒ„^ä’d¹wjºfç ùGU£ç«ò}øUËl œT††‹‰`šÎ†©É±”Dâ lã¨%ÿó@ÄÓò„ÚLq„cà.D6Ц¿ê3#ê]Ѹê% H—!PJ*M„P˜R=(Bñ"qÃ¥yeÀK“ †E½É ÑÖ­hbPe ÆÉq°~ek‰%2ËK"Häæÿó@ÄÎiªÙ†µJbŽÊ‰ƒPðƒl£öO£fL&wH‘zÍÓ4qŽ&ùjª{™zÍ’Øù8j(—¡|?ÉgEưHŠÝKä q ºÐ  À:˜`©ù ¹B`ð€ÿó@ÄÓAR¼|à œ’mP´ª˜h„‰ÆÂþèbñÄ ‚hÁœY‡­€áªU_XæÄ Ä–Å,>.;´7%!ÃÃŲšßÀ!´!ûB„ut Ði“B˜{Áï­ x$DÀD ÌÉhÃÅTÊÿó@ÄÍAš¤ÞŒ_o4ÃhýDVp¦Z›ÃvÙ4ý#„È_ôÕ˜è“)L-ŽÆ0jÒ¥zçÔ-XÌ‚ÍÕ¥­Íœ;ü%äØxÉ¿À  "P´åDÖà²]¸_ðÿó@ÄϹbÛÆQTä.úhp$õ5–¬bñI©Æ|P l2AÎLWMLÂ`BŽ sŒ©Oå¬IgWχÐæÚÎY÷ºgztiø j‘&01)ÿ`.]…2‘IË5ÿó@ÄÏV” [É·ä#0‡aá0Ë\êWmkVƒ§]ö·J#@Jw ‰¯]jŽ׋M J÷ENÅÏuœ³€ù?4@ËÖ±F!|4ö0Ûç”x¹¡ˆâ!eû×›ŽAÀ)bÑâ°Üÿó@ÄÐA"Ù¿˜xmõeq¨bQnYÊNSÕíº–3ïxˆR pan‚¯  Æn–”:ð!‘¸2âmÞ¿Kÿ÷6 f–>L€|¡3ªÿÿöŸtÇ~÷bg@#Áªÿó@Ä€Âá˜`ŒÈ$/ˆ¢9Ìõ$”T3­Î¨Yƒðªo´Êu‹ ¯Þ•ЊÊ3QÆgÁAv™4vÓBáÕÓ­¯ZTßÐ… %©MêZâ£ÿMɸ#hº8EiØË¶ÿó@ÄÃAªä_Ø–$êh  Bv‹^»räs"sL% bår"‹²lù!DÕÌñ/á(:*} #ÄP|$e¯  {ûQ¾”ú…—aä§;ÿ7 àFxËæ‰rF\äŠ5Ùÿó@ÄÅ>Ø6ËR32×%SNh­æ¦#…iy5_cûL(Æ‘ÇDè쀅pjT>,hˆœù½Èp£,¬\%†~†=Hcüe$ÂhåÿV˜ )ãu‚ 2,øtȵœ[q tþ;ÿó@ÄÈAVà>ÂFJÅ9*;š+¶S­®Y…›°Q¢‰„Ï“XId¦ÉZ‰b um²IŒd‰F‡ƒÁ’s# (ƒž÷¿ÿÿW¿ù¸iÜ BÑøè&Í¡[ º•|iEÿó@ÄÎFà6y†ŽàB.¶é½U¾¿æF¯Yˆ©Ì¤ ñ9´â’ÜèŸ 5 06 ¯*¤0ÖxÁŠYÒPÑç Œ[zŒÊ T®n0ó ZàõÓæuÛ©äO5ÐD²t˜Ù–ÿó@ÄÏZÌÃÆnŸÜ”·ŸÁªÆÈ—g)Ó£Îц(ÆJ´Çm¤ORUY¬Ý-€RqÒW°Tð¨ºÔ,ÁœÜ›?H`sÞJÇi– ‡*äÿ“ŽMÀ˜kj‰kº0Üì>̇¨ìæ<óÿó@ÄÐA&äV{Ìû¨dBDRJYë”H3±˜µ©©î ž†#(1Zz¨ uÏ}§©gÙ’<2§©"X}ÿfÿC0kúM˜s© KH/=šHÓ\€1o‚0ãQ¨NÓ3\ÿó@ÄÒ6Ø6à n¼µöS£Ô΢¤Lóá‡"ÌžLê±4!Suæ<36Ý»o¥Î¶™éD·)ßç{âfSÊ8ýÿèrA­Ã‘ ‚ªŽBP9$¼Zêóêÿó@ÄÐ銤ÒF©Úî0lcÓtn̲4P€Y¥žXz@©–æÔŠLµ5ÚáÕÍd2U"¡fiœ›»f,‹òs„¾®-½¸E,©?å.T Ñ £!gqÙŠ!0L†,<î*§Vÿó@ÄÏ)V”ÞŒ5UÕB´˜4¦Aý¸¹Tá³ÒéÈ“é M ñ([J²‚f!$¬f-:ì&œx{™i]é~šläP¾pÔÝ$à°ͤÓJÊFëœ ¦ aB$E2Ëä¦/ÿó@ÄÍ1Z˜æ—M»ÑùÁƨ1€è9в¾;ƺòo~Ř„t“Ê@ób`ø&™WG¥¹y·…¸:À$^X6)R¶A~Ãö›%@ pˆÕ‰¯!±Ÿ©Q¸óJZ°ÄºB…íPZÿó@ÄÏyªÛF®óÉ‚¨‰ÄcYèH ÓZCóÑÚ©rµ´G¹Rn>‘aÿó@ÄÐqúˆÚF‘·c•Ä2i ö‰‹,½‘½ 'ýÐ `Û֫mU†mîj$TR`Á ª‹†T©´áé”']uHyý˜Hü°Â¬.‹+¥W»ôn‘ÙMz¶È'‘ÿó@ÄÍ‚ˆÚF‘áWBG¢Ì;ª÷Ù÷–û-s[¬Ukœw2Ä0¢ñÀñ… -E‹1nJñ…‚ â˜`q –W»A.¸Š|É ")@ÅÒ2?8Lp„š2¤Ó%-ß¶¢åZ~â¯Ëÿó@ÄαΈËY¿)áŠîÄjÔNŽÄ@òdåé<Ä”åcÇeF)5ß.Ÿ&ѽ1ta`$þxŠ.Ð9’žàÏ”`Õ¢õW,à°m]H¼…A‚ä…¹ô2& ï@øE‚Pâ$¯ÿó@Ä΄˔F~h=$e˜ú£çÁ$î.{­D™–êlEÚ¡’”snjžÎåë] Í÷ ‚÷1³“”]÷;\1Õö"Ï,>É#Kx"”"¡¶$ȨÃù<-­Èf#$ÿó@ÄͱքцÕ_‰ˆÌh…¢î ‘Ç`eœaj8¡Ó$‘¦¥8kX:j;\Ûòø—–€Fñsr V»ÇŒ ãUðGeÉ€(:`dÃ_:«™2×høG ŸEŽÿó@ÄÍiî„Ë M,wÆì”O]'ò*FëU°d!¡ÃÌ#5xÜ · MGqk"¼hš¶.f™&_vÈÚU6ÌÄ+¸‡DfSV¼”9eæÉJŸÕT¬®yTR$íMÄkÉ,Æÿó@ÄÎÁþ„ɆÐç£ÐWËçkš ‚ ³lŠšSPG mØ»³!—fbïw'Cr W½o¦RøŒÞ PÀL‡.qlvCátµ/—[Ž]!¯>ïüÙ;.cWšïÿó°ó‡Ù0~ëk¶Ã?ÿûäü.n4×y ÿó@ÄéRâYÏx/®Û˜¤Ôxò˜×¦`5¤d&ÖÄ ÚŒhõ@·‰áV(ƒÝm>þ}Wx•±ŽF×Ëg! „0(+lëî:CŽØ‡šfšÒ±‘æÙÐä4þ,ü§Ïñë8Dgv¨úÿó@ÄNÙl6lÐÀ ÜÊ:œËnä4@ƒ3 »VjԦüº{­S¤¡òÿkT17kw:I(S{æ—8µéIßmcŒX? FÓ#ö:éÿÿ6%„E?V@!cZ(  Ð£Pÿó@Ä ÁRÑê6ˆýó”¸B㣫WYcˆè CG7ØÄßûèÒ¦â)ªÖßê ÃûÝ-ìù°þ÷Ëš€%@Ž\¹þÖ÷ò‚‚î" !Ê¥à{R–²‹Þ\›N³³úílÙÒ%3ÿó@ÄANÉðNÖsÇ]°_ÿWÃÇMâãÌãë©¡e+]Ü´4=?nz P~,]…A— }™^>@E_ûP*Æ9Yäƒxm̯­>³}ÊACÔ2u-!/†MºLˆ0Ådá’VWÿó@Ä*ª"áþzD±?˜„ëPE'ÌX禂%Žf–ÿ­.ÕUµ¦k›ù’Šz™†?’xº–*PtŽ+\`áÝóÖ4°ODp1JÖùD®,ç:^ÈÁ5/DåˆÑqþ’LØ©GX¥òÿó@Ä6NÕücÆÔ­©0Ü¡f(lyÐX÷öcAäzê+蔦Ù\Ù]UÈ’»¥/>ß TÁÁÓß#%KVD(^7‚&ÝìÈ0#;úí8*†+Ԛбch¾ 6J}ë" b¾G?ðÿó@Ä[>ÑôKÐt‡0g÷ŒÚÍ,,ƒMHž Q4Ÿ?Hq×PQDŸÞÑèÀð?wÔT@2~ ­Óîh]ßö(ÅÚƒþxøµ Géw%ëB.$¯â^39³%¨å&‰ ½Aغ?ÿ×P–(4yÿ¹ ÿó@Ä jÉà6„  R¨˜ÉDgÂãŽk[¢ÏDC½þÞÇœ|+-cÆÞ·¿;SúR-«Oµª~ØÂu9{ÝÔR¦ZßP®{Ógÿœ Ûƒ“?¶°@€30ÿó@ħfÑâ4tˆt ö0Øyƒþ„¥òfž‚€xîú­Ú½J0ÉÈSɾ>º„$¸ž5ášµÛ,U•dä l[»·±Ý*"žh™¢â/Ú,aâVÖžÍm¢ä‡juÿó@ĸbÍä6€n´O•LÀrûÜW‰Ê¦Xþ™šö¬$!­w›y›~Ù–alKÌVÕ·¶³TnÅé“ùW5ÙûË8T,¿JÄz”ƒ_–€"[=~ãõ"½•%]ò^Ø Ò©¾×¶ÿó@ÄÁÁVÖ3Rd–¢Èá%!@ Ž«i3½›]æÖŸ™W;:ö1:TÛÞáóÖÚ!¡>íZVÄÒ™ŸõºÕ×Uky¬VKV^%!/€„¬²JI6I1䈇—U|8Ìè«ÿó@ÄÉA^ÍðN€B¸©ÃA *UÕyÅÖÙÅ•-%v׎‹žzr¶­vìzÒÞ¶Ú»@ïobLu§ú*µcáVNØ6;Ž­Âr!2"’v™l˜3'-X‹­^)4©wÅÿó@ÄÏÂ2Åôü.ª¤±{S"L˜à”e„ RÙÊzœ»1>Ýð«<×"õL¬¦™¸¬ê/'é!õÿ'îßlîÉZ-ââ¡«½ÚzÓ,ÔvÖæñ¥»A$;F†•<2W™ý³rnRÿó@ÄÏ^¹èN˜h€Á © 0LÔ\ŒŒi-Amf-70•KÏÌt,‰¨dÛsÅ¢úuF¹¼ Õò§ëüwvôUÇ‘Ð&™l{ÛQÁjØ…ÿèÃPჺ ¥NˆðÈ.û‚Õ¨rÝ iÿó@ÄÐyb±@NŒQ‚ ‰=ö²¬‚̓“b¡% ’á8¡"éд•U6k½feÞÌæy•±ÐÊšŸÙ_;MˆË_9•£y¬s7% FŽ—mÉA“«U~ËZ[«I©·Ð¸h4Rèÿó@ÄÑ’­@ÒLå­êºñi°µC‚%ÙV¶PS.Õ8Ä×0Óò ASAbaã|ð¢c@B i"ãwófÙãQ£ÿó@ÄÕ:2œÁ†ÕN1hœz bÑ8¸Z'2æŸ4â–‰Ï 8¥¢sÆ¢s*©)I-o+*"R’X&„²¢«*–+BXh‰JKMÙ»;›ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿó@ÄÓ‚FœÖa†lÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿó@ÄÐJXzLÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿó@ÄÑ @[ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿó@ÄÿÀ[ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿó@ÄÿÀ[ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿó@ÄÿÀ[ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿr.js-2.3.6/tests/doh/_xpconnectRunner.js000066400000000000000000000010671334071220400202020ustar00rootroot00000000000000doh.debug = print; //Define a console.log for easier logging. Don't //get fancy though. if (typeof console === 'undefined') { console = { log: function () { print.apply(undefined, arguments); } }; } // Override the doh._report method to make it quit with an // appropriate exit code in case of test failures. (function(){ var oldReport = doh._report; doh._report = function(){ oldReport.apply(doh, arguments); if(this._failureCount > 0 || this._errorCount > 0){ quit(1); } } })(); r.js-2.3.6/tests/doh/runner.html000066400000000000000000000174721334071220400165200ustar00rootroot00000000000000 RequireJS Tests Via The Dojo Unit Test Harness, $Rev: 20149 $

RequireJS Tests Via D.O.H.: The Dojo Objective Harness

Stopped
  test time

							
r.js-2.3.6/tests/doh/runner.js000066400000000000000000001301751334071220400161640ustar00rootroot00000000000000// package system gunk. //try{ // dojo.provide("doh.runner"); //}catch(e){ if(!this["doh"]){ doh = {}; } //} // // Utility Functions and Classes // doh.selfTest = false; doh.global = this; doh.hitch = function(/*Object*/thisObject, /*Function|String*/method /*, ...*/){ var args = []; for(var x=2; x= 0)) { this._fire(); } }, _continue: function(res){ this._resback(res); this._unpause(); }, _resback: function(res){ this.fired = ((res instanceof Error) ? 1 : 0); this.results[this.fired] = res; this._fire(); }, _check: function(){ if(this.fired != -1){ if(!this.silentlyCancelled){ throw new Error("already called!"); } this.silentlyCancelled = false; return; } }, callback: function(res){ this._check(); this._resback(res); }, errback: function(res){ this._check(); if(!(res instanceof Error)){ res = new Error(res); } this._resback(res); }, addBoth: function(cb, cbfn){ var enclosed = this.getFunctionFromArgs(cb, cbfn); if(arguments.length > 2){ enclosed = doh.hitch(null, enclosed, arguments, 2); } return this.addCallbacks(enclosed, enclosed); }, addCallback: function(cb, cbfn){ var enclosed = this.getFunctionFromArgs(cb, cbfn); if(arguments.length > 2){ enclosed = doh.hitch(null, enclosed, arguments, 2); } return this.addCallbacks(enclosed, null); }, addErrback: function(cb, cbfn){ var enclosed = this.getFunctionFromArgs(cb, cbfn); if(arguments.length > 2){ enclosed = doh.hitch(null, enclosed, arguments, 2); } return this.addCallbacks(null, enclosed); }, addCallbacks: function(cb, eb){ this.chain.push([cb, eb]); if(this.fired >= 0){ this._fire(); } return this; }, _fire: function(){ var chain = this.chain; var fired = this.fired; var res = this.results[fired]; var self = this; var cb = null; while(chain.length > 0 && this.paused == 0){ // Array var pair = chain.shift(); var f = pair[fired]; if(f == null){ continue; } try { res = f(res); fired = ((res instanceof Error) ? 1 : 0); if(res instanceof doh.Deferred){ cb = function(res){ self._continue(res); }; this._pause(); } }catch(err){ fired = 1; res = err; } } this.fired = fired; this.results[fired] = res; if((cb)&&(this.paused)){ res.addBoth(cb); } } }); // // State Keeping and Reporting // doh._testCount = 0; doh._groupCount = 0; doh._errorCount = 0; doh._failureCount = 0; doh._currentGroup = null; doh._currentTest = null; doh._paused = true; doh._init = function(){ this._currentGroup = null; this._currentTest = null; this._errorCount = 0; this._failureCount = 0; this.debug(this._testCount, "tests to run in", this._groupCount, "groups"); } // doh._urls = []; doh._groups = {}; // // Test Registration // doh.registerTestNs = function(/*String*/ group, /*Object*/ ns){ // summary: // adds the passed namespace object to the list of objects to be // searched for test groups. Only "public" functions (not prefixed // with "_") will be added as tests to be run. If you'd like to use // fixtures (setUp(), tearDown(), and runTest()), please use // registerTest() or registerTests(). for(var x in ns){ if( (x.charAt(0) != "_") && (typeof ns[x] == "function") ){ this.registerTest(group, ns[x]); } } } doh._testRegistered = function(group, fixture){ // slot to be filled in } doh._groupStarted = function(group){ // slot to be filled in } doh._groupFinished = function(group, success){ // slot to be filled in } doh._testStarted = function(group, fixture){ // slot to be filled in } doh._testFinished = function(group, fixture, success){ // slot to be filled in } doh.registerGroup = function( /*String*/ group, /*Array||Function||Object*/ tests, /*Function*/ setUp, /*Function*/ tearDown, /*String*/ type){ // summary: // registers an entire group of tests at once and provides a setUp and // tearDown facility for groups. If you call this method with only // setUp and tearDown parameters, they will replace previously // installed setUp or tearDown functions for the group with the new // methods. // group: // string name of the group // tests: // either a function or an object or an array of functions/objects. If // an object, it must contain at *least* a "runTest" method, and may // also contain "setUp" and "tearDown" methods. These will be invoked // on either side of the "runTest" method (respectively) when the test // is run. If an array, it must contain objects matching the above // description or test functions. // setUp: a function for initializing the test group // tearDown: a function for initializing the test group // type: The type of tests these are, such as a group of performance tests // null/undefied are standard DOH tests, the valye 'perf' enables // registering them as performance tests. if(tests){ this.register(group, tests, type); } if(setUp){ this._groups[group].setUp = setUp; } if(tearDown){ this._groups[group].tearDown = tearDown; } } doh._getTestObj = function(group, test, type){ var tObj = test; if(typeof test == "string"){ if(test.substr(0, 4)=="url:"){ return this.registerUrl(group, test); }else{ tObj = { name: test.replace("/\s/g", "_") // FIXME: bad escapement }; tObj.runTest = new Function("t", test); } }else if(typeof test == "function"){ // if we didn't get a fixture, wrap the function tObj = { "runTest": test }; if(test["name"]){ tObj.name = test.name; }else{ try{ var fStr = "function "; var ts = tObj.runTest+""; if(0 <= ts.indexOf(fStr)){ tObj.name = ts.split(fStr)[1].split("(", 1)[0]; } // doh.debug(tObj.runTest.toSource()); }catch(e){ } } // FIXME: try harder to get the test name here } //Augment the test with some specific options to make it identifiable as a //particular type of test so it can be executed properly. if(type === "perf" || tObj.testType === "perf"){ tObj.testType = "perf"; //Build an object on the root DOH class to contain all the test results. //Cache it on the test object for quick lookup later for results storage. if(!doh.perfTestResults){ doh.perfTestResults = {}; doh.perfTestResults[group] = {}; } if(!doh.perfTestResults[group]){ doh.perfTestResults[group] = {}; } if(!doh.perfTestResults[group][tObj.name]){ doh.perfTestResults[group][tObj.name] = {}; } tObj.results = doh.perfTestResults[group][tObj.name]; //If it's not set, then set the trial duration //default to 100ms. if(!("trialDuration" in tObj)){ tObj.trialDuration = 100; } //If it's not set, then set the delay between trial runs to 100ms //default to 100ms to allow for GC and to make IE happy. if(!("trialDelay" in tObj)){ tObj.trialDelay = 100; } //If it's not set, then set number of times a trial is run to 10. if(!("trialIterations" in tObj)){ tObj.trialIterations = 10; } } return tObj; } doh.registerTest = function(/*String*/ group, /*Function||Object*/ test, /*String*/ type){ // summary: // add the provided test function or fixture object to the specified // test group. // group: // string name of the group to add the test to // test: // either a function or an object. If an object, it must contain at // *least* a "runTest" method, and may also contain "setUp" and // "tearDown" methods. These will be invoked on either side of the // "runTest" method (respectively) when the test is run. // type: // An identifier denoting the type of testing that the test performs, such // as a performance test. If null, defaults to regular DOH test. if(!this._groups[group]){ this._groupCount++; this._groups[group] = []; this._groups[group].inFlight = 0; } var tObj = this._getTestObj(group, test, type); if(!tObj){ return null; } this._groups[group].push(tObj); this._testCount++; this._testRegistered(group, tObj); return tObj; } doh.registerTests = function(/*String*/ group, /*Array*/ testArr, /*String*/ type){ // summary: // registers a group of tests, treating each element of testArr as // though it were being (along with group) passed to the registerTest // method. It also uses the type to decide how the tests should // behave, by defining the type of tests these are, such as performance tests for(var x=0; x 1) ? "s" : "")+" to run"); } doh._handleFailure = function(groupName, fixture, e){ // this.debug("FAILED test:", fixture.name); // mostly borrowed from JUM this._groups[groupName].failures++; var out = ""; if(e instanceof this._AssertFailure){ this._failureCount++; if(e["fileName"]){ out += e.fileName + ':'; } if(e["lineNumber"]){ out += e.lineNumber + ' '; } out += e+": "+e.message; this.debug("\t_AssertFailure:", out); }else{ this._errorCount++; } this.debug(e); if(fixture.runTest["toSource"]){ var ss = fixture.runTest.toSource(); this.debug("\tERROR IN:\n\t\t", ss); }else{ this.debug("\tERROR IN:\n\t\t", fixture.runTest); } if(e.rhinoException){ e.rhinoException.printStackTrace(); }else if(e.javaException){ e.javaException.printStackTrace(); } } //Assume a setTimeout implementation that is synchronous, so that //the Node and Rhino envs work similar to each other. Node defines //a setTimeout, so testing for setTimeout is not enough, each environment //adapter should set this value accordingly. doh.setTimeout = function(func){ return func(); }; doh._runPerfFixture = function(/*String*/groupName, /*Object*/fixture){ // summary: // This function handles how to execute a 'performance' test // which is different from a straight UT style test. These // will often do numerous iterations of the same operation and // gather execution statistics about it, like max, min, average, // etc. It makes use of the already in place DOH deferred test // handling since it is a good idea to put a pause inbetween each // iteration to allow for GC cleanup and the like. // // groupName: // The test group that contains this performance test. // fixture: // The performance test fixture. var tg = this._groups[groupName]; fixture.startTime = new Date(); //Perf tests always need to act in an async manner as there is a //number of iterations to flow through. var def = new doh.Deferred(); tg.inFlight++; def.groupName = groupName; def.fixture = fixture; def.addErrback(function(err){ doh._handleFailure(groupName, fixture, err); }); //Set up the finalizer. var retEnd = function(){ if(fixture["tearDown"]){ fixture.tearDown(doh); } tg.inFlight--; if((!tg.inFlight)&&(tg.iterated)){ doh._groupFinished(groupName, !tg.failures); } doh._testFinished(groupName, fixture, def.results[0]); if(doh._paused){ doh.run(); } }; //Since these can take who knows how long, we don't want to timeout //unless explicitly set var timer; var to = fixture.timeout; if(to > 0) { timer = doh.setTimeout(function(){ // ret.cancel(); // retEnd(); def.errback(new Error("test timeout in "+fixture.name.toString())); }, to); } //Set up the end calls to the test into the deferred we'll return. def.addBoth(function(arg){ if(timer){ clearTimeout(timer); } retEnd(); }); //Okay, now set up the timing loop for the actual test. //This is down as an async type test where there is a delay //between each execution to allow for GC time, etc, so the GC //has less impact on the tests. var res = fixture.results; res.trials = []; //Try to figure out how many calls are needed to hit a particular threshold. var itrDef = doh._calcTrialIterations(groupName, fixture); itrDef.addErrback(function(err){ fixture.endTime = new Date(); def.errback(err); }); //Blah, since tests can be deferred, the actual run has to be deferred until after //we know how many iterations to run. This is just plain ugly. itrDef.addCallback(function(iterations){ if(iterations){ var countdown = fixture.trialIterations; doh.debug("TIMING TEST: [" + fixture.name + "]\n\t\tITERATIONS PER TRIAL: " + iterations + "\n\tTRIALS: " + countdown); //Figure out how many times we want to run our 'trial'. //Where each trial consists of 'iterations' of the test. var trialRunner = function() { //Set up our function to execute a block of tests var start = new Date(); var tTimer = new doh.Deferred(); var tCountdown = iterations; var tState = { countdown: iterations }; var testRunner = function(state){ while(state){ try{ state.countdown--; if(state.countdown){ var ret = fixture.runTest(doh); if(ret instanceof doh.Deferred){ //Deferreds have to be handled async, //otherwise we just keep looping. var atState = { countdown: state.countdown }; ret.addCallback(function(){ testRunner(atState); }); ret.addErrback(function(err) { doh._handleFailure(groupName, fixture, err); fixture.endTime = new Date(); def.errback(err); }); state = null; } }else{ tTimer.callback(new Date()); state = null; } }catch(err){ fixture.endTime = new Date(); tTimer.errback(err); } } }; tTimer.addCallback(function(end){ //Figure out the results and try to factor out function call costs. var tResults = { trial: (fixture.trialIterations - countdown), testIterations: iterations, executionTime: (end.getTime() - start.getTime()), average: (end.getTime() - start.getTime())/iterations }; res.trials.push(tResults); doh.debug("\n\t\tTRIAL #: " + tResults.trial + "\n\tTIME: " + tResults.executionTime + "ms.\n\tAVG TEST TIME: " + (tResults.executionTime/tResults.testIterations) + "ms."); //Okay, have we run all the trials yet? countdown--; if(countdown){ doh.setTimeout(trialRunner, fixture.trialDelay); }else{ //Okay, we're done, lets compute some final performance results. var t = res.trials; //We're done. fixture.endTime = new Date(); def.callback(true); } }); tTimer.addErrback(function(err){ fixture.endTime = new Date(); def.errback(err); }); testRunner(tState); }; trialRunner(); } }); //Set for a pause, returned the deferred. if(def.fired < 0){ doh.pause(); } return def; }; doh._calcTrialIterations = function(/*String*/ groupName, /*Object*/ fixture){ // summary: // This function determines the rough number of iterations to // use to reach a particular MS threshold. This returns a deferred // since tests can theoretically by async. Async tests aren't going to // give great perf #s, though. // The callback is passed the # of iterations to hit the requested // threshold. // // fixture: // The test fixture we want to calculate iterations for. var def = new doh.Deferred(); var calibrate = function () { var testFunc = fixture.runTest; //Set the initial state. We have to do this as a loop instead //of a recursive function. Otherwise, it blows the call stack //on some browsers. var iState = { start: new Date(), curIter: 0, iterations: 5 }; var handleIteration = function(state){ while(state){ if(state.curIter < state.iterations){ try{ var ret = testFunc(doh); if(ret instanceof doh.Deferred){ var aState = { start: state.start, curIter: state.curIter + 1, iterations: state.iterations }; ret.addCallback(function(){ handleIteration(aState); }); ret.addErrback(function(err) { fixture.endTime = new Date(); def.errback(err); }); state = null; }else{ state.curIter++; } }catch(err){ fixture.endTime = new Date(); def.errback(err); return; } }else{ var end = new Date(); var totalTime = (end.getTime() - state.start.getTime()); if(totalTime < fixture.trialDuration){ var nState = { iterations: state.iterations * 2, curIter: 0 } state = null; doh.setTimeout(function(){ nState.start = new Date(); handleIteration(nState); }, 50); }else{ var itrs = state.iterations; doh.setTimeout(function(){def.callback(itrs)}, 50); state = null; } } } }; handleIteration(iState); }; doh.setTimeout(calibrate, 10); return def; }; doh._runRegFixture = function(/*String*/groupName, /*Object*/fixture){ // summary: // Function to run a generic doh test. These are not // specialized tests, like performance groups and such. // // groupName: // The groupName of the test. // fixture: // The test fixture to execute. var tg = this._groups[groupName]; fixture.startTime = new Date(); var ret = fixture.runTest(this); fixture.endTime = new Date(); // if we get a deferred back from the test runner, we know we're // gonna wait for an async result. It's up to the test code to trap // errors and give us an errback or callback. if(ret instanceof doh.Deferred){ tg.inFlight++; ret.groupName = groupName; ret.fixture = fixture; ret.addErrback(function(err){ doh._handleFailure(groupName, fixture, err); }); var retEnd = function(){ if(fixture["tearDown"]){ fixture.tearDown(doh); } tg.inFlight--; if((!tg.inFlight)&&(tg.iterated)){ doh._groupFinished(groupName, !tg.failures); } doh._testFinished(groupName, fixture, ret.results[0]); if(doh._paused){ doh.run(); } } var timer = doh.setTimeout(function(){ // ret.cancel(); // retEnd(); ret.errback(new Error("test timeout in "+fixture.name.toString())); }, fixture["timeout"]||1000); ret.addBoth(function(arg){ clearTimeout(timer); retEnd(); }); if(ret.fired < 0){ doh.pause(); } return ret; } }; doh._runFixture = function(groupName, fixture){ var tg = this._groups[groupName]; this._testStarted(groupName, fixture); var threw = false; var err = null; // run it, catching exceptions and reporting them try{ // let doh reference "this.group.thinger..." which can be set by // another test or group-level setUp function fixture.group = tg; // only execute the parts of the fixture we've got if(fixture["setUp"]){ fixture.setUp(this); } if(fixture["runTest"]){ // should we error out of a fixture doesn't have a runTest? if(fixture.testType === "perf"){ //Always async deferred, so return it. return doh._runPerfFixture(groupName, fixture); }else{ //May or may not by async. var ret = doh._runRegFixture(groupName, fixture); if(ret){ return ret; } } } if(fixture["tearDown"]){ fixture.tearDown(this); } }catch(e){ threw = true; err = e; if(!fixture.endTime){ fixture.endTime = new Date(); } } var d = new doh.Deferred(); doh.setTimeout(this.hitch(this, function(){ if(threw){ this._handleFailure(groupName, fixture, err); } this._testFinished(groupName, fixture, !threw); if((!tg.inFlight)&&(tg.iterated)){ doh._groupFinished(groupName, !tg.failures); }else if(tg.inFlight > 0){ doh.setTimeout(this.hitch(this, function(){ doh.runGroup(groupName); // , idx); }), 100); this._paused = true; } if(doh._paused){ doh.run(); } }), 30); doh.pause(); return d; } doh._testId = 0; doh.runGroup = function(/*String*/ groupName, /*Integer*/ idx){ // summary: // runs the specified test group // the general structure of the algorithm is to run through the group's // list of doh, checking before and after each of them to see if we're in // a paused state. This can be caused by the test returning a deferred or // the user hitting the pause button. In either case, we want to halt // execution of the test until something external to us restarts it. This // means we need to pickle off enough state to pick up where we left off. // FIXME: need to make fixture execution async!! var tg = this._groups[groupName]; if(tg.skip === true){ return; } if(this._isArray(tg)){ if(idx<=tg.length){ if((!tg.inFlight)&&(tg.iterated == true)){ if(tg["tearDown"]){ tg.tearDown(this); } doh._groupFinished(groupName, !tg.failures); return; } } if(!idx){ tg.inFlight = 0; tg.iterated = false; tg.failures = 0; } doh._groupStarted(groupName); if(!idx){ this._setupGroupForRun(groupName, idx); if(tg["setUp"]){ tg.setUp(this); } } for(var y=(idx||0); y"); } */ } } }catch(e){ print("\n"+doh._line); print("The Dojo Unit Test Harness, $Rev: 20389 $"); print("Copyright (c) 2009, The Dojo Foundation, All Rights Reserved"); print(doh._line, "\n"); try{ var dojoUrl = "../../dojo/dojo.js"; var testUrl = ""; var testModule = "dojo.tests.module"; var dohBase = ""; for(x=0; x}bcc$®ÿÿ"Ùõ <<<ƒÄõÿÿ"ÍõÌÌÌ ƒÄõÿÿ¢‡ëûûûÛÛÛ©îzÿÿb!ͯLLðôóçÏ¿wï¦JQQѼ¼<{ÆŒ?~œ>}zee%DdÚ´iÏŸ?ÇÔ%//Ÿ’’B¼{ÿÿ"ÍõŒŒŒ ȹVZZ!h€ŸŸÎŽŠŠêììŒŽŽ†‹ÈÉÉaÍ"rΟ¦9çY•ª’cœo9Ä{öÞ"ÀÝIš€Z+ÉÖ€RÊ»ëk­”€ÞûOýÿÿBO÷‡ºyó&C||<š¼ä™9s&ƒ§§'féÁÈÈ à¿ÿBò ¤œ5kCpp0¤ðEììì¾¾¾p5ÄÿÿB7âÀ """X›bÆÆÆÇýþýûرcp\*Ÿ?~ëÖ-ˆëYXXîß¿ÿðáC<ºLLL Æ—/_ˆq=ÿÿBw=$౪‡¸þùóçß¿g``‘‘Áª.~÷î]H…ÀÄÄtÿþ}4Y4 --ÍÀÀðóçϧOŸãzÿÿBw=ÄÓ¼¼¼Øë6XYùíÛ7W«®žH¾~ýŠ_\n>~ÿÿbª^´£÷ïßCÊxxZ‡ÄÖ~ <· ç2táÿÿBw½‚‚Ë/°ª¾qãÄõÜÜÜ ?ƪòÉ“'†ŠŠ ¼bQVV†°q邈srrB ‚ÿÿBw½••Ã;w°æ›ýû÷Cb†……ÅÖÖ–áôéÓXÍ…ˆËÉÉÁ]üçÏ999ˆgðë277‡ AÿÿBw½»»»ˆˆÈß¿ׯ_&uîܹ«W¯BÜÁÀÀ••ÅÀÀ°}ûö?bÖßÚ -- Þ†ƒèÊÌÌd``X½z5fâüöíÛ¦M›àjˆÿÿÂR×ö÷÷CŠ×¯_#7³¬­­KJJ¼¼¼ ‚QQQ ¹¹¹h&@ lSSÓoß¾ýû÷¯¦¦†!55R%ÙØØ000Lœ8MWii)¤*€7 ÿÿbÀÚîKOOg``PWW_²dÉÙ³gW¬Xajj:{öì  ·1¿}û–ÀÈÈwñâÅ>ܹs§²²’……ÅÑÑñÅ‹e×'&&B¸¯_¿vwwgff.))¹}ûö‡._¾œ’’ÂÈÈùåËâÛ9ÿÿÂÞJƒ¤wwwIIIiié   cÇŽýû÷ïàÁƒhÁvðàÁøøxuuuiii%%¥   µk×"·U ®…‹üþý{ãÆ¡¡¡ÊÊÊÒÒÒjjj111{÷î%>Ô!ÿÿ"о'É8\Š!®ŒŒÄÕÄÿG.ÿÿb"¦3ERÏ üþý›`o“<ÿÿ¢ÇH ¤ð%²$ ÿÿ¢‡ë!uŸ’’ÕMÿÿ¢¹ëÿýûwöìY&&&Hφºÿÿ¢¹ëwïÞýàÁƒØØX===ªÿÿbøG3póæÍ¾¾>qqñ¨¨(’Jqâÿÿb¡]¨üøñùóçëׯ‡ôiÿÿbÒóVÿÿÚs'ÿÿÚ®ÿÿÚ®ÿÿk«4B ˜IEND®B`‚r.js-2.3.6/tests/node/000077500000000000000000000000001334071220400144615ustar00rootroot00000000000000r.js-2.3.6/tests/node/embedded/000077500000000000000000000000001334071220400162125ustar00rootroot00000000000000r.js-2.3.6/tests/node/embedded/README.md000066400000000000000000000010601334071220400174660ustar00rootroot00000000000000A test of embedding requirejs as a module in a node project, but delegates to Node's require() when it cannot find a file. Make sure the path resolution for Node's require is from the perspective of the main.js file, and *not* the requirejs module. ## Setup * mkdir node_modules * npm install coffee-script uglify-js Make sure there is a node_modules/requirejs directory with a package.json that has a 'main': 'bin/r.js' property, and create a bin directory with a symlink to the project's basedir/r.js file inside the bin directory. Tested with Node 0.4.9r.js-2.3.6/tests/node/embedded/coffee/000077500000000000000000000000001334071220400174415ustar00rootroot00000000000000r.js-2.3.6/tests/node/embedded/coffee/foo.coffee000066400000000000000000000000241334071220400213710ustar00rootroot00000000000000exports.name ='foo' r.js-2.3.6/tests/node/embedded/main.js000066400000000000000000000004721334071220400174770ustar00rootroot00000000000000var cs = require('coffee-script'), requirejs = require('../../../dist/r.js'); requirejs.config({ baseUrl: 'scripts', nodeRequire: require }); requirejs(['./coffee/foo', 'bar'], function ( foo, bar) { console.log('bar.data: ' + bar.data); console.log('foo.name: ' + foo.name); }); r.js-2.3.6/tests/node/embedded/scripts/000077500000000000000000000000001334071220400177015ustar00rootroot00000000000000r.js-2.3.6/tests/node/embedded/scripts/bar.js000066400000000000000000000005241334071220400210040ustar00rootroot00000000000000define(['uglify-js', 'fs', 'module'], function (uglify, fs, module) { var source = fs.readFileSync(module.uri, 'utf8'), parser = uglify.parser, minify = uglify.uglify, ast = parser.parse(source); ast = minify.ast_mangle(ast); return { data: minify.gen_code(minify.ast_squeeze(ast)) }; }); r.js-2.3.6/tests/node/index.js000066400000000000000000000005431334071220400161300ustar00rootroot00000000000000//The traditional nodejs http example require(['sys', 'http'], function (sys, http) { http.createServer(function (req, res) { setTimeout(function () { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World\n'); }, 2000); }).listen(8000); sys.puts('Server running at http://127.0.0.1:8000/'); }); r.js-2.3.6/tests/node/nodeRelative/000077500000000000000000000000001334071220400171025ustar00rootroot00000000000000r.js-2.3.6/tests/node/nodeRelative/main.js000066400000000000000000000005331334071220400203650ustar00rootroot00000000000000var requirejs = require("../../../r.js"); requirejs.config({ baseUrl: __dirname, paths: { lamp: 'other/src/lamp' } }); requirejs(['lamp'], function (lamp) { console.log('lamp name ' + (lamp.name === 'lamp' ? 'PASSED' : 'FAILED')); console.log('light name ' + (lamp.light.name === 'light' ? 'PASSED' : 'FAILED')); }); r.js-2.3.6/tests/node/nodeRelative/other/000077500000000000000000000000001334071220400202235ustar00rootroot00000000000000r.js-2.3.6/tests/node/nodeRelative/other/lib/000077500000000000000000000000001334071220400207715ustar00rootroot00000000000000r.js-2.3.6/tests/node/nodeRelative/other/lib/light.js000066400000000000000000000000501334071220400224310ustar00rootroot00000000000000module.exports = { name: 'light' }; r.js-2.3.6/tests/node/nodeRelative/other/src/000077500000000000000000000000001334071220400210125ustar00rootroot00000000000000r.js-2.3.6/tests/node/nodeRelative/other/src/lamp.js000066400000000000000000000002231334071220400222760ustar00rootroot00000000000000//Load a node lib that is relative. define(['../lib/light'], function (light) { return { name: 'lamp', light: light }; }); r.js-2.3.6/tests/node/pluginLocalId/000077500000000000000000000000001334071220400172075ustar00rootroot00000000000000r.js-2.3.6/tests/node/pluginLocalId/lib/000077500000000000000000000000001334071220400177555ustar00rootroot00000000000000r.js-2.3.6/tests/node/pluginLocalId/lib/app/000077500000000000000000000000001334071220400205355ustar00rootroot00000000000000r.js-2.3.6/tests/node/pluginLocalId/lib/app/dep.coffee000066400000000000000000000000331334071220400224520ustar00rootroot00000000000000define (require) -> 'dep'r.js-2.3.6/tests/node/pluginLocalId/lib/app/test.coffee000066400000000000000000000000551334071220400226650ustar00rootroot00000000000000define (require) -> require 'coffee!./dep' r.js-2.3.6/tests/node/pluginLocalId/lib/coffee-script.js000066400000000000000000005307341334071220400230600ustar00rootroot00000000000000/** * CoffeeScript Compiler v1.4.0 * http://coffeescript.org * * Copyright 2011, Jeremy Ashkenas * Released under the MIT License */ (function(root){var CoffeeScript=function(){function require(a){return require[a]}return require["./helpers"]=new function(){var a=this;((function(){var b,c,d;a.starts=function(a,b,c){return b===a.substr(c,b.length)},a.ends=function(a,b,c){var d;return d=b.length,b===a.substr(a.length-d-(c||0),d)},a.compact=function(a){var b,c,d,e;e=[];for(c=0,d=a.length;c=0)f+=1;else if(j=g[0],t.call(d,j)>=0)f-=1;a+=1}return a-1},a.prototype.removeLeadingNewlines=function(){var a,b,c,d,e;e=this.tokens;for(a=c=0,d=e.length;c=0)?(d.splice(b,1),0):1})},a.prototype.closeOpenCalls=function(){var a,b;return b=function(a,b){var c;return(c=a[0])===")"||c==="CALL_END"||a[0]==="OUTDENT"&&this.tag(b-1)===")"},a=function(a,b){return this.tokens[a[0]==="OUTDENT"?b-1:b][0]="CALL_END"},this.scanTokens(function(c,d){return c[0]==="CALL_START"&&this.detectEnd(d+1,b,a),1})},a.prototype.closeOpenIndexes=function(){var a,b;return b=function(a,b){var c;return(c=a[0])==="]"||c==="INDEX_END"},a=function(a,b){return a[0]="INDEX_END"},this.scanTokens(function(c,d){return c[0]==="INDEX_START"&&this.detectEnd(d+1,b,a),1})},a.prototype.addImplicitBraces=function(){var a,b,c,f,g,i,j,k;return f=[],g=null,k=null,c=!0,i=0,j=0,b=function(a,b){var d,e,f,g,i,m;return i=this.tokens.slice(b+1,+(b+3)+1||9e9),d=i[0],g=i[1],f=i[2],"HERECOMMENT"===(d!=null?d[0]:void 0)?!1:(e=a[0],t.call(l,e)>=0&&(c=!1),(e==="TERMINATOR"||e==="OUTDENT"||t.call(h,e)>=0&&c&&b-j!==1)&&(!k&&this.tag(b-1)!==","||(g!=null?g[0]:void 0)!==":"&&((d!=null?d[0]:void 0)!=="@"||(f!=null?f[0]:void 0)!==":"))||e===","&&d&&(m=d[0])!=="IDENTIFIER"&&m!=="NUMBER"&&m!=="STRING"&&m!=="@"&&m!=="TERMINATOR"&&m!=="OUTDENT")},a=function(a,b){var c;return c=this.generate("}","}",a[2]),this.tokens.splice(b,0,c)},this.scanTokens(function(h,i,m){var n,o,p,q,r,s,u,v;if(u=q=h[0],t.call(e,u)>=0)return f.push([q==="INDENT"&&this.tag(i-1)==="{"?"{":q,i]),1;if(t.call(d,q)>=0)return g=f.pop(),1;if(q!==":"||(n=this.tag(i-2))!==":"&&((v=f[f.length-1])!=null?v[0]:void 0)==="{")return 1;c=!0,j=i+1,f.push(["{"]),o=n==="@"?i-2:i-1;while(this.tag(o-2)==="HERECOMMENT")o-=2;return p=this.tag(o-1),k=!p||t.call(l,p)>=0,s=new String("{"),s.generated=!0,r=this.generate("{",s,h[2]),m.splice(o,0,r),this.detectEnd(i+2,b,a),2})},a.prototype.addImplicitParentheses=function(){var a,b,c,d,e;return c=e=d=!1,b=function(a,b){var c,g,i,j;g=a[0];if(!e&&a.fromThen)return!0;if(g==="IF"||g==="ELSE"||g==="CATCH"||g==="->"||g==="=>"||g==="CLASS")e=!0;if(g==="IF"||g==="ELSE"||g==="SWITCH"||g==="TRY"||g==="=")d=!0;return g!=="."&&g!=="?."&&g!=="::"||this.tag(b-1)!=="OUTDENT"?!a.generated&&this.tag(b-1)!==","&&(t.call(h,g)>=0||g==="INDENT"&&!d)&&(g!=="INDENT"||(i=this.tag(b-2))!=="CLASS"&&i!=="EXTENDS"&&(j=this.tag(b-1),t.call(f,j)<0)&&(!(c=this.tokens[b+1])||!c.generated||c[0]!=="{")):!0},a=function(a,b){return this.tokens.splice(b,0,this.generate("CALL_END",")",a[2]))},this.scanTokens(function(f,h,k){var m,n,o,p,q,r,s,u;q=f[0];if(q==="CLASS"||q==="IF"||q==="FOR"||q==="WHILE")c=!0;return r=k.slice(h-1,+(h+1)+1||9e9),p=r[0],n=r[1],o=r[2],m=!c&&q==="INDENT"&&o&&o.generated&&o[0]==="{"&&p&&(s=p[0],t.call(i,s)>=0),e=!1,d=!1,t.call(l,q)>=0&&(c=!1),p&&!p.spaced&&q==="?"&&(f.call=!0),f.fromThen?1:m||(p!=null?p.spaced:void 0)&&(p.call||(u=p[0],t.call(i,u)>=0))&&(t.call(g,q)>=0||!f.spaced&&!f.newLine&&t.call(j,q)>=0)?(k.splice(h,0,this.generate("CALL_START","(",f[2])),this.detectEnd(h+1,b,a),p[0]==="?"&&(p[0]="FUNC_EXIST"),2):1})},a.prototype.addImplicitIndentation=function(){var a,b,c,d,e;return e=c=d=null,b=function(a,b){var c;return a[1]!==";"&&(c=a[0],t.call(m,c)>=0)&&(a[0]!=="ELSE"||e==="IF"||e==="THEN")},a=function(a,b){return this.tokens.splice(this.tag(b-1)===","?b-1:b,0,d)},this.scanTokens(function(f,g,h){var i,j,k;return i=f[0],i==="TERMINATOR"&&this.tag(g+1)==="THEN"?(h.splice(g,1),0):i==="ELSE"&&this.tag(g-1)!=="OUTDENT"?(h.splice.apply(h,[g,0].concat(u.call(this.indentation(f)))),2):i!=="CATCH"||(j=this.tag(g+2))!=="OUTDENT"&&j!=="TERMINATOR"&&j!=="FINALLY"?t.call(n,i)>=0&&this.tag(g+1)!=="INDENT"&&(i!=="ELSE"||this.tag(g+1)!=="IF")?(e=i,k=this.indentation(f,!0),c=k[0],d=k[1],e==="THEN"&&(c.fromThen=!0),h.splice(g+1,0,c),this.detectEnd(g+2,b,a),i==="THEN"&&h.splice(g,1),1):1:(h.splice.apply(h,[g+2,0].concat(u.call(this.indentation(f)))),4)})},a.prototype.tagPostfixConditionals=function(){var a,b,c;return c=null,b=function(a,b){var c;return(c=a[0])==="TERMINATOR"||c==="INDENT"},a=function(a,b){if(a[0]!=="INDENT"||a.generated&&!a.fromThen)return c[0]="POST_"+c[0]},this.scanTokens(function(d,e){return d[0]!=="IF"?1:(c=d,this.detectEnd(e+1,b,a),1)})},a.prototype.indentation=function(a,b){var c,d;return b==null&&(b=!1),c=["INDENT",2,a[2]],d=["OUTDENT",2,a[2]],b&&(c.generated=d.generated=!0),[c,d]},a.prototype.generate=function(a,b,c){var d;return d=[a,b,c],d.generated=!0,d},a.prototype.tag=function(a){var b;return(b=this.tokens[a])!=null?b[0]:void 0},a}(),b=[["(",")"],["[","]"],["{","}"],["INDENT","OUTDENT"],["CALL_START","CALL_END"],["PARAM_START","PARAM_END"],["INDEX_START","INDEX_END"]],a.INVERSES=k={},e=[],d=[];for(q=0,r=b.length;q","=>","[","(","{","--","++"],j=["+","-"],f=["->","=>","{","[",","],h=["POST_IF","FOR","WHILE","UNTIL","WHEN","BY","LOOP","TERMINATOR"],n=["ELSE","->","=>","TRY","FINALLY","THEN"],m=["TERMINATOR","CATCH","FINALLY","ELSE","OUTDENT","LEADING_WHEN"],l=["TERMINATOR","INDENT","OUTDENT"]})).call(this)},require["./lexer"]=new function(){var a=this;((function(){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X=[].indexOf||function(a){for(var b=0,c=this.length;b=0||X.call(g,c)>=0)&&(j=c.toUpperCase(),j==="WHEN"&&(l=this.tag(),X.call(v,l)>=0)?j="LEADING_WHEN":j==="FOR"?this.seenFor=!0:j==="UNLESS"?j="IF":X.call(O,j)>=0?j="UNARY":X.call(H,j)>=0&&(j!=="INSTANCEOF"&&this.seenFor?(j="FOR"+j,this.seenFor=!1):(j="RELATION",this.value()==="!"&&(this.tokens.pop(),c="!"+c)))),X.call(t,c)>=0&&(b?(j="IDENTIFIER",c=new String(c),c.reserved=!0):X.call(I,c)>=0&&this.error('reserved word "'+c+'"')),b||(X.call(e,c)>=0&&(c=f[c]),j=function(){switch(c){case"!":return"UNARY";case"==":case"!=":return"COMPARE";case"&&":case"||":return"LOGIC";case"true":case"false":return"BOOL";case"break":case"continue":return"STATEMENT";default:return j}}()),this.token(j,c),a&&this.token(":",":"),d.length)):0},a.prototype.numberToken=function(){var a,b,c,d,e;if(!(c=E.exec(this.chunk)))return 0;d=c[0],/^0[BOX]/.test(d)?this.error("radix prefix '"+d+"' must be lowercase"):/E/.test(d)&&!/^0x/.test(d)?this.error("exponential notation '"+d+"' must be indicated with a lowercase 'e'"):/^0\d*[89]/.test(d)?this.error("decimal literal '"+d+"' must not be prefixed with '0'"):/^0\d+/.test(d)&&this.error("octal literal '"+d+"' must be prefixed with '0o'"),b=d.length;if(e=/^0o([0-7]+)/.exec(d))d="0x"+parseInt(e[1],8).toString(16);if(a=/^0b([01]+)/.exec(d))d="0x"+parseInt(a[1],2).toString(16);return this.token("NUMBER",d),b},a.prototype.stringToken=function(){var a,b,c;switch(this.chunk.charAt(0)){case"'":if(!(a=L.exec(this.chunk)))return 0;this.token("STRING",(c=a[0]).replace(A,"\\\n"));break;case'"':if(!(c=this.balancedString(this.chunk,'"')))return 0;0=0)?0:(c=G.exec(this.chunk))?(g=c,c=g[0],e=g[1],a=g[2],e.slice(0,2)==="/*"&&this.error("regular expressions cannot begin with `*`"),e==="//"&&(e="/(?:)/"),this.token("REGEX",""+e+a),c.length):0)},a.prototype.heregexToken=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n;d=a[0],b=a[1],c=a[2];if(0>b.indexOf("#{"))return e=b.replace(o,"").replace(/\//g,"\\/"),e.match(/^\*/)&&this.error("regular expressions cannot begin with `*`"),this.token("REGEX","/"+(e||"(?:)")+"/"+c),d.length;this.token("IDENTIFIER","RegExp"),this.tokens.push(["CALL_START","("]),g=[],k=this.interpolateString(b,{regex:!0});for(i=0,j=k.length;ithis.indent){if(d)return this.indebt=e-this.indent,this.suppressNewlines(),b.length;a=e-this.indent+this.outdebt,this.token("INDENT",a),this.indents.push(a),this.ends.push("OUTDENT"),this.outdebt=this.indebt=0}else this.indebt=0,this.outdentToken(this.indent-e,d);return this.indent=e,b.length},a.prototype.outdentToken=function(a,b){var c,d;while(a>0)d=this.indents.length-1,this.indents[d]===void 0?a=0:this.indents[d]===this.outdebt?(a-=this.outdebt,this.outdebt=0):this.indents[d]=0)&&this.error('reserved word "'+this.value()+"\" can't be assigned");if((h=b[1])==="||"||h==="&&")return b[0]="COMPOUND_ASSIGN",b[1]+="=",f.length}if(f===";")this.seenFor=!1,e="TERMINATOR";else if(X.call(z,f)>=0)e="MATH";else if(X.call(i,f)>=0)e="COMPARE";else if(X.call(j,f)>=0)e="COMPOUND_ASSIGN";else if(X.call(O,f)>=0)e="UNARY";else if(X.call(K,f)>=0)e="SHIFT";else if(X.call(x,f)>=0||f==="?"&&(b!=null?b.spaced:void 0))e="LOGIC";else if(b&&!b.spaced)if(f==="("&&(k=b[0],X.call(c,k)>=0))b[0]==="?"&&(b[0]="FUNC_EXIST"),e="CALL_START";else if(f==="["&&(l=b[0],X.call(q,l)>=0)){e="INDEX_START";switch(b[0]){case"?":b[0]="INDEX_SOAK"}}switch(f){case"(":case"{":case"[":this.ends.push(r[f]);break;case")":case"}":case"]":this.pair(f)}return this.token(e,f),f.length},a.prototype.sanitizeHeredoc=function(a,b){var c,d,e,f,g;e=b.indent,d=b.herecomment;if(d){l.test(a)&&this.error('block comment cannot contain "*/", starting');if(a.indexOf("\n")<=0)return a}else while(f=m.exec(a)){c=f[1];if(e===null||0<(g=c.length)&&gj;d=1<=j?++i:--i){if(c){--c;continue}switch(e=a.charAt(d)){case"\\":++c;continue;case b:h.pop();if(!h.length)return a.slice(0,+d+1||9e9);b=h[h.length-1];continue}b!=="}"||e!=='"'&&e!=="'"?b==="}"&&e==="/"&&(f=n.exec(a.slice(d))||G.exec(a.slice(d)))?c+=f[0].length-1:b==="}"&&e==="{"?h.push(b="}"):b==='"'&&g==="#"&&e==="{"&&h.push(b="}"):h.push(b=e),g=e}return this.error("missing "+h.pop()+", starting")},a.prototype.interpolateString=function(b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;c==null&&(c={}),e=c.heredoc,m=c.regex,o=[],l=0,f=-1;while(j=b.charAt(f+=1)){if(j==="\\"){f+=1;continue}if(j!=="#"||b.charAt(f+1)!=="{"||!(d=this.balancedString(b.slice(f+1),"}")))continue;l1&&(k.unshift(["(","(",this.line]),k.push([")",")",this.line])),o.push(["TOKENS",k])}f+=d.length,l=f+1}f>l&&l1)&&this.token("(","(");for(f=q=0,r=o.length;q|[-+*\/%<>&|^!?=]=|>>>=?|([-+:])\1|([&|<>])\2=?|\?\.|\.{2,3})/,P=/^[^\n\S]+/,h=/^###([^#][\s\S]*?)(?:###[^\n\S]*|(?:###)?$)|^(?:\s*#(?!##[^#]).*)+/,d=/^[-=]>/,B=/^(?:\n[^\n\S]*)+/,L=/^'[^\\']*(?:\\.[^\\']*)*'/,s=/^`[^\\`]*(?:\\.[^\\`]*)*`/,G=/^(\/(?![\s=])[^[\/\n\\]*(?:(?:\\[\s\S]|\[[^\]\n\\]*(?:\\[\s\S][^\]\n\\]*)*])[^[\/\n\\]*)*\/)([imgy]{0,4})(?!\w)/,n=/^\/{3}([\s\S]+?)\/{3}([imgy]{0,4})(?!\w)/,o=/\s+(?:#.*)?/g,A=/\n/g,m=/\n+([^\n\S]*)/g,l=/\*\//,w=/^\s*(?:,|\??\.(?![.\d])|::)/,N=/\s+$/,j=["-=","+=","/=","*=","%=","||=","&&=","?=","<<=",">>=",">>>=","&=","^=","|="],O=["!","~","NEW","TYPEOF","DELETE","DO"],x=["&&","||","&","|","^"],K=["<<",">>",">>>"],i=["==","!=","<",">","<=",">="],z=["*","/","%"],H=["IN","OF","INSTANCEOF"],b=["TRUE","FALSE"],C=["NUMBER","REGEX","BOOL","NULL","UNDEFINED","++","--","]"],D=C.concat(")","}","THIS","IDENTIFIER","STRING"),c=["IDENTIFIER","STRING","REGEX",")","]","}","?","::","@","THIS","SUPER"],q=c.concat("NUMBER","BOOL","NULL","UNDEFINED"),v=["INDENT","OUTDENT","TERMINATOR"]})).call(this)},require["./parser"]=new function(){var a=this,b=function(){var a={trace:function(){},yy:{},symbols_:{error:2,Root:3,Body:4,Block:5,TERMINATOR:6,Line:7,Expression:8,Statement:9,Return:10,Comment:11,STATEMENT:12,Value:13,Invocation:14,Code:15,Operation:16,Assign:17,If:18,Try:19,While:20,For:21,Switch:22,Class:23,Throw:24,INDENT:25,OUTDENT:26,Identifier:27,IDENTIFIER:28,AlphaNumeric:29,NUMBER:30,STRING:31,Literal:32,JS:33,REGEX:34,DEBUGGER:35,UNDEFINED:36,NULL:37,BOOL:38,Assignable:39,"=":40,AssignObj:41,ObjAssignable:42,":":43,ThisProperty:44,RETURN:45,HERECOMMENT:46,PARAM_START:47,ParamList:48,PARAM_END:49,FuncGlyph:50,"->":51,"=>":52,OptComma:53,",":54,Param:55,ParamVar:56,"...":57,Array:58,Object:59,Splat:60,SimpleAssignable:61,Accessor:62,Parenthetical:63,Range:64,This:65,".":66,"?.":67,"::":68,Index:69,INDEX_START:70,IndexValue:71,INDEX_END:72,INDEX_SOAK:73,Slice:74,"{":75,AssignList:76,"}":77,CLASS:78,EXTENDS:79,OptFuncExist:80,Arguments:81,SUPER:82,FUNC_EXIST:83,CALL_START:84,CALL_END:85,ArgList:86,THIS:87,"@":88,"[":89,"]":90,RangeDots:91,"..":92,Arg:93,SimpleArgs:94,TRY:95,Catch:96,FINALLY:97,CATCH:98,THROW:99,"(":100,")":101,WhileSource:102,WHILE:103,WHEN:104,UNTIL:105,Loop:106,LOOP:107,ForBody:108,FOR:109,ForStart:110,ForSource:111,ForVariables:112,OWN:113,ForValue:114,FORIN:115,FOROF:116,BY:117,SWITCH:118,Whens:119,ELSE:120,When:121,LEADING_WHEN:122,IfBlock:123,IF:124,POST_IF:125,UNARY:126,"-":127,"+":128,"--":129,"++":130,"?":131,MATH:132,SHIFT:133,COMPARE:134,LOGIC:135,RELATION:136,COMPOUND_ASSIGN:137,$accept:0,$end:1},terminals_:{2:"error",6:"TERMINATOR",12:"STATEMENT",25:"INDENT",26:"OUTDENT",28:"IDENTIFIER",30:"NUMBER",31:"STRING",33:"JS",34:"REGEX",35:"DEBUGGER",36:"UNDEFINED",37:"NULL",38:"BOOL",40:"=",43:":",45:"RETURN",46:"HERECOMMENT",47:"PARAM_START",49:"PARAM_END",51:"->",52:"=>",54:",",57:"...",66:".",67:"?.",68:"::",70:"INDEX_START",72:"INDEX_END",73:"INDEX_SOAK",75:"{",77:"}",78:"CLASS",79:"EXTENDS",82:"SUPER",83:"FUNC_EXIST",84:"CALL_START",85:"CALL_END",87:"THIS",88:"@",89:"[",90:"]",92:"..",95:"TRY",97:"FINALLY",98:"CATCH",99:"THROW",100:"(",101:")",103:"WHILE",104:"WHEN",105:"UNTIL",107:"LOOP",109:"FOR",113:"OWN",115:"FORIN",116:"FOROF",117:"BY",118:"SWITCH",120:"ELSE",122:"LEADING_WHEN",124:"IF",125:"POST_IF",126:"UNARY",127:"-",128:"+",129:"--",130:"++",131:"?",132:"MATH",133:"SHIFT",134:"COMPARE",135:"LOGIC",136:"RELATION",137:"COMPOUND_ASSIGN"},productions_:[0,[3,0],[3,1],[3,2],[4,1],[4,3],[4,2],[7,1],[7,1],[9,1],[9,1],[9,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[5,2],[5,3],[27,1],[29,1],[29,1],[32,1],[32,1],[32,1],[32,1],[32,1],[32,1],[32,1],[17,3],[17,4],[17,5],[41,1],[41,3],[41,5],[41,1],[42,1],[42,1],[42,1],[10,2],[10,1],[11,1],[15,5],[15,2],[50,1],[50,1],[53,0],[53,1],[48,0],[48,1],[48,3],[48,4],[48,6],[55,1],[55,2],[55,3],[56,1],[56,1],[56,1],[56,1],[60,2],[61,1],[61,2],[61,2],[61,1],[39,1],[39,1],[39,1],[13,1],[13,1],[13,1],[13,1],[13,1],[62,2],[62,2],[62,2],[62,1],[62,1],[69,3],[69,2],[71,1],[71,1],[59,4],[76,0],[76,1],[76,3],[76,4],[76,6],[23,1],[23,2],[23,3],[23,4],[23,2],[23,3],[23,4],[23,5],[14,3],[14,3],[14,1],[14,2],[80,0],[80,1],[81,2],[81,4],[65,1],[65,1],[44,2],[58,2],[58,4],[91,1],[91,1],[64,5],[74,3],[74,2],[74,2],[74,1],[86,1],[86,3],[86,4],[86,4],[86,6],[93,1],[93,1],[94,1],[94,3],[19,2],[19,3],[19,4],[19,5],[96,3],[24,2],[63,3],[63,5],[102,2],[102,4],[102,2],[102,4],[20,2],[20,2],[20,2],[20,1],[106,2],[106,2],[21,2],[21,2],[21,2],[108,2],[108,2],[110,2],[110,3],[114,1],[114,1],[114,1],[114,1],[112,1],[112,3],[111,2],[111,2],[111,4],[111,4],[111,4],[111,6],[111,6],[22,5],[22,7],[22,4],[22,6],[119,1],[119,2],[121,3],[121,4],[123,3],[123,5],[18,1],[18,3],[18,3],[18,3],[16,2],[16,2],[16,2],[16,2],[16,2],[16,2],[16,2],[16,2],[16,3],[16,3],[16,3],[16,3],[16,3],[16,3],[16,3],[16,3],[16,5],[16,3]],performAction:function(b,c,d,e,f,g,h){var i=g.length-1;switch(f){case 1:return this.$=new e.Block;case 2:return this.$=g[i];case 3:return this.$=g[i-1];case 4:this.$=e.Block.wrap([g[i]]);break;case 5:this.$=g[i-2].push(g[i]);break;case 6:this.$=g[i-1];break;case 7:this.$=g[i];break;case 8:this.$=g[i];break;case 9:this.$=g[i];break;case 10:this.$=g[i];break;case 11:this.$=new e.Literal(g[i]);break;case 12:this.$=g[i];break;case 13:this.$=g[i];break;case 14:this.$=g[i];break;case 15:this.$=g[i];break;case 16:this.$=g[i];break;case 17:this.$=g[i];break;case 18:this.$=g[i];break;case 19:this.$=g[i];break;case 20:this.$=g[i];break;case 21:this.$=g[i];break;case 22:this.$=g[i];break;case 23:this.$=g[i];break;case 24:this.$=new e.Block;break;case 25:this.$=g[i-1];break;case 26:this.$=new e.Literal(g[i]);break;case 27:this.$=new e.Literal(g[i]);break;case 28:this.$=new e.Literal(g[i]);break;case 29:this.$=g[i];break;case 30:this.$=new e.Literal(g[i]);break;case 31:this.$=new e.Literal(g[i]);break;case 32:this.$=new e.Literal(g[i]);break;case 33:this.$=new e.Undefined;break;case 34:this.$=new e.Null;break;case 35:this.$=new e.Bool(g[i]);break;case 36:this.$=new e.Assign(g[i-2],g[i]);break;case 37:this.$=new e.Assign(g[i-3],g[i]);break;case 38:this.$=new e.Assign(g[i-4],g[i-1]);break;case 39:this.$=new e.Value(g[i]);break;case 40:this.$=new e.Assign(new e.Value(g[i-2]),g[i],"object");break;case 41:this.$=new e.Assign(new e.Value(g[i-4]),g[i-1],"object");break;case 42:this.$=g[i];break;case 43:this.$=g[i];break;case 44:this.$=g[i];break;case 45:this.$=g[i];break;case 46:this.$=new e.Return(g[i]);break;case 47:this.$=new e.Return;break;case 48:this.$=new e.Comment(g[i]);break;case 49:this.$=new e.Code(g[i-3],g[i],g[i-1]);break;case 50:this.$=new e.Code([],g[i],g[i-1]);break;case 51:this.$="func";break;case 52:this.$="boundfunc";break;case 53:this.$=g[i];break;case 54:this.$=g[i];break;case 55:this.$=[];break;case 56:this.$=[g[i]];break;case 57:this.$=g[i-2].concat(g[i]);break;case 58:this.$=g[i-3].concat(g[i]);break;case 59:this.$=g[i-5].concat(g[i-2]);break;case 60:this.$=new e.Param(g[i]);break;case 61:this.$=new e.Param(g[i-1],null,!0);break;case 62:this.$=new e.Param(g[i-2],g[i]);break;case 63:this.$=g[i];break;case 64:this.$=g[i];break;case 65:this.$=g[i];break;case 66:this.$=g[i];break;case 67:this.$=new e.Splat(g[i-1]);break;case 68:this.$=new e.Value(g[i]);break;case 69:this.$=g[i-1].add(g[i]);break;case 70:this.$=new e.Value(g[i-1],[].concat(g[i]));break;case 71:this.$=g[i];break;case 72:this.$=g[i];break;case 73:this.$=new e.Value(g[i]);break;case 74:this.$=new e.Value(g[i]);break;case 75:this.$=g[i];break;case 76:this.$=new e.Value(g[i]);break;case 77:this.$=new e.Value(g[i]);break;case 78:this.$=new e.Value(g[i]);break;case 79:this.$=g[i];break;case 80:this.$=new e.Access(g[i]);break;case 81:this.$=new e.Access(g[i],"soak");break;case 82:this.$=[new e.Access(new e.Literal("prototype")),new e.Access(g[i])];break;case 83:this.$=new e.Access(new e.Literal("prototype"));break;case 84:this.$=g[i];break;case 85:this.$=g[i-1];break;case 86:this.$=e.extend(g[i],{soak:!0});break;case 87:this.$=new e.Index(g[i]);break;case 88:this.$=new e.Slice(g[i]);break;case 89:this.$=new e.Obj(g[i-2],g[i-3].generated);break;case 90:this.$=[];break;case 91:this.$=[g[i]];break;case 92:this.$=g[i-2].concat(g[i]);break;case 93:this.$=g[i-3].concat(g[i]);break;case 94:this.$=g[i-5].concat(g[i-2]);break;case 95:this.$=new e.Class;break;case 96:this.$=new e.Class(null,null,g[i]);break;case 97:this.$=new e.Class(null,g[i]);break;case 98:this.$=new e.Class(null,g[i-1],g[i]);break;case 99:this.$=new e.Class(g[i]);break;case 100:this.$=new e.Class(g[i-1],null,g[i]);break;case 101:this.$=new e.Class(g[i-2],g[i]);break;case 102:this.$=new e.Class(g[i-3],g[i-1],g[i]);break;case 103:this.$=new e.Call(g[i-2],g[i],g[i-1]);break;case 104:this.$=new e.Call(g[i-2],g[i],g[i-1]);break;case 105:this.$=new e.Call("super",[new e.Splat(new e.Literal("arguments"))]);break;case 106:this.$=new e.Call("super",g[i]);break;case 107:this.$=!1;break;case 108:this.$=!0;break;case 109:this.$=[];break;case 110:this.$=g[i-2];break;case 111:this.$=new e.Value(new e.Literal("this"));break;case 112:this.$=new e.Value(new e.Literal("this"));break;case 113:this.$=new e.Value(new e.Literal("this"),[new e.Access(g[i])],"this");break;case 114:this.$=new e.Arr([]);break;case 115:this.$=new e.Arr(g[i-2]);break;case 116:this.$="inclusive";break;case 117:this.$="exclusive";break;case 118:this.$=new e.Range(g[i-3],g[i-1],g[i-2]);break;case 119:this.$=new e.Range(g[i-2],g[i],g[i-1]);break;case 120:this.$=new e.Range(g[i-1],null,g[i]);break;case 121:this.$=new e.Range(null,g[i],g[i-1]);break;case 122:this.$=new e.Range(null,null,g[i]);break;case 123:this.$=[g[i]];break;case 124:this.$=g[i-2].concat(g[i]);break;case 125:this.$=g[i-3].concat(g[i]);break;case 126:this.$=g[i-2];break;case 127:this.$=g[i-5].concat(g[i-2]);break;case 128:this.$=g[i];break;case 129:this.$=g[i];break;case 130:this.$=g[i];break;case 131:this.$=[].concat(g[i-2],g[i]);break;case 132:this.$=new e.Try(g[i]);break;case 133:this.$=new e.Try(g[i-1],g[i][0],g[i][1]);break;case 134:this.$=new e.Try(g[i-2],null,null,g[i]);break;case 135:this.$=new e.Try(g[i-3],g[i-2][0],g[i-2][1],g[i]);break;case 136:this.$=[g[i-1],g[i]];break;case 137:this.$=new e.Throw(g[i]);break;case 138:this.$=new e.Parens(g[i-1]);break;case 139:this.$=new e.Parens(g[i-2]);break;case 140:this.$=new e.While(g[i]);break;case 141:this.$=new e.While(g[i-2],{guard:g[i]});break;case 142:this.$=new e.While(g[i],{invert:!0});break;case 143:this.$=new e.While(g[i-2],{invert:!0,guard:g[i]});break;case 144:this.$=g[i-1].addBody(g[i]);break;case 145:this.$=g[i].addBody(e.Block.wrap([g[i-1]]));break;case 146:this.$=g[i].addBody(e.Block.wrap([g[i-1]]));break;case 147:this.$=g[i];break;case 148:this.$=(new e.While(new e.Literal("true"))).addBody(g[i]);break;case 149:this.$=(new e.While(new e.Literal("true"))).addBody(e.Block.wrap([g[i]]));break;case 150:this.$=new e.For(g[i-1],g[i]);break;case 151:this.$=new e.For(g[i-1],g[i]);break;case 152:this.$=new e.For(g[i],g[i-1]);break;case 153:this.$={source:new e.Value(g[i])};break;case 154:this.$=function(){return g[i].own=g[i-1].own,g[i].name=g[i-1][0],g[i].index=g[i-1][1],g[i]}();break;case 155:this.$=g[i];break;case 156:this.$=function(){return g[i].own=!0,g[i]}();break;case 157:this.$=g[i];break;case 158:this.$=g[i];break;case 159:this.$=new e.Value(g[i]);break;case 160:this.$=new e.Value(g[i]);break;case 161:this.$=[g[i]];break;case 162:this.$=[g[i-2],g[i]];break;case 163:this.$={source:g[i]};break;case 164:this.$={source:g[i],object:!0};break;case 165:this.$={source:g[i-2],guard:g[i]};break;case 166:this.$={source:g[i-2],guard:g[i],object:!0};break;case 167:this.$={source:g[i-2],step:g[i]};break;case 168:this.$={source:g[i-4],guard:g[i-2],step:g[i]};break;case 169:this.$={source:g[i-4],step:g[i-2],guard:g[i]};break;case 170:this.$=new e.Switch(g[i-3],g[i-1]);break;case 171:this.$=new e.Switch(g[i-5],g[i-3],g[i-1]);break;case 172:this.$=new e.Switch(null,g[i-1]);break;case 173:this.$=new e.Switch(null,g[i-3],g[i-1]);break;case 174:this.$=g[i];break;case 175:this.$=g[i-1].concat(g[i]);break;case 176:this.$=[[g[i-1],g[i]]];break;case 177:this.$=[[g[i-2],g[i-1]]];break;case 178:this.$=new e.If(g[i-1],g[i],{type:g[i-2]});break;case 179:this.$=g[i-4].addElse(new e.If(g[i-1],g[i],{type:g[i-2]}));break;case 180:this.$=g[i];break;case 181:this.$=g[i-2].addElse(g[i]);break;case 182:this.$=new e.If(g[i],e.Block.wrap([g[i-2]]),{type:g[i-1],statement:!0});break;case 183:this.$=new e.If(g[i],e.Block.wrap([g[i-2]]),{type:g[i-1],statement:!0});break;case 184:this.$=new e.Op(g[i-1],g[i]);break;case 185:this.$=new e.Op("-",g[i]);break;case 186:this.$=new e.Op("+",g[i]);break;case 187:this.$=new e.Op("--",g[i]);break;case 188:this.$=new e.Op("++",g[i]);break;case 189:this.$=new e.Op("--",g[i-1],null,!0);break;case 190:this.$=new e.Op("++",g[i-1],null,!0);break;case 191:this.$=new e.Existence(g[i-1]);break;case 192:this.$=new e.Op("+",g[i-2],g[i]);break;case 193:this.$=new e.Op("-",g[i-2],g[i]);break;case 194:this.$=new e.Op(g[i-1],g[i-2],g[i]);break;case 195:this.$=new e.Op(g[i-1],g[i-2],g[i]);break;case 196:this.$=new e.Op(g[i-1],g[i-2],g[i]);break;case 197:this.$=new e.Op(g[i-1],g[i-2],g[i]);break;case 198:this.$=function(){return g[i-1].charAt(0)==="!"?(new e.Op(g[i-1].slice(1),g[i-2],g[i])).invert():new e.Op(g[i-1],g[i-2],g[i])}();break;case 199:this.$=new e.Assign(g[i-2],g[i],g[i-1]);break;case 200:this.$=new e.Assign(g[i-4],g[i-1],g[i-3]);break;case 201:this.$=new e.Extends(g[i-2],g[i])}},table:[{1:[2,1],3:1,4:2,5:3,7:4,8:6,9:7,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,5],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[3]},{1:[2,2],6:[1,74]},{6:[1,75]},{1:[2,4],6:[2,4],26:[2,4],101:[2,4]},{4:77,7:4,8:6,9:7,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,26:[1,76],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,7],6:[2,7],26:[2,7],101:[2,7],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,8],6:[2,8],26:[2,8],101:[2,8],102:90,103:[1,65],105:[1,66],108:91,109:[1,68],110:69,125:[1,89]},{1:[2,12],6:[2,12],25:[2,12],26:[2,12],49:[2,12],54:[2,12],57:[2,12],62:93,66:[1,95],67:[1,96],68:[1,97],69:98,70:[1,99],72:[2,12],73:[1,100],77:[2,12],80:92,83:[1,94],84:[2,107],85:[2,12],90:[2,12],92:[2,12],101:[2,12],103:[2,12],104:[2,12],105:[2,12],109:[2,12],117:[2,12],125:[2,12],127:[2,12],128:[2,12],131:[2,12],132:[2,12],133:[2,12],134:[2,12],135:[2,12],136:[2,12]},{1:[2,13],6:[2,13],25:[2,13],26:[2,13],49:[2,13],54:[2,13],57:[2,13],62:102,66:[1,95],67:[1,96],68:[1,97],69:98,70:[1,99],72:[2,13],73:[1,100],77:[2,13],80:101,83:[1,94],84:[2,107],85:[2,13],90:[2,13],92:[2,13],101:[2,13],103:[2,13],104:[2,13],105:[2,13],109:[2,13],117:[2,13],125:[2,13],127:[2,13],128:[2,13],131:[2,13],132:[2,13],133:[2,13],134:[2,13],135:[2,13],136:[2,13]},{1:[2,14],6:[2,14],25:[2,14],26:[2,14],49:[2,14],54:[2,14],57:[2,14],72:[2,14],77:[2,14],85:[2,14],90:[2,14],92:[2,14],101:[2,14],103:[2,14],104:[2,14],105:[2,14],109:[2,14],117:[2,14],125:[2,14],127:[2,14],128:[2,14],131:[2,14],132:[2,14],133:[2,14],134:[2,14],135:[2,14],136:[2,14]},{1:[2,15],6:[2,15],25:[2,15],26:[2,15],49:[2,15],54:[2,15],57:[2,15],72:[2,15],77:[2,15],85:[2,15],90:[2,15],92:[2,15],101:[2,15],103:[2,15],104:[2,15],105:[2,15],109:[2,15],117:[2,15],125:[2,15],127:[2,15],128:[2,15],131:[2,15],132:[2,15],133:[2,15],134:[2,15],135:[2,15],136:[2,15]},{1:[2,16],6:[2,16],25:[2,16],26:[2,16],49:[2,16],54:[2,16],57:[2,16],72:[2,16],77:[2,16],85:[2,16],90:[2,16],92:[2,16],101:[2,16],103:[2,16],104:[2,16],105:[2,16],109:[2,16],117:[2,16],125:[2,16],127:[2,16],128:[2,16],131:[2,16],132:[2,16],133:[2,16],134:[2,16],135:[2,16],136:[2,16]},{1:[2,17],6:[2,17],25:[2,17],26:[2,17],49:[2,17],54:[2,17],57:[2,17],72:[2,17],77:[2,17],85:[2,17],90:[2,17],92:[2,17],101:[2,17],103:[2,17],104:[2,17],105:[2,17],109:[2,17],117:[2,17],125:[2,17],127:[2,17],128:[2,17],131:[2,17],132:[2,17],133:[2,17],134:[2,17],135:[2,17],136:[2,17]},{1:[2,18],6:[2,18],25:[2,18],26:[2,18],49:[2,18],54:[2,18],57:[2,18],72:[2,18],77:[2,18],85:[2,18],90:[2,18],92:[2,18],101:[2,18],103:[2,18],104:[2,18],105:[2,18],109:[2,18],117:[2,18],125:[2,18],127:[2,18],128:[2,18],131:[2,18],132:[2,18],133:[2,18],134:[2,18],135:[2,18],136:[2,18]},{1:[2,19],6:[2,19],25:[2,19],26:[2,19],49:[2,19],54:[2,19],57:[2,19],72:[2,19],77:[2,19],85:[2,19],90:[2,19],92:[2,19],101:[2,19],103:[2,19],104:[2,19],105:[2,19],109:[2,19],117:[2,19],125:[2,19],127:[2,19],128:[2,19],131:[2,19],132:[2,19],133:[2,19],134:[2,19],135:[2,19],136:[2,19]},{1:[2,20],6:[2,20],25:[2,20],26:[2,20],49:[2,20],54:[2,20],57:[2,20],72:[2,20],77:[2,20],85:[2,20],90:[2,20],92:[2,20],101:[2,20],103:[2,20],104:[2,20],105:[2,20],109:[2,20],117:[2,20],125:[2,20],127:[2,20],128:[2,20],131:[2,20],132:[2,20],133:[2,20],134:[2,20],135:[2,20],136:[2,20]},{1:[2,21],6:[2,21],25:[2,21],26:[2,21],49:[2,21],54:[2,21],57:[2,21],72:[2,21],77:[2,21],85:[2,21],90:[2,21],92:[2,21],101:[2,21],103:[2,21],104:[2,21],105:[2,21],109:[2,21],117:[2,21],125:[2,21],127:[2,21],128:[2,21],131:[2,21],132:[2,21],133:[2,21],134:[2,21],135:[2,21],136:[2,21]},{1:[2,22],6:[2,22],25:[2,22],26:[2,22],49:[2,22],54:[2,22],57:[2,22],72:[2,22],77:[2,22],85:[2,22],90:[2,22],92:[2,22],101:[2,22],103:[2,22],104:[2,22],105:[2,22],109:[2,22],117:[2,22],125:[2,22],127:[2,22],128:[2,22],131:[2,22],132:[2,22],133:[2,22],134:[2,22],135:[2,22],136:[2,22]},{1:[2,23],6:[2,23],25:[2,23],26:[2,23],49:[2,23],54:[2,23],57:[2,23],72:[2,23],77:[2,23],85:[2,23],90:[2,23],92:[2,23],101:[2,23],103:[2,23],104:[2,23],105:[2,23],109:[2,23],117:[2,23],125:[2,23],127:[2,23],128:[2,23],131:[2,23],132:[2,23],133:[2,23],134:[2,23],135:[2,23],136:[2,23]},{1:[2,9],6:[2,9],26:[2,9],101:[2,9],103:[2,9],105:[2,9],109:[2,9],125:[2,9]},{1:[2,10],6:[2,10],26:[2,10],101:[2,10],103:[2,10],105:[2,10],109:[2,10],125:[2,10]},{1:[2,11],6:[2,11],26:[2,11],101:[2,11],103:[2,11],105:[2,11],109:[2,11],125:[2,11]},{1:[2,75],6:[2,75],25:[2,75],26:[2,75],40:[1,103],49:[2,75],54:[2,75],57:[2,75],66:[2,75],67:[2,75],68:[2,75],70:[2,75],72:[2,75],73:[2,75],77:[2,75],83:[2,75],84:[2,75],85:[2,75],90:[2,75],92:[2,75],101:[2,75],103:[2,75],104:[2,75],105:[2,75],109:[2,75],117:[2,75],125:[2,75],127:[2,75],128:[2,75],131:[2,75],132:[2,75],133:[2,75],134:[2,75],135:[2,75],136:[2,75]},{1:[2,76],6:[2,76],25:[2,76],26:[2,76],49:[2,76],54:[2,76],57:[2,76],66:[2,76],67:[2,76],68:[2,76],70:[2,76],72:[2,76],73:[2,76],77:[2,76],83:[2,76],84:[2,76],85:[2,76],90:[2,76],92:[2,76],101:[2,76],103:[2,76],104:[2,76],105:[2,76],109:[2,76],117:[2,76],125:[2,76],127:[2,76],128:[2,76],131:[2,76],132:[2,76],133:[2,76],134:[2,76],135:[2,76],136:[2,76]},{1:[2,77],6:[2,77],25:[2,77],26:[2,77],49:[2,77],54:[2,77],57:[2,77],66:[2,77],67:[2,77],68:[2,77],70:[2,77],72:[2,77],73:[2,77],77:[2,77],83:[2,77],84:[2,77],85:[2,77],90:[2,77],92:[2,77],101:[2,77],103:[2,77],104:[2,77],105:[2,77],109:[2,77],117:[2,77],125:[2,77],127:[2,77],128:[2,77],131:[2,77],132:[2,77],133:[2,77],134:[2,77],135:[2,77],136:[2,77]},{1:[2,78],6:[2,78],25:[2,78],26:[2,78],49:[2,78],54:[2,78],57:[2,78],66:[2,78],67:[2,78],68:[2,78],70:[2,78],72:[2,78],73:[2,78],77:[2,78],83:[2,78],84:[2,78],85:[2,78],90:[2,78],92:[2,78],101:[2,78],103:[2,78],104:[2,78],105:[2,78],109:[2,78],117:[2,78],125:[2,78],127:[2,78],128:[2,78],131:[2,78],132:[2,78],133:[2,78],134:[2,78],135:[2,78],136:[2,78]},{1:[2,79],6:[2,79],25:[2,79],26:[2,79],49:[2,79],54:[2,79],57:[2,79],66:[2,79],67:[2,79],68:[2,79],70:[2,79],72:[2,79],73:[2,79],77:[2,79],83:[2,79],84:[2,79],85:[2,79],90:[2,79],92:[2,79],101:[2,79],103:[2,79],104:[2,79],105:[2,79],109:[2,79],117:[2,79],125:[2,79],127:[2,79],128:[2,79],131:[2,79],132:[2,79],133:[2,79],134:[2,79],135:[2,79],136:[2,79]},{1:[2,105],6:[2,105],25:[2,105],26:[2,105],49:[2,105],54:[2,105],57:[2,105],66:[2,105],67:[2,105],68:[2,105],70:[2,105],72:[2,105],73:[2,105],77:[2,105],81:104,83:[2,105],84:[1,105],85:[2,105],90:[2,105],92:[2,105],101:[2,105],103:[2,105],104:[2,105],105:[2,105],109:[2,105],117:[2,105],125:[2,105],127:[2,105],128:[2,105],131:[2,105],132:[2,105],133:[2,105],134:[2,105],135:[2,105],136:[2,105]},{6:[2,55],25:[2,55],27:109,28:[1,73],44:110,48:106,49:[2,55],54:[2,55],55:107,56:108,58:111,59:112,75:[1,70],88:[1,113],89:[1,114]},{5:115,25:[1,5]},{8:116,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:118,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:119,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{13:121,14:122,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:123,44:63,58:47,59:48,61:120,63:25,64:26,65:27,75:[1,70],82:[1,28],87:[1,58],88:[1,59],89:[1,57],100:[1,56]},{13:121,14:122,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:123,44:63,58:47,59:48,61:124,63:25,64:26,65:27,75:[1,70],82:[1,28],87:[1,58],88:[1,59],89:[1,57],100:[1,56]},{1:[2,72],6:[2,72],25:[2,72],26:[2,72],40:[2,72],49:[2,72],54:[2,72],57:[2,72],66:[2,72],67:[2,72],68:[2,72],70:[2,72],72:[2,72],73:[2,72],77:[2,72],79:[1,128],83:[2,72],84:[2,72],85:[2,72],90:[2,72],92:[2,72],101:[2,72],103:[2,72],104:[2,72],105:[2,72],109:[2,72],117:[2,72],125:[2,72],127:[2,72],128:[2,72],129:[1,125],130:[1,126],131:[2,72],132:[2,72],133:[2,72],134:[2,72],135:[2,72],136:[2,72],137:[1,127]},{1:[2,180],6:[2,180],25:[2,180],26:[2,180],49:[2,180],54:[2,180],57:[2,180],72:[2,180],77:[2,180],85:[2,180],90:[2,180],92:[2,180],101:[2,180],103:[2,180],104:[2,180],105:[2,180],109:[2,180],117:[2,180],120:[1,129],125:[2,180],127:[2,180],128:[2,180],131:[2,180],132:[2,180],133:[2,180],134:[2,180],135:[2,180],136:[2,180]},{5:130,25:[1,5]},{5:131,25:[1,5]},{1:[2,147],6:[2,147],25:[2,147],26:[2,147],49:[2,147],54:[2,147],57:[2,147],72:[2,147],77:[2,147],85:[2,147],90:[2,147],92:[2,147],101:[2,147],103:[2,147],104:[2,147],105:[2,147],109:[2,147],117:[2,147],125:[2,147],127:[2,147],128:[2,147],131:[2,147],132:[2,147],133:[2,147],134:[2,147],135:[2,147],136:[2,147]},{5:132,25:[1,5]},{8:133,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,134],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,95],5:135,6:[2,95],13:121,14:122,25:[1,5],26:[2,95],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:123,44:63,49:[2,95],54:[2,95],57:[2,95],58:47,59:48,61:137,63:25,64:26,65:27,72:[2,95],75:[1,70],77:[2,95],79:[1,136],82:[1,28],85:[2,95],87:[1,58],88:[1,59],89:[1,57],90:[2,95],92:[2,95],100:[1,56],101:[2,95],103:[2,95],104:[2,95],105:[2,95],109:[2,95],117:[2,95],125:[2,95],127:[2,95],128:[2,95],131:[2,95],132:[2,95],133:[2,95],134:[2,95],135:[2,95],136:[2,95]},{8:138,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,47],6:[2,47],8:139,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,26:[2,47],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],101:[2,47],102:39,103:[2,47],105:[2,47],106:40,107:[1,67],108:41,109:[2,47],110:69,118:[1,42],123:37,124:[1,64],125:[2,47],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,48],6:[2,48],25:[2,48],26:[2,48],54:[2,48],77:[2,48],101:[2,48],103:[2,48],105:[2,48],109:[2,48],125:[2,48]},{1:[2,73],6:[2,73],25:[2,73],26:[2,73],40:[2,73],49:[2,73],54:[2,73],57:[2,73],66:[2,73],67:[2,73],68:[2,73],70:[2,73],72:[2,73],73:[2,73],77:[2,73],83:[2,73],84:[2,73],85:[2,73],90:[2,73],92:[2,73],101:[2,73],103:[2,73],104:[2,73],105:[2,73],109:[2,73],117:[2,73],125:[2,73],127:[2,73],128:[2,73],131:[2,73],132:[2,73],133:[2,73],134:[2,73],135:[2,73],136:[2,73]},{1:[2,74],6:[2,74],25:[2,74],26:[2,74],40:[2,74],49:[2,74],54:[2,74],57:[2,74],66:[2,74],67:[2,74],68:[2,74],70:[2,74],72:[2,74],73:[2,74],77:[2,74],83:[2,74],84:[2,74],85:[2,74],90:[2,74],92:[2,74],101:[2,74],103:[2,74],104:[2,74],105:[2,74],109:[2,74],117:[2,74],125:[2,74],127:[2,74],128:[2,74],131:[2,74],132:[2,74],133:[2,74],134:[2,74],135:[2,74],136:[2,74]},{1:[2,29],6:[2,29],25:[2,29],26:[2,29],49:[2,29],54:[2,29],57:[2,29],66:[2,29],67:[2,29],68:[2,29],70:[2,29],72:[2,29],73:[2,29],77:[2,29],83:[2,29],84:[2,29],85:[2,29],90:[2,29],92:[2,29],101:[2,29],103:[2,29],104:[2,29],105:[2,29],109:[2,29],117:[2,29],125:[2,29],127:[2,29],128:[2,29],131:[2,29],132:[2,29],133:[2,29],134:[2,29],135:[2,29],136:[2,29]},{1:[2,30],6:[2,30],25:[2,30],26:[2,30],49:[2,30],54:[2,30],57:[2,30],66:[2,30],67:[2,30],68:[2,30],70:[2,30],72:[2,30],73:[2,30],77:[2,30],83:[2,30],84:[2,30],85:[2,30],90:[2,30],92:[2,30],101:[2,30],103:[2,30],104:[2,30],105:[2,30],109:[2,30],117:[2,30],125:[2,30],127:[2,30],128:[2,30],131:[2,30],132:[2,30],133:[2,30],134:[2,30],135:[2,30],136:[2,30]},{1:[2,31],6:[2,31],25:[2,31],26:[2,31],49:[2,31],54:[2,31],57:[2,31],66:[2,31],67:[2,31],68:[2,31],70:[2,31],72:[2,31],73:[2,31],77:[2,31],83:[2,31],84:[2,31],85:[2,31],90:[2,31],92:[2,31],101:[2,31],103:[2,31],104:[2,31],105:[2,31],109:[2,31],117:[2,31],125:[2,31],127:[2,31],128:[2,31],131:[2,31],132:[2,31],133:[2,31],134:[2,31],135:[2,31],136:[2,31]},{1:[2,32],6:[2,32],25:[2,32],26:[2,32],49:[2,32],54:[2,32],57:[2,32],66:[2,32],67:[2,32],68:[2,32],70:[2,32],72:[2,32],73:[2,32],77:[2,32],83:[2,32],84:[2,32],85:[2,32],90:[2,32],92:[2,32],101:[2,32],103:[2,32],104:[2,32],105:[2,32],109:[2,32],117:[2,32],125:[2,32],127:[2,32],128:[2,32],131:[2,32],132:[2,32],133:[2,32],134:[2,32],135:[2,32],136:[2,32]},{1:[2,33],6:[2,33],25:[2,33],26:[2,33],49:[2,33],54:[2,33],57:[2,33],66:[2,33],67:[2,33],68:[2,33],70:[2,33],72:[2,33],73:[2,33],77:[2,33],83:[2,33],84:[2,33],85:[2,33],90:[2,33],92:[2,33],101:[2,33],103:[2,33],104:[2,33],105:[2,33],109:[2,33],117:[2,33],125:[2,33],127:[2,33],128:[2,33],131:[2,33],132:[2,33],133:[2,33],134:[2,33],135:[2,33],136:[2,33]},{1:[2,34],6:[2,34],25:[2,34],26:[2,34],49:[2,34],54:[2,34],57:[2,34],66:[2,34],67:[2,34],68:[2,34],70:[2,34],72:[2,34],73:[2,34],77:[2,34],83:[2,34],84:[2,34],85:[2,34],90:[2,34],92:[2,34],101:[2,34],103:[2,34],104:[2,34],105:[2,34],109:[2,34],117:[2,34],125:[2,34],127:[2,34],128:[2,34],131:[2,34],132:[2,34],133:[2,34],134:[2,34],135:[2,34],136:[2,34]},{1:[2,35],6:[2,35],25:[2,35],26:[2,35],49:[2,35],54:[2,35],57:[2,35],66:[2,35],67:[2,35],68:[2,35],70:[2,35],72:[2,35],73:[2,35],77:[2,35],83:[2,35],84:[2,35],85:[2,35],90:[2,35],92:[2,35],101:[2,35],103:[2,35],104:[2,35],105:[2,35],109:[2,35],117:[2,35],125:[2,35],127:[2,35],128:[2,35],131:[2,35],132:[2,35],133:[2,35],134:[2,35],135:[2,35],136:[2,35]},{4:140,7:4,8:6,9:7,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,141],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:142,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,146],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:147,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],86:144,87:[1,58],88:[1,59],89:[1,57],90:[1,143],93:145,95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,111],6:[2,111],25:[2,111],26:[2,111],49:[2,111],54:[2,111],57:[2,111],66:[2,111],67:[2,111],68:[2,111],70:[2,111],72:[2,111],73:[2,111],77:[2,111],83:[2,111],84:[2,111],85:[2,111],90:[2,111],92:[2,111],101:[2,111],103:[2,111],104:[2,111],105:[2,111],109:[2,111],117:[2,111],125:[2,111],127:[2,111],128:[2,111],131:[2,111],132:[2,111],133:[2,111],134:[2,111],135:[2,111],136:[2,111]},{1:[2,112],6:[2,112],25:[2,112],26:[2,112],27:148,28:[1,73],49:[2,112],54:[2,112],57:[2,112],66:[2,112],67:[2,112],68:[2,112],70:[2,112],72:[2,112],73:[2,112],77:[2,112],83:[2,112],84:[2,112],85:[2,112],90:[2,112],92:[2,112],101:[2,112],103:[2,112],104:[2,112],105:[2,112],109:[2,112],117:[2,112],125:[2,112],127:[2,112],128:[2,112],131:[2,112],132:[2,112],133:[2,112],134:[2,112],135:[2,112],136:[2,112]},{25:[2,51]},{25:[2,52]},{1:[2,68],6:[2,68],25:[2,68],26:[2,68],40:[2,68],49:[2,68],54:[2,68],57:[2,68],66:[2,68],67:[2,68],68:[2,68],70:[2,68],72:[2,68],73:[2,68],77:[2,68],79:[2,68],83:[2,68],84:[2,68],85:[2,68],90:[2,68],92:[2,68],101:[2,68],103:[2,68],104:[2,68],105:[2,68],109:[2,68],117:[2,68],125:[2,68],127:[2,68],128:[2,68],129:[2,68],130:[2,68],131:[2,68],132:[2,68],133:[2,68],134:[2,68],135:[2,68],136:[2,68],137:[2,68]},{1:[2,71],6:[2,71],25:[2,71],26:[2,71],40:[2,71],49:[2,71],54:[2,71],57:[2,71],66:[2,71],67:[2,71],68:[2,71],70:[2,71],72:[2,71],73:[2,71],77:[2,71],79:[2,71],83:[2,71],84:[2,71],85:[2,71],90:[2,71],92:[2,71],101:[2,71],103:[2,71],104:[2,71],105:[2,71],109:[2,71],117:[2,71],125:[2,71],127:[2,71],128:[2,71],129:[2,71],130:[2,71],131:[2,71],132:[2,71],133:[2,71],134:[2,71],135:[2,71],136:[2,71],137:[2,71]},{8:149,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:150,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:151,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{5:152,8:153,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,5],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{27:158,28:[1,73],44:159,58:160,59:161,64:154,75:[1,70],88:[1,113],89:[1,57],112:155,113:[1,156],114:157},{111:162,115:[1,163],116:[1,164]},{6:[2,90],11:168,25:[2,90],27:169,28:[1,73],29:170,30:[1,71],31:[1,72],41:166,42:167,44:171,46:[1,46],54:[2,90],76:165,77:[2,90],88:[1,113]},{1:[2,27],6:[2,27],25:[2,27],26:[2,27],43:[2,27],49:[2,27],54:[2,27],57:[2,27],66:[2,27],67:[2,27],68:[2,27],70:[2,27],72:[2,27],73:[2,27],77:[2,27],83:[2,27],84:[2,27],85:[2,27],90:[2,27],92:[2,27],101:[2,27],103:[2,27],104:[2,27],105:[2,27],109:[2,27],117:[2,27],125:[2,27],127:[2,27],128:[2,27],131:[2,27],132:[2,27],133:[2,27],134:[2,27],135:[2,27],136:[2,27]},{1:[2,28],6:[2,28],25:[2,28],26:[2,28],43:[2,28],49:[2,28],54:[2,28],57:[2,28],66:[2,28],67:[2,28],68:[2,28],70:[2,28],72:[2,28],73:[2,28],77:[2,28],83:[2,28],84:[2,28],85:[2,28],90:[2,28],92:[2,28],101:[2,28],103:[2,28],104:[2,28],105:[2,28],109:[2,28],117:[2,28],125:[2,28],127:[2,28],128:[2,28],131:[2,28],132:[2,28],133:[2,28],134:[2,28],135:[2,28],136:[2,28]},{1:[2,26],6:[2,26],25:[2,26],26:[2,26],40:[2,26],43:[2,26],49:[2,26],54:[2,26],57:[2,26],66:[2,26],67:[2,26],68:[2,26],70:[2,26],72:[2,26],73:[2,26],77:[2,26],79:[2,26],83:[2,26],84:[2,26],85:[2,26],90:[2,26],92:[2,26],101:[2,26],103:[2,26],104:[2,26],105:[2,26],109:[2,26],115:[2,26],116:[2,26],117:[2,26],125:[2,26],127:[2,26],128:[2,26],129:[2,26],130:[2,26],131:[2,26],132:[2,26],133:[2,26],134:[2,26],135:[2,26],136:[2,26],137:[2,26]},{1:[2,6],6:[2,6],7:172,8:6,9:7,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,26:[2,6],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],101:[2,6],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,3]},{1:[2,24],6:[2,24],25:[2,24],26:[2,24],49:[2,24],54:[2,24],57:[2,24],72:[2,24],77:[2,24],85:[2,24],90:[2,24],92:[2,24],97:[2,24],98:[2,24],101:[2,24],103:[2,24],104:[2,24],105:[2,24],109:[2,24],117:[2,24],120:[2,24],122:[2,24],125:[2,24],127:[2,24],128:[2,24],131:[2,24],132:[2,24],133:[2,24],134:[2,24],135:[2,24],136:[2,24]},{6:[1,74],26:[1,173]},{1:[2,191],6:[2,191],25:[2,191],26:[2,191],49:[2,191],54:[2,191],57:[2,191],72:[2,191],77:[2,191],85:[2,191],90:[2,191],92:[2,191],101:[2,191],103:[2,191],104:[2,191],105:[2,191],109:[2,191],117:[2,191],125:[2,191],127:[2,191],128:[2,191],131:[2,191],132:[2,191],133:[2,191],134:[2,191],135:[2,191],136:[2,191]},{8:174,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:175,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:176,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:177,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:178,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:179,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:180,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:181,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,146],6:[2,146],25:[2,146],26:[2,146],49:[2,146],54:[2,146],57:[2,146],72:[2,146],77:[2,146],85:[2,146],90:[2,146],92:[2,146],101:[2,146],103:[2,146],104:[2,146],105:[2,146],109:[2,146],117:[2,146],125:[2,146],127:[2,146],128:[2,146],131:[2,146],132:[2,146],133:[2,146],134:[2,146],135:[2,146],136:[2,146]},{1:[2,151],6:[2,151],25:[2,151],26:[2,151],49:[2,151],54:[2,151],57:[2,151],72:[2,151],77:[2,151],85:[2,151],90:[2,151],92:[2,151],101:[2,151],103:[2,151],104:[2,151],105:[2,151],109:[2,151],117:[2,151],125:[2,151],127:[2,151],128:[2,151],131:[2,151],132:[2,151],133:[2,151],134:[2,151],135:[2,151],136:[2,151]},{8:182,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,145],6:[2,145],25:[2,145],26:[2,145],49:[2,145],54:[2,145],57:[2,145],72:[2,145],77:[2,145],85:[2,145],90:[2,145],92:[2,145],101:[2,145],103:[2,145],104:[2,145],105:[2,145],109:[2,145],117:[2,145],125:[2,145],127:[2,145],128:[2,145],131:[2,145],132:[2,145],133:[2,145],134:[2,145],135:[2,145],136:[2,145]},{1:[2,150],6:[2,150],25:[2,150],26:[2,150],49:[2,150],54:[2,150],57:[2,150],72:[2,150],77:[2,150],85:[2,150],90:[2,150],92:[2,150],101:[2,150],103:[2,150],104:[2,150],105:[2,150],109:[2,150],117:[2,150],125:[2,150],127:[2,150],128:[2,150],131:[2,150],132:[2,150],133:[2,150],134:[2,150],135:[2,150],136:[2,150]},{81:183,84:[1,105]},{1:[2,69],6:[2,69],25:[2,69],26:[2,69],40:[2,69],49:[2,69],54:[2,69],57:[2,69],66:[2,69],67:[2,69],68:[2,69],70:[2,69],72:[2,69],73:[2,69],77:[2,69],79:[2,69],83:[2,69],84:[2,69],85:[2,69],90:[2,69],92:[2,69],101:[2,69],103:[2,69],104:[2,69],105:[2,69],109:[2,69],117:[2,69],125:[2,69],127:[2,69],128:[2,69],129:[2,69],130:[2,69],131:[2,69],132:[2,69],133:[2,69],134:[2,69],135:[2,69],136:[2,69],137:[2,69]},{84:[2,108]},{27:184,28:[1,73]},{27:185,28:[1,73]},{1:[2,83],6:[2,83],25:[2,83],26:[2,83],27:186,28:[1,73],40:[2,83],49:[2,83],54:[2,83],57:[2,83],66:[2,83],67:[2,83],68:[2,83],70:[2,83],72:[2,83],73:[2,83],77:[2,83],79:[2,83],83:[2,83],84:[2,83],85:[2,83],90:[2,83],92:[2,83],101:[2,83],103:[2,83],104:[2,83],105:[2,83],109:[2,83],117:[2,83],125:[2,83],127:[2,83],128:[2,83],129:[2,83],130:[2,83],131:[2,83],132:[2,83],133:[2,83],134:[2,83],135:[2,83],136:[2,83],137:[2,83]},{1:[2,84],6:[2,84],25:[2,84],26:[2,84],40:[2,84],49:[2,84],54:[2,84],57:[2,84],66:[2,84],67:[2,84],68:[2,84],70:[2,84],72:[2,84],73:[2,84],77:[2,84],79:[2,84],83:[2,84],84:[2,84],85:[2,84],90:[2,84],92:[2,84],101:[2,84],103:[2,84],104:[2,84],105:[2,84],109:[2,84],117:[2,84],125:[2,84],127:[2,84],128:[2,84],129:[2,84],130:[2,84],131:[2,84],132:[2,84],133:[2,84],134:[2,84],135:[2,84],136:[2,84],137:[2,84]},{8:188,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],57:[1,192],58:47,59:48,61:36,63:25,64:26,65:27,71:187,74:189,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],91:190,92:[1,191],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{69:193,70:[1,99],73:[1,100]},{81:194,84:[1,105]},{1:[2,70],6:[2,70],25:[2,70],26:[2,70],40:[2,70],49:[2,70],54:[2,70],57:[2,70],66:[2,70],67:[2,70],68:[2,70],70:[2,70],72:[2,70],73:[2,70],77:[2,70],79:[2,70],83:[2,70],84:[2,70],85:[2,70],90:[2,70],92:[2,70],101:[2,70],103:[2,70],104:[2,70],105:[2,70],109:[2,70],117:[2,70],125:[2,70],127:[2,70],128:[2,70],129:[2,70],130:[2,70],131:[2,70],132:[2,70],133:[2,70],134:[2,70],135:[2,70],136:[2,70],137:[2,70]},{6:[1,196],8:195,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,197],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,106],6:[2,106],25:[2,106],26:[2,106],49:[2,106],54:[2,106],57:[2,106],66:[2,106],67:[2,106],68:[2,106],70:[2,106],72:[2,106],73:[2,106],77:[2,106],83:[2,106],84:[2,106],85:[2,106],90:[2,106],92:[2,106],101:[2,106],103:[2,106],104:[2,106],105:[2,106],109:[2,106],117:[2,106],125:[2,106],127:[2,106],128:[2,106],131:[2,106],132:[2,106],133:[2,106],134:[2,106],135:[2,106],136:[2,106]},{8:200,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,146],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:147,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],85:[1,198],86:199,87:[1,58],88:[1,59],89:[1,57],93:145,95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{6:[2,53],25:[2,53],49:[1,201],53:203,54:[1,202]},{6:[2,56],25:[2,56],26:[2,56],49:[2,56],54:[2,56]},{6:[2,60],25:[2,60],26:[2,60],40:[1,205],49:[2,60],54:[2,60],57:[1,204]},{6:[2,63],25:[2,63],26:[2,63],40:[2,63],49:[2,63],54:[2,63],57:[2,63]},{6:[2,64],25:[2,64],26:[2,64],40:[2,64],49:[2,64],54:[2,64],57:[2,64]},{6:[2,65],25:[2,65],26:[2,65],40:[2,65],49:[2,65],54:[2,65],57:[2,65]},{6:[2,66],25:[2,66],26:[2,66],40:[2,66],49:[2,66],54:[2,66],57:[2,66]},{27:148,28:[1,73]},{8:200,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,146],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:147,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],86:144,87:[1,58],88:[1,59],89:[1,57],90:[1,143],93:145,95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,50],6:[2,50],25:[2,50],26:[2,50],49:[2,50],54:[2,50],57:[2,50],72:[2,50],77:[2,50],85:[2,50],90:[2,50],92:[2,50],101:[2,50],103:[2,50],104:[2,50],105:[2,50],109:[2,50],117:[2,50],125:[2,50],127:[2,50],128:[2,50],131:[2,50],132:[2,50],133:[2,50],134:[2,50],135:[2,50],136:[2,50]},{1:[2,184],6:[2,184],25:[2,184],26:[2,184],49:[2,184],54:[2,184],57:[2,184],72:[2,184],77:[2,184],85:[2,184],90:[2,184],92:[2,184],101:[2,184],102:87,103:[2,184],104:[2,184],105:[2,184],108:88,109:[2,184],110:69,117:[2,184],125:[2,184],127:[2,184],128:[2,184],131:[1,78],132:[2,184],133:[2,184],134:[2,184],135:[2,184],136:[2,184]},{102:90,103:[1,65],105:[1,66],108:91,109:[1,68],110:69,125:[1,89]},{1:[2,185],6:[2,185],25:[2,185],26:[2,185],49:[2,185],54:[2,185],57:[2,185],72:[2,185],77:[2,185],85:[2,185],90:[2,185],92:[2,185],101:[2,185],102:87,103:[2,185],104:[2,185],105:[2,185],108:88,109:[2,185],110:69,117:[2,185],125:[2,185],127:[2,185],128:[2,185],131:[1,78],132:[2,185],133:[2,185],134:[2,185],135:[2,185],136:[2,185]},{1:[2,186],6:[2,186],25:[2,186],26:[2,186],49:[2,186],54:[2,186],57:[2,186],72:[2,186],77:[2,186],85:[2,186],90:[2,186],92:[2,186],101:[2,186],102:87,103:[2,186],104:[2,186],105:[2,186],108:88,109:[2,186],110:69,117:[2,186],125:[2,186],127:[2,186],128:[2,186],131:[1,78],132:[2,186],133:[2,186],134:[2,186],135:[2,186],136:[2,186]},{1:[2,187],6:[2,187],25:[2,187],26:[2,187],49:[2,187],54:[2,187],57:[2,187],66:[2,72],67:[2,72],68:[2,72],70:[2,72],72:[2,187],73:[2,72],77:[2,187],83:[2,72],84:[2,72],85:[2,187],90:[2,187],92:[2,187],101:[2,187],103:[2,187],104:[2,187],105:[2,187],109:[2,187],117:[2,187],125:[2,187],127:[2,187],128:[2,187],131:[2,187],132:[2,187],133:[2,187],134:[2,187],135:[2,187],136:[2,187]},{62:93,66:[1,95],67:[1,96],68:[1,97],69:98,70:[1,99],73:[1,100],80:92,83:[1,94],84:[2,107]},{62:102,66:[1,95],67:[1,96],68:[1,97],69:98,70:[1,99],73:[1,100],80:101,83:[1,94],84:[2,107]},{66:[2,75],67:[2,75],68:[2,75],70:[2,75],73:[2,75],83:[2,75],84:[2,75]},{1:[2,188],6:[2,188],25:[2,188],26:[2,188],49:[2,188],54:[2,188],57:[2,188],66:[2,72],67:[2,72],68:[2,72],70:[2,72],72:[2,188],73:[2,72],77:[2,188],83:[2,72],84:[2,72],85:[2,188],90:[2,188],92:[2,188],101:[2,188],103:[2,188],104:[2,188],105:[2,188],109:[2,188],117:[2,188],125:[2,188],127:[2,188],128:[2,188],131:[2,188],132:[2,188],133:[2,188],134:[2,188],135:[2,188],136:[2,188]},{1:[2,189],6:[2,189],25:[2,189],26:[2,189],49:[2,189],54:[2,189],57:[2,189],72:[2,189],77:[2,189],85:[2,189],90:[2,189],92:[2,189],101:[2,189],103:[2,189],104:[2,189],105:[2,189],109:[2,189],117:[2,189],125:[2,189],127:[2,189],128:[2,189],131:[2,189],132:[2,189],133:[2,189],134:[2,189],135:[2,189],136:[2,189]},{1:[2,190],6:[2,190],25:[2,190],26:[2,190],49:[2,190],54:[2,190],57:[2,190],72:[2,190],77:[2,190],85:[2,190],90:[2,190],92:[2,190],101:[2,190],103:[2,190],104:[2,190],105:[2,190],109:[2,190],117:[2,190],125:[2,190],127:[2,190],128:[2,190],131:[2,190],132:[2,190],133:[2,190],134:[2,190],135:[2,190],136:[2,190]},{8:206,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,207],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:208,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{5:209,25:[1,5],124:[1,210]},{1:[2,132],6:[2,132],25:[2,132],26:[2,132],49:[2,132],54:[2,132],57:[2,132],72:[2,132],77:[2,132],85:[2,132],90:[2,132],92:[2,132],96:211,97:[1,212],98:[1,213],101:[2,132],103:[2,132],104:[2,132],105:[2,132],109:[2,132],117:[2,132],125:[2,132],127:[2,132],128:[2,132],131:[2,132],132:[2,132],133:[2,132],134:[2,132],135:[2,132],136:[2,132]},{1:[2,144],6:[2,144],25:[2,144],26:[2,144],49:[2,144],54:[2,144],57:[2,144],72:[2,144],77:[2,144],85:[2,144],90:[2,144],92:[2,144],101:[2,144],103:[2,144],104:[2,144],105:[2,144],109:[2,144],117:[2,144],125:[2,144],127:[2,144],128:[2,144],131:[2,144],132:[2,144],133:[2,144],134:[2,144],135:[2,144],136:[2,144]},{1:[2,152],6:[2,152],25:[2,152],26:[2,152],49:[2,152],54:[2,152],57:[2,152],72:[2,152],77:[2,152],85:[2,152],90:[2,152],92:[2,152],101:[2,152],103:[2,152],104:[2,152],105:[2,152],109:[2,152],117:[2,152],125:[2,152],127:[2,152],128:[2,152],131:[2,152],132:[2,152],133:[2,152],134:[2,152],135:[2,152],136:[2,152]},{25:[1,214],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{119:215,121:216,122:[1,217]},{1:[2,96],6:[2,96],25:[2,96],26:[2,96],49:[2,96],54:[2,96],57:[2,96],72:[2,96],77:[2,96],85:[2,96],90:[2,96],92:[2,96],101:[2,96],103:[2,96],104:[2,96],105:[2,96],109:[2,96],117:[2,96],125:[2,96],127:[2,96],128:[2,96],131:[2,96],132:[2,96],133:[2,96],134:[2,96],135:[2,96],136:[2,96]},{8:218,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,99],5:219,6:[2,99],25:[1,5],26:[2,99],49:[2,99],54:[2,99],57:[2,99],66:[2,72],67:[2,72],68:[2,72],70:[2,72],72:[2,99],73:[2,72],77:[2,99],79:[1,220],83:[2,72],84:[2,72],85:[2,99],90:[2,99],92:[2,99],101:[2,99],103:[2,99],104:[2,99],105:[2,99],109:[2,99],117:[2,99],125:[2,99],127:[2,99],128:[2,99],131:[2,99],132:[2,99],133:[2,99],134:[2,99],135:[2,99],136:[2,99]},{1:[2,137],6:[2,137],25:[2,137],26:[2,137],49:[2,137],54:[2,137],57:[2,137],72:[2,137],77:[2,137],85:[2,137],90:[2,137],92:[2,137],101:[2,137],102:87,103:[2,137],104:[2,137],105:[2,137],108:88,109:[2,137],110:69,117:[2,137],125:[2,137],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,46],6:[2,46],26:[2,46],101:[2,46],102:87,103:[2,46],105:[2,46],108:88,109:[2,46],110:69,125:[2,46],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{6:[1,74],101:[1,221]},{4:222,7:4,8:6,9:7,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{6:[2,128],25:[2,128],54:[2,128],57:[1,224],90:[2,128],91:223,92:[1,191],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,114],6:[2,114],25:[2,114],26:[2,114],40:[2,114],49:[2,114],54:[2,114],57:[2,114],66:[2,114],67:[2,114],68:[2,114],70:[2,114],72:[2,114],73:[2,114],77:[2,114],83:[2,114],84:[2,114],85:[2,114],90:[2,114],92:[2,114],101:[2,114],103:[2,114],104:[2,114],105:[2,114],109:[2,114],115:[2,114],116:[2,114],117:[2,114],125:[2,114],127:[2,114],128:[2,114],131:[2,114],132:[2,114],133:[2,114],134:[2,114],135:[2,114],136:[2,114]},{6:[2,53],25:[2,53],53:225,54:[1,226],90:[2,53]},{6:[2,123],25:[2,123],26:[2,123],54:[2,123],85:[2,123],90:[2,123]},{8:200,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,146],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:147,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],86:227,87:[1,58],88:[1,59],89:[1,57],93:145,95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{6:[2,129],25:[2,129],26:[2,129],54:[2,129],85:[2,129],90:[2,129]},{1:[2,113],6:[2,113],25:[2,113],26:[2,113],40:[2,113],43:[2,113],49:[2,113],54:[2,113],57:[2,113],66:[2,113],67:[2,113],68:[2,113],70:[2,113],72:[2,113],73:[2,113],77:[2,113],79:[2,113],83:[2,113],84:[2,113],85:[2,113],90:[2,113],92:[2,113],101:[2,113],103:[2,113],104:[2,113],105:[2,113],109:[2,113],115:[2,113],116:[2,113],117:[2,113],125:[2,113],127:[2,113],128:[2,113],129:[2,113],130:[2,113],131:[2,113],132:[2,113],133:[2,113],134:[2,113],135:[2,113],136:[2,113],137:[2,113]},{5:228,25:[1,5],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,140],6:[2,140],25:[2,140],26:[2,140],49:[2,140],54:[2,140],57:[2,140],72:[2,140],77:[2,140],85:[2,140],90:[2,140],92:[2,140],101:[2,140],102:87,103:[1,65],104:[1,229],105:[1,66],108:88,109:[1,68],110:69,117:[2,140],125:[2,140],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,142],6:[2,142],25:[2,142],26:[2,142],49:[2,142],54:[2,142],57:[2,142],72:[2,142],77:[2,142],85:[2,142],90:[2,142],92:[2,142],101:[2,142],102:87,103:[1,65],104:[1,230],105:[1,66],108:88,109:[1,68],110:69,117:[2,142],125:[2,142],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,148],6:[2,148],25:[2,148],26:[2,148],49:[2,148],54:[2,148],57:[2,148],72:[2,148],77:[2,148],85:[2,148],90:[2,148],92:[2,148],101:[2,148],103:[2,148],104:[2,148],105:[2,148],109:[2,148],117:[2,148],125:[2,148],127:[2,148],128:[2,148],131:[2,148],132:[2,148],133:[2,148],134:[2,148],135:[2,148],136:[2,148]},{1:[2,149],6:[2,149],25:[2,149],26:[2,149],49:[2,149],54:[2,149],57:[2,149],72:[2,149],77:[2,149],85:[2,149],90:[2,149],92:[2,149],101:[2,149],102:87,103:[1,65],104:[2,149],105:[1,66],108:88,109:[1,68],110:69,117:[2,149],125:[2,149],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,153],6:[2,153],25:[2,153],26:[2,153],49:[2,153],54:[2,153],57:[2,153],72:[2,153],77:[2,153],85:[2,153],90:[2,153],92:[2,153],101:[2,153],103:[2,153],104:[2,153],105:[2,153],109:[2,153],117:[2,153],125:[2,153],127:[2,153],128:[2,153],131:[2,153],132:[2,153],133:[2,153],134:[2,153],135:[2,153],136:[2,153]},{115:[2,155],116:[2,155]},{27:158,28:[1,73],44:159,58:160,59:161,75:[1,70],88:[1,113],89:[1,114],112:231,114:157},{54:[1,232],115:[2,161],116:[2,161]},{54:[2,157],115:[2,157],116:[2,157]},{54:[2,158],115:[2,158],116:[2,158]},{54:[2,159],115:[2,159],116:[2,159]},{54:[2,160],115:[2,160],116:[2,160]},{1:[2,154],6:[2,154],25:[2,154],26:[2,154],49:[2,154],54:[2,154],57:[2,154],72:[2,154],77:[2,154],85:[2,154],90:[2,154],92:[2,154],101:[2,154],103:[2,154],104:[2,154],105:[2,154],109:[2,154],117:[2,154],125:[2,154],127:[2,154],128:[2,154],131:[2,154],132:[2,154],133:[2,154],134:[2,154],135:[2,154],136:[2,154]},{8:233,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:234,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{6:[2,53],25:[2,53],53:235,54:[1,236],77:[2,53]},{6:[2,91],25:[2,91],26:[2,91],54:[2,91],77:[2,91]},{6:[2,39],25:[2,39],26:[2,39],43:[1,237],54:[2,39],77:[2,39]},{6:[2,42],25:[2,42],26:[2,42],54:[2,42],77:[2,42]},{6:[2,43],25:[2,43],26:[2,43],43:[2,43],54:[2,43],77:[2,43]},{6:[2,44],25:[2,44],26:[2,44],43:[2,44],54:[2,44],77:[2,44]},{6:[2,45],25:[2,45],26:[2,45],43:[2,45],54:[2,45],77:[2,45]},{1:[2,5],6:[2,5],26:[2,5],101:[2,5]},{1:[2,25],6:[2,25],25:[2,25],26:[2,25],49:[2,25],54:[2,25],57:[2,25],72:[2,25],77:[2,25],85:[2,25],90:[2,25],92:[2,25],97:[2,25],98:[2,25],101:[2,25],103:[2,25],104:[2,25],105:[2,25],109:[2,25],117:[2,25],120:[2,25],122:[2,25],125:[2,25],127:[2,25],128:[2,25],131:[2,25],132:[2,25],133:[2,25],134:[2,25],135:[2,25],136:[2,25]},{1:[2,192],6:[2,192],25:[2,192],26:[2,192],49:[2,192],54:[2,192],57:[2,192],72:[2,192],77:[2,192],85:[2,192],90:[2,192],92:[2,192],101:[2,192],102:87,103:[2,192],104:[2,192],105:[2,192],108:88,109:[2,192],110:69,117:[2,192],125:[2,192],127:[2,192],128:[2,192],131:[1,78],132:[1,81],133:[2,192],134:[2,192],135:[2,192],136:[2,192]},{1:[2,193],6:[2,193],25:[2,193],26:[2,193],49:[2,193],54:[2,193],57:[2,193],72:[2,193],77:[2,193],85:[2,193],90:[2,193],92:[2,193],101:[2,193],102:87,103:[2,193],104:[2,193],105:[2,193],108:88,109:[2,193],110:69,117:[2,193],125:[2,193],127:[2,193],128:[2,193],131:[1,78],132:[1,81],133:[2,193],134:[2,193],135:[2,193],136:[2,193]},{1:[2,194],6:[2,194],25:[2,194],26:[2,194],49:[2,194],54:[2,194],57:[2,194],72:[2,194],77:[2,194],85:[2,194],90:[2,194],92:[2,194],101:[2,194],102:87,103:[2,194],104:[2,194],105:[2,194],108:88,109:[2,194],110:69,117:[2,194],125:[2,194],127:[2,194],128:[2,194],131:[1,78],132:[2,194],133:[2,194],134:[2,194],135:[2,194],136:[2,194]},{1:[2,195],6:[2,195],25:[2,195],26:[2,195],49:[2,195],54:[2,195],57:[2,195],72:[2,195],77:[2,195],85:[2,195],90:[2,195],92:[2,195],101:[2,195],102:87,103:[2,195],104:[2,195],105:[2,195],108:88,109:[2,195],110:69,117:[2,195],125:[2,195],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[2,195],134:[2,195],135:[2,195],136:[2,195]},{1:[2,196],6:[2,196],25:[2,196],26:[2,196],49:[2,196],54:[2,196],57:[2,196],72:[2,196],77:[2,196],85:[2,196],90:[2,196],92:[2,196],101:[2,196],102:87,103:[2,196],104:[2,196],105:[2,196],108:88,109:[2,196],110:69,117:[2,196],125:[2,196],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[2,196],135:[2,196],136:[1,85]},{1:[2,197],6:[2,197],25:[2,197],26:[2,197],49:[2,197],54:[2,197],57:[2,197],72:[2,197],77:[2,197],85:[2,197],90:[2,197],92:[2,197],101:[2,197],102:87,103:[2,197],104:[2,197],105:[2,197],108:88,109:[2,197],110:69,117:[2,197],125:[2,197],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[2,197],136:[1,85]},{1:[2,198],6:[2,198],25:[2,198],26:[2,198],49:[2,198],54:[2,198],57:[2,198],72:[2,198],77:[2,198],85:[2,198],90:[2,198],92:[2,198],101:[2,198],102:87,103:[2,198],104:[2,198],105:[2,198],108:88,109:[2,198],110:69,117:[2,198],125:[2,198],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[2,198],135:[2,198],136:[2,198]},{1:[2,183],6:[2,183],25:[2,183],26:[2,183],49:[2,183],54:[2,183],57:[2,183],72:[2,183],77:[2,183],85:[2,183],90:[2,183],92:[2,183],101:[2,183],102:87,103:[1,65],104:[2,183],105:[1,66],108:88,109:[1,68],110:69,117:[2,183],125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,182],6:[2,182],25:[2,182],26:[2,182],49:[2,182],54:[2,182],57:[2,182],72:[2,182],77:[2,182],85:[2,182],90:[2,182],92:[2,182],101:[2,182],102:87,103:[1,65],104:[2,182],105:[1,66],108:88,109:[1,68],110:69,117:[2,182],125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,103],6:[2,103],25:[2,103],26:[2,103],49:[2,103],54:[2,103],57:[2,103],66:[2,103],67:[2,103],68:[2,103],70:[2,103],72:[2,103],73:[2,103],77:[2,103],83:[2,103],84:[2,103],85:[2,103],90:[2,103],92:[2,103],101:[2,103],103:[2,103],104:[2,103],105:[2,103],109:[2,103],117:[2,103],125:[2,103],127:[2,103],128:[2,103],131:[2,103],132:[2,103],133:[2,103],134:[2,103],135:[2,103],136:[2,103]},{1:[2,80],6:[2,80],25:[2,80],26:[2,80],40:[2,80],49:[2,80],54:[2,80],57:[2,80],66:[2,80],67:[2,80],68:[2,80],70:[2,80],72:[2,80],73:[2,80],77:[2,80],79:[2,80],83:[2,80],84:[2,80],85:[2,80],90:[2,80],92:[2,80],101:[2,80],103:[2,80],104:[2,80],105:[2,80],109:[2,80],117:[2,80],125:[2,80],127:[2,80],128:[2,80],129:[2,80],130:[2,80],131:[2,80],132:[2,80],133:[2,80],134:[2,80],135:[2,80],136:[2,80],137:[2,80]},{1:[2,81],6:[2,81],25:[2,81],26:[2,81],40:[2,81],49:[2,81],54:[2,81],57:[2,81],66:[2,81],67:[2,81],68:[2,81],70:[2,81],72:[2,81],73:[2,81],77:[2,81],79:[2,81],83:[2,81],84:[2,81],85:[2,81],90:[2,81],92:[2,81],101:[2,81],103:[2,81],104:[2,81],105:[2,81],109:[2,81],117:[2,81],125:[2,81],127:[2,81],128:[2,81],129:[2,81],130:[2,81],131:[2,81],132:[2,81],133:[2,81],134:[2,81],135:[2,81],136:[2,81],137:[2,81]},{1:[2,82],6:[2,82],25:[2,82],26:[2,82],40:[2,82],49:[2,82],54:[2,82],57:[2,82],66:[2,82],67:[2,82],68:[2,82],70:[2,82],72:[2,82],73:[2,82],77:[2,82],79:[2,82],83:[2,82],84:[2,82],85:[2,82],90:[2,82],92:[2,82],101:[2,82],103:[2,82],104:[2,82],105:[2,82],109:[2,82],117:[2,82],125:[2,82],127:[2,82],128:[2,82],129:[2,82],130:[2,82],131:[2,82],132:[2,82],133:[2,82],134:[2,82],135:[2,82],136:[2,82],137:[2,82]},{72:[1,238]},{57:[1,192],72:[2,87],91:239,92:[1,191],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{72:[2,88]},{8:240,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,72:[2,122],75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{12:[2,116],28:[2,116],30:[2,116],31:[2,116],33:[2,116],34:[2,116],35:[2,116],36:[2,116],37:[2,116],38:[2,116],45:[2,116],46:[2,116],47:[2,116],51:[2,116],52:[2,116],72:[2,116],75:[2,116],78:[2,116],82:[2,116],87:[2,116],88:[2,116],89:[2,116],95:[2,116],99:[2,116],100:[2,116],103:[2,116],105:[2,116],107:[2,116],109:[2,116],118:[2,116],124:[2,116],126:[2,116],127:[2,116],128:[2,116],129:[2,116],130:[2,116]},{12:[2,117],28:[2,117],30:[2,117],31:[2,117],33:[2,117],34:[2,117],35:[2,117],36:[2,117],37:[2,117],38:[2,117],45:[2,117],46:[2,117],47:[2,117],51:[2,117],52:[2,117],72:[2,117],75:[2,117],78:[2,117],82:[2,117],87:[2,117],88:[2,117],89:[2,117],95:[2,117],99:[2,117],100:[2,117],103:[2,117],105:[2,117],107:[2,117],109:[2,117],118:[2,117],124:[2,117],126:[2,117],127:[2,117],128:[2,117],129:[2,117],130:[2,117]},{1:[2,86],6:[2,86],25:[2,86],26:[2,86],40:[2,86],49:[2,86],54:[2,86],57:[2,86],66:[2,86],67:[2,86],68:[2,86],70:[2,86],72:[2,86],73:[2,86],77:[2,86],79:[2,86],83:[2,86],84:[2,86],85:[2,86],90:[2,86],92:[2,86],101:[2,86],103:[2,86],104:[2,86],105:[2,86],109:[2,86],117:[2,86],125:[2,86],127:[2,86],128:[2,86],129:[2,86],130:[2,86],131:[2,86],132:[2,86],133:[2,86],134:[2,86],135:[2,86],136:[2,86],137:[2,86]},{1:[2,104],6:[2,104],25:[2,104],26:[2,104],49:[2,104],54:[2,104],57:[2,104],66:[2,104],67:[2,104],68:[2,104],70:[2,104],72:[2,104],73:[2,104],77:[2,104],83:[2,104],84:[2,104],85:[2,104],90:[2,104],92:[2,104],101:[2,104],103:[2,104],104:[2,104],105:[2,104],109:[2,104],117:[2,104],125:[2,104],127:[2,104],128:[2,104],131:[2,104],132:[2,104],133:[2,104],134:[2,104],135:[2,104],136:[2,104]},{1:[2,36],6:[2,36],25:[2,36],26:[2,36],49:[2,36],54:[2,36],57:[2,36],72:[2,36],77:[2,36],85:[2,36],90:[2,36],92:[2,36],101:[2,36],102:87,103:[2,36],104:[2,36],105:[2,36],108:88,109:[2,36],110:69,117:[2,36],125:[2,36],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{8:241,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:242,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,109],6:[2,109],25:[2,109],26:[2,109],49:[2,109],54:[2,109],57:[2,109],66:[2,109],67:[2,109],68:[2,109],70:[2,109],72:[2,109],73:[2,109],77:[2,109],83:[2,109],84:[2,109],85:[2,109],90:[2,109],92:[2,109],101:[2,109],103:[2,109],104:[2,109],105:[2,109],109:[2,109],117:[2,109],125:[2,109],127:[2,109],128:[2,109],131:[2,109],132:[2,109],133:[2,109],134:[2,109],135:[2,109],136:[2,109]},{6:[2,53],25:[2,53],53:243,54:[1,226],85:[2,53]},{6:[2,128],25:[2,128],26:[2,128],54:[2,128],57:[1,244],85:[2,128],90:[2,128],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{50:245,51:[1,60],52:[1,61]},{6:[2,54],25:[2,54],26:[2,54],27:109,28:[1,73],44:110,55:246,56:108,58:111,59:112,75:[1,70],88:[1,113],89:[1,114]},{6:[1,247],25:[1,248]},{6:[2,61],25:[2,61],26:[2,61],49:[2,61],54:[2,61]},{8:249,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,199],6:[2,199],25:[2,199],26:[2,199],49:[2,199],54:[2,199],57:[2,199],72:[2,199],77:[2,199],85:[2,199],90:[2,199],92:[2,199],101:[2,199],102:87,103:[2,199],104:[2,199],105:[2,199],108:88,109:[2,199],110:69,117:[2,199],125:[2,199],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{8:250,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,201],6:[2,201],25:[2,201],26:[2,201],49:[2,201],54:[2,201],57:[2,201],72:[2,201],77:[2,201],85:[2,201],90:[2,201],92:[2,201],101:[2,201],102:87,103:[2,201],104:[2,201],105:[2,201],108:88,109:[2,201],110:69,117:[2,201],125:[2,201],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,181],6:[2,181],25:[2,181],26:[2,181],49:[2,181],54:[2,181],57:[2,181],72:[2,181],77:[2,181],85:[2,181],90:[2,181],92:[2,181],101:[2,181],103:[2,181],104:[2,181],105:[2,181],109:[2,181],117:[2,181],125:[2,181],127:[2,181],128:[2,181],131:[2,181],132:[2,181],133:[2,181],134:[2,181],135:[2,181],136:[2,181]},{8:251,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,133],6:[2,133],25:[2,133],26:[2,133],49:[2,133],54:[2,133],57:[2,133],72:[2,133],77:[2,133],85:[2,133],90:[2,133],92:[2,133],97:[1,252],101:[2,133],103:[2,133],104:[2,133],105:[2,133],109:[2,133],117:[2,133],125:[2,133],127:[2,133],128:[2,133],131:[2,133],132:[2,133],133:[2,133],134:[2,133],135:[2,133],136:[2,133]},{5:253,25:[1,5]},{27:254,28:[1,73]},{119:255,121:216,122:[1,217]},{26:[1,256],120:[1,257],121:258,122:[1,217]},{26:[2,174],120:[2,174],122:[2,174]},{8:260,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],94:259,95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,97],5:261,6:[2,97],25:[1,5],26:[2,97],49:[2,97],54:[2,97],57:[2,97],72:[2,97],77:[2,97],85:[2,97],90:[2,97],92:[2,97],101:[2,97],102:87,103:[1,65],104:[2,97],105:[1,66],108:88,109:[1,68],110:69,117:[2,97],125:[2,97],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,100],6:[2,100],25:[2,100],26:[2,100],49:[2,100],54:[2,100],57:[2,100],72:[2,100],77:[2,100],85:[2,100],90:[2,100],92:[2,100],101:[2,100],103:[2,100],104:[2,100],105:[2,100],109:[2,100],117:[2,100],125:[2,100],127:[2,100],128:[2,100],131:[2,100],132:[2,100],133:[2,100],134:[2,100],135:[2,100],136:[2,100]},{8:262,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,138],6:[2,138],25:[2,138],26:[2,138],49:[2,138],54:[2,138],57:[2,138],66:[2,138],67:[2,138],68:[2,138],70:[2,138],72:[2,138],73:[2,138],77:[2,138],83:[2,138],84:[2,138],85:[2,138],90:[2,138],92:[2,138],101:[2,138],103:[2,138],104:[2,138],105:[2,138],109:[2,138],117:[2,138],125:[2,138],127:[2,138],128:[2,138],131:[2,138],132:[2,138],133:[2,138],134:[2,138],135:[2,138],136:[2,138]},{6:[1,74],26:[1,263]},{8:264,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{6:[2,67],12:[2,117],25:[2,67],28:[2,117],30:[2,117],31:[2,117],33:[2,117],34:[2,117],35:[2,117],36:[2,117],37:[2,117],38:[2,117],45:[2,117],46:[2,117],47:[2,117],51:[2,117],52:[2,117],54:[2,67],75:[2,117],78:[2,117],82:[2,117],87:[2,117],88:[2,117],89:[2,117],90:[2,67],95:[2,117],99:[2,117],100:[2,117],103:[2,117],105:[2,117],107:[2,117],109:[2,117],118:[2,117],124:[2,117],126:[2,117],127:[2,117],128:[2,117],129:[2,117],130:[2,117]},{6:[1,266],25:[1,267],90:[1,265]},{6:[2,54],8:200,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[2,54],26:[2,54],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:147,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],85:[2,54],87:[1,58],88:[1,59],89:[1,57],90:[2,54],93:268,95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{6:[2,53],25:[2,53],26:[2,53],53:269,54:[1,226]},{1:[2,178],6:[2,178],25:[2,178],26:[2,178],49:[2,178],54:[2,178],57:[2,178],72:[2,178],77:[2,178],85:[2,178],90:[2,178],92:[2,178],101:[2,178],103:[2,178],104:[2,178],105:[2,178],109:[2,178],117:[2,178],120:[2,178],125:[2,178],127:[2,178],128:[2,178],131:[2,178],132:[2,178],133:[2,178],134:[2,178],135:[2,178],136:[2,178]},{8:270,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:271,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{115:[2,156],116:[2,156]},{27:158,28:[1,73],44:159,58:160,59:161,75:[1,70],88:[1,113],89:[1,114],114:272},{1:[2,163],6:[2,163],25:[2,163],26:[2,163],49:[2,163],54:[2,163],57:[2,163],72:[2,163],77:[2,163],85:[2,163],90:[2,163],92:[2,163],101:[2,163],102:87,103:[2,163],104:[1,273],105:[2,163],108:88,109:[2,163],110:69,117:[1,274],125:[2,163],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,164],6:[2,164],25:[2,164],26:[2,164],49:[2,164],54:[2,164],57:[2,164],72:[2,164],77:[2,164],85:[2,164],90:[2,164],92:[2,164],101:[2,164],102:87,103:[2,164],104:[1,275],105:[2,164],108:88,109:[2,164],110:69,117:[2,164],125:[2,164],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{6:[1,277],25:[1,278],77:[1,276]},{6:[2,54],11:168,25:[2,54],26:[2,54],27:169,28:[1,73],29:170,30:[1,71],31:[1,72],41:279,42:167,44:171,46:[1,46],77:[2,54],88:[1,113]},{8:280,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,281],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,85],6:[2,85],25:[2,85],26:[2,85],40:[2,85],49:[2,85],54:[2,85],57:[2,85],66:[2,85],67:[2,85],68:[2,85],70:[2,85],72:[2,85],73:[2,85],77:[2,85],79:[2,85],83:[2,85],84:[2,85],85:[2,85],90:[2,85],92:[2,85],101:[2,85],103:[2,85],104:[2,85],105:[2,85],109:[2,85],117:[2,85],125:[2,85],127:[2,85],128:[2,85],129:[2,85],130:[2,85],131:[2,85],132:[2,85],133:[2,85],134:[2,85],135:[2,85],136:[2,85],137:[2,85]},{8:282,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,72:[2,120],75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{72:[2,121],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,37],6:[2,37],25:[2,37],26:[2,37],49:[2,37],54:[2,37],57:[2,37],72:[2,37],77:[2,37],85:[2,37],90:[2,37],92:[2,37],101:[2,37],102:87,103:[2,37],104:[2,37],105:[2,37],108:88,109:[2,37],110:69,117:[2,37],125:[2,37],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{26:[1,283],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{6:[1,266],25:[1,267],85:[1,284]},{6:[2,67],25:[2,67],26:[2,67],54:[2,67],85:[2,67],90:[2,67]},{5:285,25:[1,5]},{6:[2,57],25:[2,57],26:[2,57],49:[2,57],54:[2,57]},{27:109,28:[1,73],44:110,55:286,56:108,58:111,59:112,75:[1,70],88:[1,113],89:[1,114]},{6:[2,55],25:[2,55],26:[2,55],27:109,28:[1,73],44:110,48:287,54:[2,55],55:107,56:108,58:111,59:112,75:[1,70],88:[1,113],89:[1,114]},{6:[2,62],25:[2,62],26:[2,62],49:[2,62],54:[2,62],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{26:[1,288],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{5:289,25:[1,5],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{5:290,25:[1,5]},{1:[2,134],6:[2,134],25:[2,134],26:[2,134],49:[2,134],54:[2,134],57:[2,134],72:[2,134],77:[2,134],85:[2,134],90:[2,134],92:[2,134],101:[2,134],103:[2,134],104:[2,134],105:[2,134],109:[2,134],117:[2,134],125:[2,134],127:[2,134],128:[2,134],131:[2,134],132:[2,134],133:[2,134],134:[2,134],135:[2,134],136:[2,134]},{5:291,25:[1,5]},{26:[1,292],120:[1,293],121:258,122:[1,217]},{1:[2,172],6:[2,172],25:[2,172],26:[2,172],49:[2,172],54:[2,172],57:[2,172],72:[2,172],77:[2,172],85:[2,172],90:[2,172],92:[2,172],101:[2,172],103:[2,172],104:[2,172],105:[2,172],109:[2,172],117:[2,172],125:[2,172],127:[2,172],128:[2,172],131:[2,172],132:[2,172],133:[2,172],134:[2,172],135:[2,172],136:[2,172]},{5:294,25:[1,5]},{26:[2,175],120:[2,175],122:[2,175]},{5:295,25:[1,5],54:[1,296]},{25:[2,130],54:[2,130],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,98],6:[2,98],25:[2,98],26:[2,98],49:[2,98],54:[2,98],57:[2,98],72:[2,98],77:[2,98],85:[2,98],90:[2,98],92:[2,98],101:[2,98],103:[2,98],104:[2,98],105:[2,98],109:[2,98],117:[2,98],125:[2,98],127:[2,98],128:[2,98],131:[2,98],132:[2,98],133:[2,98],134:[2,98],135:[2,98],136:[2,98]},{1:[2,101],5:297,6:[2,101],25:[1,5],26:[2,101],49:[2,101],54:[2,101],57:[2,101],72:[2,101],77:[2,101],85:[2,101],90:[2,101],92:[2,101],101:[2,101],102:87,103:[1,65],104:[2,101],105:[1,66],108:88,109:[1,68],110:69,117:[2,101],125:[2,101],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{101:[1,298]},{90:[1,299],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,115],6:[2,115],25:[2,115],26:[2,115],40:[2,115],49:[2,115],54:[2,115],57:[2,115],66:[2,115],67:[2,115],68:[2,115],70:[2,115],72:[2,115],73:[2,115],77:[2,115],83:[2,115],84:[2,115],85:[2,115],90:[2,115],92:[2,115],101:[2,115],103:[2,115],104:[2,115],105:[2,115],109:[2,115],115:[2,115],116:[2,115],117:[2,115],125:[2,115],127:[2,115],128:[2,115],131:[2,115],132:[2,115],133:[2,115],134:[2,115],135:[2,115],136:[2,115]},{8:200,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:147,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],93:300,95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:200,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,25:[1,146],27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,60:147,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],86:301,87:[1,58],88:[1,59],89:[1,57],93:145,95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{6:[2,124],25:[2,124],26:[2,124],54:[2,124],85:[2,124],90:[2,124]},{6:[1,266],25:[1,267],26:[1,302]},{1:[2,141],6:[2,141],25:[2,141],26:[2,141],49:[2,141],54:[2,141],57:[2,141],72:[2,141],77:[2,141],85:[2,141],90:[2,141],92:[2,141],101:[2,141],102:87,103:[1,65],104:[2,141],105:[1,66],108:88,109:[1,68],110:69,117:[2,141],125:[2,141],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,143],6:[2,143],25:[2,143],26:[2,143],49:[2,143],54:[2,143],57:[2,143],72:[2,143],77:[2,143],85:[2,143],90:[2,143],92:[2,143],101:[2,143],102:87,103:[1,65],104:[2,143],105:[1,66],108:88,109:[1,68],110:69,117:[2,143],125:[2,143],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{115:[2,162],116:[2,162]},{8:303,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:304,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:305,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,89],6:[2,89],25:[2,89],26:[2,89],40:[2,89],49:[2,89],54:[2,89],57:[2,89],66:[2,89],67:[2,89],68:[2,89],70:[2,89],72:[2,89],73:[2,89],77:[2,89],83:[2,89],84:[2,89],85:[2,89],90:[2,89],92:[2,89],101:[2,89],103:[2,89],104:[2,89],105:[2,89],109:[2,89],115:[2,89],116:[2,89],117:[2,89],125:[2,89],127:[2,89],128:[2,89],131:[2,89],132:[2,89],133:[2,89],134:[2,89],135:[2,89],136:[2,89]},{11:168,27:169,28:[1,73],29:170,30:[1,71],31:[1,72],41:306,42:167,44:171,46:[1,46],88:[1,113]},{6:[2,90],11:168,25:[2,90],26:[2,90],27:169,28:[1,73],29:170,30:[1,71],31:[1,72],41:166,42:167,44:171,46:[1,46],54:[2,90],76:307,88:[1,113]},{6:[2,92],25:[2,92],26:[2,92],54:[2,92],77:[2,92]},{6:[2,40],25:[2,40],26:[2,40],54:[2,40],77:[2,40],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{8:308,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{72:[2,119],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,38],6:[2,38],25:[2,38],26:[2,38],49:[2,38],54:[2,38],57:[2,38],72:[2,38],77:[2,38],85:[2,38],90:[2,38],92:[2,38],101:[2,38],103:[2,38],104:[2,38],105:[2,38],109:[2,38],117:[2,38],125:[2,38],127:[2,38],128:[2,38],131:[2,38],132:[2,38],133:[2,38],134:[2,38],135:[2,38],136:[2,38]},{1:[2,110],6:[2,110],25:[2,110],26:[2,110],49:[2,110],54:[2,110],57:[2,110],66:[2,110],67:[2,110],68:[2,110],70:[2,110],72:[2,110],73:[2,110],77:[2,110],83:[2,110],84:[2,110],85:[2,110],90:[2,110],92:[2,110],101:[2,110],103:[2,110],104:[2,110],105:[2,110],109:[2,110],117:[2,110],125:[2,110],127:[2,110],128:[2,110],131:[2,110],132:[2,110],133:[2,110],134:[2,110],135:[2,110],136:[2,110]},{1:[2,49],6:[2,49],25:[2,49],26:[2,49],49:[2,49],54:[2,49],57:[2,49],72:[2,49],77:[2,49],85:[2,49],90:[2,49],92:[2,49],101:[2,49],103:[2,49],104:[2,49],105:[2,49],109:[2,49],117:[2,49],125:[2,49],127:[2,49],128:[2,49],131:[2,49],132:[2,49],133:[2,49],134:[2,49],135:[2,49],136:[2,49]},{6:[2,58],25:[2,58],26:[2,58],49:[2,58],54:[2,58]},{6:[2,53],25:[2,53],26:[2,53],53:309,54:[1,202]},{1:[2,200],6:[2,200],25:[2,200],26:[2,200],49:[2,200],54:[2,200],57:[2,200],72:[2,200],77:[2,200],85:[2,200],90:[2,200],92:[2,200],101:[2,200],103:[2,200],104:[2,200],105:[2,200],109:[2,200],117:[2,200],125:[2,200],127:[2,200],128:[2,200],131:[2,200],132:[2,200],133:[2,200],134:[2,200],135:[2,200],136:[2,200]},{1:[2,179],6:[2,179],25:[2,179],26:[2,179],49:[2,179],54:[2,179],57:[2,179],72:[2,179],77:[2,179],85:[2,179],90:[2,179],92:[2,179],101:[2,179],103:[2,179],104:[2,179],105:[2,179],109:[2,179],117:[2,179],120:[2,179],125:[2,179],127:[2,179],128:[2,179],131:[2,179],132:[2,179],133:[2,179],134:[2,179],135:[2,179],136:[2,179]},{1:[2,135],6:[2,135],25:[2,135],26:[2,135],49:[2,135],54:[2,135],57:[2,135],72:[2,135],77:[2,135],85:[2,135],90:[2,135],92:[2,135],101:[2,135],103:[2,135],104:[2,135],105:[2,135],109:[2,135],117:[2,135],125:[2,135],127:[2,135],128:[2,135],131:[2,135],132:[2,135],133:[2,135],134:[2,135],135:[2,135],136:[2,135]},{1:[2,136],6:[2,136],25:[2,136],26:[2,136],49:[2,136],54:[2,136],57:[2,136],72:[2,136],77:[2,136],85:[2,136],90:[2,136],92:[2,136],97:[2,136],101:[2,136],103:[2,136],104:[2,136],105:[2,136],109:[2,136],117:[2,136],125:[2,136],127:[2,136],128:[2,136],131:[2,136],132:[2,136],133:[2,136],134:[2,136],135:[2,136],136:[2,136]},{1:[2,170],6:[2,170],25:[2,170],26:[2,170],49:[2,170],54:[2,170],57:[2,170],72:[2,170],77:[2,170],85:[2,170],90:[2,170],92:[2,170],101:[2,170],103:[2,170],104:[2,170],105:[2,170],109:[2,170],117:[2,170],125:[2,170],127:[2,170],128:[2,170],131:[2,170],132:[2,170],133:[2,170],134:[2,170],135:[2,170],136:[2,170]},{5:310,25:[1,5]},{26:[1,311]},{6:[1,312],26:[2,176],120:[2,176],122:[2,176]},{8:313,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{1:[2,102],6:[2,102],25:[2,102],26:[2,102],49:[2,102],54:[2,102],57:[2,102],72:[2,102],77:[2,102],85:[2,102],90:[2,102],92:[2,102],101:[2,102],103:[2,102],104:[2,102],105:[2,102],109:[2,102],117:[2,102],125:[2,102],127:[2,102],128:[2,102],131:[2,102],132:[2,102],133:[2,102],134:[2,102],135:[2,102],136:[2,102]},{1:[2,139],6:[2,139],25:[2,139],26:[2,139],49:[2,139],54:[2,139],57:[2,139],66:[2,139],67:[2,139],68:[2,139],70:[2,139],72:[2,139],73:[2,139],77:[2,139],83:[2,139],84:[2,139],85:[2,139],90:[2,139],92:[2,139],101:[2,139],103:[2,139],104:[2,139],105:[2,139],109:[2,139],117:[2,139],125:[2,139],127:[2,139],128:[2,139],131:[2,139],132:[2,139],133:[2,139],134:[2,139],135:[2,139],136:[2,139]},{1:[2,118],6:[2,118],25:[2,118],26:[2,118],49:[2,118],54:[2,118],57:[2,118],66:[2,118],67:[2,118],68:[2,118],70:[2,118],72:[2,118],73:[2,118],77:[2,118],83:[2,118],84:[2,118],85:[2,118],90:[2,118],92:[2,118],101:[2,118],103:[2,118],104:[2,118],105:[2,118],109:[2,118],117:[2,118],125:[2,118],127:[2,118],128:[2,118],131:[2,118],132:[2,118],133:[2,118],134:[2,118],135:[2,118],136:[2,118]},{6:[2,125],25:[2,125],26:[2,125],54:[2,125],85:[2,125],90:[2,125]},{6:[2,53],25:[2,53],26:[2,53],53:314,54:[1,226]},{6:[2,126],25:[2,126],26:[2,126],54:[2,126],85:[2,126],90:[2,126]},{1:[2,165],6:[2,165],25:[2,165],26:[2,165],49:[2,165],54:[2,165],57:[2,165],72:[2,165],77:[2,165],85:[2,165],90:[2,165],92:[2,165],101:[2,165],102:87,103:[2,165],104:[2,165],105:[2,165],108:88,109:[2,165],110:69,117:[1,315],125:[2,165],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,167],6:[2,167],25:[2,167],26:[2,167],49:[2,167],54:[2,167],57:[2,167],72:[2,167],77:[2,167],85:[2,167],90:[2,167],92:[2,167],101:[2,167],102:87,103:[2,167],104:[1,316],105:[2,167],108:88,109:[2,167],110:69,117:[2,167],125:[2,167],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,166],6:[2,166],25:[2,166],26:[2,166],49:[2,166],54:[2,166],57:[2,166],72:[2,166],77:[2,166],85:[2,166],90:[2,166],92:[2,166],101:[2,166],102:87,103:[2,166],104:[2,166],105:[2,166],108:88,109:[2,166],110:69,117:[2,166],125:[2,166],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{6:[2,93],25:[2,93],26:[2,93],54:[2,93],77:[2,93]},{6:[2,53],25:[2,53],26:[2,53],53:317,54:[1,236]},{26:[1,318],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{6:[1,247],25:[1,248],26:[1,319]},{26:[1,320]},{1:[2,173],6:[2,173],25:[2,173],26:[2,173],49:[2,173],54:[2,173],57:[2,173],72:[2,173],77:[2,173],85:[2,173],90:[2,173],92:[2,173],101:[2,173],103:[2,173],104:[2,173],105:[2,173],109:[2,173],117:[2,173],125:[2,173],127:[2,173],128:[2,173],131:[2,173],132:[2,173],133:[2,173],134:[2,173],135:[2,173],136:[2,173]},{26:[2,177],120:[2,177],122:[2,177]},{25:[2,131],54:[2,131],102:87,103:[1,65],105:[1,66],108:88,109:[1,68],110:69,125:[1,86],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{6:[1,266],25:[1,267],26:[1,321]},{8:322,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{8:323,9:117,10:20,11:21,12:[1,22],13:8,14:9,15:10,16:11,17:12,18:13,19:14,20:15,21:16,22:17,23:18,24:19,27:62,28:[1,73],29:49,30:[1,71],31:[1,72],32:24,33:[1,50],34:[1,51],35:[1,52],36:[1,53],37:[1,54],38:[1,55],39:23,44:63,45:[1,45],46:[1,46],47:[1,29],50:30,51:[1,60],52:[1,61],58:47,59:48,61:36,63:25,64:26,65:27,75:[1,70],78:[1,43],82:[1,28],87:[1,58],88:[1,59],89:[1,57],95:[1,38],99:[1,44],100:[1,56],102:39,103:[1,65],105:[1,66],106:40,107:[1,67],108:41,109:[1,68],110:69,118:[1,42],123:37,124:[1,64],126:[1,31],127:[1,32],128:[1,33],129:[1,34],130:[1,35]},{6:[1,277],25:[1,278],26:[1,324]},{6:[2,41],25:[2,41],26:[2,41],54:[2,41],77:[2,41]},{6:[2,59],25:[2,59],26:[2,59],49:[2,59],54:[2,59]},{1:[2,171],6:[2,171],25:[2,171],26:[2,171],49:[2,171],54:[2,171],57:[2,171],72:[2,171],77:[2,171],85:[2,171],90:[2,171],92:[2,171],101:[2,171],103:[2,171],104:[2,171],105:[2,171],109:[2,171],117:[2,171],125:[2,171],127:[2,171],128:[2,171],131:[2,171],132:[2,171],133:[2,171],134:[2,171],135:[2,171],136:[2,171]},{6:[2,127],25:[2,127],26:[2,127],54:[2,127],85:[2,127],90:[2,127]},{1:[2,168],6:[2,168],25:[2,168],26:[2,168],49:[2,168],54:[2,168],57:[2,168],72:[2,168],77:[2,168],85:[2,168],90:[2,168],92:[2,168],101:[2,168],102:87,103:[2,168],104:[2,168],105:[2,168],108:88,109:[2,168],110:69,117:[2,168],125:[2,168],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{1:[2,169],6:[2,169],25:[2,169],26:[2,169],49:[2,169],54:[2,169],57:[2,169],72:[2,169],77:[2,169],85:[2,169],90:[2,169],92:[2,169],101:[2,169],102:87,103:[2,169],104:[2,169],105:[2,169],108:88,109:[2,169],110:69,117:[2,169],125:[2,169],127:[1,80],128:[1,79],131:[1,78],132:[1,81],133:[1,82],134:[1,83],135:[1,84],136:[1,85]},{6:[2,94],25:[2,94],26:[2,94],54:[2,94],77:[2,94]}],defaultActions:{60:[2,51],61:[2,52],75:[2,3],94:[2,108],189:[2,88]},parseError:function(b,c){throw new Error(b)},parse:function(b){function o(a){d.length=d.length-2*a,e.length=e.length-a,f.length=f.length-a}function p(){var a;return a=c.lexer.lex()||1,typeof a!="number"&&(a=c.symbols_[a]||a),a}var c=this,d=[0],e=[null],f=[],g=this.table,h="",i=0,j=0,k=0,l=2,m=1;this.lexer.setInput(b),this.lexer.yy=this.yy,this.yy.lexer=this.lexer,typeof this.lexer.yylloc=="undefined"&&(this.lexer.yylloc={});var n=this.lexer.yylloc;f.push(n),typeof this.yy.parseError=="function"&&(this.parseError=this.yy.parseError);var q,r,s,t,u,v,w={},x,y,z,A;for(;;){s=d[d.length-1],this.defaultActions[s]?t=this.defaultActions[s]:(q==null&&(q=p()),t=g[s]&&g[s][q]);if(typeof t=="undefined"||!t.length||!t[0]){if(!k){A=[];for(x in g[s])this.terminals_[x]&&x>2&&A.push("'"+this.terminals_[x]+"'");var B="";this.lexer.showPosition?B="Parse error on line "+(i+1)+":\n"+this.lexer.showPosition()+"\nExpecting "+A.join(", ")+", got '"+this.terminals_[q]+"'":B="Parse error on line "+(i+1)+": Unexpected "+(q==1?"end of input":"'"+(this.terminals_[q]||q)+"'"),this.parseError(B,{text:this.lexer.match,token:this.terminals_[q]||q,line:this.lexer.yylineno,loc:n,expected:A})}if(k==3){if(q==m)throw new Error(B||"Parsing halted.");j=this.lexer.yyleng,h=this.lexer.yytext,i=this.lexer.yylineno,n=this.lexer.yylloc,q=p()}for(;;){if(l.toString()in g[s])break;if(s==0)throw new Error(B||"Parsing halted.");o(1),s=d[d.length-1]}r=q,q=l,s=d[d.length-1],t=g[s]&&g[s][l],k=3}if(t[0]instanceof Array&&t.length>1)throw new Error("Parse Error: multiple actions possible at state: "+s+", token: "+q);switch(t[0]){case 1:d.push(q),e.push(this.lexer.yytext),f.push(this.lexer.yylloc),d.push(t[1]),q=null,r?(q=r,r=null):(j=this.lexer.yyleng,h=this.lexer.yytext,i=this.lexer.yylineno,n=this.lexer.yylloc,k>0&&k--);break;case 2:y=this.productions_[t[1]][1],w.$=e[e.length-y],w._$={first_line:f[f.length-(y||1)].first_line,last_line:f[f.length-1].last_line,first_column:f[f.length-(y||1)].first_column,last_column:f[f.length-1].last_column},v=this.performAction.call(w,h,j,i,this.yy,t[1],e,f);if(typeof v!="undefined")return v;y&&(d=d.slice(0,-1*y*2),e=e.slice(0,-1*y),f=f.slice(0,-1*y)),d.push(this.productions_[t[1]][0]),e.push(w.$),f.push(w._$),z=g[d[d.length-2]][d[d.length-1]],d.push(z);break;case 3:return!0}}return!0}};return undefined,a}();typeof require!="undefined"&&typeof a!="undefined"&&(a.parser=b,a.parse=function(){return b.parse.apply(b,arguments)},a.main=function(c){if(!c[1])throw new Error("Usage: "+c[0]+" FILE");if(typeof process!="undefined")var d=require("fs").readFileSync(require("path").join(process.cwd(),c[1]),"utf8");else var e=require("file").path(require("file").cwd()),d=e.join(c[1]).read({charset:"utf-8"});return a.parser.parse(d)},typeof module!="undefined"&&require.main===module&&a.main(typeof process!="undefined"?process.argv.slice(1):require("system").args))},require["./scope"]=new function(){var a=this;((function(){var b,c,d,e;e=require("./helpers"),c=e.extend,d=e.last,a.Scope=b=function(){function a(b,c,d){this.parent=b,this.expressions=c,this.method=d,this.variables=[{name:"arguments",type:"arguments"}],this.positions={},this.parent||(a.root=this)}return a.root=null,a.prototype.add=function(a,b,c){return this.shared&&!c?this.parent.add(a,b,c):Object.prototype.hasOwnProperty.call(this.positions,a)?this.variables[this.positions[a]].type=b:this.positions[a]=this.variables.push({name:a,type:b})-1},a.prototype.namedMethod=function(){return this.method.name||!this.parent?this.method:this.parent.namedMethod()},a.prototype.find=function(a){return this.check(a)?!0:(this.add(a,"var"),!1)},a.prototype.parameter=function(a){if(this.shared&&this.parent.check(a,!0))return;return this.add(a,"param")},a.prototype.check=function(a){var b;return!!(this.type(a)||((b=this.parent)!=null?b.check(a):void 0))},a.prototype.temporary=function(a,b){return a.length>1?"_"+a+(b>1?b-1:""):"_"+(b+parseInt(a,36)).toString(36).replace(/\d/g,"a")},a.prototype.type=function(a){var b,c,d,e;e=this.variables;for(c=0,d=e.length;c1&&a.level>=w?"("+c+")":c)},b.prototype.compileRoot=function(a){var b,c,d,e,f,g;return a.indent=a.bare?"":R,a.scope=new N(null,this,null),a.level=z,this.spaced=!0,e="",a.bare||(f=function(){var a,b,e,f;e=this.expressions,f=[];for(d=a=0,b=e.length;a=u?"(void 0)":"void 0"},b}(e),a.Null=function(a){function b(){return b.__super__.constructor.apply(this,arguments)}return bm(b,a),b.prototype.isAssignable=D,b.prototype.isComplex=D,b.prototype.compileNode=function(){return"null"},b}(e),a.Bool=function(a){function b(a){this.val=a}return bm(b,a),b.prototype.isAssignable=D,b.prototype.isComplex=D,b.prototype.compileNode=function(){return this.val},b}(e),a.Return=K=function(a){function b(a){a&&!a.unwrap().isUndefined&&(this.expression=a)}return bm(b,a),b.prototype.children=["expression"],b.prototype.isStatement=Y,b.prototype.makeReturn=S,b.prototype.jumps=S,b.prototype.compile=function(a,c){var d,e;return d=(e=this.expression)!=null?e.makeReturn():void 0,!d||d instanceof b?b.__super__.compile.call(this,a,c):d.compile(a,c)},b.prototype.compileNode=function(a){return this.tab+("return"+[this.expression?" "+this.expression.compile(a,y):void 0]+";")},b}(e),a.Value=W=function(a){function b(a,c,d){return!c&&a instanceof b?a:(this.base=a,this.properties=c||[],d&&(this[d]=!0),this)}return bm(b,a),b.prototype.children=["base","properties"],b.prototype.add=function(a){return this.properties=this.properties.concat(a),this},b.prototype.hasProperties=function(){return!!this.properties.length},b.prototype.isArray=function(){return!this.properties.length&&this.base instanceof c},b.prototype.isComplex=function(){return this.hasProperties()||this.base.isComplex()},b.prototype.isAssignable=function(){return this.hasProperties()||this.base.isAssignable()},b.prototype.isSimpleNumber=function(){return this.base instanceof A&&L.test(this.base.value)},b.prototype.isString=function(){return this.base instanceof A&&q.test(this.base.value)},b.prototype.isAtomic=function(){var a,b,c,d;d=this.properties.concat(this.base);for(b=0,c=d.length;b"+this.equals],i=n[0],e=n[1],c=this.stepNum?+this.stepNum>0?""+i+" "+this.toVar:""+e+" "+this.toVar:h?(o=[+this.fromNum,+this.toNum],d=o[0],l=o[1],o,d<=l?""+i+" "+l:""+e+" "+l):(b=""+this.fromVar+" <= "+this.toVar,""+b+" ? "+i+" "+this.toVar+" : "+e+" "+this.toVar),k=this.stepVar?""+f+" += "+this.stepVar:h?j?d<=l?"++"+f:"--"+f:d<=l?""+f+"++":""+f+"--":j?""+b+" ? ++"+f+" : --"+f:""+b+" ? "+f+"++ : "+f+"--",j&&(m=""+g+" = "+m),j&&(k=""+g+" = "+k),""+m+"; "+c+"; "+k):this.compileArray(a)},b.prototype.compileArray=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p;if(this.fromNum&&this.toNum&&Math.abs(this.fromNum-this.toNum)<=20)return j=function(){p=[];for(var a=n=+this.fromNum,b=+this.toNum;n<=b?a<=b:a>=b;n<=b?a++:a--)p.push(a);return p}.apply(this),this.exclusive&&j.pop(),"["+j.join(", ")+"]";g=this.tab+R,f=a.scope.freeVariable("i"),k=a.scope.freeVariable("results"),i="\n"+g+k+" = [];",this.fromNum&&this.toNum?(a.index=f,c=this.compileNode(a)):(l=""+f+" = "+this.fromC+(this.toC!==this.toVar?", "+this.toC:""),d=""+this.fromVar+" <= "+this.toVar,c="var "+l+"; "+d+" ? "+f+" <"+this.equals+" "+this.toVar+" : "+f+" >"+this.equals+" "+this.toVar+"; "+d+" ? "+f+"++ : "+f+"--"),h="{ "+k+".push("+f+"); }\n"+g+"return "+k+";\n"+a.indent,e=function(a){return a!=null?a.contains(function(a){return a instanceof A&&a.value==="arguments"&&!a.asKey}):void 0};if(e(this.from)||e(this.to))b=", arguments";return"(function() {"+i+"\n"+g+"for ("+c+")"+h+"}).apply(this"+(b!=null?b:"")+")"},b}(e),a.Slice=O=function(a){function b(a){this.range=a,b.__super__.constructor.call(this)}return bm(b,a),b.prototype.children=["range"],b.prototype.compileNode=function(a){var b,c,d,e,f,g;return g=this.range,e=g.to,c=g.from,d=c&&c.compile(a,y)||"0",b=e&&e.compile(a,y),e&&(!!this.range.exclusive||+b!==-1)&&(f=", "+(this.range.exclusive?b:L.test(b)?""+(+b+1):(b=e.compile(a,u),"+"+b+" + 1 || 9e9"))),".slice("+d+(f||"")+")"},b}(e),a.Obj=E=function(a){function b(a,b){this.generated=b!=null?b:!1,this.objects=this.properties=a||[]}return bm(b,a),b.prototype.children=["properties"],b.prototype.compileNode=function(a){var b,c,e,f,g,h,i,j,l,m,n;l=this.properties;if(!l.length)return this.front?"({})":"{}";if(this.generated)for(m=0,n=l.length;m=0?"[\n"+a.indent+b+"\n"+this.tab+"]":"["+b+"]")):"[]"},b.prototype.assigns=function(a){var b,c,d,e;e=this.objects;for(c=0,d=e.length;c=0)throw SyntaxError("variable name may not be "+a);return a&&(a=o.test(a)&&a)},c.prototype.setContext=function(a){return this.body.traverseChildren(!1,function(b){if(b.classBody)return!1;if(b instanceof A&&b.value==="this")return b.value=a;if(b instanceof j){b.klass=a;if(b.bound)return b.context=a}})},c.prototype.addBoundFunctions=function(a){var c,d,e,f,g,h;if(this.boundFuncs.length){g=this.boundFuncs,h=[];for(e=0,f=g.length;e=0);if(e&&this.context!=="object")throw SyntaxError('variable name may not be "'+f+'"')}return bm(c,a),c.prototype.children=["variable","value"],c.prototype.isStatement=function(a){return(a!=null?a.level:void 0)===z&&this.context!=null&&bn.call(this.context,"?")>=0},c.prototype.assigns=function(a){return this[this.context==="object"?"value":"variable"].assigns(a)},c.prototype.unfoldSoak=function(a){return bh(a,this,"variable")},c.prototype.compileNode=function(a){var b,c,d,e,f,g,h,i,k;if(b=this.variable instanceof W){if(this.variable.isArray()||this.variable.isObject())return this.compilePatternMatch(a);if(this.variable.isSplice())return this.compileSplice(a);if((g=this.context)==="||="||g==="&&="||g==="?=")return this.compileConditional(a)}d=this.variable.compile(a,w);if(!this.context){if(!(f=this.variable.unwrapAll()).isAssignable())throw SyntaxError('"'+this.variable.compile(a)+'" cannot be assigned.');if(typeof f.hasProperties=="function"?!f.hasProperties():!void 0)this.param?a.scope.add(d,"var"):a.scope.find(d)}return this.value instanceof j&&(c=B.exec(d))&&(c[1]&&(this.value.klass=c[1]),this.value.name=(h=(i=(k=c[2])!=null?k:c[3])!=null?i:c[4])!=null?h:c[5]),e=this.value.compile(a,w),this.context==="object"?""+d+": "+e:(e=d+(" "+(this.context||"=")+" ")+e,a.level<=w?e:"("+e+")")},c.prototype.compilePatternMatch=function(a){var d,e,f,g,h,i,j,k,l,m,n,p,q,r,s,u,v,y,B,C,D,E,F,G,J,K,L;s=a.level===z,v=this.value,m=this.variable.base.objects;if(!(n=m.length))return f=v.compile(a),a.level>=x?"("+f+")":f;i=this.variable.isObject();if(s&&n===1&&!((l=m[0])instanceof P)){l instanceof c?(D=l,E=D.variable,h=E.base,l=D.value):l.base instanceof H?(F=(new W(l.unwrapAll())).cacheReference(a),l=F[0],h=F[1]):h=i?l["this"]?l.properties[0].name:l:new A(0),d=o.test(h.unwrap().value||0),v=new W(v),v.properties.push(new(d?b:t)(h));if(G=l.unwrap().value,bn.call(I,G)>=0)throw new SyntaxError("assignment to a reserved word: "+l.compile(a)+" = "+v.compile(a));return(new c(l,v,null,{param:this.param})).compile(a,z)}y=v.compile(a,w),e=[],r=!1;if(!o.test(y)||this.variable.assigns(y))e.push(""+(p=a.scope.freeVariable("ref"))+" = "+y),y=p;for(g=B=0,C=m.length;B=0)throw new SyntaxError("assignment to a reserved word: "+l.compile(a)+" = "+u.compile(a));e.push((new c(l,u,null,{param:this.param,subpattern:!0})).compile(a,w))}return!s&&!this.subpattern&&e.push(y),f=e.join(", "),a.level=0&&(a.isExistentialEquals=!0),(new F(this.context.slice(0,-1),b,new c(d,this.value,"="))).compile(a)},c.prototype.compileSplice=function(a){var b,c,d,e,f,g,h,i,j,k,l,m;return k=this.variable.properties.pop().range,d=k.from,h=k.to,c=k.exclusive,g=this.variable.compile(a),l=(d!=null?d.cache(a,x):void 0)||["0","0"],e=l[0],f=l[1],h?(d!=null?d.isSimpleNumber():void 0)&&h.isSimpleNumber()?(h=+h.compile(a)- +f,c||(h+=1)):(h=h.compile(a,u)+" - "+f,c||(h+=" + 1")):h="9e9",m=this.value.cache(a,w),i=m[0],j=m[1],b="[].splice.apply("+g+", ["+e+", "+h+"].concat("+i+")), "+j,a.level>z?"("+b+")":b},c}(e),a.Code=j=function(a){function b(a,b,c){this.params=a||[],this.body=b||new f,this.bound=c==="boundfunc",this.bound&&(this.context="_this")}return bm(b,a),b.prototype.children=["params","body"],b.prototype.isStatement=function(){return!!this.ctor},b.prototype.jumps=D,b.prototype.compileNode=function(a){var b,e,f,g,h,i,j,k,l,m,n,o,p,q,s,t,v,w,x,y,z,B,C,D,E,G,H,I,J,K,L,M,O;a.scope=new N(a.scope,this.body,this),a.scope.shared=$(a,"sharedScope"),a.indent+=R,delete a.bare,delete a.isExistentialEquals,l=[],e=[],H=this.paramNames();for(s=0,x=H.length;s=u?"("+b+")":b},b.prototype.paramNames=function(){var a,b,c,d,e;a=[],e=this.params;for(c=0,d=e.length;c=0)throw SyntaxError('parameter name "'+a+'" is not allowed')}return bm(b,a),b.prototype.children=["name","value"],b.prototype.compile=function(a){return this.name.compile(a,w)},b.prototype.asReference=function(a){var b;return this.reference?this.reference:(b=this.name,b["this"]?(b=b.properties[0].name,b.value.reserved&&(b=new A(a.scope.freeVariable(b.value)))):b.isComplex()&&(b=new A(a.scope.freeVariable("arg"))),b=new W(b),this.splat&&(b=new P(b)),this.reference=b)},b.prototype.isComplex=function(){return this.name.isComplex()},b.prototype.names=function(a){var b,c,e,f,g,h;a==null&&(a=this.name),b=function(a){var b;return b=a.properties[0].name.value,b.reserved?[]:[b]};if(a instanceof A)return[a.value];if(a instanceof W)return b(a);c=[],h=a.objects;for(f=0,g=h.length;f=c.length)return"";if(c.length===1)return g=c[0].compile(a,w),d?g:""+bi("slice")+".call("+g+")";e=c.slice(i);for(h=k=0,l=e.length;k1?b.expressions.unshift(new r((new H(this.guard)).invert(),new A("continue"))):this.guard&&(b=f.wrap([new r(this.guard,b)]))),b="\n"+b.compile(a,z)+"\n"+this.tab),c=e+this.tab+("while ("+this.condition.compile(a,y)+") {"+b+"}"),this.returns&&(c+="\n"+this.tab+"return "+d+";"),c},b}(e),a.Op=F=function(a){function e(a,c,d,e){if(a==="in")return new s(c,d);if(a==="do")return this.generateDo(c);if(a==="new"){if(c instanceof g&&!c["do"]&&!c.isNew)return c.newInstance();if(c instanceof j&&c.bound||c["do"])c=new H(c)}return this.operator=b[a]||a,this.first=c,this.second=d,this.flip=!!e,this}var b,c;return bm(e,a),b={"==":"===","!=":"!==",of:"in"},c={"!==":"===","===":"!=="},e.prototype.children=["first","second"],e.prototype.isSimpleNumber=D,e.prototype.isUnary=function(){return!this.second},e.prototype.isComplex=function(){var a;return!this.isUnary()||(a=this.operator)!=="+"&&a!=="-"||this.first.isComplex()},e.prototype.isChainable=function(){var a;return(a=this.operator)==="<"||a===">"||a===">="||a==="<="||a==="==="||a==="!=="},e.prototype.invert=function(){var a,b,d,f,g;if(this.isChainable()&&this.first.isChainable()){a=!0,b=this;while(b&&b.operator)a&&(a=b.operator in c),b=b.first;if(!a)return(new H(this)).invert();b=this;while(b&&b.operator)b.invert=!b.invert,b.operator=c[b.operator],b=b.first;return this}return(f=c[this.operator])?(this.operator=f,this.first.unwrap()instanceof e&&this.first.invert(),this):this.second?(new H(this)).invert():this.operator==="!"&&(d=this.first.unwrap())instanceof e&&((g=d.operator)==="!"||g==="in"||g==="instanceof")?d:new e("!",this)},e.prototype.unfoldSoak=function(a){var b;return((b=this.operator)==="++"||b==="--"||b==="delete")&&bh(a,this,"first")},e.prototype.generateDo=function(a){var b,c,e,f,h,i,k,l;f=[],c=a instanceof d&&(h=a.value.unwrap())instanceof j?h:a,l=c.params||[];for(i=0,k=l.length;i=0))throw SyntaxError("prefix increment/decrement may not have eval or arguments operand");return this.isUnary()?this.compileUnary(a):c?this.compileChain(a):this.operator==="?"?this.compileExistence(a):(b=this.first.compile(a,x)+" "+this.operator+" "+this.second.compile(a,x),a.level<=x?b:"("+b+")")},e.prototype.compileChain=function(a){var b,c,d,e;return e=this.first.second.cache(a),this.first.second=e[0],d=e[1],c=this.first.compile(a,x),b=""+c+" "+(this.invert?"&&":"||")+" "+d.compile(a)+" "+this.operator+" "+this.second.compile(a,x),"("+b+")"},e.prototype.compileExistence=function(a){var b,c;return this.first.isComplex()?(c=new A(a.scope.freeVariable("ref")),b=new H(new d(c,this.first))):(b=this.first,c=b),(new r(new l(b),c,{type:"if"})).addElse(this.second).compile(a)},e.prototype.compileUnary=function(a){var b,c,d;if(a.level>=u)return(new H(this)).compile(a);c=[b=this.operator],d=b==="+"||b==="-",(b==="new"||b==="typeof"||b==="delete"||d&&this.first instanceof e&&this.first.operator===b)&&c.push(" ");if(d&&this.first instanceof e||b==="new"&&this.first.isStatement(a))this.first=new H(this.first);return c.push(this.first.compile(a,x)),this.flip&&c.reverse(),c.join("")},e.prototype.toString=function(a){return e.__super__.toString.call(this,a,this.constructor.name+" "+this.operator)},e}(e),a.In=s=function(a){function b(a,b){this.object=a,this.array=b}return bm(b,a),b.prototype.children=["object","array"],b.prototype.invert=C,b.prototype.compileNode=function(a){var b,c,d,e,f;if(this.array instanceof W&&this.array.isArray()){f=this.array.base.objects;for(d=0,e=f.length;d= 0"),d===c?b:(b=d+", "+b,a.level=0)throw SyntaxError('catch variable may not be "'+this.error.value+'"');return a.scope.check(this.error.value)||a.scope.add(this.error.value,"param")," catch"+d+"{\n"+this.recovery.compile(a,z)+"\n"+this.tab+"}"}if(!this.ensure&&!this.recovery)return" catch (_error) {}"}.call(this),c=this.ensure?" finally {\n"+this.ensure.compile(a,z)+"\n"+this.tab+"}":"",""+this.tab+"try {\n"+e+"\n"+this.tab+"}"+(b||"")+c},b}(e),a.Throw=T=function(a){function b(a){this.expression=a}return bm(b,a),b.prototype.children=["expression"],b.prototype.isStatement=Y,b.prototype.jumps=D,b.prototype.makeReturn=S,b.prototype.compileNode=function(a){return this.tab+("throw "+this.expression.compile(a)+";")},b}(e),a.Existence=l=function(a){function b(a){this.expression=a}return bm(b,a),b.prototype.children=["expression"],b.prototype.invert=C,b.prototype.compileNode=function(a){var b,c,d,e;return this.expression.front=this.front,d=this.expression.compile(a,x),o.test(d)&&!a.scope.check(d)?(e=this.negated?["===","||"]:["!==","&&"],b=e[0],c=e[1],d="typeof "+d+" "+b+' "undefined" '+c+" "+d+" "+b+" null"):d=""+d+" "+(this.negated?"==":"!=")+" null",a.level<=v?d:"("+d+")"},b}(e),a.Parens=H=function(a){function b(a){this.body=a}return bm(b,a),b.prototype.children=["body"],b.prototype.unwrap=function(){return this.body},b.prototype.isComplex=function(){return this.body.isComplex()},b.prototype.compileNode=function(a){var b,c,d;return d=this.body.unwrap(),d instanceof W&&d.isAtomic()?(d.front=this.front,d.compile(a)):(c=d.compile(a,y),b=a.level1?b.expressions.unshift(new r((new H(this.guard)).invert(),new A("continue"))):this.guard&&(b=f.wrap([new r(this.guard,b)]))),this.pattern&&b.expressions.unshift(new d(this.name,new A(""+F+"["+l+"]"))),c+=this.pluckDirectCall(a,b),s&&(G="\n"+i+s+";"),this.object&&(e=""+l+" in "+F,this.own&&(h="\n"+i+"if (!"+bi("hasProp")+".call("+F+", "+l+")) continue;")),b=b.compile(bd(a,{indent:i}),z),b&&(b="\n"+b+"\n"),""+c+(u||"")+this.tab+"for ("+e+") {"+h+G+b+this.tab+"}"+(v||"")},b.prototype.pluckDirectCall=function(a,b){var c,e,f,h,i,k,l,m,n,o,p,q,r,s,t;e="",o=b.expressions;for(i=m=0,n=o.length;m=v?"("+d+")":d},b.prototype.unfoldSoak=function(){return this.soak&&this},b}(e),i={wrap:function(a,c,d){var e,h,i,k,l;if(a.jumps())return a;i=new j([],f.wrap([a])),e=[];if((k=a.contains(this.literalArgs))||a.contains(this.literalThis))l=new A(k?"apply":"call"),e=[new A("this")],k&&e.push(new A("arguments")),i=new W(i,[new b(l)]);return i.noReturn=d,h=new g(i,e),c?f.wrap([h]):h},literalArgs:function(a){return a instanceof A&&a.value==="arguments"&&!a.asKey},literalThis:function(a){return a instanceof A&&a.value==="this"&&!a.asKey||a instanceof j&&a.bound||a instanceof g&&a.isSuper}},bh=function(a,b,c){var d;if(!(d=b[c].unfoldSoak(a)))return;return b[c]=d.body,d.body=new W(b),d},V={"extends":function(){return"function(child, parent) { for (var key in parent) { if ("+bi("hasProp")+".call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }"},bind:function(){return"function(fn, me){ return function(){ return fn.apply(me, arguments); }; }"},indexOf:function(){return"[].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }"},hasProp:function(){return"{}.hasOwnProperty"},slice:function(){return"[].slice"}},z=1,y=2,w=3,v=4,x=5,u=6,R=" ",p="[$A-Za-z_\\x7f-\\uffff][$\\w\\x7f-\\uffff]*",o=RegExp("^"+p+"$"),L=/^[+-]?\d+$/,B=RegExp("^(?:("+p+")\\.prototype(?:\\.("+p+")|\\[(\"(?:[^\\\\\"\\r\\n]|\\\\.)*\"|'(?:[^\\\\'\\r\\n]|\\\\.)*')\\]|\\[(0x[\\da-fA-F]+|\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\]))|("+p+")$"),q=/^['"]/,bi=function(a){var b;return b="__"+a,N.root.assign(b,V[a]()),b},be=function(a,b){return a=a.replace(/\n/g,"$&"+b),a.replace(/\s+$/,"")}})).call(this)},require["./coffee-script"]=new function(){var a=this;((function(){var b,c,d,e,f,g,h,i,j,k,l={}.hasOwnProperty;e=require("fs"),h=require("path"),k=require("./lexer"),b=k.Lexer,c=k.RESERVED,g=require("./parser").parser,j=require("vm"),i=function(a){return a.charCodeAt(0)===65279?a.substring(1):a},require.extensions&&(require.extensions[".coffee"]=function(a,b){var c;return c=d(i(e.readFileSync(b,"utf8")),{filename:b}),a._compile(c,b)}),a.VERSION="1.4.0",a.RESERVED=c,a.helpers=require("./helpers"),a.compile=d=function(b,c){var d,e,h;c==null&&(c={}),h=a.helpers.merge;try{e=g.parse(f.tokenize(b)).compile(c);if(!c.header)return e}catch(i){throw c.filename&&(i.message="In "+c.filename+", "+i.message),i}return d="Generated by CoffeeScript "+this.VERSION,"// "+d+"\n"+e},a.tokens=function(a,b){return f.tokenize(a,b)},a.nodes=function(a,b){return typeof a=="string"?g.parse(f.tokenize(a,b)):g.parse(a)},a.run=function(a,b){var c;return b==null&&(b={}),c=require.main,c.filename=process.argv[1]=b.filename?e.realpathSync(b.filename):".",c.moduleCache&&(c.moduleCache={}),c.paths=require("module")._nodeModulePaths(h.dirname(e.realpathSync(b.filename))),h.extname(c.filename)!==".coffee"||require.extensions?c._compile(d(a,b),c.filename):c._compile(a,c.filename)},a.eval=function(a,b){var c,e,f,g,i,k,m,n,o,p,q,r,s,t;b==null&&(b={});if(!(a=a.trim()))return;e=j.Script;if(e){if(b.sandbox!=null){if(b.sandbox instanceof e.createContext().constructor)m=b.sandbox;else{m=e.createContext(),r=b.sandbox;for(g in r){if(!l.call(r,g))continue;n=r[g],m[g]=n}}m.global=m.root=m.GLOBAL=m}else m=global;m.__filename=b.filename||"eval",m.__dirname=h.dirname(m.__filename);if(m===global&&!m.module&&!m.require){c=require("module"),m.module=q=new c(b.modulename||"eval"),m.require=t=function(a){return c._load(a,q,!0)},q.filename=m.__filename,s=Object.getOwnPropertyNames(require);for(o=0,p=s.length;o Hello World

Hello World

r.js-2.3.6/tests/node/tests/foo.js000066400000000000000000000000351334071220400167420ustar00rootroot00000000000000define({ name: 'foo' }); r.js-2.3.6/tests/node/tests/server.js000066400000000000000000000007311334071220400174700ustar00rootroot00000000000000//The traditional nodejs http example require(['sys', 'foo', 'http', 'alpha/foo', 'text!alpha/hello.html'], function (sys, foo, http, alphaFoo, helloHtml) { http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.write('Hello ' + foo.name + '\nHello ' + alphaFoo.name + '\n'); res.write(helloHtml) res.end('\n'); }).listen(8000); sys.puts('Server running at http://127.0.0.1:8000/'); }); r.js-2.3.6/tests/relative.js000066400000000000000000000005441334071220400157100ustar00rootroot00000000000000/* Run this file from a directory that is not the directory containing this file to see if the baseUrl of this file is used instead of the current directory. */ require(['alpha', 'beta'], function (alpha, beta) { console.log('alpha === ' + alpha.name); console.log('beta === ' + beta.name); console.log('betaSubName === ' + beta.subName); }); r.js-2.3.6/tests/rhino/000077500000000000000000000000001334071220400146535ustar00rootroot00000000000000r.js-2.3.6/tests/rhino/a.js000066400000000000000000000000321334071220400154240ustar00rootroot00000000000000define({ name: 'a' }); r.js-2.3.6/tests/rhino/build.js000066400000000000000000000003531334071220400163110ustar00rootroot00000000000000var requirejsAsLib = true; load('../../r.js'); requirejs.optimize({ name: 'main', out: 'main-built.js', optimize: 'none' }, function (results) { print(results); }, function (err) { print('GOT ERROR: ' + err); }); r.js-2.3.6/tests/rhino/build.sh000077500000000000000000000001771334071220400163160ustar00rootroot00000000000000set -e java -classpath ../../lib/rhino/js.jar:../../lib/closure/compiler.jar org.mozilla.javascript.tools.shell.Main build.js r.js-2.3.6/tests/rhino/main.js000066400000000000000000000001301334071220400161270ustar00rootroot00000000000000define(['a'], function (a) { return { name: 'main', a: a }; }); r.js-2.3.6/tests/rhino/run.js000066400000000000000000000002621334071220400160150ustar00rootroot00000000000000var requirejsAsLib = true; load('../../r.js'); requirejs(['main'], function (main) { print('main\'s name is: ' + main.name); print('a\'s name is: ' + main.a.name); }); r.js-2.3.6/tests/rhino/run.sh000077500000000000000000000001751334071220400160210ustar00rootroot00000000000000set -e java -classpath ../../lib/rhino/js.jar:../../lib/closure/compiler.jar org.mozilla.javascript.tools.shell.Main run.js r.js-2.3.6/tests/sub/000077500000000000000000000000001334071220400143255ustar00rootroot00000000000000r.js-2.3.6/tests/sub/betaSub.js000066400000000000000000000000451334071220400162470ustar00rootroot00000000000000define({ name: 'betaSubName' }); r.js-2.3.6/tests/xpcshell/000077500000000000000000000000001334071220400153565ustar00rootroot00000000000000r.js-2.3.6/tests/xpcshell/a.js000066400000000000000000000000321334071220400161270ustar00rootroot00000000000000define({ name: 'a' }); r.js-2.3.6/tests/xpcshell/build.js000066400000000000000000000003531334071220400170140ustar00rootroot00000000000000var requirejsAsLib = true; load('../../r.js'); requirejs.optimize({ name: 'main', out: 'main-built.js', optimize: 'none' }, function (results) { print(results); }, function (err) { print('GOT ERROR: ' + err); }); r.js-2.3.6/tests/xpcshell/build.sh000077500000000000000000000000551334071220400170140ustar00rootroot00000000000000set -e ../../env/xpcshell/xpcshell build.js r.js-2.3.6/tests/xpcshell/main.js000066400000000000000000000001301334071220400166320ustar00rootroot00000000000000define(['a'], function (a) { return { name: 'main', a: a }; }); r.js-2.3.6/tests/xpcshell/run.js000066400000000000000000000002621334071220400165200ustar00rootroot00000000000000var requirejsAsLib = true; load('../../r.js'); requirejs(['main'], function (main) { print('main\'s name is: ' + main.name); print('a\'s name is: ' + main.a.name); }); r.js-2.3.6/tests/xpcshell/run.sh000077500000000000000000000000531334071220400165170ustar00rootroot00000000000000set -e ../../env/xpcshell/xpcshell run.js