MCPcopy Index your code
hub / github.com/codeceptjs/CodeceptJS / createHelpers

Function createHelpers

lib/container.js:331–421  ·  view source on GitHub ↗
(config)

Source from the content-addressed store, hash-verified

329export default Container
330
331async function createHelpers(config) {
332 const helpers = {}
333 for (let helperName in config) {
334 try {
335 let HelperClass
336
337 // Check if helper class was stored in config during ESM import processing
338 if (config[helperName]._helperClass) {
339 HelperClass = config[helperName]._helperClass
340 debug(`helper ${helperName} loaded from ESM import`)
341 }
342
343 // ESM import (legacy check)
344 if (!HelperClass && typeof helperName === 'function' && helperName.prototype) {
345 HelperClass = helperName
346 helperName = HelperClass.constructor.name
347 }
348
349 // classical require - may be async for ESM modules
350 if (!HelperClass) {
351 const helperResult = requireHelperFromModule(helperName, config)
352 if (helperResult instanceof Promise) {
353 // Handle async ESM loading - create placeholder
354 helpers[helperName] = {}
355 asyncHelperPromise = asyncHelperPromise
356 .then(() => helperResult)
357 .then(async ResolvedHelperClass => {
358 debug(`helper ${helperName} resolved type: ${typeof ResolvedHelperClass}`, ResolvedHelperClass)
359
360 // Extract default export from ESM module wrapper if needed
361 if (ResolvedHelperClass && ResolvedHelperClass.__esModule && ResolvedHelperClass.default) {
362 ResolvedHelperClass = ResolvedHelperClass.default
363 debug(`extracted default export for ${helperName}, new type: ${typeof ResolvedHelperClass}`)
364 }
365
366 if (typeof ResolvedHelperClass !== 'function') {
367 throw new Error(`Helper '${helperName}' is not a class. Got: ${typeof ResolvedHelperClass}`)
368 }
369
370 checkHelperRequirements(ResolvedHelperClass)
371 helpers[helperName] = new ResolvedHelperClass(config[helperName])
372 debug(`helper ${helperName} async loaded`)
373 })
374 continue
375 } else {
376 HelperClass = helperResult
377 }
378 }
379
380 // handle async CJS modules that use dynamic import
381 if (isAsyncFunction(HelperClass)) {
382 helpers[helperName] = {}
383
384 asyncHelperPromise = asyncHelperPromise
385 .then(() => HelperClass())
386 .then(ResolvedHelperClass => {
387 // Check if ResolvedHelperClass is a constructor function
388 if (typeof ResolvedHelperClass?.constructor !== 'function') {

Callers 1

createMethod · 0.85

Calls 5

isAsyncFunctionFunction · 0.90
debugFunction · 0.85
requireHelperFromModuleFunction · 0.85
checkHelperRequirementsFunction · 0.85
_initMethod · 0.45

Tested by

no test coverage detected