DFSG NEW Queue

DFSG, Licensing & New Packages Team

node-lingui 5.4.1+ds-1

Package Information

Descriptioninternationalization framework for JavaScript and TypeScript

Lingui is a lightweight, open-source internationalization framework for JavaScript and TypeScript.

It features compile-time macros and a command-line interface for message extraction and catalog compilation, supporting React, Node.js, and other modern frontend environments.

MaintainerDebian Javascript Maintainers <pkg-javascript-devel@lists.alioth.debian.org>
Changed ByAndrew Lee (李健秋) <ajqlee@debian.org>
Sponsorajqlee@debian.org
Distributionunstable
Architectureall
VCSgit: https://salsa.debian.org/js-team/node-js-lingui-workspaces.git (browse)
Closes#1151000
Blocked Bugs#1093255 (wishlist)
Trackerhttps://tracker.debian.org/pkg/node-lingui
Uploaded1 day ago

New Package Report

.changes◂
Architecturesource all
Distributionunstable
DateThu, 05 Nov 2026 14:22:19 +0100
Sourcenode-lingui
Version5.4.1+ds-1
Changed-ByAndrew Lee (李健秋) <ajqlee@debian.org>
Changelog◂
node-lingui (5.4.1+ds-1) unstable; urgency=medium
 .
   * Initial release. (Closes: #1151000)
.dsc◂
Sectionjavascript
Priorityoptional
Componentmain
Package-Listnode-lingui deb javascript optional arch=all
debian/copyright◂
Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: js-lingui
Upstream-Contact: https://github.com/lingui/js-lingui/issues
Source: https://github.com/lingui/js-lingui
Files-Excluded:
 .yarn
 website

Files: *
Copyright: 2017-2022 Tomáš Ehrlich
           2022-2023 Crowdin
License: Expat

Files: examples/create-react-app/*
Copyright: 2013-present Facebook, Inc.
License: Expat

Files: packages/babel-plugin-lingui-macro/src/utils/cleanJSXElementLiteralChild.ts
Copyright: 2014-present Sebastian McKenzie and other contributors
License: Expat
Comment: taken from babel with copyright info from babel

Files: examples/rspack/*
Copyright: 2023 Collin Brown
License: Expat

Files: packages/detect-locale/*
       packages/remote-loader/*
Copyright: Sergio Moreno <sergiomorenoalbert@gmail.com>
License: Expat
Comment: author found from the package.json without list copyright year

Files: packages/metro-transformer/*
Copyright: Vojtech Novak <vonovak@gmail.com>
License: Expat
Comment: author found from the package.json without list copyright year

Files: packages/metro-transformer/src/types.ts
Copyright: Meta Platforms, Inc. and affiliates
License: Expat
Comment: taken from https://github.com/facebook/metro/blob/main/packages/metro-babel-transformer/types/index.d.ts

Files: packages/extractor-vue/*
Copyright: Christoffer Jahren <christoffer@jahren.it>
License: Expat
Comment: author found from the package.json without list copyright year

Files: debian/*
Copyright: Andrew Lee (李健秋) <ajqlee@debian.org>
License: Expat

License: Expat
 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.

License: ISC
 Permission to use, copy, modify, and/or distribute this software for any
 purpose with or without fee is hereby granted, provided that the above
 copyright notice and this permission notice appear in all copies.
 .
 THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
 WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
 MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
 ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

DFSG Assistant LLM REVIEW 0 blocker, 2 important, 0 minor

This is an LLM based review using a Debian Inference based workflow. It was not written by a member of the DFSG team and has not been checked by one. It is not a decision on the package: it may be wrong, and it may have missed things.

Reviewed 1 day ago.

Report◂

DFSG NEW review for node-lingui version 5.4.1+ds-1

Summary

  • Licensing is DFSG-compliant and debian/copyright is accurate: Yes
  • Packaging is of good quality: No
  • Issues: 0 blocker, 2 important, 0 minor
  • debian/watch: version 5
  • debian/copyright: machine-readable
  • Scan before the review: nothing found

Licensing

debian/copyright is DEP-5 with the correct Format URL, a Files: * catch-all naming Tomáš Ehrlich and Crowdin exactly as the root LICENSE does, and further stanzas for the four files/directories with other holders (Facebook, Sebastian McKenzie and other Babel contributors, Collin Brown, Sergio Moreno, Vojtech Novak, Meta, Christoffer Jahren) plus debian/. Every one of the 18 packages//package.json declares "license": "MIT" and the only two licence files in the tree (LICENSE, examples/rspack/LICENSE) are both Expat/MIT, so the single Expat short name is right; the full Expat text is included and everything combined is MIT, hence compatible. Files-Excluded names .yarn and website, neither of which is in the unpacked tree. No non-free terms, no unlicensed file, no generated code without its input, no vendored third-party library was found.

Packaging

The packaging is mostly sound (compat 14, single arch:all package with ${nodejs:Depends}/${nodejs:Provides} filled in by dh_gencontrol, DEP-5 copyright, autopkgtest tag, sane gbp/salsa-ci/upstream metadata), but two things make it unusable as shipped: debian/tests/pkg-js/test is jest || true, so neither dh_auto_test nor the autopkgtest can fail, and jest's own config asks for a test environment that no Debian package provides; and debian/nodejs/build deletes the exports field of packages/cli/package.json without giving it a main, so @lingui/cli and @lingui/cli/api resolve to nothing although three other shipped modules import them.

Issues

important packaging 1. debian/tests/pkg-js/test ends with || true, so neither the build's test step nor the autopkgtest can ever fail ◂
  • Files: debian/tests/pkg-js/test:3, jest.config.js:47,55, debian/control:19-46

  • Basis: checked, in the package or with a reference tool

  • Evidence:

    #!/bin/bash
    
    jest || true
    

    and in jest.config.js, for the "universal" and "node" projects:
    testEnvironment: "jest-environment-node-single-context"

  • Problem: dh-nodejs's test step runs this same file at build time (debian/tests/pkg-js/test in sub test of /usr/share/perl5/Debian/Debhelper/Buildsystem/nodejs.pm) and pkg-js-autopkgtest runs it in the autopkgtest, so both are reduced to a command that always succeeds and asserts nothing. The suite it is meant to run cannot even start in a clean build: jest-environment-node-single-context is not in Build-Depends, not in debian/nodejs/extlinks, and apt-cache shows no Debian binary package of that name (nor any upload in NEW), so jest fails to resolve the environment for two of its three projects. The || true is what hides that, and it also hid the breakage reported in the next issue.

  • Fix: Drop || true. Either package jest-environment-node-single-context and add it to Build-Depends (and debian/nodejs/extlinks), or patch jest.config.js to use the plain jest-environment-node that jest ships, then let the failure be visible.

important packaging 2. @lingui/cli is installed with no resolvable entry point, so require("@lingui/cli") and require("@lingui/cli/api") fail and break loader, extractor-vue and metro-transformer ◂
  • Files: debian/nodejs/build:97-100, packages/cli/package.json:30-46, packages/cli/api.ts:1, packages/loader/src/webpackLoader.ts:10, packages/extractor-vue/src/vue-extractor.ts:2, packages/metro-transformer/src/metroTransformer.ts:6

  • Basis: inferred from what was read, not seen directly

  • Evidence:

    debian/nodejs/build:

                    if (pkg.main) pkg.main = pkg.main.replace(/\.cjs$/, ".js")...
                    if (pkg.module) pkg.module = ...
                    if (pkg.types) pkg.types = ...
                    if (pkg.exports) delete pkg.exports;
    

    packages/cli/package.json has only "bin" and "exports" — no main, module or types — and its upstream files field is ["LICENSE", "README.md", "dist/"]; api.ts is at the package root, outside the include: ["src"]/rootDir: "src" tsconfig the build script writes.

  • Problem: The script rewrites main only when one already exists, so for @lingui/cli it deletes the only entry point (exports) and puts nothing in its place. The installed tree then holds LICENSE, README.md, dist/ and a package.json with neither main nor exports and no index.js at its root, so Node resolves nothing: the module is unusable. @lingui/cli/api is equally gone, because api.ts is never compiled and no api/ subpath entry remains — yet packages/loader/src/webpackLoader.ts, packages/extractor-vue/src/vue-extractor.ts and packages/metro-transformer/src/metroTransformer.ts all import from @lingui/cli/api, so those three shipped modules break at run time. It is invisible to the test suite because jest maps @lingui/* to src/ through tsconfig paths.

  • Fix: Make the installed package.json point at the compiled output: set pkg.main = "dist/index.js" when main is absent (and keep it for cli), and provide a compiled api entry for cli — either compile packages/cli/api.ts into dist/api.js and add an api subpath, or leave exports intact with paths that exist after tsc. Then require each installed module once in the autopkgtest.

Verified ◂
  • debian/copyright read in full: DEP-5, Format URL exact, Files: * plus 8 further Files stanzas and debian/*, two standalone License paragraphs (Expat, ISC).
  • The root LICENSE is Expat/MIT, Copyright (c) 2017-2022 Tomáš Ehrlich, (c) 2022-2023 Crowdin., matching the Files: * stanza; every packages/*/package.json (18 of them) has "license": "MIT".
  • Only two licence files exist in the tree: LICENSE and examples/rspack/LICENSE (Copyright (c) 2023 Collin Brown, MIT); both are covered by stanzas and their short name matches their text.
  • A tree-wide grep for SPDX-License-Identifier, GNU General Public, GNU Lesser, Apache License, Mozilla Public, public domain, All rights reserved, ISC License and 'Licensed under' found nothing outside LICENSE, debian/copyright and README/"MIT" mentions; no GPL/LGPL/Apache/MPL/CC code is present, so every licence combined in the binary is Expat.
  • Copyright notices in the tree are the root LICENSE, examples/rspack/LICENSE and the two 'taken from' comments; the 736 files the prescan matched contain no holder that debian/copyright omits, and the prescribed stanzas for Facebook (examples/create-react-app/*), Sebastian McKenzie (babel-plugin-lingui-macro/src/utils/cleanJSXElementLiteralChild.ts:1) and Meta (metro-transformer/src/types.ts:1-2) correspond to those files.
  • packages/core/src/formats.ts:30-32 and packages/cli/src/api/pseudoLocalize.ts:7-8 cite messageformat and a blog post as the origin of a short options mapping and one regex; both carry no separate copyright notice, the cited code is a few lines of options rather than a substantial copy, and the licences involved are the same MIT terms, so no extra stanza is needed.
  • Files-Excluded names .yarn and website; neither is in the unpacked tree. debian/lrc.config still names .yarn/releases/yarn-3.4.1.cjs, which is no longer shipped (that is why the file's ISC terms, and the unused License: ISC paragraph, no longer apply to anything).
  • Binary assets in examples/ (react-native/assets/*.png, /public/favicon.ico, vercel.svg, tanstack-start/public/.png, rspack/demo.gif, create-react-app/src/logo.svg) were recorded by path, not opened; they are example-application assets covered by the umbrella and examples/ stanzas, and nothing in the tree claims other terms for them.
  • Compiled example catalogs (examples/js/src/locale//messages.js, examples/rspack/src/locales//messages.ts and .d.ts) ship next to the .po files they are generated from; no dist/, node_modules/ or minified bundle is in the tree.
  • There is no machine-readable-format defect to propose a replacement for; the ISC paragraph is unused but harmless under copyright-format.
  • debian/nodejs/build, additional_components, root_modules and extlinks are all read by dh-nodejs (Debian::PkgJs::Utils::component_list, _extLinks) rather than stray files; debian/nodejs/root_modules's !js-lingui-workspaces line is a no-op for root_modules (only additional_components honours !), but it does no harm because debian/rules removes the workspace-root module.
  • debian/rules' execute_before_dh_install: rm -rf debian/node-lingui/usr/share/nodejs/js-lingui-workspaces runs at the right time: dh-sequence-single-binary sets dh_auto_install --destdir=$(tmpdir pkg), i.e. debian/node-lingui/, so the files are already there when the target runs.
  • debhelper-compat (= 14) is the recommended level of the installed debhelper 14.5; Standards-Version 4.7.4 has the same major.minor as Policy 4.7.4.1, so it is current; single binary package, Architecture: all, Section: javascript, Homepage, Vcs-Git/Vcs-Browser, Testsuite: autopkgtest-pkg-nodejs present; ${nodejs:Depends}/${nodejs:Provides} need not appear in Depends/Provides at compat 14.
  • Changelog: 5.4.1+ds-1, unstable, well-formed date (Thu, 05 Nov 2026), initial release closing the ITP; debian/source/format is 3.0 (quilt) with no patches and an empty patches series.
  • uscan found upstream releases with debian/watch; a newer upstream version is available (upstream 6.12.0, packaged 5.4.1+ds), which is not a fault of the package.
Not confirmed ◂
  • debian/nodejs/build writes "module": "esnext" into every package's tsconfig and then installs the tsc output as .js with main pointing at it, while no package.json has "type": "module". Whether those files load as CommonJS depends on Node's ESM-syntax detection (Node 22.7+); node -e 'require("@lingui/core")' against the built package would show it.
  • Whether ${nodejs:Provides} still advertises node-js-lingui-workspaces after debian/rules deletes that directory could not be checked without running dh_nodejs_substvars.
Proposed changes ◂

None.

Uploader's response to the LLM review

We need this package to unblock beszel upload. Will fix autopkgtest later.

— Andrew Lee (李健秋) (ajqlee), 1 day ago

Other Reviews of this Package

VersionHashAllocatedCompletedReviewerStatusDetails
5.4.1+ds-1 9ce9eec6… 2026-11-06 11:11 2026-11-06 11:11 dfsg-uploader rejected VIEW
5.4.1-1 25d54707… 2026-11-06 11:11 2026-11-06 11:11 dfsg-uploader rejected VIEW

Back to Dashboard | View all reviews for this package