_NOTS_TOOL_BUILD_LIBRARY_CMD=build-library _TS_PACKAGE=no _TS_BUILD_SCRIPT= _TS_OUTPUTS_PARAM= _TS_OUTPUTS= _TS_OUTPUTS_JOINED= _TS_GLOB_FILES= _TS_MOD_NAME= TS_LIBRARY_CMD_BASE=${NOTS_TOOL} ${NOTS_TOOL_BASE_ARGS} ${_NOTS_TOOL_BUILD_LIBRARY_CMD} ${NOTS_TOOL_BASIC_BUILDER_ARGS} \ ${_TS_OUTPUTS_PARAM} ${_TS_OUTPUTS} \ --exclude-globs ${_SET_TS_INPUTS_BASE_EXCLUDES} \ ${hide:PEERS} \ ${_NODE_MODULES_INOUTS} \ ${hide;input=TEXT:_TS_GLOB_FILES} \ ${hide;input:"ya.make"} \ ${hide;input:"package.json"} TS_LIBRARY_CMD=${_TS_PROJECT_SETUP_CMD} \ && ${ADD_VCS_INFO_FILE_CMD} \ && ${TS_LIBRARY_CMD_BASE} \ --build-script ${_TS_BUILD_SCRIPT} \ ${hide;kv:"pc magenta"} ${hide;kv:"p TS_LIB"} ### @usage: TS_LIBRARY([name]) ### ### The TypeScript/JavaScript library module, compiles TypeScript sources to JavaScript using tsc. ### Build results are JavaScript files, typings and source mappings (depending on local tsconfig.json settings). ### ### Documentation: https://docs.yandex-team.ru/frontend-in-arcadia/references/TS_LIBRARY ### ### @example ### ### TS_LIBRARY() ### ### END() ### multimodule TS_LIBRARY { module BUILD: _TS_BASE_UNIT { .CMD=$TS_LIBRARY_CMD .SEM=$_SEM_IGNORED .EPILOGUE=_TS_LIBRARY_EPILOGUE .PEERDIRSELF=TS_PREPARE_DEPS .ALIASES=TS_TEST=_FORBID_TS_TEST TS_BIOME=_FORBID_TS_BIOME TS_TYPECHECK=_FORBID_TS_TYPECHECK TS_STYLELINT=_FORBID_TS_STYLELINT TS_ESLINT_CONFIG=_FORBID_TS_ESLINT_CONFIG RUN_JAVASCRIPT_AFTER_BUILD=_FORBID_RUN_JAVASCRIPT_AFTER_BUILD TS_FILES=_FORBID_TS_FILES TS_FILES_GLOB=_FORBID_TS_FILES_GLOB TS_CONFIG=_FORBID_TS_CONFIG TS_NEXT_CONFIG=_FORBID_TS_NEXT_CONFIG TS_VITE_CONFIG=_FORBID_TS_VITE_CONFIG TS_WEBPACK_CONFIG=_FORBID_TS_WEBPACK_CONFIG TS_RSPACK_CONFIG=_FORBID_TS_RSPACK_CONFIG TS_NEXT_OUTPUT=_FORBID_TS_NEXT_OUTPUT TS_VITE_OUTPUT=_FORBID_TS_VITE_OUTPUT TS_WEBPACK_OUTPUT=_FORBID_TS_WEBPACK_OUTPUT TS_RSPACK_OUTPUT=_FORBID_TS_RSPACK_OUTPUT # by default multimodule overrides inherited MODULE_TAG to submodule name (BUILD in this case) # but we have to set it to TS for include processor to work SET(MODULE_TAG TS) SET(_TS_MOD_NAME TS_LIBRARY) DISABLE(TS_CONFIG_DEDUCE_OUT) SET_APPEND(_MAKEFILE_INCLUDE_LIKE_DEPS ${CURDIR}/package.json) } module TS_PREPARE_DEPS: _PREPARE_DEPS_BASE { } } macro TS_BUILD_SCRIPT(SCRIPT) { SET(_TS_BUILD_SCRIPT ${SCRIPT}) } macro TS_BUILD_OUTPUTS(PATHS...) { SET(_TS_OUTPUTS_PARAM --outputs) SET(_TS_OUTPUTS ${PATHS}) SET(_TS_OUTPUTS_JOINED ${join=|:PATHS}) } macro _TS_LIBRARY_EPILOGUE() { _SET_TS_INPUTS() _SETUP_BUILD_ENV() _TS_LIBRARY_CONFIGURE() _TS_CHECK_CONFIGURE(TS_LIBRARY) } # Exclusions for TS_LIBRARY input files: # - a.yaml: build system files, not needed for `node --run` # - .npmrc: we don't want it to affect build # - package.json: added separately via explicit input/output directives (line 13-14), needs to be copied earlier # - pnpm-lock.yaml: BUILD depends not on it, but on files that PREPARE_DEPS prepares _SET_TS_INPUTS_BASE_EXCLUDES=a.yaml .npmrc package.json pnpm-lock.yaml \ output.tar \ output.tar.uuid \ workspace_node_modules.tar \ ${TS_EXCLUDE_DIR_GLOB} \ ${TS_GLOB_EXCLUDE_ADDITIONAL} _SET_TS_INPUTS_EXCLUDES=\ ${_SET_TS_INPUTS_BASE_EXCLUDES} \ (${_TS_OUTPUTS_JOINED})/**/* # tag:internal macro _SET_TS_INPUTS() { _GLOB(_TS_GLOB_FILES **/* EXCLUDE ${_SET_TS_INPUTS_EXCLUDES} RESTRICTIONS MAX_MATCHES 10000 MAX_WATCH_DIRS 5000 SKIPPED_MIN_MATCHES 2000 SKIPPED_ERROR_PERCENT 90) _ESCAPE_SPACES(_TS_GLOB_FILES) } ######################################################## macro _FORBID_TS_TEST(_p...) { _L1 = {COLORS.cyan}${_TS_MOD_NAME}{COLORS.reset} forbids to use {COLORS.cyan}TS_TEST{COLORS.reset} macro _L2 = You cannot describe unit-tests inside of {COLORS.cyan}${_TS_MOD_NAME}{COLORS.reset} _L3 = https://docs.yandex-team.ru/frontend-in-arcadia/index/quick-start#unit-tests-in-ts-library _TS_CONF_ERROR(\n$_L1\n$_L2\n$_L3) } macro _FORBID_TS_BIOME(_p...) { _L1 = {COLORS.cyan}${_TS_MOD_NAME}{COLORS.reset} does not support {COLORS.cyan}TS_BIOME{COLORS.reset} macro. _L2 = Use {COLORS.cyan}TS_LINT{COLORS.reset} instead _L3 = https://docs.yandex-team.ru/frontend-in-arcadia/references/macros#ts-lint _TS_CONF_ERROR(\n$_L1\n$_L2\n$_L3) } macro _FORBID_TS_TYPECHECK(_p...) { _L1 = {COLORS.cyan}${_TS_MOD_NAME}{COLORS.reset} does not support {COLORS.cyan}TS_TYPECHECK{COLORS.reset} macro. _L2 = Use {COLORS.cyan}TS_LINT{COLORS.reset} instead _L3 = https://docs.yandex-team.ru/frontend-in-arcadia/references/macros#ts-lint _TS_CONF_ERROR(\n$_L1\n$_L2\n$_L3) } macro _FORBID_TS_STYLELINT(_p...) { _L1 = {COLORS.cyan}${_TS_MOD_NAME}{COLORS.reset} does not support {COLORS.cyan}TS_STYLELINT{COLORS.reset} macro. _L2 = Use {COLORS.cyan}TS_LINT{COLORS.reset} instead _L3 = https://docs.yandex-team.ru/frontend-in-arcadia/references/macros#ts-lint _TS_CONF_ERROR(\n$_L1\n$_L2\n$_L3) } macro _FORBID_TS_ESLINT_CONFIG(_p...) { _L1 = {COLORS.cyan}${_TS_MOD_NAME}{COLORS.reset} does not support {COLORS.cyan}TS_ESLINT_CONFIG{COLORS.reset} macro. _L2 = Use {COLORS.cyan}TS_LINT{COLORS.reset} instead _L3 = https://docs.yandex-team.ru/frontend-in-arcadia/references/macros#ts-lint _TS_CONF_ERROR(\n$_L1\n$_L2\n$_L3) } macro _FORBID_RUN_JAVASCRIPT_AFTER_BUILD(_p...) { _L1 = {COLORS.cyan}${_TS_MOD_NAME}{COLORS.reset} does not support {COLORS.cyan}RUN_JAVASCRIPT_AFTER_BUILD{COLORS.reset} _L2 = Write required script in package.json and use {COLORS.cyan}TS_BUILD_SCRIPT{COLORS.reset} _TS_CONF_ERROR(\n$_L1\n$_L2) } macro _FORBID_TS_FILES(_p...) { _L1 = {COLORS.cyan}${_TS_MOD_NAME}{COLORS.reset} does not support {COLORS.cyan}TS_FILES{COLORS.reset} macro _L2 = If you used it to mark files as inputs - just remove it, all files are inputs for {COLORS.cyan}${_TS_MOD_NAME}{COLORS.reset} _L3 = If you used it to mark files as outputs - write them in {COLORS.cyan}files{COLORS.reset} field in {COLORS.cyan}package.json{COLORS.reset} _TS_CONF_ERROR(\n$_L1\n$_L2\n$_L3) } macro _FORBID_TS_FILES_GLOB(_p...) { _L1 = {COLORS.cyan}${_TS_MOD_NAME}{COLORS.reset} does not support {COLORS.cyan}TS_FILES_GLOB{COLORS.reset} macro _L2 = If you used it to mark files as inputs - just remove it, all files are inputs for {COLORS.cyan}${_TS_MOD_NAME}{COLORS.reset} _L3 = If you used it to mark files as outputs - write them in {COLORS.cyan}files{COLORS.reset} field in {COLORS.cyan}package.json{COLORS.reset} _TS_CONF_ERROR(\n$_L1\n$_L2\n$_L3) } macro _FORBID_TS_CONFIG(_p...) { _L1 = {COLORS.cyan}${_TS_MOD_NAME}{COLORS.reset} does not support {COLORS.cyan}TS_CONFIG{COLORS.reset} macro _L2 = Set proper config path in build script in {COLORS.cyan}package.json{COLORS.reset} _TS_CONF_ERROR(\n$_L1\n$_L2) } macro _FORBID_TS_NEXT_CONFIG(_p...) { _L1 = {COLORS.cyan}${_TS_MOD_NAME}{COLORS.reset} does not support {COLORS.cyan}TS_NEXT_CONFIG{COLORS.reset} macro _L2 = Set proper config path in build script in {COLORS.cyan}package.json{COLORS.reset} _TS_CONF_ERROR(\n$_L1\n$_L2) } macro _FORBID_TS_VITE_CONFIG(_p...) { _L1 = {COLORS.cyan}${_TS_MOD_NAME}{COLORS.reset} does not support {COLORS.cyan}TS_VITE_CONFIG{COLORS.reset} macro _L2 = Set proper config path in build script in {COLORS.cyan}package.json{COLORS.reset} _TS_CONF_ERROR(\n$_L1\n$_L2) } macro _FORBID_TS_WEBPACK_CONFIG(_p...) { _L1 = {COLORS.cyan}${_TS_MOD_NAME}{COLORS.reset} does not support {COLORS.cyan}TS_WEBPACK_CONFIG{COLORS.reset} macro _L2 = Set proper config path in build script in {COLORS.cyan}package.json{COLORS.reset} _TS_CONF_ERROR(\n$_L1\n$_L2) } macro _FORBID_TS_RSPACK_CONFIG(_p...) { _L1 = {COLORS.cyan}${_TS_MOD_NAME}{COLORS.reset} does not support {COLORS.cyan}TS_RSPACK_CONFIG{COLORS.reset} macro _L2 = Set proper config path in build script in {COLORS.cyan}package.json{COLORS.reset} _TS_CONF_ERROR(\n$_L1\n$_L2) } macro _FORBID_TS_NEXT_OUTPUT(_p...) { _L1 = {COLORS.cyan}${_TS_MOD_NAME}{COLORS.reset} does not support {COLORS.cyan}TS_NEXT_OUTPUT{COLORS.reset} macro _L2 = Use {COLORS.cyan}TS_BUILD_OUTPUTS{COLORS.reset} instead _TS_CONF_ERROR(\n$_L1\n$_L2) } macro _FORBID_TS_VITE_OUTPUT(_p...) { _L1 = {COLORS.cyan}${_TS_MOD_NAME}{COLORS.reset} does not support {COLORS.cyan}TS_VITE_OUTPUT{COLORS.reset} macro _L2 = Use {COLORS.cyan}TS_BUILD_OUTPUTS{COLORS.reset} instead _TS_CONF_ERROR(\n$_L1\n$_L2) } macro _FORBID_TS_WEBPACK_OUTPUT(_p...) { _L1 = {COLORS.cyan}${_TS_MOD_NAME}{COLORS.reset} does not support {COLORS.cyan}TS_WEBPACK_OUTPUT{COLORS.reset} macro _L2 = Use {COLORS.cyan}TS_BUILD_OUTPUTS{COLORS.reset} instead _TS_CONF_ERROR(\n$_L1\n$_L2) } macro _FORBID_TS_RSPACK_OUTPUT(_p...) { _L1 = {COLORS.cyan}${_TS_MOD_NAME}{COLORS.reset} does not support {COLORS.cyan}TS_RSPACK_OUTPUT{COLORS.reset} macro _L2 = Use {COLORS.cyan}TS_BUILD_OUTPUTS{COLORS.reset} instead _TS_CONF_ERROR(\n$_L1\n$_L2) }