twd-js 1.8.0 → 1.8.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +59 -145
- package/dist/bundled.es.js +1698 -1698
- package/dist/constants/version.d.ts +1 -1
- package/dist/index.cjs.js +35 -36
- package/dist/index.es.js +1269 -1270
- package/dist/mock-sw.js +1 -1
- package/dist/runner.cjs.js +1 -1
- package/dist/runner.es.js +1 -1
- package/dist/ui/ClosedSidebar.d.ts +1 -1
- package/dist/ui/Icons/BaseIcon.d.ts +1 -1
- package/dist/ui/Icons/ChevronDown.d.ts +1 -1
- package/dist/ui/Icons/ChevronRight.d.ts +1 -1
- package/dist/ui/Icons/Loader.d.ts +1 -1
- package/dist/ui/Icons/MockRequestIcon.d.ts +1 -1
- package/dist/ui/Icons/Play.d.ts +1 -1
- package/dist/ui/LogItem.d.ts +1 -1
- package/dist/ui/MockRulesButton.d.ts +1 -1
- package/dist/ui/MockedComponent.d.ts +1 -1
- package/dist/ui/SearchInput.d.ts +1 -1
- package/dist/ui/SkipOnlyName.d.ts +1 -1
- package/dist/ui/TWDSidebar.d.ts +1 -1
- package/dist/ui/TestList.d.ts +1 -1
- package/dist/ui/TestListItem.d.ts +1 -1
- package/dist/ui/utils/styles.d.ts +1 -1
- package/dist/ui.cjs.js +1 -1
- package/dist/ui.d.ts +1 -1
- package/dist/ui.es.js +1 -1
- package/dist/vite-plugin.cjs.js +1 -1
- package/package.json +18 -6
- /package/dist/{componentMocks-BFMYYH2e.js → componentMocks-B83slL5w.js} +0 -0
- /package/dist/{componentMocks-CwMyWCu5.cjs → componentMocks-BklBTS5K.cjs} +0 -0
- /package/dist/{runner-BmEWmCyd.js → runner-8uKtUFnx.js} +0 -0
- /package/dist/{runner-Dr_mUWED.cjs → runner-ClPPXm0J.cjs} +0 -0
package/dist/mock-sw.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
(function(){var d=t=>{try{return new RegExp(t),!0}catch{return!1}},f=new Set(["js","mjs","cjs","ts","tsx","jsx","mts","cts","css","scss","sass","less","styl","html","htm","xml","xhtml","vue","svelte","json","yaml","yml","toml","csv","txt","md","mdx","pdf","doc","docx","png","jpg","jpeg","gif","svg","webp","ico","bmp","avif","woff","woff2","ttf","eot","otf","mp3","mp4","webm","ogg","wav","zip","tar","gz","rar","map"]),c=t=>{const s=t.split("?")[0].match(/\.([a-zA-Z0-9]+)$/);return s?f.has(s[1].toLowerCase()):!1},h=(t,s)=>{const i=t.indexOf(s);if(i===-1)return!1;const e=i+s.length,a=t[e];if(a===void 0)return!0;const n=t.indexOf("?");return n!==-1&&e>n?!0:"?#&".includes(a)};function m(t,s,i){return i.find(e=>{const a=e.method.toLowerCase()===t.toLowerCase();if(e.urlRegex&&d(e.url)){const l=new RegExp(e.url);return a&&l.test(s)}if(c(e.url))return a&&s.includes(e.url);const n=e.url===s||h(s,e.url);return a&&n&&!c(s)})}function p(t,s,i,e){t.forEach(a=>a.postMessage({type:"EXECUTED",alias:s.alias,request:i,hitCount:e}))}var y=(t,s,i)=>{const e=![204,205,304].includes(s),a=e?JSON.stringify(t):null;return new Response(a,{status:s,headers:e?i||{"Content-Type":"application/json"}:i||{}})},u="1.8.
|
|
1
|
+
(function(){var d=t=>{try{return new RegExp(t),!0}catch{return!1}},f=new Set(["js","mjs","cjs","ts","tsx","jsx","mts","cts","css","scss","sass","less","styl","html","htm","xml","xhtml","vue","svelte","json","yaml","yml","toml","csv","txt","md","mdx","pdf","doc","docx","png","jpg","jpeg","gif","svg","webp","ico","bmp","avif","woff","woff2","ttf","eot","otf","mp3","mp4","webm","ogg","wav","zip","tar","gz","rar","map"]),c=t=>{const s=t.split("?")[0].match(/\.([a-zA-Z0-9]+)$/);return s?f.has(s[1].toLowerCase()):!1},h=(t,s)=>{const i=t.indexOf(s);if(i===-1)return!1;const e=i+s.length,a=t[e];if(a===void 0)return!0;const n=t.indexOf("?");return n!==-1&&e>n?!0:"?#&".includes(a)};function m(t,s,i){return i.find(e=>{const a=e.method.toLowerCase()===t.toLowerCase();if(e.urlRegex&&d(e.url)){const l=new RegExp(e.url);return a&&l.test(s)}if(c(e.url))return a&&s.includes(e.url);const n=e.url===s||h(s,e.url);return a&&n&&!c(s)})}function p(t,s,i,e){t.forEach(a=>a.postMessage({type:"EXECUTED",alias:s.alias,request:i,hitCount:e}))}var y=(t,s,i)=>{const e=![204,205,304].includes(s),a=e?JSON.stringify(t):null;return new Response(a,{status:s,headers:e?i||{"Content-Type":"application/json"}:i||{}})},u="1.8.2",r=[],o={},g=async t=>{const{method:s}=t.request,i=t.request.url,e=m(s,i,r);e&&(console.log("[TWD] Mock hit:",e.alias,s,i),t.respondWith((async()=>{let a=null;const n=t.request.headers.get("content-type")||"application/json";if(n.includes("application/json"))try{a=await t.request.clone().json()}catch{}else if(n.includes("form"))try{const l=await t.request.clone().formData();a={},l.forEach((x,E)=>{a[E]=x})}catch{}else if(n.includes("text"))try{a=await t.request.clone().text()}catch{}else if(n.includes("octet-stream"))try{a=await t.request.clone().arrayBuffer()}catch{}else if(n.includes("image"))try{a=await t.request.clone().blob()}catch{}else try{a=await t.request.clone().text()}catch{}return o[e.alias]||(o[e.alias]=0),o[e.alias]++,p(await self.clients.matchAll(),e,a,o[e.alias]),e.delay&&e.delay>0&&await new Promise(l=>setTimeout(l,e.delay)),y(e.response,e.status??200,e.responseHeaders)})()))},w=t=>{t!=="1.8.2"&&console.warn(`[TWD] ⚠️ Version mismatch detected:
|
|
2
2
|
Client version: ${t}
|
|
3
3
|
Service Worker version: ${u}
|
|
4
4
|
|
package/dist/runner.cjs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./runner-
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./runner-ClPPXm0J.cjs");exports.TestRunner=e.TestRunner;exports.afterEach=e.afterEach;exports.beforeEach=e.beforeEach;exports.clearTests=e.clearTests;exports.describe=e.describe;exports.handlers=e.handlers;exports.it=e.it;
|
package/dist/runner.es.js
CHANGED
|
@@ -2,5 +2,5 @@ interface ClosedSidebarProps {
|
|
|
2
2
|
setOpen: (open: boolean) => void;
|
|
3
3
|
position: 'left' | 'right';
|
|
4
4
|
}
|
|
5
|
-
export declare const ClosedSidebar: ({ setOpen, position }: ClosedSidebarProps) => import("react
|
|
5
|
+
export declare const ClosedSidebar: ({ setOpen, position }: ClosedSidebarProps) => import("react").JSX.Element;
|
|
6
6
|
export {};
|
|
@@ -3,5 +3,5 @@ interface BaseIconProps {
|
|
|
3
3
|
children: React.ReactNode;
|
|
4
4
|
dataTestId: string;
|
|
5
5
|
}
|
|
6
|
-
declare const BaseIcon: ({ className, children, dataTestId }: BaseIconProps) => import("react
|
|
6
|
+
declare const BaseIcon: ({ className, children, dataTestId }: BaseIconProps) => import("react").JSX.Element;
|
|
7
7
|
export default BaseIcon;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
declare const ChevronDown: () => import("react
|
|
1
|
+
declare const ChevronDown: () => import("react").JSX.Element;
|
|
2
2
|
export default ChevronDown;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
declare const ChevronRight: () => import("react
|
|
1
|
+
declare const ChevronRight: () => import("react").JSX.Element;
|
|
2
2
|
export default ChevronRight;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
declare const Loader: () => import("react
|
|
1
|
+
declare const Loader: () => import("react").JSX.Element;
|
|
2
2
|
export default Loader;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
declare const MockRequestIcon: () => import("react
|
|
1
|
+
declare const MockRequestIcon: () => import("react").JSX.Element;
|
|
2
2
|
export default MockRequestIcon;
|
package/dist/ui/Icons/Play.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
declare const Play: () => import("react
|
|
1
|
+
declare const Play: () => import("react").JSX.Element;
|
|
2
2
|
export default Play;
|
package/dist/ui/LogItem.d.ts
CHANGED
|
@@ -2,5 +2,5 @@ interface LogItemProps {
|
|
|
2
2
|
log: string;
|
|
3
3
|
index: number;
|
|
4
4
|
}
|
|
5
|
-
export declare const LogItem: ({ log, index }: LogItemProps) => import("react
|
|
5
|
+
export declare const LogItem: ({ log, index }: LogItemProps) => import("react").JSX.Element;
|
|
6
6
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const MockRulesButton: () => import("react
|
|
1
|
+
export declare const MockRulesButton: () => import("react").JSX.Element;
|
|
@@ -2,5 +2,5 @@ interface MockedComponentProps<TProps = any> {
|
|
|
2
2
|
name: string;
|
|
3
3
|
children: React.ReactElement<TProps>;
|
|
4
4
|
}
|
|
5
|
-
export declare function MockedComponent<TProps extends Record<string, any>>({ name, children, }: MockedComponentProps<TProps>): import("react
|
|
5
|
+
export declare function MockedComponent<TProps extends Record<string, any>>({ name, children, }: MockedComponentProps<TProps>): import("react").JSX.Element;
|
|
6
6
|
export {};
|
package/dist/ui/SearchInput.d.ts
CHANGED
|
@@ -2,5 +2,5 @@ interface SearchInputProps {
|
|
|
2
2
|
value: string;
|
|
3
3
|
onChange: (value: string) => void;
|
|
4
4
|
}
|
|
5
|
-
export declare const SearchInput: ({ value, onChange }: SearchInputProps) => import("react
|
|
5
|
+
export declare const SearchInput: ({ value, onChange }: SearchInputProps) => import("react").JSX.Element;
|
|
6
6
|
export {};
|
|
@@ -4,5 +4,5 @@ interface SkipOnlyNameProps {
|
|
|
4
4
|
skip?: boolean;
|
|
5
5
|
only?: boolean;
|
|
6
6
|
}
|
|
7
|
-
declare const SkipOnlyName: ({ id, name, skip, only }: SkipOnlyNameProps) => import("react
|
|
7
|
+
declare const SkipOnlyName: ({ id, name, skip, only }: SkipOnlyNameProps) => import("react").JSX.Element;
|
|
8
8
|
export default SkipOnlyName;
|
package/dist/ui/TWDSidebar.d.ts
CHANGED
|
@@ -16,5 +16,5 @@ interface TWDSidebarProps {
|
|
|
16
16
|
*/
|
|
17
17
|
search?: boolean;
|
|
18
18
|
}
|
|
19
|
-
export declare const TWDSidebar: ({ open, position, search }: TWDSidebarProps) => import("react
|
|
19
|
+
export declare const TWDSidebar: ({ open, position, search }: TWDSidebarProps) => import("react").JSX.Element;
|
|
20
20
|
export {};
|
package/dist/ui/TestList.d.ts
CHANGED
|
@@ -4,5 +4,5 @@ interface TestListProps {
|
|
|
4
4
|
runTest: (id: string) => Promise<void>;
|
|
5
5
|
searchQuery?: string;
|
|
6
6
|
}
|
|
7
|
-
export declare const TestList: ({ roots, runTest, searchQuery }: TestListProps) => import("react
|
|
7
|
+
export declare const TestList: ({ roots, runTest, searchQuery }: TestListProps) => import("react").JSX.Element;
|
|
8
8
|
export {};
|
|
@@ -15,5 +15,5 @@ interface TestListItemProps {
|
|
|
15
15
|
id: string;
|
|
16
16
|
runTest: (i: string) => void;
|
|
17
17
|
}
|
|
18
|
-
export declare const TestListItem: ({ node, depth, id, runTest }: TestListItemProps) => import("react
|
|
18
|
+
export declare const TestListItem: ({ node, depth, id, runTest }: TestListItemProps) => import("react").JSX.Element;
|
|
19
19
|
export {};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare const CSS_STYLES = "\n/* ========================\n Animation keyframes\n ======================== */\n@keyframes twd-spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n}\n\n/* ========================\n Buttons \u2014 shared base\n ======================== */\n.twd-btn {\n cursor: pointer;\n border-radius: var(--twd-border-radius);\n transition: all var(--twd-animation-duration) ease;\n}\n.twd-btn:hover { filter: brightness(1.15); }\n.twd-btn:active { filter: brightness(0.9); }\n.twd-btn:focus-visible {\n outline: 2px solid var(--twd-primary);\n outline-offset: 2px;\n}\n.twd-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n.twd-btn:disabled:hover { filter: none; }\n\n/* ========================\n Button variants\n ======================== */\n.twd-btn-primary {\n background: var(--twd-button-primary);\n color: var(--twd-button-primary-text);\n padding: var(--twd-spacing-xs) var(--twd-spacing-md);\n border: none;\n}\n.twd-btn-secondary {\n background: var(--twd-button-secondary);\n color: var(--twd-button-secondary-text);\n padding: var(--twd-spacing-xs) var(--twd-spacing-md);\n border: 1px solid var(--twd-button-border);\n}\n.twd-btn-icon {\n background: transparent;\n border: 1px solid var(--twd-border-light);\n padding: 0;\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n vertical-align: middle;\n font-size: var(--twd-font-size-sm);\n}\n.twd-btn-mock-rules {\n background: var(--twd-button-secondary);\n border: 1px solid var(--twd-button-border);\n border-radius: var(--twd-border-radius-lg);\n padding: var(--twd-spacing-md) var(--twd-spacing-lg);\n font-size: var(--twd-font-size-sm);\n color: var(--twd-button-secondary-text);\n display: flex;\n align-items: center;\n gap: var(--twd-spacing-md);\n margin-bottom: 10px;\n width: 100%;\n text-align: left;\n transition: all var(--twd-animation-duration) ease;\n box-shadow: var(--twd-shadow-sm);\n}\n\n/* ========================\n Sidebar layout\n ======================== */\n.twd-sidebar {\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n position: fixed;\n top: 0;\n bottom: 0;\n width: var(--twd-sidebar-width);\n background: var(--twd-background);\n font-size: var(--twd-font-size-md);\n overflow-y: auto;\n box-shadow: var(--twd-shadow);\n text-align: left;\n z-index: var(--twd-z-index-sidebar);\n pointer-events: all;\n isolation: isolate;\n}\n.twd-sidebar-header {\n padding: var(--twd-spacing-md);\n background: var(--twd-background);\n position: sticky;\n top: 0;\n z-index: var(--twd-z-index-sticky);\n border-bottom: 1px solid var(--twd-border);\n}\n.twd-sidebar-header-row {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: var(--twd-spacing-xl);\n}\n.twd-sidebar-header-buttons {\n display: flex;\n gap: var(--twd-spacing-xs);\n}\n.twd-sidebar-stats {\n display: flex;\n justify-content: space-between;\n align-items: center;\n font-size: var(--twd-font-size-md);\n color: var(--twd-text-secondary);\n margin-bottom: 10px;\n}\n.twd-sidebar-stats-counts {\n display: flex;\n gap: var(--twd-spacing-xs);\n}\n.twd-sidebar-content {\n padding: var(--twd-spacing-md);\n}\n.twd-sidebar-closed {\n position: fixed;\n top: 50%;\n transform: translateY(-50%);\n z-index: var(--twd-z-index-sidebar);\n background: var(--twd-button-primary);\n color: var(--twd-button-primary-text);\n padding: var(--twd-spacing-sm) 10px;\n font-size: var(--twd-font-size-sm);\n}\n.twd-sidebar-version {\n color: var(--twd-text-secondary);\n font-size: var(--twd-font-size-sm);\n align-self: center;\n}\n\n/* ========================\n Test list\n ======================== */\n.twd-test-list {\n list-style: none;\n padding: 0;\n margin: 0;\n}\n.twd-test-group {\n background: var(--twd-describe-bg);\n border-left: 3px solid var(--twd-describe-border);\n border-radius: var(--twd-border-radius);\n padding: var(--twd-spacing-xs) var(--twd-spacing-sm);\n margin-bottom: var(--twd-spacing-sm);\n}\n.twd-test-group-toggle {\n font-weight: var(--twd-font-weight-
|
|
1
|
+
export declare const CSS_STYLES = "\n/* ========================\n Animation keyframes\n ======================== */\n@keyframes twd-spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n}\n\n/* ========================\n Buttons \u2014 shared base\n ======================== */\n.twd-btn {\n cursor: pointer;\n border-radius: var(--twd-border-radius);\n transition: all var(--twd-animation-duration) ease;\n}\n.twd-btn:hover { filter: brightness(1.15); }\n.twd-btn:active { filter: brightness(0.9); }\n.twd-btn:focus-visible {\n outline: 2px solid var(--twd-primary);\n outline-offset: 2px;\n}\n.twd-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n.twd-btn:disabled:hover { filter: none; }\n\n/* ========================\n Button variants\n ======================== */\n.twd-btn-primary {\n background: var(--twd-button-primary);\n color: var(--twd-button-primary-text);\n padding: var(--twd-spacing-xs) var(--twd-spacing-md);\n border: none;\n}\n.twd-btn-secondary {\n background: var(--twd-button-secondary);\n color: var(--twd-button-secondary-text);\n padding: var(--twd-spacing-xs) var(--twd-spacing-md);\n border: 1px solid var(--twd-button-border);\n}\n.twd-btn-icon {\n background: transparent;\n border: 1px solid var(--twd-border-light);\n padding: 0;\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n vertical-align: middle;\n font-size: var(--twd-font-size-sm);\n}\n.twd-btn-mock-rules {\n background: var(--twd-button-secondary);\n border: 1px solid var(--twd-button-border);\n border-radius: var(--twd-border-radius-lg);\n padding: var(--twd-spacing-md) var(--twd-spacing-lg);\n font-size: var(--twd-font-size-sm);\n color: var(--twd-button-secondary-text);\n display: flex;\n align-items: center;\n gap: var(--twd-spacing-md);\n margin-bottom: 10px;\n width: 100%;\n text-align: left;\n transition: all var(--twd-animation-duration) ease;\n box-shadow: var(--twd-shadow-sm);\n}\n\n/* ========================\n Sidebar layout\n ======================== */\n.twd-sidebar {\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n position: fixed;\n top: 0;\n bottom: 0;\n width: var(--twd-sidebar-width);\n background: var(--twd-background);\n font-size: var(--twd-font-size-md);\n overflow-y: auto;\n box-shadow: var(--twd-shadow);\n text-align: left;\n z-index: var(--twd-z-index-sidebar);\n pointer-events: all;\n isolation: isolate;\n}\n.twd-sidebar-header {\n padding: var(--twd-spacing-md);\n background: var(--twd-background);\n position: sticky;\n top: 0;\n z-index: var(--twd-z-index-sticky);\n border-bottom: 1px solid var(--twd-border);\n}\n.twd-sidebar-header-row {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: var(--twd-spacing-xl);\n}\n.twd-sidebar-header-buttons {\n display: flex;\n gap: var(--twd-spacing-xs);\n}\n.twd-sidebar-stats {\n display: flex;\n justify-content: space-between;\n align-items: center;\n font-size: var(--twd-font-size-md);\n color: var(--twd-text-secondary);\n margin-bottom: 10px;\n}\n.twd-sidebar-stats-counts {\n display: flex;\n gap: var(--twd-spacing-xs);\n}\n.twd-sidebar-content {\n padding: var(--twd-spacing-md);\n}\n.twd-sidebar-closed {\n position: fixed;\n top: 50%;\n transform: translateY(-50%);\n z-index: var(--twd-z-index-sidebar);\n background: var(--twd-button-primary);\n color: var(--twd-button-primary-text);\n padding: var(--twd-spacing-sm) 10px;\n font-size: var(--twd-font-size-sm);\n}\n.twd-sidebar-version {\n color: var(--twd-text-secondary);\n font-size: var(--twd-font-size-sm);\n align-self: center;\n}\n\n/* ========================\n Test list\n ======================== */\n.twd-test-list {\n list-style: none;\n padding: 0;\n margin: 0;\n}\n.twd-test-group {\n background: var(--twd-describe-bg);\n border-left: 3px solid var(--twd-describe-border);\n border-radius: var(--twd-border-radius);\n padding: var(--twd-spacing-xs) var(--twd-spacing-sm);\n margin-bottom: var(--twd-spacing-sm);\n}\n.twd-test-group-toggle {\n font-weight: var(--twd-font-weight-bold);\n font-size: var(--twd-font-size-md);\n cursor: pointer;\n color: var(--twd-describe-text);\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--twd-spacing-sm);\n letter-spacing: 0.05em;\n}\n.twd-test-item {\n display: flex;\n align-items: left;\n justify-content: space-between;\n padding: var(--twd-spacing-sm) var(--twd-spacing-sm);\n border-radius: var(--twd-border-radius);\n}\n.twd-test-item-name {\n font-weight: var(--twd-font-weight-normal);\n font-size: var(--twd-font-size-md);\n color: var(--twd-text);\n max-width: 220px;\n}\n.twd-test-item-logs {\n border-radius: var(--twd-border-radius);\n max-height: 260px;\n overflow-y: auto;\n padding: 0;\n background: var(--twd-background-secondary);\n list-style: none;\n margin-top: var(--twd-spacing-xs);\n text-align: left;\n}\n\n/* ========================\n Status variants\n ======================== */\n.twd-status-pass { background: var(--twd-success-bg); }\n.twd-status-fail { background: var(--twd-error-bg); }\n.twd-status-skip { background: var(--twd-skip-bg); }\n.twd-status-running { background: var(--twd-warning-bg); }\n\n/* ========================\n Search\n ======================== */\n.twd-search-wrapper {\n position: relative;\n margin-bottom: var(--twd-spacing-md);\n}\n.twd-search-input {\n width: 100%;\n padding: var(--twd-spacing-md);\n background: var(--twd-background);\n color: var(--twd-text);\n border: 1px solid var(--twd-border);\n border-radius: var(--twd-border-radius);\n font-size: var(--twd-font-size-md);\n box-sizing: border-box;\n}\n.twd-search-input:focus-visible {\n outline: 2px solid var(--twd-primary);\n outline-offset: 2px;\n}\n\n/* ========================\n Loader\n ======================== */\n.twd-loader {\n animation: twd-spin 1s linear infinite;\n}\n";
|
|
2
2
|
/**
|
|
3
3
|
* Injects all sidebar CSS classes into the document.
|
|
4
4
|
* Guards against double-injection (same pattern as injectTheme).
|
package/dist/ui.cjs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("./componentMocks-
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("./componentMocks-BklBTS5K.cjs");let r=require("react/jsx-runtime");function c({name:t,children:e}){const o=n.getMockForComponent(t);return o?(0,r.jsx)(o,{...e.props}):e}exports.MockedComponent=c;
|
package/dist/ui.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from './ui/index'
|
|
1
|
+
export * from './ui/index.js'
|
|
2
2
|
export {}
|
package/dist/ui.es.js
CHANGED
package/dist/vite-plugin.cjs.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});let m=require("fs"),v=require("path");function p(){return{name:"remove-mock-sw",apply:"build",closeBundle(){try{(0,m.rmSync)((0,v.resolve)("dist/mock-sw.js")),console.log("🧹 Removed mock-sw.js from build")}catch{console.log("🧹 No mock-sw.js found in build")}}}}function f(i={}){const{testFilePattern:e=".twd.test.ts"}=i,o=typeof e=="function"?e:t=>t.endsWith(e);return{name:"twd-hmr",apply:"serve",handleHotUpdate({file:t,server:n}){if(o(t))return n.ws.send({type:"full-reload",path:"*"}),[]}}}var c="virtual:twd/init",d=`\0${c}`,w="/**/*.twd.test.ts",a={open:!0,position:"left",serviceWorker:!0,serviceWorkerUrl:"/mock-sw.js"};function k(i={}){const{testFilePattern:e=w,...o}=i,t=o.serviceWorkerUrl!==void 0,n={...a,...o};let s="/";return{name:"twd",apply:"serve",configResolved(r){if(s=r.base,!t&&s!=="/"){const l=a.serviceWorkerUrl.replace(/^\//,"");n.serviceWorkerUrl=`${s}${l}`}},resolveId(r){return r===c?d:null},load(r){if(r!==d)return null;const l=JSON.stringify(e),u=JSON.stringify(n);return["import { initTWD } from 'twd-js/bundled';",`const tests = import.meta.glob(${l});`,`initTWD(tests, ${u});`].join(`
|
|
2
2
|
`)},transformIndexHtml(){return[{tag:"script",attrs:{type:"module",src:`${s}@id/${c}`},injectTo:"head"}]}}}exports.removeMockServiceWorker=p;exports.twd=k;exports.twdHmr=f;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "twd-js",
|
|
3
|
-
"version": "1.8.
|
|
4
|
-
"description": "Test While Developing (TWD)
|
|
3
|
+
"version": "1.8.2",
|
|
4
|
+
"description": "Test While Developing (TWD): in-browser test runner with a live sidebar UI for React, Vue, Angular, and Solid, with built-in API and component mocking.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"author": "BRIKEV",
|
|
@@ -78,7 +78,8 @@
|
|
|
78
78
|
"copy:dist:vue-twd-example": "cp -r dist examples/vue-twd-example/src",
|
|
79
79
|
"copy:dist:tutorial-example": "cp -r dist examples/tutorial-example/src",
|
|
80
80
|
"copy:dist:examples": "npm run copy:dist:vue-twd-example && npm run copy:dist:tutorial-example",
|
|
81
|
-
"prepare": "husky"
|
|
81
|
+
"prepare": "husky",
|
|
82
|
+
"lock:linux": "docker run --rm -v \"$PWD\":/app -w /app node:24 npm install --package-lock-only"
|
|
82
83
|
},
|
|
83
84
|
"lint-staged": {
|
|
84
85
|
"src/**/*.{ts,tsx}": [
|
|
@@ -103,7 +104,7 @@
|
|
|
103
104
|
"@vitejs/plugin-react": "^6.0.1",
|
|
104
105
|
"@vitest/coverage-v8": "^4.1.5",
|
|
105
106
|
"@vitest/eslint-plugin": "^1.6.16",
|
|
106
|
-
"conventional-changelog": "^
|
|
107
|
+
"conventional-changelog": "^8.0.0",
|
|
107
108
|
"eslint": "^10.3.0",
|
|
108
109
|
"eslint-config-prettier": "^10.1.8",
|
|
109
110
|
"globals": "^17.6.0",
|
|
@@ -122,10 +123,21 @@
|
|
|
122
123
|
"testing",
|
|
123
124
|
"test-runner",
|
|
124
125
|
"in-browser-testing",
|
|
126
|
+
"browser-testing",
|
|
127
|
+
"component-testing",
|
|
128
|
+
"ui-testing",
|
|
129
|
+
"frontend-testing",
|
|
130
|
+
"react",
|
|
125
131
|
"react-testing",
|
|
132
|
+
"vue",
|
|
133
|
+
"angular",
|
|
134
|
+
"solid",
|
|
135
|
+
"preact",
|
|
136
|
+
"api-mocking",
|
|
137
|
+
"request-mocking",
|
|
138
|
+
"service-worker",
|
|
126
139
|
"twd",
|
|
127
|
-
"
|
|
128
|
-
"frontend-testing",
|
|
140
|
+
"tdd",
|
|
129
141
|
"typescript"
|
|
130
142
|
],
|
|
131
143
|
"dependencies": {
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|