Merge branch 'pr/5'
This commit is contained in:
commit
a0dc7a7195
.gitignoreREADME.md
config
node_modules
.bin
karma-chrome-launcher
karma-coffee-preprocessor
karma-firefox-launcher
karma-html2js-preprocessor
karma-jasmine
karma-junit-reporter
karma-phantomjs-launcher
LICENSEREADME.mdindex.js
node_modules
.bin
phantomjs
5
.gitignore
vendored
Normal file
5
.gitignore
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
.DS_Store
|
||||
|
||||
# Node.js package manager
|
||||
/node_modules
|
||||
/npm-debug.log
|
@ -57,7 +57,7 @@ The app is based on AngularJS JavaScript framework, written in pure JavaScript (
|
||||
#### Running web-server
|
||||
|
||||
Project repository is based on angularjs-seed and includes a simple web-server, so it's easy to launch the app locally on your desktop.
|
||||
Install [node.js](http://nodejs.org/) and run `scripts/web-server.js`. Open page http://localhost:8000/app/index.html in your browser.
|
||||
Install [node.js](http://nodejs.org/) and run `node server.js`. Open page http://localhost:8000/app/index.html in your browser.
|
||||
|
||||
#### Running as Chrome Packaged App
|
||||
|
||||
@ -82,4 +82,4 @@ Many thanks to all these libraries' authors and contributors. Detailed list with
|
||||
|
||||
### Licensing
|
||||
|
||||
The source code is licensed under GPL v3. License is available [here](/LICENSE).
|
||||
The source code is licensed under GPL v3. License is available [here](/LICENSE).
|
||||
|
@ -1,37 +0,0 @@
|
||||
module.exports = function(config){
|
||||
config.set({
|
||||
|
||||
|
||||
basePath : '../',
|
||||
|
||||
files : [
|
||||
'test/e2e/**/*.js'
|
||||
],
|
||||
|
||||
autoWatch : false,
|
||||
|
||||
browsers : ['Chrome'],
|
||||
|
||||
frameworks: ['ng-scenario'],
|
||||
|
||||
singleRun : true,
|
||||
|
||||
proxies : {
|
||||
'/': 'http://localhost:8000/'
|
||||
},
|
||||
|
||||
plugins : [
|
||||
'karma-junit-reporter',
|
||||
'karma-chrome-launcher',
|
||||
'karma-firefox-launcher',
|
||||
'karma-jasmine',
|
||||
'karma-ng-scenario'
|
||||
],
|
||||
|
||||
junitReporter : {
|
||||
outputFile: 'test_out/e2e.xml',
|
||||
suite: 'e2e'
|
||||
}
|
||||
|
||||
})}
|
||||
|
@ -1,37 +0,0 @@
|
||||
module.exports = function(config){
|
||||
config.set({
|
||||
basePath : '../',
|
||||
|
||||
files : [
|
||||
'app/lib/angular/angular.js',
|
||||
'app/lib/angular/angular-*.js',
|
||||
'test/lib/angular/angular-mocks.js',
|
||||
'app/js/**/*.js',
|
||||
'test/unit/**/*.js'
|
||||
],
|
||||
|
||||
exclude : [
|
||||
'app/lib/angular/angular-loader.js',
|
||||
'app/lib/angular/*.min.js',
|
||||
'app/lib/angular/angular-scenario.js'
|
||||
],
|
||||
|
||||
autoWatch : true,
|
||||
|
||||
frameworks: ['jasmine'],
|
||||
|
||||
browsers : ['Chrome'],
|
||||
|
||||
plugins : [
|
||||
'karma-junit-reporter',
|
||||
'karma-chrome-launcher',
|
||||
'karma-firefox-launcher',
|
||||
'karma-jasmine'
|
||||
],
|
||||
|
||||
junitReporter : {
|
||||
outputFile: 'test_out/unit.xml',
|
||||
suite: 'unit'
|
||||
}
|
||||
|
||||
})}
|
30
node_modules/.bin/karma
generated
vendored
30
node_modules/.bin/karma
generated
vendored
@ -1,30 +0,0 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
var path = require('path');
|
||||
var fs = require('fs');
|
||||
|
||||
// Try to find a local install
|
||||
var dir = path.resolve(process.cwd(), 'node_modules', 'karma', 'lib');
|
||||
|
||||
// Check if the local install exists else we use the install we are in
|
||||
if (!fs.existsSync(dir)) {
|
||||
dir = path.join('..', 'lib');
|
||||
}
|
||||
|
||||
var cli = require(path.join(dir, 'cli'));
|
||||
var config = cli.process();
|
||||
|
||||
switch (config.cmd) {
|
||||
case 'start':
|
||||
require(path.join(dir, 'server')).start(config);
|
||||
break;
|
||||
case 'run':
|
||||
require(path.join(dir, 'runner')).run(config);
|
||||
break;
|
||||
case 'init':
|
||||
require(path.join(dir, 'init')).init(config);
|
||||
break;
|
||||
case 'completion':
|
||||
require(path.join(dir, 'completion')).completion(config);
|
||||
break;
|
||||
}
|
26059
node_modules/.bin/r.js
generated
vendored
26059
node_modules/.bin/r.js
generated
vendored
File diff suppressed because one or more lines are too long
20
node_modules/karma-chrome-launcher/LICENSE
generated
vendored
20
node_modules/karma-chrome-launcher/LICENSE
generated
vendored
@ -1,20 +0,0 @@
|
||||
The MIT License
|
||||
|
||||
Copyright (C) 2011-2013 Google, Inc.
|
||||
|
||||
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.
|
52
node_modules/karma-chrome-launcher/README.md
generated
vendored
52
node_modules/karma-chrome-launcher/README.md
generated
vendored
@ -1,52 +0,0 @@
|
||||
# karma-chrome-launcher
|
||||
|
||||
> Launcher for Google Chrome and Google Chrome Canary.
|
||||
|
||||
## Installation
|
||||
|
||||
**This plugin ships with Karma by default, so you don't need to install it, it should just work ;-)**
|
||||
|
||||
The easiest way is to keep `karma-chrome-launcher` as a devDependency in your `package.json`.
|
||||
```json
|
||||
{
|
||||
"devDependencies": {
|
||||
"karma": "~0.10",
|
||||
"karma-chrome-launcher": "~0.1"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
You can simple do it by:
|
||||
```bash
|
||||
npm install karma-chrome-launcher --save-dev
|
||||
```
|
||||
|
||||
## Configuration
|
||||
```js
|
||||
// karma.conf.js
|
||||
module.exports = function(config) {
|
||||
config.set({
|
||||
browsers: ['Chrome', 'Chrome_without_security'],
|
||||
|
||||
// you can define custom flags
|
||||
customLaunchers: {
|
||||
Chrome_without_security: {
|
||||
base: 'Chrome',
|
||||
flags: ['--disable-web-security']
|
||||
}
|
||||
}
|
||||
});
|
||||
};
|
||||
```
|
||||
|
||||
You can pass list of browsers as a CLI argument too:
|
||||
```bash
|
||||
karma start --browsers Chrome,Chrome_without_security
|
||||
```
|
||||
|
||||
----
|
||||
|
||||
For more information on Karma see the [homepage].
|
||||
|
||||
|
||||
[homepage]: http://karma-runner.github.com
|
83
node_modules/karma-chrome-launcher/index.js
generated
vendored
83
node_modules/karma-chrome-launcher/index.js
generated
vendored
@ -1,83 +0,0 @@
|
||||
var fs = require('fs');
|
||||
|
||||
var ChromeBrowser = function(baseBrowserDecorator, args) {
|
||||
baseBrowserDecorator(this);
|
||||
|
||||
var flags = args.flags || [];
|
||||
|
||||
this._getOptions = function(url) {
|
||||
// Chrome CLI options
|
||||
// http://peter.sh/experiments/chromium-command-line-switches/
|
||||
return [
|
||||
'--user-data-dir=' + this._tempDir,
|
||||
'--no-default-browser-check',
|
||||
'--no-first-run',
|
||||
'--disable-default-apps',
|
||||
'--start-maximized'
|
||||
].concat(flags, [url]);
|
||||
};
|
||||
};
|
||||
|
||||
// Return location of chrome.exe file for a given Chrome directory (available: "Chrome", "Chrome SxS").
|
||||
function getChromeExe(chromeDirName) {
|
||||
if (process.platform !== 'win32') {
|
||||
return null;
|
||||
}
|
||||
var windowsChromeDirectory, i, prefix;
|
||||
var suffix = '\\Google\\'+ chromeDirName + '\\Application\\chrome.exe';
|
||||
var prefixes = [process.env.LOCALAPPDATA, process.env.PROGRAMFILES, process.env['PROGRAMFILES(X86)']];
|
||||
|
||||
for (i = 0; i < prefixes.length; i++) {
|
||||
prefix = prefixes[i];
|
||||
if (fs.existsSync(prefix + suffix)) {
|
||||
windowsChromeDirectory = prefix + suffix;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return windowsChromeDirectory;
|
||||
}
|
||||
|
||||
ChromeBrowser.prototype = {
|
||||
name: 'Chrome',
|
||||
|
||||
DEFAULT_CMD: {
|
||||
linux: 'google-chrome',
|
||||
darwin: '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome',
|
||||
win32: getChromeExe('Chrome')
|
||||
},
|
||||
ENV_CMD: 'CHROME_BIN'
|
||||
};
|
||||
|
||||
ChromeBrowser.$inject = ['baseBrowserDecorator', 'args'];
|
||||
|
||||
|
||||
var ChromeCanaryBrowser = function(baseBrowserDecorator, args) {
|
||||
ChromeBrowser.call(this, baseBrowserDecorator, args);
|
||||
|
||||
var parentOptions = this._getOptions;
|
||||
this._getOptions = function(url) {
|
||||
// disable crankshaft optimizations, as it causes lot of memory leaks (as of Chrome 23.0)
|
||||
return parentOptions.call(this, url).concat(['--js-flags="--nocrankshaft --noopt"']);
|
||||
};
|
||||
};
|
||||
|
||||
ChromeCanaryBrowser.prototype = {
|
||||
name: 'ChromeCanary',
|
||||
|
||||
DEFAULT_CMD: {
|
||||
linux: 'google-chrome-canary',
|
||||
darwin: '/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary',
|
||||
win32: getChromeExe('Chrome SxS')
|
||||
},
|
||||
ENV_CMD: 'CHROME_CANARY_BIN'
|
||||
};
|
||||
|
||||
ChromeCanaryBrowser.$inject = ['baseBrowserDecorator', 'args'];
|
||||
|
||||
|
||||
// PUBLISH DI MODULE
|
||||
module.exports = {
|
||||
'launcher:Chrome': ['type', ChromeBrowser],
|
||||
'launcher:ChromeCanary': ['type', ChromeCanaryBrowser]
|
||||
};
|
55
node_modules/karma-chrome-launcher/package.json
generated
vendored
55
node_modules/karma-chrome-launcher/package.json
generated
vendored
@ -1,55 +0,0 @@
|
||||
{
|
||||
"name": "karma-chrome-launcher",
|
||||
"version": "0.1.1",
|
||||
"description": "A Karma plugin. Launcher for Chrome and Chrome Canary.",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git://github.com/karma-runner/karma-chrome-launcher.git"
|
||||
},
|
||||
"keywords": [
|
||||
"karma-plugin",
|
||||
"karma-launcher",
|
||||
"chrome"
|
||||
],
|
||||
"author": {
|
||||
"name": "Vojta Jina",
|
||||
"email": "vojta.jina@gmail.com"
|
||||
},
|
||||
"dependencies": {},
|
||||
"peerDependencies": {
|
||||
"karma": ">=0.9.3"
|
||||
},
|
||||
"license": "MIT",
|
||||
"devDependencies": {
|
||||
"grunt": "~0.4.1",
|
||||
"grunt-npm": "~0.0.2",
|
||||
"grunt-bump": "~0.0.6",
|
||||
"grunt-auto-release": "~0.0.2"
|
||||
},
|
||||
"contributors": [
|
||||
{
|
||||
"name": "Friedel Ziegelmayer",
|
||||
"email": "friedel.ziegelmayer@gmail.com"
|
||||
},
|
||||
{
|
||||
"name": "Joe Doyle",
|
||||
"email": "valdain@gmail.com"
|
||||
},
|
||||
{
|
||||
"name": "Michał Gołębiowski",
|
||||
"email": "m.goleb@gmail.com"
|
||||
}
|
||||
],
|
||||
"readme": "# karma-chrome-launcher\n\n> Launcher for Google Chrome and Google Chrome Canary.\n\n## Installation\n\n**This plugin ships with Karma by default, so you don't need to install it, it should just work ;-)**\n\nThe easiest way is to keep `karma-chrome-launcher` as a devDependency in your `package.json`.\n```json\n{\n \"devDependencies\": {\n \"karma\": \"~0.10\",\n \"karma-chrome-launcher\": \"~0.1\"\n }\n}\n```\n\nYou can simple do it by:\n```bash\nnpm install karma-chrome-launcher --save-dev\n```\n\n## Configuration\n```js\n// karma.conf.js\nmodule.exports = function(config) {\n config.set({\n browsers: ['Chrome', 'Chrome_without_security'],\n\n // you can define custom flags\n customLaunchers: {\n Chrome_without_security: {\n base: 'Chrome',\n flags: ['--disable-web-security']\n }\n }\n });\n};\n```\n\nYou can pass list of browsers as a CLI argument too:\n```bash\nkarma start --browsers Chrome,Chrome_without_security\n```\n\n----\n\nFor more information on Karma see the [homepage].\n\n\n[homepage]: http://karma-runner.github.com\n",
|
||||
"readmeFilename": "README.md",
|
||||
"bugs": {
|
||||
"url": "https://github.com/karma-runner/karma-chrome-launcher/issues"
|
||||
},
|
||||
"homepage": "https://github.com/karma-runner/karma-chrome-launcher",
|
||||
"_id": "karma-chrome-launcher@0.1.1",
|
||||
"_from": "karma-chrome-launcher@*"
|
||||
}
|
20
node_modules/karma-coffee-preprocessor/LICENSE
generated
vendored
20
node_modules/karma-coffee-preprocessor/LICENSE
generated
vendored
@ -1,20 +0,0 @@
|
||||
The MIT License
|
||||
|
||||
Copyright (C) 2011-2013 Google, Inc.
|
||||
|
||||
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.
|
56
node_modules/karma-coffee-preprocessor/README.md
generated
vendored
56
node_modules/karma-coffee-preprocessor/README.md
generated
vendored
@ -1,56 +0,0 @@
|
||||
# karma-coffee-preprocessor
|
||||
|
||||
> Preprocessor to compile CoffeeScript on the fly.
|
||||
|
||||
## Installation
|
||||
|
||||
**This plugin ships with Karma by default, so you don't need to install it, it should just work ;-)**
|
||||
|
||||
The easiest way is to keep `karma-coffee-preprocessor` as a devDependency in your `package.json`.
|
||||
```json
|
||||
{
|
||||
"devDependencies": {
|
||||
"karma": "~0.10",
|
||||
"karma-coffee-preprocessor": "~0.1"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
You can simple do it by:
|
||||
```bash
|
||||
npm install karma-coffee-preprocessor --save-dev
|
||||
```
|
||||
|
||||
## Configuration
|
||||
Following code shows the default configuration...
|
||||
```js
|
||||
// karma.conf.js
|
||||
module.exports = function(config) {
|
||||
config.set({
|
||||
preprocessors: {
|
||||
'**/*.coffee': ['coffee']
|
||||
},
|
||||
|
||||
coffeePreprocessor: {
|
||||
// options passed to the coffee compiler
|
||||
options: {
|
||||
bare: true,
|
||||
sourceMap: false
|
||||
},
|
||||
// transforming the filenames
|
||||
transformPath: function(path) {
|
||||
return path.replace(/\.js$/, '.coffee');
|
||||
}
|
||||
}
|
||||
});
|
||||
};
|
||||
```
|
||||
|
||||
If you set the `sourceMap` coffee compiler option to `true` then the generated source map will be inlined as a data-uri.
|
||||
|
||||
----
|
||||
|
||||
For more information on Karma see the [homepage].
|
||||
|
||||
|
||||
[homepage]: http://karma-runner.github.com
|
53
node_modules/karma-coffee-preprocessor/index.js
generated
vendored
53
node_modules/karma-coffee-preprocessor/index.js
generated
vendored
@ -1,53 +0,0 @@
|
||||
var coffee = require('coffee-script');
|
||||
var path = require('path');
|
||||
var createCoffeePreprocessor = function(args, config, logger, helper) {
|
||||
config = config || {};
|
||||
|
||||
var log = logger.create('preprocessor.coffee');
|
||||
var defaultOptions = {
|
||||
bare: true,
|
||||
sourceMap: false
|
||||
};
|
||||
var options = helper.merge(defaultOptions, args.options || {}, config.options || {});
|
||||
|
||||
var transformPath = args.transformPath || config.transformPath || function(filepath) {
|
||||
return filepath.replace(/\.coffee$/, '.js');
|
||||
};
|
||||
|
||||
return function(content, file, done) {
|
||||
var result = null;
|
||||
var map;
|
||||
var datauri;
|
||||
|
||||
log.debug('Processing "%s".', file.originalPath);
|
||||
file.path = transformPath(file.originalPath);
|
||||
|
||||
// Clone the options because coffee.compile mutates them
|
||||
var opts = helper._.clone(options)
|
||||
|
||||
try {
|
||||
result = coffee.compile(content, opts);
|
||||
} catch (e) {
|
||||
log.error('%s\n at %s:%d', e.message, file.originalPath, e.location.first_line);
|
||||
return;
|
||||
}
|
||||
|
||||
if (result.v3SourceMap) {
|
||||
map = JSON.parse(result.v3SourceMap)
|
||||
map.sources[0] = path.basename(file.originalPath)
|
||||
map.sourcesContent = [content]
|
||||
map.file = path.basename(file.path)
|
||||
datauri = 'data:application/json;charset=utf-8;base64,' + new Buffer(JSON.stringify(map)).toString('base64')
|
||||
done(result.js + '\n//@ sourceMappingURL=' + datauri + '\n');
|
||||
} else {
|
||||
done(result.js || result)
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
createCoffeePreprocessor.$inject = ['args', 'config.coffeePreprocessor', 'logger', 'helper'];
|
||||
|
||||
// PUBLISH DI MODULE
|
||||
module.exports = {
|
||||
'preprocessor:coffee': ['factory', createCoffeePreprocessor]
|
||||
};
|
7
node_modules/karma-coffee-preprocessor/node_modules/.bin/cake
generated
vendored
7
node_modules/karma-coffee-preprocessor/node_modules/.bin/cake
generated
vendored
@ -1,7 +0,0 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
var path = require('path');
|
||||
var fs = require('fs');
|
||||
var lib = path.join(path.dirname(fs.realpathSync(__filename)), '../lib');
|
||||
|
||||
require(lib + '/coffee-script/cake').run();
|
7
node_modules/karma-coffee-preprocessor/node_modules/.bin/coffee
generated
vendored
7
node_modules/karma-coffee-preprocessor/node_modules/.bin/coffee
generated
vendored
@ -1,7 +0,0 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
var path = require('path');
|
||||
var fs = require('fs');
|
||||
var lib = path.join(path.dirname(fs.realpathSync(__filename)), '../lib');
|
||||
|
||||
require(lib + '/coffee-script/command').run();
|
11
node_modules/karma-coffee-preprocessor/node_modules/coffee-script/.npmignore
generated
vendored
11
node_modules/karma-coffee-preprocessor/node_modules/coffee-script/.npmignore
generated
vendored
@ -1,11 +0,0 @@
|
||||
*.coffee
|
||||
*.html
|
||||
.DS_Store
|
||||
.git*
|
||||
Cakefile
|
||||
documentation/
|
||||
examples/
|
||||
extras/coffee-script.js
|
||||
raw/
|
||||
src/
|
||||
test/
|
1
node_modules/karma-coffee-preprocessor/node_modules/coffee-script/CNAME
generated
vendored
1
node_modules/karma-coffee-preprocessor/node_modules/coffee-script/CNAME
generated
vendored
@ -1 +0,0 @@
|
||||
coffeescript.org
|
9
node_modules/karma-coffee-preprocessor/node_modules/coffee-script/CONTRIBUTING.md
generated
vendored
9
node_modules/karma-coffee-preprocessor/node_modules/coffee-script/CONTRIBUTING.md
generated
vendored
@ -1,9 +0,0 @@
|
||||
## How to contribute to CoffeeScript
|
||||
|
||||
* Before you open a ticket or send a pull request, [search](https://github.com/jashkenas/coffee-script/issues) for previous discussions about the same feature or issue. Add to the earlier ticket if you find one.
|
||||
|
||||
* Before sending a pull request for a feature, be sure to have [tests](https://github.com/jashkenas/coffee-script/tree/master/test).
|
||||
|
||||
* Use the same coding style as the rest of the [codebase](https://github.com/jashkenas/coffee-script/tree/master/src). If you're just getting started with CoffeeScript, there's a nice [style guide](https://github.com/polarmobile/coffeescript-style-guide).
|
||||
|
||||
* In your pull request, do not add documentation to `index.html` or re-build the minified `coffee-script.js` file. We'll do those things before cutting a new release.
|
22
node_modules/karma-coffee-preprocessor/node_modules/coffee-script/LICENSE
generated
vendored
22
node_modules/karma-coffee-preprocessor/node_modules/coffee-script/LICENSE
generated
vendored
@ -1,22 +0,0 @@
|
||||
Copyright (c) 2009-2013 Jeremy Ashkenas
|
||||
|
||||
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.
|
51
node_modules/karma-coffee-preprocessor/node_modules/coffee-script/README
generated
vendored
51
node_modules/karma-coffee-preprocessor/node_modules/coffee-script/README
generated
vendored
@ -1,51 +0,0 @@
|
||||
|
||||
{
|
||||
} } {
|
||||
{ { } }
|
||||
} }{ {
|
||||
{ }{ } } _____ __ __
|
||||
( }{ }{ { ) / ____| / _|/ _|
|
||||
.- { { } { }} -. | | ___ | |_| |_ ___ ___
|
||||
( ( } { } { } } ) | | / _ \| _| _/ _ \/ _ \
|
||||
|`-..________ ..-'| | |___| (_) | | | || __/ __/
|
||||
| | \_____\___/|_| |_| \___|\___|
|
||||
| ;--.
|
||||
| (__ \ _____ _ _
|
||||
| | ) ) / ____| (_) | |
|
||||
| |/ / | (___ ___ _ __ _ _ __ | |_
|
||||
| ( / \___ \ / __| '__| | '_ \| __|
|
||||
| |/ ____) | (__| | | | |_) | |_
|
||||
| | |_____/ \___|_| |_| .__/ \__|
|
||||
`-.._________..-' | |
|
||||
|_|
|
||||
|
||||
|
||||
CoffeeScript is a little language that compiles into JavaScript.
|
||||
|
||||
Install Node.js, and then the CoffeeScript compiler:
|
||||
sudo bin/cake install
|
||||
|
||||
Or, if you have the Node Package Manager installed:
|
||||
npm install -g coffee-script
|
||||
(Leave off the -g if you don't wish to install globally.)
|
||||
|
||||
Execute a script:
|
||||
coffee /path/to/script.coffee
|
||||
|
||||
Compile a script:
|
||||
coffee -c /path/to/script.coffee
|
||||
|
||||
For documentation, usage, and examples, see:
|
||||
http://coffeescript.org/
|
||||
|
||||
To suggest a feature, report a bug, or general discussion:
|
||||
http://github.com/jashkenas/coffee-script/issues/
|
||||
|
||||
If you'd like to chat, drop by #coffeescript on Freenode IRC,
|
||||
or on webchat.freenode.net.
|
||||
|
||||
The source repository:
|
||||
git://github.com/jashkenas/coffee-script.git
|
||||
|
||||
All contributors are listed here:
|
||||
http://github.com/jashkenas/coffee-script/contributors
|
79
node_modules/karma-coffee-preprocessor/node_modules/coffee-script/Rakefile
generated
vendored
79
node_modules/karma-coffee-preprocessor/node_modules/coffee-script/Rakefile
generated
vendored
@ -1,79 +0,0 @@
|
||||
require 'rubygems'
|
||||
require 'erb'
|
||||
require 'fileutils'
|
||||
require 'rake/testtask'
|
||||
require 'json'
|
||||
|
||||
desc "Build the documentation page"
|
||||
task :doc do
|
||||
source = 'documentation/index.html.erb'
|
||||
child = fork { exec "bin/coffee -bcw -o documentation/js documentation/coffee/*.coffee" }
|
||||
at_exit { Process.kill("INT", child) }
|
||||
Signal.trap("INT") { exit }
|
||||
loop do
|
||||
mtime = File.stat(source).mtime
|
||||
if !@mtime || mtime > @mtime
|
||||
rendered = ERB.new(File.read(source)).result(binding)
|
||||
File.open('index.html', 'w+') {|f| f.write(rendered) }
|
||||
end
|
||||
@mtime = mtime
|
||||
sleep 1
|
||||
end
|
||||
end
|
||||
|
||||
desc "Build coffee-script-source gem"
|
||||
task :gem do
|
||||
require 'rubygems'
|
||||
require 'rubygems/package'
|
||||
|
||||
gemspec = Gem::Specification.new do |s|
|
||||
s.name = 'coffee-script-source'
|
||||
s.version = JSON.parse(File.read('package.json'))["version"]
|
||||
s.date = Time.now.strftime("%Y-%m-%d")
|
||||
|
||||
s.homepage = "http://jashkenas.github.com/coffee-script/"
|
||||
s.summary = "The CoffeeScript Compiler"
|
||||
s.description = <<-EOS
|
||||
CoffeeScript is a little language that compiles into JavaScript.
|
||||
Underneath all of those embarrassing braces and semicolons,
|
||||
JavaScript has always had a gorgeous object model at its heart.
|
||||
CoffeeScript is an attempt to expose the good parts of JavaScript
|
||||
in a simple way.
|
||||
EOS
|
||||
|
||||
s.files = [
|
||||
'lib/coffee_script/coffee-script.js',
|
||||
'lib/coffee_script/source.rb'
|
||||
]
|
||||
|
||||
s.authors = ['Jeremy Ashkenas']
|
||||
s.email = 'jashkenas@gmail.com'
|
||||
s.rubyforge_project = 'coffee-script-source'
|
||||
s.license = "MIT"
|
||||
end
|
||||
|
||||
file = File.open("coffee-script-source.gem", "w")
|
||||
Gem::Package.open(file, 'w') do |pkg|
|
||||
pkg.metadata = gemspec.to_yaml
|
||||
|
||||
path = "lib/coffee_script/source.rb"
|
||||
contents = <<-ERUBY
|
||||
module CoffeeScript
|
||||
module Source
|
||||
def self.bundled_path
|
||||
File.expand_path("../coffee-script.js", __FILE__)
|
||||
end
|
||||
end
|
||||
end
|
||||
ERUBY
|
||||
pkg.add_file_simple(path, 0644, contents.size) do |tar_io|
|
||||
tar_io.write(contents)
|
||||
end
|
||||
|
||||
contents = File.read("extras/coffee-script.js")
|
||||
path = "lib/coffee_script/coffee-script.js"
|
||||
pkg.add_file_simple(path, 0644, contents.size) do |tar_io|
|
||||
tar_io.write(contents)
|
||||
end
|
||||
end
|
||||
end
|
7
node_modules/karma-coffee-preprocessor/node_modules/coffee-script/bin/cake
generated
vendored
7
node_modules/karma-coffee-preprocessor/node_modules/coffee-script/bin/cake
generated
vendored
@ -1,7 +0,0 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
var path = require('path');
|
||||
var fs = require('fs');
|
||||
var lib = path.join(path.dirname(fs.realpathSync(__filename)), '../lib');
|
||||
|
||||
require(lib + '/coffee-script/cake').run();
|
7
node_modules/karma-coffee-preprocessor/node_modules/coffee-script/bin/coffee
generated
vendored
7
node_modules/karma-coffee-preprocessor/node_modules/coffee-script/bin/coffee
generated
vendored
@ -1,7 +0,0 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
var path = require('path');
|
||||
var fs = require('fs');
|
||||
var lib = path.join(path.dirname(fs.realpathSync(__filename)), '../lib');
|
||||
|
||||
require(lib + '/coffee-script/command').run();
|
118
node_modules/karma-coffee-preprocessor/node_modules/coffee-script/lib/coffee-script/browser.js
generated
vendored
118
node_modules/karma-coffee-preprocessor/node_modules/coffee-script/lib/coffee-script/browser.js
generated
vendored
@ -1,118 +0,0 @@
|
||||
// Generated by CoffeeScript 1.6.3
|
||||
(function() {
|
||||
var CoffeeScript, compile, runScripts,
|
||||
__indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
|
||||
|
||||
CoffeeScript = require('./coffee-script');
|
||||
|
||||
CoffeeScript.require = require;
|
||||
|
||||
compile = CoffeeScript.compile;
|
||||
|
||||
CoffeeScript["eval"] = function(code, options) {
|
||||
if (options == null) {
|
||||
options = {};
|
||||
}
|
||||
if (options.bare == null) {
|
||||
options.bare = true;
|
||||
}
|
||||
return eval(compile(code, options));
|
||||
};
|
||||
|
||||
CoffeeScript.run = function(code, options) {
|
||||
if (options == null) {
|
||||
options = {};
|
||||
}
|
||||
options.bare = true;
|
||||
options.shiftLine = true;
|
||||
return Function(compile(code, options))();
|
||||
};
|
||||
|
||||
if (typeof window === "undefined" || window === null) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ((typeof btoa !== "undefined" && btoa !== null) && (typeof JSON !== "undefined" && JSON !== null) && (typeof unescape !== "undefined" && unescape !== null) && (typeof encodeURIComponent !== "undefined" && encodeURIComponent !== null)) {
|
||||
compile = function(code, options) {
|
||||
var js, v3SourceMap, _ref;
|
||||
if (options == null) {
|
||||
options = {};
|
||||
}
|
||||
options.sourceMap = true;
|
||||
options.inline = true;
|
||||
_ref = CoffeeScript.compile(code, options), js = _ref.js, v3SourceMap = _ref.v3SourceMap;
|
||||
return "" + js + "\n//@ sourceMappingURL=data:application/json;base64," + (btoa(unescape(encodeURIComponent(v3SourceMap)))) + "\n//@ sourceURL=coffeescript";
|
||||
};
|
||||
}
|
||||
|
||||
CoffeeScript.load = function(url, callback, options) {
|
||||
var xhr;
|
||||
if (options == null) {
|
||||
options = {};
|
||||
}
|
||||
options.sourceFiles = [url];
|
||||
xhr = window.ActiveXObject ? new window.ActiveXObject('Microsoft.XMLHTTP') : new window.XMLHttpRequest();
|
||||
xhr.open('GET', url, true);
|
||||
if ('overrideMimeType' in xhr) {
|
||||
xhr.overrideMimeType('text/plain');
|
||||
}
|
||||
xhr.onreadystatechange = function() {
|
||||
var _ref;
|
||||
if (xhr.readyState === 4) {
|
||||
if ((_ref = xhr.status) === 0 || _ref === 200) {
|
||||
CoffeeScript.run(xhr.responseText, options);
|
||||
} else {
|
||||
throw new Error("Could not load " + url);
|
||||
}
|
||||
if (callback) {
|
||||
return callback();
|
||||
}
|
||||
}
|
||||
};
|
||||
return xhr.send(null);
|
||||
};
|
||||
|
||||
runScripts = function() {
|
||||
var coffees, coffeetypes, execute, index, length, s, scripts;
|
||||
scripts = window.document.getElementsByTagName('script');
|
||||
coffeetypes = ['text/coffeescript', 'text/literate-coffeescript'];
|
||||
coffees = (function() {
|
||||
var _i, _len, _ref, _results;
|
||||
_results = [];
|
||||
for (_i = 0, _len = scripts.length; _i < _len; _i++) {
|
||||
s = scripts[_i];
|
||||
if (_ref = s.type, __indexOf.call(coffeetypes, _ref) >= 0) {
|
||||
_results.push(s);
|
||||
}
|
||||
}
|
||||
return _results;
|
||||
})();
|
||||
index = 0;
|
||||
length = coffees.length;
|
||||
(execute = function() {
|
||||
var mediatype, options, script;
|
||||
script = coffees[index++];
|
||||
mediatype = script != null ? script.type : void 0;
|
||||
if (__indexOf.call(coffeetypes, mediatype) >= 0) {
|
||||
options = {
|
||||
literate: mediatype === 'text/literate-coffeescript'
|
||||
};
|
||||
if (script.src) {
|
||||
return CoffeeScript.load(script.src, execute, options);
|
||||
} else {
|
||||
options.sourceFiles = ['embedded'];
|
||||
CoffeeScript.run(script.innerHTML, options);
|
||||
return execute();
|
||||
}
|
||||
}
|
||||
})();
|
||||
return null;
|
||||
};
|
||||
|
||||
if (window.addEventListener) {
|
||||
window.addEventListener('DOMContentLoaded', runScripts, false);
|
||||
} else {
|
||||
window.attachEvent('onload', runScripts);
|
||||
}
|
||||
|
||||
}).call(this);
|
114
node_modules/karma-coffee-preprocessor/node_modules/coffee-script/lib/coffee-script/cake.js
generated
vendored
114
node_modules/karma-coffee-preprocessor/node_modules/coffee-script/lib/coffee-script/cake.js
generated
vendored
@ -1,114 +0,0 @@
|
||||
// Generated by CoffeeScript 1.6.3
|
||||
(function() {
|
||||
var CoffeeScript, cakefileDirectory, existsSync, fatalError, fs, helpers, missingTask, oparse, options, optparse, path, printTasks, switches, tasks;
|
||||
|
||||
fs = require('fs');
|
||||
|
||||
path = require('path');
|
||||
|
||||
helpers = require('./helpers');
|
||||
|
||||
optparse = require('./optparse');
|
||||
|
||||
CoffeeScript = require('./coffee-script');
|
||||
|
||||
existsSync = fs.existsSync || path.existsSync;
|
||||
|
||||
tasks = {};
|
||||
|
||||
options = {};
|
||||
|
||||
switches = [];
|
||||
|
||||
oparse = null;
|
||||
|
||||
helpers.extend(global, {
|
||||
task: function(name, description, action) {
|
||||
var _ref;
|
||||
if (!action) {
|
||||
_ref = [description, action], action = _ref[0], description = _ref[1];
|
||||
}
|
||||
return tasks[name] = {
|
||||
name: name,
|
||||
description: description,
|
||||
action: action
|
||||
};
|
||||
},
|
||||
option: function(letter, flag, description) {
|
||||
return switches.push([letter, flag, description]);
|
||||
},
|
||||
invoke: function(name) {
|
||||
if (!tasks[name]) {
|
||||
missingTask(name);
|
||||
}
|
||||
return tasks[name].action(options);
|
||||
}
|
||||
});
|
||||
|
||||
exports.run = function() {
|
||||
var arg, args, e, _i, _len, _ref, _results;
|
||||
global.__originalDirname = fs.realpathSync('.');
|
||||
process.chdir(cakefileDirectory(__originalDirname));
|
||||
args = process.argv.slice(2);
|
||||
CoffeeScript.run(fs.readFileSync('Cakefile').toString(), {
|
||||
filename: 'Cakefile'
|
||||
});
|
||||
oparse = new optparse.OptionParser(switches);
|
||||
if (!args.length) {
|
||||
return printTasks();
|
||||
}
|
||||
try {
|
||||
options = oparse.parse(args);
|
||||
} catch (_error) {
|
||||
e = _error;
|
||||
return fatalError("" + e);
|
||||
}
|
||||
_ref = options["arguments"];
|
||||
_results = [];
|
||||
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
||||
arg = _ref[_i];
|
||||
_results.push(invoke(arg));
|
||||
}
|
||||
return _results;
|
||||
};
|
||||
|
||||
printTasks = function() {
|
||||
var cakefilePath, desc, name, relative, spaces, task;
|
||||
relative = path.relative || path.resolve;
|
||||
cakefilePath = path.join(relative(__originalDirname, process.cwd()), 'Cakefile');
|
||||
console.log("" + cakefilePath + " defines the following tasks:\n");
|
||||
for (name in tasks) {
|
||||
task = tasks[name];
|
||||
spaces = 20 - name.length;
|
||||
spaces = spaces > 0 ? Array(spaces + 1).join(' ') : '';
|
||||
desc = task.description ? "# " + task.description : '';
|
||||
console.log("cake " + name + spaces + " " + desc);
|
||||
}
|
||||
if (switches.length) {
|
||||
return console.log(oparse.help());
|
||||
}
|
||||
};
|
||||
|
||||
fatalError = function(message) {
|
||||
console.error(message + '\n');
|
||||
console.log('To see a list of all tasks/options, run "cake"');
|
||||
return process.exit(1);
|
||||
};
|
||||
|
||||
missingTask = function(task) {
|
||||
return fatalError("No such task: " + task);
|
||||
};
|
||||
|
||||
cakefileDirectory = function(dir) {
|
||||
var parent;
|
||||
if (existsSync(path.join(dir, 'Cakefile'))) {
|
||||
return dir;
|
||||
}
|
||||
parent = path.normalize(path.join(dir, '..'));
|
||||
if (parent !== dir) {
|
||||
return cakefileDirectory(parent);
|
||||
}
|
||||
throw new Error("Cakefile not found in " + (process.cwd()));
|
||||
};
|
||||
|
||||
}).call(this);
|
358
node_modules/karma-coffee-preprocessor/node_modules/coffee-script/lib/coffee-script/coffee-script.js
generated
vendored
358
node_modules/karma-coffee-preprocessor/node_modules/coffee-script/lib/coffee-script/coffee-script.js
generated
vendored
@ -1,358 +0,0 @@
|
||||
// Generated by CoffeeScript 1.6.3
|
||||
(function() {
|
||||
var Lexer, Module, SourceMap, child_process, compile, ext, findExtension, fork, formatSourcePosition, fs, helpers, lexer, loadFile, parser, patchStackTrace, patched, path, sourceMaps, vm, _i, _len, _ref,
|
||||
__hasProp = {}.hasOwnProperty;
|
||||
|
||||
fs = require('fs');
|
||||
|
||||
vm = require('vm');
|
||||
|
||||
path = require('path');
|
||||
|
||||
child_process = require('child_process');
|
||||
|
||||
Lexer = require('./lexer').Lexer;
|
||||
|
||||
parser = require('./parser').parser;
|
||||
|
||||
helpers = require('./helpers');
|
||||
|
||||
SourceMap = require('./sourcemap');
|
||||
|
||||
exports.VERSION = '1.6.3';
|
||||
|
||||
exports.helpers = helpers;
|
||||
|
||||
exports.compile = compile = function(code, options) {
|
||||
var answer, currentColumn, currentLine, fragment, fragments, header, js, map, merge, newLines, _i, _len;
|
||||
if (options == null) {
|
||||
options = {};
|
||||
}
|
||||
merge = helpers.merge;
|
||||
if (options.sourceMap) {
|
||||
map = new SourceMap;
|
||||
}
|
||||
fragments = parser.parse(lexer.tokenize(code, options)).compileToFragments(options);
|
||||
currentLine = 0;
|
||||
if (options.header) {
|
||||
currentLine += 1;
|
||||
}
|
||||
if (options.shiftLine) {
|
||||
currentLine += 1;
|
||||
}
|
||||
currentColumn = 0;
|
||||
js = "";
|
||||
for (_i = 0, _len = fragments.length; _i < _len; _i++) {
|
||||
fragment = fragments[_i];
|
||||
if (options.sourceMap) {
|
||||
if (fragment.locationData) {
|
||||
map.add([fragment.locationData.first_line, fragment.locationData.first_column], [currentLine, currentColumn], {
|
||||
noReplace: true
|
||||
});
|
||||
}
|
||||
newLines = helpers.count(fragment.code, "\n");
|
||||
currentLine += newLines;
|
||||
currentColumn = fragment.code.length - (newLines ? fragment.code.lastIndexOf("\n") : 0);
|
||||
}
|
||||
js += fragment.code;
|
||||
}
|
||||
if (options.header) {
|
||||
header = "Generated by CoffeeScript " + this.VERSION;
|
||||
js = "// " + header + "\n" + js;
|
||||
}
|
||||
if (options.sourceMap) {
|
||||
answer = {
|
||||
js: js
|
||||
};
|
||||
answer.sourceMap = map;
|
||||
answer.v3SourceMap = map.generate(options, code);
|
||||
return answer;
|
||||
} else {
|
||||
return js;
|
||||
}
|
||||
};
|
||||
|
||||
exports.tokens = function(code, options) {
|
||||
return lexer.tokenize(code, options);
|
||||
};
|
||||
|
||||
exports.nodes = function(source, options) {
|
||||
if (typeof source === 'string') {
|
||||
return parser.parse(lexer.tokenize(source, options));
|
||||
} else {
|
||||
return parser.parse(source);
|
||||
}
|
||||
};
|
||||
|
||||
exports.run = function(code, options) {
|
||||
var answer, mainModule;
|
||||
if (options == null) {
|
||||
options = {};
|
||||
}
|
||||
mainModule = require.main;
|
||||
if (options.sourceMap == null) {
|
||||
options.sourceMap = true;
|
||||
}
|
||||
mainModule.filename = process.argv[1] = options.filename ? fs.realpathSync(options.filename) : '.';
|
||||
mainModule.moduleCache && (mainModule.moduleCache = {});
|
||||
mainModule.paths = require('module')._nodeModulePaths(path.dirname(fs.realpathSync(options.filename || '.')));
|
||||
if (!helpers.isCoffee(mainModule.filename) || require.extensions) {
|
||||
answer = compile(code, options);
|
||||
patchStackTrace();
|
||||
sourceMaps[mainModule.filename] = answer.sourceMap;
|
||||
return mainModule._compile(answer.js, mainModule.filename);
|
||||
} else {
|
||||
return mainModule._compile(code, mainModule.filename);
|
||||
}
|
||||
};
|
||||
|
||||
exports["eval"] = function(code, options) {
|
||||
var Module, Script, js, k, o, r, sandbox, v, _i, _len, _module, _ref, _ref1, _require;
|
||||
if (options == null) {
|
||||
options = {};
|
||||
}
|
||||
if (!(code = code.trim())) {
|
||||
return;
|
||||
}
|
||||
Script = vm.Script;
|
||||
if (Script) {
|
||||
if (options.sandbox != null) {
|
||||
if (options.sandbox instanceof Script.createContext().constructor) {
|
||||
sandbox = options.sandbox;
|
||||
} else {
|
||||
sandbox = Script.createContext();
|
||||
_ref = options.sandbox;
|
||||
for (k in _ref) {
|
||||
if (!__hasProp.call(_ref, k)) continue;
|
||||
v = _ref[k];
|
||||
sandbox[k] = v;
|
||||
}
|
||||
}
|
||||
sandbox.global = sandbox.root = sandbox.GLOBAL = sandbox;
|
||||
} else {
|
||||
sandbox = global;
|
||||
}
|
||||
sandbox.__filename = options.filename || 'eval';
|
||||
sandbox.__dirname = path.dirname(sandbox.__filename);
|
||||
if (!(sandbox !== global || sandbox.module || sandbox.require)) {
|
||||
Module = require('module');
|
||||
sandbox.module = _module = new Module(options.modulename || 'eval');
|
||||
sandbox.require = _require = function(path) {
|
||||
return Module._load(path, _module, true);
|
||||
};
|
||||
_module.filename = sandbox.__filename;
|
||||
_ref1 = Object.getOwnPropertyNames(require);
|
||||
for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
|
||||
r = _ref1[_i];
|
||||
if (r !== 'paths') {
|
||||
_require[r] = require[r];
|
||||
}
|
||||
}
|
||||
_require.paths = _module.paths = Module._nodeModulePaths(process.cwd());
|
||||
_require.resolve = function(request) {
|
||||
return Module._resolveFilename(request, _module);
|
||||
};
|
||||
}
|
||||
}
|
||||
o = {};
|
||||
for (k in options) {
|
||||
if (!__hasProp.call(options, k)) continue;
|
||||
v = options[k];
|
||||
o[k] = v;
|
||||
}
|
||||
o.bare = true;
|
||||
js = compile(code, o);
|
||||
if (sandbox === global) {
|
||||
return vm.runInThisContext(js);
|
||||
} else {
|
||||
return vm.runInContext(js, sandbox);
|
||||
}
|
||||
};
|
||||
|
||||
loadFile = function(module, filename) {
|
||||
var answer, raw, stripped;
|
||||
raw = fs.readFileSync(filename, 'utf8');
|
||||
stripped = raw.charCodeAt(0) === 0xFEFF ? raw.substring(1) : raw;
|
||||
answer = compile(stripped, {
|
||||
filename: filename,
|
||||
sourceMap: true,
|
||||
literate: helpers.isLiterate(filename)
|
||||
});
|
||||
sourceMaps[filename] = answer.sourceMap;
|
||||
return module._compile(answer.js, filename);
|
||||
};
|
||||
|
||||
if (require.extensions) {
|
||||
_ref = ['.coffee', '.litcoffee', '.coffee.md'];
|
||||
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
||||
ext = _ref[_i];
|
||||
require.extensions[ext] = loadFile;
|
||||
}
|
||||
Module = require('module');
|
||||
findExtension = function(filename) {
|
||||
var curExtension, extensions;
|
||||
extensions = path.basename(filename).split('.');
|
||||
if (extensions[0] === '') {
|
||||
extensions.shift();
|
||||
}
|
||||
while (extensions.shift()) {
|
||||
curExtension = '.' + extensions.join('.');
|
||||
if (Module._extensions[curExtension]) {
|
||||
return curExtension;
|
||||
}
|
||||
}
|
||||
return '.js';
|
||||
};
|
||||
Module.prototype.load = function(filename) {
|
||||
var extension;
|
||||
this.filename = filename;
|
||||
this.paths = Module._nodeModulePaths(path.dirname(filename));
|
||||
extension = findExtension(filename);
|
||||
Module._extensions[extension](this, filename);
|
||||
return this.loaded = true;
|
||||
};
|
||||
}
|
||||
|
||||
if (child_process) {
|
||||
fork = child_process.fork;
|
||||
child_process.fork = function(path, args, options) {
|
||||
var execPath;
|
||||
if (args == null) {
|
||||
args = [];
|
||||
}
|
||||
if (options == null) {
|
||||
options = {};
|
||||
}
|
||||
execPath = helpers.isCoffee(path) ? 'coffee' : null;
|
||||
if (!Array.isArray(args)) {
|
||||
args = [];
|
||||
options = args || {};
|
||||
}
|
||||
options.execPath || (options.execPath = execPath);
|
||||
return fork(path, args, options);
|
||||
};
|
||||
}
|
||||
|
||||
lexer = new Lexer;
|
||||
|
||||
parser.lexer = {
|
||||
lex: function() {
|
||||
var tag, token;
|
||||
token = this.tokens[this.pos++];
|
||||
if (token) {
|
||||
tag = token[0], this.yytext = token[1], this.yylloc = token[2];
|
||||
this.yylineno = this.yylloc.first_line;
|
||||
} else {
|
||||
tag = '';
|
||||
}
|
||||
return tag;
|
||||
},
|
||||
setInput: function(tokens) {
|
||||
this.tokens = tokens;
|
||||
return this.pos = 0;
|
||||
},
|
||||
upcomingInput: function() {
|
||||
return "";
|
||||
}
|
||||
};
|
||||
|
||||
parser.yy = require('./nodes');
|
||||
|
||||
parser.yy.parseError = function(message, _arg) {
|
||||
var token;
|
||||
token = _arg.token;
|
||||
message = "unexpected " + (token === 1 ? 'end of input' : token);
|
||||
return helpers.throwSyntaxError(message, parser.lexer.yylloc);
|
||||
};
|
||||
|
||||
patched = false;
|
||||
|
||||
sourceMaps = {};
|
||||
|
||||
patchStackTrace = function() {
|
||||
var mainModule;
|
||||
if (patched) {
|
||||
return;
|
||||
}
|
||||
patched = true;
|
||||
mainModule = require.main;
|
||||
return Error.prepareStackTrace = function(err, stack) {
|
||||
var frame, frames, getSourceMapping, sourceFiles, _ref1;
|
||||
sourceFiles = {};
|
||||
getSourceMapping = function(filename, line, column) {
|
||||
var answer, sourceMap;
|
||||
sourceMap = sourceMaps[filename];
|
||||
if (sourceMap) {
|
||||
answer = sourceMap.sourceLocation([line - 1, column - 1]);
|
||||
}
|
||||
if (answer) {
|
||||
return [answer[0] + 1, answer[1] + 1];
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
};
|
||||
frames = (function() {
|
||||
var _j, _len1, _results;
|
||||
_results = [];
|
||||
for (_j = 0, _len1 = stack.length; _j < _len1; _j++) {
|
||||
frame = stack[_j];
|
||||
if (frame.getFunction() === exports.run) {
|
||||
break;
|
||||
}
|
||||
_results.push(" at " + (formatSourcePosition(frame, getSourceMapping)));
|
||||
}
|
||||
return _results;
|
||||
})();
|
||||
return "" + err.name + ": " + ((_ref1 = err.message) != null ? _ref1 : '') + "\n" + (frames.join('\n')) + "\n";
|
||||
};
|
||||
};
|
||||
|
||||
formatSourcePosition = function(frame, getSourceMapping) {
|
||||
var as, column, fileLocation, fileName, functionName, isConstructor, isMethodCall, line, methodName, source, tp, typeName;
|
||||
fileName = void 0;
|
||||
fileLocation = '';
|
||||
if (frame.isNative()) {
|
||||
fileLocation = "native";
|
||||
} else {
|
||||
if (frame.isEval()) {
|
||||
fileName = frame.getScriptNameOrSourceURL();
|
||||
if (!fileName) {
|
||||
fileLocation = "" + (frame.getEvalOrigin()) + ", ";
|
||||
}
|
||||
} else {
|
||||
fileName = frame.getFileName();
|
||||
}
|
||||
fileName || (fileName = "<anonymous>");
|
||||
line = frame.getLineNumber();
|
||||
column = frame.getColumnNumber();
|
||||
source = getSourceMapping(fileName, line, column);
|
||||
fileLocation = source ? "" + fileName + ":" + source[0] + ":" + source[1] + ", <js>:" + line + ":" + column : "" + fileName + ":" + line + ":" + column;
|
||||
}
|
||||
functionName = frame.getFunctionName();
|
||||
isConstructor = frame.isConstructor();
|
||||
isMethodCall = !(frame.isToplevel() || isConstructor);
|
||||
if (isMethodCall) {
|
||||
methodName = frame.getMethodName();
|
||||
typeName = frame.getTypeName();
|
||||
if (functionName) {
|
||||
tp = as = '';
|
||||
if (typeName && functionName.indexOf(typeName)) {
|
||||
tp = "" + typeName + ".";
|
||||
}
|
||||
if (methodName && functionName.indexOf("." + methodName) !== functionName.length - methodName.length - 1) {
|
||||
as = " [as " + methodName + "]";
|
||||
}
|
||||
return "" + tp + functionName + as + " (" + fileLocation + ")";
|
||||
} else {
|
||||
return "" + typeName + "." + (methodName || '<anonymous>') + " (" + fileLocation + ")";
|
||||
}
|
||||
} else if (isConstructor) {
|
||||
return "new " + (functionName || '<anonymous>') + " (" + fileLocation + ")";
|
||||
} else if (functionName) {
|
||||
return "" + functionName + " (" + fileLocation + ")";
|
||||
} else {
|
||||
return fileLocation;
|
||||
}
|
||||
};
|
||||
|
||||
}).call(this);
|
526
node_modules/karma-coffee-preprocessor/node_modules/coffee-script/lib/coffee-script/command.js
generated
vendored
526
node_modules/karma-coffee-preprocessor/node_modules/coffee-script/lib/coffee-script/command.js
generated
vendored
@ -1,526 +0,0 @@
|
||||
// Generated by CoffeeScript 1.6.3
|
||||
(function() {
|
||||
var BANNER, CoffeeScript, EventEmitter, SWITCHES, compileJoin, compileOptions, compilePath, compileScript, compileStdio, exec, exists, forkNode, fs, helpers, hidden, joinTimeout, notSources, optionParser, optparse, opts, outputPath, parseOptions, path, printLine, printTokens, printWarn, removeSource, sourceCode, sources, spawn, timeLog, unwatchDir, usage, useWinPathSep, version, wait, watch, watchDir, watchers, writeJs, _ref;
|
||||
|
||||
fs = require('fs');
|
||||
|
||||
path = require('path');
|
||||
|
||||
helpers = require('./helpers');
|
||||
|
||||
optparse = require('./optparse');
|
||||
|
||||
CoffeeScript = require('./coffee-script');
|
||||
|
||||
_ref = require('child_process'), spawn = _ref.spawn, exec = _ref.exec;
|
||||
|
||||
EventEmitter = require('events').EventEmitter;
|
||||
|
||||
exists = fs.exists || path.exists;
|
||||
|
||||
useWinPathSep = path.sep === '\\';
|
||||
|
||||
helpers.extend(CoffeeScript, new EventEmitter);
|
||||
|
||||
printLine = function(line) {
|
||||
return process.stdout.write(line + '\n');
|
||||
};
|
||||
|
||||
printWarn = function(line) {
|
||||
return process.stderr.write(line + '\n');
|
||||
};
|
||||
|
||||
hidden = function(file) {
|
||||
return /^\.|~$/.test(file);
|
||||
};
|
||||
|
||||
BANNER = 'Usage: coffee [options] path/to/script.coffee -- [args]\n\nIf called without options, `coffee` will run your script.';
|
||||
|
||||
SWITCHES = [['-b', '--bare', 'compile without a top-level function wrapper'], ['-c', '--compile', 'compile to JavaScript and save as .js files'], ['-e', '--eval', 'pass a string from the command line as input'], ['-h', '--help', 'display this help message'], ['-i', '--interactive', 'run an interactive CoffeeScript REPL'], ['-j', '--join [FILE]', 'concatenate the source CoffeeScript before compiling'], ['-m', '--map', 'generate source map and save as .map files'], ['-n', '--nodes', 'print out the parse tree that the parser produces'], ['--nodejs [ARGS]', 'pass options directly to the "node" binary'], ['-o', '--output [DIR]', 'set the output directory for compiled JavaScript'], ['-p', '--print', 'print out the compiled JavaScript'], ['-s', '--stdio', 'listen for and compile scripts over stdio'], ['-l', '--literate', 'treat stdio as literate style coffee-script'], ['-t', '--tokens', 'print out the tokens that the lexer/rewriter produce'], ['-v', '--version', 'display the version number'], ['-w', '--watch', 'watch scripts for changes and rerun commands']];
|
||||
|
||||
opts = {};
|
||||
|
||||
sources = [];
|
||||
|
||||
sourceCode = [];
|
||||
|
||||
notSources = {};
|
||||
|
||||
watchers = {};
|
||||
|
||||
optionParser = null;
|
||||
|
||||
exports.run = function() {
|
||||
var literals, source, _i, _len, _results;
|
||||
parseOptions();
|
||||
if (opts.nodejs) {
|
||||
return forkNode();
|
||||
}
|
||||
if (opts.help) {
|
||||
return usage();
|
||||
}
|
||||
if (opts.version) {
|
||||
return version();
|
||||
}
|
||||
if (opts.interactive) {
|
||||
return require('./repl').start();
|
||||
}
|
||||
if (opts.watch && !fs.watch) {
|
||||
return printWarn("The --watch feature depends on Node v0.6.0+. You are running " + process.version + ".");
|
||||
}
|
||||
if (opts.stdio) {
|
||||
return compileStdio();
|
||||
}
|
||||
if (opts["eval"]) {
|
||||
return compileScript(null, sources[0]);
|
||||
}
|
||||
if (!sources.length) {
|
||||
return require('./repl').start();
|
||||
}
|
||||
literals = opts.run ? sources.splice(1) : [];
|
||||
process.argv = process.argv.slice(0, 2).concat(literals);
|
||||
process.argv[0] = 'coffee';
|
||||
_results = [];
|
||||
for (_i = 0, _len = sources.length; _i < _len; _i++) {
|
||||
source = sources[_i];
|
||||
_results.push(compilePath(source, true, path.normalize(source)));
|
||||
}
|
||||
return _results;
|
||||
};
|
||||
|
||||
compilePath = function(source, topLevel, base) {
|
||||
return fs.stat(source, function(err, stats) {
|
||||
if (err && err.code !== 'ENOENT') {
|
||||
throw err;
|
||||
}
|
||||
if ((err != null ? err.code : void 0) === 'ENOENT') {
|
||||
console.error("File not found: " + source);
|
||||
process.exit(1);
|
||||
}
|
||||
if (stats.isDirectory() && path.dirname(source) !== 'node_modules') {
|
||||
if (opts.watch) {
|
||||
watchDir(source, base);
|
||||
}
|
||||
return fs.readdir(source, function(err, files) {
|
||||
var file, index, _ref1, _ref2;
|
||||
if (err && err.code !== 'ENOENT') {
|
||||
throw err;
|
||||
}
|
||||
if ((err != null ? err.code : void 0) === 'ENOENT') {
|
||||
return;
|
||||
}
|
||||
index = sources.indexOf(source);
|
||||
files = files.filter(function(file) {
|
||||
return !hidden(file);
|
||||
});
|
||||
[].splice.apply(sources, [index, index - index + 1].concat(_ref1 = (function() {
|
||||
var _i, _len, _results;
|
||||
_results = [];
|
||||
for (_i = 0, _len = files.length; _i < _len; _i++) {
|
||||
file = files[_i];
|
||||
_results.push(path.join(source, file));
|
||||
}
|
||||
return _results;
|
||||
})())), _ref1;
|
||||
[].splice.apply(sourceCode, [index, index - index + 1].concat(_ref2 = files.map(function() {
|
||||
return null;
|
||||
}))), _ref2;
|
||||
return files.forEach(function(file) {
|
||||
return compilePath(path.join(source, file), false, base);
|
||||
});
|
||||
});
|
||||
} else if (topLevel || helpers.isCoffee(source)) {
|
||||
if (opts.watch) {
|
||||
watch(source, base);
|
||||
}
|
||||
return fs.readFile(source, function(err, code) {
|
||||
if (err && err.code !== 'ENOENT') {
|
||||
throw err;
|
||||
}
|
||||
if ((err != null ? err.code : void 0) === 'ENOENT') {
|
||||
return;
|
||||
}
|
||||
return compileScript(source, code.toString(), base);
|
||||
});
|
||||
} else {
|
||||
notSources[source] = true;
|
||||
return removeSource(source, base);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
compileScript = function(file, input, base) {
|
||||
var compiled, err, message, o, options, t, task, useColors;
|
||||
if (base == null) {
|
||||
base = null;
|
||||
}
|
||||
o = opts;
|
||||
options = compileOptions(file, base);
|
||||
try {
|
||||
t = task = {
|
||||
file: file,
|
||||
input: input,
|
||||
options: options
|
||||
};
|
||||
CoffeeScript.emit('compile', task);
|
||||
if (o.tokens) {
|
||||
return printTokens(CoffeeScript.tokens(t.input, t.options));
|
||||
} else if (o.nodes) {
|
||||
return printLine(CoffeeScript.nodes(t.input, t.options).toString().trim());
|
||||
} else if (o.run) {
|
||||
return CoffeeScript.run(t.input, t.options);
|
||||
} else if (o.join && t.file !== o.join) {
|
||||
if (helpers.isLiterate(file)) {
|
||||
t.input = helpers.invertLiterate(t.input);
|
||||
}
|
||||
sourceCode[sources.indexOf(t.file)] = t.input;
|
||||
return compileJoin();
|
||||
} else {
|
||||
compiled = CoffeeScript.compile(t.input, t.options);
|
||||
t.output = compiled;
|
||||
if (o.map) {
|
||||
t.output = compiled.js;
|
||||
t.sourceMap = compiled.v3SourceMap;
|
||||
}
|
||||
CoffeeScript.emit('success', task);
|
||||
if (o.print) {
|
||||
return printLine(t.output.trim());
|
||||
} else if (o.compile || o.map) {
|
||||
return writeJs(base, t.file, t.output, options.jsPath, t.sourceMap);
|
||||
}
|
||||
}
|
||||
} catch (_error) {
|
||||
err = _error;
|
||||
CoffeeScript.emit('failure', err, task);
|
||||
if (CoffeeScript.listeners('failure').length) {
|
||||
return;
|
||||
}
|
||||
useColors = process.stdout.isTTY && !process.env.NODE_DISABLE_COLORS;
|
||||
message = helpers.prettyErrorMessage(err, file || '[stdin]', input, useColors);
|
||||
if (o.watch) {
|
||||
return printLine(message + '\x07');
|
||||
} else {
|
||||
printWarn(message);
|
||||
return process.exit(1);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
compileStdio = function() {
|
||||
var code, stdin;
|
||||
code = '';
|
||||
stdin = process.openStdin();
|
||||
stdin.on('data', function(buffer) {
|
||||
if (buffer) {
|
||||
return code += buffer.toString();
|
||||
}
|
||||
});
|
||||
return stdin.on('end', function() {
|
||||
return compileScript(null, code);
|
||||
});
|
||||
};
|
||||
|
||||
joinTimeout = null;
|
||||
|
||||
compileJoin = function() {
|
||||
if (!opts.join) {
|
||||
return;
|
||||
}
|
||||
if (!sourceCode.some(function(code) {
|
||||
return code === null;
|
||||
})) {
|
||||
clearTimeout(joinTimeout);
|
||||
return joinTimeout = wait(100, function() {
|
||||
return compileScript(opts.join, sourceCode.join('\n'), opts.join);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
watch = function(source, base) {
|
||||
var compile, compileTimeout, e, prevStats, rewatch, watchErr, watcher;
|
||||
prevStats = null;
|
||||
compileTimeout = null;
|
||||
watchErr = function(e) {
|
||||
if (e.code === 'ENOENT') {
|
||||
if (sources.indexOf(source) === -1) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
rewatch();
|
||||
return compile();
|
||||
} catch (_error) {
|
||||
e = _error;
|
||||
removeSource(source, base, true);
|
||||
return compileJoin();
|
||||
}
|
||||
} else {
|
||||
throw e;
|
||||
}
|
||||
};
|
||||
compile = function() {
|
||||
clearTimeout(compileTimeout);
|
||||
return compileTimeout = wait(25, function() {
|
||||
return fs.stat(source, function(err, stats) {
|
||||
if (err) {
|
||||
return watchErr(err);
|
||||
}
|
||||
if (prevStats && stats.size === prevStats.size && stats.mtime.getTime() === prevStats.mtime.getTime()) {
|
||||
return rewatch();
|
||||
}
|
||||
prevStats = stats;
|
||||
return fs.readFile(source, function(err, code) {
|
||||
if (err) {
|
||||
return watchErr(err);
|
||||
}
|
||||
compileScript(source, code.toString(), base);
|
||||
return rewatch();
|
||||
});
|
||||
});
|
||||
});
|
||||
};
|
||||
try {
|
||||
watcher = fs.watch(source, compile);
|
||||
} catch (_error) {
|
||||
e = _error;
|
||||
watchErr(e);
|
||||
}
|
||||
return rewatch = function() {
|
||||
if (watcher != null) {
|
||||
watcher.close();
|
||||
}
|
||||
return watcher = fs.watch(source, compile);
|
||||
};
|
||||
};
|
||||
|
||||
watchDir = function(source, base) {
|
||||
var e, readdirTimeout, watcher;
|
||||
readdirTimeout = null;
|
||||
try {
|
||||
return watcher = fs.watch(source, function() {
|
||||
clearTimeout(readdirTimeout);
|
||||
return readdirTimeout = wait(25, function() {
|
||||
return fs.readdir(source, function(err, files) {
|
||||
var file, _i, _len, _results;
|
||||
if (err) {
|
||||
if (err.code !== 'ENOENT') {
|
||||
throw err;
|
||||
}
|
||||
watcher.close();
|
||||
return unwatchDir(source, base);
|
||||
}
|
||||
_results = [];
|
||||
for (_i = 0, _len = files.length; _i < _len; _i++) {
|
||||
file = files[_i];
|
||||
if (!(!hidden(file) && !notSources[file])) {
|
||||
continue;
|
||||
}
|
||||
file = path.join(source, file);
|
||||
if (sources.some(function(s) {
|
||||
return s.indexOf(file) >= 0;
|
||||
})) {
|
||||
continue;
|
||||
}
|
||||
sources.push(file);
|
||||
sourceCode.push(null);
|
||||
_results.push(compilePath(file, false, base));
|
||||
}
|
||||
return _results;
|
||||
});
|
||||
});
|
||||
});
|
||||
} catch (_error) {
|
||||
e = _error;
|
||||
if (e.code !== 'ENOENT') {
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
unwatchDir = function(source, base) {
|
||||
var file, prevSources, toRemove, _i, _len;
|
||||
prevSources = sources.slice(0);
|
||||
toRemove = (function() {
|
||||
var _i, _len, _results;
|
||||
_results = [];
|
||||
for (_i = 0, _len = sources.length; _i < _len; _i++) {
|
||||
file = sources[_i];
|
||||
if (file.indexOf(source) >= 0) {
|
||||
_results.push(file);
|
||||
}
|
||||
}
|
||||
return _results;
|
||||
})();
|
||||
for (_i = 0, _len = toRemove.length; _i < _len; _i++) {
|
||||
file = toRemove[_i];
|
||||
removeSource(file, base, true);
|
||||
}
|
||||
if (!sources.some(function(s, i) {
|
||||
return prevSources[i] !== s;
|
||||
})) {
|
||||
return;
|
||||
}
|
||||
return compileJoin();
|
||||
};
|
||||
|
||||
removeSource = function(source, base, removeJs) {
|
||||
var index, jsPath;
|
||||
index = sources.indexOf(source);
|
||||
sources.splice(index, 1);
|
||||
sourceCode.splice(index, 1);
|
||||
if (removeJs && !opts.join) {
|
||||
jsPath = outputPath(source, base);
|
||||
return exists(jsPath, function(itExists) {
|
||||
if (itExists) {
|
||||
return fs.unlink(jsPath, function(err) {
|
||||
if (err && err.code !== 'ENOENT') {
|
||||
throw err;
|
||||
}
|
||||
return timeLog("removed " + source);
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
outputPath = function(source, base, extension) {
|
||||
var baseDir, basename, dir, srcDir;
|
||||
if (extension == null) {
|
||||
extension = ".js";
|
||||
}
|
||||
basename = helpers.baseFileName(source, true, useWinPathSep);
|
||||
srcDir = path.dirname(source);
|
||||
baseDir = base === '.' ? srcDir : srcDir.substring(base.length);
|
||||
dir = opts.output ? path.join(opts.output, baseDir) : srcDir;
|
||||
return path.join(dir, basename + extension);
|
||||
};
|
||||
|
||||
writeJs = function(base, sourcePath, js, jsPath, generatedSourceMap) {
|
||||
var compile, jsDir, sourceMapPath;
|
||||
if (generatedSourceMap == null) {
|
||||
generatedSourceMap = null;
|
||||
}
|
||||
sourceMapPath = outputPath(sourcePath, base, ".map");
|
||||
jsDir = path.dirname(jsPath);
|
||||
compile = function() {
|
||||
if (opts.compile) {
|
||||
if (js.length <= 0) {
|
||||
js = ' ';
|
||||
}
|
||||
if (generatedSourceMap) {
|
||||
js = "" + js + "\n/*\n//@ sourceMappingURL=" + (helpers.baseFileName(sourceMapPath, false, useWinPathSep)) + "\n*/\n";
|
||||
}
|
||||
fs.writeFile(jsPath, js, function(err) {
|
||||
if (err) {
|
||||
return printLine(err.message);
|
||||
} else if (opts.compile && opts.watch) {
|
||||
return timeLog("compiled " + sourcePath);
|
||||
}
|
||||
});
|
||||
}
|
||||
if (generatedSourceMap) {
|
||||
return fs.writeFile(sourceMapPath, generatedSourceMap, function(err) {
|
||||
if (err) {
|
||||
return printLine("Could not write source map: " + err.message);
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
return exists(jsDir, function(itExists) {
|
||||
if (itExists) {
|
||||
return compile();
|
||||
} else {
|
||||
return exec("mkdir -p " + jsDir, compile);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
wait = function(milliseconds, func) {
|
||||
return setTimeout(func, milliseconds);
|
||||
};
|
||||
|
||||
timeLog = function(message) {
|
||||
return console.log("" + ((new Date).toLocaleTimeString()) + " - " + message);
|
||||
};
|
||||
|
||||
printTokens = function(tokens) {
|
||||
var strings, tag, token, value;
|
||||
strings = (function() {
|
||||
var _i, _len, _results;
|
||||
_results = [];
|
||||
for (_i = 0, _len = tokens.length; _i < _len; _i++) {
|
||||
token = tokens[_i];
|
||||
tag = token[0];
|
||||
value = token[1].toString().replace(/\n/, '\\n');
|
||||
_results.push("[" + tag + " " + value + "]");
|
||||
}
|
||||
return _results;
|
||||
})();
|
||||
return printLine(strings.join(' '));
|
||||
};
|
||||
|
||||
parseOptions = function() {
|
||||
var i, o, source, _i, _len;
|
||||
optionParser = new optparse.OptionParser(SWITCHES, BANNER);
|
||||
o = opts = optionParser.parse(process.argv.slice(2));
|
||||
o.compile || (o.compile = !!o.output);
|
||||
o.run = !(o.compile || o.print || o.map);
|
||||
o.print = !!(o.print || (o["eval"] || o.stdio && o.compile));
|
||||
sources = o["arguments"];
|
||||
for (i = _i = 0, _len = sources.length; _i < _len; i = ++_i) {
|
||||
source = sources[i];
|
||||
sourceCode[i] = null;
|
||||
}
|
||||
};
|
||||
|
||||
compileOptions = function(filename, base) {
|
||||
var answer, cwd, jsDir, jsPath;
|
||||
answer = {
|
||||
filename: filename,
|
||||
literate: opts.literate || helpers.isLiterate(filename),
|
||||
bare: opts.bare,
|
||||
header: opts.compile,
|
||||
sourceMap: opts.map
|
||||
};
|
||||
if (filename) {
|
||||
if (base) {
|
||||
cwd = process.cwd();
|
||||
jsPath = outputPath(filename, base);
|
||||
jsDir = path.dirname(jsPath);
|
||||
answer = helpers.merge(answer, {
|
||||
jsPath: jsPath,
|
||||
sourceRoot: path.relative(jsDir, cwd),
|
||||
sourceFiles: [path.relative(cwd, filename)],
|
||||
generatedFile: helpers.baseFileName(jsPath, false, useWinPathSep)
|
||||
});
|
||||
} else {
|
||||
answer = helpers.merge(answer, {
|
||||
sourceRoot: "",
|
||||
sourceFiles: [helpers.baseFileName(filename, false, useWinPathSep)],
|
||||
generatedFile: helpers.baseFileName(filename, true, useWinPathSep) + ".js"
|
||||
});
|
||||
}
|
||||
}
|
||||
return answer;
|
||||
};
|
||||
|
||||
forkNode = function() {
|
||||
var args, nodeArgs;
|
||||
nodeArgs = opts.nodejs.split(/\s+/);
|
||||
args = process.argv.slice(1);
|
||||
args.splice(args.indexOf('--nodejs'), 2);
|
||||
return spawn(process.execPath, nodeArgs.concat(args), {
|
||||
cwd: process.cwd(),
|
||||
env: process.env,
|
||||
customFds: [0, 1, 2]
|
||||
});
|
||||
};
|
||||
|
||||
usage = function() {
|
||||
return printLine((new optparse.OptionParser(SWITCHES, BANNER)).help());
|
||||
};
|
||||
|
||||
version = function() {
|
||||
return printLine("CoffeeScript version " + CoffeeScript.VERSION);
|
||||
};
|
||||
|
||||
}).call(this);
|
625
node_modules/karma-coffee-preprocessor/node_modules/coffee-script/lib/coffee-script/grammar.js
generated
vendored
625
node_modules/karma-coffee-preprocessor/node_modules/coffee-script/lib/coffee-script/grammar.js
generated
vendored
@ -1,625 +0,0 @@
|
||||
// Generated by CoffeeScript 1.6.3
|
||||
(function() {
|
||||
var Parser, alt, alternatives, grammar, name, o, operators, token, tokens, unwrap;
|
||||
|
||||
Parser = require('jison').Parser;
|
||||
|
||||
unwrap = /^function\s*\(\)\s*\{\s*return\s*([\s\S]*);\s*\}/;
|
||||
|
||||
o = function(patternString, action, options) {
|
||||
var addLocationDataFn, match, patternCount;
|
||||
patternString = patternString.replace(/\s{2,}/g, ' ');
|
||||
patternCount = patternString.split(' ').length;
|
||||
if (!action) {
|
||||
return [patternString, '$$ = $1;', options];
|
||||
}
|
||||
action = (match = unwrap.exec(action)) ? match[1] : "(" + action + "())";
|
||||
action = action.replace(/\bnew /g, '$&yy.');
|
||||
action = action.replace(/\b(?:Block\.wrap|extend)\b/g, 'yy.$&');
|
||||
addLocationDataFn = function(first, last) {
|
||||
if (!last) {
|
||||
return "yy.addLocationDataFn(@" + first + ")";
|
||||
} else {
|
||||
return "yy.addLocationDataFn(@" + first + ", @" + last + ")";
|
||||
}
|
||||
};
|
||||
action = action.replace(/LOC\(([0-9]*)\)/g, addLocationDataFn('$1'));
|
||||
action = action.replace(/LOC\(([0-9]*),\s*([0-9]*)\)/g, addLocationDataFn('$1', '$2'));
|
||||
return [patternString, "$$ = " + (addLocationDataFn(1, patternCount)) + "(" + action + ");", options];
|
||||
};
|
||||
|
||||
grammar = {
|
||||
Root: [
|
||||
o('', function() {
|
||||
return new Block;
|
||||
}), o('Body'), o('Block TERMINATOR')
|
||||
],
|
||||
Body: [
|
||||
o('Line', function() {
|
||||
return Block.wrap([$1]);
|
||||
}), o('Body TERMINATOR Line', function() {
|
||||
return $1.push($3);
|
||||
}), o('Body TERMINATOR')
|
||||
],
|
||||
Line: [o('Expression'), o('Statement')],
|
||||
Statement: [
|
||||
o('Return'), o('Comment'), o('STATEMENT', function() {
|
||||
return new Literal($1);
|
||||
})
|
||||
],
|
||||
Expression: [o('Value'), o('Invocation'), o('Code'), o('Operation'), o('Assign'), o('If'), o('Try'), o('While'), o('For'), o('Switch'), o('Class'), o('Throw')],
|
||||
Block: [
|
||||
o('INDENT OUTDENT', function() {
|
||||
return new Block;
|
||||
}), o('INDENT Body OUTDENT', function() {
|
||||
return $2;
|
||||
})
|
||||
],
|
||||
Identifier: [
|
||||
o('IDENTIFIER', function() {
|
||||
return new Literal($1);
|
||||
})
|
||||
],
|
||||
AlphaNumeric: [
|
||||
o('NUMBER', function() {
|
||||
return new Literal($1);
|
||||
}), o('STRING', function() {
|
||||
return new Literal($1);
|
||||
})
|
||||
],
|
||||
Literal: [
|
||||
o('AlphaNumeric'), o('JS', function() {
|
||||
return new Literal($1);
|
||||
}), o('REGEX', function() {
|
||||
return new Literal($1);
|
||||
}), o('DEBUGGER', function() {
|
||||
return new Literal($1);
|
||||
}), o('UNDEFINED', function() {
|
||||
return new Undefined;
|
||||
}), o('NULL', function() {
|
||||
return new Null;
|
||||
}), o('BOOL', function() {
|
||||
return new Bool($1);
|
||||
})
|
||||
],
|
||||
Assign: [
|
||||
o('Assignable = Expression', function() {
|
||||
return new Assign($1, $3);
|
||||
}), o('Assignable = TERMINATOR Expression', function() {
|
||||
return new Assign($1, $4);
|
||||
}), o('Assignable = INDENT Expression OUTDENT', function() {
|
||||
return new Assign($1, $4);
|
||||
})
|
||||
],
|
||||
AssignObj: [
|
||||
o('ObjAssignable', function() {
|
||||
return new Value($1);
|
||||
}), o('ObjAssignable : Expression', function() {
|
||||
return new Assign(LOC(1)(new Value($1)), $3, 'object');
|
||||
}), o('ObjAssignable :\
|
||||
INDENT Expression OUTDENT', function() {
|
||||
return new Assign(LOC(1)(new Value($1)), $4, 'object');
|
||||
}), o('Comment')
|
||||
],
|
||||
ObjAssignable: [o('Identifier'), o('AlphaNumeric'), o('ThisProperty')],
|
||||
Return: [
|
||||
o('RETURN Expression', function() {
|
||||
return new Return($2);
|
||||
}), o('RETURN', function() {
|
||||
return new Return;
|
||||
})
|
||||
],
|
||||
Comment: [
|
||||
o('HERECOMMENT', function() {
|
||||
return new Comment($1);
|
||||
})
|
||||
],
|
||||
Code: [
|
||||
o('PARAM_START ParamList PARAM_END FuncGlyph Block', function() {
|
||||
return new Code($2, $5, $4);
|
||||
}), o('FuncGlyph Block', function() {
|
||||
return new Code([], $2, $1);
|
||||
})
|
||||
],
|
||||
FuncGlyph: [
|
||||
o('->', function() {
|
||||
return 'func';
|
||||
}), o('=>', function() {
|
||||
return 'boundfunc';
|
||||
})
|
||||
],
|
||||
OptComma: [o(''), o(',')],
|
||||
ParamList: [
|
||||
o('', function() {
|
||||
return [];
|
||||
}), o('Param', function() {
|
||||
return [$1];
|
||||
}), o('ParamList , Param', function() {
|
||||
return $1.concat($3);
|
||||
}), o('ParamList OptComma TERMINATOR Param', function() {
|
||||
return $1.concat($4);
|
||||
}), o('ParamList OptComma INDENT ParamList OptComma OUTDENT', function() {
|
||||
return $1.concat($4);
|
||||
})
|
||||
],
|
||||
Param: [
|
||||
o('ParamVar', function() {
|
||||
return new Param($1);
|
||||
}), o('ParamVar ...', function() {
|
||||
return new Param($1, null, true);
|
||||
}), o('ParamVar = Expression', function() {
|
||||
return new Param($1, $3);
|
||||
})
|
||||
],
|
||||
ParamVar: [o('Identifier'), o('ThisProperty'), o('Array'), o('Object')],
|
||||
Splat: [
|
||||
o('Expression ...', function() {
|
||||
return new Splat($1);
|
||||
})
|
||||
],
|
||||
SimpleAssignable: [
|
||||
o('Identifier', function() {
|
||||
return new Value($1);
|
||||
}), o('Value Accessor', function() {
|
||||
return $1.add($2);
|
||||
}), o('Invocation Accessor', function() {
|
||||
return new Value($1, [].concat($2));
|
||||
}), o('ThisProperty')
|
||||
],
|
||||
Assignable: [
|
||||
o('SimpleAssignable'), o('Array', function() {
|
||||
return new Value($1);
|
||||
}), o('Object', function() {
|
||||
return new Value($1);
|
||||
})
|
||||
],
|
||||
Value: [
|
||||
o('Assignable'), o('Literal', function() {
|
||||
return new Value($1);
|
||||
}), o('Parenthetical', function() {
|
||||
return new Value($1);
|
||||
}), o('Range', function() {
|
||||
return new Value($1);
|
||||
}), o('This')
|
||||
],
|
||||
Accessor: [
|
||||
o('. Identifier', function() {
|
||||
return new Access($2);
|
||||
}), o('?. Identifier', function() {
|
||||
return new Access($2, 'soak');
|
||||
}), o(':: Identifier', function() {
|
||||
return [LOC(1)(new Access(new Literal('prototype'))), LOC(2)(new Access($2))];
|
||||
}), o('?:: Identifier', function() {
|
||||
return [LOC(1)(new Access(new Literal('prototype'), 'soak')), LOC(2)(new Access($2))];
|
||||
}), o('::', function() {
|
||||
return new Access(new Literal('prototype'));
|
||||
}), o('Index')
|
||||
],
|
||||
Index: [
|
||||
o('INDEX_START IndexValue INDEX_END', function() {
|
||||
return $2;
|
||||
}), o('INDEX_SOAK Index', function() {
|
||||
return extend($2, {
|
||||
soak: true
|
||||
});
|
||||
})
|
||||
],
|
||||
IndexValue: [
|
||||
o('Expression', function() {
|
||||
return new Index($1);
|
||||
}), o('Slice', function() {
|
||||
return new Slice($1);
|
||||
})
|
||||
],
|
||||
Object: [
|
||||
o('{ AssignList OptComma }', function() {
|
||||
return new Obj($2, $1.generated);
|
||||
})
|
||||
],
|
||||
AssignList: [
|
||||
o('', function() {
|
||||
return [];
|
||||
}), o('AssignObj', function() {
|
||||
return [$1];
|
||||
}), o('AssignList , AssignObj', function() {
|
||||
return $1.concat($3);
|
||||
}), o('AssignList OptComma TERMINATOR AssignObj', function() {
|
||||
return $1.concat($4);
|
||||
}), o('AssignList OptComma INDENT AssignList OptComma OUTDENT', function() {
|
||||
return $1.concat($4);
|
||||
})
|
||||
],
|
||||
Class: [
|
||||
o('CLASS', function() {
|
||||
return new Class;
|
||||
}), o('CLASS Block', function() {
|
||||
return new Class(null, null, $2);
|
||||
}), o('CLASS EXTENDS Expression', function() {
|
||||
return new Class(null, $3);
|
||||
}), o('CLASS EXTENDS Expression Block', function() {
|
||||
return new Class(null, $3, $4);
|
||||
}), o('CLASS SimpleAssignable', function() {
|
||||
return new Class($2);
|
||||
}), o('CLASS SimpleAssignable Block', function() {
|
||||
return new Class($2, null, $3);
|
||||
}), o('CLASS SimpleAssignable EXTENDS Expression', function() {
|
||||
return new Class($2, $4);
|
||||
}), o('CLASS SimpleAssignable EXTENDS Expression Block', function() {
|
||||
return new Class($2, $4, $5);
|
||||
})
|
||||
],
|
||||
Invocation: [
|
||||
o('Value OptFuncExist Arguments', function() {
|
||||
return new Call($1, $3, $2);
|
||||
}), o('Invocation OptFuncExist Arguments', function() {
|
||||
return new Call($1, $3, $2);
|
||||
}), o('SUPER', function() {
|
||||
return new Call('super', [new Splat(new Literal('arguments'))]);
|
||||
}), o('SUPER Arguments', function() {
|
||||
return new Call('super', $2);
|
||||
})
|
||||
],
|
||||
OptFuncExist: [
|
||||
o('', function() {
|
||||
return false;
|
||||
}), o('FUNC_EXIST', function() {
|
||||
return true;
|
||||
})
|
||||
],
|
||||
Arguments: [
|
||||
o('CALL_START CALL_END', function() {
|
||||
return [];
|
||||
}), o('CALL_START ArgList OptComma CALL_END', function() {
|
||||
return $2;
|
||||
})
|
||||
],
|
||||
This: [
|
||||
o('THIS', function() {
|
||||
return new Value(new Literal('this'));
|
||||
}), o('@', function() {
|
||||
return new Value(new Literal('this'));
|
||||
})
|
||||
],
|
||||
ThisProperty: [
|
||||
o('@ Identifier', function() {
|
||||
return new Value(LOC(1)(new Literal('this')), [LOC(2)(new Access($2))], 'this');
|
||||
})
|
||||
],
|
||||
Array: [
|
||||
o('[ ]', function() {
|
||||
return new Arr([]);
|
||||
}), o('[ ArgList OptComma ]', function() {
|
||||
return new Arr($2);
|
||||
})
|
||||
],
|
||||
RangeDots: [
|
||||
o('..', function() {
|
||||
return 'inclusive';
|
||||
}), o('...', function() {
|
||||
return 'exclusive';
|
||||
})
|
||||
],
|
||||
Range: [
|
||||
o('[ Expression RangeDots Expression ]', function() {
|
||||
return new Range($2, $4, $3);
|
||||
})
|
||||
],
|
||||
Slice: [
|
||||
o('Expression RangeDots Expression', function() {
|
||||
return new Range($1, $3, $2);
|
||||
}), o('Expression RangeDots', function() {
|
||||
return new Range($1, null, $2);
|
||||
}), o('RangeDots Expression', function() {
|
||||
return new Range(null, $2, $1);
|
||||
}), o('RangeDots', function() {
|
||||
return new Range(null, null, $1);
|
||||
})
|
||||
],
|
||||
ArgList: [
|
||||
o('Arg', function() {
|
||||
return [$1];
|
||||
}), o('ArgList , Arg', function() {
|
||||
return $1.concat($3);
|
||||
}), o('ArgList OptComma TERMINATOR Arg', function() {
|
||||
return $1.concat($4);
|
||||
}), o('INDENT ArgList OptComma OUTDENT', function() {
|
||||
return $2;
|
||||
}), o('ArgList OptComma INDENT ArgList OptComma OUTDENT', function() {
|
||||
return $1.concat($4);
|
||||
})
|
||||
],
|
||||
Arg: [o('Expression'), o('Splat')],
|
||||
SimpleArgs: [
|
||||
o('Expression'), o('SimpleArgs , Expression', function() {
|
||||
return [].concat($1, $3);
|
||||
})
|
||||
],
|
||||
Try: [
|
||||
o('TRY Block', function() {
|
||||
return new Try($2);
|
||||
}), o('TRY Block Catch', function() {
|
||||
return new Try($2, $3[0], $3[1]);
|
||||
}), o('TRY Block FINALLY Block', function() {
|
||||
return new Try($2, null, null, $4);
|
||||
}), o('TRY Block Catch FINALLY Block', function() {
|
||||
return new Try($2, $3[0], $3[1], $5);
|
||||
})
|
||||
],
|
||||
Catch: [
|
||||
o('CATCH Identifier Block', function() {
|
||||
return [$2, $3];
|
||||
}), o('CATCH Object Block', function() {
|
||||
return [LOC(2)(new Value($2)), $3];
|
||||
}), o('CATCH Block', function() {
|
||||
return [null, $2];
|
||||
})
|
||||
],
|
||||
Throw: [
|
||||
o('THROW Expression', function() {
|
||||
return new Throw($2);
|
||||
})
|
||||
],
|
||||
Parenthetical: [
|
||||
o('( Body )', function() {
|
||||
return new Parens($2);
|
||||
}), o('( INDENT Body OUTDENT )', function() {
|
||||
return new Parens($3);
|
||||
})
|
||||
],
|
||||
WhileSource: [
|
||||
o('WHILE Expression', function() {
|
||||
return new While($2);
|
||||
}), o('WHILE Expression WHEN Expression', function() {
|
||||
return new While($2, {
|
||||
guard: $4
|
||||
});
|
||||
}), o('UNTIL Expression', function() {
|
||||
return new While($2, {
|
||||
invert: true
|
||||
});
|
||||
}), o('UNTIL Expression WHEN Expression', function() {
|
||||
return new While($2, {
|
||||
invert: true,
|
||||
guard: $4
|
||||
});
|
||||
})
|
||||
],
|
||||
While: [
|
||||
o('WhileSource Block', function() {
|
||||
return $1.addBody($2);
|
||||
}), o('Statement WhileSource', function() {
|
||||
return $2.addBody(LOC(1)(Block.wrap([$1])));
|
||||
}), o('Expression WhileSource', function() {
|
||||
return $2.addBody(LOC(1)(Block.wrap([$1])));
|
||||
}), o('Loop', function() {
|
||||
return $1;
|
||||
})
|
||||
],
|
||||
Loop: [
|
||||
o('LOOP Block', function() {
|
||||
return new While(LOC(1)(new Literal('true'))).addBody($2);
|
||||
}), o('LOOP Expression', function() {
|
||||
return new While(LOC(1)(new Literal('true'))).addBody(LOC(2)(Block.wrap([$2])));
|
||||
})
|
||||
],
|
||||
For: [
|
||||
o('Statement ForBody', function() {
|
||||
return new For($1, $2);
|
||||
}), o('Expression ForBody', function() {
|
||||
return new For($1, $2);
|
||||
}), o('ForBody Block', function() {
|
||||
return new For($2, $1);
|
||||
})
|
||||
],
|
||||
ForBody: [
|
||||
o('FOR Range', function() {
|
||||
return {
|
||||
source: LOC(2)(new Value($2))
|
||||
};
|
||||
}), o('ForStart ForSource', function() {
|
||||
$2.own = $1.own;
|
||||
$2.name = $1[0];
|
||||
$2.index = $1[1];
|
||||
return $2;
|
||||
})
|
||||
],
|
||||
ForStart: [
|
||||
o('FOR ForVariables', function() {
|
||||
return $2;
|
||||
}), o('FOR OWN ForVariables', function() {
|
||||
$3.own = true;
|
||||
return $3;
|
||||
})
|
||||
],
|
||||
ForValue: [
|
||||
o('Identifier'), o('ThisProperty'), o('Array', function() {
|
||||
return new Value($1);
|
||||
}), o('Object', function() {
|
||||
return new Value($1);
|
||||
})
|
||||
],
|
||||
ForVariables: [
|
||||
o('ForValue', function() {
|
||||
return [$1];
|
||||
}), o('ForValue , ForValue', function() {
|
||||
return [$1, $3];
|
||||
})
|
||||
],
|
||||
ForSource: [
|
||||
o('FORIN Expression', function() {
|
||||
return {
|
||||
source: $2
|
||||
};
|
||||
}), o('FOROF Expression', function() {
|
||||
return {
|
||||
source: $2,
|
||||
object: true
|
||||
};
|
||||
}), o('FORIN Expression WHEN Expression', function() {
|
||||
return {
|
||||
source: $2,
|
||||
guard: $4
|
||||
};
|
||||
}), o('FOROF Expression WHEN Expression', function() {
|
||||
return {
|
||||
source: $2,
|
||||
guard: $4,
|
||||
object: true
|
||||
};
|
||||
}), o('FORIN Expression BY Expression', function() {
|
||||
return {
|
||||
source: $2,
|
||||
step: $4
|
||||
};
|
||||
}), o('FORIN Expression WHEN Expression BY Expression', function() {
|
||||
return {
|
||||
source: $2,
|
||||
guard: $4,
|
||||
step: $6
|
||||
};
|
||||
}), o('FORIN Expression BY Expression WHEN Expression', function() {
|
||||
return {
|
||||
source: $2,
|
||||
step: $4,
|
||||
guard: $6
|
||||
};
|
||||
})
|
||||
],
|
||||
Switch: [
|
||||
o('SWITCH Expression INDENT Whens OUTDENT', function() {
|
||||
return new Switch($2, $4);
|
||||
}), o('SWITCH Expression INDENT Whens ELSE Block OUTDENT', function() {
|
||||
return new Switch($2, $4, $6);
|
||||
}), o('SWITCH INDENT Whens OUTDENT', function() {
|
||||
return new Switch(null, $3);
|
||||
}), o('SWITCH INDENT Whens ELSE Block OUTDENT', function() {
|
||||
return new Switch(null, $3, $5);
|
||||
})
|
||||
],
|
||||
Whens: [
|
||||
o('When'), o('Whens When', function() {
|
||||
return $1.concat($2);
|
||||
})
|
||||
],
|
||||
When: [
|
||||
o('LEADING_WHEN SimpleArgs Block', function() {
|
||||
return [[$2, $3]];
|
||||
}), o('LEADING_WHEN SimpleArgs Block TERMINATOR', function() {
|
||||
return [[$2, $3]];
|
||||
})
|
||||
],
|
||||
IfBlock: [
|
||||
o('IF Expression Block', function() {
|
||||
return new If($2, $3, {
|
||||
type: $1
|
||||
});
|
||||
}), o('IfBlock ELSE IF Expression Block', function() {
|
||||
return $1.addElse(new If($4, $5, {
|
||||
type: $3
|
||||
}));
|
||||
})
|
||||
],
|
||||
If: [
|
||||
o('IfBlock'), o('IfBlock ELSE Block', function() {
|
||||
return $1.addElse($3);
|
||||
}), o('Statement POST_IF Expression', function() {
|
||||
return new If($3, LOC(1)(Block.wrap([$1])), {
|
||||
type: $2,
|
||||
statement: true
|
||||
});
|
||||
}), o('Expression POST_IF Expression', function() {
|
||||
return new If($3, LOC(1)(Block.wrap([$1])), {
|
||||
type: $2,
|
||||
statement: true
|
||||
});
|
||||
})
|
||||
],
|
||||
Operation: [
|
||||
o('UNARY Expression', function() {
|
||||
return new Op($1, $2);
|
||||
}), o('- Expression', (function() {
|
||||
return new Op('-', $2);
|
||||
}), {
|
||||
prec: 'UNARY'
|
||||
}), o('+ Expression', (function() {
|
||||
return new Op('+', $2);
|
||||
}), {
|
||||
prec: 'UNARY'
|
||||
}), o('-- SimpleAssignable', function() {
|
||||
return new Op('--', $2);
|
||||
}), o('++ SimpleAssignable', function() {
|
||||
return new Op('++', $2);
|
||||
}), o('SimpleAssignable --', function() {
|
||||
return new Op('--', $1, null, true);
|
||||
}), o('SimpleAssignable ++', function() {
|
||||
return new Op('++', $1, null, true);
|
||||
}), o('Expression ?', function() {
|
||||
return new Existence($1);
|
||||
}), o('Expression + Expression', function() {
|
||||
return new Op('+', $1, $3);
|
||||
}), o('Expression - Expression', function() {
|
||||
return new Op('-', $1, $3);
|
||||
}), o('Expression MATH Expression', function() {
|
||||
return new Op($2, $1, $3);
|
||||
}), o('Expression SHIFT Expression', function() {
|
||||
return new Op($2, $1, $3);
|
||||
}), o('Expression COMPARE Expression', function() {
|
||||
return new Op($2, $1, $3);
|
||||
}), o('Expression LOGIC Expression', function() {
|
||||
return new Op($2, $1, $3);
|
||||
}), o('Expression RELATION Expression', function() {
|
||||
if ($2.charAt(0) === '!') {
|
||||
return new Op($2.slice(1), $1, $3).invert();
|
||||
} else {
|
||||
return new Op($2, $1, $3);
|
||||
}
|
||||
}), o('SimpleAssignable COMPOUND_ASSIGN\
|
||||
Expression', function() {
|
||||
return new Assign($1, $3, $2);
|
||||
}), o('SimpleAssignable COMPOUND_ASSIGN\
|
||||
INDENT Expression OUTDENT', function() {
|
||||
return new Assign($1, $4, $2);
|
||||
}), o('SimpleAssignable COMPOUND_ASSIGN TERMINATOR\
|
||||
Expression', function() {
|
||||
return new Assign($1, $4, $2);
|
||||
}), o('SimpleAssignable EXTENDS Expression', function() {
|
||||
return new Extends($1, $3);
|
||||
})
|
||||
]
|
||||
};
|
||||
|
||||
operators = [['left', '.', '?.', '::', '?::'], ['left', 'CALL_START', 'CALL_END'], ['nonassoc', '++', '--'], ['left', '?'], ['right', 'UNARY'], ['left', 'MATH'], ['left', '+', '-'], ['left', 'SHIFT'], ['left', 'RELATION'], ['left', 'COMPARE'], ['left', 'LOGIC'], ['nonassoc', 'INDENT', 'OUTDENT'], ['right', '=', ':', 'COMPOUND_ASSIGN', 'RETURN', 'THROW', 'EXTENDS'], ['right', 'FORIN', 'FOROF', 'BY', 'WHEN'], ['right', 'IF', 'ELSE', 'FOR', 'WHILE', 'UNTIL', 'LOOP', 'SUPER', 'CLASS'], ['right', 'POST_IF']];
|
||||
|
||||
tokens = [];
|
||||
|
||||
for (name in grammar) {
|
||||
alternatives = grammar[name];
|
||||
grammar[name] = (function() {
|
||||
var _i, _j, _len, _len1, _ref, _results;
|
||||
_results = [];
|
||||
for (_i = 0, _len = alternatives.length; _i < _len; _i++) {
|
||||
alt = alternatives[_i];
|
||||
_ref = alt[0].split(' ');
|
||||
for (_j = 0, _len1 = _ref.length; _j < _len1; _j++) {
|
||||
token = _ref[_j];
|
||||
if (!grammar[token]) {
|
||||
tokens.push(token);
|
||||
}
|
||||
}
|
||||
if (name === 'Root') {
|
||||
alt[1] = "return " + alt[1];
|
||||
}
|
||||
_results.push(alt);
|
||||
}
|
||||
return _results;
|
||||
})();
|
||||
}
|
||||
|
||||
exports.parser = new Parser({
|
||||
tokens: tokens.join(' '),
|
||||
bnf: grammar,
|
||||
operators: operators.reverse(),
|
||||
startSymbol: 'Root'
|
||||
});
|
||||
|
||||
}).call(this);
|
223
node_modules/karma-coffee-preprocessor/node_modules/coffee-script/lib/coffee-script/helpers.js
generated
vendored
223
node_modules/karma-coffee-preprocessor/node_modules/coffee-script/lib/coffee-script/helpers.js
generated
vendored
@ -1,223 +0,0 @@
|
||||
// Generated by CoffeeScript 1.6.3
|
||||
(function() {
|
||||
var buildLocationData, extend, flatten, last, repeat, _ref;
|
||||
|
||||
exports.starts = function(string, literal, start) {
|
||||
return literal === string.substr(start, literal.length);
|
||||
};
|
||||
|
||||
exports.ends = function(string, literal, back) {
|
||||
var len;
|
||||
len = literal.length;
|
||||
return literal === string.substr(string.length - len - (back || 0), len);
|
||||
};
|
||||
|
||||
exports.repeat = repeat = function(str, n) {
|
||||
var res;
|
||||
res = '';
|
||||
while (n > 0) {
|
||||
if (n & 1) {
|
||||
res += str;
|
||||
}
|
||||
n >>>= 1;
|
||||
str += str;
|
||||
}
|
||||
return res;
|
||||
};
|
||||
|
||||
exports.compact = function(array) {
|
||||
var item, _i, _len, _results;
|
||||
_results = [];
|
||||
for (_i = 0, _len = array.length; _i < _len; _i++) {
|
||||
item = array[_i];
|
||||
if (item) {
|
||||
_results.push(item);
|
||||
}
|
||||
}
|
||||
return _results;
|
||||
};
|
||||
|
||||
exports.count = function(string, substr) {
|
||||
var num, pos;
|
||||
num = pos = 0;
|
||||
if (!substr.length) {
|
||||
return 1 / 0;
|
||||
}
|
||||
while (pos = 1 + string.indexOf(substr, pos)) {
|
||||
num++;
|
||||
}
|
||||
return num;
|
||||
};
|
||||
|
||||
exports.merge = function(options, overrides) {
|
||||
return extend(extend({}, options), overrides);
|
||||
};
|
||||
|
||||
extend = exports.extend = function(object, properties) {
|
||||
var key, val;
|
||||
for (key in properties) {
|
||||
val = properties[key];
|
||||
object[key] = val;
|
||||
}
|
||||
return object;
|
||||
};
|
||||
|
||||
exports.flatten = flatten = function(array) {
|
||||
var element, flattened, _i, _len;
|
||||
flattened = [];
|
||||
for (_i = 0, _len = array.length; _i < _len; _i++) {
|
||||
element = array[_i];
|
||||
if (element instanceof Array) {
|
||||
flattened = flattened.concat(flatten(element));
|
||||
} else {
|
||||
flattened.push(element);
|
||||
}
|
||||
}
|
||||
return flattened;
|
||||
};
|
||||
|
||||
exports.del = function(obj, key) {
|
||||
var val;
|
||||
val = obj[key];
|
||||
delete obj[key];
|
||||
return val;
|
||||
};
|
||||
|
||||
exports.last = last = function(array, back) {
|
||||
return array[array.length - (back || 0) - 1];
|
||||
};
|
||||
|
||||
exports.some = (_ref = Array.prototype.some) != null ? _ref : function(fn) {
|
||||
var e, _i, _len;
|
||||
for (_i = 0, _len = this.length; _i < _len; _i++) {
|
||||
e = this[_i];
|
||||
if (fn(e)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
};
|
||||
|
||||
exports.invertLiterate = function(code) {
|
||||
var line, lines, maybe_code;
|
||||
maybe_code = true;
|
||||
lines = (function() {
|
||||
var _i, _len, _ref1, _results;
|
||||
_ref1 = code.split('\n');
|
||||
_results = [];
|
||||
for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
|
||||
line = _ref1[_i];
|
||||
if (maybe_code && /^([ ]{4}|[ ]{0,3}\t)/.test(line)) {
|
||||
_results.push(line);
|
||||
} else if (maybe_code = /^\s*$/.test(line)) {
|
||||
_results.push(line);
|
||||
} else {
|
||||
_results.push('# ' + line);
|
||||
}
|
||||
}
|
||||
return _results;
|
||||
})();
|
||||
return lines.join('\n');
|
||||
};
|
||||
|
||||
buildLocationData = function(first, last) {
|
||||
if (!last) {
|
||||
return first;
|
||||
} else {
|
||||
return {
|
||||
first_line: first.first_line,
|
||||
first_column: first.first_column,
|
||||
last_line: last.last_line,
|
||||
last_column: last.last_column
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
exports.addLocationDataFn = function(first, last) {
|
||||
return function(obj) {
|
||||
if (((typeof obj) === 'object') && (!!obj['updateLocationDataIfMissing'])) {
|
||||
obj.updateLocationDataIfMissing(buildLocationData(first, last));
|
||||
}
|
||||
return obj;
|
||||
};
|
||||
};
|
||||
|
||||
exports.locationDataToString = function(obj) {
|
||||
var locationData;
|
||||
if (("2" in obj) && ("first_line" in obj[2])) {
|
||||
locationData = obj[2];
|
||||
} else if ("first_line" in obj) {
|
||||
locationData = obj;
|
||||
}
|
||||
if (locationData) {
|
||||
return ("" + (locationData.first_line + 1) + ":" + (locationData.first_column + 1) + "-") + ("" + (locationData.last_line + 1) + ":" + (locationData.last_column + 1));
|
||||
} else {
|
||||
return "No location data";
|
||||
}
|
||||
};
|
||||
|
||||
exports.baseFileName = function(file, stripExt, useWinPathSep) {
|
||||
var parts, pathSep;
|
||||
if (stripExt == null) {
|
||||
stripExt = false;
|
||||
}
|
||||
if (useWinPathSep == null) {
|
||||
useWinPathSep = false;
|
||||
}
|
||||
pathSep = useWinPathSep ? /\\|\// : /\//;
|
||||
parts = file.split(pathSep);
|
||||
file = parts[parts.length - 1];
|
||||
if (!stripExt) {
|
||||
return file;
|
||||
}
|
||||
parts = file.split('.');
|
||||
parts.pop();
|
||||
if (parts[parts.length - 1] === 'coffee' && parts.length > 1) {
|
||||
parts.pop();
|
||||
}
|
||||
return parts.join('.');
|
||||
};
|
||||
|
||||
exports.isCoffee = function(file) {
|
||||
return /\.((lit)?coffee|coffee\.md)$/.test(file);
|
||||
};
|
||||
|
||||
exports.isLiterate = function(file) {
|
||||
return /\.(litcoffee|coffee\.md)$/.test(file);
|
||||
};
|
||||
|
||||
exports.throwSyntaxError = function(message, location) {
|
||||
var error;
|
||||
if (location.last_line == null) {
|
||||
location.last_line = location.first_line;
|
||||
}
|
||||
if (location.last_column == null) {
|
||||
location.last_column = location.first_column;
|
||||
}
|
||||
error = new SyntaxError(message);
|
||||
error.location = location;
|
||||
throw error;
|
||||
};
|
||||
|
||||
exports.prettyErrorMessage = function(error, fileName, code, useColors) {
|
||||
var codeLine, colorize, end, first_column, first_line, last_column, last_line, marker, message, start, _ref1;
|
||||
if (!error.location) {
|
||||
return error.stack || ("" + error);
|
||||
}
|
||||
_ref1 = error.location, first_line = _ref1.first_line, first_column = _ref1.first_column, last_line = _ref1.last_line, last_column = _ref1.last_column;
|
||||
codeLine = code.split('\n')[first_line];
|
||||
start = first_column;
|
||||
end = first_line === last_line ? last_column + 1 : codeLine.length;
|
||||
marker = repeat(' ', start) + repeat('^', end - start);
|
||||
if (useColors) {
|
||||
colorize = function(str) {
|
||||
return "\x1B[1;31m" + str + "\x1B[0m";
|
||||
};
|
||||
codeLine = codeLine.slice(0, start) + colorize(codeLine.slice(start, end)) + codeLine.slice(end);
|
||||
marker = colorize(marker);
|
||||
}
|
||||
message = "" + fileName + ":" + (first_line + 1) + ":" + (first_column + 1) + ": error: " + error.message + "\n" + codeLine + "\n" + marker;
|
||||
return message;
|
||||
};
|
||||
|
||||
}).call(this);
|
11
node_modules/karma-coffee-preprocessor/node_modules/coffee-script/lib/coffee-script/index.js
generated
vendored
11
node_modules/karma-coffee-preprocessor/node_modules/coffee-script/lib/coffee-script/index.js
generated
vendored
@ -1,11 +0,0 @@
|
||||
// Generated by CoffeeScript 1.6.3
|
||||
(function() {
|
||||
var key, val, _ref;
|
||||
|
||||
_ref = require('./coffee-script');
|
||||
for (key in _ref) {
|
||||
val = _ref[key];
|
||||
exports[key] = val;
|
||||
}
|
||||
|
||||
}).call(this);
|
889
node_modules/karma-coffee-preprocessor/node_modules/coffee-script/lib/coffee-script/lexer.js
generated
vendored
889
node_modules/karma-coffee-preprocessor/node_modules/coffee-script/lib/coffee-script/lexer.js
generated
vendored
@ -1,889 +0,0 @@
|
||||
// Generated by CoffeeScript 1.6.3
|
||||
(function() {
|
||||
var BOM, BOOL, CALLABLE, CODE, COFFEE_ALIASES, COFFEE_ALIAS_MAP, COFFEE_KEYWORDS, COMMENT, COMPARE, COMPOUND_ASSIGN, HEREDOC, HEREDOC_ILLEGAL, HEREDOC_INDENT, HEREGEX, HEREGEX_OMIT, IDENTIFIER, INDEXABLE, INVERSES, JSTOKEN, JS_FORBIDDEN, JS_KEYWORDS, LINE_BREAK, LINE_CONTINUER, LOGIC, Lexer, MATH, MULTILINER, MULTI_DENT, NOT_REGEX, NOT_SPACED_REGEX, NUMBER, OPERATOR, REGEX, RELATION, RESERVED, Rewriter, SHIFT, SIMPLESTR, STRICT_PROSCRIBED, TRAILING_SPACES, UNARY, WHITESPACE, compact, count, invertLiterate, key, last, locationDataToString, repeat, starts, throwSyntaxError, _ref, _ref1,
|
||||
__indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
|
||||
|
||||
_ref = require('./rewriter'), Rewriter = _ref.Rewriter, INVERSES = _ref.INVERSES;
|
||||
|
||||
_ref1 = require('./helpers'), count = _ref1.count, starts = _ref1.starts, compact = _ref1.compact, last = _ref1.last, repeat = _ref1.repeat, invertLiterate = _ref1.invertLiterate, locationDataToString = _ref1.locationDataToString, throwSyntaxError = _ref1.throwSyntaxError;
|
||||
|
||||
exports.Lexer = Lexer = (function() {
|
||||
function Lexer() {}
|
||||
|
||||
Lexer.prototype.tokenize = function(code, opts) {
|
||||
var consumed, i, tag, _ref2;
|
||||
if (opts == null) {
|
||||
opts = {};
|
||||
}
|
||||
this.literate = opts.literate;
|
||||
this.indent = 0;
|
||||
this.indebt = 0;
|
||||
this.outdebt = 0;
|
||||
this.indents = [];
|
||||
this.ends = [];
|
||||
this.tokens = [];
|
||||
this.chunkLine = opts.line || 0;
|
||||
this.chunkColumn = opts.column || 0;
|
||||
code = this.clean(code);
|
||||
i = 0;
|
||||
while (this.chunk = code.slice(i)) {
|
||||
consumed = this.identifierToken() || this.commentToken() || this.whitespaceToken() || this.lineToken() || this.heredocToken() || this.stringToken() || this.numberToken() || this.regexToken() || this.jsToken() || this.literalToken();
|
||||
_ref2 = this.getLineAndColumnFromChunk(consumed), this.chunkLine = _ref2[0], this.chunkColumn = _ref2[1];
|
||||
i += consumed;
|
||||
}
|
||||
this.closeIndentation();
|
||||
if (tag = this.ends.pop()) {
|
||||
this.error("missing " + tag);
|
||||
}
|
||||
if (opts.rewrite === false) {
|
||||
return this.tokens;
|
||||
}
|
||||
return (new Rewriter).rewrite(this.tokens);
|
||||
};
|
||||
|
||||
Lexer.prototype.clean = function(code) {
|
||||
if (code.charCodeAt(0) === BOM) {
|
||||
code = code.slice(1);
|
||||
}
|
||||
code = code.replace(/\r/g, '').replace(TRAILING_SPACES, '');
|
||||
if (WHITESPACE.test(code)) {
|
||||
code = "\n" + code;
|
||||
this.chunkLine--;
|
||||
}
|
||||
if (this.literate) {
|
||||
code = invertLiterate(code);
|
||||
}
|
||||
return code;
|
||||
};
|
||||
|
||||
Lexer.prototype.identifierToken = function() {
|
||||
var colon, colonOffset, forcedIdentifier, id, idLength, input, match, poppedToken, prev, tag, tagToken, _ref2, _ref3, _ref4;
|
||||
if (!(match = IDENTIFIER.exec(this.chunk))) {
|
||||
return 0;
|
||||
}
|
||||
input = match[0], id = match[1], colon = match[2];
|
||||
idLength = id.length;
|
||||
poppedToken = void 0;
|
||||
if (id === 'own' && this.tag() === 'FOR') {
|
||||
this.token('OWN', id);
|
||||
return id.length;
|
||||
}
|
||||
forcedIdentifier = colon || (prev = last(this.tokens)) && (((_ref2 = prev[0]) === '.' || _ref2 === '?.' || _ref2 === '::' || _ref2 === '?::') || !prev.spaced && prev[0] === '@');
|
||||
tag = 'IDENTIFIER';
|
||||
if (!forcedIdentifier && (__indexOf.call(JS_KEYWORDS, id) >= 0 || __indexOf.call(COFFEE_KEYWORDS, id) >= 0)) {
|
||||
tag = id.toUpperCase();
|
||||
if (tag === 'WHEN' && (_ref3 = this.tag(), __indexOf.call(LINE_BREAK, _ref3) >= 0)) {
|
||||
tag = 'LEADING_WHEN';
|
||||
} else if (tag === 'FOR') {
|
||||
this.seenFor = true;
|
||||
} else if (tag === 'UNLESS') {
|
||||
tag = 'IF';
|
||||
} else if (__indexOf.call(UNARY, tag) >= 0) {
|
||||
tag = 'UNARY';
|
||||
} else if (__indexOf.call(RELATION, tag) >= 0) {
|
||||
if (tag !== 'INSTANCEOF' && this.seenFor) {
|
||||
tag = 'FOR' + tag;
|
||||
this.seenFor = false;
|
||||
} else {
|
||||
tag = 'RELATION';
|
||||
if (this.value() === '!') {
|
||||
poppedToken = this.tokens.pop();
|
||||
id = '!' + id;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (__indexOf.call(JS_FORBIDDEN, id) >= 0) {
|
||||
if (forcedIdentifier) {
|
||||
tag = 'IDENTIFIER';
|
||||
id = new String(id);
|
||||
id.reserved = true;
|
||||
} else if (__indexOf.call(RESERVED, id) >= 0) {
|
||||
this.error("reserved word \"" + id + "\"");
|
||||
}
|
||||
}
|
||||
if (!forcedIdentifier) {
|
||||
if (__indexOf.call(COFFEE_ALIASES, id) >= 0) {
|
||||
id = COFFEE_ALIAS_MAP[id];
|
||||
}
|
||||
tag = (function() {
|
||||
switch (id) {
|
||||
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 tag;
|
||||
}
|
||||
})();
|
||||
}
|
||||
tagToken = this.token(tag, id, 0, idLength);
|
||||
if (poppedToken) {
|
||||
_ref4 = [poppedToken[2].first_line, poppedToken[2].first_column], tagToken[2].first_line = _ref4[0], tagToken[2].first_column = _ref4[1];
|
||||
}
|
||||
if (colon) {
|
||||
colonOffset = input.lastIndexOf(':');
|
||||
this.token(':', ':', colonOffset, colon.length);
|
||||
}
|
||||
return input.length;
|
||||
};
|
||||
|
||||
Lexer.prototype.numberToken = function() {
|
||||
var binaryLiteral, lexedLength, match, number, octalLiteral;
|
||||
if (!(match = NUMBER.exec(this.chunk))) {
|
||||
return 0;
|
||||
}
|
||||
number = match[0];
|
||||
if (/^0[BOX]/.test(number)) {
|
||||
this.error("radix prefix '" + number + "' must be lowercase");
|
||||
} else if (/E/.test(number) && !/^0x/.test(number)) {
|
||||
this.error("exponential notation '" + number + "' must be indicated with a lowercase 'e'");
|
||||
} else if (/^0\d*[89]/.test(number)) {
|
||||
this.error("decimal literal '" + number + "' must not be prefixed with '0'");
|
||||
} else if (/^0\d+/.test(number)) {
|
||||
this.error("octal literal '" + number + "' must be prefixed with '0o'");
|
||||
}
|
||||
lexedLength = number.length;
|
||||
if (octalLiteral = /^0o([0-7]+)/.exec(number)) {
|
||||
number = '0x' + parseInt(octalLiteral[1], 8).toString(16);
|
||||
}
|
||||
if (binaryLiteral = /^0b([01]+)/.exec(number)) {
|
||||
number = '0x' + parseInt(binaryLiteral[1], 2).toString(16);
|
||||
}
|
||||
this.token('NUMBER', number, 0, lexedLength);
|
||||
return lexedLength;
|
||||
};
|
||||
|
||||
Lexer.prototype.stringToken = function() {
|
||||
var match, octalEsc, string;
|
||||
switch (this.chunk.charAt(0)) {
|
||||
case "'":
|
||||
if (!(match = SIMPLESTR.exec(this.chunk))) {
|
||||
return 0;
|
||||
}
|
||||
string = match[0];
|
||||
this.token('STRING', string.replace(MULTILINER, '\\\n'), 0, string.length);
|
||||
break;
|
||||
case '"':
|
||||
if (!(string = this.balancedString(this.chunk, '"'))) {
|
||||
return 0;
|
||||
}
|
||||
if (0 < string.indexOf('#{', 1)) {
|
||||
this.interpolateString(string.slice(1, -1), {
|
||||
strOffset: 1,
|
||||
lexedLength: string.length
|
||||
});
|
||||
} else {
|
||||
this.token('STRING', this.escapeLines(string, 0, string.length));
|
||||
}
|
||||
break;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
if (octalEsc = /^(?:\\.|[^\\])*\\(?:0[0-7]|[1-7])/.test(string)) {
|
||||
this.error("octal escape sequences " + string + " are not allowed");
|
||||
}
|
||||
return string.length;
|
||||
};
|
||||
|
||||
Lexer.prototype.heredocToken = function() {
|
||||
var doc, heredoc, match, quote;
|
||||
if (!(match = HEREDOC.exec(this.chunk))) {
|
||||
return 0;
|
||||
}
|
||||
heredoc = match[0];
|
||||
quote = heredoc.charAt(0);
|
||||
doc = this.sanitizeHeredoc(match[2], {
|
||||
quote: quote,
|
||||
indent: null
|
||||
});
|
||||
if (quote === '"' && 0 <= doc.indexOf('#{')) {
|
||||
this.interpolateString(doc, {
|
||||
heredoc: true,
|
||||
strOffset: 3,
|
||||
lexedLength: heredoc.length
|
||||
});
|
||||
} else {
|
||||
this.token('STRING', this.makeString(doc, quote, true), 0, heredoc.length);
|
||||
}
|
||||
return heredoc.length;
|
||||
};
|
||||
|
||||
Lexer.prototype.commentToken = function() {
|
||||
var comment, here, match;
|
||||
if (!(match = this.chunk.match(COMMENT))) {
|
||||
return 0;
|
||||
}
|
||||
comment = match[0], here = match[1];
|
||||
if (here) {
|
||||
this.token('HERECOMMENT', this.sanitizeHeredoc(here, {
|
||||
herecomment: true,
|
||||
indent: repeat(' ', this.indent)
|
||||
}), 0, comment.length);
|
||||
}
|
||||
return comment.length;
|
||||
};
|
||||
|
||||
Lexer.prototype.jsToken = function() {
|
||||
var match, script;
|
||||
if (!(this.chunk.charAt(0) === '`' && (match = JSTOKEN.exec(this.chunk)))) {
|
||||
return 0;
|
||||
}
|
||||
this.token('JS', (script = match[0]).slice(1, -1), 0, script.length);
|
||||
return script.length;
|
||||
};
|
||||
|
||||
Lexer.prototype.regexToken = function() {
|
||||
var flags, length, match, prev, regex, _ref2, _ref3;
|
||||
if (this.chunk.charAt(0) !== '/') {
|
||||
return 0;
|
||||
}
|
||||
if (match = HEREGEX.exec(this.chunk)) {
|
||||
length = this.heregexToken(match);
|
||||
return length;
|
||||
}
|
||||
prev = last(this.tokens);
|
||||
if (prev && (_ref2 = prev[0], __indexOf.call((prev.spaced ? NOT_REGEX : NOT_SPACED_REGEX), _ref2) >= 0)) {
|
||||
return 0;
|
||||
}
|
||||
if (!(match = REGEX.exec(this.chunk))) {
|
||||
return 0;
|
||||
}
|
||||
_ref3 = match, match = _ref3[0], regex = _ref3[1], flags = _ref3[2];
|
||||
if (regex.slice(0, 2) === '/*') {
|
||||
this.error('regular expressions cannot begin with `*`');
|
||||
}
|
||||
if (regex === '//') {
|
||||
regex = '/(?:)/';
|
||||
}
|
||||
this.token('REGEX', "" + regex + flags, 0, match.length);
|
||||
return match.length;
|
||||
};
|
||||
|
||||
Lexer.prototype.heregexToken = function(match) {
|
||||
var body, flags, flagsOffset, heregex, plusToken, prev, re, tag, token, tokens, value, _i, _len, _ref2, _ref3, _ref4;
|
||||
heregex = match[0], body = match[1], flags = match[2];
|
||||
if (0 > body.indexOf('#{')) {
|
||||
re = body.replace(HEREGEX_OMIT, '').replace(/\//g, '\\/');
|
||||
if (re.match(/^\*/)) {
|
||||
this.error('regular expressions cannot begin with `*`');
|
||||
}
|
||||
this.token('REGEX', "/" + (re || '(?:)') + "/" + flags, 0, heregex.length);
|
||||
return heregex.length;
|
||||
}
|
||||
this.token('IDENTIFIER', 'RegExp', 0, 0);
|
||||
this.token('CALL_START', '(', 0, 0);
|
||||
tokens = [];
|
||||
_ref2 = this.interpolateString(body, {
|
||||
regex: true
|
||||
});
|
||||
for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
|
||||
token = _ref2[_i];
|
||||
tag = token[0], value = token[1];
|
||||
if (tag === 'TOKENS') {
|
||||
tokens.push.apply(tokens, value);
|
||||
} else if (tag === 'NEOSTRING') {
|
||||
if (!(value = value.replace(HEREGEX_OMIT, ''))) {
|
||||
continue;
|
||||
}
|
||||
value = value.replace(/\\/g, '\\\\');
|
||||
token[0] = 'STRING';
|
||||
token[1] = this.makeString(value, '"', true);
|
||||
tokens.push(token);
|
||||
} else {
|
||||
this.error("Unexpected " + tag);
|
||||
}
|
||||
prev = last(this.tokens);
|
||||
plusToken = ['+', '+'];
|
||||
plusToken[2] = prev[2];
|
||||
tokens.push(plusToken);
|
||||
}
|
||||
tokens.pop();
|
||||
if (((_ref3 = tokens[0]) != null ? _ref3[0] : void 0) !== 'STRING') {
|
||||
this.token('STRING', '""', 0, 0);
|
||||
this.token('+', '+', 0, 0);
|
||||
}
|
||||
(_ref4 = this.tokens).push.apply(_ref4, tokens);
|
||||
if (flags) {
|
||||
flagsOffset = heregex.lastIndexOf(flags);
|
||||
this.token(',', ',', flagsOffset, 0);
|
||||
this.token('STRING', '"' + flags + '"', flagsOffset, flags.length);
|
||||
}
|
||||
this.token(')', ')', heregex.length - 1, 0);
|
||||
return heregex.length;
|
||||
};
|
||||
|
||||
Lexer.prototype.lineToken = function() {
|
||||
var diff, indent, match, noNewlines, size;
|
||||
if (!(match = MULTI_DENT.exec(this.chunk))) {
|
||||
return 0;
|
||||
}
|
||||
indent = match[0];
|
||||
this.seenFor = false;
|
||||
size = indent.length - 1 - indent.lastIndexOf('\n');
|
||||
noNewlines = this.unfinished();
|
||||
if (size - this.indebt === this.indent) {
|
||||
if (noNewlines) {
|
||||
this.suppressNewlines();
|
||||
} else {
|
||||
this.newlineToken(0);
|
||||
}
|
||||
return indent.length;
|
||||
}
|
||||
if (size > this.indent) {
|
||||
if (noNewlines) {
|
||||
this.indebt = size - this.indent;
|
||||
this.suppressNewlines();
|
||||
return indent.length;
|
||||
}
|
||||
diff = size - this.indent + this.outdebt;
|
||||
this.token('INDENT', diff, indent.length - size, size);
|
||||
this.indents.push(diff);
|
||||
this.ends.push('OUTDENT');
|
||||
this.outdebt = this.indebt = 0;
|
||||
} else {
|
||||
this.indebt = 0;
|
||||
this.outdentToken(this.indent - size, noNewlines, indent.length);
|
||||
}
|
||||
this.indent = size;
|
||||
return indent.length;
|
||||
};
|
||||
|
||||
Lexer.prototype.outdentToken = function(moveOut, noNewlines, outdentLength) {
|
||||
var dent, len;
|
||||
while (moveOut > 0) {
|
||||
len = this.indents.length - 1;
|
||||
if (this.indents[len] === void 0) {
|
||||
moveOut = 0;
|
||||
} else if (this.indents[len] === this.outdebt) {
|
||||
moveOut -= this.outdebt;
|
||||
this.outdebt = 0;
|
||||
} else if (this.indents[len] < this.outdebt) {
|
||||
this.outdebt -= this.indents[len];
|
||||
moveOut -= this.indents[len];
|
||||
} else {
|
||||
dent = this.indents.pop() + this.outdebt;
|
||||
moveOut -= dent;
|
||||
this.outdebt = 0;
|
||||
this.pair('OUTDENT');
|
||||
this.token('OUTDENT', dent, 0, outdentLength);
|
||||
}
|
||||
}
|
||||
if (dent) {
|
||||
this.outdebt -= moveOut;
|
||||
}
|
||||
while (this.value() === ';') {
|
||||
this.tokens.pop();
|
||||
}
|
||||
if (!(this.tag() === 'TERMINATOR' || noNewlines)) {
|
||||
this.token('TERMINATOR', '\n', outdentLength, 0);
|
||||
}
|
||||
return this;
|
||||
};
|
||||
|
||||
Lexer.prototype.whitespaceToken = function() {
|
||||
var match, nline, prev;
|
||||
if (!((match = WHITESPACE.exec(this.chunk)) || (nline = this.chunk.charAt(0) === '\n'))) {
|
||||
return 0;
|
||||
}
|
||||
prev = last(this.tokens);
|
||||
if (prev) {
|
||||
prev[match ? 'spaced' : 'newLine'] = true;
|
||||
}
|
||||
if (match) {
|
||||
return match[0].length;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
};
|
||||
|
||||
Lexer.prototype.newlineToken = function(offset) {
|
||||
while (this.value() === ';') {
|
||||
this.tokens.pop();
|
||||
}
|
||||
if (this.tag() !== 'TERMINATOR') {
|
||||
this.token('TERMINATOR', '\n', offset, 0);
|
||||
}
|
||||
return this;
|
||||
};
|
||||
|
||||
Lexer.prototype.suppressNewlines = function() {
|
||||
if (this.value() === '\\') {
|
||||
this.tokens.pop();
|
||||
}
|
||||
return this;
|
||||
};
|
||||
|
||||
Lexer.prototype.literalToken = function() {
|
||||
var match, prev, tag, value, _ref2, _ref3, _ref4, _ref5;
|
||||
if (match = OPERATOR.exec(this.chunk)) {
|
||||
value = match[0];
|
||||
if (CODE.test(value)) {
|
||||
this.tagParameters();
|
||||
}
|
||||
} else {
|
||||
value = this.chunk.charAt(0);
|
||||
}
|
||||
tag = value;
|
||||
prev = last(this.tokens);
|
||||
if (value === '=' && prev) {
|
||||
if (!prev[1].reserved && (_ref2 = prev[1], __indexOf.call(JS_FORBIDDEN, _ref2) >= 0)) {
|
||||
this.error("reserved word \"" + (this.value()) + "\" can't be assigned");
|
||||
}
|
||||
if ((_ref3 = prev[1]) === '||' || _ref3 === '&&') {
|
||||
prev[0] = 'COMPOUND_ASSIGN';
|
||||
prev[1] += '=';
|
||||
return value.length;
|
||||
}
|
||||
}
|
||||
if (value === ';') {
|
||||
this.seenFor = false;
|
||||
tag = 'TERMINATOR';
|
||||
} else if (__indexOf.call(MATH, value) >= 0) {
|
||||
tag = 'MATH';
|
||||
} else if (__indexOf.call(COMPARE, value) >= 0) {
|
||||
tag = 'COMPARE';
|
||||
} else if (__indexOf.call(COMPOUND_ASSIGN, value) >= 0) {
|
||||
tag = 'COMPOUND_ASSIGN';
|
||||
} else if (__indexOf.call(UNARY, value) >= 0) {
|
||||
tag = 'UNARY';
|
||||
} else if (__indexOf.call(SHIFT, value) >= 0) {
|
||||
tag = 'SHIFT';
|
||||
} else if (__indexOf.call(LOGIC, value) >= 0 || value === '?' && (prev != null ? prev.spaced : void 0)) {
|
||||
tag = 'LOGIC';
|
||||
} else if (prev && !prev.spaced) {
|
||||
if (value === '(' && (_ref4 = prev[0], __indexOf.call(CALLABLE, _ref4) >= 0)) {
|
||||
if (prev[0] === '?') {
|
||||
prev[0] = 'FUNC_EXIST';
|
||||
}
|
||||
tag = 'CALL_START';
|
||||
} else if (value === '[' && (_ref5 = prev[0], __indexOf.call(INDEXABLE, _ref5) >= 0)) {
|
||||
tag = 'INDEX_START';
|
||||
switch (prev[0]) {
|
||||
case '?':
|
||||
prev[0] = 'INDEX_SOAK';
|
||||
}
|
||||
}
|
||||
}
|
||||
switch (value) {
|
||||
case '(':
|
||||
case '{':
|
||||
case '[':
|
||||
this.ends.push(INVERSES[value]);
|
||||
break;
|
||||
case ')':
|
||||
case '}':
|
||||
case ']':
|
||||
this.pair(value);
|
||||
}
|
||||
this.token(tag, value);
|
||||
return value.length;
|
||||
};
|
||||
|
||||
Lexer.prototype.sanitizeHeredoc = function(doc, options) {
|
||||
var attempt, herecomment, indent, match, _ref2;
|
||||
indent = options.indent, herecomment = options.herecomment;
|
||||
if (herecomment) {
|
||||
if (HEREDOC_ILLEGAL.test(doc)) {
|
||||
this.error("block comment cannot contain \"*/\", starting");
|
||||
}
|
||||
if (doc.indexOf('\n') < 0) {
|
||||
return doc;
|
||||
}
|
||||
} else {
|
||||
while (match = HEREDOC_INDENT.exec(doc)) {
|
||||
attempt = match[1];
|
||||
if (indent === null || (0 < (_ref2 = attempt.length) && _ref2 < indent.length)) {
|
||||
indent = attempt;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (indent) {
|
||||
doc = doc.replace(RegExp("\\n" + indent, "g"), '\n');
|
||||
}
|
||||
if (!herecomment) {
|
||||
doc = doc.replace(/^\n/, '');
|
||||
}
|
||||
return doc;
|
||||
};
|
||||
|
||||
Lexer.prototype.tagParameters = function() {
|
||||
var i, stack, tok, tokens;
|
||||
if (this.tag() !== ')') {
|
||||
return this;
|
||||
}
|
||||
stack = [];
|
||||
tokens = this.tokens;
|
||||
i = tokens.length;
|
||||
tokens[--i][0] = 'PARAM_END';
|
||||
while (tok = tokens[--i]) {
|
||||
switch (tok[0]) {
|
||||
case ')':
|
||||
stack.push(tok);
|
||||
break;
|
||||
case '(':
|
||||
case 'CALL_START':
|
||||
if (stack.length) {
|
||||
stack.pop();
|
||||
} else if (tok[0] === '(') {
|
||||
tok[0] = 'PARAM_START';
|
||||
return this;
|
||||
} else {
|
||||
return this;
|
||||
}
|
||||
}
|
||||
}
|
||||
return this;
|
||||
};
|
||||
|
||||
Lexer.prototype.closeIndentation = function() {
|
||||
return this.outdentToken(this.indent);
|
||||
};
|
||||
|
||||
Lexer.prototype.balancedString = function(str, end) {
|
||||
var continueCount, i, letter, match, prev, stack, _i, _ref2;
|
||||
continueCount = 0;
|
||||
stack = [end];
|
||||
for (i = _i = 1, _ref2 = str.length; 1 <= _ref2 ? _i < _ref2 : _i > _ref2; i = 1 <= _ref2 ? ++_i : --_i) {
|
||||
if (continueCount) {
|
||||
--continueCount;
|
||||
continue;
|
||||
}
|
||||
switch (letter = str.charAt(i)) {
|
||||
case '\\':
|
||||
++continueCount;
|
||||
continue;
|
||||
case end:
|
||||
stack.pop();
|
||||
if (!stack.length) {
|
||||
return str.slice(0, +i + 1 || 9e9);
|
||||
}
|
||||
end = stack[stack.length - 1];
|
||||
continue;
|
||||
}
|
||||
if (end === '}' && (letter === '"' || letter === "'")) {
|
||||
stack.push(end = letter);
|
||||
} else if (end === '}' && letter === '/' && (match = HEREGEX.exec(str.slice(i)) || REGEX.exec(str.slice(i)))) {
|
||||
continueCount += match[0].length - 1;
|
||||
} else if (end === '}' && letter === '{') {
|
||||
stack.push(end = '}');
|
||||
} else if (end === '"' && prev === '#' && letter === '{') {
|
||||
stack.push(end = '}');
|
||||
}
|
||||
prev = letter;
|
||||
}
|
||||
return this.error("missing " + (stack.pop()) + ", starting");
|
||||
};
|
||||
|
||||
Lexer.prototype.interpolateString = function(str, options) {
|
||||
var column, expr, heredoc, i, inner, interpolated, len, letter, lexedLength, line, locationToken, nested, offsetInChunk, pi, plusToken, popped, regex, rparen, strOffset, tag, token, tokens, value, _i, _len, _ref2, _ref3, _ref4;
|
||||
if (options == null) {
|
||||
options = {};
|
||||
}
|
||||
heredoc = options.heredoc, regex = options.regex, offsetInChunk = options.offsetInChunk, strOffset = options.strOffset, lexedLength = options.lexedLength;
|
||||
offsetInChunk = offsetInChunk || 0;
|
||||
strOffset = strOffset || 0;
|
||||
lexedLength = lexedLength || str.length;
|
||||
if (heredoc && str.length > 0 && str[0] === '\n') {
|
||||
str = str.slice(1);
|
||||
strOffset++;
|
||||
}
|
||||
tokens = [];
|
||||
pi = 0;
|
||||
i = -1;
|
||||
while (letter = str.charAt(i += 1)) {
|
||||
if (letter === '\\') {
|
||||
i += 1;
|
||||
continue;
|
||||
}
|
||||
if (!(letter === '#' && str.charAt(i + 1) === '{' && (expr = this.balancedString(str.slice(i + 1), '}')))) {
|
||||
continue;
|
||||
}
|
||||
if (pi < i) {
|
||||
tokens.push(this.makeToken('NEOSTRING', str.slice(pi, i), strOffset + pi));
|
||||
}
|
||||
inner = expr.slice(1, -1);
|
||||
if (inner.length) {
|
||||
_ref2 = this.getLineAndColumnFromChunk(strOffset + i + 1), line = _ref2[0], column = _ref2[1];
|
||||
nested = new Lexer().tokenize(inner, {
|
||||
line: line,
|
||||
column: column,
|
||||
rewrite: false
|
||||
});
|
||||
popped = nested.pop();
|
||||
if (((_ref3 = nested[0]) != null ? _ref3[0] : void 0) === 'TERMINATOR') {
|
||||
popped = nested.shift();
|
||||
}
|
||||
if (len = nested.length) {
|
||||
if (len > 1) {
|
||||
nested.unshift(this.makeToken('(', '(', strOffset + i + 1, 0));
|
||||
nested.push(this.makeToken(')', ')', strOffset + i + 1 + inner.length, 0));
|
||||
}
|
||||
tokens.push(['TOKENS', nested]);
|
||||
}
|
||||
}
|
||||
i += expr.length;
|
||||
pi = i + 1;
|
||||
}
|
||||
if ((i > pi && pi < str.length)) {
|
||||
tokens.push(this.makeToken('NEOSTRING', str.slice(pi), strOffset + pi));
|
||||
}
|
||||
if (regex) {
|
||||
return tokens;
|
||||
}
|
||||
if (!tokens.length) {
|
||||
return this.token('STRING', '""', offsetInChunk, lexedLength);
|
||||
}
|
||||
if (tokens[0][0] !== 'NEOSTRING') {
|
||||
tokens.unshift(this.makeToken('NEOSTRING', '', offsetInChunk));
|
||||
}
|
||||
if (interpolated = tokens.length > 1) {
|
||||
this.token('(', '(', offsetInChunk, 0);
|
||||
}
|
||||
for (i = _i = 0, _len = tokens.length; _i < _len; i = ++_i) {
|
||||
token = tokens[i];
|
||||
tag = token[0], value = token[1];
|
||||
if (i) {
|
||||
if (i) {
|
||||
plusToken = this.token('+', '+');
|
||||
}
|
||||
locationToken = tag === 'TOKENS' ? value[0] : token;
|
||||
plusToken[2] = {
|
||||
first_line: locationToken[2].first_line,
|
||||
first_column: locationToken[2].first_column,
|
||||
last_line: locationToken[2].first_line,
|
||||
last_column: locationToken[2].first_column
|
||||
};
|
||||
}
|
||||
if (tag === 'TOKENS') {
|
||||
(_ref4 = this.tokens).push.apply(_ref4, value);
|
||||
} else if (tag === 'NEOSTRING') {
|
||||
token[0] = 'STRING';
|
||||
token[1] = this.makeString(value, '"', heredoc);
|
||||
this.tokens.push(token);
|
||||
} else {
|
||||
this.error("Unexpected " + tag);
|
||||
}
|
||||
}
|
||||
if (interpolated) {
|
||||
rparen = this.makeToken(')', ')', offsetInChunk + lexedLength, 0);
|
||||
rparen.stringEnd = true;
|
||||
this.tokens.push(rparen);
|
||||
}
|
||||
return tokens;
|
||||
};
|
||||
|
||||
Lexer.prototype.pair = function(tag) {
|
||||
var size, wanted;
|
||||
if (tag !== (wanted = last(this.ends))) {
|
||||
if ('OUTDENT' !== wanted) {
|
||||
this.error("unmatched " + tag);
|
||||
}
|
||||
this.indent -= size = last(this.indents);
|
||||
this.outdentToken(size, true);
|
||||
return this.pair(tag);
|
||||
}
|
||||
return this.ends.pop();
|
||||
};
|
||||
|
||||
Lexer.prototype.getLineAndColumnFromChunk = function(offset) {
|
||||
var column, lineCount, lines, string;
|
||||
if (offset === 0) {
|
||||
return [this.chunkLine, this.chunkColumn];
|
||||
}
|
||||
if (offset >= this.chunk.length) {
|
||||
string = this.chunk;
|
||||
} else {
|
||||
string = this.chunk.slice(0, +(offset - 1) + 1 || 9e9);
|
||||
}
|
||||
lineCount = count(string, '\n');
|
||||
column = this.chunkColumn;
|
||||
if (lineCount > 0) {
|
||||
lines = string.split('\n');
|
||||
column = last(lines).length;
|
||||
} else {
|
||||
column += string.length;
|
||||
}
|
||||
return [this.chunkLine + lineCount, column];
|
||||
};
|
||||
|
||||
Lexer.prototype.makeToken = function(tag, value, offsetInChunk, length) {
|
||||
var lastCharacter, locationData, token, _ref2, _ref3;
|
||||
if (offsetInChunk == null) {
|
||||
offsetInChunk = 0;
|
||||
}
|
||||
if (length == null) {
|
||||
length = value.length;
|
||||
}
|
||||
locationData = {};
|
||||
_ref2 = this.getLineAndColumnFromChunk(offsetInChunk), locationData.first_line = _ref2[0], locationData.first_column = _ref2[1];
|
||||
lastCharacter = Math.max(0, length - 1);
|
||||
_ref3 = this.getLineAndColumnFromChunk(offsetInChunk + lastCharacter), locationData.last_line = _ref3[0], locationData.last_column = _ref3[1];
|
||||
token = [tag, value, locationData];
|
||||
return token;
|
||||
};
|
||||
|
||||
Lexer.prototype.token = function(tag, value, offsetInChunk, length) {
|
||||
var token;
|
||||
token = this.makeToken(tag, value, offsetInChunk, length);
|
||||
this.tokens.push(token);
|
||||
return token;
|
||||
};
|
||||
|
||||
Lexer.prototype.tag = function(index, tag) {
|
||||
var tok;
|
||||
return (tok = last(this.tokens, index)) && (tag ? tok[0] = tag : tok[0]);
|
||||
};
|
||||
|
||||
Lexer.prototype.value = function(index, val) {
|
||||
var tok;
|
||||
return (tok = last(this.tokens, index)) && (val ? tok[1] = val : tok[1]);
|
||||
};
|
||||
|
||||
Lexer.prototype.unfinished = function() {
|
||||
var _ref2;
|
||||
return LINE_CONTINUER.test(this.chunk) || ((_ref2 = this.tag()) === '\\' || _ref2 === '.' || _ref2 === '?.' || _ref2 === '?::' || _ref2 === 'UNARY' || _ref2 === 'MATH' || _ref2 === '+' || _ref2 === '-' || _ref2 === 'SHIFT' || _ref2 === 'RELATION' || _ref2 === 'COMPARE' || _ref2 === 'LOGIC' || _ref2 === 'THROW' || _ref2 === 'EXTENDS');
|
||||
};
|
||||
|
||||
Lexer.prototype.escapeLines = function(str, heredoc) {
|
||||
return str.replace(MULTILINER, heredoc ? '\\n' : '');
|
||||
};
|
||||
|
||||
Lexer.prototype.makeString = function(body, quote, heredoc) {
|
||||
if (!body) {
|
||||
return quote + quote;
|
||||
}
|
||||
body = body.replace(/\\([\s\S])/g, function(match, contents) {
|
||||
if (contents === '\n' || contents === quote) {
|
||||
return contents;
|
||||
} else {
|
||||
return match;
|
||||
}
|
||||
});
|
||||
body = body.replace(RegExp("" + quote, "g"), '\\$&');
|
||||
return quote + this.escapeLines(body, heredoc) + quote;
|
||||
};
|
||||
|
||||
Lexer.prototype.error = function(message) {
|
||||
return throwSyntaxError(message, {
|
||||
first_line: this.chunkLine,
|
||||
first_column: this.chunkColumn
|
||||
});
|
||||
};
|
||||
|
||||
return Lexer;
|
||||
|
||||
})();
|
||||
|
||||
JS_KEYWORDS = ['true', 'false', 'null', 'this', 'new', 'delete', 'typeof', 'in', 'instanceof', 'return', 'throw', 'break', 'continue', 'debugger', 'if', 'else', 'switch', 'for', 'while', 'do', 'try', 'catch', 'finally', 'class', 'extends', 'super'];
|
||||
|
||||
COFFEE_KEYWORDS = ['undefined', 'then', 'unless', 'until', 'loop', 'of', 'by', 'when'];
|
||||
|
||||
COFFEE_ALIAS_MAP = {
|
||||
and: '&&',
|
||||
or: '||',
|
||||
is: '==',
|
||||
isnt: '!=',
|
||||
not: '!',
|
||||
yes: 'true',
|
||||
no: 'false',
|
||||
on: 'true',
|
||||
off: 'false'
|
||||
};
|
||||
|
||||
COFFEE_ALIASES = (function() {
|
||||
var _results;
|
||||
_results = [];
|
||||
for (key in COFFEE_ALIAS_MAP) {
|
||||
_results.push(key);
|
||||
}
|
||||
return _results;
|
||||
})();
|
||||
|
||||
COFFEE_KEYWORDS = COFFEE_KEYWORDS.concat(COFFEE_ALIASES);
|
||||
|
||||
RESERVED = ['case', 'default', 'function', 'var', 'void', 'with', 'const', 'let', 'enum', 'export', 'import', 'native', '__hasProp', '__extends', '__slice', '__bind', '__indexOf', 'implements', 'interface', 'package', 'private', 'protected', 'public', 'static', 'yield'];
|
||||
|
||||
STRICT_PROSCRIBED = ['arguments', 'eval'];
|
||||
|
||||
JS_FORBIDDEN = JS_KEYWORDS.concat(RESERVED).concat(STRICT_PROSCRIBED);
|
||||
|
||||
exports.RESERVED = RESERVED.concat(JS_KEYWORDS).concat(COFFEE_KEYWORDS).concat(STRICT_PROSCRIBED);
|
||||
|
||||
exports.STRICT_PROSCRIBED = STRICT_PROSCRIBED;
|
||||
|
||||
BOM = 65279;
|
||||
|
||||
IDENTIFIER = /^([$A-Za-z_\x7f-\uffff][$\w\x7f-\uffff]*)([^\n\S]*:(?!:))?/;
|
||||
|
||||
NUMBER = /^0b[01]+|^0o[0-7]+|^0x[\da-f]+|^\d*\.?\d+(?:e[+-]?\d+)?/i;
|
||||
|
||||
HEREDOC = /^("""|''')([\s\S]*?)(?:\n[^\n\S]*)?\1/;
|
||||
|
||||
OPERATOR = /^(?:[-=]>|[-+*\/%<>&|^!?=]=|>>>=?|([-+:])\1|([&|<>])\2=?|\?(\.|::)|\.{2,3})/;
|
||||
|
||||
WHITESPACE = /^[^\n\S]+/;
|
||||
|
||||
COMMENT = /^###([^#][\s\S]*?)(?:###[^\n\S]*|(?:###)$)|^(?:\s*#(?!##[^#]).*)+/;
|
||||
|
||||
CODE = /^[-=]>/;
|
||||
|
||||
MULTI_DENT = /^(?:\n[^\n\S]*)+/;
|
||||
|
||||
SIMPLESTR = /^'[^\\']*(?:\\.[^\\']*)*'/;
|
||||
|
||||
JSTOKEN = /^`[^\\`]*(?:\\.[^\\`]*)*`/;
|
||||
|
||||
REGEX = /^(\/(?![\s=])[^[\/\n\\]*(?:(?:\\[\s\S]|\[[^\]\n\\]*(?:\\[\s\S][^\]\n\\]*)*])[^[\/\n\\]*)*\/)([imgy]{0,4})(?!\w)/;
|
||||
|
||||
HEREGEX = /^\/{3}([\s\S]+?)\/{3}([imgy]{0,4})(?!\w)/;
|
||||
|
||||
HEREGEX_OMIT = /\s+(?:#.*)?/g;
|
||||
|
||||
MULTILINER = /\n/g;
|
||||
|
||||
HEREDOC_INDENT = /\n+([^\n\S]*)/g;
|
||||
|
||||
HEREDOC_ILLEGAL = /\*\//;
|
||||
|
||||
LINE_CONTINUER = /^\s*(?:,|\??\.(?![.\d])|::)/;
|
||||
|
||||
TRAILING_SPACES = /\s+$/;
|
||||
|
||||
COMPOUND_ASSIGN = ['-=', '+=', '/=', '*=', '%=', '||=', '&&=', '?=', '<<=', '>>=', '>>>=', '&=', '^=', '|='];
|
||||
|
||||
UNARY = ['!', '~', 'NEW', 'TYPEOF', 'DELETE', 'DO'];
|
||||
|
||||
LOGIC = ['&&', '||', '&', '|', '^'];
|
||||
|
||||
SHIFT = ['<<', '>>', '>>>'];
|
||||
|
||||
COMPARE = ['==', '!=', '<', '>', '<=', '>='];
|
||||
|
||||
MATH = ['*', '/', '%'];
|
||||
|
||||
RELATION = ['IN', 'OF', 'INSTANCEOF'];
|
||||
|
||||
BOOL = ['TRUE', 'FALSE'];
|
||||
|
||||
NOT_REGEX = ['NUMBER', 'REGEX', 'BOOL', 'NULL', 'UNDEFINED', '++', '--'];
|
||||
|
||||
NOT_SPACED_REGEX = NOT_REGEX.concat(')', '}', 'THIS', 'IDENTIFIER', 'STRING', ']');
|
||||
|
||||
CALLABLE = ['IDENTIFIER', 'STRING', 'REGEX', ')', ']', '}', '?', '::', '@', 'THIS', 'SUPER'];
|
||||
|
||||
INDEXABLE = CALLABLE.concat('NUMBER', 'BOOL', 'NULL', 'UNDEFINED');
|
||||
|
||||
LINE_BREAK = ['INDENT', 'OUTDENT', 'TERMINATOR'];
|
||||
|
||||
}).call(this);
|
3048
node_modules/karma-coffee-preprocessor/node_modules/coffee-script/lib/coffee-script/nodes.js
generated
vendored
3048
node_modules/karma-coffee-preprocessor/node_modules/coffee-script/lib/coffee-script/nodes.js
generated
vendored
File diff suppressed because it is too large
Load Diff
139
node_modules/karma-coffee-preprocessor/node_modules/coffee-script/lib/coffee-script/optparse.js
generated
vendored
139
node_modules/karma-coffee-preprocessor/node_modules/coffee-script/lib/coffee-script/optparse.js
generated
vendored
@ -1,139 +0,0 @@
|
||||
// Generated by CoffeeScript 1.6.3
|
||||
(function() {
|
||||
var LONG_FLAG, MULTI_FLAG, OPTIONAL, OptionParser, SHORT_FLAG, buildRule, buildRules, normalizeArguments, repeat;
|
||||
|
||||
repeat = require('./helpers').repeat;
|
||||
|
||||
exports.OptionParser = OptionParser = (function() {
|
||||
function OptionParser(rules, banner) {
|
||||
this.banner = banner;
|
||||
this.rules = buildRules(rules);
|
||||
}
|
||||
|
||||
OptionParser.prototype.parse = function(args) {
|
||||
var arg, i, isOption, matchedRule, options, originalArgs, pos, rule, seenNonOptionArg, skippingArgument, value, _i, _j, _len, _len1, _ref;
|
||||
options = {
|
||||
"arguments": []
|
||||
};
|
||||
skippingArgument = false;
|
||||
originalArgs = args;
|
||||
args = normalizeArguments(args);
|
||||
for (i = _i = 0, _len = args.length; _i < _len; i = ++_i) {
|
||||
arg = args[i];
|
||||
if (skippingArgument) {
|
||||
skippingArgument = false;
|
||||
continue;
|
||||
}
|
||||
if (arg === '--') {
|
||||
pos = originalArgs.indexOf('--');
|
||||
options["arguments"] = options["arguments"].concat(originalArgs.slice(pos + 1));
|
||||
break;
|
||||
}
|
||||
isOption = !!(arg.match(LONG_FLAG) || arg.match(SHORT_FLAG));
|
||||
seenNonOptionArg = options["arguments"].length > 0;
|
||||
if (!seenNonOptionArg) {
|
||||
matchedRule = false;
|
||||
_ref = this.rules;
|
||||
for (_j = 0, _len1 = _ref.length; _j < _len1; _j++) {
|
||||
rule = _ref[_j];
|
||||
if (rule.shortFlag === arg || rule.longFlag === arg) {
|
||||
value = true;
|
||||
if (rule.hasArgument) {
|
||||
skippingArgument = true;
|
||||
value = args[i + 1];
|
||||
}
|
||||
options[rule.name] = rule.isList ? (options[rule.name] || []).concat(value) : value;
|
||||
matchedRule = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (isOption && !matchedRule) {
|
||||
throw new Error("unrecognized option: " + arg);
|
||||
}
|
||||
}
|
||||
if (seenNonOptionArg || !isOption) {
|
||||
options["arguments"].push(arg);
|
||||
}
|
||||
}
|
||||
return options;
|
||||
};
|
||||
|
||||
OptionParser.prototype.help = function() {
|
||||
var letPart, lines, rule, spaces, _i, _len, _ref;
|
||||
lines = [];
|
||||
if (this.banner) {
|
||||
lines.unshift("" + this.banner + "\n");
|
||||
}
|
||||
_ref = this.rules;
|
||||
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
||||
rule = _ref[_i];
|
||||
spaces = 15 - rule.longFlag.length;
|
||||
spaces = spaces > 0 ? repeat(' ', spaces) : '';
|
||||
letPart = rule.shortFlag ? rule.shortFlag + ', ' : ' ';
|
||||
lines.push(' ' + letPart + rule.longFlag + spaces + rule.description);
|
||||
}
|
||||
return "\n" + (lines.join('\n')) + "\n";
|
||||
};
|
||||
|
||||
return OptionParser;
|
||||
|
||||
})();
|
||||
|
||||
LONG_FLAG = /^(--\w[\w\-]*)/;
|
||||
|
||||
SHORT_FLAG = /^(-\w)$/;
|
||||
|
||||
MULTI_FLAG = /^-(\w{2,})/;
|
||||
|
||||
OPTIONAL = /\[(\w+(\*?))\]/;
|
||||
|
||||
buildRules = function(rules) {
|
||||
var tuple, _i, _len, _results;
|
||||
_results = [];
|
||||
for (_i = 0, _len = rules.length; _i < _len; _i++) {
|
||||
tuple = rules[_i];
|
||||
if (tuple.length < 3) {
|
||||
tuple.unshift(null);
|
||||
}
|
||||
_results.push(buildRule.apply(null, tuple));
|
||||
}
|
||||
return _results;
|
||||
};
|
||||
|
||||
buildRule = function(shortFlag, longFlag, description, options) {
|
||||
var match;
|
||||
if (options == null) {
|
||||
options = {};
|
||||
}
|
||||
match = longFlag.match(OPTIONAL);
|
||||
longFlag = longFlag.match(LONG_FLAG)[1];
|
||||
return {
|
||||
name: longFlag.substr(2),
|
||||
shortFlag: shortFlag,
|
||||
longFlag: longFlag,
|
||||
description: description,
|
||||
hasArgument: !!(match && match[1]),
|
||||
isList: !!(match && match[2])
|
||||
};
|
||||
};
|
||||
|
||||
normalizeArguments = function(args) {
|
||||
var arg, l, match, result, _i, _j, _len, _len1, _ref;
|
||||
args = args.slice(0);
|
||||
result = [];
|
||||
for (_i = 0, _len = args.length; _i < _len; _i++) {
|
||||
arg = args[_i];
|
||||
if (match = arg.match(MULTI_FLAG)) {
|
||||
_ref = match[1].split('');
|
||||
for (_j = 0, _len1 = _ref.length; _j < _len1; _j++) {
|
||||
l = _ref[_j];
|
||||
result.push('-' + l);
|
||||
}
|
||||
} else {
|
||||
result.push(arg);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
};
|
||||
|
||||
}).call(this);
|
610
node_modules/karma-coffee-preprocessor/node_modules/coffee-script/lib/coffee-script/parser.js
generated
vendored
610
node_modules/karma-coffee-preprocessor/node_modules/coffee-script/lib/coffee-script/parser.js
generated
vendored
File diff suppressed because one or more lines are too long
159
node_modules/karma-coffee-preprocessor/node_modules/coffee-script/lib/coffee-script/repl.js
generated
vendored
159
node_modules/karma-coffee-preprocessor/node_modules/coffee-script/lib/coffee-script/repl.js
generated
vendored
@ -1,159 +0,0 @@
|
||||
// Generated by CoffeeScript 1.6.3
|
||||
(function() {
|
||||
var CoffeeScript, addHistory, addMultilineHandler, fs, merge, nodeREPL, path, prettyErrorMessage, replDefaults, vm, _ref;
|
||||
|
||||
fs = require('fs');
|
||||
|
||||
path = require('path');
|
||||
|
||||
vm = require('vm');
|
||||
|
||||
nodeREPL = require('repl');
|
||||
|
||||
CoffeeScript = require('./coffee-script');
|
||||
|
||||
_ref = require('./helpers'), merge = _ref.merge, prettyErrorMessage = _ref.prettyErrorMessage;
|
||||
|
||||
replDefaults = {
|
||||
prompt: 'coffee> ',
|
||||
historyFile: process.env.HOME ? path.join(process.env.HOME, '.coffee_history') : void 0,
|
||||
historyMaxInputSize: 10240,
|
||||
"eval": function(input, context, filename, cb) {
|
||||
var Assign, Block, Literal, Value, ast, err, js, _ref1;
|
||||
input = input.replace(/\uFF00/g, '\n');
|
||||
input = input.replace(/^\(([\s\S]*)\n\)$/m, '$1');
|
||||
_ref1 = require('./nodes'), Block = _ref1.Block, Assign = _ref1.Assign, Value = _ref1.Value, Literal = _ref1.Literal;
|
||||
try {
|
||||
ast = CoffeeScript.nodes(input);
|
||||
ast = new Block([new Assign(new Value(new Literal('_')), ast, '=')]);
|
||||
js = ast.compile({
|
||||
bare: true,
|
||||
locals: Object.keys(context)
|
||||
});
|
||||
return cb(null, vm.runInContext(js, context, filename));
|
||||
} catch (_error) {
|
||||
err = _error;
|
||||
return cb(prettyErrorMessage(err, filename, input, true));
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
addMultilineHandler = function(repl) {
|
||||
var inputStream, multiline, nodeLineListener, outputStream, rli;
|
||||
rli = repl.rli, inputStream = repl.inputStream, outputStream = repl.outputStream;
|
||||
multiline = {
|
||||
enabled: false,
|
||||
initialPrompt: repl.prompt.replace(/^[^> ]*/, function(x) {
|
||||
return x.replace(/./g, '-');
|
||||
}),
|
||||
prompt: repl.prompt.replace(/^[^> ]*>?/, function(x) {
|
||||
return x.replace(/./g, '.');
|
||||
}),
|
||||
buffer: ''
|
||||
};
|
||||
nodeLineListener = rli.listeners('line')[0];
|
||||
rli.removeListener('line', nodeLineListener);
|
||||
rli.on('line', function(cmd) {
|
||||
if (multiline.enabled) {
|
||||
multiline.buffer += "" + cmd + "\n";
|
||||
rli.setPrompt(multiline.prompt);
|
||||
rli.prompt(true);
|
||||
} else {
|
||||
nodeLineListener(cmd);
|
||||
}
|
||||
});
|
||||
return inputStream.on('keypress', function(char, key) {
|
||||
if (!(key && key.ctrl && !key.meta && !key.shift && key.name === 'v')) {
|
||||
return;
|
||||
}
|
||||
if (multiline.enabled) {
|
||||
if (!multiline.buffer.match(/\n/)) {
|
||||
multiline.enabled = !multiline.enabled;
|
||||
rli.setPrompt(repl.prompt);
|
||||
rli.prompt(true);
|
||||
return;
|
||||
}
|
||||
if ((rli.line != null) && !rli.line.match(/^\s*$/)) {
|
||||
return;
|
||||
}
|
||||
multiline.enabled = !multiline.enabled;
|
||||
rli.line = '';
|
||||
rli.cursor = 0;
|
||||
rli.output.cursorTo(0);
|
||||
rli.output.clearLine(1);
|
||||
multiline.buffer = multiline.buffer.replace(/\n/g, '\uFF00');
|
||||
rli.emit('line', multiline.buffer);
|
||||
multiline.buffer = '';
|
||||
} else {
|
||||
multiline.enabled = !multiline.enabled;
|
||||
rli.setPrompt(multiline.initialPrompt);
|
||||
rli.prompt(true);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
addHistory = function(repl, filename, maxSize) {
|
||||
var buffer, fd, lastLine, readFd, size, stat;
|
||||
lastLine = null;
|
||||
try {
|
||||
stat = fs.statSync(filename);
|
||||
size = Math.min(maxSize, stat.size);
|
||||
readFd = fs.openSync(filename, 'r');
|
||||
buffer = new Buffer(size);
|
||||
fs.readSync(readFd, buffer, 0, size, stat.size - size);
|
||||
repl.rli.history = buffer.toString().split('\n').reverse();
|
||||
if (stat.size > maxSize) {
|
||||
repl.rli.history.pop();
|
||||
}
|
||||
if (repl.rli.history[0] === '') {
|
||||
repl.rli.history.shift();
|
||||
}
|
||||
repl.rli.historyIndex = -1;
|
||||
lastLine = repl.rli.history[0];
|
||||
} catch (_error) {}
|
||||
fd = fs.openSync(filename, 'a');
|
||||
repl.rli.addListener('line', function(code) {
|
||||
if (code && code.length && code !== '.history' && lastLine !== code) {
|
||||
fs.write(fd, "" + code + "\n");
|
||||
return lastLine = code;
|
||||
}
|
||||
});
|
||||
repl.rli.on('exit', function() {
|
||||
return fs.close(fd);
|
||||
});
|
||||
return repl.commands['.history'] = {
|
||||
help: 'Show command history',
|
||||
action: function() {
|
||||
repl.outputStream.write("" + (repl.rli.history.slice(0).reverse().join('\n')) + "\n");
|
||||
return repl.displayPrompt();
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
module.exports = {
|
||||
start: function(opts) {
|
||||
var build, major, minor, repl, _ref1;
|
||||
if (opts == null) {
|
||||
opts = {};
|
||||
}
|
||||
_ref1 = process.versions.node.split('.').map(function(n) {
|
||||
return parseInt(n);
|
||||
}), major = _ref1[0], minor = _ref1[1], build = _ref1[2];
|
||||
if (major === 0 && minor < 8) {
|
||||
console.warn("Node 0.8.0+ required for CoffeeScript REPL");
|
||||
process.exit(1);
|
||||
}
|
||||
opts = merge(replDefaults, opts);
|
||||
repl = nodeREPL.start(opts);
|
||||
repl.on('exit', function() {
|
||||
return repl.outputStream.write('\n');
|
||||
});
|
||||
addMultilineHandler(repl);
|
||||
if (opts.historyFile) {
|
||||
addHistory(repl, opts.historyFile, opts.historyMaxInputSize);
|
||||
}
|
||||
return repl;
|
||||
}
|
||||
};
|
||||
|
||||
}).call(this);
|
485
node_modules/karma-coffee-preprocessor/node_modules/coffee-script/lib/coffee-script/rewriter.js
generated
vendored
485
node_modules/karma-coffee-preprocessor/node_modules/coffee-script/lib/coffee-script/rewriter.js
generated
vendored
@ -1,485 +0,0 @@
|
||||
// Generated by CoffeeScript 1.6.3
|
||||
(function() {
|
||||
var BALANCED_PAIRS, EXPRESSION_CLOSE, EXPRESSION_END, EXPRESSION_START, IMPLICIT_CALL, IMPLICIT_END, IMPLICIT_FUNC, IMPLICIT_UNSPACED_CALL, INVERSES, LINEBREAKS, SINGLE_CLOSERS, SINGLE_LINERS, generate, left, rite, _i, _len, _ref,
|
||||
__indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; },
|
||||
__slice = [].slice;
|
||||
|
||||
generate = function(tag, value) {
|
||||
var tok;
|
||||
tok = [tag, value];
|
||||
tok.generated = true;
|
||||
return tok;
|
||||
};
|
||||
|
||||
exports.Rewriter = (function() {
|
||||
function Rewriter() {}
|
||||
|
||||
Rewriter.prototype.rewrite = function(tokens) {
|
||||
this.tokens = tokens;
|
||||
this.removeLeadingNewlines();
|
||||
this.removeMidExpressionNewlines();
|
||||
this.closeOpenCalls();
|
||||
this.closeOpenIndexes();
|
||||
this.addImplicitIndentation();
|
||||
this.tagPostfixConditionals();
|
||||
this.addImplicitBracesAndParens();
|
||||
this.addLocationDataToGeneratedTokens();
|
||||
return this.tokens;
|
||||
};
|
||||
|
||||
Rewriter.prototype.scanTokens = function(block) {
|
||||
var i, token, tokens;
|
||||
tokens = this.tokens;
|
||||
i = 0;
|
||||
while (token = tokens[i]) {
|
||||
i += block.call(this, token, i, tokens);
|
||||
}
|
||||
return true;
|
||||
};
|
||||
|
||||
Rewriter.prototype.detectEnd = function(i, condition, action) {
|
||||
var levels, token, tokens, _ref, _ref1;
|
||||
tokens = this.tokens;
|
||||
levels = 0;
|
||||
while (token = tokens[i]) {
|
||||
if (levels === 0 && condition.call(this, token, i)) {
|
||||
return action.call(this, token, i);
|
||||
}
|
||||
if (!token || levels < 0) {
|
||||
return action.call(this, token, i - 1);
|
||||
}
|
||||
if (_ref = token[0], __indexOf.call(EXPRESSION_START, _ref) >= 0) {
|
||||
levels += 1;
|
||||
} else if (_ref1 = token[0], __indexOf.call(EXPRESSION_END, _ref1) >= 0) {
|
||||
levels -= 1;
|
||||
}
|
||||
i += 1;
|
||||
}
|
||||
return i - 1;
|
||||
};
|
||||
|
||||
Rewriter.prototype.removeLeadingNewlines = function() {
|
||||
var i, tag, _i, _len, _ref;
|
||||
_ref = this.tokens;
|
||||
for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {
|
||||
tag = _ref[i][0];
|
||||
if (tag !== 'TERMINATOR') {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (i) {
|
||||
return this.tokens.splice(0, i);
|
||||
}
|
||||
};
|
||||
|
||||
Rewriter.prototype.removeMidExpressionNewlines = function() {
|
||||
return this.scanTokens(function(token, i, tokens) {
|
||||
var _ref;
|
||||
if (!(token[0] === 'TERMINATOR' && (_ref = this.tag(i + 1), __indexOf.call(EXPRESSION_CLOSE, _ref) >= 0))) {
|
||||
return 1;
|
||||
}
|
||||
tokens.splice(i, 1);
|
||||
return 0;
|
||||
});
|
||||
};
|
||||
|
||||
Rewriter.prototype.closeOpenCalls = function() {
|
||||
var action, condition;
|
||||
condition = function(token, i) {
|
||||
var _ref;
|
||||
return ((_ref = token[0]) === ')' || _ref === 'CALL_END') || token[0] === 'OUTDENT' && this.tag(i - 1) === ')';
|
||||
};
|
||||
action = function(token, i) {
|
||||
return this.tokens[token[0] === 'OUTDENT' ? i - 1 : i][0] = 'CALL_END';
|
||||
};
|
||||
return this.scanTokens(function(token, i) {
|
||||
if (token[0] === 'CALL_START') {
|
||||
this.detectEnd(i + 1, condition, action);
|
||||
}
|
||||
return 1;
|
||||
});
|
||||
};
|
||||
|
||||
Rewriter.prototype.closeOpenIndexes = function() {
|
||||
var action, condition;
|
||||
condition = function(token, i) {
|
||||
var _ref;
|
||||
return (_ref = token[0]) === ']' || _ref === 'INDEX_END';
|
||||
};
|
||||
action = function(token, i) {
|
||||
return token[0] = 'INDEX_END';
|
||||
};
|
||||
return this.scanTokens(function(token, i) {
|
||||
if (token[0] === 'INDEX_START') {
|
||||
this.detectEnd(i + 1, condition, action);
|
||||
}
|
||||
return 1;
|
||||
});
|
||||
};
|
||||
|
||||
Rewriter.prototype.matchTags = function() {
|
||||
var fuzz, i, j, pattern, _i, _ref, _ref1;
|
||||
i = arguments[0], pattern = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
|
||||
fuzz = 0;
|
||||
for (j = _i = 0, _ref = pattern.length; 0 <= _ref ? _i < _ref : _i > _ref; j = 0 <= _ref ? ++_i : --_i) {
|
||||
while (this.tag(i + j + fuzz) === 'HERECOMMENT') {
|
||||
fuzz += 2;
|
||||
}
|
||||
if (pattern[j] == null) {
|
||||
continue;
|
||||
}
|
||||
if (typeof pattern[j] === 'string') {
|
||||
pattern[j] = [pattern[j]];
|
||||
}
|
||||
if (_ref1 = this.tag(i + j + fuzz), __indexOf.call(pattern[j], _ref1) < 0) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
};
|
||||
|
||||
Rewriter.prototype.looksObjectish = function(j) {
|
||||
return this.matchTags(j, '@', null, ':') || this.matchTags(j, null, ':');
|
||||
};
|
||||
|
||||
Rewriter.prototype.findTagsBackwards = function(i, tags) {
|
||||
var backStack, _ref, _ref1, _ref2, _ref3, _ref4, _ref5;
|
||||
backStack = [];
|
||||
while (i >= 0 && (backStack.length || (_ref2 = this.tag(i), __indexOf.call(tags, _ref2) < 0) && ((_ref3 = this.tag(i), __indexOf.call(EXPRESSION_START, _ref3) < 0) || this.tokens[i].generated) && (_ref4 = this.tag(i), __indexOf.call(LINEBREAKS, _ref4) < 0))) {
|
||||
if (_ref = this.tag(i), __indexOf.call(EXPRESSION_END, _ref) >= 0) {
|
||||
backStack.push(this.tag(i));
|
||||
}
|
||||
if ((_ref1 = this.tag(i), __indexOf.call(EXPRESSION_START, _ref1) >= 0) && backStack.length) {
|
||||
backStack.pop();
|
||||
}
|
||||
i -= 1;
|
||||
}
|
||||
return _ref5 = this.tag(i), __indexOf.call(tags, _ref5) >= 0;
|
||||
};
|
||||
|
||||
Rewriter.prototype.addImplicitBracesAndParens = function() {
|
||||
var stack;
|
||||
stack = [];
|
||||
return this.scanTokens(function(token, i, tokens) {
|
||||
var endImplicitCall, endImplicitObject, forward, inImplicit, inImplicitCall, inImplicitControl, inImplicitObject, nextTag, offset, prevTag, s, sameLine, stackIdx, stackTag, stackTop, startIdx, startImplicitCall, startImplicitObject, startsLine, tag, _ref, _ref1, _ref2, _ref3, _ref4, _ref5;
|
||||
tag = token[0];
|
||||
prevTag = (i > 0 ? tokens[i - 1] : [])[0];
|
||||
nextTag = (i < tokens.length - 1 ? tokens[i + 1] : [])[0];
|
||||
stackTop = function() {
|
||||
return stack[stack.length - 1];
|
||||
};
|
||||
startIdx = i;
|
||||
forward = function(n) {
|
||||
return i - startIdx + n;
|
||||
};
|
||||
inImplicit = function() {
|
||||
var _ref, _ref1;
|
||||
return (_ref = stackTop()) != null ? (_ref1 = _ref[2]) != null ? _ref1.ours : void 0 : void 0;
|
||||
};
|
||||
inImplicitCall = function() {
|
||||
var _ref;
|
||||
return inImplicit() && ((_ref = stackTop()) != null ? _ref[0] : void 0) === '(';
|
||||
};
|
||||
inImplicitObject = function() {
|
||||
var _ref;
|
||||
return inImplicit() && ((_ref = stackTop()) != null ? _ref[0] : void 0) === '{';
|
||||
};
|
||||
inImplicitControl = function() {
|
||||
var _ref;
|
||||
return inImplicit && ((_ref = stackTop()) != null ? _ref[0] : void 0) === 'CONTROL';
|
||||
};
|
||||
startImplicitCall = function(j) {
|
||||
var idx;
|
||||
idx = j != null ? j : i;
|
||||
stack.push([
|
||||
'(', idx, {
|
||||
ours: true
|
||||
}
|
||||
]);
|
||||
tokens.splice(idx, 0, generate('CALL_START', '('));
|
||||
if (j == null) {
|
||||
return i += 1;
|
||||
}
|
||||
};
|
||||
endImplicitCall = function() {
|
||||
stack.pop();
|
||||
tokens.splice(i, 0, generate('CALL_END', ')'));
|
||||
return i += 1;
|
||||
};
|
||||
startImplicitObject = function(j, startsLine) {
|
||||
var idx;
|
||||
if (startsLine == null) {
|
||||
startsLine = true;
|
||||
}
|
||||
idx = j != null ? j : i;
|
||||
stack.push([
|
||||
'{', idx, {
|
||||
sameLine: true,
|
||||
startsLine: startsLine,
|
||||
ours: true
|
||||
}
|
||||
]);
|
||||
tokens.splice(idx, 0, generate('{', generate(new String('{'))));
|
||||
if (j == null) {
|
||||
return i += 1;
|
||||
}
|
||||
};
|
||||
endImplicitObject = function(j) {
|
||||
j = j != null ? j : i;
|
||||
stack.pop();
|
||||
tokens.splice(j, 0, generate('}', '}'));
|
||||
return i += 1;
|
||||
};
|
||||
if (inImplicitCall() && (tag === 'IF' || tag === 'TRY' || tag === 'FINALLY' || tag === 'CATCH' || tag === 'CLASS' || tag === 'SWITCH')) {
|
||||
stack.push([
|
||||
'CONTROL', i, {
|
||||
ours: true
|
||||
}
|
||||
]);
|
||||
return forward(1);
|
||||
}
|
||||
if (tag === 'INDENT' && inImplicit()) {
|
||||
if (prevTag !== '=>' && prevTag !== '->' && prevTag !== '[' && prevTag !== '(' && prevTag !== ',' && prevTag !== '{' && prevTag !== 'TRY' && prevTag !== 'ELSE' && prevTag !== '=') {
|
||||
while (inImplicitCall()) {
|
||||
endImplicitCall();
|
||||
}
|
||||
}
|
||||
if (inImplicitControl()) {
|
||||
stack.pop();
|
||||
}
|
||||
stack.push([tag, i]);
|
||||
return forward(1);
|
||||
}
|
||||
if (__indexOf.call(EXPRESSION_START, tag) >= 0) {
|
||||
stack.push([tag, i]);
|
||||
return forward(1);
|
||||
}
|
||||
if (__indexOf.call(EXPRESSION_END, tag) >= 0) {
|
||||
while (inImplicit()) {
|
||||
if (inImplicitCall()) {
|
||||
endImplicitCall();
|
||||
} else if (inImplicitObject()) {
|
||||
endImplicitObject();
|
||||
} else {
|
||||
stack.pop();
|
||||
}
|
||||
}
|
||||
stack.pop();
|
||||
}
|
||||
if ((__indexOf.call(IMPLICIT_FUNC, tag) >= 0 && token.spaced && !token.stringEnd || tag === '?' && i > 0 && !tokens[i - 1].spaced) && (__indexOf.call(IMPLICIT_CALL, nextTag) >= 0 || __indexOf.call(IMPLICIT_UNSPACED_CALL, nextTag) >= 0 && !((_ref = tokens[i + 1]) != null ? _ref.spaced : void 0) && !((_ref1 = tokens[i + 1]) != null ? _ref1.newLine : void 0))) {
|
||||
if (tag === '?') {
|
||||
tag = token[0] = 'FUNC_EXIST';
|
||||
}
|
||||
startImplicitCall(i + 1);
|
||||
return forward(2);
|
||||
}
|
||||
if (__indexOf.call(IMPLICIT_FUNC, tag) >= 0 && this.matchTags(i + 1, 'INDENT', null, ':') && !this.findTagsBackwards(i, ['CLASS', 'EXTENDS', 'IF', 'CATCH', 'SWITCH', 'LEADING_WHEN', 'FOR', 'WHILE', 'UNTIL'])) {
|
||||
startImplicitCall(i + 1);
|
||||
stack.push(['INDENT', i + 2]);
|
||||
return forward(3);
|
||||
}
|
||||
if (tag === ':') {
|
||||
if (this.tag(i - 2) === '@') {
|
||||
s = i - 2;
|
||||
} else {
|
||||
s = i - 1;
|
||||
}
|
||||
while (this.tag(s - 2) === 'HERECOMMENT') {
|
||||
s -= 2;
|
||||
}
|
||||
startsLine = s === 0 || (_ref2 = this.tag(s - 1), __indexOf.call(LINEBREAKS, _ref2) >= 0) || tokens[s - 1].newLine;
|
||||
if (stackTop()) {
|
||||
_ref3 = stackTop(), stackTag = _ref3[0], stackIdx = _ref3[1];
|
||||
if ((stackTag === '{' || stackTag === 'INDENT' && this.tag(stackIdx - 1) === '{') && (startsLine || this.tag(s - 1) === ',' || this.tag(s - 1) === '{')) {
|
||||
return forward(1);
|
||||
}
|
||||
}
|
||||
startImplicitObject(s, !!startsLine);
|
||||
return forward(2);
|
||||
}
|
||||
if (prevTag === 'OUTDENT' && inImplicitCall() && (tag === '.' || tag === '?.' || tag === '::' || tag === '?::')) {
|
||||
endImplicitCall();
|
||||
return forward(1);
|
||||
}
|
||||
if (inImplicitObject() && __indexOf.call(LINEBREAKS, tag) >= 0) {
|
||||
stackTop()[2].sameLine = false;
|
||||
}
|
||||
if (__indexOf.call(IMPLICIT_END, tag) >= 0) {
|
||||
while (inImplicit()) {
|
||||
_ref4 = stackTop(), stackTag = _ref4[0], stackIdx = _ref4[1], (_ref5 = _ref4[2], sameLine = _ref5.sameLine, startsLine = _ref5.startsLine);
|
||||
if (inImplicitCall() && prevTag !== ',') {
|
||||
endImplicitCall();
|
||||
} else if (inImplicitObject() && sameLine && !startsLine) {
|
||||
endImplicitObject();
|
||||
} else if (inImplicitObject() && tag === 'TERMINATOR' && prevTag !== ',' && !(startsLine && this.looksObjectish(i + 1))) {
|
||||
endImplicitObject();
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (tag === ',' && !this.looksObjectish(i + 1) && inImplicitObject() && (nextTag !== 'TERMINATOR' || !this.looksObjectish(i + 2))) {
|
||||
offset = nextTag === 'OUTDENT' ? 1 : 0;
|
||||
while (inImplicitObject()) {
|
||||
endImplicitObject(i + offset);
|
||||
}
|
||||
}
|
||||
return forward(1);
|
||||
});
|
||||
};
|
||||
|
||||
Rewriter.prototype.addLocationDataToGeneratedTokens = function() {
|
||||
return this.scanTokens(function(token, i, tokens) {
|
||||
var column, line, nextLocation, prevLocation, _ref, _ref1;
|
||||
if (token[2]) {
|
||||
return 1;
|
||||
}
|
||||
if (!(token.generated || token.explicit)) {
|
||||
return 1;
|
||||
}
|
||||
if (token[0] === '{' && (nextLocation = (_ref = tokens[i + 1]) != null ? _ref[2] : void 0)) {
|
||||
line = nextLocation.first_line, column = nextLocation.first_column;
|
||||
} else if (prevLocation = (_ref1 = tokens[i - 1]) != null ? _ref1[2] : void 0) {
|
||||
line = prevLocation.last_line, column = prevLocation.last_column;
|
||||
} else {
|
||||
line = column = 0;
|
||||
}
|
||||
token[2] = {
|
||||
first_line: line,
|
||||
first_column: column,
|
||||
last_line: line,
|
||||
last_column: column
|
||||
};
|
||||
return 1;
|
||||
});
|
||||
};
|
||||
|
||||
Rewriter.prototype.addImplicitIndentation = function() {
|
||||
var action, condition, indent, outdent, starter;
|
||||
starter = indent = outdent = null;
|
||||
condition = function(token, i) {
|
||||
var _ref, _ref1;
|
||||
return token[1] !== ';' && (_ref = token[0], __indexOf.call(SINGLE_CLOSERS, _ref) >= 0) && !(token[0] === 'ELSE' && starter !== 'THEN') && !(((_ref1 = token[0]) === 'CATCH' || _ref1 === 'FINALLY') && (starter === '->' || starter === '=>'));
|
||||
};
|
||||
action = function(token, i) {
|
||||
return this.tokens.splice((this.tag(i - 1) === ',' ? i - 1 : i), 0, outdent);
|
||||
};
|
||||
return this.scanTokens(function(token, i, tokens) {
|
||||
var j, tag, _i, _ref, _ref1;
|
||||
tag = token[0];
|
||||
if (tag === 'TERMINATOR' && this.tag(i + 1) === 'THEN') {
|
||||
tokens.splice(i, 1);
|
||||
return 0;
|
||||
}
|
||||
if (tag === 'ELSE' && this.tag(i - 1) !== 'OUTDENT') {
|
||||
tokens.splice.apply(tokens, [i, 0].concat(__slice.call(this.indentation())));
|
||||
return 2;
|
||||
}
|
||||
if (tag === 'CATCH') {
|
||||
for (j = _i = 1; _i <= 2; j = ++_i) {
|
||||
if (!((_ref = this.tag(i + j)) === 'OUTDENT' || _ref === 'TERMINATOR' || _ref === 'FINALLY')) {
|
||||
continue;
|
||||
}
|
||||
tokens.splice.apply(tokens, [i + j, 0].concat(__slice.call(this.indentation())));
|
||||
return 2 + j;
|
||||
}
|
||||
}
|
||||
if (__indexOf.call(SINGLE_LINERS, tag) >= 0 && this.tag(i + 1) !== 'INDENT' && !(tag === 'ELSE' && this.tag(i + 1) === 'IF')) {
|
||||
starter = tag;
|
||||
_ref1 = this.indentation(true), indent = _ref1[0], outdent = _ref1[1];
|
||||
if (starter === 'THEN') {
|
||||
indent.fromThen = true;
|
||||
}
|
||||
tokens.splice(i + 1, 0, indent);
|
||||
this.detectEnd(i + 2, condition, action);
|
||||
if (tag === 'THEN') {
|
||||
tokens.splice(i, 1);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
return 1;
|
||||
});
|
||||
};
|
||||
|
||||
Rewriter.prototype.tagPostfixConditionals = function() {
|
||||
var action, condition, original;
|
||||
original = null;
|
||||
condition = function(token, i) {
|
||||
var prevTag, tag;
|
||||
tag = token[0];
|
||||
prevTag = this.tokens[i - 1][0];
|
||||
return tag === 'TERMINATOR' || (tag === 'INDENT' && __indexOf.call(SINGLE_LINERS, prevTag) < 0);
|
||||
};
|
||||
action = function(token, i) {
|
||||
if (token[0] !== 'INDENT' || (token.generated && !token.fromThen)) {
|
||||
return original[0] = 'POST_' + original[0];
|
||||
}
|
||||
};
|
||||
return this.scanTokens(function(token, i) {
|
||||
if (token[0] !== 'IF') {
|
||||
return 1;
|
||||
}
|
||||
original = token;
|
||||
this.detectEnd(i + 1, condition, action);
|
||||
return 1;
|
||||
});
|
||||
};
|
||||
|
||||
Rewriter.prototype.indentation = function(implicit) {
|
||||
var indent, outdent;
|
||||
if (implicit == null) {
|
||||
implicit = false;
|
||||
}
|
||||
indent = ['INDENT', 2];
|
||||
outdent = ['OUTDENT', 2];
|
||||
if (implicit) {
|
||||
indent.generated = outdent.generated = true;
|
||||
}
|
||||
if (!implicit) {
|
||||
indent.explicit = outdent.explicit = true;
|
||||
}
|
||||
return [indent, outdent];
|
||||
};
|
||||
|
||||
Rewriter.prototype.generate = generate;
|
||||
|
||||
Rewriter.prototype.tag = function(i) {
|
||||
var _ref;
|
||||
return (_ref = this.tokens[i]) != null ? _ref[0] : void 0;
|
||||
};
|
||||
|
||||
return Rewriter;
|
||||
|
||||
})();
|
||||
|
||||
BALANCED_PAIRS = [['(', ')'], ['[', ']'], ['{', '}'], ['INDENT', 'OUTDENT'], ['CALL_START', 'CALL_END'], ['PARAM_START', 'PARAM_END'], ['INDEX_START', 'INDEX_END']];
|
||||
|
||||
exports.INVERSES = INVERSES = {};
|
||||
|
||||
EXPRESSION_START = [];
|
||||
|
||||
EXPRESSION_END = [];
|
||||
|
||||
for (_i = 0, _len = BALANCED_PAIRS.length; _i < _len; _i++) {
|
||||
_ref = BALANCED_PAIRS[_i], left = _ref[0], rite = _ref[1];
|
||||
EXPRESSION_START.push(INVERSES[rite] = left);
|
||||
EXPRESSION_END.push(INVERSES[left] = rite);
|
||||
}
|
||||
|
||||
EXPRESSION_CLOSE = ['CATCH', 'WHEN', 'ELSE', 'FINALLY'].concat(EXPRESSION_END);
|
||||
|
||||
IMPLICIT_FUNC = ['IDENTIFIER', 'SUPER', ')', 'CALL_END', ']', 'INDEX_END', '@', 'THIS'];
|
||||
|
||||
IMPLICIT_CALL = ['IDENTIFIER', 'NUMBER', 'STRING', 'JS', 'REGEX', 'NEW', 'PARAM_START', 'CLASS', 'IF', 'TRY', 'SWITCH', 'THIS', 'BOOL', 'NULL', 'UNDEFINED', 'UNARY', 'SUPER', 'THROW', '@', '->', '=>', '[', '(', '{', '--', '++'];
|
||||
|
||||
IMPLICIT_UNSPACED_CALL = ['+', '-'];
|
||||
|
||||
IMPLICIT_END = ['POST_IF', 'FOR', 'WHILE', 'UNTIL', 'WHEN', 'BY', 'LOOP', 'TERMINATOR'];
|
||||
|
||||
SINGLE_LINERS = ['ELSE', '->', '=>', 'TRY', 'FINALLY', 'THEN'];
|
||||
|
||||
SINGLE_CLOSERS = ['TERMINATOR', 'CATCH', 'FINALLY', 'ELSE', 'OUTDENT', 'LEADING_WHEN'];
|
||||
|
||||
LINEBREAKS = ['TERMINATOR', 'INDENT', 'OUTDENT'];
|
||||
|
||||
}).call(this);
|
146
node_modules/karma-coffee-preprocessor/node_modules/coffee-script/lib/coffee-script/scope.js
generated
vendored
146
node_modules/karma-coffee-preprocessor/node_modules/coffee-script/lib/coffee-script/scope.js
generated
vendored
@ -1,146 +0,0 @@
|
||||
// Generated by CoffeeScript 1.6.3
|
||||
(function() {
|
||||
var Scope, extend, last, _ref;
|
||||
|
||||
_ref = require('./helpers'), extend = _ref.extend, last = _ref.last;
|
||||
|
||||
exports.Scope = Scope = (function() {
|
||||
Scope.root = null;
|
||||
|
||||
function Scope(parent, expressions, method) {
|
||||
this.parent = parent;
|
||||
this.expressions = expressions;
|
||||
this.method = method;
|
||||
this.variables = [
|
||||
{
|
||||
name: 'arguments',
|
||||
type: 'arguments'
|
||||
}
|
||||
];
|
||||
this.positions = {};
|
||||
if (!this.parent) {
|
||||
Scope.root = this;
|
||||
}
|
||||
}
|
||||
|
||||
Scope.prototype.add = function(name, type, immediate) {
|
||||
if (this.shared && !immediate) {
|
||||
return this.parent.add(name, type, immediate);
|
||||
}
|
||||
if (Object.prototype.hasOwnProperty.call(this.positions, name)) {
|
||||
return this.variables[this.positions[name]].type = type;
|
||||
} else {
|
||||
return this.positions[name] = this.variables.push({
|
||||
name: name,
|
||||
type: type
|
||||
}) - 1;
|
||||
}
|
||||
};
|
||||
|
||||
Scope.prototype.namedMethod = function() {
|
||||
var _ref1;
|
||||
if (((_ref1 = this.method) != null ? _ref1.name : void 0) || !this.parent) {
|
||||
return this.method;
|
||||
}
|
||||
return this.parent.namedMethod();
|
||||
};
|
||||
|
||||
Scope.prototype.find = function(name) {
|
||||
if (this.check(name)) {
|
||||
return true;
|
||||
}
|
||||
this.add(name, 'var');
|
||||
return false;
|
||||
};
|
||||
|
||||
Scope.prototype.parameter = function(name) {
|
||||
if (this.shared && this.parent.check(name, true)) {
|
||||
return;
|
||||
}
|
||||
return this.add(name, 'param');
|
||||
};
|
||||
|
||||
Scope.prototype.check = function(name) {
|
||||
var _ref1;
|
||||
return !!(this.type(name) || ((_ref1 = this.parent) != null ? _ref1.check(name) : void 0));
|
||||
};
|
||||
|
||||
Scope.prototype.temporary = function(name, index) {
|
||||
if (name.length > 1) {
|
||||
return '_' + name + (index > 1 ? index - 1 : '');
|
||||
} else {
|
||||
return '_' + (index + parseInt(name, 36)).toString(36).replace(/\d/g, 'a');
|
||||
}
|
||||
};
|
||||
|
||||
Scope.prototype.type = function(name) {
|
||||
var v, _i, _len, _ref1;
|
||||
_ref1 = this.variables;
|
||||
for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
|
||||
v = _ref1[_i];
|
||||
if (v.name === name) {
|
||||
return v.type;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
};
|
||||
|
||||
Scope.prototype.freeVariable = function(name, reserve) {
|
||||
var index, temp;
|
||||
if (reserve == null) {
|
||||
reserve = true;
|
||||
}
|
||||
index = 0;
|
||||
while (this.check((temp = this.temporary(name, index)))) {
|
||||
index++;
|
||||
}
|
||||
if (reserve) {
|
||||
this.add(temp, 'var', true);
|
||||
}
|
||||
return temp;
|
||||
};
|
||||
|
||||
Scope.prototype.assign = function(name, value) {
|
||||
this.add(name, {
|
||||
value: value,
|
||||
assigned: true
|
||||
}, true);
|
||||
return this.hasAssignments = true;
|
||||
};
|
||||
|
||||
Scope.prototype.hasDeclarations = function() {
|
||||
return !!this.declaredVariables().length;
|
||||
};
|
||||
|
||||
Scope.prototype.declaredVariables = function() {
|
||||
var realVars, tempVars, v, _i, _len, _ref1;
|
||||
realVars = [];
|
||||
tempVars = [];
|
||||
_ref1 = this.variables;
|
||||
for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
|
||||
v = _ref1[_i];
|
||||
if (v.type === 'var') {
|
||||
(v.name.charAt(0) === '_' ? tempVars : realVars).push(v.name);
|
||||
}
|
||||
}
|
||||
return realVars.sort().concat(tempVars.sort());
|
||||
};
|
||||
|
||||
Scope.prototype.assignedVariables = function() {
|
||||
var v, _i, _len, _ref1, _results;
|
||||
_ref1 = this.variables;
|
||||
_results = [];
|
||||
for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
|
||||
v = _ref1[_i];
|
||||
if (v.type.assigned) {
|
||||
_results.push("" + v.name + " = " + v.type.value);
|
||||
}
|
||||
}
|
||||
return _results;
|
||||
};
|
||||
|
||||
return Scope;
|
||||
|
||||
})();
|
||||
|
||||
}).call(this);
|
161
node_modules/karma-coffee-preprocessor/node_modules/coffee-script/lib/coffee-script/sourcemap.js
generated
vendored
161
node_modules/karma-coffee-preprocessor/node_modules/coffee-script/lib/coffee-script/sourcemap.js
generated
vendored
@ -1,161 +0,0 @@
|
||||
// Generated by CoffeeScript 1.6.3
|
||||
(function() {
|
||||
var LineMap, SourceMap;
|
||||
|
||||
LineMap = (function() {
|
||||
function LineMap(line) {
|
||||
this.line = line;
|
||||
this.columns = [];
|
||||
}
|
||||
|
||||
LineMap.prototype.add = function(column, _arg, options) {
|
||||
var sourceColumn, sourceLine;
|
||||
sourceLine = _arg[0], sourceColumn = _arg[1];
|
||||
if (options == null) {
|
||||
options = {};
|
||||
}
|
||||
if (this.columns[column] && options.noReplace) {
|
||||
return;
|
||||
}
|
||||
return this.columns[column] = {
|
||||
line: this.line,
|
||||
column: column,
|
||||
sourceLine: sourceLine,
|
||||
sourceColumn: sourceColumn
|
||||
};
|
||||
};
|
||||
|
||||
LineMap.prototype.sourceLocation = function(column) {
|
||||
var mapping;
|
||||
while (!((mapping = this.columns[column]) || (column <= 0))) {
|
||||
column--;
|
||||
}
|
||||
return mapping && [mapping.sourceLine, mapping.sourceColumn];
|
||||
};
|
||||
|
||||
return LineMap;
|
||||
|
||||
})();
|
||||
|
||||
SourceMap = (function() {
|
||||
var BASE64_CHARS, VLQ_CONTINUATION_BIT, VLQ_SHIFT, VLQ_VALUE_MASK;
|
||||
|
||||
function SourceMap() {
|
||||
this.lines = [];
|
||||
}
|
||||
|
||||
SourceMap.prototype.add = function(sourceLocation, generatedLocation, options) {
|
||||
var column, line, lineMap, _base;
|
||||
if (options == null) {
|
||||
options = {};
|
||||
}
|
||||
line = generatedLocation[0], column = generatedLocation[1];
|
||||
lineMap = ((_base = this.lines)[line] || (_base[line] = new LineMap(line)));
|
||||
return lineMap.add(column, sourceLocation, options);
|
||||
};
|
||||
|
||||
SourceMap.prototype.sourceLocation = function(_arg) {
|
||||
var column, line, lineMap;
|
||||
line = _arg[0], column = _arg[1];
|
||||
while (!((lineMap = this.lines[line]) || (line <= 0))) {
|
||||
line--;
|
||||
}
|
||||
return lineMap && lineMap.sourceLocation(column);
|
||||
};
|
||||
|
||||
SourceMap.prototype.generate = function(options, code) {
|
||||
var buffer, lastColumn, lastSourceColumn, lastSourceLine, lineMap, lineNumber, mapping, needComma, v3, writingline, _i, _j, _len, _len1, _ref, _ref1;
|
||||
if (options == null) {
|
||||
options = {};
|
||||
}
|
||||
if (code == null) {
|
||||
code = null;
|
||||
}
|
||||
writingline = 0;
|
||||
lastColumn = 0;
|
||||
lastSourceLine = 0;
|
||||
lastSourceColumn = 0;
|
||||
needComma = false;
|
||||
buffer = "";
|
||||
_ref = this.lines;
|
||||
for (lineNumber = _i = 0, _len = _ref.length; _i < _len; lineNumber = ++_i) {
|
||||
lineMap = _ref[lineNumber];
|
||||
if (lineMap) {
|
||||
_ref1 = lineMap.columns;
|
||||
for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {
|
||||
mapping = _ref1[_j];
|
||||
if (!(mapping)) {
|
||||
continue;
|
||||
}
|
||||
while (writingline < mapping.line) {
|
||||
lastColumn = 0;
|
||||
needComma = false;
|
||||
buffer += ";";
|
||||
writingline++;
|
||||
}
|
||||
if (needComma) {
|
||||
buffer += ",";
|
||||
needComma = false;
|
||||
}
|
||||
buffer += this.encodeVlq(mapping.column - lastColumn);
|
||||
lastColumn = mapping.column;
|
||||
buffer += this.encodeVlq(0);
|
||||
buffer += this.encodeVlq(mapping.sourceLine - lastSourceLine);
|
||||
lastSourceLine = mapping.sourceLine;
|
||||
buffer += this.encodeVlq(mapping.sourceColumn - lastSourceColumn);
|
||||
lastSourceColumn = mapping.sourceColumn;
|
||||
needComma = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
v3 = {
|
||||
version: 3,
|
||||
file: options.generatedFile || '',
|
||||
sourceRoot: options.sourceRoot || '',
|
||||
sources: options.sourceFiles || [''],
|
||||
names: [],
|
||||
mappings: buffer
|
||||
};
|
||||
if (options.inline) {
|
||||
v3.sourcesContent = [code];
|
||||
}
|
||||
return JSON.stringify(v3, null, 2);
|
||||
};
|
||||
|
||||
VLQ_SHIFT = 5;
|
||||
|
||||
VLQ_CONTINUATION_BIT = 1 << VLQ_SHIFT;
|
||||
|
||||
VLQ_VALUE_MASK = VLQ_CONTINUATION_BIT - 1;
|
||||
|
||||
SourceMap.prototype.encodeVlq = function(value) {
|
||||
var answer, nextChunk, signBit, valueToEncode;
|
||||
answer = '';
|
||||
signBit = value < 0 ? 1 : 0;
|
||||
valueToEncode = (Math.abs(value) << 1) + signBit;
|
||||
while (valueToEncode || !answer) {
|
||||
nextChunk = valueToEncode & VLQ_VALUE_MASK;
|
||||
valueToEncode = valueToEncode >> VLQ_SHIFT;
|
||||
if (valueToEncode) {
|
||||
nextChunk |= VLQ_CONTINUATION_BIT;
|
||||
}
|
||||
answer += this.encodeBase64(nextChunk);
|
||||
}
|
||||
return answer;
|
||||
};
|
||||
|
||||
BASE64_CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
|
||||
|
||||
SourceMap.prototype.encodeBase64 = function(value) {
|
||||
return BASE64_CHARS[value] || (function() {
|
||||
throw new Error("Cannot Base64 encode value: " + value);
|
||||
})();
|
||||
};
|
||||
|
||||
return SourceMap;
|
||||
|
||||
})();
|
||||
|
||||
module.exports = SourceMap;
|
||||
|
||||
}).call(this);
|
50
node_modules/karma-coffee-preprocessor/node_modules/coffee-script/package.json
generated
vendored
50
node_modules/karma-coffee-preprocessor/node_modules/coffee-script/package.json
generated
vendored
@ -1,50 +0,0 @@
|
||||
{
|
||||
"name": "coffee-script",
|
||||
"description": "Unfancy JavaScript",
|
||||
"keywords": [
|
||||
"javascript",
|
||||
"language",
|
||||
"coffeescript",
|
||||
"compiler"
|
||||
],
|
||||
"author": {
|
||||
"name": "Jeremy Ashkenas"
|
||||
},
|
||||
"version": "1.6.3",
|
||||
"licenses": [
|
||||
{
|
||||
"type": "MIT",
|
||||
"url": "https://raw.github.com/jashkenas/coffee-script/master/LICENSE"
|
||||
}
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=0.8.0"
|
||||
},
|
||||
"directories": {
|
||||
"lib": "./lib/coffee-script"
|
||||
},
|
||||
"main": "./lib/coffee-script/coffee-script",
|
||||
"bin": {
|
||||
"coffee": "./bin/coffee",
|
||||
"cake": "./bin/cake"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "node ./bin/cake test"
|
||||
},
|
||||
"homepage": "http://coffeescript.org",
|
||||
"bugs": {
|
||||
"url": "https://github.com/jashkenas/coffee-script/issues"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git://github.com/jashkenas/coffee-script.git"
|
||||
},
|
||||
"devDependencies": {
|
||||
"uglify-js": "~2.2",
|
||||
"jison": ">=0.2.0"
|
||||
},
|
||||
"readme": "\n {\n } } {\n { { } }\n } }{ {\n { }{ } } _____ __ __\n ( }{ }{ { ) / ____| / _|/ _|\n .- { { } { }} -. | | ___ | |_| |_ ___ ___\n ( ( } { } { } } ) | | / _ \\| _| _/ _ \\/ _ \\\n |`-..________ ..-'| | |___| (_) | | | || __/ __/\n | | \\_____\\___/|_| |_| \\___|\\___|\n | ;--.\n | (__ \\ _____ _ _\n | | ) ) / ____| (_) | |\n | |/ / | (___ ___ _ __ _ _ __ | |_\n | ( / \\___ \\ / __| '__| | '_ \\| __|\n | |/ ____) | (__| | | | |_) | |_\n | | |_____/ \\___|_| |_| .__/ \\__|\n `-.._________..-' | |\n |_|\n\n\n CoffeeScript is a little language that compiles into JavaScript.\n\n Install Node.js, and then the CoffeeScript compiler:\n sudo bin/cake install\n\n Or, if you have the Node Package Manager installed:\n npm install -g coffee-script\n (Leave off the -g if you don't wish to install globally.)\n\n Execute a script:\n coffee /path/to/script.coffee\n\n Compile a script:\n coffee -c /path/to/script.coffee\n\n For documentation, usage, and examples, see:\n http://coffeescript.org/\n\n To suggest a feature, report a bug, or general discussion:\n http://github.com/jashkenas/coffee-script/issues/\n\n If you'd like to chat, drop by #coffeescript on Freenode IRC,\n or on webchat.freenode.net.\n\n The source repository:\n git://github.com/jashkenas/coffee-script.git\n\n All contributors are listed here:\n http://github.com/jashkenas/coffee-script/contributors\n",
|
||||
"readmeFilename": "README",
|
||||
"_id": "coffee-script@1.6.3",
|
||||
"_from": "coffee-script@1.6.3"
|
||||
}
|
62
node_modules/karma-coffee-preprocessor/package.json
generated
vendored
62
node_modules/karma-coffee-preprocessor/package.json
generated
vendored
@ -1,62 +0,0 @@
|
||||
{
|
||||
"name": "karma-coffee-preprocessor",
|
||||
"version": "0.1.1",
|
||||
"description": "A Karma plugin. Compile coffee script on the fly.",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git://github.com/karma-runner/karma-coffee-preprocessor.git"
|
||||
},
|
||||
"keywords": [
|
||||
"karma-plugin",
|
||||
"karma-preprocessor",
|
||||
"coffee-script",
|
||||
"coffee"
|
||||
],
|
||||
"author": {
|
||||
"name": "Vojta Jina",
|
||||
"email": "vojta.jina@gmail.com"
|
||||
},
|
||||
"dependencies": {
|
||||
"coffee-script": "1.6.3"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"karma": ">=0.9"
|
||||
},
|
||||
"license": "MIT",
|
||||
"devDependencies": {
|
||||
"grunt": "~0.4.1",
|
||||
"grunt-npm": "~0.0.2",
|
||||
"grunt-bump": "~0.0.7",
|
||||
"grunt-auto-release": "~0.0.2"
|
||||
},
|
||||
"contributors": [
|
||||
{
|
||||
"name": "Friedel Ziegelmayer",
|
||||
"email": "friedel.ziegelmayer@gmail.com"
|
||||
},
|
||||
{
|
||||
"name": "Niall Smart",
|
||||
"email": "niall@pobox.com"
|
||||
},
|
||||
{
|
||||
"name": "Zachary Wright Heller",
|
||||
"email": "zheller@gmail.com"
|
||||
},
|
||||
{
|
||||
"name": "Anthony Torres",
|
||||
"email": "anthony.torres@issinc.com"
|
||||
}
|
||||
],
|
||||
"readme": "# karma-coffee-preprocessor\n\n> Preprocessor to compile CoffeeScript on the fly.\n\n## Installation\n\n**This plugin ships with Karma by default, so you don't need to install it, it should just work ;-)**\n\nThe easiest way is to keep `karma-coffee-preprocessor` as a devDependency in your `package.json`.\n```json\n{\n \"devDependencies\": {\n \"karma\": \"~0.10\",\n \"karma-coffee-preprocessor\": \"~0.1\"\n }\n}\n```\n\nYou can simple do it by:\n```bash\nnpm install karma-coffee-preprocessor --save-dev\n```\n\n## Configuration\nFollowing code shows the default configuration...\n```js\n// karma.conf.js\nmodule.exports = function(config) {\n config.set({\n preprocessors: {\n '**/*.coffee': ['coffee']\n },\n\n coffeePreprocessor: {\n // options passed to the coffee compiler\n options: {\n bare: true,\n sourceMap: false\n },\n // transforming the filenames\n transformPath: function(path) {\n return path.replace(/\\.js$/, '.coffee');\n }\n }\n });\n};\n```\n\nIf you set the `sourceMap` coffee compiler option to `true` then the generated source map will be inlined as a data-uri.\n\n----\n\nFor more information on Karma see the [homepage].\n\n\n[homepage]: http://karma-runner.github.com\n",
|
||||
"readmeFilename": "README.md",
|
||||
"bugs": {
|
||||
"url": "https://github.com/karma-runner/karma-coffee-preprocessor/issues"
|
||||
},
|
||||
"homepage": "https://github.com/karma-runner/karma-coffee-preprocessor",
|
||||
"_id": "karma-coffee-preprocessor@0.1.1",
|
||||
"_from": "karma-coffee-preprocessor@*"
|
||||
}
|
20
node_modules/karma-firefox-launcher/LICENSE
generated
vendored
20
node_modules/karma-firefox-launcher/LICENSE
generated
vendored
@ -1,20 +0,0 @@
|
||||
The MIT License
|
||||
|
||||
Copyright (C) 2011-2013 Google, Inc.
|
||||
|
||||
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.
|
42
node_modules/karma-firefox-launcher/README.md
generated
vendored
42
node_modules/karma-firefox-launcher/README.md
generated
vendored
@ -1,42 +0,0 @@
|
||||
# karma-firefox-launcher
|
||||
|
||||
> Launcher for Mozilla Firefox.
|
||||
|
||||
## Installation
|
||||
|
||||
The easiest way is to keep `karma-firefox-launcher` as a devDependency in your `package.json`.
|
||||
```json
|
||||
{
|
||||
"devDependencies": {
|
||||
"karma": "~0.10",
|
||||
"karma-firefox-launcher": "~0.1"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
You can simple do it by:
|
||||
```bash
|
||||
npm install karma-firefox-launcher --save-dev
|
||||
```
|
||||
|
||||
## Configuration
|
||||
```js
|
||||
// karma.conf.js
|
||||
module.exports = function(config) {
|
||||
config.set({
|
||||
browsers: ['Firefox', 'FirefoxAurora', 'FirefoxNightly'],
|
||||
});
|
||||
};
|
||||
```
|
||||
|
||||
You can pass list of browsers as a CLI argument too:
|
||||
```bash
|
||||
karma start --browsers Firefox,Chrome
|
||||
```
|
||||
|
||||
----
|
||||
|
||||
For more information on Karma see the [homepage].
|
||||
|
||||
|
||||
[homepage]: http://karma-runner.github.com
|
114
node_modules/karma-firefox-launcher/index.js
generated
vendored
114
node_modules/karma-firefox-launcher/index.js
generated
vendored
@ -1,114 +0,0 @@
|
||||
var fs = require('fs');
|
||||
var spawn = require('child_process').spawn;
|
||||
|
||||
|
||||
var PREFS =
|
||||
'user_pref("browser.shell.checkDefaultBrowser", false);\n' +
|
||||
'user_pref("browser.bookmarks.restore_default_bookmarks", false);\n' +
|
||||
'user_pref("dom.disable_open_during_load", false);\n' +
|
||||
'user_pref("dom.max_script_run_time", 0);\n';
|
||||
|
||||
|
||||
// Return location of firefox.exe file for a given Firefox directory
|
||||
// (available: "Mozilla Firefox", "Aurora", "Nightly").
|
||||
var getFirefoxExe = function(firefoxDirName) {
|
||||
if (process.platform !== 'win32') {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
var prefix;
|
||||
var prefixes = [process.env.PROGRAMFILES, process.env['PROGRAMFILES(X86)']];
|
||||
var suffix = '\\'+ firefoxDirName + '\\firefox.exe';
|
||||
|
||||
for (var i = 0; i < prefixes.length; i++) {
|
||||
prefix = prefixes[i];
|
||||
if (fs.existsSync(prefix + suffix)) {
|
||||
return prefix + suffix;
|
||||
}
|
||||
}
|
||||
|
||||
return 'C:\\Program Files' + suffix;
|
||||
}
|
||||
|
||||
// https://developer.mozilla.org/en-US/docs/Command_Line_Options
|
||||
var FirefoxBrowser = function(id, baseBrowserDecorator, args, logger) {
|
||||
baseBrowserDecorator(this);
|
||||
|
||||
var log = logger.create('launcher');
|
||||
this._getPrefs = function(prefs) {
|
||||
if (typeof prefs !== 'object') {
|
||||
return PREFS;
|
||||
}
|
||||
var result = PREFS;
|
||||
for (var key in prefs) {
|
||||
result += 'user_pref("' + key + '", ' + JSON.stringify(prefs[key]) + ');\n';
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
this._start = function(url) {
|
||||
var self = this;
|
||||
var command = this._getCommand();
|
||||
|
||||
fs.writeFileSync(self._tempDir + '/prefs.js', this._getPrefs(args.prefs));
|
||||
self._execCommand(command, [url, '-profile', self._tempDir, '-no-remote']);
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
FirefoxBrowser.prototype = {
|
||||
name: 'Firefox',
|
||||
|
||||
DEFAULT_CMD: {
|
||||
linux: 'firefox',
|
||||
darwin: '/Applications/Firefox.app/Contents/MacOS/firefox-bin',
|
||||
win32: getFirefoxExe('Mozilla Firefox')
|
||||
},
|
||||
ENV_CMD: 'FIREFOX_BIN'
|
||||
};
|
||||
|
||||
FirefoxBrowser.$inject = ['id', 'baseBrowserDecorator', 'args', 'logger'];
|
||||
|
||||
|
||||
var FirefoxAuroraBrowser = function(id, baseBrowserDecorator, logger) {
|
||||
FirefoxBrowser.call(this, id, baseBrowserDecorator, logger);
|
||||
};
|
||||
|
||||
FirefoxAuroraBrowser.prototype = {
|
||||
name: 'FirefoxAurora',
|
||||
DEFAULT_CMD: {
|
||||
linux: 'firefox',
|
||||
darwin: '/Applications/FirefoxAurora.app/Contents/MacOS/firefox-bin',
|
||||
win32: getFirefoxExe('Aurora')
|
||||
},
|
||||
ENV_CMD: 'FIREFOX_AURORA_BIN'
|
||||
};
|
||||
|
||||
FirefoxAuroraBrowser.$inject = ['id', 'baseBrowserDecorator', 'args', 'logger'];
|
||||
|
||||
|
||||
var FirefoxNightlyBrowser = function(id, baseBrowserDecorator, logger) {
|
||||
FirefoxBrowser.call(this, id, baseBrowserDecorator, logger);
|
||||
};
|
||||
|
||||
FirefoxNightlyBrowser.prototype = {
|
||||
name: 'FirefoxNightly',
|
||||
|
||||
DEFAULT_CMD: {
|
||||
linux: 'firefox',
|
||||
darwin: '/Applications/FirefoxNightly.app/Contents/MacOS/firefox-bin',
|
||||
win32: getFirefoxExe('Nightly')
|
||||
},
|
||||
ENV_CMD: 'FIREFOX_NIGHTLY_BIN'
|
||||
};
|
||||
|
||||
FirefoxNightlyBrowser.$inject = ['id', 'baseBrowserDecorator', 'args', 'logger'];
|
||||
|
||||
|
||||
// PUBLISH DI MODULE
|
||||
module.exports = {
|
||||
'launcher:Firefox': ['type', FirefoxBrowser],
|
||||
'launcher:FirefoxAurora': ['type', FirefoxAuroraBrowser],
|
||||
'launcher:FirefoxNightly': ['type', FirefoxNightlyBrowser]
|
||||
};
|
85
node_modules/karma-firefox-launcher/index.js.orig
generated
vendored
85
node_modules/karma-firefox-launcher/index.js.orig
generated
vendored
@ -1,85 +0,0 @@
|
||||
var fs = require('fs');
|
||||
var spawn = require('child_process').spawn;
|
||||
|
||||
|
||||
var PREFS =
|
||||
'user_pref("browser.shell.checkDefaultBrowser", false);\n' +
|
||||
'user_pref("browser.bookmarks.restore_default_bookmarks", false);\n' +
|
||||
<<<<<<< HEAD
|
||||
'user_pref("dom.disable_open_during_load", false);\n';
|
||||
=======
|
||||
'user_pref("dom.max_script_run_time", 0);\n';
|
||||
>>>>>>> disable "script not responding" dialog on test run
|
||||
|
||||
|
||||
// https://developer.mozilla.org/en-US/docs/Command_Line_Options
|
||||
var FirefoxBrowser = function(id, baseBrowserDecorator, logger) {
|
||||
baseBrowserDecorator(this);
|
||||
|
||||
var log = logger.create('launcher');
|
||||
|
||||
this._start = function(url) {
|
||||
var self = this;
|
||||
var command = this._getCommand();
|
||||
|
||||
fs.createWriteStream(self._tempDir + '/prefs.js', {flags: 'a'}).write(PREFS);
|
||||
self._execCommand(command, [url, '-profile', self._tempDir, '-no-remote']);
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
FirefoxBrowser.prototype = {
|
||||
name: 'Firefox',
|
||||
|
||||
DEFAULT_CMD: {
|
||||
linux: 'firefox',
|
||||
darwin: '/Applications/Firefox.app/Contents/MacOS/firefox-bin',
|
||||
win32: process.env.ProgramFiles + '\\Mozilla Firefox\\firefox.exe'
|
||||
},
|
||||
ENV_CMD: 'FIREFOX_BIN'
|
||||
};
|
||||
|
||||
FirefoxBrowser.$inject = ['id', 'baseBrowserDecorator', 'logger'];
|
||||
|
||||
|
||||
var FirefoxAuroraBrowser = function(id, baseBrowserDecorator, logger) {
|
||||
FirefoxBrowser.call(this, id, baseBrowserDecorator, logger);
|
||||
};
|
||||
|
||||
FirefoxAuroraBrowser.prototype = {
|
||||
name: 'FirefoxAurora',
|
||||
DEFAULT_CMD: {
|
||||
linux: 'firefox',
|
||||
darwin: '/Applications/FirefoxAurora.app/Contents/MacOS/firefox-bin',
|
||||
win32: process.env.ProgramFiles + '\\Aurora\\firefox.exe'
|
||||
},
|
||||
ENV_CMD: 'FIREFOX_AURORA_BIN'
|
||||
};
|
||||
|
||||
FirefoxAuroraBrowser.$inject = ['id', 'baseBrowserDecorator', 'logger'];
|
||||
|
||||
|
||||
var FirefoxNightlyBrowser = function(id, baseBrowserDecorator, logger) {
|
||||
FirefoxBrowser.call(this, id, baseBrowserDecorator, logger);
|
||||
};
|
||||
|
||||
FirefoxNightlyBrowser.prototype = {
|
||||
name: 'FirefoxNightly',
|
||||
|
||||
DEFAULT_CMD: {
|
||||
linux: 'firefox',
|
||||
darwin: '/Applications/FirefoxNightly.app/Contents/MacOS/firefox-bin',
|
||||
win32: process.env.ProgramFiles + '\\Nightly\\firefox.exe'
|
||||
},
|
||||
ENV_CMD: 'FIREFOX_NIGHTLY_BIN'
|
||||
};
|
||||
|
||||
FirefoxNightlyBrowser.$inject = ['id', 'baseBrowserDecorator', 'logger'];
|
||||
|
||||
|
||||
// PUBLISH DI MODULE
|
||||
module.exports = {
|
||||
'launcher:Firefox': ['type', FirefoxBrowser],
|
||||
'launcher:FirefoxAurora': ['type', FirefoxAuroraBrowser],
|
||||
'launcher:FirefoxNightly': ['type', FirefoxNightlyBrowser]
|
||||
};
|
75
node_modules/karma-firefox-launcher/package.json
generated
vendored
75
node_modules/karma-firefox-launcher/package.json
generated
vendored
@ -1,75 +0,0 @@
|
||||
{
|
||||
"name": "karma-firefox-launcher",
|
||||
"version": "0.1.2",
|
||||
"description": "A Karma plugin. Launcher for Firefox.",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git://github.com/karma-runner/karma-firefox-launcher.git"
|
||||
},
|
||||
"keywords": [
|
||||
"karma-plugin",
|
||||
"karma-launcher",
|
||||
"firefox"
|
||||
],
|
||||
"author": {
|
||||
"name": "Vojta Jina",
|
||||
"email": "vojta.jina@gmail.com"
|
||||
},
|
||||
"dependencies": {},
|
||||
"peerDependencies": {
|
||||
"karma": ">=0.9"
|
||||
},
|
||||
"license": "MIT",
|
||||
"devDependencies": {
|
||||
"grunt": "~0.4.1",
|
||||
"grunt-npm": "~0.0.2",
|
||||
"grunt-bump": "~0.0.7",
|
||||
"grunt-auto-release": "~0.0.2"
|
||||
},
|
||||
"contributors": [
|
||||
{
|
||||
"name": "Friedel Ziegelmayer",
|
||||
"email": "friedel.ziegelmayer@gmail.com"
|
||||
},
|
||||
{
|
||||
"name": "Žilvinas Urbonas",
|
||||
"email": "zilvinas.urbon@gmail.com"
|
||||
},
|
||||
{
|
||||
"name": "Andrei Khveras",
|
||||
"email": "Andrei_Khveras@epam.com"
|
||||
},
|
||||
{
|
||||
"name": "Erwann Mest",
|
||||
"email": "erwann.mest@gmail.com"
|
||||
},
|
||||
{
|
||||
"name": "Liam Newman",
|
||||
"email": "lnewman@book.com"
|
||||
},
|
||||
{
|
||||
"name": "Michał Gołębiowski",
|
||||
"email": "m.goleb@gmail.com"
|
||||
},
|
||||
{
|
||||
"name": "Parashuram",
|
||||
"email": "code@nparashuram.com"
|
||||
},
|
||||
{
|
||||
"name": "Schaaf, Martin",
|
||||
"email": "mschaaf@datameer.com"
|
||||
}
|
||||
],
|
||||
"readme": "# karma-firefox-launcher\n\n> Launcher for Mozilla Firefox.\n\n## Installation\n\nThe easiest way is to keep `karma-firefox-launcher` as a devDependency in your `package.json`.\n```json\n{\n \"devDependencies\": {\n \"karma\": \"~0.10\",\n \"karma-firefox-launcher\": \"~0.1\"\n }\n}\n```\n\nYou can simple do it by:\n```bash\nnpm install karma-firefox-launcher --save-dev\n```\n\n## Configuration\n```js\n// karma.conf.js\nmodule.exports = function(config) {\n config.set({\n browsers: ['Firefox', 'FirefoxAurora', 'FirefoxNightly'],\n });\n};\n```\n\nYou can pass list of browsers as a CLI argument too:\n```bash\nkarma start --browsers Firefox,Chrome\n```\n\n----\n\nFor more information on Karma see the [homepage].\n\n\n[homepage]: http://karma-runner.github.com\n",
|
||||
"readmeFilename": "README.md",
|
||||
"bugs": {
|
||||
"url": "https://github.com/karma-runner/karma-firefox-launcher/issues"
|
||||
},
|
||||
"homepage": "https://github.com/karma-runner/karma-firefox-launcher",
|
||||
"_id": "karma-firefox-launcher@0.1.2",
|
||||
"_from": "karma-firefox-launcher@*"
|
||||
}
|
20
node_modules/karma-html2js-preprocessor/LICENSE
generated
vendored
20
node_modules/karma-html2js-preprocessor/LICENSE
generated
vendored
@ -1,20 +0,0 @@
|
||||
The MIT License
|
||||
|
||||
Copyright (C) 2011-2013 Vojta Jína and contributors.
|
||||
|
||||
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.
|
65
node_modules/karma-html2js-preprocessor/README.md
generated
vendored
65
node_modules/karma-html2js-preprocessor/README.md
generated
vendored
@ -1,65 +0,0 @@
|
||||
# karma-html2js-preprocessor [](https://travis-ci.org/karma-runner/karma-html2js-preprocessor)
|
||||
|
||||
> Preprocessor for converting HTML files into JS strings.
|
||||
|
||||
*Note:* If you are using [AngularJS](http://angularjs.org/), check out [karma-ng-html2js-preprocessor](https://github.com/karma-runner/karma-ng-html2js-preprocessor).
|
||||
|
||||
## Installation
|
||||
|
||||
**This plugin ships with Karma by default, so you don't need to install it, it should just work ;-)**
|
||||
|
||||
The easiest way is to keep `karma-html2js-preprocessor` as a devDependency in your `package.json`.
|
||||
```json
|
||||
{
|
||||
"devDependencies": {
|
||||
"karma": "~0.10",
|
||||
"karma-html2js-preprocessor": "~0.1"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
You can simple do it by:
|
||||
```bash
|
||||
npm install karma-html2js-preprocessor --save-dev
|
||||
```
|
||||
|
||||
## Configuration
|
||||
Following code shows the default configuration...
|
||||
```js
|
||||
// karma.conf.js
|
||||
module.exports = function(config) {
|
||||
config.set({
|
||||
preprocessors: {
|
||||
'**/*.html': ['html2js']
|
||||
},
|
||||
|
||||
files: [
|
||||
'*.js',
|
||||
'*.html'
|
||||
]
|
||||
});
|
||||
};
|
||||
```
|
||||
|
||||
## How does it work ?
|
||||
|
||||
This preprocessor converts HTML files into JS strings and publishes them in the global `window.__html__`, so that you can use these for testing DOM operations.
|
||||
|
||||
For instance this `template.html`...
|
||||
```html
|
||||
<div>something</div>
|
||||
```
|
||||
... will be served as `template.html.js`:
|
||||
```js
|
||||
window.__html__ = window.__html__ || {};
|
||||
window.__html__['template.html'] = '<div>something</div>';
|
||||
```
|
||||
|
||||
See the [end2end test](https://github.com/karma-runner/karma/tree/master/test/e2e/html2js) for a complete example.
|
||||
|
||||
----
|
||||
|
||||
For more information on Karma see the [homepage].
|
||||
|
||||
|
||||
[homepage]: http://karma-runner.github.com
|
27
node_modules/karma-html2js-preprocessor/lib/html2js.js
generated
vendored
27
node_modules/karma-html2js-preprocessor/lib/html2js.js
generated
vendored
@ -1,27 +0,0 @@
|
||||
var util = require('util');
|
||||
|
||||
|
||||
var TEMPLATE = '' +
|
||||
'window.__html__ = window.__html__ || {};\n' +
|
||||
'window.__html__[\'%s\'] = \'%s\'';
|
||||
|
||||
var escapeContent = function(content) {
|
||||
return content.replace(/'/g, '\\\'').replace(/\r?\n/g, '\\n\' +\n \'');
|
||||
};
|
||||
|
||||
var createHtml2JsPreprocessor = function(logger, basePath) {
|
||||
var log = logger.create('preprocessor.html2js');
|
||||
|
||||
return function(content, file, done) {
|
||||
log.debug('Processing "%s".', file.originalPath);
|
||||
|
||||
var htmlPath = file.originalPath.replace(basePath + '/', '');
|
||||
|
||||
file.path = file.path + '.js';
|
||||
done(util.format(TEMPLATE, htmlPath, escapeContent(content)));
|
||||
};
|
||||
};
|
||||
|
||||
createHtml2JsPreprocessor.$inject = ['logger', 'config.basePath'];
|
||||
|
||||
module.exports = createHtml2JsPreprocessor;
|
4
node_modules/karma-html2js-preprocessor/lib/index.js
generated
vendored
4
node_modules/karma-html2js-preprocessor/lib/index.js
generated
vendored
@ -1,4 +0,0 @@
|
||||
// PUBLISH DI MODULE
|
||||
module.exports = {
|
||||
'preprocessor:html2js': ['factory', require('./html2js')]
|
||||
};
|
47
node_modules/karma-html2js-preprocessor/package.json
generated
vendored
47
node_modules/karma-html2js-preprocessor/package.json
generated
vendored
@ -1,47 +0,0 @@
|
||||
{
|
||||
"name": "karma-html2js-preprocessor",
|
||||
"version": "0.1.0",
|
||||
"description": "A Karma plugin. Convert HTML files into JS strings to serve them in a script tag.",
|
||||
"main": "lib/index.js",
|
||||
"scripts": {
|
||||
"test": "grunt test"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git://github.com/karma-runner/karma-html2js-preprocessor.git"
|
||||
},
|
||||
"keywords": [
|
||||
"karma-plugin",
|
||||
"karma-preprocessor",
|
||||
"html2js",
|
||||
"html"
|
||||
],
|
||||
"author": {
|
||||
"name": "Vojta Jina",
|
||||
"email": "vojta.jina@gmail.com"
|
||||
},
|
||||
"dependencies": {},
|
||||
"devDependencies": {
|
||||
"grunt": "~0.4.1",
|
||||
"grunt-simple-mocha": "~0.4",
|
||||
"grunt-contrib-jshint": "~0.6",
|
||||
"chai": "~1.4",
|
||||
"mocha": "~1.8",
|
||||
"grunt-npm": "~0.0.2",
|
||||
"grunt-bump": "~0.0.7",
|
||||
"grunt-auto-release": "~0.0.2"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"karma": ">=0.9"
|
||||
},
|
||||
"license": "MIT",
|
||||
"contributors": [],
|
||||
"readme": "# karma-html2js-preprocessor [](https://travis-ci.org/karma-runner/karma-html2js-preprocessor)\n\n> Preprocessor for converting HTML files into JS strings.\n\n*Note:* If you are using [AngularJS](http://angularjs.org/), check out [karma-ng-html2js-preprocessor](https://github.com/karma-runner/karma-ng-html2js-preprocessor).\n\n## Installation\n\n**This plugin ships with Karma by default, so you don't need to install it, it should just work ;-)**\n\nThe easiest way is to keep `karma-html2js-preprocessor` as a devDependency in your `package.json`.\n```json\n{\n \"devDependencies\": {\n \"karma\": \"~0.10\",\n \"karma-html2js-preprocessor\": \"~0.1\"\n }\n}\n```\n\nYou can simple do it by:\n```bash\nnpm install karma-html2js-preprocessor --save-dev\n```\n\n## Configuration\nFollowing code shows the default configuration...\n```js\n// karma.conf.js\nmodule.exports = function(config) {\n config.set({\n preprocessors: {\n '**/*.html': ['html2js']\n },\n\n files: [\n '*.js',\n '*.html'\n ]\n });\n};\n```\n\n## How does it work ?\n\nThis preprocessor converts HTML files into JS strings and publishes them in the global `window.__html__`, so that you can use these for testing DOM operations.\n\nFor instance this `template.html`...\n```html\n<div>something</div>\n```\n... will be served as `template.html.js`:\n```js\nwindow.__html__ = window.__html__ || {};\nwindow.__html__['template.html'] = '<div>something</div>';\n```\n\nSee the [end2end test](https://github.com/karma-runner/karma/tree/master/test/e2e/html2js) for a complete example.\n\n----\n\nFor more information on Karma see the [homepage].\n\n\n[homepage]: http://karma-runner.github.com\n",
|
||||
"readmeFilename": "README.md",
|
||||
"bugs": {
|
||||
"url": "https://github.com/karma-runner/karma-html2js-preprocessor/issues"
|
||||
},
|
||||
"homepage": "https://github.com/karma-runner/karma-html2js-preprocessor",
|
||||
"_id": "karma-html2js-preprocessor@0.1.0",
|
||||
"_from": "karma-html2js-preprocessor@*"
|
||||
}
|
20
node_modules/karma-jasmine/LICENSE
generated
vendored
20
node_modules/karma-jasmine/LICENSE
generated
vendored
@ -1,20 +0,0 @@
|
||||
The MIT License
|
||||
|
||||
Copyright (C) 2011-2013 Vojta Jína and contributors.
|
||||
|
||||
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.
|
43
node_modules/karma-jasmine/README.md
generated
vendored
43
node_modules/karma-jasmine/README.md
generated
vendored
@ -1,43 +0,0 @@
|
||||
# karma-jasmine [](https://travis-ci.org/karma-runner/karma-jasmine)
|
||||
|
||||
> Adapter for the [Jasmine](http://pivotal.github.io/jasmine/) testing framework.
|
||||
|
||||
## Installation
|
||||
|
||||
**This plugin ships with Karma by default, so you don't need to install it, it should just work ;-)**
|
||||
|
||||
The easiest way is to keep `karma-jasmine` as a devDependency in your `package.json`.
|
||||
```json
|
||||
{
|
||||
"devDependencies": {
|
||||
"karma": "~0.10",
|
||||
"karma-jasmine": "~0.1"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
You can simple do it by:
|
||||
```bash
|
||||
npm install karma-jasmine --save-dev
|
||||
```
|
||||
|
||||
## Configuration
|
||||
```js
|
||||
// karma.conf.js
|
||||
module.exports = function(config) {
|
||||
config.set({
|
||||
frameworks: ['jasmine'],
|
||||
|
||||
files: [
|
||||
'*.js'
|
||||
]
|
||||
});
|
||||
};
|
||||
```
|
||||
|
||||
----
|
||||
|
||||
For more information on Karma see the [homepage].
|
||||
|
||||
|
||||
[homepage]: http://karma-runner.github.com
|
165
node_modules/karma-jasmine/lib/adapter.js
generated
vendored
165
node_modules/karma-jasmine/lib/adapter.js
generated
vendored
@ -1,165 +0,0 @@
|
||||
(function(window) {
|
||||
|
||||
var formatFailedStep = function(step) {
|
||||
|
||||
var stack = step.trace.stack;
|
||||
var message = step.message;
|
||||
if (stack) {
|
||||
// remove the trailing dot
|
||||
var firstLine = stack.substring(0, stack.indexOf('\n') - 1);
|
||||
if (message && message.indexOf(firstLine) === -1) {
|
||||
stack = message + '\n' + stack;
|
||||
}
|
||||
|
||||
// remove jasmine stack entries
|
||||
return stack.replace(/\n.+jasmine\.js\?\d*\:.+(?=(\n|$))/g, '');
|
||||
}
|
||||
|
||||
return message;
|
||||
};
|
||||
|
||||
var indexOf = function(collection, item) {
|
||||
if (collection.indexOf) {
|
||||
return collection.indexOf(item);
|
||||
}
|
||||
|
||||
for (var i = 0, ii = collection.length; i < ii; i++) {
|
||||
if (collection[i] === item) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
|
||||
return -1;
|
||||
};
|
||||
|
||||
|
||||
// TODO(vojta): Karma might provide this
|
||||
var getCurrentTransport = function() {
|
||||
// probably running in debug.html (there's no socket.io)
|
||||
if (!window.parent.io) {
|
||||
return null;
|
||||
}
|
||||
|
||||
var location = window.parent.location;
|
||||
return window.parent.io.sockets[location.protocol + '//' + location.host].transport.name;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Very simple reporter for jasmine
|
||||
*/
|
||||
var KarmaReporter = function(tc) {
|
||||
|
||||
var getAllSpecNames = function(topLevelSuites) {
|
||||
var specNames = {};
|
||||
|
||||
var processSuite = function(suite, pointer) {
|
||||
var childSuite;
|
||||
var childPointer;
|
||||
|
||||
for (var i = 0; i < suite.suites_.length; i++) {
|
||||
childSuite = suite.suites_[i];
|
||||
childPointer = pointer[childSuite.description] = {};
|
||||
processSuite(childSuite, childPointer);
|
||||
}
|
||||
|
||||
pointer._ = [];
|
||||
for (var j = 0; j < suite.specs_.length; j++) {
|
||||
pointer._.push(suite.specs_[j].description);
|
||||
}
|
||||
};
|
||||
|
||||
var suite;
|
||||
var pointer;
|
||||
for (var k = 0; k < topLevelSuites.length; k++) {
|
||||
suite = topLevelSuites[k];
|
||||
pointer = specNames[suite.description] = {};
|
||||
processSuite(suite, pointer);
|
||||
}
|
||||
|
||||
return specNames;
|
||||
};
|
||||
|
||||
this.reportRunnerStarting = function(runner) {
|
||||
var transport = getCurrentTransport();
|
||||
var specNames = null;
|
||||
|
||||
// This structure can be pretty huge and it blows up socke.io connection, when polling.
|
||||
// https://github.com/LearnBoost/socket.io-client/issues/569
|
||||
if (transport === 'websocket' || transport === 'flashsocket') {
|
||||
specNames = getAllSpecNames(runner.topLevelSuites());
|
||||
}
|
||||
|
||||
tc.info({total: runner.specs().length, specs: specNames});
|
||||
};
|
||||
|
||||
this.reportRunnerResults = function(runner) {
|
||||
tc.complete({
|
||||
coverage: window.__coverage__
|
||||
});
|
||||
};
|
||||
|
||||
this.reportSuiteResults = function(suite) {
|
||||
// memory clean up
|
||||
suite.after_ = null;
|
||||
suite.before_ = null;
|
||||
suite.queue = null;
|
||||
};
|
||||
|
||||
this.reportSpecStarting = function(spec) {
|
||||
spec.results_.time = new Date().getTime();
|
||||
};
|
||||
|
||||
this.reportSpecResults = function(spec) {
|
||||
var result = {
|
||||
id: spec.id,
|
||||
description: spec.description,
|
||||
suite: [],
|
||||
success: spec.results_.failedCount === 0,
|
||||
skipped: spec.results_.skipped,
|
||||
time: spec.results_.skipped ? 0 : new Date().getTime() - spec.results_.time,
|
||||
log: []
|
||||
};
|
||||
|
||||
var suitePointer = spec.suite;
|
||||
while (suitePointer) {
|
||||
result.suite.unshift(suitePointer.description);
|
||||
suitePointer = suitePointer.parentSuite;
|
||||
}
|
||||
|
||||
if (!result.success) {
|
||||
var steps = spec.results_.items_;
|
||||
for (var i = 0; i < steps.length; i++) {
|
||||
if (!steps[i].passed_) {
|
||||
result.log.push(formatFailedStep(steps[i]));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
tc.result(result);
|
||||
|
||||
// memory clean up
|
||||
spec.results_ = null;
|
||||
spec.spies_ = null;
|
||||
spec.queue = null;
|
||||
};
|
||||
|
||||
this.log = function() {};
|
||||
};
|
||||
|
||||
|
||||
var createStartFn = function(tc, jasmineEnvPassedIn) {
|
||||
return function(config) {
|
||||
// we pass jasmineEnv during testing
|
||||
// in production we ask for it lazily, so that adapter can be loaded even before jasmine
|
||||
var jasmineEnv = jasmineEnvPassedIn || window.jasmine.getEnv();
|
||||
|
||||
jasmineEnv.addReporter(new KarmaReporter(tc));
|
||||
jasmineEnv.execute();
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
window.__karma__.start = createStartFn(window.__karma__);
|
||||
|
||||
})(window);
|
14
node_modules/karma-jasmine/lib/index.js
generated
vendored
14
node_modules/karma-jasmine/lib/index.js
generated
vendored
@ -1,14 +0,0 @@
|
||||
var createPattern = function(path) {
|
||||
return {pattern: path, included: true, served: true, watched: false};
|
||||
};
|
||||
|
||||
var initJasmine = function(files) {
|
||||
files.unshift(createPattern(__dirname + '/adapter.js'));
|
||||
files.unshift(createPattern(__dirname + '/jasmine.js'));
|
||||
};
|
||||
|
||||
initJasmine.$inject = ['config.files'];
|
||||
|
||||
module.exports = {
|
||||
'framework:jasmine': ['factory', initJasmine]
|
||||
};
|
2683
node_modules/karma-jasmine/lib/jasmine.js
generated
vendored
2683
node_modules/karma-jasmine/lib/jasmine.js
generated
vendored
File diff suppressed because it is too large
Load Diff
51
node_modules/karma-jasmine/package.json
generated
vendored
51
node_modules/karma-jasmine/package.json
generated
vendored
@ -1,51 +0,0 @@
|
||||
{
|
||||
"name": "karma-jasmine",
|
||||
"version": "0.1.3",
|
||||
"description": "A Karma plugin - adapter for Jasmine testing framework.",
|
||||
"main": "lib/index.js",
|
||||
"scripts": {
|
||||
"test": "grunt test"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git://github.com/karma-runner/karma-jasmine.git"
|
||||
},
|
||||
"keywords": [
|
||||
"karma-plugin",
|
||||
"karma-adapter",
|
||||
"jasmine"
|
||||
],
|
||||
"author": {
|
||||
"name": "Vojta Jina",
|
||||
"email": "vojta.jina@gmail.com"
|
||||
},
|
||||
"dependencies": {},
|
||||
"devDependencies": {
|
||||
"grunt": "~0.4.1",
|
||||
"grunt-contrib-jshint": "~0.6",
|
||||
"karma": "~0.9",
|
||||
"karma-jasmine": "*",
|
||||
"grunt-karma": "~0.4",
|
||||
"grunt-auto-release": "~0.0.2",
|
||||
"grunt-npm": "~0.0.2",
|
||||
"grunt-bump": "~0.0.7"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"karma": ">=0.9"
|
||||
},
|
||||
"license": "MIT",
|
||||
"contributors": [
|
||||
{
|
||||
"name": "Friedel Ziegelmayer",
|
||||
"email": "friedel.ziegelmayer@gmail.com"
|
||||
}
|
||||
],
|
||||
"readme": "# karma-jasmine [](https://travis-ci.org/karma-runner/karma-jasmine)\n\n> Adapter for the [Jasmine](http://pivotal.github.io/jasmine/) testing framework.\n\n## Installation\n\n**This plugin ships with Karma by default, so you don't need to install it, it should just work ;-)**\n\nThe easiest way is to keep `karma-jasmine` as a devDependency in your `package.json`.\n```json\n{\n \"devDependencies\": {\n \"karma\": \"~0.10\",\n \"karma-jasmine\": \"~0.1\"\n }\n}\n```\n\nYou can simple do it by:\n```bash\nnpm install karma-jasmine --save-dev\n```\n\n## Configuration\n```js\n// karma.conf.js\nmodule.exports = function(config) {\n config.set({\n frameworks: ['jasmine'],\n\n files: [\n '*.js'\n ]\n });\n};\n```\n\n----\n\nFor more information on Karma see the [homepage].\n\n\n[homepage]: http://karma-runner.github.com\n",
|
||||
"readmeFilename": "README.md",
|
||||
"bugs": {
|
||||
"url": "https://github.com/karma-runner/karma-jasmine/issues"
|
||||
},
|
||||
"homepage": "https://github.com/karma-runner/karma-jasmine",
|
||||
"_id": "karma-jasmine@0.1.3",
|
||||
"_from": "karma-jasmine@*"
|
||||
}
|
20
node_modules/karma-junit-reporter/LICENSE
generated
vendored
20
node_modules/karma-junit-reporter/LICENSE
generated
vendored
@ -1,20 +0,0 @@
|
||||
The MIT License
|
||||
|
||||
Copyright (C) 2011-2013 Google, Inc.
|
||||
|
||||
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.
|
48
node_modules/karma-junit-reporter/README.md
generated
vendored
48
node_modules/karma-junit-reporter/README.md
generated
vendored
@ -1,48 +0,0 @@
|
||||
# karma-junit-reporter
|
||||
|
||||
> Reporter for the JUnit XML format.
|
||||
|
||||
## Installation
|
||||
|
||||
The easiest way is to keep `karma-junit-reporter` as a devDependency in your `package.json`.
|
||||
```json
|
||||
{
|
||||
"devDependencies": {
|
||||
"karma": "~0.10",
|
||||
"karma-junit-reporter": "~0.1"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
You can simple do it by:
|
||||
```bash
|
||||
npm install karma-junit-reporter --save-dev
|
||||
```
|
||||
|
||||
## Configuration
|
||||
```js
|
||||
// karma.conf.js
|
||||
module.exports = function(config) {
|
||||
config.set({
|
||||
reporters: ['progress', 'junit'],
|
||||
|
||||
// the default configuration
|
||||
junitReporter: {
|
||||
outputFile: 'test-results.xml',
|
||||
suite: ''
|
||||
}
|
||||
});
|
||||
};
|
||||
```
|
||||
|
||||
You can pass list of reporters as a CLI argument too:
|
||||
```bash
|
||||
karma start --reporters junit,dots
|
||||
```
|
||||
|
||||
----
|
||||
|
||||
For more information on Karma see the [homepage].
|
||||
|
||||
|
||||
[homepage]: http://karma-runner.github.com
|
113
node_modules/karma-junit-reporter/index.js
generated
vendored
113
node_modules/karma-junit-reporter/index.js
generated
vendored
@ -1,113 +0,0 @@
|
||||
var os = require('os');
|
||||
var path = require('path');
|
||||
var fs = require('fs');
|
||||
var builder = require('xmlbuilder');
|
||||
|
||||
|
||||
var JUnitReporter = function(baseReporterDecorator, config, logger, helper, formatError) {
|
||||
var log = logger.create('reporter.junit');
|
||||
var reporterConfig = config.junitReporter || {};
|
||||
var pkgName = reporterConfig.suite || '';
|
||||
var outputFile = helper.normalizeWinPath(path.resolve(config.basePath, reporterConfig.outputFile
|
||||
|| 'test-results.xml'));
|
||||
|
||||
var xml;
|
||||
var suites;
|
||||
var pendingFileWritings = 0;
|
||||
var fileWritingFinished = function() {};
|
||||
var allMessages = [];
|
||||
|
||||
baseReporterDecorator(this);
|
||||
|
||||
this.adapters = [function(msg) {
|
||||
allMessages.push(msg);
|
||||
}];
|
||||
|
||||
var initliazeXmlForBrowser = function(browser) {
|
||||
var timestamp = (new Date()).toISOString().substr(0, 19);
|
||||
var suite = suites[browser.id] = xml.ele('testsuite', {
|
||||
name: browser.name, 'package': pkgName, timestamp: timestamp, id: 0, hostname: os.hostname()
|
||||
});
|
||||
suite.ele('properties').ele('property', {name: 'browser.fullName', value: browser.fullName});
|
||||
};
|
||||
|
||||
this.onRunStart = function(browsers) {
|
||||
suites = Object.create(null);
|
||||
xml = builder.create('testsuites');
|
||||
|
||||
// TODO(vojta): remove once we don't care about Karma 0.10
|
||||
browsers.forEach(initliazeXmlForBrowser);
|
||||
};
|
||||
|
||||
this.onBrowserStart = function(browser) {
|
||||
initliazeXmlForBrowser(browser);
|
||||
};
|
||||
|
||||
this.onBrowserComplete = function(browser) {
|
||||
var suite = suites[browser.id];
|
||||
var result = browser.lastResult;
|
||||
|
||||
suite.att('tests', result.total);
|
||||
suite.att('errors', result.disconnected || result.error ? 1 : 0);
|
||||
suite.att('failures', result.failed);
|
||||
suite.att('time', (result.netTime || 0) / 1000);
|
||||
|
||||
suite.ele('system-out').dat(allMessages.join() + '\n');
|
||||
suite.ele('system-err');
|
||||
};
|
||||
|
||||
this.onRunComplete = function() {
|
||||
var xmlToOutput = xml;
|
||||
|
||||
pendingFileWritings++;
|
||||
helper.mkdirIfNotExists(path.dirname(outputFile), function() {
|
||||
fs.writeFile(outputFile, xmlToOutput.end({pretty: true}), function(err) {
|
||||
if (err) {
|
||||
log.warn('Cannot write JUnit xml\n\t' + err.message);
|
||||
} else {
|
||||
log.debug('JUnit results written to "%s".', outputFile);
|
||||
}
|
||||
|
||||
if (!--pendingFileWritings) {
|
||||
fileWritingFinished();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
suites = xml = null;
|
||||
allMessages.length = 0;
|
||||
};
|
||||
|
||||
this.specSuccess = this.specSkipped = this.specFailure = function(browser, result) {
|
||||
var spec = suites[browser.id].ele('testcase', {
|
||||
name: result.description, time: ((result.time || 0) / 1000),
|
||||
classname: (pkgName ? pkgName + ' ' : '') + browser.name + '.' + result.suite.join(' ').replace(/\./g, '_')
|
||||
});
|
||||
|
||||
if (result.skipped) {
|
||||
spec.ele('skipped');
|
||||
}
|
||||
|
||||
if (!result.success) {
|
||||
result.log.forEach(function(err) {
|
||||
spec.ele('failure', {type: ''}, formatError(err));
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
// wait for writing all the xml files, before exiting
|
||||
this.onExit = function(done) {
|
||||
if (pendingFileWritings) {
|
||||
fileWritingFinished = done;
|
||||
} else {
|
||||
done();
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
JUnitReporter.$inject = ['baseReporterDecorator', 'config', 'logger', 'helper', 'formatError'];
|
||||
|
||||
// PUBLISH DI MODULE
|
||||
module.exports = {
|
||||
'reporter:junit': ['type', JUnitReporter]
|
||||
};
|
8
node_modules/karma-junit-reporter/node_modules/xmlbuilder/.npmignore
generated
vendored
8
node_modules/karma-junit-reporter/node_modules/xmlbuilder/.npmignore
generated
vendored
@ -1,8 +0,0 @@
|
||||
.gitignore
|
||||
.travis.yml
|
||||
Makefile
|
||||
.git/
|
||||
src/
|
||||
test/
|
||||
node_modules/
|
||||
|
73
node_modules/karma-junit-reporter/node_modules/xmlbuilder/README.md
generated
vendored
73
node_modules/karma-junit-reporter/node_modules/xmlbuilder/README.md
generated
vendored
@ -1,73 +0,0 @@
|
||||
# xmlbuilder-js
|
||||
|
||||
An XMLBuilder for [node.js](http://nodejs.org/) similar to
|
||||
[java-xmlbuilder](http://code.google.com/p/java-xmlbuilder/).
|
||||
|
||||
[](http://travis-ci.org/oozcitak/xmlbuilder-js)
|
||||
|
||||
### Installation:
|
||||
|
||||
``` sh
|
||||
npm install xmlbuilder
|
||||
```
|
||||
|
||||
### Important:
|
||||
|
||||
I had to break compatibility while adding multiple instances in 0.1.3.
|
||||
As a result, version from v0.1.3 are **not** compatible with previous versions.
|
||||
|
||||
### Usage:
|
||||
|
||||
``` js
|
||||
var builder = require('xmlbuilder');
|
||||
var xml = builder.create('root')
|
||||
.ele('xmlbuilder', {'for': 'node-js'})
|
||||
.ele('repo', {'type': 'git'}, 'git://github.com/oozcitak/xmlbuilder-js.git')
|
||||
.end({ pretty: true});
|
||||
|
||||
console.log(xml);
|
||||
```
|
||||
|
||||
will result in:
|
||||
|
||||
``` xml
|
||||
<?xml version="1.0"?>
|
||||
<root>
|
||||
<xmlbuilder for="node-js">
|
||||
<repo type="git">git://github.com/oozcitak/xmlbuilder-js.git</repo>
|
||||
</xmlbuilder>
|
||||
</root>
|
||||
```
|
||||
|
||||
If you need to do some processing:
|
||||
|
||||
``` js
|
||||
var root = builder.create('squares');
|
||||
root.com('f(x) = x^2');
|
||||
for(var i = 1; i <= 5; i++)
|
||||
{
|
||||
var item = root.ele('data');
|
||||
item.att('x', i);
|
||||
item.att('y', i * i);
|
||||
}
|
||||
```
|
||||
|
||||
This will result in:
|
||||
|
||||
``` xml
|
||||
<?xml version="1.0"?>
|
||||
<squares>
|
||||
<!-- f(x) = x^2 -->
|
||||
<data x="1" y="1"/>
|
||||
<data x="2" y="4"/>
|
||||
<data x="3" y="9"/>
|
||||
<data x="4" y="16"/>
|
||||
<data x="5" y="25"/>
|
||||
</squares>
|
||||
```
|
||||
|
||||
See the [Usage](https://github.com/oozcitak/xmlbuilder-js/wiki/Usage) page in the wiki for more detailed instructions.
|
||||
|
||||
### License:
|
||||
|
||||
`xmlbuilder-js` is [MIT Licensed](http://opensource.org/licenses/mit-license.php).
|
119
node_modules/karma-junit-reporter/node_modules/xmlbuilder/lib/XMLBuilder.js
generated
vendored
119
node_modules/karma-junit-reporter/node_modules/xmlbuilder/lib/XMLBuilder.js
generated
vendored
@ -1,119 +0,0 @@
|
||||
// Generated by CoffeeScript 1.3.3
|
||||
(function() {
|
||||
var XMLBuilder, XMLFragment;
|
||||
|
||||
XMLFragment = require('./XMLFragment');
|
||||
|
||||
XMLBuilder = (function() {
|
||||
|
||||
function XMLBuilder(name, xmldec, doctype) {
|
||||
var att, child, _ref;
|
||||
this.children = [];
|
||||
this.rootObject = null;
|
||||
if (this.is(name, 'Object')) {
|
||||
_ref = [name, xmldec], xmldec = _ref[0], doctype = _ref[1];
|
||||
name = null;
|
||||
}
|
||||
if (name != null) {
|
||||
name = '' + name || '';
|
||||
if (xmldec == null) {
|
||||
xmldec = {
|
||||
'version': '1.0'
|
||||
};
|
||||
}
|
||||
}
|
||||
if ((xmldec != null) && !(xmldec.version != null)) {
|
||||
throw new Error("Version number is required");
|
||||
}
|
||||
if (xmldec != null) {
|
||||
xmldec.version = '' + xmldec.version || '';
|
||||
if (!xmldec.version.match(/1\.[0-9]+/)) {
|
||||
throw new Error("Invalid version number: " + xmldec.version);
|
||||
}
|
||||
att = {
|
||||
version: xmldec.version
|
||||
};
|
||||
if (xmldec.encoding != null) {
|
||||
xmldec.encoding = '' + xmldec.encoding || '';
|
||||
if (!xmldec.encoding.match(/[A-Za-z](?:[A-Za-z0-9._-]|-)*/)) {
|
||||
throw new Error("Invalid encoding: " + xmldec.encoding);
|
||||
}
|
||||
att.encoding = xmldec.encoding;
|
||||
}
|
||||
if (xmldec.standalone != null) {
|
||||
att.standalone = xmldec.standalone ? "yes" : "no";
|
||||
}
|
||||
child = new XMLFragment(this, '?xml', att);
|
||||
this.children.push(child);
|
||||
}
|
||||
if (doctype != null) {
|
||||
att = {};
|
||||
if (name != null) {
|
||||
att.name = name;
|
||||
}
|
||||
if (doctype.ext != null) {
|
||||
doctype.ext = '' + doctype.ext || '';
|
||||
att.ext = doctype.ext;
|
||||
}
|
||||
child = new XMLFragment(this, '!DOCTYPE', att);
|
||||
this.children.push(child);
|
||||
}
|
||||
if (name != null) {
|
||||
this.begin(name);
|
||||
}
|
||||
}
|
||||
|
||||
XMLBuilder.prototype.begin = function(name, xmldec, doctype) {
|
||||
var doc, root;
|
||||
if (!(name != null)) {
|
||||
throw new Error("Root element needs a name");
|
||||
}
|
||||
if (this.rootObject) {
|
||||
this.children = [];
|
||||
this.rootObject = null;
|
||||
}
|
||||
if (xmldec != null) {
|
||||
doc = new XMLBuilder(name, xmldec, doctype);
|
||||
return doc.root();
|
||||
}
|
||||
name = '' + name || '';
|
||||
root = new XMLFragment(this, name, {});
|
||||
root.isRoot = true;
|
||||
root.documentObject = this;
|
||||
this.children.push(root);
|
||||
this.rootObject = root;
|
||||
return root;
|
||||
};
|
||||
|
||||
XMLBuilder.prototype.root = function() {
|
||||
return this.rootObject;
|
||||
};
|
||||
|
||||
XMLBuilder.prototype.end = function(options) {
|
||||
return toString(options);
|
||||
};
|
||||
|
||||
XMLBuilder.prototype.toString = function(options) {
|
||||
var child, r, _i, _len, _ref;
|
||||
r = '';
|
||||
_ref = this.children;
|
||||
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
||||
child = _ref[_i];
|
||||
r += child.toString(options);
|
||||
}
|
||||
return r;
|
||||
};
|
||||
|
||||
XMLBuilder.prototype.is = function(obj, type) {
|
||||
var clas;
|
||||
clas = Object.prototype.toString.call(obj).slice(8, -1);
|
||||
return (obj != null) && clas === type;
|
||||
};
|
||||
|
||||
return XMLBuilder;
|
||||
|
||||
})();
|
||||
|
||||
module.exports = XMLBuilder;
|
||||
|
||||
}).call(this);
|
422
node_modules/karma-junit-reporter/node_modules/xmlbuilder/lib/XMLFragment.js
generated
vendored
422
node_modules/karma-junit-reporter/node_modules/xmlbuilder/lib/XMLFragment.js
generated
vendored
@ -1,422 +0,0 @@
|
||||
// Generated by CoffeeScript 1.3.3
|
||||
(function() {
|
||||
var XMLFragment,
|
||||
__hasProp = {}.hasOwnProperty;
|
||||
|
||||
XMLFragment = (function() {
|
||||
|
||||
function XMLFragment(parent, name, attributes, text) {
|
||||
this.isRoot = false;
|
||||
this.documentObject = null;
|
||||
this.parent = parent;
|
||||
this.name = name;
|
||||
this.attributes = attributes;
|
||||
this.value = text;
|
||||
this.children = [];
|
||||
}
|
||||
|
||||
XMLFragment.prototype.element = function(name, attributes, text) {
|
||||
var child, key, val, _ref, _ref1;
|
||||
if (!(name != null)) {
|
||||
throw new Error("Missing element name");
|
||||
}
|
||||
name = '' + name || '';
|
||||
this.assertLegalChar(name);
|
||||
if (attributes == null) {
|
||||
attributes = {};
|
||||
}
|
||||
if (this.is(attributes, 'String') && this.is(text, 'Object')) {
|
||||
_ref = [text, attributes], attributes = _ref[0], text = _ref[1];
|
||||
} else if (this.is(attributes, 'String')) {
|
||||
_ref1 = [{}, attributes], attributes = _ref1[0], text = _ref1[1];
|
||||
}
|
||||
for (key in attributes) {
|
||||
if (!__hasProp.call(attributes, key)) continue;
|
||||
val = attributes[key];
|
||||
val = '' + val || '';
|
||||
attributes[key] = this.escape(val);
|
||||
}
|
||||
child = new XMLFragment(this, name, attributes);
|
||||
if (text != null) {
|
||||
text = '' + text || '';
|
||||
text = this.escape(text);
|
||||
this.assertLegalChar(text);
|
||||
child.raw(text);
|
||||
}
|
||||
this.children.push(child);
|
||||
return child;
|
||||
};
|
||||
|
||||
XMLFragment.prototype.insertBefore = function(name, attributes, text) {
|
||||
var child, i, key, val, _ref, _ref1;
|
||||
if (this.isRoot) {
|
||||
throw new Error("Cannot insert elements at root level");
|
||||
}
|
||||
if (!(name != null)) {
|
||||
throw new Error("Missing element name");
|
||||
}
|
||||
name = '' + name || '';
|
||||
this.assertLegalChar(name);
|
||||
if (attributes == null) {
|
||||
attributes = {};
|
||||
}
|
||||
if (this.is(attributes, 'String') && this.is(text, 'Object')) {
|
||||
_ref = [text, attributes], attributes = _ref[0], text = _ref[1];
|
||||
} else if (this.is(attributes, 'String')) {
|
||||
_ref1 = [{}, attributes], attributes = _ref1[0], text = _ref1[1];
|
||||
}
|
||||
for (key in attributes) {
|
||||
if (!__hasProp.call(attributes, key)) continue;
|
||||
val = attributes[key];
|
||||
val = '' + val || '';
|
||||
attributes[key] = this.escape(val);
|
||||
}
|
||||
child = new XMLFragment(this.parent, name, attributes);
|
||||
if (text != null) {
|
||||
text = '' + text || '';
|
||||
text = this.escape(text);
|
||||
this.assertLegalChar(text);
|
||||
child.raw(text);
|
||||
}
|
||||
i = this.parent.children.indexOf(this);
|
||||
this.parent.children.splice(i, 0, child);
|
||||
return child;
|
||||
};
|
||||
|
||||
XMLFragment.prototype.insertAfter = function(name, attributes, text) {
|
||||
var child, i, key, val, _ref, _ref1;
|
||||
if (this.isRoot) {
|
||||
throw new Error("Cannot insert elements at root level");
|
||||
}
|
||||
if (!(name != null)) {
|
||||
throw new Error("Missing element name");
|
||||
}
|
||||
name = '' + name || '';
|
||||
this.assertLegalChar(name);
|
||||
if (attributes == null) {
|
||||
attributes = {};
|
||||
}
|
||||
if (this.is(attributes, 'String') && this.is(text, 'Object')) {
|
||||
_ref = [text, attributes], attributes = _ref[0], text = _ref[1];
|
||||
} else if (this.is(attributes, 'String')) {
|
||||
_ref1 = [{}, attributes], attributes = _ref1[0], text = _ref1[1];
|
||||
}
|
||||
for (key in attributes) {
|
||||
if (!__hasProp.call(attributes, key)) continue;
|
||||
val = attributes[key];
|
||||
val = '' + val || '';
|
||||
attributes[key] = this.escape(val);
|
||||
}
|
||||
child = new XMLFragment(this.parent, name, attributes);
|
||||
if (text != null) {
|
||||
text = '' + text || '';
|
||||
text = this.escape(text);
|
||||
this.assertLegalChar(text);
|
||||
child.raw(text);
|
||||
}
|
||||
i = this.parent.children.indexOf(this);
|
||||
this.parent.children.splice(i + 1, 0, child);
|
||||
return child;
|
||||
};
|
||||
|
||||
XMLFragment.prototype.remove = function() {
|
||||
var i, _ref;
|
||||
if (this.isRoot) {
|
||||
throw new Error("Cannot remove the root element");
|
||||
}
|
||||
i = this.parent.children.indexOf(this);
|
||||
[].splice.apply(this.parent.children, [i, i - i + 1].concat(_ref = [])), _ref;
|
||||
return this.parent;
|
||||
};
|
||||
|
||||
XMLFragment.prototype.text = function(value) {
|
||||
var child;
|
||||
if (!(value != null)) {
|
||||
throw new Error("Missing element text");
|
||||
}
|
||||
value = '' + value || '';
|
||||
value = this.escape(value);
|
||||
this.assertLegalChar(value);
|
||||
child = new XMLFragment(this, '', {}, value);
|
||||
this.children.push(child);
|
||||
return this;
|
||||
};
|
||||
|
||||
XMLFragment.prototype.cdata = function(value) {
|
||||
var child;
|
||||
if (!(value != null)) {
|
||||
throw new Error("Missing CDATA text");
|
||||
}
|
||||
value = '' + value || '';
|
||||
this.assertLegalChar(value);
|
||||
if (value.match(/]]>/)) {
|
||||
throw new Error("Invalid CDATA text: " + value);
|
||||
}
|
||||
child = new XMLFragment(this, '', {}, '<![CDATA[' + value + ']]>');
|
||||
this.children.push(child);
|
||||
return this;
|
||||
};
|
||||
|
||||
XMLFragment.prototype.comment = function(value) {
|
||||
var child;
|
||||
if (!(value != null)) {
|
||||
throw new Error("Missing comment text");
|
||||
}
|
||||
value = '' + value || '';
|
||||
value = this.escape(value);
|
||||
this.assertLegalChar(value);
|
||||
if (value.match(/--/)) {
|
||||
throw new Error("Comment text cannot contain double-hypen: " + value);
|
||||
}
|
||||
child = new XMLFragment(this, '', {}, '<!-- ' + value + ' -->');
|
||||
this.children.push(child);
|
||||
return this;
|
||||
};
|
||||
|
||||
XMLFragment.prototype.raw = function(value) {
|
||||
var child;
|
||||
if (!(value != null)) {
|
||||
throw new Error("Missing raw text");
|
||||
}
|
||||
value = '' + value || '';
|
||||
child = new XMLFragment(this, '', {}, value);
|
||||
this.children.push(child);
|
||||
return this;
|
||||
};
|
||||
|
||||
XMLFragment.prototype.up = function() {
|
||||
if (this.isRoot) {
|
||||
throw new Error("This node has no parent. Use doc() if you need to get the document object.");
|
||||
}
|
||||
return this.parent;
|
||||
};
|
||||
|
||||
XMLFragment.prototype.root = function() {
|
||||
var child;
|
||||
if (this.isRoot) {
|
||||
return this;
|
||||
}
|
||||
child = this.parent;
|
||||
while (!child.isRoot) {
|
||||
child = child.parent;
|
||||
}
|
||||
return child;
|
||||
};
|
||||
|
||||
XMLFragment.prototype.document = function() {
|
||||
return this.root().documentObject;
|
||||
};
|
||||
|
||||
XMLFragment.prototype.end = function(options) {
|
||||
return this.document().toString(options);
|
||||
};
|
||||
|
||||
XMLFragment.prototype.prev = function() {
|
||||
var i;
|
||||
if (this.isRoot) {
|
||||
throw new Error("Root node has no siblings");
|
||||
}
|
||||
i = this.parent.children.indexOf(this);
|
||||
if (i < 1) {
|
||||
throw new Error("Already at the first node");
|
||||
}
|
||||
return this.parent.children[i - 1];
|
||||
};
|
||||
|
||||
XMLFragment.prototype.next = function() {
|
||||
var i;
|
||||
if (this.isRoot) {
|
||||
throw new Error("Root node has no siblings");
|
||||
}
|
||||
i = this.parent.children.indexOf(this);
|
||||
if (i === -1 || i === this.parent.children.length - 1) {
|
||||
throw new Error("Already at the last node");
|
||||
}
|
||||
return this.parent.children[i + 1];
|
||||
};
|
||||
|
||||
XMLFragment.prototype.clone = function(deep) {
|
||||
var clonedSelf;
|
||||
clonedSelf = new XMLFragment(this.parent, this.name, this.attributes, this.value);
|
||||
if (deep) {
|
||||
this.children.forEach(function(child) {
|
||||
var clonedChild;
|
||||
clonedChild = child.clone(deep);
|
||||
clonedChild.parent = clonedSelf;
|
||||
return clonedSelf.children.push(clonedChild);
|
||||
});
|
||||
}
|
||||
return clonedSelf;
|
||||
};
|
||||
|
||||
XMLFragment.prototype.importXMLBuilder = function(xmlbuilder) {
|
||||
var clonedRoot;
|
||||
clonedRoot = xmlbuilder.root().clone(true);
|
||||
clonedRoot.parent = this;
|
||||
this.children.push(clonedRoot);
|
||||
clonedRoot.isRoot = false;
|
||||
return this;
|
||||
};
|
||||
|
||||
XMLFragment.prototype.attribute = function(name, value) {
|
||||
var _ref;
|
||||
if (!(name != null)) {
|
||||
throw new Error("Missing attribute name");
|
||||
}
|
||||
if (!(value != null)) {
|
||||
throw new Error("Missing attribute value");
|
||||
}
|
||||
name = '' + name || '';
|
||||
value = '' + value || '';
|
||||
if ((_ref = this.attributes) == null) {
|
||||
this.attributes = {};
|
||||
}
|
||||
this.attributes[name] = this.escape(value);
|
||||
return this;
|
||||
};
|
||||
|
||||
XMLFragment.prototype.removeAttribute = function(name) {
|
||||
if (!(name != null)) {
|
||||
throw new Error("Missing attribute name");
|
||||
}
|
||||
name = '' + name || '';
|
||||
delete this.attributes[name];
|
||||
return this;
|
||||
};
|
||||
|
||||
XMLFragment.prototype.toString = function(options, level) {
|
||||
var attName, attValue, child, indent, newline, pretty, r, space, _i, _len, _ref, _ref1;
|
||||
pretty = (options != null) && options.pretty || false;
|
||||
indent = (options != null) && options.indent || ' ';
|
||||
newline = (options != null) && options.newline || '\n';
|
||||
level || (level = 0);
|
||||
space = new Array(level + 1).join(indent);
|
||||
r = '';
|
||||
if (pretty) {
|
||||
r += space;
|
||||
}
|
||||
if (!(this.value != null)) {
|
||||
r += '<' + this.name;
|
||||
} else {
|
||||
r += '' + this.value;
|
||||
}
|
||||
_ref = this.attributes;
|
||||
for (attName in _ref) {
|
||||
attValue = _ref[attName];
|
||||
if (this.name === '!DOCTYPE') {
|
||||
r += ' ' + attValue;
|
||||
} else {
|
||||
r += ' ' + attName + '="' + attValue + '"';
|
||||
}
|
||||
}
|
||||
if (this.children.length === 0) {
|
||||
if (!(this.value != null)) {
|
||||
r += this.name === '?xml' ? '?>' : this.name === '!DOCTYPE' ? '>' : '/>';
|
||||
}
|
||||
if (pretty) {
|
||||
r += newline;
|
||||
}
|
||||
} else if (pretty && this.children.length === 1 && this.children[0].value) {
|
||||
r += '>';
|
||||
r += this.children[0].value;
|
||||
r += '</' + this.name + '>';
|
||||
r += newline;
|
||||
} else {
|
||||
r += '>';
|
||||
if (pretty) {
|
||||
r += newline;
|
||||
}
|
||||
_ref1 = this.children;
|
||||
for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
|
||||
child = _ref1[_i];
|
||||
r += child.toString(options, level + 1);
|
||||
}
|
||||
if (pretty) {
|
||||
r += space;
|
||||
}
|
||||
r += '</' + this.name + '>';
|
||||
if (pretty) {
|
||||
r += newline;
|
||||
}
|
||||
}
|
||||
return r;
|
||||
};
|
||||
|
||||
XMLFragment.prototype.escape = function(str) {
|
||||
return str.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/'/g, ''').replace(/"/g, '"');
|
||||
};
|
||||
|
||||
XMLFragment.prototype.assertLegalChar = function(str) {
|
||||
var chars, chr;
|
||||
chars = /[\u0000-\u0008\u000B-\u000C\u000E-\u001F\uD800-\uDFFF\uFFFE-\uFFFF]/;
|
||||
chr = str.match(chars);
|
||||
if (chr) {
|
||||
throw new Error("Invalid character (" + chr + ") in string: " + str);
|
||||
}
|
||||
};
|
||||
|
||||
XMLFragment.prototype.is = function(obj, type) {
|
||||
var clas;
|
||||
clas = Object.prototype.toString.call(obj).slice(8, -1);
|
||||
return (obj != null) && clas === type;
|
||||
};
|
||||
|
||||
XMLFragment.prototype.ele = function(name, attributes, text) {
|
||||
return this.element(name, attributes, text);
|
||||
};
|
||||
|
||||
XMLFragment.prototype.txt = function(value) {
|
||||
return this.text(value);
|
||||
};
|
||||
|
||||
XMLFragment.prototype.dat = function(value) {
|
||||
return this.cdata(value);
|
||||
};
|
||||
|
||||
XMLFragment.prototype.att = function(name, value) {
|
||||
return this.attribute(name, value);
|
||||
};
|
||||
|
||||
XMLFragment.prototype.com = function(value) {
|
||||
return this.comment(value);
|
||||
};
|
||||
|
||||
XMLFragment.prototype.doc = function() {
|
||||
return this.document();
|
||||
};
|
||||
|
||||
XMLFragment.prototype.e = function(name, attributes, text) {
|
||||
return this.element(name, attributes, text);
|
||||
};
|
||||
|
||||
XMLFragment.prototype.t = function(value) {
|
||||
return this.text(value);
|
||||
};
|
||||
|
||||
XMLFragment.prototype.d = function(value) {
|
||||
return this.cdata(value);
|
||||
};
|
||||
|
||||
XMLFragment.prototype.a = function(name, value) {
|
||||
return this.attribute(name, value);
|
||||
};
|
||||
|
||||
XMLFragment.prototype.c = function(value) {
|
||||
return this.comment(value);
|
||||
};
|
||||
|
||||
XMLFragment.prototype.r = function(value) {
|
||||
return this.raw(value);
|
||||
};
|
||||
|
||||
XMLFragment.prototype.u = function() {
|
||||
return this.up();
|
||||
};
|
||||
|
||||
return XMLFragment;
|
||||
|
||||
})();
|
||||
|
||||
module.exports = XMLFragment;
|
||||
|
||||
}).call(this);
|
15
node_modules/karma-junit-reporter/node_modules/xmlbuilder/lib/index.js
generated
vendored
15
node_modules/karma-junit-reporter/node_modules/xmlbuilder/lib/index.js
generated
vendored
@ -1,15 +0,0 @@
|
||||
// Generated by CoffeeScript 1.3.3
|
||||
(function() {
|
||||
var XMLBuilder;
|
||||
|
||||
XMLBuilder = require('./XMLBuilder');
|
||||
|
||||
module.exports.create = function(name, xmldec, doctype) {
|
||||
if (name != null) {
|
||||
return new XMLBuilder(name, xmldec, doctype).root();
|
||||
} else {
|
||||
return new XMLBuilder();
|
||||
}
|
||||
};
|
||||
|
||||
}).call(this);
|
45
node_modules/karma-junit-reporter/node_modules/xmlbuilder/package.json
generated
vendored
45
node_modules/karma-junit-reporter/node_modules/xmlbuilder/package.json
generated
vendored
@ -1,45 +0,0 @@
|
||||
{
|
||||
"name": "xmlbuilder",
|
||||
"version": "0.4.2",
|
||||
"keywords": [
|
||||
"xml",
|
||||
"xmlbuilder"
|
||||
],
|
||||
"homepage": "http://github.com/oozcitak/xmlbuilder-js",
|
||||
"description": "An XML builder for node.js",
|
||||
"author": {
|
||||
"name": "Ozgur Ozcitak",
|
||||
"email": "oozcitak@gmail.com"
|
||||
},
|
||||
"licenses": [
|
||||
{
|
||||
"type": "MIT",
|
||||
"url": "http://opensource.org/licenses/mit-license.php"
|
||||
}
|
||||
],
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git://github.com/oozcitak/xmlbuilder-js.git"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "http://github.com/oozcitak/xmlbuilder-js/issues"
|
||||
},
|
||||
"main": "./lib/index",
|
||||
"engines": {
|
||||
"node": ">=0.2.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"coffee-script": "1.1.x"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "make test"
|
||||
},
|
||||
"readme": "# xmlbuilder-js\n\nAn XMLBuilder for [node.js](http://nodejs.org/) similar to \n[java-xmlbuilder](http://code.google.com/p/java-xmlbuilder/).\n\n[](http://travis-ci.org/oozcitak/xmlbuilder-js)\n\n### Installation:\n\n``` sh\nnpm install xmlbuilder\n```\n\n### Important:\n\nI had to break compatibility while adding multiple instances in 0.1.3. \nAs a result, version from v0.1.3 are **not** compatible with previous versions.\n\n### Usage:\n\n``` js\nvar builder = require('xmlbuilder');\nvar xml = builder.create('root')\n .ele('xmlbuilder', {'for': 'node-js'})\n .ele('repo', {'type': 'git'}, 'git://github.com/oozcitak/xmlbuilder-js.git')\n .end({ pretty: true});\n \nconsole.log(xml);\n```\n\nwill result in:\n\n``` xml\n<?xml version=\"1.0\"?>\n<root>\n <xmlbuilder for=\"node-js\">\n <repo type=\"git\">git://github.com/oozcitak/xmlbuilder-js.git</repo>\n </xmlbuilder>\n</root>\n```\n\nIf you need to do some processing:\n\n``` js\nvar root = builder.create('squares');\nroot.com('f(x) = x^2');\nfor(var i = 1; i <= 5; i++)\n{\n var item = root.ele('data');\n item.att('x', i);\n item.att('y', i * i);\n}\n```\n\nThis will result in:\n\n``` xml\n<?xml version=\"1.0\"?>\n<squares>\n <!-- f(x) = x^2 -->\n <data x=\"1\" y=\"1\"/>\n <data x=\"2\" y=\"4\"/>\n <data x=\"3\" y=\"9\"/>\n <data x=\"4\" y=\"16\"/>\n <data x=\"5\" y=\"25\"/>\n</squares>\n```\n\nSee the [Usage](https://github.com/oozcitak/xmlbuilder-js/wiki/Usage) page in the wiki for more detailed instructions.\n\n### License:\n\n`xmlbuilder-js` is [MIT Licensed](http://opensource.org/licenses/mit-license.php).\n",
|
||||
"readmeFilename": "README.md",
|
||||
"_id": "xmlbuilder@0.4.2",
|
||||
"dist": {
|
||||
"shasum": "baa20a72d5b4a34bdb25bcc4aa67f2edb3e12777"
|
||||
},
|
||||
"_from": "xmlbuilder@0.4.2",
|
||||
"_resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-0.4.2.tgz"
|
||||
}
|
57
node_modules/karma-junit-reporter/package.json
generated
vendored
57
node_modules/karma-junit-reporter/package.json
generated
vendored
@ -1,57 +0,0 @@
|
||||
{
|
||||
"name": "karma-junit-reporter",
|
||||
"version": "0.2.1",
|
||||
"description": "A Karma plugin. Report results in junit xml format.",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git://github.com/karma-runner/karma-junit-reporter.git"
|
||||
},
|
||||
"keywords": [
|
||||
"karma-plugin",
|
||||
"karma-reporter",
|
||||
"junit"
|
||||
],
|
||||
"author": {
|
||||
"name": "Vojta Jina",
|
||||
"email": "vojta.jina@gmail.com"
|
||||
},
|
||||
"dependencies": {
|
||||
"xmlbuilder": "0.4.2"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"karma": ">=0.9"
|
||||
},
|
||||
"license": "MIT",
|
||||
"devDependencies": {
|
||||
"grunt": "~0.4.1",
|
||||
"grunt-npm": "~0.0.2",
|
||||
"grunt-bump": "~0.0.7",
|
||||
"grunt-auto-release": "~0.0.2"
|
||||
},
|
||||
"contributors": [
|
||||
{
|
||||
"name": "Friedel Ziegelmayer",
|
||||
"email": "friedel.ziegelmayer@gmail.com"
|
||||
},
|
||||
{
|
||||
"name": "Trey Hyde",
|
||||
"email": "thyde@centraldesktop.com"
|
||||
}
|
||||
],
|
||||
"readme": "# karma-junit-reporter\n\n> Reporter for the JUnit XML format.\n\n## Installation\n\nThe easiest way is to keep `karma-junit-reporter` as a devDependency in your `package.json`.\n```json\n{\n \"devDependencies\": {\n \"karma\": \"~0.10\",\n \"karma-junit-reporter\": \"~0.1\"\n }\n}\n```\n\nYou can simple do it by:\n```bash\nnpm install karma-junit-reporter --save-dev\n```\n\n## Configuration\n```js\n// karma.conf.js\nmodule.exports = function(config) {\n config.set({\n reporters: ['progress', 'junit'],\n\n // the default configuration\n junitReporter: {\n outputFile: 'test-results.xml',\n suite: ''\n }\n });\n};\n```\n\nYou can pass list of reporters as a CLI argument too:\n```bash\nkarma start --reporters junit,dots\n```\n\n----\n\nFor more information on Karma see the [homepage].\n\n\n[homepage]: http://karma-runner.github.com\n",
|
||||
"readmeFilename": "README.md",
|
||||
"bugs": {
|
||||
"url": "https://github.com/karma-runner/karma-junit-reporter/issues"
|
||||
},
|
||||
"homepage": "https://github.com/karma-runner/karma-junit-reporter",
|
||||
"_id": "karma-junit-reporter@0.2.1",
|
||||
"dist": {
|
||||
"shasum": "e7abb70b82d2d04fbc5fb9d3ba86a1963828b598"
|
||||
},
|
||||
"_from": "karma-junit-reporter@",
|
||||
"_resolved": "https://registry.npmjs.org/karma-junit-reporter/-/karma-junit-reporter-0.2.1.tgz"
|
||||
}
|
20
node_modules/karma-phantomjs-launcher/LICENSE
generated
vendored
20
node_modules/karma-phantomjs-launcher/LICENSE
generated
vendored
@ -1,20 +0,0 @@
|
||||
The MIT License
|
||||
|
||||
Copyright (C) 2011-2013 Google, Inc.
|
||||
|
||||
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.
|
59
node_modules/karma-phantomjs-launcher/README.md
generated
vendored
59
node_modules/karma-phantomjs-launcher/README.md
generated
vendored
@ -1,59 +0,0 @@
|
||||
# karma-phantomjs-launcher
|
||||
|
||||
> Launcher for [PhantomJS].
|
||||
|
||||
## Installation
|
||||
|
||||
**This plugin ships with Karma by default, so you don't need to install it, it should just work ;-)**
|
||||
|
||||
The easiest way is to keep `karma-phantomjs-launcher` as a devDependency in your `package.json`.
|
||||
```json
|
||||
{
|
||||
"devDependencies": {
|
||||
"karma": "~0.10",
|
||||
"karma-phantomjs-launcher": "~0.1"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
You can simple do it by:
|
||||
```bash
|
||||
npm install karma-phantomjs-launcher --save-dev
|
||||
```
|
||||
|
||||
## Configuration
|
||||
```js
|
||||
// karma.conf.js
|
||||
module.exports = function(config) {
|
||||
config.set({
|
||||
browsers: ['PhantomJS', 'PhantomJS_custom'],
|
||||
|
||||
// you can define custom flags
|
||||
customLaunchers: {
|
||||
'PhantomJS_custom': {
|
||||
base: 'PhantomJS',
|
||||
options: {
|
||||
windowName: 'my-window',
|
||||
settings: {
|
||||
webSecurityEnabled: false
|
||||
}
|
||||
},
|
||||
flags: ['--remote-debugger-port=9000']
|
||||
}
|
||||
}
|
||||
});
|
||||
};
|
||||
```
|
||||
|
||||
You can pass list of browsers as a CLI argument too:
|
||||
```bash
|
||||
karma start --browsers PhantomJS_custom
|
||||
```
|
||||
|
||||
----
|
||||
|
||||
For more information on Karma see the [homepage].
|
||||
|
||||
|
||||
[homepage]: http://karma-runner.github.com
|
||||
[PhantomJS]: http://phantomjs.org/
|
51
node_modules/karma-phantomjs-launcher/index.js
generated
vendored
51
node_modules/karma-phantomjs-launcher/index.js
generated
vendored
@ -1,51 +0,0 @@
|
||||
var fs = require('fs');
|
||||
|
||||
|
||||
var PhantomJSBrowser = function(baseBrowserDecorator, config, args) {
|
||||
baseBrowserDecorator(this);
|
||||
|
||||
var options = args && args.options || config && config.options || {};
|
||||
var flags = args && args.flags || config && config.flags || [];
|
||||
|
||||
this._start = function(url) {
|
||||
// create the js file that will open karma
|
||||
var captureFile = this._tempDir + '/capture.js';
|
||||
var optionsCode = Object.keys(options).map(function (key) {
|
||||
if (key !== 'settings') { // settings cannot be overriden, it should be extended!
|
||||
return 'page.' + key + ' = ' + JSON.stringify(options[key]) + ';';
|
||||
}
|
||||
});
|
||||
|
||||
if (options.settings) {
|
||||
optionsCode = optionsCode.concat(Object.keys(options.settings).map(function (key) {
|
||||
return 'page.settings.' + key + ' = ' + JSON.stringify(options.settings[key]) + ';';
|
||||
}));
|
||||
}
|
||||
|
||||
var captureCode = 'var page = require("webpage").create();\n' +
|
||||
optionsCode.join('\n') + '\npage.open("' + url + '");\n';
|
||||
fs.writeFileSync(captureFile, captureCode);
|
||||
|
||||
// and start phantomjs
|
||||
this._execCommand(this._getCommand(), flags.concat(captureFile));
|
||||
};
|
||||
};
|
||||
|
||||
PhantomJSBrowser.prototype = {
|
||||
name: 'PhantomJS',
|
||||
|
||||
DEFAULT_CMD: {
|
||||
linux: require('phantomjs').path,
|
||||
darwin: require('phantomjs').path,
|
||||
win32: require('phantomjs').path
|
||||
},
|
||||
ENV_CMD: 'PHANTOMJS_BIN'
|
||||
};
|
||||
|
||||
PhantomJSBrowser.$inject = ['baseBrowserDecorator', 'config.phantomjsLauncher', 'args'];
|
||||
|
||||
|
||||
// PUBLISH DI MODULE
|
||||
module.exports = {
|
||||
'launcher:PhantomJS': ['type', PhantomJSBrowser]
|
||||
};
|
36
node_modules/karma-phantomjs-launcher/node_modules/.bin/phantomjs
generated
vendored
36
node_modules/karma-phantomjs-launcher/node_modules/.bin/phantomjs
generated
vendored
@ -1,36 +0,0 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
/**
|
||||
* Script that will execute the downloaded phantomjs binary. stdio are
|
||||
* forwarded to and from the child process.
|
||||
*
|
||||
* The following is for an ugly hack to avoid a problem where the installer
|
||||
* finds the bin script npm creates during global installation.
|
||||
*
|
||||
* {NPM_INSTALL_MARKER}
|
||||
*/
|
||||
|
||||
var path = require('path')
|
||||
var spawn = require('child_process').spawn
|
||||
|
||||
var binPath = require(path.join(__dirname, '..', 'lib', 'phantomjs')).path
|
||||
|
||||
var args = process.argv.slice(2)
|
||||
|
||||
// For Node 0.6 compatibility, pipe the streams manually, instead of using
|
||||
// `{ stdio: 'inherit' }`.
|
||||
var cp = spawn(binPath, args)
|
||||
cp.stdout.pipe(process.stdout)
|
||||
cp.stderr.pipe(process.stderr)
|
||||
process.stdin.pipe(cp.stdin)
|
||||
|
||||
cp.on('error', function (err) {
|
||||
console.error('Error executing phantom at', binPath)
|
||||
console.error(err.stack)
|
||||
})
|
||||
cp.on('exit', process.exit)
|
||||
|
||||
process.on('SIGTERM', function() {
|
||||
cp.kill('SIGTERM')
|
||||
process.exit(1)
|
||||
})
|
3
node_modules/karma-phantomjs-launcher/node_modules/phantomjs/.jshintrc
generated
vendored
3
node_modules/karma-phantomjs-launcher/node_modules/phantomjs/.jshintrc
generated
vendored
@ -1,3 +0,0 @@
|
||||
{
|
||||
asi: false
|
||||
}
|
5
node_modules/karma-phantomjs-launcher/node_modules/phantomjs/.npmignore
generated
vendored
5
node_modules/karma-phantomjs-launcher/node_modules/phantomjs/.npmignore
generated
vendored
@ -1,5 +0,0 @@
|
||||
/node_modules
|
||||
/lib/phantom
|
||||
/lib/location.js
|
||||
/tmp
|
||||
npm-debug.log
|
5
node_modules/karma-phantomjs-launcher/node_modules/phantomjs/.travis.yml
generated
vendored
5
node_modules/karma-phantomjs-launcher/node_modules/phantomjs/.travis.yml
generated
vendored
@ -1,5 +0,0 @@
|
||||
language: node_js
|
||||
node_js:
|
||||
- "0.6"
|
||||
- "0.8"
|
||||
- "0.10"
|
194
node_modules/karma-phantomjs-launcher/node_modules/phantomjs/LICENSE.txt
generated
vendored
194
node_modules/karma-phantomjs-launcher/node_modules/phantomjs/LICENSE.txt
generated
vendored
@ -1,194 +0,0 @@
|
||||
Copyright 2012 The Obvious Corporation.
|
||||
http://obvious.com/
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
|
||||
|
||||
-------------------------------------------------------------------------
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the 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.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
122
node_modules/karma-phantomjs-launcher/node_modules/phantomjs/README.md
generated
vendored
122
node_modules/karma-phantomjs-launcher/node_modules/phantomjs/README.md
generated
vendored
@ -1,122 +0,0 @@
|
||||
phantom
|
||||
=======
|
||||
|
||||
An NPM wrapper for [PhantomJS](http://phantomjs.org/), headless webkit with JS API.
|
||||
|
||||
Building and Installing
|
||||
-----------------------
|
||||
|
||||
```shell
|
||||
npm install phantomjs
|
||||
```
|
||||
|
||||
Or grab the source and
|
||||
|
||||
```shell
|
||||
node ./install.js
|
||||
```
|
||||
|
||||
What this is really doing is just grabbing a particular "blessed" (by
|
||||
this module) version of Phantom. As new versions of Phantom are released
|
||||
and vetted, this module will be updated accordingly.
|
||||
|
||||
The package has been set up to fetch and run Phantom for MacOS (darwin),
|
||||
Linux based platforms (as identified by nodejs), and -- as of version 0.2.0 --
|
||||
Windows (thanks to [Domenic Denicola](https://github.com/domenic)). If you
|
||||
spot any platform weirdnesses, let us know or send a patch.
|
||||
|
||||
Running
|
||||
-------
|
||||
|
||||
```shell
|
||||
bin/phantom [phantom arguments]
|
||||
```
|
||||
|
||||
And npm will install a link to the binary in `node_modules/.bin` as
|
||||
it is wont to do.
|
||||
|
||||
Running via node
|
||||
----------------
|
||||
|
||||
The package exports a `path` string that contains the path to the
|
||||
phantomjs binary/executable.
|
||||
|
||||
Below is an example of using this package via node.
|
||||
|
||||
```javascript
|
||||
var childProcess = require('child_process')
|
||||
var phantomjs = require('phantomjs')
|
||||
var binPath = phantomjs.path
|
||||
|
||||
var childArgs = [
|
||||
path.join(__dirname, 'phantomjs-script.js'),
|
||||
'some other argument (passed to phantomjs script)'
|
||||
]
|
||||
|
||||
childProcess.execFile(binPath, childArgs, function(err, stdout, stderr) {
|
||||
// handle results
|
||||
})
|
||||
|
||||
```
|
||||
|
||||
Versioning
|
||||
----------
|
||||
|
||||
The NPM package version tracks the version of PhantomJS that will be installed,
|
||||
with an additional build number that is used for revisions to the installer.
|
||||
|
||||
As such `1.8.0-1` will `1.8.0-2` will both install PhantomJs 1.8 but the latter
|
||||
has newer changes to the installer.
|
||||
|
||||
A Note on PhantomJS
|
||||
-------------------
|
||||
|
||||
PhantomJS is not a library for NodeJS. It's a separate environment and code
|
||||
written for node is unlikely to be compatible. In particular PhantomJS does
|
||||
not expose a Common JS package loader.
|
||||
|
||||
This is an _NPM wrapper_ and can be used to conveniently make Phantom available
|
||||
It is not a Node JS wrapper.
|
||||
|
||||
I have had reasonable experiences writing standalone Phantom scripts which I
|
||||
then drive from within a node program by spawning phantom in a child process.
|
||||
|
||||
Read the PhantomJS FAQ for more details: http://phantomjs.org/faq.html
|
||||
|
||||
### Linux Note
|
||||
|
||||
An extra note on Linux usage, from the PhantomJS download page:
|
||||
|
||||
> This package is built on CentOS 5.8. It should run successfully on Lucid or
|
||||
> more modern systems (including other distributions). There is no requirement
|
||||
> to install Qt, WebKit, or any other libraries. It is however expected that
|
||||
> some base libraries necessary for rendering (FreeType, Fontconfig) and the
|
||||
> basic font files are available in the system.
|
||||
|
||||
Contributing
|
||||
------------
|
||||
|
||||
Questions, comments, bug reports, and pull requests are all welcome. Submit them at
|
||||
[the project on GitHub](https://github.com/Obvious/phantomjs/). If you haven't contributed to an
|
||||
[Obvious](http://github.com/Obvious/) project before please head over to the
|
||||
[Open Source Project](https://github.com/Obvious/open-source#note-to-external-contributors) and fill
|
||||
out an OCLA (it should be pretty painless).
|
||||
|
||||
Bug reports that include steps-to-reproduce (including code) are the
|
||||
best. Even better, make them in the form of pull requests.
|
||||
|
||||
Author
|
||||
------
|
||||
|
||||
[Dan Pupius](https://github.com/dpup)
|
||||
([personal website](http://pupius.co.uk)), supported by
|
||||
[The Obvious Corporation](http://obvious.com/).
|
||||
|
||||
License
|
||||
-------
|
||||
|
||||
Copyright 2012 [The Obvious Corporation](http://obvious.com/).
|
||||
|
||||
Licensed under the Apache License, Version 2.0.
|
||||
See the top-level file `LICENSE.txt` and
|
||||
(http://www.apache.org/licenses/LICENSE-2.0).
|
36
node_modules/karma-phantomjs-launcher/node_modules/phantomjs/bin/phantomjs
generated
vendored
36
node_modules/karma-phantomjs-launcher/node_modules/phantomjs/bin/phantomjs
generated
vendored
@ -1,36 +0,0 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
/**
|
||||
* Script that will execute the downloaded phantomjs binary. stdio are
|
||||
* forwarded to and from the child process.
|
||||
*
|
||||
* The following is for an ugly hack to avoid a problem where the installer
|
||||
* finds the bin script npm creates during global installation.
|
||||
*
|
||||
* {NPM_INSTALL_MARKER}
|
||||
*/
|
||||
|
||||
var path = require('path')
|
||||
var spawn = require('child_process').spawn
|
||||
|
||||
var binPath = require(path.join(__dirname, '..', 'lib', 'phantomjs')).path
|
||||
|
||||
var args = process.argv.slice(2)
|
||||
|
||||
// For Node 0.6 compatibility, pipe the streams manually, instead of using
|
||||
// `{ stdio: 'inherit' }`.
|
||||
var cp = spawn(binPath, args)
|
||||
cp.stdout.pipe(process.stdout)
|
||||
cp.stderr.pipe(process.stderr)
|
||||
process.stdin.pipe(cp.stdin)
|
||||
|
||||
cp.on('error', function (err) {
|
||||
console.error('Error executing phantom at', binPath)
|
||||
console.error(err.stack)
|
||||
})
|
||||
cp.on('exit', process.exit)
|
||||
|
||||
process.on('SIGTERM', function() {
|
||||
cp.kill('SIGTERM')
|
||||
process.exit(1)
|
||||
})
|
298
node_modules/karma-phantomjs-launcher/node_modules/phantomjs/install.js
generated
vendored
298
node_modules/karma-phantomjs-launcher/node_modules/phantomjs/install.js
generated
vendored
@ -1,298 +0,0 @@
|
||||
// Copyright 2012 The Obvious Corporation.
|
||||
|
||||
/*
|
||||
* This simply fetches the right version of phantom for the current platform.
|
||||
*/
|
||||
|
||||
'use strict'
|
||||
|
||||
var AdmZip = require('adm-zip')
|
||||
var cp = require('child_process')
|
||||
var fs = require('fs')
|
||||
var helper = require('./lib/phantomjs')
|
||||
var http = require('http')
|
||||
var kew = require('kew')
|
||||
var ncp = require('ncp')
|
||||
var npmconf = require('npmconf')
|
||||
var mkdirp = require('mkdirp')
|
||||
var path = require('path')
|
||||
var rimraf = require('rimraf').sync
|
||||
var url = require('url')
|
||||
var util = require('util')
|
||||
var which = require('which')
|
||||
|
||||
var downloadUrl = 'http://phantomjs.googlecode.com/files/phantomjs-' + helper.version + '-'
|
||||
|
||||
var originalPath = process.env.PATH
|
||||
|
||||
// NPM adds bin directories to the path, which will cause `which` to find the
|
||||
// bin for this package not the actual phantomjs bin. Also help out people who
|
||||
// put ./bin on their path
|
||||
process.env.PATH = helper.cleanPath(originalPath)
|
||||
|
||||
var libPath = path.join(__dirname, 'lib')
|
||||
var pkgPath = path.join(libPath, 'phantom')
|
||||
var phantomPath = null
|
||||
var tmpPath = null
|
||||
|
||||
var whichDeferred = kew.defer()
|
||||
which('phantomjs', whichDeferred.makeNodeResolver())
|
||||
whichDeferred.promise
|
||||
.then(function (path) {
|
||||
phantomPath = path
|
||||
|
||||
// Horrible hack to avoid problems during global install. We check to see if
|
||||
// the file `which` found is our own bin script.
|
||||
// See: https://github.com/Obvious/phantomjs/issues/85
|
||||
if (/NPM_INSTALL_MARKER/.test(fs.readFileSync(phantomPath, 'utf8'))) {
|
||||
console.log('Looks like an `npm install -g`; unable to check for already installed version.')
|
||||
throw new Error('Global install')
|
||||
|
||||
} else {
|
||||
var checkVersionDeferred = kew.defer()
|
||||
cp.execFile(phantomPath, ['--version'], checkVersionDeferred.makeNodeResolver())
|
||||
return checkVersionDeferred.promise
|
||||
}
|
||||
})
|
||||
.then(function (stdout) {
|
||||
var version = stdout.trim()
|
||||
if (helper.version == version) {
|
||||
writeLocationFile(phantomPath)
|
||||
console.log('PhantomJS is already installed at', phantomPath + '.')
|
||||
exit(0)
|
||||
|
||||
} else {
|
||||
console.log('PhantomJS detected, but wrong version', stdout.trim(), '@', phantomPath + '.')
|
||||
throw new Error('Wrong version')
|
||||
}
|
||||
})
|
||||
.fail(function (err) {
|
||||
// Trying to use a local file failed, so initiate download and install
|
||||
// steps instead.
|
||||
var npmconfDeferred = kew.defer()
|
||||
npmconf.load(npmconfDeferred.makeNodeResolver())
|
||||
return npmconfDeferred.promise
|
||||
})
|
||||
.then(function (conf) {
|
||||
tmpPath = findSuitableTempDirectory(conf)
|
||||
|
||||
// Can't use a global version so start a download.
|
||||
if (process.platform === 'linux' && process.arch === 'x64') {
|
||||
downloadUrl += 'linux-x86_64.tar.bz2'
|
||||
} else if (process.platform === 'linux') {
|
||||
downloadUrl += 'linux-i686.tar.bz2'
|
||||
} else if (process.platform === 'darwin' || process.platform === 'openbsd') {
|
||||
downloadUrl += 'macosx.zip'
|
||||
} else if (process.platform === 'win32') {
|
||||
downloadUrl += 'windows.zip'
|
||||
} else {
|
||||
console.log('Unexpected platform or architecture:', process.platform, process.arch)
|
||||
exit(1)
|
||||
}
|
||||
|
||||
var fileName = downloadUrl.split('/').pop()
|
||||
var downloadedFile = path.join(tmpPath, fileName)
|
||||
|
||||
// Start the install.
|
||||
if (!fs.existsSync(downloadedFile)) {
|
||||
console.log('Downloading', downloadUrl)
|
||||
console.log('Saving to', downloadedFile)
|
||||
return requestBinary(getRequestOptions(conf.get('proxy')), downloadedFile)
|
||||
} else {
|
||||
console.log('Download already available at', downloadedFile)
|
||||
return downloadedFile
|
||||
}
|
||||
})
|
||||
.then(function (downloadedFile) {
|
||||
return extractDownload(downloadedFile)
|
||||
})
|
||||
.then(function (extractedPath) {
|
||||
return copyIntoPlace(extractedPath, pkgPath)
|
||||
})
|
||||
.then(function () {
|
||||
var location = process.platform === 'win32' ?
|
||||
path.join(pkgPath, 'phantomjs.exe') :
|
||||
path.join(pkgPath, 'bin' ,'phantomjs')
|
||||
var relativeLocation = path.relative(libPath, location)
|
||||
writeLocationFile(relativeLocation)
|
||||
console.log('Done. Phantomjs binary available at', location)
|
||||
exit(0)
|
||||
})
|
||||
.fail(function (err) {
|
||||
console.error('Phantom installation failed', err, err.stack)
|
||||
exit(1)
|
||||
})
|
||||
|
||||
|
||||
function writeLocationFile(location) {
|
||||
console.log('Writing location.js file')
|
||||
if (process.platform === 'win32') {
|
||||
location = location.replace(/\\/g, '\\\\')
|
||||
}
|
||||
fs.writeFileSync(path.join(libPath, 'location.js'),
|
||||
'module.exports.location = "' + location + '"')
|
||||
}
|
||||
|
||||
|
||||
function exit(code) {
|
||||
process.env.PATH = originalPath
|
||||
process.exit(code || 0)
|
||||
}
|
||||
|
||||
|
||||
function findSuitableTempDirectory(npmConf) {
|
||||
var now = Date.now()
|
||||
var candidateTmpDirs = [
|
||||
process.env.TMPDIR || process.env.TEMP || '/tmp',
|
||||
npmConf.get('tmp'),
|
||||
path.join(process.cwd(), 'tmp')
|
||||
]
|
||||
|
||||
for (var i = 0; i < candidateTmpDirs.length; i++) {
|
||||
var candidatePath = path.join(candidateTmpDirs[i], 'phantomjs')
|
||||
|
||||
try {
|
||||
mkdirp.sync(candidatePath, '0777')
|
||||
// Make double sure we have 0777 permissions; some operating systems
|
||||
// default umask does not allow write by default.
|
||||
fs.chmodSync(candidatePath, '0777')
|
||||
var testFile = path.join(candidatePath, now + '.tmp')
|
||||
fs.writeFileSync(testFile, 'test')
|
||||
fs.unlinkSync(testFile)
|
||||
return candidatePath
|
||||
} catch (e) {
|
||||
console.log(candidatePath, 'is not writable:', e.message)
|
||||
}
|
||||
}
|
||||
|
||||
console.error('Can not find a writable tmp directory, please report issue ' +
|
||||
'on https://github.com/Obvious/phantomjs/issues/59 with as much ' +
|
||||
'information as possible.')
|
||||
exit(1)
|
||||
}
|
||||
|
||||
|
||||
function getRequestOptions(proxyUrl) {
|
||||
if (proxyUrl) {
|
||||
var options = url.parse(proxyUrl)
|
||||
options.path = downloadUrl
|
||||
options.headers = { Host: url.parse(downloadUrl).host }
|
||||
// If going through proxy, spoof the User-Agent, since may commerical proxies block blank or unknown agents in headers
|
||||
options.headers['User-Agent'] = 'curl/7.21.4 (universal-apple-darwin11.0) libcurl/7.21.4 OpenSSL/0.9.8r zlib/1.2.5'
|
||||
// Turn basic authorization into proxy-authorization.
|
||||
if (options.auth) {
|
||||
options.headers['Proxy-Authorization'] = 'Basic ' + new Buffer(options.auth).toString('base64')
|
||||
delete options.auth
|
||||
}
|
||||
|
||||
return options
|
||||
} else {
|
||||
return url.parse(downloadUrl)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function requestBinary(requestOptions, filePath) {
|
||||
var deferred = kew.defer()
|
||||
|
||||
var count = 0
|
||||
var notifiedCount = 0
|
||||
var writePath = filePath + '-download-' + Date.now()
|
||||
var outFile = fs.openSync(writePath, 'w')
|
||||
|
||||
var client = http.get(requestOptions, function (response) {
|
||||
var status = response.statusCode
|
||||
console.log('Receiving...')
|
||||
|
||||
if (status === 200) {
|
||||
response.addListener('data', function (data) {
|
||||
fs.writeSync(outFile, data, 0, data.length, null)
|
||||
count += data.length
|
||||
if ((count - notifiedCount) > 800000) {
|
||||
console.log('Received ' + Math.floor(count / 1024) + 'K...')
|
||||
notifiedCount = count
|
||||
}
|
||||
})
|
||||
|
||||
response.addListener('end', function () {
|
||||
console.log('Received ' + Math.floor(count / 1024) + 'K total.')
|
||||
fs.closeSync(outFile)
|
||||
fs.renameSync(writePath, filePath)
|
||||
deferred.resolve(filePath)
|
||||
})
|
||||
|
||||
} else {
|
||||
client.abort()
|
||||
console.error('Error requesting archive')
|
||||
deferred.reject(new Error('Error with http request: ' + util.inspect(response.headers)))
|
||||
}
|
||||
})
|
||||
|
||||
return deferred.promise
|
||||
}
|
||||
|
||||
|
||||
function extractDownload(filePath) {
|
||||
var deferred = kew.defer()
|
||||
// extract to a unique directory in case multiple processes are
|
||||
// installing and extracting at once
|
||||
var extractedPath = filePath + '-extract-' + Date.now()
|
||||
var options = {cwd: extractedPath}
|
||||
|
||||
mkdirp.sync(extractedPath, '0777')
|
||||
// Make double sure we have 0777 permissions; some operating systems
|
||||
// default umask does not allow write by default.
|
||||
fs.chmodSync(extractedPath, '0777')
|
||||
|
||||
if (filePath.substr(-4) === '.zip') {
|
||||
console.log('Extracting zip contents')
|
||||
|
||||
try {
|
||||
var zip = new AdmZip(filePath)
|
||||
zip.extractAllTo(extractedPath, true)
|
||||
deferred.resolve(extractedPath)
|
||||
} catch (err) {
|
||||
console.error('Error extracting archive')
|
||||
deferred.reject(err)
|
||||
}
|
||||
|
||||
} else {
|
||||
console.log('Extracting tar contents (via spawned process)')
|
||||
cp.execFile('tar', ['jxf', filePath], options, function (err, stdout, stderr) {
|
||||
if (err) {
|
||||
console.error('Error extracting archive')
|
||||
deferred.reject(err)
|
||||
} else {
|
||||
deferred.resolve(extractedPath)
|
||||
}
|
||||
})
|
||||
}
|
||||
return deferred.promise
|
||||
}
|
||||
|
||||
|
||||
function copyIntoPlace(extractedPath, targetPath) {
|
||||
rimraf(targetPath)
|
||||
|
||||
var deferred = kew.defer()
|
||||
// Look for the extracted directory, so we can rename it.
|
||||
var files = fs.readdirSync(extractedPath)
|
||||
for (var i = 0; i < files.length; i++) {
|
||||
var file = path.join(extractedPath, files[i])
|
||||
if (fs.statSync(file).isDirectory() && file.indexOf(helper.version) != -1) {
|
||||
console.log('Copying extracted folder', file, '->', targetPath)
|
||||
ncp(file, targetPath, deferred.makeNodeResolver())
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
// Cleanup extracted directory after it's been copied
|
||||
return deferred.promise.then(function() {
|
||||
try {
|
||||
return rimraf(extractedPath)
|
||||
} catch (e) {
|
||||
console.warn('Unable to remove temporary files at "' + extractedPath +
|
||||
'", see https://github.com/Obvious/phantomjs/issues/108 for details.')
|
||||
}
|
||||
});
|
||||
}
|
1
node_modules/karma-phantomjs-launcher/node_modules/phantomjs/lib/location.js
generated
vendored
1
node_modules/karma-phantomjs-launcher/node_modules/phantomjs/lib/location.js
generated
vendored
@ -1 +0,0 @@
|
||||
module.exports.location = "phantom/bin/phantomjs"
|
346
node_modules/karma-phantomjs-launcher/node_modules/phantomjs/lib/phantom/ChangeLog
generated
vendored
346
node_modules/karma-phantomjs-launcher/node_modules/phantomjs/lib/phantom/ChangeLog
generated
vendored
@ -1,346 +0,0 @@
|
||||
Please see also http://phantomjs.org/releases.html.
|
||||
|
||||
2013-09-06: Version 1.9.2
|
||||
|
||||
* Fixed graphical artifacts with transparent background on Windows (issue 11276, 11007, 11366)
|
||||
* Updated GhostDriver to version 1.0.4 (issue 11452)
|
||||
|
||||
2013-06-04: Version 1.9.1
|
||||
|
||||
Critical bug fixes:
|
||||
|
||||
* Fixed problems with specifying proxy server (issue 10811, 11117)
|
||||
* Fixed UTF-8 encoding with system.stdout and system.stderr (issue 11162)
|
||||
* Ensured that onResourceReceived will be always invoked (issue 11163)
|
||||
* Fixed module loading from an absolute path on Windows (issue 11165)
|
||||
* Fixed typo in the command-line option for setting the cache size (11219)
|
||||
* Fixed possible crash when handling network requests (issue 11252, 11388)
|
||||
|
||||
2013-03-20: Version 1.9.0 "Sakura"
|
||||
|
||||
New features
|
||||
|
||||
* Added spawn and execFile to execute external programs (issue 10219)
|
||||
* Added the ability to abort network requests (issue 10230)
|
||||
* Added system access to stdin, stdout, and stderr (issue 10333)
|
||||
* Added support for custom CA certificates location (issue 10916)
|
||||
* Added seek function to the File stream (issue 10937)
|
||||
* Implemented file read for a specified number of bytes (issue 10938)
|
||||
* Added a callback to handle network error (issue 10954, 10997)
|
||||
* Added custom encoding support when opening a page (issue 11043)
|
||||
* Implemented require.stub() support for a factory function (issue 11044)
|
||||
* Added page loading indicator and progress (issue 11091)
|
||||
* Added a timeout option for network requests (issue 11129)
|
||||
|
||||
Improvements
|
||||
|
||||
* Fixed the build on FreeBSD (issue 10597)
|
||||
* Ensured a consistent 72 dpi for Linux headless rendering (issue 10659)
|
||||
* Fixed possible PDF error due to invalid CreationDate field (issue 10663)
|
||||
* Fixed crash when uploading non existing files (issue 10941)
|
||||
* Improved the autocomplete internal of the interactive/REPL mode (issue 10943)
|
||||
* Fixed possible crash when accessing inline frames (issue 10947)
|
||||
* Changed Linux binary package setup to be built on CentOS 5 (issue 10963)
|
||||
* Extended SSL ignore setting to synchronous XHR (issue 10985)
|
||||
* Added convenient constants for modifier keys (issue 11056)
|
||||
* Fixed incorrect date handling in the cookies (issue 11068)
|
||||
* Updated GhostDriver to version 1.0.3 (issue 11146)
|
||||
|
||||
Examples
|
||||
|
||||
* Fixed invalid data URI in the netsniff example (issue 10740)
|
||||
* Implemented a new weather example (issue 10794)
|
||||
* Fixed rendering issues in render_multi_url (issue 11021)
|
||||
* Fixed proper event sequence in page_events example (issue 11028)
|
||||
* Miscellanous tweaks (issue 11082)
|
||||
|
||||
2013-03-02: Version 1.8.2
|
||||
|
||||
Critical bug fixes:
|
||||
|
||||
* Fixed possible PDF error due to invalid CreationDate field (issue 663)
|
||||
* Fixed crash when uploading non existing files (issue 941)
|
||||
* Fixed possible crash when accessing inline frames (issue 947)
|
||||
* Extended SSL ignore setting to synchronous XHR (issue 985)
|
||||
* Fixed incorrect date handling in the cookies (issue 1068)
|
||||
|
||||
2013-01-06: Version 1.8.1
|
||||
|
||||
Critical bug fix:
|
||||
|
||||
* Mac OS X: Fix possible crash when using some TrueType fonts (issue 690)
|
||||
|
||||
2012-12-21: Version 1.8.0 "Blue Winter Rose"
|
||||
|
||||
New features
|
||||
|
||||
* Integrated GhostDriver as the WebDriver implementation (issue 49)
|
||||
* Added an option to specify the SSL protocol (issue 174)
|
||||
* Added encoding support for WebServer's response (issue 505)
|
||||
* Added process ID (PID) to the System module (issue 769)
|
||||
* Added properties to obtain page and frame title (issue 799)
|
||||
* Added page navigation methods (issue 808)
|
||||
* Added support for modifier keys in keyboard events (issue 835)
|
||||
* Added onFilePicker callback for more generic file upload API (issue 843)
|
||||
* Added the ability to set the page content and location (issue 909)
|
||||
|
||||
Improvements
|
||||
|
||||
* Fixed date parsing in ISO8601 format (issue 187, 267)
|
||||
* Fixed window.location (issue 530, 632)
|
||||
* Deregistered multiple callback handler (issue 807)
|
||||
* Fixed sending of double-click events (issue 848)
|
||||
* Increases maximum number of redirects (issue 849)
|
||||
* Fixed keycodes sent for lowercase characters (issue 852)
|
||||
* Fixed a regression in table row page break (issue 880)
|
||||
* Completed the CoffeeScript version of the examples (issue 907)
|
||||
* Updated Qt to version 4.8.4 (issue 918)
|
||||
* Fixed potential hang in some example scripts (issue 922)
|
||||
|
||||
2012-09-22: Version 1.7.0 "Blazing Star"
|
||||
|
||||
New features
|
||||
|
||||
* Added a module system modelled after CommonJS/Node.js (issue 47)
|
||||
* Added support for window pop-up (issue 151)
|
||||
* Static build on Linux (issue 413)
|
||||
* Added run-time detection of SSL support (issue 484)
|
||||
* Added more events support (issue 492, 712)
|
||||
* Added support for disabling automatic proxy detection (issue 580)
|
||||
* Provided page closing callback (issue 678)
|
||||
* Added methods to access URL, frames URL, frame Content (issue 758)
|
||||
* Added more cookies-related API (issue 761)
|
||||
|
||||
Improvements
|
||||
|
||||
* Refactored command-line options handling (issue 55)
|
||||
* Improved the workflow for producing release builds (issue 599)
|
||||
* Improved cookies API and implementation (issue 603, 761)
|
||||
* Improved frame switching API (issue 654)
|
||||
* Fixed iframe handling regression (issue 683)
|
||||
* Fixed OS version number with Windows 8 and Mountain Lion (issue 684, 688)
|
||||
* Fixed HAR navigation info in the netsniff example (issue 733)
|
||||
* Fixed compile warnings with Visual Studio (issue 744)
|
||||
* Removed hacks for static linking on Windows (issue 753)
|
||||
* Added ICO image handling on Windows (issue 779)
|
||||
* Fixed font antialiasing on Windows (issue 785)
|
||||
* Improved Jasmine test runner for Jasmine 1.2 (issue 792)
|
||||
|
||||
2012-07-22: Version 1.6.1
|
||||
|
||||
Bug fixes
|
||||
|
||||
* Don't build the deploy in debug mode (issue 599)
|
||||
* Fixed building on Windows (issue 424)
|
||||
* Fixed remote inspector when building statically (issue 430)
|
||||
|
||||
2012-06-20: Version 1.6.0 "Lavender"
|
||||
|
||||
New features
|
||||
|
||||
* Added support for passing arguments to WebPage's evaluate (issue 132)
|
||||
* Added callbacks for JavaScript onConfirm and onPrompt (issue 133)
|
||||
* Added stack trace when error occurs (issue 166)
|
||||
* Added support for local storage path and quota (issue 300)
|
||||
* Added initial support for cookies handling (issue 354)
|
||||
* Added support for header footer when printing the page (issue 410, 512)
|
||||
* Added headers support in the loading request (issue 452)
|
||||
* Added support to render the web page as base64-encoded string (issue 547)
|
||||
* Added hooks for navigation event (issue 562)
|
||||
* Added command-line option to show debug messages (issue 575)
|
||||
* Added support for the zoom factor for web page rendering (issue 579)
|
||||
* Added crash reporter for Mac OS X and Linux, based on Google Breakpad (issue 576)
|
||||
* Added 'os' object to the system module (issue 585)
|
||||
* Added support for asynchronous evaluation (issue 593)
|
||||
|
||||
Improvements
|
||||
|
||||
* Fixed remote debugging to work on Mac OS X and Windows (issue 430)
|
||||
* Fixed web server getting the dropped connection for empty response (issue 451)
|
||||
* Fixed text rendered as boxes (squares) on headless Linux (issue 460)
|
||||
* Updated Qt to version 4.8.2 (issue 495)
|
||||
* Updated CoffeeScript compiler to version 1.3.3 (issue 496)
|
||||
* Fixed the build script to detect and use MAKEFLAGS (issue 503)
|
||||
* Fixed the build script to properly pass Qt config flags (issue 507)
|
||||
* Changed Info.plist to be embedded in Mac OS X executable (issue 528)
|
||||
* Fixed wrong module require in the imagebin example (issue 536)
|
||||
* Fixed example scripts to exit with the right exit code (issue 544)
|
||||
* Fixed build failure with glib 2.31.0+ (issue 559)
|
||||
* Fixed error handler failures in some cases (issue 589)
|
||||
* Fixed Twitter-related examples to work with the new site (issue 609)
|
||||
|
||||
2012-03-20: Version 1.5.0 "Ghost Flower"
|
||||
|
||||
New features
|
||||
|
||||
* Added interactive mode, also known as REPL (issue 252)
|
||||
* Added setting for web security, to allow cross domain XHR (issue 28)
|
||||
* Added error handler for WebPage object (issue 166)
|
||||
* Added support for custom HTTP header in the network request (issue 77)
|
||||
* Added support for read write encoding in the file system module (issue 367)
|
||||
* Added remote debugging support on Linux (issue 6)
|
||||
* Added support for proxy authentication (issue 105)
|
||||
* Added System module, to retrieve environment variables (issue 271) and arguments (issue 276)
|
||||
* Added fs.readLink function (issue 329)
|
||||
* Added support for reading and writing binary data (issue 400)
|
||||
* Added support to retrieve request data in the WebServer? module (issue 340)
|
||||
* Added support for individual top/bottom/left/right print margins (issue 388)
|
||||
* Added command-line option --help (issue 347)
|
||||
* Added short command-line options -v and -h (issue 408)
|
||||
* Removed support for Flash and other plugins (issue 418)
|
||||
|
||||
Bug fixes
|
||||
|
||||
* Fixed multiple console.log arguments (issue 36)
|
||||
* Fixed file upload (issue 307)
|
||||
* Fixed the web server instance to be asynchronous (issue 326) and still support Keep Alive (issue 416)
|
||||
* Workaround Qt 4.8.0 crash due to empty URL scheme (issue 365)
|
||||
* Fixed a Content-Type problem where POST does not work (issue 337)
|
||||
* Fixed reading body request in the web server even without specific Content-Type (issue 439)
|
||||
* Fixed Jasmine test runner with Jasmine 1.1 (issue 402)
|
||||
* Fixed request URL formatting in the web server (issue 437)
|
||||
* Don't display debugging and warning messages (issue 323)
|
||||
|
||||
2011-12-31: Version 1.4.1
|
||||
|
||||
Bug fixes
|
||||
|
||||
* Fix setting the proxy type (issue 266)
|
||||
* Workaround for file upload regression (issue 307)
|
||||
* Fix extraneous messsages in non-debug mode (issue 323)
|
||||
|
||||
2011-12-22: Version 1.4.0 "Glory of the Snow"
|
||||
|
||||
New features
|
||||
|
||||
* Added embedded HTTP server (issue 115)
|
||||
* Added convenient build script for Linux (issue 197)
|
||||
* Added support for SOCKS5 proxy (issue 266)
|
||||
* Updated CoffeeScript compiler to version 1.2 (issue 312)
|
||||
|
||||
Bug fixes
|
||||
|
||||
* Fix potential crash in QUrl with Qt 4.8 (issue 304)
|
||||
* Fix bug in CookieJar with QSettings and string (PyPhantomJS issue 10)
|
||||
* Prevent showing the icon on Mac OS X Dock (issue 281)
|
||||
|
||||
Examples
|
||||
|
||||
* Added a new example to detect browsers sniffing (issue 263)
|
||||
* Added HTTP server example (issue 115)
|
||||
|
||||
2011-09-23: Version 1.3.0 "Water Lily"
|
||||
|
||||
Bug fixes
|
||||
|
||||
* Fixed open() and POST method, without specifying the finished handler
|
||||
* Fixed script execution warning dialog (issue 165)
|
||||
* Added WebPage.release() to free the web page from memory (issue 154)
|
||||
* Added special handling of about:blank (issue 235)
|
||||
* Made a separate network access manager for each page (issue 190)
|
||||
|
||||
New features
|
||||
|
||||
* Introduced file system API based on CommonJS Filesystem proposal (issue 129)
|
||||
* Added support for persistent cookies (issue 91)
|
||||
* Added event handling, currently only for mouse events (issue 234)
|
||||
* Added page scroll position (issue 162)
|
||||
* Added HTTP authentication support (issue 45)
|
||||
* Added callback for page initialization (issue 143)
|
||||
* Added support to specify script and output encoding (issue 186)
|
||||
* Added option to allow local content to do cross-domain access (issue 28)
|
||||
* Added support to apply configurations from a JSON file (issue 180)
|
||||
* Added a convenient WebPage initialization construction (issue 206)
|
||||
* Added option to limit the size of disk cache (issue 220)
|
||||
|
||||
Examples
|
||||
|
||||
* Added a new example on using Modernizr to detect features (issue 144)
|
||||
* Fixed pizza.js example to use Mobile Yelp (issue 200)
|
||||
* Fixed netsniff.coffee example due to wrong indentation (issue 225)
|
||||
* Added an example to show live network traffic (issue 227)
|
||||
* Added an example demonstrating different output encodings (issue 186)
|
||||
|
||||
2011-06-21: Version 1.2.0 "Birds of Paradise"
|
||||
|
||||
Version 1.2.0 is a major update. It introduces a whole set of new API.
|
||||
|
||||
Bug fixes
|
||||
|
||||
* Fixed rendering a very large web page (issue 54)
|
||||
* Fixed reporting of CoffeeScript compile error (issue 125)
|
||||
|
||||
New features
|
||||
|
||||
* Added callback for console message (issue 12)
|
||||
* Improved security model via WebPage object (issue 41)
|
||||
* Added support for POST, HEAD, PUT, and DELETE (issue 88)
|
||||
* Scripts filename is now passed as phantom.scriptName
|
||||
* Added callback to capture resource requests and responses (issue 2)
|
||||
* Added the ability to load external JavaScript (issue 32)
|
||||
|
||||
Examples
|
||||
|
||||
* Ported examples to use WebPage object
|
||||
* Added a new example to upload an image to imagebin.org
|
||||
* Added a new example to show HTTP POST feature
|
||||
* Added a new example to sniff network traffic and save it in HAR format
|
||||
|
||||
|
||||
2011-04-27: Version 1.1.0 "Cherry Blossom"
|
||||
|
||||
Fixed the script loading to use UTF-8 encoding (Yasuhiro Matsumoto).
|
||||
|
||||
Added check for system proxy setting (Yasuhiro Matsumoto).
|
||||
|
||||
Fixed building with Cygwin and Qt 4.5 (John Dalton).
|
||||
|
||||
Added a new example: driver for QUnit tests (Łukasz Korecki).
|
||||
|
||||
Fixed issue #20: problem with JPG transparent color (Alessandro Portale).
|
||||
|
||||
Fixed issue #9: ignore first line starting with #! (Matthias, aka fourplusone).
|
||||
|
||||
Fixed issue #7: support for file upload for form submission (Matthias, aka fourplusone).
|
||||
|
||||
Fixed issue #35: support for disabling images loading (Ariya Hidayat).
|
||||
|
||||
Fixed issue #14: enable or disable plugins (Ariya Hidayat).
|
||||
|
||||
Added a new example: using Canvas to produce the color wheel (Ariya Hidayat).
|
||||
|
||||
Added support for rasterizing as GIF image (Ariya Hidayat).
|
||||
|
||||
Added support for CoffeeScript (Ariya Hidayat).
|
||||
|
||||
Fixed issue #19: option for setting the proxy (Clint Berry, Ariya Hidayat).
|
||||
|
||||
Python implementation using PyQt (James Roe).
|
||||
|
||||
Fixed issue #17: Specify paper size for PDF export (Alessandro Portale).
|
||||
|
||||
Fixed issue #60: Win32 and OS/2 icon files (Salvador Parra Camacho).
|
||||
|
||||
Added clipping rectangle to the render function (Wouter de Bie).
|
||||
|
||||
Added an example on sychronous waiting (Gabor Torok).
|
||||
|
||||
Added command line option to use disk cache (Jon Turner).
|
||||
|
||||
Added text extracting example (Weston Ruter).
|
||||
|
||||
Fixed issue #93: Build with Qt < 4.7 (Ariya Hidayat).
|
||||
|
||||
Ported all examples to CoffeeScript (Robert Gieseke).
|
||||
|
||||
2011-01-17: Version 1.0.0
|
||||
|
||||
Initial launch.
|
||||
|
||||
The API is centralized at the 'phantom' object (as child of
|
||||
window object) which has the properties: args, content,
|
||||
loadStatus, state, userAgent, version, viewportSize, and
|
||||
the following functions: exit, open, render, sleep.
|
||||
|
||||
Several examples are included, among others: web page rasterizer,
|
||||
weather service, headless test framework driver, and many others.
|
22
node_modules/karma-phantomjs-launcher/node_modules/phantomjs/lib/phantom/LICENSE.BSD
generated
vendored
22
node_modules/karma-phantomjs-launcher/node_modules/phantomjs/lib/phantom/LICENSE.BSD
generated
vendored
@ -1,22 +0,0 @@
|
||||
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 <organization> 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 <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.
|
45
node_modules/karma-phantomjs-launcher/node_modules/phantomjs/lib/phantom/README.md
generated
vendored
45
node_modules/karma-phantomjs-launcher/node_modules/phantomjs/lib/phantom/README.md
generated
vendored
@ -1,45 +0,0 @@
|
||||
# [PhantomJS](http://phantomjs.org) - Scriptable Headless WebKit
|
||||
|
||||
PhantomJS ([www.phantomjs.org](http://phantomjs.org)) is a headless WebKit scriptable with JavaScript or CoffeeScript. It is used by hundreds of [developers](https://github.com/ariya/phantomjs/wiki/Buzz) and dozens of [organizations](https://github.com/ariya/phantomjs/wiki/Users) for web-related development workflow.
|
||||
|
||||
The latest [stable release](http://phantomjs.org/release-1.9.html) is version 1.9 (codenamed <a href="http://phantomjs.org/release-names.html">"Sakura"</a>). Follow the official Twitter stream [@PhantomJS](http://twitter.com/PhantomJS) to get the frequent development updates.
|
||||
|
||||
**Note**: Please **do not** create a GitHub pull request **without** reading the [Contribution Guide](https://github.com/ariya/phantomjs/blob/master/CONTRIBUTING.md) first. Failure to do so may result in the rejection of the pull request.
|
||||
|
||||
## Use Cases
|
||||
|
||||
- **Headless web testing**. Lightning-fast testing without the browser is now possible! Various [test frameworks](https://github.com/ariya/phantomjs/wiki/Headless-Testing) such as Jasmine, Capybara, QUnit, Mocha, WebDriver, YUI Test, BusterJS, FuncUnit, Robot Framework, and many others are supported.
|
||||
- **Page automation**. [Access and manipulate](https://github.com/ariya/phantomjs/wiki/Page-Automation) web pages with the standard DOM API, or with usual libraries like jQuery.
|
||||
- **Screen capture**. Programmatically [capture web contents](https://github.com/ariya/phantomjs/wiki/Screen-Capture), including CSs, SVG and Canvas. Build server-side web graphics apps, from a screenshot service to a vector chart rasterizer.
|
||||
- **Network monitoring**. Automate performance analysis, track [page loading](https://github.com/ariya/phantomjs/wiki/Network-Monitoring) and export as standard HAR format.
|
||||
|
||||
## Features
|
||||
|
||||
- **Multiplatform**, available on major operating systems: Windows, Mac OS X, Linux, other Unices.
|
||||
- **Fast and native implementation** of web standards: DOM, CSS, JavaScript, Canvas, SVG. No emulation!
|
||||
- **Pure headless (no X11) on Linux**, ideal for continuous integration systems. Also runs on Amazon EC2, Heroku, Iron.io.
|
||||
- **Easy to install**: [Download](http://phantomjs.org/download.html), unpack, and start having fun in just 5 minutes.
|
||||
|
||||
## Ecosystem
|
||||
|
||||
PhantomJS needs not be used only as a stand-alone tool. Check also some excellent related projects:
|
||||
|
||||
- [CasperJS](http://casperjs.org) enables easy navigation scripting and common high-level testing.
|
||||
- [Poltergeist](https://github.com/jonleighton/poltergeist) allows running Capybara tests headlessly.
|
||||
- [Guard::Jasmine](https://github.com/netzpirat/guard-jasmine) automatically tests Jasmine specs on Rails when files are modified.
|
||||
- [GhostDriver](http://github.com/detro/ghostdriver/) complements Selenium tests with a PhantomJS WebDriver implementation.
|
||||
- [PhantomRobot](https://github.com/datakurre/phantomrobot) runs Robot Framework acceptance tests in the background via PhantomJS.
|
||||
- [Mocha-PhantomJS](https://github.com/metaskills/mocha-phantomjs) run Mocha tests using PhantomJS.
|
||||
|
||||
and many others [related projects](https://github.com/ariya/phantomjs/wiki/Related-Projects).
|
||||
|
||||
## Questions?
|
||||
|
||||
- Explore the complete [documentation](https://github.com/ariya/phantomjs/wiki)
|
||||
- Read tons of [user articles](https://github.com/ariya/phantomjs/wiki/Buzz) on using PhantomJS.
|
||||
- Join the [mailing-list](http://groups.google.com/group/phantomjs) and discuss with other PhantomJS fans.
|
||||
|
||||
PhantomJS is free software/open source, and is distributed under the [BSD license](http://opensource.org/licenses/BSD-3-Clause). It contains third-party code, see the included `third-party.txt` file for the license information on third-party code.
|
||||
|
||||
PhantomJS is created and maintained by [Ariya Hidayat](http://ariya.ofilabs.com/about) (Twitter: [@ariyahidayat](http://twitter.com/ariyahidayat)), with the help of [many contributors](https://github.com/ariya/phantomjs/contributors).
|
||||
|
BIN
node_modules/karma-phantomjs-launcher/node_modules/phantomjs/lib/phantom/bin/phantomjs
generated
vendored
BIN
node_modules/karma-phantomjs-launcher/node_modules/phantomjs/lib/phantom/bin/phantomjs
generated
vendored
Binary file not shown.
7
node_modules/karma-phantomjs-launcher/node_modules/phantomjs/lib/phantom/examples/arguments.coffee
generated
vendored
7
node_modules/karma-phantomjs-launcher/node_modules/phantomjs/lib/phantom/examples/arguments.coffee
generated
vendored
@ -1,7 +0,0 @@
|
||||
system = require 'system'
|
||||
if system.args.length is 1
|
||||
console.log 'Try to pass some args when invoking this script!'
|
||||
else
|
||||
for arg, i in system.args
|
||||
console.log i + ': ' + arg
|
||||
phantom.exit()
|
9
node_modules/karma-phantomjs-launcher/node_modules/phantomjs/lib/phantom/examples/arguments.js
generated
vendored
9
node_modules/karma-phantomjs-launcher/node_modules/phantomjs/lib/phantom/examples/arguments.js
generated
vendored
@ -1,9 +0,0 @@
|
||||
var system = require('system');
|
||||
if (system.args.length === 1) {
|
||||
console.log('Try to pass some args when invoking this script!');
|
||||
} else {
|
||||
system.args.forEach(function (arg, i) {
|
||||
console.log(i + ': ' + arg);
|
||||
});
|
||||
}
|
||||
phantom.exit();
|
20
node_modules/karma-phantomjs-launcher/node_modules/phantomjs/lib/phantom/examples/child_process-examples.coffee
generated
vendored
20
node_modules/karma-phantomjs-launcher/node_modules/phantomjs/lib/phantom/examples/child_process-examples.coffee
generated
vendored
@ -1,20 +0,0 @@
|
||||
{spawn, execFile} = require "child_process"
|
||||
|
||||
child = spawn "ls", ["-lF", "/rooot"]
|
||||
|
||||
child.stdout.on "data", (data) ->
|
||||
console.log "spawnSTDOUT:", JSON.stringify data
|
||||
|
||||
child.stderr.on "data", (data) ->
|
||||
console.log "spawnSTDERR:", JSON.stringify data
|
||||
|
||||
child.on "exit", (code) ->
|
||||
console.log "spawnEXIT:", code
|
||||
|
||||
#child.kill "SIGKILL"
|
||||
|
||||
execFile "ls", ["-lF", "/usr"], null, (err, stdout, stderr) ->
|
||||
console.log "execFileSTDOUT:", JSON.stringify stdout
|
||||
console.log "execFileSTDERR:", JSON.stringify stderr
|
||||
|
||||
setTimeout (-> phantom.exit 0), 2000
|
27
node_modules/karma-phantomjs-launcher/node_modules/phantomjs/lib/phantom/examples/child_process-examples.js
generated
vendored
27
node_modules/karma-phantomjs-launcher/node_modules/phantomjs/lib/phantom/examples/child_process-examples.js
generated
vendored
@ -1,27 +0,0 @@
|
||||
var spawn = require("child_process").spawn
|
||||
var execFile = require("child_process").execFile
|
||||
|
||||
var child = spawn("ls", ["-lF", "/rooot"])
|
||||
|
||||
child.stdout.on("data", function (data) {
|
||||
console.log("spawnSTDOUT:", JSON.stringify(data))
|
||||
})
|
||||
|
||||
child.stderr.on("data", function (data) {
|
||||
console.log("spawnSTDERR:", JSON.stringify(data))
|
||||
})
|
||||
|
||||
child.on("exit", function (code) {
|
||||
console.log("spawnEXIT:", code)
|
||||
})
|
||||
|
||||
//child.kill("SIGKILL")
|
||||
|
||||
execFile("ls", ["-lF", "/usr"], null, function (err, stdout, stderr) {
|
||||
console.log("execFileSTDOUT:", JSON.stringify(stdout))
|
||||
console.log("execFileSTDERR:", JSON.stringify(stderr))
|
||||
})
|
||||
|
||||
setTimeout(function () {
|
||||
phantom.exit(0)
|
||||
}, 2000)
|
46
node_modules/karma-phantomjs-launcher/node_modules/phantomjs/lib/phantom/examples/colorwheel.coffee
generated
vendored
46
node_modules/karma-phantomjs-launcher/node_modules/phantomjs/lib/phantom/examples/colorwheel.coffee
generated
vendored
@ -1,46 +0,0 @@
|
||||
page = require('webpage').create()
|
||||
|
||||
page.viewportSize = { width: 400, height : 400 }
|
||||
page.content = '<html><body><canvas id="surface"></canvas></body></html>'
|
||||
|
||||
page.evaluate ->
|
||||
el = document.getElementById 'surface'
|
||||
context = el.getContext '2d'
|
||||
width = window.innerWidth
|
||||
height = window.innerHeight
|
||||
cx = width / 2
|
||||
cy = height / 2
|
||||
radius = width / 2.3
|
||||
i = 0
|
||||
|
||||
el.width = width
|
||||
el.height = height
|
||||
imageData = context.createImageData(width, height)
|
||||
pixels = imageData.data
|
||||
|
||||
for y in [0...height]
|
||||
for x in [0...width]
|
||||
i = i + 4
|
||||
rx = x - cx
|
||||
ry = y - cy
|
||||
d = rx * rx + ry * ry
|
||||
if d < radius * radius
|
||||
hue = 6 * (Math.atan2(ry, rx) + Math.PI) / (2 * Math.PI)
|
||||
sat = Math.sqrt(d) / radius
|
||||
g = Math.floor(hue)
|
||||
f = hue - g
|
||||
u = 255 * (1 - sat)
|
||||
v = 255 * (1 - sat * f)
|
||||
w = 255 * (1 - sat * (1 - f))
|
||||
pixels[i] = [255, v, u, u, w, 255, 255][g]
|
||||
pixels[i + 1] = [w, 255, 255, v, u, u, w][g]
|
||||
pixels[i + 2] = [u, u, w, 255, 255, v, u][g]
|
||||
pixels[i + 3] = 255
|
||||
|
||||
context.putImageData imageData, 0, 0
|
||||
document.body.style.backgroundColor = 'white'
|
||||
document.body.style.margin = '0px'
|
||||
|
||||
page.render('colorwheel.png')
|
||||
|
||||
phantom.exit()
|
51
node_modules/karma-phantomjs-launcher/node_modules/phantomjs/lib/phantom/examples/colorwheel.js
generated
vendored
51
node_modules/karma-phantomjs-launcher/node_modules/phantomjs/lib/phantom/examples/colorwheel.js
generated
vendored
@ -1,51 +0,0 @@
|
||||
var page = require('webpage').create();
|
||||
page.viewportSize = { width: 400, height : 400 };
|
||||
page.content = '<html><body><canvas id="surface"></canvas></body></html>';
|
||||
page.evaluate(function() {
|
||||
var el = document.getElementById('surface'),
|
||||
context = el.getContext('2d'),
|
||||
width = window.innerWidth,
|
||||
height = window.innerHeight,
|
||||
cx = width / 2,
|
||||
cy = height / 2,
|
||||
radius = width / 2.3,
|
||||
imageData,
|
||||
pixels,
|
||||
hue, sat, value,
|
||||
i = 0, x, y, rx, ry, d,
|
||||
f, g, p, u, v, w, rgb;
|
||||
|
||||
el.width = width;
|
||||
el.height = height;
|
||||
imageData = context.createImageData(width, height);
|
||||
pixels = imageData.data;
|
||||
|
||||
for (y = 0; y < height; y = y + 1) {
|
||||
for (x = 0; x < width; x = x + 1, i = i + 4) {
|
||||
rx = x - cx;
|
||||
ry = y - cy;
|
||||
d = rx * rx + ry * ry;
|
||||
if (d < radius * radius) {
|
||||
hue = 6 * (Math.atan2(ry, rx) + Math.PI) / (2 * Math.PI);
|
||||
sat = Math.sqrt(d) / radius;
|
||||
g = Math.floor(hue);
|
||||
f = hue - g;
|
||||
u = 255 * (1 - sat);
|
||||
v = 255 * (1 - sat * f);
|
||||
w = 255 * (1 - sat * (1 - f));
|
||||
pixels[i] = [255, v, u, u, w, 255, 255][g];
|
||||
pixels[i + 1] = [w, 255, 255, v, u, u, w][g];
|
||||
pixels[i + 2] = [u, u, w, 255, 255, v, u][g];
|
||||
pixels[i + 3] = 255;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
context.putImageData(imageData, 0, 0);
|
||||
document.body.style.backgroundColor = 'white';
|
||||
document.body.style.margin = '0px';
|
||||
});
|
||||
|
||||
page.render('colorwheel.png');
|
||||
|
||||
phantom.exit();
|
8
node_modules/karma-phantomjs-launcher/node_modules/phantomjs/lib/phantom/examples/countdown.coffee
generated
vendored
8
node_modules/karma-phantomjs-launcher/node_modules/phantomjs/lib/phantom/examples/countdown.coffee
generated
vendored
@ -1,8 +0,0 @@
|
||||
t = 10
|
||||
interval = setInterval ->
|
||||
if t > 0
|
||||
console.log t--
|
||||
else
|
||||
console.log 'BLAST OFF!'
|
||||
phantom.exit()
|
||||
, 1000
|
9
node_modules/karma-phantomjs-launcher/node_modules/phantomjs/lib/phantom/examples/countdown.js
generated
vendored
9
node_modules/karma-phantomjs-launcher/node_modules/phantomjs/lib/phantom/examples/countdown.js
generated
vendored
@ -1,9 +0,0 @@
|
||||
var t = 10,
|
||||
interval = setInterval(function(){
|
||||
if ( t > 0 ) {
|
||||
console.log(t--);
|
||||
} else {
|
||||
console.log("BLAST OFF!");
|
||||
phantom.exit();
|
||||
}
|
||||
}, 1000);
|
42
node_modules/karma-phantomjs-launcher/node_modules/phantomjs/lib/phantom/examples/detectsniff.coffee
generated
vendored
42
node_modules/karma-phantomjs-launcher/node_modules/phantomjs/lib/phantom/examples/detectsniff.coffee
generated
vendored
@ -1,42 +0,0 @@
|
||||
page = require('webpage').create()
|
||||
system = require 'system'
|
||||
|
||||
page.onInitialized = ->
|
||||
page.evaluate ->
|
||||
userAgent = window.navigator.userAgent
|
||||
platform = window.navigator.platform
|
||||
window.navigator =
|
||||
appCodeName: 'Mozilla'
|
||||
appName: 'Netscape'
|
||||
cookieEnabled: false
|
||||
sniffed: false
|
||||
|
||||
window.navigator.__defineGetter__ 'userAgent', ->
|
||||
window.navigator.sniffed = true
|
||||
userAgent
|
||||
|
||||
window.navigator.__defineGetter__ 'platform', ->
|
||||
window.navigator.sniffed = true
|
||||
platform
|
||||
|
||||
if system.args.length is 1
|
||||
console.log 'Usage: detectsniff.coffee <some URL>'
|
||||
phantom.exit 1
|
||||
else
|
||||
address = system.args[1]
|
||||
console.log 'Checking ' + address + '...'
|
||||
page.open address, (status) ->
|
||||
if status isnt 'success'
|
||||
console.log 'FAIL to load the address'
|
||||
phantom.exit()
|
||||
else
|
||||
window.setTimeout ->
|
||||
sniffed = page.evaluate(->
|
||||
navigator.sniffed
|
||||
)
|
||||
if sniffed
|
||||
console.log 'The page tried to sniff the user agent.'
|
||||
else
|
||||
console.log 'The page did not try to sniff the user agent.'
|
||||
phantom.exit()
|
||||
, 1500
|
59
node_modules/karma-phantomjs-launcher/node_modules/phantomjs/lib/phantom/examples/detectsniff.js
generated
vendored
59
node_modules/karma-phantomjs-launcher/node_modules/phantomjs/lib/phantom/examples/detectsniff.js
generated
vendored
@ -1,59 +0,0 @@
|
||||
// Detect if a web page sniffs the user agent or not.
|
||||
|
||||
var page = require('webpage').create(),
|
||||
system = require('system'),
|
||||
sniffed,
|
||||
address;
|
||||
|
||||
page.onInitialized = function () {
|
||||
page.evaluate(function () {
|
||||
|
||||
(function () {
|
||||
var userAgent = window.navigator.userAgent,
|
||||
platform = window.navigator.platform;
|
||||
|
||||
window.navigator = {
|
||||
appCodeName: 'Mozilla',
|
||||
appName: 'Netscape',
|
||||
cookieEnabled: false,
|
||||
sniffed: false
|
||||
};
|
||||
|
||||
window.navigator.__defineGetter__('userAgent', function () {
|
||||
window.navigator.sniffed = true;
|
||||
return userAgent;
|
||||
});
|
||||
|
||||
window.navigator.__defineGetter__('platform', function () {
|
||||
window.navigator.sniffed = true;
|
||||
return platform;
|
||||
});
|
||||
})();
|
||||
});
|
||||
};
|
||||
|
||||
if (system.args.length === 1) {
|
||||
console.log('Usage: detectsniff.js <some URL>');
|
||||
phantom.exit(1);
|
||||
} else {
|
||||
address = system.args[1];
|
||||
console.log('Checking ' + address + '...');
|
||||
page.open(address, function (status) {
|
||||
if (status !== 'success') {
|
||||
console.log('FAIL to load the address');
|
||||
phantom.exit();
|
||||
} else {
|
||||
window.setTimeout(function () {
|
||||
sniffed = page.evaluate(function () {
|
||||
return navigator.sniffed;
|
||||
});
|
||||
if (sniffed) {
|
||||
console.log('The page tried to sniff the user agent.');
|
||||
} else {
|
||||
console.log('The page did not try to sniff the user agent.');
|
||||
}
|
||||
phantom.exit();
|
||||
}, 1500);
|
||||
}
|
||||
});
|
||||
}
|
30
node_modules/karma-phantomjs-launcher/node_modules/phantomjs/lib/phantom/examples/direction.coffee
generated
vendored
30
node_modules/karma-phantomjs-launcher/node_modules/phantomjs/lib/phantom/examples/direction.coffee
generated
vendored
@ -1,30 +0,0 @@
|
||||
# Get driving direction using Google Directions API.
|
||||
|
||||
page = require('webpage').create()
|
||||
system = require 'system'
|
||||
|
||||
if system.args.length < 3
|
||||
console.log 'Usage: direction.coffee origin destination'
|
||||
console.log 'Example: direction.coffee "San Diego" "Palo Alto"'
|
||||
phantom.exit 1
|
||||
else
|
||||
origin = system.args[1]
|
||||
dest = system.args[2]
|
||||
page.open encodeURI('http://maps.googleapis.com/maps/api/directions/xml?origin=' + origin +
|
||||
'&destination=' + dest + '&units=imperial&mode=driving&sensor=false'),
|
||||
(status) ->
|
||||
if status isnt 'success'
|
||||
console.log 'Unable to access network'
|
||||
else
|
||||
steps = page.content.match(/<html_instructions>(.*)<\/html_instructions>/ig)
|
||||
if not steps
|
||||
console.log 'No data available for ' + origin + ' to ' + dest
|
||||
else
|
||||
for ins in steps
|
||||
ins = ins.replace(/\</ig, '<').replace(/\>/ig, '>')
|
||||
ins = ins.replace(/\<div/ig, '\n<div')
|
||||
ins = ins.replace(/<.*?>/g, '')
|
||||
console.log(ins)
|
||||
console.log ''
|
||||
console.log page.content.match(/<copyrights>.*<\/copyrights>/ig).join('').replace(/<.*?>/g, '')
|
||||
phantom.exit()
|
35
node_modules/karma-phantomjs-launcher/node_modules/phantomjs/lib/phantom/examples/direction.js
generated
vendored
35
node_modules/karma-phantomjs-launcher/node_modules/phantomjs/lib/phantom/examples/direction.js
generated
vendored
@ -1,35 +0,0 @@
|
||||
// Get driving direction using Google Directions API.
|
||||
|
||||
var page = require('webpage').create(),
|
||||
system = require('system'),
|
||||
origin, dest, steps;
|
||||
|
||||
if (system.args.length < 3) {
|
||||
console.log('Usage: direction.js origin destination');
|
||||
console.log('Example: direction.js "San Diego" "Palo Alto"');
|
||||
phantom.exit(1);
|
||||
} else {
|
||||
origin = system.args[1];
|
||||
dest = system.args[2];
|
||||
page.open(encodeURI('http://maps.googleapis.com/maps/api/directions/xml?origin=' + origin +
|
||||
'&destination=' + dest + '&units=imperial&mode=driving&sensor=false'), function (status) {
|
||||
if (status !== 'success') {
|
||||
console.log('Unable to access network');
|
||||
} else {
|
||||
steps = page.content.match(/<html_instructions>(.*)<\/html_instructions>/ig);
|
||||
if (steps == null) {
|
||||
console.log('No data available for ' + origin + ' to ' + dest);
|
||||
} else {
|
||||
steps.forEach(function (ins) {
|
||||
ins = ins.replace(/\</ig, '<').replace(/\>/ig, '>');
|
||||
ins = ins.replace(/\<div/ig, '\n<div');
|
||||
ins = ins.replace(/<.*?>/g, '');
|
||||
console.log(ins);
|
||||
});
|
||||
console.log('');
|
||||
console.log(page.content.match(/<copyrights>.*<\/copyrights>/ig).join('').replace(/<.*?>/g, ''));
|
||||
}
|
||||
}
|
||||
phantom.exit();
|
||||
});
|
||||
}
|
19
node_modules/karma-phantomjs-launcher/node_modules/phantomjs/lib/phantom/examples/echoToFile.coffee
generated
vendored
19
node_modules/karma-phantomjs-launcher/node_modules/phantomjs/lib/phantom/examples/echoToFile.coffee
generated
vendored
@ -1,19 +0,0 @@
|
||||
# echoToFile.coffee - Write in a given file all the parameters passed on the CLI
|
||||
fs = require 'fs'
|
||||
system = require 'system'
|
||||
|
||||
if system.args.length < 3
|
||||
console.log "Usage: echoToFile.coffee DESTINATION_FILE <arguments to echo...>"
|
||||
phantom.exit 1
|
||||
else
|
||||
content = ""
|
||||
f = null
|
||||
i = 2
|
||||
while i < system.args.length
|
||||
content += system.args[i] + (if i == system.args.length - 1 then "" else " ")
|
||||
++i
|
||||
try
|
||||
fs.write system.args[1], content, "w"
|
||||
catch e
|
||||
console.log e
|
||||
phantom.exit()
|
23
node_modules/karma-phantomjs-launcher/node_modules/phantomjs/lib/phantom/examples/echoToFile.js
generated
vendored
23
node_modules/karma-phantomjs-launcher/node_modules/phantomjs/lib/phantom/examples/echoToFile.js
generated
vendored
@ -1,23 +0,0 @@
|
||||
// echoToFile.js - Write in a given file all the parameters passed on the CLI
|
||||
var fs = require('fs'),
|
||||
system = require('system');
|
||||
|
||||
if (system.args.length < 3) {
|
||||
console.log("Usage: echoToFile.js DESTINATION_FILE <arguments to echo...>");
|
||||
phantom.exit(1);
|
||||
} else {
|
||||
var content = '',
|
||||
f = null,
|
||||
i;
|
||||
for ( i= 2; i < system.args.length; ++i ) {
|
||||
content += system.args[i] + (i === system.args.length-1 ? '' : ' ');
|
||||
}
|
||||
|
||||
try {
|
||||
fs.write(system.args[1], content, 'w');
|
||||
} catch(e) {
|
||||
console.log(e);
|
||||
}
|
||||
|
||||
phantom.exit();
|
||||
}
|
23
node_modules/karma-phantomjs-launcher/node_modules/phantomjs/lib/phantom/examples/features.coffee
generated
vendored
23
node_modules/karma-phantomjs-launcher/node_modules/phantomjs/lib/phantom/examples/features.coffee
generated
vendored
@ -1,23 +0,0 @@
|
||||
feature = undefined
|
||||
supported = []
|
||||
unsupported = []
|
||||
phantom.injectJs "modernizr.js"
|
||||
console.log "Detected features (using Modernizr " + Modernizr._version + "):"
|
||||
for feature of Modernizr
|
||||
if Modernizr.hasOwnProperty(feature)
|
||||
if feature[0] isnt "_" and typeof Modernizr[feature] isnt "function" and feature isnt "input" and feature isnt "inputtypes"
|
||||
if Modernizr[feature]
|
||||
supported.push feature
|
||||
else
|
||||
unsupported.push feature
|
||||
console.log ""
|
||||
console.log "Supported:"
|
||||
supported.forEach (e) ->
|
||||
console.log " " + e
|
||||
|
||||
console.log ""
|
||||
console.log "Not supported:"
|
||||
unsupported.forEach (e) ->
|
||||
console.log " " + e
|
||||
|
||||
phantom.exit()
|
30
node_modules/karma-phantomjs-launcher/node_modules/phantomjs/lib/phantom/examples/features.js
generated
vendored
30
node_modules/karma-phantomjs-launcher/node_modules/phantomjs/lib/phantom/examples/features.js
generated
vendored
@ -1,30 +0,0 @@
|
||||
var feature, supported = [], unsupported = [];
|
||||
|
||||
phantom.injectJs('modernizr.js');
|
||||
console.log('Detected features (using Modernizr ' + Modernizr._version + '):');
|
||||
for (feature in Modernizr) {
|
||||
if (Modernizr.hasOwnProperty(feature)) {
|
||||
if (feature[0] !== '_' && typeof Modernizr[feature] !== 'function' &&
|
||||
feature !== 'input' && feature !== 'inputtypes') {
|
||||
if (Modernizr[feature]) {
|
||||
supported.push(feature);
|
||||
} else {
|
||||
unsupported.push(feature);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
console.log('');
|
||||
console.log('Supported:');
|
||||
supported.forEach(function (e) {
|
||||
console.log(' ' + e);
|
||||
});
|
||||
|
||||
console.log('');
|
||||
console.log('Not supported:');
|
||||
unsupported.forEach(function (e) {
|
||||
console.log(' ' + e);
|
||||
});
|
||||
phantom.exit();
|
||||
|
8
node_modules/karma-phantomjs-launcher/node_modules/phantomjs/lib/phantom/examples/fibo.coffee
generated
vendored
8
node_modules/karma-phantomjs-launcher/node_modules/phantomjs/lib/phantom/examples/fibo.coffee
generated
vendored
@ -1,8 +0,0 @@
|
||||
fibs = [0, 1]
|
||||
f = ->
|
||||
console.log fibs[fibs.length - 1]
|
||||
fibs.push fibs[fibs.length - 1] + fibs[fibs.length - 2]
|
||||
if fibs.length > 10
|
||||
window.clearInterval ticker
|
||||
phantom.exit()
|
||||
ticker = window.setInterval(f, 300)
|
9
node_modules/karma-phantomjs-launcher/node_modules/phantomjs/lib/phantom/examples/fibo.js
generated
vendored
9
node_modules/karma-phantomjs-launcher/node_modules/phantomjs/lib/phantom/examples/fibo.js
generated
vendored
@ -1,9 +0,0 @@
|
||||
var fibs = [0, 1];
|
||||
var ticker = window.setInterval(function () {
|
||||
console.log(fibs[fibs.length - 1]);
|
||||
fibs.push(fibs[fibs.length - 1] + fibs[fibs.length - 2]);
|
||||
if (fibs.length > 10) {
|
||||
window.clearInterval(ticker);
|
||||
phantom.exit();
|
||||
}
|
||||
}, 300);
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user