Use local svgo.cmd wrapper binary

Switch SVG optimizer resolution from bin/svgo-cli.exe to bin/svgo.cmd.

Update unit tests to validate the new local binary path behavior.

Co-Authored-By: Abacus.AI CLI <agent@abacus.ai>
This commit is contained in:
2026-06-08 14:50:19 +02:00
parent 75059f829a
commit 6c5a5256c7
1054 changed files with 152359 additions and 7 deletions
+53
View File
@@ -0,0 +1,53 @@
import { is, selectAll, selectOne } from 'css-select';
import { createAdapter } from './svgo/css-select-adapter.js';
/**
* @param {import('./types.js').XastParent} relativeNode
* @param {Map<import('./types.js').XastNode, import('./types.js').XastParent>=} parents
* @returns {import('css-select').Options<import('./types.js').XastNode & { children?: any }, import('./types.js').XastElement>}
*/
function createCssSelectOptions(relativeNode, parents) {
return {
xmlMode: true,
adapter: createAdapter(relativeNode, parents),
};
}
/**
* @param {import('./types.js').XastParent} node Element to query the children of.
* @param {string} selector CSS selector string.
* @param {Map<import('./types.js').XastNode, import('./types.js').XastParent>=} parents
* @returns {import('./types.js').XastChild[]} All matching elements.
*/
export const querySelectorAll = (node, selector, parents) => {
return selectAll(selector, node, createCssSelectOptions(node, parents));
};
/**
* @param {import('./types.js').XastParent} node Element to query the children of.
* @param {string} selector CSS selector string.
* @param {Map<import('./types.js').XastNode, import('./types.js').XastParent>=} parents
* @returns {?import('./types.js').XastChild} First match, or null if there was no match.
*/
export const querySelector = (node, selector, parents) => {
return selectOne(selector, node, createCssSelectOptions(node, parents));
};
/**
* @param {import('./types.js').XastElement} node
* @param {string} selector
* @param {Map<import('./types.js').XastNode, import('./types.js').XastParent>=} parents
* @returns {boolean}
*/
export const matches = (node, selector, parents) => {
return is(node, selector, createCssSelectOptions(node, parents));
};
/**
* @param {import('./types.js').XastChild} node
* @param {import('./types.js').XastParent} parentNode
*/
export const detachNodeFromParent = (node, parentNode) => {
// avoid splice to not break for loops
parentNode.children = parentNode.children.filter((child) => child !== node);
};