_TS_CHECK_SEPARATOR=~~~ _TS_CHECK_LIST= macro _TS_CHECK(SCRIPT_NAME, IS_MEDIUM, CHECK_TYPE) { SET_APPEND(_TS_CHECK_LIST ${_TS_CHECK_SEPARATOR} ${SCRIPT_NAME} ${IS_MEDIUM} ${CHECK_TYPE}) } macro TS_LINT(SCRIPT_NAME, TIMEOUT_MEDIUM?"yes":"no") { _TS_CHECK($SCRIPT_NAME $TIMEOUT_MEDIUM lint) } macro TS_TEST(SCRIPT_NAME) { _TS_CHECK($SCRIPT_NAME no test) } multimodule TS_TEST_FOR { module TS_TEST_FOR: _BARE_UNIT { .CMD=$TOUCH_UNIT ${hide;kv:"p TS_TST"} ${hide;kv:"pc magenta"} # ignore SRCS macro .ALIASES=SRCS=_NOOP_MACRO TS_TEST_CONFIG=_FORBID_TS_TEST_CONFIG TS_TEST_SRCS=_FORBID_TS_TEST_SRCS # use this parser to get module args in $MODULE_ARGS_RAW .ARGS_PARSER=Raw # Propagates peers to related modules .NODE_TYPE=Bundle .PEERDIR_POLICY=as_build_from .EPILOGUE=_TS_TEST_FOR_EPILOGUE .PEERDIRSELF=TS_PREPARE_DEPS SET(MODULE_TAG TS_TEST_FOR) SET(MODULE_LANG TS) # for multimodule peers we should choose TS SET(PEERDIR_TAGS TS TS_PROTO TS_PROTO_FROM_SCHEMA) # we read erm-packages.json during configuration, so we have to include it to configuration cache key SET_APPEND(_MAKEFILE_INCLUDE_LIKE_DEPS ${ARCADIA_ROOT}/$ERM_PACKAGES_PATH) # parse module args DISABLE(_ALLOW_REL_FOR_PATH) _TS_TEST_FOR_ARGS($MODULE_ARGS_RAW) # PEERDIR that reads required version of tool from package.json _PEERDIR_TS_RESOURCE(nodejs $PM_TYPE) # we don't want to have TS outputs for tests DISABLE(TS_CONFIG_DEDUCE_OUT) } module TS_PREPARE_DEPS: _BARE_UNIT { # ignore SRCS macro .IGNORED=SRCS # use this parser to get module args in $MODULE_ARGS_RAW .ARGS_PARSER=Raw # Propagates peers to related modules .NODE_TYPE=Bundle .PEERDIR_POLICY=as_build_from # .fake tells builder to not materialize it in results SET(MODULE_SUFFIX .test_for.prepare_deps.fake) # lang makrup for statistics SET(MODULE_LANG TS) # what modules it can PEERDIR to SET(PEERDIR_TAGS TS_PREPARE_DEPS) # do not include it into "results" of graph DISABLE(START_TARGET) # parse module args DISABLE(_ALLOW_REL_FOR_PATH) _TS_TEST_FOR_ARGS($MODULE_ARGS_RAW) _TS_CHECK_PREPARE_DEPS_CONFIGURE() } } macro _TS_TEST_FOR_EPILOGUE() { _SET_TS_TEST_FOR_INPUTS() _DEPENDS_ON_MOD() _TS_CHECK_CONFIGURE(TS_TEST_FOR) } # tag:internal macro _SET_TS_TEST_FOR_INPUTS() { _SET_PREFIX(_SET_TS_INPUTS_BASE_EXCLUDES_FOR_TEST ${_FOR_MOD_PATH}/ $_SET_TS_INPUTS_BASE_EXCLUDES) _GLOB(_TS_GLOB_FILES ${_FOR_MOD_PATH}/**/* EXCLUDE ${_SET_TS_INPUTS_BASE_EXCLUDES_FOR_TEST} RESTRICTIONS MAX_MATCHES 10000 MAX_WATCH_DIRS 5000 SKIPPED_MIN_MATCHES 2000 SKIPPED_ERROR_PERCENT 90) _ESCAPE_SPACES(_TS_GLOB_FILES) } # tag:internal macro _SET_PREFIX(VAR_NAME, PREFIX, ITEMS...) { SET($VAR_NAME ${pre=$PREFIX:ITEMS}) } ######################################################## macro _FORBID_TS_TEST_CONFIG(_p...) { _L1 = {COLORS.cyan}TS_TEST_FOR{COLORS.reset} does not support {COLORS.cyan}TS_TEST_CONFIG{COLORS.reset} macro. _L2 = Set proper config path in test script in {COLORS.cyan}package.json{COLORS.reset} _TS_CONF_ERROR(\n$_L1\n$_L2) } macro _FORBID_TS_TEST_SRCS(_p...) { _L1 = {COLORS.cyan}TS_TEST_FOR{COLORS.reset} does not require {COLORS.cyan}TS_TEST_SRCS{COLORS.reset} macro. _L2 = Remove {COLORS.cyan}TS_TEST_SRCS(){COLORS.reset} from ya.make _TS_CONF_ERROR(\n$_L1\n$_L2) }