Big News: Socket raises $60M Series C at a $1B valuation to secure software supply chains for AI-driven development.Announcement
Sign In

@panzer1119/bbcode-parser

Package Overview
Dependencies
Maintainers
1
Versions
6
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@panzer1119/bbcode-parser - npm Package Compare versions

Comparing version
1.0.0
to
1.0.1
+24
lib/bbcodeparser.d.ts
import { BBTag } from "./bbtag";
export declare function endsWith(str: string, endStr: string): boolean;
export declare function startsWith(str: string, startStr: string): boolean;
export declare const tagsToReplace: {
[key: string]: string;
};
export declare function escapeHTML(html: string): string;
export declare class BBCodeParser {
private bbTags;
private options;
constructor(bbTags: {
[key: string]: BBTag;
}, options?: {
escapeHTML: boolean;
});
parseString(content: string, stripTags?: boolean, insertLineBreak?: boolean, escapingHtml?: boolean): string;
private treeToHtml;
static defaultTags(): {
[key: string]: BBTag;
};
static escapeHTML(content: string): string;
static startsWith(str: string, startStr: string): boolean;
static endsWith(str: string, endStr: string): boolean;
}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.BBCodeParser = exports.escapeHTML = exports.tagsToReplace = exports.startsWith = exports.endsWith = void 0;
//Indicates if the first string ends with the second str
var bbtag_1 = require("./bbtag");
var bbcodeparsetree_1 = require("./bbcodeparsetree");
function endsWith(str, endStr) {
if (str.length === 0) {
return false;
}
if (endStr.length > str.length) {
return false;
}
var inStrEnd = str.substr(str.length - endStr.length, endStr.length);
return endStr === inStrEnd;
}
exports.endsWith = endsWith;
//Indicates if the first string starts with the second string
function startsWith(str, startStr) {
if (str.length === 0) {
return false;
}
if (startStr.length > str.length) {
return false;
}
var inStrStart = str.substr(0, startStr.length);
return startStr === inStrStart;
}
exports.startsWith = startsWith;
exports.tagsToReplace = {
"&": "&",
"<": "&lt;",
">": "&gt;",
};
//Escapes the given html
function escapeHTML(html) {
return html.replace(/[&<>]/g, function (tag) {
return exports.tagsToReplace[tag] || tag;
});
}
exports.escapeHTML = escapeHTML;
var BBCodeParser = /** @class */ (function () {
function BBCodeParser(bbTags, options) {
if (options === void 0) { options = { escapeHTML: false }; }
this.bbTags = bbTags;
this.options = options;
}
//Parses the given string
BBCodeParser.prototype.parseString = function (content, stripTags, insertLineBreak, escapingHtml) {
if (stripTags === void 0) { stripTags = false; }
if (insertLineBreak === void 0) { insertLineBreak = true; }
if (escapingHtml === void 0) { escapingHtml = true; }
//Create the parse tree
var parseTree = bbcodeparsetree_1.BBCodeParseTree.buildTree(content, this.bbTags);
//If the tree is invalid, return the input as text
if (!parseTree || !parseTree.isValid()) {
return content;
}
//Convert it to HTML
return this.treeToHtml(parseTree.subTrees, insertLineBreak, escapingHtml, stripTags);
};
//Converts the given subtrees into html
BBCodeParser.prototype.treeToHtml = function (subTrees, insertLineBreak, escapingHtml, stripTags) {
var _this = this;
if (stripTags === void 0) { stripTags = false; }
var htmlString = "";
var suppressLineBreak = false;
subTrees.forEach(function (currentTree) {
if (currentTree.treeType === bbcodeparsetree_1.TreeType.Text) {
var textContent = currentTree.content;
if (escapingHtml) {
textContent = _this.options.escapeHTML ? escapeHTML(textContent) : textContent;
}
if (insertLineBreak && !suppressLineBreak) {
textContent = textContent.replace(/(\r\n|\n|\r)/gm, "<br>");
suppressLineBreak = false;
}
htmlString += textContent;
}
else {
//Get the tag
var bbTag = _this.bbTags[currentTree.content];
var content = _this.treeToHtml(currentTree.subTrees, bbTag.insertLineBreaks, escapingHtml, stripTags);
//Check if to strip the tags
if (!stripTags) {
htmlString += bbTag.markupGenerator(bbTag, content, currentTree.attributes);
}
else {
htmlString += content;
}
suppressLineBreak = bbTag.suppressLineBreaks;
}
});
return htmlString;
};
//Returns the default tags
BBCodeParser.defaultTags = function () {
var bbTags = {};
//Simple tags
bbTags["b"] = new bbtag_1.BBTag("b", true, false, false);
bbTags["i"] = new bbtag_1.BBTag("i", true, false, false);
bbTags["u"] = new bbtag_1.BBTag("u", true, false, false);
bbTags["h1"] = bbtag_1.BBTag.createSimpleTag("h1");
bbTags["h2"] = bbtag_1.BBTag.createSimpleTag("h2");
bbTags["h3"] = bbtag_1.BBTag.createSimpleTag("h3");
bbTags["h4"] = bbtag_1.BBTag.createSimpleTag("h4");
bbTags["h5"] = bbtag_1.BBTag.createSimpleTag("h5");
bbTags["hr"] = bbtag_1.BBTag.createSimpleTag("hr");
bbTags["table"] = bbtag_1.BBTag.createSimpleTag("table");
bbTags["tr"] = bbtag_1.BBTag.createSimpleTag("tr");
bbTags["th"] = bbtag_1.BBTag.createSimpleTag("th");
bbTags["td"] = bbtag_1.BBTag.createSimpleTag("td");
bbTags["spoiler"] = bbtag_1.BBTag.createSimpleTag("spoiler");
bbTags["noparse"] = new bbtag_1.BBTag("noparse", true, false, true);
bbTags["strike"] = bbtag_1.BBTag.createSimpleHTMLTag("strike", "s");
bbTags["list"] = bbtag_1.BBTag.createSimpleHTMLTag("olist", "ul");
bbTags["olist"] = bbtag_1.BBTag.createSimpleHTMLTag("olist", "ol");
bbTags["*"] = bbtag_1.BBTag.createSimpleHTMLTag("*", "li");
bbTags["text"] = new bbtag_1.BBTag("text", true, false, true, function (tag, content) { return content; });
bbTags["img"] = new bbtag_1.BBTag("img", true, false, false, function (tag, content) { return "<img src=\"" + content + "\" alt=\"" + content + "\"/>"; });
bbTags["quote"] = new bbtag_1.BBTag("quote", true, false, false, function (tag, content, attributes) {
var address = attributes["quote"] ? "<address>" + attributes["quote"] + "</address>" : "";
return "<blockquote>" + address + content + "</blockquote>";
});
bbTags["url"] = new bbtag_1.BBTag("url", true, false, false, function (tag, content, attributes) {
var link = content;
if (attributes["url"]) {
link = escapeHTML(attributes["url"]);
}
if (!startsWith(link, "http://") && !startsWith(link, "https://")) {
link = "http://" + link;
}
return '<a href="' + link + '" target="_blank">' + content + "</a>";
});
bbTags["code"] = new bbtag_1.BBTag("code", true, false, true, function (tag, content, attributes) {
var lang = attributes["lang"];
if (lang) {
return '<code class="' + escapeHTML(lang) + '">' + content + "</code>";
}
else {
return "<code>" + content + "</code>";
}
});
return bbTags;
};
BBCodeParser.escapeHTML = function (content) {
return escapeHTML(content);
};
BBCodeParser.startsWith = function (str, startStr) {
return startsWith(str, startStr);
};
BBCodeParser.endsWith = function (str, endStr) {
return endsWith(str, endStr);
};
return BBCodeParser;
}());
exports.BBCodeParser = BBCodeParser;
//# sourceMappingURL=bbcodeparser.js.map
{"version":3,"file":"bbcodeparser.js","sourceRoot":"","sources":["../src/bbcodeparser.ts"],"names":[],"mappings":"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"}
import { BBTag } from "./bbtag";
export declare enum TreeType {
Root = 0,
Text = 1,
Tag = 2
}
export declare class BBCodeParseTree {
treeType: TreeType;
content: string;
attributes: {
[key: string]: string;
};
subTrees: BBCodeParseTree[];
constructor(treeType: TreeType, content: string, attributes?: {
[key: string]: string;
}, subTrees?: BBCodeParseTree[]);
isValid(): boolean;
toString(): string;
static buildTree(str: string, bbTags: {
[key: string]: BBTag;
}): BBCodeParseTree | null;
private static buildTreeFromTokens;
}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.BBCodeParseTree = exports.TreeType = void 0;
var tokenizer_1 = require("./tokenizer");
var TreeType;
(function (TreeType) {
TreeType[TreeType["Root"] = 0] = "Root";
TreeType[TreeType["Text"] = 1] = "Text";
TreeType[TreeType["Tag"] = 2] = "Tag";
})(TreeType = exports.TreeType || (exports.TreeType = {}));
var BBCodeParseTree = /** @class */ (function () {
function BBCodeParseTree(treeType, content, attributes, subTrees) {
if (attributes === void 0) { attributes = {}; }
if (subTrees === void 0) { subTrees = []; }
this.treeType = treeType;
this.content = content;
this.attributes = attributes;
this.subTrees = subTrees;
}
//Indicates if the current tree is valid
BBCodeParseTree.prototype.isValid = function () {
//An tree without subtrees is valid
if (this.subTrees.length === 0) {
return true;
}
//An tree is valid if all of its subtrees are valid
for (var i in this.subTrees) {
var currentTree = this.subTrees[i];
if (!currentTree || !currentTree.isValid()) {
return false;
}
}
return true;
};
//String representation of the tree
BBCodeParseTree.prototype.toString = function () {
return TreeType[this.treeType] + " - " + this.content;
};
//Builds a parse tree from the given string
BBCodeParseTree.buildTree = function (str, bbTags) {
//Get the tokens
var tokenizer = new tokenizer_1.Tokenizer(bbTags);
var tokens = tokenizer.tokenizeString(str);
//Build the tree
tokens.reverse();
return BBCodeParseTree.buildTreeFromTokens(new BBCodeParseTree(TreeType.Root, str), tokens);
};
//Builds a tree from the given tokens
BBCodeParseTree.buildTreeFromTokens = function (rootTree, tokens, currentTag) {
if (currentTag === void 0) { currentTag = ""; }
//The root root is invalid, return null
if (!rootTree) {
return null;
}
//There are no more tokens, return the root
if (tokens.length === 0) {
return rootTree;
}
//Remove the first token
var currentToken = tokens.pop();
if (!currentToken) {
return rootTree;
}
//Add the text token as a text parse tree
if (currentToken.tokenType === tokenizer_1.TokenType.Text) {
rootTree.subTrees.push(new BBCodeParseTree(TreeType.Text, currentToken.content));
}
//Create a new tag tree and find its subtrees
if (currentToken.tokenType === tokenizer_1.TokenType.StartTag) {
var tagName = currentToken.content;
var treeFromTokens = BBCodeParseTree.buildTreeFromTokens(new BBCodeParseTree(TreeType.Tag, tagName, currentToken.tagAttributes), tokens, tagName);
if (treeFromTokens) {
rootTree.subTrees.push(treeFromTokens);
}
}
//Check if its the correct end tag
if (currentToken.tokenType === tokenizer_1.TokenType.EndTag) {
if (currentToken.content === currentTag) {
return rootTree;
}
else {
return null;
}
}
//If we got no more tokens, and we have opened an tag but not closed it, return null
if (tokens.length === 0) {
if (currentTag !== "") {
return null;
}
}
//Proceed to the next token
return BBCodeParseTree.buildTreeFromTokens(rootTree, tokens, currentTag);
};
return BBCodeParseTree;
}());
exports.BBCodeParseTree = BBCodeParseTree;
//# sourceMappingURL=bbcodeparsetree.js.map
{"version":3,"file":"bbcodeparsetree.js","sourceRoot":"","sources":["../src/bbcodeparsetree.ts"],"names":[],"mappings":"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"}
export declare class BBTag {
tagName: string;
insertLineBreaks: boolean;
suppressLineBreaks: boolean;
noNesting: boolean;
markupGenerator: (tag: BBTag, content: string, attributes: {
[key: string]: string;
}) => string;
constructor(tagName: string, //The name of the tag
insertLineBreaks: boolean, //Indicates if line breaks are inserted inside the tag content
suppressLineBreaks: boolean, //Suppresses any line breaks for nested tags
noNesting: boolean, //Indicates if the tag supports nested tags
markupGenerator?: (tag: BBTag, content: string, attributes: {
[key: string]: string;
}) => string);
static createSimpleTag(tagName: string, insertLineBreaks?: boolean): BBTag;
static createSimpleHTMLTag(tagName: string, htmlTag: string, insertLineBreaks?: boolean): BBTag;
static createTag(tagName: string, markupGenerator: (tag: BBTag, content: string, attributes: {
[key: string]: string;
}) => string, insertLineBreaks?: boolean): BBTag;
}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.BBTag = void 0;
var BBTag = /** @class */ (function () {
function BBTag(tagName, //The name of the tag
insertLineBreaks, //Indicates if line breaks are inserted inside the tag content
suppressLineBreaks, //Suppresses any line breaks for nested tags
noNesting, //Indicates if the tag supports nested tags
markupGenerator) {
if (markupGenerator === void 0) { markupGenerator = function (tag, content) { return "<" + tag.tagName + ">" + content + "</" + tag.tagName + ">"; }; }
this.tagName = tagName;
this.insertLineBreaks = insertLineBreaks;
this.suppressLineBreaks = suppressLineBreaks;
this.noNesting = noNesting;
this.markupGenerator = markupGenerator;
}
//Creates a new simple tag
BBTag.createSimpleTag = function (tagName, insertLineBreaks) {
if (insertLineBreaks === void 0) { insertLineBreaks = true; }
return new BBTag(tagName, insertLineBreaks, false, false);
};
//Creates a new simple tag
BBTag.createSimpleHTMLTag = function (tagName, htmlTag, insertLineBreaks) {
if (insertLineBreaks === void 0) { insertLineBreaks = true; }
return new BBTag(tagName, insertLineBreaks, false, false, function (tag, content) { return "<" + htmlTag + ">" + content + "</" + htmlTag + ">"; });
};
//Creates a tag with the given generator
BBTag.createTag = function (tagName, markupGenerator, insertLineBreaks) {
if (insertLineBreaks === void 0) { insertLineBreaks = true; }
return new BBTag(tagName, insertLineBreaks, false, false, markupGenerator);
};
return BBTag;
}());
exports.BBTag = BBTag;
//# sourceMappingURL=bbtag.js.map
{"version":3,"file":"bbtag.js","sourceRoot":"","sources":["../src/bbtag.ts"],"names":[],"mappings":";;;AAAA;IACI,eACW,OAAe,EAAE,qBAAqB;IACtC,gBAAyB,EAAE,8DAA8D;IACzF,kBAA2B,EAAE,4CAA4C;IACzE,SAAkB,EAAE,2CAA2C;IAC/D,eAG2C;QAH3C,gCAAA,EAAA,4BACH,GAAG,EACH,OAAO,IACN,OAAA,MAAI,GAAG,CAAC,OAAO,SAAI,OAAO,UAAK,GAAG,CAAC,OAAO,MAAG,EAA7C,CAA6C;QAP3C,YAAO,GAAP,OAAO,CAAQ;QACf,qBAAgB,GAAhB,gBAAgB,CAAS;QACzB,uBAAkB,GAAlB,kBAAkB,CAAS;QAC3B,cAAS,GAAT,SAAS,CAAS;QAClB,oBAAe,GAAf,eAAe,CAG4B;IACnD,CAAC;IAEJ,0BAA0B;IACZ,qBAAe,GAA7B,UAA8B,OAAe,EAAE,gBAAuB;QAAvB,iCAAA,EAAA,uBAAuB;QAClE,OAAO,IAAI,KAAK,CAAC,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IAC9D,CAAC;IAED,0BAA0B;IACZ,yBAAmB,GAAjC,UAAkC,OAAe,EAAE,OAAe,EAAE,gBAAuB;QAAvB,iCAAA,EAAA,uBAAuB;QACvF,OAAO,IAAI,KAAK,CACZ,OAAO,EACP,gBAAgB,EAChB,KAAK,EACL,KAAK,EACL,UAAC,GAAG,EAAE,OAAO,IAAK,OAAA,MAAI,OAAO,SAAI,OAAO,UAAK,OAAO,MAAG,EAArC,CAAqC,CAC1D,CAAC;IACN,CAAC;IAED,wCAAwC;IAC1B,eAAS,GAAvB,UACI,OAAe,EACf,eAA+F,EAC/F,gBAAuB;QAAvB,iCAAA,EAAA,uBAAuB;QAEvB,OAAO,IAAI,KAAK,CAAC,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC;IAC/E,CAAC;IACL,YAAC;AAAD,CAAC,AApCD,IAoCC;AApCY,sBAAK"}
import { BBTag } from "./bbtag";
export declare enum TokenType {
Text = 0,
StartTag = 1,
EndTag = 2
}
export declare class Token {
tokenType: TokenType;
content: string;
tagAttributes?: {
[key: string]: string;
} | undefined;
tagStr?: string | undefined;
constructor(tokenType: TokenType, content: string, tagAttributes?: {
[key: string]: string;
} | undefined, tagStr?: string | undefined);
toString(): string;
equals(token: Token): boolean;
}
export declare function textToken(content: string): Token;
export declare function tagToken(match: RegExpExecArray): Token;
export declare function asTextToken(token: Token): void;
export declare class Tokenizer {
private bbTags;
constructor(bbTags: {
[key: string]: BBTag;
});
tokenizeString(str: string): Token[];
getTokens(str: string): Token[];
}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Tokenizer = exports.asTextToken = exports.tagToken = exports.textToken = exports.Token = exports.TokenType = void 0;
var TokenType;
(function (TokenType) {
TokenType[TokenType["Text"] = 0] = "Text";
TokenType[TokenType["StartTag"] = 1] = "StartTag";
TokenType[TokenType["EndTag"] = 2] = "EndTag";
})(TokenType = exports.TokenType || (exports.TokenType = {}));
//Represents a token
var Token = /** @class */ (function () {
function Token(tokenType, content, tagAttributes, tagStr) {
this.tokenType = tokenType;
this.content = content;
this.tagAttributes = tagAttributes;
this.tagStr = tagStr;
}
//String representation of the token
Token.prototype.toString = function () {
return this.content + " (" + TokenType[this.tokenType] + ")";
};
//Check for equality
Token.prototype.equals = function (token) {
return this.tokenType == token.tokenType && this.content == token.content;
};
return Token;
}());
exports.Token = Token;
//Creates a new text token
function textToken(content) {
return new Token(TokenType.Text, content);
}
exports.textToken = textToken;
var attributeNameChars = "[a-zA-Z0-9\\.\\-_:;/]";
var attributeValueChars = "[a-zA-Z0-9\\.\\-_:;#/\\s]";
var tokenPattern = "\\[(\\/\\w*)\\]|\\[(\\w*)+(?:=(" + attributeValueChars + "*))?(?: (" + attributeNameChars + "+)=(" + attributeValueChars + "+))*\\]|\\[\\*\\] ?(['\\.,\\-:;#/\\w\\s]+)";
//Creates a new tag token
function tagToken(match) {
var _a;
if (match[1] == undefined) {
//Start tag
var tagName = match[2];
var attributes = {};
var attributePattern = new RegExp("(" + attributeNameChars + "+)?=(" + attributeValueChars + "+)", "g");
var attributeStr = match[0].substr(1 + tagName.length, match[0].length - 2 - tagName.length);
var attributeMatch = void 0;
while ((attributeMatch = attributePattern.exec(attributeStr))) {
var value = (_a = attributeMatch[2]) === null || _a === void 0 ? void 0 : _a.trim();
if (attributeMatch[1] == undefined) {
//The tag attribute
attributes[tagName] = value;
}
else {
//Normal attribute
attributes[attributeMatch[1]] = value;
}
}
return new Token(TokenType.StartTag, tagName, attributes, match[0]);
}
else {
//End tag
return new Token(TokenType.EndTag, match[1].substr(1, match[1].length - 1));
}
}
exports.tagToken = tagToken;
//Converts the given token to a text token
function asTextToken(token) {
var _a;
if (token.tokenType == TokenType.StartTag) {
token.content = (_a = token.tagStr) !== null && _a !== void 0 ? _a : "";
token.tokenType = TokenType.Text;
//delete token.attributes;
//delete token.tagStr;
}
if (token.tokenType == TokenType.EndTag) {
token.content = "[/" + token.content + "]";
token.tokenType = TokenType.Text;
}
}
exports.asTextToken = asTextToken;
//Represents a tokenizer
var Tokenizer = /** @class */ (function () {
//Creates a new tokenizer with the given tags
function Tokenizer(bbTags) {
this.bbTags = bbTags;
}
//Tokenizes the given string
Tokenizer.prototype.tokenizeString = function (str) {
var tokens = this.getTokens(str);
var newTokens = [];
var noNesting = false;
var noNestingTag = "";
var noNestedTagContent = "";
for (var i in tokens) {
var currentToken = tokens[i];
var bbTag = this.bbTags[currentToken.content];
var addTag = true;
//Replace invalid tags with text
if (bbTag === undefined && !noNesting) {
asTextToken(currentToken);
}
else {
//Check if current tag doesn't support nesting
if (noNesting) {
if (currentToken.tokenType == TokenType.EndTag && currentToken.content == noNestingTag) {
noNesting = false;
newTokens.push(textToken(noNestedTagContent));
}
else {
asTextToken(currentToken);
noNestedTagContent += currentToken.content;
addTag = false;
}
}
else {
if (bbTag.noNesting && currentToken.tokenType == TokenType.StartTag) {
noNesting = true;
noNestingTag = currentToken.content;
noNestedTagContent = "";
}
}
}
if (addTag) {
newTokens.push(currentToken);
}
}
return newTokens;
};
//Gets the tokens from the given string
Tokenizer.prototype.getTokens = function (str) {
var tagPattern = new RegExp(tokenPattern, "g");
var tokens = [];
var match;
var lastIndex = 0;
while ((match = tagPattern.exec(str))) {
var deltaInner = match.index - lastIndex;
if (deltaInner > 0) {
tokens.push(textToken(str.substr(lastIndex, deltaInner)));
}
if (match[6]) {
//Is [*] List Item
var tokenStart = new Token(TokenType.StartTag, "*", {}, "[*]");
var tokenText = textToken(match[6]);
var tokenEnd = new Token(TokenType.EndTag, "*");
tokens.push(tokenStart);
tokens.push(tokenText);
tokens.push(tokenEnd);
}
else {
var token = tagToken(match);
tokens.push(token);
}
lastIndex = tagPattern.lastIndex;
}
var delta = str.length - lastIndex;
if (delta > 0) {
tokens.push(textToken(str.substr(lastIndex, delta)));
}
return tokens;
};
return Tokenizer;
}());
exports.Tokenizer = Tokenizer;
//# sourceMappingURL=tokenizer.js.map
{"version":3,"file":"tokenizer.js","sourceRoot":"","sources":["../src/tokenizer.ts"],"names":[],"mappings":"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"}
+1
-5

