@@ -5,9 +5,11 @@ import { join as pathJoin } from "path";
55import { tryStat } from "./fs" ;
66import {
77 isValidTask ,
8+ ReleasableTaskList ,
89 SharedOptions ,
910 TaskList ,
1011 WatchedTaskList ,
12+ WorkerPluginContext ,
1113} from "./interfaces" ;
1214import { FileDetails } from "./interfaces.js" ;
1315import { CompiledSharedOptions , processSharedOptions } from "./lib" ;
@@ -102,7 +104,26 @@ export async function getTasks(
102104export async function getTasksInternal (
103105 compiledSharedOptions : CompiledSharedOptions ,
104106 taskPath : string ,
105- ) : Promise < WatchedTaskList > {
107+ ) : Promise < ReleasableTaskList > {
108+ return await compiledSharedOptions . middleware . run (
109+ "getTasks" ,
110+ {
111+ ctx : compiledSharedOptions ,
112+ taskPath,
113+ taskList : {
114+ tasks : Object . create ( null ) ,
115+ release ( ) { } ,
116+ } ,
117+ } ,
118+ _getTasksFromFilesystem ,
119+ ) ;
120+ }
121+
122+ async function _getTasksFromFilesystem (
123+ event : GraphileWorker . GetTasksEvent ,
124+ ) : Promise < ReleasableTaskList > {
125+ const { ctx : compiledSharedOptions , taskList, taskPath } = event ;
126+
106127 const { logger } = compiledSharedOptions ;
107128 const pathStat = await tryStat ( taskPath ) ;
108129 if ( ! pathStat ) {
@@ -111,7 +132,7 @@ export async function getTasksInternal(
111132 ) ;
112133 }
113134
114- const tasks : TaskList = Object . create ( null ) ;
135+ const tasks = taskList . tasks ;
115136
116137 if ( pathStat . isFile ( ) ) {
117138 // Try and require it
@@ -142,6 +163,11 @@ export async function getTasksInternal(
142163 await compiledSharedOptions . hooks . process ( "loadTaskFromFiles" , event ) ;
143164 const handler = event . handler ;
144165 if ( handler ) {
166+ if ( tasks [ taskIdentifier ] ) {
167+ logger . warn ( `Overwriting task identifier '${ taskIdentifier } '` , {
168+ taskIdentifier,
169+ } ) ;
170+ }
145171 tasks [ taskIdentifier ] = handler ;
146172 } else {
147173 logger . warn (
@@ -153,21 +179,11 @@ export async function getTasksInternal(
153179 }
154180 }
155181
156- let released = false ;
157- return {
158- tasks,
159- compiledSharedOptions,
160- release : ( ) => {
161- if ( released ) {
162- return ;
163- }
164- released = true ;
165- } ,
166- } ;
182+ return taskList ;
167183}
168184
169185async function getTasksFromDirectory (
170- compiledSharedOptions : CompiledSharedOptions ,
186+ compiledSharedOptions : WorkerPluginContext ,
171187 collectedTaskPaths : Record < string , FileDetails [ ] > ,
172188 taskPath : string ,
173189 subpath : string [ ] ,
@@ -222,7 +238,7 @@ async function getTasksFromDirectory(
222238}
223239
224240function maybeAddFile (
225- compiledSharedOptions : CompiledSharedOptions ,
241+ compiledSharedOptions : WorkerPluginContext ,
226242 collectedTaskPaths : Record < string , FileDetails [ ] > ,
227243 subpath : string [ ] ,
228244 entry : string ,
0 commit comments