Update project

This commit is contained in:
Guilherme Werner 2025-12-16 18:30:32 -03:00
parent ca7f0b65d9
commit 82d19b6305
6 changed files with 112869 additions and 71873 deletions

12
.editorconfig Normal file
View file

@ -0,0 +1,12 @@
root = true
[*]
end_of_line = lf
indent_style = space
indent_size = 4
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
[*.md]
trim_trailing_whitespace = false

View file

@ -1,197 +1,236 @@
const pveapi = require('./source')
const yaml = require('js-yaml')
const pveapi = require("./source");
const yaml = require("js-yaml");
const paths = {}
const models = {}
const responses = {}
const tags = []
const paths = {};
const models = {};
const responses = {};
const tags = [];
const capitalizeFirst = (str) => str.charAt(0).toUpperCase() + str.slice(1)
const capitalizeFirst = (str) => str.charAt(0).toUpperCase() + str.slice(1);
function generateOpId(method, path){
let operation = path.split("/").map(capitalizeFirst).join('').replace(/[\-\_]/g, '')
function generateOpId(method, path) {
let operation = path
.split("/")
.map(capitalizeFirst)
.join("")
.replace(/[\-\_]/g, "");
operation = operation.replace(/\{[a-z]*\}/g, 'Single')
operation = operation.replace(/\{[a-z]*\}/g, "Single");
const prefix = (() => {
switch (method) {
case "post":
return "create"
return "create";
case "put":
return "update"
return "update";
case "patch":
return "update"
return "update";
default:
return method
return method;
}
})()
})();
return prefix + operation
return prefix + operation;
}
const mapping = require('./mapping')
const mapping = require("./mapping");
function filterSchema(p){
function filterSchema(p) {
const schema = {
type: p.type
type: p.type,
};
if (p.items) schema.items = filterSchema(p.items);
if (p.properties) {
schema.properties = {};
Object.keys(p.properties).forEach(
(name) =>
(schema.properties[name] = filterSchema(p.properties[name]))
);
}
if(p.items)
schema.items = filterSchema(p.items)
if(p.properties){
schema.properties = {}
Object.keys(p.properties).forEach(name => schema.properties[name] = filterSchema(p.properties[name]))
}
return schema
return schema;
}
function buildResponseSchema(source){
const schema = { type: source.type || 'string', description: source.description || '' }
if(schema.type === 'boolean')
schema.type = 'integer'
if(schema.type === 'null')
schema.type = 'string'
if(source.type === 'array' && source.items)
schema.items = buildResponseSchema(source.items)
if(source.type === 'object' && source.properties){
schema.properties = {}
Object.keys(source.properties || {}).forEach(k => {
if(k.endsWith('[n]')){
const nk = k.substr(0, k.length-3)
for(let i=0; i<30; i++){
schema.properties[nk+i] = buildResponseSchema(source.properties[k])
function buildResponseSchema(source) {
const schema = {
type: source.type || "string",
description: source.description || "",
};
if (schema.type === "boolean") schema.type = "integer";
if (schema.type === "integer") schema.type = "int64";
if (schema.type === "null") schema.type = "string";
if (source.type === "array" && source.items)
schema.items = buildResponseSchema(source.items);
if (source.type === "object" && source.properties) {
schema.properties = {};
Object.keys(source.properties || {}).forEach((k) => {
if (k.endsWith("[n]")) {
const nk = k.substr(0, k.length - 3);
for (let i = 0; i < 30; i++) {
schema.properties[nk + i] = buildResponseSchema(
source.properties[k]
);
}
}else{
schema.properties[k] = buildResponseSchema(source.properties[k])
} else {
schema.properties[k] = buildResponseSchema(
source.properties[k]
);
}
})
});
}
return schema
return schema;
}
function parseInfo(path, method, info){
function parseInfo(path, method, info) {
let id = generateOpId(method, path);
id = mapping[id] || id
const sourceProperties = (info.parameters && info.parameters.properties) ? Object.keys(info.parameters.properties).map(k => ({ name: k, ...info.parameters.properties[k] })) : []
id = mapping[id] || id;
const sourceProperties =
info.parameters && info.parameters.properties
? Object.keys(info.parameters.properties).map((k) => ({
name: k,
...info.parameters.properties[k],
}))
: [];
const properties = []
sourceProperties.forEach(p => {
if(p.name.endsWith('[n]')){
const nk = p.name.substr(0, p.name.length-3);
for(let i=0; i<30; i++){
properties.push({ ...JSON.parse(JSON.stringify(p)), name: nk+i })
const properties = [];
sourceProperties.forEach((p) => {
if (p.name.endsWith("[n]")) {
const nk = p.name.substr(0, p.name.length - 3);
for (let i = 0; i < 30; i++) {
properties.push({
...JSON.parse(JSON.stringify(p)),
name: nk + i,
});
}
}else{
properties.push(p)
} else {
properties.push(p);
}
});
const requestName = capitalizeFirst(id) + 'Request'
const responseName = capitalizeFirst(id) + 'Response'
const requestName = capitalizeFirst(id) + "Request";
const responseName = capitalizeFirst(id) + "Response";
paths[path][method] = {
operationId: id,
summary: id,
description: info.description || id,
tags: [path.substr(1).split('/')[0]],
parameters: properties.filter(p => path.includes('{'+p.name+'}')).map(p => ({ name: p.name, in: 'path', required: true, description: p.name, schema: { type: p.type } })),
tags: [path.substr(1).split("/")[0]],
parameters: properties
.filter((p) => path.includes("{" + p.name + "}"))
.map((p) => ({
name: p.name,
in: "path",
required: true,
description: p.name,
schema: { type: p.type },
})),
responses: {
'200': {
$ref: '#/components/responses/'+responseName
}
}
}
200: {
$ref: "#/components/responses/" + responseName,
},
},
};
paths[path][method].tags.forEach(t => {
if(!tags.includes(t))
tags.push(t)
})
paths[path][method].tags.forEach((t) => {
if (!tags.includes(t)) tags.push(t);
});
responses[responseName] = {
description: responseName,
content: {
'application/json': {
"application/json": {
schema: {
type: 'object',
type: "object",
properties: {
errors: {
type: 'array',
type: "array",
items: {
type: 'string'
}
type: "string",
},
},
data: buildResponseSchema(info.returns)
}
}
}
}
}
data: buildResponseSchema(info.returns),
},
},
},
},
};
if(method === 'post' || method === 'put'){
if (method === "post" || method === "put") {
models[requestName] = {
title: requestName,
type: 'object',
title: requestName,
type: "object",
properties: {},
required: []
}
properties.filter(p => !path.includes('{'+p.name+'}')).forEach(p => {
models[requestName].properties[p.name] = filterSchema(p)
if(p.optional !== 1){
models[requestName].required.push(p.name)
}
})
if(models[requestName].required.length < 1)
delete models[requestName].required
required: [],
};
properties
.filter((p) => !path.includes("{" + p.name + "}"))
.forEach((p) => {
models[requestName].properties[p.name] = filterSchema(p);
if (p.optional !== 1) {
models[requestName].required.push(p.name);
}
});
if (models[requestName].required.length < 1)
delete models[requestName].required;
paths[path][method].requestBody = {
content: {
'application/json': {
"application/json": {
schema: {
$ref: '#/components/schemas/'+requestName
}
}
}
}
}else{
properties.filter(p => !path.includes('{'+p.name+'}')).map(p => ({ name: p.name, in: 'query', required: p.optional !== 1, description: p.name, schema: { type: p.type } }))
$ref: "#/components/schemas/" + requestName,
},
},
},
};
} else {
properties
.filter((p) => !path.includes("{" + p.name + "}"))
.map((p) => ({
name: p.name,
in: "query",
required: p.optional !== 1,
description: p.name,
schema: { type: p.type },
}));
}
}
function parsePath(source){
if(source.info && Object.keys(source.info).length > 0){
paths[source.path] = {}
Object.keys(source.info).forEach(method => parseInfo(source.path, method.toLowerCase(), source.info[method]))
function parsePath(source) {
if (source.info && Object.keys(source.info).length > 0) {
paths[source.path] = {};
Object.keys(source.info).forEach((method) =>
parseInfo(source.path, method.toLowerCase(), source.info[method])
);
}
if(source.children)
source.children.forEach(parsePath)
if (source.children) source.children.forEach(parsePath);
}
pveapi.forEach(parsePath)
pveapi.forEach(parsePath);
const spec = {
openapi: '3.0.0',
openapi: "3.0.0",
info: {
title: 'ProxMox VE API',
version: '2.0',
description: 'ProxMox VE API',
title: "ProxMox VE API",
version: "2.0",
description: "ProxMox VE API",
contact: {
name: 'LUMASERV Support Team',
email: 'support@lumaserv.com'
}
name: "LUMASERV Support Team",
email: "support@lumaserv.com",
},
},
servers: [
{
description: 'local',
url: 'https://cluster.local:8006/api2/json'
}
description: "local",
url: "https://cluster.local:8006/api2/json",
},
],
tags: tags.map(t => ({ name: t })),
tags: tags.map((t) => ({ name: t })),
paths: paths,
components: {
schemas: models,
responses: responses
}
}
responses: responses,
},
};
const fs = require('fs')
const fs = require("fs");
fs.writeFileSync('../reference/spec.v2.yaml', yaml.safeDump(spec))
fs.writeFileSync("../reference/spec.v2.yaml", yaml.safeDump(spec));

View file

@ -1,108 +1,110 @@
module.exports = {
getNodesSingleQemu: 'getVMs',
createNodesSingleQemu: 'createVM',
getNodesSingleQemuSingle: 'getVM',
deleteNodesSingleQemuSingle: 'deleteVM',
getNodesSingleQemuSingleFirewall: 'getVMFirewall',
getNodesSingleQemuSingleFirewallRules: 'getVMFirewallRules',
createNodesSingleQemuSingleFirewallRules: 'createVMFirewallRule',
getNodesSingleQemuSingleFirewallRulesSingle: 'getVMFirewallRule',
updateNodesSingleQemuSingleFirewallRulesSingle: 'updateVMFirewallRule',
deleteNodesSingleQemuSingleFirewallRulesSingle: 'deleteVMFirewallRule',
getNodesSingleQemuSingleFirewallIpset: 'getVMFirewallIPSets',
createNodesSingleQemuSingleFirewallIpset: 'createVMFirewallIPSet',
getNodesSingleQemuSingleFirewallIpsetSingle: 'getVMFirewallIPSet',
createNodesSingleQemuSingleFirewallIpsetSingle: 'addVMFirewallIPSetIP',
deleteNodesSingleQemuSingleFirewallIpsetSingle: 'deleteVMFirewallIPSet',
getNodesSingleQemuSingleFirewallIpsetSingleSingle: 'getVMFirewallIPSetIP',
updateNodesSingleQemuSingleFirewallIpsetSingleSingle: 'updateVMFirewallIPSetIP',
deleteNodesSingleQemuSingleFirewallIpsetSingleSingle: 'removeVMFirewallIPSetIP',
getNodesSingleQemuSingleFirewallOptions: 'getVMFirewallOptions',
updateNodesSingleQemuSingleFirewallOptions: 'updateVMFirewallOptions',
getNodesSingleQemuSingleRrd: 'getVMRRD',
getNodesSingleQemuSingleRrddata: 'getVMRRDData',
getNodesSingleQemuSingleConfig: 'getVMConfig',
createNodesSingleQemuSingleConfig: 'updateVMConfig',
updateNodesSingleQemuSingleConfig: 'updateVMConfigSync',
getNodesSingleQemuSinglePending: 'getVMConfigPending',
updateNodesSingleQemuSingleUnlink: 'unlinkVMDiskImages',
getNodesSingleQemuSingleStatus: 'getVMStatus',
getNodesSingleQemuSingleStatusCurrent: 'getCurrentVMStatus',
createNodesSingleQemuSingleStatusStart: 'startVM',
createNodesSingleQemuSingleStatusStop: 'stopVM',
createNodesSingleQemuSingleStatusReset: 'resetVM',
createNodesSingleQemuSingleStatusShutdown: 'shutdownVM',
createNodesSingleQemuSingleStatusReboot: 'rebootVM',
createNodesSingleQemuSingleStatusSuspend: 'suspendVM',
createNodesSingleQemuSingleStatusResume: 'resumeVM',
createNodesSingleQemuSingleClone: 'cloneVM',
getNodesSingleQemuSingleMigrate: 'migrateVM',
getNodesSingleQemuSingleSnapshot: 'getVMSnapshots',
createNodesSingleQemuSingleSnapshot: 'createVMSnapshot',
getNodesSingleQemuSingleSnapshotSingle: 'getVMSnapshot',
deleteNodesSingleQemuSingleSnapshotSingle: 'deleteVMSnapshot',
getNodesSingleQemuSingleSnapshotSingleConfig: 'getVMSnapshotConfig',
updateNodesSingleQemuSingleSnapshotSingleConfig: 'updateVMSnapshotConfig',
createNodesSingleQemuSingleSnapshotSingleRollback: 'rollbackVMSnapshot',
getNodesSingleFirewall: 'getNodeFirewall',
getNodesSingleFirewallRules: 'getNodeFirewallRules',
createNodesSingleFirewallRules: 'createNodeFirewallRule',
getNodesSingleFirewallRulesSingle: 'getNodeFirewallRule',
updateNodesSingleFirewallRulesSingle: 'updateNodeFirewallRule',
deleteNodesSingleFirewallRulesSingle: 'deleteNodeFirewallRule',
getNodesSingleFirewallOptions: 'getNodeFirewallOptions',
updateNodesSingleFirewallOptions: 'updateNodeFirewallOptions',
getNodesSingleSdn: 'getNodeSDN',
getNodesSingleSdnZones: 'getNodeSDNZones',
getNodesSingleSdnZonesSingle: 'getNodeSDNZone',
getNodesSingleSdnZonesSingleContent: 'getNodeSDNZoneContent',
getNodesSingleRrd: 'getNodeRRD',
getNodesSingleRrddata: 'getNodeRRDData',
createPools: 'createPool',
getPoolsSingle: 'getPool',
updatePoolsSingle: 'updatePool',
deletePoolsSingle: 'deletePool',
getNodesSingle: 'getNode',
getClusterSdn: 'getClusterSDN',
updateClusterSdn: 'updateClusterSDN',
getClusterSdnVnets: 'getClusterSDNVnets',
createClusterSdnVnets: 'createClusterSDNVnet',
getClusterSdnVnetsSingle: 'getClusterSDNVnet',
updateClusterSdnVnetsSingle: 'updateClusterSDNVnet',
deleteClusterSdnVnetsSingle: 'deleteClusterSDNVnet',
getClusterSdnZones: 'getClusterSDNZones',
createClusterSdnZones: 'createClusterSDNZone',
getClusterSdnZonesSingle: 'getClusterSDNZone',
updateClusterSdnZonesSingle: 'updateClusterSDNZone',
deleteClusterSdnZonesSingle: 'deleteClusterSDNZone',
getClusterSdnControllers: 'getClusterSDNControllers',
createClusterSdnControllers: 'createClusterSDNController',
getClusterSdnControllersSingle: 'getClusterSDNController',
updateClusterSdnControllersSingle: 'updateClusterSDNController',
deleteClusterSdnControllersSingle: 'deleteClusterSDNController',
createClusterFirewallGroups: 'createClusterFirewallGroup',
getClusterFirewallGroupsSingle: 'getClusterFirewallGroupRules',
createClusterFirewallGroupsSingle: 'addClusterFirewallGroupRule',
deleteClusterFirewallGroupsSingle: 'deleteClusterFirewallGroup',
getClusterFirewallGroupsSingleSingle: 'getClusterFirewallGroupRule',
updateClusterFirewallGroupsSingleSingle: 'updateClusterFirewallGroupRule',
deleteClusterFirewallGroupsSingleSingle: 'removeClusterFirewallGroupRule',
createClusterFirewallRules: 'addClusterFirewallRule',
getClusterFirewallRulesSingle: 'getClusterFirewallRule',
updateClusterFirewallRulesSingle: 'updateClusterFirewallRule',
deleteClusterFirewallRulesSingle: 'removeClusterFirewallRule',
getClusterFirewallIpset: 'getClusterFirewallIPSets',
createClusterFirewallIpset: 'createClusterFirewallIPSet',
getClusterFirewallIpsetSingle: 'getClusterFirewallIPSet',
createClusterFirewallIpsetSingle: 'addClusterFirewallIPSetIP',
deleteClusterFirewallIpsetSingle: 'deleteClusterFirewallIPSet',
getClusterFirewallIpsetSingleSingle: 'getClusterFirewallIPSetIP',
updateClusterFirewallIpsetSingleSingle: 'updateClusterFirewallIPSetIP',
deleteClusterFirewallIpsetSingleSingle: 'removeClusterFirewallIPSetIP',
getNodesSingleTasks: 'getNodeTasks',
getNodesSingleTasksSingle: 'getNodeTask',
deleteNodesSingleTasksSingle: 'stopNodeTask',
getNodesSingleTasksSingleLog: 'getNodeTaskLog',
getNodesSingleTasksSingleStatus: 'getNodeTaskStatus',
updateNodesSingleQemuSingleResize: 'resizeVMDisk'
}
getNodesSingleQemu: "getVMs",
createNodesSingleQemu: "createVM",
getNodesSingleQemuSingle: "getVM",
deleteNodesSingleQemuSingle: "deleteVM",
getNodesSingleQemuSingleFirewall: "getVMFirewall",
getNodesSingleQemuSingleFirewallRules: "getVMFirewallRules",
createNodesSingleQemuSingleFirewallRules: "createVMFirewallRule",
getNodesSingleQemuSingleFirewallRulesSingle: "getVMFirewallRule",
updateNodesSingleQemuSingleFirewallRulesSingle: "updateVMFirewallRule",
deleteNodesSingleQemuSingleFirewallRulesSingle: "deleteVMFirewallRule",
getNodesSingleQemuSingleFirewallIpset: "getVMFirewallIPSets",
createNodesSingleQemuSingleFirewallIpset: "createVMFirewallIPSet",
getNodesSingleQemuSingleFirewallIpsetSingle: "getVMFirewallIPSet",
createNodesSingleQemuSingleFirewallIpsetSingle: "addVMFirewallIPSetIP",
deleteNodesSingleQemuSingleFirewallIpsetSingle: "deleteVMFirewallIPSet",
getNodesSingleQemuSingleFirewallIpsetSingleSingle: "getVMFirewallIPSetIP",
updateNodesSingleQemuSingleFirewallIpsetSingleSingle:
"updateVMFirewallIPSetIP",
deleteNodesSingleQemuSingleFirewallIpsetSingleSingle:
"removeVMFirewallIPSetIP",
getNodesSingleQemuSingleFirewallOptions: "getVMFirewallOptions",
updateNodesSingleQemuSingleFirewallOptions: "updateVMFirewallOptions",
getNodesSingleQemuSingleRrd: "getVMRRD",
getNodesSingleQemuSingleRrddata: "getVMRRDData",
getNodesSingleQemuSingleConfig: "getVMConfig",
createNodesSingleQemuSingleConfig: "updateVMConfig",
updateNodesSingleQemuSingleConfig: "updateVMConfigSync",
getNodesSingleQemuSinglePending: "getVMConfigPending",
updateNodesSingleQemuSingleUnlink: "unlinkVMDiskImages",
getNodesSingleQemuSingleStatus: "getVMStatus",
getNodesSingleQemuSingleStatusCurrent: "getCurrentVMStatus",
createNodesSingleQemuSingleStatusStart: "startVM",
createNodesSingleQemuSingleStatusStop: "stopVM",
createNodesSingleQemuSingleStatusReset: "resetVM",
createNodesSingleQemuSingleStatusShutdown: "shutdownVM",
createNodesSingleQemuSingleStatusReboot: "rebootVM",
createNodesSingleQemuSingleStatusSuspend: "suspendVM",
createNodesSingleQemuSingleStatusResume: "resumeVM",
createNodesSingleQemuSingleClone: "cloneVM",
getNodesSingleQemuSingleMigrate: "migrateVM",
getNodesSingleQemuSingleSnapshot: "getVMSnapshots",
createNodesSingleQemuSingleSnapshot: "createVMSnapshot",
getNodesSingleQemuSingleSnapshotSingle: "getVMSnapshot",
deleteNodesSingleQemuSingleSnapshotSingle: "deleteVMSnapshot",
getNodesSingleQemuSingleSnapshotSingleConfig: "getVMSnapshotConfig",
updateNodesSingleQemuSingleSnapshotSingleConfig: "updateVMSnapshotConfig",
createNodesSingleQemuSingleSnapshotSingleRollback: "rollbackVMSnapshot",
getNodesSingleFirewall: "getNodeFirewall",
getNodesSingleFirewallRules: "getNodeFirewallRules",
createNodesSingleFirewallRules: "createNodeFirewallRule",
getNodesSingleFirewallRulesSingle: "getNodeFirewallRule",
updateNodesSingleFirewallRulesSingle: "updateNodeFirewallRule",
deleteNodesSingleFirewallRulesSingle: "deleteNodeFirewallRule",
getNodesSingleFirewallOptions: "getNodeFirewallOptions",
updateNodesSingleFirewallOptions: "updateNodeFirewallOptions",
getNodesSingleSdn: "getNodeSDN",
getNodesSingleSdnZones: "getNodeSDNZones",
getNodesSingleSdnZonesSingle: "getNodeSDNZone",
getNodesSingleSdnZonesSingleContent: "getNodeSDNZoneContent",
getNodesSingleRrd: "getNodeRRD",
getNodesSingleRrddata: "getNodeRRDData",
createPools: "createPool",
getPoolsSingle: "getPool",
updatePoolsSingle: "updatePool",
deletePoolsSingle: "deletePool",
getNodesSingle: "getNode",
getClusterSdn: "getClusterSDN",
updateClusterSdn: "updateClusterSDN",
getClusterSdnVnets: "getClusterSDNVnets",
createClusterSdnVnets: "createClusterSDNVnet",
getClusterSdnVnetsSingle: "getClusterSDNVnet",
updateClusterSdnVnetsSingle: "updateClusterSDNVnet",
deleteClusterSdnVnetsSingle: "deleteClusterSDNVnet",
getClusterSdnZones: "getClusterSDNZones",
createClusterSdnZones: "createClusterSDNZone",
getClusterSdnZonesSingle: "getClusterSDNZone",
updateClusterSdnZonesSingle: "updateClusterSDNZone",
deleteClusterSdnZonesSingle: "deleteClusterSDNZone",
getClusterSdnControllers: "getClusterSDNControllers",
createClusterSdnControllers: "createClusterSDNController",
getClusterSdnControllersSingle: "getClusterSDNController",
updateClusterSdnControllersSingle: "updateClusterSDNController",
deleteClusterSdnControllersSingle: "deleteClusterSDNController",
createClusterFirewallGroups: "createClusterFirewallGroup",
getClusterFirewallGroupsSingle: "getClusterFirewallGroupRules",
createClusterFirewallGroupsSingle: "addClusterFirewallGroupRule",
deleteClusterFirewallGroupsSingle: "deleteClusterFirewallGroup",
getClusterFirewallGroupsSingleSingle: "getClusterFirewallGroupRule",
updateClusterFirewallGroupsSingleSingle: "updateClusterFirewallGroupRule",
deleteClusterFirewallGroupsSingleSingle: "removeClusterFirewallGroupRule",
createClusterFirewallRules: "addClusterFirewallRule",
getClusterFirewallRulesSingle: "getClusterFirewallRule",
updateClusterFirewallRulesSingle: "updateClusterFirewallRule",
deleteClusterFirewallRulesSingle: "removeClusterFirewallRule",
getClusterFirewallIpset: "getClusterFirewallIPSets",
createClusterFirewallIpset: "createClusterFirewallIPSet",
getClusterFirewallIpsetSingle: "getClusterFirewallIPSet",
createClusterFirewallIpsetSingle: "addClusterFirewallIPSetIP",
deleteClusterFirewallIpsetSingle: "deleteClusterFirewallIPSet",
getClusterFirewallIpsetSingleSingle: "getClusterFirewallIPSetIP",
updateClusterFirewallIpsetSingleSingle: "updateClusterFirewallIPSetIP",
deleteClusterFirewallIpsetSingleSingle: "removeClusterFirewallIPSetIP",
getNodesSingleTasks: "getNodeTasks",
getNodesSingleTasksSingle: "getNodeTask",
deleteNodesSingleTasksSingle: "stopNodeTask",
getNodesSingleTasksSingleLog: "getNodeTaskLog",
getNodesSingleTasksSingleStatus: "getNodeTaskStatus",
updateNodesSingleQemuSingleResize: "resizeVMDisk",
};

45
build/pnpm-lock.yaml generated Normal file
View file

@ -0,0 +1,45 @@
lockfileVersion: '9.0'
settings:
autoInstallPeers: true
excludeLinksFromLockfile: false
importers:
.:
dependencies:
js-yaml:
specifier: ^3.14.1
version: 3.14.2
packages:
argparse@1.0.10:
resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
esprima@4.0.1:
resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
engines: {node: '>=4'}
hasBin: true
js-yaml@3.14.2:
resolution: {integrity: sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==}
hasBin: true
sprintf-js@1.0.3:
resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
snapshots:
argparse@1.0.10:
dependencies:
sprintf-js: 1.0.3
esprima@4.0.1: {}
js-yaml@3.14.2:
dependencies:
argparse: 1.0.10
esprima: 4.0.1
sprintf-js@1.0.3: {}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff