Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/shared-cookie-self-contained-types.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
---
'@clerk/shared': patch
---

Ship a self-contained `CookieAttributes` interface from `@clerk/shared/cookie` and use it in `createCookieHandler`'s `set`/`remove` signatures. The published declarations previously referenced `Cookies.CookieAttributes` from js-cookie, which consumers could never resolve (the import was dropped from the declaration output and js-cookie ships no types), causing TS2503 errors under `skipLibCheck: false` and silently degrading the option types to `any` otherwise.
5 changes: 5 additions & 0 deletions .changeset/testing-cypress-preserve-types-reference.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
---
'@clerk/testing': patch
---

Preserve the `/// <reference types="cypress" />` directive in the published `@clerk/testing/cypress` type declarations. TypeScript's declaration emit previously dropped it, so the shipped types relied on the global `Cypress` namespace without declaring the dependency and failed to type-check under `skipLibCheck: false`.
4 changes: 2 additions & 2 deletions packages/clerk-js/src/core/auth/getCookieDomain.ts
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
import { createCookieHandler } from '@clerk/shared/cookie';
import { type CookieAttributes, createCookieHandler } from '@clerk/shared/cookie';

/**
* Determines the eTLD+1 domain, which is where we want the cookies to be set.
Expand All@@ -19,7 +19,7 @@ const eTLDCookie = createCookieHandler('__clerk_test_etld');
export function getCookieDomain(
hostname = window.location.hostname,
cookieHandler = eTLDCookie,
cookieAttributes?: { sameSite?: string; secure?: boolean },
cookieAttributes?: Pick<CookieAttributes, 'sameSite' | 'secure'>,
) {
// only compute it once per session to avoid unnecessary cookie ops
if (cachedETLDPlusOne) {
Expand Down
56 changes: 54 additions & 2 deletions packages/shared/src/cookie.ts
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,57 @@
import Cookies from 'js-cookie';

/**
* Mirrors js-cookie's `CookieAttributes`. Defined locally so the published d.ts is
* self-contained: the bundler drops the js-cookie import from the declaration output
* and `@types/js-cookie` is only a devDependency, so consumers could never resolve
* the original reference.
*/
export interface CookieAttributes {
/**
* Define when the cookie will be removed. Value can be a Number
* which will be interpreted as days from time of creation or a
* Date instance. If omitted, the cookie becomes a session cookie.
*/
expires?: number | Date | undefined;

/**
* Define the path where the cookie is available. Defaults to '/'
*/
path?: string | undefined;

/**
* Define the domain where the cookie is available. Defaults to
* the domain of the page where the cookie was created.
*/
domain?: string | undefined;

/**
* A Boolean indicating if the cookie transmission requires a
* secure protocol (https). Defaults to false.
*/
secure?: boolean | undefined;

/**
* Asserts that a cookie must not be sent with cross-origin requests,
* providing some protection against cross-site request forgery
* attacks (CSRF)
*/
sameSite?: 'strict' | 'Strict' | 'lax' | 'Lax' | 'none' | 'None' | undefined;

/**
* A Boolean indicating whether the cookie is partitioned per top-level
* site (CHIPS). js-cookie serializes it through the attribute passthrough;
* declared explicitly because Clerk sets it at several call sites.
*/
partitioned?: boolean | undefined;

/**
* An attribute which will be serialized, conformably to RFC 6265
* section 5.2.
*/
[property: string]: any;
}

