Skip to content

Commit 0f031d6

Browse files
committed
Merge branch 'main' into feat/atproto-blog-fe
2 parents 48f1479 + 2273d3b commit 0f031d6

File tree

184 files changed

+8281
-1602
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

184 files changed

+8281
-1602
lines changed

.github/workflows/autofix.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ permissions:
1515
jobs:
1616
code:
1717
name: 🤖 Autofix code
18-
runs-on: ubuntu-latest
18+
runs-on: ubuntu-24.04-arm
1919

2020
steps:
2121
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
@@ -24,7 +24,7 @@ jobs:
2424
with:
2525
node-version: lts/*
2626

27-
- uses: pnpm/action-setup@1e1c8eafbd745f64b1ef30a7d7ed7965034c486c
27+
- uses: pnpm/action-setup@1e1c8eafbd745f64b1ef30a7d7ed7965034c486c # 1e1c8eafbd745f64b1ef30a7d7ed7965034c486c
2828
name: 🟧 Install pnpm
2929
with:
3030
cache: true
@@ -41,4 +41,4 @@ jobs:
4141
- name: 🔠 Fix lint errors
4242
run: pnpm lint:fix
4343

44-
- uses: autofix-ci/action@635ffb0c9798bd160680f18fd73371e355b85f27
44+
- uses: autofix-ci/action@635ffb0c9798bd160680f18fd73371e355b85f27 # 635ffb0c9798bd160680f18fd73371e355b85f27

.github/workflows/ci.yml

Lines changed: 39 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ permissions:
2222
jobs:
2323
lint:
2424
name: 🔠 Lint project
25-
runs-on: ubuntu-latest
25+
runs-on: ubuntu-24.04-arm
2626

2727
steps:
2828
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
@@ -31,16 +31,20 @@ jobs:
3131
with:
3232
node-version: lts/*
3333

34-
- uses: pnpm/action-setup@1e1c8eafbd745f64b1ef30a7d7ed7965034c486c
34+
- uses: pnpm/action-setup@1e1c8eafbd745f64b1ef30a7d7ed7965034c486c # 1e1c8eafbd745f64b1ef30a7d7ed7965034c486c
3535
name: 🟧 Install pnpm
36-
# pnpm cache skipped deliberately as the project is not actually installed here
36+
with:
37+
cache: true
38+
39+
- name: 📦 Install dependencies (root only, no scripts)
40+
run: pnpm install --filter . --ignore-scripts
3741

3842
- name: 🔠 Lint project
39-
run: node scripts/lint.ts
43+
run: pnpm lint
4044

4145
types:
4246
name: 💪 Type check
43-
runs-on: ubuntu-latest
47+
runs-on: ubuntu-24.04-arm
4448

4549
steps:
4650
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
@@ -49,7 +53,7 @@ jobs:
4953
with:
5054
node-version: lts/*
5155

52-
- uses: pnpm/action-setup@1e1c8eafbd745f64b1ef30a7d7ed7965034c486c
56+
- uses: pnpm/action-setup@1e1c8eafbd745f64b1ef30a7d7ed7965034c486c # 1e1c8eafbd745f64b1ef30a7d7ed7965034c486c
5357
name: 🟧 Install pnpm
5458
with:
5559
cache: true
@@ -62,7 +66,7 @@ jobs:
6266

6367
unit:
6468
name: 🧪 Unit tests
65-
runs-on: ubuntu-latest
69+
runs-on: ubuntu-24.04-arm
6670

6771
steps:
6872
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
@@ -71,7 +75,7 @@ jobs:
7175
with:
7276
node-version: lts/*
7377

74-
- uses: pnpm/action-setup@1e1c8eafbd745f64b1ef30a7d7ed7965034c486c
78+
- uses: pnpm/action-setup@1e1c8eafbd745f64b1ef30a7d7ed7965034c486c # 1e1c8eafbd745f64b1ef30a7d7ed7965034c486c
7579
name: 🟧 Install pnpm
7680
with:
7781
cache: true
@@ -80,11 +84,17 @@ jobs:
8084
run: pnpm install
8185

8286
- name: 🧪 Unit tests
83-
run: pnpm test:unit --project unit run --coverage
87+
run: pnpm test:unit run --coverage --reporter=junit --outputFile=test-report.junit.xml
88+
89+
- name: ⬆︎ Upload test results to Codecov
90+
if: ${{ !cancelled() }}
91+
uses: codecov/test-results-action@0fa95f0e1eeaafde2c782583b36b28ad0d8c77d3 # v1
92+
with:
93+
token: ${{ secrets.CODECOV_TOKEN }}
8494

8595
test:
8696
name: 🧪 Component tests
87-
runs-on: ubuntu-latest
97+
runs-on: ubuntu-24.04-arm
8898

8999
steps:
90100
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
@@ -93,7 +103,7 @@ jobs:
93103
with:
94104
node-version: lts/*
95105

96-
- uses: pnpm/action-setup@1e1c8eafbd745f64b1ef30a7d7ed7965034c486c
106+
- uses: pnpm/action-setup@1e1c8eafbd745f64b1ef30a7d7ed7965034c486c # 1e1c8eafbd745f64b1ef30a7d7ed7965034c486c
97107
name: 🟧 Install pnpm
98108
with:
99109
cache: true
@@ -105,16 +115,22 @@ jobs:
105115
run: pnpm playwright install chromium-headless-shell
106116

107117
- name: 🧪 Component tests
108-
run: pnpm vite test --project nuxt run --coverage
118+
run: pnpm test:nuxt run --coverage --reporter=junit --outputFile=test-report.junit.xml
119+
120+
- name: ⬆︎ Upload test results to Codecov
121+
if: ${{ !cancelled() }}
122+
uses: codecov/test-results-action@0fa95f0e1eeaafde2c782583b36b28ad0d8c77d3 # v1
123+
with:
124+
token: ${{ secrets.CODECOV_TOKEN }}
109125

110-
- name: Upload coverage reports to Codecov
126+
- name: ⬆︎ Upload coverage reports to Codecov
111127
uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5
112128
env:
113-
CODECOV_TOKEN: 17b4bed9-d407-4ce2-9c10-2ccd4328a1d9
129+
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
114130

115131
browser:
116132
name: 🖥️ Browser tests
117-
runs-on: ubuntu-latest
133+
runs-on: ubuntu-24.04-arm
118134
container:
119135
image: mcr.microsoft.com/playwright:v1.58.0-noble
120136

@@ -125,7 +141,7 @@ jobs:
125141
with:
126142
node-version: lts/*
127143

128-
- uses: pnpm/action-setup@1e1c8eafbd745f64b1ef30a7d7ed7965034c486c
144+
- uses: pnpm/action-setup@1e1c8eafbd745f64b1ef30a7d7ed7965034c486c # 1e1c8eafbd745f64b1ef30a7d7ed7965034c486c
129145
name: 🟧 Install pnpm
130146
with:
131147
cache: true
@@ -141,7 +157,7 @@ jobs:
141157

142158
a11y:
143159
name: ♿ Accessibility audit
144-
runs-on: ubuntu-latest
160+
runs-on: ubuntu-latest # See https://github.com/GoogleChrome/lighthouse/discussions/16834
145161
strategy:
146162
matrix:
147163
mode: [dark, light]
@@ -153,7 +169,7 @@ jobs:
153169
with:
154170
node-version: lts/*
155171

156-
- uses: pnpm/action-setup@1e1c8eafbd745f64b1ef30a7d7ed7965034c486c
172+
- uses: pnpm/action-setup@1e1c8eafbd745f64b1ef30a7d7ed7965034c486c # 1e1c8eafbd745f64b1ef30a7d7ed7965034c486c
157173
name: 🟧 Install pnpm
158174
with:
159175
cache: true
@@ -172,7 +188,7 @@ jobs:
172188

173189
knip:
174190
name: 🧹 Unused code check
175-
runs-on: ubuntu-latest
191+
runs-on: ubuntu-24.04-arm
176192

177193
steps:
178194
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
@@ -181,7 +197,7 @@ jobs:
181197
with:
182198
node-version: lts/*
183199

184-
- uses: pnpm/action-setup@1e1c8eafbd745f64b1ef30a7d7ed7965034c486c
200+
- uses: pnpm/action-setup@1e1c8eafbd745f64b1ef30a7d7ed7965034c486c # 1e1c8eafbd745f64b1ef30a7d7ed7965034c486c
185201
name: 🟧 Install pnpm
186202
with:
187203
cache: true
@@ -191,3 +207,6 @@ jobs:
191207

192208
- name: 🧹 Check for unused code
193209
run: pnpm knip
210+
211+
- name: 🧹 Check for unused production code
212+
run: pnpm knip --production

.github/workflows/lunaria.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ permissions:
1818
jobs:
1919
lunaria-overview:
2020
name: 🌝 Generate Lunaria Overview
21-
runs-on: ubuntu-latest
21+
runs-on: ubuntu-24.04-arm
2222

2323
steps:
2424
- name: Checkout
@@ -32,7 +32,7 @@ jobs:
3232
with:
3333
node-version: lts/*
3434

35-
- uses: pnpm/action-setup@1e1c8eafbd745f64b1ef30a7d7ed7965034c486c
35+
- uses: pnpm/action-setup@1e1c8eafbd745f64b1ef30a7d7ed7965034c486c # 1e1c8eafbd745f64b1ef30a7d7ed7965034c486c
3636
name: 🟧 Install pnpm
3737
with:
3838
cache: true
@@ -41,4 +41,4 @@ jobs:
4141
run: pnpm install
4242

4343
- name: Generate Lunaria Overview
44-
uses: lunariajs/action@v1-prerelease
44+
uses: lunariajs/action@4911ad0736d1e3b20af4cb70f5079aea2327ed8e # v1-prerelease

.github/workflows/semantic-pull-requests.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ jobs:
2626
a11y
2727
deps
2828
docs
29+
cli
2930
i18n
3031
ui
3132
subjectPattern: ^(?![A-Z]).+$

.oxlintrc.json

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
{
22
"$schema": "https://unpkg.com/oxlint/configuration_schema.json",
33
"plugins": ["unicorn", "typescript", "oxc", "vue", "vitest"],
4+
"jsPlugins": ["@e18e/eslint-plugin"],
45
"categories": {
56
"correctness": "error",
67
"suspicious": "warn",
@@ -11,8 +12,27 @@
1112
"no-await-in-loop": "off",
1213
"unicorn/no-array-sort": "off",
1314
"no-restricted-globals": "error",
14-
"typescript/consistent-type-imports": "error"
15+
"typescript/consistent-type-imports": "error",
16+
"e18e/prefer-array-from-map": "error",
17+
"e18e/prefer-timer-args": "error",
18+
"e18e/prefer-date-now": "error",
19+
"e18e/prefer-regex-test": "error",
20+
"e18e/prefer-array-some": "error"
1521
},
22+
"overrides": [
23+
{
24+
"files": [
25+
"server/**/*",
26+
"cli/**/*",
27+
"scripts/**/*",
28+
"modules/**/*",
29+
"app/components/OgImage/*"
30+
],
31+
"rules": {
32+
"no-console": "off"
33+
}
34+
}
35+
],
1636
"ignorePatterns": [
1737
".output/**",
1838
".data/**",

CONTRIBUTING.md

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -340,12 +340,12 @@ To add a new locale:
340340
5. If the language is `right-to-left`, add `dir: 'rtl'` (see `ar-EG` in config for example)
341341
6. If the language requires special pluralization rules, add a `pluralRule` callback (see `ar-EG` or `ru-RU` in config for examples)
342342

343-
Check [Pluralization rule callback](https://vue-i18n.intlify.dev/guide/essentials/pluralization.html#custom-pluralization) for more info.
343+
Check [Pluralization rule callback](https://vue-i18n.intlify.dev/guide/essentials/pluralization#custom-pluralization) and [Plural Rules](https://cldr.unicode.org/index/cldr-spec/plural-rules#TOC-Determining-Plural-Categories) for more info.
344344

345345
### Update translation
346346

347347
We track the current progress of translations with [Lunaria](https://lunaria.dev/) on this site: https://i18n.npmx.dev/
348-
If you see any outdated translations in your language, feel free to update the keys to match then English version.
348+
If you see any outdated translations in your language, feel free to update the keys to match the English version.
349349

350350
In order to make sure you have everything up-to-date, you can run:
351351

@@ -408,13 +408,51 @@ See how `es`, `es-ES`, and `es-419` are configured in [config/i18n.ts](./config/
408408
<p>{{ $t('greeting', { name: userName }) }}</p>
409409
```
410410

411+
4. Don't concatenate string messages in the Vue templates, some languages can have different word order. Use placeholders instead.
412+
413+
**Bad:**
414+
415+
```vue
416+
<p>{{ $t('hello') }} {{ userName }}</p>
417+
```
418+
419+
**Good:**
420+
421+
```vue
422+
<p>{{ $t('greeting', { name: userName }) }}</p>
423+
```
424+
425+
**Complex content:**
426+
427+
If you need to include HTML or components inside the translation, use [`i18n-t`](https://vue-i18n.intlify.dev/guide/advanced/component.html) component. This is especially useful when the order of elements might change between languages.
428+
429+
```json
430+
{
431+
"agreement": "I accept the {terms} and {privacy}.",
432+
"terms_link": "Terms of Service",
433+
"privacy_policy": "Privacy Policy"
434+
}
435+
```
436+
437+
```vue
438+
<i18n-t keypath="agreement" tag="p">
439+
<template #terms>
440+
<NuxtLink to="/terms">{{ $t('terms_link') }}</NuxtLink>
441+
</template>
442+
<template #privacy>
443+
<strong>{{ $t('privacy_policy') }}</strong>
444+
</template>
445+
</i18n-t>
446+
```
447+
411448
### Translation key conventions
412449

413450
- Use dot notation for hierarchy: `section.subsection.key`
414451
- Keep keys descriptive but concise
415452
- Group related keys together
416453
- Use `common.*` for shared strings (loading, retry, close, etc.)
417454
- Use component-specific prefixes: `package.card.*`, `settings.*`, `nav.*`
455+
- Do not use dashes (`-`) in translation keys; always use underscore (`_`): e.g., `privacy_policy` instead of `privacy-policy`
418456

419457
### Using i18n-ally (recommended)
420458

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ What npmx offers:
4444
- **Fast search** &ndash; quick package search with instant results
4545
- **Package details** &ndash; READMEs, versions, dependencies, and metadata
4646
- **Code viewer** &ndash; browse package source code with syntax highlighting and permalink to specific lines
47-
- **Provenance indicators** &ndash; verified build badges for packages with npm provenance
47+
- **Provenance indicators** &ndash; verified build badges and provenance section below the README
4848
- **Multi-provider repository support** &ndash; stars/forks from GitHub, GitLab, Bitbucket, Codeberg, Gitee, Sourcehut, Forgejo, Gitea, Radicle, and Tangled
4949
- **JSR availability** &ndash; see if scoped packages are also available on JSR
5050
- **Package badges** &ndash; module format (ESM/CJS/dual), TypeScript types (with `@types/*` links), and engine constraints

0 commit comments

Comments
 (0)