Skip to content

Commit

Permalink
[ENG-4591] Barium/upgrade ember 3.28 (CenterForOpenScience#1899)
Browse files Browse the repository at this point in the history
## Purpose

Upgrade ember to 3.28

## Summary of Changes

1. Match ember dependencies to `ember new` blueprint
2. Fix all the problems
3. Modify getApiErrorMessage to re-throw in the case of no API error message

(some problems fixed h/t @futa-ikeda)
  • Loading branch information
brianjgeiger authored Jul 18, 2023
1 parent 73f6d3a commit 2d31a59
Show file tree
Hide file tree
Showing 147 changed files with 1,218 additions and 882 deletions.
1 change: 1 addition & 0 deletions .eslintignore
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
# misc
/coverage/
!.*
.*/
.eslintcache

# ember-try
Expand Down
42 changes: 25 additions & 17 deletions .eslintrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -282,52 +282,60 @@ module.exports = {
},
},
{
files: ['app/locales/*/translations.ts'],
files: ['./app/locales/*/translations.ts'],
rules: {
'max-len': 'off',
},
},
{
files: ['tests/**/*'],
files: ['./tests/**/*'],
rules: {
'no-await-in-loop': 'off',
'ember/avoid-leaking-state-in-components': 'off',
'ember/avoid-leaking-state-in-ember-objects': 'off',
},
},
{
files: ['mirage/**/*'],
// Test files:
files: ['tests/**/*-test.{js,ts}'],
extends: ['plugin:qunit/recommended'],
rules: {
'qunit/require-expect': 'off',
},
},
{
files: ['./mirage/**/*'],
rules: {
'ember/avoid-leaking-state-in-ember-objects': 'off',
},
},
{
files: ['lib/*/index.js'],
files: ['./lib/*/index.js'],
rules: {
'ember/avoid-leaking-state-in-ember-objects': 'off',
'@typescript-eslint/no-var-requires': 'off',
},
},
{
files: ['lib/*/addon/engine.js'],
files: ['./lib/*/addon/engine.js'],
rules: {
'ember/avoid-leaking-state-in-ember-objects': 'off',
},
},
{
files: [
'.eslintrc.js',
'.prettierrc.js',
'.template-lintrc.js',
'ember-cli-build.js',
'testem.js',
'run-node-test.js',
'lib/**/environment.js',
'lib/**/index.js',
'blueprints/*/index.js',
'blueprints/**/*.js',
'node-tests/**/*.js',
'config/**/*.js',
'./.eslintrc.js',
'./.prettierrc.js',
'./.template-lintrc.js',
'./ember-cli-build.js',
'./testem.js',
'./run-node-test.js',
'./lib/**/environment.js',
'./lib/**/index.js',
'./blueprints/*/index.js',
'./blueprints/**/*.js',
'./node-tests/**/*.js',
'./config/**/*.js',
],
parserOptions: {
sourceType: 'script',
Expand Down
2 changes: 1 addition & 1 deletion .template-lintrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
'use strict';

module.exports = {
extends: 'octane',
extends: 'recommended',

rules: {
'block-indentation': 4,
Expand Down
2 changes: 1 addition & 1 deletion app/adapters/node.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import OsfAdapter from './osf-adapter';
export default class NodeAdapter extends OsfAdapter {
buildURL(modelName?: string | number, id?: string, snapshot?: DS.Snapshot | null, requestType?: string): string {
if (snapshot && requestType === 'createRecord') {
const parent: any = snapshot.record.belongsTo('parent').belongsToRelationship.members.list[0];
const parent: any = snapshot.record.belongsTo('parent').belongsToRelationship.members?.list[0];

if (parent) {
return this.buildRelationshipURL(parent.createSnapshot(), 'children');
Expand Down
2 changes: 2 additions & 0 deletions app/guid-file/route.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import Route from '@ember/routing/route';
import { inject as service } from '@ember/service';
import { waitFor } from '@ember/test-waiters';
import Store from '@ember-data/store';
import HeadTagsService from 'ember-cli-meta-tags/services/head-tags';
import { task } from 'ember-concurrency';
import { taskFor } from 'ember-concurrency-ts';
Expand Down Expand Up @@ -32,6 +33,7 @@ export default class GuidFile extends Route {
@service metaTags!: MetaTags;
@service ready!: Ready;
@service currentUser!: CurrentUserService;
@service store!: Store;

headTags?: HeadTagDef[];
metadata!: CustomFileMetadataRecordModel;
Expand Down
2 changes: 2 additions & 0 deletions app/institutions/dashboard/route.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import Route from '@ember/routing/route';
import RouterService from '@ember/routing/router-service';
import { inject as service } from '@ember/service';
import { waitFor } from '@ember/test-waiters';
import Store from '@ember-data/store';
import { task } from 'ember-concurrency';
import { taskFor } from 'ember-concurrency-ts';

Expand All @@ -18,6 +19,7 @@ export interface InstitutionsDashboardModel {
}
export default class InstitutionsDashboardRoute extends Route {
@service router!: RouterService;
@service store!: Store;

@task
@waitFor
Expand Down
2 changes: 2 additions & 0 deletions app/meetings/detail/route.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,13 @@ import Route from '@ember/routing/route';
import RouterService from '@ember/routing/router-service';
import { inject as service } from '@ember/service';
import { waitFor } from '@ember/test-waiters';
import Store from '@ember-data/store';
import { task } from 'ember-concurrency';
import { taskFor } from 'ember-concurrency-ts';

export default class MeetingsDetail extends Route {
@service router!: RouterService;
@service store!: Store;

@task
@waitFor
Expand Down
2 changes: 1 addition & 1 deletion app/models/abstract-node.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import FileProviderModel from 'ember-osf-web/models/file-provider';
import { Permission } from './osf-model';

export default class AbstractNodeModel extends BaseFileItem {
@hasMany('file-provider', { inverse: 'target' })
@hasMany('file-provider', { inverse: 'target', polymorphic: true })
files!: AsyncHasMany<FileProviderModel> & FileProviderModel[];

@hasMany('draft-registration', { inverse: 'branchedFrom' })
Expand Down
4 changes: 2 additions & 2 deletions app/models/file-provider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,10 @@ export default class FileProviderModel extends BaseFileItem {
@attr('string') path!: string;
@attr('fixstring') provider!: string;

@belongsTo('file')
@belongsTo('base-file-item', { polymorphic: true })
rootFolder!: AsyncBelongsTo<FileModel> & FileModel;

@hasMany('file', { inverse: 'parentFolder' })
@hasMany('file', { polymorphic: true })
files!: AsyncHasMany<FileModel>;

@belongsTo('abstract-node', { inverse: 'files', polymorphic: true })
Expand Down
2 changes: 1 addition & 1 deletion app/models/file.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ export default class FileModel extends BaseFileItem {
@attr('fixstring') checkout!: string;
@attr('boolean') showAsUnviewed!: boolean;

@belongsTo('file', { inverse: 'files' })
@belongsTo('file', { inverse: 'files', polymorphic: true })
parentFolder!: AsyncBelongsTo<FileModel> & FileModel;

// Folder attributes
Expand Down
2 changes: 1 addition & 1 deletion app/models/node.ts
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,7 @@ export default class NodeModel extends AbstractNodeModel.extend(Validations, Col
@hasMany('registration', { inverse: 'registeredFrom' })
registrations!: AsyncHasMany<RegistrationModel>;

@hasMany('node', { inverse: 'forkedFrom' })
@hasMany('node', { inverse: 'forkedFrom', polymorphic: true })
forks!: AsyncHasMany<NodeModel>;

@belongsTo('node', { inverse: 'forks', polymorphic: true })
Expand Down
3 changes: 3 additions & 0 deletions app/register/route.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
import Transition from '@ember/routing/-private/transition';
import Route from '@ember/routing/route';
import { inject as service } from '@ember/service';
import Store from '@ember-data/store';

import Session from 'ember-simple-auth/services/session';


export default class Register extends Route {
@service session!: Session;
@service store!: Store;

async beforeModel(transition: Transition) {
await super.beforeModel(transition);
Expand Down
3 changes: 3 additions & 0 deletions app/serializers/file.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@ import OsfSerializer from './osf-serializer';
export default class FileSerializer extends OsfSerializer {
normalize(modelClass: FileModel, resourceHash: Resource) {
const hash = resourceHash;
if (hash.relationships?.root_folder) {
hash.type = 'file-providers';
}
const checkoutRel = hash.relationships!.checkout;
if (checkoutRel && 'links' in checkoutRel) {
const { related } = checkoutRel.links;
Expand Down
15 changes: 1 addition & 14 deletions app/serializers/osf-serializer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@ export default class OsfSerializer extends JSONAPISerializer {

const includeCleanData = options && options.osf && options.osf.includeCleanData;
if (!includeCleanData && !snapshot.record.get('isNew')) {
// Only send dirty attributes and relationships in request
// Only send dirty attributes in request
const changedAttributes = snapshot.record.changedAttributes();
for (const attribute of Object.keys(serialized.data.attributes!)) {
const { attrs }: { attrs: any } = this;
Expand All @@ -147,19 +147,6 @@ export default class OsfSerializer extends JSONAPISerializer {
delete serialized.data.attributes![attribute];
}
}
// HACK: There's no public-API way to tell whether a relationship has been changed.
const relationships = (snapshot as any)._internalModel.__recordData._relationships.initializedRelationships;
if (serialized.data.relationships) {
for (const key of Object.keys(serialized.data.relationships)) {
const rel = relationships[camelize(key)];
if (rel
&& rel.members.list.length === rel.canonicalMembers.list.length
&& rel.members.list.every((v: any, i: any) => v === rel.canonicalMembers.list[i])
) {
delete serialized.data.relationships[key];
}
}
}
}

return serialized;
Expand Down
4 changes: 4 additions & 0 deletions app/settings/developer-apps/create/route.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
import Route from '@ember/routing/route';
import { inject as service } from '@ember/service';
import Store from '@ember-data/store';
import SettingsApplicationCreateController from './controller';

export default class SettingsDeveloperAppsCreateRoute extends Route {
@service store!: Store;

setupController(controller: SettingsApplicationCreateController) {
controller.set('developerApp', this.store.createRecord('developer-app'));
}
Expand Down
2 changes: 2 additions & 0 deletions app/settings/developer-apps/edit/route.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,15 @@ import Route from '@ember/routing/route';
import RouterService from '@ember/routing/router-service';
import { inject as service } from '@ember/service';
import { waitFor } from '@ember/test-waiters';
import Store from '@ember-data/store';
import { task } from 'ember-concurrency';
import { taskFor } from 'ember-concurrency-ts';

import { notFoundURL } from 'ember-osf-web/utils/clean-url';

export default class SettingsDeveloperAppsEditRoute extends Route {
@service router!: RouterService;
@service store!: Store;

@task
@waitFor
Expand Down
2 changes: 2 additions & 0 deletions app/settings/tokens/edit/route.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import Route from '@ember/routing/route';
import RouterService from '@ember/routing/router-service';
import { inject as service } from '@ember/service';
import { waitFor } from '@ember/test-waiters';
import Store from '@ember-data/store';
import { task } from 'ember-concurrency';
import { taskFor } from 'ember-concurrency-ts';

Expand All @@ -12,6 +13,7 @@ import SettingsTokensEditController from './controller';

export default class SettingsTokensEditRoute extends Route {
@service router!: RouterService;
@service store!: Store;

@task
@waitFor
Expand Down
5 changes: 4 additions & 1 deletion app/utils/capture-exception.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,10 @@ export function getApiError(error: ErrorDocument): ErrorObject|undefined {

export function getApiErrorMessage(error: ErrorDocument): string {
const apiError = getApiError(error);
return (apiError && apiError.detail) ? apiError.detail : '';
if(apiError){
return (apiError && apiError.detail) ? apiError.detail : '';
}
throw error;
}

export function getApiErrors(error: ErrorDocument): Record<string, ErrorObject> {
Expand Down
7 changes: 4 additions & 3 deletions bin/run-node-test.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
'use strict';

const Mocha = require('mocha');
// eslint-disable-next-line @typescript-eslint/no-var-requires
const Mocha = require('mocha'); // eslint-disable-line no-undef

const test = process.argv[2];
const test = process.argv[2]; // eslint-disable-line no-undef

// Run the mocha test.
const mocha = new Mocha();
mocha.addFile(`node-tests/${test}-test.js`);
// eslint-disable-next-line no-process-exit
mocha.run(failures => process.on('exit', () => process.exit(failures)));
mocha.run(failures => process.on('exit', () => process.exit(failures))); // eslint-disable-line no-undef
13 changes: 13 additions & 0 deletions config/deprecation-workflow.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,18 @@ self.deprecationWorkflow.config = {
{ handler: 'silence', matchId: 'ember-cli-mirage-config-routes-only-export' },
{ handler: 'silence', matchId: 'ember-engines.deprecation-router-service-from-host'},
{ handler: 'silence', matchId: 'ember-test-waiters-legacy-module-name'},
{ handler: 'silence', matchId: 'argument-less-helper-paren-less-invocation'},
{ handler: 'silence', matchId: 'deprecated-run-loop-and-computed-dot-access'},
{ handler: 'silence', matchId: 'ember.built-in-components.import'},
{ handler: 'silence', matchId: 'ember.built-in-components.legacy-arguments'},
{ handler: 'silence', matchId: 'ember.built-in-components.legacy-attribute-arguments'},
{ handler: 'silence', matchId: 'ember.built-in-components.reopen'},
{ handler: 'silence', matchId: 'ember.component.reopen'},
{ handler: 'silence', matchId: 'ember-global'},
{ handler: 'silence', matchId: 'ember.link-to.disabled-when'},
{ handler: 'silence', matchId: 'route-disconnect-outlet'},
{ handler: 'silence', matchId: 'route-render-template'},
{ handler: 'silence', matchId: 'template-compiler.registerPlugin'},
{ handler: 'silence', matchId: 'setting-on-hash'},
],
};
2 changes: 1 addition & 1 deletion config/ember-cli-update.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"packages": [
{
"name": "ember-cli",
"version": "3.26.1",
"version": "3.28.6",
"blueprints": [
{
"name": "app",
Expand Down
20 changes: 14 additions & 6 deletions config/targets.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,20 @@ const browsers = [
'last 1 Safari versions',
];

const isCI = Boolean(process.env.CI);
const isProduction = process.env.EMBER_ENV === 'production';

if (isCI || isProduction) {
// browsers.push('ie 11');
}
// Ember's browser support policy is changing, and IE11 support will end in
// v4.0 onwards.
//
// See https://deprecations.emberjs.com/v3.x#toc_3-0-browser-support-policy
//
// If you need IE11 support on a version of Ember that still offers support
// for it, uncomment the code block below.
//
// const isCI = Boolean(process.env.CI);
// const isProduction = process.env.EMBER_ENV === 'production';
//
// if (isCI || isProduction) {
// browsers.push('ie 11');
// }

module.exports = {
browsers,
Expand Down
Loading

0 comments on commit 2d31a59

Please sign in to comment.