@@ -1,5 +0,1 @@

export declare class BBTag {
private readonly _name;
constructor(_name: string);
get name(): string;
}
export { BBCodeParser } from "./bbcodeparser";
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.BBTag = void 0;
var BBTag = /** @class */ (function () {
function BBTag(_name) {
this._name = _name;
}
Object.defineProperty(BBTag.prototype, "name", {
get: function () {
return this._name;
},
enumerable: false,
configurable: true
});
return BBTag;
}());
exports.BBTag = BBTag;
exports.BBCodeParser = void 0;
var bbcodeparser_1 = require("./bbcodeparser");
Object.defineProperty(exports, "BBCodeParser", { enumerable: true, get: function () { return bbcodeparser_1.BBCodeParser; } });
//# sourceMappingURL=index.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA;IACI,eAA6B,KAAa;QAAb,UAAK,GAAL,KAAK,CAAQ;IAAG,CAAC;IAE9C,sBAAI,uBAAI;aAAR;YACI,OAAO,IAAI,CAAC,KAAK,CAAC;QACtB,CAAC;;;OAAA;IACL,YAAC;AAAD,CAAC,AAND,IAMC;AANY,sBAAK"}
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,+CAA8C;AAArC,4GAAA,YAAY,OAAA"}
{
"name": "@panzer1119/bbcode-parser",
"version": "1.0.0",
"version": "1.0.1",
"description": "BB code parser written in TypeScript.",

@@ -12,3 +12,8 @@ "main": "lib/index.js",

"test": "jest --config jestconfig.json",
"build": "tsc"
"build": "tsc",
"format": "prettier --write \"src/**/*.ts\" \"src/**/*.js\"",
"prepare": "npm run build",
"prepublishOnly": "npm test",
"version": "npm run format && git add -A src",
"postversion": "git push && git push --tags"
},

@@ -15,0 +20,0 @@ "repository": {