@codesnippets/codesnippets
Version:
Open source code snippets and examples.
77 lines (64 loc) • 1.77 kB
text/typescript
import fs = require('fs');
import glob = require('glob');
import path = require('path');
const syncRequest = require('sync-request');
import { isUpToDateSync } from './checkLock';
import { Language } from './language';
let indexPath = path.resolve(path.join(__dirname, '../snippets.lock.json'));
let index;
let lockUrl = 'https://raw.githubusercontent.com/trimorphdev/codesnippets/master/snippets.lock.json';
/**
* Reloads the snippets index.
*/
export function reload() {
if (isUpToDateSync()) {
let contents: string = fs.readFileSync(indexPath).toString();
index = JSON.parse(contents);
} else {
let res = syncRequest('GET', lockUrl);
fs.writeFileSync(indexPath, res.body);
index = JSON.parse(res.body.toString());
}
}
/**
* Gets a language by name.
* @param name name of the Language
* @returns the associated Language object
*/
export function getLanguage(name: string): Language {
if (!index)
reload();
for (let key of Object.keys(index)) {
if (key.toLowerCase() == name.toLowerCase()) {
return new Language(key, index[key]);
}
}
}
/**
* A list of language names defined in snippets.jsonc
* @returns list of languages
*/
export function getLanguageNames(): string[] {
if (!index)
reload();
let languages = [];
for (let item of Object.keys(index)) {
languages.push(item);
}
return languages;
}
/**
* Gets a list of languages defined in snippets.jsonc
* @returns list of languages
*/
export function getLanguages(): Language[] {
if (!index)
reload();
let languages = [];
for (let item of Object.keys(index)) {
languages.push(getLanguage(item));
}
return languages;
}
export * from './language';
export * from './snippet';