Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

refactor: replaces lodash.memoize with alternatives #61

Merged
merged 3 commits into from
Jul 13, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .c8rc.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"checkCoverage": true,
"statements": 99.3,
"branches": 89.6,
"branches": 89.5,
"functions": 98.5,
"lines": 99.3,
"exclude": ["{src/render/graphics/styling,src/render/graphics/svgelementfactory/wobbly,src/parse/*parser.js,test/**/*,tools/**/*}"],
Expand Down
2 changes: 1 addition & 1 deletion dist/bundle/index.min.js

Large diffs are not rendered by default.

64 changes: 38 additions & 26 deletions dist/cjs/main/lazy-resolver.js
Original file line number Diff line number Diff line change
@@ -1,36 +1,48 @@
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getTextRenderer = exports.getGraphicsRenderer = exports.getParser = void 0;
var memoize_1 = __importDefault(require("lodash/memoize"));
exports.getParser = getParser;
exports.getGraphicsRenderer = getGraphicsRenderer;
exports.getTextRenderer = getTextRenderer;
var DEFAULT_PARSER = "../parse/mscgenparser";
var DEFAULT_TEXT_RENDERER = "../render/text/ast2mscgen";
var gLang2Parser = Object.freeze({
mscgen: "../parse/mscgenparser",
xu: "../parse/xuparser",
msgenny: "../parse/msgennyparser",
});
var gLang2TextRenderer = Object.freeze({
mscgen: "../render/text/ast2mscgen",
msgenny: "../render/text/ast2msgenny",
xu: "../render/text/ast2xu",
dot: "../render/text/ast2dot",
doxygen: "../render/text/ast2doxygen",
});
exports.getParser = (0, memoize_1.default)(function (pLanguage) {
var gLang2Parser = new Map([
["mscgen", "../parse/mscgenparser"],
["xu", "../parse/xuparser"],
["msgenny", "../parse/msgennyparser"],
]);
var gLang2TextRenderer = new Map([
["mscgen", "../render/text/ast2mscgen"],
["msgenny", "../render/text/ast2msgenny"],
["xu", "../render/text/ast2xu"],
["dot", "../render/text/ast2dot"],
["doxygen", "../render/text/ast2doxygen"],
]);
var parserMap = new Map();
function getParser(pLanguage) {
if (["ast", "json"].indexOf(pLanguage) > -1) {
return JSON;
}
return require(gLang2Parser[pLanguage] || DEFAULT_PARSER);
});
exports.getGraphicsRenderer = (0, memoize_1.default)(function () {
return require("../render/graphics/renderast");
});
exports.getTextRenderer = (0, memoize_1.default)(function (pLanguage) {
return require(gLang2TextRenderer[pLanguage] || DEFAULT_TEXT_RENDERER);
});
if (!parserMap.has(pLanguage)) {
parserMap.set(pLanguage, require(gLang2Parser.get(pLanguage) || DEFAULT_PARSER));
}
return parserMap.get(pLanguage);
}
;
var graphicsRenderer = null;
function getGraphicsRenderer() {
if (!graphicsRenderer) {
graphicsRenderer = require("../render/graphics/renderast");
}
return graphicsRenderer;
}
var textRendererMap = new Map();
function getTextRenderer(pLanguage) {
if (!textRendererMap.has(pLanguage)) {
textRendererMap.set(pLanguage, require(gLang2TextRenderer.get(pLanguage) || DEFAULT_TEXT_RENDERER));
}
return textRendererMap.get(pLanguage);
}
;
/*
This file is part of mscgen_js.

Expand Down
23 changes: 12 additions & 11 deletions dist/cjs/render/graphics/svgutensils.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,21 +22,19 @@ var __importStar = (this && this.__importStar) || function (mod) {
__setModuleDefault(result, mod);
return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.webkitNamespaceBugWorkaround = exports.calculateTextHeight = exports.init = void 0;
exports.webkitNamespaceBugWorkaround = exports.init = void 0;
exports.getBBox = getBBox;
exports.calculateTextHeight = calculateTextHeight;
exports.removeRenderedSVGFromElement = removeRenderedSVGFromElement;
var memoize_1 = __importDefault(require("lodash/memoize"));
var idmanager = __importStar(require("./idmanager"));
var svgelementfactory = __importStar(require("./svgelementfactory/index"));
/**
* Some SVG specific calculations & workarounds
*/
var gDocument = {};
var gSvgBBoxerId = idmanager.get("bboxer");
var gTextHeight = 0;
/* istanbul ignore next */
function _createBBoxerSVG(pId) {
var lSvg = svgelementfactory.createSVG(pId, idmanager.get());
Expand Down Expand Up @@ -103,18 +101,25 @@ function getBBox(pElement) {
};
}
}
function _calculateTextHeight() {
/**
* Returns the height in pixels necessary for rendering characters
*/
function calculateTextHeight() {
if (gTextHeight !== 0) {
return gTextHeight;
}
/* Uses a string with some characters that tend to stick out
* above/ below the current line and an 'astral codepoint' to
* determine the text height to use everywhere.
*
* The astral \uD83D\uDCA9 codepoint mainly makes a difference in gecko based
* browsers. The string in readable form: ÁjyÎ9ƒ@💩
*/
return getBBox(svgelementfactory.createText("\u00C1jy\u00CE9\u0192@\uD83D\uDCA9", {
gTextHeight = getBBox(svgelementfactory.createText("\u00C1jy\u00CE9\u0192@\uD83D\uDCA9", {
x: 0,
y: 0,
})).height;
return gTextHeight;
}
function removeRenderedSVGFromElement(pElementId) {
idmanager.setPrefix(pElementId);
Expand All @@ -133,10 +138,6 @@ var init = function (pDocument) {
gDocument = pDocument;
};
exports.init = init;
/**
* Returns the height in pixels necessary for rendering characters
*/
exports.calculateTextHeight = (0, memoize_1.default)(_calculateTextHeight);
// webkit (at least in Safari Version 6.0.5 (8536.30.1) which is
// distibuted with MacOSX 10.8.4) omits the xmlns: and xlink:
// namespace prefixes in front of xlink and all hrefs respectively.
Expand Down
53 changes: 35 additions & 18 deletions dist/es2015/main/lazy-resolver.js
Original file line number Diff line number Diff line change
@@ -1,26 +1,43 @@
import memoize from "lodash/memoize";
const DEFAULT_PARSER = "../parse/mscgenparser";
const DEFAULT_TEXT_RENDERER = "../render/text/ast2mscgen";
const gLang2Parser = Object.freeze({
mscgen: "../parse/mscgenparser",
xu: "../parse/xuparser",
msgenny: "../parse/msgennyparser",
});
const gLang2TextRenderer = Object.freeze({
mscgen: "../render/text/ast2mscgen",
msgenny: "../render/text/ast2msgenny",
xu: "../render/text/ast2xu",
dot: "../render/text/ast2dot",
doxygen: "../render/text/ast2doxygen",
});
export const getParser = memoize((pLanguage) => {
const gLang2Parser = new Map([
["mscgen", "../parse/mscgenparser"],
["xu", "../parse/xuparser"],
["msgenny", "../parse/msgennyparser"],
]);
const gLang2TextRenderer = new Map([
["mscgen", "../render/text/ast2mscgen"],
["msgenny", "../render/text/ast2msgenny"],
["xu", "../render/text/ast2xu"],
["dot", "../render/text/ast2dot"],
["doxygen", "../render/text/ast2doxygen"],
]);
const parserMap = new Map();
export function getParser(pLanguage) {
if (["ast", "json"].indexOf(pLanguage) > -1) {
return JSON;
}
return require(gLang2Parser[pLanguage] || DEFAULT_PARSER);
});
export const getGraphicsRenderer = memoize(() => require("../render/graphics/renderast"));
export const getTextRenderer = memoize((pLanguage) => require(gLang2TextRenderer[pLanguage] || DEFAULT_TEXT_RENDERER));
if (!parserMap.has(pLanguage)) {
parserMap.set(pLanguage, require(gLang2Parser.get(pLanguage) || DEFAULT_PARSER));
}
return parserMap.get(pLanguage);
}
;
let graphicsRenderer = null;
export function getGraphicsRenderer() {
if (!graphicsRenderer) {
graphicsRenderer = require("../render/graphics/renderast");
}
return graphicsRenderer;
}
const textRendererMap = new Map();
export function getTextRenderer(pLanguage) {
if (!textRendererMap.has(pLanguage)) {
textRendererMap.set(pLanguage, require(gLang2TextRenderer.get(pLanguage) || DEFAULT_TEXT_RENDERER));
}
return textRendererMap.get(pLanguage);
}
;
/*
This file is part of mscgen_js.

Expand Down
17 changes: 10 additions & 7 deletions dist/es2015/render/graphics/svgutensils.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import memoize from "lodash/memoize";
import * as idmanager from "./idmanager";
import * as svgelementfactory from "./svgelementfactory/index";
/**
* Some SVG specific calculations & workarounds
*/
let gDocument = {};
const gSvgBBoxerId = idmanager.get("bboxer");
let gTextHeight = 0;
/* istanbul ignore next */
function _createBBoxerSVG(pId) {
const lSvg = svgelementfactory.createSVG(pId, idmanager.get());
Expand Down Expand Up @@ -72,18 +72,25 @@ export function getBBox(pElement) {
};
}
}
function _calculateTextHeight() {
/**
* Returns the height in pixels necessary for rendering characters
*/
export function calculateTextHeight() {
if (gTextHeight !== 0) {
return gTextHeight;
}
/* Uses a string with some characters that tend to stick out
* above/ below the current line and an 'astral codepoint' to
* determine the text height to use everywhere.
*
* The astral \uD83D\uDCA9 codepoint mainly makes a difference in gecko based
* browsers. The string in readable form: ÁjyÎ9ƒ@💩
*/
return getBBox(svgelementfactory.createText("\u00C1jy\u00CE9\u0192@\uD83D\uDCA9", {
gTextHeight = getBBox(svgelementfactory.createText("\u00C1jy\u00CE9\u0192@\uD83D\uDCA9", {
x: 0,
y: 0,
})).height;
return gTextHeight;
}
export function removeRenderedSVGFromElement(pElementId) {
idmanager.setPrefix(pElementId);
Expand All @@ -101,10 +108,6 @@ export function removeRenderedSVGFromElement(pElementId) {
export const init = (pDocument) => {
gDocument = pDocument;
};
/**
* Returns the height in pixels necessary for rendering characters
*/
export const calculateTextHeight = memoize(_calculateTextHeight);
// webkit (at least in Safari Version 6.0.5 (8536.30.1) which is
// distibuted with MacOSX 10.8.4) omits the xmlns: and xlink:
// namespace prefixes in front of xlink and all hrefs respectively.
Expand Down
Loading