/**
 * MIT License
 *
 * Copyright (c) 2020-present, Elastic NV
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 *
 */ import { Journey , JourneyCallback , JourneyOptions } from '../dsl' ; import Runner from './runner' ; import { VoidCallback , HooksCallback } from '../common_types' ; import { log } from './logger' ; /**
 * Use a gloabl Runner which would be accessed by the runtime and
 * required to handle the local vs global invocation through CLI
 */ const SYNTHETICS_RUNNER = Symbol . for ( 'SYNTHETICS_RUNNER' ) ; if ( ! global [ SYNTHETICS_RUNNER ] ) { global [ SYNTHETICS_RUNNER ] = new Runner ( ) ; } export const runner = global [ SYNTHETICS_RUNNER ] ; export const journey = ( options , callback ) => { log ( `register journey: ${ JSON . stringify ( options ) }` ) ; if ( typeof options === 'string' ) { options = { name : options , id : options } ; } const j = new Journey ( options , callback ) ; runner . addJourney ( j ) ; return j ; } ; export const step = ( name , callback ) => { log ( `register step: ${ name }` ) ; return runner . currentJourney ?. addStep ( name , callback ) ; } ; export const beforeAll = ( callback ) => { runner . addHook ( 'beforeAll' , callback ) ; } ; export const afterAll = ( callback ) => { runner . addHook ( 'afterAll' , callback ) ; } ; export const before = ( callback ) => { if ( ! runner . currentJourney ) { throw new Error ( 'before is called outside of the journey context' ) ; } return runner . currentJourney . addHook ( 'before' , callback ) ; } ; export const after = ( callback ) => { if ( ! runner . currentJourney ) { throw new Error ( 'after is called outside of the journey context' ) ; } return runner . currentJourney . addHook ( 'after' , callback ) ; } ;