deno.land / std@0.166.0 / encoding / _yaml / type / function.ts

نووسراو ببینە
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
// Ported and adapted from js-yaml-js-types v1.0.0:// https://github.com/nodeca/js-yaml-js-types/tree/ac537e7bbdd3c2cbbd9882ca3919c520c2dc022b// Copyright 2011-2015 by Vitaly Puzrin. All rights reserved. MIT license.// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license.
import { Type } from "../type.ts";import type { Any } from "../utils.ts";
// Note: original implementation used Esprima to handle functions// To avoid dependencies, we'll just try to check if we can construct a function from given stringfunction reconstructFunction(code: string) { const func = new Function(`return ${code}`)(); if (!(func instanceof Function)) { throw new TypeError(`Expected function but got ${typeof func}: ${code}`); } return func;}
export const func = new Type("tag:yaml.org,2002:js/function", { kind: "scalar", resolve(data: Any) { if (data === null) { return false; } try { reconstructFunction(`${data}`); return true; } catch (_err) { return false; } }, construct(data: string) { return reconstructFunction(data); }, predicate(object: unknown) { return object instanceof Function; }, represent(object: (...args: Any[]) => Any) { return object.toString(); },});
std

Version Info

Tagged at
a year ago