@procedures/json 0.0.0-stage → 0.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +104 -2
- package/dist/.tsbuildinfo +1 -0
- package/dist/diff.d.ts +18 -0
- package/dist/diff.d.ts.map +1 -0
- package/dist/diff.js +66 -0
- package/dist/diff.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/merge.d.ts +14 -0
- package/dist/merge.d.ts.map +1 -0
- package/dist/merge.js +34 -0
- package/dist/merge.js.map +1 -0
- package/dist/module.d.ts +21 -0
- package/dist/module.d.ts.map +1 -0
- package/dist/module.js +192 -0
- package/dist/module.js.map +1 -0
- package/dist/patch.d.ts +23 -0
- package/dist/patch.d.ts.map +1 -0
- package/dist/patch.js +137 -0
- package/dist/patch.js.map +1 -0
- package/dist/path.d.ts +38 -0
- package/dist/path.d.ts.map +1 -0
- package/dist/path.js +157 -0
- package/dist/path.js.map +1 -0
- package/dist/pointer.d.ts +22 -0
- package/dist/pointer.d.ts.map +1 -0
- package/dist/pointer.js +70 -0
- package/dist/pointer.js.map +1 -0
- package/dist/procedures/json/diff.d.ts +12 -0
- package/dist/procedures/json/diff.d.ts.map +1 -0
- package/dist/procedures/json/diff.js +17 -0
- package/dist/procedures/json/diff.js.map +1 -0
- package/dist/procedures/json/index.d.ts +6 -0
- package/dist/procedures/json/index.d.ts.map +1 -0
- package/dist/procedures/json/index.js +6 -0
- package/dist/procedures/json/index.js.map +1 -0
- package/dist/procedures/json/merge.d.ts +12 -0
- package/dist/procedures/json/merge.d.ts.map +1 -0
- package/dist/procedures/json/merge.js +17 -0
- package/dist/procedures/json/merge.js.map +1 -0
- package/dist/procedures/json/patch.d.ts +12 -0
- package/dist/procedures/json/patch.d.ts.map +1 -0
- package/dist/procedures/json/patch.js +20 -0
- package/dist/procedures/json/patch.js.map +1 -0
- package/dist/procedures/json/query.d.ts +12 -0
- package/dist/procedures/json/query.d.ts.map +1 -0
- package/dist/procedures/json/query.js +28 -0
- package/dist/procedures/json/query.js.map +1 -0
- package/dist/procedures/json/validate.d.ts +12 -0
- package/dist/procedures/json/validate.d.ts.map +1 -0
- package/dist/procedures/json/validate.js +18 -0
- package/dist/procedures/json/validate.js.map +1 -0
- package/dist/procedures/yaml/index.d.ts +3 -0
- package/dist/procedures/yaml/index.d.ts.map +1 -0
- package/dist/procedures/yaml/index.js +3 -0
- package/dist/procedures/yaml/index.js.map +1 -0
- package/dist/procedures/yaml/parse.d.ts +12 -0
- package/dist/procedures/yaml/parse.d.ts.map +1 -0
- package/dist/procedures/yaml/parse.js +14 -0
- package/dist/procedures/yaml/parse.js.map +1 -0
- package/dist/procedures/yaml/stringify.d.ts +11 -0
- package/dist/procedures/yaml/stringify.d.ts.map +1 -0
- package/dist/procedures/yaml/stringify.js +15 -0
- package/dist/procedures/yaml/stringify.js.map +1 -0
- package/dist/register.d.ts +6 -0
- package/dist/register.d.ts.map +1 -0
- package/dist/register.js +8 -0
- package/dist/register.js.map +1 -0
- package/dist/schema.d.ts +38 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +92 -0
- package/dist/schema.js.map +1 -0
- package/dist/types.d.ts +90 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +8 -0
- package/dist/types.js.map +1 -0
- package/dist/value.d.ts +61 -0
- package/dist/value.d.ts.map +1 -0
- package/dist/value.js +124 -0
- package/dist/value.js.map +1 -0
- package/dist/yaml.d.ts +35 -0
- package/dist/yaml.d.ts.map +1 -0
- package/dist/yaml.js +111 -0
- package/dist/yaml.js.map +1 -0
- package/package.json +81 -3
- package/src/diff.ts +58 -0
- package/src/index.ts +14 -0
- package/src/merge.ts +34 -0
- package/src/module.ts +236 -0
- package/src/patch.ts +132 -0
- package/src/path.ts +155 -0
- package/src/pointer.ts +70 -0
- package/src/procedures/json/diff.ts +19 -0
- package/src/procedures/json/index.ts +5 -0
- package/src/procedures/json/merge.ts +19 -0
- package/src/procedures/json/patch.ts +21 -0
- package/src/procedures/json/query.ts +29 -0
- package/src/procedures/json/validate.ts +20 -0
- package/src/procedures/yaml/index.ts +2 -0
- package/src/procedures/yaml/parse.ts +16 -0
- package/src/procedures/yaml/stringify.ts +17 -0
- package/src/register.ts +10 -0
- package/src/schema.ts +104 -0
- package/src/types.ts +127 -0
- package/src/value.ts +143 -0
- package/src/yaml.ts +128 -0
package/dist/path.d.ts
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A simple path query: a small part of JSONPath, without filters and scripts.
|
|
3
|
+
*
|
|
4
|
+
* | Part | Meaning |
|
|
5
|
+
* |---|---|
|
|
6
|
+
* | `$` | The whole value. It is optional at the start. |
|
|
7
|
+
* | `.name` or `name` | The member `name` of an object. A name has letters, digits, `_`, `$` and `-`. |
|
|
8
|
+
* | `["a.b"]` or `['a.b']` | The member with any key. `\` escapes a quote or a backslash. |
|
|
9
|
+
* | `[2]` | The item 2 of an array. `[-1]` is the last item. |
|
|
10
|
+
* | `*` or `[*]` | Each member of an object, or each item of an array. |
|
|
11
|
+
* | `..name`, `..*`, `..[0]` | The same step on the value and on each value in it, at each depth. |
|
|
12
|
+
*
|
|
13
|
+
* A path that names `__proto__`, `constructor` or `prototype` is refused (roadmap R6).
|
|
14
|
+
*/
|
|
15
|
+
import { type JsonValue } from "./value.js";
|
|
16
|
+
/** One step of a path. */
|
|
17
|
+
export type PathStep = {
|
|
18
|
+
readonly kind: "key";
|
|
19
|
+
readonly key: string;
|
|
20
|
+
readonly deep: boolean;
|
|
21
|
+
} | {
|
|
22
|
+
readonly kind: "index";
|
|
23
|
+
readonly index: number;
|
|
24
|
+
readonly deep: boolean;
|
|
25
|
+
} | {
|
|
26
|
+
readonly kind: "wildcard";
|
|
27
|
+
readonly deep: boolean;
|
|
28
|
+
};
|
|
29
|
+
/** One match of a path: its JSON Pointer tokens and its value. */
|
|
30
|
+
export interface PathMatch {
|
|
31
|
+
readonly tokens: readonly (string | number)[];
|
|
32
|
+
readonly value: JsonValue;
|
|
33
|
+
}
|
|
34
|
+
/** This function parses a path query. A bad path throws `INVALID_POINTER`. */
|
|
35
|
+
export declare function parsePath(path: string): PathStep[];
|
|
36
|
+
/** This function gives the matches of a path in a value, in document order. */
|
|
37
|
+
export declare function queryPath(value: JsonValue, path: string): PathMatch[];
|
|
38
|
+
//# sourceMappingURL=path.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path.d.ts","sourceRoot":"","sources":["../src/path.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAqC,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAE/E,0BAA0B;AAC1B,MAAM,MAAM,QAAQ,GAChB;IAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GACtE;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAC1E;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC;AAE1D,kEAAkE;AAClE,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IAC9C,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;CAC3B;AAID,8EAA8E;AAC9E,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,EAAE,CAwElD;AAsCD,+EAA+E;AAC/E,wBAAgB,SAAS,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,CAWrE"}
|
package/dist/path.js
ADDED
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A simple path query: a small part of JSONPath, without filters and scripts.
|
|
3
|
+
*
|
|
4
|
+
* | Part | Meaning |
|
|
5
|
+
* |---|---|
|
|
6
|
+
* | `$` | The whole value. It is optional at the start. |
|
|
7
|
+
* | `.name` or `name` | The member `name` of an object. A name has letters, digits, `_`, `$` and `-`. |
|
|
8
|
+
* | `["a.b"]` or `['a.b']` | The member with any key. `\` escapes a quote or a backslash. |
|
|
9
|
+
* | `[2]` | The item 2 of an array. `[-1]` is the last item. |
|
|
10
|
+
* | `*` or `[*]` | Each member of an object, or each item of an array. |
|
|
11
|
+
* | `..name`, `..*`, `..[0]` | The same step on the value and on each value in it, at each depth. |
|
|
12
|
+
*
|
|
13
|
+
* A path that names `__proto__`, `constructor` or `prototype` is refused (roadmap R6).
|
|
14
|
+
*/
|
|
15
|
+
import { JsonError, PROTOTYPE_KEYS, hasOwn } from "./value.js";
|
|
16
|
+
const NAME_CHAR = /[A-Za-z0-9_$\-\u0080-]/;
|
|
17
|
+
/** This function parses a path query. A bad path throws `INVALID_POINTER`. */
|
|
18
|
+
export function parsePath(path) {
|
|
19
|
+
const steps = [];
|
|
20
|
+
const fail = (at, message) => {
|
|
21
|
+
throw new JsonError("INVALID_POINTER", `The path ${JSON.stringify(path)} is not valid at character ${at + 1}: ${message}`);
|
|
22
|
+
};
|
|
23
|
+
const key = (name, deep, at) => {
|
|
24
|
+
if (PROTOTYPE_KEYS.has(name)) {
|
|
25
|
+
throw new JsonError("PROTOTYPE_KEY", `The path ${JSON.stringify(path)} has the key "${name}" at character ${at + 1}, which reaches a prototype`);
|
|
26
|
+
}
|
|
27
|
+
return { kind: "key", key: name, deep };
|
|
28
|
+
};
|
|
29
|
+
let i = 0;
|
|
30
|
+
if (path.startsWith("$"))
|
|
31
|
+
i = 1;
|
|
32
|
+
let first = true;
|
|
33
|
+
while (i < path.length) {
|
|
34
|
+
let deep = false;
|
|
35
|
+
const start = i;
|
|
36
|
+
if (path.startsWith("..", i)) {
|
|
37
|
+
deep = true;
|
|
38
|
+
i += 2;
|
|
39
|
+
}
|
|
40
|
+
else if (path[i] === ".") {
|
|
41
|
+
i += 1;
|
|
42
|
+
}
|
|
43
|
+
else if (path[i] !== "[" && !(first && i === 0)) {
|
|
44
|
+
fail(i, 'expected ".", ".." or "["');
|
|
45
|
+
}
|
|
46
|
+
first = false;
|
|
47
|
+
const char = path[i];
|
|
48
|
+
if (char === undefined)
|
|
49
|
+
fail(i, "the path ends after a dot");
|
|
50
|
+
if (char === "*") {
|
|
51
|
+
steps.push({ kind: "wildcard", deep });
|
|
52
|
+
i += 1;
|
|
53
|
+
}
|
|
54
|
+
else if (char === "[") {
|
|
55
|
+
if ((path[start] === "." && !deep))
|
|
56
|
+
fail(i, 'a "[" does not come after a single "."');
|
|
57
|
+
const close = (from) => {
|
|
58
|
+
if (path[from] !== "]")
|
|
59
|
+
fail(from, 'expected "]"');
|
|
60
|
+
};
|
|
61
|
+
const inner = path[i + 1];
|
|
62
|
+
if (inner === "*") {
|
|
63
|
+
close(i + 2);
|
|
64
|
+
steps.push({ kind: "wildcard", deep });
|
|
65
|
+
i += 3;
|
|
66
|
+
}
|
|
67
|
+
else if (inner === '"' || inner === "'") {
|
|
68
|
+
let j = i + 2;
|
|
69
|
+
let name = "";
|
|
70
|
+
while (j < path.length && path[j] !== inner) {
|
|
71
|
+
if (path[j] === "\\") {
|
|
72
|
+
j += 1;
|
|
73
|
+
if (j >= path.length)
|
|
74
|
+
break;
|
|
75
|
+
}
|
|
76
|
+
name += path[j];
|
|
77
|
+
j += 1;
|
|
78
|
+
}
|
|
79
|
+
if (j >= path.length)
|
|
80
|
+
fail(i, "the quoted key has no end");
|
|
81
|
+
close(j + 1);
|
|
82
|
+
steps.push(key(name, deep, i));
|
|
83
|
+
i = j + 2;
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
const match = /^-?(0|[1-9][0-9]*)/.exec(path.slice(i + 1));
|
|
87
|
+
if (!match)
|
|
88
|
+
fail(i + 1, "expected an index, a quoted key or *");
|
|
89
|
+
close(i + 1 + match[0].length);
|
|
90
|
+
steps.push({ kind: "index", index: Number(match[0]), deep });
|
|
91
|
+
i += match[0].length + 2;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
let j = i;
|
|
96
|
+
while (j < path.length && NAME_CHAR.test(path[j]))
|
|
97
|
+
j += 1;
|
|
98
|
+
if (j === i)
|
|
99
|
+
fail(i, "expected a name, * or [");
|
|
100
|
+
steps.push(key(path.slice(i, j), deep, i));
|
|
101
|
+
i = j;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return steps;
|
|
105
|
+
}
|
|
106
|
+
/** The children of a value, in document order: members of an object, or items of an array. */
|
|
107
|
+
function children(match) {
|
|
108
|
+
const { value, tokens } = match;
|
|
109
|
+
if (Array.isArray(value))
|
|
110
|
+
return value.map((item, index) => ({ tokens: [...tokens, index], value: item }));
|
|
111
|
+
if (value !== null && typeof value === "object")
|
|
112
|
+
return Object.keys(value).map((name) => ({ tokens: [...tokens, name], value: value[name] }));
|
|
113
|
+
return [];
|
|
114
|
+
}
|
|
115
|
+
/** The value and each value in it, at each depth, in document order. */
|
|
116
|
+
function descendants(match) {
|
|
117
|
+
const out = [];
|
|
118
|
+
const visit = (current) => {
|
|
119
|
+
out.push(current);
|
|
120
|
+
for (const child of children(current))
|
|
121
|
+
visit(child);
|
|
122
|
+
};
|
|
123
|
+
visit(match);
|
|
124
|
+
return out;
|
|
125
|
+
}
|
|
126
|
+
function stepOn(step, match) {
|
|
127
|
+
const { value, tokens } = match;
|
|
128
|
+
switch (step.kind) {
|
|
129
|
+
case "wildcard":
|
|
130
|
+
return children(match);
|
|
131
|
+
case "key":
|
|
132
|
+
return value !== null && typeof value === "object" && !Array.isArray(value) && hasOwn(value, step.key)
|
|
133
|
+
? [{ tokens: [...tokens, step.key], value: value[step.key] }]
|
|
134
|
+
: [];
|
|
135
|
+
case "index": {
|
|
136
|
+
if (!Array.isArray(value))
|
|
137
|
+
return [];
|
|
138
|
+
const index = step.index < 0 ? value.length + step.index : step.index;
|
|
139
|
+
return index >= 0 && index < value.length ? [{ tokens: [...tokens, index], value: value[index] }] : [];
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
/** This function gives the matches of a path in a value, in document order. */
|
|
144
|
+
export function queryPath(value, path) {
|
|
145
|
+
let matches = [{ tokens: [], value }];
|
|
146
|
+
for (const step of parsePath(path)) {
|
|
147
|
+
const next = [];
|
|
148
|
+
for (const match of matches) {
|
|
149
|
+
const sources = step.deep ? descendants(match) : [match];
|
|
150
|
+
for (const source of sources)
|
|
151
|
+
next.push(...stepOn(step, source));
|
|
152
|
+
}
|
|
153
|
+
matches = next;
|
|
154
|
+
}
|
|
155
|
+
return matches;
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=path.js.map
|
package/dist/path.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path.js","sourceRoot":"","sources":["../src/path.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JSON Pointer (RFC 6901): the parse, and the value at a pointer.
|
|
3
|
+
*
|
|
4
|
+
* A pointer is `""` (the whole value) or a list of reference tokens, each after a `/`. In a token,
|
|
5
|
+
* `~1` is `/` and `~0` is `~`. A pointer in the URI fragment form (`#/a/b`) is accepted too. A
|
|
6
|
+
* pointer that names `__proto__`, `constructor` or `prototype` is refused (roadmap R6).
|
|
7
|
+
*/
|
|
8
|
+
import { type JsonValue } from "./value.js";
|
|
9
|
+
/** This function gives the reference tokens of a pointer. A bad pointer throws `INVALID_POINTER`. */
|
|
10
|
+
export declare function parsePointer(pointer: string, label?: string): string[];
|
|
11
|
+
/** The index of an array token (`0`, or a digit 1 to 9 and more digits), or undefined. */
|
|
12
|
+
export declare function arrayIndex(token: string): number | undefined;
|
|
13
|
+
/** The result of a look-up: found, with the value, or not found. */
|
|
14
|
+
export type Lookup = {
|
|
15
|
+
readonly found: true;
|
|
16
|
+
readonly value: JsonValue;
|
|
17
|
+
} | {
|
|
18
|
+
readonly found: false;
|
|
19
|
+
};
|
|
20
|
+
/** This function gives the value at the tokens of a pointer. Only own keys of an object count. */
|
|
21
|
+
export declare function lookup(value: JsonValue, tokens: readonly string[]): Lookup;
|
|
22
|
+
//# sourceMappingURL=pointer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pointer.d.ts","sourceRoot":"","sources":["../src/pointer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAqC,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAE/E,qGAAqG;AACrG,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,SAAY,GAAG,MAAM,EAAE,CAgCzE;AAED,0FAA0F;AAC1F,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE5D;AAED,oEAAoE;AACpE,MAAM,MAAM,MAAM,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAA;CAAE,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;CAAE,CAAC;AAErG,kGAAkG;AAClG,wBAAgB,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAe1E"}
|
package/dist/pointer.js
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JSON Pointer (RFC 6901): the parse, and the value at a pointer.
|
|
3
|
+
*
|
|
4
|
+
* A pointer is `""` (the whole value) or a list of reference tokens, each after a `/`. In a token,
|
|
5
|
+
* `~1` is `/` and `~0` is `~`. A pointer in the URI fragment form (`#/a/b`) is accepted too. A
|
|
6
|
+
* pointer that names `__proto__`, `constructor` or `prototype` is refused (roadmap R6).
|
|
7
|
+
*/
|
|
8
|
+
import { hasOwn, JsonError, PROTOTYPE_KEYS } from "./value.js";
|
|
9
|
+
/** This function gives the reference tokens of a pointer. A bad pointer throws `INVALID_POINTER`. */
|
|
10
|
+
export function parsePointer(pointer, label = "pointer") {
|
|
11
|
+
let text = pointer;
|
|
12
|
+
let fragment = false;
|
|
13
|
+
if (text.startsWith("#")) {
|
|
14
|
+
fragment = true;
|
|
15
|
+
text = text.slice(1);
|
|
16
|
+
}
|
|
17
|
+
if (text === "")
|
|
18
|
+
return [];
|
|
19
|
+
if (!text.startsWith("/")) {
|
|
20
|
+
throw new JsonError("INVALID_POINTER", `The ${label} ${JSON.stringify(pointer)} is not a JSON Pointer: it must be "" or start with "/"`);
|
|
21
|
+
}
|
|
22
|
+
return text
|
|
23
|
+
.slice(1)
|
|
24
|
+
.split("/")
|
|
25
|
+
.map((raw) => {
|
|
26
|
+
let token = raw;
|
|
27
|
+
if (fragment) {
|
|
28
|
+
try {
|
|
29
|
+
token = decodeURIComponent(raw);
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
throw new JsonError("INVALID_POINTER", `The ${label} ${JSON.stringify(pointer)} has a bad percent escape`);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
if (/~[^01]|~$/.test(token)) {
|
|
36
|
+
throw new JsonError("INVALID_POINTER", `The ${label} ${JSON.stringify(pointer)} has a "~" that is not "~0" or "~1"`);
|
|
37
|
+
}
|
|
38
|
+
token = token.replace(/~1/g, "/").replace(/~0/g, "~");
|
|
39
|
+
if (PROTOTYPE_KEYS.has(token)) {
|
|
40
|
+
throw new JsonError("PROTOTYPE_KEY", `The ${label} ${JSON.stringify(pointer)} has the token "${token}", which reaches a prototype`);
|
|
41
|
+
}
|
|
42
|
+
return token;
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
/** The index of an array token (`0`, or a digit 1 to 9 and more digits), or undefined. */
|
|
46
|
+
export function arrayIndex(token) {
|
|
47
|
+
return /^(0|[1-9][0-9]*)$/.test(token) ? Number(token) : undefined;
|
|
48
|
+
}
|
|
49
|
+
/** This function gives the value at the tokens of a pointer. Only own keys of an object count. */
|
|
50
|
+
export function lookup(value, tokens) {
|
|
51
|
+
let current = value;
|
|
52
|
+
for (const token of tokens) {
|
|
53
|
+
if (Array.isArray(current)) {
|
|
54
|
+
const index = arrayIndex(token);
|
|
55
|
+
if (index === undefined || index >= current.length)
|
|
56
|
+
return { found: false };
|
|
57
|
+
current = current[index];
|
|
58
|
+
}
|
|
59
|
+
else if (current !== null && typeof current === "object") {
|
|
60
|
+
if (!hasOwn(current, token))
|
|
61
|
+
return { found: false };
|
|
62
|
+
current = current[token];
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
return { found: false };
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return { found: true, value: current };
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=pointer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pointer.js","sourceRoot":"","sources":["../src/pointer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* json.diff procedure
|
|
3
|
+
*
|
|
4
|
+
* Give the RFC 6902 JSON Patch that changes one JSON value into another. `json.patch` with this
|
|
5
|
+
* patch on `from` gives a value equal to `to`.
|
|
6
|
+
*/
|
|
7
|
+
import type { JsonDiffInput, JsonDiffOutput } from "../../types.js";
|
|
8
|
+
/**
|
|
9
|
+
* Give the RFC 6902 JSON Patch that changes one JSON value into another
|
|
10
|
+
*/
|
|
11
|
+
export declare function jsonDiff(input: JsonDiffInput): Promise<JsonDiffOutput>;
|
|
12
|
+
//# sourceMappingURL=diff.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../../src/procedures/json/diff.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEpE;;GAEG;AACH,wBAAsB,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC,CAI5E"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* json.diff procedure
|
|
3
|
+
*
|
|
4
|
+
* Give the RFC 6902 JSON Patch that changes one JSON value into another. `json.patch` with this
|
|
5
|
+
* patch on `from` gives a value equal to `to`.
|
|
6
|
+
*/
|
|
7
|
+
import { diffJson } from "../../diff.js";
|
|
8
|
+
import { assertJson } from "../../value.js";
|
|
9
|
+
/**
|
|
10
|
+
* Give the RFC 6902 JSON Patch that changes one JSON value into another
|
|
11
|
+
*/
|
|
12
|
+
export async function jsonDiff(input) {
|
|
13
|
+
assertJson(input.from, "json.diff: from");
|
|
14
|
+
assertJson(input.to, "json.diff: to");
|
|
15
|
+
return { patch: diffJson(input.from, input.to) };
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=diff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff.js","sourceRoot":"","sources":["../../../src/procedures/json/diff.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAG5C;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,KAAoB;IACjD,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;IAC1C,UAAU,CAAC,KAAK,CAAC,EAAE,EAAE,eAAe,CAAC,CAAC;IACtC,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;AACnD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/procedures/json/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/procedures/json/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* json.merge procedure
|
|
3
|
+
*
|
|
4
|
+
* Apply an RFC 7386 JSON merge patch to a JSON value. A member with the value null removes its
|
|
5
|
+
* key. A patch that is not an object replaces the value.
|
|
6
|
+
*/
|
|
7
|
+
import type { JsonMergeInput, JsonMergeOutput } from "../../types.js";
|
|
8
|
+
/**
|
|
9
|
+
* Apply an RFC 7386 JSON merge patch to a JSON value
|
|
10
|
+
*/
|
|
11
|
+
export declare function jsonMerge(input: JsonMergeInput): Promise<JsonMergeOutput>;
|
|
12
|
+
//# sourceMappingURL=merge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../../src/procedures/json/merge.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEtE;;GAEG;AACH,wBAAsB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC,CAI/E"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* json.merge procedure
|
|
3
|
+
*
|
|
4
|
+
* Apply an RFC 7386 JSON merge patch to a JSON value. A member with the value null removes its
|
|
5
|
+
* key. A patch that is not an object replaces the value.
|
|
6
|
+
*/
|
|
7
|
+
import { mergePatch } from "../../merge.js";
|
|
8
|
+
import { assertJson } from "../../value.js";
|
|
9
|
+
/**
|
|
10
|
+
* Apply an RFC 7386 JSON merge patch to a JSON value
|
|
11
|
+
*/
|
|
12
|
+
export async function jsonMerge(input) {
|
|
13
|
+
assertJson(input.target, "json.merge: target");
|
|
14
|
+
assertJson(input.patch, "json.merge: patch");
|
|
15
|
+
return { value: mergePatch(input.target, input.patch) };
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=merge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge.js","sourceRoot":"","sources":["../../../src/procedures/json/merge.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAG5C;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,KAAqB;IACnD,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;IAC/C,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC;IAC7C,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;AAC1D,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* json.patch procedure
|
|
3
|
+
*
|
|
4
|
+
* Apply an RFC 6902 JSON Patch to a JSON value. All operations apply or none. A failed `test`
|
|
5
|
+
* operation is an error with the code `TEST_FAILED`.
|
|
6
|
+
*/
|
|
7
|
+
import type { JsonPatchInput, JsonPatchOutput } from "../../types.js";
|
|
8
|
+
/**
|
|
9
|
+
* Apply an RFC 6902 JSON Patch to a JSON value
|
|
10
|
+
*/
|
|
11
|
+
export declare function jsonPatch(input: JsonPatchInput): Promise<JsonPatchOutput>;
|
|
12
|
+
//# sourceMappingURL=patch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"patch.d.ts","sourceRoot":"","sources":["../../../src/procedures/json/patch.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEtE;;GAEG;AACH,wBAAsB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC,CAM/E"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* json.patch procedure
|
|
3
|
+
*
|
|
4
|
+
* Apply an RFC 6902 JSON Patch to a JSON value. All operations apply or none. A failed `test`
|
|
5
|
+
* operation is an error with the code `TEST_FAILED`.
|
|
6
|
+
*/
|
|
7
|
+
import { applyPatch } from "../../patch.js";
|
|
8
|
+
import { assertJson } from "../../value.js";
|
|
9
|
+
/**
|
|
10
|
+
* Apply an RFC 6902 JSON Patch to a JSON value
|
|
11
|
+
*/
|
|
12
|
+
export async function jsonPatch(input) {
|
|
13
|
+
assertJson(input.value, "json.patch: value");
|
|
14
|
+
input.patch.forEach((operation, index) => {
|
|
15
|
+
if (operation.value !== undefined)
|
|
16
|
+
assertJson(operation.value, `json.patch: the value of operation ${index}`);
|
|
17
|
+
});
|
|
18
|
+
return { value: applyPatch(input.value, input.patch) };
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=patch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"patch.js","sourceRoot":"","sources":["../../../src/procedures/json/patch.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAG5C;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,KAAqB;IACnD,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC;IAC7C,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE;QACvC,IAAI,SAAS,CAAC,KAAK,KAAK,SAAS;YAAE,UAAU,CAAC,SAAS,CAAC,KAAK,EAAE,sCAAsC,KAAK,EAAE,CAAC,CAAC;IAChH,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;AACzD,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* json.query procedure
|
|
3
|
+
*
|
|
4
|
+
* Find the values at a JSON Pointer or a path in a JSON value. A pointer gives one match or none.
|
|
5
|
+
* A path query can give more matches, in document order. Each match has its JSON Pointer.
|
|
6
|
+
*/
|
|
7
|
+
import type { JsonQueryInput, JsonQueryOutput } from "../../types.js";
|
|
8
|
+
/**
|
|
9
|
+
* Find the values at a JSON Pointer or a path in a JSON value
|
|
10
|
+
*/
|
|
11
|
+
export declare function jsonQuery(input: JsonQueryInput): Promise<JsonQueryOutput>;
|
|
12
|
+
//# sourceMappingURL=query.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../../src/procedures/json/query.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEtE;;GAEG;AACH,wBAAsB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC,CAa/E"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* json.query procedure
|
|
3
|
+
*
|
|
4
|
+
* Find the values at a JSON Pointer or a path in a JSON value. A pointer gives one match or none.
|
|
5
|
+
* A path query can give more matches, in document order. Each match has its JSON Pointer.
|
|
6
|
+
*/
|
|
7
|
+
import { queryPath } from "../../path.js";
|
|
8
|
+
import { lookup, parsePointer } from "../../pointer.js";
|
|
9
|
+
import { assertJson, formatPointer, JsonError } from "../../value.js";
|
|
10
|
+
/**
|
|
11
|
+
* Find the values at a JSON Pointer or a path in a JSON value
|
|
12
|
+
*/
|
|
13
|
+
export async function jsonQuery(input) {
|
|
14
|
+
assertJson(input.value, "json.query: value");
|
|
15
|
+
if ((input.pointer === undefined) === (input.path === undefined)) {
|
|
16
|
+
throw new JsonError("INVALID_POINTER", "json.query: give one of pointer and path");
|
|
17
|
+
}
|
|
18
|
+
if (input.pointer !== undefined) {
|
|
19
|
+
const tokens = parsePointer(input.pointer);
|
|
20
|
+
const found = lookup(input.value, tokens);
|
|
21
|
+
if (!found.found)
|
|
22
|
+
return { found: false, matches: [] };
|
|
23
|
+
return { found: true, value: found.value, matches: [{ pointer: formatPointer(tokens), value: found.value }] };
|
|
24
|
+
}
|
|
25
|
+
const matches = queryPath(input.value, input.path).map((match) => ({ pointer: formatPointer(match.tokens), value: match.value }));
|
|
26
|
+
return matches.length === 0 ? { found: false, matches } : { found: true, value: matches[0].value, matches };
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=query.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../../src/procedures/json/query.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAGtE;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,KAAqB;IACnD,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC;IAC7C,IAAI,CAAC,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,EAAE,CAAC;QACjE,MAAM,IAAI,SAAS,CAAC,iBAAiB,EAAE,0CAA0C,CAAC,CAAC;IACrF,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC1C,IAAI,CAAC,KAAK,CAAC,KAAK;YAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;QACvD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC;IAChH,CAAC;IACD,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAK,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACnI,OAAO,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAE,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC;AAC/G,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* json.validate procedure
|
|
3
|
+
*
|
|
4
|
+
* Examine a JSON value against a JSON Schema. The check is a subset of JSON Schema (see
|
|
5
|
+
* `schema.ts`): `unchecked` lists the keywords of the schema that the check does not examine.
|
|
6
|
+
*/
|
|
7
|
+
import type { JsonValidateInput, JsonValidateOutput } from "../../types.js";
|
|
8
|
+
/**
|
|
9
|
+
* Examine a JSON value against a JSON Schema
|
|
10
|
+
*/
|
|
11
|
+
export declare function jsonValidate(input: JsonValidateInput): Promise<JsonValidateOutput>;
|
|
12
|
+
//# sourceMappingURL=validate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../src/procedures/json/validate.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAE5E;;GAEG;AACH,wBAAsB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAKxF"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* json.validate procedure
|
|
3
|
+
*
|
|
4
|
+
* Examine a JSON value against a JSON Schema. The check is a subset of JSON Schema (see
|
|
5
|
+
* `schema.ts`): `unchecked` lists the keywords of the schema that the check does not examine.
|
|
6
|
+
*/
|
|
7
|
+
import { validateJson } from "../../schema.js";
|
|
8
|
+
import { assertJson } from "../../value.js";
|
|
9
|
+
/**
|
|
10
|
+
* Examine a JSON value against a JSON Schema
|
|
11
|
+
*/
|
|
12
|
+
export async function jsonValidate(input) {
|
|
13
|
+
assertJson(input.value, "json.validate: value");
|
|
14
|
+
assertJson(input.schema, "json.validate: schema");
|
|
15
|
+
const result = validateJson(input.value, input.schema);
|
|
16
|
+
return { valid: result.valid, errors: [...result.errors], unchecked: [...result.unchecked] };
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=validate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../src/procedures/json/validate.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAG5C;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,KAAwB;IACzD,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,sBAAsB,CAAC,CAAC;IAChD,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACvD,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;AAC/F,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/procedures/yaml/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/procedures/yaml/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* yaml.parse procedure
|
|
3
|
+
*
|
|
4
|
+
* Parse YAML text into a JSON value. With `all`, the text can have more than one document, and
|
|
5
|
+
* the value is the list of documents.
|
|
6
|
+
*/
|
|
7
|
+
import type { YamlParseInput, YamlParseOutput } from "../../types.js";
|
|
8
|
+
/**
|
|
9
|
+
* Parse YAML text into a JSON value
|
|
10
|
+
*/
|
|
11
|
+
export declare function yamlParse(input: YamlParseInput): Promise<YamlParseOutput>;
|
|
12
|
+
//# sourceMappingURL=parse.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../../src/procedures/yaml/parse.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEtE;;GAEG;AACH,wBAAsB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC,CAE/E"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* yaml.parse procedure
|
|
3
|
+
*
|
|
4
|
+
* Parse YAML text into a JSON value. With `all`, the text can have more than one document, and
|
|
5
|
+
* the value is the list of documents.
|
|
6
|
+
*/
|
|
7
|
+
import { parseYaml } from "../../yaml.js";
|
|
8
|
+
/**
|
|
9
|
+
* Parse YAML text into a JSON value
|
|
10
|
+
*/
|
|
11
|
+
export async function yamlParse(input) {
|
|
12
|
+
return { value: parseYaml(input.text, { all: input.all }) };
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=parse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../../src/procedures/yaml/parse.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAG1C;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,KAAqB;IACnD,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC;AAC9D,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* yaml.stringify procedure
|
|
3
|
+
*
|
|
4
|
+
* Write a JSON value as YAML text. `yaml.parse` of the text gives a value equal to the input.
|
|
5
|
+
*/
|
|
6
|
+
import type { YamlStringifyInput, YamlStringifyOutput } from "../../types.js";
|
|
7
|
+
/**
|
|
8
|
+
* Write a JSON value as YAML text
|
|
9
|
+
*/
|
|
10
|
+
export declare function yamlStringify(input: YamlStringifyInput): Promise<YamlStringifyOutput>;
|
|
11
|
+
//# sourceMappingURL=stringify.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stringify.d.ts","sourceRoot":"","sources":["../../../src/procedures/yaml/stringify.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAE9E;;GAEG;AACH,wBAAsB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAG3F"}
|