UNPKG

@jake-story/trellor

Version:
255 lines (254 loc) 7.78 kB
'use strict'; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; result["default"] = mod; return result; }; Object.defineProperty(exports, "__esModule", { value: true }); const request = __importStar(require("request")); let props; /** * * ().boards * .get((Board[])) * .add("board name", (Board)) * .find("board name", (Board[])) * * ().board("boardId") * .get((Board)) * .remove() * .clear() * .lists * .get((List[])) * .add("list name", (List)) * .find("list name", (List[])) * * ().list("listId") * .clear() * .remove() * .card("cardId") * .remove() * .cards * .get((Card[])) * .add("card name", (Card)) * */ class Trellor { constructor(apiKey, apiToken) { this.boards = new BoardsActor(); this.board = (id) => { return new BoardActor(id); }; this.list = (id) => { return new ListActor(id); }; props = { apiKey: apiKey, apiToken: apiToken }; } } exports.Trellor = Trellor; class BoardsActor { constructor() { this.get = () => { return getBoards(); }; this.findAll = (name) => { return findBoards(name); }; this.find = (name) => __awaiter(this, void 0, void 0, function* () { const boards = yield findBoards(name); return new Promise((resolve, reject) => { if (boards && boards.length) resolve(boards[0]); else resolve(); // else reject() }); }); this.add = (name) => { return addBoard(name); }; } } class ListsActor { constructor(boardId) { this.boardId = boardId; this.get = () => { return getLists(this.boardId); }; this.add = (name) => { return addList(this.boardId, name); }; } } class BoardActor { constructor(boardId) { this.boardId = boardId; this.get = () => { return getBoard(this.boardId); }; this.remove = () => { return removeBoard(this.boardId); }; this.clear = () => { return new Promise((resolve, reject) => { clearBoard(this.boardId, (result, error) => { if (error) reject(error); else resolve(); }); }); }; this.lists = new ListsActor(boardId); } } class ListActor { constructor(listId) { this.listId = listId; this.clear = () => { return new Promise((resolve, reject) => { clearList(this.listId, (result, error) => { if (error) reject(error); else resolve(result); }); }); }; this.remove = () => { return removeList(this.listId); }; this.card = (cardId) => { return new CardActor(cardId); }; this.cards = new CardsActor(listId); } } class CardsActor { constructor(listId) { this.listId = listId; this.get = () => { return getCards(this.listId); }; this.add = (name) => { return addCard(this.listId, name); }; } } class CardActor { constructor(id) { this.id = id; this.remove = () => { return deleteCard(this.id); }; } } /* * PRIVATE FUNCTIONS */ function getBoards() { return trelloAction("GET", "/1/members/me/boards", { fields: "name,lists", lists: "open" }); } function getBoard(boardId) { return trelloAction("GET", `/1/boards/${boardId}`, { fields: "name,lists", lists: "open", list_fields: "id,name" }); } function findBoards(name, limit) { return trelloAction("GET", `/1/search`, { query: name, partial: false, modelTypes: "boards", board_fields: "name,id", boards_limit: limit || 1 }, "boards"); } function removeBoard(boardId) { return trelloAction("DELETE", `/1/boards/${boardId}`); } function clearBoard(boardId, callback) { getBoard(boardId).then((board) => { const doClear = (listIndex) => { if (!board || !board.lists || listIndex === board.lists.length) { callback.call(null); return; } clearList(board.lists[listIndex].id, () => { doClear(listIndex + 1); }); }; doClear(0); }); } function addBoard(name) { return trelloAction("POST", "/1/boards", { name: name, defaultLabels: false, defaultLists: false }); } function getLists(boardId) { return trelloAction("GET", `/1/boards/${boardId}/lists`, { fields: "id,name", filter: "open", cards: "open", card_fields: "id,name" }); } function addList(boardId, name) { return trelloAction("POST", "/1/lists", { name: name, idBoard: boardId }); } function clearList(listId, callback) { getCards(listId).then((cards) => { const doCardDelete = (cardIndex) => { if (!cards || cardIndex === cards.length) { if (callback) { callback.call(null); } return; } deleteCard(cards[cardIndex].id).then(() => { doCardDelete(cardIndex + 1); }); }; doCardDelete(0); }); } function removeList(listId) { return trelloAction("PUT", `/1/lists/${listId}/closed`, { value: true }); } function getCards(listId) { return trelloAction("GET", `/1/lists/${listId}/cards`); } function addCard(listId, name) { return trelloAction("POST", "/1/cards", { name: name, idList: listId }); } function deleteCard(cardId) { return trelloAction("DELETE", `/1/cards/${cardId}`); } function trelloAction(method, path, qs, key) { if (!props.apiKey || !props.apiToken) { throw Error("Service not initialized; API key and token not set."); } qs = qs || {}; qs.key = props.apiKey; qs.token = props.apiToken; const options = { method: method, uri: "https://api.trello.com" + path, qs: qs, json: true }; return new Promise((resolve, reject) => { request.default(options, (error, res, body) => { if (error) { console.log("TRELLO ERROR", JSON.stringify(error, null, 4)); resolve(); // reject(error) } resolve(key ? body[key] : body); }); }); }