mirror of
https://github.com/Redocly/redoc.git
synced 2024-11-24 09:33:44 +03:00
Merge commit '7a9ff729225e99cf095e16b03e832ae66d8b922e' into releases
This commit is contained in:
commit
8aa88cdcb9
32
.eslintrc
32
.eslintrc
|
@ -1,32 +0,0 @@
|
||||||
{
|
|
||||||
"parser": "babel-eslint",
|
|
||||||
"extends": "eslint:recommended",
|
|
||||||
"env": {
|
|
||||||
"browser": true,
|
|
||||||
"jasmine": true
|
|
||||||
},
|
|
||||||
// currently eslint doesn't support extension-typed configs
|
|
||||||
"globals": {
|
|
||||||
"should": true,
|
|
||||||
"expect": true,
|
|
||||||
"sinon": true,
|
|
||||||
"Reflect": true
|
|
||||||
},
|
|
||||||
"rules": {
|
|
||||||
"quotes": [2, "single"],
|
|
||||||
"no-console": 0,
|
|
||||||
"comma-spacing": 2,
|
|
||||||
"comma-style": [2, "last"],
|
|
||||||
"consistent-return": 2,
|
|
||||||
"strict": [2, "global"],
|
|
||||||
"eqeqeq": [2, "smart"],
|
|
||||||
"curly": [2, "multi-line"],
|
|
||||||
"semi-spacing": [2, {"before": false, "after": true}],
|
|
||||||
"semi": [2, "always"],
|
|
||||||
"no-extra-semi": 2,
|
|
||||||
"comma-dangle": [2, "never"],
|
|
||||||
"no-sequences": 2,
|
|
||||||
"comma-spacing": [2, {"before": false, "after": true}],
|
|
||||||
"comma-style": [2, "last"]
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,5 +1,5 @@
|
||||||
# ReDoc
|
# ReDoc
|
||||||
[![Build Status](https://travis-ci.org/Rebilly/ReDoc.svg?branch=master)](https://travis-ci.org/Rebilly/ReDoc) [![Coverage Status](https://coveralls.io/repos/Rebilly/ReDoc/badge.svg?branch=master&service=github)](https://coveralls.io/github/Rebilly/ReDoc?branch=master) [![Tested on APIs.guru](http://apis-guru.github.io/api-models/banners/tested_on_banner.svg)](https://github.com/APIs-guru/api-models) [![Code Climate](https://codeclimate.com/github/Rebilly/ReDoc/badges/gpa.svg)](https://codeclimate.com/github/Rebilly/ReDoc) [![David](https://david-dm.org/Rebilly/ReDoc/dev-status.svg)](https://david-dm.org/Rebilly/ReDoc#info=devDependencies) [![Stories in Ready](https://badge.waffle.io/Rebilly/ReDoc.png?label=ready&title=Ready)](https://waffle.io/Rebilly/ReDoc)
|
[![Build Status](https://travis-ci.org/Rebilly/ReDoc.svg?branch=master)](https://travis-ci.org/Rebilly/ReDoc) [![Coverage Status](https://coveralls.io/repos/Rebilly/ReDoc/badge.svg?branch=master&service=github)](https://coveralls.io/github/Rebilly/ReDoc?branch=master) [![Tested on APIs.guru](http://api.apis.guru/badges/tested_on.svg)](https://APIs.guru) [![Code Climate](https://codeclimate.com/github/Rebilly/ReDoc/badges/gpa.svg)](https://codeclimate.com/github/Rebilly/ReDoc) [![David](https://david-dm.org/Rebilly/ReDoc/dev-status.svg)](https://david-dm.org/Rebilly/ReDoc#info=devDependencies) [![Stories in Ready](https://badge.waffle.io/Rebilly/ReDoc.png?label=ready&title=Ready)](https://waffle.io/Rebilly/ReDoc)
|
||||||
|
|
||||||
[![npm](http://img.shields.io/npm/v/redoc.svg)](https://www.npmjs.com/package/redoc) [![Bower](http://img.shields.io/bower/v/redoc.svg)](http://bower.io/) [![License](https://img.shields.io/npm/l/redoc.svg)](https://github.com/Rebilly/ReDoc/blob/master/LICENSE)
|
[![npm](http://img.shields.io/npm/v/redoc.svg)](https://www.npmjs.com/package/redoc) [![Bower](http://img.shields.io/bower/v/redoc.svg)](http://bower.io/) [![License](https://img.shields.io/npm/l/redoc.svg)](https://github.com/Rebilly/ReDoc/blob/master/LICENSE)
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
var path = require('path');
|
var path = require('path');
|
||||||
|
|
||||||
var paths = {
|
var paths = {
|
||||||
source: 'lib/**/*.js',
|
source: 'lib/**/*.ts',
|
||||||
html: 'lib/**/*.html',
|
html: 'lib/**/*.html',
|
||||||
scss: 'lib/**/*.scss',
|
scss: 'lib/**/*.scss',
|
||||||
sourceEntryPoint: 'lib/index.js',
|
sourceEntryPoint: 'lib/index.js',
|
||||||
|
@ -9,7 +9,7 @@ var paths = {
|
||||||
output: 'dist/',
|
output: 'dist/',
|
||||||
tmp: '.tmp/',
|
tmp: '.tmp/',
|
||||||
demo: 'demo/**/*',
|
demo: 'demo/**/*',
|
||||||
tests: '{lib,tests}/**/*.spec.js',
|
tests: '{lib,tests}/**/*.spec.ts',
|
||||||
releases: 'demo/releases/'
|
releases: 'demo/releases/'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,8 @@ var replace = require('gulp-replace');
|
||||||
var rename = require('gulp-rename');
|
var rename = require('gulp-rename');
|
||||||
var argv = require('yargs').argv;
|
var argv = require('yargs').argv;
|
||||||
var gulpIf = require('gulp-if');
|
var gulpIf = require('gulp-if');
|
||||||
|
var sassCopm = require('node-sass');
|
||||||
|
var ts = require('typescript');
|
||||||
|
|
||||||
gulp.task('build', function (callback) {
|
gulp.task('build', function (callback) {
|
||||||
if (argv.skipRebuild) {
|
if (argv.skipRebuild) {
|
||||||
|
@ -21,7 +23,8 @@ gulp.task('build', function (callback) {
|
||||||
}
|
}
|
||||||
return runSequence(
|
return runSequence(
|
||||||
'clean',
|
'clean',
|
||||||
'concatPrism',
|
'tsc',
|
||||||
|
'inlineTemplates',
|
||||||
'bundle',
|
'bundle',
|
||||||
'concatDeps',
|
'concatDeps',
|
||||||
'copyDebug',
|
'copyDebug',
|
||||||
|
@ -38,19 +41,73 @@ gulp.task('copyDebug', () => {
|
||||||
|
|
||||||
gulp.task('rebuild', function(done) {
|
gulp.task('rebuild', function(done) {
|
||||||
return runSequence(
|
return runSequence(
|
||||||
|
'inlineTemplates',
|
||||||
'bundle',
|
'bundle',
|
||||||
'concatDeps',
|
'concatDeps',
|
||||||
|
'copyDebug',
|
||||||
done
|
done
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
gulp.task('inlineTemplates', ['sass'], function() {
|
gulp.task('tsc', function() {
|
||||||
return gulp.src(paths.source, { base: './' })
|
exec('tsc -p ./tsconfig.json');
|
||||||
.pipe(replace(/'(.*?\.css)'/g, '\'.tmp/$1\''))
|
});
|
||||||
.pipe(inlineNg2Template({ base: '/' }))
|
|
||||||
|
|
||||||
|
// function compileTs(files, es5) {
|
||||||
|
// var tsProject = ts.createProject('tsconfig.json');
|
||||||
|
// var allFiles = [].concat(files, ['typings/**/*.d.ts']);
|
||||||
|
// var res = gulp.src(allFiles, {
|
||||||
|
// base: config.src,
|
||||||
|
// outDir: config.tmp
|
||||||
|
// })
|
||||||
|
// .pipe(tslint())
|
||||||
|
// .pipe(tslint.report('prose', {
|
||||||
|
// summarizeFailureOutput: true,
|
||||||
|
// emitError: !watchMode
|
||||||
|
// }))
|
||||||
|
// .pipe(sourcemaps.init())
|
||||||
|
// .pipe(ts(tsProject))
|
||||||
|
// .on('error', function () {
|
||||||
|
// if (watchMode) {
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
// process.exit(1);
|
||||||
|
// });
|
||||||
|
// return res.js
|
||||||
|
// .pipe(sourcemaps.write('.', {
|
||||||
|
// includeContent: inline
|
||||||
|
// }))
|
||||||
|
// .pipe(gulp.dest(config.tmp));
|
||||||
|
// }
|
||||||
|
|
||||||
|
gulp.task('inlineTemplates', ['tsc', 'sass'], function() {
|
||||||
|
return gulp.src('.tmp/**/*.js', { base: './tmp' })
|
||||||
|
.pipe(replace(/'(.*?)\.css'/g, '\'$1.scss\''))
|
||||||
|
.pipe(inlineNg2Template({
|
||||||
|
base: './',
|
||||||
|
useRelativePaths: true,
|
||||||
|
styleProcessor: compileSass,
|
||||||
|
customFilePath: function(ext, file) {
|
||||||
|
var cwd = process.cwd();
|
||||||
|
var relative = path.relative(cwd, file);
|
||||||
|
relative = relative.substring('5');
|
||||||
|
return path.join(cwd, relative);
|
||||||
|
}
|
||||||
|
}))
|
||||||
.pipe(gulp.dest(paths.tmp));
|
.pipe(gulp.dest(paths.tmp));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
function compileSass(ext, file) {
|
||||||
|
file = file.replace('../../shared/styles/variables', 'lib/shared/styles/variables');
|
||||||
|
file = file.replace('json-schema-common', 'lib/components/JsonSchema/json-schema-common');
|
||||||
|
file = file.replace('../../shared/styles/share-link', 'lib/shared/styles/share-link');
|
||||||
|
file = file.replace('../JsonSchema/lib/components/JsonSchema/json-schema-common', 'lib/components/JsonSchema/json-schema-common');
|
||||||
|
file = file.replace('../../styles/variables', 'lib/shared/styles/variables');
|
||||||
|
|
||||||
|
return sassCopm.renderSync({data: file}).css;
|
||||||
|
}
|
||||||
|
|
||||||
var JS_DEPS = argv.prod ? [
|
var JS_DEPS = argv.prod ? [
|
||||||
'lib/utils/browser-update.js',
|
'lib/utils/browser-update.js',
|
||||||
'node_modules/zone.js/dist/zone.min.js',
|
'node_modules/zone.js/dist/zone.min.js',
|
||||||
|
@ -59,7 +116,7 @@ var JS_DEPS = argv.prod ? [
|
||||||
]: [
|
]: [
|
||||||
'lib/utils/browser-update.js',
|
'lib/utils/browser-update.js',
|
||||||
'node_modules/zone.js/dist/zone.js',
|
'node_modules/zone.js/dist/zone.js',
|
||||||
'node_modules/zone.js/dist/long-stack-trace-zone.js',
|
//'node_modules/zone.js/dist/long-stack-trace-zone.js',
|
||||||
'node_modules/reflect-metadata/Reflect.js',
|
'node_modules/reflect-metadata/Reflect.js',
|
||||||
'node_modules/babel-polyfill/dist/polyfill.js'
|
'node_modules/babel-polyfill/dist/polyfill.js'
|
||||||
];
|
];
|
||||||
|
@ -73,16 +130,17 @@ gulp.task('sass', function () {
|
||||||
});
|
});
|
||||||
|
|
||||||
// concatenate angular2 deps
|
// concatenate angular2 deps
|
||||||
gulp.task('concatDeps', function() {
|
gulp.task('concatDeps', ['concatPrism'], function() {
|
||||||
return gulp.src(JS_DEPS.concat([outputFileName]))
|
return gulp.src(JS_DEPS.concat([path.join(paths.tmp, 'prismjs-bundle.js'), outputFileName]))
|
||||||
.pipe(gulpIf(!argv.prod, sourcemaps.init({loadMaps: true})))
|
.pipe(gulpIf(!argv.prod, sourcemaps.init({loadMaps: true})))
|
||||||
.pipe(concat(outputFileName))
|
.pipe(concat(outputFileName))
|
||||||
.pipe(gulpIf(!argv.prod, sourcemaps.write('.')))
|
.pipe(gulpIf(!argv.prod, sourcemaps.write('.')))
|
||||||
.pipe(gulp.dest('.'))
|
.pipe(gulp.dest('.'))
|
||||||
});
|
});
|
||||||
|
|
||||||
gulp.task('bundle', ['injectVersionFile', 'inlineTemplates'], function bundle(done) {
|
gulp.task('bundle', function bundle(done) {
|
||||||
fs.existsSync('dist') || fs.mkdirSync('dist');
|
mkdir('-p', 'dist');
|
||||||
|
cp('lib/index.js', path.join(paths.tmp, paths.sourceEntryPoint));
|
||||||
var builder = new Builder('./', 'system.config.js');
|
var builder = new Builder('./', 'system.config.js');
|
||||||
|
|
||||||
builder
|
builder
|
||||||
|
@ -126,7 +184,7 @@ gulp.task('concatPrism', function() {
|
||||||
|
|
||||||
return gulp.src(prismFiles)
|
return gulp.src(prismFiles)
|
||||||
.pipe(concat(path.join(paths.tmp, 'prismjs-bundle.js')))
|
.pipe(concat(path.join(paths.tmp, 'prismjs-bundle.js')))
|
||||||
.pipe(gulp.dest('.'))
|
.pipe(gulp.dest('.'));
|
||||||
});
|
});
|
||||||
|
|
||||||
// needs inlineTemplates run before to create .tmp/lib folder
|
// needs inlineTemplates run before to create .tmp/lib folder
|
||||||
|
|
|
@ -1,10 +1,15 @@
|
||||||
var gulp = require('gulp');
|
var gulp = require('gulp');
|
||||||
var eslint = require('gulp-eslint');
|
var tslint = require('gulp-tslint');
|
||||||
var paths = require('../paths');
|
var paths = require('../paths');
|
||||||
|
|
||||||
gulp.task('lint', function () {
|
gulp.task('lint', function () {
|
||||||
return gulp.src([paths.source, paths.tests])
|
return gulp.src([paths.source, paths.tests])
|
||||||
.pipe(eslint())
|
.pipe(tslint({
|
||||||
.pipe(eslint.format())
|
rulesDirectory: 'node_modules/codelyzer'
|
||||||
.pipe(eslint.failAfterError());
|
}))
|
||||||
|
.pipe(tslint.report(require('tslint-stylish'), {
|
||||||
|
emitError: true,
|
||||||
|
sort: true,
|
||||||
|
bell: true
|
||||||
|
}));
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
var gulp = require('gulp');
|
var gulp = require('gulp');
|
||||||
|
|
||||||
var Server = require('karma').Server;
|
var Server = require('karma').Server;
|
||||||
|
var remapIstanbul = require('remap-istanbul/lib/gulpRemapIstanbul');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Run test once and exit
|
* Run test once and exit
|
||||||
|
@ -9,5 +10,34 @@ gulp.task('test', ['concatPrism', 'inlineTemplates', 'injectVersionFile'], funct
|
||||||
new Server({
|
new Server({
|
||||||
configFile: __dirname + '/../../karma.conf.js',
|
configFile: __dirname + '/../../karma.conf.js',
|
||||||
singleRun: true
|
singleRun: true
|
||||||
}, done).start();
|
}, karmaDone).start();
|
||||||
|
|
||||||
|
function karmaDone (exitCode) {
|
||||||
|
remapCoverage(done, exitCode);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
function remapCoverage(done, statusCode) {
|
||||||
|
console.log('Remapping coverage to TypeScript format...');
|
||||||
|
gulp.src('coverage/**/coverage-final.json')
|
||||||
|
.pipe(remapIstanbul({
|
||||||
|
reports: {
|
||||||
|
'lcovonly': 'coverage/lcov.info',
|
||||||
|
'text-summary': 'coverage/text-summary.txt',
|
||||||
|
'html': 'coverage'
|
||||||
|
}
|
||||||
|
}))
|
||||||
|
.on('finish', function () {
|
||||||
|
console.log('Remapping done!');
|
||||||
|
console.log(cat('coverage/text-summary.txt').stdout);
|
||||||
|
console.log('Test Done with exit code: ' + statusCode);
|
||||||
|
if (process.env.TRAVIS) {
|
||||||
|
console.log('uploading to coveralls')
|
||||||
|
var out = cat('coverage/lcov.info').exec('coveralls');
|
||||||
|
if (out.code !== 0) {
|
||||||
|
console.warn('Failed upload to coveralls');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
done(statusCode);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
|
@ -4,6 +4,11 @@
|
||||||
<title>ReDoc</title>
|
<title>ReDoc</title>
|
||||||
<link rel="stylesheet" href="main.css">
|
<link rel="stylesheet" href="main.css">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
|
||||||
|
<style>
|
||||||
|
@import url(//fonts.googleapis.com/css?family=Roboto:300,400,700);
|
||||||
|
@import url(//fonts.googleapis.com/css?family=Montserrat:400,700);
|
||||||
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<nav>
|
<nav>
|
||||||
|
@ -12,13 +17,13 @@
|
||||||
<input id="schema-url-input" value='http://rebilly.github.io/SwaggerTemplateRepo/swagger.yaml'>
|
<input id="schema-url-input" value='http://rebilly.github.io/SwaggerTemplateRepo/swagger.yaml'>
|
||||||
<button type="submit"> Explore </button>
|
<button type="submit"> Explore </button>
|
||||||
</form>
|
</form>
|
||||||
<iframe src="https://ghbtns.com/github-btn.html?user=Rebilly&repo=ReDoc&type=star&count=true&size=large"
|
<!--<iframe src="https://ghbtns.com/github-btn.html?user=Rebilly&repo=ReDoc&type=star&count=true&size=large"
|
||||||
frameborder="0" scrolling="0" width="130px" height="30px"></iframe>
|
frameborder="0" scrolling="0" width="130px" height="30px"></iframe>-->
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
<redoc scroll-y-offset="body > nav" spec-url='http://rebilly.github.io/SwaggerTemplateRepo/swagger.yaml'></redoc>
|
<redoc scroll-y-offset="body > nav" spec-url='swagger.yaml'></redoc>
|
||||||
|
|
||||||
<script src="main.js"> </script>
|
<script src="main.js"> </script>
|
||||||
<script src="dist/redoc.min.js"> </script>
|
<script src="../dist/redoc.min.js"> </script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
@import url(http://fonts.googleapis.com/css?family=Roboto:300,400,700);
|
/*@import url(http://fonts.googleapis.com/css?family=Roboto:300,400,700);
|
||||||
@import url(http://fonts.googleapis.com/css?family=Montserrat:300,400);
|
@import url(http://fonts.googleapis.com/css?family=Montserrat:300,400);*/
|
||||||
|
|
||||||
body {
|
body {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
|
|
828
demo/swagger.yaml
Normal file
828
demo/swagger.yaml
Normal file
|
@ -0,0 +1,828 @@
|
||||||
|
swagger: '2.0'
|
||||||
|
schemes:
|
||||||
|
- http
|
||||||
|
host: petstore.swagger.io
|
||||||
|
basePath: /v2
|
||||||
|
info:
|
||||||
|
description: 'This is a sample server Petstore server. You can find out more about Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/). For this sample, you can use the api key `special-key` to test the authorization filters.'
|
||||||
|
version: 1.0.0
|
||||||
|
title: Swagger Petstore
|
||||||
|
termsOfService: 'http://swagger.io/terms/'
|
||||||
|
contact:
|
||||||
|
email: apiteam@swagger.io
|
||||||
|
x-logo:
|
||||||
|
url: 'https://rebilly.github.io/ReDoc/petstore-logo.png'
|
||||||
|
license:
|
||||||
|
name: Apache 2.0
|
||||||
|
url: 'http://www.apache.org/licenses/LICENSE-2.0.html'
|
||||||
|
externalDocs:
|
||||||
|
description: Find out more about Swagger
|
||||||
|
url: 'http://swagger.io'
|
||||||
|
tags:
|
||||||
|
- name: Pagination
|
||||||
|
x-traitTag: true
|
||||||
|
description: |-
|
||||||
|
Sometimes you just can't get enough. For this reason, we've provided a convenient way to access more data in any request for sequential data. Simply call the url in the next_url parameter and we'll respond with the next set of data.
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
|
||||||
|
...
|
||||||
|
|
||||||
|
"pagination": {
|
||||||
|
|
||||||
|
"next_url":
|
||||||
|
"https://api.instagram.com/v1/tags/puppy/media/recent?access_token=fb2e77d.47a0479900504cb3ab4a1f626d174d2d&max_id=13872296",
|
||||||
|
|
||||||
|
"next_max_id": "13872296"
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
On views where pagination is present, we also support the `count`
|
||||||
|
parameter. Simply set this to the number of items you'd like to receive. Note that the default values should be fine for most applications - but if you decide to increase this number there is a maximum value defined on each endpoint.
|
||||||
|
externalDocs:
|
||||||
|
description: Find out more
|
||||||
|
url: 'http://swagger.io'
|
||||||
|
- name: JSONP
|
||||||
|
x-traitTag: true
|
||||||
|
description: "If you're writing an AJAX application, and you'd like to wrap our response with a callback, all you have to do is specify a callback parameter with any API call:\n```\n https://api.instagram.com/v1/tags/coffee/media/recent?access_token=fb2e77d.47a0479900504cb3ab4a1f626d174d2d&callback=callbackFunction\n```\nWould respond with:\n```js\ncallbackFunction({\n ...\n});\n``` \n > Example of markdown blockquote"
|
||||||
|
externalDocs:
|
||||||
|
description: Find out more
|
||||||
|
url: 'http://swagger.io'
|
||||||
|
- name: pet
|
||||||
|
description: Everything about your Pets
|
||||||
|
externalDocs:
|
||||||
|
description: Find out more
|
||||||
|
url: 'http://swagger.io'
|
||||||
|
- name: store
|
||||||
|
description: Access to Petstore orders
|
||||||
|
- name: user
|
||||||
|
description: Operations about user
|
||||||
|
externalDocs:
|
||||||
|
description: Find out more about our store
|
||||||
|
url: 'http://swagger.io'
|
||||||
|
securityDefinitions:
|
||||||
|
petstore_auth:
|
||||||
|
type: oauth2
|
||||||
|
authorizationUrl: 'http://petstore.swagger.io/api/oauth/dialog'
|
||||||
|
flow: implicit
|
||||||
|
scopes:
|
||||||
|
'write:pets': modify pets in your account
|
||||||
|
'read:pets': read your pets
|
||||||
|
api_key:
|
||||||
|
type: apiKey
|
||||||
|
name: api_key
|
||||||
|
in: header
|
||||||
|
paths:
|
||||||
|
/pet:
|
||||||
|
post:
|
||||||
|
tags:
|
||||||
|
- pet
|
||||||
|
summary: Add a new pet to the store
|
||||||
|
description: ''
|
||||||
|
operationId: addPet
|
||||||
|
consumes:
|
||||||
|
- application/json
|
||||||
|
- application/xml
|
||||||
|
produces:
|
||||||
|
- application/xml
|
||||||
|
- application/json
|
||||||
|
parameters:
|
||||||
|
- in: body
|
||||||
|
name: body
|
||||||
|
description: Pet object that needs to be added to the store
|
||||||
|
required: true
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/Pet'
|
||||||
|
responses:
|
||||||
|
'405':
|
||||||
|
description: Invalid input
|
||||||
|
security:
|
||||||
|
- petstore_auth:
|
||||||
|
- 'write:pets'
|
||||||
|
- 'read:pets'
|
||||||
|
x-code-samples:
|
||||||
|
- lang: 'C#'
|
||||||
|
source: |
|
||||||
|
PetStore.v1.Pet pet = new PetStore.v1.Pet();
|
||||||
|
pet.setApiKey("your api key");
|
||||||
|
pet.petType = PetStore.v1.Pet.TYPE_DOG;
|
||||||
|
pet.name = "Rex";
|
||||||
|
// set other fields
|
||||||
|
PetStoreResponse response = pet.create();
|
||||||
|
if (response.statusCode == HttpStatusCode.Created)
|
||||||
|
{
|
||||||
|
// Successfully created
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Something wrong -- check response for errors
|
||||||
|
Console.WriteLine(response.getRawResponse());
|
||||||
|
}
|
||||||
|
- lang: PHP
|
||||||
|
source: "$form = new \\PetStore\\Entities\\Pet();\n$form->setPetType(\"Dog\");\n$form->setName(\"Rex\");\n// set other fields\ntry {\n $pet = $client->pets()->create($form);\n} catch (UnprocessableEntityException $e) {\n var_dump($e->getErrors());\n}\n"
|
||||||
|
put:
|
||||||
|
tags:
|
||||||
|
- pet
|
||||||
|
summary: Update an existing pet
|
||||||
|
description: ''
|
||||||
|
operationId: updatePet
|
||||||
|
consumes:
|
||||||
|
- application/json
|
||||||
|
- application/xml
|
||||||
|
produces:
|
||||||
|
- application/xml
|
||||||
|
- application/json
|
||||||
|
parameters:
|
||||||
|
- in: body
|
||||||
|
name: body
|
||||||
|
description: Pet object that needs to be added to the store
|
||||||
|
required: true
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/Pet'
|
||||||
|
responses:
|
||||||
|
'400':
|
||||||
|
description: Invalid ID supplied
|
||||||
|
'404':
|
||||||
|
description: Pet not found
|
||||||
|
'405':
|
||||||
|
description: Validation exception
|
||||||
|
security:
|
||||||
|
- petstore_auth:
|
||||||
|
- 'write:pets'
|
||||||
|
- 'read:pets'
|
||||||
|
x-code-samples:
|
||||||
|
- lang: PHP
|
||||||
|
source: "$form = new \\PetStore\\Entities\\Pet();\n$form->setPetId(1);\n$form->setPetType(\"Dog\");\n$form->setName(\"Rex\");\n// set other fields\ntry {\n $pet = $client->pets()->update($form);\n} catch (UnprocessableEntityException $e) {\n var_dump($e->getErrors());\n}\n"
|
||||||
|
'/pet/{petId}':
|
||||||
|
get:
|
||||||
|
tags:
|
||||||
|
- pet
|
||||||
|
- JSONP
|
||||||
|
summary: Find pet by ID
|
||||||
|
description: Returns a single pet
|
||||||
|
operationId: getPetById
|
||||||
|
produces:
|
||||||
|
- application/xml
|
||||||
|
- application/json
|
||||||
|
parameters:
|
||||||
|
- name: petId
|
||||||
|
in: path
|
||||||
|
description: ID of pet to return
|
||||||
|
required: true
|
||||||
|
type: integer
|
||||||
|
format: int64
|
||||||
|
responses:
|
||||||
|
'200':
|
||||||
|
description: successful operation
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/Pet'
|
||||||
|
'400':
|
||||||
|
description: Invalid ID supplied
|
||||||
|
'404':
|
||||||
|
description: Pet not found
|
||||||
|
security:
|
||||||
|
- api_key: []
|
||||||
|
post:
|
||||||
|
tags:
|
||||||
|
- pet
|
||||||
|
summary: Updates a pet in the store with form data
|
||||||
|
description: ''
|
||||||
|
operationId: updatePetWithForm
|
||||||
|
consumes:
|
||||||
|
- application/x-www-form-urlencoded
|
||||||
|
produces:
|
||||||
|
- application/xml
|
||||||
|
- application/json
|
||||||
|
parameters:
|
||||||
|
- name: petId
|
||||||
|
in: path
|
||||||
|
description: ID of pet that needs to be updated
|
||||||
|
required: true
|
||||||
|
type: integer
|
||||||
|
format: int64
|
||||||
|
- name: name
|
||||||
|
in: formData
|
||||||
|
description: Updated name of the pet
|
||||||
|
required: false
|
||||||
|
type: string
|
||||||
|
- name: status
|
||||||
|
in: formData
|
||||||
|
description: Updated status of the pet
|
||||||
|
required: false
|
||||||
|
type: string
|
||||||
|
responses:
|
||||||
|
'405':
|
||||||
|
description: Invalid input
|
||||||
|
security:
|
||||||
|
- petstore_auth:
|
||||||
|
- 'write:pets'
|
||||||
|
- 'read:pets'
|
||||||
|
delete:
|
||||||
|
tags:
|
||||||
|
- pet
|
||||||
|
summary: Deletes a pet
|
||||||
|
description: ''
|
||||||
|
operationId: deletePet
|
||||||
|
produces:
|
||||||
|
- application/xml
|
||||||
|
- application/json
|
||||||
|
parameters:
|
||||||
|
- name: api_key
|
||||||
|
in: header
|
||||||
|
required: false
|
||||||
|
type: string
|
||||||
|
- name: petId
|
||||||
|
in: path
|
||||||
|
description: Pet id to delete
|
||||||
|
required: true
|
||||||
|
type: integer
|
||||||
|
format: int64
|
||||||
|
responses:
|
||||||
|
'400':
|
||||||
|
description: Invalid pet value
|
||||||
|
security:
|
||||||
|
- petstore_auth:
|
||||||
|
- 'write:pets'
|
||||||
|
- 'read:pets'
|
||||||
|
'/pet/{petId}/uploadImage':
|
||||||
|
get:
|
||||||
|
tags:
|
||||||
|
- pet
|
||||||
|
summary: uploads an image
|
||||||
|
description: ''
|
||||||
|
operationId: uploadFile
|
||||||
|
consumes:
|
||||||
|
- image/jpeg
|
||||||
|
- image/png
|
||||||
|
produces:
|
||||||
|
- image/jpeg
|
||||||
|
- image/png
|
||||||
|
parameters:
|
||||||
|
- name: petId
|
||||||
|
in: path
|
||||||
|
description: ID of pet to update
|
||||||
|
required: true
|
||||||
|
type: integer
|
||||||
|
format: int64
|
||||||
|
- name: file
|
||||||
|
in: body
|
||||||
|
description: file to upload
|
||||||
|
required: false
|
||||||
|
schema:
|
||||||
|
type: file
|
||||||
|
responses:
|
||||||
|
'200':
|
||||||
|
description: successful operation
|
||||||
|
schema:
|
||||||
|
type: file
|
||||||
|
security:
|
||||||
|
- petstore_auth:
|
||||||
|
- 'write:pets'
|
||||||
|
- 'read:pets'
|
||||||
|
post:
|
||||||
|
tags:
|
||||||
|
- pet
|
||||||
|
summary: uploads an image
|
||||||
|
description: ''
|
||||||
|
operationId: uploadFile
|
||||||
|
consumes:
|
||||||
|
- multipart/form-data
|
||||||
|
produces:
|
||||||
|
- application/json
|
||||||
|
parameters:
|
||||||
|
- name: petId
|
||||||
|
in: path
|
||||||
|
description: ID of pet to update
|
||||||
|
required: true
|
||||||
|
type: integer
|
||||||
|
format: int64
|
||||||
|
- name: additionalMetadata
|
||||||
|
in: formData
|
||||||
|
description: Additional data to pass to server
|
||||||
|
required: false
|
||||||
|
type: string
|
||||||
|
- name: file
|
||||||
|
in: formData
|
||||||
|
description: file to upload
|
||||||
|
required: false
|
||||||
|
type: file
|
||||||
|
responses:
|
||||||
|
'200':
|
||||||
|
description: successful operation
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/ApiResponse'
|
||||||
|
security:
|
||||||
|
- petstore_auth:
|
||||||
|
- 'write:pets'
|
||||||
|
- 'read:pets'
|
||||||
|
/pet/findByStatus:
|
||||||
|
get:
|
||||||
|
tags:
|
||||||
|
- pet
|
||||||
|
- Pagination
|
||||||
|
- JSONP
|
||||||
|
summary: Finds Pets by status
|
||||||
|
description: Multiple status values can be provided with comma seperated strings
|
||||||
|
operationId: findPetsByStatus
|
||||||
|
produces:
|
||||||
|
- application/xml
|
||||||
|
- application/json
|
||||||
|
parameters:
|
||||||
|
- name: status
|
||||||
|
in: query
|
||||||
|
description: Status values that need to be considered for filter
|
||||||
|
required: true
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
enum:
|
||||||
|
- available
|
||||||
|
- pending
|
||||||
|
- sold
|
||||||
|
default: available
|
||||||
|
collectionFormat: csv
|
||||||
|
responses:
|
||||||
|
'200':
|
||||||
|
description: successful operation
|
||||||
|
schema:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
$ref: '#/definitions/Pet'
|
||||||
|
'400':
|
||||||
|
description: Invalid status value
|
||||||
|
security:
|
||||||
|
- petstore_auth:
|
||||||
|
- 'write:pets'
|
||||||
|
- 'read:pets'
|
||||||
|
/pet/findByTags:
|
||||||
|
get:
|
||||||
|
tags:
|
||||||
|
- pet
|
||||||
|
- Pagination
|
||||||
|
- JSONP
|
||||||
|
summary: Finds Pets by tags
|
||||||
|
description: 'Muliple tags can be provided with comma seperated strings. Use tag1, tag2, tag3 for testing.'
|
||||||
|
operationId: findPetsByTags
|
||||||
|
produces:
|
||||||
|
- application/xml
|
||||||
|
- application/json
|
||||||
|
parameters:
|
||||||
|
- name: tags
|
||||||
|
in: query
|
||||||
|
description: Tags to filter by
|
||||||
|
required: true
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
collectionFormat: csv
|
||||||
|
responses:
|
||||||
|
'200':
|
||||||
|
description: successful operation
|
||||||
|
schema:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
$ref: '#/definitions/Pet'
|
||||||
|
'400':
|
||||||
|
description: Invalid tag value
|
||||||
|
security:
|
||||||
|
- petstore_auth:
|
||||||
|
- 'write:pets'
|
||||||
|
- 'read:pets'
|
||||||
|
/store/inventory:
|
||||||
|
get:
|
||||||
|
tags:
|
||||||
|
- store
|
||||||
|
- JSONP
|
||||||
|
summary: Returns pet inventories by status
|
||||||
|
description: Returns a map of status codes to quantities
|
||||||
|
operationId: getInventory
|
||||||
|
produces:
|
||||||
|
- application/json
|
||||||
|
parameters: []
|
||||||
|
responses:
|
||||||
|
'200':
|
||||||
|
description: successful operation
|
||||||
|
schema:
|
||||||
|
type: object
|
||||||
|
additionalProperties:
|
||||||
|
type: integer
|
||||||
|
format: int32
|
||||||
|
security:
|
||||||
|
- api_key: []
|
||||||
|
/store/order:
|
||||||
|
post:
|
||||||
|
tags:
|
||||||
|
- store
|
||||||
|
summary: Place an order for a pet
|
||||||
|
description: ''
|
||||||
|
operationId: placeOrder
|
||||||
|
produces:
|
||||||
|
- application/xml
|
||||||
|
- application/json
|
||||||
|
parameters:
|
||||||
|
- in: body
|
||||||
|
name: body
|
||||||
|
description: order placed for purchasing the pet
|
||||||
|
required: true
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/Order'
|
||||||
|
responses:
|
||||||
|
'200':
|
||||||
|
description: successful operation
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/Order'
|
||||||
|
'400':
|
||||||
|
description: Invalid Order
|
||||||
|
'/store/order/{orderId}':
|
||||||
|
get:
|
||||||
|
tags:
|
||||||
|
- store
|
||||||
|
- JSONP
|
||||||
|
summary: Find purchase order by ID
|
||||||
|
description: 'For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions'
|
||||||
|
operationId: getOrderById
|
||||||
|
produces:
|
||||||
|
- application/xml
|
||||||
|
- application/json
|
||||||
|
parameters:
|
||||||
|
- name: orderId
|
||||||
|
in: path
|
||||||
|
description: ID of pet that needs to be fetched
|
||||||
|
required: true
|
||||||
|
type: integer
|
||||||
|
maximum: 5
|
||||||
|
minimum: 1
|
||||||
|
format: int64
|
||||||
|
responses:
|
||||||
|
'200':
|
||||||
|
description: successful operation
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/Order'
|
||||||
|
'400':
|
||||||
|
description: Invalid ID supplied
|
||||||
|
'404':
|
||||||
|
description: Order not found
|
||||||
|
delete:
|
||||||
|
tags:
|
||||||
|
- store
|
||||||
|
summary: Delete purchase order by ID
|
||||||
|
description: For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors
|
||||||
|
operationId: deleteOrder
|
||||||
|
produces:
|
||||||
|
- application/xml
|
||||||
|
- application/json
|
||||||
|
parameters:
|
||||||
|
- name: orderId
|
||||||
|
in: path
|
||||||
|
description: ID of the order that needs to be deleted
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
minimum: 1
|
||||||
|
responses:
|
||||||
|
'400':
|
||||||
|
description: Invalid ID supplied
|
||||||
|
'404':
|
||||||
|
description: Order not found
|
||||||
|
/user:
|
||||||
|
post:
|
||||||
|
tags:
|
||||||
|
- user
|
||||||
|
summary: Create user
|
||||||
|
description: This can only be done by the logged in user.
|
||||||
|
operationId: createUser
|
||||||
|
produces:
|
||||||
|
- application/xml
|
||||||
|
- application/json
|
||||||
|
parameters:
|
||||||
|
- in: body
|
||||||
|
name: body
|
||||||
|
description: Created user object
|
||||||
|
required: true
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/User'
|
||||||
|
responses:
|
||||||
|
default:
|
||||||
|
description: successful operation
|
||||||
|
'/user/{username}':
|
||||||
|
get:
|
||||||
|
tags:
|
||||||
|
- user
|
||||||
|
- JSONP
|
||||||
|
summary: Get user by user name
|
||||||
|
description: ''
|
||||||
|
operationId: getUserByName
|
||||||
|
produces:
|
||||||
|
- application/xml
|
||||||
|
- application/json
|
||||||
|
parameters:
|
||||||
|
- name: username
|
||||||
|
in: path
|
||||||
|
description: 'The name that needs to be fetched. Use user1 for testing. '
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
responses:
|
||||||
|
'200':
|
||||||
|
description: successful operation
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/User'
|
||||||
|
'400':
|
||||||
|
description: Invalid username supplied
|
||||||
|
'404':
|
||||||
|
description: User not found
|
||||||
|
put:
|
||||||
|
tags:
|
||||||
|
- user
|
||||||
|
summary: Updated user
|
||||||
|
description: This can only be done by the logged in user.
|
||||||
|
operationId: updateUser
|
||||||
|
produces:
|
||||||
|
- application/xml
|
||||||
|
- application/json
|
||||||
|
parameters:
|
||||||
|
- name: username
|
||||||
|
in: path
|
||||||
|
description: name that need to be deleted
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
- in: body
|
||||||
|
name: body
|
||||||
|
description: Updated user object
|
||||||
|
required: true
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/User'
|
||||||
|
responses:
|
||||||
|
'400':
|
||||||
|
description: Invalid user supplied
|
||||||
|
'404':
|
||||||
|
description: User not found
|
||||||
|
delete:
|
||||||
|
tags:
|
||||||
|
- user
|
||||||
|
summary: Delete user
|
||||||
|
description: This can only be done by the logged in user.
|
||||||
|
operationId: deleteUser
|
||||||
|
produces:
|
||||||
|
- application/xml
|
||||||
|
- application/json
|
||||||
|
parameters:
|
||||||
|
- name: username
|
||||||
|
in: path
|
||||||
|
description: The name that needs to be deleted
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
responses:
|
||||||
|
'400':
|
||||||
|
description: Invalid username supplied
|
||||||
|
'404':
|
||||||
|
description: User not found
|
||||||
|
/user/createWithArray:
|
||||||
|
post:
|
||||||
|
tags:
|
||||||
|
- user
|
||||||
|
summary: Creates list of users with given input array
|
||||||
|
description: ''
|
||||||
|
operationId: createUsersWithArrayInput
|
||||||
|
produces:
|
||||||
|
- application/xml
|
||||||
|
- application/json
|
||||||
|
parameters:
|
||||||
|
- in: body
|
||||||
|
name: body
|
||||||
|
description: List of user object
|
||||||
|
required: true
|
||||||
|
schema:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
$ref: '#/definitions/User'
|
||||||
|
responses:
|
||||||
|
default:
|
||||||
|
description: successful operation
|
||||||
|
/user/createWithList:
|
||||||
|
post:
|
||||||
|
tags:
|
||||||
|
- user
|
||||||
|
summary: Creates list of users with given input array
|
||||||
|
description: ''
|
||||||
|
operationId: createUsersWithListInput
|
||||||
|
produces:
|
||||||
|
- application/xml
|
||||||
|
- application/json
|
||||||
|
parameters:
|
||||||
|
- in: body
|
||||||
|
name: body
|
||||||
|
description: List of user object
|
||||||
|
required: true
|
||||||
|
schema:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
$ref: '#/definitions/User'
|
||||||
|
responses:
|
||||||
|
default:
|
||||||
|
description: successful operation
|
||||||
|
/user/login:
|
||||||
|
get:
|
||||||
|
tags:
|
||||||
|
- user
|
||||||
|
summary: Logs user into the system
|
||||||
|
description: ''
|
||||||
|
operationId: loginUser
|
||||||
|
produces:
|
||||||
|
- application/xml
|
||||||
|
- application/json
|
||||||
|
parameters:
|
||||||
|
- name: username
|
||||||
|
in: query
|
||||||
|
description: The user name for login
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
- name: password
|
||||||
|
in: query
|
||||||
|
description: The password for login in clear text
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
responses:
|
||||||
|
'200':
|
||||||
|
description: successful operation
|
||||||
|
schema:
|
||||||
|
type: string
|
||||||
|
headers:
|
||||||
|
X-Rate-Limit:
|
||||||
|
type: integer
|
||||||
|
format: int32
|
||||||
|
description: calls per hour allowed by the user
|
||||||
|
X-Expires-After:
|
||||||
|
type: string
|
||||||
|
format: date-time
|
||||||
|
description: date in UTC when toekn expires
|
||||||
|
'400':
|
||||||
|
description: Invalid username/password supplied
|
||||||
|
/user/logout:
|
||||||
|
get:
|
||||||
|
tags:
|
||||||
|
- user
|
||||||
|
summary: Logs out current logged in user session
|
||||||
|
description: ''
|
||||||
|
operationId: logoutUser
|
||||||
|
produces:
|
||||||
|
- application/xml
|
||||||
|
- application/json
|
||||||
|
parameters: []
|
||||||
|
responses:
|
||||||
|
default:
|
||||||
|
description: successful operation
|
||||||
|
definitions:
|
||||||
|
ApiResponse:
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
code:
|
||||||
|
type: integer
|
||||||
|
format: int32
|
||||||
|
type:
|
||||||
|
type: string
|
||||||
|
message:
|
||||||
|
type: string
|
||||||
|
Cat:
|
||||||
|
description: A representation of a cat
|
||||||
|
allOf:
|
||||||
|
- $ref: '#/definitions/Pet'
|
||||||
|
- type: object
|
||||||
|
properties:
|
||||||
|
huntingSkill:
|
||||||
|
type: string
|
||||||
|
description: The measured skill for hunting
|
||||||
|
default: lazy
|
||||||
|
enum:
|
||||||
|
- clueless
|
||||||
|
- lazy
|
||||||
|
- adventurous
|
||||||
|
- aggressive
|
||||||
|
required:
|
||||||
|
- huntingSkill
|
||||||
|
Category:
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
id:
|
||||||
|
type: integer
|
||||||
|
format: int64
|
||||||
|
name:
|
||||||
|
type: string
|
||||||
|
xml:
|
||||||
|
name: Category
|
||||||
|
Dog:
|
||||||
|
description: A representation of a dog
|
||||||
|
allOf:
|
||||||
|
- $ref: '#/definitions/Pet'
|
||||||
|
- type: object
|
||||||
|
properties:
|
||||||
|
packSize:
|
||||||
|
type: integer
|
||||||
|
format: int32
|
||||||
|
description: the size of the pack the dog is from
|
||||||
|
default: 0
|
||||||
|
minimum: 0
|
||||||
|
required:
|
||||||
|
- packSize
|
||||||
|
Order:
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
id:
|
||||||
|
type: integer
|
||||||
|
format: int64
|
||||||
|
petId:
|
||||||
|
type: integer
|
||||||
|
format: int64
|
||||||
|
quantity:
|
||||||
|
type: integer
|
||||||
|
format: int32
|
||||||
|
shipDate:
|
||||||
|
type: string
|
||||||
|
format: date-time
|
||||||
|
status:
|
||||||
|
type: string
|
||||||
|
description: Order Status
|
||||||
|
enum:
|
||||||
|
- placed
|
||||||
|
- approved
|
||||||
|
- delivered
|
||||||
|
complete:
|
||||||
|
type: boolean
|
||||||
|
default: false
|
||||||
|
xml:
|
||||||
|
name: Order
|
||||||
|
Pet:
|
||||||
|
type: object
|
||||||
|
required:
|
||||||
|
- name
|
||||||
|
- photoUrls
|
||||||
|
discriminator: petType
|
||||||
|
properties:
|
||||||
|
petType:
|
||||||
|
type: string
|
||||||
|
id:
|
||||||
|
type: integer
|
||||||
|
format: int64
|
||||||
|
category:
|
||||||
|
$ref: '#/definitions/Category'
|
||||||
|
name:
|
||||||
|
type: string
|
||||||
|
example: doggie
|
||||||
|
photoUrls:
|
||||||
|
type: array
|
||||||
|
xml:
|
||||||
|
name: photoUrl
|
||||||
|
wrapped: true
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
tags:
|
||||||
|
type: array
|
||||||
|
xml:
|
||||||
|
name: tag
|
||||||
|
wrapped: true
|
||||||
|
items:
|
||||||
|
$ref: '#/definitions/Tag'
|
||||||
|
status:
|
||||||
|
type: string
|
||||||
|
description: pet status in the store
|
||||||
|
enum:
|
||||||
|
- available
|
||||||
|
- pending
|
||||||
|
- sold
|
||||||
|
xml:
|
||||||
|
name: Pet
|
||||||
|
Tag:
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
id:
|
||||||
|
type: integer
|
||||||
|
format: int64
|
||||||
|
name:
|
||||||
|
type: string
|
||||||
|
xml:
|
||||||
|
name: Tag
|
||||||
|
User:
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
id:
|
||||||
|
type: integer
|
||||||
|
format: int64
|
||||||
|
username:
|
||||||
|
type: string
|
||||||
|
firstName:
|
||||||
|
type: string
|
||||||
|
lastName:
|
||||||
|
type: string
|
||||||
|
email:
|
||||||
|
type: string
|
||||||
|
password:
|
||||||
|
type: string
|
||||||
|
phone:
|
||||||
|
type: string
|
||||||
|
userStatus:
|
||||||
|
type: integer
|
||||||
|
format: int32
|
||||||
|
description: User Status
|
||||||
|
xml:
|
||||||
|
name: User
|
|
@ -1,15 +1,8 @@
|
||||||
module.exports = function (config) {
|
module.exports = function (config) {
|
||||||
var travis = process.env.TRAVIS;
|
|
||||||
config.set({
|
config.set({
|
||||||
frameworks: ['phantomjs-shim', 'jspm', 'jasmine', 'sinon', 'should'],
|
frameworks: ['phantomjs-shim', 'jspm', 'jasmine', 'sinon', 'should'],
|
||||||
preprocessors: {
|
preprocessors: {
|
||||||
'lib/**/!(*spec).js': ['babel', 'regex', 'coverage']
|
'.tmp/lib/**/!(*spec).js': ['babel', 'coverage']
|
||||||
},
|
|
||||||
|
|
||||||
regexPreprocessor: {
|
|
||||||
rules: [
|
|
||||||
[ /'\.(.*?)\.css'/g, '\'.tmp$1.css\'']
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
babelPreprocessor: {
|
babelPreprocessor: {
|
||||||
options: {
|
options: {
|
||||||
|
@ -29,13 +22,13 @@ module.exports = function (config) {
|
||||||
coverageReporter: {
|
coverageReporter: {
|
||||||
instrumenters: { isparta : require('isparta') },
|
instrumenters: { isparta : require('isparta') },
|
||||||
instrumenter: {
|
instrumenter: {
|
||||||
'lib/**/!(*spec).js': 'isparta'
|
'.tmp/lib/**/!(*spec).js': 'isparta'
|
||||||
},
|
},
|
||||||
dir: 'coverage/',
|
dir: 'coverage/',
|
||||||
reporters: [
|
reporters: [
|
||||||
{type: 'html'},
|
{type: 'html'},
|
||||||
{type: 'text-summary'},
|
{type: 'lcov'},
|
||||||
{type: 'lcov'}
|
{type: 'json'}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
client: {
|
client: {
|
||||||
|
@ -51,28 +44,28 @@ module.exports = function (config) {
|
||||||
'node_modules/zone.js/dist/jasmine-patch.js',
|
'node_modules/zone.js/dist/jasmine-patch.js',
|
||||||
'node_modules/zone.js/dist/long-stack-trace-zone.js',
|
'node_modules/zone.js/dist/long-stack-trace-zone.js',
|
||||||
'node_modules/babel-polyfill/dist/polyfill.js',
|
'node_modules/babel-polyfill/dist/polyfill.js',
|
||||||
'./node_modules/reflect-metadata/Reflect.js'
|
'./node_modules/reflect-metadata/Reflect.js',
|
||||||
|
'.tmp/prismjs-bundle.js'
|
||||||
],
|
],
|
||||||
|
|
||||||
jspm: {
|
jspm: {
|
||||||
config: 'system.config.js',
|
config: 'system.config.js',
|
||||||
loadFiles: ['tests/setup.js', 'tests/helpers.js', 'tests/unit/*.spec.js', 'lib/**/*.js'],
|
loadFiles: ['.tmp/tests/setup.js', '.tmp/tests/helpers.js', '.tmp/lib/**/*.js',
|
||||||
|
'.tmp/tests/unit/*.js'],
|
||||||
serveFiles: ['tests/schemas/**/*.json','tests/schemas/**/*.yml', 'lib/**/*.html',
|
serveFiles: ['tests/schemas/**/*.json','tests/schemas/**/*.yml', 'lib/**/*.html',
|
||||||
'.tmp/lib/**/*.json', '.tmp/*js', '.tmp/lib/**/*.css'],
|
'.tmp/lib/**/*.json', '.tmp/*js', '.tmp/lib/**/*.css']
|
||||||
nocache: true
|
|
||||||
},
|
},
|
||||||
|
|
||||||
proxies: {
|
proxies: {
|
||||||
'/tests/': '/base/tests/',
|
'/.tmp/': '/base/.tmp/',
|
||||||
'/lib/components/Redoc/redoc-initial-styles.css': '/base/.tmp/lib/components/Redoc/redoc-initial-styles.css',
|
'/tests/schemas': '/base/tests/schemas',
|
||||||
|
'/lib/components/redoc/redoc-initial-styles.scss': '/base/.tmp/lib/components/Redoc/redoc-initial-styles.scss',
|
||||||
'/lib/version.json': '/base/.tmp/lib/version.json',
|
'/lib/version.json': '/base/.tmp/lib/version.json',
|
||||||
'/lib/': '/base/lib/',
|
'/lib/': '/base/lib/',
|
||||||
'/jspm_packages/': '/base/jspm_packages/',
|
'/jspm_packages/': '/base/jspm_packages/',
|
||||||
'/node_modules/': '/base/node_modules/',
|
'/node_modules/': '/base/node_modules/'
|
||||||
'/prismjs-bundle.js': '/base/.tmp/prismjs-bundle.js',
|
|
||||||
'/.tmp/': '/base/.tmp/'
|
|
||||||
},
|
},
|
||||||
reporters: travis ? ['mocha', 'coverage', 'coveralls'] : ['mocha', 'coverage'],
|
reporters: ['mocha', 'coverage'],
|
||||||
|
|
||||||
browsers: ['PhantomJS'],
|
browsers: ['PhantomJS'],
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,12 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
import { getChildDebugElement } from 'tests/helpers';
|
import { getChildDebugElement } from '../../../tests/helpers';
|
||||||
import { Component, provide } from '@angular/core';
|
import { Component, provide } from '@angular/core';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
inject,
|
inject,
|
||||||
async,
|
async,
|
||||||
|
expect,
|
||||||
beforeEach,
|
beforeEach,
|
||||||
beforeEachProviders,
|
beforeEachProviders,
|
||||||
it
|
it
|
||||||
|
@ -13,11 +14,9 @@ import {
|
||||||
|
|
||||||
import { TestComponentBuilder } from '@angular/compiler/testing';
|
import { TestComponentBuilder } from '@angular/compiler/testing';
|
||||||
|
|
||||||
import { ApiInfo } from 'lib/components/ApiInfo/api-info';
|
import { ApiInfo } from './api-info';
|
||||||
import SchemaManager from 'lib/utils/SchemaManager';
|
import { SchemaManager } from '../../utils/SchemaManager';
|
||||||
import { OptionsService } from 'lib/services/index';
|
import { OptionsService } from '../../services/index';
|
||||||
|
|
||||||
let optionsService = new OptionsService();
|
|
||||||
|
|
||||||
describe('Redoc components', () => {
|
describe('Redoc components', () => {
|
||||||
describe('ApiInfo Component', () => {
|
describe('ApiInfo Component', () => {
|
||||||
|
@ -26,7 +25,7 @@ describe('Redoc components', () => {
|
||||||
let fixture;
|
let fixture;
|
||||||
beforeEachProviders(() => [
|
beforeEachProviders(() => [
|
||||||
provide(SchemaManager, {useValue: new SchemaManager()}),
|
provide(SchemaManager, {useValue: new SchemaManager()}),
|
||||||
provide(OptionsService, {useValue: optionsService})
|
provide(OptionsService, {useClass: OptionsService})
|
||||||
]);
|
]);
|
||||||
|
|
||||||
beforeEach(async(inject([TestComponentBuilder, SchemaManager], (tcb, schemaMgr) => {
|
beforeEach(async(inject([TestComponentBuilder, SchemaManager], (tcb, schemaMgr) => {
|
||||||
|
@ -35,7 +34,7 @@ describe('Redoc components', () => {
|
||||||
})));
|
})));
|
||||||
|
|
||||||
beforeEach((done) => {
|
beforeEach((done) => {
|
||||||
builder.createAsync(TestApp).then(_fixture => {
|
builder.createAsync(TestAppComponent).then(_fixture => {
|
||||||
fixture = _fixture;
|
fixture = _fixture;
|
||||||
component = getChildDebugElement(fixture.debugElement, 'api-info').componentInstance;
|
component = getChildDebugElement(fixture.debugElement, 'api-info').componentInstance;
|
||||||
fixture.detectChanges();
|
fixture.detectChanges();
|
||||||
|
@ -68,5 +67,5 @@ describe('Redoc components', () => {
|
||||||
template:
|
template:
|
||||||
`<api-info></api-info>`
|
`<api-info></api-info>`
|
||||||
})
|
})
|
||||||
class TestApp {
|
class TestAppComponent {
|
||||||
}
|
}
|
|
@ -5,14 +5,14 @@ import { OptionsService } from '../../services/index';
|
||||||
|
|
||||||
@RedocComponent({
|
@RedocComponent({
|
||||||
selector: 'api-info',
|
selector: 'api-info',
|
||||||
styleUrls: ['./lib/components/ApiInfo/api-info.css'],
|
styleUrls: ['./api-info.css'],
|
||||||
templateUrl: './lib/components/ApiInfo/api-info.html'
|
templateUrl: './api-info.html'
|
||||||
})
|
})
|
||||||
@Reflect.metadata('parameters', [[SchemaManager], [OptionsService]])
|
|
||||||
export class ApiInfo extends BaseComponent {
|
export class ApiInfo extends BaseComponent {
|
||||||
constructor(schemaMgr, optionsService) {
|
data: any;
|
||||||
|
specUrl: String;
|
||||||
|
constructor(schemaMgr:SchemaManager, private optionsService:OptionsService) {
|
||||||
super(schemaMgr);
|
super(schemaMgr);
|
||||||
this.optionsService = optionsService;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
prepareModel() {
|
prepareModel() {
|
|
@ -1,6 +1,6 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
import { getChildDebugElement } from 'tests/helpers';
|
import { getChildDebugElement } from '../../../tests/helpers';
|
||||||
import {Component, provide} from '@angular/core';
|
import {Component, provide} from '@angular/core';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
|
@ -13,8 +13,8 @@ import {
|
||||||
|
|
||||||
import { TestComponentBuilder } from '@angular/compiler/testing';
|
import { TestComponentBuilder } from '@angular/compiler/testing';
|
||||||
|
|
||||||
import { ApiLogo } from 'lib/components/ApiLogo/api-logo';
|
import { ApiLogo } from './api-logo';
|
||||||
import SchemaManager from 'lib/utils/SchemaManager';
|
import { SchemaManager } from '../../utils/SchemaManager';
|
||||||
|
|
||||||
|
|
||||||
describe('Redoc components', () => {
|
describe('Redoc components', () => {
|
||||||
|
@ -34,7 +34,7 @@ describe('Redoc components', () => {
|
||||||
return schemaMgr.load(schemaUrl);
|
return schemaMgr.load(schemaUrl);
|
||||||
})));
|
})));
|
||||||
beforeEach((done) => {
|
beforeEach((done) => {
|
||||||
builder.createAsync(TestApp).then(_fixture => {
|
builder.createAsync(TestAppComponent).then(_fixture => {
|
||||||
fixture = _fixture;
|
fixture = _fixture;
|
||||||
component = getChildDebugElement(fixture.debugElement, 'api-logo').componentInstance;
|
component = getChildDebugElement(fixture.debugElement, 'api-logo').componentInstance;
|
||||||
fixture.detectChanges();
|
fixture.detectChanges();
|
||||||
|
@ -49,7 +49,7 @@ describe('Redoc components', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should not display image when no x-logo', () => {
|
it('should not display image when no x-logo', () => {
|
||||||
component.data.should.be.empty;
|
component.data.should.be.empty();
|
||||||
let nativeElement = getChildDebugElement(fixture.debugElement, 'api-logo').nativeElement;
|
let nativeElement = getChildDebugElement(fixture.debugElement, 'api-logo').nativeElement;
|
||||||
let imgElement = nativeElement.querySelector('img');
|
let imgElement = nativeElement.querySelector('img');
|
||||||
expect(imgElement).toBeNull();
|
expect(imgElement).toBeNull();
|
||||||
|
@ -74,5 +74,5 @@ describe('Redoc components', () => {
|
||||||
template:
|
template:
|
||||||
`<api-logo></api-logo>`
|
`<api-logo></api-logo>`
|
||||||
})
|
})
|
||||||
class TestApp {
|
class TestAppComponent {
|
||||||
}
|
}
|
|
@ -1,19 +1,20 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
import {RedocComponent, BaseComponent} from '../base';
|
import {RedocComponent, BaseComponent, SchemaManager} from '../base';
|
||||||
|
|
||||||
@RedocComponent({
|
@RedocComponent({
|
||||||
selector: 'api-logo',
|
selector: 'api-logo',
|
||||||
styleUrls: ['./lib/components/ApiLogo/api-logo.css'],
|
styleUrls: ['./api-logo.css'],
|
||||||
templateUrl: './lib/components/ApiLogo/api-logo.html'
|
templateUrl: './api-logo.html'
|
||||||
})
|
})
|
||||||
export class ApiLogo extends BaseComponent {
|
export class ApiLogo extends BaseComponent {
|
||||||
constructor(schemaMgr) {
|
data:any = {};
|
||||||
|
|
||||||
|
constructor(schemaMgr:SchemaManager) {
|
||||||
super(schemaMgr);
|
super(schemaMgr);
|
||||||
}
|
}
|
||||||
|
|
||||||
prepareModel() {
|
prepareModel() {
|
||||||
this.data = {};
|
|
||||||
let logoInfo = this.componentSchema.info['x-logo'];
|
let logoInfo = this.componentSchema.info['x-logo'];
|
||||||
if (!logoInfo) return;
|
if (!logoInfo) return;
|
||||||
this.data.imgUrl = logoInfo.url;
|
this.data.imgUrl = logoInfo.url;
|
|
@ -1,9 +1,8 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
import { getChildDebugElement } from 'tests/helpers';
|
import { getChildDebugElement } from '../../../tests/helpers';
|
||||||
import { Component, provide } from '@angular/core';
|
import { Component, provide } from '@angular/core';
|
||||||
import { DynamicComponentLoader } from '@angular/core';
|
import { DynamicComponentLoader } from '@angular/core';
|
||||||
import { BrowserDomAdapter } from '@angular/platform-browser/src/browser/browser_adapter';
|
|
||||||
|
|
||||||
import {
|
import {
|
||||||
inject,
|
inject,
|
||||||
|
@ -15,9 +14,8 @@ import {
|
||||||
import { TestComponentBuilder } from '@angular/compiler/testing';
|
import { TestComponentBuilder } from '@angular/compiler/testing';
|
||||||
|
|
||||||
|
|
||||||
import { JsonSchemaLazy } from 'lib/components/JsonSchema/json-schema-lazy';
|
import { JsonSchemaLazy } from './json-schema-lazy';
|
||||||
import SchemaManager from 'lib/utils/SchemaManager';
|
import { SchemaManager } from '../../utils/SchemaManager';
|
||||||
import { OptionsService } from 'lib/services/index';
|
|
||||||
|
|
||||||
describe('Redoc components', () => {
|
describe('Redoc components', () => {
|
||||||
describe('JsonSchemaLazy Component', () => {
|
describe('JsonSchemaLazy Component', () => {
|
||||||
|
@ -26,25 +24,25 @@ describe('Redoc components', () => {
|
||||||
let schemaMgr = new SchemaManager();
|
let schemaMgr = new SchemaManager();
|
||||||
let fixture;
|
let fixture;
|
||||||
let loader;
|
let loader;
|
||||||
let appRef = {
|
let appRefMock = {
|
||||||
instance: {},
|
instance: {
|
||||||
hostView: {changeDetectorRef: {detectChanges : function() {} }}
|
pointer: ''
|
||||||
|
},
|
||||||
|
hostView: { changeDetectorRef: {detectChanges : () => undefined} }
|
||||||
};
|
};
|
||||||
beforeEachProviders(() => [
|
beforeEachProviders(() => [
|
||||||
provide(SchemaManager, {useValue: schemaMgr}),
|
provide(SchemaManager, {useValue: schemaMgr})
|
||||||
provide(BrowserDomAdapter, {useClass: BrowserDomAdapter}),
|
|
||||||
provide(OptionsService, {useClass: OptionsService})
|
|
||||||
]);
|
]);
|
||||||
beforeEach(inject([TestComponentBuilder, DynamicComponentLoader], (tcb, dcl) => {
|
beforeEach(inject([TestComponentBuilder, DynamicComponentLoader], (tcb, dcl) => {
|
||||||
builder = tcb;
|
builder = tcb;
|
||||||
loader = dcl;
|
loader = dcl;
|
||||||
spyOn(loader, 'loadNextToLocation').and.returnValue({then: (fn) => fn(appRef)});
|
spyOn(loader, 'loadNextToLocation').and.returnValue({then: (fn) => fn(appRefMock)});
|
||||||
}));
|
}));
|
||||||
beforeEach((done) => {
|
beforeEach((done) => {
|
||||||
builder.createAsync(TestApp).then(_fixture => {
|
builder.createAsync(TestAppComponent).then(_fixture => {
|
||||||
fixture = _fixture;
|
fixture = _fixture;
|
||||||
let debugEl = getChildDebugElement(fixture.debugElement, 'json-schema-lazy');
|
let debugEl = getChildDebugElement(fixture.debugElement, 'json-schema-lazy');
|
||||||
component = debugEl.componentInstance;
|
component = <JsonSchemaLazy>debugEl.componentInstance;
|
||||||
done();
|
done();
|
||||||
}, err => done.fail(err));
|
}, err => done.fail(err));
|
||||||
});
|
});
|
||||||
|
@ -76,7 +74,7 @@ describe('Redoc components', () => {
|
||||||
component.pointer = '#/def';
|
component.pointer = '#/def';
|
||||||
fixture.detectChanges();
|
fixture.detectChanges();
|
||||||
component.load();
|
component.load();
|
||||||
expect(appRef.instance.pointer).toEqual(component.pointer);
|
expect(appRefMock.instance.pointer).toEqual(component.pointer);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -89,5 +87,5 @@ describe('Redoc components', () => {
|
||||||
template:
|
template:
|
||||||
`<json-schema-lazy></json-schema-lazy>`
|
`<json-schema-lazy></json-schema-lazy>`
|
||||||
})
|
})
|
||||||
class TestApp {
|
class TestAppComponent {
|
||||||
}
|
}
|
|
@ -1,12 +1,12 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
import { Component, ElementRef, ViewContainerRef } from '@angular/core';
|
import { Component, ElementRef, ViewContainerRef, OnDestroy, AfterViewInit } from '@angular/core';
|
||||||
import { CORE_DIRECTIVES } from '@angular/common';
|
import { CORE_DIRECTIVES } from '@angular/common';
|
||||||
import { DynamicComponentLoader } from '@angular/core';
|
import { DynamicComponentLoader, Input } from '@angular/core';
|
||||||
|
|
||||||
import { JsonSchema } from './json-schema';
|
import { JsonSchema } from './json-schema';
|
||||||
import { OptionsService } from '../../services/index';
|
import { OptionsService } from '../../services/options.service';
|
||||||
import SchemaManager from '../../utils/SchemaManager';
|
import { SchemaManager } from '../../utils/SchemaManager';
|
||||||
|
|
||||||
|
|
||||||
var cache = {};
|
var cache = {};
|
||||||
|
@ -14,20 +14,16 @@ var cache = {};
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'json-schema-lazy',
|
selector: 'json-schema-lazy',
|
||||||
inputs: ['pointer', 'auto', 'isRequestSchema'],
|
|
||||||
template: '',
|
template: '',
|
||||||
directives: [CORE_DIRECTIVES]
|
directives: [CORE_DIRECTIVES]
|
||||||
})
|
})
|
||||||
@Reflect.metadata('parameters', [[SchemaManager], [ViewContainerRef], [
|
export class JsonSchemaLazy implements OnDestroy, AfterViewInit {
|
||||||
ElementRef], [DynamicComponentLoader], [OptionsService]])
|
@Input() pointer: string;
|
||||||
export class JsonSchemaLazy {
|
@Input() auto: boolean;
|
||||||
|
@Input() isRequestSchema: boolean;
|
||||||
constructor(schemaMgr, viewRef, elementRef, dcl, optionsService) {
|
loaded: boolean = false;
|
||||||
this.viewRef = viewRef;
|
constructor(private schemaMgr:SchemaManager, private viewRef:ViewContainerRef, private elementRef:ElementRef,
|
||||||
this.elementRef = elementRef;
|
private dcl:DynamicComponentLoader, private optionsService:OptionsService) {
|
||||||
this.dcl = dcl;
|
|
||||||
this.optionsService = optionsService;
|
|
||||||
this.schemaMgr = schemaMgr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
normalizePointer() {
|
normalizePointer() {
|
||||||
|
@ -40,8 +36,6 @@ export class JsonSchemaLazy {
|
||||||
this.initComponent(compRef);
|
this.initComponent(compRef);
|
||||||
if (compRef.changeDetectorRef) {
|
if (compRef.changeDetectorRef) {
|
||||||
compRef.changeDetectorRef.detectChanges();
|
compRef.changeDetectorRef.detectChanges();
|
||||||
} else {
|
|
||||||
compRef.hostView.changeDetectorRef.detectChanges();
|
|
||||||
}
|
}
|
||||||
return compRef;
|
return compRef;
|
||||||
});
|
});
|
||||||
|
@ -58,7 +52,7 @@ export class JsonSchemaLazy {
|
||||||
|
|
||||||
// cache JsonSchema view
|
// cache JsonSchema view
|
||||||
loadCached() {
|
loadCached() {
|
||||||
this.pointer = this.normalizePointer(this.pointer);
|
this.pointer = this.normalizePointer();
|
||||||
if (cache[this.pointer]) {
|
if (cache[this.pointer]) {
|
||||||
cache[this.pointer].then((compRef) => {
|
cache[this.pointer].then((compRef) => {
|
||||||
setTimeout( ()=> {
|
setTimeout( ()=> {
|
|
@ -43,10 +43,10 @@
|
||||||
<div class="param-description" innerHtml="{{prop.description | marked}}"></div>
|
<div class="param-description" innerHtml="{{prop.description | marked}}"></div>
|
||||||
<div class="discriminator-info" *ngIf="prop.isDiscriminator">
|
<div class="discriminator-info" *ngIf="prop.isDiscriminator">
|
||||||
<span>This field value determines the exact schema:</span>
|
<span>This field value determines the exact schema:</span>
|
||||||
<dropdown (change)="selectDerived($event)">
|
<drop-down (change)="selectDerived($event)">
|
||||||
<option *ngFor="let derived of schema.derived; let i=index"
|
<option *ngFor="let derived of schema.derived; let i=index"
|
||||||
[value]="i">{{derived.name}}</option>
|
[value]="i">{{derived.name}}</option>
|
||||||
</dropdown>
|
</drop-down>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
|
@ -9,12 +9,11 @@ import {
|
||||||
} from '@angular/core/testing';
|
} from '@angular/core/testing';
|
||||||
import { TestComponentBuilder } from '@angular/compiler/testing';
|
import { TestComponentBuilder } from '@angular/compiler/testing';
|
||||||
|
|
||||||
import { OptionsService } from 'lib/services/index';
|
import { getChildDebugElement } from '../../../tests/helpers';
|
||||||
import { getChildDebugElement } from 'tests/helpers';
|
|
||||||
|
|
||||||
|
|
||||||
import { JsonSchema } from 'lib/components/JsonSchema/json-schema';
|
import { JsonSchema } from './json-schema';
|
||||||
import SchemaManager from 'lib/utils/SchemaManager';
|
import { SchemaManager } from '../../utils/SchemaManager';;
|
||||||
|
|
||||||
describe('Redoc components', () => {
|
describe('Redoc components', () => {
|
||||||
describe('JsonSchema Component', () => {
|
describe('JsonSchema Component', () => {
|
||||||
|
@ -23,14 +22,13 @@ describe('Redoc components', () => {
|
||||||
let schemaMgr = new SchemaManager();
|
let schemaMgr = new SchemaManager();
|
||||||
let fixture;
|
let fixture;
|
||||||
beforeEachProviders(() => [
|
beforeEachProviders(() => [
|
||||||
provide(SchemaManager, {useValue: schemaMgr}),
|
provide(SchemaManager, {useValue: schemaMgr})
|
||||||
provide(OptionsService, {useClass: OptionsService})
|
|
||||||
]);
|
]);
|
||||||
beforeEach(inject([TestComponentBuilder], (tcb) => {
|
beforeEach(inject([TestComponentBuilder], (tcb) => {
|
||||||
builder = tcb;
|
builder = tcb;
|
||||||
}));
|
}));
|
||||||
beforeEach((done) => {
|
beforeEach((done) => {
|
||||||
builder.createAsync(TestApp).then(_fixture => {
|
builder.createAsync(TestAppComponent).then(_fixture => {
|
||||||
fixture = _fixture;
|
fixture = _fixture;
|
||||||
let debugEl = getChildDebugElement(fixture.debugElement, 'json-schema');
|
let debugEl = getChildDebugElement(fixture.debugElement, 'json-schema');
|
||||||
component = debugEl.componentInstance;
|
component = debugEl.componentInstance;
|
||||||
|
@ -40,21 +38,21 @@ describe('Redoc components', () => {
|
||||||
|
|
||||||
it('should init component', () => {
|
it('should init component', () => {
|
||||||
component.pointer = '';
|
component.pointer = '';
|
||||||
schemaMgr._schema = {type: 'object'};
|
(<any>schemaMgr)._schema = {type: 'object'};
|
||||||
fixture.detectChanges();
|
fixture.detectChanges();
|
||||||
expect(component).not.toBeNull();
|
expect(component).not.toBeNull();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should set isTrivial for non-object/array types', () => {
|
it('should set isTrivial for non-object/array types', () => {
|
||||||
component.pointer = '';
|
component.pointer = '';
|
||||||
schemaMgr._schema = {type: 'string'};
|
(<any>schemaMgr)._schema = {type: 'string'};
|
||||||
fixture.detectChanges();
|
fixture.detectChanges();
|
||||||
component.schema.isTrivial.should.be.true();
|
component.schema.isTrivial.should.be.true();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should use < * > notation for prop without type', () => {
|
it('should use < * > notation for prop without type', () => {
|
||||||
component.pointer = '';
|
component.pointer = '';
|
||||||
schemaMgr._schema = {type: 'object', properties: {
|
(<any>schemaMgr)._schema = {type: 'object', properties: {
|
||||||
test: {}
|
test: {}
|
||||||
}};
|
}};
|
||||||
fixture.detectChanges();
|
fixture.detectChanges();
|
||||||
|
@ -72,5 +70,5 @@ describe('Redoc components', () => {
|
||||||
template:
|
template:
|
||||||
`<json-schema></json-schema>`
|
`<json-schema></json-schema>`
|
||||||
})
|
})
|
||||||
class TestApp {
|
class TestAppComponent {
|
||||||
}
|
}
|
|
@ -1,6 +1,6 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
import { ElementRef } from '@angular/core';
|
import { ElementRef, Input } from '@angular/core';
|
||||||
|
|
||||||
import { RedocComponent, BaseComponent, SchemaManager } from '../base';
|
import { RedocComponent, BaseComponent, SchemaManager } from '../base';
|
||||||
import { DropDown } from '../../shared/components/index';
|
import { DropDown } from '../../shared/components/index';
|
||||||
|
@ -8,18 +8,33 @@ import JsonPointer from '../../utils/JsonPointer';
|
||||||
|
|
||||||
@RedocComponent({
|
@RedocComponent({
|
||||||
selector: 'json-schema',
|
selector: 'json-schema',
|
||||||
templateUrl: './lib/components/JsonSchema/json-schema.html',
|
templateUrl: './json-schema.html',
|
||||||
styleUrls: ['./lib/components/JsonSchema/json-schema.css'],
|
styleUrls: ['./json-schema.css'],
|
||||||
directives: [JsonSchema, DropDown],
|
directives: [JsonSchema, DropDown],
|
||||||
inputs: ['isArray', 'final', 'nestOdd', 'childFor', 'isRequestSchema'],
|
|
||||||
detect: true
|
detect: true
|
||||||
})
|
})
|
||||||
@Reflect.metadata('parameters', [[SchemaManager], [ElementRef]])
|
|
||||||
export class JsonSchema extends BaseComponent {
|
export class JsonSchema extends BaseComponent {
|
||||||
constructor(schemaMgr, elementRef) {
|
$element: any;
|
||||||
|
schema: any;
|
||||||
|
derivedEmtpy: boolean;
|
||||||
|
@Input() isArray: boolean;
|
||||||
|
@Input() final: boolean = false;
|
||||||
|
@Input() nestOdd: boolean;
|
||||||
|
@Input() childFor: string;
|
||||||
|
@Input() isRequestSchema: boolean;
|
||||||
|
|
||||||
|
static injectPropertyData(propertySchema, propertyName, propPointer, hostPointer?) {
|
||||||
|
propertySchema = Object.assign({}, propertySchema);
|
||||||
|
|
||||||
|
propertySchema._name = propertyName;
|
||||||
|
runInjectors(propertySchema, propertySchema, propPointer, hostPointer);
|
||||||
|
|
||||||
|
return propertySchema;
|
||||||
|
}
|
||||||
|
|
||||||
|
constructor(schemaMgr:SchemaManager, elementRef:ElementRef) {
|
||||||
super(schemaMgr);
|
super(schemaMgr);
|
||||||
this.$element = elementRef.nativeElement;
|
this.$element = elementRef.nativeElement;
|
||||||
this.final = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
selectDerived(subClassIdx) {
|
selectDerived(subClassIdx) {
|
||||||
|
@ -131,24 +146,6 @@ export class JsonSchema extends BaseComponent {
|
||||||
return JsonSchema.injectPropertyData(addProps, '<Additional Properties> *',
|
return JsonSchema.injectPropertyData(addProps, '<Additional Properties> *',
|
||||||
JsonPointer.join(addProps._pointer || schema._pointer || this.pointer, ['additionalProperties']));
|
JsonPointer.join(addProps._pointer || schema._pointer || this.pointer, ['additionalProperties']));
|
||||||
}
|
}
|
||||||
|
|
||||||
static injectPropertyData(propertySchema, propertyName, propPointer, hostPointer) {
|
|
||||||
propertySchema = Object.assign({}, propertySchema);
|
|
||||||
|
|
||||||
propertySchema._name = propertyName;
|
|
||||||
runInjectors(propertySchema, propertySchema, propPointer, hostPointer);
|
|
||||||
|
|
||||||
return propertySchema;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function runInjectors(injectTo, propertySchema, propertyPointer, hostPointer) {
|
|
||||||
for (var injName in injectors) {
|
|
||||||
let injector = injectors[injName];
|
|
||||||
if (injector.check(propertySchema)) {
|
|
||||||
injector.inject(injectTo, propertySchema, propertyPointer, hostPointer);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const injectors = {
|
const injectors = {
|
||||||
|
@ -277,3 +274,12 @@ const injectors = {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
function runInjectors(injectTo, propertySchema, propertyPointer, hostPointer?) {
|
||||||
|
for (var injName in injectors) {
|
||||||
|
let injector = injectors[injName];
|
||||||
|
if (injector.check(propertySchema)) {
|
||||||
|
injector.inject(injectTo, propertySchema, propertyPointer, hostPointer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,7 +1,6 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
import { Component, provide } from '@angular/core';
|
import { Component, provide } from '@angular/core';
|
||||||
import { BrowserDomAdapter } from '@angular/platform-browser/src/browser/browser_adapter';
|
|
||||||
import {
|
import {
|
||||||
inject,
|
inject,
|
||||||
async,
|
async,
|
||||||
|
@ -11,28 +10,24 @@ import {
|
||||||
} from '@angular/core/testing';
|
} from '@angular/core/testing';
|
||||||
import { TestComponentBuilder } from '@angular/compiler/testing';
|
import { TestComponentBuilder } from '@angular/compiler/testing';
|
||||||
|
|
||||||
import { getChildDebugElement } from 'tests/helpers';
|
import { getChildDebugElement } from '../../../tests/helpers';
|
||||||
|
|
||||||
import { Method } from 'lib/components/Method/method';
|
import { Method } from './method';
|
||||||
import SchemaManager from 'lib/utils/SchemaManager';
|
import { SchemaManager } from '../../utils/SchemaManager';;
|
||||||
import { OptionsService, RedocEventsService } from 'lib/services/index';
|
|
||||||
|
|
||||||
describe('Redoc components', () => {
|
describe('Redoc components', () => {
|
||||||
describe('Method Component', () => {
|
describe('Method Component', () => {
|
||||||
let builder;
|
let builder;
|
||||||
let component;
|
let component;
|
||||||
beforeEachProviders(() => [
|
beforeEachProviders(() => [
|
||||||
provide(SchemaManager, {useValue: new SchemaManager()}),
|
provide(SchemaManager, {useValue: new SchemaManager()})
|
||||||
provide(BrowserDomAdapter, {useClass: BrowserDomAdapter}),
|
|
||||||
provide(OptionsService, {useClass: OptionsService}),
|
|
||||||
provide(RedocEventsService, {useClass: RedocEventsService})
|
|
||||||
]);
|
]);
|
||||||
beforeEach(async(inject([TestComponentBuilder, SchemaManager], (tcb, schemaMgr) => {
|
beforeEach(async(inject([TestComponentBuilder, SchemaManager], (tcb, schemaMgr) => {
|
||||||
builder = tcb;
|
builder = tcb;
|
||||||
return schemaMgr.load('/tests/schemas/extended-petstore.yml');
|
return schemaMgr.load('/tests/schemas/extended-petstore.yml');
|
||||||
})));
|
})));
|
||||||
beforeEach((done) => {
|
beforeEach((done) => {
|
||||||
builder.createAsync(TestApp).then(fixture => {
|
builder.createAsync(TestAppComponent).then(fixture => {
|
||||||
component = getChildDebugElement(fixture.debugElement, 'method').componentInstance;
|
component = getChildDebugElement(fixture.debugElement, 'method').componentInstance;
|
||||||
fixture.detectChanges();
|
fixture.detectChanges();
|
||||||
done();
|
done();
|
||||||
|
@ -52,7 +47,7 @@ describe('Redoc components', () => {
|
||||||
|
|
||||||
|
|
||||||
it('should main tag', () => {
|
it('should main tag', () => {
|
||||||
component.data.methodInfo.tags.should.be.empty;
|
component.data.methodInfo.tags.should.be.empty();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -66,5 +61,5 @@ describe('Redoc components', () => {
|
||||||
template:
|
template:
|
||||||
`<method pointer='#/paths/~1user~1{username}/put'></method>`
|
`<method pointer='#/paths/~1user~1{username}/put'></method>`
|
||||||
})
|
})
|
||||||
class TestApp {
|
class TestAppComponent {
|
||||||
}
|
}
|
|
@ -1,7 +1,7 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
import { Input } from '@angular/core';
|
||||||
import { JsonPointer } from '../../utils/JsonPointer';
|
import JsonPointer from '../../utils/JsonPointer';
|
||||||
import { RedocComponent, BaseComponent } from '../base';
|
import { RedocComponent, BaseComponent, SchemaManager} from '../base';
|
||||||
|
|
||||||
import { ParamsList } from '../ParamsList/params-list';
|
import { ParamsList } from '../ParamsList/params-list';
|
||||||
import { ResponsesList } from '../ResponsesList/responses-list';
|
import { ResponsesList } from '../ResponsesList/responses-list';
|
||||||
|
@ -11,14 +11,15 @@ import { RequestSamples } from '../RequestSamples/request-samples';
|
||||||
|
|
||||||
@RedocComponent({
|
@RedocComponent({
|
||||||
selector: 'method',
|
selector: 'method',
|
||||||
templateUrl: './lib/components/Method/method.html',
|
templateUrl: './method.html',
|
||||||
styleUrls: ['./lib/components/Method/method.css'],
|
styleUrls: ['./method.css'],
|
||||||
directives: [ ParamsList, ResponsesList, ResponsesSamples, SchemaSample, RequestSamples ],
|
directives: [ ParamsList, ResponsesList, ResponsesSamples, SchemaSample, RequestSamples ],
|
||||||
inputs: ['tag'],
|
|
||||||
detect: true
|
detect: true
|
||||||
})
|
})
|
||||||
export class Method extends BaseComponent {
|
export class Method extends BaseComponent {
|
||||||
constructor(schemaMgr) {
|
data:any;
|
||||||
|
@Input() tag:string;
|
||||||
|
constructor(schemaMgr:SchemaManager) {
|
||||||
super(schemaMgr);
|
super(schemaMgr);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
import { Component, provide } from '@angular/core';
|
import { Component, provide } from '@angular/core';
|
||||||
import { BrowserDomAdapter } from '@angular/platform-browser/src/browser/browser_adapter';
|
|
||||||
import {
|
import {
|
||||||
inject,
|
inject,
|
||||||
async,
|
async,
|
||||||
|
@ -11,11 +10,11 @@ import {
|
||||||
} from '@angular/core/testing';
|
} from '@angular/core/testing';
|
||||||
import { TestComponentBuilder } from '@angular/compiler/testing';
|
import { TestComponentBuilder } from '@angular/compiler/testing';
|
||||||
|
|
||||||
import { getChildDebugElement } from 'tests/helpers';
|
import { getChildDebugElement } from '../../../tests/helpers';
|
||||||
|
|
||||||
import { OptionsService, RedocEventsService } from 'lib/services/index';
|
|
||||||
import { MethodsList } from 'lib/components/MethodsList/methods-list';
|
import { MethodsList } from './methods-list';
|
||||||
import SchemaManager from 'lib/utils/SchemaManager';
|
import { SchemaManager } from '../../utils/SchemaManager';
|
||||||
|
|
||||||
describe('Redoc components', () => {
|
describe('Redoc components', () => {
|
||||||
describe('MethodsList Component', () => {
|
describe('MethodsList Component', () => {
|
||||||
|
@ -23,17 +22,14 @@ describe('Redoc components', () => {
|
||||||
let component;
|
let component;
|
||||||
let fixture;
|
let fixture;
|
||||||
beforeEachProviders(() => [
|
beforeEachProviders(() => [
|
||||||
provide(SchemaManager, {useValue: new SchemaManager()}),
|
provide(SchemaManager, {useValue: new SchemaManager()})
|
||||||
provide(OptionsService, {useClass: OptionsService}),
|
|
||||||
provide(BrowserDomAdapter, {useClass: BrowserDomAdapter}),
|
|
||||||
provide(RedocEventsService, {useClass: RedocEventsService})
|
|
||||||
]);
|
]);
|
||||||
beforeEach(async(inject([TestComponentBuilder, SchemaManager], (tcb, schemaMgr) => {
|
beforeEach(async(inject([TestComponentBuilder, SchemaManager], (tcb, schemaMgr) => {
|
||||||
builder = tcb;
|
builder = tcb;
|
||||||
return schemaMgr.load('/tests/schemas/methods-list-component.json');
|
return schemaMgr.load('/tests/schemas/methods-list-component.json');
|
||||||
})));
|
})));
|
||||||
beforeEach((done) => {
|
beforeEach((done) => {
|
||||||
builder.createAsync(TestApp).then(_fixture => {
|
builder.createAsync(TestAppComponent).then(_fixture => {
|
||||||
fixture = _fixture;
|
fixture = _fixture;
|
||||||
component = getChildDebugElement(fixture.debugElement, 'methods-list').componentInstance;
|
component = getChildDebugElement(fixture.debugElement, 'methods-list').componentInstance;
|
||||||
fixture.detectChanges();
|
fixture.detectChanges();
|
||||||
|
@ -50,7 +46,7 @@ describe('Redoc components', () => {
|
||||||
expect(component.data.tags).not.toBeNull();
|
expect(component.data.tags).not.toBeNull();
|
||||||
component.data.tags.should.have.lengthOf(2);
|
component.data.tags.should.have.lengthOf(2);
|
||||||
component.data.tags[0].name.should.be.equal('traitTag');
|
component.data.tags[0].name.should.be.equal('traitTag');
|
||||||
component.data.tags[0].methods.should.be.empty;
|
component.data.tags[0].methods.should.be.empty();
|
||||||
component.data.tags[1].name.should.be.equal('tag1');
|
component.data.tags[1].name.should.be.equal('tag1');
|
||||||
component.data.tags[1].methods.should.have.lengthOf(2);
|
component.data.tags[1].methods.should.have.lengthOf(2);
|
||||||
});
|
});
|
||||||
|
@ -63,5 +59,5 @@ describe('Redoc components', () => {
|
||||||
template:
|
template:
|
||||||
`<methods-list></methods-list>`
|
`<methods-list></methods-list>`
|
||||||
})
|
})
|
||||||
class TestApp {
|
class TestAppComponent {
|
||||||
}
|
}
|
|
@ -1,21 +1,21 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
import { forwardRef } from '@angular/core';
|
import { forwardRef } from '@angular/core';
|
||||||
import { RedocComponent, BaseComponent } from '../base';
|
import { RedocComponent, BaseComponent, SchemaManager } from '../base';
|
||||||
import { Method } from '../Method/method';
|
import { Method } from '../Method/method';
|
||||||
import { EncodeURIComponentPipe } from '../../utils/pipes';
|
import { EncodeURIComponentPipe } from '../../utils/pipes';
|
||||||
|
|
||||||
@RedocComponent({
|
@RedocComponent({
|
||||||
selector: 'methods-list',
|
selector: 'methods-list',
|
||||||
templateUrl: './lib/components/MethodsList/methods-list.html',
|
templateUrl: './methods-list.html',
|
||||||
styleUrls: ['./lib/components/MethodsList/methods-list.css'],
|
styleUrls: ['./methods-list.css'],
|
||||||
directives: [ forwardRef(() => Method) ],
|
directives: [ forwardRef(() => Method) ],
|
||||||
pipes: [ EncodeURIComponentPipe ],
|
pipes: [ EncodeURIComponentPipe ],
|
||||||
detect: true
|
detect: true
|
||||||
})
|
})
|
||||||
export class MethodsList extends BaseComponent {
|
export class MethodsList extends BaseComponent {
|
||||||
|
data:any;
|
||||||
constructor(schemaMgr) {
|
constructor(schemaMgr:SchemaManager) {
|
||||||
super(schemaMgr);
|
super(schemaMgr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,7 +25,7 @@ export class MethodsList extends BaseComponent {
|
||||||
// duplicate methods
|
// duplicate methods
|
||||||
|
|
||||||
let menuStructure = this.schemaMgr.buildMenuTree();
|
let menuStructure = this.schemaMgr.buildMenuTree();
|
||||||
let tags = Array.from(menuStructure.entries())
|
let tags = Array.from<any>(menuStructure.entries())
|
||||||
.map((entry) => {
|
.map((entry) => {
|
||||||
let [tag, {description, methods}] = entry;
|
let [tag, {description, methods}] = entry;
|
||||||
// inject tag name into method info
|
// inject tag name into method info
|
|
@ -1,6 +1,6 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
import { RedocComponent, BaseComponent } from '../base';
|
import { RedocComponent, BaseComponent, SchemaManager } from '../base';
|
||||||
import { JsonSchema } from '../JsonSchema/json-schema';
|
import { JsonSchema } from '../JsonSchema/json-schema';
|
||||||
import {JsonSchemaLazy} from '../JsonSchema/json-schema-lazy';
|
import {JsonSchemaLazy} from '../JsonSchema/json-schema-lazy';
|
||||||
|
|
||||||
|
@ -11,12 +11,15 @@ function safePush(obj, prop, item) {
|
||||||
|
|
||||||
@RedocComponent({
|
@RedocComponent({
|
||||||
selector: 'params-list',
|
selector: 'params-list',
|
||||||
templateUrl: './lib/components/ParamsList/params-list.html',
|
templateUrl: './params-list.html',
|
||||||
styleUrls: ['./lib/components/ParamsList/params-list.css'],
|
styleUrls: ['./params-list.css'],
|
||||||
directives: [JsonSchema, JsonSchemaLazy]
|
directives: [JsonSchema, JsonSchemaLazy]
|
||||||
})
|
})
|
||||||
export class ParamsList extends BaseComponent {
|
export class ParamsList extends BaseComponent {
|
||||||
constructor(schemaMgr) {
|
|
||||||
|
data:any;
|
||||||
|
|
||||||
|
constructor(schemaMgr:SchemaManager) {
|
||||||
super(schemaMgr);
|
super(schemaMgr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -62,7 +65,7 @@ export class ParamsList extends BaseComponent {
|
||||||
this.data.params = params;
|
this.data.params = params;
|
||||||
}
|
}
|
||||||
|
|
||||||
orderParams(params) {
|
orderParams(params):any {
|
||||||
let res = {};
|
let res = {};
|
||||||
params.forEach((param) => safePush(res, param.in, param));
|
params.forEach((param) => safePush(res, param.in, param));
|
||||||
return res;
|
return res;
|
|
@ -1,7 +1,7 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
import { getChildDebugElement } from 'tests/helpers';
|
import { getChildDebugElement } from '../../../tests/helpers';
|
||||||
import { Component, provide } from '@angular/core';
|
import { Component, provide, ComponentRef } from '@angular/core';
|
||||||
import { BrowserDomAdapter } from '@angular/platform-browser/src/browser/browser_adapter';
|
import { BrowserDomAdapter } from '@angular/platform-browser/src/browser/browser_adapter';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
|
@ -14,31 +14,35 @@ import {
|
||||||
|
|
||||||
import { TestComponentBuilder } from '@angular/compiler/testing';
|
import { TestComponentBuilder } from '@angular/compiler/testing';
|
||||||
|
|
||||||
import { Redoc } from 'lib/components/Redoc/redoc';
|
import { Redoc } from './redoc';
|
||||||
import SchemaManager from 'lib/utils/SchemaManager';
|
import { SchemaManager } from '../../utils/SchemaManager';
|
||||||
import { OptionsService } from 'lib/services/index';
|
import { OptionsService } from '../../services/index';
|
||||||
|
|
||||||
let optsMgr = new OptionsService(new BrowserDomAdapter());
|
let optsMgr:OptionsService;
|
||||||
|
|
||||||
describe('Redoc components', () => {
|
describe('Redoc components', () => {
|
||||||
describe('Redoc Component', () => {
|
describe('Redoc Component', () => {
|
||||||
let builder;
|
let builder;
|
||||||
|
let schemaMgr;
|
||||||
beforeEachProviders(() => [
|
beforeEachProviders(() => [
|
||||||
provide(SchemaManager, {useValue: new SchemaManager()}),
|
provide(SchemaManager, {useValue: new SchemaManager()}),
|
||||||
provide(BrowserDomAdapter, {useValue: new BrowserDomAdapter()}),
|
|
||||||
provide(OptionsService, {useValue: optsMgr})
|
|
||||||
]);
|
]);
|
||||||
beforeEachProviders(() => [
|
beforeEach(async(inject([TestComponentBuilder, SchemaManager, OptionsService],
|
||||||
provide(OptionsService, {useValue: optsMgr})
|
(tcb, _schemaMgr, _optsMgr) => {
|
||||||
]);
|
optsMgr = _optsMgr;
|
||||||
beforeEach(async(inject([TestComponentBuilder, SchemaManager], (tcb, schemaMgr) => {
|
|
||||||
builder = tcb;
|
builder = tcb;
|
||||||
return schemaMgr.load('/tests/schemas/extended-petstore.yml');
|
schemaMgr = _schemaMgr;
|
||||||
})));
|
})));
|
||||||
|
|
||||||
|
beforeEach((done) => {
|
||||||
|
return schemaMgr.load('/tests/schemas/extended-petstore.yml')
|
||||||
|
.then(() => done())
|
||||||
|
.catch(err => done.fail(err));
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
it('should init component', (done) => {
|
it('should init component', (done) => {
|
||||||
builder.createAsync(TestApp).then(fixture => {
|
builder.createAsync(TestAppComponent).then(fixture => {
|
||||||
let component = getChildDebugElement(fixture.debugElement, 'redoc').componentInstance;
|
let component = getChildDebugElement(fixture.debugElement, 'redoc').componentInstance;
|
||||||
expect(component).not.toBeNull();
|
expect(component).not.toBeNull();
|
||||||
fixture.destroy();
|
fixture.destroy();
|
||||||
|
@ -47,11 +51,13 @@ describe('Redoc components', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should init components tree without errors', (done) => {
|
it('should init components tree without errors', (done) => {
|
||||||
builder.createAsync(TestApp).then(fixture => {
|
builder.createAsync(TestAppComponent).then(fixture => {
|
||||||
(() => fixture.detectChanges()).should.not.throw();
|
(() => fixture.detectChanges()).should.not.throw();
|
||||||
fixture.destroy();
|
fixture.destroy();
|
||||||
done();
|
done();
|
||||||
}, err => done.fail(err));
|
}, err => {
|
||||||
|
return done.fail(err);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -110,11 +116,11 @@ describe('Redoc components', () => {
|
||||||
})));
|
})));
|
||||||
|
|
||||||
beforeEach((done) => {
|
beforeEach((done) => {
|
||||||
builder.createAsync(TestApp).then(_fixture => {
|
builder.createAsync(TestAppComponent).then(_fixture => {
|
||||||
fixture = _fixture;
|
fixture = _fixture;
|
||||||
element = getChildDebugElement(fixture.debugElement, 'methods-list').nativeElement;
|
element = getChildDebugElement(fixture.debugElement, 'methods-list').nativeElement;
|
||||||
destroySpy = jasmine.createSpy('spy');
|
destroySpy = jasmine.createSpy('spy');
|
||||||
Redoc.appRef = {
|
Redoc.appRef = <ComponentRef<any>>{
|
||||||
destroy: destroySpy
|
destroy: destroySpy
|
||||||
};
|
};
|
||||||
fixture.detectChanges();
|
fixture.detectChanges();
|
||||||
|
@ -148,7 +154,9 @@ describe('Redoc components', () => {
|
||||||
describe('Redoc autoInit', () => {
|
describe('Redoc autoInit', () => {
|
||||||
const testURL = 'testurl';
|
const testURL = 'testurl';
|
||||||
let dom = new BrowserDomAdapter();
|
let dom = new BrowserDomAdapter();
|
||||||
let elem;
|
//let redocInitSpy;
|
||||||
|
let elem: HTMLElement;
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
spyOn(Redoc, 'init').and.stub();
|
spyOn(Redoc, 'init').and.stub();
|
||||||
elem = dom.createElement('redoc');
|
elem = dom.createElement('redoc');
|
||||||
|
@ -159,7 +167,7 @@ describe('Redoc components', () => {
|
||||||
it('should call Redoc.init with url from param spec-url', () => {
|
it('should call Redoc.init with url from param spec-url', () => {
|
||||||
Redoc.autoInit();
|
Redoc.autoInit();
|
||||||
expect(Redoc.init).toHaveBeenCalled();
|
expect(Redoc.init).toHaveBeenCalled();
|
||||||
expect(Redoc.init.calls.argsFor(0)).toEqual([testURL]);
|
expect((<jasmine.Spy>Redoc.init).calls.argsFor(0)).toEqual([testURL]);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should not call Redoc.init when spec-url param is not provided', () => {
|
it('should not call Redoc.init when spec-url param is not provided', () => {
|
||||||
|
@ -169,7 +177,7 @@ describe('Redoc components', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
afterEach(() => {
|
afterEach(() => {
|
||||||
Redoc.init.and.callThrough();
|
(<jasmine.Spy>Redoc.init).and.callThrough();
|
||||||
dom.defaultDoc().body.removeChild(elem);
|
dom.defaultDoc().body.removeChild(elem);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -182,5 +190,5 @@ describe('Redoc components', () => {
|
||||||
template:
|
template:
|
||||||
`<redoc disable-lazy-schemas></redoc>`
|
`<redoc disable-lazy-schemas></redoc>`
|
||||||
})
|
})
|
||||||
class TestApp {
|
class TestAppComponent {
|
||||||
}
|
}
|
|
@ -1,6 +1,7 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
import { provide, enableProdMode, ElementRef } from '@angular/core';
|
import { provide, enableProdMode, ElementRef,
|
||||||
|
ComponentRef, AfterViewInit } from '@angular/core';
|
||||||
import { bootstrap } from '@angular/platform-browser-dynamic';
|
import { bootstrap } from '@angular/platform-browser-dynamic';
|
||||||
import { BrowserDomAdapter } from '@angular/platform-browser/src/browser/browser_adapter';
|
import { BrowserDomAdapter } from '@angular/platform-browser/src/browser/browser_adapter';
|
||||||
import { RedocComponent, BaseComponent } from '../base';
|
import { RedocComponent, BaseComponent } from '../base';
|
||||||
|
@ -13,12 +14,9 @@ import { MethodsList } from '../MethodsList/methods-list';
|
||||||
import { SideMenu } from '../SideMenu/side-menu';
|
import { SideMenu } from '../SideMenu/side-menu';
|
||||||
|
|
||||||
import { StickySidebar } from '../../shared/components/index';
|
import { StickySidebar } from '../../shared/components/index';
|
||||||
import SchemaManager from '../../utils/SchemaManager';
|
import {SchemaManager} from '../../utils/SchemaManager';
|
||||||
import { OptionsService, RedocEventsService } from '../../services/index';
|
import { OptionsService, RedocEventsService } from '../../services/index';
|
||||||
import redocVersion from '../../version.json!json';
|
//import redocVersion from '../../version.js';
|
||||||
|
|
||||||
|
|
||||||
import './redoc-initial-styles.css!css';
|
|
||||||
|
|
||||||
var dom = new BrowserDomAdapter();
|
var dom = new BrowserDomAdapter();
|
||||||
var _modeLocked = false;
|
var _modeLocked = false;
|
||||||
|
@ -30,30 +28,18 @@ var _modeLocked = false;
|
||||||
BrowserDomAdapter,
|
BrowserDomAdapter,
|
||||||
RedocEventsService
|
RedocEventsService
|
||||||
],
|
],
|
||||||
templateUrl: './lib/components/Redoc/redoc.html',
|
templateUrl: './redoc.html',
|
||||||
styleUrls: ['./lib/components/Redoc/redoc.css'],
|
styleUrls: ['./redoc.css'],
|
||||||
directives: [ ApiInfo, ApiLogo, MethodsList, SideMenu, StickySidebar ],
|
directives: [ ApiInfo, ApiLogo, MethodsList, SideMenu, StickySidebar ],
|
||||||
detect: true,
|
detect: true,
|
||||||
onPushOnly: false
|
onPushOnly: false
|
||||||
})
|
})
|
||||||
@Reflect.metadata('parameters', [
|
export class Redoc extends BaseComponent implements AfterViewInit {
|
||||||
[SchemaManager], [OptionsService], [ElementRef], [RedocEventsService]])
|
static appRef: ComponentRef<any>;
|
||||||
export class Redoc extends BaseComponent {
|
|
||||||
constructor(schemaMgr, optionsMgr, elementRef, events) {
|
|
||||||
super(schemaMgr);
|
|
||||||
this.element = elementRef.nativeElement;
|
|
||||||
//parse options (top level component doesn't support inputs)
|
|
||||||
optionsMgr.parseOptions( this.element );
|
|
||||||
optionsMgr.options.$scrollParent = detectScollParent( this.element );
|
|
||||||
this.options = optionsMgr.options;
|
|
||||||
this.events = events;
|
|
||||||
}
|
|
||||||
|
|
||||||
ngAfterViewInit() {
|
options: any;
|
||||||
setTimeout( () => {
|
|
||||||
this.events.bootstrapped.next();
|
private element: any;
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
static showLoadingAnimation() {
|
static showLoadingAnimation() {
|
||||||
let elem = dom.query('redoc');
|
let elem = dom.query('redoc');
|
||||||
|
@ -69,7 +55,7 @@ export class Redoc extends BaseComponent {
|
||||||
}, 400);
|
}, 400);
|
||||||
}
|
}
|
||||||
|
|
||||||
static init(specUrl, options) {
|
static init(specUrl?, options?) {
|
||||||
var optionsService = new OptionsService(dom);
|
var optionsService = new OptionsService(dom);
|
||||||
optionsService.options = options;
|
optionsService.options = options;
|
||||||
optionsService.options.specUrl = optionsService.options.specUrl || specUrl;
|
optionsService.options.specUrl = optionsService.options.specUrl || specUrl;
|
||||||
|
@ -121,9 +107,9 @@ export class Redoc extends BaseComponent {
|
||||||
redocEl.innerHTML = erroHtml;
|
redocEl.innerHTML = erroHtml;
|
||||||
}
|
}
|
||||||
|
|
||||||
static get version() {
|
// static get version() {
|
||||||
return redocVersion;
|
// return redocVersion;
|
||||||
}
|
// }
|
||||||
|
|
||||||
static destroy() {
|
static destroy() {
|
||||||
let el = dom.query('redoc');
|
let el = dom.query('redoc');
|
||||||
|
@ -143,7 +129,24 @@ export class Redoc extends BaseComponent {
|
||||||
|
|
||||||
// Redoc destroy removes host element, so need to restore it
|
// Redoc destroy removes host element, so need to restore it
|
||||||
elClone.innerHTML = 'Loading...';
|
elClone.innerHTML = 'Loading...';
|
||||||
parent && parent.insertBefore(elClone, nextSibling);
|
if (parent) parent.insertBefore(elClone, nextSibling);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
constructor(schemaMgr: SchemaManager, optionsMgr:OptionsService, elementRef:ElementRef,
|
||||||
|
public events:RedocEventsService) {
|
||||||
|
super(schemaMgr);
|
||||||
|
this.element = elementRef.nativeElement;
|
||||||
|
//parse options (top level component doesn't support inputs)
|
||||||
|
optionsMgr.parseOptions( this.element );
|
||||||
|
optionsMgr.options.$scrollParent = detectScollParent( this.element );
|
||||||
|
this.options = optionsMgr.options;
|
||||||
|
this.events = events;
|
||||||
|
}
|
||||||
|
|
||||||
|
ngAfterViewInit() {
|
||||||
|
setTimeout( () => {
|
||||||
|
this.events.bootstrapped.next({});
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -1,8 +1,8 @@
|
||||||
<header *ngIf="data.schemaPointer || data.samples.length"> Request samples </header>
|
<header *ngIf="data.schemaPointer || data.samples.length"> Request samples </header>
|
||||||
<schema-sample *ngIf="!data.samples.length" [pointer]="data.schemaPointer"> </schema-sample>
|
<schema-sample *ngIf="!data.samples.length" [skipReadOnly]="true" [pointer]="data.schemaPointer"> </schema-sample>
|
||||||
<tabs *ngIf="data.samples.length" [selected] = "selectedLang" (change)=changeLangNotify($event)>
|
<tabs *ngIf="data.samples.length" [selected] = "selectedLang" (change)=changeLangNotify($event)>
|
||||||
<tab tabTitle="JSON">
|
<tab tabTitle="JSON">
|
||||||
<schema-sample [pointer]="data.schemaPointer"> </schema-sample>
|
<schema-sample [pointer]="data.schemaPointer" [skipReadOnly]="true"> </schema-sample>
|
||||||
</tab>
|
</tab>
|
||||||
<tab *ngFor="let sample of data.samples" [tabTitle]="sample.lang">
|
<tab *ngFor="let sample of data.samples" [tabTitle]="sample.lang">
|
||||||
<pre innerHtml="{{sample.source | prism:sample.lang}}"></pre>
|
<pre innerHtml="{{sample.source | prism:sample.lang}}"></pre>
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
import { ViewChildren, QueryList } from '@angular/core';
|
import { ViewChildren, QueryList, EventEmitter, Input} from '@angular/core';
|
||||||
|
|
||||||
import { RedocComponent, BaseComponent, SchemaManager } from '../base';
|
import { RedocComponent, BaseComponent, SchemaManager } from '../base';
|
||||||
import JsonPointer from '../../utils/JsonPointer';
|
import JsonPointer from '../../utils/JsonPointer';
|
||||||
|
@ -11,22 +11,23 @@ import { RedocEventsService } from '../../services/index';
|
||||||
|
|
||||||
@RedocComponent({
|
@RedocComponent({
|
||||||
selector: 'request-samples',
|
selector: 'request-samples',
|
||||||
templateUrl: './lib/components/RequestSamples/request-samples.html',
|
templateUrl: './request-samples.html',
|
||||||
styleUrls: ['./lib/components/RequestSamples/request-samples.css'],
|
styleUrls: ['./request-samples.css'],
|
||||||
directives: [SchemaSample, Tabs, Tab],
|
directives: [SchemaSample, Tabs, Tab],
|
||||||
inputs: ['schemaPointer'],
|
inputs: ['schemaPointer'],
|
||||||
pipes: [PrismPipe],
|
pipes: [PrismPipe],
|
||||||
detect: true,
|
detect: true,
|
||||||
onPushOnly: false
|
onPushOnly: false
|
||||||
})
|
})
|
||||||
@Reflect.metadata('parameters', [[SchemaManager], [RedocEventsService], [new ViewChildren(Tabs), QueryList]])
|
|
||||||
export class RequestSamples extends BaseComponent {
|
export class RequestSamples extends BaseComponent {
|
||||||
constructor(schemaMgr, events, childQuery) {
|
childTabs: Tabs;
|
||||||
|
selectedLang: EventEmitter<any>;
|
||||||
|
data: any;
|
||||||
|
@Input() schemaPointer:string;
|
||||||
|
@ViewChildren(Tabs) childQuery:QueryList<Tabs>;
|
||||||
|
constructor(schemaMgr:SchemaManager, public events:RedocEventsService) {
|
||||||
super(schemaMgr);
|
super(schemaMgr);
|
||||||
childQuery.changes.subscribe(() => {
|
|
||||||
this.childTabs = childQuery.first;
|
|
||||||
});
|
|
||||||
this.events = events;
|
|
||||||
this.selectedLang = this.events.samplesLanguageChanged;
|
this.selectedLang = this.events.samplesLanguageChanged;
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,14 +14,15 @@ function isNumeric(n) {
|
||||||
|
|
||||||
@RedocComponent({
|
@RedocComponent({
|
||||||
selector: 'responses-list',
|
selector: 'responses-list',
|
||||||
templateUrl: './lib/components/ResponsesList/responses-list.html',
|
templateUrl: './responses-list.html',
|
||||||
styleUrls: ['./lib/components/ResponsesList/responses-list.css'],
|
styleUrls: ['./responses-list.css'],
|
||||||
directives: [JsonSchema, Zippy, JsonSchemaLazy],
|
directives: [JsonSchema, Zippy, JsonSchemaLazy],
|
||||||
detect: true
|
detect: true
|
||||||
})
|
})
|
||||||
@Reflect.metadata('parameters', [[SchemaManager], [OptionsService]])
|
|
||||||
export class ResponsesList extends BaseComponent {
|
export class ResponsesList extends BaseComponent {
|
||||||
constructor(schemaMgr, optionsMgr) {
|
data: any;
|
||||||
|
options: any;
|
||||||
|
constructor(schemaMgr:SchemaManager, optionsMgr:OptionsService) {
|
||||||
super(schemaMgr);
|
super(schemaMgr);
|
||||||
this.options = optionsMgr.options;
|
this.options = optionsMgr.options;
|
||||||
}
|
}
|
|
@ -1,7 +1,7 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
import { forwardRef } from '@angular/core';
|
import { forwardRef } from '@angular/core';
|
||||||
import { RedocComponent, BaseComponent } from '../base';
|
import { RedocComponent, BaseComponent, SchemaManager } from '../base';
|
||||||
import JsonPointer from '../../utils/JsonPointer';
|
import JsonPointer from '../../utils/JsonPointer';
|
||||||
import { Tabs, Tab } from '../../shared/components/index';
|
import { Tabs, Tab } from '../../shared/components/index';
|
||||||
import { SchemaSample } from '../index';
|
import { SchemaSample } from '../index';
|
||||||
|
@ -19,12 +19,13 @@ function hasExample(response) {
|
||||||
|
|
||||||
@RedocComponent({
|
@RedocComponent({
|
||||||
selector: 'responses-samples',
|
selector: 'responses-samples',
|
||||||
templateUrl: './lib/components/ResponsesSamples/responses-samples.html',
|
templateUrl: './responses-samples.html',
|
||||||
styleUrls: ['./lib/components/ResponsesSamples/responses-samples.css'],
|
styleUrls: ['./responses-samples.css'],
|
||||||
directives: [forwardRef( ()=> SchemaSample), Tabs, Tab]
|
directives: [forwardRef( ()=> SchemaSample), Tabs, Tab]
|
||||||
})
|
})
|
||||||
export class ResponsesSamples extends BaseComponent {
|
export class ResponsesSamples extends BaseComponent {
|
||||||
constructor(schemaMgr) {
|
data: any;
|
||||||
|
constructor(schemaMgr:SchemaManager) {
|
||||||
super(schemaMgr);
|
super(schemaMgr);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<div class="snippet">
|
<div class="snippet">
|
||||||
<!-- in case sample is not available for some reason -->
|
<!-- in case sample is not available for some reason -->
|
||||||
<pre *ngIf="data.sample == null"> Sample unavailable </pre>
|
<pre *ngIf="data.sample == undefined"> Sample unavailable </pre>
|
||||||
<pre innerHtml="{{data.sample | jsonFormatter}}"></pre>
|
<pre innerHtml="{{data.sample | jsonFormatter}}"></pre>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
import { ElementRef } from '@angular/core';
|
import { ElementRef, Input } from '@angular/core';
|
||||||
|
|
||||||
import * as OpenAPISampler from 'openapi-sampler';
|
import * as OpenAPISampler from 'openapi-sampler';
|
||||||
|
|
||||||
|
@ -9,13 +9,15 @@ import { JsonFormatter } from '../../utils/JsonFormatterPipe';
|
||||||
|
|
||||||
@RedocComponent({
|
@RedocComponent({
|
||||||
selector: 'schema-sample',
|
selector: 'schema-sample',
|
||||||
templateUrl: './lib/components/SchemaSample/schema-sample.html',
|
templateUrl: './schema-sample.html',
|
||||||
pipes: [JsonFormatter],
|
pipes: [JsonFormatter],
|
||||||
styleUrls: ['./lib/components/SchemaSample/schema-sample.css']
|
styleUrls: ['./schema-sample.css']
|
||||||
})
|
})
|
||||||
@Reflect.metadata('parameters', [[SchemaManager], [ElementRef]])
|
|
||||||
export class SchemaSample extends BaseComponent {
|
export class SchemaSample extends BaseComponent {
|
||||||
constructor(schemaMgr, elementRef) {
|
element: any;
|
||||||
|
data: any;
|
||||||
|
@Input() skipReadOnly:boolean;
|
||||||
|
constructor(schemaMgr:SchemaManager, elementRef:ElementRef) {
|
||||||
super(schemaMgr);
|
super(schemaMgr);
|
||||||
this.element = elementRef.nativeElement;
|
this.element = elementRef.nativeElement;
|
||||||
}
|
}
|
||||||
|
@ -23,7 +25,7 @@ export class SchemaSample extends BaseComponent {
|
||||||
init() {
|
init() {
|
||||||
this.data = {};
|
this.data = {};
|
||||||
|
|
||||||
let base = {};
|
let base:any = {};
|
||||||
let sample;
|
let sample;
|
||||||
|
|
||||||
// got pointer not directly to the schema but e.g. to response obj
|
// got pointer not directly to the schema but e.g. to response obj
|
||||||
|
@ -37,9 +39,11 @@ export class SchemaSample extends BaseComponent {
|
||||||
} else {
|
} else {
|
||||||
this.dereference(this.componentSchema);
|
this.dereference(this.componentSchema);
|
||||||
try {
|
try {
|
||||||
sample = OpenAPISampler.sample(this.componentSchema);
|
sample = OpenAPISampler.sample(this.componentSchema, {
|
||||||
|
skipReadOnly: this.skipReadOnly
|
||||||
|
});
|
||||||
} catch(e) {
|
} catch(e) {
|
||||||
console.error('@@@@@@@@@@@@@@@@@@@' + e);
|
// no sample available
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,9 +1,8 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
import { getChildDebugElement } from 'tests/helpers';
|
import { getChildDebugElement } from '../../../tests/helpers';
|
||||||
import { Component, provide } from '@angular/core';
|
import { Component, provide } from '@angular/core';
|
||||||
import { BrowserDomAdapter } from '@angular/platform-browser/src/browser/browser_adapter';
|
import { OptionsService } from '../../services/index';
|
||||||
import { OptionsService, RedocEventsService } from 'lib/services/index';
|
|
||||||
|
|
||||||
import {
|
import {
|
||||||
inject,
|
inject,
|
||||||
|
@ -15,17 +14,11 @@ import {
|
||||||
|
|
||||||
import { TestComponentBuilder } from '@angular/compiler/testing';
|
import { TestComponentBuilder } from '@angular/compiler/testing';
|
||||||
|
|
||||||
import { MethodsList, SideMenu } from 'lib/components/index';
|
import { MethodsList, SideMenu } from '../index';
|
||||||
|
|
||||||
import SchemaManager from 'lib/utils/SchemaManager';
|
import { SchemaManager } from '../../utils/SchemaManager';;
|
||||||
|
|
||||||
let testOptions = new OptionsService();
|
let testOptions;
|
||||||
testOptions.options = {
|
|
||||||
scrollYOffset: () => 0,
|
|
||||||
scrollParent: window
|
|
||||||
};
|
|
||||||
|
|
||||||
let redocEvents = new RedocEventsService();
|
|
||||||
|
|
||||||
describe('Redoc components', () => {
|
describe('Redoc components', () => {
|
||||||
describe('SideMenu Component', () => {
|
describe('SideMenu Component', () => {
|
||||||
|
@ -33,18 +26,21 @@ describe('Redoc components', () => {
|
||||||
let component;
|
let component;
|
||||||
let fixture;
|
let fixture;
|
||||||
beforeEachProviders(() => [
|
beforeEachProviders(() => [
|
||||||
provide(SchemaManager, {useValue: new SchemaManager()}),
|
provide(SchemaManager, {useValue: new SchemaManager()})
|
||||||
provide(BrowserDomAdapter, {useValue: new BrowserDomAdapter()}),
|
|
||||||
provide(OptionsService, {useValue: testOptions}),
|
|
||||||
provide(RedocEventsService, {useValue: redocEvents})
|
|
||||||
]);
|
]);
|
||||||
beforeEach(async(inject([TestComponentBuilder, SchemaManager], (tcb, schemaMgr) => {
|
beforeEach(async(inject([TestComponentBuilder, SchemaManager, OptionsService],
|
||||||
|
(tcb, schemaMgr, opts) => {
|
||||||
builder = tcb;
|
builder = tcb;
|
||||||
|
testOptions = opts;
|
||||||
|
testOptions.options = {
|
||||||
|
scrollYOffset: () => 0,
|
||||||
|
scrollParent: window
|
||||||
|
};
|
||||||
return schemaMgr.load('/tests/schemas/extended-petstore.yml');
|
return schemaMgr.load('/tests/schemas/extended-petstore.yml');
|
||||||
})));
|
})));
|
||||||
|
|
||||||
beforeEach((done) => {
|
beforeEach((done) => {
|
||||||
builder.createAsync(TestApp).then(_fixture => {
|
builder.createAsync(TestAppComponent).then(_fixture => {
|
||||||
fixture = _fixture;
|
fixture = _fixture;
|
||||||
component = getChildDebugElement(fixture.debugElement, 'side-menu').componentInstance;
|
component = getChildDebugElement(fixture.debugElement, 'side-menu').componentInstance;
|
||||||
fixture.detectChanges();
|
fixture.detectChanges();
|
||||||
|
@ -73,5 +69,5 @@ describe('Redoc components', () => {
|
||||||
`<side-menu></side-menu>
|
`<side-menu></side-menu>
|
||||||
<methods-list></methods-list>`
|
<methods-list></methods-list>`
|
||||||
})
|
})
|
||||||
class TestApp {
|
class TestAppComponent {
|
||||||
}
|
}
|
|
@ -9,29 +9,31 @@ import { ScrollService, Hash, MenuService, OptionsService } from '../../services
|
||||||
|
|
||||||
@RedocComponent({
|
@RedocComponent({
|
||||||
selector: 'side-menu',
|
selector: 'side-menu',
|
||||||
templateUrl: './lib/components/SideMenu/side-menu.html',
|
templateUrl: './side-menu.html',
|
||||||
providers: [ScrollService, MenuService, Hash],
|
providers: [ScrollService, MenuService, Hash],
|
||||||
styleUrls: ['./lib/components/SideMenu/side-menu.css'],
|
styleUrls: ['./side-menu.css'],
|
||||||
detect: true,
|
detect: true,
|
||||||
onPushOnly: false
|
onPushOnly: false
|
||||||
})
|
})
|
||||||
@Reflect.metadata('parameters', [[SchemaManager], [ElementRef], [BrowserDomAdapter],
|
|
||||||
[ScrollService], [MenuService], [Hash], [OptionsService], [ChangeDetectorRef]])
|
|
||||||
export class SideMenu extends BaseComponent {
|
export class SideMenu extends BaseComponent {
|
||||||
constructor(schemaMgr, elementRef, dom, scrollService,
|
$element: any;
|
||||||
menuService, hash, optionsService, detectorRef) {
|
$mobileNav: any;
|
||||||
|
$resourcesNav: any;
|
||||||
|
$scrollParent: any;
|
||||||
|
activeCatCaption: string;
|
||||||
|
activeItemCaption: string;
|
||||||
|
options: any;
|
||||||
|
data: any;
|
||||||
|
constructor(schemaMgr:SchemaManager, elementRef:ElementRef, private dom:BrowserDomAdapter,
|
||||||
|
private scrollService:ScrollService, private menuService:MenuService, private hash:Hash,
|
||||||
|
optionsService:OptionsService, private detectorRef:ChangeDetectorRef) {
|
||||||
super(schemaMgr);
|
super(schemaMgr);
|
||||||
this.$element = elementRef.nativeElement;
|
this.$element = elementRef.nativeElement;
|
||||||
this.dom = dom;
|
|
||||||
this.scrollService = scrollService;
|
|
||||||
this.menuService = menuService;
|
|
||||||
this.hash = hash;
|
|
||||||
|
|
||||||
this.activeCatCaption = '';
|
this.activeCatCaption = '';
|
||||||
this.activeItemCaption = '';
|
this.activeItemCaption = '';
|
||||||
|
|
||||||
this.options = optionsService.options;
|
this.options = optionsService.options;
|
||||||
this.detectorRef = detectorRef;
|
|
||||||
|
|
||||||
this.menuService.changed.subscribe((evt) => this.changed(evt));
|
this.menuService.changed.subscribe((evt) => this.changed(evt));
|
||||||
}
|
}
|
|
@ -1,7 +1,7 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
import SchemaManager from 'lib/utils/SchemaManager';
|
import { SchemaManager } from '../utils/SchemaManager';
|
||||||
import { BaseComponent } from 'lib/components/base';
|
import { BaseComponent } from '../components/base';
|
||||||
|
|
||||||
describe('Redoc components', () => {
|
describe('Redoc components', () => {
|
||||||
describe('BaseComponent', () => {
|
describe('BaseComponent', () => {
|
||||||
|
@ -30,11 +30,14 @@ describe('Redoc components', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should call prepareModel and init virtual methods after init', () => {
|
it('should call prepareModel and init virtual methods after init', () => {
|
||||||
sinon.spy(component, 'prepareModel');
|
spyOn(component, 'prepareModel');
|
||||||
sinon.spy(component, 'init');
|
spyOn(component, 'init');
|
||||||
component.ngOnInit();
|
component.ngOnInit();
|
||||||
component.prepareModel.calledOnce.should.be.true;
|
|
||||||
component.init.calledOnce.should.be.true;
|
component.prepareModel.calls.count().should.be.equal(1);
|
||||||
|
component.init.calls.count().should.be.equal(1);
|
||||||
|
component.prepareModel.and.callThrough();
|
||||||
|
component.init.and.callThrough();
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('dereference', () => {
|
describe('dereference', () => {
|
||||||
|
@ -281,6 +284,7 @@ describe('Redoc components', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
xdescribe('Merge array allOf', () => {
|
xdescribe('Merge array allOf', () => {
|
||||||
|
//emtpy
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
|
@ -1,7 +1,7 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
import { Component, ChangeDetectionStrategy } from '@angular/core';
|
import { Component, ChangeDetectionStrategy, OnInit, OnDestroy } from '@angular/core';
|
||||||
import { CORE_DIRECTIVES, JsonPipe, AsyncPipe } from '@angular/common';
|
import { CORE_DIRECTIVES, JsonPipe, AsyncPipe } from '@angular/common';
|
||||||
import SchemaManager from '../utils/SchemaManager';
|
import { SchemaManager } from '../utils/SchemaManager';
|
||||||
import JsonPointer from '../utils/JsonPointer';
|
import JsonPointer from '../utils/JsonPointer';
|
||||||
import { MarkedPipe, JsonPointerEscapePipe } from '../utils/pipes';
|
import { MarkedPipe, JsonPointerEscapePipe } from '../utils/pipes';
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@ let commonInputs = ['pointer']; // json pointer to the schema chunk
|
||||||
// internal helper function
|
// internal helper function
|
||||||
function safeConcat(a, b) {
|
function safeConcat(a, b) {
|
||||||
let res = a && a.slice() || [];
|
let res = a && a.slice() || [];
|
||||||
b = (b == null) ? [] : b;
|
b = (b == undefined) ? [] : b;
|
||||||
return res.concat(b);
|
return res.concat(b);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -33,7 +33,7 @@ function defaults(target, src) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function snapshot(obj) {
|
function snapshot(obj) {
|
||||||
if(obj == null || typeof(obj) != 'object') {
|
if(obj == undefined || typeof(obj) !== 'object') {
|
||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -94,11 +94,74 @@ export function RedocComponent(options) {
|
||||||
* Generic Component
|
* Generic Component
|
||||||
* @class
|
* @class
|
||||||
*/
|
*/
|
||||||
@Reflect.metadata('parameters', [[SchemaManager]])
|
export class BaseComponent implements OnInit, OnDestroy {
|
||||||
export class BaseComponent {
|
componentSchema: any = null;
|
||||||
constructor(schemaMgr) {
|
pointer: String;
|
||||||
this.schemaMgr = schemaMgr;
|
|
||||||
this.componentSchema = null;
|
static joinAllOf(schema: any, opts?: any) {
|
||||||
|
function merge(into, schemas) {
|
||||||
|
for (let subSchema of schemas) {
|
||||||
|
if (opts && opts.omitParent && subSchema.discriminator) continue;
|
||||||
|
// TODO: add support for merge array schemas
|
||||||
|
if (typeof subSchema !== 'object') {
|
||||||
|
let errMessage = `Items of allOf should be Object: ${typeof subSchema} found
|
||||||
|
${subSchema}`;
|
||||||
|
throw new Error(errMessage);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (into.type && subSchema.type && into.type !== subSchema.type) {
|
||||||
|
let errMessage = `allOf merging error: schemas with different types can't be merged`;
|
||||||
|
throw new Error(errMessage);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (into.type === 'array') {
|
||||||
|
console.warn('allOf: subschemas with type array are not supported yet');
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: add check if can be merged correctly (no different properties with the same name)
|
||||||
|
into.type = into.type || subSchema.type;
|
||||||
|
if (into.type === 'object' && subSchema.properties) {
|
||||||
|
if (!into.properties) into.properties = {};
|
||||||
|
Object.assign(into.properties, subSchema.properties);
|
||||||
|
Object.keys(subSchema.properties).forEach(propName => {
|
||||||
|
if (!subSchema.properties[propName]._pointer) {
|
||||||
|
subSchema.properties[propName]._pointer = subSchema._pointer ?
|
||||||
|
JsonPointer.join(subSchema._pointer, ['properties', propName]) : null;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (into.type === 'object' && subSchema.required) {
|
||||||
|
if (!into.required) into.required = [];
|
||||||
|
into.required.push(...subSchema.required);
|
||||||
|
}
|
||||||
|
// don't merge _pointer
|
||||||
|
subSchema._pointer = null;
|
||||||
|
defaults(into, subSchema);
|
||||||
|
}
|
||||||
|
into.allOf = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
function traverse(obj) {
|
||||||
|
if (obj == undefined || typeof(obj) !== 'object') {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for(var key in obj) {
|
||||||
|
if (obj.hasOwnProperty(key)) {
|
||||||
|
traverse(obj[key]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (obj.allOf) {
|
||||||
|
merge(obj, obj.allOf);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
traverse(schema);
|
||||||
|
}
|
||||||
|
|
||||||
|
constructor(public schemaMgr: SchemaManager) {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -166,87 +229,30 @@ export class BaseComponent {
|
||||||
return schema;
|
return schema;
|
||||||
};
|
};
|
||||||
|
|
||||||
this.componentSchema = snapshot(resolve(schema, 1));
|
this.componentSchema = snapshot(resolve(schema));
|
||||||
}
|
|
||||||
|
|
||||||
static joinAllOf(schema, opts) {
|
|
||||||
function merge(into, schemas) {
|
|
||||||
for (let subSchema of schemas) {
|
|
||||||
if (opts && opts.omitParent && subSchema.discriminator) continue;
|
|
||||||
// TODO: add support for merge array schemas
|
|
||||||
if (typeof subSchema !== 'object') {
|
|
||||||
let errMessage = `Items of allOf should be Object: ${typeof subSchema} found
|
|
||||||
${subSchema}`;
|
|
||||||
throw new Error(errMessage);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (into.type && subSchema.type && into.type !== subSchema.type) {
|
|
||||||
let errMessage = `allOf merging error: schemas with different types can't be merged`;
|
|
||||||
throw new Error(errMessage);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (into.type === 'array') {
|
|
||||||
console.warn('allOf: subschemas with type array are not supported yet');
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: add check if can be merged correctly (no different properties with the same name)
|
|
||||||
into.type = into.type || subSchema.type;
|
|
||||||
if (into.type === 'object' && subSchema.properties) {
|
|
||||||
into.properties || (into.properties = {});
|
|
||||||
Object.assign(into.properties, subSchema.properties);
|
|
||||||
Object.keys(subSchema.properties).forEach(propName => {
|
|
||||||
if (!subSchema.properties[propName]._pointer) {
|
|
||||||
subSchema.properties[propName]._pointer = subSchema._pointer ?
|
|
||||||
JsonPointer.join(subSchema._pointer, ['properties', propName]) : null;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
if (into.type === 'object' && subSchema.required) {
|
|
||||||
into.required || (into.required = []);
|
|
||||||
into.required.push(...subSchema.required);
|
|
||||||
}
|
|
||||||
// don't merge _pointer
|
|
||||||
subSchema._pointer = null;
|
|
||||||
defaults(into, subSchema);
|
|
||||||
}
|
|
||||||
into.allOf = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
function traverse(obj) {
|
|
||||||
if (obj === null || typeof(obj) !== 'object') {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
for(var key in obj) {
|
|
||||||
if (obj.hasOwnProperty(key)) {
|
|
||||||
traverse(obj[key]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (obj.allOf) {
|
|
||||||
merge(obj, obj.allOf);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
traverse(schema);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Used to prepare model based on component schema
|
* Used to prepare model based on component schema
|
||||||
* @abstract
|
* @abstract
|
||||||
*/
|
*/
|
||||||
prepareModel() {}
|
prepareModel():any {
|
||||||
|
// emtpy
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Used to initialize component. Run after prepareModel
|
* Used to initialize component. Run after prepareModel
|
||||||
* @abstract
|
* @abstract
|
||||||
*/
|
*/
|
||||||
init() {}
|
init() {
|
||||||
|
// empty
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
+ Used to destroy component
|
+ Used to destroy component
|
||||||
* @abstract
|
* @abstract
|
||||||
*/
|
*/
|
||||||
destroy() {}
|
destroy() {
|
||||||
|
// emtpy
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -1,7 +1,12 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
import 'dropkickjs/build/css/dropkick.css!css';
|
||||||
|
import 'prismjs/themes/prism-dark.css!css';
|
||||||
|
import 'hint.css/hint.base.css!css';
|
||||||
|
import './components/Redoc/redoc-initial-styles.css!css';
|
||||||
|
|
||||||
|
import { Redoc } from './components/index';
|
||||||
|
|
||||||
import {Redoc} from './components/index';
|
|
||||||
export var init = Redoc.init;
|
export var init = Redoc.init;
|
||||||
|
|
||||||
window.Redoc = Redoc;
|
window['Redoc'] = Redoc;
|
||||||
Redoc.autoInit();
|
Redoc.autoInit();
|
||||||
|
|
|
@ -1,10 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
import { EventEmitter } from '@angular/core';
|
|
||||||
|
|
||||||
export class RedocEventsService {
|
|
||||||
constructor() {
|
|
||||||
this.bootstrapped = new EventEmitter();
|
|
||||||
this.samplesLanguageChanged = new EventEmitter();
|
|
||||||
}
|
|
||||||
}
|
|
8
lib/services/events.service.ts
Normal file
8
lib/services/events.service.ts
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
import { EventEmitter, Output } from '@angular/core';
|
||||||
|
|
||||||
|
export class RedocEventsService {
|
||||||
|
@Output() bootstrapped = new EventEmitter();
|
||||||
|
@Output() samplesLanguageChanged = new EventEmitter();
|
||||||
|
}
|
|
@ -19,7 +19,7 @@ describe('Hash Service', () => {
|
||||||
|
|
||||||
it('should trigger changed event after ReDoc bootstrapped', (done) => {
|
it('should trigger changed event after ReDoc bootstrapped', (done) => {
|
||||||
spyOn(hashService.changed, 'next').and.callThrough();
|
spyOn(hashService.changed, 'next').and.callThrough();
|
||||||
events.bootstrapped.next();
|
events.bootstrapped.next({});
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
expect(hashService.changed.next).toHaveBeenCalled();
|
expect(hashService.changed.next).toHaveBeenCalled();
|
||||||
done();
|
done();
|
|
@ -1,16 +1,15 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
import { Injectable, EventEmitter } from '@angular/core';
|
import { Injectable, EventEmitter, Output } from '@angular/core';
|
||||||
import { BrowserDomAdapter } from '@angular/platform-browser/src/browser/browser_adapter';
|
import { BrowserDomAdapter } from '@angular/platform-browser/src/browser/browser_adapter';
|
||||||
import { global } from '@angular/core/src/facade/lang';
|
import { global } from '@angular/core/src/facade/lang';
|
||||||
|
|
||||||
import { RedocEventsService } from './events.service';
|
import { RedocEventsService } from './events.service';
|
||||||
|
|
||||||
@Reflect.metadata('parameters', [[BrowserDomAdapter], [RedocEventsService]])
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class Hash {
|
export class Hash {
|
||||||
constructor(dom, events) {
|
@Output() changed = new EventEmitter();
|
||||||
this.changed = new EventEmitter();
|
private _cancel: any;
|
||||||
this.dom = dom;
|
constructor(private dom:BrowserDomAdapter, private events:RedocEventsService) {
|
||||||
this.bind();
|
this.bind();
|
||||||
|
|
||||||
events.bootstrapped.subscribe(() => this.changed.next(this.hash));
|
events.bootstrapped.subscribe(() => this.changed.next(this.hash));
|
|
@ -1,7 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
export * from './events.service.js';
|
|
||||||
export * from './options.service.js';
|
|
||||||
export * from './menu.service.js';
|
|
||||||
export * from './scroll.service.js';
|
|
||||||
export * from './hash.service.js';
|
|
7
lib/services/index.ts
Normal file
7
lib/services/index.ts
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
export * from './events.service';
|
||||||
|
export * from './options.service';
|
||||||
|
export * from './menu.service';
|
||||||
|
export * from './scroll.service';
|
||||||
|
export * from './hash.service';
|
|
@ -16,8 +16,8 @@ import { MenuService } from './menu.service';
|
||||||
import { Hash } from './hash.service';
|
import { Hash } from './hash.service';
|
||||||
import { ScrollService } from './scroll.service';
|
import { ScrollService } from './scroll.service';
|
||||||
import { RedocEventsService } from './events.service';
|
import { RedocEventsService } from './events.service';
|
||||||
import { MethodsList } from 'lib/components/index';
|
import { MethodsList } from '../components/index';
|
||||||
import SchemaManager from 'lib/utils/SchemaManager';
|
import { SchemaManager } from '../utils/SchemaManager';;
|
||||||
|
|
||||||
describe('Menu service', () => {
|
describe('Menu service', () => {
|
||||||
let menu, hashService, scroll;
|
let menu, hashService, scroll;
|
||||||
|
@ -50,7 +50,7 @@ describe('Menu service', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
beforeEach((done) => {
|
beforeEach((done) => {
|
||||||
builder.createAsync(TestApp).then((fixture) => {
|
builder.createAsync(TestAppComponent).then((fixture) => {
|
||||||
fixture.detectChanges();
|
fixture.detectChanges();
|
||||||
done();
|
done();
|
||||||
}).catch((err) => done.fail(err));
|
}).catch((err) => done.fail(err));
|
||||||
|
@ -73,9 +73,9 @@ describe('Menu service', () => {
|
||||||
spyOn(window, 'scrollTo').and.stub();
|
spyOn(window, 'scrollTo').and.stub();
|
||||||
hashService.changed.subscribe(() => {
|
hashService.changed.subscribe(() => {
|
||||||
expect(menu.hashScroll).toHaveBeenCalled();
|
expect(menu.hashScroll).toHaveBeenCalled();
|
||||||
let scrollY = window.scrollTo.calls.argsFor(0)[1];
|
let scrollY = (<jasmine.Spy>window.scrollTo).calls.argsFor(0)[1];
|
||||||
expect(scrollY).toBeGreaterThan(0);
|
expect(scrollY).toBeGreaterThan(0);
|
||||||
window.scrollTo.and.callThrough();
|
(<jasmine.Spy>window.scrollTo).and.callThrough();
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
hashService.changed.next(hash);
|
hashService.changed.next(hash);
|
||||||
|
@ -87,7 +87,7 @@ describe('Menu service', () => {
|
||||||
spyOn(window, 'scrollTo').and.stub();
|
spyOn(window, 'scrollTo').and.stub();
|
||||||
hashService.changed.subscribe(() => {
|
hashService.changed.subscribe(() => {
|
||||||
expect(menu.hashScroll).toHaveBeenCalled();
|
expect(menu.hashScroll).toHaveBeenCalled();
|
||||||
let scrollY = window.scrollTo.calls.argsFor(0)[1];
|
let scrollY = (<jasmine.Spy>window.scrollTo).calls.argsFor(0)[1];
|
||||||
expect(scrollY).toBeGreaterThan(0);
|
expect(scrollY).toBeGreaterThan(0);
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
|
@ -122,5 +122,5 @@ describe('Menu service', () => {
|
||||||
<methods-list></methods-list>
|
<methods-list></methods-list>
|
||||||
</div>`
|
</div>`
|
||||||
})
|
})
|
||||||
class TestApp {
|
class TestAppComponent {
|
||||||
}
|
}
|
|
@ -1,8 +1,8 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
import { Injectable, EventEmitter } from '@angular/core';
|
import { Injectable, EventEmitter } from '@angular/core';
|
||||||
import { ScrollService, INVIEW_POSITION } from './scroll.service.js';
|
import { ScrollService, INVIEW_POSITION } from './scroll.service';
|
||||||
import { Hash } from './hash.service.js';
|
import { Hash } from './hash.service';
|
||||||
import SchemaManager from '../utils/SchemaManager';
|
import { SchemaManager } from '../utils/SchemaManager';
|
||||||
|
|
||||||
const CHANGE = {
|
const CHANGE = {
|
||||||
NEXT : 1,
|
NEXT : 1,
|
||||||
|
@ -10,16 +10,17 @@ const CHANGE = {
|
||||||
INITIAL : 0
|
INITIAL : 0
|
||||||
};
|
};
|
||||||
|
|
||||||
@Reflect.metadata('parameters', [[Hash], [ScrollService], [SchemaManager]])
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class MenuService {
|
export class MenuService {
|
||||||
constructor(hash, scrollService, schemaMgr) {
|
changed: EventEmitter<any> = new EventEmitter();
|
||||||
this.hash = hash;
|
categories: any;
|
||||||
this.scrollService = scrollService;
|
|
||||||
|
|
||||||
this.activeCatIdx = 0;
|
activeCatIdx: number = 0;
|
||||||
this.activeMethodIdx = -1;
|
activeMethodIdx: number = -1;
|
||||||
this.changed = new EventEmitter();
|
activeMethodPtr: string;
|
||||||
|
|
||||||
|
constructor(private hash:Hash, private scrollService:ScrollService, schemaMgr:SchemaManager) {
|
||||||
|
this.hash = hash;
|
||||||
|
|
||||||
this.categories = Array.from(schemaMgr.buildMenuTree().entries()).map(
|
this.categories = Array.from(schemaMgr.buildMenuTree().entries()).map(
|
||||||
el => ({name: el[0], description: el[1].description, methods: el[1].methods})
|
el => ({name: el[0], description: el[1].description, methods: el[1].methods})
|
|
@ -2,20 +2,20 @@
|
||||||
import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
import { isFunction, isString } from '@angular/core/src/facade/lang';
|
import { isFunction, isString } from '@angular/core/src/facade/lang';
|
||||||
import { BrowserDomAdapter } from '@angular/platform-browser/src/browser/browser_adapter';
|
import { BrowserDomAdapter } from '@angular/platform-browser/src/browser/browser_adapter';
|
||||||
import { global } from '@angular/core/src/facade/lang';
|
|
||||||
|
|
||||||
const defaults = {
|
const defaults = {
|
||||||
scrollYOffset: 0,
|
scrollYOffset: 0,
|
||||||
disableLazySchemas: false,
|
disableLazySchemas: false,
|
||||||
debugMode: global && global.redocDebugMode
|
debugMode: false//global && global.redocDebugMode
|
||||||
};
|
};
|
||||||
|
|
||||||
const OPTION_NAMES = new Set(['scrollYOffset', 'disableLazySchemas', 'specUrl']);
|
const OPTION_NAMES = new Set(['scrollYOffset', 'disableLazySchemas', 'specUrl']);
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
@Reflect.metadata('parameters', [[BrowserDomAdapter]])
|
|
||||||
export class OptionsService {
|
export class OptionsService {
|
||||||
constructor(dom) {
|
private _options: any;
|
||||||
|
|
||||||
|
constructor(private dom:BrowserDomAdapter) {
|
||||||
this._options = defaults;
|
this._options = defaults;
|
||||||
this.dom = dom;
|
this.dom = dom;
|
||||||
}
|
}
|
|
@ -1,7 +1,7 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
import { Injectable, EventEmitter } from '@angular/core';
|
import { Injectable, EventEmitter, Output } from '@angular/core';
|
||||||
import { BrowserDomAdapter } from '@angular/platform-browser/src/browser/browser_adapter';
|
import { BrowserDomAdapter } from '@angular/platform-browser/src/browser/browser_adapter';
|
||||||
import { OptionsService } from './options.service.js';
|
import { OptionsService } from './options.service';
|
||||||
|
|
||||||
export const INVIEW_POSITION = {
|
export const INVIEW_POSITION = {
|
||||||
ABOVE : 1,
|
ABOVE : 1,
|
||||||
|
@ -9,11 +9,14 @@ export const INVIEW_POSITION = {
|
||||||
INVIEW: 0
|
INVIEW: 0
|
||||||
};
|
};
|
||||||
|
|
||||||
@Reflect.metadata('parameters', [
|
|
||||||
[BrowserDomAdapter], [OptionsService]])
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class ScrollService {
|
export class ScrollService {
|
||||||
constructor(dom, optionsService) {
|
scrollYOffset: any;
|
||||||
|
$scrollParent: any;
|
||||||
|
@Output() scroll = new EventEmitter();
|
||||||
|
private prevOffsetY: number;
|
||||||
|
private _cancel:any;
|
||||||
|
constructor(private dom:BrowserDomAdapter, optionsService:OptionsService) {
|
||||||
//events.bootstrapped.subscribe(() => this.hashScroll());
|
//events.bootstrapped.subscribe(() => this.hashScroll());
|
||||||
this.scrollYOffset = () => optionsService.options.scrollYOffset();
|
this.scrollYOffset = () => optionsService.options.scrollYOffset();
|
||||||
this.$scrollParent = optionsService.options.$scrollParent;
|
this.$scrollParent = optionsService.options.$scrollParent;
|
||||||
|
@ -23,7 +26,7 @@ export class ScrollService {
|
||||||
}
|
}
|
||||||
|
|
||||||
scrollY() {
|
scrollY() {
|
||||||
return (this.$scrollParent.pageYOffset != null) ? this.$scrollParent.pageYOffset : this.$scrollParent.scrollTop;
|
return (this.$scrollParent.pageYOffset != undefined) ? this.$scrollParent.pageYOffset : this.$scrollParent.scrollTop;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* returns 1 if element if above the view, 0 if in view and -1 below the view */
|
/* returns 1 if element if above the view, 0 if in view and -1 below the view */
|
|
@ -1,37 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
import {Component, EventEmitter, ElementRef} from '@angular/core';
|
|
||||||
import {CORE_DIRECTIVES} from '@angular/common';
|
|
||||||
import DropKick from 'Robdel12/DropKick';
|
|
||||||
import 'Robdel12/DropKick/build/css/dropkick.css!css';
|
|
||||||
|
|
||||||
@Component({
|
|
||||||
selector: 'dropdown',
|
|
||||||
events: ['change'],
|
|
||||||
template: `
|
|
||||||
<select (change)=onChange($event.target.value)>
|
|
||||||
<ng-content></ng-content>
|
|
||||||
</select>
|
|
||||||
`,
|
|
||||||
directives: [CORE_DIRECTIVES],
|
|
||||||
styleUrls: ['./lib/shared/components/DropDown/drop-down.css']
|
|
||||||
})
|
|
||||||
@Reflect.metadata('parameters', [[ElementRef]])
|
|
||||||
export class DropDown {
|
|
||||||
constructor(elem) {
|
|
||||||
this.change = new EventEmitter();
|
|
||||||
this.elem = elem.nativeElement;
|
|
||||||
}
|
|
||||||
|
|
||||||
ngAfterContentInit() {
|
|
||||||
this.inst = new DropKick(this.elem.firstElementChild, {autoWidth: true});
|
|
||||||
}
|
|
||||||
|
|
||||||
onChange(value) {
|
|
||||||
this.change.next(value);
|
|
||||||
}
|
|
||||||
|
|
||||||
destroy() {
|
|
||||||
this.inst.dispose();
|
|
||||||
}
|
|
||||||
}
|
|
36
lib/shared/components/DropDown/drop-down.ts
Normal file
36
lib/shared/components/DropDown/drop-down.ts
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
import { Component, EventEmitter, ElementRef, Output, AfterContentInit } from '@angular/core';
|
||||||
|
import { CORE_DIRECTIVES } from '@angular/common';
|
||||||
|
import DropKick from 'dropkickjs';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'drop-down',
|
||||||
|
template: `
|
||||||
|
<select (change)=onChange($event.target.value)>
|
||||||
|
<ng-content></ng-content>
|
||||||
|
</select>
|
||||||
|
`,
|
||||||
|
directives: [CORE_DIRECTIVES],
|
||||||
|
styleUrls: ['./drop-down.css']
|
||||||
|
})
|
||||||
|
export class DropDown implements AfterContentInit {
|
||||||
|
@Output() change = new EventEmitter();
|
||||||
|
elem: any;
|
||||||
|
inst: any;
|
||||||
|
constructor(elem:ElementRef) {
|
||||||
|
this.elem = elem.nativeElement;
|
||||||
|
}
|
||||||
|
|
||||||
|
ngAfterContentInit() {
|
||||||
|
this.inst = new DropKick(this.elem.firstElementChild, {autoWidth: true});
|
||||||
|
}
|
||||||
|
|
||||||
|
onChange(value) {
|
||||||
|
this.change.next(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
destroy() {
|
||||||
|
this.inst.dispose();
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,6 +1,6 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
import { getChildDebugElementByType } from 'tests/helpers';
|
import { getChildDebugElementByType } from '../../../../tests/helpers';
|
||||||
import { Component, provide } from '@angular/core';
|
import { Component, provide } from '@angular/core';
|
||||||
import { BrowserDomAdapter } from '@angular/platform-browser/src/browser/browser_adapter';
|
import { BrowserDomAdapter } from '@angular/platform-browser/src/browser/browser_adapter';
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@ import {
|
||||||
|
|
||||||
import { TestComponentBuilder } from '@angular/compiler/testing';
|
import { TestComponentBuilder } from '@angular/compiler/testing';
|
||||||
|
|
||||||
import { StickySidebar } from 'lib/shared/components/index';
|
import { StickySidebar } from '../index';
|
||||||
|
|
||||||
describe('Common components', () => {
|
describe('Common components', () => {
|
||||||
describe('StickySidebar Component', () => {
|
describe('StickySidebar Component', () => {
|
||||||
|
@ -75,6 +75,8 @@ describe('Common components', () => {
|
||||||
|
|
||||||
})
|
})
|
||||||
class TestApp {
|
class TestApp {
|
||||||
|
options: any;
|
||||||
|
scrollParent: Window;
|
||||||
constructor() {
|
constructor() {
|
||||||
this.options = {};
|
this.options = {};
|
||||||
this.scrollParent = window;
|
this.scrollParent = window;
|
|
@ -1,17 +1,20 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
import {Directive, ElementRef} from '@angular/core';
|
import { Directive, ElementRef, Input, OnInit, OnDestroy } from '@angular/core';
|
||||||
import {BrowserDomAdapter} from '@angular/platform-browser/src/browser/browser_adapter';
|
import {BrowserDomAdapter} from '@angular/platform-browser/src/browser/browser_adapter';
|
||||||
|
|
||||||
@Directive({
|
@Directive({
|
||||||
selector: '[sticky-sidebar]',
|
selector: '[sticky-sidebar]'
|
||||||
inputs: ['scrollParent', 'scrollYOffset']
|
|
||||||
})
|
})
|
||||||
@Reflect.metadata('parameters', [[ElementRef], [BrowserDomAdapter]])
|
export class StickySidebar implements OnInit, OnDestroy {
|
||||||
export class StickySidebar {
|
$element: any;
|
||||||
constructor(elementRef, dom) {
|
cancelScrollBinding: any;
|
||||||
|
$redocEl: any;
|
||||||
|
@Input() scrollParent:any;
|
||||||
|
@Input() scrollYOffset:any;
|
||||||
|
|
||||||
|
constructor(elementRef:ElementRef, private dom:BrowserDomAdapter) {
|
||||||
this.$element = elementRef.nativeElement;
|
this.$element = elementRef.nativeElement;
|
||||||
this.dom = dom;
|
|
||||||
|
|
||||||
// initial styling
|
// initial styling
|
||||||
this.dom.setStyle(this.$element, 'position', 'absolute');
|
this.dom.setStyle(this.$element, 'position', 'absolute');
|
||||||
|
@ -26,7 +29,7 @@ export class StickySidebar {
|
||||||
}
|
}
|
||||||
|
|
||||||
unbind() {
|
unbind() {
|
||||||
this.cancelScrollBinding && this.cancelScrollBinding();
|
if (this.cancelScrollBinding) this.cancelScrollBinding();
|
||||||
}
|
}
|
||||||
|
|
||||||
updatePosition() {
|
updatePosition() {
|
||||||
|
@ -44,16 +47,16 @@ export class StickySidebar {
|
||||||
|
|
||||||
unstick() {
|
unstick() {
|
||||||
this.dom.setStyle(this.$element, 'position', 'absolute');
|
this.dom.setStyle(this.$element, 'position', 'absolute');
|
||||||
this.dom.setStyle(this.$element, 'top', 0);
|
this.dom.setStyle(this.$element, 'top', '0');
|
||||||
}
|
}
|
||||||
|
|
||||||
get scrollY() {
|
get scrollY() {
|
||||||
return (this.scrollParent.pageYOffset != null) ? this.scrollParent.pageYOffset : this.scrollParent.scrollTop;
|
return (this.scrollParent.pageYOffset != undefined) ? this.scrollParent.pageYOffset : this.scrollParent.scrollTop;
|
||||||
}
|
}
|
||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
// FIXME use more reliable code
|
// FIXME use more reliable code
|
||||||
this.$redocEl = this.$element.offsetParent;
|
this.$redocEl = this.$element.offsetParent || this.dom.defaultDoc().body;
|
||||||
this.bind();
|
this.bind();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
import { getChildDebugElement, getChildDebugElementAll } from 'tests/helpers';
|
import { getChildDebugElement, getChildDebugElementAll } from '../../../../tests/helpers';
|
||||||
import {Component} from '@angular/core';
|
import { Component } from '@angular/core';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
inject,
|
inject,
|
||||||
|
@ -11,7 +11,7 @@ import {
|
||||||
|
|
||||||
import { TestComponentBuilder } from '@angular/compiler/testing';
|
import { TestComponentBuilder } from '@angular/compiler/testing';
|
||||||
|
|
||||||
import {Tabs, Tab} from 'lib/shared/components/index';
|
import {Tabs, Tab} from '../index';
|
||||||
|
|
||||||
describe('Common components', () => {
|
describe('Common components', () => {
|
||||||
describe('Tabs Component', () => {
|
describe('Tabs Component', () => {
|
||||||
|
@ -148,6 +148,7 @@ describe('Common components', () => {
|
||||||
</tabs>`
|
</tabs>`
|
||||||
})
|
})
|
||||||
class TestApp {
|
class TestApp {
|
||||||
|
eventLog: any;
|
||||||
constructor() {
|
constructor() {
|
||||||
this.eventLog = [];
|
this.eventLog = [];
|
||||||
}
|
}
|
|
@ -1,13 +1,11 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
import { Component, EventEmitter } from '@angular/core';
|
import { Component, EventEmitter, Input, Output, OnInit } from '@angular/core';
|
||||||
import { CORE_DIRECTIVES } from '@angular/common';
|
import { CORE_DIRECTIVES } from '@angular/common';
|
||||||
import { ChangeDetectorRef, ChangeDetectionStrategy } from '@angular/core';
|
import { ChangeDetectorRef, ChangeDetectionStrategy } from '@angular/core';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'tabs',
|
selector: 'tabs',
|
||||||
events: ['change'],
|
|
||||||
inputs: ['selected'],
|
|
||||||
template: `
|
template: `
|
||||||
<ul>
|
<ul>
|
||||||
<li *ngFor="let tab of tabs" [ngClass]="{active: tab.active}" (click)="selectTab(tab)"
|
<li *ngFor="let tab of tabs" [ngClass]="{active: tab.active}" (click)="selectTab(tab)"
|
||||||
|
@ -16,16 +14,14 @@ import { ChangeDetectorRef, ChangeDetectionStrategy } from '@angular/core';
|
||||||
<ng-content></ng-content>
|
<ng-content></ng-content>
|
||||||
`,
|
`,
|
||||||
directives: [CORE_DIRECTIVES],
|
directives: [CORE_DIRECTIVES],
|
||||||
styleUrls: ['./lib/shared/components/Tabs/tabs.css'],
|
styleUrls: ['tabs.css'],
|
||||||
changeDetection: ChangeDetectionStrategy.OnPush
|
changeDetection: ChangeDetectionStrategy.OnPush
|
||||||
})
|
})
|
||||||
@Reflect.metadata('parameters', [[ChangeDetectorRef]])
|
export class Tabs implements OnInit {
|
||||||
export class Tabs {
|
@Input() selected: any;
|
||||||
constructor(changeDetector) {
|
@Output() change = new EventEmitter();
|
||||||
this.tabs = [];
|
tabs: Tab[] = [];
|
||||||
this.change = new EventEmitter();
|
constructor(private changeDetector:ChangeDetectorRef) {}
|
||||||
this.changeDetector = changeDetector;
|
|
||||||
}
|
|
||||||
|
|
||||||
selectTab(tab, notify = true) {
|
selectTab(tab, notify = true) {
|
||||||
if (tab.active) return;
|
if (tab.active) return;
|
||||||
|
@ -33,7 +29,7 @@ export class Tabs {
|
||||||
tab.active = false;
|
tab.active = false;
|
||||||
});
|
});
|
||||||
tab.active = true;
|
tab.active = true;
|
||||||
notify && this.change.next(tab.tabTitle);
|
if (notify) this.change.next(tab.tabTitle);
|
||||||
}
|
}
|
||||||
|
|
||||||
selectyByTitle(tabTitle, notify = false) {
|
selectyByTitle(tabTitle, notify = false) {
|
||||||
|
@ -51,7 +47,7 @@ export class Tabs {
|
||||||
} else {
|
} else {
|
||||||
prevActive.active = true;
|
prevActive.active = true;
|
||||||
}
|
}
|
||||||
notify && this.change.next(tabTitle);
|
if (notify) this.change.next(tabTitle);
|
||||||
this.changeDetector.markForCheck();
|
this.changeDetector.markForCheck();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -69,7 +65,6 @@ export class Tabs {
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'tab',
|
selector: 'tab',
|
||||||
inputs: ['tabTitle', 'tabStatus'],
|
|
||||||
template: `
|
template: `
|
||||||
<div class="tab-wrap" [ngClass]="{'active': active}">
|
<div class="tab-wrap" [ngClass]="{'active': active}">
|
||||||
<ng-content></ng-content>
|
<ng-content></ng-content>
|
||||||
|
@ -86,10 +81,11 @@ export class Tabs {
|
||||||
}`
|
}`
|
||||||
]
|
]
|
||||||
})
|
})
|
||||||
@Reflect.metadata('parameters', [ [Tabs] ])
|
|
||||||
export class Tab {
|
export class Tab {
|
||||||
constructor(tabs) {
|
@Input() active: boolean = false;
|
||||||
this.active = false;
|
@Input() tabTitle: string;
|
||||||
|
@Input() tabStatus: string;
|
||||||
|
constructor(tabs: Tabs) {
|
||||||
tabs.addTab(this);
|
tabs.addTab(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,29 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
import {Component, EventEmitter} from '@angular/core';
|
|
||||||
import {CORE_DIRECTIVES} from '@angular/common';
|
|
||||||
|
|
||||||
@Component({
|
|
||||||
selector: 'zippy',
|
|
||||||
events: ['open', 'close'],
|
|
||||||
inputs: ['title', 'visible', 'type', 'empty'],
|
|
||||||
templateUrl: './lib/shared/components/Zippy/zippy.html',
|
|
||||||
styleUrls: ['./lib/shared/components/Zippy/zippy.css'],
|
|
||||||
directives: [CORE_DIRECTIVES]
|
|
||||||
})
|
|
||||||
export class Zippy {
|
|
||||||
|
|
||||||
constructor() {
|
|
||||||
this.type = 'general';
|
|
||||||
this.visible = false;
|
|
||||||
this.empty = false;
|
|
||||||
this.open = new EventEmitter();
|
|
||||||
this.close = new EventEmitter();
|
|
||||||
}
|
|
||||||
|
|
||||||
toggle() {
|
|
||||||
this.visible = !this.visible;
|
|
||||||
if (this.empty) return;
|
|
||||||
(this.visible) ? this.open.next() : this.close.next();
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,16 +1,17 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
import { getChildDebugElement, mouseclick } from 'tests/helpers';
|
import { getChildDebugElement, mouseclick } from '../../../../tests/helpers';
|
||||||
|
|
||||||
import { Component } from '@angular/core';
|
import { Component } from '@angular/core';
|
||||||
import {
|
import {
|
||||||
inject,
|
inject,
|
||||||
beforeEach,
|
beforeEach,
|
||||||
it
|
it,
|
||||||
|
expect
|
||||||
} from '@angular/core/testing';
|
} from '@angular/core/testing';
|
||||||
|
|
||||||
import { TestComponentBuilder } from '@angular/compiler/testing';
|
import { TestComponentBuilder } from '@angular/compiler/testing';
|
||||||
import { Zippy } from 'lib/shared/components/index';
|
import { Zippy } from '../index';
|
||||||
|
|
||||||
describe('Common components', () => {
|
describe('Common components', () => {
|
||||||
describe('Zippy Component', () => {
|
describe('Zippy Component', () => {
|
||||||
|
@ -38,15 +39,15 @@ describe('Common components', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should init component defaults', () => {
|
it('should init component defaults', () => {
|
||||||
component.empty.should.be.false;
|
component.empty.should.be.false();
|
||||||
component.visible.should.be.false;
|
component.visible.should.be.false();
|
||||||
component.type.should.be.equal('general');
|
component.type.should.be.equal('general');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should init properties from dom params', () => {
|
it('should init properties from dom params', () => {
|
||||||
fixture.detectChanges();
|
fixture.detectChanges();
|
||||||
component.visible.should.be.true;
|
component.visible.should.be.true();
|
||||||
component.empty.should.be.true;
|
component.empty.should.be.true();
|
||||||
component.title.should.be.equal('Zippy');
|
component.title.should.be.equal('Zippy');
|
||||||
component.type.should.be.equal('test');
|
component.type.should.be.equal('test');
|
||||||
});
|
});
|
||||||
|
@ -54,10 +55,10 @@ describe('Common components', () => {
|
||||||
it('project inner content', () => {
|
it('project inner content', () => {
|
||||||
fixture.detectChanges();
|
fixture.detectChanges();
|
||||||
let contentEl = nativeElement.querySelector('.zippy-content');
|
let contentEl = nativeElement.querySelector('.zippy-content');
|
||||||
expect(contentEl).toHaveText('\n test\n ');
|
expect(contentEl.innerText).toMatch('test');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should open and close zippy', () => {
|
it('should open and close zippy', (done) => {
|
||||||
fixture.detectChanges();
|
fixture.detectChanges();
|
||||||
component.empty = false;
|
component.empty = false;
|
||||||
component.visible = true;
|
component.visible = true;
|
||||||
|
@ -68,13 +69,17 @@ describe('Common components', () => {
|
||||||
let titleEl = nativeElement.querySelector('.zippy-title');
|
let titleEl = nativeElement.querySelector('.zippy-title');
|
||||||
mouseclick(titleEl);
|
mouseclick(titleEl);
|
||||||
fixture.detectChanges();
|
fixture.detectChanges();
|
||||||
component.visible.should.be.false;
|
component.visible.should.be.false();
|
||||||
testComponent.opened.should.be.false;
|
testComponent.opened.should.be.false();
|
||||||
|
|
||||||
mouseclick(titleEl);
|
mouseclick(titleEl);
|
||||||
fixture.detectChanges();
|
fixture.detectChanges();
|
||||||
component.visible.should.be.true;
|
setTimeout(() => {
|
||||||
testComponent.opened.should.be.true;
|
component.visible.should.be.true();
|
||||||
|
testComponent.opened.should.be.true();
|
||||||
|
testComponent.clickCount.should.be.equal(2);
|
||||||
|
done();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should disable empty zippy', () => {
|
it('should disable empty zippy', () => {
|
||||||
|
@ -98,9 +103,11 @@ describe('Common components', () => {
|
||||||
selector: 'test-app',
|
selector: 'test-app',
|
||||||
directives: [Zippy],
|
directives: [Zippy],
|
||||||
template:
|
template:
|
||||||
`<zippy title="Zippy" type="test" visible="true" empty="true" (open)="open()" (close)="close()">test</zippy>`
|
`<zippy title="Zippy" type="test" [visible]="true" [empty]="true" (open)="open()" (close)="close()">test</zippy>`
|
||||||
})
|
})
|
||||||
class TestApp {
|
class TestApp {
|
||||||
|
opened: boolean;
|
||||||
|
clickCount: number;
|
||||||
constructor() {
|
constructor() {
|
||||||
this.opened = false;
|
this.opened = false;
|
||||||
this.clickCount = 0;
|
this.clickCount = 0;
|
25
lib/shared/components/Zippy/zippy.ts
Normal file
25
lib/shared/components/Zippy/zippy.ts
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
import { Component, EventEmitter, Output, Input } from '@angular/core';
|
||||||
|
import { CORE_DIRECTIVES } from '@angular/common';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'zippy',
|
||||||
|
templateUrl: './zippy.html',
|
||||||
|
styleUrls: ['./zippy.css'],
|
||||||
|
directives: [CORE_DIRECTIVES]
|
||||||
|
})
|
||||||
|
export class Zippy {
|
||||||
|
@Input() type = 'general';
|
||||||
|
@Input() visible = false;
|
||||||
|
@Input() empty = false;
|
||||||
|
@Input() title;
|
||||||
|
@Output() open = new EventEmitter();
|
||||||
|
@Output() close = new EventEmitter();
|
||||||
|
|
||||||
|
toggle() {
|
||||||
|
this.visible = !this.visible;
|
||||||
|
if (this.empty) return;
|
||||||
|
(this.visible) ? this.open.next({}) : this.close.next({});
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,12 +1,12 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
import {Pipe} from '@angular/core';
|
import { Pipe, PipeTransform } from '@angular/core';
|
||||||
import {isBlank} from '@angular/core/src/facade/lang';
|
import { isBlank } from '@angular/core/src/facade/lang';
|
||||||
|
|
||||||
var level = 1;
|
var level = 1;
|
||||||
const COLLAPSE_LEVEL = 2;
|
const COLLAPSE_LEVEL = 2;
|
||||||
|
|
||||||
@Pipe({ name: 'jsonFormatter' })
|
@Pipe({ name: 'jsonFormatter' })
|
||||||
export class JsonFormatter {
|
export class JsonFormatter implements PipeTransform {
|
||||||
transform(value) {
|
transform(value) {
|
||||||
if (isBlank(value)) return value;
|
if (isBlank(value)) return value;
|
||||||
return jsonToHTML(value);
|
return jsonToHTML(value);
|
||||||
|
@ -14,7 +14,8 @@ export class JsonFormatter {
|
||||||
}
|
}
|
||||||
|
|
||||||
function htmlEncode(t) {
|
function htmlEncode(t) {
|
||||||
return t != null ? t.toString().replace(/&/g, '&').replace(/"/g, '"').replace(/</g, '<').replace(/>/g, '>') : '';
|
return t != undefined ?
|
||||||
|
t.toString().replace(/&/g, '&').replace(/"/g, '"').replace(/</g, '<').replace(/>/g, '>') : '';
|
||||||
}
|
}
|
||||||
|
|
||||||
function decorateWithSpan(value, className) {
|
function decorateWithSpan(value, className) {
|
||||||
|
@ -23,25 +24,22 @@ function decorateWithSpan(value, className) {
|
||||||
|
|
||||||
function valueToHTML(value) {
|
function valueToHTML(value) {
|
||||||
var valueType = typeof value, output = '';
|
var valueType = typeof value, output = '';
|
||||||
if (value == null) {
|
if (value == undefined) {
|
||||||
output += decorateWithSpan('null', 'type-null');
|
output += decorateWithSpan('null', 'type-null');
|
||||||
}
|
} else if (value && value.constructor === Array) {
|
||||||
else if (value && value.constructor === Array) {
|
|
||||||
level++;
|
level++;
|
||||||
output += arrayToHTML(value);
|
output += arrayToHTML(value);
|
||||||
level--;
|
level--;
|
||||||
}
|
} else if (valueType === 'object') {
|
||||||
else if (valueType === 'object') {
|
|
||||||
level++;
|
level++;
|
||||||
output += objectToHTML(value);
|
output += objectToHTML(value);
|
||||||
level--;
|
level--;
|
||||||
}
|
} else if (valueType === 'number') {
|
||||||
else if (valueType === 'number') {
|
|
||||||
output += decorateWithSpan(value, 'type-number');
|
output += decorateWithSpan(value, 'type-number');
|
||||||
}
|
} else if (valueType === 'string') {
|
||||||
else if (valueType === 'string') {
|
|
||||||
if (/^(http|https):\/\/[^\\s]+$/.test(value)) {
|
if (/^(http|https):\/\/[^\\s]+$/.test(value)) {
|
||||||
output += decorateWithSpan('"', 'type-string') + '<a href="' + value + '">' + htmlEncode(value) + '</a>' + decorateWithSpan('"', 'type-string');
|
output += decorateWithSpan('"', 'type-string') + '<a href="' + value + '">' + htmlEncode(value) + '</a>' +
|
||||||
|
decorateWithSpan('"', 'type-string');
|
||||||
} else {
|
} else {
|
||||||
output += decorateWithSpan('"' + value + '"', 'type-string');
|
output += decorateWithSpan('"' + value + '"', 'type-string');
|
||||||
}
|
}
|
|
@ -1,10 +1,12 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
import JsonPointerLib from 'json-pointer';
|
import JsonPointerLib from 'json-pointer';
|
||||||
|
|
||||||
|
const origParse = JsonPointerLib.parse;
|
||||||
/**
|
/**
|
||||||
* Wrapper for JsonPointer. Provides common operations
|
* Wrapper for JsonPointer. Provides common operations
|
||||||
*/
|
*/
|
||||||
export class JsonPointer extends JsonPointerLib {
|
|
||||||
|
export class JsonPointer {
|
||||||
/**
|
/**
|
||||||
* returns last JsonPointer token
|
* returns last JsonPointer token
|
||||||
* if level > 1 returns levels last (second last/third last)
|
* if level > 1 returns levels last (second last/third last)
|
||||||
|
@ -30,7 +32,7 @@ export class JsonPointer extends JsonPointerLib {
|
||||||
*/
|
*/
|
||||||
static dirName(pointer, level=1) {
|
static dirName(pointer, level=1) {
|
||||||
let tokens = JsonPointer.parse(pointer);
|
let tokens = JsonPointer.parse(pointer);
|
||||||
return JsonPointer.compile(tokens.slice(0, tokens.length - level));
|
return JsonPointerLib.compile(tokens.slice(0, tokens.length - level));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -42,7 +44,7 @@ export class JsonPointer extends JsonPointerLib {
|
||||||
if (ptr.charAt(0) === '#') {
|
if (ptr.charAt(0) === '#') {
|
||||||
ptr = ptr.substring(1);
|
ptr = ptr.substring(1);
|
||||||
}
|
}
|
||||||
return JsonPointerLib._origParse(ptr);
|
return origParse(ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -56,13 +58,21 @@ export class JsonPointer extends JsonPointerLib {
|
||||||
// TODO: optimize
|
// TODO: optimize
|
||||||
let baseTokens = JsonPointer.parse(base);
|
let baseTokens = JsonPointer.parse(base);
|
||||||
let resTokens = baseTokens.concat(tokens);
|
let resTokens = baseTokens.concat(tokens);
|
||||||
return JsonPointer.compile(resTokens);
|
return JsonPointerLib.compile(resTokens);
|
||||||
|
}
|
||||||
|
|
||||||
|
static get(object: Object, pointer:string) {
|
||||||
|
return JsonPointerLib.get(object, pointer);
|
||||||
|
}
|
||||||
|
|
||||||
|
static compile(tokens: string[]) {
|
||||||
|
return JsonPointerLib.compile(tokens);
|
||||||
|
}
|
||||||
|
|
||||||
|
static escape(pointer: string) {
|
||||||
|
return JsonPointerLib.escape(pointer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
JsonPointerLib._origParse = JsonPointerLib.parse;
|
|
||||||
JsonPointerLib.parse = JsonPointer.parse;
|
JsonPointerLib.parse = JsonPointer.parse;
|
||||||
|
|
||||||
|
|
||||||
Object.assign(JsonPointer, JsonPointerLib);
|
Object.assign(JsonPointer, JsonPointerLib);
|
||||||
export default JsonPointer;
|
export default JsonPointer;
|
|
@ -1,21 +1,24 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
import JsonSchemaRefParser from 'json-schema-ref-parser';
|
import JsonSchemaRefParser from 'json-schema-ref-parser';
|
||||||
import JsonPointer from './JsonPointer';
|
import JsonPointer from './JsonPointer';
|
||||||
import {methods as swaggerMethods} from './swagger-defs';
|
import {methods as swaggerMethods} from './swagger-defs';
|
||||||
|
|
||||||
export default class SchemaManager {
|
export class SchemaManager {
|
||||||
|
public _schema:any = {};
|
||||||
|
public apiUrl: string;
|
||||||
|
private _instance:any;
|
||||||
|
|
||||||
|
static instance() {
|
||||||
|
return new SchemaManager();
|
||||||
|
}
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
if (SchemaManager.prototype._instance) {
|
if (SchemaManager.prototype._instance) {
|
||||||
return SchemaManager.prototype._instance;
|
return SchemaManager.prototype._instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
SchemaManager.prototype._instance = this;
|
SchemaManager.prototype._instance = this;
|
||||||
|
|
||||||
this._schema = {};
|
|
||||||
}
|
|
||||||
|
|
||||||
static instance() {
|
|
||||||
return new SchemaManager();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
load(url) {
|
load(url) {
|
||||||
|
@ -117,7 +120,7 @@ export default class SchemaManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
/* returns ES6 Map */
|
/* returns ES6 Map */
|
||||||
buildMenuTree() {
|
buildMenuTree():Map<string, any> {
|
||||||
let tag2MethodMapping = new Map();
|
let tag2MethodMapping = new Map();
|
||||||
|
|
||||||
let definedTags = this._schema.tags || [];
|
let definedTags = this._schema.tags || [];
|
||||||
|
@ -142,7 +145,7 @@ export default class SchemaManager {
|
||||||
tags = ['[Other]'];
|
tags = ['[Other]'];
|
||||||
}
|
}
|
||||||
let methodPointer = JsonPointer.compile(['paths', path, method]);
|
let methodPointer = JsonPointer.compile(['paths', path, method]);
|
||||||
let methodSummary = methodInfo.summary;
|
let methodSummary = methodInfo.summary || methodInfo.operationId;
|
||||||
for (let tag of tags) {
|
for (let tag of tags) {
|
||||||
let tagDetails = tag2MethodMapping.get(tag);
|
let tagDetails = tag2MethodMapping.get(tag);
|
||||||
if (!tagDetails) {
|
if (!tagDetails) {
|
|
@ -7,4 +7,4 @@ function $buo_f(){
|
||||||
document.body.appendChild(e);
|
document.body.appendChild(e);
|
||||||
}
|
}
|
||||||
try {document.addEventListener('DOMContentLoaded', $buo_f, false);}
|
try {document.addEventListener('DOMContentLoaded', $buo_f, false);}
|
||||||
catch(e){window.attachEvent('onload', $buo_f);}
|
catch(e){window['attachEvent']('onload', $buo_f);}
|
||||||
|
|
|
@ -1,21 +1,18 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
import {Pipe} from '@angular/core';
|
import { Pipe, PipeTransform } from '@angular/core';
|
||||||
import {isString, stringify, isBlank} from '@angular/core/src/facade/lang';
|
import { isString, stringify, isBlank } from '@angular/core/src/facade/lang';
|
||||||
import {BaseException} from '@angular/core/src/facade/exceptions';
|
import { BaseException } from '@angular/core/src/facade/exceptions';
|
||||||
import {JsonPointer} from './JsonPointer';
|
import JsonPointer from './JsonPointer';
|
||||||
|
|
||||||
import Prism from '../../prismjs-bundle';
|
declare var Prism: any;
|
||||||
|
|
||||||
import 'prismjs/themes/prism-dark.css!css';
|
|
||||||
import 'hint.css/hint.base.css!css';
|
|
||||||
|
|
||||||
import marked from 'marked';
|
import marked from 'marked';
|
||||||
|
|
||||||
// in gfm mode marked doesn't parse #Heading (without space after #) as heading
|
// in gfm mode marked doesn't parse #Heading (without space after #) as heading
|
||||||
// https://github.com/chjj/marked/issues/642
|
// https://github.com/chjj/marked/issues/642
|
||||||
marked.Lexer.rules.gfm.heading = marked.Lexer.rules.normal.heading;
|
marked['Lexer'].rules.gfm.heading = marked['Lexer'].rules.normal.heading;
|
||||||
marked.Lexer.rules.tables.heading = marked.Lexer.rules.normal.heading;
|
marked['Lexer'].rules.tables.heading = marked['Lexer'].rules.normal.heading;
|
||||||
|
|
||||||
marked.setOptions({
|
marked.setOptions({
|
||||||
renderer: new marked.Renderer(),
|
renderer: new marked.Renderer(),
|
||||||
|
@ -34,7 +31,7 @@ class InvalidPipeArgumentException extends BaseException {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Pipe({ name: 'keys' })
|
@Pipe({ name: 'keys' })
|
||||||
export class KeysPipe {
|
export class KeysPipe implements PipeTransform {
|
||||||
transform(value) {
|
transform(value) {
|
||||||
if (isBlank(value)) return value;
|
if (isBlank(value)) return value;
|
||||||
if (typeof value !== 'object') {
|
if (typeof value !== 'object') {
|
||||||
|
@ -45,7 +42,7 @@ export class KeysPipe {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Pipe({ name: 'values' })
|
@Pipe({ name: 'values' })
|
||||||
export class ValuesPipe {
|
export class ValuesPipe implements PipeTransform {
|
||||||
transform(value) {
|
transform(value) {
|
||||||
if (isBlank(value)) return value;
|
if (isBlank(value)) return value;
|
||||||
if (typeof value !== 'object') {
|
if (typeof value !== 'object') {
|
||||||
|
@ -56,7 +53,7 @@ export class ValuesPipe {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Pipe({ name: 'jsonPointerEscape' })
|
@Pipe({ name: 'jsonPointerEscape' })
|
||||||
export class JsonPointerEscapePipe {
|
export class JsonPointerEscapePipe implements PipeTransform {
|
||||||
transform(value) {
|
transform(value) {
|
||||||
if (isBlank(value)) return value;
|
if (isBlank(value)) return value;
|
||||||
if (!isString(value)) {
|
if (!isString(value)) {
|
||||||
|
@ -67,7 +64,7 @@ export class JsonPointerEscapePipe {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Pipe({ name: 'marked' })
|
@Pipe({ name: 'marked' })
|
||||||
export class MarkedPipe {
|
export class MarkedPipe implements PipeTransform {
|
||||||
transform(value) {
|
transform(value) {
|
||||||
if (isBlank(value)) return value;
|
if (isBlank(value)) return value;
|
||||||
if (!isString(value)) {
|
if (!isString(value)) {
|
||||||
|
@ -86,7 +83,7 @@ const langMap = {
|
||||||
};
|
};
|
||||||
|
|
||||||
@Pipe({ name: 'prism' })
|
@Pipe({ name: 'prism' })
|
||||||
export class PrismPipe {
|
export class PrismPipe implements PipeTransform {
|
||||||
transform(value, args) {
|
transform(value, args) {
|
||||||
if (isBlank(args) || args.length === 0) {
|
if (isBlank(args) || args.length === 0) {
|
||||||
throw new BaseException('Prism pipe requires one argument');
|
throw new BaseException('Prism pipe requires one argument');
|
||||||
|
@ -106,7 +103,7 @@ export class PrismPipe {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Pipe({ name: 'encodeURIComponent' })
|
@Pipe({ name: 'encodeURIComponent' })
|
||||||
export class EncodeURIComponentPipe {
|
export class EncodeURIComponentPipe implements PipeTransform {
|
||||||
transform(value) {
|
transform(value) {
|
||||||
if (isBlank(value)) return value;
|
if (isBlank(value)) return value;
|
||||||
if (!isString(value)) {
|
if (!isString(value)) {
|
0
lib/utils/prismjs-bundle.ts
Normal file
0
lib/utils/prismjs-bundle.ts
Normal file
54
package.json
54
package.json
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"name": "redoc",
|
"name": "redoc",
|
||||||
"description": "Swagger-generated API Reference Documentation",
|
"description": "Swagger-generated API Reference Documentation",
|
||||||
"version": "0.13.0",
|
"version": "0.14.0",
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "git://github.com/Rebilly/ReDoc"
|
"url": "git://github.com/Rebilly/ReDoc"
|
||||||
|
@ -37,15 +37,14 @@
|
||||||
"@angular/core": "npm:@angular/core@^2.0.0-rc.1",
|
"@angular/core": "npm:@angular/core@^2.0.0-rc.1",
|
||||||
"@angular/platform-browser": "npm:@angular/platform-browser@^2.0.0-rc.1",
|
"@angular/platform-browser": "npm:@angular/platform-browser@^2.0.0-rc.1",
|
||||||
"@angular/platform-browser-dynamic": "npm:@angular/platform-browser-dynamic@^2.0.0-rc.1",
|
"@angular/platform-browser-dynamic": "npm:@angular/platform-browser-dynamic@^2.0.0-rc.1",
|
||||||
"Robdel12/DropKick": "github:Robdel12/DropKick@^2.1.7",
|
"dropkickjs": "npm:dropkickjs@^2.1.8",
|
||||||
"es6-shim": "github:es-shims/es6-shim@^0.33.6",
|
"es6-shim": "github:es-shims/es6-shim@^0.33.6",
|
||||||
"hint.css": "npm:hint.css@^2.2.1",
|
"hint.css": "npm:hint.css@^2.2.1",
|
||||||
"json": "github:systemjs/plugin-json@^0.1.0",
|
"json": "github:systemjs/plugin-json@^0.1.0",
|
||||||
"json-formatter-js": "npm:json-formatter-js@^0.2.0",
|
|
||||||
"json-pointer": "npm:json-pointer@^0.3.0",
|
"json-pointer": "npm:json-pointer@^0.3.0",
|
||||||
"json-schema-ref-parser": "npm:json-schema-ref-parser@^3.1.2",
|
"json-schema-ref-parser": "npm:json-schema-ref-parser@^3.1.2",
|
||||||
"marked": "npm:marked@^0.3.5",
|
"marked": "npm:marked@^0.3.5",
|
||||||
"openapi-sampler": "npm:openapi-sampler@^0.1.2",
|
"openapi-sampler": "npm:openapi-sampler@0.2.0",
|
||||||
"prismjs": "npm:prismjs@^1.3.0",
|
"prismjs": "npm:prismjs@^1.3.0",
|
||||||
"rxjs": "npm:rxjs@5.0.0-beta.6",
|
"rxjs": "npm:rxjs@5.0.0-beta.6",
|
||||||
"scrollparent": "npm:scrollparent@^0.1.0",
|
"scrollparent": "npm:scrollparent@^0.1.0",
|
||||||
|
@ -55,65 +54,92 @@
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"babel": "npm:babel-core@^5.8.34",
|
"babel": "npm:babel-core@^5.8.34",
|
||||||
"babel-runtime": "npm:babel-runtime@^5.8.24",
|
"babel-runtime": "npm:babel-runtime@^5.8.24",
|
||||||
"clean-css": "npm:clean-css@^3.4.6",
|
"clean-css": "npm:clean-css@^3.4.17",
|
||||||
"core-js": "npm:core-js@^1.2.6",
|
"core-js": "npm:core-js@^1.2.6",
|
||||||
"css": "github:systemjs/plugin-css@^0.1.18",
|
"css": "github:systemjs/plugin-css@^0.1.18",
|
||||||
"systemjs/plugin-json": "github:systemjs/plugin-json@^0.1.0"
|
"systemjs/plugin-json": "github:systemjs/plugin-json@^0.1.0"
|
||||||
},
|
},
|
||||||
"overrides": {
|
"overrides": {
|
||||||
"github:Robdel12/DropKick@2.1.7": {
|
"npm:openapi-sampler@0.2.0": {
|
||||||
"format": "global"
|
|
||||||
},
|
|
||||||
"npm:openapi-sampler@0.1.2": {
|
|
||||||
"main": "src/openapi-sampler",
|
"main": "src/openapi-sampler",
|
||||||
"format": "esm"
|
"format": "esm"
|
||||||
|
},
|
||||||
|
"npm:dropkickjs@2.1.8": {
|
||||||
|
"format": "global"
|
||||||
|
},
|
||||||
|
"npm:json-schema-ref-parser@3.1.2": {
|
||||||
|
"map": {
|
||||||
|
"http": "stream-http",
|
||||||
|
"https": "stream-http"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"@angular/common": "2.0.0-rc.1",
|
||||||
|
"@angular/compiler": "2.0.0-rc.1",
|
||||||
|
"@angular/core": "2.0.0-rc.1",
|
||||||
|
"@angular/platform-browser": "2.0.0-rc.1",
|
||||||
|
"@angular/platform-browser-dynamic": "2.0.0-rc.1",
|
||||||
|
"@angular/platform-server": "2.0.0-rc.1",
|
||||||
"babel-eslint": "^4.1.6",
|
"babel-eslint": "^4.1.6",
|
||||||
"babel-polyfill": "^6.3.14",
|
"babel-polyfill": "^6.3.14",
|
||||||
"branch-release": "^0.3.2",
|
"branch-release": "^1.0.3",
|
||||||
"browser-sync": "^2.10.1",
|
"browser-sync": "^2.10.1",
|
||||||
|
"codelyzer": "0.0.23",
|
||||||
|
"coveralls": "^2.11.9",
|
||||||
"del": "^2.2.0",
|
"del": "^2.2.0",
|
||||||
"deploy-to-gh-pages": "^1.1.2",
|
"deploy-to-gh-pages": "^1.1.2",
|
||||||
"gulp": "^3.9.1",
|
"gulp": "^3.9.1",
|
||||||
"gulp-concat": "^2.6.0",
|
"gulp-concat": "^2.6.0",
|
||||||
"gulp-eslint": "^1.1.1",
|
"gulp-eslint": "^1.1.1",
|
||||||
"gulp-if": "^2.0.1",
|
"gulp-if": "^2.0.1",
|
||||||
"gulp-inline-ng2-template": "^1.1.2",
|
"gulp-inline-ng2-template": "^1.1.5",
|
||||||
"gulp-protractor": "^2.1.0",
|
"gulp-protractor": "^2.1.0",
|
||||||
"gulp-rename": "^1.2.2",
|
"gulp-rename": "^1.2.2",
|
||||||
"gulp-replace": "^0.5.4",
|
"gulp-replace": "^0.5.4",
|
||||||
"gulp-sass": "^2.1.1",
|
"gulp-sass": "^2.1.1",
|
||||||
"gulp-sourcemaps": "^1.6.0",
|
"gulp-sourcemaps": "^1.6.0",
|
||||||
|
"gulp-tslint": "^5.0.0",
|
||||||
"isparta": "^4.0.0",
|
"isparta": "^4.0.0",
|
||||||
"istanbul": "github:gotwarlost/istanbul#source-map",
|
"istanbul": "github:gotwarlost/istanbul#source-map",
|
||||||
"jasmine-core": "^2.4.1",
|
"jasmine-core": "^2.4.1",
|
||||||
"jasmine-spec-reporter": "^2.4.0",
|
"jasmine-spec-reporter": "^2.4.0",
|
||||||
"jspm": "^0.16.34",
|
"json-pointer": "^0.5.0",
|
||||||
|
"json-schema-instantiator": "^0.3.0",
|
||||||
|
"json-schema-ref-parser": "^3.1.2",
|
||||||
|
"jspm": "^0.16.36",
|
||||||
"karma": "^0.13.15",
|
"karma": "^0.13.15",
|
||||||
"karma-babel-preprocessor": "^5.2.2",
|
"karma-babel-preprocessor": "^5.2.2",
|
||||||
"karma-chrome-launcher": "^0.2.2",
|
"karma-chrome-launcher": "^0.2.2",
|
||||||
"karma-coverage": "github:douglasduteil/karma-coverage#next",
|
"karma-coverage": "github:douglasduteil/karma-coverage#next",
|
||||||
"karma-coveralls": "^1.1.2",
|
|
||||||
"karma-jasmine": "^0.3.6",
|
"karma-jasmine": "^0.3.6",
|
||||||
"karma-jspm": "^2.0.2",
|
"karma-jspm": "^2.1.1",
|
||||||
"karma-mocha-reporter": "^2.0.0",
|
"karma-mocha-reporter": "^2.0.0",
|
||||||
"karma-phantomjs-launcher": "^1.0.0",
|
"karma-phantomjs-launcher": "^1.0.0",
|
||||||
"karma-phantomjs-shim": "^1.1.2",
|
"karma-phantomjs-shim": "^1.1.2",
|
||||||
"karma-regex-preprocessor": "github:makern/karma-regex-preprocessor",
|
"karma-regex-preprocessor": "github:makern/karma-regex-preprocessor",
|
||||||
"karma-should": "^1.0.0",
|
"karma-should": "^1.0.0",
|
||||||
"karma-sinon": "^1.0.4",
|
"karma-sinon": "^1.0.4",
|
||||||
|
"marked": "^0.3.5",
|
||||||
|
"node-sass": "^3.7.0",
|
||||||
|
"openapi-sampler": "^0.2.0",
|
||||||
"phantomjs-prebuilt": "^2.1.7",
|
"phantomjs-prebuilt": "^2.1.7",
|
||||||
"protractor": "^3.0.0",
|
"protractor": "^3.0.0",
|
||||||
"reflect-metadata": "^0.1.2",
|
"reflect-metadata": "^0.1.2",
|
||||||
|
"remap-istanbul": "^0.6.4",
|
||||||
"require-dir": "^0.3.0",
|
"require-dir": "^0.3.0",
|
||||||
|
"rollup-plugin-commonjs": "^2.2.1",
|
||||||
"run-sequence": "^1.1.5",
|
"run-sequence": "^1.1.5",
|
||||||
|
"rxjs": "5.0.0-beta.6",
|
||||||
|
"scrollparent": "^1.0.0",
|
||||||
"shelljs": "^0.7.0",
|
"shelljs": "^0.7.0",
|
||||||
"should": "^8.0.2",
|
"should": "^8.0.2",
|
||||||
"sinon": "^1.17.2",
|
"sinon": "^1.17.2",
|
||||||
"systemjs-builder": "^0.15.16",
|
"systemjs-builder": "^0.15.16",
|
||||||
|
"tslint": "^3.11.0",
|
||||||
|
"tslint-stylish": "^2.1.0-beta",
|
||||||
|
"typescript": "^1.8.10",
|
||||||
"vinyl-paths": "^2.0.0",
|
"vinyl-paths": "^2.0.0",
|
||||||
"yargs": "^4.7.1",
|
"yargs": "^4.7.1",
|
||||||
"zone.js": "^0.6.12"
|
"zone.js": "^0.6.12"
|
||||||
|
|
|
@ -11,7 +11,7 @@ let config = {
|
||||||
// add jasmine spec reporter
|
// add jasmine spec reporter
|
||||||
jasmine.getEnv().addReporter(new SpecReporter({displaySpecDuration: true}));
|
jasmine.getEnv().addReporter(new SpecReporter({displaySpecDuration: true}));
|
||||||
// load APIs.guru list
|
// load APIs.guru list
|
||||||
return loadJson('https://apis-guru.github.io/api-models/api/v1/list.json').then((list) => {
|
return loadJson('https://api.apis.guru/v2/list.json').then((list) => {
|
||||||
global.apisGuruList = list;
|
global.apisGuruList = list;
|
||||||
return browser.getCapabilities().then(function (cap) {
|
return browser.getCapabilities().then(function (cap) {
|
||||||
browser.isIE = cap.browserName === 'internet explorer'
|
browser.isIE = cap.browserName === 'internet explorer'
|
||||||
|
|
58
rollup.config.js
Normal file
58
rollup.config.js
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
import nodeResolve from 'rollup-plugin-node-resolve';
|
||||||
|
import commonjs from 'rollup-plugin-commonjs';
|
||||||
|
|
||||||
|
class RollupNG2 {
|
||||||
|
constructor(options) {
|
||||||
|
this.options = options;
|
||||||
|
}
|
||||||
|
resolveId(id, from) {
|
||||||
|
if (id.startsWith('rxjs/')) {
|
||||||
|
return `${__dirname}/node_modules/rxjs-es/${id.replace('rxjs/', '')}.js`;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(id.startsWith('@angular/core')){
|
||||||
|
if(id === '@angular/core'){
|
||||||
|
return `${__dirname}/node_modules/@angular/core/esm/index.js`;
|
||||||
|
}
|
||||||
|
return `${__dirname}/node_modules/@angular/core/esm/${id.split('@angular/core').pop()}.js`;
|
||||||
|
}
|
||||||
|
if(id.startsWith('@angular/common')){
|
||||||
|
if(id === '@angular/common'){
|
||||||
|
return `${__dirname}/node_modules/@angular/common/esm/index.js`;
|
||||||
|
}
|
||||||
|
return `${__dirname}/node_modules/@angular/common/esm/${id.split('@angular/common').pop()}.js`;
|
||||||
|
}
|
||||||
|
if(id.startsWith('@angular/platform-browser-dynamic')){
|
||||||
|
if(id === '@angular/platform-browser-dynamic'){
|
||||||
|
return `${__dirname}/node_modules/@angular/platform-browser-dynamic/esm/index.js`;
|
||||||
|
}
|
||||||
|
return `${__dirname}/node_modules/@angular/platform-browser-dynamic/esm/${id.split('@angular/platform-browser-dynamic').pop()}.js`;
|
||||||
|
}
|
||||||
|
if(id.startsWith('@angular/platform-browser')){
|
||||||
|
if(id === '@angular/platform-browser'){
|
||||||
|
return `${__dirname}/node_modules/@angular/platform-browser/esm/index.js`;
|
||||||
|
}
|
||||||
|
return `${__dirname}/node_modules/@angular/platform-browser/esm/${id.split('@angular/platform-browser').pop()}.js`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const rollupNG2 = (config) => new RollupNG2(config);
|
||||||
|
export default {
|
||||||
|
entry: './.tmp-es/index.js',
|
||||||
|
dest: 'dist/vendor.es2015.js',
|
||||||
|
format: 'iife',
|
||||||
|
moduleName: 'ReDoc',
|
||||||
|
plugins: [
|
||||||
|
//typescript(),
|
||||||
|
rollupNG2(),
|
||||||
|
nodeResolve({ jsnext: true, main: true, browser: true }),
|
||||||
|
commonjs({
|
||||||
|
// non-CommonJS modules will be ignored, but you can also
|
||||||
|
// specifically include/exclude files
|
||||||
|
include: 'node_modules/**', // Default: undefined
|
||||||
|
exclude: [ 'node_modules/@angular/**', 'node_modules/rxjs/**', 'node_modules/rxjs-es/**' ], // Default: undefined
|
||||||
|
namedExports: { 'marked': ['marked'] } // Default: undefined
|
||||||
|
})
|
||||||
|
]
|
||||||
|
}
|
103
system.config.js
103
system.config.js
|
@ -15,39 +15,18 @@ System.config({
|
||||||
"npm:*": "jspm_packages/npm/*"
|
"npm:*": "jspm_packages/npm/*"
|
||||||
},
|
},
|
||||||
|
|
||||||
packages: {
|
|
||||||
"npm:swagger-schema-official@2.0.0-bab6bed": {
|
|
||||||
"defaultExtension": "json",
|
|
||||||
"main": "schema.json",
|
|
||||||
"meta": {
|
|
||||||
"*": {
|
|
||||||
"loader": "json"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
meta: {
|
|
||||||
"jspm_packages/npm/json-formatter-js@0.2.0/src/*": {
|
|
||||||
"format": "esm"
|
|
||||||
},
|
|
||||||
"jspm_packages/npm/json-schema-view-js@0.2.0/src/*": {
|
|
||||||
"format": "esm"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
map: {
|
map: {
|
||||||
"@angular/common": "npm:@angular/common@2.0.0-rc.1",
|
"@angular/common": "npm:@angular/common@2.0.0-rc.1",
|
||||||
"@angular/compiler": "npm:@angular/compiler@2.0.0-rc.1",
|
"@angular/compiler": "npm:@angular/compiler@2.0.0-rc.1",
|
||||||
"@angular/core": "npm:@angular/core@2.0.0-rc.1",
|
"@angular/core": "npm:@angular/core@2.0.0-rc.1",
|
||||||
"@angular/platform-browser": "npm:@angular/platform-browser@2.0.0-rc.1",
|
"@angular/platform-browser": "npm:@angular/platform-browser@2.0.0-rc.1",
|
||||||
"@angular/platform-browser-dynamic": "npm:@angular/platform-browser-dynamic@2.0.0-rc.1",
|
"@angular/platform-browser-dynamic": "npm:@angular/platform-browser-dynamic@2.0.0-rc.1",
|
||||||
"Robdel12/DropKick": "github:Robdel12/DropKick@2.1.7",
|
|
||||||
"babel": "npm:babel-core@5.8.34",
|
"babel": "npm:babel-core@5.8.34",
|
||||||
"babel-runtime": "npm:babel-runtime@5.8.34",
|
"babel-runtime": "npm:babel-runtime@5.8.34",
|
||||||
"clean-css": "npm:clean-css@3.4.6",
|
"clean-css": "npm:clean-css@3.4.17",
|
||||||
"core-js": "npm:core-js@1.2.6",
|
"core-js": "npm:core-js@1.2.6",
|
||||||
"css": "github:systemjs/plugin-css@0.1.18",
|
"css": "github:systemjs/plugin-css@0.1.18",
|
||||||
|
"dropkickjs": "npm:dropkickjs@2.1.8",
|
||||||
"es6-shim": "github:es-shims/es6-shim@0.33.6",
|
"es6-shim": "github:es-shims/es6-shim@0.33.6",
|
||||||
"hint.css": "npm:hint.css@2.2.1",
|
"hint.css": "npm:hint.css@2.2.1",
|
||||||
"json": "github:systemjs/plugin-json@0.1.2",
|
"json": "github:systemjs/plugin-json@0.1.2",
|
||||||
|
@ -55,7 +34,7 @@ System.config({
|
||||||
"json-pointer": "npm:json-pointer@0.3.0",
|
"json-pointer": "npm:json-pointer@0.3.0",
|
||||||
"json-schema-ref-parser": "npm:json-schema-ref-parser@3.1.2",
|
"json-schema-ref-parser": "npm:json-schema-ref-parser@3.1.2",
|
||||||
"marked": "npm:marked@0.3.5",
|
"marked": "npm:marked@0.3.5",
|
||||||
"openapi-sampler": "npm:openapi-sampler@0.1.2",
|
"openapi-sampler": "npm:openapi-sampler@0.2.0",
|
||||||
"prismjs": "npm:prismjs@1.3.0",
|
"prismjs": "npm:prismjs@1.3.0",
|
||||||
"rxjs": "npm:rxjs@5.0.0-beta.6",
|
"rxjs": "npm:rxjs@5.0.0-beta.6",
|
||||||
"scrollparent": "npm:scrollparent@0.1.0",
|
"scrollparent": "npm:scrollparent@0.1.0",
|
||||||
|
@ -63,7 +42,7 @@ System.config({
|
||||||
"systemjs/plugin-json": "github:systemjs/plugin-json@0.1.2",
|
"systemjs/plugin-json": "github:systemjs/plugin-json@0.1.2",
|
||||||
"zone.js": "npm:zone.js@0.6.12",
|
"zone.js": "npm:zone.js@0.6.12",
|
||||||
"github:jspm/nodelibs-assert@0.1.0": {
|
"github:jspm/nodelibs-assert@0.1.0": {
|
||||||
"assert": "npm:assert@1.4.0"
|
"assert": "npm:assert@1.4.1"
|
||||||
},
|
},
|
||||||
"github:jspm/nodelibs-buffer@0.1.0": {
|
"github:jspm/nodelibs-buffer@0.1.0": {
|
||||||
"buffer": "npm:buffer@3.6.0"
|
"buffer": "npm:buffer@3.6.0"
|
||||||
|
@ -105,7 +84,7 @@ System.config({
|
||||||
"path-browserify": "npm:path-browserify@0.0.0"
|
"path-browserify": "npm:path-browserify@0.0.0"
|
||||||
},
|
},
|
||||||
"github:jspm/nodelibs-process@0.1.2": {
|
"github:jspm/nodelibs-process@0.1.2": {
|
||||||
"process": "npm:process@0.11.3"
|
"process": "npm:process@0.11.5"
|
||||||
},
|
},
|
||||||
"github:jspm/nodelibs-punycode@0.1.0": {
|
"github:jspm/nodelibs-punycode@0.1.0": {
|
||||||
"punycode": "npm:punycode@1.3.2"
|
"punycode": "npm:punycode@1.3.2"
|
||||||
|
@ -176,14 +155,13 @@ System.config({
|
||||||
"sprintf-js": "npm:sprintf-js@1.0.3",
|
"sprintf-js": "npm:sprintf-js@1.0.3",
|
||||||
"util": "github:jspm/nodelibs-util@0.1.0"
|
"util": "github:jspm/nodelibs-util@0.1.0"
|
||||||
},
|
},
|
||||||
"npm:asn1.js@4.6.0": {
|
"npm:asn1.js@4.6.2": {
|
||||||
"assert": "github:jspm/nodelibs-assert@0.1.0",
|
"assert": "github:jspm/nodelibs-assert@0.1.0",
|
||||||
"bn.js": "npm:bn.js@4.11.3",
|
"bn.js": "npm:bn.js@4.11.4",
|
||||||
"buffer": "github:jspm/nodelibs-buffer@0.1.0",
|
"buffer": "github:jspm/nodelibs-buffer@0.1.0",
|
||||||
"fs": "github:jspm/nodelibs-fs@0.1.2",
|
"fs": "github:jspm/nodelibs-fs@0.1.2",
|
||||||
"inherits": "npm:inherits@2.0.1",
|
"inherits": "npm:inherits@2.0.1",
|
||||||
"minimalistic-assert": "npm:minimalistic-assert@1.0.0",
|
"minimalistic-assert": "npm:minimalistic-assert@1.0.0",
|
||||||
"systemjs-json": "github:systemjs/plugin-json@0.1.2",
|
|
||||||
"vm": "github:jspm/nodelibs-vm@0.1.0"
|
"vm": "github:jspm/nodelibs-vm@0.1.0"
|
||||||
},
|
},
|
||||||
"npm:asn1@0.2.3": {
|
"npm:asn1@0.2.3": {
|
||||||
|
@ -206,10 +184,9 @@ System.config({
|
||||||
"stream": "github:jspm/nodelibs-stream@0.1.0",
|
"stream": "github:jspm/nodelibs-stream@0.1.0",
|
||||||
"util": "github:jspm/nodelibs-util@0.1.0"
|
"util": "github:jspm/nodelibs-util@0.1.0"
|
||||||
},
|
},
|
||||||
"npm:assert@1.4.0": {
|
"npm:assert@1.4.1": {
|
||||||
"assert": "github:jspm/nodelibs-assert@0.1.0",
|
"assert": "github:jspm/nodelibs-assert@0.1.0",
|
||||||
"buffer": "github:jspm/nodelibs-buffer@0.1.0",
|
"buffer": "github:jspm/nodelibs-buffer@0.1.0",
|
||||||
"buffer-shims": "npm:buffer-shims@1.0.0",
|
|
||||||
"process": "github:jspm/nodelibs-process@0.1.2",
|
"process": "github:jspm/nodelibs-process@0.1.2",
|
||||||
"util": "npm:util@0.10.3"
|
"util": "npm:util@0.10.3"
|
||||||
},
|
},
|
||||||
|
@ -235,9 +212,8 @@ System.config({
|
||||||
"readable-stream": "npm:readable-stream@2.0.6",
|
"readable-stream": "npm:readable-stream@2.0.6",
|
||||||
"util": "github:jspm/nodelibs-util@0.1.0"
|
"util": "github:jspm/nodelibs-util@0.1.0"
|
||||||
},
|
},
|
||||||
"npm:bn.js@4.11.3": {
|
"npm:bn.js@4.11.4": {
|
||||||
"buffer": "github:jspm/nodelibs-buffer@0.1.0",
|
"buffer": "github:jspm/nodelibs-buffer@0.1.0"
|
||||||
"systemjs-json": "github:systemjs/plugin-json@0.1.2"
|
|
||||||
},
|
},
|
||||||
"npm:boom@2.10.1": {
|
"npm:boom@2.10.1": {
|
||||||
"hoek": "npm:hoek@2.16.3",
|
"hoek": "npm:hoek@2.16.3",
|
||||||
|
@ -270,7 +246,7 @@ System.config({
|
||||||
"systemjs-json": "github:systemjs/plugin-json@0.1.2"
|
"systemjs-json": "github:systemjs/plugin-json@0.1.2"
|
||||||
},
|
},
|
||||||
"npm:browserify-rsa@4.0.1": {
|
"npm:browserify-rsa@4.0.1": {
|
||||||
"bn.js": "npm:bn.js@4.11.3",
|
"bn.js": "npm:bn.js@4.11.4",
|
||||||
"buffer": "github:jspm/nodelibs-buffer@0.1.0",
|
"buffer": "github:jspm/nodelibs-buffer@0.1.0",
|
||||||
"constants": "github:jspm/nodelibs-constants@0.1.0",
|
"constants": "github:jspm/nodelibs-constants@0.1.0",
|
||||||
"crypto": "github:jspm/nodelibs-crypto@0.1.0",
|
"crypto": "github:jspm/nodelibs-crypto@0.1.0",
|
||||||
|
@ -278,13 +254,13 @@ System.config({
|
||||||
"systemjs-json": "github:systemjs/plugin-json@0.1.2"
|
"systemjs-json": "github:systemjs/plugin-json@0.1.2"
|
||||||
},
|
},
|
||||||
"npm:browserify-sign@4.0.0": {
|
"npm:browserify-sign@4.0.0": {
|
||||||
"bn.js": "npm:bn.js@4.11.3",
|
"bn.js": "npm:bn.js@4.11.4",
|
||||||
"browserify-rsa": "npm:browserify-rsa@4.0.1",
|
"browserify-rsa": "npm:browserify-rsa@4.0.1",
|
||||||
"buffer": "github:jspm/nodelibs-buffer@0.1.0",
|
"buffer": "github:jspm/nodelibs-buffer@0.1.0",
|
||||||
"create-hash": "npm:create-hash@1.1.2",
|
"create-hash": "npm:create-hash@1.1.2",
|
||||||
"create-hmac": "npm:create-hmac@1.1.4",
|
"create-hmac": "npm:create-hmac@1.1.4",
|
||||||
"crypto": "github:jspm/nodelibs-crypto@0.1.0",
|
"crypto": "github:jspm/nodelibs-crypto@0.1.0",
|
||||||
"elliptic": "npm:elliptic@6.2.3",
|
"elliptic": "npm:elliptic@6.3.1",
|
||||||
"inherits": "npm:inherits@2.0.1",
|
"inherits": "npm:inherits@2.0.1",
|
||||||
"parse-asn1": "npm:parse-asn1@5.0.0",
|
"parse-asn1": "npm:parse-asn1@5.0.0",
|
||||||
"stream": "github:jspm/nodelibs-stream@0.1.0"
|
"stream": "github:jspm/nodelibs-stream@0.1.0"
|
||||||
|
@ -297,9 +273,6 @@ System.config({
|
||||||
"readable-stream": "npm:readable-stream@2.0.6",
|
"readable-stream": "npm:readable-stream@2.0.6",
|
||||||
"util": "github:jspm/nodelibs-util@0.1.0"
|
"util": "github:jspm/nodelibs-util@0.1.0"
|
||||||
},
|
},
|
||||||
"npm:buffer-shims@1.0.0": {
|
|
||||||
"buffer": "github:jspm/nodelibs-buffer@0.1.0"
|
|
||||||
},
|
|
||||||
"npm:buffer-xor@1.0.3": {
|
"npm:buffer-xor@1.0.3": {
|
||||||
"buffer": "github:jspm/nodelibs-buffer@0.1.0",
|
"buffer": "github:jspm/nodelibs-buffer@0.1.0",
|
||||||
"systemjs-json": "github:systemjs/plugin-json@0.1.2"
|
"systemjs-json": "github:systemjs/plugin-json@0.1.2"
|
||||||
|
@ -338,7 +311,7 @@ System.config({
|
||||||
"string_decoder": "github:jspm/nodelibs-string_decoder@0.1.0",
|
"string_decoder": "github:jspm/nodelibs-string_decoder@0.1.0",
|
||||||
"systemjs-json": "github:systemjs/plugin-json@0.1.2"
|
"systemjs-json": "github:systemjs/plugin-json@0.1.2"
|
||||||
},
|
},
|
||||||
"npm:clean-css@3.4.6": {
|
"npm:clean-css@3.4.17": {
|
||||||
"buffer": "github:jspm/nodelibs-buffer@0.1.0",
|
"buffer": "github:jspm/nodelibs-buffer@0.1.0",
|
||||||
"commander": "npm:commander@2.8.1",
|
"commander": "npm:commander@2.8.1",
|
||||||
"fs": "github:jspm/nodelibs-fs@0.1.2",
|
"fs": "github:jspm/nodelibs-fs@0.1.2",
|
||||||
|
@ -386,10 +359,10 @@ System.config({
|
||||||
"buffer": "github:jspm/nodelibs-buffer@0.1.0"
|
"buffer": "github:jspm/nodelibs-buffer@0.1.0"
|
||||||
},
|
},
|
||||||
"npm:create-ecdh@4.0.0": {
|
"npm:create-ecdh@4.0.0": {
|
||||||
"bn.js": "npm:bn.js@4.11.3",
|
"bn.js": "npm:bn.js@4.11.4",
|
||||||
"buffer": "github:jspm/nodelibs-buffer@0.1.0",
|
"buffer": "github:jspm/nodelibs-buffer@0.1.0",
|
||||||
"crypto": "github:jspm/nodelibs-crypto@0.1.0",
|
"crypto": "github:jspm/nodelibs-crypto@0.1.0",
|
||||||
"elliptic": "npm:elliptic@6.2.3"
|
"elliptic": "npm:elliptic@6.3.1"
|
||||||
},
|
},
|
||||||
"npm:create-hash@1.1.2": {
|
"npm:create-hash@1.1.2": {
|
||||||
"buffer": "github:jspm/nodelibs-buffer@0.1.0",
|
"buffer": "github:jspm/nodelibs-buffer@0.1.0",
|
||||||
|
@ -424,7 +397,7 @@ System.config({
|
||||||
"randombytes": "npm:randombytes@2.0.3",
|
"randombytes": "npm:randombytes@2.0.3",
|
||||||
"systemjs-json": "github:systemjs/plugin-json@0.1.2"
|
"systemjs-json": "github:systemjs/plugin-json@0.1.2"
|
||||||
},
|
},
|
||||||
"npm:dashdash@1.13.1": {
|
"npm:dashdash@1.14.0": {
|
||||||
"assert-plus": "npm:assert-plus@1.0.0",
|
"assert-plus": "npm:assert-plus@1.0.0",
|
||||||
"fs": "github:jspm/nodelibs-fs@0.1.2",
|
"fs": "github:jspm/nodelibs-fs@0.1.2",
|
||||||
"path": "github:jspm/nodelibs-path@0.1.0",
|
"path": "github:jspm/nodelibs-path@0.1.0",
|
||||||
|
@ -432,12 +405,7 @@ System.config({
|
||||||
"util": "github:jspm/nodelibs-util@0.1.0"
|
"util": "github:jspm/nodelibs-util@0.1.0"
|
||||||
},
|
},
|
||||||
"npm:debug@2.2.0": {
|
"npm:debug@2.2.0": {
|
||||||
"fs": "github:jspm/nodelibs-fs@0.1.2",
|
"ms": "npm:ms@0.7.1"
|
||||||
"ms": "npm:ms@0.7.1",
|
|
||||||
"net": "github:jspm/nodelibs-net@0.1.2",
|
|
||||||
"process": "github:jspm/nodelibs-process@0.1.2",
|
|
||||||
"tty": "github:jspm/nodelibs-tty@0.1.0",
|
|
||||||
"util": "github:jspm/nodelibs-util@0.1.0"
|
|
||||||
},
|
},
|
||||||
"npm:delayed-stream@1.0.0": {
|
"npm:delayed-stream@1.0.0": {
|
||||||
"stream": "github:jspm/nodelibs-stream@0.1.0",
|
"stream": "github:jspm/nodelibs-stream@0.1.0",
|
||||||
|
@ -449,20 +417,23 @@ System.config({
|
||||||
"minimalistic-assert": "npm:minimalistic-assert@1.0.0"
|
"minimalistic-assert": "npm:minimalistic-assert@1.0.0"
|
||||||
},
|
},
|
||||||
"npm:diffie-hellman@5.0.2": {
|
"npm:diffie-hellman@5.0.2": {
|
||||||
"bn.js": "npm:bn.js@4.11.3",
|
"bn.js": "npm:bn.js@4.11.4",
|
||||||
"buffer": "github:jspm/nodelibs-buffer@0.1.0",
|
"buffer": "github:jspm/nodelibs-buffer@0.1.0",
|
||||||
"crypto": "github:jspm/nodelibs-crypto@0.1.0",
|
"crypto": "github:jspm/nodelibs-crypto@0.1.0",
|
||||||
"miller-rabin": "npm:miller-rabin@4.0.0",
|
"miller-rabin": "npm:miller-rabin@4.0.0",
|
||||||
"randombytes": "npm:randombytes@2.0.3",
|
"randombytes": "npm:randombytes@2.0.3",
|
||||||
"systemjs-json": "github:systemjs/plugin-json@0.1.2"
|
"systemjs-json": "github:systemjs/plugin-json@0.1.2"
|
||||||
},
|
},
|
||||||
|
"npm:dropkickjs@2.1.8": {
|
||||||
|
"process": "github:jspm/nodelibs-process@0.1.2"
|
||||||
|
},
|
||||||
"npm:ecc-jsbn@0.1.1": {
|
"npm:ecc-jsbn@0.1.1": {
|
||||||
"buffer": "github:jspm/nodelibs-buffer@0.1.0",
|
"buffer": "github:jspm/nodelibs-buffer@0.1.0",
|
||||||
"crypto": "github:jspm/nodelibs-crypto@0.1.0",
|
"crypto": "github:jspm/nodelibs-crypto@0.1.0",
|
||||||
"jsbn": "npm:jsbn@0.1.0"
|
"jsbn": "npm:jsbn@0.1.0"
|
||||||
},
|
},
|
||||||
"npm:elliptic@6.2.3": {
|
"npm:elliptic@6.3.1": {
|
||||||
"bn.js": "npm:bn.js@4.11.3",
|
"bn.js": "npm:bn.js@4.11.4",
|
||||||
"brorand": "npm:brorand@1.0.5",
|
"brorand": "npm:brorand@1.0.5",
|
||||||
"hash.js": "npm:hash.js@1.0.3",
|
"hash.js": "npm:hash.js@1.0.3",
|
||||||
"inherits": "npm:inherits@2.0.1",
|
"inherits": "npm:inherits@2.0.1",
|
||||||
|
@ -615,8 +586,6 @@ System.config({
|
||||||
"es6-promise": "npm:es6-promise@3.2.1",
|
"es6-promise": "npm:es6-promise@3.2.1",
|
||||||
"events": "github:jspm/nodelibs-events@0.1.1",
|
"events": "github:jspm/nodelibs-events@0.1.1",
|
||||||
"fs": "github:jspm/nodelibs-fs@0.1.2",
|
"fs": "github:jspm/nodelibs-fs@0.1.2",
|
||||||
"http": "npm:stream-http@2.3.0",
|
|
||||||
"https": "npm:stream-http@2.3.0",
|
|
||||||
"js-yaml": "npm:js-yaml@3.6.1",
|
"js-yaml": "npm:js-yaml@3.6.1",
|
||||||
"ono": "npm:ono@2.2.1",
|
"ono": "npm:ono@2.2.1",
|
||||||
"process": "github:jspm/nodelibs-process@0.1.2",
|
"process": "github:jspm/nodelibs-process@0.1.2",
|
||||||
|
@ -650,7 +619,7 @@ System.config({
|
||||||
"lodash._stringtopath": "npm:lodash._stringtopath@4.8.0"
|
"lodash._stringtopath": "npm:lodash._stringtopath@4.8.0"
|
||||||
},
|
},
|
||||||
"npm:miller-rabin@4.0.0": {
|
"npm:miller-rabin@4.0.0": {
|
||||||
"bn.js": "npm:bn.js@4.11.3",
|
"bn.js": "npm:bn.js@4.11.4",
|
||||||
"brorand": "npm:brorand@1.0.5"
|
"brorand": "npm:brorand@1.0.5"
|
||||||
},
|
},
|
||||||
"npm:mime-db@1.23.0": {
|
"npm:mime-db@1.23.0": {
|
||||||
|
@ -672,6 +641,9 @@ System.config({
|
||||||
"process": "github:jspm/nodelibs-process@0.1.2",
|
"process": "github:jspm/nodelibs-process@0.1.2",
|
||||||
"util": "github:jspm/nodelibs-util@0.1.0"
|
"util": "github:jspm/nodelibs-util@0.1.0"
|
||||||
},
|
},
|
||||||
|
"npm:openapi-sampler@0.2.0": {
|
||||||
|
"process": "github:jspm/nodelibs-process@0.1.2"
|
||||||
|
},
|
||||||
"npm:os-browserify@0.1.2": {
|
"npm:os-browserify@0.1.2": {
|
||||||
"os": "github:jspm/nodelibs-os@0.1.0"
|
"os": "github:jspm/nodelibs-os@0.1.0"
|
||||||
},
|
},
|
||||||
|
@ -680,7 +652,7 @@ System.config({
|
||||||
"process": "github:jspm/nodelibs-process@0.1.2"
|
"process": "github:jspm/nodelibs-process@0.1.2"
|
||||||
},
|
},
|
||||||
"npm:parse-asn1@5.0.0": {
|
"npm:parse-asn1@5.0.0": {
|
||||||
"asn1.js": "npm:asn1.js@4.6.0",
|
"asn1.js": "npm:asn1.js@4.6.2",
|
||||||
"browserify-aes": "npm:browserify-aes@1.0.6",
|
"browserify-aes": "npm:browserify-aes@1.0.6",
|
||||||
"buffer": "github:jspm/nodelibs-buffer@0.1.0",
|
"buffer": "github:jspm/nodelibs-buffer@0.1.0",
|
||||||
"create-hash": "npm:create-hash@1.1.2",
|
"create-hash": "npm:create-hash@1.1.2",
|
||||||
|
@ -713,13 +685,16 @@ System.config({
|
||||||
"systemjs-json": "github:systemjs/plugin-json@0.1.2"
|
"systemjs-json": "github:systemjs/plugin-json@0.1.2"
|
||||||
},
|
},
|
||||||
"npm:process-nextick-args@1.0.7": {
|
"npm:process-nextick-args@1.0.7": {
|
||||||
"process": "github:jspm/nodelibs-process@0.1.2"
|
"process": "github:jspm/nodelibs-process@0.1.2",
|
||||||
|
"systemjs-json": "github:systemjs/plugin-json@0.1.2"
|
||||||
},
|
},
|
||||||
"npm:process@0.11.3": {
|
"npm:process@0.11.5": {
|
||||||
"assert": "github:jspm/nodelibs-assert@0.1.0"
|
"assert": "github:jspm/nodelibs-assert@0.1.0",
|
||||||
|
"fs": "github:jspm/nodelibs-fs@0.1.2",
|
||||||
|
"vm": "github:jspm/nodelibs-vm@0.1.0"
|
||||||
},
|
},
|
||||||
"npm:public-encrypt@4.0.0": {
|
"npm:public-encrypt@4.0.0": {
|
||||||
"bn.js": "npm:bn.js@4.11.3",
|
"bn.js": "npm:bn.js@4.11.4",
|
||||||
"browserify-rsa": "npm:browserify-rsa@4.0.1",
|
"browserify-rsa": "npm:browserify-rsa@4.0.1",
|
||||||
"buffer": "github:jspm/nodelibs-buffer@0.1.0",
|
"buffer": "github:jspm/nodelibs-buffer@0.1.0",
|
||||||
"create-hash": "npm:create-hash@1.1.2",
|
"create-hash": "npm:create-hash@1.1.2",
|
||||||
|
@ -832,7 +807,7 @@ System.config({
|
||||||
"assert-plus": "npm:assert-plus@1.0.0",
|
"assert-plus": "npm:assert-plus@1.0.0",
|
||||||
"buffer": "github:jspm/nodelibs-buffer@0.1.0",
|
"buffer": "github:jspm/nodelibs-buffer@0.1.0",
|
||||||
"crypto": "github:jspm/nodelibs-crypto@0.1.0",
|
"crypto": "github:jspm/nodelibs-crypto@0.1.0",
|
||||||
"dashdash": "npm:dashdash@1.13.1",
|
"dashdash": "npm:dashdash@1.14.0",
|
||||||
"ecc-jsbn": "npm:ecc-jsbn@0.1.1",
|
"ecc-jsbn": "npm:ecc-jsbn@0.1.1",
|
||||||
"getpass": "npm:getpass@0.1.6",
|
"getpass": "npm:getpass@0.1.6",
|
||||||
"jodid25519": "npm:jodid25519@1.0.2",
|
"jodid25519": "npm:jodid25519@1.0.2",
|
||||||
|
@ -877,7 +852,7 @@ System.config({
|
||||||
"process": "github:jspm/nodelibs-process@0.1.2"
|
"process": "github:jspm/nodelibs-process@0.1.2"
|
||||||
},
|
},
|
||||||
"npm:timers-browserify@1.4.2": {
|
"npm:timers-browserify@1.4.2": {
|
||||||
"process": "npm:process@0.11.3"
|
"process": "npm:process@0.11.5"
|
||||||
},
|
},
|
||||||
"npm:to-arraybuffer@1.0.1": {
|
"npm:to-arraybuffer@1.0.1": {
|
||||||
"buffer": "github:jspm/nodelibs-buffer@0.1.0",
|
"buffer": "github:jspm/nodelibs-buffer@0.1.0",
|
||||||
|
@ -932,7 +907,7 @@ System.config({
|
||||||
"process": "github:jspm/nodelibs-process@0.1.2",
|
"process": "github:jspm/nodelibs-process@0.1.2",
|
||||||
"request": "npm:request@2.72.0",
|
"request": "npm:request@2.72.0",
|
||||||
"systemjs-json": "github:systemjs/plugin-json@0.1.2",
|
"systemjs-json": "github:systemjs/plugin-json@0.1.2",
|
||||||
"validator": "npm:validator@5.2.0"
|
"validator": "npm:validator@5.4.0"
|
||||||
},
|
},
|
||||||
"npm:zone.js@0.6.12": {
|
"npm:zone.js@0.6.12": {
|
||||||
"buffer": "github:jspm/nodelibs-buffer@0.1.0",
|
"buffer": "github:jspm/nodelibs-buffer@0.1.0",
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
import {By} from '@angular/platform-browser';
|
import {By} from '@angular/platform-browser';
|
||||||
|
import {getDOM} from '@angular/platform-browser/src/dom/dom_adapter';
|
||||||
|
|
||||||
/** Gets a child DebugElement by tag name. */
|
/** Gets a child DebugElement by tag name. */
|
||||||
export function getChildDebugElement(parent, tagName) {
|
export function getChildDebugElement(parent, tagName) {
|
||||||
|
@ -19,9 +20,7 @@ export function getChildDebugElementAll(parent, tagName) {
|
||||||
|
|
||||||
export function mouseclick( element ) {
|
export function mouseclick( element ) {
|
||||||
// create a mouse click event
|
// create a mouse click event
|
||||||
var event = document.createEvent( 'MouseEvents' );
|
var dispatchedEvent = getDOM().createMouseEvent('click');
|
||||||
event.initMouseEvent( 'click', true, true, window, 1, 0, 0 );
|
|
||||||
|
|
||||||
// send click to element
|
// send click to element
|
||||||
element.dispatchEvent( event );
|
getDOM().dispatchEvent(element, dispatchedEvent);
|
||||||
}
|
}
|
|
@ -1,11 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
import {setBaseTestProviders} from '@angular/core/testing';
|
|
||||||
|
|
||||||
import {
|
|
||||||
TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
|
|
||||||
TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS
|
|
||||||
} from '@angular/platform-browser-dynamic/testing';
|
|
||||||
|
|
||||||
|
|
||||||
setBaseTestProviders(TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS, [TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS]);
|
|
20
tests/setup.ts
Normal file
20
tests/setup.ts
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
import {setBaseTestProviders} from '@angular/core/testing';
|
||||||
|
import { BrowserDomAdapter } from '@angular/platform-browser/src/browser/browser_adapter';
|
||||||
|
import { OptionsService, RedocEventsService} from '../lib/services/index';
|
||||||
|
import { provide } from '@angular/core';
|
||||||
|
|
||||||
|
import {
|
||||||
|
TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
|
||||||
|
TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS
|
||||||
|
} from '@angular/platform-browser-dynamic/testing';
|
||||||
|
|
||||||
|
setBaseTestProviders(
|
||||||
|
[
|
||||||
|
TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
|
||||||
|
provide(BrowserDomAdapter, {useClass: BrowserDomAdapter}),
|
||||||
|
provide(OptionsService, {useClass: OptionsService}),
|
||||||
|
provide(RedocEventsService, {useClass: RedocEventsService})
|
||||||
|
],
|
||||||
|
[TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS]);
|
|
@ -1,6 +1,6 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
import {JsonPointer} from 'lib/utils/JsonPointer';
|
import {JsonPointer} from '../../lib/utils/JsonPointer';
|
||||||
// test extended JsonPointer
|
// test extended JsonPointer
|
||||||
describe('Utils', () => {
|
describe('Utils', () => {
|
||||||
describe('JsonPointer', () => {
|
describe('JsonPointer', () => {
|
|
@ -1,6 +1,6 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
import SchemaManager from 'lib/utils/SchemaManager';
|
import { SchemaManager } from '../../lib/utils/SchemaManager';
|
||||||
describe('Utils', () => {
|
describe('Utils', () => {
|
||||||
describe('Schema manager', () => {
|
describe('Schema manager', () => {
|
||||||
let schemaMgr;
|
let schemaMgr;
|
||||||
|
@ -9,10 +9,6 @@ describe('Utils', () => {
|
||||||
schemaMgr = new SchemaManager();
|
schemaMgr = new SchemaManager();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('Should initialize with empty schema', ()=> {
|
|
||||||
schemaMgr.schema.should.be.empty;
|
|
||||||
});
|
|
||||||
|
|
||||||
it('Should be a singleton', ()=> {
|
it('Should be a singleton', ()=> {
|
||||||
(new SchemaManager()).should.be.equal(schemaMgr);
|
(new SchemaManager()).should.be.equal(schemaMgr);
|
||||||
SchemaManager.instance().should.be.equal(schemaMgr);
|
SchemaManager.instance().should.be.equal(schemaMgr);
|
||||||
|
@ -50,7 +46,7 @@ describe('Utils', () => {
|
||||||
|
|
||||||
it('should contain non-empty schema', ()=> {
|
it('should contain non-empty schema', ()=> {
|
||||||
schemaMgr.schema.should.be.an.Object();
|
schemaMgr.schema.should.be.an.Object();
|
||||||
schemaMgr.schema.should.be.not.empty;
|
schemaMgr.schema.should.be.not.empty();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should correctly init api url', ()=> {
|
it('should correctly init api url', ()=> {
|
||||||
|
@ -93,7 +89,7 @@ describe('Utils', () => {
|
||||||
it('should return empty array for non-specified tags', () => {
|
it('should return empty array for non-specified tags', () => {
|
||||||
delete schemaMgr._schema.tags;
|
delete schemaMgr._schema.tags;
|
||||||
let tagsMap = schemaMgr.getTagsMap();
|
let tagsMap = schemaMgr.getTagsMap();
|
||||||
tagsMap.should.be.empty;
|
tagsMap.should.be.empty();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -155,8 +151,8 @@ describe('Utils', () => {
|
||||||
|
|
||||||
it('should map x-traitTag to empty methods list', () => {
|
it('should map x-traitTag to empty methods list', () => {
|
||||||
let [, info] = entries[0];
|
let [, info] = entries[0];
|
||||||
info['x-traitTag'].should.be.true;
|
info['x-traitTag'].should.be.true();
|
||||||
info.methods.should.be.empty;
|
info.methods.should.be.empty();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('methods for tag should contain valid pointer and summary', () => {
|
it('methods for tag should contain valid pointer and summary', () => {
|
||||||
|
@ -238,13 +234,16 @@ describe('Utils', () => {
|
||||||
let deriveDefs = schemaMgr.findDerivedDefinitions('#/definitions/Pet');
|
let deriveDefs = schemaMgr.findDerivedDefinitions('#/definitions/Pet');
|
||||||
deriveDefs.should.be.instanceof(Array);
|
deriveDefs.should.be.instanceof(Array);
|
||||||
deriveDefs.should.not.be.empty();
|
deriveDefs.should.not.be.empty();
|
||||||
deriveDefs.should.be.deepEqual([{name: 'Cat', empty: false, $ref: '#/definitions/Cat'}, {name: 'Dog', empty: false, $ref: '#/definitions/Dog'}]);
|
deriveDefs.should.be.deepEqual([
|
||||||
|
{name: 'Cat', empty: false, $ref: '#/definitions/Cat'},
|
||||||
|
{name: 'Dog', empty: false, $ref: '#/definitions/Dog'}
|
||||||
|
]);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return emtpy array for definitions that dont have discriminator', () => {
|
it('should return emtpy array for definitions that dont have discriminator', () => {
|
||||||
let deriveDefs = schemaMgr.findDerivedDefinitions('#/definitions/Order');
|
let deriveDefs = schemaMgr.findDerivedDefinitions('#/definitions/Order');
|
||||||
deriveDefs.should.be.instanceof(Array);
|
deriveDefs.should.be.instanceof(Array);
|
||||||
deriveDefs.should.be.empty;
|
deriveDefs.should.be.empty();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
|
@ -1,6 +1,6 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
import {statusCodeType} from 'lib/utils/helpers';
|
import {statusCodeType} from '../../lib/utils/helpers';
|
||||||
describe('Utils', () => {
|
describe('Utils', () => {
|
||||||
describe('statusCodeType', () => {
|
describe('statusCodeType', () => {
|
||||||
it('Should return info for status codes within 100 and 200', ()=> {
|
it('Should return info for status codes within 100 and 200', ()=> {
|
|
@ -1,6 +1,6 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
import {KeysPipe, ValuesPipe, JsonPointerEscapePipe, MarkedPipe} from 'lib/utils/pipes';
|
import {KeysPipe, ValuesPipe, JsonPointerEscapePipe, MarkedPipe} from '../../lib/utils/pipes';
|
||||||
|
|
||||||
describe('Pipes', () => {
|
describe('Pipes', () => {
|
||||||
describe('KeysPipe and ValuesPipe', () => {
|
describe('KeysPipe and ValuesPipe', () => {
|
||||||
|
|
21
tsconfig.json
Normal file
21
tsconfig.json
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"experimentalDecorators": true,
|
||||||
|
"emitDecoratorMetadata": true,
|
||||||
|
"module": "es6",
|
||||||
|
"target": "es6",
|
||||||
|
"noImplicitAny": false,
|
||||||
|
"sourceMap": true,
|
||||||
|
"outDir": ".tmp/",
|
||||||
|
"moduleResolution": "node"
|
||||||
|
},
|
||||||
|
"exclude": [
|
||||||
|
"node_modules",
|
||||||
|
"jspm_packages",
|
||||||
|
".tmp",
|
||||||
|
"build",
|
||||||
|
"docs",
|
||||||
|
"*.spec.js",
|
||||||
|
"lib/index.js"
|
||||||
|
]
|
||||||
|
}
|
49
tslint.json
Normal file
49
tslint.json
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
{
|
||||||
|
"rulesDirectory": ["node_modules/codelyzer"],
|
||||||
|
"rules": {
|
||||||
|
"class-name": true,
|
||||||
|
"curly": false,
|
||||||
|
"eofline": true,
|
||||||
|
"indent": ["spaces"],
|
||||||
|
"max-line-length": [true, 140],
|
||||||
|
"member-ordering": [true,
|
||||||
|
"public-before-private",
|
||||||
|
"static-before-instance",
|
||||||
|
"variables-before-functions"
|
||||||
|
],
|
||||||
|
"no-arg": true,
|
||||||
|
"no-construct": true,
|
||||||
|
"no-duplicate-key": true,
|
||||||
|
"no-duplicate-variable": true,
|
||||||
|
"no-empty": true,
|
||||||
|
"no-eval": true,
|
||||||
|
"no-trailing-whitespace": true,
|
||||||
|
"no-unused-expression": true,
|
||||||
|
"no-unused-variable": true,
|
||||||
|
"no-unreachable": true,
|
||||||
|
"no-use-before-declare": true,
|
||||||
|
"one-line": [true,
|
||||||
|
"check-open-brace",
|
||||||
|
"check-catch",
|
||||||
|
"check-else",
|
||||||
|
"check-whitespace"
|
||||||
|
],
|
||||||
|
"quotemark": [true, "single"],
|
||||||
|
"semicolon": true,
|
||||||
|
"trailing-comma": true,
|
||||||
|
"triple-equals": [true,
|
||||||
|
"allow-undefined-check"
|
||||||
|
],
|
||||||
|
"variable-name": false,
|
||||||
|
|
||||||
|
"directive-selector-type": [true, "attribute"],
|
||||||
|
"component-selector-type": [true, "element"],
|
||||||
|
"use-input-property-decorator": true,
|
||||||
|
"use-output-property-decorator": true,
|
||||||
|
"use-host-property-decorator": true,
|
||||||
|
"no-input-rename": true,
|
||||||
|
"no-output-rename": true,
|
||||||
|
"use-life-cycle-interface": true,
|
||||||
|
"use-pipe-transform-interface": true
|
||||||
|
}
|
||||||
|
}
|
12
typings.json
Normal file
12
typings.json
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
{
|
||||||
|
"globalDevDependencies": {
|
||||||
|
"jasmine": "registry:dt/jasmine#2.2.0+20160505161446"
|
||||||
|
},
|
||||||
|
"globalDependencies": {
|
||||||
|
"marked": "registry:dt/marked#0.0.0+20160325085301",
|
||||||
|
"should": "registry:dt/should#8.1.1+20160521152556"
|
||||||
|
},
|
||||||
|
"ambientDevDependencies": {
|
||||||
|
"es6-shim": "github:DefinitelyTyped/DefinitelyTyped/es6-shim/es6-shim.d.ts#6697d6f7dadbf5773cb40ecda35a76027e0783b2"
|
||||||
|
}
|
||||||
|
}
|
4
typings/dropkickjs.d.ts
vendored
Normal file
4
typings/dropkickjs.d.ts
vendored
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
declare module "dropkickjs" {
|
||||||
|
var x: any;
|
||||||
|
export default x;
|
||||||
|
}
|
501
typings/globals/jasmine/index.d.ts
vendored
Normal file
501
typings/globals/jasmine/index.d.ts
vendored
Normal file
|
@ -0,0 +1,501 @@
|
||||||
|
// Generated by typings
|
||||||
|
// Source: https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/36a1be34dbe202c665b3ddafd50824f78c09eea3/jasmine/jasmine.d.ts
|
||||||
|
declare function describe(description: string, specDefinitions: () => void): void;
|
||||||
|
declare function fdescribe(description: string, specDefinitions: () => void): void;
|
||||||
|
declare function xdescribe(description: string, specDefinitions: () => void): void;
|
||||||
|
|
||||||
|
declare function it(expectation: string, assertion?: () => void, timeout?: number): void;
|
||||||
|
declare function it(expectation: string, assertion?: (done: DoneFn) => void, timeout?: number): void;
|
||||||
|
declare function fit(expectation: string, assertion?: () => void, timeout?: number): void;
|
||||||
|
declare function fit(expectation: string, assertion?: (done: DoneFn) => void, timeout?: number): void;
|
||||||
|
declare function xit(expectation: string, assertion?: () => void, timeout?: number): void;
|
||||||
|
declare function xit(expectation: string, assertion?: (done: DoneFn) => void, timeout?: number): void;
|
||||||
|
|
||||||
|
/** If you call the function pending anywhere in the spec body, no matter the expectations, the spec will be marked pending. */
|
||||||
|
declare function pending(reason?: string): void;
|
||||||
|
|
||||||
|
declare function beforeEach(action: () => void, timeout?: number): void;
|
||||||
|
declare function beforeEach(action: (done: DoneFn) => void, timeout?: number): void;
|
||||||
|
declare function afterEach(action: () => void, timeout?: number): void;
|
||||||
|
declare function afterEach(action: (done: DoneFn) => void, timeout?: number): void;
|
||||||
|
|
||||||
|
declare function beforeAll(action: () => void, timeout?: number): void;
|
||||||
|
declare function beforeAll(action: (done: DoneFn) => void, timeout?: number): void;
|
||||||
|
declare function afterAll(action: () => void, timeout?: number): void;
|
||||||
|
declare function afterAll(action: (done: DoneFn) => void, timeout?: number): void;
|
||||||
|
|
||||||
|
declare function expect(spy: Function): jasmine.Matchers;
|
||||||
|
declare function expect(actual: any): jasmine.Matchers;
|
||||||
|
|
||||||
|
declare function fail(e?: any): void;
|
||||||
|
/** Action method that should be called when the async work is complete */
|
||||||
|
interface DoneFn extends Function {
|
||||||
|
(): void;
|
||||||
|
|
||||||
|
/** fails the spec and indicates that it has completed. If the message is an Error, Error.message is used */
|
||||||
|
fail: (message?: Error|string) => void;
|
||||||
|
}
|
||||||
|
|
||||||
|
declare function spyOn(object: any, method: string): jasmine.Spy;
|
||||||
|
|
||||||
|
declare function runs(asyncMethod: Function): void;
|
||||||
|
declare function waitsFor(latchMethod: () => boolean, failureMessage?: string, timeout?: number): void;
|
||||||
|
declare function waits(timeout?: number): void;
|
||||||
|
|
||||||
|
declare namespace jasmine {
|
||||||
|
|
||||||
|
var clock: () => Clock;
|
||||||
|
|
||||||
|
function any(aclass: any): Any;
|
||||||
|
function anything(): Any;
|
||||||
|
function arrayContaining(sample: any[]): ArrayContaining;
|
||||||
|
function objectContaining(sample: any): ObjectContaining;
|
||||||
|
function createSpy(name: string, originalFn?: Function): Spy;
|
||||||
|
function createSpyObj(baseName: string, methodNames: any[]): any;
|
||||||
|
function createSpyObj<T>(baseName: string, methodNames: any[]): T;
|
||||||
|
function pp(value: any): string;
|
||||||
|
function getEnv(): Env;
|
||||||
|
function addCustomEqualityTester(equalityTester: CustomEqualityTester): void;
|
||||||
|
function addMatchers(matchers: CustomMatcherFactories): void;
|
||||||
|
function stringMatching(str: string): Any;
|
||||||
|
function stringMatching(str: RegExp): Any;
|
||||||
|
|
||||||
|
interface Any {
|
||||||
|
|
||||||
|
new (expectedClass: any): any;
|
||||||
|
|
||||||
|
jasmineMatches(other: any): boolean;
|
||||||
|
jasmineToString(): string;
|
||||||
|
}
|
||||||
|
|
||||||
|
// taken from TypeScript lib.core.es6.d.ts, applicable to CustomMatchers.contains()
|
||||||
|
interface ArrayLike<T> {
|
||||||
|
length: number;
|
||||||
|
[n: number]: T;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface ArrayContaining {
|
||||||
|
new (sample: any[]): any;
|
||||||
|
|
||||||
|
asymmetricMatch(other: any): boolean;
|
||||||
|
jasmineToString(): string;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface ObjectContaining {
|
||||||
|
new (sample: any): any;
|
||||||
|
|
||||||
|
jasmineMatches(other: any, mismatchKeys: any[], mismatchValues: any[]): boolean;
|
||||||
|
jasmineToString(): string;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface Block {
|
||||||
|
|
||||||
|
new (env: Env, func: SpecFunction, spec: Spec): any;
|
||||||
|
|
||||||
|
execute(onComplete: () => void): void;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface WaitsBlock extends Block {
|
||||||
|
new (env: Env, timeout: number, spec: Spec): any;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface WaitsForBlock extends Block {
|
||||||
|
new (env: Env, timeout: number, latchFunction: SpecFunction, message: string, spec: Spec): any;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface Clock {
|
||||||
|
install(): void;
|
||||||
|
uninstall(): void;
|
||||||
|
/** Calls to any registered callback are triggered when the clock is ticked forward via the jasmine.clock().tick function, which takes a number of milliseconds. */
|
||||||
|
tick(ms: number): void;
|
||||||
|
mockDate(date?: Date): void;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface CustomEqualityTester {
|
||||||
|
(first: any, second: any): boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface CustomMatcher {
|
||||||
|
compare<T>(actual: T, expected: T): CustomMatcherResult;
|
||||||
|
compare(actual: any, expected: any): CustomMatcherResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface CustomMatcherFactory {
|
||||||
|
(util: MatchersUtil, customEqualityTesters: Array<CustomEqualityTester>): CustomMatcher;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface CustomMatcherFactories {
|
||||||
|
[index: string]: CustomMatcherFactory;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface CustomMatcherResult {
|
||||||
|
pass: boolean;
|
||||||
|
message?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface MatchersUtil {
|
||||||
|
equals(a: any, b: any, customTesters?: Array<CustomEqualityTester>): boolean;
|
||||||
|
contains<T>(haystack: ArrayLike<T> | string, needle: any, customTesters?: Array<CustomEqualityTester>): boolean;
|
||||||
|
buildFailureMessage(matcherName: string, isNot: boolean, actual: any, ...expected: Array<any>): string;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface Env {
|
||||||
|
setTimeout: any;
|
||||||
|
clearTimeout: void;
|
||||||
|
setInterval: any;
|
||||||
|
clearInterval: void;
|
||||||
|
updateInterval: number;
|
||||||
|
|
||||||
|
currentSpec: Spec;
|
||||||
|
|
||||||
|
matchersClass: Matchers;
|
||||||
|
|
||||||
|
version(): any;
|
||||||
|
versionString(): string;
|
||||||
|
nextSpecId(): number;
|
||||||
|
addReporter(reporter: Reporter): void;
|
||||||
|
execute(): void;
|
||||||
|
describe(description: string, specDefinitions: () => void): Suite;
|
||||||
|
// ddescribe(description: string, specDefinitions: () => void): Suite; Not a part of jasmine. Angular team adds these
|
||||||
|
beforeEach(beforeEachFunction: () => void): void;
|
||||||
|
beforeAll(beforeAllFunction: () => void): void;
|
||||||
|
currentRunner(): Runner;
|
||||||
|
afterEach(afterEachFunction: () => void): void;
|
||||||
|
afterAll(afterAllFunction: () => void): void;
|
||||||
|
xdescribe(desc: string, specDefinitions: () => void): XSuite;
|
||||||
|
it(description: string, func: () => void): Spec;
|
||||||
|
// iit(description: string, func: () => void): Spec; Not a part of jasmine. Angular team adds these
|
||||||
|
xit(desc: string, func: () => void): XSpec;
|
||||||
|
compareRegExps_(a: RegExp, b: RegExp, mismatchKeys: string[], mismatchValues: string[]): boolean;
|
||||||
|
compareObjects_(a: any, b: any, mismatchKeys: string[], mismatchValues: string[]): boolean;
|
||||||
|
equals_(a: any, b: any, mismatchKeys: string[], mismatchValues: string[]): boolean;
|
||||||
|
contains_(haystack: any, needle: any): boolean;
|
||||||
|
addCustomEqualityTester(equalityTester: CustomEqualityTester): void;
|
||||||
|
addMatchers(matchers: CustomMatcherFactories): void;
|
||||||
|
specFilter(spec: Spec): boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface FakeTimer {
|
||||||
|
|
||||||
|
new (): any;
|
||||||
|
|
||||||
|
reset(): void;
|
||||||
|
tick(millis: number): void;
|
||||||
|
runFunctionsWithinRange(oldMillis: number, nowMillis: number): void;
|
||||||
|
scheduleFunction(timeoutKey: any, funcToCall: () => void, millis: number, recurring: boolean): void;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface HtmlReporter {
|
||||||
|
new (): any;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface HtmlSpecFilter {
|
||||||
|
new (): any;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface Result {
|
||||||
|
type: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface NestedResults extends Result {
|
||||||
|
description: string;
|
||||||
|
|
||||||
|
totalCount: number;
|
||||||
|
passedCount: number;
|
||||||
|
failedCount: number;
|
||||||
|
|
||||||
|
skipped: boolean;
|
||||||
|
|
||||||
|
rollupCounts(result: NestedResults): void;
|
||||||
|
log(values: any): void;
|
||||||
|
getItems(): Result[];
|
||||||
|
addResult(result: Result): void;
|
||||||
|
passed(): boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface MessageResult extends Result {
|
||||||
|
values: any;
|
||||||
|
trace: Trace;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface ExpectationResult extends Result {
|
||||||
|
matcherName: string;
|
||||||
|
passed(): boolean;
|
||||||
|
expected: any;
|
||||||
|
actual: any;
|
||||||
|
message: string;
|
||||||
|
trace: Trace;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface Trace {
|
||||||
|
name: string;
|
||||||
|
message: string;
|
||||||
|
stack: any;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface PrettyPrinter {
|
||||||
|
|
||||||
|
new (): any;
|
||||||
|
|
||||||
|
format(value: any): void;
|
||||||
|
iterateObject(obj: any, fn: (property: string, isGetter: boolean) => void): void;
|
||||||
|
emitScalar(value: any): void;
|
||||||
|
emitString(value: string): void;
|
||||||
|
emitArray(array: any[]): void;
|
||||||
|
emitObject(obj: any): void;
|
||||||
|
append(value: any): void;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface StringPrettyPrinter extends PrettyPrinter {
|
||||||
|
}
|
||||||
|
|
||||||
|
interface Queue {
|
||||||
|
|
||||||
|
new (env: any): any;
|
||||||
|
|
||||||
|
env: Env;
|
||||||
|
ensured: boolean[];
|
||||||
|
blocks: Block[];
|
||||||
|
running: boolean;
|
||||||
|
index: number;
|
||||||
|
offset: number;
|
||||||
|
abort: boolean;
|
||||||
|
|
||||||
|
addBefore(block: Block, ensure?: boolean): void;
|
||||||
|
add(block: any, ensure?: boolean): void;
|
||||||
|
insertNext(block: any, ensure?: boolean): void;
|
||||||
|
start(onComplete?: () => void): void;
|
||||||
|
isRunning(): boolean;
|
||||||
|
next_(): void;
|
||||||
|
results(): NestedResults;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface Matchers {
|
||||||
|
|
||||||
|
new (env: Env, actual: any, spec: Env, isNot?: boolean): any;
|
||||||
|
|
||||||
|
env: Env;
|
||||||
|
actual: any;
|
||||||
|
spec: Env;
|
||||||
|
isNot?: boolean;
|
||||||
|
message(): any;
|
||||||
|
|
||||||
|
toBe(expected: any, expectationFailOutput?: any): boolean;
|
||||||
|
toEqual(expected: any, expectationFailOutput?: any): boolean;
|
||||||
|
toMatch(expected: string | RegExp, expectationFailOutput?: any): boolean;
|
||||||
|
toBeDefined(expectationFailOutput?: any): boolean;
|
||||||
|
toBeUndefined(expectationFailOutput?: any): boolean;
|
||||||
|
toBeNull(expectationFailOutput?: any): boolean;
|
||||||
|
toBeNaN(): boolean;
|
||||||
|
toBeTruthy(expectationFailOutput?: any): boolean;
|
||||||
|
toBeFalsy(expectationFailOutput?: any): boolean;
|
||||||
|
toHaveBeenCalled(): boolean;
|
||||||
|
toHaveBeenCalledWith(...params: any[]): boolean;
|
||||||
|
toHaveBeenCalledTimes(expected: number): boolean;
|
||||||
|
toContain(expected: any, expectationFailOutput?: any): boolean;
|
||||||
|
toBeLessThan(expected: number, expectationFailOutput?: any): boolean;
|
||||||
|
toBeGreaterThan(expected: number, expectationFailOutput?: any): boolean;
|
||||||
|
toBeCloseTo(expected: number, precision: any, expectationFailOutput?: any): boolean;
|
||||||
|
toThrow(expected?: any): boolean;
|
||||||
|
toThrowError(message?: string | RegExp): boolean;
|
||||||
|
toThrowError(expected?: new (...args: any[]) => Error, message?: string | RegExp): boolean;
|
||||||
|
not: Matchers;
|
||||||
|
|
||||||
|
Any: Any;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface Reporter {
|
||||||
|
reportRunnerStarting(runner: Runner): void;
|
||||||
|
reportRunnerResults(runner: Runner): void;
|
||||||
|
reportSuiteResults(suite: Suite): void;
|
||||||
|
reportSpecStarting(spec: Spec): void;
|
||||||
|
reportSpecResults(spec: Spec): void;
|
||||||
|
log(str: string): void;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface MultiReporter extends Reporter {
|
||||||
|
addReporter(reporter: Reporter): void;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface Runner {
|
||||||
|
|
||||||
|
new (env: Env): any;
|
||||||
|
|
||||||
|
execute(): void;
|
||||||
|
beforeEach(beforeEachFunction: SpecFunction): void;
|
||||||
|
afterEach(afterEachFunction: SpecFunction): void;
|
||||||
|
beforeAll(beforeAllFunction: SpecFunction): void;
|
||||||
|
afterAll(afterAllFunction: SpecFunction): void;
|
||||||
|
finishCallback(): void;
|
||||||
|
addSuite(suite: Suite): void;
|
||||||
|
add(block: Block): void;
|
||||||
|
specs(): Spec[];
|
||||||
|
suites(): Suite[];
|
||||||
|
topLevelSuites(): Suite[];
|
||||||
|
results(): NestedResults;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface SpecFunction {
|
||||||
|
(spec?: Spec): void;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface SuiteOrSpec {
|
||||||
|
id: number;
|
||||||
|
env: Env;
|
||||||
|
description: string;
|
||||||
|
queue: Queue;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface Spec extends SuiteOrSpec {
|
||||||
|
|
||||||
|
new (env: Env, suite: Suite, description: string): any;
|
||||||
|
|
||||||
|
suite: Suite;
|
||||||
|
|
||||||
|
afterCallbacks: SpecFunction[];
|
||||||
|
spies_: Spy[];
|
||||||
|
|
||||||
|
results_: NestedResults;
|
||||||
|
matchersClass: Matchers;
|
||||||
|
|
||||||
|
getFullName(): string;
|
||||||
|
results(): NestedResults;
|
||||||
|
log(arguments: any): any;
|
||||||
|
runs(func: SpecFunction): Spec;
|
||||||
|
addToQueue(block: Block): void;
|
||||||
|
addMatcherResult(result: Result): void;
|
||||||
|
expect(actual: any): any;
|
||||||
|
waits(timeout: number): Spec;
|
||||||
|
waitsFor(latchFunction: SpecFunction, timeoutMessage?: string, timeout?: number): Spec;
|
||||||
|
fail(e?: any): void;
|
||||||
|
getMatchersClass_(): Matchers;
|
||||||
|
addMatchers(matchersPrototype: CustomMatcherFactories): void;
|
||||||
|
finishCallback(): void;
|
||||||
|
finish(onComplete?: () => void): void;
|
||||||
|
after(doAfter: SpecFunction): void;
|
||||||
|
execute(onComplete?: () => void): any;
|
||||||
|
addBeforesAndAftersToQueue(): void;
|
||||||
|
explodes(): void;
|
||||||
|
spyOn(obj: any, methodName: string, ignoreMethodDoesntExist: boolean): Spy;
|
||||||
|
removeAllSpies(): void;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface XSpec {
|
||||||
|
id: number;
|
||||||
|
runs(): void;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface Suite extends SuiteOrSpec {
|
||||||
|
|
||||||
|
new (env: Env, description: string, specDefinitions: () => void, parentSuite: Suite): any;
|
||||||
|
|
||||||
|
parentSuite: Suite;
|
||||||
|
|
||||||
|
getFullName(): string;
|
||||||
|
finish(onComplete?: () => void): void;
|
||||||
|
beforeEach(beforeEachFunction: SpecFunction): void;
|
||||||
|
afterEach(afterEachFunction: SpecFunction): void;
|
||||||
|
beforeAll(beforeAllFunction: SpecFunction): void;
|
||||||
|
afterAll(afterAllFunction: SpecFunction): void;
|
||||||
|
results(): NestedResults;
|
||||||
|
add(suiteOrSpec: SuiteOrSpec): void;
|
||||||
|
specs(): Spec[];
|
||||||
|
suites(): Suite[];
|
||||||
|
children(): any[];
|
||||||
|
execute(onComplete?: () => void): void;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface XSuite {
|
||||||
|
execute(): void;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface Spy {
|
||||||
|
(...params: any[]): any;
|
||||||
|
|
||||||
|
identity: string;
|
||||||
|
and: SpyAnd;
|
||||||
|
calls: Calls;
|
||||||
|
mostRecentCall: { args: any[]; };
|
||||||
|
argsForCall: any[];
|
||||||
|
wasCalled: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface SpyAnd {
|
||||||
|
/** By chaining the spy with and.callThrough, the spy will still track all calls to it but in addition it will delegate to the actual implementation. */
|
||||||
|
callThrough(): Spy;
|
||||||
|
/** By chaining the spy with and.returnValue, all calls to the function will return a specific value. */
|
||||||
|
returnValue(val: any): Spy;
|
||||||
|
/** By chaining the spy with and.returnValues, all calls to the function will return specific values in order until it reaches the end of the return values list. */
|
||||||
|
returnValues(...values: any[]): Spy;
|
||||||
|
/** By chaining the spy with and.callFake, all calls to the spy will delegate to the supplied function. */
|
||||||
|
callFake(fn: Function): Spy;
|
||||||
|
/** By chaining the spy with and.throwError, all calls to the spy will throw the specified value. */
|
||||||
|
throwError(msg: string): Spy;
|
||||||
|
/** When a calling strategy is used for a spy, the original stubbing behavior can be returned at any time with and.stub. */
|
||||||
|
stub(): Spy;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface Calls {
|
||||||
|
/** By chaining the spy with calls.any(), will return false if the spy has not been called at all, and then true once at least one call happens. **/
|
||||||
|
any(): boolean;
|
||||||
|
/** By chaining the spy with calls.count(), will return the number of times the spy was called **/
|
||||||
|
count(): number;
|
||||||
|
/** By chaining the spy with calls.argsFor(), will return the arguments passed to call number index **/
|
||||||
|
argsFor(index: number): any[];
|
||||||
|
/** By chaining the spy with calls.allArgs(), will return the arguments to all calls **/
|
||||||
|
allArgs(): any[];
|
||||||
|
/** By chaining the spy with calls.all(), will return the context (the this) and arguments passed all calls **/
|
||||||
|
all(): CallInfo[];
|
||||||
|
/** By chaining the spy with calls.mostRecent(), will return the context (the this) and arguments for the most recent call **/
|
||||||
|
mostRecent(): CallInfo;
|
||||||
|
/** By chaining the spy with calls.first(), will return the context (the this) and arguments for the first call **/
|
||||||
|
first(): CallInfo;
|
||||||
|
/** By chaining the spy with calls.reset(), will clears all tracking for a spy **/
|
||||||
|
reset(): void;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface CallInfo {
|
||||||
|
/** The context (the this) for the call */
|
||||||
|
object: any;
|
||||||
|
/** All arguments passed to the call */
|
||||||
|
args: any[];
|
||||||
|
/** The return value of the call */
|
||||||
|
returnValue: any;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface Util {
|
||||||
|
inherit(childClass: Function, parentClass: Function): any;
|
||||||
|
formatException(e: any): any;
|
||||||
|
htmlEscape(str: string): string;
|
||||||
|
argsToArray(args: any): any;
|
||||||
|
extend(destination: any, source: any): any;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface JsApiReporter extends Reporter {
|
||||||
|
|
||||||
|
started: boolean;
|
||||||
|
finished: boolean;
|
||||||
|
result: any;
|
||||||
|
messages: any;
|
||||||
|
|
||||||
|
new (): any;
|
||||||
|
|
||||||
|
suites(): Suite[];
|
||||||
|
summarize_(suiteOrSpec: SuiteOrSpec): any;
|
||||||
|
results(): any;
|
||||||
|
resultsForSpec(specId: any): any;
|
||||||
|
log(str: any): any;
|
||||||
|
resultsForSpecs(specIds: any): any;
|
||||||
|
summarizeResult_(result: any): any;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface Jasmine {
|
||||||
|
Spec: Spec;
|
||||||
|
clock: Clock;
|
||||||
|
util: Util;
|
||||||
|
}
|
||||||
|
|
||||||
|
export var HtmlReporter: HtmlReporter;
|
||||||
|
export var HtmlSpecFilter: HtmlSpecFilter;
|
||||||
|
export var DEFAULT_TIMEOUT_INTERVAL: number;
|
||||||
|
}
|
8
typings/globals/jasmine/typings.json
Normal file
8
typings/globals/jasmine/typings.json
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
"resolution": "main",
|
||||||
|
"tree": {
|
||||||
|
"src": "https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/36a1be34dbe202c665b3ddafd50824f78c09eea3/jasmine/jasmine.d.ts",
|
||||||
|
"raw": "registry:dt/jasmine#2.2.0+20160505161446",
|
||||||
|
"typings": "https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/36a1be34dbe202c665b3ddafd50824f78c09eea3/jasmine/jasmine.d.ts"
|
||||||
|
}
|
||||||
|
}
|
80
typings/globals/json-pointer/index.d.ts
vendored
Normal file
80
typings/globals/json-pointer/index.d.ts
vendored
Normal file
|
@ -0,0 +1,80 @@
|
||||||
|
// Generated by typings
|
||||||
|
// Source: https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/7de6c3dd94feaeb21f20054b9f30d5dabc5efabd/json-pointer/json-pointer.d.ts
|
||||||
|
declare module "json-pointer" {
|
||||||
|
function JSON_Pointer(object: Object): JSON_Pointer.JSON_PointerWrap;
|
||||||
|
|
||||||
|
namespace JSON_Pointer {
|
||||||
|
/**
|
||||||
|
* Wrap an object with accessors
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* Looks up a JSON pointer in an object.
|
||||||
|
*/
|
||||||
|
function get(object: Object, pointer: string): any;
|
||||||
|
/**
|
||||||
|
* Set a value for a JSON pointer on object.
|
||||||
|
*/
|
||||||
|
function set(object: Object, pointer: string, value: any): void;
|
||||||
|
/**
|
||||||
|
* Removes an attribute of object referenced by pointer
|
||||||
|
*/
|
||||||
|
function remove(object: Object, pointer: string): void;
|
||||||
|
/**
|
||||||
|
* Creates a dictionary object (pointer -> value).
|
||||||
|
*/
|
||||||
|
function dict(object: Object): Object;
|
||||||
|
/**
|
||||||
|
* Just like: each(pointer.dict(obj), iterator);
|
||||||
|
*/
|
||||||
|
function walk(object: Object, iterator: (value: any, key: string) => void): void;
|
||||||
|
/**
|
||||||
|
* Tests if an object has a value for a JSON pointer.
|
||||||
|
*/
|
||||||
|
function has(object: Object, pointer: string): boolean;
|
||||||
|
/**
|
||||||
|
* Escapes a reference token.
|
||||||
|
*/
|
||||||
|
function escape(str: string): string;
|
||||||
|
/**
|
||||||
|
* Unescape a reference token.
|
||||||
|
*/
|
||||||
|
function unescape(str: string): string;
|
||||||
|
/**
|
||||||
|
* Converts a JSON pointer into an array of reference tokens.
|
||||||
|
*/
|
||||||
|
function parse(str: string): string[];
|
||||||
|
/**
|
||||||
|
* Builds a json pointer from an array of reference tokens.
|
||||||
|
*/
|
||||||
|
function compile(str: string[]): string;
|
||||||
|
|
||||||
|
interface JSON_PointerWrap {
|
||||||
|
/**
|
||||||
|
* Looks up a JSON pointer in an object.
|
||||||
|
*/
|
||||||
|
get(pointer: string): any;
|
||||||
|
/**
|
||||||
|
* Set a value for a JSON pointer on object.
|
||||||
|
*/
|
||||||
|
set(pointer: string, value: any): void;
|
||||||
|
/**
|
||||||
|
* Removes an attribute of object referenced by pointer
|
||||||
|
*/
|
||||||
|
remove(pointer: string): void;
|
||||||
|
/**
|
||||||
|
* Creates a dictionary object (pointer -> value).
|
||||||
|
*/
|
||||||
|
dict(): Object;
|
||||||
|
/**
|
||||||
|
* Just like: each(pointer.dict(obj), iterator);
|
||||||
|
*/
|
||||||
|
walk(iterator: (value: any, key: string) => void): void;
|
||||||
|
/**
|
||||||
|
* Tests if an object has a value for a JSON pointer.
|
||||||
|
*/
|
||||||
|
has(pointer: string): boolean;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default JSON_Pointer;
|
||||||
|
}
|
8
typings/globals/json-pointer/typings.json
Normal file
8
typings/globals/json-pointer/typings.json
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
"resolution": "main",
|
||||||
|
"tree": {
|
||||||
|
"src": "https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/7de6c3dd94feaeb21f20054b9f30d5dabc5efabd/json-pointer/json-pointer.d.ts",
|
||||||
|
"raw": "registry:dt/json-pointer#1.0.0+20160317120654",
|
||||||
|
"typings": "https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/7de6c3dd94feaeb21f20054b9f30d5dabc5efabd/json-pointer/json-pointer.d.ts"
|
||||||
|
}
|
||||||
|
}
|
168
typings/globals/should/index.d.ts
vendored
Normal file
168
typings/globals/should/index.d.ts
vendored
Normal file
|
@ -0,0 +1,168 @@
|
||||||
|
// Generated by typings
|
||||||
|
// Source: https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/445ed7e54c1b2a8e84610afab0aab2b2ee2ffb4e/should/should.d.ts
|
||||||
|
interface Object {
|
||||||
|
should: ShouldAssertion;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface ShouldAssertion {
|
||||||
|
// basic grammar
|
||||||
|
a: ShouldAssertion;
|
||||||
|
an: ShouldAssertion;
|
||||||
|
and: ShouldAssertion;
|
||||||
|
be: ShouldAssertion;
|
||||||
|
has: ShouldAssertion;
|
||||||
|
have: ShouldAssertion;
|
||||||
|
is: ShouldAssertion;
|
||||||
|
it: ShouldAssertion;
|
||||||
|
with: ShouldAssertion;
|
||||||
|
which: ShouldAssertion;
|
||||||
|
the: ShouldAssertion;
|
||||||
|
of: ShouldAssertion;
|
||||||
|
not: ShouldAssertion;
|
||||||
|
|
||||||
|
// validators
|
||||||
|
arguments(): ShouldAssertion;
|
||||||
|
empty(): ShouldAssertion;
|
||||||
|
ok(): ShouldAssertion;
|
||||||
|
true(): ShouldAssertion;
|
||||||
|
false(): ShouldAssertion;
|
||||||
|
NaN(): ShouldAssertion;
|
||||||
|
Infinity(): ShouldAssertion;
|
||||||
|
Array(): ShouldAssertion;
|
||||||
|
Object(): ShouldAssertion;
|
||||||
|
String(): ShouldAssertion;
|
||||||
|
Boolean(): ShouldAssertion;
|
||||||
|
Number(): ShouldAssertion;
|
||||||
|
Error(): ShouldAssertion;
|
||||||
|
Function(): ShouldAssertion;
|
||||||
|
Date(): ShouldAssertion;
|
||||||
|
Class(): ShouldAssertion;
|
||||||
|
Undefined(): ShouldAssertion;
|
||||||
|
generator(): ShouldAssertion;
|
||||||
|
iterable(): ShouldAssertion;
|
||||||
|
iterator(): ShouldAssertion;
|
||||||
|
eql(expected: any, description?: string): ShouldAssertion;
|
||||||
|
equal(expected: any, description?: string): ShouldAssertion;
|
||||||
|
equalOneOf(...values: any[]): ShouldAssertion;
|
||||||
|
within(start: number, finish: number, description?: string): ShouldAssertion;
|
||||||
|
approximately(value: number, delta: number, description?: string): ShouldAssertion;
|
||||||
|
type(expected: any, description?: string): ShouldAssertion;
|
||||||
|
instanceof(constructor: Function, description?: string): ShouldAssertion;
|
||||||
|
above(n: number, description?: string): ShouldAssertion;
|
||||||
|
below(n: number, description?: string): ShouldAssertion;
|
||||||
|
aboveOrEqual(n: number, description?: string): ShouldAssertion;
|
||||||
|
greaterThanOrEqual(n: number, description?: string): ShouldAssertion;
|
||||||
|
belowOrEqual(n: number, description?: string): ShouldAssertion;
|
||||||
|
lessThanOrEqual(n: number, description?: string): ShouldAssertion;
|
||||||
|
match(other: {}, description?: string): ShouldAssertion;
|
||||||
|
match(other: (val: any) => any, description?: string): ShouldAssertion;
|
||||||
|
match(regexp: RegExp, description?: string): ShouldAssertion;
|
||||||
|
match(other: any, description?: string): ShouldAssertion;
|
||||||
|
matchEach(other: {}, description?: string): ShouldAssertion;
|
||||||
|
matchEach(other: (val: any) => any, description?: string): ShouldAssertion;
|
||||||
|
matchEach(regexp: RegExp, description?: string): ShouldAssertion;
|
||||||
|
matchEach(other: any, description?: string): ShouldAssertion;
|
||||||
|
matchAny(other: {}, description?: string): ShouldAssertion;
|
||||||
|
matchAny(other: (val: any) => any, description?: string): ShouldAssertion;
|
||||||
|
matchAny(regexp: RegExp, description?: string): ShouldAssertion;
|
||||||
|
matchAny(other: any, description?: string): ShouldAssertion;
|
||||||
|
length(n: number, description?: string): ShouldAssertion;
|
||||||
|
property(name: string, description?: string): ShouldAssertion;
|
||||||
|
property(name: string, val: any, description?: string): ShouldAssertion;
|
||||||
|
properties(names: string[]): ShouldAssertion;
|
||||||
|
properties(name: string): ShouldAssertion;
|
||||||
|
properties(descriptor: any): ShouldAssertion;
|
||||||
|
properties(...properties: string[]): ShouldAssertion;
|
||||||
|
propertyByPath(...properties: string[]): ShouldAssertion;
|
||||||
|
propertyWithDescriptor(name: string, descriptor: PropertyDescriptor): ShouldAssertion;
|
||||||
|
oneOf(...values: any[]): ShouldAssertion;
|
||||||
|
ownProperty(name: string, description?: string): ShouldAssertion;
|
||||||
|
containEql(obj: any): ShouldAssertion;
|
||||||
|
containDeep(obj: any): ShouldAssertion;
|
||||||
|
containDeepOrdered(obj: any): ShouldAssertion;
|
||||||
|
keys(...allKeys: string[]): ShouldAssertion;
|
||||||
|
keys(allKeys: string[]): ShouldAssertion;
|
||||||
|
enumerable(property: string, value?: any): ShouldAssertion;
|
||||||
|
enumerables(...properties: string[]): ShouldAssertion;
|
||||||
|
startWith(expected: string, message?: any): ShouldAssertion;
|
||||||
|
endWith(expected: string, message?: any): ShouldAssertion;
|
||||||
|
throw(message?: any): ShouldAssertion;
|
||||||
|
|
||||||
|
//http
|
||||||
|
header(field: string, val?: string): ShouldAssertion;
|
||||||
|
status(code: number): ShouldAssertion;
|
||||||
|
json(): ShouldAssertion;
|
||||||
|
html(): ShouldAssertion;
|
||||||
|
|
||||||
|
//stubs
|
||||||
|
alwaysCalledOn(thisTarget: any): ShouldAssertion;
|
||||||
|
alwaysCalledWith(...arguments: any[]): ShouldAssertion;
|
||||||
|
alwaysCalledWithExactly(...arguments: any[]): ShouldAssertion;
|
||||||
|
alwaysCalledWithMatch(...arguments: any[]): ShouldAssertion;
|
||||||
|
alwaysCalledWithNew(): ShouldAssertion;
|
||||||
|
alwaysThrew(exception?: any): ShouldAssertion;
|
||||||
|
callCount(count: number): ShouldAssertion;
|
||||||
|
called(): ShouldAssertion;
|
||||||
|
calledOn(thisTarget: any): ShouldAssertion;
|
||||||
|
calledOnce(): ShouldAssertion;
|
||||||
|
calledTwice(): ShouldAssertion;
|
||||||
|
calledThrice(): ShouldAssertion;
|
||||||
|
calledWith(...arguments: any[]): ShouldAssertion;
|
||||||
|
calledWithExactly(...arguments: any[]): ShouldAssertion;
|
||||||
|
calledWithMatch(...arguments: any[]): ShouldAssertion;
|
||||||
|
calledWithNew(): ShouldAssertion;
|
||||||
|
neverCalledWith(...arguments: any[]): ShouldAssertion;
|
||||||
|
neverCalledWithMatch(...arguments: any[]): ShouldAssertion;
|
||||||
|
threw(exception?: any): ShouldAssertion;
|
||||||
|
|
||||||
|
// aliases
|
||||||
|
True(): ShouldAssertion;
|
||||||
|
False(): ShouldAssertion;
|
||||||
|
Arguments(): ShouldAssertion;
|
||||||
|
class(): ShouldAssertion;
|
||||||
|
deepEqual(expected: any, description?: string): ShouldAssertion;
|
||||||
|
exactly(expected: any, description?: string): ShouldAssertion;
|
||||||
|
instanceOf(constructor: Function, description?: string): ShouldAssertion;
|
||||||
|
throwError(message?: any): ShouldAssertion;
|
||||||
|
lengthOf(n: number, description?: string): ShouldAssertion;
|
||||||
|
key(key: string): ShouldAssertion;
|
||||||
|
hasOwnProperty(name: string, description?: string): ShouldAssertion;
|
||||||
|
greaterThan(n: number, description?: string): ShouldAssertion;
|
||||||
|
lessThan(n: number, description?: string): ShouldAssertion;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface ShouldInternal {
|
||||||
|
// should.js's extras
|
||||||
|
exist(actual: any, msg?: string): void;
|
||||||
|
exists(actual: any, msg?: string): void;
|
||||||
|
not: ShouldInternal;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface Internal extends ShouldInternal {
|
||||||
|
(obj: any): ShouldAssertion;
|
||||||
|
|
||||||
|
// node.js's assert functions
|
||||||
|
fail(actual: any, expected: any, message: string, operator: string): void;
|
||||||
|
assert(value: any, message: string): void;
|
||||||
|
ok(value: any, message?: string): void;
|
||||||
|
equal(actual: any, expected: any, message?: string): void;
|
||||||
|
notEqual(actual: any, expected: any, message?: string): void;
|
||||||
|
deepEqual(actual: any, expected: any, message?: string): void;
|
||||||
|
notDeepEqual(actual: any, expected: any, message?: string): void;
|
||||||
|
strictEqual(actual: any, expected: any, message?: string): void;
|
||||||
|
notStrictEqual(actual: any, expected: any, message?: string): void;
|
||||||
|
throws(block: any, error?: any, message?: string): void;
|
||||||
|
doesNotThrow(block: any, message?: string): void;
|
||||||
|
ifError(value: any): void;
|
||||||
|
inspect(value: any, obj: any): any;
|
||||||
|
}
|
||||||
|
|
||||||
|
declare var should: Internal;
|
||||||
|
declare var Should: Internal;
|
||||||
|
interface Window {
|
||||||
|
Should: Internal;
|
||||||
|
}
|
||||||
|
|
||||||
|
declare module "should" {
|
||||||
|
export = should;
|
||||||
|
}
|
8
typings/globals/should/typings.json
Normal file
8
typings/globals/should/typings.json
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
"resolution": "main",
|
||||||
|
"tree": {
|
||||||
|
"src": "https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/445ed7e54c1b2a8e84610afab0aab2b2ee2ffb4e/should/should.d.ts",
|
||||||
|
"raw": "registry:dt/should#8.1.1+20160521152556",
|
||||||
|
"typings": "https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/445ed7e54c1b2a8e84610afab0aab2b2ee2ffb4e/should/should.d.ts"
|
||||||
|
}
|
||||||
|
}
|
3
typings/index.d.ts
vendored
Normal file
3
typings/index.d.ts
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
/// <reference path="globals/jasmine/index.d.ts" />
|
||||||
|
/// <reference path="globals/json-pointer/index.d.ts" />
|
||||||
|
/// <reference path="globals/should/index.d.ts" />
|
4
typings/json-schema-ref-parser.d.ts
vendored
Normal file
4
typings/json-schema-ref-parser.d.ts
vendored
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
declare module 'json-schema-ref-parser' {
|
||||||
|
var x: any;
|
||||||
|
export default x;
|
||||||
|
}
|
7
typings/marked.d.ts
vendored
Normal file
7
typings/marked.d.ts
vendored
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
// Generated by typings
|
||||||
|
// Source: https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/7de6c3dd94feaeb21f20054b9f30d5dabc5efabd/json-pointer/json-pointer.d.ts
|
||||||
|
|
||||||
|
declare module "marked" {
|
||||||
|
var x: any;
|
||||||
|
export default x;
|
||||||
|
}
|
3
typings/openapi-sampler.d.ts
vendored
Normal file
3
typings/openapi-sampler.d.ts
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
declare module "openapi-sampler" {
|
||||||
|
export function sample(schema:any, options?:any):any;
|
||||||
|
}
|
6
typings/scrollparent.d.ts
vendored
Normal file
6
typings/scrollparent.d.ts
vendored
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
// Generated by typings
|
||||||
|
// Source: https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/7de6c3dd94feaeb21f20054b9f30d5dabc5efabd/json-pointer/json-pointer.d.ts
|
||||||
|
declare module "scrollparent" {
|
||||||
|
var x: any;
|
||||||
|
export default x;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user