lov-ns
Version:
Recommended RDF vocabularies for Linked Open Data.
72 lines (51 loc) • 2.13 kB
JavaScript
import * as fs from 'fs'
import * as path from 'path'
import fetch from 'node-fetch'
import mkdirp from 'mkdirp'
const LOV_URL = 'http://lov.okfn.org/dataset/lov/api/v2/vocabulary/list'
const PREFIX_CC_CONTEXT = 'http://prefix.cc/context'
, PREFIX_CC_POPULAR = 'http://prefix.cc/popular/all'
console.log(`Updating from ${PREFIX_CC_CONTEXT}`)
async function fetchContext() {
const resp = await fetch(PREFIX_CC_CONTEXT)
if (!resp.ok) {
throw new Error('Error downloading context file')
}
return resp.json()
}
mkdirp.sync('esm')
mkdirp.sync('cjs')
const ESM_FILE = './index.js'
, CJS_FILE = './index.cjs'
, TYPES_FILE = './index.d.ts'
, CONTEXT_FILE = 'context.json'
async function getUpdatedList() {
const context = await fetchContext()
let cjs = `module.exports = {\n`
, esm = `const _default = {\n`
, types = `declare const _default: {\n`
const entries = Object.entries(context['@context'])
.sort((a, b) => a[0] === b[0] ? 0 : a[0] > b[0] ? 1 : -1)
for (const [ prefix, url ] of entries) {
const obj = ` "${prefix}": "${url}",\n`
cjs += obj
esm += obj
types += obj
// types += ` "${prefix}": string;\n`
mkdirp.sync(`cjs/${prefix}`)
mkdirp.sync(`esm/${prefix}`)
fs.writeFileSync(`cjs/${prefix}/index.cjs`, `module.exports = "${url}"\n`, { encoding: 'utf-8' })
fs.writeFileSync(`esm/${prefix}/index.js`, `export default "${url}"\n`, { encoding: 'utf-8' })
const typeDef = `declare const RDFNS_${prefix}: "${url}"\n\nexport default RDFNS_${prefix}\n`
fs.writeFileSync(`cjs/${prefix}/index.d.ts`, typeDef, { encoding: 'utf-8' })
fs.writeFileSync(`esm/${prefix}/index.d.ts`, typeDef, { encoding: 'utf-8' })
}
types += '}\n\nexport default _default\n'
cjs += '}\n'
esm += '}\n\nexport default _default'
fs.writeFileSync(CJS_FILE, cjs, { encoding: 'utf-8' })
fs.writeFileSync(ESM_FILE, esm, { encoding: 'utf-8' })
fs.writeFileSync(TYPES_FILE, types, { encoding: 'utf-8' })
fs.writeFileSync(CONTEXT_FILE, JSON.stringify(Object.fromEntries(entries), true, ' '), { encoding: 'utf-8' })
}
getUpdatedList();