@adobe/helix-pipeline
Version:
This project provides helper functions and default implementations for creating Hypermedia Processing Pipelines.
410 lines (408 loc) • 9.68 kB
TypeScript
/*
* Copyright 2018 Adobe. All rights reserved.
* This file is licensed to you under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. You may obtain a copy
* of the License at http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under
* the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
* OF ANY KIND, either express or implied. See the License for the specific language
* governing permissions and limitations under the License.
*/
/**
* The context thingie.
*/
export interface Context {
/**
* An error message that has been generated during pipeline processing.
* When this property is present, all other values can be ignored.
*/
error?:
| string
| {
[k: string]: unknown;
};
request?: Request;
content?: Content;
response?: Response;
}
/**
* The HTTP Request
*/
export interface Request {
/**
* The path and request parameters of the client request URL.
*/
url?: string;
/**
* The path of the client request URL
*/
path?: string;
/**
* The part of the client path that is relative to the rootPath.
*/
pathInfo?: string;
/**
* The request root path of the current strain.
*/
rootPath?: string;
/**
* The selector (sub-type indicator).
*/
selector?: string;
/**
* The extension of the requested resource.
*/
extension?: string;
/**
* The HTTP method of the request. Note: method names can be lower-case.
*/
method?: string;
/**
* The HTTP headers of the request. Note: all header names will be lower-case.
*/
headers?: {
[k: string]: string;
};
/**
* The passed through (and filtered) URL parameters of the request.
*/
params?: {
[k: string]: string | string[];
};
/**
* The original query string.
*/
queryString?: string;
}
/**
* The content as retrieved from the repository and enriched in the pipeline.
*/
export interface Content {
/**
* List of URIs that have been retrieved for this piece of content
*/
sources?: string[];
/**
* The content body of the retrieved source document
*/
body?: string;
mdast?: MDAST;
/**
* The DOM-compatible representation of the document's inner HTML
*/
document?: {
[k: string]: unknown;
};
/**
* The JSON object to emit.
*/
json?: {
[k: string]: unknown;
};
/**
* The XML object to emit. See xmlbuilder-js for syntax.
*/
xml?: {
[k: string]: unknown;
};
meta?: null | {
/**
* The CSS class to use for the section instead of the default `hlx-section` one
*/
class?: string;
/**
* The element tag name to use for the section instead of the default `div` one (i.e. `section`, `main`, `aside`)
*/
tagname?: string;
/**
* The inferred class names for the section
*/
types?: string[];
/**
* Extracted title of the document
*/
title?: string;
/**
* Extracted first paragraph of the document
*/
intro?: string;
/**
* Path (can be relative) to the first image in the document
*/
image?: string;
[k: string]: unknown;
};
/**
* Extracted title of the document
*/
title?: string;
/**
* Extracted first paragraph of the document
*/
intro?: string;
/**
* Path (can be relative) to the first image in the document
*/
image?: string;
/**
* Custom object that can hold any user defined data.
*/
data?: {
[k: string]: unknown;
};
}
/**
* A node in the Markdown AST
*/
export interface MDAST {
/**
* The node type of the MDAST node
*/
type?:
| "root"
| "paragraph"
| "text"
| "heading"
| "thematicBreak"
| "blockquote"
| "list"
| "listItem"
| "table"
| "tableRow"
| "tableCell"
| "html"
| "code"
| "yaml"
| "definition"
| "footnoteDefinition"
| "emphasis"
| "strong"
| "delete"
| "inlineCode"
| "break"
| "link"
| "image"
| "linkReference"
| "imageReference"
| "footnote"
| "footnoteReference"
| "embed"
| "dataEmbed"
| "section"
| "icon";
children?: (
| MDAST
| {
/**
* The MDAST node type. Each section can be treated as a standalone document.
*/
type?: "root";
position?: Position;
/**
* The AST nodes making up the section. Section dividers are not included.
*/
children?: MDAST[];
meta?: null | {
/**
* The CSS class to use for the section instead of the default `hlx-section` one
*/
class?: string;
/**
* The element tag name to use for the section instead of the default `div` one (i.e. `section`, `main`, `aside`)
*/
tagname?: string;
/**
* The inferred class names for the section
*/
types?: string[];
/**
* Extracted title of the document
*/
title?: string;
/**
* Extracted first paragraph of the document
*/
intro?: string;
/**
* Path (can be relative) to the first image in the document
*/
image?: string;
[k: string]: unknown;
};
/**
* Extracted title of the document
*/
title?: string;
/**
* Extracted first paragraph of the document
*/
intro?: string;
/**
* Path (can be relative) to the first image in the document
*/
image?: string;
}
)[];
position?: Position;
/**
* The string value of the node, if it is a terminal node.
*/
value?: string;
/**
* The payload of a frontmatter/yaml block
*/
payload?: {
[k: string]: unknown;
};
/**
* The heading level
*/
depth?: number;
/**
* Is the list ordered
*/
ordered?: boolean;
/**
* Starting item of the list
*/
start?: null | number;
/**
* A spread field can be present. It represents that any of its items is separated by a blank line from its siblings or contains two or more children (when true), or not (when false or not present).
*/
spread?: null | boolean;
/**
* A checked field can be present. It represents whether the item is done (when true), not done (when false), or indeterminate or not applicable (when null or not present).
*/
checked?: null | boolean;
/**
* For tables, an align field can be present. If present, it must be a list of alignTypes. It represents how cells in columns are aligned.
*/
align?: ("left" | "right" | "center" | null)[];
/**
* For code, a lang field can be present. It represents the language of computer code being marked up.
*/
lang?: null | string;
/**
* For associations, an identifier field must be present. It can match an identifier field on another node.
*/
identifier?: string;
/**
* For associations, a label field can be present. It represents the original value of the normalised identifier field.
*/
label?: string;
/**
* For resources, an url field must be present. It represents a URL to the referenced resource.
*/
url?: string;
meta?: null | {
/**
* The CSS class to use for the section instead of the default `hlx-section` one
*/
class?: string;
/**
* The element tag name to use for the section instead of the default `div` one (i.e. `section`, `main`, `aside`)
*/
tagname?: string;
/**
* The inferred class names for the section
*/
types?: string[];
/**
* Extracted title of the document
*/
title?: string;
/**
* Extracted first paragraph of the document
*/
intro?: string;
/**
* Path (can be relative) to the first image in the document
*/
image?: string;
[k: string]: unknown;
};
/**
* Extracted title of the document
*/
title?: null | string;
/**
* Icon code
*/
code?: string;
/**
* Extracted first paragraph of the document
*/
intro?: null | string;
/**
* Path (can be relative) to the first image in the document
*/
image?: null | string;
/**
* The inferred class names for the section
*/
types?: string[];
/**
* An alt field should be present. It represents equivalent content for environments that cannot represent the node as intended.
*/
alt?: string | null;
/**
* Represents the explicitness of a reference.
*/
referenceType?: "shortcut" | "collapsed" | "full";
/**
* data is guaranteed to never be specified by unist or specifications implementing unist. Free data space.
*/
data?: {
[k: string]: unknown;
};
}
/**
* Marks the position of an AST node in the original text flow
*/
export interface Position {
start?: TextCoordinates;
end?: TextCoordinates;
indent?: unknown[];
}
/**
* A position in a text document
*/
export interface TextCoordinates {
/**
* Line number
*/
line?: number;
/**
* Column number
*/
column?: number;
/**
* Character in the entire document
*/
offset?: number;
}
/**
* The HTTP response object
*/
export interface Response {
/**
* The HTTP status code
*/
status?: number;
body?: {
[k: string]: unknown;
};
/**
* The DOM-compatible representation of the response document
*/
document?: {
[k: string]: unknown;
};
/**
* The HTTP headers of the response
*/
headers?: {
[k: string]: string;
};
}