Skip to content

Commit

Permalink
Merge pull request #2875 from mainmatter/remove-evented-mixin
Browse files Browse the repository at this point in the history
Remove Evented mixin. Use native EventTarget.
  • Loading branch information
BobrImperator authored Dec 25, 2024
2 parents 831ad9b + f792d26 commit 4ed6d5b
Show file tree
Hide file tree
Showing 8 changed files with 103 additions and 40 deletions.
35 changes: 28 additions & 7 deletions packages/ember-simple-auth/src/authenticators/base.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import Evented from '@ember/object/evented';
import EmberObject from '@ember/object';

class AuthenticatorEventTarget extends EventTarget {}

/**
The base class for all authenticators. __This serves as a starting point for
implementing custom authenticators and must not be used directly.__
Expand Down Expand Up @@ -51,10 +52,11 @@ import EmberObject from '@ember/object';
@class BaseAuthenticator
@extends Ember.Object
@uses Ember.Evented
@public
*/
export default EmberObject.extend(Evented, {
export default class EsaBaseAuthenticator extends EmberObject {
authenticatorEvents = new AuthenticatorEventTarget();

/**
__Triggered when the authentication data is updated by the authenticator
due to an external or scheduled event__. This might happen, e.g., if the
Expand Down Expand Up @@ -109,7 +111,7 @@ export default EmberObject.extend(Evented, {
*/
restore() {
return Promise.reject();
},
}

/**
Authenticates the session with the specified `args`. These options vary
Expand Down Expand Up @@ -138,7 +140,7 @@ export default EmberObject.extend(Evented, {
*/
authenticate() {
return Promise.reject();
},
}

/**
This method is invoked as a callback when the session is invalidated. While
Expand All @@ -163,5 +165,24 @@ export default EmberObject.extend(Evented, {
*/
invalidate() {
return Promise.resolve();
},
});
}

on(event, cb) {
this.authenticatorEvents.addEventListener(event, cb);
}

off(event, cb) {
this.authenticatorEvents.removeEventListener(event, cb);
}

trigger(event, value) {
let customEvent;
if (value) {
customEvent = new CustomEvent(event, { detail: value });
} else {
customEvent = new CustomEvent(event);
}

this.authenticatorEvents.dispatchEvent(customEvent);
}
}
36 changes: 29 additions & 7 deletions packages/ember-simple-auth/src/internal-session.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
import { isEmpty, isNone } from '@ember/utils';
import ObjectProxy from '@ember/object/proxy';
import Evented from '@ember/object/evented';
import { set } from '@ember/object';
import { debug, assert } from '@ember/debug';
import { getOwner, setOwner } from '@ember/application';
import { isTesting } from '@embroider/macros';

class SessionEventTarget extends EventTarget {}

/**
__An internal implementation of Session. Communicates with stores and emits events.__
Expand All @@ -14,7 +15,7 @@ import { isTesting } from '@embroider/macros';
@private
*/

