🚨 Active Supply Chain Attack:node-ipc Package Compromised.Learn More
Socket
Book a DemoSign in
Socket

@codama/validators

Package Overview
Dependencies
Maintainers
1
Versions
33
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@codama/validators - npm Package Compare versions

Comparing version
1.4.3
to
1.4.4
+25
-48
dist/index.browser.cjs

@@ -1,34 +0,8 @@

"use strict";
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
'use strict';
// src/index.ts
var index_exports = {};
__export(index_exports, {
LOG_LEVELS: () => LOG_LEVELS,
getLevelIndex: () => getLevelIndex,
getValidationItemsVisitor: () => getValidationItemsVisitor,
throwValidatorItemsVisitor: () => throwValidatorItemsVisitor,
validationItem: () => validationItem
});
module.exports = __toCommonJS(index_exports);
var nodes = require('@codama/nodes');
var visitorsCore = require('@codama/visitors-core');
var errors = require('@codama/errors');
// src/getValidationItemsVisitor.ts
var import_nodes = require("@codama/nodes");
var import_visitors_core = require("@codama/visitors-core");

@@ -49,12 +23,12 @@ // src/ValidationItem.ts

function getValidationItemsVisitor() {
const linkables = new import_visitors_core.LinkableDictionary();
const stack = new import_visitors_core.NodeStack();
return (0, import_visitors_core.pipe)(
(0, import_visitors_core.mergeVisitor)(
const linkables = new visitorsCore.LinkableDictionary();
const stack = new visitorsCore.NodeStack();
return visitorsCore.pipe(
visitorsCore.mergeVisitor(
() => [],
(_, items) => items.flat()
),
(v) => (0, import_visitors_core.recordLinkablesOnFirstVisitVisitor)(v, linkables),
(v) => (0, import_visitors_core.recordNodeStackVisitor)(v, stack),
(v) => (0, import_visitors_core.extendVisitor)(v, {
(v) => visitorsCore.recordLinkablesOnFirstVisitVisitor(v, linkables),
(v) => visitorsCore.recordNodeStackVisitor(v, stack),
(v) => visitorsCore.extendVisitor(v, {
visitAccount(node, { next }) {

@@ -160,9 +134,9 @@ const items = [];

});
const cyclicCheckVisitor = (0, import_visitors_core.getResolvedInstructionInputsVisitor)();
const cyclicCheckVisitor = visitorsCore.getResolvedInstructionInputsVisitor();
try {
(0, import_visitors_core.visit)(node, cyclicCheckVisitor);
visitorsCore.visit(node, cyclicCheckVisitor);
} catch (error) {
items.push(validationItem("error", error.message, node, stack));
}
const names = (0, import_nodes.getAllInstructionArguments)(node).map(({ name }) => (0, import_nodes.camelCase)(name));
const names = nodes.getAllInstructionArguments(node).map(({ name }) => nodes.camelCase(name));
const duplicates = names.filter((e, i, a) => a.indexOf(e) !== i);

@@ -181,5 +155,5 @@ const uniqueDuplicates = [...new Set(duplicates)];

}
(0, import_nodes.getAllInstructionArguments)(node).forEach((argument) => {
nodes.getAllInstructionArguments(node).forEach((argument) => {
const { defaultValue } = argument;
if ((0, import_nodes.isNode)(defaultValue, "accountBumpValueNode")) {
if (nodes.isNode(defaultValue, "accountBumpValueNode")) {
const defaultAccount = node.accounts.find((account) => account.name === defaultValue.name);

@@ -253,8 +227,4 @@ if (defaultAccount && defaultAccount.isSigner !== false) {

}
// src/throwValidatorItemsVisitor.ts
var import_errors = require("@codama/errors");
var import_visitors_core2 = require("@codama/visitors-core");
function throwValidatorItemsVisitor(visitor, throwLevel = "error") {
return (0, import_visitors_core2.mapVisitor)(visitor, (validationItems) => {
return visitorsCore.mapVisitor(visitor, (validationItems) => {
const levelHistogram = [...validationItems].sort((a, b) => getLevelIndex(b.level) - getLevelIndex(a.level)).reduce(

@@ -270,3 +240,3 @@ (acc, item) => {

const formattedHistogram = Object.keys(levelHistogram).map((level) => `${level}s: ${levelHistogram[level]}`).join(", ");
throw new import_errors.CodamaError(import_errors.CODAMA_ERROR__VISITORS__FAILED_TO_VALIDATE_NODE, {
throw new errors.CodamaError(errors.CODAMA_ERROR__VISITORS__FAILED_TO_VALIDATE_NODE, {
formattedHistogram,

@@ -278,2 +248,9 @@ validationItems

}
exports.LOG_LEVELS = LOG_LEVELS;
exports.getLevelIndex = getLevelIndex;
exports.getValidationItemsVisitor = getValidationItemsVisitor;
exports.throwValidatorItemsVisitor = throwValidatorItemsVisitor;
exports.validationItem = validationItem;
//# sourceMappingURL=index.browser.cjs.map
//# sourceMappingURL=index.browser.cjs.map

@@ -1,1 +0,1 @@

{"version":3,"sources":["../src/index.ts","../src/getValidationItemsVisitor.ts","../src/ValidationItem.ts","../src/throwValidatorItemsVisitor.ts"],"sourcesContent":["export * from './getValidationItemsVisitor';\nexport * from './throwValidatorItemsVisitor';\nexport * from './ValidationItem';\n","import { camelCase, getAllInstructionArguments, isNode } from '@codama/nodes';\nimport {\n extendVisitor,\n getResolvedInstructionInputsVisitor,\n LinkableDictionary,\n mergeVisitor,\n NodeStack,\n pipe,\n recordLinkablesOnFirstVisitVisitor,\n recordNodeStackVisitor,\n visit,\n Visitor,\n} from '@codama/visitors-core';\n\nimport { ValidationItem, validationItem } from './ValidationItem';\n\nexport function getValidationItemsVisitor(): Visitor<readonly ValidationItem[]> {\n const linkables = new LinkableDictionary();\n const stack = new NodeStack();\n\n return pipe(\n mergeVisitor(\n () => [] as readonly ValidationItem[],\n (_, items) => items.flat(),\n ),\n v => recordLinkablesOnFirstVisitVisitor(v, linkables),\n v => recordNodeStackVisitor(v, stack),\n v =>\n extendVisitor(v, {\n visitAccount(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Account has no name.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitDefinedType(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Defined type has no name.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitDefinedTypeLink(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Pointing to a defined type with no name.', node, stack));\n } else if (!linkables.has(stack.getPath(node.kind))) {\n items.push(\n validationItem(\n 'error',\n `Pointing to a missing defined type named \"${node.name}\"`,\n node,\n stack,\n ),\n );\n }\n return [...items, ...next(node)];\n },\n\n visitEnumEmptyVariantType(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Enum variant has no name.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitEnumStructVariantType(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Enum variant has no name.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitEnumTupleVariantType(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Enum variant has no name.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitEnumType(node, { next }) {\n const items = [] as ValidationItem[];\n if (node.variants.length === 0) {\n items.push(validationItem('warn', 'Enum has no variants.', node, stack));\n }\n node.variants.forEach(variant => {\n if (!variant.name) {\n items.push(validationItem('error', 'Enum variant has no name.', node, stack));\n }\n });\n return [...items, ...next(node)];\n },\n\n visitError(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Error has no name.', node, stack));\n }\n if (typeof node.code !== 'number') {\n items.push(validationItem('error', 'Error has no code.', node, stack));\n }\n if (!node.message) {\n items.push(validationItem('warn', 'Error has no message.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitInstruction(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Instruction has no name.', node, stack));\n }\n\n // Check for duplicate account names.\n const accountNameHistogram = new Map<string, number>();\n node.accounts.forEach(account => {\n if (!account.name) {\n items.push(validationItem('error', 'Instruction account has no name.', node, stack));\n return;\n }\n const count = (accountNameHistogram.get(account.name) ?? 0) + 1;\n accountNameHistogram.set(account.name, count);\n // Only throw an error once per duplicated names.\n if (count === 2) {\n items.push(\n validationItem(\n 'error',\n `Account name \"${account.name}\" is not unique in instruction \"${node.name}\".`,\n node,\n stack,\n ),\n );\n }\n });\n\n // Check for cyclic dependencies in account defaults.\n const cyclicCheckVisitor = getResolvedInstructionInputsVisitor();\n try {\n visit(node, cyclicCheckVisitor);\n } catch (error) {\n items.push(validationItem('error', (error as Error).message, node, stack));\n }\n\n // Check args.\n const names = getAllInstructionArguments(node).map(({ name }) => camelCase(name));\n const duplicates = names.filter((e, i, a) => a.indexOf(e) !== i);\n const uniqueDuplicates = [...new Set(duplicates)];\n const hasConflictingNames = uniqueDuplicates.length > 0;\n if (hasConflictingNames) {\n items.push(\n validationItem(\n 'error',\n `The names of the following instruction arguments are conflicting: ` +\n `[${uniqueDuplicates.join(', ')}].`,\n node,\n stack,\n ),\n );\n }\n\n // Check arg defaults.\n getAllInstructionArguments(node).forEach(argument => {\n const { defaultValue } = argument;\n if (isNode(defaultValue, 'accountBumpValueNode')) {\n const defaultAccount = node.accounts.find(account => account.name === defaultValue.name);\n if (defaultAccount && defaultAccount.isSigner !== false) {\n items.push(\n validationItem(\n 'error',\n `Argument ${argument.name} cannot default to the bump attribute of ` +\n `the [${defaultValue.name}] account as it may be a Signer.`,\n node,\n stack,\n ),\n );\n }\n }\n });\n\n return [...items, ...next(node)];\n },\n\n visitProgram(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Program has no name.', node, stack));\n }\n if (!node.publicKey) {\n items.push(validationItem('error', 'Program has no public key.', node, stack));\n }\n if (!node.version) {\n items.push(validationItem('warn', 'Program has no version.', node, stack));\n }\n if (!node.origin) {\n items.push(validationItem('info', 'Program has no origin.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitStructFieldType(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Struct field has no name.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitStructType(node, { next }) {\n const items = [] as ValidationItem[];\n\n // Check for duplicate field names.\n const fieldNameHistogram = new Map<string, number>();\n node.fields.forEach(field => {\n if (!field.name) return; // Handled by TypeStructField\n const count = (fieldNameHistogram.get(field.name) ?? 0) + 1;\n fieldNameHistogram.set(field.name, count);\n // Only throw an error once per duplicated names.\n if (count === 2) {\n items.push(\n validationItem(\n 'error',\n `Struct field name \"${field.name}\" is not unique.`,\n field,\n stack,\n ),\n );\n }\n });\n return [...items, ...next(node)];\n },\n\n visitTupleType(node, { next }) {\n const items = [] as ValidationItem[];\n if (node.items.length === 0) {\n items.push(validationItem('warn', 'Tuple has no items.', node, stack));\n }\n return [...items, ...next(node)];\n },\n }),\n );\n}\n","import { Node } from '@codama/nodes';\nimport { NodePath, NodeStack } from '@codama/visitors-core';\n\nexport const LOG_LEVELS = ['debug', 'trace', 'info', 'warn', 'error'] as const;\nexport type LogLevel = (typeof LOG_LEVELS)[number];\n\nexport type ValidationItem = {\n level: LogLevel;\n message: string;\n node: Node;\n path: NodePath;\n};\n\nexport function validationItem(\n level: LogLevel,\n message: string,\n node: Node,\n path: NodePath | NodeStack,\n): ValidationItem {\n return {\n level,\n message,\n node,\n path: Array.isArray(path) ? path : (path as NodeStack).getPath(),\n };\n}\n\nexport const getLevelIndex = (level: LogLevel): number => LOG_LEVELS.indexOf(level);\n","import { CODAMA_ERROR__VISITORS__FAILED_TO_VALIDATE_NODE, CodamaError } from '@codama/errors';\nimport { NodeKind } from '@codama/nodes';\nimport { mapVisitor, Visitor } from '@codama/visitors-core';\n\nimport { getLevelIndex, LogLevel, ValidationItem } from './ValidationItem';\n\nexport function throwValidatorItemsVisitor<TNodeKind extends NodeKind = NodeKind>(\n visitor: Visitor<readonly ValidationItem[], TNodeKind>,\n throwLevel: LogLevel = 'error',\n): Visitor<void, TNodeKind> {\n return mapVisitor(visitor, validationItems => {\n const levelHistogram = [...validationItems]\n .sort((a, b) => getLevelIndex(b.level) - getLevelIndex(a.level))\n .reduce(\n (acc, item) => {\n acc[item.level] = (acc[item.level] ?? 0) + 1;\n return acc;\n },\n {} as Record<LogLevel, number>,\n );\n const maxLevel = Object.keys(levelHistogram)\n .map(level => getLevelIndex(level as LogLevel))\n .sort((a, b) => b - a)[0];\n\n if (maxLevel >= getLevelIndex(throwLevel)) {\n const formattedHistogram = Object.keys(levelHistogram)\n .map(level => `${level}s: ${levelHistogram[level as LogLevel]}`)\n .join(', ');\n throw new CodamaError(CODAMA_ERROR__VISITORS__FAILED_TO_VALIDATE_NODE, {\n formattedHistogram,\n validationItems,\n });\n }\n });\n}\n"],"mappings":"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","names":["import_visitors_core"]}
{"version":3,"sources":["../src/ValidationItem.ts","../src/getValidationItemsVisitor.ts","../src/throwValidatorItemsVisitor.ts"],"names":["LinkableDictionary","NodeStack","pipe","mergeVisitor","recordLinkablesOnFirstVisitVisitor","recordNodeStackVisitor","extendVisitor","getResolvedInstructionInputsVisitor","visit","getAllInstructionArguments","camelCase","isNode","mapVisitor","CodamaError","CODAMA_ERROR__VISITORS__FAILED_TO_VALIDATE_NODE"],"mappings":"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","file":"index.browser.cjs","sourcesContent":["import { Node } from '@codama/nodes';\nimport { NodePath, NodeStack } from '@codama/visitors-core';\n\nexport const LOG_LEVELS = ['debug', 'trace', 'info', 'warn', 'error'] as const;\nexport type LogLevel = (typeof LOG_LEVELS)[number];\n\nexport type ValidationItem = {\n level: LogLevel;\n message: string;\n node: Node;\n path: NodePath;\n};\n\nexport function validationItem(\n level: LogLevel,\n message: string,\n node: Node,\n path: NodePath | NodeStack,\n): ValidationItem {\n return {\n level,\n message,\n node,\n path: Array.isArray(path) ? path : (path as NodeStack).getPath(),\n };\n}\n\nexport const getLevelIndex = (level: LogLevel): number => LOG_LEVELS.indexOf(level);\n","import { camelCase, getAllInstructionArguments, isNode } from '@codama/nodes';\nimport {\n extendVisitor,\n getResolvedInstructionInputsVisitor,\n LinkableDictionary,\n mergeVisitor,\n NodeStack,\n pipe,\n recordLinkablesOnFirstVisitVisitor,\n recordNodeStackVisitor,\n visit,\n Visitor,\n} from '@codama/visitors-core';\n\nimport { ValidationItem, validationItem } from './ValidationItem';\n\nexport function getValidationItemsVisitor(): Visitor<readonly ValidationItem[]> {\n const linkables = new LinkableDictionary();\n const stack = new NodeStack();\n\n return pipe(\n mergeVisitor(\n () => [] as readonly ValidationItem[],\n (_, items) => items.flat(),\n ),\n v => recordLinkablesOnFirstVisitVisitor(v, linkables),\n v => recordNodeStackVisitor(v, stack),\n v =>\n extendVisitor(v, {\n visitAccount(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Account has no name.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitDefinedType(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Defined type has no name.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitDefinedTypeLink(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Pointing to a defined type with no name.', node, stack));\n } else if (!linkables.has(stack.getPath(node.kind))) {\n items.push(\n validationItem(\n 'error',\n `Pointing to a missing defined type named \"${node.name}\"`,\n node,\n stack,\n ),\n );\n }\n return [...items, ...next(node)];\n },\n\n visitEnumEmptyVariantType(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Enum variant has no name.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitEnumStructVariantType(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Enum variant has no name.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitEnumTupleVariantType(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Enum variant has no name.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitEnumType(node, { next }) {\n const items = [] as ValidationItem[];\n if (node.variants.length === 0) {\n items.push(validationItem('warn', 'Enum has no variants.', node, stack));\n }\n node.variants.forEach(variant => {\n if (!variant.name) {\n items.push(validationItem('error', 'Enum variant has no name.', node, stack));\n }\n });\n return [...items, ...next(node)];\n },\n\n visitError(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Error has no name.', node, stack));\n }\n if (typeof node.code !== 'number') {\n items.push(validationItem('error', 'Error has no code.', node, stack));\n }\n if (!node.message) {\n items.push(validationItem('warn', 'Error has no message.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitInstruction(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Instruction has no name.', node, stack));\n }\n\n // Check for duplicate account names.\n const accountNameHistogram = new Map<string, number>();\n node.accounts.forEach(account => {\n if (!account.name) {\n items.push(validationItem('error', 'Instruction account has no name.', node, stack));\n return;\n }\n const count = (accountNameHistogram.get(account.name) ?? 0) + 1;\n accountNameHistogram.set(account.name, count);\n // Only throw an error once per duplicated names.\n if (count === 2) {\n items.push(\n validationItem(\n 'error',\n `Account name \"${account.name}\" is not unique in instruction \"${node.name}\".`,\n node,\n stack,\n ),\n );\n }\n });\n\n // Check for cyclic dependencies in account defaults.\n const cyclicCheckVisitor = getResolvedInstructionInputsVisitor();\n try {\n visit(node, cyclicCheckVisitor);\n } catch (error) {\n items.push(validationItem('error', (error as Error).message, node, stack));\n }\n\n // Check args.\n const names = getAllInstructionArguments(node).map(({ name }) => camelCase(name));\n const duplicates = names.filter((e, i, a) => a.indexOf(e) !== i);\n const uniqueDuplicates = [...new Set(duplicates)];\n const hasConflictingNames = uniqueDuplicates.length > 0;\n if (hasConflictingNames) {\n items.push(\n validationItem(\n 'error',\n `The names of the following instruction arguments are conflicting: ` +\n `[${uniqueDuplicates.join(', ')}].`,\n node,\n stack,\n ),\n );\n }\n\n // Check arg defaults.\n getAllInstructionArguments(node).forEach(argument => {\n const { defaultValue } = argument;\n if (isNode(defaultValue, 'accountBumpValueNode')) {\n const defaultAccount = node.accounts.find(account => account.name === defaultValue.name);\n if (defaultAccount && defaultAccount.isSigner !== false) {\n items.push(\n validationItem(\n 'error',\n `Argument ${argument.name} cannot default to the bump attribute of ` +\n `the [${defaultValue.name}] account as it may be a Signer.`,\n node,\n stack,\n ),\n );\n }\n }\n });\n\n return [...items, ...next(node)];\n },\n\n visitProgram(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Program has no name.', node, stack));\n }\n if (!node.publicKey) {\n items.push(validationItem('error', 'Program has no public key.', node, stack));\n }\n if (!node.version) {\n items.push(validationItem('warn', 'Program has no version.', node, stack));\n }\n if (!node.origin) {\n items.push(validationItem('info', 'Program has no origin.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitStructFieldType(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Struct field has no name.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitStructType(node, { next }) {\n const items = [] as ValidationItem[];\n\n // Check for duplicate field names.\n const fieldNameHistogram = new Map<string, number>();\n node.fields.forEach(field => {\n if (!field.name) return; // Handled by TypeStructField\n const count = (fieldNameHistogram.get(field.name) ?? 0) + 1;\n fieldNameHistogram.set(field.name, count);\n // Only throw an error once per duplicated names.\n if (count === 2) {\n items.push(\n validationItem(\n 'error',\n `Struct field name \"${field.name}\" is not unique.`,\n field,\n stack,\n ),\n );\n }\n });\n return [...items, ...next(node)];\n },\n\n visitTupleType(node, { next }) {\n const items = [] as ValidationItem[];\n if (node.items.length === 0) {\n items.push(validationItem('warn', 'Tuple has no items.', node, stack));\n }\n return [...items, ...next(node)];\n },\n }),\n );\n}\n","import { CODAMA_ERROR__VISITORS__FAILED_TO_VALIDATE_NODE, CodamaError } from '@codama/errors';\nimport { NodeKind } from '@codama/nodes';\nimport { mapVisitor, Visitor } from '@codama/visitors-core';\n\nimport { getLevelIndex, LogLevel, ValidationItem } from './ValidationItem';\n\nexport function throwValidatorItemsVisitor<TNodeKind extends NodeKind = NodeKind>(\n visitor: Visitor<readonly ValidationItem[], TNodeKind>,\n throwLevel: LogLevel = 'error',\n): Visitor<void, TNodeKind> {\n return mapVisitor(visitor, validationItems => {\n const levelHistogram = [...validationItems]\n .sort((a, b) => getLevelIndex(b.level) - getLevelIndex(a.level))\n .reduce(\n (acc, item) => {\n acc[item.level] = (acc[item.level] ?? 0) + 1;\n return acc;\n },\n {} as Record<LogLevel, number>,\n );\n const maxLevel = Object.keys(levelHistogram)\n .map(level => getLevelIndex(level as LogLevel))\n .sort((a, b) => b - a)[0];\n\n if (maxLevel >= getLevelIndex(throwLevel)) {\n const formattedHistogram = Object.keys(levelHistogram)\n .map(level => `${level}s: ${levelHistogram[level as LogLevel]}`)\n .join(', ');\n throw new CodamaError(CODAMA_ERROR__VISITORS__FAILED_TO_VALIDATE_NODE, {\n formattedHistogram,\n validationItems,\n });\n }\n });\n}\n"]}

@@ -0,14 +1,6 @@

import { getAllInstructionArguments, camelCase, isNode } from '@codama/nodes';
import { LinkableDictionary, NodeStack, pipe, mergeVisitor, recordLinkablesOnFirstVisitVisitor, recordNodeStackVisitor, extendVisitor, getResolvedInstructionInputsVisitor, visit, mapVisitor } from '@codama/visitors-core';
import { CodamaError, CODAMA_ERROR__VISITORS__FAILED_TO_VALIDATE_NODE } from '@codama/errors';
// src/getValidationItemsVisitor.ts
import { camelCase, getAllInstructionArguments, isNode } from "@codama/nodes";
import {
extendVisitor,
getResolvedInstructionInputsVisitor,
LinkableDictionary,
mergeVisitor,
NodeStack,
pipe,
recordLinkablesOnFirstVisitVisitor,
recordNodeStackVisitor,
visit
} from "@codama/visitors-core";

@@ -230,6 +222,2 @@ // src/ValidationItem.ts

}
// src/throwValidatorItemsVisitor.ts
import { CODAMA_ERROR__VISITORS__FAILED_TO_VALIDATE_NODE, CodamaError } from "@codama/errors";
import { mapVisitor } from "@codama/visitors-core";
function throwValidatorItemsVisitor(visitor, throwLevel = "error") {

@@ -254,9 +242,5 @@ return mapVisitor(visitor, (validationItems) => {

}
export {
LOG_LEVELS,
getLevelIndex,
getValidationItemsVisitor,
throwValidatorItemsVisitor,
validationItem
};
export { LOG_LEVELS, getLevelIndex, getValidationItemsVisitor, throwValidatorItemsVisitor, validationItem };
//# sourceMappingURL=index.browser.mjs.map
//# sourceMappingURL=index.browser.mjs.map

@@ -1,1 +0,1 @@

{"version":3,"sources":["../src/getValidationItemsVisitor.ts","../src/ValidationItem.ts","../src/throwValidatorItemsVisitor.ts"],"sourcesContent":["import { camelCase, getAllInstructionArguments, isNode } from '@codama/nodes';\nimport {\n extendVisitor,\n getResolvedInstructionInputsVisitor,\n LinkableDictionary,\n mergeVisitor,\n NodeStack,\n pipe,\n recordLinkablesOnFirstVisitVisitor,\n recordNodeStackVisitor,\n visit,\n Visitor,\n} from '@codama/visitors-core';\n\nimport { ValidationItem, validationItem } from './ValidationItem';\n\nexport function getValidationItemsVisitor(): Visitor<readonly ValidationItem[]> {\n const linkables = new LinkableDictionary();\n const stack = new NodeStack();\n\n return pipe(\n mergeVisitor(\n () => [] as readonly ValidationItem[],\n (_, items) => items.flat(),\n ),\n v => recordLinkablesOnFirstVisitVisitor(v, linkables),\n v => recordNodeStackVisitor(v, stack),\n v =>\n extendVisitor(v, {\n visitAccount(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Account has no name.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitDefinedType(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Defined type has no name.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitDefinedTypeLink(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Pointing to a defined type with no name.', node, stack));\n } else if (!linkables.has(stack.getPath(node.kind))) {\n items.push(\n validationItem(\n 'error',\n `Pointing to a missing defined type named \"${node.name}\"`,\n node,\n stack,\n ),\n );\n }\n return [...items, ...next(node)];\n },\n\n visitEnumEmptyVariantType(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Enum variant has no name.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitEnumStructVariantType(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Enum variant has no name.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitEnumTupleVariantType(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Enum variant has no name.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitEnumType(node, { next }) {\n const items = [] as ValidationItem[];\n if (node.variants.length === 0) {\n items.push(validationItem('warn', 'Enum has no variants.', node, stack));\n }\n node.variants.forEach(variant => {\n if (!variant.name) {\n items.push(validationItem('error', 'Enum variant has no name.', node, stack));\n }\n });\n return [...items, ...next(node)];\n },\n\n visitError(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Error has no name.', node, stack));\n }\n if (typeof node.code !== 'number') {\n items.push(validationItem('error', 'Error has no code.', node, stack));\n }\n if (!node.message) {\n items.push(validationItem('warn', 'Error has no message.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitInstruction(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Instruction has no name.', node, stack));\n }\n\n // Check for duplicate account names.\n const accountNameHistogram = new Map<string, number>();\n node.accounts.forEach(account => {\n if (!account.name) {\n items.push(validationItem('error', 'Instruction account has no name.', node, stack));\n return;\n }\n const count = (accountNameHistogram.get(account.name) ?? 0) + 1;\n accountNameHistogram.set(account.name, count);\n // Only throw an error once per duplicated names.\n if (count === 2) {\n items.push(\n validationItem(\n 'error',\n `Account name \"${account.name}\" is not unique in instruction \"${node.name}\".`,\n node,\n stack,\n ),\n );\n }\n });\n\n // Check for cyclic dependencies in account defaults.\n const cyclicCheckVisitor = getResolvedInstructionInputsVisitor();\n try {\n visit(node, cyclicCheckVisitor);\n } catch (error) {\n items.push(validationItem('error', (error as Error).message, node, stack));\n }\n\n // Check args.\n const names = getAllInstructionArguments(node).map(({ name }) => camelCase(name));\n const duplicates = names.filter((e, i, a) => a.indexOf(e) !== i);\n const uniqueDuplicates = [...new Set(duplicates)];\n const hasConflictingNames = uniqueDuplicates.length > 0;\n if (hasConflictingNames) {\n items.push(\n validationItem(\n 'error',\n `The names of the following instruction arguments are conflicting: ` +\n `[${uniqueDuplicates.join(', ')}].`,\n node,\n stack,\n ),\n );\n }\n\n // Check arg defaults.\n getAllInstructionArguments(node).forEach(argument => {\n const { defaultValue } = argument;\n if (isNode(defaultValue, 'accountBumpValueNode')) {\n const defaultAccount = node.accounts.find(account => account.name === defaultValue.name);\n if (defaultAccount && defaultAccount.isSigner !== false) {\n items.push(\n validationItem(\n 'error',\n `Argument ${argument.name} cannot default to the bump attribute of ` +\n `the [${defaultValue.name}] account as it may be a Signer.`,\n node,\n stack,\n ),\n );\n }\n }\n });\n\n return [...items, ...next(node)];\n },\n\n visitProgram(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Program has no name.', node, stack));\n }\n if (!node.publicKey) {\n items.push(validationItem('error', 'Program has no public key.', node, stack));\n }\n if (!node.version) {\n items.push(validationItem('warn', 'Program has no version.', node, stack));\n }\n if (!node.origin) {\n items.push(validationItem('info', 'Program has no origin.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitStructFieldType(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Struct field has no name.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitStructType(node, { next }) {\n const items = [] as ValidationItem[];\n\n // Check for duplicate field names.\n const fieldNameHistogram = new Map<string, number>();\n node.fields.forEach(field => {\n if (!field.name) return; // Handled by TypeStructField\n const count = (fieldNameHistogram.get(field.name) ?? 0) + 1;\n fieldNameHistogram.set(field.name, count);\n // Only throw an error once per duplicated names.\n if (count === 2) {\n items.push(\n validationItem(\n 'error',\n `Struct field name \"${field.name}\" is not unique.`,\n field,\n stack,\n ),\n );\n }\n });\n return [...items, ...next(node)];\n },\n\n visitTupleType(node, { next }) {\n const items = [] as ValidationItem[];\n if (node.items.length === 0) {\n items.push(validationItem('warn', 'Tuple has no items.', node, stack));\n }\n return [...items, ...next(node)];\n },\n }),\n );\n}\n","import { Node } from '@codama/nodes';\nimport { NodePath, NodeStack } from '@codama/visitors-core';\n\nexport const LOG_LEVELS = ['debug', 'trace', 'info', 'warn', 'error'] as const;\nexport type LogLevel = (typeof LOG_LEVELS)[number];\n\nexport type ValidationItem = {\n level: LogLevel;\n message: string;\n node: Node;\n path: NodePath;\n};\n\nexport function validationItem(\n level: LogLevel,\n message: string,\n node: Node,\n path: NodePath | NodeStack,\n): ValidationItem {\n return {\n level,\n message,\n node,\n path: Array.isArray(path) ? path : (path as NodeStack).getPath(),\n };\n}\n\nexport const getLevelIndex = (level: LogLevel): number => LOG_LEVELS.indexOf(level);\n","import { CODAMA_ERROR__VISITORS__FAILED_TO_VALIDATE_NODE, CodamaError } from '@codama/errors';\nimport { NodeKind } from '@codama/nodes';\nimport { mapVisitor, Visitor } from '@codama/visitors-core';\n\nimport { getLevelIndex, LogLevel, ValidationItem } from './ValidationItem';\n\nexport function throwValidatorItemsVisitor<TNodeKind extends NodeKind = NodeKind>(\n visitor: Visitor<readonly ValidationItem[], TNodeKind>,\n throwLevel: LogLevel = 'error',\n): Visitor<void, TNodeKind> {\n return mapVisitor(visitor, validationItems => {\n const levelHistogram = [...validationItems]\n .sort((a, b) => getLevelIndex(b.level) - getLevelIndex(a.level))\n .reduce(\n (acc, item) => {\n acc[item.level] = (acc[item.level] ?? 0) + 1;\n return acc;\n },\n {} as Record<LogLevel, number>,\n );\n const maxLevel = Object.keys(levelHistogram)\n .map(level => getLevelIndex(level as LogLevel))\n .sort((a, b) => b - a)[0];\n\n if (maxLevel >= getLevelIndex(throwLevel)) {\n const formattedHistogram = Object.keys(levelHistogram)\n .map(level => `${level}s: ${levelHistogram[level as LogLevel]}`)\n .join(', ');\n throw new CodamaError(CODAMA_ERROR__VISITORS__FAILED_TO_VALIDATE_NODE, {\n formattedHistogram,\n validationItems,\n });\n }\n });\n}\n"],"mappings":"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","names":[]}
{"version":3,"sources":["../src/ValidationItem.ts","../src/getValidationItemsVisitor.ts","../src/throwValidatorItemsVisitor.ts"],"names":[],"mappings":"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","file":"index.browser.mjs","sourcesContent":["import { Node } from '@codama/nodes';\nimport { NodePath, NodeStack } from '@codama/visitors-core';\n\nexport const LOG_LEVELS = ['debug', 'trace', 'info', 'warn', 'error'] as const;\nexport type LogLevel = (typeof LOG_LEVELS)[number];\n\nexport type ValidationItem = {\n level: LogLevel;\n message: string;\n node: Node;\n path: NodePath;\n};\n\nexport function validationItem(\n level: LogLevel,\n message: string,\n node: Node,\n path: NodePath | NodeStack,\n): ValidationItem {\n return {\n level,\n message,\n node,\n path: Array.isArray(path) ? path : (path as NodeStack).getPath(),\n };\n}\n\nexport const getLevelIndex = (level: LogLevel): number => LOG_LEVELS.indexOf(level);\n","import { camelCase, getAllInstructionArguments, isNode } from '@codama/nodes';\nimport {\n extendVisitor,\n getResolvedInstructionInputsVisitor,\n LinkableDictionary,\n mergeVisitor,\n NodeStack,\n pipe,\n recordLinkablesOnFirstVisitVisitor,\n recordNodeStackVisitor,\n visit,\n Visitor,\n} from '@codama/visitors-core';\n\nimport { ValidationItem, validationItem } from './ValidationItem';\n\nexport function getValidationItemsVisitor(): Visitor<readonly ValidationItem[]> {\n const linkables = new LinkableDictionary();\n const stack = new NodeStack();\n\n return pipe(\n mergeVisitor(\n () => [] as readonly ValidationItem[],\n (_, items) => items.flat(),\n ),\n v => recordLinkablesOnFirstVisitVisitor(v, linkables),\n v => recordNodeStackVisitor(v, stack),\n v =>\n extendVisitor(v, {\n visitAccount(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Account has no name.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitDefinedType(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Defined type has no name.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitDefinedTypeLink(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Pointing to a defined type with no name.', node, stack));\n } else if (!linkables.has(stack.getPath(node.kind))) {\n items.push(\n validationItem(\n 'error',\n `Pointing to a missing defined type named \"${node.name}\"`,\n node,\n stack,\n ),\n );\n }\n return [...items, ...next(node)];\n },\n\n visitEnumEmptyVariantType(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Enum variant has no name.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitEnumStructVariantType(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Enum variant has no name.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitEnumTupleVariantType(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Enum variant has no name.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitEnumType(node, { next }) {\n const items = [] as ValidationItem[];\n if (node.variants.length === 0) {\n items.push(validationItem('warn', 'Enum has no variants.', node, stack));\n }\n node.variants.forEach(variant => {\n if (!variant.name) {\n items.push(validationItem('error', 'Enum variant has no name.', node, stack));\n }\n });\n return [...items, ...next(node)];\n },\n\n visitError(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Error has no name.', node, stack));\n }\n if (typeof node.code !== 'number') {\n items.push(validationItem('error', 'Error has no code.', node, stack));\n }\n if (!node.message) {\n items.push(validationItem('warn', 'Error has no message.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitInstruction(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Instruction has no name.', node, stack));\n }\n\n // Check for duplicate account names.\n const accountNameHistogram = new Map<string, number>();\n node.accounts.forEach(account => {\n if (!account.name) {\n items.push(validationItem('error', 'Instruction account has no name.', node, stack));\n return;\n }\n const count = (accountNameHistogram.get(account.name) ?? 0) + 1;\n accountNameHistogram.set(account.name, count);\n // Only throw an error once per duplicated names.\n if (count === 2) {\n items.push(\n validationItem(\n 'error',\n `Account name \"${account.name}\" is not unique in instruction \"${node.name}\".`,\n node,\n stack,\n ),\n );\n }\n });\n\n // Check for cyclic dependencies in account defaults.\n const cyclicCheckVisitor = getResolvedInstructionInputsVisitor();\n try {\n visit(node, cyclicCheckVisitor);\n } catch (error) {\n items.push(validationItem('error', (error as Error).message, node, stack));\n }\n\n // Check args.\n const names = getAllInstructionArguments(node).map(({ name }) => camelCase(name));\n const duplicates = names.filter((e, i, a) => a.indexOf(e) !== i);\n const uniqueDuplicates = [...new Set(duplicates)];\n const hasConflictingNames = uniqueDuplicates.length > 0;\n if (hasConflictingNames) {\n items.push(\n validationItem(\n 'error',\n `The names of the following instruction arguments are conflicting: ` +\n `[${uniqueDuplicates.join(', ')}].`,\n node,\n stack,\n ),\n );\n }\n\n // Check arg defaults.\n getAllInstructionArguments(node).forEach(argument => {\n const { defaultValue } = argument;\n if (isNode(defaultValue, 'accountBumpValueNode')) {\n const defaultAccount = node.accounts.find(account => account.name === defaultValue.name);\n if (defaultAccount && defaultAccount.isSigner !== false) {\n items.push(\n validationItem(\n 'error',\n `Argument ${argument.name} cannot default to the bump attribute of ` +\n `the [${defaultValue.name}] account as it may be a Signer.`,\n node,\n stack,\n ),\n );\n }\n }\n });\n\n return [...items, ...next(node)];\n },\n\n visitProgram(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Program has no name.', node, stack));\n }\n if (!node.publicKey) {\n items.push(validationItem('error', 'Program has no public key.', node, stack));\n }\n if (!node.version) {\n items.push(validationItem('warn', 'Program has no version.', node, stack));\n }\n if (!node.origin) {\n items.push(validationItem('info', 'Program has no origin.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitStructFieldType(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Struct field has no name.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitStructType(node, { next }) {\n const items = [] as ValidationItem[];\n\n // Check for duplicate field names.\n const fieldNameHistogram = new Map<string, number>();\n node.fields.forEach(field => {\n if (!field.name) return; // Handled by TypeStructField\n const count = (fieldNameHistogram.get(field.name) ?? 0) + 1;\n fieldNameHistogram.set(field.name, count);\n // Only throw an error once per duplicated names.\n if (count === 2) {\n items.push(\n validationItem(\n 'error',\n `Struct field name \"${field.name}\" is not unique.`,\n field,\n stack,\n ),\n );\n }\n });\n return [...items, ...next(node)];\n },\n\n visitTupleType(node, { next }) {\n const items = [] as ValidationItem[];\n if (node.items.length === 0) {\n items.push(validationItem('warn', 'Tuple has no items.', node, stack));\n }\n return [...items, ...next(node)];\n },\n }),\n );\n}\n","import { CODAMA_ERROR__VISITORS__FAILED_TO_VALIDATE_NODE, CodamaError } from '@codama/errors';\nimport { NodeKind } from '@codama/nodes';\nimport { mapVisitor, Visitor } from '@codama/visitors-core';\n\nimport { getLevelIndex, LogLevel, ValidationItem } from './ValidationItem';\n\nexport function throwValidatorItemsVisitor<TNodeKind extends NodeKind = NodeKind>(\n visitor: Visitor<readonly ValidationItem[], TNodeKind>,\n throwLevel: LogLevel = 'error',\n): Visitor<void, TNodeKind> {\n return mapVisitor(visitor, validationItems => {\n const levelHistogram = [...validationItems]\n .sort((a, b) => getLevelIndex(b.level) - getLevelIndex(a.level))\n .reduce(\n (acc, item) => {\n acc[item.level] = (acc[item.level] ?? 0) + 1;\n return acc;\n },\n {} as Record<LogLevel, number>,\n );\n const maxLevel = Object.keys(levelHistogram)\n .map(level => getLevelIndex(level as LogLevel))\n .sort((a, b) => b - a)[0];\n\n if (maxLevel >= getLevelIndex(throwLevel)) {\n const formattedHistogram = Object.keys(levelHistogram)\n .map(level => `${level}s: ${levelHistogram[level as LogLevel]}`)\n .join(', ');\n throw new CodamaError(CODAMA_ERROR__VISITORS__FAILED_TO_VALIDATE_NODE, {\n formattedHistogram,\n validationItems,\n });\n }\n });\n}\n"]}

@@ -1,34 +0,8 @@

"use strict";
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
'use strict';
// src/index.ts
var index_exports = {};
__export(index_exports, {
LOG_LEVELS: () => LOG_LEVELS,
getLevelIndex: () => getLevelIndex,
getValidationItemsVisitor: () => getValidationItemsVisitor,
throwValidatorItemsVisitor: () => throwValidatorItemsVisitor,
validationItem: () => validationItem
});
module.exports = __toCommonJS(index_exports);
var nodes = require('@codama/nodes');
var visitorsCore = require('@codama/visitors-core');
var errors = require('@codama/errors');
// src/getValidationItemsVisitor.ts
var import_nodes = require("@codama/nodes");
var import_visitors_core = require("@codama/visitors-core");

@@ -49,12 +23,12 @@ // src/ValidationItem.ts

function getValidationItemsVisitor() {
const linkables = new import_visitors_core.LinkableDictionary();
const stack = new import_visitors_core.NodeStack();
return (0, import_visitors_core.pipe)(
(0, import_visitors_core.mergeVisitor)(
const linkables = new visitorsCore.LinkableDictionary();
const stack = new visitorsCore.NodeStack();
return visitorsCore.pipe(
visitorsCore.mergeVisitor(
() => [],
(_, items) => items.flat()
),
(v) => (0, import_visitors_core.recordLinkablesOnFirstVisitVisitor)(v, linkables),
(v) => (0, import_visitors_core.recordNodeStackVisitor)(v, stack),
(v) => (0, import_visitors_core.extendVisitor)(v, {
(v) => visitorsCore.recordLinkablesOnFirstVisitVisitor(v, linkables),
(v) => visitorsCore.recordNodeStackVisitor(v, stack),
(v) => visitorsCore.extendVisitor(v, {
visitAccount(node, { next }) {

@@ -160,9 +134,9 @@ const items = [];

});
const cyclicCheckVisitor = (0, import_visitors_core.getResolvedInstructionInputsVisitor)();
const cyclicCheckVisitor = visitorsCore.getResolvedInstructionInputsVisitor();
try {
(0, import_visitors_core.visit)(node, cyclicCheckVisitor);
visitorsCore.visit(node, cyclicCheckVisitor);
} catch (error) {
items.push(validationItem("error", error.message, node, stack));
}
const names = (0, import_nodes.getAllInstructionArguments)(node).map(({ name }) => (0, import_nodes.camelCase)(name));
const names = nodes.getAllInstructionArguments(node).map(({ name }) => nodes.camelCase(name));
const duplicates = names.filter((e, i, a) => a.indexOf(e) !== i);

@@ -181,5 +155,5 @@ const uniqueDuplicates = [...new Set(duplicates)];

}
(0, import_nodes.getAllInstructionArguments)(node).forEach((argument) => {
nodes.getAllInstructionArguments(node).forEach((argument) => {
const { defaultValue } = argument;
if ((0, import_nodes.isNode)(defaultValue, "accountBumpValueNode")) {
if (nodes.isNode(defaultValue, "accountBumpValueNode")) {
const defaultAccount = node.accounts.find((account) => account.name === defaultValue.name);

@@ -253,8 +227,4 @@ if (defaultAccount && defaultAccount.isSigner !== false) {

}
// src/throwValidatorItemsVisitor.ts
var import_errors = require("@codama/errors");
var import_visitors_core2 = require("@codama/visitors-core");
function throwValidatorItemsVisitor(visitor, throwLevel = "error") {
return (0, import_visitors_core2.mapVisitor)(visitor, (validationItems) => {
return visitorsCore.mapVisitor(visitor, (validationItems) => {
const levelHistogram = [...validationItems].sort((a, b) => getLevelIndex(b.level) - getLevelIndex(a.level)).reduce(

@@ -270,3 +240,3 @@ (acc, item) => {

const formattedHistogram = Object.keys(levelHistogram).map((level) => `${level}s: ${levelHistogram[level]}`).join(", ");
throw new import_errors.CodamaError(import_errors.CODAMA_ERROR__VISITORS__FAILED_TO_VALIDATE_NODE, {
throw new errors.CodamaError(errors.CODAMA_ERROR__VISITORS__FAILED_TO_VALIDATE_NODE, {
formattedHistogram,

@@ -278,10 +248,9 @@ validationItems

}
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
LOG_LEVELS,
getLevelIndex,
getValidationItemsVisitor,
throwValidatorItemsVisitor,
validationItem
});
exports.LOG_LEVELS = LOG_LEVELS;
exports.getLevelIndex = getLevelIndex;
exports.getValidationItemsVisitor = getValidationItemsVisitor;
exports.throwValidatorItemsVisitor = throwValidatorItemsVisitor;
exports.validationItem = validationItem;
//# sourceMappingURL=index.node.cjs.map
//# sourceMappingURL=index.node.cjs.map

@@ -1,1 +0,1 @@

{"version":3,"sources":["../src/index.ts","../src/getValidationItemsVisitor.ts","../src/ValidationItem.ts","../src/throwValidatorItemsVisitor.ts"],"sourcesContent":["export * from './getValidationItemsVisitor';\nexport * from './throwValidatorItemsVisitor';\nexport * from './ValidationItem';\n","import { camelCase, getAllInstructionArguments, isNode } from '@codama/nodes';\nimport {\n extendVisitor,\n getResolvedInstructionInputsVisitor,\n LinkableDictionary,\n mergeVisitor,\n NodeStack,\n pipe,\n recordLinkablesOnFirstVisitVisitor,\n recordNodeStackVisitor,\n visit,\n Visitor,\n} from '@codama/visitors-core';\n\nimport { ValidationItem, validationItem } from './ValidationItem';\n\nexport function getValidationItemsVisitor(): Visitor<readonly ValidationItem[]> {\n const linkables = new LinkableDictionary();\n const stack = new NodeStack();\n\n return pipe(\n mergeVisitor(\n () => [] as readonly ValidationItem[],\n (_, items) => items.flat(),\n ),\n v => recordLinkablesOnFirstVisitVisitor(v, linkables),\n v => recordNodeStackVisitor(v, stack),\n v =>\n extendVisitor(v, {\n visitAccount(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Account has no name.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitDefinedType(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Defined type has no name.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitDefinedTypeLink(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Pointing to a defined type with no name.', node, stack));\n } else if (!linkables.has(stack.getPath(node.kind))) {\n items.push(\n validationItem(\n 'error',\n `Pointing to a missing defined type named \"${node.name}\"`,\n node,\n stack,\n ),\n );\n }\n return [...items, ...next(node)];\n },\n\n visitEnumEmptyVariantType(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Enum variant has no name.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitEnumStructVariantType(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Enum variant has no name.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitEnumTupleVariantType(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Enum variant has no name.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitEnumType(node, { next }) {\n const items = [] as ValidationItem[];\n if (node.variants.length === 0) {\n items.push(validationItem('warn', 'Enum has no variants.', node, stack));\n }\n node.variants.forEach(variant => {\n if (!variant.name) {\n items.push(validationItem('error', 'Enum variant has no name.', node, stack));\n }\n });\n return [...items, ...next(node)];\n },\n\n visitError(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Error has no name.', node, stack));\n }\n if (typeof node.code !== 'number') {\n items.push(validationItem('error', 'Error has no code.', node, stack));\n }\n if (!node.message) {\n items.push(validationItem('warn', 'Error has no message.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitInstruction(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Instruction has no name.', node, stack));\n }\n\n // Check for duplicate account names.\n const accountNameHistogram = new Map<string, number>();\n node.accounts.forEach(account => {\n if (!account.name) {\n items.push(validationItem('error', 'Instruction account has no name.', node, stack));\n return;\n }\n const count = (accountNameHistogram.get(account.name) ?? 0) + 1;\n accountNameHistogram.set(account.name, count);\n // Only throw an error once per duplicated names.\n if (count === 2) {\n items.push(\n validationItem(\n 'error',\n `Account name \"${account.name}\" is not unique in instruction \"${node.name}\".`,\n node,\n stack,\n ),\n );\n }\n });\n\n // Check for cyclic dependencies in account defaults.\n const cyclicCheckVisitor = getResolvedInstructionInputsVisitor();\n try {\n visit(node, cyclicCheckVisitor);\n } catch (error) {\n items.push(validationItem('error', (error as Error).message, node, stack));\n }\n\n // Check args.\n const names = getAllInstructionArguments(node).map(({ name }) => camelCase(name));\n const duplicates = names.filter((e, i, a) => a.indexOf(e) !== i);\n const uniqueDuplicates = [...new Set(duplicates)];\n const hasConflictingNames = uniqueDuplicates.length > 0;\n if (hasConflictingNames) {\n items.push(\n validationItem(\n 'error',\n `The names of the following instruction arguments are conflicting: ` +\n `[${uniqueDuplicates.join(', ')}].`,\n node,\n stack,\n ),\n );\n }\n\n // Check arg defaults.\n getAllInstructionArguments(node).forEach(argument => {\n const { defaultValue } = argument;\n if (isNode(defaultValue, 'accountBumpValueNode')) {\n const defaultAccount = node.accounts.find(account => account.name === defaultValue.name);\n if (defaultAccount && defaultAccount.isSigner !== false) {\n items.push(\n validationItem(\n 'error',\n `Argument ${argument.name} cannot default to the bump attribute of ` +\n `the [${defaultValue.name}] account as it may be a Signer.`,\n node,\n stack,\n ),\n );\n }\n }\n });\n\n return [...items, ...next(node)];\n },\n\n visitProgram(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Program has no name.', node, stack));\n }\n if (!node.publicKey) {\n items.push(validationItem('error', 'Program has no public key.', node, stack));\n }\n if (!node.version) {\n items.push(validationItem('warn', 'Program has no version.', node, stack));\n }\n if (!node.origin) {\n items.push(validationItem('info', 'Program has no origin.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitStructFieldType(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Struct field has no name.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitStructType(node, { next }) {\n const items = [] as ValidationItem[];\n\n // Check for duplicate field names.\n const fieldNameHistogram = new Map<string, number>();\n node.fields.forEach(field => {\n if (!field.name) return; // Handled by TypeStructField\n const count = (fieldNameHistogram.get(field.name) ?? 0) + 1;\n fieldNameHistogram.set(field.name, count);\n // Only throw an error once per duplicated names.\n if (count === 2) {\n items.push(\n validationItem(\n 'error',\n `Struct field name \"${field.name}\" is not unique.`,\n field,\n stack,\n ),\n );\n }\n });\n return [...items, ...next(node)];\n },\n\n visitTupleType(node, { next }) {\n const items = [] as ValidationItem[];\n if (node.items.length === 0) {\n items.push(validationItem('warn', 'Tuple has no items.', node, stack));\n }\n return [...items, ...next(node)];\n },\n }),\n );\n}\n","import { Node } from '@codama/nodes';\nimport { NodePath, NodeStack } from '@codama/visitors-core';\n\nexport const LOG_LEVELS = ['debug', 'trace', 'info', 'warn', 'error'] as const;\nexport type LogLevel = (typeof LOG_LEVELS)[number];\n\nexport type ValidationItem = {\n level: LogLevel;\n message: string;\n node: Node;\n path: NodePath;\n};\n\nexport function validationItem(\n level: LogLevel,\n message: string,\n node: Node,\n path: NodePath | NodeStack,\n): ValidationItem {\n return {\n level,\n message,\n node,\n path: Array.isArray(path) ? path : (path as NodeStack).getPath(),\n };\n}\n\nexport const getLevelIndex = (level: LogLevel): number => LOG_LEVELS.indexOf(level);\n","import { CODAMA_ERROR__VISITORS__FAILED_TO_VALIDATE_NODE, CodamaError } from '@codama/errors';\nimport { NodeKind } from '@codama/nodes';\nimport { mapVisitor, Visitor } from '@codama/visitors-core';\n\nimport { getLevelIndex, LogLevel, ValidationItem } from './ValidationItem';\n\nexport function throwValidatorItemsVisitor<TNodeKind extends NodeKind = NodeKind>(\n visitor: Visitor<readonly ValidationItem[], TNodeKind>,\n throwLevel: LogLevel = 'error',\n): Visitor<void, TNodeKind> {\n return mapVisitor(visitor, validationItems => {\n const levelHistogram = [...validationItems]\n .sort((a, b) => getLevelIndex(b.level) - getLevelIndex(a.level))\n .reduce(\n (acc, item) => {\n acc[item.level] = (acc[item.level] ?? 0) + 1;\n return acc;\n },\n {} as Record<LogLevel, number>,\n );\n const maxLevel = Object.keys(levelHistogram)\n .map(level => getLevelIndex(level as LogLevel))\n .sort((a, b) => b - a)[0];\n\n if (maxLevel >= getLevelIndex(throwLevel)) {\n const formattedHistogram = Object.keys(levelHistogram)\n .map(level => `${level}s: ${levelHistogram[level as LogLevel]}`)\n .join(', ');\n throw new CodamaError(CODAMA_ERROR__VISITORS__FAILED_TO_VALIDATE_NODE, {\n formattedHistogram,\n validationItems,\n });\n }\n });\n}\n"],"mappings":"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","names":["import_visitors_core"]}
{"version":3,"sources":["../src/ValidationItem.ts","../src/getValidationItemsVisitor.ts","../src/throwValidatorItemsVisitor.ts"],"names":["LinkableDictionary","NodeStack","pipe","mergeVisitor","recordLinkablesOnFirstVisitVisitor","recordNodeStackVisitor","extendVisitor","getResolvedInstructionInputsVisitor","visit","getAllInstructionArguments","camelCase","isNode","mapVisitor","CodamaError","CODAMA_ERROR__VISITORS__FAILED_TO_VALIDATE_NODE"],"mappings":"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","file":"index.node.cjs","sourcesContent":["import { Node } from '@codama/nodes';\nimport { NodePath, NodeStack } from '@codama/visitors-core';\n\nexport const LOG_LEVELS = ['debug', 'trace', 'info', 'warn', 'error'] as const;\nexport type LogLevel = (typeof LOG_LEVELS)[number];\n\nexport type ValidationItem = {\n level: LogLevel;\n message: string;\n node: Node;\n path: NodePath;\n};\n\nexport function validationItem(\n level: LogLevel,\n message: string,\n node: Node,\n path: NodePath | NodeStack,\n): ValidationItem {\n return {\n level,\n message,\n node,\n path: Array.isArray(path) ? path : (path as NodeStack).getPath(),\n };\n}\n\nexport const getLevelIndex = (level: LogLevel): number => LOG_LEVELS.indexOf(level);\n","import { camelCase, getAllInstructionArguments, isNode } from '@codama/nodes';\nimport {\n extendVisitor,\n getResolvedInstructionInputsVisitor,\n LinkableDictionary,\n mergeVisitor,\n NodeStack,\n pipe,\n recordLinkablesOnFirstVisitVisitor,\n recordNodeStackVisitor,\n visit,\n Visitor,\n} from '@codama/visitors-core';\n\nimport { ValidationItem, validationItem } from './ValidationItem';\n\nexport function getValidationItemsVisitor(): Visitor<readonly ValidationItem[]> {\n const linkables = new LinkableDictionary();\n const stack = new NodeStack();\n\n return pipe(\n mergeVisitor(\n () => [] as readonly ValidationItem[],\n (_, items) => items.flat(),\n ),\n v => recordLinkablesOnFirstVisitVisitor(v, linkables),\n v => recordNodeStackVisitor(v, stack),\n v =>\n extendVisitor(v, {\n visitAccount(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Account has no name.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitDefinedType(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Defined type has no name.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitDefinedTypeLink(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Pointing to a defined type with no name.', node, stack));\n } else if (!linkables.has(stack.getPath(node.kind))) {\n items.push(\n validationItem(\n 'error',\n `Pointing to a missing defined type named \"${node.name}\"`,\n node,\n stack,\n ),\n );\n }\n return [...items, ...next(node)];\n },\n\n visitEnumEmptyVariantType(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Enum variant has no name.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitEnumStructVariantType(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Enum variant has no name.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitEnumTupleVariantType(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Enum variant has no name.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitEnumType(node, { next }) {\n const items = [] as ValidationItem[];\n if (node.variants.length === 0) {\n items.push(validationItem('warn', 'Enum has no variants.', node, stack));\n }\n node.variants.forEach(variant => {\n if (!variant.name) {\n items.push(validationItem('error', 'Enum variant has no name.', node, stack));\n }\n });\n return [...items, ...next(node)];\n },\n\n visitError(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Error has no name.', node, stack));\n }\n if (typeof node.code !== 'number') {\n items.push(validationItem('error', 'Error has no code.', node, stack));\n }\n if (!node.message) {\n items.push(validationItem('warn', 'Error has no message.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitInstruction(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Instruction has no name.', node, stack));\n }\n\n // Check for duplicate account names.\n const accountNameHistogram = new Map<string, number>();\n node.accounts.forEach(account => {\n if (!account.name) {\n items.push(validationItem('error', 'Instruction account has no name.', node, stack));\n return;\n }\n const count = (accountNameHistogram.get(account.name) ?? 0) + 1;\n accountNameHistogram.set(account.name, count);\n // Only throw an error once per duplicated names.\n if (count === 2) {\n items.push(\n validationItem(\n 'error',\n `Account name \"${account.name}\" is not unique in instruction \"${node.name}\".`,\n node,\n stack,\n ),\n );\n }\n });\n\n // Check for cyclic dependencies in account defaults.\n const cyclicCheckVisitor = getResolvedInstructionInputsVisitor();\n try {\n visit(node, cyclicCheckVisitor);\n } catch (error) {\n items.push(validationItem('error', (error as Error).message, node, stack));\n }\n\n // Check args.\n const names = getAllInstructionArguments(node).map(({ name }) => camelCase(name));\n const duplicates = names.filter((e, i, a) => a.indexOf(e) !== i);\n const uniqueDuplicates = [...new Set(duplicates)];\n const hasConflictingNames = uniqueDuplicates.length > 0;\n if (hasConflictingNames) {\n items.push(\n validationItem(\n 'error',\n `The names of the following instruction arguments are conflicting: ` +\n `[${uniqueDuplicates.join(', ')}].`,\n node,\n stack,\n ),\n );\n }\n\n // Check arg defaults.\n getAllInstructionArguments(node).forEach(argument => {\n const { defaultValue } = argument;\n if (isNode(defaultValue, 'accountBumpValueNode')) {\n const defaultAccount = node.accounts.find(account => account.name === defaultValue.name);\n if (defaultAccount && defaultAccount.isSigner !== false) {\n items.push(\n validationItem(\n 'error',\n `Argument ${argument.name} cannot default to the bump attribute of ` +\n `the [${defaultValue.name}] account as it may be a Signer.`,\n node,\n stack,\n ),\n );\n }\n }\n });\n\n return [...items, ...next(node)];\n },\n\n visitProgram(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Program has no name.', node, stack));\n }\n if (!node.publicKey) {\n items.push(validationItem('error', 'Program has no public key.', node, stack));\n }\n if (!node.version) {\n items.push(validationItem('warn', 'Program has no version.', node, stack));\n }\n if (!node.origin) {\n items.push(validationItem('info', 'Program has no origin.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitStructFieldType(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Struct field has no name.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitStructType(node, { next }) {\n const items = [] as ValidationItem[];\n\n // Check for duplicate field names.\n const fieldNameHistogram = new Map<string, number>();\n node.fields.forEach(field => {\n if (!field.name) return; // Handled by TypeStructField\n const count = (fieldNameHistogram.get(field.name) ?? 0) + 1;\n fieldNameHistogram.set(field.name, count);\n // Only throw an error once per duplicated names.\n if (count === 2) {\n items.push(\n validationItem(\n 'error',\n `Struct field name \"${field.name}\" is not unique.`,\n field,\n stack,\n ),\n );\n }\n });\n return [...items, ...next(node)];\n },\n\n visitTupleType(node, { next }) {\n const items = [] as ValidationItem[];\n if (node.items.length === 0) {\n items.push(validationItem('warn', 'Tuple has no items.', node, stack));\n }\n return [...items, ...next(node)];\n },\n }),\n );\n}\n","import { CODAMA_ERROR__VISITORS__FAILED_TO_VALIDATE_NODE, CodamaError } from '@codama/errors';\nimport { NodeKind } from '@codama/nodes';\nimport { mapVisitor, Visitor } from '@codama/visitors-core';\n\nimport { getLevelIndex, LogLevel, ValidationItem } from './ValidationItem';\n\nexport function throwValidatorItemsVisitor<TNodeKind extends NodeKind = NodeKind>(\n visitor: Visitor<readonly ValidationItem[], TNodeKind>,\n throwLevel: LogLevel = 'error',\n): Visitor<void, TNodeKind> {\n return mapVisitor(visitor, validationItems => {\n const levelHistogram = [...validationItems]\n .sort((a, b) => getLevelIndex(b.level) - getLevelIndex(a.level))\n .reduce(\n (acc, item) => {\n acc[item.level] = (acc[item.level] ?? 0) + 1;\n return acc;\n },\n {} as Record<LogLevel, number>,\n );\n const maxLevel = Object.keys(levelHistogram)\n .map(level => getLevelIndex(level as LogLevel))\n .sort((a, b) => b - a)[0];\n\n if (maxLevel >= getLevelIndex(throwLevel)) {\n const formattedHistogram = Object.keys(levelHistogram)\n .map(level => `${level}s: ${levelHistogram[level as LogLevel]}`)\n .join(', ');\n throw new CodamaError(CODAMA_ERROR__VISITORS__FAILED_TO_VALIDATE_NODE, {\n formattedHistogram,\n validationItems,\n });\n }\n });\n}\n"]}

@@ -0,14 +1,6 @@

import { getAllInstructionArguments, camelCase, isNode } from '@codama/nodes';
import { LinkableDictionary, NodeStack, pipe, mergeVisitor, recordLinkablesOnFirstVisitVisitor, recordNodeStackVisitor, extendVisitor, getResolvedInstructionInputsVisitor, visit, mapVisitor } from '@codama/visitors-core';
import { CodamaError, CODAMA_ERROR__VISITORS__FAILED_TO_VALIDATE_NODE } from '@codama/errors';
// src/getValidationItemsVisitor.ts
import { camelCase, getAllInstructionArguments, isNode } from "@codama/nodes";
import {
extendVisitor,
getResolvedInstructionInputsVisitor,
LinkableDictionary,
mergeVisitor,
NodeStack,
pipe,
recordLinkablesOnFirstVisitVisitor,
recordNodeStackVisitor,
visit
} from "@codama/visitors-core";

@@ -230,6 +222,2 @@ // src/ValidationItem.ts

}
// src/throwValidatorItemsVisitor.ts
import { CODAMA_ERROR__VISITORS__FAILED_TO_VALIDATE_NODE, CodamaError } from "@codama/errors";
import { mapVisitor } from "@codama/visitors-core";
function throwValidatorItemsVisitor(visitor, throwLevel = "error") {

@@ -254,9 +242,5 @@ return mapVisitor(visitor, (validationItems) => {

}
export {
LOG_LEVELS,
getLevelIndex,
getValidationItemsVisitor,
throwValidatorItemsVisitor,
validationItem
};
export { LOG_LEVELS, getLevelIndex, getValidationItemsVisitor, throwValidatorItemsVisitor, validationItem };
//# sourceMappingURL=index.node.mjs.map
//# sourceMappingURL=index.node.mjs.map

@@ -1,1 +0,1 @@

{"version":3,"sources":["../src/getValidationItemsVisitor.ts","../src/ValidationItem.ts","../src/throwValidatorItemsVisitor.ts"],"sourcesContent":["import { camelCase, getAllInstructionArguments, isNode } from '@codama/nodes';\nimport {\n extendVisitor,\n getResolvedInstructionInputsVisitor,\n LinkableDictionary,\n mergeVisitor,\n NodeStack,\n pipe,\n recordLinkablesOnFirstVisitVisitor,\n recordNodeStackVisitor,\n visit,\n Visitor,\n} from '@codama/visitors-core';\n\nimport { ValidationItem, validationItem } from './ValidationItem';\n\nexport function getValidationItemsVisitor(): Visitor<readonly ValidationItem[]> {\n const linkables = new LinkableDictionary();\n const stack = new NodeStack();\n\n return pipe(\n mergeVisitor(\n () => [] as readonly ValidationItem[],\n (_, items) => items.flat(),\n ),\n v => recordLinkablesOnFirstVisitVisitor(v, linkables),\n v => recordNodeStackVisitor(v, stack),\n v =>\n extendVisitor(v, {\n visitAccount(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Account has no name.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitDefinedType(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Defined type has no name.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitDefinedTypeLink(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Pointing to a defined type with no name.', node, stack));\n } else if (!linkables.has(stack.getPath(node.kind))) {\n items.push(\n validationItem(\n 'error',\n `Pointing to a missing defined type named \"${node.name}\"`,\n node,\n stack,\n ),\n );\n }\n return [...items, ...next(node)];\n },\n\n visitEnumEmptyVariantType(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Enum variant has no name.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitEnumStructVariantType(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Enum variant has no name.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitEnumTupleVariantType(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Enum variant has no name.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitEnumType(node, { next }) {\n const items = [] as ValidationItem[];\n if (node.variants.length === 0) {\n items.push(validationItem('warn', 'Enum has no variants.', node, stack));\n }\n node.variants.forEach(variant => {\n if (!variant.name) {\n items.push(validationItem('error', 'Enum variant has no name.', node, stack));\n }\n });\n return [...items, ...next(node)];\n },\n\n visitError(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Error has no name.', node, stack));\n }\n if (typeof node.code !== 'number') {\n items.push(validationItem('error', 'Error has no code.', node, stack));\n }\n if (!node.message) {\n items.push(validationItem('warn', 'Error has no message.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitInstruction(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Instruction has no name.', node, stack));\n }\n\n // Check for duplicate account names.\n const accountNameHistogram = new Map<string, number>();\n node.accounts.forEach(account => {\n if (!account.name) {\n items.push(validationItem('error', 'Instruction account has no name.', node, stack));\n return;\n }\n const count = (accountNameHistogram.get(account.name) ?? 0) + 1;\n accountNameHistogram.set(account.name, count);\n // Only throw an error once per duplicated names.\n if (count === 2) {\n items.push(\n validationItem(\n 'error',\n `Account name \"${account.name}\" is not unique in instruction \"${node.name}\".`,\n node,\n stack,\n ),\n );\n }\n });\n\n // Check for cyclic dependencies in account defaults.\n const cyclicCheckVisitor = getResolvedInstructionInputsVisitor();\n try {\n visit(node, cyclicCheckVisitor);\n } catch (error) {\n items.push(validationItem('error', (error as Error).message, node, stack));\n }\n\n // Check args.\n const names = getAllInstructionArguments(node).map(({ name }) => camelCase(name));\n const duplicates = names.filter((e, i, a) => a.indexOf(e) !== i);\n const uniqueDuplicates = [...new Set(duplicates)];\n const hasConflictingNames = uniqueDuplicates.length > 0;\n if (hasConflictingNames) {\n items.push(\n validationItem(\n 'error',\n `The names of the following instruction arguments are conflicting: ` +\n `[${uniqueDuplicates.join(', ')}].`,\n node,\n stack,\n ),\n );\n }\n\n // Check arg defaults.\n getAllInstructionArguments(node).forEach(argument => {\n const { defaultValue } = argument;\n if (isNode(defaultValue, 'accountBumpValueNode')) {\n const defaultAccount = node.accounts.find(account => account.name === defaultValue.name);\n if (defaultAccount && defaultAccount.isSigner !== false) {\n items.push(\n validationItem(\n 'error',\n `Argument ${argument.name} cannot default to the bump attribute of ` +\n `the [${defaultValue.name}] account as it may be a Signer.`,\n node,\n stack,\n ),\n );\n }\n }\n });\n\n return [...items, ...next(node)];\n },\n\n visitProgram(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Program has no name.', node, stack));\n }\n if (!node.publicKey) {\n items.push(validationItem('error', 'Program has no public key.', node, stack));\n }\n if (!node.version) {\n items.push(validationItem('warn', 'Program has no version.', node, stack));\n }\n if (!node.origin) {\n items.push(validationItem('info', 'Program has no origin.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitStructFieldType(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Struct field has no name.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitStructType(node, { next }) {\n const items = [] as ValidationItem[];\n\n // Check for duplicate field names.\n const fieldNameHistogram = new Map<string, number>();\n node.fields.forEach(field => {\n if (!field.name) return; // Handled by TypeStructField\n const count = (fieldNameHistogram.get(field.name) ?? 0) + 1;\n fieldNameHistogram.set(field.name, count);\n // Only throw an error once per duplicated names.\n if (count === 2) {\n items.push(\n validationItem(\n 'error',\n `Struct field name \"${field.name}\" is not unique.`,\n field,\n stack,\n ),\n );\n }\n });\n return [...items, ...next(node)];\n },\n\n visitTupleType(node, { next }) {\n const items = [] as ValidationItem[];\n if (node.items.length === 0) {\n items.push(validationItem('warn', 'Tuple has no items.', node, stack));\n }\n return [...items, ...next(node)];\n },\n }),\n );\n}\n","import { Node } from '@codama/nodes';\nimport { NodePath, NodeStack } from '@codama/visitors-core';\n\nexport const LOG_LEVELS = ['debug', 'trace', 'info', 'warn', 'error'] as const;\nexport type LogLevel = (typeof LOG_LEVELS)[number];\n\nexport type ValidationItem = {\n level: LogLevel;\n message: string;\n node: Node;\n path: NodePath;\n};\n\nexport function validationItem(\n level: LogLevel,\n message: string,\n node: Node,\n path: NodePath | NodeStack,\n): ValidationItem {\n return {\n level,\n message,\n node,\n path: Array.isArray(path) ? path : (path as NodeStack).getPath(),\n };\n}\n\nexport const getLevelIndex = (level: LogLevel): number => LOG_LEVELS.indexOf(level);\n","import { CODAMA_ERROR__VISITORS__FAILED_TO_VALIDATE_NODE, CodamaError } from '@codama/errors';\nimport { NodeKind } from '@codama/nodes';\nimport { mapVisitor, Visitor } from '@codama/visitors-core';\n\nimport { getLevelIndex, LogLevel, ValidationItem } from './ValidationItem';\n\nexport function throwValidatorItemsVisitor<TNodeKind extends NodeKind = NodeKind>(\n visitor: Visitor<readonly ValidationItem[], TNodeKind>,\n throwLevel: LogLevel = 'error',\n): Visitor<void, TNodeKind> {\n return mapVisitor(visitor, validationItems => {\n const levelHistogram = [...validationItems]\n .sort((a, b) => getLevelIndex(b.level) - getLevelIndex(a.level))\n .reduce(\n (acc, item) => {\n acc[item.level] = (acc[item.level] ?? 0) + 1;\n return acc;\n },\n {} as Record<LogLevel, number>,\n );\n const maxLevel = Object.keys(levelHistogram)\n .map(level => getLevelIndex(level as LogLevel))\n .sort((a, b) => b - a)[0];\n\n if (maxLevel >= getLevelIndex(throwLevel)) {\n const formattedHistogram = Object.keys(levelHistogram)\n .map(level => `${level}s: ${levelHistogram[level as LogLevel]}`)\n .join(', ');\n throw new CodamaError(CODAMA_ERROR__VISITORS__FAILED_TO_VALIDATE_NODE, {\n formattedHistogram,\n validationItems,\n });\n }\n });\n}\n"],"mappings":"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","names":[]}
{"version":3,"sources":["../src/ValidationItem.ts","../src/getValidationItemsVisitor.ts","../src/throwValidatorItemsVisitor.ts"],"names":[],"mappings":"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","file":"index.node.mjs","sourcesContent":["import { Node } from '@codama/nodes';\nimport { NodePath, NodeStack } from '@codama/visitors-core';\n\nexport const LOG_LEVELS = ['debug', 'trace', 'info', 'warn', 'error'] as const;\nexport type LogLevel = (typeof LOG_LEVELS)[number];\n\nexport type ValidationItem = {\n level: LogLevel;\n message: string;\n node: Node;\n path: NodePath;\n};\n\nexport function validationItem(\n level: LogLevel,\n message: string,\n node: Node,\n path: NodePath | NodeStack,\n): ValidationItem {\n return {\n level,\n message,\n node,\n path: Array.isArray(path) ? path : (path as NodeStack).getPath(),\n };\n}\n\nexport const getLevelIndex = (level: LogLevel): number => LOG_LEVELS.indexOf(level);\n","import { camelCase, getAllInstructionArguments, isNode } from '@codama/nodes';\nimport {\n extendVisitor,\n getResolvedInstructionInputsVisitor,\n LinkableDictionary,\n mergeVisitor,\n NodeStack,\n pipe,\n recordLinkablesOnFirstVisitVisitor,\n recordNodeStackVisitor,\n visit,\n Visitor,\n} from '@codama/visitors-core';\n\nimport { ValidationItem, validationItem } from './ValidationItem';\n\nexport function getValidationItemsVisitor(): Visitor<readonly ValidationItem[]> {\n const linkables = new LinkableDictionary();\n const stack = new NodeStack();\n\n return pipe(\n mergeVisitor(\n () => [] as readonly ValidationItem[],\n (_, items) => items.flat(),\n ),\n v => recordLinkablesOnFirstVisitVisitor(v, linkables),\n v => recordNodeStackVisitor(v, stack),\n v =>\n extendVisitor(v, {\n visitAccount(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Account has no name.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitDefinedType(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Defined type has no name.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitDefinedTypeLink(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Pointing to a defined type with no name.', node, stack));\n } else if (!linkables.has(stack.getPath(node.kind))) {\n items.push(\n validationItem(\n 'error',\n `Pointing to a missing defined type named \"${node.name}\"`,\n node,\n stack,\n ),\n );\n }\n return [...items, ...next(node)];\n },\n\n visitEnumEmptyVariantType(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Enum variant has no name.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitEnumStructVariantType(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Enum variant has no name.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitEnumTupleVariantType(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Enum variant has no name.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitEnumType(node, { next }) {\n const items = [] as ValidationItem[];\n if (node.variants.length === 0) {\n items.push(validationItem('warn', 'Enum has no variants.', node, stack));\n }\n node.variants.forEach(variant => {\n if (!variant.name) {\n items.push(validationItem('error', 'Enum variant has no name.', node, stack));\n }\n });\n return [...items, ...next(node)];\n },\n\n visitError(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Error has no name.', node, stack));\n }\n if (typeof node.code !== 'number') {\n items.push(validationItem('error', 'Error has no code.', node, stack));\n }\n if (!node.message) {\n items.push(validationItem('warn', 'Error has no message.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitInstruction(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Instruction has no name.', node, stack));\n }\n\n // Check for duplicate account names.\n const accountNameHistogram = new Map<string, number>();\n node.accounts.forEach(account => {\n if (!account.name) {\n items.push(validationItem('error', 'Instruction account has no name.', node, stack));\n return;\n }\n const count = (accountNameHistogram.get(account.name) ?? 0) + 1;\n accountNameHistogram.set(account.name, count);\n // Only throw an error once per duplicated names.\n if (count === 2) {\n items.push(\n validationItem(\n 'error',\n `Account name \"${account.name}\" is not unique in instruction \"${node.name}\".`,\n node,\n stack,\n ),\n );\n }\n });\n\n // Check for cyclic dependencies in account defaults.\n const cyclicCheckVisitor = getResolvedInstructionInputsVisitor();\n try {\n visit(node, cyclicCheckVisitor);\n } catch (error) {\n items.push(validationItem('error', (error as Error).message, node, stack));\n }\n\n // Check args.\n const names = getAllInstructionArguments(node).map(({ name }) => camelCase(name));\n const duplicates = names.filter((e, i, a) => a.indexOf(e) !== i);\n const uniqueDuplicates = [...new Set(duplicates)];\n const hasConflictingNames = uniqueDuplicates.length > 0;\n if (hasConflictingNames) {\n items.push(\n validationItem(\n 'error',\n `The names of the following instruction arguments are conflicting: ` +\n `[${uniqueDuplicates.join(', ')}].`,\n node,\n stack,\n ),\n );\n }\n\n // Check arg defaults.\n getAllInstructionArguments(node).forEach(argument => {\n const { defaultValue } = argument;\n if (isNode(defaultValue, 'accountBumpValueNode')) {\n const defaultAccount = node.accounts.find(account => account.name === defaultValue.name);\n if (defaultAccount && defaultAccount.isSigner !== false) {\n items.push(\n validationItem(\n 'error',\n `Argument ${argument.name} cannot default to the bump attribute of ` +\n `the [${defaultValue.name}] account as it may be a Signer.`,\n node,\n stack,\n ),\n );\n }\n }\n });\n\n return [...items, ...next(node)];\n },\n\n visitProgram(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Program has no name.', node, stack));\n }\n if (!node.publicKey) {\n items.push(validationItem('error', 'Program has no public key.', node, stack));\n }\n if (!node.version) {\n items.push(validationItem('warn', 'Program has no version.', node, stack));\n }\n if (!node.origin) {\n items.push(validationItem('info', 'Program has no origin.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitStructFieldType(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Struct field has no name.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitStructType(node, { next }) {\n const items = [] as ValidationItem[];\n\n // Check for duplicate field names.\n const fieldNameHistogram = new Map<string, number>();\n node.fields.forEach(field => {\n if (!field.name) return; // Handled by TypeStructField\n const count = (fieldNameHistogram.get(field.name) ?? 0) + 1;\n fieldNameHistogram.set(field.name, count);\n // Only throw an error once per duplicated names.\n if (count === 2) {\n items.push(\n validationItem(\n 'error',\n `Struct field name \"${field.name}\" is not unique.`,\n field,\n stack,\n ),\n );\n }\n });\n return [...items, ...next(node)];\n },\n\n visitTupleType(node, { next }) {\n const items = [] as ValidationItem[];\n if (node.items.length === 0) {\n items.push(validationItem('warn', 'Tuple has no items.', node, stack));\n }\n return [...items, ...next(node)];\n },\n }),\n );\n}\n","import { CODAMA_ERROR__VISITORS__FAILED_TO_VALIDATE_NODE, CodamaError } from '@codama/errors';\nimport { NodeKind } from '@codama/nodes';\nimport { mapVisitor, Visitor } from '@codama/visitors-core';\n\nimport { getLevelIndex, LogLevel, ValidationItem } from './ValidationItem';\n\nexport function throwValidatorItemsVisitor<TNodeKind extends NodeKind = NodeKind>(\n visitor: Visitor<readonly ValidationItem[], TNodeKind>,\n throwLevel: LogLevel = 'error',\n): Visitor<void, TNodeKind> {\n return mapVisitor(visitor, validationItems => {\n const levelHistogram = [...validationItems]\n .sort((a, b) => getLevelIndex(b.level) - getLevelIndex(a.level))\n .reduce(\n (acc, item) => {\n acc[item.level] = (acc[item.level] ?? 0) + 1;\n return acc;\n },\n {} as Record<LogLevel, number>,\n );\n const maxLevel = Object.keys(levelHistogram)\n .map(level => getLevelIndex(level as LogLevel))\n .sort((a, b) => b - a)[0];\n\n if (maxLevel >= getLevelIndex(throwLevel)) {\n const formattedHistogram = Object.keys(levelHistogram)\n .map(level => `${level}s: ${levelHistogram[level as LogLevel]}`)\n .join(', ');\n throw new CodamaError(CODAMA_ERROR__VISITORS__FAILED_TO_VALIDATE_NODE, {\n formattedHistogram,\n validationItems,\n });\n }\n });\n}\n"]}

@@ -0,14 +1,6 @@

import { getAllInstructionArguments, camelCase, isNode } from '@codama/nodes';
import { LinkableDictionary, NodeStack, pipe, mergeVisitor, recordLinkablesOnFirstVisitVisitor, recordNodeStackVisitor, extendVisitor, getResolvedInstructionInputsVisitor, visit, mapVisitor } from '@codama/visitors-core';
import { CodamaError, CODAMA_ERROR__VISITORS__FAILED_TO_VALIDATE_NODE } from '@codama/errors';
// src/getValidationItemsVisitor.ts
import { camelCase, getAllInstructionArguments, isNode } from "@codama/nodes";
import {
extendVisitor,
getResolvedInstructionInputsVisitor,
LinkableDictionary,
mergeVisitor,
NodeStack,
pipe,
recordLinkablesOnFirstVisitVisitor,
recordNodeStackVisitor,
visit
} from "@codama/visitors-core";

@@ -230,6 +222,2 @@ // src/ValidationItem.ts

}
// src/throwValidatorItemsVisitor.ts
import { CODAMA_ERROR__VISITORS__FAILED_TO_VALIDATE_NODE, CodamaError } from "@codama/errors";
import { mapVisitor } from "@codama/visitors-core";
function throwValidatorItemsVisitor(visitor, throwLevel = "error") {

@@ -254,9 +242,5 @@ return mapVisitor(visitor, (validationItems) => {

}
export {
LOG_LEVELS,
getLevelIndex,
getValidationItemsVisitor,
throwValidatorItemsVisitor,
validationItem
};
export { LOG_LEVELS, getLevelIndex, getValidationItemsVisitor, throwValidatorItemsVisitor, validationItem };
//# sourceMappingURL=index.react-native.mjs.map
//# sourceMappingURL=index.react-native.mjs.map

@@ -1,1 +0,1 @@

{"version":3,"sources":["../src/getValidationItemsVisitor.ts","../src/ValidationItem.ts","../src/throwValidatorItemsVisitor.ts"],"sourcesContent":["import { camelCase, getAllInstructionArguments, isNode } from '@codama/nodes';\nimport {\n extendVisitor,\n getResolvedInstructionInputsVisitor,\n LinkableDictionary,\n mergeVisitor,\n NodeStack,\n pipe,\n recordLinkablesOnFirstVisitVisitor,\n recordNodeStackVisitor,\n visit,\n Visitor,\n} from '@codama/visitors-core';\n\nimport { ValidationItem, validationItem } from './ValidationItem';\n\nexport function getValidationItemsVisitor(): Visitor<readonly ValidationItem[]> {\n const linkables = new LinkableDictionary();\n const stack = new NodeStack();\n\n return pipe(\n mergeVisitor(\n () => [] as readonly ValidationItem[],\n (_, items) => items.flat(),\n ),\n v => recordLinkablesOnFirstVisitVisitor(v, linkables),\n v => recordNodeStackVisitor(v, stack),\n v =>\n extendVisitor(v, {\n visitAccount(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Account has no name.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitDefinedType(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Defined type has no name.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitDefinedTypeLink(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Pointing to a defined type with no name.', node, stack));\n } else if (!linkables.has(stack.getPath(node.kind))) {\n items.push(\n validationItem(\n 'error',\n `Pointing to a missing defined type named \"${node.name}\"`,\n node,\n stack,\n ),\n );\n }\n return [...items, ...next(node)];\n },\n\n visitEnumEmptyVariantType(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Enum variant has no name.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitEnumStructVariantType(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Enum variant has no name.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitEnumTupleVariantType(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Enum variant has no name.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitEnumType(node, { next }) {\n const items = [] as ValidationItem[];\n if (node.variants.length === 0) {\n items.push(validationItem('warn', 'Enum has no variants.', node, stack));\n }\n node.variants.forEach(variant => {\n if (!variant.name) {\n items.push(validationItem('error', 'Enum variant has no name.', node, stack));\n }\n });\n return [...items, ...next(node)];\n },\n\n visitError(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Error has no name.', node, stack));\n }\n if (typeof node.code !== 'number') {\n items.push(validationItem('error', 'Error has no code.', node, stack));\n }\n if (!node.message) {\n items.push(validationItem('warn', 'Error has no message.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitInstruction(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Instruction has no name.', node, stack));\n }\n\n // Check for duplicate account names.\n const accountNameHistogram = new Map<string, number>();\n node.accounts.forEach(account => {\n if (!account.name) {\n items.push(validationItem('error', 'Instruction account has no name.', node, stack));\n return;\n }\n const count = (accountNameHistogram.get(account.name) ?? 0) + 1;\n accountNameHistogram.set(account.name, count);\n // Only throw an error once per duplicated names.\n if (count === 2) {\n items.push(\n validationItem(\n 'error',\n `Account name \"${account.name}\" is not unique in instruction \"${node.name}\".`,\n node,\n stack,\n ),\n );\n }\n });\n\n // Check for cyclic dependencies in account defaults.\n const cyclicCheckVisitor = getResolvedInstructionInputsVisitor();\n try {\n visit(node, cyclicCheckVisitor);\n } catch (error) {\n items.push(validationItem('error', (error as Error).message, node, stack));\n }\n\n // Check args.\n const names = getAllInstructionArguments(node).map(({ name }) => camelCase(name));\n const duplicates = names.filter((e, i, a) => a.indexOf(e) !== i);\n const uniqueDuplicates = [...new Set(duplicates)];\n const hasConflictingNames = uniqueDuplicates.length > 0;\n if (hasConflictingNames) {\n items.push(\n validationItem(\n 'error',\n `The names of the following instruction arguments are conflicting: ` +\n `[${uniqueDuplicates.join(', ')}].`,\n node,\n stack,\n ),\n );\n }\n\n // Check arg defaults.\n getAllInstructionArguments(node).forEach(argument => {\n const { defaultValue } = argument;\n if (isNode(defaultValue, 'accountBumpValueNode')) {\n const defaultAccount = node.accounts.find(account => account.name === defaultValue.name);\n if (defaultAccount && defaultAccount.isSigner !== false) {\n items.push(\n validationItem(\n 'error',\n `Argument ${argument.name} cannot default to the bump attribute of ` +\n `the [${defaultValue.name}] account as it may be a Signer.`,\n node,\n stack,\n ),\n );\n }\n }\n });\n\n return [...items, ...next(node)];\n },\n\n visitProgram(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Program has no name.', node, stack));\n }\n if (!node.publicKey) {\n items.push(validationItem('error', 'Program has no public key.', node, stack));\n }\n if (!node.version) {\n items.push(validationItem('warn', 'Program has no version.', node, stack));\n }\n if (!node.origin) {\n items.push(validationItem('info', 'Program has no origin.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitStructFieldType(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Struct field has no name.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitStructType(node, { next }) {\n const items = [] as ValidationItem[];\n\n // Check for duplicate field names.\n const fieldNameHistogram = new Map<string, number>();\n node.fields.forEach(field => {\n if (!field.name) return; // Handled by TypeStructField\n const count = (fieldNameHistogram.get(field.name) ?? 0) + 1;\n fieldNameHistogram.set(field.name, count);\n // Only throw an error once per duplicated names.\n if (count === 2) {\n items.push(\n validationItem(\n 'error',\n `Struct field name \"${field.name}\" is not unique.`,\n field,\n stack,\n ),\n );\n }\n });\n return [...items, ...next(node)];\n },\n\n visitTupleType(node, { next }) {\n const items = [] as ValidationItem[];\n if (node.items.length === 0) {\n items.push(validationItem('warn', 'Tuple has no items.', node, stack));\n }\n return [...items, ...next(node)];\n },\n }),\n );\n}\n","import { Node } from '@codama/nodes';\nimport { NodePath, NodeStack } from '@codama/visitors-core';\n\nexport const LOG_LEVELS = ['debug', 'trace', 'info', 'warn', 'error'] as const;\nexport type LogLevel = (typeof LOG_LEVELS)[number];\n\nexport type ValidationItem = {\n level: LogLevel;\n message: string;\n node: Node;\n path: NodePath;\n};\n\nexport function validationItem(\n level: LogLevel,\n message: string,\n node: Node,\n path: NodePath | NodeStack,\n): ValidationItem {\n return {\n level,\n message,\n node,\n path: Array.isArray(path) ? path : (path as NodeStack).getPath(),\n };\n}\n\nexport const getLevelIndex = (level: LogLevel): number => LOG_LEVELS.indexOf(level);\n","import { CODAMA_ERROR__VISITORS__FAILED_TO_VALIDATE_NODE, CodamaError } from '@codama/errors';\nimport { NodeKind } from '@codama/nodes';\nimport { mapVisitor, Visitor } from '@codama/visitors-core';\n\nimport { getLevelIndex, LogLevel, ValidationItem } from './ValidationItem';\n\nexport function throwValidatorItemsVisitor<TNodeKind extends NodeKind = NodeKind>(\n visitor: Visitor<readonly ValidationItem[], TNodeKind>,\n throwLevel: LogLevel = 'error',\n): Visitor<void, TNodeKind> {\n return mapVisitor(visitor, validationItems => {\n const levelHistogram = [...validationItems]\n .sort((a, b) => getLevelIndex(b.level) - getLevelIndex(a.level))\n .reduce(\n (acc, item) => {\n acc[item.level] = (acc[item.level] ?? 0) + 1;\n return acc;\n },\n {} as Record<LogLevel, number>,\n );\n const maxLevel = Object.keys(levelHistogram)\n .map(level => getLevelIndex(level as LogLevel))\n .sort((a, b) => b - a)[0];\n\n if (maxLevel >= getLevelIndex(throwLevel)) {\n const formattedHistogram = Object.keys(levelHistogram)\n .map(level => `${level}s: ${levelHistogram[level as LogLevel]}`)\n .join(', ');\n throw new CodamaError(CODAMA_ERROR__VISITORS__FAILED_TO_VALIDATE_NODE, {\n formattedHistogram,\n validationItems,\n });\n }\n });\n}\n"],"mappings":"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","names":[]}
{"version":3,"sources":["../src/ValidationItem.ts","../src/getValidationItemsVisitor.ts","../src/throwValidatorItemsVisitor.ts"],"names":[],"mappings":"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","file":"index.react-native.mjs","sourcesContent":["import { Node } from '@codama/nodes';\nimport { NodePath, NodeStack } from '@codama/visitors-core';\n\nexport const LOG_LEVELS = ['debug', 'trace', 'info', 'warn', 'error'] as const;\nexport type LogLevel = (typeof LOG_LEVELS)[number];\n\nexport type ValidationItem = {\n level: LogLevel;\n message: string;\n node: Node;\n path: NodePath;\n};\n\nexport function validationItem(\n level: LogLevel,\n message: string,\n node: Node,\n path: NodePath | NodeStack,\n): ValidationItem {\n return {\n level,\n message,\n node,\n path: Array.isArray(path) ? path : (path as NodeStack).getPath(),\n };\n}\n\nexport const getLevelIndex = (level: LogLevel): number => LOG_LEVELS.indexOf(level);\n","import { camelCase, getAllInstructionArguments, isNode } from '@codama/nodes';\nimport {\n extendVisitor,\n getResolvedInstructionInputsVisitor,\n LinkableDictionary,\n mergeVisitor,\n NodeStack,\n pipe,\n recordLinkablesOnFirstVisitVisitor,\n recordNodeStackVisitor,\n visit,\n Visitor,\n} from '@codama/visitors-core';\n\nimport { ValidationItem, validationItem } from './ValidationItem';\n\nexport function getValidationItemsVisitor(): Visitor<readonly ValidationItem[]> {\n const linkables = new LinkableDictionary();\n const stack = new NodeStack();\n\n return pipe(\n mergeVisitor(\n () => [] as readonly ValidationItem[],\n (_, items) => items.flat(),\n ),\n v => recordLinkablesOnFirstVisitVisitor(v, linkables),\n v => recordNodeStackVisitor(v, stack),\n v =>\n extendVisitor(v, {\n visitAccount(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Account has no name.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitDefinedType(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Defined type has no name.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitDefinedTypeLink(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Pointing to a defined type with no name.', node, stack));\n } else if (!linkables.has(stack.getPath(node.kind))) {\n items.push(\n validationItem(\n 'error',\n `Pointing to a missing defined type named \"${node.name}\"`,\n node,\n stack,\n ),\n );\n }\n return [...items, ...next(node)];\n },\n\n visitEnumEmptyVariantType(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Enum variant has no name.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitEnumStructVariantType(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Enum variant has no name.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitEnumTupleVariantType(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Enum variant has no name.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitEnumType(node, { next }) {\n const items = [] as ValidationItem[];\n if (node.variants.length === 0) {\n items.push(validationItem('warn', 'Enum has no variants.', node, stack));\n }\n node.variants.forEach(variant => {\n if (!variant.name) {\n items.push(validationItem('error', 'Enum variant has no name.', node, stack));\n }\n });\n return [...items, ...next(node)];\n },\n\n visitError(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Error has no name.', node, stack));\n }\n if (typeof node.code !== 'number') {\n items.push(validationItem('error', 'Error has no code.', node, stack));\n }\n if (!node.message) {\n items.push(validationItem('warn', 'Error has no message.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitInstruction(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Instruction has no name.', node, stack));\n }\n\n // Check for duplicate account names.\n const accountNameHistogram = new Map<string, number>();\n node.accounts.forEach(account => {\n if (!account.name) {\n items.push(validationItem('error', 'Instruction account has no name.', node, stack));\n return;\n }\n const count = (accountNameHistogram.get(account.name) ?? 0) + 1;\n accountNameHistogram.set(account.name, count);\n // Only throw an error once per duplicated names.\n if (count === 2) {\n items.push(\n validationItem(\n 'error',\n `Account name \"${account.name}\" is not unique in instruction \"${node.name}\".`,\n node,\n stack,\n ),\n );\n }\n });\n\n // Check for cyclic dependencies in account defaults.\n const cyclicCheckVisitor = getResolvedInstructionInputsVisitor();\n try {\n visit(node, cyclicCheckVisitor);\n } catch (error) {\n items.push(validationItem('error', (error as Error).message, node, stack));\n }\n\n // Check args.\n const names = getAllInstructionArguments(node).map(({ name }) => camelCase(name));\n const duplicates = names.filter((e, i, a) => a.indexOf(e) !== i);\n const uniqueDuplicates = [...new Set(duplicates)];\n const hasConflictingNames = uniqueDuplicates.length > 0;\n if (hasConflictingNames) {\n items.push(\n validationItem(\n 'error',\n `The names of the following instruction arguments are conflicting: ` +\n `[${uniqueDuplicates.join(', ')}].`,\n node,\n stack,\n ),\n );\n }\n\n // Check arg defaults.\n getAllInstructionArguments(node).forEach(argument => {\n const { defaultValue } = argument;\n if (isNode(defaultValue, 'accountBumpValueNode')) {\n const defaultAccount = node.accounts.find(account => account.name === defaultValue.name);\n if (defaultAccount && defaultAccount.isSigner !== false) {\n items.push(\n validationItem(\n 'error',\n `Argument ${argument.name} cannot default to the bump attribute of ` +\n `the [${defaultValue.name}] account as it may be a Signer.`,\n node,\n stack,\n ),\n );\n }\n }\n });\n\n return [...items, ...next(node)];\n },\n\n visitProgram(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Program has no name.', node, stack));\n }\n if (!node.publicKey) {\n items.push(validationItem('error', 'Program has no public key.', node, stack));\n }\n if (!node.version) {\n items.push(validationItem('warn', 'Program has no version.', node, stack));\n }\n if (!node.origin) {\n items.push(validationItem('info', 'Program has no origin.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitStructFieldType(node, { next }) {\n const items = [] as ValidationItem[];\n if (!node.name) {\n items.push(validationItem('error', 'Struct field has no name.', node, stack));\n }\n return [...items, ...next(node)];\n },\n\n visitStructType(node, { next }) {\n const items = [] as ValidationItem[];\n\n // Check for duplicate field names.\n const fieldNameHistogram = new Map<string, number>();\n node.fields.forEach(field => {\n if (!field.name) return; // Handled by TypeStructField\n const count = (fieldNameHistogram.get(field.name) ?? 0) + 1;\n fieldNameHistogram.set(field.name, count);\n // Only throw an error once per duplicated names.\n if (count === 2) {\n items.push(\n validationItem(\n 'error',\n `Struct field name \"${field.name}\" is not unique.`,\n field,\n stack,\n ),\n );\n }\n });\n return [...items, ...next(node)];\n },\n\n visitTupleType(node, { next }) {\n const items = [] as ValidationItem[];\n if (node.items.length === 0) {\n items.push(validationItem('warn', 'Tuple has no items.', node, stack));\n }\n return [...items, ...next(node)];\n },\n }),\n );\n}\n","import { CODAMA_ERROR__VISITORS__FAILED_TO_VALIDATE_NODE, CodamaError } from '@codama/errors';\nimport { NodeKind } from '@codama/nodes';\nimport { mapVisitor, Visitor } from '@codama/visitors-core';\n\nimport { getLevelIndex, LogLevel, ValidationItem } from './ValidationItem';\n\nexport function throwValidatorItemsVisitor<TNodeKind extends NodeKind = NodeKind>(\n visitor: Visitor<readonly ValidationItem[], TNodeKind>,\n throwLevel: LogLevel = 'error',\n): Visitor<void, TNodeKind> {\n return mapVisitor(visitor, validationItems => {\n const levelHistogram = [...validationItems]\n .sort((a, b) => getLevelIndex(b.level) - getLevelIndex(a.level))\n .reduce(\n (acc, item) => {\n acc[item.level] = (acc[item.level] ?? 0) + 1;\n return acc;\n },\n {} as Record<LogLevel, number>,\n );\n const maxLevel = Object.keys(levelHistogram)\n .map(level => getLevelIndex(level as LogLevel))\n .sort((a, b) => b - a)[0];\n\n if (maxLevel >= getLevelIndex(throwLevel)) {\n const formattedHistogram = Object.keys(levelHistogram)\n .map(level => `${level}s: ${levelHistogram[level as LogLevel]}`)\n .join(', ');\n throw new CodamaError(CODAMA_ERROR__VISITORS__FAILED_TO_VALIDATE_NODE, {\n formattedHistogram,\n validationItems,\n });\n }\n });\n}\n"]}
{
"name": "@codama/validators",
"version": "1.4.3",
"version": "1.4.4",
"description": "Validator visitors for the Codama framework",

@@ -38,5 +38,5 @@ "exports": {

"dependencies": {
"@codama/errors": "1.4.3",
"@codama/nodes": "1.4.3",
"@codama/visitors-core": "1.4.3"
"@codama/errors": "1.4.4",
"@codama/nodes": "1.4.4",
"@codama/visitors-core": "1.4.4"
},

@@ -43,0 +43,0 @@ "license": "MIT",