From a6005d705d8f0ab4810d97136c36c840c4c7a54c Mon Sep 17 00:00:00 2001 From: Oliwia Rogala Date: Fri, 27 Jun 2025 11:39:02 +0200 Subject: [PATCH 1/5] perf: flatten sourceMap to improve memory usage --- packages/apidom-ast/src/Node.ts | 36 +- .../src/yaml/errors/YamlTagError.ts | 27 +- .../src/yaml/schemas/failsafe/index.ts | 16 +- .../openapi-3-1-to-openapi-3-0-3/toolbox.ts | 15 +- .../index.ts | 28 +- .../security-scheme-type/index.ts | 28 +- packages/apidom-core/src/clone/index.ts | 11 +- packages/apidom-core/src/predicates/index.ts | 9 +- .../apidom-core/src/traversal/findAtOffset.ts | 6 +- packages/apidom-core/test/predicates/index.ts | 15 +- packages/apidom-ls/src/utils/utils.ts | 18 +- .../src/refractor/visitors/Visitor.ts | 12 +- .../plugins/replace-empty-element.ts | 9 +- .../src/refractor/visitors/Visitor.ts | 12 +- .../plugins/replace-empty-element/mappings.ts | 14 +- .../plugins/replace-empty-element.ts | 9 +- .../src/refractor/visitors/Visitor.ts | 12 +- .../plugins/replace-empty-element/mappings.ts | 14 +- .../plugins/replace-empty-element.ts | 9 +- .../plugins/replace-empty-element/mappings.ts | 14 +- .../replace-empty-element/sequences.ts | 14 +- .../plugins/replace-empty-element.ts | 9 +- .../plugins/replace-empty-element/mappings.ts | 14 +- .../replace-empty-element/sequences.ts | 14 +- .../plugins/replace-empty-element.ts | 9 +- .../src/refractor/visitors/Visitor.ts | 16 +- .../plugins/replace-empty-element/mappings.ts | 14 +- .../replace-empty-element/sequences.ts | 14 +- .../plugins/replace-empty-element.ts | 9 +- .../plugins/replace-empty-element/mappings.ts | 14 +- .../replace-empty-element/sequences.ts | 14 +- .../plugins/replace-empty-element.ts | 9 +- .../plugins/replace-empty-element/mappings.ts | 14 +- .../replace-empty-element/sequences.ts | 14 +- .../plugins/replace-empty-element.ts | 9 +- .../src/refractor/visitors/Visitor.ts | 12 +- .../plugins/replace-empty-element/mappings.ts | 14 +- .../plugins/replace-empty-element.ts | 9 +- .../src/refractor/visitors/Visitor.ts | 12 +- .../plugins/replace-empty-element/mappings.ts | 14 +- .../plugins/replace-empty-element.ts | 9 +- .../plugins/replace-empty-element/mappings.ts | 14 +- .../test/adapter.ts | 14 +- .../test/adapter.ts | 14 +- .../test/adapter.ts | 4 +- .../TreeCursorSyntaxNode.ts | 18 +- .../direct/visitors/CstVisitor.ts | 34 +- .../indirect/visitors/CstVisitor.ts | 152 +++++-- .../indirect/visitors/JsonAstVisitor.ts | 15 +- .../__snapshots__/TreeCursorIterator.mjs.snap | 84 ++-- .../test/adapter.ts | 4 +- .../test/adapter.ts | 4 +- .../test/adapter.ts | 4 +- .../TreeCursorSyntaxNode.ts | 18 +- .../indirect/visitors/CstVisitor.ts | 355 +++++++++++++---- .../indirect/visitors/YamlAstVisitor.ts | 17 +- .../block-maping/empty-key-properties.ts | 35 +- .../empty-key-value-opt-key-indicator.ts | 68 ++-- .../empty-key-value-properties.ts | 68 ++-- .../mappings/block-maping/empty-key-value.ts | 68 ++-- .../mappings/block-maping/empty-key.ts | 35 +- .../block-maping/empty-value-properties.ts | 35 +- .../mappings/block-maping/empty-value.ts | 35 +- .../flow-mapping/empty-key-properties.ts | 35 +- .../empty-key-value-opt-key-indicator.ts | 68 ++-- .../empty-key-value-properties.ts | 68 ++-- .../mappings/flow-mapping/empty-key-value.ts | 68 ++-- .../mappings/flow-mapping/empty-key.ts | 35 +- .../flow-mapping/empty-value-properties.ts | 35 +- .../mappings/flow-mapping/empty-value.ts | 35 +- .../empty-flow-scalar-properties.ts | 35 +- .../empty-block-sequence-item.ts | 35 +- .../empty-flow-sequence-item-properties.ts | 35 +- .../test/adapter-node/index.ts | 16 +- .../__snapshots__/TreeCursorIterator.mjs.snap | 372 ++++++------------ packages/apidom-reference/test/parse/index.ts | 9 +- .../parsers/api-design-systems-json/index.ts | 4 +- .../parsers/api-design-systems-yaml/index.ts | 4 +- .../test/parse/parsers/arazzo-json-1/index.ts | 4 +- .../test/parse/parsers/arazzo-yaml-1/index.ts | 4 +- .../parse/parsers/asyncapi-json-2/index.ts | 4 +- .../parse/parsers/asyncapi-yaml-2/index.ts | 4 +- .../test/parse/parsers/json/index.ts | 4 +- .../parse/parsers/openapi-json-2/index.ts | 4 +- .../parse/parsers/openapi-json-3-0/index.ts | 4 +- .../parse/parsers/openapi-json-3-1/index.ts | 4 +- .../parse/parsers/openapi-yaml-2/index.ts | 4 +- .../parse/parsers/openapi-yaml-3-0/index.ts | 4 +- .../parse/parsers/openapi-yaml-3-1/index.ts | 4 +- .../test/parse/parsers/yaml/index.ts | 4 +- 90 files changed, 1313 insertions(+), 1255 deletions(-) diff --git a/packages/apidom-ast/src/Node.ts b/packages/apidom-ast/src/Node.ts index 18023b43d8..13c7ab32b9 100644 --- a/packages/apidom-ast/src/Node.ts +++ b/packages/apidom-ast/src/Node.ts @@ -7,6 +7,12 @@ export interface NodeOptions { readonly children?: unknown[]; readonly position?: Position; readonly isMissing?: boolean; + readonly startPositionRow?: number; + readonly startPositionColumn?: number; + readonly startIndex?: number; + readonly endPositionRow?: number; + readonly endPositionColumn?: number; + readonly endIndex?: number; } /** @@ -21,13 +27,37 @@ class Node { public children: unknown[]; - public position?: Position; + public startPositionRow?: number; - constructor({ children = [], position, isMissing = false }: NodeOptions = {}) { + public startPositionColumn?: number; + + public startIndex?: number; + + public endPositionRow?: number; + + public endPositionColumn?: number; + + public endIndex?: number; + + constructor({ + children = [], + isMissing = false, + startPositionRow, + startPositionColumn, + startIndex, + endPositionRow, + endPositionColumn, + endIndex, + }: NodeOptions = {}) { this.type = (this.constructor as typeof Node).type; this.isMissing = isMissing; this.children = children; - this.position = position; + this.startPositionRow = startPositionRow; + this.startPositionColumn = startPositionColumn; + this.startIndex = startIndex; + this.endPositionRow = endPositionRow; + this.endPositionColumn = endPositionColumn; + this.endIndex = endIndex; } // creates shallow clone of node diff --git a/packages/apidom-ast/src/yaml/errors/YamlTagError.ts b/packages/apidom-ast/src/yaml/errors/YamlTagError.ts index 2248b261ec..3fe1152d23 100644 --- a/packages/apidom-ast/src/yaml/errors/YamlTagError.ts +++ b/packages/apidom-ast/src/yaml/errors/YamlTagError.ts @@ -1,7 +1,6 @@ import type { ApiDOMErrorOptions } from '@swagger-api/apidom-error'; import YamlSchemaError from './YamlSchemaError.ts'; -import Position from '../../Position.ts'; import Node from '../../Node.ts'; /** @@ -11,7 +10,12 @@ export interface YamlTagErrorOptions extends ApiDOMErrorO readonly specificTagName: string; readonly explicitTagName: string; readonly tagKind: string; - readonly tagPosition?: Position; + readonly tagStartPositionRow?: number; + readonly tagStartPositionColumn?: number; + readonly tagStartPositionIndex?: number; + readonly tagEndPositionRow?: number; + readonly tagEndPositionColumn?: number; + readonly tagEndPositionIndex?: number; readonly nodeCanonicalContent?: string; readonly node?: T; } @@ -26,7 +30,17 @@ class YamlTagError extends YamlSchemaError { public readonly tagKind!: string; - public readonly tagPosition?: Position; + public readonly tagStartPositionRow?: number; + + public readonly tagStartPositionColumn?: number; + + public readonly tagStartPositionIndex?: number; + + public readonly tagEndPositionRow?: number; + + public readonly tagEndPositionColumn?: number; + + public readonly tagEndPositionIndex?: number; public readonly nodeCanonicalContent?: string; @@ -39,7 +53,12 @@ class YamlTagError extends YamlSchemaError { this.specificTagName = structuredOptions.specificTagName; this.explicitTagName = structuredOptions.explicitTagName; this.tagKind = structuredOptions.tagKind; - this.tagPosition = structuredOptions.tagPosition; + this.tagStartPositionRow = structuredOptions.tagStartPositionRow; + this.tagStartPositionColumn = structuredOptions.tagStartPositionColumn; + this.tagStartPositionIndex = structuredOptions.tagStartPositionIndex; + this.tagEndPositionRow = structuredOptions.tagEndPositionRow; + this.tagEndPositionColumn = structuredOptions.tagEndPositionColumn; + this.tagEndPositionIndex = structuredOptions.tagEndPositionIndex; this.nodeCanonicalContent = structuredOptions.nodeCanonicalContent; this.node = structuredOptions.node; } diff --git a/packages/apidom-ast/src/yaml/schemas/failsafe/index.ts b/packages/apidom-ast/src/yaml/schemas/failsafe/index.ts index d0a4524e4c..f3f74e30f2 100644 --- a/packages/apidom-ast/src/yaml/schemas/failsafe/index.ts +++ b/packages/apidom-ast/src/yaml/schemas/failsafe/index.ts @@ -1,5 +1,3 @@ -import { clone } from 'ramda'; - import YamlTagError from '../../errors/YamlTagError.ts'; import YamlDirective from '../../nodes/YamlDirective.ts'; import { YamlNodeKind } from '../../nodes/YamlTag.ts'; @@ -95,7 +93,12 @@ class FailsafeSchema { specificTagName, explicitTagName: node.tag.explicitName, tagKind: node.tag.kind, - tagPosition: clone(node.tag.position), + tagStartPositionRow: node.tag.startPositionRow, + tagStartPositionColumn: node.tag.startPositionColumn, + tagStartPositionIndex: node.tag.startIndex, + tagEndPositionRow: node.tag.endPositionRow, + tagEndPositionColumn: node.tag.endPositionColumn, + tagEndPositionIndex: node.tag.endIndex, node: node.clone(), }); } @@ -106,7 +109,12 @@ class FailsafeSchema { specificTagName, explicitTagName: node.tag.explicitName, tagKind: node.tag.kind, - tagPosition: clone(node.tag.position), + tagStartPositionRow: node.tag.startPositionRow, + tagStartPositionColumn: node.tag.startPositionColumn, + tagStartPositionIndex: node.tag.startIndex, + tagEndPositionRow: node.tag.endPositionRow, + tagEndPositionColumn: node.tag.endPositionColumn, + tagEndPositionIndex: node.tag.endIndex, nodeCanonicalContent: canonicalNode.content, node: node.clone(), }); diff --git a/packages/apidom-converter/src/strategies/openapi-3-1-to-openapi-3-0-3/toolbox.ts b/packages/apidom-converter/src/strategies/openapi-3-1-to-openapi-3-0-3/toolbox.ts index 3eae07b4e4..0426db3880 100644 --- a/packages/apidom-converter/src/strategies/openapi-3-1-to-openapi-3-0-3/toolbox.ts +++ b/packages/apidom-converter/src/strategies/openapi-3-1-to-openapi-3-0-3/toolbox.ts @@ -4,11 +4,24 @@ import { createToolbox as createToolboxOpenAPI31 } from '@swagger-api/apidom-ns- const createToolbox = () => { const openAPI31Toolbox = createToolboxOpenAPI31(); + /* eslint-disable class-methods-use-this, no-param-reassign */ const copySourceMap = (from: T, to: U): void => { if (openAPI31Toolbox.predicates.hasElementSourceMap(from)) { - to.meta.set('sourceMap', from.meta.get('sourceMap')); + // @ts-ignore + to.startPositionRow = from.startPositionRow; + // @ts-ignore + to.startPositionColumn = from.startPositionColumn; + // @ts-ignore + to.startIndex = from.startIndex; + // @ts-ignore + to.endPositionRow = from.endPositionRow; + // @ts-ignore + to.endPositionColumn = from.endPositionColumn; + // @ts-ignore + to.endIndex = from.endIndex; } }; + /* eslint-enable no-param-reassign */ const createAnnotation = (content?: string, meta?: Meta, attributes?: Attributes) => { return new AnnotationElement(content, meta, attributes); diff --git a/packages/apidom-converter/test/strategies/openapi-3-1-to-openapi-3-0-3/refractor-plugins/security-requirements-empty-roles/index.ts b/packages/apidom-converter/test/strategies/openapi-3-1-to-openapi-3-0-3/refractor-plugins/security-requirements-empty-roles/index.ts index 2018ee45e8..07340bf171 100644 --- a/packages/apidom-converter/test/strategies/openapi-3-1-to-openapi-3-0-3/refractor-plugins/security-requirements-empty-roles/index.ts +++ b/packages/apidom-converter/test/strategies/openapi-3-1-to-openapi-3-0-3/refractor-plugins/security-requirements-empty-roles/index.ts @@ -2,7 +2,7 @@ import path from 'node:path'; import { fileURLToPath } from 'node:url'; import { mediaTypes as openAPI31MediaTypes } from '@swagger-api/apidom-parser-adapter-openapi-json-3-1'; import { mediaTypes as openAPI30MediaTypes } from '@swagger-api/apidom-parser-adapter-openapi-json-3-0'; -import { AnnotationElement, includesClasses, toJSON, toValue } from '@swagger-api/apidom-core'; +import { AnnotationElement, includesClasses, toJSON } from '@swagger-api/apidom-core'; import { assert, expect } from 'chai'; import convert from '../../../../../src/index.ts'; @@ -73,20 +73,22 @@ describe('converter', function () { const annotation: AnnotationElement = annotations.find((a: AnnotationElement) => a.code?.equals('security-requirements-empty-roles'), ); - const sourceMap = annotation.meta.get('sourceMap'); - const { positionStart, positionEnd } = sourceMap; - const [startRow, startColumn, startChar] = toValue(positionStart); - const [endRow, endColumn, endChar] = toValue(positionEnd); + const { + startPositionRow, + startPositionColumn, + startIndex, + endPositionRow, + endPositionColumn, + endIndex, + } = annotation; - assert.isDefined(sourceMap); + assert.strictEqual(startPositionRow, 15); + assert.strictEqual(startPositionColumn, 29); + assert.strictEqual(startIndex, 299); - assert.strictEqual(startRow, 15); - assert.strictEqual(startColumn, 29); - assert.strictEqual(startChar, 299); - - assert.strictEqual(endRow, 18); - assert.strictEqual(endColumn, 13); - assert.strictEqual(endChar, 358); + assert.strictEqual(endPositionRow, 18); + assert.strictEqual(endPositionColumn, 13); + assert.strictEqual(endIndex, 358); }); }); }); diff --git a/packages/apidom-converter/test/strategies/openapi-3-1-to-openapi-3-0-3/refractor-plugins/security-scheme-type/index.ts b/packages/apidom-converter/test/strategies/openapi-3-1-to-openapi-3-0-3/refractor-plugins/security-scheme-type/index.ts index e9770c5606..50d3864aee 100644 --- a/packages/apidom-converter/test/strategies/openapi-3-1-to-openapi-3-0-3/refractor-plugins/security-scheme-type/index.ts +++ b/packages/apidom-converter/test/strategies/openapi-3-1-to-openapi-3-0-3/refractor-plugins/security-scheme-type/index.ts @@ -2,7 +2,7 @@ import path from 'node:path'; import { fileURLToPath } from 'node:url'; import { mediaTypes as openAPI31MediaTypes } from '@swagger-api/apidom-parser-adapter-openapi-json-3-1'; import { mediaTypes as openAPI30MediaTypes } from '@swagger-api/apidom-parser-adapter-openapi-json-3-0'; -import { AnnotationElement, includesClasses, toJSON, toValue } from '@swagger-api/apidom-core'; +import { AnnotationElement, includesClasses, toJSON } from '@swagger-api/apidom-core'; import { assert, expect } from 'chai'; import convert from '../../../../../src/index.ts'; @@ -61,20 +61,22 @@ describe('converter', function () { const annotation: AnnotationElement = annotations.find((a: AnnotationElement) => a.code?.equals('mutualTLS'), ); - const sourceMap = annotation.meta.get('sourceMap'); - const { positionStart, positionEnd } = sourceMap; - const [startRow, startColumn, startChar] = toValue(positionStart); - const [endRow, endColumn, endChar] = toValue(positionEnd); + const { + startPositionRow, + startPositionColumn, + startIndex, + endPositionRow, + endPositionColumn, + endIndex, + } = annotation; - assert.isDefined(sourceMap); + assert.strictEqual(startPositionRow, 9); + assert.strictEqual(startPositionColumn, 32); + assert.strictEqual(startIndex, 188); - assert.strictEqual(startRow, 9); - assert.strictEqual(startColumn, 32); - assert.strictEqual(startChar, 188); - - assert.strictEqual(endRow, 12); - assert.strictEqual(endColumn, 13); - assert.strictEqual(endChar, 247); + assert.strictEqual(endPositionRow, 12); + assert.strictEqual(endPositionColumn, 13); + assert.strictEqual(endIndex, 247); }); specify( diff --git a/packages/apidom-core/src/clone/index.ts b/packages/apidom-core/src/clone/index.ts index e13b32aeed..21ba4ab67d 100644 --- a/packages/apidom-core/src/clone/index.ts +++ b/packages/apidom-core/src/clone/index.ts @@ -1,6 +1,6 @@ import { ArraySlice, ObjectSlice, KeyValuePair, Element } from 'minim'; -import { isElement } from '../predicates/index.ts'; +import { hasElementSourceMap, isElement } from '../predicates/index.ts'; import DeepCloneError from './errors/DeepCloneError.ts'; import ShallowCloneError from './errors/ShallowCloneError.ts'; @@ -123,6 +123,15 @@ const cloneShallowElement = (element: T): T => { copy.element = element.element; + if (hasElementSourceMap(element)) { + copy.startPositionRow = element.startPositionRow; + copy.startPositionColumn = element.startPositionColumn; + copy.startIndex = element.startIndex; + copy.endPositionRow = element.endPositionRow; + copy.endPositionColumn = element.endPositionColumn; + copy.endIndex = element.endIndex; + } + if (element.meta.length > 0) { copy._meta = cloneDeep(element.meta); } diff --git a/packages/apidom-core/src/predicates/index.ts b/packages/apidom-core/src/predicates/index.ts index ab0303b2fb..82a3678b65 100644 --- a/packages/apidom-core/src/predicates/index.ts +++ b/packages/apidom-core/src/predicates/index.ts @@ -220,7 +220,14 @@ export const isPrimitiveElement: ElementPredicate = ( * @public */ export const hasElementSourceMap = (element: T): boolean => { - return isSourceMapElement(element.meta.get('sourceMap')); + return ( + typeof element.startPositionRow === 'number' && + typeof element.startPositionColumn === 'number' && + typeof element.startIndex === 'number' && + typeof element.endPositionRow === 'number' && + typeof element.endPositionColumn === 'number' && + typeof element.endIndex === 'number' + ); }; /** diff --git a/packages/apidom-core/src/traversal/findAtOffset.ts b/packages/apidom-core/src/traversal/findAtOffset.ts index 362b86b179..8758b1711b 100644 --- a/packages/apidom-core/src/traversal/findAtOffset.ts +++ b/packages/apidom-core/src/traversal/findAtOffset.ts @@ -4,7 +4,6 @@ import { Element } from 'minim'; import { hasElementSourceMap } from '../predicates/index.ts'; import { visit } from './visitor.ts'; -import toValue from '../transformers/serializers/value/index.ts'; interface VisitorOptions { readonly offset?: number; @@ -29,9 +28,8 @@ class Visitor { return undefined; // dive in } - const sourceMapElement = element.getMetaProperty('sourceMap'); - const charStart = toValue(sourceMapElement.positionStart.get(2)); - const charEnd = toValue(sourceMapElement.positionEnd.get(2)); + const charStart = element.startIndex; + const charEnd = element.endIndex; const isWithinOffsetRange = this.offset >= charStart && (this.offset < charEnd || (this.includeRightBound && this.offset <= charEnd)); diff --git a/packages/apidom-core/test/predicates/index.ts b/packages/apidom-core/test/predicates/index.ts index 986136b46f..1f492c5589 100644 --- a/packages/apidom-core/test/predicates/index.ts +++ b/packages/apidom-core/test/predicates/index.ts @@ -839,8 +839,12 @@ describe('predicates', function () { context('given element has sourcemap', function () { specify('should return true', function () { const element = new ObjectElement({ prop: 'val' }); - const sourceMap = new SourceMapElement(); - element.setMetaProperty('sourceMap', sourceMap); + element.startPositionRow = 1; + element.startPositionColumn = 1; + element.startIndex = 0; + element.endPositionRow = 1; + element.endPositionColumn = 2; + element.endIndex = 1; assert.isTrue(hasElementSourceMap(element)); }); @@ -848,7 +852,12 @@ describe('predicates', function () { context('and sourcemap is not SourceMapElement', function () { specify('should return false', function () { const element = new ObjectElement({ prop: 'val' }); - element.setMetaProperty('sourceMap', null); + element.startPositionRow = null; + element.startPositionColumn = null; + element.startIndex = null; + element.endPositionRow = null; + element.endPositionColumn = null; + element.endIndex = null; assert.isFalse(hasElementSourceMap(element)); }); diff --git a/packages/apidom-ls/src/utils/utils.ts b/packages/apidom-ls/src/utils/utils.ts index 7dbe0e2b7b..d50e11f928 100644 --- a/packages/apidom-ls/src/utils/utils.ts +++ b/packages/apidom-ls/src/utils/utils.ts @@ -28,6 +28,7 @@ import { StringElement, traverse, toValue, + hasElementSourceMap, } from '@swagger-api/apidom-core'; import { compile, URIFragmentIdentifier } from '@swagger-api/apidom-json-pointer/modern'; import { TextDocument } from 'vscode-languageserver-textdocument'; @@ -109,15 +110,14 @@ export class SourceMap { } export function getSourceMap(element: Element): SourceMap { - if (element && element.meta && element.meta.get('sourceMap')) { - const sourceMap: [][number] = toValue(element.meta.get('sourceMap')) as [][number]; - const offset = sourceMap[0][2]; - const length = sourceMap[1][2] - sourceMap[0][2]; - const line = sourceMap[0][0]; - const column = sourceMap[0][1]; - const endLine = sourceMap[1][0]; - const endColumn = sourceMap[1][1]; - const endOffset = sourceMap[1][2]; + if (element && hasElementSourceMap(element)) { + const offset = element.startIndex as number; + const length = (element.endIndex as number) - (element.startIndex as number); + const line = element.startPositionRow as number; + const column = element.startPositionColumn as number; + const endLine = element.endPositionRow as number; + const endColumn = element.endPositionColumn as number; + const endOffset = element.endIndex as number; return new SourceMap(offset, length, line, column, endLine, endColumn, endOffset); // TODO ??? } return new SourceMap(1, 2, 0, 1); // TODO ??? diff --git a/packages/apidom-ns-api-design-systems/src/refractor/visitors/Visitor.ts b/packages/apidom-ns-api-design-systems/src/refractor/visitors/Visitor.ts index a9b5296e53..03b599ba3f 100644 --- a/packages/apidom-ns-api-design-systems/src/refractor/visitors/Visitor.ts +++ b/packages/apidom-ns-api-design-systems/src/refractor/visitors/Visitor.ts @@ -19,10 +19,14 @@ class Visitor { public copyMetaAndAttributes(from: Element, to: Element) { if (from.meta.length > 0 || to.meta.length > 0) { to.meta = deepmerge(to.meta, from.meta) as ObjectElement; - if (hasElementSourceMap(from)) { - // avoid deep merging of source maps - to.meta.set('sourceMap', from.meta.get('sourceMap')); - } + } + if (hasElementSourceMap(from)) { + to.startPositionRow = from.startPositionRow; + to.startPositionColumn = from.startPositionColumn; + to.startIndex = from.startIndex; + to.endPositionRow = from.endPositionRow; + to.endPositionColumn = from.endPositionColumn; + to.endIndex = from.endIndex; } if (from.attributes.length > 0 || from.meta.length > 0) { to.attributes = deepmerge(to.attributes, from.attributes) as ObjectElement; // eslint-disable-line no-param-reassign diff --git a/packages/apidom-ns-arazzo-1/src/refractor/plugins/replace-empty-element.ts b/packages/apidom-ns-arazzo-1/src/refractor/plugins/replace-empty-element.ts index 05247d3a7c..d8ce125693 100644 --- a/packages/apidom-ns-arazzo-1/src/refractor/plugins/replace-empty-element.ts +++ b/packages/apidom-ns-arazzo-1/src/refractor/plugins/replace-empty-element.ts @@ -96,12 +96,19 @@ const plugin = () => () => ({ // no element factory found if (typeof elementFactory !== 'function') return undefined; - return elementFactory.call( + const result = elementFactory.call( { context }, undefined, cloneDeep(element.meta), cloneDeep(element.attributes), ); + result.startPositionRow = element.startPositionRow; + result.startPositionColumn = element.startPositionColumn; + result.startIndex = element.startIndex; + result.endPositionRow = element.endPositionRow; + result.endPositionColumn = element.endPositionColumn; + result.endIndex = element.endIndex; + return result; }, }, }); diff --git a/packages/apidom-ns-arazzo-1/src/refractor/visitors/Visitor.ts b/packages/apidom-ns-arazzo-1/src/refractor/visitors/Visitor.ts index c2c2436811..10f0acf34d 100644 --- a/packages/apidom-ns-arazzo-1/src/refractor/visitors/Visitor.ts +++ b/packages/apidom-ns-arazzo-1/src/refractor/visitors/Visitor.ts @@ -19,10 +19,14 @@ class Visitor { public copyMetaAndAttributes(from: Element, to: Element) { if (from.meta.length > 0 || to.meta.length > 0) { to.meta = deepmerge(to.meta, from.meta) as ObjectElement; - if (hasElementSourceMap(from)) { - // avoid deep merging of source maps - to.meta.set('sourceMap', from.meta.get('sourceMap')); - } + } + if (hasElementSourceMap(from)) { + to.startPositionRow = from.startPositionRow; + to.startPositionColumn = from.startPositionColumn; + to.startIndex = from.startIndex; + to.endPositionRow = from.endPositionRow; + to.endPositionColumn = from.endPositionColumn; + to.endIndex = from.endIndex; } if (from.attributes.length > 0 || from.meta.length > 0) { to.attributes = deepmerge(to.attributes, from.attributes) as ObjectElement; // eslint-disable-line no-param-reassign diff --git a/packages/apidom-ns-arazzo-1/test/refractor/plugins/replace-empty-element/mappings.ts b/packages/apidom-ns-arazzo-1/test/refractor/plugins/replace-empty-element/mappings.ts index 3ad77e4c02..0198fe029b 100644 --- a/packages/apidom-ns-arazzo-1/test/refractor/plugins/replace-empty-element/mappings.ts +++ b/packages/apidom-ns-arazzo-1/test/refractor/plugins/replace-empty-element/mappings.ts @@ -1,6 +1,6 @@ import { expect } from 'chai'; import dedent from 'dedent'; -import { sexprs, SourceMapElement } from '@swagger-api/apidom-core'; +import { sexprs } from '@swagger-api/apidom-core'; import { parse } from '@swagger-api/apidom-parser-adapter-yaml-1-2'; import { @@ -34,12 +34,12 @@ describe('given Workflows definition with empty values', function () { plugins: [refractorPluginReplaceEmptyElement()], }) as ArazzoSpecification1Element; const { info: infoValue } = workflowsSpecificationElement; - const sourceMap = infoValue?.meta.get('sourceMap'); - const { positionStart, positionEnd } = sourceMap; - const expectedPosition = [1, 5, 19]; - expect(infoValue?.meta.get('sourceMap')).to.be.an.instanceof(SourceMapElement); - expect(positionStart.equals(expectedPosition)).to.be.true; - expect(positionEnd.equals(expectedPosition)).to.be.true; + expect(infoValue?.startPositionRow).to.equal(1); + expect(infoValue?.startPositionColumn).to.equal(5); + expect(infoValue?.startIndex).to.equal(19); + expect(infoValue?.endPositionRow).to.equal(1); + expect(infoValue?.endPositionColumn).to.equal(5); + expect(infoValue?.endIndex).to.equal(19); }); }); diff --git a/packages/apidom-ns-asyncapi-2/src/refractor/plugins/replace-empty-element.ts b/packages/apidom-ns-asyncapi-2/src/refractor/plugins/replace-empty-element.ts index b381f68e7d..5969ec51d3 100644 --- a/packages/apidom-ns-asyncapi-2/src/refractor/plugins/replace-empty-element.ts +++ b/packages/apidom-ns-asyncapi-2/src/refractor/plugins/replace-empty-element.ts @@ -1061,12 +1061,19 @@ const plugin = () => () => ({ // no element factory found if (typeof elementFactory !== 'function') return undefined; - return elementFactory.call( + const result = elementFactory.call( { context }, undefined, cloneDeep(element.meta), cloneDeep(element.attributes), ); + result.startPositionRow = element.startPositionRow; + result.startPositionColumn = element.startPositionColumn; + result.startIndex = element.startIndex; + result.endPositionRow = element.endPositionRow; + result.endPositionColumn = element.endPositionColumn; + result.endIndex = element.endIndex; + return result; }, }, }); diff --git a/packages/apidom-ns-asyncapi-2/src/refractor/visitors/Visitor.ts b/packages/apidom-ns-asyncapi-2/src/refractor/visitors/Visitor.ts index ad6c7c2450..7c8c0fcc34 100644 --- a/packages/apidom-ns-asyncapi-2/src/refractor/visitors/Visitor.ts +++ b/packages/apidom-ns-asyncapi-2/src/refractor/visitors/Visitor.ts @@ -19,10 +19,14 @@ class Visitor { public copyMetaAndAttributes(from: Element, to: Element) { if (from.meta.length > 0 || to.meta.length > 0) { to.meta = deepmerge(to.meta, from.meta) as ObjectElement; - if (hasElementSourceMap(from)) { - // avoid deep merging of source maps - to.meta.set('sourceMap', from.meta.get('sourceMap')); - } + } + if (hasElementSourceMap(from)) { + to.startPositionRow = from.startPositionRow; + to.startPositionColumn = from.startPositionColumn; + to.startIndex = from.startIndex; + to.endPositionRow = from.endPositionRow; + to.endPositionColumn = from.endPositionColumn; + to.endIndex = from.endIndex; } if (from.attributes.length > 0 || from.meta.length > 0) { to.attributes = deepmerge(to.attributes, from.attributes) as ObjectElement; // eslint-disable-line no-param-reassign diff --git a/packages/apidom-ns-asyncapi-2/test/refractor/plugins/replace-empty-element/mappings.ts b/packages/apidom-ns-asyncapi-2/test/refractor/plugins/replace-empty-element/mappings.ts index 28ce734d4f..7139e41def 100644 --- a/packages/apidom-ns-asyncapi-2/test/refractor/plugins/replace-empty-element/mappings.ts +++ b/packages/apidom-ns-asyncapi-2/test/refractor/plugins/replace-empty-element/mappings.ts @@ -1,6 +1,6 @@ import { expect } from 'chai'; import dedent from 'dedent'; -import { sexprs, SourceMapElement } from '@swagger-api/apidom-core'; +import { sexprs } from '@swagger-api/apidom-core'; import { parse } from '@swagger-api/apidom-parser-adapter-yaml-1-2'; import { refractorPluginReplaceEmptyElement, AsyncApi2Element } from '../../../../src/index.ts'; @@ -175,12 +175,12 @@ describe('given AsyncAPI definition with empty values', function () { plugins: [refractorPluginReplaceEmptyElement()], }) as AsyncApi2Element; const { info: infoValue } = asyncApiElement; - const sourceMap = infoValue?.meta.get('sourceMap'); - const { positionStart, positionEnd } = sourceMap; - const expectedPosition = [1, 5, 21]; - expect(infoValue?.meta.get('sourceMap')).to.be.an.instanceof(SourceMapElement); - expect(positionStart.equals(expectedPosition)).to.be.true; - expect(positionEnd.equals(expectedPosition)).to.be.true; + expect(infoValue?.startPositionRow).to.equal(1); + expect(infoValue?.startPositionColumn).to.equal(5); + expect(infoValue?.startIndex).to.equal(21); + expect(infoValue?.endPositionRow).to.equal(1); + expect(infoValue?.endPositionColumn).to.equal(5); + expect(infoValue?.endIndex).to.equal(21); }); }); diff --git a/packages/apidom-ns-json-schema-2019-09/src/refractor/plugins/replace-empty-element.ts b/packages/apidom-ns-json-schema-2019-09/src/refractor/plugins/replace-empty-element.ts index 5875ecb823..3f0bd77430 100644 --- a/packages/apidom-ns-json-schema-2019-09/src/refractor/plugins/replace-empty-element.ts +++ b/packages/apidom-ns-json-schema-2019-09/src/refractor/plugins/replace-empty-element.ts @@ -265,12 +265,19 @@ const plugin = () => () => { // no element factory found if (typeof elementFactory !== 'function') return undefined; - return elementFactory.call( + const result = elementFactory.call( { context }, undefined, cloneDeep(element.meta), cloneDeep(element.attributes), ); + result.startPositionRow = element.startPositionRow; + result.startPositionColumn = element.startPositionColumn; + result.startIndex = element.startIndex; + result.endPositionRow = element.endPositionRow; + result.endPositionColumn = element.endPositionColumn; + result.endIndex = element.endIndex; + return result; }, }, }; diff --git a/packages/apidom-ns-json-schema-2019-09/test/refractor/plugins/replace-empty-element/mappings.ts b/packages/apidom-ns-json-schema-2019-09/test/refractor/plugins/replace-empty-element/mappings.ts index fb3764ce1e..66f363193d 100644 --- a/packages/apidom-ns-json-schema-2019-09/test/refractor/plugins/replace-empty-element/mappings.ts +++ b/packages/apidom-ns-json-schema-2019-09/test/refractor/plugins/replace-empty-element/mappings.ts @@ -1,6 +1,6 @@ import { expect } from 'chai'; import dedent from 'dedent'; -import { sexprs, SourceMapElement } from '@swagger-api/apidom-core'; +import { sexprs } from '@swagger-api/apidom-core'; import { parse } from '@swagger-api/apidom-parser-adapter-yaml-1-2'; import { refractorPluginReplaceEmptyElement, JSONSchemaElement } from '../../../../src/index.ts'; @@ -339,12 +339,12 @@ describe('given JSON Schema definition with empty values', function () { plugins: [refractorPluginReplaceEmptyElement()], }) as JSONSchemaElement; const { properties: propertiesValue } = jsonSchemaElement; - const sourceMap = propertiesValue?.meta.get('sourceMap'); - const { positionStart, positionEnd } = sourceMap; - const expectedPosition = [1, 11, 67]; - expect(propertiesValue?.meta.get('sourceMap')).to.be.an.instanceof(SourceMapElement); - expect(positionStart.equals(expectedPosition)).to.be.true; - expect(positionEnd.equals(expectedPosition)).to.be.true; + expect(propertiesValue?.startPositionRow).to.equal(1); + expect(propertiesValue?.startPositionColumn).to.equal(11); + expect(propertiesValue?.startIndex).to.equal(67); + expect(propertiesValue?.endPositionRow).to.equal(1); + expect(propertiesValue?.endPositionColumn).to.equal(11); + expect(propertiesValue?.endIndex).to.equal(67); }); }); diff --git a/packages/apidom-ns-json-schema-2019-09/test/refractor/plugins/replace-empty-element/sequences.ts b/packages/apidom-ns-json-schema-2019-09/test/refractor/plugins/replace-empty-element/sequences.ts index f1b53d68ac..da68054b30 100644 --- a/packages/apidom-ns-json-schema-2019-09/test/refractor/plugins/replace-empty-element/sequences.ts +++ b/packages/apidom-ns-json-schema-2019-09/test/refractor/plugins/replace-empty-element/sequences.ts @@ -1,6 +1,6 @@ import { expect } from 'chai'; import dedent from 'dedent'; -import { sexprs, SourceMapElement } from '@swagger-api/apidom-core'; +import { sexprs } from '@swagger-api/apidom-core'; import { parse } from '@swagger-api/apidom-parser-adapter-yaml-1-2'; import { refractorPluginReplaceEmptyElement, JSONSchemaElement } from '../../../../src/index.ts'; @@ -130,12 +130,12 @@ describe('given JSON Schema definition with empty values', function () { plugins: [refractorPluginReplaceEmptyElement()], }) as JSONSchemaElement; const { oneOf: oneOfValue } = jsonSchemaElement; - const sourceMap = oneOfValue?.get(0)?.meta.get('sourceMap'); - const { positionStart, positionEnd } = sourceMap; - const expectedPosition = [2, 2, 65]; - expect(oneOfValue?.meta.get('sourceMap')).to.be.an.instanceof(SourceMapElement); - expect(positionStart.equals(expectedPosition)).to.be.true; - expect(positionEnd.equals(expectedPosition)).to.be.true; + expect(oneOfValue?.get(0)?.startPositionRow).to.equal(2); + expect(oneOfValue?.get(0)?.startPositionColumn).to.equal(2); + expect(oneOfValue?.get(0)?.startIndex).to.equal(65); + expect(oneOfValue?.get(0)?.endPositionRow).to.equal(2); + expect(oneOfValue?.get(0)?.endPositionColumn).to.equal(2); + expect(oneOfValue?.get(0)?.endIndex).to.equal(65); }); }); diff --git a/packages/apidom-ns-json-schema-2020-12/src/refractor/plugins/replace-empty-element.ts b/packages/apidom-ns-json-schema-2020-12/src/refractor/plugins/replace-empty-element.ts index b068992cdf..58c62ade41 100644 --- a/packages/apidom-ns-json-schema-2020-12/src/refractor/plugins/replace-empty-element.ts +++ b/packages/apidom-ns-json-schema-2020-12/src/refractor/plugins/replace-empty-element.ts @@ -272,12 +272,19 @@ const plugin = () => () => { // no element factory found if (typeof elementFactory !== 'function') return undefined; - return elementFactory.call( + const result = elementFactory.call( { context }, undefined, cloneDeep(element.meta), cloneDeep(element.attributes), ); + result.startPositionRow = element.startPositionRow; + result.startPositionColumn = element.startPositionColumn; + result.startIndex = element.startIndex; + result.endPositionRow = element.endPositionRow; + result.endPositionColumn = element.endPositionColumn; + result.endIndex = element.endIndex; + return result; }, }, }; diff --git a/packages/apidom-ns-json-schema-2020-12/test/refractor/plugins/replace-empty-element/mappings.ts b/packages/apidom-ns-json-schema-2020-12/test/refractor/plugins/replace-empty-element/mappings.ts index 9f6402c67d..7f09abf59e 100644 --- a/packages/apidom-ns-json-schema-2020-12/test/refractor/plugins/replace-empty-element/mappings.ts +++ b/packages/apidom-ns-json-schema-2020-12/test/refractor/plugins/replace-empty-element/mappings.ts @@ -1,6 +1,6 @@ import { expect } from 'chai'; import dedent from 'dedent'; -import { sexprs, SourceMapElement } from '@swagger-api/apidom-core'; +import { sexprs } from '@swagger-api/apidom-core'; import { parse } from '@swagger-api/apidom-parser-adapter-yaml-1-2'; import { refractorPluginReplaceEmptyElement, JSONSchemaElement } from '../../../../src/index.ts'; @@ -339,12 +339,12 @@ describe('given JSON Schema definition with empty values', function () { plugins: [refractorPluginReplaceEmptyElement()], }) as JSONSchemaElement; const { properties: propertiesValue } = jsonSchemaElement; - const sourceMap = propertiesValue?.meta.get('sourceMap'); - const { positionStart, positionEnd } = sourceMap; - const expectedPosition = [1, 11, 67]; - expect(propertiesValue?.meta.get('sourceMap')).to.be.an.instanceof(SourceMapElement); - expect(positionStart.equals(expectedPosition)).to.be.true; - expect(positionEnd.equals(expectedPosition)).to.be.true; + expect(propertiesValue?.startPositionRow).to.equal(1); + expect(propertiesValue?.startPositionColumn).to.equal(11); + expect(propertiesValue?.startIndex).to.equal(67); + expect(propertiesValue?.endPositionRow).to.equal(1); + expect(propertiesValue?.endPositionColumn).to.equal(11); + expect(propertiesValue?.endIndex).to.equal(67); }); }); diff --git a/packages/apidom-ns-json-schema-2020-12/test/refractor/plugins/replace-empty-element/sequences.ts b/packages/apidom-ns-json-schema-2020-12/test/refractor/plugins/replace-empty-element/sequences.ts index 8440a0854e..2999b374b2 100644 --- a/packages/apidom-ns-json-schema-2020-12/test/refractor/plugins/replace-empty-element/sequences.ts +++ b/packages/apidom-ns-json-schema-2020-12/test/refractor/plugins/replace-empty-element/sequences.ts @@ -1,6 +1,6 @@ import { expect } from 'chai'; import dedent from 'dedent'; -import { sexprs, SourceMapElement } from '@swagger-api/apidom-core'; +import { sexprs } from '@swagger-api/apidom-core'; import { parse } from '@swagger-api/apidom-parser-adapter-yaml-1-2'; import { refractorPluginReplaceEmptyElement, JSONSchemaElement } from '../../../../src/index.ts'; @@ -146,12 +146,12 @@ describe('given JSON Schema definition with empty values', function () { plugins: [refractorPluginReplaceEmptyElement()], }) as JSONSchemaElement; const { oneOf: oneOfValue } = jsonSchemaElement; - const sourceMap = oneOfValue?.get(0)?.meta.get('sourceMap'); - const { positionStart, positionEnd } = sourceMap; - const expectedPosition = [2, 2, 65]; - expect(oneOfValue?.meta.get('sourceMap')).to.be.an.instanceof(SourceMapElement); - expect(positionStart.equals(expectedPosition)).to.be.true; - expect(positionEnd.equals(expectedPosition)).to.be.true; + expect(oneOfValue?.get(0)?.startPositionRow).to.equal(2); + expect(oneOfValue?.get(0)?.startPositionColumn).to.equal(2); + expect(oneOfValue?.get(0)?.startIndex).to.equal(65); + expect(oneOfValue?.get(0)?.endPositionRow).to.equal(2); + expect(oneOfValue?.get(0)?.endPositionColumn).to.equal(2); + expect(oneOfValue?.get(0)?.endIndex).to.equal(65); }); }); diff --git a/packages/apidom-ns-json-schema-draft-4/src/refractor/plugins/replace-empty-element.ts b/packages/apidom-ns-json-schema-draft-4/src/refractor/plugins/replace-empty-element.ts index 3257b29e2d..3818b6da0f 100644 --- a/packages/apidom-ns-json-schema-draft-4/src/refractor/plugins/replace-empty-element.ts +++ b/packages/apidom-ns-json-schema-draft-4/src/refractor/plugins/replace-empty-element.ts @@ -209,12 +209,19 @@ const plugin = () => () => ({ // no element factory found if (typeof elementFactory !== 'function') return undefined; - return elementFactory.call( + const result = elementFactory.call( { context }, undefined, cloneDeep(element.meta), cloneDeep(element.attributes), ); + result.startPositionRow = element.startPositionRow; + result.startPositionColumn = element.startPositionColumn; + result.startIndex = element.startIndex; + result.endPositionRow = element.endPositionRow; + result.endPositionColumn = element.endPositionColumn; + result.endIndex = element.endIndex; + return result; }, }, }); diff --git a/packages/apidom-ns-json-schema-draft-4/src/refractor/visitors/Visitor.ts b/packages/apidom-ns-json-schema-draft-4/src/refractor/visitors/Visitor.ts index 0a4feba290..dc5cea08b6 100644 --- a/packages/apidom-ns-json-schema-draft-4/src/refractor/visitors/Visitor.ts +++ b/packages/apidom-ns-json-schema-draft-4/src/refractor/visitors/Visitor.ts @@ -15,18 +15,20 @@ class Visitor { Object.assign(this, options); } - // eslint-disable-next-line class-methods-use-this + /* eslint-disable class-methods-use-this, no-param-reassign */ public copyMetaAndAttributes(from: Element, to: Element) { if (from.meta.length > 0 || to.meta.length > 0) { - // eslint-disable-next-line no-param-reassign to.meta = deepmerge(to.meta, from.meta) as ObjectElement; - if (hasElementSourceMap(from)) { - // avoid deep merging of source maps - to.meta.set('sourceMap', from.meta.get('sourceMap')); - } + } + if (hasElementSourceMap(from)) { + to.startPositionRow = from.startPositionRow; + to.startPositionColumn = from.startPositionColumn; + to.startIndex = from.startIndex; + to.endPositionRow = from.endPositionRow; + to.endPositionColumn = from.endPositionColumn; + to.endIndex = from.endIndex; } if (from.attributes.length > 0 || from.meta.length > 0) { - // eslint-disable-next-line no-param-reassign to.attributes = deepmerge(to.attributes, from.attributes) as ObjectElement; } } diff --git a/packages/apidom-ns-json-schema-draft-4/test/refractor/plugins/replace-empty-element/mappings.ts b/packages/apidom-ns-json-schema-draft-4/test/refractor/plugins/replace-empty-element/mappings.ts index d72602c9fb..26ea7b7ba8 100644 --- a/packages/apidom-ns-json-schema-draft-4/test/refractor/plugins/replace-empty-element/mappings.ts +++ b/packages/apidom-ns-json-schema-draft-4/test/refractor/plugins/replace-empty-element/mappings.ts @@ -1,6 +1,6 @@ import { expect } from 'chai'; import dedent from 'dedent'; -import { sexprs, SourceMapElement } from '@swagger-api/apidom-core'; +import { sexprs } from '@swagger-api/apidom-core'; import { parse } from '@swagger-api/apidom-parser-adapter-yaml-1-2'; import { refractorPluginReplaceEmptyElement, JSONSchemaElement } from '../../../../src/index.ts'; @@ -125,12 +125,12 @@ describe('given JSON Schema definition with empty values', function () { plugins: [refractorPluginReplaceEmptyElement()], }) as JSONSchemaElement; const { properties: propertiesValue } = jsonSchemaElement; - const sourceMap = propertiesValue?.meta.get('sourceMap'); - const { positionStart, positionEnd } = sourceMap; - const expectedPosition = [1, 11, 62]; - expect(propertiesValue?.meta.get('sourceMap')).to.be.an.instanceof(SourceMapElement); - expect(positionStart.equals(expectedPosition)).to.be.true; - expect(positionEnd.equals(expectedPosition)).to.be.true; + expect(propertiesValue?.startPositionRow).to.equal(1); + expect(propertiesValue?.startPositionColumn).to.equal(11); + expect(propertiesValue?.startIndex).to.equal(62); + expect(propertiesValue?.endPositionRow).to.equal(1); + expect(propertiesValue?.endPositionColumn).to.equal(11); + expect(propertiesValue?.endIndex).to.equal(62); }); }); diff --git a/packages/apidom-ns-json-schema-draft-4/test/refractor/plugins/replace-empty-element/sequences.ts b/packages/apidom-ns-json-schema-draft-4/test/refractor/plugins/replace-empty-element/sequences.ts index afda0f2d39..b1adc3d2b5 100644 --- a/packages/apidom-ns-json-schema-draft-4/test/refractor/plugins/replace-empty-element/sequences.ts +++ b/packages/apidom-ns-json-schema-draft-4/test/refractor/plugins/replace-empty-element/sequences.ts @@ -1,6 +1,6 @@ import { expect } from 'chai'; import dedent from 'dedent'; -import { sexprs, SourceMapElement } from '@swagger-api/apidom-core'; +import { sexprs } from '@swagger-api/apidom-core'; import { parse } from '@swagger-api/apidom-parser-adapter-yaml-1-2'; import { refractorPluginReplaceEmptyElement, JSONSchemaElement } from '../../../../src/index.ts'; @@ -84,12 +84,12 @@ describe('given JSON Schema definition with empty values', function () { plugins: [refractorPluginReplaceEmptyElement()], }) as JSONSchemaElement; const { oneOf: oneOfValue } = jsonSchemaElement; - const sourceMap = oneOfValue?.get(0)?.meta.get('sourceMap'); - const { positionStart, positionEnd } = sourceMap; - const expectedPosition = [2, 2, 60]; - expect(oneOfValue?.meta.get('sourceMap')).to.be.an.instanceof(SourceMapElement); - expect(positionStart.equals(expectedPosition)).to.be.true; - expect(positionEnd.equals(expectedPosition)).to.be.true; + expect(oneOfValue?.get(0)?.startPositionRow).to.equal(2); + expect(oneOfValue?.get(0)?.startPositionColumn).to.equal(2); + expect(oneOfValue?.get(0)?.startIndex).to.equal(60); + expect(oneOfValue?.get(0)?.endPositionRow).to.equal(2); + expect(oneOfValue?.get(0)?.endPositionColumn).to.equal(2); + expect(oneOfValue?.get(0)?.endIndex).to.equal(60); }); }); diff --git a/packages/apidom-ns-json-schema-draft-6/src/refractor/plugins/replace-empty-element.ts b/packages/apidom-ns-json-schema-draft-6/src/refractor/plugins/replace-empty-element.ts index f15ad85c74..dc76790cb3 100644 --- a/packages/apidom-ns-json-schema-draft-6/src/refractor/plugins/replace-empty-element.ts +++ b/packages/apidom-ns-json-schema-draft-6/src/refractor/plugins/replace-empty-element.ts @@ -223,12 +223,19 @@ const plugin = () => () => ({ // no element factory found if (typeof elementFactory !== 'function') return undefined; - return elementFactory.call( + const result = elementFactory.call( { context }, undefined, cloneDeep(element.meta), cloneDeep(element.attributes), ); + result.startPositionRow = element.startPositionRow; + result.startPositionColumn = element.startPositionColumn; + result.startIndex = element.startIndex; + result.endPositionRow = element.endPositionRow; + result.endPositionColumn = element.endPositionColumn; + result.endIndex = element.endIndex; + return result; }, }, }); diff --git a/packages/apidom-ns-json-schema-draft-6/test/refractor/plugins/replace-empty-element/mappings.ts b/packages/apidom-ns-json-schema-draft-6/test/refractor/plugins/replace-empty-element/mappings.ts index c78b31ebf1..35e710ac05 100644 --- a/packages/apidom-ns-json-schema-draft-6/test/refractor/plugins/replace-empty-element/mappings.ts +++ b/packages/apidom-ns-json-schema-draft-6/test/refractor/plugins/replace-empty-element/mappings.ts @@ -1,6 +1,6 @@ import { expect } from 'chai'; import dedent from 'dedent'; -import { sexprs, SourceMapElement } from '@swagger-api/apidom-core'; +import { sexprs } from '@swagger-api/apidom-core'; import { parse } from '@swagger-api/apidom-parser-adapter-yaml-1-2'; import { refractorPluginReplaceEmptyElement, JSONSchemaElement } from '../../../../src/index.ts'; @@ -171,12 +171,12 @@ describe('given JSON Schema definition with empty values', function () { plugins: [refractorPluginReplaceEmptyElement()], }) as JSONSchemaElement; const { properties: propertiesValue } = jsonSchemaElement; - const sourceMap = propertiesValue?.meta.get('sourceMap'); - const { positionStart, positionEnd } = sourceMap; - const expectedPosition = [1, 11, 62]; - expect(propertiesValue?.meta.get('sourceMap')).to.be.an.instanceof(SourceMapElement); - expect(positionStart.equals(expectedPosition)).to.be.true; - expect(positionEnd.equals(expectedPosition)).to.be.true; + expect(propertiesValue?.startPositionRow).to.equal(1); + expect(propertiesValue?.startPositionColumn).to.equal(11); + expect(propertiesValue?.startIndex).to.equal(62); + expect(propertiesValue?.endPositionRow).to.equal(1); + expect(propertiesValue?.endPositionColumn).to.equal(11); + expect(propertiesValue?.endIndex).to.equal(62); }); }); diff --git a/packages/apidom-ns-json-schema-draft-6/test/refractor/plugins/replace-empty-element/sequences.ts b/packages/apidom-ns-json-schema-draft-6/test/refractor/plugins/replace-empty-element/sequences.ts index fc6473f2e8..b234c37d89 100644 --- a/packages/apidom-ns-json-schema-draft-6/test/refractor/plugins/replace-empty-element/sequences.ts +++ b/packages/apidom-ns-json-schema-draft-6/test/refractor/plugins/replace-empty-element/sequences.ts @@ -1,6 +1,6 @@ import { expect } from 'chai'; import dedent from 'dedent'; -import { sexprs, SourceMapElement } from '@swagger-api/apidom-core'; +import { sexprs } from '@swagger-api/apidom-core'; import { parse } from '@swagger-api/apidom-parser-adapter-yaml-1-2'; import { refractorPluginReplaceEmptyElement, JSONSchemaElement } from '../../../../src/index.ts'; @@ -99,12 +99,12 @@ describe('given JSON Schema definition with empty values', function () { plugins: [refractorPluginReplaceEmptyElement()], }) as JSONSchemaElement; const { oneOf: oneOfValue } = jsonSchemaElement; - const sourceMap = oneOfValue?.get(0)?.meta.get('sourceMap'); - const { positionStart, positionEnd } = sourceMap; - const expectedPosition = [2, 2, 60]; - expect(oneOfValue?.meta.get('sourceMap')).to.be.an.instanceof(SourceMapElement); - expect(positionStart.equals(expectedPosition)).to.be.true; - expect(positionEnd.equals(expectedPosition)).to.be.true; + expect(oneOfValue?.get(0)?.startPositionRow).to.equal(2); + expect(oneOfValue?.get(0)?.startPositionColumn).to.equal(2); + expect(oneOfValue?.get(0)?.startIndex).to.equal(60); + expect(oneOfValue?.get(0)?.endPositionRow).to.equal(2); + expect(oneOfValue?.get(0)?.endPositionColumn).to.equal(2); + expect(oneOfValue?.get(0)?.endIndex).to.equal(60); }); }); diff --git a/packages/apidom-ns-json-schema-draft-7/src/refractor/plugins/replace-empty-element.ts b/packages/apidom-ns-json-schema-draft-7/src/refractor/plugins/replace-empty-element.ts index 32b699dca1..ff04958fc8 100644 --- a/packages/apidom-ns-json-schema-draft-7/src/refractor/plugins/replace-empty-element.ts +++ b/packages/apidom-ns-json-schema-draft-7/src/refractor/plugins/replace-empty-element.ts @@ -241,12 +241,19 @@ const plugin = () => () => { // no element factory found if (typeof elementFactory !== 'function') return undefined; - return elementFactory.call( + const result = elementFactory.call( { context }, undefined, cloneDeep(element.meta), cloneDeep(element.attributes), ); + result.startPositionRow = element.startPositionRow; + result.startPositionColumn = element.startPositionColumn; + result.startIndex = element.startIndex; + result.endPositionRow = element.endPositionRow; + result.endPositionColumn = element.endPositionColumn; + result.endIndex = element.endIndex; + return result; }, }, }; diff --git a/packages/apidom-ns-json-schema-draft-7/test/refractor/plugins/replace-empty-element/mappings.ts b/packages/apidom-ns-json-schema-draft-7/test/refractor/plugins/replace-empty-element/mappings.ts index 34f63cf41f..d6dab46508 100644 --- a/packages/apidom-ns-json-schema-draft-7/test/refractor/plugins/replace-empty-element/mappings.ts +++ b/packages/apidom-ns-json-schema-draft-7/test/refractor/plugins/replace-empty-element/mappings.ts @@ -1,6 +1,6 @@ import { expect } from 'chai'; import dedent from 'dedent'; -import { sexprs, SourceMapElement } from '@swagger-api/apidom-core'; +import { sexprs } from '@swagger-api/apidom-core'; import { parse } from '@swagger-api/apidom-parser-adapter-yaml-1-2'; import { refractorPluginReplaceEmptyElement, JSONSchemaElement } from '../../../../src/index.ts'; @@ -264,12 +264,12 @@ describe('given JSON Schema definition with empty values', function () { plugins: [refractorPluginReplaceEmptyElement()], }) as JSONSchemaElement; const { properties: propertiesValue } = jsonSchemaElement; - const sourceMap = propertiesValue?.meta.get('sourceMap'); - const { positionStart, positionEnd } = sourceMap; - const expectedPosition = [1, 11, 62]; - expect(propertiesValue?.meta.get('sourceMap')).to.be.an.instanceof(SourceMapElement); - expect(positionStart.equals(expectedPosition)).to.be.true; - expect(positionEnd.equals(expectedPosition)).to.be.true; + expect(propertiesValue?.startPositionRow).to.equal(1); + expect(propertiesValue?.startPositionColumn).to.equal(11); + expect(propertiesValue?.startIndex).to.equal(62); + expect(propertiesValue?.endPositionRow).to.equal(1); + expect(propertiesValue?.endPositionColumn).to.equal(11); + expect(propertiesValue?.endIndex).to.equal(62); }); }); diff --git a/packages/apidom-ns-json-schema-draft-7/test/refractor/plugins/replace-empty-element/sequences.ts b/packages/apidom-ns-json-schema-draft-7/test/refractor/plugins/replace-empty-element/sequences.ts index e5c1221da8..05ff59a2f4 100644 --- a/packages/apidom-ns-json-schema-draft-7/test/refractor/plugins/replace-empty-element/sequences.ts +++ b/packages/apidom-ns-json-schema-draft-7/test/refractor/plugins/replace-empty-element/sequences.ts @@ -1,6 +1,6 @@ import { expect } from 'chai'; import dedent from 'dedent'; -import { sexprs, SourceMapElement } from '@swagger-api/apidom-core'; +import { sexprs } from '@swagger-api/apidom-core'; import { parse } from '@swagger-api/apidom-parser-adapter-yaml-1-2'; import { refractorPluginReplaceEmptyElement, JSONSchemaElement } from '../../../../src/index.ts'; @@ -115,12 +115,12 @@ describe('given JSON Schema definition with empty values', function () { plugins: [refractorPluginReplaceEmptyElement()], }) as JSONSchemaElement; const { oneOf: oneOfValue } = jsonSchemaElement; - const sourceMap = oneOfValue?.get(0)?.meta.get('sourceMap'); - const { positionStart, positionEnd } = sourceMap; - const expectedPosition = [2, 2, 60]; - expect(oneOfValue?.meta.get('sourceMap')).to.be.an.instanceof(SourceMapElement); - expect(positionStart.equals(expectedPosition)).to.be.true; - expect(positionEnd.equals(expectedPosition)).to.be.true; + expect(oneOfValue?.get(0)?.startPositionRow).to.equal(2); + expect(oneOfValue?.get(0)?.startPositionColumn).to.equal(2); + expect(oneOfValue?.get(0)?.startIndex).to.equal(60); + expect(oneOfValue?.get(0)?.endPositionRow).to.equal(2); + expect(oneOfValue?.get(0)?.endPositionColumn).to.equal(2); + expect(oneOfValue?.get(0)?.endIndex).to.equal(60); }); }); diff --git a/packages/apidom-ns-openapi-2/src/refractor/plugins/replace-empty-element.ts b/packages/apidom-ns-openapi-2/src/refractor/plugins/replace-empty-element.ts index fff2684b20..4a30fe3518 100644 --- a/packages/apidom-ns-openapi-2/src/refractor/plugins/replace-empty-element.ts +++ b/packages/apidom-ns-openapi-2/src/refractor/plugins/replace-empty-element.ts @@ -366,12 +366,19 @@ const plugin = () => () => ({ // no element factory found if (typeof elementFactory !== 'function') return undefined; - return elementFactory.call( + const result = elementFactory.call( { context }, undefined, cloneDeep(element.meta), cloneDeep(element.attributes), ); + result.startPositionRow = element.startPositionRow; + result.startPositionColumn = element.startPositionColumn; + result.startIndex = element.startIndex; + result.endPositionRow = element.endPositionRow; + result.endPositionColumn = element.endPositionColumn; + result.endIndex = element.endIndex; + return result; }, }, }); diff --git a/packages/apidom-ns-openapi-2/src/refractor/visitors/Visitor.ts b/packages/apidom-ns-openapi-2/src/refractor/visitors/Visitor.ts index a9b5296e53..03b599ba3f 100644 --- a/packages/apidom-ns-openapi-2/src/refractor/visitors/Visitor.ts +++ b/packages/apidom-ns-openapi-2/src/refractor/visitors/Visitor.ts @@ -19,10 +19,14 @@ class Visitor { public copyMetaAndAttributes(from: Element, to: Element) { if (from.meta.length > 0 || to.meta.length > 0) { to.meta = deepmerge(to.meta, from.meta) as ObjectElement; - if (hasElementSourceMap(from)) { - // avoid deep merging of source maps - to.meta.set('sourceMap', from.meta.get('sourceMap')); - } + } + if (hasElementSourceMap(from)) { + to.startPositionRow = from.startPositionRow; + to.startPositionColumn = from.startPositionColumn; + to.startIndex = from.startIndex; + to.endPositionRow = from.endPositionRow; + to.endPositionColumn = from.endPositionColumn; + to.endIndex = from.endIndex; } if (from.attributes.length > 0 || from.meta.length > 0) { to.attributes = deepmerge(to.attributes, from.attributes) as ObjectElement; // eslint-disable-line no-param-reassign diff --git a/packages/apidom-ns-openapi-2/test/refractor/plugins/replace-empty-element/mappings.ts b/packages/apidom-ns-openapi-2/test/refractor/plugins/replace-empty-element/mappings.ts index 3613e60afb..bad6107bab 100644 --- a/packages/apidom-ns-openapi-2/test/refractor/plugins/replace-empty-element/mappings.ts +++ b/packages/apidom-ns-openapi-2/test/refractor/plugins/replace-empty-element/mappings.ts @@ -1,6 +1,6 @@ import { expect } from 'chai'; import dedent from 'dedent'; -import { sexprs, SourceMapElement } from '@swagger-api/apidom-core'; +import { sexprs } from '@swagger-api/apidom-core'; import { parse } from '@swagger-api/apidom-parser-adapter-yaml-1-2'; import { refractorPluginReplaceEmptyElement, SwaggerElement } from '../../../../src/index.ts'; @@ -121,12 +121,12 @@ describe('given OpenAPI definition with empty values', function () { plugins: [refractorPluginReplaceEmptyElement()], }) as SwaggerElement; const { info: infoValue } = swaggerElement; - const sourceMap = infoValue?.meta.get('sourceMap'); - const { positionStart, positionEnd } = sourceMap; - const expectedPosition = [1, 5, 20]; - expect(infoValue?.meta.get('sourceMap')).to.be.an.instanceof(SourceMapElement); - expect(positionStart.equals(expectedPosition)).to.be.true; - expect(positionEnd.equals(expectedPosition)).to.be.true; + expect(infoValue?.startPositionRow).to.equal(1); + expect(infoValue?.startPositionColumn).to.equal(5); + expect(infoValue?.startIndex).to.equal(20); + expect(infoValue?.endPositionRow).to.equal(1); + expect(infoValue?.endPositionColumn).to.equal(5); + expect(infoValue?.endIndex).to.equal(20); }); }); diff --git a/packages/apidom-ns-openapi-3-0/src/refractor/plugins/replace-empty-element.ts b/packages/apidom-ns-openapi-3-0/src/refractor/plugins/replace-empty-element.ts index 655ef37f96..e88e39c8f6 100644 --- a/packages/apidom-ns-openapi-3-0/src/refractor/plugins/replace-empty-element.ts +++ b/packages/apidom-ns-openapi-3-0/src/refractor/plugins/replace-empty-element.ts @@ -635,12 +635,19 @@ const plugin = () => () => ({ // no element factory found if (typeof elementFactory !== 'function') return undefined; - return elementFactory.call( + const result = elementFactory.call( { context }, undefined, cloneDeep(element.meta), cloneDeep(element.attributes), ); + result.startPositionRow = element.startPositionRow; + result.startPositionColumn = element.startPositionColumn; + result.startIndex = element.startIndex; + result.endPositionRow = element.endPositionRow; + result.endPositionColumn = element.endPositionColumn; + result.endIndex = element.endIndex; + return result; }, }, }); diff --git a/packages/apidom-ns-openapi-3-0/src/refractor/visitors/Visitor.ts b/packages/apidom-ns-openapi-3-0/src/refractor/visitors/Visitor.ts index c2c2436811..10f0acf34d 100644 --- a/packages/apidom-ns-openapi-3-0/src/refractor/visitors/Visitor.ts +++ b/packages/apidom-ns-openapi-3-0/src/refractor/visitors/Visitor.ts @@ -19,10 +19,14 @@ class Visitor { public copyMetaAndAttributes(from: Element, to: Element) { if (from.meta.length > 0 || to.meta.length > 0) { to.meta = deepmerge(to.meta, from.meta) as ObjectElement; - if (hasElementSourceMap(from)) { - // avoid deep merging of source maps - to.meta.set('sourceMap', from.meta.get('sourceMap')); - } + } + if (hasElementSourceMap(from)) { + to.startPositionRow = from.startPositionRow; + to.startPositionColumn = from.startPositionColumn; + to.startIndex = from.startIndex; + to.endPositionRow = from.endPositionRow; + to.endPositionColumn = from.endPositionColumn; + to.endIndex = from.endIndex; } if (from.attributes.length > 0 || from.meta.length > 0) { to.attributes = deepmerge(to.attributes, from.attributes) as ObjectElement; // eslint-disable-line no-param-reassign diff --git a/packages/apidom-ns-openapi-3-0/test/refractor/plugins/replace-empty-element/mappings.ts b/packages/apidom-ns-openapi-3-0/test/refractor/plugins/replace-empty-element/mappings.ts index 2ab35c9c98..8a29cc60b7 100644 --- a/packages/apidom-ns-openapi-3-0/test/refractor/plugins/replace-empty-element/mappings.ts +++ b/packages/apidom-ns-openapi-3-0/test/refractor/plugins/replace-empty-element/mappings.ts @@ -1,6 +1,6 @@ import { expect } from 'chai'; import dedent from 'dedent'; -import { sexprs, SourceMapElement } from '@swagger-api/apidom-core'; +import { sexprs } from '@swagger-api/apidom-core'; import { parse } from '@swagger-api/apidom-parser-adapter-yaml-1-2'; import { refractorPluginReplaceEmptyElement, OpenApi3_0Element } from '../../../../src/index.ts'; @@ -119,12 +119,12 @@ describe('given OpenAPI definition with empty values', function () { plugins: [refractorPluginReplaceEmptyElement()], }) as OpenApi3_0Element; const { info: infoValue } = openApiElement; - const sourceMap = infoValue?.meta.get('sourceMap'); - const { positionStart, positionEnd } = sourceMap; - const expectedPosition = [1, 5, 20]; - expect(infoValue?.meta.get('sourceMap')).to.be.an.instanceof(SourceMapElement); - expect(positionStart.equals(expectedPosition)).to.be.true; - expect(positionEnd.equals(expectedPosition)).to.be.true; + expect(infoValue?.startPositionRow).to.equal(1); + expect(infoValue?.startPositionColumn).to.equal(5); + expect(infoValue?.startIndex).to.equal(20); + expect(infoValue?.endPositionRow).to.equal(1); + expect(infoValue?.endPositionColumn).to.equal(5); + expect(infoValue?.endIndex).to.equal(20); }); }); diff --git a/packages/apidom-ns-openapi-3-1/src/refractor/plugins/replace-empty-element.ts b/packages/apidom-ns-openapi-3-1/src/refractor/plugins/replace-empty-element.ts index e04ec23992..6fcbca67e2 100644 --- a/packages/apidom-ns-openapi-3-1/src/refractor/plugins/replace-empty-element.ts +++ b/packages/apidom-ns-openapi-3-1/src/refractor/plugins/replace-empty-element.ts @@ -703,12 +703,19 @@ const plugin = // no element factory found if (typeof elementFactory !== 'function') return undefined; - return elementFactory.call( + const result = elementFactory.call( { context }, undefined, cloneDeep(element.meta), cloneDeep(element.attributes), ); + result.startPositionRow = element.startPositionRow; + result.startPositionColumn = element.startPositionColumn; + result.startIndex = element.startIndex; + result.endPositionRow = element.endPositionRow; + result.endPositionColumn = element.endPositionColumn; + result.endIndex = element.endIndex; + return result; }, }, }; diff --git a/packages/apidom-ns-openapi-3-1/test/refractor/plugins/replace-empty-element/mappings.ts b/packages/apidom-ns-openapi-3-1/test/refractor/plugins/replace-empty-element/mappings.ts index 38b300e200..011d6be24d 100644 --- a/packages/apidom-ns-openapi-3-1/test/refractor/plugins/replace-empty-element/mappings.ts +++ b/packages/apidom-ns-openapi-3-1/test/refractor/plugins/replace-empty-element/mappings.ts @@ -1,6 +1,6 @@ import { expect } from 'chai'; import dedent from 'dedent'; -import { sexprs, SourceMapElement } from '@swagger-api/apidom-core'; +import { sexprs } from '@swagger-api/apidom-core'; import { parse } from '@swagger-api/apidom-parser-adapter-yaml-1-2'; import { refractorPluginReplaceEmptyElement, OpenApi3_1Element } from '../../../../src/index.ts'; @@ -119,12 +119,12 @@ describe('given OpenAPI definition with empty values', function () { plugins: [refractorPluginReplaceEmptyElement()], }) as OpenApi3_1Element; const { info: infoValue } = openApiElement; - const sourceMap = infoValue?.meta.get('sourceMap'); - const { positionStart, positionEnd } = sourceMap; - const expectedPosition = [1, 5, 20]; - expect(infoValue?.meta.get('sourceMap')).to.be.an.instanceof(SourceMapElement); - expect(positionStart.equals(expectedPosition)).to.be.true; - expect(positionEnd.equals(expectedPosition)).to.be.true; + expect(infoValue?.startPositionRow).to.equal(1); + expect(infoValue?.startPositionColumn).to.equal(5); + expect(infoValue?.startIndex).to.equal(20); + expect(infoValue?.endPositionRow).to.equal(1); + expect(infoValue?.endPositionColumn).to.equal(5); + expect(infoValue?.endIndex).to.equal(20); }); }); diff --git a/packages/apidom-parser-adapter-arazzo-yaml-1/test/adapter.ts b/packages/apidom-parser-adapter-arazzo-yaml-1/test/adapter.ts index d36adc3bdd..eb4ef18e81 100644 --- a/packages/apidom-parser-adapter-arazzo-yaml-1/test/adapter.ts +++ b/packages/apidom-parser-adapter-arazzo-yaml-1/test/adapter.ts @@ -3,7 +3,7 @@ import path from 'node:path'; import { fileURLToPath } from 'node:url'; import { assert, expect } from 'chai'; import dedent from 'dedent'; -import { isParseResultElement, SourceMapElement, sexprs } from '@swagger-api/apidom-core'; +import { isParseResultElement, sexprs } from '@swagger-api/apidom-core'; import { isArazzoSpecification1Element } from '@swagger-api/apidom-ns-arazzo-1'; import * as adapter from '../src/adapter.ts'; @@ -89,13 +89,13 @@ describe('adapter', function () { const { result } = await adapter.parse(yamlSource, { sourceMap: true }); // @ts-ignore const infoValue = result.get('info'); - const sourceMap = infoValue.meta.get('sourceMap'); - const { positionStart, positionEnd } = sourceMap; - const expectedEmptyPosition = [1, 5, 19]; - assert.instanceOf(sourceMap, SourceMapElement); - assert.isTrue(positionStart.equals(expectedEmptyPosition)); - assert.isTrue(positionEnd.equals(expectedEmptyPosition)); + expect(infoValue?.startPositionRow).to.equal(1); + expect(infoValue?.startPositionColumn).to.equal(5); + expect(infoValue?.startIndex).to.equal(19); + expect(infoValue?.endPositionRow).to.equal(1); + expect(infoValue?.endPositionColumn).to.equal(5); + expect(infoValue?.endIndex).to.equal(19); }); }); diff --git a/packages/apidom-parser-adapter-asyncapi-yaml-2/test/adapter.ts b/packages/apidom-parser-adapter-asyncapi-yaml-2/test/adapter.ts index 007a65ccc2..13901fbdca 100644 --- a/packages/apidom-parser-adapter-asyncapi-yaml-2/test/adapter.ts +++ b/packages/apidom-parser-adapter-asyncapi-yaml-2/test/adapter.ts @@ -3,7 +3,7 @@ import path from 'node:path'; import { fileURLToPath } from 'node:url'; import { assert, expect } from 'chai'; import dedent from 'dedent'; -import { isParseResultElement, SourceMapElement, sexprs } from '@swagger-api/apidom-core'; +import { isParseResultElement, sexprs } from '@swagger-api/apidom-core'; import { isAsyncApi2Element } from '@swagger-api/apidom-ns-asyncapi-2'; import * as adapter from '../src/adapter.ts'; @@ -85,13 +85,13 @@ describe('adapter', function () { const { result } = await adapter.parse(yamlSource, { sourceMap: true }); // @ts-ignore const infoValue = result.get('info'); - const sourceMap = infoValue.meta.get('sourceMap'); - const { positionStart, positionEnd } = sourceMap; - const expectedEmptyPosition = [1, 5, 21]; - assert.instanceOf(sourceMap, SourceMapElement); - assert.isTrue(positionStart.equals(expectedEmptyPosition)); - assert.isTrue(positionEnd.equals(expectedEmptyPosition)); + expect(infoValue?.startPositionRow).to.equal(1); + expect(infoValue?.startPositionColumn).to.equal(5); + expect(infoValue?.startIndex).to.equal(21); + expect(infoValue?.endPositionRow).to.equal(1); + expect(infoValue?.endPositionColumn).to.equal(5); + expect(infoValue?.endIndex).to.equal(21); }); }); diff --git a/packages/apidom-parser-adapter-json-schema-yaml-2020-12/test/adapter.ts b/packages/apidom-parser-adapter-json-schema-yaml-2020-12/test/adapter.ts index 1c880a4fef..d7b6b0f5df 100644 --- a/packages/apidom-parser-adapter-json-schema-yaml-2020-12/test/adapter.ts +++ b/packages/apidom-parser-adapter-json-schema-yaml-2020-12/test/adapter.ts @@ -3,7 +3,7 @@ import path from 'node:path'; import { fileURLToPath } from 'node:url'; import { assert, expect } from 'chai'; import dedent from 'dedent'; -import { isParseResultElement, SourceMapElement, sexprs } from '@swagger-api/apidom-core'; +import { isParseResultElement, hasElementSourceMap, sexprs } from '@swagger-api/apidom-core'; import { isJSONSchemaElement } from '@swagger-api/apidom-ns-json-schema-2020-12'; import * as adapter from '../src/adapter.ts'; @@ -78,7 +78,7 @@ describe('adapter', function () { // @ts-ignore const subMappingValue = result.get('mapping').get('sub-mapping'); - assert.instanceOf(subMappingValue.meta.get('sourceMap'), SourceMapElement); + assert.isTrue(hasElementSourceMap(subMappingValue)); }); }); diff --git a/packages/apidom-parser-adapter-json/src/syntactic-analysis/TreeCursorSyntaxNode.ts b/packages/apidom-parser-adapter-json/src/syntactic-analysis/TreeCursorSyntaxNode.ts index d1866d0814..34131df6e3 100644 --- a/packages/apidom-parser-adapter-json/src/syntactic-analysis/TreeCursorSyntaxNode.ts +++ b/packages/apidom-parser-adapter-json/src/syntactic-analysis/TreeCursorSyntaxNode.ts @@ -1,15 +1,19 @@ -import { TreeCursor as NodeTreeCursor, Point as NodePoint } from 'tree-sitter'; -import { TreeCursor as WebTreeCursor, Point as WebPoint } from 'web-tree-sitter'; +import { TreeCursor as NodeTreeCursor } from 'tree-sitter'; +import { TreeCursor as WebTreeCursor } from 'web-tree-sitter'; class TreeCursorSyntaxNode { public readonly type: string; - public readonly startPosition: NodePoint | WebPoint; + public readonly startPositionRow: number; - public readonly endPosition: NodePoint | WebPoint; + public readonly startPositionColumn: number; public readonly startIndex: number; + public readonly endPositionRow: number; + + public readonly endPositionColumn: number; + public readonly endIndex: number; public readonly text: string; @@ -26,9 +30,11 @@ class TreeCursorSyntaxNode { constructor(cursor: NodeTreeCursor | WebTreeCursor) { this.type = cursor.nodeType; - this.startPosition = cursor.startPosition; - this.endPosition = cursor.endPosition; + this.startPositionRow = cursor.startPosition.row; + this.startPositionColumn = cursor.startPosition.column; this.startIndex = cursor.startIndex; + this.endPositionRow = cursor.endPosition.row; + this.endPositionColumn = cursor.endPosition.column; this.endIndex = cursor.endIndex; this.text = cursor.nodeText; this.isNamed = cursor.nodeIsNamed; diff --git a/packages/apidom-parser-adapter-json/src/syntactic-analysis/direct/visitors/CstVisitor.ts b/packages/apidom-parser-adapter-json/src/syntactic-analysis/direct/visitors/CstVisitor.ts index 0b5f7cb9ce..1e0b84eb8b 100644 --- a/packages/apidom-parser-adapter-json/src/syntactic-analysis/direct/visitors/CstVisitor.ts +++ b/packages/apidom-parser-adapter-json/src/syntactic-analysis/direct/visitors/CstVisitor.ts @@ -4,7 +4,6 @@ import { NumberElement, ParseResultElement, Element, - SourceMapElement, MemberElement, ObjectElement, ArrayElement, @@ -18,20 +17,6 @@ import TreeCursorSyntaxNode from '../../TreeCursorSyntaxNode.ts'; /* eslint-disable no-underscore-dangle */ class CstVisitor { - private static toPosition(node: TreeCursorSyntaxNode): Array { - const start = new ArrayElement([ - node.startPosition.row, - node.startPosition.column, - node.startIndex, - ]); - const end = new ArrayElement([node.endPosition.row, node.endPosition.column, node.endIndex]); - - start.classes.push('position'); - end.classes.push('position'); - - return [start, end]; - } - public sourceMap: boolean = false; public annotations: AnnotationElement[]; @@ -182,23 +167,20 @@ class CstVisitor { return null; } + /* eslint-disable no-param-reassign */ private maybeAddSourceMap(node: TreeCursorSyntaxNode, element: Element): void { if (!this.sourceMap) { return; } - const sourceMap = new SourceMapElement(); - const position = CstVisitor.toPosition(node); - - if (position !== null) { - const [start, end] = position; - sourceMap.push(start); - sourceMap.push(end); - } - // @ts-ignore - sourceMap.astNode = node; - element.meta.set('sourceMap', sourceMap); + element.startPositionRow = node.startPositionRow; + element.startPositionColumn = node.startPositionColumn; + element.startIndex = node.startIndex; + element.endPositionRow = node.endPositionRow; + element.endPositionColumn = node.endPositionColumn; + element.endIndex = node.endIndex; } + /* eslint-enable no-param-reassign */ } /* eslint-enable no-underscore-dangle */ diff --git a/packages/apidom-parser-adapter-json/src/syntactic-analysis/indirect/visitors/CstVisitor.ts b/packages/apidom-parser-adapter-json/src/syntactic-analysis/indirect/visitors/CstVisitor.ts index 6efc24dac3..18a797e496 100644 --- a/packages/apidom-parser-adapter-json/src/syntactic-analysis/indirect/visitors/CstVisitor.ts +++ b/packages/apidom-parser-adapter-json/src/syntactic-analysis/indirect/visitors/CstVisitor.ts @@ -11,8 +11,6 @@ import { JsonStringContent, JsonTrue, ParseResult, - Position, - Point, Literal, Error, } from '@swagger-api/apidom-ast'; @@ -32,28 +30,16 @@ export const keyMap = { /* eslint-disable class-methods-use-this */ class CstVisitor { - private static toPosition(node: TreeCursorSyntaxNode): Position { - const start = new Point({ - row: node.startPosition.row, - column: node.startPosition.column, - char: node.startIndex, - }); - const end = new Point({ - row: node.endPosition.row, - column: node.endPosition.column, - char: node.endIndex, - }); - - return new Position({ start, end }); - } - public readonly document = { enter: (node: TreeCursorSyntaxNode): JsonDocument => { - const position = CstVisitor.toPosition(node); - return new JsonDocument({ children: node.children, - position, + startPositionRow: node.startPositionRow, + startPositionColumn: node.startPositionColumn, + startIndex: node.startIndex, + endPositionRow: node.endPositionRow, + endPositionColumn: node.endPositionColumn, + endIndex: node.endIndex, isMissing: node.isMissing, }); }, @@ -65,77 +51,153 @@ class CstVisitor { public enter(node: TreeCursorSyntaxNode): Literal | undefined { // anonymous literals from CST transformed into AST literal nodes if (node instanceof TreeCursorSyntaxNode && !node.isNamed) { - const position = CstVisitor.toPosition(node); const value = node.type || node.text; const { isMissing } = node; - return new Literal({ value, position, isMissing }); + return new Literal({ + value, + startPositionRow: node.startPositionRow, + startPositionColumn: node.startPositionColumn, + startIndex: node.startIndex, + endPositionRow: node.endPositionRow, + endPositionColumn: node.endPositionColumn, + endIndex: node.endIndex, + isMissing, + }); } return undefined; } public object(node: TreeCursorSyntaxNode): JsonObject { - const position = CstVisitor.toPosition(node); - - return new JsonObject({ children: node.children, position, isMissing: node.isMissing }); + return new JsonObject({ + children: node.children, + // position, + startPositionRow: node.startPositionRow, + startPositionColumn: node.startPositionColumn, + startIndex: node.startIndex, + endPositionRow: node.endPositionRow, + endPositionColumn: node.endPositionColumn, + endIndex: node.endIndex, + isMissing: node.isMissing, + }); } public pair(node: TreeCursorSyntaxNode): JsonProperty { - const position = CstVisitor.toPosition(node); const children = node.children.slice(1); const { keyNode } = node; const key = new JsonKey({ children: keyNode?.children || [], - position: keyNode != null ? CstVisitor.toPosition(keyNode) : undefined, + startPositionRow: keyNode?.startPositionRow, + startPositionColumn: keyNode?.startPositionColumn, + startIndex: keyNode?.startIndex, + endPositionRow: keyNode?.endPositionRow, + endPositionColumn: keyNode?.endPositionColumn, + endIndex: keyNode?.endIndex, isMissing: keyNode != null ? keyNode.isMissing : false, }); - return new JsonProperty({ children: [key, ...children], position, isMissing: node.isMissing }); + return new JsonProperty({ + children: [key, ...children], + startPositionRow: node.startPositionRow, + startPositionColumn: node.startPositionColumn, + startIndex: node.startIndex, + endPositionRow: node.endPositionRow, + endPositionColumn: node.endPositionColumn, + endIndex: node.endIndex, + isMissing: node.isMissing, + }); } public array(node: TreeCursorSyntaxNode): JsonArray { - const position = CstVisitor.toPosition(node); - - return new JsonArray({ children: node.children, position, isMissing: node.isMissing }); + return new JsonArray({ + children: node.children, + startPositionRow: node.startPositionRow, + startPositionColumn: node.startPositionColumn, + startIndex: node.startIndex, + endPositionRow: node.endPositionRow, + endPositionColumn: node.endPositionColumn, + endIndex: node.endIndex, + isMissing: node.isMissing, + }); } public string(node: TreeCursorSyntaxNode): JsonString { - const position = CstVisitor.toPosition(node); const content = new JsonStringContent({ value: JSON.parse(node.text) }); - return new JsonString({ children: [content], position, isMissing: node.isMissing }); + return new JsonString({ + children: [content], + startPositionRow: node.startPositionRow, + startPositionColumn: node.startPositionColumn, + startIndex: node.startIndex, + endPositionRow: node.endPositionRow, + endPositionColumn: node.endPositionColumn, + endIndex: node.endIndex, + isMissing: node.isMissing, + }); } public number(node: TreeCursorSyntaxNode): JsonNumber { - const position = CstVisitor.toPosition(node); const value = node.text; - return new JsonNumber({ value, position, isMissing: node.isMissing }); + return new JsonNumber({ + value, + startPositionRow: node.startPositionRow, + startPositionColumn: node.startPositionColumn, + startIndex: node.startIndex, + endPositionRow: node.endPositionRow, + endPositionColumn: node.endPositionColumn, + endIndex: node.endIndex, + isMissing: node.isMissing, + }); } // eslint-disable-next-line @typescript-eslint/naming-convention public null(node: TreeCursorSyntaxNode): JsonNull { - const position = CstVisitor.toPosition(node); const value = node.text; - return new JsonNull({ value, position, isMissing: node.isMissing }); + return new JsonNull({ + value, + startPositionRow: node.startPositionRow, + startPositionColumn: node.startPositionColumn, + startIndex: node.startIndex, + endPositionRow: node.endPositionRow, + endPositionColumn: node.endPositionColumn, + endIndex: node.endIndex, + isMissing: node.isMissing, + }); } // eslint-disable-next-line @typescript-eslint/naming-convention public true(node: TreeCursorSyntaxNode): JsonTrue { - const position = CstVisitor.toPosition(node); const value = node.text; - return new JsonTrue({ value, position, isMissing: node.isMissing }); + return new JsonTrue({ + value, + startPositionRow: node.startPositionRow, + startPositionColumn: node.startPositionColumn, + startIndex: node.startIndex, + endPositionRow: node.endPositionRow, + endPositionColumn: node.endPositionColumn, + endIndex: node.endIndex, + isMissing: node.isMissing, + }); } // eslint-disable-next-line @typescript-eslint/naming-convention public false(node: TreeCursorSyntaxNode): JsonFalse { - const position = CstVisitor.toPosition(node); const value = node.text; - return new JsonFalse({ value, position, isMissing: node.isMissing }); + return new JsonFalse({ + value, + startPositionRow: node.startPositionRow, + startPositionColumn: node.startPositionColumn, + startIndex: node.startIndex, + endPositionRow: node.endPositionRow, + endPositionColumn: node.endPositionColumn, + endIndex: node.endIndex, + isMissing: node.isMissing, + }); } public ERROR( @@ -144,10 +206,14 @@ class CstVisitor { parent: unknown, path: string[], ): ParseResult | Error { - const position = CstVisitor.toPosition(node); const errorNode = new Error({ children: node.children, - position, + startPositionRow: node.startPositionRow, + startPositionColumn: node.startPositionColumn, + startIndex: node.startIndex, + endPositionRow: node.endPositionRow, + endPositionColumn: node.endPositionColumn, + endIndex: node.endIndex, isUnexpected: !node.hasError, isMissing: node.isMissing, value: node.text, diff --git a/packages/apidom-parser-adapter-json/src/syntactic-analysis/indirect/visitors/JsonAstVisitor.ts b/packages/apidom-parser-adapter-json/src/syntactic-analysis/indirect/visitors/JsonAstVisitor.ts index 9d3407a15e..8b9525c32f 100644 --- a/packages/apidom-parser-adapter-json/src/syntactic-analysis/indirect/visitors/JsonAstVisitor.ts +++ b/packages/apidom-parser-adapter-json/src/syntactic-analysis/indirect/visitors/JsonAstVisitor.ts @@ -20,7 +20,6 @@ import { Element, ParseResultElement, ObjectElement, - SourceMapElement, MemberElement, ArrayElement, BooleanElement, @@ -218,18 +217,20 @@ class JsonAstVisitor { return null; } + /* eslint-disable no-param-reassign */ private maybeAddSourceMap(node: JsonNode, element: Element): void { if (!this.sourceMap) { return; } - const sourceMap = new SourceMapElement(); - // @ts-ignore - sourceMap.position = node.position; - // @ts-ignore - sourceMap.astNode = node; - element.meta.set('sourceMap', sourceMap); + element.startPositionRow = node.startPositionRow; + element.startPositionColumn = node.startPositionColumn; + element.startIndex = node.startIndex; + element.endPositionRow = node.endPositionRow; + element.endPositionColumn = node.endPositionColumn; + element.endIndex = node.endIndex; } + /* eslint-enable no-param-reassign */ } export default JsonAstVisitor; diff --git a/packages/apidom-parser-adapter-json/test/syntactic-analysis/__snapshots__/TreeCursorIterator.mjs.snap b/packages/apidom-parser-adapter-json/test/syntactic-analysis/__snapshots__/TreeCursorIterator.mjs.snap index a253c9dedf..d6ee8fb8ed 100644 --- a/packages/apidom-parser-adapter-json/test/syntactic-analysis/__snapshots__/TreeCursorIterator.mjs.snap +++ b/packages/apidom-parser-adapter-json/test/syntactic-analysis/__snapshots__/TreeCursorIterator.mjs.snap @@ -8,131 +8,103 @@ TreeCursorSyntaxNode { TreeCursorSyntaxNode { children: Array [], endIndex: 1, - endPosition: Object { - column: 1, - row: 0, - }, + endPositionColumn: 1, + endPositionRow: 0, fieldName: undefined, hasError: false, isMissing: false, isNamed: false, startIndex: 0, - startPosition: Object { - column: 0, - row: 0, - }, + startPositionColumn: 0, + startPositionRow: 0, text: [, type: [, }, TreeCursorSyntaxNode { children: Array [], endIndex: 2, - endPosition: Object { - column: 2, - row: 0, - }, + endPositionColumn: 2, + endPositionRow: 0, fieldName: undefined, hasError: false, isMissing: false, isNamed: true, startIndex: 1, - startPosition: Object { - column: 1, - row: 0, - }, + startPositionColumn: 1, + startPositionRow: 0, text: 1, type: number, }, TreeCursorSyntaxNode { children: Array [], endIndex: 3, - endPosition: Object { - column: 3, - row: 0, - }, + endPositionColumn: 3, + endPositionRow: 0, fieldName: undefined, hasError: false, isMissing: false, isNamed: false, startIndex: 2, - startPosition: Object { - column: 2, - row: 0, - }, + startPositionColumn: 2, + startPositionRow: 0, text: ,, type: ,, }, TreeCursorSyntaxNode { children: Array [], endIndex: 5, - endPosition: Object { - column: 5, - row: 0, - }, + endPositionColumn: 5, + endPositionRow: 0, fieldName: undefined, hasError: false, isMissing: false, isNamed: true, startIndex: 4, - startPosition: Object { - column: 4, - row: 0, - }, + startPositionColumn: 4, + startPositionRow: 0, text: 2, type: number, }, TreeCursorSyntaxNode { children: Array [], endIndex: 6, - endPosition: Object { - column: 6, - row: 0, - }, + endPositionColumn: 6, + endPositionRow: 0, fieldName: undefined, hasError: false, isMissing: false, isNamed: false, startIndex: 5, - startPosition: Object { - column: 5, - row: 0, - }, + startPositionColumn: 5, + startPositionRow: 0, text: ], type: ], }, ], endIndex: 6, - endPosition: Object { - column: 6, - row: 0, - }, + endPositionColumn: 6, + endPositionRow: 0, fieldName: undefined, hasError: false, isMissing: false, isNamed: true, startIndex: 0, - startPosition: Object { - column: 0, - row: 0, - }, + startPositionColumn: 0, + startPositionRow: 0, text: [1, 2], type: array, }, ], endIndex: 6, - endPosition: Object { - column: 6, - row: 0, - }, + endPositionColumn: 6, + endPositionRow: 0, fieldName: undefined, hasError: false, isMissing: false, isNamed: true, startIndex: 0, - startPosition: Object { - column: 0, - row: 0, - }, + startPositionColumn: 0, + startPositionRow: 0, text: [1, 2], type: document, } diff --git a/packages/apidom-parser-adapter-openapi-yaml-2/test/adapter.ts b/packages/apidom-parser-adapter-openapi-yaml-2/test/adapter.ts index d8420f4e3c..b043b6eb67 100644 --- a/packages/apidom-parser-adapter-openapi-yaml-2/test/adapter.ts +++ b/packages/apidom-parser-adapter-openapi-yaml-2/test/adapter.ts @@ -3,7 +3,7 @@ import path from 'node:path'; import { fileURLToPath } from 'node:url'; import { assert, expect } from 'chai'; import dedent from 'dedent'; -import { isParseResultElement, SourceMapElement, sexprs } from '@swagger-api/apidom-core'; +import { isParseResultElement, hasElementSourceMap, sexprs } from '@swagger-api/apidom-core'; import { isSwaggerElement } from '@swagger-api/apidom-ns-openapi-2'; import * as adapter from '../src/adapter.ts'; @@ -86,7 +86,7 @@ describe('adapter', function () { // @ts-ignore const subMappingValue = result.get('mapping').get('sub-mapping'); - assert.instanceOf(subMappingValue.meta.get('sourceMap'), SourceMapElement); + assert.isTrue(hasElementSourceMap(subMappingValue)); }); }); diff --git a/packages/apidom-parser-adapter-openapi-yaml-3-0/test/adapter.ts b/packages/apidom-parser-adapter-openapi-yaml-3-0/test/adapter.ts index 46f898daaa..193b2865d5 100644 --- a/packages/apidom-parser-adapter-openapi-yaml-3-0/test/adapter.ts +++ b/packages/apidom-parser-adapter-openapi-yaml-3-0/test/adapter.ts @@ -3,7 +3,7 @@ import path from 'node:path'; import { fileURLToPath } from 'node:url'; import { assert, expect } from 'chai'; import dedent from 'dedent'; -import { isParseResultElement, SourceMapElement, sexprs } from '@swagger-api/apidom-core'; +import { isParseResultElement, sexprs, hasElementSourceMap } from '@swagger-api/apidom-core'; import { isOpenApi3_0Element } from '@swagger-api/apidom-ns-openapi-3-0'; import * as adapter from '../src/adapter.ts'; @@ -86,7 +86,7 @@ describe('adapter', function () { // @ts-ignore const subMappingValue = result.get('mapping').get('sub-mapping'); - assert.instanceOf(subMappingValue.meta.get('sourceMap'), SourceMapElement); + assert.isTrue(hasElementSourceMap(subMappingValue)); }); }); diff --git a/packages/apidom-parser-adapter-openapi-yaml-3-1/test/adapter.ts b/packages/apidom-parser-adapter-openapi-yaml-3-1/test/adapter.ts index 15b314c20d..dc3a2e8703 100644 --- a/packages/apidom-parser-adapter-openapi-yaml-3-1/test/adapter.ts +++ b/packages/apidom-parser-adapter-openapi-yaml-3-1/test/adapter.ts @@ -3,7 +3,7 @@ import path from 'node:path'; import { fileURLToPath } from 'node:url'; import { assert, expect } from 'chai'; import dedent from 'dedent'; -import { isParseResultElement, SourceMapElement, sexprs } from '@swagger-api/apidom-core'; +import { isParseResultElement, hasElementSourceMap, sexprs } from '@swagger-api/apidom-core'; import { isOpenApi3_1Element } from '@swagger-api/apidom-ns-openapi-3-1'; import * as adapter from '../src/adapter.ts'; @@ -86,7 +86,7 @@ describe('adapter', function () { // @ts-ignore const subMappingValue = result.get('mapping').get('sub-mapping'); - assert.instanceOf(subMappingValue.meta.get('sourceMap'), SourceMapElement); + assert.isTrue(hasElementSourceMap(subMappingValue)); }); }); diff --git a/packages/apidom-parser-adapter-yaml-1-2/src/syntactic-analysis/TreeCursorSyntaxNode.ts b/packages/apidom-parser-adapter-yaml-1-2/src/syntactic-analysis/TreeCursorSyntaxNode.ts index d12c7947f1..6cfde2ee6d 100644 --- a/packages/apidom-parser-adapter-yaml-1-2/src/syntactic-analysis/TreeCursorSyntaxNode.ts +++ b/packages/apidom-parser-adapter-yaml-1-2/src/syntactic-analysis/TreeCursorSyntaxNode.ts @@ -1,15 +1,19 @@ -import { TreeCursor as NodeTreeCursor, Point as NodePoint } from 'tree-sitter'; -import { TreeCursor as WebTreeCursor, Point as WebPoint } from 'web-tree-sitter'; +import { TreeCursor as NodeTreeCursor } from 'tree-sitter'; +import { TreeCursor as WebTreeCursor } from 'web-tree-sitter'; class TreeCursorSyntaxNode { public readonly type: string; - public readonly startPosition: NodePoint | WebPoint; + public readonly startPositionRow: number; - public readonly endPosition: NodePoint | WebPoint; + public readonly startPositionColumn: number; public readonly startIndex: number; + public readonly endPositionRow: number; + + public readonly endPositionColumn: number; + public readonly endIndex: number; public readonly text: string; @@ -28,9 +32,11 @@ class TreeCursorSyntaxNode { constructor(cursor: NodeTreeCursor | WebTreeCursor) { this.type = cursor.nodeType; - this.startPosition = cursor.startPosition; - this.endPosition = cursor.endPosition; + this.startPositionRow = cursor.startPosition.row; + this.startPositionColumn = cursor.startPosition.column; this.startIndex = cursor.startIndex; + this.endPositionRow = cursor.endPosition.row; + this.endPositionColumn = cursor.endPosition.column; this.endIndex = cursor.endIndex; this.text = cursor.nodeText; this.isNamed = cursor.nodeIsNamed; diff --git a/packages/apidom-parser-adapter-yaml-1-2/src/syntactic-analysis/indirect/visitors/CstVisitor.ts b/packages/apidom-parser-adapter-yaml-1-2/src/syntactic-analysis/indirect/visitors/CstVisitor.ts index 5d2a1a1c39..85e7263b5f 100644 --- a/packages/apidom-parser-adapter-yaml-1-2/src/syntactic-analysis/indirect/visitors/CstVisitor.ts +++ b/packages/apidom-parser-adapter-yaml-1-2/src/syntactic-analysis/indirect/visitors/CstVisitor.ts @@ -54,20 +54,26 @@ class CstVisitor { node.type.endsWith(ending); } - private static toPosition(node: TreeCursorSyntaxNode): Position { - const start = new Point({ - row: node.startPosition.row, - column: node.startPosition.column, - char: node.startIndex, - }); - const end = new Point({ - row: node.endPosition.row, - column: node.endPosition.column, - char: node.endIndex, - }); + // private static toPosition(node: TreeCursorSyntaxNode): Position { + // // return undefined; - return new Position({ start, end }); - } + // const start = new Point({ + // row: node.startPosition.row, + // column: node.startPosition.column, + // char: node.startIndex, + // }); + // const end = new Point({ + // row: node.endPosition.row, + // column: node.endPosition.column, + // char: node.endIndex, + // }); + + // return new Position({ start, end }); + + // // return `${node.startPosition},${node.endPosition}`; + + // // return `${node.startPositionRow},${node.startPositionColumn},${node.startIndex},${node.endPositionRow},${node.endPositionColumn},${node.endIndex}`; + // } private static kindNodeToYamlAnchor(node: TreeCursorSyntaxNode): YamlAnchor | undefined { const { anchor: anchorNode } = node; @@ -76,7 +82,13 @@ class CstVisitor { return new YamlAnchor({ name: anchorNode.text, - position: CstVisitor.toPosition(anchorNode), + // position: CstVisitor.toPosition(anchorNode), + startPositionRow: anchorNode.startPositionRow, + startPositionColumn: anchorNode.startPositionColumn, + startIndex: anchorNode.startIndex, + endPositionRow: anchorNode.endPositionRow, + endPositionColumn: anchorNode.endPositionColumn, + endIndex: anchorNode.endIndex, }); } @@ -104,9 +116,19 @@ class CstVisitor { : node.type.endsWith('sequence') ? YamlNodeKind.Sequence : YamlNodeKind.Scalar; - const position = tagNode ? CstVisitor.toPosition(tagNode) : undefined; - - return new YamlTag({ explicitName, kind, position }); + // const position = tagNode ? CstVisitor.toPosition(tagNode) : undefined; + + return new YamlTag({ + explicitName, + kind, + // position, + startPositionRow: tagNode?.startPositionRow, + startPositionColumn: tagNode?.startPositionColumn, + startIndex: tagNode?.startIndex, + endPositionRow: tagNode?.endPositionRow, + endPositionColumn: tagNode?.endPositionColumn, + endIndex: tagNode?.endIndex, + }); } // eslint-disable-next-line @typescript-eslint/no-explicit-any @@ -116,11 +138,17 @@ class CstVisitor { public readonly stream = { enter: (node: TreeCursorSyntaxNode): YamlStream => { - const position = CstVisitor.toPosition(node); + // const position = CstVisitor.toPosition(node); return new YamlStream({ children: node.children, - position, + // position, + startPositionRow: node.startPositionRow, + startPositionColumn: node.startPositionColumn, + startIndex: node.startIndex, + endPositionRow: node.endPositionRow, + endPositionColumn: node.endPositionColumn, + endIndex: node.endIndex, isMissing: node.isMissing, }); }, @@ -131,11 +159,17 @@ class CstVisitor { public readonly yaml_directive = { enter: (node: TreeCursorSyntaxNode): YamlDirective => { - const position = CstVisitor.toPosition(node); + // const position = CstVisitor.toPosition(node); const version = node?.firstNamedChild?.text; return new YamlDirective({ - position, + // position, + startPositionRow: node.startPositionRow, + startPositionColumn: node.startPositionColumn, + startIndex: node.startIndex, + endPositionRow: node.endPositionRow, + endPositionColumn: node.endPositionColumn, + endIndex: node.endIndex, name: '%YAML', parameters: { version, @@ -146,11 +180,17 @@ class CstVisitor { public readonly tag_directive = { enter: (node: TreeCursorSyntaxNode): YamlDirective => { - const position = CstVisitor.toPosition(node); + // const position = CstVisitor.toPosition(node); const tagHandleNode = node.children[0]; const tagPrefixNode = node.children[1]; const tagDirective = new YamlDirective({ - position, + // position, + startPositionRow: node.startPositionRow, + startPositionColumn: node.startPositionColumn, + startIndex: node.startIndex, + endPositionRow: node.endPositionRow, + endPositionColumn: node.endPositionColumn, + endIndex: node.endIndex, name: '%TAG', parameters: { handle: tagHandleNode?.text, @@ -166,13 +206,19 @@ class CstVisitor { public readonly reserved_directive = { enter: (node: TreeCursorSyntaxNode): YamlDirective => { - const position = CstVisitor.toPosition(node); + // const position = CstVisitor.toPosition(node); const directiveNameNode = node.children[0]; const directiveParameter1Node = node.children[1]; const directiveParameter2Node = node.children[2]; return new YamlDirective({ - position, + // position, + startPositionRow: node.startPositionRow, + startPositionColumn: node.startPositionColumn, + startIndex: node.startIndex, + endPositionRow: node.endPositionRow, + endPositionColumn: node.endPositionColumn, + endIndex: node.endIndex, name: directiveNameNode?.text, parameters: { handle: directiveParameter1Node?.text, @@ -184,11 +230,17 @@ class CstVisitor { public readonly document = { enter: (node: TreeCursorSyntaxNode): YamlDocument => { - const position = CstVisitor.toPosition(node); + // const position = CstVisitor.toPosition(node); return new YamlDocument({ children: node.children, - position, + // position, + startPositionRow: node.startPositionRow, + startPositionColumn: node.startPositionColumn, + startIndex: node.startIndex, + endPositionRow: node.endPositionRow, + endPositionColumn: node.endPositionColumn, + endIndex: node.endIndex, isMissing: node.isMissing, }); }, @@ -215,18 +267,26 @@ class CstVisitor { ) { return node.children; } - - // kind node not present in flow node, creating empty node - const emptyPoint = new Point({ - row: kindCandidate.endPosition.row, - column: kindCandidate.endPosition.column, - char: kindCandidate.endIndex, - }); + // // kind node not present in flow node, creating empty node + // const emptyPoint = new Point({ + // row: kindCandidate.endPosition.row, + // column: kindCandidate.endPosition.column, + // char: kindCandidate.endIndex, + // }); const emptyScalarNode = new YamlScalar({ content: '', anchor: CstVisitor.kindNodeToYamlAnchor(kindCandidate), tag: CstVisitor.kindNodeToYamlTag(kindCandidate), - position: new Position({ start: emptyPoint, end: emptyPoint }), + // position: new Position({ start: emptyPoint, end: emptyPoint }), + // position: `${kindCandidate.endPosition},${kindCandidate.endPosition}`, + // position: `${kindCandidate.endPositionRow},${kindCandidate.endPositionColumn},${kindCandidate.endIndex},${kindCandidate.endPositionRow},${kindCandidate.endPositionColumn},${kindCandidate.endIndex}`, + // position: undefined, + startPositionRow: kindCandidate.endPositionRow, + startPositionColumn: kindCandidate.endPositionColumn, + startIndex: kindCandidate.endIndex, + endPositionRow: kindCandidate.endPositionRow, + endPositionColumn: kindCandidate.endPositionColumn, + endIndex: kindCandidate.endIndex, styleGroup: YamlStyleGroup.Flow, style: YamlStyle.Plain, }); @@ -251,12 +311,18 @@ class CstVisitor { public readonly block_mapping = { enter: (node: TreeCursorSyntaxNode) => { - const position = CstVisitor.toPosition(node); + // const position = CstVisitor.toPosition(node); const tag = CstVisitor.kindNodeToYamlTag(node); const anchor = CstVisitor.kindNodeToYamlAnchor(node); const mappingNode = new YamlMapping({ children: node.children, - position, + // position, + startPositionRow: node.startPositionRow, + startPositionColumn: node.startPositionColumn, + startIndex: node.startIndex, + endPositionRow: node.endPositionRow, + endPositionColumn: node.endPositionColumn, + endIndex: node.endIndex, anchor, tag, styleGroup: YamlStyleGroup.Block, @@ -272,7 +338,7 @@ class CstVisitor { public readonly block_mapping_pair = { enter: (node: TreeCursorSyntaxNode): YamlKeyValuePair => { - const position = CstVisitor.toPosition(node); + // const position = CstVisitor.toPosition(node); const children: Array = [...node.children]; if (CstVisitor.hasKeyValuePairEmptyKey(node)) { @@ -286,7 +352,13 @@ class CstVisitor { return new YamlKeyValuePair({ children, - position, + // position, + startPositionRow: node.startPositionRow, + startPositionColumn: node.startPositionColumn, + startIndex: node.startIndex, + endPositionRow: node.endPositionRow, + endPositionColumn: node.endPositionColumn, + endIndex: node.endIndex, styleGroup: YamlStyleGroup.Block, isMissing: node.isMissing, }); @@ -295,12 +367,18 @@ class CstVisitor { public readonly flow_mapping = { enter: (node: TreeCursorSyntaxNode) => { - const position = CstVisitor.toPosition(node); + // const position = CstVisitor.toPosition(node); const tag = CstVisitor.kindNodeToYamlTag(node); const anchor = CstVisitor.kindNodeToYamlAnchor(node); const mappingNode = new YamlMapping({ children: node.children, - position, + // position, + startPositionRow: node.startPositionRow, + startPositionColumn: node.startPositionColumn, + startIndex: node.startIndex, + endPositionRow: node.endPositionRow, + endPositionColumn: node.endPositionColumn, + endIndex: node.endIndex, anchor, tag, styleGroup: YamlStyleGroup.Flow, @@ -316,7 +394,7 @@ class CstVisitor { public readonly flow_pair = { enter: (node: TreeCursorSyntaxNode): YamlKeyValuePair => { - const position = CstVisitor.toPosition(node); + // const position = CstVisitor.toPosition(node); const children: Array = [...node.children]; if (CstVisitor.hasKeyValuePairEmptyKey(node)) { @@ -330,7 +408,13 @@ class CstVisitor { return new YamlKeyValuePair({ children, - position, + // position, + startPositionRow: node.startPositionRow, + startPositionColumn: node.startPositionColumn, + startIndex: node.startIndex, + endPositionRow: node.endPositionRow, + endPositionColumn: node.endPositionColumn, + endIndex: node.endIndex, styleGroup: YamlStyleGroup.Flow, isMissing: node.isMissing, }); @@ -345,12 +429,18 @@ class CstVisitor { public readonly block_sequence = { enter: (node: TreeCursorSyntaxNode) => { - const position = CstVisitor.toPosition(node); + // const position = CstVisitor.toPosition(node); const tag = CstVisitor.kindNodeToYamlTag(node); const anchor = CstVisitor.kindNodeToYamlAnchor(node); const sequenceNode = new YamlSequence({ children: node.children, - position, + // position, + startPositionRow: node.startPositionRow, + startPositionColumn: node.startPositionColumn, + startIndex: node.startIndex, + endPositionRow: node.endPositionRow, + endPositionColumn: node.endPositionColumn, + endIndex: node.endIndex, anchor, tag, styleGroup: YamlStyleGroup.Block, @@ -371,18 +461,27 @@ class CstVisitor { } // create empty node - const emptyPoint = new Point({ - row: node.endPosition.row, - column: node.endPosition.column, - char: node.endIndex, - }); + // const emptyPoint = new Point({ + // row: node.endPosition.row, + // column: node.endPosition.column, + // char: node.endIndex, + // }); const emptyScalarNode = new YamlScalar({ content: '', tag: new YamlTag({ explicitName: '?', kind: YamlNodeKind.Scalar, }), - position: new Position({ start: emptyPoint, end: emptyPoint }), + // position: undefined, + // position: new Position({ start: emptyPoint, end: emptyPoint }), + // position: `${node.endPosition},${node.endPosition}`, + // position: `${node.endPositionRow},${node.endPositionColumn},${node.endIndex},${node.endPositionRow},${node.endPositionColumn},${node.endIndex}`, + startPositionRow: node.endPositionRow, + startPositionColumn: node.endPositionColumn, + startIndex: node.endIndex, + endPositionRow: node.endPositionRow, + endPositionColumn: node.endPositionColumn, + endIndex: node.endIndex, styleGroup: YamlStyleGroup.Flow, style: YamlStyle.Plain, }); @@ -393,12 +492,18 @@ class CstVisitor { public readonly flow_sequence = { enter: (node: TreeCursorSyntaxNode) => { - const position = CstVisitor.toPosition(node); + // const position = CstVisitor.toPosition(node); const tag = CstVisitor.kindNodeToYamlTag(node); const anchor = CstVisitor.kindNodeToYamlAnchor(node); const sequenceNode = new YamlSequence({ children: node.children.flat(), - position, + // position, + startPositionRow: node.startPositionRow, + startPositionColumn: node.startPositionColumn, + startIndex: node.startIndex, + endPositionRow: node.endPositionRow, + endPositionColumn: node.endPositionColumn, + endIndex: node.endIndex, anchor, tag, styleGroup: YamlStyleGroup.Flow, @@ -419,14 +524,20 @@ class CstVisitor { public readonly plain_scalar = { enter: (node: TreeCursorSyntaxNode) => { - const position = CstVisitor.toPosition(node); + // const position = CstVisitor.toPosition(node); const tag = CstVisitor.kindNodeToYamlTag(node); const anchor = CstVisitor.kindNodeToYamlAnchor(node); const scalarNode = new YamlScalar({ content: node.text, anchor, tag, - position, + // position, + startPositionRow: node.startPositionRow, + startPositionColumn: node.startPositionColumn, + startIndex: node.startIndex, + endPositionRow: node.endPositionRow, + endPositionColumn: node.endPositionColumn, + endIndex: node.endIndex, styleGroup: YamlStyleGroup.Flow, style: YamlStyle.Plain, }); @@ -439,14 +550,20 @@ class CstVisitor { public readonly single_quote_scalar = { enter: (node: TreeCursorSyntaxNode) => { - const position = CstVisitor.toPosition(node); + // const position = CstVisitor.toPosition(node); const tag = CstVisitor.kindNodeToYamlTag(node); const anchor = CstVisitor.kindNodeToYamlAnchor(node); const scalarNode = new YamlScalar({ content: node.text, anchor, tag, - position, + // position, + startPositionRow: node.startPositionRow, + startPositionColumn: node.startPositionColumn, + startIndex: node.startIndex, + endPositionRow: node.endPositionRow, + endPositionColumn: node.endPositionColumn, + endIndex: node.endIndex, styleGroup: YamlStyleGroup.Flow, style: YamlStyle.SingleQuoted, }); @@ -459,14 +576,20 @@ class CstVisitor { public readonly double_quote_scalar = { enter: (node: TreeCursorSyntaxNode) => { - const position = CstVisitor.toPosition(node); + // const position = CstVisitor.toPosition(node); const tag = CstVisitor.kindNodeToYamlTag(node); const anchor = CstVisitor.kindNodeToYamlAnchor(node); const scalarNode = new YamlScalar({ content: node.text, anchor, tag, - position, + // position, + startPositionRow: node.startPositionRow, + startPositionColumn: node.startPositionColumn, + startIndex: node.startIndex, + endPositionRow: node.endPositionRow, + endPositionColumn: node.endPositionColumn, + endIndex: node.endIndex, styleGroup: YamlStyleGroup.Flow, style: YamlStyle.DoubleQuoted, }); @@ -479,7 +602,7 @@ class CstVisitor { public readonly block_scalar = { enter: (node: TreeCursorSyntaxNode) => { - const position = CstVisitor.toPosition(node); + // const position = CstVisitor.toPosition(node); const tag = CstVisitor.kindNodeToYamlTag(node); const anchor = CstVisitor.kindNodeToYamlAnchor(node); const style = node.text.startsWith('|') @@ -491,7 +614,13 @@ class CstVisitor { content: node.text, anchor, tag, - position, + // position, + startPositionRow: node.startPositionRow, + startPositionColumn: node.startPositionColumn, + startIndex: node.startIndex, + endPositionRow: node.endPositionRow, + endPositionColumn: node.endPositionColumn, + endIndex: node.endIndex, styleGroup: YamlStyleGroup.Block, style, }); @@ -525,11 +654,21 @@ class CstVisitor { public enter(node: TreeCursorSyntaxNode): Literal | undefined { // missing anonymous literals from CST transformed into AST literal nodes if (node instanceof TreeCursorSyntaxNode && !node.isNamed) { - const position = CstVisitor.toPosition(node); + // const position = CstVisitor.toPosition(node); const value = node.type || node.text; const { isMissing } = node; - return new Literal({ value, position, isMissing }); + return new Literal({ + value, + // position, + isMissing, + startPositionRow: node.startPositionRow, + startPositionColumn: node.startPositionColumn, + startIndex: node.startIndex, + endPositionRow: node.endPositionRow, + endPositionColumn: node.endPositionColumn, + endIndex: node.endIndex, + }); } return undefined; @@ -542,10 +681,16 @@ class CstVisitor { parent: unknown, path: string[], ): Error | ParseResult { - const position = CstVisitor.toPosition(node); + // const position = CstVisitor.toPosition(node); const errorNode = new Error({ children: node.children, - position, + // position, + startPositionRow: node.startPositionRow, + startPositionColumn: node.startPositionColumn, + startIndex: node.startIndex, + endPositionRow: node.endPositionRow, + endPositionColumn: node.endPositionColumn, + endIndex: node.endIndex, isUnexpected: !node.hasError, isMissing: node.isMissing, value: node.text, @@ -565,11 +710,11 @@ class CstVisitor { } private createKeyValuePairEmptyKey(node: TreeCursorSyntaxNode): YamlScalar { - const emptyPoint = new Point({ - row: node.startPosition.row, - column: node.startPosition.column, - char: node.startIndex, - }); + // const emptyPoint = new Point({ + // row: node.startPosition.row, + // column: node.startPosition.column, + // char: node.startIndex, + // }); const { keyNode } = node; const children = keyNode?.children || []; const tagNode = children.find(CstVisitor.isKind('tag')); @@ -579,7 +724,13 @@ class CstVisitor { ? new YamlTag({ explicitName: tagNode.text, kind: YamlNodeKind.Scalar, - position: CstVisitor.toPosition(tagNode), + // position: CstVisitor.toPosition(tagNode), + startPositionRow: tagNode.startPositionRow, + startPositionColumn: tagNode.startPositionColumn, + startIndex: tagNode.startIndex, + endPositionRow: tagNode.endPositionRow, + endPositionColumn: tagNode.endPositionColumn, + endIndex: tagNode.endIndex, }) : new YamlTag({ explicitName: '?', @@ -587,11 +738,29 @@ class CstVisitor { }); const anchor = typeof anchorNode !== 'undefined' - ? new YamlAnchor({ name: anchorNode.text, position: CstVisitor.toPosition(anchorNode) }) + ? new YamlAnchor({ + name: anchorNode.text, + // position: CstVisitor.toPosition(anchorNode), + startPositionRow: anchorNode.startPositionRow, + startPositionColumn: anchorNode.startPositionColumn, + startIndex: anchorNode.startIndex, + endPositionRow: anchorNode.endPositionRow, + endPositionColumn: anchorNode.endPositionColumn, + endIndex: anchorNode.endIndex, + }) : undefined; const scalarNode = new YamlScalar({ content: '', - position: new Position({ start: emptyPoint, end: emptyPoint }), + // position: new Position({ start: emptyPoint, end: emptyPoint }), + // position: undefined, + // position: `${node.startPosition},${node.startPosition}`, + // position: `${node.startPositionRow},${node.startPositionColumn},${node.startIndex},${node.startPositionRow},${node.startPositionColumn},${node.startIndex}`, + startPositionRow: node.startPositionRow, + startPositionColumn: node.startPositionColumn, + startIndex: node.startIndex, + endPositionRow: node.startPositionRow, + endPositionColumn: node.startPositionColumn, + endIndex: node.startIndex, tag, anchor, styleGroup: YamlStyleGroup.Flow, @@ -604,11 +773,11 @@ class CstVisitor { } private createKeyValuePairEmptyValue(node: TreeCursorSyntaxNode): YamlScalar { - const emptyPoint = new Point({ - row: node.endPosition.row, - column: node.endPosition.column, - char: node.endIndex, - }); + // const emptyPoint = new Point({ + // row: node.endPosition.row, + // column: node.endPosition.column, + // char: node.endIndex, + // }); const { valueNode } = node; const children = valueNode?.children || []; const tagNode = children.find(CstVisitor.isKind('tag')); @@ -618,7 +787,13 @@ class CstVisitor { ? new YamlTag({ explicitName: tagNode.text, kind: YamlNodeKind.Scalar, - position: CstVisitor.toPosition(tagNode), + // position: CstVisitor.toPosition(tagNode), + startPositionRow: tagNode.startPositionRow, + startPositionColumn: tagNode.startPositionColumn, + startIndex: tagNode.startIndex, + endPositionRow: tagNode.endPositionRow, + endPositionColumn: tagNode.endPositionColumn, + endIndex: tagNode.endIndex, }) : new YamlTag({ explicitName: '?', @@ -626,11 +801,29 @@ class CstVisitor { }); const anchor = typeof anchorNode !== 'undefined' - ? new YamlAnchor({ name: anchorNode.text, position: CstVisitor.toPosition(anchorNode) }) + ? new YamlAnchor({ + name: anchorNode.text, + // position: CstVisitor.toPosition(anchorNode), + startPositionRow: anchorNode.startPositionRow, + startPositionColumn: anchorNode.startPositionColumn, + startIndex: anchorNode.startIndex, + endPositionRow: anchorNode.endPositionRow, + endPositionColumn: anchorNode.endPositionColumn, + endIndex: anchorNode.endIndex, + }) : undefined; const scalarNode = new YamlScalar({ content: '', - position: new Position({ start: emptyPoint, end: emptyPoint }), + // position: undefined, + // position: new Position({ start: emptyPoint, end: emptyPoint }), + // position: `${node.endPosition},${node.endPosition}`, + // position: `${node.endPositionRow},${node.endPositionColumn},${node.endIndex},${node.endPositionRow},${node.endPositionColumn},${node.endIndex}`, + startPositionRow: node.endPositionRow, + startPositionColumn: node.endPositionColumn, + startIndex: node.endIndex, + endPositionRow: node.endPositionRow, + endPositionColumn: node.endPositionColumn, + endIndex: node.endIndex, tag, anchor, styleGroup: YamlStyleGroup.Flow, diff --git a/packages/apidom-parser-adapter-yaml-1-2/src/syntactic-analysis/indirect/visitors/YamlAstVisitor.ts b/packages/apidom-parser-adapter-yaml-1-2/src/syntactic-analysis/indirect/visitors/YamlAstVisitor.ts index a3fdfee584..222467c63e 100644 --- a/packages/apidom-parser-adapter-yaml-1-2/src/syntactic-analysis/indirect/visitors/YamlAstVisitor.ts +++ b/packages/apidom-parser-adapter-yaml-1-2/src/syntactic-analysis/indirect/visitors/YamlAstVisitor.ts @@ -16,7 +16,6 @@ import { ParseResultElement, AnnotationElement, CommentElement, - SourceMapElement, Element, MemberElement, ObjectElement, @@ -212,18 +211,26 @@ class YamlAstVisitor { return null; } + /* eslint-disable no-param-reassign */ private maybeAddSourceMap(node: unknown, element: Element): void { if (!this.sourceMap) { return; } - const sourceMap = new SourceMapElement(); // @ts-ignore - sourceMap.position = node.position; + element.startPositionRow = node.startPositionRow; // @ts-ignore - sourceMap.astNode = node; - element.meta.set('sourceMap', sourceMap); + element.startPositionColumn = node.startPositionColumn; + // @ts-ignore + element.startIndex = node.startIndex; + // @ts-ignore + element.endPositionRow = node.endPositionRow; + // @ts-ignore + element.endPositionColumn = node.endPositionColumn; + // @ts-ignore + element.endIndex = node.endIndex; } + /* eslint-enable no-param-reassign */ } export default YamlAstVisitor; diff --git a/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/empty-nodes/mappings/block-maping/empty-key-properties.ts b/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/empty-nodes/mappings/block-maping/empty-key-properties.ts index 6e15171275..484f63ab76 100644 --- a/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/empty-nodes/mappings/block-maping/empty-key-properties.ts +++ b/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/empty-nodes/mappings/block-maping/empty-key-properties.ts @@ -1,5 +1,5 @@ import { assert } from 'chai'; -import { includesClasses, toValue, SourceMapElement } from '@swagger-api/apidom-core'; +import { includesClasses, hasElementSourceMap } from '@swagger-api/apidom-core'; import * as adapter from '../../../../../src/adapter-node.ts'; @@ -19,36 +19,25 @@ describe('given empty node with tag and anchor as block mapping key', function ( it('should generate source maps', async function () { const emptyElement = await setupEmptyElement(); - const sourceMapElement = emptyElement.meta.get('sourceMap'); - assert.instanceOf(sourceMapElement, SourceMapElement); + assert.isTrue(hasElementSourceMap(emptyElement)); }); it('should generate proper source map start position', async function () { const emptyElement = await setupEmptyElement(); - const sourceMapElement = emptyElement.meta.get('sourceMap'); - const [row, column, char] = [ - toValue(sourceMapElement.positionStart.get(0)), - toValue(sourceMapElement.positionStart.get(1)), - toValue(sourceMapElement.positionStart.get(2)), - ]; - - assert.strictEqual(row, 0); - assert.strictEqual(column, 12); - assert.strictEqual(char, 12); + const { startPositionRow, startPositionColumn, startIndex } = emptyElement; + + assert.strictEqual(startPositionRow, 0); + assert.strictEqual(startPositionColumn, 12); + assert.strictEqual(startIndex, 12); }); it('should generate proper source map end position', async function () { const emptyElement = await setupEmptyElement(); - const sourceMapElement = emptyElement.meta.get('sourceMap'); - const [row, column, char] = [ - toValue(sourceMapElement.positionEnd.get(0)), - toValue(sourceMapElement.positionEnd.get(1)), - toValue(sourceMapElement.positionEnd.get(2)), - ]; - - assert.strictEqual(row, 0); - assert.strictEqual(column, 12); - assert.strictEqual(char, 12); + const { endPositionRow, endPositionColumn, endIndex } = emptyElement; + + assert.strictEqual(endPositionRow, 0); + assert.strictEqual(endPositionColumn, 12); + assert.strictEqual(endIndex, 12); }); }); diff --git a/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/empty-nodes/mappings/block-maping/empty-key-value-opt-key-indicator.ts b/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/empty-nodes/mappings/block-maping/empty-key-value-opt-key-indicator.ts index 93f72716af..a1701f4933 100644 --- a/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/empty-nodes/mappings/block-maping/empty-key-value-opt-key-indicator.ts +++ b/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/empty-nodes/mappings/block-maping/empty-key-value-opt-key-indicator.ts @@ -1,6 +1,6 @@ import { assert } from 'chai'; import dedent from 'dedent'; -import { includesClasses, toValue, SourceMapElement } from '@swagger-api/apidom-core'; +import { includesClasses, hasElementSourceMap } from '@swagger-api/apidom-core'; import * as adapter from '../../../../../src/adapter-node.ts'; @@ -25,37 +25,26 @@ describe('given block mapping pair specified as optional “?” mapping key ind it('should generate source maps for empty key', async function () { const emptyElement = await setupEmptyKeyElement(); - const sourceMapElement = emptyElement.meta.get('sourceMap'); - assert.instanceOf(sourceMapElement, SourceMapElement); + assert.isTrue(hasElementSourceMap(emptyElement)); }); it('should generate proper source map start position for empty key', async function () { const emptyElement = await setupEmptyKeyElement(); - const sourceMapElement = emptyElement.meta.get('sourceMap'); - const [row, column, char] = [ - toValue(sourceMapElement.positionStart.get(0)), - toValue(sourceMapElement.positionStart.get(1)), - toValue(sourceMapElement.positionStart.get(2)), - ]; - - assert.strictEqual(row, 1); - assert.strictEqual(column, 0); - assert.strictEqual(char, 11); + const { startPositionRow, startPositionColumn, startIndex } = emptyElement; + + assert.strictEqual(startPositionRow, 1); + assert.strictEqual(startPositionColumn, 0); + assert.strictEqual(startIndex, 11); }); it('should generate proper source map end position for empty key', async function () { const emptyElement = await setupEmptyKeyElement(); - const sourceMapElement = emptyElement.meta.get('sourceMap'); - const [row, column, char] = [ - toValue(sourceMapElement.positionEnd.get(0)), - toValue(sourceMapElement.positionEnd.get(1)), - toValue(sourceMapElement.positionEnd.get(2)), - ]; - - assert.strictEqual(row, 1); - assert.strictEqual(column, 0); - assert.strictEqual(char, 11); + const { endPositionRow, endPositionColumn, endIndex } = emptyElement; + + assert.strictEqual(endPositionRow, 1); + assert.strictEqual(endPositionColumn, 0); + assert.strictEqual(endIndex, 11); }); it('should create empty value element', async function () { @@ -66,36 +55,25 @@ describe('given block mapping pair specified as optional “?” mapping key ind it('should generate source maps for empty value', async function () { const emptyElement = await setupEmptyValueElement(); - const sourceMapElement = emptyElement.meta.get('sourceMap'); - assert.instanceOf(sourceMapElement, SourceMapElement); + assert.isTrue(hasElementSourceMap(emptyElement)); }); it('should generate proper source map start position for empty value', async function () { const emptyElement = await setupEmptyValueElement(); - const sourceMapElement = emptyElement.meta.get('sourceMap'); - const [row, column, char] = [ - toValue(sourceMapElement.positionStart.get(0)), - toValue(sourceMapElement.positionStart.get(1)), - toValue(sourceMapElement.positionStart.get(2)), - ]; - - assert.strictEqual(row, 1); - assert.strictEqual(column, 1); - assert.strictEqual(char, 12); + const { startPositionRow, startPositionColumn, startIndex } = emptyElement; + + assert.strictEqual(startPositionRow, 1); + assert.strictEqual(startPositionColumn, 1); + assert.strictEqual(startIndex, 12); }); it('should generate proper source map end position for empty value', async function () { const emptyElement = await setupEmptyValueElement(); - const sourceMapElement = emptyElement.meta.get('sourceMap'); - const [row, column, char] = [ - toValue(sourceMapElement.positionEnd.get(0)), - toValue(sourceMapElement.positionEnd.get(1)), - toValue(sourceMapElement.positionEnd.get(2)), - ]; - - assert.strictEqual(row, 1); - assert.strictEqual(column, 1); - assert.strictEqual(char, 12); + const { endPositionRow, endPositionColumn, endIndex } = emptyElement; + + assert.strictEqual(endPositionRow, 1); + assert.strictEqual(endPositionColumn, 1); + assert.strictEqual(endIndex, 12); }); }); diff --git a/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/empty-nodes/mappings/block-maping/empty-key-value-properties.ts b/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/empty-nodes/mappings/block-maping/empty-key-value-properties.ts index c2cfe182d9..39ac51ab32 100644 --- a/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/empty-nodes/mappings/block-maping/empty-key-value-properties.ts +++ b/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/empty-nodes/mappings/block-maping/empty-key-value-properties.ts @@ -1,5 +1,5 @@ import { assert } from 'chai'; -import { includesClasses, toValue, SourceMapElement } from '@swagger-api/apidom-core'; +import { includesClasses, hasElementSourceMap } from '@swagger-api/apidom-core'; import * as adapter from '../../../../../src/adapter-node.ts'; @@ -21,37 +21,26 @@ describe('given block mapping pair containing empty fields and explicit tag and it('should generate source maps for empty key', async function () { const emptyElement = await setupEmptyKeyElement(); - const sourceMapElement = emptyElement.meta.get('sourceMap'); - assert.instanceOf(sourceMapElement, SourceMapElement); + assert.isTrue(hasElementSourceMap(emptyElement)); }); it('should generate proper source map start position for empty key', async function () { const emptyElement = await setupEmptyKeyElement(); - const sourceMapElement = emptyElement.meta.get('sourceMap'); - const [row, column, char] = [ - toValue(sourceMapElement.positionStart.get(0)), - toValue(sourceMapElement.positionStart.get(1)), - toValue(sourceMapElement.positionStart.get(2)), - ]; - - assert.strictEqual(row, 0); - assert.strictEqual(column, 12); - assert.strictEqual(char, 12); + const { startPositionRow, startPositionColumn, startIndex } = emptyElement; + + assert.strictEqual(startPositionRow, 0); + assert.strictEqual(startPositionColumn, 12); + assert.strictEqual(startIndex, 12); }); it('should generate proper source map end position for empty key', async function () { const emptyElement = await setupEmptyKeyElement(); - const sourceMapElement = emptyElement.meta.get('sourceMap'); - const [row, column, char] = [ - toValue(sourceMapElement.positionEnd.get(0)), - toValue(sourceMapElement.positionEnd.get(1)), - toValue(sourceMapElement.positionEnd.get(2)), - ]; - - assert.strictEqual(row, 0); - assert.strictEqual(column, 12); - assert.strictEqual(char, 12); + const { endPositionRow, endPositionColumn, endIndex } = emptyElement; + + assert.strictEqual(endPositionRow, 0); + assert.strictEqual(endPositionColumn, 12); + assert.strictEqual(endIndex, 12); }); it('should create empty value element', async function () { @@ -62,36 +51,25 @@ describe('given block mapping pair containing empty fields and explicit tag and it('should generate source maps for empty value', async function () { const emptyElement = await setupEmptyValueElement(); - const sourceMapElement = emptyElement.meta.get('sourceMap'); - assert.instanceOf(sourceMapElement, SourceMapElement); + assert.isTrue(hasElementSourceMap(emptyElement)); }); it('should generate proper source map start position for empty value', async function () { const emptyElement = await setupEmptyValueElement(); - const sourceMapElement = emptyElement.meta.get('sourceMap'); - const [row, column, char] = [ - toValue(sourceMapElement.positionStart.get(0)), - toValue(sourceMapElement.positionStart.get(1)), - toValue(sourceMapElement.positionStart.get(2)), - ]; - - assert.strictEqual(row, 0); - assert.strictEqual(column, 27); - assert.strictEqual(char, 27); + const { startPositionRow, startPositionColumn, startIndex } = emptyElement; + + assert.strictEqual(startPositionRow, 0); + assert.strictEqual(startPositionColumn, 27); + assert.strictEqual(startIndex, 27); }); it('should generate proper source map end position for empty value', async function () { const emptyElement = await setupEmptyValueElement(); - const sourceMapElement = emptyElement.meta.get('sourceMap'); - const [row, column, char] = [ - toValue(sourceMapElement.positionEnd.get(0)), - toValue(sourceMapElement.positionEnd.get(1)), - toValue(sourceMapElement.positionEnd.get(2)), - ]; - - assert.strictEqual(row, 0); - assert.strictEqual(column, 27); - assert.strictEqual(char, 27); + const { endPositionRow, endPositionColumn, endIndex } = emptyElement; + + assert.strictEqual(endPositionRow, 0); + assert.strictEqual(endPositionColumn, 27); + assert.strictEqual(endIndex, 27); }); }); diff --git a/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/empty-nodes/mappings/block-maping/empty-key-value.ts b/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/empty-nodes/mappings/block-maping/empty-key-value.ts index 24923e14c1..74d5892e06 100644 --- a/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/empty-nodes/mappings/block-maping/empty-key-value.ts +++ b/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/empty-nodes/mappings/block-maping/empty-key-value.ts @@ -1,5 +1,5 @@ import { assert } from 'chai'; -import { includesClasses, toValue, SourceMapElement } from '@swagger-api/apidom-core'; +import { includesClasses, hasElementSourceMap } from '@swagger-api/apidom-core'; import * as adapter from '../../../../../src/adapter-node.ts'; @@ -21,37 +21,26 @@ describe('given block mapping pair with empty key and value', function () { it('should generate source maps for empty key', async function () { const emptyElement = await setupEmptyKeyElement(); - const sourceMapElement = emptyElement.meta.get('sourceMap'); - assert.instanceOf(sourceMapElement, SourceMapElement); + assert.isTrue(hasElementSourceMap(emptyElement)); }); it('should generate proper source map start position for empty key', async function () { const emptyElement = await setupEmptyKeyElement(); - const sourceMapElement = emptyElement.meta.get('sourceMap'); - const [row, column, char] = [ - toValue(sourceMapElement.positionStart.get(0)), - toValue(sourceMapElement.positionStart.get(1)), - toValue(sourceMapElement.positionStart.get(2)), - ]; - - assert.strictEqual(row, 0); - assert.strictEqual(column, 0); - assert.strictEqual(char, 0); + const { startPositionRow, startPositionColumn, startIndex } = emptyElement; + + assert.strictEqual(startPositionRow, 0); + assert.strictEqual(startPositionColumn, 0); + assert.strictEqual(startIndex, 0); }); it('should generate proper source map end position for empty key', async function () { const emptyElement = await setupEmptyKeyElement(); - const sourceMapElement = emptyElement.meta.get('sourceMap'); - const [row, column, char] = [ - toValue(sourceMapElement.positionEnd.get(0)), - toValue(sourceMapElement.positionEnd.get(1)), - toValue(sourceMapElement.positionEnd.get(2)), - ]; - - assert.strictEqual(row, 0); - assert.strictEqual(column, 0); - assert.strictEqual(char, 0); + const { endPositionRow, endPositionColumn, endIndex } = emptyElement; + + assert.strictEqual(endPositionRow, 0); + assert.strictEqual(endPositionColumn, 0); + assert.strictEqual(endIndex, 0); }); it('should create empty value element', async function () { @@ -62,36 +51,25 @@ describe('given block mapping pair with empty key and value', function () { it('should generate source maps for empty value', async function () { const emptyElement = await setupEmptyValueElement(); - const sourceMapElement = emptyElement.meta.get('sourceMap'); - assert.instanceOf(sourceMapElement, SourceMapElement); + assert.isTrue(hasElementSourceMap(emptyElement)); }); it('should generate proper source map start position for empty value', async function () { const emptyElement = await setupEmptyValueElement(); - const sourceMapElement = emptyElement.meta.get('sourceMap'); - const [row, column, char] = [ - toValue(sourceMapElement.positionStart.get(0)), - toValue(sourceMapElement.positionStart.get(1)), - toValue(sourceMapElement.positionStart.get(2)), - ]; - - assert.strictEqual(row, 0); - assert.strictEqual(column, 1); - assert.strictEqual(char, 1); + const { startPositionRow, startPositionColumn, startIndex } = emptyElement; + + assert.strictEqual(startPositionRow, 0); + assert.strictEqual(startPositionColumn, 1); + assert.strictEqual(startIndex, 1); }); it('should generate proper source map end position for empty value', async function () { const emptyElement = await setupEmptyValueElement(); - const sourceMapElement = emptyElement.meta.get('sourceMap'); - const [row, column, char] = [ - toValue(sourceMapElement.positionEnd.get(0)), - toValue(sourceMapElement.positionEnd.get(1)), - toValue(sourceMapElement.positionEnd.get(2)), - ]; - - assert.strictEqual(row, 0); - assert.strictEqual(column, 1); - assert.strictEqual(char, 1); + const { endPositionRow, endPositionColumn, endIndex } = emptyElement; + + assert.strictEqual(endPositionRow, 0); + assert.strictEqual(endPositionColumn, 1); + assert.strictEqual(endIndex, 1); }); }); diff --git a/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/empty-nodes/mappings/block-maping/empty-key.ts b/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/empty-nodes/mappings/block-maping/empty-key.ts index 5c4b6aaf30..174131dadd 100644 --- a/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/empty-nodes/mappings/block-maping/empty-key.ts +++ b/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/empty-nodes/mappings/block-maping/empty-key.ts @@ -1,5 +1,5 @@ import { assert } from 'chai'; -import { includesClasses, toValue, SourceMapElement } from '@swagger-api/apidom-core'; +import { includesClasses, hasElementSourceMap } from '@swagger-api/apidom-core'; import * as adapter from '../../../../../src/adapter-node.ts'; @@ -19,36 +19,25 @@ describe('given empty node as block mapping key', function () { it('should generate source maps', async function () { const emptyElement = await setupEmptyElement(); - const sourceMapElement = emptyElement.meta.get('sourceMap'); - assert.instanceOf(sourceMapElement, SourceMapElement); + assert.isTrue(hasElementSourceMap(emptyElement)); }); it('should generate proper source map start position', async function () { const emptyElement = await setupEmptyElement(); - const sourceMapElement = emptyElement.meta.get('sourceMap'); - const [row, column, char] = [ - toValue(sourceMapElement.positionStart.get(0)), - toValue(sourceMapElement.positionStart.get(1)), - toValue(sourceMapElement.positionStart.get(2)), - ]; - - assert.strictEqual(row, 0); - assert.strictEqual(column, 0); - assert.strictEqual(char, 0); + const { startPositionRow, startPositionColumn, startIndex } = emptyElement; + + assert.strictEqual(startPositionRow, 0); + assert.strictEqual(startPositionColumn, 0); + assert.strictEqual(startIndex, 0); }); it('should generate proper source map end position', async function () { const emptyElement = await setupEmptyElement(); - const sourceMapElement = emptyElement.meta.get('sourceMap'); - const [row, column, char] = [ - toValue(sourceMapElement.positionEnd.get(0)), - toValue(sourceMapElement.positionEnd.get(1)), - toValue(sourceMapElement.positionEnd.get(2)), - ]; - - assert.strictEqual(row, 0); - assert.strictEqual(column, 0); - assert.strictEqual(char, 0); + const { endPositionRow, endPositionColumn, endIndex } = emptyElement; + + assert.strictEqual(endPositionRow, 0); + assert.strictEqual(endPositionColumn, 0); + assert.strictEqual(endIndex, 0); }); }); diff --git a/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/empty-nodes/mappings/block-maping/empty-value-properties.ts b/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/empty-nodes/mappings/block-maping/empty-value-properties.ts index 12a57c9689..0882942901 100644 --- a/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/empty-nodes/mappings/block-maping/empty-value-properties.ts +++ b/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/empty-nodes/mappings/block-maping/empty-value-properties.ts @@ -1,5 +1,5 @@ import { assert } from 'chai'; -import { includesClasses, toValue, SourceMapElement } from '@swagger-api/apidom-core'; +import { includesClasses, hasElementSourceMap } from '@swagger-api/apidom-core'; import * as adapter from '../../../../../src/adapter-node.ts'; @@ -19,36 +19,25 @@ describe('given empty node with tag and anchor as block mapping value', function it('should generate source maps', async function () { const emptyElement = await setupEmptyElement(); - const sourceMapElement = emptyElement.meta.get('sourceMap'); - assert.instanceOf(sourceMapElement, SourceMapElement); + assert.isTrue(hasElementSourceMap(emptyElement)); }); it('should generate proper source map start position', async function () { const emptyElement = await setupEmptyElement(); - const sourceMapElement = emptyElement.meta.get('sourceMap'); - const [row, column, char] = [ - toValue(sourceMapElement.positionStart.get(0)), - toValue(sourceMapElement.positionStart.get(1)), - toValue(sourceMapElement.positionStart.get(2)), - ]; - - assert.strictEqual(row, 0); - assert.strictEqual(column, 17); - assert.strictEqual(char, 17); + const { startPositionRow, startPositionColumn, startIndex } = emptyElement; + + assert.strictEqual(startPositionRow, 0); + assert.strictEqual(startPositionColumn, 17); + assert.strictEqual(startIndex, 17); }); it('should generate proper source map end position', async function () { const emptyElement = await setupEmptyElement(); - const sourceMapElement = emptyElement.meta.get('sourceMap'); - const [row, column, char] = [ - toValue(sourceMapElement.positionEnd.get(0)), - toValue(sourceMapElement.positionEnd.get(1)), - toValue(sourceMapElement.positionEnd.get(2)), - ]; - - assert.strictEqual(row, 0); - assert.strictEqual(column, 17); - assert.strictEqual(char, 17); + const { endPositionRow, endPositionColumn, endIndex } = emptyElement; + + assert.strictEqual(endPositionRow, 0); + assert.strictEqual(endPositionColumn, 17); + assert.strictEqual(endIndex, 17); }); }); diff --git a/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/empty-nodes/mappings/block-maping/empty-value.ts b/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/empty-nodes/mappings/block-maping/empty-value.ts index fb202569b7..628955e0b1 100644 --- a/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/empty-nodes/mappings/block-maping/empty-value.ts +++ b/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/empty-nodes/mappings/block-maping/empty-value.ts @@ -1,5 +1,5 @@ import { assert } from 'chai'; -import { includesClasses, toValue, SourceMapElement } from '@swagger-api/apidom-core'; +import { includesClasses, hasElementSourceMap } from '@swagger-api/apidom-core'; import * as adapter from '../../../../../src/adapter-node.ts'; @@ -19,36 +19,25 @@ describe('given empty node as block mapping value', function () { it('should generate source maps', async function () { const emptyElement = await setupEmptyElement(); - const sourceMapElement = emptyElement.meta.get('sourceMap'); - assert.instanceOf(sourceMapElement, SourceMapElement); + assert.isTrue(hasElementSourceMap(emptyElement)); }); it('should generate proper source map start position', async function () { const emptyElement = await setupEmptyElement(); - const sourceMapElement = emptyElement.meta.get('sourceMap'); - const [row, column, char] = [ - toValue(sourceMapElement.positionStart.get(0)), - toValue(sourceMapElement.positionStart.get(1)), - toValue(sourceMapElement.positionStart.get(2)), - ]; - - assert.strictEqual(row, 0); - assert.strictEqual(column, 4); - assert.strictEqual(char, 4); + const { startPositionRow, startPositionColumn, startIndex } = emptyElement; + + assert.strictEqual(startPositionRow, 0); + assert.strictEqual(startPositionColumn, 4); + assert.strictEqual(startIndex, 4); }); it('should generate proper source map end position', async function () { const emptyElement = await setupEmptyElement(); - const sourceMapElement = emptyElement.meta.get('sourceMap'); - const [row, column, char] = [ - toValue(sourceMapElement.positionEnd.get(0)), - toValue(sourceMapElement.positionEnd.get(1)), - toValue(sourceMapElement.positionEnd.get(2)), - ]; - - assert.strictEqual(row, 0); - assert.strictEqual(column, 4); - assert.strictEqual(char, 4); + const { endPositionRow, endPositionColumn, endIndex } = emptyElement; + + assert.strictEqual(endPositionRow, 0); + assert.strictEqual(endPositionColumn, 4); + assert.strictEqual(endIndex, 4); }); }); diff --git a/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/empty-nodes/mappings/flow-mapping/empty-key-properties.ts b/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/empty-nodes/mappings/flow-mapping/empty-key-properties.ts index 5375a05cde..e7e06c0a96 100644 --- a/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/empty-nodes/mappings/flow-mapping/empty-key-properties.ts +++ b/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/empty-nodes/mappings/flow-mapping/empty-key-properties.ts @@ -1,5 +1,5 @@ import { assert } from 'chai'; -import { includesClasses, toValue, SourceMapElement } from '@swagger-api/apidom-core'; +import { includesClasses, hasElementSourceMap } from '@swagger-api/apidom-core'; import * as adapter from '../../../../../src/adapter-node.ts'; @@ -19,36 +19,25 @@ describe('given empty node with tag and anchor as flow mapping key', function () it('should generate source maps', async function () { const emptyElement = await setupEmptyElement(); - const sourceMapElement = emptyElement.meta.get('sourceMap'); - assert.instanceOf(sourceMapElement, SourceMapElement); + assert.isTrue(hasElementSourceMap(emptyElement)); }); it('should generate proper source map start position', async function () { const emptyElement = await setupEmptyElement(); - const sourceMapElement = emptyElement.meta.get('sourceMap'); - const [row, column, char] = [ - toValue(sourceMapElement.positionStart.get(0)), - toValue(sourceMapElement.positionStart.get(1)), - toValue(sourceMapElement.positionStart.get(2)), - ]; - - assert.strictEqual(row, 0); - assert.strictEqual(column, 13); - assert.strictEqual(char, 13); + const { startPositionRow, startPositionColumn, startIndex } = emptyElement; + + assert.strictEqual(startPositionRow, 0); + assert.strictEqual(startPositionColumn, 13); + assert.strictEqual(startIndex, 13); }); it('should generate proper source map end position', async function () { const emptyElement = await setupEmptyElement(); - const sourceMapElement = emptyElement.meta.get('sourceMap'); - const [row, column, char] = [ - toValue(sourceMapElement.positionEnd.get(0)), - toValue(sourceMapElement.positionEnd.get(1)), - toValue(sourceMapElement.positionEnd.get(2)), - ]; - - assert.strictEqual(row, 0); - assert.strictEqual(column, 13); - assert.strictEqual(char, 13); + const { endPositionRow, endPositionColumn, endIndex } = emptyElement; + + assert.strictEqual(endPositionRow, 0); + assert.strictEqual(endPositionColumn, 13); + assert.strictEqual(endIndex, 13); }); }); diff --git a/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/empty-nodes/mappings/flow-mapping/empty-key-value-opt-key-indicator.ts b/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/empty-nodes/mappings/flow-mapping/empty-key-value-opt-key-indicator.ts index da44b80020..e1c577c2e0 100644 --- a/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/empty-nodes/mappings/flow-mapping/empty-key-value-opt-key-indicator.ts +++ b/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/empty-nodes/mappings/flow-mapping/empty-key-value-opt-key-indicator.ts @@ -1,5 +1,5 @@ import { assert } from 'chai'; -import { includesClasses, toValue, SourceMapElement } from '@swagger-api/apidom-core'; +import { includesClasses, hasElementSourceMap } from '@swagger-api/apidom-core'; import * as adapter from '../../../../../src/adapter-node.ts'; @@ -21,37 +21,26 @@ describe('given flow mapping pair specified as optional “?” mapping key indi it('should generate source maps for empty key', async function () { const emptyElement = await setupEmptyKeyElement(); - const sourceMapElement = emptyElement.meta.get('sourceMap'); - assert.instanceOf(sourceMapElement, SourceMapElement); + assert.isTrue(hasElementSourceMap(emptyElement)); }); it('should generate proper source map start position for empty key', async function () { const emptyElement = await setupEmptyKeyElement(); - const sourceMapElement = emptyElement.meta.get('sourceMap'); - const [row, column, char] = [ - toValue(sourceMapElement.positionStart.get(0)), - toValue(sourceMapElement.positionStart.get(1)), - toValue(sourceMapElement.positionStart.get(2)), - ]; - - assert.strictEqual(row, 0); - assert.strictEqual(column, 14); - assert.strictEqual(char, 14); + const { startPositionRow, startPositionColumn, startIndex } = emptyElement; + + assert.strictEqual(startPositionRow, 0); + assert.strictEqual(startPositionColumn, 14); + assert.strictEqual(startIndex, 14); }); it('should generate proper source map end position for empty key', async function () { const emptyElement = await setupEmptyKeyElement(); - const sourceMapElement = emptyElement.meta.get('sourceMap'); - const [row, column, char] = [ - toValue(sourceMapElement.positionEnd.get(0)), - toValue(sourceMapElement.positionEnd.get(1)), - toValue(sourceMapElement.positionEnd.get(2)), - ]; - - assert.strictEqual(row, 0); - assert.strictEqual(column, 14); - assert.strictEqual(char, 14); + const { endPositionRow, endPositionColumn, endIndex } = emptyElement; + + assert.strictEqual(endPositionRow, 0); + assert.strictEqual(endPositionColumn, 14); + assert.strictEqual(endIndex, 14); }); it('should create empty value element', async function () { @@ -62,36 +51,25 @@ describe('given flow mapping pair specified as optional “?” mapping key indi it('should generate source maps for empty value', async function () { const emptyElement = await setupEmptyValueElement(); - const sourceMapElement = emptyElement.meta.get('sourceMap'); - assert.instanceOf(sourceMapElement, SourceMapElement); + assert.isTrue(hasElementSourceMap(emptyElement)); }); it('should generate proper source map start position for empty value', async function () { const emptyElement = await setupEmptyValueElement(); - const sourceMapElement = emptyElement.meta.get('sourceMap'); - const [row, column, char] = [ - toValue(sourceMapElement.positionStart.get(0)), - toValue(sourceMapElement.positionStart.get(1)), - toValue(sourceMapElement.positionStart.get(2)), - ]; - - assert.strictEqual(row, 0); - assert.strictEqual(column, 15); - assert.strictEqual(char, 15); + const { startPositionRow, startPositionColumn, startIndex } = emptyElement; + + assert.strictEqual(startPositionRow, 0); + assert.strictEqual(startPositionColumn, 15); + assert.strictEqual(startIndex, 15); }); it('should generate proper source map end position for empty value', async function () { const emptyElement = await setupEmptyValueElement(); - const sourceMapElement = emptyElement.meta.get('sourceMap'); - const [row, column, char] = [ - toValue(sourceMapElement.positionEnd.get(0)), - toValue(sourceMapElement.positionEnd.get(1)), - toValue(sourceMapElement.positionEnd.get(2)), - ]; - - assert.strictEqual(row, 0); - assert.strictEqual(column, 15); - assert.strictEqual(char, 15); + const { endPositionRow, endPositionColumn, endIndex } = emptyElement; + + assert.strictEqual(endPositionRow, 0); + assert.strictEqual(endPositionColumn, 15); + assert.strictEqual(endIndex, 15); }); }); diff --git a/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/empty-nodes/mappings/flow-mapping/empty-key-value-properties.ts b/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/empty-nodes/mappings/flow-mapping/empty-key-value-properties.ts index 602b8a4bca..98eea02e2f 100644 --- a/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/empty-nodes/mappings/flow-mapping/empty-key-value-properties.ts +++ b/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/empty-nodes/mappings/flow-mapping/empty-key-value-properties.ts @@ -1,5 +1,5 @@ import { assert } from 'chai'; -import { includesClasses, toValue, SourceMapElement } from '@swagger-api/apidom-core'; +import { includesClasses, hasElementSourceMap } from '@swagger-api/apidom-core'; import * as adapter from '../../../../../src/adapter-node.ts'; @@ -21,37 +21,26 @@ describe('given flow mapping pair containing empty fields and explicit tag and a it('should generate source maps for empty key', async function () { const emptyElement = await setupEmptyKeyElement(); - const sourceMapElement = emptyElement.meta.get('sourceMap'); - assert.instanceOf(sourceMapElement, SourceMapElement); + assert.isTrue(hasElementSourceMap(emptyElement)); }); it('should generate proper source map start position for empty key', async function () { const emptyElement = await setupEmptyKeyElement(); - const sourceMapElement = emptyElement.meta.get('sourceMap'); - const [row, column, char] = [ - toValue(sourceMapElement.positionStart.get(0)), - toValue(sourceMapElement.positionStart.get(1)), - toValue(sourceMapElement.positionStart.get(2)), - ]; - - assert.strictEqual(row, 0); - assert.strictEqual(column, 13); - assert.strictEqual(char, 13); + const { startPositionRow, startPositionColumn, startIndex } = emptyElement; + + assert.strictEqual(startPositionRow, 0); + assert.strictEqual(startPositionColumn, 13); + assert.strictEqual(startIndex, 13); }); it('should generate proper source map end position for empty key', async function () { const emptyElement = await setupEmptyKeyElement(); - const sourceMapElement = emptyElement.meta.get('sourceMap'); - const [row, column, char] = [ - toValue(sourceMapElement.positionEnd.get(0)), - toValue(sourceMapElement.positionEnd.get(1)), - toValue(sourceMapElement.positionEnd.get(2)), - ]; - - assert.strictEqual(row, 0); - assert.strictEqual(column, 13); - assert.strictEqual(char, 13); + const { endPositionRow, endPositionColumn, endIndex } = emptyElement; + + assert.strictEqual(endPositionRow, 0); + assert.strictEqual(endPositionColumn, 13); + assert.strictEqual(endIndex, 13); }); it('should create empty value element', async function () { @@ -62,36 +51,25 @@ describe('given flow mapping pair containing empty fields and explicit tag and a it('should generate source maps for empty value', async function () { const emptyElement = await setupEmptyValueElement(); - const sourceMapElement = emptyElement.meta.get('sourceMap'); - assert.instanceOf(sourceMapElement, SourceMapElement); + assert.isTrue(hasElementSourceMap(emptyElement)); }); it('should generate proper source map start position for empty value', async function () { const emptyElement = await setupEmptyValueElement(); - const sourceMapElement = emptyElement.meta.get('sourceMap'); - const [row, column, char] = [ - toValue(sourceMapElement.positionStart.get(0)), - toValue(sourceMapElement.positionStart.get(1)), - toValue(sourceMapElement.positionStart.get(2)), - ]; - - assert.strictEqual(row, 0); - assert.strictEqual(column, 28); - assert.strictEqual(char, 28); + const { startPositionRow, startPositionColumn, startIndex } = emptyElement; + + assert.strictEqual(startPositionRow, 0); + assert.strictEqual(startPositionColumn, 28); + assert.strictEqual(startIndex, 28); }); it('should generate proper source map end position for empty value', async function () { const emptyElement = await setupEmptyValueElement(); - const sourceMapElement = emptyElement.meta.get('sourceMap'); - const [row, column, char] = [ - toValue(sourceMapElement.positionEnd.get(0)), - toValue(sourceMapElement.positionEnd.get(1)), - toValue(sourceMapElement.positionEnd.get(2)), - ]; - - assert.strictEqual(row, 0); - assert.strictEqual(column, 28); - assert.strictEqual(char, 28); + const { endPositionRow, endPositionColumn, endIndex } = emptyElement; + + assert.strictEqual(endPositionRow, 0); + assert.strictEqual(endPositionColumn, 28); + assert.strictEqual(endIndex, 28); }); }); diff --git a/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/empty-nodes/mappings/flow-mapping/empty-key-value.ts b/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/empty-nodes/mappings/flow-mapping/empty-key-value.ts index 52e7fcdedd..9aab75ade4 100644 --- a/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/empty-nodes/mappings/flow-mapping/empty-key-value.ts +++ b/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/empty-nodes/mappings/flow-mapping/empty-key-value.ts @@ -1,5 +1,5 @@ import { assert } from 'chai'; -import { includesClasses, toValue, SourceMapElement } from '@swagger-api/apidom-core'; +import { includesClasses, hasElementSourceMap } from '@swagger-api/apidom-core'; import * as adapter from '../../../../../src/adapter-node.ts'; @@ -21,37 +21,26 @@ describe('given flow mapping pair with empty key and value', function () { it('should generate source maps for empty key', async function () { const emptyElement = await setupEmptyKeyElement(); - const sourceMapElement = emptyElement.meta.get('sourceMap'); - assert.instanceOf(sourceMapElement, SourceMapElement); + assert.isTrue(hasElementSourceMap(emptyElement)); }); it('should generate proper source map start position for empty key', async function () { const emptyElement = await setupEmptyKeyElement(); - const sourceMapElement = emptyElement.meta.get('sourceMap'); - const [row, column, char] = [ - toValue(sourceMapElement.positionStart.get(0)), - toValue(sourceMapElement.positionStart.get(1)), - toValue(sourceMapElement.positionStart.get(2)), - ]; - - assert.strictEqual(row, 0); - assert.strictEqual(column, 1); - assert.strictEqual(char, 1); + const { startPositionRow, startPositionColumn, startIndex } = emptyElement; + + assert.strictEqual(startPositionRow, 0); + assert.strictEqual(startPositionColumn, 1); + assert.strictEqual(startIndex, 1); }); it('should generate proper source map end position for empty key', async function () { const emptyElement = await setupEmptyKeyElement(); - const sourceMapElement = emptyElement.meta.get('sourceMap'); - const [row, column, char] = [ - toValue(sourceMapElement.positionEnd.get(0)), - toValue(sourceMapElement.positionEnd.get(1)), - toValue(sourceMapElement.positionEnd.get(2)), - ]; - - assert.strictEqual(row, 0); - assert.strictEqual(column, 1); - assert.strictEqual(char, 1); + const { endPositionRow, endPositionColumn, endIndex } = emptyElement; + + assert.strictEqual(endPositionRow, 0); + assert.strictEqual(endPositionColumn, 1); + assert.strictEqual(endIndex, 1); }); it('should create empty value element', async function () { @@ -62,36 +51,25 @@ describe('given flow mapping pair with empty key and value', function () { it('should generate source maps for empty value', async function () { const emptyElement = await setupEmptyValueElement(); - const sourceMapElement = emptyElement.meta.get('sourceMap'); - assert.instanceOf(sourceMapElement, SourceMapElement); + assert.isTrue(hasElementSourceMap(emptyElement)); }); it('should generate proper source map start position for empty value', async function () { const emptyElement = await setupEmptyValueElement(); - const sourceMapElement = emptyElement.meta.get('sourceMap'); - const [row, column, char] = [ - toValue(sourceMapElement.positionStart.get(0)), - toValue(sourceMapElement.positionStart.get(1)), - toValue(sourceMapElement.positionStart.get(2)), - ]; - - assert.strictEqual(row, 0); - assert.strictEqual(column, 2); - assert.strictEqual(char, 2); + const { startPositionRow, startPositionColumn, startIndex } = emptyElement; + + assert.strictEqual(startPositionRow, 0); + assert.strictEqual(startPositionColumn, 2); + assert.strictEqual(startIndex, 2); }); it('should generate proper source map end position for empty value', async function () { const emptyElement = await setupEmptyValueElement(); - const sourceMapElement = emptyElement.meta.get('sourceMap'); - const [row, column, char] = [ - toValue(sourceMapElement.positionEnd.get(0)), - toValue(sourceMapElement.positionEnd.get(1)), - toValue(sourceMapElement.positionEnd.get(2)), - ]; - - assert.strictEqual(row, 0); - assert.strictEqual(column, 2); - assert.strictEqual(char, 2); + const { endPositionRow, endPositionColumn, endIndex } = emptyElement; + + assert.strictEqual(endPositionRow, 0); + assert.strictEqual(endPositionColumn, 2); + assert.strictEqual(endIndex, 2); }); }); diff --git a/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/empty-nodes/mappings/flow-mapping/empty-key.ts b/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/empty-nodes/mappings/flow-mapping/empty-key.ts index 19dbddb65c..30c775cf7c 100644 --- a/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/empty-nodes/mappings/flow-mapping/empty-key.ts +++ b/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/empty-nodes/mappings/flow-mapping/empty-key.ts @@ -1,5 +1,5 @@ import { assert } from 'chai'; -import { includesClasses, toValue, SourceMapElement } from '@swagger-api/apidom-core'; +import { includesClasses, hasElementSourceMap } from '@swagger-api/apidom-core'; import * as adapter from '../../../../../src/adapter-node.ts'; @@ -19,36 +19,25 @@ describe('given empty node as flow mapping key', function () { it('should generate source maps', async function () { const emptyElement = await setupEmptyElement(); - const sourceMapElement = emptyElement.meta.get('sourceMap'); - assert.instanceOf(sourceMapElement, SourceMapElement); + assert.isTrue(hasElementSourceMap(emptyElement)); }); it('should generate proper source map start position', async function () { const emptyElement = await setupEmptyElement(); - const sourceMapElement = emptyElement.meta.get('sourceMap'); - const [row, column, char] = [ - toValue(sourceMapElement.positionStart.get(0)), - toValue(sourceMapElement.positionStart.get(1)), - toValue(sourceMapElement.positionStart.get(2)), - ]; - - assert.strictEqual(row, 0); - assert.strictEqual(column, 1); - assert.strictEqual(char, 1); + const { startPositionRow, startPositionColumn, startIndex } = emptyElement; + + assert.strictEqual(startPositionRow, 0); + assert.strictEqual(startPositionColumn, 1); + assert.strictEqual(startIndex, 1); }); it('should generate proper source map end position', async function () { const emptyElement = await setupEmptyElement(); - const sourceMapElement = emptyElement.meta.get('sourceMap'); - const [row, column, char] = [ - toValue(sourceMapElement.positionEnd.get(0)), - toValue(sourceMapElement.positionEnd.get(1)), - toValue(sourceMapElement.positionEnd.get(2)), - ]; - - assert.strictEqual(row, 0); - assert.strictEqual(column, 1); - assert.strictEqual(char, 1); + const { endPositionRow, endPositionColumn, endIndex } = emptyElement; + + assert.strictEqual(endPositionRow, 0); + assert.strictEqual(endPositionColumn, 1); + assert.strictEqual(endIndex, 1); }); }); diff --git a/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/empty-nodes/mappings/flow-mapping/empty-value-properties.ts b/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/empty-nodes/mappings/flow-mapping/empty-value-properties.ts index 7df6dcd383..d64b519773 100644 --- a/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/empty-nodes/mappings/flow-mapping/empty-value-properties.ts +++ b/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/empty-nodes/mappings/flow-mapping/empty-value-properties.ts @@ -1,5 +1,5 @@ import { assert } from 'chai'; -import { includesClasses, toValue, SourceMapElement } from '@swagger-api/apidom-core'; +import { includesClasses, hasElementSourceMap } from '@swagger-api/apidom-core'; import * as adapter from '../../../../../src/adapter-node.ts'; @@ -19,36 +19,25 @@ describe('given empty node with tag and anchor as flow mapping value', function it('should generate source maps', async function () { const emptyElement = await setupEmptyElement(); - const sourceMapElement = emptyElement.meta.get('sourceMap'); - assert.instanceOf(sourceMapElement, SourceMapElement); + assert.isTrue(hasElementSourceMap(emptyElement)); }); it('should generate proper source map start position', async function () { const emptyElement = await setupEmptyElement(); - const sourceMapElement = emptyElement.meta.get('sourceMap'); - const [row, column, char] = [ - toValue(sourceMapElement.positionStart.get(0)), - toValue(sourceMapElement.positionStart.get(1)), - toValue(sourceMapElement.positionStart.get(2)), - ]; - - assert.strictEqual(row, 0); - assert.strictEqual(column, 18); - assert.strictEqual(char, 18); + const { startPositionRow, startPositionColumn, startIndex } = emptyElement; + + assert.strictEqual(startPositionRow, 0); + assert.strictEqual(startPositionColumn, 18); + assert.strictEqual(startIndex, 18); }); it('should generate proper source map end position', async function () { const emptyElement = await setupEmptyElement(); - const sourceMapElement = emptyElement.meta.get('sourceMap'); - const [row, column, char] = [ - toValue(sourceMapElement.positionEnd.get(0)), - toValue(sourceMapElement.positionEnd.get(1)), - toValue(sourceMapElement.positionEnd.get(2)), - ]; - - assert.strictEqual(row, 0); - assert.strictEqual(column, 18); - assert.strictEqual(char, 18); + const { endPositionRow, endPositionColumn, endIndex } = emptyElement; + + assert.strictEqual(endPositionRow, 0); + assert.strictEqual(endPositionColumn, 18); + assert.strictEqual(endIndex, 18); }); }); diff --git a/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/empty-nodes/mappings/flow-mapping/empty-value.ts b/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/empty-nodes/mappings/flow-mapping/empty-value.ts index b73e5ccce7..18eee74c30 100644 --- a/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/empty-nodes/mappings/flow-mapping/empty-value.ts +++ b/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/empty-nodes/mappings/flow-mapping/empty-value.ts @@ -1,5 +1,5 @@ import { assert } from 'chai'; -import { includesClasses, toValue, SourceMapElement } from '@swagger-api/apidom-core'; +import { includesClasses, hasElementSourceMap } from '@swagger-api/apidom-core'; import * as adapter from '../../../../../src/adapter-node.ts'; @@ -19,36 +19,25 @@ describe('given empty node as flow mapping value', function () { it('should generate source maps', async function () { const emptyElement = await setupEmptyElement(); - const sourceMapElement = emptyElement.meta.get('sourceMap'); - assert.instanceOf(sourceMapElement, SourceMapElement); + assert.isTrue(hasElementSourceMap(emptyElement)); }); it('should generate proper source map start position', async function () { const emptyElement = await setupEmptyElement(); - const sourceMapElement = emptyElement.meta.get('sourceMap'); - const [row, column, char] = [ - toValue(sourceMapElement.positionStart.get(0)), - toValue(sourceMapElement.positionStart.get(1)), - toValue(sourceMapElement.positionStart.get(2)), - ]; - - assert.strictEqual(row, 0); - assert.strictEqual(column, 5); - assert.strictEqual(char, 5); + const { startPositionRow, startPositionColumn, startIndex } = emptyElement; + + assert.strictEqual(startPositionRow, 0); + assert.strictEqual(startPositionColumn, 5); + assert.strictEqual(startIndex, 5); }); it('should generate proper source map end position', async function () { const emptyElement = await setupEmptyElement(); - const sourceMapElement = emptyElement.meta.get('sourceMap'); - const [row, column, char] = [ - toValue(sourceMapElement.positionEnd.get(0)), - toValue(sourceMapElement.positionEnd.get(1)), - toValue(sourceMapElement.positionEnd.get(2)), - ]; - - assert.strictEqual(row, 0); - assert.strictEqual(column, 5); - assert.strictEqual(char, 5); + const { endPositionRow, endPositionColumn, endIndex } = emptyElement; + + assert.strictEqual(endPositionRow, 0); + assert.strictEqual(endPositionColumn, 5); + assert.strictEqual(endIndex, 5); }); }); diff --git a/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/empty-nodes/scalars/flow-scalar/empty-flow-scalar-properties.ts b/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/empty-nodes/scalars/flow-scalar/empty-flow-scalar-properties.ts index 9ef1f753c8..a58c6548d4 100644 --- a/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/empty-nodes/scalars/flow-scalar/empty-flow-scalar-properties.ts +++ b/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/empty-nodes/scalars/flow-scalar/empty-flow-scalar-properties.ts @@ -1,5 +1,5 @@ import { assert } from 'chai'; -import { includesClasses, toValue, SourceMapElement } from '@swagger-api/apidom-core'; +import { includesClasses, hasElementSourceMap } from '@swagger-api/apidom-core'; import * as adapter from '../../../../../src/adapter-node.ts'; @@ -18,36 +18,25 @@ describe('given empty flow scalar node with and explicit tag and anchor', functi it('should generate source maps', async function () { const emptyElement = await setupMemberElement(); - const sourceMapElement = emptyElement.meta.get('sourceMap'); - assert.instanceOf(sourceMapElement, SourceMapElement); + assert.isTrue(hasElementSourceMap(emptyElement)); }); it('should generate proper source map start position', async function () { const emptyElement = await setupMemberElement(); - const sourceMapElement = emptyElement.meta.get('sourceMap'); - const [row, column, char] = [ - toValue(sourceMapElement.positionStart.get(0)), - toValue(sourceMapElement.positionStart.get(1)), - toValue(sourceMapElement.positionStart.get(2)), - ]; - - assert.strictEqual(row, 0); - assert.strictEqual(column, 12); - assert.strictEqual(char, 12); + const { startPositionRow, startPositionColumn, startIndex } = emptyElement; + + assert.strictEqual(startPositionRow, 0); + assert.strictEqual(startPositionColumn, 12); + assert.strictEqual(startIndex, 12); }); it('should generate proper source map end position', async function () { const emptyElement = await setupMemberElement(); - const sourceMapElement = emptyElement.meta.get('sourceMap'); - const [row, column, char] = [ - toValue(sourceMapElement.positionEnd.get(0)), - toValue(sourceMapElement.positionEnd.get(1)), - toValue(sourceMapElement.positionEnd.get(2)), - ]; - - assert.strictEqual(row, 0); - assert.strictEqual(column, 12); - assert.strictEqual(char, 12); + const { endPositionRow, endPositionColumn, endIndex } = emptyElement; + + assert.strictEqual(endPositionRow, 0); + assert.strictEqual(endPositionColumn, 12); + assert.strictEqual(endIndex, 12); }); }); diff --git a/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/empty-nodes/sequences/block-sequence/empty-block-sequence-item.ts b/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/empty-nodes/sequences/block-sequence/empty-block-sequence-item.ts index 50e201d20d..a29aaf1244 100644 --- a/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/empty-nodes/sequences/block-sequence/empty-block-sequence-item.ts +++ b/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/empty-nodes/sequences/block-sequence/empty-block-sequence-item.ts @@ -1,5 +1,5 @@ import { assert } from 'chai'; -import { includesClasses, toValue, SourceMapElement } from '@swagger-api/apidom-core'; +import { includesClasses, hasElementSourceMap } from '@swagger-api/apidom-core'; import * as adapter from '../../../../../src/adapter-node.ts'; @@ -19,36 +19,25 @@ describe('given empty node as block sequence item', function () { it('should generate source maps', async function () { const emptyElement = await setupEmptyElement(); - const sourceMapElement = emptyElement.meta.get('sourceMap'); - assert.instanceOf(sourceMapElement, SourceMapElement); + assert.isTrue(hasElementSourceMap(emptyElement)); }); it('should generate proper source map start position', async function () { const emptyElement = await setupEmptyElement(); - const sourceMapElement = emptyElement.meta.get('sourceMap'); - const [row, column, char] = [ - toValue(sourceMapElement.positionStart.get(0)), - toValue(sourceMapElement.positionStart.get(1)), - toValue(sourceMapElement.positionStart.get(2)), - ]; - - assert.strictEqual(row, 0); - assert.strictEqual(column, 1); - assert.strictEqual(char, 1); + const { startPositionRow, startPositionColumn, startIndex } = emptyElement; + + assert.strictEqual(startPositionRow, 0); + assert.strictEqual(startPositionColumn, 1); + assert.strictEqual(startIndex, 1); }); it('should generate proper source map end position', async function () { const emptyElement = await setupEmptyElement(); - const sourceMapElement = emptyElement.meta.get('sourceMap'); - const [row, column, char] = [ - toValue(sourceMapElement.positionEnd.get(0)), - toValue(sourceMapElement.positionEnd.get(1)), - toValue(sourceMapElement.positionEnd.get(2)), - ]; - - assert.strictEqual(row, 0); - assert.strictEqual(column, 1); - assert.strictEqual(char, 1); + const { endPositionRow, endPositionColumn, endIndex } = emptyElement; + + assert.strictEqual(endPositionRow, 0); + assert.strictEqual(endPositionColumn, 1); + assert.strictEqual(endIndex, 1); }); }); diff --git a/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/empty-nodes/sequences/flow-sequence/empty-flow-sequence-item-properties.ts b/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/empty-nodes/sequences/flow-sequence/empty-flow-sequence-item-properties.ts index c373f019d7..159491f86d 100644 --- a/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/empty-nodes/sequences/flow-sequence/empty-flow-sequence-item-properties.ts +++ b/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/empty-nodes/sequences/flow-sequence/empty-flow-sequence-item-properties.ts @@ -1,5 +1,5 @@ import { assert } from 'chai'; -import { includesClasses, toValue, SourceMapElement } from '@swagger-api/apidom-core'; +import { includesClasses, hasElementSourceMap } from '@swagger-api/apidom-core'; import * as adapter from '../../../../../src/adapter-node.ts'; @@ -19,36 +19,25 @@ describe('given empty node with tag and anchor as flow sequence item', function it('should generate source maps', async function () { const emptyElement = await setupEmptyElement(); - const sourceMapElement = emptyElement.meta.get('sourceMap'); - assert.instanceOf(sourceMapElement, SourceMapElement); + assert.isTrue(hasElementSourceMap(emptyElement)); }); it('should generate proper source map start position', async function () { const emptyElement = await setupEmptyElement(); - const sourceMapElement = emptyElement.meta.get('sourceMap'); - const [row, column, char] = [ - toValue(sourceMapElement.positionStart.get(0)), - toValue(sourceMapElement.positionStart.get(1)), - toValue(sourceMapElement.positionStart.get(2)), - ]; - - assert.strictEqual(row, 0); - assert.strictEqual(column, 16); - assert.strictEqual(char, 16); + const { startPositionRow, startPositionColumn, startIndex } = emptyElement; + + assert.strictEqual(startPositionRow, 0); + assert.strictEqual(startPositionColumn, 16); + assert.strictEqual(startIndex, 16); }); it('should generate proper source map end position', async function () { const emptyElement = await setupEmptyElement(); - const sourceMapElement = emptyElement.meta.get('sourceMap'); - const [row, column, char] = [ - toValue(sourceMapElement.positionEnd.get(0)), - toValue(sourceMapElement.positionEnd.get(1)), - toValue(sourceMapElement.positionEnd.get(2)), - ]; - - assert.strictEqual(row, 0); - assert.strictEqual(column, 16); - assert.strictEqual(char, 16); + const { endPositionRow, endPositionColumn, endIndex } = emptyElement; + + assert.strictEqual(endPositionRow, 0); + assert.strictEqual(endPositionColumn, 16); + assert.strictEqual(endIndex, 16); }); }); diff --git a/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/index.ts b/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/index.ts index 2ae55fb5b3..85f8a8d107 100644 --- a/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/index.ts +++ b/packages/apidom-parser-adapter-yaml-1-2/test/adapter-node/index.ts @@ -155,8 +155,12 @@ describe('adapter-node', function () { tagKind: 'Scalar', nodeCanonicalContent: undefined, }); - assert.include(error.tagPosition?.start, { type: 'point', row: 0, column: 6, char: 6 }); - assert.include(error.tagPosition?.end, { type: 'point', row: 0, column: 18, char: 18 }); + expect(error.tagStartPositionRow).to.equal(0); + expect(error.tagStartPositionColumn).to.equal(6); + expect(error.tagStartPositionIndex).to.equal(6); + expect(error.tagEndPositionRow).to.equal(0); + expect(error.tagEndPositionColumn).to.equal(18); + expect(error.tagEndPositionIndex).to.equal(18); } }); }); @@ -177,8 +181,12 @@ describe('adapter-node', function () { tagKind: 'Scalar', nodeCanonicalContent: 'value', }); - assert.include(error.tagPosition?.start, { type: 'point', row: 0, column: 6, char: 6 }); - assert.include(error.tagPosition?.end, { type: 'point', row: 0, column: 11, char: 11 }); + expect(error.tagStartPositionRow).to.equal(0); + expect(error.tagStartPositionColumn).to.equal(6); + expect(error.tagStartPositionIndex).to.equal(6); + expect(error.tagEndPositionRow).to.equal(0); + expect(error.tagEndPositionColumn).to.equal(11); + expect(error.tagEndPositionIndex).to.equal(11); } }); }); diff --git a/packages/apidom-parser-adapter-yaml-1-2/test/syntactic-analysis/__snapshots__/TreeCursorIterator.mjs.snap b/packages/apidom-parser-adapter-yaml-1-2/test/syntactic-analysis/__snapshots__/TreeCursorIterator.mjs.snap index 6f7a2f5566..5b48d023e3 100644 --- a/packages/apidom-parser-adapter-yaml-1-2/test/syntactic-analysis/__snapshots__/TreeCursorIterator.mjs.snap +++ b/packages/apidom-parser-adapter-yaml-1-2/test/syntactic-analysis/__snapshots__/TreeCursorIterator.mjs.snap @@ -12,20 +12,16 @@ TreeCursorSyntaxNode { TreeCursorSyntaxNode { children: Array [], endIndex: 1, - endPosition: Object { - column: 1, - row: 0, - }, + endPositionColumn: 1, + endPositionRow: 0, fieldName: undefined, hasError: false, isMissing: false, isNamed: false, previousSibling: undefined, startIndex: 0, - startPosition: Object { - column: 0, - row: 0, - }, + startPositionColumn: 0, + startPositionRow: 0, text: [, type: [, }, @@ -36,48 +32,38 @@ TreeCursorSyntaxNode { TreeCursorSyntaxNode { children: Array [], endIndex: 2, - endPosition: Object { - column: 2, - row: 0, - }, + endPositionColumn: 2, + endPositionRow: 0, fieldName: undefined, hasError: false, isMissing: false, isNamed: true, previousSibling: undefined, startIndex: 1, - startPosition: Object { - column: 1, - row: 0, - }, + startPositionColumn: 1, + startPositionRow: 0, text: 1, type: integer_scalar, }, ], endIndex: 2, - endPosition: Object { - column: 2, - row: 0, - }, + endPositionColumn: 2, + endPositionRow: 0, fieldName: undefined, hasError: false, isMissing: false, isNamed: true, previousSibling: undefined, startIndex: 1, - startPosition: Object { - column: 1, - row: 0, - }, + startPositionColumn: 1, + startPositionRow: 0, text: 1, type: plain_scalar, }, ], endIndex: 2, - endPosition: Object { - column: 2, - row: 0, - }, + endPositionColumn: 2, + endPositionRow: 0, fieldName: undefined, hasError: false, isMissing: false, @@ -85,38 +71,30 @@ TreeCursorSyntaxNode { previousSibling: TreeCursorSyntaxNode { children: Array [], endIndex: 1, - endPosition: Object { - column: 1, - row: 0, - }, + endPositionColumn: 1, + endPositionRow: 0, fieldName: undefined, hasError: false, isMissing: false, isNamed: false, previousSibling: undefined, startIndex: 0, - startPosition: Object { - column: 0, - row: 0, - }, + startPositionColumn: 0, + startPositionRow: 0, text: [, type: [, }, startIndex: 1, - startPosition: Object { - column: 1, - row: 0, - }, + startPositionColumn: 1, + startPositionRow: 0, text: 1, type: flow_node, }, TreeCursorSyntaxNode { children: Array [], endIndex: 3, - endPosition: Object { - column: 3, - row: 0, - }, + endPositionColumn: 3, + endPositionRow: 0, fieldName: undefined, hasError: false, isMissing: false, @@ -128,48 +106,38 @@ TreeCursorSyntaxNode { TreeCursorSyntaxNode { children: Array [], endIndex: 2, - endPosition: Object { - column: 2, - row: 0, - }, + endPositionColumn: 2, + endPositionRow: 0, fieldName: undefined, hasError: false, isMissing: false, isNamed: true, previousSibling: undefined, startIndex: 1, - startPosition: Object { - column: 1, - row: 0, - }, + startPositionColumn: 1, + startPositionRow: 0, text: 1, type: integer_scalar, }, ], endIndex: 2, - endPosition: Object { - column: 2, - row: 0, - }, + endPositionColumn: 2, + endPositionRow: 0, fieldName: undefined, hasError: false, isMissing: false, isNamed: true, previousSibling: undefined, startIndex: 1, - startPosition: Object { - column: 1, - row: 0, - }, + startPositionColumn: 1, + startPositionRow: 0, text: 1, type: plain_scalar, }, ], endIndex: 2, - endPosition: Object { - column: 2, - row: 0, - }, + endPositionColumn: 2, + endPositionRow: 0, fieldName: undefined, hasError: false, isMissing: false, @@ -177,36 +145,28 @@ TreeCursorSyntaxNode { previousSibling: TreeCursorSyntaxNode { children: Array [], endIndex: 1, - endPosition: Object { - column: 1, - row: 0, - }, + endPositionColumn: 1, + endPositionRow: 0, fieldName: undefined, hasError: false, isMissing: false, isNamed: false, previousSibling: undefined, startIndex: 0, - startPosition: Object { - column: 0, - row: 0, - }, + startPositionColumn: 0, + startPositionRow: 0, text: [, type: [, }, startIndex: 1, - startPosition: Object { - column: 1, - row: 0, - }, + startPositionColumn: 1, + startPositionRow: 0, text: 1, type: flow_node, }, startIndex: 2, - startPosition: Object { - column: 2, - row: 0, - }, + startPositionColumn: 2, + startPositionRow: 0, text: ,, type: ,, }, @@ -217,48 +177,38 @@ TreeCursorSyntaxNode { TreeCursorSyntaxNode { children: Array [], endIndex: 5, - endPosition: Object { - column: 5, - row: 0, - }, + endPositionColumn: 5, + endPositionRow: 0, fieldName: undefined, hasError: false, isMissing: false, isNamed: true, previousSibling: undefined, startIndex: 4, - startPosition: Object { - column: 4, - row: 0, - }, + startPositionColumn: 4, + startPositionRow: 0, text: 2, type: integer_scalar, }, ], endIndex: 5, - endPosition: Object { - column: 5, - row: 0, - }, + endPositionColumn: 5, + endPositionRow: 0, fieldName: undefined, hasError: false, isMissing: false, isNamed: true, previousSibling: undefined, startIndex: 4, - startPosition: Object { - column: 4, - row: 0, - }, + startPositionColumn: 4, + startPositionRow: 0, text: 2, type: plain_scalar, }, ], endIndex: 5, - endPosition: Object { - column: 5, - row: 0, - }, + endPositionColumn: 5, + endPositionRow: 0, fieldName: undefined, hasError: false, isMissing: false, @@ -266,10 +216,8 @@ TreeCursorSyntaxNode { previousSibling: TreeCursorSyntaxNode { children: Array [], endIndex: 3, - endPosition: Object { - column: 3, - row: 0, - }, + endPositionColumn: 3, + endPositionRow: 0, fieldName: undefined, hasError: false, isMissing: false, @@ -281,48 +229,38 @@ TreeCursorSyntaxNode { TreeCursorSyntaxNode { children: Array [], endIndex: 2, - endPosition: Object { - column: 2, - row: 0, - }, + endPositionColumn: 2, + endPositionRow: 0, fieldName: undefined, hasError: false, isMissing: false, isNamed: true, previousSibling: undefined, startIndex: 1, - startPosition: Object { - column: 1, - row: 0, - }, + startPositionColumn: 1, + startPositionRow: 0, text: 1, type: integer_scalar, }, ], endIndex: 2, - endPosition: Object { - column: 2, - row: 0, - }, + endPositionColumn: 2, + endPositionRow: 0, fieldName: undefined, hasError: false, isMissing: false, isNamed: true, previousSibling: undefined, startIndex: 1, - startPosition: Object { - column: 1, - row: 0, - }, + startPositionColumn: 1, + startPositionRow: 0, text: 1, type: plain_scalar, }, ], endIndex: 2, - endPosition: Object { - column: 2, - row: 0, - }, + endPositionColumn: 2, + endPositionRow: 0, fieldName: undefined, hasError: false, isMissing: false, @@ -330,54 +268,42 @@ TreeCursorSyntaxNode { previousSibling: TreeCursorSyntaxNode { children: Array [], endIndex: 1, - endPosition: Object { - column: 1, - row: 0, - }, + endPositionColumn: 1, + endPositionRow: 0, fieldName: undefined, hasError: false, isMissing: false, isNamed: false, previousSibling: undefined, startIndex: 0, - startPosition: Object { - column: 0, - row: 0, - }, + startPositionColumn: 0, + startPositionRow: 0, text: [, type: [, }, startIndex: 1, - startPosition: Object { - column: 1, - row: 0, - }, + startPositionColumn: 1, + startPositionRow: 0, text: 1, type: flow_node, }, startIndex: 2, - startPosition: Object { - column: 2, - row: 0, - }, + startPositionColumn: 2, + startPositionRow: 0, text: ,, type: ,, }, startIndex: 4, - startPosition: Object { - column: 4, - row: 0, - }, + startPositionColumn: 4, + startPositionRow: 0, text: 2, type: flow_node, }, TreeCursorSyntaxNode { children: Array [], endIndex: 6, - endPosition: Object { - column: 6, - row: 0, - }, + endPositionColumn: 6, + endPositionRow: 0, fieldName: undefined, hasError: false, isMissing: false, @@ -389,48 +315,38 @@ TreeCursorSyntaxNode { TreeCursorSyntaxNode { children: Array [], endIndex: 5, - endPosition: Object { - column: 5, - row: 0, - }, + endPositionColumn: 5, + endPositionRow: 0, fieldName: undefined, hasError: false, isMissing: false, isNamed: true, previousSibling: undefined, startIndex: 4, - startPosition: Object { - column: 4, - row: 0, - }, + startPositionColumn: 4, + startPositionRow: 0, text: 2, type: integer_scalar, }, ], endIndex: 5, - endPosition: Object { - column: 5, - row: 0, - }, + endPositionColumn: 5, + endPositionRow: 0, fieldName: undefined, hasError: false, isMissing: false, isNamed: true, previousSibling: undefined, startIndex: 4, - startPosition: Object { - column: 4, - row: 0, - }, + startPositionColumn: 4, + startPositionRow: 0, text: 2, type: plain_scalar, }, ], endIndex: 5, - endPosition: Object { - column: 5, - row: 0, - }, + endPositionColumn: 5, + endPositionRow: 0, fieldName: undefined, hasError: false, isMissing: false, @@ -438,10 +354,8 @@ TreeCursorSyntaxNode { previousSibling: TreeCursorSyntaxNode { children: Array [], endIndex: 3, - endPosition: Object { - column: 3, - row: 0, - }, + endPositionColumn: 3, + endPositionRow: 0, fieldName: undefined, hasError: false, isMissing: false, @@ -453,48 +367,38 @@ TreeCursorSyntaxNode { TreeCursorSyntaxNode { children: Array [], endIndex: 2, - endPosition: Object { - column: 2, - row: 0, - }, + endPositionColumn: 2, + endPositionRow: 0, fieldName: undefined, hasError: false, isMissing: false, isNamed: true, previousSibling: undefined, startIndex: 1, - startPosition: Object { - column: 1, - row: 0, - }, + startPositionColumn: 1, + startPositionRow: 0, text: 1, type: integer_scalar, }, ], endIndex: 2, - endPosition: Object { - column: 2, - row: 0, - }, + endPositionColumn: 2, + endPositionRow: 0, fieldName: undefined, hasError: false, isMissing: false, isNamed: true, previousSibling: undefined, startIndex: 1, - startPosition: Object { - column: 1, - row: 0, - }, + startPositionColumn: 1, + startPositionRow: 0, text: 1, type: plain_scalar, }, ], endIndex: 2, - endPosition: Object { - column: 2, - row: 0, - }, + endPositionColumn: 2, + endPositionRow: 0, fieldName: undefined, hasError: false, isMissing: false, @@ -502,128 +406,100 @@ TreeCursorSyntaxNode { previousSibling: TreeCursorSyntaxNode { children: Array [], endIndex: 1, - endPosition: Object { - column: 1, - row: 0, - }, + endPositionColumn: 1, + endPositionRow: 0, fieldName: undefined, hasError: false, isMissing: false, isNamed: false, previousSibling: undefined, startIndex: 0, - startPosition: Object { - column: 0, - row: 0, - }, + startPositionColumn: 0, + startPositionRow: 0, text: [, type: [, }, startIndex: 1, - startPosition: Object { - column: 1, - row: 0, - }, + startPositionColumn: 1, + startPositionRow: 0, text: 1, type: flow_node, }, startIndex: 2, - startPosition: Object { - column: 2, - row: 0, - }, + startPositionColumn: 2, + startPositionRow: 0, text: ,, type: ,, }, startIndex: 4, - startPosition: Object { - column: 4, - row: 0, - }, + startPositionColumn: 4, + startPositionRow: 0, text: 2, type: flow_node, }, startIndex: 5, - startPosition: Object { - column: 5, - row: 0, - }, + startPositionColumn: 5, + startPositionRow: 0, text: ], type: ], }, ], endIndex: 6, - endPosition: Object { - column: 6, - row: 0, - }, + endPositionColumn: 6, + endPositionRow: 0, fieldName: undefined, hasError: false, isMissing: false, isNamed: true, previousSibling: undefined, startIndex: 0, - startPosition: Object { - column: 0, - row: 0, - }, + startPositionColumn: 0, + startPositionRow: 0, text: [1, 2], type: flow_sequence, }, ], endIndex: 6, - endPosition: Object { - column: 6, - row: 0, - }, + endPositionColumn: 6, + endPositionRow: 0, fieldName: undefined, hasError: false, isMissing: false, isNamed: true, previousSibling: undefined, startIndex: 0, - startPosition: Object { - column: 0, - row: 0, - }, + startPositionColumn: 0, + startPositionRow: 0, text: [1, 2], type: flow_node, }, ], endIndex: 6, - endPosition: Object { - column: 6, - row: 0, - }, + endPositionColumn: 6, + endPositionRow: 0, fieldName: undefined, hasError: false, isMissing: false, isNamed: true, previousSibling: undefined, startIndex: 0, - startPosition: Object { - column: 0, - row: 0, - }, + startPositionColumn: 0, + startPositionRow: 0, text: [1, 2], type: document, }, ], endIndex: 6, - endPosition: Object { - column: 6, - row: 0, - }, + endPositionColumn: 6, + endPositionRow: 0, fieldName: undefined, hasError: false, isMissing: false, isNamed: true, previousSibling: undefined, startIndex: 0, - startPosition: Object { - column: 0, - row: 0, - }, + startPositionColumn: 0, + startPositionRow: 0, text: [1, 2], type: stream, } diff --git a/packages/apidom-reference/test/parse/index.ts b/packages/apidom-reference/test/parse/index.ts index 527f601f64..804a2953c4 100644 --- a/packages/apidom-reference/test/parse/index.ts +++ b/packages/apidom-reference/test/parse/index.ts @@ -1,6 +1,6 @@ import { Buffer } from 'node:buffer'; import path from 'node:path'; -import { assert } from 'chai'; +import { assert, expect } from 'chai'; import { isParseResultElement, toValue } from '@swagger-api/apidom-core'; import { mediaTypes } from '@swagger-api/apidom-ns-openapi-3-1'; import { fileURLToPath } from 'node:url'; @@ -40,7 +40,12 @@ describe('parse', function () { const parseResult = await parse(uri, options); const { api } = parseResult; - assert.isTrue(api?.meta.hasKey('sourceMap')); + expect(api?.startPositionRow).to.be.a('number'); + expect(api?.startPositionColumn).to.be.a('number'); + expect(api?.startIndex).to.be.a('number'); + expect(api?.endPositionRow).to.be.a('number'); + expect(api?.endPositionColumn).to.be.a('number'); + expect(api?.endIndex).to.be.a('number'); }); specify('should respect parserOpts during parsing; sourceMap = off', async function () { diff --git a/packages/apidom-reference/test/parse/parsers/api-design-systems-json/index.ts b/packages/apidom-reference/test/parse/parsers/api-design-systems-json/index.ts index 7ed9ef9d65..3bff3a6053 100644 --- a/packages/apidom-reference/test/parse/parsers/api-design-systems-json/index.ts +++ b/packages/apidom-reference/test/parse/parsers/api-design-systems-json/index.ts @@ -1,7 +1,7 @@ import fs from 'node:fs'; import path from 'node:path'; import { assert } from 'chai'; -import { NumberElement, isParseResultElement, isSourceMapElement } from '@swagger-api/apidom-core'; +import { NumberElement, isParseResultElement, hasElementSourceMap } from '@swagger-api/apidom-core'; import { mediaTypes } from '@swagger-api/apidom-parser-adapter-api-design-systems-json'; import { fileURLToPath } from 'node:url'; @@ -176,7 +176,7 @@ describe('parsers', function () { const parser = new APIDesignSystemsJSONParser({ sourceMap: true }); const parseResult = await parser.parse(file); - assert.isTrue(isSourceMapElement(parseResult.result?.meta.get('sourceMap'))); + assert.isTrue(parseResult.result && hasElementSourceMap(parseResult.result)); }); }); diff --git a/packages/apidom-reference/test/parse/parsers/api-design-systems-yaml/index.ts b/packages/apidom-reference/test/parse/parsers/api-design-systems-yaml/index.ts index b9343901d4..f70f4b986b 100644 --- a/packages/apidom-reference/test/parse/parsers/api-design-systems-yaml/index.ts +++ b/packages/apidom-reference/test/parse/parsers/api-design-systems-yaml/index.ts @@ -1,7 +1,7 @@ import fs from 'node:fs'; import path from 'node:path'; import { assert } from 'chai'; -import { NumberElement, isParseResultElement, isSourceMapElement } from '@swagger-api/apidom-core'; +import { NumberElement, isParseResultElement, hasElementSourceMap } from '@swagger-api/apidom-core'; import { mediaTypes } from '@swagger-api/apidom-parser-adapter-api-design-systems-yaml'; import { fileURLToPath } from 'node:url'; @@ -197,7 +197,7 @@ describe('parsers', function () { const parser = new APIDesignSystemsYAMLParser({ sourceMap: true }); const parseResult = await parser.parse(file); - assert.isTrue(isSourceMapElement(parseResult.result?.meta.get('sourceMap'))); + assert.isTrue(parseResult.result && hasElementSourceMap(parseResult.result)); }); }); diff --git a/packages/apidom-reference/test/parse/parsers/arazzo-json-1/index.ts b/packages/apidom-reference/test/parse/parsers/arazzo-json-1/index.ts index eeb00b2757..fb449ed0e4 100644 --- a/packages/apidom-reference/test/parse/parsers/arazzo-json-1/index.ts +++ b/packages/apidom-reference/test/parse/parsers/arazzo-json-1/index.ts @@ -1,7 +1,7 @@ import fs from 'node:fs'; import path from 'node:path'; import { assert } from 'chai'; -import { NumberElement, isParseResultElement, isSourceMapElement } from '@swagger-api/apidom-core'; +import { NumberElement, isParseResultElement, hasElementSourceMap } from '@swagger-api/apidom-core'; import { mediaTypes } from '@swagger-api/apidom-parser-adapter-arazzo-json-1'; import { fileURLToPath } from 'node:url'; @@ -174,7 +174,7 @@ describe('parsers', function () { const parser = new ArazzoJSON1Parser({ sourceMap: true }); const parseResult = await parser.parse(file); - assert.isTrue(isSourceMapElement(parseResult.api?.meta.get('sourceMap'))); + assert.isTrue(parseResult.api && hasElementSourceMap(parseResult.api)); }); }); diff --git a/packages/apidom-reference/test/parse/parsers/arazzo-yaml-1/index.ts b/packages/apidom-reference/test/parse/parsers/arazzo-yaml-1/index.ts index 3bfef24319..2cdaecfbdb 100644 --- a/packages/apidom-reference/test/parse/parsers/arazzo-yaml-1/index.ts +++ b/packages/apidom-reference/test/parse/parsers/arazzo-yaml-1/index.ts @@ -1,7 +1,7 @@ import fs from 'node:fs'; import path from 'node:path'; import { assert } from 'chai'; -import { NumberElement, isParseResultElement, isSourceMapElement } from '@swagger-api/apidom-core'; +import { NumberElement, isParseResultElement, hasElementSourceMap } from '@swagger-api/apidom-core'; import { mediaTypes } from '@swagger-api/apidom-parser-adapter-arazzo-yaml-1'; import { fileURLToPath } from 'node:url'; @@ -205,7 +205,7 @@ describe('parsers', function () { const parser = new ArazzoYAML1Parser({ sourceMap: true }); const parseResult = await parser.parse(file); - assert.isTrue(isSourceMapElement(parseResult.api?.meta.get('sourceMap'))); + assert.isTrue(parseResult.api && hasElementSourceMap(parseResult.api)); }); }); diff --git a/packages/apidom-reference/test/parse/parsers/asyncapi-json-2/index.ts b/packages/apidom-reference/test/parse/parsers/asyncapi-json-2/index.ts index ac3b3219f5..4dfb02e518 100644 --- a/packages/apidom-reference/test/parse/parsers/asyncapi-json-2/index.ts +++ b/packages/apidom-reference/test/parse/parsers/asyncapi-json-2/index.ts @@ -1,7 +1,7 @@ import fs from 'node:fs'; import path from 'node:path'; import { assert } from 'chai'; -import { NumberElement, isParseResultElement, isSourceMapElement } from '@swagger-api/apidom-core'; +import { NumberElement, isParseResultElement, hasElementSourceMap } from '@swagger-api/apidom-core'; import { mediaTypes } from '@swagger-api/apidom-parser-adapter-asyncapi-json-2'; import { fileURLToPath } from 'node:url'; @@ -174,7 +174,7 @@ describe('parsers', function () { const parser = new AsyncAPIJSON2Parser({ sourceMap: true }); const parseResult = await parser.parse(file); - assert.isTrue(isSourceMapElement(parseResult.api?.meta.get('sourceMap'))); + assert.isTrue(parseResult.api && hasElementSourceMap(parseResult.api)); }); }); diff --git a/packages/apidom-reference/test/parse/parsers/asyncapi-yaml-2/index.ts b/packages/apidom-reference/test/parse/parsers/asyncapi-yaml-2/index.ts index 7cedbec15a..a654e4c2e6 100644 --- a/packages/apidom-reference/test/parse/parsers/asyncapi-yaml-2/index.ts +++ b/packages/apidom-reference/test/parse/parsers/asyncapi-yaml-2/index.ts @@ -1,7 +1,7 @@ import fs from 'node:fs'; import path from 'node:path'; import { assert } from 'chai'; -import { NumberElement, isParseResultElement, isSourceMapElement } from '@swagger-api/apidom-core'; +import { NumberElement, isParseResultElement, hasElementSourceMap } from '@swagger-api/apidom-core'; import { mediaTypes } from '@swagger-api/apidom-parser-adapter-asyncapi-yaml-2'; import { fileURLToPath } from 'node:url'; @@ -197,7 +197,7 @@ describe('parsers', function () { const parser = new AsyncAPIYAML2Parser({ sourceMap: true }); const parseResult = await parser.parse(file); - assert.isTrue(isSourceMapElement(parseResult.api?.meta.get('sourceMap'))); + assert.isTrue(parseResult.api && hasElementSourceMap(parseResult.api)); }); }); diff --git a/packages/apidom-reference/test/parse/parsers/json/index.ts b/packages/apidom-reference/test/parse/parsers/json/index.ts index e03be7924f..f82c637ceb 100644 --- a/packages/apidom-reference/test/parse/parsers/json/index.ts +++ b/packages/apidom-reference/test/parse/parsers/json/index.ts @@ -4,7 +4,7 @@ import { NumberElement, ObjectElement, isParseResultElement, - isSourceMapElement, + hasElementSourceMap, } from '@swagger-api/apidom-core'; import File from '../../../../src/File.ts'; @@ -126,7 +126,7 @@ describe('parsers', function () { const result = await parser.parse(file); const objElement: ObjectElement = result.get(0); - assert.isTrue(isSourceMapElement(objElement.meta.get('sourceMap'))); + assert.isTrue(hasElementSourceMap(objElement)); }); }); diff --git a/packages/apidom-reference/test/parse/parsers/openapi-json-2/index.ts b/packages/apidom-reference/test/parse/parsers/openapi-json-2/index.ts index 2a2865c17f..ae8bd99db9 100644 --- a/packages/apidom-reference/test/parse/parsers/openapi-json-2/index.ts +++ b/packages/apidom-reference/test/parse/parsers/openapi-json-2/index.ts @@ -1,7 +1,7 @@ import fs from 'node:fs'; import path from 'node:path'; import { assert } from 'chai'; -import { NumberElement, isParseResultElement, isSourceMapElement } from '@swagger-api/apidom-core'; +import { NumberElement, isParseResultElement, hasElementSourceMap } from '@swagger-api/apidom-core'; import { mediaTypes } from '@swagger-api/apidom-parser-adapter-openapi-json-2'; import { fileURLToPath } from 'node:url'; @@ -174,7 +174,7 @@ describe('parsers', function () { const parser = new OpenAPIJSON2Parser({ sourceMap: true }); const parseResult = await parser.parse(file); - assert.isTrue(isSourceMapElement(parseResult.api?.meta.get('sourceMap'))); + assert.isTrue(parseResult.api && hasElementSourceMap(parseResult.api)); }); }); diff --git a/packages/apidom-reference/test/parse/parsers/openapi-json-3-0/index.ts b/packages/apidom-reference/test/parse/parsers/openapi-json-3-0/index.ts index 150b372169..fe86424c46 100644 --- a/packages/apidom-reference/test/parse/parsers/openapi-json-3-0/index.ts +++ b/packages/apidom-reference/test/parse/parsers/openapi-json-3-0/index.ts @@ -1,7 +1,7 @@ import fs from 'node:fs'; import path from 'node:path'; import { assert } from 'chai'; -import { NumberElement, isParseResultElement, isSourceMapElement } from '@swagger-api/apidom-core'; +import { NumberElement, isParseResultElement, hasElementSourceMap } from '@swagger-api/apidom-core'; import { mediaTypes } from '@swagger-api/apidom-parser-adapter-openapi-json-3-0'; import { fileURLToPath } from 'node:url'; @@ -174,7 +174,7 @@ describe('parsers', function () { const parser = new OpenAPIJSON3_0Parser({ sourceMap: true }); const parseResult = await parser.parse(file); - assert.isTrue(isSourceMapElement(parseResult.api?.meta.get('sourceMap'))); + assert.isTrue(parseResult.api && hasElementSourceMap(parseResult.api)); }); }); diff --git a/packages/apidom-reference/test/parse/parsers/openapi-json-3-1/index.ts b/packages/apidom-reference/test/parse/parsers/openapi-json-3-1/index.ts index 264ea48c5b..4bb890a729 100644 --- a/packages/apidom-reference/test/parse/parsers/openapi-json-3-1/index.ts +++ b/packages/apidom-reference/test/parse/parsers/openapi-json-3-1/index.ts @@ -1,7 +1,7 @@ import fs from 'node:fs'; import path from 'node:path'; import { assert } from 'chai'; -import { NumberElement, isParseResultElement, isSourceMapElement } from '@swagger-api/apidom-core'; +import { NumberElement, isParseResultElement, hasElementSourceMap } from '@swagger-api/apidom-core'; import { mediaTypes } from '@swagger-api/apidom-parser-adapter-openapi-json-3-1'; import { fileURLToPath } from 'node:url'; @@ -174,7 +174,7 @@ describe('parsers', function () { const parser = new OpenAPIJSON3_1Parser({ sourceMap: true }); const parseResult = await parser.parse(file); - assert.isTrue(isSourceMapElement(parseResult.api?.meta.get('sourceMap'))); + assert.isTrue(parseResult.api && hasElementSourceMap(parseResult.api)); }); }); diff --git a/packages/apidom-reference/test/parse/parsers/openapi-yaml-2/index.ts b/packages/apidom-reference/test/parse/parsers/openapi-yaml-2/index.ts index f0d62ae566..72eaf97c41 100644 --- a/packages/apidom-reference/test/parse/parsers/openapi-yaml-2/index.ts +++ b/packages/apidom-reference/test/parse/parsers/openapi-yaml-2/index.ts @@ -1,7 +1,7 @@ import fs from 'node:fs'; import path from 'node:path'; import { assert } from 'chai'; -import { NumberElement, isParseResultElement, isSourceMapElement } from '@swagger-api/apidom-core'; +import { NumberElement, isParseResultElement, hasElementSourceMap } from '@swagger-api/apidom-core'; import { mediaTypes } from '@swagger-api/apidom-parser-adapter-openapi-yaml-2'; import { fileURLToPath } from 'node:url'; @@ -205,7 +205,7 @@ describe('parsers', function () { const parser = new OpenAPIYAML2Parser({ sourceMap: true }); const parseResult = await parser.parse(file); - assert.isTrue(isSourceMapElement(parseResult.api?.meta.get('sourceMap'))); + assert.isTrue(parseResult.api && hasElementSourceMap(parseResult.api)); }); }); diff --git a/packages/apidom-reference/test/parse/parsers/openapi-yaml-3-0/index.ts b/packages/apidom-reference/test/parse/parsers/openapi-yaml-3-0/index.ts index 98e5f533e0..06909b1261 100644 --- a/packages/apidom-reference/test/parse/parsers/openapi-yaml-3-0/index.ts +++ b/packages/apidom-reference/test/parse/parsers/openapi-yaml-3-0/index.ts @@ -1,7 +1,7 @@ import fs from 'node:fs'; import path from 'node:path'; import { assert } from 'chai'; -import { NumberElement, isParseResultElement, isSourceMapElement } from '@swagger-api/apidom-core'; +import { NumberElement, isParseResultElement, hasElementSourceMap } from '@swagger-api/apidom-core'; import { mediaTypes } from '@swagger-api/apidom-parser-adapter-openapi-yaml-3-0'; import { fileURLToPath } from 'node:url'; @@ -205,7 +205,7 @@ describe('parsers', function () { const parser = new OpenAPIYAML3_0Parser({ sourceMap: true }); const parseResult = await parser.parse(file); - assert.isTrue(isSourceMapElement(parseResult.api?.meta.get('sourceMap'))); + assert.isTrue(parseResult.api && hasElementSourceMap(parseResult.api)); }); }); diff --git a/packages/apidom-reference/test/parse/parsers/openapi-yaml-3-1/index.ts b/packages/apidom-reference/test/parse/parsers/openapi-yaml-3-1/index.ts index 9fe53bf672..913b437fb1 100644 --- a/packages/apidom-reference/test/parse/parsers/openapi-yaml-3-1/index.ts +++ b/packages/apidom-reference/test/parse/parsers/openapi-yaml-3-1/index.ts @@ -1,7 +1,7 @@ import fs from 'node:fs'; import path from 'node:path'; import { assert } from 'chai'; -import { NumberElement, isParseResultElement, isSourceMapElement } from '@swagger-api/apidom-core'; +import { NumberElement, isParseResultElement, hasElementSourceMap } from '@swagger-api/apidom-core'; import { mediaTypes } from '@swagger-api/apidom-parser-adapter-openapi-yaml-3-1'; import { fileURLToPath } from 'node:url'; @@ -205,7 +205,7 @@ describe('parsers', function () { const parser = new OpenAPIYAML3_1Parser({ sourceMap: true }); const parseResult = await parser.parse(file); - assert.isTrue(isSourceMapElement(parseResult.api?.meta.get('sourceMap'))); + assert.isTrue(parseResult.api && hasElementSourceMap(parseResult.api)); }); }); diff --git a/packages/apidom-reference/test/parse/parsers/yaml/index.ts b/packages/apidom-reference/test/parse/parsers/yaml/index.ts index 9be125355c..cf8d7f252e 100644 --- a/packages/apidom-reference/test/parse/parsers/yaml/index.ts +++ b/packages/apidom-reference/test/parse/parsers/yaml/index.ts @@ -4,7 +4,7 @@ import { ObjectElement, NumberElement, isParseResultElement, - isSourceMapElement, + hasElementSourceMap, } from '@swagger-api/apidom-core'; import File from '../../../../src/File.ts'; @@ -132,7 +132,7 @@ describe('parsers', function () { const result = await parser.parse(file); const objElement: ObjectElement = result.get(0); - assert.isTrue(isSourceMapElement(objElement.meta.get('sourceMap'))); + assert.isTrue(hasElementSourceMap(objElement)); }); }); From 573c051757a64d041b87ee6998cf4df67e12766e Mon Sep 17 00:00:00 2001 From: Oliwia Rogala Date: Fri, 27 Jun 2025 12:04:47 +0200 Subject: [PATCH 2/5] fix: remove unused classes --- packages/apidom-ast/src/index.ts | 2 +- packages/apidom-ast/src/predicates.ts | 10 -- .../apidom-core/src/elements/SourceMap.ts | 56 ---------- packages/apidom-core/src/index.ts | 3 - packages/apidom-core/src/namespace.ts | 2 - packages/apidom-core/src/predicates/index.ts | 14 --- .../apidom-core/src/refractor/registration.ts | 3 - packages/apidom-core/src/traversal/visitor.ts | 1 - packages/apidom-core/test/predicates/index.ts | 58 ---------- .../SourceMap/__snapshots__/index.mjs.snap | 13 --- .../refractor/elements/SourceMap/index.ts | 18 ---- .../indirect/visitors/CstVisitor.ts | 101 ------------------ 12 files changed, 1 insertion(+), 280 deletions(-) delete mode 100644 packages/apidom-core/src/elements/SourceMap.ts delete mode 100644 packages/apidom-core/test/refractor/elements/SourceMap/__snapshots__/index.mjs.snap delete mode 100644 packages/apidom-core/test/refractor/elements/SourceMap/index.ts diff --git a/packages/apidom-ast/src/index.ts b/packages/apidom-ast/src/index.ts index d63a24537c..9dce0f4a46 100644 --- a/packages/apidom-ast/src/index.ts +++ b/packages/apidom-ast/src/index.ts @@ -82,7 +82,7 @@ export type { PointOptions, PositionOptions } from './Position.ts'; export { default as Error } from './Error.ts'; export type { ErrorOptions } from './Error.ts'; export { default as ParseResult } from './ParseResult.ts'; -export { isParseResult, isLiteral, isPoint, isPosition } from './predicates.ts'; +export { isParseResult, isLiteral } from './predicates.ts'; // AST traversal related exports export { BREAK, diff --git a/packages/apidom-ast/src/predicates.ts b/packages/apidom-ast/src/predicates.ts index cb194c6e6e..1c1c78420f 100644 --- a/packages/apidom-ast/src/predicates.ts +++ b/packages/apidom-ast/src/predicates.ts @@ -13,16 +13,6 @@ export const isNodeType = (type: string, node: unknown): boolean => */ export const isLiteral = (node: unknown): node is Literal => isNodeType('literal', node); -/** - * @public - */ -export const isPosition = (node: unknown): node is Position => isNodeType('position', node); - -/** - * @public - */ -export const isPoint = (node: unknown): node is Point => isNodeType('point', node); - /** * @public */ diff --git a/packages/apidom-core/src/elements/SourceMap.ts b/packages/apidom-core/src/elements/SourceMap.ts deleted file mode 100644 index 8e5ecb0f0d..0000000000 --- a/packages/apidom-core/src/elements/SourceMap.ts +++ /dev/null @@ -1,56 +0,0 @@ -import { ArrayElement, Element, Attributes, Meta } from 'minim'; - -/** - * @public - */ -export interface Position { - row: number; - column: number; - char: number; -} - -/** - * @public - */ -export interface PositionRange { - start: Position; - end: Position; -} - -/** - * @public - */ -class SourceMap extends ArrayElement { - constructor(content?: Array, meta?: Meta, attributes?: Attributes) { - super(content, meta, attributes); - this.element = 'sourceMap'; - } - - get positionStart(): Element | undefined { - return this.children.filter((item) => item.classes.contains('position')).get(0); - } - - get positionEnd(): Element | undefined { - return this.children.filter((item) => item.classes.contains('position')).get(1); - } - - set position(position: PositionRange | undefined) { - if (typeof position === 'undefined') { - return; - } - - const start = new ArrayElement([ - position.start.row, - position.start.column, - position.start.char, - ]); - const end = new ArrayElement([position.end.row, position.end.column, position.end.char]); - - start.classes.push('position'); - end.classes.push('position'); - - this.push(start).push(end); - } -} - -export default SourceMap; diff --git a/packages/apidom-core/src/index.ts b/packages/apidom-core/src/index.ts index f14c93309f..8602486957 100644 --- a/packages/apidom-core/src/index.ts +++ b/packages/apidom-core/src/index.ts @@ -13,7 +13,6 @@ export { default as MediaTypes } from './media-types.ts'; export { Element, MemberElement, KeyValuePair, ObjectSlice, ArraySlice, refract } from 'minim'; export type { NamespacePluginOptions, Attributes, Meta } from 'minim'; -export type { PositionRange, Position } from './elements/SourceMap.ts'; export { default as namespace, Namespace, createNamespace } from './namespace.ts'; export { @@ -28,7 +27,6 @@ export { AnnotationElement, CommentElement, ParseResultElement, - SourceMapElement, } from './refractor/registration.ts'; export type { default as createToolbox, Toolbox, basePredicates } from './refractor/toolbox.ts'; @@ -46,7 +44,6 @@ export { isRefElement, isAnnotationElement, isParseResultElement, - isSourceMapElement, isPrimitiveElement, hasElementSourceMap, includesSymbols, diff --git a/packages/apidom-core/src/namespace.ts b/packages/apidom-core/src/namespace.ts index c78b4bbaa7..7927e92e41 100644 --- a/packages/apidom-core/src/namespace.ts +++ b/packages/apidom-core/src/namespace.ts @@ -4,7 +4,6 @@ import { isPlainObject } from 'ramda-adjunct'; import AnnotationElement from './elements/Annotation.ts'; import CommentElement from './elements/Comment.ts'; import ParseResultElement from './elements/ParseResult.ts'; -import SourceMapElement from './elements/SourceMap.ts'; /** * @public @@ -16,7 +15,6 @@ export class Namespace extends MinimNamespace { this.register('annotation', AnnotationElement); this.register('comment', CommentElement); this.register('parseResult', ParseResultElement); - this.register('sourceMap', SourceMapElement); } } diff --git a/packages/apidom-core/src/predicates/index.ts b/packages/apidom-core/src/predicates/index.ts index 82a3678b65..77ed1c3e01 100644 --- a/packages/apidom-core/src/predicates/index.ts +++ b/packages/apidom-core/src/predicates/index.ts @@ -16,7 +16,6 @@ import { included } from 'ramda-adjunct'; import AnnotationElement from '../elements/Annotation.ts'; import CommentElement from '../elements/Comment.ts'; import ParserResultElement from '../elements/ParseResult.ts'; -import SourceMapElement from '../elements/SourceMap.ts'; import createPredicate, { isElementType as isElementTypeHelper } from './helpers.ts'; import type { ElementPredicate } from './helpers.ts'; @@ -174,19 +173,6 @@ export const isParseResultElement = createPredicate( }, ); -/** - * @public - */ -export const isSourceMapElement = createPredicate( - ({ hasBasicElementProps, isElementType, primitiveEq }) => { - return (element: unknown): element is SourceMapElement => - element instanceof SourceMapElement || - (hasBasicElementProps(element) && - isElementType('sourceMap', element) && - primitiveEq('array', element)); - }, -); - /** * @public */ diff --git a/packages/apidom-core/src/refractor/registration.ts b/packages/apidom-core/src/refractor/registration.ts index 5dd5578ec9..5f001b7d64 100644 --- a/packages/apidom-core/src/refractor/registration.ts +++ b/packages/apidom-core/src/refractor/registration.ts @@ -12,7 +12,6 @@ import { import AnnotationElement from '../elements/Annotation.ts'; import CommentElement from '../elements/Comment.ts'; import ParseResultElement from '../elements/ParseResult.ts'; -import SourceMapElement from '../elements/SourceMap.ts'; import { createRefractor } from './index.ts'; ObjectElement.refract = createRefractor(ObjectElement); @@ -27,7 +26,6 @@ RefElement.refract = createRefractor(RefElement); AnnotationElement.refract = createRefractor(AnnotationElement); CommentElement.refract = createRefractor(CommentElement); ParseResultElement.refract = createRefractor(ParseResultElement); -SourceMapElement.refract = createRefractor(SourceMapElement); export { ObjectElement, @@ -41,5 +39,4 @@ export { AnnotationElement, CommentElement, ParseResultElement, - SourceMapElement, }; diff --git a/packages/apidom-core/src/traversal/visitor.ts b/packages/apidom-core/src/traversal/visitor.ts index 45e4139697..e65b652aad 100644 --- a/packages/apidom-core/src/traversal/visitor.ts +++ b/packages/apidom-core/src/traversal/visitor.ts @@ -85,7 +85,6 @@ export const keyMapDefault = { Annotation: [], Comment: [], ParseResultElement: ['content'], - SourceMap: ['content'], }; export interface PredicateVisitorOptions { diff --git a/packages/apidom-core/test/predicates/index.ts b/packages/apidom-core/test/predicates/index.ts index 1f492c5589..c3dfe281d9 100644 --- a/packages/apidom-core/test/predicates/index.ts +++ b/packages/apidom-core/test/predicates/index.ts @@ -13,7 +13,6 @@ import { RefElement, ParseResultElement, AnnotationElement, - SourceMapElement, isElement, isStringElement, isNumberElement, @@ -26,7 +25,6 @@ import { isRefElement, isParseResultElement, isAnnotationElement, - isSourceMapElement, hasElementSourceMap, includesSymbols, includesClasses, @@ -779,62 +777,6 @@ describe('predicates', function () { }); }); - context('isSourceMapElement', function () { - context('given SourceMapElement instance value', function () { - specify('should return true', function () { - const element = new SourceMapElement(); - - assert.isTrue(isSourceMapElement(element)); - }); - }); - - context('given subtype instance value', function () { - specify('should return true', function () { - class SourceMapSubElement extends SourceMapElement {} - - assert.isTrue(isSourceMapElement(new SourceMapSubElement())); - }); - }); - - context('given non SourceMapSubElement instance value', function () { - specify('should return false', function () { - assert.isFalse(isSourceMapElement(1)); - assert.isFalse(isSourceMapElement(null)); - assert.isFalse(isSourceMapElement(undefined)); - assert.isFalse(isSourceMapElement({})); - assert.isFalse(isSourceMapElement([])); - assert.isFalse(isSourceMapElement('string')); - - assert.isFalse(isSourceMapElement(new StringElement())); - assert.isFalse(isSourceMapElement(new BooleanElement())); - }); - }); - - specify('should support duck-typing', function () { - const sourceMapElementDuck = { - _storedElement: 'sourceMap', - _content: [], - primitive() { - return 'array'; - }, - get element() { - return this._storedElement; - }, - }; - - const sourceMapElementSwan = { - _storedElement: 'sourceMap', - _content: [], - primitive() { - return undefined; - }, - }; - - assert.isTrue(isSourceMapElement(sourceMapElementDuck)); - assert.isFalse(isSourceMapElement(sourceMapElementSwan)); - }); - }); - context('hasSourceMapElement', function () { context('given element has sourcemap', function () { specify('should return true', function () { diff --git a/packages/apidom-core/test/refractor/elements/SourceMap/__snapshots__/index.mjs.snap b/packages/apidom-core/test/refractor/elements/SourceMap/__snapshots__/index.mjs.snap deleted file mode 100644 index c1c9719099..0000000000 --- a/packages/apidom-core/test/refractor/elements/SourceMap/__snapshots__/index.mjs.snap +++ /dev/null @@ -1,13 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`refractor elements Annotation should refract to generic ApiDOM tree 1`] = ` -(SourceMapElement - (ArrayElement - (NumberElement) - (NumberElement) - (NumberElement)) - (ArrayElement - (NumberElement) - (NumberElement) - (NumberElement))) -`; diff --git a/packages/apidom-core/test/refractor/elements/SourceMap/index.ts b/packages/apidom-core/test/refractor/elements/SourceMap/index.ts deleted file mode 100644 index 280edac715..0000000000 --- a/packages/apidom-core/test/refractor/elements/SourceMap/index.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { expect } from 'chai'; - -import { SourceMapElement, sexprs } from '../../../../src/index.ts'; - -describe('refractor', function () { - context('elements', function () { - context('Annotation', function () { - specify('should refract to generic ApiDOM tree', function () { - const arrayElement = SourceMapElement.refract([ - [0, 1, 2], - [0, 1, 2], - ]); - - expect(sexprs(arrayElement)).toMatchSnapshot(); - }); - }); - }); -}); diff --git a/packages/apidom-parser-adapter-yaml-1-2/src/syntactic-analysis/indirect/visitors/CstVisitor.ts b/packages/apidom-parser-adapter-yaml-1-2/src/syntactic-analysis/indirect/visitors/CstVisitor.ts index 85e7263b5f..19ce368481 100644 --- a/packages/apidom-parser-adapter-yaml-1-2/src/syntactic-analysis/indirect/visitors/CstVisitor.ts +++ b/packages/apidom-parser-adapter-yaml-1-2/src/syntactic-analysis/indirect/visitors/CstVisitor.ts @@ -3,8 +3,6 @@ import { isNode as isCSTNode, Literal, ParseResult, - Point, - Position, YamlNode, YamlAlias, YamlAnchor, @@ -54,27 +52,6 @@ class CstVisitor { node.type.endsWith(ending); } - // private static toPosition(node: TreeCursorSyntaxNode): Position { - // // return undefined; - - // const start = new Point({ - // row: node.startPosition.row, - // column: node.startPosition.column, - // char: node.startIndex, - // }); - // const end = new Point({ - // row: node.endPosition.row, - // column: node.endPosition.column, - // char: node.endIndex, - // }); - - // return new Position({ start, end }); - - // // return `${node.startPosition},${node.endPosition}`; - - // // return `${node.startPositionRow},${node.startPositionColumn},${node.startIndex},${node.endPositionRow},${node.endPositionColumn},${node.endIndex}`; - // } - private static kindNodeToYamlAnchor(node: TreeCursorSyntaxNode): YamlAnchor | undefined { const { anchor: anchorNode } = node; @@ -82,7 +59,6 @@ class CstVisitor { return new YamlAnchor({ name: anchorNode.text, - // position: CstVisitor.toPosition(anchorNode), startPositionRow: anchorNode.startPositionRow, startPositionColumn: anchorNode.startPositionColumn, startIndex: anchorNode.startIndex, @@ -116,12 +92,10 @@ class CstVisitor { : node.type.endsWith('sequence') ? YamlNodeKind.Sequence : YamlNodeKind.Scalar; - // const position = tagNode ? CstVisitor.toPosition(tagNode) : undefined; return new YamlTag({ explicitName, kind, - // position, startPositionRow: tagNode?.startPositionRow, startPositionColumn: tagNode?.startPositionColumn, startIndex: tagNode?.startIndex, @@ -138,11 +112,8 @@ class CstVisitor { public readonly stream = { enter: (node: TreeCursorSyntaxNode): YamlStream => { - // const position = CstVisitor.toPosition(node); - return new YamlStream({ children: node.children, - // position, startPositionRow: node.startPositionRow, startPositionColumn: node.startPositionColumn, startIndex: node.startIndex, @@ -159,11 +130,9 @@ class CstVisitor { public readonly yaml_directive = { enter: (node: TreeCursorSyntaxNode): YamlDirective => { - // const position = CstVisitor.toPosition(node); const version = node?.firstNamedChild?.text; return new YamlDirective({ - // position, startPositionRow: node.startPositionRow, startPositionColumn: node.startPositionColumn, startIndex: node.startIndex, @@ -180,11 +149,9 @@ class CstVisitor { public readonly tag_directive = { enter: (node: TreeCursorSyntaxNode): YamlDirective => { - // const position = CstVisitor.toPosition(node); const tagHandleNode = node.children[0]; const tagPrefixNode = node.children[1]; const tagDirective = new YamlDirective({ - // position, startPositionRow: node.startPositionRow, startPositionColumn: node.startPositionColumn, startIndex: node.startIndex, @@ -206,13 +173,11 @@ class CstVisitor { public readonly reserved_directive = { enter: (node: TreeCursorSyntaxNode): YamlDirective => { - // const position = CstVisitor.toPosition(node); const directiveNameNode = node.children[0]; const directiveParameter1Node = node.children[1]; const directiveParameter2Node = node.children[2]; return new YamlDirective({ - // position, startPositionRow: node.startPositionRow, startPositionColumn: node.startPositionColumn, startIndex: node.startIndex, @@ -230,11 +195,8 @@ class CstVisitor { public readonly document = { enter: (node: TreeCursorSyntaxNode): YamlDocument => { - // const position = CstVisitor.toPosition(node); - return new YamlDocument({ children: node.children, - // position, startPositionRow: node.startPositionRow, startPositionColumn: node.startPositionColumn, startIndex: node.startIndex, @@ -268,19 +230,10 @@ class CstVisitor { return node.children; } // // kind node not present in flow node, creating empty node - // const emptyPoint = new Point({ - // row: kindCandidate.endPosition.row, - // column: kindCandidate.endPosition.column, - // char: kindCandidate.endIndex, - // }); const emptyScalarNode = new YamlScalar({ content: '', anchor: CstVisitor.kindNodeToYamlAnchor(kindCandidate), tag: CstVisitor.kindNodeToYamlTag(kindCandidate), - // position: new Position({ start: emptyPoint, end: emptyPoint }), - // position: `${kindCandidate.endPosition},${kindCandidate.endPosition}`, - // position: `${kindCandidate.endPositionRow},${kindCandidate.endPositionColumn},${kindCandidate.endIndex},${kindCandidate.endPositionRow},${kindCandidate.endPositionColumn},${kindCandidate.endIndex}`, - // position: undefined, startPositionRow: kindCandidate.endPositionRow, startPositionColumn: kindCandidate.endPositionColumn, startIndex: kindCandidate.endIndex, @@ -311,12 +264,10 @@ class CstVisitor { public readonly block_mapping = { enter: (node: TreeCursorSyntaxNode) => { - // const position = CstVisitor.toPosition(node); const tag = CstVisitor.kindNodeToYamlTag(node); const anchor = CstVisitor.kindNodeToYamlAnchor(node); const mappingNode = new YamlMapping({ children: node.children, - // position, startPositionRow: node.startPositionRow, startPositionColumn: node.startPositionColumn, startIndex: node.startIndex, @@ -338,7 +289,6 @@ class CstVisitor { public readonly block_mapping_pair = { enter: (node: TreeCursorSyntaxNode): YamlKeyValuePair => { - // const position = CstVisitor.toPosition(node); const children: Array = [...node.children]; if (CstVisitor.hasKeyValuePairEmptyKey(node)) { @@ -352,7 +302,6 @@ class CstVisitor { return new YamlKeyValuePair({ children, - // position, startPositionRow: node.startPositionRow, startPositionColumn: node.startPositionColumn, startIndex: node.startIndex, @@ -367,12 +316,10 @@ class CstVisitor { public readonly flow_mapping = { enter: (node: TreeCursorSyntaxNode) => { - // const position = CstVisitor.toPosition(node); const tag = CstVisitor.kindNodeToYamlTag(node); const anchor = CstVisitor.kindNodeToYamlAnchor(node); const mappingNode = new YamlMapping({ children: node.children, - // position, startPositionRow: node.startPositionRow, startPositionColumn: node.startPositionColumn, startIndex: node.startIndex, @@ -394,7 +341,6 @@ class CstVisitor { public readonly flow_pair = { enter: (node: TreeCursorSyntaxNode): YamlKeyValuePair => { - // const position = CstVisitor.toPosition(node); const children: Array = [...node.children]; if (CstVisitor.hasKeyValuePairEmptyKey(node)) { @@ -429,12 +375,10 @@ class CstVisitor { public readonly block_sequence = { enter: (node: TreeCursorSyntaxNode) => { - // const position = CstVisitor.toPosition(node); const tag = CstVisitor.kindNodeToYamlTag(node); const anchor = CstVisitor.kindNodeToYamlAnchor(node); const sequenceNode = new YamlSequence({ children: node.children, - // position, startPositionRow: node.startPositionRow, startPositionColumn: node.startPositionColumn, startIndex: node.startIndex, @@ -461,21 +405,12 @@ class CstVisitor { } // create empty node - // const emptyPoint = new Point({ - // row: node.endPosition.row, - // column: node.endPosition.column, - // char: node.endIndex, - // }); const emptyScalarNode = new YamlScalar({ content: '', tag: new YamlTag({ explicitName: '?', kind: YamlNodeKind.Scalar, }), - // position: undefined, - // position: new Position({ start: emptyPoint, end: emptyPoint }), - // position: `${node.endPosition},${node.endPosition}`, - // position: `${node.endPositionRow},${node.endPositionColumn},${node.endIndex},${node.endPositionRow},${node.endPositionColumn},${node.endIndex}`, startPositionRow: node.endPositionRow, startPositionColumn: node.endPositionColumn, startIndex: node.endIndex, @@ -492,12 +427,10 @@ class CstVisitor { public readonly flow_sequence = { enter: (node: TreeCursorSyntaxNode) => { - // const position = CstVisitor.toPosition(node); const tag = CstVisitor.kindNodeToYamlTag(node); const anchor = CstVisitor.kindNodeToYamlAnchor(node); const sequenceNode = new YamlSequence({ children: node.children.flat(), - // position, startPositionRow: node.startPositionRow, startPositionColumn: node.startPositionColumn, startIndex: node.startIndex, @@ -524,14 +457,12 @@ class CstVisitor { public readonly plain_scalar = { enter: (node: TreeCursorSyntaxNode) => { - // const position = CstVisitor.toPosition(node); const tag = CstVisitor.kindNodeToYamlTag(node); const anchor = CstVisitor.kindNodeToYamlAnchor(node); const scalarNode = new YamlScalar({ content: node.text, anchor, tag, - // position, startPositionRow: node.startPositionRow, startPositionColumn: node.startPositionColumn, startIndex: node.startIndex, @@ -550,14 +481,12 @@ class CstVisitor { public readonly single_quote_scalar = { enter: (node: TreeCursorSyntaxNode) => { - // const position = CstVisitor.toPosition(node); const tag = CstVisitor.kindNodeToYamlTag(node); const anchor = CstVisitor.kindNodeToYamlAnchor(node); const scalarNode = new YamlScalar({ content: node.text, anchor, tag, - // position, startPositionRow: node.startPositionRow, startPositionColumn: node.startPositionColumn, startIndex: node.startIndex, @@ -576,14 +505,12 @@ class CstVisitor { public readonly double_quote_scalar = { enter: (node: TreeCursorSyntaxNode) => { - // const position = CstVisitor.toPosition(node); const tag = CstVisitor.kindNodeToYamlTag(node); const anchor = CstVisitor.kindNodeToYamlAnchor(node); const scalarNode = new YamlScalar({ content: node.text, anchor, tag, - // position, startPositionRow: node.startPositionRow, startPositionColumn: node.startPositionColumn, startIndex: node.startIndex, @@ -602,7 +529,6 @@ class CstVisitor { public readonly block_scalar = { enter: (node: TreeCursorSyntaxNode) => { - // const position = CstVisitor.toPosition(node); const tag = CstVisitor.kindNodeToYamlTag(node); const anchor = CstVisitor.kindNodeToYamlAnchor(node); const style = node.text.startsWith('|') @@ -614,7 +540,6 @@ class CstVisitor { content: node.text, anchor, tag, - // position, startPositionRow: node.startPositionRow, startPositionColumn: node.startPositionColumn, startIndex: node.startIndex, @@ -654,13 +579,11 @@ class CstVisitor { public enter(node: TreeCursorSyntaxNode): Literal | undefined { // missing anonymous literals from CST transformed into AST literal nodes if (node instanceof TreeCursorSyntaxNode && !node.isNamed) { - // const position = CstVisitor.toPosition(node); const value = node.type || node.text; const { isMissing } = node; return new Literal({ value, - // position, isMissing, startPositionRow: node.startPositionRow, startPositionColumn: node.startPositionColumn, @@ -681,10 +604,8 @@ class CstVisitor { parent: unknown, path: string[], ): Error | ParseResult { - // const position = CstVisitor.toPosition(node); const errorNode = new Error({ children: node.children, - // position, startPositionRow: node.startPositionRow, startPositionColumn: node.startPositionColumn, startIndex: node.startIndex, @@ -710,11 +631,6 @@ class CstVisitor { } private createKeyValuePairEmptyKey(node: TreeCursorSyntaxNode): YamlScalar { - // const emptyPoint = new Point({ - // row: node.startPosition.row, - // column: node.startPosition.column, - // char: node.startIndex, - // }); const { keyNode } = node; const children = keyNode?.children || []; const tagNode = children.find(CstVisitor.isKind('tag')); @@ -724,7 +640,6 @@ class CstVisitor { ? new YamlTag({ explicitName: tagNode.text, kind: YamlNodeKind.Scalar, - // position: CstVisitor.toPosition(tagNode), startPositionRow: tagNode.startPositionRow, startPositionColumn: tagNode.startPositionColumn, startIndex: tagNode.startIndex, @@ -740,7 +655,6 @@ class CstVisitor { typeof anchorNode !== 'undefined' ? new YamlAnchor({ name: anchorNode.text, - // position: CstVisitor.toPosition(anchorNode), startPositionRow: anchorNode.startPositionRow, startPositionColumn: anchorNode.startPositionColumn, startIndex: anchorNode.startIndex, @@ -751,10 +665,6 @@ class CstVisitor { : undefined; const scalarNode = new YamlScalar({ content: '', - // position: new Position({ start: emptyPoint, end: emptyPoint }), - // position: undefined, - // position: `${node.startPosition},${node.startPosition}`, - // position: `${node.startPositionRow},${node.startPositionColumn},${node.startIndex},${node.startPositionRow},${node.startPositionColumn},${node.startIndex}`, startPositionRow: node.startPositionRow, startPositionColumn: node.startPositionColumn, startIndex: node.startIndex, @@ -773,11 +683,6 @@ class CstVisitor { } private createKeyValuePairEmptyValue(node: TreeCursorSyntaxNode): YamlScalar { - // const emptyPoint = new Point({ - // row: node.endPosition.row, - // column: node.endPosition.column, - // char: node.endIndex, - // }); const { valueNode } = node; const children = valueNode?.children || []; const tagNode = children.find(CstVisitor.isKind('tag')); @@ -787,7 +692,6 @@ class CstVisitor { ? new YamlTag({ explicitName: tagNode.text, kind: YamlNodeKind.Scalar, - // position: CstVisitor.toPosition(tagNode), startPositionRow: tagNode.startPositionRow, startPositionColumn: tagNode.startPositionColumn, startIndex: tagNode.startIndex, @@ -803,7 +707,6 @@ class CstVisitor { typeof anchorNode !== 'undefined' ? new YamlAnchor({ name: anchorNode.text, - // position: CstVisitor.toPosition(anchorNode), startPositionRow: anchorNode.startPositionRow, startPositionColumn: anchorNode.startPositionColumn, startIndex: anchorNode.startIndex, @@ -814,10 +717,6 @@ class CstVisitor { : undefined; const scalarNode = new YamlScalar({ content: '', - // position: undefined, - // position: new Position({ start: emptyPoint, end: emptyPoint }), - // position: `${node.endPosition},${node.endPosition}`, - // position: `${node.endPositionRow},${node.endPositionColumn},${node.endIndex},${node.endPositionRow},${node.endPositionColumn},${node.endIndex}`, startPositionRow: node.endPositionRow, startPositionColumn: node.endPositionColumn, startIndex: node.endIndex, From 666cb5298196f772f8f59bf8b7b1eb5cfbb7c6c8 Mon Sep 17 00:00:00 2001 From: Oliwia Rogala Date: Fri, 27 Jun 2025 12:04:59 +0200 Subject: [PATCH 3/5] fix: remove unused imports --- packages/apidom-ast/src/predicates.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/apidom-ast/src/predicates.ts b/packages/apidom-ast/src/predicates.ts index 1c1c78420f..ae5ad42ca3 100644 --- a/packages/apidom-ast/src/predicates.ts +++ b/packages/apidom-ast/src/predicates.ts @@ -1,5 +1,4 @@ import type Literal from './Literal.ts'; -import Position, { Point } from './Position.ts'; import ParseResult from './ParseResult.ts'; /** From 541a0ac7ae6d6d445e38b71fd539c736e0a4cc39 Mon Sep 17 00:00:00 2001 From: Oliwia Rogala Date: Mon, 30 Jun 2025 10:05:36 +0200 Subject: [PATCH 4/5] fix: apply code review changes --- .../openapi-3-1-to-openapi-3-0-3/toolbox.ts | 23 +- packages/apidom-core/src/clone/index.ts | 8 +- packages/apidom-core/src/index.ts | 2 +- packages/apidom-core/src/predicates/index.ts | 16 +- .../apidom-core/src/traversal/findAtOffset.ts | 7 +- packages/apidom-core/src/util.ts | 29 + .../src/refractor/visitors/Visitor.ts | 15 +- .../plugins/replace-empty-element.ts | 10 +- .../src/refractor/visitors/Visitor.ts | 15 +- .../plugins/replace-empty-element.ts | 10 +- .../src/refractor/visitors/Visitor.ts | 15 +- .../plugins/replace-empty-element.ts | 10 +- .../plugins/replace-empty-element.ts | 10 +- .../plugins/replace-empty-element.ts | 10 +- .../src/refractor/visitors/Visitor.ts | 15 +- .../plugins/replace-empty-element.ts | 10 +- .../plugins/replace-empty-element.ts | 10 +- .../plugins/replace-empty-element.ts | 10 +- .../src/refractor/visitors/Visitor.ts | 15 +- .../plugins/replace-empty-element.ts | 10 +- .../src/refractor/visitors/Visitor.ts | 15 +- .../plugins/replace-empty-element.ts | 10 +- .../direct/visitors/CstVisitor.ts | 8 +- .../indirect/visitors/CstVisitor.ts | 182 ++----- .../indirect/visitors/JsonAstVisitor.ts | 8 +- .../indirect/visitors/CstVisitor.ts | 510 +++++++++--------- .../indirect/visitors/YamlAstVisitor.ts | 17 +- 27 files changed, 439 insertions(+), 561 deletions(-) diff --git a/packages/apidom-converter/src/strategies/openapi-3-1-to-openapi-3-0-3/toolbox.ts b/packages/apidom-converter/src/strategies/openapi-3-1-to-openapi-3-0-3/toolbox.ts index 0426db3880..30ad9bbd96 100644 --- a/packages/apidom-converter/src/strategies/openapi-3-1-to-openapi-3-0-3/toolbox.ts +++ b/packages/apidom-converter/src/strategies/openapi-3-1-to-openapi-3-0-3/toolbox.ts @@ -1,27 +1,20 @@ -import { Element, Meta, Attributes, AnnotationElement } from '@swagger-api/apidom-core'; +import { + Element, + Meta, + Attributes, + AnnotationElement, + assignSourceMap, +} from '@swagger-api/apidom-core'; import { createToolbox as createToolboxOpenAPI31 } from '@swagger-api/apidom-ns-openapi-3-1'; const createToolbox = () => { const openAPI31Toolbox = createToolboxOpenAPI31(); - /* eslint-disable class-methods-use-this, no-param-reassign */ const copySourceMap = (from: T, to: U): void => { if (openAPI31Toolbox.predicates.hasElementSourceMap(from)) { - // @ts-ignore - to.startPositionRow = from.startPositionRow; - // @ts-ignore - to.startPositionColumn = from.startPositionColumn; - // @ts-ignore - to.startIndex = from.startIndex; - // @ts-ignore - to.endPositionRow = from.endPositionRow; - // @ts-ignore - to.endPositionColumn = from.endPositionColumn; - // @ts-ignore - to.endIndex = from.endIndex; + assignSourceMap(to, from); } }; - /* eslint-enable no-param-reassign */ const createAnnotation = (content?: string, meta?: Meta, attributes?: Attributes) => { return new AnnotationElement(content, meta, attributes); diff --git a/packages/apidom-core/src/clone/index.ts b/packages/apidom-core/src/clone/index.ts index 21ba4ab67d..82caadb9fc 100644 --- a/packages/apidom-core/src/clone/index.ts +++ b/packages/apidom-core/src/clone/index.ts @@ -3,6 +3,7 @@ import { ArraySlice, ObjectSlice, KeyValuePair, Element } from 'minim'; import { hasElementSourceMap, isElement } from '../predicates/index.ts'; import DeepCloneError from './errors/DeepCloneError.ts'; import ShallowCloneError from './errors/ShallowCloneError.ts'; +import { assignSourceMap } from '../util.ts'; /** * @public @@ -124,12 +125,7 @@ const cloneShallowElement = (element: T): T => { copy.element = element.element; if (hasElementSourceMap(element)) { - copy.startPositionRow = element.startPositionRow; - copy.startPositionColumn = element.startPositionColumn; - copy.startIndex = element.startIndex; - copy.endPositionRow = element.endPositionRow; - copy.endPositionColumn = element.endPositionColumn; - copy.endIndex = element.endIndex; + assignSourceMap(copy, element); } if (element.meta.length > 0) { diff --git a/packages/apidom-core/src/index.ts b/packages/apidom-core/src/index.ts index 8602486957..52496b4e58 100644 --- a/packages/apidom-core/src/index.ts +++ b/packages/apidom-core/src/index.ts @@ -80,7 +80,7 @@ export type { Callback, TraverseOptions } from './traversal/traverse.ts'; export { transclude, default as Transcluder } from './transcluder/index.ts'; -export { dereference } from './util.ts'; +export { dereference, assignSourceMap } from './util.ts'; export { cloneShallow, cloneDeep } from './clone/index.ts'; export { default as CloneError } from './clone/errors/CloneError.ts'; diff --git a/packages/apidom-core/src/predicates/index.ts b/packages/apidom-core/src/predicates/index.ts index 77ed1c3e01..3bb7cb2a83 100644 --- a/packages/apidom-core/src/predicates/index.ts +++ b/packages/apidom-core/src/predicates/index.ts @@ -206,13 +206,17 @@ export const isPrimitiveElement: ElementPredicate = ( * @public */ export const hasElementSourceMap = (element: T): boolean => { + if (!isElement(element)) { + return false; + } + return ( - typeof element.startPositionRow === 'number' && - typeof element.startPositionColumn === 'number' && - typeof element.startIndex === 'number' && - typeof element.endPositionRow === 'number' && - typeof element.endPositionColumn === 'number' && - typeof element.endIndex === 'number' + Number.isInteger(element.startPositionRow) && + Number.isInteger(element.startPositionColumn) && + Number.isInteger(element.startIndex) && + Number.isInteger(element.endPositionRow) && + Number.isInteger(element.endPositionColumn) && + Number.isInteger(element.endIndex) ); }; diff --git a/packages/apidom-core/src/traversal/findAtOffset.ts b/packages/apidom-core/src/traversal/findAtOffset.ts index 8758b1711b..8bd5c8a118 100644 --- a/packages/apidom-core/src/traversal/findAtOffset.ts +++ b/packages/apidom-core/src/traversal/findAtOffset.ts @@ -28,11 +28,10 @@ class Visitor { return undefined; // dive in } - const charStart = element.startIndex; - const charEnd = element.endIndex; + const { startIndex, endIndex } = element; const isWithinOffsetRange = - this.offset >= charStart && - (this.offset < charEnd || (this.includeRightBound && this.offset <= charEnd)); + this.offset >= startIndex && + (this.offset < endIndex || (this.includeRightBound && this.offset <= endIndex)); if (isWithinOffsetRange) { this.result.push(element); diff --git a/packages/apidom-core/src/util.ts b/packages/apidom-core/src/util.ts index 356b007104..cc4da28755 100644 --- a/packages/apidom-core/src/util.ts +++ b/packages/apidom-core/src/util.ts @@ -26,3 +26,32 @@ export const dereference = ( return val; }, object); }; + +type SourceMapContainer = { + startPositionRow?: number; + startPositionColumn?: number; + startIndex?: number; + endPositionRow?: number; + endPositionColumn?: number; + endIndex?: number; + [key: string]: any; +}; + +/** + * @public + */ +/* eslint-disable no-param-reassign */ +export const assignSourceMap = ( + to: SourceMapContainer, + from?: SourceMapContainer, +): SourceMapContainer => { + to.startPositionRow = from?.startPositionRow; + to.startPositionColumn = from?.startPositionColumn; + to.startIndex = from?.startIndex; + to.endPositionRow = from?.endPositionRow; + to.endPositionColumn = from?.endPositionColumn; + to.endIndex = from?.endIndex; + + return to; +}; +/* eslint-enable no-param-reassign */ diff --git a/packages/apidom-ns-api-design-systems/src/refractor/visitors/Visitor.ts b/packages/apidom-ns-api-design-systems/src/refractor/visitors/Visitor.ts index 03b599ba3f..919c49aac4 100644 --- a/packages/apidom-ns-api-design-systems/src/refractor/visitors/Visitor.ts +++ b/packages/apidom-ns-api-design-systems/src/refractor/visitors/Visitor.ts @@ -1,4 +1,10 @@ -import { Element, ObjectElement, hasElementSourceMap, deepmerge } from '@swagger-api/apidom-core'; +import { + Element, + ObjectElement, + hasElementSourceMap, + deepmerge, + assignSourceMap, +} from '@swagger-api/apidom-core'; /** * @public @@ -21,12 +27,7 @@ class Visitor { to.meta = deepmerge(to.meta, from.meta) as ObjectElement; } if (hasElementSourceMap(from)) { - to.startPositionRow = from.startPositionRow; - to.startPositionColumn = from.startPositionColumn; - to.startIndex = from.startIndex; - to.endPositionRow = from.endPositionRow; - to.endPositionColumn = from.endPositionColumn; - to.endIndex = from.endIndex; + assignSourceMap(to, from); } if (from.attributes.length > 0 || from.meta.length > 0) { to.attributes = deepmerge(to.attributes, from.attributes) as ObjectElement; // eslint-disable-line no-param-reassign diff --git a/packages/apidom-ns-arazzo-1/src/refractor/plugins/replace-empty-element.ts b/packages/apidom-ns-arazzo-1/src/refractor/plugins/replace-empty-element.ts index d8ce125693..9dcaffe07a 100644 --- a/packages/apidom-ns-arazzo-1/src/refractor/plugins/replace-empty-element.ts +++ b/packages/apidom-ns-arazzo-1/src/refractor/plugins/replace-empty-element.ts @@ -7,6 +7,7 @@ import { includesClasses, cloneDeep, toValue, + assignSourceMap, } from '@swagger-api/apidom-core'; /** @@ -102,13 +103,8 @@ const plugin = () => () => ({ cloneDeep(element.meta), cloneDeep(element.attributes), ); - result.startPositionRow = element.startPositionRow; - result.startPositionColumn = element.startPositionColumn; - result.startIndex = element.startIndex; - result.endPositionRow = element.endPositionRow; - result.endPositionColumn = element.endPositionColumn; - result.endIndex = element.endIndex; - return result; + + return assignSourceMap(result, element); }, }, }); diff --git a/packages/apidom-ns-arazzo-1/src/refractor/visitors/Visitor.ts b/packages/apidom-ns-arazzo-1/src/refractor/visitors/Visitor.ts index 10f0acf34d..31375ad09a 100644 --- a/packages/apidom-ns-arazzo-1/src/refractor/visitors/Visitor.ts +++ b/packages/apidom-ns-arazzo-1/src/refractor/visitors/Visitor.ts @@ -1,4 +1,10 @@ -import { Element, ObjectElement, deepmerge, hasElementSourceMap } from '@swagger-api/apidom-core'; +import { + Element, + ObjectElement, + assignSourceMap, + deepmerge, + hasElementSourceMap, +} from '@swagger-api/apidom-core'; /** * @public @@ -21,12 +27,7 @@ class Visitor { to.meta = deepmerge(to.meta, from.meta) as ObjectElement; } if (hasElementSourceMap(from)) { - to.startPositionRow = from.startPositionRow; - to.startPositionColumn = from.startPositionColumn; - to.startIndex = from.startIndex; - to.endPositionRow = from.endPositionRow; - to.endPositionColumn = from.endPositionColumn; - to.endIndex = from.endIndex; + assignSourceMap(to, from); } if (from.attributes.length > 0 || from.meta.length > 0) { to.attributes = deepmerge(to.attributes, from.attributes) as ObjectElement; // eslint-disable-line no-param-reassign diff --git a/packages/apidom-ns-asyncapi-2/src/refractor/plugins/replace-empty-element.ts b/packages/apidom-ns-asyncapi-2/src/refractor/plugins/replace-empty-element.ts index 5969ec51d3..aca37dbab5 100644 --- a/packages/apidom-ns-asyncapi-2/src/refractor/plugins/replace-empty-element.ts +++ b/packages/apidom-ns-asyncapi-2/src/refractor/plugins/replace-empty-element.ts @@ -10,6 +10,7 @@ import { includesClasses, cloneDeep, toValue, + assignSourceMap, } from '@swagger-api/apidom-core'; import mediaTypes from '../../media-types.ts'; @@ -1067,13 +1068,8 @@ const plugin = () => () => ({ cloneDeep(element.meta), cloneDeep(element.attributes), ); - result.startPositionRow = element.startPositionRow; - result.startPositionColumn = element.startPositionColumn; - result.startIndex = element.startIndex; - result.endPositionRow = element.endPositionRow; - result.endPositionColumn = element.endPositionColumn; - result.endIndex = element.endIndex; - return result; + + return assignSourceMap(result, element); }, }, }); diff --git a/packages/apidom-ns-asyncapi-2/src/refractor/visitors/Visitor.ts b/packages/apidom-ns-asyncapi-2/src/refractor/visitors/Visitor.ts index 7c8c0fcc34..a29006b8c5 100644 --- a/packages/apidom-ns-asyncapi-2/src/refractor/visitors/Visitor.ts +++ b/packages/apidom-ns-asyncapi-2/src/refractor/visitors/Visitor.ts @@ -1,4 +1,10 @@ -import { Element, ObjectElement, deepmerge, hasElementSourceMap } from '@swagger-api/apidom-core'; +import { + Element, + ObjectElement, + assignSourceMap, + deepmerge, + hasElementSourceMap, +} from '@swagger-api/apidom-core'; /** * @public @@ -21,12 +27,7 @@ class Visitor { to.meta = deepmerge(to.meta, from.meta) as ObjectElement; } if (hasElementSourceMap(from)) { - to.startPositionRow = from.startPositionRow; - to.startPositionColumn = from.startPositionColumn; - to.startIndex = from.startIndex; - to.endPositionRow = from.endPositionRow; - to.endPositionColumn = from.endPositionColumn; - to.endIndex = from.endIndex; + assignSourceMap(to, from); } if (from.attributes.length > 0 || from.meta.length > 0) { to.attributes = deepmerge(to.attributes, from.attributes) as ObjectElement; // eslint-disable-line no-param-reassign diff --git a/packages/apidom-ns-json-schema-2019-09/src/refractor/plugins/replace-empty-element.ts b/packages/apidom-ns-json-schema-2019-09/src/refractor/plugins/replace-empty-element.ts index 3f0bd77430..4d0661498d 100644 --- a/packages/apidom-ns-json-schema-2019-09/src/refractor/plugins/replace-empty-element.ts +++ b/packages/apidom-ns-json-schema-2019-09/src/refractor/plugins/replace-empty-element.ts @@ -9,6 +9,7 @@ import { includesClasses, cloneDeep, toValue, + assignSourceMap, } from '@swagger-api/apidom-core'; /** * JSON Schema 2019-09 specification elements. @@ -271,13 +272,8 @@ const plugin = () => () => { cloneDeep(element.meta), cloneDeep(element.attributes), ); - result.startPositionRow = element.startPositionRow; - result.startPositionColumn = element.startPositionColumn; - result.startIndex = element.startIndex; - result.endPositionRow = element.endPositionRow; - result.endPositionColumn = element.endPositionColumn; - result.endIndex = element.endIndex; - return result; + + return assignSourceMap(result, element); }, }, }; diff --git a/packages/apidom-ns-json-schema-2020-12/src/refractor/plugins/replace-empty-element.ts b/packages/apidom-ns-json-schema-2020-12/src/refractor/plugins/replace-empty-element.ts index 58c62ade41..4b0c817592 100644 --- a/packages/apidom-ns-json-schema-2020-12/src/refractor/plugins/replace-empty-element.ts +++ b/packages/apidom-ns-json-schema-2020-12/src/refractor/plugins/replace-empty-element.ts @@ -9,6 +9,7 @@ import { includesClasses, cloneDeep, toValue, + assignSourceMap, } from '@swagger-api/apidom-core'; /** * JSON Schema 2020-12 specification elements. @@ -278,13 +279,8 @@ const plugin = () => () => { cloneDeep(element.meta), cloneDeep(element.attributes), ); - result.startPositionRow = element.startPositionRow; - result.startPositionColumn = element.startPositionColumn; - result.startIndex = element.startIndex; - result.endPositionRow = element.endPositionRow; - result.endPositionColumn = element.endPositionColumn; - result.endIndex = element.endIndex; - return result; + + return assignSourceMap(result, element); }, }, }; diff --git a/packages/apidom-ns-json-schema-draft-4/src/refractor/plugins/replace-empty-element.ts b/packages/apidom-ns-json-schema-draft-4/src/refractor/plugins/replace-empty-element.ts index 3818b6da0f..a1785a4869 100644 --- a/packages/apidom-ns-json-schema-draft-4/src/refractor/plugins/replace-empty-element.ts +++ b/packages/apidom-ns-json-schema-draft-4/src/refractor/plugins/replace-empty-element.ts @@ -9,6 +9,7 @@ import { includesClasses, cloneDeep, toValue, + assignSourceMap, } from '@swagger-api/apidom-core'; /** @@ -215,13 +216,8 @@ const plugin = () => () => ({ cloneDeep(element.meta), cloneDeep(element.attributes), ); - result.startPositionRow = element.startPositionRow; - result.startPositionColumn = element.startPositionColumn; - result.startIndex = element.startIndex; - result.endPositionRow = element.endPositionRow; - result.endPositionColumn = element.endPositionColumn; - result.endIndex = element.endIndex; - return result; + + return assignSourceMap(result, element); }, }, }); diff --git a/packages/apidom-ns-json-schema-draft-4/src/refractor/visitors/Visitor.ts b/packages/apidom-ns-json-schema-draft-4/src/refractor/visitors/Visitor.ts index dc5cea08b6..17fa8a0bdf 100644 --- a/packages/apidom-ns-json-schema-draft-4/src/refractor/visitors/Visitor.ts +++ b/packages/apidom-ns-json-schema-draft-4/src/refractor/visitors/Visitor.ts @@ -1,4 +1,10 @@ -import { ObjectElement, hasElementSourceMap, deepmerge, Element } from '@swagger-api/apidom-core'; +import { + ObjectElement, + hasElementSourceMap, + deepmerge, + Element, + assignSourceMap, +} from '@swagger-api/apidom-core'; /** * @public @@ -21,12 +27,7 @@ class Visitor { to.meta = deepmerge(to.meta, from.meta) as ObjectElement; } if (hasElementSourceMap(from)) { - to.startPositionRow = from.startPositionRow; - to.startPositionColumn = from.startPositionColumn; - to.startIndex = from.startIndex; - to.endPositionRow = from.endPositionRow; - to.endPositionColumn = from.endPositionColumn; - to.endIndex = from.endIndex; + assignSourceMap(to, from); } if (from.attributes.length > 0 || from.meta.length > 0) { to.attributes = deepmerge(to.attributes, from.attributes) as ObjectElement; diff --git a/packages/apidom-ns-json-schema-draft-6/src/refractor/plugins/replace-empty-element.ts b/packages/apidom-ns-json-schema-draft-6/src/refractor/plugins/replace-empty-element.ts index dc76790cb3..51ce5e3b2c 100644 --- a/packages/apidom-ns-json-schema-draft-6/src/refractor/plugins/replace-empty-element.ts +++ b/packages/apidom-ns-json-schema-draft-6/src/refractor/plugins/replace-empty-element.ts @@ -9,6 +9,7 @@ import { includesClasses, cloneDeep, toValue, + assignSourceMap, } from '@swagger-api/apidom-core'; /** * JSON Schema Draft 6 specification elements. @@ -229,13 +230,8 @@ const plugin = () => () => ({ cloneDeep(element.meta), cloneDeep(element.attributes), ); - result.startPositionRow = element.startPositionRow; - result.startPositionColumn = element.startPositionColumn; - result.startIndex = element.startIndex; - result.endPositionRow = element.endPositionRow; - result.endPositionColumn = element.endPositionColumn; - result.endIndex = element.endIndex; - return result; + + return assignSourceMap(result, element); }, }, }); diff --git a/packages/apidom-ns-json-schema-draft-7/src/refractor/plugins/replace-empty-element.ts b/packages/apidom-ns-json-schema-draft-7/src/refractor/plugins/replace-empty-element.ts index ff04958fc8..033700805f 100644 --- a/packages/apidom-ns-json-schema-draft-7/src/refractor/plugins/replace-empty-element.ts +++ b/packages/apidom-ns-json-schema-draft-7/src/refractor/plugins/replace-empty-element.ts @@ -9,6 +9,7 @@ import { includesClasses, cloneDeep, toValue, + assignSourceMap, } from '@swagger-api/apidom-core'; /** * JSON Schema Draft 7 specification elements. @@ -247,13 +248,8 @@ const plugin = () => () => { cloneDeep(element.meta), cloneDeep(element.attributes), ); - result.startPositionRow = element.startPositionRow; - result.startPositionColumn = element.startPositionColumn; - result.startIndex = element.startIndex; - result.endPositionRow = element.endPositionRow; - result.endPositionColumn = element.endPositionColumn; - result.endIndex = element.endIndex; - return result; + + return assignSourceMap(result, element); }, }, }; diff --git a/packages/apidom-ns-openapi-2/src/refractor/plugins/replace-empty-element.ts b/packages/apidom-ns-openapi-2/src/refractor/plugins/replace-empty-element.ts index 4a30fe3518..7995ed8389 100644 --- a/packages/apidom-ns-openapi-2/src/refractor/plugins/replace-empty-element.ts +++ b/packages/apidom-ns-openapi-2/src/refractor/plugins/replace-empty-element.ts @@ -9,6 +9,7 @@ import { includesClasses, cloneDeep, toValue, + assignSourceMap, } from '@swagger-api/apidom-core'; /** @@ -372,13 +373,8 @@ const plugin = () => () => ({ cloneDeep(element.meta), cloneDeep(element.attributes), ); - result.startPositionRow = element.startPositionRow; - result.startPositionColumn = element.startPositionColumn; - result.startIndex = element.startIndex; - result.endPositionRow = element.endPositionRow; - result.endPositionColumn = element.endPositionColumn; - result.endIndex = element.endIndex; - return result; + + return assignSourceMap(result, element); }, }, }); diff --git a/packages/apidom-ns-openapi-2/src/refractor/visitors/Visitor.ts b/packages/apidom-ns-openapi-2/src/refractor/visitors/Visitor.ts index 03b599ba3f..919c49aac4 100644 --- a/packages/apidom-ns-openapi-2/src/refractor/visitors/Visitor.ts +++ b/packages/apidom-ns-openapi-2/src/refractor/visitors/Visitor.ts @@ -1,4 +1,10 @@ -import { Element, ObjectElement, hasElementSourceMap, deepmerge } from '@swagger-api/apidom-core'; +import { + Element, + ObjectElement, + hasElementSourceMap, + deepmerge, + assignSourceMap, +} from '@swagger-api/apidom-core'; /** * @public @@ -21,12 +27,7 @@ class Visitor { to.meta = deepmerge(to.meta, from.meta) as ObjectElement; } if (hasElementSourceMap(from)) { - to.startPositionRow = from.startPositionRow; - to.startPositionColumn = from.startPositionColumn; - to.startIndex = from.startIndex; - to.endPositionRow = from.endPositionRow; - to.endPositionColumn = from.endPositionColumn; - to.endIndex = from.endIndex; + assignSourceMap(to, from); } if (from.attributes.length > 0 || from.meta.length > 0) { to.attributes = deepmerge(to.attributes, from.attributes) as ObjectElement; // eslint-disable-line no-param-reassign diff --git a/packages/apidom-ns-openapi-3-0/src/refractor/plugins/replace-empty-element.ts b/packages/apidom-ns-openapi-3-0/src/refractor/plugins/replace-empty-element.ts index e88e39c8f6..c96cf4f320 100644 --- a/packages/apidom-ns-openapi-3-0/src/refractor/plugins/replace-empty-element.ts +++ b/packages/apidom-ns-openapi-3-0/src/refractor/plugins/replace-empty-element.ts @@ -9,6 +9,7 @@ import { includesClasses, cloneDeep, toValue, + assignSourceMap, } from '@swagger-api/apidom-core'; /** @@ -641,13 +642,8 @@ const plugin = () => () => ({ cloneDeep(element.meta), cloneDeep(element.attributes), ); - result.startPositionRow = element.startPositionRow; - result.startPositionColumn = element.startPositionColumn; - result.startIndex = element.startIndex; - result.endPositionRow = element.endPositionRow; - result.endPositionColumn = element.endPositionColumn; - result.endIndex = element.endIndex; - return result; + + return assignSourceMap(result, element); }, }, }); diff --git a/packages/apidom-ns-openapi-3-0/src/refractor/visitors/Visitor.ts b/packages/apidom-ns-openapi-3-0/src/refractor/visitors/Visitor.ts index 10f0acf34d..31375ad09a 100644 --- a/packages/apidom-ns-openapi-3-0/src/refractor/visitors/Visitor.ts +++ b/packages/apidom-ns-openapi-3-0/src/refractor/visitors/Visitor.ts @@ -1,4 +1,10 @@ -import { Element, ObjectElement, deepmerge, hasElementSourceMap } from '@swagger-api/apidom-core'; +import { + Element, + ObjectElement, + assignSourceMap, + deepmerge, + hasElementSourceMap, +} from '@swagger-api/apidom-core'; /** * @public @@ -21,12 +27,7 @@ class Visitor { to.meta = deepmerge(to.meta, from.meta) as ObjectElement; } if (hasElementSourceMap(from)) { - to.startPositionRow = from.startPositionRow; - to.startPositionColumn = from.startPositionColumn; - to.startIndex = from.startIndex; - to.endPositionRow = from.endPositionRow; - to.endPositionColumn = from.endPositionColumn; - to.endIndex = from.endIndex; + assignSourceMap(to, from); } if (from.attributes.length > 0 || from.meta.length > 0) { to.attributes = deepmerge(to.attributes, from.attributes) as ObjectElement; // eslint-disable-line no-param-reassign diff --git a/packages/apidom-ns-openapi-3-1/src/refractor/plugins/replace-empty-element.ts b/packages/apidom-ns-openapi-3-1/src/refractor/plugins/replace-empty-element.ts index 6fcbca67e2..123de7e79d 100644 --- a/packages/apidom-ns-openapi-3-1/src/refractor/plugins/replace-empty-element.ts +++ b/packages/apidom-ns-openapi-3-1/src/refractor/plugins/replace-empty-element.ts @@ -2,6 +2,7 @@ import { ArrayElement, ObjectElement, StringElement, + assignSourceMap, cloneDeep, toValue, } from '@swagger-api/apidom-core'; @@ -709,13 +710,8 @@ const plugin = cloneDeep(element.meta), cloneDeep(element.attributes), ); - result.startPositionRow = element.startPositionRow; - result.startPositionColumn = element.startPositionColumn; - result.startIndex = element.startIndex; - result.endPositionRow = element.endPositionRow; - result.endPositionColumn = element.endPositionColumn; - result.endIndex = element.endIndex; - return result; + + return assignSourceMap(result, element); }, }, }; diff --git a/packages/apidom-parser-adapter-json/src/syntactic-analysis/direct/visitors/CstVisitor.ts b/packages/apidom-parser-adapter-json/src/syntactic-analysis/direct/visitors/CstVisitor.ts index 1e0b84eb8b..fca9274928 100644 --- a/packages/apidom-parser-adapter-json/src/syntactic-analysis/direct/visitors/CstVisitor.ts +++ b/packages/apidom-parser-adapter-json/src/syntactic-analysis/direct/visitors/CstVisitor.ts @@ -10,6 +10,7 @@ import { StringElement, AnnotationElement, isPrimitiveElement, + assignSourceMap, } from '@swagger-api/apidom-core'; import TreeCursorSyntaxNode from '../../TreeCursorSyntaxNode.ts'; @@ -173,12 +174,7 @@ class CstVisitor { return; } - element.startPositionRow = node.startPositionRow; - element.startPositionColumn = node.startPositionColumn; - element.startIndex = node.startIndex; - element.endPositionRow = node.endPositionRow; - element.endPositionColumn = node.endPositionColumn; - element.endIndex = node.endIndex; + assignSourceMap(element, node); } /* eslint-enable no-param-reassign */ } diff --git a/packages/apidom-parser-adapter-json/src/syntactic-analysis/indirect/visitors/CstVisitor.ts b/packages/apidom-parser-adapter-json/src/syntactic-analysis/indirect/visitors/CstVisitor.ts index 18a797e496..3d98c9a8dc 100644 --- a/packages/apidom-parser-adapter-json/src/syntactic-analysis/indirect/visitors/CstVisitor.ts +++ b/packages/apidom-parser-adapter-json/src/syntactic-analysis/indirect/visitors/CstVisitor.ts @@ -14,6 +14,8 @@ import { Literal, Error, } from '@swagger-api/apidom-ast'; +import type { JsonValueOptions } from '@swagger-api/apidom-ast'; +import { assignSourceMap } from '@swagger-api/apidom-core'; import TreeCursorSyntaxNode from '../../TreeCursorSyntaxNode.ts'; @@ -32,16 +34,9 @@ export const keyMap = { class CstVisitor { public readonly document = { enter: (node: TreeCursorSyntaxNode): JsonDocument => { - return new JsonDocument({ - children: node.children, - startPositionRow: node.startPositionRow, - startPositionColumn: node.startPositionColumn, - startIndex: node.startIndex, - endPositionRow: node.endPositionRow, - endPositionColumn: node.endPositionColumn, - endIndex: node.endIndex, - isMissing: node.isMissing, - }); + return new JsonDocument( + assignSourceMap({ children: node.children, isMissing: node.isMissing }, node), + ); }, leave: (document: JsonDocument): ParseResult => { return new ParseResult({ children: [document] }); @@ -54,150 +49,88 @@ class CstVisitor { const value = node.type || node.text; const { isMissing } = node; - return new Literal({ - value, - startPositionRow: node.startPositionRow, - startPositionColumn: node.startPositionColumn, - startIndex: node.startIndex, - endPositionRow: node.endPositionRow, - endPositionColumn: node.endPositionColumn, - endIndex: node.endIndex, - isMissing, - }); + return new Literal(assignSourceMap({ value, isMissing }, node)); } return undefined; } public object(node: TreeCursorSyntaxNode): JsonObject { - return new JsonObject({ - children: node.children, - // position, - startPositionRow: node.startPositionRow, - startPositionColumn: node.startPositionColumn, - startIndex: node.startIndex, - endPositionRow: node.endPositionRow, - endPositionColumn: node.endPositionColumn, - endIndex: node.endIndex, - isMissing: node.isMissing, - }); + return new JsonObject( + assignSourceMap({ children: node.children, isMissing: node.isMissing }, node), + ); } public pair(node: TreeCursorSyntaxNode): JsonProperty { const children = node.children.slice(1); const { keyNode } = node; - const key = new JsonKey({ - children: keyNode?.children || [], - startPositionRow: keyNode?.startPositionRow, - startPositionColumn: keyNode?.startPositionColumn, - startIndex: keyNode?.startIndex, - endPositionRow: keyNode?.endPositionRow, - endPositionColumn: keyNode?.endPositionColumn, - endIndex: keyNode?.endIndex, - isMissing: keyNode != null ? keyNode.isMissing : false, - }); - - return new JsonProperty({ - children: [key, ...children], - startPositionRow: node.startPositionRow, - startPositionColumn: node.startPositionColumn, - startIndex: node.startIndex, - endPositionRow: node.endPositionRow, - endPositionColumn: node.endPositionColumn, - endIndex: node.endIndex, - isMissing: node.isMissing, - }); + const key = new JsonKey( + assignSourceMap( + { + children: keyNode?.children || [], + isMissing: keyNode != null ? keyNode.isMissing : false, + }, + keyNode, + ), + ); + + return new JsonProperty( + assignSourceMap( + { + children: [key, ...children], + isMissing: node.isMissing, + }, + node, + ), + ); } public array(node: TreeCursorSyntaxNode): JsonArray { - return new JsonArray({ - children: node.children, - startPositionRow: node.startPositionRow, - startPositionColumn: node.startPositionColumn, - startIndex: node.startIndex, - endPositionRow: node.endPositionRow, - endPositionColumn: node.endPositionColumn, - endIndex: node.endIndex, - isMissing: node.isMissing, - }); + return new JsonArray( + assignSourceMap({ children: node.children, isMissing: node.isMissing }, node), + ); } public string(node: TreeCursorSyntaxNode): JsonString { const content = new JsonStringContent({ value: JSON.parse(node.text) }); - return new JsonString({ - children: [content], - startPositionRow: node.startPositionRow, - startPositionColumn: node.startPositionColumn, - startIndex: node.startIndex, - endPositionRow: node.endPositionRow, - endPositionColumn: node.endPositionColumn, - endIndex: node.endIndex, - isMissing: node.isMissing, - }); + return new JsonString( + assignSourceMap({ children: [content], isMissing: node.isMissing }, node), + ); } public number(node: TreeCursorSyntaxNode): JsonNumber { const value = node.text; - - return new JsonNumber({ - value, - startPositionRow: node.startPositionRow, - startPositionColumn: node.startPositionColumn, - startIndex: node.startIndex, - endPositionRow: node.endPositionRow, - endPositionColumn: node.endPositionColumn, - endIndex: node.endIndex, - isMissing: node.isMissing, - }); + return new JsonNumber( + assignSourceMap({ value, isMissing: node.isMissing }, node) as JsonValueOptions, + ); } // eslint-disable-next-line @typescript-eslint/naming-convention public null(node: TreeCursorSyntaxNode): JsonNull { const value = node.text; - return new JsonNull({ - value, - startPositionRow: node.startPositionRow, - startPositionColumn: node.startPositionColumn, - startIndex: node.startIndex, - endPositionRow: node.endPositionRow, - endPositionColumn: node.endPositionColumn, - endIndex: node.endIndex, - isMissing: node.isMissing, - }); + return new JsonNull( + assignSourceMap({ value, isMissing: node.isMissing }, node) as JsonValueOptions, + ); } // eslint-disable-next-line @typescript-eslint/naming-convention public true(node: TreeCursorSyntaxNode): JsonTrue { const value = node.text; - return new JsonTrue({ - value, - startPositionRow: node.startPositionRow, - startPositionColumn: node.startPositionColumn, - startIndex: node.startIndex, - endPositionRow: node.endPositionRow, - endPositionColumn: node.endPositionColumn, - endIndex: node.endIndex, - isMissing: node.isMissing, - }); + return new JsonTrue( + assignSourceMap({ value, isMissing: node.isMissing }, node) as JsonValueOptions, + ); } // eslint-disable-next-line @typescript-eslint/naming-convention public false(node: TreeCursorSyntaxNode): JsonFalse { const value = node.text; - return new JsonFalse({ - value, - startPositionRow: node.startPositionRow, - startPositionColumn: node.startPositionColumn, - startIndex: node.startIndex, - endPositionRow: node.endPositionRow, - endPositionColumn: node.endPositionColumn, - endIndex: node.endIndex, - isMissing: node.isMissing, - }); + return new JsonFalse( + assignSourceMap({ value, isMissing: node.isMissing }, node) as JsonValueOptions, + ); } public ERROR( @@ -206,18 +139,17 @@ class CstVisitor { parent: unknown, path: string[], ): ParseResult | Error { - const errorNode = new Error({ - children: node.children, - startPositionRow: node.startPositionRow, - startPositionColumn: node.startPositionColumn, - startIndex: node.startIndex, - endPositionRow: node.endPositionRow, - endPositionColumn: node.endPositionColumn, - endIndex: node.endIndex, - isUnexpected: !node.hasError, - isMissing: node.isMissing, - value: node.text, - }); + const errorNode = new Error( + assignSourceMap( + { + children: node.children, + isUnexpected: !node.hasError, + isMissing: node.isMissing, + value: node.text, + }, + node, + ), + ); if (path.length === 0) { return new ParseResult({ children: [errorNode] }); diff --git a/packages/apidom-parser-adapter-json/src/syntactic-analysis/indirect/visitors/JsonAstVisitor.ts b/packages/apidom-parser-adapter-json/src/syntactic-analysis/indirect/visitors/JsonAstVisitor.ts index 8b9525c32f..c660375d16 100644 --- a/packages/apidom-parser-adapter-json/src/syntactic-analysis/indirect/visitors/JsonAstVisitor.ts +++ b/packages/apidom-parser-adapter-json/src/syntactic-analysis/indirect/visitors/JsonAstVisitor.ts @@ -32,6 +32,7 @@ import { isElement, keyMap as keyMapApiDOM, getNodeType as getNodeTypeApiDOM, + assignSourceMap, } from '@swagger-api/apidom-core'; export const keyMap = { @@ -223,12 +224,7 @@ class JsonAstVisitor { return; } - element.startPositionRow = node.startPositionRow; - element.startPositionColumn = node.startPositionColumn; - element.startIndex = node.startIndex; - element.endPositionRow = node.endPositionRow; - element.endPositionColumn = node.endPositionColumn; - element.endIndex = node.endIndex; + assignSourceMap(element, node); } /* eslint-enable no-param-reassign */ } diff --git a/packages/apidom-parser-adapter-yaml-1-2/src/syntactic-analysis/indirect/visitors/CstVisitor.ts b/packages/apidom-parser-adapter-yaml-1-2/src/syntactic-analysis/indirect/visitors/CstVisitor.ts index 19ce368481..e78e6575b4 100644 --- a/packages/apidom-parser-adapter-yaml-1-2/src/syntactic-analysis/indirect/visitors/CstVisitor.ts +++ b/packages/apidom-parser-adapter-yaml-1-2/src/syntactic-analysis/indirect/visitors/CstVisitor.ts @@ -20,6 +20,15 @@ import { YamlStyleGroup, YamlTag, } from '@swagger-api/apidom-ast'; +import type { + YamlAnchorOptions, + YamlDirectiveOptions, + YamlKeyValuePairOptions, + YamlNodeOptions, + YamlScalarOptions, + YamlTagOptions, +} from '@swagger-api/apidom-ast'; +import { assignSourceMap } from '@swagger-api/apidom-core'; import TreeCursorSyntaxNode from '../../TreeCursorSyntaxNode.ts'; @@ -56,16 +65,14 @@ class CstVisitor { const { anchor: anchorNode } = node; if (typeof anchorNode === 'undefined') return undefined; - - return new YamlAnchor({ - name: anchorNode.text, - startPositionRow: anchorNode.startPositionRow, - startPositionColumn: anchorNode.startPositionColumn, - startIndex: anchorNode.startIndex, - endPositionRow: anchorNode.endPositionRow, - endPositionColumn: anchorNode.endPositionColumn, - endIndex: anchorNode.endIndex, - }); + return new YamlAnchor( + assignSourceMap( + { + name: anchorNode.text, + }, + anchorNode, + ) as YamlAnchorOptions, + ); } private static hasKeyValuePairEmptyKey(node: TreeCursorSyntaxNode): boolean { @@ -93,16 +100,7 @@ class CstVisitor { ? YamlNodeKind.Sequence : YamlNodeKind.Scalar; - return new YamlTag({ - explicitName, - kind, - startPositionRow: tagNode?.startPositionRow, - startPositionColumn: tagNode?.startPositionColumn, - startIndex: tagNode?.startIndex, - endPositionRow: tagNode?.endPositionRow, - endPositionColumn: tagNode?.endPositionColumn, - endIndex: tagNode?.endIndex, - }); + return new YamlTag(assignSourceMap({ explicitName, kind }, tagNode) as YamlTagOptions); } // eslint-disable-next-line @typescript-eslint/no-explicit-any @@ -112,16 +110,15 @@ class CstVisitor { public readonly stream = { enter: (node: TreeCursorSyntaxNode): YamlStream => { - return new YamlStream({ - children: node.children, - startPositionRow: node.startPositionRow, - startPositionColumn: node.startPositionColumn, - startIndex: node.startIndex, - endPositionRow: node.endPositionRow, - endPositionColumn: node.endPositionColumn, - endIndex: node.endIndex, - isMissing: node.isMissing, - }); + return new YamlStream( + assignSourceMap( + { + children: node.children, + isMissing: node.isMissing, + }, + node, + ), + ); }, leave: (stream: YamlStream): ParseResult => { return new ParseResult({ children: [stream] }); @@ -132,18 +129,17 @@ class CstVisitor { enter: (node: TreeCursorSyntaxNode): YamlDirective => { const version = node?.firstNamedChild?.text; - return new YamlDirective({ - startPositionRow: node.startPositionRow, - startPositionColumn: node.startPositionColumn, - startIndex: node.startIndex, - endPositionRow: node.endPositionRow, - endPositionColumn: node.endPositionColumn, - endIndex: node.endIndex, - name: '%YAML', - parameters: { - version, - }, - }); + return new YamlDirective( + assignSourceMap( + { + name: '%YAML', + parameters: { + version, + }, + }, + node, + ) as YamlDirectiveOptions, + ); }, }; @@ -151,19 +147,18 @@ class CstVisitor { enter: (node: TreeCursorSyntaxNode): YamlDirective => { const tagHandleNode = node.children[0]; const tagPrefixNode = node.children[1]; - const tagDirective = new YamlDirective({ - startPositionRow: node.startPositionRow, - startPositionColumn: node.startPositionColumn, - startIndex: node.startIndex, - endPositionRow: node.endPositionRow, - endPositionColumn: node.endPositionColumn, - endIndex: node.endIndex, - name: '%TAG', - parameters: { - handle: tagHandleNode?.text, - prefix: tagPrefixNode?.text, - }, - }); + const tagDirective = new YamlDirective( + assignSourceMap( + { + name: '%TAG', + parameters: { + handle: tagHandleNode?.text, + prefix: tagPrefixNode?.text, + }, + }, + node, + ) as YamlDirectiveOptions, + ); this.schema.registerTagDirective(tagDirective); @@ -177,34 +172,32 @@ class CstVisitor { const directiveParameter1Node = node.children[1]; const directiveParameter2Node = node.children[2]; - return new YamlDirective({ - startPositionRow: node.startPositionRow, - startPositionColumn: node.startPositionColumn, - startIndex: node.startIndex, - endPositionRow: node.endPositionRow, - endPositionColumn: node.endPositionColumn, - endIndex: node.endIndex, - name: directiveNameNode?.text, - parameters: { - handle: directiveParameter1Node?.text, - prefix: directiveParameter2Node?.text, - }, - }); + return new YamlDirective( + assignSourceMap( + { + name: directiveNameNode?.text, + parameters: { + handle: directiveParameter1Node?.text, + prefix: directiveParameter2Node?.text, + }, + }, + node, + ) as YamlDirectiveOptions, + ); }, }; public readonly document = { enter: (node: TreeCursorSyntaxNode): YamlDocument => { - return new YamlDocument({ - children: node.children, - startPositionRow: node.startPositionRow, - startPositionColumn: node.startPositionColumn, - startIndex: node.startIndex, - endPositionRow: node.endPositionRow, - endPositionColumn: node.endPositionColumn, - endIndex: node.endIndex, - isMissing: node.isMissing, - }); + return new YamlDocument( + assignSourceMap( + { + children: node.children, + isMissing: node.isMissing, + }, + node, + ), + ); }, leave: (node: YamlDocument): void => { node.children = node.children.flat(); @@ -266,20 +259,19 @@ class CstVisitor { enter: (node: TreeCursorSyntaxNode) => { const tag = CstVisitor.kindNodeToYamlTag(node); const anchor = CstVisitor.kindNodeToYamlAnchor(node); - const mappingNode = new YamlMapping({ - children: node.children, - startPositionRow: node.startPositionRow, - startPositionColumn: node.startPositionColumn, - startIndex: node.startIndex, - endPositionRow: node.endPositionRow, - endPositionColumn: node.endPositionColumn, - endIndex: node.endIndex, - anchor, - tag, - styleGroup: YamlStyleGroup.Block, - style: YamlStyle.NextLine, - isMissing: node.isMissing, - }); + const mappingNode = new YamlMapping( + assignSourceMap( + { + children: node.children, + anchor, + tag, + styleGroup: YamlStyleGroup.Block, + style: YamlStyle.NextLine, + isMissing: node.isMissing, + }, + node, + ) as YamlNodeOptions, + ); this.registerAnchor(mappingNode); @@ -300,17 +292,16 @@ class CstVisitor { children.push(valueNode); } - return new YamlKeyValuePair({ - children, - startPositionRow: node.startPositionRow, - startPositionColumn: node.startPositionColumn, - startIndex: node.startIndex, - endPositionRow: node.endPositionRow, - endPositionColumn: node.endPositionColumn, - endIndex: node.endIndex, - styleGroup: YamlStyleGroup.Block, - isMissing: node.isMissing, - }); + return new YamlKeyValuePair( + assignSourceMap( + { + children, + styleGroup: YamlStyleGroup.Block, + isMissing: node.isMissing, + }, + node, + ) as YamlKeyValuePairOptions, + ); }, }; @@ -318,20 +309,19 @@ class CstVisitor { enter: (node: TreeCursorSyntaxNode) => { const tag = CstVisitor.kindNodeToYamlTag(node); const anchor = CstVisitor.kindNodeToYamlAnchor(node); - const mappingNode = new YamlMapping({ - children: node.children, - startPositionRow: node.startPositionRow, - startPositionColumn: node.startPositionColumn, - startIndex: node.startIndex, - endPositionRow: node.endPositionRow, - endPositionColumn: node.endPositionColumn, - endIndex: node.endIndex, - anchor, - tag, - styleGroup: YamlStyleGroup.Flow, - style: YamlStyle.Explicit, - isMissing: node.isMissing, - }); + const mappingNode = new YamlMapping( + assignSourceMap( + { + children: node.children, + anchor, + tag, + styleGroup: YamlStyleGroup.Flow, + style: YamlStyle.Explicit, + isMissing: node.isMissing, + }, + node, + ) as YamlNodeOptions, + ); this.registerAnchor(mappingNode); @@ -352,18 +342,16 @@ class CstVisitor { children.push(valueNode); } - return new YamlKeyValuePair({ - children, - // position, - startPositionRow: node.startPositionRow, - startPositionColumn: node.startPositionColumn, - startIndex: node.startIndex, - endPositionRow: node.endPositionRow, - endPositionColumn: node.endPositionColumn, - endIndex: node.endIndex, - styleGroup: YamlStyleGroup.Flow, - isMissing: node.isMissing, - }); + return new YamlKeyValuePair( + assignSourceMap( + { + children, + styleGroup: YamlStyleGroup.Flow, + isMissing: node.isMissing, + }, + node, + ) as YamlKeyValuePairOptions, + ); }, }; @@ -377,19 +365,18 @@ class CstVisitor { enter: (node: TreeCursorSyntaxNode) => { const tag = CstVisitor.kindNodeToYamlTag(node); const anchor = CstVisitor.kindNodeToYamlAnchor(node); - const sequenceNode = new YamlSequence({ - children: node.children, - startPositionRow: node.startPositionRow, - startPositionColumn: node.startPositionColumn, - startIndex: node.startIndex, - endPositionRow: node.endPositionRow, - endPositionColumn: node.endPositionColumn, - endIndex: node.endIndex, - anchor, - tag, - styleGroup: YamlStyleGroup.Block, - style: YamlStyle.NextLine, - }); + const sequenceNode = new YamlSequence( + assignSourceMap( + { + children: node.children, + anchor, + tag, + styleGroup: YamlStyleGroup.Block, + style: YamlStyle.NextLine, + }, + node, + ) as YamlNodeOptions, + ); this.registerAnchor(sequenceNode); @@ -429,19 +416,18 @@ class CstVisitor { enter: (node: TreeCursorSyntaxNode) => { const tag = CstVisitor.kindNodeToYamlTag(node); const anchor = CstVisitor.kindNodeToYamlAnchor(node); - const sequenceNode = new YamlSequence({ - children: node.children.flat(), - startPositionRow: node.startPositionRow, - startPositionColumn: node.startPositionColumn, - startIndex: node.startIndex, - endPositionRow: node.endPositionRow, - endPositionColumn: node.endPositionColumn, - endIndex: node.endIndex, - anchor, - tag, - styleGroup: YamlStyleGroup.Flow, - style: YamlStyle.Explicit, - }); + const sequenceNode = new YamlSequence( + assignSourceMap( + { + children: node.children.flat(), + anchor, + tag, + styleGroup: YamlStyleGroup.Flow, + style: YamlStyle.Explicit, + }, + node, + ) as YamlNodeOptions, + ); this.registerAnchor(sequenceNode); @@ -459,19 +445,18 @@ class CstVisitor { enter: (node: TreeCursorSyntaxNode) => { const tag = CstVisitor.kindNodeToYamlTag(node); const anchor = CstVisitor.kindNodeToYamlAnchor(node); - const scalarNode = new YamlScalar({ - content: node.text, - anchor, - tag, - startPositionRow: node.startPositionRow, - startPositionColumn: node.startPositionColumn, - startIndex: node.startIndex, - endPositionRow: node.endPositionRow, - endPositionColumn: node.endPositionColumn, - endIndex: node.endIndex, - styleGroup: YamlStyleGroup.Flow, - style: YamlStyle.Plain, - }); + const scalarNode = new YamlScalar( + assignSourceMap( + { + content: node.text, + anchor, + tag, + styleGroup: YamlStyleGroup.Flow, + style: YamlStyle.Plain, + }, + node, + ) as YamlScalarOptions, + ); this.registerAnchor(scalarNode); @@ -483,19 +468,18 @@ class CstVisitor { enter: (node: TreeCursorSyntaxNode) => { const tag = CstVisitor.kindNodeToYamlTag(node); const anchor = CstVisitor.kindNodeToYamlAnchor(node); - const scalarNode = new YamlScalar({ - content: node.text, - anchor, - tag, - startPositionRow: node.startPositionRow, - startPositionColumn: node.startPositionColumn, - startIndex: node.startIndex, - endPositionRow: node.endPositionRow, - endPositionColumn: node.endPositionColumn, - endIndex: node.endIndex, - styleGroup: YamlStyleGroup.Flow, - style: YamlStyle.SingleQuoted, - }); + const scalarNode = new YamlScalar( + assignSourceMap( + { + content: node.text, + anchor, + tag, + styleGroup: YamlStyleGroup.Flow, + style: YamlStyle.SingleQuoted, + }, + node, + ) as YamlScalarOptions, + ); this.registerAnchor(scalarNode); @@ -507,19 +491,18 @@ class CstVisitor { enter: (node: TreeCursorSyntaxNode) => { const tag = CstVisitor.kindNodeToYamlTag(node); const anchor = CstVisitor.kindNodeToYamlAnchor(node); - const scalarNode = new YamlScalar({ - content: node.text, - anchor, - tag, - startPositionRow: node.startPositionRow, - startPositionColumn: node.startPositionColumn, - startIndex: node.startIndex, - endPositionRow: node.endPositionRow, - endPositionColumn: node.endPositionColumn, - endIndex: node.endIndex, - styleGroup: YamlStyleGroup.Flow, - style: YamlStyle.DoubleQuoted, - }); + const scalarNode = new YamlScalar( + assignSourceMap( + { + content: node.text, + anchor, + tag, + styleGroup: YamlStyleGroup.Flow, + style: YamlStyle.DoubleQuoted, + }, + node, + ) as YamlScalarOptions, + ); this.registerAnchor(scalarNode); @@ -536,19 +519,18 @@ class CstVisitor { : node.text.startsWith('>') ? YamlStyle.Folded : YamlStyle.Plain; - const scalarNode = new YamlScalar({ - content: node.text, - anchor, - tag, - startPositionRow: node.startPositionRow, - startPositionColumn: node.startPositionColumn, - startIndex: node.startIndex, - endPositionRow: node.endPositionRow, - endPositionColumn: node.endPositionColumn, - endIndex: node.endIndex, - styleGroup: YamlStyleGroup.Block, - style, - }); + const scalarNode = new YamlScalar( + assignSourceMap( + { + content: node.text, + anchor, + tag, + styleGroup: YamlStyleGroup.Block, + style, + }, + node, + ) as YamlScalarOptions, + ); this.registerAnchor(scalarNode); @@ -582,16 +564,15 @@ class CstVisitor { const value = node.type || node.text; const { isMissing } = node; - return new Literal({ - value, - isMissing, - startPositionRow: node.startPositionRow, - startPositionColumn: node.startPositionColumn, - startIndex: node.startIndex, - endPositionRow: node.endPositionRow, - endPositionColumn: node.endPositionColumn, - endIndex: node.endIndex, - }); + return new Literal( + assignSourceMap( + { + value, + isMissing, + }, + node, + ), + ); } return undefined; @@ -604,18 +585,17 @@ class CstVisitor { parent: unknown, path: string[], ): Error | ParseResult { - const errorNode = new Error({ - children: node.children, - startPositionRow: node.startPositionRow, - startPositionColumn: node.startPositionColumn, - startIndex: node.startIndex, - endPositionRow: node.endPositionRow, - endPositionColumn: node.endPositionColumn, - endIndex: node.endIndex, - isUnexpected: !node.hasError, - isMissing: node.isMissing, - value: node.text, - }); + const errorNode = new Error( + assignSourceMap( + { + children: node.children, + isUnexpected: !node.hasError, + isMissing: node.isMissing, + value: node.text, + }, + node, + ), + ); if (path.length === 0) { return new ParseResult({ children: [errorNode] }); @@ -637,31 +617,29 @@ class CstVisitor { const anchorNode = children.find(CstVisitor.isKind('anchor')); const tag = typeof tagNode !== 'undefined' - ? new YamlTag({ - explicitName: tagNode.text, - kind: YamlNodeKind.Scalar, - startPositionRow: tagNode.startPositionRow, - startPositionColumn: tagNode.startPositionColumn, - startIndex: tagNode.startIndex, - endPositionRow: tagNode.endPositionRow, - endPositionColumn: tagNode.endPositionColumn, - endIndex: tagNode.endIndex, - }) + ? new YamlTag( + assignSourceMap( + { + explicitName: tagNode.text, + kind: YamlNodeKind.Scalar, + }, + tagNode, + ) as YamlTagOptions, + ) : new YamlTag({ explicitName: '?', kind: YamlNodeKind.Scalar, }); const anchor = typeof anchorNode !== 'undefined' - ? new YamlAnchor({ - name: anchorNode.text, - startPositionRow: anchorNode.startPositionRow, - startPositionColumn: anchorNode.startPositionColumn, - startIndex: anchorNode.startIndex, - endPositionRow: anchorNode.endPositionRow, - endPositionColumn: anchorNode.endPositionColumn, - endIndex: anchorNode.endIndex, - }) + ? new YamlAnchor( + assignSourceMap( + { + name: anchorNode.text, + }, + anchorNode, + ) as YamlAnchorOptions, + ) : undefined; const scalarNode = new YamlScalar({ content: '', @@ -689,31 +667,29 @@ class CstVisitor { const anchorNode = children.find(CstVisitor.isKind('anchor')); const tag = typeof tagNode !== 'undefined' - ? new YamlTag({ - explicitName: tagNode.text, - kind: YamlNodeKind.Scalar, - startPositionRow: tagNode.startPositionRow, - startPositionColumn: tagNode.startPositionColumn, - startIndex: tagNode.startIndex, - endPositionRow: tagNode.endPositionRow, - endPositionColumn: tagNode.endPositionColumn, - endIndex: tagNode.endIndex, - }) + ? new YamlTag( + assignSourceMap( + { + explicitName: tagNode.text, + kind: YamlNodeKind.Scalar, + }, + tagNode, + ) as YamlTagOptions, + ) : new YamlTag({ explicitName: '?', kind: YamlNodeKind.Scalar, }); const anchor = typeof anchorNode !== 'undefined' - ? new YamlAnchor({ - name: anchorNode.text, - startPositionRow: anchorNode.startPositionRow, - startPositionColumn: anchorNode.startPositionColumn, - startIndex: anchorNode.startIndex, - endPositionRow: anchorNode.endPositionRow, - endPositionColumn: anchorNode.endPositionColumn, - endIndex: anchorNode.endIndex, - }) + ? new YamlAnchor( + assignSourceMap( + { + name: anchorNode.text, + }, + anchorNode, + ) as YamlAnchorOptions, + ) : undefined; const scalarNode = new YamlScalar({ content: '', diff --git a/packages/apidom-parser-adapter-yaml-1-2/src/syntactic-analysis/indirect/visitors/YamlAstVisitor.ts b/packages/apidom-parser-adapter-yaml-1-2/src/syntactic-analysis/indirect/visitors/YamlAstVisitor.ts index 222467c63e..50812c97ab 100644 --- a/packages/apidom-parser-adapter-yaml-1-2/src/syntactic-analysis/indirect/visitors/YamlAstVisitor.ts +++ b/packages/apidom-parser-adapter-yaml-1-2/src/syntactic-analysis/indirect/visitors/YamlAstVisitor.ts @@ -11,6 +11,7 @@ import { isNode as isCSTNode, YamlScalar, YamlStyle, + Node, } from '@swagger-api/apidom-ast'; import { ParseResultElement, @@ -26,6 +27,7 @@ import { getNodeType as getNodeTypeApiDOM, Namespace, createNamespace, + assignSourceMap, } from '@swagger-api/apidom-core'; export const keyMap = { @@ -212,23 +214,12 @@ class YamlAstVisitor { } /* eslint-disable no-param-reassign */ - private maybeAddSourceMap(node: unknown, element: Element): void { + private maybeAddSourceMap(node: Node, element: Element): void { if (!this.sourceMap) { return; } - // @ts-ignore - element.startPositionRow = node.startPositionRow; - // @ts-ignore - element.startPositionColumn = node.startPositionColumn; - // @ts-ignore - element.startIndex = node.startIndex; - // @ts-ignore - element.endPositionRow = node.endPositionRow; - // @ts-ignore - element.endPositionColumn = node.endPositionColumn; - // @ts-ignore - element.endIndex = node.endIndex; + assignSourceMap(element, node); } /* eslint-enable no-param-reassign */ } From f8cd09b1d792b87019ae518d494959f8ff31f6dd Mon Sep 17 00:00:00 2001 From: Oliwia Rogala Date: Mon, 30 Jun 2025 10:33:52 +0200 Subject: [PATCH 5/5] fix: amend types and eslint ignores --- packages/apidom-core/src/predicates/index.ts | 2 +- .../src/refractor/visitors/Visitor.ts | 1 + .../src/syntactic-analysis/direct/visitors/CstVisitor.ts | 2 -- .../syntactic-analysis/indirect/visitors/JsonAstVisitor.ts | 2 -- .../src/syntactic-analysis/indirect/visitors/CstVisitor.ts | 2 +- .../syntactic-analysis/indirect/visitors/YamlAstVisitor.ts | 4 +--- .../test/parse/parsers/api-design-systems-json/index.ts | 2 +- .../test/parse/parsers/api-design-systems-yaml/index.ts | 2 +- .../test/parse/parsers/arazzo-json-1/index.ts | 2 +- .../test/parse/parsers/arazzo-yaml-1/index.ts | 2 +- .../test/parse/parsers/asyncapi-json-2/index.ts | 2 +- .../test/parse/parsers/asyncapi-yaml-2/index.ts | 2 +- .../test/parse/parsers/openapi-json-2/index.ts | 2 +- .../test/parse/parsers/openapi-json-3-0/index.ts | 2 +- .../test/parse/parsers/openapi-json-3-1/index.ts | 2 +- .../test/parse/parsers/openapi-yaml-2/index.ts | 2 +- .../test/parse/parsers/openapi-yaml-3-0/index.ts | 2 +- .../test/parse/parsers/openapi-yaml-3-1/index.ts | 2 +- 18 files changed, 16 insertions(+), 21 deletions(-) diff --git a/packages/apidom-core/src/predicates/index.ts b/packages/apidom-core/src/predicates/index.ts index 3bb7cb2a83..f122411b92 100644 --- a/packages/apidom-core/src/predicates/index.ts +++ b/packages/apidom-core/src/predicates/index.ts @@ -205,7 +205,7 @@ export const isPrimitiveElement: ElementPredicate = ( /** * @public */ -export const hasElementSourceMap = (element: T): boolean => { +export const hasElementSourceMap = (element?: T): boolean => { if (!isElement(element)) { return false; } diff --git a/packages/apidom-ns-json-schema-draft-4/src/refractor/visitors/Visitor.ts b/packages/apidom-ns-json-schema-draft-4/src/refractor/visitors/Visitor.ts index 17fa8a0bdf..2656eedb2d 100644 --- a/packages/apidom-ns-json-schema-draft-4/src/refractor/visitors/Visitor.ts +++ b/packages/apidom-ns-json-schema-draft-4/src/refractor/visitors/Visitor.ts @@ -33,6 +33,7 @@ class Visitor { to.attributes = deepmerge(to.attributes, from.attributes) as ObjectElement; } } + /* eslint-enable class-methods-use-this, no-param-reassign */ } export default Visitor; diff --git a/packages/apidom-parser-adapter-json/src/syntactic-analysis/direct/visitors/CstVisitor.ts b/packages/apidom-parser-adapter-json/src/syntactic-analysis/direct/visitors/CstVisitor.ts index fca9274928..e6c5c9c96a 100644 --- a/packages/apidom-parser-adapter-json/src/syntactic-analysis/direct/visitors/CstVisitor.ts +++ b/packages/apidom-parser-adapter-json/src/syntactic-analysis/direct/visitors/CstVisitor.ts @@ -168,7 +168,6 @@ class CstVisitor { return null; } - /* eslint-disable no-param-reassign */ private maybeAddSourceMap(node: TreeCursorSyntaxNode, element: Element): void { if (!this.sourceMap) { return; @@ -176,7 +175,6 @@ class CstVisitor { assignSourceMap(element, node); } - /* eslint-enable no-param-reassign */ } /* eslint-enable no-underscore-dangle */ diff --git a/packages/apidom-parser-adapter-json/src/syntactic-analysis/indirect/visitors/JsonAstVisitor.ts b/packages/apidom-parser-adapter-json/src/syntactic-analysis/indirect/visitors/JsonAstVisitor.ts index c660375d16..07998ff6c9 100644 --- a/packages/apidom-parser-adapter-json/src/syntactic-analysis/indirect/visitors/JsonAstVisitor.ts +++ b/packages/apidom-parser-adapter-json/src/syntactic-analysis/indirect/visitors/JsonAstVisitor.ts @@ -218,7 +218,6 @@ class JsonAstVisitor { return null; } - /* eslint-disable no-param-reassign */ private maybeAddSourceMap(node: JsonNode, element: Element): void { if (!this.sourceMap) { return; @@ -226,7 +225,6 @@ class JsonAstVisitor { assignSourceMap(element, node); } - /* eslint-enable no-param-reassign */ } export default JsonAstVisitor; diff --git a/packages/apidom-parser-adapter-yaml-1-2/src/syntactic-analysis/indirect/visitors/CstVisitor.ts b/packages/apidom-parser-adapter-yaml-1-2/src/syntactic-analysis/indirect/visitors/CstVisitor.ts index e78e6575b4..6205bd695c 100644 --- a/packages/apidom-parser-adapter-yaml-1-2/src/syntactic-analysis/indirect/visitors/CstVisitor.ts +++ b/packages/apidom-parser-adapter-yaml-1-2/src/syntactic-analysis/indirect/visitors/CstVisitor.ts @@ -222,7 +222,7 @@ class CstVisitor { ) { return node.children; } - // // kind node not present in flow node, creating empty node + // kind node not present in flow node, creating empty node const emptyScalarNode = new YamlScalar({ content: '', anchor: CstVisitor.kindNodeToYamlAnchor(kindCandidate), diff --git a/packages/apidom-parser-adapter-yaml-1-2/src/syntactic-analysis/indirect/visitors/YamlAstVisitor.ts b/packages/apidom-parser-adapter-yaml-1-2/src/syntactic-analysis/indirect/visitors/YamlAstVisitor.ts index 50812c97ab..59dd2270e3 100644 --- a/packages/apidom-parser-adapter-yaml-1-2/src/syntactic-analysis/indirect/visitors/YamlAstVisitor.ts +++ b/packages/apidom-parser-adapter-yaml-1-2/src/syntactic-analysis/indirect/visitors/YamlAstVisitor.ts @@ -213,15 +213,13 @@ class YamlAstVisitor { return null; } - /* eslint-disable no-param-reassign */ - private maybeAddSourceMap(node: Node, element: Element): void { + private maybeAddSourceMap(node: T, element: Element): void { if (!this.sourceMap) { return; } assignSourceMap(element, node); } - /* eslint-enable no-param-reassign */ } export default YamlAstVisitor; diff --git a/packages/apidom-reference/test/parse/parsers/api-design-systems-json/index.ts b/packages/apidom-reference/test/parse/parsers/api-design-systems-json/index.ts index 3bff3a6053..110ac02a8b 100644 --- a/packages/apidom-reference/test/parse/parsers/api-design-systems-json/index.ts +++ b/packages/apidom-reference/test/parse/parsers/api-design-systems-json/index.ts @@ -176,7 +176,7 @@ describe('parsers', function () { const parser = new APIDesignSystemsJSONParser({ sourceMap: true }); const parseResult = await parser.parse(file); - assert.isTrue(parseResult.result && hasElementSourceMap(parseResult.result)); + assert.isTrue(hasElementSourceMap(parseResult.result)); }); }); diff --git a/packages/apidom-reference/test/parse/parsers/api-design-systems-yaml/index.ts b/packages/apidom-reference/test/parse/parsers/api-design-systems-yaml/index.ts index f70f4b986b..a50f23ef0b 100644 --- a/packages/apidom-reference/test/parse/parsers/api-design-systems-yaml/index.ts +++ b/packages/apidom-reference/test/parse/parsers/api-design-systems-yaml/index.ts @@ -197,7 +197,7 @@ describe('parsers', function () { const parser = new APIDesignSystemsYAMLParser({ sourceMap: true }); const parseResult = await parser.parse(file); - assert.isTrue(parseResult.result && hasElementSourceMap(parseResult.result)); + assert.isTrue(hasElementSourceMap(parseResult.result)); }); }); diff --git a/packages/apidom-reference/test/parse/parsers/arazzo-json-1/index.ts b/packages/apidom-reference/test/parse/parsers/arazzo-json-1/index.ts index fb449ed0e4..646a37419f 100644 --- a/packages/apidom-reference/test/parse/parsers/arazzo-json-1/index.ts +++ b/packages/apidom-reference/test/parse/parsers/arazzo-json-1/index.ts @@ -174,7 +174,7 @@ describe('parsers', function () { const parser = new ArazzoJSON1Parser({ sourceMap: true }); const parseResult = await parser.parse(file); - assert.isTrue(parseResult.api && hasElementSourceMap(parseResult.api)); + assert.isTrue(hasElementSourceMap(parseResult.api)); }); }); diff --git a/packages/apidom-reference/test/parse/parsers/arazzo-yaml-1/index.ts b/packages/apidom-reference/test/parse/parsers/arazzo-yaml-1/index.ts index 2cdaecfbdb..e7e4d8d9ff 100644 --- a/packages/apidom-reference/test/parse/parsers/arazzo-yaml-1/index.ts +++ b/packages/apidom-reference/test/parse/parsers/arazzo-yaml-1/index.ts @@ -205,7 +205,7 @@ describe('parsers', function () { const parser = new ArazzoYAML1Parser({ sourceMap: true }); const parseResult = await parser.parse(file); - assert.isTrue(parseResult.api && hasElementSourceMap(parseResult.api)); + assert.isTrue(hasElementSourceMap(parseResult.api)); }); }); diff --git a/packages/apidom-reference/test/parse/parsers/asyncapi-json-2/index.ts b/packages/apidom-reference/test/parse/parsers/asyncapi-json-2/index.ts index 4dfb02e518..a64ab15045 100644 --- a/packages/apidom-reference/test/parse/parsers/asyncapi-json-2/index.ts +++ b/packages/apidom-reference/test/parse/parsers/asyncapi-json-2/index.ts @@ -174,7 +174,7 @@ describe('parsers', function () { const parser = new AsyncAPIJSON2Parser({ sourceMap: true }); const parseResult = await parser.parse(file); - assert.isTrue(parseResult.api && hasElementSourceMap(parseResult.api)); + assert.isTrue(hasElementSourceMap(parseResult.api)); }); }); diff --git a/packages/apidom-reference/test/parse/parsers/asyncapi-yaml-2/index.ts b/packages/apidom-reference/test/parse/parsers/asyncapi-yaml-2/index.ts index a654e4c2e6..90dfa67c22 100644 --- a/packages/apidom-reference/test/parse/parsers/asyncapi-yaml-2/index.ts +++ b/packages/apidom-reference/test/parse/parsers/asyncapi-yaml-2/index.ts @@ -197,7 +197,7 @@ describe('parsers', function () { const parser = new AsyncAPIYAML2Parser({ sourceMap: true }); const parseResult = await parser.parse(file); - assert.isTrue(parseResult.api && hasElementSourceMap(parseResult.api)); + assert.isTrue(hasElementSourceMap(parseResult.api)); }); }); diff --git a/packages/apidom-reference/test/parse/parsers/openapi-json-2/index.ts b/packages/apidom-reference/test/parse/parsers/openapi-json-2/index.ts index ae8bd99db9..972a46e213 100644 --- a/packages/apidom-reference/test/parse/parsers/openapi-json-2/index.ts +++ b/packages/apidom-reference/test/parse/parsers/openapi-json-2/index.ts @@ -174,7 +174,7 @@ describe('parsers', function () { const parser = new OpenAPIJSON2Parser({ sourceMap: true }); const parseResult = await parser.parse(file); - assert.isTrue(parseResult.api && hasElementSourceMap(parseResult.api)); + assert.isTrue(hasElementSourceMap(parseResult.api)); }); }); diff --git a/packages/apidom-reference/test/parse/parsers/openapi-json-3-0/index.ts b/packages/apidom-reference/test/parse/parsers/openapi-json-3-0/index.ts index fe86424c46..c2234d9648 100644 --- a/packages/apidom-reference/test/parse/parsers/openapi-json-3-0/index.ts +++ b/packages/apidom-reference/test/parse/parsers/openapi-json-3-0/index.ts @@ -174,7 +174,7 @@ describe('parsers', function () { const parser = new OpenAPIJSON3_0Parser({ sourceMap: true }); const parseResult = await parser.parse(file); - assert.isTrue(parseResult.api && hasElementSourceMap(parseResult.api)); + assert.isTrue(hasElementSourceMap(parseResult.api)); }); }); diff --git a/packages/apidom-reference/test/parse/parsers/openapi-json-3-1/index.ts b/packages/apidom-reference/test/parse/parsers/openapi-json-3-1/index.ts index 4bb890a729..6930464340 100644 --- a/packages/apidom-reference/test/parse/parsers/openapi-json-3-1/index.ts +++ b/packages/apidom-reference/test/parse/parsers/openapi-json-3-1/index.ts @@ -174,7 +174,7 @@ describe('parsers', function () { const parser = new OpenAPIJSON3_1Parser({ sourceMap: true }); const parseResult = await parser.parse(file); - assert.isTrue(parseResult.api && hasElementSourceMap(parseResult.api)); + assert.isTrue(hasElementSourceMap(parseResult.api)); }); }); diff --git a/packages/apidom-reference/test/parse/parsers/openapi-yaml-2/index.ts b/packages/apidom-reference/test/parse/parsers/openapi-yaml-2/index.ts index 72eaf97c41..2ec35864af 100644 --- a/packages/apidom-reference/test/parse/parsers/openapi-yaml-2/index.ts +++ b/packages/apidom-reference/test/parse/parsers/openapi-yaml-2/index.ts @@ -205,7 +205,7 @@ describe('parsers', function () { const parser = new OpenAPIYAML2Parser({ sourceMap: true }); const parseResult = await parser.parse(file); - assert.isTrue(parseResult.api && hasElementSourceMap(parseResult.api)); + assert.isTrue(hasElementSourceMap(parseResult.api)); }); }); diff --git a/packages/apidom-reference/test/parse/parsers/openapi-yaml-3-0/index.ts b/packages/apidom-reference/test/parse/parsers/openapi-yaml-3-0/index.ts index 06909b1261..51e7098377 100644 --- a/packages/apidom-reference/test/parse/parsers/openapi-yaml-3-0/index.ts +++ b/packages/apidom-reference/test/parse/parsers/openapi-yaml-3-0/index.ts @@ -205,7 +205,7 @@ describe('parsers', function () { const parser = new OpenAPIYAML3_0Parser({ sourceMap: true }); const parseResult = await parser.parse(file); - assert.isTrue(parseResult.api && hasElementSourceMap(parseResult.api)); + assert.isTrue(hasElementSourceMap(parseResult.api)); }); }); diff --git a/packages/apidom-reference/test/parse/parsers/openapi-yaml-3-1/index.ts b/packages/apidom-reference/test/parse/parsers/openapi-yaml-3-1/index.ts index 913b437fb1..89d9ec41e5 100644 --- a/packages/apidom-reference/test/parse/parsers/openapi-yaml-3-1/index.ts +++ b/packages/apidom-reference/test/parse/parsers/openapi-yaml-3-1/index.ts @@ -205,7 +205,7 @@ describe('parsers', function () { const parser = new OpenAPIYAML3_1Parser({ sourceMap: true }); const parseResult = await parser.parse(file); - assert.isTrue(parseResult.api && hasElementSourceMap(parseResult.api)); + assert.isTrue(hasElementSourceMap(parseResult.api)); }); });