MCPcopy Create free account
hub / github.com/denoland/std / storeMappingPair

Method storeMappingPair

yaml/_loader_state.ts:461–540  ·  view source on GitHub ↗
(
    result: Record<string, unknown>,
    overridableKeys: Set<string>,
    keyTag: string | null,
    keyNode: Record<PropertyKey, unknown> | unknown[] | string | null,
    valueNode: unknown,
    startLine?: number,
    startPos?: number,
  )

Source from the content-addressed store, hash-verified

459 }
460 }
461 storeMappingPair(
462 result: Record<string, unknown>,
463 overridableKeys: Set<string>,
464 keyTag: string | null,
465 keyNode: Record<PropertyKey, unknown> | unknown[] | string | null,
466 valueNode: unknown,
467 startLine?: number,
468 startPos?: number,
469 ): Record<string, unknown> {
470 // The output is a plain object here, so keys can only be strings.
471 // We need to convert keyNode to a string, but doing so can hang the process
472 // (deeply nested arrays that explode exponentially using aliases).
473 if (Array.isArray(keyNode)) {
474 keyNode = Array.prototype.slice.call(keyNode);
475
476 for (let index = 0; index < keyNode.length; index++) {
477 if (Array.isArray(keyNode[index])) {
478 throw this.#createError(
479 "Cannot store mapping pair: nested arrays are not supported inside keys",
480 );
481 }
482
483 if (typeof keyNode === "object" && isPlainObject(keyNode[index])) {
484 keyNode[index] = "[object Object]";
485 }
486 }
487 }
488
489 // Avoid code execution in load() via toString property
490 // (still use its own toString for arrays, timestamps,
491 // and whatever user schema extensions happen to have @@toStringTag)
492 if (typeof keyNode === "object" && isPlainObject(keyNode)) {
493 keyNode = "[object Object]";
494 }
495
496 keyNode = String(keyNode);
497
498 if (keyTag === "tag:yaml.org,2002:merge") {
499 if (Array.isArray(valueNode)) {
500 for (
501 let index = 0;
502 index < valueNode.length;
503 index++
504 ) {
505 this.mergeMappings(result, valueNode[index], overridableKeys);
506 }
507 } else {
508 this.mergeMappings(
509 result,
510 valueNode as Record<string, unknown>,
511 overridableKeys,
512 );
513 }
514 } else {
515 if (
516 !this.allowDuplicateKeys &&
517 !overridableKeys.has(keyNode) &&
518 Object.hasOwn(result, keyNode)

Callers 2

readFlowCollectionMethod · 0.95
readBlockMappingMethod · 0.95

Calls 5

#createErrorMethod · 0.95
mergeMappingsMethod · 0.95
isPlainObjectFunction · 0.90
hasMethod · 0.65
deleteMethod · 0.65

Tested by

no test coverage detected