mirror of
https://github.com/deployphp/action.git
synced 2024-11-27 06:09:01 +00:00
43 lines
1.2 KiB
JavaScript
43 lines
1.2 KiB
JavaScript
import { isMap } from '../../nodes/Node.js';
|
|
import { createPair } from '../../nodes/Pair.js';
|
|
import { YAMLMap } from '../../nodes/YAMLMap.js';
|
|
|
|
function createMap(schema, obj, ctx) {
|
|
const { keepUndefined, replacer } = ctx;
|
|
const map = new YAMLMap(schema);
|
|
const add = (key, value) => {
|
|
if (typeof replacer === 'function')
|
|
value = replacer.call(obj, key, value);
|
|
else if (Array.isArray(replacer) && !replacer.includes(key))
|
|
return;
|
|
if (value !== undefined || keepUndefined)
|
|
map.items.push(createPair(key, value, ctx));
|
|
};
|
|
if (obj instanceof Map) {
|
|
for (const [key, value] of obj)
|
|
add(key, value);
|
|
}
|
|
else if (obj && typeof obj === 'object') {
|
|
for (const key of Object.keys(obj))
|
|
add(key, obj[key]);
|
|
}
|
|
if (typeof schema.sortMapEntries === 'function') {
|
|
map.items.sort(schema.sortMapEntries);
|
|
}
|
|
return map;
|
|
}
|
|
const map = {
|
|
collection: 'map',
|
|
createNode: createMap,
|
|
default: true,
|
|
nodeClass: YAMLMap,
|
|
tag: 'tag:yaml.org,2002:map',
|
|
resolve(map, onError) {
|
|
if (!isMap(map))
|
|
onError('Expected a mapping for this tag');
|
|
return map;
|
|
}
|
|
};
|
|
|
|
export { map };
|