Merge pull request #1164 from theseyi/ts-upgrade

integrates os e-c-codecoverage with support for transpiled sources. adds fix for long delay on infinite scroll in chrome
This commit is contained in:
Seyi Adebajo 2018-05-17 08:49:11 -07:00 committed by GitHub
commit 313eaab489
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
32 changed files with 849 additions and 279 deletions

View File

@ -4,9 +4,27 @@ import loadInitializers from 'ember-load-initializers';
import config from './config/environment';
const App = Application.extend({
Resolver,
modulePrefix: config.modulePrefix,
podModulePrefix: config.podModulePrefix,
Resolver
init() {
this._super(...arguments);
/**
* disable touch events in ember's event dispatcher (Chrome scrolling fix)
* @type {{touchstart: null, touchmove: null, touchend: null, touchcancel: null}}
* @link https://github.com/TryGhost/Ghost-Admin/commit/0affec39320f85c94ab54e85fb8bb4103ef41947
*/
this.customEvents = {
touchstart: null,
touchmove: null,
touchend: null,
touchcancel: null
};
}
});
loadInitializers(App, config.modulePrefix);

View File

@ -1,7 +1,7 @@
import Component from '@ember/component';
import { IAvatar } from 'wherehows-web/typings/app/avatars';
export default class extends Component {
export default class AvatarMetadata extends Component {
tagName: 'span';
classNames = ['avatar-metadata'];

View File

@ -3,7 +3,7 @@ import { get } from '@ember/object';
import { action } from '@ember-decorators/object';
import { Keyboard } from 'wherehows-web/constants/keyboard';
export default class extends Component {
export default class AvatarsDetail extends Component {
containerClassNames = ['avatars-detail-modal'];
/**

View File

@ -5,7 +5,7 @@ import ComputedProperty from '@ember/object/computed';
import { action } from '@ember-decorators/object';
import { singularize, pluralize } from 'ember-inflector';
export default class extends Component {
export default class RollupAvatars extends Component {
tagName = 'span';
classNames = ['avatar-rollup'];

View File

@ -1,2 +1,2 @@
import Component from '@ember/component';
export default class extends Component {}
export default class BrowserRail extends Component {}

View File

@ -1,2 +1,2 @@
import Component from '@ember/component';
export default class extends Component {}
export default class BrowserSummary extends Component {}

View File

@ -1,7 +1,7 @@
import Component from '@ember/component';
import { action } from '@ember-decorators/object';
export default class extends Component {
export default class BrowserViewport extends Component {
/**
* Closure action to request more entities
*/

View File

@ -109,7 +109,7 @@ export default class DatasetCompliance extends Component {
platform: IDatasetView['platform'];
isCompliancePolicyAvailable: boolean = false;
showAllDatasetMemberData: boolean;
complianceInfo: void | IComplianceInfo;
complianceInfo: undefined | IComplianceInfo;
/**
* References the ComplianceFieldIdValue enum

View File

@ -28,7 +28,7 @@ export default class DatasetSchema extends Component {
* List of schema properties for the dataset
* @type {IDatasetColumnWithHtmlComments | IDatasetColumn}
*/
schemas: Array<IDatasetColumnWithHtmlComments | IDatasetColumn>;
schemas: Array<IDatasetColumnWithHtmlComments | IDatasetColumn> = [];
/**
* Reference to the jsonViewer dom element
@ -65,7 +65,7 @@ export default class DatasetSchema extends Component {
/**
* Builds or rebuild the dataset schema / json view based on a flag to toggle this behaviour
*/
buildView() {
buildView(this: DatasetSchema) {
if (get(this, 'isTable')) {
const jsonTable = get(this, 'jsonTable');
jsonTable && this.buildTableView(jsonTable);

View File

@ -1,5 +1,5 @@
import Component from '@ember/component';
export default class extends Component {
export default class DatasetTableRow extends Component {
tagName = 'tr';
}

View File

@ -1,2 +1,2 @@
import Component from '@ember/component';
export default class extends Component {}
export default class DatasetActions extends Component {}

View File

@ -1,6 +1,6 @@
import Component from '@ember/component';
export default class extends Component {
export default class UpstreamDataset extends Component {
tagName = 'section';
classNames = ['upstream-dataset-banner'];

View File

@ -1,6 +1,6 @@
import Component from '@ember/component';
export default class extends Component {
export default class UpstreamOwners extends Component {
tagName = 'section';
classNames = ['upstream-owners-banner'];

View File

@ -1,6 +1,6 @@
import TextField from '@ember/component/text-field';
export default class extends TextField {
export default class DisableBubbleInput extends TextField {
/**
* Prevents click event bubbling
*/

View File

@ -1,5 +1,5 @@
import Component from '@ember/component';
export default class extends Component {
export default class PendulumEllipsisAnimation extends Component {
classNames = ['ellipsis-loader'];
}

View File

@ -85,7 +85,7 @@ export default class PurgePolicyComponent extends Component {
this.requestExemptionReason || (this.requestExemptionReason = false);
}
didReceiveAttrs(this: PurgePolicyComponent) {
didReceiveAttrs() {
this._super(...arguments);
this.checkExemption(get(this, 'purgePolicy'));
}

View File

@ -1,6 +1,6 @@
import Component from '@ember/component';
export default class extends Component {
export default class FilterRail extends Component {
tagName = 'ul';
classNames = ['nacho-filter-rail'];

View File

@ -1,6 +1,6 @@
import Component from '@ember/component';
export default class extends Component {
export default class LinkGroup extends Component {
tagName = 'li';
classNames = ['nacho-filter-card'];

View File

@ -7,9 +7,10 @@ export default config;
* For now these need to be managed by the developer
* since different ember addons can materialize new entries.
*/
declare namespace config {
export const environment: any;
export const modulePrefix: string;
export const podModulePrefix: string;
export const locationType: string;
}
declare const config: {
environment: any;
modulePrefix: string;
podModulePrefix: string;
locationType: string;
rootURL: string;
};

View File

@ -4,7 +4,7 @@ import { IBrowserRouteParams } from 'wherehows-web/routes/browse/entity';
/**
* Handles query params for browse.entity route
*/
export default class extends Controller implements IBrowserRouteParams {
export default class BrowseEntity extends Controller implements IBrowserRouteParams {
queryParams = ['page', 'prefix', 'size', 'platform'];
entity: IBrowserRouteParams['entity'];

View File

@ -2,10 +2,12 @@ import Route from '@ember/routing/route';
import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin';
import Ember from 'ember'; // type import, no emit
export default class extends Route.extend(AuthenticatedRouteMixin) {
export default class Browse extends Route.extend(AuthenticatedRouteMixin) {
afterModel(_model: any, transition: Ember.Transition) {
// Extract the entity being viewed from the transition state
const { params: { 'browse.entity': { entity = 'datasets' } = {} } } = transition;
const {
params: { 'browse.entity': { entity = 'datasets' } = {} }
} = transition;
// transition to entity specific sub route
this.transitionTo('browse.entity', entity);

View File

@ -19,7 +19,7 @@ export interface IBrowserRouteParams {
prefix: string;
}
export default class extends Route.extend(AuthenticatedRouteMixin) {
export default class BrowseEntity extends Route.extend(AuthenticatedRouteMixin) {
queryParams = refreshModelQueryParams(queryParamsKeys);
setupController(controller: EntityController, model: IBrowserRouteParams) {

View File

@ -1,4 +1,4 @@
import Route from '@ember/routing/route';
import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin';
export default class extends Route.extend(AuthenticatedRouteMixin) {}
export default class Datasets extends Route.extend(AuthenticatedRouteMixin) {}

View File

@ -1,6 +1,6 @@
import Route from '@ember/routing/route';
export default class extends Route {
export default class DatasetsIndex extends Route {
redirect() {
// default transition to datasets route if user enters through index
return this.transitionTo('browse.entity', 'datasets');

View File

@ -12,15 +12,18 @@ import Session from 'ember-simple-auth/services/session';
*/
let _hasUserBeenTracked = false;
export default class extends Service.extend({
export default class CurrentUser extends Service {
/**
* Reference to the application session service, implemented with Ember Simple Auth
* @type {ComputedProperty<Session>}
* @return {Service}
*/
session: <ComputedProperty<Session>>inject(),
session: ComputedProperty<Session> = inject();
currentUser: <IUser>{},
/**
* Current user properties
* @type {IUser}
*/
currentUser = <IUser>{};
/**
* Attempt to load the currently logged in user.
@ -29,24 +32,26 @@ export default class extends Service.extend({
* to service.
* @returns {Promise}
*/
async load(): Promise<void> {
async load(this: CurrentUser): Promise<void> {
const session = get(this, 'session');
// If we have a valid session, get the currently logged in user, and set the currentUser attribute,
// otherwise raise an exception
if (get(this, 'session').get('isAuthenticated')) {
if (session.isAuthenticated) {
const user: IUser = await currentUser();
set(this, 'currentUser', user);
}
},
}
/**
* Invalidates the current session if the session is currently valid
* useful if, for example, the server is no able to provide the currently logged in user
* @return {any | Promise<void>}
* @return {Promise<void>}
*/
invalidateSession() {
const sessionService = get(this, 'session');
return get(sessionService, 'isAuthenticated') && sessionService.invalidate();
},
invalidateSession(this: CurrentUser): Promise<void> {
const session = get(this, 'session');
return session.isAuthenticated ? session.invalidate() : Promise.resolve();
}
/**
* Uses the provided tracking function to track the currently logged in user's userId
@ -66,4 +71,4 @@ export default class extends Service.extend({
_hasUserBeenTracked = true;
}
}
}) {}
}

View File

@ -24,6 +24,8 @@
.ivy-tabs-tabpanel[role='tabpanel'] {
display: block;
outline: none;
&[aria-hidden='true'] {
display: none;
}

View File

@ -2,5 +2,6 @@ import Ember from 'ember';
// opt-in to allow types for Ember Array Prototype extensions
declare global {
// eslint-disable-next-line typescript/no-empty-interface, typescript/interface-name-prefix
interface Array<T> extends Ember.ArrayPrototypeExtensions<T> {}
}

View File

@ -7,7 +7,6 @@ module.exports = {
'babel-plugin-transform-object-rest-spread',
'babel-plugin-transform-class-properties'
],
includeTranspiledSources: ['ts'],
reporters: ['lcov', 'html', 'json'],
excludes: ['*/mirage/**/*', '*/tests/**/*', '*/config/**/*', '*/public/**/*', '*/vendor/**/*', '*/app/actions/**']
};

View File

@ -20,32 +20,35 @@
},
"devDependencies": {
"@ember-decorators/babel-transforms": "^2.0.1",
"@types/ember": "^2.8.7",
"@types/ember": "^2.8.22",
"@types/ember-qunit": "^3.0.2",
"@types/ember-test-helpers": "^0.7.1",
"@types/ember-testing-helpers": "^0.0.3",
"@types/lodash": "^4.14.83",
"@types/rsvp": "^4.0.0",
"@zestia/ember-simple-infinite-scroller": "^1.0.20",
"@types/qunit": "^2.5.0",
"@types/rsvp": "^4.0.1",
"@zestia/ember-simple-infinite-scroller": "^2.0.2",
"babel-plugin-transform-async-to-generator": "^6.24.1",
"babel-plugin-transform-class-properties": "^6.24.1",
"babel-plugin-transform-es2015-destructuring": "^6.23.0",
"babel-plugin-transform-es2015-parameters": "^6.24.1",
"babel-plugin-transform-object-rest-spread": "^6.26.0",
"bower": "^1.8.2",
"broccoli-asset-rev": "^2.4.5",
"broccoli-asset-rev": "^2.7.0",
"broccoli-funnel": "^2.0.1",
"broccoli-merge-trees": "^2.0.0",
"broccoli-merge-trees": "^3.0.0",
"codecov": "^3.0.0",
"ember-ajax": "^3.0.0",
"ember-basic-dropdown": "^1.0.0",
"ember-cli": "~2.18.0",
"ember-cli-app-version": "^3.0.0",
"ember-cli-babel": "^6.6.0",
"ember-cli-babel": "^6.12.0",
"ember-cli-bootstrap-sassy": "^0.5.8",
"ember-cli-code-coverage": "theseyi/ember-cli-code-coverage",
"ember-cli-code-coverage": "^1.0.0-beta.4",
"ember-cli-dependency-checker": "^2.0.0",
"ember-cli-dependency-lint": "^1.0.3",
"ember-cli-eslint": "^4.2.1",
"ember-cli-eyeglass": "^3.3.1",
"ember-cli-eyeglass": "^5.0.0",
"ember-cli-htmlbars": "^2.0.1",
"ember-cli-htmlbars-inline-precompile": "^1.0.0",
"ember-cli-inject-live-reload": "^1.4.1",
@ -54,7 +57,7 @@
"ember-cli-qunit": "^4.1.1",
"ember-cli-shims": "^1.1.0",
"ember-cli-sri": "^2.1.0",
"ember-cli-typescript": "^1.0.6",
"ember-cli-typescript": "1.1.5",
"ember-cli-uglify": "^2.0.0",
"ember-composable-helpers": "^2.1.0",
"ember-concurrency": "^0.8.15",
@ -67,7 +70,6 @@
"ember-math-helpers": "^2.4.0",
"ember-metrics": "^0.12.1",
"ember-native-dom-helpers": "^0.5.10",
"ember-pikaday": "^2.2.4",
"ember-power-calendar": "^0.7.1",
"ember-power-select-typeahead": "^0.7.0",
"ember-redux-shim": "^1.1.1",
@ -86,13 +88,13 @@
"eyeglass-restyle": "^1.1.0",
"husky": "^0.14.3",
"ivy-tabs": "^3.1.0",
"lint-staged": "^6.0.1",
"lint-staged": "^7.1.0",
"loader.js": "^4.2.3",
"node-sass": "^4.7.2",
"prettier": "^1.10.2",
"redux": "^3.6.0",
"redux-thunk": "^2.2.0",
"typescript": "^2.6.2"
"typescript": "^2.8.3"
},
"dependencies": {
"dynamic-link": "^0.2.3",

View File

@ -0,0 +1,5 @@
module.exports = {
env: {
embertest: true
}
};

View File

@ -1,14 +1,16 @@
{
"compilerOptions": {
"target": "es2015",
"target": "es2017",
"lib": ["es2017.object", "es2016", "dom", "dom.iterable", "scripthost"],
"listEmittedFiles": true,
"moduleResolution": "node",
"allowJs": true,
"baseUrl": ".",
"sourceMap": true,
"inlineSourceMap": true,
"inlineSources": true,
"module": "es6",
"allowSyntheticDefaultImports": true,
"noFallthroughCasesInSwitch": true,
"noEmit": true,
"noEmitOnError": true,
"noImplicitThis": true,

File diff suppressed because it is too large Load Diff