Milestone 0: import zappier billing, Verae middleware, and Zapier research
Compose-ready workspace: packages/zappier (rate card, portal, Stripe), packages/verae-zapier-middleware (timestamp + NATS), packages/verae-zapier (CLI app), vendor/zapier-platform, and research/zapier vendor corpus. Gate 0 structure checks pass. Product code and research are not yet wired.
This commit is contained in:
commit
b4150c8250
1364 changed files with 6814366 additions and 0 deletions
61
vendor/zapier-platform/schema-to-ts/src/comments.ts
vendored
Normal file
61
vendor/zapier-platform/schema-to-ts/src/comments.ts
vendored
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
import type { Token, Tokens, TokensList } from 'marked';
|
||||
|
||||
import { lexer } from 'marked';
|
||||
import wrap from 'word-wrap';
|
||||
|
||||
const SINGLE_LINE_CONTENT_WIDTH = 60;
|
||||
const MULTILINE_DEFAULT_CONTENT_WIDTH = 65;
|
||||
|
||||
/**
|
||||
* Zapier-platform-schemas is thoroughly documented with Markdown
|
||||
* content. This function converts this content into TS/JS block
|
||||
* comments (i.e. /** style), preserving even tables and bulleted lists,
|
||||
* but adding sensible line wrapping for readability.
|
||||
*/
|
||||
export const commentToTsDocString = (comment: string): string => {
|
||||
const stripped = comment?.trim();
|
||||
if (!stripped) return '';
|
||||
|
||||
const tokens = lexer(stripped);
|
||||
const lines = reflowLines(tokens);
|
||||
if (lines.length === 1 && lines[0]!.length < SINGLE_LINE_CONTENT_WIDTH) {
|
||||
return `/** ${stripped} */\n`;
|
||||
}
|
||||
const docsLines = lines.map((line) => ` * ${line}`).join('\n');
|
||||
return `/**\n${docsLines}\n */\n`;
|
||||
};
|
||||
|
||||
// Exported only for testing purposes.
|
||||
export const reflowLines = (
|
||||
tokens: TokensList,
|
||||
{ width = MULTILINE_DEFAULT_CONTENT_WIDTH } = {},
|
||||
): string[] => {
|
||||
return tokens.flatMap((t) => reflowToken(t, width));
|
||||
};
|
||||
|
||||
const reflowToken = (token: Token, width: number): string[] => {
|
||||
if (isSolitaryLink(token)) {
|
||||
const link = token.tokens[0];
|
||||
const docLink = `[${link.text}](${link.href})`;
|
||||
return [docLink];
|
||||
}
|
||||
return wrap(token.raw, { width, indent: '', trim: true }).split(/\n/);
|
||||
};
|
||||
|
||||
const isSolitaryLink = (
|
||||
token: Token,
|
||||
): token is Tokens.Paragraph & { tokens: [Tokens.Link] } =>
|
||||
token.type === 'paragraph' &&
|
||||
token.tokens?.length === 1 &&
|
||||
token.tokens[0]?.type === 'link';
|
||||
|
||||
export function docStringLines(
|
||||
comment: string | undefined,
|
||||
trailingContent?: string,
|
||||
): string[] | undefined {
|
||||
if (comment === undefined) {
|
||||
return undefined;
|
||||
}
|
||||
const tokens = lexer(comment);
|
||||
return [reflowLines(tokens).join('\n') + (trailingContent ?? '')];
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue