1
0
mirror of https://github.com/Jermolene/TiddlyWiki5 synced 2025-04-12 13:53:13 +00:00

Fixed RSoD error with moduleproperty filter operator (#8958)

* Fixed RSoD error with moduleproperty filter operator

* No RSoD when getting non-string objects as well
This commit is contained in:
Cameron Fischer 2025-03-06 16:28:39 -05:00 committed by GitHub
parent c25d6c11da
commit 636dae6c58
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 20 additions and 3 deletions

View File

@ -18,9 +18,16 @@ Export our filter function
exports.moduleproperty = function(source,operator,options) {
var results = [];
source(function(tiddler,title) {
var value = require(title)[operator.operand || ""];
if(value !== undefined) {
results.push(value);
try {
var value = require(title)[operator.operand || ""];
if(value !== undefined) {
if(typeof value !== "string") {
value = JSON.stringify(value);
}
results.push(value);
}
} catch(e) {
// Do nothing. It probably wasn't a module.
}
});
results.sort();

View File

@ -1134,6 +1134,16 @@ Tests the filtering mechanism.
expect(wiki.filterTiddlers("[[<>:\"/\\|?*]encodeuricomponent[]]").join(",")).toBe("%3C%3E%3A%22%2F%5C%7C%3F%2A");
});
it("should handle the moduleproperty operator", function() {
// We don't need to confirm them all, only it it finds at least one module name that we're sure is there.
expect(wiki.filterTiddlers("[[macro]modules[]moduleproperty[name]]")).toContain("qualify");
// No such property. Nothing to return.
expect(wiki.filterTiddlers("[[macro]modules[]moduleproperty[nonexistent]]").length).toBe(0);
// No such tiddlers. Nothing to return.
expect(wiki.filterTiddlers("[[nonexistent]moduleproperty[name]]").length).toBe(0);
// Non string properties should get toStringed.
expect(wiki.filterTiddlers("[[$:/core/modules/commands/init.js]moduleproperty[info]]").join(" ")).toBe('{"name":"init","synchronous":true}');
});
}
});