Replace YAML parser
parent
62e98b1fd8
commit
1d5c6f9277
|
@ -15,7 +15,7 @@ export type { Completion, CompletionResult } from "@codemirror/autocomplete";
|
||||||
|
|
||||||
export { styleTags, Tag, tagHighlighter, tags } from "@lezer/highlight";
|
export { styleTags, Tag, tagHighlighter, tags } from "@lezer/highlight";
|
||||||
|
|
||||||
export * as YAML from "https://deno.land/std@0.189.0/yaml/mod.ts";
|
export * as YAML from "https://esm.sh/js-yaml@4.1.0";
|
||||||
export * as path from "https://deno.land/std@0.189.0/path/mod.ts";
|
export * as path from "https://deno.land/std@0.189.0/path/mod.ts";
|
||||||
|
|
||||||
export type {
|
export type {
|
||||||
|
|
|
@ -1,15 +1,48 @@
|
||||||
import { SysCallMapping } from "../../plugos/system.ts";
|
import { SysCallMapping } from "../../plugos/system.ts";
|
||||||
import { YAML } from "../../web/deps.ts";
|
import { YAML } from "../../web/deps.ts";
|
||||||
|
|
||||||
|
type YamlStringifyOptions = {
|
||||||
|
/** indentation width to use (in spaces). */
|
||||||
|
indent?: number;
|
||||||
|
/** when true, will not add an indentation level to array elements */
|
||||||
|
noArrayIndent?: boolean;
|
||||||
|
/** do not throw on invalid types (like function in the safe schema) and skip pairs and single values with such types. */
|
||||||
|
skipInvalid?: boolean;
|
||||||
|
/** specifies level of nesting, when to switch from block to flow style for collections. -1 means block style everwhere */
|
||||||
|
flowLevel?: number;
|
||||||
|
/** if true, sort keys when dumping YAML. If a function, use the function to sort the keys. (default: false) */
|
||||||
|
sortKeys?: boolean;
|
||||||
|
/** set max line width. (default: 80) */
|
||||||
|
lineWidth?: number;
|
||||||
|
/** if true, don't convert duplicate objects into references (default: false) */
|
||||||
|
noRefs?: boolean;
|
||||||
|
/** if true don't try to be compatible with older yaml versions. Currently: don't quote "yes", "no" and so on, as required for YAML 1.1 (default: false) */
|
||||||
|
noCompatMode?: boolean;
|
||||||
|
/**
|
||||||
|
* if true flow sequences will be condensed, omitting the space between `key: value` or `a, b`. Eg. `'[a,b]'` or `{a:{b:c}}`.
|
||||||
|
* Can be useful when using yaml for pretty URL query params as spaces are %-encoded. (default: false).
|
||||||
|
*/
|
||||||
|
condenseFlow?: boolean;
|
||||||
|
/** strings will be quoted using this quoting style. If you specify single quotes, double quotes will still be used for non-printable characters. (default: `'`) */
|
||||||
|
quotingType?: "'" | '"';
|
||||||
|
/** if true, all non-key strings will be quoted even if they normally don't need to. (default: false) */
|
||||||
|
forceQuotes?: boolean;
|
||||||
|
};
|
||||||
|
|
||||||
export function yamlSyscalls(): SysCallMapping {
|
export function yamlSyscalls(): SysCallMapping {
|
||||||
return {
|
return {
|
||||||
"yaml.parse": (_ctx, text: string): any => {
|
"yaml.parse": (_ctx, text: string): any => {
|
||||||
return YAML.parse(text);
|
return YAML.load(text);
|
||||||
},
|
},
|
||||||
"yaml.stringify": (_ctx, obj: any): string => {
|
"yaml.stringify": (
|
||||||
return YAML.stringify(obj, {
|
_ctx,
|
||||||
noArrayIndent: true,
|
obj: any,
|
||||||
|
options: YamlStringifyOptions = {},
|
||||||
|
): string => {
|
||||||
|
return YAML.dump(obj, {
|
||||||
|
quotingType: '"',
|
||||||
noCompatMode: true,
|
noCompatMode: true,
|
||||||
|
...options,
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
|
@ -24,7 +24,7 @@ export function parseYamlSettings(settingsMarkdown: string): {
|
||||||
}
|
}
|
||||||
const yaml = match[1];
|
const yaml = match[1];
|
||||||
try {
|
try {
|
||||||
return YAML.parse(yaml) as {
|
return YAML.load(yaml) as {
|
||||||
[key: string]: any;
|
[key: string]: any;
|
||||||
};
|
};
|
||||||
} catch (e: any) {
|
} catch (e: any) {
|
||||||
|
|
|
@ -41,7 +41,7 @@ export type IndexTreeEvent = {
|
||||||
};
|
};
|
||||||
|
|
||||||
export type PublishEvent = {
|
export type PublishEvent = {
|
||||||
uri: string;
|
uri?: string;
|
||||||
// Page name
|
// Page name
|
||||||
name: string;
|
name: string;
|
||||||
};
|
};
|
||||||
|
|
|
@ -4,7 +4,7 @@ import {
|
||||||
replaceNodesMatchingAsync,
|
replaceNodesMatchingAsync,
|
||||||
} from "$sb/lib/tree.ts";
|
} from "$sb/lib/tree.ts";
|
||||||
|
|
||||||
import { YAML } from "$sb/plugos-syscall/mod.ts";
|
import { YAML } from "$sb/syscalls.ts";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Extracts attributes from a tree, optionally cleaning them out of the tree.
|
* Extracts attributes from a tree, optionally cleaning them out of the tree.
|
||||||
|
|
|
@ -3,7 +3,7 @@ import { YAML } from "../../common/deps.ts";
|
||||||
globalThis.syscall = (name: string, ...args: readonly any[]) => {
|
globalThis.syscall = (name: string, ...args: readonly any[]) => {
|
||||||
switch (name) {
|
switch (name) {
|
||||||
case "yaml.parse":
|
case "yaml.parse":
|
||||||
return Promise.resolve(YAML.parse(args[0]));
|
return Promise.resolve(YAML.load(args[0]));
|
||||||
default:
|
default:
|
||||||
throw Error(`Not implemented in tests: ${name}`);
|
throw Error(`Not implemented in tests: ${name}`);
|
||||||
}
|
}
|
||||||
|
|
|
@ -51,7 +51,7 @@ export async function lintYAML({ tree }: LintEvent): Promise<LintDiagnostic[]> {
|
||||||
return diagnostics;
|
return diagnostics;
|
||||||
}
|
}
|
||||||
|
|
||||||
const errorRegex = /at line (\d+),? column (\d+)/;
|
const errorRegex = /\((\d+):(\d+)\)/;
|
||||||
|
|
||||||
async function lintYaml(
|
async function lintYaml(
|
||||||
yamlText: string,
|
yamlText: string,
|
||||||
|
|
|
@ -25,6 +25,9 @@ export async function publishCommand() {
|
||||||
}
|
}
|
||||||
|
|
||||||
async function publish(pageName: string, uris: string[]) {
|
async function publish(pageName: string, uris: string[]) {
|
||||||
|
const broadcastResults = await events.dispatchEvent(`share:_`, {
|
||||||
|
name: pageName,
|
||||||
|
} as PublishEvent);
|
||||||
for (const uri of uris) {
|
for (const uri of uris) {
|
||||||
const publisher = uri.split(":")[0];
|
const publisher = uri.split(":")[0];
|
||||||
const results = await events.dispatchEvent(
|
const results = await events.dispatchEvent(
|
||||||
|
@ -34,7 +37,7 @@ async function publish(pageName: string, uris: string[]) {
|
||||||
name: pageName,
|
name: pageName,
|
||||||
} as PublishEvent,
|
} as PublishEvent,
|
||||||
);
|
);
|
||||||
if (results.length === 0) {
|
if (broadcastResults.length === 0 && results.length === 0) {
|
||||||
throw new Error(`Unsupported publisher: ${publisher} for URI: ${uri}`);
|
throw new Error(`Unsupported publisher: ${publisher} for URI: ${uri}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -505,7 +505,6 @@ export class HttpServer {
|
||||||
return next();
|
return next();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
console.log("Requested path to proxy", url, request.method);
|
|
||||||
if (url.startsWith("localhost")) {
|
if (url.startsWith("localhost")) {
|
||||||
url = `http://${url}`;
|
url = `http://${url}`;
|
||||||
} else {
|
} else {
|
||||||
|
@ -574,3 +573,11 @@ function utcDateString(mtime: number): string {
|
||||||
function authCookieName(host: string) {
|
function authCookieName(host: string) {
|
||||||
return `auth:${host}`;
|
return `auth:${host}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function headersToJson(headers: Headers) {
|
||||||
|
let headersObj: any = {};
|
||||||
|
for (const [key, value] of headers.entries()) {
|
||||||
|
headersObj[key] = value;
|
||||||
|
}
|
||||||
|
return JSON.stringify(headersObj);
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue