- slim/slim: ^3.1 - symfony/expression-language: ^3.4 - fxp/composer-asset-plugin: ~1.3 - bower-asset/vue: ^2.5 - bower-asset/vue-resource: ^1.5pull/586/head
parent
e181c79e95
commit
20862be7d0
@ -0,0 +1,34 @@
|
||||
{
|
||||
"name": "friendica-addons/advancedcontentfilter",
|
||||
"description": "Advanced Content Filter addon for Friendica",
|
||||
"type": "friendica-addon",
|
||||
"authors": [
|
||||
{
|
||||
"name": "Hypolite Petovan",
|
||||
"email": "mrpetovan@gmail.com",
|
||||
"homepage": "https://friendica.mrpetovan.com/profile/hypolite",
|
||||
"role": "Developer"
|
||||
}
|
||||
],
|
||||
"require": {
|
||||
"php": ">=5.5.0",
|
||||
"slim/slim": "^3.1",
|
||||
"symfony/expression-language": "^3.4",
|
||||
"fxp/composer-asset-plugin": "~1.3",
|
||||
"bower-asset/vue": "^2.5",
|
||||
"bower-asset/vue-resource": "^1.5"
|
||||
},
|
||||
"license": "3-clause BSD license",
|
||||
"minimum-stability": "stable",
|
||||
"config": {
|
||||
"optimize-autoloader": true,
|
||||
"autoloader-suffix": "AdvancedContentFilterAddon",
|
||||
"preferred-install": "dist",
|
||||
"fxp-asset": {
|
||||
"installer-paths": {
|
||||
"npm-asset-library": "vendor/asset",
|
||||
"bower-asset-library": "vendor/asset"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,745 @@
|
||||
{
|
||||
"_readme": [
|
||||
"This file locks the dependencies of your project to a known state",
|
||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "ac524148018bc5ba29d74e49492be515",
|
||||
"packages": [
|
||||
{
|
||||
"name": "bower-asset/vue",
|
||||
"version": "v2.5.16",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/vuejs/vue.git",
|
||||
"reference": "25342194016dc3bcc81cb3e8e229b0fb7ba1d1d6"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/vuejs/vue/zipball/25342194016dc3bcc81cb3e8e229b0fb7ba1d1d6",
|
||||
"reference": "25342194016dc3bcc81cb3e8e229b0fb7ba1d1d6",
|
||||
"shasum": ""
|
||||
},
|
||||
"type": "bower-asset-library"
|
||||
},
|
||||
{
|
||||
"name": "bower-asset/vue-resource",
|
||||
"version": "1.5.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/pagekit/vue-resource.git",
|
||||
"reference": "9a34f881f56f64b923572541d1753cb6cdd63d40"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/pagekit/vue-resource/zipball/9a34f881f56f64b923572541d1753cb6cdd63d40",
|
||||
"reference": "9a34f881f56f64b923572541d1753cb6cdd63d40",
|
||||
"shasum": ""
|
||||
},
|
||||
"type": "bower-asset-library",
|
||||
"extra": {
|
||||
"bower-asset-main": "dist/vue-resource.js",
|
||||
"bower-asset-ignore": [
|
||||
".*",
|
||||
"build",
|
||||
"docs",
|
||||
"package.json"
|
||||
]
|
||||
},
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"description": "The HTTP client for Vue.js",
|
||||
"keywords": [
|
||||
"ajax",
|
||||
"http",
|
||||
"vue",
|
||||
"xhr"
|
||||
],
|
||||
"time": "2018-03-03T07:42:38+00:00"
|
||||
},
|
||||
{
|
||||
"name": "container-interop/container-interop",
|
||||
"version": "1.2.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/container-interop/container-interop.git",
|
||||
"reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/container-interop/container-interop/zipball/79cbf1341c22ec75643d841642dd5d6acd83bdb8",
|
||||
"reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"psr/container": "^1.0"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Interop\\Container\\": "src/Interop/Container/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"description": "Promoting the interoperability of container objects (DIC, SL, etc.)",
|
||||
"homepage": "https://github.com/container-interop/container-interop",
|
||||
"time": "2017-02-14T19:40:03+00:00"
|
||||
},
|
||||
{
|
||||
"name": "fxp/composer-asset-plugin",
|
||||
"version": "v1.4.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/fxpio/composer-asset-plugin.git",
|
||||
"reference": "61352d99940d2b2392a5d2db83b8c0ef5faf222a"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/fxpio/composer-asset-plugin/zipball/61352d99940d2b2392a5d2db83b8c0ef5faf222a",
|
||||
"reference": "61352d99940d2b2392a5d2db83b8c0ef5faf222a",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"composer-plugin-api": "^1.0",
|
||||
"php": ">=5.3.3"
|
||||
},
|
||||
"require-dev": {
|
||||
"composer/composer": "^1.4.0"
|
||||
},
|
||||
"type": "composer-plugin",
|
||||
"extra": {
|
||||
"class": "Fxp\\Composer\\AssetPlugin\\FxpAssetPlugin",
|
||||
"branch-alias": {
|
||||
"dev-master": "1.4-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Fxp\\Composer\\AssetPlugin\\": ""
|
||||
},
|
||||
"exclude-from-classmap": [
|
||||
"/Tests/"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Franรงois Pluchino",
|
||||
"email": "francois.pluchino@gmail.com"
|
||||
}
|
||||
],
|
||||
"description": "NPM/Bower Dependency Manager for Composer",
|
||||
"homepage": "https://github.com/fxpio/composer-asset-plugin",
|
||||
"keywords": [
|
||||
"asset",
|
||||
"bower",
|
||||
"composer",
|
||||
"dependency manager",
|
||||
"nodejs",
|
||||
"npm",
|
||||
"package"
|
||||
],
|
||||
"time": "2017-10-20T06:53:56+00:00"
|
||||
},
|
||||
{
|
||||
"name": "nikic/fast-route",
|
||||
"version": "v1.3.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/nikic/FastRoute.git",
|
||||
"reference": "181d480e08d9476e61381e04a71b34dc0432e812"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/nikic/FastRoute/zipball/181d480e08d9476e61381e04a71b34dc0432e812",
|
||||
"reference": "181d480e08d9476e61381e04a71b34dc0432e812",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.4.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "^4.8.35|~5.7"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"FastRoute\\": "src/"
|
||||
},
|
||||
"files": [
|
||||
"src/functions.php"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"BSD-3-Clause"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Nikita Popov",
|
||||
"email": "nikic@php.net"
|
||||
}
|
||||
],
|
||||
"description": "Fast request router for PHP",
|
||||
"keywords": [
|
||||
"router",
|
||||
"routing"
|
||||
],
|
||||
"time": "2018-02-13T20:26:39+00:00"
|
||||
},
|
||||
{
|
||||
"name": "pimple/pimple",
|
||||
"version": "v3.2.3",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/silexphp/Pimple.git",
|
||||
"reference": "9e403941ef9d65d20cba7d54e29fe906db42cf32"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/silexphp/Pimple/zipball/9e403941ef9d65d20cba7d54e29fe906db42cf32",
|
||||
"reference": "9e403941ef9d65d20cba7d54e29fe906db42cf32",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.3.0",
|
||||
"psr/container": "^1.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"symfony/phpunit-bridge": "^3.2"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "3.2.x-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-0": {
|
||||
"Pimple": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Fabien Potencier",
|
||||
"email": "fabien@symfony.com"
|
||||
}
|
||||
],
|
||||
"description": "Pimple, a simple Dependency Injection Container",
|
||||
"homepage": "http://pimple.sensiolabs.org",
|
||||
"keywords": [
|
||||
"container",
|
||||
"dependency injection"
|
||||
],
|
||||
"time": "2018-01-21T07:42:36+00:00"
|
||||
},
|
||||
{
|
||||
"name": "psr/cache",
|
||||
"version": "1.0.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/php-fig/cache.git",
|
||||
"reference": "d11b50ad223250cf17b86e38383413f5a6764bf8"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8",
|
||||
"reference": "d11b50ad223250cf17b86e38383413f5a6764bf8",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.3.0"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "1.0.x-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Psr\\Cache\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "PHP-FIG",
|
||||
"homepage": "http://www.php-fig.org/"
|
||||
}
|
||||
],
|
||||
"description": "Common interface for caching libraries",
|
||||
"keywords": [
|
||||
"cache",
|
||||
"psr",
|
||||
"psr-6"
|
||||
],
|
||||
"time": "2016-08-06T20:24:11+00:00"
|
||||
},
|
||||
{
|
||||
"name": "psr/container",
|
||||
"version": "1.0.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/php-fig/container.git",
|
||||
"reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
|
||||
"reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.3.0"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "1.0.x-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Psr\\Container\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "PHP-FIG",
|
||||
"homepage": "http://www.php-fig.org/"
|
||||
}
|
||||
],
|
||||
"description": "Common Container Interface (PHP FIG PSR-11)",
|
||||
"homepage": "https://github.com/php-fig/container",
|
||||
"keywords": [
|
||||
"PSR-11",
|
||||
"container",
|
||||
"container-interface",
|
||||
"container-interop",
|
||||
"psr"
|
||||
],
|
||||
"time": "2017-02-14T16:28:37+00:00"
|
||||
},
|
||||
{
|
||||
"name": "psr/http-message",
|
||||
"version": "1.0.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/php-fig/http-message.git",
|
||||
"reference": "f6561bf28d520154e4b0ec72be95418abe6d9363"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363",
|
||||
"reference": "f6561bf28d520154e4b0ec72be95418abe6d9363",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.3.0"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "1.0.x-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Psr\\Http\\Message\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "PHP-FIG",
|
||||
"homepage": "http://www.php-fig.org/"
|
||||
}
|
||||
],
|
||||
"description": "Common interface for HTTP messages",
|
||||
"homepage": "https://github.com/php-fig/http-message",
|
||||
"keywords": [
|
||||
"http",
|
||||
"http-message",
|
||||
"psr",
|
||||
"psr-7",
|
||||
"request",
|
||||
"response"
|
||||
],
|
||||
"time": "2016-08-06T14:39:51+00:00"
|
||||
},
|
||||
{
|
||||
"name": "psr/log",
|
||||
"version": "1.0.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/php-fig/log.git",
|
||||
"reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d",
|
||||
"reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.3.0"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "1.0.x-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Psr\\Log\\": "Psr/Log/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "PHP-FIG",
|
||||
"homepage": "http://www.php-fig.org/"
|
||||
}
|
||||
],
|
||||
"description": "Common interface for logging libraries",
|
||||
"homepage": "https://github.com/php-fig/log",
|
||||
"keywords": [
|
||||
"log",
|
||||
"psr",
|
||||
"psr-3"
|
||||
],
|
||||
"time": "2016-10-10T12:19:37+00:00"
|
||||
},
|
||||
{
|
||||
"name": "psr/simple-cache",
|
||||
"version": "1.0.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/php-fig/simple-cache.git",
|
||||
"reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b",
|
||||
"reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.3.0"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "1.0.x-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Psr\\SimpleCache\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "PHP-FIG",
|
||||
"homepage": "http://www.php-fig.org/"
|
||||
}
|
||||
],
|
||||
"description": "Common interfaces for simple caching",
|
||||
"keywords": [
|
||||
"cache",
|
||||
"caching",
|
||||
"psr",
|
||||
"psr-16",
|
||||
"simple-cache"
|
||||
],
|
||||
"time": "2017-10-23T01:57:42+00:00"
|
||||
},
|
||||
{
|
||||
"name": "slim/slim",
|
||||
"version": "3.9.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/slimphp/Slim.git",
|
||||
"reference": "4086d0106cf5a7135c69fce4161fe355a8feb118"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/slimphp/Slim/zipball/4086d0106cf5a7135c69fce4161fe355a8feb118",
|
||||
"reference": "4086d0106cf5a7135c69fce4161fe355a8feb118",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"container-interop/container-interop": "^1.2",
|
||||
"nikic/fast-route": "^1.0",
|
||||
"php": ">=5.5.0",
|
||||
"pimple/pimple": "^3.0",
|
||||
"psr/container": "^1.0",
|
||||
"psr/http-message": "^1.0"
|
||||
},
|
||||
"provide": {
|
||||
"psr/http-message-implementation": "1.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "^4.0",
|
||||
"squizlabs/php_codesniffer": "^2.5"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Slim\\": "Slim"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Rob Allen",
|
||||
"email": "rob@akrabat.com",
|
||||
"homepage": "http://akrabat.com"
|
||||
},
|
||||
{
|
||||
"name": "Josh Lockhart",
|
||||
"email": "hello@joshlockhart.com",
|
||||
"homepage": "https://joshlockhart.com"
|
||||
},
|
||||
{
|
||||
"name": "Gabriel Manricks",
|
||||
"email": "gmanricks@me.com",
|
||||
"homepage": "http://gabrielmanricks.com"
|
||||
},
|
||||
{
|
||||
"name": "Andrew Smith",
|
||||
"email": "a.smith@silentworks.co.uk",
|
||||
"homepage": "http://silentworks.co.uk"
|
||||
}
|
||||
],
|
||||
"description": "Slim is a PHP micro framework that helps you quickly write simple yet powerful web applications and APIs",
|
||||
"homepage": "https://slimframework.com",
|
||||
"keywords": [
|
||||
"api",
|
||||
"framework",
|
||||
"micro",
|
||||
"router"
|
||||
],
|
||||
"time": "2017-11-26T19:13:09+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/cache",
|
||||
"version": "v3.4.8",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/cache.git",
|
||||
"reference": "13255ddd056e49f3154747943f8ee175d555d394"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/cache/zipball/13255ddd056e49f3154747943f8ee175d555d394",
|
||||
"reference": "13255ddd056e49f3154747943f8ee175d555d394",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "^5.5.9|>=7.0.8",
|
||||
"psr/cache": "~1.0",
|
||||
"psr/log": "~1.0",
|
||||
"psr/simple-cache": "^1.0",
|
||||
"symfony/polyfill-apcu": "~1.1"
|
||||
},
|
||||
"conflict": {
|
||||
"symfony/var-dumper": "<3.3"
|
||||
},
|
||||
"provide": {
|
||||
"psr/cache-implementation": "1.0",
|
||||
"psr/simple-cache-implementation": "1.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"cache/integration-tests": "dev-master",
|
||||
"doctrine/cache": "~1.6",
|
||||
"doctrine/dbal": "~2.4",
|
||||
"predis/predis": "~1.0"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "3.4-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Symfony\\Component\\Cache\\": ""
|
||||
},
|
||||
"exclude-from-classmap": [
|
||||
"/Tests/"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Nicolas Grekas",
|
||||
"email": "p@tchwork.com"
|
||||
},
|
||||
{
|
||||
"name": "Symfony Community",
|
||||
"homepage": "https://symfony.com/contributors"
|
||||
}
|
||||
],
|
||||
"description": "Symfony Cache component with PSR-6, PSR-16, and tags",
|
||||
"homepage": "https://symfony.com",
|
||||
"keywords": [
|
||||
"caching",
|
||||
"psr6"
|
||||
],
|
||||
"time": "2018-04-02T14:35:16+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/expression-language",
|
||||
"version": "v3.4.8",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/expression-language.git",
|
||||
"reference": "867e4d1f5d4e52435a8ffff6b24fd6a801582241"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/expression-language/zipball/867e4d1f5d4e52435a8ffff6b24fd6a801582241",
|
||||
"reference": "867e4d1f5d4e52435a8ffff6b24fd6a801582241",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "^5.5.9|>=7.0.8",
|
||||
"symfony/cache": "~3.1|~4.0"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "3.4-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Symfony\\Component\\ExpressionLanguage\\": ""
|
||||
},
|
||||
"exclude-from-classmap": [
|
||||
"/Tests/"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Fabien Potencier",
|
||||
"email": "fabien@symfony.com"
|
||||
},
|
||||
{
|
||||
"name": "Symfony Community",
|
||||
"homepage": "https://symfony.com/contributors"
|
||||
}
|
||||
],
|
||||
"description": "Symfony ExpressionLanguage Component",
|
||||
"homepage": "https://symfony.com",
|
||||
"time": "2018-01-03T07:37:34+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-apcu",
|
||||
"version": "v1.7.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-apcu.git",
|
||||
"reference": "e8ae2136ddb53dea314df56fcd88e318ab936c00"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-apcu/zipball/e8ae2136ddb53dea314df56fcd88e318ab936c00",
|
||||
"reference": "e8ae2136ddb53dea314df56fcd88e318ab936c00",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.3.3"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "1.7-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Symfony\\Polyfill\\Apcu\\": ""
|
||||
},
|
||||
"files": [
|
||||
"bootstrap.php"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Nicolas Grekas",
|
||||
"email": "p@tchwork.com"
|
||||
},
|
||||
{
|
||||
"name": "Symfony Community",
|
||||
"homepage": "https://symfony.com/contributors"
|
||||
}
|
||||
],
|
||||
"description": "Symfony polyfill backporting apcu_* functions to lower PHP versions",
|
||||
"homepage": "https://symfony.com",
|
||||
"keywords": [
|
||||
"apcu",
|
||||
"compatibility",
|
||||
"polyfill",
|
||||
"portable",
|
||||
"shim"
|
||||
],
|
||||
"time": "2018-01-30T19:27:44+00:00"
|
||||
}
|
||||
],
|
||||
"packages-dev": [],
|
||||
"aliases": [],
|
||||
"minimum-stability": "stable",
|
||||
"stability-flags": [],
|
||||
"prefer-stable": false,
|
||||
"prefer-lowest": false,
|
||||
"platform": {
|
||||
"php": ">=5.5.0"
|
||||
},
|
||||
"platform-dev": []
|
||||
}
|
@ -0,0 +1,21 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2015-2017 steffans
|
||||
|
||||
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.
|
@ -0,0 +1,59 @@
|
||||
# vue-resource [](https://circleci.com/gh/pagekit/vue-resource) [](https://www.npmjs.com/package/vue-resource) [](https://www.jsdelivr.com/package/npm/vue-resource) [](https://www.npmjs.com/package/vue-resource) [](https://www.npmjs.com/package/vue-resource)
|
||||
|
||||
The plugin for [Vue.js](http://vuejs.org) provides services for making web requests and handle responses using a [XMLHttpRequest](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest) or JSONP.
|
||||
|
||||
## Features
|
||||
|
||||
- Supports the [Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) API and [URI Templates](https://medialize.github.io/URI.js/uri-template.html)
|
||||
- Supports [interceptors](docs/http.md#interceptors) for request and response
|
||||
- Supports latest Firefox, Chrome, Safari, Opera and IE9+
|
||||
- Supports Vue 1.0 & Vue 2.0
|
||||
- Compact size 14KB (5.3KB gzipped)
|
||||
|
||||
## Installation
|
||||
You can install it via [yarn](https://yarnpkg.com/) or [NPM](http://npmjs.org/).
|
||||
```
|
||||
$ yarn add vue-resource
|
||||
$ npm install vue-resource
|
||||
```
|
||||
|
||||
### CDN
|
||||
Available on [jsdelivr](https://cdn.jsdelivr.net/npm/vue-resource@1.5.0), [unpkg](https://unpkg.com/vue-resource@1.5.0) or [cdnjs](https://cdnjs.com/libraries/vue-resource).
|
||||
```html
|
||||
<script src="https://cdn.jsdelivr.net/npm/vue-resource@1.5.0"></script>
|
||||
```
|
||||
|
||||
## Example
|
||||
```js
|
||||
{
|
||||
// GET /someUrl
|
||||
this.$http.get('/someUrl').then(response => {
|
||||
|
||||
// get body data
|
||||
this.someData = response.body;
|
||||
|
||||
}, response => {
|
||||
// error callback
|
||||
});
|
||||
}
|
||||
```
|
||||
|
||||
## Documentation
|
||||
|
||||
- [Configuration](docs/config.md)
|
||||
- [HTTP Requests/Response](docs/http.md)
|
||||
- [Creating Resources](docs/resource.md)
|
||||
- [Code Recipes](docs/recipes.md)
|
||||
- [API Reference](docs/api.md)
|
||||
|
||||
## Changelog
|
||||
|
||||
Details changes for each release are documented in the [release notes](https://github.com/pagekit/vue-resource/releases).
|
||||
|
||||
## Contribution
|
||||
|
||||
If you find a bug or want to contribute to the code or documentation, you can help by submitting an [issue](https://github.com/pagekit/vue-resource/issues) or a [pull request](https://github.com/pagekit/vue-resource/pulls).
|
||||
|
||||
## License
|
||||
|
||||
[MIT](http://opensource.org/licenses/MIT)
|
@ -0,0 +1,20 @@
|
||||
{
|
||||
"name": "vue-resource",
|
||||
"main": "dist/vue-resource.js",
|
||||
"version": "1.5.0",
|
||||
"description": "The HTTP client for Vue.js",
|
||||
"homepage": "https://github.com/pagekit/vue-resource",
|
||||
"license": "MIT",
|
||||
"keywords": [
|
||||
"vue",
|
||||
"xhr",
|
||||
"http",
|
||||
"ajax"
|
||||
],
|
||||
"ignore": [
|
||||
".*",
|
||||
"build",
|
||||
"docs",
|
||||
"package.json"
|
||||
]
|
||||
}
|
@ -0,0 +1,3 @@
|
||||
# NOTE!
|
||||
|
||||
The `dist` folder contains the standalone build for vue-resource, however files here are only checked-in when a release happens. If you are on the `dev` branch, files here are **NOT** up to date. Only the `master` branch contains the built files for the latest stable version.
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
@ -0,0 +1,65 @@
|
||||
/**
|
||||
* Base client.
|
||||
*/
|
||||
|
||||
import Promise from '../../promise';
|
||||
import xhrClient from './xhr';
|
||||
import nodeClient from './node';
|
||||
import {warn, when, isObject, isFunction, inBrowser} from '../../util';
|
||||
|
||||
export default function (context) {
|
||||
|
||||
const reqHandlers = [sendRequest], resHandlers = [];
|
||||
|
||||
if (!isObject(context)) {
|
||||
context = null;
|
||||
}
|
||||
|
||||
function Client(request) {
|
||||
while (reqHandlers.length) {
|
||||
|
||||
const handler = reqHandlers.pop();
|
||||
|
||||
if (isFunction(handler)) {
|
||||
|
||||
let response, next;
|
||||
|
||||
response = handler.call(context, request, val => next = val) || next;
|
||||
|
||||
if (isObject(response)) {
|
||||
return new Promise((resolve, reject) => {
|
||||
|
||||
resHandlers.forEach(handler => {
|
||||
response = when(response, response => {
|
||||
return handler.call(context, response) || response;
|
||||
}, reject);
|
||||
});
|
||||
|
||||
when(response, resolve, reject);
|
||||
|
||||
}, context);
|
||||
}
|
||||
|
||||
if (isFunction(response)) {
|
||||
resHandlers.unshift(response);
|
||||
}
|
||||
|
||||
} else {
|
||||
warn(`Invalid interceptor of type ${typeof handler}, must be a function`);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Client.use = handler => {
|
||||
reqHandlers.push(handler);
|
||||
};
|
||||
|
||||
return Client;
|
||||
}
|
||||
|
||||
function sendRequest(request) {
|
||||
|
||||
const client = request.client || (inBrowser ? xhrClient : nodeClient);
|
||||
|
||||
return client(request);
|
||||
}
|
@ -0,0 +1,53 @@
|
||||
/**
|
||||
* JSONP client (Browser).
|
||||
*/
|
||||
|
||||
import Promise from '../../promise';
|
||||
|
||||
export default function (request) {
|
||||
return new Promise(resolve => {
|
||||
|
||||
var name = request.jsonp || 'callback', callback = request.jsonpCallback || '_jsonp' + Math.random().toString(36).substr(2), body = null, handler, script;
|
||||
|
||||
handler = ({type}) => {
|
||||
|
||||
var status = 0;
|
||||
|
||||
if (type === 'load' && body !== null) {
|
||||
status = 200;
|
||||
} else if (type === 'error') {
|
||||
status = 500;
|
||||
}
|
||||
|
||||
if (status && window[callback]) {
|
||||
delete window[callback];
|
||||
document.body.removeChild(script);
|
||||
}
|
||||
|
||||
resolve(request.respondWith(body, {status}));
|
||||
};
|
||||
|
||||
window[callback] = result => {
|
||||
body = JSON.stringify(result);
|
||||
};
|
||||
|
||||
request.abort = () => {
|
||||
handler({type: 'abort'});
|
||||
};
|
||||
|
||||
request.params[name] = callback;
|
||||
|
||||
if (request.timeout) {
|
||||
setTimeout(request.abort, request.timeout);
|
||||
}
|
||||
|
||||
script = document.createElement('script');
|
||||
script.src = request.getUrl();
|
||||
script.type = 'text/javascript';
|
||||
script.async = true;
|
||||
script.onload = handler;
|
||||
script.onerror = handler;
|
||||
|
||||
document.body.appendChild(script);
|
||||
});
|
||||
}
|
@ -0,0 +1,38 @@
|
||||
/**
|
||||
* Http client (Node).
|
||||
*/
|
||||
|
||||
import Promise from '../../promise';
|
||||
import {each, trim} from '../../util';
|
||||
|
||||
export default function (request) {
|
||||
|
||||
const client = require('got');
|
||||
|
||||
return new Promise(resolve => {
|
||||
|
||||
var url = request.getUrl();
|
||||
var body = request.getBody();
|
||||
var method = request.method;
|
||||
var headers = {}, handler;
|
||||
|
||||
request.headers.forEach((value, name) => {
|
||||
headers[name] = value;
|
||||
});
|
||||
|
||||
client(url, {body, method, headers}).then(handler = (resp) => {
|
||||
|
||||
var response = request.respondWith(resp.body, {
|
||||
status: resp.statusCode,
|
||||
statusText: trim(resp.statusMessage)
|
||||
});
|
||||
|
||||
each(resp.headers, (value, name) => {
|
||||
response.headers.set(name, value);
|
||||
});
|
||||
|
||||
resolve(response);
|
||||
|
||||
}, error => handler(error.response));
|
||||
});
|
||||
}
|
@ -0,0 +1,38 @@
|
||||
/**
|
||||
* XDomain client (Internet Explorer).
|
||||
*/
|
||||
|
||||
import Promise from '../../promise';
|
||||
|
||||
export default function (request) {
|
||||
return new Promise(resolve => {
|
||||
|
||||
var xdr = new XDomainRequest(), handler = ({type}) => {
|
||||
|
||||
var status = 0;
|
||||
|
||||
if (type === 'load') {
|
||||
status = 200;
|
||||
} else if (type === 'error') {
|
||||
status = 500;
|
||||
}
|
||||
|
||||
resolve(request.respondWith(xdr.responseText, {status}));
|
||||
};
|
||||
|
||||
request.abort = () => xdr.abort();
|
||||
|
||||
xdr.open(request.method, request.getUrl());
|
||||
|
||||
if (request.timeout) {
|
||||
xdr.timeout = request.timeout;
|
||||
}
|
||||
|
||||
xdr.onload = handler;
|
||||
xdr.onabort = handler;
|
||||
xdr.onerror = handler;
|
||||
xdr.ontimeout = handler;
|
||||
xdr.onprogress = () => {};
|
||||
xdr.send(request.getBody());
|
||||
});
|
||||
}
|
@ -0,0 +1,74 @@
|
||||
/**
|
||||
* XMLHttp client (Browser).
|
||||
*/
|
||||
|
||||
import Promise from '../../promise';
|
||||
import {each, trim, isFunction} from '../../util';
|
||||
|
||||
export default function (request) {
|
||||
return new Promise(resolve => {
|
||||
|
||||
var xhr = new XMLHttpRequest(), handler = (event) => {
|
||||
|
||||
var response = request.respondWith(
|
||||
'response' in xhr ? xhr.response : xhr.responseText, {
|
||||
status: xhr.status === 1223 ? 204 : xhr.status, // IE9 status bug
|
||||
statusText: xhr.status === 1223 ? 'No Content' : trim(xhr.statusText)
|
||||
});
|
||||
|
||||
each(trim(xhr.getAllResponseHeaders()).split('\n'), row => {
|
||||
response.headers.append(row.slice(0, row.indexOf(':')), row.slice(row.indexOf(':') + 1));
|
||||
});
|
||||
|
||||
resolve(response);
|
||||
};
|
||||
|
||||
request.abort = () => xhr.abort();
|
||||
|
||||
xhr.open(request.method, request.getUrl(), true);
|
||||
|
||||
if (request.timeout) {
|
||||
xhr.timeout = request.timeout;
|
||||
}
|
||||
|
||||
if (request.responseType && 'responseType' in xhr) {
|
||||
xhr.responseType = request.responseType;
|
||||
}
|
||||
|
||||
if (request.withCredentials || request.credentials) {
|
||||
xhr.withCredentials = true;
|
||||
}
|
||||
|
||||
if (!request.crossOrigin) {
|
||||
request.headers.set('X-Requested-With', 'XMLHttpRequest');
|
||||
}
|
||||
|
||||
// deprecated use downloadProgress
|
||||
if (isFunction(request.progress) && request.method === 'GET') {
|
||||
xhr.addEventListener('progress', request.progress);
|
||||
}
|
||||
|
||||
if (isFunction(request.downloadProgress)) {
|
||||
xhr.addEventListener('progress', request.downloadProgress);
|
||||
}
|
||||
|
||||
// deprecated use uploadProgress
|
||||
if (isFunction(request.progress) && /^(POST|PUT)$/i.test(request.method)) {
|
||||
xhr.upload.addEventListener('progress', request.progress);
|
||||
}
|
||||
|
||||
if (isFunction(request.uploadProgress) && xhr.upload) {
|
||||
xhr.upload.addEventListener('progress', request.uploadProgress);
|
||||
}
|
||||
|
||||
request.headers.forEach((value, name) => {
|
||||
xhr.setRequestHeader(name, value);
|
||||
});
|
||||
|
||||
xhr.onload = handler;
|
||||
xhr.onabort = handler;
|
||||
xhr.onerror = handler;
|
||||
xhr.ontimeout = handler;
|
||||
xhr.send(request.getBody());
|
||||
});
|
||||
}
|
@ -0,0 +1,75 @@
|
||||
/**
|
||||
* HTTP Headers.
|
||||
*/
|
||||
|
||||
import {each, trim, toLower} from '../util';
|
||||
|
||||
export default class Headers {
|
||||
|
||||
constructor(headers) {
|
||||
|
||||
this.map = {};
|
||||
|
||||
each(headers, (value, name) => this.append(name, value));
|
||||
}
|
||||
|
||||
has(name) {
|
||||
return getName(this.map, name) !== null;
|
||||
}
|
||||
|
||||
get(name) {
|
||||
|
||||
var list = this.map[getName(this.map, name)];
|
||||
|
||||
return list ? list.join() : null;
|
||||
}
|
||||
|
||||
getAll(name) {
|
||||
return this.map[getName(this.map, name)] || [];
|
||||
}
|
||||
|
||||
set(name, value) {
|
||||
this.map[normalizeName(getName(this.map, name) || name)] = [trim(value)];
|
||||
}
|
||||
|
||||
append(name, value) {
|
||||
|
||||
var list = this.map[getName(this.map, name)];
|
||||
|
||||
if (list) {
|
||||
list.push(trim(value));
|
||||
} else {
|
||||
this.set(name, value);
|
||||
}
|
||||
}
|
||||
|
||||
delete(name) {
|
||||
delete this.map[getName(this.map, name)];
|
||||
}
|
||||
|
||||
deleteAll() {
|
||||
this.map = {};
|
||||
}
|
||||
|
||||
forEach(callback, thisArg) {
|
||||
each(this.map, (list, name) => {
|
||||
each(list, value => callback.call(thisArg, value, name, this));
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function getName(map, name) {
|
||||
return Object.keys(map).reduce((prev, curr) => {
|
||||
return toLower(name) === toLower(curr) ? curr : prev;
|
||||
}, null);
|
||||
}
|
||||
|
||||
function normalizeName(name) {
|
||||
|
||||
if (/[^a-z0-9\-#$%&'*+.^_`|~]/i.test(name)) {
|
||||
throw new TypeError('Invalid character in header field name');
|
||||
}
|
||||
|
||||
return trim(name);
|
||||
}
|
@ -0,0 +1,80 @@
|
||||
/**
|
||||
* Service for sending network requests.
|
||||
*/
|
||||
|
||||
const COMMON_HEADERS = {'Accept': 'application/json, text/plain, */*'};
|
||||
const JSON_CONTENT_TYPE = {'Content-Type': 'application/json;charset=utf-8'};
|
||||
|
||||
import cors from './interceptor/cors';
|
||||
import form from './interceptor/form';
|
||||
import json from './interceptor/json';
|
||||
import jsonp from './interceptor/jsonp';
|
||||
import before from './interceptor/before';
|
||||
import method from './interceptor/method';
|
||||
import header from './interceptor/header';
|
||||
import Client from './client/index';
|
||||
import Request from './request';
|
||||
import Promise from '../promise';
|
||||
import {assign, defaults, error, isString, isFunction} from '../util';
|
||||
|
||||
export default function Http(options) {
|
||||
|
||||
var self = this || {}, client = Client(self.$vm);
|
||||
|
||||
defaults(options || {}, self.$options, Http.options);
|
||||
|
||||
Http.interceptors.forEach(handler => {
|
||||
|
||||
if (isString(handler)) {
|
||||
handler = Http.interceptor[handler];
|
||||
}
|
||||
|
||||
if (isFunction(handler)) {
|
||||
client.use(handler);
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
return client(new Request(options)).then(response => {
|
||||
|
||||
return response.ok ? response : Promise.reject(response);
|
||||
|
||||
}, response => {
|
||||
|
||||
if (response instanceof Error) {
|
||||
error(response);
|
||||
}
|
||||
|
||||
return Promise.reject(response);
|
||||
});
|
||||
}
|
||||
|
||||
Http.options = {};
|
||||
|
||||
Http.headers = {
|
||||
put: JSON_CONTENT_TYPE,
|
||||
post: JSON_CONTENT_TYPE,
|
||||
patch: JSON_CONTENT_TYPE,
|
||||
delete: JSON_CONTENT_TYPE,
|
||||
common: COMMON_HEADERS,
|
||||
custom: {}
|
||||
};
|
||||
|
||||
Http.interceptor = {before, method, jsonp, json, form, header, cors};
|
||||
Http.interceptors = ['before', 'method', 'jsonp', 'json', 'form', 'header', 'cors'];
|
||||
|
||||
['get', 'delete', 'head', 'jsonp'].forEach(method => {
|
||||
|
||||
Http[method] = function (url, options) {
|
||||
return this(assign(options || {}, {url, method}));
|
||||
};
|
||||
|
||||
});
|
||||
|
||||
['post', 'put', 'patch'].forEach(method => {
|
||||
|
||||
Http[method] = function (url, body, options) {
|
||||
return this(assign(options || {}, {url, method, body}));
|
||||
};
|
||||
|
||||
});
|
@ -0,0 +1,13 @@
|
||||
/**
|
||||
* Before Interceptor.
|
||||
*/
|
||||
|
||||
import {isFunction} from '../../util';
|
||||
|
||||
export default function (request) {
|
||||
|
||||
if (isFunction(request.before)) {
|
||||
request.before.call(this, request);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
/**
|
||||
* CORS Interceptor.
|
||||
*/
|
||||
|
||||
import Url from '../../url/index';
|
||||
import xdrClient from '../client/xdr';
|
||||
import {inBrowser} from '../../util';
|
||||
|
||||
const SUPPORTS_CORS = inBrowser && 'withCredentials' in new XMLHttpRequest();
|
||||
|
||||
export default function (request) {
|
||||
|
||||
if (inBrowser) {
|
||||
|
||||
const orgUrl = Url.parse(location.href);
|
||||
const reqUrl = Url.parse(request.getUrl());
|
||||
|
||||
if (reqUrl.protocol !== orgUrl.protocol || reqUrl.host !== orgUrl.host) {
|
||||
|
||||
request.crossOrigin = true;
|
||||
request.emulateHTTP = false;
|
||||
|
||||
if (!SUPPORTS_CORS) {
|
||||
request.client = xdrClient;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,17 @@
|
||||
/**
|
||||
* Form data Interceptor.
|
||||
*/
|
||||
|
||||
import Url from '../../url/index';
|
||||
import {isObject, isFormData} from '../../util';
|
||||
|
||||
export default function (request) {
|
||||
|
||||
if (isFormData(request.body)) {
|
||||
request.headers.delete('Content-Type');
|
||||
} else if (isObject(request.body) && request.emulateJSON) {
|
||||
request.body = Url.params(request.body);
|
||||
request.headers.set('Content-Type', 'application/x-www-form-urlencoded');
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,21 @@
|
||||
/**
|
||||
* Header Interceptor.
|
||||
*/
|
||||
|
||||
import Http from '../index';
|
||||
import {assign, each, toLower} from '../../util';
|
||||
|
||||
export default function (request) {
|
||||
|
||||
const headers = assign({}, Http.headers.common,
|
||||
!request.crossOrigin ? Http.headers.custom : {},
|
||||
Http.headers[toLower(request.method)]
|
||||
);
|
||||
|
||||
each(headers, (value, name) => {
|
||||
if (!request.headers.has(name)) {
|
||||
request.headers.set(name, value);
|
||||
}
|
||||
});
|
||||
|
||||
}
|
@ -0,0 +1,46 @@
|
||||
/**
|
||||
* JSON Interceptor.
|
||||
*/
|
||||
|
||||
import {when, isObject} from '../../util';
|
||||
|
||||
export default function (request) {
|
||||
|
||||
const type = request.headers.get('Content-Type') || '';
|
||||
|
||||
if (isObject(request.body) && type.indexOf('application/json') === 0) {
|
||||
request.body = JSON.stringify(request.body);
|
||||
}
|
||||
|
||||
return response => {
|
||||
|
||||
return response.bodyText ? when(response.text(), text => {
|
||||
|
||||
const type = response.headers.get('Content-Type') || '';
|
||||
|
||||
if (type.indexOf('application/json') === 0 || isJson(text)) {
|
||||
|
||||
try {
|
||||
response.body = JSON.parse(text);
|
||||
} catch (e) {
|
||||
response.body = null;
|
||||
}
|
||||
|
||||
} else {
|
||||
response.body = text;
|
||||
}
|
||||
|
||||
return response;
|
||||
|
||||
}) : response;
|
||||
|
||||
};
|
||||
}
|
||||
|
||||
function isJson(str) {
|
||||
|
||||
const start = str.match(/^\s*(\[|\{)/);
|
||||
const end = {'[': /]\s*$/, '{': /}\s*$/};
|
||||
|
||||
return start && end[start[1]].test(str);
|
||||
}
|
@ -0,0 +1,13 @@
|
||||
/**
|
||||
* JSONP Interceptor.
|
||||
*/
|
||||
|
||||
import jsonpClient from '../client/jsonp';
|
||||
|
||||
export default function (request) {
|
||||
|
||||
if (request.method == 'JSONP') {
|
||||
request.client = jsonpClient;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
/**
|
||||
* HTTP method override Interceptor.
|
||||
*/
|
||||
|
||||
export default function (request) {
|
||||
|
||||
if (request.emulateHTTP && /^(PUT|PATCH|DELETE)$/i.test(request.method)) {
|
||||
request.headers.set('X-HTTP-Method-Override', request.method);
|
||||
request.method = 'POST';
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,38 @@
|
||||
/**
|
||||
* HTTP Request.
|
||||
*/
|
||||
|
||||
import Url from '../url/index';
|
||||
import Headers from './headers';
|
||||
import Response from './response';
|
||||
import {assign, toUpper} from '../util';
|
||||
|
||||
export default class Request {
|
||||
|
||||
constructor(options) {
|
||||
|
||||
this.body = null;
|
||||
this.params = {};
|
||||
|
||||
assign(this, options, {
|
||||
method: toUpper(options.method || 'GET')
|
||||
});
|
||||
|
||||
if (!(this.headers instanceof Headers)) {
|
||||
this.headers = new Headers(this.headers);
|
||||
}
|
||||
}
|
||||
|
||||
getUrl() {
|
||||
return Url(this);
|
||||
}
|
||||
|
||||
getBody() {
|
||||
return this.body;
|
||||
}
|
||||
|
||||
respondWith(body, options) {
|
||||
return new Response(body, assign(options || {}, {url: this.getUrl()}));
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,75 @@
|
||||
/**
|
||||
* HTTP Response.
|
||||
*/
|
||||
|
||||
import Headers from './headers';
|
||||
import Promise from '../promise';
|
||||
import {when, isBlob, isString} from '../util';
|
||||
|
||||
export default class Response {
|
||||
|
||||
constructor(body, {url, headers, status, statusText}) {
|
||||
|
||||
this.url = url;
|
||||
this.ok = status >= 200 && status < 300;
|
||||
this.status = status || 0;
|
||||
this.statusText = statusText || '';
|
||||
this.headers = new Headers(headers);
|
||||
this.body = body;
|
||||
|
||||
if (isString(body)) {
|
||||
|
||||
this.bodyText = body;
|
||||
|
||||
} else if (isBlob(body)) {
|
||||
|
||||
this.bodyBlob = body;
|
||||
|
||||
if (isBlobText(body)) {
|
||||
this.bodyText = blobText(body);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
blob() {
|
||||
return when(this.bodyBlob);
|
||||
}
|
||||
|
||||
text() {
|
||||
return when(this.bodyText);
|
||||
}
|
||||
|
||||
json() {
|
||||
return when(this.text(), text => JSON.parse(text));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Object.defineProperty(Response.prototype, 'data', {
|
||||
|
||||
get() {
|
||||
|