UNPKG

@lonu/stc

Version:

A tool for converting OpenApi/Swagger/Apifox into code.

92 lines (91 loc) 2.65 kB
// Ported from js-yaml v3.13.1: // https://github.com/nodeca/js-yaml/commit/665aadda42349dcae869f12040d9b10ef18d12da // Copyright 2011-2015 by Vitaly Puzrin. All rights reserved. MIT license. // Copyright 2018-2026 the Deno authors. MIT license. // This module is browser compatible. import { isEOL } from "./_chars.js"; import { LoaderState } from "./_loader_state.js"; import { SCHEMA_MAP } from "./_schema.js"; function sanitizeInput(input) { input = String(input); if (input.length > 0) { // Add trailing `\n` if not exists if (!isEOL(input.charCodeAt(input.length - 1))) input += "\n"; // Strip BOM if (input.charCodeAt(0) === 0xfeff) input = input.slice(1); } return input; } /** * Parse and return a YAML string as a parsed YAML document object. * * Note: This does not support functions. Untrusted data is safe to parse. * * @example Usage * ```ts * import { parse } from "@std/yaml/parse"; * import { assertEquals } from "@std/assert"; * * const data = parse(` * id: 1 * name: Alice * `); * * assertEquals(data, { id: 1, name: "Alice" }); * ``` * * @throws {YamlSyntaxError} 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. */ export function parse(content, options = {}) { content = sanitizeInput(content); const state = new LoaderState(content, { ...options, schema: SCHEMA_MAP.get(options.schema), }); const documents = state.readDocuments({ singleDocument: true }); const document = documents.next().value; documents.next(); return document ?? null; } /** * Same as {@linkcode parse}, but understands multi-document YAML sources, and * returns multiple parsed YAML document objects. * * @example Usage * ```ts * import { parseAll } from "@std/yaml/parse"; * import { assertEquals } from "@std/assert"; * * const data = parseAll(` * --- * id: 1 * name: Alice * --- * id: 2 * name: Bob * --- * id: 3 * name: Eve * `); * assertEquals(data, [ { id: 1, name: "Alice" }, { id: 2, name: "Bob" }, { id: 3, name: "Eve" }]); * ``` * * @throws {YamlSyntaxError} 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, options = {}) { content = sanitizeInput(content); const state = new LoaderState(content, { ...options, schema: SCHEMA_MAP.get(options.schema), }); return [...state.readDocuments()]; }