This commit is contained in:
93
node_modules/yaml-language-server/lib/umd/languageservice/utils/json.js
generated
vendored
Normal file
93
node_modules/yaml-language-server/lib/umd/languageservice/utils/json.js
generated
vendored
Normal file
@@ -0,0 +1,93 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
(function (factory) {
|
||||
if (typeof module === "object" && typeof module.exports === "object") {
|
||||
var v = factory(require, exports);
|
||||
if (v !== undefined) module.exports = v;
|
||||
}
|
||||
else if (typeof define === "function" && define.amd) {
|
||||
define(["require", "exports"], factory);
|
||||
}
|
||||
})(function (require, exports) {
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.stringifyObject = void 0;
|
||||
function stringifyObject(obj, indent, stringifyLiteral, settings, depth = 0, consecutiveArrays = 0) {
|
||||
if (obj !== null && typeof obj === 'object') {
|
||||
/**
|
||||
* When we are autocompleting a snippet from a property we need the indent so everything underneath the property
|
||||
* is properly indented. When we are auto completion from a value we don't want the indent because the cursor
|
||||
* is already in the correct place
|
||||
*/
|
||||
const newIndent = (depth === 0 && settings.shouldIndentWithTab) || depth > 0 ? indent + settings.indentation : '';
|
||||
if (Array.isArray(obj)) {
|
||||
consecutiveArrays += 1;
|
||||
if (obj.length === 0) {
|
||||
return '';
|
||||
}
|
||||
let result = '';
|
||||
for (let i = 0; i < obj.length; i++) {
|
||||
let pseudoObj = obj[i];
|
||||
if (typeof obj[i] !== 'object') {
|
||||
result += '\n' + newIndent + '- ' + stringifyLiteral(obj[i]);
|
||||
continue;
|
||||
}
|
||||
if (!Array.isArray(obj[i])) {
|
||||
pseudoObj = prependToObject(obj[i], consecutiveArrays);
|
||||
}
|
||||
result += stringifyObject(pseudoObj, indent, stringifyLiteral, settings, (depth += 1), consecutiveArrays);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
else {
|
||||
const keys = Object.keys(obj);
|
||||
if (keys.length === 0) {
|
||||
return '';
|
||||
}
|
||||
let result = (depth === 0 && settings.newLineFirst) || depth > 0 ? '\n' : '';
|
||||
let isFirstProp = true;
|
||||
for (let i = 0; i < keys.length; i++) {
|
||||
const key = keys[i];
|
||||
if (depth === 0 && settings.existingProps.includes(key)) {
|
||||
// Don't add existing properties to the YAML
|
||||
continue;
|
||||
}
|
||||
const isObject = typeof obj[key] === 'object';
|
||||
const colonDelimiter = isObject ? ':' : ': '; // add space only when value is primitive
|
||||
const parentArrayCompensation = isObject && /^\s|-/.test(key) ? settings.indentation : ''; // add extra space if parent is an array
|
||||
const objectIndent = newIndent + parentArrayCompensation;
|
||||
const lineBreak = isFirstProp ? '' : '\n'; // break line only if it's not the first property
|
||||
// The first child of an array needs to be treated specially, otherwise indentations will be off
|
||||
if (depth === 0 && isFirstProp && !settings.indentFirstObject) {
|
||||
const value = stringifyObject(obj[key], objectIndent, stringifyLiteral, settings, depth + 1, 0);
|
||||
result += lineBreak + indent + key + colonDelimiter + value;
|
||||
}
|
||||
else {
|
||||
const value = stringifyObject(obj[key], objectIndent, stringifyLiteral, settings, depth + 1, 0);
|
||||
result += lineBreak + newIndent + key + colonDelimiter + value;
|
||||
}
|
||||
isFirstProp = false;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
return stringifyLiteral(obj);
|
||||
}
|
||||
exports.stringifyObject = stringifyObject;
|
||||
function prependToObject(obj, consecutiveArrays) {
|
||||
const newObj = {};
|
||||
for (let i = 0; i < Object.keys(obj).length; i++) {
|
||||
const key = Object.keys(obj)[i];
|
||||
if (i === 0) {
|
||||
newObj['- '.repeat(consecutiveArrays) + key] = obj[key];
|
||||
}
|
||||
else {
|
||||
newObj[' '.repeat(consecutiveArrays) + key] = obj[key];
|
||||
}
|
||||
}
|
||||
return newObj;
|
||||
}
|
||||
});
|
||||
//# sourceMappingURL=json.js.map
|
||||
Reference in New Issue
Block a user