From 37e8213dc531a53b4b4530acb4e33b13b0f601ce Mon Sep 17 00:00:00 2001 From: adam wong Date: Mon, 14 Oct 2024 17:40:39 -0700 Subject: [PATCH] 0.59.0 --- .DS_Store | Bin 10244 -> 10244 bytes afterall.jpg | Bin 15138 -> 0 bytes dist/electron.log | 296 +-- ...=> BrowserWebSocketTransport-A3AE2ENO.mjs} | 2 +- ...js => NodeWebSocketTransport-U7SO2MFE.mjs} | 4 +- ...{chunk-O3BTYDMP.mjs => chunk-5E3747UH.mjs} | 32 + ...{chunk-OEJ6YU5Z.mjs => chunk-J3TUCTYO.mjs} | 2 +- ...{chunk-3FVDXTD3.mjs => chunk-LV2LOXIY.mjs} | 2 +- ...XKY2QFM.mjs => node-ponyfill-BYEL6RRA.mjs} | 2 +- dist/node/src-5JYTMVPT.mjs | 5 - dist/node/src-N5TG6ZNM.mjs | 5 + .../src/Rectangle/Rectangle.test.node.mjs | 1958 ++++++++++++----- .../Rectangle.test.node.ts/results.json | 10 +- dist/report.html | 2 +- .../src/Rectangle/Rectangle.test.electron.mjs | 2 +- .../Rectangle.test.electron.ts/log.txt | 4 +- .../Rectangle.test.electron.ts/results.json | 10 +- electron-puppeteer-screenshot1.jpg | Bin 0 -> 50075 bytes afterasll.jpg => hello2.jpg | Bin dist/afterall.jpg => hello3.jpg | Bin hello7.jpg | Bin 0 -> 25094 bytes hello8.jpg | Bin 0 -> 25094 bytes id2k.jpg | Bin 0 -> 25094 bytes package.json | 2 - src/Rectangle.test.ts | 2 +- src/Rectangle/Rectangle.test.node.ts | 14 +- tsconfig.json | 2 +- yarn.lock | 164 +- 28 files changed, 1529 insertions(+), 991 deletions(-) delete mode 100644 afterall.jpg rename dist/node/{BrowserWebSocketTransport-LQQSK34V.mjs => BrowserWebSocketTransport-A3AE2ENO.mjs} (98%) rename dist/node/{NodeWebSocketTransport-6ZAOSCXB.mjs => NodeWebSocketTransport-U7SO2MFE.mjs} (53%) rename dist/node/{chunk-O3BTYDMP.mjs => chunk-5E3747UH.mjs} (65%) rename dist/node/{chunk-OEJ6YU5Z.mjs => chunk-J3TUCTYO.mjs} (99%) rename dist/node/{chunk-3FVDXTD3.mjs => chunk-LV2LOXIY.mjs} (99%) rename dist/node/{node-ponyfill-NXKY2QFM.mjs => node-ponyfill-BYEL6RRA.mjs} (99%) delete mode 100644 dist/node/src-5JYTMVPT.mjs create mode 100644 dist/node/src-N5TG6ZNM.mjs create mode 100644 electron-puppeteer-screenshot1.jpg rename afterasll.jpg => hello2.jpg (100%) rename dist/afterall.jpg => hello3.jpg (100%) create mode 100644 hello7.jpg create mode 100644 hello8.jpg create mode 100644 id2k.jpg diff --git a/.DS_Store b/.DS_Store index 5b10e1de2211019b80d7ed5d95a2ed9aa1785314..1b978bb98817b397fb380ccd2fe0ec385d1f3f88 100644 GIT binary patch delta 379 zcmZn(XbIS$DiBw>w19zufrUYjA)O(Up(Hoo#U&{xKM5$tVYFN~=TY1-M^yO~yz&JZ zhQZ1Cxgawc*gOh0Hw&0D#Tq{W8<7IEpcvJP=lYwr{(xBlmq%EEO&-|_h5&)hqQZqt zEETS|JSWGA%7`F)z)8<<56E<=1j1Nk34Ubr+I~&gEGibk$hd2Bp11@b^^KjJCq4}T DSf_6J delta 379 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 diff --git a/dist/electron.log b/dist/electron.log index d0f8947a..158e1378 100644 --- a/dist/electron.log +++ b/dist/electron.log @@ -1,255 +1,6 @@ $ /Users/adam/Code/kokomoBay/node_modules/.bin/electron node_modules/testeranto/dist/common/electron.js -launchNode /Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs -mark5 -end -connected! true -testResourceConfiguration { - "scheduled": true, - "name": "/Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs", - "ports": [], - "fs": "/Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.ts" -} -from child /dist/web/src/ClassicalComponent/test.html -launchWebSecondary /Users/adam/Code/kokomoBay/dist/web/src/ClassicalComponent/test.html -afterall -afterall -afterall -afterall -exiting gracefully with 4 failures. -page CDPPage { - eventsMap: Map(0) {}, - emitter: { - all: Map(0) {}, - on: [Function: on], - off: [Function: off], - emit: [Function: emit] - } -} -afterall -goodbye -page CDPPage { - eventsMap: Map(0) {}, - emitter: { - all: Map(0) {}, - on: [Function: on], - off: [Function: off], - emit: [Function: emit] - } -} -afterall -goodbye -page CDPPage { - eventsMap: Map(0) {}, - emitter: { - all: Map(0) {}, - on: [Function: on], - off: [Function: off], - emit: [Function: emit] - } -} -afterall -goodbye -page CDPPage { - eventsMap: Map(0) {}, - emitter: { - all: Map(0) {}, - on: [Function: on], - off: [Function: off], - emit: [Function: emit] - } -} -afterall -goodbye -launchNode /Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs -mark5 -end -connected! true -testResourceConfiguration { - "scheduled": true, - "name": "/Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs", - "ports": [], - "fs": "/Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.ts" -} -from child /dist/web/src/ClassicalComponent/test.html -launchWebSecondary /Users/adam/Code/kokomoBay/dist/web/src/ClassicalComponent/test.html -exiting gracefully with 4 failures. -page CDPPage { - eventsMap: Map(0) {}, - emitter: { - all: Map(0) {}, - on: [Function: on], - off: [Function: off], - emit: [Function: emit] - } -} -afterall -goodbye -page CDPPage { - eventsMap: Map(0) {}, - emitter: { - all: Map(0) {}, - on: [Function: on], - off: [Function: off], - emit: [Function: emit] - } -} -afterall -goodbye -page CDPPage { - eventsMap: Map(0) {}, - emitter: { - all: Map(0) {}, - on: [Function: on], - off: [Function: off], - emit: [Function: emit] - } -} -afterall -goodbye -page CDPPage { - eventsMap: Map(0) {}, - emitter: { - all: Map(0) {}, - on: [Function: on], - off: [Function: off], - emit: [Function: emit] - } -} -afterall -goodbye launchWeb /Users/adam/Code/kokomoBay/dist/web/src/Rectangle/Rectangle.test.electron.mjs -launchNode /Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs -mark5 -end -connected! true -testResourceConfiguration { - "scheduled": true, - "name": "/Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs", - "ports": [], - "fs": "/Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.ts" -} -from child /dist/web/src/ClassicalComponent/test.html -launchWebSecondary /Users/adam/Code/kokomoBay/dist/web/src/ClassicalComponent/test.html -exiting gracefully with 4 failures. -page CDPPage { - eventsMap: Map(0) {}, - emitter: { - all: Map(0) {}, - on: [Function: on], - off: [Function: off], - emit: [Function: emit] - } -} -afterall -goodbye -page CDPPage { - eventsMap: Map(0) {}, - emitter: { - all: Map(0) {}, - on: [Function: on], - off: [Function: off], - emit: [Function: emit] - } -} -afterall -goodbye -page CDPPage { - eventsMap: Map(0) {}, - emitter: { - all: Map(0) {}, - on: [Function: on], - off: [Function: off], - emit: [Function: emit] - } -} -afterall -goodbye -page CDPPage { - eventsMap: Map(0) {}, - emitter: { - all: Map(0) {}, - on: [Function: on], - off: [Function: off], - emit: [Function: emit] - } -} -afterall -goodbye -launchNode /Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs -mark5 -end -connected! true -testResourceConfiguration { - "scheduled": true, - "name": "/Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs", - "ports": [], - "fs": "/Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.ts" -} -from child /dist/web/src/ClassicalComponent/test.html -launchWebSecondary /Users/adam/Code/kokomoBay/dist/web/src/ClassicalComponent/test.html -exiting gracefully with 4 failures. -page CDPPage { - eventsMap: Map(0) {}, - emitter: { - all: Map(0) {}, - on: [Function: on], - off: [Function: off], - emit: [Function: emit] - } -} -afterall -goodbye -page CDPPage { - eventsMap: Map(0) {}, - emitter: { - all: Map(0) {}, - on: [Function: on], - off: [Function: off], - emit: [Function: emit] - } -} -afterall -goodbye -page CDPPage { - eventsMap: Map(0) {}, - emitter: { - all: Map(0) {}, - on: [Function: on], - off: [Function: off], - emit: [Function: emit] - } -} -afterall -goodbye -page CDPPage { - eventsMap: Map(0) {}, - emitter: { - all: Map(0) {}, - on: [Function: on], - off: [Function: off], - emit: [Function: emit] - } -} -afterall -goodbye -launchNode /Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs -mark5 -end -connected! true -testResourceConfiguration { - "scheduled": true, - "name": "/Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs", - "ports": [], - "fs": "/Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.ts" -} -from child /dist/web/src/ClassicalComponent/test.html -launchWebSecondary /Users/adam/Code/kokomoBay/dist/web/src/ClassicalComponent/test.html -exiting gracefully with 4 failures. -goodbye -goodbye -goodbye -goodbye -launchNode /Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs +launchNode /Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs {"scheduled":true,"name":"/Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs","ports":[],"fs":"/Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.ts"} mark5 end connected! true @@ -262,3 +13,48 @@ testResourceConfiguration { from child /dist/web/src/ClassicalComponent/test.html launchWebSecondary /Users/adam/Code/kokomoBay/dist/web/src/ClassicalComponent/test.html exiting gracefully with 4 failures. +TBrowser { + browser: CDPBrowser { + eventsMap: Map(0) {}, + emitter: { + all: Map(0) {}, + on: [Function: on], + off: [Function: off], + emit: [Function: emit] + } + } +} +TBrowser { + browser: CDPBrowser { + eventsMap: Map(0) {}, + emitter: { + all: Map(0) {}, + on: [Function: on], + off: [Function: off], + emit: [Function: emit] + } + } +} +TBrowser { + browser: CDPBrowser { + eventsMap: Map(0) {}, + emitter: { + all: Map(0) {}, + on: [Function: on], + off: [Function: off], + emit: [Function: emit] + } + } +} +TBrowser { + browser: CDPBrowser { + eventsMap: Map(0) {}, + emitter: { + all: Map(0) {}, + on: [Function: on], + off: [Function: off], + emit: [Function: emit] + } + } +} +exit from child 1 diff --git a/dist/node/BrowserWebSocketTransport-LQQSK34V.mjs b/dist/node/BrowserWebSocketTransport-A3AE2ENO.mjs similarity index 98% rename from dist/node/BrowserWebSocketTransport-LQQSK34V.mjs rename to dist/node/BrowserWebSocketTransport-A3AE2ENO.mjs index 401d0c2f..9379ad30 100644 --- a/dist/node/BrowserWebSocketTransport-LQQSK34V.mjs +++ b/dist/node/BrowserWebSocketTransport-A3AE2ENO.mjs @@ -1,6 +1,6 @@ import { init_cjs_shim -} from "./chunk-O3BTYDMP.mjs"; +} from "./chunk-5E3747UH.mjs"; // node_modules/testeranto/node_modules/puppeteer-core/lib/esm/puppeteer/common/BrowserWebSocketTransport.js init_cjs_shim(); diff --git a/dist/node/NodeWebSocketTransport-6ZAOSCXB.mjs b/dist/node/NodeWebSocketTransport-U7SO2MFE.mjs similarity index 53% rename from dist/node/NodeWebSocketTransport-6ZAOSCXB.mjs rename to dist/node/NodeWebSocketTransport-U7SO2MFE.mjs index e3424046..b723f390 100644 --- a/dist/node/NodeWebSocketTransport-6ZAOSCXB.mjs +++ b/dist/node/NodeWebSocketTransport-U7SO2MFE.mjs @@ -1,7 +1,7 @@ import { NodeWebSocketTransport -} from "./chunk-3FVDXTD3.mjs"; -import "./chunk-O3BTYDMP.mjs"; +} from "./chunk-LV2LOXIY.mjs"; +import "./chunk-5E3747UH.mjs"; export { NodeWebSocketTransport }; diff --git a/dist/node/chunk-O3BTYDMP.mjs b/dist/node/chunk-5E3747UH.mjs similarity index 65% rename from dist/node/chunk-O3BTYDMP.mjs rename to dist/node/chunk-5E3747UH.mjs index c3051728..4e614bf4 100644 --- a/dist/node/chunk-O3BTYDMP.mjs +++ b/dist/node/chunk-5E3747UH.mjs @@ -4,6 +4,7 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __getProtoOf = Object.getPrototypeOf; var __hasOwnProp = Object.prototype.hasOwnProperty; +var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, { get: (a, b) => (typeof require !== "undefined" ? require : a)[b] }) : x)(function(x) { @@ -33,6 +34,32 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod )); +var __publicField = (obj, key, value) => { + __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); + return value; +}; +var __accessCheck = (obj, member, msg) => { + if (!member.has(obj)) + throw TypeError("Cannot " + msg); +}; +var __privateGet = (obj, member, getter) => { + __accessCheck(obj, member, "read from private field"); + return getter ? getter.call(obj) : member.get(obj); +}; +var __privateAdd = (obj, member, value) => { + if (member.has(obj)) + throw TypeError("Cannot add the same private member more than once"); + member instanceof WeakSet ? member.add(obj) : member.set(obj, value); +}; +var __privateSet = (obj, member, value, setter) => { + __accessCheck(obj, member, "write to private field"); + setter ? setter.call(obj, value) : member.set(obj, value); + return value; +}; +var __privateMethod = (obj, member, method) => { + __accessCheck(obj, member, "access private method"); + return method; +}; // node_modules/testeranto/dist/cjs-shim.js import { createRequire } from "node:module"; @@ -50,5 +77,10 @@ export { __require, __commonJS, __toESM, + __publicField, + __privateGet, + __privateAdd, + __privateSet, + __privateMethod, init_cjs_shim }; diff --git a/dist/node/chunk-OEJ6YU5Z.mjs b/dist/node/chunk-J3TUCTYO.mjs similarity index 99% rename from dist/node/chunk-OEJ6YU5Z.mjs rename to dist/node/chunk-J3TUCTYO.mjs index 85462c5a..2dd875de 100644 --- a/dist/node/chunk-OEJ6YU5Z.mjs +++ b/dist/node/chunk-J3TUCTYO.mjs @@ -2,7 +2,7 @@ import { __commonJS, __require, init_cjs_shim -} from "./chunk-O3BTYDMP.mjs"; +} from "./chunk-5E3747UH.mjs"; // node_modules/testeranto/node_modules/ms/index.js var require_ms = __commonJS({ diff --git a/dist/node/chunk-3FVDXTD3.mjs b/dist/node/chunk-LV2LOXIY.mjs similarity index 99% rename from dist/node/chunk-3FVDXTD3.mjs rename to dist/node/chunk-LV2LOXIY.mjs index 7b1956bb..2da33b2b 100644 --- a/dist/node/chunk-3FVDXTD3.mjs +++ b/dist/node/chunk-LV2LOXIY.mjs @@ -3,7 +3,7 @@ import { __require, __toESM, init_cjs_shim -} from "./chunk-O3BTYDMP.mjs"; +} from "./chunk-5E3747UH.mjs"; // node_modules/testeranto/node_modules/puppeteer-core/node_modules/ws/lib/stream.js var require_stream = __commonJS({ diff --git a/dist/node/node-ponyfill-NXKY2QFM.mjs b/dist/node/node-ponyfill-BYEL6RRA.mjs similarity index 99% rename from dist/node/node-ponyfill-NXKY2QFM.mjs rename to dist/node/node-ponyfill-BYEL6RRA.mjs index 5f10503a..55d4bc34 100644 --- a/dist/node/node-ponyfill-NXKY2QFM.mjs +++ b/dist/node/node-ponyfill-BYEL6RRA.mjs @@ -2,7 +2,7 @@ import { __commonJS, __require, init_cjs_shim -} from "./chunk-O3BTYDMP.mjs"; +} from "./chunk-5E3747UH.mjs"; // node_modules/testeranto/node_modules/webidl-conversions/lib/index.js var require_lib = __commonJS({ diff --git a/dist/node/src-5JYTMVPT.mjs b/dist/node/src-5JYTMVPT.mjs deleted file mode 100644 index f3dc14cc..00000000 --- a/dist/node/src-5JYTMVPT.mjs +++ /dev/null @@ -1,5 +0,0 @@ -import { - require_src -} from "./chunk-OEJ6YU5Z.mjs"; -import "./chunk-O3BTYDMP.mjs"; -export default require_src(); diff --git a/dist/node/src-N5TG6ZNM.mjs b/dist/node/src-N5TG6ZNM.mjs new file mode 100644 index 00000000..cee55d51 --- /dev/null +++ b/dist/node/src-N5TG6ZNM.mjs @@ -0,0 +1,5 @@ +import { + require_src +} from "./chunk-J3TUCTYO.mjs"; +import "./chunk-5E3747UH.mjs"; +export default require_src(); diff --git a/dist/node/src/Rectangle/Rectangle.test.node.mjs b/dist/node/src/Rectangle/Rectangle.test.node.mjs index 5b39f48f..85903253 100644 --- a/dist/node/src/Rectangle/Rectangle.test.node.mjs +++ b/dist/node/src/Rectangle/Rectangle.test.node.mjs @@ -1,15 +1,20 @@ import { require_src -} from "../../chunk-OEJ6YU5Z.mjs"; +} from "../../chunk-J3TUCTYO.mjs"; import { NodeWebSocketTransport -} from "../../chunk-3FVDXTD3.mjs"; +} from "../../chunk-LV2LOXIY.mjs"; import { __commonJS, + __privateAdd, + __privateGet, + __privateMethod, + __privateSet, + __publicField, __require, __toESM, init_cjs_shim -} from "../../chunk-O3BTYDMP.mjs"; +} from "../../chunk-5E3747UH.mjs"; // node_modules/testeranto/node_modules/wrappy/wrappy.js var require_wrappy = __commonJS({ @@ -2872,594 +2877,1437 @@ var require_brace_expansion = __commonJS({ } }); -// node_modules/testeranto/node_modules/minimatch/minimatch.js -var require_minimatch = __commonJS({ - "node_modules/testeranto/node_modules/minimatch/minimatch.js"(exports, module) { +// node_modules/testeranto/node_modules/minimatch/dist/commonjs/assert-valid-pattern.js +var require_assert_valid_pattern = __commonJS({ + "node_modules/testeranto/node_modules/minimatch/dist/commonjs/assert-valid-pattern.js"(exports) { + "use strict"; init_cjs_shim(); - module.exports = minimatch; - minimatch.Minimatch = Minimatch; - var path6 = function() { - try { - return __require("path"); - } catch (e) { + Object.defineProperty(exports, "__esModule", { value: true }); + exports.assertValidPattern = void 0; + var MAX_PATTERN_LENGTH = 1024 * 64; + var assertValidPattern = (pattern) => { + if (typeof pattern !== "string") { + throw new TypeError("invalid pattern"); } - }() || { - sep: "/" - }; - minimatch.sep = path6.sep; - var GLOBSTAR = minimatch.GLOBSTAR = Minimatch.GLOBSTAR = {}; - var expand = require_brace_expansion(); - var plTypes = { - "!": { open: "(?:(?!(?:", close: "))[^/]*?)" }, - "?": { open: "(?:", close: ")?" }, - "+": { open: "(?:", close: ")+" }, - "*": { open: "(?:", close: ")*" }, - "@": { open: "(?:", close: ")" } - }; - var qmark = "[^/]"; - var star = qmark + "*?"; - var twoStarDot = "(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?"; - var twoStarNoDot = "(?:(?!(?:\\/|^)\\.).)*?"; - var reSpecials = charSet("().*{}+?[]^$\\!"); - function charSet(s) { - return s.split("").reduce(function(set, c) { - set[c] = true; - return set; - }, {}); - } - var slashSplit = /\/+/; - minimatch.filter = filter; - function filter(pattern, options) { - options = options || {}; - return function(p, i, list) { - return minimatch(p, pattern, options); - }; - } - function ext(a, b) { - b = b || {}; - var t = {}; - Object.keys(a).forEach(function(k) { - t[k] = a[k]; - }); - Object.keys(b).forEach(function(k) { - t[k] = b[k]; - }); - return t; - } - minimatch.defaults = function(def) { - if (!def || typeof def !== "object" || !Object.keys(def).length) { - return minimatch; + if (pattern.length > MAX_PATTERN_LENGTH) { + throw new TypeError("pattern is too long"); } - var orig = minimatch; - var m = function minimatch2(p, pattern, options) { - return orig(p, pattern, ext(def, options)); - }; - m.Minimatch = function Minimatch2(pattern, options) { - return new orig.Minimatch(pattern, ext(def, options)); - }; - m.Minimatch.defaults = function defaults(options) { - return orig.defaults(ext(def, options)).Minimatch; - }; - m.filter = function filter2(pattern, options) { - return orig.filter(pattern, ext(def, options)); - }; - m.defaults = function defaults(options) { - return orig.defaults(ext(def, options)); - }; - m.makeRe = function makeRe2(pattern, options) { - return orig.makeRe(pattern, ext(def, options)); - }; - m.braceExpand = function braceExpand2(pattern, options) { - return orig.braceExpand(pattern, ext(def, options)); - }; - m.match = function(list, pattern, options) { - return orig.match(list, pattern, ext(def, options)); - }; - return m; - }; - Minimatch.defaults = function(def) { - return minimatch.defaults(def).Minimatch; }; - function minimatch(p, pattern, options) { - assertValidPattern(pattern); - if (!options) - options = {}; - if (!options.nocomment && pattern.charAt(0) === "#") { - return false; + exports.assertValidPattern = assertValidPattern; + } +}); + +// node_modules/testeranto/node_modules/minimatch/dist/commonjs/brace-expressions.js +var require_brace_expressions = __commonJS({ + "node_modules/testeranto/node_modules/minimatch/dist/commonjs/brace-expressions.js"(exports) { + "use strict"; + init_cjs_shim(); + Object.defineProperty(exports, "__esModule", { value: true }); + exports.parseClass = void 0; + var posixClasses = { + "[:alnum:]": ["\\p{L}\\p{Nl}\\p{Nd}", true], + "[:alpha:]": ["\\p{L}\\p{Nl}", true], + "[:ascii:]": ["\\x00-\\x7f", false], + "[:blank:]": ["\\p{Zs}\\t", true], + "[:cntrl:]": ["\\p{Cc}", true], + "[:digit:]": ["\\p{Nd}", true], + "[:graph:]": ["\\p{Z}\\p{C}", true, true], + "[:lower:]": ["\\p{Ll}", true], + "[:print:]": ["\\p{C}", true], + "[:punct:]": ["\\p{P}", true], + "[:space:]": ["\\p{Z}\\t\\r\\n\\v\\f", true], + "[:upper:]": ["\\p{Lu}", true], + "[:word:]": ["\\p{L}\\p{Nl}\\p{Nd}\\p{Pc}", true], + "[:xdigit:]": ["A-Fa-f0-9", false] + }; + var braceEscape = (s) => s.replace(/[[\]\\-]/g, "\\$&"); + var regexpEscape = (s) => s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); + var rangesToString = (ranges) => ranges.join(""); + var parseClass = (glob, position) => { + const pos = position; + if (glob.charAt(pos) !== "[") { + throw new Error("not in a brace expression"); + } + const ranges = []; + const negs = []; + let i = pos + 1; + let sawStart = false; + let uflag = false; + let escaping = false; + let negate = false; + let endPos = pos; + let rangeStart = ""; + WHILE: + while (i < glob.length) { + const c = glob.charAt(i); + if ((c === "!" || c === "^") && i === pos + 1) { + negate = true; + i++; + continue; + } + if (c === "]" && sawStart && !escaping) { + endPos = i + 1; + break; + } + sawStart = true; + if (c === "\\") { + if (!escaping) { + escaping = true; + i++; + continue; + } + } + if (c === "[" && !escaping) { + for (const [cls, [unip, u, neg]] of Object.entries(posixClasses)) { + if (glob.startsWith(cls, i)) { + if (rangeStart) { + return ["$.", false, glob.length - pos, true]; + } + i += cls.length; + if (neg) + negs.push(unip); + else + ranges.push(unip); + uflag = uflag || u; + continue WHILE; + } + } + } + escaping = false; + if (rangeStart) { + if (c > rangeStart) { + ranges.push(braceEscape(rangeStart) + "-" + braceEscape(c)); + } else if (c === rangeStart) { + ranges.push(braceEscape(c)); + } + rangeStart = ""; + i++; + continue; + } + if (glob.startsWith("-]", i + 1)) { + ranges.push(braceEscape(c + "-")); + i += 2; + continue; + } + if (glob.startsWith("-", i + 1)) { + rangeStart = c; + i += 2; + continue; + } + ranges.push(braceEscape(c)); + i++; + } + if (endPos < i) { + return ["", false, 0, false]; } - return new Minimatch(pattern, options).match(p); - } - function Minimatch(pattern, options) { - if (!(this instanceof Minimatch)) { - return new Minimatch(pattern, options); + if (!ranges.length && !negs.length) { + return ["$.", false, glob.length - pos, true]; } - assertValidPattern(pattern); - if (!options) - options = {}; - pattern = pattern.trim(); - if (!options.allowWindowsEscape && path6.sep !== "/") { - pattern = pattern.split(path6.sep).join("/"); - } - this.options = options; - this.set = []; - this.pattern = pattern; - this.regexp = null; - this.negate = false; - this.comment = false; - this.empty = false; - this.partial = !!options.partial; - this.make(); - } - Minimatch.prototype.debug = function() { - }; - Minimatch.prototype.make = make; - function make() { - var pattern = this.pattern; - var options = this.options; - if (!options.nocomment && pattern.charAt(0) === "#") { - this.comment = true; - return; + if (negs.length === 0 && ranges.length === 1 && /^\\?.$/.test(ranges[0]) && !negate) { + const r = ranges[0].length === 2 ? ranges[0].slice(-1) : ranges[0]; + return [regexpEscape(r), false, endPos - pos, false]; } - if (!pattern) { - this.empty = true; - return; + const sranges = "[" + (negate ? "^" : "") + rangesToString(ranges) + "]"; + const snegs = "[" + (negate ? "" : "^") + rangesToString(negs) + "]"; + const comb = ranges.length && negs.length ? "(" + sranges + "|" + snegs + ")" : ranges.length ? sranges : snegs; + return [comb, uflag, endPos - pos, true]; + }; + exports.parseClass = parseClass; + } +}); + +// node_modules/testeranto/node_modules/minimatch/dist/commonjs/unescape.js +var require_unescape = __commonJS({ + "node_modules/testeranto/node_modules/minimatch/dist/commonjs/unescape.js"(exports) { + "use strict"; + init_cjs_shim(); + Object.defineProperty(exports, "__esModule", { value: true }); + exports.unescape = void 0; + var unescape = (s, { windowsPathsNoEscape = false } = {}) => { + return windowsPathsNoEscape ? s.replace(/\[([^\/\\])\]/g, "$1") : s.replace(/((?!\\).|^)\[([^\/\\])\]/g, "$1$2").replace(/\\([^\/])/g, "$1"); + }; + exports.unescape = unescape; + } +}); + +// node_modules/testeranto/node_modules/minimatch/dist/commonjs/ast.js +var require_ast = __commonJS({ + "node_modules/testeranto/node_modules/minimatch/dist/commonjs/ast.js"(exports) { + "use strict"; + init_cjs_shim(); + Object.defineProperty(exports, "__esModule", { value: true }); + exports.AST = void 0; + var brace_expressions_js_1 = require_brace_expressions(); + var unescape_js_1 = require_unescape(); + var types = /* @__PURE__ */ new Set(["!", "?", "+", "*", "@"]); + var isExtglobType = (c) => types.has(c); + var startNoTraversal = "(?!(?:^|/)\\.\\.?(?:$|/))"; + var startNoDot = "(?!\\.)"; + var addPatternStart = /* @__PURE__ */ new Set(["[", "."]); + var justDots = /* @__PURE__ */ new Set(["..", "."]); + var reSpecials = new Set("().*{}+?[]^$\\!"); + var regExpEscape = (s) => s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); + var qmark = "[^/]"; + var star = qmark + "*?"; + var starNoEmpty = qmark + "+?"; + var _root, _hasMagic, _uflag, _parts, _parent, _parentIndex, _negs, _filledNegs, _options, _toString, _emptyExt, _fillNegs, fillNegs_fn, _parseAST, parseAST_fn, _partsToRegExp, partsToRegExp_fn, _parseGlob, parseGlob_fn; + var _AST = class { + constructor(type, parent, options = {}) { + __privateAdd(this, _fillNegs); + __privateAdd(this, _partsToRegExp); + __publicField(this, "type"); + __privateAdd(this, _root, void 0); + __privateAdd(this, _hasMagic, void 0); + __privateAdd(this, _uflag, false); + __privateAdd(this, _parts, []); + __privateAdd(this, _parent, void 0); + __privateAdd(this, _parentIndex, void 0); + __privateAdd(this, _negs, void 0); + __privateAdd(this, _filledNegs, false); + __privateAdd(this, _options, void 0); + __privateAdd(this, _toString, void 0); + // set to true if it's an extglob with no children + // (which really means one child of '') + __privateAdd(this, _emptyExt, false); + this.type = type; + if (type) + __privateSet(this, _hasMagic, true); + __privateSet(this, _parent, parent); + __privateSet(this, _root, __privateGet(this, _parent) ? __privateGet(__privateGet(this, _parent), _root) : this); + __privateSet(this, _options, __privateGet(this, _root) === this ? options : __privateGet(__privateGet(this, _root), _options)); + __privateSet(this, _negs, __privateGet(this, _root) === this ? [] : __privateGet(__privateGet(this, _root), _negs)); + if (type === "!" && !__privateGet(__privateGet(this, _root), _filledNegs)) + __privateGet(this, _negs).push(this); + __privateSet(this, _parentIndex, __privateGet(this, _parent) ? __privateGet(__privateGet(this, _parent), _parts).length : 0); + } + get hasMagic() { + if (__privateGet(this, _hasMagic) !== void 0) + return __privateGet(this, _hasMagic); + for (const p of __privateGet(this, _parts)) { + if (typeof p === "string") + continue; + if (p.type || p.hasMagic) + return __privateSet(this, _hasMagic, true); + } + return __privateGet(this, _hasMagic); } - this.parseNegate(); - var set = this.globSet = this.braceExpand(); - if (options.debug) - this.debug = function debug2() { - console.error.apply(console, arguments); - }; - this.debug(this.pattern, set); - set = this.globParts = set.map(function(s) { - return s.split(slashSplit); - }); - this.debug(this.pattern, set); - set = set.map(function(s, si, set2) { - return s.map(this.parse, this); - }, this); - this.debug(this.pattern, set); - set = set.filter(function(s) { - return s.indexOf(false) === -1; - }); - this.debug(this.pattern, set); - this.set = set; - } - Minimatch.prototype.parseNegate = parseNegate; - function parseNegate() { - var pattern = this.pattern; - var negate = false; - var options = this.options; - var negateOffset = 0; - if (options.nonegate) - return; - for (var i = 0, l = pattern.length; i < l && pattern.charAt(i) === "!"; i++) { - negate = !negate; - negateOffset++; - } - if (negateOffset) - this.pattern = pattern.substr(negateOffset); - this.negate = negate; - } - minimatch.braceExpand = function(pattern, options) { - return braceExpand(pattern, options); - }; - Minimatch.prototype.braceExpand = braceExpand; - function braceExpand(pattern, options) { - if (!options) { - if (this instanceof Minimatch) { - options = this.options; + // reconstructs the pattern + toString() { + if (__privateGet(this, _toString) !== void 0) + return __privateGet(this, _toString); + if (!this.type) { + return __privateSet(this, _toString, __privateGet(this, _parts).map((p) => String(p)).join("")); } else { - options = {}; + return __privateSet(this, _toString, this.type + "(" + __privateGet(this, _parts).map((p) => String(p)).join("|") + ")"); } } - pattern = typeof pattern === "undefined" ? this.pattern : pattern; - assertValidPattern(pattern); - if (options.nobrace || !/\{(?:(?!\{).)*\}/.test(pattern)) { - return [pattern]; + push(...parts) { + for (const p of parts) { + if (p === "") + continue; + if (typeof p !== "string" && !(p instanceof _AST && __privateGet(p, _parent) === this)) { + throw new Error("invalid part: " + p); + } + __privateGet(this, _parts).push(p); + } } - return expand(pattern); - } - var MAX_PATTERN_LENGTH = 1024 * 64; - var assertValidPattern = function(pattern) { - if (typeof pattern !== "string") { - throw new TypeError("invalid pattern"); + toJSON() { + const ret = this.type === null ? __privateGet(this, _parts).slice().map((p) => typeof p === "string" ? p : p.toJSON()) : [this.type, ...__privateGet(this, _parts).map((p) => p.toJSON())]; + if (this.isStart() && !this.type) + ret.unshift([]); + if (this.isEnd() && (this === __privateGet(this, _root) || __privateGet(__privateGet(this, _root), _filledNegs) && __privateGet(this, _parent)?.type === "!")) { + ret.push({}); + } + return ret; } - if (pattern.length > MAX_PATTERN_LENGTH) { - throw new TypeError("pattern is too long"); + isStart() { + if (__privateGet(this, _root) === this) + return true; + if (!__privateGet(this, _parent)?.isStart()) + return false; + if (__privateGet(this, _parentIndex) === 0) + return true; + const p = __privateGet(this, _parent); + for (let i = 0; i < __privateGet(this, _parentIndex); i++) { + const pp = __privateGet(p, _parts)[i]; + if (!(pp instanceof _AST && pp.type === "!")) { + return false; + } + } + return true; } - }; - Minimatch.prototype.parse = parse2; - var SUBPARSE = {}; - function parse2(pattern, isSub) { - assertValidPattern(pattern); - var options = this.options; - if (pattern === "**") { - if (!options.noglobstar) - return GLOBSTAR; + isEnd() { + if (__privateGet(this, _root) === this) + return true; + if (__privateGet(this, _parent)?.type === "!") + return true; + if (!__privateGet(this, _parent)?.isEnd()) + return false; + if (!this.type) + return __privateGet(this, _parent)?.isEnd(); + const pl = __privateGet(this, _parent) ? __privateGet(__privateGet(this, _parent), _parts).length : 0; + return __privateGet(this, _parentIndex) === pl - 1; + } + copyIn(part) { + if (typeof part === "string") + this.push(part); else - pattern = "*"; + this.push(part.clone(this)); } - if (pattern === "") - return ""; - var re = ""; - var hasMagic = !!options.nocase; - var escaping = false; - var patternListStack = []; - var negativeLists = []; - var stateChar; - var inClass = false; - var reClassStart = -1; - var classStart = -1; - var patternStart = pattern.charAt(0) === "." ? "" : options.dot ? "(?!(?:^|\\/)\\.{1,2}(?:$|\\/))" : "(?!\\.)"; - var self2 = this; - function clearStateChar() { - if (stateChar) { - switch (stateChar) { - case "*": - re += star; - hasMagic = true; - break; - case "?": - re += qmark; - hasMagic = true; - break; - default: - re += "\\" + stateChar; - break; - } - self2.debug("clearStateChar %j %j", stateChar, re); - stateChar = false; + clone(parent) { + const c = new _AST(this.type, parent); + for (const p of __privateGet(this, _parts)) { + c.copyIn(p); } + return c; } - for (var i = 0, len = pattern.length, c; i < len && (c = pattern.charAt(i)); i++) { - this.debug("%s %s %s %j", pattern, i, re, c); - if (escaping && reSpecials[c]) { - re += "\\" + c; - escaping = false; - continue; - } - switch (c) { - case "/": { - return false; - } - case "\\": - clearStateChar(); - escaping = true; - continue; - case "?": - case "*": - case "+": - case "@": - case "!": - this.debug("%s %s %s %j <-- stateChar", pattern, i, re, c); - if (inClass) { - this.debug(" in class"); - if (c === "!" && i === classStart + 1) - c = "^"; - re += c; - continue; - } - self2.debug("call clearStateChar %j", stateChar); - clearStateChar(); - stateChar = c; - if (options.noext) - clearStateChar(); - continue; - case "(": - if (inClass) { - re += "("; - continue; - } - if (!stateChar) { - re += "\\("; - continue; - } - patternListStack.push({ - type: stateChar, - start: i - 1, - reStart: re.length, - open: plTypes[stateChar].open, - close: plTypes[stateChar].close - }); - re += stateChar === "!" ? "(?:(?!(?:" : "(?:"; - this.debug("plType %j %j", stateChar, re); - stateChar = false; - continue; - case ")": - if (inClass || !patternListStack.length) { - re += "\\)"; - continue; + static fromGlob(pattern, options = {}) { + var _a2; + const ast = new _AST(null, void 0, options); + __privateMethod(_a2 = _AST, _parseAST, parseAST_fn).call(_a2, pattern, ast, 0, options); + return ast; + } + // returns the regular expression if there's magic, or the unescaped + // string if not. + toMMPattern() { + if (this !== __privateGet(this, _root)) + return __privateGet(this, _root).toMMPattern(); + const glob = this.toString(); + const [re, body, hasMagic, uflag] = this.toRegExpSource(); + const anyMagic = hasMagic || __privateGet(this, _hasMagic) || __privateGet(this, _options).nocase && !__privateGet(this, _options).nocaseMagicOnly && glob.toUpperCase() !== glob.toLowerCase(); + if (!anyMagic) { + return body; + } + const flags = (__privateGet(this, _options).nocase ? "i" : "") + (uflag ? "u" : ""); + return Object.assign(new RegExp(`^${re}$`, flags), { + _src: re, + _glob: glob + }); + } + get options() { + return __privateGet(this, _options); + } + // returns the string match, the regexp source, whether there's magic + // in the regexp (so a regular expression is required) and whether or + // not the uflag is needed for the regular expression (for posix classes) + // TODO: instead of injecting the start/end at this point, just return + // the BODY of the regexp, along with the start/end portions suitable + // for binding the start/end in either a joined full-path makeRe context + // (where we bind to (^|/), or a standalone matchPart context (where + // we bind to ^, and not /). Otherwise slashes get duped! + // + // In part-matching mode, the start is: + // - if not isStart: nothing + // - if traversal possible, but not allowed: ^(?!\.\.?$) + // - if dots allowed or not possible: ^ + // - if dots possible and not allowed: ^(?!\.) + // end is: + // - if not isEnd(): nothing + // - else: $ + // + // In full-path matching mode, we put the slash at the START of the + // pattern, so start is: + // - if first pattern: same as part-matching mode + // - if not isStart(): nothing + // - if traversal possible, but not allowed: /(?!\.\.?(?:$|/)) + // - if dots allowed or not possible: / + // - if dots possible and not allowed: /(?!\.) + // end is: + // - if last pattern, same as part-matching mode + // - else nothing + // + // Always put the (?:$|/) on negated tails, though, because that has to be + // there to bind the end of the negated pattern portion, and it's easier to + // just stick it in now rather than try to inject it later in the middle of + // the pattern. + // + // We can just always return the same end, and leave it up to the caller + // to know whether it's going to be used joined or in parts. + // And, if the start is adjusted slightly, can do the same there: + // - if not isStart: nothing + // - if traversal possible, but not allowed: (?:/|^)(?!\.\.?$) + // - if dots allowed or not possible: (?:/|^) + // - if dots possible and not allowed: (?:/|^)(?!\.) + // + // But it's better to have a simpler binding without a conditional, for + // performance, so probably better to return both start options. + // + // Then the caller just ignores the end if it's not the first pattern, + // and the start always gets applied. + // + // But that's always going to be $ if it's the ending pattern, or nothing, + // so the caller can just attach $ at the end of the pattern when building. + // + // So the todo is: + // - better detect what kind of start is needed + // - return both flavors of starting pattern + // - attach $ at the end of the pattern when creating the actual RegExp + // + // Ah, but wait, no, that all only applies to the root when the first pattern + // is not an extglob. If the first pattern IS an extglob, then we need all + // that dot prevention biz to live in the extglob portions, because eg + // +(*|.x*) can match .xy but not .yx. + // + // So, return the two flavors if it's #root and the first child is not an + // AST, otherwise leave it to the child AST to handle it, and there, + // use the (?:^|/) style of start binding. + // + // Even simplified further: + // - Since the start for a join is eg /(?!\.) and the start for a part + // is ^(?!\.), we can just prepend (?!\.) to the pattern (either root + // or start or whatever) and prepend ^ or / at the Regexp construction. + toRegExpSource(allowDot) { + const dot = allowDot ?? !!__privateGet(this, _options).dot; + if (__privateGet(this, _root) === this) + __privateMethod(this, _fillNegs, fillNegs_fn).call(this); + if (!this.type) { + const noEmpty = this.isStart() && this.isEnd(); + const src = __privateGet(this, _parts).map((p) => { + var _a2; + const [re, _, hasMagic, uflag] = typeof p === "string" ? __privateMethod(_a2 = _AST, _parseGlob, parseGlob_fn).call(_a2, p, __privateGet(this, _hasMagic), noEmpty) : p.toRegExpSource(allowDot); + __privateSet(this, _hasMagic, __privateGet(this, _hasMagic) || hasMagic); + __privateSet(this, _uflag, __privateGet(this, _uflag) || uflag); + return re; + }).join(""); + let start2 = ""; + if (this.isStart()) { + if (typeof __privateGet(this, _parts)[0] === "string") { + const dotTravAllowed = __privateGet(this, _parts).length === 1 && justDots.has(__privateGet(this, _parts)[0]); + if (!dotTravAllowed) { + const aps = addPatternStart; + const needNoTrav = ( + // dots are allowed, and the pattern starts with [ or . + dot && aps.has(src.charAt(0)) || // the pattern starts with \., and then [ or . + src.startsWith("\\.") && aps.has(src.charAt(2)) || // the pattern starts with \.\., and then [ or . + src.startsWith("\\.\\.") && aps.has(src.charAt(4)) + ); + const needNoDot = !dot && !allowDot && aps.has(src.charAt(0)); + start2 = needNoTrav ? startNoTraversal : needNoDot ? startNoDot : ""; + } } - clearStateChar(); - hasMagic = true; - var pl = patternListStack.pop(); - re += pl.close; - if (pl.type === "!") { - negativeLists.push(pl); + } + let end = ""; + if (this.isEnd() && __privateGet(__privateGet(this, _root), _filledNegs) && __privateGet(this, _parent)?.type === "!") { + end = "(?:$|\\/)"; + } + const final2 = start2 + src + end; + return [ + final2, + (0, unescape_js_1.unescape)(src), + __privateSet(this, _hasMagic, !!__privateGet(this, _hasMagic)), + __privateGet(this, _uflag) + ]; + } + const repeated = this.type === "*" || this.type === "+"; + const start = this.type === "!" ? "(?:(?!(?:" : "(?:"; + let body = __privateMethod(this, _partsToRegExp, partsToRegExp_fn).call(this, dot); + if (this.isStart() && this.isEnd() && !body && this.type !== "!") { + const s = this.toString(); + __privateSet(this, _parts, [s]); + this.type = null; + __privateSet(this, _hasMagic, void 0); + return [s, (0, unescape_js_1.unescape)(this.toString()), false, false]; + } + let bodyDotAllowed = !repeated || allowDot || dot || !startNoDot ? "" : __privateMethod(this, _partsToRegExp, partsToRegExp_fn).call(this, true); + if (bodyDotAllowed === body) { + bodyDotAllowed = ""; + } + if (bodyDotAllowed) { + body = `(?:${body})(?:${bodyDotAllowed})*?`; + } + let final = ""; + if (this.type === "!" && __privateGet(this, _emptyExt)) { + final = (this.isStart() && !dot ? startNoDot : "") + starNoEmpty; + } else { + const close = this.type === "!" ? ( + // !() must match something,but !(x) can match '' + "))" + (this.isStart() && !dot && !allowDot ? startNoDot : "") + star + ")" + ) : this.type === "@" ? ")" : this.type === "?" ? ")?" : this.type === "+" && bodyDotAllowed ? ")" : this.type === "*" && bodyDotAllowed ? `)?` : `)${this.type}`; + final = start + body + close; + } + return [ + final, + (0, unescape_js_1.unescape)(body), + __privateSet(this, _hasMagic, !!__privateGet(this, _hasMagic)), + __privateGet(this, _uflag) + ]; + } + }; + var AST = _AST; + _root = new WeakMap(); + _hasMagic = new WeakMap(); + _uflag = new WeakMap(); + _parts = new WeakMap(); + _parent = new WeakMap(); + _parentIndex = new WeakMap(); + _negs = new WeakMap(); + _filledNegs = new WeakMap(); + _options = new WeakMap(); + _toString = new WeakMap(); + _emptyExt = new WeakMap(); + _fillNegs = new WeakSet(); + fillNegs_fn = function() { + if (this !== __privateGet(this, _root)) + throw new Error("should only call on root"); + if (__privateGet(this, _filledNegs)) + return this; + this.toString(); + __privateSet(this, _filledNegs, true); + let n; + while (n = __privateGet(this, _negs).pop()) { + if (n.type !== "!") + continue; + let p = n; + let pp = __privateGet(p, _parent); + while (pp) { + for (let i = __privateGet(p, _parentIndex) + 1; !pp.type && i < __privateGet(pp, _parts).length; i++) { + for (const part of __privateGet(n, _parts)) { + if (typeof part === "string") { + throw new Error("string part in extglob AST??"); + } + part.copyIn(__privateGet(pp, _parts)[i]); } - pl.reEnd = re.length; + } + p = pp; + pp = __privateGet(p, _parent); + } + } + return this; + }; + _parseAST = new WeakSet(); + parseAST_fn = function(str, ast, pos, opt) { + var _a2, _b; + let escaping = false; + let inBrace = false; + let braceStart = -1; + let braceNeg = false; + if (ast.type === null) { + let i2 = pos; + let acc2 = ""; + while (i2 < str.length) { + const c = str.charAt(i2++); + if (escaping || c === "\\") { + escaping = !escaping; + acc2 += c; continue; - case "|": - if (inClass || !patternListStack.length || escaping) { - re += "\\|"; - escaping = false; - continue; + } + if (inBrace) { + if (i2 === braceStart + 1) { + if (c === "^" || c === "!") { + braceNeg = true; + } + } else if (c === "]" && !(i2 === braceStart + 2 && braceNeg)) { + inBrace = false; } - clearStateChar(); - re += "|"; + acc2 += c; continue; - case "[": - clearStateChar(); - if (inClass) { - re += "\\" + c; - continue; - } - inClass = true; - classStart = i; - reClassStart = re.length; - re += c; + } else if (c === "[") { + inBrace = true; + braceStart = i2; + braceNeg = false; + acc2 += c; continue; - case "]": - if (i === classStart + 1 || !inClass) { - re += "\\" + c; - escaping = false; - continue; - } - var cs = pattern.substring(classStart + 1, i); - try { - RegExp("[" + cs + "]"); - } catch (er) { - var sp = this.parse(cs, SUBPARSE); - re = re.substr(0, reClassStart) + "\\[" + sp[0] + "\\]"; - hasMagic = hasMagic || sp[1]; - inClass = false; - continue; - } - hasMagic = true; - inClass = false; - re += c; + } + if (!opt.noext && isExtglobType(c) && str.charAt(i2) === "(") { + ast.push(acc2); + acc2 = ""; + const ext = new _AST(c, ast); + i2 = __privateMethod(_a2 = _AST, _parseAST, parseAST_fn).call(_a2, str, ext, i2, opt); + ast.push(ext); continue; - default: - clearStateChar(); - if (escaping) { - escaping = false; - } else if (reSpecials[c] && !(c === "^" && inClass)) { - re += "\\"; + } + acc2 += c; + } + ast.push(acc2); + return i2; + } + let i = pos + 1; + let part = new _AST(null, ast); + const parts = []; + let acc = ""; + while (i < str.length) { + const c = str.charAt(i++); + if (escaping || c === "\\") { + escaping = !escaping; + acc += c; + continue; + } + if (inBrace) { + if (i === braceStart + 1) { + if (c === "^" || c === "!") { + braceNeg = true; } - re += c; + } else if (c === "]" && !(i === braceStart + 2 && braceNeg)) { + inBrace = false; + } + acc += c; + continue; + } else if (c === "[") { + inBrace = true; + braceStart = i; + braceNeg = false; + acc += c; + continue; } - } - if (inClass) { - cs = pattern.substr(classStart + 1); - sp = this.parse(cs, SUBPARSE); - re = re.substr(0, reClassStart) + "\\[" + sp[0]; - hasMagic = hasMagic || sp[1]; - } - for (pl = patternListStack.pop(); pl; pl = patternListStack.pop()) { - var tail = re.slice(pl.reStart + pl.open.length); - this.debug("setting tail", re, pl); - tail = tail.replace(/((?:\\{2}){0,64})(\\?)\|/g, function(_, $1, $2) { - if (!$2) { - $2 = "\\"; + if (isExtglobType(c) && str.charAt(i) === "(") { + part.push(acc); + acc = ""; + const ext = new _AST(c, part); + part.push(ext); + i = __privateMethod(_b = _AST, _parseAST, parseAST_fn).call(_b, str, ext, i, opt); + continue; + } + if (c === "|") { + part.push(acc); + acc = ""; + parts.push(part); + part = new _AST(null, ast); + continue; + } + if (c === ")") { + if (acc === "" && __privateGet(ast, _parts).length === 0) { + __privateSet(ast, _emptyExt, true); } - return $1 + $1 + $2 + "|"; - }); - this.debug("tail=%j\n %s", tail, tail, pl, re); - var t = pl.type === "*" ? star : pl.type === "?" ? qmark : "\\" + pl.type; - hasMagic = true; - re = re.slice(0, pl.reStart) + t + "\\(" + tail; - } - clearStateChar(); - if (escaping) { - re += "\\\\"; - } - var addPatternStart = false; - switch (re.charAt(0)) { - case "[": - case ".": - case "(": - addPatternStart = true; - } - for (var n = negativeLists.length - 1; n > -1; n--) { - var nl = negativeLists[n]; - var nlBefore = re.slice(0, nl.reStart); - var nlFirst = re.slice(nl.reStart, nl.reEnd - 8); - var nlLast = re.slice(nl.reEnd - 8, nl.reEnd); - var nlAfter = re.slice(nl.reEnd); - nlLast += nlAfter; - var openParensBefore = nlBefore.split("(").length - 1; - var cleanAfter = nlAfter; - for (i = 0; i < openParensBefore; i++) { - cleanAfter = cleanAfter.replace(/\)[+*?]?/, ""); - } - nlAfter = cleanAfter; - var dollar = ""; - if (nlAfter === "" && isSub !== SUBPARSE) { - dollar = "$"; - } - var newRe = nlBefore + nlFirst + nlAfter + dollar + nlLast; - re = newRe; - } - if (re !== "" && hasMagic) { - re = "(?=.)" + re; - } - if (addPatternStart) { - re = patternStart + re; - } - if (isSub === SUBPARSE) { - return [re, hasMagic]; - } - if (!hasMagic) { - return globUnescape(pattern); - } - var flags = options.nocase ? "i" : ""; - try { - var regExp = new RegExp("^" + re + "$", flags); - } catch (er) { - return new RegExp("$."); + part.push(acc); + acc = ""; + ast.push(...parts, part); + return i; + } + acc += c; } - regExp._glob = pattern; - regExp._src = re; - return regExp; - } - minimatch.makeRe = function(pattern, options) { - return new Minimatch(pattern, options || {}).makeRe(); + ast.type = null; + __privateSet(ast, _hasMagic, void 0); + __privateSet(ast, _parts, [str.substring(pos - 1)]); + return i; }; - Minimatch.prototype.makeRe = makeRe; - function makeRe() { - if (this.regexp || this.regexp === false) - return this.regexp; - var set = this.set; - if (!set.length) { - this.regexp = false; - return this.regexp; + _partsToRegExp = new WeakSet(); + partsToRegExp_fn = function(dot) { + return __privateGet(this, _parts).map((p) => { + if (typeof p === "string") { + throw new Error("string type in extglob ast??"); + } + const [re, _, _hasMagic2, uflag] = p.toRegExpSource(dot); + __privateSet(this, _uflag, __privateGet(this, _uflag) || uflag); + return re; + }).filter((p) => !(this.isStart() && this.isEnd()) || !!p).join("|"); + }; + _parseGlob = new WeakSet(); + parseGlob_fn = function(glob, hasMagic, noEmpty = false) { + let escaping = false; + let re = ""; + let uflag = false; + for (let i = 0; i < glob.length; i++) { + const c = glob.charAt(i); + if (escaping) { + escaping = false; + re += (reSpecials.has(c) ? "\\" : "") + c; + continue; + } + if (c === "\\") { + if (i === glob.length - 1) { + re += "\\\\"; + } else { + escaping = true; + } + continue; + } + if (c === "[") { + const [src, needUflag, consumed, magic] = (0, brace_expressions_js_1.parseClass)(glob, i); + if (consumed) { + re += src; + uflag = uflag || needUflag; + i += consumed - 1; + hasMagic = hasMagic || magic; + continue; + } + } + if (c === "*") { + if (noEmpty && glob === "*") + re += starNoEmpty; + else + re += star; + hasMagic = true; + continue; + } + if (c === "?") { + re += qmark; + hasMagic = true; + continue; + } + re += regExpEscape(c); } - var options = this.options; - var twoStar = options.noglobstar ? star : options.dot ? twoStarDot : twoStarNoDot; - var flags = options.nocase ? "i" : ""; - var re = set.map(function(pattern) { - return pattern.map(function(p) { - return p === GLOBSTAR ? twoStar : typeof p === "string" ? regExpEscape(p) : p._src; - }).join("\\/"); - }).join("|"); - re = "^(?:" + re + ")$"; - if (this.negate) - re = "^(?!" + re + ").*$"; - try { - this.regexp = new RegExp(re, flags); - } catch (ex) { - this.regexp = false; + return [re, (0, unescape_js_1.unescape)(glob), !!hasMagic, uflag]; + }; + __privateAdd(AST, _parseAST); + __privateAdd(AST, _parseGlob); + exports.AST = AST; + } +}); + +// node_modules/testeranto/node_modules/minimatch/dist/commonjs/escape.js +var require_escape = __commonJS({ + "node_modules/testeranto/node_modules/minimatch/dist/commonjs/escape.js"(exports) { + "use strict"; + init_cjs_shim(); + Object.defineProperty(exports, "__esModule", { value: true }); + exports.escape = void 0; + var escape = (s, { windowsPathsNoEscape = false } = {}) => { + return windowsPathsNoEscape ? s.replace(/[?*()[\]]/g, "[$&]") : s.replace(/[?*()[\]\\]/g, "\\$&"); + }; + exports.escape = escape; + } +}); + +// node_modules/testeranto/node_modules/minimatch/dist/commonjs/index.js +var require_commonjs = __commonJS({ + "node_modules/testeranto/node_modules/minimatch/dist/commonjs/index.js"(exports) { + "use strict"; + init_cjs_shim(); + var __importDefault = exports && exports.__importDefault || function(mod) { + return mod && mod.__esModule ? mod : { "default": mod }; + }; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.unescape = exports.escape = exports.AST = exports.Minimatch = exports.match = exports.makeRe = exports.braceExpand = exports.defaults = exports.filter = exports.GLOBSTAR = exports.sep = exports.minimatch = void 0; + var brace_expansion_1 = __importDefault(require_brace_expansion()); + var assert_valid_pattern_js_1 = require_assert_valid_pattern(); + var ast_js_1 = require_ast(); + var escape_js_1 = require_escape(); + var unescape_js_1 = require_unescape(); + var minimatch = (p, pattern, options = {}) => { + (0, assert_valid_pattern_js_1.assertValidPattern)(pattern); + if (!options.nocomment && pattern.charAt(0) === "#") { + return false; } - return this.regexp; - } - minimatch.match = function(list, pattern, options) { - options = options || {}; - var mm = new Minimatch(pattern, options); - list = list.filter(function(f) { - return mm.match(f); + return new Minimatch(pattern, options).match(p); + }; + exports.minimatch = minimatch; + var starDotExtRE = /^\*+([^+@!?\*\[\(]*)$/; + var starDotExtTest = (ext2) => (f) => !f.startsWith(".") && f.endsWith(ext2); + var starDotExtTestDot = (ext2) => (f) => f.endsWith(ext2); + var starDotExtTestNocase = (ext2) => { + ext2 = ext2.toLowerCase(); + return (f) => !f.startsWith(".") && f.toLowerCase().endsWith(ext2); + }; + var starDotExtTestNocaseDot = (ext2) => { + ext2 = ext2.toLowerCase(); + return (f) => f.toLowerCase().endsWith(ext2); + }; + var starDotStarRE = /^\*+\.\*+$/; + var starDotStarTest = (f) => !f.startsWith(".") && f.includes("."); + var starDotStarTestDot = (f) => f !== "." && f !== ".." && f.includes("."); + var dotStarRE = /^\.\*+$/; + var dotStarTest = (f) => f !== "." && f !== ".." && f.startsWith("."); + var starRE = /^\*+$/; + var starTest = (f) => f.length !== 0 && !f.startsWith("."); + var starTestDot = (f) => f.length !== 0 && f !== "." && f !== ".."; + var qmarksRE = /^\?+([^+@!?\*\[\(]*)?$/; + var qmarksTestNocase = ([$0, ext2 = ""]) => { + const noext = qmarksTestNoExt([$0]); + if (!ext2) + return noext; + ext2 = ext2.toLowerCase(); + return (f) => noext(f) && f.toLowerCase().endsWith(ext2); + }; + var qmarksTestNocaseDot = ([$0, ext2 = ""]) => { + const noext = qmarksTestNoExtDot([$0]); + if (!ext2) + return noext; + ext2 = ext2.toLowerCase(); + return (f) => noext(f) && f.toLowerCase().endsWith(ext2); + }; + var qmarksTestDot = ([$0, ext2 = ""]) => { + const noext = qmarksTestNoExtDot([$0]); + return !ext2 ? noext : (f) => noext(f) && f.endsWith(ext2); + }; + var qmarksTest = ([$0, ext2 = ""]) => { + const noext = qmarksTestNoExt([$0]); + return !ext2 ? noext : (f) => noext(f) && f.endsWith(ext2); + }; + var qmarksTestNoExt = ([$0]) => { + const len = $0.length; + return (f) => f.length === len && !f.startsWith("."); + }; + var qmarksTestNoExtDot = ([$0]) => { + const len = $0.length; + return (f) => f.length === len && f !== "." && f !== ".."; + }; + var defaultPlatform = typeof process === "object" && process ? typeof process.env === "object" && process.env && process.env.__MINIMATCH_TESTING_PLATFORM__ || process.platform : "posix"; + var path6 = { + win32: { sep: "\\" }, + posix: { sep: "/" } + }; + exports.sep = defaultPlatform === "win32" ? path6.win32.sep : path6.posix.sep; + exports.minimatch.sep = exports.sep; + exports.GLOBSTAR = Symbol("globstar **"); + exports.minimatch.GLOBSTAR = exports.GLOBSTAR; + var qmark = "[^/]"; + var star = qmark + "*?"; + var twoStarDot = "(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?"; + var twoStarNoDot = "(?:(?!(?:\\/|^)\\.).)*?"; + var filter = (pattern, options = {}) => (p) => (0, exports.minimatch)(p, pattern, options); + exports.filter = filter; + exports.minimatch.filter = exports.filter; + var ext = (a, b = {}) => Object.assign({}, a, b); + var defaults = (def) => { + if (!def || typeof def !== "object" || !Object.keys(def).length) { + return exports.minimatch; + } + const orig = exports.minimatch; + const m = (p, pattern, options = {}) => orig(p, pattern, ext(def, options)); + return Object.assign(m, { + Minimatch: class Minimatch extends orig.Minimatch { + constructor(pattern, options = {}) { + super(pattern, ext(def, options)); + } + static defaults(options) { + return orig.defaults(ext(def, options)).Minimatch; + } + }, + AST: class AST extends orig.AST { + /* c8 ignore start */ + constructor(type, parent, options = {}) { + super(type, parent, ext(def, options)); + } + /* c8 ignore stop */ + static fromGlob(pattern, options = {}) { + return orig.AST.fromGlob(pattern, ext(def, options)); + } + }, + unescape: (s, options = {}) => orig.unescape(s, ext(def, options)), + escape: (s, options = {}) => orig.escape(s, ext(def, options)), + filter: (pattern, options = {}) => orig.filter(pattern, ext(def, options)), + defaults: (options) => orig.defaults(ext(def, options)), + makeRe: (pattern, options = {}) => orig.makeRe(pattern, ext(def, options)), + braceExpand: (pattern, options = {}) => orig.braceExpand(pattern, ext(def, options)), + match: (list, pattern, options = {}) => orig.match(list, pattern, ext(def, options)), + sep: orig.sep, + GLOBSTAR: exports.GLOBSTAR }); + }; + exports.defaults = defaults; + exports.minimatch.defaults = exports.defaults; + var braceExpand = (pattern, options = {}) => { + (0, assert_valid_pattern_js_1.assertValidPattern)(pattern); + if (options.nobrace || !/\{(?:(?!\{).)*\}/.test(pattern)) { + return [pattern]; + } + return (0, brace_expansion_1.default)(pattern); + }; + exports.braceExpand = braceExpand; + exports.minimatch.braceExpand = exports.braceExpand; + var makeRe = (pattern, options = {}) => new Minimatch(pattern, options).makeRe(); + exports.makeRe = makeRe; + exports.minimatch.makeRe = exports.makeRe; + var match = (list, pattern, options = {}) => { + const mm = new Minimatch(pattern, options); + list = list.filter((f) => mm.match(f)); if (mm.options.nonull && !list.length) { list.push(pattern); } return list; }; - Minimatch.prototype.match = function match(f, partial) { - if (typeof partial === "undefined") - partial = this.partial; - this.debug("match", f, this.pattern); - if (this.comment) + exports.match = match; + exports.minimatch.match = exports.match; + var globMagic = /[?*]|[+@!]\(.*?\)|\[|\]/; + var regExpEscape = (s) => s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); + var Minimatch = class { + options; + set; + pattern; + windowsPathsNoEscape; + nonegate; + negate; + comment; + empty; + preserveMultipleSlashes; + partial; + globSet; + globParts; + nocase; + isWindows; + platform; + windowsNoMagicRoot; + regexp; + constructor(pattern, options = {}) { + (0, assert_valid_pattern_js_1.assertValidPattern)(pattern); + options = options || {}; + this.options = options; + this.pattern = pattern; + this.platform = options.platform || defaultPlatform; + this.isWindows = this.platform === "win32"; + this.windowsPathsNoEscape = !!options.windowsPathsNoEscape || options.allowWindowsEscape === false; + if (this.windowsPathsNoEscape) { + this.pattern = this.pattern.replace(/\\/g, "/"); + } + this.preserveMultipleSlashes = !!options.preserveMultipleSlashes; + this.regexp = null; + this.negate = false; + this.nonegate = !!options.nonegate; + this.comment = false; + this.empty = false; + this.partial = !!options.partial; + this.nocase = !!this.options.nocase; + this.windowsNoMagicRoot = options.windowsNoMagicRoot !== void 0 ? options.windowsNoMagicRoot : !!(this.isWindows && this.nocase); + this.globSet = []; + this.globParts = []; + this.set = []; + this.make(); + } + hasMagic() { + if (this.options.magicalBraces && this.set.length > 1) { + return true; + } + for (const pattern of this.set) { + for (const part of pattern) { + if (typeof part !== "string") + return true; + } + } return false; - if (this.empty) - return f === ""; - if (f === "/" && partial) - return true; - var options = this.options; - if (path6.sep !== "/") { - f = f.split(path6.sep).join("/"); - } - f = f.split(slashSplit); - this.debug(this.pattern, "split", f); - var set = this.set; - this.debug(this.pattern, "set", set); - var filename; - var i; - for (i = f.length - 1; i >= 0; i--) { - filename = f[i]; - if (filename) - break; } - for (i = 0; i < set.length; i++) { - var pattern = set[i]; - var file = f; - if (options.matchBase && pattern.length === 1) { - file = [filename]; + debug(..._) { + } + make() { + const pattern = this.pattern; + const options = this.options; + if (!options.nocomment && pattern.charAt(0) === "#") { + this.comment = true; + return; } - var hit = this.matchOne(file, pattern, partial); - if (hit) { - if (options.flipNegate) - return true; - return !this.negate; + if (!pattern) { + this.empty = true; + return; } + this.parseNegate(); + this.globSet = [...new Set(this.braceExpand())]; + if (options.debug) { + this.debug = (...args) => console.error(...args); + } + this.debug(this.pattern, this.globSet); + const rawGlobParts = this.globSet.map((s) => this.slashSplit(s)); + this.globParts = this.preprocess(rawGlobParts); + this.debug(this.pattern, this.globParts); + let set = this.globParts.map((s, _, __) => { + if (this.isWindows && this.windowsNoMagicRoot) { + const isUNC = s[0] === "" && s[1] === "" && (s[2] === "?" || !globMagic.test(s[2])) && !globMagic.test(s[3]); + const isDrive = /^[a-z]:/i.test(s[0]); + if (isUNC) { + return [...s.slice(0, 4), ...s.slice(4).map((ss) => this.parse(ss))]; + } else if (isDrive) { + return [s[0], ...s.slice(1).map((ss) => this.parse(ss))]; + } + } + return s.map((ss) => this.parse(ss)); + }); + this.debug(this.pattern, set); + this.set = set.filter((s) => s.indexOf(false) === -1); + if (this.isWindows) { + for (let i = 0; i < this.set.length; i++) { + const p = this.set[i]; + if (p[0] === "" && p[1] === "" && this.globParts[i][2] === "?" && typeof p[3] === "string" && /^[a-z]:$/i.test(p[3])) { + p[2] = "?"; + } + } + } + this.debug(this.pattern, this.set); + } + // various transforms to equivalent pattern sets that are + // faster to process in a filesystem walk. The goal is to + // eliminate what we can, and push all ** patterns as far + // to the right as possible, even if it increases the number + // of patterns that we have to process. + preprocess(globParts) { + if (this.options.noglobstar) { + for (let i = 0; i < globParts.length; i++) { + for (let j = 0; j < globParts[i].length; j++) { + if (globParts[i][j] === "**") { + globParts[i][j] = "*"; + } + } + } + } + const { optimizationLevel = 1 } = this.options; + if (optimizationLevel >= 2) { + globParts = this.firstPhasePreProcess(globParts); + globParts = this.secondPhasePreProcess(globParts); + } else if (optimizationLevel >= 1) { + globParts = this.levelOneOptimize(globParts); + } else { + globParts = this.adjascentGlobstarOptimize(globParts); + } + return globParts; + } + // just get rid of adjascent ** portions + adjascentGlobstarOptimize(globParts) { + return globParts.map((parts) => { + let gs = -1; + while (-1 !== (gs = parts.indexOf("**", gs + 1))) { + let i = gs; + while (parts[i + 1] === "**") { + i++; + } + if (i !== gs) { + parts.splice(gs, i - gs); + } + } + return parts; + }); } - if (options.flipNegate) - return false; - return this.negate; - }; - Minimatch.prototype.matchOne = function(file, pattern, partial) { - var options = this.options; - this.debug( - "matchOne", - { "this": this, file, pattern } - ); - this.debug("matchOne", file.length, pattern.length); - for (var fi = 0, pi = 0, fl = file.length, pl = pattern.length; fi < fl && pi < pl; fi++, pi++) { - this.debug("matchOne loop"); - var p = pattern[pi]; - var f = file[fi]; - this.debug(pattern, p, f); - if (p === false) - return false; - if (p === GLOBSTAR) { - this.debug("GLOBSTAR", [pattern, p, f]); - var fr = fi; - var pr = pi + 1; - if (pr === pl) { - this.debug("** at the end"); - for (; fi < fl; fi++) { - if (file[fi] === "." || file[fi] === ".." || !options.dot && file[fi].charAt(0) === ".") - return false; + // get rid of adjascent ** and resolve .. portions + levelOneOptimize(globParts) { + return globParts.map((parts) => { + parts = parts.reduce((set, part) => { + const prev = set[set.length - 1]; + if (part === "**" && prev === "**") { + return set; + } + if (part === "..") { + if (prev && prev !== ".." && prev !== "." && prev !== "**") { + set.pop(); + return set; + } + } + set.push(part); + return set; + }, []); + return parts.length === 0 ? [""] : parts; + }); + } + levelTwoFileOptimize(parts) { + if (!Array.isArray(parts)) { + parts = this.slashSplit(parts); + } + let didSomething = false; + do { + didSomething = false; + if (!this.preserveMultipleSlashes) { + for (let i = 1; i < parts.length - 1; i++) { + const p = parts[i]; + if (i === 1 && p === "" && parts[0] === "") + continue; + if (p === "." || p === "") { + didSomething = true; + parts.splice(i, 1); + i--; + } + } + if (parts[0] === "." && parts.length === 2 && (parts[1] === "." || parts[1] === "")) { + didSomething = true; + parts.pop(); } - return true; } - while (fr < fl) { - var swallowee = file[fr]; - this.debug("\nglobstar while", file, fr, pattern, pr, swallowee); - if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) { - this.debug("globstar found match!", fr, fl, swallowee); - return true; - } else { - if (swallowee === "." || swallowee === ".." || !options.dot && swallowee.charAt(0) === ".") { - this.debug("dot detected!", file, fr, pattern, pr); - break; + let dd = 0; + while (-1 !== (dd = parts.indexOf("..", dd + 1))) { + const p = parts[dd - 1]; + if (p && p !== "." && p !== ".." && p !== "**") { + didSomething = true; + parts.splice(dd - 1, 2); + dd -= 2; + } + } + } while (didSomething); + return parts.length === 0 ? [""] : parts; + } + // First phase: single-pattern processing + //
 is 1 or more portions
+      //  is 1 or more portions
+      // 

is any portion other than ., .., '', or ** + // is . or '' + // + // **/.. is *brutal* for filesystem walking performance, because + // it effectively resets the recursive walk each time it occurs, + // and ** cannot be reduced out by a .. pattern part like a regexp + // or most strings (other than .., ., and '') can be. + // + //

/**/../

/

/ -> {

/../

/

/,

/**/

/

/} + //

// -> 
/
+      // 
/

/../ ->

/
+      // **/**/ -> **/
+      //
+      // **/*/ -> */**/ <== not valid because ** doesn't follow
+      // this WOULD be allowed if ** did follow symlinks, or * didn't
+      firstPhasePreProcess(globParts) {
+        let didSomething = false;
+        do {
+          didSomething = false;
+          for (let parts of globParts) {
+            let gs = -1;
+            while (-1 !== (gs = parts.indexOf("**", gs + 1))) {
+              let gss = gs;
+              while (parts[gss + 1] === "**") {
+                gss++;
+              }
+              if (gss > gs) {
+                parts.splice(gs + 1, gss - gs);
+              }
+              let next = parts[gs + 1];
+              const p = parts[gs + 2];
+              const p2 = parts[gs + 3];
+              if (next !== "..")
+                continue;
+              if (!p || p === "." || p === ".." || !p2 || p2 === "." || p2 === "..") {
+                continue;
+              }
+              didSomething = true;
+              parts.splice(gs, 1);
+              const other = parts.slice(0);
+              other[gs] = "**";
+              globParts.push(other);
+              gs--;
+            }
+            if (!this.preserveMultipleSlashes) {
+              for (let i = 1; i < parts.length - 1; i++) {
+                const p = parts[i];
+                if (i === 1 && p === "" && parts[0] === "")
+                  continue;
+                if (p === "." || p === "") {
+                  didSomething = true;
+                  parts.splice(i, 1);
+                  i--;
+                }
+              }
+              if (parts[0] === "." && parts.length === 2 && (parts[1] === "." || parts[1] === "")) {
+                didSomething = true;
+                parts.pop();
+              }
+            }
+            let dd = 0;
+            while (-1 !== (dd = parts.indexOf("..", dd + 1))) {
+              const p = parts[dd - 1];
+              if (p && p !== "." && p !== ".." && p !== "**") {
+                didSomething = true;
+                const needDot = dd === 1 && parts[dd + 1] === "**";
+                const splin = needDot ? ["."] : [];
+                parts.splice(dd - 1, 2, ...splin);
+                if (parts.length === 0)
+                  parts.push("");
+                dd -= 2;
+              }
+            }
+          }
+        } while (didSomething);
+        return globParts;
+      }
+      // second phase: multi-pattern dedupes
+      // {
/*/,
/

/} ->

/*/
+      // {
/,
/} -> 
/
+      // {
/**/,
/} -> 
/**/
+      //
+      // {
/**/,
/**/

/} ->

/**/
+      // ^-- not valid because ** doens't follow symlinks
+      secondPhasePreProcess(globParts) {
+        for (let i = 0; i < globParts.length - 1; i++) {
+          for (let j = i + 1; j < globParts.length; j++) {
+            const matched = this.partsMatch(globParts[i], globParts[j], !this.preserveMultipleSlashes);
+            if (matched) {
+              globParts[i] = [];
+              globParts[j] = matched;
+              break;
+            }
+          }
+        }
+        return globParts.filter((gs) => gs.length);
+      }
+      partsMatch(a, b, emptyGSMatch = false) {
+        let ai = 0;
+        let bi = 0;
+        let result = [];
+        let which = "";
+        while (ai < a.length && bi < b.length) {
+          if (a[ai] === b[bi]) {
+            result.push(which === "b" ? b[bi] : a[ai]);
+            ai++;
+            bi++;
+          } else if (emptyGSMatch && a[ai] === "**" && b[bi] === a[ai + 1]) {
+            result.push(a[ai]);
+            ai++;
+          } else if (emptyGSMatch && b[bi] === "**" && a[ai] === b[bi + 1]) {
+            result.push(b[bi]);
+            bi++;
+          } else if (a[ai] === "*" && b[bi] && (this.options.dot || !b[bi].startsWith(".")) && b[bi] !== "**") {
+            if (which === "b")
+              return false;
+            which = "a";
+            result.push(a[ai]);
+            ai++;
+            bi++;
+          } else if (b[bi] === "*" && a[ai] && (this.options.dot || !a[ai].startsWith(".")) && a[ai] !== "**") {
+            if (which === "a")
+              return false;
+            which = "b";
+            result.push(b[bi]);
+            ai++;
+            bi++;
+          } else {
+            return false;
+          }
+        }
+        return a.length === b.length && result;
+      }
+      parseNegate() {
+        if (this.nonegate)
+          return;
+        const pattern = this.pattern;
+        let negate = false;
+        let negateOffset = 0;
+        for (let i = 0; i < pattern.length && pattern.charAt(i) === "!"; i++) {
+          negate = !negate;
+          negateOffset++;
+        }
+        if (negateOffset)
+          this.pattern = pattern.slice(negateOffset);
+        this.negate = negate;
+      }
+      // set partial to true to test if, for example,
+      // "/a/b" matches the start of "/*/b/*/d"
+      // Partial means, if you run out of file before you run
+      // out of pattern, then that's fine, as long as all
+      // the parts match.
+      matchOne(file, pattern, partial = false) {
+        const options = this.options;
+        if (this.isWindows) {
+          const fileDrive = typeof file[0] === "string" && /^[a-z]:$/i.test(file[0]);
+          const fileUNC = !fileDrive && file[0] === "" && file[1] === "" && file[2] === "?" && /^[a-z]:$/i.test(file[3]);
+          const patternDrive = typeof pattern[0] === "string" && /^[a-z]:$/i.test(pattern[0]);
+          const patternUNC = !patternDrive && pattern[0] === "" && pattern[1] === "" && pattern[2] === "?" && typeof pattern[3] === "string" && /^[a-z]:$/i.test(pattern[3]);
+          const fdi = fileUNC ? 3 : fileDrive ? 0 : void 0;
+          const pdi = patternUNC ? 3 : patternDrive ? 0 : void 0;
+          if (typeof fdi === "number" && typeof pdi === "number") {
+            const [fd, pd] = [file[fdi], pattern[pdi]];
+            if (fd.toLowerCase() === pd.toLowerCase()) {
+              pattern[pdi] = fd;
+              if (pdi > fdi) {
+                pattern = pattern.slice(pdi);
+              } else if (fdi > pdi) {
+                file = file.slice(fdi);
               }
-              this.debug("globstar swallow a segment, and continue");
-              fr++;
             }
           }
-          if (partial) {
-            this.debug("\n>>> no match, partial?", file, fr, pattern, pr);
-            if (fr === fl)
+        }
+        const { optimizationLevel = 1 } = this.options;
+        if (optimizationLevel >= 2) {
+          file = this.levelTwoFileOptimize(file);
+        }
+        this.debug("matchOne", this, { file, pattern });
+        this.debug("matchOne", file.length, pattern.length);
+        for (var fi = 0, pi = 0, fl = file.length, pl = pattern.length; fi < fl && pi < pl; fi++, pi++) {
+          this.debug("matchOne loop");
+          var p = pattern[pi];
+          var f = file[fi];
+          this.debug(pattern, p, f);
+          if (p === false) {
+            return false;
+          }
+          if (p === exports.GLOBSTAR) {
+            this.debug("GLOBSTAR", [pattern, p, f]);
+            var fr = fi;
+            var pr = pi + 1;
+            if (pr === pl) {
+              this.debug("** at the end");
+              for (; fi < fl; fi++) {
+                if (file[fi] === "." || file[fi] === ".." || !options.dot && file[fi].charAt(0) === ".")
+                  return false;
+              }
               return true;
+            }
+            while (fr < fl) {
+              var swallowee = file[fr];
+              this.debug("\nglobstar while", file, fr, pattern, pr, swallowee);
+              if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) {
+                this.debug("globstar found match!", fr, fl, swallowee);
+                return true;
+              } else {
+                if (swallowee === "." || swallowee === ".." || !options.dot && swallowee.charAt(0) === ".") {
+                  this.debug("dot detected!", file, fr, pattern, pr);
+                  break;
+                }
+                this.debug("globstar swallow a segment, and continue");
+                fr++;
+              }
+            }
+            if (partial) {
+              this.debug("\n>>> no match, partial?", file, fr, pattern, pr);
+              if (fr === fl) {
+                return true;
+              }
+            }
+            return false;
           }
-          return false;
+          let hit;
+          if (typeof p === "string") {
+            hit = f === p;
+            this.debug("string match", p, f, hit);
+          } else {
+            hit = p.test(f);
+            this.debug("pattern match", p, f, hit);
+          }
+          if (!hit)
+            return false;
         }
-        var hit;
-        if (typeof p === "string") {
-          hit = f === p;
-          this.debug("string match", p, f, hit);
+        if (fi === fl && pi === pl) {
+          return true;
+        } else if (fi === fl) {
+          return partial;
+        } else if (pi === pl) {
+          return fi === fl - 1 && file[fi] === "";
         } else {
-          hit = f.match(p);
-          this.debug("pattern match", p, f, hit);
+          throw new Error("wtf?");
         }
-        if (!hit)
-          return false;
       }
-      if (fi === fl && pi === pl) {
-        return true;
-      } else if (fi === fl) {
-        return partial;
-      } else if (pi === pl) {
-        return fi === fl - 1 && file[fi] === "";
+      braceExpand() {
+        return (0, exports.braceExpand)(this.pattern, this.options);
       }
-      throw new Error("wtf?");
-    };
-    function globUnescape(s) {
-      return s.replace(/\\(.)/g, "$1");
-    }
-    function regExpEscape(s) {
-      return s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
-    }
+      parse(pattern) {
+        (0, assert_valid_pattern_js_1.assertValidPattern)(pattern);
+        const options = this.options;
+        if (pattern === "**")
+          return exports.GLOBSTAR;
+        if (pattern === "")
+          return "";
+        let m;
+        let fastTest = null;
+        if (m = pattern.match(starRE)) {
+          fastTest = options.dot ? starTestDot : starTest;
+        } else if (m = pattern.match(starDotExtRE)) {
+          fastTest = (options.nocase ? options.dot ? starDotExtTestNocaseDot : starDotExtTestNocase : options.dot ? starDotExtTestDot : starDotExtTest)(m[1]);
+        } else if (m = pattern.match(qmarksRE)) {
+          fastTest = (options.nocase ? options.dot ? qmarksTestNocaseDot : qmarksTestNocase : options.dot ? qmarksTestDot : qmarksTest)(m);
+        } else if (m = pattern.match(starDotStarRE)) {
+          fastTest = options.dot ? starDotStarTestDot : starDotStarTest;
+        } else if (m = pattern.match(dotStarRE)) {
+          fastTest = dotStarTest;
+        }
+        const re = ast_js_1.AST.fromGlob(pattern, this.options).toMMPattern();
+        if (fastTest && typeof re === "object") {
+          Reflect.defineProperty(re, "test", { value: fastTest });
+        }
+        return re;
+      }
+      makeRe() {
+        if (this.regexp || this.regexp === false)
+          return this.regexp;
+        const set = this.set;
+        if (!set.length) {
+          this.regexp = false;
+          return this.regexp;
+        }
+        const options = this.options;
+        const twoStar = options.noglobstar ? star : options.dot ? twoStarDot : twoStarNoDot;
+        const flags = new Set(options.nocase ? ["i"] : []);
+        let re = set.map((pattern) => {
+          const pp = pattern.map((p) => {
+            if (p instanceof RegExp) {
+              for (const f of p.flags.split(""))
+                flags.add(f);
+            }
+            return typeof p === "string" ? regExpEscape(p) : p === exports.GLOBSTAR ? exports.GLOBSTAR : p._src;
+          });
+          pp.forEach((p, i) => {
+            const next = pp[i + 1];
+            const prev = pp[i - 1];
+            if (p !== exports.GLOBSTAR || prev === exports.GLOBSTAR) {
+              return;
+            }
+            if (prev === void 0) {
+              if (next !== void 0 && next !== exports.GLOBSTAR) {
+                pp[i + 1] = "(?:\\/|" + twoStar + "\\/)?" + next;
+              } else {
+                pp[i] = twoStar;
+              }
+            } else if (next === void 0) {
+              pp[i - 1] = prev + "(?:\\/|" + twoStar + ")?";
+            } else if (next !== exports.GLOBSTAR) {
+              pp[i - 1] = prev + "(?:\\/|\\/" + twoStar + "\\/)" + next;
+              pp[i + 1] = exports.GLOBSTAR;
+            }
+          });
+          return pp.filter((p) => p !== exports.GLOBSTAR).join("/");
+        }).join("|");
+        const [open, close] = set.length > 1 ? ["(?:", ")"] : ["", ""];
+        re = "^" + open + re + close + "$";
+        if (this.negate)
+          re = "^(?!" + re + ").+$";
+        try {
+          this.regexp = new RegExp(re, [...flags].join(""));
+        } catch (ex) {
+          this.regexp = false;
+        }
+        return this.regexp;
+      }
+      slashSplit(p) {
+        if (this.preserveMultipleSlashes) {
+          return p.split("/");
+        } else if (this.isWindows && /^\/\/[^\/]+/.test(p)) {
+          return ["", ...p.split(/\/+/)];
+        } else {
+          return p.split(/\/+/);
+        }
+      }
+      match(f, partial = this.partial) {
+        this.debug("match", f, this.pattern);
+        if (this.comment) {
+          return false;
+        }
+        if (this.empty) {
+          return f === "";
+        }
+        if (f === "/" && partial) {
+          return true;
+        }
+        const options = this.options;
+        if (this.isWindows) {
+          f = f.split("\\").join("/");
+        }
+        const ff = this.slashSplit(f);
+        this.debug(this.pattern, "split", ff);
+        const set = this.set;
+        this.debug(this.pattern, "set", set);
+        let filename = ff[ff.length - 1];
+        if (!filename) {
+          for (let i = ff.length - 2; !filename && i >= 0; i--) {
+            filename = ff[i];
+          }
+        }
+        for (let i = 0; i < set.length; i++) {
+          const pattern = set[i];
+          let file = ff;
+          if (options.matchBase && pattern.length === 1) {
+            file = [filename];
+          }
+          const hit = this.matchOne(file, pattern, partial);
+          if (hit) {
+            if (options.flipNegate) {
+              return true;
+            }
+            return !this.negate;
+          }
+        }
+        if (options.flipNegate) {
+          return false;
+        }
+        return this.negate;
+      }
+      static defaults(def) {
+        return exports.minimatch.defaults(def).Minimatch;
+      }
+    };
+    exports.Minimatch = Minimatch;
+    var ast_js_2 = require_ast();
+    Object.defineProperty(exports, "AST", { enumerable: true, get: function() {
+      return ast_js_2.AST;
+    } });
+    var escape_js_2 = require_escape();
+    Object.defineProperty(exports, "escape", { enumerable: true, get: function() {
+      return escape_js_2.escape;
+    } });
+    var unescape_js_2 = require_unescape();
+    Object.defineProperty(exports, "unescape", { enumerable: true, get: function() {
+      return unescape_js_2.unescape;
+    } });
+    exports.minimatch.AST = ast_js_1.AST;
+    exports.minimatch.Minimatch = Minimatch;
+    exports.minimatch.escape = escape_js_1.escape;
+    exports.minimatch.unescape = unescape_js_1.unescape;
   }
 });
 
