Skip to content

Commit

Permalink
fix: add types for the context (#505)
Browse files Browse the repository at this point in the history
  • Loading branch information
wkillerud authored Sep 23, 2024
1 parent 3bebbe1 commit 48ea2d4
Show file tree
Hide file tree
Showing 3 changed files with 76 additions and 10 deletions.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,6 @@ tmp/**/*
.idea/**/*
coverage
dist
types
*.d.ts
!podium.d.ts
.tap
11 changes: 2 additions & 9 deletions fixup.js
Original file line number Diff line number Diff line change
@@ -1,19 +1,12 @@
import fs from 'node:fs';
import path from 'node:path';

let fixup = path.join(process.cwd(), 'types', 'podium.d.ts');
let module = path.join(process.cwd(), 'types', 'layout.d.ts');

fs.writeFileSync(
module,
/* ts */ `
declare global {
namespace Express {
export interface Response {
podiumSend(fragment: string, ...args: unknown[]): Response;
}
}
}
`${fs.readFileSync(fixup, 'utf-8')}
${fs.readFileSync(module, 'utf-8')}`,
'utf-8',
);
72 changes: 72 additions & 0 deletions types/podium.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
declare global {
namespace Express {
export interface PodiumHttpIncomingParameters {
[key: string]: unknown;
}

/**
* In a layout setting the values on the context are serialized to HTTP headers
* and mainly intended as an "outbox" for information that is sent to the podlet.
*/
export interface PodiumHttpIncomingContext {
/**
* @see https://podium-lib.io/docs/guides/context#default-context-variables
*/
'podium-debug'?: string;
/**
* Does user agent sniffing to try to guess the visitor's device type.
* @see https://podium-lib.io/docs/guides/context#default-context-variables
*/
'podium-device-type'?: string;
/**
* Locale information from the layout.
* @see https://podium-lib.io/docs/guides/context#default-context-variables
*/
'podium-locale'?: string;
/**
* Used to calculate the podlet's public URL when proxied behind a layout.
* @see https://podium-lib.io/docs/guides/context#construct-public-urls
*/
'podium-mount-origin'?: string;
/**
* Used to calculate the podlet's public URL when proxied behind a layout.
* @see https://podium-lib.io/docs/guides/context#construct-public-urls
*/
'podium-mount-pathname'?: string;
/**
* Used to calculate the podlet's public URL when proxied behind a layout.
* @see https://podium-lib.io/docs/guides/context#construct-public-urls
*/
'podium-public-pathname'?: string;
/**
* Name of the caller.
*/
'podium-requested-by'?: string;
[key: string]: unknown;
}

export interface PodiumHttpIncomingViewParameters {
[key: string]: unknown;
}

export interface Locals {
podium: HttpIncoming<
PodiumHttpIncomingParameters,
PodiumHttpIncomingContext,
PodiumHttpIncomingViewParameters
>;
}

export interface Response {
/**
* This method wraps the provided fragment in a default HTML document before dispatching.
*
* @param markup The HTML contents of the document
* @param args Parameters sent to the template function
*
* @see https://podium-lib.io/docs/api/layout#respodiumsendfragment
*/
podiumSend(fragment: string, ...args: unknown[]): Response;
}
}
}

0 comments on commit 48ea2d4

Please sign in to comment.