@adobe-commerce/aio-toolkit 1.0.15 → 1.0.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +53 -0
- package/README.md +124 -13
- package/dist/aio-toolkit-cursor-context/bin/cli.js +145 -66
- package/dist/aio-toolkit-cursor-context/bin/cli.js.map +1 -1
- package/dist/aio-toolkit-onboard-events/bin/cli.js +14611 -0
- package/dist/aio-toolkit-onboard-events/bin/cli.js.map +1 -0
- package/onboard.config.default.yaml +31 -0
- package/package.json +4 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/commands/framework/command/registry/index.ts","../../../src/commands/framework/command/abstract/index.ts","../../../src/commands/framework/command/base-help/index.ts","../../../src/commands/onboard-events/lib/help/index.ts","../../../node_modules/yaml/dist/nodes/identity.js","../../../node_modules/yaml/dist/visit.js","../../../node_modules/yaml/dist/doc/directives.js","../../../node_modules/yaml/dist/doc/anchors.js","../../../node_modules/yaml/dist/doc/applyReviver.js","../../../node_modules/yaml/dist/nodes/toJS.js","../../../node_modules/yaml/dist/nodes/Node.js","../../../node_modules/yaml/dist/nodes/Alias.js","../../../node_modules/yaml/dist/nodes/Scalar.js","../../../node_modules/yaml/dist/doc/createNode.js","../../../node_modules/yaml/dist/nodes/Collection.js","../../../node_modules/yaml/dist/stringify/stringifyComment.js","../../../node_modules/yaml/dist/stringify/foldFlowLines.js","../../../node_modules/yaml/dist/stringify/stringifyString.js","../../../node_modules/yaml/dist/stringify/stringify.js","../../../node_modules/yaml/dist/stringify/stringifyPair.js","../../../node_modules/yaml/dist/log.js","../../../node_modules/yaml/dist/schema/yaml-1.1/merge.js","../../../node_modules/yaml/dist/nodes/addPairToJSMap.js","../../../node_modules/yaml/dist/nodes/Pair.js","../../../node_modules/yaml/dist/stringify/stringifyCollection.js","../../../node_modules/yaml/dist/nodes/YAMLMap.js","../../../node_modules/yaml/dist/schema/common/map.js","../../../node_modules/yaml/dist/nodes/YAMLSeq.js","../../../node_modules/yaml/dist/schema/common/seq.js","../../../node_modules/yaml/dist/schema/common/string.js","../../../node_modules/yaml/dist/schema/common/null.js","../../../node_modules/yaml/dist/schema/core/bool.js","../../../node_modules/yaml/dist/stringify/stringifyNumber.js","../../../node_modules/yaml/dist/schema/core/float.js","../../../node_modules/yaml/dist/schema/core/int.js","../../../node_modules/yaml/dist/schema/core/schema.js","../../../node_modules/yaml/dist/schema/json/schema.js","../../../node_modules/yaml/dist/schema/yaml-1.1/binary.js","../../../node_modules/yaml/dist/schema/yaml-1.1/pairs.js","../../../node_modules/yaml/dist/schema/yaml-1.1/omap.js","../../../node_modules/yaml/dist/schema/yaml-1.1/bool.js","../../../node_modules/yaml/dist/schema/yaml-1.1/float.js","../../../node_modules/yaml/dist/schema/yaml-1.1/int.js","../../../node_modules/yaml/dist/schema/yaml-1.1/set.js","../../../node_modules/yaml/dist/schema/yaml-1.1/timestamp.js","../../../node_modules/yaml/dist/schema/yaml-1.1/schema.js","../../../node_modules/yaml/dist/schema/tags.js","../../../node_modules/yaml/dist/schema/Schema.js","../../../node_modules/yaml/dist/stringify/stringifyDocument.js","../../../node_modules/yaml/dist/doc/Document.js","../../../node_modules/yaml/dist/errors.js","../../../node_modules/yaml/dist/compose/resolve-props.js","../../../node_modules/yaml/dist/compose/util-contains-newline.js","../../../node_modules/yaml/dist/compose/util-flow-indent-check.js","../../../node_modules/yaml/dist/compose/util-map-includes.js","../../../node_modules/yaml/dist/compose/resolve-block-map.js","../../../node_modules/yaml/dist/compose/resolve-block-seq.js","../../../node_modules/yaml/dist/compose/resolve-end.js","../../../node_modules/yaml/dist/compose/resolve-flow-collection.js","../../../node_modules/yaml/dist/compose/compose-collection.js","../../../node_modules/yaml/dist/compose/resolve-block-scalar.js","../../../node_modules/yaml/dist/compose/resolve-flow-scalar.js","../../../node_modules/yaml/dist/compose/compose-scalar.js","../../../node_modules/yaml/dist/compose/util-empty-scalar-position.js","../../../node_modules/yaml/dist/compose/compose-node.js","../../../node_modules/yaml/dist/compose/compose-doc.js","../../../node_modules/yaml/dist/compose/composer.js","../../../node_modules/yaml/dist/parse/cst-scalar.js","../../../node_modules/yaml/dist/parse/cst-stringify.js","../../../node_modules/yaml/dist/parse/cst-visit.js","../../../node_modules/yaml/dist/parse/cst.js","../../../node_modules/yaml/dist/parse/lexer.js","../../../node_modules/yaml/dist/parse/line-counter.js","../../../node_modules/yaml/dist/parse/parser.js","../../../node_modules/yaml/dist/public-api.js","../../../node_modules/yaml/dist/index.js","../../../src/commands/framework/helpers/onboard-config/types.ts","../../../src/commands/framework/helpers/onboard-config/index.ts","../../../src/commands/framework/helpers/application-name/index.ts","../../../src/integration/rest-client/index.ts","../../../src/io-events/types.ts","../../../src/io-events/provider/list/index.ts","../../../src/io-events/provider/get/index.ts","../../../src/io-events/provider/create/index.ts","../../../src/io-events/provider/delete/index.ts","../../../src/io-events/provider/index.ts","../../../src/io-events/event-metadata/list/index.ts","../../../src/io-events/event-metadata/get/index.ts","../../../src/io-events/event-metadata/create/index.ts","../../../src/io-events/event-metadata/delete/index.ts","../../../src/io-events/event-metadata/index.ts","../../../src/io-events/registration/create/index.ts","../../../src/io-events/registration/delete/index.ts","../../../src/io-events/registration/get/index.ts","../../../src/io-events/registration/list/index.ts","../../../src/io-events/registration/index.ts","../../../src/io-events/index.ts","../../../src/integration/onboard-events/create-providers/index.ts","../../../src/integration/onboard-events/create-events/index.ts","../../../src/integration/onboard-events/create-registrations/index.ts","../../../src/integration/onboard-events/input-parser/index.ts","../../../src/integration/onboard-events/index.ts","../../../node_modules/dotenv/package.json","../../../node_modules/dotenv/lib/main.js","../../../src/commands/framework/helpers/io-environment/index.ts","../../../src/commerce/adobe-auth/index.ts","../../../src/integration/bearer-token/index.ts","../../../src/commands/framework/helpers/adobe-auth-token/index.ts","../../../src/commands/onboard-events/lib/execute/io-events/index.ts","../../../src/framework/custom-logger/index.ts","../../../src/integration/onboard-commerce/configure-provider/index.ts","../../../src/integration/onboard-commerce/index.ts","../../../src/commands/framework/helpers/commerce-environment/index.ts","../../../src/framework/runtime-action/types.ts","../../../src/commerce/adobe-commerce-client/index.ts","../../../src/commerce/adobe-commerce-client/basic-auth-connection/generate-basic-auth-token/index.ts","../../../src/commerce/adobe-commerce-client/basic-auth-connection/index.ts","../../../src/commerce/adobe-commerce-client/oauth1a-connection/index.ts","../../../src/commerce/adobe-commerce-client/ims-connection/index.ts","../../../src/commerce/shipping-carrier/method/index.ts","../../../src/commerce/shipping-carrier/index.ts","../../../src/framework/webhook-action/response/types.ts","../../../src/framework/webhook-action/response/index.ts","../../../src/commerce/shipping-carrier/response/index.ts","../../../src/commerce/index.ts","../../../src/commands/framework/helpers/adobe-commerce-client/index.ts","../../../src/commands/onboard-events/lib/execute/commerce/index.ts","../../../src/commands/onboard-events/lib/execute/index.ts","../../../src/commands/onboard-events/lib/cleanup/io-events/index.ts","../../../src/commands/onboard-events/lib/cleanup/commerce/index.ts","../../../src/commands/onboard-events/lib/cleanup/index.ts","../../../src/commands/onboard-events/lib/index.ts","../../../src/commands/onboard-events/bin/cli.ts"],"sourcesContent":["/**\n * <license header>\n */\n\nimport { CommandResult, CommandDescriptor } from './types';\n\n/**\n * CommandRegistry class\n * Manages the registration of commands and their execution\n */\nexport abstract class CommandRegistry {\n /**\n * Static method to get the commands - must be implemented by subclasses\n *\n * @returns {CommandDescriptor[]} The commands\n */\n public static getCommands(): CommandDescriptor[] {\n throw new Error('getCommands() must be implemented by subclass');\n }\n\n /**\n * Static execute method to execute a command\n *\n * @param {string} type - The name of the command to execute\n * @param {...any} args - The arguments to pass to the command\n * @returns {Promise<CommandResult>} The execution result\n */\n static async execute(type: string = 'help', ...args: any[]): Promise<CommandResult> {\n const command = this.getCommands().find((cmd: CommandDescriptor) => cmd.name === type);\n if (!command) {\n return {\n success: false,\n message: `Unknown command: ${type}`,\n };\n }\n return await command.execute(...args);\n }\n}\n","/**\n * <license header>\n */\n\nimport { CommandResult } from '../registry/types';\n\n/**\n * CommandAbstract class\n * Abstract class for commands\n */\nexport abstract class CommandAbstract {\n /**\n * Method to get the name of the command\n * @returns {string} The name of the command\n */\n public static getName(): string {\n throw new Error('getName() must be implemented by subclass');\n }\n\n /**\n * Method to get the description of the command\n * @returns {string} The description of the command\n */\n public static getDescription(): string {\n throw new Error('getDescription() must be implemented by subclass');\n }\n\n /**\n * Method to execute the command\n * @param {...any} args - Command arguments\n * @returns {Promise<CommandResult>} The execution result\n */\n public static execute(...args: any[]): Promise<CommandResult> | CommandResult {\n throw new Error(`execute() must be implemented by subclass: ${args.join(', ')}`);\n }\n}\n","/**\n * <license header>\n */\n\nimport { CommandAbstract } from '../abstract';\nimport { CommandDescriptor, CommandResult } from '../registry/types';\n\n/**\n * BaseHelpCommand class\n * Provides help text for the base rules CLI\n */\nexport class BaseHelpCommand extends CommandAbstract {\n /**\n * Static command name\n */\n private static readonly NAME = 'help';\n\n /**\n * Static repository URL\n */\n private static readonly repositoryUrl = 'https://github.com/adobe-commerce/aio-toolkit';\n\n /**\n * Method to get the description of the command\n * @returns {string} The description of the command\n */\n public static override getName(): string {\n return this.NAME;\n }\n\n /**\n * Static method to get the commands - must be implemented by subclasses\n *\n * @returns {CommandDescriptor[]} The commands\n */\n public static getCliName(): string {\n throw new Error('getCliName() must be implemented by subclass');\n }\n\n /**\n * Get the commands dynamically\n *\n * @returns {CommandDescriptor[]} The commands array\n */\n public static getCommands(): CommandDescriptor[] {\n throw new Error('getCommands() must be implemented by subclass');\n }\n\n /**\n * Method to execute the command\n * @param {...any} _args - Command arguments (unused)\n * @returns {Promise<CommandResult>} The execution result\n */\n public static override execute(..._args: any[]): Promise<CommandResult> | CommandResult {\n const helpText = [\n this.getUsageSection(),\n this.getCommandsSection(),\n this.getExamplesSection(),\n this.getFooterSection(),\n ].join('\\n');\n\n return {\n success: true,\n message: helpText,\n };\n }\n\n /**\n * Get the usage section\n *\n * @returns {string} The usage section\n */\n private static getUsageSection(): string {\n return `Usage: npx ${this.getCliName()} <command>`;\n }\n\n /**\n * Get the commands section\n *\n * @returns {string} The commands section\n */\n private static getCommandsSection(): string {\n const commands = this.getCommands();\n const maxNameLength = Math.max(...commands.map((cmd: CommandDescriptor) => cmd.name.length));\n const commandsList = commands\n .map((cmd: CommandDescriptor) => ` ${cmd.name.padEnd(maxNameLength + 2)}${cmd.description}`)\n .join('\\n');\n return `\\nCommands:\\n${commandsList}`;\n }\n\n /**\n * Get the examples section\n *\n * @returns {string} The examples section\n */\n private static getExamplesSection(): string {\n const commands = this.getCommands();\n const examples = commands\n .map((cmd: CommandDescriptor) => ` npx ${this.getCliName()} ${cmd.name}`)\n .join('\\n');\n return `\\nExamples:\\n${examples}`;\n }\n\n /**\n * Get the footer section with additional information\n *\n * @returns {string} The footer section\n */\n private static getFooterSection(): string {\n return `\\nFor more information, visit:\\n ${this.repositoryUrl}\\n`;\n }\n}\n","/**\n * <license header>\n */\n\nimport { BaseHelpCommand } from '../../../framework/command/base-help';\nimport { CommandDescriptor } from '../../../framework/command/registry/types';\n\n/**\n * Provides help information for onboard-events commands.\n *\n * Usage: `npx aio-toolkit-onboard-events help`\n */\nexport class OnboardEventsHelp extends BaseHelpCommand {\n /** Help command description */\n private static readonly DESCRIPTION = 'Show help for the onboard events commands';\n\n /**\n * Returns the CLI executable name.\n * @returns CLI name string\n */\n public static override getCliName(): string {\n return 'aio-toolkit-onboard-events';\n }\n\n /**\n * Returns the help command description.\n * @returns Command description string\n */\n public static override getDescription(): string {\n return this.DESCRIPTION;\n }\n\n /**\n * Returns registered commands (uses dynamic require to avoid circular dependencies).\n * @returns Array of command descriptors\n */\n public static override getCommands(): CommandDescriptor[] {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const { OnboardEventsManager } = require('../index');\n return OnboardEventsManager.getCommands();\n }\n}\n","'use strict';\n\nconst ALIAS = Symbol.for('yaml.alias');\nconst DOC = Symbol.for('yaml.document');\nconst MAP = Symbol.for('yaml.map');\nconst PAIR = Symbol.for('yaml.pair');\nconst SCALAR = Symbol.for('yaml.scalar');\nconst SEQ = Symbol.for('yaml.seq');\nconst NODE_TYPE = Symbol.for('yaml.node.type');\nconst isAlias = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === ALIAS;\nconst isDocument = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === DOC;\nconst isMap = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === MAP;\nconst isPair = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === PAIR;\nconst isScalar = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === SCALAR;\nconst isSeq = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === SEQ;\nfunction isCollection(node) {\n if (node && typeof node === 'object')\n switch (node[NODE_TYPE]) {\n case MAP:\n case SEQ:\n return true;\n }\n return false;\n}\nfunction isNode(node) {\n if (node && typeof node === 'object')\n switch (node[NODE_TYPE]) {\n case ALIAS:\n case MAP:\n case SCALAR:\n case SEQ:\n return true;\n }\n return false;\n}\nconst hasAnchor = (node) => (isScalar(node) || isCollection(node)) && !!node.anchor;\n\nexports.ALIAS = ALIAS;\nexports.DOC = DOC;\nexports.MAP = MAP;\nexports.NODE_TYPE = NODE_TYPE;\nexports.PAIR = PAIR;\nexports.SCALAR = SCALAR;\nexports.SEQ = SEQ;\nexports.hasAnchor = hasAnchor;\nexports.isAlias = isAlias;\nexports.isCollection = isCollection;\nexports.isDocument = isDocument;\nexports.isMap = isMap;\nexports.isNode = isNode;\nexports.isPair = isPair;\nexports.isScalar = isScalar;\nexports.isSeq = isSeq;\n","'use strict';\n\nvar identity = require('./nodes/identity.js');\n\nconst BREAK = Symbol('break visit');\nconst SKIP = Symbol('skip children');\nconst REMOVE = Symbol('remove node');\n/**\n * Apply a visitor to an AST node or document.\n *\n * Walks through the tree (depth-first) starting from `node`, calling a\n * `visitor` function with three arguments:\n * - `key`: For sequence values and map `Pair`, the node's index in the\n * collection. Within a `Pair`, `'key'` or `'value'`, correspondingly.\n * `null` for the root node.\n * - `node`: The current node.\n * - `path`: The ancestry of the current node.\n *\n * The return value of the visitor may be used to control the traversal:\n * - `undefined` (default): Do nothing and continue\n * - `visit.SKIP`: Do not visit the children of this node, continue with next\n * sibling\n * - `visit.BREAK`: Terminate traversal completely\n * - `visit.REMOVE`: Remove the current node, then continue with the next one\n * - `Node`: Replace the current node, then continue by visiting it\n * - `number`: While iterating the items of a sequence or map, set the index\n * of the next step. This is useful especially if the index of the current\n * node has changed.\n *\n * If `visitor` is a single function, it will be called with all values\n * encountered in the tree, including e.g. `null` values. Alternatively,\n * separate visitor functions may be defined for each `Map`, `Pair`, `Seq`,\n * `Alias` and `Scalar` node. To define the same visitor function for more than\n * one node type, use the `Collection` (map and seq), `Value` (map, seq & scalar)\n * and `Node` (alias, map, seq & scalar) targets. Of all these, only the most\n * specific defined one will be used for each node.\n */\nfunction visit(node, visitor) {\n const visitor_ = initVisitor(visitor);\n if (identity.isDocument(node)) {\n const cd = visit_(null, node.contents, visitor_, Object.freeze([node]));\n if (cd === REMOVE)\n node.contents = null;\n }\n else\n visit_(null, node, visitor_, Object.freeze([]));\n}\n// Without the `as symbol` casts, TS declares these in the `visit`\n// namespace using `var`, but then complains about that because\n// `unique symbol` must be `const`.\n/** Terminate visit traversal completely */\nvisit.BREAK = BREAK;\n/** Do not visit the children of the current node */\nvisit.SKIP = SKIP;\n/** Remove the current node */\nvisit.REMOVE = REMOVE;\nfunction visit_(key, node, visitor, path) {\n const ctrl = callVisitor(key, node, visitor, path);\n if (identity.isNode(ctrl) || identity.isPair(ctrl)) {\n replaceNode(key, path, ctrl);\n return visit_(key, ctrl, visitor, path);\n }\n if (typeof ctrl !== 'symbol') {\n if (identity.isCollection(node)) {\n path = Object.freeze(path.concat(node));\n for (let i = 0; i < node.items.length; ++i) {\n const ci = visit_(i, node.items[i], visitor, path);\n if (typeof ci === 'number')\n i = ci - 1;\n else if (ci === BREAK)\n return BREAK;\n else if (ci === REMOVE) {\n node.items.splice(i, 1);\n i -= 1;\n }\n }\n }\n else if (identity.isPair(node)) {\n path = Object.freeze(path.concat(node));\n const ck = visit_('key', node.key, visitor, path);\n if (ck === BREAK)\n return BREAK;\n else if (ck === REMOVE)\n node.key = null;\n const cv = visit_('value', node.value, visitor, path);\n if (cv === BREAK)\n return BREAK;\n else if (cv === REMOVE)\n node.value = null;\n }\n }\n return ctrl;\n}\n/**\n * Apply an async visitor to an AST node or document.\n *\n * Walks through the tree (depth-first) starting from `node`, calling a\n * `visitor` function with three arguments:\n * - `key`: For sequence values and map `Pair`, the node's index in the\n * collection. Within a `Pair`, `'key'` or `'value'`, correspondingly.\n * `null` for the root node.\n * - `node`: The current node.\n * - `path`: The ancestry of the current node.\n *\n * The return value of the visitor may be used to control the traversal:\n * - `Promise`: Must resolve to one of the following values\n * - `undefined` (default): Do nothing and continue\n * - `visit.SKIP`: Do not visit the children of this node, continue with next\n * sibling\n * - `visit.BREAK`: Terminate traversal completely\n * - `visit.REMOVE`: Remove the current node, then continue with the next one\n * - `Node`: Replace the current node, then continue by visiting it\n * - `number`: While iterating the items of a sequence or map, set the index\n * of the next step. This is useful especially if the index of the current\n * node has changed.\n *\n * If `visitor` is a single function, it will be called with all values\n * encountered in the tree, including e.g. `null` values. Alternatively,\n * separate visitor functions may be defined for each `Map`, `Pair`, `Seq`,\n * `Alias` and `Scalar` node. To define the same visitor function for more than\n * one node type, use the `Collection` (map and seq), `Value` (map, seq & scalar)\n * and `Node` (alias, map, seq & scalar) targets. Of all these, only the most\n * specific defined one will be used for each node.\n */\nasync function visitAsync(node, visitor) {\n const visitor_ = initVisitor(visitor);\n if (identity.isDocument(node)) {\n const cd = await visitAsync_(null, node.contents, visitor_, Object.freeze([node]));\n if (cd === REMOVE)\n node.contents = null;\n }\n else\n await visitAsync_(null, node, visitor_, Object.freeze([]));\n}\n// Without the `as symbol` casts, TS declares these in the `visit`\n// namespace using `var`, but then complains about that because\n// `unique symbol` must be `const`.\n/** Terminate visit traversal completely */\nvisitAsync.BREAK = BREAK;\n/** Do not visit the children of the current node */\nvisitAsync.SKIP = SKIP;\n/** Remove the current node */\nvisitAsync.REMOVE = REMOVE;\nasync function visitAsync_(key, node, visitor, path) {\n const ctrl = await callVisitor(key, node, visitor, path);\n if (identity.isNode(ctrl) || identity.isPair(ctrl)) {\n replaceNode(key, path, ctrl);\n return visitAsync_(key, ctrl, visitor, path);\n }\n if (typeof ctrl !== 'symbol') {\n if (identity.isCollection(node)) {\n path = Object.freeze(path.concat(node));\n for (let i = 0; i < node.items.length; ++i) {\n const ci = await visitAsync_(i, node.items[i], visitor, path);\n if (typeof ci === 'number')\n i = ci - 1;\n else if (ci === BREAK)\n return BREAK;\n else if (ci === REMOVE) {\n node.items.splice(i, 1);\n i -= 1;\n }\n }\n }\n else if (identity.isPair(node)) {\n path = Object.freeze(path.concat(node));\n const ck = await visitAsync_('key', node.key, visitor, path);\n if (ck === BREAK)\n return BREAK;\n else if (ck === REMOVE)\n node.key = null;\n const cv = await visitAsync_('value', node.value, visitor, path);\n if (cv === BREAK)\n return BREAK;\n else if (cv === REMOVE)\n node.value = null;\n }\n }\n return ctrl;\n}\nfunction initVisitor(visitor) {\n if (typeof visitor === 'object' &&\n (visitor.Collection || visitor.Node || visitor.Value)) {\n return Object.assign({\n Alias: visitor.Node,\n Map: visitor.Node,\n Scalar: visitor.Node,\n Seq: visitor.Node\n }, visitor.Value && {\n Map: visitor.Value,\n Scalar: visitor.Value,\n Seq: visitor.Value\n }, visitor.Collection && {\n Map: visitor.Collection,\n Seq: visitor.Collection\n }, visitor);\n }\n return visitor;\n}\nfunction callVisitor(key, node, visitor, path) {\n if (typeof visitor === 'function')\n return visitor(key, node, path);\n if (identity.isMap(node))\n return visitor.Map?.(key, node, path);\n if (identity.isSeq(node))\n return visitor.Seq?.(key, node, path);\n if (identity.isPair(node))\n return visitor.Pair?.(key, node, path);\n if (identity.isScalar(node))\n return visitor.Scalar?.(key, node, path);\n if (identity.isAlias(node))\n return visitor.Alias?.(key, node, path);\n return undefined;\n}\nfunction replaceNode(key, path, node) {\n const parent = path[path.length - 1];\n if (identity.isCollection(parent)) {\n parent.items[key] = node;\n }\n else if (identity.isPair(parent)) {\n if (key === 'key')\n parent.key = node;\n else\n parent.value = node;\n }\n else if (identity.isDocument(parent)) {\n parent.contents = node;\n }\n else {\n const pt = identity.isAlias(parent) ? 'alias' : 'scalar';\n throw new Error(`Cannot replace node with ${pt} parent`);\n }\n}\n\nexports.visit = visit;\nexports.visitAsync = visitAsync;\n","'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar visit = require('../visit.js');\n\nconst escapeChars = {\n '!': '%21',\n ',': '%2C',\n '[': '%5B',\n ']': '%5D',\n '{': '%7B',\n '}': '%7D'\n};\nconst escapeTagName = (tn) => tn.replace(/[!,[\\]{}]/g, ch => escapeChars[ch]);\nclass Directives {\n constructor(yaml, tags) {\n /**\n * The directives-end/doc-start marker `---`. If `null`, a marker may still be\n * included in the document's stringified representation.\n */\n this.docStart = null;\n /** The doc-end marker `...`. */\n this.docEnd = false;\n this.yaml = Object.assign({}, Directives.defaultYaml, yaml);\n this.tags = Object.assign({}, Directives.defaultTags, tags);\n }\n clone() {\n const copy = new Directives(this.yaml, this.tags);\n copy.docStart = this.docStart;\n return copy;\n }\n /**\n * During parsing, get a Directives instance for the current document and\n * update the stream state according to the current version's spec.\n */\n atDocument() {\n const res = new Directives(this.yaml, this.tags);\n switch (this.yaml.version) {\n case '1.1':\n this.atNextDocument = true;\n break;\n case '1.2':\n this.atNextDocument = false;\n this.yaml = {\n explicit: Directives.defaultYaml.explicit,\n version: '1.2'\n };\n this.tags = Object.assign({}, Directives.defaultTags);\n break;\n }\n return res;\n }\n /**\n * @param onError - May be called even if the action was successful\n * @returns `true` on success\n */\n add(line, onError) {\n if (this.atNextDocument) {\n this.yaml = { explicit: Directives.defaultYaml.explicit, version: '1.1' };\n this.tags = Object.assign({}, Directives.defaultTags);\n this.atNextDocument = false;\n }\n const parts = line.trim().split(/[ \\t]+/);\n const name = parts.shift();\n switch (name) {\n case '%TAG': {\n if (parts.length !== 2) {\n onError(0, '%TAG directive should contain exactly two parts');\n if (parts.length < 2)\n return false;\n }\n const [handle, prefix] = parts;\n this.tags[handle] = prefix;\n return true;\n }\n case '%YAML': {\n this.yaml.explicit = true;\n if (parts.length !== 1) {\n onError(0, '%YAML directive should contain exactly one part');\n return false;\n }\n const [version] = parts;\n if (version === '1.1' || version === '1.2') {\n this.yaml.version = version;\n return true;\n }\n else {\n const isValid = /^\\d+\\.\\d+$/.test(version);\n onError(6, `Unsupported YAML version ${version}`, isValid);\n return false;\n }\n }\n default:\n onError(0, `Unknown directive ${name}`, true);\n return false;\n }\n }\n /**\n * Resolves a tag, matching handles to those defined in %TAG directives.\n *\n * @returns Resolved tag, which may also be the non-specific tag `'!'` or a\n * `'!local'` tag, or `null` if unresolvable.\n */\n tagName(source, onError) {\n if (source === '!')\n return '!'; // non-specific tag\n if (source[0] !== '!') {\n onError(`Not a valid tag: ${source}`);\n return null;\n }\n if (source[1] === '<') {\n const verbatim = source.slice(2, -1);\n if (verbatim === '!' || verbatim === '!!') {\n onError(`Verbatim tags aren't resolved, so ${source} is invalid.`);\n return null;\n }\n if (source[source.length - 1] !== '>')\n onError('Verbatim tags must end with a >');\n return verbatim;\n }\n const [, handle, suffix] = source.match(/^(.*!)([^!]*)$/s);\n if (!suffix)\n onError(`The ${source} tag has no suffix`);\n const prefix = this.tags[handle];\n if (prefix) {\n try {\n return prefix + decodeURIComponent(suffix);\n }\n catch (error) {\n onError(String(error));\n return null;\n }\n }\n if (handle === '!')\n return source; // local tag\n onError(`Could not resolve tag: ${source}`);\n return null;\n }\n /**\n * Given a fully resolved tag, returns its printable string form,\n * taking into account current tag prefixes and defaults.\n */\n tagString(tag) {\n for (const [handle, prefix] of Object.entries(this.tags)) {\n if (tag.startsWith(prefix))\n return handle + escapeTagName(tag.substring(prefix.length));\n }\n return tag[0] === '!' ? tag : `!<${tag}>`;\n }\n toString(doc) {\n const lines = this.yaml.explicit\n ? [`%YAML ${this.yaml.version || '1.2'}`]\n : [];\n const tagEntries = Object.entries(this.tags);\n let tagNames;\n if (doc && tagEntries.length > 0 && identity.isNode(doc.contents)) {\n const tags = {};\n visit.visit(doc.contents, (_key, node) => {\n if (identity.isNode(node) && node.tag)\n tags[node.tag] = true;\n });\n tagNames = Object.keys(tags);\n }\n else\n tagNames = [];\n for (const [handle, prefix] of tagEntries) {\n if (handle === '!!' && prefix === 'tag:yaml.org,2002:')\n continue;\n if (!doc || tagNames.some(tn => tn.startsWith(prefix)))\n lines.push(`%TAG ${handle} ${prefix}`);\n }\n return lines.join('\\n');\n }\n}\nDirectives.defaultYaml = { explicit: false, version: '1.2' };\nDirectives.defaultTags = { '!!': 'tag:yaml.org,2002:' };\n\nexports.Directives = Directives;\n","'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar visit = require('../visit.js');\n\n/**\n * Verify that the input string is a valid anchor.\n *\n * Will throw on errors.\n */\nfunction anchorIsValid(anchor) {\n if (/[\\x00-\\x19\\s,[\\]{}]/.test(anchor)) {\n const sa = JSON.stringify(anchor);\n const msg = `Anchor must not contain whitespace or control characters: ${sa}`;\n throw new Error(msg);\n }\n return true;\n}\nfunction anchorNames(root) {\n const anchors = new Set();\n visit.visit(root, {\n Value(_key, node) {\n if (node.anchor)\n anchors.add(node.anchor);\n }\n });\n return anchors;\n}\n/** Find a new anchor name with the given `prefix` and a one-indexed suffix. */\nfunction findNewAnchor(prefix, exclude) {\n for (let i = 1; true; ++i) {\n const name = `${prefix}${i}`;\n if (!exclude.has(name))\n return name;\n }\n}\nfunction createNodeAnchors(doc, prefix) {\n const aliasObjects = [];\n const sourceObjects = new Map();\n let prevAnchors = null;\n return {\n onAnchor: (source) => {\n aliasObjects.push(source);\n prevAnchors ?? (prevAnchors = anchorNames(doc));\n const anchor = findNewAnchor(prefix, prevAnchors);\n prevAnchors.add(anchor);\n return anchor;\n },\n /**\n * With circular references, the source node is only resolved after all\n * of its child nodes are. This is why anchors are set only after all of\n * the nodes have been created.\n */\n setAnchors: () => {\n for (const source of aliasObjects) {\n const ref = sourceObjects.get(source);\n if (typeof ref === 'object' &&\n ref.anchor &&\n (identity.isScalar(ref.node) || identity.isCollection(ref.node))) {\n ref.node.anchor = ref.anchor;\n }\n else {\n const error = new Error('Failed to resolve repeated object (this should not happen)');\n error.source = source;\n throw error;\n }\n }\n },\n sourceObjects\n };\n}\n\nexports.anchorIsValid = anchorIsValid;\nexports.anchorNames = anchorNames;\nexports.createNodeAnchors = createNodeAnchors;\nexports.findNewAnchor = findNewAnchor;\n","'use strict';\n\n/**\n * Applies the JSON.parse reviver algorithm as defined in the ECMA-262 spec,\n * in section 24.5.1.1 \"Runtime Semantics: InternalizeJSONProperty\" of the\n * 2021 edition: https://tc39.es/ecma262/#sec-json.parse\n *\n * Includes extensions for handling Map and Set objects.\n */\nfunction applyReviver(reviver, obj, key, val) {\n if (val && typeof val === 'object') {\n if (Array.isArray(val)) {\n for (let i = 0, len = val.length; i < len; ++i) {\n const v0 = val[i];\n const v1 = applyReviver(reviver, val, String(i), v0);\n // eslint-disable-next-line @typescript-eslint/no-array-delete\n if (v1 === undefined)\n delete val[i];\n else if (v1 !== v0)\n val[i] = v1;\n }\n }\n else if (val instanceof Map) {\n for (const k of Array.from(val.keys())) {\n const v0 = val.get(k);\n const v1 = applyReviver(reviver, val, k, v0);\n if (v1 === undefined)\n val.delete(k);\n else if (v1 !== v0)\n val.set(k, v1);\n }\n }\n else if (val instanceof Set) {\n for (const v0 of Array.from(val)) {\n const v1 = applyReviver(reviver, val, v0, v0);\n if (v1 === undefined)\n val.delete(v0);\n else if (v1 !== v0) {\n val.delete(v0);\n val.add(v1);\n }\n }\n }\n else {\n for (const [k, v0] of Object.entries(val)) {\n const v1 = applyReviver(reviver, val, k, v0);\n if (v1 === undefined)\n delete val[k];\n else if (v1 !== v0)\n val[k] = v1;\n }\n }\n }\n return reviver.call(obj, key, val);\n}\n\nexports.applyReviver = applyReviver;\n","'use strict';\n\nvar identity = require('./identity.js');\n\n/**\n * Recursively convert any node or its contents to native JavaScript\n *\n * @param value - The input value\n * @param arg - If `value` defines a `toJSON()` method, use this\n * as its first argument\n * @param ctx - Conversion context, originally set in Document#toJS(). If\n * `{ keep: true }` is not set, output should be suitable for JSON\n * stringification.\n */\nfunction toJS(value, arg, ctx) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n if (Array.isArray(value))\n return value.map((v, i) => toJS(v, String(i), ctx));\n if (value && typeof value.toJSON === 'function') {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n if (!ctx || !identity.hasAnchor(value))\n return value.toJSON(arg, ctx);\n const data = { aliasCount: 0, count: 1, res: undefined };\n ctx.anchors.set(value, data);\n ctx.onCreate = res => {\n data.res = res;\n delete ctx.onCreate;\n };\n const res = value.toJSON(arg, ctx);\n if (ctx.onCreate)\n ctx.onCreate(res);\n return res;\n }\n if (typeof value === 'bigint' && !ctx?.keep)\n return Number(value);\n return value;\n}\n\nexports.toJS = toJS;\n","'use strict';\n\nvar applyReviver = require('../doc/applyReviver.js');\nvar identity = require('./identity.js');\nvar toJS = require('./toJS.js');\n\nclass NodeBase {\n constructor(type) {\n Object.defineProperty(this, identity.NODE_TYPE, { value: type });\n }\n /** Create a copy of this node. */\n clone() {\n const copy = Object.create(Object.getPrototypeOf(this), Object.getOwnPropertyDescriptors(this));\n if (this.range)\n copy.range = this.range.slice();\n return copy;\n }\n /** A plain JavaScript representation of this node. */\n toJS(doc, { mapAsMap, maxAliasCount, onAnchor, reviver } = {}) {\n if (!identity.isDocument(doc))\n throw new TypeError('A document argument is required');\n const ctx = {\n anchors: new Map(),\n doc,\n keep: true,\n mapAsMap: mapAsMap === true,\n mapKeyWarned: false,\n maxAliasCount: typeof maxAliasCount === 'number' ? maxAliasCount : 100\n };\n const res = toJS.toJS(this, '', ctx);\n if (typeof onAnchor === 'function')\n for (const { count, res } of ctx.anchors.values())\n onAnchor(res, count);\n return typeof reviver === 'function'\n ? applyReviver.applyReviver(reviver, { '': res }, '', res)\n : res;\n }\n}\n\nexports.NodeBase = NodeBase;\n","'use strict';\n\nvar anchors = require('../doc/anchors.js');\nvar visit = require('../visit.js');\nvar identity = require('./identity.js');\nvar Node = require('./Node.js');\nvar toJS = require('./toJS.js');\n\nclass Alias extends Node.NodeBase {\n constructor(source) {\n super(identity.ALIAS);\n this.source = source;\n Object.defineProperty(this, 'tag', {\n set() {\n throw new Error('Alias nodes cannot have tags');\n }\n });\n }\n /**\n * Resolve the value of this alias within `doc`, finding the last\n * instance of the `source` anchor before this node.\n */\n resolve(doc, ctx) {\n let nodes;\n if (ctx?.aliasResolveCache) {\n nodes = ctx.aliasResolveCache;\n }\n else {\n nodes = [];\n visit.visit(doc, {\n Node: (_key, node) => {\n if (identity.isAlias(node) || identity.hasAnchor(node))\n nodes.push(node);\n }\n });\n if (ctx)\n ctx.aliasResolveCache = nodes;\n }\n let found = undefined;\n for (const node of nodes) {\n if (node === this)\n break;\n if (node.anchor === this.source)\n found = node;\n }\n return found;\n }\n toJSON(_arg, ctx) {\n if (!ctx)\n return { source: this.source };\n const { anchors, doc, maxAliasCount } = ctx;\n const source = this.resolve(doc, ctx);\n if (!source) {\n const msg = `Unresolved alias (the anchor must be set before the alias): ${this.source}`;\n throw new ReferenceError(msg);\n }\n let data = anchors.get(source);\n if (!data) {\n // Resolve anchors for Node.prototype.toJS()\n toJS.toJS(source, null, ctx);\n data = anchors.get(source);\n }\n /* istanbul ignore if */\n if (data?.res === undefined) {\n const msg = 'This should not happen: Alias anchor was not resolved?';\n throw new ReferenceError(msg);\n }\n if (maxAliasCount >= 0) {\n data.count += 1;\n if (data.aliasCount === 0)\n data.aliasCount = getAliasCount(doc, source, anchors);\n if (data.count * data.aliasCount > maxAliasCount) {\n const msg = 'Excessive alias count indicates a resource exhaustion attack';\n throw new ReferenceError(msg);\n }\n }\n return data.res;\n }\n toString(ctx, _onComment, _onChompKeep) {\n const src = `*${this.source}`;\n if (ctx) {\n anchors.anchorIsValid(this.source);\n if (ctx.options.verifyAliasOrder && !ctx.anchors.has(this.source)) {\n const msg = `Unresolved alias (the anchor must be set before the alias): ${this.source}`;\n throw new Error(msg);\n }\n if (ctx.implicitKey)\n return `${src} `;\n }\n return src;\n }\n}\nfunction getAliasCount(doc, node, anchors) {\n if (identity.isAlias(node)) {\n const source = node.resolve(doc);\n const anchor = anchors && source && anchors.get(source);\n return anchor ? anchor.count * anchor.aliasCount : 0;\n }\n else if (identity.isCollection(node)) {\n let count = 0;\n for (const item of node.items) {\n const c = getAliasCount(doc, item, anchors);\n if (c > count)\n count = c;\n }\n return count;\n }\n else if (identity.isPair(node)) {\n const kc = getAliasCount(doc, node.key, anchors);\n const vc = getAliasCount(doc, node.value, anchors);\n return Math.max(kc, vc);\n }\n return 1;\n}\n\nexports.Alias = Alias;\n","'use strict';\n\nvar identity = require('./identity.js');\nvar Node = require('./Node.js');\nvar toJS = require('./toJS.js');\n\nconst isScalarValue = (value) => !value || (typeof value !== 'function' && typeof value !== 'object');\nclass Scalar extends Node.NodeBase {\n constructor(value) {\n super(identity.SCALAR);\n this.value = value;\n }\n toJSON(arg, ctx) {\n return ctx?.keep ? this.value : toJS.toJS(this.value, arg, ctx);\n }\n toString() {\n return String(this.value);\n }\n}\nScalar.BLOCK_FOLDED = 'BLOCK_FOLDED';\nScalar.BLOCK_LITERAL = 'BLOCK_LITERAL';\nScalar.PLAIN = 'PLAIN';\nScalar.QUOTE_DOUBLE = 'QUOTE_DOUBLE';\nScalar.QUOTE_SINGLE = 'QUOTE_SINGLE';\n\nexports.Scalar = Scalar;\nexports.isScalarValue = isScalarValue;\n","'use strict';\n\nvar Alias = require('../nodes/Alias.js');\nvar identity = require('../nodes/identity.js');\nvar Scalar = require('../nodes/Scalar.js');\n\nconst defaultTagPrefix = 'tag:yaml.org,2002:';\nfunction findTagObject(value, tagName, tags) {\n if (tagName) {\n const match = tags.filter(t => t.tag === tagName);\n const tagObj = match.find(t => !t.format) ?? match[0];\n if (!tagObj)\n throw new Error(`Tag ${tagName} not found`);\n return tagObj;\n }\n return tags.find(t => t.identify?.(value) && !t.format);\n}\nfunction createNode(value, tagName, ctx) {\n if (identity.isDocument(value))\n value = value.contents;\n if (identity.isNode(value))\n return value;\n if (identity.isPair(value)) {\n const map = ctx.schema[identity.MAP].createNode?.(ctx.schema, null, ctx);\n map.items.push(value);\n return map;\n }\n if (value instanceof String ||\n value instanceof Number ||\n value instanceof Boolean ||\n (typeof BigInt !== 'undefined' && value instanceof BigInt) // not supported everywhere\n ) {\n // https://tc39.es/ecma262/#sec-serializejsonproperty\n value = value.valueOf();\n }\n const { aliasDuplicateObjects, onAnchor, onTagObj, schema, sourceObjects } = ctx;\n // Detect duplicate references to the same object & use Alias nodes for all\n // after first. The `ref` wrapper allows for circular references to resolve.\n let ref = undefined;\n if (aliasDuplicateObjects && value && typeof value === 'object') {\n ref = sourceObjects.get(value);\n if (ref) {\n ref.anchor ?? (ref.anchor = onAnchor(value));\n return new Alias.Alias(ref.anchor);\n }\n else {\n ref = { anchor: null, node: null };\n sourceObjects.set(value, ref);\n }\n }\n if (tagName?.startsWith('!!'))\n tagName = defaultTagPrefix + tagName.slice(2);\n let tagObj = findTagObject(value, tagName, schema.tags);\n if (!tagObj) {\n if (value && typeof value.toJSON === 'function') {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n value = value.toJSON();\n }\n if (!value || typeof value !== 'object') {\n const node = new Scalar.Scalar(value);\n if (ref)\n ref.node = node;\n return node;\n }\n tagObj =\n value instanceof Map\n ? schema[identity.MAP]\n : Symbol.iterator in Object(value)\n ? schema[identity.SEQ]\n : schema[identity.MAP];\n }\n if (onTagObj) {\n onTagObj(tagObj);\n delete ctx.onTagObj;\n }\n const node = tagObj?.createNode\n ? tagObj.createNode(ctx.schema, value, ctx)\n : typeof tagObj?.nodeClass?.from === 'function'\n ? tagObj.nodeClass.from(ctx.schema, value, ctx)\n : new Scalar.Scalar(value);\n if (tagName)\n node.tag = tagName;\n else if (!tagObj.default)\n node.tag = tagObj.tag;\n if (ref)\n ref.node = node;\n return node;\n}\n\nexports.createNode = createNode;\n","'use strict';\n\nvar createNode = require('../doc/createNode.js');\nvar identity = require('./identity.js');\nvar Node = require('./Node.js');\n\nfunction collectionFromPath(schema, path, value) {\n let v = value;\n for (let i = path.length - 1; i >= 0; --i) {\n const k = path[i];\n if (typeof k === 'number' && Number.isInteger(k) && k >= 0) {\n const a = [];\n a[k] = v;\n v = a;\n }\n else {\n v = new Map([[k, v]]);\n }\n }\n return createNode.createNode(v, undefined, {\n aliasDuplicateObjects: false,\n keepUndefined: false,\n onAnchor: () => {\n throw new Error('This should not happen, please report a bug.');\n },\n schema,\n sourceObjects: new Map()\n });\n}\n// Type guard is intentionally a little wrong so as to be more useful,\n// as it does not cover untypable empty non-string iterables (e.g. []).\nconst isEmptyPath = (path) => path == null ||\n (typeof path === 'object' && !!path[Symbol.iterator]().next().done);\nclass Collection extends Node.NodeBase {\n constructor(type, schema) {\n super(type);\n Object.defineProperty(this, 'schema', {\n value: schema,\n configurable: true,\n enumerable: false,\n writable: true\n });\n }\n /**\n * Create a copy of this collection.\n *\n * @param schema - If defined, overwrites the original's schema\n */\n clone(schema) {\n const copy = Object.create(Object.getPrototypeOf(this), Object.getOwnPropertyDescriptors(this));\n if (schema)\n copy.schema = schema;\n copy.items = copy.items.map(it => identity.isNode(it) || identity.isPair(it) ? it.clone(schema) : it);\n if (this.range)\n copy.range = this.range.slice();\n return copy;\n }\n /**\n * Adds a value to the collection. For `!!map` and `!!omap` the value must\n * be a Pair instance or a `{ key, value }` object, which may not have a key\n * that already exists in the map.\n */\n addIn(path, value) {\n if (isEmptyPath(path))\n this.add(value);\n else {\n const [key, ...rest] = path;\n const node = this.get(key, true);\n if (identity.isCollection(node))\n node.addIn(rest, value);\n else if (node === undefined && this.schema)\n this.set(key, collectionFromPath(this.schema, rest, value));\n else\n throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);\n }\n }\n /**\n * Removes a value from the collection.\n * @returns `true` if the item was found and removed.\n */\n deleteIn(path) {\n const [key, ...rest] = path;\n if (rest.length === 0)\n return this.delete(key);\n const node = this.get(key, true);\n if (identity.isCollection(node))\n return node.deleteIn(rest);\n else\n throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);\n }\n /**\n * Returns item at `key`, or `undefined` if not found. By default unwraps\n * scalar values from their surrounding node; to disable set `keepScalar` to\n * `true` (collections are always returned intact).\n */\n getIn(path, keepScalar) {\n const [key, ...rest] = path;\n const node = this.get(key, true);\n if (rest.length === 0)\n return !keepScalar && identity.isScalar(node) ? node.value : node;\n else\n return identity.isCollection(node) ? node.getIn(rest, keepScalar) : undefined;\n }\n hasAllNullValues(allowScalar) {\n return this.items.every(node => {\n if (!identity.isPair(node))\n return false;\n const n = node.value;\n return (n == null ||\n (allowScalar &&\n identity.isScalar(n) &&\n n.value == null &&\n !n.commentBefore &&\n !n.comment &&\n !n.tag));\n });\n }\n /**\n * Checks if the collection includes a value with the key `key`.\n */\n hasIn(path) {\n const [key, ...rest] = path;\n if (rest.length === 0)\n return this.has(key);\n const node = this.get(key, true);\n return identity.isCollection(node) ? node.hasIn(rest) : false;\n }\n /**\n * Sets a value in this collection. For `!!set`, `value` needs to be a\n * boolean to add/remove the item from the set.\n */\n setIn(path, value) {\n const [key, ...rest] = path;\n if (rest.length === 0) {\n this.set(key, value);\n }\n else {\n const node = this.get(key, true);\n if (identity.isCollection(node))\n node.setIn(rest, value);\n else if (node === undefined && this.schema)\n this.set(key, collectionFromPath(this.schema, rest, value));\n else\n throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);\n }\n }\n}\n\nexports.Collection = Collection;\nexports.collectionFromPath = collectionFromPath;\nexports.isEmptyPath = isEmptyPath;\n","'use strict';\n\n/**\n * Stringifies a comment.\n *\n * Empty comment lines are left empty,\n * lines consisting of a single space are replaced by `#`,\n * and all other lines are prefixed with a `#`.\n */\nconst stringifyComment = (str) => str.replace(/^(?!$)(?: $)?/gm, '#');\nfunction indentComment(comment, indent) {\n if (/^\\n+$/.test(comment))\n return comment.substring(1);\n return indent ? comment.replace(/^(?! *$)/gm, indent) : comment;\n}\nconst lineComment = (str, indent, comment) => str.endsWith('\\n')\n ? indentComment(comment, indent)\n : comment.includes('\\n')\n ? '\\n' + indentComment(comment, indent)\n : (str.endsWith(' ') ? '' : ' ') + comment;\n\nexports.indentComment = indentComment;\nexports.lineComment = lineComment;\nexports.stringifyComment = stringifyComment;\n","'use strict';\n\nconst FOLD_FLOW = 'flow';\nconst FOLD_BLOCK = 'block';\nconst FOLD_QUOTED = 'quoted';\n/**\n * Tries to keep input at up to `lineWidth` characters, splitting only on spaces\n * not followed by newlines or spaces unless `mode` is `'quoted'`. Lines are\n * terminated with `\\n` and started with `indent`.\n */\nfunction foldFlowLines(text, indent, mode = 'flow', { indentAtStart, lineWidth = 80, minContentWidth = 20, onFold, onOverflow } = {}) {\n if (!lineWidth || lineWidth < 0)\n return text;\n if (lineWidth < minContentWidth)\n minContentWidth = 0;\n const endStep = Math.max(1 + minContentWidth, 1 + lineWidth - indent.length);\n if (text.length <= endStep)\n return text;\n const folds = [];\n const escapedFolds = {};\n let end = lineWidth - indent.length;\n if (typeof indentAtStart === 'number') {\n if (indentAtStart > lineWidth - Math.max(2, minContentWidth))\n folds.push(0);\n else\n end = lineWidth - indentAtStart;\n }\n let split = undefined;\n let prev = undefined;\n let overflow = false;\n let i = -1;\n let escStart = -1;\n let escEnd = -1;\n if (mode === FOLD_BLOCK) {\n i = consumeMoreIndentedLines(text, i, indent.length);\n if (i !== -1)\n end = i + endStep;\n }\n for (let ch; (ch = text[(i += 1)]);) {\n if (mode === FOLD_QUOTED && ch === '\\\\') {\n escStart = i;\n switch (text[i + 1]) {\n case 'x':\n i += 3;\n break;\n case 'u':\n i += 5;\n break;\n case 'U':\n i += 9;\n break;\n default:\n i += 1;\n }\n escEnd = i;\n }\n if (ch === '\\n') {\n if (mode === FOLD_BLOCK)\n i = consumeMoreIndentedLines(text, i, indent.length);\n end = i + indent.length + endStep;\n split = undefined;\n }\n else {\n if (ch === ' ' &&\n prev &&\n prev !== ' ' &&\n prev !== '\\n' &&\n prev !== '\\t') {\n // space surrounded by non-space can be replaced with newline + indent\n const next = text[i + 1];\n if (next && next !== ' ' && next !== '\\n' && next !== '\\t')\n split = i;\n }\n if (i >= end) {\n if (split) {\n folds.push(split);\n end = split + endStep;\n split = undefined;\n }\n else if (mode === FOLD_QUOTED) {\n // white-space collected at end may stretch past lineWidth\n while (prev === ' ' || prev === '\\t') {\n prev = ch;\n ch = text[(i += 1)];\n overflow = true;\n }\n // Account for newline escape, but don't break preceding escape\n const j = i > escEnd + 1 ? i - 2 : escStart - 1;\n // Bail out if lineWidth & minContentWidth are shorter than an escape string\n if (escapedFolds[j])\n return text;\n folds.push(j);\n escapedFolds[j] = true;\n end = j + endStep;\n split = undefined;\n }\n else {\n overflow = true;\n }\n }\n }\n prev = ch;\n }\n if (overflow && onOverflow)\n onOverflow();\n if (folds.length === 0)\n return text;\n if (onFold)\n onFold();\n let res = text.slice(0, folds[0]);\n for (let i = 0; i < folds.length; ++i) {\n const fold = folds[i];\n const end = folds[i + 1] || text.length;\n if (fold === 0)\n res = `\\n${indent}${text.slice(0, end)}`;\n else {\n if (mode === FOLD_QUOTED && escapedFolds[fold])\n res += `${text[fold]}\\\\`;\n res += `\\n${indent}${text.slice(fold + 1, end)}`;\n }\n }\n return res;\n}\n/**\n * Presumes `i + 1` is at the start of a line\n * @returns index of last newline in more-indented block\n */\nfunction consumeMoreIndentedLines(text, i, indent) {\n let end = i;\n let start = i + 1;\n let ch = text[start];\n while (ch === ' ' || ch === '\\t') {\n if (i < start + indent) {\n ch = text[++i];\n }\n else {\n do {\n ch = text[++i];\n } while (ch && ch !== '\\n');\n end = i;\n start = i + 1;\n ch = text[start];\n }\n }\n return end;\n}\n\nexports.FOLD_BLOCK = FOLD_BLOCK;\nexports.FOLD_FLOW = FOLD_FLOW;\nexports.FOLD_QUOTED = FOLD_QUOTED;\nexports.foldFlowLines = foldFlowLines;\n","'use strict';\n\nvar Scalar = require('../nodes/Scalar.js');\nvar foldFlowLines = require('./foldFlowLines.js');\n\nconst getFoldOptions = (ctx, isBlock) => ({\n indentAtStart: isBlock ? ctx.indent.length : ctx.indentAtStart,\n lineWidth: ctx.options.lineWidth,\n minContentWidth: ctx.options.minContentWidth\n});\n// Also checks for lines starting with %, as parsing the output as YAML 1.1 will\n// presume that's starting a new document.\nconst containsDocumentMarker = (str) => /^(%|---|\\.\\.\\.)/m.test(str);\nfunction lineLengthOverLimit(str, lineWidth, indentLength) {\n if (!lineWidth || lineWidth < 0)\n return false;\n const limit = lineWidth - indentLength;\n const strLen = str.length;\n if (strLen <= limit)\n return false;\n for (let i = 0, start = 0; i < strLen; ++i) {\n if (str[i] === '\\n') {\n if (i - start > limit)\n return true;\n start = i + 1;\n if (strLen - start <= limit)\n return false;\n }\n }\n return true;\n}\nfunction doubleQuotedString(value, ctx) {\n const json = JSON.stringify(value);\n if (ctx.options.doubleQuotedAsJSON)\n return json;\n const { implicitKey } = ctx;\n const minMultiLineLength = ctx.options.doubleQuotedMinMultiLineLength;\n const indent = ctx.indent || (containsDocumentMarker(value) ? ' ' : '');\n let str = '';\n let start = 0;\n for (let i = 0, ch = json[i]; ch; ch = json[++i]) {\n if (ch === ' ' && json[i + 1] === '\\\\' && json[i + 2] === 'n') {\n // space before newline needs to be escaped to not be folded\n str += json.slice(start, i) + '\\\\ ';\n i += 1;\n start = i;\n ch = '\\\\';\n }\n if (ch === '\\\\')\n switch (json[i + 1]) {\n case 'u':\n {\n str += json.slice(start, i);\n const code = json.substr(i + 2, 4);\n switch (code) {\n case '0000':\n str += '\\\\0';\n break;\n case '0007':\n str += '\\\\a';\n break;\n case '000b':\n str += '\\\\v';\n break;\n case '001b':\n str += '\\\\e';\n break;\n case '0085':\n str += '\\\\N';\n break;\n case '00a0':\n str += '\\\\_';\n break;\n case '2028':\n str += '\\\\L';\n break;\n case '2029':\n str += '\\\\P';\n break;\n default:\n if (code.substr(0, 2) === '00')\n str += '\\\\x' + code.substr(2);\n else\n str += json.substr(i, 6);\n }\n i += 5;\n start = i + 1;\n }\n break;\n case 'n':\n if (implicitKey ||\n json[i + 2] === '\"' ||\n json.length < minMultiLineLength) {\n i += 1;\n }\n else {\n // folding will eat first newline\n str += json.slice(start, i) + '\\n\\n';\n while (json[i + 2] === '\\\\' &&\n json[i + 3] === 'n' &&\n json[i + 4] !== '\"') {\n str += '\\n';\n i += 2;\n }\n str += indent;\n // space after newline needs to be escaped to not be folded\n if (json[i + 2] === ' ')\n str += '\\\\';\n i += 1;\n start = i + 1;\n }\n break;\n default:\n i += 1;\n }\n }\n str = start ? str + json.slice(start) : json;\n return implicitKey\n ? str\n : foldFlowLines.foldFlowLines(str, indent, foldFlowLines.FOLD_QUOTED, getFoldOptions(ctx, false));\n}\nfunction singleQuotedString(value, ctx) {\n if (ctx.options.singleQuote === false ||\n (ctx.implicitKey && value.includes('\\n')) ||\n /[ \\t]\\n|\\n[ \\t]/.test(value) // single quoted string can't have leading or trailing whitespace around newline\n )\n return doubleQuotedString(value, ctx);\n const indent = ctx.indent || (containsDocumentMarker(value) ? ' ' : '');\n const res = \"'\" + value.replace(/'/g, \"''\").replace(/\\n+/g, `$&\\n${indent}`) + \"'\";\n return ctx.implicitKey\n ? res\n : foldFlowLines.foldFlowLines(res, indent, foldFlowLines.FOLD_FLOW, getFoldOptions(ctx, false));\n}\nfunction quotedString(value, ctx) {\n const { singleQuote } = ctx.options;\n let qs;\n if (singleQuote === false)\n qs = doubleQuotedString;\n else {\n const hasDouble = value.includes('\"');\n const hasSingle = value.includes(\"'\");\n if (hasDouble && !hasSingle)\n qs = singleQuotedString;\n else if (hasSingle && !hasDouble)\n qs = doubleQuotedString;\n else\n qs = singleQuote ? singleQuotedString : doubleQuotedString;\n }\n return qs(value, ctx);\n}\n// The negative lookbehind avoids a polynomial search,\n// but isn't supported yet on Safari: https://caniuse.com/js-regexp-lookbehind\nlet blockEndNewlines;\ntry {\n blockEndNewlines = new RegExp('(^|(?<!\\n))\\n+(?!\\n|$)', 'g');\n}\ncatch {\n blockEndNewlines = /\\n+(?!\\n|$)/g;\n}\nfunction blockString({ comment, type, value }, ctx, onComment, onChompKeep) {\n const { blockQuote, commentString, lineWidth } = ctx.options;\n // 1. Block can't end in whitespace unless the last line is non-empty.\n // 2. Strings consisting of only whitespace are best rendered explicitly.\n if (!blockQuote || /\\n[\\t ]+$/.test(value)) {\n return quotedString(value, ctx);\n }\n const indent = ctx.indent ||\n (ctx.forceBlockIndent || containsDocumentMarker(value) ? ' ' : '');\n const literal = blockQuote === 'literal'\n ? true\n : blockQuote === 'folded' || type === Scalar.Scalar.BLOCK_FOLDED\n ? false\n : type === Scalar.Scalar.BLOCK_LITERAL\n ? true\n : !lineLengthOverLimit(value, lineWidth, indent.length);\n if (!value)\n return literal ? '|\\n' : '>\\n';\n // determine chomping from whitespace at value end\n let chomp;\n let endStart;\n for (endStart = value.length; endStart > 0; --endStart) {\n const ch = value[endStart - 1];\n if (ch !== '\\n' && ch !== '\\t' && ch !== ' ')\n break;\n }\n let end = value.substring(endStart);\n const endNlPos = end.indexOf('\\n');\n if (endNlPos === -1) {\n chomp = '-'; // strip\n }\n else if (value === end || endNlPos !== end.length - 1) {\n chomp = '+'; // keep\n if (onChompKeep)\n onChompKeep();\n }\n else {\n chomp = ''; // clip\n }\n if (end) {\n value = value.slice(0, -end.length);\n if (end[end.length - 1] === '\\n')\n end = end.slice(0, -1);\n end = end.replace(blockEndNewlines, `$&${indent}`);\n }\n // determine indent indicator from whitespace at value start\n let startWithSpace = false;\n let startEnd;\n let startNlPos = -1;\n for (startEnd = 0; startEnd < value.length; ++startEnd) {\n const ch = value[startEnd];\n if (ch === ' ')\n startWithSpace = true;\n else if (ch === '\\n')\n startNlPos = startEnd;\n else\n break;\n }\n let start = value.substring(0, startNlPos < startEnd ? startNlPos + 1 : startEnd);\n if (start) {\n value = value.substring(start.length);\n start = start.replace(/\\n+/g, `$&${indent}`);\n }\n const indentSize = indent ? '2' : '1'; // root is at -1\n // Leading | or > is added later\n let header = (startWithSpace ? indentSize : '') + chomp;\n if (comment) {\n header += ' ' + commentString(comment.replace(/ ?[\\r\\n]+/g, ' '));\n if (onComment)\n onComment();\n }\n if (!literal) {\n const foldedValue = value\n .replace(/\\n+/g, '\\n$&')\n .replace(/(?:^|\\n)([\\t ].*)(?:([\\n\\t ]*)\\n(?![\\n\\t ]))?/g, '$1$2') // more-indented lines aren't folded\n // ^ more-ind. ^ empty ^ capture next empty lines only at end of indent\n .replace(/\\n+/g, `$&${indent}`);\n let literalFallback = false;\n const foldOptions = getFoldOptions(ctx, true);\n if (blockQuote !== 'folded' && type !== Scalar.Scalar.BLOCK_FOLDED) {\n foldOptions.onOverflow = () => {\n literalFallback = true;\n };\n }\n const body = foldFlowLines.foldFlowLines(`${start}${foldedValue}${end}`, indent, foldFlowLines.FOLD_BLOCK, foldOptions);\n if (!literalFallback)\n return `>${header}\\n${indent}${body}`;\n }\n value = value.replace(/\\n+/g, `$&${indent}`);\n return `|${header}\\n${indent}${start}${value}${end}`;\n}\nfunction plainString(item, ctx, onComment, onChompKeep) {\n const { type, value } = item;\n const { actualString, implicitKey, indent, indentStep, inFlow } = ctx;\n if ((implicitKey && value.includes('\\n')) ||\n (inFlow && /[[\\]{},]/.test(value))) {\n return quotedString(value, ctx);\n }\n if (/^[\\n\\t ,[\\]{}#&*!|>'\"%@`]|^[?-]$|^[?-][ \\t]|[\\n:][ \\t]|[ \\t]\\n|[\\n\\t ]#|[\\n\\t :]$/.test(value)) {\n // not allowed:\n // - '-' or '?'\n // - start with an indicator character (except [?:-]) or /[?-] /\n // - '\\n ', ': ' or ' \\n' anywhere\n // - '#' not preceded by a non-space char\n // - end with ' ' or ':'\n return implicitKey || inFlow || !value.includes('\\n')\n ? quotedString(value, ctx)\n : blockString(item, ctx, onComment, onChompKeep);\n }\n if (!implicitKey &&\n !inFlow &&\n type !== Scalar.Scalar.PLAIN &&\n value.includes('\\n')) {\n // Where allowed & type not set explicitly, prefer block style for multiline strings\n return blockString(item, ctx, onComment, onChompKeep);\n }\n if (containsDocumentMarker(value)) {\n if (indent === '') {\n ctx.forceBlockIndent = true;\n return blockString(item, ctx, onComment, onChompKeep);\n }\n else if (implicitKey && indent === indentStep) {\n return quotedString(value, ctx);\n }\n }\n const str = value.replace(/\\n+/g, `$&\\n${indent}`);\n // Verify that output will be parsed as a string, as e.g. plain numbers and\n // booleans get parsed with those types in v1.2 (e.g. '42', 'true' & '0.9e-3'),\n // and others in v1.1.\n if (actualString) {\n const test = (tag) => tag.default && tag.tag !== 'tag:yaml.org,2002:str' && tag.test?.test(str);\n const { compat, tags } = ctx.doc.schema;\n if (tags.some(test) || compat?.some(test))\n return quotedString(value, ctx);\n }\n return implicitKey\n ? str\n : foldFlowLines.foldFlowLines(str, indent, foldFlowLines.FOLD_FLOW, getFoldOptions(ctx, false));\n}\nfunction stringifyString(item, ctx, onComment, onChompKeep) {\n const { implicitKey, inFlow } = ctx;\n const ss = typeof item.value === 'string'\n ? item\n : Object.assign({}, item, { value: String(item.value) });\n let { type } = item;\n if (type !== Scalar.Scalar.QUOTE_DOUBLE) {\n // force double quotes on control characters & unpaired surrogates\n if (/[\\x00-\\x08\\x0b-\\x1f\\x7f-\\x9f\\u{D800}-\\u{DFFF}]/u.test(ss.value))\n type = Scalar.Scalar.QUOTE_DOUBLE;\n }\n const _stringify = (_type) => {\n switch (_type) {\n case Scalar.Scalar.BLOCK_FOLDED:\n case Scalar.Scalar.BLOCK_LITERAL:\n return implicitKey || inFlow\n ? quotedString(ss.value, ctx) // blocks are not valid inside flow containers\n : blockString(ss, ctx, onComment, onChompKeep);\n case Scalar.Scalar.QUOTE_DOUBLE:\n return doubleQuotedString(ss.value, ctx);\n case Scalar.Scalar.QUOTE_SINGLE:\n return singleQuotedString(ss.value, ctx);\n case Scalar.Scalar.PLAIN:\n return plainString(ss, ctx, onComment, onChompKeep);\n default:\n return null;\n }\n };\n let res = _stringify(type);\n if (res === null) {\n const { defaultKeyType, defaultStringType } = ctx.options;\n const t = (implicitKey && defaultKeyType) || defaultStringType;\n res = _stringify(t);\n if (res === null)\n throw new Error(`Unsupported default string type ${t}`);\n }\n return res;\n}\n\nexports.stringifyString = stringifyString;\n","'use strict';\n\nvar anchors = require('../doc/anchors.js');\nvar identity = require('../nodes/identity.js');\nvar stringifyComment = require('./stringifyComment.js');\nvar stringifyString = require('./stringifyString.js');\n\nfunction createStringifyContext(doc, options) {\n const opt = Object.assign({\n blockQuote: true,\n commentString: stringifyComment.stringifyComment,\n defaultKeyType: null,\n defaultStringType: 'PLAIN',\n directives: null,\n doubleQuotedAsJSON: false,\n doubleQuotedMinMultiLineLength: 40,\n falseStr: 'false',\n flowCollectionPadding: true,\n indentSeq: true,\n lineWidth: 80,\n minContentWidth: 20,\n nullStr: 'null',\n simpleKeys: false,\n singleQuote: null,\n trueStr: 'true',\n verifyAliasOrder: true\n }, doc.schema.toStringOptions, options);\n let inFlow;\n switch (opt.collectionStyle) {\n case 'block':\n inFlow = false;\n break;\n case 'flow':\n inFlow = true;\n break;\n default:\n inFlow = null;\n }\n return {\n anchors: new Set(),\n doc,\n flowCollectionPadding: opt.flowCollectionPadding ? ' ' : '',\n indent: '',\n indentStep: typeof opt.indent === 'number' ? ' '.repeat(opt.indent) : ' ',\n inFlow,\n options: opt\n };\n}\nfunction getTagObject(tags, item) {\n if (item.tag) {\n const match = tags.filter(t => t.tag === item.tag);\n if (match.length > 0)\n return match.find(t => t.format === item.format) ?? match[0];\n }\n let tagObj = undefined;\n let obj;\n if (identity.isScalar(item)) {\n obj = item.value;\n let match = tags.filter(t => t.identify?.(obj));\n if (match.length > 1) {\n const testMatch = match.filter(t => t.test);\n if (testMatch.length > 0)\n match = testMatch;\n }\n tagObj =\n match.find(t => t.format === item.format) ?? match.find(t => !t.format);\n }\n else {\n obj = item;\n tagObj = tags.find(t => t.nodeClass && obj instanceof t.nodeClass);\n }\n if (!tagObj) {\n const name = obj?.constructor?.name ?? (obj === null ? 'null' : typeof obj);\n throw new Error(`Tag not resolved for ${name} value`);\n }\n return tagObj;\n}\n// needs to be called before value stringifier to allow for circular anchor refs\nfunction stringifyProps(node, tagObj, { anchors: anchors$1, doc }) {\n if (!doc.directives)\n return '';\n const props = [];\n const anchor = (identity.isScalar(node) || identity.isCollection(node)) && node.anchor;\n if (anchor && anchors.anchorIsValid(anchor)) {\n anchors$1.add(anchor);\n props.push(`&${anchor}`);\n }\n const tag = node.tag ?? (tagObj.default ? null : tagObj.tag);\n if (tag)\n props.push(doc.directives.tagString(tag));\n return props.join(' ');\n}\nfunction stringify(item, ctx, onComment, onChompKeep) {\n if (identity.isPair(item))\n return item.toString(ctx, onComment, onChompKeep);\n if (identity.isAlias(item)) {\n if (ctx.doc.directives)\n return item.toString(ctx);\n if (ctx.resolvedAliases?.has(item)) {\n throw new TypeError(`Cannot stringify circular structure without alias nodes`);\n }\n else {\n if (ctx.resolvedAliases)\n ctx.resolvedAliases.add(item);\n else\n ctx.resolvedAliases = new Set([item]);\n item = item.resolve(ctx.doc);\n }\n }\n let tagObj = undefined;\n const node = identity.isNode(item)\n ? item\n : ctx.doc.createNode(item, { onTagObj: o => (tagObj = o) });\n tagObj ?? (tagObj = getTagObject(ctx.doc.schema.tags, node));\n const props = stringifyProps(node, tagObj, ctx);\n if (props.length > 0)\n ctx.indentAtStart = (ctx.indentAtStart ?? 0) + props.length + 1;\n const str = typeof tagObj.stringify === 'function'\n ? tagObj.stringify(node, ctx, onComment, onChompKeep)\n : identity.isScalar(node)\n ? stringifyString.stringifyString(node, ctx, onComment, onChompKeep)\n : node.toString(ctx, onComment, onChompKeep);\n if (!props)\n return str;\n return identity.isScalar(node) || str[0] === '{' || str[0] === '['\n ? `${props} ${str}`\n : `${props}\\n${ctx.indent}${str}`;\n}\n\nexports.createStringifyContext = createStringifyContext;\nexports.stringify = stringify;\n","'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar Scalar = require('../nodes/Scalar.js');\nvar stringify = require('./stringify.js');\nvar stringifyComment = require('./stringifyComment.js');\n\nfunction stringifyPair({ key, value }, ctx, onComment, onChompKeep) {\n const { allNullValues, doc, indent, indentStep, options: { commentString, indentSeq, simpleKeys } } = ctx;\n let keyComment = (identity.isNode(key) && key.comment) || null;\n if (simpleKeys) {\n if (keyComment) {\n throw new Error('With simple keys, key nodes cannot have comments');\n }\n if (identity.isCollection(key) || (!identity.isNode(key) && typeof key === 'object')) {\n const msg = 'With simple keys, collection cannot be used as a key value';\n throw new Error(msg);\n }\n }\n let explicitKey = !simpleKeys &&\n (!key ||\n (keyComment && value == null && !ctx.inFlow) ||\n identity.isCollection(key) ||\n (identity.isScalar(key)\n ? key.type === Scalar.Scalar.BLOCK_FOLDED || key.type === Scalar.Scalar.BLOCK_LITERAL\n : typeof key === 'object'));\n ctx = Object.assign({}, ctx, {\n allNullValues: false,\n implicitKey: !explicitKey && (simpleKeys || !allNullValues),\n indent: indent + indentStep\n });\n let keyCommentDone = false;\n let chompKeep = false;\n let str = stringify.stringify(key, ctx, () => (keyCommentDone = true), () => (chompKeep = true));\n if (!explicitKey && !ctx.inFlow && str.length > 1024) {\n if (simpleKeys)\n throw new Error('With simple keys, single line scalar must not span more than 1024 characters');\n explicitKey = true;\n }\n if (ctx.inFlow) {\n if (allNullValues || value == null) {\n if (keyCommentDone && onComment)\n onComment();\n return str === '' ? '?' : explicitKey ? `? ${str}` : str;\n }\n }\n else if ((allNullValues && !simpleKeys) || (value == null && explicitKey)) {\n str = `? ${str}`;\n if (keyComment && !keyCommentDone) {\n str += stringifyComment.lineComment(str, ctx.indent, commentString(keyComment));\n }\n else if (chompKeep && onChompKeep)\n onChompKeep();\n return str;\n }\n if (keyCommentDone)\n keyComment = null;\n if (explicitKey) {\n if (keyComment)\n str += stringifyComment.lineComment(str, ctx.indent, commentString(keyComment));\n str = `? ${str}\\n${indent}:`;\n }\n else {\n str = `${str}:`;\n if (keyComment)\n str += stringifyComment.lineComment(str, ctx.indent, commentString(keyComment));\n }\n let vsb, vcb, valueComment;\n if (identity.isNode(value)) {\n vsb = !!value.spaceBefore;\n vcb = value.commentBefore;\n valueComment = value.comment;\n }\n else {\n vsb = false;\n vcb = null;\n valueComment = null;\n if (value && typeof value === 'object')\n value = doc.createNode(value);\n }\n ctx.implicitKey = false;\n if (!explicitKey && !keyComment && identity.isScalar(value))\n ctx.indentAtStart = str.length + 1;\n chompKeep = false;\n if (!indentSeq &&\n indentStep.length >= 2 &&\n !ctx.inFlow &&\n !explicitKey &&\n identity.isSeq(value) &&\n !value.flow &&\n !value.tag &&\n !value.anchor) {\n // If indentSeq === false, consider '- ' as part of indentation where possible\n ctx.indent = ctx.indent.substring(2);\n }\n let valueCommentDone = false;\n const valueStr = stringify.stringify(value, ctx, () => (valueCommentDone = true), () => (chompKeep = true));\n let ws = ' ';\n if (keyComment || vsb || vcb) {\n ws = vsb ? '\\n' : '';\n if (vcb) {\n const cs = commentString(vcb);\n ws += `\\n${stringifyComment.indentComment(cs, ctx.indent)}`;\n }\n if (valueStr === '' && !ctx.inFlow) {\n if (ws === '\\n' && valueComment)\n ws = '\\n\\n';\n }\n else {\n ws += `\\n${ctx.indent}`;\n }\n }\n else if (!explicitKey && identity.isCollection(value)) {\n const vs0 = valueStr[0];\n const nl0 = valueStr.indexOf('\\n');\n const hasNewline = nl0 !== -1;\n const flow = ctx.inFlow ?? value.flow ?? value.items.length === 0;\n if (hasNewline || !flow) {\n let hasPropsLine = false;\n if (hasNewline && (vs0 === '&' || vs0 === '!')) {\n let sp0 = valueStr.indexOf(' ');\n if (vs0 === '&' &&\n sp0 !== -1 &&\n sp0 < nl0 &&\n valueStr[sp0 + 1] === '!') {\n sp0 = valueStr.indexOf(' ', sp0 + 1);\n }\n if (sp0 === -1 || nl0 < sp0)\n hasPropsLine = true;\n }\n if (!hasPropsLine)\n ws = `\\n${ctx.indent}`;\n }\n }\n else if (valueStr === '' || valueStr[0] === '\\n') {\n ws = '';\n }\n str += ws + valueStr;\n if (ctx.inFlow) {\n if (valueCommentDone && onComment)\n onComment();\n }\n else if (valueComment && !valueCommentDone) {\n str += stringifyComment.lineComment(str, ctx.indent, commentString(valueComment));\n }\n else if (chompKeep && onChompKeep) {\n onChompKeep();\n }\n return str;\n}\n\nexports.stringifyPair = stringifyPair;\n","'use strict';\n\nvar node_process = require('process');\n\nfunction debug(logLevel, ...messages) {\n if (logLevel === 'debug')\n console.log(...messages);\n}\nfunction warn(logLevel, warning) {\n if (logLevel === 'debug' || logLevel === 'warn') {\n if (typeof node_process.emitWarning === 'function')\n node_process.emitWarning(warning);\n else\n console.warn(warning);\n }\n}\n\nexports.debug = debug;\nexports.warn = warn;\n","'use strict';\n\nvar identity = require('../../nodes/identity.js');\nvar Scalar = require('../../nodes/Scalar.js');\n\n// If the value associated with a merge key is a single mapping node, each of\n// its key/value pairs is inserted into the current mapping, unless the key\n// already exists in it. If the value associated with the merge key is a\n// sequence, then this sequence is expected to contain mapping nodes and each\n// of these nodes is merged in turn according to its order in the sequence.\n// Keys in mapping nodes earlier in the sequence override keys specified in\n// later mapping nodes. -- http://yaml.org/type/merge.html\nconst MERGE_KEY = '<<';\nconst merge = {\n identify: value => value === MERGE_KEY ||\n (typeof value === 'symbol' && value.description === MERGE_KEY),\n default: 'key',\n tag: 'tag:yaml.org,2002:merge',\n test: /^<<$/,\n resolve: () => Object.assign(new Scalar.Scalar(Symbol(MERGE_KEY)), {\n addToJSMap: addMergeToJSMap\n }),\n stringify: () => MERGE_KEY\n};\nconst isMergeKey = (ctx, key) => (merge.identify(key) ||\n (identity.isScalar(key) &&\n (!key.type || key.type === Scalar.Scalar.PLAIN) &&\n merge.identify(key.value))) &&\n ctx?.doc.schema.tags.some(tag => tag.tag === merge.tag && tag.default);\nfunction addMergeToJSMap(ctx, map, value) {\n value = ctx && identity.isAlias(value) ? value.resolve(ctx.doc) : value;\n if (identity.isSeq(value))\n for (const it of value.items)\n mergeValue(ctx, map, it);\n else if (Array.isArray(value))\n for (const it of value)\n mergeValue(ctx, map, it);\n else\n mergeValue(ctx, map, value);\n}\nfunction mergeValue(ctx, map, value) {\n const source = ctx && identity.isAlias(value) ? value.resolve(ctx.doc) : value;\n if (!identity.isMap(source))\n throw new Error('Merge sources must be maps or map aliases');\n const srcMap = source.toJSON(null, ctx, Map);\n for (const [key, value] of srcMap) {\n if (map instanceof Map) {\n if (!map.has(key))\n map.set(key, value);\n }\n else if (map instanceof Set) {\n map.add(key);\n }\n else if (!Object.prototype.hasOwnProperty.call(map, key)) {\n Object.defineProperty(map, key, {\n value,\n writable: true,\n enumerable: true,\n configurable: true\n });\n }\n }\n return map;\n}\n\nexports.addMergeToJSMap = addMergeToJSMap;\nexports.isMergeKey = isMergeKey;\nexports.merge = merge;\n","'use strict';\n\nvar log = require('../log.js');\nvar merge = require('../schema/yaml-1.1/merge.js');\nvar stringify = require('../stringify/stringify.js');\nvar identity = require('./identity.js');\nvar toJS = require('./toJS.js');\n\nfunction addPairToJSMap(ctx, map, { key, value }) {\n if (identity.isNode(key) && key.addToJSMap)\n key.addToJSMap(ctx, map, value);\n // TODO: Should drop this special case for bare << handling\n else if (merge.isMergeKey(ctx, key))\n merge.addMergeToJSMap(ctx, map, value);\n else {\n const jsKey = toJS.toJS(key, '', ctx);\n if (map instanceof Map) {\n map.set(jsKey, toJS.toJS(value, jsKey, ctx));\n }\n else if (map instanceof Set) {\n map.add(jsKey);\n }\n else {\n const stringKey = stringifyKey(key, jsKey, ctx);\n const jsValue = toJS.toJS(value, stringKey, ctx);\n if (stringKey in map)\n Object.defineProperty(map, stringKey, {\n value: jsValue,\n writable: true,\n enumerable: true,\n configurable: true\n });\n else\n map[stringKey] = jsValue;\n }\n }\n return map;\n}\nfunction stringifyKey(key, jsKey, ctx) {\n if (jsKey === null)\n return '';\n // eslint-disable-next-line @typescript-eslint/no-base-to-string\n if (typeof jsKey !== 'object')\n return String(jsKey);\n if (identity.isNode(key) && ctx?.doc) {\n const strCtx = stringify.createStringifyContext(ctx.doc, {});\n strCtx.anchors = new Set();\n for (const node of ctx.anchors.keys())\n strCtx.anchors.add(node.anchor);\n strCtx.inFlow = true;\n strCtx.inStringifyKey = true;\n const strKey = key.toString(strCtx);\n if (!ctx.mapKeyWarned) {\n let jsonStr = JSON.stringify(strKey);\n if (jsonStr.length > 40)\n jsonStr = jsonStr.substring(0, 36) + '...\"';\n log.warn(ctx.doc.options.logLevel, `Keys with collection values will be stringified due to JS Object restrictions: ${jsonStr}. Set mapAsMap: true to use object keys.`);\n ctx.mapKeyWarned = true;\n }\n return strKey;\n }\n return JSON.stringify(jsKey);\n}\n\nexports.addPairToJSMap = addPairToJSMap;\n","'use strict';\n\nvar createNode = require('../doc/createNode.js');\nvar stringifyPair = require('../stringify/stringifyPair.js');\nvar addPairToJSMap = require('./addPairToJSMap.js');\nvar identity = require('./identity.js');\n\nfunction createPair(key, value, ctx) {\n const k = createNode.createNode(key, undefined, ctx);\n const v = createNode.createNode(value, undefined, ctx);\n return new Pair(k, v);\n}\nclass Pair {\n constructor(key, value = null) {\n Object.defineProperty(this, identity.NODE_TYPE, { value: identity.PAIR });\n this.key = key;\n this.value = value;\n }\n clone(schema) {\n let { key, value } = this;\n if (identity.isNode(key))\n key = key.clone(schema);\n if (identity.isNode(value))\n value = value.clone(schema);\n return new Pair(key, value);\n }\n toJSON(_, ctx) {\n const pair = ctx?.mapAsMap ? new Map() : {};\n return addPairToJSMap.addPairToJSMap(ctx, pair, this);\n }\n toString(ctx, onComment, onChompKeep) {\n return ctx?.doc\n ? stringifyPair.stringifyPair(this, ctx, onComment, onChompKeep)\n : JSON.stringify(this);\n }\n}\n\nexports.Pair = Pair;\nexports.createPair = createPair;\n","'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar stringify = require('./stringify.js');\nvar stringifyComment = require('./stringifyComment.js');\n\nfunction stringifyCollection(collection, ctx, options) {\n const flow = ctx.inFlow ?? collection.flow;\n const stringify = flow ? stringifyFlowCollection : stringifyBlockCollection;\n return stringify(collection, ctx, options);\n}\nfunction stringifyBlockCollection({ comment, items }, ctx, { blockItemPrefix, flowChars, itemIndent, onChompKeep, onComment }) {\n const { indent, options: { commentString } } = ctx;\n const itemCtx = Object.assign({}, ctx, { indent: itemIndent, type: null });\n let chompKeep = false; // flag for the preceding node's status\n const lines = [];\n for (let i = 0; i < items.length; ++i) {\n const item = items[i];\n let comment = null;\n if (identity.isNode(item)) {\n if (!chompKeep && item.spaceBefore)\n lines.push('');\n addCommentBefore(ctx, lines, item.commentBefore, chompKeep);\n if (item.comment)\n comment = item.comment;\n }\n else if (identity.isPair(item)) {\n const ik = identity.isNode(item.key) ? item.key : null;\n if (ik) {\n if (!chompKeep && ik.spaceBefore)\n lines.push('');\n addCommentBefore(ctx, lines, ik.commentBefore, chompKeep);\n }\n }\n chompKeep = false;\n let str = stringify.stringify(item, itemCtx, () => (comment = null), () => (chompKeep = true));\n if (comment)\n str += stringifyComment.lineComment(str, itemIndent, commentString(comment));\n if (chompKeep && comment)\n chompKeep = false;\n lines.push(blockItemPrefix + str);\n }\n let str;\n if (lines.length === 0) {\n str = flowChars.start + flowChars.end;\n }\n else {\n str = lines[0];\n for (let i = 1; i < lines.length; ++i) {\n const line = lines[i];\n str += line ? `\\n${indent}${line}` : '\\n';\n }\n }\n if (comment) {\n str += '\\n' + stringifyComment.indentComment(commentString(comment), indent);\n if (onComment)\n onComment();\n }\n else if (chompKeep && onChompKeep)\n onChompKeep();\n return str;\n}\nfunction stringifyFlowCollection({ items }, ctx, { flowChars, itemIndent }) {\n const { indent, indentStep, flowCollectionPadding: fcPadding, options: { commentString } } = ctx;\n itemIndent += indentStep;\n const itemCtx = Object.assign({}, ctx, {\n indent: itemIndent,\n inFlow: true,\n type: null\n });\n let reqNewline = false;\n let linesAtValue = 0;\n const lines = [];\n for (let i = 0; i < items.length; ++i) {\n const item = items[i];\n let comment = null;\n if (identity.isNode(item)) {\n if (item.spaceBefore)\n lines.push('');\n addCommentBefore(ctx, lines, item.commentBefore, false);\n if (item.comment)\n comment = item.comment;\n }\n else if (identity.isPair(item)) {\n const ik = identity.isNode(item.key) ? item.key : null;\n if (ik) {\n if (ik.spaceBefore)\n lines.push('');\n addCommentBefore(ctx, lines, ik.commentBefore, false);\n if (ik.comment)\n reqNewline = true;\n }\n const iv = identity.isNode(item.value) ? item.value : null;\n if (iv) {\n if (iv.comment)\n comment = iv.comment;\n if (iv.commentBefore)\n reqNewline = true;\n }\n else if (item.value == null && ik?.comment) {\n comment = ik.comment;\n }\n }\n if (comment)\n reqNewline = true;\n let str = stringify.stringify(item, itemCtx, () => (comment = null));\n if (i < items.length - 1)\n str += ',';\n if (comment)\n str += stringifyComment.lineComment(str, itemIndent, commentString(comment));\n if (!reqNewline && (lines.length > linesAtValue || str.includes('\\n')))\n reqNewline = true;\n lines.push(str);\n linesAtValue = lines.length;\n }\n const { start, end } = flowChars;\n if (lines.length === 0) {\n return start + end;\n }\n else {\n if (!reqNewline) {\n const len = lines.reduce((sum, line) => sum + line.length + 2, 2);\n reqNewline = ctx.options.lineWidth > 0 && len > ctx.options.lineWidth;\n }\n if (reqNewline) {\n let str = start;\n for (const line of lines)\n str += line ? `\\n${indentStep}${indent}${line}` : '\\n';\n return `${str}\\n${indent}${end}`;\n }\n else {\n return `${start}${fcPadding}${lines.join(' ')}${fcPadding}${end}`;\n }\n }\n}\nfunction addCommentBefore({ indent, options: { commentString } }, lines, comment, chompKeep) {\n if (comment && chompKeep)\n comment = comment.replace(/^\\n+/, '');\n if (comment) {\n const ic = stringifyComment.indentComment(commentString(comment), indent);\n lines.push(ic.trimStart()); // Avoid double indent on first line\n }\n}\n\nexports.stringifyCollection = stringifyCollection;\n","'use strict';\n\nvar stringifyCollection = require('../stringify/stringifyCollection.js');\nvar addPairToJSMap = require('./addPairToJSMap.js');\nvar Collection = require('./Collection.js');\nvar identity = require('./identity.js');\nvar Pair = require('./Pair.js');\nvar Scalar = require('./Scalar.js');\n\nfunction findPair(items, key) {\n const k = identity.isScalar(key) ? key.value : key;\n for (const it of items) {\n if (identity.isPair(it)) {\n if (it.key === key || it.key === k)\n return it;\n if (identity.isScalar(it.key) && it.key.value === k)\n return it;\n }\n }\n return undefined;\n}\nclass YAMLMap extends Collection.Collection {\n static get tagName() {\n return 'tag:yaml.org,2002:map';\n }\n constructor(schema) {\n super(identity.MAP, schema);\n this.items = [];\n }\n /**\n * A generic collection parsing method that can be extended\n * to other node classes that inherit from YAMLMap\n */\n static from(schema, obj, ctx) {\n const { keepUndefined, replacer } = ctx;\n const map = new this(schema);\n const add = (key, value) => {\n if (typeof replacer === 'function')\n value = replacer.call(obj, key, value);\n else if (Array.isArray(replacer) && !replacer.includes(key))\n return;\n if (value !== undefined || keepUndefined)\n map.items.push(Pair.createPair(key, value, ctx));\n };\n if (obj instanceof Map) {\n for (const [key, value] of obj)\n add(key, value);\n }\n else if (obj && typeof obj === 'object') {\n for (const key of Object.keys(obj))\n add(key, obj[key]);\n }\n if (typeof schema.sortMapEntries === 'function') {\n map.items.sort(schema.sortMapEntries);\n }\n return map;\n }\n /**\n * Adds a value to the collection.\n *\n * @param overwrite - If not set `true`, using a key that is already in the\n * collection will throw. Otherwise, overwrites the previous value.\n */\n add(pair, overwrite) {\n let _pair;\n if (identity.isPair(pair))\n _pair = pair;\n else if (!pair || typeof pair !== 'object' || !('key' in pair)) {\n // In TypeScript, this never happens.\n _pair = new Pair.Pair(pair, pair?.value);\n }\n else\n _pair = new Pair.Pair(pair.key, pair.value);\n const prev = findPair(this.items, _pair.key);\n const sortEntries = this.schema?.sortMapEntries;\n if (prev) {\n if (!overwrite)\n throw new Error(`Key ${_pair.key} already set`);\n // For scalars, keep the old node & its comments and anchors\n if (identity.isScalar(prev.value) && Scalar.isScalarValue(_pair.value))\n prev.value.value = _pair.value;\n else\n prev.value = _pair.value;\n }\n else if (sortEntries) {\n const i = this.items.findIndex(item => sortEntries(_pair, item) < 0);\n if (i === -1)\n this.items.push(_pair);\n else\n this.items.splice(i, 0, _pair);\n }\n else {\n this.items.push(_pair);\n }\n }\n delete(key) {\n const it = findPair(this.items, key);\n if (!it)\n return false;\n const del = this.items.splice(this.items.indexOf(it), 1);\n return del.length > 0;\n }\n get(key, keepScalar) {\n const it = findPair(this.items, key);\n const node = it?.value;\n return (!keepScalar && identity.isScalar(node) ? node.value : node) ?? undefined;\n }\n has(key) {\n return !!findPair(this.items, key);\n }\n set(key, value) {\n this.add(new Pair.Pair(key, value), true);\n }\n /**\n * @param ctx - Conversion context, originally set in Document#toJS()\n * @param {Class} Type - If set, forces the returned collection type\n * @returns Instance of Type, Map, or Object\n */\n toJSON(_, ctx, Type) {\n const map = Type ? new Type() : ctx?.mapAsMap ? new Map() : {};\n if (ctx?.onCreate)\n ctx.onCreate(map);\n for (const item of this.items)\n addPairToJSMap.addPairToJSMap(ctx, map, item);\n return map;\n }\n toString(ctx, onComment, onChompKeep) {\n if (!ctx)\n return JSON.stringify(this);\n for (const item of this.items) {\n if (!identity.isPair(item))\n throw new Error(`Map items must all be pairs; found ${JSON.stringify(item)} instead`);\n }\n if (!ctx.allNullValues && this.hasAllNullValues(false))\n ctx = Object.assign({}, ctx, { allNullValues: true });\n return stringifyCollection.stringifyCollection(this, ctx, {\n blockItemPrefix: '',\n flowChars: { start: '{', end: '}' },\n itemIndent: ctx.indent || '',\n onChompKeep,\n onComment\n });\n }\n}\n\nexports.YAMLMap = YAMLMap;\nexports.findPair = findPair;\n","'use strict';\n\nvar identity = require('../../nodes/identity.js');\nvar YAMLMap = require('../../nodes/YAMLMap.js');\n\nconst map = {\n collection: 'map',\n default: true,\n nodeClass: YAMLMap.YAMLMap,\n tag: 'tag:yaml.org,2002:map',\n resolve(map, onError) {\n if (!identity.isMap(map))\n onError('Expected a mapping for this tag');\n return map;\n },\n createNode: (schema, obj, ctx) => YAMLMap.YAMLMap.from(schema, obj, ctx)\n};\n\nexports.map = map;\n","'use strict';\n\nvar createNode = require('../doc/createNode.js');\nvar stringifyCollection = require('../stringify/stringifyCollection.js');\nvar Collection = require('./Collection.js');\nvar identity = require('./identity.js');\nvar Scalar = require('./Scalar.js');\nvar toJS = require('./toJS.js');\n\nclass YAMLSeq extends Collection.Collection {\n static get tagName() {\n return 'tag:yaml.org,2002:seq';\n }\n constructor(schema) {\n super(identity.SEQ, schema);\n this.items = [];\n }\n add(value) {\n this.items.push(value);\n }\n /**\n * Removes a value from the collection.\n *\n * `key` must contain a representation of an integer for this to succeed.\n * It may be wrapped in a `Scalar`.\n *\n * @returns `true` if the item was found and removed.\n */\n delete(key) {\n const idx = asItemIndex(key);\n if (typeof idx !== 'number')\n return false;\n const del = this.items.splice(idx, 1);\n return del.length > 0;\n }\n get(key, keepScalar) {\n const idx = asItemIndex(key);\n if (typeof idx !== 'number')\n return undefined;\n const it = this.items[idx];\n return !keepScalar && identity.isScalar(it) ? it.value : it;\n }\n /**\n * Checks if the collection includes a value with the key `key`.\n *\n * `key` must contain a representation of an integer for this to succeed.\n * It may be wrapped in a `Scalar`.\n */\n has(key) {\n const idx = asItemIndex(key);\n return typeof idx === 'number' && idx < this.items.length;\n }\n /**\n * Sets a value in this collection. For `!!set`, `value` needs to be a\n * boolean to add/remove the item from the set.\n *\n * If `key` does not contain a representation of an integer, this will throw.\n * It may be wrapped in a `Scalar`.\n */\n set(key, value) {\n const idx = asItemIndex(key);\n if (typeof idx !== 'number')\n throw new Error(`Expected a valid index, not ${key}.`);\n const prev = this.items[idx];\n if (identity.isScalar(prev) && Scalar.isScalarValue(value))\n prev.value = value;\n else\n this.items[idx] = value;\n }\n toJSON(_, ctx) {\n const seq = [];\n if (ctx?.onCreate)\n ctx.onCreate(seq);\n let i = 0;\n for (const item of this.items)\n seq.push(toJS.toJS(item, String(i++), ctx));\n return seq;\n }\n toString(ctx, onComment, onChompKeep) {\n if (!ctx)\n return JSON.stringify(this);\n return stringifyCollection.stringifyCollection(this, ctx, {\n blockItemPrefix: '- ',\n flowChars: { start: '[', end: ']' },\n itemIndent: (ctx.indent || '') + ' ',\n onChompKeep,\n onComment\n });\n }\n static from(schema, obj, ctx) {\n const { replacer } = ctx;\n const seq = new this(schema);\n if (obj && Symbol.iterator in Object(obj)) {\n let i = 0;\n for (let it of obj) {\n if (typeof replacer === 'function') {\n const key = obj instanceof Set ? it : String(i++);\n it = replacer.call(obj, key, it);\n }\n seq.items.push(createNode.createNode(it, undefined, ctx));\n }\n }\n return seq;\n }\n}\nfunction asItemIndex(key) {\n let idx = identity.isScalar(key) ? key.value : key;\n if (idx && typeof idx === 'string')\n idx = Number(idx);\n return typeof idx === 'number' && Number.isInteger(idx) && idx >= 0\n ? idx\n : null;\n}\n\nexports.YAMLSeq = YAMLSeq;\n","'use strict';\n\nvar identity = require('../../nodes/identity.js');\nvar YAMLSeq = require('../../nodes/YAMLSeq.js');\n\nconst seq = {\n collection: 'seq',\n default: true,\n nodeClass: YAMLSeq.YAMLSeq,\n tag: 'tag:yaml.org,2002:seq',\n resolve(seq, onError) {\n if (!identity.isSeq(seq))\n onError('Expected a sequence for this tag');\n return seq;\n },\n createNode: (schema, obj, ctx) => YAMLSeq.YAMLSeq.from(schema, obj, ctx)\n};\n\nexports.seq = seq;\n","'use strict';\n\nvar stringifyString = require('../../stringify/stringifyString.js');\n\nconst string = {\n identify: value => typeof value === 'string',\n default: true,\n tag: 'tag:yaml.org,2002:str',\n resolve: str => str,\n stringify(item, ctx, onComment, onChompKeep) {\n ctx = Object.assign({ actualString: true }, ctx);\n return stringifyString.stringifyString(item, ctx, onComment, onChompKeep);\n }\n};\n\nexports.string = string;\n","'use strict';\n\nvar Scalar = require('../../nodes/Scalar.js');\n\nconst nullTag = {\n identify: value => value == null,\n createNode: () => new Scalar.Scalar(null),\n default: true,\n tag: 'tag:yaml.org,2002:null',\n test: /^(?:~|[Nn]ull|NULL)?$/,\n resolve: () => new Scalar.Scalar(null),\n stringify: ({ source }, ctx) => typeof source === 'string' && nullTag.test.test(source)\n ? source\n : ctx.options.nullStr\n};\n\nexports.nullTag = nullTag;\n","'use strict';\n\nvar Scalar = require('../../nodes/Scalar.js');\n\nconst boolTag = {\n identify: value => typeof value === 'boolean',\n default: true,\n tag: 'tag:yaml.org,2002:bool',\n test: /^(?:[Tt]rue|TRUE|[Ff]alse|FALSE)$/,\n resolve: str => new Scalar.Scalar(str[0] === 't' || str[0] === 'T'),\n stringify({ source, value }, ctx) {\n if (source && boolTag.test.test(source)) {\n const sv = source[0] === 't' || source[0] === 'T';\n if (value === sv)\n return source;\n }\n return value ? ctx.options.trueStr : ctx.options.falseStr;\n }\n};\n\nexports.boolTag = boolTag;\n","'use strict';\n\nfunction stringifyNumber({ format, minFractionDigits, tag, value }) {\n if (typeof value === 'bigint')\n return String(value);\n const num = typeof value === 'number' ? value : Number(value);\n if (!isFinite(num))\n return isNaN(num) ? '.nan' : num < 0 ? '-.inf' : '.inf';\n let n = Object.is(value, -0) ? '-0' : JSON.stringify(value);\n if (!format &&\n minFractionDigits &&\n (!tag || tag === 'tag:yaml.org,2002:float') &&\n /^\\d/.test(n)) {\n let i = n.indexOf('.');\n if (i < 0) {\n i = n.length;\n n += '.';\n }\n let d = minFractionDigits - (n.length - i - 1);\n while (d-- > 0)\n n += '0';\n }\n return n;\n}\n\nexports.stringifyNumber = stringifyNumber;\n","'use strict';\n\nvar Scalar = require('../../nodes/Scalar.js');\nvar stringifyNumber = require('../../stringify/stringifyNumber.js');\n\nconst floatNaN = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n test: /^(?:[-+]?\\.(?:inf|Inf|INF)|\\.nan|\\.NaN|\\.NAN)$/,\n resolve: str => str.slice(-3).toLowerCase() === 'nan'\n ? NaN\n : str[0] === '-'\n ? Number.NEGATIVE_INFINITY\n : Number.POSITIVE_INFINITY,\n stringify: stringifyNumber.stringifyNumber\n};\nconst floatExp = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n format: 'EXP',\n test: /^[-+]?(?:\\.[0-9]+|[0-9]+(?:\\.[0-9]*)?)[eE][-+]?[0-9]+$/,\n resolve: str => parseFloat(str),\n stringify(node) {\n const num = Number(node.value);\n return isFinite(num) ? num.toExponential() : stringifyNumber.stringifyNumber(node);\n }\n};\nconst float = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n test: /^[-+]?(?:\\.[0-9]+|[0-9]+\\.[0-9]*)$/,\n resolve(str) {\n const node = new Scalar.Scalar(parseFloat(str));\n const dot = str.indexOf('.');\n if (dot !== -1 && str[str.length - 1] === '0')\n node.minFractionDigits = str.length - dot - 1;\n return node;\n },\n stringify: stringifyNumber.stringifyNumber\n};\n\nexports.float = float;\nexports.floatExp = floatExp;\nexports.floatNaN = floatNaN;\n","'use strict';\n\nvar stringifyNumber = require('../../stringify/stringifyNumber.js');\n\nconst intIdentify = (value) => typeof value === 'bigint' || Number.isInteger(value);\nconst intResolve = (str, offset, radix, { intAsBigInt }) => (intAsBigInt ? BigInt(str) : parseInt(str.substring(offset), radix));\nfunction intStringify(node, radix, prefix) {\n const { value } = node;\n if (intIdentify(value) && value >= 0)\n return prefix + value.toString(radix);\n return stringifyNumber.stringifyNumber(node);\n}\nconst intOct = {\n identify: value => intIdentify(value) && value >= 0,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n format: 'OCT',\n test: /^0o[0-7]+$/,\n resolve: (str, _onError, opt) => intResolve(str, 2, 8, opt),\n stringify: node => intStringify(node, 8, '0o')\n};\nconst int = {\n identify: intIdentify,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n test: /^[-+]?[0-9]+$/,\n resolve: (str, _onError, opt) => intResolve(str, 0, 10, opt),\n stringify: stringifyNumber.stringifyNumber\n};\nconst intHex = {\n identify: value => intIdentify(value) && value >= 0,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n format: 'HEX',\n test: /^0x[0-9a-fA-F]+$/,\n resolve: (str, _onError, opt) => intResolve(str, 2, 16, opt),\n stringify: node => intStringify(node, 16, '0x')\n};\n\nexports.int = int;\nexports.intHex = intHex;\nexports.intOct = intOct;\n","'use strict';\n\nvar map = require('../common/map.js');\nvar _null = require('../common/null.js');\nvar seq = require('../common/seq.js');\nvar string = require('../common/string.js');\nvar bool = require('./bool.js');\nvar float = require('./float.js');\nvar int = require('./int.js');\n\nconst schema = [\n map.map,\n seq.seq,\n string.string,\n _null.nullTag,\n bool.boolTag,\n int.intOct,\n int.int,\n int.intHex,\n float.floatNaN,\n float.floatExp,\n float.float\n];\n\nexports.schema = schema;\n","'use strict';\n\nvar Scalar = require('../../nodes/Scalar.js');\nvar map = require('../common/map.js');\nvar seq = require('../common/seq.js');\n\nfunction intIdentify(value) {\n return typeof value === 'bigint' || Number.isInteger(value);\n}\nconst stringifyJSON = ({ value }) => JSON.stringify(value);\nconst jsonScalars = [\n {\n identify: value => typeof value === 'string',\n default: true,\n tag: 'tag:yaml.org,2002:str',\n resolve: str => str,\n stringify: stringifyJSON\n },\n {\n identify: value => value == null,\n createNode: () => new Scalar.Scalar(null),\n default: true,\n tag: 'tag:yaml.org,2002:null',\n test: /^null$/,\n resolve: () => null,\n stringify: stringifyJSON\n },\n {\n identify: value => typeof value === 'boolean',\n default: true,\n tag: 'tag:yaml.org,2002:bool',\n test: /^true$|^false$/,\n resolve: str => str === 'true',\n stringify: stringifyJSON\n },\n {\n identify: intIdentify,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n test: /^-?(?:0|[1-9][0-9]*)$/,\n resolve: (str, _onError, { intAsBigInt }) => intAsBigInt ? BigInt(str) : parseInt(str, 10),\n stringify: ({ value }) => intIdentify(value) ? value.toString() : JSON.stringify(value)\n },\n {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n test: /^-?(?:0|[1-9][0-9]*)(?:\\.[0-9]*)?(?:[eE][-+]?[0-9]+)?$/,\n resolve: str => parseFloat(str),\n stringify: stringifyJSON\n }\n];\nconst jsonError = {\n default: true,\n tag: '',\n test: /^/,\n resolve(str, onError) {\n onError(`Unresolved plain scalar ${JSON.stringify(str)}`);\n return str;\n }\n};\nconst schema = [map.map, seq.seq].concat(jsonScalars, jsonError);\n\nexports.schema = schema;\n","'use strict';\n\nvar node_buffer = require('buffer');\nvar Scalar = require('../../nodes/Scalar.js');\nvar stringifyString = require('../../stringify/stringifyString.js');\n\nconst binary = {\n identify: value => value instanceof Uint8Array, // Buffer inherits from Uint8Array\n default: false,\n tag: 'tag:yaml.org,2002:binary',\n /**\n * Returns a Buffer in node and an Uint8Array in browsers\n *\n * To use the resulting buffer as an image, you'll want to do something like:\n *\n * const blob = new Blob([buffer], { type: 'image/jpeg' })\n * document.querySelector('#photo').src = URL.createObjectURL(blob)\n */\n resolve(src, onError) {\n if (typeof node_buffer.Buffer === 'function') {\n return node_buffer.Buffer.from(src, 'base64');\n }\n else if (typeof atob === 'function') {\n // On IE 11, atob() can't handle newlines\n const str = atob(src.replace(/[\\n\\r]/g, ''));\n const buffer = new Uint8Array(str.length);\n for (let i = 0; i < str.length; ++i)\n buffer[i] = str.charCodeAt(i);\n return buffer;\n }\n else {\n onError('This environment does not support reading binary tags; either Buffer or atob is required');\n return src;\n }\n },\n stringify({ comment, type, value }, ctx, onComment, onChompKeep) {\n if (!value)\n return '';\n const buf = value; // checked earlier by binary.identify()\n let str;\n if (typeof node_buffer.Buffer === 'function') {\n str =\n buf instanceof node_buffer.Buffer\n ? buf.toString('base64')\n : node_buffer.Buffer.from(buf.buffer).toString('base64');\n }\n else if (typeof btoa === 'function') {\n let s = '';\n for (let i = 0; i < buf.length; ++i)\n s += String.fromCharCode(buf[i]);\n str = btoa(s);\n }\n else {\n throw new Error('This environment does not support writing binary tags; either Buffer or btoa is required');\n }\n type ?? (type = Scalar.Scalar.BLOCK_LITERAL);\n if (type !== Scalar.Scalar.QUOTE_DOUBLE) {\n const lineWidth = Math.max(ctx.options.lineWidth - ctx.indent.length, ctx.options.minContentWidth);\n const n = Math.ceil(str.length / lineWidth);\n const lines = new Array(n);\n for (let i = 0, o = 0; i < n; ++i, o += lineWidth) {\n lines[i] = str.substr(o, lineWidth);\n }\n str = lines.join(type === Scalar.Scalar.BLOCK_LITERAL ? '\\n' : ' ');\n }\n return stringifyString.stringifyString({ comment, type, value: str }, ctx, onComment, onChompKeep);\n }\n};\n\nexports.binary = binary;\n","'use strict';\n\nvar identity = require('../../nodes/identity.js');\nvar Pair = require('../../nodes/Pair.js');\nvar Scalar = require('../../nodes/Scalar.js');\nvar YAMLSeq = require('../../nodes/YAMLSeq.js');\n\nfunction resolvePairs(seq, onError) {\n if (identity.isSeq(seq)) {\n for (let i = 0; i < seq.items.length; ++i) {\n let item = seq.items[i];\n if (identity.isPair(item))\n continue;\n else if (identity.isMap(item)) {\n if (item.items.length > 1)\n onError('Each pair must have its own sequence indicator');\n const pair = item.items[0] || new Pair.Pair(new Scalar.Scalar(null));\n if (item.commentBefore)\n pair.key.commentBefore = pair.key.commentBefore\n ? `${item.commentBefore}\\n${pair.key.commentBefore}`\n : item.commentBefore;\n if (item.comment) {\n const cn = pair.value ?? pair.key;\n cn.comment = cn.comment\n ? `${item.comment}\\n${cn.comment}`\n : item.comment;\n }\n item = pair;\n }\n seq.items[i] = identity.isPair(item) ? item : new Pair.Pair(item);\n }\n }\n else\n onError('Expected a sequence for this tag');\n return seq;\n}\nfunction createPairs(schema, iterable, ctx) {\n const { replacer } = ctx;\n const pairs = new YAMLSeq.YAMLSeq(schema);\n pairs.tag = 'tag:yaml.org,2002:pairs';\n let i = 0;\n if (iterable && Symbol.iterator in Object(iterable))\n for (let it of iterable) {\n if (typeof replacer === 'function')\n it = replacer.call(iterable, String(i++), it);\n let key, value;\n if (Array.isArray(it)) {\n if (it.length === 2) {\n key = it[0];\n value = it[1];\n }\n else\n throw new TypeError(`Expected [key, value] tuple: ${it}`);\n }\n else if (it && it instanceof Object) {\n const keys = Object.keys(it);\n if (keys.length === 1) {\n key = keys[0];\n value = it[key];\n }\n else {\n throw new TypeError(`Expected tuple with one key, not ${keys.length} keys`);\n }\n }\n else {\n key = it;\n }\n pairs.items.push(Pair.createPair(key, value, ctx));\n }\n return pairs;\n}\nconst pairs = {\n collection: 'seq',\n default: false,\n tag: 'tag:yaml.org,2002:pairs',\n resolve: resolvePairs,\n createNode: createPairs\n};\n\nexports.createPairs = createPairs;\nexports.pairs = pairs;\nexports.resolvePairs = resolvePairs;\n","'use strict';\n\nvar identity = require('../../nodes/identity.js');\nvar toJS = require('../../nodes/toJS.js');\nvar YAMLMap = require('../../nodes/YAMLMap.js');\nvar YAMLSeq = require('../../nodes/YAMLSeq.js');\nvar pairs = require('./pairs.js');\n\nclass YAMLOMap extends YAMLSeq.YAMLSeq {\n constructor() {\n super();\n this.add = YAMLMap.YAMLMap.prototype.add.bind(this);\n this.delete = YAMLMap.YAMLMap.prototype.delete.bind(this);\n this.get = YAMLMap.YAMLMap.prototype.get.bind(this);\n this.has = YAMLMap.YAMLMap.prototype.has.bind(this);\n this.set = YAMLMap.YAMLMap.prototype.set.bind(this);\n this.tag = YAMLOMap.tag;\n }\n /**\n * If `ctx` is given, the return type is actually `Map<unknown, unknown>`,\n * but TypeScript won't allow widening the signature of a child method.\n */\n toJSON(_, ctx) {\n if (!ctx)\n return super.toJSON(_);\n const map = new Map();\n if (ctx?.onCreate)\n ctx.onCreate(map);\n for (const pair of this.items) {\n let key, value;\n if (identity.isPair(pair)) {\n key = toJS.toJS(pair.key, '', ctx);\n value = toJS.toJS(pair.value, key, ctx);\n }\n else {\n key = toJS.toJS(pair, '', ctx);\n }\n if (map.has(key))\n throw new Error('Ordered maps must not include duplicate keys');\n map.set(key, value);\n }\n return map;\n }\n static from(schema, iterable, ctx) {\n const pairs$1 = pairs.createPairs(schema, iterable, ctx);\n const omap = new this();\n omap.items = pairs$1.items;\n return omap;\n }\n}\nYAMLOMap.tag = 'tag:yaml.org,2002:omap';\nconst omap = {\n collection: 'seq',\n identify: value => value instanceof Map,\n nodeClass: YAMLOMap,\n default: false,\n tag: 'tag:yaml.org,2002:omap',\n resolve(seq, onError) {\n const pairs$1 = pairs.resolvePairs(seq, onError);\n const seenKeys = [];\n for (const { key } of pairs$1.items) {\n if (identity.isScalar(key)) {\n if (seenKeys.includes(key.value)) {\n onError(`Ordered maps must not include duplicate keys: ${key.value}`);\n }\n else {\n seenKeys.push(key.value);\n }\n }\n }\n return Object.assign(new YAMLOMap(), pairs$1);\n },\n createNode: (schema, iterable, ctx) => YAMLOMap.from(schema, iterable, ctx)\n};\n\nexports.YAMLOMap = YAMLOMap;\nexports.omap = omap;\n","'use strict';\n\nvar Scalar = require('../../nodes/Scalar.js');\n\nfunction boolStringify({ value, source }, ctx) {\n const boolObj = value ? trueTag : falseTag;\n if (source && boolObj.test.test(source))\n return source;\n return value ? ctx.options.trueStr : ctx.options.falseStr;\n}\nconst trueTag = {\n identify: value => value === true,\n default: true,\n tag: 'tag:yaml.org,2002:bool',\n test: /^(?:Y|y|[Yy]es|YES|[Tt]rue|TRUE|[Oo]n|ON)$/,\n resolve: () => new Scalar.Scalar(true),\n stringify: boolStringify\n};\nconst falseTag = {\n identify: value => value === false,\n default: true,\n tag: 'tag:yaml.org,2002:bool',\n test: /^(?:N|n|[Nn]o|NO|[Ff]alse|FALSE|[Oo]ff|OFF)$/,\n resolve: () => new Scalar.Scalar(false),\n stringify: boolStringify\n};\n\nexports.falseTag = falseTag;\nexports.trueTag = trueTag;\n","'use strict';\n\nvar Scalar = require('../../nodes/Scalar.js');\nvar stringifyNumber = require('../../stringify/stringifyNumber.js');\n\nconst floatNaN = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n test: /^(?:[-+]?\\.(?:inf|Inf|INF)|\\.nan|\\.NaN|\\.NAN)$/,\n resolve: (str) => str.slice(-3).toLowerCase() === 'nan'\n ? NaN\n : str[0] === '-'\n ? Number.NEGATIVE_INFINITY\n : Number.POSITIVE_INFINITY,\n stringify: stringifyNumber.stringifyNumber\n};\nconst floatExp = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n format: 'EXP',\n test: /^[-+]?(?:[0-9][0-9_]*)?(?:\\.[0-9_]*)?[eE][-+]?[0-9]+$/,\n resolve: (str) => parseFloat(str.replace(/_/g, '')),\n stringify(node) {\n const num = Number(node.value);\n return isFinite(num) ? num.toExponential() : stringifyNumber.stringifyNumber(node);\n }\n};\nconst float = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n test: /^[-+]?(?:[0-9][0-9_]*)?\\.[0-9_]*$/,\n resolve(str) {\n const node = new Scalar.Scalar(parseFloat(str.replace(/_/g, '')));\n const dot = str.indexOf('.');\n if (dot !== -1) {\n const f = str.substring(dot + 1).replace(/_/g, '');\n if (f[f.length - 1] === '0')\n node.minFractionDigits = f.length;\n }\n return node;\n },\n stringify: stringifyNumber.stringifyNumber\n};\n\nexports.float = float;\nexports.floatExp = floatExp;\nexports.floatNaN = floatNaN;\n","'use strict';\n\nvar stringifyNumber = require('../../stringify/stringifyNumber.js');\n\nconst intIdentify = (value) => typeof value === 'bigint' || Number.isInteger(value);\nfunction intResolve(str, offset, radix, { intAsBigInt }) {\n const sign = str[0];\n if (sign === '-' || sign === '+')\n offset += 1;\n str = str.substring(offset).replace(/_/g, '');\n if (intAsBigInt) {\n switch (radix) {\n case 2:\n str = `0b${str}`;\n break;\n case 8:\n str = `0o${str}`;\n break;\n case 16:\n str = `0x${str}`;\n break;\n }\n const n = BigInt(str);\n return sign === '-' ? BigInt(-1) * n : n;\n }\n const n = parseInt(str, radix);\n return sign === '-' ? -1 * n : n;\n}\nfunction intStringify(node, radix, prefix) {\n const { value } = node;\n if (intIdentify(value)) {\n const str = value.toString(radix);\n return value < 0 ? '-' + prefix + str.substr(1) : prefix + str;\n }\n return stringifyNumber.stringifyNumber(node);\n}\nconst intBin = {\n identify: intIdentify,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n format: 'BIN',\n test: /^[-+]?0b[0-1_]+$/,\n resolve: (str, _onError, opt) => intResolve(str, 2, 2, opt),\n stringify: node => intStringify(node, 2, '0b')\n};\nconst intOct = {\n identify: intIdentify,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n format: 'OCT',\n test: /^[-+]?0[0-7_]+$/,\n resolve: (str, _onError, opt) => intResolve(str, 1, 8, opt),\n stringify: node => intStringify(node, 8, '0')\n};\nconst int = {\n identify: intIdentify,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n test: /^[-+]?[0-9][0-9_]*$/,\n resolve: (str, _onError, opt) => intResolve(str, 0, 10, opt),\n stringify: stringifyNumber.stringifyNumber\n};\nconst intHex = {\n identify: intIdentify,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n format: 'HEX',\n test: /^[-+]?0x[0-9a-fA-F_]+$/,\n resolve: (str, _onError, opt) => intResolve(str, 2, 16, opt),\n stringify: node => intStringify(node, 16, '0x')\n};\n\nexports.int = int;\nexports.intBin = intBin;\nexports.intHex = intHex;\nexports.intOct = intOct;\n","'use strict';\n\nvar identity = require('../../nodes/identity.js');\nvar Pair = require('../../nodes/Pair.js');\nvar YAMLMap = require('../../nodes/YAMLMap.js');\n\nclass YAMLSet extends YAMLMap.YAMLMap {\n constructor(schema) {\n super(schema);\n this.tag = YAMLSet.tag;\n }\n add(key) {\n let pair;\n if (identity.isPair(key))\n pair = key;\n else if (key &&\n typeof key === 'object' &&\n 'key' in key &&\n 'value' in key &&\n key.value === null)\n pair = new Pair.Pair(key.key, null);\n else\n pair = new Pair.Pair(key, null);\n const prev = YAMLMap.findPair(this.items, pair.key);\n if (!prev)\n this.items.push(pair);\n }\n /**\n * If `keepPair` is `true`, returns the Pair matching `key`.\n * Otherwise, returns the value of that Pair's key.\n */\n get(key, keepPair) {\n const pair = YAMLMap.findPair(this.items, key);\n return !keepPair && identity.isPair(pair)\n ? identity.isScalar(pair.key)\n ? pair.key.value\n : pair.key\n : pair;\n }\n set(key, value) {\n if (typeof value !== 'boolean')\n throw new Error(`Expected boolean value for set(key, value) in a YAML set, not ${typeof value}`);\n const prev = YAMLMap.findPair(this.items, key);\n if (prev && !value) {\n this.items.splice(this.items.indexOf(prev), 1);\n }\n else if (!prev && value) {\n this.items.push(new Pair.Pair(key));\n }\n }\n toJSON(_, ctx) {\n return super.toJSON(_, ctx, Set);\n }\n toString(ctx, onComment, onChompKeep) {\n if (!ctx)\n return JSON.stringify(this);\n if (this.hasAllNullValues(true))\n return super.toString(Object.assign({}, ctx, { allNullValues: true }), onComment, onChompKeep);\n else\n throw new Error('Set items must all have null values');\n }\n static from(schema, iterable, ctx) {\n const { replacer } = ctx;\n const set = new this(schema);\n if (iterable && Symbol.iterator in Object(iterable))\n for (let value of iterable) {\n if (typeof replacer === 'function')\n value = replacer.call(iterable, value, value);\n set.items.push(Pair.createPair(value, null, ctx));\n }\n return set;\n }\n}\nYAMLSet.tag = 'tag:yaml.org,2002:set';\nconst set = {\n collection: 'map',\n identify: value => value instanceof Set,\n nodeClass: YAMLSet,\n default: false,\n tag: 'tag:yaml.org,2002:set',\n createNode: (schema, iterable, ctx) => YAMLSet.from(schema, iterable, ctx),\n resolve(map, onError) {\n if (identity.isMap(map)) {\n if (map.hasAllNullValues(true))\n return Object.assign(new YAMLSet(), map);\n else\n onError('Set items must all have null values');\n }\n else\n onError('Expected a mapping for this tag');\n return map;\n }\n};\n\nexports.YAMLSet = YAMLSet;\nexports.set = set;\n","'use strict';\n\nvar stringifyNumber = require('../../stringify/stringifyNumber.js');\n\n/** Internal types handle bigint as number, because TS can't figure it out. */\nfunction parseSexagesimal(str, asBigInt) {\n const sign = str[0];\n const parts = sign === '-' || sign === '+' ? str.substring(1) : str;\n const num = (n) => asBigInt ? BigInt(n) : Number(n);\n const res = parts\n .replace(/_/g, '')\n .split(':')\n .reduce((res, p) => res * num(60) + num(p), num(0));\n return (sign === '-' ? num(-1) * res : res);\n}\n/**\n * hhhh:mm:ss.sss\n *\n * Internal types handle bigint as number, because TS can't figure it out.\n */\nfunction stringifySexagesimal(node) {\n let { value } = node;\n let num = (n) => n;\n if (typeof value === 'bigint')\n num = n => BigInt(n);\n else if (isNaN(value) || !isFinite(value))\n return stringifyNumber.stringifyNumber(node);\n let sign = '';\n if (value < 0) {\n sign = '-';\n value *= num(-1);\n }\n const _60 = num(60);\n const parts = [value % _60]; // seconds, including ms\n if (value < 60) {\n parts.unshift(0); // at least one : is required\n }\n else {\n value = (value - parts[0]) / _60;\n parts.unshift(value % _60); // minutes\n if (value >= 60) {\n value = (value - parts[0]) / _60;\n parts.unshift(value); // hours\n }\n }\n return (sign +\n parts\n .map(n => String(n).padStart(2, '0'))\n .join(':')\n .replace(/000000\\d*$/, '') // % 60 may introduce error\n );\n}\nconst intTime = {\n identify: value => typeof value === 'bigint' || Number.isInteger(value),\n default: true,\n tag: 'tag:yaml.org,2002:int',\n format: 'TIME',\n test: /^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+$/,\n resolve: (str, _onError, { intAsBigInt }) => parseSexagesimal(str, intAsBigInt),\n stringify: stringifySexagesimal\n};\nconst floatTime = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n format: 'TIME',\n test: /^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*$/,\n resolve: str => parseSexagesimal(str, false),\n stringify: stringifySexagesimal\n};\nconst timestamp = {\n identify: value => value instanceof Date,\n default: true,\n tag: 'tag:yaml.org,2002:timestamp',\n // If the time zone is omitted, the timestamp is assumed to be specified in UTC. The time part\n // may be omitted altogether, resulting in a date format. In such a case, the time part is\n // assumed to be 00:00:00Z (start of day, UTC).\n test: RegExp('^([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})' + // YYYY-Mm-Dd\n '(?:' + // time is optional\n '(?:t|T|[ \\\\t]+)' + // t | T | whitespace\n '([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2}(\\\\.[0-9]+)?)' + // Hh:Mm:Ss(.ss)?\n '(?:[ \\\\t]*(Z|[-+][012]?[0-9](?::[0-9]{2})?))?' + // Z | +5 | -03:30\n ')?$'),\n resolve(str) {\n const match = str.match(timestamp.test);\n if (!match)\n throw new Error('!!timestamp expects a date, starting with yyyy-mm-dd');\n const [, year, month, day, hour, minute, second] = match.map(Number);\n const millisec = match[7] ? Number((match[7] + '00').substr(1, 3)) : 0;\n let date = Date.UTC(year, month - 1, day, hour || 0, minute || 0, second || 0, millisec);\n const tz = match[8];\n if (tz && tz !== 'Z') {\n let d = parseSexagesimal(tz, false);\n if (Math.abs(d) < 30)\n d *= 60;\n date -= 60000 * d;\n }\n return new Date(date);\n },\n stringify: ({ value }) => value?.toISOString().replace(/(T00:00:00)?\\.000Z$/, '') ?? ''\n};\n\nexports.floatTime = floatTime;\nexports.intTime = intTime;\nexports.timestamp = timestamp;\n","'use strict';\n\nvar map = require('../common/map.js');\nvar _null = require('../common/null.js');\nvar seq = require('../common/seq.js');\nvar string = require('../common/string.js');\nvar binary = require('./binary.js');\nvar bool = require('./bool.js');\nvar float = require('./float.js');\nvar int = require('./int.js');\nvar merge = require('./merge.js');\nvar omap = require('./omap.js');\nvar pairs = require('./pairs.js');\nvar set = require('./set.js');\nvar timestamp = require('./timestamp.js');\n\nconst schema = [\n map.map,\n seq.seq,\n string.string,\n _null.nullTag,\n bool.trueTag,\n bool.falseTag,\n int.intBin,\n int.intOct,\n int.int,\n int.intHex,\n float.floatNaN,\n float.floatExp,\n float.float,\n binary.binary,\n merge.merge,\n omap.omap,\n pairs.pairs,\n set.set,\n timestamp.intTime,\n timestamp.floatTime,\n timestamp.timestamp\n];\n\nexports.schema = schema;\n","'use strict';\n\nvar map = require('./common/map.js');\nvar _null = require('./common/null.js');\nvar seq = require('./common/seq.js');\nvar string = require('./common/string.js');\nvar bool = require('./core/bool.js');\nvar float = require('./core/float.js');\nvar int = require('./core/int.js');\nvar schema = require('./core/schema.js');\nvar schema$1 = require('./json/schema.js');\nvar binary = require('./yaml-1.1/binary.js');\nvar merge = require('./yaml-1.1/merge.js');\nvar omap = require('./yaml-1.1/omap.js');\nvar pairs = require('./yaml-1.1/pairs.js');\nvar schema$2 = require('./yaml-1.1/schema.js');\nvar set = require('./yaml-1.1/set.js');\nvar timestamp = require('./yaml-1.1/timestamp.js');\n\nconst schemas = new Map([\n ['core', schema.schema],\n ['failsafe', [map.map, seq.seq, string.string]],\n ['json', schema$1.schema],\n ['yaml11', schema$2.schema],\n ['yaml-1.1', schema$2.schema]\n]);\nconst tagsByName = {\n binary: binary.binary,\n bool: bool.boolTag,\n float: float.float,\n floatExp: float.floatExp,\n floatNaN: float.floatNaN,\n floatTime: timestamp.floatTime,\n int: int.int,\n intHex: int.intHex,\n intOct: int.intOct,\n intTime: timestamp.intTime,\n map: map.map,\n merge: merge.merge,\n null: _null.nullTag,\n omap: omap.omap,\n pairs: pairs.pairs,\n seq: seq.seq,\n set: set.set,\n timestamp: timestamp.timestamp\n};\nconst coreKnownTags = {\n 'tag:yaml.org,2002:binary': binary.binary,\n 'tag:yaml.org,2002:merge': merge.merge,\n 'tag:yaml.org,2002:omap': omap.omap,\n 'tag:yaml.org,2002:pairs': pairs.pairs,\n 'tag:yaml.org,2002:set': set.set,\n 'tag:yaml.org,2002:timestamp': timestamp.timestamp\n};\nfunction getTags(customTags, schemaName, addMergeTag) {\n const schemaTags = schemas.get(schemaName);\n if (schemaTags && !customTags) {\n return addMergeTag && !schemaTags.includes(merge.merge)\n ? schemaTags.concat(merge.merge)\n : schemaTags.slice();\n }\n let tags = schemaTags;\n if (!tags) {\n if (Array.isArray(customTags))\n tags = [];\n else {\n const keys = Array.from(schemas.keys())\n .filter(key => key !== 'yaml11')\n .map(key => JSON.stringify(key))\n .join(', ');\n throw new Error(`Unknown schema \"${schemaName}\"; use one of ${keys} or define customTags array`);\n }\n }\n if (Array.isArray(customTags)) {\n for (const tag of customTags)\n tags = tags.concat(tag);\n }\n else if (typeof customTags === 'function') {\n tags = customTags(tags.slice());\n }\n if (addMergeTag)\n tags = tags.concat(merge.merge);\n return tags.reduce((tags, tag) => {\n const tagObj = typeof tag === 'string' ? tagsByName[tag] : tag;\n if (!tagObj) {\n const tagName = JSON.stringify(tag);\n const keys = Object.keys(tagsByName)\n .map(key => JSON.stringify(key))\n .join(', ');\n throw new Error(`Unknown custom tag ${tagName}; use one of ${keys}`);\n }\n if (!tags.includes(tagObj))\n tags.push(tagObj);\n return tags;\n }, []);\n}\n\nexports.coreKnownTags = coreKnownTags;\nexports.getTags = getTags;\n","'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar map = require('./common/map.js');\nvar seq = require('./common/seq.js');\nvar string = require('./common/string.js');\nvar tags = require('./tags.js');\n\nconst sortMapEntriesByKey = (a, b) => a.key < b.key ? -1 : a.key > b.key ? 1 : 0;\nclass Schema {\n constructor({ compat, customTags, merge, resolveKnownTags, schema, sortMapEntries, toStringDefaults }) {\n this.compat = Array.isArray(compat)\n ? tags.getTags(compat, 'compat')\n : compat\n ? tags.getTags(null, compat)\n : null;\n this.name = (typeof schema === 'string' && schema) || 'core';\n this.knownTags = resolveKnownTags ? tags.coreKnownTags : {};\n this.tags = tags.getTags(customTags, this.name, merge);\n this.toStringOptions = toStringDefaults ?? null;\n Object.defineProperty(this, identity.MAP, { value: map.map });\n Object.defineProperty(this, identity.SCALAR, { value: string.string });\n Object.defineProperty(this, identity.SEQ, { value: seq.seq });\n // Used by createMap()\n this.sortMapEntries =\n typeof sortMapEntries === 'function'\n ? sortMapEntries\n : sortMapEntries === true\n ? sortMapEntriesByKey\n : null;\n }\n clone() {\n const copy = Object.create(Schema.prototype, Object.getOwnPropertyDescriptors(this));\n copy.tags = this.tags.slice();\n return copy;\n }\n}\n\nexports.Schema = Schema;\n","'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar stringify = require('./stringify.js');\nvar stringifyComment = require('./stringifyComment.js');\n\nfunction stringifyDocument(doc, options) {\n const lines = [];\n let hasDirectives = options.directives === true;\n if (options.directives !== false && doc.directives) {\n const dir = doc.directives.toString(doc);\n if (dir) {\n lines.push(dir);\n hasDirectives = true;\n }\n else if (doc.directives.docStart)\n hasDirectives = true;\n }\n if (hasDirectives)\n lines.push('---');\n const ctx = stringify.createStringifyContext(doc, options);\n const { commentString } = ctx.options;\n if (doc.commentBefore) {\n if (lines.length !== 1)\n lines.unshift('');\n const cs = commentString(doc.commentBefore);\n lines.unshift(stringifyComment.indentComment(cs, ''));\n }\n let chompKeep = false;\n let contentComment = null;\n if (doc.contents) {\n if (identity.isNode(doc.contents)) {\n if (doc.contents.spaceBefore && hasDirectives)\n lines.push('');\n if (doc.contents.commentBefore) {\n const cs = commentString(doc.contents.commentBefore);\n lines.push(stringifyComment.indentComment(cs, ''));\n }\n // top-level block scalars need to be indented if followed by a comment\n ctx.forceBlockIndent = !!doc.comment;\n contentComment = doc.contents.comment;\n }\n const onChompKeep = contentComment ? undefined : () => (chompKeep = true);\n let body = stringify.stringify(doc.contents, ctx, () => (contentComment = null), onChompKeep);\n if (contentComment)\n body += stringifyComment.lineComment(body, '', commentString(contentComment));\n if ((body[0] === '|' || body[0] === '>') &&\n lines[lines.length - 1] === '---') {\n // Top-level block scalars with a preceding doc marker ought to use the\n // same line for their header.\n lines[lines.length - 1] = `--- ${body}`;\n }\n else\n lines.push(body);\n }\n else {\n lines.push(stringify.stringify(doc.contents, ctx));\n }\n if (doc.directives?.docEnd) {\n if (doc.comment) {\n const cs = commentString(doc.comment);\n if (cs.includes('\\n')) {\n lines.push('...');\n lines.push(stringifyComment.indentComment(cs, ''));\n }\n else {\n lines.push(`... ${cs}`);\n }\n }\n else {\n lines.push('...');\n }\n }\n else {\n let dc = doc.comment;\n if (dc && chompKeep)\n dc = dc.replace(/^\\n+/, '');\n if (dc) {\n if ((!chompKeep || contentComment) && lines[lines.length - 1] !== '')\n lines.push('');\n lines.push(stringifyComment.indentComment(commentString(dc), ''));\n }\n }\n return lines.join('\\n') + '\\n';\n}\n\nexports.stringifyDocument = stringifyDocument;\n","'use strict';\n\nvar Alias = require('../nodes/Alias.js');\nvar Collection = require('../nodes/Collection.js');\nvar identity = require('../nodes/identity.js');\nvar Pair = require('../nodes/Pair.js');\nvar toJS = require('../nodes/toJS.js');\nvar Schema = require('../schema/Schema.js');\nvar stringifyDocument = require('../stringify/stringifyDocument.js');\nvar anchors = require('./anchors.js');\nvar applyReviver = require('./applyReviver.js');\nvar createNode = require('./createNode.js');\nvar directives = require('./directives.js');\n\nclass Document {\n constructor(value, replacer, options) {\n /** A comment before this Document */\n this.commentBefore = null;\n /** A comment immediately after this Document */\n this.comment = null;\n /** Errors encountered during parsing. */\n this.errors = [];\n /** Warnings encountered during parsing. */\n this.warnings = [];\n Object.defineProperty(this, identity.NODE_TYPE, { value: identity.DOC });\n let _replacer = null;\n if (typeof replacer === 'function' || Array.isArray(replacer)) {\n _replacer = replacer;\n }\n else if (options === undefined && replacer) {\n options = replacer;\n replacer = undefined;\n }\n const opt = Object.assign({\n intAsBigInt: false,\n keepSourceTokens: false,\n logLevel: 'warn',\n prettyErrors: true,\n strict: true,\n stringKeys: false,\n uniqueKeys: true,\n version: '1.2'\n }, options);\n this.options = opt;\n let { version } = opt;\n if (options?._directives) {\n this.directives = options._directives.atDocument();\n if (this.directives.yaml.explicit)\n version = this.directives.yaml.version;\n }\n else\n this.directives = new directives.Directives({ version });\n this.setSchema(version, options);\n // @ts-expect-error We can't really know that this matches Contents.\n this.contents =\n value === undefined ? null : this.createNode(value, _replacer, options);\n }\n /**\n * Create a deep copy of this Document and its contents.\n *\n * Custom Node values that inherit from `Object` still refer to their original instances.\n */\n clone() {\n const copy = Object.create(Document.prototype, {\n [identity.NODE_TYPE]: { value: identity.DOC }\n });\n copy.commentBefore = this.commentBefore;\n copy.comment = this.comment;\n copy.errors = this.errors.slice();\n copy.warnings = this.warnings.slice();\n copy.options = Object.assign({}, this.options);\n if (this.directives)\n copy.directives = this.directives.clone();\n copy.schema = this.schema.clone();\n // @ts-expect-error We can't really know that this matches Contents.\n copy.contents = identity.isNode(this.contents)\n ? this.contents.clone(copy.schema)\n : this.contents;\n if (this.range)\n copy.range = this.range.slice();\n return copy;\n }\n /** Adds a value to the document. */\n add(value) {\n if (assertCollection(this.contents))\n this.contents.add(value);\n }\n /** Adds a value to the document. */\n addIn(path, value) {\n if (assertCollection(this.contents))\n this.contents.addIn(path, value);\n }\n /**\n * Create a new `Alias` node, ensuring that the target `node` has the required anchor.\n *\n * If `node` already has an anchor, `name` is ignored.\n * Otherwise, the `node.anchor` value will be set to `name`,\n * or if an anchor with that name is already present in the document,\n * `name` will be used as a prefix for a new unique anchor.\n * If `name` is undefined, the generated anchor will use 'a' as a prefix.\n */\n createAlias(node, name) {\n if (!node.anchor) {\n const prev = anchors.anchorNames(this);\n node.anchor =\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n !name || prev.has(name) ? anchors.findNewAnchor(name || 'a', prev) : name;\n }\n return new Alias.Alias(node.anchor);\n }\n createNode(value, replacer, options) {\n let _replacer = undefined;\n if (typeof replacer === 'function') {\n value = replacer.call({ '': value }, '', value);\n _replacer = replacer;\n }\n else if (Array.isArray(replacer)) {\n const keyToStr = (v) => typeof v === 'number' || v instanceof String || v instanceof Number;\n const asStr = replacer.filter(keyToStr).map(String);\n if (asStr.length > 0)\n replacer = replacer.concat(asStr);\n _replacer = replacer;\n }\n else if (options === undefined && replacer) {\n options = replacer;\n replacer = undefined;\n }\n const { aliasDuplicateObjects, anchorPrefix, flow, keepUndefined, onTagObj, tag } = options ?? {};\n const { onAnchor, setAnchors, sourceObjects } = anchors.createNodeAnchors(this, \n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n anchorPrefix || 'a');\n const ctx = {\n aliasDuplicateObjects: aliasDuplicateObjects ?? true,\n keepUndefined: keepUndefined ?? false,\n onAnchor,\n onTagObj,\n replacer: _replacer,\n schema: this.schema,\n sourceObjects\n };\n const node = createNode.createNode(value, tag, ctx);\n if (flow && identity.isCollection(node))\n node.flow = true;\n setAnchors();\n return node;\n }\n /**\n * Convert a key and a value into a `Pair` using the current schema,\n * recursively wrapping all values as `Scalar` or `Collection` nodes.\n */\n createPair(key, value, options = {}) {\n const k = this.createNode(key, null, options);\n const v = this.createNode(value, null, options);\n return new Pair.Pair(k, v);\n }\n /**\n * Removes a value from the document.\n * @returns `true` if the item was found and removed.\n */\n delete(key) {\n return assertCollection(this.contents) ? this.contents.delete(key) : false;\n }\n /**\n * Removes a value from the document.\n * @returns `true` if the item was found and removed.\n */\n deleteIn(path) {\n if (Collection.isEmptyPath(path)) {\n if (this.contents == null)\n return false;\n // @ts-expect-error Presumed impossible if Strict extends false\n this.contents = null;\n return true;\n }\n return assertCollection(this.contents)\n ? this.contents.deleteIn(path)\n : false;\n }\n /**\n * Returns item at `key`, or `undefined` if not found. By default unwraps\n * scalar values from their surrounding node; to disable set `keepScalar` to\n * `true` (collections are always returned intact).\n */\n get(key, keepScalar) {\n return identity.isCollection(this.contents)\n ? this.contents.get(key, keepScalar)\n : undefined;\n }\n /**\n * Returns item at `path`, or `undefined` if not found. By default unwraps\n * scalar values from their surrounding node; to disable set `keepScalar` to\n * `true` (collections are always returned intact).\n */\n getIn(path, keepScalar) {\n if (Collection.isEmptyPath(path))\n return !keepScalar && identity.isScalar(this.contents)\n ? this.contents.value\n : this.contents;\n return identity.isCollection(this.contents)\n ? this.contents.getIn(path, keepScalar)\n : undefined;\n }\n /**\n * Checks if the document includes a value with the key `key`.\n */\n has(key) {\n return identity.isCollection(this.contents) ? this.contents.has(key) : false;\n }\n /**\n * Checks if the document includes a value at `path`.\n */\n hasIn(path) {\n if (Collection.isEmptyPath(path))\n return this.contents !== undefined;\n return identity.isCollection(this.contents) ? this.contents.hasIn(path) : false;\n }\n /**\n * Sets a value in this document. For `!!set`, `value` needs to be a\n * boolean to add/remove the item from the set.\n */\n set(key, value) {\n if (this.contents == null) {\n // @ts-expect-error We can't really know that this matches Contents.\n this.contents = Collection.collectionFromPath(this.schema, [key], value);\n }\n else if (assertCollection(this.contents)) {\n this.contents.set(key, value);\n }\n }\n /**\n * Sets a value in this document. For `!!set`, `value` needs to be a\n * boolean to add/remove the item from the set.\n */\n setIn(path, value) {\n if (Collection.isEmptyPath(path)) {\n // @ts-expect-error We can't really know that this matches Contents.\n this.contents = value;\n }\n else if (this.contents == null) {\n // @ts-expect-error We can't really know that this matches Contents.\n this.contents = Collection.collectionFromPath(this.schema, Array.from(path), value);\n }\n else if (assertCollection(this.contents)) {\n this.contents.setIn(path, value);\n }\n }\n /**\n * Change the YAML version and schema used by the document.\n * A `null` version disables support for directives, explicit tags, anchors, and aliases.\n * It also requires the `schema` option to be given as a `Schema` instance value.\n *\n * Overrides all previously set schema options.\n */\n setSchema(version, options = {}) {\n if (typeof version === 'number')\n version = String(version);\n let opt;\n switch (version) {\n case '1.1':\n if (this.directives)\n this.directives.yaml.version = '1.1';\n else\n this.directives = new directives.Directives({ version: '1.1' });\n opt = { resolveKnownTags: false, schema: 'yaml-1.1' };\n break;\n case '1.2':\n case 'next':\n if (this.directives)\n this.directives.yaml.version = version;\n else\n this.directives = new directives.Directives({ version });\n opt = { resolveKnownTags: true, schema: 'core' };\n break;\n case null:\n if (this.directives)\n delete this.directives;\n opt = null;\n break;\n default: {\n const sv = JSON.stringify(version);\n throw new Error(`Expected '1.1', '1.2' or null as first argument, but found: ${sv}`);\n }\n }\n // Not using `instanceof Schema` to allow for duck typing\n if (options.schema instanceof Object)\n this.schema = options.schema;\n else if (opt)\n this.schema = new Schema.Schema(Object.assign(opt, options));\n else\n throw new Error(`With a null YAML version, the { schema: Schema } option is required`);\n }\n // json & jsonArg are only used from toJSON()\n toJS({ json, jsonArg, mapAsMap, maxAliasCount, onAnchor, reviver } = {}) {\n const ctx = {\n anchors: new Map(),\n doc: this,\n keep: !json,\n mapAsMap: mapAsMap === true,\n mapKeyWarned: false,\n maxAliasCount: typeof maxAliasCount === 'number' ? maxAliasCount : 100\n };\n const res = toJS.toJS(this.contents, jsonArg ?? '', ctx);\n if (typeof onAnchor === 'function')\n for (const { count, res } of ctx.anchors.values())\n onAnchor(res, count);\n return typeof reviver === 'function'\n ? applyReviver.applyReviver(reviver, { '': res }, '', res)\n : res;\n }\n /**\n * A JSON representation of the document `contents`.\n *\n * @param jsonArg Used by `JSON.stringify` to indicate the array index or\n * property name.\n */\n toJSON(jsonArg, onAnchor) {\n return this.toJS({ json: true, jsonArg, mapAsMap: false, onAnchor });\n }\n /** A YAML representation of the document. */\n toString(options = {}) {\n if (this.errors.length > 0)\n throw new Error('Document with errors cannot be stringified');\n if ('indent' in options &&\n (!Number.isInteger(options.indent) || Number(options.indent) <= 0)) {\n const s = JSON.stringify(options.indent);\n throw new Error(`\"indent\" option must be a positive integer, not ${s}`);\n }\n return stringifyDocument.stringifyDocument(this, options);\n }\n}\nfunction assertCollection(contents) {\n if (identity.isCollection(contents))\n return true;\n throw new Error('Expected a YAML collection as document contents');\n}\n\nexports.Document = Document;\n","'use strict';\n\nclass YAMLError extends Error {\n constructor(name, pos, code, message) {\n super();\n this.name = name;\n this.code = code;\n this.message = message;\n this.pos = pos;\n }\n}\nclass YAMLParseError extends YAMLError {\n constructor(pos, code, message) {\n super('YAMLParseError', pos, code, message);\n }\n}\nclass YAMLWarning extends YAMLError {\n constructor(pos, code, message) {\n super('YAMLWarning', pos, code, message);\n }\n}\nconst prettifyError = (src, lc) => (error) => {\n if (error.pos[0] === -1)\n return;\n error.linePos = error.pos.map(pos => lc.linePos(pos));\n const { line, col } = error.linePos[0];\n error.message += ` at line ${line}, column ${col}`;\n let ci = col - 1;\n let lineStr = src\n .substring(lc.lineStarts[line - 1], lc.lineStarts[line])\n .replace(/[\\n\\r]+$/, '');\n // Trim to max 80 chars, keeping col position near the middle\n if (ci >= 60 && lineStr.length > 80) {\n const trimStart = Math.min(ci - 39, lineStr.length - 79);\n lineStr = '…' + lineStr.substring(trimStart);\n ci -= trimStart - 1;\n }\n if (lineStr.length > 80)\n lineStr = lineStr.substring(0, 79) + '…';\n // Include previous line in context if pointing at line start\n if (line > 1 && /^ *$/.test(lineStr.substring(0, ci))) {\n // Regexp won't match if start is trimmed\n let prev = src.substring(lc.lineStarts[line - 2], lc.lineStarts[line - 1]);\n if (prev.length > 80)\n prev = prev.substring(0, 79) + '…\\n';\n lineStr = prev + lineStr;\n }\n if (/[^ ]/.test(lineStr)) {\n let count = 1;\n const end = error.linePos[1];\n if (end?.line === line && end.col > col) {\n count = Math.max(1, Math.min(end.col - col, 80 - ci));\n }\n const pointer = ' '.repeat(ci) + '^'.repeat(count);\n error.message += `:\\n\\n${lineStr}\\n${pointer}\\n`;\n }\n};\n\nexports.YAMLError = YAMLError;\nexports.YAMLParseError = YAMLParseError;\nexports.YAMLWarning = YAMLWarning;\nexports.prettifyError = prettifyError;\n","'use strict';\n\nfunction resolveProps(tokens, { flow, indicator, next, offset, onError, parentIndent, startOnNewline }) {\n let spaceBefore = false;\n let atNewline = startOnNewline;\n let hasSpace = startOnNewline;\n let comment = '';\n let commentSep = '';\n let hasNewline = false;\n let reqSpace = false;\n let tab = null;\n let anchor = null;\n let tag = null;\n let newlineAfterProp = null;\n let comma = null;\n let found = null;\n let start = null;\n for (const token of tokens) {\n if (reqSpace) {\n if (token.type !== 'space' &&\n token.type !== 'newline' &&\n token.type !== 'comma')\n onError(token.offset, 'MISSING_CHAR', 'Tags and anchors must be separated from the next token by white space');\n reqSpace = false;\n }\n if (tab) {\n if (atNewline && token.type !== 'comment' && token.type !== 'newline') {\n onError(tab, 'TAB_AS_INDENT', 'Tabs are not allowed as indentation');\n }\n tab = null;\n }\n switch (token.type) {\n case 'space':\n // At the doc level, tabs at line start may be parsed\n // as leading white space rather than indentation.\n // In a flow collection, only the parser handles indent.\n if (!flow &&\n (indicator !== 'doc-start' || next?.type !== 'flow-collection') &&\n token.source.includes('\\t')) {\n tab = token;\n }\n hasSpace = true;\n break;\n case 'comment': {\n if (!hasSpace)\n onError(token, 'MISSING_CHAR', 'Comments must be separated from other tokens by white space characters');\n const cb = token.source.substring(1) || ' ';\n if (!comment)\n comment = cb;\n else\n comment += commentSep + cb;\n commentSep = '';\n atNewline = false;\n break;\n }\n case 'newline':\n if (atNewline) {\n if (comment)\n comment += token.source;\n else if (!found || indicator !== 'seq-item-ind')\n spaceBefore = true;\n }\n else\n commentSep += token.source;\n atNewline = true;\n hasNewline = true;\n if (anchor || tag)\n newlineAfterProp = token;\n hasSpace = true;\n break;\n case 'anchor':\n if (anchor)\n onError(token, 'MULTIPLE_ANCHORS', 'A node can have at most one anchor');\n if (token.source.endsWith(':'))\n onError(token.offset + token.source.length - 1, 'BAD_ALIAS', 'Anchor ending in : is ambiguous', true);\n anchor = token;\n start ?? (start = token.offset);\n atNewline = false;\n hasSpace = false;\n reqSpace = true;\n break;\n case 'tag': {\n if (tag)\n onError(token, 'MULTIPLE_TAGS', 'A node can have at most one tag');\n tag = token;\n start ?? (start = token.offset);\n atNewline = false;\n hasSpace = false;\n reqSpace = true;\n break;\n }\n case indicator:\n // Could here handle preceding comments differently\n if (anchor || tag)\n onError(token, 'BAD_PROP_ORDER', `Anchors and tags must be after the ${token.source} indicator`);\n if (found)\n onError(token, 'UNEXPECTED_TOKEN', `Unexpected ${token.source} in ${flow ?? 'collection'}`);\n found = token;\n atNewline =\n indicator === 'seq-item-ind' || indicator === 'explicit-key-ind';\n hasSpace = false;\n break;\n case 'comma':\n if (flow) {\n if (comma)\n onError(token, 'UNEXPECTED_TOKEN', `Unexpected , in ${flow}`);\n comma = token;\n atNewline = false;\n hasSpace = false;\n break;\n }\n // else fallthrough\n default:\n onError(token, 'UNEXPECTED_TOKEN', `Unexpected ${token.type} token`);\n atNewline = false;\n hasSpace = false;\n }\n }\n const last = tokens[tokens.length - 1];\n const end = last ? last.offset + last.source.length : offset;\n if (reqSpace &&\n next &&\n next.type !== 'space' &&\n next.type !== 'newline' &&\n next.type !== 'comma' &&\n (next.type !== 'scalar' || next.source !== '')) {\n onError(next.offset, 'MISSING_CHAR', 'Tags and anchors must be separated from the next token by white space');\n }\n if (tab &&\n ((atNewline && tab.indent <= parentIndent) ||\n next?.type === 'block-map' ||\n next?.type === 'block-seq'))\n onError(tab, 'TAB_AS_INDENT', 'Tabs are not allowed as indentation');\n return {\n comma,\n found,\n spaceBefore,\n comment,\n hasNewline,\n anchor,\n tag,\n newlineAfterProp,\n end,\n start: start ?? end\n };\n}\n\nexports.resolveProps = resolveProps;\n","'use strict';\n\nfunction containsNewline(key) {\n if (!key)\n return null;\n switch (key.type) {\n case 'alias':\n case 'scalar':\n case 'double-quoted-scalar':\n case 'single-quoted-scalar':\n if (key.source.includes('\\n'))\n return true;\n if (key.end)\n for (const st of key.end)\n if (st.type === 'newline')\n return true;\n return false;\n case 'flow-collection':\n for (const it of key.items) {\n for (const st of it.start)\n if (st.type === 'newline')\n return true;\n if (it.sep)\n for (const st of it.sep)\n if (st.type === 'newline')\n return true;\n if (containsNewline(it.key) || containsNewline(it.value))\n return true;\n }\n return false;\n default:\n return true;\n }\n}\n\nexports.containsNewline = containsNewline;\n","'use strict';\n\nvar utilContainsNewline = require('./util-contains-newline.js');\n\nfunction flowIndentCheck(indent, fc, onError) {\n if (fc?.type === 'flow-collection') {\n const end = fc.end[0];\n if (end.indent === indent &&\n (end.source === ']' || end.source === '}') &&\n utilContainsNewline.containsNewline(fc)) {\n const msg = 'Flow end indicator should be more indented than parent';\n onError(end, 'BAD_INDENT', msg, true);\n }\n }\n}\n\nexports.flowIndentCheck = flowIndentCheck;\n","'use strict';\n\nvar identity = require('../nodes/identity.js');\n\nfunction mapIncludes(ctx, items, search) {\n const { uniqueKeys } = ctx.options;\n if (uniqueKeys === false)\n return false;\n const isEqual = typeof uniqueKeys === 'function'\n ? uniqueKeys\n : (a, b) => a === b || (identity.isScalar(a) && identity.isScalar(b) && a.value === b.value);\n return items.some(pair => isEqual(pair.key, search));\n}\n\nexports.mapIncludes = mapIncludes;\n","'use strict';\n\nvar Pair = require('../nodes/Pair.js');\nvar YAMLMap = require('../nodes/YAMLMap.js');\nvar resolveProps = require('./resolve-props.js');\nvar utilContainsNewline = require('./util-contains-newline.js');\nvar utilFlowIndentCheck = require('./util-flow-indent-check.js');\nvar utilMapIncludes = require('./util-map-includes.js');\n\nconst startColMsg = 'All mapping items must start at the same column';\nfunction resolveBlockMap({ composeNode, composeEmptyNode }, ctx, bm, onError, tag) {\n const NodeClass = tag?.nodeClass ?? YAMLMap.YAMLMap;\n const map = new NodeClass(ctx.schema);\n if (ctx.atRoot)\n ctx.atRoot = false;\n let offset = bm.offset;\n let commentEnd = null;\n for (const collItem of bm.items) {\n const { start, key, sep, value } = collItem;\n // key properties\n const keyProps = resolveProps.resolveProps(start, {\n indicator: 'explicit-key-ind',\n next: key ?? sep?.[0],\n offset,\n onError,\n parentIndent: bm.indent,\n startOnNewline: true\n });\n const implicitKey = !keyProps.found;\n if (implicitKey) {\n if (key) {\n if (key.type === 'block-seq')\n onError(offset, 'BLOCK_AS_IMPLICIT_KEY', 'A block sequence may not be used as an implicit map key');\n else if ('indent' in key && key.indent !== bm.indent)\n onError(offset, 'BAD_INDENT', startColMsg);\n }\n if (!keyProps.anchor && !keyProps.tag && !sep) {\n commentEnd = keyProps.end;\n if (keyProps.comment) {\n if (map.comment)\n map.comment += '\\n' + keyProps.comment;\n else\n map.comment = keyProps.comment;\n }\n continue;\n }\n if (keyProps.newlineAfterProp || utilContainsNewline.containsNewline(key)) {\n onError(key ?? start[start.length - 1], 'MULTILINE_IMPLICIT_KEY', 'Implicit keys need to be on a single line');\n }\n }\n else if (keyProps.found?.indent !== bm.indent) {\n onError(offset, 'BAD_INDENT', startColMsg);\n }\n // key value\n ctx.atKey = true;\n const keyStart = keyProps.end;\n const keyNode = key\n ? composeNode(ctx, key, keyProps, onError)\n : composeEmptyNode(ctx, keyStart, start, null, keyProps, onError);\n if (ctx.schema.compat)\n utilFlowIndentCheck.flowIndentCheck(bm.indent, key, onError);\n ctx.atKey = false;\n if (utilMapIncludes.mapIncludes(ctx, map.items, keyNode))\n onError(keyStart, 'DUPLICATE_KEY', 'Map keys must be unique');\n // value properties\n const valueProps = resolveProps.resolveProps(sep ?? [], {\n indicator: 'map-value-ind',\n next: value,\n offset: keyNode.range[2],\n onError,\n parentIndent: bm.indent,\n startOnNewline: !key || key.type === 'block-scalar'\n });\n offset = valueProps.end;\n if (valueProps.found) {\n if (implicitKey) {\n if (value?.type === 'block-map' && !valueProps.hasNewline)\n onError(offset, 'BLOCK_AS_IMPLICIT_KEY', 'Nested mappings are not allowed in compact mappings');\n if (ctx.options.strict &&\n keyProps.start < valueProps.found.offset - 1024)\n onError(keyNode.range, 'KEY_OVER_1024_CHARS', 'The : indicator must be at most 1024 chars after the start of an implicit block mapping key');\n }\n // value value\n const valueNode = value\n ? composeNode(ctx, value, valueProps, onError)\n : composeEmptyNode(ctx, offset, sep, null, valueProps, onError);\n if (ctx.schema.compat)\n utilFlowIndentCheck.flowIndentCheck(bm.indent, value, onError);\n offset = valueNode.range[2];\n const pair = new Pair.Pair(keyNode, valueNode);\n if (ctx.options.keepSourceTokens)\n pair.srcToken = collItem;\n map.items.push(pair);\n }\n else {\n // key with no value\n if (implicitKey)\n onError(keyNode.range, 'MISSING_CHAR', 'Implicit map keys need to be followed by map values');\n if (valueProps.comment) {\n if (keyNode.comment)\n keyNode.comment += '\\n' + valueProps.comment;\n else\n keyNode.comment = valueProps.comment;\n }\n const pair = new Pair.Pair(keyNode);\n if (ctx.options.keepSourceTokens)\n pair.srcToken = collItem;\n map.items.push(pair);\n }\n }\n if (commentEnd && commentEnd < offset)\n onError(commentEnd, 'IMPOSSIBLE', 'Map comment with trailing content');\n map.range = [bm.offset, offset, commentEnd ?? offset];\n return map;\n}\n\nexports.resolveBlockMap = resolveBlockMap;\n","'use strict';\n\nvar YAMLSeq = require('../nodes/YAMLSeq.js');\nvar resolveProps = require('./resolve-props.js');\nvar utilFlowIndentCheck = require('./util-flow-indent-check.js');\n\nfunction resolveBlockSeq({ composeNode, composeEmptyNode }, ctx, bs, onError, tag) {\n const NodeClass = tag?.nodeClass ?? YAMLSeq.YAMLSeq;\n const seq = new NodeClass(ctx.schema);\n if (ctx.atRoot)\n ctx.atRoot = false;\n if (ctx.atKey)\n ctx.atKey = false;\n let offset = bs.offset;\n let commentEnd = null;\n for (const { start, value } of bs.items) {\n const props = resolveProps.resolveProps(start, {\n indicator: 'seq-item-ind',\n next: value,\n offset,\n onError,\n parentIndent: bs.indent,\n startOnNewline: true\n });\n if (!props.found) {\n if (props.anchor || props.tag || value) {\n if (value?.type === 'block-seq')\n onError(props.end, 'BAD_INDENT', 'All sequence items must start at the same column');\n else\n onError(offset, 'MISSING_CHAR', 'Sequence item without - indicator');\n }\n else {\n commentEnd = props.end;\n if (props.comment)\n seq.comment = props.comment;\n continue;\n }\n }\n const node = value\n ? composeNode(ctx, value, props, onError)\n : composeEmptyNode(ctx, props.end, start, null, props, onError);\n if (ctx.schema.compat)\n utilFlowIndentCheck.flowIndentCheck(bs.indent, value, onError);\n offset = node.range[2];\n seq.items.push(node);\n }\n seq.range = [bs.offset, offset, commentEnd ?? offset];\n return seq;\n}\n\nexports.resolveBlockSeq = resolveBlockSeq;\n","'use strict';\n\nfunction resolveEnd(end, offset, reqSpace, onError) {\n let comment = '';\n if (end) {\n let hasSpace = false;\n let sep = '';\n for (const token of end) {\n const { source, type } = token;\n switch (type) {\n case 'space':\n hasSpace = true;\n break;\n case 'comment': {\n if (reqSpace && !hasSpace)\n onError(token, 'MISSING_CHAR', 'Comments must be separated from other tokens by white space characters');\n const cb = source.substring(1) || ' ';\n if (!comment)\n comment = cb;\n else\n comment += sep + cb;\n sep = '';\n break;\n }\n case 'newline':\n if (comment)\n sep += source;\n hasSpace = true;\n break;\n default:\n onError(token, 'UNEXPECTED_TOKEN', `Unexpected ${type} at node end`);\n }\n offset += source.length;\n }\n }\n return { comment, offset };\n}\n\nexports.resolveEnd = resolveEnd;\n","'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar Pair = require('../nodes/Pair.js');\nvar YAMLMap = require('../nodes/YAMLMap.js');\nvar YAMLSeq = require('../nodes/YAMLSeq.js');\nvar resolveEnd = require('./resolve-end.js');\nvar resolveProps = require('./resolve-props.js');\nvar utilContainsNewline = require('./util-contains-newline.js');\nvar utilMapIncludes = require('./util-map-includes.js');\n\nconst blockMsg = 'Block collections are not allowed within flow collections';\nconst isBlock = (token) => token && (token.type === 'block-map' || token.type === 'block-seq');\nfunction resolveFlowCollection({ composeNode, composeEmptyNode }, ctx, fc, onError, tag) {\n const isMap = fc.start.source === '{';\n const fcName = isMap ? 'flow map' : 'flow sequence';\n const NodeClass = (tag?.nodeClass ?? (isMap ? YAMLMap.YAMLMap : YAMLSeq.YAMLSeq));\n const coll = new NodeClass(ctx.schema);\n coll.flow = true;\n const atRoot = ctx.atRoot;\n if (atRoot)\n ctx.atRoot = false;\n if (ctx.atKey)\n ctx.atKey = false;\n let offset = fc.offset + fc.start.source.length;\n for (let i = 0; i < fc.items.length; ++i) {\n const collItem = fc.items[i];\n const { start, key, sep, value } = collItem;\n const props = resolveProps.resolveProps(start, {\n flow: fcName,\n indicator: 'explicit-key-ind',\n next: key ?? sep?.[0],\n offset,\n onError,\n parentIndent: fc.indent,\n startOnNewline: false\n });\n if (!props.found) {\n if (!props.anchor && !props.tag && !sep && !value) {\n if (i === 0 && props.comma)\n onError(props.comma, 'UNEXPECTED_TOKEN', `Unexpected , in ${fcName}`);\n else if (i < fc.items.length - 1)\n onError(props.start, 'UNEXPECTED_TOKEN', `Unexpected empty item in ${fcName}`);\n if (props.comment) {\n if (coll.comment)\n coll.comment += '\\n' + props.comment;\n else\n coll.comment = props.comment;\n }\n offset = props.end;\n continue;\n }\n if (!isMap && ctx.options.strict && utilContainsNewline.containsNewline(key))\n onError(key, // checked by containsNewline()\n 'MULTILINE_IMPLICIT_KEY', 'Implicit keys of flow sequence pairs need to be on a single line');\n }\n if (i === 0) {\n if (props.comma)\n onError(props.comma, 'UNEXPECTED_TOKEN', `Unexpected , in ${fcName}`);\n }\n else {\n if (!props.comma)\n onError(props.start, 'MISSING_CHAR', `Missing , between ${fcName} items`);\n if (props.comment) {\n let prevItemComment = '';\n loop: for (const st of start) {\n switch (st.type) {\n case 'comma':\n case 'space':\n break;\n case 'comment':\n prevItemComment = st.source.substring(1);\n break loop;\n default:\n break loop;\n }\n }\n if (prevItemComment) {\n let prev = coll.items[coll.items.length - 1];\n if (identity.isPair(prev))\n prev = prev.value ?? prev.key;\n if (prev.comment)\n prev.comment += '\\n' + prevItemComment;\n else\n prev.comment = prevItemComment;\n props.comment = props.comment.substring(prevItemComment.length + 1);\n }\n }\n }\n if (!isMap && !sep && !props.found) {\n // item is a value in a seq\n // → key & sep are empty, start does not include ? or :\n const valueNode = value\n ? composeNode(ctx, value, props, onError)\n : composeEmptyNode(ctx, props.end, sep, null, props, onError);\n coll.items.push(valueNode);\n offset = valueNode.range[2];\n if (isBlock(value))\n onError(valueNode.range, 'BLOCK_IN_FLOW', blockMsg);\n }\n else {\n // item is a key+value pair\n // key value\n ctx.atKey = true;\n const keyStart = props.end;\n const keyNode = key\n ? composeNode(ctx, key, props, onError)\n : composeEmptyNode(ctx, keyStart, start, null, props, onError);\n if (isBlock(key))\n onError(keyNode.range, 'BLOCK_IN_FLOW', blockMsg);\n ctx.atKey = false;\n // value properties\n const valueProps = resolveProps.resolveProps(sep ?? [], {\n flow: fcName,\n indicator: 'map-value-ind',\n next: value,\n offset: keyNode.range[2],\n onError,\n parentIndent: fc.indent,\n startOnNewline: false\n });\n if (valueProps.found) {\n if (!isMap && !props.found && ctx.options.strict) {\n if (sep)\n for (const st of sep) {\n if (st === valueProps.found)\n break;\n if (st.type === 'newline') {\n onError(st, 'MULTILINE_IMPLICIT_KEY', 'Implicit keys of flow sequence pairs need to be on a single line');\n break;\n }\n }\n if (props.start < valueProps.found.offset - 1024)\n onError(valueProps.found, 'KEY_OVER_1024_CHARS', 'The : indicator must be at most 1024 chars after the start of an implicit flow sequence key');\n }\n }\n else if (value) {\n if ('source' in value && value.source?.[0] === ':')\n onError(value, 'MISSING_CHAR', `Missing space after : in ${fcName}`);\n else\n onError(valueProps.start, 'MISSING_CHAR', `Missing , or : between ${fcName} items`);\n }\n // value value\n const valueNode = value\n ? composeNode(ctx, value, valueProps, onError)\n : valueProps.found\n ? composeEmptyNode(ctx, valueProps.end, sep, null, valueProps, onError)\n : null;\n if (valueNode) {\n if (isBlock(value))\n onError(valueNode.range, 'BLOCK_IN_FLOW', blockMsg);\n }\n else if (valueProps.comment) {\n if (keyNode.comment)\n keyNode.comment += '\\n' + valueProps.comment;\n else\n keyNode.comment = valueProps.comment;\n }\n const pair = new Pair.Pair(keyNode, valueNode);\n if (ctx.options.keepSourceTokens)\n pair.srcToken = collItem;\n if (isMap) {\n const map = coll;\n if (utilMapIncludes.mapIncludes(ctx, map.items, keyNode))\n onError(keyStart, 'DUPLICATE_KEY', 'Map keys must be unique');\n map.items.push(pair);\n }\n else {\n const map = new YAMLMap.YAMLMap(ctx.schema);\n map.flow = true;\n map.items.push(pair);\n const endRange = (valueNode ?? keyNode).range;\n map.range = [keyNode.range[0], endRange[1], endRange[2]];\n coll.items.push(map);\n }\n offset = valueNode ? valueNode.range[2] : valueProps.end;\n }\n }\n const expectedEnd = isMap ? '}' : ']';\n const [ce, ...ee] = fc.end;\n let cePos = offset;\n if (ce?.source === expectedEnd)\n cePos = ce.offset + ce.source.length;\n else {\n const name = fcName[0].toUpperCase() + fcName.substring(1);\n const msg = atRoot\n ? `${name} must end with a ${expectedEnd}`\n : `${name} in block collection must be sufficiently indented and end with a ${expectedEnd}`;\n onError(offset, atRoot ? 'MISSING_CHAR' : 'BAD_INDENT', msg);\n if (ce && ce.source.length !== 1)\n ee.unshift(ce);\n }\n if (ee.length > 0) {\n const end = resolveEnd.resolveEnd(ee, cePos, ctx.options.strict, onError);\n if (end.comment) {\n if (coll.comment)\n coll.comment += '\\n' + end.comment;\n else\n coll.comment = end.comment;\n }\n coll.range = [fc.offset, cePos, end.offset];\n }\n else {\n coll.range = [fc.offset, cePos, cePos];\n }\n return coll;\n}\n\nexports.resolveFlowCollection = resolveFlowCollection;\n","'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar Scalar = require('../nodes/Scalar.js');\nvar YAMLMap = require('../nodes/YAMLMap.js');\nvar YAMLSeq = require('../nodes/YAMLSeq.js');\nvar resolveBlockMap = require('./resolve-block-map.js');\nvar resolveBlockSeq = require('./resolve-block-seq.js');\nvar resolveFlowCollection = require('./resolve-flow-collection.js');\n\nfunction resolveCollection(CN, ctx, token, onError, tagName, tag) {\n const coll = token.type === 'block-map'\n ? resolveBlockMap.resolveBlockMap(CN, ctx, token, onError, tag)\n : token.type === 'block-seq'\n ? resolveBlockSeq.resolveBlockSeq(CN, ctx, token, onError, tag)\n : resolveFlowCollection.resolveFlowCollection(CN, ctx, token, onError, tag);\n const Coll = coll.constructor;\n // If we got a tagName matching the class, or the tag name is '!',\n // then use the tagName from the node class used to create it.\n if (tagName === '!' || tagName === Coll.tagName) {\n coll.tag = Coll.tagName;\n return coll;\n }\n if (tagName)\n coll.tag = tagName;\n return coll;\n}\nfunction composeCollection(CN, ctx, token, props, onError) {\n const tagToken = props.tag;\n const tagName = !tagToken\n ? null\n : ctx.directives.tagName(tagToken.source, msg => onError(tagToken, 'TAG_RESOLVE_FAILED', msg));\n if (token.type === 'block-seq') {\n const { anchor, newlineAfterProp: nl } = props;\n const lastProp = anchor && tagToken\n ? anchor.offset > tagToken.offset\n ? anchor\n : tagToken\n : (anchor ?? tagToken);\n if (lastProp && (!nl || nl.offset < lastProp.offset)) {\n const message = 'Missing newline after block sequence props';\n onError(lastProp, 'MISSING_CHAR', message);\n }\n }\n const expType = token.type === 'block-map'\n ? 'map'\n : token.type === 'block-seq'\n ? 'seq'\n : token.start.source === '{'\n ? 'map'\n : 'seq';\n // shortcut: check if it's a generic YAMLMap or YAMLSeq\n // before jumping into the custom tag logic.\n if (!tagToken ||\n !tagName ||\n tagName === '!' ||\n (tagName === YAMLMap.YAMLMap.tagName && expType === 'map') ||\n (tagName === YAMLSeq.YAMLSeq.tagName && expType === 'seq')) {\n return resolveCollection(CN, ctx, token, onError, tagName);\n }\n let tag = ctx.schema.tags.find(t => t.tag === tagName && t.collection === expType);\n if (!tag) {\n const kt = ctx.schema.knownTags[tagName];\n if (kt?.collection === expType) {\n ctx.schema.tags.push(Object.assign({}, kt, { default: false }));\n tag = kt;\n }\n else {\n if (kt) {\n onError(tagToken, 'BAD_COLLECTION_TYPE', `${kt.tag} used for ${expType} collection, but expects ${kt.collection ?? 'scalar'}`, true);\n }\n else {\n onError(tagToken, 'TAG_RESOLVE_FAILED', `Unresolved tag: ${tagName}`, true);\n }\n return resolveCollection(CN, ctx, token, onError, tagName);\n }\n }\n const coll = resolveCollection(CN, ctx, token, onError, tagName, tag);\n const res = tag.resolve?.(coll, msg => onError(tagToken, 'TAG_RESOLVE_FAILED', msg), ctx.options) ?? coll;\n const node = identity.isNode(res)\n ? res\n : new Scalar.Scalar(res);\n node.range = coll.range;\n node.tag = tagName;\n if (tag?.format)\n node.format = tag.format;\n return node;\n}\n\nexports.composeCollection = composeCollection;\n","'use strict';\n\nvar Scalar = require('../nodes/Scalar.js');\n\nfunction resolveBlockScalar(ctx, scalar, onError) {\n const start = scalar.offset;\n const header = parseBlockScalarHeader(scalar, ctx.options.strict, onError);\n if (!header)\n return { value: '', type: null, comment: '', range: [start, start, start] };\n const type = header.mode === '>' ? Scalar.Scalar.BLOCK_FOLDED : Scalar.Scalar.BLOCK_LITERAL;\n const lines = scalar.source ? splitLines(scalar.source) : [];\n // determine the end of content & start of chomping\n let chompStart = lines.length;\n for (let i = lines.length - 1; i >= 0; --i) {\n const content = lines[i][1];\n if (content === '' || content === '\\r')\n chompStart = i;\n else\n break;\n }\n // shortcut for empty contents\n if (chompStart === 0) {\n const value = header.chomp === '+' && lines.length > 0\n ? '\\n'.repeat(Math.max(1, lines.length - 1))\n : '';\n let end = start + header.length;\n if (scalar.source)\n end += scalar.source.length;\n return { value, type, comment: header.comment, range: [start, end, end] };\n }\n // find the indentation level to trim from start\n let trimIndent = scalar.indent + header.indent;\n let offset = scalar.offset + header.length;\n let contentStart = 0;\n for (let i = 0; i < chompStart; ++i) {\n const [indent, content] = lines[i];\n if (content === '' || content === '\\r') {\n if (header.indent === 0 && indent.length > trimIndent)\n trimIndent = indent.length;\n }\n else {\n if (indent.length < trimIndent) {\n const message = 'Block scalars with more-indented leading empty lines must use an explicit indentation indicator';\n onError(offset + indent.length, 'MISSING_CHAR', message);\n }\n if (header.indent === 0)\n trimIndent = indent.length;\n contentStart = i;\n if (trimIndent === 0 && !ctx.atRoot) {\n const message = 'Block scalar values in collections must be indented';\n onError(offset, 'BAD_INDENT', message);\n }\n break;\n }\n offset += indent.length + content.length + 1;\n }\n // include trailing more-indented empty lines in content\n for (let i = lines.length - 1; i >= chompStart; --i) {\n if (lines[i][0].length > trimIndent)\n chompStart = i + 1;\n }\n let value = '';\n let sep = '';\n let prevMoreIndented = false;\n // leading whitespace is kept intact\n for (let i = 0; i < contentStart; ++i)\n value += lines[i][0].slice(trimIndent) + '\\n';\n for (let i = contentStart; i < chompStart; ++i) {\n let [indent, content] = lines[i];\n offset += indent.length + content.length + 1;\n const crlf = content[content.length - 1] === '\\r';\n if (crlf)\n content = content.slice(0, -1);\n /* istanbul ignore if already caught in lexer */\n if (content && indent.length < trimIndent) {\n const src = header.indent\n ? 'explicit indentation indicator'\n : 'first line';\n const message = `Block scalar lines must not be less indented than their ${src}`;\n onError(offset - content.length - (crlf ? 2 : 1), 'BAD_INDENT', message);\n indent = '';\n }\n if (type === Scalar.Scalar.BLOCK_LITERAL) {\n value += sep + indent.slice(trimIndent) + content;\n sep = '\\n';\n }\n else if (indent.length > trimIndent || content[0] === '\\t') {\n // more-indented content within a folded block\n if (sep === ' ')\n sep = '\\n';\n else if (!prevMoreIndented && sep === '\\n')\n sep = '\\n\\n';\n value += sep + indent.slice(trimIndent) + content;\n sep = '\\n';\n prevMoreIndented = true;\n }\n else if (content === '') {\n // empty line\n if (sep === '\\n')\n value += '\\n';\n else\n sep = '\\n';\n }\n else {\n value += sep + content;\n sep = ' ';\n prevMoreIndented = false;\n }\n }\n switch (header.chomp) {\n case '-':\n break;\n case '+':\n for (let i = chompStart; i < lines.length; ++i)\n value += '\\n' + lines[i][0].slice(trimIndent);\n if (value[value.length - 1] !== '\\n')\n value += '\\n';\n break;\n default:\n value += '\\n';\n }\n const end = start + header.length + scalar.source.length;\n return { value, type, comment: header.comment, range: [start, end, end] };\n}\nfunction parseBlockScalarHeader({ offset, props }, strict, onError) {\n /* istanbul ignore if should not happen */\n if (props[0].type !== 'block-scalar-header') {\n onError(props[0], 'IMPOSSIBLE', 'Block scalar header not found');\n return null;\n }\n const { source } = props[0];\n const mode = source[0];\n let indent = 0;\n let chomp = '';\n let error = -1;\n for (let i = 1; i < source.length; ++i) {\n const ch = source[i];\n if (!chomp && (ch === '-' || ch === '+'))\n chomp = ch;\n else {\n const n = Number(ch);\n if (!indent && n)\n indent = n;\n else if (error === -1)\n error = offset + i;\n }\n }\n if (error !== -1)\n onError(error, 'UNEXPECTED_TOKEN', `Block scalar header includes extra characters: ${source}`);\n let hasSpace = false;\n let comment = '';\n let length = source.length;\n for (let i = 1; i < props.length; ++i) {\n const token = props[i];\n switch (token.type) {\n case 'space':\n hasSpace = true;\n // fallthrough\n case 'newline':\n length += token.source.length;\n break;\n case 'comment':\n if (strict && !hasSpace) {\n const message = 'Comments must be separated from other tokens by white space characters';\n onError(token, 'MISSING_CHAR', message);\n }\n length += token.source.length;\n comment = token.source.substring(1);\n break;\n case 'error':\n onError(token, 'UNEXPECTED_TOKEN', token.message);\n length += token.source.length;\n break;\n /* istanbul ignore next should not happen */\n default: {\n const message = `Unexpected token in block scalar header: ${token.type}`;\n onError(token, 'UNEXPECTED_TOKEN', message);\n const ts = token.source;\n if (ts && typeof ts === 'string')\n length += ts.length;\n }\n }\n }\n return { mode, indent, chomp, comment, length };\n}\n/** @returns Array of lines split up as `[indent, content]` */\nfunction splitLines(source) {\n const split = source.split(/\\n( *)/);\n const first = split[0];\n const m = first.match(/^( *)/);\n const line0 = m?.[1]\n ? [m[1], first.slice(m[1].length)]\n : ['', first];\n const lines = [line0];\n for (let i = 1; i < split.length; i += 2)\n lines.push([split[i], split[i + 1]]);\n return lines;\n}\n\nexports.resolveBlockScalar = resolveBlockScalar;\n","'use strict';\n\nvar Scalar = require('../nodes/Scalar.js');\nvar resolveEnd = require('./resolve-end.js');\n\nfunction resolveFlowScalar(scalar, strict, onError) {\n const { offset, type, source, end } = scalar;\n let _type;\n let value;\n const _onError = (rel, code, msg) => onError(offset + rel, code, msg);\n switch (type) {\n case 'scalar':\n _type = Scalar.Scalar.PLAIN;\n value = plainValue(source, _onError);\n break;\n case 'single-quoted-scalar':\n _type = Scalar.Scalar.QUOTE_SINGLE;\n value = singleQuotedValue(source, _onError);\n break;\n case 'double-quoted-scalar':\n _type = Scalar.Scalar.QUOTE_DOUBLE;\n value = doubleQuotedValue(source, _onError);\n break;\n /* istanbul ignore next should not happen */\n default:\n onError(scalar, 'UNEXPECTED_TOKEN', `Expected a flow scalar value, but found: ${type}`);\n return {\n value: '',\n type: null,\n comment: '',\n range: [offset, offset + source.length, offset + source.length]\n };\n }\n const valueEnd = offset + source.length;\n const re = resolveEnd.resolveEnd(end, valueEnd, strict, onError);\n return {\n value,\n type: _type,\n comment: re.comment,\n range: [offset, valueEnd, re.offset]\n };\n}\nfunction plainValue(source, onError) {\n let badChar = '';\n switch (source[0]) {\n /* istanbul ignore next should not happen */\n case '\\t':\n badChar = 'a tab character';\n break;\n case ',':\n badChar = 'flow indicator character ,';\n break;\n case '%':\n badChar = 'directive indicator character %';\n break;\n case '|':\n case '>': {\n badChar = `block scalar indicator ${source[0]}`;\n break;\n }\n case '@':\n case '`': {\n badChar = `reserved character ${source[0]}`;\n break;\n }\n }\n if (badChar)\n onError(0, 'BAD_SCALAR_START', `Plain value cannot start with ${badChar}`);\n return foldLines(source);\n}\nfunction singleQuotedValue(source, onError) {\n if (source[source.length - 1] !== \"'\" || source.length === 1)\n onError(source.length, 'MISSING_CHAR', \"Missing closing 'quote\");\n return foldLines(source.slice(1, -1)).replace(/''/g, \"'\");\n}\nfunction foldLines(source) {\n /**\n * The negative lookbehind here and in the `re` RegExp is to\n * prevent causing a polynomial search time in certain cases.\n *\n * The try-catch is for Safari, which doesn't support this yet:\n * https://caniuse.com/js-regexp-lookbehind\n */\n let first, line;\n try {\n first = new RegExp('(.*?)(?<![ \\t])[ \\t]*\\r?\\n', 'sy');\n line = new RegExp('[ \\t]*(.*?)(?:(?<![ \\t])[ \\t]*)?\\r?\\n', 'sy');\n }\n catch {\n first = /(.*?)[ \\t]*\\r?\\n/sy;\n line = /[ \\t]*(.*?)[ \\t]*\\r?\\n/sy;\n }\n let match = first.exec(source);\n if (!match)\n return source;\n let res = match[1];\n let sep = ' ';\n let pos = first.lastIndex;\n line.lastIndex = pos;\n while ((match = line.exec(source))) {\n if (match[1] === '') {\n if (sep === '\\n')\n res += sep;\n else\n sep = '\\n';\n }\n else {\n res += sep + match[1];\n sep = ' ';\n }\n pos = line.lastIndex;\n }\n const last = /[ \\t]*(.*)/sy;\n last.lastIndex = pos;\n match = last.exec(source);\n return res + sep + (match?.[1] ?? '');\n}\nfunction doubleQuotedValue(source, onError) {\n let res = '';\n for (let i = 1; i < source.length - 1; ++i) {\n const ch = source[i];\n if (ch === '\\r' && source[i + 1] === '\\n')\n continue;\n if (ch === '\\n') {\n const { fold, offset } = foldNewline(source, i);\n res += fold;\n i = offset;\n }\n else if (ch === '\\\\') {\n let next = source[++i];\n const cc = escapeCodes[next];\n if (cc)\n res += cc;\n else if (next === '\\n') {\n // skip escaped newlines, but still trim the following line\n next = source[i + 1];\n while (next === ' ' || next === '\\t')\n next = source[++i + 1];\n }\n else if (next === '\\r' && source[i + 1] === '\\n') {\n // skip escaped CRLF newlines, but still trim the following line\n next = source[++i + 1];\n while (next === ' ' || next === '\\t')\n next = source[++i + 1];\n }\n else if (next === 'x' || next === 'u' || next === 'U') {\n const length = { x: 2, u: 4, U: 8 }[next];\n res += parseCharCode(source, i + 1, length, onError);\n i += length;\n }\n else {\n const raw = source.substr(i - 1, 2);\n onError(i - 1, 'BAD_DQ_ESCAPE', `Invalid escape sequence ${raw}`);\n res += raw;\n }\n }\n else if (ch === ' ' || ch === '\\t') {\n // trim trailing whitespace\n const wsStart = i;\n let next = source[i + 1];\n while (next === ' ' || next === '\\t')\n next = source[++i + 1];\n if (next !== '\\n' && !(next === '\\r' && source[i + 2] === '\\n'))\n res += i > wsStart ? source.slice(wsStart, i + 1) : ch;\n }\n else {\n res += ch;\n }\n }\n if (source[source.length - 1] !== '\"' || source.length === 1)\n onError(source.length, 'MISSING_CHAR', 'Missing closing \"quote');\n return res;\n}\n/**\n * Fold a single newline into a space, multiple newlines to N - 1 newlines.\n * Presumes `source[offset] === '\\n'`\n */\nfunction foldNewline(source, offset) {\n let fold = '';\n let ch = source[offset + 1];\n while (ch === ' ' || ch === '\\t' || ch === '\\n' || ch === '\\r') {\n if (ch === '\\r' && source[offset + 2] !== '\\n')\n break;\n if (ch === '\\n')\n fold += '\\n';\n offset += 1;\n ch = source[offset + 1];\n }\n if (!fold)\n fold = ' ';\n return { fold, offset };\n}\nconst escapeCodes = {\n '0': '\\0', // null character\n a: '\\x07', // bell character\n b: '\\b', // backspace\n e: '\\x1b', // escape character\n f: '\\f', // form feed\n n: '\\n', // line feed\n r: '\\r', // carriage return\n t: '\\t', // horizontal tab\n v: '\\v', // vertical tab\n N: '\\u0085', // Unicode next line\n _: '\\u00a0', // Unicode non-breaking space\n L: '\\u2028', // Unicode line separator\n P: '\\u2029', // Unicode paragraph separator\n ' ': ' ',\n '\"': '\"',\n '/': '/',\n '\\\\': '\\\\',\n '\\t': '\\t'\n};\nfunction parseCharCode(source, offset, length, onError) {\n const cc = source.substr(offset, length);\n const ok = cc.length === length && /^[0-9a-fA-F]+$/.test(cc);\n const code = ok ? parseInt(cc, 16) : NaN;\n if (isNaN(code)) {\n const raw = source.substr(offset - 2, length + 2);\n onError(offset - 2, 'BAD_DQ_ESCAPE', `Invalid escape sequence ${raw}`);\n return raw;\n }\n return String.fromCodePoint(code);\n}\n\nexports.resolveFlowScalar = resolveFlowScalar;\n","'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar Scalar = require('../nodes/Scalar.js');\nvar resolveBlockScalar = require('./resolve-block-scalar.js');\nvar resolveFlowScalar = require('./resolve-flow-scalar.js');\n\nfunction composeScalar(ctx, token, tagToken, onError) {\n const { value, type, comment, range } = token.type === 'block-scalar'\n ? resolveBlockScalar.resolveBlockScalar(ctx, token, onError)\n : resolveFlowScalar.resolveFlowScalar(token, ctx.options.strict, onError);\n const tagName = tagToken\n ? ctx.directives.tagName(tagToken.source, msg => onError(tagToken, 'TAG_RESOLVE_FAILED', msg))\n : null;\n let tag;\n if (ctx.options.stringKeys && ctx.atKey) {\n tag = ctx.schema[identity.SCALAR];\n }\n else if (tagName)\n tag = findScalarTagByName(ctx.schema, value, tagName, tagToken, onError);\n else if (token.type === 'scalar')\n tag = findScalarTagByTest(ctx, value, token, onError);\n else\n tag = ctx.schema[identity.SCALAR];\n let scalar;\n try {\n const res = tag.resolve(value, msg => onError(tagToken ?? token, 'TAG_RESOLVE_FAILED', msg), ctx.options);\n scalar = identity.isScalar(res) ? res : new Scalar.Scalar(res);\n }\n catch (error) {\n const msg = error instanceof Error ? error.message : String(error);\n onError(tagToken ?? token, 'TAG_RESOLVE_FAILED', msg);\n scalar = new Scalar.Scalar(value);\n }\n scalar.range = range;\n scalar.source = value;\n if (type)\n scalar.type = type;\n if (tagName)\n scalar.tag = tagName;\n if (tag.format)\n scalar.format = tag.format;\n if (comment)\n scalar.comment = comment;\n return scalar;\n}\nfunction findScalarTagByName(schema, value, tagName, tagToken, onError) {\n if (tagName === '!')\n return schema[identity.SCALAR]; // non-specific tag\n const matchWithTest = [];\n for (const tag of schema.tags) {\n if (!tag.collection && tag.tag === tagName) {\n if (tag.default && tag.test)\n matchWithTest.push(tag);\n else\n return tag;\n }\n }\n for (const tag of matchWithTest)\n if (tag.test?.test(value))\n return tag;\n const kt = schema.knownTags[tagName];\n if (kt && !kt.collection) {\n // Ensure that the known tag is available for stringifying,\n // but does not get used by default.\n schema.tags.push(Object.assign({}, kt, { default: false, test: undefined }));\n return kt;\n }\n onError(tagToken, 'TAG_RESOLVE_FAILED', `Unresolved tag: ${tagName}`, tagName !== 'tag:yaml.org,2002:str');\n return schema[identity.SCALAR];\n}\nfunction findScalarTagByTest({ atKey, directives, schema }, value, token, onError) {\n const tag = schema.tags.find(tag => (tag.default === true || (atKey && tag.default === 'key')) &&\n tag.test?.test(value)) || schema[identity.SCALAR];\n if (schema.compat) {\n const compat = schema.compat.find(tag => tag.default && tag.test?.test(value)) ??\n schema[identity.SCALAR];\n if (tag.tag !== compat.tag) {\n const ts = directives.tagString(tag.tag);\n const cs = directives.tagString(compat.tag);\n const msg = `Value may be parsed as either ${ts} or ${cs}`;\n onError(token, 'TAG_RESOLVE_FAILED', msg, true);\n }\n }\n return tag;\n}\n\nexports.composeScalar = composeScalar;\n","'use strict';\n\nfunction emptyScalarPosition(offset, before, pos) {\n if (before) {\n pos ?? (pos = before.length);\n for (let i = pos - 1; i >= 0; --i) {\n let st = before[i];\n switch (st.type) {\n case 'space':\n case 'comment':\n case 'newline':\n offset -= st.source.length;\n continue;\n }\n // Technically, an empty scalar is immediately after the last non-empty\n // node, but it's more useful to place it after any whitespace.\n st = before[++i];\n while (st?.type === 'space') {\n offset += st.source.length;\n st = before[++i];\n }\n break;\n }\n }\n return offset;\n}\n\nexports.emptyScalarPosition = emptyScalarPosition;\n","'use strict';\n\nvar Alias = require('../nodes/Alias.js');\nvar identity = require('../nodes/identity.js');\nvar composeCollection = require('./compose-collection.js');\nvar composeScalar = require('./compose-scalar.js');\nvar resolveEnd = require('./resolve-end.js');\nvar utilEmptyScalarPosition = require('./util-empty-scalar-position.js');\n\nconst CN = { composeNode, composeEmptyNode };\nfunction composeNode(ctx, token, props, onError) {\n const atKey = ctx.atKey;\n const { spaceBefore, comment, anchor, tag } = props;\n let node;\n let isSrcToken = true;\n switch (token.type) {\n case 'alias':\n node = composeAlias(ctx, token, onError);\n if (anchor || tag)\n onError(token, 'ALIAS_PROPS', 'An alias node must not specify any properties');\n break;\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar':\n case 'block-scalar':\n node = composeScalar.composeScalar(ctx, token, tag, onError);\n if (anchor)\n node.anchor = anchor.source.substring(1);\n break;\n case 'block-map':\n case 'block-seq':\n case 'flow-collection':\n node = composeCollection.composeCollection(CN, ctx, token, props, onError);\n if (anchor)\n node.anchor = anchor.source.substring(1);\n break;\n default: {\n const message = token.type === 'error'\n ? token.message\n : `Unsupported token (type: ${token.type})`;\n onError(token, 'UNEXPECTED_TOKEN', message);\n node = composeEmptyNode(ctx, token.offset, undefined, null, props, onError);\n isSrcToken = false;\n }\n }\n if (anchor && node.anchor === '')\n onError(anchor, 'BAD_ALIAS', 'Anchor cannot be an empty string');\n if (atKey &&\n ctx.options.stringKeys &&\n (!identity.isScalar(node) ||\n typeof node.value !== 'string' ||\n (node.tag && node.tag !== 'tag:yaml.org,2002:str'))) {\n const msg = 'With stringKeys, all keys must be strings';\n onError(tag ?? token, 'NON_STRING_KEY', msg);\n }\n if (spaceBefore)\n node.spaceBefore = true;\n if (comment) {\n if (token.type === 'scalar' && token.source === '')\n node.comment = comment;\n else\n node.commentBefore = comment;\n }\n // @ts-expect-error Type checking misses meaning of isSrcToken\n if (ctx.options.keepSourceTokens && isSrcToken)\n node.srcToken = token;\n return node;\n}\nfunction composeEmptyNode(ctx, offset, before, pos, { spaceBefore, comment, anchor, tag, end }, onError) {\n const token = {\n type: 'scalar',\n offset: utilEmptyScalarPosition.emptyScalarPosition(offset, before, pos),\n indent: -1,\n source: ''\n };\n const node = composeScalar.composeScalar(ctx, token, tag, onError);\n if (anchor) {\n node.anchor = anchor.source.substring(1);\n if (node.anchor === '')\n onError(anchor, 'BAD_ALIAS', 'Anchor cannot be an empty string');\n }\n if (spaceBefore)\n node.spaceBefore = true;\n if (comment) {\n node.comment = comment;\n node.range[2] = end;\n }\n return node;\n}\nfunction composeAlias({ options }, { offset, source, end }, onError) {\n const alias = new Alias.Alias(source.substring(1));\n if (alias.source === '')\n onError(offset, 'BAD_ALIAS', 'Alias cannot be an empty string');\n if (alias.source.endsWith(':'))\n onError(offset + source.length - 1, 'BAD_ALIAS', 'Alias ending in : is ambiguous', true);\n const valueEnd = offset + source.length;\n const re = resolveEnd.resolveEnd(end, valueEnd, options.strict, onError);\n alias.range = [offset, valueEnd, re.offset];\n if (re.comment)\n alias.comment = re.comment;\n return alias;\n}\n\nexports.composeEmptyNode = composeEmptyNode;\nexports.composeNode = composeNode;\n","'use strict';\n\nvar Document = require('../doc/Document.js');\nvar composeNode = require('./compose-node.js');\nvar resolveEnd = require('./resolve-end.js');\nvar resolveProps = require('./resolve-props.js');\n\nfunction composeDoc(options, directives, { offset, start, value, end }, onError) {\n const opts = Object.assign({ _directives: directives }, options);\n const doc = new Document.Document(undefined, opts);\n const ctx = {\n atKey: false,\n atRoot: true,\n directives: doc.directives,\n options: doc.options,\n schema: doc.schema\n };\n const props = resolveProps.resolveProps(start, {\n indicator: 'doc-start',\n next: value ?? end?.[0],\n offset,\n onError,\n parentIndent: 0,\n startOnNewline: true\n });\n if (props.found) {\n doc.directives.docStart = true;\n if (value &&\n (value.type === 'block-map' || value.type === 'block-seq') &&\n !props.hasNewline)\n onError(props.end, 'MISSING_CHAR', 'Block collection cannot start on same line with directives-end marker');\n }\n // @ts-expect-error If Contents is set, let's trust the user\n doc.contents = value\n ? composeNode.composeNode(ctx, value, props, onError)\n : composeNode.composeEmptyNode(ctx, props.end, start, null, props, onError);\n const contentEnd = doc.contents.range[2];\n const re = resolveEnd.resolveEnd(end, contentEnd, false, onError);\n if (re.comment)\n doc.comment = re.comment;\n doc.range = [offset, contentEnd, re.offset];\n return doc;\n}\n\nexports.composeDoc = composeDoc;\n","'use strict';\n\nvar node_process = require('process');\nvar directives = require('../doc/directives.js');\nvar Document = require('../doc/Document.js');\nvar errors = require('../errors.js');\nvar identity = require('../nodes/identity.js');\nvar composeDoc = require('./compose-doc.js');\nvar resolveEnd = require('./resolve-end.js');\n\nfunction getErrorPos(src) {\n if (typeof src === 'number')\n return [src, src + 1];\n if (Array.isArray(src))\n return src.length === 2 ? src : [src[0], src[1]];\n const { offset, source } = src;\n return [offset, offset + (typeof source === 'string' ? source.length : 1)];\n}\nfunction parsePrelude(prelude) {\n let comment = '';\n let atComment = false;\n let afterEmptyLine = false;\n for (let i = 0; i < prelude.length; ++i) {\n const source = prelude[i];\n switch (source[0]) {\n case '#':\n comment +=\n (comment === '' ? '' : afterEmptyLine ? '\\n\\n' : '\\n') +\n (source.substring(1) || ' ');\n atComment = true;\n afterEmptyLine = false;\n break;\n case '%':\n if (prelude[i + 1]?.[0] !== '#')\n i += 1;\n atComment = false;\n break;\n default:\n // This may be wrong after doc-end, but in that case it doesn't matter\n if (!atComment)\n afterEmptyLine = true;\n atComment = false;\n }\n }\n return { comment, afterEmptyLine };\n}\n/**\n * Compose a stream of CST nodes into a stream of YAML Documents.\n *\n * ```ts\n * import { Composer, Parser } from 'yaml'\n *\n * const src: string = ...\n * const tokens = new Parser().parse(src)\n * const docs = new Composer().compose(tokens)\n * ```\n */\nclass Composer {\n constructor(options = {}) {\n this.doc = null;\n this.atDirectives = false;\n this.prelude = [];\n this.errors = [];\n this.warnings = [];\n this.onError = (source, code, message, warning) => {\n const pos = getErrorPos(source);\n if (warning)\n this.warnings.push(new errors.YAMLWarning(pos, code, message));\n else\n this.errors.push(new errors.YAMLParseError(pos, code, message));\n };\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n this.directives = new directives.Directives({ version: options.version || '1.2' });\n this.options = options;\n }\n decorate(doc, afterDoc) {\n const { comment, afterEmptyLine } = parsePrelude(this.prelude);\n //console.log({ dc: doc.comment, prelude, comment })\n if (comment) {\n const dc = doc.contents;\n if (afterDoc) {\n doc.comment = doc.comment ? `${doc.comment}\\n${comment}` : comment;\n }\n else if (afterEmptyLine || doc.directives.docStart || !dc) {\n doc.commentBefore = comment;\n }\n else if (identity.isCollection(dc) && !dc.flow && dc.items.length > 0) {\n let it = dc.items[0];\n if (identity.isPair(it))\n it = it.key;\n const cb = it.commentBefore;\n it.commentBefore = cb ? `${comment}\\n${cb}` : comment;\n }\n else {\n const cb = dc.commentBefore;\n dc.commentBefore = cb ? `${comment}\\n${cb}` : comment;\n }\n }\n if (afterDoc) {\n Array.prototype.push.apply(doc.errors, this.errors);\n Array.prototype.push.apply(doc.warnings, this.warnings);\n }\n else {\n doc.errors = this.errors;\n doc.warnings = this.warnings;\n }\n this.prelude = [];\n this.errors = [];\n this.warnings = [];\n }\n /**\n * Current stream status information.\n *\n * Mostly useful at the end of input for an empty stream.\n */\n streamInfo() {\n return {\n comment: parsePrelude(this.prelude).comment,\n directives: this.directives,\n errors: this.errors,\n warnings: this.warnings\n };\n }\n /**\n * Compose tokens into documents.\n *\n * @param forceDoc - If the stream contains no document, still emit a final document including any comments and directives that would be applied to a subsequent document.\n * @param endOffset - Should be set if `forceDoc` is also set, to set the document range end and to indicate errors correctly.\n */\n *compose(tokens, forceDoc = false, endOffset = -1) {\n for (const token of tokens)\n yield* this.next(token);\n yield* this.end(forceDoc, endOffset);\n }\n /** Advance the composer by one CST token. */\n *next(token) {\n if (node_process.env.LOG_STREAM)\n console.dir(token, { depth: null });\n switch (token.type) {\n case 'directive':\n this.directives.add(token.source, (offset, message, warning) => {\n const pos = getErrorPos(token);\n pos[0] += offset;\n this.onError(pos, 'BAD_DIRECTIVE', message, warning);\n });\n this.prelude.push(token.source);\n this.atDirectives = true;\n break;\n case 'document': {\n const doc = composeDoc.composeDoc(this.options, this.directives, token, this.onError);\n if (this.atDirectives && !doc.directives.docStart)\n this.onError(token, 'MISSING_CHAR', 'Missing directives-end/doc-start indicator line');\n this.decorate(doc, false);\n if (this.doc)\n yield this.doc;\n this.doc = doc;\n this.atDirectives = false;\n break;\n }\n case 'byte-order-mark':\n case 'space':\n break;\n case 'comment':\n case 'newline':\n this.prelude.push(token.source);\n break;\n case 'error': {\n const msg = token.source\n ? `${token.message}: ${JSON.stringify(token.source)}`\n : token.message;\n const error = new errors.YAMLParseError(getErrorPos(token), 'UNEXPECTED_TOKEN', msg);\n if (this.atDirectives || !this.doc)\n this.errors.push(error);\n else\n this.doc.errors.push(error);\n break;\n }\n case 'doc-end': {\n if (!this.doc) {\n const msg = 'Unexpected doc-end without preceding document';\n this.errors.push(new errors.YAMLParseError(getErrorPos(token), 'UNEXPECTED_TOKEN', msg));\n break;\n }\n this.doc.directives.docEnd = true;\n const end = resolveEnd.resolveEnd(token.end, token.offset + token.source.length, this.doc.options.strict, this.onError);\n this.decorate(this.doc, true);\n if (end.comment) {\n const dc = this.doc.comment;\n this.doc.comment = dc ? `${dc}\\n${end.comment}` : end.comment;\n }\n this.doc.range[2] = end.offset;\n break;\n }\n default:\n this.errors.push(new errors.YAMLParseError(getErrorPos(token), 'UNEXPECTED_TOKEN', `Unsupported token ${token.type}`));\n }\n }\n /**\n * Call at end of input to yield any remaining document.\n *\n * @param forceDoc - If the stream contains no document, still emit a final document including any comments and directives that would be applied to a subsequent document.\n * @param endOffset - Should be set if `forceDoc` is also set, to set the document range end and to indicate errors correctly.\n */\n *end(forceDoc = false, endOffset = -1) {\n if (this.doc) {\n this.decorate(this.doc, true);\n yield this.doc;\n this.doc = null;\n }\n else if (forceDoc) {\n const opts = Object.assign({ _directives: this.directives }, this.options);\n const doc = new Document.Document(undefined, opts);\n if (this.atDirectives)\n this.onError(endOffset, 'MISSING_CHAR', 'Missing directives-end indicator line');\n doc.range = [0, endOffset, endOffset];\n this.decorate(doc, false);\n yield doc;\n }\n }\n}\n\nexports.Composer = Composer;\n","'use strict';\n\nvar resolveBlockScalar = require('../compose/resolve-block-scalar.js');\nvar resolveFlowScalar = require('../compose/resolve-flow-scalar.js');\nvar errors = require('../errors.js');\nvar stringifyString = require('../stringify/stringifyString.js');\n\nfunction resolveAsScalar(token, strict = true, onError) {\n if (token) {\n const _onError = (pos, code, message) => {\n const offset = typeof pos === 'number' ? pos : Array.isArray(pos) ? pos[0] : pos.offset;\n if (onError)\n onError(offset, code, message);\n else\n throw new errors.YAMLParseError([offset, offset + 1], code, message);\n };\n switch (token.type) {\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar':\n return resolveFlowScalar.resolveFlowScalar(token, strict, _onError);\n case 'block-scalar':\n return resolveBlockScalar.resolveBlockScalar({ options: { strict } }, token, _onError);\n }\n }\n return null;\n}\n/**\n * Create a new scalar token with `value`\n *\n * Values that represent an actual string but may be parsed as a different type should use a `type` other than `'PLAIN'`,\n * as this function does not support any schema operations and won't check for such conflicts.\n *\n * @param value The string representation of the value, which will have its content properly indented.\n * @param context.end Comments and whitespace after the end of the value, or after the block scalar header. If undefined, a newline will be added.\n * @param context.implicitKey Being within an implicit key may affect the resolved type of the token's value.\n * @param context.indent The indent level of the token.\n * @param context.inFlow Is this scalar within a flow collection? This may affect the resolved type of the token's value.\n * @param context.offset The offset position of the token.\n * @param context.type The preferred type of the scalar token. If undefined, the previous type of the `token` will be used, defaulting to `'PLAIN'`.\n */\nfunction createScalarToken(value, context) {\n const { implicitKey = false, indent, inFlow = false, offset = -1, type = 'PLAIN' } = context;\n const source = stringifyString.stringifyString({ type, value }, {\n implicitKey,\n indent: indent > 0 ? ' '.repeat(indent) : '',\n inFlow,\n options: { blockQuote: true, lineWidth: -1 }\n });\n const end = context.end ?? [\n { type: 'newline', offset: -1, indent, source: '\\n' }\n ];\n switch (source[0]) {\n case '|':\n case '>': {\n const he = source.indexOf('\\n');\n const head = source.substring(0, he);\n const body = source.substring(he + 1) + '\\n';\n const props = [\n { type: 'block-scalar-header', offset, indent, source: head }\n ];\n if (!addEndtoBlockProps(props, end))\n props.push({ type: 'newline', offset: -1, indent, source: '\\n' });\n return { type: 'block-scalar', offset, indent, props, source: body };\n }\n case '\"':\n return { type: 'double-quoted-scalar', offset, indent, source, end };\n case \"'\":\n return { type: 'single-quoted-scalar', offset, indent, source, end };\n default:\n return { type: 'scalar', offset, indent, source, end };\n }\n}\n/**\n * Set the value of `token` to the given string `value`, overwriting any previous contents and type that it may have.\n *\n * Best efforts are made to retain any comments previously associated with the `token`,\n * though all contents within a collection's `items` will be overwritten.\n *\n * Values that represent an actual string but may be parsed as a different type should use a `type` other than `'PLAIN'`,\n * as this function does not support any schema operations and won't check for such conflicts.\n *\n * @param token Any token. If it does not include an `indent` value, the value will be stringified as if it were an implicit key.\n * @param value The string representation of the value, which will have its content properly indented.\n * @param context.afterKey In most cases, values after a key should have an additional level of indentation.\n * @param context.implicitKey Being within an implicit key may affect the resolved type of the token's value.\n * @param context.inFlow Being within a flow collection may affect the resolved type of the token's value.\n * @param context.type The preferred type of the scalar token. If undefined, the previous type of the `token` will be used, defaulting to `'PLAIN'`.\n */\nfunction setScalarValue(token, value, context = {}) {\n let { afterKey = false, implicitKey = false, inFlow = false, type } = context;\n let indent = 'indent' in token ? token.indent : null;\n if (afterKey && typeof indent === 'number')\n indent += 2;\n if (!type)\n switch (token.type) {\n case 'single-quoted-scalar':\n type = 'QUOTE_SINGLE';\n break;\n case 'double-quoted-scalar':\n type = 'QUOTE_DOUBLE';\n break;\n case 'block-scalar': {\n const header = token.props[0];\n if (header.type !== 'block-scalar-header')\n throw new Error('Invalid block scalar header');\n type = header.source[0] === '>' ? 'BLOCK_FOLDED' : 'BLOCK_LITERAL';\n break;\n }\n default:\n type = 'PLAIN';\n }\n const source = stringifyString.stringifyString({ type, value }, {\n implicitKey: implicitKey || indent === null,\n indent: indent !== null && indent > 0 ? ' '.repeat(indent) : '',\n inFlow,\n options: { blockQuote: true, lineWidth: -1 }\n });\n switch (source[0]) {\n case '|':\n case '>':\n setBlockScalarValue(token, source);\n break;\n case '\"':\n setFlowScalarValue(token, source, 'double-quoted-scalar');\n break;\n case \"'\":\n setFlowScalarValue(token, source, 'single-quoted-scalar');\n break;\n default:\n setFlowScalarValue(token, source, 'scalar');\n }\n}\nfunction setBlockScalarValue(token, source) {\n const he = source.indexOf('\\n');\n const head = source.substring(0, he);\n const body = source.substring(he + 1) + '\\n';\n if (token.type === 'block-scalar') {\n const header = token.props[0];\n if (header.type !== 'block-scalar-header')\n throw new Error('Invalid block scalar header');\n header.source = head;\n token.source = body;\n }\n else {\n const { offset } = token;\n const indent = 'indent' in token ? token.indent : -1;\n const props = [\n { type: 'block-scalar-header', offset, indent, source: head }\n ];\n if (!addEndtoBlockProps(props, 'end' in token ? token.end : undefined))\n props.push({ type: 'newline', offset: -1, indent, source: '\\n' });\n for (const key of Object.keys(token))\n if (key !== 'type' && key !== 'offset')\n delete token[key];\n Object.assign(token, { type: 'block-scalar', indent, props, source: body });\n }\n}\n/** @returns `true` if last token is a newline */\nfunction addEndtoBlockProps(props, end) {\n if (end)\n for (const st of end)\n switch (st.type) {\n case 'space':\n case 'comment':\n props.push(st);\n break;\n case 'newline':\n props.push(st);\n return true;\n }\n return false;\n}\nfunction setFlowScalarValue(token, source, type) {\n switch (token.type) {\n case 'scalar':\n case 'double-quoted-scalar':\n case 'single-quoted-scalar':\n token.type = type;\n token.source = source;\n break;\n case 'block-scalar': {\n const end = token.props.slice(1);\n let oa = source.length;\n if (token.props[0].type === 'block-scalar-header')\n oa -= token.props[0].source.length;\n for (const tok of end)\n tok.offset += oa;\n delete token.props;\n Object.assign(token, { type, source, end });\n break;\n }\n case 'block-map':\n case 'block-seq': {\n const offset = token.offset + source.length;\n const nl = { type: 'newline', offset, indent: token.indent, source: '\\n' };\n delete token.items;\n Object.assign(token, { type, source, end: [nl] });\n break;\n }\n default: {\n const indent = 'indent' in token ? token.indent : -1;\n const end = 'end' in token && Array.isArray(token.end)\n ? token.end.filter(st => st.type === 'space' ||\n st.type === 'comment' ||\n st.type === 'newline')\n : [];\n for (const key of Object.keys(token))\n if (key !== 'type' && key !== 'offset')\n delete token[key];\n Object.assign(token, { type, indent, source, end });\n }\n }\n}\n\nexports.createScalarToken = createScalarToken;\nexports.resolveAsScalar = resolveAsScalar;\nexports.setScalarValue = setScalarValue;\n","'use strict';\n\n/**\n * Stringify a CST document, token, or collection item\n *\n * Fair warning: This applies no validation whatsoever, and\n * simply concatenates the sources in their logical order.\n */\nconst stringify = (cst) => 'type' in cst ? stringifyToken(cst) : stringifyItem(cst);\nfunction stringifyToken(token) {\n switch (token.type) {\n case 'block-scalar': {\n let res = '';\n for (const tok of token.props)\n res += stringifyToken(tok);\n return res + token.source;\n }\n case 'block-map':\n case 'block-seq': {\n let res = '';\n for (const item of token.items)\n res += stringifyItem(item);\n return res;\n }\n case 'flow-collection': {\n let res = token.start.source;\n for (const item of token.items)\n res += stringifyItem(item);\n for (const st of token.end)\n res += st.source;\n return res;\n }\n case 'document': {\n let res = stringifyItem(token);\n if (token.end)\n for (const st of token.end)\n res += st.source;\n return res;\n }\n default: {\n let res = token.source;\n if ('end' in token && token.end)\n for (const st of token.end)\n res += st.source;\n return res;\n }\n }\n}\nfunction stringifyItem({ start, key, sep, value }) {\n let res = '';\n for (const st of start)\n res += st.source;\n if (key)\n res += stringifyToken(key);\n if (sep)\n for (const st of sep)\n res += st.source;\n if (value)\n res += stringifyToken(value);\n return res;\n}\n\nexports.stringify = stringify;\n","'use strict';\n\nconst BREAK = Symbol('break visit');\nconst SKIP = Symbol('skip children');\nconst REMOVE = Symbol('remove item');\n/**\n * Apply a visitor to a CST document or item.\n *\n * Walks through the tree (depth-first) starting from the root, calling a\n * `visitor` function with two arguments when entering each item:\n * - `item`: The current item, which included the following members:\n * - `start: SourceToken[]` – Source tokens before the key or value,\n * possibly including its anchor or tag.\n * - `key?: Token | null` – Set for pair values. May then be `null`, if\n * the key before the `:` separator is empty.\n * - `sep?: SourceToken[]` – Source tokens between the key and the value,\n * which should include the `:` map value indicator if `value` is set.\n * - `value?: Token` – The value of a sequence item, or of a map pair.\n * - `path`: The steps from the root to the current node, as an array of\n * `['key' | 'value', number]` tuples.\n *\n * The return value of the visitor may be used to control the traversal:\n * - `undefined` (default): Do nothing and continue\n * - `visit.SKIP`: Do not visit the children of this token, continue with\n * next sibling\n * - `visit.BREAK`: Terminate traversal completely\n * - `visit.REMOVE`: Remove the current item, then continue with the next one\n * - `number`: Set the index of the next step. This is useful especially if\n * the index of the current token has changed.\n * - `function`: Define the next visitor for this item. After the original\n * visitor is called on item entry, next visitors are called after handling\n * a non-empty `key` and when exiting the item.\n */\nfunction visit(cst, visitor) {\n if ('type' in cst && cst.type === 'document')\n cst = { start: cst.start, value: cst.value };\n _visit(Object.freeze([]), cst, visitor);\n}\n// Without the `as symbol` casts, TS declares these in the `visit`\n// namespace using `var`, but then complains about that because\n// `unique symbol` must be `const`.\n/** Terminate visit traversal completely */\nvisit.BREAK = BREAK;\n/** Do not visit the children of the current item */\nvisit.SKIP = SKIP;\n/** Remove the current item */\nvisit.REMOVE = REMOVE;\n/** Find the item at `path` from `cst` as the root */\nvisit.itemAtPath = (cst, path) => {\n let item = cst;\n for (const [field, index] of path) {\n const tok = item?.[field];\n if (tok && 'items' in tok) {\n item = tok.items[index];\n }\n else\n return undefined;\n }\n return item;\n};\n/**\n * Get the immediate parent collection of the item at `path` from `cst` as the root.\n *\n * Throws an error if the collection is not found, which should never happen if the item itself exists.\n */\nvisit.parentCollection = (cst, path) => {\n const parent = visit.itemAtPath(cst, path.slice(0, -1));\n const field = path[path.length - 1][0];\n const coll = parent?.[field];\n if (coll && 'items' in coll)\n return coll;\n throw new Error('Parent collection not found');\n};\nfunction _visit(path, item, visitor) {\n let ctrl = visitor(item, path);\n if (typeof ctrl === 'symbol')\n return ctrl;\n for (const field of ['key', 'value']) {\n const token = item[field];\n if (token && 'items' in token) {\n for (let i = 0; i < token.items.length; ++i) {\n const ci = _visit(Object.freeze(path.concat([[field, i]])), token.items[i], visitor);\n if (typeof ci === 'number')\n i = ci - 1;\n else if (ci === BREAK)\n return BREAK;\n else if (ci === REMOVE) {\n token.items.splice(i, 1);\n i -= 1;\n }\n }\n if (typeof ctrl === 'function' && field === 'key')\n ctrl = ctrl(item, path);\n }\n }\n return typeof ctrl === 'function' ? ctrl(item, path) : ctrl;\n}\n\nexports.visit = visit;\n","'use strict';\n\nvar cstScalar = require('./cst-scalar.js');\nvar cstStringify = require('./cst-stringify.js');\nvar cstVisit = require('./cst-visit.js');\n\n/** The byte order mark */\nconst BOM = '\\u{FEFF}';\n/** Start of doc-mode */\nconst DOCUMENT = '\\x02'; // C0: Start of Text\n/** Unexpected end of flow-mode */\nconst FLOW_END = '\\x18'; // C0: Cancel\n/** Next token is a scalar value */\nconst SCALAR = '\\x1f'; // C0: Unit Separator\n/** @returns `true` if `token` is a flow or block collection */\nconst isCollection = (token) => !!token && 'items' in token;\n/** @returns `true` if `token` is a flow or block scalar; not an alias */\nconst isScalar = (token) => !!token &&\n (token.type === 'scalar' ||\n token.type === 'single-quoted-scalar' ||\n token.type === 'double-quoted-scalar' ||\n token.type === 'block-scalar');\n/* istanbul ignore next */\n/** Get a printable representation of a lexer token */\nfunction prettyToken(token) {\n switch (token) {\n case BOM:\n return '<BOM>';\n case DOCUMENT:\n return '<DOC>';\n case FLOW_END:\n return '<FLOW_END>';\n case SCALAR:\n return '<SCALAR>';\n default:\n return JSON.stringify(token);\n }\n}\n/** Identify the type of a lexer token. May return `null` for unknown tokens. */\nfunction tokenType(source) {\n switch (source) {\n case BOM:\n return 'byte-order-mark';\n case DOCUMENT:\n return 'doc-mode';\n case FLOW_END:\n return 'flow-error-end';\n case SCALAR:\n return 'scalar';\n case '---':\n return 'doc-start';\n case '...':\n return 'doc-end';\n case '':\n case '\\n':\n case '\\r\\n':\n return 'newline';\n case '-':\n return 'seq-item-ind';\n case '?':\n return 'explicit-key-ind';\n case ':':\n return 'map-value-ind';\n case '{':\n return 'flow-map-start';\n case '}':\n return 'flow-map-end';\n case '[':\n return 'flow-seq-start';\n case ']':\n return 'flow-seq-end';\n case ',':\n return 'comma';\n }\n switch (source[0]) {\n case ' ':\n case '\\t':\n return 'space';\n case '#':\n return 'comment';\n case '%':\n return 'directive-line';\n case '*':\n return 'alias';\n case '&':\n return 'anchor';\n case '!':\n return 'tag';\n case \"'\":\n return 'single-quoted-scalar';\n case '\"':\n return 'double-quoted-scalar';\n case '|':\n case '>':\n return 'block-scalar-header';\n }\n return null;\n}\n\nexports.createScalarToken = cstScalar.createScalarToken;\nexports.resolveAsScalar = cstScalar.resolveAsScalar;\nexports.setScalarValue = cstScalar.setScalarValue;\nexports.stringify = cstStringify.stringify;\nexports.visit = cstVisit.visit;\nexports.BOM = BOM;\nexports.DOCUMENT = DOCUMENT;\nexports.FLOW_END = FLOW_END;\nexports.SCALAR = SCALAR;\nexports.isCollection = isCollection;\nexports.isScalar = isScalar;\nexports.prettyToken = prettyToken;\nexports.tokenType = tokenType;\n","'use strict';\n\nvar cst = require('./cst.js');\n\n/*\nSTART -> stream\n\nstream\n directive -> line-end -> stream\n indent + line-end -> stream\n [else] -> line-start\n\nline-end\n comment -> line-end\n newline -> .\n input-end -> END\n\nline-start\n doc-start -> doc\n doc-end -> stream\n [else] -> indent -> block-start\n\nblock-start\n seq-item-start -> block-start\n explicit-key-start -> block-start\n map-value-start -> block-start\n [else] -> doc\n\ndoc\n line-end -> line-start\n spaces -> doc\n anchor -> doc\n tag -> doc\n flow-start -> flow -> doc\n flow-end -> error -> doc\n seq-item-start -> error -> doc\n explicit-key-start -> error -> doc\n map-value-start -> doc\n alias -> doc\n quote-start -> quoted-scalar -> doc\n block-scalar-header -> line-end -> block-scalar(min) -> line-start\n [else] -> plain-scalar(false, min) -> doc\n\nflow\n line-end -> flow\n spaces -> flow\n anchor -> flow\n tag -> flow\n flow-start -> flow -> flow\n flow-end -> .\n seq-item-start -> error -> flow\n explicit-key-start -> flow\n map-value-start -> flow\n alias -> flow\n quote-start -> quoted-scalar -> flow\n comma -> flow\n [else] -> plain-scalar(true, 0) -> flow\n\nquoted-scalar\n quote-end -> .\n [else] -> quoted-scalar\n\nblock-scalar(min)\n newline + peek(indent < min) -> .\n [else] -> block-scalar(min)\n\nplain-scalar(is-flow, min)\n scalar-end(is-flow) -> .\n peek(newline + (indent < min)) -> .\n [else] -> plain-scalar(min)\n*/\nfunction isEmpty(ch) {\n switch (ch) {\n case undefined:\n case ' ':\n case '\\n':\n case '\\r':\n case '\\t':\n return true;\n default:\n return false;\n }\n}\nconst hexDigits = new Set('0123456789ABCDEFabcdef');\nconst tagChars = new Set(\"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-#;/?:@&=+$_.!~*'()\");\nconst flowIndicatorChars = new Set(',[]{}');\nconst invalidAnchorChars = new Set(' ,[]{}\\n\\r\\t');\nconst isNotAnchorChar = (ch) => !ch || invalidAnchorChars.has(ch);\n/**\n * Splits an input string into lexical tokens, i.e. smaller strings that are\n * easily identifiable by `tokens.tokenType()`.\n *\n * Lexing starts always in a \"stream\" context. Incomplete input may be buffered\n * until a complete token can be emitted.\n *\n * In addition to slices of the original input, the following control characters\n * may also be emitted:\n *\n * - `\\x02` (Start of Text): A document starts with the next token\n * - `\\x18` (Cancel): Unexpected end of flow-mode (indicates an error)\n * - `\\x1f` (Unit Separator): Next token is a scalar value\n * - `\\u{FEFF}` (Byte order mark): Emitted separately outside documents\n */\nclass Lexer {\n constructor() {\n /**\n * Flag indicating whether the end of the current buffer marks the end of\n * all input\n */\n this.atEnd = false;\n /**\n * Explicit indent set in block scalar header, as an offset from the current\n * minimum indent, so e.g. set to 1 from a header `|2+`. Set to -1 if not\n * explicitly set.\n */\n this.blockScalarIndent = -1;\n /**\n * Block scalars that include a + (keep) chomping indicator in their header\n * include trailing empty lines, which are otherwise excluded from the\n * scalar's contents.\n */\n this.blockScalarKeep = false;\n /** Current input */\n this.buffer = '';\n /**\n * Flag noting whether the map value indicator : can immediately follow this\n * node within a flow context.\n */\n this.flowKey = false;\n /** Count of surrounding flow collection levels. */\n this.flowLevel = 0;\n /**\n * Minimum level of indentation required for next lines to be parsed as a\n * part of the current scalar value.\n */\n this.indentNext = 0;\n /** Indentation level of the current line. */\n this.indentValue = 0;\n /** Position of the next \\n character. */\n this.lineEndPos = null;\n /** Stores the state of the lexer if reaching the end of incpomplete input */\n this.next = null;\n /** A pointer to `buffer`; the current position of the lexer. */\n this.pos = 0;\n }\n /**\n * Generate YAML tokens from the `source` string. If `incomplete`,\n * a part of the last line may be left as a buffer for the next call.\n *\n * @returns A generator of lexical tokens\n */\n *lex(source, incomplete = false) {\n if (source) {\n if (typeof source !== 'string')\n throw TypeError('source is not a string');\n this.buffer = this.buffer ? this.buffer + source : source;\n this.lineEndPos = null;\n }\n this.atEnd = !incomplete;\n let next = this.next ?? 'stream';\n while (next && (incomplete || this.hasChars(1)))\n next = yield* this.parseNext(next);\n }\n atLineEnd() {\n let i = this.pos;\n let ch = this.buffer[i];\n while (ch === ' ' || ch === '\\t')\n ch = this.buffer[++i];\n if (!ch || ch === '#' || ch === '\\n')\n return true;\n if (ch === '\\r')\n return this.buffer[i + 1] === '\\n';\n return false;\n }\n charAt(n) {\n return this.buffer[this.pos + n];\n }\n continueScalar(offset) {\n let ch = this.buffer[offset];\n if (this.indentNext > 0) {\n let indent = 0;\n while (ch === ' ')\n ch = this.buffer[++indent + offset];\n if (ch === '\\r') {\n const next = this.buffer[indent + offset + 1];\n if (next === '\\n' || (!next && !this.atEnd))\n return offset + indent + 1;\n }\n return ch === '\\n' || indent >= this.indentNext || (!ch && !this.atEnd)\n ? offset + indent\n : -1;\n }\n if (ch === '-' || ch === '.') {\n const dt = this.buffer.substr(offset, 3);\n if ((dt === '---' || dt === '...') && isEmpty(this.buffer[offset + 3]))\n return -1;\n }\n return offset;\n }\n getLine() {\n let end = this.lineEndPos;\n if (typeof end !== 'number' || (end !== -1 && end < this.pos)) {\n end = this.buffer.indexOf('\\n', this.pos);\n this.lineEndPos = end;\n }\n if (end === -1)\n return this.atEnd ? this.buffer.substring(this.pos) : null;\n if (this.buffer[end - 1] === '\\r')\n end -= 1;\n return this.buffer.substring(this.pos, end);\n }\n hasChars(n) {\n return this.pos + n <= this.buffer.length;\n }\n setNext(state) {\n this.buffer = this.buffer.substring(this.pos);\n this.pos = 0;\n this.lineEndPos = null;\n this.next = state;\n return null;\n }\n peek(n) {\n return this.buffer.substr(this.pos, n);\n }\n *parseNext(next) {\n switch (next) {\n case 'stream':\n return yield* this.parseStream();\n case 'line-start':\n return yield* this.parseLineStart();\n case 'block-start':\n return yield* this.parseBlockStart();\n case 'doc':\n return yield* this.parseDocument();\n case 'flow':\n return yield* this.parseFlowCollection();\n case 'quoted-scalar':\n return yield* this.parseQuotedScalar();\n case 'block-scalar':\n return yield* this.parseBlockScalar();\n case 'plain-scalar':\n return yield* this.parsePlainScalar();\n }\n }\n *parseStream() {\n let line = this.getLine();\n if (line === null)\n return this.setNext('stream');\n if (line[0] === cst.BOM) {\n yield* this.pushCount(1);\n line = line.substring(1);\n }\n if (line[0] === '%') {\n let dirEnd = line.length;\n let cs = line.indexOf('#');\n while (cs !== -1) {\n const ch = line[cs - 1];\n if (ch === ' ' || ch === '\\t') {\n dirEnd = cs - 1;\n break;\n }\n else {\n cs = line.indexOf('#', cs + 1);\n }\n }\n while (true) {\n const ch = line[dirEnd - 1];\n if (ch === ' ' || ch === '\\t')\n dirEnd -= 1;\n else\n break;\n }\n const n = (yield* this.pushCount(dirEnd)) + (yield* this.pushSpaces(true));\n yield* this.pushCount(line.length - n); // possible comment\n this.pushNewline();\n return 'stream';\n }\n if (this.atLineEnd()) {\n const sp = yield* this.pushSpaces(true);\n yield* this.pushCount(line.length - sp);\n yield* this.pushNewline();\n return 'stream';\n }\n yield cst.DOCUMENT;\n return yield* this.parseLineStart();\n }\n *parseLineStart() {\n const ch = this.charAt(0);\n if (!ch && !this.atEnd)\n return this.setNext('line-start');\n if (ch === '-' || ch === '.') {\n if (!this.atEnd && !this.hasChars(4))\n return this.setNext('line-start');\n const s = this.peek(3);\n if ((s === '---' || s === '...') && isEmpty(this.charAt(3))) {\n yield* this.pushCount(3);\n this.indentValue = 0;\n this.indentNext = 0;\n return s === '---' ? 'doc' : 'stream';\n }\n }\n this.indentValue = yield* this.pushSpaces(false);\n if (this.indentNext > this.indentValue && !isEmpty(this.charAt(1)))\n this.indentNext = this.indentValue;\n return yield* this.parseBlockStart();\n }\n *parseBlockStart() {\n const [ch0, ch1] = this.peek(2);\n if (!ch1 && !this.atEnd)\n return this.setNext('block-start');\n if ((ch0 === '-' || ch0 === '?' || ch0 === ':') && isEmpty(ch1)) {\n const n = (yield* this.pushCount(1)) + (yield* this.pushSpaces(true));\n this.indentNext = this.indentValue + 1;\n this.indentValue += n;\n return yield* this.parseBlockStart();\n }\n return 'doc';\n }\n *parseDocument() {\n yield* this.pushSpaces(true);\n const line = this.getLine();\n if (line === null)\n return this.setNext('doc');\n let n = yield* this.pushIndicators();\n switch (line[n]) {\n case '#':\n yield* this.pushCount(line.length - n);\n // fallthrough\n case undefined:\n yield* this.pushNewline();\n return yield* this.parseLineStart();\n case '{':\n case '[':\n yield* this.pushCount(1);\n this.flowKey = false;\n this.flowLevel = 1;\n return 'flow';\n case '}':\n case ']':\n // this is an error\n yield* this.pushCount(1);\n return 'doc';\n case '*':\n yield* this.pushUntil(isNotAnchorChar);\n return 'doc';\n case '\"':\n case \"'\":\n return yield* this.parseQuotedScalar();\n case '|':\n case '>':\n n += yield* this.parseBlockScalarHeader();\n n += yield* this.pushSpaces(true);\n yield* this.pushCount(line.length - n);\n yield* this.pushNewline();\n return yield* this.parseBlockScalar();\n default:\n return yield* this.parsePlainScalar();\n }\n }\n *parseFlowCollection() {\n let nl, sp;\n let indent = -1;\n do {\n nl = yield* this.pushNewline();\n if (nl > 0) {\n sp = yield* this.pushSpaces(false);\n this.indentValue = indent = sp;\n }\n else {\n sp = 0;\n }\n sp += yield* this.pushSpaces(true);\n } while (nl + sp > 0);\n const line = this.getLine();\n if (line === null)\n return this.setNext('flow');\n if ((indent !== -1 && indent < this.indentNext && line[0] !== '#') ||\n (indent === 0 &&\n (line.startsWith('---') || line.startsWith('...')) &&\n isEmpty(line[3]))) {\n // Allowing for the terminal ] or } at the same (rather than greater)\n // indent level as the initial [ or { is technically invalid, but\n // failing here would be surprising to users.\n const atFlowEndMarker = indent === this.indentNext - 1 &&\n this.flowLevel === 1 &&\n (line[0] === ']' || line[0] === '}');\n if (!atFlowEndMarker) {\n // this is an error\n this.flowLevel = 0;\n yield cst.FLOW_END;\n return yield* this.parseLineStart();\n }\n }\n let n = 0;\n while (line[n] === ',') {\n n += yield* this.pushCount(1);\n n += yield* this.pushSpaces(true);\n this.flowKey = false;\n }\n n += yield* this.pushIndicators();\n switch (line[n]) {\n case undefined:\n return 'flow';\n case '#':\n yield* this.pushCount(line.length - n);\n return 'flow';\n case '{':\n case '[':\n yield* this.pushCount(1);\n this.flowKey = false;\n this.flowLevel += 1;\n return 'flow';\n case '}':\n case ']':\n yield* this.pushCount(1);\n this.flowKey = true;\n this.flowLevel -= 1;\n return this.flowLevel ? 'flow' : 'doc';\n case '*':\n yield* this.pushUntil(isNotAnchorChar);\n return 'flow';\n case '\"':\n case \"'\":\n this.flowKey = true;\n return yield* this.parseQuotedScalar();\n case ':': {\n const next = this.charAt(1);\n if (this.flowKey || isEmpty(next) || next === ',') {\n this.flowKey = false;\n yield* this.pushCount(1);\n yield* this.pushSpaces(true);\n return 'flow';\n }\n }\n // fallthrough\n default:\n this.flowKey = false;\n return yield* this.parsePlainScalar();\n }\n }\n *parseQuotedScalar() {\n const quote = this.charAt(0);\n let end = this.buffer.indexOf(quote, this.pos + 1);\n if (quote === \"'\") {\n while (end !== -1 && this.buffer[end + 1] === \"'\")\n end = this.buffer.indexOf(\"'\", end + 2);\n }\n else {\n // double-quote\n while (end !== -1) {\n let n = 0;\n while (this.buffer[end - 1 - n] === '\\\\')\n n += 1;\n if (n % 2 === 0)\n break;\n end = this.buffer.indexOf('\"', end + 1);\n }\n }\n // Only looking for newlines within the quotes\n const qb = this.buffer.substring(0, end);\n let nl = qb.indexOf('\\n', this.pos);\n if (nl !== -1) {\n while (nl !== -1) {\n const cs = this.continueScalar(nl + 1);\n if (cs === -1)\n break;\n nl = qb.indexOf('\\n', cs);\n }\n if (nl !== -1) {\n // this is an error caused by an unexpected unindent\n end = nl - (qb[nl - 1] === '\\r' ? 2 : 1);\n }\n }\n if (end === -1) {\n if (!this.atEnd)\n return this.setNext('quoted-scalar');\n end = this.buffer.length;\n }\n yield* this.pushToIndex(end + 1, false);\n return this.flowLevel ? 'flow' : 'doc';\n }\n *parseBlockScalarHeader() {\n this.blockScalarIndent = -1;\n this.blockScalarKeep = false;\n let i = this.pos;\n while (true) {\n const ch = this.buffer[++i];\n if (ch === '+')\n this.blockScalarKeep = true;\n else if (ch > '0' && ch <= '9')\n this.blockScalarIndent = Number(ch) - 1;\n else if (ch !== '-')\n break;\n }\n return yield* this.pushUntil(ch => isEmpty(ch) || ch === '#');\n }\n *parseBlockScalar() {\n let nl = this.pos - 1; // may be -1 if this.pos === 0\n let indent = 0;\n let ch;\n loop: for (let i = this.pos; (ch = this.buffer[i]); ++i) {\n switch (ch) {\n case ' ':\n indent += 1;\n break;\n case '\\n':\n nl = i;\n indent = 0;\n break;\n case '\\r': {\n const next = this.buffer[i + 1];\n if (!next && !this.atEnd)\n return this.setNext('block-scalar');\n if (next === '\\n')\n break;\n } // fallthrough\n default:\n break loop;\n }\n }\n if (!ch && !this.atEnd)\n return this.setNext('block-scalar');\n if (indent >= this.indentNext) {\n if (this.blockScalarIndent === -1)\n this.indentNext = indent;\n else {\n this.indentNext =\n this.blockScalarIndent + (this.indentNext === 0 ? 1 : this.indentNext);\n }\n do {\n const cs = this.continueScalar(nl + 1);\n if (cs === -1)\n break;\n nl = this.buffer.indexOf('\\n', cs);\n } while (nl !== -1);\n if (nl === -1) {\n if (!this.atEnd)\n return this.setNext('block-scalar');\n nl = this.buffer.length;\n }\n }\n // Trailing insufficiently indented tabs are invalid.\n // To catch that during parsing, we include them in the block scalar value.\n let i = nl + 1;\n ch = this.buffer[i];\n while (ch === ' ')\n ch = this.buffer[++i];\n if (ch === '\\t') {\n while (ch === '\\t' || ch === ' ' || ch === '\\r' || ch === '\\n')\n ch = this.buffer[++i];\n nl = i - 1;\n }\n else if (!this.blockScalarKeep) {\n do {\n let i = nl - 1;\n let ch = this.buffer[i];\n if (ch === '\\r')\n ch = this.buffer[--i];\n const lastChar = i; // Drop the line if last char not more indented\n while (ch === ' ')\n ch = this.buffer[--i];\n if (ch === '\\n' && i >= this.pos && i + 1 + indent > lastChar)\n nl = i;\n else\n break;\n } while (true);\n }\n yield cst.SCALAR;\n yield* this.pushToIndex(nl + 1, true);\n return yield* this.parseLineStart();\n }\n *parsePlainScalar() {\n const inFlow = this.flowLevel > 0;\n let end = this.pos - 1;\n let i = this.pos - 1;\n let ch;\n while ((ch = this.buffer[++i])) {\n if (ch === ':') {\n const next = this.buffer[i + 1];\n if (isEmpty(next) || (inFlow && flowIndicatorChars.has(next)))\n break;\n end = i;\n }\n else if (isEmpty(ch)) {\n let next = this.buffer[i + 1];\n if (ch === '\\r') {\n if (next === '\\n') {\n i += 1;\n ch = '\\n';\n next = this.buffer[i + 1];\n }\n else\n end = i;\n }\n if (next === '#' || (inFlow && flowIndicatorChars.has(next)))\n break;\n if (ch === '\\n') {\n const cs = this.continueScalar(i + 1);\n if (cs === -1)\n break;\n i = Math.max(i, cs - 2); // to advance, but still account for ' #'\n }\n }\n else {\n if (inFlow && flowIndicatorChars.has(ch))\n break;\n end = i;\n }\n }\n if (!ch && !this.atEnd)\n return this.setNext('plain-scalar');\n yield cst.SCALAR;\n yield* this.pushToIndex(end + 1, true);\n return inFlow ? 'flow' : 'doc';\n }\n *pushCount(n) {\n if (n > 0) {\n yield this.buffer.substr(this.pos, n);\n this.pos += n;\n return n;\n }\n return 0;\n }\n *pushToIndex(i, allowEmpty) {\n const s = this.buffer.slice(this.pos, i);\n if (s) {\n yield s;\n this.pos += s.length;\n return s.length;\n }\n else if (allowEmpty)\n yield '';\n return 0;\n }\n *pushIndicators() {\n switch (this.charAt(0)) {\n case '!':\n return ((yield* this.pushTag()) +\n (yield* this.pushSpaces(true)) +\n (yield* this.pushIndicators()));\n case '&':\n return ((yield* this.pushUntil(isNotAnchorChar)) +\n (yield* this.pushSpaces(true)) +\n (yield* this.pushIndicators()));\n case '-': // this is an error\n case '?': // this is an error outside flow collections\n case ':': {\n const inFlow = this.flowLevel > 0;\n const ch1 = this.charAt(1);\n if (isEmpty(ch1) || (inFlow && flowIndicatorChars.has(ch1))) {\n if (!inFlow)\n this.indentNext = this.indentValue + 1;\n else if (this.flowKey)\n this.flowKey = false;\n return ((yield* this.pushCount(1)) +\n (yield* this.pushSpaces(true)) +\n (yield* this.pushIndicators()));\n }\n }\n }\n return 0;\n }\n *pushTag() {\n if (this.charAt(1) === '<') {\n let i = this.pos + 2;\n let ch = this.buffer[i];\n while (!isEmpty(ch) && ch !== '>')\n ch = this.buffer[++i];\n return yield* this.pushToIndex(ch === '>' ? i + 1 : i, false);\n }\n else {\n let i = this.pos + 1;\n let ch = this.buffer[i];\n while (ch) {\n if (tagChars.has(ch))\n ch = this.buffer[++i];\n else if (ch === '%' &&\n hexDigits.has(this.buffer[i + 1]) &&\n hexDigits.has(this.buffer[i + 2])) {\n ch = this.buffer[(i += 3)];\n }\n else\n break;\n }\n return yield* this.pushToIndex(i, false);\n }\n }\n *pushNewline() {\n const ch = this.buffer[this.pos];\n if (ch === '\\n')\n return yield* this.pushCount(1);\n else if (ch === '\\r' && this.charAt(1) === '\\n')\n return yield* this.pushCount(2);\n else\n return 0;\n }\n *pushSpaces(allowTabs) {\n let i = this.pos - 1;\n let ch;\n do {\n ch = this.buffer[++i];\n } while (ch === ' ' || (allowTabs && ch === '\\t'));\n const n = i - this.pos;\n if (n > 0) {\n yield this.buffer.substr(this.pos, n);\n this.pos = i;\n }\n return n;\n }\n *pushUntil(test) {\n let i = this.pos;\n let ch = this.buffer[i];\n while (!test(ch))\n ch = this.buffer[++i];\n return yield* this.pushToIndex(i, false);\n }\n}\n\nexports.Lexer = Lexer;\n","'use strict';\n\n/**\n * Tracks newlines during parsing in order to provide an efficient API for\n * determining the one-indexed `{ line, col }` position for any offset\n * within the input.\n */\nclass LineCounter {\n constructor() {\n this.lineStarts = [];\n /**\n * Should be called in ascending order. Otherwise, call\n * `lineCounter.lineStarts.sort()` before calling `linePos()`.\n */\n this.addNewLine = (offset) => this.lineStarts.push(offset);\n /**\n * Performs a binary search and returns the 1-indexed { line, col }\n * position of `offset`. If `line === 0`, `addNewLine` has never been\n * called or `offset` is before the first known newline.\n */\n this.linePos = (offset) => {\n let low = 0;\n let high = this.lineStarts.length;\n while (low < high) {\n const mid = (low + high) >> 1; // Math.floor((low + high) / 2)\n if (this.lineStarts[mid] < offset)\n low = mid + 1;\n else\n high = mid;\n }\n if (this.lineStarts[low] === offset)\n return { line: low + 1, col: 1 };\n if (low === 0)\n return { line: 0, col: offset };\n const start = this.lineStarts[low - 1];\n return { line: low, col: offset - start + 1 };\n };\n }\n}\n\nexports.LineCounter = LineCounter;\n","'use strict';\n\nvar node_process = require('process');\nvar cst = require('./cst.js');\nvar lexer = require('./lexer.js');\n\nfunction includesToken(list, type) {\n for (let i = 0; i < list.length; ++i)\n if (list[i].type === type)\n return true;\n return false;\n}\nfunction findNonEmptyIndex(list) {\n for (let i = 0; i < list.length; ++i) {\n switch (list[i].type) {\n case 'space':\n case 'comment':\n case 'newline':\n break;\n default:\n return i;\n }\n }\n return -1;\n}\nfunction isFlowToken(token) {\n switch (token?.type) {\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar':\n case 'flow-collection':\n return true;\n default:\n return false;\n }\n}\nfunction getPrevProps(parent) {\n switch (parent.type) {\n case 'document':\n return parent.start;\n case 'block-map': {\n const it = parent.items[parent.items.length - 1];\n return it.sep ?? it.start;\n }\n case 'block-seq':\n return parent.items[parent.items.length - 1].start;\n /* istanbul ignore next should not happen */\n default:\n return [];\n }\n}\n/** Note: May modify input array */\nfunction getFirstKeyStartProps(prev) {\n if (prev.length === 0)\n return [];\n let i = prev.length;\n loop: while (--i >= 0) {\n switch (prev[i].type) {\n case 'doc-start':\n case 'explicit-key-ind':\n case 'map-value-ind':\n case 'seq-item-ind':\n case 'newline':\n break loop;\n }\n }\n while (prev[++i]?.type === 'space') {\n /* loop */\n }\n return prev.splice(i, prev.length);\n}\nfunction fixFlowSeqItems(fc) {\n if (fc.start.type === 'flow-seq-start') {\n for (const it of fc.items) {\n if (it.sep &&\n !it.value &&\n !includesToken(it.start, 'explicit-key-ind') &&\n !includesToken(it.sep, 'map-value-ind')) {\n if (it.key)\n it.value = it.key;\n delete it.key;\n if (isFlowToken(it.value)) {\n if (it.value.end)\n Array.prototype.push.apply(it.value.end, it.sep);\n else\n it.value.end = it.sep;\n }\n else\n Array.prototype.push.apply(it.start, it.sep);\n delete it.sep;\n }\n }\n }\n}\n/**\n * A YAML concrete syntax tree (CST) parser\n *\n * ```ts\n * const src: string = ...\n * for (const token of new Parser().parse(src)) {\n * // token: Token\n * }\n * ```\n *\n * To use the parser with a user-provided lexer:\n *\n * ```ts\n * function* parse(source: string, lexer: Lexer) {\n * const parser = new Parser()\n * for (const lexeme of lexer.lex(source))\n * yield* parser.next(lexeme)\n * yield* parser.end()\n * }\n *\n * const src: string = ...\n * const lexer = new Lexer()\n * for (const token of parse(src, lexer)) {\n * // token: Token\n * }\n * ```\n */\nclass Parser {\n /**\n * @param onNewLine - If defined, called separately with the start position of\n * each new line (in `parse()`, including the start of input).\n */\n constructor(onNewLine) {\n /** If true, space and sequence indicators count as indentation */\n this.atNewLine = true;\n /** If true, next token is a scalar value */\n this.atScalar = false;\n /** Current indentation level */\n this.indent = 0;\n /** Current offset since the start of parsing */\n this.offset = 0;\n /** On the same line with a block map key */\n this.onKeyLine = false;\n /** Top indicates the node that's currently being built */\n this.stack = [];\n /** The source of the current token, set in parse() */\n this.source = '';\n /** The type of the current token, set in parse() */\n this.type = '';\n // Must be defined after `next()`\n this.lexer = new lexer.Lexer();\n this.onNewLine = onNewLine;\n }\n /**\n * Parse `source` as a YAML stream.\n * If `incomplete`, a part of the last line may be left as a buffer for the next call.\n *\n * Errors are not thrown, but yielded as `{ type: 'error', message }` tokens.\n *\n * @returns A generator of tokens representing each directive, document, and other structure.\n */\n *parse(source, incomplete = false) {\n if (this.onNewLine && this.offset === 0)\n this.onNewLine(0);\n for (const lexeme of this.lexer.lex(source, incomplete))\n yield* this.next(lexeme);\n if (!incomplete)\n yield* this.end();\n }\n /**\n * Advance the parser by the `source` of one lexical token.\n */\n *next(source) {\n this.source = source;\n if (node_process.env.LOG_TOKENS)\n console.log('|', cst.prettyToken(source));\n if (this.atScalar) {\n this.atScalar = false;\n yield* this.step();\n this.offset += source.length;\n return;\n }\n const type = cst.tokenType(source);\n if (!type) {\n const message = `Not a YAML token: ${source}`;\n yield* this.pop({ type: 'error', offset: this.offset, message, source });\n this.offset += source.length;\n }\n else if (type === 'scalar') {\n this.atNewLine = false;\n this.atScalar = true;\n this.type = 'scalar';\n }\n else {\n this.type = type;\n yield* this.step();\n switch (type) {\n case 'newline':\n this.atNewLine = true;\n this.indent = 0;\n if (this.onNewLine)\n this.onNewLine(this.offset + source.length);\n break;\n case 'space':\n if (this.atNewLine && source[0] === ' ')\n this.indent += source.length;\n break;\n case 'explicit-key-ind':\n case 'map-value-ind':\n case 'seq-item-ind':\n if (this.atNewLine)\n this.indent += source.length;\n break;\n case 'doc-mode':\n case 'flow-error-end':\n return;\n default:\n this.atNewLine = false;\n }\n this.offset += source.length;\n }\n }\n /** Call at end of input to push out any remaining constructions */\n *end() {\n while (this.stack.length > 0)\n yield* this.pop();\n }\n get sourceToken() {\n const st = {\n type: this.type,\n offset: this.offset,\n indent: this.indent,\n source: this.source\n };\n return st;\n }\n *step() {\n const top = this.peek(1);\n if (this.type === 'doc-end' && top?.type !== 'doc-end') {\n while (this.stack.length > 0)\n yield* this.pop();\n this.stack.push({\n type: 'doc-end',\n offset: this.offset,\n source: this.source\n });\n return;\n }\n if (!top)\n return yield* this.stream();\n switch (top.type) {\n case 'document':\n return yield* this.document(top);\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar':\n return yield* this.scalar(top);\n case 'block-scalar':\n return yield* this.blockScalar(top);\n case 'block-map':\n return yield* this.blockMap(top);\n case 'block-seq':\n return yield* this.blockSequence(top);\n case 'flow-collection':\n return yield* this.flowCollection(top);\n case 'doc-end':\n return yield* this.documentEnd(top);\n }\n /* istanbul ignore next should not happen */\n yield* this.pop();\n }\n peek(n) {\n return this.stack[this.stack.length - n];\n }\n *pop(error) {\n const token = error ?? this.stack.pop();\n /* istanbul ignore if should not happen */\n if (!token) {\n const message = 'Tried to pop an empty stack';\n yield { type: 'error', offset: this.offset, source: '', message };\n }\n else if (this.stack.length === 0) {\n yield token;\n }\n else {\n const top = this.peek(1);\n if (token.type === 'block-scalar') {\n // Block scalars use their parent rather than header indent\n token.indent = 'indent' in top ? top.indent : 0;\n }\n else if (token.type === 'flow-collection' && top.type === 'document') {\n // Ignore all indent for top-level flow collections\n token.indent = 0;\n }\n if (token.type === 'flow-collection')\n fixFlowSeqItems(token);\n switch (top.type) {\n case 'document':\n top.value = token;\n break;\n case 'block-scalar':\n top.props.push(token); // error\n break;\n case 'block-map': {\n const it = top.items[top.items.length - 1];\n if (it.value) {\n top.items.push({ start: [], key: token, sep: [] });\n this.onKeyLine = true;\n return;\n }\n else if (it.sep) {\n it.value = token;\n }\n else {\n Object.assign(it, { key: token, sep: [] });\n this.onKeyLine = !it.explicitKey;\n return;\n }\n break;\n }\n case 'block-seq': {\n const it = top.items[top.items.length - 1];\n if (it.value)\n top.items.push({ start: [], value: token });\n else\n it.value = token;\n break;\n }\n case 'flow-collection': {\n const it = top.items[top.items.length - 1];\n if (!it || it.value)\n top.items.push({ start: [], key: token, sep: [] });\n else if (it.sep)\n it.value = token;\n else\n Object.assign(it, { key: token, sep: [] });\n return;\n }\n /* istanbul ignore next should not happen */\n default:\n yield* this.pop();\n yield* this.pop(token);\n }\n if ((top.type === 'document' ||\n top.type === 'block-map' ||\n top.type === 'block-seq') &&\n (token.type === 'block-map' || token.type === 'block-seq')) {\n const last = token.items[token.items.length - 1];\n if (last &&\n !last.sep &&\n !last.value &&\n last.start.length > 0 &&\n findNonEmptyIndex(last.start) === -1 &&\n (token.indent === 0 ||\n last.start.every(st => st.type !== 'comment' || st.indent < token.indent))) {\n if (top.type === 'document')\n top.end = last.start;\n else\n top.items.push({ start: last.start });\n token.items.splice(-1, 1);\n }\n }\n }\n }\n *stream() {\n switch (this.type) {\n case 'directive-line':\n yield { type: 'directive', offset: this.offset, source: this.source };\n return;\n case 'byte-order-mark':\n case 'space':\n case 'comment':\n case 'newline':\n yield this.sourceToken;\n return;\n case 'doc-mode':\n case 'doc-start': {\n const doc = {\n type: 'document',\n offset: this.offset,\n start: []\n };\n if (this.type === 'doc-start')\n doc.start.push(this.sourceToken);\n this.stack.push(doc);\n return;\n }\n }\n yield {\n type: 'error',\n offset: this.offset,\n message: `Unexpected ${this.type} token in YAML stream`,\n source: this.source\n };\n }\n *document(doc) {\n if (doc.value)\n return yield* this.lineEnd(doc);\n switch (this.type) {\n case 'doc-start': {\n if (findNonEmptyIndex(doc.start) !== -1) {\n yield* this.pop();\n yield* this.step();\n }\n else\n doc.start.push(this.sourceToken);\n return;\n }\n case 'anchor':\n case 'tag':\n case 'space':\n case 'comment':\n case 'newline':\n doc.start.push(this.sourceToken);\n return;\n }\n const bv = this.startBlockValue(doc);\n if (bv)\n this.stack.push(bv);\n else {\n yield {\n type: 'error',\n offset: this.offset,\n message: `Unexpected ${this.type} token in YAML document`,\n source: this.source\n };\n }\n }\n *scalar(scalar) {\n if (this.type === 'map-value-ind') {\n const prev = getPrevProps(this.peek(2));\n const start = getFirstKeyStartProps(prev);\n let sep;\n if (scalar.end) {\n sep = scalar.end;\n sep.push(this.sourceToken);\n delete scalar.end;\n }\n else\n sep = [this.sourceToken];\n const map = {\n type: 'block-map',\n offset: scalar.offset,\n indent: scalar.indent,\n items: [{ start, key: scalar, sep }]\n };\n this.onKeyLine = true;\n this.stack[this.stack.length - 1] = map;\n }\n else\n yield* this.lineEnd(scalar);\n }\n *blockScalar(scalar) {\n switch (this.type) {\n case 'space':\n case 'comment':\n case 'newline':\n scalar.props.push(this.sourceToken);\n return;\n case 'scalar':\n scalar.source = this.source;\n // block-scalar source includes trailing newline\n this.atNewLine = true;\n this.indent = 0;\n if (this.onNewLine) {\n let nl = this.source.indexOf('\\n') + 1;\n while (nl !== 0) {\n this.onNewLine(this.offset + nl);\n nl = this.source.indexOf('\\n', nl) + 1;\n }\n }\n yield* this.pop();\n break;\n /* istanbul ignore next should not happen */\n default:\n yield* this.pop();\n yield* this.step();\n }\n }\n *blockMap(map) {\n const it = map.items[map.items.length - 1];\n // it.sep is true-ish if pair already has key or : separator\n switch (this.type) {\n case 'newline':\n this.onKeyLine = false;\n if (it.value) {\n const end = 'end' in it.value ? it.value.end : undefined;\n const last = Array.isArray(end) ? end[end.length - 1] : undefined;\n if (last?.type === 'comment')\n end?.push(this.sourceToken);\n else\n map.items.push({ start: [this.sourceToken] });\n }\n else if (it.sep) {\n it.sep.push(this.sourceToken);\n }\n else {\n it.start.push(this.sourceToken);\n }\n return;\n case 'space':\n case 'comment':\n if (it.value) {\n map.items.push({ start: [this.sourceToken] });\n }\n else if (it.sep) {\n it.sep.push(this.sourceToken);\n }\n else {\n if (this.atIndentedComment(it.start, map.indent)) {\n const prev = map.items[map.items.length - 2];\n const end = prev?.value?.end;\n if (Array.isArray(end)) {\n Array.prototype.push.apply(end, it.start);\n end.push(this.sourceToken);\n map.items.pop();\n return;\n }\n }\n it.start.push(this.sourceToken);\n }\n return;\n }\n if (this.indent >= map.indent) {\n const atMapIndent = !this.onKeyLine && this.indent === map.indent;\n const atNextItem = atMapIndent &&\n (it.sep || it.explicitKey) &&\n this.type !== 'seq-item-ind';\n // For empty nodes, assign newline-separated not indented empty tokens to following node\n let start = [];\n if (atNextItem && it.sep && !it.value) {\n const nl = [];\n for (let i = 0; i < it.sep.length; ++i) {\n const st = it.sep[i];\n switch (st.type) {\n case 'newline':\n nl.push(i);\n break;\n case 'space':\n break;\n case 'comment':\n if (st.indent > map.indent)\n nl.length = 0;\n break;\n default:\n nl.length = 0;\n }\n }\n if (nl.length >= 2)\n start = it.sep.splice(nl[1]);\n }\n switch (this.type) {\n case 'anchor':\n case 'tag':\n if (atNextItem || it.value) {\n start.push(this.sourceToken);\n map.items.push({ start });\n this.onKeyLine = true;\n }\n else if (it.sep) {\n it.sep.push(this.sourceToken);\n }\n else {\n it.start.push(this.sourceToken);\n }\n return;\n case 'explicit-key-ind':\n if (!it.sep && !it.explicitKey) {\n it.start.push(this.sourceToken);\n it.explicitKey = true;\n }\n else if (atNextItem || it.value) {\n start.push(this.sourceToken);\n map.items.push({ start, explicitKey: true });\n }\n else {\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start: [this.sourceToken], explicitKey: true }]\n });\n }\n this.onKeyLine = true;\n return;\n case 'map-value-ind':\n if (it.explicitKey) {\n if (!it.sep) {\n if (includesToken(it.start, 'newline')) {\n Object.assign(it, { key: null, sep: [this.sourceToken] });\n }\n else {\n const start = getFirstKeyStartProps(it.start);\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, key: null, sep: [this.sourceToken] }]\n });\n }\n }\n else if (it.value) {\n map.items.push({ start: [], key: null, sep: [this.sourceToken] });\n }\n else if (includesToken(it.sep, 'map-value-ind')) {\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, key: null, sep: [this.sourceToken] }]\n });\n }\n else if (isFlowToken(it.key) &&\n !includesToken(it.sep, 'newline')) {\n const start = getFirstKeyStartProps(it.start);\n const key = it.key;\n const sep = it.sep;\n sep.push(this.sourceToken);\n // @ts-expect-error type guard is wrong here\n delete it.key;\n // @ts-expect-error type guard is wrong here\n delete it.sep;\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, key, sep }]\n });\n }\n else if (start.length > 0) {\n // Not actually at next item\n it.sep = it.sep.concat(start, this.sourceToken);\n }\n else {\n it.sep.push(this.sourceToken);\n }\n }\n else {\n if (!it.sep) {\n Object.assign(it, { key: null, sep: [this.sourceToken] });\n }\n else if (it.value || atNextItem) {\n map.items.push({ start, key: null, sep: [this.sourceToken] });\n }\n else if (includesToken(it.sep, 'map-value-ind')) {\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start: [], key: null, sep: [this.sourceToken] }]\n });\n }\n else {\n it.sep.push(this.sourceToken);\n }\n }\n this.onKeyLine = true;\n return;\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar': {\n const fs = this.flowScalar(this.type);\n if (atNextItem || it.value) {\n map.items.push({ start, key: fs, sep: [] });\n this.onKeyLine = true;\n }\n else if (it.sep) {\n this.stack.push(fs);\n }\n else {\n Object.assign(it, { key: fs, sep: [] });\n this.onKeyLine = true;\n }\n return;\n }\n default: {\n const bv = this.startBlockValue(map);\n if (bv) {\n if (bv.type === 'block-seq') {\n if (!it.explicitKey &&\n it.sep &&\n !includesToken(it.sep, 'newline')) {\n yield* this.pop({\n type: 'error',\n offset: this.offset,\n message: 'Unexpected block-seq-ind on same line with key',\n source: this.source\n });\n return;\n }\n }\n else if (atMapIndent) {\n map.items.push({ start });\n }\n this.stack.push(bv);\n return;\n }\n }\n }\n }\n yield* this.pop();\n yield* this.step();\n }\n *blockSequence(seq) {\n const it = seq.items[seq.items.length - 1];\n switch (this.type) {\n case 'newline':\n if (it.value) {\n const end = 'end' in it.value ? it.value.end : undefined;\n const last = Array.isArray(end) ? end[end.length - 1] : undefined;\n if (last?.type === 'comment')\n end?.push(this.sourceToken);\n else\n seq.items.push({ start: [this.sourceToken] });\n }\n else\n it.start.push(this.sourceToken);\n return;\n case 'space':\n case 'comment':\n if (it.value)\n seq.items.push({ start: [this.sourceToken] });\n else {\n if (this.atIndentedComment(it.start, seq.indent)) {\n const prev = seq.items[seq.items.length - 2];\n const end = prev?.value?.end;\n if (Array.isArray(end)) {\n Array.prototype.push.apply(end, it.start);\n end.push(this.sourceToken);\n seq.items.pop();\n return;\n }\n }\n it.start.push(this.sourceToken);\n }\n return;\n case 'anchor':\n case 'tag':\n if (it.value || this.indent <= seq.indent)\n break;\n it.start.push(this.sourceToken);\n return;\n case 'seq-item-ind':\n if (this.indent !== seq.indent)\n break;\n if (it.value || includesToken(it.start, 'seq-item-ind'))\n seq.items.push({ start: [this.sourceToken] });\n else\n it.start.push(this.sourceToken);\n return;\n }\n if (this.indent > seq.indent) {\n const bv = this.startBlockValue(seq);\n if (bv) {\n this.stack.push(bv);\n return;\n }\n }\n yield* this.pop();\n yield* this.step();\n }\n *flowCollection(fc) {\n const it = fc.items[fc.items.length - 1];\n if (this.type === 'flow-error-end') {\n let top;\n do {\n yield* this.pop();\n top = this.peek(1);\n } while (top?.type === 'flow-collection');\n }\n else if (fc.end.length === 0) {\n switch (this.type) {\n case 'comma':\n case 'explicit-key-ind':\n if (!it || it.sep)\n fc.items.push({ start: [this.sourceToken] });\n else\n it.start.push(this.sourceToken);\n return;\n case 'map-value-ind':\n if (!it || it.value)\n fc.items.push({ start: [], key: null, sep: [this.sourceToken] });\n else if (it.sep)\n it.sep.push(this.sourceToken);\n else\n Object.assign(it, { key: null, sep: [this.sourceToken] });\n return;\n case 'space':\n case 'comment':\n case 'newline':\n case 'anchor':\n case 'tag':\n if (!it || it.value)\n fc.items.push({ start: [this.sourceToken] });\n else if (it.sep)\n it.sep.push(this.sourceToken);\n else\n it.start.push(this.sourceToken);\n return;\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar': {\n const fs = this.flowScalar(this.type);\n if (!it || it.value)\n fc.items.push({ start: [], key: fs, sep: [] });\n else if (it.sep)\n this.stack.push(fs);\n else\n Object.assign(it, { key: fs, sep: [] });\n return;\n }\n case 'flow-map-end':\n case 'flow-seq-end':\n fc.end.push(this.sourceToken);\n return;\n }\n const bv = this.startBlockValue(fc);\n /* istanbul ignore else should not happen */\n if (bv)\n this.stack.push(bv);\n else {\n yield* this.pop();\n yield* this.step();\n }\n }\n else {\n const parent = this.peek(2);\n if (parent.type === 'block-map' &&\n ((this.type === 'map-value-ind' && parent.indent === fc.indent) ||\n (this.type === 'newline' &&\n !parent.items[parent.items.length - 1].sep))) {\n yield* this.pop();\n yield* this.step();\n }\n else if (this.type === 'map-value-ind' &&\n parent.type !== 'flow-collection') {\n const prev = getPrevProps(parent);\n const start = getFirstKeyStartProps(prev);\n fixFlowSeqItems(fc);\n const sep = fc.end.splice(1, fc.end.length);\n sep.push(this.sourceToken);\n const map = {\n type: 'block-map',\n offset: fc.offset,\n indent: fc.indent,\n items: [{ start, key: fc, sep }]\n };\n this.onKeyLine = true;\n this.stack[this.stack.length - 1] = map;\n }\n else {\n yield* this.lineEnd(fc);\n }\n }\n }\n flowScalar(type) {\n if (this.onNewLine) {\n let nl = this.source.indexOf('\\n') + 1;\n while (nl !== 0) {\n this.onNewLine(this.offset + nl);\n nl = this.source.indexOf('\\n', nl) + 1;\n }\n }\n return {\n type,\n offset: this.offset,\n indent: this.indent,\n source: this.source\n };\n }\n startBlockValue(parent) {\n switch (this.type) {\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar':\n return this.flowScalar(this.type);\n case 'block-scalar-header':\n return {\n type: 'block-scalar',\n offset: this.offset,\n indent: this.indent,\n props: [this.sourceToken],\n source: ''\n };\n case 'flow-map-start':\n case 'flow-seq-start':\n return {\n type: 'flow-collection',\n offset: this.offset,\n indent: this.indent,\n start: this.sourceToken,\n items: [],\n end: []\n };\n case 'seq-item-ind':\n return {\n type: 'block-seq',\n offset: this.offset,\n indent: this.indent,\n items: [{ start: [this.sourceToken] }]\n };\n case 'explicit-key-ind': {\n this.onKeyLine = true;\n const prev = getPrevProps(parent);\n const start = getFirstKeyStartProps(prev);\n start.push(this.sourceToken);\n return {\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, explicitKey: true }]\n };\n }\n case 'map-value-ind': {\n this.onKeyLine = true;\n const prev = getPrevProps(parent);\n const start = getFirstKeyStartProps(prev);\n return {\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, key: null, sep: [this.sourceToken] }]\n };\n }\n }\n return null;\n }\n atIndentedComment(start, indent) {\n if (this.type !== 'comment')\n return false;\n if (this.indent <= indent)\n return false;\n return start.every(st => st.type === 'newline' || st.type === 'space');\n }\n *documentEnd(docEnd) {\n if (this.type !== 'doc-mode') {\n if (docEnd.end)\n docEnd.end.push(this.sourceToken);\n else\n docEnd.end = [this.sourceToken];\n if (this.type === 'newline')\n yield* this.pop();\n }\n }\n *lineEnd(token) {\n switch (this.type) {\n case 'comma':\n case 'doc-start':\n case 'doc-end':\n case 'flow-seq-end':\n case 'flow-map-end':\n case 'map-value-ind':\n yield* this.pop();\n yield* this.step();\n break;\n case 'newline':\n this.onKeyLine = false;\n // fallthrough\n case 'space':\n case 'comment':\n default:\n // all other values are errors\n if (token.end)\n token.end.push(this.sourceToken);\n else\n token.end = [this.sourceToken];\n if (this.type === 'newline')\n yield* this.pop();\n }\n }\n}\n\nexports.Parser = Parser;\n","'use strict';\n\nvar composer = require('./compose/composer.js');\nvar Document = require('./doc/Document.js');\nvar errors = require('./errors.js');\nvar log = require('./log.js');\nvar identity = require('./nodes/identity.js');\nvar lineCounter = require('./parse/line-counter.js');\nvar parser = require('./parse/parser.js');\n\nfunction parseOptions(options) {\n const prettyErrors = options.prettyErrors !== false;\n const lineCounter$1 = options.lineCounter || (prettyErrors && new lineCounter.LineCounter()) || null;\n return { lineCounter: lineCounter$1, prettyErrors };\n}\n/**\n * Parse the input as a stream of YAML documents.\n *\n * Documents should be separated from each other by `...` or `---` marker lines.\n *\n * @returns If an empty `docs` array is returned, it will be of type\n * EmptyStream and contain additional stream information. In\n * TypeScript, you should use `'empty' in docs` as a type guard for it.\n */\nfunction parseAllDocuments(source, options = {}) {\n const { lineCounter, prettyErrors } = parseOptions(options);\n const parser$1 = new parser.Parser(lineCounter?.addNewLine);\n const composer$1 = new composer.Composer(options);\n const docs = Array.from(composer$1.compose(parser$1.parse(source)));\n if (prettyErrors && lineCounter)\n for (const doc of docs) {\n doc.errors.forEach(errors.prettifyError(source, lineCounter));\n doc.warnings.forEach(errors.prettifyError(source, lineCounter));\n }\n if (docs.length > 0)\n return docs;\n return Object.assign([], { empty: true }, composer$1.streamInfo());\n}\n/** Parse an input string into a single YAML.Document */\nfunction parseDocument(source, options = {}) {\n const { lineCounter, prettyErrors } = parseOptions(options);\n const parser$1 = new parser.Parser(lineCounter?.addNewLine);\n const composer$1 = new composer.Composer(options);\n // `doc` is always set by compose.end(true) at the very latest\n let doc = null;\n for (const _doc of composer$1.compose(parser$1.parse(source), true, source.length)) {\n if (!doc)\n doc = _doc;\n else if (doc.options.logLevel !== 'silent') {\n doc.errors.push(new errors.YAMLParseError(_doc.range.slice(0, 2), 'MULTIPLE_DOCS', 'Source contains multiple documents; please use YAML.parseAllDocuments()'));\n break;\n }\n }\n if (prettyErrors && lineCounter) {\n doc.errors.forEach(errors.prettifyError(source, lineCounter));\n doc.warnings.forEach(errors.prettifyError(source, lineCounter));\n }\n return doc;\n}\nfunction parse(src, reviver, options) {\n let _reviver = undefined;\n if (typeof reviver === 'function') {\n _reviver = reviver;\n }\n else if (options === undefined && reviver && typeof reviver === 'object') {\n options = reviver;\n }\n const doc = parseDocument(src, options);\n if (!doc)\n return null;\n doc.warnings.forEach(warning => log.warn(doc.options.logLevel, warning));\n if (doc.errors.length > 0) {\n if (doc.options.logLevel !== 'silent')\n throw doc.errors[0];\n else\n doc.errors = [];\n }\n return doc.toJS(Object.assign({ reviver: _reviver }, options));\n}\nfunction stringify(value, replacer, options) {\n let _replacer = null;\n if (typeof replacer === 'function' || Array.isArray(replacer)) {\n _replacer = replacer;\n }\n else if (options === undefined && replacer) {\n options = replacer;\n }\n if (typeof options === 'string')\n options = options.length;\n if (typeof options === 'number') {\n const indent = Math.round(options);\n options = indent < 1 ? undefined : indent > 8 ? { indent: 8 } : { indent };\n }\n if (value === undefined) {\n const { keepUndefined } = options ?? replacer ?? {};\n if (!keepUndefined)\n return undefined;\n }\n if (identity.isDocument(value) && !_replacer)\n return value.toString(options);\n return new Document.Document(value, _replacer, options).toString(options);\n}\n\nexports.parse = parse;\nexports.parseAllDocuments = parseAllDocuments;\nexports.parseDocument = parseDocument;\nexports.stringify = stringify;\n","'use strict';\n\nvar composer = require('./compose/composer.js');\nvar Document = require('./doc/Document.js');\nvar Schema = require('./schema/Schema.js');\nvar errors = require('./errors.js');\nvar Alias = require('./nodes/Alias.js');\nvar identity = require('./nodes/identity.js');\nvar Pair = require('./nodes/Pair.js');\nvar Scalar = require('./nodes/Scalar.js');\nvar YAMLMap = require('./nodes/YAMLMap.js');\nvar YAMLSeq = require('./nodes/YAMLSeq.js');\nvar cst = require('./parse/cst.js');\nvar lexer = require('./parse/lexer.js');\nvar lineCounter = require('./parse/line-counter.js');\nvar parser = require('./parse/parser.js');\nvar publicApi = require('./public-api.js');\nvar visit = require('./visit.js');\n\n\n\nexports.Composer = composer.Composer;\nexports.Document = Document.Document;\nexports.Schema = Schema.Schema;\nexports.YAMLError = errors.YAMLError;\nexports.YAMLParseError = errors.YAMLParseError;\nexports.YAMLWarning = errors.YAMLWarning;\nexports.Alias = Alias.Alias;\nexports.isAlias = identity.isAlias;\nexports.isCollection = identity.isCollection;\nexports.isDocument = identity.isDocument;\nexports.isMap = identity.isMap;\nexports.isNode = identity.isNode;\nexports.isPair = identity.isPair;\nexports.isScalar = identity.isScalar;\nexports.isSeq = identity.isSeq;\nexports.Pair = Pair.Pair;\nexports.Scalar = Scalar.Scalar;\nexports.YAMLMap = YAMLMap.YAMLMap;\nexports.YAMLSeq = YAMLSeq.YAMLSeq;\nexports.CST = cst;\nexports.Lexer = lexer.Lexer;\nexports.LineCounter = lineCounter.LineCounter;\nexports.Parser = parser.Parser;\nexports.parse = publicApi.parse;\nexports.parseAllDocuments = publicApi.parseAllDocuments;\nexports.parseDocument = publicApi.parseDocument;\nexports.stringify = publicApi.stringify;\nexports.visit = visit.visit;\nexports.visitAsync = visit.visitAsync;\n","/**\n * <license header>\n */\n\n/**\n * Adobe Commerce deployment types.\n *\n * - `PAAS`: Adobe Commerce on PaaS/on-premise\n * - `CLOUD`: Adobe Commerce Cloud (SaaS)\n */\nexport const DeploymentType = {\n /** Adobe Commerce on PaaS or on-premise */\n PAAS: 'paas',\n /** Adobe Commerce Cloud (SaaS) */\n CLOUD: 'cloud',\n} as const;\n\n/**\n * Deployment type union: 'paas' | 'cloud'\n */\nexport type DeploymentType = (typeof DeploymentType)[keyof typeof DeploymentType];\n\n/**\n * Adobe Commerce API authentication types.\n *\n * - `OAUTH`: OAuth 1.0a for on-premise/PaaS instances\n * - `IMS`: Adobe IMS for Commerce Cloud instances\n */\nexport const CommerceAuthType = {\n /** OAuth 1.0a authentication for PaaS/on-premise */\n OAUTH: 'oauth',\n /** Adobe IMS authentication for Commerce Cloud */\n IMS: 'ims',\n} as const;\n\n/**\n * Commerce authentication type union: 'oauth' | 'ims'\n */\nexport type CommerceAuthType = (typeof CommerceAuthType)[keyof typeof CommerceAuthType];\n","/*\n * <license header>\n */\n\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport * as yaml from 'yaml';\nimport { CommerceAuthType, DeploymentType } from './types';\n\n/**\n * Manages onboarding configuration for Adobe I/O Events and Commerce.\n *\n * Loads, validates, and merges configuration from:\n * - Default: node_modules/@adobe-commerce/aio-toolkit/onboard.config.default.yaml\n * - User: project-root/onboard.config.yaml (optional override)\n *\n * Performs comprehensive validation and auto-detects authentication types.\n */\nexport class OnboardConfig {\n /**\n * Get onboard configuration\n *\n * Strategy:\n * 1. Load default configuration from node_modules/@adobe-commerce/aio-toolkit/\n * 2. Load user configuration from project root (optional)\n * 3. Merge user config over default config (user values take precedence)\n *\n * @param projectPath - Project root path (defaults to process.cwd())\n * @returns Parsed and validated YAML configuration object\n * @throws Error if default configuration file is not found or validation fails\n */\n static get(projectPath: string = process.cwd()): any {\n // Step 1: Load default configuration (required - should always exist)\n const defaultConfig = this.loadDefaultConfig(projectPath);\n if (defaultConfig === undefined) {\n throw new Error(\n `Default onboard config file not found.\\n` +\n `Expected location: ${path.join(projectPath, 'node_modules', '@adobe-commerce/aio-toolkit', 'onboard.config.default.yaml')}\\n` +\n `Please ensure the package is installed correctly.`\n );\n }\n\n // Step 2: Try to load user configuration (optional)\n const userConfig = this.loadUserConfig(projectPath);\n\n // Step 3: Merge user config over default config\n const config =\n userConfig !== undefined ? this.mergeConfig(defaultConfig, userConfig) : defaultConfig;\n\n // Step 4: Validate configuration and return the validated/enhanced config\n return this.validateConfig(config);\n }\n\n /**\n * Load user configuration from project root\n *\n * Searches for onboard.config.yaml in the project root directory\n *\n * @param projectPath - Project root path\n * @returns Parsed YAML configuration or undefined if not found\n * @private\n */\n private static loadUserConfig(projectPath: string): any | undefined {\n const userConfigFileName = 'onboard.config.yaml';\n const userConfigPath = path.join(projectPath, userConfigFileName);\n\n if (!fs.existsSync(userConfigPath)) {\n return undefined;\n }\n\n try {\n const content = fs.readFileSync(userConfigPath, 'utf8');\n return yaml.parse(content);\n } catch (error: any) {\n throw new Error(\n `Failed to parse user config file: ${userConfigPath}\\nError: ${error.message}`\n );\n }\n }\n\n /**\n * Load default configuration from installed package\n *\n * Searches for onboard.config.default.yaml in node_modules/@adobe-commerce/aio-toolkit/\n *\n * @param projectPath - Project root path\n * @returns Parsed YAML configuration or undefined if not found\n * @private\n */\n private static loadDefaultConfig(projectPath: string): any | undefined {\n const packageName = '@adobe-commerce/aio-toolkit';\n const defaultConfigFileName = 'onboard.config.default.yaml';\n const defaultConfigPath = path.join(\n projectPath,\n 'node_modules',\n packageName,\n defaultConfigFileName\n );\n\n if (!fs.existsSync(defaultConfigPath)) {\n return undefined;\n }\n\n try {\n const content = fs.readFileSync(defaultConfigPath, 'utf8');\n return yaml.parse(content);\n } catch (error: any) {\n throw new Error(\n `Failed to parse default config file: ${defaultConfigPath}\\nError: ${error.message}`\n );\n }\n }\n\n /**\n * Merge user configuration over default configuration\n *\n * Performs a deep merge where user config values override default config values.\n * Objects are merged recursively, arrays and primitives are replaced.\n *\n * @param defaultConfig - Default configuration object\n * @param userConfig - User configuration object\n * @returns Merged configuration object\n * @private\n */\n private static mergeConfig(defaultConfig: any, userConfig: any): any {\n // Create a deep copy of default config to avoid mutations\n const merged = JSON.parse(JSON.stringify(defaultConfig));\n\n // Recursively merge user config into default config\n const merge = (target: any, source: any): any => {\n for (const key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n if (\n source[key] !== null &&\n typeof source[key] === 'object' &&\n !Array.isArray(source[key])\n ) {\n // If both are objects, merge recursively\n if (target[key] && typeof target[key] === 'object' && !Array.isArray(target[key])) {\n target[key] = merge(target[key], source[key]);\n } else {\n // If target doesn't have this key or it's not an object, replace it\n target[key] = merge({}, source[key]);\n }\n } else {\n // For arrays and primitives, replace the value\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n\n return merge(merged, userConfig);\n }\n\n /**\n * Validate configuration structure and values\n *\n * @param config - Configuration object to validate\n * @throws Error if validation fails\n * @private\n */\n /**\n * Validate configuration with enhanced error messages\n */\n private static validateConfig(config: any): any {\n // Run all validators\n this.validateVersion(config);\n this.validateApplication(config);\n this.validateEvents(config);\n this.validateDeployment(config);\n\n return config;\n }\n\n /**\n * Validate version field\n */\n private static validateVersion(config: any): void {\n this.assertFieldExists(\n config,\n 'version',\n 'Please ensure your configuration file includes a version field.'\n );\n this.assertEnum(\n config.version,\n ['1.0'],\n 'version',\n 'Please update your configuration file to use a supported version.'\n );\n }\n\n /**\n * Validate application section\n */\n private static validateApplication(config: any): void {\n this.assertFieldExists(\n config,\n 'application',\n 'Please ensure your configuration file includes an application section.'\n );\n this.assertFieldExists(\n config.application,\n 'name',\n 'Please ensure your configuration file includes an application name.'\n );\n this.assertFieldType(\n config.application.name,\n 'string',\n 'application.name',\n 'Please ensure application.name is a string value.'\n );\n this.assertPattern(\n config.application.name,\n /^[a-zA-Z0-9_ -]+$/,\n 'application.name',\n 'Allowed characters: alphanumeric (a-z, A-Z, 0-9), space, underscore (_), and hyphen (-)',\n 'Please update the application name to use only allowed characters.'\n );\n }\n\n /**\n * Validate events section\n */\n private static validateEvents(config: any): void {\n this.assertFieldExists(\n config,\n 'events',\n 'Please ensure your configuration file includes an events section.'\n );\n\n // Validate I/O events\n this.validateIOEvents(config);\n\n // Validate Commerce events\n this.validateCommerceEvents(config);\n }\n\n /**\n * Validate I/O events configuration\n */\n private static validateIOEvents(config: any): void {\n this.assertFieldExists(\n config.events,\n 'io',\n 'Please ensure your configuration file includes I/O events configuration.'\n );\n this.assertFieldExists(\n config.events.io,\n 'config',\n 'Please ensure your configuration file includes a config file path for I/O events.'\n );\n this.assertFieldType(\n config.events.io.config,\n 'string',\n 'events.io.config',\n 'Please ensure events.io.config is a file path string.'\n );\n this.assertFileExtension(\n config.events.io.config,\n '.json',\n 'events.io.config',\n 'Please ensure the file path ends with .json extension.'\n );\n\n // Load and replace file path with file content\n const ioConfigContent = this.loadFileContent(config.events.io.config, 'I/O events config file');\n config.events.io.config = ioConfigContent;\n }\n\n /**\n * Validate Commerce events configuration\n */\n private static validateCommerceEvents(config: any): void {\n this.assertFieldExists(\n config.events,\n 'commerce',\n 'Please ensure your configuration file includes Commerce events configuration.'\n );\n this.assertFieldExists(\n config.events.commerce,\n 'providerKey',\n 'Please ensure your configuration file includes a provider key for Commerce events.'\n );\n this.assertFieldType(\n config.events.commerce.providerKey,\n 'string',\n 'events.commerce.providerKey',\n 'Please ensure providerKey is a string value.'\n );\n this.assertNonEmpty(\n config.events.commerce.providerKey,\n 'events.commerce.providerKey',\n 'Please provide a valid provider key.'\n );\n this.assertPattern(\n config.events.commerce.providerKey,\n /^[a-zA-Z0-9_-]+$/,\n 'events.commerce.providerKey',\n 'Allowed characters: alphanumeric, underscore (_), and hyphen (-)',\n 'Please ensure providerKey only contains valid characters.'\n );\n this.assertFieldExists(\n config.events.commerce,\n 'config',\n 'Please ensure your configuration file includes a config file path for Commerce events.'\n );\n this.assertFieldType(\n config.events.commerce.config,\n 'string',\n 'events.commerce.config',\n 'Please ensure events.commerce.config is a file path string.'\n );\n this.assertFileExtension(\n config.events.commerce.config,\n '.json',\n 'events.commerce.config',\n 'Please ensure the file path ends with .json extension.'\n );\n\n // Load and replace file path with file content\n const commerceConfigContent = this.loadFileContent(\n config.events.commerce.config,\n 'Commerce events config file'\n );\n config.events.commerce.config = commerceConfigContent;\n }\n\n /**\n * Validate deployment section\n */\n private static validateDeployment(config: any): void {\n this.assertFieldExists(\n config,\n 'deployment',\n 'Please ensure your configuration file includes deployment settings.'\n );\n this.assertFieldExists(\n config.deployment,\n 'type',\n 'Please ensure your configuration file includes a deployment type.'\n );\n this.assertFieldType(\n config.deployment.type,\n 'string',\n 'deployment.type',\n 'Please ensure deployment.type is a string value.'\n );\n this.assertEnum(\n config.deployment.type,\n Object.values(DeploymentType),\n 'deployment.type',\n `Please ensure deployment.type is one of the following values: ${Object.values(DeploymentType).join(', ')}`\n );\n\n // Validate or auto-detect authType\n if (config.deployment.authType !== undefined) {\n this.assertFieldType(\n config.deployment.authType,\n 'string',\n 'deployment.authType',\n 'Please ensure deployment.authType is a string value.'\n );\n this.assertEnum(\n config.deployment.authType,\n Object.values(CommerceAuthType),\n 'deployment.authType',\n `Please ensure deployment.authType is one of the following values: ${Object.values(CommerceAuthType).join(', ')}`\n );\n } else {\n // Auto-detect authType based on deployment.type: DeploymentType.PAAS → CommerceAuthType.OAUTH, DeploymentType.CLOUD → CommerceAuthType.IMS\n config.deployment.authType =\n config.deployment.type === DeploymentType.PAAS\n ? CommerceAuthType.OAUTH\n : CommerceAuthType.IMS;\n }\n }\n\n /**\n * Assert that a field exists (truthy check)\n */\n private static assertFieldExists(obj: any, fieldName: string, helpText: string): void {\n if (!obj[fieldName]) {\n throw new Error(\n `Configuration validation failed: Missing required field '${fieldName}'.\\n${helpText}`\n );\n }\n }\n\n /**\n * Assert that a value is of the expected type\n */\n private static assertFieldType(\n value: any,\n expectedType: string,\n fieldName: string,\n helpText: string\n ): void {\n if (typeof value !== expectedType) {\n throw new Error(\n `Configuration validation failed: Field '${fieldName}' must be a ${expectedType}.\\n` +\n `Current type: ${typeof value}\\n${helpText}`\n );\n }\n }\n\n /**\n * Assert that a value matches one of the allowed enum values\n */\n private static assertEnum(\n value: any,\n allowedValues: string[],\n fieldName: string,\n helpText: string\n ): void {\n if (!allowedValues.includes(value)) {\n throw new Error(\n `Configuration validation failed: Field '${fieldName}' has an invalid value.\\n` +\n `Current value: \"${value}\"\\n` +\n `Allowed values: ${allowedValues.map(v => `\"${v}\"`).join(', ')}\\n${helpText}`\n );\n }\n }\n\n /**\n * Assert that a string matches a regex pattern\n */\n private static assertPattern(\n value: string,\n pattern: RegExp,\n fieldName: string,\n allowedChars: string,\n helpText: string\n ): void {\n if (!pattern.test(value)) {\n throw new Error(\n `Configuration validation failed: Field '${fieldName}' contains invalid characters.\\n` +\n `Current value: \"${value}\"\\n` +\n `${allowedChars}\\n${helpText}`\n );\n }\n }\n\n /**\n * Assert that a string is not empty (after trimming)\n */\n private static assertNonEmpty(value: string, fieldName: string, helpText: string): void {\n if (value.trim() === '') {\n throw new Error(\n `Configuration validation failed: Field '${fieldName}' cannot be empty.\\n${helpText}`\n );\n }\n }\n\n /**\n * Assert that a file path ends with a specific extension\n */\n private static assertFileExtension(\n filePath: string,\n extension: string,\n fieldName: string,\n helpText: string\n ): void {\n if (!filePath.endsWith(extension)) {\n throw new Error(\n `Configuration validation failed: Field '${fieldName}' must be a JSON file path.\\n` +\n `Current value: \"${filePath}\"\\n${helpText}`\n );\n }\n }\n\n /**\n * Load and parse file content, replacing the file path with actual content\n */\n private static loadFileContent(filePath: string, fileDescription: string): any {\n const resolvedPath = path.isAbsolute(filePath) ? filePath : path.join(process.cwd(), filePath);\n\n // Check if file exists\n if (!fs.existsSync(resolvedPath)) {\n throw new Error(\n `Configuration validation failed: ${fileDescription} not found.\\n` +\n `Specified path: \"${filePath}\"\\n` +\n `Resolved path: \"${resolvedPath}\"\\n` +\n `Please ensure the file exists at the specified location.`\n );\n }\n\n try {\n // Read file content\n const fileContent = fs.readFileSync(resolvedPath, 'utf8');\n\n // Parse JSON file (all config files are validated to be .json)\n return JSON.parse(fileContent);\n } catch (error: any) {\n throw new Error(\n `Configuration validation failed: Unable to read or parse ${fileDescription}.\\n` +\n `Specified path: \"${filePath}\"\\n` +\n `Resolved path: \"${resolvedPath}\"\\n` +\n `Error: ${error.message}`\n );\n }\n }\n}\n","/**\n * ApplicationName helper class\n * Generates the application name based on the onboarding configuration\n */\n\nexport class ApplicationName {\n /**\n * Generate the application name\n * @param {OnboardConfig} onboardConfig - The onboarding configuration\n * @returns {string} The application name\n */\n static generate(applicationName: string): string {\n return `${applicationName} (${process?.env?.IO_WORKSPACE_ID || 'Unknown'})`;\n }\n}\n","/**\n * <license header>\n */\n\nimport fetch, { RequestInit, Response } from 'node-fetch';\nimport { Headers } from './types';\n\nclass RestClient {\n /**\n * A completely raw method to make HTTP requests\n *\n * @param endpoint\n * @param method\n * @param headers\n * @param payload\n * @returns {Promise<Response>}\n */\n async makeRequest(\n endpoint: string,\n method: string = 'GET',\n headers: Headers = {},\n payload: any = null\n ): Promise<Response> {\n let options: RequestInit = {\n method: method,\n headers: headers,\n };\n\n if (payload !== null) {\n let body: any;\n let contentType: string | undefined;\n\n // Handle different payload types\n if (payload instanceof URLSearchParams) {\n // Form-encoded data\n body = payload.toString();\n contentType = headers['Content-Type'] || 'application/x-www-form-urlencoded';\n } else if (typeof FormData !== 'undefined' && payload instanceof FormData) {\n // Multipart form data - let browser set Content-Type with boundary\n body = payload;\n contentType = headers['Content-Type']; // Don't set default, browser handles this\n } else if (typeof payload === 'string') {\n // String payloads (text, XML, etc.)\n body = payload;\n contentType = headers['Content-Type'] || 'text/plain';\n } else if (\n payload instanceof Buffer ||\n payload instanceof ArrayBuffer ||\n (typeof Uint8Array !== 'undefined' && payload instanceof Uint8Array)\n ) {\n // Binary data\n body = payload;\n contentType = headers['Content-Type'] || 'application/octet-stream';\n } else {\n // Regular objects/primitives as JSON\n body = JSON.stringify(payload);\n contentType = headers['Content-Type'] || 'application/json';\n }\n\n // Build options with appropriate headers\n const requestHeaders = { ...headers };\n if (contentType) {\n requestHeaders['Content-Type'] = contentType;\n }\n\n options = {\n ...options,\n body,\n headers: requestHeaders,\n };\n }\n\n return await fetch(endpoint, options);\n }\n\n /**\n * A method to parse HTTP response\n *\n * @param response\n * @returns {Promise<any>}\n */\n async parseResponse(response: Response): Promise<any> {\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n\n // Handle responses with no content (like 204 No Content)\n if (response.status === 204 || response.headers?.get('content-length') === '0') {\n return null;\n }\n\n // Try JSON first (for both real responses and mocked responses)\n if (typeof response.json === 'function') {\n const contentType = response.headers?.get('content-type');\n // If no content-type header (mocked response) or JSON content-type, parse as JSON\n if (\n !contentType ||\n contentType.includes('application/json') ||\n contentType.includes('application/hal+json')\n ) {\n return await response.json();\n }\n }\n\n // For non-JSON responses, return text\n if (typeof response.text === 'function') {\n const text = await response.text();\n return text;\n }\n\n // Fallback for responses without text/json methods\n return null;\n }\n\n /**\n * A generic method to make GET rest call\n *\n * @param endpoint\n * @param headers\n * @param parsed\n * @returns {Promise<Response | any>}\n */\n async get(\n endpoint: string,\n headers: Headers = {},\n parsed: boolean = true\n ): Promise<Response | any> {\n const response = await this.makeRequest(endpoint, 'GET', headers);\n return parsed ? await this.parseResponse(response) : response;\n }\n\n /**\n * A generic method to make POST rest call\n *\n * @param endpoint\n * @param headers\n * @param payload\n * @param parsed\n * @returns {Promise<Response | any>}\n */\n async post(\n endpoint: string,\n headers: Headers = {},\n payload: any = null,\n parsed: boolean = true\n ): Promise<Response | any> {\n const response = await this.makeRequest(endpoint, 'POST', headers, payload);\n return parsed ? await this.parseResponse(response) : response;\n }\n\n /**\n * A generic method to make PUT rest call\n *\n * @param endpoint\n * @param headers\n * @param payload\n * @param parsed\n * @returns {Promise<Response | any>}\n */\n async put(\n endpoint: string,\n headers: Headers = {},\n payload: any = null,\n parsed: boolean = true\n ): Promise<Response | any> {\n const response = await this.makeRequest(endpoint, 'PUT', headers, payload);\n return parsed ? await this.parseResponse(response) : response;\n }\n\n /**\n * A generic method to make DELETE rest call\n *\n * @param endpoint\n * @param headers\n * @param parsed\n * @returns {Promise<Response | any>}\n */\n async delete(\n endpoint: string,\n headers: Headers = {},\n parsed: boolean = true\n ): Promise<Response | any> {\n const response = await this.makeRequest(endpoint, 'DELETE', headers);\n return parsed ? await this.parseResponse(response) : response;\n }\n\n /**\n * A generic method to make rest call\n *\n * @param endpoint\n * @param method\n * @param headers\n * @param payload\n * @returns {Promise<any>}\n * @deprecated Use makeRequest() and parseResponse() methods instead\n */\n async apiCall(\n endpoint: string,\n method: string = 'POST',\n headers: Headers = {},\n payload: any = null\n ): Promise<any> {\n let options: RequestInit = {\n method: method,\n headers: headers,\n };\n\n if (payload !== null) {\n options = {\n ...options,\n body: JSON.stringify(payload),\n headers: {\n ...headers,\n 'Content-Type': 'application/json',\n },\n };\n }\n\n const response: Response = await fetch(endpoint, options);\n\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n\n // Handle responses with no content (like 204 No Content)\n if (response.status === 204 || response.headers?.get('content-length') === '0') {\n return null;\n }\n\n // Try JSON first (for both real responses and mocked responses)\n if (typeof response.json === 'function') {\n const contentType = response.headers?.get('content-type');\n // If no content-type header (mocked response) or JSON content-type, parse as JSON\n if (\n !contentType ||\n contentType.includes('application/json') ||\n contentType.includes('application/hal+json')\n ) {\n return await response.json();\n }\n }\n\n // For non-JSON responses, return text\n if (typeof response.text === 'function') {\n const text = await response.text();\n return text;\n }\n\n // Fallback for responses without text/json methods\n return null;\n }\n}\n\nexport default RestClient;\n","/**\n * <license header>\n */\n\n/**\n * Adobe I/O Events global constants\n */\nexport const IoEventsGlobals = {\n BASE_URL: 'https://api.adobe.io',\n STATUS_CODES: {\n OK: 200,\n BAD_REQUEST: 400,\n UNAUTHORIZED: 401,\n FORBIDDEN: 403,\n NOT_FOUND: 404,\n REQUEST_TIMEOUT: 408,\n TIMEOUT: 408,\n CONFLICT: 409,\n INTERNAL_SERVER_ERROR: 500,\n },\n HEADERS: {\n CONFLICTING_ID: 'x-conflicting-id',\n },\n} as const;\n\n/**\n * HAL (Hypertext Application Language) link structure\n */\nexport interface HALLink {\n href: string;\n templated?: boolean;\n type?: string;\n title?: string;\n}\n\n/**\n * Error response from Adobe I/O Events API\n */\nexport interface IOEventsError {\n error?: string;\n message?: string;\n error_code?: string;\n details?: string;\n}\n\n/**\n * Custom error class for Adobe I/O Events API errors\n */\nexport class IOEventsApiError extends Error {\n public readonly statusCode: number;\n public readonly errorCode: string | undefined;\n public readonly details: string | undefined;\n\n constructor(message: string, statusCode: number, errorCode?: string, details?: string) {\n super(message);\n this.name = 'IOEventsApiError';\n this.statusCode = statusCode;\n this.errorCode = errorCode;\n this.details = details;\n }\n}\n","/**\n * <license header>\n */\n\nimport RestClient from '../../../integration/rest-client';\nimport { IOEventsApiError, IOEventsError, IoEventsGlobals } from '../../types';\nimport { Provider } from '../types';\nimport { ListProvidersQueryParams, ProvidersListResponse } from './types';\n\n/**\n * List providers for Adobe I/O Events\n *\n * This class handles the retrieval of event providers entitled to a specific organization ID.\n * It supports filtering by provider metadata ID, instance ID, and can optionally include\n * event metadata in the response.\n */\nclass List {\n private readonly endpoint: string = IoEventsGlobals.BASE_URL;\n private readonly restClient: RestClient;\n\n /**\n * Constructor for List providers service\n *\n * @param clientId - Client ID from Adobe Developer Console (x-api-key header)\n * @param consumerId - Project Organization ID from Adobe Developer Console\n * @param projectId - Project ID from Adobe Developer Console\n * @param workspaceId - Workspace ID from Adobe Developer Console\n * @param accessToken - IMS token for authentication (Bearer token)\n */\n constructor(\n private readonly clientId: string,\n private readonly consumerId: string,\n private readonly projectId: string,\n private readonly workspaceId: string,\n private readonly accessToken: string\n ) {\n if (!clientId?.trim()) {\n throw new Error('clientId is required and cannot be empty');\n }\n if (!consumerId?.trim()) {\n throw new Error('consumerId is required and cannot be empty');\n }\n if (!projectId?.trim()) {\n throw new Error('projectId is required and cannot be empty');\n }\n if (!workspaceId?.trim()) {\n throw new Error('workspaceId is required and cannot be empty');\n }\n if (!accessToken?.trim()) {\n throw new Error('accessToken is required and cannot be empty');\n }\n\n this.restClient = new RestClient();\n }\n\n /**\n * Execute the list providers API call with automatic pagination\n *\n * This method automatically handles pagination by following the `_links.next.href` from the HAL+JSON response.\n * It makes recursive API calls to fetch all pages and returns a complete array containing all providers\n * across all pages.\n *\n * @param queryParams - Optional query parameters for filtering providers\n * @param queryParams.providerMetadataId - Filter by provider metadata id\n * @param queryParams.instanceId - Filter by instance id\n * @param queryParams.providerMetadataIds - List of provider metadata ids to filter (mutually exclusive with providerMetadataId)\n * @param queryParams.eventmetadata - Boolean to fetch provider's event metadata (default: false)\n * @returns Promise<Provider[]> - Complete array of all providers across all pages\n * @throws IOEventsApiError - When API call fails with specific error details\n */\n async execute(queryParams: ListProvidersQueryParams = {}): Promise<Provider[]> {\n try {\n // Validate query parameters\n if (queryParams.providerMetadataId && queryParams.providerMetadataIds) {\n throw new Error('Cannot specify both providerMetadataId and providerMetadataIds');\n }\n\n // Build the API URL\n const url = `${this.endpoint}/events/${this.consumerId}/providers`;\n\n // Build query string if parameters are provided\n const queryString = this.buildQueryString(queryParams);\n const fullUrl = queryString ? `${url}?${queryString}` : url;\n\n // Prepare headers as required by the API\n const headers = {\n Authorization: `Bearer ${this.accessToken}`,\n 'x-api-key': this.clientId,\n Accept: 'application/hal+json',\n };\n\n return await this.fetchAllPages(fullUrl, headers);\n } catch (error: any) {\n // Handle different types of errors\n this.handleError(error);\n }\n }\n\n /**\n * Recursively fetches all pages of providers using pagination links\n *\n * @param url - The URL to fetch (either initial URL or next page URL)\n * @param headers - Headers for the API request\n * @param accumulatedResults - Array to accumulate results across pages\n * @returns Promise<Provider[]> - Complete array of all providers\n * @private\n */\n private async fetchAllPages(\n url: string,\n headers: Record<string, string>,\n accumulatedResults: Provider[] = []\n ): Promise<Provider[]> {\n // Make the GET request\n const response: ProvidersListResponse = await this.restClient.get(url, headers);\n\n // Validate response format\n if (response === null || response === undefined) {\n throw new Error('Invalid response format: Expected object');\n }\n\n if (typeof response !== 'object') {\n throw new Error('Invalid response format: Expected object');\n }\n\n // Extract providers array\n const providers = response._embedded?.providers;\n\n if (providers !== undefined && !Array.isArray(providers)) {\n throw new Error('Invalid response format: providers should be an array');\n }\n\n // Get current page results\n const currentPageResults = providers || [];\n\n // Accumulate results from current page\n const allResults = [...accumulatedResults, ...currentPageResults];\n\n // Check if there's a next page\n const nextPageUrl = response._links?.next?.href;\n\n if (nextPageUrl) {\n // Recursively fetch the next page\n return await this.fetchAllPages(nextPageUrl, headers, allResults);\n }\n\n // No more pages, return all accumulated results\n return allResults;\n }\n\n /**\n * Handle and transform errors from the API call\n * @private\n * @param error - The caught error\n * @throws IOEventsApiError - Transformed error with proper details\n */\n private handleError(error: any): never {\n // Check if it's an HTTP error from RestClient (e.g., \"HTTP error! status: 404\")\n if (error instanceof Error && error.message.includes('HTTP error! status:')) {\n const statusCode = this.extractStatusCodeFromMessage(error.message);\n const errorMessage = this.getErrorMessageForStatus(statusCode);\n throw new IOEventsApiError(errorMessage, statusCode);\n }\n\n // Check if error has response body with error details\n if (error.response?.body) {\n const errorBody: IOEventsError = error.response.body;\n const statusCode =\n error.response.statusCode || IoEventsGlobals.STATUS_CODES.INTERNAL_SERVER_ERROR;\n const message =\n errorBody.message || errorBody.error || this.getErrorMessageForStatus(statusCode);\n throw new IOEventsApiError(message, statusCode, errorBody.error_code, errorBody.details);\n }\n\n // Handle network errors\n if (error.code === 'ENOTFOUND' || error.code === 'ECONNREFUSED') {\n throw new IOEventsApiError(\n 'Network error: Unable to connect to Adobe I/O Events API. Please check your internet connection.',\n 0,\n 'NETWORK_ERROR'\n );\n }\n\n // Handle timeout errors\n if (error.code === 'ETIMEDOUT') {\n throw new IOEventsApiError(\n 'Request timeout: Adobe I/O Events API did not respond in time.',\n 0,\n 'TIMEOUT_ERROR'\n );\n }\n\n // Handle JSON parsing errors\n if (error.message?.includes('JSON') || error.name === 'SyntaxError') {\n throw new IOEventsApiError(\n 'Invalid response format: Unable to parse API response.',\n 0,\n 'PARSE_ERROR'\n );\n }\n\n // Handle validation errors\n if (\n error.message?.includes('Cannot specify both') ||\n error.message?.includes('Invalid response format')\n ) {\n throw new IOEventsApiError(\n error.message,\n IoEventsGlobals.STATUS_CODES.BAD_REQUEST,\n 'VALIDATION_ERROR'\n );\n }\n\n // Generic error fallback\n throw new IOEventsApiError(\n `Failed to list providers: ${error.message || 'Unknown error occurred'}`,\n IoEventsGlobals.STATUS_CODES.INTERNAL_SERVER_ERROR,\n 'UNKNOWN_ERROR'\n );\n }\n\n /**\n * Extracts the status code from RestClient error message\n *\n * @param errorMessage - Error message like \"HTTP error! status: 404\"\n * @returns The HTTP status code\n */\n private extractStatusCodeFromMessage(errorMessage: string): number {\n const match = errorMessage.match(/HTTP error! status:\\s*(\\d+)/);\n return match ? parseInt(match[1]!, 10) : IoEventsGlobals.STATUS_CODES.INTERNAL_SERVER_ERROR;\n }\n\n /**\n * Get user-friendly error message based on HTTP status code\n * @private\n * @param statusCode - HTTP status code\n * @returns string - User-friendly error message\n */\n private getErrorMessageForStatus(statusCode: number): string {\n switch (statusCode) {\n case IoEventsGlobals.STATUS_CODES.UNAUTHORIZED:\n return 'Unauthorized: Invalid or expired access token';\n case IoEventsGlobals.STATUS_CODES.FORBIDDEN:\n return 'Forbidden: Insufficient permissions or invalid API key';\n case IoEventsGlobals.STATUS_CODES.NOT_FOUND:\n return 'Not Found: Provider associated with the consumerOrgId, providerMetadataId or instanceID does not exist';\n case IoEventsGlobals.STATUS_CODES.INTERNAL_SERVER_ERROR:\n return 'Internal Server Error: Adobe I/O Events service is temporarily unavailable';\n default:\n return `API Error: HTTP ${statusCode}`;\n }\n }\n\n /**\n * Build query string from parameters\n * @private\n */\n private buildQueryString(params: ListProvidersQueryParams): string {\n const queryParts: string[] = [];\n\n // Add providerMetadataId if provided\n if (params.providerMetadataId) {\n queryParts.push(`providerMetadataId=${encodeURIComponent(params.providerMetadataId)}`);\n }\n\n // Add instanceId if provided\n if (params.instanceId) {\n queryParts.push(`instanceId=${encodeURIComponent(params.instanceId)}`);\n }\n\n // Add providerMetadataIds array if provided\n if (params.providerMetadataIds && Array.isArray(params.providerMetadataIds)) {\n params.providerMetadataIds.forEach((id: string) => {\n queryParts.push(`providerMetadataIds=${encodeURIComponent(id)}`);\n });\n }\n\n // Add eventmetadata boolean if provided\n if (typeof params.eventmetadata === 'boolean') {\n queryParts.push(`eventmetadata=${params.eventmetadata}`);\n }\n\n return queryParts.join('&');\n }\n}\n\nexport default List;\n","/**\n * <license header>\n */\n\nimport RestClient from '../../../integration/rest-client';\nimport { IOEventsApiError, IoEventsGlobals } from '../../types';\nimport { Provider } from '../types';\nimport { GetProviderQueryParams } from './types';\n\n/**\n * Get provider by ID for Adobe I/O Events\n *\n * This class handles the retrieval of a specific event provider by its ID.\n * It supports including event metadata in the response.\n */\nclass Get {\n private readonly endpoint: string = IoEventsGlobals.BASE_URL;\n private readonly restClient: RestClient;\n\n /**\n * Constructor for Get provider service\n *\n * @param clientId - Client ID from Adobe Developer Console (x-api-key header)\n * @param consumerId - Project Organization ID from Adobe Developer Console\n * @param projectId - Project ID from Adobe Developer Console\n * @param workspaceId - Workspace ID from Adobe Developer Console\n * @param accessToken - IMS token for authentication (Bearer token)\n */\n constructor(\n private readonly clientId: string,\n private readonly consumerId: string,\n private readonly projectId: string,\n private readonly workspaceId: string,\n private readonly accessToken: string\n ) {\n if (!clientId?.trim()) {\n throw new Error('clientId is required and cannot be empty');\n }\n if (!consumerId?.trim()) {\n throw new Error('consumerId is required and cannot be empty');\n }\n if (!projectId?.trim()) {\n throw new Error('projectId is required and cannot be empty');\n }\n if (!workspaceId?.trim()) {\n throw new Error('workspaceId is required and cannot be empty');\n }\n if (!accessToken?.trim()) {\n throw new Error('accessToken is required and cannot be empty');\n }\n\n this.restClient = new RestClient();\n }\n\n /**\n * Execute the get provider by ID API call\n *\n * @param providerId - The ID of the provider to retrieve\n * @param queryParams - Optional query parameters\n * @param queryParams.eventmetadata - Boolean to fetch provider's event metadata (default: false)\n * @returns Promise<Provider> - The provider details\n * @throws IOEventsApiError - When API call fails with specific error details\n *\n * @example\n * ```typescript\n * // Get basic provider details\n * const provider = await getService.execute('provider-123');\n *\n * // Get provider details with event metadata\n * const providerWithMetadata = await getService.execute('provider-123', {\n * eventmetadata: true\n * });\n * ```\n */\n async execute(providerId: string, queryParams: GetProviderQueryParams = {}): Promise<Provider> {\n try {\n // Validate provider ID\n if (!providerId?.trim()) {\n throw new Error('Provider ID is required and cannot be empty');\n }\n\n // Build the API URL\n const url = `${this.endpoint}/events/providers/${encodeURIComponent(providerId)}`;\n\n // Build query string if parameters are provided\n const queryString = this.buildQueryString(queryParams);\n const fullUrl = queryString ? `${url}?${queryString}` : url;\n\n // Prepare headers as required by the API\n const headers = {\n Authorization: `Bearer ${this.accessToken}`,\n 'x-api-key': this.clientId,\n Accept: 'application/hal+json',\n };\n\n // Make the GET request\n const response: Provider = await this.restClient.get(fullUrl, headers);\n\n // Validate response format\n if (response === null || response === undefined) {\n throw new Error('Invalid response format: Expected provider object');\n }\n if (typeof response !== 'object') {\n throw new Error('Invalid response format: Expected provider object');\n }\n\n return response;\n } catch (error: any) {\n this.handleError(error);\n }\n }\n\n /**\n * Build query string from parameters\n */\n private buildQueryString(queryParams: GetProviderQueryParams): string {\n const params = new URLSearchParams();\n\n // Handle eventmetadata parameter\n if (queryParams.eventmetadata !== undefined) {\n params.append('eventmetadata', String(queryParams.eventmetadata));\n }\n\n return params.toString();\n }\n\n /**\n * Handle and transform errors into IOEventsApiError\n */\n private handleError(error: any): never {\n // Check if it's an HTTP error from RestClient (e.g., \"HTTP error! status: 404\")\n if (error instanceof Error && error.message.includes('HTTP error! status:')) {\n const statusCode = this.extractStatusCodeFromMessage(error.message);\n const errorMessage = this.getErrorMessageForStatus(statusCode);\n\n throw new IOEventsApiError(errorMessage, statusCode);\n }\n\n // Handle HTTP errors from RestClient\n if (error.response) {\n const status = this.extractStatusCode(error);\n const errorMessage = this.getErrorMessageForStatus(status);\n throw new IOEventsApiError(errorMessage, status, 'API_ERROR');\n }\n\n // Handle network errors\n if (error.code === 'ENOTFOUND' || error.code === 'ECONNREFUSED') {\n throw new IOEventsApiError(\n 'Network error: Unable to connect to Adobe I/O Events API',\n IoEventsGlobals.STATUS_CODES.INTERNAL_SERVER_ERROR,\n 'NETWORK_ERROR'\n );\n }\n\n // Handle timeout errors\n if (error.code === 'ETIMEDOUT') {\n throw new IOEventsApiError(\n 'Request timeout: Adobe I/O Events API did not respond in time',\n IoEventsGlobals.STATUS_CODES.TIMEOUT,\n 'TIMEOUT_ERROR'\n );\n }\n\n // Handle JSON parsing errors\n if (error.message?.includes('JSON')) {\n throw new IOEventsApiError(\n 'Invalid response format from Adobe I/O Events API',\n IoEventsGlobals.STATUS_CODES.INTERNAL_SERVER_ERROR,\n 'PARSE_ERROR'\n );\n }\n\n // Handle validation errors (from provider ID or response validation)\n if (\n error.message?.includes('Provider ID is required') ||\n error.message?.includes('Invalid response format')\n ) {\n throw new IOEventsApiError(\n error.message,\n IoEventsGlobals.STATUS_CODES.BAD_REQUEST,\n 'VALIDATION_ERROR'\n );\n }\n\n // Generic error fallback\n throw new IOEventsApiError(\n `Unexpected error: ${error.message || 'Unknown error occurred'}`,\n IoEventsGlobals.STATUS_CODES.INTERNAL_SERVER_ERROR,\n 'UNKNOWN_ERROR'\n );\n }\n\n /**\n * Extract status code from error response\n */\n private extractStatusCode(error: any): number {\n return (\n error.response?.status || error.status || IoEventsGlobals.STATUS_CODES.INTERNAL_SERVER_ERROR\n );\n }\n\n /**\n * Extracts the status code from RestClient error message\n *\n * @param errorMessage - Error message like \"HTTP error! status: 404\"\n * @returns The HTTP status code\n */\n private extractStatusCodeFromMessage(errorMessage: string): number {\n const match = errorMessage.match(/HTTP error! status:\\s*(\\d+)/);\n return match ? parseInt(match[1]!, 10) : IoEventsGlobals.STATUS_CODES.INTERNAL_SERVER_ERROR;\n }\n\n /**\n * Get specific error message based on HTTP status code\n */\n private getErrorMessageForStatus(status: number): string {\n switch (status) {\n case IoEventsGlobals.STATUS_CODES.UNAUTHORIZED:\n return 'Unauthorized: Invalid or expired access token';\n case IoEventsGlobals.STATUS_CODES.FORBIDDEN:\n return 'Forbidden: Insufficient permissions to access this provider';\n case IoEventsGlobals.STATUS_CODES.NOT_FOUND:\n return 'Provider ID does not exist';\n case IoEventsGlobals.STATUS_CODES.INTERNAL_SERVER_ERROR:\n return 'Internal server error occurred while fetching provider';\n default:\n return `HTTP ${status}: Provider request failed`;\n }\n }\n}\n\nexport default Get;\n","/**\n * <license header>\n */\n\nimport RestClient from '../../../integration/rest-client';\nimport { IOEventsApiError, IoEventsGlobals } from '../../types';\nimport { Provider } from '../types';\nimport { ProviderInputModel } from './types';\n\n/**\n * Create provider for Adobe I/O Events\n *\n * This class handles the creation of new event providers for a specific organization,\n * project, and workspace. It supports both single-instance and multi-instance providers.\n */\nclass Create {\n private readonly endpoint: string = IoEventsGlobals.BASE_URL;\n private readonly restClient: RestClient;\n\n /**\n * Constructor for Create provider service\n *\n * @param clientId - Client ID from Adobe Developer Console (x-api-key header)\n * @param consumerId - Project Organization ID from Adobe Developer Console\n * @param projectId - Project ID from Adobe Developer Console\n * @param workspaceId - Workspace ID from Adobe Developer Console\n * @param accessToken - IMS token for authentication (Bearer token)\n */\n constructor(\n private readonly clientId: string,\n private readonly consumerId: string,\n private readonly projectId: string,\n private readonly workspaceId: string,\n private readonly accessToken: string\n ) {\n if (!clientId?.trim()) {\n throw new Error('clientId is required and cannot be empty');\n }\n if (!consumerId?.trim()) {\n throw new Error('consumerId is required and cannot be empty');\n }\n if (!projectId?.trim()) {\n throw new Error('projectId is required and cannot be empty');\n }\n if (!workspaceId?.trim()) {\n throw new Error('workspaceId is required and cannot be empty');\n }\n if (!accessToken?.trim()) {\n throw new Error('accessToken is required and cannot be empty');\n }\n\n this.restClient = new RestClient();\n }\n\n /**\n * Execute the create provider API call\n *\n * @param providerData - Provider input data\n * @returns Promise<Provider> - The created provider\n * @throws IOEventsApiError - When API call fails with specific error details\n */\n async execute(providerData: ProviderInputModel): Promise<Provider> {\n try {\n // Validate required parameters\n if (!providerData) {\n throw new Error('providerData is required');\n }\n if (!providerData.label?.trim()) {\n throw new Error('label is required in providerData');\n }\n\n // Build the API URL\n const url = `${this.endpoint}/events/${this.consumerId}/${this.projectId}/${this.workspaceId}/providers`;\n\n // Prepare headers as required by the API\n const headers = {\n Authorization: `Bearer ${this.accessToken}`,\n 'x-api-key': this.clientId,\n Accept: 'application/hal+json',\n 'Content-Type': 'application/json',\n };\n\n // Make the POST request\n const response: Provider = await this.restClient.post(url, headers, providerData);\n\n // Validate response format\n if (response === null || response === undefined) {\n throw new Error('Invalid response format: Expected provider object');\n }\n\n if (typeof response !== 'object') {\n throw new Error('Invalid response format: Expected provider object');\n }\n\n // Validate required provider fields\n if (!response.id) {\n throw new Error('Invalid response format: Missing provider id');\n }\n\n return response;\n } catch (error: any) {\n // Handle different types of errors\n this.handleError(error);\n }\n }\n\n /**\n * Handle and transform errors from the API call\n * @private\n * @param error - The caught error\n * @throws IOEventsApiError - Transformed error with proper details\n */\n private handleError(error: any): never {\n // Check if it's an HTTP error from RestClient (e.g., \"HTTP error! status: 404\")\n if (error instanceof Error && error.message.includes('HTTP error! status:')) {\n const statusCode = this.extractStatusCodeFromMessage(error.message);\n const errorMessage = this.getErrorMessageForStatus(statusCode);\n throw new IOEventsApiError(errorMessage, statusCode);\n }\n\n // Check if error has response body with error details\n if (error.response?.body) {\n const errorBody = error.response.body;\n const statusCode =\n error.response.statusCode || IoEventsGlobals.STATUS_CODES.INTERNAL_SERVER_ERROR;\n const message =\n errorBody.message || errorBody.error || this.getErrorMessageForStatus(statusCode);\n\n // Handle conflict error with special header\n if (\n statusCode === IoEventsGlobals.STATUS_CODES.CONFLICT &&\n error.response.headers?.[IoEventsGlobals.HEADERS.CONFLICTING_ID]\n ) {\n const conflictingId = error.response.headers[IoEventsGlobals.HEADERS.CONFLICTING_ID];\n throw new IOEventsApiError(\n `Provider already exists with conflicting ID: ${conflictingId}`,\n statusCode,\n 'CONFLICT_ERROR',\n `Conflicting provider ID: ${conflictingId}`\n );\n }\n\n throw new IOEventsApiError(message, statusCode, errorBody.error_code, errorBody.details);\n }\n\n // Handle network errors\n if (error.code === 'ENOTFOUND' || error.code === 'ECONNREFUSED') {\n throw new IOEventsApiError(\n 'Network error: Unable to connect to Adobe I/O Events API',\n IoEventsGlobals.STATUS_CODES.INTERNAL_SERVER_ERROR,\n 'NETWORK_ERROR'\n );\n }\n\n // Handle timeout errors\n if (error.code === 'ETIMEDOUT') {\n throw new IOEventsApiError(\n 'Request timeout: Adobe I/O Events API did not respond in time',\n IoEventsGlobals.STATUS_CODES.TIMEOUT,\n 'TIMEOUT_ERROR'\n );\n }\n\n // Handle JSON parsing errors\n if (error.message?.includes('JSON')) {\n throw new IOEventsApiError(\n 'Invalid response format from Adobe I/O Events API',\n IoEventsGlobals.STATUS_CODES.INTERNAL_SERVER_ERROR,\n 'PARSE_ERROR'\n );\n }\n\n // Handle validation errors\n if (\n error.message?.includes('is required') ||\n error.message?.includes('Invalid response format')\n ) {\n throw new IOEventsApiError(\n error.message,\n IoEventsGlobals.STATUS_CODES.BAD_REQUEST,\n 'VALIDATION_ERROR'\n );\n }\n\n // Generic error fallback\n throw new IOEventsApiError(\n `Failed to create provider: ${error.message || 'Unknown error occurred'}`,\n IoEventsGlobals.STATUS_CODES.INTERNAL_SERVER_ERROR,\n 'UNKNOWN_ERROR'\n );\n }\n\n /**\n * Extracts the status code from RestClient error message\n *\n * @param errorMessage - Error message like \"HTTP error! status: 404\"\n * @returns The HTTP status code\n */\n private extractStatusCodeFromMessage(errorMessage: string): number {\n const match = errorMessage.match(/HTTP error! status:\\s*(\\d+)/);\n return match ? parseInt(match[1]!, 10) : IoEventsGlobals.STATUS_CODES.INTERNAL_SERVER_ERROR;\n }\n\n /**\n * Get specific error message based on HTTP status code\n */\n private getErrorMessageForStatus(status: number): string {\n switch (status) {\n case IoEventsGlobals.STATUS_CODES.UNAUTHORIZED:\n return 'Unauthorized: Invalid or expired access token';\n case IoEventsGlobals.STATUS_CODES.FORBIDDEN:\n return 'Forbidden: Insufficient permissions or invalid scopes, or attempt to create non multi-instance provider';\n case IoEventsGlobals.STATUS_CODES.NOT_FOUND:\n return 'Provider metadata provided in the input model does not exist';\n case IoEventsGlobals.STATUS_CODES.CONFLICT:\n return 'The event provider already exists';\n case IoEventsGlobals.STATUS_CODES.INTERNAL_SERVER_ERROR:\n return 'Internal server error occurred while creating provider';\n default:\n return `HTTP ${status}: Provider creation failed`;\n }\n }\n}\n\nexport default Create;\n","/**\n * <license header>\n */\n\nimport RestClient from '../../../integration/rest-client';\nimport { IOEventsApiError, IoEventsGlobals } from '../../types';\n\n/**\n * Delete Provider Service\n *\n * Handles deletion of event providers in Adobe I/O Events.\n * Implements the DELETE /events/{consumerOrgId}/{projectId}/{workspaceId}/providers/{providerId} endpoint.\n */\nexport default class Delete {\n private readonly endpoint = IoEventsGlobals.BASE_URL;\n private readonly restClient: RestClient;\n\n /**\n * Creates an instance of Delete service\n *\n * @param clientId - Client ID from Adobe Developer Console\n * @param consumerId - Project Organization ID\n * @param projectId - Project ID from Adobe Developer Console\n * @param workspaceId - Workspace ID from Adobe Developer Console\n * @param accessToken - IMS token for authentication\n */\n constructor(\n private readonly clientId: string,\n private readonly consumerId: string,\n private readonly projectId: string,\n private readonly workspaceId: string,\n private readonly accessToken: string\n ) {\n if (!clientId?.trim()) {\n throw new Error('clientId is required and cannot be empty');\n }\n if (!consumerId?.trim()) {\n throw new Error('consumerId is required and cannot be empty');\n }\n if (!projectId?.trim()) {\n throw new Error('projectId is required and cannot be empty');\n }\n if (!workspaceId?.trim()) {\n throw new Error('workspaceId is required and cannot be empty');\n }\n if (!accessToken?.trim()) {\n throw new Error('accessToken is required and cannot be empty');\n }\n\n this.restClient = new RestClient();\n }\n\n /**\n * Delete a provider by ID\n *\n * @param providerId - The ID of the provider to delete\n * @returns Promise<void> - Resolves when provider is successfully deleted\n * @throws IOEventsApiError - When the API request fails\n */\n async execute(providerId: string): Promise<void> {\n try {\n // Validate required parameters\n if (!providerId?.trim()) {\n throw new Error('providerId is required and cannot be empty');\n }\n\n // Build the API URL\n const url = `${this.endpoint}/events/${this.consumerId}/${this.projectId}/${this.workspaceId}/providers/${providerId}`;\n\n // Prepare headers\n const headers = {\n Authorization: `Bearer ${this.accessToken}`,\n 'x-api-key': this.clientId,\n Accept: 'application/hal+json',\n 'Content-Type': 'application/json',\n };\n\n // Make the DELETE request\n await this.restClient.delete(url, headers);\n\n // DELETE requests with 204 response don't return content\n // Success is indicated by no exception being thrown\n } catch (error: any) {\n // Handle different types of errors\n this.handleError(error);\n }\n }\n\n /**\n * Handle and transform errors from the API call\n * @private\n * @param error - The caught error\n * @throws IOEventsApiError - Transformed error with proper details\n */\n private handleError(error: any): never {\n // Check if it's an HTTP error from RestClient (e.g., \"HTTP error! status: 404\")\n if (error instanceof Error && error.message.includes('HTTP error! status:')) {\n const statusCode = this.extractStatusCodeFromMessage(error.message);\n const errorMessage = this.getErrorMessageForStatus(statusCode);\n\n throw new IOEventsApiError(errorMessage, statusCode);\n }\n\n // Handle HTTP errors from RestClient\n if (error.response) {\n const status = this.extractStatusCode(error);\n const errorMessage = this.getErrorMessageForStatus(status);\n throw new IOEventsApiError(errorMessage, status, 'API_ERROR');\n }\n\n // Handle network errors\n if (error.code === 'ENOTFOUND' || error.code === 'ECONNREFUSED') {\n throw new IOEventsApiError(\n 'Network error: Unable to connect to Adobe I/O Events API',\n IoEventsGlobals.STATUS_CODES.INTERNAL_SERVER_ERROR,\n 'NETWORK_ERROR'\n );\n }\n\n // Handle timeout errors\n if (error.code === 'ETIMEDOUT' || error.message?.includes('timeout')) {\n throw new IOEventsApiError(\n 'Request timeout: Adobe I/O Events API did not respond in time',\n IoEventsGlobals.STATUS_CODES.TIMEOUT,\n 'TIMEOUT_ERROR'\n );\n }\n\n // Handle JSON parsing errors\n if (error.message?.includes('JSON')) {\n throw new IOEventsApiError(\n 'Invalid response format from Adobe I/O Events API',\n IoEventsGlobals.STATUS_CODES.INTERNAL_SERVER_ERROR,\n 'PARSE_ERROR'\n );\n }\n\n // Handle validation errors (from provider ID validation)\n if (error.message?.includes('required') || error.message?.includes('empty')) {\n throw new IOEventsApiError(\n `Validation error: ${error.message}`,\n IoEventsGlobals.STATUS_CODES.BAD_REQUEST,\n 'VALIDATION_ERROR'\n );\n }\n\n // Handle generic errors\n if (error instanceof Error) {\n throw new IOEventsApiError(\n `Failed to delete provider: ${error.message}`,\n IoEventsGlobals.STATUS_CODES.INTERNAL_SERVER_ERROR,\n 'UNKNOWN_ERROR'\n );\n }\n\n // Handle unknown error types\n throw new IOEventsApiError(\n 'Unexpected error: Unknown error occurred',\n IoEventsGlobals.STATUS_CODES.INTERNAL_SERVER_ERROR,\n 'UNKNOWN_ERROR'\n );\n }\n\n /**\n * Extract status code from error response\n */\n private extractStatusCode(error: any): number {\n return (\n error.response?.status || error.status || IoEventsGlobals.STATUS_CODES.INTERNAL_SERVER_ERROR\n );\n }\n\n /**\n * Extracts the status code from RestClient error message\n *\n * @param errorMessage - Error message like \"HTTP error! status: 404\"\n * @returns The HTTP status code\n */\n private extractStatusCodeFromMessage(errorMessage: string): number {\n const match = errorMessage.match(/HTTP error! status:\\s*(\\d+)/);\n return match ? parseInt(match[1]!, 10) : IoEventsGlobals.STATUS_CODES.INTERNAL_SERVER_ERROR;\n }\n\n /**\n * Get appropriate error message for HTTP status code\n */\n private getErrorMessageForStatus(status: number): string {\n switch (status) {\n case IoEventsGlobals.STATUS_CODES.UNAUTHORIZED:\n return 'Unauthorized: Invalid or expired access token';\n case IoEventsGlobals.STATUS_CODES.FORBIDDEN:\n return 'Forbidden: Insufficient permissions to delete provider';\n case IoEventsGlobals.STATUS_CODES.NOT_FOUND:\n return 'Provider not found: The specified provider ID does not exist';\n case IoEventsGlobals.STATUS_CODES.INTERNAL_SERVER_ERROR:\n return 'Internal server error occurred while deleting provider';\n default:\n return `HTTP ${status}: Provider deletion failed`;\n }\n }\n}\n","/**\n * <license header>\n */\n\nimport List from './list';\nimport Get from './get';\nimport Create from './create';\nimport Delete from './delete';\nimport { IOEventsApiError } from '../types';\nimport { Provider } from './types';\nimport { GetProviderQueryParams } from './get/types';\nimport { ListProvidersQueryParams } from './list/types';\nimport { ProviderInputModel } from './create/types';\n\n/**\n * Providers service for Adobe I/O Events\n *\n * This class provides methods to interact with event providers in Adobe I/O Events.\n * It handles authentication and provides a clean interface for provider operations.\n */\nclass ProviderManager {\n private readonly listService: List;\n private readonly getService: Get;\n private readonly createService: Create;\n private readonly deleteService: Delete;\n\n /**\n * Constructor for Providers service\n *\n * @param clientId - Client ID from Adobe Developer Console (x-api-key header)\n * @param consumerId - Project Organization ID from Adobe Developer Console\n * @param projectId - Project ID from Adobe Developer Console\n * @param workspaceId - Workspace ID from Adobe Developer Console\n * @param accessToken - IMS token for authentication (Bearer token)\n */\n constructor(\n private readonly clientId: string,\n private readonly consumerId: string,\n private readonly projectId: string,\n private readonly workspaceId: string,\n private readonly accessToken: string\n ) {\n this.listService = new List(clientId, consumerId, projectId, workspaceId, accessToken);\n this.getService = new Get(clientId, consumerId, projectId, workspaceId, accessToken);\n this.createService = new Create(clientId, consumerId, projectId, workspaceId, accessToken);\n this.deleteService = new Delete(clientId, consumerId, projectId, workspaceId, accessToken);\n }\n\n /**\n * List all event providers entitled to the provided organization ID\n *\n * @param queryParams - Optional query parameters for filtering providers\n * @param queryParams.providerMetadataId - Filter by provider metadata id\n * @param queryParams.instanceId - Filter by instance id\n * @param queryParams.providerMetadataIds - List of provider metadata ids to filter (mutually exclusive with providerMetadataId)\n * @param queryParams.eventmetadata - Boolean to fetch provider's event metadata (default: false)\n * @returns Promise<Provider[]> - Array of providers\n * @throws IOEventsApiError - When API call fails with specific error details\n *\n * @example\n * ```typescript\n * // List all providers\n * const providers = await providersService.list();\n *\n * // Filter by provider metadata ID\n * const customProviders = await providersService.list({\n * providerMetadataId: '3rd_party_custom_events'\n * });\n *\n * // Include event metadata in response\n * const providersWithMetadata = await providersService.list({\n * eventmetadata: true\n * });\n * ```\n */\n async list(queryParams: ListProvidersQueryParams = {}): Promise<Provider[]> {\n try {\n return await this.listService.execute(queryParams);\n } catch (error) {\n // Re-throw IOEventsApiError as-is, or wrap other errors\n if (error instanceof IOEventsApiError) {\n throw error;\n }\n throw new IOEventsApiError(\n `Unexpected error in providers list: ${error instanceof Error ? error.message : 'Unknown error'}`,\n 500,\n 'UNEXPECTED_ERROR'\n );\n }\n }\n\n /**\n * Get a specific event provider by its ID\n *\n * @param providerId - The ID of the provider to retrieve\n * @param queryParams - Optional query parameters\n * @param queryParams.eventmetadata - Boolean to fetch provider's event metadata (default: false)\n * @returns Promise<Provider> - The provider details\n * @throws IOEventsApiError - When API call fails with specific error details\n *\n * @example\n * ```typescript\n * // Get basic provider details\n * const provider = await providersService.get('provider-123');\n *\n * // Get provider details with event metadata\n * const providerWithMetadata = await providersService.get('provider-123', {\n * eventmetadata: true\n * });\n * ```\n */\n async get(providerId: string, queryParams: GetProviderQueryParams = {}): Promise<Provider> {\n try {\n return await this.getService.execute(providerId, queryParams);\n } catch (error) {\n // Re-throw IOEventsApiError as-is, or wrap other errors\n if (error instanceof IOEventsApiError) {\n throw error;\n }\n throw new IOEventsApiError(\n `Unexpected error in providers get: ${error instanceof Error ? error.message : 'Unknown error'}`,\n 500,\n 'UNEXPECTED_ERROR'\n );\n }\n }\n\n /**\n * Create a new event provider\n *\n * @param providerData - Provider input data\n * @param providerData.label - The label of this event provider (required)\n * @param providerData.description - Optional description for the provider\n * @param providerData.docs_url - Optional documentation URL for the provider\n * @param providerData.provider_metadata - Optional provider metadata ID (defaults to '3rd_party_custom_events')\n * @param providerData.instance_id - Optional technical instance ID\n * @param providerData.data_residency_region - Optional data residency region (defaults to 'va6')\n * @returns Promise<Provider> - The created provider\n * @throws IOEventsApiError - When API call fails with specific error details\n *\n * @example\n * ```typescript\n * // Create a basic provider\n * const provider = await providersService.create({\n * label: 'My Event Provider'\n * });\n *\n * // Create a provider with custom details\n * const customProvider = await providersService.create({\n * label: 'My Custom Provider',\n * description: 'Provider for custom business events',\n * provider_metadata: '3rd_party_custom_events',\n * instance_id: 'production-instance'\n * });\n * ```\n */\n async create(providerData: ProviderInputModel): Promise<Provider> {\n try {\n return await this.createService.execute(providerData);\n } catch (error) {\n // Re-throw IOEventsApiError as-is, or wrap other errors\n if (error instanceof IOEventsApiError) {\n throw error;\n }\n throw new IOEventsApiError(\n `Unexpected error in providers create: ${error instanceof Error ? error.message : 'Unknown error'}`,\n 500,\n 'UNEXPECTED_ERROR'\n );\n }\n }\n\n /**\n * Delete an event provider by ID\n *\n * @param providerId - The ID of the provider to delete\n * @returns Promise<void> - Resolves when provider is successfully deleted\n * @throws IOEventsApiError - When API call fails with specific error details\n *\n * @example\n * ```typescript\n * // Delete a provider by ID\n * await providersService.delete('provider-123');\n * console.log('Provider deleted successfully');\n * ```\n */\n async delete(providerId: string): Promise<void> {\n try {\n return await this.deleteService.execute(providerId);\n } catch (error) {\n // Re-throw IOEventsApiError as-is, or wrap other errors\n if (error instanceof IOEventsApiError) {\n throw error;\n }\n throw new IOEventsApiError(\n `Unexpected error in providers delete: ${error instanceof Error ? error.message : 'Unknown error'}`,\n 500,\n 'UNEXPECTED_ERROR'\n );\n }\n }\n}\n\nexport default ProviderManager;\n","/**\n * <license header>\n */\n\nimport RestClient from '../../../integration/rest-client';\nimport { IOEventsApiError, IoEventsGlobals } from '../../types';\nimport { EventMetadata } from '../types';\nimport { EventMetadataListResponse } from './types';\n\n/**\n * Service class for listing all event metadata for a provider\n *\n * Handles: GET /events/providers/{providerId}/eventmetadata\n */\nexport default class List {\n private readonly restClient: RestClient;\n\n /**\n * Creates an instance of List service\n *\n * @param clientId - The Adobe I/O client ID (API key)\n * @param consumerId - The consumer organization ID\n * @param projectId - The project ID\n * @param workspaceId - The workspace ID\n * @param accessToken - The access token for authentication\n */\n constructor(\n private readonly clientId: string,\n private readonly consumerId: string,\n private readonly projectId: string,\n private readonly workspaceId: string,\n private readonly accessToken: string\n ) {\n if (!clientId?.trim()) {\n throw new Error('clientId is required and cannot be empty');\n }\n if (!consumerId?.trim()) {\n throw new Error('consumerId is required and cannot be empty');\n }\n if (!projectId?.trim()) {\n throw new Error('projectId is required and cannot be empty');\n }\n if (!workspaceId?.trim()) {\n throw new Error('workspaceId is required and cannot be empty');\n }\n if (!accessToken?.trim()) {\n throw new Error('accessToken is required and cannot be empty');\n }\n\n this.restClient = new RestClient();\n }\n\n /**\n * Retrieves all event metadata for a provider with automatic pagination\n *\n * This method automatically follows pagination links to fetch all event metadata\n * across multiple pages, returning a complete array of all event metadata.\n *\n * @param providerId - The ID of the provider to fetch event metadata for\n * @returns Promise<EventMetadata[]> - Array of all event metadata across all pages\n * @throws IOEventsApiError - When the API request fails\n */\n async execute(providerId: string): Promise<EventMetadata[]> {\n if (!providerId?.trim()) {\n throw new IOEventsApiError(\n 'providerId is required and cannot be empty',\n 400,\n 'VALIDATION_ERROR'\n );\n }\n\n try {\n const url = `${IoEventsGlobals.BASE_URL}/events/providers/${providerId}/eventmetadata`;\n return await this.fetchAllPages(url);\n } catch (error: any) {\n this.handleError(error);\n }\n }\n\n /**\n * Recursively fetches all pages of event metadata using pagination links\n *\n * @param url - The URL to fetch (either initial URL or next page URL)\n * @param accumulatedResults - Array to accumulate results across pages\n * @returns Promise<EventMetadata[]> - Complete array of all event metadata\n * @private\n */\n private async fetchAllPages(\n url: string,\n accumulatedResults: EventMetadata[] = []\n ): Promise<EventMetadata[]> {\n const response = await this.restClient.get(url, {\n Authorization: `Bearer ${this.accessToken}`,\n 'x-api-key': this.clientId,\n Accept: 'application/hal+json',\n });\n\n // Validate response format\n if (response === null || response === undefined) {\n throw new IOEventsApiError(\n 'Invalid response format: Expected object',\n IoEventsGlobals.STATUS_CODES.INTERNAL_SERVER_ERROR,\n 'PARSE_ERROR'\n );\n }\n\n if (typeof response !== 'object') {\n throw new IOEventsApiError(\n 'Invalid response format: Expected object',\n IoEventsGlobals.STATUS_CODES.INTERNAL_SERVER_ERROR,\n 'PARSE_ERROR'\n );\n }\n\n const data = response as EventMetadataListResponse;\n\n // Validate _embedded structure\n if (!data._embedded || !Array.isArray(data._embedded.eventmetadata)) {\n throw new IOEventsApiError(\n 'Invalid response format: Expected eventmetadata array',\n IoEventsGlobals.STATUS_CODES.INTERNAL_SERVER_ERROR,\n 'PARSE_ERROR'\n );\n }\n\n const currentPageResults = data._embedded.eventmetadata;\n\n // Accumulate results from current page\n const allResults = [...accumulatedResults, ...currentPageResults];\n\n // Check if there's a next page\n const nextPageUrl = data._links?.next?.href;\n\n if (nextPageUrl) {\n // Recursively fetch the next page\n return await this.fetchAllPages(nextPageUrl, allResults);\n }\n\n // No more pages, return all accumulated results\n return allResults;\n }\n\n /**\n * Handles errors from the API request\n *\n * @param error - The error object from the API request\n * @throws IOEventsApiError - Always throws with appropriate error details\n */\n private handleError(error: any): never {\n // Check if it's an HTTP error from RestClient (e.g., \"HTTP error! status: 404\")\n if (error instanceof Error && error.message.includes('HTTP error! status:')) {\n const statusCode = this.extractStatusCodeFromMessage(error.message);\n const errorMessage = this.getErrorMessageForStatus(statusCode);\n\n throw new IOEventsApiError(errorMessage, statusCode);\n }\n\n // Check if it's a structured API error response\n if (error.response) {\n const statusCode = this.extractStatusCode(error);\n const errorMessage =\n error.response.body?.message || this.getErrorMessageForStatus(statusCode);\n\n throw new IOEventsApiError(\n errorMessage,\n statusCode,\n error.response.body,\n error.response.headers\n );\n }\n\n // Handle other types of errors (network, timeout, parsing, etc.)\n let errorMessage: string;\n let statusCode: number;\n\n if (error instanceof Error) {\n if (error.message.includes('timeout') || error.message.includes('ETIMEDOUT')) {\n errorMessage = 'Request timeout while listing event metadata';\n statusCode = IoEventsGlobals.STATUS_CODES.REQUEST_TIMEOUT;\n } else if (error.message.includes('JSON') || error.message.includes('parse')) {\n errorMessage = 'Invalid response format from Adobe I/O Events API';\n statusCode = IoEventsGlobals.STATUS_CODES.INTERNAL_SERVER_ERROR;\n throw new IOEventsApiError(errorMessage, statusCode, 'PARSE_ERROR');\n } else {\n errorMessage = `Network error: ${error.message}`;\n statusCode = IoEventsGlobals.STATUS_CODES.INTERNAL_SERVER_ERROR;\n }\n } else {\n errorMessage = `API Error: HTTP ${IoEventsGlobals.STATUS_CODES.INTERNAL_SERVER_ERROR}`;\n statusCode = IoEventsGlobals.STATUS_CODES.INTERNAL_SERVER_ERROR;\n }\n\n throw new IOEventsApiError(errorMessage, statusCode);\n }\n\n /**\n * Extracts the status code from the error response\n *\n * @param error - The error object\n * @returns The HTTP status code\n */\n private extractStatusCode(error: any): number {\n return error.response?.status || IoEventsGlobals.STATUS_CODES.INTERNAL_SERVER_ERROR;\n }\n\n /**\n * Extracts the status code from RestClient error message\n *\n * @param errorMessage - Error message like \"HTTP error! status: 404\"\n * @returns The HTTP status code\n */\n private extractStatusCodeFromMessage(errorMessage: string): number {\n const match = errorMessage.match(/HTTP error! status:\\s*(\\d+)/);\n return match ? parseInt(match[1]!, 10) : IoEventsGlobals.STATUS_CODES.INTERNAL_SERVER_ERROR;\n }\n\n /**\n * Gets a human-readable error message for a given HTTP status code\n *\n * @param statusCode - The HTTP status code\n * @returns A descriptive error message\n */\n private getErrorMessageForStatus(statusCode: number): string {\n switch (statusCode) {\n case IoEventsGlobals.STATUS_CODES.BAD_REQUEST:\n return 'Invalid request parameters for listing event metadata';\n case IoEventsGlobals.STATUS_CODES.UNAUTHORIZED:\n return 'Authentication failed. Please check your access token';\n case IoEventsGlobals.STATUS_CODES.FORBIDDEN:\n return 'Access forbidden. You do not have permission to access event metadata';\n case IoEventsGlobals.STATUS_CODES.NOT_FOUND:\n return 'Provider not found or no event metadata available';\n case IoEventsGlobals.STATUS_CODES.INTERNAL_SERVER_ERROR:\n return 'Internal server error occurred while listing event metadata';\n default:\n return `Unexpected error occurred: HTTP ${statusCode}`;\n }\n }\n}\n","/**\n * <license header>\n */\n\nimport RestClient from '../../../integration/rest-client';\nimport { IOEventsApiError, IoEventsGlobals } from '../../types';\nimport { EventMetadata } from '../types';\n\n/**\n * Service class for getting specific event metadata by provider ID and event code\n */\nexport default class Get {\n private readonly restClient: RestClient;\n\n /**\n * Creates an instance of Get service\n *\n * @param clientId - The Adobe I/O client ID (API key)\n * @param consumerId - The consumer organization ID\n * @param projectId - The project ID\n * @param workspaceId - The workspace ID\n * @param accessToken - The access token for authentication\n */\n constructor(\n private readonly clientId: string,\n private readonly consumerId: string,\n private readonly projectId: string,\n private readonly workspaceId: string,\n private readonly accessToken: string\n ) {\n if (!clientId?.trim()) {\n throw new Error('clientId is required and cannot be empty');\n }\n if (!consumerId?.trim()) {\n throw new Error('consumerId is required and cannot be empty');\n }\n if (!projectId?.trim()) {\n throw new Error('projectId is required and cannot be empty');\n }\n if (!workspaceId?.trim()) {\n throw new Error('workspaceId is required and cannot be empty');\n }\n if (!accessToken?.trim()) {\n throw new Error('accessToken is required and cannot be empty');\n }\n\n this.restClient = new RestClient();\n }\n\n /**\n * Retrieves specific event metadata by provider ID and event code\n *\n * @param providerId - The ID of the provider\n * @param eventCode - The event code to get metadata for\n * @returns Promise<EventMetadata> - The event metadata\n * @throws IOEventsApiError - When the API request fails\n */\n async execute(providerId: string, eventCode: string): Promise<EventMetadata> {\n if (!providerId?.trim()) {\n throw new IOEventsApiError(\n 'providerId is required and cannot be empty',\n 400,\n 'VALIDATION_ERROR'\n );\n }\n if (!eventCode?.trim()) {\n throw new IOEventsApiError(\n 'eventCode is required and cannot be empty',\n 400,\n 'VALIDATION_ERROR'\n );\n }\n\n try {\n const url = `${IoEventsGlobals.BASE_URL}/events/providers/${providerId}/eventmetadata/${encodeURIComponent(eventCode)}`;\n\n const response = await this.restClient.get(url, {\n Authorization: `Bearer ${this.accessToken}`,\n 'x-api-key': this.clientId,\n Accept: 'application/hal+json',\n });\n\n // Validate response format\n if (response === null || response === undefined) {\n throw new IOEventsApiError(\n 'Invalid response format: Expected object',\n IoEventsGlobals.STATUS_CODES.INTERNAL_SERVER_ERROR,\n 'PARSE_ERROR'\n );\n }\n\n if (typeof response !== 'object') {\n throw new IOEventsApiError(\n 'Invalid response format: Expected object',\n IoEventsGlobals.STATUS_CODES.INTERNAL_SERVER_ERROR,\n 'PARSE_ERROR'\n );\n }\n\n return response as EventMetadata;\n } catch (error: any) {\n this.handleError(error);\n }\n }\n\n /**\n * Handles errors from the API request\n *\n * @param error - The error object from the API request\n * @throws IOEventsApiError - Always throws with appropriate error details\n */\n private handleError(error: any): never {\n // Check if it's an HTTP error from RestClient (e.g., \"HTTP error! status: 404\")\n if (error instanceof Error && error.message.includes('HTTP error! status:')) {\n const statusCode = this.extractStatusCodeFromMessage(error.message);\n const errorMessage = this.getErrorMessageForStatus(statusCode);\n\n throw new IOEventsApiError(errorMessage, statusCode);\n }\n\n // Check if it's a structured API error response\n if (error.response) {\n const statusCode = this.extractStatusCode(error);\n const errorMessage =\n error.response.body?.message || this.getErrorMessageForStatus(statusCode);\n\n throw new IOEventsApiError(\n errorMessage,\n statusCode,\n error.response.body?.error_code,\n error.response.body?.details\n );\n }\n\n // Handle other types of errors (network, timeout, parsing, etc.)\n let errorMessage: string;\n let statusCode: number;\n\n if (error instanceof Error) {\n if (error.message.includes('timeout') || error.message.includes('ETIMEDOUT')) {\n errorMessage = 'Request timeout while getting event metadata';\n statusCode = IoEventsGlobals.STATUS_CODES.REQUEST_TIMEOUT;\n } else if (error.message.includes('JSON') || error.message.includes('parse')) {\n errorMessage = 'Invalid response format from Adobe I/O Events API';\n statusCode = IoEventsGlobals.STATUS_CODES.INTERNAL_SERVER_ERROR;\n throw new IOEventsApiError(errorMessage, statusCode, 'PARSE_ERROR');\n } else {\n errorMessage = `Network error: ${error.message}`;\n statusCode = IoEventsGlobals.STATUS_CODES.INTERNAL_SERVER_ERROR;\n }\n } else {\n errorMessage = `API Error: HTTP ${IoEventsGlobals.STATUS_CODES.INTERNAL_SERVER_ERROR}`;\n statusCode = IoEventsGlobals.STATUS_CODES.INTERNAL_SERVER_ERROR;\n }\n\n throw new IOEventsApiError(errorMessage, statusCode);\n }\n\n /**\n * Extracts the status code from the error response\n *\n * @param error - The error object\n * @returns The HTTP status code\n */\n private extractStatusCode(error: any): number {\n return error.response?.status || IoEventsGlobals.STATUS_CODES.INTERNAL_SERVER_ERROR;\n }\n\n /**\n * Extracts the status code from RestClient error message\n *\n * @param errorMessage - Error message like \"HTTP error! status: 404\"\n * @returns The HTTP status code\n */\n private extractStatusCodeFromMessage(errorMessage: string): number {\n const match = errorMessage.match(/HTTP error! status:\\s*(\\d+)/);\n return match ? parseInt(match[1]!, 10) : IoEventsGlobals.STATUS_CODES.INTERNAL_SERVER_ERROR;\n }\n\n /**\n * Gets a human-readable error message for a given HTTP status code\n *\n * @param statusCode - The HTTP status code\n * @returns A descriptive error message\n */\n private getErrorMessageForStatus(statusCode: number): string {\n switch (statusCode) {\n case IoEventsGlobals.STATUS_CODES.BAD_REQUEST:\n return 'Invalid request parameters for getting event metadata';\n case IoEventsGlobals.STATUS_CODES.UNAUTHORIZED:\n return 'Authentication failed. Please check your access token';\n case IoEventsGlobals.STATUS_CODES.FORBIDDEN:\n return 'Access forbidden. You do not have permission to access this event metadata';\n case IoEventsGlobals.STATUS_CODES.NOT_FOUND:\n return 'Event metadata not found for the specified provider and event code';\n case IoEventsGlobals.STATUS_CODES.INTERNAL_SERVER_ERROR:\n return 'Internal server error occurred while getting event metadata';\n default:\n return `Unexpected error occurred: HTTP ${statusCode}`;\n }\n }\n}\n","/**\n * <license header>\n */\n\nimport RestClient from '../../../integration/rest-client';\nimport { IOEventsApiError, IoEventsGlobals } from '../../types';\nimport { EventMetadata } from '../types';\nimport { EventMetadataInputModel } from './types';\n\n/**\n * Create event metadata for Adobe I/O Events\n *\n * This class handles the creation of event metadata for a specific provider.\n * It validates the input data and makes the appropriate API call to create\n * the event metadata in Adobe I/O Events.\n */\nclass Create {\n private readonly endpoint: string = IoEventsGlobals.BASE_URL;\n private readonly restClient: RestClient;\n\n /**\n * Constructor for Create event metadata service\n *\n * @param clientId - Client ID from Adobe Developer Console (x-api-key header)\n * @param consumerId - Project Organization ID from Adobe Developer Console\n * @param projectId - Project ID from Adobe Developer Console\n * @param workspaceId - Workspace ID from Adobe Developer Console\n * @param accessToken - IMS token for authentication (Bearer token)\n */\n constructor(\n private readonly clientId: string,\n private readonly consumerId: string,\n private readonly projectId: string,\n private readonly workspaceId: string,\n private readonly accessToken: string\n ) {\n if (!clientId?.trim()) {\n throw new Error('clientId is required and cannot be empty');\n }\n if (!consumerId?.trim()) {\n throw new Error('consumerId is required and cannot be empty');\n }\n if (!projectId?.trim()) {\n throw new Error('projectId is required and cannot be empty');\n }\n if (!workspaceId?.trim()) {\n throw new Error('workspaceId is required and cannot be empty');\n }\n if (!accessToken?.trim()) {\n throw new Error('accessToken is required and cannot be empty');\n }\n\n this.restClient = new RestClient();\n }\n\n /**\n * Execute the create event metadata API call\n *\n * @param providerId - The ID of the provider to create event metadata for\n * @param eventMetadataData - The event metadata input model\n * @returns Promise<EventMetadata> - The created event metadata\n * @throws IOEventsApiError - When API call fails with specific error details\n */\n async execute(\n providerId: string,\n eventMetadataData: EventMetadataInputModel\n ): Promise<EventMetadata> {\n try {\n // Validate required parameters\n if (!providerId?.trim()) {\n throw new IOEventsApiError(\n 'providerId is required and cannot be empty',\n 400,\n 'VALIDATION_ERROR'\n );\n }\n\n if (!eventMetadataData) {\n throw new IOEventsApiError('eventMetadataData is required', 400, 'VALIDATION_ERROR');\n }\n\n // Validate required fields in eventMetadataData\n this.validateEventMetadataInput(eventMetadataData);\n\n // Convert the input data for API submission\n const apiPayload = this.convertToApiPayload(eventMetadataData);\n\n // Build the API URL\n const url = `${this.endpoint}/events/${this.consumerId}/${this.projectId}/${this.workspaceId}/providers/${providerId}/eventmetadata`;\n\n // Prepare headers as required by the API\n const headers = {\n Authorization: `Bearer ${this.accessToken}`,\n 'x-api-key': this.clientId,\n Accept: 'application/hal+json',\n 'Content-Type': 'application/json',\n };\n\n // Make the POST request\n const response: EventMetadata = await this.restClient.post(url, headers, apiPayload);\n\n // Validate response format\n if (response === null || response === undefined) {\n throw new IOEventsApiError(\n 'Invalid response format: Expected object',\n IoEventsGlobals.STATUS_CODES.INTERNAL_SERVER_ERROR\n );\n }\n\n if (typeof response !== 'object') {\n throw new IOEventsApiError(\n 'Invalid response format: Expected object',\n IoEventsGlobals.STATUS_CODES.INTERNAL_SERVER_ERROR\n );\n }\n\n return response;\n } catch (error: any) {\n // Handle different types of errors\n this.handleError(error);\n }\n }\n\n /**\n * Validates the event metadata input data\n *\n * @param eventMetadataData - The event metadata input to validate\n * @throws Error - When validation fails\n * @private\n */\n private validateEventMetadataInput(eventMetadataData: EventMetadataInputModel): void {\n const { description, label, event_code, sample_event_template } = eventMetadataData;\n\n // Validate required fields\n if (!description?.trim()) {\n throw new IOEventsApiError(\n 'description is required and cannot be empty',\n 400,\n 'VALIDATION_ERROR'\n );\n }\n\n if (!label?.trim()) {\n throw new IOEventsApiError('label is required and cannot be empty', 400, 'VALIDATION_ERROR');\n }\n\n if (!event_code?.trim()) {\n throw new IOEventsApiError(\n 'event_code is required and cannot be empty',\n 400,\n 'VALIDATION_ERROR'\n );\n }\n\n // Validate field lengths\n if (description.length > 255) {\n throw new Error('description cannot exceed 255 characters');\n }\n\n if (label.length > 255) {\n throw new Error('label cannot exceed 255 characters');\n }\n\n if (event_code.length > 255) {\n throw new Error('event_code cannot exceed 255 characters');\n }\n\n // Validate patterns (basic validation - API will do full validation)\n const descriptionPattern = /^[\\w\\s\\-_.(),:''`?#!]+$/;\n if (!descriptionPattern.test(description)) {\n throw new Error('description contains invalid characters');\n }\n\n const labelPattern = /^[\\w\\s\\-_.(),:''`?#!]+$/;\n if (!labelPattern.test(label)) {\n throw new Error('label contains invalid characters');\n }\n\n const eventCodePattern = /^[\\w\\-_.]+$/;\n if (!eventCodePattern.test(event_code)) {\n throw new Error('event_code contains invalid characters');\n }\n\n // Validate sample_event_template if provided\n if (sample_event_template !== undefined) {\n if (typeof sample_event_template !== 'object' || sample_event_template === null) {\n throw new Error('sample_event_template must be a valid JSON object');\n }\n\n try {\n // Check if the JSON string representation would exceed the base64 limit\n // Base64 encoding increases size by ~33%, so we check the JSON string length\n const jsonString = JSON.stringify(sample_event_template);\n const base64Length = Buffer.from(jsonString).toString('base64').length;\n\n if (base64Length > 87382) {\n throw new Error('sample_event_template JSON object is too large when base64 encoded');\n }\n } catch (error) {\n if (\n error instanceof Error &&\n error.message.includes('sample_event_template JSON object is too large')\n ) {\n throw error; // Re-throw our validation error\n }\n throw new Error('sample_event_template must be a valid JSON object');\n }\n }\n }\n\n /**\n * Converts the input data to the format expected by the API\n *\n * @param eventMetadataData - The event metadata input data\n * @returns The converted payload for the API\n * @private\n */\n private convertToApiPayload(eventMetadataData: EventMetadataInputModel): any {\n const { sample_event_template, ...rest } = eventMetadataData;\n\n const payload: any = { ...rest };\n\n // Convert sample_event_template from JSON object to base64 string if provided\n if (sample_event_template !== undefined) {\n payload.sample_event_template = Buffer.from(JSON.stringify(sample_event_template)).toString(\n 'base64'\n );\n }\n\n return payload;\n }\n\n /**\n * Handles errors from the API request\n *\n * @param error - The error object from the API request\n * @throws IOEventsApiError - Always throws with appropriate error details\n * @private\n */\n private handleError(error: any): never {\n // If it's already an IOEventsApiError, re-throw it\n if (error instanceof IOEventsApiError) {\n throw error;\n }\n\n // Check if it's an HTTP error from RestClient (e.g., \"HTTP error! status: 404\")\n if (error instanceof Error && error.message.includes('HTTP error! status:')) {\n const statusCode = this.extractStatusCodeFromMessage(error.message);\n const errorMessage = this.getErrorMessageForStatus(statusCode);\n\n throw new IOEventsApiError(errorMessage, statusCode);\n }\n\n // Check if it's a structured API error response\n if (error.response) {\n const statusCode = this.extractStatusCode(error);\n const errorMessage =\n error.response.body?.message || this.getErrorMessageForStatus(statusCode);\n\n throw new IOEventsApiError(\n errorMessage,\n statusCode,\n error.response.body?.error_code,\n error.response.body?.details\n );\n }\n\n // Handle other types of errors (network, timeout, parsing, etc.)\n let errorMessage: string;\n let statusCode: number;\n\n if (error instanceof Error) {\n if (error.message.includes('timeout') || error.message.includes('ETIMEDOUT')) {\n errorMessage = 'Request timeout while creating event metadata';\n statusCode = IoEventsGlobals.STATUS_CODES.REQUEST_TIMEOUT;\n } else if (\n error.message.includes('is required') ||\n error.message.includes('cannot be empty') ||\n error.message.includes('cannot exceed') ||\n error.message.includes('contains invalid characters') ||\n error.message.includes('must be a valid') ||\n error.message.includes('too large when base64 encoded')\n ) {\n // Validation errors should be thrown as-is with 400 status\n throw new IOEventsApiError(\n error.message,\n IoEventsGlobals.STATUS_CODES.BAD_REQUEST,\n 'VALIDATION_ERROR'\n );\n } else if (error.message.includes('JSON') || error.message.includes('parse')) {\n errorMessage = 'Invalid response format from Adobe I/O Events API';\n statusCode = IoEventsGlobals.STATUS_CODES.INTERNAL_SERVER_ERROR;\n } else {\n errorMessage = `Network error: ${error.message}`;\n statusCode = IoEventsGlobals.STATUS_CODES.INTERNAL_SERVER_ERROR;\n }\n } else {\n errorMessage = `API Error: HTTP ${IoEventsGlobals.STATUS_CODES.INTERNAL_SERVER_ERROR}`;\n statusCode = IoEventsGlobals.STATUS_CODES.INTERNAL_SERVER_ERROR;\n }\n\n throw new IOEventsApiError(errorMessage, statusCode);\n }\n\n /**\n * Extracts the status code from the error response\n *\n * @param error - The error object\n * @returns The HTTP status code\n * @private\n */\n private extractStatusCode(error: any): number {\n return error.response?.status || IoEventsGlobals.STATUS_CODES.INTERNAL_SERVER_ERROR;\n }\n\n /**\n * Extracts the status code from RestClient error message\n *\n * @param errorMessage - Error message like \"HTTP error! status: 404\"\n * @returns The HTTP status code\n * @private\n */\n private extractStatusCodeFromMessage(errorMessage: string): number {\n const match = errorMessage.match(/HTTP error! status:\\s*(\\d+)/);\n return match ? parseInt(match[1]!, 10) : IoEventsGlobals.STATUS_CODES.INTERNAL_SERVER_ERROR;\n }\n\n /**\n * Gets a human-readable error message based on HTTP status code\n *\n * @param statusCode - HTTP status code\n * @returns string - User-friendly error message\n * @private\n */\n private getErrorMessageForStatus(statusCode: number): string {\n switch (statusCode) {\n case IoEventsGlobals.STATUS_CODES.BAD_REQUEST:\n return 'Invalid request parameters for creating event metadata';\n case IoEventsGlobals.STATUS_CODES.UNAUTHORIZED:\n return 'Authentication failed. Please check your access token';\n case IoEventsGlobals.STATUS_CODES.FORBIDDEN:\n return 'Access forbidden. You do not have permission to create event metadata';\n case IoEventsGlobals.STATUS_CODES.NOT_FOUND:\n return 'Provider not found. The specified provider ID does not exist';\n case IoEventsGlobals.STATUS_CODES.INTERNAL_SERVER_ERROR:\n return 'Internal server error occurred while creating event metadata';\n default:\n return `Unexpected error occurred: HTTP ${statusCode}`;\n }\n }\n}\n\nexport default Create;\n","/**\n * <license header>\n */\n\nimport RestClient from '../../../integration/rest-client';\nimport { IOEventsApiError, IoEventsGlobals } from '../../types';\n\n/**\n * Delete all event metadata for a provider in Adobe I/O Events\n *\n * This class handles the deletion of all event metadata associated with a specific provider.\n * The operation returns 204 No Content on successful deletion.\n */\nclass Delete {\n private readonly endpoint: string = IoEventsGlobals.BASE_URL;\n private readonly restClient: RestClient;\n\n /**\n * Constructor for Delete event metadata service\n *\n * @param clientId - Client ID from Adobe Developer Console (x-api-key header)\n * @param consumerId - Project Organization ID from Adobe Developer Console\n * @param projectId - Project ID from Adobe Developer Console\n * @param workspaceId - Workspace ID from Adobe Developer Console\n * @param accessToken - IMS token for authentication (Bearer token)\n */\n constructor(\n private readonly clientId: string,\n private readonly consumerId: string,\n private readonly projectId: string,\n private readonly workspaceId: string,\n private readonly accessToken: string\n ) {\n if (!clientId?.trim()) {\n throw new Error('clientId is required and cannot be empty');\n }\n if (!consumerId?.trim()) {\n throw new Error('consumerId is required and cannot be empty');\n }\n if (!projectId?.trim()) {\n throw new Error('projectId is required and cannot be empty');\n }\n if (!workspaceId?.trim()) {\n throw new Error('workspaceId is required and cannot be empty');\n }\n if (!accessToken?.trim()) {\n throw new Error('accessToken is required and cannot be empty');\n }\n\n this.restClient = new RestClient();\n }\n\n /**\n * Execute the delete event metadata API call\n *\n * @param providerId - The ID of the provider to delete event metadata for\n * @param eventCode - Optional event code to delete specific event metadata. If not provided, deletes all event metadata for the provider\n * @returns Promise<void> - No content returned on successful deletion (204)\n * @throws IOEventsApiError - When API call fails with specific error details\n */\n async execute(providerId: string, eventCode?: string): Promise<void> {\n try {\n // Validate required parameters\n if (!providerId?.trim()) {\n throw new IOEventsApiError(\n 'providerId is required and cannot be empty',\n 400,\n 'VALIDATION_ERROR'\n );\n }\n\n // Validate eventCode if provided\n if (eventCode !== undefined && !eventCode?.trim()) {\n throw new IOEventsApiError(\n 'eventCode cannot be empty when provided',\n 400,\n 'VALIDATION_ERROR'\n );\n }\n\n // Build the API URL - append eventCode if provided for specific deletion\n let url = `${this.endpoint}/events/${this.consumerId}/${this.projectId}/${this.workspaceId}/providers/${providerId}/eventmetadata`;\n if (eventCode?.trim()) {\n url += `/${encodeURIComponent(eventCode.trim())}`;\n }\n\n // Prepare headers as required by the API\n const headers = {\n Authorization: `Bearer ${this.accessToken}`,\n 'x-api-key': this.clientId,\n Accept: 'application/hal+json',\n };\n\n // Make the DELETE request - RestClient should handle 204 No Content properly\n await this.restClient.delete(url, headers);\n\n // No return value for 204 No Content\n } catch (error: any) {\n // Handle different types of errors\n this.handleError(error);\n }\n }\n\n /**\n * Handles errors from the API request\n *\n * @param error - The error object from the API request\n * @throws IOEventsApiError - Always throws with appropriate error details\n * @private\n */\n private handleError(error: any): never {\n // If it's already an IOEventsApiError, re-throw it\n if (error instanceof IOEventsApiError) {\n throw error;\n }\n\n // Check if it's an HTTP error from RestClient (e.g., \"HTTP error! status: 404\")\n if (error instanceof Error && error.message.includes('HTTP error! status:')) {\n const statusCode = this.extractStatusCodeFromMessage(error.message);\n const errorMessage = this.getErrorMessageForStatus(statusCode);\n\n throw new IOEventsApiError(errorMessage, statusCode);\n }\n\n // Check if it's a structured API error response\n if (error.response) {\n const statusCode = this.extractStatusCode(error);\n const errorMessage =\n error.response.body?.message || this.getErrorMessageForStatus(statusCode);\n\n throw new IOEventsApiError(\n errorMessage,\n statusCode,\n error.response.body?.error_code,\n error.response.body?.details\n );\n }\n\n // Handle other types of errors (network, timeout, parsing, etc.)\n let errorMessage: string;\n let statusCode: number;\n\n if (error instanceof Error) {\n if (error.message.includes('timeout') || error.message.includes('ETIMEDOUT')) {\n errorMessage = 'Request timeout while deleting event metadata';\n statusCode = IoEventsGlobals.STATUS_CODES.REQUEST_TIMEOUT;\n } else if (\n error.message.includes('is required') ||\n error.message.includes('cannot be empty')\n ) {\n // Validation errors should be thrown as-is with 400 status\n throw new IOEventsApiError(\n error.message,\n IoEventsGlobals.STATUS_CODES.BAD_REQUEST,\n 'VALIDATION_ERROR'\n );\n } else if (error.message.includes('JSON') || error.message.includes('parse')) {\n errorMessage = 'Invalid response format from Adobe I/O Events API';\n statusCode = IoEventsGlobals.STATUS_CODES.INTERNAL_SERVER_ERROR;\n } else {\n errorMessage = `Network error: ${error.message}`;\n statusCode = IoEventsGlobals.STATUS_CODES.INTERNAL_SERVER_ERROR;\n }\n } else {\n errorMessage = `API Error: HTTP ${IoEventsGlobals.STATUS_CODES.INTERNAL_SERVER_ERROR}`;\n statusCode = IoEventsGlobals.STATUS_CODES.INTERNAL_SERVER_ERROR;\n }\n\n throw new IOEventsApiError(errorMessage, statusCode);\n }\n\n /**\n * Extracts the status code from the error response\n *\n * @param error - The error object\n * @returns The HTTP status code\n * @private\n */\n private extractStatusCode(error: any): number {\n return error.response?.status || IoEventsGlobals.STATUS_CODES.INTERNAL_SERVER_ERROR;\n }\n\n /**\n * Extracts the status code from RestClient error message\n *\n * @param errorMessage - Error message like \"HTTP error! status: 404\"\n * @returns The HTTP status code\n * @private\n */\n private extractStatusCodeFromMessage(errorMessage: string): number {\n const match = errorMessage.match(/HTTP error! status:\\s*(\\d+)/);\n return match ? parseInt(match[1]!, 10) : IoEventsGlobals.STATUS_CODES.INTERNAL_SERVER_ERROR;\n }\n\n /**\n * Gets a human-readable error message based on HTTP status code\n *\n * @param statusCode - HTTP status code\n * @returns string - User-friendly error message\n * @private\n */\n private getErrorMessageForStatus(statusCode: number): string {\n switch (statusCode) {\n case IoEventsGlobals.STATUS_CODES.UNAUTHORIZED:\n return 'Authentication failed. Please check your access token';\n case IoEventsGlobals.STATUS_CODES.FORBIDDEN:\n return 'Access forbidden. You do not have permission to delete event metadata';\n case IoEventsGlobals.STATUS_CODES.NOT_FOUND:\n return 'Provider or event metadata not found. The specified provider ID or event code does not exist';\n case IoEventsGlobals.STATUS_CODES.INTERNAL_SERVER_ERROR:\n return 'Internal server error occurred while deleting event metadata';\n default:\n return `Unexpected error occurred: HTTP ${statusCode}`;\n }\n }\n}\n\nexport default Delete;\n","/**\n * <license header>\n */\n\nimport List from './list';\nimport Get from './get';\nimport Create from './create';\nimport Delete from './delete';\nimport { IOEventsApiError } from '../types';\nimport { EventMetadata } from './types';\nimport { EventMetadataInputModel } from './create/types';\n\n/**\n * Main class for managing event metadata operations\n *\n * Provides methods to interact with Adobe I/O Events API for event metadata management.\n * Supports listing, getting, creating, and deleting event metadata for providers.\n */\nclass EventMetadataManager {\n private readonly listService: List;\n private readonly getService: Get;\n private readonly createService: Create;\n private readonly deleteService: Delete;\n\n /**\n * Creates an instance of EventMetadataManager\n *\n * @param clientId - Adobe I/O Client ID for API authentication\n * @param consumerId - Consumer organization ID\n * @param projectId - Project ID within the consumer organization\n * @param workspaceId - Workspace ID within the project\n * @param accessToken - Access token for API authentication\n */\n constructor(\n private readonly clientId: string,\n private readonly consumerId: string,\n private readonly projectId: string,\n private readonly workspaceId: string,\n private readonly accessToken: string\n ) {\n this.listService = new List(clientId, consumerId, projectId, workspaceId, accessToken);\n this.getService = new Get(clientId, consumerId, projectId, workspaceId, accessToken);\n this.createService = new Create(clientId, consumerId, projectId, workspaceId, accessToken);\n this.deleteService = new Delete(clientId, consumerId, projectId, workspaceId, accessToken);\n }\n\n /**\n * Lists all event metadata for a provider\n *\n * @param providerId - The ID of the provider to fetch event metadata for\n * @returns Promise<EventMetadata[]> - Array of event metadata\n * @throws IOEventsApiError - When the API request fails\n *\n * @example\n * // List all event metadata for a provider\n * const allMetadata = await eventMetadata.list('provider-123');\n */\n async list(providerId: string): Promise<EventMetadata[]> {\n try {\n return await this.listService.execute(providerId);\n } catch (error) {\n if (error instanceof IOEventsApiError) {\n throw error;\n }\n throw new IOEventsApiError(\n `Unexpected error in event metadata list: ${error instanceof Error ? error.message : 'Unknown error'}`,\n 500,\n 'UNEXPECTED_ERROR'\n );\n }\n }\n\n /**\n * Gets specific event metadata by provider ID and event code\n *\n * @param providerId - The ID of the provider\n * @param eventCode - The event code to get metadata for\n * @returns Promise<EventMetadata> - The event metadata\n * @throws IOEventsApiError - When the API request fails\n *\n * @example\n * // Get specific event metadata by event code\n * const specificMetadata = await eventMetadata.get('provider-123', 'user.created');\n */\n async get(providerId: string, eventCode: string): Promise<EventMetadata> {\n try {\n return await this.getService.execute(providerId, eventCode);\n } catch (error) {\n if (error instanceof IOEventsApiError) {\n throw error;\n }\n throw new IOEventsApiError(\n `Unexpected error in event metadata get: ${error instanceof Error ? error.message : 'Unknown error'}`,\n 500,\n 'UNEXPECTED_ERROR'\n );\n }\n }\n\n /**\n * Creates new event metadata for a provider\n *\n * @param providerId - The ID of the provider to create event metadata for\n * @param eventMetadataData - The event metadata input data\n * @returns Promise<EventMetadata> - The created event metadata\n * @throws IOEventsApiError - When the API request fails\n *\n * @example\n * // Create new event metadata\n * const newMetadata = await eventMetadata.create('provider-123', {\n * event_code: 'com.example.user.created',\n * label: 'User Created',\n * description: 'Triggered when a new user is created',\n * sample_event_template: { name: 'John Doe', email: 'john@example.com' } // JSON object\n * });\n */\n async create(\n providerId: string,\n eventMetadataData: EventMetadataInputModel\n ): Promise<EventMetadata> {\n try {\n return await this.createService.execute(providerId, eventMetadataData);\n } catch (error) {\n if (error instanceof IOEventsApiError) {\n throw error;\n }\n throw new IOEventsApiError(\n `Unexpected error in event metadata create: ${error instanceof Error ? error.message : 'Unknown error'}`,\n 500,\n 'UNEXPECTED_ERROR'\n );\n }\n }\n\n /**\n * Deletes event metadata for a provider\n *\n * @param providerId - The ID of the provider to delete event metadata for\n * @param eventCode - Optional event code to delete specific event metadata. If not provided, deletes all event metadata for the provider\n * @returns Promise<void> - No content returned on successful deletion\n * @throws IOEventsApiError - When the API request fails\n *\n * @example\n * // Delete all event metadata for a provider\n * await eventMetadata.delete('provider-123');\n *\n * @example\n * // Delete specific event metadata by event code\n * await eventMetadata.delete('provider-123', 'com.example.user.created');\n */\n async delete(providerId: string, eventCode?: string): Promise<void> {\n try {\n return await this.deleteService.execute(providerId, eventCode);\n } catch (error) {\n if (error instanceof IOEventsApiError) {\n throw error;\n }\n throw new IOEventsApiError(\n `Unexpected error in event metadata delete: ${error instanceof Error ? error.message : 'Unknown error'}`,\n 500,\n 'UNEXPECTED_ERROR'\n );\n }\n }\n}\n\nexport default EventMetadataManager;\n","/**\n * <license header>\n */\n\nimport RestClient from '../../../integration/rest-client';\nimport { IOEventsApiError, IoEventsGlobals } from '../../types';\nimport type { Registration } from '../types';\nimport type { RegistrationCreateModel } from './types';\n\n/**\n * Service for creating registrations\n */\nexport class Create {\n private restClient: RestClient;\n private endpoint: string;\n private clientId: string;\n private consumerId: string;\n private projectId: string;\n private workspaceId: string;\n private accessToken: string;\n\n /**\n * Initialize the Create service\n */\n constructor(\n clientId: string,\n consumerId: string,\n projectId: string,\n workspaceId: string,\n accessToken: string\n ) {\n if (!clientId?.trim()) {\n throw new IOEventsApiError('clientId is required and cannot be empty', 400);\n }\n if (!consumerId?.trim()) {\n throw new IOEventsApiError('consumerId is required and cannot be empty', 400);\n }\n if (!projectId?.trim()) {\n throw new IOEventsApiError('projectId is required and cannot be empty', 400);\n }\n if (!workspaceId?.trim()) {\n throw new IOEventsApiError('workspaceId is required and cannot be empty', 400);\n }\n if (!accessToken?.trim()) {\n throw new IOEventsApiError('accessToken is required and cannot be empty', 400);\n }\n\n this.restClient = new RestClient();\n this.endpoint = IoEventsGlobals.BASE_URL;\n this.clientId = clientId;\n this.consumerId = consumerId;\n this.projectId = projectId;\n this.workspaceId = workspaceId;\n this.accessToken = accessToken;\n }\n\n /**\n * Create a new registration\n *\n * @param registrationData - The registration data to create\n * @returns Promise<Registration> - The created registration\n * @throws IOEventsApiError - When the API call fails\n *\n * @example\n * ```typescript\n * const registration = await registrationManager.create({\n * client_id: 'your-client-id',\n * name: 'My Registration',\n * description: 'Registration for user events',\n * webhook_url: 'https://example.com/webhook',\n * events_of_interest: [\n * {\n * provider_id: 'provider-123',\n * event_code: 'com.example.user.created'\n * }\n * ],\n * delivery_type: 'webhook',\n * enabled: true\n * });\n * console.log(registration.registration_id);\n * ```\n */\n async execute(registrationData: RegistrationCreateModel): Promise<Registration> {\n try {\n this.validateRegistrationInput(registrationData);\n\n const url = `${this.endpoint}/events/${this.consumerId}/${this.projectId}/${this.workspaceId}/registrations`;\n\n const response = await this.restClient.post(\n url,\n {\n Authorization: `Bearer ${this.accessToken}`,\n 'x-api-key': this.clientId,\n 'Content-Type': 'application/json',\n Accept: 'application/hal+json',\n },\n registrationData\n );\n\n return response as Registration;\n } catch (error) {\n this.handleError(error);\n }\n }\n\n /**\n * Validates the registration input data\n */\n private validateRegistrationInput(registrationData: RegistrationCreateModel): void {\n if (!registrationData) {\n throw new IOEventsApiError('Registration data is required', 400);\n }\n\n if (!registrationData.client_id?.trim()) {\n throw new IOEventsApiError('Client ID is required', 400);\n }\n\n if (registrationData.client_id.length < 3 || registrationData.client_id.length > 255) {\n throw new IOEventsApiError('Client ID must be between 3 and 255 characters', 400);\n }\n\n if (!registrationData.name?.trim()) {\n throw new IOEventsApiError('Registration name is required', 400);\n }\n\n if (registrationData.name.length < 3 || registrationData.name.length > 255) {\n throw new IOEventsApiError('Registration name must be between 3 and 255 characters', 400);\n }\n\n if (registrationData.description && registrationData.description.length > 5000) {\n throw new IOEventsApiError('Description must not exceed 5000 characters', 400);\n }\n\n if (registrationData.webhook_url && registrationData.webhook_url.length > 4000) {\n throw new IOEventsApiError('Webhook URL must not exceed 4000 characters', 400);\n }\n\n if (\n !registrationData.events_of_interest ||\n !Array.isArray(registrationData.events_of_interest)\n ) {\n throw new IOEventsApiError('Events of interest is required and must be an array', 400);\n }\n\n if (registrationData.events_of_interest.length === 0) {\n throw new IOEventsApiError('At least one event of interest is required', 400);\n }\n\n // Validate each event of interest\n registrationData.events_of_interest.forEach((event, index) => {\n if (!event.provider_id?.trim()) {\n throw new IOEventsApiError(`Provider ID is required for event at index ${index}`, 400);\n }\n if (!event.event_code?.trim()) {\n throw new IOEventsApiError(`Event code is required for event at index ${index}`, 400);\n }\n });\n\n if (!registrationData.delivery_type?.trim()) {\n throw new IOEventsApiError('Delivery type is required', 400);\n }\n\n const validDeliveryTypes = ['webhook', 'webhook_batch', 'journal', 'aws_eventbridge'];\n if (!validDeliveryTypes.includes(registrationData.delivery_type)) {\n throw new IOEventsApiError(\n `Delivery type must be one of: ${validDeliveryTypes.join(', ')}`,\n 400\n );\n }\n\n if (registrationData.runtime_action && registrationData.runtime_action.length > 255) {\n throw new IOEventsApiError('Runtime action must not exceed 255 characters', 400);\n }\n }\n\n /**\n * Handles errors from the API call\n */\n private handleError(error: any): never {\n // Re-throw validation errors as-is\n if (error instanceof IOEventsApiError) {\n throw error;\n }\n\n if (error instanceof Error && error.message.includes('HTTP error! status:')) {\n const statusCode = this.extractStatusCodeFromMessage(error.message);\n const errorMessage = this.getErrorMessageForStatus(statusCode);\n throw new IOEventsApiError(errorMessage, statusCode);\n }\n\n if (error.response?.status) {\n const statusCode = error.response.status;\n const errorMessage = this.getErrorMessageForStatus(statusCode);\n throw new IOEventsApiError(errorMessage, statusCode);\n }\n\n if (error.status) {\n const statusCode = error.status;\n const errorMessage = this.getErrorMessageForStatus(statusCode);\n throw new IOEventsApiError(errorMessage, statusCode);\n }\n\n throw new IOEventsApiError('Network error occurred', 500);\n }\n\n /**\n * Extracts status code from HTTP error message\n */\n private extractStatusCodeFromMessage(message: string): number {\n const match = message.match(/HTTP error! status:\\s*(\\d+)/);\n return match ? parseInt(match[1]!, 10) : 500;\n }\n\n /**\n * Gets appropriate error message for HTTP status code\n */\n private getErrorMessageForStatus(statusCode: number): string {\n switch (statusCode) {\n case 400:\n return 'Bad request: Invalid registration data provided';\n case 401:\n return 'Unauthorized: Invalid or missing authentication';\n case 403:\n return 'Forbidden: Insufficient permissions';\n case 409:\n return 'Conflict: Registration with this name already exists';\n case 422:\n return 'Unprocessable entity: Invalid registration data';\n case 500:\n return 'Internal server error';\n default:\n return `API error: HTTP ${statusCode}`;\n }\n }\n}\n\nexport default Create;\n","/**\n * <license header>\n */\n\nimport RestClient from '../../../integration/rest-client';\nimport { IOEventsApiError, IoEventsGlobals } from '../../types';\n\n/**\n * Service for deleting registrations\n */\nexport class Delete {\n private restClient: RestClient;\n private endpoint: string;\n private clientId: string;\n private consumerId: string;\n private projectId: string;\n private workspaceId: string;\n private accessToken: string;\n\n /**\n * Initialize the Delete service\n */\n constructor(\n clientId: string,\n consumerId: string,\n projectId: string,\n workspaceId: string,\n accessToken: string\n ) {\n if (!clientId?.trim()) {\n throw new IOEventsApiError('clientId is required and cannot be empty', 400);\n }\n if (!consumerId?.trim()) {\n throw new IOEventsApiError('consumerId is required and cannot be empty', 400);\n }\n if (!projectId?.trim()) {\n throw new IOEventsApiError('projectId is required and cannot be empty', 400);\n }\n if (!workspaceId?.trim()) {\n throw new IOEventsApiError('workspaceId is required and cannot be empty', 400);\n }\n if (!accessToken?.trim()) {\n throw new IOEventsApiError('accessToken is required and cannot be empty', 400);\n }\n\n this.restClient = new RestClient();\n this.endpoint = IoEventsGlobals.BASE_URL;\n this.clientId = clientId;\n this.consumerId = consumerId;\n this.projectId = projectId;\n this.workspaceId = workspaceId;\n this.accessToken = accessToken;\n }\n\n /**\n * Delete a registration by ID\n *\n * @param registrationId - The registration ID to delete\n * @returns Promise<void> - Resolves when deletion is successful\n * @throws IOEventsApiError - When the API call fails\n *\n * @example\n * ```typescript\n * await registrationManager.delete('your-registration-id');\n * console.log('Registration deleted successfully');\n * ```\n */\n async execute(registrationId: string): Promise<void> {\n try {\n this.validateInputs(registrationId);\n\n const url = `${this.endpoint}/events/${this.consumerId}/${this.projectId}/${this.workspaceId}/registrations/${registrationId}`;\n\n await this.restClient.delete(url, {\n Authorization: `Bearer ${this.accessToken}`,\n 'x-api-key': this.clientId,\n Accept: 'text/plain',\n });\n\n // Delete operation returns 204 No Content on success\n } catch (error) {\n this.handleError(error);\n }\n }\n\n /**\n * Validates the input parameters\n */\n private validateInputs(registrationId: string): void {\n if (!registrationId?.trim()) {\n throw new IOEventsApiError('Registration ID is required', 400);\n }\n }\n\n /**\n * Handles errors from the API call\n */\n private handleError(error: any): never {\n if (error instanceof IOEventsApiError) {\n throw error;\n }\n\n if (error instanceof Error && error.message.includes('HTTP error! status:')) {\n const statusCode = this.extractStatusCodeFromMessage(error.message);\n const errorMessage = this.getErrorMessageForStatus(statusCode);\n throw new IOEventsApiError(errorMessage, statusCode);\n }\n\n if (error.response?.status) {\n const statusCode = error.response.status;\n const errorMessage = this.getErrorMessageForStatus(statusCode);\n throw new IOEventsApiError(errorMessage, statusCode);\n }\n\n if (error.status) {\n const statusCode = error.status;\n const errorMessage = this.getErrorMessageForStatus(statusCode);\n throw new IOEventsApiError(errorMessage, statusCode);\n }\n\n throw new IOEventsApiError('Network error occurred', 500);\n }\n\n /**\n * Extracts status code from HTTP error message\n */\n private extractStatusCodeFromMessage(message: string): number {\n const match = message.match(/HTTP error! status:\\s*(\\d+)/);\n return match ? parseInt(match[1]!, 10) : 500;\n }\n\n /**\n * Gets appropriate error message for HTTP status code\n */\n private getErrorMessageForStatus(statusCode: number): string {\n switch (statusCode) {\n case 400:\n return 'Bad request: Invalid registration ID provided';\n case 401:\n return 'Unauthorized: Invalid or missing authentication';\n case 403:\n return 'Forbidden: Insufficient permissions';\n case 404:\n return 'Registration not found';\n case 500:\n return 'Internal server error';\n default:\n return `API error: HTTP ${statusCode}`;\n }\n }\n}\n\nexport default Delete;\n","/**\n * <license header>\n */\n\nimport RestClient from '../../../integration/rest-client';\nimport { IOEventsApiError, IoEventsGlobals } from '../../types';\nimport type { Registration } from '../types';\n\n/**\n * Service for getting a specific registration by ID\n */\nexport class Get {\n private restClient: RestClient;\n private endpoint: string;\n private clientId: string;\n private consumerId: string;\n private projectId: string;\n private workspaceId: string;\n private accessToken: string;\n\n /**\n * Initialize the Get service\n */\n constructor(\n clientId: string,\n consumerId: string,\n projectId: string,\n workspaceId: string,\n accessToken: string\n ) {\n if (!clientId?.trim()) {\n throw new IOEventsApiError('clientId is required and cannot be empty', 400);\n }\n if (!consumerId?.trim()) {\n throw new IOEventsApiError('consumerId is required and cannot be empty', 400);\n }\n if (!projectId?.trim()) {\n throw new IOEventsApiError('projectId is required and cannot be empty', 400);\n }\n if (!workspaceId?.trim()) {\n throw new IOEventsApiError('workspaceId is required and cannot be empty', 400);\n }\n if (!accessToken?.trim()) {\n throw new IOEventsApiError('accessToken is required and cannot be empty', 400);\n }\n\n this.restClient = new RestClient();\n this.endpoint = IoEventsGlobals.BASE_URL;\n this.clientId = clientId;\n this.consumerId = consumerId;\n this.projectId = projectId;\n this.workspaceId = workspaceId;\n this.accessToken = accessToken;\n }\n\n /**\n * Get a registration by ID\n *\n * @param registrationId - The registration ID to retrieve\n * @returns Promise<Registration> - The registration data\n * @throws IOEventsApiError - When the API call fails\n *\n * @example\n * ```typescript\n * const registration = await registrationManager.get('your-registration-id');\n * console.log(registration.name);\n * ```\n */\n async execute(registrationId: string): Promise<Registration> {\n try {\n this.validateInputs(registrationId);\n\n const url = `${this.endpoint}/events/${this.consumerId}/${this.projectId}/${this.workspaceId}/registrations/${registrationId}`;\n\n const response = await this.restClient.get(url, {\n Authorization: `Bearer ${this.accessToken}`,\n 'x-api-key': this.clientId,\n Accept: 'application/hal+json',\n });\n\n return response as Registration;\n } catch (error) {\n this.handleError(error);\n }\n }\n\n /**\n * Validates the input parameters\n */\n private validateInputs(registrationId: string): void {\n if (!registrationId?.trim()) {\n throw new IOEventsApiError('Registration ID is required', 400);\n }\n }\n\n /**\n * Handles errors from the API call\n */\n private handleError(error: any): never {\n if (error instanceof IOEventsApiError) {\n throw error;\n }\n\n if (error instanceof Error && error.message.includes('HTTP error! status:')) {\n const statusCode = this.extractStatusCodeFromMessage(error.message);\n const errorMessage = this.getErrorMessageForStatus(statusCode);\n throw new IOEventsApiError(errorMessage, statusCode);\n }\n\n if (error.response?.status) {\n const statusCode = error.response.status;\n const errorMessage = this.getErrorMessageForStatus(statusCode);\n throw new IOEventsApiError(errorMessage, statusCode);\n }\n\n if (error.status) {\n const statusCode = error.status;\n const errorMessage = this.getErrorMessageForStatus(statusCode);\n throw new IOEventsApiError(errorMessage, statusCode);\n }\n\n throw new IOEventsApiError('Network error occurred', 500);\n }\n\n /**\n * Extracts status code from HTTP error message\n */\n private extractStatusCodeFromMessage(message: string): number {\n const match = message.match(/HTTP error! status:\\s*(\\d+)/);\n return match ? parseInt(match[1]!, 10) : 500;\n }\n\n /**\n * Gets appropriate error message for HTTP status code\n */\n private getErrorMessageForStatus(statusCode: number): string {\n switch (statusCode) {\n case 400:\n return 'Bad request: Invalid parameters provided';\n case 401:\n return 'Unauthorized: Invalid or missing authentication';\n case 403:\n return 'Forbidden: Insufficient permissions';\n case 404:\n return 'Registration not found';\n case 500:\n return 'Internal server error';\n default:\n return `API error: HTTP ${statusCode}`;\n }\n }\n}\n\nexport default Get;\n","/**\n * <license header>\n */\n\nimport RestClient from '../../../integration/rest-client';\nimport { IOEventsApiError, IoEventsGlobals } from '../../types';\nimport type { Registration } from '../types';\nimport type { RegistrationListResponse, ListRegistrationQueryParams } from './types';\n\n/**\n * Service for listing registrations with automatic pagination\n */\nexport class List {\n private restClient: RestClient;\n private endpoint: string;\n private clientId: string;\n private consumerId: string;\n private projectId: string;\n private workspaceId: string;\n private accessToken: string;\n\n /**\n * Initialize the List service\n */\n constructor(\n clientId: string,\n consumerId: string,\n projectId: string,\n workspaceId: string,\n accessToken: string\n ) {\n if (!clientId?.trim()) {\n throw new IOEventsApiError('clientId is required and cannot be empty', 400);\n }\n if (!consumerId?.trim()) {\n throw new IOEventsApiError('consumerId is required and cannot be empty', 400);\n }\n if (!projectId?.trim()) {\n throw new IOEventsApiError('projectId is required and cannot be empty', 400);\n }\n if (!workspaceId?.trim()) {\n throw new IOEventsApiError('workspaceId is required and cannot be empty', 400);\n }\n if (!accessToken?.trim()) {\n throw new IOEventsApiError('accessToken is required and cannot be empty', 400);\n }\n\n this.restClient = new RestClient();\n this.endpoint = IoEventsGlobals.BASE_URL;\n this.clientId = clientId;\n this.consumerId = consumerId;\n this.projectId = projectId;\n this.workspaceId = workspaceId;\n this.accessToken = accessToken;\n }\n\n /**\n * Execute registration list with automatic pagination\n */\n async execute(queryParams?: ListRegistrationQueryParams): Promise<Registration[]> {\n try {\n this.validateInputs();\n\n let url = `${this.endpoint}/events/${this.consumerId}/${this.projectId}/${this.workspaceId}/registrations`;\n\n // Add query parameters if provided\n if (queryParams && Object.keys(queryParams).length > 0) {\n const searchParams = new URLSearchParams();\n Object.entries(queryParams).forEach(([key, value]) => {\n if (value !== undefined && value !== null) {\n searchParams.append(key, String(value));\n }\n });\n if (searchParams.toString()) {\n url += `?${searchParams.toString()}`;\n }\n }\n\n return await this.fetchAllPages(url);\n } catch (error: any) {\n this.handleError(error);\n }\n }\n\n /**\n * Fetch all pages recursively\n */\n private async fetchAllPages(\n url: string,\n accumulatedResults: Registration[] = []\n ): Promise<Registration[]> {\n const headers = {\n Authorization: `Bearer ${this.accessToken}`,\n 'x-api-key': this.clientId,\n 'Content-Type': 'application/json',\n };\n\n const data = (await this.restClient.get(url, headers)) as RegistrationListResponse;\n\n // Extract registrations from current page\n const currentPageRegistrations = data._embedded?.registrations || [];\n const allResults = [...accumulatedResults, ...currentPageRegistrations];\n\n // Check if there's a next page\n const nextPageUrl = data._links?.next?.href;\n if (nextPageUrl) {\n // Recursively fetch the next page\n return await this.fetchAllPages(nextPageUrl, allResults);\n }\n\n return allResults;\n }\n\n /**\n * Validate required inputs\n */\n private validateInputs(): void {\n if (!this.consumerId?.trim()) {\n throw new IOEventsApiError(\n 'Consumer ID is required',\n IoEventsGlobals.STATUS_CODES.BAD_REQUEST\n );\n }\n if (!this.projectId?.trim()) {\n throw new IOEventsApiError(\n 'Project ID is required',\n IoEventsGlobals.STATUS_CODES.BAD_REQUEST\n );\n }\n if (!this.workspaceId?.trim()) {\n throw new IOEventsApiError(\n 'Workspace ID is required',\n IoEventsGlobals.STATUS_CODES.BAD_REQUEST\n );\n }\n if (!this.accessToken?.trim()) {\n throw new IOEventsApiError(\n 'Access token is required',\n IoEventsGlobals.STATUS_CODES.BAD_REQUEST\n );\n }\n }\n\n /**\n * Handle and categorize errors\n */\n private handleError(error: any): never {\n // Handle RestClient HTTP errors (e.g., \"HTTP error! status: 404\")\n if (error instanceof Error && error.message.includes('HTTP error! status:')) {\n const statusCode = this.extractStatusCodeFromMessage(error.message);\n const errorMessage = this.getErrorMessageForStatus(statusCode);\n throw new IOEventsApiError(errorMessage, statusCode);\n }\n\n // Handle structured API error responses\n if (error.response) {\n const statusCode =\n error.response.status || error.status || IoEventsGlobals.STATUS_CODES.INTERNAL_SERVER_ERROR;\n const errorMessage = this.getErrorMessageForStatus(statusCode);\n throw new IOEventsApiError(errorMessage, statusCode);\n }\n\n // Handle other errors\n if (error instanceof IOEventsApiError) {\n throw error;\n }\n\n // Default error handling\n throw new IOEventsApiError(\n error.message || 'An unexpected error occurred while listing registrations',\n IoEventsGlobals.STATUS_CODES.INTERNAL_SERVER_ERROR\n );\n }\n\n /**\n * Extract status code from error message\n */\n private extractStatusCodeFromMessage(errorMessage: string): number {\n const match = errorMessage.match(/HTTP error! status:\\s*(\\d+)/);\n return match ? parseInt(match[1]!, 10) : IoEventsGlobals.STATUS_CODES.INTERNAL_SERVER_ERROR;\n }\n\n /**\n * Get appropriate error message for status code\n */\n private getErrorMessageForStatus(statusCode: number): string {\n switch (statusCode) {\n case IoEventsGlobals.STATUS_CODES.BAD_REQUEST:\n return 'Bad request. Please check your input parameters';\n case IoEventsGlobals.STATUS_CODES.UNAUTHORIZED:\n return 'Unauthorized. Please check your access token';\n case IoEventsGlobals.STATUS_CODES.FORBIDDEN:\n return 'Forbidden. You do not have permission to access registrations';\n case IoEventsGlobals.STATUS_CODES.NOT_FOUND:\n return 'Registrations not found. The specified workspace may not exist or have no registrations';\n case IoEventsGlobals.STATUS_CODES.INTERNAL_SERVER_ERROR:\n return 'Internal server error. Please try again later';\n default:\n return `API request failed with status ${statusCode}`;\n }\n }\n}\n\nexport default List;\n","/**\n * <license header>\n */\n\nimport Create from './create';\nimport Delete from './delete';\nimport Get from './get';\nimport List from './list';\nimport type { Registration } from './types';\nimport type { RegistrationCreateModel } from './create/types';\nimport type { ListRegistrationQueryParams } from './list/types';\n\n/**\n * Manager class for registration operations\n */\nexport class RegistrationManager {\n private createService: Create;\n private deleteService: Delete;\n private getService: Get;\n private listService: List;\n\n /**\n * Initialize the RegistrationManager\n */\n constructor(\n clientId: string,\n consumerId: string,\n projectId: string,\n workspaceId: string,\n accessToken: string\n ) {\n this.createService = new Create(clientId, consumerId, projectId, workspaceId, accessToken);\n this.deleteService = new Delete(clientId, consumerId, projectId, workspaceId, accessToken);\n this.getService = new Get(clientId, consumerId, projectId, workspaceId, accessToken);\n this.listService = new List(clientId, consumerId, projectId, workspaceId, accessToken);\n }\n\n /**\n * Create a new registration\n *\n * @param registrationData - The registration data to create\n * @returns Promise<Registration> - The created registration\n *\n * @example\n * ```typescript\n * const registration = await registrationManager.create({\n * client_id: 'your-client-id',\n * name: 'My Registration',\n * description: 'Registration for user events',\n * webhook_url: 'https://example.com/webhook',\n * events_of_interest: [\n * {\n * provider_id: 'provider-123',\n * event_code: 'com.example.user.created'\n * }\n * ],\n * delivery_type: 'webhook',\n * enabled: true\n * });\n * console.log(registration.registration_id);\n * ```\n */\n async create(registrationData: RegistrationCreateModel): Promise<Registration> {\n return await this.createService.execute(registrationData);\n }\n\n /**\n * Delete a registration by ID\n *\n * @param registrationId - The registration ID to delete\n * @returns Promise<void> - Resolves when deletion is successful\n *\n * @example\n * ```typescript\n * await registrationManager.delete('your-registration-id');\n * console.log('Registration deleted successfully');\n * ```\n */\n async delete(registrationId: string): Promise<void> {\n return await this.deleteService.execute(registrationId);\n }\n\n /**\n * Get a registration by ID\n *\n * @param registrationId - The registration ID to retrieve\n * @returns Promise<Registration> - The registration data\n *\n * @example\n * ```typescript\n * const registration = await registrationManager.get('your-registration-id');\n * console.log(registration.name);\n * ```\n */\n async get(registrationId: string): Promise<Registration> {\n return await this.getService.execute(registrationId);\n }\n\n /**\n * List all registrations with automatic pagination\n *\n * @param queryParams - Optional query parameters for filtering\n * @returns Promise<Registration[]> - Array of all registrations across all pages\n *\n * @example\n * ```typescript\n * // List all registrations\n * const registrations = await registrationManager.list();\n *\n * // List with query parameters\n * const filteredRegistrations = await registrationManager.list({\n * enabled: true\n * });\n * ```\n */\n async list(queryParams?: ListRegistrationQueryParams): Promise<Registration[]> {\n return await this.listService.execute(queryParams);\n }\n}\n\nexport default RegistrationManager;\n","/**\n * <license header>\n */\n\n/**\n * Adobe I/O Events utilities for Adobe Commerce AIO Toolkit\n */\n\n// Export Provider utilities\nexport { default as ProviderManager } from './provider';\n\n// Export Event Metadata utilities\nexport { default as EventMetadataManager } from './event-metadata';\n\n// Export Registration utilities\nexport { default as RegistrationManager } from './registration';\n\n// Export types and error classes\nexport * from './types';\n\n// Export provider-specific types\nexport type { Provider } from './provider/types';\nexport type { ProviderInputModel, CreateProviderParams } from './provider/create/types';\nexport type { GetProviderQueryParams } from './provider/get/types';\nexport type { ListProvidersQueryParams } from './provider/list/types';\n\n// Export event metadata types\nexport type { EventMetadata } from './event-metadata/types';\nexport type { EventMetadataInputModel } from './event-metadata/create/types';\nexport type { EventMetadataListResponse } from './event-metadata/list/types';\n\n// Export registration-specific types\nexport type { Registration } from './registration/types';\nexport type { RegistrationCreateModel } from './registration/create/types';\nexport type { GetRegistrationQueryParams } from './registration/get/types';\nexport type {\n ListRegistrationQueryParams,\n RegistrationListResponse,\n} from './registration/list/types';\n","/**\n * <license header>\n */\n\nimport type { Logger } from '@adobe/aio-sdk';\nimport type { ParsedProvider, CreateProviderResult } from '../types';\nimport { ProviderManager } from '../../../io-events';\nimport { randomUUID } from 'crypto';\n\n/**\n * Utility class for creating providers in Adobe Commerce onboarding integrations\n *\n * @example\n * const logger = Core.Logger('my-create-providers', { level: 'debug' });\n * const createProviders = new CreateProviders(\n * 'your-consumer-id',\n * 'your-project-id',\n * 'your-workspace-id',\n * 'your-api-key',\n * 'your-access-token',\n * logger\n * );\n *\n * // Process providers for creation\n * await createProviders.process(providers);\n */\nclass CreateProviders {\n private readonly logger: Logger;\n private providerManager: ProviderManager | null = null;\n\n /**\n * Creates a new CreateProviders instance\n *\n * @param consumerId - Adobe I/O consumer ID\n * @param projectId - Adobe I/O project ID\n * @param workspaceId - Adobe I/O workspace ID\n * @param apiKey - API key for authentication\n * @param accessToken - Access token for API calls\n * @param logger - Logger instance for consistent logging\n */\n constructor(\n private readonly consumerId: string,\n private readonly projectId: string,\n private readonly workspaceId: string,\n private readonly apiKey: string,\n private readonly accessToken: string,\n logger: Logger\n ) {\n // Validate configuration\n const config = {\n consumerId: this.consumerId,\n projectId: this.projectId,\n workspaceId: this.workspaceId,\n apiKey: this.apiKey,\n accessToken: this.accessToken,\n };\n const required = ['consumerId', 'projectId', 'workspaceId', 'apiKey', 'accessToken'];\n const missing = required.filter(\n key => !config[key as keyof typeof config] || config[key as keyof typeof config].trim() === ''\n );\n\n if (missing.length > 0) {\n throw new Error(`Missing required configuration: ${missing.join(', ')}`);\n }\n\n if (!logger) {\n throw new Error('Logger is required');\n }\n\n // Use the provided logger\n this.logger = logger;\n\n this.logger.debug(`[INIT] CreateProviders initialized with valid configuration`);\n }\n\n /**\n * Processes providers for creation in the Adobe Commerce integration\n *\n * @param providers - Array of parsed provider configurations to create\n * @param projectName - Name of the project for enhanced labeling\n * @returns Promise resolving to processing result\n */\n async process(\n providers: ParsedProvider[],\n projectName: string = 'Unknown Project'\n ): Promise<CreateProviderResult[]> {\n this.logger.debug(`[CREATE] Creating providers for project: ${projectName}`);\n this.logger.debug(`[INFO] Processing ${providers.length} provider(s)...`);\n\n try {\n // Fetch existing providers first\n const existingProviders = await this.getProviders();\n\n const results: CreateProviderResult[] = [];\n\n for (const provider of providers) {\n const result = await this.createProvider(provider, projectName, existingProviders);\n results.push(result);\n }\n\n this.logger.debug('[DONE] Provider creation completed');\n\n // Show provider IDs in results\n results.forEach(result => {\n if (result.provider.id) {\n this.logger.debug(\n `[ID] Provider ID: ${result.provider.id} (${result.provider.originalLabel})`\n );\n }\n });\n\n return results;\n } catch (error: any) {\n this.logger.error(`[ERROR] Provider creation failed: ${error.message}`);\n throw error;\n }\n }\n\n /**\n * Gets the Provider SDK instance from the framework\n * @private\n */\n private getProviderManager(): ProviderManager {\n if (!this.providerManager) {\n this.providerManager = new ProviderManager(\n this.apiKey,\n this.consumerId,\n this.projectId,\n this.workspaceId,\n this.accessToken\n );\n }\n\n return this.providerManager;\n }\n\n /**\n * Gets existing providers from Adobe I/O\n * @returns Promise<Map> Map of existing providers by label\n */\n private async getProviders(): Promise<Map<string, any>> {\n this.logger.debug('[FETCH] Fetching existing providers...');\n\n try {\n const providerManager = this.getProviderManager();\n const providerList = await providerManager.list();\n\n const existingProviders = new Map<string, any>();\n providerList.forEach((provider: any) => {\n existingProviders.set(provider.label, provider);\n });\n\n this.logger.debug(`[INFO] Found ${existingProviders.size} existing providers`);\n return existingProviders;\n } catch (error: any) {\n this.logger.error(`[ERROR] Failed to fetch existing providers: ${error.message}`);\n throw error;\n }\n }\n\n /**\n * Creates a single provider\n * @param providerData - Provider configuration data\n * @param projectName - Project name for enhanced labeling\n * @param existingProviders - Map of existing providers by label\n * @private\n */\n private async createProvider(\n providerData: ParsedProvider,\n projectName: string,\n existingProviders: Map<string, any>\n ): Promise<CreateProviderResult> {\n const enhancedLabel = `${projectName} - ${providerData.label}`;\n this.logger.debug(\n `[PROCESS] Processing provider: ${providerData.label} with enhanced label: ${enhancedLabel}`\n );\n\n // Check if provider already exists\n const existingProvider = existingProviders.get(enhancedLabel);\n\n if (existingProvider) {\n this.logger.debug(`[SKIP] Provider already exists - skipping creation`);\n this.logger.debug(`[ID] Existing ID: ${existingProvider.id}`);\n\n return {\n created: false,\n skipped: true,\n provider: {\n id: existingProvider.id,\n ...(existingProvider.instance_id && { instanceId: existingProvider.instance_id }),\n key: providerData.key,\n label: enhancedLabel,\n originalLabel: providerData.label,\n description: providerData.description,\n docsUrl: providerData.docsUrl,\n },\n reason: 'Already exists',\n raw: existingProvider,\n };\n }\n\n try {\n const providerInput = this.preparePayload(providerData, enhancedLabel);\n\n this.logger.debug(`[NEW] Creating new provider: ${enhancedLabel}`);\n\n const createdProvider = await this.getProviderManager().create(providerInput);\n\n this.logger.debug(\n `[INFO] Provider created successfully! ID: ${createdProvider.id}, Instance ID: ${createdProvider.instance_id}`\n );\n\n const result: CreateProviderResult = {\n created: true,\n skipped: false,\n provider: {\n id: createdProvider.id,\n ...(createdProvider.instance_id && { instanceId: createdProvider.instance_id }),\n key: providerData.key,\n label: createdProvider.label,\n originalLabel: providerData.label,\n description: providerData.description,\n docsUrl: providerData.docsUrl,\n },\n raw: createdProvider,\n };\n\n return result;\n } catch (error: any) {\n this.logger.error(`[ERROR] Failed to create provider \"${enhancedLabel}\": ${error.message}`);\n\n return {\n created: false,\n skipped: false,\n error: error.message,\n provider: {\n key: providerData.key,\n label: enhancedLabel,\n originalLabel: providerData.label,\n description: providerData.description,\n docsUrl: providerData.docsUrl,\n },\n };\n }\n }\n\n /**\n * Prepares payload object for Adobe I/O API\n * @param providerData - Provider configuration data\n * @param enhancedLabel - Enhanced provider label\n * @private\n */\n private preparePayload(providerData: ParsedProvider, enhancedLabel: string): any {\n const input: any = {\n label: enhancedLabel,\n };\n\n // Add description if provided\n if (providerData.description) {\n input.description = providerData.description;\n }\n\n // Add docs URL if provided\n if (providerData.docsUrl) {\n input.docs_url = providerData.docsUrl;\n }\n\n // Add special commerce provider metadata if needed\n if (this.isCommerceProvider(providerData)) {\n input.provider_metadata = 'dx_commerce_events';\n input.instance_id = randomUUID();\n }\n\n return input;\n }\n\n /**\n * Determines if provider is a commerce provider\n * @private\n */\n private isCommerceProvider(providerData: ParsedProvider): boolean {\n const commerceIndicators = ['commerce', 'magento', 'adobe commerce'];\n const key = providerData.key.toLowerCase();\n const label = providerData.label.toLowerCase();\n const description = (providerData.description || '').toLowerCase();\n\n return commerceIndicators.some(\n indicator =>\n key.includes(indicator) || label.includes(indicator) || description.includes(indicator)\n );\n }\n}\n\nexport default CreateProviders;\n","/**\n * <license header>\n */\n\nimport type { Logger } from '@adobe/aio-sdk';\nimport { EventMetadataManager, type EventMetadata } from '../../../io-events';\nimport type { ParsedEvent, CreateEventResult, CreateProviderResult } from '../types';\n\n/**\n * Utility class for creating event metadata in Adobe Commerce onboarding integrations\n *\n * @example\n * const logger = Core.Logger('my-create-events', { level: 'debug' });\n * const createEvents = new CreateEvents(\n * 'your-consumer-id',\n * 'your-project-id',\n * 'your-workspace-id',\n * 'your-client-id',\n * 'your-access-token',\n * logger\n * );\n *\n * // Process events for creation\n * await createEvents.process(events, providerResults);\n */\nclass CreateEvents {\n private readonly logger: Logger;\n private eventMetadataManager: EventMetadataManager | null = null;\n\n /**\n * Creates a new CreateEvents instance\n *\n * @param consumerId - Adobe I/O consumer ID\n * @param projectId - Adobe I/O project ID\n * @param workspaceId - Adobe I/O workspace ID\n * @param clientId - Adobe I/O client ID\n * @param accessToken - Adobe I/O access token\n * @param logger - Logger instance for consistent logging\n */\n constructor(\n private readonly consumerId: string,\n private readonly projectId: string,\n private readonly workspaceId: string,\n private readonly clientId: string,\n private readonly accessToken: string,\n logger: Logger\n ) {\n // Validate configuration\n const config = {\n consumerId: this.consumerId,\n projectId: this.projectId,\n workspaceId: this.workspaceId,\n clientId: this.clientId,\n accessToken: this.accessToken,\n };\n const required = ['consumerId', 'projectId', 'workspaceId', 'clientId', 'accessToken'];\n const missing = required.filter(\n key => !config[key as keyof typeof config] || config[key as keyof typeof config].trim() === ''\n );\n\n if (missing.length > 0) {\n throw new Error(`Missing required configuration: ${missing.join(', ')}`);\n }\n\n if (!logger) {\n throw new Error('Logger is required');\n }\n\n // Use the provided logger\n this.logger = logger;\n\n this.logger.debug(`[INIT] CreateEvents initialized with valid configuration`);\n }\n\n /**\n * Gets the EventMetadataManager instance (lazy initialization)\n * @private\n * @returns EventMetadataManager instance\n */\n private getEventMetadataManager(): EventMetadataManager {\n if (!this.eventMetadataManager) {\n this.eventMetadataManager = new EventMetadataManager(\n this.clientId,\n this.consumerId,\n this.projectId,\n this.workspaceId,\n this.accessToken\n );\n }\n return this.eventMetadataManager;\n }\n\n /**\n * Creates event metadata for a specific provider\n * @private\n * @param providerId - Provider ID to create event for\n * @param event - Parsed event data\n * @param existingEvents - Array of existing event metadata\n * @returns Promise<CreateEventResult> - Event creation result\n */\n private async createEvent(\n providerId: string,\n event: ParsedEvent,\n existingEvents: EventMetadata[]\n ): Promise<CreateEventResult> {\n try {\n const eventCode = event.eventCode;\n this.logger.debug(`[INFO] Processing event: ${eventCode}`);\n\n // Check if event metadata already exists\n const existingEvent = existingEvents.find(metadata => metadata.event_code === eventCode);\n\n if (existingEvent) {\n this.logger.debug(\n `[INFO] Event code '${eventCode}' already exists for provider ${providerId}`\n );\n this.logger.debug(`[SKIP] Event metadata already exists for: ${eventCode} - skipping`);\n return {\n created: false,\n skipped: true,\n event: {\n id: existingEvent.id,\n eventCode: eventCode,\n ...(existingEvent.label && { label: existingEvent.label }),\n ...(existingEvent.description && { description: existingEvent.description }),\n ...(existingEvent.sample_event_template && {\n sampleEventTemplate: existingEvent.sample_event_template,\n }),\n },\n raw: existingEvent,\n };\n }\n\n this.logger.debug(`[CREATE] Creating event metadata: ${eventCode}`);\n\n // Build the payload for EventMetadataInputModel\n const metadataPayload = {\n event_code: eventCode,\n label: eventCode,\n description: eventCode,\n ...(event.sampleEventTemplate ? { sample_event_template: event.sampleEventTemplate } : {}),\n };\n\n const eventMetadata = this.getEventMetadataManager();\n const result = await eventMetadata.create(providerId, metadataPayload);\n\n if (result) {\n const eventId = result.id || result.event_code || eventCode;\n this.logger.debug(`[SUCCESS] Event metadata created successfully: ${eventCode}`);\n\n return {\n created: true,\n skipped: false,\n event: {\n id: eventId,\n eventCode: eventCode,\n label: metadataPayload.label,\n description: metadataPayload.description,\n ...(metadataPayload.sample_event_template && {\n sampleEventTemplate: metadataPayload.sample_event_template,\n }),\n },\n raw: result,\n };\n } else {\n throw new Error('Event metadata creation returned no result');\n }\n } catch (error) {\n const eventCode = event.eventCode;\n this.logger.error(\n `[ERROR] Error creating event metadata for ${eventCode}: ${(error as Error).message}`\n );\n return {\n created: false,\n skipped: false,\n event: {\n eventCode: eventCode,\n },\n error: (error as Error).message,\n };\n }\n }\n\n /**\n * Fetches existing event metadata for a provider to avoid duplicates\n * @private\n * @param providerId - Provider ID to fetch metadata for\n * @returns Promise<EventMetadata[]> - List of existing event metadata\n */\n private async fetchMetadata(providerId: string): Promise<EventMetadata[]> {\n try {\n this.logger.debug(`[INFO] Fetching existing event metadata for provider: ${providerId}`);\n\n const eventMetadata = this.getEventMetadataManager();\n const existingList = await eventMetadata.list(providerId);\n\n this.logger.debug(`[INFO] Found ${existingList.length} existing event metadata entries`);\n return existingList;\n } catch (error) {\n this.logger.error(\n `[ERROR] Error fetching existing metadata for provider ${providerId}: ${(error as Error).message}`\n );\n return [];\n }\n }\n\n /**\n * Processes events for creation based on parsed events and provider results\n *\n * @param events - Array of parsed events from InputParser\n * @param providerResults - Array of provider creation results\n * @param projectName - Name of the project for enhanced labeling\n * @returns Promise resolving to event creation results\n */\n async process(\n events: ParsedEvent[],\n providerResults: CreateProviderResult[],\n projectName: string = 'Unknown Project'\n ): Promise<CreateEventResult[]> {\n this.logger.debug(`[CREATE] Creating events for project: ${projectName}`);\n this.logger.debug(\n `[INFO] Processing ${events.length} event(s) across ${providerResults.length} provider(s)...`\n );\n\n if (!events || events.length === 0) {\n this.logger.debug('[INFO] No events to process.');\n return [];\n }\n\n if (!providerResults || providerResults.length === 0) {\n this.logger.debug('[INFO] No provider results to process.');\n return [];\n }\n\n try {\n const results: CreateEventResult[] = [];\n\n for (const providerResult of providerResults) {\n const providerId = providerResult.provider.id;\n if (!providerId) {\n this.logger.debug(\n `[WARN] Skipping provider without ID: ${providerResult.provider.originalLabel}`\n );\n continue;\n }\n\n this.logger.debug(\n `[INFO] Processing events for provider: ${providerResult.provider.originalLabel}`\n );\n\n // Fetch existing metadata for this provider\n const existingEvents = await this.fetchMetadata(providerId);\n\n // Find events that belong to this provider\n const providerEvents = events.filter(\n event => event.providerKey === providerResult.provider.key\n );\n\n if (providerEvents.length === 0) {\n this.logger.debug(\n `[INFO] No events found for provider: ${providerResult.provider.originalLabel}`\n );\n continue;\n }\n\n this.logger.debug(`[INFO] Found ${providerEvents.length} event(s) for this provider`);\n\n // Process each event for this provider\n for (const event of providerEvents) {\n const eventResult = await this.createEvent(providerId, event, existingEvents);\n eventResult.provider = providerResult.provider;\n results.push(eventResult);\n }\n }\n\n return results;\n } catch (error) {\n this.logger.error(`[ERROR] Event metadata creation failed: ${(error as Error).message}`);\n throw error;\n }\n }\n}\n\nexport default CreateEvents;\n","/**\n * <license header>\n */\n\nimport type { Logger } from '@adobe/aio-sdk';\nimport { RegistrationManager } from '../../../io-events/registration';\nimport type { Registration } from '../../../io-events/registration/types';\nimport type { RegistrationCreateModel } from '../../../io-events/registration/create/types';\nimport type {\n ParsedRegistration,\n ParsedEvent,\n CreateRegistrationResult,\n CreateProviderResult,\n} from '../types';\n\n/**\n * Utility class for creating registrations in Adobe Commerce onboarding integrations\n *\n * @example\n * const logger = Core.Logger('my-create-registrations', { level: 'debug' });\n * const createRegistrations = new CreateRegistrations(\n * 'your-consumer-id',\n * 'your-project-id',\n * 'your-workspace-id',\n * 'your-client-id',\n * 'your-access-token',\n * logger\n * );\n *\n * // Process registrations for creation\n * await createRegistrations.process(registrations, providerResults);\n */\nclass CreateRegistrations {\n private readonly logger: Logger;\n private registrationManager?: RegistrationManager;\n\n /**\n * Creates a new CreateRegistrations instance\n *\n * @param consumerId - Adobe I/O consumer ID\n * @param projectId - Adobe I/O project ID\n * @param workspaceId - Adobe I/O workspace ID\n * @param clientId - Adobe I/O client ID\n * @param accessToken - Adobe I/O access token\n * @param logger - Logger instance for consistent logging\n */\n constructor(\n private readonly consumerId: string,\n private readonly projectId: string,\n private readonly workspaceId: string,\n private readonly clientId: string,\n private readonly accessToken: string,\n logger: Logger\n ) {\n // Validate configuration\n const config = {\n consumerId: this.consumerId,\n projectId: this.projectId,\n workspaceId: this.workspaceId,\n clientId: this.clientId,\n accessToken: this.accessToken,\n };\n\n const required = ['consumerId', 'projectId', 'workspaceId', 'clientId', 'accessToken'];\n const missing = required.filter(\n key => !config[key as keyof typeof config] || config[key as keyof typeof config].trim() === ''\n );\n\n if (missing.length > 0) {\n throw new Error(`Missing required configuration: ${missing.join(', ')}`);\n }\n\n if (!logger) {\n throw new Error('Logger is required');\n }\n\n this.logger = logger;\n this.logger.debug(`[INIT] CreateRegistrations initialized with valid configuration`);\n }\n\n /**\n * Process multiple registrations for creation\n *\n * @param registrations - Array of parsed registrations to process\n * @param events - Array of parsed events for registration creation\n * @param providerResults - Array of provider results to link registrations to\n * @param projectName - Optional project name for logging\n * @returns Promise resolving to array of registration creation results\n */\n async process(\n registrations: ParsedRegistration[],\n events: ParsedEvent[],\n providerResults: CreateProviderResult[],\n projectName: string = 'Unknown Project'\n ): Promise<CreateRegistrationResult[]> {\n this.logger.debug(`[INFO] Creating registrations for project: ${projectName}`);\n this.logger.debug(\n `[PROCESSING] Processing ${registrations.length} registration(s) with ${events.length} event(s) across ${providerResults.length} provider(s)...`\n );\n\n if (!registrations || registrations.length === 0) {\n this.logger.debug('[SKIP] No registrations to process.');\n return [];\n }\n\n if (!events || events.length === 0) {\n this.logger.debug('[SKIP] No events to process.');\n return [];\n }\n\n if (!providerResults || providerResults.length === 0) {\n this.logger.debug('[SKIP] No provider results to process.');\n return [];\n }\n\n try {\n // Fetch existing registrations first\n const existingRegistrations = await this.fetchRegistrations();\n\n const results: CreateRegistrationResult[] = [];\n\n for (const registration of registrations) {\n this.logger.debug(`[PROCESSING] Processing registration: ${registration.label}`);\n\n // Find events that belong to this registration\n const registrationEvents = events.filter(\n event => event.registrationKey === registration.key\n );\n\n if (registrationEvents.length === 0) {\n this.logger.debug(`[SKIP] No events found for registration: ${registration.label}`);\n continue;\n }\n\n this.logger.debug(\n `[INFO] Found ${registrationEvents.length} event(s) for this registration`\n );\n\n // Group events by provider to create separate registrations per provider\n const eventsByProvider = this.groupEventsByProvider(registrationEvents);\n\n for (const [providerKey, providerEvents] of Object.entries(eventsByProvider)) {\n const provider = providerResults.find(p => p.provider.key === providerKey);\n\n if (!provider || !provider.provider.id) {\n this.logger.debug(`[SKIP] Provider not found or missing ID for: ${providerKey}`);\n continue;\n }\n\n const result = await this.createRegistration(\n registration,\n providerEvents,\n provider,\n existingRegistrations\n );\n results.push(result);\n }\n }\n\n return results;\n } catch (error) {\n this.logger.error(`[ERROR] Registration creation failed: ${(error as Error).message}`);\n throw error;\n }\n }\n\n /**\n * Lazy initialization of RegistrationManager\n * @private\n * @returns RegistrationManager instance\n */\n private getRegistrationManager(): RegistrationManager {\n if (!this.registrationManager) {\n this.registrationManager = new RegistrationManager(\n this.clientId,\n this.consumerId,\n this.projectId,\n this.workspaceId,\n this.accessToken\n );\n }\n return this.registrationManager;\n }\n\n /**\n * Fetches existing registrations to avoid duplicates\n * @returns {Promise<Map>} Map of existing registrations by name\n */\n async fetchRegistrations(): Promise<Map<string, Registration>> {\n this.logger.debug('[INFO] Fetching existing registrations...');\n\n try {\n const registrationSDK = this.getRegistrationManager();\n const registrationList = await registrationSDK.list();\n\n const existingRegistrations = new Map<string, Registration>();\n registrationList.forEach(registration => {\n existingRegistrations.set(registration.name, registration);\n });\n\n this.logger.debug(`[INFO] Found ${existingRegistrations.size} existing registrations`);\n return existingRegistrations;\n } catch (error) {\n this.logger.error(\n `[ERROR] Failed to fetch existing registrations: ${(error as Error).message}`\n );\n throw error;\n }\n }\n\n /**\n * Groups events by their provider key\n * @private\n * @param events - Events to group\n * @returns Events grouped by provider key\n */\n private groupEventsByProvider(events: ParsedEvent[]): Record<string, ParsedEvent[]> {\n const grouped: Record<string, ParsedEvent[]> = {};\n\n events.forEach(event => {\n if (!grouped[event.providerKey]) {\n grouped[event.providerKey] = [];\n }\n grouped[event.providerKey]!.push(event);\n });\n\n return grouped;\n }\n\n /**\n * Builds registration input object for Adobe I/O API\n * @private\n * @param registration - Registration entity\n * @param events - Events for this registration\n * @param provider - Provider result\n * @param registrationName - Enhanced registration name\n * @param firstEvent - First event for common properties\n * @returns Registration input for API\n */\n private preparePayload(\n registration: ParsedRegistration,\n events: ParsedEvent[],\n provider: CreateProviderResult,\n registrationName: string,\n firstEvent: ParsedEvent\n ): RegistrationCreateModel {\n // Build events of interest array\n const eventsOfInterest = events.map(event => ({\n provider_id: provider.provider.id || '',\n event_code: event.eventCode,\n }));\n\n const input: RegistrationCreateModel = {\n client_id: this.clientId,\n name: registrationName,\n description: registration.description || registrationName,\n delivery_type:\n (firstEvent.deliveryType as 'webhook' | 'webhook_batch' | 'journal' | 'aws_eventbridge') ||\n 'webhook',\n events_of_interest: eventsOfInterest,\n ...(firstEvent.runtimeAction && { runtime_action: firstEvent.runtimeAction }),\n };\n\n return input;\n }\n\n /**\n * Creates a single registration for a provider and its events\n * @private\n * @param registrationData - Registration entity\n * @param events - Events for this registration\n * @param provider - Provider result\n * @param existingRegistrations - Map of existing registrations\n * @returns Registration creation result\n */\n private async createRegistration(\n registrationData: ParsedRegistration,\n events: ParsedEvent[],\n provider: CreateProviderResult,\n existingRegistrations: Map<string, Registration>\n ): Promise<CreateRegistrationResult> {\n // Use the first event to get common properties (runtimeAction, deliveryType)\n const firstEvent = events[0];\n if (!firstEvent) {\n throw new Error('No events provided for registration creation');\n }\n\n const registrationName = registrationData.label;\n\n this.logger.debug(\n `[PROCESSING] Processing registration: ${registrationData.label} for provider: ${provider.provider.originalLabel}`\n );\n this.logger.debug(`[INFO] Registration name: ${registrationName}`);\n\n // Check if registration already exists\n const existingRegistration = existingRegistrations.get(registrationName);\n\n if (existingRegistration) {\n this.logger.debug('[SKIP] Registration already exists - skipping creation');\n this.logger.debug(`[INFO] Existing ID: ${existingRegistration.id}`);\n\n return {\n created: false,\n skipped: true,\n registration: {\n id: existingRegistration.id,\n key: registrationData.key,\n label: registrationData.label,\n originalLabel: registrationData.label,\n name: registrationName,\n description: registrationData.description,\n },\n reason: 'Already exists',\n raw: existingRegistration,\n };\n }\n\n // Create new registration\n this.logger.debug('[CREATE] Creating new registration...');\n\n try {\n const registrationInput = this.preparePayload(\n registrationData,\n events,\n provider,\n registrationName,\n firstEvent\n );\n\n this.logger.debug(`[INFO] Creating registration: ${registrationName}`);\n\n const registrationSDK = this.getRegistrationManager();\n const createdRegistration = await registrationSDK.create(registrationInput);\n\n this.logger.debug('[SUCCESS] Registration created successfully!');\n this.logger.debug(`[INFO] New ID: ${createdRegistration.id}`);\n this.logger.debug(`[INFO] Registration ID: ${createdRegistration.registration_id}`);\n\n const result = {\n created: true,\n skipped: false,\n registration: {\n id: createdRegistration.id,\n key: registrationData.key,\n label: registrationData.label,\n originalLabel: registrationData.label,\n name: createdRegistration.name,\n description: registrationData.description,\n },\n provider: provider.provider,\n raw: createdRegistration,\n };\n\n return result;\n } catch (error) {\n this.logger.error(\n `[ERROR] Failed to create registration \"${registrationName}\": ${(error as Error).message}`\n );\n\n return {\n created: false,\n skipped: false,\n error: (error as Error).message,\n registration: {\n key: registrationData.key,\n label: registrationData.label,\n originalLabel: registrationData.label,\n name: registrationName,\n description: registrationData.description,\n },\n provider: provider.provider,\n };\n }\n }\n}\n\nexport default CreateRegistrations;\n","/**\n * <license header>\n */\n\nimport type {\n OnboardEventsInput,\n OnboardProvider,\n OnboardRegistration,\n OnboardEvent,\n ParsedEntities,\n ParsedProvider,\n ParsedRegistration,\n ParsedEvent,\n} from '../types';\n\n/**\n * InputParser - Parses and extracts entities from OnboardEventsInput data\n */\nclass InputParser {\n private entities: ParsedEntities = {\n providers: [],\n registrations: [],\n events: [],\n };\n\n constructor(input: OnboardEventsInput) {\n for (const provider of input.providers) {\n // Add provider\n this.entities.providers.push(this.createProviderEntity(provider));\n\n // Add registrations and events\n for (const registration of provider.registrations) {\n this.entities.registrations.push(this.createRegistrationEntity(registration, provider.key));\n\n for (const event of registration.events) {\n this.entities.events.push(this.createEventEntity(event, registration.key, provider.key));\n }\n }\n }\n }\n\n /**\n * Create provider entity structure\n */\n private createProviderEntity(provider: OnboardProvider): ParsedProvider {\n return {\n key: provider.key,\n label: provider.label,\n description: provider.description,\n docsUrl: provider.docsUrl,\n };\n }\n\n /**\n * Create registration entity structure\n */\n private createRegistrationEntity(\n registration: OnboardRegistration,\n providerKey: string\n ): ParsedRegistration {\n return {\n key: registration.key,\n label: registration.label,\n description: registration.description,\n providerKey: providerKey,\n };\n }\n\n /**\n * Create event entity structure\n */\n private createEventEntity(\n event: OnboardEvent,\n registrationKey: string,\n providerKey: string\n ): ParsedEvent {\n return {\n eventCode: event.eventCode,\n runtimeAction: event.runtimeAction,\n deliveryType: event.deliveryType,\n sampleEventTemplate: event.sampleEventTemplate,\n registrationKey: registrationKey,\n providerKey: providerKey,\n };\n }\n\n getEntities(): ParsedEntities {\n return this.entities;\n }\n}\n\nexport default InputParser;\n","/**\n * <license header>\n */\n\nimport { Core, Logger } from '@adobe/aio-sdk';\nimport type { OnboardEventsInput, OnboardEventsResponse, OnboardEventsSummary } from './types';\nimport CreateProviders from './create-providers';\nimport CreateEvents from './create-events';\nimport CreateRegistrations from './create-registrations';\nimport InputParser from './input-parser';\n\n/**\n * Utility class for handling onboarding events in Adobe Commerce integrations\n *\n * @example\n * const onboardEvents = new OnboardEvents(\n * 'My Adobe Commerce Project',\n * 'your-consumer-id',\n * 'your-project-id',\n * 'your-workspace-id',\n * 'your-api-key',\n * 'your-access-token'\n * );\n *\n * // Get the configured logger for consistent logging\n * const logger = onboardEvents.getLogger();\n * logger.info('Custom logging with the same configuration');\n *\n * // Process onboard events input\n * await onboardEvents.process({ providers });\n */\nclass OnboardEvents {\n private readonly logger: Logger;\n private readonly createProviders: CreateProviders;\n private readonly createEvents: CreateEvents;\n private readonly createRegistrations: CreateRegistrations;\n\n /**\n * Creates a new OnboardEvents instance\n *\n * @param projectName - Name of the Adobe Commerce project\n * @param consumerId - Adobe I/O consumer ID\n * @param projectId - Adobe I/O project ID\n * @param workspaceId - Adobe I/O workspace ID\n * @param apiKey - API key for authentication\n * @param accessToken - Access token for API calls\n */\n constructor(\n private readonly projectName: string,\n private readonly consumerId: string,\n private readonly projectId: string,\n private readonly workspaceId: string,\n private readonly apiKey: string,\n private readonly accessToken: string\n ) {\n if (!projectName) {\n throw new Error('Project name is required');\n }\n\n if (!consumerId) {\n throw new Error('Consumer ID is required');\n }\n\n if (!projectId) {\n throw new Error('Project ID is required');\n }\n\n if (!workspaceId) {\n throw new Error('Workspace ID is required');\n }\n\n if (!apiKey) {\n throw new Error('API key is required');\n }\n\n if (!accessToken) {\n throw new Error('Access token is required');\n }\n\n // create a Logger using project name\n const loggerName = projectName\n .toLowerCase()\n .replace(/[^a-z0-9\\s-_]/g, '') // Remove special characters except spaces, hyphens, underscores\n .replace(/\\s+/g, '-') // Replace spaces with hyphens\n .replace(/_{2,}/g, '_') // Replace multiple underscores with single\n .replace(/-{2,}/g, '-') // Replace multiple hyphens with single\n .trim()\n .concat('-onboard-events'); // Add suffix to identify as onboard events logger\n this.logger = Core.Logger(loggerName, { level: 'debug' });\n\n // Initialize CreateProviders instance\n this.createProviders = new CreateProviders(\n consumerId,\n projectId,\n workspaceId,\n apiKey,\n accessToken,\n this.logger\n );\n\n // Initialize CreateEvents instance\n this.createEvents = new CreateEvents(\n consumerId,\n projectId,\n workspaceId,\n apiKey, // Using apiKey as clientId\n accessToken,\n this.logger\n );\n\n // Initialize CreateRegistrations instance\n this.createRegistrations = new CreateRegistrations(\n consumerId,\n projectId,\n workspaceId,\n apiKey, // Using apiKey as clientId\n accessToken,\n this.logger\n );\n }\n\n /**\n * Gets the configured logger instance for consistent logging\n *\n * @returns The configured logger instance\n */\n getLogger(): Logger {\n return this.logger;\n }\n\n /**\n * Processes the onboarding events\n *\n * @param input - Onboard events input configuration containing providers, registrations, and events\n * @returns Promise resolving to processing result with created providers\n */\n async process(input: OnboardEventsInput): Promise<OnboardEventsResponse> {\n this.logger.debug(\n `[START] Processing onboard events for project: ${this.projectName} (${this.projectId}) with ${input.providers.length} providers`\n );\n\n const inputParser = new InputParser(input);\n const entities = inputParser.getEntities();\n\n // Use CreateProviders to create the providers\n const providerResults = await this.createProviders.process(\n entities.providers,\n this.projectName\n );\n\n // Use CreateEvents to create the events\n const eventResults = await this.createEvents.process(\n entities.events,\n providerResults,\n this.projectName\n );\n\n // Use CreateRegistrations to create the registrations\n const registrationResults = await this.createRegistrations.process(\n entities.registrations,\n entities.events,\n providerResults,\n this.projectName\n );\n\n const response = {\n createdProviders: providerResults,\n createdEvents: eventResults,\n createdRegistrations: registrationResults,\n };\n\n // Generate and log comprehensive summary\n const summary = this.generateSummary(response);\n this.logSummary(summary);\n\n return response;\n }\n\n /**\n * Generates a concise summary of onboard events processing results\n * @private\n * @param response - The response from the onboard events processing\n * @returns A concise summary with IDs and status information\n */\n private generateSummary(response: OnboardEventsResponse): OnboardEventsSummary {\n // Process providers\n const providerItems = response.createdProviders.map(result => ({\n id: result.provider.id,\n key: result.provider.key,\n label: result.provider.label,\n status: result.created\n ? ('created' as const)\n : result.skipped\n ? ('existing' as const)\n : ('failed' as const),\n error: result.error,\n }));\n\n const providerCounts = {\n created: response.createdProviders.filter(r => r.created).length,\n existing: response.createdProviders.filter(r => r.skipped).length,\n failed: response.createdProviders.filter(r => !r.created && !r.skipped).length,\n total: response.createdProviders.length,\n };\n\n // Process events\n const eventItems = response.createdEvents.map(result => ({\n id: result.event.id,\n eventCode: result.event.eventCode,\n label: result.event.eventCode,\n status: result.created\n ? ('created' as const)\n : result.skipped\n ? ('existing' as const)\n : ('failed' as const),\n provider: result.provider?.key,\n error: result.error,\n }));\n\n const eventCounts = {\n created: response.createdEvents.filter(r => r.created).length,\n existing: response.createdEvents.filter(r => r.skipped).length,\n failed: response.createdEvents.filter(r => !r.created && !r.skipped).length,\n total: response.createdEvents.length,\n };\n\n // Process registrations\n const registrationItems = response.createdRegistrations.map(result => ({\n id: result.registration.id,\n key: result.registration.key,\n label: result.registration.label,\n status: result.created\n ? ('created' as const)\n : result.skipped\n ? ('existing' as const)\n : ('failed' as const),\n provider: result.provider?.key,\n error: result.error,\n }));\n\n const registrationCounts = {\n created: response.createdRegistrations.filter(r => r.created).length,\n existing: response.createdRegistrations.filter(r => r.skipped).length,\n failed: response.createdRegistrations.filter(r => !r.created && !r.skipped).length,\n total: response.createdRegistrations.length,\n };\n\n // Calculate overall totals\n const overall = {\n totalProcessed: providerCounts.total + eventCounts.total + registrationCounts.total,\n totalCreated: providerCounts.created + eventCounts.created + registrationCounts.created,\n totalExisting: providerCounts.existing + eventCounts.existing + registrationCounts.existing,\n totalFailed: providerCounts.failed + eventCounts.failed + registrationCounts.failed,\n };\n\n return {\n providers: {\n items: providerItems,\n counts: providerCounts,\n },\n events: {\n items: eventItems,\n counts: eventCounts,\n },\n registrations: {\n items: registrationItems,\n counts: registrationCounts,\n },\n overall,\n };\n }\n\n /**\n * Logs a formatted summary of onboard events processing results\n * @private\n * @param summary - The summary to log\n */\n private logSummary(summary: OnboardEventsSummary): void {\n this.logger.info('='.repeat(60));\n this.logger.info(`📊 ONBOARD EVENTS SUMMARY - ${this.projectName}`);\n this.logger.info('='.repeat(60));\n\n this.logger.info('');\n // Overall summary\n this.logger.info(\n `📈 OVERALL: ${summary.overall.totalProcessed} processed | ${summary.overall.totalCreated} created | ${summary.overall.totalExisting} existing | ${summary.overall.totalFailed} failed`\n );\n this.logger.info('');\n\n // Providers summary\n if (summary.providers.counts.total > 0) {\n this.logger.info(`🏭 PROVIDERS (${summary.providers.counts.total}):`);\n summary.providers.items.forEach(item => {\n const status = item.status === 'created' ? '✅' : item.status === 'existing' ? '⏭️' : '❌';\n const id = item.id ? ` [ID: ${item.id}]` : '';\n const error = item.error ? ` - Error: ${item.error}` : '';\n this.logger.info(` ${status} ${item.key} - ${item.label}${id}${error}`);\n });\n this.logger.info('');\n }\n\n // Events summary\n if (summary.events.counts.total > 0) {\n this.logger.info(`📅 EVENTS (${summary.events.counts.total}):`);\n summary.events.items.forEach(item => {\n const status = item.status === 'created' ? '✅' : item.status === 'existing' ? '⏭️' : '❌';\n const id = item.id ? ` [ID: ${item.id}]` : '';\n const provider = item.provider ? ` (Provider: ${item.provider})` : '';\n const error = item.error ? ` - Error: ${item.error}` : '';\n this.logger.info(` ${status} ${item.eventCode}${provider}${id}${error}`);\n });\n this.logger.info('');\n }\n\n // Registrations summary\n if (summary.registrations.counts.total > 0) {\n this.logger.info(`📋 REGISTRATIONS (${summary.registrations.counts.total}):`);\n summary.registrations.items.forEach(item => {\n const status = item.status === 'created' ? '✅' : item.status === 'existing' ? '⏭️' : '❌';\n const id = item.id ? ` [ID: ${item.id}]` : '';\n const provider = item.provider ? ` (Provider: ${item.provider})` : '';\n const error = item.error ? ` - Error: ${item.error}` : '';\n this.logger.info(` ${status} ${item.key} - ${item.label}${provider}${id}${error}`);\n });\n this.logger.info('');\n }\n\n this.logger.info('='.repeat(60));\n }\n}\n\nexport default OnboardEvents;\n","{\n \"name\": \"dotenv\",\n \"version\": \"16.6.1\",\n \"description\": \"Loads environment variables from .env file\",\n \"main\": \"lib/main.js\",\n \"types\": \"lib/main.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./lib/main.d.ts\",\n \"require\": \"./lib/main.js\",\n \"default\": \"./lib/main.js\"\n },\n \"./config\": \"./config.js\",\n \"./config.js\": \"./config.js\",\n \"./lib/env-options\": \"./lib/env-options.js\",\n \"./lib/env-options.js\": \"./lib/env-options.js\",\n \"./lib/cli-options\": \"./lib/cli-options.js\",\n \"./lib/cli-options.js\": \"./lib/cli-options.js\",\n \"./package.json\": \"./package.json\"\n },\n \"scripts\": {\n \"dts-check\": \"tsc --project tests/types/tsconfig.json\",\n \"lint\": \"standard\",\n \"pretest\": \"npm run lint && npm run dts-check\",\n \"test\": \"tap run --allow-empty-coverage --disable-coverage --timeout=60000\",\n \"test:coverage\": \"tap run --show-full-coverage --timeout=60000 --coverage-report=text --coverage-report=lcov\",\n \"prerelease\": \"npm test\",\n \"release\": \"standard-version\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git://github.com/motdotla/dotenv.git\"\n },\n \"homepage\": \"https://github.com/motdotla/dotenv#readme\",\n \"funding\": \"https://dotenvx.com\",\n \"keywords\": [\n \"dotenv\",\n \"env\",\n \".env\",\n \"environment\",\n \"variables\",\n \"config\",\n \"settings\"\n ],\n \"readmeFilename\": \"README.md\",\n \"license\": \"BSD-2-Clause\",\n \"devDependencies\": {\n \"@types/node\": \"^18.11.3\",\n \"decache\": \"^4.6.2\",\n \"sinon\": \"^14.0.1\",\n \"standard\": \"^17.0.0\",\n \"standard-version\": \"^9.5.0\",\n \"tap\": \"^19.2.0\",\n \"typescript\": \"^4.8.4\"\n },\n \"engines\": {\n \"node\": \">=12\"\n },\n \"browser\": {\n \"fs\": false\n }\n}\n","const fs = require('fs')\nconst path = require('path')\nconst os = require('os')\nconst crypto = require('crypto')\nconst packageJson = require('../package.json')\n\nconst version = packageJson.version\n\nconst LINE = /(?:^|^)\\s*(?:export\\s+)?([\\w.-]+)(?:\\s*=\\s*?|:\\s+?)(\\s*'(?:\\\\'|[^'])*'|\\s*\"(?:\\\\\"|[^\"])*\"|\\s*`(?:\\\\`|[^`])*`|[^#\\r\\n]+)?\\s*(?:#.*)?(?:$|$)/mg\n\n// Parse src into an Object\nfunction parse (src) {\n const obj = {}\n\n // Convert buffer to string\n let lines = src.toString()\n\n // Convert line breaks to same format\n lines = lines.replace(/\\r\\n?/mg, '\\n')\n\n let match\n while ((match = LINE.exec(lines)) != null) {\n const key = match[1]\n\n // Default undefined or null to empty string\n let value = (match[2] || '')\n\n // Remove whitespace\n value = value.trim()\n\n // Check if double quoted\n const maybeQuote = value[0]\n\n // Remove surrounding quotes\n value = value.replace(/^(['\"`])([\\s\\S]*)\\1$/mg, '$2')\n\n // Expand newlines if double quoted\n if (maybeQuote === '\"') {\n value = value.replace(/\\\\n/g, '\\n')\n value = value.replace(/\\\\r/g, '\\r')\n }\n\n // Add to object\n obj[key] = value\n }\n\n return obj\n}\n\nfunction _parseVault (options) {\n options = options || {}\n\n const vaultPath = _vaultPath(options)\n options.path = vaultPath // parse .env.vault\n const result = DotenvModule.configDotenv(options)\n if (!result.parsed) {\n const err = new Error(`MISSING_DATA: Cannot parse ${vaultPath} for an unknown reason`)\n err.code = 'MISSING_DATA'\n throw err\n }\n\n // handle scenario for comma separated keys - for use with key rotation\n // example: DOTENV_KEY=\"dotenv://:key_1234@dotenvx.com/vault/.env.vault?environment=prod,dotenv://:key_7890@dotenvx.com/vault/.env.vault?environment=prod\"\n const keys = _dotenvKey(options).split(',')\n const length = keys.length\n\n let decrypted\n for (let i = 0; i < length; i++) {\n try {\n // Get full key\n const key = keys[i].trim()\n\n // Get instructions for decrypt\n const attrs = _instructions(result, key)\n\n // Decrypt\n decrypted = DotenvModule.decrypt(attrs.ciphertext, attrs.key)\n\n break\n } catch (error) {\n // last key\n if (i + 1 >= length) {\n throw error\n }\n // try next key\n }\n }\n\n // Parse decrypted .env string\n return DotenvModule.parse(decrypted)\n}\n\nfunction _warn (message) {\n console.log(`[dotenv@${version}][WARN] ${message}`)\n}\n\nfunction _debug (message) {\n console.log(`[dotenv@${version}][DEBUG] ${message}`)\n}\n\nfunction _log (message) {\n console.log(`[dotenv@${version}] ${message}`)\n}\n\nfunction _dotenvKey (options) {\n // prioritize developer directly setting options.DOTENV_KEY\n if (options && options.DOTENV_KEY && options.DOTENV_KEY.length > 0) {\n return options.DOTENV_KEY\n }\n\n // secondary infra already contains a DOTENV_KEY environment variable\n if (process.env.DOTENV_KEY && process.env.DOTENV_KEY.length > 0) {\n return process.env.DOTENV_KEY\n }\n\n // fallback to empty string\n return ''\n}\n\nfunction _instructions (result, dotenvKey) {\n // Parse DOTENV_KEY. Format is a URI\n let uri\n try {\n uri = new URL(dotenvKey)\n } catch (error) {\n if (error.code === 'ERR_INVALID_URL') {\n const err = new Error('INVALID_DOTENV_KEY: Wrong format. Must be in valid uri format like dotenv://:key_1234@dotenvx.com/vault/.env.vault?environment=development')\n err.code = 'INVALID_DOTENV_KEY'\n throw err\n }\n\n throw error\n }\n\n // Get decrypt key\n const key = uri.password\n if (!key) {\n const err = new Error('INVALID_DOTENV_KEY: Missing key part')\n err.code = 'INVALID_DOTENV_KEY'\n throw err\n }\n\n // Get environment\n const environment = uri.searchParams.get('environment')\n if (!environment) {\n const err = new Error('INVALID_DOTENV_KEY: Missing environment part')\n err.code = 'INVALID_DOTENV_KEY'\n throw err\n }\n\n // Get ciphertext payload\n const environmentKey = `DOTENV_VAULT_${environment.toUpperCase()}`\n const ciphertext = result.parsed[environmentKey] // DOTENV_VAULT_PRODUCTION\n if (!ciphertext) {\n const err = new Error(`NOT_FOUND_DOTENV_ENVIRONMENT: Cannot locate environment ${environmentKey} in your .env.vault file.`)\n err.code = 'NOT_FOUND_DOTENV_ENVIRONMENT'\n throw err\n }\n\n return { ciphertext, key }\n}\n\nfunction _vaultPath (options) {\n let possibleVaultPath = null\n\n if (options && options.path && options.path.length > 0) {\n if (Array.isArray(options.path)) {\n for (const filepath of options.path) {\n if (fs.existsSync(filepath)) {\n possibleVaultPath = filepath.endsWith('.vault') ? filepath : `${filepath}.vault`\n }\n }\n } else {\n possibleVaultPath = options.path.endsWith('.vault') ? options.path : `${options.path}.vault`\n }\n } else {\n possibleVaultPath = path.resolve(process.cwd(), '.env.vault')\n }\n\n if (fs.existsSync(possibleVaultPath)) {\n return possibleVaultPath\n }\n\n return null\n}\n\nfunction _resolveHome (envPath) {\n return envPath[0] === '~' ? path.join(os.homedir(), envPath.slice(1)) : envPath\n}\n\nfunction _configVault (options) {\n const debug = Boolean(options && options.debug)\n const quiet = options && 'quiet' in options ? options.quiet : true\n\n if (debug || !quiet) {\n _log('Loading env from encrypted .env.vault')\n }\n\n const parsed = DotenvModule._parseVault(options)\n\n let processEnv = process.env\n if (options && options.processEnv != null) {\n processEnv = options.processEnv\n }\n\n DotenvModule.populate(processEnv, parsed, options)\n\n return { parsed }\n}\n\nfunction configDotenv (options) {\n const dotenvPath = path.resolve(process.cwd(), '.env')\n let encoding = 'utf8'\n const debug = Boolean(options && options.debug)\n const quiet = options && 'quiet' in options ? options.quiet : true\n\n if (options && options.encoding) {\n encoding = options.encoding\n } else {\n if (debug) {\n _debug('No encoding is specified. UTF-8 is used by default')\n }\n }\n\n let optionPaths = [dotenvPath] // default, look for .env\n if (options && options.path) {\n if (!Array.isArray(options.path)) {\n optionPaths = [_resolveHome(options.path)]\n } else {\n optionPaths = [] // reset default\n for (const filepath of options.path) {\n optionPaths.push(_resolveHome(filepath))\n }\n }\n }\n\n // Build the parsed data in a temporary object (because we need to return it). Once we have the final\n // parsed data, we will combine it with process.env (or options.processEnv if provided).\n let lastError\n const parsedAll = {}\n for (const path of optionPaths) {\n try {\n // Specifying an encoding returns a string instead of a buffer\n const parsed = DotenvModule.parse(fs.readFileSync(path, { encoding }))\n\n DotenvModule.populate(parsedAll, parsed, options)\n } catch (e) {\n if (debug) {\n _debug(`Failed to load ${path} ${e.message}`)\n }\n lastError = e\n }\n }\n\n let processEnv = process.env\n if (options && options.processEnv != null) {\n processEnv = options.processEnv\n }\n\n DotenvModule.populate(processEnv, parsedAll, options)\n\n if (debug || !quiet) {\n const keysCount = Object.keys(parsedAll).length\n const shortPaths = []\n for (const filePath of optionPaths) {\n try {\n const relative = path.relative(process.cwd(), filePath)\n shortPaths.push(relative)\n } catch (e) {\n if (debug) {\n _debug(`Failed to load ${filePath} ${e.message}`)\n }\n lastError = e\n }\n }\n\n _log(`injecting env (${keysCount}) from ${shortPaths.join(',')}`)\n }\n\n if (lastError) {\n return { parsed: parsedAll, error: lastError }\n } else {\n return { parsed: parsedAll }\n }\n}\n\n// Populates process.env from .env file\nfunction config (options) {\n // fallback to original dotenv if DOTENV_KEY is not set\n if (_dotenvKey(options).length === 0) {\n return DotenvModule.configDotenv(options)\n }\n\n const vaultPath = _vaultPath(options)\n\n // dotenvKey exists but .env.vault file does not exist\n if (!vaultPath) {\n _warn(`You set DOTENV_KEY but you are missing a .env.vault file at ${vaultPath}. Did you forget to build it?`)\n\n return DotenvModule.configDotenv(options)\n }\n\n return DotenvModule._configVault(options)\n}\n\nfunction decrypt (encrypted, keyStr) {\n const key = Buffer.from(keyStr.slice(-64), 'hex')\n let ciphertext = Buffer.from(encrypted, 'base64')\n\n const nonce = ciphertext.subarray(0, 12)\n const authTag = ciphertext.subarray(-16)\n ciphertext = ciphertext.subarray(12, -16)\n\n try {\n const aesgcm = crypto.createDecipheriv('aes-256-gcm', key, nonce)\n aesgcm.setAuthTag(authTag)\n return `${aesgcm.update(ciphertext)}${aesgcm.final()}`\n } catch (error) {\n const isRange = error instanceof RangeError\n const invalidKeyLength = error.message === 'Invalid key length'\n const decryptionFailed = error.message === 'Unsupported state or unable to authenticate data'\n\n if (isRange || invalidKeyLength) {\n const err = new Error('INVALID_DOTENV_KEY: It must be 64 characters long (or more)')\n err.code = 'INVALID_DOTENV_KEY'\n throw err\n } else if (decryptionFailed) {\n const err = new Error('DECRYPTION_FAILED: Please check your DOTENV_KEY')\n err.code = 'DECRYPTION_FAILED'\n throw err\n } else {\n throw error\n }\n }\n}\n\n// Populate process.env with parsed values\nfunction populate (processEnv, parsed, options = {}) {\n const debug = Boolean(options && options.debug)\n const override = Boolean(options && options.override)\n\n if (typeof parsed !== 'object') {\n const err = new Error('OBJECT_REQUIRED: Please check the processEnv argument being passed to populate')\n err.code = 'OBJECT_REQUIRED'\n throw err\n }\n\n // Set process.env\n for (const key of Object.keys(parsed)) {\n if (Object.prototype.hasOwnProperty.call(processEnv, key)) {\n if (override === true) {\n processEnv[key] = parsed[key]\n }\n\n if (debug) {\n if (override === true) {\n _debug(`\"${key}\" is already defined and WAS overwritten`)\n } else {\n _debug(`\"${key}\" is already defined and was NOT overwritten`)\n }\n }\n } else {\n processEnv[key] = parsed[key]\n }\n }\n}\n\nconst DotenvModule = {\n configDotenv,\n _configVault,\n _parseVault,\n config,\n decrypt,\n parse,\n populate\n}\n\nmodule.exports.configDotenv = DotenvModule.configDotenv\nmodule.exports._configVault = DotenvModule._configVault\nmodule.exports._parseVault = DotenvModule._parseVault\nmodule.exports.config = DotenvModule.config\nmodule.exports.decrypt = DotenvModule.decrypt\nmodule.exports.parse = DotenvModule.parse\nmodule.exports.populate = DotenvModule.populate\n\nmodule.exports = DotenvModule\n","/**\n * <license header>\n */\n\nimport * as dotenv from 'dotenv';\nimport type { IOEventsEnvironment } from './types';\n\ndotenv.config();\n\nexport type { IOEventsEnvironment };\n\n/**\n * Loads and validates Adobe I/O Events environment configuration.\n */\nexport class IOEnvironmentLoader {\n /**\n * Loads Adobe I/O Events environment variables.\n *\n * @returns Validated environment configuration\n * @throws Error if required environment variables are missing\n */\n public static load(): IOEventsEnvironment {\n const required = {\n oauth: {\n clientId: process.env.OAUTH_CLIENT_ID,\n clientSecret: process.env.OAUTH_CLIENT_SECRET,\n technicalAccountId: process.env.OAUTH_TECHNICAL_ACCOUNT_ID,\n technicalAccountEmail: process.env.OAUTH_TECHNICAL_ACCOUNT_EMAIL,\n orgId: process.env.OAUTH_ORG_ID,\n scopes: process.env.OAUTH_SCOPES,\n },\n io: {\n consumerId: process.env.IO_CONSUMER_ID,\n projectId: process.env.IO_PROJECT_ID,\n workspaceId: process.env.IO_WORKSPACE_ID,\n },\n };\n\n const missing: string[] = [];\n Object.entries(required).forEach(([group, vars]) => {\n Object.entries(vars).forEach(([key, value]) => {\n if (!value) {\n missing.push(`${group.toUpperCase()}_${key.replace(/([A-Z])/g, '_$1').toUpperCase()}`);\n }\n });\n });\n\n if (missing.length > 0) {\n throw new Error(`Missing required environment variables: ${missing.join(', ')}`);\n }\n\n return {\n oauth: {\n clientId: required.oauth.clientId!,\n clientSecret: required.oauth.clientSecret!,\n technicalAccountId: required.oauth.technicalAccountId!,\n technicalAccountEmail: required.oauth.technicalAccountEmail!,\n orgId: required.oauth.orgId!,\n scopes: required.oauth.scopes!.split(', '),\n },\n io: {\n consumerId: required.io.consumerId!,\n projectId: required.io.projectId!,\n workspaceId: required.io.workspaceId!,\n },\n };\n }\n}\n","/**\n * <license header>\n */\n\nimport { context, getToken } from '@adobe/aio-lib-ims';\nimport { AdobeIMSConfig } from './types';\n\n/**\n * Class providing authentication functionality for Adobe IMS (Identity Management System)\n */\nclass AdobeAuth {\n /**\n * Retrieves an authentication token from Adobe IMS\n *\n * @param clientId - The client ID for the Adobe IMS integration\n * @param clientSecret - The client secret for the Adobe IMS integration\n * @param technicalAccountId - The technical account ID for the Adobe IMS integration\n * @param technicalAccountEmail - The technical account email for the Adobe IMS integration\n * @param imsOrgId - The IMS organization ID\n * @param scopes - Array of permission scopes to request for the token\n * @param currentContext - The context name for storing the configuration (defaults to 'onboarding-config')\n * @returns Promise<string> - A promise that resolves to the authentication token\n *\n * @example\n * const token = await AdobeAuth.getToken(\n * 'your-client-id',\n * 'your-client-secret',\n * 'your-technical-account-id',\n * 'your-technical-account-email',\n * 'your-ims-org-id',\n * ['AdobeID', 'openid', 'adobeio_api']\n * );\n */\n static async getToken(\n clientId: string,\n clientSecret: string,\n technicalAccountId: string,\n technicalAccountEmail: string,\n imsOrgId: string,\n scopes: string[],\n currentContext: string = 'onboarding-config'\n ): Promise<string> {\n const config: AdobeIMSConfig = {\n client_id: clientId,\n client_secrets: [clientSecret],\n technical_account_id: technicalAccountId,\n technical_account_email: technicalAccountEmail,\n ims_org_id: imsOrgId,\n scopes: scopes,\n };\n\n await context.setCurrent(currentContext);\n await context.set(currentContext, config);\n\n return await getToken();\n }\n}\n\nexport default AdobeAuth;\n","/**\n * <license header>\n */\n\nimport type { BearerTokenInfo } from './types';\n\n/**\n * Utility class for extracting and handling Bearer tokens from HTTP request headers.\n * Supports both standard HTTP headers and OpenWhisk action parameter formats for maximum portability.\n */\nclass BearerToken {\n /**\n * Extracts the Bearer token from HTTP request headers and returns detailed token information.\n * Supports both standard HTTP headers and OpenWhisk action parameter formats.\n *\n * @param headersOrParams - Either a standard headers object or OpenWhisk action parameters\n * @returns Detailed token information object\n *\n * @example\n * // Standard HTTP headers approach\n * const headers = {\n * authorization: 'Bearer abc123token'\n * };\n * const tokenInfo = BearerToken.extract(headers);\n *\n * @example\n * // OpenWhisk action parameters (backward compatibility)\n * const params = {\n * __ow_headers: {\n * authorization: 'Bearer abc123token'\n * }\n * };\n * const tokenInfo = BearerToken.extract(params);\n *\n * @example\n * // Both return the same result:\n * // {\n * // token: 'abc123token',\n * // tokenLength: 11,\n * // isValid: true,\n * // expiry: '2024-01-01T12:00:00.000Z',\n * // timeUntilExpiry: 3600000\n * // }\n */\n static extract(headersOrParams: { [key: string]: any }): BearerTokenInfo {\n let token: string | null = null;\n\n // Try standard headers approach first (more portable)\n if (headersOrParams.authorization?.startsWith('Bearer ')) {\n token = headersOrParams.authorization.substring('Bearer '.length);\n }\n // Fall back to OpenWhisk format for backward compatibility\n else if (headersOrParams.__ow_headers?.authorization?.startsWith('Bearer ')) {\n token = headersOrParams.__ow_headers.authorization.substring('Bearer '.length);\n }\n\n return BearerToken.info(token);\n }\n\n /**\n * Analyzes a Bearer token and returns detailed information including validity and expiry.\n * Supports both JWT tokens (with automatic expiry detection) and plain tokens (24h default expiry).\n *\n * @param token - The Bearer token string (or null). Can be JWT or plain token.\n * @returns Detailed token information object\n *\n * @example\n * // Plain token (gets 24h default expiry)\n * const plainTokenInfo = BearerToken.info('abc123token');\n * // returns: {\n * // token: 'abc123token',\n * // tokenLength: 11,\n * // isValid: true,\n * // expiry: '2024-01-02T12:00:00.000Z', // 24h from now\n * // timeUntilExpiry: 86400000 // milliseconds until expiry\n * // }\n *\n * @example\n * // JWT token (automatic expiry detection from 'exp' or 'expires_in' claims)\n * const jwtToken = 'eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDQ0Njc2MDB9.signature';\n * const jwtTokenInfo = BearerToken.info(jwtToken);\n * // returns: {\n * // token: 'eyJhbGciOiJIUzI1NiJ9...',\n * // tokenLength: 45,\n * // isValid: true, // false if expired\n * // expiry: '2024-01-05T12:00:00.000Z', // from JWT exp claim\n * // timeUntilExpiry: 172800000 // actual time until expiry\n * // }\n *\n * @example\n * // Null or invalid token\n * const nullTokenInfo = BearerToken.info(null);\n * // returns: {\n * // token: null,\n * // tokenLength: 0,\n * // isValid: false,\n * // expiry: null,\n * // timeUntilExpiry: null\n * // }\n */\n static info(token: string | null): BearerTokenInfo {\n const tokenExpiry = BearerToken._calculateExpiry(token);\n\n return {\n token: token,\n tokenLength: token ? token.length : 0,\n isValid: BearerToken._isTokenValid(token, tokenExpiry),\n expiry: tokenExpiry ? tokenExpiry.toISOString() : null,\n timeUntilExpiry: tokenExpiry ? Math.max(0, tokenExpiry.getTime() - Date.now()) : null,\n };\n }\n\n /**\n * Checks if the given token is valid and not expired\n * @private\n * @param token - The bearer token string\n * @param tokenExpiry - The token expiry date\n * @returns {boolean} True if token is valid\n */\n private static _isTokenValid(token: string | null, tokenExpiry: Date | null): boolean {\n if (!token) {\n return false;\n }\n\n if (tokenExpiry && Date.now() >= tokenExpiry.getTime()) {\n console.log('⏰ Token has expired');\n return false;\n }\n\n return true;\n }\n\n /**\n * Calculates token expiry from JWT token or uses default for non-JWT tokens\n * @private\n * @param token - The token string (JWT or plain token)\n * @returns Date object representing token expiry\n */\n private static _calculateExpiry(token: string | null): Date | null {\n // Handle empty tokens\n if (!token) {\n return null;\n }\n\n try {\n // Try to parse as JWT token\n const parts = token.split('.');\n if (parts.length === 3) {\n const payload = JSON.parse(Buffer.from(parts[1] || '', 'base64').toString());\n\n if (payload.expires_in) {\n // expires_in is in milliseconds\n return new Date(Date.now() + parseInt(payload.expires_in));\n }\n\n if (payload.exp) {\n // exp is Unix timestamp in seconds\n return new Date(payload.exp * 1000);\n }\n }\n\n // For non-JWT tokens or JWT tokens without expiry, default to 24 hours\n return new Date(Date.now() + 24 * 60 * 60 * 1000);\n } catch (error) {\n console.warn('[WARN] Could not parse token expiry, using default 24h');\n return new Date(Date.now() + 24 * 60 * 60 * 1000);\n }\n }\n}\n\nexport default BearerToken;\nexport type { BearerTokenInfo } from './types';\n","/**\n * <license header>\n */\n\nimport AdobeAuth from '../../../../commerce/adobe-auth';\nimport BearerToken from '../../../../integration/bearer-token';\nimport type { OAuthCredentials, ValidatedToken } from './types';\n\nexport type { OAuthCredentials, ValidatedToken };\n\n/**\n * Handles Adobe IMS authentication and token validation.\n */\nexport class AdobeAuthToken {\n /**\n * Generates and validates an Adobe IMS access token.\n *\n * @param credentials - OAuth credentials for authentication\n * @returns Validated token information\n * @throws Error if authentication fails or token is invalid\n */\n public static async generate(credentials: OAuthCredentials): Promise<ValidatedToken> {\n const token = await AdobeAuth.getToken(\n credentials.clientId,\n credentials.clientSecret,\n credentials.technicalAccountId,\n credentials.technicalAccountEmail,\n credentials.orgId,\n credentials.scopes\n );\n\n if (!token) {\n throw new Error('Failed to obtain IMS access token');\n }\n\n return this.validate(token);\n }\n\n /**\n * Validates an existing access token.\n *\n * @param token - Access token to validate\n * @returns Validated token information\n * @throws Error if token is invalid or expired\n */\n public static validate(token: string): ValidatedToken {\n const tokenInfo = BearerToken.info(token);\n\n if (!tokenInfo.isValid || !tokenInfo.token) {\n throw new Error('Access token is invalid or expired');\n }\n\n return {\n token: tokenInfo.token!,\n expiry: tokenInfo.expiry || undefined,\n isValid: tokenInfo.isValid,\n };\n }\n}\n","/**\n * <license header>\n */\n\nimport type { Logger } from '@adobe/aio-sdk';\n\nimport OnboardIOEventsScript from '../../../../../integration/onboard-events';\nimport type {\n OnboardEventsInput,\n OnboardEventsResponse,\n} from '../../../../../integration/onboard-events/types';\nimport { IOEnvironmentLoader } from '../../../../framework/helpers/io-environment';\nimport type { IOEventsEnvironment } from '../../../../framework/helpers/io-environment/types';\nimport { AdobeAuthToken } from '../../../../framework/helpers/adobe-auth-token';\n\nimport * as dotenv from 'dotenv';\ndotenv.config();\n\n/**\n * Handles Adobe I/O Events onboarding to Adobe I/O Console.\n *\n * Manages authentication, token validation, and onboarding of providers,\n * events, and registrations to Adobe I/O Console.\n *\n * @example\n * const executor = new ExecuteIOEvents('my-app', ioEventsConfig);\n * const response = await executor.onboard();\n * console.log(`Created ${response.createdProviders.length} providers`);\n */\nexport class ExecuteIOEvents {\n /** Logger instance populated during onboarding */\n private logger: Logger | null = null;\n\n constructor(\n private readonly applicationName: string,\n private readonly ioEventsConfig: OnboardEventsInput\n ) {}\n\n /**\n * Executes the complete I/O Events onboarding process.\n *\n * Steps: authenticate → validate token → create providers/events/registrations\n *\n * @returns Onboarding response with created entities\n * @throws Error if authentication, validation, or onboarding fails\n */\n public async onboard(): Promise<OnboardEventsResponse> {\n try {\n const env = IOEnvironmentLoader.load();\n const tokenInfo = await AdobeAuthToken.generate(env.oauth);\n\n const response = await this.executeOnboarding(env, tokenInfo.token);\n\n this.logTokenInfo(tokenInfo);\n return response;\n } catch (error: any) {\n throw new Error(`I/O Events onboarding failed: ${error.message}`);\n }\n }\n\n /**\n * Returns the logger instance populated during onboarding.\n *\n * @returns Logger instance or null if onboard() hasn't been called\n */\n public getLogger(): Logger | null {\n return this.logger;\n }\n\n /**\n * Executes the onboarding script to create providers, events, and registrations.\n *\n * @private\n * @param env - Environment configuration\n * @param token - Validated access token\n * @returns Onboarding response\n */\n private async executeOnboarding(\n env: IOEventsEnvironment,\n token: string\n ): Promise<OnboardEventsResponse> {\n const projectName = `${this.applicationName} (${env.io.workspaceId})`;\n\n const onboardScript = new OnboardIOEventsScript(\n projectName,\n env.io.consumerId,\n env.io.projectId,\n env.io.workspaceId,\n env.oauth.clientId,\n token\n );\n\n const response = await onboardScript.process(this.ioEventsConfig);\n\n // Capture logger for external access\n this.logger = onboardScript.getLogger();\n\n return response;\n }\n\n /**\n * Logs token information for debugging.\n *\n * @private\n * @param tokenInfo - Token information including expiry\n */\n private logTokenInfo(tokenInfo: { expiry: string | undefined }): void {\n if (this.logger) {\n this.logger.debug('[INFO] Token generated successfully');\n this.logger.debug(`[INFO] Token expires at: ${tokenInfo.expiry || 'Unknown'}`);\n }\n }\n}\n","/**\n * <license header>\n */\n\n/**\n * Custom logger class that provides null-safe logging methods\n * This class is private to the package and should not be exported publicly\n */\nclass CustomLogger {\n private logger: any;\n\n /**\n * @param logger - External logger instance (can be null)\n */\n constructor(logger: any = null) {\n this.logger = logger;\n }\n\n /**\n * Log debug message if logger is available\n * @param message - Debug message to log\n * @param args - Additional arguments to pass to logger\n */\n debug(message: string, ...args: any[]): void {\n if (this.logger && typeof this.logger.debug === 'function') {\n this.logger.debug(message, ...args);\n }\n }\n\n /**\n * Log info message if logger is available\n * @param message - Info message to log\n * @param args - Additional arguments to pass to logger\n */\n info(message: string, ...args: any[]): void {\n if (this.logger && typeof this.logger.info === 'function') {\n this.logger.info(message, ...args);\n }\n }\n\n /**\n * Log error message if logger is available\n * @param message - Error message to log\n * @param args - Additional arguments to pass to logger\n */\n error(message: string, ...args: any[]): void {\n if (this.logger && typeof this.logger.error === 'function') {\n this.logger.error(message, ...args);\n }\n }\n\n /**\n * Get the underlying logger instance\n * @returns the logger instance or null\n */\n getLogger(): any {\n return this.logger;\n }\n}\n\nexport default CustomLogger;\n","/**\n * ConfigureProvider for Adobe I/O Events Provider Configuration\n *\n * <license header>\n */\n\nimport {\n EventConfigurationService,\n EventProviderService,\n type EventProvider,\n} from '@adobe-commerce/aio-services-kit';\nimport AdobeCommerceClient from '../../../commerce/adobe-commerce-client';\nimport CustomLogger from '../../../framework/custom-logger';\nimport type { Provider } from '../../../io-events/provider/types';\nimport type { WorkspaceConfig } from '../types';\nimport type { ConfigureProviderResult } from './types';\n\n/**\n * ConfigureProvider for Adobe I/O Events Provider Setup\n *\n * This class handles the configuration and setup of Adobe I/O Events providers\n * for Adobe Commerce integration.\n *\n * @example\n * ```typescript\n * const configureProvider = new ConfigureProvider(\n * adobeCommerceClient,\n * 'merchant-id-123',\n * 'environment-id-456',\n * logger\n * );\n * const result = await configureProvider.execute(provider, workspaceConfig);\n * ```\n */\nclass ConfigureProvider {\n /** Adobe Commerce client instance */\n private readonly adobeCommerceClient: AdobeCommerceClient;\n\n /** Merchant ID for Adobe Commerce */\n private readonly merchantId: string;\n\n /** Environment ID for Adobe Commerce */\n private readonly environmentId: string;\n\n /** CustomLogger instance for logging operations */\n private readonly customLogger: CustomLogger;\n\n /** EventProviderService instance for provider operations */\n private readonly eventProviderService: EventProviderService;\n\n /** EventConfigurationService instance for configuration operations */\n private readonly eventConfigurationService: EventConfigurationService;\n\n /**\n * Constructor for ConfigureProvider\n *\n * @param adobeCommerceClient - Adobe Commerce client instance\n * @param merchantId - Merchant ID for Adobe Commerce\n * @param environmentId - Environment ID for Adobe Commerce\n * @param logger - Optional logger instance for logging operations\n * @throws {Error} When required parameters are missing or invalid\n * @example\n * ```typescript\n * const configureProvider = new ConfigureProvider(\n * adobeCommerceClient,\n * 'merchant-id-123',\n * 'environment-id-456',\n * logger\n * );\n * ```\n */\n constructor(\n adobeCommerceClient: AdobeCommerceClient,\n merchantId: string,\n environmentId: string,\n logger: any = null\n ) {\n // Validate required parameters\n if (!adobeCommerceClient) {\n throw new Error('Adobe Commerce client is required');\n }\n if (!merchantId || typeof merchantId !== 'string') {\n throw new Error('Valid merchant ID is required');\n }\n if (!environmentId || typeof environmentId !== 'string') {\n throw new Error('Valid environment ID is required');\n }\n\n this.adobeCommerceClient = adobeCommerceClient;\n this.merchantId = merchantId;\n this.environmentId = environmentId;\n this.customLogger = new CustomLogger(logger);\n this.eventProviderService = new EventProviderService(this.adobeCommerceClient);\n this.eventConfigurationService = new EventConfigurationService(this.adobeCommerceClient);\n }\n\n /**\n * Execute provider configuration\n *\n * This method handles the provider configuration process for Adobe I/O Events.\n *\n * @param provider - Provider configuration for Adobe I/O Events\n * @param workspaceConfig - Workspace configuration settings\n * @returns A promise that resolves with the configuration result\n * @throws {Error} If provider configuration fails\n * @example\n * ```typescript\n * const result = await configureProvider.execute(provider, workspaceConfig);\n * if (result.success) {\n * console.log('Provider configured successfully');\n * }\n * ```\n */\n async execute(\n provider: Provider,\n workspaceConfig: WorkspaceConfig\n ): Promise<ConfigureProviderResult> {\n this.customLogger.debug('[DEBUG] Starting provider configuration');\n\n try {\n // Validate input parameters\n this.validateConfigureParams(provider, workspaceConfig);\n\n // Get current event providers\n this.customLogger.debug('[FETCH] Fetching current event providers');\n const eventProviderResult = await this.eventProviderService.list();\n\n if (!eventProviderResult.success) {\n const errorMsg = `Failed to fetch event providers: ${eventProviderResult.error}`;\n this.customLogger.error(`[ERROR] ${errorMsg}`);\n return {\n success: false,\n error: errorMsg,\n details: eventProviderResult,\n };\n }\n\n // Check if default workspace is empty and update if needed\n const workspaceUpdateResult = await this.updateWorkspaceIfEmpty(\n eventProviderResult.data,\n workspaceConfig\n );\n if (!workspaceUpdateResult.success) {\n return workspaceUpdateResult;\n }\n\n // Check if the provider is already added\n const providerList = Array.isArray(eventProviderResult.data) ? eventProviderResult.data : [];\n const existingProvider = providerList.find(\n (existingProvider: any) => existingProvider.provider_id === provider.id\n );\n\n if (existingProvider) {\n this.customLogger.info(`[SKIP] Provider ${provider.id} is already configured`);\n return {\n success: true,\n provider: existingProvider,\n };\n } else {\n this.customLogger.debug(\n `[DEBUG] Provider ${provider.id} is not yet configured - creating new provider...`\n );\n\n const createResult = await this.createNewProvider(provider, workspaceConfig);\n if (!createResult.success) {\n return createResult;\n }\n\n this.customLogger.info(`[CREATE] Event provider ${provider.id} created successfully`);\n return {\n success: true,\n provider: createResult.provider!,\n };\n }\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\n this.customLogger.error(`[ERROR] Provider configuration failed: ${errorMessage}`);\n\n return {\n success: false,\n error: errorMessage,\n };\n }\n }\n\n /**\n * Creates a new event provider\n *\n * @param provider - Provider configuration object\n * @param workspaceConfig - Workspace configuration object\n * @returns Creation result with success status and provider data\n * @private\n */\n private async createNewProvider(\n provider: Provider,\n workspaceConfig: WorkspaceConfig\n ): Promise<ConfigureProviderResult> {\n const providerData = {\n provider_id: provider.id,\n instance_id: provider.instance_id!, // Already validated in validateConfigureParams\n label: provider.label,\n description: provider.description,\n workspace_configuration: JSON.stringify(workspaceConfig),\n };\n\n this.customLogger.debug(`[DEBUG] Creating event provider: ${provider.label} (${provider.id})`);\n\n const createResult = await this.eventProviderService.create(providerData);\n\n if (!createResult.success) {\n const errorMsg = `Failed to create event provider: ${createResult.error}`;\n this.customLogger.error(`[ERROR] ${errorMsg}`);\n return {\n success: false,\n error: errorMsg,\n details: createResult,\n };\n }\n\n return {\n success: true,\n provider: createResult.data as EventProvider,\n };\n }\n\n /**\n * Updates workspace configuration if the default workspace is empty\n *\n * @param existingProviders - Array of existing providers\n * @param workspaceConfig - Workspace configuration object\n * @returns Update result with success status\n * @private\n */\n private async updateWorkspaceIfEmpty(\n existingProviders: any,\n workspaceConfig: WorkspaceConfig\n ): Promise<ConfigureProviderResult> {\n const providerArray = Array.isArray(existingProviders) ? existingProviders : [];\n const isDefaultWorkspaceEmpty =\n providerArray.length === 0 ||\n providerArray.every(\n (item: any) => !item.workspace_configuration || item.workspace_configuration === ''\n );\n\n if (isDefaultWorkspaceEmpty) {\n this.customLogger.debug('[DEBUG] Default workspace is empty, updating configuration...');\n\n const updateConfigPayload = {\n enabled: true,\n merchant_id: this.merchantId,\n environment_id: this.environmentId,\n workspace_configuration: JSON.stringify(workspaceConfig),\n };\n\n this.customLogger.debug(\n `[DEBUG] Updating workspace configuration for merchant: ${this.merchantId}`\n );\n\n const updateResult = await this.eventConfigurationService.update(updateConfigPayload);\n\n if (!updateResult.success) {\n const errorMsg = `Failed to update configuration: ${updateResult.error}`;\n this.customLogger.error(`[ERROR] ${errorMsg}`);\n return {\n success: false,\n error: errorMsg,\n details: updateResult,\n };\n }\n\n this.customLogger.info('[UPDATE] Configuration updated successfully');\n }\n\n return { success: true };\n }\n\n /**\n * Validate input parameters for configure method\n *\n * @param provider - Provider configuration for Adobe I/O Events\n * @param workspaceConfig - Workspace configuration settings\n * @throws {Error} If validation fails\n * @private\n */\n private validateConfigureParams(provider: Provider, workspaceConfig: WorkspaceConfig): void {\n if (!provider || typeof provider !== 'object') {\n throw new Error('Provider configuration object is required');\n }\n\n const requiredProviderFields: (keyof Provider)[] = [\n 'id',\n 'instance_id',\n 'label',\n 'description',\n ];\n for (const field of requiredProviderFields) {\n if (!provider[field] || typeof provider[field] !== 'string') {\n throw new Error(`Provider ${field} is required and must be a string`);\n }\n }\n\n if (!workspaceConfig || typeof workspaceConfig !== 'object') {\n throw new Error('Workspace configuration object is required');\n }\n\n this.customLogger.debug(`[DEBUG] Validated provider: ${provider.label} (${provider.id})`);\n }\n}\n\nexport default ConfigureProvider;\n","/**\n * Adobe Commerce I/O Events Configuration Component\n *\n * <license header>\n */\n\nimport AdobeCommerceClient from '../../commerce/adobe-commerce-client';\nimport CustomLogger from '../../framework/custom-logger';\nimport type { Provider } from '../../io-events/provider/types';\nimport type { WorkspaceConfig, CommerceEventConfig } from './types';\nimport ConfigureProvider from './configure-provider';\nimport {\n EventService,\n EventSubscriptionService,\n type EventSubscription,\n} from '@adobe-commerce/aio-services-kit';\n\n/**\n * OnboardCommerce for Adobe Commerce I/O Events Configuration\n *\n * This class provides functionality to automate the configuration of Adobe Commerce\n * I/O Events via REST endpoint, simplifying the onboarding process for Commerce instances.\n *\n * @example\n * ```typescript\n * const adobeCommerceClient = new AdobeCommerceClient(...);\n * const onboardCommerce = new OnboardCommerce(\n * adobeCommerceClient,\n * 'merchant-id-123',\n * 'environment-id-456',\n * logger\n * );\n * ```\n */\nclass OnboardCommerce {\n /** Adobe Commerce client instance */\n private readonly adobeCommerceClient: AdobeCommerceClient;\n\n /** Merchant ID for Adobe Commerce */\n private readonly merchantId: string;\n\n /** Environment ID for Adobe Commerce */\n private readonly environmentId: string;\n\n /** CustomLogger instance for logging operations */\n private readonly customLogger: CustomLogger;\n\n /** ConfigureProvider instance for provider configuration */\n private readonly configureProvider: ConfigureProvider;\n\n /** EventSubscriptionService instance for managing event subscriptions */\n private readonly eventSubscriptionService: EventSubscriptionService;\n\n /** EventService instance for managing events */\n private readonly eventService: EventService;\n\n /** Flag to indicate if the Commerce instance is PaaS (defaults to false) */\n private readonly isPaaS: boolean;\n\n /**\n * Constructor for OnboardCommerce\n *\n * @param adobeCommerceClient - Adobe Commerce client instance\n * @param merchantId - Merchant ID for Adobe Commerce\n * @param environmentId - Environment ID for Adobe Commerce\n * @param logger - Optional logger instance for logging operations\n * @param isPaaS - Flag to indicate if the Commerce instance is PaaS (defaults to false)\n * @throws {Error} When required parameters are missing or invalid\n * @example\n * ```typescript\n * const adobeCommerceClient = new AdobeCommerceClient(...);\n * const onboardCommerce = new OnboardCommerce(\n * adobeCommerceClient,\n * 'merchant-id-123',\n * 'environment-id-456',\n * logger\n * );\n * ```\n */\n constructor(\n adobeCommerceClient: AdobeCommerceClient,\n merchantId: string,\n environmentId: string,\n logger: any = null,\n isPaaS: boolean = false\n ) {\n // Validate required parameters\n if (!adobeCommerceClient) {\n throw new Error('Adobe Commerce client is required');\n }\n if (!merchantId || typeof merchantId !== 'string') {\n throw new Error('Valid merchant ID is required');\n }\n if (!environmentId || typeof environmentId !== 'string') {\n throw new Error('Valid environment ID is required');\n }\n\n this.adobeCommerceClient = adobeCommerceClient;\n this.merchantId = merchantId;\n this.environmentId = environmentId;\n this.isPaaS = isPaaS;\n this.customLogger = new CustomLogger(logger);\n this.configureProvider = new ConfigureProvider(\n adobeCommerceClient,\n merchantId,\n environmentId,\n logger\n );\n this.eventSubscriptionService = new EventSubscriptionService(adobeCommerceClient);\n this.eventService = new EventService(adobeCommerceClient);\n }\n\n /**\n * Process Adobe Commerce I/O Events Configuration\n *\n * This method automates the configuration of Adobe Commerce I/O Events by setting up\n * the provider, workspace, and commerce-specific event configurations.\n *\n * @param provider - Provider configuration for Adobe I/O Events\n * @param workspaceConfig - Workspace configuration settings\n * @param commerceEventsConfig - Array of commerce event configurations (optional, defaults to empty array)\n * @returns A promise that resolves with the configuration result\n * @throws {Error} If configuration fails\n * @example\n * ```typescript\n * const result = await onboardCommerce.process(\n * providerConfig,\n * workspaceConfig,\n * commerceEventsConfig\n * );\n * ```\n */\n async process(\n provider: Provider,\n workspaceConfig: WorkspaceConfig,\n commerceEventsConfig: CommerceEventConfig[] = []\n ): Promise<any> {\n this.customLogger.info(\n `[START] Configuring Adobe Commerce I/O Events\\n` +\n ` Provider: ${provider.label} (${provider.id})\\n` +\n ` Workspace: ${workspaceConfig.project.name}\\n` +\n ` Events to process: ${commerceEventsConfig.length}`\n );\n\n try {\n // Configure the provider using the ConfigureProvider component\n const providerResult = await this.configureProvider.execute(provider, workspaceConfig);\n\n if (!providerResult.success) {\n return providerResult;\n }\n\n // Process commerce events configuration if provided\n if (commerceEventsConfig && commerceEventsConfig.length > 0) {\n // Get current event subscriptions to check what's already configured\n this.customLogger.debug('[FETCH] Fetching current event subscriptions...');\n const eventSubscriptionsResult = await this.eventSubscriptionService.list();\n\n let existingSubscriptions: any[] = [];\n if (!eventSubscriptionsResult.success) {\n this.customLogger.error(\n `[ERROR] Failed to fetch event subscriptions: ${eventSubscriptionsResult.error}`\n );\n } else {\n existingSubscriptions = Array.isArray(eventSubscriptionsResult.data)\n ? eventSubscriptionsResult.data\n : [];\n this.customLogger.debug(\n `[FETCH] Retrieved ${existingSubscriptions.length} existing event subscription(s)`\n );\n }\n\n // Get supported events to validate commerce events configuration\n // Skip this step for PaaS instances as they don't require supported events validation\n let supportedEvents: any[] = [];\n if (!this.isPaaS) {\n this.customLogger.debug('[FETCH] Fetching supported events list...');\n const supportedEventsResult = await this.eventService.supportedList();\n\n if (!supportedEventsResult.success) {\n this.customLogger.error(\n `[ERROR] Failed to fetch supported events: ${supportedEventsResult.error}`\n );\n } else {\n supportedEvents = Array.isArray(supportedEventsResult.data)\n ? supportedEventsResult.data\n : [];\n this.customLogger.debug(\n `[FETCH] Retrieved ${supportedEvents.length} supported event(s)`\n );\n }\n } else {\n this.customLogger.debug('[SKIP] Skipping supported events validation for PaaS instance');\n }\n\n // Filter events based on existing subscriptions and supported events\n const { alreadySubscribed, needsSubscription, unsupported } =\n this.filterEventsBySubscriptionStatus(\n commerceEventsConfig,\n existingSubscriptions,\n provider.id,\n supportedEvents\n );\n\n const result = {\n successfulSubscriptions: [] as string[],\n failedSubscriptions: [] as string[],\n alreadySubscribed: alreadySubscribed.map(event => event.event.name),\n unsupported: unsupported.map(event => event.event?.name || 'Unknown'),\n skipped: alreadySubscribed.length + unsupported.length,\n };\n\n // Process events that need subscription\n for (const commerceEvent of needsSubscription) {\n try {\n // Prepare the event payload with proper transformations\n const preparedEvent = this.prepareEventPayload(commerceEvent, provider.id);\n\n this.customLogger.debug(`[DEBUG] Subscribing to event: ${commerceEvent.event.name}`);\n\n // Create the event subscription\n const eventSubscribeResult = await this.eventSubscriptionService.create(\n preparedEvent.event as EventSubscription\n );\n\n if (!eventSubscribeResult.success) {\n result.failedSubscriptions.push(commerceEvent.event.name);\n this.customLogger.error(\n `[ERROR] Failed to subscribe to event: ${commerceEvent.event.name} - ${eventSubscribeResult.error}`\n );\n continue;\n }\n\n this.customLogger.info(`[CREATE] Successfully subscribed: ${commerceEvent.event.name}`);\n result.successfulSubscriptions.push(commerceEvent.event.name);\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\n result.failedSubscriptions.push(commerceEvent.event?.name || 'Unknown');\n this.customLogger.error(\n `[ERROR] Error processing event subscription for ${commerceEvent.event?.name || 'Unknown'}: ${errorMessage}`\n );\n }\n }\n\n // Log summary of event subscriptions\n this.logEventSubscriptionSummary(result, provider.label);\n\n // Log important post-subscription steps for PaaS instances\n if (this.isPaaS) {\n this.customLogger.info('[IMPORTANT] ⚠️ Post-Subscription Steps for PaaS:');\n this.customLogger.info(\n '[IMPORTANT] 1. Run: bin/magento events:generate:module to generate module after successful event subscription'\n );\n this.customLogger.info(\n '[IMPORTANT] 2. Run: bin/magento setup:upgrade && bin/magento setup:di:compile && bin/magento cache:flush to install the generated module'\n );\n }\n }\n\n return {\n success: true,\n message: 'Configuration completed successfully',\n };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\n this.customLogger.error(`[ERROR] Configuration failed: ${errorMessage}`);\n throw new Error(`Failed to configure Adobe Commerce I/O Events: ${errorMessage}`);\n }\n }\n\n /**\n * Filters commerce events configuration based on existing subscriptions and supported events\n *\n * @param commerceEventsConfig - Array of commerce event configurations\n * @param existingSubscriptions - Array of existing event subscriptions\n * @param providerId - Provider ID to match against\n * @param supportedEvents - Array of supported events from Adobe Commerce\n * @returns Object containing alreadySubscribed, needsSubscription, and unsupported arrays\n * @private\n */\n private filterEventsBySubscriptionStatus(\n commerceEventsConfig: CommerceEventConfig[],\n existingSubscriptions: any[],\n providerId: string,\n supportedEvents: any[] = []\n ): {\n alreadySubscribed: CommerceEventConfig[];\n needsSubscription: CommerceEventConfig[];\n unsupported: CommerceEventConfig[];\n } {\n const alreadySubscribed: CommerceEventConfig[] = [];\n const needsSubscription: CommerceEventConfig[] = [];\n const unsupported: CommerceEventConfig[] = [];\n\n // Create a set of supported event names for faster lookup\n const supportedEventNames = new Set(supportedEvents.map(event => event.name));\n\n commerceEventsConfig.forEach(commerceEvent => {\n const eventName = commerceEvent.event?.name;\n\n if (!eventName) {\n this.customLogger.error(\n 'Commerce event configuration missing event name, skipping:',\n commerceEvent\n );\n return;\n }\n\n // First check if the event is supported by Adobe Commerce\n if (supportedEvents.length > 0 && !supportedEventNames.has(eventName)) {\n unsupported.push(commerceEvent);\n return;\n }\n\n // Check if this event is already subscribed for this provider\n const isAlreadySubscribed = existingSubscriptions.some(\n subscription => subscription.name === eventName && subscription.provider_id === providerId\n );\n\n if (isAlreadySubscribed) {\n alreadySubscribed.push(commerceEvent);\n } else {\n needsSubscription.push(commerceEvent);\n }\n });\n\n return {\n alreadySubscribed,\n needsSubscription,\n unsupported,\n };\n }\n\n /**\n * Prepares event payload by transforming event names and adding provider information\n *\n * For PaaS instances, the parent field is omitted to support native events (observer.*, plugin.*)\n * which would be rejected by Adobe Commerce as invalid aliases if parent is set to the same name.\n * For non-PaaS instances, the parent field is set to the event name as usual.\n *\n * @param eventSpec - Event specification object containing event details\n * @param providerId - Provider ID to assign to the event\n * @returns Modified event specification with updated event properties\n * @private\n */\n private prepareEventPayload(eventSpec: CommerceEventConfig, providerId: string): any {\n // Input validation\n if (!eventSpec || !eventSpec.event) {\n throw new Error('Invalid event specification: event object is required');\n }\n\n if (!eventSpec.event.name) {\n throw new Error('Invalid event specification: event name is required');\n }\n\n if (!providerId || typeof providerId !== 'string') {\n throw new Error('Valid provider ID is required');\n }\n\n // Create a deep copy to avoid modifying the original object\n const modifiedEventSpec = JSON.parse(JSON.stringify(eventSpec));\n const eventName = modifiedEventSpec.event.name;\n\n // For PaaS instances, don't set parent field to support native events\n // For non-PaaS instances, set parent as usual\n if (!this.isPaaS) {\n modifiedEventSpec.event.parent = eventName;\n }\n // Note: For PaaS instances, we intentionally omit the parent field\n\n modifiedEventSpec.event.provider_id = providerId;\n modifiedEventSpec.event.destination = 'default';\n modifiedEventSpec.event.provider_id = providerId;\n modifiedEventSpec.event.priority = true;\n modifiedEventSpec.event.hipaa_audit_required = false;\n\n // Ensure rules array exists (required by Adobe Commerce API)\n if (!modifiedEventSpec.event.rules) {\n modifiedEventSpec.event.rules = [];\n }\n\n return modifiedEventSpec;\n }\n\n /**\n * Logs a comprehensive summary of event subscription results\n *\n * @param result - Event subscription processing results\n * @param providerLabel - Provider label for display\n * @private\n */\n private logEventSubscriptionSummary(\n result: {\n successfulSubscriptions: string[];\n failedSubscriptions: string[];\n alreadySubscribed: string[];\n unsupported: string[];\n skipped: number;\n },\n providerLabel: string\n ): void {\n // Log individual events with prefixes during processing\n if (result.alreadySubscribed.length > 0) {\n result.alreadySubscribed.forEach(eventName => {\n this.customLogger.info(`[SKIP] Already subscribed: ${eventName}`);\n });\n }\n\n if (result.unsupported.length > 0) {\n result.unsupported.forEach(eventName => {\n this.customLogger.error(`[ERROR] Unsupported event: ${eventName}`);\n });\n }\n\n // Summary section (no prefix)\n this.customLogger.info('');\n this.customLogger.info('='.repeat(60));\n this.customLogger.info(`📊 COMMERCE EVENTS CONFIGURATION SUMMARY - ${providerLabel}`);\n this.customLogger.info('='.repeat(60));\n this.customLogger.info('');\n\n // Overall summary\n const totalProcessed =\n result.successfulSubscriptions.length +\n result.failedSubscriptions.length +\n result.alreadySubscribed.length +\n result.unsupported.length;\n this.customLogger.info(\n `📈 OVERALL: ${totalProcessed} processed | ${result.successfulSubscriptions.length} created | ${result.alreadySubscribed.length} existing | ${result.unsupported.length} unsupported | ${result.failedSubscriptions.length} failed`\n );\n this.customLogger.info('');\n\n // Successful subscriptions\n if (result.successfulSubscriptions.length > 0) {\n this.customLogger.info(\n `✅ SUCCESSFUL SUBSCRIPTIONS (${result.successfulSubscriptions.length}):`\n );\n result.successfulSubscriptions.forEach(eventName => {\n this.customLogger.info(` ✓ ${eventName}`);\n });\n this.customLogger.info('');\n }\n\n // Already subscribed\n if (result.alreadySubscribed.length > 0) {\n this.customLogger.info(`ℹ️ ALREADY SUBSCRIBED (${result.alreadySubscribed.length}):`);\n result.alreadySubscribed.forEach(eventName => {\n this.customLogger.info(` → ${eventName}`);\n });\n this.customLogger.info('');\n }\n\n // Unsupported events\n if (result.unsupported.length > 0) {\n this.customLogger.info(`⚠️ UNSUPPORTED EVENTS (${result.unsupported.length}):`);\n result.unsupported.forEach(eventName => {\n this.customLogger.info(` ⚠ ${eventName}`);\n });\n this.customLogger.info('');\n }\n\n // Failed subscriptions\n if (result.failedSubscriptions.length > 0) {\n this.customLogger.info(`❌ FAILED SUBSCRIPTIONS (${result.failedSubscriptions.length}):`);\n result.failedSubscriptions.forEach(eventName => {\n this.customLogger.info(` ✗ ${eventName}`);\n });\n this.customLogger.info('');\n }\n\n this.customLogger.info('='.repeat(60));\n }\n}\n\nexport default OnboardCommerce;\n","/**\n * <license header>\n */\n\nimport { CommerceAuthType } from '../onboard-config/types';\nimport type { CommerceEnvironment } from './types';\n\nexport type { CommerceEnvironment };\n\n/**\n * Helper class for loading and validating Commerce environment variables\n *\n * Provides static method to load and validate all required environment variables\n * for Commerce integration based on authentication type (OAuth or IMS).\n *\n * @example\n * ```typescript\n * const env = CommerceEnvironmentLoader.load(CommerceAuthType.OAUTH);\n * console.log(env.commerce.baseUrl);\n * ```\n */\nexport class CommerceEnvironmentLoader {\n /**\n * Loads and validates all required Commerce environment variables\n *\n * @param commerceAuthType - Authentication type (OAUTH or IMS)\n * @returns Validated environment configuration\n * @throws Error if required environment variables are missing\n */\n public static load(commerceAuthType: CommerceAuthType): CommerceEnvironment {\n const required = {\n commerce: {\n baseUrl: process.env.COMMERCE_BASE_URL,\n merchantId: process.env.COMMERCE_ADOBE_IO_EVENTS_MERCHANT_ID,\n environmentId: process.env.COMMERCE_ADOBE_IO_EVENTS_ENVIRONMENT_ID,\n },\n io: {\n workspaceConfig: process.env.IO_WORKSPACE_CONFIG,\n },\n oauth:\n commerceAuthType === CommerceAuthType.OAUTH\n ? {\n consumerKey: process.env.COMMERCE_OAUTH_CONSUMER_KEY,\n consumerSecret: process.env.COMMERCE_OAUTH_CONSUMER_SECRET,\n accessToken: process.env.COMMERCE_OAUTH_ACCESS_TOKEN,\n accessTokenSecret: process.env.COMMERCE_OAUTH_ACCESS_TOKEN_SECRET,\n }\n : undefined,\n ims:\n commerceAuthType === CommerceAuthType.IMS\n ? {\n clientId: process.env.COMMERCE_IMS_CLIENT_ID,\n clientSecret: process.env.COMMERCE_IMS_CLIENT_SECRET,\n technicalAccountId: process.env.COMMERCE_IMS_TECHNICAL_ACCOUNT_ID,\n technicalAccountEmail: process.env.COMMERCE_IMS_TECHNICAL_ACCOUNT_EMAIL,\n orgId: process.env.COMMERCE_IMS_ORG_ID,\n scopes: process.env.COMMERCE_IMS_SCOPES,\n }\n : undefined,\n };\n\n // Validate required variables\n const missing: string[] = [];\n\n // Common required variables\n if (!required.commerce.baseUrl) missing.push('COMMERCE_BASE_URL');\n if (!required.commerce.merchantId) missing.push('COMMERCE_ADOBE_IO_EVENTS_MERCHANT_ID');\n if (!required.commerce.environmentId) missing.push('COMMERCE_ADOBE_IO_EVENTS_ENVIRONMENT_ID');\n if (!required.io.workspaceConfig) missing.push('IO_WORKSPACE_CONFIG');\n\n // Auth-specific validation\n if (commerceAuthType === CommerceAuthType.OAUTH && required.oauth) {\n if (!required.oauth.consumerKey) missing.push('COMMERCE_OAUTH_CONSUMER_KEY');\n if (!required.oauth.consumerSecret) missing.push('COMMERCE_OAUTH_CONSUMER_SECRET');\n if (!required.oauth.accessToken) missing.push('COMMERCE_OAUTH_ACCESS_TOKEN');\n if (!required.oauth.accessTokenSecret) missing.push('COMMERCE_OAUTH_ACCESS_TOKEN_SECRET');\n } else if (commerceAuthType === CommerceAuthType.IMS && required.ims) {\n if (!required.ims.clientId) missing.push('COMMERCE_IMS_CLIENT_ID');\n if (!required.ims.clientSecret) missing.push('COMMERCE_IMS_CLIENT_SECRET');\n if (!required.ims.technicalAccountId) missing.push('COMMERCE_IMS_TECHNICAL_ACCOUNT_ID');\n if (!required.ims.technicalAccountEmail) missing.push('COMMERCE_IMS_TECHNICAL_ACCOUNT_EMAIL');\n if (!required.ims.orgId) missing.push('COMMERCE_IMS_ORG_ID');\n if (!required.ims.scopes) missing.push('COMMERCE_IMS_SCOPES');\n }\n\n if (missing.length > 0) {\n throw new Error(\n `Missing required Commerce environment variables:\\n${missing.map(v => ` - ${v}`).join('\\n')}`\n );\n }\n\n const env: CommerceEnvironment = {\n commerce: {\n baseUrl: required.commerce.baseUrl!,\n merchantId: required.commerce.merchantId!,\n environmentId: required.commerce.environmentId!,\n },\n io: {\n workspaceConfig: required.io.workspaceConfig!,\n },\n };\n\n // Add auth-specific configuration\n if (required.oauth) {\n env.oauth = {\n consumerKey: required.oauth.consumerKey!,\n consumerSecret: required.oauth.consumerSecret!,\n accessToken: required.oauth.accessToken!,\n accessTokenSecret: required.oauth.accessTokenSecret!,\n };\n }\n\n if (required.ims) {\n env.ims = {\n clientId: required.ims.clientId!,\n clientSecret: required.ims.clientSecret!,\n technicalAccountId: required.ims.technicalAccountId!,\n technicalAccountEmail: required.ims.technicalAccountEmail!,\n orgId: required.ims.orgId!,\n scopes: required.ims.scopes!.split(', '),\n };\n }\n\n return env;\n }\n}\n","/**\n * <license header>\n */\n\nexport enum HttpStatus {\n OK = 200,\n BAD_REQUEST = 400,\n UNAUTHORIZED = 401,\n NOT_FOUND = 404,\n METHOD_NOT_ALLOWED = 405,\n INTERNAL_ERROR = 500,\n}\n\nexport enum HttpMethod {\n GET = 'GET',\n POST = 'POST',\n PUT = 'PUT',\n DELETE = 'DELETE',\n PATCH = 'PATCH',\n HEAD = 'HEAD',\n OPTIONS = 'OPTIONS',\n}\n","/**\n * <license header>\n */\n\nimport got, { Got } from 'got';\n\nimport CustomLogger from '../../framework/custom-logger';\nimport { HttpStatus } from '../../framework/runtime-action/types';\nimport { Connection, ExtendedRequestError, HttpsOptions } from './types';\n\nclass AdobeCommerceClient {\n private baseUrl: string;\n private connection: Connection;\n private logger: any;\n private httpsOptions: HttpsOptions | undefined;\n\n /**\n * @param baseUrl\n * @param connection\n * @param logger\n * @param httpsOptions\n */\n constructor(\n baseUrl: string,\n connection: Connection,\n logger: any = null,\n httpsOptions?: HttpsOptions\n ) {\n if (!baseUrl) {\n throw new Error('Commerce URL must be provided');\n }\n this.baseUrl = baseUrl;\n this.connection = connection;\n this.httpsOptions = httpsOptions;\n\n // Use `CustomLogger` to wrap the logger\n this.logger = new CustomLogger(logger);\n }\n\n /**\n * @param endpoint\n * @param headers\n */\n async get(endpoint: string, headers: Record<string, string> = {}): Promise<any> {\n return await this.apiCall(endpoint, 'GET', headers);\n }\n\n /**\n * @param endpoint\n * @param headers\n * @param payload\n */\n async post(\n endpoint: string,\n headers: Record<string, string> = {},\n payload: any = null\n ): Promise<any> {\n return await this.apiCall(endpoint, 'POST', headers, payload);\n }\n\n /**\n * @param endpoint\n * @param headers\n * @param payload\n */\n async put(\n endpoint: string,\n headers: Record<string, string> = {},\n payload: any = null\n ): Promise<any> {\n return await this.apiCall(endpoint, 'PUT', headers, payload);\n }\n\n /**\n * @param endpoint\n * @param headers\n */\n async delete(endpoint: string, headers: Record<string, string> = {}): Promise<any> {\n return await this.apiCall(endpoint, 'DELETE', headers);\n }\n\n /**\n * @param endpoint\n * @param method\n * @param headers\n * @param payload\n * @private\n */\n private async apiCall(\n endpoint: string,\n method: string,\n headers: Record<string, string>,\n payload: any = null\n ): Promise<any> {\n const commerceGot = await this.getHttpClient();\n\n commerceGot.extend({\n headers: headers,\n });\n\n const wrapper = async (callable: () => Promise<any>): Promise<any> => {\n try {\n const message = await callable();\n return { success: true, message };\n } catch (e: any) {\n if (e.code === 'ERR_GOT_REQUEST_ERROR') {\n this.logger.error('Error while calling Commerce API', e);\n return {\n success: false,\n statusCode: HttpStatus.INTERNAL_ERROR,\n message: `Unexpected error, check logs. Original error \"${e.message}\"`,\n };\n }\n return {\n success: false,\n statusCode: e.response?.statusCode || HttpStatus.INTERNAL_ERROR,\n message: e.message,\n body: (e as ExtendedRequestError).responseBody,\n };\n }\n };\n\n let options: any = {\n method: method,\n };\n\n if (payload !== null) {\n options = {\n ...options,\n json: payload,\n };\n }\n\n return await wrapper(() => commerceGot(endpoint, options).json());\n }\n\n /**\n * @private\n */\n private async getHttpClient(): Promise<Got> {\n const commerceGot = got.extend({\n http2: true,\n responseType: 'json',\n prefixUrl: this.baseUrl,\n headers: {\n 'Content-Type': 'application/json',\n },\n ...(this.httpsOptions && { https: this.httpsOptions }),\n hooks: {\n beforeRequest: [\n (options): void => this.logger.debug(`Request [${options.method}] ${options.url}`),\n ],\n beforeRetry: [\n (options, error, retryCount): void =>\n this.logger.debug(\n `Retrying request [${options.method}] ${options.url} - count: ${retryCount} - error: ${error?.code} - ${error?.message}`\n ),\n ],\n beforeError: [\n (error: ExtendedRequestError): ExtendedRequestError => {\n const { response } = error;\n if (response?.body) {\n error.responseBody = response.body;\n }\n return error;\n },\n ],\n afterResponse: [\n (response): any => {\n this.logger.debug(\n `Response [${response.request.options.method}] ${response.request.options.url} - ${response.statusCode} ${response.statusMessage}`\n );\n return response;\n },\n ],\n },\n });\n\n return await this.connection.extend(commerceGot);\n }\n}\n\nexport default AdobeCommerceClient;\n","/**\n * <license header>\n */\n\nimport { State } from '@adobe/aio-sdk';\n\nimport CustomLogger from '../../../../framework/custom-logger';\nimport RestClient from '../../../../integration/rest-client';\nimport { TokenResult } from './types';\n\nclass GenerateBasicAuthToken {\n private baseUrl: string;\n private username: string;\n private password: string;\n private key: string;\n private logger: any;\n private state: any;\n\n /**\n * @param baseUrl\n * @param username\n * @param password\n * @param logger\n */\n constructor(baseUrl: string, username: string, password: string, logger: any = null) {\n this.baseUrl = baseUrl;\n this.username = username;\n this.password = password;\n this.key = 'adobe_commerce_basic_auth_token';\n\n // Use `CustomLogger` to wrap the logger\n this.logger = new CustomLogger(logger);\n }\n\n /**\n * @return string | null\n */\n async execute(): Promise<string | null> {\n const currentValue = await this.getValue();\n if (currentValue !== null) {\n return currentValue;\n }\n\n let result: TokenResult = {\n token: null,\n expire_in: 3600,\n };\n\n const response = await this.getCommerceToken();\n if (response !== null) {\n result = response;\n }\n\n this.logger.debug(`Token: ${JSON.stringify(result)}`);\n\n if (result.token !== null) {\n await this.setValue(result);\n }\n\n return result.token;\n }\n\n /**\n * @return TokenResult | null\n */\n async getCommerceToken(): Promise<TokenResult | null> {\n const endpoint = this.createTokenEndpoint();\n\n this.logger.debug(`Endpoint: ${endpoint}`);\n\n try {\n const restClient = new RestClient();\n const response = await restClient.post(\n endpoint,\n {\n 'Content-Type': 'application/json',\n },\n {\n username: this.username,\n password: this.password,\n }\n );\n\n this.logger.debug(`Raw response type: ${typeof response}`);\n this.logger.debug(`Raw response: ${JSON.stringify(response)}`);\n\n if (response !== null && response !== undefined) {\n // Adobe Commerce returns the token as a JSON string (e.g., \"abc123\")\n // If it's already a string, use it directly\n // If it's an object with token property, extract it\n let tokenValue: string;\n\n if (typeof response === 'string') {\n tokenValue = response;\n } else if (typeof response === 'object' && response.token) {\n tokenValue = response.token;\n } else {\n // Try to convert to string as a fallback\n try {\n tokenValue = response.toString();\n this.logger.debug(`Converted response to string: ${tokenValue?.substring(0, 10)}...`);\n } catch {\n this.logger.error(`Unexpected response format: ${JSON.stringify(response)}`);\n return null;\n }\n }\n\n this.logger.debug(`Extracted token: ${tokenValue?.substring(0, 10)}...`);\n\n return {\n token: tokenValue,\n expire_in: 3600, // Adobe Commerce tokens typically expire in 1 hour\n };\n }\n\n this.logger.error('Received null or undefined response from Commerce API');\n return null;\n } catch (error: any) {\n this.logger.error(`Failed to get Commerce token: ${error.message}`);\n this.logger.debug(`Full error: ${JSON.stringify(error)}`);\n return null;\n }\n }\n\n /**\n * Create the Adobe Commerce integration admin token endpoint.\n * Handles cases where baseUrl may or may not already include /rest.\n * @return string\n */\n createTokenEndpoint(): string {\n // Normalize base URL (remove trailing slash if present)\n const normalizedBaseUrl = this.baseUrl.replace(/\\/+$/, '');\n\n // Check if baseUrl already ends with /rest\n if (normalizedBaseUrl.endsWith('/rest')) {\n // Base URL already includes /rest, so append V1/integration/admin/token\n return `${normalizedBaseUrl}/V1/integration/admin/token`;\n } else {\n // Base URL doesn't include /rest, so append the full path\n return `${normalizedBaseUrl}/rest/V1/integration/admin/token`;\n }\n }\n\n /**\n * @param endpoint\n * @return string\n */\n createEndpoint(endpoint: string): string {\n // Normalize base URL (remove trailing slash if present)\n const normalizedBaseUrl = this.baseUrl.replace(/\\/+$/, '');\n // Ensure endpoint starts with /\n const normalizedEndpoint = endpoint.startsWith('/') ? endpoint : `/${endpoint}`;\n return `${normalizedBaseUrl}${normalizedEndpoint}`;\n }\n\n /**\n * @param result\n * @return boolean\n */\n async setValue(result: TokenResult): Promise<boolean> {\n try {\n const state = await this.getState();\n if (state === null) {\n // State API not available, skip caching\n return true; // Return true since token generation succeeded\n }\n\n await state.put(this.key, result.token, { ttl: result.expire_in });\n return true;\n } catch (error) {\n this.logger.debug('Failed to cache token, continuing without caching');\n return true; // Return true since token generation succeeded\n }\n }\n\n /**\n * @return string | null\n */\n async getValue(): Promise<string | null> {\n try {\n const state = await this.getState();\n if (state === null) {\n // State API not available, skip caching\n return null;\n }\n\n const value = await state.get(this.key);\n if (value !== undefined) {\n return value.value;\n }\n } catch (error) {\n this.logger.debug('State API not available, skipping cache lookup');\n }\n\n return null;\n }\n\n /**\n * @return any\n */\n async getState(): Promise<any> {\n if (this.state === undefined) {\n try {\n this.state = await State.init();\n } catch (error) {\n this.logger.debug('State API initialization failed, running without caching');\n this.state = null;\n }\n }\n return this.state;\n }\n}\n\nexport default GenerateBasicAuthToken;\n","/**\n * <license header>\n */\n\nimport CustomLogger from '../../../framework/custom-logger';\nimport GenerateBasicAuthToken from './generate-basic-auth-token';\nimport { Connection } from '../types';\n\nclass BasicAuthConnection implements Connection {\n private baseUrl: string;\n private username: string;\n private password: string;\n private logger: any;\n\n /**\n * @param baseUrl\n * @param username\n * @param password\n * @param logger\n */\n constructor(baseUrl: string, username: string, password: string, logger: any = null) {\n this.baseUrl = baseUrl;\n this.username = username;\n this.password = password;\n\n // Use `CustomLogger` to wrap the logger\n this.logger = new CustomLogger(logger);\n }\n\n /**\n * @param commerceGot\n */\n async extend(commerceGot: any): Promise<any> {\n this.logger.debug('Using Commerce client with integration options');\n\n const generateToken = new GenerateBasicAuthToken(\n this.baseUrl,\n this.username,\n this.password,\n this.logger.getLogger()\n );\n const token = await generateToken.execute();\n\n return commerceGot.extend({\n headers: {\n Authorization: `Bearer ${token}`,\n },\n });\n }\n}\n\nexport default BasicAuthConnection;\n","/**\n * <license header>\n */\n\nimport Oauth1a from 'oauth-1.0a';\nimport * as crypto from 'crypto';\nimport { Got } from 'got';\n\nimport CustomLogger from '../../../framework/custom-logger';\nimport { Connection } from '../types';\n\nclass Oauth1aConnection implements Connection {\n private consumerKey: string;\n private consumerSecret: string;\n private accessToken: string;\n private accessTokenSecret: string;\n private logger: any;\n\n /**\n * @param consumerKey\n * @param consumerSecret\n * @param accessToken\n * @param accessTokenSecret\n * @param logger\n */\n constructor(\n consumerKey: string,\n consumerSecret: string,\n accessToken: string,\n accessTokenSecret: string,\n logger: any = null\n ) {\n this.consumerKey = consumerKey;\n this.consumerSecret = consumerSecret;\n this.accessToken = accessToken;\n this.accessTokenSecret = accessTokenSecret;\n\n // Use `CustomLogger` to wrap the logger\n this.logger = new CustomLogger(logger);\n }\n\n /**\n * @param commerceGot\n */\n async extend(commerceGot: Got): Promise<Got> {\n this.logger.debug('Using Commerce client with integration options');\n\n const headers = this.headersProvider();\n\n return commerceGot.extend({\n handlers: [\n (options: any, next: any): Promise<any> => {\n options.headers = {\n ...options.headers,\n ...headers(options.url.toString(), options.method),\n };\n return next(options);\n },\n ],\n });\n }\n\n /**\n * return () => { }\n */\n headersProvider(): (url: string, method: string) => any {\n const oauth = new Oauth1a({\n consumer: {\n key: this.consumerKey,\n secret: this.consumerSecret,\n },\n signature_method: 'HMAC-SHA256',\n hash_function: (baseString: string, key: string): string =>\n crypto.createHmac('sha256', key).update(baseString).digest('base64'),\n });\n\n const oauthToken = {\n key: this.accessToken,\n secret: this.accessTokenSecret,\n };\n\n return (url: string, method: string): any =>\n oauth.toHeader(oauth.authorize({ url, method }, oauthToken));\n }\n}\n\nexport default Oauth1aConnection;\n","/**\n * <license header>\n */\n\nimport { Connection } from '../types';\nimport CustomLogger from '../../../framework/custom-logger';\n\n/**\n * ImsConnection for Adobe Commerce Client with IMS authentication\n *\n * This class provides IMS (Identity Management System) authentication for Adobe Commerce API requests\n * by accepting a pre-generated bearer token.\n *\n * **Token Management Best Practice:**\n * Generate tokens using `AdobeAuth.getToken()` and implement caching at the application level\n * (Redis, Memcached, in-memory, etc.) to avoid unnecessary token generation calls.\n *\n * @example\n * ```typescript\n * import { ImsConnection, AdobeCommerceClient } from '@adobe-commerce/aio-toolkit';\n * import AdobeAuth from '@adobe-commerce/aio-toolkit/commerce/adobe-auth';\n * import BearerToken from '@adobe-commerce/aio-toolkit/integration/bearer-token';\n *\n * // Check your application cache first\n * let token = await yourAppCache.get('commerce_ims_token');\n *\n * if (!token || !BearerToken.info(token).isValid) {\n * // Generate new token using AdobeAuth\n * token = await AdobeAuth.getToken(\n * 'client-id',\n * 'client-secret',\n * 'technical-account-id',\n * 'technical-account-email',\n * 'ims-org-id@AdobeOrg',\n * ['AdobeID', 'openid', 'adobeio_api']\n * );\n *\n * // Store in your application cache with appropriate TTL\n * const tokenInfo = BearerToken.info(token);\n * if (tokenInfo.isValid && tokenInfo.timeUntilExpiry) {\n * const ttl = Math.floor(tokenInfo.timeUntilExpiry / 1000) - 600;\n * await yourAppCache.set('commerce_ims_token', token, ttl);\n * }\n * }\n *\n * // Create connection with token\n * const connection = new ImsConnection(token, logger);\n *\n * // Create Commerce client\n * const client = new AdobeCommerceClient('https://your-store.com', connection);\n *\n * // Make API calls\n * const products = await client.get('V1/products');\n * ```\n */\nclass ImsConnection implements Connection {\n /** Bearer token for IMS authentication */\n private readonly imsToken: string;\n\n /** CustomLogger instance for logging operations */\n private readonly customLogger: CustomLogger;\n\n /**\n * Creates an instance of ImsConnection\n *\n * @param imsToken - Bearer token string for IMS authentication (generate using AdobeAuth)\n * @param logger - Optional logger instance for logging operations\n * @example\n * ```typescript\n * const token = await AdobeAuth.getToken(...);\n * const connection = new ImsConnection(token, logger);\n * ```\n */\n constructor(imsToken: string, logger: any = null) {\n this.imsToken = imsToken;\n this.customLogger = new CustomLogger(logger);\n }\n\n /**\n * Extends the Commerce Got client with IMS authentication headers\n *\n * @param commerceGot - The Got instance to extend with authentication\n * @returns Promise<any> - Extended Got instance with authentication headers\n * @throws {Error} If token is invalid or empty\n */\n async extend(commerceGot: any): Promise<any> {\n this.customLogger.info('Using Commerce client with IMS authentication');\n\n if (!this.imsToken || this.imsToken.trim() === '') {\n throw new Error('Failed to generate or retrieve IMS token');\n }\n\n this.customLogger.info(\n `IMS token being extended to header: ${this.imsToken.substring(0, 10)}...`\n );\n\n return commerceGot.extend({\n headers: {\n Authorization: `Bearer ${this.imsToken}`,\n },\n });\n }\n}\n\nexport default ImsConnection;\n","/**\n * <license header>\n */\n\nimport { ShippingCarrierMethodData, ShippingCarrierMethodAdditionalData } from './types';\n\n/**\n * Builder class for constructing a shipping carrier method\n */\nclass ShippingCarrierMethod {\n private methodData: Partial<ShippingCarrierMethodData>;\n\n constructor(carrierCode: string, method: string) {\n this.methodData = { carrier_code: carrierCode, method, additional_data: [] };\n }\n\n /**\n * Sets the display name for the shipping method\n *\n * @param methodTitle - Display name for the shipping method\n * @returns The rate builder instance for method chaining\n */\n setMethodTitle(methodTitle: string): this {\n this.methodData.method_title = methodTitle;\n return this;\n }\n\n /**\n * Sets the price charged to the customer\n *\n * @param price - Price charged to the customer\n * @returns The rate builder instance for method chaining\n */\n setPrice(price: number): this {\n this.methodData.price = price;\n return this;\n }\n\n /**\n * Sets the cost to the merchant\n *\n * @param cost - Cost to the merchant\n * @returns The rate builder instance for method chaining\n */\n setCost(cost: number): this {\n this.methodData.cost = cost;\n return this;\n }\n\n /**\n * Adds additional data to the shipping method\n *\n * @param key - Key for the additional data\n * @param value - Value for the additional data\n * @returns The rate builder instance for method chaining\n *\n * @example\n * ```typescript\n * rate.addAdditionalData('delivery_time', '3-5 business days')\n * .addAdditionalData('tracking_available', true);\n * ```\n */\n addAdditionalData(key: string, value: any): this {\n const additionalDataItem: ShippingCarrierMethodAdditionalData = { key, value };\n this.methodData.additional_data?.push(additionalDataItem);\n return this;\n }\n\n /**\n * Gets and returns the shipping carrier method data\n *\n * @returns The shipping carrier method data\n */\n getData(): ShippingCarrierMethodData {\n return this.methodData as ShippingCarrierMethodData;\n }\n}\n\nexport default ShippingCarrierMethod;\n","/**\n * <license header>\n */\n\nimport { ShippingCarrierMethodData } from './method/types';\nimport { ShippingCarrierData } from './types';\nimport ShippingCarrierMethod from './method';\n\n/**\n * Builder class for constructing shipping carriers with methods and metadata\n */\nclass ShippingCarrier {\n private carrierData: Partial<ShippingCarrierData>;\n private addedMethods: ShippingCarrierMethodData[] = [];\n private removedMethods: string[] = [];\n\n constructor(code: string, callback?: (builder: ShippingCarrier) => void) {\n this.validateCarrierCode(code);\n\n this.carrierData = {\n code,\n active: true,\n tracking_available: true,\n shipping_labels_available: true,\n };\n this.addedMethods = [];\n this.removedMethods = [];\n\n if (callback) {\n callback(this);\n }\n }\n\n /**\n * Validates that the carrier code contains only alphanumeric characters and underscores\n *\n * @param code - Carrier code to validate\n * @throws Error if code is invalid\n */\n private validateCarrierCode(code: string): void {\n if (!code || code.trim() === '') {\n throw new Error('Carrier code cannot be empty');\n }\n\n const validPattern = /^[a-zA-Z0-9_]+$/;\n if (!validPattern.test(code)) {\n throw new Error('Carrier code must contain only alphanumeric characters and underscores');\n }\n }\n\n /**\n * Validates that the method code contains only alphanumeric characters and underscores\n *\n * @param method - Method code to validate\n * @throws Error if method code is invalid\n */\n private validateMethodCode(method: string): void {\n if (!method || method.trim() === '') {\n throw new Error('Method code cannot be empty');\n }\n\n const validPattern = /^[a-zA-Z0-9_]+$/;\n if (!validPattern.test(method)) {\n throw new Error('Method code must contain only alphanumeric characters and underscores');\n }\n }\n\n /**\n * Sets the title for the shipping carrier\n *\n * @param title - Display title for the carrier\n * @returns The builder instance for method chaining\n *\n * @example\n * ```typescript\n * carrier.setTitle('FedEx Express');\n * ```\n */\n setTitle(title: string): this {\n this.carrierData.title = title;\n return this;\n }\n\n /**\n * Sets the stores for the shipping carrier\n *\n * @param stores - Array of store codes\n * @returns The builder instance for method chaining\n *\n * @example\n * ```typescript\n * carrier.setStores(['default', 'store1', 'store2']);\n * ```\n */\n setStores(stores: string[]): this {\n this.carrierData.stores = stores;\n return this;\n }\n\n /**\n * Sets the countries for the shipping carrier\n *\n * @param countries - Array of country codes\n * @returns The builder instance for method chaining\n *\n * @example\n * ```typescript\n * carrier.setCountries(['US', 'CA', 'MX']);\n * ```\n */\n setCountries(countries: string[]): this {\n this.carrierData.countries = countries;\n return this;\n }\n\n /**\n * Sets the sort order for the shipping carrier\n *\n * @param sortOrder - Sort order number\n * @returns The builder instance for method chaining\n *\n * @example\n * ```typescript\n * carrier.setSortOrder(10);\n * ```\n */\n setSortOrder(sortOrder: number): this {\n this.carrierData.sort_order = sortOrder;\n return this;\n }\n\n /**\n * Sets the active status for the shipping carrier\n *\n * @param active - Active status\n * @returns The builder instance for method chaining\n *\n * @example\n * ```typescript\n * carrier.setActive(true);\n * carrier.setActive(false);\n * ```\n */\n setActive(active: boolean): this {\n this.carrierData.active = active;\n return this;\n }\n\n /**\n * Sets the tracking availability for the shipping carrier\n *\n * @param trackingAvailable - Tracking availability status\n * @returns The builder instance for method chaining\n *\n * @example\n * ```typescript\n * carrier.setTrackingAvailable(true);\n * carrier.setTrackingAvailable(false);\n * ```\n */\n setTrackingAvailable(trackingAvailable: boolean): this {\n this.carrierData.tracking_available = trackingAvailable;\n return this;\n }\n\n /**\n * Sets the shipping labels availability for the shipping carrier\n *\n * @param shippingLabelsAvailable - Shipping labels availability status\n * @returns The builder instance for method chaining\n *\n * @example\n * ```typescript\n * carrier.setShippingLabelsAvailable(true);\n * carrier.setShippingLabelsAvailable(false);\n * ```\n */\n setShippingLabelsAvailable(shippingLabelsAvailable: boolean): this {\n this.carrierData.shipping_labels_available = shippingLabelsAvailable;\n return this;\n }\n\n /**\n * Sets the carrier data from a ShippingCarrierData object\n * Note: The code property cannot be changed once set in the constructor\n *\n * @param carrierData - Carrier data object\n * @returns The builder instance for method chaining\n *\n * @example\n * ```typescript\n * carrier.setData({\n * code: 'fedex',\n * title: 'FedEx Express',\n * stores: ['default'],\n * countries: ['US', 'CA'],\n * sort_order: 10,\n * active: true,\n * tracking_available: true,\n * shipping_labels_available: true\n * });\n * ```\n */\n setData(carrierData: ShippingCarrierData): this {\n // Preserve the original code - it cannot be changed\n const originalCode = this.carrierData.code as string;\n\n // Validate if a code is provided in the input data (even if empty string)\n if (carrierData.code !== undefined) {\n this.validateCarrierCode(carrierData.code);\n }\n\n // Copy all data but restore the original code\n this.carrierData = { ...carrierData, code: originalCode };\n return this;\n }\n\n /**\n * Adds a shipping method to the carrier using a callback pattern\n *\n * @param method - Unique method for the shipping rate\n * @param callback - Optional callback function to configure the method\n * @returns The builder instance for method chaining\n *\n * @example\n * ```typescript\n * builder.addMethod('standard', (method) => {\n * method.setMethodTitle('Standard Shipping')\n * .setPrice(9.99)\n * .setCost(5.00)\n * .addAdditionalData('delivery_time', '3-5 business days');\n * });\n * ```\n */\n addMethod(method: string, callback?: (builder: ShippingCarrierMethod) => void): this {\n this.validateMethodCode(method);\n\n const methodBuilder = new ShippingCarrierMethod(this.carrierData.code as string, method);\n\n if (callback) {\n callback(methodBuilder);\n }\n\n this.addedMethods.push(methodBuilder.getData());\n return this;\n }\n\n /**\n * Removes a shipping method from the carrier\n *\n * @param method - Method code to remove\n * @returns The builder instance for method chaining\n *\n * @example\n * ```typescript\n * builder.removeMethod('express');\n * ```\n */\n removeMethod(method: string): this {\n this.validateMethodCode(method);\n this.removedMethods.push(method);\n return this;\n }\n\n /**\n * Gets and returns the shipping carrier data as a JSON object\n *\n * @returns The shipping carrier data\n *\n * @example\n * ```typescript\n * const carrierData = carrier.getData();\n * // Returns:\n * // {\n * // code: 'DPS',\n * // title: 'Demo Postal Service',\n * // stores: ['default'],\n * // countries: ['US', 'CA'],\n * // sort_order: 10,\n * // active: true,\n * // tracking_available: true,\n * // shipping_labels_available: true\n * // }\n * ```\n */\n getData(): ShippingCarrierData {\n return this.carrierData as ShippingCarrierData;\n }\n\n /**\n * Gets the list of methods that have been added to the carrier\n *\n * @returns Array of added shipping carrier methods\n *\n * @example\n * ```typescript\n * const addedMethods = carrier.getAddedMethods();\n * // Returns: [{ carrier_code: 'fedex', method: 'standard', ... }, ...]\n * ```\n */\n getAddedMethods(): ShippingCarrierMethodData[] {\n return this.addedMethods;\n }\n\n /**\n * Gets the list of method codes that have been marked for removal\n *\n * @returns Array of method codes to be removed\n *\n * @example\n * ```typescript\n * const removedMethods = carrier.getRemovedMethods();\n * // Returns: ['overnight', 'express']\n * ```\n */\n getRemovedMethods(): string[] {\n return this.removedMethods;\n }\n}\n\nexport default ShippingCarrier;\n","/**\n * <license header>\n */\n\n/**\n * Webhook operation types for Adobe Commerce webhooks.\n *\n * These operations define the different types of responses that can be returned\n * from a webhook handler to modify the behavior or data in Adobe Commerce.\n *\n * @see https://developer.adobe.com/commerce/extensibility/webhooks/\n */\nexport enum WebhookActionOperation {\n /** Indicates successful webhook processing with no modifications */\n SUCCESS = 'success',\n /** Indicates an exception or error occurred during webhook processing */\n EXCEPTION = 'exception',\n /** Adds a new field or value to the webhook payload */\n ADD = 'add',\n /** Replaces an existing field or value in the webhook payload */\n REPLACE = 'replace',\n /** Removes a field from the webhook payload */\n REMOVE = 'remove',\n}\n\n/**\n * Response indicating successful webhook processing.\n *\n * Use this response when the webhook has been processed successfully\n * and no modifications to the payload are needed.\n *\n * @example\n * ```typescript\n * const response: WebhookActionSuccessResponse = {\n * op: WebhookActionOperation.SUCCESS\n * };\n * ```\n */\nexport interface WebhookActionSuccessResponse {\n /** Operation type */\n op: typeof WebhookActionOperation.SUCCESS;\n}\n\n/**\n * Response indicating an exception or error during webhook processing.\n *\n * Use this response to notify Adobe Commerce that an error occurred\n * during webhook processing. Optionally include the exception class\n * and error message for debugging purposes.\n *\n * @example\n * ```typescript\n * const response: WebhookActionExceptionResponse = {\n * op: WebhookActionOperation.EXCEPTION,\n * class: 'ProductNotFoundException',\n * message: 'Product with SKU ABC123 not found'\n * };\n * ```\n */\nexport interface WebhookActionExceptionResponse {\n /** Operation type */\n op: typeof WebhookActionOperation.EXCEPTION;\n /** Optional exception class name for categorization */\n class?: string;\n /** Optional error message describing what went wrong */\n message?: string;\n}\n\n/**\n * Response for adding a new field or value to the webhook payload.\n *\n * Use this response to inject new data into the webhook payload that will\n * be processed by Adobe Commerce. The path specifies where to add the data,\n * and value contains the data to add.\n *\n * @example\n * ```typescript\n * const response: WebhookActionAddResponse = {\n * op: WebhookActionOperation.ADD,\n * path: 'order.items',\n * value: { sku: 'PRODUCT-123', quantity: 2, price: 49.99 },\n * instance: 'order-12345'\n * };\n * ```\n */\nexport interface WebhookActionAddResponse {\n /** Operation type */\n op: typeof WebhookActionOperation.ADD;\n /** Dot-notation path where the value should be added (e.g., 'order.items', 'customer.addresses') */\n path: string;\n /** The value to add at the specified path */\n value: any;\n /** Optional instance identifier for tracking or reference */\n instance?: string;\n}\n\n/**\n * Response for replacing an existing field or value in the webhook payload.\n *\n * Use this response to modify existing data in the webhook payload.\n * The path specifies which field to replace, and value contains the new data.\n *\n * @example\n * ```typescript\n * const response: WebhookActionReplaceResponse = {\n * op: WebhookActionOperation.REPLACE,\n * path: 'product.price',\n * value: 29.99,\n * instance: 'product-456'\n * };\n * ```\n */\nexport interface WebhookActionReplaceResponse {\n /** Operation type */\n op: typeof WebhookActionOperation.REPLACE;\n /** Dot-notation path to the field that should be replaced (e.g., 'product.price', 'order.status') */\n path: string;\n /** The new value to replace the existing value */\n value: any;\n /** Optional instance identifier for tracking or reference */\n instance?: string;\n}\n\n/**\n * Response for removing a field from the webhook payload.\n *\n * Use this response to remove data from the webhook payload before\n * it's processed by Adobe Commerce.\n *\n * @example\n * ```typescript\n * const response: WebhookActionRemoveResponse = {\n * op: WebhookActionOperation.REMOVE,\n * path: 'customer.addresses.0'\n * };\n * ```\n */\nexport interface WebhookActionRemoveResponse {\n /** Operation type */\n op: typeof WebhookActionOperation.REMOVE;\n /** Dot-notation path to the field that should be removed (e.g., 'items.0', 'customer.email') */\n path: string;\n}\n\n/**\n * Union type representing all possible webhook action response types.\n *\n * This type can be used when you need to handle multiple response types\n * or want to ensure type safety across different webhook operations.\n *\n * @example\n * ```typescript\n * function handleResponse(response: WebhookActionResponseType) {\n * switch (response.op) {\n * case WebhookActionOperation.SUCCESS:\n * // Handle success\n * break;\n * case WebhookActionOperation.EXCEPTION:\n * // Handle exception\n * break;\n * // ... handle other operations\n * }\n * }\n * ```\n */\nexport type WebhookActionResponseType =\n | WebhookActionSuccessResponse\n | WebhookActionExceptionResponse\n | WebhookActionAddResponse\n | WebhookActionReplaceResponse\n | WebhookActionRemoveResponse;\n","/**\n * <license header>\n */\n\nimport {\n WebhookActionOperation,\n WebhookActionSuccessResponse,\n WebhookActionExceptionResponse,\n WebhookActionAddResponse,\n WebhookActionReplaceResponse,\n WebhookActionRemoveResponse,\n} from './types';\n\n/**\n * WebhookActionResponse - Factory class for creating Adobe Commerce webhook responses\n *\n * This class provides static methods to create properly formatted responses for\n * Adobe Commerce webhooks. These responses can be used to signal success, report\n * exceptions, or modify webhook payloads by adding, replacing, or removing data.\n *\n * All methods return strongly-typed response objects that conform to Adobe Commerce's\n * webhook response specification.\n *\n * @example\n * ```typescript\n * // Return a success response\n * return WebhookActionResponse.success();\n *\n * // Report an exception\n * return WebhookActionResponse.exception('ValidationException', 'Invalid product data');\n *\n * // Add new data to the payload\n * return WebhookActionResponse.add('order.metadata', { processed: true });\n *\n * // Modify existing data\n * return WebhookActionResponse.replace('product.price', 29.99);\n *\n * // Remove data from the payload\n * return WebhookActionResponse.remove('customer.internal_notes');\n * ```\n *\n * @see https://developer.adobe.com/commerce/extensibility/webhooks/\n */\nclass WebhookActionResponse {\n /**\n * Creates a success response indicating the webhook was processed successfully.\n *\n * Use this method when the webhook has been processed without errors and\n * no modifications to the payload are needed.\n *\n * @returns A success response object\n *\n * @example\n * ```typescript\n * const handler = WebhookAction.execute('process-order', [], [], async (params) => {\n * // Process the order...\n * await processOrder(params.order);\n *\n * // Return success\n * return {\n * statusCode: 200,\n * body: WebhookActionResponse.success()\n * };\n * });\n * ```\n */\n static success(): WebhookActionSuccessResponse {\n return {\n op: WebhookActionOperation.SUCCESS,\n };\n }\n\n /**\n * Creates an exception response to report an error during webhook processing.\n *\n * Use this method to notify Adobe Commerce that an error occurred while\n * processing the webhook. This helps with debugging and error tracking.\n *\n * @param message - Optional error message describing what went wrong\n * @param exceptionClass - Optional exception class name for categorization (e.g., 'Magento\\\\Framework\\\\Exception\\\\LocalizedException')\n * @returns An exception response object\n *\n * @example\n * ```typescript\n * const handler = WebhookAction.execute('validate-product', [], [], async (params) => {\n * const product = await findProduct(params.sku);\n *\n * if (!product) {\n * return {\n * statusCode: 404,\n * body: WebhookActionResponse.exception(\n * `Product with SKU ${params.sku} not found`,\n * 'Magento\\\\Framework\\\\Exception\\\\NoSuchEntityException'\n * )\n * };\n * }\n *\n * return { statusCode: 200, body: WebhookActionResponse.success() };\n * });\n * ```\n */\n static exception(message?: string, exceptionClass?: string): WebhookActionExceptionResponse {\n const response: WebhookActionExceptionResponse = {\n op: WebhookActionOperation.EXCEPTION,\n };\n\n if (message !== undefined) {\n response.message = message;\n }\n if (exceptionClass !== undefined) {\n response.class = exceptionClass;\n }\n\n return response;\n }\n\n /**\n * Creates a response to add new data to the webhook payload.\n *\n * Use this method to inject additional data into the webhook payload that\n * will be processed by Adobe Commerce. The data is added at the specified\n * path using dot notation.\n *\n * @param path - Dot-notation path where the value should be added (e.g., 'order.items', 'customer.addresses')\n * @param value - The value to add at the specified path\n * @param instance - Optional instance identifier for tracking or reference purposes\n * @returns An add response object\n *\n * @example\n * ```typescript\n * const handler = WebhookAction.execute('enrich-order', [], [], async (params) => {\n * // Add loyalty points to the order\n * return {\n * statusCode: 200,\n * body: WebhookActionResponse.add(\n * 'order.loyalty',\n * { points: 150, tier: 'gold' },\n * params.order.id\n * )\n * };\n * });\n * ```\n */\n static add(path: string, value: any, instance?: string): WebhookActionAddResponse {\n const response: WebhookActionAddResponse = {\n op: WebhookActionOperation.ADD,\n path: path,\n value: value,\n };\n\n if (instance !== undefined) {\n response.instance = instance;\n }\n\n return response;\n }\n\n /**\n * Creates a response to replace existing data in the webhook payload.\n *\n * Use this method to modify existing fields in the webhook payload.\n * The existing value at the specified path will be replaced with the new value.\n *\n * @param path - Dot-notation path to the field that should be replaced (e.g., 'product.price', 'order.status')\n * @param value - The new value to replace the existing value\n * @param instance - Optional instance identifier for tracking or reference purposes\n * @returns A replace response object\n *\n * @example\n * ```typescript\n * const handler = WebhookAction.execute('adjust-price', [], [], async (params) => {\n * // Apply dynamic pricing\n * const newPrice = await calculateDiscountedPrice(params.product.price);\n *\n * return {\n * statusCode: 200,\n * body: WebhookActionResponse.replace(\n * 'product.price',\n * newPrice,\n * params.product.id\n * )\n * };\n * });\n * ```\n */\n static replace(path: string, value: any, instance?: string): WebhookActionReplaceResponse {\n const response: WebhookActionReplaceResponse = {\n op: WebhookActionOperation.REPLACE,\n path: path,\n value: value,\n };\n\n if (instance !== undefined) {\n response.instance = instance;\n }\n\n return response;\n }\n\n /**\n * Creates a response to remove data from the webhook payload.\n *\n * Use this method to remove fields from the webhook payload before it's\n * processed by Adobe Commerce. This is useful for filtering sensitive data\n * or removing unnecessary information.\n *\n * @param path - Dot-notation path to the field that should be removed (e.g., 'items.0', 'customer.internal_notes')\n * @returns A remove response object\n *\n * @example\n * ```typescript\n * const handler = WebhookAction.execute('sanitize-customer', [], [], async (params) => {\n * // Remove internal notes before processing\n * return {\n * statusCode: 200,\n * body: WebhookActionResponse.remove('customer.internal_notes')\n * };\n * });\n * ```\n *\n * @example\n * ```typescript\n * // Remove an item from an array\n * return {\n * statusCode: 200,\n * body: WebhookActionResponse.remove('order.items.2')\n * };\n * ```\n */\n static remove(path: string): WebhookActionRemoveResponse {\n return {\n op: WebhookActionOperation.REMOVE,\n path: path,\n };\n }\n}\n\nexport default WebhookActionResponse;\n","/**\n * <license header>\n */\n\nimport ShippingCarrier from '..';\nimport WebhookActionResponse from '../../../framework/webhook-action/response';\nimport { WebhookActionResponseType } from '../../../framework/webhook-action/response/types';\n\n/**\n * Response generator for shipping carriers\n */\nclass ShippingCarrierResponse {\n private carrier: ShippingCarrier;\n\n constructor(carrier: ShippingCarrier) {\n this.carrier = carrier;\n }\n\n /**\n * Generates and returns an array of WebhookActionResponse operations\n *\n * @returns Array of WebhookActionResponse operations\n *\n * @example\n * ```typescript\n * const carrier = new ShippingCarrier('fedex');\n * const response = new ShippingCarrierResponse(carrier);\n * const operations = response.generate();\n * ```\n */\n generate(): WebhookActionResponseType[] {\n const operations: WebhookActionResponseType[] = [];\n\n // Get added methods from carrier\n const addedMethods = this.carrier['addedMethods'];\n for (const method of addedMethods) {\n operations.push(WebhookActionResponse.add('result', method));\n }\n\n // Get removed methods from carrier\n const removedMethods = this.carrier['removedMethods'];\n for (const method of removedMethods) {\n operations.push(WebhookActionResponse.add('result', { method: method, remove: true }));\n }\n\n return operations;\n }\n}\n\nexport default ShippingCarrierResponse;\n","/**\n * <license header>\n */\n\n/**\n * Commerce utilities for Adobe Commerce AIO Toolkit\n */\n\n// Export Adobe Auth utility\nexport { default as AdobeAuth } from './adobe-auth';\n\n// Export Adobe Commerce Client utility\nexport { default as AdobeCommerceClient } from './adobe-commerce-client';\n\n// Export Adobe Commerce Client connection implementations\nexport { default as BasicAuthConnection } from './adobe-commerce-client/basic-auth-connection';\nexport { default as Oauth1aConnection } from './adobe-commerce-client/oauth1a-connection';\nexport { default as ImsConnection } from './adobe-commerce-client/ims-connection';\nexport { default as GenerateBasicAuthToken } from './adobe-commerce-client/basic-auth-connection/generate-basic-auth-token';\n\n// Export Shipping Carrier\nexport { default as ShippingCarrier } from './shipping-carrier';\nexport { default as ShippingCarrierMethod } from './shipping-carrier/method';\nexport { default as ShippingCarrierResponse } from './shipping-carrier/response';\n\n// Export Adobe Auth types\nexport type { AdobeIMSConfig } from './adobe-auth/types';\n\n// Export Adobe Commerce Client types\nexport type { Connection, ExtendedRequestError } from './adobe-commerce-client/types';\n\n// Export Basic Auth Token types\nexport type { TokenResult } from './adobe-commerce-client/basic-auth-connection/generate-basic-auth-token/types';\n\n// Export Shipping Carrier types\nexport type { ShippingCarrierData } from './shipping-carrier/types';\nexport type {\n ShippingCarrierMethodData,\n ShippingCarrierMethodAdditionalData,\n} from './shipping-carrier/method/types';\n","/**\n * <license header>\n */\n\nimport type { Logger } from '@adobe/aio-sdk';\nimport {\n AdobeAuth,\n AdobeCommerceClient,\n ImsConnection,\n Oauth1aConnection,\n} from '../../../../commerce';\nimport { CommerceAuthType } from '../onboard-config/types';\nimport type { CommerceEnvironment } from '../commerce-environment';\n\n/**\n * Factory class for creating authenticated Adobe Commerce API clients\n *\n * Provides static method to create Commerce clients with OAuth 1.0a or IMS authentication.\n *\n * @example\n * ```typescript\n * const client = await AdobeCommerceClientFactory.create(\n * CommerceAuthType.OAUTH,\n * env,\n * logger\n * );\n * ```\n */\nexport class AdobeCommerceClientFactory {\n /**\n * Creates authenticated Commerce API client\n *\n * @param commerceAuthType - Authentication type (OAUTH or IMS)\n * @param env - Environment configuration with credentials\n * @param logger - Optional logger for debug information\n * @returns Configured Commerce client with appropriate authentication\n * @throws Error if authentication configuration is missing or invalid\n */\n public static async create(\n commerceAuthType: CommerceAuthType,\n env: CommerceEnvironment,\n logger?: Logger | null\n ): Promise<AdobeCommerceClient> {\n if (commerceAuthType === CommerceAuthType.OAUTH) {\n if (!env.oauth) {\n throw new Error('OAuth configuration is missing');\n }\n\n logger?.debug('[AUTH] Using OAuth 1.0a authentication');\n logger?.debug(`[AUTH] Commerce Base URL: ${env.commerce.baseUrl}`);\n\n return new AdobeCommerceClient(\n env.commerce.baseUrl,\n new Oauth1aConnection(\n env.oauth.consumerKey,\n env.oauth.consumerSecret,\n env.oauth.accessToken,\n env.oauth.accessTokenSecret\n ),\n logger || null,\n {\n rejectUnauthorized: false,\n }\n );\n }\n\n if (commerceAuthType === CommerceAuthType.IMS) {\n if (!env.ims) {\n throw new Error('IMS configuration is missing');\n }\n\n logger?.debug('[AUTH] Using IMS authentication');\n logger?.debug(`[AUTH] Commerce Base URL: ${env.commerce.baseUrl}`);\n logger?.debug('[AUTH] Generating IMS token');\n\n const imsToken = await AdobeAuth.getToken(\n env.ims.clientId,\n env.ims.clientSecret,\n env.ims.technicalAccountId,\n env.ims.technicalAccountEmail,\n env.ims.orgId,\n env.ims.scopes\n );\n\n logger?.debug('[AUTH] IMS token generated successfully');\n\n return new AdobeCommerceClient(\n env.commerce.baseUrl,\n new ImsConnection(imsToken, logger || null),\n logger || null\n );\n }\n\n throw new Error(\n `Invalid authentication type: ${commerceAuthType}. ` +\n `Expected '${CommerceAuthType.OAUTH}' or '${CommerceAuthType.IMS}'`\n );\n }\n}\n","/**\n * <license header>\n */\n\nimport type { Logger } from '@adobe/aio-sdk';\n\nimport OnboardCommerceService from '../../../../../integration/onboard-commerce';\nimport type { WorkspaceConfig } from '../../../../../integration/onboard-commerce/types';\nimport { CommerceAuthType } from '../../../../framework/helpers/onboard-config/types';\nimport { CommerceEnvironmentLoader } from '../../../../framework/helpers/commerce-environment';\nimport { AdobeCommerceClientFactory } from '../../../../framework/helpers/adobe-commerce-client';\n\nimport * as dotenv from 'dotenv';\ndotenv.config();\n\n/**\n * Handles Adobe Commerce Events onboarding to Commerce instance.\n *\n * Manages Commerce API authentication (OAuth/IMS) and registers Commerce events.\n *\n * @example\n * const executor = new ExecuteCommerce(\n * CommerceAuthType.OAUTH, commerceProvider, eventsConfig, true, logger\n * );\n * await executor.onboard();\n */\nexport class ExecuteCommerce {\n constructor(\n private readonly commerceAuthType: CommerceAuthType,\n private readonly commerceProvider: any,\n private readonly commerceEventsConfig: any,\n private readonly isPaaSInstance: boolean,\n private readonly logger: Logger | null\n ) {}\n\n /**\n * Executes Commerce events onboarding process.\n *\n * Steps: validate env → create client → initialize service → register events\n *\n * @returns Onboarding result with event registration status\n * @throws Error if validation, client creation, or registration fails\n */\n public async onboard(): Promise<any> {\n try {\n const env = CommerceEnvironmentLoader.load(this.commerceAuthType);\n const workspaceConfig = this.parseWorkspaceConfig(env.io.workspaceConfig);\n const commerceClient = await AdobeCommerceClientFactory.create(\n this.commerceAuthType,\n env,\n this.logger\n );\n\n const onboardService = new OnboardCommerceService(\n commerceClient,\n env.commerce.merchantId,\n env.commerce.environmentId,\n this.logger,\n this.isPaaSInstance\n );\n\n return await onboardService.process(\n this.commerceProvider.raw,\n workspaceConfig,\n this.commerceEventsConfig\n );\n } catch (error: any) {\n throw new Error(`Commerce events onboarding failed: ${error.message}`);\n }\n }\n\n /**\n * Parses workspace configuration from JSON string.\n *\n * @private\n * @param configJson - JSON string containing workspace configuration\n * @returns Parsed workspace configuration\n * @throws Error if JSON is invalid\n */\n private parseWorkspaceConfig(configJson: string): WorkspaceConfig {\n try {\n return JSON.parse(configJson) as WorkspaceConfig;\n } catch (error: any) {\n throw new Error(`Invalid IO_WORKSPACE_CONFIG JSON: ${error.message}`);\n }\n }\n}\n","/*\n * <license header>\n */\n\nimport { CommandAbstract } from '../../../framework/command/abstract';\nimport { CommandResult } from '../../../framework/command/registry/types';\nimport { OnboardConfig } from '../../../framework/helpers/onboard-config';\nimport { DeploymentType } from '../../../framework/helpers/onboard-config/types';\nimport { ApplicationName } from '../../../framework/helpers/application-name';\n\nimport { ExecuteIOEvents } from './io-events';\nimport { ExecuteCommerce } from './commerce';\n\n/**\n * Executes onboarding for Adobe I/O Events and Commerce events.\n *\n * Orchestrates the complete onboarding workflow:\n * 1. Loads configuration from onboard.config.yaml\n * 2. Onboards I/O Events (providers, event metadata, registrations)\n * 3. Onboards Commerce events (if Commerce provider exists)\n */\nexport class OnboardEventsExecute extends CommandAbstract {\n /** Command name identifier */\n private static readonly NAME = 'execute';\n\n /** Command description shown in help text */\n private static readonly DESCRIPTION =\n 'Execute onboard events for Adobe IO and Commerce applications';\n\n /**\n * Returns the command name.\n * @returns Command name string\n */\n public static override getName(): string {\n return this.NAME;\n }\n\n /**\n * Returns the command description.\n * @returns Command description string\n */\n public static override getDescription(): string {\n return this.DESCRIPTION;\n }\n\n /**\n * Executes the onboarding workflow for I/O Events and Commerce events.\n *\n * @param _args - Command arguments (not used)\n * @returns Promise resolving to command result with success status and message\n */\n public static override async execute(..._args: any[]): Promise<CommandResult> {\n try {\n // Step 1: Load and validate onboarding configuration\n const onboardConfig = OnboardConfig.get();\n const applicationName = ApplicationName.generate(onboardConfig.application.name);\n\n // Step 2: Onboard I/O Events to Adobe I/O Console\n // Creates providers, event metadata, and registrations\n const onboardIOEvents = new ExecuteIOEvents(applicationName, onboardConfig.events.io.config);\n const ioEventsResponse = await onboardIOEvents.onboard();\n\n // Step 3: Look for Commerce provider in the onboarded I/O Events\n // Commerce events can only be onboarded if Commerce provider exists\n const commerceProvider = ioEventsResponse?.createdProviders?.find(\n provider => provider.provider.key === onboardConfig.events.commerce.providerKey\n );\n\n // Step 4: Onboard Commerce events if provider was found\n if (commerceProvider !== undefined && commerceProvider !== null) {\n // Determine if this is a PaaS instance (vs Cloud)\n const isPaaSInstance = onboardConfig.deployment.type === DeploymentType.PAAS;\n\n try {\n // Initialize Commerce onboarding executor\n const executeCommerce = new ExecuteCommerce(\n onboardConfig.deployment.authType,\n commerceProvider,\n onboardConfig.events.commerce.config,\n isPaaSInstance,\n onboardIOEvents.getLogger() ?? null\n );\n\n // Execute Commerce events onboarding\n await executeCommerce.onboard();\n\n // Return success for both I/O Events and Commerce events\n return {\n success: true,\n message:\n '✅ Success: Onboard events executed successfully!\\n' +\n `- IO Events onboarded for application: ${applicationName}\\n` +\n `- Commerce Events onboarded using provider: ${onboardConfig.events.commerce.providerKey}\\n` +\n `- Commerce Instance Type: ${isPaaSInstance ? 'Adobe Commerce Cloud/On-premise' : 'Adobe Commerce as Cloud Service'}\\n` +\n `- Commerce Authentication Type: ${onboardConfig.deployment.authType.toUpperCase()}`,\n };\n } catch (commerceError: any) {\n // Handle partial success: I/O Events succeeded but Commerce failed\n return {\n success: false,\n message:\n '⚠️ Partial Success: IO Events onboarded, but Commerce Events failed.\\n\\n' +\n `✅ IO Events Status:\\n` +\n ` - Application: ${applicationName}\\n` +\n ` - Providers: ${ioEventsResponse?.createdProviders?.length || 0}\\n\\n` +\n `❌ Commerce Events Error:\\n` +\n ` - ${commerceError.message}\\n\\n` +\n `Please fix the Commerce configuration and try running the command again.`,\n };\n }\n }\n\n // No Commerce provider found - return I/O Events success only\n return {\n success: true,\n message:\n '✅ Success: IO Events onboarded successfully!\\n' +\n `- Application: ${applicationName}\\n` +\n `- Providers: ${ioEventsResponse?.createdProviders?.length || 0}\\n` +\n 'Note: Commerce events were not processed (no Commerce events file provided).',\n };\n } catch (error: any) {\n // Handle complete failure (configuration or I/O Events onboarding failed)\n return {\n success: false,\n message:\n '❌ Error: Failed to execute onboard events command.\\n' +\n `Details: ${error.message}\\n` +\n 'Please check the error details above and try again.',\n };\n }\n }\n}\n","/**\n * <license header>\n */\n\nimport ProviderManager from '../../../../../io-events/provider';\nimport EventMetadataManager from '../../../../../io-events/event-metadata';\nimport RegistrationManager from '../../../../../io-events/registration';\nimport { OnboardEventsInput } from '../../../../../integration/onboard-events/types';\nimport { Provider } from '../../../../../io-events/provider/types';\nimport { Registration } from '../../../../../io-events/registration/types';\n\nimport { CleanupResult, DeletionTarget, EventMetadataDeletionTarget } from './types';\nimport { IOEnvironmentLoader } from '../../../../framework/helpers/io-environment';\nimport type { IOEventsEnvironment } from '../../../../framework/helpers/io-environment/types';\nimport { AdobeAuthToken } from '../../../../framework/helpers/adobe-auth-token';\n\nimport { Logger } from '@adobe/aio-sdk';\n\nimport * as dotenv from 'dotenv';\ndotenv.config();\n\n/**\n * Handles cleanup of Adobe I/O Events resources\n *\n * This class provides functionality to clean up event providers, registrations,\n * and event metadata from Adobe I/O Console based on configuration.\n */\nexport class CleanupIOEvents {\n private readonly config: IOEventsEnvironment;\n\n /**\n * Creates a new CleanupIOEvents instance\n *\n * @param applicationName - The name of the application being onboarded\n * @param ioEventsConfig - The configuration for the Adobe I/O Console events\n * @param logger - The logger for the cleanup process\n */\n constructor(\n private readonly applicationName: string,\n private readonly ioEventsConfig: OnboardEventsInput,\n private readonly logger: Logger\n ) {\n this.config = IOEnvironmentLoader.load();\n }\n\n /**\n * Main cleanup orchestration method\n *\n * @returns {Promise<CleanupResult>} Result containing all deleted resources\n * @throws {Error} When authentication fails or cleanup operations fail\n */\n public async cleanup(): Promise<CleanupResult> {\n try {\n this.logger.debug('[START] Authenticating with Adobe IMS');\n const tokenInfo = await AdobeAuthToken.generate(this.config.oauth);\n this.logger.debug('[SUCCESS] Authentication successful');\n this.logger.debug('[INFO] Token generated successfully');\n this.logger.debug(\n `[INFO] Token expires at: ${tokenInfo.expiry ? tokenInfo.expiry : 'Unknown'}`\n );\n\n const managers = this.createManagers(tokenInfo.token);\n\n this.logger.debug('[FETCH] Retrieving existing providers and registrations');\n const [providers, registrations] = await Promise.all([\n managers.providerManager.list(),\n managers.registrationManager.list(),\n ]);\n this.logger.debug(\n `[INFO] Found ${providers.length} provider(s) and ${registrations.length} registration(s)`\n );\n\n this.logger.debug('[COLLECT] Identifying resources to delete');\n const deletionTargets = await this.collectDeletionTargets(managers, providers, registrations);\n\n this.logger.info('[INFO] Deletion targets identified:');\n this.logger.info(` - Providers: ${deletionTargets.providers.size}`);\n this.logger.info(` - Registrations: ${deletionTargets.registrations.size}`);\n this.logger.info(` - Event metadata: ${deletionTargets.eventMetadata.size}`);\n\n this.logger.info('[DELETE] Starting deletion operations');\n await this.executeDeletions(managers, deletionTargets);\n\n this.logger.info('[SUCCESS] All resources deleted successfully');\n return this.buildCleanupResult(deletionTargets);\n } catch (error: any) {\n this.logger.error(`[ERROR] Cleanup failed: ${error.message}`);\n throw new Error(`Cleanup failed: ${error.message}`);\n }\n }\n\n /**\n * Creates manager instances for Adobe I/O operations\n *\n * @param {string} token - Access token\n * @returns Object containing all manager instances\n * @private\n */\n private createManagers(token: string): {\n providerManager: ProviderManager;\n eventMetadataManager: EventMetadataManager;\n registrationManager: RegistrationManager;\n } {\n const constructorParams: [string, string, string, string, string] = [\n this.config.oauth.clientId,\n this.config.io.consumerId,\n this.config.io.projectId,\n this.config.io.workspaceId,\n token,\n ];\n\n return {\n providerManager: new ProviderManager(...constructorParams),\n eventMetadataManager: new EventMetadataManager(...constructorParams),\n registrationManager: new RegistrationManager(...constructorParams),\n };\n }\n\n /**\n * Collects all resources that need to be deleted\n *\n * @param managers - Manager instances\n * @param providers - List of all providers\n * @param registrations - List of all registrations\n * @returns Object containing all deletion targets\n * @private\n */\n private async collectDeletionTargets(\n managers: {\n providerManager: ProviderManager;\n eventMetadataManager: EventMetadataManager;\n registrationManager: RegistrationManager;\n },\n providers: Provider[],\n registrations: Registration[]\n ): Promise<{\n providers: Set<DeletionTarget>;\n registrations: Set<DeletionTarget>;\n eventMetadata: Set<EventMetadataDeletionTarget>;\n }> {\n const providersToDelete = new Set<DeletionTarget>();\n const eventMetadataToDelete = new Set<EventMetadataDeletionTarget>();\n const registrationsToDelete = new Set<DeletionTarget>();\n\n for (const providerConfig of this.ioEventsConfig.providers || []) {\n const matchingProvider = this.findMatchingProvider(providers, providerConfig.label);\n\n if (!matchingProvider) {\n this.logger.debug(`No matching provider found for: ${providerConfig.label}`);\n continue;\n }\n\n providersToDelete.add({\n id: matchingProvider.id,\n name: matchingProvider.label,\n key: providerConfig.key,\n });\n\n this.logger.debug(\n `Found provider to delete: ${matchingProvider.label} (ID: ${matchingProvider.id})`\n );\n\n // Collect registrations and event metadata for this provider\n await this.collectProviderResources(\n managers.eventMetadataManager,\n providerConfig,\n matchingProvider,\n registrations,\n registrationsToDelete,\n eventMetadataToDelete\n );\n }\n\n return {\n providers: providersToDelete,\n registrations: registrationsToDelete,\n eventMetadata: eventMetadataToDelete,\n };\n }\n\n /**\n * Finds a provider that matches the given label\n *\n * @param providers - List of all providers\n * @param label - Label to match\n * @returns Matching provider or undefined\n * @private\n */\n private findMatchingProvider(providers: Provider[], label: string): Provider | undefined {\n const providerLabel = `${this.applicationName} - ${label}`;\n const extendedProviderLabel = `${this.applicationName} (${this.config.io.workspaceId}) - ${label}`;\n\n return providers.find(p => p.label === extendedProviderLabel || p.label === providerLabel);\n }\n\n /**\n * Collects registrations and event metadata for a specific provider\n *\n * @param eventMetadataManager - Event metadata manager instance\n * @param providerConfig - Provider configuration\n * @param matchingProvider - Matched provider\n * @param registrations - All registrations\n * @param registrationsToDelete - Set to add registrations to\n * @param eventMetadataToDelete - Set to add event metadata to\n * @private\n */\n private async collectProviderResources(\n eventMetadataManager: EventMetadataManager,\n providerConfig: any,\n matchingProvider: Provider,\n registrations: Registration[],\n registrationsToDelete: Set<DeletionTarget>,\n eventMetadataToDelete: Set<EventMetadataDeletionTarget>\n ): Promise<void> {\n // Fetch event metadata once per provider (outside the loop)\n const eventsMetadata = await eventMetadataManager.list(matchingProvider.id);\n\n for (const registrationConfig of providerConfig.registrations || []) {\n const matchingRegistration = registrations.find(reg => reg.name === registrationConfig.label);\n\n if (matchingRegistration) {\n registrationsToDelete.add({\n id: matchingRegistration.registration_id,\n name: matchingRegistration.name,\n key: registrationConfig.key,\n });\n\n this.logger.debug(\n `Found registration to delete: ${matchingRegistration.name} (ID: ${matchingRegistration.registration_id})`\n );\n }\n\n // Collect event metadata\n for (const eventConfig of registrationConfig.events || []) {\n const matchingEventMetadata = eventsMetadata.find(\n (em: any) => em.event_code === eventConfig.eventCode\n );\n\n if (matchingEventMetadata) {\n eventMetadataToDelete.add({\n providerId: matchingProvider.id,\n eventCode: eventConfig.eventCode,\n });\n\n this.logger.debug(`Found event metadata to delete: ${eventConfig.eventCode}`);\n }\n }\n }\n }\n\n /**\n * Executes all deletion operations in the correct order\n *\n * Order: Registrations -> Event Metadata -> Providers\n * This ensures dependencies are respected\n *\n * @param managers - Manager instances\n * @param deletionTargets - All resources to delete\n * @private\n */\n private async executeDeletions(\n managers: {\n providerManager: ProviderManager;\n eventMetadataManager: EventMetadataManager;\n registrationManager: RegistrationManager;\n },\n deletionTargets: {\n providers: Set<DeletionTarget>;\n registrations: Set<DeletionTarget>;\n eventMetadata: Set<EventMetadataDeletionTarget>;\n }\n ): Promise<void> {\n // Step 1: Delete registrations first (they depend on event metadata)\n if (deletionTargets.registrations.size > 0) {\n this.logger.info(`[DELETE] Deleting ${deletionTargets.registrations.size} registration(s)`);\n for (const registration of deletionTargets.registrations) {\n this.logger.debug(\n `[DELETE] Deleting registration: ${registration.name} (${registration.id})`\n );\n await managers.registrationManager.delete(registration.id);\n this.logger.info(`[SUCCESS] ✓ Deleted registration: ${registration.name}`);\n }\n }\n\n // Step 2: Delete event metadata (depends on providers)\n if (deletionTargets.eventMetadata.size > 0) {\n this.logger.info(`[DELETE] Deleting ${deletionTargets.eventMetadata.size} event metadata`);\n for (const eventMetadata of deletionTargets.eventMetadata) {\n this.logger.debug(\n `[DELETE] Deleting event metadata: ${eventMetadata.eventCode} (Provider: ${eventMetadata.providerId})`\n );\n await managers.eventMetadataManager.delete(\n eventMetadata.providerId,\n eventMetadata.eventCode\n );\n this.logger.info(`[SUCCESS] ✓ Deleted event metadata: ${eventMetadata.eventCode}`);\n }\n }\n\n // Step 3: Delete providers last (base resources)\n if (deletionTargets.providers.size > 0) {\n this.logger.info(`[DELETE] Deleting ${deletionTargets.providers.size} provider(s)`);\n for (const provider of deletionTargets.providers) {\n this.logger.debug(`[DELETE] Deleting provider: ${provider.name} (${provider.id})`);\n await managers.providerManager.delete(provider.id);\n this.logger.info(`[SUCCESS] ✓ Deleted provider: ${provider.name}`);\n }\n }\n }\n\n /**\n * Builds the cleanup result from deletion targets\n *\n * @param deletionTargets - All resources that were deleted\n * @returns {CleanupResult} Final cleanup result\n * @private\n */\n private buildCleanupResult(deletionTargets: {\n providers: Set<DeletionTarget>;\n registrations: Set<DeletionTarget>;\n eventMetadata: Set<EventMetadataDeletionTarget>;\n }): CleanupResult {\n return {\n deletedProviders: Array.from(deletionTargets.providers),\n deletedRegistrations: Array.from(deletionTargets.registrations),\n deletedEventMetadata: Array.from(deletionTargets.eventMetadata),\n };\n }\n}\n","/**\n * <license header>\n */\n\nimport { Logger } from '@adobe/aio-sdk';\nimport { CommerceAuthType } from '../../../../framework/helpers/onboard-config/types';\nimport { CommerceEnvironmentLoader } from '../../../../framework/helpers/commerce-environment';\nimport { AdobeCommerceClientFactory } from '../../../../framework/helpers/adobe-commerce-client';\n\n/**\n * Handles cleanup of Adobe Commerce event subscriptions and providers.\n */\nexport class CleanupCommerce {\n /**\n * @param commerceAuthType - The authentication type (oauth1a or ims).\n * @param commerceProvider - The Commerce provider to clean up.\n * @param commerceEventsConfig - The Commerce events configuration.\n * @param isPaaSInstance - Whether this is a PaaS instance.\n * @param logger - Logger instance for structured logging.\n */\n constructor(\n private readonly commerceAuthType: CommerceAuthType,\n private readonly commerceProvider: any,\n private readonly commerceEventsConfig: any,\n private readonly isPaaSInstance: boolean,\n private readonly logger: Logger | null\n ) {}\n\n /**\n * Cleans up Commerce event subscriptions and deletes the provider.\n * @returns Cleanup summary including unsubscribed events count and deleted provider name.\n */\n public async cleanup(): Promise<any> {\n try {\n this.logger?.info('[START] Starting Commerce cleanup');\n this.logger?.debug(\n `[DEBUG] Provider: ${this.commerceProvider.name} (${this.commerceProvider.id})`\n );\n this.logger?.debug(`[DEBUG] Auth type: ${this.commerceAuthType}`);\n this.logger?.debug(`[DEBUG] PaaS instance: ${this.isPaaSInstance}`);\n\n this.logger?.debug('[LOAD] Loading environment configuration');\n const env = CommerceEnvironmentLoader.load(this.commerceAuthType);\n\n this.logger?.debug('[AUTH] Creating Commerce client');\n const commerceClient = await AdobeCommerceClientFactory.create(\n this.commerceAuthType,\n env,\n this.logger\n );\n\n this.logger?.debug('[FETCH] Retrieving event subscriptions from Commerce');\n const eventList = await commerceClient.get(`V1/eventing/getEventSubscriptions`);\n this.logger?.debug(`[INFO] Found ${eventList.message.length} total subscription(s)`);\n\n // Filter event list by provider id\n const filteredEventList = eventList.message.filter(\n (event: any) => event.provider_id === this.commerceProvider.id\n );\n this.logger?.info(\n `[INFO] Found ${filteredEventList.length} subscription(s) for this provider`\n );\n\n // Unsubscribe from each event\n if (filteredEventList.length > 0) {\n this.logger?.info(`[UNSUBSCRIBE] Unsubscribing from ${filteredEventList.length} event(s)`);\n for (const event of filteredEventList) {\n this.logger?.debug(`[UNSUBSCRIBE] Unsubscribing from event: ${event.name}`);\n await commerceClient.post(`V1/eventing/eventUnsubscribe/${event.name}`);\n this.logger?.info(`[SUCCESS] ✓ Unsubscribed from event: ${event.name}`);\n }\n }\n\n // Delete the provider\n this.logger?.info(`[DELETE] Deleting Commerce provider: ${this.commerceProvider.name}`);\n await commerceClient.delete(`V1/eventing/eventProvider/${this.commerceProvider.id}`);\n this.logger?.info(`[SUCCESS] ✓ Commerce provider deleted successfully`);\n\n this.logger?.info('[SUCCESS] Commerce cleanup completed');\n\n return {\n unsubscribedEvents: filteredEventList.length,\n deletedProvider: this.commerceProvider.name,\n };\n } catch (error: any) {\n this.logger?.error(`[ERROR] Commerce cleanup failed: ${error.message}`);\n throw new Error(`Commerce cleanup failed: ${error.message}`);\n }\n }\n}\n","/*\n * <license header>\n */\n\nimport { Core } from '@adobe/aio-sdk';\nimport { CommandAbstract } from '../../../framework/command/abstract';\nimport { CommandResult } from '../../../framework/command/registry/types';\nimport { OnboardConfig } from '../../../framework/helpers/onboard-config';\nimport { ApplicationName } from '../../../framework/helpers/application-name';\n\nimport { CleanupIOEvents } from './io-events';\nimport { CleanupCommerce } from './commerce';\nimport { DeploymentType } from '../../../framework/helpers/onboard-config/types';\n\nexport class OnboardEventsCleanup extends CommandAbstract {\n /**\n * Static command name\n */\n private static readonly NAME = 'cleanup';\n\n /**\n * Static command description\n */\n private static readonly DESCRIPTION =\n 'Cleanup onboard events for Adobe IO and Commerce applications';\n\n /**\n * Method to get the name of the command\n * @returns {string} The name of the command\n */\n public static override getName(): string {\n return this.NAME;\n }\n\n /**\n * Method to get the description of the command\n * @returns {string} The description of the command\n */\n public static override getDescription(): string {\n return this.DESCRIPTION;\n }\n\n /**\n * Creates a structured logger name for the cleanup process\n * @param appName - Application name\n * @param consumerId - IO Consumer ID\n * @param projectId - IO Project ID\n * @returns Formatted logger name\n */\n private static createLoggerName(appName: string, consumerId: string, projectId: string): string {\n // Transform app name: lowercase, remove special chars, replace spaces with dashes\n const normalizedAppName = appName\n .toLowerCase()\n .replace(/[^a-z0-9\\s-]/g, '') // Remove special characters except spaces and dashes\n .replace(/\\s+/g, '-') // Replace spaces with dashes\n .replace(/-+/g, '-'); // Replace multiple dashes with single dash\n\n return `${normalizedAppName}-${consumerId}-${projectId}-onboard-events`;\n }\n\n public static override async execute(..._args: any[]): Promise<CommandResult> {\n try {\n const onboardConfig = OnboardConfig.get();\n const applicationName = ApplicationName.generate(onboardConfig.application.name);\n\n // Create structured logger with application context\n const loggerName = this.createLoggerName(\n applicationName,\n process?.env?.IO_CONSUMER_ID || '',\n process?.env?.IO_PROJECT_ID || ''\n );\n const logger = Core.Logger(loggerName, { level: 'debug' });\n\n logger.debug('[DEBUG] Starting cleanup process');\n logger.debug(`[DEBUG] Application: ${onboardConfig.application.name}`);\n logger.debug(`[DEBUG] Deployment type: ${onboardConfig.deployment.type}`);\n logger.debug(`[DEBUG] Auth type: ${onboardConfig.deployment.authType}`);\n\n logger.info('[START] Beginning cleanup operations');\n\n // Step 1: Cleanup I/O Events\n logger.info('[CLEANUP] Starting I/O Events cleanup');\n const cleanupIOEvents = new CleanupIOEvents(\n applicationName,\n onboardConfig.events.io.config,\n logger\n );\n const ioEventsResponse = await cleanupIOEvents.cleanup();\n\n // Log I/O Events cleanup summary\n logger.info('[SUMMARY] I/O Events cleanup completed:');\n logger.info(` - Providers deleted: ${ioEventsResponse.deletedProviders.length}`);\n logger.info(` - Registrations deleted: ${ioEventsResponse.deletedRegistrations.length}`);\n logger.info(` - Event metadata deleted: ${ioEventsResponse.deletedEventMetadata.length}`);\n\n // Step 2: Look for Commerce provider in the deleted I/O Events\n const deletedCommerceProvider = ioEventsResponse?.deletedProviders?.find(\n provider => provider.key === onboardConfig.events.commerce.providerKey\n );\n\n if (!deletedCommerceProvider) {\n logger.info(\n `[INFO] No Commerce provider found with key '${onboardConfig.events.commerce.providerKey}'`\n );\n this.logFinalSummary(logger, onboardConfig.application.name, ioEventsResponse, null);\n\n return {\n success: true,\n message:\n `✅ Success: I/O Events cleaned up successfully!\\n` +\n `- Application: ${onboardConfig.application.name}\\n` +\n `- Providers deleted: ${ioEventsResponse.deletedProviders.length}\\n` +\n `Note: Commerce events were not processed (no Commerce provider found).`,\n };\n }\n\n // Step 3: Cleanup Commerce events\n logger.info('[CLEANUP] Starting Commerce events cleanup');\n const cleanupCommerce = new CleanupCommerce(\n onboardConfig.deployment.authType,\n deletedCommerceProvider,\n onboardConfig.events.commerce.config,\n onboardConfig.deployment.type === DeploymentType.PAAS,\n logger\n );\n\n const commerceResponse = await cleanupCommerce.cleanup();\n\n // Log final summary\n this.logFinalSummary(\n logger,\n onboardConfig.application.name,\n ioEventsResponse,\n commerceResponse\n );\n\n return {\n success: true,\n message:\n `✅ Success: Cleanup completed successfully!\\n` +\n `- Application: ${onboardConfig.application.name}\\n` +\n `- I/O Providers deleted: ${ioEventsResponse.deletedProviders.length}\\n` +\n `- I/O Registrations deleted: ${ioEventsResponse.deletedRegistrations.length}\\n` +\n `- Commerce events unsubscribed: ${commerceResponse.unsubscribedEvents}\\n` +\n `- Commerce provider deleted: Yes`,\n };\n } catch (error: any) {\n return {\n success: false,\n message:\n '❌ Error: Failed to execute cleanup command.\\n' +\n `Details: ${error.message}\\n` +\n 'Please check the error details above and try again.',\n };\n }\n }\n\n /**\n * Logs a comprehensive cleanup summary\n */\n private static logFinalSummary(\n logger: any,\n appName: string,\n ioEventsResponse: any,\n commerceResponse: any\n ): void {\n logger.info('');\n logger.info('============================================================');\n logger.info(`📊 CLEANUP SUMMARY - ${appName}`);\n logger.info('============================================================');\n logger.info('');\n\n // I/O Events summary\n logger.info(`🏭 I/O EVENTS CLEANUP:`);\n logger.info(` Providers deleted: ${ioEventsResponse.deletedProviders.length}`);\n logger.info(` Registrations deleted: ${ioEventsResponse.deletedRegistrations.length}`);\n logger.info(` Event metadata deleted: ${ioEventsResponse.deletedEventMetadata.length}`);\n logger.info('');\n\n // Commerce summary (if available)\n if (commerceResponse) {\n logger.info(`🛒 COMMERCE CLEANUP:`);\n logger.info(` Events unsubscribed: ${commerceResponse.unsubscribedEvents}`);\n logger.info(` Provider deleted: Yes`);\n logger.info('');\n }\n\n logger.info('============================================================');\n }\n}\n","/**\n * <license header>\n */\n\nimport { CommandRegistry } from '../../framework/command/registry/index';\nimport { CommandDescriptor } from '../../framework/command/registry/types';\nimport { OnboardEventsHelp } from './help';\nimport { OnboardEventsExecute } from './execute';\nimport { OnboardEventsCleanup } from './cleanup';\n\n/**\n * Manages onboard-events command registration and execution.\n *\n * Registered commands:\n * - `execute`: Onboard I/O Events and Commerce events\n * - `help`: Display help information\n */\nexport class OnboardEventsManager extends CommandRegistry {\n /**\n * Returns registered onboard-events commands.\n *\n * @returns Array of command descriptors with name, description, and execute handler\n */\n public static override getCommands(): CommandDescriptor[] {\n return [\n {\n name: OnboardEventsExecute.getName(),\n description: OnboardEventsExecute.getDescription(),\n execute: OnboardEventsExecute.execute.bind(OnboardEventsExecute),\n },\n {\n name: OnboardEventsCleanup.getName(),\n description: OnboardEventsCleanup.getDescription(),\n execute: OnboardEventsCleanup.execute.bind(OnboardEventsCleanup),\n },\n {\n name: OnboardEventsHelp.getName(),\n description: OnboardEventsHelp.getDescription(),\n execute: OnboardEventsHelp.execute.bind(OnboardEventsHelp),\n },\n ];\n }\n}\n","/**\n * <license header>\n */\n\n/**\n * CLI entry point for aio-toolkit-onboard-events\n *\n * This will handle commands like:\n * - npx aio-toolkit-onboard-events execute\n * - npx aio-toolkit-onboard-events cleanup\n * - npx aio-toolkit-onboard-events help\n */\n\nimport { OnboardEventsManager } from '../lib/index';\n\n/**\n * Command to execute\n * @type {string}\n */\nconst command = process.argv[2] || 'help';\n\n/**\n * Additional arguments (flags and options)\n * @type {string[]}\n */\nconst args = process.argv.slice(3);\n\n/**\n * Main function to execute the command\n * @returns {Promise<void>}\n */\nasync function main(): Promise<void> {\n const result = await OnboardEventsManager.execute(command, ...args);\n console.log(result.message);\n if (!result.success) {\n process.exit(1);\n }\n}\n\n/**\n * Main function to execute the command\n * @param {Error} error - The error to log\n * @returns {Promise<void>}\n */\nmain().catch((error: Error) => {\n console.error('Error:', error.message);\n process.exit(1);\n});\n"],"mappings":"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","names":["args","command","args","OnboardEventsManager","exports","exports","path","exports","yaml","exports","exports","exports","res","exports","res","exports","anchors","exports","exports","node","exports","path","exports","exports","i","end","exports","exports","exports","exports","exports","value","exports","exports","exports","stringify","comment","str","exports","exports","map","exports","exports","seq","exports","exports","exports","exports","exports","exports","exports","require_schema","exports","exports","exports","pairs","exports","omap","require_bool","exports","require_float","exports","require_int","exports","n","exports","set","exports","res","require_schema","exports","exports","tags","exports","exports","exports","path","res","exports","exports","exports","exports","exports","exports","exports","exports","exports","exports","exports","value","end","exports","exports","tag","exports","exports","exports","exports","exports","context","exports","exports","path","exports","exports","i","ch","exports","exports","start","fs","exports","lineCounter","parse","exports","config","fetch","init_types","init_types","init_types","init_types","init_types","init_types","_List","List","init_list","init_types","statusCode","errorMessage","_Get","Get","init_get","init_types","statusCode","errorMessage","_Create","Create","create_default","init_create","init_types","statusCode","errorMessage","_Delete","Delete","init_delete","init_types","statusCode","errorMessage","init_list","init_get","init_create","init_delete","init_types","List","Get","create_default","_Create","Create","create_default","init_create","init_types","_Delete","Delete","delete_default","init_delete","init_types","_Get","Get","get_default","init_get","init_types","_List","List","list_default","init_list","init_types","init_create","init_delete","init_get","init_list","create_default","delete_default","get_default","list_default","init_types","config","config","config","exports","module","exports","module","fs","path","crypto","parse","config","config","dotenv","init_io_events","args","existingProvider","import_aio_services_kit","init_types","init_types","got","import_aio_sdk","Oauth1a","init_types","init_types","init_response","init_response","init_adobe_commerce_client","dotenv","init_commerce","init_adobe_commerce_client","init_io_events","init_commerce","dotenv","init_io_events","init_commerce","init_adobe_commerce_client","import_aio_sdk","init_io_events","init_commerce"]}
|