export default ObjectProxy.extend(Evented, {
export default ObjectProxy.extend({
/**
Triggered whenever the session is successfully authenticated. This happens
when the session gets authenticated via
Expand Down Expand Up @@ -46,6 +47,7 @@ export default ObjectProxy.extend(Evented, {
store: null,
isAuthenticated: false,
attemptedTransition: null,
sessionEvents: null,

init() {
this._super(...arguments);
Expand All @@ -55,6 +57,7 @@ export default ObjectProxy.extend(Evented, {
storeFactory = 'session-store:test';
}

this.sessionEvents = new SessionEventTarget();
this.set('store', getOwner(this).lookup(storeFactory));
this._busy = false;
this._bindToStoreEvents();
Expand Down Expand Up @@ -94,7 +97,7 @@ export default ObjectProxy.extend(Evented, {
let authenticator = this._lookupAuthenticator(this.authenticator);
return authenticator.invalidate(this.content.authenticated, ...arguments).then(
() => {
authenticator.off('sessionDataUpdated', this, this._onSessionDataUpdated);
authenticator.off('sessionDataUpdated', this._onSessionDataUpdated.bind(this));
this._busy = false;
return this._clear(true);
},
Expand Down Expand Up @@ -214,11 +217,11 @@ export default ObjectProxy.extend(Evented, {

_bindToAuthenticatorEvents() {
const authenticator = this._lookupAuthenticator(this.authenticator);
authenticator.on('sessionDataUpdated', this, this._onSessionDataUpdated);
authenticator.on('sessionDataInvalidated', this, this._onSessionDataInvalidated);
authenticator.on('sessionDataUpdated', this._onSessionDataUpdated.bind(this));
authenticator.on('sessionDataInvalidated', this._onSessionDataInvalidated.bind(this));
},

_onSessionDataUpdated(content) {
_onSessionDataUpdated({ detail: content }) {
this._setup(this.authenticator, content);
},

Expand All @@ -227,7 +230,7 @@ export default ObjectProxy.extend(Evented, {
},

_bindToStoreEvents() {
this.store.on('sessionDataUpdated', content => {
this.store.on('sessionDataUpdated', ({ detail: content }) => {
if (!this._busy) {
this._busy = true;
let { authenticator: authenticatorFactory } = content.authenticated || {};
Expand Down Expand Up @@ -269,4 +272,23 @@ export default ObjectProxy.extend(Evented, {
setOwner(authenticator, owner);
return authenticator;
},

on(event, cb) {
this.sessionEvents.addEventListener(event, cb);
},

off(event, cb) {
this.sessionEvents.removeEventListener(event, cb);
},

trigger(event, value) {
let customEvent;
if (value) {
customEvent = new CustomEvent(event, { detail: value });
} else {
customEvent = new CustomEvent(event);
}

this.sessionEvents.dispatchEvent(customEvent);
},
});
2 changes: 1 addition & 1 deletion packages/ember-simple-auth/src/session-stores/adaptive.js
Original file line number Diff line number Diff line change
Expand Up @@ -191,7 +191,7 @@ export default Base.extend({
},

_setupStoreEvents(store) {
store.on('sessionDataUpdated', data => {
store.on('sessionDataUpdated', ({ detail: data }) => {
this.trigger('sessionDataUpdated', data);
});
return store;
Expand Down
34 changes: 27 additions & 7 deletions packages/ember-simple-auth/src/session-stores/base.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import EmberObject from '@ember/object';
import Evented from '@ember/object/evented';

class SessionStoreEventTarget extends EventTarget {}

/**
The base class for all session stores. __This serves as a starting point for
Expand All @@ -10,10 +11,10 @@ import Evented from '@ember/object/evented';
@class BaseStore
@extends Ember.Object
@uses Ember.Evented
@public
*/
export default EmberObject.extend(Evented, {
export default class EsaBaseSessionStore extends EmberObject {
sessionStoreEvents = new SessionStoreEventTarget();
/**
Triggered when the session store's data changes due to an external event,
e.g., from another tab or window of the same application. The session
Expand Down Expand Up @@ -41,7 +42,7 @@ export default EmberObject.extend(Evented, {
*/
persist() {
return Promise.reject();
},
}

/**
Returns all data currently stored as a plain object.
Expand All @@ -56,7 +57,7 @@ export default EmberObject.extend(Evented, {
*/
restore() {
return Promise.reject();
},
}

/**
Clears the store.
Expand All @@ -71,5 +72,24 @@ export default EmberObject.extend(Evented, {
*/
clear() {
return Promise.reject();
},
});
}

on(event, cb) {
this.sessionStoreEvents.addEventListener(event, cb);
}

off(event, cb) {
this.sessionStoreEvents.removeEventListener(event, cb);
}

trigger(event, value) {
let customEvent;
if (value) {
customEvent = new CustomEvent(event, { detail: value });
} else {
customEvent = new CustomEvent(event);
}

this.sessionStoreEvents.dispatchEvent(customEvent);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -491,7 +491,7 @@ module('OAuth2PasswordGrantAuthenticator', function (hooks) {
test('triggers the "sessionDataUpdated" event', async function (assert) {
assert.expect(2);
await new Promise(resolve => {
authenticator.one('sessionDataUpdated', data => {
authenticator.on('sessionDataUpdated', ({ detail: data }) => {
assert.true(data['expires_at'] > new Date().getTime());
delete data['expires_at'];
assert.deepEqual(data, {
Expand Down Expand Up @@ -519,7 +519,7 @@ module('OAuth2PasswordGrantAuthenticator', function (hooks) {
test('triggers the "sessionDataUpdated" event with the correct data', async function (assert) {
assert.expect(2);
await new Promise(resolve => {
authenticator.one('sessionDataUpdated', data => {
authenticator.on('sessionDataUpdated', ({ detail: data }) => {
assert.true(data['expires_at'] > new Date().getTime());
delete data['expires_at'];
assert.deepEqual(data, {
Expand Down Expand Up @@ -567,7 +567,7 @@ module('OAuth2PasswordGrantAuthenticator', function (hooks) {
]);

await new Promise(resolve => {
authenticator.one('sessionDataUpdated', data => {
authenticator.on('sessionDataUpdated', ({ detail: data }) => {
assert.equal(data.scope, 'scope!');

resolve();
Expand Down
26 changes: 13 additions & 13 deletions packages/test-esa/tests/unit/internal-session-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ module('InternalSession', function (hooks) {
test('triggers the "invalidationSucceeded" event', async function (assert) {
assert.expect(1);
let triggered = false;
session.one('invalidationSucceeded', () => {
session.on('invalidationSucceeded', () => {
triggered = true;
});
authenticator.trigger('sessionDataInvalidated');
Expand Down Expand Up @@ -217,7 +217,7 @@ module('InternalSession', function (hooks) {

test('does not trigger the "authenticationSucceeded" event', async function (assert) {
let triggered = false;
session.one('authenticationSucceeded', () => (triggered = true));
session.on('authenticationSucceeded', () => (triggered = true));
await session.restore();

assert.notOk(triggered);
Expand Down Expand Up @@ -329,7 +329,7 @@ module('InternalSession', function (hooks) {

test('triggers the "authenticationSucceeded" event', async function (assert) {
let triggered = false;
session.one('authenticationSucceeded', () => (triggered = true));
session.on('authenticationSucceeded', () => (triggered = true));

await session.authenticate('authenticator:test');

Expand Down Expand Up @@ -395,7 +395,7 @@ module('InternalSession', function (hooks) {
assert.expect(1);
let triggered = false;
sinon.stub(authenticator, 'authenticate').rejects('error auth');
session.one('authenticationSucceeded', () => (triggered = true));
session.on('authenticationSucceeded', () => (triggered = true));

try {
await session.authenticate('authenticator:test');
Expand Down Expand Up @@ -486,7 +486,7 @@ module('InternalSession', function (hooks) {

test('triggers the "invalidationSucceeded" event', async function (assert) {
let triggered = false;
session.one('invalidationSucceeded', () => (triggered = true));
session.on('invalidationSucceeded', () => (triggered = true));

await session.invalidate();

Expand Down Expand Up @@ -551,7 +551,7 @@ module('InternalSession', function (hooks) {
assert.expect(1);
sinon.stub(authenticator, 'invalidate').rejects('error');
let triggered = false;
session.one('invalidationSucceeded', () => (triggered = true));
session.on('invalidationSucceeded', () => (triggered = true));

try {
await session.invalidate();
Expand Down Expand Up @@ -723,7 +723,7 @@ module('InternalSession', function (hooks) {
test('does not trigger the "authenticationSucceeded" event', async function (assert) {
assert.expect(1);
let triggered = false;
session.one('authenticationSucceeded', () => (triggered = true));
session.on('authenticationSucceeded', () => (triggered = true));
store.trigger('sessionDataUpdated', {
some: 'other property',
authenticated: { authenticator: 'authenticator:test' },
Expand All @@ -746,7 +746,7 @@ module('InternalSession', function (hooks) {
test('triggers the "authenticationSucceeded" event', async function (assert) {
assert.expect(1);
let triggered = false;
session.one('authenticationSucceeded', () => (triggered = true));
session.on('authenticationSucceeded', () => (triggered = true));
store.trigger('sessionDataUpdated', {
some: 'other property',
authenticated: { authenticator: 'authenticator:test' },
Expand Down Expand Up @@ -828,7 +828,7 @@ module('InternalSession', function (hooks) {
test('triggers the "invalidationSucceeded" event', async function (assert) {
assert.expect(1);
let triggered = false;
session.one('invalidationSucceeded', () => (triggered = true));
session.on('invalidationSucceeded', () => (triggered = true));
store.trigger('sessionDataUpdated', {
some: 'other property',
authenticated: { authenticator: 'authenticator:test' },
Expand All @@ -851,7 +851,7 @@ module('InternalSession', function (hooks) {
test('does not trigger the "invalidationSucceeded" event', async function (assert) {
assert.expect(1);
let triggered = false;
session.one('invalidationSucceeded', () => (triggered = true));
session.on('invalidationSucceeded', () => (triggered = true));
store.trigger('sessionDataUpdated', {
some: 'other property',
authenticated: { authenticator: 'authenticator:test' },
Expand Down Expand Up @@ -921,7 +921,7 @@ module('InternalSession', function (hooks) {
test('triggers the "invalidationSucceeded" event', async function (assert) {
assert.expect(1);
let triggered = false;
session.one('invalidationSucceeded', () => (triggered = true));
session.on('invalidationSucceeded', () => (triggered = true));
store.trigger('sessionDataUpdated', { some: 'other property' });

await new Promise(resolve => {
Expand All @@ -941,7 +941,7 @@ module('InternalSession', function (hooks) {
test('does not trigger the "invalidationSucceeded" event', async function (assert) {
assert.expect(1);
let triggered = false;
session.one('invalidationSucceeded', () => (triggered = true));
session.on('invalidationSucceeded', () => (triggered = true));
store.trigger('sessionDataUpdated', { some: 'other property' });

await new Promise(resolve => {
Expand All @@ -954,7 +954,7 @@ module('InternalSession', function (hooks) {

test('it does not trigger the "sessionInvalidationFailed" event', async function (assert) {
let triggered = false;
session.one('sessionInvalidationFailed', () => (triggered = true));
session.on('sessionInvalidationFailed', () => (triggered = true));

await session.invalidate();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -210,7 +210,7 @@ export default function (options) {
cookieName: 'ember_simple_auth-session',
});
triggered = false;
store.one('sessionDataUpdated', () => {
store.on('sessionDataUpdated', () => {
triggered = true;
});
});
Expand Down
Loading

0 comments on commit 4ed6d5b

Please sign in to comment.