Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion src/tools/auth0/handlers/logStreams.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import DefaultAPIHandler from './default';
import DefaultAPIHandler, { order } from './default';
import { Asset, Assets } from '../../../types';

export const schema = {
Expand Down Expand Up @@ -93,6 +93,7 @@ export default class LogStreamsHandler extends DefaultAPIHandler {
return logStreams;
}

@order('70')
async processChanges(assets: Assets): Promise<void> {
const { logStreams } = assets;

Expand Down
29 changes: 24 additions & 5 deletions src/tools/auth0/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,16 +12,35 @@ export type Stage = 'load' | 'validate' | 'processChanges';

type StageFunction = APIHandler['load']; // Using `load` method as a template for what type stage functions resemble

/**
* Sorts handlers by their @order decorator metadata for a given stage.
* Handlers are sorted in ascending order (lower values execute first).
* Default order is 50 for handlers without explicit @order metadata.
* Uses stable sort: preserves insertion order when order values are equal.
*
* @param toSort - Array of API handlers to sort
* @param stage - The stage name (load, validate, processChanges)
* @returns Sorted array of handlers
*/
function sortByOrder(toSort: APIHandler[], stage: Stage): APIHandler[] {
const defaultOrder = 50;

const sorted = [...toSort];
sorted.sort((a, b) => {
//@ts-ignore because this doesn't actually work. TODO: apply stage order
const aOrder = a[stage].order || defaultOrder;
//@ts-ignore because this doesn't actually work. TODO: apply stage order
const bOrder = b[stage].order || defaultOrder;
return aOrder - bOrder;
// @ts-ignore because stage methods may have order property
const aOrderRaw = a[stage]?.order;
// @ts-ignore because stage methods may have order property
const bOrderRaw = b[stage]?.order;

// Coerce to numbers, default to 50
const aOrder = Number(aOrderRaw) || defaultOrder;
const bOrder = Number(bOrderRaw) || defaultOrder;

// Handle NaN cases (if Number() returns NaN, use default)
const aOrderFinal = Number.isNaN(aOrder) ? defaultOrder : aOrder;
const bOrderFinal = Number.isNaN(bOrder) ? defaultOrder : bOrder;

return aOrderFinal - bOrderFinal;
});
return sorted;
}
Expand Down