yank-note

LOW
maintainer zxp19821005 0 votes scanned 2026-11-01 00:21:48.120785
View on AUR
Why flagged

The flagged 'yarn add -D' in prepare() installs a dev dependency directly, but it's part of building the project from source using its own tooling and declared workflow, not an undeclared external execution or supply-chain attack.

Triggered rules

Low AI review downgraded a static finding llm_review

The static rules flagged this MEDIUM, but an AI model (qwen/qwen3-235b-a22b-2507) reviewed the full PKGBUILD and judged it LOW (confidence 95%): The flagged 'yarn add -D' in prepare() installs a dev dependency directly, but it's part of building the project from source using its own tooling and declared workflow, not an undeclared external execution or supply-chain attack.

1 higher static finding superseded - not the current verdict (shown for transparency)
Medium npm/yarn/pnpm install of an undeclared external package npm_install_external

Runs `npm/yarn/pnpm install <package>` for a package not in source=(), pulling unpinned, unreviewed code at build time. Severity downgraded: the package declares/looks like a Node.js consumer, where build-time installs are expected.

  • PKGBUILD:123 yarn add -D "@types/tar-stream"

PKGBUILD

1 offending line(s) highlighted
1# Maintainer: zxp19821005 <zxp19821005 at 163 dot com>
2pkgname=yank-note
3_pkgname='Yank Note'
4pkgver=3.93.0
5_electronversion=41
6_nodeversion=22
7pkgrel=1
8pkgdesc='A Hackable Markdown Note Application for Programmers.'
9arch=('x86_64')
10url="https://yank-note.com/"
11_ghurl="https://github.com/purocean/yn"
12license=('AGPL-3.0-only')
13conflicts=("${pkgname}")
14depends=(
15 "electron${_electronversion}"
16 'python'
17 'ripgrep'
18 'java-runtime'
19)
20makedepends=(
21 'gendesk'
22 'npm'
23 'yarn'
24 'nvm'
25 'curl'
26 'git'
27 'python'
28 'jq'
29)
30source=(
31 "${pkgname}.git::git+${_ghurl}#tag=v${pkgver}"
32 "${pkgname}.sh"
33)
34sha256sums=('796894840e537436d10ebbc29ff3b9ab4eada7a59959f39aef6c6037fcc4bdf2'
35 'a774c2f54fbbeeaac3cefc0f7250796d30c86d27f0fd40b7eaf9c0fdb021623d')
36_ensure_local_nvm() {
37 local NVM_DIR="${srcdir}/.nvm"
38 source /usr/share/nvm/init-nvm.sh || [[ $? != 1 ]]
39 nvm install "${_nodeversion}"
40 nvm use "${_nodeversion}"
41}
42_get_electron_version() {
43 _elec_ver=$(find "${srcdir}" -maxdepth 5 -name "package.json" ! -path "*/node_modules/*" \
44 -exec grep -l '"electron"' {} + | xargs -I{} jq -r '(.devDependencies.electron // .dependencies.electron) // empty' {} 2>/dev/null | head -1)
45 [[ -z "${_elec_ver}" ]] && return 1
46 echo -e "The electron version is: \033[1;31m${_elec_ver%%.*}\033[0m"
47}
48_get_app_dir() {
49 find "${srcdir}" -type d -name "node_modules" -prune -o -type f -name "resources.pak" -print0 | xargs -0 dirname | head -n 1
50}
51_set_build_env() {
52 export ELECTRON_DIST="/usr/lib/electron${_electronversion}"
53 export ELECTRON_OVERRIDE_DIST_PATH="${ELECTRON_DIST}"
54 export ELECTRON_SKIP_BINARY_DOWNLOAD=1
55 export SYSTEM_ELECTRON_VERSION="$(electron${_electronversion} -v | sed 's/^v//')"
56 export HOME="${srcdir}/.electron-gyp"
57 export XDG_CACHE_HOME="${srcdir}/.cache"
58 export XDG_CONFIG_HOME="${srcdir}/.config"
59 export XDG_DATA_HOME="${srcdir}/.local/share"
60 export YARN_CACHE_FOLDER="${srcdir}/.yarn/cache"
61 export YARN_NETWORK_CONCURRENCY=32
62 export COREPACK_NPM_REGISTRY="${COREPACK_NPM_REGISTRY:-${NPM_CONFIG_REGISTRY:-https://registry.npmjs.org}}"
63 export COREPACK_HOME="${srcdir}/.corepack"
64 export npm_config_registry="${NPM_CONFIG_REGISTRY:-https://registry.npmjs.org}"
65 local _yarnver _yarnmajor=0
66 _yarnver="$(node -p "require('./package.json').packageManager?.split('@')[1]?.split('-')[0] || ''" 2>/dev/null)"
67 _yarnmajor="${_yarnver%%.*}"
68 _yarnmajor="${_yarnmajor:-0}"
69 if [[ "${_yarnmajor}" -ge 2 ]] 2>/dev/null || [[ -f .yarnrc.yml ]]; then
70 export XDG_STATE_HOME="${srcdir}/.local/state"
71 export YARN_ENABLE_GLOBAL_CACHE=false
72 export YARN_ENABLE_MIRROR=false
73 export YARN_GLOBAL_FOLDER="${srcdir}/.yarn/berry"
74 export YARN_NODE_LINKER=node-modules
75 export YARN_NM_MODE=hardlinks-local
76 export YARN_ENABLE_TELEMETRY=false
77 export YARN_ENABLE_SCRIPTS=true
78 export YARN_HTTP_TIMEOUT=600000
79 export YARN_HTTP_RETRY=5
80 export YARN_NPM_REGISTRY_SERVER="${YARN_NPM_REGISTRY_SERVER:-${NPM_CONFIG_REGISTRY:-https://registry.yarnpkg.com}}"
81 mkdir -p "${HOME}" "${YARN_CACHE_FOLDER}" "${YARN_GLOBAL_FOLDER}" "${COREPACK_HOME}"
82 else
83 export YARN_GLOBAL_FOLDER="${srcdir}/.yarn/global"
84 export YARN_LINK_FOLDER="${srcdir}/.yarn/link"
85 export YARN_TEMP_FOLDER="${srcdir}/.yarn/tmp"
86 export YARN_NETWORK_TIMEOUT=600000
87 export YARN_CHILD_CONCURRENCY="$(nproc)"
88 export YARN_FROZEN_LOCKFILE=true
89 export YARN_IGNORE_ENGINES=true
90 export YARN_PRODUCTION=false
91 mkdir -p "${HOME}" "${YARN_CACHE_FOLDER}" "${YARN_GLOBAL_FOLDER}" "${YARN_LINK_FOLDER}" "${YARN_TEMP_FOLDER}" "${COREPACK_HOME}"
92 fi
93 local _reg="${NPM_CONFIG_REGISTRY:-https://registry.yarnpkg.com}"
94 _reg="${_reg%/}"
95 if [[ -f .yarnrc ]]; then
96 sed -i "s|^registry .*|registry \"${_reg}\"|" .yarnrc
97 fi
98 if [[ -f yarn.lock ]] && grep -q 'resolved "https://registry.yarnpkg.com' yarn.lock; then
99 sed -i "s|https://registry.yarnpkg.com/|${_reg}/|g" yarn.lock
100 fi
101}
102prepare() {
103 cd "${srcdir}/${pkgname}.git"
104 _get_electron_version
105 sed -i -e "
106 s/@electronversion@/${_electronversion}/
107 s/@appname@/${pkgname}/
108 s/@runname@/app.asar/
109 s/@cfgdirname@/${pkgname//-/.}/
110 " "${srcdir}/${pkgname}.sh"
111 gendesk -q -f -n \
112 --pkgname="${pkgname}" \
113 --pkgdesc="${pkgdesc}" \
114 --categories="Utility" \
115 --name="${_pkgname}" \
116 --exec="${pkgname} %U"
117 _ensure_local_nvm
118 _set_build_env
119 sed -i "s/\"electron\": \"[^\"]*\"/\"electron\": \"${SYSTEM_ELECTRON_VERSION}\"/" package.json
120 sed -i "s/icon\.icns/icon\.png/" electron-builder.json
121 export NODE_ENV=development
122 yarn install
123 yarn add -D "@types/tar-stream"
124}
125build() {
126 cd "${srcdir}/${pkgname}.git"
127 _ensure_local_nvm
128 _set_build_env
129 export NODE_ENV=production
130 yarn run electron-rebuild
131 yarn node scripts/download-pandoc.js
132 yarn node scripts/download-plantuml.js
133 yarn run build
134 yarn electron-builder --linux dir -c.electronDist="${ELECTRON_DIST}" --config electron-builder.json
135 local _app_dir=$(_get_app_dir)
136 ln -sf "/usr/bin/rg" "${_app_dir}/resources/app.asar.unpacked/node_modules/@vscode/ripgrep/bin/rg"
137}
138package() {
139 install -Dm755 "${srcdir}/${pkgname}.sh" "${pkgdir}/usr/bin/${pkgname}"
140 install -Dm755 -d "${pkgdir}/usr/lib/${pkgname}"
141 local _app_dir=$(_get_app_dir)
142 cp -a "${_app_dir}/resources/." "${pkgdir}/usr/lib/${pkgname}/"
143 install -Dm644 "${srcdir}/${pkgname}.git/${pkgname}.desktop" -t "${pkgdir}/usr/share/applications"
144 install -Dm644 "${srcdir}/${pkgname%-git}.git/build/icon.png" "${pkgdir}/usr/share/pixmaps/${pkgname%-git}.png"
145 install -Dm644 "${srcdir}/${pkgname}.git/src/main/assets/icon.png" "${pkgdir}/usr/share/pixmaps/${pkgname}.png"
146 install -Dm644 "${srcdir}/${pkgname}.git/LICENSE" -t "${pkgdir}/usr/share/licenses/${pkgname}"
147}
148

Scan history

Scanned at (UTC)SeverityRules
2026-11-01 00:21:48 Low 2
2026-10-31 00:07:41 Low 2
2026-10-30 00:29:30 Low 2
2026-10-29 00:13:55 Low 2
2026-10-28 00:06:54 Low 2
2026-10-27 00:23:28 Low 2
2026-10-26 00:12:40 Low 2
2026-10-25 00:20:48 Low 2
2026-10-24 00:14:55 Low 2
2026-10-23 00:02:19 Low 2
2026-10-22 00:13:10 Low 2
2026-10-21 00:12:50 Low 2
2026-10-20 00:10:31 Low 2
2026-10-19 00:03:55 Low 2
2026-10-18 00:06:55 Low 2
2026-10-17 00:21:55 Low 2
2026-10-16 00:12:47 Low 2
2026-10-15 00:28:05 Low 2
2026-10-14 00:06:47 Low 2
2026-10-13 00:23:45 Low 2

Report a package

Reports go to the AURWatch maintainer (one person) and are read by hand. No login required.

0 / 4000
Your suggestion