aboutsummaryrefslogtreecommitdiffstats
path: root/build/conf/ts/node_modules.conf
diff options
context:
space:
mode:
authoralexv-smirnov <alex@ydb.tech>2023-06-13 11:05:01 +0300
committeralexv-smirnov <alex@ydb.tech>2023-06-13 11:05:01 +0300
commitbf0f13dd39ee3e65092ba3572bb5b1fcd125dcd0 (patch)
tree1d1df72c0541a59a81439842f46d95396d3e7189 /build/conf/ts/node_modules.conf
parent8bfdfa9a9bd19bddbc58d888e180fbd1218681be (diff)
downloadydb-bf0f13dd39ee3e65092ba3572bb5b1fcd125dcd0.tar.gz
add ymake export to ydb
Diffstat (limited to 'build/conf/ts/node_modules.conf')
-rw-r--r--build/conf/ts/node_modules.conf100
1 files changed, 100 insertions, 0 deletions
diff --git a/build/conf/ts/node_modules.conf b/build/conf/ts/node_modules.conf
new file mode 100644
index 0000000000..aa14b514a2
--- /dev/null
+++ b/build/conf/ts/node_modules.conf
@@ -0,0 +1,100 @@
+PNPM_ROOT=
+PNPM_SCRIPT=$PNPM_ROOT/node_modules/pnpm/dist/pnpm.cjs
+NPM_CONTRIBS_PATH=build/platform/yandex_specific/ts/contribs
+NODE_MODULES_BUNDLE_AS_OUTPUT=
+_NODE_MODULES_INS=
+_NODE_MODULES_OUTS=
+
+# TOUCH_UNIT is required to create module identity file.
+# we can "call" macro as `$_NODE_MODULES(...)`. in this case we will get .CMD from it.
+# this is the only way to process a variable data as an array.
+# ${output;hide:_NODE_MODULES_OUTS} does not produce list of paths, but a single value (space-separeted paths)
+_NODE_MODULES_CMD=$TOUCH_UNIT && $_NODE_MODULES(IN $_NODE_MODULES_INS OUT $_NODE_MODULES_OUTS)
+
+module _NODE_MODULES_BASE: _BARE_UNIT {
+ .CMD=_NODE_MODULES_CMD
+ # ignore SRCS macro
+ .ALIASES=SRCS=_NOOP_MACRO
+ # Propagates peers to related modules
+ .PEERDIR_POLICY=as_build_from
+ .NODE_TYPE=Bundle
+
+ # we have several modules in the same dir (.PEERDIRSELF=NODE_MODULES in BUILD)
+ # we need different names for module identity file
+ # .fake tells builder to not materialize it in results
+ SET(MODULE_SUFFIX .n_m.fake)
+ # .NODE_TYPE=Bundle is required for peers propagation, but it also affects
+ # how merging of pic/nopic graphs. Here we can override this merging behaviour
+ SET(MODULE_TYPE LIBRARY)
+ # define own tag
+ SET(MODULE_TAG NODE_MODULES)
+ # what modules it can PEERDIR to
+ SET(PEERDIR_TAGS TS NPM_CONTRIBS)
+ # do not include it into "results" of graph
+ DISABLE(START_TARGET)
+
+ # we read package.json and erm-packages.json during configuration
+ SET_APPEND(_MAKEFILE_INCLUDE_LIKE_DEPS ${CURDIR}/package.json ${ARCADIA_ROOT}/$ERM_PACKAGES_PATH)
+
+ PEERDIR($NPM_CONTRIBS_PATH)
+ # PEERDIR to the right version of nodejs and pnpm
+ _PEERDIR_TS_RESOURCE(nodejs pnpm)
+ # setup toolchain vars
+ _SET_EXTERNAL_RESOURCES()
+
+ # run py logic
+ _NODE_MODULES_CONFIGURE()
+}
+
+# called in on_node_modules_configure
+macro _SET_NODE_MODULES_INS_OUTS(IN{input}[], OUT{output}[]) {
+ SET(_NODE_MODULES_INS $IN)
+ SET(_NODE_MODULES_OUTS $OUT)
+}
+
+macro _NODE_MODULES(IN{input}[], OUT{output}[]) {
+ .CMD=${cwd:BINDIR} $NOTS_TOOL create-node-modules $NOTS_TOOL_BASE_ARGS --pnpm-script $PNPM_SCRIPT --contribs $NPM_CONTRIBS_PATH ${input;hide:IN} ${output;hide:OUT} ${kv;hide:"p NOMO"} ${kv;hide:"pc magenta"}
+}
+
+
+### @usage: NPM_CONTRIBS() # internal
+###
+### Defines special module that provides contrib tarballs from internal npm registry.
+###
+### @see [FROM_NPM_LOCKFILES()](#macro_FROM_NPM_LOCKFILES)
+module NPM_CONTRIBS: _BARE_UNIT {
+ .CMD=TOUCH_UNIT
+ .PEERDIR_POLICY=as_build_from
+ .FINAL_TARGET=no
+ .ALLOWED=FROM_NPM_LOCKFILES
+ .RESTRICTED=PEERDIR
+ .EXTS=_ # Ignore all files, so module is not affected by FROM_NPM output (.EXTS=* is inherited from _BARE_UNIT)
+
+ SET(MODULE_TAG NPM_CONTRIBS)
+
+ # .fake tells builder to not materialize it in results
+ SET(MODULE_SUFFIX .fake)
+}
+
+### @usage: FROM_NPM_LOCKFILES(LOCKFILES...) # internal
+###
+### Defines lockfile list for `NPM_CONTRIBS` module.
+###
+### @see [NPM_CONTRIBS()](#module_NPM_CONTRIBS)
+macro FROM_NPM_LOCKFILES(LOCKFILES...) {
+ SET_APPEND(_MAKEFILE_INCLUDE_LIKE_DEPS $LOCKFILES)
+ # See implementation in build/plugins/nots.py
+ _FROM_NPM_LOCKFILES($LOCKFILES)
+}
+
+FROM_NPM_CWD=$ARCADIA_BUILD_ROOT/$NPM_CONTRIBS_PATH
+macro _FROM_NPM(NAME, VERSION, SKY_ID, INTEGRITY, INTEGRITY_ALGO, TARBALL_PATH) {
+ .CMD=${cwd:FROM_NPM_CWD} $YMAKE_PYTHON ${input:"build/scripts/fetch_from_npm.py"} ${input;hide:"build/scripts/fetch_from.py"} ${input;hide:"build/scripts/sky.py"} --name $NAME --version $VERSION --sky-id $SKY_ID --integrity $INTEGRITY --integrity-algorithm $INTEGRITY_ALGO --copy-to ${output;noauto:TARBALL_PATH} ${requirements;hide:"network:full"} ${kv;hide:"p NPM"} ${kv;hide:"pc magenta"}
+ # we want output to be available for other modules without affecting NPM_CONTRIBS
+ # we need to expose it (some details in https://st.yandex-team.ru/YMAKE-34)
+ _EXPOSE($TARBALL_PATH)
+}
+
+macro NODE_MODULES() {
+ MESSAGE(Remove NODE_MODULES())
+} \ No newline at end of file