Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: add @nodevu/translate #27

Merged
merged 12 commits into from
May 17, 2023
32 changes: 32 additions & 0 deletions .github/workflows/translate-tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
name: "Test Suite: @nodevu/translate"

on:
pull_request:
paths:
- 'translate/**'
branches:
- main
workflow_dispatch:

jobs:
tests:
if: github.repository == 'cutenode/nodevu'
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [current, lts/*, lts/-1]
steps:
- name: Checkout the repository
uses: actions/checkout@v3
- name: Setup Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
- name: Install latest npm
run: npm i -g npm
- name: Run npm install (project)
run: npm install
- name: Run npm install (package)
run: npm install -w translate
- name: Run npm test
run: npm test -w translate
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
"parsefiles",
"earliest",
"ranges",
"aliases"
"aliases",
"translate"
]
}
55 changes: 55 additions & 0 deletions translate/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
# @nodevu/translate

A translation layer to use the terms previously defined by the Node.js Package Maintenance WG's [Package Support document](https://github.com/nodejs/package-maintenance/blob/main/docs/PACKAGE-SUPPORT.md) to terms that can easily be used by [@nodevu/ranges](https://npm.im/@nodevu/ranges).


## Usage

```js
const ranges = require('@nodevu/ranges')
const translate = require('@nodevu/translate')

async function getTranslatedData () {
// translation for the 'current' Package Support term
const current = await ranges(await translate('current'))

// translation for the 'lts_latest' Package Support term
const lts_latest = await ranges(await translate('lts_latest'))

// translation for the 'lts' Package Support term
const lts = await ranges(await translate('lts'))

// translation for the 'supported' Package Support term
const supported = await ranges(await translate('supported'))

// translation for the 'all' Package Support term
const all = await ranges(await translate('all'))

// return the data in a single object
return {
current,
lts_latest,
lts,
supported,
all
}
}

getTranslatedData().then(console.log)
```

## API

- `translate(alias)`
- `alias` (string): A Node.js Package Support Alias.

Possible values for `alias`:
- `current`: returns `['current']`
- `lts_latest`: returns `['lts/latest']`
- `lts`: returns `['lts/active', 'lts/maintenance']`
- `supported`: returns `['current', 'lts/active', 'lts/maintenance']`
- `all`: returns `['current', 'lts/active', 'lts/maintenance', 'eol']`




30 changes: 30 additions & 0 deletions translate/examples/default.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
const ranges = require('../../ranges') // would normally be "const ranges = require('@nodevu/ranges')" in your code
const translate = require('../index') // would normally be "const translate = require('@nodevu/translate')" in your code

async function getTranslatedData () {
// translation for the 'current' Package Support term
const translatedCurrent = await ranges('current')

// translation for the 'lts_latest' Package Support term
const translatedLtsLatest = await ranges(await translate('lts_latest'))

// translation for the 'lts' Package Support term
const translatedLts = await ranges(await translate('lts'))

// translation for the 'supported' Package Support term
const translatedSupported = await ranges(await translate('supported'))

// translation for the 'all' Package Support term
const translatedAll = await ranges(await translate('all'))

// return the data in a single object
return {
"current": translatedCurrent,
"lts_latest": translatedLtsLatest,
"lts": translatedLts,
"supported": translatedSupported,
"all": translatedAll
}
}

getTranslatedData().then(console.log)
18 changes: 18 additions & 0 deletions translate/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
// ordered from most recent coverage to oldest coverage
const translations = {
current: ['current'],
lts_latest: ['lts/latest'],
lts: ['lts/active', 'lts/maintenance'],
supported: ['current', 'lts/active', 'lts/maintenance'],
all: ['current', 'lts/active', 'lts/maintenance', 'eol']
}

async function translate (legacyName) {
if (!translations[legacyName]) {
throw new Error(`Unknown value: ${legacyName}`)
} else {
return translations[legacyName]
}
}

module.exports = translate
40 changes: 40 additions & 0 deletions translate/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
{
"name": "@nodevu/translate",
"version": "0.0.1",
"description": "a translation layer between the nodevu naming mechanism and the Node.js supported mechanism. Neceessary for legacy interop.",
"keywords": [
"nodevu",
"node",
"nodejs",
"versions",
"supported"
],
"homepage": "https://github.com/cutenode/nodevu#readme",
"bugs": {
"url": "https://github.com/cutenode/nodevu/issues"
},
"repository": {
"type": "git",
"url": "git+https://github.com/cutenode/nodevu.git"
},
"license": "MIT",
"author": "Tierney Cyren",
"main": "index.js",
"scripts": {
"coverage": "nyc node--test",
"lint": "standard --env mocha",
"lint:fix": "standard --fix --env mocha",
"lint:packagejson": "npx sort-package-json",
"test": "node--test",
"updates": "npx npm-check-updates"
},
"devDependencies": {
"@nodevu/ranges": "^0.0.1",
"nyc": "^15.1.0",
"standard": "^17.0.0",
"test": "^3.2.1"
},
"engines": {
"node": ">=16.0.0"
}
}
10 changes: 10 additions & 0 deletions translate/test/current.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
const assert = require('node:assert')
const translate = require('../index')
const { describe, it } = require('test')

describe('test that translating current works as expected', async () => {
it('should return "current" when passed "current"', async () => {
const result = await translate('current')
assert.deepStrictEqual(result, ['current'])
})
})
41 changes: 41 additions & 0 deletions translate/test/ranges.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
const assert = require('node:assert')
const translate = require('../index')
const ranges = require('@nodevu/ranges')
const { describe, it } = require('test')

describe('test that each alias works with @nodevu/ranges', async () => {
it('should return the same result when both the translated and untranslated "current" are passed to @nodevu/ranges', async () => {
const untranslated = await ranges('current')
const translated = await ranges(await translate('current'))

assert.deepStrictEqual(untranslated, translated)
})

it('should return the same result when "lts/latest" and the translated "lts_latest" are passed to @nodevu/ranges', async () => {
const untranslated = await ranges('lts/latest')
const translated = await ranges(await translate('lts_latest'))

assert.deepStrictEqual(untranslated, translated)
})

it('should return the same result when "lts/active" and "lts/maintenance" and the translated "lts" are passed to @nodevu/ranges', async () => {
const untranslated = await ranges(['lts/active', 'lts/maintenance'])
const translated = await ranges(await translate('lts'))

assert.deepStrictEqual(untranslated, translated)
})

it('should return the same result when "current", "lts/active", and "lts/maintenance" and the translated "supported" are passed to @nodevu/ranges', async () => {
const untranslated = await ranges(['current', 'lts/active', 'lts/maintenance'])
const translated = await ranges(await translate('supported'))

assert.deepStrictEqual(untranslated, translated)
})

it('should return the same result when "current", "lts/active", "lts/maintenance", and "eol" and the translated "all" are passed to @nodevu/ranges', async () => {
const untranslated = await ranges(['current', 'lts/active', 'lts/maintenance', 'eol'])
const translated = await ranges(await translate('all'))

assert.deepStrictEqual(untranslated, translated)
})
})