Skip to content

Commit

Permalink
refactor: typescript rewrite
Browse files Browse the repository at this point in the history
  • Loading branch information
snickbit committed May 2, 2022
1 parent b274c5a commit 4a000cd
Show file tree
Hide file tree
Showing 13 changed files with 217 additions and 230 deletions.
2 changes: 1 addition & 1 deletion indexer.config.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[
{
"index": "src/actions/index.js",
"index": "src/actions/index.ts",
"files": [
{
"export": "group",
Expand Down
9 changes: 5 additions & 4 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,15 +30,15 @@
},
"scripts": {
"start": "node bin/fa.js",
"clean": "shx rm -rf bin dist",
"clean": "shx rm -rf ./dist ./bin",
"index": "indexer src/actions",
"build": "npm run clean && npm run build:lib && npm run build:cli",
"build:lib": "tsup",
"build:cli": "esbuild src/cli.js --bundle --outfile=bin/fa.js --target=node12 --platform=node --external:@fortawesome/*",
"build:cli": "esbuild src/cli.ts --bundle --outfile=bin/fa.js --target=node12 --platform=node --external:@fortawesome/* --sourcemap",
"build:meta": "npm run build:cli --minify --metafile=.meta.json",
"watch": "concurrently -n lib,cli \"npm run watch:lib\" \"npm run watch:cli\"",
"watch:lib": "npm run build:lib --watch",
"watch:cli": "npm run build:cli --watch",
"watch:cli": "npm run build:cli -- --watch",
"depcheck": "depcheck",
"prod": "npm run clean && concurrently -n lib,cli \"npm run build:lib --minify\" \"npm run build:cli --minify\""
},
Expand All @@ -65,11 +65,12 @@
"typescript": "^4.6.3"
},
"jest": {
"preset": "ts-jest",
"testEnvironment": "node"
},
"tsup": {
"entry": [
"src/index.js"
"src/index.ts"
],
"clean": true,
"dts": true,
Expand Down
101 changes: 0 additions & 101 deletions src/actions/add.js

This file was deleted.

96 changes: 96 additions & 0 deletions src/actions/add.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
import cli from '@snickbit/node-cli'
import {ask, confirm} from '@snickbit/node-utilities'
import {isEmpty, plural} from '@snickbit/utilities'
import {gql} from '@urql/core'
import {_out, client, initConfig, normalizeIconName, saveConfig} from '../utilities/common'
import generate from './generate'

export default async (argv) => cli(argv).args({
icons: {
description: 'Icon name',
type: 'array',
required: true
}
}).run().then(async args => {
const config = await initConfig()
let changes = {
icons: 0,
aliases: 0
}

const shouldAddAlias = async alias => !config.aliases[alias] || args.force || await confirm(`Alias {magenta}${alias}{/magenta} already exists for icon {cyan}${config.aliases[alias]}{/cyan}, overwrite?`)

for (let item of args.icons) {
let [icon, ...aliases] = item.split(',')

let iconName = normalizeIconName(icon.replace(/(fa[a-z]?)-/, `$1:`))
if (!config.icons.includes(iconName)) {
const iconQuery = gql`
query ($query: String) {
search(version: "6.1.1", query: $query, first: 15) {
id
}
}
`

let results
try {
results = await client
.query(iconQuery, {query: iconName.replace(/fa:/, '')})
.toPromise()
} catch (e) {
_out.error(`We couldn't find any icons matching {cyan}${iconName}{/cyan}`)
continue
}

const icon_results = results?.data?.search?.map(r => r.id) || []

if (icon_results.length) {
let icon_selected = icon_results.find(r => r === icon)

if (!icon_selected) {
if (icon_results.length === 1) {
icon_selected = icon_results[0]
} else {
icon_results.push('None of the above')
icon_selected = await ask(`Found ${icon_results.length} matches for ${icon}`, {type: 'select', choices: icon_results})
if (icon_selected === 'None of the above') {
continue
}
}
}

iconName = normalizeIconName(icon_selected.replace(/(fa[a-z]?)-/, `$1:`))

if (!config.icons.includes(iconName)) {
config.icons.push(iconName)
_out.v().success(`Added icon {cyan}${iconName}{/cyan}`)
changes.icons++
}
}
} else {
_out.warn(`Icon {cyan}${iconName}{/cyan} already exists`)
}

if (!isEmpty(aliases)) {
for (let alias of aliases) {
if (config.aliases[alias] !== iconName && await shouldAddAlias(alias)) {
config.aliases[alias] = iconName
_out.v().success(`Added alias {magenta}${alias}{/magenta}`)
changes.aliases++
} else {
_out.warn(`Alias {magenta}${alias}{/magenta} skipped`)
}
}
}
}

if (changes.icons || changes.aliases) {
saveConfig(config)
changes.icons && _out.success(`Added {cyan}${changes.icons} ${plural('icon', changes.icons)}{/cyan}`)
changes.aliases && _out.success(`Added {magenta}${changes.aliases} ${plural('alias', changes.aliases)}{/magenta}`)
return generate()
} else {
_out.done('Nothing to update')
}
})
10 changes: 5 additions & 5 deletions src/actions/generate.js → src/actions/generate.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
import {saveFile} from '@snickbit/node-utilities'
import mkdirp from 'mkdirp'
import path from 'path'
import {_out, getImportString, getStringContent, parseIcon, saveConfig, useConfig} from '../utilities/common'
import {_out, getImportString, getStringContent, initConfig, parseIcon, saveConfig} from '../utilities/common'

export default async function () {
let config = await useConfig()
let config = await initConfig()
let content = []
let icons = []
let aliases = {}

function processIcon(raw_icon_name) {
async function processIcon(raw_icon_name) {
// get the icon object
let icon = parseIcon(raw_icon_name)

Expand All @@ -32,7 +32,7 @@ export default async function () {
}

for (let raw_icon_name of config.icons) {
processIcon(raw_icon_name)
await processIcon(raw_icon_name)
}

for (let [alias, resolved_icon] of Object.entries(config.aliases)) {
Expand All @@ -43,7 +43,7 @@ export default async function () {
if (matching_icons.length === 1) {
icon = matching_icons.pop()
} else {
icon = processIcon(resolved_icon)
icon = await processIcon(resolved_icon)
}
if (icon) {
aliases[alias] = icon.id
Expand Down
File renamed without changes.
67 changes: 0 additions & 67 deletions src/actions/remove.js

This file was deleted.

Loading

0 comments on commit 4a000cd

Please sign in to comment.