@@ -3549,7 +4397,7 @@ var require_common = __commonJS({
     }
     var fs5 = __require("fs");
     var path6 = __require("path");
-    var minimatch = require_minimatch();
+    var minimatch = require_commonjs();
     var isAbsolute = require_path_is_absolute();
     var Minimatch = minimatch.Minimatch;
     function alphasort(a, b) {
@@ -3735,7 +4583,7 @@ var require_sync = __commonJS({
     module.exports = globSync;
     globSync.GlobSync = GlobSync;
     var rp = require_fs();
-    var minimatch = require_minimatch();
+    var minimatch = require_commonjs();
     var Minimatch = minimatch.Minimatch;
     var Glob = require_glob().Glob;
     var util3 = __require("util");
@@ -4135,7 +4983,7 @@ var require_glob = __commonJS({
     init_cjs_shim();
     module.exports = glob;
     var rp = require_fs();
-    var minimatch = require_minimatch();
+    var minimatch = require_commonjs();
     var Minimatch = minimatch.Minimatch;
     var inherits = require_inherits();
     var EE = __require("events").EventEmitter;
@@ -14873,6 +15721,21 @@ var NodeWriter = {
   }
 };
 
+// node_modules/testeranto/dist/module/Types.js
+init_cjs_shim();
+var TBrowser = class {
+  constructor(browser2) {
+    this.browser = browser2;
+  }
+  pages() {
+    return new Promise(async (res, rej) => {
+      res((await this.browser.pages()).map((p) => {
+        return p;
+      }));
+    });
+  }
+};
+
 // node_modules/testeranto/node_modules/puppeteer-core/lib/esm/puppeteer/puppeteer-core.js
 init_cjs_shim();
 
@@ -16386,7 +17249,7 @@ init_cjs_shim();
 var debugModule = null;
 async function importDebug() {
   if (!debugModule) {
-    debugModule = (await import("../../src-5JYTMVPT.mjs")).default;
+    debugModule = (await import("../../src-N5TG6ZNM.mjs")).default;
   }
   return debugModule;
 }
@@ -28488,12 +29351,12 @@ _CDPBrowserContext_connection = /* @__PURE__ */ new WeakMap(), _CDPBrowserContex
 // node_modules/testeranto/node_modules/puppeteer-core/lib/esm/puppeteer/common/fetch.js
 init_cjs_shim();
 var getFetch = async () => {
-  return globalThis.fetch || (await import("../../node-ponyfill-NXKY2QFM.mjs")).fetch;
+  return globalThis.fetch || (await import("../../node-ponyfill-BYEL6RRA.mjs")).fetch;
 };
 
 // node_modules/testeranto/node_modules/puppeteer-core/lib/esm/puppeteer/common/BrowserConnector.js
 var getWebSocketTransportClass = async () => {
-  return isNode ? (await import("../../NodeWebSocketTransport-6ZAOSCXB.mjs")).NodeWebSocketTransport : (await import("../../BrowserWebSocketTransport-LQQSK34V.mjs")).BrowserWebSocketTransport;
+  return isNode ? (await import("../../NodeWebSocketTransport-U7SO2MFE.mjs")).NodeWebSocketTransport : (await import("../../BrowserWebSocketTransport-A3AE2ENO.mjs")).BrowserWebSocketTransport;
 };
 async function _connectToCDPBrowser(options) {
   const { browserWSEndpoint, browserURL, ignoreHTTPSErrors = false, defaultViewport = { width: 800, height: 600 }, transport, slowMo = 0, targetFilter, _isPageTarget: isPageTarget } = options;
@@ -30599,7 +31462,7 @@ var browser = await readJson("2999").then(async (json) => {
 });
 var NodeTesteranto = class extends Testeranto {
   constructor(input, testSpecification, testImplementation, testResourceRequirement, testInterface2) {
-    super(input, testSpecification, testImplementation, testResourceRequirement, NodeWriter, testInterface2, browser);
+    super(input, testSpecification, testImplementation, testResourceRequirement, NodeWriter, testInterface2, new TBrowser(browser));
     const t = this.testJobs[0];
     const testResourceArg = process.argv[2] || `{}`;
     try {
@@ -30742,7 +31605,7 @@ var RectangleTesterantoBaseTestSpecification = (Suite, Given, When, Then, Check)
         "test3": Given.Default(
           [`hello`],
           [When.setHeight(5), When.setWidth(55)],
-          [Then.area(55)]
+          [Then.area(5)]
         )
       },
       []
@@ -30768,10 +31631,13 @@ var RectangleTesterantoBasePrototype = Rectangle_default.prototype;
 
 // src/Rectangle/Rectangle.test.node.ts
 var testInterface = {
+  assertThis: (x) => {
+  },
   afterAll: async (store, artificer, browser2) => {
     const page = (await browser2.pages()).filter((x) => x.url() === "file:///Users/adam/Code/kokomoBay/dist/web/src/ClassicalComponent/test.html")[0];
-    page.screenshot({
-      path: "dist/afterall.jpg"
+    console.log(browser2);
+    await page.screenshot({
+      path: "hello98.jpg"
     });
   }
 };
diff --git a/dist/node/src/Rectangle/Rectangle.test.node.ts/results.json b/dist/node/src/Rectangle/Rectangle.test.node.ts/results.json
index 9e20d4cd..526d23fa 100644
--- a/dist/node/src/Rectangle/Rectangle.test.node.ts/results.json
+++ b/dist/node/src/Rectangle/Rectangle.test.node.ts/results.json
@@ -22,7 +22,7 @@
       ],
       "error": [
         {},
-        "TypeError: Cannot read properties of undefined (reading 'setWidth')\n    at file:///Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs:30696:51\n    at Object.andWhen (file:///Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs:30632:12)\n    at When.andWhen (file:///Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs:14801:40)\n    at When.test (file:///Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs:14590:25)\n    at Given.give (file:///Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs:14556:24)\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async Testeranto.givenThat.run (file:///Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs:14505:22)\n    at async file:///Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs:14669:14\n    at async Object.receiveTestResourceConfig (file:///Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs:14697:29)\n    at async NodeTesteranto.receiveTestResourceConfig (file:///Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs:30613:47)"
+        "TypeError: Cannot read properties of undefined (reading 'setWidth')\n    at file:///Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs:31559:51\n    at Object.andWhen (file:///Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs:31495:12)\n    at When.andWhen (file:///Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs:15649:40)\n    at When.test (file:///Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs:15438:25)\n    at Given.give (file:///Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs:15404:24)\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async Testeranto.givenThat.run (file:///Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs:15353:22)\n    at async file:///Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs:15517:14\n    at async Object.receiveTestResourceConfig (file:///Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs:15545:29)\n    at async NodeTesteranto.receiveTestResourceConfig (file:///Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs:31476:47)"
       ],
       "features": [
         "hello"
@@ -55,7 +55,7 @@
       ],
       "error": [
         {},
-        "TypeError: Cannot read properties of undefined (reading 'setWidth')\n    at file:///Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs:30696:51\n    at Object.andWhen (file:///Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs:30632:12)\n    at When.andWhen (file:///Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs:14801:40)\n    at When.test (file:///Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs:14590:25)\n    at Given.give (file:///Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs:14556:24)\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async Testeranto.givenThat.run (file:///Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs:14505:22)\n    at async file:///Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs:14669:14\n    at async Object.receiveTestResourceConfig (file:///Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs:14697:29)\n    at async NodeTesteranto.receiveTestResourceConfig (file:///Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs:30613:47)"
+        "TypeError: Cannot read properties of undefined (reading 'setWidth')\n    at file:///Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs:31559:51\n    at Object.andWhen (file:///Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs:31495:12)\n    at When.andWhen (file:///Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs:15649:40)\n    at When.test (file:///Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs:15438:25)\n    at Given.give (file:///Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs:15404:24)\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async Testeranto.givenThat.run (file:///Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs:15353:22)\n    at async file:///Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs:15517:14\n    at async Object.receiveTestResourceConfig (file:///Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs:15545:29)\n    at async NodeTesteranto.receiveTestResourceConfig (file:///Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs:31476:47)"
       ],
       "features": [
         "hello"
@@ -79,7 +79,7 @@
       ],
       "error": [
         {},
-        "TypeError: Cannot read properties of undefined (reading 'setHeight')\n    at file:///Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs:30697:53\n    at Object.andWhen (file:///Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs:30632:12)\n    at When.andWhen (file:///Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs:14801:40)\n    at When.test (file:///Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs:14590:25)\n    at Given.give (file:///Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs:14556:24)\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async Testeranto.givenThat.run (file:///Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs:14505:22)\n    at async file:///Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs:14669:14\n    at async Object.receiveTestResourceConfig (file:///Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs:14697:29)\n    at async NodeTesteranto.receiveTestResourceConfig (file:///Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs:30613:47)"
+        "TypeError: Cannot read properties of undefined (reading 'setHeight')\n    at file:///Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs:31560:53\n    at Object.andWhen (file:///Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs:31495:12)\n    at When.andWhen (file:///Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs:15649:40)\n    at When.test (file:///Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs:15438:25)\n    at Given.give (file:///Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs:15404:24)\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async Testeranto.givenThat.run (file:///Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs:15353:22)\n    at async file:///Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs:15517:14\n    at async Object.receiveTestResourceConfig (file:///Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs:15545:29)\n    at async NodeTesteranto.receiveTestResourceConfig (file:///Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs:31476:47)"
       ],
       "features": [
         "hello"
@@ -98,12 +98,12 @@
       ],
       "thens": [
         {
-          "name": "area: 55"
+          "name": "area: 5"
         }
       ],
       "error": [
         {},
-        "TypeError: Cannot read properties of undefined (reading 'setHeight')\n    at file:///Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs:30697:53\n    at Object.andWhen (file:///Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs:30632:12)\n    at When.andWhen (file:///Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs:14801:40)\n    at When.test (file:///Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs:14590:25)\n    at Given.give (file:///Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs:14556:24)\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async Testeranto.givenThat.run (file:///Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs:14505:22)\n    at async file:///Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs:14669:14\n    at async Object.receiveTestResourceConfig (file:///Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs:14697:29)\n    at async NodeTesteranto.receiveTestResourceConfig (file:///Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs:30613:47)"
+        "TypeError: Cannot read properties of undefined (reading 'setHeight')\n    at file:///Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs:31560:53\n    at Object.andWhen (file:///Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs:31495:12)\n    at When.andWhen (file:///Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs:15649:40)\n    at When.test (file:///Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs:15438:25)\n    at Given.give (file:///Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs:15404:24)\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async Testeranto.givenThat.run (file:///Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs:15353:22)\n    at async file:///Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs:15517:14\n    at async Object.receiveTestResourceConfig (file:///Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs:15545:29)\n    at async NodeTesteranto.receiveTestResourceConfig (file:///Users/adam/Code/kokomoBay/dist/node/src/Rectangle/Rectangle.test.node.mjs:31476:47)"
       ],
       "features": [
         "hello"
diff --git a/dist/report.html b/dist/report.html
index a99f81ab..ac1e13e6 100644
--- a/dist/report.html
+++ b/dist/report.html
@@ -8,7 +8,7 @@
   kokomoBay - testeranto
   
   
-  
+