Skip to content
Open
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
4 changes: 2 additions & 2 deletions yaml/_loader_state.ts
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ export interface LoaderStateOptions {
/** compatibility with JSON.parse behaviour. */
allowDuplicateKeys?: boolean;
/** function to call on warning messages. */
onWarning?(error: Error): void;
onWarning?(error: SyntaxError): void;
}

const ESCAPED_HEX_LENGTHS = new Map<number, number>([
Expand Down Expand Up @@ -229,7 +229,7 @@ export class LoaderState {
lineIndent = 0;
lineStart = 0;
line = 0;
onWarning: ((error: Error) => void) | undefined;
onWarning: ((error: SyntaxError) => void) | undefined;
allowDuplicateKeys: boolean;
implicitTypes: Type<"scalar">[];
typeMap: TypeMap;
Expand Down
15 changes: 10 additions & 5 deletions yaml/parse.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,10 @@ export interface ParseOptions {
*/
allowDuplicateKeys?: boolean;
/**
* If defined, a function to call on warning messages taking an
* {@linkcode Error} as its only argument.
* If defined, a function to call on warning messages taking a
* {@linkcode SyntaxError} as its only argument.
*/
onWarning?(error: Error): void;
onWarning?(error: SyntaxError): void;
}

function sanitizeInput(input: string) {
Expand Down Expand Up @@ -64,7 +64,8 @@ function sanitizeInput(input: string) {
* assertEquals(data, { id: 1, name: "Alice" });
* ```
*
* @throws {SyntaxError} Throws error on invalid YAML.
* @throws {SyntaxError} Throws if the YAML is invalid or contains more than
* one document.
* @param content YAML string to parse.
* @param options Parsing options.
* @returns Parsed document.
Expand Down Expand Up @@ -111,11 +112,15 @@ export function parse(
* assertEquals(data, [ { id: 1, name: "Alice" }, { id: 2, name: "Bob" }, { id: 3, name: "Eve" }]);
* ```
*
* @throws {SyntaxError} Throws if the YAML is invalid.
* @param content YAML string to parse.
* @param options Parsing options.
* @returns Array of parsed documents.
*/
export function parseAll(content: string, options: ParseOptions = {}): unknown {
export function parseAll(
content: string,
options: ParseOptions = {},
): unknown[] {
content = sanitizeInput(content);
const state = new LoaderState(content, {
...options,
Expand Down
8 changes: 8 additions & 0 deletions yaml/parse_test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,14 @@ regexp: !!js/regexp bar
},
});

Deno.test({
name: "parseAll() throws SyntaxError on invalid YAML",
fn() {
assertThrows(() => parseAll(`"`), SyntaxError);
assertThrows(() => parseAll(`---\nfoo: bar\n---\n"`), SyntaxError);
},
});

Deno.test({
name: "parse() handles __proto__",
async fn() {
Expand Down
9 changes: 7 additions & 2 deletions yaml/unstable_parse.ts
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,8 @@ function sanitizeInput(input: string) {
* assertEquals(data, { id: 1, name: "Alice" });
* ```
*
* @throws {SyntaxError} Throws error on invalid YAML.
* @throws {SyntaxError} Throws if the YAML is invalid or contains more than
* one document.
* @param content YAML string to parse.
* @param options Parsing options.
* @returns Parsed document.
Expand Down Expand Up @@ -99,11 +100,15 @@ export function parse(
* assertEquals(data, [ { id: 1, name: "Alice" }, { id: 2, name: "Bob" }, { id: 3, name: "Eve" }]);
* ```
*
* @throws {SyntaxError} Throws if the YAML is invalid.
* @param content YAML string to parse.
* @param options Parsing options.
* @returns Array of parsed documents.
*/
export function parseAll(content: string, options: ParseOptions = {}): unknown {
export function parseAll(
content: string,
options: ParseOptions = {},
): unknown[] {
content = sanitizeInput(content);
const state = new LoaderState(content, {
...options,
Expand Down
Loading