/**
* Creates helper methods for dealing with a specific cookie.
*
Expand All@@ -20,7 +72,7 @@ export function createCookieHandler(cookieName: string) {
/**
* Setting a cookie will use some defaults such as path being set to "/".
*/
set(newValue: string, options: Cookies.CookieAttributes = {}): void {
set(newValue: string, options: CookieAttributes = {}): void {
Cookies.set(cookieName, newValue, options);
},
/**
Expand All@@ -29,7 +81,7 @@ export function createCookieHandler(cookieName: string) {
*
* @see https://github.com/js-cookie/js-cookie#basic-usage
*/
remove(cookieAttributes?: Cookies.CookieAttributes) {
remove(cookieAttributes?: CookieAttributes): void {
Cookies.remove(cookieName, cookieAttributes);
},
};
Expand Down
2 changes: 1 addition & 1 deletion packages/testing/src/cypress/agent-task.ts
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
/// <reference types="cypress" />
/// <reference types="cypress" preserve="true" />
import { type CreateAgentTaskParams, createAgentTestingTask as _createAgentTestingTask } from '../common';

/**
Expand Down
2 changes: 1 addition & 1 deletion packages/testing/src/cypress/custom-commands.ts
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
/// <reference types="cypress" />
/// <reference types="cypress" preserve="true" />
import type { Clerk, SignOutOptions } from '@clerk/shared/types';

import type { ClerkSignInParams } from '../common';
Expand Down
2 changes: 1 addition & 1 deletion packages/testing/src/cypress/setup.ts
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
/// <reference types="cypress" />
/// <reference types="cypress" preserve="true" />
import type { ClerkSetupOptions } from '../common';
import { fetchEnvVars } from '../common';

Expand Down
2 changes: 1 addition & 1 deletion packages/testing/src/cypress/setupClerkTestingToken.ts
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
/// <reference types="cypress" />
/// <reference types="cypress" preserve="true" />
import type { SetupClerkTestingTokenOptions } from '../common';
import { ERROR_MISSING_FRONTEND_API_URL, TESTING_TOKEN_PARAM } from '../common';

Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
fix(shared,testing): ship self-contained published types for shared/cookie and testing/cypress by jacekradko · Pull Request #8841 · clerk/javascript · GitHub
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/shared-cookie-self-contained-types.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
---
'@clerk/shared': patch
---

Ship a self-contained `CookieAttributes` interface from `@clerk/shared/cookie` and use it in `createCookieHandler`'s `set`/`remove` signatures. The published declarations previously referenced `Cookies.CookieAttributes` from js-cookie, which consumers could never resolve (the import was dropped from the declaration output and js-cookie ships no types), causing TS2503 errors under `skipLibCheck: false` and silently degrading the option types to `any` otherwise.
5 changes: 5 additions & 0 deletions .changeset/testing-cypress-preserve-types-reference.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
---
'@clerk/testing': patch
---

Preserve the `/// <reference types="cypress" />` directive in the published `@clerk/testing/cypress` type declarations. TypeScript's declaration emit previously dropped it, so the shipped types relied on the global `Cypress` namespace without declaring the dependency and failed to type-check under `skipLibCheck: false`.
4 changes: 2 additions & 2 deletions packages/clerk-js/src/core/auth/getCookieDomain.ts
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
import { createCookieHandler } from '@clerk/shared/cookie';
import { type CookieAttributes, createCookieHandler } from '@clerk/shared/cookie';

/**
* Determines the eTLD+1 domain, which is where we want the cookies to be set.
Expand All@@ -19,7 +19,7 @@ const eTLDCookie = createCookieHandler('__clerk_test_etld');
export function getCookieDomain(
hostname = window.location.hostname,
cookieHandler = eTLDCookie,
cookieAttributes?: { sameSite?: string; secure?: boolean },
cookieAttributes?: Pick<CookieAttributes, 'sameSite' | 'secure'>,
) {
// only compute it once per session to avoid unnecessary cookie ops
if (cachedETLDPlusOne) {
Expand Down
56 changes: 54 additions & 2 deletions packages/shared/src/cookie.ts
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,57 @@
import Cookies from 'js-cookie';

/**
* Mirrors js-cookie's `CookieAttributes`. Defined locally so the published d.ts is
* self-contained: the bundler drops the js-cookie import from the declaration output
* and `@types/js-cookie` is only a devDependency, so consumers could never resolve
* the original reference.
*/
export interface CookieAttributes {
/**
* Define when the cookie will be removed. Value can be a Number
* which will be interpreted as days from time of creation or a
* Date instance. If omitted, the cookie becomes a session cookie.
*/
expires?: number | Date | undefined;

/**
* Define the path where the cookie is available. Defaults to '/'
*/
path?: string | undefined;

/**
* Define the domain where the cookie is available. Defaults to
* the domain of the page where the cookie was created.
*/
domain?: string | undefined;

/**
* A Boolean indicating if the cookie transmission requires a
* secure protocol (https). Defaults to false.
*/
secure?: boolean | undefined;

/**
* Asserts that a cookie must not be sent with cross-origin requests,
* providing some protection against cross-site request forgery
* attacks (CSRF)
*/
sameSite?: 'strict' | 'Strict' | 'lax' | 'Lax' | 'none' | 'None' | undefined;

/**
* A Boolean indicating whether the cookie is partitioned per top-level
* site (CHIPS). js-cookie serializes it through the attribute passthrough;
* declared explicitly because Clerk sets it at several call sites.
*/
partitioned?: boolean | undefined;

/**
* An attribute which will be serialized, conformably to RFC 6265
* section 5.2.
*/
[property: string]: any;
}

/**
* Creates helper methods for dealing with a specific cookie.
*
Expand All@@ -20,7 +72,7 @@ export function createCookieHandler(cookieName: string) {
/**
* Setting a cookie will use some defaults such as path being set to "/".
*/
set(newValue: string, options: Cookies.CookieAttributes = {}): void {
set(newValue: string, options: CookieAttributes = {}): void {
Cookies.set(cookieName, newValue, options);
},
/**
Expand All@@ -29,7 +81,7 @@ export function createCookieHandler(cookieName: string) {
*
* @see https://github.com/js-cookie/js-cookie#basic-usage
*/
remove(cookieAttributes?: Cookies.CookieAttributes) {
remove(cookieAttributes?: CookieAttributes): void {
Cookies.remove(cookieName, cookieAttributes);
},
};
Expand Down
2 changes: 1 addition & 1 deletion packages/testing/src/cypress/agent-task.ts
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
/// <reference types="cypress" />
/// <reference types="cypress" preserve="true" />
import { type CreateAgentTaskParams, createAgentTestingTask as _createAgentTestingTask } from '../common';

/**
Expand Down
2 changes: 1 addition & 1 deletion packages/testing/src/cypress/custom-commands.ts
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
/// <reference types="cypress" />
/// <reference types="cypress" preserve="true" />
import type { Clerk, SignOutOptions } from '@clerk/shared/types';

import type { ClerkSignInParams } from '../common';
Expand Down
2 changes: 1 addition & 1 deletion packages/testing/src/cypress/setup.ts
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
/// <reference types="cypress" />
/// <reference types="cypress" preserve="true" />
import type { ClerkSetupOptions } from '../common';
import { fetchEnvVars } from '../common';

Expand Down
2 changes: 1 addition & 1 deletion packages/testing/src/cypress/setupClerkTestingToken.ts
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
/// <reference types="cypress" />
/// <reference types="cypress" preserve="true" />
import type { SetupClerkTestingTokenOptions } from '../common';
import { ERROR_MISSING_FRONTEND_API_URL, TESTING_TOKEN_PARAM } from '../common';

Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' fix(shared,testing): ship self-contained published types for shared/cookie and testing/cypress by jacekradko · Pull Request #8841 · clerk/javascript · GitHub
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/shared-cookie-self-contained-types.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
---
'@clerk/shared': patch
---

Ship a self-contained `CookieAttributes` interface from `@clerk/shared/cookie` and use it in `createCookieHandler`'s `set`/`remove` signatures. The published declarations previously referenced `Cookies.CookieAttributes` from js-cookie, which consumers could never resolve (the import was dropped from the declaration output and js-cookie ships no types), causing TS2503 errors under `skipLibCheck: false` and silently degrading the option types to `any` otherwise.
5 changes: 5 additions & 0 deletions .changeset/testing-cypress-preserve-types-reference.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
---
'@clerk/testing': patch
---

Preserve the `/// <reference types="cypress" />` directive in the published `@clerk/testing/cypress` type declarations. TypeScript's declaration emit previously dropped it, so the shipped types relied on the global `Cypress` namespace without declaring the dependency and failed to type-check under `skipLibCheck: false`.
4 changes: 2 additions & 2 deletions packages/clerk-js/src/core/auth/getCookieDomain.ts
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
import { createCookieHandler } from '@clerk/shared/cookie';
import { type CookieAttributes, createCookieHandler } from '@clerk/shared/cookie';

/**
* Determines the eTLD+1 domain, which is where we want the cookies to be set.
Expand All@@ -19,7 +19,7 @@ const eTLDCookie = createCookieHandler('__clerk_test_etld');
export function getCookieDomain(
hostname = window.location.hostname,
cookieHandler = eTLDCookie,
cookieAttributes?: { sameSite?: string; secure?: boolean },
cookieAttributes?: Pick<CookieAttributes, 'sameSite' | 'secure'>,
) {
// only compute it once per session to avoid unnecessary cookie ops
if (cachedETLDPlusOne) {
Expand Down
56 changes: 54 additions & 2 deletions packages/shared/src/cookie.ts
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,57 @@
import Cookies from 'js-cookie';

/**
* Mirrors js-cookie's `CookieAttributes`. Defined locally so the published d.ts is
* self-contained: the bundler drops the js-cookie import from the declaration output
* and `@types/js-cookie` is only a devDependency, so consumers could never resolve
* the original reference.
*/
export interface CookieAttributes {
/**
* Define when the cookie will be removed. Value can be a Number
* which will be interpreted as days from time of creation or a
* Date instance. If omitted, the cookie becomes a session cookie.
*/
expires?: number | Date | undefined;

/**
* Define the path where the cookie is available. Defaults to '/'
*/
path?: string | undefined;

/**
* Define the domain where the cookie is available. Defaults to
* the domain of the page where the cookie was created.
*/
domain?: string | undefined;

/**
* A Boolean indicating if the cookie transmission requires a
* secure protocol (https). Defaults to false.
*/
secure?: boolean | undefined;

/**
* Asserts that a cookie must not be sent with cross-origin requests,
* providing some protection against cross-site request forgery
* attacks (CSRF)
*/
sameSite?: 'strict' | 'Strict' | 'lax' | 'Lax' | 'none' | 'None' | undefined;

/**
* A Boolean indicating whether the cookie is partitioned per top-level
* site (CHIPS). js-cookie serializes it through the attribute passthrough;
* declared explicitly because Clerk sets it at several call sites.
*/
partitioned?: boolean | undefined;

/**
* An attribute which will be serialized, conformably to RFC 6265
* section 5.2.
*/
[property: string]: any;
}

/**
* Creates helper methods for dealing with a specific cookie.
*
Expand All@@ -20,7 +72,7 @@ export function createCookieHandler(cookieName: string) {
/**
* Setting a cookie will use some defaults such as path being set to "/".
*/
set(newValue: string, options: Cookies.CookieAttributes = {}): void {
set(newValue: string, options: CookieAttributes = {}): void {
Cookies.set(cookieName, newValue, options);
},
/**
Expand All@@ -29,7 +81,7 @@ export function createCookieHandler(cookieName: string) {
*
* @see https://github.com/js-cookie/js-cookie#basic-usage
*/
remove(cookieAttributes?: Cookies.CookieAttributes) {
remove(cookieAttributes?: CookieAttributes): void {
Cookies.remove(cookieName, cookieAttributes);
},
};
Expand Down
2 changes: 1 addition & 1 deletion packages/testing/src/cypress/agent-task.ts
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
/// <reference types="cypress" />
/// <reference types="cypress" preserve="true" />
import { type CreateAgentTaskParams, createAgentTestingTask as _createAgentTestingTask } from '../common';

/**
Expand Down
2 changes: 1 addition & 1 deletion packages/testing/src/cypress/custom-commands.ts
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
/// <reference types="cypress" />
/// <reference types="cypress" preserve="true" />
import type { Clerk, SignOutOptions } from '@clerk/shared/types';

import type { ClerkSignInParams } from '../common';
Expand Down
2 changes: 1 addition & 1 deletion packages/testing/src/cypress/setup.ts
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
/// <reference types="cypress" />
/// <reference types="cypress" preserve="true" />
import type { ClerkSetupOptions } from '../common';
import { fetchEnvVars } from '../common';

Expand Down
2 changes: 1 addition & 1 deletion packages/testing/src/cypress/setupClerkTestingToken.ts
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
/// <reference types="cypress" />
/// <reference types="cypress" preserve="true" />
import type { SetupClerkTestingTokenOptions } from '../common';
import { ERROR_MISSING_FRONTEND_API_URL, TESTING_TOKEN_PARAM } from '../common';

Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' fix(shared,testing): ship self-contained published types for shared/cookie and testing/cypress by jacekradko · Pull Request #8841 · clerk/javascript · GitHub
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/shared-cookie-self-contained-types.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
---
'@clerk/shared': patch
---

Ship a self-contained `CookieAttributes` interface from `@clerk/shared/cookie` and use it in `createCookieHandler`'s `set`/`remove` signatures. The published declarations previously referenced `Cookies.CookieAttributes` from js-cookie, which consumers could never resolve (the import was dropped from the declaration output and js-cookie ships no types), causing TS2503 errors under `skipLibCheck: false` and silently degrading the option types to `any` otherwise.
5 changes: 5 additions & 0 deletions .changeset/testing-cypress-preserve-types-reference.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
---
'@clerk/testing': patch
---

Preserve the `/// <reference types="cypress" />` directive in the published `@clerk/testing/cypress` type declarations. TypeScript's declaration emit previously dropped it, so the shipped types relied on the global `Cypress` namespace without declaring the dependency and failed to type-check under `skipLibCheck: false`.
4 changes: 2 additions & 2 deletions packages/clerk-js/src/core/auth/getCookieDomain.ts
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
import { createCookieHandler } from '@clerk/shared/cookie';
import { type CookieAttributes, createCookieHandler } from '@clerk/shared/cookie';

/**
* Determines the eTLD+1 domain, which is where we want the cookies to be set.
Expand All@@ -19,7 +19,7 @@ const eTLDCookie = createCookieHandler('__clerk_test_etld');
export function getCookieDomain(
hostname = window.location.hostname,
cookieHandler = eTLDCookie,
cookieAttributes?: { sameSite?: string; secure?: boolean },
cookieAttributes?: Pick<CookieAttributes, 'sameSite' | 'secure'>,
) {
// only compute it once per session to avoid unnecessary cookie ops
if (cachedETLDPlusOne) {
Expand Down
56 changes: 54 additions & 2 deletions packages/shared/src/cookie.ts
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,57 @@
import Cookies from 'js-cookie';

/**
* Mirrors js-cookie's `CookieAttributes`. Defined locally so the published d.ts is
* self-contained: the bundler drops the js-cookie import from the declaration output
* and `@types/js-cookie` is only a devDependency, so consumers could never resolve
* the original reference.
*/
export interface CookieAttributes {
/**
* Define when the cookie will be removed. Value can be a Number
* which will be interpreted as days from time of creation or a
* Date instance. If omitted, the cookie becomes a session cookie.
*/
expires?: number | Date | undefined;

/**
* Define the path where the cookie is available. Defaults to '/'
*/
path?: string | undefined;

/**
* Define the domain where the cookie is available. Defaults to
* the domain of the page where the cookie was created.
*/
domain?: string | undefined;

/**
* A Boolean indicating if the cookie transmission requires a
* secure protocol (https). Defaults to false.
*/
secure?: boolean | undefined;

/**
* Asserts that a cookie must not be sent with cross-origin requests,
* providing some protection against cross-site request forgery
* attacks (CSRF)
*/
sameSite?: 'strict' | 'Strict' | 'lax' | 'Lax' | 'none' | 'None' | undefined;

/**
* A Boolean indicating whether the cookie is partitioned per top-level
* site (CHIPS). js-cookie serializes it through the attribute passthrough;
* declared explicitly because Clerk sets it at several call sites.
*/
partitioned?: boolean | undefined;

/**
* An attribute which will be serialized, conformably to RFC 6265
* section 5.2.
*/
[property: string]: any;
}

/**
* Creates helper methods for dealing with a specific cookie.
*
Expand All@@ -20,7 +72,7 @@ export function createCookieHandler(cookieName: string) {
/**
* Setting a cookie will use some defaults such as path being set to "/".
*/
set(newValue: string, options: Cookies.CookieAttributes = {}): void {
set(newValue: string, options: CookieAttributes = {}): void {
Cookies.set(cookieName, newValue, options);
},
/**
Expand All@@ -29,7 +81,7 @@ export function createCookieHandler(cookieName: string) {
*
* @see https://github.com/js-cookie/js-cookie#basic-usage
*/
remove(cookieAttributes?: Cookies.CookieAttributes) {
remove(cookieAttributes?: CookieAttributes): void {
Cookies.remove(cookieName, cookieAttributes);
},
};
Expand Down
2 changes: 1 addition & 1 deletion packages/testing/src/cypress/agent-task.ts
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
/// <reference types="cypress" />
/// <reference types="cypress" preserve="true" />
import { type CreateAgentTaskParams, createAgentTestingTask as _createAgentTestingTask } from '../common';

/**
Expand Down
2 changes: 1 addition & 1 deletion packages/testing/src/cypress/custom-commands.ts
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
/// <reference types="cypress" />
/// <reference types="cypress" preserve="true" />
import type { Clerk, SignOutOptions } from '@clerk/shared/types';

import type { ClerkSignInParams } from '../common';
Expand Down
2 changes: 1 addition & 1 deletion packages/testing/src/cypress/setup.ts
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
/// <reference types="cypress" />
/// <reference types="cypress" preserve="true" />
import type { ClerkSetupOptions } from '../common';
import { fetchEnvVars } from '../common';

Expand Down
2 changes: 1 addition & 1 deletion packages/testing/src/cypress/setupClerkTestingToken.ts
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
/// <reference types="cypress" />
/// <reference types="cypress" preserve="true" />
import type { SetupClerkTestingTokenOptions } from '../common';
import { ERROR_MISSING_FRONTEND_API_URL, TESTING_TOKEN_PARAM } from '../common';

Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' fix(shared,testing): ship self-contained published types for shared/cookie and testing/cypress by jacekradko · Pull Request #8841 · clerk/javascript · GitHub
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/shared-cookie-self-contained-types.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
---
'@clerk/shared': patch
---

Ship a self-contained `CookieAttributes` interface from `@clerk/shared/cookie` and use it in `createCookieHandler`'s `set`/`remove` signatures. The published declarations previously referenced `Cookies.CookieAttributes` from js-cookie, which consumers could never resolve (the import was dropped from the declaration output and js-cookie ships no types), causing TS2503 errors under `skipLibCheck: false` and silently degrading the option types to `any` otherwise.
5 changes: 5 additions & 0 deletions .changeset/testing-cypress-preserve-types-reference.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
---
'@clerk/testing': patch
---

Preserve the `/// <reference types="cypress" />` directive in the published `@clerk/testing/cypress` type declarations. TypeScript's declaration emit previously dropped it, so the shipped types relied on the global `Cypress` namespace without declaring the dependency and failed to type-check under `skipLibCheck: false`.
4 changes: 2 additions & 2 deletions packages/clerk-js/src/core/auth/getCookieDomain.ts
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
import { createCookieHandler } from '@clerk/shared/cookie';
import { type CookieAttributes, createCookieHandler } from '@clerk/shared/cookie';

/**
* Determines the eTLD+1 domain, which is where we want the cookies to be set.
Expand All@@ -19,7 +19,7 @@ const eTLDCookie = createCookieHandler('__clerk_test_etld');
export function getCookieDomain(
hostname = window.location.hostname,
cookieHandler = eTLDCookie,
cookieAttributes?: { sameSite?: string; secure?: boolean },
cookieAttributes?: Pick<CookieAttributes, 'sameSite' | 'secure'>,
) {
// only compute it once per session to avoid unnecessary cookie ops
if (cachedETLDPlusOne) {
Expand Down
56 changes: 54 additions & 2 deletions packages/shared/src/cookie.ts
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,57 @@
import Cookies from 'js-cookie';

/**
* Mirrors js-cookie's `CookieAttributes`. Defined locally so the published d.ts is
* self-contained: the bundler drops the js-cookie import from the declaration output
* and `@types/js-cookie` is only a devDependency, so consumers could never resolve
* the original reference.
*/
export interface CookieAttributes {
/**
* Define when the cookie will be removed. Value can be a Number
* which will be interpreted as days from time of creation or a
* Date instance. If omitted, the cookie becomes a session cookie.
*/
expires?: number | Date | undefined;

/**
* Define the path where the cookie is available. Defaults to '/'
*/
path?: string | undefined;

/**
* Define the domain where the cookie is available. Defaults to
* the domain of the page where the cookie was created.
*/
domain?: string | undefined;

/**
* A Boolean indicating if the cookie transmission requires a
* secure protocol (https). Defaults to false.
*/
secure?: boolean | undefined;

/**
* Asserts that a cookie must not be sent with cross-origin requests,
* providing some protection against cross-site request forgery
* attacks (CSRF)
*/
sameSite?: 'strict' | 'Strict' | 'lax' | 'Lax' | 'none' | 'None' | undefined;

/**
* A Boolean indicating whether the cookie is partitioned per top-level
* site (CHIPS). js-cookie serializes it through the attribute passthrough;
* declared explicitly because Clerk sets it at several call sites.
*/
partitioned?: boolean | undefined;

/**
* An attribute which will be serialized, conformably to RFC 6265
* section 5.2.
*/
[property: string]: any;
}

/**
* Creates helper methods for dealing with a specific cookie.
*
Expand All@@ -20,7 +72,7 @@ export function createCookieHandler(cookieName: string) {
/**
* Setting a cookie will use some defaults such as path being set to "/".
*/
set(newValue: string, options: Cookies.CookieAttributes = {}): void {
set(newValue: string, options: CookieAttributes = {}): void {
Cookies.set(cookieName, newValue, options);
},
/**
Expand All@@ -29,7 +81,7 @@ export function createCookieHandler(cookieName: string) {
*
* @see https://github.com/js-cookie/js-cookie#basic-usage
*/
remove(cookieAttributes?: Cookies.CookieAttributes) {
remove(cookieAttributes?: CookieAttributes): void {
Cookies.remove(cookieName, cookieAttributes);
},
};
Expand Down
2 changes: 1 addition & 1 deletion packages/testing/src/cypress/agent-task.ts
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
/// <reference types="cypress" />
/// <reference types="cypress" preserve="true" />
import { type CreateAgentTaskParams, createAgentTestingTask as _createAgentTestingTask } from '../common';

/**
Expand Down
2 changes: 1 addition & 1 deletion packages/testing/src/cypress/custom-commands.ts
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
/// <reference types="cypress" />
/// <reference types="cypress" preserve="true" />
import type { Clerk, SignOutOptions } from '@clerk/shared/types';

import type { ClerkSignInParams } from '../common';
Expand Down
2 changes: 1 addition & 1 deletion packages/testing/src/cypress/setup.ts
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
/// <reference types="cypress" />
/// <reference types="cypress" preserve="true" />
import type { ClerkSetupOptions } from '../common';
import { fetchEnvVars } from '../common';

Expand Down
2 changes: 1 addition & 1 deletion packages/testing/src/cypress/setupClerkTestingToken.ts
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
/// <reference types="cypress" />
/// <reference types="cypress" preserve="true" />
import type { SetupClerkTestingTokenOptions } from '../common';
import { ERROR_MISSING_FRONTEND_API_URL, TESTING_TOKEN_PARAM } from '../common';

Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' fix(shared,testing): ship self-contained published types for shared/cookie and testing/cypress by jacekradko · Pull Request #8841 · clerk/javascript · GitHub
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/shared-cookie-self-contained-types.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
---
'@clerk/shared': patch
---

Ship a self-contained `CookieAttributes` interface from `@clerk/shared/cookie` and use it in `createCookieHandler`'s `set`/`remove` signatures. The published declarations previously referenced `Cookies.CookieAttributes` from js-cookie, which consumers could never resolve (the import was dropped from the declaration output and js-cookie ships no types), causing TS2503 errors under `skipLibCheck: false` and silently degrading the option types to `any` otherwise.
5 changes: 5 additions & 0 deletions .changeset/testing-cypress-preserve-types-reference.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
---
'@clerk/testing': patch
---

Preserve the `/// <reference types="cypress" />` directive in the published `@clerk/testing/cypress` type declarations. TypeScript's declaration emit previously dropped it, so the shipped types relied on the global `Cypress` namespace without declaring the dependency and failed to type-check under `skipLibCheck: false`.
4 changes: 2 additions & 2 deletions packages/clerk-js/src/core/auth/getCookieDomain.ts
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
import { createCookieHandler } from '@clerk/shared/cookie';
import { type CookieAttributes, createCookieHandler } from '@clerk/shared/cookie';

/**
* Determines the eTLD+1 domain, which is where we want the cookies to be set.
Expand All@@ -19,7 +19,7 @@ const eTLDCookie = createCookieHandler('__clerk_test_etld');
export function getCookieDomain(
hostname = window.location.hostname,
cookieHandler = eTLDCookie,
cookieAttributes?: { sameSite?: string; secure?: boolean },
cookieAttributes?: Pick<CookieAttributes, 'sameSite' | 'secure'>,
) {
// only compute it once per session to avoid unnecessary cookie ops
if (cachedETLDPlusOne) {
Expand Down
56 changes: 54 additions & 2 deletions packages/shared/src/cookie.ts
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,57 @@
import Cookies from 'js-cookie';

/**
* Mirrors js-cookie's `CookieAttributes`. Defined locally so the published d.ts is
* self-contained: the bundler drops the js-cookie import from the declaration output
* and `@types/js-cookie` is only a devDependency, so consumers could never resolve
* the original reference.
*/
export interface CookieAttributes {
/**
* Define when the cookie will be removed. Value can be a Number
* which will be interpreted as days from time of creation or a
* Date instance. If omitted, the cookie becomes a session cookie.
*/
expires?: number | Date | undefined;

/**
* Define the path where the cookie is available. Defaults to '/'
*/
path?: string | undefined;

/**
* Define the domain where the cookie is available. Defaults to
* the domain of the page where the cookie was created.
*/
domain?: string | undefined;

/**
* A Boolean indicating if the cookie transmission requires a
* secure protocol (https). Defaults to false.
*/
secure?: boolean | undefined;

/**
* Asserts that a cookie must not be sent with cross-origin requests,
* providing some protection against cross-site request forgery
* attacks (CSRF)
*/
sameSite?: 'strict' | 'Strict' | 'lax' | 'Lax' | 'none' | 'None' | undefined;

/**
* A Boolean indicating whether the cookie is partitioned per top-level
* site (CHIPS). js-cookie serializes it through the attribute passthrough;
* declared explicitly because Clerk sets it at several call sites.
*/
partitioned?: boolean | undefined;

/**
* An attribute which will be serialized, conformably to RFC 6265
* section 5.2.
*/
[property: string]: any;
}

/**
* Creates helper methods for dealing with a specific cookie.
*
Expand All@@ -20,7 +72,7 @@ export function createCookieHandler(cookieName: string) {
/**
* Setting a cookie will use some defaults such as path being set to "/".
*/
set(newValue: string, options: Cookies.CookieAttributes = {}): void {
set(newValue: string, options: CookieAttributes = {}): void {
Cookies.set(cookieName, newValue, options);
},
/**
Expand All@@ -29,7 +81,7 @@ export function createCookieHandler(cookieName: string) {
*
* @see https://github.com/js-cookie/js-cookie#basic-usage
*/
remove(cookieAttributes?: Cookies.CookieAttributes) {
remove(cookieAttributes?: CookieAttributes): void {
Cookies.remove(cookieName, cookieAttributes);
},
};
Expand Down
2 changes: 1 addition & 1 deletion packages/testing/src/cypress/agent-task.ts
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
/// <reference types="cypress" />
/// <reference types="cypress" preserve="true" />
import { type CreateAgentTaskParams, createAgentTestingTask as _createAgentTestingTask } from '../common';

/**
Expand Down
2 changes: 1 addition & 1 deletion packages/testing/src/cypress/custom-commands.ts
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
/// <reference types="cypress" />
/// <reference types="cypress" preserve="true" />
import type { Clerk, SignOutOptions } from '@clerk/shared/types';

import type { ClerkSignInParams } from '../common';
Expand Down
2 changes: 1 addition & 1 deletion packages/testing/src/cypress/setup.ts
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
/// <reference types="cypress" />
/// <reference types="cypress" preserve="true" />
import type { ClerkSetupOptions } from '../common';
import { fetchEnvVars } from '../common';

Expand Down
2 changes: 1 addition & 1 deletion packages/testing/src/cypress/setupClerkTestingToken.ts
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
/// <reference types="cypress" />
/// <reference types="cypress" preserve="true" />
import type { SetupClerkTestingTokenOptions } from '../common';
import { ERROR_MISSING_FRONTEND_API_URL, TESTING_TOKEN_PARAM } from '../common';

Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); })(); fix(shared,testing): ship self-contained published types for shared/cookie and testing/cypress by jacekradko · Pull Request #8841 · clerk/javascript · GitHub
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/shared-cookie-self-contained-types.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
---
'@clerk/shared': patch
---

Ship a self-contained `CookieAttributes` interface from `@clerk/shared/cookie` and use it in `createCookieHandler`'s `set`/`remove` signatures. The published declarations previously referenced `Cookies.CookieAttributes` from js-cookie, which consumers could never resolve (the import was dropped from the declaration output and js-cookie ships no types), causing TS2503 errors under `skipLibCheck: false` and silently degrading the option types to `any` otherwise.
5 changes: 5 additions & 0 deletions .changeset/testing-cypress-preserve-types-reference.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
---
'@clerk/testing': patch
---

Preserve the `/// <reference types="cypress" />` directive in the published `@clerk/testing/cypress` type declarations. TypeScript's declaration emit previously dropped it, so the shipped types relied on the global `Cypress` namespace without declaring the dependency and failed to type-check under `skipLibCheck: false`.
4 changes: 2 additions & 2 deletions packages/clerk-js/src/core/auth/getCookieDomain.ts
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
import { createCookieHandler } from '@clerk/shared/cookie';
import { type CookieAttributes, createCookieHandler } from '@clerk/shared/cookie';

/**
* Determines the eTLD+1 domain, which is where we want the cookies to be set.
Expand All@@ -19,7 +19,7 @@ const eTLDCookie = createCookieHandler('__clerk_test_etld');
export function getCookieDomain(
hostname = window.location.hostname,
cookieHandler = eTLDCookie,
cookieAttributes?: { sameSite?: string; secure?: boolean },
cookieAttributes?: Pick<CookieAttributes, 'sameSite' | 'secure'>,
) {
// only compute it once per session to avoid unnecessary cookie ops
if (cachedETLDPlusOne) {
Expand Down
56 changes: 54 additions & 2 deletions packages/shared/src/cookie.ts
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,57 @@
import Cookies from 'js-cookie';

/**
* Mirrors js-cookie's `CookieAttributes`. Defined locally so the published d.ts is
* self-contained: the bundler drops the js-cookie import from the declaration output
* and `@types/js-cookie` is only a devDependency, so consumers could never resolve
* the original reference.
*/
export interface CookieAttributes {
/**
* Define when the cookie will be removed. Value can be a Number
* which will be interpreted as days from time of creation or a
* Date instance. If omitted, the cookie becomes a session cookie.
*/
expires?: number | Date | undefined;

/**
* Define the path where the cookie is available. Defaults to '/'
*/
path?: string | undefined;

/**
* Define the domain where the cookie is available. Defaults to
* the domain of the page where the cookie was created.
*/
domain?: string | undefined;

/**
* A Boolean indicating if the cookie transmission requires a
* secure protocol (https). Defaults to false.
*/
secure?: boolean | undefined;

/**
* Asserts that a cookie must not be sent with cross-origin requests,
* providing some protection against cross-site request forgery
* attacks (CSRF)
*/
sameSite?: 'strict' | 'Strict' | 'lax' | 'Lax' | 'none' | 'None' | undefined;

/**
* A Boolean indicating whether the cookie is partitioned per top-level
* site (CHIPS). js-cookie serializes it through the attribute passthrough;
* declared explicitly because Clerk sets it at several call sites.
*/
partitioned?: boolean | undefined;

/**
* An attribute which will be serialized, conformably to RFC 6265
* section 5.2.
*/
[property: string]: any;
}

/**
* Creates helper methods for dealing with a specific cookie.
*
Expand All@@ -20,7 +72,7 @@ export function createCookieHandler(cookieName: string) {
/**
* Setting a cookie will use some defaults such as path being set to "/".
*/
set(newValue: string, options: Cookies.CookieAttributes = {}): void {
set(newValue: string, options: CookieAttributes = {}): void {
Cookies.set(cookieName, newValue, options);
},
/**
Expand All@@ -29,7 +81,7 @@ export function createCookieHandler(cookieName: string) {
*
* @see https://github.com/js-cookie/js-cookie#basic-usage
*/
remove(cookieAttributes?: Cookies.CookieAttributes) {
remove(cookieAttributes?: CookieAttributes): void {
Cookies.remove(cookieName, cookieAttributes);
},
};
Expand Down
2 changes: 1 addition & 1 deletion packages/testing/src/cypress/agent-task.ts
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
/// <reference types="cypress" />
/// <reference types="cypress" preserve="true" />
import { type CreateAgentTaskParams, createAgentTestingTask as _createAgentTestingTask } from '../common';

/**
Expand Down
2 changes: 1 addition & 1 deletion packages/testing/src/cypress/custom-commands.ts
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
/// <reference types="cypress" />
/// <reference types="cypress" preserve="true" />
import type { Clerk, SignOutOptions } from '@clerk/shared/types';

import type { ClerkSignInParams } from '../common';
Expand Down
2 changes: 1 addition & 1 deletion packages/testing/src/cypress/setup.ts
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
/// <reference types="cypress" />
/// <reference types="cypress" preserve="true" />
import type { ClerkSetupOptions } from '../common';
import { fetchEnvVars } from '../common';

Expand Down
2 changes: 1 addition & 1 deletion packages/testing/src/cypress/setupClerkTestingToken.ts
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
/// <reference types="cypress" />
/// <reference types="cypress" preserve="true" />
import type { SetupClerkTestingTokenOptions } from '../common';
import { ERROR_MISSING_FRONTEND_API_URL, TESTING_TOKEN_PARAM } from '../common';

Expand Down
Loading